Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
fa27613
bugfix(gameengine): Prevent logic time accumulation while the game is…
bobtista Jul 11, 2026
3d28cc3
unify(ini): Merge INIMultiplayer starting money parsing from Zero Hou…
githubawn Jul 8, 2026
b70e160
unify(ini): Move INI parser files to Core (#2863)
githubawn Jul 8, 2026
ca9358f
tweak(gamemessage): Reduce number of MSG_DESTROY_SELECTED_GROUP messa…
Caball009 Jul 13, 2026
36ba5b0
refactor(sphere): Zero initialize SphereClass by default and add Is_V…
stephanmeesters Jul 15, 2026
a5f8539
refactor(intro): Move intro related code to new file and class (#2267)
xezon Feb 7, 2026
49760b5
refactor(intro): Simplify the intro state machine in Intro class (#2267)
xezon Feb 5, 2026
90a47ac
fix(intro): Remove non functional copyright string and simplify logo …
xezon Feb 5, 2026
49506a7
tweak(intro): Remove superfluous legal page window from intro sequenc…
xezon Feb 5, 2026
355e006
feat(intro): Add short Intro Logo for The Super Hackers team (#2267)
xezon Feb 6, 2026
bb0a3f7
feat(screenshot): Add threaded JPEG/PNG screenshots without game stal…
bobtista Jul 17, 2026
b3f3a9a
chore: Use qualified include paths for WWVegas headers (1)
CryoTheRenegade Jul 18, 2026
69e1ea2
chore: Remove empty braces in macros to help clang format (#2883)
githubawn Jul 19, 2026
769c7c7
chore: Replace CPP_11(= delete) with FUNCTION_DELETE macro to help cl…
githubawn Jul 19, 2026
da5ee97
fix(bitflags): Prevent linker errors from multiple defined BitFlags<N…
xezon Jul 19, 2026
cc6e4bc
chore(heightmap): Remove remnants of unimplemented Stretch Terrain an…
xezon Jun 29, 2026
fe72137
bugfix(heightmap): Prevent full terrain rebuild on every frame when D…
xezon Jun 29, 2026
ff6ac21
bugfix(gamelogic): Map player index to slot index for CRC validation …
fbraz3 Jul 19, 2026
e378776
tweak(cmake): Use GameSpy SDK from TheSuperHackers repository (#2884)
CryoTheRenegade Jul 19, 2026
116b528
fix(build): resolve upstream sync compilation errors on posix
fbraz3 Jul 20, 2026
7cb7c74
fix(build): add stb source to flatpak manifests
fbraz3 Jul 20, 2026
82e9dd8
Revert "feat(intro): Add short Intro Logo for The Super Hackers team …
fbraz3 Jul 20, 2026
d01f284
fix(build): remove duplicate FFmpegVideoPlayer in GeneralsMD
fbraz3 Jul 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ endif()
include(cmake/config.cmake)
include(cmake/gamespy.cmake)
include(cmake/lzhl.cmake)
include(cmake/stb.cmake)

# GeneralsX @bugfix fbraz 10/03/2026 Include openal.cmake here (before Core subdirectory)
# so OpenAL::OpenAL target is available when Core/GameEngineDevice/CMakeLists.txt processes.
Expand Down
50 changes: 26 additions & 24 deletions Core/GameEngine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ set(GAMEENGINE_SRC
Include/GameClient/Image.h
Include/GameClient/IMEManager.h
# Include/GameClient/InGameUI.h
Include/GameClient/Intro.h
Include/GameClient/Keyboard.h
# Include/GameClient/KeyDefs.h
Include/GameClient/LanguageFilter.h
Expand Down Expand Up @@ -583,33 +584,33 @@ set(GAMEENGINE_SRC
Source/Common/GameUtility.cpp
# Source/Common/GlobalData.cpp
Source/Common/INI/INI.cpp
# Source/Common/INI/INIAiData.cpp
# Source/Common/INI/INIAnimation.cpp
Source/Common/INI/INIAiData.cpp
Source/Common/INI/INIAnimation.cpp
Source/Common/INI/INIAudioEventInfo.cpp
# Source/Common/INI/INICommandButton.cpp
# Source/Common/INI/INICommandSet.cpp
# Source/Common/INI/INIControlBarScheme.cpp
# Source/Common/INI/INICrate.cpp
# Source/Common/INI/INIDamageFX.cpp
# Source/Common/INI/INIDrawGroupInfo.cpp
# Source/Common/INI/INIGameData.cpp
# Source/Common/INI/INIMapCache.cpp
# Source/Common/INI/INIMapData.cpp
# Source/Common/INI/INIMappedImage.cpp
Source/Common/INI/INICommandButton.cpp
Source/Common/INI/INICommandSet.cpp
Source/Common/INI/INIControlBarScheme.cpp
Source/Common/INI/INICrate.cpp
Source/Common/INI/INIDamageFX.cpp
Source/Common/INI/INIDrawGroupInfo.cpp
Source/Common/INI/INIGameData.cpp
Source/Common/INI/INIMapCache.cpp
Source/Common/INI/INIMapData.cpp
Source/Common/INI/INIMappedImage.cpp
Source/Common/INI/INIMiscAudio.cpp
# Source/Common/INI/INIModel.cpp
# Source/Common/INI/INIMultiplayer.cpp
# Source/Common/INI/INIObject.cpp
# Source/Common/INI/INIParticleSys.cpp
# Source/Common/INI/INISpecialPower.cpp
# Source/Common/INI/INITerrain.cpp
# Source/Common/INI/INITerrainBridge.cpp
# Source/Common/INI/INITerrainRoad.cpp
# Source/Common/INI/INIUpgrade.cpp
Source/Common/INI/INIModel.cpp
Source/Common/INI/INIMultiplayer.cpp
Source/Common/INI/INIObject.cpp
Source/Common/INI/INIParticleSys.cpp
Source/Common/INI/INISpecialPower.cpp
Source/Common/INI/INITerrain.cpp
Source/Common/INI/INITerrainBridge.cpp
Source/Common/INI/INITerrainRoad.cpp
Source/Common/INI/INIUpgrade.cpp
Source/Common/INI/INIVideo.cpp
# Source/Common/INI/INIWater.cpp
# Source/Common/INI/INIWeapon.cpp
# Source/Common/INI/INIWebpageURL.cpp
Source/Common/INI/INIWater.cpp
Source/Common/INI/INIWeapon.cpp
Source/Common/INI/INIWebpageURL.cpp
# Source/Common/Language.cpp
# Source/Common/MessageStream.cpp
# Source/Common/MiniLog.cpp
Expand Down Expand Up @@ -806,6 +807,7 @@ set(GAMEENGINE_SRC
# Source/GameClient/InGameUI.cpp
Source/GameClient/Input/Keyboard.cpp
Source/GameClient/Input/Mouse.cpp
Source/GameClient/Intro.cpp
Source/GameClient/LanguageFilter.cpp
Source/GameClient/Line2D.cpp
Source/GameClient/MapUtil.cpp
Expand Down
34 changes: 17 additions & 17 deletions Core/GameEngine/Include/Common/CRCDebug.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,23 +103,23 @@

#else // DEBUG_CRC

#define DUMPVEL {}
#define DUMPACCEL {}
#define DUMPVECTOR3(x) {}
#define DUMPVECTOR3NAMED(x, y) {}
#define DUMPCOORD3D(x) {}
#define DUMPCOORD3DNAMED(x, y) {}
#define DUMPMATRIX3D(x) {}
#define DUMPMATRIX3DNAMED(x, y) {}

#define DUMPREAL(x) {}
#define DUMPREALNAMED(x, y) {}

#define CRCDEBUG_LOG(x) {}
#define CRCDUMP_LOG(x) {}
#define CRCGEN_LOG(x) {}

#define VERIFY_CRC {}
#define DUMPVEL
#define DUMPACCEL
#define DUMPVECTOR3(x)
#define DUMPVECTOR3NAMED(x, y)
#define DUMPCOORD3D(x)
#define DUMPCOORD3DNAMED(x, y)
#define DUMPMATRIX3D(x)
#define DUMPMATRIX3DNAMED(x, y)

#define DUMPREAL(x)
#define DUMPREALNAMED(x, y)

#define CRCDEBUG_LOG(x)
#define CRCDUMP_LOG(x)
#define CRCGEN_LOG(x)

#define VERIFY_CRC

#endif

Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/DynamicAudioEventInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class DynamicAudioEventInfo : public AudioEventInfo
};
// Warning: update xferNoName if you modify the enum list!

BitFlags< OVERRIDE_COUNT > m_overriddenFields;
BitFlags< OVERRIDE_COUNT, struct OverriddenTag > m_overriddenFields;

// Retain the original name so we can look it up later
AsciiString m_originalName;
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/FileSystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@

#include <Utility/hash_map_adapter.h>

#include "mutex.h"
#include "WWLib/mutex.h"

//----------------------------------------------------------------------------
// Forward References
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/GameCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@

// ----------------------------------------------------------------------------------------------
#include "Lib/BaseType.h"
#include "WWCommon.h"
#include "WWLib/WWCommon.h"
#include "Common/GameDefines.h"

// ----------------------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/GameDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

#pragma once

#include "WWDefines.h"
#include "WWLib/WWDefines.h"

// Note: Retail compatibility must not be broken before this project officially does.
// Use RETAIL_COMPATIBLE_CRC and RETAIL_COMPATIBLE_XFER_SAVE to guard breaking changes.
Expand Down
4 changes: 2 additions & 2 deletions Core/GameEngine/Include/Common/INI.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ typedef void (*BuildMultiIniFieldProc)(MultiIniFieldParse& p);
//-------------------------------------------------------------------------------------------------
class INI
{
INI(const INI&) CPP_11(= delete);
INI& operator=(const INI&) CPP_11(= delete);
INI(const INI&) FUNCTION_DELETE;
INI& operator=(const INI&) FUNCTION_DELETE;

public:
INI();
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/MiniDumper.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#pragma once

#ifdef RTS_ENABLE_CRASHDUMP
#include "DbgHelpLoader.h"
#include "WWLib/DbgHelpLoader.h"

enum DumpType CPP_11(: Char)
{
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/Common/ObjectStatusTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ enum ObjectStatusTypes CPP_11(: Int)

};

typedef BitFlags<OBJECT_STATUS_COUNT> ObjectStatusMaskType;
typedef BitFlags<OBJECT_STATUS_COUNT, struct ObjectStatusMaskTypeTag> ObjectStatusMaskType;

#define MAKE_OBJECT_STATUS_MASK(k) ObjectStatusMaskType(ObjectStatusMaskType::kInit, (k))
#define MAKE_OBJECT_STATUS_MASK2(k,a) ObjectStatusMaskType(ObjectStatusMaskType::kInit, (k), (a))
Expand Down
5 changes: 3 additions & 2 deletions Core/GameEngine/Include/Common/OptionPreferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@

#pragma once

#include "ww3d.h"
#include "texturefilter.h"
#include "WW3D2/ww3d.h"
#include "WW3D2/texturefilter.h"

#include "Common/UserPreferences.h"

Expand Down Expand Up @@ -72,6 +72,7 @@ class OptionPreferences : public UserPreferences
Bool getRightMouseScrollWithAlternateMouseEnabled() const;
Bool getRetaliationModeEnabled();
Bool getDoubleClickAttackMoveEnabled();
Int getJpegQuality() const;
Real getScrollFactor();
Bool getDrawScrollAnchor();
Bool getMoveScrollAnchor();
Expand Down
18 changes: 11 additions & 7 deletions Core/GameEngine/Include/GameClient/Display.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,16 @@
#include "GameClient/GameFont.h"
#include "GameClient/View.h"

enum ScreenshotFormat
{
SCREENSHOT_JPEG,
SCREENSHOT_PNG,

SCREENSHOT_FORMAT_COUNT
};

constexpr const Int DEFAULT_JPEG_QUALITY = 80;

struct ShroudLevel
{
Short m_currentShroud; ///< A Value of 1 means shrouded. 0 is not. Negative is the count of people looking.
Expand Down Expand Up @@ -154,7 +164,6 @@ class Display : public SubsystemInterface
Int endX, Int endY ) = 0;

/// FullScreen video playback
virtual void playLogoMovie( AsciiString movieName, Int minMovieLength, Int minCopyrightLength );
virtual void playMovie( AsciiString movieName );
virtual void stopMovie();
virtual Bool isMoviePlaying();
Expand All @@ -173,7 +182,7 @@ class Display : public SubsystemInterface
virtual void preloadModelAssets( AsciiString model ) = 0; ///< preload model asset
virtual void preloadTextureAssets( AsciiString texture ) = 0; ///< preload texture asset

virtual void takeScreenShot() = 0; ///< saves screenshot to a file
virtual void takeScreenShot(ScreenshotFormat format, Int jpegQuality = DEFAULT_JPEG_QUALITY) = 0; ///< saves screenshot in specified format
virtual void toggleMovieCapture() = 0; ///< starts saving frames to an avi or frame sequence
virtual void toggleLetterBox() = 0; ///< enabled letter-boxed display
virtual void enableLetterBox(Bool enable) = 0; ///< forces letter-boxed display on/off
Expand Down Expand Up @@ -217,11 +226,6 @@ class Display : public SubsystemInterface
Real m_letterBoxFadeLevel; ///<tracks the current alpha level for fading letter-boxed mode in/out.
Bool m_letterBoxEnabled; ///<current state of letterbox
UnsignedInt m_letterBoxFadeStartTime; ///< time of letterbox fade start
Int m_movieHoldTime; ///< time that we hold on the last frame of the movie
Int m_copyrightHoldTime; ///< time that the copyright must be on the screen
UnsignedInt m_elapsedMovieTime; ///< used to make sure we show the stuff long enough
UnsignedInt m_elapsedCopywriteTime; ///< Hold on the last frame until both have expired
DisplayString *m_copyrightDisplayString;///< this'll hold the display string
};

// the singleton
Expand Down
52 changes: 52 additions & 0 deletions Core/GameEngine/Include/GameClient/Intro.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
** Command & Conquer Generals Zero Hour(tm)
** Copyright 2026 TheSuperHackers
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

class Intro
{
enum IntroState
{
IntroState_Start,
IntroState_EALogoMovie,
IntroState_SizzleMovieWait,
IntroState_SizzleMovie,
IntroState_Done,
};

public:

Intro();

void update();

Bool isDone() const { return m_currentState == IntroState_Done; }

private:

void enterNextState();

void doEALogoMovie();
void doSizzleMovie();
void doPostIntro();
void doAsyncWait(UnsignedInt milliseconds);

IntroState m_currentState;
UnsignedInt m_allowedStateFlags;
UnsignedInt m_waitUntilMs;
};
6 changes: 0 additions & 6 deletions Core/GameEngine/Include/GameClient/TerrainVisual.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,7 @@ typedef enum _TerrainLOD CPP_11(: Int)
{
TERRAIN_LOD_INVALID,
TERRAIN_LOD_MIN, // note that this is less than max
TERRAIN_LOD_STRETCH_NO_CLOUDS,
TERRAIN_LOD_HALF_CLOUDS,
TERRAIN_LOD_NO_CLOUDS,
TERRAIN_LOD_STRETCH_CLOUDS,
TERRAIN_LOD_NO_WATER,
TERRAIN_LOD_MAX, // note that this is larger than min
TERRAIN_LOD_AUTOMATIC,
Expand All @@ -177,10 +174,7 @@ static const char *const TerrainLODNames[] =
{
"NONE",
"MIN",
"STRETCH_NO_CLOUDS",
"HALF_CLOUDS",
"NO_CLOUDS",
"STRETCH_CLOUDS",
"NO_WATER",
"MAX",
"AUTOMATIC",
Expand Down
2 changes: 1 addition & 1 deletion Core/GameEngine/Include/GameLogic/Damage.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ enum DamageType CPP_11(: Int)
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------

typedef BitFlags<DAMAGE_NUM_TYPES> DamageTypeFlags;
typedef BitFlags<DAMAGE_NUM_TYPES, struct DamageTypeFlagsTag> DamageTypeFlags;

inline Bool getDamageTypeFlag(DamageTypeFlags flags, DamageType dt)
{
Expand Down
4 changes: 2 additions & 2 deletions Core/GameEngine/Include/GameNetwork/GameSpyThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@

#pragma once

#include "mutex.h"
#include "thread.h"
#include "WWLib/mutex.h"
#include "WWLib/thread.h"

class GameSpyThreadClass : public ThreadClass
{
Expand Down
Loading
Loading