Code:
//
// Set initial items (units, techs, etc...)
//
void CvGame::setInitialItems(bool bScenario)
{
PROFILE_FUNC();
for (int i = 0; i < MAX_PLAYERS; ++i)
{
if (GET_PLAYER((PlayerTypes)i).isAlive())
{
GET_PLAYER((PlayerTypes)i).AI_updateYieldValues();
}
}
// R&R, ray, Correct Geographical Placement of Natives - START
for (int i = 0; i < MAX_PLAYERS; ++i)
{
if (GET_PLAYER((PlayerTypes)i).isAlive() && GET_PLAYER((PlayerTypes)i).isNative())
{
//Player does not fit into Scenario
if (!((GC.getGame().isWBNorthAmericanNative() && GC.getCivilizationInfo(GET_PLAYER((PlayerTypes)i).getCivilizationType()).isNorthAmericanNative()) || (GC.getGame().isWBSouthAmericanNative() && GC.getCivilizationInfo(GET_PLAYER((PlayerTypes)i).getCivilizationType()).isSouthAmericanNative()) || (GC.getGame().isWBCentralAmericanNative() && GC.getCivilizationInfo(GET_PLAYER((PlayerTypes)i).getCivilizationType()).isCentralAmericanNative())))
{
bool playerShouldBeDeleted = true;
//Let us see, if we find an alternative Civ that does fit and has not been placed yet
for (int iCiv = 0; iCiv < GC.getNumCivilizationInfos(); iCiv++)
{
//Check if it would fit to Scenario
if ((GC.getGame().isWBNorthAmericanNative() && GC.getCivilizationInfo((CivilizationTypes)iCiv).isNorthAmericanNative()) || (GC.getGame().isWBSouthAmericanNative() && GC.getCivilizationInfo((CivilizationTypes)iCiv).isSouthAmericanNative()) || (GC.getGame().isWBCentralAmericanNative() && GC.getCivilizationInfo((CivilizationTypes)iCiv).isCentralAmericanNative()))
{
//Check if it was already placed
bool alreadyPlaced = false;
for (int x = 0; x < MAX_PLAYERS; x++)
{
if (GET_PLAYER((PlayerTypes)x).isAlive() && GET_PLAYER((PlayerTypes)x).isNative())
{
if (GET_PLAYER((PlayerTypes)x).getCivilizationType() == (CivilizationTypes)iCiv)
{
alreadyPlaced = true;
}
}
}
// So ok, we have found a Civ that fits
if (alreadyPlaced == false)
{
// We now choose the leader and replace the non matching Civ
int iLeader = -1;
for (int z = 0; z < GC.getNumLeaderHeadInfos(); z++)
{
if (GC.getCivilizationInfo((CivilizationTypes)iCiv).isLeaders(z))
{
iLeader = z;
}
}
if (iLeader != -1)
{
//assign matching color to Player
PlayerColorTypes iColor = (PlayerColorTypes)GC.getCivilizationInfo((CivilizationTypes)iCiv).getDefaultPlayerColor();
GC.getInitCore().setColor((PlayerTypes)i, iColor);
//assign new Leader to Player
GC.getInitCore().setLeader((PlayerTypes)i, (LeaderHeadTypes)iLeader);
//assign new Civ to Player
GC.getInitCore().setCiv((PlayerTypes)i, (CivilizationTypes)iCiv);
//activate slot for Player
GC.getInitCore().setSlotStatus((PlayerTypes)i, SS_COMPUTER);
//init
GET_PLAYER((PlayerTypes)i).init((PlayerTypes)i);
//we will not delete the player, because we can do replacement instead
playerShouldBeDeleted = false;
}
//do not continue looping through the civs
break;
}
}
}
//So ok, player does not fit and could not be replaced
if (playerShouldBeDeleted == true)
{
//Should be take out, but how
}
}
}
}
// R&R, ray, Correct Geographical Placement of Natives - END
if (!bScenario)
{
initFreeState();
}
updateOceanDistances();
if (!bScenario)
{
assignStartingPlots();
//normalizeStartingPlots();
assignNativeTerritory();
}
initFreeUnits();
initImmigration();
for (int i = 0; i < MAX_PLAYERS; ++i)
{
CvPlayer& kPlayer = GET_PLAYER((PlayerTypes)i);
if (kPlayer.isAlive())
{
kPlayer.AI_updateFoundValues();
}
}
}