We just released a prototype of the cancelled SNES port of Puggsy! Take a look!
As always, thank you for supporting The Cutting Room Floor on Patreon!

Plants vs. Zombies (Windows, Mac OS X)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Plants vs. Zombies

Developer: PopCap Games
Publishers: PopCap Games (US, AU, European digital release), Mastertronic (European disc release)
Platforms: Windows, Mac OS X
Released in US: May 5, 2009
Released in EU: February 18, 2011 (GOTY Edition, disc release only)
Released in AU: April 28, 2010


AreasIcon.png This game has unused areas.
CodeIcon.png This game has unused code.
DevTextIcon.png This game has hidden development-related text.
MinigameIcon.png This game has unused modes / minigames.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
Carts.png This game has revisional differences.


ProtoIcon.png This game has a prototype article
PrereleaseIcon.png This game has a prerelease article

Hmmm...
To do:
  • More unused graphics, and are there any other revisional differences?
  • Check for any more Insaniquarium leftovers, as this game was built on top of Insaniquarium and was a sequel at one point.
  • Lots of discoveries were made recently in TCRF discord. Needs to be documented.
  • Uncompiled animation/particle files and scripts.
  • Port the debug display function to all versions of the game if possible, specifically on-screen displays.
  • Add the unused zombies.
  • Get unused code that is found in the windows phone version decomp and check if there are any equivalents found in the original version.
  • Appareantly, a demo version of the GOTY edition seems to be a possible proto of the game, maybe make a subpage of it.

Zombies have risen from the dead, and for some reason keep invading your home, not even bothering with your neighbors. To defend yourself, you must plant a variety of zombie-fighting vegetation. As crazy as it sounds, it's actually a pretty solid game.

Sub-Pages

Read about prototype versions of this game that have been released or dumped.
Prototype Info
Read about prerelease information and/or media for this game.
Prerelease Info
Pvz Vase.png
Limbo Page
An entire page of unused minigames!
PlantsVsZombies-OldLilyPad.png
Unused Graphics
There's unused graphics on your lawn!
TextIcon.png
Unused Text
Do not be alarmed. Plants are not real.

Unused Animations

Plants

PVZ Sunshroom anim big sleep.gif

An animation of the Sun-shroom sleeping while big, named anim_big_sleep.

Unused Final
PVZ Gravebuster extended planting animation.gif PVZ Gravebuster final planting animation.gif

An extended version of the Gravebuster's planting animation that has an extra bounce.

PVZ Squash unlook left.gif PVZ Squash unlook right.gif

Animations of Squash transitioning from its looking poses to its idle pose.

PVZ Magnetshroom anim nonactive idle.gif

An unused non-active version of Magnet-shroom's active idle animation, named anim_nonactive_idle.

Unused Final
PVZ Magnetshroom extended shooting animation.gif PVZ Magnetshroom final shooting animation.gif

An extended version of Magnet-shroom stealing an object from a zombie, with there being a transition going in and out of the idle animation. This version of the animation has it going back to its default pose, suggesting this and the previous animation are related.

Zombies

Pre-GOTY GOTY
PVZ Dancing zombie unpoint pregoty.gif PVZ Dancing zombie unpoint goty.gif

An animation of the Dancing Zombie exiting its pointing pose.

PVZ Snorkle zombie opening mouth.gif

An animation of the Snorkel Zombie opening its mouth in the Zombiquarium mini-game.

Debug Displays

Hmmm...
To do:
This should be possible on other versions. Test them if possible. If possible, find a way to reduce the massive lag when enabling any of them. Addresses for Music and Memory.

Present in the game executable are a couple of hidden debugging displays. Unfortunately, the game loses a LOT of frames when activating any of these, especially with 3D Acceleration enabled. It is wise to turn that off before attempting any of these, and even then the game could see framedrops to as low as 10FPS. In a memory editor, replacing the function at the following address based off the build with one that does nothing enables it. You can also use PvZToolkit if you don't want to mess with the functions on your own.

Zombie Spawning

Decimals are displayed in SS:MS (seconds to miliseconds).

