1. TIPPS ZUM ENTSCHLÜSSELN VON RCT3 DATEN
von Markus Lomberg, Entwickler von CTRs
Version 01 (08.Dez.2009)
In diesem Dokument gebe ich einige Tipps für User, die beim Entschlüsseln von RCT3
Daten helfen wollen. Die Tipps sind meist in loser Reihenfolge aufgeführt.
Voraussetzungen und Vorbereitungen
• benötigt wird folgende Software
o RCT3 (möglichst ohne AddOns, was einfacher zu entschlüsseln ist – siehe
Abschnitt „Grundsätzliches“)
o ein einfacher Texteditor (z.B. Notepad/Editor, Wordpad)
o ein einfacher Hexeditor
o ein Taschenrechner (z.B. Calculator in Windows) zum Umrechnen von Hex- in
Dezimalzahlen
o bis auf RCT3 sind alle Tools gratis und frei herunterladbar
• ferner benötigt man viel Geduld, einige Zeit zum Rumprobieren und ein schlaues
Köpfchen fürs Knobeln
• User, die Programme zum Entschlüsseln und später zum Erstellen von Daten (wie
Importer und CTR_Creator) schreiben wollen, benötigen natürlich
Programmierkenntnisse und die entsprechende Programmiersoftware (z.B. C++)
• beim Entschlüsseln modifiziert man probeweise die originalen RCT3-Dateien, welche
danach eventuell nicht mehr funktionieren. Deshalb empfiehlt es sich, vorab
Sicherheitskopien der Daten zu machen.
Grundsätzliches
• RCT3 verwendet hauptsächlich „Overlay“ Dateien (.ovl), welche immer als
zusammengehörendes Paar (.common.ovl und .unique.ovl) vorliegen. Gelegentlich
werden auch „Data“ Dateien (.dat) verwendet, z.B. bei gespeicherten Parks.
• die Strukturen in RCT3 Dateien ohne AddOns sind einfacher zu entschlüsseln; die
Strukturen in den AddOns sind komplizierter, beinhalten dafür aber auch interessantere
Spezialfunktionen im Spiel
• Ich vergleiche das Entschlüsseln gerne mit dem Lesen eines fremdsprachigen Textes,
z.B. Griechisch. Zunächst sollte man beim versuchen, den groben Aufbau von Strukturen
zu erkennen, z.B. Abschnitte und darin enthaltene Sätze im griechischen Text. Dann
schaut man in eine Struktur hinein, aus welchen Einzelteilen sie aufgebaut ist, z.B. findet
man in einem Satz die einzelnen griechischen Wörter. Jedes Wort besteht aus
aneinandergereihten Buchstaben und hat einen Sinn, entsprechend gehören einige
aneinandergereihte Bytes zusammen und haben eine bestimmte Funktion, welche durch
Ausprobieren zu entschlüsseln ist. Falls diese Erklärung zu kompliziert war, so kann man
mal einen Blick auf untenstehende Entschlüsselungsbeispiele werfen.
• im Laufe der Zeit wird man sich ein paar Begriffe aus der Informatik aneignen müssen
(siehe untenstehender Abschnitt)
• Die prinzipielle Vorgehensweise beim Erforschen von OVLs und anderen RCT3 Daten ist
wie folgt:
Man schaut sich den Hexcode an und versucht Zusammenhänge durch Rätseln und
geschicktes Kombinieren (erfordert schlaues Köpfchen fürs Knobeln), oder aber durch
2. gezieltes Rumprobieren (erfordert viel Geduld und Zeit) herauszufinden – siehe
untenstehende Entschlüsselungsbeispiele. Damit wurde die Funktion eines kleines
Datenstücks entschlüsselt (quasi ein griechisches Wort übersetzt). Auf diese Art kann
man stückweise eine ganze Struktur erforschen (quasi einen Abschnitt im griechischen
Text). Als Ziel gilt, schließlich alle in den Daten befindlichen Strukturen zu kennen (quasi
komplette Übersetzung des Griechischen).
• Es ist ratsam, ein automatisches Entschlüsselungs-Programm zu schreiben, welches die
bereits erforschten, bekannten Datenstücke und deren Funktionen kenntlich macht und
auflistet, wodurch die weitere Arbeit an den noch unbekannten Teilen vereinfacht wird.
o Ein solches Entschlüsselungs-Programm stellt eine rechtliche Grauzone dar
(siehe „Reverse Engineering“ im RCT3-Lizenzabkommen), weshalb es nur für
private Zwecke verwendet und nicht allen RCT3-Usern weltweit zugänglich
gemacht werden sollte. Wenn man nur eigene Parkdateien, CSOs, CTRs,
CFRs und ähnliche selbst erstellte Daten mit dem Programm analysiert, dann
ist das natürlich absolut legal.
o Beim Entschlüsselungs-Tool wäre ein modularer Aufbau (womit ich jetzt nicht
Module im strengen Sinn der Informatik meine!) sehr empfehlenswert. Damit
könnten dann die von mithelfenden Usern neu zugelieferten Daten einfach ins
Programm eingebunden werden. Und die User könnten die jeweils neusten
Modulpakete downloaden und in ihr Entschlüsselungs-Tool einfügen.
Desweiteren sollten die aktuellen Stände der Module in einer Datenbank
verfügbar sein, um zu sehen, was alles bereits erforscht und was noch zu
entschlüsseln ist.
• Sobald nach Wochen oder Monaten des Erforschens große Teile der Strukturen bekannt
sind, kann man beginnen, ein Tool zu programmieren, welches neue OVLs mit diesen
Strukturen und eigenen Werten schreibt (wie Importer oder CTR_Creator).
• Die .ovl und .dat Dateien sind mit einem einfachen Texteditor nur begrenzt lesbar (wie im
Bild „Adriane J“ und „Ramondo G“). Der große Rest mit wichtigen Zahlenwerten sieht im
Texteditor wie ein chaotischer Buchstabensalat aus.
Genaugenommen sind allein die Strings verständlich (also Namen und Texte, siehe
untenstehenden Abschnitt mit diesem Begriff aus der Information), welche sich vor allem
3. am Dateibeginn in Form von sogenannten Deklarationen befinden.
• Einzig und allein mit einem Hexeditor sind die Daten und Zahlen korrekt lesbar und
entschlüsselbar. Wie man im folgenden Bild sieht, sind besteht der ansonsten chaotische
Buchstabensalat aus einzelnen Zahlenwerten, die alle ihre eigene, wichtige Funktion
haben.
4. Im untenstehenden Bild, einem Entschlüsselungsbeispiel, sieht man beispielsweise,
dass die Zahlen (in gelben Kästen) der Länge des folgenden Textes entsprechen. Dies
hab ich dadurch enträtselt, dass ich mir die beiden Bytes zwischen dem roten und blauen
Kasten anschaute und nach Kombinationen und Verbindungen zu anderen Daten suchte.
Ferner weiß ich nun, dass „InWater“ nur die Werte 1 oder 0 annehmen kann (bool) und
5. dass „LevelOfDetail“ Werte zwischen 0 und 255 besitzt.
Entschlüsseln von gespeicherten Parkdateien
• Die Parkdateien befinden sich unter "/Eigene Dateien/RCT3/Campaigns" (Szenario-
Modus) bzw. "/Eigene Dateien/RCT3/Parks" (Sandkasten-Modus).
• Wenn man alle Begriffe am Anfang der Parkdatei mal durchgeht, dann sieht man, was
alles für jeden Peep im Park abgespeichert wird. Dies ist unter anderem:
Name des Peeps, Typ (Geschlecht, Kind/Teen/Erwachsener), Aussehen (Kleidung),
Position x/y/z-Koordinaten, Blickrichtung in x/y/z-Ausrichtungsvektor, Eigenschaften
(Übelkeit, Bahnintensität usw.), Verhalten (Warten, Gehen, usw.), Durst, Hunger, Geld,
vorhandene Gegenstände in den Händen und vieles mehr.
• Am Ende der Datei befinden sich die ganzen Peeps mit Namen und Eigenschaften. Ich
habe mit dem Peep-Editor einen eigenen Peep namens "Markus" erstellt, den ich in der
Parkdatei finde, wenn ich sie mit einem Texteditor öffne und nach "M a r k u s" suche.
Entsprechend kann ich jeden Peep auch in der Hexdatei finden. Alle Zahlen zwischen
dem beispielhaften Eintrag „Adriane J“ und „Raymondo G“ legen Eigenschaften und
7. • Am Beispiel von Peep „Adriane J“ im Hexeditor zeige ich mögliche Ansätze für die
Entschlüsselung der Zahlenwerte:
o Über sinnvolles Kombinieren der Zahlenwerte aus dem Spiel mit den
Zahlenwerten im Hexeditor kann man die Position der Zahl für eine bestimmte
Funktion finden. z.B. hat Adriane im Spiel 57 Euro, sodass man im Hexeditor
nach 57 sucht und somit die Position für die Funktion „Geldbesitz“ kennt.
o Durch den Vergleich von Adrianes Werten im Hexeditor mit den Werten einem
anderen Mädel könnte ein übereinstimmender Wert beispielsweise „Female
Teenager“ sein. Im Vergleich zu einem anderen Jungen sollte der Wert nicht
übereinstimmen, sodass man die Position der Funktion „Peeptyp“ ermittelt
hat.
o Durch gezieltes Rumprobieren hab ich bisher die meisten Funktionen
erforscht. Dazu hab ich einfach mal im Hexeditor irgendwo hinter den
Peepnamen die Zahl 999 (oder 000 oder 001 oder 012 oder ...)
reingeschrieben und im Spiel geschaut, was mit dem Peep passiert. Hat er
andere Koordinaten, andere Kleidung, anderes Verhalten, ...?
Beim Rumprobieren kann es jedoch häufig passieren, dass das Spiel
abstürzt, weil man eine unsinnige Zahl in die Datei geschrieben hat.
8. Entschlüsseln von OVL Dateien
• [wird ergänzt, wenn sich das neue Team etabliert hat und die ersten Aufgaben (Peeps in
.dat Parkdatei) erfolgreich gelöst wurden; dann werde ich hier die mir bekannten OVL-
Strukturen erklären, womit das Team die Entschlüsselung von komplexeren Daten
(Peeps, Animals, Pools usw. in .ovl Dateien) starten kann]
Begriffe aus der Informatik
Es folgt eine Auflistung von einigen Begriffen aus der Informatik, wobei die Liste natürlich
nicht vollständig ist. Für detailliertere Informationen eignet sich Wikipedia sehr gut.
• Werte oder Adressen werden oftmals in hexadezimaler Schreibweise mit $... oder mit
0x... angegeben, z.B. $E7 oder 0xE7, wobei beide Schreibweisen gleichwertig sind. Ich
verwende aus Gewohnheit immer $.
• byte = besteht aus 8 bit. Der Wert eines Byte liegt in dezimaler Schreibweise zwischen 0
und 255, in hexadezimaler Schreibweise zwischen $00 und $FF. Ein Byte kann auch als
ein Buchstabe/Zeichen dargestellt werden, siehe Wikipedia/ASCII-Tabelle.
• uint8 = unsigned integer 8 bit = ganze Zahl zwischen 0 und 255
• int8 = (signed) integer 8 bit = ganze Zahl zwischen -128 und +127
• float32 = float 32 bit (Kommazahl)
• bool = 1 oder 0 = wahr oder falsch (Flag)
• string = Text mit mehreren Buchstaben/Zeichen (jeweils ein Byte), z.B. „Name“
• RCT3 Daten beinhalten zwei verschiedene Arten von Texten
o Text mit vorheriger Längenangabe, beispielsweise .Name = $04 $4E $61 $6D
$65, wobei die $04 die Länge des Textes (hier 4 Buchstaben) ist.
o Text mit folgender Nullterminierung, beispielsweise N.a.m.e... = $4E $00 $61
$00 $6D $00 $65 $00 $00 $00, wobei die Nullterminierung $00 $00 am Ende
RCT3 anzeigt, dass dort der Text endet.
• soweit ich gesehen habe verwendet RCT3 die „least significant bit“ Anordnung (siehe
Wikipedia/Bitwertigkeit). Somit findet man die Zahl $87654321 in den RCT3-Daten
abgespeichert als $21 $43 $65 $87. Einfaches Beispiel: dezimal 23 = $17 = $00000017 =
$17 $00 $00 $00.