Skip to content

Releases: TheSuperHackers/GeneralsGameCode

weekly-2026-06-19

19 Jun 10:40
78edd87

Choose a tag to compare

Changelog

  • bugfix(ai): Fix bugged unit behavior when attacked during guard mode (#2197)
  • bugfix(crc): Fix spurious mismatches for disconnected players at low CRC intervals (#2796)
  • bugfix(network): Improve compare method of command id's to keep network commands in chronological order when overflowing (#2736)
  • bugfix(pathfinder): Fix inaccurate single unit movement destinations when unobstructed (#2296)
  • bugfix(textureloader): Fix faulty implementations of texture reduction (#2789)
  • tweak(textureloader): Remove superfluous texture reduction code from TextureLoadTaskClass::Begin_Uncompressed_Load() (#2789)
  • refactor(textureloader): Simplify code in Texture Loader (#2789)
  • bugfix(textureloader): Lift hardcoded texture aspect ratio limit of 1:8 to allow loading all textures with modern gpu (#2788)
  • perf: Reduce cost of retrieving labels from Waypoint and PolygonTrigger by 90% (#2761)
  • unify(selectionxlat): Merge SelectionXlat (#2792)
  • unify(commandxlat): Merge CommandXlat and related code from Zero Hour (#2765)
  • unify(academystats): Move AcademyStats files to Core and merge related required code (#2765)
  • feat(options): Implement user option to toggle Right Mouse Scroll with Alternate Mouse (#2798)
  • unify(translator): Merge message translators from Zero Hour (#2794)
  • perf(pathfinding): Skip redundant path-exists check in Pathfinder::checkForAdjust() (#2791)
  • refactor(pathfinder): Simplify implementation of spiral cell search in Pathfinder::adjustDestination() (#2790)
  • fix(bitflags): Use UnsignedInt64 and %I64X to support VC6 compiler in BitFlags.h (#2759)
  • fix(milesaudiomanager): Fix audio request kill condition in MilesAudioManager::killAudioEventImmediately() (#2784)

weekly-2026-06-12

12 Jun 10:39
5d4f669

Choose a tag to compare

Changelog

  • fix(sortingrenderer): Prevent a crash when exceeding the 16-bit index buffer limit (#2783)
  • refactor(gamelogic): Split switch cases of GameLogic::logicMessageDispatcher into separate functions (#2702)
  • unify(ww3d2): Move SortingRenderer to Core (#2772)
  • unify(ww3d2): Merge SortingRenderer (#2772)
  • perf(gamemessage): Replace GameMessageArgument linked lists with vectors (#2700)

weekly-2026-06-05

05 Jun 10:29
f334383

Choose a tag to compare

Changelog

  • bugfix(contain): Prevent riders from being added to destroyed container object when Reinforcement Pad is destroyed before Troop Crawler drop (#2746)
  • refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions (#2758)
  • fix(milesaudiomanager): Prevent multithread crashing in MilesAudioManager (#2718)
  • refactor(milesaudiomanager): Clean up and simplify MilesAudioManager (#2718)
  • bugfix(object): Avoid crash with dangling contain module in Object::onDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (#2747)
  • fix(memory): Fix various memory leaks (2) (#2710)
  • unify(shroud): Merge W3DShroud code from Zero Hour and implicitly fix black terrain for one frame on far camera jumps (#2757)
  • fix(metaevent): Ignore order in which modifier keys are released to trigger meta events (#2577)
  • unify(message): Merge MessageStream, MetaEvent code (#2756)

weekly-2026-05-29

29 May 10:28
cc4a683

Choose a tag to compare

Changelog

  • bugfix(water): Fix river visuals in black shroud (#2749)
  • fix(memory): Fix audio event related memory leaks when pausing the game (#2731)
  • fix(particlesys): Simplify ParticleSystemManagerDummy setup (#2740)
  • fix(particlesys): Decouple particle systems from logic crc (#2742)

weekly-2026-05-22

22 May 10:13
bf8d5be

Choose a tag to compare

Changelog

  • bugfix(gameengine): Fix logic in GameEngine::canUpdateRegularGameLogic() (#2707)
  • fix(recorder): Fix memory leak of RecorderClass::m_crcInfo (#2713)
  • bugfix(aigroup): Prevent game crash when a player is selected in Replay playback (2) (#2711)
  • perf(network): Replace extern global network variables with const ones (#2726)
  • refactor(network): Use switch cases in utility functions for network commands (#2725)
  • fix(particlesys): Add or simplify null-checks to createParticleSystem calls (#2724)
  • fix(network): Verify accepted type of incoming game messages (#2708)
  • bugfix(physics): Prevent building crash damage from dealing damage to other objects (#2723)
  • bugfix(physics): Prevent dead units from repeatedly dealing crash damage on collision with non-buildings (#2204)
  • fix(gameengine): Remove music tracks as prerequisite to initialize the game engine (#2737)
  • bugfix: Restore retail compatibility after retail behavior flags change (#2727)
  • refactor(netpacket): Simplify NetPacket functions for packet buffer reads (#2463)
  • fix(object): Prevent crash if Object::m_drawable is a nullptr on save load (#2712)

weekly-2026-05-15

15 May 10:02
44deb06

Choose a tag to compare

Changelog

  • unify(ww3d2): Move dx8fvf, dx8indexbuffer, dx8vertexbuffer to Core (#2706)
  • bugfix(contain): Abort containee's AIExitState if its container object dies (#2513)
  • chore(gamemessage): Clean up GameMessage::getCommandTypeAsString (#2695)
  • unify(gamelogic): Move most GameLogic System files to Core (#2698)
  • unify(gamelogic): Merge GameLogicDispatch and related code (#2698)
  • bugfix(input): Revert changes to local group creation (#2694)
  • refactor: Remove the W3DMPO class to remove clutter and unnecessary vtables (#2607)
  • refactor: Split preserve retail behavior flags (#2691)

weekly-2026-05-08

08 May 09:42
f936bdb

Choose a tag to compare

Changelog

  • unify(ww3d2): Merge dx8fvf, dx8indexbuffer, dx8vertexbuffer (#2690)
  • refactor: Add override keyword to virtual function overrides in Core code (2) (#2603)
  • fix(heightmap): Properly draw larger terrain area on low camera pitch (#2677)
  • chore(heightmap): Implement HeightMapRenderObjClass::setTerrainDrawSize() to set custom draw sizes (#2677)
  • perf(heightmap): Update terrain tiles only if the terrain draw origin has really changed (#2677)
  • bugfix(heightmap): Do full terrain update after new origin position was set (#2677)
  • chore(heightmap): Remove useless logic in HeightMapRenderObjClass::updateCenter() (#2677)
  • tweak(view): Align the camera far clip plane with the actual terrain draw size (#2677)
  • refactor: Add override keyword to virtual function overrides in Zero Hour code (2) (#2605)
  • refactor: Add override keyword to virtual function overrides in Generals code (2) (#2604)
  • bugfix(gamelogic): Modules now cease updating when disabled by non-whitelisted disabled types (#2458)
  • fix(lookat): Fix mouse anchor and direction issue for camera pitch (#2681)
  • bugfix(controlbar): Show shortcut special powers in Generals again (#2680)
  • bugfix(veterancy): Disable audiovisual cues for ejected veteran pilots (#2643)
  • bugfix(player): Fix transferred in-progress upgrades (#2396)
  • tweak(gamemessage): Remove unused MSG_AREA_SELECTION message from game logic (#2667)
  • build(docker): Set correct targets in docker-build.sh (#2678)
  • unify(gadget): Move Gadget files to Core (#2672)
  • unify(gadget): Merge Gadget and related code from Zero Hour (#2672)

weekly-2026-05-01

01 May 09:42
0a65107

Choose a tag to compare

Changelog

  • bugfix(watertracks): Correct the path handling for .wak files in the WaterTracksRenderSystem (#2634)
  • fix(aiupdate): Fix XFER and CRC of AIUpdateInterface::m_guardTargetType (#2662)
  • chore(player): Remove unused GameMessage argument from Player member functions (#2669)
  • bugfix(aiplayer): Preserve scaffold health when AI building completes (#1768)
  • chore(filesystem): Implement getExtension() and TheFileSystem::removeExtension() functions (#2635)
  • chore(string): Implement find() and reverseFind() functions in UnicodeString (#2635)
  • chore(string): Remove unused removeExtension() function from GameState.cpp (#2635)
  • tweak(gamemessage): Remove unused argument of MSG_DESTROY_SELECTED_GROUP (#2664)
  • perf: Remove superfluous null tests in iterateObjects callbacks (#2658)
  • chore(controlbar): Add asserts to verify special power templates and buttons (#2657)
  • unify(controlbar): Merge ControlBar and related code from Zero Hour (#2655)
  • feat: Implement game exit with ALT+F4 and game window close button (#2336)
  • fix(view): Prevent the camera from clipping under terrain (#2652)
  • docs(readme): Add section about profiling (#2202)
  • feat(profiling): Add trace zones and frame marks to Tracy profiling (#2202)
  • feat(profiling): Add messages on game start and game end to Tracy profiling (#2202)
  • feat(profiling): Add plots for logical frame number and pathfinding cells/paths to Tracy profiling (#2202)
  • feat(profiling): Add frame image capturing to Tracy profiling (#2202)
  • feat(profiling): Include Tracy profiler library in the solution (#2202)
  • refactor(profiling): Move rts/profile.h include into WWCommon.h (#2202)
  • refactor(profiling): Rename RTS_PROFILE to RTS_PROFILE_LEGACY (#2202)
  • refactor(profiling): Rename legacy profile library target (#2202)
  • bugfix(view): Set camera far z to acceptable distance (#2653)
  • tweak(view): Implement smooth terrain sampling for camera positioning (#2651)

weekly-2026-04-24

24 Apr 09:43
ffac8f9

Choose a tag to compare

Changelog

  • refactor: Eliminate macro-split assignments (#2641)
  • feat(view): Save position and view direction of player camera in MSG_SET_REPLAY_CAMERA (#2631)
  • feat(options): Implement game options for texture filter mode and anisotropy level (#2482)
  • feat(options): Implement game option to set MSAA level (#2482)
  • bugfix(gui): Remove slider bounds checks to prevent unexpected reset of custom settings (#2624)
  • unify(client): Move GameClient display and system files to Core (#2616)
  • docs: Amend code generation guidelines to CONTRIBUTING.md (#2628)
  • perf(gui): Significantly reduce cost of 2d render elements (#2514)
  • fix: Fix unused variables in WW3D (#2629)
  • chore(dx8fvf): Remove unused vertex_size parameter from FVFInfoClass (#2615)
  • bugfix(view): Fix ground level of bookmarks, replay camera and game world microphone (#2595)
  • style(guiedit): Adjust indentation for combo box data output in save function (#2625)
  • refactor: Remove superfluous returns at the end of functions (#2594)
  • bugfix: Delay creation of object bound particle emitters until ParticleSystemManager is xfer-loaded (#2333)
  • bugfix(input): Block all button presses except ESC during scripted camera scenes (#2621)
  • bugfix(connection): Remove incorrect magic byte check for map transfers (#2614)
  • refactor(metaevent): Move meta event type asserts from key event update to engine initialization (#2590)
  • bugfix(water): Fix river borders appearing darkened under shroud (#2592)
  • refactor: Remove redundant void argument from functions (2) (#2609)

weekly-2026-04-17

17 Apr 09:41
65e52a2

Choose a tag to compare

Changelog

  • unify(ww3d2): Merge dx8renderer, dx8rendererdebugger (#2600)
  • fix: Fix assertion format argument for non-trivial types (#2606)
  • refactor(ini): Simplify token related INI code (#2596)
  • refactor(recorder): Remove code duplications related to file write and logging in RecorderClass (#2543)
  • bugfix(dumbprojectile): Fix in-flight DumbProjectile detonating instantly on save load (#2591)
  • bugfix(input): Fix touchpad upward scrolling in UI list boxes (#2586)
  • unify(ww3d2): Move dx8wrapper, dx8caps to Core (#2599)
  • fix(view): Improve setup of default camera pitch and angle (#2546)
  • fix(ini): Support plus sign prefix in INI integer parse (#2576)
  • fix(ini): Replace unsafe uses of INI::getNextTokenOrNull (#2593)
  • bugfix(audiomanager): Fix dummy audio manager implementation for failing audio length script conditions in headless mode (#2313)
  • bugfix(money): Fix undefined behavior for starting cash combo box (#2582)
  • bugfix(view): Prevent overshooting camera zooming or pivoting on low frame rates (#2588)
  • bugfix(view): Fix malformed camera area constraints during cutscenes (#2587)
  • fix(pathfinder): Fix CRC computation of PathFinder::m_wallPieces (#2575)
  • bugfix(energy): Don't apply power production bonus for disabled power plants on save game load (#2509)
  • bugfix(energy): Don't increase power production for disabled power plants on save game load (#2508)
  • bugfix(input): Use time-based double tap for unit group centering (#2545)
  • refactor: Add override keyword to virtual function overrides in Tools and set compile option -Wsuggest-override (#2394)
  • unify(ww3d2): Merge dx8wrapper, dx8caps, shdlib (#2499)