Repository navigation
GeneralsX - 1.0.1
If you run into any problems, please open an issue so we can investigate.
Getting Started
GeneralsX lets you play Command & Conquer: Generals and Zero Hour natively on modern systems with cross-platform online multiplayer.
📦 Which file should I download?
- macOS (Apple Silicon): Download
macOS-GeneralsXZH.zip(Zero Hour) ormacOS-GeneralsX.zip(Generals). - Linux: Download
Linux-GeneralsXZH.flatpak(Zero Hour) orLinux-GeneralsX.flatpak(Generals). - Windows: Download
Windows-GeneralsXZH.zip(Zero Hour) orWindows-GeneralsX.zip(Generals).
👉 Follow the Installation & Setup Guide on our Wiki to set up your original game data files.
🌐 Cross-Platform Multiplayer
Zero Hour includes built-in online lobbies via GeneralsOnline (NGMP). Players on macOS, Linux, and Windows can host, join, and play together without GameSpy, Hamachi, or third-party VLAN tools.
What's New
🌐 Cross-Platform Multiplayer & Networking
- NGMP Session Token Renewal & Live Player Count: Added automatic, transparent session token renewal on HTTP 401 Unauthorized during extended matches and bound the Zero Hour welcome screen's online player counter directly to real-time NGMP backend state (#320 by @fbraz3).
- LAN & Online Host IP Selection (POSIX / Linux): Added active carrier checks (
IFF_RUNNING) and filtering for Docker user bridge interfaces (br-<hex>), ensuring the game selects the true host LAN/WAN IP rather than unreachable virtual bridge addresses (#307 by @beckren). - POSIX LAN Interface Architecture: Refactored POSIX interface enumeration and broadcast address discovery into
Core/GameEngineDevice/behindLANInterfaceDevice, cleanly decoupling OS networking headers from game logic (#313 by @fbraz3). - LAN Game Room Stability: Prevented LAN game room hangs caused by player names exceeding buffer bounds by ensuring bounded UTF-8 encoding across player slots (#321 by @thesuperhackers).
- GeneralsOnline GameServer Remote Migration: Updated the
references/GameServersubmodule remote to the canonicalgeneralsx-projectorganization (#312 by @fbraz3).
🎯 Engine, Gameplay & Determinism
- Configurable Skirmish Simulation Tick Rate: Introduced an INI preference (
TickRate,GameSpeed, orSkirmishTickRate) inOptions.iniandSkirmish.ini, allowing players to customize offline Skirmish game simulation speed between 5 Hz and 120 Hz without altering rendering FPS or desyncing multiplayer matches (#314 by @fbraz3). - Cross-Platform Determinism & Crater Safety: Guarded crater creation math with finite coordinate validation (
std::isfinite), clamped bounds against map extents before floor conversions, and eliminated index overflow risks across ARM64 (macOS) and x86_64 (Linux/Windows) simulation environments (#321 by @fbraz3). - Upstream Map Subsystem Unification: Unified map subsystem classes (
SidesList,PolygonTrigger,TerrainLogic, andMapReaderWriterInfo) into sharedCore/GameEngine/across Generals and Zero Hour, eliminating duplicate implementations (#321 by @thesuperhackers). - Save/Load Transfer Versioning: Fixed version checking logic in
xfermethods and corrected kill flag version checks inDamageInfoInput::xfer(#321 by @thesuperhackers). - Hierarchical Pathfinder Crash Guard: Fixed a potential crash in
Pathfinder::processHierarchicalCellduring complex pathing calculations (#321 by @thesuperhackers). - Replay Playback Mismatch Warnings: Replaced ambiguous live multiplayer desync warning strings during replay playback with clear, dedicated replay mismatch diagnostic alerts (#322 by @arazmj).
- Detailed Nested INI Diagnostics: Preserved nested exception details, file paths, and line numbers during INI parsing failures, with explicit numeric conversion error reporting (#323 by @arazmj).
- Startup INI Failure Safety: Resolved startup INI parsing failures and preserved working directory integrity on Linux Flatpak runtimes (#308 by @fbraz3).
🖥️ UI & Quality of Life
- Steam "Custom Mission" Menu Support: Activated the retail "Custom Mission" solo play menu option for Steam asset installations, allowing players to directly load and play custom maps from their
Maps/directory without overwriting campaign files (#316 by @fbraz3). - Resolution-Scaled HUD Cards Restored: Removed horizontal aspect-ratio compression on ultra-wide and high-resolution displays, restoring crisp and proportionally accurate command cards, build queues, and unit portraits (#319 by @arazmj).
- HUD Message Delay Frames: Converted
MessageDelayMSto logic frames so customized HUD message durations in INI settings take effect as intended (#321 by @thesuperhackers). - Control Bar Rally Point Safety: Guarded against null pointer crashes when displaying rally points if
RallyPointMarkeris not defined in custom or mod INIs (#321 by @thesuperhackers).
🎨 Graphics & Visuals (DXVK / Vulkan)
- DXVK Subproject Organization Migration: Updated the DXVK translation layer repository URL to
generalsx-project/dxvk(branchgeneralsx-macos-v2.6) and ensured clean dependency clones during builds (#311 by @fbraz3). - Rendering & Model Draw Safety: Prevented null pointer dereferences in
W3DTerrainVisual::loadRequire(),PointGroupClass::RenderVolumeParticle(), andW3DModelDraw::handleClientRecoil(), alongside particle alignment enum optimizations for rendering batches (#321 by @thesuperhackers). - Aliased String Setter Safety in WW3D2: Prevented memory corruption during texture and material setup by copying string inputs before freeing storage in WW3D2 (#321 by @thesuperhackers).
🔊 Audio & Video Subsystems (MiniAudio / OpenAL / FFmpeg)
- Audio Subsystem Stability & Parity: Maintained strict cross-platform parity across macOS, Linux, and Windows for both OpenAL and MiniAudio backends throughout the upstream engine synchronization (#321 by @fbraz3).
🚀 Platform, Packaging & CI (macOS, Linux, Windows)
- Flatpak NVIDIA Driver Diagnostics: Added automatic detection for NVIDIA GPU hardware in Linux Flatpak runtimes, emitting actionable diagnostics if the matching
org.freedesktop.Platform.GL.nvidiadriver extension is missing from the sandbox (#317 by @fbraz3). - generalsx-project Organization Migration: Migrated CI test asset repositories, replay verification suites, and submodules to the dedicated generalsx-project organization (#310, #311, #312 by @fbraz3).
- Automated NGMP Integrity Review: Integrated an automated CodeRabbit pre-merge check to enforce Next-Gen Multiplayer protocol invariants across all PRs (#318 by @fbraz3).
- Documentation & Release Modernization: Streamlined project README to highlight cross-play, updated setup guides on the wiki, and modernized release note generation templates (#324, #326 by @fbraz3).
📱 Ecosystem & Community Ports
If you enjoy GeneralsX, check out these community ports powered by the engine:
- Generals-Mac-iOS-iPad - iOS port by @ammaarreshi
- Generals-Android - Android port by @fadi-labib
- wasm-generals - Browser port by @ebellumat, playable at generals.wasm.com.br
Changelog
- fix(network): ignore carrier-less and Docker bridge interfaces for local IP by @beckren in #307
- fix(assets): resolve startup INI failure and preserve Flatpak paths (#305) by @fbraz3 in #308
- ci: update test assets and replay repos to generalsx-project org by @fbraz3 in #310
- build(dxvk): update dxvk repository url to generalsx-project org by @fbraz3 in #311
- chore(network): update generalsonline gameserver submodule url to generalsx-project org by @fbraz3 in #312
- refactor(network): move POSIX LAN interface logic to GameEngineDevice by @fbraz3 in #313
- feat(engine): add configurable skirmish simulation tick rate via ini (#281) by @fbraz3 in #314
- feat(ui): enable steam custom mission menu option in main menu by @fbraz3 in #316
- fix(flatpak): detect and warn on missing NVIDIA driver extension by @fbraz3 in #317
- ci(coderabbit): add ngmp protocol integrity check by @fbraz3 in #318
- fix(ui): restore resolution-scaled HUD cards by @arazmj in #319
- fix(ngmp): refresh session token on 401 and bind online players count by @fbraz3 in #320
- chore(sync): merge thesuperhackers/main (release weekly-2026-09-18) by @fbraz3 in #321
- fix(replay): clarify playback mismatch warnings by @arazmj in #322
- fix(ini): retain nested parse error details by @arazmj in #323
- docs: streamline README and highlight cross-play by @fbraz3 in #324
- ci(release): modernize release notes and guides by @fbraz3 in #326
Full Changelog: 1.0.0...1.0.1