Open-source project
ammaarreshi/RedAlert2-Mac-iOS-iPad avatar
ammaarreshi/RedAlert2-Mac-iOS-iPad

Red Alert 2 on iPhone and iPad: A Native Port Using the Chrono Divide Engine

Red Alert 2 + Yuri's Revenge running natively on iPhone and iPad. EA never released RA2's source, so this builds on Chrono Divide's from-scratch TypeScript engine — proprietary, used with the author's permission, non-commercial only — wrapped in a Swift/WKWebView shell. Bring your own retail copy; no game assets included.

425 stars56 forksTypeScriptGPL-3.0

At a glance

What is it?
This repository brings Red Alert 2 and Yuri's Revenge to iOS and iPad natively, using the TypeScript Chrono Divide engine wrapped in a Swift shell with WebGL rendering via WebKit's ANGLE-to-Metal path. You must own a retail copy of the game; no assets are included.
Who is it for?
This port is for Red Alert 2 fans who own a retail copy and want to play skirmish on an iPad or iPhone with touch controls. It is not for players expecting online multiplayer or official support from EA.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 53 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why There Is No Official Red Alert 2 Source to Compile

EA released the source code for several Command and Conquer titles in 2020 and again in February 2025: Tiberian Dawn, Red Alert 1, Renegade, and Generals, all under GPL v3 with EA's additional terms. Red Alert 2's engine source was not in either release. The README notes that the engine source is widely believed lost in the community, though that traces to community accounts rather than a statement from EA.

This means the approach used for the Generals-Mac-iOS-iPad sibling project, which compiles EA's actual C++ engine for ARM64, is not available here. x86 emulation of the retail binary, the method CnCNet uses under Wine on desktop, is also not viable on iOS due to the platform's process model.

What exists instead is Chrono Divide: a from-scratch TypeScript reimplementation of Red Alert 2's simulation and renderer, built by the RA2WEB community. This port wraps that engine in a native Swift shell.

Importing Your Retail Assets

No game assets are included in the repository. You must own a retail copy of Red Alert 2 and Yuri's Revenge. The README points to the Steam release of the C&C Ultimate Collection as the source.

The README gives one script to import everything:

sh
./scripts/setup.sh /path/to/your/ra2/install

This imports the retail assets from your installation path. The Yuri's Revenge build bundles approximately 750 MB of assets; the RA2-classic build is approximately 400 MB. Assets ship inside the app bundle and never touch the network at runtime, according to the README.

The Swift Shell and WebKit Rendering Path

The port is a Swift application that hosts a WKWebView containing the built Chrono Divide TypeScript engine. A custom URL scheme handler serves the compiled JavaScript application and game assets from the bundle, so no web server is needed and there is no network dependency at runtime.

Rendering follows the path: WebGL in the engine, then ANGLE, then Metal via WebKit. Apple's WebKit stack includes JIT compilation for JavaScript and the ANGLE translation layer, so this path is available on all modern iOS devices without additional configuration.

First-launch seeding copies the bundled assets into browser origin storage with per-file verification. The README notes that if iOS purges origin storage under disk pressure, the seed process restores the files automatically, which the README calls self-healing.

Touch Controls and Native-Resolution Rendering

The gesture engine translates touch input into the engine's pointer events. The README describes the implemented gestures: one-finger tap for selection, one-finger drag for box selection, two-finger 1:1 map grab for panning, pinch zoom, and long-press for force-attack. Getting pinch zoom to work required unlocking camera zoom in the engine itself and making pan limits zoom-aware.

Rendering uses the logical UI scale multiplied by `devicePixelRatio` as the WebGL backing store size. The README states that an iPad mini renders at 2560x1440 under this scheme instead of an upscaled 1280x720. That higher resolution surfaced input-mapping and shroud-seam bugs that only appear at fractional scales, all of which were fixed in the process.

Mid-match save and load are built on the engine's replay system. A save file is the action log up to the saved tick; loading resimulates it deterministically at maximum speed before handing control back. The README notes that implementing this forced a determinism audit, which found an RNG seed losing millisecond precision in a round-trip through the save format.

Yuri's Revenge: What Was Rebuilt

The Chrono Divide engine had scaffolding for Yuri's Revenge but was not fully playable. The README describes three phases of work to reach a fully playable third faction.

The first phase covered engine-mode plumbing and asset import. The second phase implemented the slave-miner economy: slaves, grinder, and bio-reactor occupancy power, which the README describes as the faction's core loop. The third phase covered faction-specific units and superweapons: Mastermind mind-control with capacity limits, Magnetron vehicle lifting, Tank Bunkers, Cloning Vats, Psychic Dominator, Genetic Mutator, Battle Fortress firing, Robot Tanks with control-center dependency, Boris airstrikes, and berserk gas.

