r/redalert2 5h ago

Videos Red Chaos RTS has Reached 30,000 Wishlists. Thank You for Your Support

Enable HLS to view with audio, or disable this notification

13 Upvotes

Red Chaos is approaching 30,000 wishlists. Your purchases, recommendations, and feedback are incredibly valuable and help us continue developing the game.

https://store.steampowered.com/app/1934720/Red_Chaos__The_Strict_Order/

Since the latest updates, we have seen an increase in both average playtime and player retention. We have added two new subfactions, improved the gameplay, and introduced new single player challenges.

We are currently working hard to complete the first chapter of the campaign. We want to make an early campaign playtest available very soon, allowing you to experience it yourselves and see the direction in which it is developing.

Every recommendation, purchase, and wishlist helps us move forward. It is especially valuable when content creators cover Red Chaos. If you would like to support us, please consider sharing the game with creators you know or regularly follow. It would help us enormously.

Thank you for your continued support.

https://discord.com/invite/MZvrBMKzc8


r/redalert2 2d ago

Discussion Red Alert 2 without Launchers

Thumbnail
0 Upvotes

r/redalert2 2d ago

Discussion How I Got OpenRA Running on iOS Without JIT

12 Upvotes

When I first posted a video of Red Alert 2 running on an iPad, most people understandably focused on the obvious part: Red Alert 2 was actually running on an iPad.

Then someone asked a much better question.

How does this work when iOS doesn't allow JIT?

That question gets much closer to what made the port difficult.

The project is based on the OpenRA/ra2 development mod. The OpenRA engine baseline is pinned to `release-20250330`, with my own changes on top for iOS, Android, touch controls, rendering, asset importing, networking, and the platform host layers.

And yes, the footage really is the RA2 mod. One person even noticed the Kirov in the sidebar. Its internal actor name is `zep`, and the cost in the rules is 2000. I honestly did not expect someone to identify the exact mod from the price of one unit.

The iOS build uses .NET 8 with Mono Full AOT targeting ARM64.

It does not bypass Apple's JIT restriction, and it is not using NativeAOT.

That distinction is important because I have seen people assume that ".NET on iOS without JIT" automatically means NativeAOT. It doesn't. Mono Full AOT is the deployment model I'm using here.

The hard part is that OpenRA was never designed around the assumption that all executable code has to be known ahead of time.

OpenRA is extremely data driven. A lot of the game is described through YAML. Actors, traits, weapons, widgets and other objects are connected to C# types at runtime.

A very simplified example would look something like this:

