![]() |
Routines |
| Prev: 56841 | Up: Map | Next: 57275 |
|
Don't reset player lives or booty count if the game has already been completed and has looped around to start again.
|
||||
| InitialiseGame | 57000 | LD A,(23536) | Jump to InitialiseGameStates if *GameState is set to "Game Looped Mode" (2). | |
| 57003 | CP 2 | |||
| 57005 | JP Z,InitialiseGameStates | |||
|
Initialise new Game State attributes.
|
||||
| 57008 | LD A,3 | Write 3 to *PlayerLives. | ||
| 57010 | LD (23537),A | |||
| 57013 | LD BC,0 | Write 0000 to *PlayerBooty. | ||
| 57016 | LD (23540),BC | |||
|
This entry point is used by the routine at AllTreasureCollected.
|
||||
| InitialiseGameStates | 57020 | XOR A | Write 0 to *CurrentRoom. | |
| 57021 | LD (23507),A | |||
| 57024 | LD BC,125 | Write 0125 to *PlayerTreasure. | ||
| 57027 | LD (23538),BC | |||
| 57031 | JR InitialisePlayer | Jump to InitialisePlayer. | ||
|
This entry point is used by the routine at LoseLife.
|
||||
| SetFirstRoom | 57033 | LD A,1 | Write 1 to *CurrentRoom. | |
| 57035 | LD (23507),A | |||
|
Initialise Player starting attributes.
|
||||
| InitialisePlayer | 57038 | LD DE,62001 | Copy 0020 bytes of data from TableDefaultPlayerAttributes to TablePlayerAttributes. | |
| 57041 | LD HL,62021 | |||
| 57044 | LD BC,20 | |||
| 57047 | LDIR | |||
| 57049 | LD A,0 | Write 0 to: | ||
| 57051 | LD (62266),A | |||
| 57054 | LD (62271),A | |||
| 57057 | LD (58489),A | |||
| 57060 | LD A,0 | Write 0 to *TableBombSparks. | ||
| 57062 | LD (62171),A | |||
| 57065 | LD A,0 | Write 0 to: | ||
| 57067 | LD (62236),A | |||
| 57070 | LD (23672),A | |||
| 57073 | LD (23673),A | |||
| 57076 | LD (62272),A | |||
|
This also draws the whole room.
|
||||
| 57079 | CALL PrintStatusBar | Call PrintStatusBar. | ||
|
Restore the default ZX Spectrum font.
|
||||
| 57082 | LD HL,15360 | Write 15360 (CHARSET-256) to *CHARS. | ||
| 57085 | LD (23606),HL | |||
| 57088 | LD A,16 | Set INK: YELLOW (6). | ||
| 57090 | RST 16 | |||
| 57091 | LD A,6 | |||
| 57093 | RST 16 | |||
| 57094 | LD A,17 | Set PAPER: *Active_BorderColour. | ||
| 57096 | RST 16 | |||
| 57097 | LD A,(23504) | |||
| 57100 | RST 16 | |||
| 57101 | CALL PrintStatusBarIcons | Call PrintStatusBarIcons. | ||
| 57104 | CALL ResetSoundFlags | Call ResetSoundFlags. | ||
|
This is the beginning of the game loop.
|
||||
| Game_Loop | 57107 | LD A,17 | Set PAPER: *ActiveRoom_PaperColour. | |
| 57109 | RST 16 | |||
| 57110 | LD A,(23505) | |||
| 57113 | RST 16 | |||
| 57114 | CALL Handler_Animals | Call Handler_Animals. | ||
| 57117 | CALL Handler_PortHole | Call Handler_PortHole. | ||
| 57120 | CALL Handler_Bomb | Call Handler_Bomb. | ||
| 57123 | CALL Handler_Explosion | Call Handler_Explosion. | ||
| 57126 | CALL Handler_Pirates | Call Handler_Pirates. | ||
| 57129 | CALL InGamePause | Call InGamePause. | ||
| 57132 | CALL Handler_Lifts | Call Handler_Lifts. | ||
|
The player doesn't display during the demo mode, he can still "die" though - hence how often you hear the "lose a life" sound.
|
||||
| 57135 | LD A,(23536) | Call Handler_Player if *GameState is not set to "Demo Mode" (3). | ||
| 57138 | CP 3 | |||
| 57140 | CALL NZ,Handler_Player | |||
| 57143 | CALL Handler_Lifts2 | Call Handler_Lifts2. | ||
| 57146 | LD A,(59424) | Jump to InitialiseGame_0 if *59424 is equal to 0. | ||
| 57149 | CP 0 | |||
| 57151 | JR Z,InitialiseGame_0 | |||
| 57153 | DEC A | Decrease A by one. | ||
| 57154 | LD (59424),A | Write A to *59424. | ||
| InitialiseGame_0 | 57157 | LD A,(23530) | Call PlayerControls_Kempston if *ControlMethod is set to Kempston joystick (12). | |
| 57160 | CP 12 | |||
| 57162 | CALL Z,PlayerControls_Kempston | |||
| 57165 | LD A,(23530) | Call PlayerControls if *ControlMethod is not set to Kempston joystick (12). | ||
| 57168 | CP 12 | |||
| 57170 | CALL NZ,PlayerControls | |||
| 57173 | CALL Handler_Items | Call Handler_Items. | ||
| 57176 | CALL Handler_DisappearingFloors | Call Handler_DisappearingFloors. | ||
|
Display the currently carried key.
Set attributes.
|
||||
| 57179 | LD A,16 | Set INK: YELLOW (6). | ||
| 57181 | RST 16 | |||
| 57182 | LD A,6 | |||
| 57184 | RST 16 | |||
| 57185 | LD A,17 | Set PAPER: *Active_BorderColour. | ||
| 57187 | RST 16 | |||
| 57188 | LD A,(23504) | |||
| 57191 | RST 16 | |||
| 57192 | LD C,27 | Set up the screen buffer location 27/1 using CL_SET. | ||
| 57194 | LD B,1 | |||
| 57196 | CALL 3545 | |||
|
Restore the default ZX Spectrum font.
|
||||
| 57199 | LD HL,15360 | Write 15360 (CHARSET-256) to *CHARS. | ||
| 57202 | LD (23606),HL | |||
| 57205 | LD IX,62001 | IX=TablePlayerAttributes. | ||
| 57209 | LD A,(IX+16) | A=*IX+16. | ||
| 57212 | ADD A,48 | A+=48. | ||
| 57214 | CALL PrintColourCharacter | Call PrintColourCharacter. | ||
| 57217 | LD BC,(23538) | BC=*PlayerTreasure. | ||
| 57221 | LD A,C | Call AllTreasureCollected if BC is zero. | ||
| 57222 | OR B | |||
| 57223 | CALL Z,AllTreasureCollected | |||
| 57226 | LD A,(23536) | Jump to Game_Loop if *GameState is not set to "Demo Mode" (3). | ||
| 57229 | CP 3 | |||
| 57231 | JP NZ,Game_Loop | |||
|
Else, this is the demo mode - so check the timer.
|
||||
| 57234 | LD A,(23673) | Loop back round to Game_Loop until *FRAMES+1 is equal to 3. | ||
| 57237 | CP 3 | |||
| 57239 | JP NZ,Game_Loop | |||
| 57242 | LD A,(62272) | Increment *TimerDemoMode by one. | ||
| 57245 | INC A | |||
| 57246 | LD (62272),A | |||
| 57249 | CP 2 | Call 60815 if *TimerDemoMode is equal to 2. | ||
| 57251 | CALL Z,60815 | |||
| 57254 | CALL GetRandomNumber | Get a random room number between 2 and 17. | ||
| 57257 | AND %00001111 | |||
| 57259 | ADD A,2 | |||
| 57261 | CALL ChangeRoom | Call ChangeRoom. | ||
|
Reset the *FRAMES counter back to 0000.
|
||||
| 57264 | LD A,0 | Write 0 to: | ||
| 57266 | LD (23672),A | |||
| 57269 | LD (23673),A | |||
| 57272 | JP Game_Loop | Jump to Game_Loop. | ||
| Prev: 56841 | Up: Map | Next: 57275 |