![]() |
Routines |
| Prev: 57291 | Up: Map | Next: 57432 |
|
Used by the routine at InitialiseGame.
|
||||
|
Restore the default ZX Spectrum font.
|
||||
| AllTreasureCollected | 57299 | LD HL,15360 | Write 15360 (CHARSET-256) to *CHARS. | |
| 57302 | LD (23606),HL | |||
|
Set the attributes.
|
||||
| 57305 | LD A,16 | Set INK: WHITE (7). | ||
| 57307 | RST 16 | |||
| 57308 | LD A,7 | |||
| 57310 | RST 16 | |||
| 57311 | LD A,17 | Set PAPER: *ActiveRoom_PaperColour. | ||
| 57313 | RST 16 | |||
| 57314 | LD A,(23505) | |||
| 57317 | RST 16 | |||
|
Don't decrease *TimerGoldenKey every frame, we track a count of the frames and only decrease it every 20th frame.
|
||||
| 57318 | LD BC,(23546) | Decrease *TimerGoldenKey_FrameSkip by one. | ||
| 57322 | DEC BC | |||
| 57323 | LD (23546),BC | |||
| 57327 | LD A,B | Skip to DisplayGoldenKeyTimer if *TimerGoldenKey_FrameSkip is not yet zero. | ||
| 57328 | OR C | |||
| 57329 | JR NZ,DisplayGoldenKeyTimer | |||
|
20 frames have passed, so decrease the actual timer and check that it hasn't expired yet.
|
||||
| 57331 | LD BC,20 | Reset *TimerGoldenKey_FrameSkip back to 0020. | ||
| 57334 | LD (23546),BC | |||
| 57338 | LD A,(23551) | Decrease *TimerGoldenKey by one. | ||
| 57341 | DEC A | |||
| 57342 | LD (23551),A | |||
|
Player lives don't matter with the Golden Key section of the game, once the timer expires it's Game Over.
|
||||
| 57345 | JP Z,ForceGameOver | Jump to ForceGameOver if *TimerGoldenKey is zero. | ||
|
Display the Golden Key timer.
|
||||
| DisplayGoldenKeyTimer | 57348 | LD C,12 | Set up the screen buffer location 12/2 using CL_SET. | |
| 57350 | LD B,2 | |||
| 57352 | CALL 3545 | |||
|
|
||||
| 57355 | LD B,0 | BC=*TimerGoldenKey. | ||
| 57357 | LD A,(23551) | |||
| 57360 | LD C,A | |||
| 57361 | CALL 6683 | Call OUT_NUM_1. | ||
|
The ASCII space after the timer acts to clear "extra" digits when the timer transitions to being single digit.
|
||||
| 57364 | LD A,32 | A=ASCII "space" (32). | ||
| 57366 | CALL PrintColourCharacter | Call PrintColourCharacter. | ||
|
Is the Golden Key in the current room?
|
||||
| 57369 | LD A,(23507) | Return if *CurrentRoom is not equal to *GoldenKeyRoom. | ||
| 57372 | LD HL,23548 | |||
| 57375 | CP (HL) | |||
| 57376 | RET NZ | |||
|
It is in this room, so display it.
|
||||
| 57377 | LD BC,(23549) | BC=*PositionGoldenKey. | ||
| 57381 | LD HL,57019 | Write 57019 (Graphics_GoldenKey) to *CHARS. | ||
| 57384 | LD (23606),HL | |||
| 57387 | LD A,16 | Set INK: YELLOW (6). | ||
| 57389 | RST 16 | |||
| 57390 | LD A,6 | |||
| 57392 | RST 16 | |||
| 57393 | LD A,32 | A=32 (base sprite ID). | ||
| 57395 | LD DE,513 | DE=Set the sprite width/ height (2/ 1). | ||
| 57398 | CALL PrintSprite | Call PrintSprite. | ||
|
Handle player collision with the Golden Key.
|
||||
| 57401 | LD IX,62001 | IX=TablePlayerAttributes. | ||
| 57405 | LD BC,(23549) | BC=*PositionGoldenKey. | ||
| 57409 | LD A,(IX+0) | Return if the players horizontal co-ordinate is not equal to the Golden Key horizontal co-ordinate. | ||
| 57412 | CP C | |||
| 57413 | RET NZ | |||
| 57414 | LD A,(IX+1) | Return if the players vertical co-ordinate is not equal to the Golden Key vertical co-ordinate. | ||
| 57417 | CP B | |||
| 57418 | RET NZ | |||
|
The player has collected the Golden Key!
Hilariously, just beep at the player and restart the game. Zero fanfare!
|
||||
| 57419 | LD DE,200 | DE=0200. | ||
| 57422 | LD HL,200 | HL=0200. | ||
| 57425 | CALL 949 | Call BEEPER. | ||
| 57428 | POP BC | Restore BC from the stack. | ||
| 57429 | JP InitialiseGameStates | Jump to InitialiseGameStates. | ||
| Prev: 57291 | Up: Map | Next: 57432 |