Notiz
Der Mod-Loader ist nun in das Spiel integriert, sodass dieses Projekt nicht mehr benötigt wird. Die „offizielle“ Version mit Code für die neuen/anderen Funktionen finden Sie im folgenden fowkr https://github.com/jakobharder/anno1800-mod-loader
Der einzige Mod-Loader für Anno 1800, unterstützt das Laden entpackter RDA-Dateien, XML-Auto-Merging und DLL-basierte Mods.
Keine Dateigrößenbeschränkung. Kein Umpacken mehr. Weniger wahrscheinlich, dass es nach Updates kaputt geht (im Allgemeinen sollte ein Mod nach jedem Update weiter funktionieren, YMMV).
Dadurch werden die XML-Dateien des Spiels mithilfe von XPath geändert. Dies macht es einfach und möglich, nur die Änderungen in einem Mod vorzunehmen, die Sie unbedingt benötigen, anstatt Megabytes an XML-Dateien zu verarbeiten.
Kurzes, beschissenes Video, das zeigt, wie einfach es ist, den Lader zu installieren.
Mods müssen separat installiert werden.
Gehen Sie zur Release-Seite und laden Sie die Datei „loader.zip“ der neuesten Version herunter.
Entpacken Sie den Inhalt an den Speicherort von Anno1800.exe
Der Uplay-Standardpfad ist
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800BinWin64
Sie werden aufgefordert, python35.dll zu überschreiben. Akzeptieren Sie dies einfach.
Sie benötigen wahrscheinlich auch den VS 2019 Redist https://aka.ms/vs/16/release/VC_redist.x64.exe
Und das ist es im Grunde.
Mods werden immer in alphabetischer Reihenfolge geladen. Mods werden entweder geladen von:
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
unter Annahme des Standard-Uplay-Pfads. Dies hängt von dem Ort ab, den Sie bei der Installation von Anno 1800 gewählt habenmods
-Ordner enthält. Sie können darauf zugreifen, indem Sie Win + R verwenden und shell:PersonalAnno 1800
eingeben
mods
in „Dokumente“ haben Vorrang vor dem Installationsverzeichnis des Spiels. Wenn Sie also einenmods
Ordner im Ordner „Dokumente“ haben, werden Mods nicht mehr aus dem Spielverzeichnis geladen.
Für erfahrenere Benutzer werden mit
mklink
erstellte Symlinks befolgt (was zu einer einfacheren Möglichkeit führt, verschiedene Repositories von Mods zu verwalten).
Nachfolgend finden Sie eine kurze Einführung zur Mod-Erstellung mit dem Mod-Loader. Ein Beispiel für einen Zoom-Extend-Mod finden Sie im examples
.
In früheren Anno-Spielen gab es eine Möglichkeit, das Spiel anzuweisen, extrahierte Dateien von der Festplatte zu laden, anstatt sie selbst zu laden
aus dem RDA-Container. Das machte es zwar einfacher, ist aber immer noch keine gute Möglichkeit, große XML-Dateien zu modifizieren.
Dieser Anno 1800-Mod-Loader unterstützt ein paar einfache „Befehle“, um das XML einfach zu patchen, um so ziemlich alles zu erreichen, was Sie wollen.
Schritt 1) Richten Sie in Anno 1800/mods ein Verzeichnis für Ihre Mod ein. In den folgenden Schritten wird davon ausgegangen, dass Sie Ihr Verzeichnis „myMod“ betitelt haben.
Schritt 2) Innerhalb von myMod erstellen Sie die genaue Dateistruktur neu, die das Basisspiel verwendet. Eine gepatchte asset.xml-Datei müsste sich unter folgendem Pfad befinden: Anno 1800/mods/myMod/data/config/export/main/asset/assets.xml
Schritt 3) Ihr XML-Dokument sollte die folgende Struktur haben:
< ModOps >
< ModOp >
<!-- Whatever Change you want to do -->
</ ModOp >
</ ModOps >
Sie können so viele
<ModOp>
angeben, wie Sie möchten, und mehrere Patchdateien für verschiedene Originale in einem einzigen Mod haben.
Schritt 1) Suchen Sie nach dem XML-Knoten, den Sie mit XPath bearbeiten möchten, und wählen Sie ihn mithilfe des Path-Arguments aus.
Beispiel:
< ModOp Path = " /Templates/Group[Name = 'Objects']/Template[Name = 'Residence7']/Properties " >
Für die Assets-Datei können Sie auch das GUID-Argument verwenden. Dadurch werden alle untergeordneten Knoten des Assets mit der angegebenen GUID als neue Roots für Ihren xPath ausgewählt, um den Code sauberer zu machen, und die Leistung ist auch viel schneller.
Beispiel:
Standard way: < ModOp Path = " //Asset[Values/Standard/GUID = '1137']/Values/Standard/Name " >
Better, with GUID arg: < ModOp GUID = ' 1337 ' Path = " /Values/Standard/Name " >
Schritt 2) Geben Sie einen Typ für ein ModOp an, um den ausgewählten Knoten zu ändern.
Derzeit unterstützte Typen:
- Merge Replaces all given child nodes or Arguments
- Remove Removes the selected Node
- Add Adds inside the selected Node
- Replace Replaces the selected Node
- AddNextSibling Adds a sibling directly after the selected node
- AddPrevSibling Adds a sibling directly in front of the selected node
Dies war nur eine schnelle Erstimplementierung (~3 Stunden), sehr offen für Diskussionen darüber, wie man das verbessern oder etwas ganz anderes machen kann
Schritt 3) Fügen Sie den XML-Code hinzu, den Sie hinzugefügt, zusammengeführt oder als Ersatz im ModOp haben möchten. Beispiel:
< ModOp Type = " replace " GUID = ' 1337 ' Path = " /Values/Standard/Name " >
< Name >ThisIsATestNameForGUID1337</ Name >
</ ModOp >
Dieses ModOp ersetzt den Knoten unter /Values/Standard/Name des Assets mit GUID 1337 durch: „
<Name>ThisIsATestNameForGUID1337</Name>
“
Mithilfe Include
-Anweisungen können Sie Ihre XML-Patches in mehrere Dateien aufteilen.
< ModOps >
<!-- ModOps applied before the include -->
< Include File = " even-more-modops.include.xml " />
<!-- ModOps applied after the include -->
</ ModOps >
File
benötigt einen Dateipfad relativ zur XML-Datei, die das Include durchführt.
XML-Dateien ohne Gegenstück im Spiel sind in der Regel Fehler und führen zu Fehlern im Log. Um dies zu verhindern, verwenden Sie die Erweiterung *.include.xml
.
Ansonsten werden enthaltene XML-Patches genauso behandelt wie normale XML-Patches. Das Verschachteln von Includes wird unterstützt.
Legen Sie dies in einen Mod-Ordner mit dem Spielpfad, sodass dieser sich in mods/new-zoom-level/data/config/game/camera.xml
befindet
Der Mods-Ordner in einer Standard-uPlay-Installation muss sich unter
C:Program Files (x86)UbisoftUbisoft Game LaunchergamesAnno 1800mods
befinden
< ModOp Type = " add " Path = " /Normal/Presets " >
< Preset ID = " 15 " Height = " 140 " Pitch = " 0.875 " MinPitch = " -0.375 " MaxPitch = " 1.40 " Fov = " 0.56 " />
</ ModOp >
< ModOp Type = " merge " Path = " /Normal/Settings " >
< Settings MaxZoomPreset = " 15 " ></ Settings >
</ ModOp >
Weitere Beispiele finden Sie im examples
.
Debuggen wird nicht möglich sein, das Spiel verwendet Denuvo und VMProtect, ich habe meine eigenen Tools, die es mir ermöglichen, es zu debuggen, aber ich werde diese nicht öffentlich teilen.
Sie können in
Anno 1800/logs/mod-loader.log
ein printf, auch Debug-Log genannt, über alle Fehler lesen, die durch fehlende Knoten, falsche Pfade oder nicht erkannte Knotentests verursacht werden
Um zu testen, was ein von Ihnen geschriebener „Patch“ mit der Originalspieldatei macht, können Sie auch xml-test
verwenden, der simuliert, was das Spiel lädt.
xml-test game_camera.xml patch.xml
Dadurch wird game_camera.xml mit patch.xml gepatcht und das Ergebnis als patched.xml-Datei in das aktuelle Verzeichnis geschrieben
Der ursprüngliche Leerraum sollte weitgehend gleich sein, Sie können also ein Diff-Tool verwenden, um genau zu sehen, was sich geändert hat.
Andere Dateitypen können offensichtlich nicht „zusammengeführt“ werden, daher laden wir dort einfach die Version des letzten Mods, der diese Datei enthält. (Mods werden alphabetisch geladen). Für Ressourcen wird dringend empfohlen, den Ordner „Anno 1800/data“ zu verwenden.
Sie benötigen Bazel, Visual Studio 2022 und das sollte es sein.
Sie können azure-pipelines.yml
auschecken und sehen, wie es dort gemacht wird.
Einfache Schritte zum Erfolg:
set BAZEL_VC=C:Program Files (x86)Microsoft Visual Studio2022BuildToolsVC
bazel build //libs/python35:python35.dll
um die DLL zu erstellenWenn Sie an neuen Funktionen für XML-Operationen arbeiten möchten, können Sie xmltest zum Testen verwenden. Da dieser den gleichen Code wie der eigentliche Dateilader verwendet.