ORION

Latest release v0.5.0 · Aug 4, 2026

ORION

A StarCraft-style RTS built from scratch in Rust. No game engine — a purpose-built deterministic simulation with a wgpu isometric renderer. Two asymmetric races, skirmish AI, and online multiplayer via lobby codes. All art and audio are procedurally generated at startup: zero asset files.

  • macOS
  • Windows 10/11
  • Linux
  • Rust
  • MIT licensed

Screens

What's in it

Playable game — single player vs AI, or 1v1 multiplayer (direct connect):

Full macro loop

minerals + plasma (gas) → build → tech → army → destroy the enemy base

Two asymmetric races

authored entirely in crates/sim/assets/units.ron:

Vanguard Combine (industrial)

  • Units: Fabricator (worker), Trooper, Vanguard (melee), Breaker (siege tank with deploy mode + splash), Skywing (flyer, hits air+ground), Stormcaller (spellcaster: Plasma Storm AoE)
  • Buildings: HQ, Supply Pylon, Muster Hall, Plasma Condenser, Forge (tanks), Aerie (flyers), Archive (research: Weapons/Armor +1/+2)
  • Tech tree requirements (Forge needs Muster Hall, Aerie needs Forge, Stormcaller needs Archive)

Kyth Assembly

(swarm): Drone, Skitter (cheap fast melee), Spitter (ranged anti-air), Ravager (splash melee heavy), Wisp (flyer), Weaver (caster); Hive / Spire / Sap Well / Warren / Incubator / Roost / Cortex

Multiplayer

a live lobby browser (public games listed by player name, one click to join) and private lobbies whose 5-letter code is the password — all through a Cloudflare Worker relay, no IPs, no port forwarding. WebSocket lockstep, input-delay 4 ticks, checksum desync detection; menus don't pause MP

Ladder

top ranked players by Elo right in the multiplayer menu, served live by the relay

Ranked matchmaking

FIND MATCH queues you by MMR (Elo, K=32, start 1200) and latency — the search window widens the longer you wait. No bots, humans only; matches are made on a random map from the pool, both players report the result and the matchmaker updates your rating (a rage-quit resolves against the quitter on a timeout). Your MMR shows on the FIND MATCH button and the end-of-match screen

Race select + enemy race choice on the difficulty screen

End-of-match stats (time, units built/lost, resources mined)

Bot personalities (seeded timing/cap offsets) so games vary; escalation so they always finish; balance measured by cargo run --release -p orion-sim --example balance

Two maps

