SECK 4.00 Savegame Editor Construction Kit THEORIE -------------------------------------------------------------------------------------------------------------------------- Wie verändert man Savegames ? -------------------------------------------------------------------------------------------------------------------------- Savegames lassen sich von Hand nicht einfach "mal eben so" verändern. Es handelt sich hier um binäre Dateien,die man nicht mit einem Texteditor (wie MS-DOS EDIT) oder anderen anzeigen,verändern und wieder speichern kann.Die Texteditoren sind für TEXTdateien zuständig, also Dateien im ASCII (American Standard Code for Information Interchange) Format. Um binäre Dateien zu modifizieren, benötigt man einen HEX-Editor. Dieser liest die Werte der Dateien ein und läßt Sie beliebige Manipulationen vornehmen, die Sie dann auch speichern können. Solche HEX-Editoren gibt es in Massen auf dem Shareware und Public - Domain Sektor.Sie kosten oftmals unter 20,- DM. SECK stellt Ihnen als Bonus ebenfalls einen HEX-Editor zur Verfügung. Haben Sie nun ein SAVEGAME vorliegen, so können Sie es in den HEX-Editor einlesen und sehen dann seinen "binären Gehalt". Angenommen, Sie wissen von einem Bekannten oder aus einer Spiele- Zeitschrift, in den SAVEGAMES des Spieles, welches sie gerade spielen und nicht weiter kommen, befindet sich an der Dateiposition 14227 der Wert für die Spielleben. Sie lesen also ihr SAVEGAME mittels eines HEX-Editors ein und bewegen sich darin - mittels den Befehlen des Editors - an die besagte Position. Dort steht beispielsweise der Wert 03.Und Sie erinnern sich, dieses war genau der Wert ihrer Spielleben, als Sie abgespeichert haben. Nun schreiben Sie an die Stelle eine 99. Sie speichern die Datei, verlassen den Editor, laden ihr Spiel und im Anschluß daran daß SAVEGAME. Und Sie sehen,es hat sich tatsächlich etwas getan - statt 3 Spielleben haben Sie nun 153. (Es kann aber durchaus auch sein,daß das Programm z.B. nur die hinterste Stelle anzeigt, weil es vielleicht nur bis 9 gedacht war!Es wäre somit denkbar,daß sie nur die 3 sehen, oder, bei zwei Stellen, nur die 53 !) Aber Sie haben doch eine 99 ins Savegame eingetragen ? Die Lösung besteht darin, daß in Hex-Editoren HEXADEZIMALE Zahlen eingegeben werden (Aha,daher der Name!). Diese haben normalerweise zur Erkennung ein $-Zeichen als Vorzeichen. Das HEXADEZIMAL System ist ein eigenes Zahlensystem, im Unterschied zu unserem gebräuchlichen DEZIMAL System oder dem DUALSYSTEM (nicht dualES System!!!). WENN SIE DAS HEXADEZIMALSYSTEM EINFACH EINMAL ALS GEGEBEN HINNEHMEN UND LIEBER SCHNELL WEITERLESEN MÖCHTEN, SO BLÄTTERN SIE BITTE WEITER BIS ZUR MARKIERUNG! HABEN SIE ABER INTERESSE DARAN, GENAUERES ZU ERFAHREN, SO LESEN SIE BITTE HIER WEITER ! Das HEXADEZIMAL System ist ein Zahlensystem mit der Basis 16. Das DEZIMAL System ist ein Zahlensystem mit der Basis 10. Das bedeutet: --------------------- Im DEZ. gibt es 10 Ziffern ( nämlich 0 bis 9) Im HEX. gibt es hingegen 16 "Ziffern" : 0-9 und A-F. Gezählt wird also : --------------------------- Im DEZ. : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... Im HEX. : $01 $02 $03 $04 $05 $06 $07 $08 $09 $0A $0B $0C $0D $0E $0F $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A $1B $1C $1D $1E ... Bei der Berechnung einer Zahl geht man vor wie folgt : -------------------------------------------------------------------------------- Wenn wir 1467 im DEZ.sagen, meinen wir eigentlich die folgende Rechnung : 1467 = 1*10^3 + 4 * 10^2 + 6 * 10^1 + 7*10^0 = 1*1000 + 4 * 100 + 6 * 10 + 7*1 = 1000 + 400 + 60 + 7 = 1467 Im HEX. steht nun überall statt 10^ eine 16^ ! Das heißt, wenn wir im HEX. $2912 sagen, so meinen wir eigentlich : $2912 = 2 * 16^3 + 9 * 16^2 + 1 * 16^1 + 2 * 16^0 Um nun eine HEX. Zahl in eine DEZ. Zahl umzuwandeln : HEX: DEZ: ------------ ------------- $2A4B = 2*16^3 + 10 *16^2 + 4 * 16^1 + 11 * 16^0 = 2*4096 + 10 * 256 + 4 * 16 + 11 * 1 = 8192 + 2560 + 64 + 11 = 10827 Um eine DEZ. Zahl in eine HEX. Zahl umzuwandeln : DEZ. HEX. ------------ ------------ 14488 = 3 * 16^3 + 8 * 16^2 + 9 * 16^1 + 8 * 16^0 = 3 * 4096 + 8 * 256 + 9 * 16 + 8 * 1 = $ 3898 SO, HIER GEHT ES NUN FÜR ALLE EINHEITLICH WEITER IM LESEN ! Allerdings können Sie sich das Umrechnen von Hand sparen, da nahezu jeder bessere wissenschaftliche Taschenrechner Zahlen aus den beiden Systemen in das jeweilige andere umsetzen kann.Und , richtig, auch SECK hat einen HEX/DEC Umwandler in seinem Repertoire ... Sie finden ihn im Menu Tools ! WICHTIG ist nur, daß sie stets daran denken,in den HEX - Editoren von vornherein (Grundeinstellung) immer HEX - Zahlen einzugeben. Möchten Sie also - um auf das obige Beispiel zurückzukommen - 99 Spielleben eintragen, so rechnen sie die (dezimale) 99 um und erhalten die (hexadezimale) $63 . Speicherten Sie den Wert in jenem fiktiven SAVEGAME, so würden Sie im Spiel 99 stehen haben! Eine Speicherzelle kann maximal Werte bis 255 aufnehmen (1 Byte!). Also kann es passieren, daß dies auch der Maximalwert für bestimmte Änderungen ist, wenn das Spiel selbst im SAVEGAME nur eine Speicherzelle (also 1 Byte) für den entsprechenden Wert vorsieht.Das ist in sofern vernünftig,weil der Programmierer nicht mehrere Stellen zu verschwenden braucht, hat er nur bsp. 5 Spielleben vorgesehen! Ein Byte kann aber wie gesagt nur werte von 0 - 255 aufnehmen. Stellt ein SAVEGAME hingegen zwei Speicherzellen zur Verfügung, können durchaus höhere Werte (z.B. Geldbeträge u.ä.) gespeichert werden. Dabei ergibt sich eine weitere Besonderheit: Bei zwei aufeinanderfolgenden Speicherzellen für einen Wert wird dieser im Format LOW-Byte und dann HIGH-Byte abgespeichert,zu deutsch NIEDERWÄRTIGES-Byte und HÖHERWERTIGES-Byte. (Puh,lieber LOW und HIGH!). Es gilt: Das HIGH-Byte ist um 256 mal "größer" als das LOW-Byte. Als Beispiel : Angenommen Sie wissen, daß bei einem SAVEGAME an den Positionen 157 und 158 der Geldbetrag, den Sie im Spiel zur Verfügung haben, gespeichert steht. Sie schauen sich die Stellen an und finden : in 157 eine $40 und in 158 eine $9C. Um den Betrag daraus ersehen zu können, wandeln sie die HEX .Werte zunächst in DEZ. Werte um : $40 = 64 $9C =156 Da $40 vor der $9C steht, ist also $40 das LOW-Byte und $9C das HIGH-Byte. Das heißt, der Geldbetrag, der später im Spiel aus diesen beiden Speicherzellen ausgeleses wird, lautet: 156 * 256 + 64 = 40000 HIGH LOW Wenn Sie sich nun 50000 geben wollen, müssen Sie diesen Wert entsprechend auf die zwei Stellen aufteilen : 50000 geteilt durch 256 ergibt 195.3125 Die Nachkommastellen werden ignoriert! Das HIGH-Byte lautet also 195. Dann bleibt für das LOW-Byte noch übrig : 50000 - 195 * 256 = 80. Somit lautet dieses also 80. Nun werden die DEZ. Werte wieder in HEX. Werte umgewandelt ... 195 = $C3 80 = $50 ... und in die Speicherzellen 157 und 158 in der Reihenfolge LOW-Byte und dann HIGH-Byte eingetragen. Also steht nach dieser (fiktiven) Veränderung in 157 eine $50 und in 158 eine $C3 !