![]() |
Routines |
| Prev: D71E | Up: Map | Next: D8A1 |
|
Handles all the logic around drawing Bowie and handling his "special" logic.
|
|||||||||||||||||
|
Bowie state variables/ flags.
|
|||||||||||||||||
| Bowie_Good_Bad | D7C5 | DEFB $01 | 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 | D7C6 | DEFB $22 | The current character frame index reference. | ||||||||||||||
| Bowie_State_Reference | D7C7 | DEFB $06 | The current character state. | ||||||||||||||
| Bowie_Timer_01 | D7C8 | DEFB $00 | Character timer 1. | ||||||||||||||
| Bowie_Timer_02 | D7C9 | DEFB $00 | Character timer 2. | ||||||||||||||
| Bowie_Timer_03 | D7CA | DEFB $00 | Character timer 3. | ||||||||||||||
| Bowie_Timer_04 | D7CB | DEFB $00 | Character timer 4. | ||||||||||||||
| Bowie_Timer_05 | D7CC | DEFB $00 | Character timer 5. | ||||||||||||||
| Bowie_Timer_06 | D7CD | DEFB $00 | Character timer 6. | ||||||||||||||
|
This routine looks at the current character state and routes to the correct subroutine.
|
|||||||||||||||||
| Bowie_Routing | D7CE | LD HL,$D7C7 | A=Bowie_State_Reference. | ||||||||||||||
| D7D1 | LD A,(HL) | ||||||||||||||||
| D7D2 | DEC A | Work out which routine to jump to based on the current state.
|
|||||||||||||||
| D7D3 | JR Z,Bowie_Open_01 | ||||||||||||||||
| D7D5 | DEC A | ||||||||||||||||
| D7D6 | JR Z,Bowie_Open_02 | ||||||||||||||||
| D7D8 | DEC A | ||||||||||||||||
| D7D9 | JR Z,Bowie_Open_03 | ||||||||||||||||
| D7DB | DEC A | ||||||||||||||||
| D7DC | JR Z,Bowie_Open_04 | ||||||||||||||||
| D7DE | DEC A | ||||||||||||||||
| D7DF | JR Z,Bowie_Close_02 | ||||||||||||||||
| D7E1 | JR Bowie_Close_01 | ||||||||||||||||
|
Handle door frame 1 countdown/ transition to door frame 2.
|
|||||||||||||||||
| Bowie_Open_01 | D7E3 | LD A,($D7C8) | Decrease Bowie_Timer_01 by one, return if result is not zero. | ||||||||||||||
| D7E6 | DEC A | ||||||||||||||||
| D7E7 | LD ($D7C8),A | ||||||||||||||||
| D7EA | RET NZ | ||||||||||||||||
| D7EB | INC (HL) | Move onto next character state. | |||||||||||||||
| D7EC | LD A,$1B | Pass character index $1B to Draw_DoorFrame02 and return. | |||||||||||||||
| D7EE | CALL Draw_DoorFrame02 | ||||||||||||||||
| D7F1 | RET | ||||||||||||||||
|
Handle door frame 2 countdown/ transition to door frame 3.
|
|||||||||||||||||
| Bowie_Open_02 | D7F2 | LD A,($D7C9) | Decrease Bowie_Timer_02 by one, return if result is not zero. | ||||||||||||||
| D7F5 | DEC A | ||||||||||||||||
| D7F6 | LD ($D7C9),A | ||||||||||||||||
| D7F9 | RET NZ | ||||||||||||||||
| D7FA | INC (HL) | Move onto next character state. | |||||||||||||||
| D7FB | LD A,$1B | Pass character index $1B to Draw_DoorFrame03 and return. | |||||||||||||||
| D7FD | CALL Draw_DoorFrame03 | ||||||||||||||||
| D800 | RET | ||||||||||||||||
|
Handle door frame 3 countdown/ transition to door frame 4.
|
|||||||||||||||||
| Bowie_Open_03 | D801 | LD A,($D7CA) | Decrease Bowie_Timer_03 by one, return if result is not zero. | ||||||||||||||
| D804 | DEC A | ||||||||||||||||
| D805 | LD ($D7CA),A | ||||||||||||||||
| D808 | RET NZ | ||||||||||||||||
| D809 | INC (HL) | Move onto next character state. | |||||||||||||||
| D80A | LD A,$1B | Pass character frame index $1B to Draw_DoorFrame04 and return. | |||||||||||||||
| D80C | CALL Draw_DoorFrame04 | ||||||||||||||||
| D80F | RET | ||||||||||||||||
|
Handle door frame 4 countdown/ transition to door frame 3.
|
|||||||||||||||||
| Bowie_Open_04 | D810 | LD E,(IX+$04) | Call Hit_Detection with a callback to either Bowie_Cash_Action or Bowie_Bomb_Action. | ||||||||||||||
| D813 | LD D,(IX+$05) | ||||||||||||||||
| D816 | CALL Hit_Detection | ||||||||||||||||
| D819 | LD A,($D7CB) | Decrease Bowie_Timer_04 by one, return if result is not zero. | |||||||||||||||
| D81C | DEC A | ||||||||||||||||
| D81D | LD ($D7CB),A | ||||||||||||||||
| D820 | RET NZ | ||||||||||||||||
| Bowie_Close_03 | D821 | LD HL,$D7C7 | Move onto next character state (Bowie_State_Reference). | ||||||||||||||
| D824 | INC (HL) | ||||||||||||||||
| D825 | LD A,($D7C6) | Load the character frame index from Bowie_Frame_Reference, pass it to Draw_DoorFrame03 and return. | |||||||||||||||
| D828 | CALL Draw_DoorFrame03 | ||||||||||||||||
| D82B | RET | ||||||||||||||||
|
Handle door frame 3 countdown/ transition to door frame 2.
|
|||||||||||||||||
| Bowie_Close_02 | D82C | LD A,($D7CC) | Decrease Bowie_Timer_05 by one, return if result is not zero. | ||||||||||||||
| D82F | DEC A | ||||||||||||||||
| D830 | LD ($D7CC),A | ||||||||||||||||
| D833 | RET NZ | ||||||||||||||||
| D834 | INC (HL) | Move onto next character state. | |||||||||||||||
| D835 | LD A,($D7C6) | Load the character frame index from Bowie_Frame_Reference, pass it to Draw_DoorFrame02 and return. | |||||||||||||||
| D838 | CALL Draw_DoorFrame02 | ||||||||||||||||
| D83B | RET | ||||||||||||||||
|
Handle door frame 2 countdown/ transition to door frame 1.
|
|||||||||||||||||
| Bowie_Close_01 | D83C | LD A,($D7CD) | Decrease Bowie_Timer_06 by one, return if result is not zero. | ||||||||||||||
| D83F | DEC A | ||||||||||||||||
| D840 | LD ($D7CD),A | ||||||||||||||||
| D843 | RET NZ | ||||||||||||||||
| D844 | CALL Draw_DoorFrame1 | Call Draw_DoorFrame1 (i.e. no character/ door is shut). | |||||||||||||||
| D847 | CALL Reset___ | Call Reset___. | |||||||||||||||
| D84A | RET | Return. | |||||||||||||||
|
Handles marking this as something shootable.
|
|||||||||||||||||
| Bowie_Cash_Action | D84B | LD (IX+$06),$05 | Writes $05 to IX+$06 and $01 to IX+$07. | ||||||||||||||
| D84F | LD (IX+$07),$01 | ||||||||||||||||
| D853 | LD A,$01 | Writes $01 to IX+$08 and D190. | |||||||||||||||
| D855 | LD (IX+$08),A | ||||||||||||||||
| D858 | LD ($D190),A | ||||||||||||||||
| D85B | JR Bowie_Close_03 | Jump to Bowie_Close_03. | |||||||||||||||
|
Handles marking this as something unshootable.
|
|||||||||||||||||
| Bowie_Bomb_Action | D85D | LD A,$05 | Writes $05 to D2FE and return. | ||||||||||||||
| D85F | LD ($D2FE),A | ||||||||||||||||
| D862 | RET | ||||||||||||||||
|
Handles both shooting the hats off Bowie's head, and checking/ routing on the last frame for the "surprise".
|
|||||||||||||||||
| Bowie_Shot_Action | D863 | LD HL,$D7C6 | A=Bowie_Frame_Reference. | ||||||||||||||
| D866 | LD A,(HL) | ||||||||||||||||
| D867 | CP $21 | Is it character frame reference (1 hat | 21)? | |||||||||||||||
| D869 | LD (IX+$06),$01 | Writes $01 to IX+$06. | |||||||||||||||
| D86D | JR NC,Bowie_Check | If Bowie is on the last frame then jump forward to Bowie_Check. | |||||||||||||||
| D86F | INC A | Else update Bowie_Frame_Reference to point at the next frame, call Draw_DoorFrame04 and return. | |||||||||||||||
| D870 | LD (HL),A | ||||||||||||||||
| D871 | CALL Draw_DoorFrame04 | ||||||||||||||||
| D874 | RET | ||||||||||||||||
|
Checks the "good/ bad" flag and routes the gameplay accordingly.
|
|||||||||||||||||
| Bowie_Check | D875 | LD A,($D7C5) | If Bowie_Good_Bad is zero jump to Bowie_State_Cash. | ||||||||||||||
| D878 | AND A | ||||||||||||||||
| D879 | JR Z,Bowie_State_Cash | ||||||||||||||||
| D87B | JR Bowie_State_Bomb | Jump to Bowie_State_Bomb. | |||||||||||||||
|
Handle displaying cash character frame.
|
|||||||||||||||||
| Bowie_State_Cash | D87D | LD A,$23 | Writes character frame reference cash | 23 to Bowie_Frame_Reference, and pass it to Draw_DoorFrame04. | ||||||||||||||
| D87F | LD ($D7C6),A | ||||||||||||||||
| D882 | CALL Draw_DoorFrame04 | ||||||||||||||||
| D885 | LD HL,$D84B | Writes Bowie_Cash_Action to the current door flags (e.g. Door_Bowie_Action_01, Door_Bowie_Action_02 or Door_Bowie_Action_03). | |||||||||||||||
| D888 | LD (IX+$04),L | ||||||||||||||||
| D88B | LD (IX+$05),H | ||||||||||||||||
| D88E | RET | Return. | |||||||||||||||
|
Handle displaying bomb character frame.
|
|||||||||||||||||
| Bowie_State_Bomb | D88F | LD A,$22 | Writes character frame reference bomb | 22 to Bowie_Frame_Reference, and pass it to Draw_DoorFrame04. | ||||||||||||||
| D891 | LD ($D7C6),A | ||||||||||||||||
| D894 | CALL Draw_DoorFrame04 | ||||||||||||||||
| D897 | LD HL,$D85D | Writes Bowie_Bomb_Action to the current door flags (e.g. Door_Bowie_Action_01, Door_Bowie_Action_02 or Door_Bowie_Action_03). | |||||||||||||||
| D89A | LD (IX+$04),L | ||||||||||||||||
| D89D | LD (IX+$05),H | ||||||||||||||||
| D8A0 | RET | Return. | |||||||||||||||
| Prev: D71E | Up: Map | Next: D8A1 |