Routines |
Prev: 29272 | Up: Map | Next: 29488 |
Used by the routine at 55726.
|
||||
29330 | CALL 54333 | Print or update command summary window at top of screen | ||
29333 | LD DE,38824 | Point DE at "PICK UP THE" text... | ||
29336 | CALL 54283 | ...and print in command summary window at top of screen | ||
29339 | LD HL,25286 | Point HL at start of objects' current positions table | ||
29342 | LD BC,3200 | Load B with 12 and C with 128 (bug) | ||
29345 | LD A,(23701) | Load A with Magic Knight's current room | ||
29348 | CP (HL) | If current object's room is not the same as Magic Knight's then... | ||
29349 | JR NZ,29352 | ...skip ahead to 29352 | ||
29351 | INC C | Increase C (count of objects in Magic Knight's current room) | ||
29352 | INC HL | Advance HL to next object's position... | ||
29353 | INC HL | ... | ||
29354 | INC HL | ... | ||
29355 | DJNZ 29345 | Decrease B and loop back for next object | ||
29357 | LD A,C | Copy total number of objects into A... | ||
29358 | OR A | ...and if this value is zero... [can't actually happen because of bug at 29342] | ||
29359 | JP Z,55192 | ...then display "THERE IS NOTHING IN THIS ROOM" window (13) and return to game | ||
29362 | LD HL,25286 | Point HL at start of objects' current positions table | ||
29365 | LD A,(23701) | Load A with Magic Knight's current room | ||
29368 | LD C,A | ...and copy into C | ||
29369 | CALL 33757 | Load Magic Knight's coordinates (in characters) into DE | ||
29372 | XOR A | Set A to zero | ||
29373 | EX AF,AF' | Switch A register | ||
29374 | LD B,50 | Load B with 50 (bug - should be 37 as there are only 37 objects) | ||
29376 | LD A,C | Load Magic Knight's current room into A | ||
29377 | CP (HL) | If room of current object is not the same as Magic Knight's current room... | ||
29378 | JR NZ,29401 | ...then skip ahead to 29401 [advance to next object] | ||
29380 | LD A,D | Copy Magic Knight's y-coordinate into A | ||
29381 | INC HL | Advance HL to current object's y-coordinate... | ||
29382 | INC HL | ... | ||
29383 | CP (HL) | ...and if this is not the same as Magic Knight's y-coordinate... | ||
29384 | JR NZ,29403 | ...then skip ahead to 29403 [advance to next object] | ||
29386 | DEC HL | Move HL back to object's x-coordinate | ||
29387 | LD A,E | Load Magic Knight's x-coordinate into A | ||
29388 | DEC A | Decrease x-coordinate by two... | ||
29389 | DEC A | ... | ||
29390 | PUSH BC | Store BC | ||
29391 | LD B,5 | Load B with 5 (as we are going to test 5 different x-coordinates) | ||
29393 | CP (HL) | If x-coordinate of object is the same as current x-coordinate value... | ||
29394 | JR Z,29412 | ...then skip ahead to 29412 | ||
29396 | INC A | Increase value of current x-coordinate (to test next x-coordinate in range -2 to +2) | ||
29397 | DJNZ 29393 | Decrease B (remaining number of x-coordinates to test) and loop back to 29393 | ||
29399 | POP BC | Restore BC | ||
29400 | DEC HL | Move HL back one byte to start of position data for current object | ||
29401 | INC HL | Advance HL by three bytes to move to next object... | ||
29402 | INC HL | ... | ||
29403 | INC HL | ... | ||
29404 | EX AF,AF' | Switch A register back (so now contains the index of the object to test next) | ||
29405 | INC A | Increase A [index of current object to test] | ||
29406 | EX AF,AF' | Switch A register | ||
29407 | DJNZ 29376 | Loop back to 29376 for next object | ||
29409 | JP 55187 | Display "THERE IS NOTHING NEAR ENOUGH" window (13) and return to game | ||
An object has been found within Magic Knight's reach so make this the current object
|
||||
29412 | POP BC | Restore BC | ||
29413 | EX AF,AF' | Switch A register (so now contains index of first object that is within Magic Knight's reach) | ||
29414 | LD (29526),A | Load index of this object into instruction at 29525 (i.e. set as Current Object) | ||
29417 | LD DE,33924 | Point DE at character code to print name of Current Object | ||
29420 | CALL 54283 | ...and print in command summary window at top of screen | ||
29423 | CALL 55115 | Display execute / reject command window and return here if execute chosen, else exit to main game loop | ||
29426 | LD HL,25168 | Load A with index of object in Magic Knight's fifth inventory slot (carrying)... | ||
29429 | LD A,(HL) | ... | ||
29430 | OR A | If this is not zero (i.e. Magic Knight's hands are full)... | ||
29431 | JP NZ,55165 | ...then display "YOUR HANDS ARE FULL" window and return to game | ||
29434 | CALL 33601 | Check whether object has a weight greater than Magic Knight's surplus strength... | ||
29437 | JP P,55177 | ...and if it does then display "THE [name of Current Object] IS TOO HEAVY FOR YOU" window and return to game | ||
29440 | LD A,(29526) | Load A with index of Current Object... | ||
29443 | LD C,A | ...and copy into C | ||
29444 | LD B,5 | Load B with 5 (five inventory slots) | ||
29446 | LD HL,25164 | Load object in C into Magic Knight's first empty inventory (carrying) slot... | ||
29449 | CALL 33516 | ... | ||
29452 | LD A,(29526) | Load A with index of Current Object... | ||
29455 | LD C,A | ...and copy into C | ||
29456 | ADD A,A | Multiply index by three in A... | ||
29457 | ADD A,C | ... | ||
29458 | LD B,0 | Load three times object index into BC... | ||
29460 | LD C,A | ... | ||
29461 | LD HL,25286 | Point HL at start of objects' current positions table | ||
29464 | ADD HL,BC | Add BC as offset to point HL at position data for current object | ||
29465 | LD (HL),99 | Set object's room to 99 | ||
29467 | LD IX,25164 | Point IX at Magic Knight's current inventory (carrying) | ||
29471 | LD B,5 | Load B with 5 (five inventory slots) | ||
29473 | LD HL,38809 | Point HL at "YOU ARE NOW CARRYING" text | ||
29476 | CALL 33945 | Display "Magic Knight's current inventory" window as an information window | ||
29479 | CALL 55138 | Display "PRESS FIRE TO CONTINUE" window and wait for fire to be pressed | ||
29482 | CALL 34265 | Set Magic Knight's available action flags and validate I.D. Card if appropriate | ||
29485 | JP 27136 | Jump to start of main game loop |
Prev: 29272 | Up: Map | Next: 29488 |