A clean-room, open-source RTS engine compatible with Command & Conquer: Red Alert 2 + Yuri's Revenge data files — playable two ways:
- Classic mode (bring your own assets). Point the engine at your own legally-owned RA2/YR installation and it reads the original MIX/SHP/VXL/PAL/CSF/INI files directly, serving 100% retail art, audio and rules. No EA/Westwood game data is — or ever will be — distributed with this project.
- Original mode (nothing to bring). The repository ships a fully original asset slice — AI-generated and procedurally synthesized art, voices, music, maps and an original ruleset (see docs/ASSETS.md) — so anyone can clone and play without owning the game.
The in-game menu's ASSETS selector is the single switch between the two; neither mode ever mixes assets from the other.
npm install
# Original mode — no game files needed:
npm run dev --workspace @vanguard/client
# then open the printed URL (free mode engages automatically without an install)
# Classic mode — with your own RA2/YR install:
RA2_DIR=/path/to/ra2 npm run dev --workspace @vanguard/clientRequires Node.js >= 20.19.
Original mode on one of the shipped maps — every sprite, building, voice and note in this scene is original to the repository:
The vehicle and infantry sprites are drawn by a parametric renderer — flat-shaded 3D primitives projected through the retail voxel camera, 32 coherent facings per unit:
(Classic mode renders your own install's retail art — not shown here, since no EA imagery ships in this repository.)
TypeScript monorepo:
| Package | Purpose |
|---|---|
@vanguard/formats |
Loaders for Westwood file formats (MIX, PAL, SHP, VXL/HVA, TMP, CSF, AUD, INI, MAP) |
@vanguard/sim |
Headless, bitwise-deterministic simulation core — fixed-point integer math only, seeded PRNG, pure advance(World, Orders[]) → World |
@vanguard/game |
Rules projection (INI → typed sim rules), skirmish bot, replay + self-play harnesses |
@vanguard/render |
Three.js isometric renderer — reads sim state, never writes it |
@vanguard/client |
Browser client: boot, HUD, menu, input, and the dev asset server for both modes |
Determinism is enforced by lint rules (no floats, no Math.random, no wall-clock in sim code) and by replay golden-master tests: identical seed + order stream must produce an identical per-tick SyncHash on every platform.
npm test # portable suite (no game files needed)
RA2_DIR=~/path/to/ra2 npm test # + integration tests against your own install
npm run lintSee docs/ROADMAP.md for milestone history and what's next, and CONTRIBUTING.md for the clean-room rules that keep this project publishable.
Copyright (C) 2026 Harshil Mathur and the Vanguard Engine contributors.
GPL-3.0-or-later. Ported code and its upstreams, each GPL-compatible and carrying per-file attribution headers:
- XCC by Olaf van der Spek (GPL-3.0-or-later) — MIX/CRC/Blowfish, SHP/TMP/VXL/PAL/AUD decoders.
- FinalSun/FinalAlert 2 Mission Editor by Matthias Wagner, released under GPLv3 by Electronic Arts — INI tokeniser, map pack codecs, voxel normal tables.
- minilzo-js by Alistair Braidwood (GPL-2.0-or-later) — LZO1X decompression.
The committed original assets are documented in docs/ASSETS.md; to the extent they are copyrightable, they are licensed under the same terms as the project.
This is a non-profit, fan-made, clean-room reimplementation. It is in no way affiliated with or endorsed by Electronic Arts Inc. "Command & Conquer" and "Red Alert" are trademarks of Electronic Arts Inc. No copyright infringement is intended: the engine ships no EA game data — Classic mode requires users to own the original game, and Original mode's committed assets are original to this project.
This project is also not affiliated with the OpenRA project; despite the repository name, it is an independent engine (working codename Vanguard) with its own codebase.


