The 8 standard file sections have the following contents:
--- Section 1 (pointer at +0): Ships --- +0 WORD Number of ships +2 n BYTEs Ship records of 107 bytes each, see SHIPx.DAT --- Section 2 (pointer at +4): Visual Contacts --- +0 WORD Number of contacts. Must be <= 50 for Wisseman clients. VPHost and PHost with AllowBigTargets allow more than 50 contacts if the client-side unpacker can handle those (VPUnpack, k-unpack, CCUnpack). +2 n BYTEs Records of 34 bytes each, see TARGETx.DAT. DOS-style RSTs: the 50 nearest contacts. Windows-style RSTs: the first 50 contacts (in Id order) --- Section 3 (pointer at +8): Planets --- +0 WORD Number of planets +2 n BYTEs Planet records of 85 bytes each, see PDATAx.DAT --- Section 4 (pointer at +12): Bases --- +0 WORD Number of starbases +2 n BYTEs Starbase records of 156 bytes each, see BDATAx.DAT --- Section 5 (pointer at +16): Messages --- +0 WORD Number of messages +2 n BYTEs Records of 6 bytes each +0 DWORD Address of message in RST file + 1 +4 WORD Length of message in bytes The messages usually follow the message headers, and are encrypted like in MDATAx.DAT. Reportedly, Winplan cannot unpack results where the number of messages exceeds 5461, i.e., where the message directory is larger than 32k. --- Section 6 (pointer at +20): Ship Coordinates --- +0 n BYTEs 500 (or 999) Records of 8 bytes each, see SHIPXYx.DAT: +0 WORD X position +2 WORD Y position +4 WORD Owner +6 WORD Mass in kt --- Section 7 (pointer at +24): GENx.DAT --- +0 18 BYTEs Timestamp +18 88 BYTEs 11 score records of 8 bytes each +106 WORD Player Id +108 20 BYTEs Password +128 3 DWORDs Checksums of ship, planet, and base block These checksums are the sum of all unsigned bytes in all ship/planet/base records in the RST file. The first word of each section ("Number of...") is not counted. Note that these are not exactly the same checksums as in GENx.DAT. +140 WORD Turn number +142 WORD Timestamp checksum See GENx.DAT for more information on each field. Not all GENx.DAT fields are stored here, set the others to zero. --- Section 8 (pointer at +28): VCRs --- +0 WORD Number of VCRs +2 n BYTEs VCR records of 100 bytes each, see VCRx.DAT.
Unpack programs must generate two (nearly) identical copies of the ship, planet and base sections (.DAT and .DIS). Those files only differ in their signatures. The RST file does not contain the signatures.
Detecting Host999
There appears to be no signature telling whether you are dealing with a Host999 file or not. This only makes a difference for the SHIPXYx.DAT part which has no length specification. If section 1 or 2 contain an Id number greater than 500, you can be sure to have a Host999 RST (not for the scores or VCRs, those could have been changed by a 3rd party add on, since they have no other effect in a front-end program). You can use the fact that the Wisseman Host always places the sections in "correct" order, so if there are exactly 4000 bytes between sections 6 and 7, it's a "Host500" RST, if there are 7992, it's from Host999. Or, always assume you have 999 ships. If you then accidentally "run into" the GENx.DAT image: valid timestamps start with two numbers, which -- interpreted as a WORD -- yield an invalid or at least improbable X coordinate for a ship.
Note that the standard Winplan999 and Unpack999 programs do not attempt to detect that, and blindly copy 7992 bytes, thus making bogus SHIPXYx.DAT files (see there) if Host999 is not used.
"RST Format 36" / "RST Format 37"
With the introduction of "FF allies" in Host 3.22.039, Tim announced the change to "RST Format 36" (or 37, depending on where you look).
The basic RST file format did NOT change in these versions. Unpackers need not be changed. "RST Format 36" probably references the fact that allied targets are listed in TARGETx.DAT but not in SHIPXYx.DAT, making them invisible to DOS Planets. See the description of these two files for more details.
- RST FILE
- RST FILE
- Versions
- Winplan data