Speedy Blupi 2/RAM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
{{rammap|game=Speedy Blupi 2}}
{{rammap|game=Speedy Blupi 2}}
This page compares addresses for two versions of the game: ''Speedy Blupi 2'' version 2.2 English (as available on blupi.org), and ''Speedy Eggbert 2'' version 1.x English.  Italicized names are speculative; non-italicized names directly match the Planet Blupi source code.
This page compares addresses for two versions of the game: ''Speedy Blupi 2'' version 2.2 (as available on blupi.org), and ''Speedy Eggbert 2'' version 1.x.  Italicized names are speculative; non-italicized names directly match the Planet Blupi source code.
==Globals==
==Globals==
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
Line 34: Line 34:
| g_lastPhase
| g_lastPhase
|  
|  
|-
|
|-
| 4352a0
|
| BOOL
| g_bDebug
|
|-
|-
|
|
Line 150: Line 158:


==CEvent class==
==CEvent class==
 
The CEvent class is a singleton that covers overarching systematic functionality, e.g. functionality of each individual menu screen. Comparable to the CEvent class in ''Planet Blupi'', with a handful of changes.
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
|- style=background:#ccccff
|- style=background:#ccccff
Line 393: Line 401:
| Screen coordinates of the currently visible UI tooltip.
| Screen coordinates of the currently visible UI tooltip.
|-
|-
| 98c4
| 98c8
|
|
| char[50]
| char[50]
Line 511: Line 519:


