Releases: tintinhamans/GeneralsGameCode
Releases · tintinhamans/GeneralsGameCode
weekly-2026-02-13
Changelog
- 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)
weekly-2026-02-06
Changelog
- 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)
- 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)
-...
weekly-2025-12-26
Changelog
- 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)
- bugfix(input): Replace frame-based timings with real-time timings in input system (TheSuperHackers#1835)
- chore: Implement scripts for custom isEmpty() and singleton refs clang-tidy checks (TheSuperHackers#2010)
- bugfix(network): Assign disconnect frame when quitting the game via the disconnection menu (TheSuperHackers#2020)
- tweak(metaevent): Change COMMANDUSABLE_OBSERVER to no longer apply in Shell Map (TheSuperHackers#2002)
- bugfix(network): Fix data offset for string reads in NetPacket::readFileMessage() and NetPacket::readFileAnnounceMessage() (TheSuperHackers#2005)
- build: Implement docker build (TheSuperHackers#1774)
- refactor: Apply integer value comparisons for strcmp and stricmp with clang-tidy (TheSuperHackers#1956)
- bugfix(experience): Prevent ranking of riders that are not trainable (TheSuperHackers#1970)
- bugfix(object): Fix visibility conditions for client-side effects (TheSuperHackers#1964)
- bugfix(input): Disable mouse waypoint mode after using alt tab (TheSuperHackers#1987)
- unify(heightmap): Move Height Map and Terrain related files to Core (TheSuperHackers#1991)
- unify(heightmap): Merge Height Map related code and move Zero Hour's BaseHeightMap, FlatHeightMap, W3DPropDraw, W3DTreeDraw, W3DPropBuffer, W3DSnow, W3DTerrainBackground files to Core (TheSuperHackers#1991)
- build(heightmap): Fix include paths in Zero Hour Height Map files (TheSuperHackers#1991)
- unify(texture): Move W3DWater, W3DLaserDraw and WW3D2 texture related files to Core (TheSuperHackers#1989)
- unify(texture): Merge W3DWater and WW3D2 texture code (TheSuperHackers#1989)
- refactor: Apply the readability-container-size-empty check with clang-tidy (TheSuperHackers#1957)
- fix(network): Fix missing value initialization of LANGameInfo::m_isDirectConnect (TheSuperHackers#1836)
- bugfix(network): Prevent buffer overflow in NetPacket::readFileMessage() and NetPacket::readFileAnnounceMessage() (TheSuperHackers#1981)
- perf(namekey): Remove all superfluous AsciiString allocations for name key lookups (TheSuperHackers#1959)
- refactor(namekey): Reduce code duplication in NameKeyGenerator functions, misc formatting tweaks (TheSuperHackers#1959)
- unify(matpass): Merge WW3D2 matpass code (TheSuperHackers#1982)
- refactor: Remove superfluous inline and register keywords with clang-tidy (TheSuperHackers#1936)
- bugfix(string): Allow startsWith and endsWith to be called on empty strings (TheSuperHackers#1979)
- build: Add clang-tidy checks and script (TheSuperHackers#1807)
- bugfix(pathfinder): Prevent infinite loop within PathfindCell::putOnSortedOpenList() (TheSuperHackers#1965)
- ci(vcpkg): Include preset in binary cache key to avoid ABI mismatches and slow CI builds (TheSuperHackers#1973)
- feat(crashdump): Add crash dump functionality for fatal errors (TheSuperHackers#1594)
- bugfix(mouse): Prevent cursor capture when mouse is outside of app window (TheSuperHackers#1939)
- refactor(mouse): Apply minor refactoring and whitespace tweaks in WinMain, Mouse, HeaderTemplate (TheSuperHackers#1939)
- fix: Wrong usage of sizeof(this) in BitFlags::xfer(), W3DMPO::glueEnforcer() (TheSuperHackers#1947)
- bugfix(network): Prevent out of bounds memory access in NetCommandWrapperListNode::copyChunkData() (TheSuperHackers#1946)
- build: Use cmake_host_system_information to make registry queries in cmake (TheSuperHackers#1943)
- feat(movie): Implement ESC button mapping to skip Campaign, Challenge and Score videos (TheSuperHackers#1926)
- tweak(keyboard): Apply minor improvements to Keyboard class to query pressed keys (TheSuperHackers#1926)
- bugfix(movie): Fix Campaign, Challenge, Score movie cancellation or decompression artifacts when tabbing out of the game (TheSuperHackers#1927)
- refactor: Remove or replace some superfluous empty C strings (TheSuperHackers#1929)
- refactor(network): Replace implicit conversion from NULL to AsciiString in IPEnumeration::getMachineName (TheSuperHackers#1934)
- build: Add WOW6432Node to registry path lookups for EA App install path detection (TheSuperHackers#1903)
- refactor(string): Fix constness of TheEmptyString (TheSuperHackers#1930)
- refactor: Remove all explicit UnicodeString instantiations from C strings (TheSuperHackers#1928)
- bugfix(filesystem): Prevent loading wrong INIZH.big from Data/INI directory to prevent INI CRC mismatch (TheSuperHackers#1879)
- refactor: Remove superfluous variable init comments (TheSuperHackers#1876)
- refactor: Remove all explicit AsciiString instantiations from C strings (TheSuperHackers#1916)
- unify(view): Move View, W3DView to Core (TheSuperHackers#1904)
- unify(view): Merge View and closely related code (TheSuperHackers#1904)
- unify(client): Move ParabolicEase, CameraShakeSystem to Core (TheSuperHackers#1904)
- refactor: Replace preprocessor condition _WINDOWS with _WIN32 (TheSuperHackers#1911)
- unify(shader): Move W3DShaderManager to Core (TheSuperHackers#1920)
- unify(shader): Merge W3DShaderManager code, move Smudge, W3DSmudge to Core (TheSuperHackers#1920)
- bugfix(energy): Destruction of disabled Power Plant no longer lowers energy production twice (TheSuperHackers#1857)
- bugfix(radar): Add hero radar objects into its own list to get rid of hero cache updates and its related issues (TheSuperHackers#1893)
- refactor(radar): Simplify function Radar::deleteListResources (TheSuperHackers#1893)
- refactor(radar): Simplify function W3DRadar::renderObjectList (TheSuperHackers#1893)
- refactor(radar): Simplify function Radar::addObject (TheSuperHackers#1893)
- bugfix(weapon): Weapon effects now show again for hidden objects that are not explicitly stealthed (TheSuperHackers#1918)
- tweak(gui): Add configuration to GameData.ini to allow Money Per Minute for players (TheSuperHackers#1914)
- refactor(string): Implement generic startsWith, endsWith functions for C strings (TheSuperHackers#1898)
- refactor: Use new utility logic for handling observed player behaviour (TheSuperHackers#1861)
- bugfix(module): A projectile can no longer be jammed multiple times (TheSuperHackers#1907)
- unify(radar): Move ObjectStatusTypes, Radar, W3DRadar files to Core (TheSuperHackers#1894)
- unify(radar): Merge Radar code (TheSuperHackers#1894)
- unify(common): Merge ObjectStatusTypes code (TheSuperHackers#1894)
- refactor: Convert strlcpy to strcpy with static_assert (TheSuperHackers#1887)
- refactor(network): Convert some if-else chains to switch statements (TheSuperHackers#1682)
- bugfix: Fix effect visibility of contained objects (TheSuperHackers#1878)
- tweak(eva): Enable more EVA events for observed players (TheSuperHackers#1866)
- refactor: Remove duplicate include directives (TheSuperHackers#1873)
- refactor: Rename RETAIL_COMPATIBLE_BUG macro to PRESERVE_RETAIL_BEHAVIOR (TheSuperHackers#1877)
- refactor: Remove double semicolons (TheSuperHackers#1810)
- ci: Re-enable win32 vcpkg presets (TheSuperHackers#1863)
- build(vcpkg): Add lockfile and binary cache (TheSuperHackers#1862)
- build(ai): Resolve compile errors when the USE_DOZER preprocessor directive is false (TheSuperHackers#1871)
- fix(debug): Add error handling for rename failures in Debug code (TheSuperHackers#1855)
- bugfix(object): Show veterancy effects of stealthed objects for allies and observers (TheSuperHackers#1867)
- bugfix(weapon): Show weapon effects of stealthed objects for allies and observers (TheSuperHackers#1865)
- bugfix(module): Show cash amounts of stealthed objects for allies and observers (TheSuperHackers#1858)
- tweak(behavior): Add RETAIL_COMPATIBLE_BUG to Black Lotus cash value fix (TheSuperHackers#1864)
- tweak(specialpower): Enable special power EVA events for observed players (TheSuperHackers#1540)
- bugfix(network): Deny players with invalid names from joining a LAN game room (TheSuperHackers#1595)
- feat(view): Add ability to rotate the camera in 45 degree increments using the mouse (TheSuperHackers#1848)
- feat(view): Add ability to rotate the camera in 45 degree increments using the numpad (TheSuperHackers#1846)
- fix(parabolicease): Fix asserting on float inprecision in ParabolicEase::setEaseTimes() (TheSuperHackers#1854)
- fix: Fix incorrect argument used for isInSaveDirectory() (TheSuperHackers#1849)
- tweak(network): Add file extension validation to network map transfer (TheSuperHackers#1818)
- fix(font): Fix font scaling for large resolutions and implement new font scaling methods (TheSuperHackers#1466)
- perf(mapcache): Simplify and improve implementation of MapCache to prevent expensive reoccurring redundant map cache reads (TheSuperHackers#1775)
- unify(network): Move most GameNetwork and GameSpy files to Core (TheSuperHackers#1733)
- build(memory): Add missing REF macros to always.h for null memory manager (TheSuperHackers#1830)
- fix(font): Handle malformed fonts without crashing the game (TheSuperHackers#1826)
- fix: Replace strcpy with strlcpy to prevent potential buffer overflows (TheSuperHackers#1808)
- build(cmake): Add status message for missing game install path (TheSuperHackers#1820)
- refactor: Simplify some if-else condition chains (TheSuperHackers#1683)
- fix(debug): Implement reference counter and thread safety in DbgHelpLoader to allow for independent users (TheSuperHackers#1804)
- refactor: Remove wrong WWDefines.h file (TheSuperHackers#1814)
- tweak(scrolling): Prevent far camera jumps when scrolling while the game stalls (TheSuperHackers#1661)
- bugfix(module): Fix missing horde condition of Nationalism and Fanaticism weapon bonuses (TheSuperHackers#1582)
- refactor(module): Improve and simplify the implementation of HordeUpdate and related code (TheSuperHackers#1582)
- unify(module): Merge HordeUpdate and related code (TheSuperHackers#1813)
weekly-2025-11-14
Changelog
- bugfix(replay): Fix unrecognized replay files in Generals (TheSuperHackers#1815)
- build: Add static_assert's near relevant strcpy calls to prevent buffer overflows (TheSuperHackers#1806)
- refactor: Remove superfluous string buffer copies (TheSuperHackers#1800)
- fix: Replace strcpy with strlcpy and update length asserts (TheSuperHackers#1796)
- build(weekly): Enable complete debug symbols for VC6 weekly builds (TheSuperHackers#1803)
- refactor(w3dview): Replace duplicate reference count macros with core library equivalents (TheSuperHackers#1784)
- build: Move refcount.h include into WWCommon.h (TheSuperHackers#1798)
- refactor(network): Assign name to type enum in LANMessage (TheSuperHackers#1801)
- fix(script): Improve string handling of 'Fundamentalist' code hacks (TheSuperHackers#1797)
- refactor: Fix misspelled word in comments (TheSuperHackers#1795)
- fix(debug): Replace NDEBUG preprocessor with RTS_DEBUG or RTS_RELEASE (TheSuperHackers#1791)
- bugfix(gui): Fix incorrect Replay incompatibility messages (TheSuperHackers#1745)
- refactor: Replace custom strrchr implementations with standard function (TheSuperHackers#1782)
- bugfix(gui): Fix crash when RenderFpsFontSize is set to 0 (TheSuperHackers#1788)
- build: Add RETAIL_COMPATIBLE_BUG as build prerequisite for the tunnel healing fix (TheSuperHackers#1783)
- tweak(gui): Track money per minute for every player (TheSuperHackers#1773)
- refactor(gui): Break up and simplify map list related code in MapUtil (TheSuperHackers#1758)
- perf(gui): Eliminate expensive and unnecessary processing when populating the replay and map lists after they are full (TheSuperHackers#1758)
- refactor(maputil): Remove unused variables in MapUtil (TheSuperHackers#1767)
- unify(maputil): Merge MapUtil code (TheSuperHackers#1771)
- unify(imagecollection): Merge ImageCollection code (TheSuperHackers#1771)
- bugfix(system): Prevent AMD/ATI driver crash on game launch by front loading the system dbghelp.dll (TheSuperHackers#1066)
- feat(gui): Implement money per minute display for local player (TheSuperHackers#1481)
- refactor: Normalize all file extensions to lowercase (TheSuperHackers#1765)
- refactor: Simplify path string formatting in World Builder (TheSuperHackers#1759)
weekly-2025-11-07
Changelog
- bugfix(weapon): Fix unreliability of historic bonus weapons (TheSuperHackers#1727)
- unify(network): Merge GameSpy and related code (TheSuperHackers#1735)
- unify(network): Merge GameNetwork and related code (TheSuperHackers#1735)
- build: Use more precompiled headers to reduce build time by around 50% (TheSuperHackers#1740)
- feat(gui): Implement replay info tooltips in Replay Menu (TheSuperHackers#1720)
weekly-2025-10-31
Changelog
- bugfix(gui): Always show correct teams for players in the observer control bar (TheSuperHackers#1753)
- bugfix(filesystem): Tentatively fix hang in file exist cache (TheSuperHackers#1751)
- ci: Update Windows Version for Replay Checker (TheSuperHackers#1746)
- refactor: Remove superfluous include guards (TheSuperHackers#1741)
- refactor: Simplify string.h includes (TheSuperHackers#1743)
- refactor: Simplify stdio.h includes (TheSuperHackers#1742)
- bugfix(object): Check whether a bike still has a rider before sniping it to prevent crashing the game (TheSuperHackers#1537)
- feat(recorder): Implement replay archive feature (TheSuperHackers#1703)
- refactor: Replace all header include guards with pragma once (TheSuperHackers#1722)
- refactor: Remove superfluous defines from Language.h (TheSuperHackers#1739)
- feat(observer): Add button mapping for toggling Replay Observer (TheSuperHackers#1718)
- fix(observer): Reset observed player when switching teams (TheSuperHackers#1715)
- feat(radar): Save Radar hidden and forced status for each Player to show correct radar states when switching teams (TheSuperHackers#1715)
- refactor(scene): Clean formatting, comments in W3DScene (TheSuperHackers#1710)
- bugfix(scene): Fix translucent objects drawn without translucency when no occluders are in the scene (TheSuperHackers#1710)
weekly-2025-10-24
Changelog
- bugfix(anim): Fix elapsed time of object animations (TheSuperHackers#1656)
- bugfix: Fix global-buffer-overflow in WorldBuilder (MapObjectProps class) (TheSuperHackers#1725)
- bugfix(script): Fix global-buffer-overflow in WorldBuilder scripts (TheSuperHackers#1724)
- bugfix(client): Fix crash in WorldBuilder scene (TheSuperHackers#1723)
- refactor: Remove _MSC_VER guards around #pragma once (TheSuperHackers#1726)
- bugfix(drawable): Fix duplicated terrain decals applied after call to W3DModelDraw::replaceModelConditionState (TheSuperHackers#1569)
- bugfix(radar): No longer show hero radar icons in shroud (TheSuperHackers#1569)
- bugfix(radar): Refresh radar objects without delay when changing player (TheSuperHackers#1569)
- bugfix(ghostobject): Properly keep ghosted and shrouded objects hidden when taking a ghost snapshot or changing the local player (TheSuperHackers#1569)
- bugfix(ghostobject): Properly refresh real and ghost objects when changing the local player in the Ghost Object Manager (TheSuperHackers#1569)