Version Memory address
1.2.0.1096 (Steam GOTY, Windows) 0041C3C9
1.2.0.1073 (PopCap.com GOTY, Windows) 0041C51E
1.2.0.1073 (PopCap.com.cn GOTY, Ad) 004245EC
1.0.0.1065 (PopCap.com, Windows) 00418CD6
1.0.0.1051 (PopCap.com, Windows) 00418CC6

It displays the following in this format:

ZOMBIE SPAWNING DEBUG
CurrentWave: %d of %d
TimeSinseLastSpawn: %d %s
TimeSinseLastSpawn: %d %s (too soon)
ZombieCountDown: %d/%d (%.0f%%)
ZombieHealth: before first wave
HugeWaveCountdown: %d
ZombieHealth: CurZombieHealth %d trigger %d (%.0f%%)

Spawn: %d
Stomp: %d
Bungee: %d
Head: %d'
Health: %d of %d

CurrentWave is the current internal wave the player is on; 10 is considered a game wave, and this maxes out at 40. TimeSinseLastSpawn is the time (frames) it has been since the last zombie spawn. ZombieCountDown is the time it takes before a zombie wave begins; it increases over time. ZombieHealth is the internal health of the zombies before the next wave. CurZombieHealth is the amount of internal health a wave has. HugeWaveCountdown is the amount of seconds before the huge wave starts.

The latter set only occurs on Dr. Zomboss's Revenge or the final level. Spawn is the amount of time in seconds (SS:MS) the spawn zombie action is triggered; it can be set from 221 to 0. Stomp is the time before stomping on a nearby plant if possible, defaulting to 60:00 at the beginning. Bungee is the time it takes before using Bungee Zombies to steal plants, defaulting to around 40:00; oddly enough, this also affects throwing an RV. Head is the time it takes before Dr. Zomboss is open to attacks. Health is the health of the boss; the max is 60000, and it is defeated at 1.

PVZZombieSpawningDebugZomboss.png

Music

Hmmm...
To do:
Add descriptions of each.
MUSIC DEBUG
CurrentWave: %d of %d
Music Burst: 
Music order %02d row %02d
No music

Memory

Hmmm...
To do:
Add descriptions of each.
MEMORY DEBUG
attachments %d
emitters %d
particles %d
particle systems %d
trails %d
reanimation %d
zombies %d
plants %d
projectiles %d
coins %d
lawn mowers %d
grid items %d

Collision

COLLISION DEBUG

This does not draw any text aside from what's above, but displays the hitboxes and hurtboxes of all Plants and Zombies. Green is the hurtbox while red is the hitbox. Projectiles do not have hitboxes displayed. On plants that attack both in front of and behind them, the hitbox of the rear-facing attacks will be in pink.

Unused Music

Unused Watery Graves Section

Offsets 117 to 120 of mainmusic.mo3 contain an extra part of Watery Graves which goes unused, due to the song looping at Offset 116. These offsets contain the patterns (in this order) 99, 100, 101, and 102, as compared to the used final part of the song (offsets 113 to 116) which contain 99, 100, 101 and 103. 102 is the unused pattern here, which sounds similar to 103 except for a few different notes and the lack of "closing drums".

Offsets 117 to 120. Normal version.

Offsets 117 to 120. Horde version.

Here is a restoration of how the song should sound with these unused parts of the sequence:

Insaniquarium Deluxe Theme

There's an unused track called insaniq2.mo3 in version 1.0, which is the main theme of Insaniquarium Deluxe. Plants vs. Zombies was built off of Insaniquarium Deluxe and was originally conceived as a sequel to it, which may explain why this is here.

(Source: This guy)

Script File

#!/bin/sh
verbose=1

convert_if_candidate()
{
    if [ $verbose -eq 1 ]; then
        echo "checking $1 ..."
    fi

    [ -d "$1" ] && return;
    [ ! -f "$1" ] && return;

    echo "$1" | egrep -q ".*\.jpg$"

# change gamma for jpg files
    if [ $? -eq 0 ]; then
        convert "$1"
        continue;
    fi

    echo "$1" | egrep -q ".*\.png$"

    if [ $? -eq 0 ]; then
        convert "$1"
        continue;
    fi

    echo "$1" | egrep -q ".*\.gif$"

    if [ $? -eq 0 ]; then
        convert "$1"
        continue;
    fi

    if [ $verbose -eq 1 ]; then
        echo "skipping $1"
    fi
}

