Schatten über Riva

Aus
Wechseln zu: Navigation, Suche

Bei Schatten über Riva werden die meisten Spieldaten innerhalb der ALF-Archive gespeichert.

.ALF (Archiv-Datei)

Anmerkung: Die folgenden Daten sind noch etwas ungewiss, da es uns noch nicht gelungen ist, ein Riva-Archiv so zu packen, dass das Spiel dieses fehlerfrei nutzen kann. -- Hendrik

In den Riva-Archiven sind die Dateien jeweils Modulen zugeordnet. In der Regel gehört eine Datei in ein bestimmtes Modul, es ist jedoch auch möglich, eine Datei mehreren Modulen zuzuordnen. Im Archiv müssen die Module in einer bestimmten Reihenfolge (nämlich der gleichen wie in der .MOD-Datei, siehe dort) stehen, und innerhalb dieser die Dateien, ebenfalls in fester Reihenfolge. Auf die Module wird über ihren Namen im Archiv zugegriffen. Der Zugriff auf die Dateien erfolgt über deren Index im Archiv und nicht über den Dateinamen.

Aufbau des Archivheaders [48 Bytes]

Offset Bedeutung
0-3 Signatur "ALF "=0x414C4620
4-7 ?Version des Archivs (0x00000100)
8-9 Länge der Dateitabelle in Einträgen
10-13 Offset Beginn der Dateitabelle
14-15 Tatsächliche Anzahl der Dateien in der Tabelle
16-19 Offset Beginn der Daten (entspricht Header-Länge)
20-21 Länge der Modultabelle in Einträgen
22-25 Offset Beginn der Modultabelle
26-27 Tatsächliche Anzahl der Moduln in der Tabelle
28-31 Offset der Datei-Modul-Zuordnungstabelle
32-47 Leer (16-mal 0x00)

Nach dem Header folgen in den Originalarchiven gleich die Daten. Die referenzierten Tabellen befinden sich ganz am Ende, beginnend mit der Dateitabelle, gefolgt von der Modul- und schließlich der Zuordnungstabelle. Theoretisch könnten die Tabellen auch direkt nach dem Header stehen, ob Riva damit allerdings zurechtkommt, steht noch aus.

Dateitabelle [je 28 Bytes]

Offset Zweck
0-12 Dateiname, 0-Terminiert
13 Unklar. (1)
14-17 Dateilänge
18-21 Unklar, vielleicht das Datum? (2)
22-23 Unklar. (3)
24-27 Offset in Little-Endian, -30 Bytes Header
  1. Hat verschiedene Werte: 0x00, 0xb4 in riva.alf, 0x30 in dungeon.alf
  2. Möglicherweise handelt es sich dabei um ein Datum, z.B. Sekunden seit dem 01.01.1980.
  3. Hier weiß ich noch gar nicht, worum es sich handeln könnte. Bis jetzt nur 0-Bytes gefunden.

Modultabelle [je 28 Bytes]

Die Module müssen in der richtigen Reihenfolge stehen, d.h. die Offsets müssen (streng!) monoton steigen. Der Aufbau eines Eintrages entspricht weitestgehend dem der Dateitabelle.

Offset Zweck
0-13? Name, 0-Terminiert (1)
14-17 Anzahl der enthaltenen Dateien (Modulgröße)
18-21 Unklar. Datum? (2)
22-23 Unklar.
24-27 Startnummer in der Zuordnungstabelle (3)
  1. Offset 10-13 ist in DUNGEON.ALF stets 0x51007941. Der String geht nur bis Offset 9, incl. 0-Terminator. In der RIVA.ALF geht er bis Offset 12, wie auch in der Dateitabelle.
  2. siehe in den Dateitabelleneinträgen an gleicher Stelle.
  3. In 2-Byte-Schritten. Nach Addition des Zuordungstabellen-Offsets kann der Wert direkt als Offset in der Zuordnungstabelle genutzt werden (deren Einträge ja ebenfalls zwei Bytes lang sind).

Die Modulnamen in der .ALF sind case-sensitiv.

Zuordnungstabelle

Die Zuordnungstabelle enthält für jede Datei innerhalb eines Moduls einen 2-Byte-Eintrag. Dieser enthält einen Index in die Dateitabelle. Die Modultabelle ist so lang wie die Summe aller Modulgrößen, multipliziert mit 2. Innerhalb der Tabelle kommen manchmal Dummy-Einträge vor, die auf den (ungültigen) Index 0xFFFF zeigen.


.MOD (Archiv-Modulindex)

Zu jeder .ALF-Datei gehört eine gleichnamige .MOD-Datei (d.h. zu X.ALF gehört auch X.MOD). Diese Datei enthält eine Liste aller Module, die in dem Archiv gespeichert sind. Unterscheiden sich die Reihenfolgen der Modulnamen in RIVAHELP.MOD und RIVAHELP.ALF, bricht RIVAHELP.EXE mit einer Fehlermeldung ab. Für RIVA.EXE und das Archiv RIVA.ALF/.MOD gilt dies nicht. Die Modulnamen sind unempfindlich gegenüber Groß- und Kleinschreibung und werden einfach hintereinander in die Datei geschrieben, jeweils getrennt durch einen DOS-Zeilenumbruch (CRLF, 0x0D0A). Nach dem letzten Modul muss ebenfalls noch einmal ein CRLF folgen.

Zu prüfen wäre noch, ob ein Modul in einer bestimmten Datei liegen muss, und ob (falls die Datei egal ist) ein Modul auf mehrere Dateien verteilt werden kann.


Übersicht über die ALF-Archive

Die folgenden ALF-Archive werden von Schatten über Riva verwendet:

Datei Inhalt
RIVA.ALF Hauptarchiv für Spieldaten
DUNGEON.ALF 3D-Umgebungen
RIVAHELP.ALF Ingame-Handbuch
RIVAHINT.ALF Ingame-Lösungshinweise
SEQS.ALF Allgemeine Videos (z.B. die Ladesequenz, der Rattenfänger, etc.) im SMK-Format
SPEX.ALF Sprachausgabe-Sequenzen (z.B. im Traviatempel am Anfang) im SMK-Format
RAW1.ALF - RAW16.ALF vermutlich RAW-Sounds