If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Peggle Deluxe (Windows, Mac OS X)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Peggle Deluxe

Developer: PopCap Games
Publisher: PopCap Games
Platforms: Windows, Mac OS X
Released internationally: February 27, 2007


AreasIcon.png This game has unused areas.
CodeIcon.png This game has unused code.
DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
ItemsIcon.png This game has unused items.
Sgf2-unusedicon1.png This game has unused abilities.
MusicIcon.png This game has unused music.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.


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

Peggle Deluxe takes you on a magical adventure to bounce a ball onto other balls.

Hmmm...
To do:
  • There's a function relating to cheats relating to names in the Mac version; developer cheat toggle?
  • Owl.dat was modified in the February 19, 2008 installer for PC and carried over in all later versions.
  • Beat 5 may be used? Look into further, may be low chance easter egg or triggered by a bug.

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
PeggleTennisRacketLevel.png
Unused levels
PopCap wasn't having a ball with these.

Installer Directory

In the Korean version, an installer directory remained, containing material related to packaging the game into an installer, it also has two scripts for building one.

@REM ********************************************************
@REM ** This file creates the base least-common-denominator
@REM ** build from which all partner builds are derived.
@REM **
@REM *********************************************************

@SET LangCode=ko-KR

@SET BaseExeName=PeggleSetup_%LangCode%.exe
@SET BaseFileDirectory=Peggle Deluxe
@SET FontFolder=fonts_%LangCode%

@REM *********************************************************

mkdir Filez
rd /q /s Filez
@if ErrorLevel 2 goto CopyFailed
mkdir Filez
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\Peggle.exe "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

rem xcopy ..\..\Peggle.scr "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\bass.dll "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\j2k-codec.dll "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

copy license.txt "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

copy readme.html "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\characters\"
copy ..\..\characters\*.* "Filez\%BaseFileDirectory%\characters\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\%FontFolder%\"
copy ..\..\%FontFolder%\*.* "Filez\%BaseFileDirectory%\%FontFolder%\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\images\"
xcopy /s ..\..\images\*.* "Filez\%BaseFileDirectory%\images\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\levels\"
copy ..\..\levels\*.* "Filez\%BaseFileDirectory%\levels\"
xcopy ..\..\levels\cached_thumbnails\* "Filez\%BaseFileDirectory%\levels\cached_thumbnails\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\leveleditor\"
copy ..\..\leveleditor\*.cfg "Filez\%BaseFileDirectory%\leveleditor\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\music\"
copy ..\..\music\*.* "Filez\%BaseFileDirectory%\music\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\default.xml "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\partner.xml "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\resources.xml "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\partner_logo*.* "Filez\%BaseFileDirectory%\properties\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\trailer\"
copy ..\..\trailer\*.* "Filez\%BaseFileDirectory%\trailer\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\sounds\"
copy ..\..\sounds\*.* "Filez\%BaseFileDirectory%\sounds\"
@if ErrorLevel 1 goto CopyFailed
del "Filez\%BaseFileDirectory%\sounds\cached*.*"

cd "Filez\%BaseFileDirectory%\"
del /s Entries
del /s Repository
del /s Root
del /s Thumbs.db
del /s .#*
cd ..\..\

@REM ******************
@REM * Sign XML files *
@REM ******************
%BinPath%\SignFile -setsigcode="Filez\%BaseFileDirectory%\%SignVerExe%" "Filez\%BaseFileDirectory%\properties\partner.xml"
%BinPath%\SignFile -setsigcode="Filez\%BaseFileDirectory%\%SignVerExe%" "Filez\%BaseFileDirectory%\properties\default.xml"

\bin\poppak /P "Filez\%BaseFileDirectory%\main.pak" "PakFilez\%BaseFileDirectory%"
@if ErrorLevel 1 goto PakFailed

\bin\popinstall installer.xml %BaseExeName%
@if ErrorLevel 1 goto InstallerFailed
@goto Done

@REM *********************************************************

:CopyFailed
@echo.
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@echo !!!!  FAILED TO COPY FILES  !!!!
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@goto Done

:InstallerFailed
@echo.
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@echo !!!!  FAILED TO BUILD INSTALLER  !!!!
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@goto Done

:Done
PAUSE
@REM ********************************************************
@REM ** This file creates the base least-common-denominator
@REM ** build from which all partner builds are derived.
@REM **
@REM *********************************************************

@SET LangCode=ko-KR

@SET BaseExeName=PeggleSetup_%LangCode%.exe
@SET BaseFileDirectory=Peggle Deluxe
@SET SignVerExe=Peggle.exe
@SET BinPath=c:\bin
@SET FontFolder=fonts_%LangCode%

@REM *********************************************************

mkdir Filez
rd /q /s Filez
@if ErrorLevel 2 goto CopyFailed
mkdir Filez
@if ErrorLevel 1 goto CopyFailed

