Ich hab mich letzte Nacht (2.00 bis 6.00 Uhr) in einem spontanen Anfall von Arbeitswut §grr mal damit auseinandergesetzt, wie ich Gothic 2 davon überzeugen kann, die brennende Fackel beim Waffe ziehen nicht fallen zu lassen...
Leider wäre das auf dem Skriptweg wenn überhaupt, dann meiner Ansicht nach nur recht umständlich und Fehler-/Buganfällig möglich...
Also hab ich mir mal die gothic2.exe näher angeschaut und mit Hilfe eines Debuggers einige Screenshots erzeugt, die im Anhang dieses Posts zu finden sind.
Die Fackel wurde dabei auf dem Engine-korrekten Weg einfach nicht gedroppt. Sie hat weiterhin geleuchtet und die Feueranimation blieb ebenso. Auch nach dem Wegstecken der Waffe blieb die Fackel in der linken Hand, es gab keine doppelten Fackeln, alle bereits genannten Effekte blieben bestehen und die Fackel stand dem linke-Hand-Bone nach wie vor bei allen Animationen treu zur Seite.
Was ich bislang noch nicht getestet habe aber dennoch problemlos Funktionieren sollte ist das Ausbrennen und das Unequipen der Fackel sowohl nach dem ziehen der Waffe als auch nach anschließendem Wegstecken der selbigen.
Damit ist für mich der "Proove of Concept" erbracht. Als nächstes folgt nun also der erste Prototyp, mit dem ich nun versuchen werde diese Modifikation ohne Debugger zu reproduzieren.
Und hier kommt ihr ins Spiel:
Sobald ich den ersten Prototypen fertiggestellt habe brauche ich einige Leute, die diese "Mod" auf Herz und Nieren prüfen und auf eventuelle Anzeigefehler oder gar Crashes prüfen.
Um den Prototypen dieser Mod zu testen müsst ihr:
Mir vertrauen, denn die erste Version des Prototypen wird eine Methode zur Manipulation des Arbeitsspeichers von der gothic2.exe verwenden, die oftmals in Viren/Malware verwendet wird. Deshalb werden die meisten Antivirenporgramme einen möglichen/"heuristischen" Treffer melden, welcher ignoriert werden muss
Bereit sein ausführliche Bugreports mit einer genauen Anleitung zur reproduktion des Bugs ggf. mit Screenshots zu Posten
History:
Code:
[06.08.2008] Prototyp Version 2.1 (release)
-Bugfix:
Fackel wird nurnoch beim ziehen von
Nahkampfwaffen (FIST, 1H, 2H) nicht fallen
gelassen (jetzt wirklich)
[06.08.2008] Prototyp Version 2.0 (release)
-Debugkonsole hinzugefügt
-Gothic 2 wird wegen der Debugkonsole im
Fenstermodus gestartet
-Fackel wird nurnoch beim ziehen von
Nahkampfwaffen (FIST, 1H, 2H) nicht fallen
gelassen
[05.08.2008] Prototyp Version 1.1 (release)
-Einige Sicherheitsabfragen hinzugefügt
-Die Mod sollte nun auch ohne eine vorherige
Installation des GothicStarters funktionieren
[04.08.2008] Prototyp Version 1 (intern)
-Fackel wird beim Ziehen einer Waffe im Stehen (!!!) nicht fallen gelassen.
Bekannte Fehler:
Wenn man im Laufen die Waffe zieht wird die Fackel doch fallen gelassen
Das Fackel Animationsoverlay wird beim Waffe ziehen überschrieben, wodurch die Fackel teils seltsam gehalten wird
Unser lieber r3AdY, vielen Dank an dieser Stelle nochmal, hat mal wegen der Rechtsfrage bei einem Mitarbeiter der Piranhas angefragt. Die Antwort war deutlich: Die PBs begrüßen jeden Moddingansatz, ganz gleich auf welchem Weg und JoWood wird sich auch nicht daran stören, solange es auf nicht kommerziellem Wege vertrieben wird.
Ich darf also nun meinen Prototypen öffentlich zum Download bereitstellen
- Vertrauen... Hab ich in dich ^^
- Report-Version... Saug ich mir gleich
- Bereit sein ausführliche Bugreports zu machen... Dürfte ich sein!
Freue mich aufs austesten!
greetz,
r3AdY!
grrrr.....R3ady is erster, naja ....ZWEITER!!!
Also ich kopier mal R3ady:
- Vertrauen... Hab ich zwar keins (du willst sicher nur mein Pc kaputt machn)
- Report Version hab ich glaub ich eh, weil ichs eh fürn Spacer brauch
- Ich hoffe du hast viel Zeit, um meinen Bugreport zu lesen wirst du die brauchn..
Freue mich aufs austesten!
greetz,
Watschn!
E//: AHHHH Marlus....was soll das? 1 Minute
E2//: Dein Post ist zu kurz! Ich beantrage, dass er aus dem Protokoll gestrichen wird. Milgo? Wärst du so nett? ^^ ! Damit wäre ich also zweiter!....Außerdem is DaDummy auf meiner Seite
Nun da ich gerade via PM gefragt wurde und sowieso dies ohnehin früher oder später offenlegen wollte hier eine ungeffähre übersicht, wie ich vorgegangen bin:
Zunächst habe ich die Engine (gothic2.exe) disassembliert, dabei darauf geachtet die im ersten Post genannte und verlinkte Report Version zu verwenden, da diese sog. Debuggingsymbole enthält.
Dann habe ich mir alle Funktionen/Methoden in der gothic2.exe rausgesucht, die das Wort "drop" beinhalten und habe mit einem Debugger geprüft welche von diesen aufgerufen wird, wenn man eine Waffe zieht.
So habe ich dann die Methode oCNpc::DoDropVob(class zCVob *) gefunden.
Anschließend habe ich mittels "schrittweiser Ausführung" die oCNPC::EV_DrawWeapon Methode (es gibt 3 davon) ermittelt in der diese Drop Methode aufgerufen wird und an welcher Stelle genau das passiert.
Nun habe ich einfach jedes Mal, wenn oCNPC::EV_DrawWeapon1(class oCMsgWeapon *) aufgerufen wurde an einer bestimmten Stelle in der Methode vor dem Aufruf der Dropmethode den Rückgabewert einer Funktion verändert und so der Engine fürr den Moment vorgegaukelt der NPC hätte kein Vob equipped, wodurch die Engine es dann auch nicht gedroppt hat.
Ich hoffe ich konnte mein Vorgehen für den allgemeinen Modder verständlich aber dennoch ausführlich genug für die, die näher mit diesem Thema vertraut sind, formulieren.
Ich habe dazu das Programm IDA Pro 4.9 verwendet.
Für weitere Details zum Thema Disassembling und Reverse Engineering verweise ich auf mit Google und Wikipedia auffindbare Tutorials sowie Fachliteratur, da dies sonst den Rahmen dieses Threads sprengen würde.
Edit:
Zitat von Dead Frank
Nette Idee.
Nur bist du die Sache leider falsch angegangen:
Änderung der Gothic.exe - illegal.
Korrigiert mich, wenn ich falsch liege, bin mir aber zu 99% sicher, dass WoG sowas nicht hosten wird.
PS: Es geht auch ohne diese .exe-ändeurngen. EIn wneig mit den Overlaymds rumzaubern, ein wenig scripten, und es geht
Ich verändere nicht die gothic2.exe selbst, sondern nur ein Abbildd davon, welches automatisch von Windows beim starten des Spiels im RAM erstellt wird.
Diese Fummelei mit den Overlaymds und den Skripten wollte ich eben auf diese Art umgehen, da es mir, wie ich im ersten Post schon geschrieben habe, zu Fehler-/Bugträchtig und unnötig kompliziert ist.
Sollte sich jedoch auch diese Methodik mit der EULA von Gothic 2 beißen, so werde ich von einer Veröffentlichung dieser "Mod" absehen, bis ich eine schriftliche Genehmigung der Piranhas habe, um die ich mich dann bemühen würde...
An dieser Stelle möchte ich auf die GothicMOD Lizenz verweisen. Mit entsprechendem Paragrafen versteht sich
Ich zitiere §3 (a):
Der Lizenznehmer hat das Recht, das Werk zu bearbeiten und das bearbeitete Werk nach Maßgabe
der Ziffer 2 zu nutzen. Dies umfasst die Befugnis das Werk zu kürzen, neue Bestandteile
hinzuzufügen, Teile des Werkes auszutauschen oder es auf andere Weise zu verändern. Das Werk
darf in einen anderen Kontext gestellt und seine Aussagen inhaltlich verändert werden.
Generell möchten die Piranhas mit dieser Lizenz erreichen, dass man wirklich frei Modden darf und nicht auf hinterlistige Klauseln stoßt.
Hab halt n bissl nachgelesen und bin bis jetzt auf nichts gestoßen was Dadummy's Handlung illegal macht.
Der Speicher, den Gothic 2 belegt (also der Speicher im Arbeitsspeicher) ist frei verfügbar und kann frei verändert werden. Wenn man nicht auf den Speicher zugreifen dürfte, dann wären so ziemlich alle Programme auf dem Rechner illegal, inkl. dem Betriebssystem.
§umleitung
Schade, dass es diesen "Wenn man keine Ahnung hat..." Smiley dank den vielen Flamern nicht mehr gibt...
Wenn er nicht eine modifizierte Gothic2.exe, sondern ein externes Programm, welches im Hintergrund laufend den Speicher manipuliert, veröffentlicht, dann wäre es legal.
Unser lieber r3AdY, vielen dank an dieser Stelle nochmal, hat mal wegen der Rechtsfrage bei einem Mitarbeiter der Piranhas angefragt. Die Antwort war deutlich: Die PBs begrüßen jeden Moddingansatz, ganz gleich auf welchem Weg und JoWood wird sich auch nicht daran stören, solange es auf nicht kommerziellem Wege vertrieben wird.
Ich darf also nun meinen Prototypen öffentlich zum Download bereitstellen