We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!

Zuma's Revenge! (Windows)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Zuma's Revenge!

Developer: PopCap Games
Publisher: PopCap Games
Platforms: Windows, Mac OS X
Released in US: September 15, 2009


DevTextIcon.png This game has hidden development-related text.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.


So very stubbly.
This page is rather stubbly and could use some expansion.
Are you a bad enough dude to rescue this article?
Hmmm...
To do:
  • Figure out the HUGE boss-related settings.
  • Mac version has uncompiled effects in the effects directory.
  • Look at executable strings to see if all interesting strings were found.
  • Enable and use the debug console if possible.
  • Look at test, jeff and ben level files, most likely curve binary tests for and/or made by said developers Jeff Weinstein and Ben Lyon.

Zuma's Revenge! is the sequel to the previous ball shooter puzzle game from PopCap, with enhanced visuals and high definition graphics!

Development leftovers

Text documents

The Spanish Mac OS X distribution has two rich text documents titled level.rtf and levels_hard.rtf in the levels directory, having pretty much the exact same data as the English release, only changing \ to /. They were both written and modified around 3 PM on July 22nd, 2009 by mcoffey, most likely Mark Coffey.

Development compilation directories

C:\Documents and Settings\jeff\Desktop\
C:\work\games\Art\ZumasRevenge\Working\
C:\Documents and Settings\Architekt\Desktop\

The PAX files have some metadata which describes part of a few directories in the game. Jeff is most likely Jeff Weinstein, a programmer of many games from PopCap, "Architekt" is his alternative name, commonly seen on forums. Guess he has two user accounts.

Development text

Hmmm...
To do:
Some functions of the game have swears.

There's a lot of interesting strings.

Your boss DDS parameters were all reset. You should quit and restart.

A message displayed when all level managers are reloaded.

ADVENTURE STATS DO NOT DELETE.csv
HEROIC STATS DO NOT DELETE.csv
CHALLENGE STATS DO NOT DELETE.csv
IRON FROG STATS DO NOT DELETE.csv
ERROR.csv
users/user%d_%s_stats.dat

Possible names for save files from beta testing.

IMAGE_LEVELS_DEBUGBOSS6PART5_BKGRND
IMAGE_LEVELS_DEBUGBOSS6PART5_CHUTE1
IMAGE_LEVELS_DEBUGBOSS6PART5_CHUTE2
IMAGE_LEVELS_DEBUGBOSS6PART5_CHUTE3
IMAGE_LEVELS_DEBUGBOSS6PART3_BKGRND
IMAGE_LEVELS_DEBUGBOSS6PART3_CHUTE1
IMAGE_LEVELS_DEBUGBOSS6PART3_CHUTE2
IMAGE_LEVELS_DEBUGBOSS6PART3_CHUTE3
IMAGE_LEVELS_DEBUGBOSS6PART3_CHUTE4
IMAGE_LEVELS_DEBUGBOSS6PART3_CHUTE5
IMAGE_LEVELS_DEBUGBOSS6PART2_BKGRND
IMAGE_LEVELS_DEBUGBOSS6PART2_CHUTE1
IMAGE_LEVELS_DEBUGBOSS6PART2_CHUTE2

Mentions of "debug boss" textures that are not present in the final game.

Message
Maybe you don't care?
Unabled to load level file: 

Error message when a curve binary file is missing or improperly created.

One or more of your levels is outdated. The latest version of Zuma's Revenge
has a new option to control overall powerup frequency
and uses a weighted system to pick the one that appears.
Powerups have been disabled. Please edit your curve to fix this.
This message will only be displayed once per session.
The first level found with this error is: 

Error message for use of an older level format.