mkdir PakFilez
rd /q /s PakFilez
@if ErrorLevel 2 goto CopyFailed
mkdir PakFilez
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\Peggle.exe "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

rem xcopy ..\..\Peggle.scr "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\bass.dll "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

xcopy ..\..\j2k-codec.dll "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

copy license.txt "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

copy readme.html "Filez\%BaseFileDirectory%\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************
REM *                 CHARACTERS SECTION                   *
REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\characters\"
copy ..\..\characters\*.* "PakFilez\%BaseFileDirectory%\characters\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\%FontFolder%\"
copy ..\..\%FontFolder%\*.* "PakFilez\%BaseFileDirectory%\%FontFolder%\"
@if ErrorLevel 1 goto CopyFailed

mkdir "PakFilez\%BaseFileDirectory%\images\"
xcopy /s ..\..\images\*.* "PakFilez\%BaseFileDirectory%\images\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************
REM *                 LEVELS SECTION                       *
REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\levels\"
mkdir "PakFilez\%BaseFileDirectory%\levels\cached_thumbnails\"
copy ..\..\levels\*.* "PakFilez\%BaseFileDirectory%\levels\"
copy ..\..\levels\cached_thumbnails\*.* "PakFilez\%BaseFileDirectory%\levels\cached_thumbnails\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\leveleditor\"
copy ..\..\leveleditor\*.cfg "PakFilez\%BaseFileDirectory%\leveleditor\"
@if ErrorLevel 1 goto CopyFailed

mkdir "Filez\%BaseFileDirectory%\music\"
copy ..\..\music\*.* "Filez\%BaseFileDirectory%\music\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************
REM *                 PROPERTIES SECTION                   *
REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\properties\"
copy ..\..\properties\*.xml "PakFilez\%BaseFileDirectory%\properties\"
del "PakFilez\%BaseFileDirectory%\properties\partner.xml"
del "PakFilez\%BaseFileDirectory%\properties\default.xml"

mkdir "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\partner.xml "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\default.xml "Filez\%BaseFileDirectory%\properties\"
copy ..\..\properties\partner_logo*.* "Filez\%BaseFileDirectory%\properties\"
@if ErrorLevel 1 goto CopyFailed

REM ********************************************************

mkdir "PakFilez\%BaseFileDirectory%\trailer\"
copy ..\..\trailer\*.* "PakFilez\%BaseFileDirectory%\trailer\"
@if ErrorLevel 1 goto CopyFailed

mkdir "PakFilez\%BaseFileDirectory%\sounds\"
copy ..\..\sounds\*.* "PakFilez\%BaseFileDirectory%\sounds\"
@if ErrorLevel 1 goto CopyFailed
del "Filez\%BaseFileDirectory%\sounds\cached*.*"

cd "Filez\%BaseFileDirectory%\"
del /s Entries
del /s Repository
del /s Root
del /s Thumbs.db
del /s .#*
cd ..\..\

cd "PakFilez\%BaseFileDirectory%\"
del /s Entries
del /s Repository
del /s Root
del /s Thumbs.db
del /s .#*
cd ..\..\

@REM ******************
@REM * Sign XML files *
@REM ******************
%BinPath%\SignFile -setsigcode="Filez\%BaseFileDirectory%\%SignVerExe%" "Filez\%BaseFileDirectory%\properties\partner.xml"
rem %BinPath%\SignFile -setsigcode="Filez\%BaseFileDirectory%\%SignVerExe%" "Filez\%BaseFileDirectory%\properties\default.xml"

\bin\poppak /P "Filez\%BaseFileDirectory%\main.pak" "PakFilez\%BaseFileDirectory%"
@if ErrorLevel 1 goto PakFailed

\bin\popinstall installer.xml %BaseExeName%
@if ErrorLevel 1 goto InstallerFailed
@goto Done

@REM *********************************************************

:CopyFailed
@echo.
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@echo !!!!  FAILED TO COPY FILES  !!!!
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@goto Done

:InstallerFailed
@echo.
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@echo !!!!  FAILED TO BUILD INSTALLER  !!!!
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@goto Done

:PakFailed
@echo.
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@echo !!!!  FAILED TO GENERATE PAK FILE   !!!!
@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@goto Done

:Done

Leftover Web Demo Level Images

Images of layouts for a few levels from the web demo, in the cached_thumbnails folder.

level12web:

Peggledeluxe level12web.png

level18web:

Peggledeluxe level18web.png

level19aweb:

Peggledeluxe level19aweb.png

slides:

Peggledeluxe slides.png

Unused Powerups

Hmmm...
To do:
Better videos for Time Bomb and Nudge.

In the executable code, there are three powerups not used by any character. By making simple replacements to their used powerups in the master character config, they can be used.

Time Bomb

After shooting the ball, pressing the mouse will make a big explosion hitbox around the ball and then end that ball's run. The powerup also uses the unused Explode sound below.

