Clean-room, open-source RTS engine compatible with Red Alert 2 + Yuri's Revenge data files. Playable with zero game files via a fully original asset mode. GPLv3.
11
stars
169
commits
TypeScript
primary language
Jul 28, 2026
updated

A clean-room, open-source RTS engine compatible with Command & Conquer: Red Alert 2 + Yuri's Revenge data files — playable two ways:
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/client
Requires 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 lint
See 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:
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.
169 commits
TypeScript
91.4%
JavaScript
6.4%
HTML
1.6%
Clean-room, open-source RTS engine compatible with Red Alert 2 + Yuri's Revenge data files. Playable with zero game files via a fully original asset mode. GPLv3.
11
stars
169
commits
TypeScript
primary language
Jul 28, 2026
updated

A clean-room, open-source RTS engine compatible with Command & Conquer: Red Alert 2 + Yuri's Revenge data files — playable two ways:
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/client
Requires 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 lint
See 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:
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.
169 commits
TypeScript
91.4%
JavaScript
6.4%
HTML
1.6%