We just reached 20,000 articles on this wiki!
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

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


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.


PrereleaseIcon.png This game has a prerelease article

Hmmm...
To do:
  • Unused graphics (there's more), Limbo Page and all of the unused minigames you can access with it, Squirrel (the only unused minigame that is not accessible through the Limbo Page), and are there any other revisional differences?
  • Check for any more Insaniquarium leftovers (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.
  • A Japanese GOTY build of the game executable (1.2.0.1073 RELEASE) mentions code that is not present in the North American or other multilingual releases. For example:
    • Cheat keys support.
    • Automatically logging to text files.

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 prerelease information and/or media for this game.
Prerelease Info


PVZ Vert.gif
Insaniquarium Leftovers
Leftovers from Insaniquarium Deluxe.

Changes in GOTY 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)

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 games messages is unable to be seen (see below).
  • 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)

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

Hmmm...
To do:
Try and reword this in the future to make it easier to follow.

Offsets 117 to 120 of mainmusic.mo3 contain an extra part of Watery Graves which goes unused, because the song loops 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". This, combined with the fact that these offsets are right after the used ending of the song, means that this part of the song was likely intended to be a "second loop" of the final part of the song, which would have probably been used before the used loop (technically making the used loop the "second loop"), judging by not only the pattern numbers but the fact that it sounds awkward if you have 102 last instead of 103. This is also backed up by the fact that this "second loop" is indeed present in not just one but two earlier versions of the song posted by Laura Shigihara.

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:

Unused Text

Most of the text is stored in main.pak/properites/LawnStrings.txt.

[DOG_WALKING_ZOMBIE]
Dog Walking Zombie

[DOG_ZOMBIE]
Dog Zombie

[PROPELLER_ZOMBIE]
Propeller Zombie

Names of cut zombies.

[DOG_WALKING_ZOMBIE_DESCRIPTION]
Dog Walking Zombie description

[DOG_ZOMBIE_DESCRIPTION]
Dog Zombie description

[PROPELLER_ZOMBIE_DESCRIPTION]
Propeller Zombie description

Placeholder description text for said cut zombies above.

[ADVICE_SCARY_POTTER_TUTORIAL]
TEMP - Dave put more vases on your lawn!
[ADVICE_SHOVEL_REFRESH]
The shovel needs time to refresh before digging again

In the final game, the shovel can always be used instantly and never needs to refresh. This may have been cut to make the game easier.

[ADVICE_3_IN_A_ROW]
More vases incoming!
{STREAK} of 3 waves cleared

These lines were probably used in Level 4-5 (Vasebreaker) before Crazy Dave's proper dialog was implemented.

[ADVICE_I_ZOMBIE_PLANTS_NOT_REAL]
Do not be alarmed
Plants are not real

This text was probably used in I, Zombie puzzles before Crazy Dave's proper introductions were implemented.

[UNLOCKED_SURVIVAL_MODE]
Survival mode unlocked!
Play it from the main menu!

This suggests that Survival mode was once unlocked from a present like some other modes. Its not unlocked from a present in the final game, so this text goes unused.

[WIN_MESSAGE1]
You have defeated the Boss Zombie!

[WIN_MESSAGE2]
Congratulations!  You have most triumphantly fended off the zombie attack!  Your lawn is safe... for now!

This message was used in the pre-GOTY version, but became unused in the GOTY version; when you beat the final boss, the "achievements unlocked" screen will appear, but this message is not displayed.

[DIALOG_WARNING]
Warning

May be a placeholder.

[VASE]
Mysterious Vase
[FOUND_VASE]
You found a Mysterious Vase!
[VASE_DESCRIPTION]
Now you can play
Vasebreaker Mode!

In the final game, unlocking puzzle mode also unlocks I, Zombie and vasebreaker mode.

[MORE_SEEDS_HEADER]
More seeds?
[MORE_SEEDS_BODY]
Would you like to be able to plant more kinds of seeds?

These lines were probably used when the player was offered to increase the amount of their seed slots before Crazy Dave's dialog was introduced.

[ZOMBATAR_FINISHED_WARNING_HEADER]
WARNING!

Another warning, but this time related to the Zombatar feature.

[REPLAY_LEVEL_BODY]
Do you wish to replay level 3-4?

Shown when the demo is completed, as it ends on 3-4.

[SCARY_POTTER_10]
Vasebreaker Facebreaker

An unused Vasebreaker level.

[SQUIRRELS]
Squirrels
[ADVICE_SQUIRRELS_ONE_LEFT]
{COUNT} more squirrel to go!
[ADVICE_SQUIRRELS_LEFT]
{COUNT} more squirrels to go!
[ADVICE_SQUIRREL_ZOMBIE]
Oh no! Find all the squirrels before 
the zombie makes it to your house!