Instantly causes a game over
gameover
Causes the balls to rush towards the danger point
danger
Restarts the current level
restart
Jumps to the next level, restarts current one if no more
nextlevel
Also jumps to the next level
nl
Indicate the level ID to switch to. Example: changelevel new2
changelevel
Also changes level
cl
Displays a list of all the available levels to choose from
listlevels
Also lists levels
ll
Reparses the level xml file and restarts the current level.
reload
Hides all balls and pauses the game.
hide
Mouse cheat mode: Mouse over a ball, 0-5/DEL changes color/deletes
mcheat
Specify a resource XML file to load to replace existing sounds.
soundres
Forces the equivalent of the reverse/backwards powerup.
reverse
Toggles on/off the accuracy powerup.
accuracy
Warps to a challenge level. Specify level ID.
challenge
Nukes all balls and ends the level.
killall
Toggles if the game is paused when you lose focus.
nopause
Sets it so that the game thinks you've beaten adventure mode once.
beatgame
Unlocks this zone for play in challenge mode: the same as beating level 10 of the zone naturally.
beatzone
Sets the number of lives the player has left.
lives
Makes the game crash.
crash
Makes the game assert (and then immediately quit).
assert
Sets your score to the specified value.
score
For challenge mode only: Sets the time remaining IN SECONDS (will inc difficulty, can be float)
time
For challenge mode only: Sets ALL BUT ONE level in the zone as if it were aced (unlocks if needed)
acecup
For challenge mode only: Sets ALL BUT ONE levle in the zone as it were normally beat (unlocks if needed)
beatcup
Resets steam achievements (steam builds only)
resetsteam
Displays all unlocked Steam achievements.
showsteam
Displays all stats recoreded for this user.
showsteamstats
*** Command Console ***
Type /help for a list of commands.
^fff71f^ctrl-UP^FFFFFF^:   Scrolls the currently displayed text up a line
^fff71f^ctrl-DOWN^FFFFFF^: Scrolls the currently displayed text down a line
^fff71f^UP^FFFFFF^:        Scrolls up in the command history buffer
^fff71f^DOWN^FFFFFF^:      Scrolls down in the command history buffer
^fff71f^/clear^ffffff^:    Clears the console
^fff71f^` key^FFFFFF^:     Closes/opens this window
*** Help Menu ***
^fff71f^/help^ffffff^:     Displays this menu
^fff71f^ctrl-UP^ffffff^:   Scrolls the currently displayed text up a line
^fff71f^ctrl-DOWN^ffffff^: Scrolls the currently displayed text down a line
^fff71f^UP^ffffff^:        Scrolls up in the command history buffer
^fff71f^DOWN^ffffff^:      Scrolls down in the command history buffer
^fff71f^` key^ffffff^:     Closes/opens this window
Commands valid in the current context:
^ffffff^:
^fff71f^
/help
/clear
Error: unknown command \"

Text and commands for a debug console, titled a Command Console, only present in the Windows builds. mcheat has no references to the game, making it have no effect. resetsteam, showsteam ' and showsteamstats were added in the Steam, Final or multilingual Mac release.

Zuma's Revenge!.app/Contents/MacOS/Cheat.app
%20
open \"%s\
Popcap/Zuma's Revenge!/console.rbs

Related to the debug console but the Mac version appears to use a separate app named Cheat which isn't bundled in any way.

Hmmm...
To do:
There's a function to convert level data.
resprops\\resprops2.txt
ShaderDefaults * PSEntry=main VSEntry=main;
ImageDefaults * Group=
FontDefaults * Group=
SoundDefaults * Group=
\\
/
/../
Font
Sound
 id=
 alias=
 cols=
 rows=
 volume=
 tags=
;
Image
resprops\\resprops.txt
..\\..\\..\\..\\..\\bin\\ResourceGen2.exe
properties\\resources.xml

Text for a function to convert the game's resources.

%s\\Zuma2 Crash Data SUBMIT THIS FILE ASAP %d.zip
_
_%d_
ZUMA2 CRASH_
\\\\sea-jeff\\c\\dump\\Zuma2Crashes\\
\\\\10.1.2.181\\c\\dump\\Zuma2Crashes\\
%s\\%s %s Crash %d.mdmp
_%d_minidump.zip
crash_tmp.zip
crash %d.mdmp
There was a problem creating a zip file of your crash information.
Please report this problem at once to jeff@popcap.com. Thank you.
You appear to have crash information saved on your desktop.
This is VERY important data. You should post it to burrito,
or barring that, email it to jeff@popcap.com.
After you do that, you may delete the file. The file is ON YOUR DESKTOP and named:

