16 May 2026: Trading system + UI polish
New mechanic: cooperative trade routes · System Panel previous-system icon · Map and transit-panel polish · Nation page scroll fix
Trading: new feature
- Set up a trade agreement at any of your trade stations. Trading Posts, Cerberus Trading Stations and Trading Spaceports now show a Trade Agreement action. Pick a partner from any ally-or-neutral player who also owns a trade station, then pick one of their stations as the destination. The picker shows the actual station icon, direct LY distance, and an estimated jump count at 40 LY range so you can compare routes at a glance.
- Assign trade ships to a route. Every Trade Ship class (Falcon, Michigan, Vernaylon, Keshana, Charon, Skorcha, and the rest, twelve playable hulls in total) now shows a Trade action. Pick an agreement and the ship auto-plots a course to source, then to destination, then back, forever. No further input needed; it just runs the loop.
- Cooperative RP gain. Each hyperspace jump earns the ship light-years × the unit type's trade ratio (1.0 by default). When the ship arrives at either end of the route, the owner of that station is paid the carrier amount in full, not the ship's owner. Your trade ship literally earns RP for your partner half the time, and theirs earns for you. It's a genuinely two-sided alliance mechanic.
- Jump-gate hops earn nothing. Routing through a gate skips the light-years between two endpoints, so the gated hop contributes 0 RP. The surrounding hyperspace hops still pay normally. Honest slow travel is the productive activity; gates are still useful but they don't fast-track trade income.
- Live readout on every station. The Agreements button on each of your stations opens a portfolio view: every agreement you own, its partner, ship count, direct LY, lifetime RP delivered to you and lifetime RP delivered to the partner, plus a live In flight row when a ship is mid-route with a carrier balance.
- Voluntary teardown forfeits the carrier; involuntary breaks don't. Cancel an agreement or end a single ship's run yourself and the ship loses whatever RP it was carrying. That closes the "bank and reassign" exploit. If the agreement is broken from the outside (partner declared enemy, station destroyed), the carrier is preserved on the ship and pays out on its next completed run under a future agreement.
- Strategic risk. Trade ships are slow, lightly armed, and traceable on the map. Interdiction pauses a run; combat destruction loses the carrier with the ship. Long routes pay more but cross more territory.
UI polish
- Previous-system icon on the System Panel, to the left of the existing next-system chevrons. Cycle backwards through systems you have units in: same wraparound as Next.
- Focus-on-system icon removed from the System Panel header; the click-to-recenter affordance was redundant with click-on-system on the galaxy map.
- Transit hex ship list redesigned. Clicking an in-flight hex now shows each ship as icon plus three stacked rows: name, ETA, and (when on multi-hop autopilot) the purple Course: destination line. No more cramped one-liners with overflowing text. The course line is omitted entirely when a ship is on its final approach leg, and the Cancel Course button is hidden in that case rather than greyed out.
- Course lines on the map no longer brighten when stacked. Ten freighters running the same route used to draw ten overlapping dashed lines, burning the path to white. Edges are now deduplicated; each segment paints once at its brightest course's alpha, regardless of how many ships share it.
- Trade and agreement modals match the Jump modal sizing. The earlier draft used a smaller compact font; everything is now wrapped in the same roomy-modal type scale as Jump, Dock, and Loan.
- Course-preview disclaimer on the new-agreement modal: "Estimated jumps based on a 40 LY range. Total LY is the crow-flies distance; actual hyperspace miles travelled may be higher. Trade ships pay the station owner on arrival; jump-gate hops earn 0 RP."
- Nation page no longer scroll-jerks on desktop. The faint blueprint grid behind the dossier was being painted across the entire page height with a soft radial mask; every scroll frame triggered an offscreen mask recomposite. The grid is now viewport-anchored (painted once, GPU-composited) and the dossier subtree localises its repaints with
contain: layout paint. Drag the scrollbar and it tracks smoothly now.
Critical bug fixes
- System Panel internal error. A stray pair of double quotes inside a SQL comment was closing a PHP string mid-query, breaking the system_units endpoint and triggering an internal error every time the panel opened. Quotes removed; panel loads again.
- Set Up Agreement button no longer stuck greyed out. The agreement-create modal was looking for the confirm button by the wrong selector, so clicking a station never re-enabled the action. Fixed to use the correct id, and the same fix was applied to the Assign Trade Run modal.
- Trade payouts on multi-hop routes. Trade ships on long routes (multiple hops within their jump range) accumulated zero RP. The tick phase order had trade running after the autopilot relaunch, so by the time trade looked at the ship it was already mid-jump again and the intermediate landing was invisible. Reordered to run trade between hyperspace arrivals and autopilot, so the per-jump accumulator sees every landing. Routes like Iota Hub → Imperius Near (488 LY, ~12 hops) now bank RP on every leg.