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.
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:
| Address | Role |
|---|---|
0xe93c | mission number, the “Mission No.” counter, 0 to 6 (hard cap 6) |
0xe93d | mission stage = (number − 1) × 16; each mission owns a 16-value sub-stage block |
0xe93b | inter-mission countdown, reset to 0x40 (64) between missions |
0xeb66 | hyperspace jump counter (INC A; AND 7 each jump) |
0xeb67 | mission target system (where you must fly) |
0xefa2 | current system number |
0xe90a | docked / at-station flag (gates mission steps) |
0xefa3 | mid-mission countdown/counter |
0xf785 | mission flag A (0x917a, 0x91eb) |
0xf77e | mission flag B, set to 2 (0x18ec, 0x91e4) |
The post-hyperspace-arrival dispatcher (0x89d0–0x8a76) 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).
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 0xN0–0xNF 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).
The docked dispatcher at 0x1896 routes each stage to its briefing and reward handler,
which nails the mapping:
| Order | Stage block | Mission | Brief handler | Complete / reward |
|---|---|---|---|---|
| 1 | 0x10–0x1F | The Constrictor | 0x9120 -> msg 0x94a6 | 0x19 -> 0x91f0: 10,000 cr |
| 2 | 0x20–0x2F | Thargoid documents | 0x9120 -> msg 0x96fc | 0x21 -> 0x91db: naval energy unit |
| 3 | 0x30–0x3F | Supernova rescue | 0x31 -> 0x909f (msg 0x9274) | 0x34 -> 0x90fb: precious gems |
| 4 | 0x40–0x4F | (empty, no handler in this build) | none | none |
| 5 | 0x50–0x5F | Thargoid invasion | 0x50 -> 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.
| # | Mission | The job | How it advances | Reward |
|---|---|---|---|---|
| 1 | The Constrictor | A navy prototype has been stolen; hunt it down and destroy it, chasing it across galactic jumps | Dock for the briefing, then destroy the ship | 10,000 credits |
| 2 | Thargoid documents | Courier captured Thargoid battleship blueprints to the main naval base | Dock at the target naval base | A naval energy unit, fitted to your Cobra |
| 3 | Supernova rescue | Evacuate refugees before the system’s sun goes nova, which forces you to dump your cargo | Accept with Y, then reach a safe system | Precious gems |
| 5 | Thargoid invasion | A nearby system’s station is under Thargoid attack; destroy the station, do not dock | Arrive and destroy the station | A salvaged Thargoid device that jams ECM |
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 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:
| Address | What it does |
|---|---|
0xf784 | “owns cloaking device” flag; checked at 0x1b13 before the cloak toggle key works |
0xef9f | cloak active state (on/off toggle, CPL at 0x1b1d) |
0x8bbc | the only grant site: LD A,1 : LD (0xf784),A, then prints “Cloaking device” (0x8c85) |
0xf77b | gate flag shared with the fuel-scoop handler (0x15ad) |
0xf7ec | special-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.
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.