Hallo Carl
Gratulation, da hast du ja den richtigen Riecher gehabt mit dem Schlepper.
Ich bin auch kein Programmierer, aber ich kann versuchen, hier meine Erfahrungen mit dem Hex Editing zu schildern. Ich nutze den Hex Workshop 4.2. Der FSX ist auf meiner Platte, aber ich nutze performancebedingt noch den FS9.
1. Editieren
In der Hex Datei sollten Werte nur überschrieben werden, nichts löschen oder hinzufügen. Die Länge der DLLs darf sich grundsätzlich nicht verändern. Der FS sucht vielleicht genau an einer bestimmten Hex Adresse in der sim1 nach einer Konstante und wenn sich alles verschiebt, findet er nur unsinnige Werte.
Die drei Leerschläge (Hex 00) hinter "Maule M7 260C" hätte man vermutlich mit Text füllen dürfen (nicht ausprobiert).
2. Datentypen
In der sim1 und z.T. in den AIR Files werden die Zahlenwerte v.a. als 32bit oder 64bit Double gespeichert. Das sind Gleitkommazahlen d.h. Werte mit vielen Nachkommastellen im Gegensatz zu Ganzzahlen (Integer). Der Hex Workshop enthält einen manuell zu bedienenden Konverter zwischen dem Dezimal- und dem Doublesystem. Wie das funktioniert gleich.
Doubles
Bsp. Die Zahl 10 als 64bit und 32bit Double dargestellt:
64bit:
00 00 00 00 00 00 24 40
32bit:
00 00 24 40 (die vordersten 4 Bytes des 64bit Doubles fallen weg)
Zwei Ziffern (z.B. 40) bilden jeweils ein Byte. Das hinterste Byte ist das wichtigste, das vorderste bestimmt lediglich die x. Stelle nach dem Komma. Der PC liest eigentlich von hinten nach vorne.
Wir suchen also Doubles. Folgende hinterste Bytes sind für uns wichtig, weil man damit einen Hinweis erhält, dass es sich um einen Doubletyp handeln könnte:
Hex Zahl (Dezimal)
00 = 0
01-3E = sehr winzige positive Zahlen (in der sim1 kaum anzutreffen)
3F = >0.0000305177 bis 1.9999
40 = 2 bis 131071
41 = 131072 bis 8.5 Mrd.
80-BE = sehr winzige negative Zahlen (in der sim1 kaum anzutreffen)
BF = >-0.0000305177 bis -1.9999
C0 = -2 bis -131071
C1 = -131072 bis -8.5 Mrd.
Wir halten also vor allem Ausschau nach 3F, 40, BF und C0. Das sind sehr viele und nur ein Teil davon sind Doubles. Leider lassen die sich nicht automatisch als solche identifizieren.
Aber man kann sich deren Dezimalwert mal anschauen. Bei runden oder fast runden Zahlen (z.B. 0.049998) ist es wahrscheinlich eine Flusi-Konstante. Eine nicht-runde Zahl könnte eine Winkelangabe in Radian sein (z.B. 0.034906 = 20 Grad). Dies muss man jeweils von Hand prüfen.
Beispiel 64bit Double:
FSX Sim1.dll
Hex-Position 00010320:
00 00 00 00 00 40 9F 40 00 00 00 00 00 40 7F 40
In der Hex-Ansicht (links) im Hex Workshop fährt man mit dem Cursor vor das erste der 8 Byte langen Hex-Zeichenkette (vor das erste fett markierte 00). Unten im Feld "Data Inspector" wird unter "64bit Double" der Dezimalwert von 500 angezeigt (keine Ahnung was dies bewirkt).
Um diesen Wert z.B. auf 600 zu erhöhen, muss ich zuerst den Double Wert kennen -> Menü Edit -> Find -> 64 Bit Double. Hier den Dezimalwert 600 eingeben und unten wird der Doublewert angezeigt (0000 0000 00C0 8240). Danach die Original-Hexwerte in der Datei einfach überschreiben.
Vor und nach dieser Zeichenkette stehen in unserem Beispiel noch weitere Doubles. Es existieren auchTabellen mit abwechselnd x und y Werten in der sim1.
Für 32bit Doubles gilt übrigens das gleiche, aber der Hex Workshop hat keine spezielle Funktion dafür. Man fährt mit dem Cursor ebenfalls vor die 8-Byte-Zeichenkette, aber eigentlich sind nur die hintersten 4 Bytes von Bedeutung. Das gibt kleine Rundungsfehler in der Data Inspector Anzeige, aber das ist okay.
Soviel für heute.
____________________________________
Grüsse,
Yves
|