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:

  1. Header
  2. Schiffstypen zugeordnete Funktionen
  3. Stufen-limitierte Funktionen (optional)
  4. Schiffen zugeordnete Funktionen (optional)
  5. 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.

► Note: Dieses Feld dient nur dazu, vorherzusagen, welche Eigenschaften ein neu gebautes Schiff haben wird. Die derzeit aktiven Zuordnungen existierender Schiff 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.