Da es schwer ist, alle Wünsche in ein einziges Modpack zu verpacken, hätte ich es etwas in die Richtung versucht, einen ModLoader zur Verwaltung der Mods zu erstellen. Ziel ist es, nicht für jedes Pack (oder Karte mit Spieländerungen) einen eigenen Installer mitzubringen. Vielmehr wäre es sinnvoller, nur die Informationen über die Änderungen mit zuliefern und die Verwaltung von einem eigenen Programm übernehmen zu lassen.
Dies hat den Vorteil, dass nur ein einziges Programm die Veränderungen des Spieles kontrolliert und so Problemen und Konflikten verschiedener Änderungen entgegenwirkt. Der Installer einer Map muss ebenfalls nicht viel mehr mitliefern, außer eventuell den ModLoader, der aber separat oder on-demand heruntergeladen werden sollte, um nicht mehr Traffic und Speicherplatz als nötig zu verbrauchen.
Der ModLoader wäre in der Lage, das ganze Spiel mit einem (oder mehreren) Modpacks generell zu verändern. Ich persönlich glaube weniger daran, dass große Modpacks entstehen, da die Karten dafür ausgerichtet sein müssten. Realistischer sehen ich aber die Entstehung von Einzelkarten mit ein paar wenigen, überschaubaren Änderungen (ModKarten).
Dieses Dokument gibt nur meine Grundüberlegungen wieder, also ohne Details und genauen Lösungsmöglichkeiten. Vorgestellt hatte ich mir folgende Funktionen:
- Starten vom gewohnten Standardspiel (ohne Mods). Standardkarten sind sichtbar, ModKarten nicht.
- Auswahl einer bestimmten Karte zum Spielen, die Änderungen enthält. Nur diese eine Karte ist sichtbar.
- Auswahl eines Modpacks. Alle Karten sind sichtbar (?) oder Karten, die dieses Pack referenzieren.
In der game.ini
gibt es die Einträge use_data_file_?
, wobei das ?
von 0 bis 9 durchprobiert wird.
Als einziges Argument wird ein String erwartet, der den relativen Pfad zu einer .lib
im $gameroot$
anzeigt.
Wenn die Angegeben Datei nicht gefunden wird, dann wird der Standardwert DataX\Libs\data000?.lib
benutzt (wobei ?+1 genommen wird).
Bei einem Standardstart würde der ModLoader use_data_file_0
auf dem Standardwert belassen.
Bei einer Karte, die Mods mitliefert und so die anderen Karten nicht anzeigt, müssen weitere Vorkehrungen getroffen werden. Für "Userkarten" (int und ext) müsste nur der data\maps
und usermaps
umbenannt werden und beim Beenden wieder rückgängig gemacht werden.
Für die Karten, die schon enthalten sind, würde der ModLoader beim ersten Start die einige .lib
laden und eine Version ohne Karten nutzen (also use_data_file_0
darauf umschreiben).
Für zusätzliche Inhalten könnten die anderen 1-9 Zahlen verwendet werden, nur ist mir das Verhalten bei Duplikaten nicht bekannt.
Da das Spiel sowieso unkomprimierte Daten aus data
einliest, würde sich dort die Karte normal unterbringen lassen. Da aber dies das Management mit den vorher verschobenen anderen Karten potentiell erschwert, würde es sich anbieten, eine Mod-Karte als .lib
zu verpacken und einfach nur in der game.ini
use_data_file_1
umzuschreiben. So könnte auch zwischen mehreren Maps schnell hin- und hergewechselt werden.
Um nicht komplette Spieldateien mit nur kleinen Änderungen mitliefern zu müssen, würde es sich anbieten, die Änderungen im unified-diff-format in die Karte zu verpacken, die dann vom ModLoader zusammen mit den Originalinhalten zum Mod zusammengebaut werden. So wie es aktuell ist, wären die dann als .ini
im data
Verzeichnis, was aber auch jedes Mal für jeden Kartenwechsel wieder geändert werden müsste.
Im Idealfall könnte dies dann auch zusammen in die oben erwähnte use_data_file_1
geschrieben werden, um die Dateien von
use_data_file_0
zu ersetzen. Dazu müsste aber das Verhalten bei Duplikaten bekannt sein.
Die game.ini
stellt auch noch start_map
und start_campaign_3_screen
bereit. Mit start_map
ist es möglich, direkt eine spezielle Karte zu starten, ohne durch das Hauptmenü klicken zu müssen. Als Argument der Pfad zu einer Karte erwartet. Dieser kann sowohl relativ ("data\maps\PoC") als auch absolut ("E:\Spiele\Weltwunder\data\maps\PoC").
Es sieht aber so aus, als wäre nur eine Verzeichnisangabe (enpackte Karte; oder intEdi) möglich und keine Datei (extEdi). Dies ist aber leicht zu umgehen, indem diese einfach ausgepackt wird.
Die Karte wird im Standardschwierigkeitsgrad (Normal) geladen.
Um die Änderungen der Spieldateien einfach verpacken zu können, könnte der ModLoader direkt mit den geänderten Spieldateien arbeiten und auf Basis der Originaldateien die Diffs erstellen.