HARROW REACH Home Manual Assets

Harrow Reach · production brief

Asset Brief

Everything this game needs modelled, drawn, animated or recorded, described closely enough to produce without reading the source. Every identifier below is real, taken from assets/data/*.ron; every dimension comes from the numbers the simulation already uses. Assets that do not match those numbers look wrong in ways that are hard to diagnose — a ship modelled at twice its hit radius appears to absorb shots that visibly missed.

Engine
Bevy 0.19
Forward axis
−Z
Units
Metres
Hulls
3
Modules
14
Systems
2
P0 items
14

01How to use this

Each entry gives an id, a brief, and the constraints that make it fit. Feed a single entry to an image or model generator; do not feed the whole document at once, because the constraints are per-asset and a generator will average them.

A workable prompt is the brief, plus the art direction in §03, plus the faction livery in §04 if the asset belongs to one. The constraints are for whoever wires it in, not for the generator.

Priority

P0The game is visibly incomplete without it. Ships, stations, the HUD.
P1The game reads as unfinished without it. Effects, icons, core audio.
P2Polish. Music, ambience, faction logos, decals.

02Technical contract

EngineBevy 0.19, client only — the server never loads an asset
ModelsglTF 2.0 binary (.glb), one file per object, Y-up, metres
TexturesPNG, power-of-two; 2048² for hero assets, 1024² otherwise
MaterialsPBR: base colour, metallic-roughness, normal, emissive
AudioOGG Vorbis at 48 kHz — mono for positional sources, stereo for music
InterfacePNG with alpha, or SVG for anything that scales
Colour spaceBase colour and emissive sRGB; normal, metallic and roughness linear
The one convention that will break everything

−Z is forward, +Y is up, +X is right. This is what shared/src/sim.rs steers with. A model authored nose-along-+Z flies backwards. The current placeholder rotates a cone −90° about X to point it down −Z; a properly authored asset should need no rotation at all.

Origin at the centre of mass — for a ship, roughly the centre of the hull, not the nose. The ship rotates about its origin, so an off-centre origin makes the hull swing rather than turn.

Scale

Ships are sized by hit_radius, the radius of the sphere weapons test against. A model must fit inside its hit sphere — anything outside it can be shot through.

Hullhit_radiusTarget lengthTarget wingspan
kestrel11 m18–21 m12–15 m
bulwark15 m24–28 m16–20 m
drone_hauler24 m40–46 m20–26 m
carrack60 m105–115 m60–80 m

ShipClass.visual_scale is a multiplier on the client's placeholder model (a primitive assembly about 4 m long), sent at login since M29 so a cruiser reads as one: carrack is 30, drone_hauler 2.2, the fighters 1. Author to the table above and drop it. A model whose true size is a data-file multiplier is a model nobody can inspect.

How the first models are wired in (M35). The generated set does not meet this contract yet: each file is normalised to about 1 m and a hull's nose points along −X. The client turns hulls −90° about Y, measures each file's furthest vertex and scales it to the placeholder it replaces, so ships still draw at placeholder size. Files are found by id (ships/<class>, stations/<base>, structures/<kind>, props/…); a missing file leaves the placeholder.

Polygon budgets

Interest management replicates up to 24 ships at once, so a busy station means two dozen hulls and their effects on screen together.

ClassTrianglesNotes
Fighter hull8k–15kOne LOD at 30% for beyond 2 km
Freighter hull15k–25k
Station40k–80kHero asset — seen from 600 m and closer
Planet2kA sphere with a very good texture
Jump gate15k
Asteroid300–1,500Six variants, instanced hundreds of times
Container500

Naming

<category>/<id>.<ext>, using the id from the data files verbatim: ships/kestrel.glb, icons/commodity/iron_ore.png, audio/weapon/pulse_1_fire.ogg. The ids are the join between this document and the code; renaming one breaks that join silently.

03Art direction

The reference is Freelancer (2003), not Elite Dangerous.

Hulls are readable at a glance and slightly stylised: clear silhouettes, flat panelled surfaces, visible engine glow, colour that says who built the thing. Not gritty photorealism, not cartoon. A player should be able to name a ship class from its outline at 2 km.

Space is dark and coloured. The clear colour is very nearly black with a blue cast. The key light is warm white at a low angle; ambient is cool and dim. That contrast is deliberate — it makes hulls read as lit objects in a dark place rather than as flat sprites.

Palette

Taken from the code, so the world and the interface agree.

Space
#02030A
Key light
#FFF5E0
Ambient
#8C9ED9
Hull, own
#9EA8B8
Hull, others
#6B809E
Trim, own
#BF5926
Trim, others
#408CBF
Engine glow
#66B2FF
Tracer
#FFD966
HUD text
#9EDBB8
Station text
#EBD69E
Alert / lead
#FF735A
Asteroid rock
#4D4742
Planet surface
#268C59
The one rule

Emissive is information. Anything that glows in this game means something: engines are thrust, tracers are damage in flight, station lights are a place you can dock. Do not add decorative glow to hull panels — it makes the things that matter harder to see.

04Faction identity

Four factions. Each needs a livery, a logo that reads at 32 px, and a structure palette.

reach_compact The Reach Compact P2

The established power: industrial, bureaucratic, prosperous. White and navy over brushed steel; clean lines, everything stencilled with registration numbers. Logo: a stylised five-pointed star inside a ring, #1F3A6E on white. Their station is Halden — big, lit, obviously expensive to run.

wardens Compact Wardens P2

The Compact's enforcement arm, and a separate faction. Same hull shapes, different paint: white with a broad #F2B705 amber stripe along the flank and flashing amber running lights. Logo: the Compact star behind a shield. It must read at a glance as authority — a pilot should know from the silhouette and the stripe that shooting this is a decision.

traders_guild Traders Guild P2

Merchants, not soldiers. Worn olive and cream, heavy container hardpoints, mismatched replacement panels — working ships repaired badly for twenty years. Logo: a pair of scales over a cargo pod, #7A6A3F.

cinder_clans The Cinder Clans P2

Pirates, and the owners of Kessler Yard. Everything scavenged: exposed plating, asymmetric welded-on armour, no two panels the same shade of rust and charcoal. Deep red running lights instead of white. Logo: a broken ring, hand-painted rather than stencilled, #8C2020. Their outpost should look like a station somebody else built and they took.

05Ships

Three hulls, each flown by players and NPCs alike — an NPC is a ShipInput producer, not a different kind of object.

Hardpoint offsets are exact, in metres, in hull-local space, from assets/data/ships.ron. They are where muzzle flashes, mining beams and engine effects attach. Model the corresponding hardware at those points or the effects will float. The offsets are given at the placeholder's ~5 m scale: multiply by roughly four when authoring at full size, and keep the arrangement.

kestrel Kestrel P0

Class
LightFighter
Top speed
90 m/s
Hold
30 m³
Hit radius
11 m

The starter hull and the most-seen object in the game. A compact single-seat interceptor around 20 m long: forward-swept wings, a canopy set well forward, two engine bells aft. It should look cheap and fast — a hull somebody could afford as their first ship. Panel lines flat and functional, no ornament. The canopy should be transparent enough to imply a pilot without one being modelled.

SlotKindSizeFittedOffset (x, y, z)
gun_lGun1pulse_1(−1.2, −0.1, −0.6)
gun_rGun1pulse_1(1.2, −0.1, −0.6)
disruptorEWar1disruptor_1(0.0, −0.5, −0.4)
shieldShield1—(0.0, 0.0, 0.0)
cmCountermeasure1—(0.0, −0.3, 0.8)
engineThruster1—(0.0, 0.0, 1.9)
rigRig1—(0.0, 0.2, 0.4)

Guns just outboard and slightly below the nose, disruptor under the chin, countermeasure launcher aft-ventral. Two thruster bells at approximately (±0.45, 0, +1.9), as separately named nodes so the engine glow can attach and scale with throttle.

bulwark Bulwark P0

Class
HeavyFighter
Top speed
78 m/s
Hold
60 m³
Hit radius
15 m

The gunship, and what Compact Wardens fly. Broad-shouldered and armoured, about 26 m. Where the Kestrel is swept and thin, this is blocky and layered: bolted-on plates, a heavier nose housing the centre cannon, twin engines set wide. It should look like it can take a beating — visibly thicker than the Kestrel at the same distance. It also has to wear the police amber stripe well, so keep a long uninterrupted flank surface.

SlotKindSizeFittedOffset (x, y, z)
gun_lGun2pulse_2(−1.8, −0.1, −0.5)
gun_rGun2pulse_2(1.8, −0.1, −0.5)
gun_cGun2cannon_1(0.0, 0.5, −0.9)
missileMissile2missile_1(0.0, −0.5, −0.2)
minerMining1miner_1(0.0, −0.7, −1.0)
shieldShield2—(0.0, 0.0, 0.0)
cmCountermeasure1—(0.0, −0.3, 0.9)
engineThruster2—(0.0, 0.0, 2.1)
rig_aRig2—(−0.6, 0.3, 0.5)
rig_bRig1—(0.6, 0.3, 0.5)

The centre cannon sits above the nose line and the mining laser below it. That vertical separation should be visible — it is how a player tells at a glance whether the thing pointed at them is a gun or a tool.

drone_hauler Drone-class Hauler P0

Class
Freighter
Top speed
55 m/s
Hold
275 m³
Hit radius
24 m

The industrial hull, and what the NPC haulers fly — so it is seen constantly on the Halden–Harrow run. A slab-sided freighter about 44 m long, built around its cargo section: an obvious spine with modular container bays clamped along it, a small crew module forward, four engines aft. The name is Drone-class: it should look semi-automated, few windows, a lot of external machinery. Two turret rings, dorsal and ventral, must be visibly rotatable hardware: since M29 they really do turn, leading the locked target within the hemisphere they face.

SlotKindSizeFittedOffset (x, y, z)
turret_tTurret1turret_1(0.0, 1.4, 0.0)
turret_bTurret1turret_1(0.0, −1.4, 0.0)
miner_lMining1miner_1(−1.6, −0.6, −1.2)
miner_rMining1miner_1(1.6, −0.6, −1.2)
shieldShield2—(0.0, 0.0, 0.0)
rig_aRig2—(0.0, −0.8, −1.0)
rig_bRig2—(0.0, 0.8, −1.0)
rig_cRig1—(0.0, −0.8, 1.0)
engineThruster2—(0.0, 0.0, 2.6)
scannerScanner1—(0.0, 0.9, −1.4)

Three rig mounts are the Hauler's character. It has grid for days and a processor that runs out long before it, so a fully rigged freighter has to choose. Model them as visible external hardpoints along the spine, big enough that a fitted module could plausibly be bolted there.

carrack Carrack-class Cruiser P0

Class
Capital
Top speed
42 m/s
Hold
160 m³
Hit radius
60 m

The capital: 32 000 hull, 9 000 shield, six heavy turrets that aim themselves. Player-flyable (Capital Ships skill, 6 000 000 cr at Halden), and flown by the Wardens in a Drift they hold and the Clans in a Gap they hold. Docks only at stations. About 110 m long, a warship rather than a freighter: a long armoured keel, a raised command tower aft of centre, a broad engine block of six bells. Its silhouette is its six turret barbettes (dorsal fore and aft, ventral fore and aft, one on each flank), each a heavy twin-barrelled mount on a ring that must read as rotating. Compact livery is navy and white with gold trim; the Clan one is the same hull stripped, rust-red and patched.

SlotKindSizeFittedOffset (x, y, z) ×30
turret_dfTurret2turret_2(0.0, 9.0, −18.0)
turret_daTurret2turret_2(0.0, 9.0, 14.0)
turret_vfTurret2turret_2(0.0, −9.0, −18.0)
turret_vaTurret2turret_2(0.0, −9.0, 14.0)
turret_pTurret2turret_2(−14.0, 0.0, 0.0)
turret_sTurret2turret_2(14.0, 0.0, 0.0)
shieldShield2—(0.0, 0.0, 0.0)
rig_aRig2—(0.0, 4.0, 4.0)
rig_bRig2—(0.0, −4.0, 4.0)
engineThruster2—(0.0, 0.0, 30.0)

Per hull, also needed P1

  • LOD1 at ~30% triangles, used past 2 km.
  • A damaged state, or at minimum a material variant with scorching and a blown panel or two. Hull integrity is replicated and shown on the HUD; seeing it would be better.
  • Four liveries as texture variants sharing one mesh.

06The world

halden Halden Station P0

System
Harrow Reach
Position
(0, 0, −3000)
Radius
220 m
Dock within
600 m

The Compact's industrial station: bar, trader, ship dealer, equipment dealer, repair, refinery, manufacturing, market orders. The busiest place in the game and the first thing a new player flies to — it sits 1.8 km straight ahead of the spawn point and the whole approach is spent looking at it.

A central spindle with a habitation ring, flanked by refinery stacks and a manufacturing block with visible gantries and cargo handling. Lit windows in irregular clusters. The docking approach clearly marked with a lit bay mouth and approach strobes on the nearest face. Compact livery: white and navy, clean, expensive, with an enormous stencilled registration. It should read as a place where several hundred people work.

It must have a distinct front. The player always approaches from roughly −Z-ward, and a station that looks the same from every angle gives them nothing to aim at.

drift_relay Drift Relay P1

System
Vell Drift
Position
(1500, 300, 1500)
Radius
180 m
Dock within
520 m

The Traders Guild waystation in null security: bar, trader, repair, refinery. A compact ring with ice-processing tanks on one side and heavy shield plating facing Cinder Hold. Lit like it expects visitors and has had bad ones; Guild amber, used sparingly.

cinder_hold Cinder Hold P1

System
Vell Drift
Position
(−2600, −400, −3800)
Radius
200 m
Dock within
560 m

The Cinder Clans' home: bar, trader, repair, market orders; refuses anyone who has been hunting them. Kessler Yard's bigger, older sibling: a hollowed rock fortified over generations, trophies welded to the outside (hull sections of ships they took, still in their owners' liveries), ember-red light leaking from cracks.

Player structures P1

Two kinds, deployed by players in null security. Currently a 60 m grey mast with an amber ring at its head; stationary, hit radius 28 m, and they must read at several kilometres as built by somebody. warden_relay: a Compact signal mast, clean and regimented, blue-white beacons, the Compact star. clan_beacon: a salvaged reactor with a war-banner welded on, burning, trophies hung from the frame. Each kit (relay_kit, beacon_kit) wants an icon in the commodity set.

kessler_yard Kessler Yard P0

System
Kessler Gap
Position
(600, −200, −2200)
Radius
160 m
Dock within
520 m

The Cinder Clan outpost: bar, trader, repair, refinery, market orders. Low security, no police, and it pays well for what it cannot make. Smaller and meaner than Halden — an asteroid with structures welded onto it, or a captured hull section repurposed as a base. Asymmetric, patched, no two modules matching, deep red running lights. Where Halden looks maintained, this looks held together. One obvious docking slot, badly lit.

harrow Harrow P0

Kind
Planet
Position
(6000, −800, −9000)
Radius
2800 m
Land within
3600 m

Traders Guild. It grows and digs, and imports everything made in orbit. A green-and-ochre habitable world seen from orbit: continents of cultivated land, visible mining scars, a thin atmospheric haze on the limb, a handful of settlement lights on the night side. Needs an 8192×4096 equirectangular albedo, a matching normal, and a cloud layer as a separate slightly larger sphere. Currently a flat #268C59 sphere, which is the single biggest visual gap in the game.

Jump gates P0

Two, one per system, each 500 m radius — a ring you fly into, not a door. Harrow Reach's is at (−5200, 300, −1400); Kessler Gap's at (0, 0, 2600).

A massive open ring with four or six anchor pylons, inactive by default, the interior holding a faint distortion that flares when a ship jumps. It should be visible from several kilometres — this is a navigation landmark, and a gate a player cannot find is a system they cannot leave. Include a slowly rotating outer collar so it reads as machinery rather than architecture.

Trade lane rings P1

Three lanes: Halden to the Kessler Gap gate and Halden to Harrow in Harrow Reach, the gate to Kessler Yard in Kessler Gap. Each has an end ring at both ends (enter within 300 m; currently a 120 m torus) and a smaller line ring every kilometre between, all facing along the lane. Currently amber #F2B34D emissive tori.

An end ring is a docking-ring-sized hoop on a short pylon, with a beacon that reads at several kilometres: it is where a pilot lines up. Line rings are lighter versions of the same shape and, in a row, should read as a route at a glance. Rings flashing in sequence as a ship rides past are optional, but that is what tells a pilot the lane is carrying them.

Asteroid fields P1

idSystemCentreRadiusKind
halden_beltHarrow Reach(2400, 200, −4200)900 mAsteroid
gap_deepsKessler Gap(−1800, −300, −3400)1400 mAsteroid
vell_shoalsVell Drift(2800, −600, −2600)1500 mAsteroid

Six to eight asteroid meshes, 300–1,500 triangles each, instanced with random scale and rotation. Irregular, cratered, dusty grey-brown with darker crevices. Two variants should carry visible ore veins — a warmer, faintly metallic streak — because a miner should be able to tell a rock with iron in it from one without, even though the simulation does not yet distinguish them. Add a mined variant with a fresh bright scar, and a dust-and-debris particle layer filling the field volume so flying into a belt feels like entering something rather than crossing a line.

System backdrops P2

Today every system shares one generic starfield (900 unlit dots 40 km out), so arriving somewhere new looks like arriving nowhere. Each system gets its own sky. The look to aim for is deep-space astrophotography: Hubble and Webb nebulae, the Milky Way as long-exposure photographs show it. Not painted sci-fi space with planets and lens flares.

The three must be told apart at a glance from the arrival point. That glance is how a pilot knows a jump worked: warm gold for Harrow Reach, dark brown dust for Kessler Gap, cold blue-violet for Vell Drift.

Technical contract

DeliverableOne equirectangular panorama per system: skybox/<system id>.png
Size8192 × 4096 (2:1). 4096 × 2048 is the floor; it softens visibly
FormatPNG, sRGB, 8 or 16 bit. Dithered: dark gradients band badly in 8 bit
WrapThe left and right edges must meet with no seam
PolesTop and bottom 15% (the zenith and nadir) are pinched by the projection: keep them to plain star field
ConversionThe wiring step converts the panorama to the cubemap Bevy draws (2048 px a face). Do not deliver cube faces

Orientation. The image is the sky seen from inside. The centre of the image is −Z, the direction a pilot faces at the spawn point; a quarter to the right is +X, the left and right edges are +Z (behind), the top row is +Y.

Leave the sun out. The engine draws the system's star so it lines up with the light that shades the ships, at about (u 0.81, v 0.32) of the image: right of centre, a third of the way down. Keep that patch free of bright features, or the sky shows two suns.

Brightness. The HUD is green text drawn straight over the sky, and contacts are small grey hulls. Most of the image should be near-black (sRGB below about 40/255). Nebulae peak around 60–70%. Nothing white bigger than a star. If a screenshot of the HUD over the brightest part is hard to read, it is too bright.

How hard this is

Making a beautiful nebula image is easy for any current image model. The hard part is a seamless, full-sphere image at 8k. Single-image models (GPT Image, Midjourney, Flux, Imagen) do not wrap left to right, distort at the poles, and top out around 2k. There are three ways to get there, best first:

  1. Real star field plus a generated feature (recommended). Start from NASA's Deep Star Maps 2020 (Scientific Visualization Studio): a real all-sky star map from Gaia and Hipparcos, already equirectangular, up to 64k (as HDR .exr), free to use with the credit line “NASA/Goddard Space Flight Center Scientific Visualization Studio; Gaia DR2: ESA/Gaia/DPAC”. Turn it differently for each system so the skies differ, dim it, then composite one generated nebula or dust feature per system into the horizon band, painted on black (prompts below). The stars are real, the projection is already right, and only the feature has to be generated.
  2. A dedicated 360 generator (Blockade Labs Skybox AI, or a panorama-capable model). It handles the projection and the wrap, but check the poles and upscale to 8k.
  3. A single-image model with fix-up. Generate at 2:1, upscale (Real-ESRGAN or similar), then fix the wrap: shift the image half a width, inpaint the seam now in the middle, and shift it back. Paint the poles over with star field.

Real Hubble and Webb images are the right style reference. Using one directly is possible, with care. NASA images are generally public domain. ESA/Hubble and ESA/Webb images are CC BY 4.0 and need a credit line. Check each image's credit. They are flat frames, not skies, so they can only be composited in as a feature. Famous objects (the Pillars of Creation, the Carina Nebula) are recognisable and break the fiction. A generated feature in the same palette is usually better.

The systems

idNameSecuritySky
harrow_reachHarrow ReachHighWarm and rich: a bright Milky Way band crossing at a tilt, golden dust lanes, a soft rose-and-gold emission nebula low on the left. Busy with stars. Safe.
kessler_gapKessler GapLowDark and dusty: a broad brown-grey dark nebula blotting out a third of the sky, thin starlight around its edges, one small distant red dwarf with a faint glow. Sparse. Exposed.
vell_driftVell DriftNullCold and deep: the filaments of an old supernova remnant across the sky, teal and violet with thin red edges, very few stars. One ember-red smudge low on the horizon where Cinder Hold's reactors light the dust. Nobody's.

Prompts

Each prompt is the system's sky plus the shared style. Use the panorama form with a 360 generator; use the feature form for route 1 or 3, where the feature is composited onto a star field.

Shared style (append to every prompt)

Deep-space astrophotography in the style of Hubble Space Telescope and James Webb Space Telescope images: real-looking nebula structure with fine filaments and dust lanes, natural star colours, soft diffraction glow only on the brightest stars. Mostly black sky, low overall brightness, high dynamic range, subtle detail in the dark areas, no banding. Photographic, not painted. No planets, no spaceships, no lens flares, no text, no watermark, no frame.

Panorama form, prefix

Seamless equirectangular 360-degree panorama of a night sky in deep space, 2:1 aspect ratio, left and right edges continuous, plain star field near the top and bottom edges.

Feature form, prefix

A single isolated deep-space feature on a pure black background, no stars, soft edges fading to black on every side, for compositing onto a star field.

harrow_reach

A rich, warm sky. A bright Milky Way band crosses the frame at a gentle tilt, dense with stars, with golden-brown dust lanes running through it. Low on the left, a soft emission nebula in rose, gold and warm white, like a small Lagoon Nebula, glowing gently. Warm, safe, inhabited-feeling, the colours of late-evening light.

kessler_gap

A dark, dusty, desolate sky. A vast brown-grey dark nebula, opaque cold dust like Barnard's dark nebulae or the Coalsack, blots out a third of the sky, its edges lit faintly from behind. Thin, sparse starlight around it. Far off, one small dim red dwarf star with a faint red halo. Dim, empty, exposed, the colours of soot and rust.

vell_drift

A cold, deep, empty sky. The long thin filaments of an ancient supernova remnant, like the Veil Nebula, sweep across it in teal and blue-violet with fine red hydrogen edges, delicate and torn. Very few stars. Low on the horizon, a single faint ember-orange glow lighting a patch of dust. Cold, lonely, lawless, the colours of ice and a dying fire.

Acceptance

  • Load it in a panorama viewer and turn a full circle: no seam, no pinch.
  • Put the game's HUD screenshot over the brightest part: the text reads.
  • Put the three side by side as small thumbnails: each is recognisable.

loot Cargo container P1

Spawns where a ship died, holding what it carried, and disperses after a timeout. Currently a 6 m yellow cube. Should be a 4 m armoured pod with a strobing locator beacon, scorched on one face. It must be findable: the beacon is the whole point, because these appear mid-fight and expire.

Distance markers P2

Eight small spheres every 500 m straight ahead of the spawn point, so a new player can read their speed off the world instead of trusting the HUD. Replace with something intentional: a line of small unlit navigation buoys, one blinking light each, receding into the dark.

07Weapons and projectiles

Every weapon here is a projectile. There is no hitscan, and leading a target is a skill.

The projectile is a real object the player watches travel, so how it looks matters more than usual. Each weapon needs a muzzle model at its hardpoint, a projectile look, and audio (§11).

idNameDamageSpeedBrief · P0
pulse_1Pulse Laser Mk IEnergy620 m/sShort cyan-white bolt, ~4 m long, soft glow, quick fade
pulse_2Pulse Laser Mk IIEnergy680 m/sAs Mk I but longer and hotter — visibly the better gun
cannon_1Tungsten CannonKinetic420 m/sA slug: small, bright, hard-edged, smoke trail. Slow enough to lead badly
turret_1Defence TurretKinetic500 m/sShort amber bursts, unmistakably defensive
turret_2Heavy TurretKinetic450 m/sA heavy twin slug, orange-white, with a visible muzzle flash on the barbette
disruptor_1Cruise DisruptorEMP380 m/sA slow violet pulse that crackles. Non-lethal-looking, because it is not about damage — it stops a freighter running
miner_1Mining Laser Mk IEnergy900 m/sA continuous orange beam with heat shimmer, not a bolt. The only weapon that reads as a tool
missile_1Hammer MissileExplosive260 m/sA visible physical object with a motor: exhaust plume, smoke trail, slow enough to watch arrive. It flies straight — there is no guidance in this game — so its threat is what it does on impact, not on the way

Impact effects P1

  • Energy — a bright flash and a brief circular scorch.
  • Kinetic — sparks and a puff of debris; visible ablation.
  • Explosive — a small fireball with a shockwave ring.
  • EMP — a blue-white electrical crawl across the target hull.

Shield impact must be distinct from a hull hit: shields absorb before hull, and a player needs to know which is being eaten. A hexagonal ripple spreading from the impact point across a spherical shield surface, brightest at the centre, fading in about 0.4 s.

07aEquipment

Seventeen modules, three of them switched on in flight, bolted into mounts by kind and size. Most are internal — a shield capacitor is a box in a bay — so the need here is icons first, hull attachments second.

Every module's effect is a percentage of the hull's own numbers, and the trade-offs are authored in pairs: a capacitor holds more and refills slower, an emitter array does the reverse. An icon set that reads those pairs as opposites is worth more than seventeen unrelated pictures.

Icons P1

64 px SVG plus PNG, in the same flat single-weight language as the commodity set.

idNameChangesBrief
shield_cap_1Deflector Capacitorshields +, regen −A charged cell behind a shield arc
shield_regen_1Emitter Arrayregen +, shields −Radiating emitter fins
shield_cap_2Heavy Deflector Capacitorshields ++, regen −The same cell, doubled and braced
plating_1Ablative Platinghull +, thrust −A bolted armour slab, one corner scarred
plating_2Composite Platinghull ++, thrust −Layered composite in section
thruster_1Overtuned Injectorsthrust +An injector assembly with heat bloom
gyro_1Gyro Stabiliserhandling +A gimballed rotor
burner_tank_1Auxiliary Burner Tankburner ++, thrust −A strapped-on fuel cylinder
cap_booster_1Capacitor Boostercapacitor +A stack of charge cells
cap_recharge_1Recharge Couplingrecharge +A coil coupling with flow arrows
hold_expander_1Hold Expandercargo +, hull −A bay with its bulkhead removed
hold_expander_2Structural Hold Expandercargo ++, hull −, handling −The same, with the frame cut away
ore_processor_1Inline Ore Processormining +, capacitor −A crusher inline with a feed pipe
trade_computer_1Market Uplinktrade +A dish over a ledger grid
shield_booster_1Shield Booster (active)shield +8%/s while onThe shield arc with a pump arrow feeding it
hull_repairer_1Hull Repair Unit (active)hull +2.5%/s while onA patch over a crack, with a nanite dot pattern
overcharger_1Weapon Overcharger (active)damage +30%, recharge −20% while onA bolt with a lightning flare at the muzzle
cloak_1Cloaking Device (active)hides the ship from others while onAn eye half-closed behind a refraction ripple

The three active modules also want four states on the HUD (off, on, hot, burnt out). One icon plus a tinted frame is enough.

Hull attachments P2

Five of the fourteen are plausibly visible from outside, and a ship that looks fitted is most of what makes fitting satisfying: the two plating modules as bolted plates sitting proud of the flanks in the hull's livery, the burner tank as an external cylinder near the engines, and the hold expanders as visibly larger cargo bays or an extra clamped container. Each is a small separate mesh attaching at the rig or thruster offsets in §05. The rest stay internal and need no geometry.

Mount markers P2

Empty mounts should be visible at close range: a capped socket, a blanking plate, an unarmed pylon. It is what tells a pilot looking at their own ship that there is somewhere left to put something.

08Visual effects

EffectPriBrief
Engine glowP0Emissive cone at each thruster, #66B2FF, scaling with throttle from a dim idle to a hard bloom. Attaches to the named thruster nodes
AfterburnerP0Plume doubles and shifts white-hot, adding a heat-shimmer trail. It runs on a fuel budget, so it is intermittent — it has to look right flickering on and off
Engine killP1All plumes cut to nothing while the ship keeps its velocity. This is the Freelancer move, and the visual is the absence of thrust at speed
Cruise chargeP0A five-second spool-up: rings of light converging on the hull, building to a flash. Must be readable by other players — a ship about to escape is a ship to shoot now
Cruise trailP0At 320 m/s: a long bright streak with compressed-light distortion at the nose
Cruise disruptedP1The spool-up shatters — rings break apart, a violet EMP crawl, plumes drop back. This is the moment piracy works and it must be unmistakable
Ship explosionP0Two stages: an internal flash through the hull seams, then a full break-up with tumbling debris. About 1.5 s
Mining beamP1A continuous beam from each mining hardpoint to a point on an asteroid, with ore chips and dust spalling off and drifting toward the ship
Jump flashP1The gate ring floods with light, the ship stretches toward it and is gone. The jump is instantaneous in the simulation, so the effect is all there is
Docking approachP2Bay-mouth strobes, and a guide-light sequence once a pilot is inside docking range
Loot beaconP1A slow strobe on the container, visible at 2 km
Damage smokeP2Trailing smoke and intermittent sparks below 40% hull
Field dustP2Drifting particulate inside asteroid fields, parallaxing against the dark

09Interface

The HUD is currently monospaced text in five panels. It works and it is readable; what it lacks is anything drawn.

Reticle and markers P0

idBrief
reticleThe aiming crosshair the ship turns toward. A light open circle with four ticks; must not obscure what is behind it. #8CF2B2
lead_markerWhere to aim so a bolt and the target arrive together. A diamond in #FF735A, deliberately unlike the reticle — confusing the two is confusing "where I am pointing" with "where I should point"
target_bracketCorner brackets around a locked target, scaling with its screen size
contact_pipOff-screen contact indicator: a chevron at the screen edge pointing toward it

Panels, bars and the navmap P1

Five panels — net diagnostics top left, flight bottom left, station centre while docked, contacts right, chat bottom. They need a frame that reads as a cockpit display without eating space: a thin bevelled border, a slightly darkened translucent backing, a corner notch. Two variants, HUD green #9EDBB8 and station amber #EBD69E.

Shield, hull, weapon energy, afterburner fuel, throttle, cruise charge and training progress are all fraction bars, currently drawn as [====    ]. One segmented bar graphic with a filled and an empty state, tintable per use.

The navmap is ASCII today. It needs a system node (a circle with a name label, plus a "you are here" variant), a jump link line, a route highlight, and a system detail card listing bases. Two systems now; designed for dozens.

10Icons

All flat, single-weight, legible at 24 px. Supply SVG plus 64 px PNG.

Commodities P1

The category should be readable from the shape language: Raw rough and irregular, Refined geometric, Manufactured mechanical, Consumable rounded.

idNameCategoryBrief
waterWaterRawA sealed drum with a droplet
oxygenOxygenConsumableA pressure cylinder with a valve
foodFoodstuffsConsumableA stacked ration crate
iron_oreIron OreRawRough ore chunks with visible veining
alloysStructural AlloysRefinedStacked ingots, or a girder section
consumer_goodsConsumer GoodsManufacturedA sealed retail crate with a barcode
machineryHeavy MachineryManufacturedA gear and piston assembly
luxury_goodsLuxury GoodsManufacturedAn ornate sealed case

Contacts P0

Four, and these carry real information in a fight: Player a neutral chevron, Pirate a red angular hostile mark, Police a blue shield, Trader an amber cargo chevron. They must be distinguishable by shape, not only by colour.

Services, skills and damage types P1 P2

Eight station services (P1): bar, trader, ship dealer, equipment dealer, repair, refinery, manufacturing, market orders — a glass, a scale, a hull silhouette, a wrench-and-module, a welding spark, a distillation stack, a press, a candlestick chart.

Twelve skill effects (P2) for the training screen's effect column: cargo, shields, hull, damage, thrust, handling, mining, refining, production, trade, research (a flask), invention (a lit bulb over a blueprint).

Four damage types (P2): Energy a bolt, Kinetic an impact star, Explosive a burst, EMP a waveform.

11Audio

Positional sources mono, music and ambience stereo. Loop cleanly where marked.

Ship P0

idLoopBrief
engine_lightyesKestrel drive: a high clean hum, pitch and volume following throttle
engine_heavyyesBulwark: lower, with a mechanical undertone
engine_freightyesHauler: a deep industrial rumble, slow to spool
afterburneryesA hard roar over the engine, with an ignition transient
engine_killnoThe sound of everything stopping: a descending whine into near-silence, leaving hull creak
cruise_chargenoFive seconds of rising harmonic tension resolving into a bass thump
cruise_loopyesA sustained high-speed drone
cruise_breaknoThe disruptor hit: the drone collapses with an electrical crack

Weapons, impacts and interface P0 P1

One fire sound each for the six projectile weapons plus a looping mining beam. Lasers short and electric; the cannon a heavy percussive thump; the disruptor a wet electrical warble that sounds obviously unlike a gun.

Impacts: hit_shield a resonant absorbed thud, hit_hull metal-on-metal penetration, plus per-damage-type variants, explosion_small, explosion_large and debris.

World and interface (P1): dock_granted, dock_clamp, undock_launch, jump_engage, jump_arrive, loot_scoop, mining_impact, trade_confirm, trade_refused, skill_complete — a small satisfying chime, because this fires when something trained while you were away — and the four UI clicks.

Ambience and music P2

Five ambiences: high-security space (calm, distant traffic chatter, a low tonal bed), low-security (sparser, colder, irregular unexplained noises), asteroid field (pebble impacts on the hull, dust hiss), station interior (ventilation, machinery, muffled voices), and the bar (conversation, glasses, a bad jukebox).

Music is orchestral-electronic in Freelancer's register: melodic, unhurried, never busy. Loop cleanly and leave silence — this is a game people play for hours.

idLengthBrief
mus_exploration3–4 minThe default flight theme. Spacious, wistful, mostly quiet
mus_combat2 minPercussive and driving, layered so it can enter mid-phrase
mus_station3 minWarm, safe, slightly bureaucratic
mus_bar2 minDiegetic: source music, worse speakers, a different genre
mus_lowsec3 minKessler Gap. Sparse and unresolved — it should not feel safe
mus_title2 minThe theme, and the one that has to be good

12Typography

The HUD is monospaced by design: the columns line up and the panels are tables. Bevy's bundled font has no em dash and no box-drawing characters — every on-screen string in this codebase is plain ASCII, and there are tests asserting it.

Needed: one monospaced family with a technical, slightly condensed feel, in Regular and Bold, covering Latin-1 plus arrows and block-drawing (─ │ ┌ ┐ └ ┘ █ ▓ ▒ ░ ← → ↑ ↓). Supplying those would let the panel frames be drawn in text and the ASCII-only tests be relaxed. A second, proportional family for headings and station signage would help, but is P2.

13Manifest

A first pass, in build order. Ticks are kept in this browser.

P0 The game is incomplete without these

P1 It reads as unfinished without these

P2 Polish

14Deliberately not here

Nothing should be generated for a system that cannot show it yet.

  • Mine-layer hardware. HardpointKind::Mine exists in the model and no hull declares one — the content loader now refuses a mount nothing can fill, so this stays empty until there is a module.
  • Capital ships, gunboats, cruisers, transports. HullClass lists them; no content defines one.
  • Player structures. Deferred to sovereignty.
  • Jump holes. Hidden gates exist in the model and are filtered out of what the client is told; nothing discovers them yet.
  • Character portraits. Three named characters: Ilse Varga (Traders Guild dispatcher, Halden), Captain Imre Hask (Compact Wardens) and Sabe Ronn (keeper of the Cinder Clans' stores, Cinder Hold). There is nowhere to show a portrait yet; the bar is text.