==CDecor class==
==CDecor class==
The CDecor class is a singleton that covers everything in the physical game world. Drastically modified with little resemblance to ''Planet Blupi'''s CDecor.
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
|- style=background:#ccccff
! colspan="2" | Address
! rowspan="2" | Datatype
! rowspan="2" | Symbol
! rowspan="2" | Info
|-
! ''Blupi''
! ''Eggbert''
|-
| 00000
|
| HWND
| m_hWnd
|
|-
| 00004
|
| CSound *
| m_pSound
|
|-
| 00008
|
| CPixmap *
| m_pPixmap
|
|-
| 0000c
|
| CNetwork *
| m_pNetwork
|
|-
| 00010
|
| short[100][100]
| ''m_objects''
| The grid of square tiles that makes up the physical world.
|-
| 04e30
|
| short[100][100]
| ''m_explos''
| The grid of square tiles that make up the decorative middleground layer.
|-
| 09c50
|
| byte[100][13]
| ''m_gluePaths''
| A bitmapped grid of the world, which gets invisibly "painted" by glue projectiles. This serves to invalidate respawn points which are considered "unsafe".
|-
| 0a164
|
| byte[100][13]
| ''m_gluePaths2''
| i dont know why there are 2 of them
|-
| 0a678
|
| Perso[200]
| ''m_persos''
| Array of entity slots (''"'''perso'''nnages"'').
|-
| 0cbf8
|
| int
| ''m_input''
| Bitmap of player input.
|-
| 0cbfc
|
| int
| ''m_previousInput''
| Previous frame's m_input
|-
| 0cc00
|
| POINT
| ''m_cameraPos''
| The world coordinates of the camera view
|-
| 0cc08
|
| POINT
| ''m_worldDims''
| Dimensions of the world in cells. Any nonzero value is hardcoded to be treated as 100. A value of 0 represents a lack of scrolling in that dimension.
|-
| 0cc10
|
| POINT
| ''m_selectedCelPos''
| Position of the currently selected cell. Only effective in level editor.
|-
| 0cc18
|-
| 0cc1c
|-
| 0cc20
|-
| 0cc24
|
| UINT
| m_phase
| Current phase
|-
| 0cc28
|
| int
| ''m_targetMission''
| The level ID to be entered after the current level transition.
|-
| 0cc2c
|
| int
| m_music
| Level BGM index
|-
| 0cc30
|
| int
| m_region
| Level background image
|-
| 0cc34
|-
| 0cc38
|-
| 0cc3c
|
| int
| m_time
|
|-
| 0cc40
|
| char[100]
| ''m_missionTitle''
| Current level title. Only apparent for custom levels, but still present (usually empty) for campaign levels.
|-
| 0cca4
|-
| 0cca8
|
| int
| ''m_nbCases''
| Number of entity slots occupied by pushable wooden cases [crates].
|-
| 0ccac
|
| int[200]
| ''m_caseIndexes''
| Array of entity ID's which contain crates.
|-
| 0cfcc
|
| int
| ''m_nbSomethings''
| Number of entity slots occupied by ''something'' unknown.
|-
| 0cfd0
|
| int[200]
| ''m_somethingIndexes''
| Array of entity ID's which contain ''something'' unknown.
|-
| 0d2f0
|
| POINT
| m_pos
| Blupi's position in world space
|-
| 0d2f8
|
| POINT
| ''m_safePos''
| The primary safe position to respawn Blupi
|-
| 0d300
|
| int
| ''m_action''
| The current action performed by Blupi.
|-
| 0d304
|
| int
| ''m_direction''
| The direction Blupi is facing.
* 1 - left
* 2 - right
|-
| 0d308
|
| int
| ''m_actionTime''
| How many frames Blupi has been in his current action.
|-
| 0d30c
|
| POINT
| ''m_velocity''
| Blupi's current velocity. X velocity is only effective with vehicles/transformations and underwater. Y velocity is ineffective when grounded. In many cases, Y velocity is multiplied by 2 before applying to Blupi.
|-
| 0d314
|
| int
| ''m_blupiIcon''
| Blupi's current frame of animation.
|-
| 0d318
|-
| 0d31c
|
| int
| ''m_blupiChannel''
| The graphics file ("channel") of Blupi's current animation.
|-
| 0d320
|
| POINT
| ''m_activeConveyorVelocity''
| Additional velocity applied to Blupi by a conveyor belt lift entity. To verify: does this also cover lifts in general?
|-
| 0d328
|
| int
| ''m_activeLiftIndex''
| Entity ID of the lift Blupi is standing on. -1 for none.
|-
| 0d32c
|
| BOOL
| ''m_bPlayerHasControl''
| Whether the player can move Blupi.
|-
| 0d330
|
| BOOL
| ''m_bIsFalling''
| Whether Blupi is airborne.
|-
| 0d334
|
| BOOL
| ''m_bHelicopter''
| Whether Blupi is driving the helicopter.
|-
| 0d338
|
| BOOL
| ''m_bHovercraft''
| Whether Blupi is driving the hovercraft.
|-
| 0d33c
|
| BOOL
| ''m_bJeep''
| Whether Blupi is driving the jeep.
|-
| 0d340
|
| BOOL
| ''m_bTank''
| Whether Blupi is driving the tank.
|-
| 0d344
|
| BOOL
| ''m_bSkateboard''
| Whether Blupi is riding the skateboard.
|-
| 0d348
|
| BOOL
| ''m_bInDeepWater''
| Whether Blupi is submerged underwater.
|-
| 0d34c
|
| BOOL
| ''m_bInSurfaceWater''
| Whether Blupi is treading at the water's surface.
|-
| 0d350
|
| BOOL
| ''m_bInWind''
| Whether Blupi is in wind.
|-
| 0d354
|
| BOOL
| ''m_bIsHangingFromBar''
| Whether Blupi is hanging onto a bar.
|-
| 0d358
|
| BOOL
| ''m_bHeadache''
| If TRUE, Blupi hit his head too hard and will play a pain animation upon landing.
|-
| 0d35c
|
| BOOL
| ''m_bShield''
| Whether Blupi has a shield.
|-
| 0d360
|
| BOOL
| ''m_bLollipop''
| Whether Blupi has a speed boost from eating a lollipop.
|-
| 0d364
|
| BOOL
| ''m_bPowercharge''
| Whether Blupi has a power aura from a recharging device.
|-
| 0d368
|
| BOOL
| ''m_bInvisible''
| Whether Blupi is under the effect of an invisibility potion.
|-
| 0d36c
|
| BOOL
| ''m_bInverter''
| Whether Blupi's controls are inverted due to an inverter.
|-
| 0d370
|
| BOOL
| ''m_bWaspSting''
| Whether Blupi is under the effect of a wasp sting.
|-
| 0d374
|
| BOOL
| ''m_bCrushed''
| Whether Blupi is flattened by a crusher.
|-
| 0d378
|-
| 0d37c
|-
| 0d380
|-
| 0d384
|-
| 0d388
|
| BOOL
| ''m_bUseSafePosition''
| Whether to use a safe respawn position. Probably FALSE when level starts and no points exist.
|-
| 0d38c
|
| BOOL
| ''m_bIsTerminating''
| If TRUE, Blupi is exiting the level.
|-
| 0d390
|
| int
| ''m_glue''
| Blupi's current stock of glue ammunition.
|-
| 0d394
|
| int
| ''m_keys''
| Bitmap of Blupi's currently held keys.
|-
| 0d398
|
| int
| ''m_personalBombs''
| Blupi's current stock of team-specific bombs.
|-
| 0d39c
|
| int
| ''m_dynamite''
| Blupi's current stock of dynamite. (To verify:) Not a BOOL, despite being capped at 1.
|-
| 0d3a0
|-
| 0d3a4
|
| int
| ''m_powerEnergy''
| Amount of energy remaining for Blupi's current transformation/powerup. If multiple are active, their energy drain is stacked.
|-
| 0d3a8
|-
| 0d3ac
|-
| 0d3b0
|-
| 0d3b4
|
| int
| ''m_queuedActionFrames''
|
|-
| 0d3b8
|
| int
| ''m_queuedAction''
| Which action to play when Blupi comes to a stop.
|-
| 0d3bc
|
| int
| ''m_nbSafePositions''
| Number of safe respawn points available.
|-
| 0d3c0
|
| POINT[13]
| ''m_safePositions''
|
|-
| 0d428
|-
|-
| 0d440
|
| BOOL
| ''m_bMulti''
| If TRUE, the current game is a multiplayer deathmatch game.
|-
| 0d444
|
| int
| ''m_team''
| Which team the player is on for multiplayer purposes. Only apparent when m_bMulti==TRUE, otherwise appears yellow. However, team affiliation is still effective in singleplayer, affecting the behavior of personal bombs.
* 0 - yellow
* 1 - orange
* 2 - blue
* 3 - green
|-
|
|-
| 0d534
|
| SoundEvent[20]
| ''m_soundEvents''
| Array of currently active sound events.
|-
| 0d5d4
|-
| 0d5d8
|-
| 0d5dc
|-
| 0d5e0
|
| char[5][100]
| ''m_infoTexts''
| Text buffer for informational popups in the top-left corner of gameplay, mostly for multiplayer events.
|-
| 0d7d4
|
| int
| ''m_air''
| Amount of air remaining while swimming.
|-
| 0d7d8
|
| int
| ''m_energy''
| '''Unused.''' Always 100. Only accessed when quicksaving/loading. Name is entirely speculative.
|-
| 0d7dc
|
| BOOL
| ''m_bHelicopterFlying''
| Whether Blupi is airborne in a helicopter.
|-
| 0d7e0
|
| BOOL
| ''m_bHelicopterStationary''
| Whether Blupi is grounded in a helicopter.
|-
| 0d7e4
|
| BOOL
| ''m_bCarMoving''
| Whether Blupi is moving in a car-like vehicle.
|-
| 0d7e8
|
| BOOL
| ''m_bCarStationary''
| Whether Blupi is idling in a car-like vehicle.
|-
| 0d7ec
|
| BOOL
| ''m_bWorldComplete''
|
|-
| 0d7f0
|
| BOOL
| ''m_bPrivate''
| If TRUE, the current level is a user level and does not save progress to the player file.
|-
| 0d7f4
|
| BOOL
| ''m_bAllMissions''
| Whether the OPENDOORS cheat is active.
|-
| 0d7f8
|
| BOOL
| ''m_bInvincible''
| Whether the MEGABLUPI cheat is active.
|-
| 0d7fc
|
| BOOL
| ''m_bShowSecret''
| Whether the SHOWSECRET cheat is active.
|-
| 0d800
|
| BOOL
| ''m_bAccessBuild''
| Whether the XMISSION (xnjttjpo) cheat is active.
|-
| 0d804
|
| BOOL
| ''m_bNetPacked''
| Whether the NETPACKED cheat is active.
|-
| 0d808
|
| BOOL
| ''m_bNetMovePredict''
| Whether the YNOSMOOTH cheat is '''inactive'''.
|-
| 0d80c
|
| BOOL
| ''m_bNetDebug''
| Whether the ZNETDEBUG cheat is active.
|-
| 0d810
|-
| 0d814
|-
| 0d818
|
| int
| m_mission
| Current level ID.
|-
| 0d81c
|
| short[90]
| ''m_missionsCleared''
| Array of which levels are completed. Oddly, 1 is incomplete, 0 is cleared.
|-
| 0d8d0
|
| short[10]
| ''m_worldsCleared''
| Array of which worlds are completed. As above, 1 is incomplete.
|-
| 0d8e4
|
| int
| ''m_lives''
|
|-
| 0d8e8
|
| int
| ''m_chestsCollected''
| How many treasure chests have been collected in the current level.
|-
| 0d8ec
|
| int
| ''m_chestsTotal''
| Treasure chests required to complete level. Always equal to total amount of chests.
|-
| 0d8f0
|-
| 0d8f4
|-
| 0d8f8
|-
| 0d8fc
|
| POINT
| ''m_cameraTargetPos''
| The point in world space the camera will focus on.
|-
| 0d904
|
| POINT
| ''m_cameraTargetOffset''
| Additional offset to m_cameraTargetPos.
|-
| 0d90c
|
| int
| ''m_flyupIcon''
| Graphics frame of current item flyup.
|-
| 0d910
|
| int
| ''m_flyupChannel''
| Graphics file (channel) of current item flyup.
|-
| 0d914
|
| int
| ''m_flyupFrameCount''
| How long the flyup has been moving.
|-
| 0d918
|
| int
| ''m_flyupFrameTotal''
| The length in frames of the flyup animation.
|-
| 0d91c
|
| POINT
| ''m_flyupStartPos''
| The starting point of the flyup's movement.
|-
| 0d924
|
| POINT
| ''m_flyupEndPos''
| The target point of the flyup's movement.
|-
| 0d92c
|
| BOOL
| ''m_bScreenShake''
| Whether the screen is currently shaking from an explosion.
|-
| 0d930
|
| int
| ''m_screenShakeIndex''
| Index into an array of X/Y offsets to apply to the camera for screen shake. If >= 32, screen stops shaking.
|-
| 0d934
|-
|
|-
| 0dc80
|
| byte[100000]
|
|
|}
==CPixmap class==
==CPixmap class==
==CSound class==
==CSound class==
Line 517: Line 1,197:
==CJauge class==
==CJauge class==
==CMenu class==
==CMenu class==
==CButton class==
The CButton class represents a single menu button during runtime. ''Very'' similar to the equivalent class in ''Planet Blupi'', with the addition of a single member at offset 0x1c.
{| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: collapse; font-size: 95%"
|- style=background:#ccccff
! colspan="2" | Address
! rowspan="2" | Datatype
! rowspan="2" | Symbol
! rowspan="2" | Info
|-
! ''Blupi''
! ''Eggbert''
|-
| 00
|
| HWND
| m_hWnd
|
|-
| 04
|
| CPixmap *
| m_pPixmap
|
|-
| 08
|
| CDecor *
| m_pDecor
|
|-
| 0c
|
| CSound *
| m_pSound
|
|-
| 10
|
| int
| m_type
|
|-
| 14
|
| BOOL
| m_bEnable
| TRUE if button is active
|-
| 18
|
| BOOL
| m_bHide
| TRUE if button is hidden
|-
| 1c
|-
| 20
|
| UINT
| m_message
| Message invoked when button is activated. Usually an Event or Phase ID.
|-
| 24
|
| POINT
| m_pos
|
|-
| 2c
|
| POINT
| m_dim
| Dimensions
|-
| 34
|
| int
| m_state
| * 0 - released
* 1 - pressed
* 2+ - submenu expanded
|-
| 38
|
| int
| m_mouseState
| Same values as m_state
|-
| 3c
|
| int[20]
| m_iconMenu
| Icons in submenu
|-
| 8c
|
| int[20]
| m_toolTips
| String ID's per button in submenu
|-
| dc
|
| int
| m_nbMenu
| Number of options in submenu
|-
| e0
|
| int
| m_nbToolTips
|
|-
| e4
|
| int
| m_selMenu
| Index of selected submenu option
|-
| e8
|
| BOOL
| m_bMouseDown
|
|-
| ec
|
| BOOL
| m_bMinimizeRedraw
|
|-
| f0
|
| BOOL
| m_bRedraw
| If TRUE, button is marked to be redrawn
|}
==Structs==
==Structs==

Revision as of 04:55, 26 May 2024

Chip tiny.png The following article is a RAM map for Speedy Blupi 2.

This page compares addresses for two versions of the game: Speedy Blupi 2 version 2.2 (as available on blupi.org), and Speedy Eggbert 2 version 1.x. Italicized names are speculative; non-italicized names directly match the Planet Blupi source code.

Globals

Address Datatype Symbol Info
Blupi Eggbert
435030 int g_speedRate How many iterations of events are processed in one frame. Default is 1. Multiplicative with CEvent.m_speed
435034 int g_timerInterval Target frame time in milliseconds. Default is 50 ms (20 fps)
435038 int g_mouseType
43503c UINT g_lastPhase
4352a0 BOOL g_bDebug
48a3c8 char[260] g_CDPath MAX_PATH is 260
48a4cc
48a4d0
48a4d4
48a4d8 48ebf8 CEvent * g_pEvent Event handler
48a4dc 48ebfc CPixmap * g_pPixmap Graphics handler
48a4e0 48ec00 CSound * g_pSound Sound handler
48a4e4 48ec04 CNetwork * g_pNetwork Netplay handler
48a4e8 48ec08 CMovie * g_pMovie Video playback handler (leftover)
48a4ec 48ec0c CDecor * g_pDecor Gameplay handler
48a4f0 BOOL g_bFullScreen
48a4f4 BOOL g_bBenchmarkSuccess Whether the PC is deemed strong enough for 16-bit graphics.
48a4f8 BOOL g_bTrueColor
48a4fc BOOL g_bTrueColorDecor
48a500 BOOL g_bCDAudio If TRUE, forego all MIDI playback and instead play the corresponding track on an audio CD. (unused)
48a504 int g_benchmark The numeric result of the performance benchmark (seemingly measured by the number of images drawn within a time interval?)
48a508
48a50c BOOL g_bActive Whether the application window is focused.
48a510 BOOL g_bTermInit TRUE when the application is done initializing.

FALSE when starting up (loading graphics, doing benchmark, etc).

CEvent class

The CEvent class is a singleton that covers overarching systematic functionality, e.g. functionality of each individual menu screen. Comparable to the CEvent class in Planet Blupi, with a handful of changes.

Address Datatype Symbol Info
Blupi Eggbert
0004 int m_joyID DInput device ID for joystick
041C int m_gamer Currently selected player file index; [1..8]
0420 int m_textHiliStart Index of first highlighted character in text input box
0424 int m_textHiliEnd Index of last highlighted character in text input box
0428 int m_textCursorIndex Position of text cursor in text box
042c char[100] m_textInput Text input box contents
0490 char[100] m_playerName Current player file name
0904 char[100][256] m_filenameBuffer Buffer for custom level filenames in C:\User. Only the first 100 files are shown.
6d04
6d08
6d0c int m_userDirectoryIndex
6d10
6d14 int m_lives Number of extra lives
6d18 int m_speed How many iterations of events are processed in one frame. Default is 1. F5/F6 keys toggle between 1x and 2x. Multiplicative with g_speedRate
6d1c int m_mission
6d20 int m_private
6d24 int m_multi
6d28 int m_phase
6d2c int m_index
6d30
6d34
6d38 BOOL m_bPrivate
6d3c BOOL m_bMulti
6d40 BOOL m_bAccessBuild Whether the XMISSION (xnjttjpo) cheat is enabled, allowing the player to edit the singleplayer campaign.
6d44
6d48 m_mouseType
6d4c HINSTANCE m_hInstance
6d50 HWND m_hWnd
6d54 CPixmap * m_pPixmap
6d58 CDecor * m_pDecor
6d5c CSound * m_pSound
6d60 CNetwork * m_pNetwork
6d64 CMovie * m_pMovie
6d68 char[260] m_movieToStart Filename of the currently loaded AVI file. MAX_PATH is 260. (leftover)
6d6c int m_phaseAfterMovie Which Phase to switch to after AVI playback is done.
6d70 Button[40] m_buttons Menu buttons on the current screen.
9494 int m_input Bitmap of current player input. If a demo is running, this represents the input of the demo.
9860 POINT m_oldMousePos
98c0 POINT m_posToolTips Screen coordinates of the currently visible UI tooltip.
98c8 char[50] m_textToolTips Current UI tooltip text.
992c int m_mouseSprite
9930 BOOL m_bWaitMouse
9934 BOOL m_bHideMouse
9938 BOOL m_bFillMouse
993c BOOL m_bShowMouse
9940 int m_tryPhase
9944 int m_rankCheat Which cheat the player is currently typing. Since every cheat begins with a unique letter, any given input can only correspond to one cheat.
9948 int m_posCheat
9964 BOOL m_bDemoRec TRUE if a demo is being recorded.
9968 BOOL m_bDemoPlay TRUE if a demo is being played back.
996c DemoEvent * m_pDemoBuffer Pointer to the currently processing demo event
9970 int m_demoTime Demo playback frame counter
9974 int m_demoIndex The index of the current input event in the demo
9978 int m_demoEnd
997c int m_demoNumber The index of the currently playing demo in the queue.
9980
9984
9988 char[100][5] m_chatZone Netplay chat log buffer.
9b7c char[100] m_text Currently active tutorial text.

CDecor class

The CDecor class is a singleton that covers everything in the physical game world. Drastically modified with little resemblance to Planet Blupi's CDecor.

Address Datatype Symbol Info
Blupi Eggbert
00000 HWND m_hWnd
00004 CSound * m_pSound
00008 CPixmap * m_pPixmap
0000c CNetwork * m_pNetwork
00010 short[100][100] m_objects The grid of square tiles that makes up the physical world.
04e30 short[100][100] m_explos The grid of square tiles that make up the decorative middleground layer.
09c50 byte[100][13] m_gluePaths A bitmapped grid of the world, which gets invisibly "painted" by glue projectiles. This serves to invalidate respawn points which are considered "unsafe".
0a164 byte[100][13] m_gluePaths2 i dont know why there are 2 of them
0a678 Perso[200] m_persos Array of entity slots ("personnages").
0cbf8 int m_input Bitmap of player input.
0cbfc int m_previousInput Previous frame's m_input
0cc00 POINT m_cameraPos The world coordinates of the camera view
0cc08 POINT m_worldDims Dimensions of the world in cells. Any nonzero value is hardcoded to be treated as 100. A value of 0 represents a lack of scrolling in that dimension.
0cc10 POINT m_selectedCelPos Position of the currently selected cell. Only effective in level editor.
0cc18
0cc1c
0cc20
0cc24 UINT m_phase Current phase
0cc28 int m_targetMission The level ID to be entered after the current level transition.
0cc2c int m_music Level BGM index
0cc30 int m_region Level background image
0cc34
0cc38
0cc3c int m_time
0cc40 char[100] m_missionTitle Current level title. Only apparent for custom levels, but still present (usually empty) for campaign levels.
0cca4
0cca8 int m_nbCases Number of entity slots occupied by pushable wooden cases [crates].
0ccac int[200] m_caseIndexes Array of entity ID's which contain crates.
0cfcc int m_nbSomethings Number of entity slots occupied by something unknown.
0cfd0 int[200] m_somethingIndexes Array of entity ID's which contain something unknown.
0d2f0 POINT m_pos Blupi's position in world space
0d2f8 POINT m_safePos The primary safe position to respawn Blupi
0d300 int m_action The current action performed by Blupi.
0d304 int m_direction The direction Blupi is facing.
  • 1 - left
  • 2 - right
0d308 int m_actionTime How many frames Blupi has been in his current action.
0d30c POINT m_velocity Blupi's current velocity. X velocity is only effective with vehicles/transformations and underwater. Y velocity is ineffective when grounded. In many cases, Y velocity is multiplied by 2 before applying to Blupi.
0d314 int m_blupiIcon Blupi's current frame of animation.
0d318
0d31c int m_blupiChannel The graphics file ("channel") of Blupi's current animation.
0d320 POINT m_activeConveyorVelocity Additional velocity applied to Blupi by a conveyor belt lift entity. To verify: does this also cover lifts in general?
0d328 int m_activeLiftIndex Entity ID of the lift Blupi is standing on. -1 for none.
0d32c BOOL m_bPlayerHasControl Whether the player can move Blupi.
0d330 BOOL m_bIsFalling Whether Blupi is airborne.
0d334 BOOL m_bHelicopter Whether Blupi is driving the helicopter.
0d338 BOOL m_bHovercraft Whether Blupi is driving the hovercraft.
0d33c BOOL m_bJeep Whether Blupi is driving the jeep.
0d340 BOOL m_bTank Whether Blupi is driving the tank.
0d344 BOOL m_bSkateboard Whether Blupi is riding the skateboard.
0d348 BOOL m_bInDeepWater Whether Blupi is submerged underwater.
0d34c BOOL m_bInSurfaceWater Whether Blupi is treading at the water's surface.
0d350 BOOL m_bInWind Whether Blupi is in wind.
0d354 BOOL m_bIsHangingFromBar Whether Blupi is hanging onto a bar.
0d358 BOOL m_bHeadache If TRUE, Blupi hit his head too hard and will play a pain animation upon landing.
0d35c BOOL m_bShield Whether Blupi has a shield.
0d360 BOOL m_bLollipop Whether Blupi has a speed boost from eating a lollipop.
0d364 BOOL m_bPowercharge Whether Blupi has a power aura from a recharging device.
0d368 BOOL m_bInvisible Whether Blupi is under the effect of an invisibility potion.
0d36c BOOL m_bInverter Whether Blupi's controls are inverted due to an inverter.
0d370 BOOL m_bWaspSting Whether Blupi is under the effect of a wasp sting.
0d374 BOOL m_bCrushed Whether Blupi is flattened by a crusher.
0d378
0d37c
0d380
0d384
0d388 BOOL m_bUseSafePosition Whether to use a safe respawn position. Probably FALSE when level starts and no points exist.
0d38c BOOL m_bIsTerminating If TRUE, Blupi is exiting the level.
0d390 int m_glue Blupi's current stock of glue ammunition.
0d394 int m_keys Bitmap of Blupi's currently held keys.
0d398 int m_personalBombs Blupi's current stock of team-specific bombs.
0d39c int m_dynamite Blupi's current stock of dynamite. (To verify:) Not a BOOL, despite being capped at 1.
0d3a0
0d3a4 int m_powerEnergy Amount of energy remaining for Blupi's current transformation/powerup. If multiple are active, their energy drain is stacked.
0d3a8
0d3ac
0d3b0
0d3b4 int m_queuedActionFrames
0d3b8 int m_queuedAction Which action to play when Blupi comes to a stop.
0d3bc int m_nbSafePositions Number of safe respawn points available.
0d3c0 POINT[13] m_safePositions
0d428
0d440 BOOL m_bMulti If TRUE, the current game is a multiplayer deathmatch game.
0d444 int m_team Which team the player is on for multiplayer purposes. Only apparent when m_bMulti==TRUE, otherwise appears yellow. However, team affiliation is still effective in singleplayer, affecting the behavior of personal bombs.
  • 0 - yellow
  • 1 - orange
  • 2 - blue
  • 3 - green
0d534 SoundEvent[20] m_soundEvents Array of currently active sound events.
0d5d4
0d5d8
0d5dc
0d5e0 char[5][100] m_infoTexts Text buffer for informational popups in the top-left corner of gameplay, mostly for multiplayer events.
0d7d4 int m_air Amount of air remaining while swimming.
0d7d8 int m_energy Unused. Always 100. Only accessed when quicksaving/loading. Name is entirely speculative.
0d7dc BOOL m_bHelicopterFlying Whether Blupi is airborne in a helicopter.
0d7e0 BOOL m_bHelicopterStationary Whether Blupi is grounded in a helicopter.
0d7e4 BOOL m_bCarMoving Whether Blupi is moving in a car-like vehicle.
0d7e8 BOOL m_bCarStationary Whether Blupi is idling in a car-like vehicle.
0d7ec BOOL m_bWorldComplete
0d7f0 BOOL m_bPrivate If TRUE, the current level is a user level and does not save progress to the player file.
0d7f4 BOOL m_bAllMissions Whether the OPENDOORS cheat is active.
0d7f8 BOOL m_bInvincible Whether the MEGABLUPI cheat is active.
0d7fc BOOL m_bShowSecret Whether the SHOWSECRET cheat is active.
0d800 BOOL m_bAccessBuild Whether the XMISSION (xnjttjpo) cheat is active.
0d804 BOOL m_bNetPacked Whether the NETPACKED cheat is active.
0d808 BOOL m_bNetMovePredict Whether the YNOSMOOTH cheat is inactive.
0d80c BOOL m_bNetDebug Whether the ZNETDEBUG cheat is active.
0d810
0d814
0d818 int m_mission Current level ID.
0d81c short[90] m_missionsCleared Array of which levels are completed. Oddly, 1 is incomplete, 0 is cleared.
0d8d0 short[10] m_worldsCleared Array of which worlds are completed. As above, 1 is incomplete.
0d8e4 int m_lives
0d8e8 int m_chestsCollected How many treasure chests have been collected in the current level.
0d8ec int m_chestsTotal Treasure chests required to complete level. Always equal to total amount of chests.
0d8f0
0d8f4
0d8f8
0d8fc POINT m_cameraTargetPos The point in world space the camera will focus on.
0d904 POINT m_cameraTargetOffset Additional offset to m_cameraTargetPos.
0d90c int m_flyupIcon Graphics frame of current item flyup.
0d910 int m_flyupChannel Graphics file (channel) of current item flyup.
0d914 int m_flyupFrameCount How long the flyup has been moving.
0d918 int m_flyupFrameTotal The length in frames of the flyup animation.
0d91c POINT m_flyupStartPos The starting point of the flyup's movement.
0d924 POINT m_flyupEndPos The target point of the flyup's movement.
0d92c BOOL m_bScreenShake Whether the screen is currently shaking from an explosion.
0d930 int m_screenShakeIndex Index into an array of X/Y offsets to apply to the camera for screen shake. If >= 32, screen stops shaking.
0d934
0dc80 byte[100000]

CPixmap class

CSound class

CNetwork class

CMovie class

CJauge class

CMenu class

CButton class

The CButton class represents a single menu button during runtime. Very similar to the equivalent class in Planet Blupi, with the addition of a single member at offset 0x1c.

Address Datatype Symbol Info
Blupi Eggbert
00 HWND m_hWnd
04 CPixmap * m_pPixmap
08 CDecor * m_pDecor
0c CSound * m_pSound
10 int m_type
14 BOOL m_bEnable TRUE if button is active
18 BOOL m_bHide TRUE if button is hidden
1c
20 UINT m_message Message invoked when button is activated. Usually an Event or Phase ID.
24 POINT m_pos
2c POINT m_dim Dimensions
34 int m_state * 0 - released
  • 1 - pressed
  • 2+ - submenu expanded
38 int m_mouseState Same values as m_state
3c int[20] m_iconMenu Icons in submenu
8c int[20] m_toolTips String ID's per button in submenu
dc int m_nbMenu Number of options in submenu
e0 int m_nbToolTips
e4 int m_selMenu Index of selected submenu option
e8 BOOL m_bMouseDown
ec BOOL m_bMinimizeRedraw
f0 BOOL m_bRedraw If TRUE, button is marked to be redrawn

Structs