"Meridian" (two high-ground mains, ramps, chokepoints) and "Caverns" (Xel'Naga Caverns homage: NE/SW mains, NATURAL EXPANSIONS with their own mineral lines + geysers, cavern rocks splitting the center into three routes) — pick per game; bots expand to their natural

Replays

every game auto-saves to ~/.orion-replays; watch from the REPLAYS menu with pause, speed, and per-player fog perspective

Main menu (vs AI at three difficulties), pause menu with settings: fullscreen, HUD size, game speed, edge scroll, rebindable hotkeys (persisted to ~/.orion-settings.ron)

Skirmish bot at Easy / Normal / Hard (no cheating — difficulty is macro tightness and aggression timing)

Order queueing (shift), control groups, ctrl+click type-select, rally points with auto-gather, production queue with cancel/refund

Worker-friendly macro UX

placements spread across selected workers (5 workers + 3 queued buildings = 3 peel off, 2 keep mining), order-queue lines show each worker's plan (build sites, gather targets), mining chip sparks + construction weld arcs, saturation labels over bases and extractors (workers / cap)

Hover tooltips on every HUD element (units, buildings, research, actions)

SC:R-style console: navy tech panels with gold piping, framed minimap and portrait, beveled command-card buttons, in-console MENU button — menus share the same identity (framed dialogs, plated rows, hover glow)

Update notice on the main menu when a newer release is out (one click opens the download page — no manual checking)

Procedural audio

ambient music loop + combat/UI/economy sound effects, all synthesized at startup (no asset files); volume sliders in settings

Flashing warnings with error sounds

NOT ENOUGH MINERALS / PLASMA / SUPPLY / ENERGY, CANNOT BUILD THERE, REQUIRES <building>

Deterministic lockstep sim (fixed-point math, checksums, input-only mutation) — the property online multiplayer stands on

Download

Latest release v0.5.0 · Aug 4, 2026 — precompiled, no install step. All releases.

macOS (Apple Silicon + Intel)

Orion-macOS.zip

Unzip → double-click Orion.app. First launch only: right-click → Open (it isn't notarized)

Downloadv0.5.0 · 9.7 MB

Windows 10/11

orion-windows-x86_64.zip

Unzip → double-click orion.exe. If SmartScreen objects: More info → Run anyway

Downloadv0.5.0 · 4.5 MB

Linux (x86_64)

orion-linux-x86_64.tar.gz

tar xzf && ./orion (needs Vulkan drivers + ALSA libasound2)

Downloadv0.5.0 · 5.7 MB

Multiplayer needs zero setup and never shows an IP: FIND MATCH pairs you with a stranger near your skill and latency (ranked, Elo-rated); CREATE LOBBY lists your game for anyone to click and join; CREATE PRIVATE LOBBY gives you a 5-letter code that doubles as the password. Settings live in ~/.orion-settings.ron.

Build from source (any platform, Rust 1.80+):

# Linux build deps: sudo apt-get install libasound2-dev
cargo run --release -p orion-client

Releases are cut by pushing a tag: git tag v0.x.y && git push origin v0.x.y — CI builds all three platforms and attaches them to the GitHub release.

See SPEC.md for the full product specification and CLAUDE.md for architecture.

Changelog

Written up in the project wiki — this page reads it live.

v0.5.0The ladder, a balance pass, and a polish sweepIn-game ladder (top 25 by Elo), cross-race balance pass, professional polish sweep of every screen

The ranked loop gets its payoff, the races get re-tuned for the expansion era, and every screen got a professional once-over.

Ladder

The in-game ladder

  • LADDER on the multiplayer page: top 10 ranked players by Elo with game counts, your own row marked < YOU, fetched live from the relay.
  • The matchmaker now remembers display names, and GET /leaderboard serves the top 25 (ranked games only).

Balance

The v0.3.0 bot upgrades (expansions, siege micro, storms, multi-side approach pathing) had quietly swung cross-race winrates to 68% Kyth. Measured at Hard across both maps (8 seeds per matchup per map) and re-tuned:

ChangeWhy
Trooper damage 6 → 7VC's core ranged unit now kills a Skitter in 6 hits, not 7
Skitter cost 40 → 45The swarm's cost-efficiency curve was unmatched
Ravager HP 200 → 180The late-game splash wall was over-durable
Breaker sieged damage 35 → 40VC's anti-swarm answer hits like it should

After tuning: 41/59 VC/Kyth overall, with clear map personalities — VC favors Meridian's single-base brawls, Kyth thrives in Caverns' long two-base games. Further evening will come from bot micro (VC tank defense), not more stat hammering.

Polish sweep

  • Settings finally fits on one screen (compact rows; BACK was off the bottom edge at default HUD scale) and every label aligns with its row.
  • R: PLAY AGAIN no longer appears (or fires) in multiplayer and replays — it silently abandoned MP sessions into a bot game.
  • All Plasma Storm costs in the UI derive from the sim constant (two more stale "75 energy" strings were hiding in the card + tooltip).
  • Requirement hints shorten to the building's last word — no more "NEEDS MUSTE" mid-word truncation.
  • End-of-match stats spell out MINERALS / PLASMA; multiplayer copy sits inside its dialog panel; replay-load errors show on the Replays page; the main menu carries a version stamp.
  • Selection + command audio acknowledgments (from v0.4.3) round out the feel: every click answers.
v0.4.0v0.4.0 / v0.4.1 — The console reworkSC:R-style console + menu rework (gold/navy chrome), building box-select, update notice, overlap-free HUD

(v0.4.1 is the fixed build: the circuit-trace detailing on the first pass read as broken pixels at dialog scale and a long race label could overflow its plate — both patched, and the console got taller with a bigger portrait and larger type. Screenshots below show v0.4.1.)

The whole interface got the StarCraft: Remastered treatment: a proper command console instead of a flat bar, and menus that match it. Still 100% procedural — every panel texture, gold strip and beveled button is painted into the sprite atlas at startup; the game ships zero asset files.

The new command console

The console

  • Navy tech panels with brushed texture and animated-looking circuit traces, tiled at native scale across the deck.
  • Gold piping along every edge with rounded corners, riveted seams, and angled shoulders where the raised minimap and command-card blocks step down to the center deck.
  • Framed minimap and portrait — gold frames around dark insets.
  • Beveled command-card buttons with distinct hover states and gold hotkey badges.
  • MENU button in the console (opens the pause menu), SC-style.
  • The resource readout sits on its own framed plate top-right.

Menus

Main menu

Framed dialog pages

  • Gold-framed dialog panels behind every page, corner rivets included.
  • Winged title plates with gold underlines.
  • Rows are plated (gold end caps), glow gold on hover, and long labels auto-shrink to fit — no text ever overflows its plate.

Settings

Fixes & quality

  • Box select takes buildings: units win a mixed box (the SC2 rule), but a drag over buildings alone now selects all of them — they were previously filtered out of box selection entirely. Regression-tested through the scripted human-input path.
  • Overlap sweep: no HUD/menu text overlaps in any state — the queue label vs HP bar collision is gone, the subgroup hint clears the research bar, tooltips lift above the mode hint, and the multi-select strip caps its width before the MENU button on narrow windows.
  • Update notice: the main menu checks GitHub once at startup and shows UPDATE vX.Y.Z AVAILABLE — DOWNLOAD when a newer release exists; one click opens the download page. (True in-place self-update is deliberately not done: replacing an ad-hoc-signed binary makes macOS Gatekeeper re-prompt, so notify-and-open is the better UX until the project has a signing identity or a store build.)
  • The Plasma Storm cast hint reflects the v0.3.0 cost (100 energy).
  • v0.4.3: selection and command audio acknowledgments — Vanguard radio blips (softer for workers), Kyth organic warbles, building thunks; move/attack/gather/build order acks with alternating variations. All synthesized, zero asset files.
  • v0.4.2: the production queue panel shows the COMBINED queue across every selected building of the active type (per-building progress bars, separator gaps), so training into the least-queued building is visible — and click-cancel routes to the correct building's queue. Previously only the first building's queue was shown, which looked like a bug whenever several production buildings were selected or Tab-cycled.
v0.3.0Ranked matchmaking, replays, CavernsRanked matchmaking (MMR + latency), replays, second map "Caverns" with expansions, bot siege/storm/scout, spawn-fairness overhaul, storm nerf

The competitive release: press FIND MATCH and the matchmaker pairs you by skill and latency; every game becomes a rewatchable replay; and a second map brings expansions into the game.

FIND MATCH on the multiplayer page

Ranked matchmaking

  • One button: pick your race, FIND MATCH. The matchmaker (a Durable Object on the relay) pairs players whose Elo gap and combined latency both fit — and both windows widen the longer you wait, so close matches happen fast and a match always happens.
  • Latency is real, not guessed: the client probes its RTT to the relay edge, and cross-continent pairs get a penalty.
  • Ratings are Elo (K=32, start 1200) keyed to an anonymous ID generated on first launch — no accounts. Your MMR shows on the button and on the end-of-match screen.
  • Both players report the result; agreement updates ratings, a rage-quit resolves against the quitter on a timeout, and quitting a ranked game is a forfeit. No bots in the queue — every entry is a live human.
  • Ranked games are played on a random map from the pool.

Replays

Watching a replay with the observer strip

  • Every game (vs AI or online) auto-saves to ~/.orion-replays/ — a replay is just the seed + command stream, a few hundred KB at most, and reproduces the game bit-exactly.
  • The main menu gained REPLAYS: recent games listed by date, matchup and length. Watching gives pause (SPACE), speed (1/2/3 = 1×/2×/4×), fog perspective per player or reveal-all (TAB), free camera, and a neutral "NAME WINS" banner.
  • Determinism is enforced by test: a recorded game re-simulated from its file must land on the identical checksum.

New map: Caverns

Caverns overview — mains, naturals, cavern rocks

  • An homage to SC2's Xel'Naga Caverns: NE/SW high-ground mains, a natural expansion below each ramp with its own mineral line and geyser (first map with expansions), and cavern rock formations that split the center into a tight middle lane and two wide edge routes.
  • Bots understand expansions: they take their natural at ~13 workers.
  • Map select on both the vs-AI and multiplayer pages; the host's choice travels in the match handshake.

Bots got teeth

  • Siege micro: Breakers deploy inside working range and pack up when the field clears.
  • Storm micro: casters storm the biggest visible enemy clump (3+ units), avoid friendly fire, and never stack storms. Fog-honest — the bot only reacts to what its player can actually see.
  • Scouting: a worker pokes the enemy main around 1:20.
  • Decisive endgames: maps mine out around minute 15 and the bots go permanently aggressive at 13, all-in at 16 — turtle stalemates ended.

Balance & fairness

  • Plasma Storm nerfed: 100 energy (was 75), 48 total damage over 8 pulses (was 72 over 9), and overlapping storms no longer stack — the stacked version deleted whole armies with no counterplay.
  • Spawn fairness overhaul: a mirror-covariance probe proved the two spawns weren't playing the same game — fixed-point multiply rounded toward the northwest, flow-field tie-breaks preferred the northwest, the starting worker arc wasn't point-symmetric, and building-spiral mirroring was off by a footprint. All fixed; the Kyth mirror went from 0–7 for the SE spawn to even, verified by swapping spawns.
  • Gather traffic robustness: approach fields now seed from every open tile around a destination, so a walled-in base can't strand its workers (found by the soak harness as a full economy freeze).

Under the hood

  • Meridian mineral patches: 1500 → 1000 (mines out by ~15:00 by design).
  • The QA soak alternates both maps; map symmetry is audited by a dedicated example across terrain, elevation, resources, expansions and starts.
v0.2.0IP-free multiplayer & double-click installsIP-free multiplayer (lobby browser + private codes), double-click releases for all platforms, multi-worker build queueing, worker visual feedback

Multiplayer stopped feeling like 1998: no IP addresses anywhere, and the release artifacts became genuinely double-clickable on every platform.

The lobby browser — no IPs anywhere

New

  • Lobby browser — CREATE LOBBY lists your game publicly (player name
    • race); anyone clicks to join. A Directory Durable Object on the relay tracks open lobbies and unlists them the moment someone joins.
  • Private lobbies — CREATE PRIVATE LOBBY gives a 5-letter code that doubles as the password. The code is the only thing players ever see; the old direct-TCP/IP path was deleted outright.
  • Double-click releases — macOS gets a real Orion.app (universal arm64+x86_64 binary, app icon, ad-hoc signed so Apple Silicon launches it); Windows a zipped orion.exe; Linux a tarball. The install table in the README covers all three.

Improved

  • Multi-worker build queueing — placing several buildings with several workers selected spreads the jobs: 5 workers + 3 placements = 3 peel off, 2 keep mining. Previously one worker got the whole list.

Worker plan lines and weld arcs

  • Worker visual feedback — order-queue lines show each selected worker's plan (amber to build sites, blue to gather targets), mining shows chip sparks and a pick beam, construction shows weld arcs, carried cargo bobs visibly, and saturation labels over bases and extractors read workers/cap.
  • Rally on constructing buildings — worked in the sim, was never drawn; the rally line now shows immediately.
  • Relay hardening: rate limits, directory caps, per-connection frame budgets.
v0.1.0First playable releaseFirst playable release: two races, full macro loop, skirmish AI, online MP via relay codes

The foundation: a complete StarCraft-style 1v1 RTS in Rust with no game engine, no asset files, and a bit-deterministic simulation.

Vanguard Combine massing for a push

Features

  • Deterministic lockstep sim — Q16.16 fixed-point math, input-only mutation, FNV checksums every 24 ticks. Two peers stepping the same commands are bit-identical, which is what online play stands on.
  • Two asymmetric races, authored entirely in data (units.ron):
    • Vanguard Combine (industrial): Fabricator, Trooper, Vanguard, Breaker (siege tank with deploy mode + splash), Skywing (flyer), Stormcaller (Plasma Storm caster); HQ, Supply Pylon, Muster Hall, Plasma Condenser, Forge, Aerie, Archive (Weapons/Armor research).
    • Kyth Assembly (swarm): Drone, Skitter, Spitter, Ravager, Wisp, Weaver; Hive, Spire, Sap Well, Warren, Incubator, Roost, Cortex.
  • Full macro loop — minerals + plasma (gas), tech requirements, research, supply, production queues with cancel/refund.
  • One map ("Meridian") — two high-ground mains, ramps, chokepoints, fog of war with the high-ground vision rule (you can't see up cliffs).
  • Skirmish AI at three difficulties — no cheating, difficulty is macro tightness and aggression timing.
  • Online multiplayer through a Cloudflare Worker relay with 5-letter lobby codes; WebSocket lockstep with desync detection.
  • SC-style control: control groups, shift-queueing, ctrl+click type-select, rally points with auto-gather, attack-move, siege toggle, spellcasting, rebindable hotkeys, DPI-scaled HUD.
  • Procedural everything — every sprite (units at 8 facings × 2 walk frames × 2 teams), building, cliff face, effect, the 5×7 font, and all audio (music loop + SFX) are generated at startup. Zero asset files.

The Kyth Assembly swarm

Vanguard arsenal

Platforms

First release with CI-built binaries for macOS (universal), Windows and Linux, attached to the GitHub release.