Routines |
Prev: 78FC | Up: Map | Next: 797C |
Used by the routine at 7AB6. Displays a cutscene, and then enters demo mode or resumes the game in the next mode.
|
||||||||
790D | LD ($7FD2),A | Store the cutscene message number at 7FD2 so that it can be monitored | ||||||
7910 | CALL $6EC5 | Add the message to the message queue | ||||||
7913 | XOR A | A=0 | ||||||
7914 | LD ($7FC9),A | Set Sam's disguise ID (stored at 7FC9) to 0 (none) | ||||||
7917 | LD ($7F9A),A | Disconnect any phone call Sam may be making by setting 7F9A to 0 | ||||||
791A | LD ($7FFC),A | Clear all of Sam's status flags at 7FFC | ||||||
791D | CALL $F969 | Update Sam's sprite and the disguise icon now that Sam's wearing no disguise | ||||||
The loop that follows makes Sam pace up and down until the cutscene is over.
|
||||||||
7920 | LD HL,$E609 | Reset the midstride/mid-action timer in byte 0x09 of Sam's buffer | ||||||
7923 | XOR A | |||||||
7924 | LD (HL),A | |||||||
7925 | LD L,A | L=0x00 | ||||||
7926 | BIT 0,(HL) | Is Sam midstride? | ||||||
7928 | JR Z,$7952 | Jump if not | ||||||
792A | CALL $E9C8 | Update the SRB for Sam's current animatory state and location | ||||||
792D | DEC E | Set E to Sam's next x-coordinate (immediately in front of him) | ||||||
792E | BIT 7,A | |||||||
7930 | JR Z,$7934 | |||||||
7932 | INC E | |||||||
7933 | INC E | |||||||
7934 | INC A | Set A to Sam's new animatory state | ||||||
7935 | AND $FB | |||||||
7937 | CALL $E9D5 | Update Sam's animatory state and location and update the SRB | ||||||
793A | CALL $EC69 | Make a walking sound effect | ||||||
793D | CALL $EA80 | Update the display | ||||||
7940 | CALL $6EF4 | Update the message line | ||||||
7943 | LD HL,$7FC8 | 7FC8 holds the value of the LSB of the system variable FRAMES as it was at the end of the last pass through the main loop (or this routine) | ||||||
7946 | LD A,($5C78) | Wait about 240ms | ||||||
7949 | SUB (HL) | |||||||
794A | CP $0C | |||||||
794C | JR C,$7946 | |||||||
794E | ADD A,(HL) | Store the current value of the LSB of the system variable FRAMES at 7FC8 for comparison next time | ||||||
794F | LD (HL),A | |||||||
7950 | JR $7920 | Jump back to the beginning of this loop | ||||||
Sam is not midstride at the moment.
|
||||||||
7952 | CALL $73E4 | Show or hide the fuse, door, light bulb or phone in the icon panel | ||||||
7955 | CALL $78FC | Has the entire cutscene message been displayed yet? | ||||||
7958 | JP NZ,$F0BE | Jump if so to end the cutscene | ||||||
The cutscene is not over yet. Check whether Sam should turn round before pacing up or down again.
|
||||||||
795B | LD HL,$E601 | Point HL at byte 0x01 of Sam's buffer | ||||||
795E | LD A,(HL) | A=Sam's x-coordinate | ||||||
795F | DEC L | L=0x00 | ||||||
7960 | AND $07 | Is Sam's x-coordinate exactly divisible by 8? | ||||||
7962 | JR NZ,$796F | Jump if not | ||||||
7964 | BIT 7,(HL) | Is Sam facing right? | ||||||
7966 | JR NZ,$7977 | Jump if so | ||||||
7968 | CALL $E9C8 | Update the SRB for Sam's current animatory state and location | ||||||
796B | XOR $80 | Flip bit 7 of Sam's animatory state, thus turning him round | ||||||
796D | JR $7937 | Jump back to update Sam's animatory state and the SRB | ||||||
796F | CP $05 | Is Sam's x-coordinate congruent to 5 mod 8? | ||||||
7971 | JR NZ,$7977 | Jump if not | ||||||
7973 | BIT 7,(HL) | Is Sam facing right? | ||||||
7975 | JR NZ,$7968 | Jump back to turn Sam round if so | ||||||
7977 | CALL $E9C8 | Update the SRB for Sam's current animatory state and location | ||||||
797A | JR $7934 |
Prev: 78FC | Up: Map | Next: 797C |