Skip to content

weekly-2026-03-13

Choose a tag to compare

@github-actions github-actions released this 13 Mar 09:18
· 490 commits to main since this release
d195e3b

Changelog

  • bugfix(namekey): Remove hardcoded NameKeyIDs from dummy strings to work with modded files (TheSuperHackers#2349)
  • ci(validate): Update PR validation workflow and valid tags (TheSuperHackers#2426)
  • unify(pathfinder): Move AIPathfind.h and AIPathfind.cpp to Core (TheSuperHackers#2428)
  • chore(replays): Update GeneralsReplays reference to latest (TheSuperHackers#2424)
  • fix(lookat): Fix mouse anchor and direction issue for camera pitch (TheSuperHackers#2421)
  • bugfix(audio): Decouple Particle Cannon audio spawn point from visual beam to restore correct position and fix quiet beam audio (TheSuperHackers#2415)
  • unify(pathfinder): Merge Pathfinder::moveAllies and Pathfinder::findAttackPath from Zero Hour (TheSuperHackers#2341)
  • unify(pathfinder): Merge Pathfinder::moveAlliesDestinationCallback, ::processHierarchicalCell, ::findClosestPath, ::updateGoal (TheSuperHackers#2341)
  • unify(pathfinder): Merge Pathfinder::checkForPossible(), ::processPathfindQueue(), ::examineNeighboringCells(), ::buildHierarchicalPath() (TheSuperHackers#2341)
  • unify(pathfinder): Merge Pathfinder::clientSafeQuickDoesPathExist() and Pathfinder::clientSafeQuickDoesPathExistForUI() from Zero Hour (TheSuperHackers#2341)
  • refactor(random): Simplify code in RandomValue (TheSuperHackers#2370)
  • unify(pathfinder): Merge PathfindLayer::doDebugIcons(), Pathfinder::Classify functions, Pathfinder::checkDestination() and Pathfinder::checkForMovement() (TheSuperHackers#2414)
  • bugfix(heightmap): Fix zagged shapes on steep diagonal terrain (TheSuperHackers#2406)
  • refactor(view): Split contents of W3DView::buildCameraTransform(), W3DView::calcCameraAreaConstraints() (TheSuperHackers#2403)
  • bugfix(gunship): Select Spectre Gunship only on the client that controls the unit (TheSuperHackers#2402)
  • bugfix(ai): Reset jet locomotor to normal when attack locomotor timer expires (TheSuperHackers#2397)
  • build(cmake): Append RTS_BUILD_OUTPUT_SUFFIX to installable targets (TheSuperHackers#2378)
  • unify(pathfinder): Merge PathfindZoneManager() (TheSuperHackers#2404)
  • chore(pathfinder): Remove unused forced refresh calling in PathfindZoneManager::calculateZones() (TheSuperHackers#2404)
  • refactor: Add compatibility macros for override and final keywords and rename conflicting identifiers (TheSuperHackers#2389)
  • refactor(random): Reorder RandomValue function definitions (2) (TheSuperHackers#2405)
  • refactor(dozeraiupdate): Streamline dozer task cancellation logic (TheSuperHackers#2387)
  • refactor(random): Reorder RandomValue function definitions (TheSuperHackers#2384)
  • feat: Implement math CRC calculation utility for logic mismatch detection purposes (TheSuperHackers#2100)
  • bugfix(pathfinder): Fix uninitialized variable in Pathfinder::tightenPathCallback to prevent mismatches (TheSuperHackers#2309)
  • unify(pathfinder): Remove unused argument from PathfindZoneManager::markZonesDirty() (TheSuperHackers#2381)
  • unify(pathfinder): Merge PathfindCell class from Zero Hour (TheSuperHackers#2381)
  • unify(pathfinder): Merge CellTypes and CELL_BRIDGE_IMPASSABLE code from Zero Hour (TheSuperHackers#2381)
  • unify(pathfinder): Merge PathfindCell::setTypeAsObstacle() and PathfindCell::removeObstacle() from Zero Hour (TheSuperHackers#2381)
  • chore(pathfinder): Remove legacy Pathfind debug code from Generals (TheSuperHackers#2381)
  • bugfix(radar): Fix incorrect 2D distance calculation in Radar::tryEvent (TheSuperHackers#2368)
  • refactor(battleplan): Split data off of BattlePlanBonuses class (TheSuperHackers#2335)
  • bugfix(audio): Fix range volume fade of 3D sounds and make it configurable in AudioSettings.ini (TheSuperHackers#2369)
  • fix(view): Implement state for user controlled camera to properly distinguish between scripted and user camera (TheSuperHackers#2363)
  • fix(network): Move TransportMessageHeader to before it is used in NetworkDefs.h (TheSuperHackers#2382)
  • ci(vcpkg): Fix recurring binary cache invalidation from runner image updates (TheSuperHackers#2371)
  • unify(pathfinder): Merge local variable optimizations in PathfindZoneManager::calculateZones() from Zero Hour (TheSuperHackers#2367)
  • fix(pathfinder): Add missing logical block for zone type optimization in PathfindZoneManager::calculateZones() (TheSuperHackers#2360)
  • chore(pathfinder): Remove register variable and use member variable directly in PathfindZoneManager::calculateZones() (TheSuperHackers#2360)
  • chore(pathfinder): Change while loops to for loops in PathfindZoneManager::calculateZones() (TheSuperHackers#2360)
  • chore(pathfinder): Change open braces to be K&R style in PathfindZoneManager::calculateZones() (TheSuperHackers#2360)
  • chore(pathfinder): Change leading spaces to leading tabs in PathfindZoneManager:calculateZones() (TheSuperHackers#2360)
  • tweak(menu): Show mouse and menu immediately when shellmap is disabled (TheSuperHackers#2356)
  • fix(logic): Fix potential null pointer deferences in GameLogicDispatch (TheSuperHackers#2354)
  • tweak(random): Replace InitGameLogicRandom with InitRandom for consistent client and audio seeds (TheSuperHackers#2339)
  • bugfix(audio): Fix particle cannon being inaudible after saveload (TheSuperHackers#2302)
  • fix(headless): Use ParticleSystemManager update instead of reset in headless replay (TheSuperHackers#2219)
  • refactor(view): Change scripted state booleans to enum flags in W3DView (TheSuperHackers#2357)
  • bugfix(partition): Fix inconsistent mine collision behaviour (TheSuperHackers#2208)
  • refactor(view): Simplify code to set location for Replay Camera (TheSuperHackers#2353)
  • fix(view): Call View::forceRedraw() instead of doing tricks to refresh the camera normally (TheSuperHackers#2352)
  • refactor(lookat): Simplify pitch, fov, zoom logic in LookAtTranslator (TheSuperHackers#2351)
  • fix(object): Save and load game object list in correct order (TheSuperHackers#2161)
  • bugfix(registry): Prioritize HKEY_CURRENT_USER registry reads and writes over HKEY_LOCAL_MACHINE to prevent inaccessible data (TheSuperHackers#1844)
  • refactor: Remove redundant void argument from functions (TheSuperHackers#2345)
  • refactor: Simplify unconditional asserts from DEBUG_ASSERTCRASH to DEBUG_CRASH (TheSuperHackers#2343)
  • refactor(preferences): Move OptionPreferences class into separate files (TheSuperHackers#1840)
  • refactor(language): Cleanup GlobalLanguage code and add function GlobalLanguage::getResolutionFontSizeScale() (TheSuperHackers#2338)
  • bugfix(skirmish): Prevent mismatch in Replay playback by restoring correct game seed after restarting a Skirmish game (TheSuperHackers#2270)
  • refactor(pathfinder): Remove unused function Pathfinder::pathDestination() (TheSuperHackers#2308)
  • unify(client): Move several GameClient files to Core (TheSuperHackers#2337)
  • unify(client): Merge DisplayString, GameText, GlobalLanguage, SelectionInfo code (TheSuperHackers#2337)
  • bugfix(player): Fix rounding inaccuracies with money awarded by Cash Bounty (TheSuperHackers#2330)
  • bugfix(behavior): Prevent fallen Angry Mob members from respawning at the Barracks after loading a save (TheSuperHackers#2314)
  • refactor(pathfinder): Cleanup retail compatible insertion sort code (TheSuperHackers#2331)
  • refactor(pathfinder): Implement PathfindCellList class for the pathfindcell closedList (TheSuperHackers#2327)
  • refactor(pathfinder): Implement PathfindCellList class for the pathfindcell openList (TheSuperHackers#2327)
  • bugfix(victory): Save victory status to prevent early exits from resulting in defeat in network matches (TheSuperHackers#2292)
  • fix(netpacket): Fix incorrect improbable return value in NetPacket::GetBufferSizeNeededForCommand() (TheSuperHackers#2328)
  • unify(gui): Move several GUI related files to Core (TheSuperHackers#2332)
  • unify(loadscreen): Merge LoadScreen and related code (TheSuperHackers#2332)
  • fix(loadscreen): Fix missing pointer initialization in constructors of MultiPlayerLoadScreen, GameSpyLoadScreen and remove superfluous code from destructors of LoadScreen classes (TheSuperHackers#2332)
  • unify(mouse): Move Mouse, Keyboard files to Core (TheSuperHackers#2334)
  • unify(mouse): Merge Mouse, Keyboard code (TheSuperHackers#2334)
  • bugfix(battleplanupdate): Prevent using the Bombardment Cannon while switching Battle Plans (TheSuperHackers#2324)
  • bugfix(behavior): Only detonate Bunker Busters if the missile reaches its destination (TheSuperHackers#2321)
  • tweak(commandline): Skip intro logo with -quickstart and enable -nologo, -noShellAnim in Release builds (TheSuperHackers#2266)
  • bugfix(radar): Show Hero Radar icons in Containers and Tunnels again (TheSuperHackers#2189)
  • fix(connection): Fix unsafe Player ID usage in ConnectionManager, DisconnectManager (TheSuperHackers#2305)
  • bugfix(particlesys): Restore Particle System IDs on save load before registering to ParticleSystemManager (TheSuperHackers#2316)
  • bugfix(worldbuilder): Fix incorrect access of empty list in ObjectOptions::_FindOrDont() (TheSuperHackers#2306)
  • tweak: Put fixes that do affect gameplay behind PRESERVE_RETAIL_BEHAVIOR (TheSuperHackers#2319)
  • build: Fix compile error when building without RETAIL_COMPATIBLE_CRC (TheSuperHackers#2318)
  • bugfix(worldbuilder): Fix optimized trees not being shown in object placer preview window (TheSuperHackers#2312)
  • bugfix(worldbuilder): Fix uncaught carriage return in CommandButton name when parsing from INI (TheSuperHackers#2300)
  • feat(cratecollide): Add INI option to allow a crate to be picked up multiple times in one frame (TheSuperHackers#2297)
  • build(docker): Add Linux LSP support by fixing compile_commands.json paths (TheSuperHackers#2303)
  • tweak(worldbuilder): Remove EULA code and data (TheSuperHackers#2307)
  • fix(netpacket): Fix undefined behavior with NetPacket buffer writes (TheSuperHackers#2304)
  • bugfix(network): Increase message buffer and max packet sizes to reduce connection issues (TheSuperHackers#2277)
  • bugfix: Remove superfluous CD checks and related code (TheSuperHackers#2261)
  • refactor(netpacket): Simplify initialization of net packet field types (TheSuperHackers#2288)
  • refactor(netpacket): Streamline order of net packet fields (TheSuperHackers#2288)
  • fix(draw): Recover tread debris effects for W3DTankTruckDraw (TheSuperHackers#2251)
  • refactor(draw): Rename emitters functions in W3DTankDraw, W3DTankTruckDraw, W3DTruckDraw (TheSuperHackers#2251)
  • bugfix(worldbuilder): Fix script condition selection when editing newly created condition (TheSuperHackers#2289)
  • bugfix(view): Recalculate camera area constraints when toggling Control Bar or changing Pitch, FOV (TheSuperHackers#2291)
  • chore(gui): Implement function GadgetTextEntrySetMaxLen() (TheSuperHackers#2290)
  • bugfix(contain): Prevent undefined behaviour when a dead unit enters a container (TheSuperHackers#2258)
  • bugfix(ocl): Fix uninitialized variable in ObjectCreationList to avoid mismatches (TheSuperHackers#2096)
  • bugfix(projectile): Fix out-of-bounds access in DumbProjectile which causes mismatch with very high speed weapons at small hit distances (TheSuperHackers#2087)
  • bugfix(pathfinder): Fix uninitialized variable in Pathfinder::classifyFence() and possible source of mismatches in Retail-compatible builds (TheSuperHackers#1748)
  • fix(netpacket): Protect text length value from overflowing in NetPacketChatCommand, NetPacketDisconnectChatCommand (TheSuperHackers#2284)
  • fix(netcommandmsg): Fix new/delete mismatch in NetWrapperCommandMsg (TheSuperHackers#2287)
  • refactor(netpacket): Use more consistent names for packed net packet structs (TheSuperHackers#2283)
  • refactor(netpacket): Remove duplicate packed commands and cleanup code comments (TheSuperHackers#2283)
  • fix(comments): Use 2026 for this year's code comments (TheSuperHackers#2285)
  • perf(view): Optimize and simplify camera transform update logic (TheSuperHackers#2280)
  • bugfix(gui): Fix application hang from scrolling a map list with arrow keys (TheSuperHackers#2281)
  • feat(gui): Add support for extra column to separate time and date in Replay Menu (TheSuperHackers#2278)
  • bugfix(cratecollide): Prevent crates from being collected multiple times in a single frame (TheSuperHackers#2279)
  • bugfix(object): Cancel previous tasks for captured dozers (TheSuperHackers#2237)
  • fix(view): Prevent float division by zero in W3DView::setupWaypointPath() (TheSuperHackers#2274)
  • refactor(view): Simplify View angle normalization (TheSuperHackers#2271)
  • feat(gui): Add replay dates to replay list in Replay Menu (TheSuperHackers#2255)
  • fix(display): Fix VideoBuffer format selection in W3DDisplay::createVideoBuffer (TheSuperHackers#2265)
  • fix(intro): Fix order of Display Update and Draw in intro loop (TheSuperHackers#2264)
  • fix(netpacket): Fix misplaced null test in NetPacket::addCommand() (TheSuperHackers#2272)
  • feat(gui): Implement Player Info List (TheSuperHackers#2136)
  • refactor(netpacket): Simplify packet serialization code by using packed structs (TheSuperHackers#1680)
  • fix: Replace sprintf with snprintf to prevent potential stack overflows (TheSuperHackers#2262)
  • build(cmake): Force include CppMacros.h globally for VC6 (TheSuperHackers#2252)
  • tweak(gui): Use default locale of user for listed replays and save games to match regional date time formats (TheSuperHackers#2254)
  • fix(debug): Allocate enough terrain debug icons based on the map dimensions in W3DDebugIcons() (TheSuperHackers#2231)