C&C Generals Zero Hour Mod: Disable Superweapons and General Abilities

I have created my first C&C Generals Zero Hour Mod!

Please don’t hate me for this, I know there are some CNC ZH purists out there that are not going to like this … but there are definitely a lot of people that will appreciate it.

The “Problem”

I see people asking all the time on the CNC ZH forums over the last decade, if superweapons and general abilities can be disabled , and generally, they get the usual unhelpful answer NO NO THIS CANNEE BE DONE. Perhaps folks who want this feature are asking because they want to play casually and or just want to alter the experience of the game to build up a nice turtle base, or perhaps they just wanna play mano a mano, without the general abilities. To me this seems like a reasonable desire.

The Mod

This mod gives the game a more Red Alert feel, and, it’s pretty nice. The game is actually in some respects harder, because people can’t trample eachothers bases with superweapons or special general abilities like MOAB.

And trust me, when I play against 7 Hard AI’s it’s a pretty painful lashing, when they are teamed up against you, lets face it, you are probably going to lose your base in the first 20 minutes!

They said it couldnt be done

Well, they said it couldn’t be done for years but I had a little dig around the variables the game uses in FinalBig and exported the science and specialpower init configuration files, and I could see that this was achievable via two ways:

1. Increase the time for a superweapon reload to exceed 4 hours (i.e. the charge time for all superweapons is greater than an entire match).
2. Increase the number of points required to upgrade, effectively graying out all special abilities, for all players, permanently.

Sure, there might be a few things I missed, potentially, but as far as I can see, people who want to play turtle, and, effectively completely change the way this game works to play base builders, well now they can.

No thanks necessary, just sent me a comment if you enjoy the game mod.

Installing the MOD

You can Download the mod here, simply place the two ini files in C:\Program Files (x86)\Steam\steamapps\common\Command & Conquer Generals – Zero Hour\Data\INI and you are good to go.

Lets give it a goooo



Best,
Adam

Playing C&C Generals in 2025 on Windows 10 @ HIGH RES, MAX ZOOM, 0 LAG

So, this isn’t my usual kind of article on haxed. In fact I haven’t been writing on here so frequently. I figured that I could better use my time than simply recording everything I do. More time for learning, discourse, and meditation. However, when it comes to one of my all time favourite games C&C Command and Conquer Generals Zero Hour, I think I am going to make a big exception. Many people will remember trying to install this game on windows 7, and windows xp. It’s not that much fun – mainly because the engine has huge graphics problems, and, the game is zoomed in so much it is almost unbearable. Here is a guide that will help you get the best out of C&C Generals.

This guide will show you how to get these kind of results, 1920×1080 (And up to 4k if you desire). Which you will note are pretty spectacular mainly due to the efforts of the authors of gentool and the probar mod.

1920×1080 to 4K Resolution, Maximum Zoom in and Zoom Out, unlock 30 fps to 100fps+, performance tweaks and more.

Looking pretty tight tight tight general.

What you will need is gentool. The official site can be found here. Apparently the gentool doesn’t work with the latest steam release, and was designed for origin. However if you obtain genpatcher, another community tool designed to make installing gentool and probar easier, it will be able to replace the direct8 dll necessary to unlock high resolution, extended cameraheight, and unlimited FPS. I play on 75fps to 100 fps, however you may note; and this is quite frustrating – in single player skirmish mode the engine is locked to 30FPS.

There is actually a really simple solution to this, use network mode. It seems that the way the games simulation is designed for single player has a static fps ticks clock, it means that if we doubled FPS we only double game speed. For network play, there is some additional complication with the synchronisation of players, and therefore it is possible to unlock the game to much, much higher FPS, 100FPS and beyond.

Unfortunately gentool patcher itself made it so that you only get +100 camera height in network and online play. However I found a way so that players can play both network and possibly online play too, a modified EXE released by the creator of gentool, tucked away on the forums. The reason why the cameraheight is limited in network and online play is the creator of gentool was concerned about cheating, i.e. one player having a significant advantage over the other. The solution to this was to create an exe that was altered, this would mean that if someone is using it, the others players in the network match or online match would also need the exe. So no cheating, because nobody can have an advantage or play without having the same camera height. The modified exe makes it so that the file C:\Program Files (x86)\Steam\steamapps\common\Command & Conquer Generals – Zero Hour\Data\INI\Gamedata.ini is honoured.

