francy51 ce631b00f1 fix(galaxy): ensure spiral arms are always visible
Three fixes for circular/non-spiral galaxies produced by Randomize:

1. Raise twist range from [1.0, 6.0] to [4.0, 18.0] radians
   - Old max (~0.95 turns) could barely curve; new range covers
     0.6–2.9 full turns, matching real spiral galaxy morphology
   - Default twist raised from 3.0 to 12.0 (~1.9 turns)

2. Scale angular scatter inversely with arm count
   - Replaced hardcoded ±0.36 rad scatter with arm_scatter() that
     uses 30% of the inter-arm gap (TAU / arms × 0.30)
   - Single-arm disks use a generous 1.5 rad scatter
   - Prevents high-arm-count disks from blurring into circles

3. Bias randomize_disk toward spiral-friendly values
   - Arms weighted toward 2–4 (10%, 30%, 30%, 20%, 10% distribution)
   - Twist floored at arms × 4.0 rad so multi-arm disks always wind
     enough for distinct spiral structure
   - Outer radius defaults to "auto" 60% of the time
2026-06-10 00:13:39 -04:00

VOID::NAV

A single-player open-world space exploration RPG — trade, quest, fight, or simply drift and enjoy the ambiance. Inspired by the charm and freedom of Windward Horizon, set in a procedurally generated galaxy with FTL-style tactical combat.

You are a young, unaffiliated captain with an entire galaxy open for exploration. Every campaign features a unique, procedurally generated sector map. Trade goods between stations, take on quests for various factions, mine asteroid belts, or simply cruise and enjoy the void. Prefer a quieter life? You can simply sail the stars.

Combat is FTL-style tactical resource management — no dogfighting or direct piloting. Click a hostile, your ship auto-engages, and you manage reactor power between Weapons / Shields / Engines / Auxiliary. The skill is in what you power and when, not how fast you click.

VOID::NAV is a pnpm workspace monorepo for the game website, living design docs, browser game shell, and SpacetimeDB backend module. The architecture supports optional co-op servers in the future, but the core experience is designed as a solo adventure.

Core Pillars

Pillar Description
Open-World Exploration Procedurally generated galaxy with unique sectors, anomalies, and hidden treasures every campaign
Trade & Commerce Regional price differences, supply/demand, and trade routes between stations and factions
FTL-Style Combat Tactical power management (not action). Auto-engage with reactor allocation decisions
Ship Customization Build the ship that suits your style — tough juggernaut, nimble scout, or cargo hauler
Dynamic World Impact Faction leaders, world events, and player actions shape the galaxy without firing a shot
Solo Adventure A personal galaxy to explore at your own pace. The architecture supports optional co-op servers later.

Layout

apps/docs          Existing docs, interactive demos, and vertical slice
apps/site          Public landing page / game website
apps/game          Playable game shell connected to SpacetimeDB bindings
packages/ui        Small shared UI primitives and CSS tokens
services/spacetimedb TypeScript SpacetimeDB module
archive/legacy-static Legacy static prototype files kept for reference

Prerequisites

  • Node.js 24+
  • pnpm 9+
  • SpacetimeDB CLI (spacetime) v2.3.0+

The SpacetimeDB CLI is not vendored. Frontend builds use the committed placeholder bindings in apps/game/src/module_bindings; run pnpm generate:bindings after installing the CLI to replace them with generated bindings.

Quick Start

pnpm install
pnpm dev

This single command starts a fresh SpacetimeDB instance (ephemeral, in-memory), publishes the module, generates bindings, and launches the game dev server.

Open http://localhost:5175 to play.

Press Ctrl+C to stop everything.

Development

pnpm dev            # Full stack: SpacetimeDB + game (port 5175)
pnpm dev:docs       # Docs only (port 5173)
pnpm dev:site       # Site only (port 5174)
pnpm dev:game       # Game frontend only (requires running SpacetimeDB)

Default ports:

  • docs: http://localhost:5173/docs
  • site: http://localhost:5174
  • game: http://localhost:5175
  • SpacetimeDB: http://127.0.0.1:3000

Builds

pnpm build          # Build all apps
pnpm check          # Typecheck all packages
pnpm generate:bindings  # Regenerate SpacetimeDB TypeScript bindings

SpacetimeDB

Root spacetime.json points at services/spacetimedb and generates TypeScript bindings into apps/game/src/module_bindings.

The pnpm dev script uses an isolated ephemeral data directory (.spacetime-dev/) so it starts clean every time. No stale database or auth issues.

Reducers: connectPlayer, renamePlayer, seedWorld, ping, undock, selectTarget, startApproach, completeApproach, dock, startMining, completeMiningCycle, sellOreToNpcMarket

Description
No description provided
Readme 2.2 MiB
Languages
TypeScript 75.9%
Rust 21.7%
HTML 1.7%
CSS 0.6%