![]() |
Routines |
| Prev: 44253 | Up: Map | Next: 44615 |
|
Used by the routine at 64623.
|
||||
| 44337 | LD IX,24848 | Point IX at start of Magic Knight's current inventory (carrying) | ||
| 44341 | LD B,5 | Load B with 5 (five inventory slots) | ||
| 44343 | LD HL,51920 | Point HL at "[Current Command] WHICH OBJECT ?" text | ||
| 44346 | LD DE,51928 | Point DE at "[Current Command] THE " text | ||
| 44349 | CALL 45809 | Show list of objects in Magic Knight's inventory (carrying) as a menu and load A with selected item index | ||
| 44352 | LD HL,24848 | Point HL at start of Magic Knight's current inventory (carrying) | ||
| 44355 | CALL 45766 | Print name of selected object in Magic Knight's current inventory (carrying) in command summary window | ||
| 44358 | LD A,(41779) | Load A with index of Current Object | ||
| 44361 | CP 22 | If the selected object is not the Elf-Horn... | ||
| 44363 | JP NZ,44557 | ...then skip ahead to 44557 | ||
| 44366 | LD A,(23702) | Load BC with double index of Magic Knight's current room... | ||
| 44369 | ADD A,A | ... | ||
| 44370 | LD C,A | ... | ||
| 44371 | LD B,0 | ... | ||
| 44373 | LD HL,48915 | Load HL with start address of character movement restriction data | ||
| 44376 | ADD HL,BC | Add BC as offset | ||
| 44377 | LD A,(HL) | Load current room's movement restriction data... | ||
| 44378 | LD (44454),A | ...into operand of instruction at 44453 | ||
| 44381 | CALL 63399 | Print or update command summary window at top of screen | ||
| 44384 | LD DE,56163 | Point DE at "SUMMON " text... | ||
| 44387 | CALL 63349 | ...and print in command summary window at top of screen | ||
| 44390 | LD HL,51413 | Point HL at "SUMMON ?" text | ||
| 44393 | PUSH HL | Store HL (address of "SUMMON ?" text) | ||
| 44394 | LD HL,48598 | Load HL with start address of list of characters for "SUMMON" character selection menu | ||
| 44397 | CALL 46106 | Display and process input for character selection menu ("SUMMON") | ||
| 44400 | CALL 64207 | Display execute / reject command window and return here if execute chosen, else exit to main game loop | ||
| 44403 | LD A,(41779) | Load A with index of Current Object (see trivia) | ||
| 44406 | CALL 45601 | Point HL at current position data for Current Character | ||
| 44409 | LD A,(23702) | Load A with Magic Knight's current room... | ||
| 44412 | CP (HL) | ...and set zero flag if this is the same as the Current Character's current room | ||
| 44413 | LD HL,56275 | Point HL at "[Current Character's full name] IS ALREADY HERE!" text | ||
| 44416 | JP Z,64309 | If zero flag is set then display "[Character] IS ALREADY HERE!" window (28) and return to game | ||
| 44419 | LD A,(41937) | Point HL at Current Character's strength... | ||
| 44422 | LD E,0 | ... | ||
| 44424 | CALL 45406 | ... | ||
| 44427 | PUSH HL | Load IX with address of Current Character's strength... | ||
| 44428 | POP IX | ... | ||
| 44430 | BIT 7,(IX+6) | Set zero flag to inverse of Current Character's asleep flag (i.e. awake flag) | ||
| 44434 | LD HL,56213 | Point HL at "[Current Character's full name] IS ASLEEP" text | ||
| 44437 | JP NZ,64309 | If zero flag is not set then display "[Character] IS ASLEEP" window (28) and return to game | ||
| 44440 | LD A,(IX+1) | If character's happiness is less than 35... | ||
| 44443 | AND 127 | ... | ||
| 44445 | CP 35 | ...then set carry flag | ||
| 44447 | LD HL,56224 | Point HL at "[Current Character's full name] DOES NOT WANT TO BE SUMMONED" text | ||
| 44450 | JP C,64309 | If carry flag is set then display "[Character] DOES NOT WANT TO BE SUMMONED" window (28) and return to game | ||
|
The operand of the instruction at 44453 represents the movement restriction data for the current room. This is modified by the instruction at 44378.
|
||||
| 44453 | LD A,0 | If movement restriction data is 98 (i.e. room not accessible by character)... | ||
| 44455 | CP 98 | ... | ||
| 44457 | JP Z,64309 | ...then display "[Character] DOES NOT WANT TO BE SUMMONED" window (28) and return to game | ||
| 44460 | LD A,(IX+2) | If Current Character's stamina is less than 25... | ||
| 44463 | AND 127 | ... | ||
| 44465 | CP 25 | ...then set carry flag | ||
| 44467 | LD HL,56248 | Point HL at "[Current Character's full name] IS TOO TIRED TO BE SUMMONED" text | ||
| 44470 | JP C,64309 | If carry flag is set then display "[Character] IS TOO TIRED TO BE SUMMONED" window (28) and return to game | ||
| 44473 | CALL 45601 | Point HL at current position data for Current Character | ||
| 44476 | CALL 44615 | Load BC with coordinates of character's arrival point when summoned to current room and if character does not want to come here then skip ahead to 44585 | ||
| 44479 | JP Z,44585 | |||
| 44482 | LD A,(24840) | Load A with Magic Knight's current x-coordinate (characters)... | ||
| 44485 | RRCA | ... | ||
| 44486 | RRCA | ... | ||
| 44487 | RRCA | ... | ||
| 44488 | AND 31 | ... | ||
| 44490 | SUB C | Subtract arrival x-coordinate to give horizontal distance from Magic Knight... | ||
| 44491 | JP Z,44591 | ...and if zero then skip ahead to 44591 (check vertical distance to Magic Knight) | ||
| 44494 | CP 1 | If horizontal distance is 1... | ||
| 44496 | JP Z,44591 | ...then skip ahead to 44591 (check vertical distance to Magic Knight) | ||
| 44499 | CP 255 | If horizontal distance is -1... | ||
| 44501 | JP Z,44591 | ...then skip ahead to 44591 (check vertical distance to Magic Knight) | ||
| 44504 | CP 254 | If horizontal distance is -2... | ||
| 44506 | JP Z,44591 | ...then skip ahead to 44591 (check vertical distance to Magic Knight) | ||
|
Have character arrive in new room
|
||||
| 44509 | LD A,(23702) | Load A with index of Magic Knight's current room... | ||
| 44512 | OR 128 | ...and set MSB | ||
| 44514 | LD (HL),A | Set this as character's current room | ||
| 44515 | INC HL | Advance to character's x-coordinate... | ||
| 44516 | LD (HL),C | ...and set to value in C | ||
| 44517 | INC HL | Advance to character's y-coordinate... | ||
| 44518 | LD (HL),B | ...and set to value in B | ||
| 44519 | LD A,(IX+0) | Decrease character's strength by 4... | ||
| 44522 | SUB 4 | ... | ||
| 44524 | LD (IX+0),A | ... | ||
| 44527 | LD A,(IX+1) | Decrease character's happiness by 3... | ||
| 44530 | SUB 3 | ... | ||
| 44532 | LD (IX+1),A | ... | ||
| 44535 | LD A,(IX+2) | Decrease character's stamina by 7... | ||
| 44538 | SUB 7 | ... | ||
| 44540 | LD (IX+2),A | ... | ||
| 44543 | LD A,(24771) | Decrease Magic Knight's current magic level by 3... | ||
| 44546 | SUB 3 | ... | ||
| 44548 | LD (24771),A | ... | ||
| 44551 | LD HL,56347 | Point HL at "[Current Character's full name] APPEARS IN A THICK PUFF OF SMOKE" text | ||
| 44554 | JP 64309 | Display "[Character] APPEARS IN A THICK PUFF OF SMOKE" window (28) and return to game | ||
|
Blown object is not the Elf-Horn
|
||||
| 44557 | CALL 64207 | Display execute / reject command window and return here if execute chosen, else exit to main game loop | ||
| 44560 | LD A,(41779) | Load A with index of Current Object... | ||
| 44563 | CALL 45685 | ...and if this is 4 (Teddy Bear) then display "THE BEAR SAYS..." message and wait for fire to be pressed | ||
| 44566 | LD E,0 | Load E with 0 (prepare to check can-be-blown flag) | ||
| 44568 | CALL 45390 | Point HL to byte 0 of the A-th record in object properties table | ||
| 44571 | BIT 6,(HL) | Set zero flag if object's can-be-blown flag is reset, otherwise reset | ||
| 44573 | LD HL,56304 | Point HL at "WHAT A LOT OF DUST..." text | ||
| 44576 | JP Z,64305 | If zero flag is set then display "WHAT A LOT OF DUST..." window (27) and return to game | ||
| 44579 | LD HL,56165 | Point HL at "I THINK YOU SHOULD GIVE UP TRYING TO PLAY THE [name of Current Object]..." text | ||
| 44582 | JP 64305 | Display "I THINK YOU SHOULD GIVE UP..." window (27) and return to game | ||
|
Character does not want to come to current room
|
||||
| 44585 | LD HL,56284 | Point HL at "[Current Character's short name] DOES NOT WANT TO COME HERE!" text | ||
| 44588 | JP 64305 | Display "[Character] DOES NOT WANT TO COME HERE!" window (27) and return to game | ||
|
Magic Knight is within two characters horizontally of character's intended arrival point
|
||||
| 44591 | LD A,(24841) | Load A with Magic Knight's current y-coordinate (characters)... | ||
| 44594 | RRCA | ... | ||
| 44595 | RRCA | ... | ||
| 44596 | RRCA | ... | ||
| 44597 | AND 31 | ... | ||
| 44599 | SUB B | Subtract arrival y-coordinate to give vertical distance from Magic Knight... | ||
| 44600 | AND 252 | If bits 2-7 are all reset (i.e. distance was 0 - 3)... | ||
| 44602 | JR Z,44609 | ...then skip ahead to 44609 | ||
| 44604 | CP 252 | If bits 2-7 are not all set (i.e. distance was not -1 - -4)... | ||
| 44606 | JP NZ,44509 | ...then jump back to 44509 (have character arrive) | ||
| 44609 | LD HL,56070 | Point HL at "[Current Character's short name] SAYS 'I CANNOT COME TO THAT ROOM ... YOU ARE IN MY WAY!'" text | ||
| 44612 | JP 64293 | Display "[Character] SAYS 'I CANNOT COME TO THAT ROOM...'" window (15) and return to game | ||
| Prev: 44253 | Up: Map | Next: 44615 |