Seite 1 von 4 1234 LetzteLetzte
Ergebnis 1 bis 15 von 52

Thema: [TAC] Bevölkerungswachstum und Nahrungsbilanz in Städten

  1. #1
    d73070d0
    Gast

    Post [TAC] Bevölkerungswachstum und Nahrungsbilanz in Städten

    Ich möchte eine kleine Änderung vorschlagen, die aus meiner Sicht die Spielbarkeit deutlich erhöht. Mir passiert es regelmäßig, daß eine Stadt mit Nahrungsdefizit und Nahrungsimporten plötzlich einen Kolonisten freisetzt, weil es nichts mehr zu essen gibt. Beispiel:

    * Stadt hat 110 Nahrung und verbraucht 8 pro Runde.
    * Dann kommt ein Konvoi und liefert 100 Nahrung ab. Die Stadt hat nun 210 Nahrung.
    * Im Rundenwechsel verbraucht die Stadt 8 Nahrung und erzeugt aus den übrigen 202 Nahrung einen Kolonisten. Der Nahrungsbestand im Lager ist nun zwei.
    * Bis zur nächsten Nahrungslieferung setzt die Stadt nun jede Runde einen Kolonisten frei, weil es nicht genug zu essen gibt. Das ist in höchstem Maße lästig.

    Ich habe im Kode gestöbert und entdeckt, daß die Dll anscheinend noch den Kode aus Civ enthält, der es erlaubt, beim Wachstum einer Stadt einen gewissen Mindestbestand an Nahrung übrig zu behalten (Nahrungslager). Die Änderung läßt sich mit simplen Änderungen an Xml-Dateien umsetzen:

    1. In der Datei Assets/XML/Buildings/CIV4BuildingInfos.xml wird für das Basislager eingetragen:

    Code:
    <iFoodKept>100</iFoodKept>
    2. In Assets/XML/GlobalDefines.xml wird eingetragen:

    Code:
    <Define>
    	<DefineName>BASE_CITY_GROWTH_THRESHOLD</DefineName>
    	<iDefineIntVal>300</iDefineIntVal>
    </Define>
    (Wobei ich nicht sicher bin, ob Eingeborenenstädte auch ein Basislager haben. Nötigenfalls muß man die erste Einstellung auch noch für ein Gebäude machen, das auch alle Dörfer enthalten.)

    Folge:

    * Wachstum findet erst bei 300 Nahrung statt.
    * Es werden weiterhin 200 Nahrung verbraucht, so daß beim Wachstum immer 100 Einheiten übrig bleiben.

    Die Werte sind natürlich beliebig veränderbar, indem man auf beide Zahlen denselben Wert addiert. Die einzig konkrete Änderung am Spielablauf ist, daß eine Stadt das erste Mal erst hundert Nahrungspunkte später wächst.

    (Ich habe das noch nicht ausprobiert.)

    --

    Die Kür wäre allerdings, wenn man die zurückzuhaltende Grenze einfach über die Import- Exporteinstellung selbst angeben kann, aber dafür sind Änderungen im C++-Kode nötig.

  2. #2
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von d73070d0 Beitrag anzeigen
    Ich möchte eine kleine Änderung vorschlagen, die aus meiner Sicht die Spielbarkeit deutlich erhöht. (...)
    Folge:
    * Wachstum findet erst bei 300 Nahrung statt.
    * Es werden weiterhin 200 Nahrung verbraucht, so daß beim Wachstum immer 100 Einheiten übrig bleiben.

    Die Werte sind natürlich beliebig veränderbar, indem man auf beide Zahlen denselben Wert addiert. Die einzig konkrete Änderung am Spielablauf ist, daß eine Stadt das erste Mal erst hundert Nahrungspunkte später wächst
    Finde ich auf Anhieb eine gute Idee! Das spart das lästige Mikromanagement, immer ein Auge auf Städte mit negativer Nahrungsbilanz haben zu müssen.
    Zitat Zitat von d73070d0 Beitrag anzeigen
    (Ich habe das noch nicht ausprobiert.)
    Mach das doch mal! Und wenn das sowohl bei den Rothäuten als auch bei den Bleichgesichtern klappt, dann sollten wir das umsetzen.

  3. #3
    d73070d0
    Gast
    Wie finde ich denn raus, ob es bei den Indianern klappt?

  4. #4
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von d73070d0 Beitrag anzeigen
    Wie finde ich denn raus, ob es bei den Indianern klappt?
    Indem du bei einer Indianernation in der Datei "CIV4CivilizationInfos.xml" den Wert bei "<bPlayable>0</bPlayable>" auf "1" setzt. Dann machst du ein Probespiel mit dieser Ureinwohnernation und checkst, welche Gebäude die haben, überlegst dir die notwendigen Änderungen und probierst sie anschließend aus.

  5. #5
    Registrierter Benutzer Avatar von Akropolis
    Registriert seit
    14.09.08
    Ort
    Naturschutzgebiet Mark Brandenburg
    Beiträge
    4.430
    Wächst eine Indiostadt? Wenn ja wie äußert sich das?

  6. #6
    d73070d0
    Gast
    Also, es funktioniert grundsätzlich, allerdings ein wenig anders als gedacht. Der Wert iFoodKept gibt keinen absoluten, sondern einen Prozentwert an (der muß natürlich auch für alle Nachfolgegebäude des Basislagers gesetzt werden, das hatte ich übersehen). Das dumme daran ist, daß bei x / (x + 200) eigentlich eine glatte Prozentzahl rauskommen soll. Das funktioniert aber nur für x = 50 und x = 200 und keinen Wert dazwischen. Es ist also möglich folgendes einzustellen:

    1) iFoodKept = 50, BASE_CITY_GROWTH_THRESHOLD = 250 => Nahrungsreserve 50, Kosten pro Siedler: 200 Nahrung
    2) iFoodKept = 100, BASE_CITY_GROWTH_THRESHOLD = 400 => Nahrungsreserve 200, Kosten pro Siedler: 200 Nahrung
    3) iFoodKept = 33, BASE_CITY_GROWTH_THRESHOLD = 298 => Nahrungsreserve 98, Kosten pro Siedler: 200 Nahrung

    Bei (1) ist mir die Reserve zu gering, bei (2) zu groß und bei (3) eine krumme Zahl, was an sich nicht schlimm, aber etwas irritierend ist.

  7. #7
    Registrierter Benutzer Avatar von Akropolis
    Registriert seit
    14.09.08
    Ort
    Naturschutzgebiet Mark Brandenburg
    Beiträge
    4.430
    Wie wird sichergestellt, dass die 200 nicht gleich wieder zu einem neuen Siedler verbraucht werden?

  8. #8
    d73070d0
    Gast
    Der Wert BASE_CITY_GROWTH_THRESHOLD erhöht die nötige Nahrungsmenge. Der Gebäudewert iFoodKept legt fest, wieviel vom Wert BASE_CITY_GROWTH_THRESHOLD nicht verbraucht wird, wenn ein Siedler entsteht. Also entsteht mit BASE_CITY_GROWTH_THRESHOLD = 300 ein Siedler erst bei 300 Nahrung, und mit iFoodKept = 33.33333 bliebe ein Drittel davon übrig, also 100, so daß der Siedler in der Summe wieder 200 kostet. Ganz so rund geht's leider nicht, weil iFoodKept keine Kommazahl sein kann.

    --

    Leider geht das mit den Indianerdörfern nicht so leicht, da die normalerweise keinerlei Gebäude besitzen. Kann man ein unsichtbares, nicht baubares Gebäude machen, mit dem jede Siedlung und jedes Dorf automatisch ausgestattet wird? Davon habe ich leider noch keine Ahnung.

  9. #9
    Zuförderst altvorder. Avatar von raedor
    Registriert seit
    20.03.03
    Ort
    Am Neckar.
    Beiträge
    1.893
    Durch BASE_CITY_GROWTH_THRESHOLD, wie es aussieht.

    /edit: Zu langsam.

    /edit2: Ist es vielleicht möglich den Code, der iFoodKept auswertet, umzuschreiben? Dann kann man sich diesen Rechenkrams sparen?

  10. #10
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    Zitat Zitat von d73070d0 Beitrag anzeigen
    Leider geht das mit den Indianerdörfern nicht so leicht, da die normalerweise keinerlei Gebäude besitzen. Kann man ein unsichtbares, nicht baubares Gebäude machen, mit dem jede Siedlung und jedes Dorf automatisch ausgestattet wird? Davon habe ich leider noch keine Ahnung.
    Ich kann mir gut vorstellen, dass es zukünftig mal TAC-Szenarien geben wird, in der es spielbare Ureinwohnernationen gibt. Deshalb fände ich es schön, wenn wir hier eine Lösung finden könnten, die nicht zu kompliziert ist und technisch nicht zu "tricky".

  11. #11
    d73070d0
    Gast
    So, ich hätte hier eine Änderung an CvCity.cpp:doGrowth(), die den Minimalwert für Nahrung aus der Import- Exportsteuerung beim Wachstum spielergeführter Städte berücksichtigt. Die KI braucht sowas nicht, weil sie einen solchen Mechanismus sowieso eingebaut hat. Wie komme ich jetzt an eine Dll, die diese Änderung gegenüber TAC-2.00 enthält?

    Code:
    	iDiff = foodDifference();
    
    	changeFood(iDiff);
    	changeFoodKept(iDiff);
    
    #if 1 /*!!!*/
    	int iGrowthThreshold = growthThreshold();
    	if (isHuman())
    	{
    		iGrowthThreshold += getMaintainLevel(YIELD_FOOD);
    	}
    #endif
    	setFoodKept(range(getFoodKept(), 0, ((iGgrowthThreshold * getMaxFoodKeptPercent()) / 100)));
    
    #if 1 /*!!!*/
    	if (getFood() >= iGrowthThreshold)
    #else
    	if (getFood() >= growthThreshold())
    #endif
    	{
    		if (AI_isEmphasizeAvoidGrowth())
    		{
    #if 1 /*!!!*/
    			setFood(iGrowthThreshold);
    #else
    			setFood(growthThreshold());
    #endif
    		}
    		else

  12. #12
    d73070d0
    Gast
    Hat keiner einen Tip für mich, was ich mit den Änderungen am c++-Kode jetzt anstelle?

  13. #13
    Zuförderst altvorder. Avatar von raedor
    Registriert seit
    20.03.03
    Ort
    Am Neckar.
    Beiträge
    1.893
    Schick WB ne Nachricht

  14. #14
    Talking Bull Avatar von Writing Bull
    Registriert seit
    01.10.08
    Beiträge
    21.376
    TAC-Test 0201 wird eine neue dll enthalten. Die liegt aber derzeit noch nicht vor. Sobald die dll da ist, stellen wir einen Tag später TAC-Test 0201 vor. Das wäre dann doch eine gute Gelegenheit für dich, mit der dll zu experimentieren, oder? Im Downloadpaket wird ein Ordner "TAC Dokumentation" enthalten sein, in dem ein Archiv "CvGameCoreDLL_TAC_2.01.zip" steckt.

    Nach dem Release der Testversion dauert es ja dann ohnehin noch ein Weilchen, bis die Version so glatt poliert wurde, dass daraus die nächste offzielle Version TAC 2.01 werden kann.

  15. #15
    d73070d0
    Gast
    Ich hatte eigentlich darauf gehofft, daß mir jemand sagt, wie ich selbst eine Dll bauen kann. Irgendwer muß das doch können.

Seite 1 von 4 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •