|  | Routines | 
| Prev: 64131 | Up: Map | Next: 64216 | 
| 
Used by the routine at 64227. Returns with the zero flag set if the falling character has struck another character, and knocks that other character over.
 
 | ||||||||
| 64162 | LD L,1 | Point HL at byte 1 of the falling character's buffer | ||||||
| 64164 | LD E,(HL) | E=falling character's x-coordinate | ||||||
| 64165 | DEC E | Decrement this | ||||||
| 64166 | INC L | L=2 | ||||||
| 64167 | LD D,(HL) | D=falling character's y-coordinate | ||||||
| 64168 | INC D | Add 3 to this | ||||||
| 64169 | INC D | |||||||
| 64170 | INC D | |||||||
| 64171 | LD HL,55042 | H=215 (first potential target character to check), L=2 | ||||||
| 
The following loop compares the falling character's coordinates with those of every other character to see if there was a collision.
 | ||||||||
| 64174 | LD A,D | A=3+falling character's y-coordinate | ||||||
| 64175 | CP (HL) | Does it match the potential target's y-coordinate? | ||||||
| 64176 | JR NZ,64208 | Jump if not to check the next potential target | ||||||
| 64178 | DEC L | L=1 | ||||||
| 64179 | LD A,(HL) | A=T (potential target character's x-coordinate) | ||||||
| 64180 | SUB E | A=T-x+1 (where x is the falling character's x-coordinate) | ||||||
| 64181 | CP 3 | Is this less than 3? | ||||||
| 64183 | JR NC,64206 | Jump if not to check the next potential target | ||||||
| 64185 | LD BC,64005 | Point BC at the uninterruptible subcommand routine at 64005 | ||||||
| 64188 | RRCA | Does T=x? | ||||||
| 64189 | JR NC,64193 | Jump if not | ||||||
| 64191 | LD C,9 | BC=64009 | ||||||
| 64193 | DEC L | L=0 | ||||||
| 64194 | LD A,(HL) | A=target character's animatory state | ||||||
| 64195 | AND 7 | Keep only bits 0-2 | ||||||
| 64197 | CP 4 | Is the target character in standing/walking animation phase 1-4? | ||||||
| 64199 | JR NC,64206 | Jump if not to check the next potential target | ||||||
| 64201 | LD A,H | A=target character's character number | ||||||
| 64202 | CALL 63981 | Attempt to place the address of the uninterruptible subcommand routine at 64005 (if T=x-1 or x+1) or 64009 (if T=x) into bytes 18 and 19 of the target character's buffer | ||||||
| 64205 | RET Z | Return with the zero flag set if the attempt was successful (the target character was not already occupied by some other uninterruptible subcommand) | ||||||
| 64206 | LD L,2 | Point HL at byte 2 of the target character's buffer | ||||||
| 64208 | INC H | Next potential target character to check | ||||||
| 64209 | LD A,H | A=next target character number | ||||||
| 64210 | CP 231 | Have we checked every potential target? | ||||||
| 64212 | JR NZ,64174 | Jump back if not | ||||||
| 64214 | ADD A,A | Reset the zero flag (no one was struck by the falling character) | ||||||
| 64215 | RET | |||||||
| Prev: 64131 | Up: Map | Next: 64216 |