Skip to content

Releases: TheSuperHackers/GeneralsGameCode

weekly-2026-01-09

09 Jan 09:15
8c560e6

Choose a tag to compare

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

02 Jan 09:13
5e8f1b8

Choose a tag to compare

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

26 Dec 09:13
5dba2a0

Choose a tag to compare

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

19 Dec 09:13
fc36efc

Choose a tag to compare

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

12 Dec 09:14

Choose a tag to compare

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

05 Dec 09:13

Choose a tag to compare

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

28 Nov 09:12

Choose a tag to compare

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)

weekly-2025-11-21

21 Nov 09:12
a2c1d0e

Choose a tag to compare

Changelog

  • refactor(network): Convert some if-else chains to switch statements (#1682)
  • bugfix: Fix effect visibility of contained objects (#1878)
  • tweak(eva): Enable more EVA events for observed players (#1866)
  • refactor: Remove duplicate include directives (#1873)
  • refactor: Rename RETAIL_COMPATIBLE_BUG macro to PRESERVE_RETAIL_BEHAVIOR (#1877)
  • refactor: Remove double semicolons (#1810)
  • ci: Re-enable win32 vcpkg presets (#1863)
  • build(vcpkg): Add lockfile and binary cache (#1862)
  • build(ai): Resolve compile errors when the USE_DOZER preprocessor directive is false (#1871)
  • fix(debug): Add error handling for rename failures in Debug code (#1855)
  • bugfix(object): Show veterancy effects of stealthed objects for allies and observers (#1867)
  • bugfix(weapon): Show weapon effects of stealthed objects for allies and observers (#1865)
  • bugfix(module): Show cash amounts of stealthed objects for allies and observers (#1858)
  • tweak(behavior): Add RETAIL_COMPATIBLE_BUG to Black Lotus cash value fix (#1864)
  • tweak(specialpower): Enable special power EVA events for observed players (#1540)
  • bugfix(network): Deny players with invalid names from joining a LAN game room (#1595)
  • feat(view): Add ability to rotate the camera in 45 degree increments using the mouse (#1848)
  • feat(view): Add ability to rotate the camera in 45 degree increments using the numpad (#1846)
  • fix(parabolicease): Fix asserting on float inprecision in ParabolicEase::setEaseTimes() (#1854)

weekly-2025-11-14

14 Nov 09:12
6cfcc7b

Choose a tag to compare

Changelog

  • fix: Fix incorrect argument used for isInSaveDirectory() (#1849)
  • tweak(network): Add file extension validation to network map transfer (#1818)
  • fix(font): Fix font scaling for large resolutions and implement new font scaling methods (#1466)
  • perf(mapcache): Simplify and improve implementation of MapCache to prevent expensive reoccurring redundant map cache reads (#1775)
  • unify(network): Move most GameNetwork and GameSpy files to Core (#1733)
  • build(memory): Add missing REF macros to always.h for null memory manager (#1830)
  • fix(font): Handle malformed fonts without crashing the game (#1826)
  • fix: Replace strcpy with strlcpy to prevent potential buffer overflows (#1808)
  • build(cmake): Add status message for missing game install path (#1820)
  • refactor: Simplify some if-else condition chains (#1683)
  • fix(debug): Implement reference counter and thread safety in DbgHelpLoader to allow for independent users (#1804)
  • refactor: Remove wrong WWDefines.h file (#1814)
  • tweak(scrolling): Prevent far camera jumps when scrolling while the game stalls (#1661)
  • bugfix(module): Fix missing horde condition of Nationalism and Fanaticism weapon bonuses (#1582)
  • refactor(module): Improve and simplify the implementation of HordeUpdate and related code (#1582)
  • unify(module): Merge HordeUpdate and related code (#1813)

weekly-2025-11-07

07 Nov 09:12
c5d839e

Choose a tag to compare

Changelog

  • bugfix(replay): Fix unrecognized replay files in Generals (#1815)
  • build: Add static_assert's near relevant strcpy calls to prevent buffer overflows (#1806)
  • refactor: Remove superfluous string buffer copies (#1800)
  • fix: Replace strcpy with strlcpy and update length asserts (#1796)
  • build(weekly): Enable complete debug symbols for VC6 weekly builds (#1803)
  • refactor(w3dview): Replace duplicate reference count macros with core library equivalents (#1784)
  • build: Move refcount.h include into WWCommon.h (#1798)
  • refactor(network): Assign name to type enum in LANMessage (#1801)
  • fix(script): Improve string handling of 'Fundamentalist' code hacks (#1797)
  • refactor: Fix misspelled word in comments (#1795)
  • fix(debug): Replace NDEBUG preprocessor with RTS_DEBUG or RTS_RELEASE (#1791)
  • bugfix(gui): Fix incorrect Replay incompatibility messages (#1745)
  • refactor: Replace custom strrchr implementations with standard function (#1782)
  • bugfix(gui): Fix crash when RenderFpsFontSize is set to 0 (#1788)
  • build: Add RETAIL_COMPATIBLE_BUG as build prerequisite for the tunnel healing fix (#1783)
  • tweak(gui): Track money per minute for every player (#1773)
  • refactor(gui): Break up and simplify map list related code in MapUtil (#1758)
  • perf(gui): Eliminate expensive and unnecessary processing when populating the replay and map lists after they are full (#1758)
  • refactor(maputil): Remove unused variables in MapUtil (#1767)
  • unify(maputil): Merge MapUtil code (#1771)
  • unify(imagecollection): Merge ImageCollection code (#1771)
  • bugfix(system): Prevent AMD/ATI driver crash on game launch by front loading the system dbghelp.dll (#1066)
  • feat(gui): Implement money per minute display for local player (#1481)
  • refactor: Normalize all file extensions to lowercase (#1765)
  • refactor: Simplify path string formatting in World Builder (#1759)