| Chase H.Q. | Routines |
| Prev: 871A | Up: Map | Next: 87DC |
|
This runs the scene shown when the perp has escaped.
It silences audio, loads the escape scene data, fixes the camera speed, respawns the perp as hazard 0, inhibits collision detection and starts the "failed" chatter. The loop at es_loop then runs the road, hazard and object pipeline until the tunnel has swallowed the perp and the chatter has finished. When the perp reaches distance 5 the three barriers at $A1A3, $A1B7 and $A1CB are activated as a last obstacle.
Used by the routine at main_loop.
|
||||
| escape_scene | 873C | CALL silence_audio_hook | Call silence_audio_hook | |
| 873F | LD HL,$871A | Load address of escape_scene_data | ||
| 8742 | CALL set_up_stage | Call set_up_stage | ||
| 8745 | LD HL,$00FA | Set speed to $FA [speed of the camera] | ||
| 8748 | LD ($A24A),HL | |||
| 874B | LD HL,$8728 | Initialise hazards[0] (the perp) | ||
| 874E | LD DE,$A188 | |||
| 8751 | LD BC,$0014 | |||
| 8754 | LDIR | |||
| 8756 | LD HL,($5D10) | Set $A191 to the perp's car LOD | ||
| 8759 | LD ($A191),HL | |||
| 875C | LD A,$FF | inhibit_collision_detection = $FF -- Stops check_hazard_collisions from running | ||
| 875E | LD ($A221),A | |||
| 8761 | LD HL,$992A | Load address of failed_chatter ("wrong job" / "one more try" / "mediocre driver") | ||
| 8764 | CALL start_chatter | Call start_chatter (priority $FF) | ||
|
Print "GAME OVER" once the transition has completed.
|
||||
| es_loop | 8767 | LD HL,$8CF4 | Load address of game_over_message | |
| 876A | LD A,($A231) | If transition_control != 4 Call setup_overlay_messages | ||
| 876D | CP $04 | |||
| 876F | CALL NZ,setup_overlay_messages | |||
| 8772 | CALL read_map | Call read_map | ||
| 8775 | CALL build_height_table | Call build_height_table | ||
| 8778 | CALL scroll_horizon | Call scroll_horizon | ||
| 877B | CALL layout_road | Call layout_road | ||
| 877E | CALL draw_road | Call draw_road | ||
| 8781 | CALL layout_objects | Call layout_objects | ||
| 8784 | CALL prepare_tunnel | Call prepare_tunnel | ||
| 8787 | CALL spawn_hazards | Call spawn_hazards | ||
| 878A | CALL advance_hazards | Call advance_hazards | ||
| 878D | CALL draw_scene_objects | Call draw_scene_objects | ||
| 8790 | CALL update_scoreboard | Call update_scoreboard | ||
| 8793 | CALL drive_chatter | Call drive_chatter | ||
| 8796 | CALL transition | Call transition | ||
| 8799 | CALL send_playfield | Call send_playfield | ||
| 879C | LD A,($C161) | Loop to es_loop unless the tunnel has appeared | ||
| 879F | AND A | |||
| 87A0 | JR Z,es_loop | |||
|
Tunnel has appeared.
|
||||
| 87A2 | LD A,($C15E) | reading from tunnel code [15 when tunnel is small, 6 when fills screen] | ||
| 87A5 | CP $07 | Loop to es_loop if tunnel code value >= 7 | ||
| 87A7 | JR NC,es_loop | |||
| 87A9 | LD A,($A189) | Load hazards[0].distance byte | ||
| 87AC | CP $05 | Jump if it != 5 | ||
| 87AE | JR NZ,escape_scene_0 | |||
| 87B0 | LD A,$FF | Activate the three barriers | ||
| 87B2 | LD ($A1A3),A | |||
| 87B5 | LD ($A1B7),A | |||
| 87B8 | LD ($A1CB),A | |||
| escape_scene_0 | 87BB | LD HL,$0000 | Set speed to zero [speed of camera] | |
| 87BE | LD ($A24A),HL | |||
| 87C1 | LD A,($A188) | Loop to es_loop while the perp is still active in the hazards | ||
| 87C4 | RRCA | |||
| 87C5 | JR C,es_loop | |||
| 87C7 | LD A,($963D) | Loop while chatter_state > 0 => chatter is still happening | ||
| 87CA | AND A | |||
| 87CB | JR NZ,es_loop | |||
| 87CD | LD A,($A231) | Return if transition_control is zero | ||
| 87D0 | AND A | |||
| 87D1 | RET Z | |||
| 87D2 | CP $04 | If transition_control is 4 | ||
| 87D4 | LD A,$08 | Forward transition | ||
| 87D6 | CALL NZ,setup_transition | Call setup_transition if non-zero | ||
| 87D9 | JP es_loop | Loop | ||
| Prev: 871A | Up: Map | Next: 87DC |