Releases: TheSuperHackers/GeneralsGameCode
Releases · TheSuperHackers/GeneralsGameCode
weekly-2026-01-30
Changelog
- fix(radar): Fix Radar pixel color format for non A8R8B8G8 surfaces (#2170)
- unify(particlesys): Move ParticleSys and ParticleEditor files to Core (#2212)
- refactor(view): Fix variable names in View::getScreenCornerWorldPointsAtZ() (#2201)
- unify(particlesys): Merge minor refactors in ParticleSystem (#2153)
- unify(particlesys): Merge changes to math for aligning particle Z rotation with emitter direction from Zero Hour (#2153)
- unify(particlesys): Merge optimization for wind motion particle update when disabled from Zero Hour (#2153)
- unify(particlesys): Merge fix for erroneous particle visibility thresholds in Particle::isInvisible from Generals (#2153)
- unify(particlesys): Merge optimization of alpha particle update from Zero Hour (#2153)
- unify(particlesys): Merge addition of SMUDGE particle type from Zero Hour (#2153)
- unify(particlesys): Compile out superfluous X and Y particle angles in Generals (#2153)
- unify(particlesys): Merge addition of ParticleSystem::setSkipParentXfrm from Zero Hour (#2153)
- unity(particlesys): Merge removal of Drawable Particle Attachments from Zero Hour (#2153)
- bugfix(mouse): Make Cursor Capture opt-in to prevent capture in GUIEdit (#2187)
- bugfix(ghostobject): Add Ghost Objects of the local player to the scene correctly after loading a savegame (#2186)
- fix(basetype): Add min/max template functions to BaseType.h (#2183)
- fix(activebody): Subdual damage can no longer go negative (#2184)
- bugfix(actionmanager): Allow immediate resumed construction of buildings if the existing builder dies (#1872)
- bugfix(dozeraiupdate): Builders now resume their task after having been disabled (#1870)
- fix(network): Fix slightly unstable latency calculation in FrameMetrics::processLatencyResponse() (#2200)
- bugfix(network): Revert changes to ConnectionManager::getMaximumLatency() to avoid a higher latency runahead than required (#2199)
- unify(common): Move some common system files to Core (#2185)
- unify(lib): Move BaseType.h, trig.h to Core (#2185)
- unify(common): Merge Registry code (#2193)
- unify(common): Merge CriticalSection, ScopedMutex code from Generals (#2194)
- unify(common): Merge PerfTimer, StackDump code from Zero Hour (#2195)
- unify(common): Merge TerrainTypes from Zero Hour (#2196)
- refactor(audioevent): Remove const casts for calling AudioEventRTS::setPlayingAudioIndex() (#2179)
- unify(userpreferences): Move UserPreferences files to Core (#2182)
- unify(userpreferences): Merge UserPreferences and related code (#2182)
- unify(common): Merge GameCommon and related code (#2180)
- unify(ini): Merge INI and related code (#2180)
- unify(subsystem): Merge SubsystemInterface code (#2180)
- unity(basetype): Merge Lib/BaseType.h code (#2180)
- bugfix(ai): Units located above the terrain can no longer teleport into airborne transports (#1794)
- tweak(upgrade): Increase upgrade limit to 512 (#2162)
- fix(thingfactory): Prevent use-after-free from assert in ThingFactory::reset() (#2172)
- perf(ini): Simplify, optimize and merge INI read line buffer implementation (#2143)
- refactor: Fix confusing use of logical AND and OR expressions (#954)
weekly-2026-01-23
Changelog
- fix(optionsmenu): Change incorrect OR/AND precedence of an unused condition in the OptionsMenu (#2164)
- bugfix(aiupdate): Chinooks and Helixes now correctly wait for their passengers to disembark (#1792)
- bugfix(pathfinder): Fix late game unit lockups and erroneous impassable terrain (#2140)
- refactor(pathfinder): Move obstacle handling functions from PathfindCell header to the cpp (#2140)
- unify(damage): Merge DamageTypeFlags from Zero Hour (#2141)
- build(cmake): Dial back BINK upgrade to get the CMake INSTALL target to work again (#2167)
- refactor(bitflags): Simplify and improve setup for DAMAGE_TYPE_FLAGS_ALL, DISABLEDMASK_ALL, KINDOFMASK_FS (#2159)
- feat(cmake): Add debug symbol stripping for MinGW Release builds (#2067)
- fix(debug): Simplify unconditional DEBUG_ASSERTCRASH to DEBUG_CRASH (#2067)
- fix(casts): Add explicit void* casts for function pointers (#2067)
- fix(compatibility): Add compiler guards and GCC inline assembly for StackDump (#2067)
- fix(calling-convention): Standardize calling conventions and variadic macros (#2067)
- fix(linkage): Fix static/extern linkage mismatches for MinGW (#2067)
- fix(headers): Add missing forward declarations for MinGW (#2067)
- fix(core): Add MinGW-w64 compatibility fixes to Core libraries (#2067)
- fix(cmake): Fix CMake dependencies and library linking for MinGW (#2067)
- fix(precompiled): Add ATL compatibility to precompiled headers (#2067)
- build(cmake): Add MinGW CMake presets for i686 (#2067)
- build(cmake): Configure MinGW-specific compiler and linker settings (#2067)
- build(deps): Update external dependencies for MinGW-w64 support (#2067)
- build(cmake): Add ReactOS COM support utilities (comsupp) (#2067)
- build(cmake): Add ReactOS ATL and PSEH compatibility layer (#2067)
- build(cmake): Add widl integration for COM interface generation (#2067)
- build(cmake): Add MinGW-w64 toolchain and base configuration (#2067)
- fix(tunnel): Fix undefined behavior in TunnelTracker::onTunnelDestroyed() and incomplete asset transfer in Team::setControllingPlayer() (#1958)
- perf(radar): Reduce cost of W3DRadar::renderObjectList (by 80%), W3DRadar::buildTerrainTexture (by 25%) and W3DRadar::clearShroud (#2138)
- refactor(math): Implement Matrix4x4::Inverse, Matrix3D::Get_Inverse and replace unsafe Matrix4x4 to D3DMATRIX casts with conversion functions that apply the required transpose (#2052)
- fix: Fix spelling errors in code words (#2149)
- fix(debug): Fix spelling errors in DEBUG macro strings (#2148)
- bugfix(wbview3d): Fix crash on window resize in Generals World Builder (#2151)
- bugfix(object): Preserve unit behaviour when transferring assets to allies (#1885)
- bugfix(ai): Fix crash when AI player attempts to build a supply center with an invalid name (#2095)
- bugfix(heightmap): Revert optimization for m_vertexBufferTiles in HeightMapRenderObjClass because it does not work properly (#2135)
- bugfix(ghostobject): Readd null check for 3DScene in W3DRenderObjectSnapshot::addToScene to prevent crash in headless replay playback (#2133)
- bugfix(logic): Decouple scripted audio events from CRC computation (#2075)
- feat(build): Add new docker build and game install scripts for Linux (#2085)
- bugfix(script): Restore retail compatibility for sequential scripts in ScriptEngine (#2129)
- bugfix(audio): Restore retail compatibility after optimization change in AudioManager::addAudioEvent (#2132)
- ci: Add workflow to trigger build from any commit for replay mismatch testing (#2114)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Source/GameClient and Common comments (#2122)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Source/GameLogic comments (#2121)
- docs: Fix spelling errors in Generals/Code/GameEngine/Source comments (#2118)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Include comments (#2123)
- docs: Fix spelling errors in Generals/Code/GameEngine/Include comments (#2119)
- docs: Fix spelling errors in GeneralsMD Libraries, Tools, GameEngineDevice comments (#2124)
- docs: Fix spelling errors in Generals Libraries, Tools, GameEngineDevice comments (#2120)
- docs: Fix spelling errors in Core/Tools and Core/GameEngine comments (#2117)
- docs: Fix spelling errors in Core/Libraries comments (#2116)
- fix: Rename misspelled identifiers (#2109)
- bugfix: Fix spelling errors in debug/diagnostic strings (#2108)
- bugfix(dx8caps): Resolve greyscale texture rendering issues in VMWare environments (#2128)
- bugfix(buildassistant): Restore retail compatibility after build assistant shroud logic change (#2131)
- bugfix(actionmanager): Restore retail compatibility after construction cursor change in ActionManager (#2125)
weekly-2026-01-16
Changelog
- perf(radar): Reduce cost of radar pixel draw in PartitionManager::refreshShroudForLocalPlayer by 96% (#2072)
- refactor(ww3dformat): Merge function PixelSize into Get_Bytes_Per_Pixel (#2072)
- build(cmake): Expose source files of interface libraries core_utility, corei/gi/zi_libraries_include in Visual Studio solution (#2092)
- refactor(cmake): Move core_config into corei_always for simplification (#2091)
- refactor(gamelogic): Rearrange local variables in GameLogic::startNewGame() (#2115)
- perf(heightmap): Optimize data locality for m_vertexBufferTiles and m_vertexBufferBackup in HeightMapRenderObjClass (#2104)
- refactor(heightmap): Simplify functions getXWithOrigin(), getYWithOrigin() of HeightMapRenderObjClass (#2103)
- perf(heightmap): Optimize repeated calls to getXWithOrigin, getYWithOrigin in HeightMapRenderObjClass::updateVB (#2102)
- bugfix(scriptengine): Fix script dialog text spelling mistakes and errors in ScriptEngine (#2093)
- refactor: Modernize NULL to nullptr (#1938)
- build(cmake): Move most CppMacros.h includes into precompiled headers and make them available in all build targets (#2090)
weekly-2026-01-09
Changelog
- refactor(heightmap): Clarify magic numbers related to VERTEX_BUFFER_TILE_LENGTH (#2079)
- fix(heightmap): Fix CENTER_LIMIT condition in HeightMapRenderObjClass::updateCenter (#2078)
- perf(heightmap): Reduce cost of min height loop in HeightMapRenderObjClass::updateCenter by 93% (#2077)
- bugfix(render2d): Fix possible greyscale image rendering issues on hardware without DOT3 support (#2080)
- bugfix(actionmanager): Do not show false resume construction cursor for allied scaffolds (#2068)
- refactor(heightmap): Remove HALF_RES_MESH because it was never used and is broken (#2076)
- bugfix(network): Fix packet size setup mistakes (#2040)
- bugfix(worldbuilder): Avoid taking action on cancel button for script conditions and actions (#2065)
- bugfix(worldbuilder): Initialize boolean in ScriptConditionsDlg::OnEditCondition to show logical condition (#2062)
- refactor(audio): Use MilesAudioManager::getEffectiveVolume consistently (#2058)
- fix(xfer): Fix xfer retail compatibility code (#2024)
- bugfix(object): Do not apply veterancy bonuses and animations for dead units (#1968)
- bugfix(audio): UI audio no longer plays at maximum volume for a single frame when navigating between shell map menus (#2019)
- tweak(drawable): Decouple stealth detected opacity fade time step from render update (#2047)
- perf(ai): Avoid a few std::vector copies when passing ai paths to functions (#1895)
- bugfix(lobby): Properly sort CRC mismatched game rooms to the bottom of the lobby (#1845)
- bugfix(ai): Undetected mines can now be approached when using a disarm weapon (#1883)
- bugfix(aiupdate): Prevent manually ejecting rappelling Rangers during Chinook Combat Drop (#1789)
- tweak(drawable): Set correct model tint color after loading a save game (#2025)
- bugfix(thingfactory): Reset next ThingTemplate ID after clearing custom map template overrides to avoid CRC mismatch in the next multiplayer game session (#2034)
- perf(weaponstore): Optimize WeaponStore::findWeaponTemplatePrivate with hash map lookup (#2042)
- bugfix(heightmap): Fix dynamic lights on terrain (#2039)
- bugfix(heightmap): Disable old uv adjument for cliffs (#2038)
- refactor(logic): Simplify code in GameLogic's init, reset, startNewGame (#2027)
weekly-2026-01-02
Changelog
- refactor(network): Simplify error prone net packet size calculations with packed structs (#1675)
- perf(contain): Optimize Object::isHero with cached hero counter (#1841)
- bugfix(aiupdate): Invalidate build task of Dozers and Workers if the assigned target scaffold no longer exists (#1868)
- ci(vcpkg): Stabilize vcpkg binary caching; add compiler-aware keys and explicit cache path (#2028)
- refactor(audio): Simplify volume related code in AudioManager and MilesAudioManager (#2030)
weekly-2025-12-26
Changelog
- perf(audio): Optimize fail condition order in AudioManager::addAudioEvent (#1843)
- fix(logic): Fix unexpected return in GameLogic::logicMessageDispatcher's switch case MSG_CANCEL_UNIT_CREATE (#1881)
- refactor: Apply clang-tidy fixes for generals-use-is-empty (#2018)
- refactor: Apply clang-tidy fixes for generals-use-this-instead-of-singleton (#2017)
- bugfix(aiupdate): Chinooks and Helixes no longer take off after repair if passengers want to board or exit (#1787)
- bugfix(aiupdate): Repairing Chinooks and Helixes no longer take off after evacuating all passengers (#1762)
- bugfix(input): Replace frame-based timings with real-time timings in input system (#1835)
- chore: Implement scripts for custom isEmpty() and singleton refs clang-tidy checks (#2010)
- bugfix(network): Assign disconnect frame when quitting the game via the disconnection menu (#2020)
- tweak(metaevent): Change COMMANDUSABLE_OBSERVER to no longer apply in Shell Map (#2002)
weekly-2025-12-19
Changelog
- bugfix(network): Fix data offset for string reads in NetPacket::readFileMessage() and NetPacket::readFileAnnounceMessage() (#2005)
- build: Implement docker build (#1774)
- refactor: Apply integer value comparisons for strcmp and stricmp with clang-tidy (#1956)
- bugfix(experience): Prevent ranking of riders that are not trainable (#1970)
- bugfix(object): Fix visibility conditions for client-side effects (#1964)
- bugfix(input): Disable mouse waypoint mode after using alt tab (#1987)
- unify(heightmap): Move Height Map and Terrain related files to Core (#1991)
- unify(heightmap): Merge Height Map related code and move Zero Hour's BaseHeightMap, FlatHeightMap, W3DPropDraw, W3DTreeDraw, W3DPropBuffer, W3DSnow, W3DTerrainBackground files to Core (#1991)
- build(heightmap): Fix include paths in Zero Hour Height Map files (#1991)
- unify(texture): Move W3DWater, W3DLaserDraw and WW3D2 texture related files to Core (#1989)
- unify(texture): Merge W3DWater and WW3D2 texture code (#1989)
- refactor: Apply the readability-container-size-empty check with clang-tidy (#1957)
- fix(network): Fix missing value initialization of LANGameInfo::m_isDirectConnect (#1836)
- bugfix(network): Prevent buffer overflow in NetPacket::readFileMessage() and NetPacket::readFileAnnounceMessage() (#1981)
weekly-2025-12-12
Changelog
- perf(namekey): Remove all superfluous AsciiString allocations for name key lookups (#1959)
- refactor(namekey): Reduce code duplication in NameKeyGenerator functions, misc formatting tweaks (#1959)
- unify(matpass): Merge WW3D2 matpass code (#1982)
- refactor: Remove superfluous inline and register keywords with clang-tidy (#1936)
- bugfix(string): Allow startsWith and endsWith to be called on empty strings (#1979)
- build: Add clang-tidy checks and script (#1807)
- bugfix(pathfinder): Prevent infinite loop within PathfindCell::putOnSortedOpenList() (#1965)
- ci(vcpkg): Include preset in binary cache key to avoid ABI mismatches and slow CI builds (#1973)
- feat(crashdump): Add crash dump functionality for fatal errors (#1594)
- bugfix(mouse): Prevent cursor capture when mouse is outside of app window (#1939)
- refactor(mouse): Apply minor refactoring and whitespace tweaks in WinMain, Mouse, HeaderTemplate (#1939)
- fix: Wrong usage of sizeof(this) in BitFlags::xfer(), W3DMPO::glueEnforcer() (#1947)
- bugfix(network): Prevent out of bounds memory access in NetCommandWrapperListNode::copyChunkData() (#1946)
- build: Use cmake_host_system_information to make registry queries in cmake (#1943)
weekly-2025-12-05
Changelog
- feat(movie): Implement ESC button mapping to skip Campaign, Challenge and Score videos (#1926)
- tweak(keyboard): Apply minor improvements to Keyboard class to query pressed keys (#1926)
- bugfix(movie): Fix Campaign, Challenge, Score movie cancellation or decompression artifacts when tabbing out of the game (#1927)
- refactor: Remove or replace some superfluous empty C strings (#1929)
- refactor(network): Replace implicit conversion from NULL to AsciiString in IPEnumeration::getMachineName (#1934)
- build: Add WOW6432Node to registry path lookups for EA App install path detection (#1903)
- refactor(string): Fix constness of TheEmptyString (#1930)
- refactor: Remove all explicit UnicodeString instantiations from C strings (#1928)
- bugfix(filesystem): Prevent loading wrong INIZH.big from Data/INI directory to prevent INI CRC mismatch (#1879)
- refactor: Remove superfluous variable init comments (#1876)
- refactor: Remove all explicit AsciiString instantiations from C strings (#1916)
- unify(view): Move View, W3DView to Core (#1904)
- unify(view): Merge View and closely related code (#1904)
- unify(client): Move ParabolicEase, CameraShakeSystem to Core (#1904)
- refactor: Replace preprocessor condition _WINDOWS with _WIN32 (#1911)
- unify(shader): Move W3DShaderManager to Core (#1920)
- unify(shader): Merge W3DShaderManager code, move Smudge, W3DSmudge to Core (#1920)
- bugfix(energy): Destruction of disabled Power Plant no longer lowers energy production twice (#1857)
weekly-2025-11-28
Changelog
- bugfix(radar): Add hero radar objects into its own list to get rid of hero cache updates and its related issues (#1893)
- refactor(radar): Simplify function Radar::deleteListResources (#1893)
- refactor(radar): Simplify function W3DRadar::renderObjectList (#1893)
- refactor(radar): Simplify function Radar::addObject (#1893)
- bugfix(weapon): Weapon effects now show again for hidden objects that are not explicitly stealthed (#1918)
- tweak(gui): Add configuration to GameData.ini to allow Money Per Minute for players (#1914)
- refactor(string): Implement generic startsWith, endsWith functions for C strings (#1898)
- refactor: Use new utility logic for handling observed player behaviour (#1861)
- bugfix(module): A projectile can no longer be jammed multiple times (#1907)
- unify(radar): Move ObjectStatusTypes, Radar, W3DRadar files to Core (#1894)
- unify(radar): Merge Radar code (#1894)
- unify(common): Merge ObjectStatusTypes code (#1894)
- refactor: Convert strlcpy to strcpy with static_assert (#1887)