 
  ͻ
  TEXT               Savegame Editor Construction Kit                 TEXT
  ͹
  Thema : Wie verndert man Savegames ?                Datum : 20.10.1995 
  ͼ




  Savegames lassen sich "von Hand" nicht einfach "mal eben so" verndern.
  Es handelt sich hier um binre Dateien,die man nicht mit einem 
  Texteditor (wie MS-DOS EDIT) oder anderen anzeigen,verndern und wieder
  speichern kann.Die Texteditoren sind fr TEXTdateien zustndig, also
  Dateien im ASCII (American Standard Code for Information Interchange) 
  Format.
  
  
  
  
  Um binre Dateien zu modifizieren, bentigt man einen HEX-Editor.
  Dieser liest die Werte der Dateien ein und lt Sie beliebige
  Manipulationen vornehmen, die Sie dann auch speichern knnen.
  Solche HEX-Editoren gibt es in Massen auf dem Shareware und
  Public - Domain Sektor.Sie kosten oftmals unter 20,- DM.
  S.E.C.K. stellt Ihnen als Bonus ebenfalls einen HEX-Editor zur Verfgung.



  Haben Sie nun ein SAVEGAME vorliegen, so knnen Sie es in den 
  HEX-Editor einlesen und sehen dann seinen "binren 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 fr 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 tatschlich 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 wre somit
   denkbar,da sie nur die 3 sehen, oder, bei zwei Stellen, nur die 53 !)
  Aber Sie haben doch eine 99 ins Savegame eingetragen ?




  Das Problem besteht darin, da in Hex-Editoren  
  HEXADEZIMAL Zahlen eingegeben werden (Aha,daher der Name!).
  Diese haben normalerweise zu Erkennung ein $-Zeichen als Vorzeichen.
  
  Das HEXADEZIMAL System ist ein eigenes Zahlensystem, im Unterschied
  zu unserem gebruchlichen DEZIMAL System oder dem DUALSYSTEM 
  (nicht dualES System!!!).

  

   WENN SIE DAS HEXADEZIMALSYSTEM EINFACH EINMAL ALS GEGEBEN HINNEHMEN 
   UND LIEBER SCHNELL WEITERLESEN MCHTEN, SO BLTTERN 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 ( nmlich 0 bis 9)
  Im HEX. gibt es hingegen 16 "Ziffern" : 0-9 und A-F.


  Gezhlt 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 heit, 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 FR ALLE EINHEITLICH WEITER IM LESEN !
 
 >

 Allerdings knnen Sie sich das Umrechnen von Hand sparen, da nahezu jeder
 bessere wissenschaftliche Taschenrechner Zahlen aus den beiden Systemen
 in das jeweilige andere umsetzen kann.
 
 Es gibt auch eine Reihe Softwaretools, die das knnen.
 
 Bei S.E.C.K. gibt es in dem Unterprogramm HEX-EDITOR eine Anzeige 
 beider Formate, dem Hexadezimalen wie auch dem Dezimalen.


 

 WICHTIG ist nur, da sie stets daran denken,in den HEX - Editoren 
 von vornherein (Grundeinstellung) immer HEX - Zahlen einzugeben.
 Mchten Sie also - um auf das obige Beispiel zurckzukommen - 
 99 Spielleben eintragen, so rechnen sie die (dezimale) 99 um und
 erhalten die (hexadezimale) $63 .
 Speicherten Sie den Wert in jenem fiktiven SAVEGAME, so wrden 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 fr bestimmte
 nderungen ist, wenn das Spiel selbst im SAVEGAME nur eine Speicherzelle
 (also 1 Byte) fr den entsprechenden Wert vorsieht.Das ist in sofern 
 vernnftig,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 Verfgung, knnen 
 durchaus hhere Werte (z.B. Geldbetrge u..) gespeichert werden.
 Dabei ergibt sich eine weitere Besonderheit: 
 
 Bei zwei aufeinanderfolgenden Speicherzellen fr einen Wert wird dieser
 im Format LOW-Byte und dann HIGH-Byte abgespeichert,zu deutsch 
 NIEDERWRTIGES-Byte und HHERWERTIGES-Byte. (Puh,lieber LOW und HIGH!).
 Es gilt: Das HIGH-Byte ist um 256 mal "grer" 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 Verfgung 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 knnen, wandeln sie die HEX .Werte zunchst 
 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 heit, der Geldbetrag, der spter im Spiel aus diesen beiden 
 Speicherzellen ausgeleses wird, lautet:

                        156 * 256   +   64   = 40000
                           HIGH         LOW

 Wenn Sie sich nun 50000 geben wollen, mssen 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 fr 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) Vernderung in 157 eine $50 und in 158
 eine $C3 !






  
