Prev: 55472 Up: Map Next: 55820
55525: Julius logic
Handles all the logic around drawing Julius and handling his "special" logic.
Julius_Good_Bad 55525 DEFB 0 If this is $00 then Julius is "good". If this is $01 then he is "bad" (i.e. will draw on you).
55526 DEFB 0
Julius_State_Reference 55527 DEFB 4 The current character state.
Julius_Timer_01 55528 DEFB 0 Character timer 1.
Julius_Timer_02 55529 DEFB 0 Character timer 2.
Julius_Timer_03 55530 DEFB 0 Character timer 3.
Julius_Timer_04 55531 DEFB 27 Character timer 4.
Julius_Timer_05 55532 DEFB 8 Character timer 5.
Julius_Timer_06 55533 DEFB 8 Character timer 6.
Julius_Timer_07 55534 DEFB 128 Character timer 7.
This routine looks at the current character state and routes to the correct subroutine.
Julius_Open_Routing 55535 LD HL,55527 A=Julius_State_Reference.
55538 LD A,(HL)
55539 DEC A Work out which routine to use based on the current state.
A Routine
1 Julius_Open_01
2 Julius_Open_02
3 Julius_Open_03
4 Julius_Open_04
5 Julius_Open_05
6 Julius_Open_06
7 Julius_Open_07
55540 JR Z,Julius_Open_01
55542 DEC A
55543 JR Z,Julius_Open_02
55545 DEC A
55546 JR Z,Julius_Open_03
55548 DEC A
55549 JR Z,Julius_Open_04
55551 DEC A
55552 JR Z,Julius_Open_05
55554 DEC A
55555 JR Z,Julius_Open_06
55557 JR Julius_Open_07
Handle door frame 1 countdown/ transition to door frame 2.
Julius_Open_01 55559 LD A,(55528) Decrease Julius_Timer_01 by one, return if result is not zero.
55562 DEC A
55563 LD (55528),A
55566 RET NZ
55567 INC (HL) Move onto next character state.
55568 LD A,36 Pass character index (stand off | 36) to Draw_DoorFrame02 and return.
55570 CALL Draw_DoorFrame02
55573 RET
Handle door frame 2 countdown/ transition to door frame 3.
Julius_Open_02 55574 LD A,(55529) Decrease Julius_Timer_02 by one, return if result is not zero.
55577 DEC A
55578 LD (55529),A
55581 RET NZ
55582 INC (HL) Move onto next character state.
55583 LD A,36 Pass character index (stand off | 36) to Draw_DoorFrame03 and return.
55585 CALL Draw_DoorFrame03
55588 RET
Handle door frame 3 countdown/ transition to door frame 4.
Julius_Open_03 55589 LD A,(55530) Decrease Julius_Timer_03 by one, return if result is not zero.
55592 DEC A
55593 LD (55530),A
55596 RET NZ
55597 INC (HL) Move onto next character state.
55598 LD A,36 Pass character index (stand off | 36) to Draw_DoorFrame04 and return.
55600 CALL Draw_DoorFrame04
55603 RET
Handle door frame 4 countdown.
Julius_Open_04 55604 LD DE,53213 Call Hit_Detection with a callback to Init_Julius_Close.
55607 CALL Hit_Detection
55610 LD A,(55531) Decrease Julius_Timer_04 by one, return if result is not zero.
55613 DEC A
55614 LD (55531),A
55617 RET NZ
55618 INC (HL) Move onto next character state.
55619 LD A,(55525) Jump to Julius_State_04_Close if Julius_Good_Bad is zero (Julius is "good").
55622 AND A
55623 JR Z,Julius_State_04_Close
Changes the frame to show Julius drawing his pistol.
55625 LD (HL),7 Writes "07" to Julius_State_Reference.
55627 LD A,37 Pass character index (draw | 37) to Draw_DoorFrame04 and return.
55629 CALL Draw_DoorFrame04
55632 RET
Set up (and begin) closing the door.
Julius_State_04_Close 55633 LD A,36 Pass character index (stand off | 36) to Draw_DoorFrame03.
55635 CALL Draw_DoorFrame03
55638 LD A,1 Writes $01 to 53648 and IX+8. Writes $05 to IX+6 and return.
55640 LD (53648),A
55643 LD (IX+8),A
55646 LD (IX+6),5
55650 RET
Handle door frame 3 countdown/ transition to door frame 2.
Julius_Open_05 55651 LD A,(55532) Decrease Julius_Timer_05 by one, return if result is not zero.
55654 DEC A
55655 LD (55532),A
55658 RET NZ
55659 INC (HL) Move onto next character state.
55660 LD A,36 Pass character index (stand off | 36) to Draw_DoorFrame02 and return.
55662 CALL Draw_DoorFrame02
55665 RET
Handle door frame 2 countdown/ transition to door frame 1.
Julius_Open_06 55666 LD A,(55533) Decrease Julius_Timer_06 by one, return if result is not zero.
55669 DEC A
55670 LD (55533),A
55673 RET NZ
55674 CALL Draw_DoorFrame1 Call Draw_DoorFrame1 (i.e. no character/ door is shut).
55677 CALL Reset___ Call Reset___.
55680 RET Return.
???
Julius_Open_07 55681 LD DE,53218 Call Hit_Detection with a callback to 53218.
55684 CALL Hit_Detection
55687 LD A,(55534) Decrease Julius_Timer_07 by one, return if result is not zero.
55690 DEC A
55691 LD (55534),A
55694 RET NZ
55695 INC A Move onto next character state.
55696 LD (54014),A Write $01 to 54014.
55699 CALL Reset___ Call Reset___.
55702 RET Return.
This routine looks at the current character state and routes to the correct subroutine.
Julius_Close_Routing 55703 LD HL,55527 A=Julius_State_Reference.
55706 LD A,(HL)
55707 DEC A Work out which routine to use based on the current state.
A Routine
1 Julius_Close_01
2 Julius_Close_02
3 Julius_Close_03
4 Julius_Close_04
5 Julius_Close_05
55708 JR Z,Julius_Close_01
55710 DEC A
55711 JR Z,Julius_Close_02
55713 DEC A
55714 JR Z,Julius_Close_03
55716 DEC A
55717 JR Z,Julius_Close_04
55719 JR Julius_Close_05
Handles state countdown/ transition to character frame $26.
Julius_Close_01 55721 LD A,(55528) Decrease Julius_Timer_01 by one, return if result is not zero.
55724 DEC A
55725 LD (55528),A
55728 RET NZ
55729 INC (HL) Move onto next character state.
55730 LD A,38 Pass character index shot | 38 to Draw_DoorFrame04 and return.
55732 CALL Draw_DoorFrame04
55735 RET
Handles state countdown/ transition to character frame $27.
Julius_Close_02 55736 LD A,(55529) Decrease Julius_Timer_02 by one, return if result is not zero.
55739 DEC A
55740 LD (55529),A
55743 RET NZ
55744 INC (HL) Move onto next character state.
55745 LD A,39 Pass character index floor | 39 to Draw_DoorFrame04.
55747 CALL Draw_DoorFrame04
55750 LD A,(55526) Return if 55526 is zero.
55753 AND A
55754 RET Z
55755 INC A Else write 55526+1 to 54014, call Reset___ and return.
55756 LD (54014),A
55759 CALL Reset___
55762 RET
Handle door frame 4 countdown/ transition to door frame 3.
Julius_Close_03 55763 LD A,(55530) Decrease Julius_Timer_03 by one, return if result is not zero.
55766 DEC A
55767 LD (55530),A
55770 RET NZ
55771 INC (HL) Move onto next character state.
55772 LD A,39 Pass character index floor | 39 to Draw_DoorFrame03 and return.
55774 CALL Draw_DoorFrame03
55777 RET
Handle door frame 3 countdown/ transition to door frame 2.
Julius_Close_04 55778 LD A,(55531) Decrease Julius_Timer_04 by one, return if result is not zero.
55781 DEC A
55782 LD (55531),A
55785 RET NZ
55786 INC (HL) Move onto next character state.
55787 LD A,39 Pass character index floor | 39 to Draw_DoorFrame02 and return.
55789 CALL Draw_DoorFrame02
55792 RET
Handle door frame 2 countdown/ transition to door frame 1.
Julius_Close_05 55793 LD A,(55532) Decrease Julius_Timer_05 by one, return if result is not zero.
55796 DEC A
55797 LD (55532),A
55800 RET NZ
55801 CALL Draw_DoorFrame1 Call Draw_DoorFrame1 (i.e. no character/ door is shut).
55804 CALL Reset___ Call Reset___.
55807 LD A,1 Writes $01 to 53648 and IX+8. Writes $05 to IX+6 and return.
55809 LD (53648),A
55812 LD (IX+8),A
55815 LD (IX+6),5
55819 RET
Prev: 55472 Up: Map Next: 55820