Here is a copy of my modified GameData.ini, you can place it in the above directory to increase cameraheight in skirmish, online and network play. Just remember, you also need gentools modified exe, for the overrides to be honored by gentool.

something like the following values are good:

Fixing Zoom (Edit values in C:\Program Files (x86)\Steam\steamapps\common\Command & Conquer Generals – Zero Hour\Data\INI\Gamedata.ini GameData.ini)

CameraHeight = 600.0
MaxCameraHeight = 800.0
MinCameraHeight = 120.0

For your ease, I attach my GameData.ini. Also note, for some people the path may be different to place the file; also check C:\Users\adam\Documents\Command and Conquer Generals Zero Hour Data if you don’t get the expected results.

Download my GameData.ini Configuration

It’s probably better you configure it yourself by editing the file and changing the above referenced lines. Now, that’s the zoom fixed. You will also need to install the gamebarpro and the modified exe. For ease I include all of the necessary files in this zip. But you can find them all on the gentool and genpatcher official forums!

All Necessary Patches (for steam/origin release of C&C Generals Zero Hour)

The above link I compiled all of the different patches I’m using to achieve the results you can see. You can just google the filenames in the archive though, as its understandable you probaly want to download directly from the author/official community sites!

A breakdown of All C&C Patches Zip File
1. CnC_Gen_Gamedata.zip – misc probably not needed tbh
2. ControlBarProZH_V1.2_1920x1080.zip (available from gentool site, or by using genpatcher). Genpatcher will install controlbarpro and gentool.
3. GenPatcher 2.08.zip (auto installer for most recent version of gen patcher+Controlbar).
4. GeneralsZH104MODEXE.zip (Modified EXE for Zoom on Network/LAN/Online Games) note this will only work with the other players if you all use same exe.
5. GenTool_v8.9.zip (latest release of gentool)

Since 4 makes people feel pretty uncomfortable (its an exe, could be dangerous exe), here is official link to the gentool site (the author) of gentool; http://www.gentool.net/download/executables/GeneralsZH104MODEXE.zip

I also included
6. finalbig04.zip and finalbig040b.zip, these are the BIG editor for C&C. Not needed. You can ignore it but if you want to edit/mod the game yourself these are necessary.

I’ve been spending less time modding sins of a solar empire II, I actually have about 15 mods I have authored for that game with several thousand subscribers, which surprised me. Nowadays I’ll be spending a bit more time with CNC and Retro games. But I haven’t given up my sins 2 modding yet either!

So all in all, here is a pretty good summary of everything you need.

OPTION A. Genpatcher 2.08.zip (installs gentool latest v8.9) and also installs controlbarprozH. It should give you option what resolution you want i.e. 1920×1080 or 4K.

OPTION B Alternatively you can install gentool and controlbarprozh seperately, however, I could not get gentool/controlbarpro to recognise my installation as legit. It’s because the steam installer for zero hour is newer than the latest release of gentool it seems.

Install Gentool.v8.9.zip (drop dll in main game path) C:\Program Files (x86)\Steam\steamapps\common\Command & Conquer Generals – Zero Hour, and install the controlbarprozh seperately, also installed to C:\Program Files (x86)\Steam\steamapps\common\Command & Conquer Generals – Zero Hour.


After you have done either A or B, you will also probably want to use the effects/animation lag fix. Someone actually released a big file to patch it, which I did not use but its included in the ultimate zip pack above named 0PatrioLagFix.big. The method I use to fix is by editing the options.ini file in C:\Users\adam\Documents\Command and Conquer Generals Zero Hour Data

Change options.ini as follows to fix patriot missile lag, which is pretty severe because of the FX animations/particle effects and the general weakness of the zero hour engine.

Fixing Severe FX Lag (add to bottom of C:\Users\adam\Documents\Command and Conquer Generals Zero Hour Data\Options.Ini)

DynamicLOD = no
ExtraAnimations = no
HeatEffects = no
MaxParticleCount = 100 

Come to think of it, I think that’s probably why the game in default vanilla zoomed in so much, so that not too much is rendered on screen, but, with all these changes, you can very happily run 1080p or 4k no problems, and im telling you it plays like a completely new game, especially with the controlbar. The old images are all blurry and just generally unpleasant.

