Skip to content

GeneralsX - 1.0.3

Choose a tag to compare

@github-actions github-actions released this 07 Oct 20:58
· 92 commits to main since this release
0fc17c6

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

  • Multi-Interface LAN Discovery & Slot Desync Resolution: Fixed LAN multiplayer discovery on hosts with multiple network adapters (such as simultaneous wired Ethernet and Wi-Fi). Prioritizes wired Ethernet over Wi-Fi, filters self-echo announcement packets to prevent duplicate name rejections, fans out discovery broadcasts across all active local subnets, and fixes player slot mapping so the "Accept" button remains properly enabled (#346 by @fbraz3).
  • Automated Replay Upload to Cloudflare R2: Integrated automated, asynchronous replay (.rep) upload to Cloudflare R2 storage upon match completion in NGMP multiplayer games, running on dedicated background workers without stalling the main game thread or post-game flow (#355 by @fbraz3).
  • Midgame Combat Telemetry & Random Faction Resolution: Implemented periodic combat progress reporting (at Frame 0 and every 120 seconds) to GeneralsOnline to track live kills, losses, and cash. Automatically resolves active sides from player templates when Random factions are selected, preventing matches from recording unassigned faction data (#353 by @fbraz3).
  • Accurate CRC Desync Telemetry in Match Outcomes: Detects CRC mismatch events at match end to accurately report desync states in outcome telemetry, clearing false win flags and allowing the backend to mark desynced matches with No Result (#361 by @fbraz3).

🎯 Engine, Gameplay & Determinism

  • Cross-Platform Random Faction Determinism: Enforced strict candidate slot locking against Challenge Mode boss factions in multiplayer random pools and initialized persona states, eliminating Frame 0 cross-platform RNG desyncs between macOS, Linux, and Windows clients (#359 by @fbraz3).
  • Mod Archive Precedence Over Stock Loose Files: Prioritized mod archives (!*.big, -mod) over stock loose files in Data/Scripts/, restoring full skirmish AI and custom script compatibility for major mods like Shockwave without requiring manual script renaming (#352 by @fbraz3).
  • Upstream Sync with TheSuperHackers (October 2026): Merged 23 upstream commits from TheSuperHackers/GeneralsGameCode, bringing retail AI attack state compatibility, physics transform interpolation for render updates, terrain deformation scan optimizations, BIG archive timestamp speedups, and particle cannon script crash fixes while maintaining cross-platform deterministic math (#363 by @fbraz3).

🖥️ UI & Quality of Life

  • Configurable Mouse Wheel Zoom Speed: Added the MouseScrollSpeedFactor INI setting to configure mouse wheel camera zoom speed in both Generals and Zero Hour, with SagePatch setting it to 1.0 to match keyboard scrolling smoothness (#344 by @gabrielpetry).
  • Windows GDI Font Awesome Brands Registration: Fixed missing OS platform icons (Apple, Windows, Linux) in the multiplayer lobby under Windows by registering bundled fa-brands-400.ttf directly with Windows GDI and mapping font family names properly (#345 by @fbraz3).

🎨 Graphics & Visuals (DXVK / Vulkan)

  • Null Pointer Dereference Fix in Tree Buffer: Prevented a crash (SIGSEGV) in W3DTreeBuffer::unitMoved during shell maps and occupant redeployment by validating tree model loading, guarding spatial partition inserts, and adding bounds checks across tree rendering routines (#350 by @fbraz3).
  • Decoupled Physics Transform Interpolation: Integrated upstream drawable physics transform interpolation to decouple visual updates from simulation logic steps, improving animation and rendering smoothness (#363 by @fbraz3).

🔊 Audio & Video Subsystems (MiniAudio / OpenAL / FFmpeg)

  • Unified MiniAudio Backend on Linux: Switched the default Linux deployment preset (linux64-deploy) from OpenAL to MiniAudio, establishing MiniAudio as the unified cross-platform audio engine across Linux and macOS and resolving taunt/speech audio starvation in General's Challenge mode (#358 by @fbraz3).
  • Windows MSVC DirectSound Build Compatibility: Fixed dsound.h wave format header compilation errors under MSVC following global WIN32_LEAN_AND_MEAN adoption in the upstream sync (#363 by @fbraz3).

🚀 Platform, Packaging & CI (macOS, Linux, Windows)

  • Windows CI Build Acceleration & vcpkg Cache v3: Bumped vcpkg binary cache prefix to v3 and passed overlay triplets explicitly after a GitHub Actions runner image update, resolving long ~40-minute rebuild cycles back to ~6-minute incremental builds (#362 by @fbraz3).
  • Docker Mount & Workspace Path Hardening: Improved Linux Docker build and configuration scripts with shared mounts and reliable relative path resolution (#344 by @gabrielpetry).
  • Cleaned CMake Configuration for NGMP: Stripped obsolete external reference paths from cmake/ngmp.cmake for cleaner cross-platform library resolution (#343 by @fbraz3).

📱 Ecosystem & Community Ports

If you enjoy GeneralsX, check out these community ports powered by the engine:


Changelog

  • refactor(build): remove external reference paths from ngmp cmake by @fbraz3 in #343
  • feat(camera): configure mouse wheel zoom speed by @gabrielpetry in #344
  • fix(font): resolve and register Font Awesome Brands for Windows GDI by @fbraz3 in #345
  • fix(network): resolve multi-interface LAN discovery and slot desync (#337) by @fbraz3 in #346
  • docs(worklog): sanitize server hostnames and internal domains by @fbraz3 in #349
  • fix(graphics): prevent null dereference in W3DTreeBuffer by @fbraz3 in #350
  • fix(fs): prioritize mod archives over stock loose files by @fbraz3 in #352
  • feat(net): add match progress telemetry and resolved side persistence by @fbraz3 in #353
  • feat(ngmp): implement match replay upload to Cloudflare R2 by @fbraz3 in #355
  • feat(audio): unify Linux audio backend to MiniAudio by @fbraz3 in #358
  • fix(logic): enforce deterministic random faction pool and persona state by @fbraz3 in #359
  • fix(net): report CRC desync status in NGMP match outcome telemetry by @fbraz3 in #361
  • ci(windows): bump vcpkg binary cache to v3 and pass overlay triplets by @fbraz3 in #362
  • chore(sync): merge thesuperhackers/main (10-07-2026) by @fbraz3 in #363

Full Changelog: 1.0.2...1.0.3