Skip to content

Releases: TheSuperHackers/GeneralsGameCode

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)

weekly-2026-04-10

10 Apr 09:37
476a57c

Choose a tag to compare

Changelog

  • fix(view): Introduce PRESERVE_RETAIL_SCRIPTED_CAMERA and fix or improve camera offset and zoom calculations (#2524)
  • bugfix(dx8): Improve display mode transition reliability (#2539)
  • ci: Disable vcpkg build (#2544)
  • fix: Resolve macro redefinition warnings (#2525)
  • refactor(ini): Simplify some INI code (#2541)
  • tweak(radar): Suppress under attack radar notification spam (#2540)
  • bugfix(treebuffer): Fix crash in W3DTreeBuffer::updateVertexBuffer() (#2526)
  • fix(actionmanager): Improve validation of Sneak Attack placement legality (#2533)
  • fix(skirmish): Improve determinism for restarted games by resetting slot values (#2373)
  • perf(ini): Improve INI parsing performance by using std::from_chars (#2532)
  • fix(targa): Fix TGA2 footer signature truncation by using strncpy (#2527)
  • refactor(ini): Clean up INI type table and its search logic (#2511)
  • fix(connection): Implement file content validation for map transfers (#1819)

weekly-2026-04-03

03 Apr 09:27
8f263dd

Choose a tag to compare

Changelog

  • fix(refcount): Fix compile warning in constructors of RefCountClass (#2521)
  • refactor: Remove string conversion code for MessageBox (#2523)
  • refactor: Remove superfluous extern keyword from variable declarations (#2522)
  • refactor(view): Remove friends from ViewLocation class (#2516)
  • bugfix(object): Guard GameLogic xfer version bump with RETAIL_COMPATIBLE_XFER_SAVE (#2418)
  • refactor(ww3d2): Simplify dx8wrapper's frame statistics with struct (#2507)
  • refactor(object): Replace explicit local player checks with Object::isLocallyControlled (#2512)
  • chore: Remove unused code in dx8wrapper (#2504)
  • chore: Remove all code related to _XBOX (#2505)
  • bugfix(view): Fix and improve camera pivoting (#2506)
  • bugfix(view): Fix and improve camera area constraints behavior (#2506)
  • bugfix(smudge): Decouple smudge time step from render update (#2484)
  • bugfix(contain): Restore retail compatibility after crash fix in OpenContain::killAllContained (#2439)
  • bugfix(contain): Restore retail compatibility after crash fix in OpenContain::processDamageToContained (#2427)
  • fix(smudge): Align smudges Y offset range with X offset range (#2498)
  • bugfix(globaldata): Fix the handling of documents folder redirection by using SHGetKnownFolderPath() (#2479)

weekly-2026-03-27

27 Mar 09:27
6e4e5f0

Choose a tag to compare

Changelog

  • refactor: Add override keyword to virtual function overrides in GameEngineDevice (#2393)
  • refactor: Add override keyword to virtual function overrides in Libraries (#2390)
  • fix(headless): Set DX8Wrapper_IsWindowed to false to suppress assertion dialogs during shutdown (#2298)
  • bugfix(logic): Fix broken camera edge scroll after loading a savegame from the ingame menu (#2000)
  • bugfix(pathfinder): Improve initialization of uninitialized variable in Pathfinder::classifyFence (#2460)
  • fix(logic): Add nullptr check to msgPlayer in GameLogic::logicMessageDispatcher (#2383)
  • refactor(logic): Rename thisPlayer to msgPlayer in GameLogic::logicMessageDispatcher (#2383)
  • fix(smudge): Fix minor errors in W3DSmudge (#2483)
  • tweak(gui): Enable minimize button for game app window (#2473)
  • bugfix(battleplan): Battle plans are now transferred to the new owner on capture (#2257)
  • bugfix(battleplan): Multiple battle plans are now always applied correctly (#2256)
  • chore: Remove debug code for KRIS_BRUTAL_HACK_FOR_AIRCRAFT_CARRIER_DEBUGGING (#2478)
  • perf(pathfinder): Implement conditional reverse insertion sorting algorithm to reduce cost of long pathfinding by 50-66% (#2450)
  • fix(pathfinder): Remove invalid retail compatible compilation conditional (#2477)
  • refactor(bitflags): Simplify functions in BitFlags class (#2472)
  • refactor(bitflags): Simplify conditions with testForAny, testForAll and remove unexpected assert in BitFlags::testForAll (#2476)

weekly-2026-03-20

20 Mar 09:22
c8c809c

Choose a tag to compare

Changelog

  • feat(headless): Implement ParticleSystemManagerDummy (#2247)
  • feat(headless): Implement ViewDummy (#2246)
  • feat(headless): Implement GhostObjectManagerDummy (#2244)
  • feat(rendering): Add support for multi sample anti-aliasing (MSAA) (#2454)
  • ci(actions): Update GitHub Actions to latest versions and fixed hashes (#2377)
  • feat(texturefilter): Extend texture filter with new filtering modes; none, point, bilinear, trilinear, anisotropic (#2423)
  • chore(texturefilter): Cleanup code formatting and remove commented blocks (#2423)
  • refactor: Add override keyword to virtual function overrides in GameEngine (2) (#2392)
  • fix(docker): Fix docker WORKDIR ownership (#2459)
  • bugfix(contain): Occupants killed by their containers now kill their occupants (#2239)
  • fix(logic): Improve validation of MSG_SET_RALLY_POINT in GameLogicDispatch (#2441)
  • fix(logic): Improve validation of MSG_NEW_GAME in GameLogicDispatch (#2440)
  • fix(logic): Improve handling of ENABLE_RETALIATION_MODE in GameLogicDispatch (#2408)
  • fix(logic): Improve validation of MSG_DO_SPECIAL_POWER and variants in GameLogicDispatch (#2380)
  • bugfix(rallypoint): Make healed units follow building rally point on exit (#1822)
  • bugfix(supply): Implement proportional supply bonus scaling to fix too generous money deposits for partial supply drops (#2431)
  • bugfix(smudge): Fix Microwave Heat Haze blackout on forced AA (#2374)
  • refactor: Add override keyword to virtual function overrides in GameEngine (#2391)
  • unify(logic): Merge game loading related variables and functions from Zero Hour (#2444)