World Explorer: goals and missions
What the campaign asks of the player, how the work is offered, and what it pays. The story itself, chapter by chapter, and the planned career lines and reputation tiers are in scenario/; this file says what the code does today. The arcade has none of this: its one goal is to clear the eight worlds (see balance.md).
The shape of a job
Every job is a contract: a title, a world, a reward in salvage, and one or
more stages done in order. A stage has a kind, a world and an amount
(stage() in src/js/operations.js).
| Kind | Done when |
|---|---|
| scan | you guard the survey robot at a beacon for the amount in seconds |
| mining | your drones drill the amount in units |
| courier | you dock at the stage's world station; carried from another world, a wing of raiders intercepts it once in each world you enter |
| hunt | you destroy the amount of raiders in that world |
| defend | you hold within 450 m of the relay for the amount in seconds; leaving loses progress slowly |
| recover | you clear the ambush, then hold within 150 m for the amount in seconds |
| elite | you destroy the marked commander |
| boss | you destroy the world's flagship at the combat zone |
| escort | the freighter finishes its cargo run (load at a mining field, unload at the station) |
| trade | you sell the amount of a good at that world's station, from your own hold (what you bought at that station does not count); intercepted like a courier when carried from another world |
| lure | the Leviathan falls into a black hole's core |
| survey | you fly within 120 m of three beacons (a one-stage contract) |
| race | you fly the course's rings in order through the last, the finish, in any place (see Ring races) |
- Progress counts only in the stage's world (
mission_event). A delivery (courier or trade) starts where the stage before it ended, or where the contract was taken; in every other world it enters, its own included,update_interceptssends 2 + level (at most 4) of that world's raiders once, four seconds after arrival, between you and the station. A finished stage starts the next; the last one makes the contract ready, and you collect the reward by docking at any station and pressing Collect reward. - You carry at most three contracts, and one story chapter at a time
(
guide_base_accept_contractinsrc/js/station.js). Contracts have no timer. Abandoning one drops it with no cost. - Following a contract (Follow on its card) points the guide at its current stage; the HUD shows the stage and its progress.
- The text the guide shows for each kind is
stage_descriptioninsrc/js/operations.js.
Story chapters
Sixteen chapters, offered one after another at the station's jobs board as
"Story n / 16" while no chapter is carried. Claiming one moves the story on
(campaign.story); after the last, the game says the story is complete and
contracts go on.
- Chapter 1 is written as a file,
src/missions/01-a-pilot-earns-their-wings.md(306). A chapter file takes its place by number (src/js/missions.js); the file format is in src/missions/README.md. - Chapters 2 to 8 (act I) are
storyinsrc/js/worlds.jswith their stages inexpanded_story_stages,src/js/operations.js; their rewards are the listed reward × 1.8: 522, 540, 774, 1170, 1170, 1800, 2880. - Chapters 9 to 16 (act II) are
second_actinsrc/js/operations.js: 1200, 1450, 1700, 1850, 2150, 2350, 2700, 3400. Their raiders count as level 2, and every world fights seven tiers past its own by then (the story's front, in balance.md). - A chapter ends where the next one starts, or on the way to it. A delivery to another world is kept only where the story moves you that way, and it is intercepted on the way; no chapter sends you back where you came from.
- The titles, stages and story text are in scenario/chapters.md.
Side contracts at a station
What a station offers depends on its world (offered_jobs and
world_contracts in src/js/operations.js). id is the world's index
(Haven 0 to Eclipse 7), level is 1 + one for every 8 contracts completed,
at most 12, and n = level − 1.
| Contract | Stages | Open from |
|---|---|---|
| Two of the world's own | in the table below | always |
| Sealed dispatch to a neighbour | courier to it (intercepted), defend 40 + 5n there | always |
| Supply run: a good to a neighbour | trade: sell 5 + level (at most 12) of this world's cheapest good at the neighbour that pays most for it (intercepted); offered when that pays at least 8 more | always |
| Ring race: the world's sprint, slalom or loop | race: 5 to 7 rings against 3 or 4 rivals (Ring races) | always, in every world |
| Commander bounty | scan 16 + n, hunt 6 + n, elite | rank Pathfinder |
| Frontier expedition n | scan 22 + n here; defend 70 + 6n, elite, recover 20 in a neighbour | rank Ace |
| Side missions | from their file | in their world, until done |
Each world's own two, in its terms (its raiders, its resource, its rules):
| World | Contract | Stages |
|---|---|---|
| Haven | Clear the patrol lanes | scan 12 + n, hunt 6 + n, recover 10 |
| Haven | Haven iron for the Anchorage | mining 8 + 2n, escort |
| Verdant | Prune the thorn nest | scan 14 + n, hunt 8 + n, elite |
| Verdant | Spore resin harvest | mining 8 + 2n, defend 40 + 5n |
| Dustfall | Refinery quota | mining 10 + 2n, trade titanium sand 6 + n at Dustfall |
| Dustfall | Marauder launch site | scan 14 + n, recover 12, elite |
| Ion Reach | Storm cartography | scan 14 + n, defend 45 + 5n, recover 12 |
| Ion Reach | Silence the Volt jammers | hunt 8 + n, elite |
| Obsidian | Break the Dominion picket | hunt 6 + n, elite, recover 12 |
| Obsidian | Heavy metals for the Bastion | mining 10 + 2n, defend 50 + 5n |
| Cryosphere | Lost on the ice | scan 14 + n, recover 12, escort |
| Cryosphere | Helium-3 harvest | mining 10 + 2n, defend 50 + 5n |
| Nova Forge | Quench the furnace raiders | scan 14 + n, hunt 8 + n, elite |
| Nova Forge | Plasma for the Foundry | mining 10 + 2n, escort |
| Eclipse | Signals from the dark | scan 16 + n, defend 50 + 5n, recover 15 |
| Eclipse | Void matter | mining 10 + 2n, elite |
- A neighbour is a linked world you have reached, the next of them each time
a contract is taken (
campaign.board); a link you have not reached is used only when none is. So no contract sends you where your ship cannot go yet. - A contract pays for the minutes its stages take (
stage_minutes, timed by playing them, plus 0.6 a jump and 0.5 for the interception of a delivery to another world): minutes × 105 × (1 + 0.2·id) × (1 + 0.1·n), × 1.4 for a bounty and × 1.7 for an expedition, to the nearest 10 (contract_reward). - A completed expedition opens the next one (
campaign.expedition). - Side missions are
src/missions/side-<name>.md; today there is one, Lure the Leviathan in Verdant (900). It needs a black hole, and Haven has none. - A higher level makes contract raiders tougher (+12% hull a level past the first, up to ten levels), sends more raiders to a recover ambush (3 + level, at most 6), to each defend wave (every 12 s, a hold's wave size below plus level − 1, at most 2 more) and to an interception (2 + level, at most 4).
- A stage that waits for raiders brings them in growing waves (
hold_waves_updateinsrc/js/navigation.js): a hunt, or a mining stage while your drones drill, out of the station's shelter. The first wave comes 5 s after you settle, then one every 14 s, from one side and 1100 m out, past your guns' reach, so it arrives together: 2 + tier / 3 raiders (rounded down; the patrol's count and one more), one more each wave, three more at most (hold_wave_size). The patrols rest meanwhile. A defend stage's waves grow the same way with the seconds held. Before, a hunt waited for the patrols: in Haven one or two raiders every 11 s, a minute or more for a hunt of 6. - What you guard grows with the raiders' hits (+8% a world past Haven, +12% a level past the first): the survey robot (80 hull in Haven) and the convoy's freighter (300). A robot scans at half speed with a raider close; a lost one sets the scan back a third.
- Halfway through a recover hold the ambush calls 2 to 4 reinforcements; the hold waits until they are cleared.
- A mining stage whose drones are all lost sends the guide to the station to buy new ones (MODULES).
Ring races
A contract at every station, in every world (race_offer in src/js/race.js):
a course of rings off the station and rivals to beat through it.
- The course: a start line 1.5 to 2 km from the station, then 7 + ⌊tier/2⌋ rings (7 in Haven to 10 in Eclipse; five, 15 s for a good pilot, was too short a race), each 1.15 to 1.9 km from the one before and turned 30° to 75° off its line, mostly to the other side, so the line between them needs steering; it is laid out among the rocks of the fields nearest the station where they are. A ring is 120 m across its radius in Haven, 5 m less a tier (85 m in Eclipse). Three courses a world (sprint, slalom, loop), one offered at a time by the board. Each keeps clear of everything R or a ring acts on (placement.md). A ring a drifting rock comes into (Verdant's current) moves off it.
- The rivals: 3 in Haven and Verdant, 4 from Dustfall on, from the
slowest to the best, each with a name, a hull from the ships' drawings in
its colour. A rival's cruise is
285 m/s × the world's speed × (1 + 0.06 tier + 0.01 (level − 1)) ×
(0.9 + 0.3 skill), its turn and thrust the world's own scaled by its
skill; it aims at its own line through each ring, slows for the turn after
it as much as its thrust needs, lights a turbo of 2 to 2.8 × its cruise for
1.5 to 4 s on a long straight, steers round rocks, bumps you and the others,
and can miss a ring and loop back for it. When rocks lie across its way to
the next ring (a mining field across the leg) it goes round them by a point
beside the first one, planned again each second (
race_plan); it keeps to its own lane through a ring (its side of the start line) and steers past a racer just ahead rather than into its tail; it takes a bend no faster than its thrust can turn it within three ring radii (Cryosphere's ice). Rivals never shoot. Raiders may go for them (two raiders in five pick a rival near them over you), and their shots and rams hurt them (120 hull + 25 a tier); a rival with its hull gone is out. Your shots pass through them. - The start: fly into your place on the line (the guide marks it); the
rivals stand in theirs, and the count runs 3, 2, 1 over three lights, then
green. You are held in your place during the count. From the moment you
take your place on the line to the finish no patrol, hunt wave or raid
comes (
race_calm), and a raider within 1.6 km of the course or you turns away, holds its fire and is gone once out of sight (race_keep_off); flying past a start line pauses nothing, and a hunt elsewhere keeps its waves. Only a raider already within 1.1 km of the line when you take your place holds the start, until it is shot or for 20 s of hold at most; then it pulls back. - A world's price of a turbo is waived in a race: from your place on the
line to the finish, Eclipse's turbo costs no pulse and Nova Forge's does
not heat the engine (
dash,race_calm), as the rivals pay neither. A player's log showed it: Normal, 8 of 8 won elsewhere, last twice in Eclipse (80 and 67 s against a par of 34), the pulse gone and no turbo left. - The finish: your place is one more than the rivals over the line before you. The prize is the contract's reward for first at par time × the place's share (1, 0.7, 0.5, 0.35; the last always 0.2) × par ÷ your time (0.75 to 1.25), to the nearest 10. Par is the course at 1.4 × the best rival's cruise, plus 0.6 s a ring. The reward offered is first at par: (0.5 + 0.12 a ring) minutes × the formula below × 1.3. The contract is done then; dock and collect as for any other. The race runs on 25 s for the rivals still out, then the results stay 8 s on the board.
- Forfeit: 2.5 km off the course's line for 6 s (the card counts it down in red), docking, or a jump to another world forfeits; the contract stays, and the start line waits for another try.
- Saves: a race is not saved. A save made mid-race loads with the race called off and the contract as it was before the start; so does a tow after a death.
- On screen: the mission card is the race's (your place, the ring and its distance, the clock), the standings stand in a small board under the minimap, and near the course the minimap shows the course instead of the world.
The Races mode
The main menu's Races (R): ring races alone, at Easy, Normal or Hard (1 2 3),
course after course from Haven (src/js/race_mode.js). Each race is a run of
its own, as the arcade's: nothing is saved, the campaign's save stays as it
was. You fly the Wisp Scout with no modules on every difficulty, so the
difficulty is the rivals and the course. No raider comes, nothing drops, no
radiation burns; the rocks are as in the campaign (unbreakable, a crash above
cruise costs hull, and you can die).
The HUD is the race's: the card (ring, distance, place), the standings, the
minimap (only a map: no OPEN J), the hull and turbo gauges, settings and
pause. What a race has no use for is gone: the quick bar (no supplies,
drones or builds; a route is still set with Ctrl), the pulse gauge (no pulse: Space does nothing, as
it would make you crash-proof for a moment), the inventory (Tab), the
world's threat, the coordinates and the route line in the card's details;
H, K and Tab do nothing. In every ring race, the campaign's too, the view
keeps your ship clear of the HUD's blocks (src/js/race_view.js): it looks
toward the lights during the count, ahead to the bend on a Turbo track, and
where the ship would come under the card, the standings or the bottom panel,
or near the window's edge, the view moves to keep it clear, showing the
space past the world's edge if it must.
| Easy | Normal | Hard | |
|---|---|---|---|
| rivals | 3, skill 0 to 0.45 | 4, skill 0.2 to 0.8 | 4, skill 0.6 to 1 |
| rival cruise | 0.86 × yours × (0.9 + 0.3 skill) | 0.95 × | 1.03 × |
| rings | the world's − 1 (6 in Haven, 9 in Eclipse) | + 1 (8 to 11) | + 3 (10 to 12) |
| legs, turns | 1 ×, gentler (0.8 ×), away from rocks | 1.15 ×, among the rocks | 1.25 ×, sharper (1.2 ×), deep in the rocks |
| ring radius | 18 m wider | the world's | 14 m tighter |
| a good pilot (the bot of the tests) | 17 s in Haven to 30 s | 27 to 44 s | 37 to 67 s (measured while Eclipse's turbo took pulse) |
The rivals' cruise is a share of your ship's in that world, so a world's own
speed moves both alike. Over the line, your place and time show on a banner;
3.5 s later the results: your place, time and par, your crashes on rocks and
the hull they took, the field (times, or the ring a rival is on); then Race
again (Enter), Next course (N, Eclipse goes back to Haven) or the menu (Esc).
A wreck or a forfeit shows the same results, you last. The play log records
each race (play-log.md, race with mode: race).
Turbo
The row's second kind (T switches; src/js/race_rail.js): the same course
as a track, a smooth line through the start and the rings, and the ship
rides it by itself. Yours is only the turbo: Shift, a held mouse button or a
finger held anywhere. Off it the ship eases back to cruise; on it, it climbs
to the turbo's speed (3.2 × cruise for the Scout). A bend holds a ship up to
a speed, √(grip × its radius): faster, it slides out, and past the edge it
spins for 0.7 s, a little over half its speed kept, about 1.5 s of a race
(race_spin in the play log; at 2.5 s, the author's log showed one spin
was last place in a field 2 s wide). A dotted line ahead of you shows where
the ship flies in the next 1.6 s with the turbo as you hold it now: too fast
for a bend, it bends out, and a red cross marks where you would spin. The
edges of a bend you are too fast for turn amber, and red 0.35 s before
letting go is too late. The rocks on a track are cleared for the race; a
drifting one passes through. The rivals ride the same track by the same
rules, each letting go before a bend by its nerve.
| Easy | Normal | Hard | |
|---|---|---|---|
| track width | 400 m | 330 m | 270 m |
| grip | 1.25 × | 1 × (cruise holds a 260 m radius) | 0.85 × |
| rivals' turbo | 0.86 × yours | 0.95 × | 1 × |
| rivals' nerve | 0.1 short of the limit more | 0.03 more | 0.03 more |
| a pilot who looks every quarter second (the bot of the tests) | wins by 1.5 to 3 s | first to third, within a second | 0.5 to 3 s behind the best |
| the turbo held all the way | last | last | last |
What a contract pays
On collecting (guide_base_claim_contract in src/js/operations.js and
expedition_base_guide_base_claim_contract in src/js/station.js):
- the reward in salvage, and 10 × the reward in score;
- experience: 28% of the reward + 18 for each stage, toward the pilot rank that licenses ships and guns (ranks in balance.md);
- +1 reputation with the world that issued it. The GOALS tab shows a world as known from 3 and trusted from 8. Reputation changes nothing else yet; the tiers in scenario/README.md are a plan.
Goals
On the station's GOALS tab the player picks one goal; it lays out its steps,
the current step points the guide at its target, steps tick themselves, and
the last pays a bonus (src/js/goals.js). One goal at a time; a goal can be
dropped and picked again.
| Goal | Steps | Bonus |
|---|---|---|
| Explorer | reach every world not yet seen, nearest first; a step names the modules a gate needs | 1500 |
| Prospector | buy a builder drone, build a mining outpost, open a transport line, upgrade the drones to Hauler, build a second outpost, earn 2000 from transports | 1200 |
- Where:
goal_kinds,explorer_steps,prospector_steps;prospector_targetis the 2000. - The same tab shows the pilot's rank and XP, and reputation in the worlds seen.
Trade plans
Not a contract, but a goal the guide follows: TRADE INTEL lists routes by
profit, and Plan sets a buy-here, sell-there route the guide flies
(trade_opportunities, plan_trade in src/js/trade.js).