![]() |
Routines |
| Prev: D45E | Up: Map | Next: D5A3 |
|
|
|||||||||||||||||||||
|
Character state variables/ flags.
|
|||||||||||||||||||||
| Customer_Frame_01 | D48F | DEFB $03 | Character frame index 1. | ||||||||||||||||||
| Customer_Frame_02 | D490 | DEFB $04 | Character frame index 2. | ||||||||||||||||||
| Customer_Frame_03 | D491 | DEFB $05 | Character frame index 3. | ||||||||||||||||||
| Customer_Frame_04 | D492 | DEFB $06 | Character frame index 4. | ||||||||||||||||||
| Customer_Frame_05 | D493 | DEFB $07 | Character frame index 5. | ||||||||||||||||||
| Customer_Flag_Uncover | D494 | DEFB $01 | Represents whether the customer will move to uncover a bandit ($00 "normal" / $01 "uncover" action). | ||||||||||||||||||
| Customer_State_Ref | D495 | DEFB $02 | The current character state. | ||||||||||||||||||
| Customer_Timer_01 | D496 | DEFB $0B | Character timer 1. | ||||||||||||||||||
| Customer_Timer_02 | D497 | DEFB $00 | Character timer 2. | ||||||||||||||||||
| Customer_Timer_03 | D498 | DEFB $00 | Character timer 3. | ||||||||||||||||||
| Customer_Timer_04 | D499 | DEFB $1E | Character timer 4. | ||||||||||||||||||
| Customer_Timer_05 | D49A | DEFB $0C | Character timer 5. | ||||||||||||||||||
| Customer_Timer_06 | D49B | DEFB $06 | Character timer 6. | ||||||||||||||||||
| Customer_Timer_07 | D49C | DEFB $08 | Character timer 7. | ||||||||||||||||||
| Customer_Timer_08 | D49D | DEFB $08 | Character timer 8. | ||||||||||||||||||
|
This routine looks at the current character state and routes to the correct subroutine.
|
|||||||||||||||||||||
| Customer_Routing | D49E | LD HL,$D495 | A=Customer_State_Ref. | ||||||||||||||||||
| D4A1 | LD A,(HL) | ||||||||||||||||||||
| D4A2 | DEC A | Work out which routine to use based on the current state.
|
|||||||||||||||||||
| D4A3 | JR Z,Customer_Open_01 | ||||||||||||||||||||
| D4A5 | DEC A | ||||||||||||||||||||
| D4A6 | JR Z,Customer_Open_02 | ||||||||||||||||||||
| D4A8 | DEC A | ||||||||||||||||||||
| D4A9 | JR Z,Customer_Open_03 | ||||||||||||||||||||
| D4AB | DEC A | ||||||||||||||||||||
| D4AC | JR Z,Customer_Open_04 | ||||||||||||||||||||
| D4AE | DEC A | ||||||||||||||||||||
| D4AF | JP Z,Customer_Uncover | ||||||||||||||||||||
| D4B2 | DEC A | ||||||||||||||||||||
| D4B3 | JP Z,Customer_Close_03 | ||||||||||||||||||||
| D4B6 | DEC A | ||||||||||||||||||||
| D4B7 | JP Z,Customer_Close_02 | ||||||||||||||||||||
| D4BA | JP Customer_Close_01 | ||||||||||||||||||||
|
Handle door frame 1 countdown/ transition to door frame 2.
|
|||||||||||||||||||||
| Customer_Open_01 | D4BD | LD A,($D496) | Decrease Customer_Timer_01 by one, return if result is not zero. | ||||||||||||||||||
| D4C0 | DEC A | ||||||||||||||||||||
| D4C1 | LD ($D496),A | ||||||||||||||||||||
| D4C4 | RET NZ | ||||||||||||||||||||
| D4C5 | INC (HL) | Move onto next character state. | |||||||||||||||||||
| D4C6 | LD A,($D48F) | Grab the character frame index from Customer_Frame_01. | |||||||||||||||||||
| D4C9 | CALL Draw_DoorFrame02 | Call Draw_DoorFrame02 and return. | |||||||||||||||||||
| D4CC | RET | ||||||||||||||||||||
|
Handle door frame 2 countdown/ transition to door frame 3.
|
|||||||||||||||||||||
| Customer_Open_02 | D4CD | LD A,($D497) | Decrease Customer_Timer_02 by one, return if result is not zero. | ||||||||||||||||||
| D4D0 | DEC A | ||||||||||||||||||||
| D4D1 | LD ($D497),A | ||||||||||||||||||||
| D4D4 | RET NZ | ||||||||||||||||||||
| D4D5 | INC (HL) | Move onto next character state. | |||||||||||||||||||
| D4D6 | LD A,($D48F) | Grab the character frame index from Customer_Frame_01. | |||||||||||||||||||
| D4D9 | CALL Draw_DoorFrame03 | Call Draw_DoorFrame03 and return. | |||||||||||||||||||
| D4DC | RET | ||||||||||||||||||||
|
Handle door frame 3 countdown/ transition to door frame 4.
|
|||||||||||||||||||||
| Customer_Open_03 | D4DD | LD A,($D498) | Decrease Customer_Timer_03 by one, return if result is not zero. | ||||||||||||||||||
| D4E0 | DEC A | ||||||||||||||||||||
| D4E1 | LD ($D498),A | ||||||||||||||||||||
| D4E4 | RET NZ | ||||||||||||||||||||
| D4E5 | INC (HL) | Move onto next character state. | |||||||||||||||||||
| D4E6 | LD A,($D48F) | Grab the character frame index from Customer_Frame_01. | |||||||||||||||||||
| D4E9 | CALL Draw_DoorFrame04 | Call Draw_DoorFrame04 and return. | |||||||||||||||||||
| D4EC | RET | ||||||||||||||||||||
|
Handle door frame 4 timer...
|
|||||||||||||||||||||
| Customer_Open_04 | D4ED | LD DE,$CF91 | Calls Hit_Detection with DE=Init_Customer_Shot. | ||||||||||||||||||
| D4F0 | CALL Hit_Detection | ||||||||||||||||||||
| D4F3 | LD A,($D499) | Decrease Customer_Timer_04 by one, return if result is not zero. | |||||||||||||||||||
| D4F6 | DEC A | ||||||||||||||||||||
| D4F7 | LD ($D499),A | ||||||||||||||||||||
| D4FA | RET NZ | ||||||||||||||||||||
| D4FB | LD A,($D494) | Jump to Customer_HandsUp if Customer_Flag_Uncover is not zero. | |||||||||||||||||||
| D4FE | AND A | ||||||||||||||||||||
| D4FF | JR NZ,Customer_HandsUp | ||||||||||||||||||||
| D501 | LD (HL),$07 | Set Customer_State_Ref to use state $07 (Customer_Close_02 on the next call to Customer_Routing). | |||||||||||||||||||
| D503 | LD A,($D48F) | Call Draw_DoorFrame03 using the character frame index from Customer_Frame_01. | |||||||||||||||||||
| D506 | CALL Draw_DoorFrame03 | ||||||||||||||||||||
| D509 | LD (IX+$06),$05 | Issue 500 points (by writing $05 to the high order byte of, e.g. Door_Scoring_01). | |||||||||||||||||||
| D50D | LD A,$01 | Register this as a deposit (by writing $01 to e.g. Door_Cash_Action_01). | |||||||||||||||||||
| D50F | LD (IX+$08),A | ||||||||||||||||||||
| D512 | LD ($D190),A | Writes $01 to D190. | |||||||||||||||||||
| D515 | RET | Return. | |||||||||||||||||||
|
Handle customer putting their hands up.
|
|||||||||||||||||||||
| Customer_HandsUp | D516 | LD A,($D495) | Increase Customer_State_Ref by one. | ||||||||||||||||||
| D519 | INC A | ||||||||||||||||||||
| D51A | LD ($D495),A | ||||||||||||||||||||
| D51D | LD A,($D490) | Grab the character frame index from Customer_Frame_02. | |||||||||||||||||||
| D520 | CALL Draw_DoorFrame04 | Call Draw_DoorFrame04 and return. | |||||||||||||||||||
| D523 | RET | ||||||||||||||||||||
|
Handles customer uncovering a "hidden" bandit action.
|
|||||||||||||||||||||
| Customer_Uncover | D524 | LD DE,$CF91 | Calls Hit_Detection with DE=Init_Customer_Shot. | ||||||||||||||||||
| D527 | CALL Hit_Detection | ||||||||||||||||||||
| D52A | LD A,($D49A) | Decrease Customer_Timer_05 by one, return if result is not zero. | |||||||||||||||||||
| D52D | DEC A | ||||||||||||||||||||
| D52E | LD ($D49A),A | ||||||||||||||||||||
| D531 | RET NZ | ||||||||||||||||||||
| D532 | LD A,($D495) | Increase Customer_State_Ref by one. | |||||||||||||||||||
| D535 | INC A | ||||||||||||||||||||
| D536 | LD ($D495),A | ||||||||||||||||||||
| D539 | LD A,($D491) | Grab the character frame index from Customer_Frame_03. | |||||||||||||||||||
| D53C | CALL Draw_DoorFrame04 | Call Draw_DoorFrame04 and return. | |||||||||||||||||||
| D53F | RET | ||||||||||||||||||||
|
Handle door frame 4 countdown/ transition to door frame 3.
|
|||||||||||||||||||||
| Customer_Close_03 | D540 | LD A,($D49B) | Decrease Customer_Timer_06 by one, return if result is not zero. | ||||||||||||||||||
| D543 | DEC A | ||||||||||||||||||||
| D544 | LD ($D49B),A | ||||||||||||||||||||
| D547 | RET NZ | ||||||||||||||||||||
| D548 | CALL Init_Bandit_Open | Call Init_Bandit_Open. | |||||||||||||||||||
| D54B | LD L,(IX+$02) | Load, e.g. Door_Source_01 (bandit source data) into HL, and write $03 to the address contained in it. | |||||||||||||||||||
| D54E | LD H,(IX+$03) | ||||||||||||||||||||
| D551 | LD (HL),$03 | ||||||||||||||||||||
| D553 | INC HL | Increase the pointer to the bandit source data by 3 and write $04 to this byte. | |||||||||||||||||||
| D554 | INC HL | ||||||||||||||||||||
| D555 | INC HL | ||||||||||||||||||||
| D556 | LD (HL),$04 | ||||||||||||||||||||
| D558 | RET | Return. | |||||||||||||||||||
|
Handle door frame 3 countdown/ transition to door frame 2.
|
|||||||||||||||||||||
| Customer_Close_02 | D559 | LD A,($D49C) | Decrease Customer_Timer_07 by one, return if result is not zero. | ||||||||||||||||||
| D55C | DEC A | ||||||||||||||||||||
| D55D | LD ($D49C),A | ||||||||||||||||||||
| D560 | RET NZ | ||||||||||||||||||||
| D561 | LD HL,$D495 | Increase Customer_State_Ref by one. | |||||||||||||||||||
| D564 | INC (HL) | ||||||||||||||||||||
| D565 | LD A,($D48F) | Grab the character frame index from Customer_Frame_01. | |||||||||||||||||||
| D568 | CALL Draw_DoorFrame02 | Call Draw_DoorFrame02 and return. | |||||||||||||||||||
| D56B | RET | ||||||||||||||||||||
|
Handle door frame 2 countdown/ transition to door frame 1.
|
|||||||||||||||||||||
| Customer_Close_01 | D56C | LD A,($D49D) | Decrease Customer_Timer_08 by one, return if result is not zero. | ||||||||||||||||||
| D56F | DEC A | ||||||||||||||||||||
| D570 | LD ($D49D),A | ||||||||||||||||||||
| D573 | RET NZ | ||||||||||||||||||||
| D574 | CALL Draw_DoorFrame1 | Call Draw_DoorFrame1 (i.e. no character/ door is shut). | |||||||||||||||||||
| D577 | CALL Reset___ | Call Reset___ and return. | |||||||||||||||||||
| D57A | RET | ||||||||||||||||||||
|
Handles customer being shot.
|
|||||||||||||||||||||
| Customer_Shot | D57B | LD HL,$D495 | If Customer_State_Ref is zero then jump to Customer_Shot_MidAir else jump to Customer_Shot_Floor. | ||||||||||||||||||
| D57E | LD A,(HL) | ||||||||||||||||||||
| D57F | DEC A | ||||||||||||||||||||
| D580 | JR Z,Customer_Shot_MidAir | ||||||||||||||||||||
| D582 | JR Customer_Shot_Floor | ||||||||||||||||||||
| Customer_Shot_MidAir | D584 | INC (HL) | Move onto next character state. | ||||||||||||||||||
| D585 | LD A,($D492) | Grab the character frame index from Customer_Frame_04. | |||||||||||||||||||
| D588 | CALL Draw_DoorFrame04 | Call Draw_DoorFrame04 and return. | |||||||||||||||||||
| D58B | RET | ||||||||||||||||||||
| Customer_Shot_Floor | D58C | LD A,($D497) | Decrease Customer_Timer_02 by one, return if result is not zero. | ||||||||||||||||||
| D58F | DEC A | ||||||||||||||||||||
| D590 | LD ($D497),A | ||||||||||||||||||||
| D593 | RET NZ | ||||||||||||||||||||
| D594 | LD A,($D493) | Grab the character frame index from Customer_Frame_05. | |||||||||||||||||||
| D597 | CALL Draw_DoorFrame04 | Call Draw_DoorFrame04. | |||||||||||||||||||
| D59A | LD A,$02 | Writes $02 to D2FE. | |||||||||||||||||||
| D59C | LD ($D2FE),A | ||||||||||||||||||||
| D59F | CALL Reset___ | Call Reset___ and return. | |||||||||||||||||||
| D5A2 | RET | ||||||||||||||||||||
| Prev: D45E | Up: Map | Next: D5A3 |