void CvMapGenerator::addUniqueImprovements()
{
CvPlot* pPlot;
int iBestValue = 0;
int iValue = 0;
int iChance = GC.getDefineINT("IMPROVEMENT_UNIQUE_CHANCE") + GC.getWorldInfo(GC.getMapINLINE().getWorldSize()).getUniqueFeatureChance();
CvPlot* pBestPlot = NULL;
for (int iI = 0; iI < GC.getNumImprovementInfos(); iI++)
{
if (GC.getImprovementInfo((ImprovementTypes)iI).isUnique())
{
iBestValue = 0;
pBestPlot = NULL;
if (GC.getGameINLINE().getMapRandNum(100, "Unique Improvements") < iChance)
{
for (int iJ = 0; iJ < GC.getMapINLINE().numPlotsINLINE(); iJ++)
{
pPlot = GC.getMapINLINE().plotByIndexINLINE(iJ);
FAssert(pPlot != NULL);
if (pPlot->canHaveImprovement((ImprovementTypes)iI))
{
if (pPlot->getBonusType(NO_TEAM) == NO_BONUS)
{
iValue = GC.getGameINLINE().getMapRandNum(10000, "Unique Improvements");
if (iValue > iBestValue)
{
iBestValue = iValue;
pBestPlot = pPlot;
}
}
}
}
if (pBestPlot != NULL)
{
pBestPlot->setImprovementType((ImprovementTypes)iI);
if (GC.getImprovementInfo((ImprovementTypes)iI).getSpawnUnitType() != NO_UNIT)
{
if (!GC.getGameINLINE().isOption(GAMEOPTION_NO_BARBARIANS))
{
GET_PLAYER(BARBARIAN_PLAYER).initUnit(((UnitTypes)GC.getImprovementInfo((ImprovementTypes)iI).getSpawnUnitType()), pBestPlot->getX(), pBestPlot->getY());
}
}
}
}
}
}
}