joost

personal web page

Elite on the MSX1: every mission in full

← back to Elite on the MSX1

The mission system is a small state machine driven almost entirely by hyperspace jumps. This page walks through the engine, the state variables, all four missions with their verbatim briefings, and the cloaking device that is not a mission reward at all.

Addresses are absolute Z80 addresses; CODE.COM loads at 0x0100 (addr = file_offset + 0x100). Disassembly via tools/zdis.py; full decoded text in mission_text.txt.

State variables

Everything the mission engine needs sits in a handful of bytes, all written by the save-commander routine at 0xa5xx, so missions persist across sessions:

AddressRole
0xe93cmission number, the “Mission No.” counter, 0 to 6 (hard cap 6)
0xe93dmission stage = (number − 1) × 16; each mission owns a 16-value sub-stage block
0xe93binter-mission countdown, reset to 0x40 (64) between missions
0xeb66hyperspace jump counter (INC A; AND 7 each jump)
0xeb67mission target system (where you must fly)
0xefa2current system number
0xe90adocked / at-station flag (gates mission steps)
0xefa3mid-mission countdown/counter
0xf785mission flag A (0x917a, 0x91eb)
0xf77emission flag B, set to 2 (0x18ec, 0x91e4)

How a mission is offered

The post-hyperspace-arrival dispatcher (0x89d00x8a76) advances the jump counter and, when no mission is active, ticks down the inter-mission countdown:

0xeb66 = (0xeb66 + 1) AND 7           ; advance jump counter
...
if 0xeb66 != 0 and 0xe93d == 0:       ; no mission currently active
    if --0xe93b == 0:                 ; ~64-jump countdown expires
        0xe93b = 64                   ; re-arm
        call 0x908c                   ; ---> OFFER next mission

The offer routine at 0x908c bumps the mission number, caps it at 6, and computes the stage block:

LD  A,(0xe93c)        ; current mission number
CP  6 : RET z         ; 6 missions max, then done forever
INC A                 ; next mission
LD  (0xe93c),A
DEC A / ADD A,A x4    ; stage = (number − 1) * 16
LD  (0xe93d),A

There is no combat-rank gate anywhere in the offer path, which is a real departure from the BBC original (which required Competent rank first). Only one mission is active at a time, and accept/refuse is a Y keypress (CP 0x59 at 0x90af).

How a mission progresses

Each mission is a state machine keyed on the stage byte 0xe93d. The recurring gate (0x9190, 0x91aa) requires you to be docked in the mission’s specific target system:

LD A,(0xe90a) : OR A  : RET z          ; must be docked / at station
LD A,(0xeb67) : CP (0xefa2) : RET nz   ; must be in the mission TARGET system
INC (0xe93d)                            ; advance the stage
<print next briefing message>

The printed “Mission No. n” is literally the high nibble of the stage byte (0x90e2: LD A,(0xe93d); RRA x4; AND 15), so each mission owns a 0xN00xNF block and the block number is the order. Observed stage constants: 0x12/0x14/0x18 (mission 2), 0x20/0x21 (mission 3), 0x30/0x33 (mission 4), 0x40 (mission 5), 0x51 (mission 6).

Mission order and handlers

The docked dispatcher at 0x1896 routes each stage to its briefing and reward handler, which nails the mapping:

OrderStage blockMissionBrief handlerComplete / reward
10x10–0x1FThe Constrictor0x9120 -> msg 0x94a60x19 -> 0x91f0: 10,000 cr
20x20–0x2FThargoid documents0x9120 -> msg 0x96fc0x21 -> 0x91db: naval energy unit
30x30–0x3FSupernova rescue0x31 -> 0x909f (msg 0x9274)0x34 -> 0x90fb: precious gems
40x40–0x4F(empty, no handler in this build)nonenone
50x50–0x5FThargoid invasion0x50 -> 0x9220 (msg 0x9997)0x53 -> 0x920f: ECM-jammer device

Slot 4 has no handler, so in play the missions surface as No. 1 -> No. 2 -> No. 3 -> No. 5. Stage 0x00 is the “no mission active” state the offer gate keys off. The supernova briefing (0x909f) is also reachable from non-dispatcher sites (0x2457/0x3d61/0x48ac), so it can fire as a semi-random arrival event too.

The four missions