I remember as a kid multiple times attempting to fix zoom, resolution, and the other myriad issues for this game and was generally unable to completely get it working nice as I remember playing it older machines. Frankly though Zero Hour was just a temperamental game even in the year 2000. To think this game is almost 25 years old and can play this well is miraculous.

I hope this helps others, enjoy! πŸ˜€ I am so happy to get this game working again nicely and hope you will be too! πŸ˜€

So, I know its not my usual article but I know folks will find this useful who perhaps are less technical and need to get the full lowdown on how to achieve this.

Creating Remote Github Repos at the commandline

In the previous chapter we installed brew and the gh tool so that api commands could be made to github directly. Now, in order to use the gh api binary tool you will need to have brew or be able to install the gh binary thru apt, yum or pkg, or equivalent. In my case I’m using centos9 stream on my desktop and I need to use brew since the default repo does not have it.

First I will authenticate and get my token access setup with gh

[github@localhost ~]$ gh auth login
? Where do you use GitHub? GitHub.com
? What is your preferred protocol for Git operations on this host? SSH
? Upload your SSH public key to your GitHub account? Skip
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org'.
? Paste your authentication token: ****************************************
- gh config set -h github.com git_protocol ssh
βœ“ Configured git protocol
! Authentication credentials saved in plain text
βœ“ Logged in as meepyuser

The gh tool is pretty neat, it allows you to auth via https or ssh to get your key. In my case I already used ssh-keygen to generate my key in ~/.ssh/ and have added it manually, pretty cool though that it will do this for you. Now there is really no excuse not to use the extended gh api features this binary tool provides.

But look at this carefully, we have a problem here; “! Authentication credentials saved in plain text”. This is a serious problem and shouldn’t be ignored, especially on a product environment. If the repo is sensitive it means someone could take control of the repo if they compromise your filesystem. It’s much better to use a credentials store, such as is standard nowadays in most api and opensource software.


Lets install GCM (Git Credential Manager), because it will encrypt the github token we give it rather than storing it in a plaintext file, and even offer 2FA. That way even if the binary is taken over it is most likely the hacker wont be able to do anything with the token without 2FA authentication. This is a really strong way to protect your software repos in your organisation and you probably really shouldn’t be without it under nearly any circumstance; remember security first, functionality second.

Installing Github Credential Manager

So there are a few ways to do this, the two I think are best is either to use your standard repoistory manager (yum), and if that does not provide the package you should try tarball and compile it manually, failing that there is an automation script that github provide that will download all of the dependancies manually.

We are going to show how to do both but I prefer tarball since there is maximum flexibility, control and vision with what is happening ;

Installing GCM Automagically

curl -L https://aka.ms/gcm/linux-install-source.sh | sh
git-credential-manager configure

For more detail refer to the official github repository instructions for GCM here https://github.com/git-ecosystem/git-credential-manager/blob/release/docs/install.md

Installing GCM Manually from Tarball

[github@localhost ~]$ wget https://github.com/git-ecosystem/git-credential-manager/releases/download/v2.6.1/gcm-linux_amd64.2.6.1.tar.gz
[github@localhost ~]$ sudo tar zxvf gcm-linux_amd64.2.6.1.tar.gz -C /usr/local/bin

As above you see the flags -C declaring the local path for the gcm linux binary executable. That’s important, if your not sure use /usr/local/bin or /bin or type echo $PATH to see what path your using already, and use that. Since /usr/local/bin sits outside of the users ~dir ensure you use sudo or the files may not be written.

export GCM_CREDENTIAL_STORE=cache

You will need to add this export line to your .bashrc or .bash_profile so git knows where to store the credentials.

git config --global credential.credentialStore cache

Now we are logged in we can create a brand new public repo on the remote github site;

$ gh repo create php-prime --public --clone
βœ“ Created repository youruser/somerepo on GitHub
  https://github.com/youruser/somerepo

I’m using –clone, so that the github tool will automatically create a local version of the repo already setup on my machine. That’s pretty neat and super convenient if you have a lot of repos to add and don’t want to have to setup each one individually.

Let’s develop our software ‘somerepo’ for ‘youruser’ where somerepo is the repo name on git and youruser is your username path. All repos are in the format of github.com/user/repo for consistency. Github is indeed, very, very easy to use compared with early tools like SVN subversion, some of us like me are going grey and are unfortunately old enough to remember.heheheh