Nudge

This powerup is usable for a set amount of time per shot by a mouse press and gradually increases the height of the ball. Activating another green peg does not award the 25,000 point bonus for activating two in one shot.

Shot Extender

This powerup activates upon losing a ball, letting you shoot the same ball again, keeping meter score and all hit pegs active as well. Activating another green peg with the extra shot counts towards the 25,000 point bonus.

Unused Sounds

Generic Powerup

A generic powerup sound. Quite similar to a sound in Zuma. Used when obtaining the unused Shot Extender power.

Bucket Hit

A rather springy sounding bucket hit sound. It might have been for hitting the Free Ball Bucket.

Explode

An cartoonish explosion sound. Used when activating the unused Time Bomb power. Interestingly, it was later used in the Peggle Extreme for the title screen.

Multiball

An early sound for activating the multiball powerup.

Unused Music

Beat 10

Beat 10 is quite similar to another beat that is heard in the game, but this version is unused.

Beat 5

Beat 5 is played in the downloadable version of the game on PopCap's site, but not in the Steam version.

Unused Graphics

A red-and-white checkered frame.
Peggle Deluxe Frameb1.png

A very pixely stickynote with "TIP" written on it.

PeggleDeluxe-Tip orig-steam.gif

A star in a circle.
Peggle Deluxe StarbadgeIcon.png

A logo placeholder for third-party distributors.
Peggle title partner.png

Leftover Debug Keys

  • At the loading screen if "B" is pressed, the ball bounce animation will play.
  • Holding CTRL and clicking "CLICK TO PLAY!" at the loading screen on Windows will load a blank level.

Command-line Parameters

The game's executable mentions developer command lines for starting the game. It's not friendly with commands using spaces, so use = instead. It shares most of the usable parameters from Plants vs. Zombies, though one has been altered and another is entirely new. Note this does not work on Mac OS as the framework port didn't support them at the time.

  • -screensaver: Immediately loads the game into screensaver mode. The game is automatically played by the computer, and moving the mouse or pressing any key quits the game. Also of note is that the loading text says Starting Screensaver.
  • -replay: Immediately loads a specified replay file after bootup (you must target the proper directory of a replay file to load it, or else nothing happens). Also of note is that the loading text says Loading Replay instead.

Unused Code

Level Editor

Hmmm...
To do:
The logic is present in the executable but inaccessible from normal means, perhaps it's possible to recover it.

Text for a level editor can be found in main.pak. This level editor is found within the game's prototype.

IncludeFile: LevelEditor_Types.cfg

Group BrickDef
{
	Val: Type,				brickdef_type
	Val: Radius,			brickdef_radius
	Val: Angle,				brickdef_angle
	Val: Thickness,			brickdef_thickness
	Val: Rotation,			brickdef_rotation
	Val: Subdivisions,		brickdef_subdiv
	Val: LeftAngle,			brickdef_leftangle
	Val: RightAngle,		brickdef_rightangle
}

Group Brick
{
	Val: Type,				brick_type
	Val: Radius,			brick_radius
	Val: Angle,				brick_angle
	Val: Thickness,			brick_thickness
	Val: Rotation,			brick_rotation
	Val: Subdivisions,		brick_subdiv
	Val: Anchor,			brick_anchor
}

Group "Brick\nAdvanced"
{	
	Val: TextureFlip,		brick_texflip
	Val: LeftAngle,			brick_leftangle
	Val: RightAngle,		brick_rightangle
}

Group Dimensions
{
	Val: x-pos,				physobj_xpos
	Val: y-pos,				physobj_ypos
	Val: Radius,			ball_radius
	Val: Width,				poly_width
	Val: Height,			poly_height
	Val: Align,				physobj_align
}

Group Grid
{
	Val: Size,			grid_size
	Val: Width,			grid_width
	Val: Height,		grid_height
	Val: x-off,			grid_x
	Val: y-off,			grid_y
	Val: zoom,			grid_zoom
}

Group Hole
{
	Val: Score,			hole_score
	Val: Width,			poly_width
	Val: Height,		poly_height
	Val: Circular,		hole_circular
	Val: Out Delay,		hole_outdelay
}

Group Id
{
	Val: Id,			physobj_id
	Val: SubId,			physobj_subid
	Val: Logic,			physobj_logic
	Val: BaseObj,		physobj_baseobj
}

Group Image
{
	Val: Name,			physobj_image
	Val: center-dx,		physobj_imagedx
	Val: center-dy,		physobj_imagedy
	Val: Rotation,		physobj_imagerot
	Val: Mirror,		poly_imagemirror
	Val: Background,	physobj_background
	Val: Foreground,	physobj_foreground
	Val: Foreground2,	physobj_foreground2
}

