Routines |
Prev: 31537 | Up: Map | Next: 32055 |
Used by the routine at 55726.
|
||||
31688 | LD A,255 | Store 255 at 23694 and 23696... | ||
31690 | LD (23696),A | ...to preserve attributes already on screen... | ||
31693 | LD (23694),A | ... | ||
31696 | CALL 54333 | Print or update command summary window at top of screen | ||
31699 | LD DE,41888 | Point DE at "MOVE THE STARSHIP TO"... | ||
31702 | CALL 54283 | ...and print in command summary window at top of screen | ||
31705 | LD A,(23700) | Load D with USS Pisces' current location... | ||
31708 | LD D,A | ... | ||
31709 | LD HL,53329 | Point HL at starship location connectivity data | ||
31712 | LD BC,16384 | Load B with 64 and C with zero | ||
31715 | LD A,(HL) | Load current location index in starship location connectivity data into A... | ||
31716 | CP D | ...and if this is the same as the USS Pisces' Current Location... | ||
31717 | JR Z,31723 | ...then skip ahead to 31723 | ||
31719 | INC HL | Advance HL to next location index | ||
31720 | INC C | Increase C | ||
31721 | DJNZ 31715 | Loop back to 31715 | ||
31723 | LD A,C | Load C (index of index of USS Pisces' Current Location!) into instruction at 31766 as operand... | ||
31724 | LD (31767),A | ... | ||
31727 | LD BC,9 | Load BC with 9 | ||
31730 | OR A | Reset carry flag | ||
31731 | SBC HL,BC | Move HL back nine bytes to cell to current location's north-west | ||
31733 | LD DE,23436 | Point DE at the list of currently available destinations | ||
31736 | LD B,3 | Load B with 3 | ||
31738 | PUSH BC | Store BC (B = current repeat counter) | ||
31739 | LD A,(HL) | Copy entry from starship location connectivity data to list of currently available destinations... | ||
31740 | LD (DE),A | ... | ||
31741 | INC DE | Advance list of currently available destinations pointer | ||
31742 | INC HL | Advance starship location connectivity data pointer east one unit | ||
31743 | LD A,B | If repeat counter is 2... | ||
31744 | CP 2 | ... | ||
31746 | JR Z,31751 | ...then skip ahead to 31751 (skip over current location as we are already here!) | ||
31748 | LD A,(HL) | Copy entry from starship location connectivity data to list of currently available destinations... | ||
31749 | LD (DE),A | ... | ||
31750 | INC DE | Advance list of currently available destinations pointer | ||
31751 | INC HL | Advance starship location connectivity data pointer east one unit | ||
31752 | LD A,(HL) | Copy entry from starship location connectivity data to list of currently available destinations... | ||
31753 | LD (DE),A | ... | ||
31754 | INC DE | Advance list of currently available destinations pointer | ||
31755 | LD BC,6 | Advance starship location connectivity data pointer by 6 bytes (i.e. south one and west two units)... | ||
31758 | ADD HL,BC | ... | ||
31759 | POP BC | Restore BC (B = current repeat counter) | ||
31760 | DJNZ 31738 | Loop back to 31738 for next iteration | ||
31762 | LD IX,23436 | Point IX at start of list of currently available destinations | ||
31766 | LD A,0 | Load A with index of index of USS Pisces' Current Location as stored by instruction at 31723 | ||
31768 | CP 8 | If index is less than 8 (i.e. already on northern-most row of grid)... | ||
31770 | JP C,32200 | ...then remove starship destination entries for locations to the north-west, north and north-east | ||
31773 | CP 24 | If index is 24 or more (i.e. already on southern-most row of grid)... | ||
31775 | JP NC,32213 | ...then remove starship destination entries for locations to the south-west, south and south-east | ||
This entry point is used by the routines at 32200 and 32213.
|
||||
31778 | LD A,(31767) | Load A with index of index of USS Pisces' Current Location as stored by instruction at 31723 | ||
31781 | AND 7 | If lowest three bits are reset... | ||
31783 | OR A | ...(i.e. already on western-most column of grid)... | ||
31784 | JP Z,32226 | ...then remove starship destination entries for locations to the north-west, west and south-west | ||
31787 | CP 7 | If lowest three bits are set (i.e. already on eastern-most column of grid)... | ||
31789 | JP Z,32239 | ...then remove starship destination entries for locations to the north-east, east and south-east | ||
31792 | LD HL,23436 | Point HL at start of list of currently available destinations | ||
31795 | LD DE,23436 | Point DE at start of list of currently available destinations | ||
31798 | LD BC,2048 | Set B = 8 (as list of currently available destinations can have at most eight entries) and C = 0 | ||
31801 | LD A,(HL) | If current available destination list entry is zero... | ||
31802 | OR A | ... | ||
31803 | JR Z,31808 | ...then skip ahead to 31808 (advance HL to next list position) | ||
31805 | LD (DE),A | Set byte at DE to value read from HL | ||
31806 | INC C | Increase C (current number of entries in tidied list) | ||
31807 | INC DE | Advance DE to next list position | ||
31808 | INC HL | Advance HL to next list position | ||
31809 | DJNZ 31801 | Decrease B (remaining list entries to process) and loop back to 31801 | ||
31811 | LD A,9 | Load A with 9... | ||
31813 | ADD A,C | ...plus number of entries in list of currently available destinations | ||
31814 | PUSH BC | Store BC (C = number of available destinations) | ||
31815 | LD (37292),A | Set y-coordinate of bottom of "WHERE TO ?" window (25) to value stored in A | ||
31818 | LD A,1 | Set initial (and minimum allowed) y-coordinate of hand cursor to 1 for window 25... | ||
31820 | LD (37295),A | ... | ||
31823 | LD A,25 | Draw "WHERE TO?" menu window... | ||
31825 | CALL 34982 | ... | ||
31828 | LD HL,41899 | Point HL at "WHERE TO ?" text... | ||
31831 | CALL 34762 | ...and print to screen | ||
31834 | POP BC | Restore BC (C = number of available destinations) | ||
Print list of available destinations as options in "WHERE TO ?" window
|
||||
31835 | LD HL,23436 | Point HL at start of list of currently available destinations | ||
31838 | LD B,C | Load B with number of available destinations | ||
31839 | LD A,(HL) | Load location index from current position in list of currently available destinations | ||
31840 | PUSH HL | Store HL (current position in list of currently available destinations) | ||
31841 | PUSH BC | Store BC (B = remaining number of available destinations) | ||
31842 | PUSH AF | Store AF (A = index of a location read from destinations list) | ||
31843 | LD HL,38351 | Move cursor to start of next character row within window, then right by two characters... | ||
31846 | CALL 34762 | ... | ||
31849 | POP AF | Restore AF (A = index of a location read from destinations list) | ||
31850 | LD B,A | Load B with location index... | ||
31851 | CALL 54261 | ...and point HL at that location's name | ||
31854 | CALL 34762 | Print the location's name in the menu window | ||
31857 | POP BC | Restore BC (B = remaining number of available destinations) | ||
31858 | POP HL | Restore HL (current position in list of currently available destinations) | ||
31859 | INC HL | Advance HL to next location in list | ||
31860 | DJNZ 31839 | Loop back to 31839 to print next name in list | ||
31862 | CALL 35296 | Process keyboard / joystick input on a menu and load A with selected item index | ||
31865 | LD C,A | Load BC with index of selected destination... | ||
31866 | LD B,0 | ... | ||
31868 | LD HL,23436 | Point HL at start of list of currently available destinations... | ||
31871 | ADD HL,BC | ...and advance to entry for selected destination | ||
31872 | LD A,(HL) | Store this location index as operand of instruction at 32034... | ||
31873 | LD (32035),A | ... | ||
31876 | LD B,A | Load B with location's index | ||
31877 | CALL 54261 | Point HL at the location's name | ||
31880 | EX DE,HL | Switch HL and DE (DE now points to location's name)... | ||
31881 | CALL 54283 | ...and print in command summary window at top of screen | ||
31884 | LD DE,38233 | Point DE at "AT"... | ||
31887 | CALL 54283 | ...and print in command summary window at top of screen | ||
31890 | LD DE,37291 | Point DE at y-coordinate of top edge of window 25... | ||
31893 | LD A,14 | ...and set this window's height to 14... | ||
31895 | CALL 33782 | ... | ||
31898 | LD A,2 | Set initial (and minimum allowed) y-coordinate of hand cursor to 2 for window 25... | ||
31900 | LD (37295),A | ... | ||
31903 | LD A,25 | Draw menu window 25... | ||
31905 | CALL 34982 | ... | ||
31908 | LD HL,41928 | Point HL at "MOVE STARSHIP" speed selection menu heading text... | ||
31911 | CALL 34762 | ...and print to screen | ||
31914 | LD HL,41943 | Point HL at "MOVE STARSHIP" speed selection menu options text... | ||
31917 | CALL 34762 | ...and print to screen | ||
31920 | CALL 35296 | Process keyboard / joystick input on a menu and load A with selected item index | ||
31923 | LD (23484),A | Store selected speed index at 23484 | ||
31926 | LD HL,41984 | Point HL at start of list of speed strings | ||
31929 | LD B,A | Load B with index of selected speed | ||
31930 | CALL 54269 | Advance HL to B-th entry in list of speed strings | ||
31933 | EX DE,HL | Switch HE and DE (DE now points to speed string for selected speed)... | ||
31934 | CALL 54283 | ...and print in command summary window at top of screen | ||
31937 | CALL 55115 | Display execute / reject command window and return here if execute chosen, else exit to main game loop | ||
31940 | CALL 33788 | If Gordon and Sarab are both asleep then reset zero flag, otherwise increase their happiness by five if not | ||
31943 | JP NZ,55291 | If zero flag is reset then display "GORDON AND SARAB ARE BOTH ASLEEP" window (12) and return to game | ||
31946 | LD A,27 | If Magic Knight is wearing the Gas Mask (27)... | ||
31948 | CALL 33640 | ... | ||
31951 | JP Z,55327 | ...then display "GORDON AND SARAB CANNOT UNDERSTAND YOU" window (12) and return to game | ||
31954 | CALL 36415 | Reset all stars to point of origin and generate new velocities and movement data | ||
31957 | LD A,189 | Set Current Starship Location in " LOCATION : [name of Current Starship Location]" text at 38298... | ||
31959 | LD (38307),A | ...to "IN TRANSIT" (189) | ||
31962 | CALL 27765 | Draw Magic Knight's current room, draw objects and characters and initialise room-specific data | ||
31965 | CALL 32065 | Scroll viewscreen content down 24 pixel rows then display acceleration / deceleration effect (i.e. leave orbit) | ||
31968 | LD A,(23484) | Load A with selected speed index... | ||
31971 | NEG | ...multiply by minus one... | ||
31973 | ADD A,10 | ...and add 10 to give a delay constant between 1 (fastest) to 10 (slowest) | ||
31975 | LD (36350),A | Update operand to instruction at 36349 to hold delay constant value | ||
31978 | LD A,(23484) | Load A with selected speed index plus one... | ||
31981 | INC A | ... | ||
31982 | ADD A,A | Load E with this value multiplied by eight... | ||
31983 | ADD A,A | ... | ||
31984 | ADD A,A | ... | ||
31985 | LD E,A | ... | ||
31986 | LD BC,1 | Load B with zero and C (remaining number of blocks of 256 timesteps to process) with 1 | ||
31989 | PUSH BC | Store BC (B = remaining number of timesteps to process) | ||
31990 | PUSH DE | Store DE (E = eight times [speed index + 1]) | ||
31991 | CALL 36321 | Advance positions of stars on viewscreen by one timestep | ||
31994 | POP DE | Restore DE (E = eight times [speed index + 1]) | ||
31995 | LD A,(23435) | Load A with fraction remaining of current unit of star drive fuel | ||
31998 | SUB E | Subtract E (eight times [speed index + 1])... | ||
31999 | LD (23435),A | ...and store | ||
32002 | JR NC,32017 | If unit of star drive fuel was not completely depleted then skip ahead to 32017 | ||
32004 | LD A,(25013) | Decrease USS Pisces' star drive fuel by one... | ||
32007 | DEC A | ... | ||
32008 | LD (25013),A | ... | ||
32011 | LD HL,44953 | Point HL at "YOU RAN OUT OF STAR DRIVE FUEL..." text | ||
32014 | JP Z,55685 | If no star drive fuel remains then jump to "game over" window routine and return to control selection menu | ||
32017 | POP BC | Restore BC (B = remaining number of timesteps to process) | ||
32018 | DJNZ 31989 | Decrease remaining number of timesteps to process and loop back to 31989 if not zero | ||
32020 | DEC C | Decrease C (remaining number of blocks of 256 timesteps to process) | ||
32021 | JR NZ,31989 | If C is not zero (i.e. there are more blocks of timesteps to process) then loop back to 31989 | ||
32023 | CALL 35782 | Play "USS Pisces has arrived" sound | ||
32026 | CALL 32124 | Display acceleration / deceleration effect then scroll viewscreen content up 24 pixel rows (i.e. enter orbit) | ||
32029 | LD A,28 | Set Current Starship Location in " LOCATION : [name of Current Starship Location]" text at 38298... | ||
32031 | LD (38307),A | ...to the name of the Current Starship Location (28) | ||
32034 | LD A,0 | Load A with selected destination location index... | ||
32036 | LD (23700),A | ...and set this as the USS Pisces' current location | ||
32039 | CP 5 | If A is 5 (i.e. location is Starbase 1)... | ||
32041 | CALL Z,32055 | ...then set unknown flag and set A to zero | ||
32044 | CP 27 | If A is 27 (location index of Starbase 2 in 128k version)... (see trivia) | ||
32046 | CALL Z,32055 | ...then set unknown flag and set A to zero | ||
32049 | CALL 27703 | Draw top in-game window | ||
32052 | JP 55277 | Display "THE STARSHIP HAS ARRIVED AT [Starship Location]" window (12) and return to game |
Prev: 31537 | Up: Map | Next: 32055 |