PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ändern einer Konstante im Spiel als "Einsteiger Mod Projekt"



Quantenirrwisch
02.09.2024, 00:59
Hallo Liebe Community,

ich habe heute angefangen eine Mod zu spielen, in der ich einen Weg , und dachte mir, um irgendwie in das Thema Modding reinzukommen, wäre es eine gute Idee, als kleineres Projekt einfach eine Konstante zu verändern.

Um garnicht um den heißen Brei herumzureden: Ich würde gerne die Manakosten (const int MagParade_Cost) der Magie-Parade in der aktuellen Gothic 2 Nostalgic Edition (3.1.8) für meinen eigenen Spielspaß etwas anpassen.
Mir ist klar, dass es an sich erstmal nicht so cool ist, in der Arbeit anderer Leute rumzupfuschen, allerdings ist Falugify wie ich es verstanden habe nicht mehr im Forum, und ich hab auch sonst keine Möglichkeit gesehen, ihn zu kontaktieren.
Da ich die Veränderung nur für meinen eigenen Spielspaß und als kleines Einstiegsmodprojekt machen möchte, denke ich zwar, dass es in Ordnung ist (mir einen Ninja-Patch zu installieren, ist nichts anderes), aber schreibt mir auch gerne, wenn ihr das anders seht.

Ich markiere im folgenden Text alle Stellen, an denen ich eine Frage habe mit einem :dnuhr:, und schreibe super ausführlich, weil ich gerne dokumentieren möchte, was ich schon alles gemacht habe, und welche Tools ich verwendet habe, sodass es für nachlesende Nachvollziehbar ist.


