Skip to content

Systems Reference

The campaign state is the single source of truth. All systems read and write it. No system talks directly to another.

FieldDescription
CreditsUniversal currency. Crew pay due every 30 days.
Hull / ShieldShip condition. Combat writes damage. Repair costs credits at port.
ReputationPer-faction and per-region standing. Gates access, prices, and recruitment.
CargoWhat you carry shapes routing, risk, inspection triggers, and investigation.
CrewUp to 6 members. Abilities, cultural access, morale, injury state, loyalty tiers.
CompanionsUp to 2. Passive bonuses (combat, speed, healing, evasion, trade).
InvestigationFragment-based evidence threads. Five grades: rumor, clue, corroborated, actionable, locked.

Crew members provide three things simultaneously:

  1. Ship abilities — combat actions, emergency repair, navigation bonuses
  2. Cultural access — language, customs knowledge, faction trust
  3. Narrative obligations — personal debts, loyalties, departure conditions

Crew has morale. Morale drops from missed pay, injuries, and bad outcomes. Below threshold, crew members leave — and take their capabilities with them.

Maximum six crew members. Each has a pay rate (default 50 credits per 30 days). Full crew is expensive; running lean means fewer capabilities.

Every 30 days, crew pay is due. If credits are insufficient, morale drops sharply. Two missed pay periods and departures begin.

Crew start at 45 morale (stranger level). Loyalty progresses one-way through three tiers: Stranger (0-30 pts), Trusted (31-65 pts), and Bonded (66-100 pts). Trusted crew unlock their third ability. Bonded crew unlock loyalty missions.

Combat can injure crew. Injured crew cannot fight and have degraded ship abilities until they recover. Multiple injuries compound — a crew member who keeps getting hurt becomes a liability.

Grid-based tactical combat on an 8x6 grid. Player ship vs enemy ship. Terrain tiles (asteroids, debris, nebula) affect positioning and targeting.

Actions per turn: move, attack, defend, use ability, retreat.

Terrain effects:

  • Asteroid — blocks movement and shots
  • Debris — half cover (+25% evasion)
  • Nebula — hides occupant (no targeting beyond range 1)

Outcomes write to campaign:

  • Victory — salvage credits, faction heat, possible crew injury
  • Retreat — jettisoned cargo, reputation as someone who runs
  • Defeat — seized cargo, injured crew, expensive limping

Crew abilities are sourced from the crew binding spine. Lose a crew member, and you lose their combat ability.

Consecutive fights in a short window trigger escalation pressure:

  • Diminishing salvage returns
  • Increased injury chance
  • Persistent hull wear
  • Higher damage threshold for heavy damage

One fight is tactical. Seven fights in a row is attrition.

Each civilization has social rules that affect trade, access, and conflict.

Keth seasons — biological calendar changes what gifts mean, when trading is appropriate, and when outsiders are restricted.

Veshan challenge — refusing a challenge is worse than losing. The Debt Ledger tracks favors and obligations.

Orryn neutrality — they broker for everyone. Information has a price. Cutting them out is cheap until you need them.

Cultural knowledge increases through crew interactions and successful cultural navigation. Higher knowledge unlocks restricted goods, better prices, and diplomatic options.

Fragment-based evidence discovery. Threads accumulate clues from:

  • Station visits (overhearing rumors)
  • Trade (noticing cargo discrepancies)
  • Combat salvage (finding debris with manifests)
  • Crew interpretation (cultural context for patterns)

Fragments can be corroborated when multiple sources confirm the same thread. The investigation does not announce itself — it emerges from doing the job.

Source discount — goods cost less at ports that produce them (local affinity > 1.0). Demand premium — goods sell for more at ports that need them (local affinity < 1.0). Flood penalty — dumping the same good repeatedly at one port degrades your sell price over time. Cultural gates — some goods require cultural knowledge to buy. Contraband — opium, black powder, and stolen cargo are only tradeable at black market ports. Extreme margins, extreme inspection risk.

The core loop: buy at source, sell at demand, but routing is constrained by fuel, faction standing, route danger, ship class requirements, and what you are willing to carry through whose territory.

Twenty-four contract templates across seven families:

FamilyStyle
Return freightDeliver goods between specific ports
Luxury discreetHigh-value, low-profile deliveries
ProcurementSource specific goods for a buyer
CircuitMulti-stop trade circuits
SmugglingContraband runs through dangerous territory
ShortageEmergency supply during scarcity events
Reputation charterFaction-aligned missions that build standing

Contracts look simple until the paperwork catches up, the shortage changes the price, or the cargo turns out to be evidence.

Python 3.11+. Typer CLI + Rich TUI + Textual full-screen mode. No external AI dependencies. No cloud services. Runs on your machine.

  • Engine: portlight.engine — campaign state, crew, combat, culture, investigation, economy
  • Content: portlight.content — ports, routes, goods, companions, contracts, factions, ships
  • Views: portlight.app.sf_views — campaign-aware Rich rendering surfaces
  • Playtest: portlight.engine.playtest — deterministic simulation harness
  • Dogfood: portlight.engine.dogfood_runner — automated scenario runner
  • Tests: 2,200+ covering all systems