Leftovers from the cut Squirrel minigame.

[FREE_PLANTING_CHEAT]
Free Planting Cheat

Appears to be related to a planting cheat, granting the ability to plant anything, including upgrade plants nearly anywhere (dependent on the level) with no cooldown. The string can only be properly loaded on the Steam GOTY release by using a memory editor to change the function at 00412D1F with one that does nothing, doing that however, doesn't activate it, trying on other releases makes the game display the string ID.

Hmmm...
To do:
Is it possible to use both of these on retail builds of the game with modifications?
C%d
F%s
c%d
f%d-%d
F%d-%d
f%d
F%d
%d-%d
%d
OK
Invalid Level. Do 'number' or 'area-subarea' or 'Cnumber' or 'Farea-subarea'.
Enter Level

Related to a level selection cheat, text is partially removed from retail builds of the game executable.

(Debug Play)

Related to a hidden button choosing random seeds in seed selection. Present in game executable.

Limbo Page

The graveyard of cut minigames.

A hidden menu called "Limbo Page" exists in the game's code. This menu allows the players to access most of the unused minigames and hidden features. To enable "Limbo Page", change the following bytes in PvZ's process ("popcapgames1.exe" or "PlantsVsZombies.exe") by using a cheating program such as Cheat Engine.

Original version
Address Original Value Edited Value
0x42DF5D 136 144
0x42DF5E 89 144
0x42DF5F 84 144
GOTY version
Address Original Value Edited Value
0x430C80 136 144
0x430C81 88 144
0x430C82 100 144

After changing these values, a link to Limbo Page will appear at the bottom of the Mini-games/Puzzle/Survival page. Note that this also adds three other links: PAGE0, PAGE1, and PAGE3. PAGE0 is Survival, PAGE1 is the regular Minigames menu, and PAGE3 is Puzzle. Interestingly, the Zen Garden and Tree of Wisdom can also be accessed from this menu.

The minigames are:

  • Art Challenge Wall-Nut: Place Wall-Nuts in the proper spaces to create one giant Wall-Nut. This and Art Challenge Sunflower are both similar to the minigame Seeing Stars.
  • Sunny Day: Same as a normal level, but all Sun from the sky is 50 Sun instead of the normal 25.
  • Unsodded: Rows 1 and 5 cannot be planted on, but Zombies still appear in those rows.
  • Big Time: Same as a normal level, except Sunflowers, Marigolds and Wall-Nuts are all twice their normal size.
  • Art Challenge Sunflower: Place plants in the proper position to create a giant Sunflower.
  • Air Raid: A Fog Level where a lot of Balloon Zombies appear. Not to be confused with the DS-exclusive minigame of the same name.
  • Ice Level: This level is unplayable. It has six seed slots with Peashooter, Cherry Bomb, Wall-Nut, Repeater, Snow Pea, and Chomper. No zombies appear, and there is no way to reset the level. Name suggests it would have been a snowy level.
  • High Gravity: A roof level where all projectiles hit the ground due to high gravity.
  • Grave Danger: The Zombies all surface from graves, and more graves appear frequently. This behavior is similar to another minigame, Whack-a-Zombie.
  • Can You Dig It? The lawn is full of Wall-Nuts and you can only plant Peashooters. The name, "Can You Dig It?", is also used as the name of an otherwise unrelated I, Zombie level.
  • Dark Stormy Night: The same as level 4-10 in Adventure Mode, but with different plants and zombies.
  • Bungee Blitz: The same as level 5-5 in Adventure Mode. It may have been planned to be unlocked as a minigame after completing the level, like Wall-Nut Bowling or Whack-a-Zombie.
  • Intro: The beginning segment of the game.
  • Survival: Day through Roof Endless: The same as Survival: Endless, but inside the day, night, fog, and roof areas, respectively. For comparison, the only used Survival: Endless level takes place in the pool area.
  • Upsell: An advertisement for the full version of the game that is used after doing all that can be done in the trial version.
  • Squirrel: This hidden minigame is about finding 7 Squirrels by digging up Wall-Nuts. It does not appear in the Limbo Page.
(Source: Limbo Plants vs. Zombies Wikia on Limbo Page)

Squirrel

Squirrel is an unused minigame that, unlike other cut minigames, cannot be accessed through the Limbo Page. To access it, you will need Cheat Engine. First, go to ZomBotany and key in 16 in the Value bar. Click First Scan. Then go to Seeing Stars and key in 22 in the Value Bar. Click Next Scan. When the address appears, change it to 49. If you have more than 1 address in the result, repeat the steps until you get 1 result. Make sure to change the value before the "Choose your Seeds" dialogue appears.