Group Material
{	
	Val: Visible,			physobj_visible
	Val: Collidable,		physobj_collidable
	Val: Bouncy,			physobj_bouncy
	Val: Rolly,				physobj_rolly
	Val: SolidColor,		physobj_solidcolor
	Val: OutlineColor,		physobj_outlinecolor
	Val: Sound,				physobj_sound
	Val: StopReset,			physobj_ballstopreset
}

Group Material2
{	
	Val: MaxBounceVel,		physobj_maxbouncevel
	Val: DrawSort,			physobj_drawsort
	Val: DrawFloat,			physobj_drawfloat
	Val: FlipperFlags,		physobj_flipperflags
}

Group Movement
{
	Val: Type,			mover_type
	Val: Moving,		physobj_moving
	Val: Radius,		mover_radius
	Val: Time,			mover_time
	Val: Phase,			mover_phase
	Val: Rotation,		mover_rotation
	Val: y-radius,		mover_radius2
	Val: MaxAngle,		mover_maxangle
}	

Group "Movement\nAdvanced"
{
	Val: Offset,		mover_offset
	Val: Pause 1,		mover_pause1
	Val: Phase 1,		mover_phase1
	Val: Pause 2,		mover_pause2
	Val: Phase 2,		mover_phase2
	Val: Post Phase,	mover_postdelayphase
	Val: Path Rotate,	mover_moverotation
}

Group "Peg"
{
	Val: Type,			peg_type
	Val: Variable,		peg_variable
	Val: Crumble,		peg_crumble
}

Group Poly
{
	Val: Rotation,		poly_rotation
	Val: Scale,			poly_scale
	Val: NormalDir,		poly_normaldir
	Val: Convex,		poly_convex
	Val: GrowType,		poly_growtype
}

Group Types
{
	Val:		Display,				display_flags
	Val:		Selection,				select_flags
	Val:		Num Pegs,				count_pegs
	Val:		Num BallPegs,			count_ballpegs
	Val:		Num BrickPegs,			count_brickpegs
}

Choice ball_radius
{
	Vals: 3,5
	Sep: 16
	Val: 6, Ball Standard
	Val: 10, Peg Standard
	Sep: 16
	Vals: 15,20,25,30,35,40,45,50,75,100
}

Choice brick_anchor
{
	Val: 0, No Anchor
	Val: 1, Left Anchor
	Val: 2, Right Anchor
	Val: 3, Both Anchor
}

Choice brick_radius
{
	Vals: 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500,600,700,800,900,1000,1250,1500,1750,2000,2500,3000,3500,4000,4500,5000,7500,10000
}

Choice brick_subdiv
{
	Vals: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
}

Choice brick_type
{
	Val: 0, Normal Curved
	Val: 1, Outer Curved
	Val: 2, Outer Curved 90
	Val: 3, Inner Curved
	Val: 4, Inner Curved 90
	Val: 5, Straight
}

Choice brick_thickness
{
	Vals: 10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100
}

Choice choice_time
{
	Vals: 50, 100, 150, 200, 250, 300, 500, 750, 1000, 1500, 2000, 3000, 5000, 10000
}

Choice choice_moveradius
{
	Vals: 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500
}

Choice choice_percent
{
	Vals: 0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95
}

Choice choice_angle
{
	Vals: 0, 30, 45, 60
	Sep:  16

	Vals: 90, 120, 135, 150
	Sep:  16
	
	Vals: 180, 210, 225, 240
	Sep:  16
	
	Vals: 270, 300, 315, 330
}

Choice type_flags
{
	Val:	0000,			All

	Val:	0003,			BallPegs		
	Val:	0005,			BrickPegs
	Sep:	16	
	Val:	0001,			Pegs
	Val:	0002,			Balls			
	Val:	0004,			Bricks
	Val:	0008,			Image
	Val:	0020,			NonVariable
	Val:	0040,			Crumble
	Sep:	16
	Val:	1000,			NonPegs
	Val:	2000,			NonBalls			
	Val:	4000,			NonBricks
	Val:	8000,			NonImages
}
	
Choice grid_size
{
	Val: 1, 5x5
	Val: 2, 10x10
	Val: 3, 15x15
	Val: 4, 20x20
	Val: 5, 25x25
	Val: 6, 30x30
	Val: 7, 35x35
	Val: 8, 40x40
	Val: 9, 45x45
	Val: 10, 50x50
}	

Choice grid_zoom
{
	Vals: 1.0
	Sep: 16
	Vals: 0.25, 0.5, 0.75
	Sep: 16
	Vals: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}