Als erstes hab ich versucht, die Konstante einfach mit dem GVE (https://www.worldofgothic.de/dl/download_388.htm) beziehungsweise dem GSE (https://www.worldofgothic.de/dl/download_628.htm) zu ändern, das war allerdings nicht möglich, weil die erwähnte Konstante eben eine KONSTANTE ist, und in diesen Editoren garnicht auftaucht.

Nächster Versuch: Dieser Thread (https://forum.worldofplayers.de/forum/threads/1566286-Selbstst%C3%A4ndig-Lernpunkte-pro-Level-anpassen-m%C3%B6glich) schlägt vor,

(Dateien der Mod entpacken, dekompilieren, Änderungen im Code durchführen, wieder kompilieren) Das hängt dann ein bisschen davon ab, wie komplex die Mod ist, ob das fehlerfrei klappt. Ich nehme einfach mal an, dass das nun die einfachste Möglichkeit ist, zu erreichen, was ich möchte - Stimmt das :dnuhr:1?

Also ich als nächstes mit gothicvdfs (https://wiki.worldofgothic.de/doku.php?id=gothicvdfs) die .vdfs Datei der Mod entpackt, und die Gothic.dat mit DecDat (https://forum.worldofplayers.de/forum/threads/1151032-Tool-DecDat) dekompiliert.
Ich bin mir nicht sicher, ob nicht bereits hier Fehler passiert sind, denn:

DecDat hat Fehler bei Conditional Statements:....
weißt da jemand was zu :dnuhr:2?
Die Export funktion von DecDat schreibt mir den Code dann in Dateien, abhängig davon, was ich in der Exportdefinition angegeben habe - Der Code ist also equivalent zum Orginal-Code, aber nicht in denselben Dateien drinnen -verstehe ich das richtig? Ich gehe davon aus, dass das beim erneuten Compilieren keine Rolle spielt - Stimmt das?:dnuhr:3

Um zu Modden habe ich mir ein zweites Gothic Verzeichnis gemacht (einfach das alte kopiert), in das ich dann das Mod-Kit (https://www.worldofgothic.de/dl/download_94.htm) und den Patch v2.6a (https://www.worldofgothic.de/dl/download_99.htm) installiert habe (falls es ein besseres Standartisiertes Vorgehen gibt, sagt es mir gerne :dnuhr:4).
Um die Dateien zu kompilieren hab ich dann den Gothic Sourcer 2.4 (https://www.worldofgothic.de/dl/download_234.htm) in mein Gothic Verzeichnis kopiert (ich habe hier (https://wiki.worldofgothic.de/doku.php?id=gothicsourcer) gelesen, dass er so verwendet wird.
Ich habe dann alle Dateien im _Work/Data/Scripts/Content Ordner gelöscht, mit meinen Dateien ersetzt, eine Gothic.src geschrieben, die auf eben jene Dateien zeigt, und versucht, mit dem Gothic Sourcer zu kompilieren - dabei passiert aber nichts.


Gleichzeitig legt dieser Thread zum Gothic Sourcer (https://forum.worldofplayers.de/forum/threads/1616823-Gothic-Sourcer?highlight=Gothic+Sourcer) nahe, dass es garnicht so einfach ist, Dateien zu kompilieren und dekompilieren, wenn Lego oder Ikarus verwendet werden. Ich habe zwar DecDat und nicht den Sourcer verwendet, allerdings hab ich beim Kompilieren ja wieder dasselbe Problem. Wenn ich jetzt also Quellcode habe, der Ikarus und Lego funktionen verwendet, dann muss ich dafür auch erstmal Lego und Ikarus ans laufen kriegen - Stimmt das :dnuhr:5?

Prinzipiell muss ich "nur" den neuen Code zu einer Gothic.dat kompilieren und die wieder verpacken - Aber kann ich die Gothic.src unabhängig von den anderen *.src einzeln zu einer Gothic.dat kompilieren (Ich bin naiv davon ausgegangen, dass ja) :dnuhr:6?



Da es jetzt alles nach sehr viel Aufwand klingt - mache ich mir das Leben unnötig schwer, und kann auch viel einfacherer erreichen, was ich möchte? Eine vorgeschlagene Alternative ist:

Theoretisch könnte die einfachste Methode sein, einen Patch (mit Ninja) zu erstellen, der periodisch den Wert von LP_PER_LEVEL setzt (z.B. in der .ini eingestellt), sofern diese Variable im Spiel / in der Mod existiert. Das ginge dann auch, wenn es Konstanten anstatt von Variablen sind, solange die genau diesen Namen haben[...]

Aber wäre das wirklich einfacher :dnuhr:7?

mud-freak
02.09.2024, 08:21
Hi! Um vielleicht gleich auf deinen ersten Satz einzugehen:


[U]m irgendwie in das Thema Modding reinzukommensolltest du wahrscheinlich am besten wo anders beginnen.

Das Dekompilieren einer Mod ist kein guter Einstiegspunkt. Auch wenn Selbststudium und Ausprobieren beim Modding sicherlich dazu gehört, empfehle ich den Einsteig über die zahlreichen Ressourcen, die zur Verfügung stehen. Hier einige Anhaltspunkte.


Einstieg für Neulinge im Editing FAQ
Editing Wiki (https://wiki.worldofgothic.de/doku.php)
Videotutorials von Fisk2033 (https://www.youtube.com/@Gothic2Mods/videos) (siehe ältere Videos)


PS: Der beste Einstieg ins Skripten ist meiner Meinung immer noch unangefochten das ursprüngliche Tutorial aus dem ModKit zu den "Liebenungen". Das ist im Gothic 1 ModKit (https://www.worldofgothic.de/dl/download_28.htm) zu finden unter "documents/tutorials/script/script-tutorial.htm" und auch als fertige Mod in der Downloadsektion (https://www.worldofgothic.de/dl/download_9.htm).

Quantenirrwisch
02.09.2024, 12:29
Hi! Um vielleicht gleich auf deinen ersten Satz einzugehen:

solltest du wahrscheinlich am besten wo anders beginnen.

Das Dekompilieren einer Mod ist kein guter Einstiegspunkt. Auch wenn Selbststudium und Ausprobieren beim Modding sicherlich dazu gehört, empfehle ich den Einsteig über die zahlreichen Ressourcen, die zur Verfügung stehen. Hier einige Anhaltspunkte.


Einstieg für Neulinge im Editing FAQ
Editing Wiki (https://wiki.worldofgothic.de/doku.php)
Videotutorials von Fisk2033 (https://www.youtube.com/@Gothic2Mods/videos) (siehe ältere Videos)


PS: Der beste Einstieg ins Skripten ist meiner Meinung immer noch unangefochten das ursprüngliche Tutorial aus dem ModKit zu den "Liebenungen". Das ist im Gothic 1 ModKit (https://www.worldofgothic.de/dl/download_28.htm) zu finden unter "documents/tutorials/script/script-tutorial.htm" und auch als fertige Mod in der Downloadsektion (https://www.worldofgothic.de/dl/download_9.htm).

Ich bin mir sicher, dass du es gut meinst, allerdings sind mir die meißten der Resourcen bekannt, die du genannt hast (das Video-Tutorial von Fisk kannte ich noch nicht, werde ich mir aber auch ansehen).
Vielleicht habe ich mich falsch ausgedrückt. Ich lieb-äugele mit dem Thema schon länger, und lese mir immer mal wieder Tutorials durch. Was Variablen, Konstanten, Funktionen, und eine Scriptsprache sind, weiß ich (im Moment verdiene ich mit Coden mein Geld), genauso, (modulo missverständnisse) was .d, .dat, .src Dateien sind, etc.

Wenn es spezifisch ans Gothic Modden geht ist dieses Wissen, da nie selbst angewendet, aber halt nicht frei von Missverständnissen, und der beste Weg, dem zu Begegnen, ist für mich, so spezifische Fragen wie möglich zu stellen, also ist das das, was ich getan habe.
Wenn du einen besseren Tipp hast, an genau diese Infos zu kommen, der das Forum weniger zumüllt, sag es gerne. Ich versuche, soviel es geht mit den Antworten zu arbeiten die es schon gibt, aber hier im Forum gestaltet sich das für mein Empfinden wegen der hakeligen SuFu als schwierig.

Ein persönliches Problem von mir ist, dass das Umsetzen konkreter Projekt-Ideen meine Movitation ist, Modden zu lernen - Ich hab es bisher nicht getan, weil ich nicht die Motivation hatte, etwas zu ändern. Es war ja alles gut.
Ich werde mir deinen Tipp zu Herzen nehmen, und erstmal versuchen, ein paar einfache Script-Änderung im Spiel zu implementieren. Allerdings glaube ich im Moment, dass ich früher oder später fast alle der Fragen, die ich gestellt habe, erneut stellen werde, weil ich ja ein ein bestimmtes Ziel habe.

Um darauf zurückzukommen, und diesmal 1 nach dem anderen: Auch wenn es gerade noch nicht meine Liga ist, und ich nicht direkt daran gehen werde: Mod Dekompilieren, Konstante ändern, und wieder kompilieren, oder alternativ einen Ninja-Patch zu erstellen, der die Konstante ändert, scheinen die einzigen beiden Wege zu sein, um das zu erreichen, was ich möchte - Oder liege ich hier auch falsch?

mud-freak
02.09.2024, 14:56
Sehr gut, danke für die Geduld. Mir war nicht bewusst, dass du dich schon mit dem Thema auseinander gesetzt hast.

Eine bestehende Mod zu ändern ist ohne Quellcode nicht einfach und in den meisten Fällen nicht erfolgreich. Der GothicSourcer stößt schnell an seine Grenzen, wenn Daedalus etwas "ausgereizt" wird und DecDat hat Probleme mit logischen Ausdrücken und dem eindeutigen Zuweisen von Instanz-IDs. Je nach Anwendung sind beide sehr wertvoll, aber nur zur Einsicht; ein Dekompilat wieder zu kompilieren ist heikel.

Daher ist für das Modden an Skripten immer das Modkit der Ausgangspunkt. Andere Programme als Gothic braucht man dann nicht (Gothic parst und "kompiliert" die Skripte beim Start mit dem ModStarter des ModKits).

Ich denke trotz starker Coding-Erfahrungen ist es dennoch sinnvoll anfangs einige Dialoge oder Quests zu erstellen, um selbst über die Eigenheiten von Daedalus zu stolpern, z.B. wie genau sich denn tatsächlich Konstanten und Variablen in Daedalus unterscheiden oder wie auch andere herkömmliche Konzepte wie Instanzen doch etwas anders funktionieren.


Zurück zu deiner Idee. Ich würde tatsächlich vorschlagen so eine Konstante oder ähnliche "Kennlern"-Änderungen an den Originalskripten als unbeschriebenes Blatt vorzunehmen. Dort hast du einen Quellcode, den auch andere sehr gut kennen, sodass es hier im Forum bei Fragen schneller geht. Andernfalls arbeitest du mit Dekompilaten, die nur schwer zum Laufen zu bringen sind und tückische logische Fehler provozieren, oder mit dem Quellcode einer Mod, der möglicherweise nicht so sauber geschrieben ist wie die Originalskripte und es schwierig macht Fehler auf deine Änderungen oder die Mod zurückzuführen.

Die letzte Alternative, für diese Absicht ist ein Skriptpatch oder Pluigin, das modulare Skriptänderungen erlaubt. Auch wenn es viel einfacher erscheint würde ich aber davon anfangs abraten, denn das Debugging ist dort um einiges schwieriger und es tut gut, vorher erste Erfahrungen mit der etwas speziellen Skriptsprache Daedalus zu sammeln. (Kurze Anmerkung: Ninja-Patches gibt es nicht mehr. Es sind einfache Patches oder ggf. Skriptpatches.)

Quantenirrwisch
08.09.2024, 11:14
Zurück zu deiner Idee. Ich würde tatsächlich vorschlagen so eine Konstante oder ähnliche "Kennlern"-Änderungen an den Originalskripten als unbeschriebenes Blatt vorzunehmen. Dort hast du einen Quellcode, den auch andere sehr gut kennen, sodass es hier im Forum bei Fragen schneller geht. Andernfalls arbeitest du mit Dekompilaten, die nur schwer zum Laufen zu bringen sind und tückische logische Fehler provozieren, oder mit dem Quellcode einer Mod, der möglicherweise nicht so sauber geschrieben ist wie die Originalskripte und es schwierig macht Fehler auf deine Änderungen oder die Mod zurückzuführen.

Die letzte Alternative, für diese Absicht ist ein Skriptpatch oder Pluigin, das modulare Skriptänderungen erlaubt. Auch wenn es viel einfacher erscheint würde ich aber davon anfangs abraten, denn das Debugging ist dort um einiges schwieriger und es tut gut, vorher erste Erfahrungen mit der etwas speziellen Skriptsprache Daedalus zu sammeln. (Kurze Anmerkung: Ninja-Patches gibt es nicht mehr. Es sind einfache Patches oder ggf. Skriptpatches.)

Die Konstante die ich ändern möchte kommt eben nur in der Mod vor. Aber ich werde als ersten Schritt erstmal generell schauen, wie einfach es ist, eine Konstante zu verändern, die im Orginalspiel vorkommt.