![]() |
Routines |
| Prev: 35931 | Up: Map | Next: 36173 |
|
||||||||
| 35993 | ADD A,A | Multiply value of A by eight... | ||||||
| 35994 | ADD A,A | ... | ||||||
| 35995 | ADD A,A | ... | ||||||
| 35996 | LD C,A | Store in C | ||||||
| 35997 | LD B,0 | Set B to zero | ||||||
| 35999 | LD IX,36183 | Set IX to point to data for balls | ||||||
| 36003 | ADD IX,BC | Add eight times ball number as offset to IX pointer | ||||||
| 36005 | LD C,(IX+0) | Load ball's x-coordinate into C | ||||||
| 36008 | LD B,(IX+1) | Load ball's y-coordinate into B | ||||||
| 36011 | PUSH BC | Store BC | ||||||
| 36012 | LD (23677),BC | Load BC into coordinate storage | ||||||
| 36016 | LD A,(IX+4) | Load A with ball's current frame number | ||||||
| 36019 | PUSH IX | Store IX | ||||||
| 36021 | CALL 39125 | Draw Odd Ball to screen | ||||||
| 36024 | POP IX | Restore IX | ||||||
| 36026 | POP BC | Restore BC | ||||||
| 36027 | LD A,(IX+2) | Load x-velocity into A | ||||||
| 36030 | ADD A,C | Add x-coordinate to A | ||||||
| 36031 | LD C,A | Load new x-coordinate back into C | ||||||
| 36032 | LD A,(IX+3) | Load y-velocity into A | ||||||
| 36035 | ADD A,B | Add y-coordinate to A | ||||||
| 36036 | LD B,A | Load new y-coordinate back into B | ||||||
| 36037 | LD (IX+0),C | Update data with new x-... | ||||||
| 36040 | LD (IX+1),B | ...and y-coordinates | ||||||
| 36043 | LD (23677),BC | Update coordinate storage | ||||||
| 36047 | LD A,(IX+4) | Load A with Odd Ball frame data | ||||||
| 36050 | SUB 116 | Subtract 116 (frame number of first Odd Ball frame) to get "absolute frame number" (see trivia) | ||||||
| 36052 | INC A | Advance absolute frame number by one | ||||||
| 36053 | AND 3 | Cap absolute frame number to 3, and wrap round from 3 to 0 as there are only four frames | ||||||
| 36055 | ADD A,116 | Add 116 to absolute frame number to give relative frame number again | ||||||
| 36057 | LD (IX+4),A | Store new frame number | ||||||
| 36060 | PUSH IX | Store IX | ||||||
| 36062 | CALL 39125 | Draw Odd Ball to screen | ||||||
| 36065 | POP IX | Restore IX | ||||||
| 36067 | LD A,(IX+0) | Load x-coordinate of ball | ||||||
| 36070 | OR A | If x-coordinate is zero... | ||||||
| 36071 | CALL Z,36173 | ...multiply x "velocity" by minus one | ||||||
| 36074 | CP 244 | If x-coordinate is 244... | ||||||
| 36076 | CALL Z,36173 | ...multiply x "velocity" by minus one | ||||||
| 36079 | INC IX | Temporarily advance IX pointer to work with y "velocities" | ||||||
| 36081 | LD A,(IX+0) | Load y-coordinate of ball | ||||||
| 36084 | CP 172 | If y-coordinate is 172... | ||||||
| 36086 | CALL Z,36173 | ...multiply y "velocity" by minus one | ||||||
| 36089 | CP 40 | If y-coordinate is 40... | ||||||
| 36091 | CALL Z,36173 | ...multiply y "velocity" by minus one | ||||||
| 36094 | DEC IX | Move IX back one again (reversing instruction at 36079) | ||||||
| 36096 | LD A,(25387) | Load A with Magic Knight's current x-coordinate | ||||||
| 36099 | LD B,A | Copy into B | ||||||
| 36100 | LD A,(IX+0) | Load A with x-coordinate of ball | ||||||
| 36103 | ADD A,6 | Add 6 to x-coordinate of ball | ||||||
| 36105 | SUB B | Subtract B to get x-distance between Magic Knight and the ball, plus 6 | ||||||
| 36106 | CP 21 | If this value is not less than 21 then... | ||||||
| 36108 | JP NC,36172 | ...return | ||||||
| 36111 | LD A,(25388) | Else, load B with Magic Knight's y-coordinate... | ||||||
| 36114 | LD B,A | ... | ||||||
| 36115 | LD A,(IX+1) | Load A with y-coordinate of ball (uses same coordinate system as PLOT command, i.e. y=0 is at bottom of screen) | ||||||
| 36118 | SUB 175 | Subtract y-coordinate from 175 to change y-origin to top of screen... | ||||||
| 36120 | NEG | ...and have y-coordinate increase downwards rather than upwards | ||||||
| 36122 | ADD A,6 | Add 6 to y-coordinate of ball | ||||||
| 36124 | SUB B | Subtract B to get y-distance between Magic Knight and the ball, plus 6 | ||||||
| 36125 | CP 39 | If this value is not less than 39 then... | ||||||
| 36127 | JP NC,36172 | ...return | ||||||
| 36130 | LD A,(25315) | Else, decrease Magic Knight's current strength by one... | ||||||
| 36133 | DEC A | ... | ||||||
| 36134 | LD (25315),A | ... | ||||||
| 36137 | CALL 36215 | Draw health bar at bottom of screen | ||||||
| 36140 | LD A,(25315) | Load Magic Knight's current strength into A... | ||||||
| 36143 | OR A | If Magic Knight's strength is zero... | ||||||
| 36144 | LD HL,43960 | ...point HL to "YOU DIED OF EXHAUSTION" text... | ||||||
| 36147 | JP Z,35101 | ...and jump to "game over" window routine and exit | ||||||
| 36150 | LD C,32 | Set C to 32 (number of times to repeat loop below) | ||||||
| 36152 | LD A,16 | Set speaker bit... | ||||||
| 36154 | OUT (254),A | ... | ||||||
| 36156 | LD A,R | Load A with random number between 0 - 15 (as R register increases with each instruction executed)... | ||||||
| 36158 | AND 15 | ... | ||||||
| 36160 | LD B,A | Load value into B | ||||||
| 36161 | DJNZ 36161 | Pause by repeating this line B times | ||||||
| 36163 | XOR A | Set A to zero | ||||||
| 36164 | OUT (254),A | Reset speaker bit | ||||||
| 36166 | DEC C | Decrease C... | ||||||
| 36167 | JR NZ,36152 | ...and repeat loop if C is not zero | ||||||
| 36169 | XOR A | Reset speaker bit... | ||||||
| 36170 | OUT (254),A | ... | ||||||
| 36172 | RET | Return | ||||||
| Prev: 35931 | Up: Map | Next: 36173 |