|  | Routines | 
| Prev: F15D | Up: Map | Next: F202 | 
|  | ||||
| F177 | LD A,(IY+$05) | Put the X co-ordinate in A. | ||
| F17A | LD HL,$06EA | Set the extremities in HL. | ||
| F17D | CP $80 | Is the character position greater than 80? | ||
| F17F | LD A,$FE | Set starting position as the far right. | ||
| F181 | JR C,$F188 | If not, the character's moved left to here, so jump forward. | ||
| F183 | LD HL,$EA06 | Set the extremities in HL. | ||
| F186 | LD A,$02 | Set position at the far left. | ||
| F188 | LD ($F158),HL | Store the extremeties. | ||
| F18B | LD ($F15A),A | Store the current position. | ||
| F18E | LD HL,$0000 | Set the number of miles walked to 0. (F15B) | ||
| F191 | LD ($F15B),HL | |||
| F194 | LD (IY+$0A),$98 | Ensure the player is on the ground. | ||
| F198 | CALL $B902 | Clear the playing area. | ||
| F19B | LD HL,$F15D | Point HL to the graphics data. | ||
| F19E | CALL $B969 | Draw it. | ||
| F1A1 | JR $F1D2 | Enter the room. | ||
| F1A3 | CALL $EEA2 | Initialize the sprite buffers. | ||
| F1A6 | CALL $F202 | Print the number of miles out of town | ||
| F1A9 | LD A,$04 | Touching an arrow drops the endurance by 4. | ||
| F1AB | LD ($F26E),A | |||
| F1AE | LD A,($F15A) | Get the direction of arrows. | ||
| F1B1 | CP $02 | Is the direction left? | ||
| F1B3 | LD A,$82 | Set A to "left arrow". | ||
| F1B5 | JR Z,$F1B9 | Jump if the direction is left. | ||
| F1B7 | LD A,$84 | Set A to "right arrow". | ||
| F1B9 | CALL $ED8A | Set up moving objects (the movement is the same as the Laboratory). | ||
| F1BC | CALL $B09F | Get user input. | ||
| F1BF | CALL $B0E6 | Put characters in the sprite buffer. | ||
| F1C2 | CALL $B9FB | Put the sprites on scren. | ||
| F1C5 | LD BC,($F158) | Get the co-ordinate limits in BC. | ||
| F1C9 | LD HL,($F15B) | Put the number of miles walked in HL. | ||
| F1CC | LD A,(IY+$05) | Put the X co-ordinate in B. | ||
| F1CF | CP B | Has it reached the edge? | ||
| F1D0 | JR NZ,$F1E6 | Jump forward if it hasn't. | ||
| 
Move to a room with more miles.
 | ||||
| F1D2 | LD BC,($F158) | Put the extremities in BC. | ||
| F1D6 | LD HL,($F15B) | Put the number of miles in HL. | ||
| F1D9 | LD A,($F15A) | Put the direction in C. | ||
| F1DC | ADD A,C | Set the X co-ordinate to the initial position. | ||
| F1DD | LD (IY+$05),A | |||
| F1E0 | INC HL | Increment the number of miles. | ||
| F1E1 | LD ($F15B),HL | |||
| F1E4 | JR $F1A3 | Jump back to run the room. | ||
| 
Move to a room with less miles.
 | ||||
| F1E6 | CP C | Is the Y co-ordinate at the edge? | ||
| F1E7 | JR NZ,$F1A3 | Jump back if it isn't. | ||
| F1E9 | DEC HL | Decrement the number of miles. | ||
| F1EA | LD ($F15B),HL | |||
| F1ED | LD A,H | Is this zero? | ||
| F1EE | OR L | |||
| F1EF | JR Z,$F1FC | If so, jump forward as we're back in town. | ||
| F1F1 | LD A,($F15A) | Put the direction in A. | ||
| F1F4 | LD C,A | Set the X co-ordinate to the initial position. | ||
| F1F5 | LD A,B | |||
| F1F6 | SUB C | |||
| F1F7 | LD (IY+$05),A | Set the new X co-ordinate. | ||
| F1FA | JR $F1A3 | Jump back to run the room. | ||
| 
Finally found our way back to town.
 | ||||
| F1FC | LD (IY+$05),B | Set the X co-ordinate as the starting point for a room with less miles. | ||
| F1FF | JP $EE8D | |||
| Prev: F15D | Up: Map | Next: F202 |