Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Speedy Blupi 2/RAM map

From Data Crystal
Jump to navigation Jump to search

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