Skip to content

GeneralsX - 1.0.1

Choose a tag to compare

@github-actions github-actions released this 23 Sep 00:14
· 204 commits to main since this release
515b3cf

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) or macOS-GeneralsX.zip (Generals).
  • Linux: Download Linux-GeneralsXZH.flatpak (Zero Hour) or Linux-GeneralsX.flatpak (Generals).
  • Windows: Download Windows-GeneralsXZH.zip (Zero Hour) or Windows-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/ behind LANInterfaceDevice, 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/GameServer submodule remote to the canonical generalsx-project organization (#312 by @fbraz3).

🎯 Engine, Gameplay & Determinism

  • Configurable Skirmish Simulation Tick Rate: Introduced an INI preference (TickRate, GameSpeed, or SkirmishTickRate) in Options.ini and Skirmish.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, and MapReaderWriterInfo) into shared Core/GameEngine/ across Generals and Zero Hour, eliminating duplicate implementations (#321 by @thesuperhackers).
  • Save/Load Transfer Versioning: Fixed version checking logic in xfer methods and corrected kill flag version checks in DamageInfoInput::xfer (#321 by @thesuperhackers).
  • Hierarchical Pathfinder Crash Guard: Fixed a potential crash in Pathfinder::processHierarchicalCell during 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 MessageDelayMS to 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 RallyPointMarker is 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 (branch generalsx-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(), and W3DModelDraw::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.nvidia driver 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:


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