diff --git a/Core/GameEngine/CMakeLists.txt b/Core/GameEngine/CMakeLists.txt
index fe0f700648c..ae5a431004f 100644
--- a/Core/GameEngine/CMakeLists.txt
+++ b/Core/GameEngine/CMakeLists.txt
@@ -584,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
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIAiData.cpp b/Core/GameEngine/Source/Common/INI/INIAiData.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIAiData.cpp
rename to Core/GameEngine/Source/Common/INI/INIAiData.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIAnimation.cpp b/Core/GameEngine/Source/Common/INI/INIAnimation.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIAnimation.cpp
rename to Core/GameEngine/Source/Common/INI/INIAnimation.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INICommandButton.cpp b/Core/GameEngine/Source/Common/INI/INICommandButton.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INICommandButton.cpp
rename to Core/GameEngine/Source/Common/INI/INICommandButton.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INICommandSet.cpp b/Core/GameEngine/Source/Common/INI/INICommandSet.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INICommandSet.cpp
rename to Core/GameEngine/Source/Common/INI/INICommandSet.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIControlBarScheme.cpp b/Core/GameEngine/Source/Common/INI/INIControlBarScheme.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIControlBarScheme.cpp
rename to Core/GameEngine/Source/Common/INI/INIControlBarScheme.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INICrate.cpp b/Core/GameEngine/Source/Common/INI/INICrate.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INICrate.cpp
rename to Core/GameEngine/Source/Common/INI/INICrate.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIDamageFX.cpp b/Core/GameEngine/Source/Common/INI/INIDamageFX.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIDamageFX.cpp
rename to Core/GameEngine/Source/Common/INI/INIDamageFX.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp b/Core/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp
rename to Core/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIGameData.cpp b/Core/GameEngine/Source/Common/INI/INIGameData.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIGameData.cpp
rename to Core/GameEngine/Source/Common/INI/INIGameData.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIMapCache.cpp b/Core/GameEngine/Source/Common/INI/INIMapCache.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIMapCache.cpp
rename to Core/GameEngine/Source/Common/INI/INIMapCache.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIMapData.cpp b/Core/GameEngine/Source/Common/INI/INIMapData.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIMapData.cpp
rename to Core/GameEngine/Source/Common/INI/INIMapData.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIMappedImage.cpp b/Core/GameEngine/Source/Common/INI/INIMappedImage.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIMappedImage.cpp
rename to Core/GameEngine/Source/Common/INI/INIMappedImage.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIModel.cpp b/Core/GameEngine/Source/Common/INI/INIModel.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIModel.cpp
rename to Core/GameEngine/Source/Common/INI/INIModel.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp b/Core/GameEngine/Source/Common/INI/INIMultiplayer.cpp
similarity index 79%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp
rename to Core/GameEngine/Source/Common/INI/INIMultiplayer.cpp
index 94f9b93a75b..c93c9658478 100644
--- a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp
+++ b/Core/GameEngine/Source/Common/INI/INIMultiplayer.cpp
@@ -80,30 +80,30 @@ void INI::parseMultiplayerColorDefinition( INI* ini )
namespace
{
- struct MultiplayerStartingMoneySettings
- {
- Money money;
- Bool isDefault;
- };
-
- const FieldParse startingMoneyFieldParseTable[] =
- {
- { "Value", Money::parseMoneyAmount, nullptr, offsetof( MultiplayerStartingMoneySettings, money ) },
- { "Default", INI::parseBool, nullptr, offsetof( MultiplayerStartingMoneySettings, isDefault ) },
- { nullptr, nullptr, nullptr, 0 }
- };
+ struct MultiplayerStartingMoneySettings
+ {
+ Money money;
+ Bool isDefault;
+ };
+
+ const FieldParse startingMoneyFieldParseTable[] =
+ {
+ { "Value", Money::parseMoneyAmount, nullptr, offsetof( MultiplayerStartingMoneySettings, money ) },
+ { "Default", INI::parseBool, nullptr, offsetof( MultiplayerStartingMoneySettings, isDefault ) },
+ { nullptr, nullptr, nullptr, 0 }
+ };
}
void INI::parseMultiplayerStartingMoneyChoiceDefinition( INI* ini )
{
- DEBUG_ASSERTCRASH( ini->getLoadType() != INI_LOAD_CREATE_OVERRIDES, ("Overrides not supported for MultiplayerStartingMoneyChoice") );
+ DEBUG_ASSERTCRASH( ini->getLoadType() != INI_LOAD_CREATE_OVERRIDES, ("Overrides not supported for MultiplayerStartingMoneyChoice") );
- // Temporary data store
- MultiplayerStartingMoneySettings settings;
- settings.isDefault = false;
+ // Temporary data store.
+ MultiplayerStartingMoneySettings settings;
+ settings.isDefault = false;
- ini->initFromINI( &settings, startingMoneyFieldParseTable );
+ ini->initFromINI( &settings, startingMoneyFieldParseTable );
- TheMultiplayerSettings->addStartingMoneyChoice( settings.money, settings.isDefault );
+ TheMultiplayerSettings->addStartingMoneyChoice( settings.money, settings.isDefault );
}
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIObject.cpp b/Core/GameEngine/Source/Common/INI/INIObject.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIObject.cpp
rename to Core/GameEngine/Source/Common/INI/INIObject.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIParticleSys.cpp b/Core/GameEngine/Source/Common/INI/INIParticleSys.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIParticleSys.cpp
rename to Core/GameEngine/Source/Common/INI/INIParticleSys.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INISpecialPower.cpp b/Core/GameEngine/Source/Common/INI/INISpecialPower.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INISpecialPower.cpp
rename to Core/GameEngine/Source/Common/INI/INISpecialPower.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrain.cpp b/Core/GameEngine/Source/Common/INI/INITerrain.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrain.cpp
rename to Core/GameEngine/Source/Common/INI/INITerrain.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrainBridge.cpp b/Core/GameEngine/Source/Common/INI/INITerrainBridge.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrainBridge.cpp
rename to Core/GameEngine/Source/Common/INI/INITerrainBridge.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrainRoad.cpp b/Core/GameEngine/Source/Common/INI/INITerrainRoad.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INITerrainRoad.cpp
rename to Core/GameEngine/Source/Common/INI/INITerrainRoad.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIUpgrade.cpp b/Core/GameEngine/Source/Common/INI/INIUpgrade.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIUpgrade.cpp
rename to Core/GameEngine/Source/Common/INI/INIUpgrade.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp b/Core/GameEngine/Source/Common/INI/INIWater.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp
rename to Core/GameEngine/Source/Common/INI/INIWater.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWeapon.cpp b/Core/GameEngine/Source/Common/INI/INIWeapon.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIWeapon.cpp
rename to Core/GameEngine/Source/Common/INI/INIWeapon.cpp
diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWebpageURL.cpp b/Core/GameEngine/Source/Common/INI/INIWebpageURL.cpp
similarity index 100%
rename from GeneralsMD/Code/GameEngine/Source/Common/INI/INIWebpageURL.cpp
rename to Core/GameEngine/Source/Common/INI/INIWebpageURL.cpp
diff --git a/Generals/Code/GameEngine/CMakeLists.txt b/Generals/Code/GameEngine/CMakeLists.txt
index 124246f68f4..5a99ba76da7 100644
--- a/Generals/Code/GameEngine/CMakeLists.txt
+++ b/Generals/Code/GameEngine/CMakeLists.txt
@@ -532,33 +532,33 @@ set(GAMEENGINE_SRC
Source/Common/GameMain.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
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIAiData.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIAiData.cpp
deleted file mode 100644
index 98b2d4eb43e..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIAiData.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIAiData.cpp //////////////////////////////////////////////////////////////////////////
-// Author: John Ahlquist, March 2002
-// Desc: Parsing AIData INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameLogic/AI.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PRIVATE DATA ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse GameData entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseAIDataDefinition( INI* ini )
-{
- AI::parseAiDataDefinition(ini);
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIAnimation.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIAnimation.cpp
deleted file mode 100644
index ad333937b18..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIAnimation.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIAnimation.cpp /////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, July 2002
-// Desc: Parsing animation INI entries for 2D image animations
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/Anim2D.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse animation entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseAnim2DDefinition( INI* ini )
-{
- AsciiString name;
- Anim2DTemplate *animTemplate;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- //
- // find existing item if present, note that we do not support overrides
- // in the animations like we do in systems that are more "design" oriented, images
- // are assets as they are
- //
- if( !TheAnim2DCollection )
- {
-
- //We don't need it if we're in the builder... which doesn't have this.
- return;
-
- }
-
- // find existing animation template if present
- animTemplate = TheAnim2DCollection->findTemplate( name );
- if( animTemplate == nullptr )
- {
-
- // item not found, create a new one
- animTemplate = TheAnim2DCollection->newTemplate( name );
- DEBUG_ASSERTCRASH( animTemplate, ("INI::parseAnim2DDefinition - unable to allocate animation template for '%s'",
- name.str()) );
-
- }
- else
- {
-
- // we're loading over an existing animation template ... something is probably wrong
- DEBUG_CRASH(( "INI::parseAnim2DDefinition - Animation template '%s' already exists",
- animTemplate->getName().str() ));
- return;
-
- }
-
- // parse the ini definition
- ini->initFromINI( animTemplate, animTemplate->getFieldParse() );
-
-}
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INICommandButton.cpp b/Generals/Code/GameEngine/Source/Common/INI/INICommandButton.cpp
deleted file mode 100644
index 2f4eb32c5bc..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INICommandButton.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INICommandButton.cpp /////////////////////////////////////////////////////////////////////
-// Author: Colin Day, March 2002
-// Desc: Command buttons are the atomic units we can configure into command sets to then
-// display in the context sensitive user interface
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// USER INCLUDES //////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/SpecialPower.h"
-#include "GameClient/ControlBar.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse a command button */
-//-------------------------------------------------------------------------------------------------
-void INI::parseCommandButtonDefinition( INI *ini )
-{
- ControlBar::parseCommandButtonDefinition(ini);
-}
-
-//-------------------------------------------------------------------------------------------------
-/** Parse a command button */
-//-------------------------------------------------------------------------------------------------
-void ControlBar::parseCommandButtonDefinition( INI *ini )
-{
- // read the name
- AsciiString name = ini->getNextToken();
-
- // find existing item if present
- CommandButton *button = TheControlBar->findNonConstCommandButton( name );
- if( button == nullptr )
- {
- // allocate a new item
- button = TheControlBar->newCommandButton( name );
- if (ini->getLoadType() == INI_LOAD_CREATE_OVERRIDES)
- {
- button->markAsOverride();
- }
- }
- else if( ini->getLoadType() != INI_LOAD_CREATE_OVERRIDES )
- {
- DEBUG_CRASH(( "[LINE: %d in '%s'] Duplicate commandbutton %s found!", ini->getLineNum(), ini->getFilename().str(), name.str() ));
- }
- else
- {
- button = TheControlBar->newCommandButtonOverride( button );
- }
-
- // parse the ini definition
- ini->initFromINI( button, button->getFieldParse() );
-
-
- //Make sure buttons with special power templates also have the appropriate option set.
- const SpecialPowerTemplate *spTemplate = button->getSpecialPowerTemplate();
- Bool needsTemplate = BitIsSet( button->getOptions(), NEED_SPECIAL_POWER_SCIENCE );
- if( spTemplate && !needsTemplate )
- {
- DEBUG_CRASH( ("[LINE: %d in '%s'] CommandButton %s has SpecialPower = %s but the button also requires Options = NEED_SPECIAL_POWER_SCIENCE. Failure to do so will cause bugs such as invisible side shortcut buttons",
- ini->getLineNum(), ini->getFilename().str(), name.str(), spTemplate->getName().str() ) );
- }
- else if( !spTemplate && needsTemplate )
- {
- DEBUG_CRASH( ("[LINE: %d in '%s'] CommandButton %s has Options = NEED_SPECIAL_POWER_SCIENCE but doesn't specify a SpecialPower = xxxx. Please evaluate INI.",
- ini->getLineNum(), ini->getFilename().str(), name.str() ) );
- }
-
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INICommandSet.cpp b/Generals/Code/GameEngine/Source/Common/INI/INICommandSet.cpp
deleted file mode 100644
index efe52f8123b..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INICommandSet.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INICommandSet.cpp ////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, March 2002
-// Desc: Command sets are a configurable set of CommandButtons, we will use the sets as
-// part of the context sensitive user interface
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// USER INCLUDES //////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/ControlBar.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse a command set */
-//-------------------------------------------------------------------------------------------------
-void INI::parseCommandSetDefinition( INI *ini )
-{
- ControlBar::parseCommandSetDefinition(ini);
-}
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIControlBarScheme.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIControlBarScheme.cpp
deleted file mode 100644
index dbe467b7ba3..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIControlBarScheme.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIControlBarScheme.cpp /////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-//
-// Electronic Arts Pacific.
-//
-// Confidential Information
-// Copyright (C) 2002 - All Rights Reserved
-//
-//-----------------------------------------------------------------------------
-//
-// created: Apr 2002
-//
-// Filename: INIControlBarScheme.cpp
-//
-// author: Chris Huybregts
-//
-// purpose: Parse a control Bar Scheme
-//
-//-----------------------------------------------------------------------------
-///////////////////////////////////////////////////////////////////////////////
-
-//-----------------------------------------------------------------------------
-// SYSTEM INCLUDES ////////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// USER INCLUDES //////////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/ControlBar.h"
-#include "GameClient/ControlBarScheme.h"
-//-----------------------------------------------------------------------------
-// DEFINES ////////////////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// PRIVATE FUNCTIONS //////////////////////////////////////////////////////////
-//-----------------------------------------------------------------------------
-
-//-------------------------------------------------------------------------------------------------
-/** Parse a ControlBarScheme button */
-//-------------------------------------------------------------------------------------------------
-void INI::parseControlBarSchemeDefinition( INI *ini )
-{
- AsciiString name;
- ControlBarSchemeManager *CBSchemeManager;
- ControlBarScheme *CBScheme;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present
- CBSchemeManager = TheControlBar->getControlBarSchemeManager();
- DEBUG_ASSERTCRASH( CBSchemeManager, ("parseControlBarSchemeDefinition: Unable to Get CBSchemeManager") );
- if( !CBSchemeManager )
- return;
-
- // If we have a previously allocated control bar, this will return a cleared out pointer to it so we
- // can overwrite it
- CBScheme = CBSchemeManager->newControlBarScheme( name );
-
- // sanity
- DEBUG_ASSERTCRASH( CBScheme, ("parseControlBarSchemeDefinition: Unable to allocate Scheme '%s'", name.str()) );
-
- // parse the ini definition
- ini->initFromINI( CBScheme, CBSchemeManager->getFieldParse() );
-
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INICrate.cpp b/Generals/Code/GameEngine/Source/Common/INI/INICrate.cpp
deleted file mode 100644
index c4e7b75fe75..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INICrate.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INICrate.cpp /////////////////////////////////////////////////////////////////////////////////
-// Author: Graham Smallwood Feb 2002
-// Desc: Just passes the parse to the CrateSystem
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameLogic/CrateSystem.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Weapon entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseCrateTemplateDefinition( INI* ini )
-{
- CrateSystem::parseCrateTemplateDefinition(ini);
-}
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIDamageFX.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIDamageFX.cpp
deleted file mode 100644
index 3033aaca763..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIDamageFX.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIDamageFX.cpp ////////////////////////////////////////////////////////////////////////////
-// Author: Steven Johnson, November 2001
-// Desc: Parsing DamageFX INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/DamageFX.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/*static */ void INI::parseDamageFXDefinition(INI* ini)
-{
- DamageFXStore::parseDamageFXDefinition(ini);
-}
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp
deleted file mode 100644
index 5ca92f078fb..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIDrawGroupInfo.cpp /////////////////////////////////////////////////////////////////////
-// Author: John McDonald, October 2002
-// Desc: Parsing DrawGroupInfo INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/DrawGroupInfo.h"
-
-void parseInt( INI* ini, void * /*instance*/, void *store, const void* userData )
-{
- DrawGroupInfo *dgi = (DrawGroupInfo*) store;
- if (userData == nullptr) {
- store = &dgi->m_pixelOffsetX;
- dgi->m_usingPixelOffsetX = TRUE;
- } else {
- store = &dgi->m_pixelOffsetY;
- dgi->m_usingPixelOffsetY = TRUE;
- }
-
- INI::parseInt(ini, nullptr, store, nullptr);
-}
-
-void parsePercentToReal( INI* ini, void * /*instance*/, void *store, const void* userData )
-{
- DrawGroupInfo *dgi = (DrawGroupInfo*) store;
- if (userData == nullptr) {
- store = &dgi->m_pixelOffsetX;
- dgi->m_usingPixelOffsetX = FALSE;
- } else {
- store = &dgi->m_pixelOffsetY;
- dgi->m_usingPixelOffsetY = FALSE;
- }
-
- INI::parsePercentToReal(ini, nullptr, store, nullptr);
-}
-
-const FieldParse DrawGroupInfo::s_fieldParseTable[] =
-{
- { "UsePlayerColor", INI::parseBool, nullptr, offsetof( DrawGroupInfo, m_usePlayerColor) },
- { "ColorForText", INI::parseColorInt, nullptr, offsetof( DrawGroupInfo, m_colorForText ) },
- { "ColorForTextDropShadow", INI::parseColorInt, nullptr, offsetof( DrawGroupInfo, m_colorForTextDropShadow ) },
-
- { "FontName", INI::parseQuotedAsciiString, nullptr, offsetof( DrawGroupInfo, m_fontName ) },
- { "FontSize", INI::parseInt, nullptr, offsetof( DrawGroupInfo, m_fontSize ) },
- { "FontIsBold", INI::parseBool, nullptr, offsetof( DrawGroupInfo, m_fontIsBold ) },
- { "DropShadowOffsetX", INI::parseInt, nullptr, offsetof( DrawGroupInfo, m_dropShadowOffsetX) },
- { "DropShadowOffsetY", INI::parseInt, nullptr, offsetof( DrawGroupInfo, m_dropShadowOffsetY) },
- { "DrawPositionXPixel", parseInt, (void*)nullptr, 0 },
- { "DrawPositionXPercent", parsePercentToReal, (void*)nullptr, 0 },
- { "DrawPositionYPixel", parseInt, (void*)1, 0 },
- { "DrawPositionYPercent", parsePercentToReal, (void*)1, 0 },
-
- { nullptr, nullptr, nullptr, 0 }
-};
-
-/*static */ void INI::parseDrawGroupNumberDefinition(INI* ini)
-{
- if (!TheDrawGroupInfo) {
- throw INI_UNKNOWN_ERROR;
- }
-
- ini->initFromINI(TheDrawGroupInfo, TheDrawGroupInfo->getFieldParse());
-}
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIGameData.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIGameData.cpp
deleted file mode 100644
index ddb1f7b6702..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIGameData.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIGameData.cpp //////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, November 2001
-// Desc: Parsing GameData INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/GlobalData.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PRIVATE DATA ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse GameData entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseGameDataDefinition( INI* ini )
-{
- GlobalData::parseGameDataDefinition(ini);
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIMapCache.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIMapCache.cpp
deleted file mode 100644
index 513a755c242..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIMapCache.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIMapCache.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Matthew D. Campbell, February 2002
-// Desc: Parsing MapCache INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Lib/BaseType.h"
-#include "Common/INI.h"
-#include "GameClient/MapUtil.h"
-#include "GameClient/GameText.h"
-#include "GameNetwork/NetworkDefs.h"
-#include "Common/NameKeyGenerator.h"
-#include "Common/WellKnownKeys.h"
-#include "Common/QuotedPrintable.h"
-
-
-class MapMetaDataReader
-{
-public:
- Region3D m_extent;
- Int m_numPlayers;
- Bool m_isMultiplayer;
- AsciiString m_asciiDisplayName;
- AsciiString m_asciiNameLookupTag;
-
- Bool m_isOfficial;
- WinTimeStamp m_timestamp;
- UnsignedInt m_filesize;
- UnsignedInt m_CRC;
-
- Coord3D m_waypoints[MAX_SLOTS];
- Coord3D m_initialCameraPosition;
- Coord3DList m_supplyPositions;
- Coord3DList m_techPositions;
- static const FieldParse m_mapFieldParseTable[]; ///< the parse table for INI definition
- const FieldParse *getFieldParse() const { return m_mapFieldParseTable; }
-};
-
-
-void parseSupplyPositionCoord3D( INI* ini, void * instance, void * /*store*/, const void* /*userData*/ )
-{
- MapMetaDataReader *mmdr = (MapMetaDataReader *)instance;
- Coord3D coord3d;
- INI::parseCoord3D(ini, nullptr, &coord3d,nullptr );
- mmdr->m_supplyPositions.push_front(coord3d);
-
-}
-
-void parseTechPositionsCoord3D( INI* ini, void * instance, void * /*store*/, const void* /*userData*/ )
-{
- MapMetaDataReader *mmdr = (MapMetaDataReader *)instance;
- Coord3D coord3d;
- INI::parseCoord3D(ini, nullptr, &coord3d,nullptr );
- mmdr->m_techPositions.push_front(coord3d);
-
-}
-
-const FieldParse MapMetaDataReader::m_mapFieldParseTable[] =
-{
-
- { "isOfficial", INI::parseBool, nullptr, offsetof( MapMetaDataReader, m_isOfficial ) },
- { "isMultiplayer", INI::parseBool, nullptr, offsetof( MapMetaDataReader, m_isMultiplayer ) },
- { "extentMin", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_extent.lo ) },
- { "extentMax", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_extent.hi ) },
- { "numPlayers", INI::parseInt, nullptr, offsetof( MapMetaDataReader, m_numPlayers ) },
- { "fileSize", INI::parseUnsignedInt, nullptr, offsetof( MapMetaDataReader, m_filesize ) },
- { "fileCRC", INI::parseUnsignedInt, nullptr, offsetof( MapMetaDataReader, m_CRC ) },
- { "timestampLo", INI::parseInt, nullptr, offsetof( MapMetaDataReader, m_timestamp.m_lowTimeStamp ) },
- { "timestampHi", INI::parseInt, nullptr, offsetof( MapMetaDataReader, m_timestamp.m_highTimeStamp ) },
- { "displayName", INI::parseAsciiString, nullptr, offsetof( MapMetaDataReader, m_asciiDisplayName ) },
- { "nameLookupTag", INI::parseAsciiString, nullptr, offsetof( MapMetaDataReader, m_asciiNameLookupTag ) },
-
- { "supplyPosition", parseSupplyPositionCoord3D, nullptr, 0 },
- { "techPosition", parseTechPositionsCoord3D, nullptr, 0 },
-
- { "Player_1_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) },
- { "Player_2_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 1 },
- { "Player_3_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 2 },
- { "Player_4_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 3 },
- { "Player_5_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 4 },
- { "Player_6_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 5 },
- { "Player_7_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 6 },
- { "Player_8_Start", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_waypoints ) + sizeof(Coord3D) * 7 },
-
- { "InitialCameraPosition", INI::parseCoord3D, nullptr, offsetof( MapMetaDataReader, m_initialCameraPosition ) },
-
- { nullptr, nullptr, nullptr, 0 }
-
-};
-
-void INI::parseMapCacheDefinition( INI* ini )
-{
- const char *c;
- AsciiString name;
- MapMetaDataReader mdr;
- MapMetaData md;
-
- // read the name
- c = ini->getNextToken(" \n\r\t");
- name.set( c );
- name = QuotedPrintableToAsciiString(name);
- md.m_waypoints.clear();
-
- ini->initFromINI( &mdr, mdr.getFieldParse() );
-
- md.m_extent = mdr.m_extent;
- md.m_isOfficial = mdr.m_isOfficial != 0;
- md.m_doesExist = TRUE;
- md.m_isMultiplayer = mdr.m_isMultiplayer != 0;
- md.m_numPlayers = mdr.m_numPlayers;
- md.m_filesize = mdr.m_filesize;
- md.m_CRC = mdr.m_CRC;
- md.m_timestamp = mdr.m_timestamp;
-
- md.m_waypoints[TheNameKeyGenerator->keyToName(TheKey_InitialCameraPosition)] = mdr.m_initialCameraPosition;
-
-#if RTS_GENERALS
- md.m_displayName = QuotedPrintableToUnicodeString(mdr.m_asciiDisplayName);
-#else
- md.m_nameLookupTag = QuotedPrintableToAsciiString(mdr.m_asciiNameLookupTag);
-
- if (md.m_nameLookupTag.isEmpty())
- {
- // maps without localized name tags
- AsciiString tempdisplayname;
- tempdisplayname = name.reverseFind('\\') + 1;
- md.m_displayName.translate(tempdisplayname);
- if (md.m_numPlayers >= 2)
- {
- UnicodeString extension;
- extension.format(L" (%d)", md.m_numPlayers);
- md.m_displayName.concat(extension);
- }
- }
- else
- {
- // official maps with name tags
- md.m_displayName = TheGameText->fetch(md.m_nameLookupTag);
- if (md.m_numPlayers >= 2)
- {
- UnicodeString extension;
- extension.format(L" (%d)", md.m_numPlayers);
- md.m_displayName.concat(extension);
- }
- }
-#endif
-
- AsciiString startingCamName;
- for (Int i=0; i.
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIMapData.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, November 2001
-// Desc: Parsing MapData INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PRIVATE DATA ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse MapData entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseMapDataDefinition( INI* ini )
-{
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIMappedImage.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIMappedImage.cpp
deleted file mode 100644
index 21d5bbda299..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIMappedImage.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIMappedImage.cpp ///////////////////////////////////////////////////////////////////////
-// Author: Colin Day, December 2001
-// Desc: Mapped image INI parsing
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/Image.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse mapped image entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseMappedImageDefinition( INI* ini )
-{
- // read the name
- const char* name = ini->getNextToken();
-
- //
- // find existing item if present, note that we do not support overrides
- // in the images like we do in systems that are more "design" oriented, images
- // are assets as they are
- //
- if( !TheMappedImageCollection )
- {
- //We don't need it if we're in the builder... which doesn't have this.
- return;
- }
- Image *image = const_cast(TheMappedImageCollection->findImageByName( name ));
- if(image)
- DEBUG_ASSERTCRASH(!image->getRawTextureData(), ("We are trying to parse over an existing image that contains a non-null rawTextureData, you should fix that"));
-
- if( image == nullptr )
- {
-
- // image not found, create a new one
- image = newInstance(Image);
- image->setName( name );
- TheMappedImageCollection->addImage(image);
- DEBUG_ASSERTCRASH( image, ("parseMappedImage: unable to allocate image for '%s'", name) );
-
- }
-
- // parse the ini definition
- ini->initFromINI( image, image->getFieldParse());
-
-}
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIModel.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIModel.cpp
deleted file mode 100644
index 3e7fc739f55..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIModel.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIModel.cpp /////////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, November 2001
-// Desc: Parsing Model INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PRIVATE DATA ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp
deleted file mode 100644
index c5082372270..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIMultiplayer.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIMultiplayer.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Matthew D. Campbell, January 2002
-// Desc: Parsing MultiplayerSettings and MultiplayerColor INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/MultiplayerSettings.h"
-
-void INI::parseMultiplayerSettingsDefinition( INI* ini )
-{
- if( TheMultiplayerSettings )
- {
- //
- // if the type of loading we're doing creates override data, we need to
- // be loading into a new override item
- //
- if( ini->getLoadType() == INI_LOAD_CREATE_OVERRIDES )
- {
- DEBUG_CRASH(("Creating an override of MultiplayerSettings!"));
- }
- }
- else
- {
- // we don't have any multiplayer settings instance at all yet, create one
- TheMultiplayerSettings = NEW MultiplayerSettings;
- }
-
- // parse the ini definition
- ini->initFromINI( TheMultiplayerSettings, TheMultiplayerSettings->getFieldParse() );
-}
-
-void INI::parseMultiplayerColorDefinition( INI* ini )
-{
- const char *c;
- AsciiString name;
- MultiplayerColorDefinition *multiplayerColorDefinition;
-
- // read the name
- c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present, but this type does not allow overrides,
- //so if it exists just overwrite it.
- multiplayerColorDefinition = TheMultiplayerSettings->findMultiplayerColorDefinitionByName( name );
- if( multiplayerColorDefinition == nullptr )
- multiplayerColorDefinition = TheMultiplayerSettings->newMultiplayerColorDefinition( name );
-
- ini->initFromINI( multiplayerColorDefinition, multiplayerColorDefinition->getFieldParse() );
-
- multiplayerColorDefinition->setColor(multiplayerColorDefinition->getRGBValue());
- multiplayerColorDefinition->setNightColor(multiplayerColorDefinition->getRGBNightValue());
-}
-
-void INI::parseMultiplayerStartingMoneyChoiceDefinition( INI* ini )
-{
-}
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIObject.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIObject.cpp
deleted file mode 100644
index b847407e695..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIObject.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIObject.cpp ////////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, November 2001
-// Desc: Parsing Object INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/ThingTemplate.h"
-#include "Common/ThingFactory.h"
-#include "GameLogic/Module/OpenContain.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Object entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseObjectDefinition( INI* ini )
-{
- AsciiString name = ini->getNextToken();
- ThingFactory::parseObjectDefinition(ini, name, AsciiString::TheEmptyString);
-}
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Object entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseObjectReskinDefinition( INI* ini )
-{
- AsciiString name = ini->getNextToken();
- AsciiString reskinFrom = ini->getNextToken();
- ThingFactory::parseObjectDefinition(ini, name, reskinFrom);
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIParticleSys.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIParticleSys.cpp
deleted file mode 100644
index 8e75daee046..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIParticleSys.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIParticleSys.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Michael S. Booth, November 2001
-// Desc: Parsing Particle System INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/ParticleSys.h"
-
-
-/**
- * Parse entry
- */
-void INI::parseParticleSystemDefinition( INI* ini )
-{
- AsciiString name;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present
- ParticleSystemTemplate *sysTemplate = const_cast(TheParticleSystemManager->findTemplate( name ));
- if (sysTemplate == nullptr)
- {
- // no item is present, create a new one
- sysTemplate = TheParticleSystemManager->newTemplate( name );
- }
-
- // parse the ini definition
- ini->initFromINI( sysTemplate, sysTemplate->getFieldParse() );
-}
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INISpecialPower.cpp b/Generals/Code/GameEngine/Source/Common/INI/INISpecialPower.cpp
deleted file mode 100644
index f4f36ce6397..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INISpecialPower.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INISpecialPower.cpp //////////////////////////////////////////////////////////////////////
-// Author: Colin Day, April 2002
-// Desc: Special Power INI database
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// USER INCLUDES //////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/SpecialPower.h"
-
-//-------------------------------------------------------------------------------------------------
-//-------------------------------------------------------------------------------------------------
-void INI::parseSpecialPowerDefinition( INI *ini )
-{
- SpecialPowerStore::parseSpecialPowerDefinition(ini);
-}
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INITerrain.cpp b/Generals/Code/GameEngine/Source/Common/INI/INITerrain.cpp
deleted file mode 100644
index 1e4b0c1c945..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INITerrain.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INITerrain.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, December 2001
-// Desc: Terrain type INI loading
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/TerrainTypes.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Terrain type entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseTerrainDefinition( INI* ini )
-{
- AsciiString name;
- TerrainType *terrainType;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present
- terrainType = TheTerrainTypes->findTerrain( name );
- if( terrainType == nullptr )
- terrainType = TheTerrainTypes->newTerrain( name );
-
- // sanity
- DEBUG_ASSERTCRASH( terrainType, ("Unable to allocate terrain type '%s'", name.str()) );
-
- // parse the ini definition
- ini->initFromINI( terrainType, terrainType->getFieldParse() );
-
-}
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INITerrainBridge.cpp b/Generals/Code/GameEngine/Source/Common/INI/INITerrainBridge.cpp
deleted file mode 100644
index 65c614e5c55..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INITerrainBridge.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INITerrainBridge.cpp /////////////////////////////////////////////////////////////////////
-// Author: Colin Day, December 2001
-// Desc: Terrain bridge INI loading
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/TerrainRoads.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Terrain Bridge entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseTerrainBridgeDefinition( INI* ini )
-{
- AsciiString name;
- TerrainRoadType *bridge;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present or allocate new one
- bridge = TheTerrainRoads->findBridge( name );
-
- // if item is found it better already be a bridge
- if( bridge )
- {
-
- // sanity
- DEBUG_ASSERTCRASH( bridge->isBridge(), ("Redefining road '%s' as a bridge!",
- bridge->getName().str()) );
- throw INI_INVALID_DATA;
-
- }
-
- if( bridge == nullptr )
- bridge = TheTerrainRoads->newBridge( name );
-
- DEBUG_ASSERTCRASH( bridge, ("Unable to allocate bridge '%s'", name.str()) );
-
- // parse the ini definition
- ini->initFromINI( bridge, bridge->getBridgeFieldParse() );
-
-}
-
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INITerrainRoad.cpp b/Generals/Code/GameEngine/Source/Common/INI/INITerrainRoad.cpp
deleted file mode 100644
index 94cbd4779fc..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INITerrainRoad.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INITerrainRoad.cpp ///////////////////////////////////////////////////////////////////////
-// Author: Colin Day, December 2001
-// Desc: Terrain road INI loading
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameClient/TerrainRoads.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Terrain Road entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseTerrainRoadDefinition( INI* ini )
-{
- AsciiString name;
- TerrainRoadType *road;
-
- // read the name
- const char* c = ini->getNextToken();
- name.set( c );
-
- // find existing item if present or allocate new one
- road = TheTerrainRoads->findRoad( name );
-
- // if item is found it better not already be a bridge
- if( road )
- {
-
- // sanity
- DEBUG_ASSERTCRASH( road->isBridge() == FALSE, ("Redefining bridge '%s' as a road!",
- road->getName().str()) );
- throw INI_INVALID_DATA;
-
- }
-
- if( road == nullptr )
- road = TheTerrainRoads->newRoad( name );
-
- DEBUG_ASSERTCRASH( road, ("Unable to allocate road '%s'", name.str()) );
-
- // parse the ini definition
- ini->initFromINI( road, road->getRoadFieldParse() );
-
-}
-
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIUpgrade.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIUpgrade.cpp
deleted file mode 100644
index be2956f743d..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIUpgrade.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIUpgrade.cpp ///////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, March 2002
-// Desc: Upgrade database
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// USER INCLUDES //////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/Upgrade.h"
-
-//-------------------------------------------------------------------------------------------------
-/** Parse an upgrade definition */
-//-------------------------------------------------------------------------------------------------
-void INI::parseUpgradeDefinition( INI *ini )
-{
- UpgradeCenter::parseUpgradeDefinition(ini);
-}
-
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp
deleted file mode 100644
index d6bdec167f1..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIWater.cpp /////////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, December 2001
-// Desc: Water settings
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#define DEFINE_TIME_OF_DAY_NAMES
-
-#include "Common/INI.h"
-#include "Common/GameType.h"
-
-#include "GameClient/TerrainVisual.h"
-#include "GameClient/Water.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Water setting, note that this does not support override situations. As the water
- * system becomes more complex we may want to change this */
-//-------------------------------------------------------------------------------------------------
-void INI::parseWaterSettingDefinition( INI* ini )
-{
- AsciiString name;
- WaterSetting *waterSetting = nullptr;
-
- // read the name
- const char* token = ini->getNextToken();
-
- name.set( token );
-
- // get the water setting we want to load based on name
- const char *const *timeOfDayName = TimeOfDayNames;
- Int timeOfDayIndex = 0; // TIME_OF_DAY_INVALID
- while( timeOfDayName && *timeOfDayName )
- {
-
- if( stricmp( *timeOfDayName, name.str() ) == 0 )
- {
-
- waterSetting = &WaterSettings[ timeOfDayIndex ];
- break;
-
- }
-
- // next name
- timeOfDayName++;
- timeOfDayIndex++;
-
- }
-
- // check for no time of day match
- if( waterSetting == nullptr )
- throw INI_INVALID_DATA;
-
- // parse the data
- ini->initFromINI( waterSetting, waterSetting->getFieldParse() );
-
-}
-
-//-------------------------------------------------------------------------------------------------
-void INI::parseWaterTransparencyDefinition( INI *ini )
-{
- if (TheWaterTransparency == nullptr) {
- TheWaterTransparency = newInstance(WaterTransparencySetting);
- } else if (ini->getLoadType() == INI_LOAD_CREATE_OVERRIDES) {
- WaterTransparencySetting* wt = (WaterTransparencySetting*) (TheWaterTransparency.getNonOverloadedPointer());
- WaterTransparencySetting* wtOverride = newInstance(WaterTransparencySetting);
- *wtOverride = *wt;
-
- // Mark that it is an override.
- wtOverride->markAsOverride();
-
- wt->friend_getFinalOverride()->setNextOverride(wtOverride);
- } else {
- throw INI_INVALID_DATA;
- }
-
- WaterTransparencySetting* waterTrans = (WaterTransparencySetting*) (TheWaterTransparency.getNonOverloadedPointer());
- waterTrans = (WaterTransparencySetting*) (waterTrans->friend_getFinalOverride());
- // parse the data
- ini->initFromINI( waterTrans, TheWaterTransparency->getFieldParse() );
-
- // If we overrode any skybox textures, then call the W3D Water stuff.
- if (ini->getLoadType() == INI_LOAD_CREATE_OVERRIDES) {
- // Check to see if we overrode any skybox textures.
- // If we did, then we need to replace them in the model.
- // Copy/Paste monkeys PLEASE TAKE NOTE. This technique only works for the skybox because we
- // know that there will never be more than one sky box. If you were to use this technique for
- // technicals, for instance, it would make all technicals in the level have the same new
- // texture.
-
- const WaterTransparencySetting* wtOriginal = TheWaterTransparency.getNonOverloadedPointer();
- OVERRIDE wtOverride = TheWaterTransparency;
-
- if (wtOriginal == wtOverride)
- return;
-
- const AsciiString *oldTextures[5],*newTextures[5];
-
- //Copy current texture names into arrays
- oldTextures[0]=&wtOriginal->m_skyboxTextureN;
- newTextures[0]=&wtOverride->m_skyboxTextureN;
- oldTextures[1]=&wtOriginal->m_skyboxTextureE;
- newTextures[1]=&wtOverride->m_skyboxTextureE;
- oldTextures[2]=&wtOriginal->m_skyboxTextureS;
- newTextures[2]=&wtOverride->m_skyboxTextureS;
- oldTextures[3]=&wtOriginal->m_skyboxTextureW;
- newTextures[3]=&wtOverride->m_skyboxTextureW;
- oldTextures[4]=&wtOriginal->m_skyboxTextureT;
- newTextures[4]=&wtOverride->m_skyboxTextureT;
-
- TheTerrainVisual->replaceSkyboxTextures(oldTextures, newTextures);
- }
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIWeapon.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIWeapon.cpp
deleted file mode 100644
index 52006534e41..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIWeapon.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIWeapon.cpp ////////////////////////////////////////////////////////////////////////////
-// Author: Colin Day, November 2001
-// Desc: Parsing Weapon INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "GameLogic/Weapon.h"
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Weapon entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseWeaponTemplateDefinition( INI* ini )
-{
- WeaponStore::parseWeaponTemplateDefinition(ini);
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIWebpageURL.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIWebpageURL.cpp
deleted file mode 100644
index 59388d9f854..00000000000
--- a/Generals/Code/GameEngine/Source/Common/INI/INIWebpageURL.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-** Command & Conquer Generals(tm)
-** Copyright 2025 Electronic Arts Inc.
-**
-** 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 .
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// //
-// (c) 2001-2003 Electronic Arts Inc. //
-// //
-////////////////////////////////////////////////////////////////////////////////
-
-// FILE: INIWebpageURL.cpp /////////////////////////////////////////////////////////////////////////////
-// Author: Bryan Cleveland, November 2001
-// Desc: Parsing Webpage URL INI entries
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
-#include "PreRTS.h" // This must go first in EVERY cpp file in the GameEngine
-
-#include "Common/INI.h"
-#include "Common/Registry.h"
-#include "GameNetwork/WOLBrowser/WebBrowser.h"
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PRIVATE DATA ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-AsciiString encodeURL(AsciiString source)
-{
- if (source.isEmpty())
- {
- return AsciiString::TheEmptyString;
- }
-
- AsciiString target;
- AsciiString allowedChars = "$-_.+!*'(),\\";
- const char *ptr = source.str();
- while (*ptr)
- {
- if (isalnum(*ptr) || allowedChars.find(*ptr))
- {
- target.concat(*ptr);
- }
- else
- {
- AsciiString tmp;
- target.concat('%');
- tmp.format("%2.2x", ((int)*ptr));
- target.concat(tmp);
- }
- ++ptr;
- }
-
- return target;
-}
-
-//-------------------------------------------------------------------------------------------------
-/** Parse Music entry */
-//-------------------------------------------------------------------------------------------------
-void INI::parseWebpageURLDefinition( INI* ini )
-{
- AsciiString tag;
- WebBrowserURL *url;
-
- // read the name
- const char* c = ini->getNextToken();
- tag.set( c );
-
- if (TheWebBrowser != nullptr)
- {
- url = TheWebBrowser->findURL(tag);
-
- if (url == nullptr)
- {
- url = TheWebBrowser->makeNewURL(tag);
- }
- }
-
- // find existing item if present
-// track = TheAudio->Music->getTrack( name );
-// if( track == nullptr )
-// {
-
- // allocate a new track
-// track = TheAudio->Music->newMusicTrack( name );
-
-// } // end if
-
-// DEBUG_ASSERTCRASH( track, ("parseMusicTrackDefinition: Unable to allocate track '%s'",
-// name.str()) );
-
- // parse the ini definition
- ini->initFromINI( url, url->getFieldParse() );
-
- if (url->m_url.startsWith("file://"))
- {
- char cwd[_MAX_PATH] = "\\";
- getcwd(cwd, _MAX_PATH);
-
- url->m_url.format("file://%s\\Data\\%s\\%s", encodeURL(cwd).str(), GetRegistryLanguage().str(), url->m_url.str()+7);
- DEBUG_LOG(("INI::parseWebpageURLDefinition() - converted URL to [%s]", url->m_url.str()));
- }
-}
-
-
diff --git a/Generals/Code/GameEngine/Source/Common/MultiplayerSettings.cpp b/Generals/Code/GameEngine/Source/Common/MultiplayerSettings.cpp
index 41586135a21..34fda71f360 100644
--- a/Generals/Code/GameEngine/Source/Common/MultiplayerSettings.cpp
+++ b/Generals/Code/GameEngine/Source/Common/MultiplayerSettings.cpp
@@ -84,6 +84,8 @@ MultiplayerSettings::MultiplayerSettings()
m_showRandomColor = TRUE;
m_observerColor;
m_randomColor;
+
+ m_gotDefaultStartingMoney = false;
}
MultiplayerColorDefinition::MultiplayerColorDefinition()
@@ -139,6 +141,17 @@ MultiplayerColorDefinition * MultiplayerSettings::newMultiplayerColorDefinition(
return &m_colorList[numColors];
}
+void MultiplayerSettings::addStartingMoneyChoice( const Money & money, Bool isDefault )
+{
+ m_startingMoneyList.push_back( money );
+ if ( isDefault )
+ {
+ DEBUG_ASSERTCRASH( !m_gotDefaultStartingMoney, ("Cannot have more than one default MultiplayerStartingMoneyChoice") );
+ m_defaultStartingMoney = money;
+ m_gotDefaultStartingMoney = true;
+ }
+}
+
MultiplayerColorDefinition * MultiplayerColorDefinition::operator =(const MultiplayerColorDefinition& other)
{
m_tooltipName = other.getTooltipName();
diff --git a/GeneralsMD/Code/GameEngine/CMakeLists.txt b/GeneralsMD/Code/GameEngine/CMakeLists.txt
index e594d69ac80..aba5f3210ca 100644
--- a/GeneralsMD/Code/GameEngine/CMakeLists.txt
+++ b/GeneralsMD/Code/GameEngine/CMakeLists.txt
@@ -571,33 +571,33 @@ set(GAMEENGINE_SRC
Source/Common/GameMain.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
diff --git a/scripts/cpp/unify_move_files.py b/scripts/cpp/unify_move_files.py
index f76cde1c410..58ef0f26375 100644
--- a/scripts/cpp/unify_move_files.py
+++ b/scripts/cpp/unify_move_files.py
@@ -409,6 +409,30 @@ def main():
#unify_file(Game.ZEROHOUR, "GameEngine/Source/GameClient/SelectionInfo.cpp", Game.CORE, "GameEngine/Source/GameClient/SelectionInfo.cpp")
#unify_file(Game.ZEROHOUR, "GameEngine/Source/GameClient/Statistics.cpp", Game.CORE, "GameEngine/Source/GameClient/Statistics.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIAiData.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIAiData.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIAnimation.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIAnimation.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INICommandButton.cpp", Game.CORE, "GameEngine/Source/Common/INI/INICommandButton.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INICommandSet.cpp", Game.CORE, "GameEngine/Source/Common/INI/INICommandSet.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIControlBarScheme.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIControlBarScheme.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INICrate.cpp", Game.CORE, "GameEngine/Source/Common/INI/INICrate.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIDamageFX.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIDamageFX.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIDrawGroupInfo.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIGameData.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIGameData.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIMapCache.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIMapCache.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIMapData.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIMapData.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIMappedImage.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIMappedImage.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIModel.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIModel.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIMultiplayer.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIMultiplayer.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIObject.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIObject.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIParticleSys.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIParticleSys.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INISpecialPower.cpp", Game.CORE, "GameEngine/Source/Common/INI/INISpecialPower.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INITerrain.cpp", Game.CORE, "GameEngine/Source/Common/INI/INITerrain.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INITerrainBridge.cpp", Game.CORE, "GameEngine/Source/Common/INI/INITerrainBridge.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INITerrainRoad.cpp", Game.CORE, "GameEngine/Source/Common/INI/INITerrainRoad.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIUpgrade.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIUpgrade.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIWater.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIWater.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIWeapon.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIWeapon.cpp")
+ #unify_file(Game.ZEROHOUR, "GameEngine/Source/Common/INI/INIWebpageURL.cpp", Game.CORE, "GameEngine/Source/Common/INI/INIWebpageURL.cpp")
#unify_file(Game.ZEROHOUR, "GameEngine/Source/GameLogic/AI/AIPathfind.cpp", Game.CORE, "GameEngine/Source/GameLogic/AI/AIPathfind.cpp")
#unify_file(Game.ZEROHOUR, "GameEngine/Include/GameLogic/AIPathfind.h", Game.CORE, "GameEngine/Include/GameLogic/AIPathfind.h")