Releases: TheSuperHackers/GeneralsGameCode
Releases · TheSuperHackers/GeneralsGameCode
weekly-2026-03-13
Changelog
- fix(pathfinder): Implement robust forward insertion sort for PathfindCell::putOnSortedOpenList() (#2432)
- refactor(netpacket): Simplify NetPacket functions for packet buffer writes and size tests (#2329)
- refactor(netcommandmsg): Rename NetCommandMsg::getPackedByteCount to NetCommandMsg::getSizeForNetPacket (#2329)
- refactor(netcommandmsg): Simplify net messages NetAckBothCommandMsg, NetAckStage1CommandMsg, NetAckStage2CommandMsg (#2329)
- chore(network): Add new NetAckCommandMsg (#2329)
- fix(network): Fix constness around NetCommandMsg (#2329)
- bugfix(namekey): Remove hardcoded NameKeyIDs from dummy strings to work with modded files (#2349)
- ci(validate): Update PR validation workflow and valid tags (#2426)
- unify(pathfinder): Move AIPathfind.h and AIPathfind.cpp to Core (#2428)
- chore(replays): Update GeneralsReplays reference to latest (#2424)
- fix(lookat): Fix mouse anchor and direction issue for camera pitch (#2421)
- bugfix(audio): Decouple Particle Cannon audio spawn point from visual beam to restore correct position and fix quiet beam audio (#2415)
- unify(pathfinder): Merge Pathfinder::moveAllies and Pathfinder::findAttackPath from Zero Hour (#2341)
- unify(pathfinder): Merge Pathfinder::moveAlliesDestinationCallback, ::processHierarchicalCell, ::findClosestPath, ::updateGoal (#2341)
- unify(pathfinder): Merge Pathfinder::checkForPossible(), ::processPathfindQueue(), ::examineNeighboringCells(), ::buildHierarchicalPath() (#2341)
- unify(pathfinder): Merge Pathfinder::clientSafeQuickDoesPathExist() and Pathfinder::clientSafeQuickDoesPathExistForUI() from Zero Hour (#2341)
- refactor(random): Simplify code in RandomValue (#2370)
- unify(pathfinder): Merge PathfindLayer::doDebugIcons(), Pathfinder::Classify functions, Pathfinder::checkDestination() and Pathfinder::checkForMovement() (#2414)
weekly-2026-03-06
Changelog
- bugfix(heightmap): Fix zagged shapes on steep diagonal terrain (#2406)
- refactor(view): Split contents of W3DView::buildCameraTransform(), W3DView::calcCameraAreaConstraints() (#2403)
- bugfix(gunship): Select Spectre Gunship only on the client that controls the unit (#2402)
- bugfix(ai): Reset jet locomotor to normal when attack locomotor timer expires (#2397)
- build(cmake): Append RTS_BUILD_OUTPUT_SUFFIX to installable targets (#2378)
- unify(pathfinder): Merge PathfindZoneManager() (#2404)
- chore(pathfinder): Remove unused forced refresh calling in PathfindZoneManager::calculateZones() (#2404)
- refactor: Add compatibility macros for override and final keywords and rename conflicting identifiers (#2389)
- refactor(random): Reorder RandomValue function definitions (2) (#2405)
- refactor(dozeraiupdate): Streamline dozer task cancellation logic (#2387)
- refactor(random): Reorder RandomValue function definitions (#2384)
- feat: Implement math CRC calculation utility for logic mismatch detection purposes (#2100)
- bugfix(pathfinder): Fix uninitialized variable in Pathfinder::tightenPathCallback to prevent mismatches (#2309)
- unify(pathfinder): Remove unused argument from PathfindZoneManager::markZonesDirty() (#2381)
- unify(pathfinder): Merge PathfindCell class from Zero Hour (#2381)
- unify(pathfinder): Merge CellTypes and CELL_BRIDGE_IMPASSABLE code from Zero Hour (#2381)
- unify(pathfinder): Merge PathfindCell::setTypeAsObstacle() and PathfindCell::removeObstacle() from Zero Hour (#2381)
- chore(pathfinder): Remove legacy Pathfind debug code from Generals (#2381)
- bugfix(radar): Fix incorrect 2D distance calculation in Radar::tryEvent (#2368)
- refactor(battleplan): Split data off of BattlePlanBonuses class (#2335)
- bugfix(audio): Fix range volume fade of 3D sounds and make it configurable in AudioSettings.ini (#2369)
- fix(view): Implement state for user controlled camera to properly distinguish between scripted and user camera (#2363)
- fix(network): Move TransportMessageHeader to before it is used in NetworkDefs.h (#2382)
- ci(vcpkg): Fix recurring binary cache invalidation from runner image updates (#2371)
- unify(pathfinder): Merge local variable optimizations in PathfindZoneManager::calculateZones() from Zero Hour (#2367)
- fix(pathfinder): Add missing logical block for zone type optimization in PathfindZoneManager::calculateZones() (#2360)
- chore(pathfinder): Remove register variable and use member variable directly in PathfindZoneManager::calculateZones() (#2360)
- chore(pathfinder): Change while loops to for loops in PathfindZoneManager::calculateZones() (#2360)
- chore(pathfinder): Change open braces to be K&R style in PathfindZoneManager::calculateZones() (#2360)
- chore(pathfinder): Change leading spaces to leading tabs in PathfindZoneManager:calculateZones() (#2360)
- tweak(menu): Show mouse and menu immediately when shellmap is disabled (#2356)
- fix(logic): Fix potential null pointer deferences in GameLogicDispatch (#2354)
- tweak(random): Replace InitGameLogicRandom with InitRandom for consistent client and audio seeds (#2339)
- bugfix(audio): Fix particle cannon being inaudible after saveload (#2302)
- fix(headless): Use ParticleSystemManager update instead of reset in headless replay (#2219)
- refactor(view): Change scripted state booleans to enum flags in W3DView (#2357)
- bugfix(partition): Fix inconsistent mine collision behaviour (#2208)
weekly-2026-02-27
Changelog
- refactor(view): Simplify code to set location for Replay Camera (#2353)
- fix(view): Call View::forceRedraw() instead of doing tricks to refresh the camera normally (#2352)
- refactor(lookat): Simplify pitch, fov, zoom logic in LookAtTranslator (#2351)
- fix(object): Save and load game object list in correct order (#2161)
- bugfix(registry): Prioritize HKEY_CURRENT_USER registry reads and writes over HKEY_LOCAL_MACHINE to prevent inaccessible data (#1844)
- refactor: Remove redundant void argument from functions (#2345)
- refactor: Simplify unconditional asserts from DEBUG_ASSERTCRASH to DEBUG_CRASH (#2343)
- refactor(preferences): Move OptionPreferences class into separate files (#1840)
- refactor(language): Cleanup GlobalLanguage code and add function GlobalLanguage::getResolutionFontSizeScale() (#2338)
- bugfix(skirmish): Prevent mismatch in Replay playback by restoring correct game seed after restarting a Skirmish game (#2270)
- refactor(pathfinder): Remove unused function Pathfinder::pathDestination() (#2308)
- unify(client): Move several GameClient files to Core (#2337)
- unify(client): Merge DisplayString, GameText, GlobalLanguage, SelectionInfo code (#2337)
- bugfix(player): Fix rounding inaccuracies with money awarded by Cash Bounty (#2330)
- bugfix(behavior): Prevent fallen Angry Mob members from respawning at the Barracks after loading a save (#2314)
- refactor(pathfinder): Cleanup retail compatible insertion sort code (#2331)
- refactor(pathfinder): Implement PathfindCellList class for the pathfindcell closedList (#2327)
- refactor(pathfinder): Implement PathfindCellList class for the pathfindcell openList (#2327)
- bugfix(victory): Save victory status to prevent early exits from resulting in defeat in network matches (#2292)
- fix(netpacket): Fix incorrect improbable return value in NetPacket::GetBufferSizeNeededForCommand() (#2328)
- unify(gui): Move several GUI related files to Core (#2332)
- unify(loadscreen): Merge LoadScreen and related code (#2332)
- fix(loadscreen): Fix missing pointer initialization in constructors of MultiPlayerLoadScreen, GameSpyLoadScreen and remove superfluous code from destructors of LoadScreen classes (#2332)
- unify(mouse): Move Mouse, Keyboard files to Core (#2334)
- unify(mouse): Merge Mouse, Keyboard code (#2334)
weekly-2026-02-20
Changelog
- bugfix(battleplanupdate): Prevent using the Bombardment Cannon while switching Battle Plans (#2324)
- bugfix(behavior): Only detonate Bunker Busters if the missile reaches its destination (#2321)
- tweak(commandline): Skip intro logo with -quickstart and enable -nologo, -noShellAnim in Release builds (#2266)
- bugfix(radar): Show Hero Radar icons in Containers and Tunnels again (#2189)
- fix(connection): Fix unsafe Player ID usage in ConnectionManager, DisconnectManager (#2305)
- bugfix(particlesys): Restore Particle System IDs on save load before registering to ParticleSystemManager (#2316)
- bugfix(worldbuilder): Fix incorrect access of empty list in ObjectOptions::_FindOrDont() (#2306)
- tweak: Put fixes that do affect gameplay behind PRESERVE_RETAIL_BEHAVIOR (#2319)
- build: Fix compile error when building without RETAIL_COMPATIBLE_CRC (#2318)
- bugfix(worldbuilder): Fix optimized trees not being shown in object placer preview window (#2312)
- bugfix(worldbuilder): Fix uncaught carriage return in CommandButton name when parsing from INI (#2300)
- feat(cratecollide): Add INI option to allow a crate to be picked up multiple times in one frame (#2297)
- build(docker): Add Linux LSP support by fixing compile_commands.json paths (#2303)
- tweak(worldbuilder): Remove EULA code and data (#2307)
- fix(netpacket): Fix undefined behavior with NetPacket buffer writes (#2304)
- bugfix(network): Increase message buffer and max packet sizes to reduce connection issues (#2277)
- bugfix: Remove superfluous CD checks and related code (#2261)
- refactor(netpacket): Simplify initialization of net packet field types (#2288)
- refactor(netpacket): Streamline order of net packet fields (#2288)
- fix(draw): Recover tread debris effects for W3DTankTruckDraw (#2251)
- refactor(draw): Rename emitters functions in W3DTankDraw, W3DTankTruckDraw, W3DTruckDraw (#2251)
- bugfix(worldbuilder): Fix script condition selection when editing newly created condition (#2289)
weekly-2026-02-13
Changelog
- bugfix(view): Recalculate camera area constraints when toggling Control Bar or changing Pitch, FOV (#2291)
- chore(gui): Implement function GadgetTextEntrySetMaxLen() (#2290)
- bugfix(contain): Prevent undefined behaviour when a dead unit enters a container (#2258)
- bugfix(ocl): Fix uninitialized variable in ObjectCreationList to avoid mismatches (#2096)
- bugfix(projectile): Fix out-of-bounds access in DumbProjectile which causes mismatch with very high speed weapons at small hit distances (#2087)
- bugfix(pathfinder): Fix uninitialized variable in Pathfinder::classifyFence() and possible source of mismatches in Retail-compatible builds (#1748)
- fix(netpacket): Protect text length value from overflowing in NetPacketChatCommand, NetPacketDisconnectChatCommand (#2284)
- fix(netcommandmsg): Fix new/delete mismatch in NetWrapperCommandMsg (#2287)
- refactor(netpacket): Use more consistent names for packed net packet structs (#2283)
- refactor(netpacket): Remove duplicate packed commands and cleanup code comments (#2283)
- fix(comments): Use 2026 for this year's code comments (#2285)
- perf(view): Optimize and simplify camera transform update logic (#2280)
- bugfix(gui): Fix application hang from scrolling a map list with arrow keys (#2281)
- feat(gui): Add support for extra column to separate time and date in Replay Menu (#2278)
- bugfix(cratecollide): Prevent crates from being collected multiple times in a single frame (#2279)
- bugfix(object): Cancel previous tasks for captured dozers (#2237)
- fix(view): Prevent float division by zero in W3DView::setupWaypointPath() (#2274)
- refactor(view): Simplify View angle normalization (#2271)
- feat(gui): Add replay dates to replay list in Replay Menu (#2255)
- fix(display): Fix VideoBuffer format selection in W3DDisplay::createVideoBuffer (#2265)
- fix(intro): Fix order of Display Update and Draw in intro loop (#2264)
- fix(netpacket): Fix misplaced null test in NetPacket::addCommand() (#2272)
- feat(gui): Implement Player Info List (#2136)
- refactor(netpacket): Simplify packet serialization code by using packed structs (#1680)
- fix: Replace sprintf with snprintf to prevent potential stack overflows (#2262)
- build(cmake): Force include CppMacros.h globally for VC6 (#2252)
- tweak(gui): Use default locale of user for listed replays and save games to match regional date time formats (#2254)
- fix(debug): Allocate enough terrain debug icons based on the map dimensions in W3DDebugIcons() (#2231)
weekly-2026-02-06
Changelog
- feat(lanapi): Add LANAPI function to find LAN game with host IP address (#2249)
- fix(update): Extend the height of the USA Particle Cannon laser beam for enormous camera heights (#2220)
- tweak(pathfinder): Add audio event and message to announce pathfinding failover (#2242)
- refactor(audio): Replace AudioManager's loseFocus/regainFocus with reason-based mute/unmute functions (#2236)
- fix(update): Fix value initialization of ProjectileStreamUpdate::m_projectileIDs (#2248)
- fix(draw): Replace ParticleSystem pointers with ParticleSystemID for safe particle lookups in W3DTrankDraw, W3DTankTruckDraw, W3DTruckDraw (#2235)
- refactor(draw): Simplify particle effects code in W3DTankDraw, W3DTankTruckDraw, W3DTruckDraw (#2235)
- feat(version): Add functions to get Git short hash string (#2243)
- refactor(lanapi): Make LANMessage accessible in LANAPI (#2241)
- fix(draw): Fix illogical dirt effect update code in W3DTruckDraw::doDrawModule(), W3DTankTruckDraw::doDrawModule() (#2234)
- refactor(view): Simplify Clip Planes related code in W3DView::setCameraTransform() (#2232)
- refactor(view): Simplify position code in W3DView::buildCameraTransform() (#2232)
- refactor(view): Simplify Real Zoom Cam related code (#2232)
- refactor(view): Consolidate duplicate terrain render update logic into new function W3DView::updateTerrain() (#2232)
- refactor(view): Simplify zoom adjustment code in W3DView::update() (#2232)
- refactor(view): Split View::setAngleAndPitchToDefault into 2 separate functions (#2232)
- refactor(view): Improve functions, variables, comments in View, W3DView (#2232)
- refactor(view): Remove unused functions in View class (#2232)
- docs: Fix spelling errors in Core, GameEngineDevice, Libraries, Tools comments (2) (#2147)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine comments (2) (#2146)
- docs: Fix spelling errors in Generals/Code/GameEngine comments (2) (#2145)
- perf(particlesys): Optimize angleBetween() in Particle System (#2218)
- perf(particlesys): Reduce cost of ParticleSystemManager::findParticleSystem() by 80% (#2217)
- fix(shadow): Fix crash by initializing debris shadow name to an empty string (#2221)
- bugfix(gui): Fix game window animation movements to scale with display resolution (#2210)
- bugfix(aigroup): GLA Battle Bus can now respond to attack commands while in bunkered form (#2213)
- fix(display): Polish the camera debug text in W3DDisplay::gatherDebugStats() (#2230)
- fix(radar): Always keep Radar View Box in sync with the actual Camera View (#2229)
- refactor(basetype): Implement new functions Region3D::setFromPointsNoZ, Region3D::setFromPoints (#2228)
- fix(camera): Apply misc code type and comment fixes (#2227)
- unify(w3ddraw): Move W3D Draw files to Core (#2225)
- unify(w3ddraw): Merge W3DModelDraw, W3DDependencyModelDraw code (#2225)
- bugfix(pathfinder): Fix some pinched cells being changed to impassable cells in internal_classifyObjectFootprint() (#2222)
- build(debug): Add CMake option RTS_DEBUG_CHEATS to enable debug cheats in release builds (#1842)
- tweak(jetaiupdate): Defer offensive commands for parked jets without ammo (#2174)
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(a B943 ctivebody): 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 ( 527D #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)