Skip to content

GeneralsX - 1.0.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 02:10
· 390 commits to main since this release
34b71e6

If you run into any problems, please open an issue so we can investigate.

Getting Started

Follow the Installation Guide to set up GeneralsX on your platform.

What's New

🌟 Historic Milestone: Generals Online Multiplayer Integration for Zero Hour (NGMP)

GeneralsX achieves a monumental milestone with the debut of Generals Online for Command & Conquer: Generals Zero Hour, integrating the Next Generation Multiplayer Protocol (NGMP)! The NGMP protocol, client, and server architecture were developed by the GeneralsOnline team. In this release, GeneralsX brings a native Zero Hour client integration built upon their client and server protocols, customized and tailored to meet the cross-platform needs of the GeneralsX project across macOS and Linux, backed by dedicated infrastructure.

With the legacy GameSpy backend long defunct, Zero Hour players can now experience modern online multiplayer: browser-based authentication, real-time WebSocket messaging, custom lobby rooms, player statistics, buddy lists, in-game chat, and robust peer-to-peer match connectivity via GameNetworkingSockets with STUN/TURN NAT traversal (#260 by @fbraz3). (Note: Generals Online multiplayer is currently exclusive to Zero Hour; the Generals base game continues to support Singleplayer, Skirmish vs AI, and LAN multiplayer).

πŸ† The First Stable Release (v1.0.0)

Welcome to GeneralsX 1.0.0 β€” our very first release designated as Stable! This milestone signifies that the core game engine, rendering pipeline, audio system, and platform abstraction layer have reached production quality. GeneralsX is now free of major crashes or critical bugs that impede gameplay, offering a smooth retail-compatible experience on Linux and macOS. Minor bugs or visual quirks may still occur and are welcome to be reported via GitHub Issues, but the era of experimental instability is behind us!

🀝 Community & Contributor Acknowledgements

A special thank-you to the contributors helping push GeneralsX forward in this release:

  • @UnicodeApocalypse for several quality fixes between Beta 19 and 1.0.0, including resolving the Overlord Battle Bunker disembark issue, fixing FreeType Unicode combining-mark crashes on non-English text, adding dynamic skirmish map lists, and ensuring retail patch archives and strings take priority.
  • @arazmj as a core project collaborator, actively helping shape project decisions, interacting on issues and bug reports, and driving continuous stability across the codebase.

🌐 Zero Hour Multiplayer & Generals Online

  • Generals Online (NGMP) Integration: Native Zero Hour client integration based on the client and server protocol developed by the GeneralsOnline team, adapted and customized for the cross-platform requirements of GeneralsX. Includes WebSocket messaging, token-based authentication, custom lobbies, player profiles, and GameNetworkingSockets transport layer (#260 by @fbraz3).
  • Lobby Experience & Polish: Added clickable MOTD links, online welcome audio, post-match outcome reporting, and reliable join/password flows (#260 by @fbraz3).

⚠️ Known Issues (Zero Hour Online Multiplayer)

  • Zero Hour Exclusive: Generals Online multiplayer is exclusively available for Zero Hour (GeneralsMD / GeneralsXZH). In the base Generals game, multiplayer is fully functional via LAN (alongside Singleplayer and Skirmish vs AI).
  • Quick Match: The Quick Match matchmaking queue is currently not functional in this release. Please use Custom Lobbies to host and join multiplayer matches.
  • Replay Uploads: Automatic replay uploading to the server is not yet implemented and will be added in a future update.

πŸ–₯️ UI & Quality of Life

  • Unlimited Custom Skirmish Maps: Skirmish, LAN, and campaign map selection listboxes now dynamically double capacity on demand, lifting the legacy 100-map limit and correctly listing all installed custom maps (#293 by @UnicodeApocalypse).
  • Cross-Platform Custom Map Previews: Escaped UNIX forward slashes in flattened preview paths on macOS and Linux, ensuring custom map preview thumbnails load properly from disk (#291 by @UnicodeApocalypse).
  • Modal Window Stack Hardening: Consolidated window destruction and modal cleanup in GameWindowManager to prevent duplicate modals and ensure destroyed windows are purged from the modal stack (#304 by @fbraz3).

🎨 Graphics & Text Rendering Polish

  • FreeType Combining-Mark Crash Fix: Switched character width calculations to signed arithmetic with proper min-extent clamping, eliminating buffer corruption and SIGBUS crashes when rendering Unicode diacritics and combining accents (such as Portuguese "ConfiguraΓ§Γ΅es") (#298 by @UnicodeApocalypse).
  • Dynamic Glyph Buffer Sizing: Aligned font glyph buffer allocations to actual glyph extents to prevent buffer write overflows (#304 by @fbraz3).
  • Material Color Processing: Corrected mesh material color processing logic in WW3D2 (#304 by @fbraz3).

🧠 Gameplay & Engine Fixes (Upstream Sync)

  • Overlord Battle Bunker Disembark: Resolved a critical bug where infantry loaded into an Overlord's Battle Bunker upgrade could not disembark or evacuate. Redirected containment queries, door reservations, and exit checks to the inner bunker container (#296 by @UnicodeApocalypse).
  • Patch Archive Priority: Ensured Patch*.big archives are loaded in a second pass with overwrite priority, correctly restoring patched INI files, UI definitions, and button animations (such as WindowTransitions) (#295 by @UnicodeApocalypse).
  • Retail Patch Text Overlay: Added support for Data\Patch.str, resolving MISSING: '...' text placeholders on patched retail installations without manual CSF editing (#294 by @UnicodeApocalypse).
  • Pathfinder Performance Optimization: Optimized PathNode tail appending to O(1) time complexity, removed redundant isCrusher recomputations, and cached parent cell positions outside the neighbor search loop for smoother unit movement in large battles (#304 by @fbraz3).
  • Dozer AI State Guard: Fixed an issue where builder units could erroneously resume completed tasks after being disabled (#304 by @fbraz3).
  • Nuclear Missile Damage Correction: Fixed and improved damage calculation for large structures situated within the outer blast radius (#304 by @fbraz3).
  • Direct CLI Replay Playback: Enabled launching and playing replay files directly via -loadreplay <file> from the command line (#304 by @fbraz3).

πŸ”Š Audio & Video Subsystems

  • Dynamic Bink & Miles Runtime Loaders: Replaced static import stubs with modular dynamic runtime loaders for Bink and Miles, preventing startup crashes when optional DLLs are not present (#304 by @fbraz3).
  • Sound Scene Safety & Cleanup: Guarded against premature sound cancellations, resolved heap-buffer-overflow reads in audio provider selection, and safely copied sound scene state (#304 by @fbraz3).

πŸš€ Packaging, CI & Infrastructure

  • Automated SemVer Release Pipeline: Transitioned release workflows to automated Semantic Versioning, dynamic next-version detection, and unified release tooling (#301 by @fbraz3).
  • Branding & Windows Icons: Refreshed project branding with classic military insignia emblems and generated complete multi-resolution Windows executable icons across 7 resolutions (#301 by @fbraz3).
  • Clean macOS Distribution Archives: Fixed macOS bundle packaging using symlink-preserving zip archives, avoiding nested extraction issues (#301 by @fbraz3).
  • vcpkg Binary Caching: Accelerated Windows and macOS CI builds with GitHub Actions vcpkg binary caching (#290 by @fbraz3).
  • Documentation Migration: Sanitized local paths, migrated installation and setup guides to the GitHub Wiki, and streamlined developer guidelines (#300 by @fbraz3).

Community Ports based on GeneralsX

If you like GeneralsX, please also take a look into these projects

Changelog

  • NGMP implementation by @fbraz3 in #260
  • ci: add vcpkg binary caching to Windows and macOS workflows by @fbraz3 in #290
  • fix(map-preview): escape slashes in flattened preview path by @UnicodeApocalypse in #291
  • fix(skirmish): grow map listbox instead of truncating custom map list by @UnicodeApocalypse in #293
  • feat(text): load Data\Patch.str overlay for retail patch strings by @UnicodeApocalypse in #294
  • fix(assets): give Patch*.big archives priority over base archives by @UnicodeApocalypse in #295
  • fix(overlord): redirect exit/containment checks to Battle Bunker so riders can disembark by @UnicodeApocalypse in #296
  • fix(font): use signed arithmetic for FreeType combining-mark char width by @UnicodeApocalypse in #298
  • chore(docs): sanitize local paths, migrate guides to wiki, and update review rules by @fbraz3 in #300
  • feat(ci): transition release pipeline to automated semver and refresh branding by @fbraz3 in #301
  • chore(sync): merge thesuperhackers/main upstream by @fbraz3 in #304

Full Changelog: GeneralsX-Beta-19...1.0.0