Wie genau die Einheiten geladen werden, weiß ich auch nicht. Es wird eben diese Funktion aufgerufen:
Code:
oid CvUnit::read(FDataStreamBase* pStream)
{
// Init data before load
reset();
uint uiFlag=0;
pStream->Read(&uiFlag); // flags for expansion
pStream->Read(&m_iID);
pStream->Read(&m_iGroupID);
pStream->Read(&m_iHotKeyNumber);
pStream->Read(&m_iX);
pStream->Read(&m_iY);
pStream->Read(&m_iLastMoveTurn);
pStream->Read(&m_iReconX);
pStream->Read(&m_iReconY);
pStream->Read(&m_iGameTurnCreated);
pStream->Read(&m_iDamage);
pStream->Read(&m_iMoves);
pStream->Read(&m_iExperience);
pStream->Read(&m_iLevel);
pStream->Read(&m_iCargo);
pStream->Read(&m_iCargoCapacity);
pStream->Read(&m_iAttackPlotX);
pStream->Read(&m_iAttackPlotY);
pStream->Read(&m_iCombatTimer);
pStream->Read(&m_iCombatFirstStrikes);
if (uiFlag < 2)
{
int iCombatDamage;
pStream->Read(&iCombatDamage);
}
pStream->Read(&m_iFortifyTurns);
//Kathy beginn Slave Hunter
pStream->Read(&m_iSlaveHunterCount);
//Kathy end Slave Hunter
pStream->Read(&m_iBlitzCount);
pStream->Read(&m_iAmphibCount);
pStream->Read(&m_iRiverCount);
pStream->Read(&m_iEnemyRouteCount);
pStream->Read(&m_iAlwaysHealCount);
pStream->Read(&m_iHillsDoubleMoveCount);
pStream->Read(&m_iImmuneToFirstStrikesCount);
pStream->Read(&m_iExtraVisibilityRange);
pStream->Read(&m_iExtraMoves);
pStream->Read(&m_iExtraMoveDiscount);
pStream->Read(&m_iExtraAirRange);
//Kathy beginn Paratrooper Promotion
pStream->Read(&m_iExtraDropRange);
//Kathy End Paratrooper Promotion
pStream->Read(&m_iExtraIntercept);
pStream->Read(&m_iExtraEvasion);
pStream->Read(&m_iExtraFirstStrikes);
pStream->Read(&m_iExtraChanceFirstStrikes);
pStream->Read(&m_iExtraWithdrawal);
pStream->Read(&m_iExtraCollateralDamage);
pStream->Read(&m_iExtraBombardRate);
pStream->Read(&m_iExtraEnemyHeal);
pStream->Read(&m_iExtraNeutralHeal);
pStream->Read(&m_iExtraFriendlyHeal);
pStream->Read(&m_iSameTileHeal);
pStream->Read(&m_iAdjacentTileHeal);
pStream->Read(&m_iExtraCombatPercent);
pStream->Read(&m_iExtraCityAttackPercent);
pStream->Read(&m_iExtraCityDefensePercent);
pStream->Read(&m_iExtraHillsAttackPercent);
pStream->Read(&m_iExtraHillsDefensePercent);
pStream->Read(&m_iRevoltProtection);
pStream->Read(&m_iCollateralDamageProtection);
pStream->Read(&m_iPillageChange);
pStream->Read(&m_iUpgradeDiscount);
//Kathy Beginn WorkRate-Promotion
pStream->Read(&m_iExtraWorkRate);
//Kathy End WorkRate-Promotion
pStream->Read(&m_iExperiencePercent);
pStream->Read(&m_iKamikazePercent);
//Kathy Beginn Eifer
pStream->Read(&m_iReligiousBonus);
//Kathy End Eifer
pStream->Read(&m_iBaseCombat);
pStream->Read((int*)&m_eFacingDirection);
pStream->Read(&m_iImmobileTimer);
/************************************************************************************************/
/* Afforess Start 08/20/10 */
/* */
/* Advanced Automations */
/************************************************************************************************/
pStream->Read(&m_iSleepTimer);
/************************************************************************************************/
/* Afforess END */
/************************************************************************************************/
pStream->Read(&m_bMadeAttack);
pStream->Read(&m_bMadeInterception);
pStream->Read(&m_bPromotionReady);
pStream->Read(&m_bDeathDelay);
pStream->Read(&m_bCombatFocus);
// m_bInfoBarDirty not saved...
pStream->Read(&m_bBlockading);
if (uiFlag > 0)
{
pStream->Read(&m_bAirCombat);
}
pStream->Read((int*)&m_eOwner);
pStream->Read((int*)&m_eCapturingPlayer);
//Kathy Beginn Original Owner
pStream->Read((int*)&m_eOriginalOwner);
//Kathy End Original Owner
pStream->Read((int*)&m_eUnitType);
FAssert(NO_UNIT != m_eUnitType);
m_pUnitInfo = (NO_UNIT != m_eUnitType) ? &GC.getUnitInfo(m_eUnitType) : NULL;
pStream->Read((int*)&m_eLeaderUnitType);
pStream->Read((int*)&m_combatUnit.eOwner);
pStream->Read(&m_combatUnit.iID);
pStream->Read((int*)&m_transportUnit.eOwner);
pStream->Read(&m_transportUnit.iID);
pStream->Read(NUM_DOMAIN_TYPES, m_aiExtraDomainModifier);
pStream->ReadString(m_szName);
pStream->ReadString(m_szScriptData);
pStream->Read(GC.getNumPromotionInfos(), m_pabHasPromotion);
pStream->Read(GC.getNumTerrainInfos(), m_paiTerrainDoubleMoveCount);
pStream->Read(GC.getNumFeatureInfos(), m_paiFeatureDoubleMoveCount);
pStream->Read(GC.getNumTerrainInfos(), m_paiExtraTerrainAttackPercent);
pStream->Read(GC.getNumTerrainInfos(), m_paiExtraTerrainDefensePercent);
pStream->Read(GC.getNumFeatureInfos(), m_paiExtraFeatureAttackPercent);
pStream->Read(GC.getNumFeatureInfos(), m_paiExtraFeatureDefensePercent);
pStream->Read(GC.getNumUnitCombatInfos(), m_paiExtraUnitCombatModifier);
}
Die Daten werden also der Reihe nach wie sie hier stehen ausgelesen, als erstes die "Flag" (was immer das ist) und dann die ID. Wann diese Funktion wie aufgerufen wird, weil ich auch nicht. Daraus würde ich schließen, dass man nicht irgendwelche IDs ausschließen kann, weil die erst dann geladen werden. Eventuell (irgendwie muss es ja) gibt es noch einen weiteren Identifizierer, der die einzelnen Einheiten-Objekte im Save markiert, damit sie einer nach dem anderen aufgerufen werden. So tief bin ich in der Materie aber auch nicht drin.