Routines |
Prev: 25784 | Up: Map | Next: 25918 |
25789 | LD HL,25748 | The animation phase table for Sam when somersaulting is at 25748 | ||
This entry point is used by the routine at 25784 with HL=25724.
|
||||
25792 | PUSH HL | Save the address of the animation phase table | ||
25793 | CALL 25918 | Return to the main loop if Sam cannot roll or somersault from his current location | ||
25796 | LD A,8 | Set bit 3 of Sam's status flags at 32764 | ||
25798 | LD (32764),A | |||
25801 | POP HL | Restore the address of the animation phase table to HL | ||
25802 | LD (58892),HL | Copy the address of the animation phase table into bytes 12 and 13 of Sam's buffer | ||
25805 | LD HL,58888 | Reset Sam's main action timer (in byte 8 of his buffer) to 6 | ||
25808 | LD (HL),6 | |||
25810 | CALL 59848 | Update the SRB for Sam's current animatory state and location | ||
25813 | LD HL,(58892) | Point HL at the first byte of the current entry in the animation phase table | ||
25816 | AND 128 | Set the zero flag if Sam is facing left | ||
25818 | LD B,A | B=0 if Sam is facing left, 128 if facing right | ||
25819 | LD A,(HL) | A=first byte of the animation phase table entry | ||
25820 | INC HL | Point HL at the second byte in the entry | ||
25821 | JR Z,25824 | Jump if Sam is facing left | ||
25823 | LD A,(HL) | A=second byte of the animation phase table entry | ||
25824 | ADD A,E | Add Sam's current x-coordinate | ||
25825 | LD E,A | E=Sam's next x-coordinate | ||
25826 | INC HL | A=third byte of the animation phase table entry | ||
25827 | LD A,(HL) | |||
25828 | ADD A,D | Add Sam's current y-coordinate | ||
25829 | LD D,A | D=Sam's next y-coordinate | ||
25830 | INC HL | A=fourth byte of the animation phase table entry | ||
25831 | LD A,(HL) | |||
25832 | INC HL | Point HL at the first byte of the next entry | ||
25833 | LD (58892),HL | Store this address in bytes 12 and 13 of Sam's buffer | ||
25836 | RLCA | C=Sam's next base animatory state (bit 7 reset) | ||
25837 | AND A | |||
25838 | RRA | |||
25839 | LD C,A | |||
25840 | JR NC,25877 | Jump unless it's time to check whether Sam has landed | ||
It's time to check whether Sam has landed on his feet yet.
|
||||
25842 | PUSH DE | Save Sam's new coordinates briefly | ||
25843 | AND A | Is Sam's next animatory state 0 or 128 (standing upright)? | ||
25844 | JR Z,25853 | Jump if so | ||
25846 | DEC E | Subtract 1 from Sam's new x-coordinate | ||
25847 | BIT 7,B | Is Sam facing left? | ||
25849 | JR Z,25853 | Jump if so | ||
25851 | INC E | Add 1 to Sam's new x-coordinate | ||
25852 | INC E | |||
25853 | CALL 60159 | Has Sam landed on the sidewalk or the road yet? | ||
25856 | JR NC,25866 | Jump if so | ||
25858 | LD A,E | A=Sam's adjusted new x-coordinate | ||
25859 | POP DE | Restore Sam's new x-coordinate to E | ||
25860 | INC D | Add 1 to Sam's new y-coordinate (move him down a level) | ||
25861 | PUSH DE | Save Sam's adjusted new coordinates briefly | ||
25862 | LD E,A | E=Sam's adjusted new x-coordinate | ||
25863 | CALL 60159 | Set the carry flag unless Sam has landed on the sidewalk or road | ||
25866 | POP DE | Restore Sam's adjusted new y-coordinate to D, and his new x-coordinate to E | ||
25867 | JR C,25876 | Jump if Sam has not landed yet | ||
25869 | LD A,C | A=Sam's next base animatory state (bit 7 reset) | ||
25870 | AND A | Is it 0 or 128 (standing upright)? | ||
25871 | JR NZ,25876 | Jump if not | ||
25873 | LD (32764),A | Clear all of Sam's status flags at 32764 (Sam has landed) | ||
25876 | LD A,C | A=Sam's next base animatory state (bit 7 reset) | ||
25877 | CP 9 | Is the new base animatory state < 9 (meaning Sam has just started or is just finishing a roll or somersault)? | ||
25879 | JR C,25893 | Jump if so | ||
25881 | PUSH BC | Save Sam's direction indicator and next base animatory state | ||
25882 | PUSH DE | Save Sam's next x- and y-coordinates | ||
25883 | CP 15 | Is the new base animatory state 15 (meaning Sam is going to rotate 90 degrees for the first part of the roll or somersault)? | ||
25885 | CALL Z,25618 | If so, prepare sprite tiles 239-247 for this animatory state | ||
25888 | CALL NZ,25672 | Otherwise, rotate sprite tiles 239-247 for animatory state 9, 31 or 10 | ||
25891 | POP DE | Restore Sam's next x- and y-coordinates to E and D | ||
25892 | POP BC | Restore Sam's direction indicator and next base animatory state to B and C | ||
25893 | LD H,230 | 230=Sam | ||
25895 | LD A,B | A=Sam's new animatory state | ||
25896 | OR C | |||
25897 | CALL 59861 | Update Sam's animatory state and location and update the SRB | ||
25900 | LD A,(32764) | Collect Sam's status flags from 32764 | ||
25903 | AND A | Has Sam landed yet? | ||
25904 | RET NZ | Return if not | ||
25905 | CALL 60521 | Make a sound effect | ||
25908 | LD L,12 | Point HL at byte 12 of Sam's buffer | ||
25910 | CALL 25539 | Check whether Sam has somersaulted onto a banknote | ||
25913 | LD H,230 | 230=Sam | ||
25915 | JP 60547 | Now that Sam has landed, scroll the screen left or right if necessary |
Prev: 25784 | Up: Map | Next: 25918 |