Hallo
Also ich hab diesen Thread schon in das Civfanatic's Forum geradebrecht , aber ich hänge was technische Fragen angeht irgendwie an meiner Muttersprache (iss so schön einfach ), also poste ich das hier nochmal.
Ich habe meine XML-Dateien angepasst um die Weltgröße auf gigantisch setzen zu können. Was alles wunderbar funktioniert hat. Allerdings habe ich bei meiner bevorzugten Karte "Custom Continents" so einige Probleme mit dem Ergebnis dieser kleinen Anpassung.
Jedenfalls bekomme ich meist etwas wie ein verottetes Pangäa heraus. Eine massive Landmasse und evtl ein zwei Subkontinente die wie abgeschnitten wirken. Große Teile der Landmasse wirken zerfasert und so etwa wie gestreckte Inseln oder Fjorde.
Teilweise strotzt die Karte auch bei niedrigem Meeresspiegel vor gigantischen Binnenmeeren oder Seen.
Jedenfalls ist man entweder arm dran weil man auf einer der Inseln startet, oder auf einem der Kontinentschnipsel die zu allem Überfluß auch noch meist zur hälfte unwirtlich sind, oder man startet normal und erbaut Küstenstädte in dem glauben man hätte eine Verbindung zum offnenen Meer was meist nach hinten losgeht.
Jedenfalls kam mir die Idee das die Terra-Map ohne Einschränkung der Startposition und etwas "getuned" genau das sein könnte was mein Siedlerherz begehrt. Also habe ich mir die entsprechende terra.py Datei mal genauer angesehen, und mir kamen dabei ein paar Fragen.
Folgende Codezeilen erregen da meine Aufmerksamkeit:
Code:
def findStartingPlot(argsList):
[playerID] = argsList
def isValid(playerID, x, y):
map = CyMap()
pPlot = map.plot(x, y)
if (pPlot.getArea() != map.findBiggestArea(False).getID()):
return False
return True
return CvMapGeneratorUtil.findStartingPlot(playerID, isValid)
Ich habe zwar einige Erfahrung in Scriptsprachen und Programmiersprachen, was die Sache etwas einfacher macht, aber Python ging bisher irgendwie an mir vorbei. Allerdings erscheint mir an dieser Stelle der Hund begraben zu sein:
Code:
if (pPlot.getArea() != map.findBiggestArea(False).getID()):
return False
return True
return CvMapGeneratorUtil.findStartingPlot(playerID, isValid)
Was meiner Meinung nach folgendes bedeutet:
Nimm die geplante Startposition der Civilisation und untersuche ob sie sich auf der größten Landmasse befindet. Wenn ja mach weiter mit der Abfrage der Entfernungen zwischen den Civ-Startpositionen. Wenn nein, errechene eine neue Position und untersche diese. etcpp...
Da man die Funktion ja schlecht komplett auskommentieren kann, da ja nach dem Check der Entfernung zwischen den Civs wahrscheinlich wieder auf diese Funktion verwiesen wird, sollte es genügen den Rückgabewert bei nichtbestehen der Abfrage ebenfalls auf "True" zu setzen. Damit wären die Startpositionen nur noch von der Entfernung zueinander abhängig.
Stimmt das und kann das jemand bestätigen? Echt so simpel???
Was mich zu den andern Fragen führt.
Da ich die Weltgröße ja in den XML-Dateien bereits angepasst habe und die neue größe Gigantic existiert jedoch die Größenangaben im py-File ebenfalls angegeben sind, welche der Größenangaben hat priorität? Die hardgecodete im Pythonfile oder die in der XML-Datei? Oder werden beide irgendwie verrechnet? Falls ja wie?
Ich vermute das die Pythondatei priorität besitzt, ich aber in der py-Datei ebenfalls eine Angabe für gigantisch hinzufügen sollte, da das fehlen der Angabe dazu führt das die Größenangaben aus der XML-Datei genommen werden. Die jedoch entprechen bestimmt nicht der Vorlage für die Generierung
der Terra-Map was bestenfalls dann zu seltsamen Ergebnissen führt und schlimmstenfall zu ner Fehlermeldung mit Absturz.
Hat jemand vielleicht auf diese Fragen ein zwei Antworten? Das würde mir echt helfen. Ich werde es sowieso austesten, aber wenn jemand genaueres weis geht das vielleciht schneller als "Trial and Error".
Danke im vorraus.