Choice help_keyboard
{		
	Val: a - Force autosave
	Val: b - Add brick
	Val: e - Attach bricks to selected brick
	Val: c - Copy selected object attributes
	Val: d - Toggle drag mode
	Val: D - Toggle center point drag mode
	Val: f - Flip (top-bottom) selected
	Val: F - Flip (top-bottom) selected (pos only)
	Val: g - Toggle grid
	Val: h - Set hole teleport
	Val: H - Unset hole teleport
	Val: i - Toggle image drag mode
	Val: I - Load image 
	Val: j - Join objects for movement
	Val: J - Unjoin objects for movement
	Val: k - Toggle peg ordering mode
	Val: l - Add line
	Val: m - Show movement on selected objects
	Val: M - Hide movement on selected objects
	Val: n - Copy current brick attributes to def brick attributes
	Val: o - Toggle outline mode
	Val: p - Add polygon
	Val: P - Reverse selected polygon's Direction
	Val: r - Reflect (left-right) selected
	Val: R - Reflect (left-right) selected (pos only)
	Val: s - Toggle single select mode
	Val: t - Reset movement time
	Val: v - Add brick and change direction
	Val: z - Bring to front
	Val: Z - Bring to back
	Sep: 16
	Val: ?			 - Keyboard help
	Val: <period>    - Toggle DrawPoints
	Val: <comma>     - Toggle DrawSelection
	Val: <semicolon> - Toggle Multi-Place
	Val: <space>     - Pause
	Sep: 16
	Val: CTRL-A - Add edit fields
	Val: CTRL-SHIFT-A: Remove edit fields
	Val: CTRL-C - Copy
	Val: CTRL-G - Toggle grid
	Val: CTRL-M - Turn of all movement drawing
	Val: CTRL-N - Make new level
	Val: CTRL-O - Reload Images
	Val: CTRL-R - Inspect AutoSaves
	Val: CTRL-T - Reset movement time
	Val: CTRL-V - Paste
	Val: CTRL-X - Cut
	Val: CTRL-Z - Undo	
}

Choice mover_type
{		
	Val:	0,	No Movement
	Val:	1,	Vertical Cycle
	Val:	2,	Horizontal Cycle
	Val:	3,	Circle	
	Val:	4,  Horizontal Infinity
	Val:	5,	Verical Infinity
	Val:	6,	Horizontal Arc
	Val:	7,	Vertical Arc
	Val:	8,	Rotate
	Val:	9,	Rotate Back And Forth
	Val:	11,	Vertical Wrap
	Val:	12, Horizontal Wrap
	Val:	13, Rotate Around Circle
}

Choice peg_type
{
	Val:	0, None
	Val:	1, Normal
	Val:	2, Goal
	Val:	3, Score
	Val:	4, Powerup
}

Choice physobj_align
{
	Val: 22, MiddleCenter

	Sep: 16
	Val: 01, Left
	Val: 02, Center
	Val: 03, Right

	Sep: 16	
	Val: 10, Top
	Val: 20, Middle
	Val: 30, Bottom

	Sep: 16
	Val: 11, TopLeft
	Val: 12, TopCenter
	Val: 13, TopRight

	Sep: 16
	Val: 21, MiddleLeft
	Val: 22, MiddleCenter
	Val: 23, MiddleRight
	
	Sep: 16
	Val: 31, BottomLeft
	Val: 32, BottomCenter
	Val: 33, BottomRight
}

Choice physobj_bouncy
{
	Val:	0,			Default
	Sep:	16
	Val:	0.90,		Ball Standard
	Val:	0.80,		Semi Bouncy
	Val:	0.75,		Poly Standard
	Val:	0.65,		Less Bouncy
	Val:	0.55,		Little Bounce
}

Choice physobj_flipperflags
{
	Val:	0,			Default
	Sep:	16
	Val:	1,			Off
	Val:	2,			On
}

Choice poly_normaldir
{
	
	Val:	" 1",  Keep Out
	Val:	"-1",  Keep In
	Val:	" 0",  Both
}

Choice poly_growtype
{
	
	Val:	"0",  None
	Val:	"1",  reveal-left-to-right
	Val:	"2",  reveal-right-to-left
	Val:	"3",  move-left-to-right
	Val:	"4",  move-right-to-left
	Val:	"5",  middle-out
}

Choice poly_size
{
	Vals: 5,10,15,20,25,30,35,40,45,50,75,100,150,200,250,300,350,400,450,480,500,640
}

Choice poly_scale
{
	Vals: 0.1, 0.2, 0.25, 0.33, 0.5, 0.67, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 4.0, 5.0, 10.0	
}

