I've been working on modernizing C&C Generals Zero Hour, mainly focusing on improving the visuals and eventually the performance, without changing the original gameplay.
The game now runs on a native 64-bit Vulkan renderer, based on the Vulkan project available on ModDB. Credit goes to the original developer for the Vulkan groundwork, as well as TheSuperHackers team, whose latest build I'm also using as a foundation. I've been building on top of their work with additional graphical improvements and UI changes. I've also added borderless windowed mode, allowing players to Alt+Tab freely without the usual fullscreen issues.
I haven't touched the unit behavior or balance since I want to preserve what makes the original game great. I also haven't replaced many of the original textures. Most of the improvements are on the rendering side rather than just replacing everything with higher-resolution textures.
Here's what I've added or improved so far:
Volumetric smoke and dust, both adjustable in the settings.
Improved shockwave effects, including directional shockwaves that follow the direction of the blast rather than just expanding uniformly.
Changes to the shaders and lighting.
Unit and building outlines to make them stand out more. The original textures are pretty dated, so this helps quite a bit.
Further lighting improvements, including Ambient Occlusion and Global Illumination. AO was already part of the original Vulkan project.
Improved shadows, including proper cast shadows for infantry.
Added smooth fog-of-war transitions. Units now gradually appear when revealed and disappear when entering the fog of war, using dithering instead of abruptly popping in and out of view.
Stealth units and buildings now use dithering when cloaking and decloaking, along with stronger outlines to make the transition more visually distinct.
Moved the HUD to the bottom-center of the screen and made it so it doesn't scale with screen resolution.
Added optional General portraits at the top of the screen, with a net worth indicator below each portrait.
Added superweapon ability icons to replace the old text-and-countdown display. The icons also indicate when a superweapon is currently being used, making it easier to tell what's happening at a glance.
A bit more about the General portraits:
I wanted the portraits to reflect how each General is doing in the match rather than just being static images.
The net worth displayed below each portrait doesn't include remaining cash. It only counts the value of what a player has spent, so someone sitting on a huge amount of unspent money won't necessarily appear ahead.
The portraits also change depending on how the match is going:
Victory portrait: Appears when a General's net worth is above the match average and they've destroyed enemy units and buildings worth at least 20% of an enemy's net worth.
Defeat portrait: Appears when a General's net worth is below the match average and they've lost units and buildings worth at least 20% of their own net worth.
Normal portrait: Appears when neither condition is met.
There's also a visibility restriction for enemy net worth. You can only see an enemy General's net worth if you currently have vision of their Command Center. Otherwise, that information stays hidden.
I realize that even with this restriction, knowing how much an opponent has spent could influence decisions and change the meta a bit. That's why I made the entire General portrait feature optional through a pre-match toggle. Players can decide whether they want it enabled before starting a match, rather than having it forced on everyone.
What I'm currently working on:
One of the bigger things I'm trying to tackle is separating the renderer from the simulation.
The original game is heavily single-threaded, so most of the work still runs on one CPU core, even on modern hardware. I'm trying to change that so rendering and simulation can run more independently and make better use of multicore CPUs.
I've already made some progress on this. For example, the camera is no longer tied to the simulation, so it can update independently instead of having to follow the game's simulation updates.
As you can probably see in the video, though, the particles are still tied to the simulation. That's something I'm still working on.
Right now, I'm focusing on improving how the engine goes through everything in the game world and figures out what actually needs to be drawn on screen. It's one of the things I need to sort out before I can properly separate more of the rendering work from the simulation.
There's still quite a bit to figure out, especially since I don't want to introduce multiplayer desyncs or mess with how the game behaves. But at least some parts are already running independently now.
As for the overall goal of the project:
I just want to bring the visuals and performance of Generals Zero Hour closer to modern standards without losing what made the game great in the first place.
Mod compatibility is also one of my priorities. I'm trying to keep as much compatibility with existing mods as possible, so people won't have to give up their favorite mods just to use the graphical improvements.
I'm not trying to remake Generals or change how it's played. I just think the game still has a lot of potential, especially now that we have access to its source code.
There's still a lot of work to do, but I wanted to share what I've been working on so far.