Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fbraz3/GeneralsX
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: GeneralsX-Beta-7
Choose a base ref
...
head repository: fbraz3/GeneralsX
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: GeneralsX-Beta-8
Choose a head ref
  • 17 commits
  • 234 files changed
  • 5 contributors

Commits on May 7, 2026

  1. Configuration menu
    Copy the full SHA
    f936bdb View commit details
    Browse the repository at this point in the history

Commits on May 8, 2026

  1. ci(workflows): upgrade actions for node24 (#130)

    * ci(workflows): upgrade actions for node24
    
    Update active GitHub Actions workflows to Node 24-compatible major versions to remove runner deprecation warnings in release and CI jobs.
    
    Align checkout, cache, upload-artifact, and download-artifact usage across the active workflow set and document the change in the development diary.
    
    * ci(ci): upgrade dorny/paths-filter to v4 for node24
    fbraz3 authored May 8, 2026
    Configuration menu
    Copy the full SHA
    daea0c3 View commit details
    Browse the repository at this point in the history
  2. refactor: Split preserve retail behavior flags (TheSuperHackers#2691)

    And default enable 5 Committee approved fixes
    Stubbjax authored May 8, 2026
    Configuration menu
    Copy the full SHA
    9f0d2fb View commit details
    Browse the repository at this point in the history

Commits on May 9, 2026

  1. Configuration menu
    Copy the full SHA
    b6a6007 View commit details
    Browse the repository at this point in the history

Commits on May 10, 2026

  1. bugfix(input): Revert changes to local group creation (TheSuperHacker…

    …s#2694)
    
    This reverts commit 67f50d1 because it can cause mismatching
    Caball009 authored May 10, 2026
    Configuration menu
    Copy the full SHA
    e3515af View commit details
    Browse the repository at this point in the history
  2. fix(audio-openal): advance Attack/Sound/Decay portions on sample comp…

    …letion (#134)
    
    * fix(audio-openal): advance Attack/Sound/Decay portions on sample completion
    
    The OpenAL backend polled sourceIsStopped() in processPlayingList() but
    discarded PlayingAudio without calling notifyOfAudioCompletion(). Miles
    Sound System used EOS callbacks for this, so the port lacked the
    equivalent polling-based trigger.
    
    Result: the Attack portion (radio static, gradio1*.wav) played once,
    then the PlayingAudio was released before the Sound (voice) or Decay
    portions could start. All aircraft and unit voice lines were silent on
    Linux/macOS.
    
    Fix: call notifyOfAudioCompletion() before releasing a stopped sample.
    If it starts the next portion the AL source transitions back to playing
    and the object remains in the list; only release when the source is
    still stopped after the call (cycle complete or failed to load).
    
    Apply the same fix to both m_playingSounds (2D) and m_playing3DSounds
    (3D positional) loops. Skip the call when m_requestStop is set (user
    explicitly stopped the event).
    
    Also add a multichannel positional-audio fallback in playSample3D() and
    OpenALAudioCache so that stereo voice assets fall back to 2D playback
    instead of being dropped or crashing.
    
    Fixes #129
    
    * chore(audio-openal): remove voice diagnostics instrumentation
    fbraz3 authored May 10, 2026
    Configuration menu
    Copy the full SHA
    b71f493 View commit details
    Browse the repository at this point in the history

Commits on May 11, 2026

  1. fix(dx8wrapper): restore macOS transparency (#135)

    Use wrapper-managed render-target transitions in pillarbox begin/end,
    
    re-sync cached render states after the final blit, and keep
    
    pillarbox presentation from semantically enabling RTT for the
    
    entire frame.
    
    Fixes #131
    fbraz3 authored May 11, 2026
    Configuration menu
    Copy the full SHA
    dc25651 View commit details
    Browse the repository at this point in the history
  2. fix(linux-filesystem): resolve asset-root case mismatches (#137)

    * fix(linux-filesystem): resolve asset-root case mismatches
    
    Fix Linux asset-root fallback lookups to preserve case-insensitive path resolution semantics used by legacy data references. This unblocks cursor ANI discovery and related media lookups when file names differ only by case on disk.
    
    Fixes #128
    
    Related-to #103
    
    * fix(linux-filesystem): resolve asset-root case mismatches
    ## Summary
    This PR fixes Linux asset lookup behavior when game data references mixed-case paths but files on disk differ only by case.
    
    The root cause was in asset-root fallback resolution: the fallback path did not perform case-insensitive traversal, unlike the main local path resolution flow.
    
    ## What Changed
    - Added Linux-only case-insensitive traversal to asset-root fallback in [Core/GameEngineDevice/Source/StdDevice/Common/StdLocalFileSystem.cpp](Core/GameEngineDevice/Source/StdDevice/Common/StdLocalFileSystem.cpp).
    - Kept platform behavior isolated with `#ifdef __linux__` to avoid changing macOS behavior.
    - Kept SDL3 cursor loading hardening in both products:
      - [GeneralsMD/Code/GameEngineDevice/Source/SDL3Device/GameClient/SDL3Mouse.cpp](GeneralsMD/Code/GameEngineDevice/Source/SDL3Device/GameClient/SDL3Mouse.cpp)
      - [Generals/Code/GameEngineDevice/Source/SDL3Device/GameClient/SDL3Mouse.cpp](Generals/Code/GameEngineDevice/Source/SDL3Device/GameClient/SDL3Mouse.cpp)
    - Updated docs:
      - [docs/DEV_BLOG/2026-05-DIARY.md](docs/DEV_BLOG/2026-05-DIARY.md)
      - [docs/WORKDIR/lessons/2026-05-LESSONS.md](docs/WORKDIR/lessons/2026-05-LESSONS.md)
    
    ## Validation
    Manual Linux validation confirmed:
    - default/action/attack cursors render correctly (no fallback to OS pointer).
    - intro playback works.
    - campaign start videos play.
    
    ## Issues
    Fixes #128
    Related-to #103
    fbraz3 authored May 11, 2026
    Configuration menu
    Copy the full SHA
    4186a3d View commit details
    Browse the repository at this point in the history

Commits on May 12, 2026

  1. Configuration menu
    Copy the full SHA
    0b2baed View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    6781d5d View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    e887d02 View commit details
    Browse the repository at this point in the history
  4. chore(generals-parity): complete wave 1-5 code parity baseline (#139)

    * fix(timing): protect timer APIs and validate FPS limits on non-Windows platforms
    
    Resolve FPS uncapping and frame counter instability that affected both Generals
    and Zero Hour on macOS and Linux.
    
    Changes:
    - protect timeBeginPeriod/timeEndPeriod Windows API calls with #ifdef _WIN32
      guards in FramePacer constructor/destructor
    - add early-exit validation in FrameRateLimit::wait() to handle zero or invalid
      FPS limits without division-by-zero errors
    - ensure uncapped mode (maxFps > 1000000) skips limiting gracefully
    
    Shared Core/GameEngine fixes apply to both games automatically.
    Both GeneralsX and GeneralsXZH build and launch successfully with stable frame pacing.
    
    Fixes #132"
    
    * fix(fps-init): ensure valid FPS default independent of m_useFpsLimit flag state
    
    Root cause analysis: Generals base had FPS uncapped while Zero Hour worked because
    GameEngine.cpp was checking (m_useFpsLimit && m_framesPerSecondLimit <= 0) before
    setting default FPS. When m_useFpsLimit=FALSE (default) and m_framesPerSecondLimit=0
    (default from INI loading), the condition failed and FPS remained 0 (uncapped).
    
    Changed initialization logic to always set BaseFps default when m_framesPerSecondLimit <= 0,
    regardless of m_useFpsLimit flag state. This ensures stable frame pacing on startup.
    
    Applied to both GeneralsX and GeneralsXZH for consistency.
    
    Fixes #132 completely"
    
    * chore(generals-parity): complete parity audit wave 1-5 with CompatLib headers and GameEngine alignment
    
    Summary of changes:
    - Added full CompatLib header suite to Generals base for Win32/COM compatibility
    - Completed GeneralsMD GameLOD, Player, PlayerList, and UI alignments
    - Updated WWVegas2 libraries for both games
    - Fixed FPS initialization logic (previously: only reset FPS when m_useFpsLimit=TRUE, now always set default)
    - Protected Windows timer APIs with #ifdef guards
    - Added FPS limit validation for uncapped mode
    - Comprehensive audit trails in docs/WORKDIR/audit/
    
    Generals base now has feature parity with Zero Hour for core systems.
    Both titles compile successfully with stable frame pacing on macOS/Linux.
    
    Related commits:
    - 62dab6f: fix(timing) - timer API guards and FPS limit validation
    - c722ca1: fix(fps-init) - ensure valid FPS default independent of flag state
    fbraz3 authored May 12, 2026
    Configuration menu
    Copy the full SHA
    defdb6f View commit details
    Browse the repository at this point in the history

Commits on May 13, 2026

  1. Configuration menu
    Copy the full SHA
    c8b5f61 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    05e518d View commit details
    Browse the repository at this point in the history

Commits on May 15, 2026

  1. Configuration menu
    Copy the full SHA
    44deb06 View commit details
    Browse the repository at this point in the history

Commits on May 16, 2026

  1. Configuration menu
    Copy the full SHA
    4b52903 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #141 from fbraz3/thesuperhackers-sync-15-05-2026

    merge(sync): import TheSuperHackers upstream into GeneralsX (2026-05-15)
    fbraz3 authored May 16, 2026
    Configuration menu
    Copy the full SHA
    a9be923 View commit details
    Browse the repository at this point in the history
Loading