Choice choice_color
{
	Val:	0x000000,			Transparent
	Val:	0xFFFFFF,			White
	Val:	0x000001,			Black
	Val:	0xFF0000,			Red
	Val:	0x00FF00,			Green
	Val:	0x0000FF,			Blue
	Val1:	"",------------------------------
	Val:	0xF0F8FF,			AliceBlue            	
	Val:	0xFAEBD7,			AntiqueWhite         	
	Val:	0x00FFFF,			Aqua                 
	Val:	0x7FFFD4,			Aquamarine           
	Val:	0xF0FFFF,			Azure                
	Val:	0xF5F5DC,			Beige                
	Val:	0xFFE4C4,			Bisque               	
	Val:	0x000000,			Black                	
	Val:	0xFFEBCD,			BlanchedAlmond       	
	Val:	0x0000FF,			Blue                 
	Val:	0x8A2BE2,			BlueViolet           
	Val:	0xA52A2A,			Brown                
	Val:	0xDEB887,			BurlyWood            
	Val:	0x5F9EA0,			CadetBlue            
	Val:	0x7FFF00,			Chartreuse           
	Val:	0xD2691E,			Chocolate            
	Val:	0xFF7F50,			Coral                
	Val:	0x6495ED,			CornflowerBlue       
	Val:	0xFFF8DC,			Cornsilk             
	Val:	0xDC143C,			Crimson              
	Val:	0x00FFFF,			Cyan                 
	Val:	0x00008B,			DarkBlue             
	Val:	0x008B8B,			DarkCyan             
	Val:	0xB8860B,			DarkGoldenrod        
	Val:	0xA9A9A9,			DarkGray             
	Val:	0x006400,			DarkGreen            
	Val:	0xBDB76B,			DarkKhaki            
	Val:	0x8B008B,			DarkMagenta          
	Val:	0x556B2F,			DarkOliveGreen       
	Val:	0xFF8C00,			DarkOrange           
	Val:	0x9932CC,			DarkOrchid           
	Val:	0x8B0000,			DarkRed              
	Val:	0xE9967A,			DarkSalmon           
	Val:	0x8FBC8B,			DarkSeaGreen         
	Val:	0x483D8B,			DarkSlateBlue        
	Val:	0x2F4F4F,			DarkSlateGray        
	Val:	0x00CED1,			DarkTurquoise        
	Val:	0x9400D3,			DarkViolet           
	Val:	0xFF1493,			DeepPink             
	Val:	0x00BFFF,			DeepSkyBlue          
	Val:	0x696969,			DimGray              
	Val:	0x1E90FF,			DodgerBlue           
	Val:	0xB22222,			Firebrick            
	Val:	0xFFFAF0,			FloralWhite          
	Val:	0x228B22,			ForestGreen          
	Val:	0xFF00FF,			Fuchsia              
	Val:	0xDCDCDC,			Gainsboro            
	Val:	0xF8F8FF,			GhostWhite           
	Val:	0xFFD700,			Gold                 
	Val:	0xDAA520,			Goldenrod            
	Val:	0x808080,			Gray                 
	Val:	0x008000,			Green                
	Val:	0xADFF2F,			GreenYellow          
	Val:	0xF0FFF0,			Honeydew             
	Val:	0xFF69B4,			HotPink              
	Val:	0xCD5C5C,			IndianRed            
	Val:	0x4B0082,			Indigo               
	Val:	0xFFFFF0,			Ivory                
	Val:	0xF0E68C,			Khaki                
	Val:	0xE6E6FA,			Lavender             
	Val:	0xFFF0F5,			LavenderBlush        
	Val:	0x7CFC00,			LawnGreen            
	Val:	0xFFFACD,			LemonChiffon         
	Val:	0xADD8E6,			LightBlue            
	Val:	0xF08080,			LightCoral           
	Val:	0xE0FFFF,			LightCyan            
	Val:	0xFAFAD2,			LightGoldenrodYellow 
	Val:	0xD3D3D3,			LightGray            
	Val:	0x90EE90,			LightGreen           
	Val:	0xFFB6C1,			LightPink            
	Val:	0xFFA07A,			LightSalmon          
	Val:	0x20B2AA,			LightSeaGreen        
	Val:	0x87CEFA,			LightSkyBlue         
	Val:	0x778899,			LightSlateGray       
	Val:	0xB0C4DE,			LightSteelBlue       
	Val:	0xFFFFE0,			LightYellow          
	Val:	0x00FF00,			Lime                 
	Val:	0x32CD32,			LimeGreen            
	Val:	0xFAF0E6,			Linen                
	Val:	0xFF00FF,			Magenta              
	Val:	0x800000,			Maroon               
	Val:	0x66CDAA,			MediumAquamarine     
	Val:	0x0000CD,			MediumBlue           
	Val:	0xBA55D3,			MediumOrchid         
	Val:	0x9370DB,			MediumPurple         
	Val:	0x3CB371,			MediumSeaGreen       
	Val:	0x7B68EE,			MediumSlateBlue      
	Val:	0x00FA9A,			MediumSpringGreen    
	Val:	0x48D1CC,			MediumTurquoise      
	Val:	0xC71585,			MediumVioletRed      
	Val:	0x191970,			MidnightBlue         
	Val:	0xF5FFFA,			MintCream            
	Val:	0xFFE4E1,			MistyRose            
	Val:	0xFFE4B5,			Moccasin             
	Val:	0xFFDEAD,			NavajoWhite          
	Val:	0x000080,			Navy                 
	Val:	0xFDF5E6,			OldLace              
	Val:	0x808000,			Olive                
	Val:	0x6B8E23,			OliveDrab            
	Val:	0xFFA500,			Orange               
	Val:	0xFF4500,			OrangeRed            
	Val:	0xDA70D6,			Orchid               
	Val:	0xEEE8AA,			PaleGoldenrod        
	Val:	0x98FB98,			PaleGreen            
	Val:	0xAFEEEE,			PaleTurquoise        
	Val:	0xDB7093,			PaleVioletRed        
	Val:	0xFFEFD5,			PapayaWhip           
	Val:	0xFFDAB9,			PeachPuff            
	Val:	0xCD853F,			Peru                 
	Val:	0xFFC0CB,			Pink                 
	Val:	0xDDA0DD,			Plum                 
	Val:	0xB0E0E6,			PowderBlue           
	Val:	0x800080,			Purple               
	Val:	0xFF0000,			Red                  
	Val:	0xBC8F8F,			RosyBrown            
	Val:	0x4169E1,			RoyalBlue            
	Val:	0x8B4513,			SaddleBrown          
	Val:	0xFA8072,			Salmon               
	Val:	0xF4A460,			SandyBrown           
	Val:	0x2E8B57,			SeaGreen             
	Val:	0xFFF5EE,			SeaShell             
	Val:	0xA0522D,			Sienna               
	Val:	0xC0C0C0,			Silver               
	Val:	0x87CEEB,			SkyBlue              
	Val:	0x6A5ACD,			SlateBlue            
	Val:	0x708090,			SlateGray            
	Val:	0xFFFAFA,			Snow                 
	Val:	0x00FF7F,			SpringGreen          
	Val:	0x4682B4,			SteelBlue            
	Val:	0xD2B48C,			Tan                  
	Val:	0x008080,			Teal                 
	Val:	0xD8BFD8,			Thistle              
	Val:	0xFF6347,			Tomato               
	Val:	0xFFFFFF,			Transparent          
	Val:	0x40E0D0,			Turquoise            
	Val:	0xEE82EE,			Violet               
	Val:	0xF5DEB3,			Wheat                
	Val:	0xFFFFFF,			White                
	Val:	0xF5F5F5,			WhiteSmoke           
	Val:	0xFFFF00,			Yellow               	
	Val:	0x9ACD32,			YellowGreen          
}			

