Typisierte Dateien in dieser Form sind eigentlich nicht so sehr üblich. In der Regel unterteilt man Daten in sog. "Chunks", also großere Abschnitte die durch irgendwelche Header-Strukturen eingeleitet werden. Eine andere Variante ist es die Offsets direkt mit einer Bedeutung zu belegen, was allerdings sehr statisch und unschön ist. Eine andere Möglichkeit ist es eine Art TOC (Tabel of Contents) im Header anzulegen, wo dann verzeichnet wird an welchem Offset welche Informationen zu finden sind.
Die Variante mit Chunks ist aber meiner Beobachtung nach recht beliebt, da sie sehr variabel ist, und sehr performant gestaltet werden kann. Innerhalb eines Chunks hat man es dann wiederum meist mit mehr oder minder statischen Strukturen zu tun. Oftmals ist es auch so, dass ein Datum allein auf Grund seiner Position relativ zu einem anderen Datum seine Bedeutung erst erhält. Sprich: Jemand (der Programmierer) definiert: 4 Bytes nach dem Wert für X, steht der Wert für Y. Sein Typ sei Integer.
Womit wir zum nächsten Kapitel kommen: Welcher Typ von Daten liegt überhaupt vor? In der Datei stehen einfach nur Werte. Wie sie zu interpretieren sind ist völlig unklar, solange man nicht die Spezifikationen hat. So kann ein Byte auch ein Char sein, oder nieder- oder höherwertiges Byte eines Words usw.. Apropos Byte-Wertigkeit: Little-Endian oder Big-Endian? Das ist die Frage! Da hilft dann oft nur eine Plausibilitätsprüfung - also wie interpretiert sieht der Wert
wahrscheinlich richtig aus?
Ein gut dokumentiertes Format dass in Chunks organisiert ist, ist das WAVE-Format (
www.wotsit.org). Daran erkennt man schnell, dass man ohne Doku nur sehr sehr schwer erkennen kann was was bedeutet.
Was du vor hast erfordert eine Menge an Erfahrung zu diversen Techniken in Sachen Datenverwaltung, eine Menge an Zeit, Frust-Resistenz
und akribische Kleinarbeit. Und dass man wirklich alles raus bekommt ist eher selten der Fall.
Ich will dir ja nicht den Wind aus den Segeln nehmen, aber schon darauf hinweisen dass das u.U. nichts wird. Auch die meisten Savegame-Editoren beschräken sich auf die Abschnitte die von Bedeutung sind, bzw. ergibt sich deren Funktionalität daraus, was man geschafft hat zu identifiziren. Der Rest wird schlicht missachtet.
Und wenn du jetzt einen GANZ gemeinen Programmierer hattest, dann werden Informationen in das gesamte File verteilt
. So könnte man ja einen Integer in seine 4 Bytes zerlegen, und diese irgendwo einsteuen, und vorher sogar umrechnen, so dass man den Wert als solchen garnicht mehr erkennt. In Spielen in denen Geld wichtig ist, könnte man z.B. einfach den Geldwert mit einer Formel verrechnen, so dass du, auch wenn du die richtigen Stellen im Savegame findest, den Wert darin nicht als deinen Geldbetrag wiedererkennst, da der ja eigentlich ganz anders war. Nur das originale Programm weiss was zu tun ist, um den Wert richtig zu interpretieren. Und schon hat man dich genatzt
.
Zum Glück aber machen sich wohl nicht viele die Arbeit dass so zu "verschlüsseln". Bei Games kann das aber durchaus schon mal sein, um Cheatern den Garaus zu machen (richtig so!).
Letztlich musst du es einfach mal probieren um abschätzen zu können wie umfangreich und kompliziert das ganze wird. Am besten ganz klein anfangen - z.B. bei einem Spiel den Ausgangszustand speichern, und dann einen Schritt nach vorne. Wieder speichern, und die Bits um die sich die beiden Savegames unterscheiden haben schon mal sehr wahrscheinlich etwas mit der Spielerposition zu tun.
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel