![]() |
Routines |
Prev: 25784 | Up: Map |
|
|||||||
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 |