C4Group

Aus Clonk Wiki
Wechseln zu: Navigation, Suche
Für das Kommandozeilenprogramm zur Bearbeitung von C4Group-Dateien, siehe C4Group.exe.

C4Group ist der Name des Gruppendatei-Formats, in dem die Spieldaten von Clonk gepackt sind, also Szenarien (c4s), Rundenordner (c4f), Objektdefinitionen (c4d) usw.

Gruppendateien können im Entwicklermodus des Menüsystems geöffnet, bearbeitet, entpackt und gepackt oder zerlegt werden.

Aufbau[Bearbeiten]

C4Group-Dateien haben folgenden Aufbau:

  • GZIP-Header (mit geänderten Magic Bytes 0x1e und 0x8c)
  • Deflate-komprimierter Datenbereich.
  • GZIP-Footer (CRC32 und unkomprimierte Länge)

Gruppen-Header[Bearbeiten]

Der Datenbereich beginnt mit dem 204 Byte langen Gruppenheader des Hauptordners der Gruppendatei. Jeder Ordner innerhalb einer Gruppendatei beginnt mit seinem Gruppenheader, der Informationen über ihn liefert. Er ist auf folgende weise verschlüsselt:

for position = 0 to Datenlänge - 1 step 3
    Vertausche(puffer[position], puffer[position + 2])
next
for position = 0 to Datenlänge - 1
    puffer[position] = puffer[position] xor 0xED
next

Implementierungen in C, C#, Python und PHP sind in der entsprechenden Unterseite zu finden.

Aufbau des Gruppenheaders (im source code: C4GroupHeader):

Offset (in Bytes) Größe (in Bytes) Datentyp Beschreibung (Clonk Rage) Beschreibung (OpenClonk)
0 25 String Muss RedWolf Design GrpFolder sein.
25 3 - Reserviert.
28 4 Integer Versionsnummer 1. Muss 1 sein.
32 4 Integer Versionsnummer 2. Muss 2 sein.
36 4 Integer Anzahl der Unterordner und Dateien.
40 32 String Name des Autors. Reserviert.
72 32 - Reserviert.
104 4 time_t (Integer) Erstellungsdatum.
108 4 Integer 1234567 falls die Gruppe ein Originalpaket ist, oder ein beliebiger anderer Wert andernfalls.
112 92 - Reserviert.

Inhaltsverzeichnis[Bearbeiten]

Auf den Gruppenheader folgt das (unverschlüsselte) Inhaltsverzeichnis des Ordners. Es enthält Informationen über die sich im Ordner befindenden Dateien und Ordner. Jeder Eintrag des Inhaltsverzeichnisses hat eine Größe von 316 Byte. Die Anzahl der Einträge wird im Gruppenheader angegeben.

Aufbau eines Eintrags aus dem Inhaltsverzeichnis (im source code: C4GroupEntryCore):

Offset (in Bytes) Größe (in Bytes) Datentyp Beschreibung (Clonk Rage) Beschreibung (OpenClonk)
0 257 String Dateiname.
257 3 - Reserviert.
260 4 Integer Muss ein beliebiger Wert außer 0 sein.
264 4 Integer 0 wenn der Eintrag eine Datei ist, 1 wenn es sich um einen Ordner handelt.
268 4 Integer Dateigröße.
272 4 - Reserviert.
276 4 Integer Abstand des Dateiinhalts vom Ende des Inhaltsverzeichnisses.
280 4 time_t (Integer) Datum der letzten Modifikation. Reserviert.
284 1 Byte 0: Keine Prüfsumme vorhanden
1: Prüfsumme des Dateiinhalts
2: Prüfsumme über Dateiinhalt und Dateiname
285 4 Vorzeichenloser Integer CRC32-Prüfsumme.
289 1 Byte Gibt an ob die Datei ausführbar ist. (Wird nur unter Linux benötigt)
0: Nicht ausführbar
1-255: Ausführbar
290 26 - Reserviert.

Es folgen die Dateiinhalte.

Nachteile[Bearbeiten]

C4Group ist ein progressiv komprimiertes Format, d.h. wenn eine Datei entpackt werden soll, muss die C4Group-Datei vom Anfang bis zu der angefragten Datei entpackt werden. Dadurch werden auch nicht benötigte Dateien entpackt, die verworfen werden. Außerdem muss die C4Group-Datei jedesmal zurück an den Anfang springen, wenn eine Datei angefragt wird, die vor der aktuellen Leseposition liegt. Für OpenClonk ist daher geplant, auf ein anderes Kompressionsformat umzusteigen, wie z.B. ZIP, das einen wahlfreien Zugriff ermöglicht.

Änderungen[Bearbeiten]

Externe Links[Bearbeiten]

Beschreibung des GZIP-Formats