インフレ率 = [iTurns] x [m] + [iTurns] x ([iTurns] -1) x [m] x [m] / 200
最大ターン数:何ターン経過すると終わるかの最大値で、先の時代から始めると小さくなる 表示ターン数:右上に表示されるターン数で、先の時代から始めると増加した状態で始まる 経過ターン数:ゲームスタートからのターン数で、先の時代から始めても1からカウント ゲーム速度のターン数補正:増加し始めるまでに余裕を持たせるための補正で、CIV4GameSpeedInfo.xmlの<iInflationOffset>(速度標準で-90%)
ゲーム速度のインフレ倍率:CIV4GameSpeedInfo.xmlの<iInflationPercent>(速度標準で30%) 難易度のインフレ倍率:CIV4HandicapInfo.xmlの<iInflationPercent> ランダムイベントによるインフレ倍率:ランダムイベントによってインフレが増減したときの補正
難易度のAIインフレ補正:CIV4HandicapInfo.xmlの<iAIInflationPercent> 難易度のAIの時代ごと補正:CIV4HandicapInfo.xmlの<iAIPerEraModifier> 現在の時代:太古 = 1から未来 = 7まで、時代が一つ進む毎に+1
Spoiler for Beyond the Sword Inflation:
int CvPlayer::calculateInflationRate() const
{
int iTurns = ((GC.getGameINLINE().getGameTurn() + GC.getGameINLINE().getElapsedGameTurns()) / 2);
if (GC.getGameINLINE().getMaxTurns() > 0) { iTurns = std::min(GC.getGameINLINE().getMaxTurns(), iTurns); }
iTurns += GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getInflationOffset();
if (iTurns <= 0) { return 0; }
int iInflationPerTurnTimes10000 = GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getInflationPercent(); iInflationPerTurnTimes10000 *= GC.getHandicapInfo(getHandicapType()).getInflationPercent(); iInflationPerTurnTimes10000 /= 100;
int iModifier = m_iInflationModifier; if (!isHuman() && !isBarbarian()) { int iAIModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIInflationPercent(); iAIModifier *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); iAIModifier /= 100;
iModifier += iAIModifier - 100; }
iInflationPerTurnTimes10000 *= std::max(0, 100 + iModifier); iInflationPerTurnTimes10000 /= 100;
// Keep up to second order terms in binomial series int iRatePercent = (iTurns * iInflationPerTurnTimes10000) / 100; iRatePercent += (iTurns * (iTurns - 1) * iInflationPerTurnTimes10000 * iInflationPerTurnTimes10000) / 2000000;
FAssert(iRatePercent >= 0);
return iRatePercent;
}
int CvPlayer::calculatePreInflatedCosts() const {
CyArgsList argsList; argsList.add(getID()); long lResult; gDLL->getPythonIFace()->callFunction(PYGameModule, "getExtraCost", argsList.makeFunctionArgs(), &lResult);
return (calculateUnitCost() + calculateUnitSupply() + getTotalMaintenance() + getCivicUpkeep() + (int)lResult);
}
int CvPlayer::calculateInflatedCosts() const {
int iCosts;
iCosts = calculatePreInflatedCosts();
iCosts *= std::max(0, (calculateInflationRate() + 100)); iCosts /= 100;
return iCosts;
}
コメントはありません。 Comments/ルールの詳細/計算式/インフレーション?