Code:
int CvTeam::getRebelPercent() const
{
PROFILE_FUNC();
int iRebelSentiment = 0;
for (int iPlayer = 0; iPlayer < MAX_PLAYERS; ++iPlayer)
{
CvPlayer& kPlayer = GET_PLAYER((PlayerTypes) iPlayer);
if (kPlayer.isAlive() && kPlayer.getTeam() == getID() && kPlayer.getParent() != NO_PLAYER && GET_PLAYER(kPlayer.getParent()).isAlive())
{
int iLoop;
for (CvCity* pCity = kPlayer.firstCity(&iLoop); pCity != NULL; pCity = kPlayer.nextCity(&iLoop))
{
iRebelSentiment += pCity->getRebelSentiment();
}
}
}
return std::max(0, std::min(100, (iRebelSentiment / std::max(1, getTotalPopulation()))));
}
So wie ich das sehe, wird erst die Variable iRebelSentiment aufaddiert und dann durch die Gesamtbevölkerung dividiert, wodurch sich sozusagen der Mittelwert, also der Wert für den Gesamtunabhängigkeitswillen einstellt.
Ein Blick in die getRebelSentiment() zeigt nicht viel: Es ist ein Wert pro Stadt der gespeichert wird und durch die Methode setRebelSentiment gesetzt werden kann.
Die Methode setRebelSentiment wird in 2 anderen Methoden aufgerufen, einmal in der CvCity::doRebelSentiment(), welche einmal pro Runde ausgeführt wird und einmal in einer "Cheat" Methode, die hier nicht weiter von Belang ist.
Hier wird ein TurnFactor (TF) berechnet. Dieser ist abhängig von einer Konstanten, welche über die XML definiert wird und dem Geschwindigkeitswert.
Hier steht dann folgende Formel:
neu = (Glockenproduktion * Glockengewicht)/ TF + alt * (1 - 1 / TF )
Wie wir sehen wird der neue Wert für RebelSentiment immer größer (wenn genug Glocken produziert werden) und pendelt sich dann irgendwann einmal ein, wenn alt = Glockenprod * Glockengewicht . Also ist es absolut möglich, dass eine Stadt die auf 100% steht weiterhin zur Erhöhung des Revolutionswillens beiträgt.
Interessant ist auch die Methode, welche den angezeigten Prozentwert der Stadt ausgibt. In dieser wird getRebelSentiment durch die Bevölkerungszahl geteilt. Man benötigt also 100 * Bevölkerungszahl an RebelSentiment, damit die Stadt auf 100% ist. Ein größerer Wert als 100% wird einfach nur noch als 100% dargestellt, egal wie hoch RebelSentiment inzwischen schon ist.
Also das was ich geschrieben habe gilt natürlich nur dann, wenn ich auf die schnelle nichts im Code übersehen habe.