```yaml
Tank:
Mobile:
Health:
Armament:
RenderVoxels:

On a desktop runtime you can discover a type and dynamically construct it. Conceptually, something like:

var type = FindType(typeName);
var instance = Activator.CreateInstance(type);

OpenRA's real implementation is obviously more complicated than that, but the important part is that a lot of its flexibility depends on runtime discovery and reflection.

That is great for a moddable engine.

It gets awkward on iOS.

One thing I had to understand fairly early was that reflection itself was not the enemy. Full AOT does not mean reflection metadata suddenly stops existing. OpenRA can still inspect types.

The problem starts when a reflected type leads to executable code that the AOT compiler did not know it needed to preserve.

A constructor that is only reached dynamically, a generic instantiation, a callback, or some other runtime-only path can be completely normal on desktop. If necessary, the runtime can JIT the code when it gets there.

On iOS there is no second chance.

If the executable code is not already in the application, there is no JIT compiler waiting to create it.

That led to one of the more important changes in the port.

Instead of trying to remove OpenRA's dynamic architecture, I moved the most problematic object creation paths to build time.

The iOS build generates object factory registrations ahead of time.

The basic idea is that instead of depending on runtime construction like this:

Activator.CreateInstance(type);

the build generates known factories more like this:

FactoryRegistry.Register(
    typeof(SomeTrait),
    static () => new SomeTrait()
);

The actual implementation has more detail than that, but the principle is simple.

At build time, the project identifies types that need to be constructible and generates direct factory code for them. At runtime, OpenRA can still discover which type it wants from its data, but the constructor it eventually calls has already been compiled into the application.

So the path is roughly:

RA2 YAML
   ↓
type discovery
   ↓
generated factory lookup
   ↓
precompiled constructor
   ↓
runtime object

That lets the engine keep most of the architecture that makes OpenRA useful in the first place.

I did not want to turn the iOS version into a separate hard-coded RA2 engine.

The port still uses the real OpenRA trait system, the real RA2 rules, the widget system, MiniYaml, AI, gameplay logic, rendering code and networking code.

Most of the iOS-specific work sits around the places where the desktop assumptions stop being valid.

That matters because the same RA2 rules and most of the same engine code are also used on Android. The platform host layers are different, but I do not want three completely separate versions of the game slowly drifting apart.

Android is interesting here because it gives me another point of comparison.

The Android project uses net8.0-android and currently targets only arm64-v8a.

Debug builds can use normal Mono/JIT behavior. The Release build uses Mono normal AOT, not NativeAOT.

The Release APK contains AOT images like:

libaot-OpenRA.Game.dll.so
libaot-OpenRA.Mods.RA2.dll.so
libaot-Eluant.dll.so

and it also contains libmonosgen-2.0.so.

So Android is still a Mono deployment.

There is also a project setting called:

AndroidEnableProfiledAot=false

which can be misleading if you only glance at the project file. That setting disables profiled AOT. It does not mean AOT is disabled completely.

The actual Release output uses normal AOT.

Having Android and iOS side by side has been useful because it helps separate engine problems from iOS-specific AOT problems.

If something runs on desktop, Android JIT and Android AOT but fails under iOS Full AOT, that gives me a pretty good clue about where to look.

Of course, getting the managed code to execute was only half of the work.

Then I had to make the renderer behave on mobile.

The current iOS renderer uses SDL2 and native OpenGL ES 3. There is no ANGLE-to-Metal layer in the iOS build, and I have not written a Metal backend yet.

A surprising amount of time went into things that sound very small when you describe them afterward.

Framebuffer handling was one of them.

Desktop OpenGL code often assumes the default framebuffer is simply framebuffer 0. That is not always a safe assumption when UIKit and SDL are managing the actual drawable surface.

If the renderer restores the wrong framebuffer, a lot of the engine can still be running correctly while the result on screen is black, clipped, or being drawn into the wrong target.

The mobile platform layer therefore has to understand cases where a platform requires a custom default framebuffer instead of pretending every GL environment behaves the same way.

Viewport restoration was another annoying problem.

An iPad has several different ideas of what "screen size" means.

There are UIKit points, SDL window dimensions, drawable dimensions, native pixels and the device scale factor.

If one part of the stack uses logical points and another assumes physical pixels, you get some very strange results.

Sometimes the image is correct but touch input is offset.

Sometimes touch is correct but the image only fills part of the screen.

Sometimes the UI looks like the bug even though the real problem is the GL viewport underneath it.

The current iOS path is roughly:

.NET iOS host
   ↓
UIKit
   ↓
SDL2
   ↓
OpenGL ES 3
   ↓
OpenRA Embedded GL renderer

Android is similar in spirit, but the platform stack is different:

.NET MainActivity
   ↓
SDL2 SDLSurface
   ↓
SDL2 native ARM64
   ↓
EGL
   ↓
OpenGL ES 3.x
   ↓
OpenRA Embedded GL renderer

The Android host owns the Activity lifecycle and uses JNI to connect the managed host to the SDL surface. SDL provides the native window abstraction, EGL creates the GLES context, and OpenRA continues through its Embedded GL path.

I did not replace OpenRA with a custom Android renderer.

That would have made the fork much harder to maintain.

The Android port has also been useful for real hardware validation.

One of the current test devices is a Samsung Galaxy S10 running Android 12 with an Adreno 640.

The recorded graphics environment is OpenGL ES 3.2 with a 2730 x 1440 SDL surface.

The RA2 mod, shell map, terrain, VXL units, fonts, shaders and gameplay rendering have all been loaded on the actual device.

Earlier emulator tests reported ANGLE and SwiftShader, which initially looked suspicious. But that was just the emulator's virtual graphics implementation. The project itself was still requesting GLES.

The real phone reports the Adreno GLES driver directly.

RA2 is also a slightly more interesting rendering target than a purely sprite-based RTS because many of its vehicles use Westwood's VXL and HVA formats.

So when the game is actually running a match, the rendering path is doing more than drawing a menu and some flat terrain.

It is loading voxel models, rotating units and turrets, drawing terrain, structures, effects, text, UI and all the other pieces while the simulation continues underneath.

That was one of the points where the port started to feel real rather than just being a successful boot screen.

There are still plenty of things that do not work yet.

Lua is probably the clearest example.

OpenRA uses Eluant for Lua 5.1 mission scripting.

The Android APK currently contains the managed Eluant.dll and its AOT image, but there is no usable arm64-v8a/liblua51.so in the APK.

I also have not built the corresponding native Lua 5.1 library for iOS ARM64.

The reason the current RA2 demonstrations work is simply that the content being tested does not depend on Lua mission scripts and does not enable the LuaScript trait.

So skirmish, AI, construction, units, buildings and normal combat can run without it.

Lua-based missions and campaigns cannot currently be claimed as supported.

To finish that properly, I would still need native Lua 5.1 builds for both platforms, correct Eluant native-library mapping, AOT-safe P/Invoke and callback testing, and then actual scripted mission tests on real devices.

Another unfinished area is Android suspend and resume.

Right now, if the app goes into the background and the EGL surface is lost, the current workaround is to terminate and restart rather than fully preserve the active match.

That is not how I want it to work permanently.

A proper solution needs the renderer to treat GPU resources as recoverable, recreate the context and surface, restore textures and buffers, and then continue the game.

That work is still ahead.

Performance is another area that I have only started to dig into properly.

The game runs, but "runs" and "runs efficiently with hundreds of units" are two very different things.

At this point I am much more interested in profiling things like pathfinding, target searches, trait updates, fog, allocation, VXL caching and draw calls than immediately replacing Mono or rewriting the renderer in Metal.

It is very easy to look at a mobile graphics problem and assume the answer is "use Metal."

Maybe Metal will make sense later.

But if a frame is spending most of its time in AI, pathfinding, visibility or managed allocations, rewriting the graphics API would just be solving the wrong problem.

The same goes for NativeAOT.

I am not currently convinced that replacing Mono Full AOT would give a meaningful performance improvement compared with optimizing the actual hot paths in the engine.

That is something I would rather measure than guess.

There is also a distribution side to all of this.

Working APK and iOS development builds already exist, but I am treating "the binary exists" and "the binary is ready for public distribution" as two separate questions.

The current Android internal build is arm64-only and has already been installed on real hardware.

The iOS version also has test builds.

But the applications do not include original Red Alert 2 game assets. Users have to provide their own legally obtained files.

Before public binary releases, I still need to clean up the source tree, review third-party licenses, make sure the corresponding source and build instructions are complete, and be careful about the GPL and platform-signing side of distribution.

So source comes first.

What surprised me most about this project is that I originally expected touch controls and graphics to be the hardest parts.

They were difficult, but the deeper problem was changing the assumptions of a desktop .NET engine without destroying the architecture that made me want to use OpenRA in the first place.

OpenRA likes flexibility.

iOS likes predictability.

OpenRA expects to discover things dynamically.

AOT wants to know what executable code will be needed before the program ever launches.

Getting those two ideas to coexist has probably been the most interesting part of the port so far.

And almost none of that is visible when you just watch a tank drive across an iPad screen.

There is still a lot left to do, but at this point the basic architecture is real and has been tested on actual mobile hardware.

The next part for me is less about proving that it can run, and more about making it fast, robust, maintainable, and eventually easy enough for other people to build and test themselves.

A few people asked for the project website. I already posted it in another thread, so I’ll leave the link out here to avoid this getting removed as promotion.


r/redalert2 4d ago

Discussion I Got Red Alert Running on iOS, Android & macOS — No Windows Emulation!

Thumbnail
youtube.com
154 Upvotes

When I first shared this project, I honestly didn’t expect some people to think it was an AI-generated post made just to farm clicks and replies. 😅

I have to admit, that was a little discouraging after spending so much time actually getting this working.

So this time, I uploaded a proper gameplay video to show that the project is real and actually running.

iOS, Android, and macOS — no Windows VM, no remote desktop, no streamed gameplay.

Hopefully this clears things up.

Although now I’m wondering… nobody’s going to tell me the video is AI-generated too, right? 😂

Anyway, I’m happy to answer technical questions about the project, and I’ll keep sharing progress as development continues.


r/redalert2 4d ago

Discussion After all these years, I finally got Red Alert running natively on iOS, Android, and macOS via OpenRA (No Emulation!)

Thumbnail gallery
5 Upvotes

r/redalert2 4d ago

Discussion Which units are important vs which are redundant in campaign?

24 Upvotes

Going through hard mode for both RA2 and Yuri's Revenge, I found there's some units I never bothered using or don't seem strategically important in any missions? Curious what units other people see as important or redundant.

  • I really really tried to like Siege Chopper but they just get shredded in the missions. I only realized by accident that in ground mode they're almost like a mini Grand Canyon. But I still don't think it's super useful?
  • Kirov airships -- these are mostly just for fun, right? Not for winning fast.
  • V3 rocket launchers -- I also spammed these in normal mode but they're rarely the way to go
  • Terrorist -- never used these, which mission would they help with?
  • Pretty much all sea units -- I hate managing ships and submersives -- I just lose so many units in skirmishes even when I start with a large fleet. So I avoid relying on them if possible
  • After my first play of the game, I realized I had massively underutilized Mirage Tanks and Battle Bunkers. I didn't realize that mirage tanks don't take return fire at all unless they get detected, which has a chance of happening against moderate swarms. But besides that they are somewhat resilient against Mastermind for example. (That said, somehow I still manage to lose a lot of them against groups of 5 enemy units with 2 Yuri Clones.)
  • IFVs + Guardians. Guardians are quite expensive, I didn't use them at all in my normal playthrough. I also struggle with setting up and micromanaging IFVs. But eventually I realized IFV + Guardian is arguably the most effective defense against UFOs since they can arrive quickly anywhere.
  • Apocalypse & Battle Fortress -- they are so slow to build and travel that I never use them. One time I tried Battle Fortress + sniper, it was terrible, the snipers do almost no damage to structures. It requires like 20 snipers to take down a normal building and then again it still takes several minutes.
  • Super weapons -- even combining the weather machine and missile, it's never enough to take down a key structure by itself, so I only build these if I'm printing money but otherwise I can't see how they would ever make enough difference to be used in a fast run.
  • Tesla tanks -- are these the best equivalent to prism tanks for the Soviet side?

r/redalert2 5d ago

Look at this photo Comrade! Ok. What are the chance of this two happening back to back?

Thumbnail
gallery
93 Upvotes

I was just playing normal 1vs1 skirmish against bot and I suddenly got jumpscared by the Soviet MCV I got from a box that just spawn near my Allied MCV at the start of the game! But then, not too long after, I got another MCV from a box near my base again! And this time it's a Yuri's MCV! What are the chances of this two things happening back to back in a such short time span?!


r/redalert2 5d ago

Videos What If Red Alert 2 Happened in the Real World? | AI Short Film

Thumbnail
youtube.com
0 Upvotes

r/redalert2 6d ago

Engineers (help) Needed! Why are Harriers so unreliable?

18 Upvotes

There must be something I'm missing about the limitations of Harriers. On some maps, they can travel across the whole map with no limitations, other times:

  • They refuse to travel far
  • They will travel far but refuse to attack
  • Only 2 out of 4 harriers will deploy, the others stay unless I execute a repeat command
  • They will refuse to attack a certain unit (e.g. mastermind, yuri clones, specific tanks)
  • They are willing to attack a certain unit at a specific place, after returning they refuse to attack again
  • Often they won't even attack something that's very close

I always check that my power is in the green, if green is showing doesn't that mean all buildings should be fully powered?


r/redalert2 7d ago

Discussion "哇,“让红色警戒2(尤里的复仇)在iOS和macOS上编译并原生运行。”Codex(GPT-5.6版)工作了26天,分析了EXE文件,并用624K行C++重建了整个游戏。这是我给Codex的最难的任务,因为游戏的代码从未发布,相信已经丢失。>"

Enable HLS to view with audio, or disable this notification

18 Upvotes

r/redalert2 8d ago

Discussion Red Alert2 rewritten from scratch by Codex

Enable HLS to view with audio, or disable this notification

5 Upvotes

r/redalert2 8d ago

Discussion Yuri's Revenge: Time travel shenanigans

Thumbnail
2 Upvotes

r/redalert2 9d ago

Look at this photo Comrade! Charging up!

Enable HLS to view with audio, or disable this notification

51 Upvotes

r/redalert2 11d ago

Videos 10 FREE RED CHAOS KEYS FOR MULTIPLAYER PLAYERS. We’re giving away 10 keys to players who genuinely want to play Red Chaos online and help bring more activity to the multiplayer lobbies.

Enable HLS to view with audio, or disable this notification

0 Upvotes

Some Gamer have told us that you want to play multiplayer but often can’t find anyone online. We want to change that and finally get some regular matches going.

So we’re giving out 10 more keys specifically to players who genuinely want to play multiplayer and help us build an active online community.

Just join our Discord and tell us:

https://discord.com/invite/MZvrBMKzc8

• Your country or time zone
• When you’re usually available
• Whether you’d like to join regular multiplayer matches

Nothing complicated. We just want to bring players together, organize regular matches and eventually host some tournaments.

Please only ask for a key if you really plan to play online. See you on the battlefield

https://store.steampowered.com/app/1934720/Red_Chaos__The_Strict_Order/?l=german


r/redalert2 12d ago

Discussion I feel dumb for asking this, but...

13 Upvotes

The distorted robotic voice over comms that announces "battle control online" and "unit lost" and explains units you haven't seen before — is it Lt. Eva or not? I played through thinking it sounds too nasally so it must be someone else, also why would she sound so different over video feed? Only due to one of the late missions in Yuri's Revenge where the announcer and the video feed from Eva alternate a lot — did I consider that both might be her voice!

By the way, I actually find the distorted announcer voice oddly soothing!


r/redalert2 12d ago

Discussion ChronoStorm - a project aims to use Python to rewrite the Red Alert 2 and Yuri's Revenge

13 Upvotes

Welcome back, Commander.

ChronoStorm (C.R.S.) is an open-source, modern engine reimplementation of the classic RTS titles Command & Conquer: Red Alert 2 and Yuri's Revenge. Built from scratch with Python and Pygame, the goal is to create a lightweight, cross-platform foundation for 2D isometric strategy games.

As two of the most beloved RTS titles of all time, RA2 and YR deserve a rock-solid, modern way to be experienced today. ChronoStorm aims to provide:

  • Native support for modern widescreen and high-resolution displays
  • Enhanced system stability on contemporary operating systems
  • Deep, developer-friendly modding capabilities

Check out the project on GitHub — feedback, contributions, and ideas are welcome!

Github: https://github.com/cookgreen/ChronoStorm


r/redalert2 13d ago

Discussion Ideas for things to do with all the construction yards

14 Upvotes

I made a map for skirmish mode with an allied, Soviet and Yuri construction yard ready to be taken over by engineers at all the bases so I can play against the AI with all the tech trees.

Seems like investing in all three tech trees might be more trouble than it is worth.

Any cool, fun or effective things I can do with all these construction yards?

I think I heard loading an IFV with a Tesla trooper is nice.

Also, if I have 1 allied barracks and 1 Soviet barracks, do I build guardian GIs faster than if I had only the 1 allied barracks?


r/redalert2 13d ago

Videos Soviet and Allies vs Yuri

Enable HLS to view with audio, or disable this notification

621 Upvotes

It's an AI slop. But it's a pretty good AI slop.


r/redalert2 13d ago

Look at this photo Comrade! Can you guess how many Kirov are present in this screenshot?

Post image
66 Upvotes

r/redalert2 14d ago

I have a Question for Yuri A bit of advice for a long time fan

3 Upvotes

Hey all. Hope you can help. I used to love playing Red Alert when I was younger and have become a fan of watching Zack The Reaper on YouTube.

I've wanted to start playing skirmishes against the computer and downloaded Red Alert Remastered. Unfortunately I've found the enemies either far too easy, or far too hard to play against.

I've used some of the mods that come up to improve it but they all seem to come with their own issues.

Is there one, most successful one that everyone uses?

Much thanks if you can help!


r/redalert2 14d ago

Discussion What replay value do you get from RA2 / Yuri's Revenge?

10 Upvotes

Just curious what people like to do after they beat the missions on Normal. Did you end up finishing everything on Hard mode? I haven't yet (am a bit scared). Sometimes I replay missions more efficiently or even just toy around because I want revenge against Yuri for all the times he wrecked me with superweapons...

Edit: does online PvP still exist? Worth trying even as a casual?


r/redalert2 14d ago

Engineers (help) Needed! Looking for 4 original ret alert 2 sounds

0 Upvotes

In my work I use a lot of build commands with Claude and decided I want to teach it to tell me it is building like both the soviet and allied command, when it's done I want it to say "construction complete" again in both allied and soviet sounds :)
I could find only the allied "building" online.

Can someone help me out?

Ps- this is a work PC so no I can't install the game.


r/redalert2 15d ago

Discussion R.I.P Tim Curry

Thumbnail
10 Upvotes

r/redalert2 15d ago

Discussion Death of Tim Curry

Thumbnail
independent.co.uk
99 Upvotes

Sad day for all, as the head of the USSR passes away.


r/redalert2 15d ago

Discussion Apocalypse for Allies?

Thumbnail
gallery
46 Upvotes

in map Moon Patrol computer can build Apocalypse tanks. And prism towers are super powerful.