|  | Routines | 
| Prev: 64004 | Up: Map | Next: 64121 | 
| 
The address of this uninterruptible subcommand routine is placed into bytes 18 and 19 of a character's buffer (by the routine at 64162) when he's been hit on the head by a falling character with an x-coordinate that differs from his by 1. It controls the character from the moment he is knocked over until he has finished staggering from being dazed by the collision.
 
 | ||||||||
| 64005 | LD A,138 | A=10 (short knockout delay) + 128 (quick recovery) | ||||||
| 64007 | JR 64011 | |||||||
| 
The address of this entry point is placed into bytes 18 and 19 of a character's buffer (by the routine at 64162) when he's been hit on the head by a falling character with the same x-coordinate.
 | ||||||||
| 64009 | LD A,20 | A=20 (long knockout delay) + 0 (slow recovery) | ||||||
| 64011 | LD L,20 | Initialise the character's knockout delay counter in byte 20 of his buffer | ||||||
| 64013 | LD (HL),A | |||||||
| 64014 | LD L,0 | Point HL at byte 0 of the character's buffer | ||||||
| 64016 | LD E,(HL) | E=character's animatory state | ||||||
| 64017 | INC L | L=1 | ||||||
| 64018 | LD D,(HL) | D=character's x-coordinate | ||||||
| 64019 | LD L,13 | Store the character's pre-knockout animatory state in byte 13 of his buffer | ||||||
| 64021 | LD (HL),E | |||||||
| 64022 | LD L,21 | Store the character's current x-coordinate in byte 21 of his buffer | ||||||
| 64024 | LD (HL),D | |||||||
| 64025 | CALL 63954 | Knock the character over | ||||||
| 64028 | CALL 63997 | Place the address of the following instruction into bytes 18 and 19 of the character's buffer | ||||||
| 
This entry point is used after the character has been knocked over and until he stands up again.
 | ||||||||
| 64031 | LD L,20 | Byte 20 of the character's buffer holds the knockout delay counter | ||||||
| 64033 | DEC (HL) | Decrement it | ||||||
| 64034 | LD A,(HL) | Pick up the current value in A | ||||||
| 64035 | AND 127 | Is it time for the character to stand up? | ||||||
| 64037 | RET NZ | Return if not | ||||||
| 64038 | LD A,L | A=20 | ||||||
| 64039 | BIT 7,(HL) | Is bit 7 of the knockout delay counter set? | ||||||
| 64041 | JR NZ,64044 | Jump if so | ||||||
| 64043 | ADD A,A | A=40 | ||||||
| 64044 | LD (HL),A | Initialise the recovery delay counter (in byte 20 of the character's buffer) to 40 (if the character was hit by another with the same x-coordinate) or 20 | ||||||
| 64045 | CALL 60300 | Make the character stand up | ||||||
| 64048 | CALL 63997 | Place the address of the following instruction into bytes 18 and 19 of the character's buffer | ||||||
| 
This entry point is used after the character has stood up again and while he is still dazed from the collision.
 | ||||||||
| 64051 | LD L,20 | Decrement the recovery delay counter | ||||||
| 64053 | DEC (HL) | |||||||
| 64054 | JR Z,64131 | Jump if it has reached 0 | ||||||
| 64056 | LD L,0 | Point HL at byte 0 of the character's buffer | ||||||
| 64058 | BIT 0,(HL) | Is the character facing right? | ||||||
| 64060 | JR NZ,64075 | Jump if so | ||||||
| 64062 | PUSH HL | Save the character number briefly | ||||||
| 64063 | CALL 60179 | Obtain descriptors for the character's current location | ||||||
| 64066 | POP HL | Restore the character number to H | ||||||
| 64067 | BIT 7,C | Can the character move left? | ||||||
| 64069 | JR Z,64080 | Jump if not | ||||||
| 64071 | BIT 6,C | Can the character move right? | ||||||
| 64073 | JR Z,64080 | Jump if not | ||||||
| 64075 | CALL 61823 | Get a random number in A | ||||||
| 64078 | RRCA | Rotate bit 0 into bit 7 for no apparent reason | ||||||
| 64079 | LD C,A | Bit 7 of C will be used to decide whether the character should move left next | ||||||
| 
This entry point is used by the routine at 64131.
 | ||||||||
| 64080 | LD DE,59861 | Load the address of the routine at 59861 onto the stack | ||||||
| 64083 | PUSH DE | |||||||
| 64084 | PUSH BC | Save the direction descriptor (in C) | ||||||
| 64085 | CALL 59848 | Update the SRB for the character's current animatory state and location | ||||||
| 64088 | POP BC | Restore the direction descriptor to C | ||||||
| 64089 | RLC C | Set the carry flag if the character is going to move left | ||||||
| 64091 | BIT 7,A | Is the character facing right? | ||||||
| 64093 | JR NZ,64109 | Jump if so | ||||||
| 
The character is facing left.
 | ||||||||
| 64095 | JR NC,64111 | Jump if the character is going to move right (take a step backwards) | ||||||
| 
The character is going to take a step forwards.
 | ||||||||
| 64097 | INC A | A=character's next animatory state | ||||||
| 64098 | BIT 0,A | Is it midstride? | ||||||
| 64100 | RET NZ | Return (to 59861) if so | ||||||
| 
The character has just moved from the midstride position. Adjust his x-coordinate as appropriate.
 | ||||||||
| 64101 | DEC E | E=x-1 (where x is the character's x-coordinate) | ||||||
| 64102 | JR C,64106 | Jump if the character is moving left | ||||||
| 64104 | INC E | E=x+1 (the character is moving right) | ||||||
| 64105 | INC E | |||||||
| 64106 | AND 251 | Make sure that bit 2 of the character's animatory state is reset | ||||||
| 64108 | RET | To 59861, to update the character's animatory state and location and update the SRB | ||||||
| 
The character is facing right.
 | ||||||||
| 64109 | JR NC,64097 | Jump if the character is going to move right (take a step forwards) | ||||||
| 
The character is going to take a step backwards.
 | ||||||||
| 64111 | DEC A | A=character's next animatory state | ||||||
| 64112 | BIT 0,A | Is it midstride? | ||||||
| 64114 | RET Z | Return (to 59861) if not | ||||||
| 64115 | INC A | Add 4 to A (without affecting the carry flag) to obtain the correct midstride animatory state (though bit 2 may need to be reset) | ||||||
| 64116 | INC A | |||||||
| 64117 | INC A | |||||||
| 64118 | INC A | |||||||
| 64119 | JR 64101 | |||||||
| Prev: 64004 | Up: Map | Next: 64121 |