#MissionThe jobHow it advancesReward
1The ConstrictorA navy prototype has been stolen; hunt it down and destroy it, chasing it across galactic jumpsDock for the briefing, then destroy the ship10,000 credits
2Thargoid documentsCourier captured Thargoid battleship blueprints to the main naval baseDock at the target naval baseA naval energy unit, fitted to your Cobra
3Supernova rescueEvacuate refugees before the system’s sun goes nova, which forces you to dump your cargoAccept with Y, then reach a safe systemPrecious gems
5Thargoid invasionA nearby system’s station is under Thargoid attack; destroy the station, do not dockArrive and destroy the stationA salvaged Thargoid device that jams ECM

Verbatim briefings

The text block starts at 0x9247 (“Mission No.”). Decoded straight from the binary (| marks a high-bit end-of-word, control tokens stripped):

Supernova rescue (0x9274):

Our sun is going supernova! You are advised to hyper-space out of this system immediately! Will you help us

(accept) I’m afraid that we’ve had to dump any cargo you had to get all of us refugees in. If you just drop us off at the nearest system, that’ll be fine

(complete) TASK COMPLETE - CONGRATULATIONS. Thanks for saving us. Please accept some precious gems

(refuse) We hope you die a horribly long lingering death at the hands of a slimey green lobstoid if you’re not blown to bits by our sun!

The Constrictor (0x94a6):

A prototype of the new military ship, the CONSTRICTOR, has been stolen from the navy research centre at [system]. Due to the capabilities of this ship, it must be destroyed before falling into enemy hands.

(en route) Intelligence reports that the Constrictor made a galactic jump out of this system a while ago. … after causing havoc, the Constrictor left this system, destination is system of [system].

(reward) The Navy are forever in your debt, oh mighty trader. Please accept a reward for your trouble of 10,000 credits.

Thargoid documents (0x96fc):

The navy has managed to obtain blueprints of a Thargoid battle ship. These documents need to be taken to the main naval base at [system]. The enemy is unaware that we have these documents, so the journey should be without any unfriendly encounters.

(reward) … As a reward, we have fitted your ship with naval energy unit. P.S. sorry about the security leak to the Thargoids!

Thargoid invasion (0x9997):

Intelligence reports that a nearby system has been invaded by Thargoid ships and that the space station is under attack. We suggest that you destroy the space station and don’t try to dock.

(reward) Thanks for destroying the Thargoid base. A new device was salvaged from a Thargoid ship which we have fitted to your Cobra. The device appears to jam ECM broad[cast].

The cloaking device

The cloaking device is the one piece of kit you cannot buy and are never handed as a briefing reward. It is acquired by scooping, matching player memory:

AddressWhat it does
0xf784“owns cloaking device” flag; checked at 0x1b13 before the cloak toggle key works
0xef9fcloak active state (on/off toggle, CPL at 0x1b1d)
0x8bbcthe only grant site: LD A,1 : LD (0xf784),A, then prints “Cloaking device” (0x8c85)
0xf77bgate flag shared with the fuel-scoop handler (0x15ad)
0xf7ecspecial-object flag; set to 3 when the unique mission ship spawns (0x2a83), flips negative when destroyed, becoming scoopable

The mechanic: destroy the unique mission ship, it leaves a scoopable drop, fuel-scoop it, and 0x8bbc grants the cloak. None of the four briefing rewards is the cloak (they are 10,000 credits, a naval energy unit, precious gems, and an ECM-jamming device), which is why it feels like folklore. The unique mission ship carries ship-type 0x41, its own state machine (0xf7e7), and geometry LDIR’d from 0x3429. The destroy-a-ship objective belongs to the Constrictor (the Thargoid missions target a station, which is not scoopable), so the Constrictor is the carrier: a strong inference, with the scoop mechanic itself fully confirmed.

How it compares to BBC Micro Elite

The original BBC Micro Elite shipped with essentially two missions: hunt the Constrictor, then courier the captured Thargoid documents. This MSX build keeps both, in the same order, then extends the sequence with the supernova rescue and the Thargoid invasion, and adds the scoopable cloaking device on top. That set is closer to the later console-era ports than to the 1984 original.

The real mechanical difference is the trigger. The BBC game gated its first mission behind combat rank and galactic progress; this port drops the rank gate entirely and paces everything by the 64-jump countdown at 0xe93b. The rank thresholds themselves are untouched and identical to the BBC (see the ranks page); missions here simply never ask what rank you are.