void CvInitCore::read(FDataStreamBase* pStream)
{
uint uiSaveFlag=0;
pStream->Read(&uiSaveFlag); // flags for expansion (see SaveBits)
// Reset selection group static caches on load
CvSelectionGroup::setGroupToCacheFor(NULL);
// BUG - Save Format - start
bool bugSaveFlag = uiSaveFlag & BUG_DLL_SAVE_FORMAT;
uiSaveFlag &= ~BUG_DLL_SAVE_FORMAT;
// RevolutionDCM - end BUG
CvTaggedSaveFormatWrapper& wrapper = CvTaggedSaveFormatWrapper::getSaveFormatWrapper();
// New save format or old?
if ((uiSaveFlag & GAME_SAVE_UI_FLAG_VALUE_TAGGED_FORMAT) != 0)
{
wrapper.reset(true);
}
else
{
wrapper.reset(false);
}
wrapper.AttachToStream(pStream);
WRAPPER_READ_OBJECT_START(wrapper);
// SVN rev of the build that did the save
m_svnRev = -1; // If save doesn't have the info
m_bRecalcRequestProcessed = false;
WRAPPER_READ(wrapper, "CvInitCore", &m_svnRev);
OutputDebugString(CvString::format("SVN Rev of save is %d\n", m_svnRev).c_str());
// Asset checksum of the build that did the save
m_uiSavegameAssetCheckSum = -1; // If save doesn't have the info
WRAPPER_READ(wrapper, "CvInitCore", &m_uiSavegameAssetCheckSum);
OutputDebugString(CvString::format("Asset CheckSum of save is %d\n", m_uiSavegameAssetCheckSum).c_str());
/************************************************************************************************/
/* MODULAR_LOADING_CONTROL 11/30/07 MRGENIE */
/* */
/* Savegame compatibility */
/************************************************************************************************/
int iNumSaveGameVector;
WRAPPER_READ_DECORATED(wrapper, "CvInitCore", &iNumSaveGameVector, "numModControlVectors");
// Empty the Vector
m_aszSaveGameVector.erase(m_aszSaveGameVector.begin(), m_aszSaveGameVector.end());
CvString szSaveGameVector;
for (int uiIndex = 0; uiIndex < iNumSaveGameVector; ++uiIndex)
{
WRAPPER_READ_STRING_DECORATED(wrapper, "CvInitCore", szSaveGameVector, "ModControlVector");
m_aszSaveGameVector.push_back(szSaveGameVector);
}
/************************************************************************************************/
/* MODULAR_LOADING_CONTROL END */
/************************************************************************************************/
// GAME DATA
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eType);
WRAPPER_READ_STRING(wrapper, "CvInitCore", m_szGameName);
WRAPPER_READ_STRING(wrapper, "CvInitCore", m_szGamePassword);
WRAPPER_READ_STRING(wrapper, "CvInitCore", m_szAdminPassword);
WRAPPER_READ_STRING(wrapper, "CvInitCore", m_szMapScriptName);
WRAPPER_READ(wrapper, "CvInitCore", &m_bWBMapNoPlayers);
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eWorldSize);
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eClimate);
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eSeaLevel);
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eEra);
m_eGameSpeed = NO_GAMESPEED;
WRAPPER_READ_CLASS_ENUM(wrapper, "CvInitCore", REMAPPED_CLASS_TYPE_GAMESPEEDS, (int*)&m_eGameSpeed);
if (m_eGameSpeed == NO_GAMESPEED) // Old savegame before gamespeed remapping
{
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eGameSpeed);
handleOldGameSpeed();
}
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eTurnTimer);
WRAPPER_READ(wrapper, "CvInitCore", (int*)&m_eCalendar);
SAFE_DELETE_ARRAY(m_aeCustomMapOptions);
WRAPPER_READ(wrapper, "CvInitCore", &m_iNumCustomMapOptions);
WRAPPER_READ(wrapper, "CvInitCore", &m_iNumHiddenCustomMapOptions);
if (m_iNumCustomMapOptions > 0)
{
m_aeCustomMapOptions = new CustomMapOptionTypes[m_iNumCustomMapOptions];
}
WRAPPER_READ_ARRAY(wrapper, "CvInitCore", m_iNumCustomMapOptions, (int*)m_aeCustomMapOptions);
SAFE_DELETE_ARRAY(m_abVictories);
WRAPPER_READ(wrapper, "CvInitCore", &m_iNumVictories);
if (m_iNumVictories > 0)
{
m_abVictories = new bool[m_iNumVictories];
WRAPPER_READ_ARRAY(wrapper, "CvInitCore", m_iNumVictories, m_abVictories);
}
// BUG - Save Format - start
if (bugSaveFlag)
{
// read and ignore number of game options as it's only for external tools
int iNumGameOptions = 0;
WRAPPER_READ_DECORATED(wrapper, "CvInitCore", &iNumGameOptions, "NUM_GAMEOPTION_TYPES");
}
// BUG - Save Format - end
/************************************************************************************************/
/* MODULAR_LOADING_CONTROL 11/30/07 MRGENIE */
/* */
/* Savegame compatibility */
/************************************************************************************************/
/*
if (uiSaveFlag > 0)
{
WRAPPER_READ(wrapper, "CvInitCore", NUM_GAMEOPTION_TYPES, m_abOptions);
}
else
{
WRAPPER_READ(wrapper, "CvInitCore", NUM_GAMEOPTION_TYPES-1, m_abOptions);
m_abOptions[NUM_GAMEOPTION_TYPES-1] = false;
}
*/
// Set options to default values to handle cases of loading games that pre-dated an added otpion
setDefaults();
WRAPPER_READ_CLASS_ARRAY_ALLOW_MISSING(wrapper, "CvInitCore", REMAPPED_CLASS_TYPE_GAMEOPTIONS, NUM_GAMEOPTION_TYPES, m_abOptions);
/************************************************************************************************/
/* MODULAR_LOADING_CONTROL END */
/************************************************************************************************/
WRAPPER_READ_CLASS_ARRAY(wrapper, "CvInitCore", REMAPPED_CLASS_TYPE_MPOPTIONS, NUM_MPOPTION_TYPES, m_abMPOptions);
WRAPPER_READ(wrapper, "CvInitCore", &m_bStatReporting);
WRAPPER_READ(wrapper, "CvInitCore", &m_iGameTurn);
WRAPPER_READ(wrapper, "CvInitCore", &m_iMaxTurns);
WRAPPER_READ(wrapper, "CvInitCore", &m_iPitbossTurnTime);
WRAPPER_READ(wrapper, "CvInitCore", &m_iTargetScore);
WRAPPER_READ(wrapper, "CvInitCore", &m_iMaxCityElimination);
WRAPPER_READ(wrapper, "CvInitCore", &m_iNumAdvancedStartPoints);
// PLAYER DATA
WRAPPER_READ_STRING_ARRAY(wrapper, "CvInitCore", MAX_PLAYERS, m_aszLeaderName);
WRAPPER_READ_STRING_ARRAY(wrapper, "CvInitCore", MAX_PLAYERS, m_aszCivDescription);
WRAPPER_READ_STRING_ARRAY(wrapper, "CvInitCore", MAX_PLAYERS, m_aszCivShortDesc);
WRAPPER_READ_STRING_ARRAY(wrapper, "CvInitCore", MAX_PLAYERS, m_aszCivAdjective);
WRAPPER_READ_STRING_ARRAY(wrapper, "CvInitCore", MAX_PLAYERS, m_aszCivPassword);