|  | Routines | 
| Prev: 38024 | Up: Map | Next: 38429 | 
| 38205 | CALL 38844 | Draw Magic Knight's current room, draw objects and characters and initialise room-specific data | ||
| 
This entry point is used by the routine at 38024.
 | ||||
| 38208 | CALL 40008 | Set Magic Knight's velocity to zero, if appropriate move to new room, update state of Storm Cloud and execute room-specific routine | ||
| 38211 | CALL 38434 | Handle Magic Knight's fall | ||
| 38214 | LD A,127 | Reset bit 7 in A to select the keyboard half-row SPACE - B | ||
| 38216 | IN A,(254) | Read the keyboard | ||
| 38218 | RRA | Reset carry flag if SPACE pressed, else set it | ||
| 38219 | JR C,38232 | SPACE was not pressed, so skip ahead to 38232 | ||
| 38221 | LD A,254 | Reset bit 0 in A to select the keyboard half-row SHIFT - V | ||
| 38223 | IN A,(254) | Read the keyboard | ||
| 38225 | RRA | Reset carry flag if SHIFT pressed, else set it | ||
| 38226 | LD HL,50809 | Point HL at "BREAK KEY PRESSED" text | ||
| 38229 | JP NC,64582 | If SHIFT was pressed (i.e. SHIFT-SPACE, or BREAK) jump to "game over" window routine and return to control selection menu | ||
| 38232 | CALL 38585 | Kill Magic Knight's x-velocity if he cannot horizontally pass through a block beside him | ||
| 38235 | CALL 64034 | Capture keyboard or joystick input loading result into A | ||
| 38238 | BIT 0,A | If "left" pressed then... | ||
| 38240 | JR NZ,38272 | Skip ahead to "move left" subroutine | ||
| 38242 | BIT 1,A | If "right" pressed then... | ||
| 38244 | JR NZ,38312 | Skip ahead to "move right" subroutine | ||
| 38246 | BIT 2,A | If "up" pressed then... | ||
| 38248 | JP NZ,38329 | Skip ahead to "jump" subroutine | ||
| 38251 | BIT 3,A | If "down" pressed then... | ||
| 38253 | CALL NZ,64836 | ...select Magic Knight's room if cheat / debug mode is enabled | ||
| 38256 | BIT 4,A | If "fire" pressed then... | ||
| 38258 | JR NZ,38266 | ...skip ahead to 38266 | ||
| 38260 | CALL 61816 | Wait for interrupt then erase Magic Knight from display, advance his current position then redraw | ||
| 38263 | JP 38208 | Loop back for next key / control press | ||
| 
Fire pressed
 | ||||
| 38266 | CALL 47592 | Wait for fire button / key to be released | ||
| 38269 | JP 42494 | Display and handle main in-game menu | ||
| 
Left pressed
 | ||||
| 38272 | LD HL,23474 | If Magic-Knight-can't-move-left flag is set... | ||
| 38275 | BIT 0,(HL) | ... | ||
| 38277 | JP NZ,38208 | ...then loop back to start of keyboard check routine | ||
| 38280 | EX AF,AF' | Switch AF and AF' | ||
| 38281 | LD A,1 | Set Magic-Knight-facing-left flag... | ||
| 38283 | LD (23417),A | ... | ||
| 38286 | LD A,254 | Set Magic Knight's x-velocity to minus 2... | ||
| 38288 | LD (24844),A | ... | ||
| 38291 | LD (38360),A | Prepare to set Magic Knight's x-velocity to minus 2 | ||
| 38294 | EX AF,AF' | Switch AF and AF' (A now holds pressed controls bitmap) | ||
| 38295 | BIT 2,A | If "up" was also pressed... | ||
| 38297 | JR NZ,38333 | ...then skip ahead to 38333 (jumping subroutine) | ||
| 38299 | XOR A | Set Magic Knight's current y-velocity to zero... | ||
| 38300 | LD (24845),A | ... | ||
| 38303 | CALL 61816 | Wait for interrupt then erase Magic Knight from display, advance his current position then redraw | ||
| 38306 | CALL 38434 | Handle Magic Knight's fall | ||
| 38309 | JP 38208 | Loop back for next key / control press | ||
| 
Right pressed
 | ||||
