Skip to content

GeneralsX - 1.0.4

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Oct 19:51
· 2 commits to main since this release
ddbfd13

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

  • Multiplayer Socket & Connection Cleanup: Sockets that fail to bind are now properly closed, lobby players are deleted when leaving the lobby, and disconnect chat messages are safely released after transmission (#370 by @fbraz3).
  • LAN Memory Leak Fixes: Resolved GameInfo memory leaks in LANAPI::OnGameStart() and LANAPI::RequestGameLeave() (#370 by @fbraz3).

🎯 Engine, Gameplay & Determinism

  • Early Mod Mounting Support: -mod command-line archives are now mounted before GameData.ini is parsed, ensuring custom shell maps, weapon bonuses, camera heights, and AI difficulty bonuses are correctly loaded and applied in both Zero Hour and Generals (#369 by @elmeriniemela).
  • Modularized Pathfinder: Decomposed monolithic pathfinding into discrete components (PathfindLayer, PathfindZoneManager, ZoneBlock, PathfindCell, PathfindCellList, PathfindCellInfo, Path, PathNode) with deterministic WWMath::SqrtfOrigin math across macOS and Linux (#370 by @fbraz3).
  • Save/Load & Combat Fixes: Saved the next evaluation frame of delayed scripts, restored retail compatibility for Generals save games and PATHFIND_CELL_SIZE_F, fixed 2D diagonal movement speed calculations, fixed Helix gaining experience from gun attachments, and ensured groups force-attack reliably (#370 by @fbraz3).
  • AI & Object Lifecycle: Fixed AIUpdateInterface::checkForCrateToPickup() returning valid crates, prevented premature AI state exiting during reset updates, and cleared stranded occupants from TunnelTracker during immediate object destruction (#370 by @fbraz3).
  • Map & World Builder Stability: Fixed crashes in World Builder's Team Builder when selecting team members of neutral players, rejected map sizes that overflow heightmap cell array allocations, and freed buffers when map preview copies fail (#370 by @fbraz3).

🖥️ UI & Quality of Life

  • Tactical Air Unit Ground Indicator & Selection Picking: Local human player combat aircraft now display a dynamic, team-colored ground projection reticle directly below their flight coordinates, resolving altitude targeting ambiguity and allowing intuitive click-selection by clicking the reticle on the ground (#373 by @fbraz3).
  • Cross-Platform Animated & Custom Cursors: Restored primary asset root propagation and extended SDL3 cursor hotspot extraction and static color cursor fallbacks across macOS and Linux, ensuring custom game cursors load properly (#373 by @fbraz3).
  • In-Game Window & UI Teardown: Properly deleted ControlBar and ReplayControl windows on resolution change and game shutdown, avoiding leaked system window handles and terrain tile leaks on device reset (#370 by @fbraz3).
  • Font & Glyph Rendering Optimization: Replaced full-texel font glyph caching with 1-byte coverage per glyph pixel, allowed sentence textures to grow dynamically beyond 256 pixels for high resolutions, and discarded cached glyphs on map transitions and resolution changes (#370 by @fbraz3).

🎨 Graphics & Visuals (DXVK / Vulkan)

  • Advanced Shadows & Skeletal Volumes: Added real-time dynamic volumetric stencil shadows for animated infantry meshes, tree/prop scenery triangle shadow casting, bridge shadow casters, and projectile/missile shadows cast along the sun vector (#365 by @fbraz3).
  • Planar Water Reflections & Softening: Implemented real-time planar mirror reflections for water surfaces with oblique near plane projection, natural shadow attenuation over water, and shoreline blend protection (#365 by @fbraz3).
  • Dynamic Lighting & Vehicle Headlights: Added dynamic point light illumination for explosions and superweapons via FXListGeneralsX.ini, alongside vehicle night headlights projecting warm dynamic beams (#365 by @fbraz3).
  • Post-Processing Pipeline: Screen-space Bloom bright-pass extraction, 4-tap separable Gaussian blur, and HDR soft-shoulder contrast tone mapping with full hierarchical toggles in GameData.ini and Options.ini (#365 by @fbraz3).
  • Static WW3D Renderer Architecture: Replaced the dynamic render backend object with a static Renderer class and consolidated rendering calls across the engine (#370 by @fbraz3).

🔊 Audio & Video Subsystems (MiniAudio / FFmpeg)

  • Shell Map Startup Sequencing: Fixed GameEngine::init() prematurely pushing the main menu during startup, preventing the shell map and its background audio from playing under intro movies (#376 by @elmeriniemela).
  • MiniAudio Sound Slot & Priority Fixes: Sound effect replacement under high load now only replaces sounds of the same type (2D or 3D), preventing shell map and battle sounds from silencing menu music and speech (#376 by @elmeriniemela).
  • Continuous Music Looping: Enabled infinite looping for music tracks in MiniAudio (ma_sound_set_looping), restoring retail parity (#376 by @elmeriniemela).
  • Audio Pause / Resume Semantics: Audio pause and stop commands now target individual playing sounds rather than whole sound groups, allowing pause menus, General challenge voice lines, and button clicks to play cleanly (#376 by @elmeriniemela).
  • Uninterruptible Speech Flag Reset: Ensured the speech restriction flag is properly cleared when uninterruptible streaming audio is released, preventing speech playback from dropping after the first line (#376 by @elmeriniemela).

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

  • Linux glibc Library Bundling Exclusions: Updated Linux deployment, Flatpak, bundle, and AppImage scripts to skip all host glibc runtime libraries (libc, libm, libpthread, librt, libdl, libmvec, libresolv, libutil, etc.) across Arch, Debian, and Fedora, preventing runtime loader mismatches when host glibc is updated (#375 by @elmeriniemela).
  • Automated Contributor Acknowledgements: Integrated automated detection of community contributions into the release pipeline and release note generator (#371 by @fbraz3).
  • Unified Archive Filesystem: Replaced separate Win32 and standard filesystem implementations with a unified, cross-platform BIGFileSystem and ArchiveFile architecture (#370 by @fbraz3).
  • Automated Unit Testing & Benchmarks: Added Google Test and Google Benchmark suites into the build tree with CI execution across platforms (#370 by @fbraz3).

❤️ Contributor Acknowledgements

A special thank you to our community contributors who made this release possible:

  • @elmeriniemela for mounting -mod archives before GameData.ini (#369), excluding host glibc libraries from Linux deployment bundles (#375), and fixing intro shell map sequencing along with major MiniAudio sound slot, looping, and priority improvements (#376)!

📱 Ecosystem & Community Ports

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


Changelog

  • feat(graphics): advanced shadows, reflections, dynamic lighting, and post-processing by @fbraz3 in #365
  • fix(engine): mount -mod archives before GameData.ini by @elmeriniemela in #369
  • chore(sync): merge thesuperhackers/main (10-16-2026) by @fbraz3 in #370
  • ci(release): add external contributor acknowledgements to release notes by @fbraz3 in #371
  • feat(graphics): implement tactical air unit ground indicator and selection picking by @fbraz3 in #373
  • fix(linux-deploy): skip all glibc libraries when bundling by @elmeriniemela in #375
  • fix(audio): keep shell map out of the intro and stop MiniAudio dropping sounds by @elmeriniemela in #376

Full Changelog: 1.0.3...1.0.4