Prev: 871A Up: Map Next: 87DC
873C: Escape scene
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