A retail game data compatibility issue the README identifies: the retail `rulesmd.ini` omits approximately 25 `[AudioVisual]` keys that the YR binary hardcodes as defaults. The Chrono Divide engine did not know these defaults, so the first move order in any YR match caused a fatal crash until the engine was updated to supply the retail defaults.

AI and Lighting Work

The stock Chrono Divide bot idled in a defensive posture. The README describes rebuilding the AI around Supalosa's Chrono Divide bot, then extending it with per-match personalities, strategic doctrines, all 132 of the retail game's attack teams, superweapon firing behaviour matching the original AI, and special-unit logic for spies, garrison attacks, terror drones, and unit rosters that shift each game.

A 26-agent lighting and asset audit compared the port's output against retail archive byte-by-byte. The README describes specific divergences found and fixed: map `[Lighting]` ground term applied with the wrong sign, palette lighting multiplied in the wrong color domain (now corrected to gamma-domain math in the shaders), voxel shading rebuilt to the retail model, invisible lamp buildings that should cast light without rendering, and per-country loading-screen palettes that YR changed from RA2.

Repository Layout and What Lives Where

The repository is organized into four top-level directories. `ios/` contains the Swift shell application and WKWebView setup. `redalert2/` contains the built Chrono Divide TypeScript engine and any modifications to it. `scripts/` holds the `setup.sh` asset import script. `docs/` contains additional documentation.

The `AI-USE.md` file at the repository root documents which parts of the work used AI assistance. The `THIRD-PARTY-NOTICES.md` lists third-party components and their terms.

The `.gitignore` excludes the asset directories populated by `setup.sh`, so cloning the repository gives you the shell and engine code but not the game data. The build workflow requires running `setup.sh` first, then building the Xcode project from `ios/`. The first launch seeds asset files into browser origin storage, which the README describes as a one-time process that verifies each file and self-heals if iOS purges storage under disk pressure.

License and Constraints

The repository's own code is licensed under GPL-3.0. The Chrono Divide engine is a separate codebase used with the author's permission under a non-commercial-only term. This means commercial distribution of a build that includes the engine is not permitted. The README also references a `THIRD-PARTY-NOTICES.md` and an `AI-USE.md` file that documents the use of AI tools in the project.

The last push was on 2026-08-08, which is seven weeks before this review. The repository is not archived. There are no GitHub releases; the README does not document a formal release or App Store distribution path, which is expected given the non-commercial engine constraint and the requirement to supply your own retail assets. The README notes that the fork was originally Chinese-language: approximately 38 source files of UI, comments, and developer tools were translated to English by hand, and in-game strings were recovered from the retail `ra2.csf` file. One key was a translator credit that had no English equivalent.

Editorial conclusion

This port is for Red Alert 2 fans who own a retail copy and want to play skirmish on an iPad or iPhone with touch controls. It is not for players expecting online multiplayer or official support from EA. Before sideloading, verify you have a valid Steam purchase of the C&C Ultimate Collection to run the asset import script, and understand that the engine is the Chrono Divide TypeScript reimplementation, not EA's original C++ code. The port has a GPL-3.0 license for its own code but relies on the Chrono Divide engine under a non-commercial-only permission that limits deployment contexts.

Frequently asked questions

Is there a way to play Red Alert 2 on Mac or iPad?

This repository provides a native iOS port that runs on iPhone and iPad using the Chrono Divide TypeScript engine wrapped in a Swift shell. You must own a retail copy of Red Alert 2 and Yuri's Revenge and run the included asset import script before playing.

Is there a Red Alert game available for iPad?

This repository ports Red Alert 2 and Yuri's Revenge to iPad natively with touch controls. There is no official EA release for iPad; this is a community port using the open-source Chrono Divide engine reimplementation.

Can I play Command and Conquer on my iPad?

This repository enables Red Alert 2 and Yuri's Revenge on iPad and iPhone. The sibling project Generals-Mac-iOS-iPad handles C&C Generals on Apple hardware. EA has not published an official iOS app for either title.

Is it possible to play Command and Conquer on Mac?

This repository targets iOS and iPad specifically. The README notes a sibling project, Generals-Mac-iOS-iPad, which ports C&C Generals to Mac and iOS by compiling EA's released C++ engine for ARM64.

Official sources

  1. ammaarreshi/RedAlert2-Mac-iOS-iPad on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ammaarreshi-redalert2-mac-ios-ipad.svg)](https://hysenlabs.com/projects/ammaarreshi-redalert2-mac-ios-ipad)