Command & Conquer Graphics Patcher

Command & Conquer Graphics Patcher is a tool to make rendering in Tiberian Sun, Red Alert 2 and Yuri's Revenge faster.

Which games can be patched?

This works for the latest patched versions, whether they are English or German. Tiberian Sun uses a packed exe, in which I couldn't locate the spot to change. If you have an unpacked exe (like from a NoCD-Patch), this should work, too. I didn't test any other language version.

At the time of release, this project was merely a day old, so if anything does not work, send me a message. This patch is designed to improve rendering in Windows Vista and later. It might not have an effect on earlier versions of Windows, or it might even have a negative impact. This patch is also stupid, because it does not automatically distiguish between OS versions to select the best behavior. Sorry for that, but I won't change it.

Testing showed this patch is working even with mods like Twisted Insurrection for Tiberian Sun and Mental Omega 2.0psi (which is using NPatch). So chances are good it is working for other mods, too.

How to use

Download the patcher and either put in in the same directory as the game or put the game.exe/gamemd.exe file in the same folder as this patcher and run it. The patch is not applied until you apply it explicitly, and it can be undone again using the patcher.

To prevent issues with Windows Vista or later, I recommend to put the patcher into a separate folder and copy the game file into it. Copy it back after patching. Also: Back up your original game file, just to be sure.

You will need the Microsoft .net Framework 4.6 to run this tool. After all files are patched, this patcher will not needed any more.

Inside the archive, you will also find another archive containing the originally released patcher from 2012 for Microsoft .net Framework 3.5.

Background

The dimetric Command & Conquer games use several temporary graphics to draw to. Some of them are allocated in Video RAM, some of them are allocated in system RAM. When the game wants to draw something, the data has to be copied from VRAM to system RAM, which is an expensive operation and it gets more obvious the more objects (units, debris, ...) are on the map. The patch changes the game to not allocate surfaces in VRAM in the first place, so this cannot become an issue.

The following bytes need to be changed. This is not optimized. If you understand the raw assembler instructions, you can optimize it by putting a jmp there.

Game Offset Original Patched
Tiberian Sun 0008AC2F 3C 01 75 0C 90 90 90 90
Red Alert 2 000AA51F 3C 01 75 0C 90 90 90 90
Yuri's Revenge 000BA61F 3C 01 75 0A 90 90 90 90

Credits

The patches solve the problem the same way as it is done by Ares, the Yuri's Revenge expansion dll. The original fix was implemented by DCoder. I applied this solution to TS and RA2 and coded the patching tool around it.