Prev: 54102 Up: Map Next: 54244
54119: Player Death
Used by the routine at PlayerDeath_TapeLoadContinue.
Handles a lost life and game-over flow: optional HUD and "PLAYER" messaging, decrementing Lives, calling Stage_Next_Wave to re-stage the wave, swapping players with Swap_Player_State, printing "GAME OVER" when no lives remain, and either returning to the attract mode at GameEntryPoint or looping. A lookup table at 54244 (read from 54272) supplies a start pointer stored at WaveStartPointer; Check_S_Key_During_Display jumps to PlayerDeath_TapeLoadContinue after a successful tape load. Clears player state at Player_1_State, wave and score fields, and applies Messaging_ResetMargins (reset margins) when starting a fresh game.
PlayerDeath 54119 LD A,(50482) A=*DeathSequenceMode (death-sequence mode; 1 = skip the intro HUD/delay).
54122 CP 1 Compare with 1.
54124 JR Z,PlayerDeath_LoseLife If set, jump to PlayerDeath_LoseLife to decrement Lives immediately.
Full death sequence: redraw the HUD (RenderHUD), print Messaging_Player ("PLAYER") via PrintMessaging, then print the current player digit from *50207 as ASCII (48–57).
54126 CALL RenderHUD Call RenderHUD.
54129 LD HL,54087 Call PrintMessaging using Messaging_Player.
54132 CALL PrintMessaging
54135 LD A,(50207) A=*50207 (player index for the digit).
54138 ADD A,%00110000 Convert to ASCII ("0"–"9").
54140 CALL PrintDispatch Call PrintDispatch (print dispatch).
54143 LD B,32 Inner delay loop count 32 (B=32).
PlayerDeath_IntroDelay 54145 PUSH BC Stash BC on the stack.
54146 CALL Delay_Long Call Delay_Long.
54149 CALL UpdateAttributeBar Call UpdateAttributeBar.
54152 POP BC Restore BC from the stack.
54153 DJNZ PlayerDeath_IntroDelay Decrease counter and loop back to PlayerDeath_IntroDelay until the intro delay finishes.
PlayerDeath_LoseLife 54155 LD HL,50197 HL=Lives (lives counter).
54158 DEC (HL) Decrease *HL (lose one life).
54159 CALL Stage_Next_Wave Call Stage_Next_Wave (re-stage the wave / death handling).
54162 LD A,(50197) Jump to PlayerDeath_GameOver if *Lives shows no lives are left.
54165 AND A
54166 JR Z,PlayerDeath_GameOver
Lives remain: swap to the other player and continue if two-player mode.
54168 CALL Swap_Player_State Call Swap_Player_State.
If not two-player, jump back to PlayerDeath for the same player.
54171 LD A,(50206) Jump back to PlayerDeath if *TwoPlayerSessionFlag is not set.
54174 CP 1
54176 JR NZ,PlayerDeath
54178 CALL Swap_Player_State Call Swap_Player_State (swap back).
54181 JR PlayerDeath Jump back to PlayerDeath.
No lives left: redraw the HUD, then either the "PLAYER" line or straight to "GAME OVER" depending on *DeathSequenceMode, with a longer delay loop.
PlayerDeath_GameOver 54183 CALL RenderHUD Call RenderHUD.
54186 LD A,(50482) Jump to PlayerDeath_GameOverDelay if *DeathSequenceMode is 1.
54189 CP 1
54191 JR Z,PlayerDeath_GameOverDelay
54193 LD HL,54087 Call PrintMessaging using Messaging_Player.
54196 CALL PrintMessaging
54199 LD A,(50207) A=*50207.
54202 ADD A,%00110000 Convert to ASCII.
54204 CALL PrintDispatch Call PrintDispatch.
PlayerDeath_GameOverDelay 54207 LD HL,54102 Call PrintMessaging using Messaging_GameOver.
54210 CALL PrintMessaging
54213 LD B,41 Longer delay loop count 41 (B=41).
PlayerDeath_GameOverDelayLoop 54215 PUSH BC Stash BC on the stack.
54216 CALL Delay_Long Call Delay_Long.
54219 CALL UpdateAttributeBar Call UpdateAttributeBar.
54222 POP BC Restore BC from the stack.
54223 DJNZ PlayerDeath_GameOverDelayLoop Decrease counter and loop back to PlayerDeath_GameOverDelayLoop.
Set *TwoPlayerSessionFlag to 1 swap players with Swap_Player_State, then branch on the flag read back from *TwoPlayerSessionFlag.
54225 LD A,1 Write 1 to *TwoPlayerSessionFlag.
54227 LD (50206),A
54230 CALL Swap_Player_State Call Swap_Player_State.
54233 LD A,(50206) Jump to GameEntryPoint if *TwoPlayerSessionFlag is 1 (attract mode).
54236 CP 1
54238 JP Z,GameEntryPoint
54241 JP PlayerDeath Jump back to PlayerDeath.
Prev: 54102 Up: Map Next: 54244