Releases: TheSuperHackers/GeneralsGameCode
Releases · TheSuperHackers/GeneralsGameCode
weekly-2026-05-22
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
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
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
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
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
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
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
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
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
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)