Routines |
Prev: D1AA | Up: Map | Next: D24F |
Used by the routines at GameOver and InputHandler_Common.
|
||||
Game_Loop | D1D0 | DI | Disable interrupts. | |
Print the main menu options.
|
||||
D1D1 | LD A,$00 | Set border colour to BLACK. | ||
D1D3 | OUT ($FE),A | |||
D1D5 | LD HL,$CBE1 | HL=Data_MainMenu. | ||
D1D8 | CALL UnpackScreenData | Call UnpackScreenData. | ||
D1DB | CALL Handler_MainMenu | Call Handler_MainMenu. | ||
Initialise a new game.
|
||||
D1DE | LD BC,$0000 | Initialise *Score_Digit_01, *Score_Digit_02 and *Score_Digit_03 to 000000. | ||
D1E1 | LD ($D874),BC | |||
D1E5 | LD ($D875),BC | |||
D1E9 | XOR A | Write 00 to *D86D. | ||
D1EA | LD ($D86D),A | |||
Print the in-game surround.
|
||||
D1ED | LD A,$05 | Set border colour to CYAN. | ||
D1EF | OUT ($FE),A | |||
D1F1 | LD HL,$C2A6 | HL=Data_PlayareaSurround. | ||
D1F4 | CALL UnpackScreenData | Call UnpackScreenData. | ||
Set the starting lives.
|
||||
D1F7 | LD A,$04 | Write 04 to *Lives. | ||
D1F9 | LD ($D827),A | |||
D1FC | LD HL,$5ADA | Write 5ADA (attribute buffer location) to *LifeIcons_ScreenPosition. | ||
D1FF | LD ($D872),HL | |||
Initialise the new game with the level 1 data.
|
||||
D202 | LD HL,$D28D | Write Table_LevelData to *Pointer_CurrentLevelData. | ||
D205 | LD ($D28B),HL | |||
Note, this level counter counts down instead of up.
|
||||
D208 | LD B,$0A | Set a counter in B for the total number of levels (0A). | ||
This level counter is used for display purposes.
|
||||
D20A | XOR A | Write 00 to *Level. | ||
D20B | LD ($D86E),A | |||
The game loops here in-game to begin a new level.
|
||||
Game_NewLevel | D20E | PUSH BC | Stash the level counter on the stack. | |
D20F | LD HL,($D28B) | HL=*Pointer_CurrentLevelData. | ||
D212 | LD E,(HL) | DE=current level data pointer. | ||
D213 | INC HL | |||
D214 | LD D,(HL) | |||
D215 | INC HL | Increment the level data pointer by one to point to the next level. | ||
D216 | LD ($D28B),HL | Write the next level pointer to *Pointer_CurrentLevelData. | ||
D219 | EX DE,HL | Exchange the DE and HL registers. | ||
Add one to the current level.
|
||||
D21A | LD A,($D86E) | A=*Level. | ||
D21D | INC A | Increment A by one. | ||
D21E | DAA | Adjust A for BCD operations. | ||
D21F | LD ($D86E),A | Write A back to *Level. | ||
Set everything up...
|
||||
D222 | CALL Game_Initialisation | Call Game_Initialisation. | ||
Marilyn Monroe is the last level, and to make it more difficult, no preview image is shown. Instead, the last frame of the "static" generated by StaticAnimation is left on the screen.
|
||||
D225 | LD A,$01 | Set 01 in A to indicate the last level. | ||
D227 | POP BC | Restore the level counter from the stack. | ||
D228 | PUSH BC | But keep a stashed copy of the level counter on the stack. | ||
D229 | CP B | Jump to Skip_MarilynMonroe if the level countdown is equal to 01 (and so is the last level). | ||
D22A | JR Z,Skip_MarilynMonroe | |||
D22C | CALL Print_HelperPreviewImage | Else this isn't the last level; call Print_HelperPreviewImage. | ||
Skip_MarilynMonroe | D22F | CALL Colourise_PreviewGrid | Call Colourise_PreviewGrid. | |
D232 | EI | Enable interrupts. | ||
D233 | CALL StartGame | Call StartGame. | ||
D236 | POP BC | Restore the level counter from the stack. | ||
D237 | DJNZ Game_NewLevel | Decrease the level counter by one and loop back to Game_NewLevel until all the levels have been played. | ||
The game has been completed!
|
||||
D239 | LD B,$1E | B=1E. | ||
D23B | LD HL,$D24F | HL=D24F. | ||
D23E | CALL $EF4A | Call EF4A. | ||
D241 | CALL Controller_GameOver | Call Controller_GameOver. | ||
Long pause...
|
||||
D244 | LD BC,$0000 | BC=0000. | ||
Pause_Loop | D247 | DEC BC | Decrease BC by one. | |
D248 | LD A,B | Jump to Pause_Loop until BC is zero. | ||
D249 | OR C | |||
D24A | JR NZ,Pause_Loop | |||
D24C | JP Game_Loop | Jump to Game_Loop. |
Prev: D1AA | Up: Map | Next: D24F |