g_DidSpawn = Modding.OpenSaveData();
GameEvents.PlayerDoTurn.Add(function(ePlayer)
for ePlayer, pPlayer in ipairs(Players) do if pPlayer:IsEverAlive() and not pPlayer:IsAlive() and not g_DidSpawn.GetValue(ePlayer) then
local CivilizationType;
if pPlayer:IsMinorCiv() then
CivilizationType = GameInfo.MinorCivilizations[pPlayer:GetMinorCivType()].Type;
else
CivilizationType = GameInfo.Civilizations[pPlayer:GetCivilizationType()].Type;
end;
if GameInfo.Civilization_SpawnDates[CivilizationType].StartYear then
local PlayerStartYear = GameInfo.Civilization_SpawnDates[CivilizationType].StartYear;
if Game.GetGameTurnYear() >= PlayerStartYear then
print("Spawning: " .. CivilizationType .. " (Year ".. PlayerStartYear .. ")");
g_DidSpawn.SetValue(ePlayer, 1);
local pStartPlot = pPlayer:GetStartingPlot();
if pStartPlot then
if pStartPlot:GetPlotCity() == nil then
pPlayer:InitCity(pStartPlot:GetX(), pStartPlot:GetY(), 1, 0);
LuaEvents.IskaCityFounded(ePlayer, pStartPlot:GetX(), pStartPlot:GetY());
else
local pCity = pStartPlot:GetPlotCity();
pPlayer:AcquireCity(pCity, 0, 0);
pCity = pPlayer:GetCapitalCity();
pCity:SetNumRealBuilding(GameInfoTypes["BUILDING_COURTHOUSE"], 1);
pCity:SetPuppet(0);
end;
pPlayer:ChangeGold(250);
if GameInfo.Civilization_SpawnDates[CivilizationType].NoFreeTech ~= 1 then
for pTech in GameInfo.Technologies() do
if GameInfo.Eras[pTech.Era].ID < Game.GetCurrentEra() then
Teams[pPlayer:GetTeam()]:GetTeamTechs():SetHasTech(pTech.ID, true, ePlayer, false, false);
end;
end;
end
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType1 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType1].Type]); end;
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType2 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType2].Type]); end;
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType3 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType3].Type]); end;
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType4 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType4].Type]); end;
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType5 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType5].Type]); end;
if GameInfo.Civilization_SpawnDates[CivilizationType].UnitType6 then pPlayer:AddFreeUnit(GameInfoTypes[GameInfo.Units[GameInfo.Civilization_SpawnDates[CivilizationType].UnitType6].Type]); end;
if ePlayer == 0 and not (Game.IsOption(GameOptionTypes.GAMEOPTION_AI_ONLY)) then
Game.SetActivePlayer(0);
PreGame.SetSlotStatus(pPlayer, SlotStatus.SS_TAKEN)
end;
else
print(CivilizationType .. " was not assigned a StartPlot.");
end;
end;
end;
end; end;
end);
Events.SequenceGameInitComplete.Add(function()
for Victory in GameInfo.Victories() do
PreGame.SetVictory(Victory.ID, false);
end;
for ePlayer, pPlayer in ipairs(Players) do
if pPlayer:IsAlive() and ePlayer ~= 63 then
local CivilizationType;
if pPlayer:IsMinorCiv() then
CivilizationType = GameInfo.MinorCivilizations[pPlayer:GetMinorCivType()].Type;
else
CivilizationType = GameInfo.Civilizations[pPlayer:GetCivilizationType()].Type;
end;
print("Looking up Civilization_SpawnDates for CivilizationType " .. CivilizationType .. "...");
if GameInfo.Civilization_SpawnDates[CivilizationType].StartYear then
local PlayerStartYear = GameInfo.Civilization_SpawnDates[CivilizationType].StartYear;
if Game.GetGameTurnYear() < PlayerStartYear then
if (pPlayer:IsMinorCiv()) then
print(GameInfo.MinorCivilizations[pPlayer:GetMinorCivType()].Type .. " Despawned | Spawn Date: " .. PlayerStartYear);
else
print(GameInfo.Civilizations[pPlayer:GetCivilizationType()].Type .. " Despawned | Spawn Date: " .. PlayerStartYear);
end
if pPlayer:IsHuman() then
Events.LoadScreenClose();
Game.SetPausePlayer(-1);
Game.SetAIAutoPlay(999);
end;
for pUnit in pPlayer:Units() do
pUnit:Kill();
end;
end;
end
end;
end;
end);