Prev: 55070 Up: Map Next: 55457
55237: Bowie logic
Handles all the logic around drawing Bowie and handling his "special" logic.
Bowie state variables/ flags.
Bowie_Good_Bad 55237 DEFB 1 If this is $00 then Bowie is "good". If this is $01 then he is "bad" (i.e. there's a bomb under his hat).
Bowie_Frame_Reference 55238 DEFB 34 The current character frame index reference.
Bowie_State_Reference 55239 DEFB 6 The current character state.
Bowie_Timer_01 55240 DEFB 0 Character timer 1.
Bowie_Timer_02 55241 DEFB 0 Character timer 2.
Bowie_Timer_03 55242 DEFB 0 Character timer 3.
Bowie_Timer_04 55243 DEFB 0 Character timer 4.
Bowie_Timer_05 55244 DEFB 0 Character timer 5.
Bowie_Timer_06 55245 DEFB 0 Character timer 6.
This routine looks at the current character state and routes to the correct subroutine.
Bowie_Routing 55246 LD HL,55239 A=Bowie_State_Reference.
55249 LD A,(HL)
55250 DEC A Work out which routine to jump to based on the current state.
A Routine
1 Bowie_Open_01
2 Bowie_Open_02
3 Bowie_Open_03
4 Bowie_Open_04
5 Bowie_Close_02
6 Bowie_Close_01
55251 JR Z,Bowie_Open_01
55253 DEC A
55254 JR Z,Bowie_Open_02
55256 DEC A
55257 JR Z,Bowie_Open_03
55259 DEC A
55260 JR Z,Bowie_Open_04
55262 DEC A
55263 JR Z,Bowie_Close_02
55265 JR Bowie_Close_01
Handle door frame 1 countdown/ transition to door frame 2.
Bowie_Open_01 55267 LD A,(55240) Decrease Bowie_Timer_01 by one, return if result is not zero.
55270 DEC A
55271 LD (55240),A
55274 RET NZ
55275 INC (HL) Move onto next character state.
55276 LD A,27 Pass character index $1B to Draw_DoorFrame02 and return.
55278 CALL Draw_DoorFrame02
55281 RET
Handle door frame 2 countdown/ transition to door frame 3.
Bowie_Open_02 55282 LD A,(55241) Decrease Bowie_Timer_02 by one, return if result is not zero.
55285 DEC A
55286 LD (55241),A
55289 RET NZ
55290 INC (HL) Move onto next character state.
55291 LD A,27 Pass character index $1B to Draw_DoorFrame03 and return.
55293 CALL Draw_DoorFrame03
55296 RET
Handle door frame 3 countdown/ transition to door frame 4.
Bowie_Open_03 55297 LD A,(55242) Decrease Bowie_Timer_03 by one, return if result is not zero.
55300 DEC A
55301 LD (55242),A
55304 RET NZ
55305 INC (HL) Move onto next character state.
55306 LD A,27 Pass character frame index $1B to Draw_DoorFrame04 and return.
55308 CALL Draw_DoorFrame04
55311 RET
Handle door frame 4 countdown/ transition to door frame 3.
Bowie_Open_04 55312 LD E,(IX+4) Call Hit_Detection with a callback to either Bowie_Cash_Action or Bowie_Bomb_Action.
55315 LD D,(IX+5)
55318 CALL Hit_Detection
55321 LD A,(55243) Decrease Bowie_Timer_04 by one, return if result is not zero.
55324 DEC A
55325 LD (55243),A
55328 RET NZ
Bowie_Close_03 55329 LD HL,55239 Move onto next character state (Bowie_State_Reference).
55332 INC (HL)
55333 LD A,(55238) Load the character frame index from Bowie_Frame_Reference, pass it to Draw_DoorFrame03 and return.
55336 CALL Draw_DoorFrame03
55339 RET
Handle door frame 3 countdown/ transition to door frame 2.
Bowie_Close_02 55340 LD A,(55244) Decrease Bowie_Timer_05 by one, return if result is not zero.
55343 DEC A
55344 LD (55244),A
55347 RET NZ
55348 INC (HL) Move onto next character state.
55349 LD A,(55238) Load the character frame index from Bowie_Frame_Reference, pass it to Draw_DoorFrame02 and return.
55352 CALL Draw_DoorFrame02
55355 RET
Handle door frame 2 countdown/ transition to door frame 1.
Bowie_Close_01 55356 LD A,(55245) Decrease Bowie_Timer_06 by one, return if result is not zero.
55359 DEC A
55360 LD (55245),A
55363 RET NZ
55364 CALL Draw_DoorFrame1 Call Draw_DoorFrame1 (i.e. no character/ door is shut).
55367 CALL Reset___ Call Reset___.
55370 RET Return.
Handles marking this as something shootable.
Bowie_Cash_Action 55371 LD (IX+6),5 Writes $05 to IX+$06 and $01 to IX+$07.
55375 LD (IX+7),1
55379 LD A,1 Writes $01 to IX+$08 and 53648.
55381 LD (IX+8),A
55384 LD (53648),A
55387 JR Bowie_Close_03 Jump to Bowie_Close_03.
Handles marking this as something unshootable.
Bowie_Bomb_Action 55389 LD A,5 Writes $05 to 54014 and return.
55391 LD (54014),A
55394 RET
Handles both shooting the hats off Bowie's head, and checking/ routing on the last frame for the "surprise".
Bowie_Shot_Action 55395 LD HL,55238 A=Bowie_Frame_Reference.
55398 LD A,(HL)
55399 CP 33 Is it character frame reference (1 hat | 33)?
55401 LD (IX+6),1 Writes $01 to IX+$06.
55405 JR NC,Bowie_Check If Bowie is on the last frame then jump forward to Bowie_Check.
55407 INC A Else update Bowie_Frame_Reference to point at the next frame, call Draw_DoorFrame04 and return.
55408 LD (HL),A
55409 CALL Draw_DoorFrame04
55412 RET
Checks the "good/ bad" flag and routes the gameplay accordingly.
Bowie_Check 55413 LD A,(55237) If Bowie_Good_Bad is zero jump to Bowie_State_Cash.
55416 AND A
55417 JR Z,Bowie_State_Cash
55419 JR Bowie_State_Bomb Jump to Bowie_State_Bomb.
Handle displaying cash character frame.
Bowie_State_Cash 55421 LD A,35 Writes character frame reference cash | 35 to Bowie_Frame_Reference, and pass it to Draw_DoorFrame04.
55423 LD (55238),A
55426 CALL Draw_DoorFrame04
55429 LD HL,55371 Writes Bowie_Cash_Action to the current door flags (e.g. Door_Bowie_Action_01, Door_Bowie_Action_02 or Door_Bowie_Action_03).
55432 LD (IX+4),L
55435 LD (IX+5),H
55438 RET Return.
Handle displaying bomb character frame.
Bowie_State_Bomb 55439 LD A,34 Writes character frame reference bomb | 34 to Bowie_Frame_Reference, and pass it to Draw_DoorFrame04.
55441 LD (55238),A
55444 CALL Draw_DoorFrame04
55447 LD HL,55389 Writes Bowie_Bomb_Action to the current door flags (e.g. Door_Bowie_Action_01, Door_Bowie_Action_02 or Door_Bowie_Action_03).
55450 LD (IX+4),L
55453 LD (IX+5),H
55456 RET Return.
Prev: 55070 Up: Map Next: 55457