The minigame involves digging up Wall-Nuts to find squirrels. The game ends when you find seven squirrels.

(Source: Plants vs. Zombies Wikia on Squirrel)

Unused Graphics

Hmmm...
To do:
The zombie vase is still present in the game, fully functional.

PlantsvsZombies PC Scary Pot.png

An unused zombie vase for Vasebreaker, which would produce zombies. They only come out of mystery vases in the final game.

PvsZPC Pumpkin2nddegrade.png

An unused second stage of degradation for the pumpkin, which resembles the first stage.

PlantsvsZombies PC Caltrop body2.png

Second stage of degradation of the Spikeweed.

PlantsVsZombies-OldMagnetShroom.png

Mushrooms sleeping near the pool. What appears to be an early version of Magnet-shroom can be seen at the bottom left.

PlantsVsZombies-SlotMachineMockup.png

A crude mockup of the Slot Machine minigame. One of the game's early names can also be seen, along with its old icon.

PlantsVsZombies-MainMenuVasebreakerButton.png

Vasebreaker was supposed to be accessed from the main menu. Could have possibly been meant for the web version, as Vasebreaker can be accessed from the main menu there.


PlantsVsZombies-GargantuarHelmets.png

Helmets that were supposed to be used with Gargantuars. Might have been for an early version of Giga-Gargantuar.

PlantsVsZombies-OldGatlingPea.png

An early design of Gatling Pea. Its hat and barrels have a different design.

PlantsVsZombies-OldLilyPad.png

An early, crudely drawn design of Lily Pad.

PlantsVsZombies-OldTallNut.png

An early, crudely drawn design of Tall Nut.

PlantsVsZombies-EarlyTanglekelpface.png

An early design of Tangle Kelp's face.

Zombie target hat.png Zombie target.png Zombie target body.png

Files for the console edition's multiplayer mode exist in the PC GOTY edition, but go unused due to it not including a multiplayer mode.

PvZ GOTY Store PvZIcon.png

A store item named "PvZ." This was used in the free trial version that was put on PopCap’s website, and is found in Crazy Dave’s Twiddydinkies. Clicking on it brings the player to a page where they can buy the full game.

PvZTrialTwiddydinkies.jpeg

Here is where the icon was used.

PvsZPC Quickplay.png

This "Quick Play" option goes unused in the GOTY version. However, a remnant of this can be found in the release version. If the game is played in fullscreen and on a big monitor, hovering your mouse over an area with the black bars turns your mouse into a hand. Left-clicking there will make the standard clicking sound, and nothing else will happen.

PlantsVsZombies-EarlyRoof.png

An early screenshot of the Roof. There are many differences here, such as Sunflower and Ice-shroom costing 100, Blover costing 150, Melon-pult being crudely drawn and costing 250, Potato Mine costing 50, Threepeater costing 300, and a different font being used for the level text. There are also early Lawnmowers.

PlantsVsZombies-EarlyDrZombossFight.png

An early version of the Dr. Zomboss fight. The roof appears to have had its hue changed, the Conveyor Belt looks different, and Dr. Zomboss has a different pose. The level progress bar has a different font.

PlantsVsZombies-EarlyMainmenu.png

An early version of the Main Menu. There are differences here, such as Zen Garden having its own button, a mode called "Challenges", and a vase tipped over in the background. The grave and buttons also have a different color.

PvZ GOTY Reloaded acheesements.jpg

A screenshot of the achievement menu.

PvZ GOTY Main menu mockup v2.jpg

A screenshot of the main menu.

PlantsVsZombiesGOTY-UnusedShopPage.png

Hmmm...
To do:
This unused page is actually still in the final game, unused as ever.

A screenshot of an unused shop page, featuring all of the upgrade plants.

PvZ Starfruit Eyebrow.png

A sprite for an eyebrow for Starfruit. The eyebrow can be seen on the icon for the minigame Seeing Stars, as well as on its seed packet in the mobile versions of the game.

Obscured Graphics

PvZ PC Cattail head.png

The Cattail's head cannot be fully seen because of the hat it wears. This is what it looks like.

PvZ PC Umbrellaleaf body.png

The Umbrella Leaf's body, without it being obscured by leaves.

PVZ CrazyDave body2.png

There is some skin on Crazy Dave's leg sprites that can't be seen by normal means.

PvZZomboniMullet.png

The Zomboni has a Mullet underneath the driver's beanie.

PvZGatlingPeaHead.png

The Gatling Pea has a full head under his helmet.

PvZImitaterFullBody.png

The Imitater's full body, without the beret he wears.

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

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.