[sync] TheSuperHackers upstream sync 06-05-2026#155
Merged
Conversation
…nDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2747)
…) into smaller functions (TheSuperHackers#2758)
…er object when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2746)
…6 commits, 06-05-2026) Imports 6 commits from thesuperhackers/main (tip f334383) while preserving GeneralsX's cross-platform architecture (SDL3 + DXVK + OpenAL + FFmpeg) and the GeneralsX-specific input/audio behaviors. Upstream commits imported: f334383 bugfix(contain): Prevent riders from being added to destroyed container object when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2746) 7c78a5e refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions (TheSuperHackers#2758) a7fad3b fix(milesaudiomanager): Prevent multithread crashing in MilesAudioManager (TheSuperHackers#2718) b0becc4 refactor(milesaudiomanager): Clean up and simplify MilesAudioManager (TheSuperHackers#2718) df2224b bugfix(object): Avoid crash with dangling contain module in Object::onDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2747) 20f4254 fix(memory): Fix various memory leaks (2) (TheSuperHackers#2710) Conflict resolution (see docs/WORKDIR/planning/SYNC_2026-06-05_TSUPERHACKERS_PLAN.md): 1. MetaEvent.cpp (Generals/ + GeneralsMD/) - refactor TheSuperHackers#2758 splits translateGameMessage() into onMouseEvent/onKeyEvent helpers, replacing the per-key m_keyDownInfos bit-array with the GeneralsX-local m_lastKeyDown/m_lastModState members. GeneralsX semantics (mods-only- changed detection + normal key-transition branch) are preserved inside onKeyEvent(). We do NOT adopt upstream's KeyDownInfo/m_keyDownInfos because that would silently change input behavior beyond the sync's intent. 2. MetaEvent.h (Generals/ + GeneralsMD/) - kept GeneralsX's m_lastKeyDown and m_lastModState members and adopted only the onMouseEvent / onKeyEvent helper declarations. Removed upstream's onKeyModStateRemoved, onKeyPressed, getActionKeyType, getKeyModState declarations since they are not defined in the GeneralsX .cpp. 3. OpenAL audio manager (Core + GeneralsMD stub) - upstream's GameAudio.h API change makes nextMusicTrack/prevMusicTrack return AsciiString (instead of void) and removes getMusicTrackName. The auto-merged CommandXlat.cpp call sites use the new return value. GeneralsX's OpenAL implementations were updated to match the new signature and return the new track name. getMusicTrackName was removed from the header and implementation since it has no callers anymore. 4. AGENTS.md - pre-existing merge conflict markers in HEAD from a prior sync attempt were properly resolved by keeping the comprehensive "Updated upstream" version of the Must-Load Context section. Auto-merged files (all reviewed for correctness): - Generals{,MD}/Code/GameEngine/Include/GameLogic/Object.h - Generals{,MD}/Code/GameEngine/Source/GameLogic/Object/Contain/{Open,Transport}Contain.cpp - Generals{,MD}/Code/GameEngine/Source/GameLogic/Object/Object.cpp - Generals{,MD}/Code/GameEngine/Source/Common/GameEngine.cpp - Generals{,MD}/Code/GameEngine/Source/Common/RTS/Player.cpp - Generals{,MD}/Code/GameEngine/Source/Common/System/SaveGame/GameStateMap.cpp - Generals{,MD}/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp - Generals{,MD}/Code/GameEngine/Source/GameClient/Drawable.cpp - Generals{,MD}/Code/GameEngine/Source/GameLogic/Map/SidesList.cpp - Generals{,MD}/Code/GameEngine/Source/GameLogic/Object/Update/BattlePlanUpdate.cpp - Generals{,MD}/Code/Libraries/Source/WWVegas/WW3D2/{hcanim,hrawanim,seglinerenderer}.cpp - Generals{,MD}/Code/Tools/WorldBuilder/src/ScriptDialog.cpp - Core/GameEngine/Include/Common/GameAudio.h - Core/GameEngine/Source/GameLogic/System/GameLogicDispatch.cpp - Core/GameEngineDevice/Include/MilesAudioDevice/MilesAudioManager.h - Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp - Core/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp - Dependencies/Utility/CMakeLists.txt - Dependencies/Utility/Utility/interlocked_adapter.h (new) Validation: - macOS-vulkan configure: passed (179.3s) - macOS-vulkan build (z_generals + g_generals): passed - macOS smoke test (GeneralsXZH -win -noFullScreen, 40s): clean "exited main loop" with GameMain() returning code 0 - Linux validation deferred to CI (per user direction) No conflict markers remain in the working tree. All GeneralsX CI infrastructure (.github/workflows/, .github/ISSUE_TEMPLATE/, .github/copilot-instructions.md) is untouched by the sync.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
merge(thesuperhackers): sync upstream with cross-platform integrity (6 commits, 06-05-2026)
Imports 6 commits from thesuperhackers/main (tip f334383) while preserving
GeneralsX's cross-platform architecture (SDL3 + DXVK + OpenAL + FFmpeg) and
the GeneralsX-specific input/audio behaviors.
Upstream commits imported:
f334383 bugfix(contain): Prevent riders from being added to destroyed
container object when Reinforcement Pad is destroyed before
Troop Crawler drop (TheSuperHackers#2746)
7c78a5e refactor(metaevent): Split MetaEventTranslator::translateGameMessage()
into smaller functions (TheSuperHackers#2758)
a7fad3b fix(milesaudiomanager): Prevent multithread crashing in
MilesAudioManager (TheSuperHackers#2718)
b0becc4 refactor(milesaudiomanager): Clean up and simplify MilesAudioManager
(TheSuperHackers#2718)
df2224b bugfix(object): Avoid crash with dangling contain module in
Object::onDestroy() when Reinforcement Pad is destroyed before
Troop Crawler drop (TheSuperHackers#2747)
20f4254 fix(memory): Fix various memory leaks (2) (TheSuperHackers#2710)
Conflict resolution (see docs/WORKDIR/planning/SYNC_2026-06-05_TSUPERHACKERS_PLAN.md):
MetaEvent.cpp (Generals/ + GeneralsMD/) - refactor refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions TheSuperHackers/GeneralsGameCode#2758 splits
translateGameMessage() into onMouseEvent/onKeyEvent helpers, replacing
the per-key m_keyDownInfos bit-array with the GeneralsX-local
m_lastKeyDown/m_lastModState members. GeneralsX semantics (mods-only-
changed detection + normal key-transition branch) are preserved inside
onKeyEvent(). We do NOT adopt upstream's KeyDownInfo/m_keyDownInfos
because that would silently change input behavior beyond the sync's
intent.
MetaEvent.h (Generals/ + GeneralsMD/) - kept GeneralsX's m_lastKeyDown
and m_lastModState members and adopted only the onMouseEvent /
onKeyEvent helper declarations. Removed upstream's onKeyModStateRemoved,
onKeyPressed, getActionKeyType, getKeyModState declarations since they
are not defined in the GeneralsX .cpp.
OpenAL audio manager (Core + GeneralsMD stub) - upstream's GameAudio.h
API change makes nextMusicTrack/prevMusicTrack return AsciiString
(instead of void) and removes getMusicTrackName. The auto-merged
CommandXlat.cpp call sites use the new return value. GeneralsX's
OpenAL implementations were updated to match the new signature and
return the new track name. getMusicTrackName was removed from the
header and implementation since it has no callers anymore.
AGENTS.md - pre-existing merge conflict markers in HEAD from a prior
sync attempt were properly resolved by keeping the comprehensive
"Updated upstream" version of the Must-Load Context section.
Auto-merged files (all reviewed for correctness):
Validation:
"exited main loop" with GameMain() returning code 0
No conflict markers remain in the working tree. All GeneralsX CI
infrastructure (.github/workflows/, .github/ISSUE_TEMPLATE/,
.github/copilot-instructions.md) is untouched by the sync.
User Verification Checklist
Test the following items on at least one supported platform before approving:
cmake --preset macos-vulkan(orlinux64-deploy) succeedscmake --build build/<preset> --target z_generals(Zero Hour) buildscmake --build build/<preset> --target g_generals(base Generals) buildsFeature Areas Touched by Resolved Conflicts
m_containedBy— verify theRETAIL_COMPATIBLE_CRC=OFF(default) path; theONpath is retail-binary compatibility and not used by GeneralsXRisky Areas for Extra Review
The following subsystems are flagged for additional scrutiny:
Generals{,MD}/Code/GameEngine/Source/GameClient/MessageStream/MetaEvent.cpp— GeneralsX's mods-only-changed input behavior is preserved but the structure follows upstream's refactor; please verify keyboard hotkeys still work (especially modifier-only transitions like CTRL+SHIFT combinations).Generals{,MD}/Code/GameEngine/Source/GameLogic/Object/Object.cppandObject.h— the auto-merge addedm_containedByIDandRETAIL_COMPATIBLE_CRCguards. GeneralsX usesRETAIL_COMPATIBLE_CRC=OFFby default; verify no assertion failures.Core/GameEngineDevice/Include/OpenALAudioDevice/OpenALAudioManager.handSource/OpenALAudioDevice/OpenALAudioManager.cpp— adapted to the newnextMusicTrack/prevMusicTrackreturn value semantics. Verify music track advance still works.GeneralsMD/Code/GameEngineDevice/Source/OpenALAudioManager.cpp(stub used whenSAGE_USE_OPENAL=OFF) — updated to match the new return types so it doesn't go out of sync with the Core/ implementation.Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp— large upstream refactor; not built by GeneralsX presets, but present in the tree. No impact expected.Plan Document
The full conflict-resolution plan and per-commit analysis is in:
docs/WORKDIR/planning/SYNC_2026-06-05_TSUPERHACKERS_PLAN.md