![]() |
Routines |
| Prev: 32258 | Up: Map | Next: 32655 |
| 32390 | LD A,(65532) | If throw-enabled flag is not set... | ||
| 32393 | BIT 4,A | ... | ||
| 32395 | JP Z,27189 | ...then jump into main game loop (process keyboard input and move Magic Knight, enter menus or execute other command) | ||
| 32398 | CALL 38075 | Play upward scale sound | ||
| 32401 | LD A,(23377) | Set Gimbal-white-out-safe flag... | ||
| 32404 | OR 1 | ... | ||
| 32406 | LD (23377),A | ... | ||
| 32409 | LD IX,25395 | Point IX at Magic Knight's inventory | ||
| 32413 | LD B,5 | Load B with 5 (as 5 inventory slots) | ||
| 32415 | LD HL,50381 | Point HL at "THROW WHICH OBJECT" text | ||
| 32418 | LD DE,50388 | Point DE at "THROW" text | ||
| 32421 | CALL 34914 | Show list of objects (window or menu) and handle selection if a menu | ||
| 32424 | LD HL,25395 | Point HL at Magic Knight's inventory | ||
| 32427 | CALL 34864 | Point DE at name of a selected object in object names table and print in command summary window | ||
| 32430 | LD DE,50391 | Point DE at "AT" text... | ||
| 32433 | CALL 38693 | ...and print in command summary window at bottom of screen | ||
| 32436 | LD HL,44083 | Point HL at "THROW AN OBJECT AT ?" text | ||
| 32439 | LD DE,0 | Set DE to zero so command summary window is not updated with additional text | ||
| 32442 | CALL 35141 | Display and process input for character selection menu (current room's characters only), setting Current Character | ||
| 32445 | CALL 38725 | Display execute / reject command window and return if execute chosen, else exit | ||
| 32448 | LD A,(30467) | Load A with index of Current Object | ||
| 32451 | LD E,0 | Load E with 0 (weight) | ||
| 32453 | CALL 34160 | Point HL to weight of object A | ||
| 32456 | PUSH HL | Copy HL... | ||
| 32457 | POP IX | ...into IX | ||
| 32459 | LD A,(IX+0) | Load A with object's weight | ||
| 32462 | CP 12 | If object has weight greater than 12... | ||
| 32464 | JP NC,32643 | ...then kill Magic Knight and end game | ||
| 32467 | BIT 4,(IX+4) | If object's lethal-if-thrown flag is set... | ||
| 32471 | JP NZ,32649 | ...then kill the character who object was thrown at and end game | ||
| 32474 | BIT 5,(IX+4) | If object's is-a-crystal flag is reset... | ||
| 32478 | JR Z,32487 | ...then skip ahead to 32487 | ||
| 32480 | LD A,(30615) | If target of throw is Gimbal... | ||
| 32483 | OR A | ... | ||
| 32484 | JP Z,32555 | ...then skip ahead to 32555 | ||
| 32487 | LD A,(30467) | If object thrown is not the Glowing Bottle... | ||
| 32490 | CP 16 | ... | ||
| 32492 | JP NZ,32499 | ...then skip ahead to 32499 | ||
| 32495 | CALL 30540 | Remove Glowing Bottle from Magic Knight's inventory, smash it and release Banshee | ||
| 32498 | LD A,C | Load index of Broken Glass into A (Current Object) | ||
| 32499 | LD C,A | Load index of Current Object into C | ||
| 32500 | PUSH BC | Store BC (C=Current Object) | ||
| 32501 | LD B,5 | Load B with 5 | ||
| 32503 | LD HL,25395 | Point HL at Magic Knight's inventory | ||
| 32506 | CALL 38674 | Remove object C from Magic Knight's inventory (and tidy up remainder of slots) | ||
| 32509 | POP BC | Restore BC (C=Current Object) | ||
| 32510 | LD A,C | Copy index of Current Object into A... | ||
| 32511 | ADD A,A | ...and multiply by three... | ||
| 32512 | ADD A,C | ... | ||
| 32513 | LD C,A | Transfer into BC... | ||
| 32514 | LD B,0 | ... | ||
| 32516 | LD HL,25464 | Point HL to objects' current positions table | ||
| 32519 | ADD HL,BC | Add three times Current Object's index as offset | ||
| 32520 | LD A,(65529) | Set object's room to be Magic Knight's current room... | ||
| 32523 | LD (HL),A | ... | ||
| 32524 | INC HL | Advance HL to object's x-coordinate | ||
| 32525 | PUSH HL | Store HL (pointer to x-coordinate) | ||
| 32526 | LD A,(30615) | Load BC with three times index of character who was target of throw... | ||
| 32529 | LD C,A | ... | ||
| 32530 | ADD A,A | ... | ||
| 32531 | ADD A,C | ... | ||
| 32532 | LD B,0 | ... | ||
| 32534 | LD C,A | ... | ||
| 32535 | LD HL,25441 | Point HL at x-coordinate of first entry in characters' current positions table | ||
| 32538 | ADD HL,BC | Add BC (three times character index) as offset | ||
| 32539 | EX DE,HL | Swap DE (now pointer to Current Character's x-coordinate) and HL (now undefined) | ||
| 32540 | POP HL | Restore HL (pointer to object's x-coordinate) | ||
| 32541 | LD A,(DE) | Copy character's x-coordinate... | ||
| 32542 | LD (HL),A | ...into object's x-coordinate | ||
| 32543 | INC DE | Advance to character's y-coordinate | ||
| 32544 | INC HL | Advance to object's y-coordinate | ||
| 32545 | LD A,(DE) | Copy character's y-coordinate plus three... | ||
| 32546 | ADD A,3 | ... | ||
| 32548 | LD (HL),A | ...into object's y-coordinate | ||
| 32549 | CALL 35495 | Set Magic Knight's available action flags | ||
| 32552 | JP 34724 | Display "THE [OBJECT] LANDED ON THE FLOOR BY [CHARACTER]" window and return to game | ||
| 32555 | LD A,(23378) | If Crystallium-Spectralis-cast score flag is not set... | ||
| 32558 | AND 1 | ... | ||
| 32560 | JP Z,34700 | ...then display "YOU HEAR A SHORT-RANGE TELEPATHIC WHISPER..." message and return to game | ||
| 32563 | LD A,(30467) | Load A with index of Current Object | ||
| 32566 | LD B,223 | Set blue and red crystal flags, reset green crystal flag in mask | ||
| 32568 | CP 21 | If object is the Green Crystal... | ||
| 32570 | JR Z,32580 | ...then skip ahead to 32580 | ||
| 32572 | LD B,239 | Set green and blue crystal flags, reset red crystal flag in mask | ||
| 32574 | CP 23 | If object is the Red Crystal... | ||
| 32576 | JR Z,32580 | ...then skip ahead to 32580 | ||
| 32578 | LD B,247 | Set green and red crystal flags, reset blue crystal flag in mask | ||
| 32580 | LD A,(29939) | Load Gimbal's current attribute into A... | ||
| 32583 | AND B | ...apply mask... | ||
| 32584 | LD (29939),A | ...and store again | ||
| 32587 | PUSH AF | Store AF (A=Gimbal's current attribute) | ||
| 32588 | LD A,(30467) | Load C with index of Current Object... | ||
| 32591 | LD C,A | ... | ||
| 32592 | LD B,5 | Load B with 5 as there are 5 inventory slots | ||
| 32594 | LD HL,25395 | Point HL at Magic Knight's inventory | ||
| 32597 | CALL 38674 | Remove Current Object from Magic Knight's inventory and tidy up slots | ||
| 32600 | POP AF | Restore AF (A=current red, green and blue crystal flags) | ||
| 32601 | CP 71 | If R, G and B PAPER bits of Gimbal's attribute are not all reset... | ||
| 32603 | JR NZ,32624 | ...skip ahead to 32624 | ||
| 32605 | LD A,(23468) | Set Gimbal-is-free game progress flag... | ||
| 32608 | OR 1 | ... | ||
| 32610 | LD (23468),A | ... | ||
| 32613 | LD A,11 | Set Gimbal's "examine character" descriptive text to... | ||
| 32615 | LD (25330),A | ... | ||
| 32618 | CALL 33278 | Flash border and screen (as in cast a spell) | ||
| 32621 | JP 34646 | Display "SUCCESS! GIMBAL IS FREE AT LAST!" window and return to game | ||
| 32624 | CALL 33278 | Flash border and screen (as in cast a spell) | ||
| 32627 | LD A,(30467) | Load A with index of Current Object | ||
| 32630 | CP 22 | If object is the Blue Crystal... | ||
| 32632 | JP Z,34706 | ...then display "THE BLUE CRYSTAL FLEW AT GIMBAL AND BURST..." window and return to game | ||
| 32635 | CP 23 | If object is the Red Crystal... | ||
| 32637 | JP Z,34712 | ...then display "THE RED CRYSTAL FLEW STRAIGHT AT GIMBAL AND TURNED INTO A GAS..." window and return to game | ||
| 32640 | JP 34718 | Display "THE GREEN CRYSTAL FLEW AT GIMBAL AND SUCKED..." window and return to game | ||
| 32643 | LD HL,43504 | Point HL at "YOU KILLED YOURSELF TRYING TO THROW SOMETHING AT [CHARACTER]" text | ||
| 32646 | JP 35101 | Jump to "game over" window routine and exit | ||
| 32649 | LD HL,43539 | Point HL at "YOU THREW SOMETHING AND KILLED [CHARACTER]" text | ||
| 32652 | JP 35101 | Jump to "game over" window routine and exit | ||
| Prev: 32258 | Up: Map | Next: 32655 |