Since the GH tool has already initialise our repo it is just a case of touching our files, writing our code, comitting it and then pushing it to the github remote repo. It’s really simple to do;

[github@localhost php-prime]$ touch mysoftware
[github@localhost php-prime]$ touch find-primes.php
[github@localhost php-prime]$ vim find-primes.php
[github@localhost php-prime]$ git add *
[github@localhost php-prime]$ git commit -m 'just adding some stuff testing gh api'
[master (root-commit) 8a34e61] just adding some stuff testing gh api
 2 files changed, 30 insertions(+)
 create mode 100644 find-primes.php
 create mode 100644 mysoftware
[github@localhost php-prime]$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

[github@localhost php-prime]$ git push --set-upstream origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 32 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 533 bytes | 533.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:aziouk/php-prime.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.
[github@localhost php-prime]$ touch somechange
[github@localhost php-prime]$ git add somechange
[github@localhost php-prime]$ git commit -m 'added a file called somechange'
[master 17e2f29] added a file called somechange
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 somechange
[github@localhost php-prime]$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 32 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 297 bytes | 297.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:aziouk/php-prime.git
   8a34e61..17e2f29  master -> master


Because gh has done the heavy lifting, we can setup a repo with a remote in one line now.

So, that summarises how to install the gh api tool, setup authentication, credentials the credit store, and so on. Remember the credit store cache by default expires tokens used after only 900 seconds. In low medum security settings, or development environments or staging users which are already well locked down, it may be sane and safe to permit greater timelimit for the upper cache expiry, this ca be done like so; either by exporting the GCM_CREDENTIAL_CACHE_OPTIONS as a shell variable; which git runs with or thru the git configuration manually. I recommend the latter. Naturally change 300 to whatever value you would desire. Importantly remembering that if the data is sensitive one has to be careful how long the token expiry is. Certainly for a busy development environment, that has repos with strict permissions already, the security is secured at the user permission level, so the length of the token expiry is irrelevant. This is good, because it means your developers don’t want to murder the administrator of the github devops account. Remember some developers commit a lot, and it is not good practice to use a github user with great scope of permissions, much better to reduce the permissions, and assume that the token indefinitely lasts, that way if it is ever compromised its never a big deal.

export GCM_CREDENTIAL_CACHE_OPTIONS="--timeout 300"
# or
git config --global credential.cacheOptions "--timeout 300"

For more detail on using 2FA with github GCM see https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication

Installing Brew on centos 9

It’s a straightforward process to install brew on centos9. Here is how. First you will want to create a user with sudo.

adduser github
visudo

Then you will want to add something like;

github  ALL=(ALL)       NOPASSWD: ALL

If you want to authenticate maunally when running sudo commands, which might be important in stricter security setups remove the NOPASSWD: section.

On the brew official site you’ll usually find the oneliner install for brew;

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

If you are like me, you will want to inspect something before piping it to bash, or better wget the file yourself to do so;

curl https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh
[github@localhost github]# brew
bash: brew: command not found…

Simply create an alias for the brew binary or alternatively append the new path for brew to your existing shell $PATH variable like so;

    echo >> /home/github/.bashrc
    echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/github/.bashrc
    eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

The .bashrc file is used to execute commands on user login, and is triggered by the su switch or sshd/pamd. you can check your linuxbrew binary path has been added afterwards by typing ‘brew’.

Of course you can add the PATH the old fashioned way in .bash_profile instead if you don’t want to use eval to alias the brew binary; remember adding the whole path means any binaries can be executed there so be mindful of whether you need really need a path export.

export PATH="/home/linuxbrew/.linuxbrew/bin/:$PATH"<br>

It’s pretty simple, in my case I’m installing brew so I can access the github api, which allows a lot more flexibility of the commands I can run compared to the traditional github binary most people use.

Lets install the ‘github gh’ tool for github api like so;

brew install gh

For a successful installation of brew and its toolsets you may also require the development tools group package available on centos9 stream;

sudo yum groupinstall 'Development Tools'

Pretty simples. But handy if your are using an operating system like centos 9 stream which simply doesn’t have a safe official repo like redhat or debian operating systems.