-
-
Notifications
You must be signed in to change notification settings - Fork 49
Fixing Magenta Textures in Zero Hour
If you launch Command & Conquer: Generals - Zero Hour and observe that vehicles, buildings, terrain, foliage, or UI elements appear with solid bright pink / magenta textures, or if certain unit models and sounds are missing entirely, this guide explains why this happens and how to resolve it.
- Vehicles (e.g. Humvees, Crusaders, Overlords, Technicals), buildings, and infantry render with solid bright magenta / hot pink colors instead of their normal camo or faction skins.
- Terrain, cliffs, and shroud areas appear as solid magenta or missing textures.
- Missing audio lines or speech for base game units.
- Base game works fine when launched separately, but Zero Hour has missing textures.
When this issue occurs, the game log will typically contain hundreds of lines like:
[ASSET_LOAD] Attempting to load shader (PIXEL): file='shaders\terrain.pso'
[ASSET_FAIL] File not found in VFS: normalized_path='shaders/terrain.pso'
[DEBUG] ERROR: Could not find shader file: 'shaders\terrain.pso'
[TEX_MISSING] Could not find texture 'atwall.tga'
[TEX_MISSING] Could not find texture 'avhummer.tga'
[TEX_MISSING] Could not find texture 'ntwalls01.tga'
Note
In the SAGE / W3D engine, magenta RGB(255, 0, 255) is the legacy DirectX 8 fallback color rendered whenever a requested 3D model texture (.tga / .dds) or shader cannot be found in any mounted .big archive or directory.
Command & Conquer: Generals - Zero Hour is an expansion pack, NOT a standalone full game.
When EA released Zero Hour, they did not duplicate all the original textures, 3D models, audio, and terrain assets from the 2003 Command & Conquer: Generals base game. Instead:
-
Zero Hour archives (
TexturesZH.big,INIZH.big,SpeechZH.big,AudioZH.big,Patch0ZH.big, etc.) contain only the new units, generals, campaigns, and modified expansion assets. -
Base game archives (
Textures.big,Generals.big,Speech.big,Audio.big,Music.big,English.big, etc.) contain all original unit textures, structures, terrain tilesets, shaders, and shared engine assets.
When GeneralsX runs Zero Hour, the engine searches for base game assets in three priority locations:
-
$CNC_GENERALS_ZH_PATH(or current Zero Hour directory) -
$CNC_GENERALS_ZH_PATH/ZH_Generals(where Steam puts base assets in standalone ZH installs) -
$CNC_GENERALS_PATH(or../Generals/relative to Zero Hour)
If the base game files are missing, placed in a non-standard folder (e.g. ~/GeneralsData or custom paths) without setting the environment variables, or nested inside extra subdirectories, the engine cannot mount Textures.big and Generals.big, resulting in the magenta textures.
The easiest and cleanest setup is placing both the base game and expansion side-by-side in your home directory under ~/GeneralsX/:
$HOME/GeneralsX/
├── Generals/ <-- Original Command & Conquer: Generals (Base Game)
│ ├── Generals.big
│ ├── Textures.big
│ ├── Audio.big
│ ├── Music.big
│ ├── Speech.big
│ ├── English.big (or Brazilian.big, German.big, etc.)
│ └── ...
└── GeneralsZH/ <-- Command & Conquer: Generals - Zero Hour (Expansion)
├── GeneralsXZH (GeneralsX executable)
├── INIZH.big
├── TexturesZH.big
├── AudioZH.big
├── SpeechZH.big
├── EnglishZH.big
├── Patch0ZH.big
└── ...
GeneralsX automatically searches ../Generals/ and $HOME/GeneralsX/Generals when launched from GeneralsZH/.
Important
Make sure files are directly inside ~/GeneralsX/Generals/ and ~/GeneralsX/GeneralsZH/, not nested inside extra subfolders (e.g. ~/GeneralsX/Generals/Command and Conquer Generals/...).
If your Zero Hour installation came directly from Steam (where base assets are bundled inside a subfolder):
- Inside your Zero Hour folder (
~/GeneralsX/GeneralsZH/), ensure there is a subfolder namedZH_Generals/. - Place the base game
.bigarchives (Textures.big,Generals.big,Audio.big,Speech.big,Music.big) inside thatZH_Generals/directory:
$HOME/GeneralsX/GeneralsZH/
├── GeneralsXZH
├── TexturesZH.big
├── INIZH.big
└── ZH_Generals/
├── Generals.big
├── Textures.big
├── Audio.big
├── Music.big
└── ...
GeneralsX automatically detects and mounts ZH_Generals/ on launch.
If you keep your game files in a custom directory (e.g., on a secondary drive, mounted partition, or custom folder like ~/Games/ or ~/GeneralsData):
Set the CNC_GENERALS_PATH and CNC_GENERALS_ZH_PATH variables before launching:
export CNC_GENERALS_ZH_PATH="/path/to/your/ZeroHour_folder"
export CNC_GENERALS_PATH="/path/to/your/Base_Generals_folder"
cd "$CNC_GENERALS_ZH_PATH"
./GeneralsXZH -winYou can add these exports permanently to your ~/.bashrc or ~/.zshrc.
If you are running the Linux Flatpak package (com.fbraz3.GeneralsXZH):
-
Default paths: The Flatpak sandbox automatically accesses
$HOME/GeneralsX/GeneralsZHand$HOME/GeneralsX/Generals. If your files are there, no extra flags are needed. -
Custom paths: If your game data is stored in another directory, pass the paths via
--env:
flatpak run --env=CNC_GENERALS_PATH="/path/to/Generals" \
--env=CNC_GENERALS_ZH_PATH="/path/to/GeneralsZH" \
com.fbraz3.GeneralsXZH -winTip
If the path is outside your $HOME directory, make sure Flatpak has permission to read that filesystem path (e.g. using Flatseal or flatpak override --filesystem=/path/to/games com.fbraz3.GeneralsXZH).
On macOS, you have two options:
- Place assets in
$HOME/GeneralsX/GeneralsZHand$HOME/GeneralsX/Generals(recommended). - Alternatively, you can place the game assets inside the application bundle itself at:
/Applications/GeneralsXZH.app/Contents/Resources/bin/
Ensure the following essential archives are present:
| File Name | Required By | Description | What happens if missing? |
|---|---|---|---|
Textures.big |
Base Game | All original unit, terrain, and building textures | Bright magenta textures across the map |
Generals.big |
Base Game | Base game 3D models (W3D), INI rules, shaders, maps | Missing terrain/shroud shader (terrain.pso), invisible units |
Audio.big & Speech.big |
Base Game | Original unit voice lines, weapon FX, alerts | Silent base units, missing SFX |
Music.big |
Base Game | Original soundtrack | No background music |
TexturesZH.big |
Zero Hour | Zero Hour expansion textures | Magenta expansion units/generals |
INIZH.big |
Zero Hour | Zero Hour core logic and balance data | Game fails to start |
Patch0ZH.big |
Zero Hour | Expansion 1.04 patches & assets | Version mismatch, missing balance fixes |
-
Issue #203 / #205: Confirmed that when assets are not installed via Steam's
ZH_Generals/layout, Zero Hour requires explicit base game folder detection via~/GeneralsX/GeneralsorCNC_GENERALS_PATH. -
Issue #219 / #220: Confirmed that copying assets to arbitrary directories (like
$HOME/GeneralsData) without settingCNC_GENERALS_PATH/CNC_GENERALS_INSTALLPATHcausesshaders\terrain.psoand texture VFS lookup failures, turning terrain magenta. -
Linux Case Sensitivity: Linux file systems (
ext4,btrfs,zfs) are case-sensitive. Verify archive extensions are not mixed (e.g., avoid.BIGvs.biginconsistencies). -
Corrupted Archives: Ensure
Textures.bigis ~380–400 MB andGenerals.bigis ~330–350 MB (not 0-byte or truncated).