Releases: stephanmeesters/GeneralsGameCode
Releases · stephanmeesters/GeneralsGameCode
weekly-2026-02-05
Changelog
- ci: Patch VC6 game executable with NXCOMPAT to enhance security
- feat(lanapi): Add LANAPI function to find LAN game with host IP address (TheSuperHackers#2249)
- fix(update): Extend the height of the USA Particle Cannon laser beam for enormous camera heights (TheSuperHackers#2220)
- tweak(pathfinder): Add audio event and message to announce pathfinding failover (TheSuperHackers#2242)
- refactor(audio): Replace AudioManager's loseFocus/regainFocus with reason-based mute/unmute functions (TheSuperHackers#2236)
- fix(update): Fix value initialization of ProjectileStreamUpdate::m_projectileIDs (TheSuperHackers#2248)
- fix(draw): Replace ParticleSystem pointers with ParticleSystemID for safe particle lookups in W3DTrankDraw, W3DTankTruckDraw, W3DTruckDraw (TheSuperHackers#2235)
- refactor(draw): Simplify particle effects code in W3DTankDraw, W3DTankTruckDraw, W3DTruckDraw (TheSuperHackers#2235)
- feat(version): Add functions to get Git short hash string (TheSuperHackers#2243)
- refactor(lanapi): Make LANMessage accessible in LANAPI (TheSuperHackers#2241)
- fix(draw): Fix illogical dirt effect update code in W3DTruckDraw::doDrawModule(), W3DTankTruckDraw::doDrawModule() (TheSuperHackers#2234)
- refactor(view): Simplify Clip Planes related code in W3DView::setCameraTransform() (TheSuperHackers#2232)
- refactor(view): Simplify position code in W3DView::buildCameraTransform() (TheSuperHackers#2232)
- refactor(view): Simplify Real Zoom Cam related code (TheSuperHackers#2232)
- refactor(view): Consolidate duplicate terrain render update logic into new function W3DView::updateTerrain() (TheSuperHackers#2232)
- refactor(view): Simplify zoom adjustment code in W3DView::update() (TheSuperHackers#2232)
- refactor(view): Split View::setAngleAndPitchToDefault into 2 separate functions (TheSuperHackers#2232)
- refactor(view): Improve functions, variables, comments in View, W3DView (TheSuperHackers#2232)
- refactor(view): Remove unused functions in View class (TheSuperHackers#2232)
- docs: Fix spelling errors in Core, GameEngineDevice, Libraries, Tools comments (2) (TheSuperHackers#2147)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine comments (2) (TheSuperHackers#2146)
- docs: Fix spelling errors in Generals/Code/GameEngine comments (2) (TheSuperHackers#2145)
- perf(particlesys): Optimize angleBetween() in Particle System (TheSuperHackers#2218)
- perf(particlesys): Reduce cost of ParticleSystemManager::findParticleSystem() by 80% (TheSuperHackers#2217)
- fix(shadow): Fix crash by initializing debris shadow name to an empty string (TheSuperHackers#2221)
- bugfix(gui): Fix game window animation movements to scale with display resolution (TheSuperHackers#2210)
- bugfix(aigroup): GLA Battle Bus can now respond to attack commands while in bunkered form (TheSuperHackers#2213)
- fix(display): Polish the camera debug text in W3DDisplay::gatherDebugStats() (TheSuperHackers#2230)
- fix(radar): Always keep Radar View Box in sync with the actual Camera View (TheSuperHackers#2229)
- refactor(basetype): Implement new functions Region3D::setFromPointsNoZ, Region3D::setFromPoints (TheSuperHackers#2228)
- fix(camera): Apply misc code type and comment fixes (TheSuperHackers#2227)
- unify(w3ddraw): Move W3D Draw files to Core (TheSuperHackers#2225)
- unify(w3ddraw): Merge W3DModelDraw, W3DDependencyModelDraw code (TheSuperHackers#2225)
- bugfix(pathfinder): Fix some pinched cells being changed to impassable cells in internal_classifyObjectFootprint() (TheSuperHackers#2222)
- build(debug): Add CMake option RTS_DEBUG_CHEATS to enable debug cheats in release builds (TheSuperHackers#1842)
- tweak(jetaiupdate): Defer offensive commands for parked jets without ammo (TheSuperHackers#2174)
- fix(radar): Fix Radar pixel color format for non A8R8B8G8 surfaces (TheSuperHackers#2170)
- unify(particlesys): Move ParticleSys and ParticleEditor files to Core (TheSuperHackers#2212)
- refactor(view): Fix variable names in View::getScreenCornerWorldPointsAtZ() (TheSuperHackers#2201)
- unify(particlesys): Merge minor refactors in ParticleSystem (TheSuperHackers#2153)
- unify(particlesys): Merge changes to math for aligning particle Z rotation with emitter direction from Zero Hour (TheSuperHackers#2153)
- unify(particlesys): Merge optimization for wind motion particle update when disabled from Zero Hour (TheSuperHackers#2153)
- unify(particlesys): Merge fix for erroneous particle visibility thresholds in Particle::isInvisible from Generals (TheSuperHackers#2153)
- unify(particlesys): Merge optimization of alpha particle update from Zero Hour (TheSuperHackers#2153)
- unify(particlesys): Merge addition of SMUDGE particle type from Zero Hour (TheSuperHackers#2153)
- unify(particlesys): Compile out superfluous X and Y particle angles in Generals (TheSuperHackers#2153)
- unify(particlesys): Merge addition of ParticleSystem::setSkipParentXfrm from Zero Hour (TheSuperHackers#2153)
- unity(particlesys): Merge removal of Drawable Particle Attachments from Zero Hour (TheSuperHackers#2153)
- bugfix(mouse): Make Cursor Capture opt-in to prevent capture in GUIEdit (TheSuperHackers#2187)
- bugfix(ghostobject): Add Ghost Objects of the local player to the scene correctly after loading a savegame (TheSuperHackers#2186)
- fix(basetype): Add min/max template functions to BaseType.h (TheSuperHackers#2183)
- fix(activebody): Subdual damage can no longer go negative (TheSuperHackers#2184)
- bugfix(actionmanager): Allow immediate resumed construction of buildings if the existing builder dies (TheSuperHackers#1872)
- bugfix(dozeraiupdate): Builders now resume their task after having been disabled (TheSuperHackers#1870)
- fix(network): Fix slightly unstable latency calculation in FrameMetrics::processLatencyResponse() (TheSuperHackers#2200)
- bugfix(network): Revert changes to ConnectionManager::getMaximumLatency() to avoid a higher latency runahead than required (TheSuperHackers#2199)
- unify(common): Move some common system files to Core (TheSuperHackers#2185)
- unify(lib): Move BaseType.h, trig.h to Core (TheSuperHackers#2185)
- unify(common): Merge Registry code (TheSuperHackers#2193)
- unify(common): Merge CriticalSection, ScopedMutex code from Generals (TheSuperHackers#2194)
- unify(common): Merge PerfTimer, StackDump code from Zero Hour (TheSuperHackers#2195)
- unify(common): Merge TerrainTypes from Zero Hour (TheSuperHackers#2196)
weekly-2026-01-30
Changelog
- refactor(audioevent): Remove const casts for calling AudioEventRTS::setPlayingAudioIndex() (TheSuperHackers#2179)
- unify(userpreferences): Move UserPreferences files to Core (TheSuperHackers#2182)
- unify(userpreferences): Merge UserPreferences and related code (TheSuperHackers#2182)
- unify(common): Merge GameCommon and related code (TheSuperHackers#2180)
- unify(ini): Merge INI and related code (TheSuperHackers#2180)
- unify(subsystem): Merge SubsystemInterface code (TheSuperHackers#2180)
- unity(basetype): Merge Lib/BaseType.h code (TheSuperHackers#2180)
- bugfix(ai): Units located above the terrain can no longer teleport into airborne transports (TheSuperHackers#1794)
- tweak(upgrade): Increase upgrade limit to 512 (TheSuperHackers#2162)
- fix(thingfactory): Prevent use-after-free from assert in ThingFactory::reset() (TheSuperHackers#2172)
- perf(ini): Simplify, optimize and merge INI read line buffer implementation (TheSuperHackers#2143)
- refactor: Fix confusing use of logical AND and OR expressions (TheSuperHackers#954)
- fix(optionsmenu): Change incorrect OR/AND precedence of an unused condition in the OptionsMenu (TheSuperHackers#2164)
- bugfix(aiupdate): Chinooks and Helixes now correctly wait for their passengers to disembark (TheSuperHackers#1792)
- bugfix(pathfinder): Fix late game unit lockups and erroneous impassable terrain (TheSuperHackers#2140)
- refactor(pathfinder): Move obstacle handling functions from PathfindCell header to the cpp (TheSuperHackers#2140)
- unify(damage): Merge DamageTypeFlags from Zero Hour (TheSuperHackers#2141)
- build(cmake): Dial back BINK upgrade to get the CMake INSTALL target to work again (TheSuperHackers#2167)
- refactor(bitflags): Simplify and improve setup for DAMAGE_TYPE_FLAGS_ALL, DISABLEDMASK_ALL, KINDOFMASK_FS (TheSuperHackers#2159)
- feat(cmake): Add debug symbol stripping for MinGW Release builds (TheSuperHackers#2067)
- fix(debug): Simplify unconditional DEBUG_ASSERTCRASH to DEBUG_CRASH (TheSuperHackers#2067)
- fix(casts): Add explicit void* casts for function pointers (TheSuperHackers#2067)
- fix(compatibility): Add compiler guards and GCC inline assembly for StackDump (TheSuperHackers#2067)
- fix(calling-convention): Standardize calling conventions and variadic macros (TheSuperHackers#2067)
- fix(linkage): Fix static/extern linkage mismatches for MinGW (TheSuperHackers#2067)
- fix(headers): Add missing forward declarations for MinGW (TheSuperHackers#2067)
- fix(core): Add MinGW-w64 compatibility fixes to Core libraries (TheSuperHackers#2067)
- fix(cmake): Fix CMake dependencies and library linking for MinGW (TheSuperHackers#2067)
- fix(precompiled): Add ATL compatibility to precompiled headers (TheSuperHackers#2067)
- build(cmake): Add MinGW CMake presets for i686 (TheSuperHackers#2067)
- build(cmake): Configure MinGW-specific compiler and linker settings (TheSuperHackers#2067)
- build(deps): Update external dependencies for MinGW-w64 support (TheSuperHackers#2067)
- build(cmake): Add ReactOS COM support utilities (comsupp) (TheSuperHackers#2067)
- build(cmake): Add ReactOS ATL and PSEH compatibility layer (TheSuperHackers#2067)
- build(cmake): Add widl integration for COM interface generation (TheSuperHackers#2067)
- build(cmake): Add MinGW-w64 toolchain and base configuration (TheSuperHackers#2067)
- fix(tunnel): Fix undefined behavior in TunnelTracker::onTunnelDestroyed() and incomplete asset transfer in Team::setControllingPlayer() (TheSuperHackers#1958)
- perf(radar): Reduce cost of W3DRadar::renderObjectList (by 80%), W3DRadar::buildTerrainTexture (by 25%) and W3DRadar::clearShroud (TheSuperHackers#2138)
- refactor(math): Implement Matrix4x4::Inverse, Matrix3D::Get_Inverse and replace unsafe Matrix4x4 to D3DMATRIX casts with conversion functions that apply the required transpose (TheSuperHackers#2052)
- fix: Fix spelling errors in code words (TheSuperHackers#2149)
- fix(debug): Fix spelling errors in DEBUG macro strings (TheSuperHackers#2148)
- bugfix(wbview3d): Fix crash on window resize in Generals World Builder (TheSuperHackers#2151)
- bugfix(object): Preserve unit behaviour when transferring assets to allies (TheSuperHackers#1885)
- bugfix(ai): Fix crash when AI player attempts to build a supply center with an invalid name (TheSuperHackers#2095)
- bugfix(heightmap): Revert optimization for m_vertexBufferTiles in HeightMapRenderObjClass because it does not work properly (TheSuperHackers#2135)
- bugfix(ghostobject): Readd null check for 3DScene in W3DRenderObjectSnapshot::addToScene to prevent crash in headless replay playback (TheSuperHackers#2133)
- bugfix(logic): Decouple scripted audio events from CRC computation (TheSuperHackers#2075)
- feat(build): Add new docker build and game install scripts for Linux (TheSuperHackers#2085)
- bugfix(script): Restore retail compatibility for sequential scripts in ScriptEngine (TheSuperHackers#2129)
- bugfix(audio): Restore retail compatibility after optimization change in AudioManager::addAudioEvent (TheSuperHackers#2132)
- ci: Add workflow to trigger build from any commit for replay mismatch testing (TheSuperHackers#2114)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Source/GameClient and Common comments (TheSuperHackers#2122)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Source/GameLogic comments (TheSuperHackers#2121)
- docs: Fix spelling errors in Generals/Code/GameEngine/Source comments (TheSuperHackers#2118)
- docs: Fix spelling errors in GeneralsMD/Code/GameEngine/Include comments (TheSuperHackers#2123)
- docs: Fix spelling errors in Generals/Code/GameEngine/Include comments (TheSuperHackers#2119)
- docs: Fix spelling errors in GeneralsMD Libraries, Tools, GameEngineDevice comments (TheSuperHackers#2124)
- docs: Fix spelling errors in Generals Libraries, Tools, GameEngineDevice comments (TheSuperHackers#2120)
- docs: Fix spelling errors in Core/Tools and Core/GameEngine comments (TheSuperHackers#2117)
- docs: Fix spelling errors in Core/Libraries comments (TheSuperHackers#2116)
- fix: Rename misspelled identifiers (TheSuperHackers#2109)
- bugfix: Fix spelling errors in debug/diagnostic strings (TheSuperHackers#2108)
- bugfix(dx8caps): Resolve greyscale texture rendering issues in VMWare environments (TheSuperHackers#2128)
- bugfix(buildassistant): Restore retail compatibility after build assistant shroud logic change (TheSuperHackers#2131)
- bugfix(actionmanager): Restore retail compatibility after construction cursor change in ActionManager (TheSuperHackers#2125)
- perf(radar): Reduce cost of radar pixel draw in PartitionManager::refreshShroudForLocalPlayer by 96% (TheSuperHackers#2072)
- refactor(ww3dformat): Merge function PixelSize into Get_Bytes_Per_Pixel (TheSuperHackers#2072)
- build(cmake): Expose source files of interface libraries core_utility, corei/gi/zi_libraries_include in Visual Studio solution (TheSuperHackers#2092)
- refactor(cmake): Move core_config into corei_always for simplification (TheSuperHackers#2091)
- refactor(gamelogic): Rearrange local variables in GameLogic::startNewGame() (TheSuperHackers#2115)
- perf(heightmap): Optimize data locality for m_vertexBufferTiles and m_vertexBufferBackup in HeightMapRenderObjClass (TheSuperHackers#2104)
- refactor(heightmap): Simplify functions getXWithOrigin(), getYWithOrigin() of HeightMapRenderObjClass (TheSuperHackers#2103)
- perf(heightmap): Optimize repeated calls to getXWithOrigin, getYWithOrigin in HeightMapRenderObjClass::updateVB (TheSuperHackers#2102)
- bugfix(scriptengine): Fix script dialog text spelling mistakes and errors in ScriptEngine (TheSuperHackers#2093)
- refactor: Modernize NULL to nullptr (TheSuperHackers#1938)
- build(cmake): Move most CppMacros.h includes into precompiled headers and make them available in all build targets (TheSuperHackers#2090)
- refactor(heightmap): Clarify magic numbers related to VERTEX_BUFFER_TILE_LENGTH (TheSuperHackers#2079)
- fix(heightmap): Fix CENTER_LIMIT condition in HeightMapRenderObjClass::updateCenter (TheSuperHackers#2078)
- perf(heightmap): Reduce cost of min height loop in HeightMapRenderObjClass::updateCenter by 93% (TheSuperHackers#2077)
- bugfix(render2d): Fix possible greyscale image rendering issues on hardware without DOT3 support (TheSuperHackers#2080)
- bugfix(actionmanager): Do not show false resume construction cursor for allied scaffolds (TheSuperHackers#2068)
- refactor(heightmap): Remove HALF_RES_MESH because it was never used and is broken (TheSuperHackers#2076)
- bugfix(network): Fix packet size setup mistakes (TheSuperHackers#2040)
- bugfix(worldbuilder): Avoid taking action on cancel button for script conditions and actions (TheSuperHackers#2065)
- bugfix(worldbuilder): Initialize boolean in ScriptConditionsDlg::OnEditCondition to show logical condition (TheSuperHackers#2062)
- refactor(audio): Use MilesAudioManager::getEffectiveVolume consistently (TheSuperHackers#2058)
- fix(xfer): Fix xfer retail compatibility code (TheSuperHackers#2024)
- bugfix(object): Do not apply veterancy bonuses and animations for dead units (TheSuperHackers#1968)
- bugfix(audio): UI audio no longer plays at maximum volume for a single frame when navigating between shell map menus (TheSuperHackers#2019)
- tweak(drawable): Decouple stealth detected opacity fade time step from render update (TheSuperHackers#2047)
- perf(ai): Avoid a few std::vector copies when passing ai paths to functions (TheSuperHackers#1895)
- bugfix(lobby): Properly sort CRC mismatched game rooms to the bottom of the lobby (TheSuperHackers#1845)
- bugfix(ai): Undetected mines can now be approached when using a disarm weapon (TheSuperHackers#1883)
- bugfix(aiupdate): Prevent manually ejecting rappelling Rangers during Chinook Combat Drop (TheSuperHackers#1789)
- tweak(drawable): Set correct model tint color after loading a save game (TheSuperHackers#2025)
- bugfix(thingfactory): Re 5B01 set next ThingTemplate ID after clearing custom map template overrides to avoid CRC mismatch in the next multiplayer game session (TheSuperHackers#2034)
- perf(weaponstore): Optimize WeaponStore::findWeaponTemplatePrivate with hash map lookup (TheSuperHackers#2042)
- bugfix(heightmap): Fix dynamic lights on terrain (TheSuperHackers#2039)
- bugfix(heightmap): Disable old uv adjument for cliffs (TheSuperHackers#2038)
- refactor(logic): Simplify code in GameLogic's init, reset, startNewGame (TheSuperHackers#2027)
- refactor(network): Simplify error prone net packet size calculations with packed structs (TheSuperHackers#1675)
- perf(contain): Optimize Object::isHero with cached hero counter (TheSuperHackers#1841)
- bugfix(aiupdate): Invalidate build task of Dozers and Workers if the assigned target scaffold no longer exists (TheSuperHackers#1868)
- ci(vcpkg): Stabilize vcpkg binary caching; add compiler-aware keys and explicit cache path (TheSuperHackers#2028)
- refactor(audio): Simplify volume related code in AudioManager and MilesAudioManager (TheSuperHackers#2030)
- perf(audio): Optimize fail condition order in AudioManager::addAudioEvent (TheSuperHackers#1843)
- fix(logic): Fix unexpected return in GameLogic::logicMessageDispatcher's switch case MSG_CANCEL_UNIT_CREATE (TheSuperHackers#1881)
- refactor: Apply clang-tidy fixes for generals-use-is-empty (TheSuperHackers#2018)
- refactor: Apply clang-tidy fixes for generals-use-this-instead-of-singleton (TheSuperHackers#2017)
- bugfix(aiupdate): Chinooks and Helixes no longer take off after repair if passengers want to board or exit (TheSuperHackers#1787)
- bugfix(aiupdate): Repairing Chinooks and Helixes no longer take off after evacuating all passengers (TheSuperHackers#1762)
- ...