Peggle Deluxe takes you on a magical adventure to bounce a ball onto other balls.
Development Remnants#
SecuROM Protection#
|
|
To do: |
In some Chinese CD-ROMs sold by CNEC, free trials are also included, the one for this game has a securom directory, containing peggle 090519.log and an accompanying executable besides it, with generated information on how the application was protected. Note the actual values in the log are blanked.
SecuROM 7.40.0004-wiesel
Wrapper Build Version:
Wrapper Selection Version:
Encryption Profile:
Size of code sections: ()
CPA:
Used SECUROM_PERFORMANCE_MARKER:
Used SECUROM_SECURITY_MARKER:
Used SECUROM_HIGH_SECURITY_MARKER:
Used SECUROM_MARKER_VM_CALL_TYPE:
Total Number VM-Macros:
MACRO_ADD:
MACRO_SUB:
MACRO_IF_EQL:
DRM_API:
Unknown VM-Marker:
Code Replacements:
Function Replacements (FR):
FR, bytes
dyn. FR, relocs, bytes
Single Instruction Replacements (SIR):
SIR, bytes
Jump Table Replacements (JTR):
jump tables, entries
Marker & Replacements:
SecuROM Marker used
SecuROM Marker deactivated by exclusion list
SecuROM Marker not used
Replacement Marker used
Code Encryptions:
Const/Hook Encryptions (CH):
CH ( FR/ SIR/ UMARKER)
advanced CH
Address/Value Encryptions (AV):
AV ( FR/ SIR/ UMARKER/6 JTR)
VM Encryptions (VM):
VM ( FR/ SIR/ UMARKER)
C2V Stats
x86y86: applied VM transcodings ( blocks)
x86y86: largest amount of grouped instructions transcoded
x86y86: Group Stats: WORTHLESS: LOW: MEDIUM GOOD: EXCELLENT: HOT:
x86y86: cpuid dependant c2v_consts
x86y86: const key regenerations
x86y86: DI calls(unknown handled instructions)
x86y86: DI calls(unknown handled instructions)
Crypted Code Chunks (CCC):
CCC
Crypted Code Instructions (CCI):
CCI ( SIR, FR)
CCIT ( SIR, FR)
bytes of remaining space filled with garbage
Selective Encryption / Protection Customization:
Date File Encryption (DFE) support:
SecuROM Loaded Library (SLL) support:
Support for special executable formats:
Executable Section Integrity Checks:
Executable File Integrity Checks:
Anti-launcher Technology (SALT):
Anti-debugging in application (after OEP):
Runtime monitoring:
Security Options:
SecuROM .text section compression:
SecuROM .text section encryption:
Customer .text section compression:
Customer .text section encryption:
VM core:
Security Module:
Application debugger check:
Module scan check:
Anti-Hook (BPX) check:
Anti-Break (BPM) check:
Emulation shield:
Registry data security:
User Data binding:
User Data checks:
May ask user for Shell Extension installation:
Installer Material#
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:
level18web:
level19aweb:
slides:
Unused Powerups#
|
|
To do: |
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. Watch on YouTube
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. Watch on YouTube
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.
A very pixely stickynote with "TIP" written on it.
A star in a circle.
A logo placeholder for third-party distributors.
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#
|
|
To do: |
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#
|
|
To do: |
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#
Official Value Names#
In multilingual localizations, PopCap uses default.xml to automatically tweak UI layouts and text in the executable for a multilingual release, instead of creating a localized one. It also reveals the official values from the game's source code, which would be useful for reverse engineering.
364
544
320
6
10
8
0
23
23
25
40
5
14
18
31
8
8
240
5
425
15
20
12
-1
-3
-5
16
72
300
305
15
170
197
135
42
42
0
30
30
-4
-4
-25
0
190
4
32
465
240
240
240
5
5
14
11
50
12
6450.0
Pego Leftovers#
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.
References#
|
The Peggle series | |
|---|---|
|
Windows, Mac OS X |
Peggle Deluxe (Prototype) • Peggle Extreme • Peggle Nights • Peggle: World of Warcraft Edition |
|
Nintendo DS |
|
|
Xbox 360, Xbox One, PlayStation 4 |
|
|
Android |
|
|
iOS |
|