Releases: TheSuperHackers/GeneralsGameCode
Release list
weekly-2026-07-24
Changelog
- bugfix(particlesys): Prevent accumulation of particle systems in headless mode (#3006)
- bugfix(fxlist): Fix unreliable terrain layer selection of particles using CreateAtGroundHeight (#3004)
- bugfix(behavior): Do not fire weapons via the InstantDeathBehavior module while under construction (#3002)
- bugfix(saveload): Serialize base state machine in TurretStateMachine and DozerActionStateMachine (#2896)
- bugfix(behavior): Allow multiple InstantDeathBehavior modules to be processed (#2990)
- bugfix(weapon): Sniper weapons can no longer fire upon empty Stinger Sites (#2822)
- tweak(intro): Implement intro skipping with ESC button (#2879)
- bugfix(gui): Fix black fade out at the end of the map load screen (#2889)
- chore: Use qualified include paths for WWVegas headers (2) (#2881)
- tweak(cmake): Use GameSpy SDK from TheSuperHackers repository (#2884)
- bugfix(gamelogic): Map player index to slot index for CRC validation (#2857)
- bugfix(heightmap): Prevent full terrain rebuild on every frame when DrawEntireTerrain is enabled (#2846)
- chore(heightmap): Remove remnants of unimplemented Stretch Terrain and Half Height Map (#2846)
- fix(bitflags): Prevent linker errors from multiple defined BitFlags::s_bitNameList (#2888)
- chore: Replace CPP_11(= delete) with FUNCTION_DELETE macro to help clang format (#2885)
- chore: Remove empty braces in macros to help clang format (#2883)
- chore: Use qualified include paths for WWVegas headers (1)
- feat(screenshot): Add threaded JPEG/PNG screenshots without game stalls (#1785)
weekly-2026-07-17
Changelog
- feat(intro): Add short Intro Logo for The Super Hackers team (#2267)
- tweak(intro): Remove superfluous legal page window from intro sequence (#2267)
- fix(intro): Remove non functional copyright string and simplify logo movie code (#2267)
- refactor(intro): Simplify the intro state machine in Intro class (#2267)
- refactor(intro): Move intro related code to new file and class (#2267)
- refactor(sphere): Zero initialize SphereClass by default and add Is_Valid function (#2855)
- tweak(gamemessage): Reduce number of MSG_DESTROY_SELECTED_GROUP messages (#2668)
- unify(ini): Move INI parser files to Core (#2863)
- unify(ini): Merge INIMultiplayer starting money parsing from Zero Hour (#2863)
- bugfix(gameengine): Prevent logic time accumulation while the game is halted (#2865)
- bugfix(commandxlat): Re-enable right mouse click move commands during camera scrolling (#2847)
weekly-2026-07-10
Changelog
- tweak(controlbar): Decouple the general promotion star blink from the render frame rate (#2835)
- bugfix(ini): Store every debris model name in GenericObjectCreationNugget::parseDebrisObjectNames (#2597)
- perf(sortingrenderer): Skip z-sorting for nodes without bounding info in SortingRenderer (#2854)
- bugfix(logic): Restore retail compatibility after change to frozen time check (#2803)
- unify(controlbar): Move ControlBar files to Core (#2849)
- unify(controlbar): Merge ControlBar and related code from Zero Hour (#2849)
- fix(gui): Pace whole-screen fade loop through the frame pacer (#2848)
- feat(gui): Implement user option to scale the game window transition speed (#2840)
weekly-2026-07-03
Changelog
- bugfix(pointgroup): Render ground-aligned particles without sorting (#2838)
- fix(textureloader): Simplify and fix faulty implementations of texture reduction (2) (#2814)
- bugfix(heightmap): Reduce ray cast lengths and fix ray casting in BaseHeightMapRenderObjClass::Cast_Ray (#2836)
- bugfix(mouse): Fix bad drag tolerances with high scroll speed factors (#2826)
- chore(basetype): Add addition and subtraction functions to Coord2D, Coord3D, ICoord2D, ICoord3D (#2826)
- refactor(selectionxlat): Split switch cases of SelectionTranslator::translateGameMessage into separate functions (#2819)
- build: Fix compile error in Smudge.h with docker-build (#2701)
- refactor(basetype): Refactor functions of Coord3D, Region3D to take reference instead of pointer (#2830)
- tweak(drawable): Decouple police car light time step from render update (#2829)
- tweak(gui): Decouple GUI transition and world animation time step from render update (#2056)
- bugfix(view): Fix view ray cast behavior for mouse picks and drawable occlusion (#2818)
weekly-2026-06-26
Changelog
- unify(update): Parse template references in the AssistedTargetingUpdate module by name (#2809)
- refactor(audio): Simplify available audio samples management (#2773)
- unify(messagestream): Move all client message translator files to Core (#2805)
- fix(update): Fix laser-to-target setup mistake in AssistedTargetingUpdate (#2817)
- chore(sortingrenderer): Remove unused function Insert_VolumeParticle (#2816)
- refactor(sortingrenderer): Replace custom doubly linked list with std::list in SortingNodeStruct (#2810)
- bugfix(logic): Restore retail compatibility after change in CountermeasuresBehavior::calculateCountermeasureToDivertTo (#2808)
- chore: Prevent conflict between clang-format and MSVC by wrapping inline assembly blocks in curly braces (#2811)
- chore: Prevent conflict between clang-format and pre-C++11 nested template parsing (#2760)
weekly-2026-06-19
Changelog
- bugfix(ai): Fix bugged unit behavior when attacked during guard mode (#2197)
- bugfix(crc): Fix spurious mismatches for disconnected players at low CRC intervals (#2796)
- bugfix(network): Improve compare method of command id's to keep network commands in chronological order when overflowing (#2736)
- bugfix(pathfinder): Fix inaccurate single unit movement destinations when unobstructed (#2296)
- bugfix(textureloader): Fix faulty implementations of texture reduction (#2789)
- tweak(textureloader): Remove superfluous texture reduction code from TextureLoadTaskClass::Begin_Uncompressed_Load() (#2789)
- refactor(textureloader): Simplify code in Texture Loader (#2789)
- bugfix(textureloader): Lift hardcoded texture aspect ratio limit of 1:8 to allow loading all textures with modern gpu (#2788)
- perf: Reduce cost of retrieving labels from Waypoint and PolygonTrigger by 90% (#2761)
- unify(selectionxlat): Merge SelectionXlat (#2792)
- unify(commandxlat): Merge CommandXlat and related code from Zero Hour (#2765)
- unify(academystats): Move AcademyStats files to Core and merge related required code (#2765)
- feat(options): Implement user option to toggle Right Mouse Scroll with Alternate Mouse (#2798)
- unify(translator): Merge message translators from Zero Hour (#2794)
- perf(pathfinding): Skip redundant path-exists check in Pathfinder::checkForAdjust() (#2791)
- refactor(pathfinder): Simplify implementation of spiral cell search in Pathfinder::adjustDestination() (#2790)
- fix(bitflags): Use UnsignedInt64 and %I64X to support VC6 compiler in BitFlags.h (#2759)
- fix(milesaudiomanager): Fix audio request kill condition in MilesAudioManager::killAudioEventImmediately() (#2784)
weekly-2026-06-12
Changelog
- fix(sortingrenderer): Prevent a crash when exceeding the 16-bit index buffer limit (#2783)
- refactor(gamelogic): Split switch cases of GameLogic::logicMessageDispatcher into separate functions (#2702)
- unify(ww3d2): Move SortingRenderer to Core (#2772)
- unify(ww3d2): Merge SortingRenderer (#2772)
- perf(gamemessage): Replace GameMessageArgument linked lists with vectors (#2700)
weekly-2026-06-05
Changelog
- bugfix(contain): Prevent riders from being added to destroyed container object when Reinforcement Pad is destroyed before Troop Crawler drop (#2746)
- refactor(metaevent): Split MetaEventTranslator::translateGameMessage() into smaller functions (#2758)
- fix(milesaudiomanager): Prevent multithread crashing in MilesAudioManager (#2718)
- refactor(milesaudiomanager): Clean up and simplify MilesAudioManager (#2718)
- bugfix(object): Avoid crash with dangling contain module in Object::onDestroy() when Reinforcement Pad is destroyed before Troop Crawler drop (#2747)
- fix(memory): Fix various memory leaks (2) (#2710)
- unify(shroud): Merge W3DShroud code from Zero Hour and implicitly fix black terrain for one frame on far camera jumps (#2757)
- fix(metaevent): Ignore order in which modifier keys are released to trigger meta events (#2577)
- unify(message): Merge MessageStream, MetaEvent code (#2756)
weekly-2026-05-29
weekly-2026-05-22
Changelog
- bugfix(gameengine): Fix logic in GameEngine::canUpdateRegularGameLogic() (#2707)
- fix(recorder): Fix memory leak of RecorderClass::m_crcInfo (#2713)
- bugfix(aigroup): Prevent game crash when a player is selected in Replay playback (2) (#2711)
- perf(network): Replace extern global network variables with const ones (#2726)
- refactor(network): Use switch cases in utility functions for network commands (#2725)
- fix(particlesys): Add or simplify null-checks to createParticleSystem calls (#2724)
- fix(network): Verify accepted type of incoming game messages (#2708)
- bugfix(physics): Prevent building crash damage from dealing damage to other objects (#2723)
- bugfix(physics): Prevent dead units from repeatedly dealing crash damage on collision with non-buildings (#2204)
- fix(gameengine): Remove music tracks as prerequisite to initialize the game engine (#2737)
- bugfix: Restore retail compatibility after retail behavior flags change (#2727)
- refactor(netpacket): Simplify NetPacket functions for packet buffer reads (#2463)
- fix(object): Prevent crash if Object::m_drawable is a nullptr on save load (#2712)