|  | Routines | 
| Prev: F746 | Up: Map | Next: F7DE | 
|  | ||||
| F773 | LD A,$02 | Moving objects decrease endurance by 2. | ||
| F775 | LD ($F26E),A | |||
| F778 | LD A,(IY+$0A) | Get the player's Y co-ordinate. | ||
| F77B | CP $98 | Is the player on the floor? | ||
| F77D | JR NZ,$F78D | Jump forward if they're not. | ||
| 
The player is on the floor.
 | ||||
| F77F | LD A,(IY+$05) | Get the X co-ordinate. | ||
| F782 | CP $28 | Is it greater than 28? | ||
| F784 | JR C,$F78D | Jump forward if so. | ||
| F786 | CP $E6 | Is it less than E6? | ||
| F788 | JR NC,$F78D | Jump forward if not. | ||
| F78A | CALL $E33F | Otherwise, the player is standing on the spikes, so decrease endurance. | ||
| 
Now draw the desks.
 | ||||
| F78D | LD B,$05 | 5 objects to draw. | ||
| F78F | LD A,($F7DE) | Get the next frame ID of the desk. | ||
| F792 | INC A | Increment it. | ||
| F793 | CP $5B | If it goes higher than 5A set it back to 57. | ||
| F795 | JR NZ,$F799 | |||
| F797 | LD A,$57 | |||
| F799 | LD ($F7DE),A | Store the next frame ID. | ||
| F79C | LD HL,$F7DF | Point HL at the next x co-ordinate to use. | ||
| F79F | LD D,$98 | Y co-ordinate is always 98. | ||
| F7A1 | LD E,(HL) | Get the X co-ordinate. | ||
| F7A2 | LD ($A838),DE | Set the position to draw. (A838) | ||
| F7A6 | INC HL | Move to the next position in the buffer. | ||
| F7A7 | DEC (HL) | Decrement the tick counter. | ||
| F7A8 | JR NZ,$F7AC | Jump forward if it's not zero. | ||
| 
The tick counter has run to 0, does a desk need to be flipped?
 | ||||
| F7AA | LD (HL),$28 | Set the tick count back to 28. | ||
| F7AC | LD A,(HL) | Put the tick count in A. | ||
| F7AD | INC HL | Move to the next position in the buffer. | ||
| F7AE | CP $09 | Is the counter less than 9? | ||
| F7B0 | JR NC,$F7D6 | Jump forward if not. | ||
| 
The desk needs flipping, check if dislodges the player.
 | ||||
| F7B2 | LD A,(IY+$0A) | Get the player's y co-ordinate. | ||
| F7B5 | CP $80 | Is it 80? (ie: on a desk) | ||
| F7B7 | JR NZ,$F7D1 | Jump foward if it isn't. | ||
| F7B9 | LD A,($A838) | Is the player's x co-ordinate near this one? | ||
| F7BC | SUB (IY+$05) | |||
| F7BF | SUB $10 | |||
| F7C1 | CP $E0 | |||
| F7C3 | JR C,$F7D1 | Jump if not. | ||
| 
The desk opened while the player was on it. Dislodge them.
 | ||||
| F7C5 | LD A,(IY+$0A) | Add 4 to the player's y co-ordinate. | ||
| F7C8 | ADD A,$04 | |||
| F7CA | LD (IY+$0A),A | |||
| F7CD | LD (IY+$37),$01 | Set the character in mid-air. | ||
| F7D1 | LD A,($F7DE) | Get the object ID to draw. | ||
| F7D4 | JR $F7D8 | Jump forward to draw it. | ||
| F7D6 | LD A,$57 | Set the object ID as 57 - closed desk. (8E58) | ||
| F7D8 | CALL $A83D | Draw the object | ||
| F7DB | DJNZ $F7A1 | Loop while there are more objects to draw. | ||
| F7DD | RET | Otherwise return. | ||
| Prev: F746 | Up: Map | Next: F7DE |