Die Datei hullfunc.dat wird von PHost erzeugt, wenn du beim Aufruf die Option -l (Schiffsliste ausgeben) verwendest. Die Datei enthält die Zuordnungen der Schiffsfunktionen in einem einfach maschinenlesbaren Binärformat. Programme wie EchoView nutzen diese Datei, anstatt aufwändig die shiplist.txt bzw. hullfunc.txt interpretieren zu müssen.
Die Datei besteht aus folgenden Teilen:
- Header
- Schiffstypen zugeordnete Funktionen
- Stufen-limitierte Funktionen (optional)
- Schiffen zugeordnete Funktionen (optional)
- Trailer
Die Teile stehen lückenlos direkt hinter einander. Der Header enthält Zeiger auf die optionalen Teile, damit sie einfacher gefunden werden können. Bis PHost 4.0k wurden nur die drei Pflichtteile geschrieben. Künftige PHost-Versionen werden möglicherweise weitere Daten vor dem Trailer einfügen, du solltest die Position des Trailers daher aus der Dateigröße ermitteln.
Format des Headers:
+0 DWORD Magic Number 0xB1297F35 +4 BYTE PHost Minor Version (e.g. 0) +5 BYTE PHost Major Version (e.g. 4) +6 32 BYTEs Game Name (mit Leerzeichen aufgefüllt) +38 DWORD Zeiger auf Stufenlimitierte Schiffsfunktionen +42 DWORD Zeiger auf Schiffen zugewiesene Funktionen +46 8 BYTEs Reserviert, immer 0
Die "Zeiger"-Felder sind 0, wenn die entsprechenden Bereiche nicht existieren. Das ist die Standardbelegung in PHost-Versionen vor 4.0l.
Format der den Schiffstypen zugewiesenen Funktionen: Dieser Bereich beschreibt die Funktionen, die Schiffstypen zugeordnet sind (AssignTo=Hull). Wenn beispielsweise für einen Schiffstyp gemeldet wird, dass er nur tarnt, wenn er den Lizards gehört, kann so ein Schiff auch nur getarnt werden, wenn es gerade den Lizards gehört, egal, wer es gebaut hat.
+0 WORD Anzahl Einträge, die folgen +2 n RECORDs variabler Länger: +0 WORD Hull Number +2 WORD Anzahl Schiffsfunktionen, die dieser Hülle zugewiesen sind +4 n RECORDs a 4 Bytes: +0 WORD Schiffsfunktion. +2 WORD Spieler-Bitfeld. Bits 1 bis 11 entsprechen den Spielern, die diese Funktion nutzen können. Bits 0 und 12..15 sind undefiniert.
Das Feld Special Function kann die folgenden Werte annehmen:
- eine Funktions-Nummer (Feld Numerischer Wert in der Beschreibung der Funktionen)
- die Nummer einer stufen-limitierten Schiffsfunktion, wie im nächsten Abschnitt beschrieben
- ein noch nicht spezifizierter Wert einer künftigen PHost-Version bzw. eines Add-On-Programms
Stufen-limitierte Funktionen: Dieser Bereich beschreibt Funktionen, die mit einer Level-Anweisung modifiziert sind.
+0 WORD Anzahl modifizierter Funktionen +2 WORD Größe der Einträge +4 n RECORDs der angegebenen Größe: +0 WORD Function Id +2 WORD Basic Function +4 WORD Experience Level Mask
Das Format der Definitionen ist das gleiche wie util.dat Eintrag 57, siehe dort für mehr Informationen. In künftigen Versionen kann die Größe erhöht und neue Daten angefügt werden. Beachte, dass die Funktionsnummern, die in hullfunc.dat gemeldet werden, sich von denen in utilX.dat unterscheiden können, da hullfunc.dat üblicherweise nur einmal zu Beginn des Spiels erstellt wird, während utilX.dat den jeweiligen aktuellen Zustand meldet. Die hier gemeldeten Funktionsnummern können also nur dazu verwendet werden, um die Funktionsnummern der Bereiche zugeordnete Funktionen in dieser Datei zu interpretieren.
Schiffen zugewiesene Funktionen: Das Format dieses Abschnitts ist das gleiche wie das des Bereichs Schiffstypen zugewiesene Funktionen. Es beschreibt Funktionen, die Schiffen zugewiesen werden, wenn diese gebaut werden (AssignTo=Ship). Wenn beispielsweise ein Schiff als tarnbar berichtet wird, wenn es der Lizard baut, dann kann jedes dieser Schiffe tarnen, wenn es der Lizard gebaut hat, egal, wem es momentan gehört. Dieses Feld dient dazu, vorherzusagen, welche Eigenschaften ein neu gebautes Schiff haben wird. Die derzeit aktiven Zuordnungen existierender Schiffe werden in util.dat Eintrag 52 gemeldet.
Format des Trailers:
+0 DWORD Signatur 0x1F0C219A +4 DWORD Prüfsumme
Die Prüfsumme ist die wortweise Summe (Worte haben 16 Bit, Little-Endian) aller Worte in der Datei, bis auf das Prüfsummen-Feld selbst. Beispielsweise hat das Feld "Magic Number" den Wert 0xB1297F35. Damit besteht es aus den Worten 0xB129 und 0x7F35 und ergibt die Prüfsumme 0x1305E.