| 38312 | LD HL,23474 | If Magic-Knight-can't-move-right flag is set... | ||
| 38315 | BIT 1,(HL) | ... | ||
| 38317 | JP NZ,38208 | ...then loop back to start of keyboard check routine | ||
| 38320 | EX AF,AF' | Switch AF and AF' | ||
| 38321 | XOR A | Reset Magic-Knight-facing-left flag... | ||
| 38322 | LD (23417),A | ... | ||
| 38325 | LD A,2 | Jump to 38288, setting Magic Knight's x-velocity to 2... | ||
| 38327 | JR 38288 | ... | ||
| 
Up pressed
 | ||||
| 38329 | XOR A | Prepare to set Magic Knight's x-velocity to zero... | ||
| 38330 | LD (38360),A | ... | ||
| 38333 | LD HL,49019 | Point HL at start of Magic Knight's y-velocities sequence table | ||
| 38336 | LD (23442),HL | Store current position in Magic Knight's y-velocities sequence table at 23442 | ||
| 38339 | LD A,(24841) | Load A with Magic Knight's current y-coordinate (pixels) | ||
| 38342 | CP 8 | If y-coordinate is less than 8... | ||
| 38344 | JP C,38413 | ...then jump to 38413 (exit loop as Magic Knight can't get any higher!) | ||
| 38347 | LD HL,(23442) | Load HL with current position in Magic Knight's y-velocities sequence table | ||
| 38350 | LD A,(HL) | Load the current y-velocity in the sequence into A | ||
| 38351 | NEG | Negate (as Magic Knight is jumping upwards) | ||
| 38353 | OR A | If A is zero... | ||
| 38354 | JR Z,38413 | ...jump to 38413 (exit loop as we have reached the end of the sequence) | ||
| 38356 | LD (24845),A | Load A into Magic Knight's y-velocity | ||
| 38359 | LD A,0 | Set Magic Knight's x-velocity... | ||
| 38361 | LD (24844),A | ... | ||
| 38364 | CALL 38585 | Kill Magic Knight's x-velocity if he cannot horizontally pass through a block beside him | ||
| 38367 | LD A,(24844) | Load Magic Knight's x-velocity into B... | ||
| 38370 | LD B,A | ... | ||
| 38371 | LD A,(23474) | Load Magic Knight movement flags into A | ||
| 38374 | XOR B | Check: | ||
| 38375 | CP 255 | If x-velocity is -2 (left), and Magic Knight can't move left... | ||
| 38377 | JP Z,38419 | ...then jump ahead to 38419 | ||
| 38380 | CP 253 | If x-velocity is -2 (left), and Magic Knight can't move left or right... | ||
| 38382 | JP Z,38419 | ...then jump ahead to 38419 | ||
| 38385 | CP 1 | If x-velocity is +2 (right), and Magic Knight can't move left or right... | ||
| 38387 | JP Z,38419 | ...then jump ahead to 38419 | ||
| 38390 | OR A | If x-velocity is +2 (right), and Magic Knight can't move right... | ||
| 38391 | JP Z,38419 | ...then jump ahead to 38419 | ||
| 38394 | CALL 38724 | Kill Magic Knight's jump if he cannot vertically pass through a block above him | ||
| 38397 | EX AF,AF' | Switch AF and AF' | ||
| 38398 | CALL 61816 | Wait for interrupt then erase Magic Knight from display, advance his current position then redraw | ||
| 38401 | EX AF,AF' | Switch AF and AF' | ||
| 38402 | JR NZ,38413 | If Magic Knight's jump was impeded by a block above him then jump to 38413 | ||
| 38404 | CALL 40008 | Set Magic Knight's velocity to zero, if appropriate move to new room, update state of Storm Cloud and execute room-specific routine | ||
| 38407 | LD HL,(23442) | Load HL with current position in Magic Knight's y-velocities sequence table | ||
| 38410 | INC HL | Advance to next y-velocity in the sequence | ||
| 38411 | JR 38336 | Loop back to 38336 | ||
| 38413 | CALL 38429 | Handle Magic Knight's fall, preserving x-velocity | ||
| 38416 | JP 38208 | Loop back to start of keyboard check routine | ||
| 38419 | XOR A | Set Magic Knight's x-velocity to zero... | ||
| 38420 | LD (24844),A | ... | ||
| 38423 | LD (38360),A | Prepare to set Magic Knight's x-velocity to zero | ||
| 38426 | JP 38394 | Jump back to 38394 | ||
| Prev: 38024 | Up: Map | Next: 38429 |