![]() |
Routines |
H | Character number (152-169) |
25266 | LD L,123 | Byte 123 contains a counter that is reset to a random even number between 2 and 32; see below |
25268 | DEC (HL) | |
25269 | JR Z,25280 | Jump if it's time to consider a change of pace |
25271 | BIT 0,(HL) | Is the counter even? |
25273 | RET Z | Return (to move the character) if so |
25274 | DEC L | L=122 |
25275 | BIT 7,(HL) | Is this character walking fast? |
25277 | RET Z | Return (to move the character) if so |
25278 | POP HL | Drop the return address from the stack so that the character will not be moved this time round |
25279 | RET | Return to consider the next character, or return to the main loop |
25280 | CALL 24993 | Get random number in A |
25283 | AND 61 | A=even number between 2 and 32, and carry flag holds a random bit |
25285 | ADD A,4 | |
25287 | RRA | |
25288 | LD (HL),A | Place this in byte 123 of the character's buffer |
25289 | DEC L | L=122 |
25290 | RL (HL) | Bit 7 of (HL) is now equal to the random bit that was pushed into the carry flag by the RRA instruction above |
25292 | RRC (HL) | |
25294 | LD A,(HL) | Bit 5 of byte 122 is set for catapult pellets and stampeding boys to ensure they always go at top speed |
25295 | BIT 5,A | |
25297 | JR Z,25367 | Jump if we're not dealing with such a thing |
25299 | RES 7,(HL) | Signal: fly or run at top speed |
25301 | JR 25367 |