It is also important what version is used in the video, whether additional patches are installed. Because if you translate the addresses and try to find the approximate location of the error in the dat file, then nothing will work on version 3.0.14.
On 3.0.14, the last function has the value 2612459 (func void init_dragonisland() )
Whereas the error starts its way with 2648691 ?
Die Anleitung zum Verstehen von Skript-verwandten Access Violations ist hier sicher eine gute Idee, da du die Access Violation nicht selbst reproduzieren kannst.
In anderen Fällen, in denen du die Access Violation selbst reproduzieren kannst, kannst du einen Patch verwenden, den ich vor einiger Zeit mal geschrieben hatte. Ich hatte ihn nicht fertig gestellt. Geplant war, das Skript im Workaround-Helper mit aufzunehmen. Vielleicht ergibt sich ja noch einmal irgendwann die Gelegenheit. Auf die Gefahr hin, dass ich nie dazu komme, lohnt es sich nicht das Skript auf meinem Computer vergammeln zu lassen. Deshalb teile ich es mal hier.
Der Patch soll "Human Readable Access Violations" erstellen, wenn der Fehler seinen Ursprung in Daedalus hat. Besonders ausgereift und wirklich leserlich ist es noch nicht geworden und funktioniert glaube ich noch nicht richtig für Gothic 1. Ich habe jetzt auch nicht mehr reingeschaut und weiß nicht, wie sauber der Patch geschrieben ist. Ich glaube einiges war noch recht unsauber zusammen geworfen und die Byte-offsets innerhalb der Funktionen sind glaube ich falsch.
Im Grunde tut der Patch einfach nur was in der der oben verlinkten Anleitung steht. Er fügt die Symbolnamen in der AV hinzu - wie gesagt, bisher noch nicht so geschickt formatiert. Dabei ist zu bedenken, dass das eigentlich unsinnig ist, da Ikarus bereits einen "vollständigeren" Daedalus Stacktrace im zSpy ausgibt. Im Endeffekt ist der Patch also eher eine schlechtere Variante des Ikarus Stacktraces. Der Vorteil ist natürlich, dass man (einige der) Informationen direkt in der Access Violation sieht.
HRAV.vdf
Ich denke der Patch sollte stabil genug sein, um damit spielen zu können (zumindest G2). Das würde erlauben, dass AV-Screenshots von Spielern, dem Modteam auf Anhieb mehr sagen.
@mud-freak
Das Ding ist ja mal grandios für so ziemlich jede Mod!
Ikarus Stacktraces sind zwar super, aber nur die wenigsten Spieler, wenn überhaupt, schicken einen Ikarus Stacktrace aus dem zSpy ins Forum, sondern eher noch (ein Bild :/) einer AV.
ich werde den Patch definitiv "pflicht" für meine Tester machen in Zukunft, dann muss ich nicht mehr händisch alles durch parsen (wobei ich dafür inzwischen auch schon ein kleines hilfs-tool habe...), ist einfach netter direkt die Symbole sehen zu können
Spieler sagt er hat mit Version 304 gespielt (und das macht auch Sinn vom Datum her).
Wie N1kX schon schreibt,
Zitat von N1kX
It is also important what version is used in the video, whether additional patches are installed. Because if you translate the addresses and try to find the approximate location of the error in the dat file, then nothing will work on version 3.0.14.
On 3.0.14, the last function has the value 2612459 (func void init_dragonisland() )
Whereas the error starts its way with 2648691 ?
Letzte Funktion in 304_gothic.dat ist init_dragonisland (2598962)
hex: 27AE75
2600565
hex: 27AE75
2600565
hex: 27DD1C
2612508
hex: 27B5FF
2602495
hex: 27E7AA
2615210
hex: 286A73
2648691
Alle Zahlen sind höher als init_dragonisland (2598962). Absturz also in patch der Skriptcode hinten an hängt?
(leider weiß ich nicht mit welchen patches/plugins der Spieler gespielt hat)
Ich gehe davon aus das der Spieler mit 3010 gespielt hat (macht vom Datum her Sinn, und ist auch das einzige Kompilat wo die hex Zahlen als tokens findbar sind): DirtySwamp_3010_GOTHICdat.zip
Code:
hex: 1775
6005
V3010: mem_readint erste Zeile (pushv mem_readint.address
)
hex: 1775
6005
V3010: mem_readint erste Zeile (pushv mem_readint.address
)
hex: 4617
17943
V3010: str_toint erste zeile (pushv str_toint.str
)
hex: 15A11
88593
V3010: _pm_unarchive erste zeile (pushv ÿ10469, "=== PermMem::UnArchive ==="
)
hex: 25048
151624
V3010: _br_loadgame erste Zeile (call _br_getselectedslot)
hex: 27087
159879
V3010: lego_initalways erste Zeile (pushv lego_initalways.f)
hex: 274B7
160951
V3010: lego_init erste Zeile (pushv lego_init.flags)
Passt zum Absturz Zeitpunkt im Video (laden eines savegames), aber mir ist unklar wie es an der Stelle zu Problemen kommen kann.
Ich habe mich mal dran gesetzt, werde aber aus dem Ergebnis nicht so recht schlau:
...
Es ist praktisch Pflicht die Umgebung des Spielers zu kennen (verwendete Patches, Plugins, Ninja, Union, Systempack Version) damit du dieses ggf. nachstellen kannst.
zu 1 & 2. Sieht so aus, als würde ein Patch versuchen seine scriptsave zu laden und dabei abzustürzen.
In beiden Fällen kommen die Fehler von externen Patches die Probleme beim Laden haben. Ggf. ein Patch versucht beim Unarchiven von etwas bestimmte werte zu manipulieren oder anderes.