Space-Age total conversion · OpenRA · GPLv3

Lunar Red Alert

A real-time strategy game where you fight on the Moon — manage oxygen instead of fuel, bound across the surface in 1/6 gravity, and keep your troops alive under pressurised domes.

● Desktop RTS Windows · Linux · macOS GPLv3 · open source ● CI-verified · playable browser alpha live

The alpha boots the actual OpenRA engine compiled to WebAssembly — real menu, live shellmap battle. First load downloads ~80 MB (engine + the 2008 EA freeware game data; see the content notice) and wants a desktop browser. Click once for sound.

Overview

Command & Conquer, in a vacuum

Lunar Red Alert keeps the fast, classic RTS gameplay of OpenRA’s Red Alert and moves the whole war to a cold, airless world. Every design decision follows one question: what changes when there’s no air and barely any gravity? Your infantry carry a finite air supply. Step outside a pressurised zone and the countdown begins. Artillery hangs in the low-gravity sky. Craters wall off the battlefield into natural chokepoints.

Built on a real engine

A total conversion of OpenRA — the mature, open-source C#/.NET remake of the Westwood RTS engine. Not a mock-up: real traits, real YAML, real gameplay.

Two ways to play

The full OpenRA conversion is a desktop game (Win/Linux/macOS). A separate web-native prototype — same lunar mechanics, built for the browser — is playable right here, no install.

Free & open (GPLv3)

Evolved from OpenRA and released under the same GNU GPLv3. You can read, build, modify and share every line.

Environment

Four rules of a lunar battlefield

◉ Oxygen, not fuel

Every soldier carries an air tank that drains tick-by-tick in vacuum and refills inside a pressurised bubble. An empty tank grants a “suffocating” state the rest of the game reacts to.

☠ Vacuum damage

Out of air and out of shelter, a unit takes periodic vacuum damage until it either reaches pressure or dies. Vehicles are sealed and immune.

↧ Low gravity

Infantry bound at ~140% speed in 1/6 g; vehicles handle differently; arcing shells travel farther and hang longer. Gravity is a single world-level value (Moon 16% · Mars 38%).

⌂ Pressurised domes

Your base structures project a life-support field. Inside it, troops breathe and heal their air; push the front line forward by building outward.

How the systems chain together

Structure
A base building projects pressurised to nearby units
→
Oxygen
Refills while pressurised, else drains; empty → grants no-oxygen
→
Vacuum
If exposed & out of air → periodic damage
→
Movement
Low-g speed boost; suffocating units slow to half

Under the hood

What’s actually in the repo

The mechanics are implemented as real OpenRA engine traits (C#) plus a lightweight data-only mod. Nothing here is placeholder.

Engine traits OpenRA.Mods.Common

  • Oxygen.cs — air supply
  • DamagedByVacuum.cs — hazard
  • GravitySpeedModifier.cs — low-g
  • OxygenBar.cs — O₂ meter
  • LowGravity.cs — world gravity

The mod mods/spaceage

  • mod.yaml — manifest
  • spaceage-defaults.yaml — traits
  • spaceage-structures.yaml — domes
  • tools/gen_*.py — asset gen
  • SPACE-AGE-DESIGN.md — full plan

A soldier’s vacuum survival, in engine terms — a trait that damages exposed, airless units, modelled on OpenRA’s own DamagedByTerrain:

// fires every DamageInterval ticks while a unit is exposed and out of air
void ITick.Tick(Actor self)
{
    if (safe) { ticks = 0; return; }              // under a dome / sealed hull
    if (Info.RequireOxygenDepleted && oxygen?.Current > 0) { ticks = 0; return; }
    if (--ticks <= 0) {
        ticks = Info.DamageInterval;
        self.InflictDamage(self.World.WorldActor, new Damage(Info.Damage, Info.DamageTypes));
    }
}

Play it

Build & run (desktop)

The game is a desktop OpenRA mod, so “playing” means building the engine once on a machine with the .NET SDK. First launch downloads the Red Alert content it reuses.

# 1. get the code
git clone https://github.com/dr-richard-barker/Lunar_Red_Alert.git
cd Lunar_Red_Alert

# 2. build the engine + lint the mod
make
./utility.sh spaceage --check-yaml

# 3. launch the Space-Age mod
./launch-game.sh Game.Mod=spaceage

Once in a skirmish: build a base, send infantry into the open and watch the O₂ bar drain, then pull them back under the dome to refill. Full verification checklist is in SPACE-AGE-README.md.

Roadmap

Where it’s going

PHASE 1

Core physics hooks Done

World-level low gravity + low-g movement traits. No changes to the engine core.

PHASE 2

Oxygen & vacuum survival Done

Air supply, vacuum damage, pressurised domes, the O₂ meter — all wired onto RA units.

PHASE 3

Lunar visuals & terrain In progress

A seamless-tiling terrain generator (regolith, basalt, ice, crater floor & cliffs) in a unified lunar palette is done and shipped as real in-game tilesets — see the gallery above. Remaining: crater-rim transition tiles, ice as the harvestable resource, and cold-palette/black-sky lighting.

PHASE W

Real engine in your browser Done

The actual OpenRA engine — not a rebuild — compiled to WebAssembly and running live from this GitHub Pages site, no download required. Play it now; full status log in WASM-PORT-PLAN.md.

PHASE 4

Compile, package & release Planned

Build on a .NET machine, verify the checklist, then package desktop installers for Windows / Linux / macOS.