Text for an alternative crash reporter. Burrito is an internal forum PopCap developers used to hitch ideas/logs and also post internal builds of games, a tool is also present. SEA likely relates to PopCap Seattle, being the main branch of the company.

Unused Challenge Mode Difficulty

Normally, each game of Challenge mode lasts only 3 minutes (18000 in game's internal timer value) and get gradually more difficult as they go along. However, in one of the game's XML files (main.pak/levels/levels.xml), the difficulty settings until 5:20 (32000 in game's internal timer value) exist:

Single curve levels:
<Difficulty time="18000" colors="6" speed=".85" startdist="50" zumascore="1550" ballrepeat="37" powerup="560" rollback="50" dangerratio="2.5" maxclumps="2" maxsingles="6" rollbackduration="0"/>
<Difficulty time="20000" colors="6" speed=".88" startdist="50" zumascore="1550" ballrepeat="37" powerup="550" rollback="50" dangerratio="2.4" maxclumps="2" maxsingles="6" rollbackduration="0"/>
<Difficulty time="22000" colors="6" speed=".92" startdist="50" zumascore="1550" ballrepeat="36" powerup="550" rollback="50" dangerratio="2.4" maxclumps="2" maxsingles="6" rollbackduration="0"/>
<Difficulty time="24000" colors="6" speed=".96" startdist="50" zumascore="1550" ballrepeat="36" powerup="560" rollback="50" dangerratio="2.3" maxclumps="2" maxsingles="6" rollbackduration="0"/>
<Difficulty time="26000" colors="6" speed=".99" startdist="50" zumascore="1550" ballrepeat="35" powerup="570" rollback="50" dangerratio="2.3" maxclumps="2" maxsingles="7" rollbackduration="0"/>
<Difficulty time="28000" colors="6" speed="1.03" startdist="50" zumascore="1550" ballrepeat="35" powerup="580" rollback="50" dangerratio="2.1" maxclumps="2" maxsingles="7" rollbackduration="0"/>
<Difficulty time="30000" colors="6" speed="1.07" startdist="50" zumascore="1550" ballrepeat="34" powerup="590" rollback="50" dangerratio="1.9" maxclumps="2" maxsingles="7" rollbackduration="0"/>
<Difficulty time="32000" colors="6" speed="1.1" startdist="50" zumascore="1550" ballrepeat="34" powerup="600" rollback="50" dangerratio="1.8" maxclumps="2" maxsingles="7" rollbackduration="0"/>
Double curve levels:
<Difficulty time="18000" colors="6" speed="0.625" startdist="50" zumascore="1550" ballrepeat="36" powerup="500" rollback="50" dangerratio="2.1" maxclumps="3" maxsingles="5" rollbackduration="0"/>
<Difficulty time="20000" colors="6" speed="0.625" startdist="50" zumascore="1550" ballrepeat="35" powerup="480" rollback="50" dangerratio="1.9" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="22000" colors="6" speed="0.65" startdist="50" zumascore="1550" ballrepeat="34" powerup="460" rollback="50" dangerratio="1.9" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="24000" colors="6" speed="0.65" startdist="50" zumascore="1550" ballrepeat="34" powerup="450" rollback="50" dangerratio="1.85" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="26000" colors="6" speed="0.675" startdist="50" zumascore="1550" ballrepeat="34" powerup="460" rollback="50" dangerratio="1.8" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="28000" colors="6" speed="0.675" startdist="50" zumascore="1550" ballrepeat="34" powerup="470" rollback="50" dangerratio="1.75" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="30000" colors="6" speed="0.7" startdist="50" zumascore="1550" ballrepeat="34" powerup="480" rollback="50" dangerratio="1.7" maxclumps="2" maxsingles="5" rollbackduration="0"/>
<Difficulty time="32000" colors="6" speed="0.725" startdist="50" zumascore="1550" ballrepeat="34" powerup="490" rollback="50" dangerratio="1.65" maxclumps="2" maxsingles="5" rollbackduration="0"/>

It's possible to extend the time limit of Challenge mode by editing the "GauntletSessionLength" property in the same XML file. After 3 minutes, the balls move even faster, the colors become more scattered, so the player will likely perish very soon.

Additionally, if you change "time" parameter to "points" parameter, the difficulty goes up based on player's score. This is described in developer's comment in levels.xml:

<!-- if you use "points" instead of "time" then when the users crosses that point threshhold the difficulty increases, otherwise it goes up over time -->

Debug Displays

Curve drawing

Unwelcoming Mat.

Most levels have a property "drawcurve" in levels.xml. Changing them to true will draw the ball path as a red line in gameplay. On Mac OS X, this only works with the final worldwide version of the game.

Tunnel drawing

Most levels have a property "drawtunnel" in levels.xml. Changing them to true, unfortunately does nothing as the function is stripped from the game.

Debug Commands

Pressing CTRL-ALT-D will play a sound (c:\windows\media\Windows XP Menu Command.wav) to indicate debug key input is enabled, allowing options of typing unique keys for debugging displays or mechanisms, another use will disable it. One was slightly added from Bejeweled Twist.

  • F3 - Draws a display for the FPS, this doesn't include mouse coordinates.

Unused Sound Effects

The loading screen has two unused sound effects.

logoappears1.ogg

This cool "Zuma!" title call voice wasn't used.

shipwreck1.ogg

The scene where the frog's ship is wrecked doesn't exist, but this sound effect suggests PopCap might have planned the said scene.

Unused Text

Kahtiki Khan
Maga Maga
Baron Digo
Kulo Komari
Cephalo Ka
Zhaka Mu
Drumstick Willie
His Crumbleness

Each boss battles have a level name, which is never displayed. The bottom 3 are each section of final boss.

Oh no! Jungle Boss is on a rampage! Blast him through holes in the curve when his shield is down. But don't let the curve reach the skull!
You've awakened Village Boss from his slumber! Use the lilypads to take shots at his heads when they glow. Be sure to keep the balls out of the skull!

Level 10 and 20 in levels.xml have a parameter called "NextLevelText", as described in developer's comment:

<!-- NEW LEVEL PARAMETER:
			NextLevelText		- In addition to displaying this round's stats, this text will be displayed so that the user
									can know what to expect on the next level. 
	-->

The idea of NextLevelText appears to be dropped early in development as they only exist in the first 2 worlds. In the final version of the game, it was replaced by boss "placard" and accompanying text of it is part of the graphics.

<!--
			++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			
			Berserk mode: This is for bosses only. This lets you alter any of the boss' parameters when his health drops
			below a certain amount. CURRENTLY, *ALL* VALUES DESCRIBED IN THE ABOVE DDS SECTION CAN BE USED AS BERSERK VALUES.
			I will list extra values below when they are added. When the boss' health drops below a threshhold you specify,
			the values are modified by the amount you set. Like the <DDS> tag, <Berserk> tags go between a <Boss> section. 
			Here's an example tag:
			
			<Berserk value="HPDecPerHit" amount="-5" HealthLimit="75"/>
			
			The number in /amount/ is ADDED to the present value of the variable. /HealthLimit/ indicates that if the boss
			previously had a health greater than or equal to this but is now less than this (i.e. you damaged him and he dropped
			below the number) then this rule should take effect. It only happens the first time the boss crosses that threshhold,
			so it won't keep constantly apply -5 to HPDecPerHit when he's below 75 health. If you have multiple entries you want
			affected at the same HealthLimit, just specify them with another <Berserk> tag, using the same HealthLimit value.
			If you wanted HPDecPerHit to change again if say the boss dropped below 30 health, you would simply add another <Berserk>
			tag like so:
			
			<Berserk value="HPDecPerHit" amount="-5" HealthLimit="30"/>
			
			Skip to the end of this file for a testbed boss for more examples on the <Berserk> section.
						
			
			SPECIAL BERSERK MOVEMENT RELATED COMMANDS:
			------------------------------------------
			You can have the boss switch to a different movement pattern completely upon berserking. This requires a berserk tag of this form:
			
			<Berserk value="movement" HealthLimit="<num>" .../>
			
			NOTE THAT YOU HAVE TO SPECIFY "movement" FOR YOUR VALUE TAG!!!! And you don't specify /amount/ or /override/.
			Set any parameters here relating to position that you normally would set up for the boss' default movement pattern.
			The following are the ONLY valid tags that can be used here: please note that their usage and combination are subject to
			the same rules as described elsewhere in this doc.
			
			startx, endx, starty, endy, x, y, x1 and y1 through infinity
			
			2 examples: This would switch movement to rail based:
			
			<Berserk value="movement" HealthLimit="60" startx="123" endx="456" y="123"/> 
			
			This would switch to waypoint based:
			
			<Berserk value="movement" HealthLimit="95" x1="175" y1="217" x2="647" y2="217"/>
			
			This will COMPLETELY wipe out the values for these previous variables (all others aren't touched, like strafe, move speed, etc etc).
			
			++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-->
<!--
	==================================================================================================================
	
	The following is a list of all valid parameters for bosses only:
	
	Common to all:
	--------------
	
		HPDec				- How much health the boss loses per shot fire. Must be multiple of 5 (each 5 indicates a 1/4 heart)
		HPDecProxBomb		- Like above but for how much health damage a proximity bomb does. IF NOT DEFINED AT ALL, DEFAULTS TO /HPDec/!
			
		ImpatientTimer		- If specified, when this time runs out the boss becomes impatient and every 10 seconds, the curve moves 10% faster,
								the boss starts firing faster and more often.
		NormalPassUnder		- If true, normal bullets don't affect the boss and he can only be hit by cannon balls.
		BombDelay			- In frames, this will make it so the proximity bomb can spawn multiple times but limited by this delay instead of the present cap
								of 1 per curve.
		X/YShake			- Makes the boss shake when hit by the specified amount. Use 0 for none.	
		CanCompact			- If "true", the boss will compact the curve when he's hit
		HeartXOff/HeartYOff	- Lets you position the location of the boss heart gauge, relative to the boss' location.
		TikiStunTime		- how long the tiki stops moving for if hit. If this is 0, the tiki will behave like the others do in regards to getting hit. 
								Only valid for moving tikis.
		tiki<num>track		- if true, this tiki follows the player, otherwise it behaves like the others do
		tiki<num>accel		- If tracking the player, this is how fast it accelerates after overshooting
		
		You can put a tiki on a rail, either vert or horiz. Just do /tiki<num>w/ or /tiki<num>h/ to set the
		rail width or height, respectively. To set the traveltime between the rail points, use /tiki<num>time/.
		
		You can setup the location and size of a wall by inserting any of the following tags still on the <BOSS> line, where the #
		symbol is an integer ID number of the wall:
		
			wall#x, wall#y	- location of the wall
			wall#w, wall#h	- width/height of the wall
			
		If you have an even number of tikis to walls, then the tikis will make the wall of the same ID disappear when hit. If you have only 1 wall but
		more than 1 tiki, you must hit all tikis to make the wall disappear.
	
		
	Specific to boss type 3 (present "Ace" style boss permutations):
	----------------------------------------------------------------
		
					USE ONLY 1 OF THE FOLLOWING MOVEMENT METHODS
					 
					MOVEMENT METHOD1
		StartX/EndX			- The boss moves horizontally between these points. He'll randomly start somewhere in between
		y					- He doesn't change Y coordinate, so just set 1 value for this
		
					MOVEMENT METHOD2
		x1/y1, x2/y2, etc	- Specify any number of paired coordinates and the boss will instantly warp between them, rather than
								picking a spot on a rail between endpoints. Hovering parameters and all other parameters are respected.										
		
		BombFreqMin/Max		- Lets you force a prox bomb to spawn every this number of balls
		BombDuration		- Lets you override how long the prox bomb powerup stays on screen for (default is 20 seconds)
		minhover/maxhover	- Min/max time to hover in place
		movespeed			- How fast he moves after hovering to the next spot
		minfire/maxfire		- Min/Max firing delay when he's hovering
	
							ONLY USE 1 OF THE FOLLOWING 3 OPTIONS:	
		stun				- how long the frog is stunned for
		poison				- how long frog is poisoned and has mouse controls inverted for
		hallucinate			- how long ball colors are messed up for 
	
			SHIELD RELATED
		UseShield			- If true, the boss gets a shield around him that is made of 4 quadrants that must be destroyed by a prox bomb.
								If false, none of the rest of the parameters matter.
		ShieldRotSpeed		- How fast (degrees per update frame) the shield SMOOTHLY rotates
		ShieldPauseTime		- Use ONLY this or ShieldRotSpeed: if set, the shield will sit still until this time elapse, then it rotates 90 degrees.
		ShieldRespawnTime	- How quickly the shield segments respawn.
		ShieldHP			- Use with the next parameter: lets you set how much HP a shield segment has. 
		BallShieldDamage	- If the above is set, then this is how much HP a normal bullet does to a shield segment. When the segment drops to 0 HP,
								it disappears for /ShieldRespawnTime/. So if you set this to 1 and /ShieldHP/ to 3, you'd need to make 3 hits
								to open the shield segment. Hitting a shield segment with a prox bomb always instantly opens it up.
		EnrageShieldRestore	- If true, the entire shield regens instantly when the boss goes berserk
			
		DrawRadius			- If true, will draw a radius that indicates a region in which, if a prox bomb goes off in, will damage the boss.
		minbullet/maxbullet	- Min/max speed of the projectiles he fires
		noflip				- Disables the ability to flip back and forth on the rail.
		subtype				- Set to 1 for how boss1 works: just fires a bullet right at the player. Set to 2 to allow the
								boss to fire multiple bullets at the player. ONLY IF SUBTYPE IS 2 WILL THE NEXT PARAMETER, 
								/maxbullets/ APPLY! Otherwise it'll be ignored.
		shottype			- If you're using subtype 2, aka multishot, this lets you set a specific type of shot to do for the boss' regular attacks.
								Specify "any" or leave blank to allow any (randomly chosen) shot type. Specify "target" to have the bullet target the player,
								specify "sine" for one of the sinusoidal variants (works for both the sine types we made), and finally the new one, specify
								"straight" to make the boss fire a perpendicular shot that isn't targeted.							
								NEW ADDITION: specify "homing" to make the projectile's X velocity track the player. Used in conjunction with /homingspeed/
		homingspeed			- A floating point value only used with homing shot type. This is how fast the missile corrects its speed.			
		shotdelay			- In MS, this is only used if firing multiple shots. This lets you make shots delayed by an amount so as to stagger them.		
		retalshotdelay		- Like the above but for retaliatory shots.
		EndHoverOnHit		- If true, when the boss is shot, he'll stop hovering and go to his next spot		
		flightspeed 		- a floating point value that overrides the speed for when the boss is hit and is fleeing immediate fleeing effect. Only valid with endhoveronhit.
		minflightdist 		- the minimum pixel distance the dude has to travel if he is fleeing in terror. Only valid with endhoveronhit.
		EnrageAmt			- Every time the boss loses this amount of health, he increments the maxbullets amount by 1
		RetalEnrageAmt		- Like above but for his retaliation shot counter				
		maxbullets			- If subtype is 2, this controls how many bullets the boss will fire when he's ready to
		retaliation			- For either subtype, when the boss is hit, this is how many shots he'll fire
		retaltype			- Retaliation shot type: set to "sine" to make the shots be sinusoidal. If you fire more than 1,
								he'll alternate firing a left/right sine pattern. If anything but "sine" he'll fire right
								at the player.
			
		THE FOLLOWING ARE ONLY USED IF /retaltype/ IS SINE:
		(Only one of these sections can be valid at a time)
			
		min/maxamp			- Sets the min/max amplitude for the sine wave function. The large the value, the taller/higher the
								sine wave goes to. Think of this as the volume of a sound wave.
		min/maxfreq			- Sets teh min/max range for the frequency of the wave shape. Think of this as how close together
								the actual humps/curves of the sine graph are. Higher values put them closer together.
		Min/MaxSineYInc		- How fast in the Y direction the bullet moves
			
		SineShotsTargetPlayer	- Only use this for vertical bosses at the moment.
		MinSineShotTime		- How long sine shots take to travel from the boss to the player, min in a range
		MaxSineShotTime		- How long sine shots take to travel from the boss to the player, max in a range
			
		CanShootBullets		- Allows the bullets to be destroyed by frog balls. haha		
			
		/FrogShield/		How long the frog shield powerup will last for
		/BossFreeze/		How long the boss freeze powerup will last for
		
		
		COLOR VAMP PARAMETERS:
		
		ColorVampire		- If true, he's a color vampire, if not, stop reading the rest of this.
		AvoidColor			- If true, the player has to AVOID hitting the boss when he's displaying the color. In that case, if you hit him with the color he's showing, he can
								regain health, if you let him. If false, you HAVE TO hit him with the displayed color. He won't regain health no matter what.
		VampHealthInc		- If avoidcolor, this is how much health he'll get back. It follows the same rules/restrictions as the /hpdec/ parameter. Ignored if not avoidcolor.
		VampColorChangeMin/Max - The min/max time for him to change colors, though he'll change after being hit regardless.
		ColorHelp			- Only valid for color vampire bosses whom you have to hit with the showing color: this is the % chance that when hit,
									the next color chosen will be the same as the 2nd ball color.
							
	
	==================================================================================================================
-->

Information on boss parameters.

	<!-- DDS tiers must be added in order. /powerpct/ is the % increase to all powerups, /slowadd/ is the extra pixel distance to add to the danger/slowdown value.
		The /speedpct/ value affects the cruising speed of the balls. Set it to 200 (200%) to make the balls go twice as fast...which would be dumb.
		Set it to 50 (50%) to make them go half as fast at cruising speed.
		
		/zumapct/ is the amount to reduce the number of points needed for zuma by. Set it to 0 to leave it the same. Set it to 50 to make the
		user only need 50% of the points to achieve zuma.
	 -->
	<!-- don't touch this. If you change the boss names for some odd reason though, the /boss/ tag will need to be updated. 
		So let's just not do that. -->
	<!-- PLEASE DON'T REMOVE THESE: You may update them and modify them to balance and stuff but leave at least
		something defined for gauntlet mode so I can continue to test it w/out crashing -->
<!-- for the PopCap logo -->
<!-- "Level" for level locked, empty/undefined for none or some overidden other DRM method -->
<!-- If this is true, we'll display the upsell if the user hits the exit button on the main menu, otherwise
	we'll just quit. Note: This will never display an upsell if you hit alt-f4 or the "x" to close the app -->
<!-- Set the number of partner logos to display in the "NumLogos" field.
	For EACH logo, make a Logo#File and a Logo#HoldTime entry. The file entry should be a path relative to the game's .exe.
	DO NOT SPECIFY A FILE EXTENSION. Supported file types are: gif, jpg, jp2, png, j2k, and limited support for tga.
	The hold time is specified in hundredths of a second, so 100 is equal to 1 second.
-->
<!--
<Integer id="NumLogos">2</Integer>

<String id="Logo1File">images/1</String>
<Integer id="Logo1HoldTime">300</Integer>

<String id="Logo2File">images/2</String>
<Integer id="Logo2HoldTime">150</Integer>
-->

Interestingly the Mac version has this information in partner.xml.

Internal project name

The internal name of the game is Zuma2, most likely Zuma Deluxe 2.