IncludeFile: LevelEditor_Choices.cfg

Num:		ball_radius

Num:		brick_radius
Num:		brick_angle,		local,			choice_angle
Num:		brick_leftangle,	local,			choice_angle
Num:		brick_rightangle,	local,			choice_angle
Num:		brick_thickness
Num:		brick_rotation,		local,			choice_angle
Num:		brick_subdiv
Num:		brick_type
Num:		brick_anchor
Bool:		brick_texflip

Num:		brickdef_radius,		global,			brick_radius
Num:		brickdef_angle,			global,			choice_angle
Num:		brickdef_leftangle,		global,			choice_angle
Num:		brickdef_rightangle,	global,			choice_angle
Num:		brickdef_thickness,		global,			brick_thickness
Num:		brickdef_rotation,		global,			choice_angle
Num:		brickdef_subdiv,		global,			brick_subdiv
Num:		brickdef_type,			global,			brick_type

Num:		count_pegs,				global
Num:		count_ballpegs,			global
Num:		count_brickpegs,		global
Hex4:		select_flags,			global,			type_flags
Hex4:		display_flags,			global,			type_flags

Num:		grid_width,				global
Num:		grid_height,			global
Num:		grid_x,					global
Num:		grid_y,					global
Num:		grid_size,				global
Num:		grid_zoom,				global

Num:		hole_score
Bool:		hole_circular
Num:		hole_outdelay

Num:		mover_type
Num:		mover_radius,			local,		choice_moveradius
Num:		mover_time,				local,		choice_time				
Num:		mover_phase,			local,		choice_percent
Num:		mover_rotation,			local,		choice_angle
Num:		mover_radius2,			local,		choice_moveradius
Num:		mover_maxangle,			local,		choice_angle
Num:		mover_moverotation,		local,		choice_angle
Num:		mover_offset			
Num:		mover_pause1,			local,		choice_time
Num:		mover_phase1,			local,		choice_percent
Num:		mover_pause2,			local,		choice_time
Num:		mover_phase2,			local,		choice_percent
Num:		mover_postdelayphase,	local,		choice_percent

Num:		peg_type
Bool:		peg_crumble
Bool:		peg_variable