convert()
{
#   chmod u+w $1

    [ ! -f "$1" ] && return

    if [ $verbose -eq 1 ]; then
        echo "converting gamma of $1"
    fi
    /opt/local/bin/convert -gamma .8 "$1" "$1"
    [ $? -ne 0 ] && echo "error converting $1"
}

# will fail if file or path has a space in it. Probably need to do the while read thing...
for f in `find .`; do
    convert_if_candidate $f
done

# this will handle those paths with a space in them but skip everything else
find . -name '* *' | while read f; do # only reads those containing a space
    convert_if_candidate "$f"
done

Present in images on older or Mac releases is this shell script called gamma_correct_image_files.sh.

Unused Code

SexyCache

The game executable on Windows mentions working code for loading SexyCache.exe before bootup if the debugging flag is set. In the retail version, this function has no references, but in special versions, the launch command -tod can load it; otherwise, forcing the game to load it by changing a function to one that does nothing on the following address based off the build displays this message. Yes attempts to load SexyCache.exe and the game while No just loads the game. It is unknown what exactly SexyCache.exe does, as it doesn't exist in the installation root in all builds of the game.

Build Address
v1.20.1073 (PopCap.com, Windows) 00454CC5
v1.20.1073 RELEASE (JA, Windows) 00454CB7
v1.20.1096 (Steam GOTY, Windows) 004569AD

PVZPC SexyCachePopup.png

MP3 music support

The only .mp3 music used in the final build is for the ending, as every other track uses sequenced tracker music. However, the game also has functions to play mp3 music during menus and levels, and even to loop/pause streamed audio, which is not used in the ending. In the 0.1.1.1014 prototype, these functions are used, as the switch from streamed audio to tracker music was only just starting to be made.

Command-line Parameters

The game's executable mentions developer command lines for starting the game. Most are related to the framework and it's not friendly with commands using spaces, so use = instead. These are:

  • -tod: Loads the game in "cheat mode", allowing MANY cheat keys to be pressed, most cutscenes to become skippable, and more. Only works on specific builds.
  • -play: Plays popcap.dmo if its present; if not present, an error is shown. -demofile can also be used to choose the name and location of the file.
  • -recnum: Records demos with Popcap.dmo and Popcap#.dmo if that's taken on every boot.
  • -playnum: Plays demos with Popcap.dmo and Popcap#.dmo from -recnum if that's taken on every boot.
  • -record: Records a demo named Popcap.dmo and saves after shutdown of the game.
  • -demofile: Specifies filename for recorded demos.
  • -crash: Crashes the game immediately with an Access Violation error.
  • -screensaver: Makes the game act like it's a screensaver; any movement or key presses will immediately force close the game. This is a leftover from Insaniquarium Deluxe, which came with a "virtual aquarium" screensaver that showed the player's progress in that game.
  • -changedir: Changes game installation directory, for the current boot.
  • -version: Shows the product name, version, build number, and build date with a popup instead of starting the game.

Unused I, Zombie Zombies & Plants

PVZZomboniSeedPacket.png PVZPogoZombieSeedPacket.png

In the I, Zombie game mode, there exists two unused zombies which cannot be placed down in-game: the Zomboni and Pogo Zombie. Despite this, they have their own seed packet graphics, and via hacking, can be reimplemented in the game and are fully functional. Strangely, the Pogo Zombie will completely ignore the brain at the end of a lane, jumping right over it. Additionally, when 'planting' a Zomboni, it's front end will appear cut-off.

Hmmm...
To do:
Get a gif of this in action

Normally, Cabbage-pult doesn't appear in any I, Zombie levels; however, hacking it into one causes it to animate like plants in I, Zombie, suggesting that it may have once been planned to appear.

Level 6

Careful, you'll lose an eye.
This page or section needs more images.
There's a whole lotta words here, but not enough pictures. Please fix this.

