The current URL is datacrystal.tcrf.net.
Speedy Blupi 2/RAM map: Difference between revisions
(Created page with "{{rammap|game=Speedy Blupi 2}} This table 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.0 English. Italicized names are speculative; non-italicized names directly match the Planet Blupi source code. ==Globals== {| border="1" align="center" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; background: #f7f8ff; border: 1px #8888cc solid; border-collapse: col...") |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{rammap|game=Speedy Blupi 2}} | {{rammap|game=Speedy Blupi 2}} | ||
Italicized names are speculative; non-italicized names directly match the Planet Blupi source code. | |||
==Globals== | ==Globals== | ||
This section compares addresses for various versions of the game. For the sake of comparison, this includes ''Speedy Blupi 1'' as well. | |||
* SB2 - ''Speedy Blupi 2'' version 2.2 (as available on blupi.org) | |||
* SE2 - ''Speedy Eggbert 2'' version 1.0 | |||
* SB - ''Speedy Blupi 1'' version 1.0 (as available on blupi.org) | |||
* SE - ''Speedy Eggbert 1'' version 1.0 ''or'' 1.1 | |||
{| 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 | ||
! colspan=" | ! colspan="4" | Address | ||
! rowspan="2" | Datatype | ! rowspan="2" | Datatype | ||
! rowspan="2" | Symbol | ! rowspan="2" | Symbol | ||
! rowspan="2" | Info | ! rowspan="2" | Info | ||
|- | |- | ||
! '' | ! ''SB2'' | ||
! '' | ! ''SE2'' | ||
! ''SB'' | |||
! ''SE'' | |||
|- | |||
| 435030 | |||
| 436030 | |||
| 42e030 | |||
| 42d030 | |||
| int | |||
| g_speedRate | |||
| How many iterations of events are processed in one frame. Default is 1. Multiplicative with CEvent.m_speed | |||
|- | |||
| 435034 | |||
| 436034 | |||
| 42e034 | |||
| 42d034 | |||
| int | |||
| g_timerInterval | |||
| Target frame time in milliseconds. Default is 50 ms (20 fps) | |||
|- | |||
| 435038 | |||
| 436038 | |||
| 42e038 | |||
| 42d038 | |||
| int | |||
| g_mouseType | |||
|- | |||
| 43503c | |||
| 43603c | |||
| 42e03c | |||
| 42d03c | |||
| UINT | |||
| g_lastPhase | |||
| | |||
|- | |||
| | |||
|- | |||
| 4352a0 | |||
| 436298 | |||
| | |||
| | |||
| BOOL | |||
| g_bDebug | |||
| Enables debug output related to DirectDraw, except OutputDebug is stubbed in all release builds. So this does nothing. | |||
|- | |||
| | |||
|- | |||
| 48a3c8 | |||
| 48eae8 | |||
| | |||
| | |||
| char[260] | |||
| g_CDPath | |||
| MAX_PATH is 260 | |||
|- | |||
| 48a4cc | |||
| 48ebec | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |- | ||
| 48a4d0 | | 48a4d0 | ||
| 48ebf0 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |- | ||
| 48a4d4 | | 48a4d4 | ||
| 48ebf4 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |- | ||
| 48a4d8 | | 48a4d8 | ||
| 48ebf8 | | 48ebf8 | ||
| CEvent* | | | ||
| | |||
| CEvent * | |||
| g_pEvent | | g_pEvent | ||
| Event handler | | Event handler | ||
Line 24: | Line 104: | ||
| 48a4dc | | 48a4dc | ||
| 48ebfc | | 48ebfc | ||
| CPixmap* | | | ||
| | |||
| CPixmap * | |||
| g_pPixmap | | g_pPixmap | ||
| Graphics handler | | Graphics handler | ||
Line 30: | Line 112: | ||
| 48a4e0 | | 48a4e0 | ||
| 48ec00 | | 48ec00 | ||
| CSound* | | | ||
| | |||
| CSound * | |||
| g_pSound | | g_pSound | ||
| Sound handler | | Sound handler | ||
Line 36: | Line 120: | ||
| 48a4e4 | | 48a4e4 | ||
| 48ec04 | | 48ec04 | ||
| CNetwork* | | | ||
| | |||
| CNetwork * | |||
| g_pNetwork | | g_pNetwork | ||
| Netplay handler | | Netplay handler | ||
Line 42: | Line 128: | ||
| 48a4e8 | | 48a4e8 | ||
| 48ec08 | | 48ec08 | ||
| CMovie* | | | ||
| | |||
| CMovie * | |||
| g_pMovie | | g_pMovie | ||
| Video playback handler '''(leftover)''' | | Video playback handler '''(leftover)''' | ||
Line 48: | Line 136: | ||
| 48a4ec | | 48a4ec | ||
| 48ec0c | | 48ec0c | ||
| CDecor* | | | ||
| | |||
| CDecor * | |||
| g_pDecor | | g_pDecor | ||
| Gameplay handler | | Gameplay handler | ||
|- | |- | ||
| 48a4f0 | | 48a4f0 | ||
| | | 48ec10 | ||
| | |||
| | |||
| BOOL | | BOOL | ||
| g_bFullScreen | | g_bFullScreen | ||
Line 59: | Line 151: | ||
|- | |- | ||
| 48a4f4 | | 48a4f4 | ||
| | | 48ec14 | ||
| | |||
| | |||
| BOOL | | BOOL | ||
| ''g_bBenchmarkSuccess'' | | ''g_bBenchmarkSuccess'' | ||
Line 65: | Line 159: | ||
|- | |- | ||
| 48a4f8 | | 48a4f8 | ||
| | | 48ec18 | ||
| | |||
| | |||
| BOOL | | BOOL | ||
| ''g_bTrueColor'' | | ''g_bTrueColor'' | ||
Line 71: | Line 167: | ||
|- | |- | ||
| 48a4fc | | 48a4fc | ||
| | | 48ec1c | ||
| | |||
| | |||
| BOOL | | BOOL | ||
| ''g_bTrueColorDecor'' | | ''g_bTrueColorDecor'' | ||
Line 77: | Line 175: | ||
|- | |- | ||
| 48a500 | | 48a500 | ||
| | | 48ec20 | ||
| | |||
| | |||
| BOOL | | BOOL | ||
| ''g_bCDAudio'' | | ''g_bCDAudio'' | ||
Line 83: | Line 183: | ||
|- | |- | ||
| 48a504 | | 48a504 | ||
| | | 48ec24 | ||
| | |||
| | |||
| int | | int | ||
| ''g_benchmark'' | | ''g_benchmark'' | ||
Line 89: | Line 191: | ||
|- | |- | ||
| 48a508 | | 48a508 | ||
| 48ec28 | |||
| | |||
| | |||
|- | |- | ||
| 48a50c | | 48a50c | ||
| 48ec2c | |||
| | |||
| | | | ||
| BOOL | | BOOL | ||
Line 97: | Line 204: | ||
|- | |- | ||
| 48a510 | | 48a510 | ||
| 48ec30 | |||
| | |||
| | | | ||
| BOOL | | BOOL | ||
Line 102: | Line 211: | ||
| TRUE when the application is done initializing. | | TRUE when the application is done initializing. | ||
FALSE when starting up (loading graphics, doing benchmark, etc). | 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. | |||
{| 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'' | |||
|- | |- | ||
| 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. | |||
{| 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 | |||
| | |||
| byte[180] | |||
| ''m_missionsCleared'' | |||
| Array of which levels are completed. Oddly, 1 is incomplete, 0 is cleared. | |||
|- | |||
| 0d8d0 | |||
| | |||
| byte[20] | |||
| ''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 | |||
| | |||
| int[112] | |||
| ''m_menuSelections'' | |||
| Tracks the indexes of level editor objects that cycle through a set of subtypes (e.g. the color of personal bombs, the direction of wind, and the aesthetic variants of tech-blocks) | |||
|- | |||
| 0daf4 | |||
| | |||
| int[99] | |||
| | |||
| Uncertain. See the following entry on m_reserve for a possible explanation. | |||
|- | |||
| 0dc80 | |||
| | |||
| byte[100000] | |||
| ''m_reserve'' | |||
| This block of memory only seems to exist as a spatial buffer to prevent memory corruption when m_missionsCompleted is indexed out-of-bounds. Had this block not existed, winning or losing a level whose ID exceeds 1,124 (decimal) would collide with and corrupt CEvent. With this buffer in place, problems are avoided until level ID 101,124. | |||
|} | |||
==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. | |||
{| 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== |
Latest revision as of 14:21, 26 May 2024
The following article is a RAM map for Speedy Blupi 2.
Italicized names are speculative; non-italicized names directly match the Planet Blupi source code.
Globals
This section compares addresses for various versions of the game. For the sake of comparison, this includes Speedy Blupi 1 as well.
- SB2 - Speedy Blupi 2 version 2.2 (as available on blupi.org)
- SE2 - Speedy Eggbert 2 version 1.0
- SB - Speedy Blupi 1 version 1.0 (as available on blupi.org)
- SE - Speedy Eggbert 1 version 1.0 or 1.1
Address | Datatype | Symbol | Info | |||
---|---|---|---|---|---|---|
SB2 | SE2 | SB | SE | |||
435030 | 436030 | 42e030 | 42d030 | int | g_speedRate | How many iterations of events are processed in one frame. Default is 1. Multiplicative with CEvent.m_speed |
435034 | 436034 | 42e034 | 42d034 | int | g_timerInterval | Target frame time in milliseconds. Default is 50 ms (20 fps) |
435038 | 436038 | 42e038 | 42d038 | int | g_mouseType | |
43503c | 43603c | 42e03c | 42d03c | UINT | g_lastPhase | |
4352a0 | 436298 | BOOL | g_bDebug | Enables debug output related to DirectDraw, except OutputDebug is stubbed in all release builds. So this does nothing. | ||
48a3c8 | 48eae8 | char[260] | g_CDPath | MAX_PATH is 260 | ||
48a4cc | 48ebec | |||||
48a4d0 | 48ebf0 | |||||
48a4d4 | 48ebf4 | |||||
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 | 48ec10 | BOOL | g_bFullScreen | |||
48a4f4 | 48ec14 | BOOL | g_bBenchmarkSuccess | Whether the PC is deemed strong enough for 16-bit graphics. | ||
48a4f8 | 48ec18 | BOOL | g_bTrueColor | |||
48a4fc | 48ec1c | BOOL | g_bTrueColorDecor | |||
48a500 | 48ec20 | BOOL | g_bCDAudio | If TRUE, forego all MIDI playback and instead play the corresponding track on an audio CD. (unused) | ||
48a504 | 48ec24 | int | g_benchmark | The numeric result of the performance benchmark (seemingly measured by the number of images drawn within a time interval?) | ||
48a508 | 48ec28 | |||||
48a50c | 48ec2c | BOOL | g_bActive | Whether the application window is focused. | ||
48a510 | 48ec30 | 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.
| |
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.
| |
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 | byte[180] | m_missionsCleared | Array of which levels are completed. Oddly, 1 is incomplete, 0 is cleared. | |
0d8d0 | byte[20] | 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 | int[112] | m_menuSelections | Tracks the indexes of level editor objects that cycle through a set of subtypes (e.g. the color of personal bombs, the direction of wind, and the aesthetic variants of tech-blocks) | |
0daf4 | int[99] | Uncertain. See the following entry on m_reserve for a possible explanation. | ||
0dc80 | byte[100000] | m_reserve | This block of memory only seems to exist as a spatial buffer to prevent memory corruption when m_missionsCompleted is indexed out-of-bounds. Had this block not existed, winning or losing a level whose ID exceeds 1,124 (decimal) would collide with and corrupt CEvent. With this buffer in place, problems are avoided until level ID 101,124. |
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
| |
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 |