Num:		physobj_bouncy
Num:		physobj_rolly
Num:		physobj_maxbouncevel
Num:		physobj_xpos			
Num:		physobj_ypos			
Num:		physobj_sound
Hex6:		physobj_solidcolor,		local,		choice_color
Hex6:		physobj_outlinecolor,	local,		choice_color
Bool:		physobj_visible
Bool:		physobj_collidable
Bool:		physobj_moving
Bool:		physobj_background
Bool:		physobj_baseobj
Bool:		physobj_foreground
Bool:		physobj_foreground2
Bool:		physobj_ballstopreset
Bool:		physobj_drawsort
Bool:		physobj_drawfloat
Hex2:		physobj_align
String:		physobj_id
String:		physobj_logic
String:		physobj_image
Num:		physobj_subid
Num:		physobj_flipperflags
Num:		physobj_imagedx
Num:		physobj_imagedy
Num:		physobj_imagerot,		local,		choice_angle

Num:		poly_rotation,			local,		choice_angle
Num:		poly_width,				local,		poly_size
Num:		poly_height,			local,		poly_size
Num:		poly_scale
Num:		poly_normaldir
Hex4:		poly_growtype
Bool:		poly_convex
Bool:		poly_imagetile
Bool:		poly_imagemirror

The game executable also mentions strings for one.

LevelEditor/autosave

The strings below along with their code are only present in the Windows, Android TV and the Xbox 360 releases.

Keyboard Reference
Edit
 (Multi Place)
 (Drag)
 (Make Poly)
 (Center Drag)
 (Image Drag)
 (Single Sel)
 (No Draw Sel)
 (Paused)
Edit (Order Mode)
LevelEditor/globals.dat
LevelEditor/buffer%d.dat
LevelFile
SOFTWARE\\
levels
editlevel.dat
*.dat
Save Level
.dat
autosave
LevelEditor
LevelEditor/autosave
LevelEditor/autosave%d.dat
leveleditor/editlevel.dat
autosave%d
Inspect AutoSaves?
Would you like to inspect AutoSaves?
No autosaves
No autosave data available
LevelEditor/LevelEditor.cfg
LevelEditor/editlevel.dat
Choose Group
No Choices
: 
Clear Level?
Do you want to clear the level?
Copy Group Attributes?
Do you want to copy the current group of attributes to all selected objects?
Distribute Phase?
Would you like to distribute movement phase among selected objects?
Load Image

Cheat Stats File Save

A function that generates a file named stats_cheat.dat file in LevelEditor (created if not present) in the game asset directory is present and called by the game whenever stats need to be saved (like when clearing an Adventure level). Changing the below function to NOP will trigger it.

Build Address
PopCap.com/Steam (Worldwide, 1.0.0.1 [Final]) 00464C50

Level Loader

Hmmm...
To do:
If possible, find the values that properly enable this. Hijacking the level loading function by replacing a JNE feels forced.

The game has support for loading raw level files and their backdrops elsewhere via using a dialog related to your OS. It's possible to enable it by changing the function at the following address with one that has no operation will load it when trying to load a level or demo, clicking cancel will make the game load an empty level with an error message. This does not seem to be present in the Mac version.

Build Address
PopCap.com/Steam (Worldwide, 1.0.0.1 [Final]) 00429D67

If loading levels this way, the word Dev will be above the word score on your scoreboard and that will write to replay data, you also cannot save high scores from levels loaded this way and the level complete dialog only offers three options, returning to the main menu, replaying the level or playing a random level. Reloading a level makes the game write the name of the level file to the game window in this form.

 -  %s

LoadTime.h Generator

A function that generates a LoadTime.h header file in the game asset directory is present and called by the game at the loading screen but it's normally not possible to trigger it. Changing the value to 1 will trigger it.

Build Address
PopCap.com/Steam (Worldwide, 1.0.0.1 [Final]) 0040B439

Unused Text

Pego Leftovers

<String id="Check here to allow your monitor to go into powersave mode while running the Pego Screensaver.">
<String id="Check here to set your Pego as your Screensaver.">

Dubbed "Pego" for months of production, the team was suddenly tasked with changing the name based on copyright issues, which explains the presence of these duplicated (but renamed) strings.

.pego

Present in the game executable, replays don't use a .pego extension but the game can still view them if so.

Kat-Tut Stage Dialogue

English Japanese
StageDialog: 2, "C'mon! Hit \"Continue\" and let's do this!" StageDialog: 2, "さあ、今すぐ。「続行」を押してチャレンジしてみて !"

This text was commented out from Kat-Tut's dialogue on the second stage in stages.cfg.

Page 2 Name Alterations

The Mac release has some commented names of certain stages in the config file, suggesting different levels were planned for Jimmy's stages or Splork was planned to be unlocked before Jimmy early in development.

Level # Old level Final level
2 We Come In Peace Buffalo Wings
3 Maid in Space Skate Park
4 Win a Monkey Spiral of Doom

Internal Project Name

The internal name of the game is Thunderball according to strings in the game executable, referring to when it was a game themed around Thor very early on.