![]() |
Game status buffer |
| Address | Length | Description |
|---|---|---|
| 24576 | 256 |
Start of the entity list in RAM. The playfield write pointer at Playfield_Entity_List_Pointer is reset to this address before the main game loop, and the entity processing routines walk forward from here each frame.
|
| 24832 | 3197 |
Base address of the entity list. Entity_List_Write_Pointer, Entity_List_Snapshot, and Entity_List_Working_Pointer are all initialised to this address. Also used as the score table reception buffer during tape load operations at 60715.
|
| 28029 | 968 |
|
| 32768 | 1 |
|
| 32769 | 1 |
|
| 32770 | 1 |
|
| 32771 | 1 |
|
| 32772 | 1 |
|
| 32773 | 1 |
|
| 32774 | 1 |
|
| 32775 | 1 |
|
| 32776 | 2 |
|
| 32778 | 2 |
|
| 32780 | 1 |
|
| 32781 | 1 |
|
| 32782 | 1 |
|
| 32783 | 1 |
|
| 32784 | 1 |
|
| 32785 | 239 |
|
| 36816 | 22 |
Two-byte handler address table for control codes 16–26 indexed by the control code zero-indexed from 16. Each entry is the address of the parameter handler installed into PrintState_Handler by PrintHandler.
|
| 36838 | 12 |
Font configuration table, indexed by font number (0–3). Each eight-byte entry comprises six bytes of font metrics copied to 32780–32785 by the select font handler at PrintHandler_SelectFont, followed by a two-byte little-endian pointer to the font bitmap data stored at 32776.
|
| 36850 | 20 |
|
| 50179 | 5 |
Root of the active player state block (see Swap_Player_State / PlayerDeath_ClearPlayerSlot). Leading bytes hold the packed score for PrintPlayerScore and the prefix compared in CheckScoreAwardLife.
|
| 50184 | 1 |
|
| 50185 | 11 |
Pointer to the current entry in the wave definition table. Read by Stage_Next_Wave to load the enemy count and type for the incoming wave; advanced after each wave is staged.
|
| 50196 | 1 |
|
| 50197 | 1 |
|
| 50198 | 1 |
|
| 50199 | 1 |
Vertical pixel stride between adjacent life icons in DrawLivesDisplay. Each pass advances the vertical seed by this value (6) to space icons evenly in the lives display column.
|
| 50200 | 1 |
First byte of the four-byte template compared with *Player_1_State in CheckScoreAwardLife.
|
| 50201 | 1 |
Second template byte vs *50180 in CheckScoreAwardLife. Also the BCD byte that CheckScoreAwardLife adds 2 to (carry into *Lives). Seeded as 2 in 54367.
|
| 50202 | 1 |
Third template byte, compared with *50181 in CheckScoreAwardLife.
|
| 50203 | 1 |
Fourth template byte, compared with *50182 in CheckScoreAwardLife.
|
| 50204 | 1 |
Running total of active wave enemies. Incremented as enemies are spawned and decremented as they are killed. When it reaches zero, Stage_Next_Wave loads a fresh wave; when non-zero, the current wave set is re-populated instead. CheckScoreAwardLife_SessionGate also reads it as a session-active gate: non-zero means a game is in progress, so the copy-protection keyboard check is run.
|
| 50205 | 1 |
|
| 50206 | 5 |
Non-zero when both player slots take part in the current credit session. After a lost life PlayerDeath uses it for Swap_Player_State swap vs same-player loop. Cleared on init after the max wave.
|
| 50211 | 1 |
Number of primary wave enemies to spawn in the current wave. Read from the wave definition by Spawn_Primary_Wave_Enemies.
|
| 50212 | 3 |
Enemy type parameter for the current wave, read from the wave definition by Spawn_Primary_Wave_Enemies and copied into each spawned entity record.
|
| 50215 | 7 |
|
| 50222 | 1 |
|
| 50223 | 24 |
|
| 50247 | 39 |
|
| 50286 | 29 |
|
| 50315 | 68 |
Scratch buffer used by Swap_Player_State to hold the active player's 68-byte state block while the inactive player's state is copied over it.
|
| 50383 | 2 |
Decremented once per frame by the main game loop at Main_Game_Loop. When it reaches zero it is reset to 3 and one new entity is spawned adjacent to the player's current position.
|
| 50385 | 2 |
Pointer to the current write position in the playfield entity list. Set to Entity_List by Stage_Next_Wave before the main game loop is entered.
|
| 50387 | 1 |
|
| 50388 | 1 |
Player's current Y pixel position on the playfield. Updated each frame by the movement handler in Main_Game_Loop when the player moves vertically.
|
| 50389 | 5 |
Player's current X pixel position on the playfield. Updated each frame by the movement handler in Main_Game_Loop when the player moves horizontally.
|
| 50394 | 2 |
Pointer to the entity record currently being processed. Set before calling Remove_Entity_From_List to identify which entity to remove, and saved on entry to the movement handler at Move_And_Redraw_Entity so that the entity can be located after sprite-draw calls that may disturb HL.
|
| 50396 | 2 |
Two-byte seed for the linear congruential random number generator. Updated each call to Advance_RNG_Seed using the recurrence: seed = seed × 33 + 41.
|
| 50398 | 7 |
Set to 1 by Stage_Next_Wave once the entity list and playfield are initialised, signalling the main game loop at Main_Game_Loop that the wave is live.
|
| 50405 | 14 |
|
| 50419 | 5 |
Y pixel then X pixel for the enemy currently being placed by Spawn_Primary_Wave_Enemies, written before the screen address build reads them back.
|
| 50424 | 1 |
Counts down from 50 in the attract mode loop at Attract_Mode_Loop. Written each frame before the per-frame service calls; when it reaches zero, control jumps to the high score entry screen at Display_High_Score_Entry_Screen.
|
| 50425 | 4 |
Four bytes read by BlitTitleStrips: *TitleBlit_Params and *50428 bound the strip loop, *50426 selects the screen row / band, *50427 is the run length (LDIR) per strip. Filled by DrawAttractTitle before each BlitTitleStrips call.
|
| 50429 | 1 |
|
| 50430 | 1 |
|
| 50431 | 1 |
|
| 50432 | 1 |
|
| 50433 | 1 |
|
| 50434 | 1 |
|
| 50435 | 5 |
|
| 50440 | 1 |
Current step into the border colour cycle (0–7); decremented each frame by Cycle_Border_Colour and used to index the attribute pair table at Table_Border_Colour_Pairs.
|
| 50441 | 2 |
Little-endian pointer into the entity list; loaded at the start of Spawn_Wave_Enemies and updated with the final write position on exit.
|
| 50443 | 2 |
Snapshot of *Entity_List_Write_Pointer taken at the start of Spawn_Wave_Enemies; used alongside *Entity_List_Working_Pointer to bracket the range of entity records written.
|
| 50445 | 2 |
Working write pointer into the entity list; updated by Spawn_Wave_Enemies_Populate_Slot as each record is appended and flushed to *Entity_List_Write_Pointer when the build completes.
|
| 50447 | 8 |
General-purpose two-byte pointer stash used by several entity routines to preserve a working pointer across subroutine calls.
|
| 50455 | 1 |
Index of the player's current vertical movement direction. Stored each frame by Main_Game_Loop and used to look up the vertical movement delta and the entity type to spawn above or below the player.
|
| 50456 | 1 |
Index of the player's current horizontal movement direction. Stored each frame by Main_Game_Loop and used to look up the horizontal movement delta, the sprite frame, and the entity type to spawn beside the player.
|
| 50457 | 2 |
Little-endian pointer loaded from the word table at 54244 (indexed from 54272) when staging a wave after tape load or max-wave reset; copied into Wave_Definition_Pointer when clearing player state in PlayerDeath.
|
| 50459 | 6 |
Initial animation frame pair for the current wave. Written as a word by 53725 and decremented each frame by Main_Game_Loop at 52322 until it reaches zero.
|
| 50465 | 14 |
Two-byte pointer written by Initialise_Entity_State from the entity state table at Entity_State_Table. Read by Dispatch_Entity_State_Handler and executed via JP (HL) to dispatch the current entity state handler.
|
| 50479 | 2 |
Tracks the progress of the active entity state effect. 0 = no effect running; 1 = one step complete; 2 = all steps complete. Written by Initialise_Entity_State and polled each frame by Dispatch_Entity_State_Handler and Cycle_Border_From_Screen.
|
| 50481 | 1 |
Frame counter for the wave start sprite animation. Initialised to 14 by Initialise_Wave_Start_Sprites and decremented each frame by Animate_Wave_Start_Sprites; when it reaches zero the closing sprite is drawn and the animation restarts.
|
| 50482 | 1 |
When 1 PlayerDeath skips the intro HUD, "PLAYER" messaging and intro delay before losing a life, and skips the extra "PLAYER" line in the game-over branch. Set from the wave-table path together with the table variant in B.
|
| 50483 | 1 |
Countdown loaded to 26 at the start of each wave by Main_Game_Loop. Checked each frame at Main_Loop_Poll; while non-zero the frame is skipped and control branches to the wave-end handler at Dispatch_Narrow_Entity_Approach.
|
| 50484 | 2 |
First per-frame animation counter, initialised to 15 at wave start by Main_Game_Loop.
|
| 50486 | 14 |
Second per-frame animation counter, initialised to 15 at wave start by Main_Game_Loop.
|
| 50956 | 7 |
Seven attribute bytes (65 / 66 / 68 ink cycling) and a 0 terminator, consumed from UpdateAttributeBar when UpdateAttributeBar_ResetTable arms HL here after the "H" key path through PollHKey.
|
| 54244 | 20 |
|
| 61662 | 16 |
Eight outer/inner attribute-byte pairs for the screen border colour cycle. Each word is read by Cycle_Border_Colour and passed as DE to Fill_Border_Attributes.
|
| 62804 | 2 |
Self-modifying pointer into Colour_Cycle_Table. Holds the address of the next colour cycle entry to apply on the next call to Advance_Colour_Cycle.
|
| 62878 | 2 |
|
| 63572 | 1964 |
|