An unused 6th level is present in the game, although not much of it is left. The only actual sublevel present is 6-1, which simply a duplicate of Level 5-9 but with the Day theme (as the theme this level tries to use is not present in the final game), all other sublevels in level 6 are simply duplicates of 6-1 reading from garbage data. According to pre-release material, level 6 was originally intended to be a "night roof" themed level; although there is a night roof theme in the final game, it is only used for one sublevel (5-10) and does not have an entire level dedicated to it. In the December, 2nd, 2008 prototype, this level is present with more content left, however it uses a "elevated backyard" theme from even earlier in development (as indicated by the crude background graphics), indicating that they kept the level around so they could re-use it for the night roof before the idea was scrapped entirely.

Something interesting of note is that the background graphic for Level 5-10 (the only place where the night roof theme is used) is named background6boss.png. The "day roof" background used for the rest of level 5 is called background5.png, and there is no background6.png. Although this could be thought of to be simply a quirk in the way files are named, the unsodded version of level 1's background is named background1unsodded.png (whereas the standard version is named background1.png), indicating that, following this naming convention, there was a background6.png at one point. This is confirmed in the aforementioned prototype, where background6.png is present and is used for level 6, however as mentioned previously it depicts a crude mockup of the "elevated backyard" theme. Additionally, there is also a file present named "background6_gameover_mask.png" (as compared to the day roof version of this file named "background5_gameover_mask.png"). It is unknown why background6.png and background6boss.png were made separate.

Revisional Differences

Game of the Year Edition

On August 10, 2010, a "Game of the Year" edition of the game was released (according to the readme, this edition is version 1.2.0.1073). Aside from adding new content, a few changes were made.

Michael Jackson Zombie

When the game was originally released, the Dancing Zombie and Backup Dancer Zombie looked different from how they do today. The Dancing Zombie originally resembled Michael Jackson dressed in his classic "Thriller" outfit, and the Backup Dancer Zombie resembled the backup dancers from the music video of the aforementioned song. The description of the Dancing Zombie even mentions "any resemblance between Dancing Zombie and persons living or dead is purely coincidental."

Coincidentally, Michael Jackson actually did die a little over a month after this game's release. About a year afterwards, Michael Jackson's estate objected to its inclusion. PopCap subsequently changed the designs of the Dancing Zombie and Backup Dancer Zombie out of respect to Jackson. The new Dancing Zombie resembles a stereotypical disco dancer, and the Backup Dancers have pink shirts with mustaches. The redesign has been included in the Game of the Year version, released August 10, 2010, and all other versions since. Despite being removed, the textures of the original Dancing Zombie and Backup Dancer Zombie can be found in the game's files.

Pre-GOTY GOTY
This is THRILLER! Thriller night! Disco is really dead now.
Pre-GOTY GOTY
Nice Calvin hair. I mustache you a question, but I'll dance first.
(Source: http://plantsvszombies.fandom.com/wiki/Dancing_Zombie)

Zomboni Description

In the original version of the game, the Zomboni enemy had a different description in the Suburban Almanac than it does in the GOTY edition. Judging from the current description, it was most likely changed for trademark reasons.

Original description GOTY description
Often mistaken for a zombie driving an ice machine, the Zomboni is a totally different life-form more closely related to a space ogre than a zombie. Not to be mistaken for a Zamboni® brand ice resurfacing machine. Zamboni® and the image of the ice-resurfacing machine are registered trademarks of Frank J. Zamboni & Co., Inc., and "Zomboni" is used with permission. For all your non-zombie related ice resurfacing needs, visit www.zamboni.com!
(Source: http://plantsvszombies.fandom.com/wiki/Zomboni)

Piece of Source Code

In the game's executable there's a single directory to a piece of the game's source code.

c:\Users\dfranzi\Desktop\Files\Perforce\dfranzi_SEA-10786\games\Lawn\goty\cpp\Lawn\ReleaseFinal\PlantsVsZombies.pdb

Other Additions

Achieve to believe... or something like that.
  • The Game of the Year version adds an achievement system, in which various awards are given for completing certain requirements. However, because of this, one of the game's messages is unable to be seen.
  • The Zombatar, an avatar creator, was introduced in the GOTY edition. This allows you to create your own zombie. Additionally, the accessories chosen for your Zombatar will appear on the Flag Zombie.
  • The GOTY edition adds extra music.
(Source: http://plantsvszombies.fandom.com/wiki/Game_of_the_Year_PC_Version)