![]() |
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 |