Skip to content

Releases: githubawn/GeneralsGameCode

weekly-2026-06-26

26 Jun 11:44

Choose a tag to compare

Changelog

  • chore: Apply clang-format to entire codebase
  • refactor(audio): Simplify available audio samples management (TheSuperHackers#2773)
  • unify(messagestream): Move all client message translator files to Core (TheSuperHackers#2805)
  • fix(update): Fix laser-to-target setup mistake in AssistedTargetingUpdate (TheSuperHackers#2817)
  • chore(sortingrenderer): Remove unused function Insert_VolumeParticle (TheSuperHackers#2816)
  • refactor(sortingrenderer): Replace custom doubly linked list with std::list in SortingNodeStruct (TheSuperHackers#2810)
  • bugfix(logic): Restore retail compatibility after change in CountermeasuresBehavior::calculateCountermeasureToDivertTo (TheSuperHackers#2808)
  • chore: Prevent conflict between clang-format and MSVC by wrapping inline assembly blocks in curly braces (TheSuperHackers#2811)
  • chore: Prevent conflict between clang-format and pre-C++11 nested template parsing (TheSuperHackers#2760)
  • bugfix(ai): Fix bugged unit behavior when attacked during guard mode (TheSuperHackers#2197)
  • bugfix(crc): Fix spurious mismatches for disconnected players at low CRC intervals (TheSuperHackers#2796)
  • bugfix(network): Improve compare method of command id's to keep network commands in chronological order when overflowing (TheSuperHackers#2736)
  • bugfix(pathfinder): Fix inaccurate single unit movement destinations when unobstructed (TheSuperHackers#2296)
  • bugfix(textureloader): Fix faulty implementations of texture reduction (TheSuperHackers#2789)
  • tweak(textureloader): Remove superfluous texture reduction code from TextureLoadTaskClass::Begin_Uncompressed_Load() (TheSuperHackers#2789)
  • refactor(textureloader): Simplify code in Texture Loader (TheSuperHackers#2789)
  • bugfix(textureloader): Lift hardcoded texture aspect ratio limit of 1:8 to allow loading all textures with modern gpu (TheSuperHackers#2788)
  • perf: Reduce cost of retrieving labels from Waypoint and PolygonTrigger by 90% (TheSuperHackers#2761)
  • unify(selectionxlat): Merge SelectionXlat (TheSuperHackers#2792)
  • unify(commandxlat): Merge CommandXlat and related code from Zero Hour (TheSuperHackers#2765)
  • unify(academystats): Move AcademyStats files to Core and merge related required code (TheSuperHackers#2765)
  • feat(options): Implement user option to toggle Right Mouse Scroll with Alternate Mouse (TheSuperHackers#2798)
  • unify(translator): Merge message translators from Zero Hour (TheSuperHackers#2794)
  • perf(pathfinding): Skip redundant path-exists check in Pathfinder::checkForAdjust() (TheSuperHackers#2791)
  • refactor(pathfinder): Simplify implementation of spiral cell search in Pathfinder::adjustDestination() (TheSuperHackers#2790)
  • fix(bitflags): Use UnsignedInt64 and %I64X to support VC6 compiler in BitFlags.h (TheSuperHackers#2759)
  • fix(milesaudiomanager): Fix audio request kill condition in MilesAudioManager::killAudioEventImmediately() (TheSuperHackers#2784)
  • fix(sortingrenderer): Prevent a crash when exceeding the 16-bit index buffer limit (TheSuperHackers#2783)
  • refactor(gamelogic): Split switch cases of GameLogic::logicMessageDispatcher into separate functions (TheSuperHackers#2702)
  • unify(ww3d2): Move SortingRenderer to Core (TheSuperHackers#2772)
  • unify(ww3d2): Merge SortingRenderer (TheSuperHackers#2772)
  • perf(gamemessage): Replace GameMessageArgument linked lists with vectors (TheSuperHackers#2700)
  • bugfix(contain): Prevent riders from being added to destroyed container object when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2746)
  • refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions (TheSuperHackers#2758)
  • fix(milesaudiomanager): Prevent multithread crashing in MilesAudioManager (TheSuperHackers#2718)
  • refactor(milesaudiomanager): Clean up and simplify MilesAudioManager (TheSuperHackers#2718)
  • bugfix(object): Avoid crash with dangling contain module in Object::onDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2747)
  • fix(memory): Fix various memory leaks (2) (TheSuperHackers#2710)
  • unify(shroud): Merge W3DShroud code from Zero Hour and implicitly fix black terrain for one frame on far camera jumps (TheSuperHackers#2757)
  • fix(metaevent): Ignore order in which modifier keys are released to trigger meta events (TheSuperHackers#2577)
  • unify(message): Merge MessageStream, MetaEvent code (TheSuperHackers#2756)
  • bugfix(water): Fix river visuals in black shroud (TheSuperHackers#2749)
  • fix(memory): Fix audio event related memory leaks when pausing the game (TheSuperHackers#2731)
  • fix(particlesys): Simplify ParticleSystemManagerDummy setup (TheSuperHackers#2740)
  • fix(particlesys): Decouple particle systems from logic crc (TheSuperHackers#2742)
  • bugfix(gameengine): Fix logic in GameEngine::canUpdateRegularGameLogic() (TheSuperHackers#2707)
  • fix(recorder): Fix memory leak of RecorderClass::m_crcInfo (TheSuperHackers#2713)
  • bugfix(aigroup): Prevent game crash when a player is selected in Replay playback (2) (TheSuperHackers#2711)
  • perf(network): Replace extern global network variables with const ones (TheSuperHackers#2726)
  • refactor(network): Use switch cases in utility functions for network commands (TheSuperHackers#2725)
  • fix(particlesys): Add or simplify null-checks to createParticleSystem calls (TheSuperHackers#2724)
  • fix(network): Verify accepted type of incoming game messages (TheSuperHackers#2708)
  • bugfix(physics): Prevent building crash damage from dealing damage to other objects (TheSuperHackers#2723)
  • bugfix(physics): Prevent dead units from repeatedly dealing crash damage on collision with non-buildings (TheSuperHackers#2204)
  • fix(gameengine): Remove music tracks as prerequisite to initialize the game engine (TheSuperHackers#2737)
  • bugfix: Restore retail compatibility after retail behavior flags change (TheSuperHackers#2727)
  • refactor(netpacket): Simplify NetPacket functions for packet buffer reads (TheSuperHackers#2463)
  • fix(object): Prevent crash if Object::m_drawable is a nullptr on save load (TheSuperHackers#2712)
  • unify(ww3d2): Move dx8fvf, dx8indexbuffer, dx8vertexbuffer to Core (TheSuperHackers#2706)
  • bugfix(contain): Abort containee's AIExitState if its container object dies (TheSuperHackers#2513)
  • chore(gamemessage): Clean up GameMessage::getCommandTypeAsString (TheSuperHackers#2695)
  • unify(gamelogic): Move most GameLogic System files to Core (TheSuperHackers#2698)
  • unify(gamelogic): Merge GameLogicDispatch and related code (TheSuperHackers#2698)
  • bugfix(input): Revert changes to local group creation (TheSuperHackers#2694)

weekly-2026-06-12

12 Jun 12:17
37e0407

Choose a tag to compare

Changelog

  • refactor(gamelogic): Split switch cases of GameLogic::logicMessageDispatcher into separate functions (TheSuperHackers#2702)
  • unify(ww3d2): Move SortingRenderer to Core (TheSuperHackers#2772)
  • unify(ww3d2): Merge SortingRenderer (TheSuperHackers#2772)
  • perf(gamemessage): Replace GameMessageArgument linked lists with vectors (TheSuperHackers#2700)
  • bugfix(contain): Prevent riders from being added to destroyed container object when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2746)
  • refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions (TheSuperHackers#2758)
  • fix(milesaudiomanager): Prevent multithread crashing in MilesAudioManager (TheSuperHackers#2718)
  • refactor(milesaudiomanager): Clean up and simplify MilesAudioManager (TheSuperHackers#2718)
  • bugfix(object): Avoid crash with dangling contain module in Object::onDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (TheSuperHackers#2747)
  • fix(memory): Fix various memory leaks (2) (TheSuperHackers#2710)
  • unify(shroud): Merge W3DShroud code from Zero Hour and implicitly fix black terrain for one frame on far camera jumps (TheSuperHackers#2757)
  • fix(metaevent): Ignore order in which modifier keys are released to trigger meta events (TheSuperHackers#2577)
  • unify(message): Merge MessageStream, MetaEvent code (TheSuperHackers#2756)
  • bugfix(water): Fix river visuals in black shroud (TheSuperHackers#2749)
  • fix(memory): Fix audio event related memory leaks when pausing the game (TheSuperHackers#2731)

weekly-2026-05-29

29 May 12:13

Choose a tag to compare

Changelog

weekly-2026-05-22

22 May 11:43

Choose a tag to compare

Changelog

  • Fix Main Menu Control Bar Glitch: Symmetrical zero-guard sibling window destruction and propagation
  • Fix Main Menu Control Bar resolution change/resize glitch via robust state restoration without using early-exit guards
  • fix(gui): prevent recreating gameplay control bar in main menu after window resize
  • fix(window): enable easy border grabbing and show standard cursors outside client area
  • always build multi-instance version
  • flash 3.5 is insane
  • fix(gameengine): Remove music tracks as prerequisite to initialize the game engine (TheSuperHackers#2737)
  • bugfix: Restore retail compatibility after retail behavior flags change (TheSuperHackers#2727)
  • refactor(netpacket): Simplify NetPacket functions for packet buffer reads (TheSuperHackers#2463)
  • fix(object): Prevent crash if Object::m_drawable is a nullptr on save load (TheSuperHackers#2712)
  • unify(ww3d2): Move dx8fvf, dx8indexbuffer, dx8vertexbuffer to Core (TheSuperHackers#2706)
  • bugfix(contain): Abort containee's AIExitState if its container object dies (TheSuperHackers#2513)
  • chore(gamemessage): Clean up GameMessage::getCommandTypeAsString (TheSuperHackers#2695)
  • unify(gamelogic): Move most GameLogic System files to Core (TheSuperHackers#2698)
  • unify(gamelogic): Merge GameLogicDispatch and related code (TheSuperHackers#2698)
  • bugfix(input): Revert changes to local group creation (TheSuperHackers#2694)

weekly-2026-05-15

15 May 11:18
b6a6007

Choose a tag to compare

Changelog

weekly-2026-05-08

08 May 10:22

Choose a tag to compare

Changelog

  • some random stuff my computer made me
  • fix(heightmap): Properly draw larger terrain area on low camera pitch (TheSuperHackers#2677)
  • chore(heightmap): Implement HeightMapRenderObjClass::setTerrainDrawSize() to set custom draw sizes (TheSuperHackers#2677)
  • perf(heightmap): Update terrain tiles only if the terrain draw origin has really changed (TheSuperHackers#2677)
  • bugfix(heightmap): Do full terrain update after new origin position was set (TheSuperHackers#2677)
  • chore(heightmap): Remove useless logic in HeightMapRenderObjClass::updateCenter() (TheSuperHackers#2677)
  • tweak(view): Align the camera far clip plane with the actual terrain draw size (TheSuperHackers#2677)
  • remove muliinstance branch wip
  • refactor: Add override keyword to virtual function overrides in Zero Hour code (2) (TheSuperHackers#2605)
  • refactor: Add override keyword to virtual function overrides in Generals code (2) (TheSuperHackers#2604)
  • bugfix(gamelogic): Modules now cease updating when disabled by non-whitelisted disabled types (TheSuperHackers#2458)
  • fix(lookat): Fix mouse anchor and direction issue for camera pitch (TheSuperHackers#2681)
  • bugfix(controlbar): Show shortcut special powers in Generals again (TheSuperHackers#2680)
  • bugfix(veterancy): Disable audiovisual cues for ejected veteran pilots (TheSuperHackers#2643)
  • bugfix(player): Fix transferred in-progress upgrades (TheSuperHackers#2396)
  • tweak(gamemessage): Remove unused MSG_AREA_SELECTION message from game logic (TheSuperHackers#2667)
  • build(docker): Set correct targets in docker-build.sh (TheSuperHackers#2678)
  • unify(gadget): Move Gadget files to Core (TheSuperHackers#2672)
  • unify(gadget): Merge Gadget and related code from Zero Hour (TheSuperHackers#2672)
  • bugfix(watertracks): Correct the path handling for .wak files in the WaterTracksRenderSystem (TheSuperHackers#2634)
  • fix(aiupdate): Fix XFER and CRC of AIUpdateInterface::m_guardTargetType (TheSuperHackers#2662)
  • chore(player): Remove unused GameMessage argument from Player member functions (TheSuperHackers#2669)
  • bugfix(aiplayer): Preserve scaffold health when AI building completes (TheSuperHackers#1768)
  • chore(filesystem): Implement getExtension() and TheFileSystem::removeExtension() functions (TheSuperHackers#2635)
  • chore(string): Implement find() and reverseFind() functions in UnicodeString (TheSuperHackers#2635)
  • chore(string): Remove unused removeExtension() function from GameState.cpp (TheSuperHackers#2635)
  • tweak(gamemessage): Remove unused argument of MSG_DESTROY_SELECTED_GROUP (TheSuperHackers#2664)

weekly-2026-05-01

01 May 10:21
af4f950

Choose a tag to compare

Changelog

weekly-2026-04-24

24 Apr 10:21
ffac8f9

Choose a tag to compare

Changelog

weekly-2026-04-17

17 Apr 10:11
6317722

Choose a tag to compare

Changelog

weekly-2026-04-10

10 Apr 10:07
476a57c

Choose a tag to compare

Changelog