Prev: FA83 Up: Map Next: FAD8
FAA2: Check whether a falling character has hit anyone on the head
Used by the routine at FAE3. Returns with the zero flag set if the falling character has struck another character, and knocks that other character over.
Input
H Character number (0xD7-0xE6)
FAA2 LD L,$01 Point HL at byte 0x01 of the falling character's buffer
FAA4 LD E,(HL) E=falling character's x-coordinate
FAA5 DEC E Decrement this
FAA6 INC L L=0x02
FAA7 LD D,(HL) D=falling character's y-coordinate
FAA8 INC D Add 3 to this
FAA9 INC D
FAAA INC D
FAAB LD HL,$D702 H=0xD7 (first potential target character to check), L=0x02
The following loop compares the falling character's coordinates with those of every other character to see if there was a collision.
FAAE LD A,D A=3+falling character's y-coordinate
FAAF CP (HL) Does it match the potential target's y-coordinate?
FAB0 JR NZ,$FAD0 Jump if not to check the next potential target
FAB2 DEC L L=0x01
FAB3 LD A,(HL) A=T (potential target character's x-coordinate)
FAB4 SUB E A=T-x+1 (where x is the falling character's x-coordinate)
FAB5 CP $03 Is this less than 3?
FAB7 JR NC,$FACE Jump if not to check the next potential target
FAB9 LD BC,$FA05 Point BC at the uninterruptible subcommand routine at FA05
FABC RRCA Does T=x?
FABD JR NC,$FAC1 Jump if not
FABF LD C,$09 BC=FA09
FAC1 DEC L L=0x00
FAC2 LD A,(HL) A=target character's animatory state
FAC3 AND $07 Keep only bits 0-2
FAC5 CP $04 Is the target character in standing/walking animation phase 1-4?
FAC7 JR NC,$FACE Jump if not to check the next potential target
FAC9 LD A,H A=target character's character number
FACA CALL $F9ED Attempt to place the address of the uninterruptible subcommand routine at FA05 (if T=x-1 or x+1) or FA09 (if T=x) into bytes 0x12 and 0x13 of the target character's buffer
FACD 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)
FACE LD L,$02 Point HL at byte 0x02 of the target character's buffer
FAD0 INC H Next potential target character to check
FAD1 LD A,H A=next target character number
FAD2 CP $E7 Have we checked every potential target?
FAD4 JR NZ,$FAAE Jump back if not
FAD6 ADD A,A Reset the zero flag (no one was struck by the falling character)
FAD7 RET
Prev: FA83 Up: Map Next: FAD8