This file contains history and other information of the VGA Planets Assistant. The file begins with a signature:
+0 14 BYTEs "VPA Database",13,10 +14 BYTE Database format version. Has the value 6 for all VPA versions in use nowadays (3.49+), and the text below describes format version 6.
Then, for each turn, a block follows. It has the following structure:
+0 4 BYTEs Block name = "TURN" +4 DWORD Size of data (counted from offset 116 onwards) +8 WORD Turn Number +10 18 BYTEs Timestamp of turn +28 11x4 WORDs Scores (see GENx.DAT) +116 n BYTEs Data
The Data block consists of several sub blocks containing various information:
+0 4 BYTEs Block name +4 DWORD Total size of data (counted from offset 10) +8 WORD "Count" Number of elements (=ships, planets, ...) in the block, if more than 1 are possible. 0 otherwise (e.g., for PBPs). +10 n BYTEs Data
The following paragraphs describe the various sub-blocks in the file:
- "BASE" - Starbase data Contains information on starbases (records as in BDATAx.DAT)
- "EPLN" - Planet information 500 records of the following structure, one per planet. The Count field is 500.
+0 WORD Turn of last scan, or 0 +2 BYTE Owner, or 0 if unknown +3 BYTE Flags Bit 7 Starbase exists Bit 6 Starbase does not exist Both bits zero: not known Bits 0..2 Industry level 0 unknown 1 minimal 2 light 3 moderate 4 substantial 5 heavy (the same as in PHost UTILx.DAT, plus one)
- "IMSG" - Incoming messages Incoming messages kept in the database using the "Keep" command in VPA.MSG. The number of messages is in the "count" field in the block header. The data block contains a sequence of message headers followed by the texts. Message headers have the same format as in MDATAx.DAT:
+0 DWORD Offset +2 WORD Length The offsets are relative to the position of the "count" word minus one. That is, when you copy the "count" word and the block data into a separate file, you get a standard MDATAx.DAT file.
- "IONS" - Ion Storms Records of 22 bytes each:
+0 WORD Storm Id +2 WORD X +4 WORD Y +6 WORD Radius +8 WORD Voltage +10 WORD Heading +12 BYTE Warp +13 BYTE 1=growing, 0=weakening +14 4 WORDs ? (-1, probably previous coordinates)
- "MARK" - Markers Records of 12 bytes each, followed by comment texts
+0 BYTE Type (see data transmission, under MDATAx.DAT) +1 BYTE Color +2 WORD X +4 WORD Y +6 WORD Number of message (see "IMSG" block) of this marker. 0 for user-made markers. Negative ship id if bound to a ship. +8 WORD Lines: X extent Markers: position of comment text in text area (1-based, 0=no comment) +10 WORD Lines: Y extent Circles: radius Markers: text justification After the marker records, the text area follows. It is indexed 1-based and contains the comments as Pascal strings.
The field at +8 is not used for circle markers. VPA sets it to 0 when it creates a marker, but preserves different values if you put them there (by editing the file). VPA10k uses this fact to mark its own markers and find them again later; it puts the value 4711 there.
For more information on VPA markers, refer to the VPA data transmission section in the MDATAx.DAT description.
- "MINE" - Mine fields Records of 16 bytes each (compare this to the minefield data transmission, which is the same except that the Id is missing):
+0 WORD Minefield Id +2 WORD Turn of last scan +4 WORD X +6 WORD Y +8 WORD Owner race +10 DWORD Mine units +14 WORD 1=Web mines
- "MSGO" - Message Information One DWORD for each message in "IMSG". See VPAMSGx.DAT for description.
- "NPLN" - Planet Flags 500 bytes, one for each planet: which values are known this turn:
bit 0 Enemy planet (owner known) bit 1 Minerals, money known bit 2 Industry known (mines, factories, DP, FC) bit 3 Colonist population known bit 4 Native population known bit 5 Temperature known bit 6 (Non-)Existence of starbase known bit 7 Number of supplies known This corresponds to various actions as follows: 01h Planet was scanned (sensor sweep) 30h Planet was bioscanned 41h Ship surrendered 43h Planet was dark-sensed 69h Ship in orbit 6Fh Planet was super-spied
- "OMSG" - Sent messages Similar to the MESSx.DAT file, with the "Count" word being the first word of the MESSx.DAT file. Does not have a gap between message headers and data.
- "PASS" - Password Password, using the same encryption as in GENx.DAT. The size is 20, the count is 0.
VAR pw : ARRAY[0..19] OF BYTE; { this field } ch : ARRAY[0..9] OF CHAR; { password } FOR i := 0 TO 9 DO ch[i] := Chr(pw[i] - pw[19-i] + 32);
- "PBPS" - Priority Build Points Contains 11 WORDs with the PBPs of the players. A value is -1 if the race doesn't play or the number is unknown. The Count word in the block header is 0.
- "PEXP" - Planet Experience [v3.61f+] Contains 500 bytes, one for each planet. Each entry contains the experience level (>= 0) or 255 if not known. This record only exists when PHost 4.x experience is actually used.
- "PHST" - PHost Version Number Exists if PHost is being used. Contains the PHost version number ("3.2e"). The Size field contains the length in characters of this string, the Count field is zero.
- "PLAN" - Planet data This block contains the information of PDATAx.DAT and information on scanned planets. This uses modified planet records (89 bytes each), unknown values are set to -1.
+0 WORD Planet id +2 WORD Turn of first scan +4 WORD Turn of last scan +6 WORD Owner +8 81 BYTEs Contents of planet record at offset 4 (Friendly Code), see PDATAx.DAT for description. Unknown values are set to -1.
- "REFS" - unused This header tag is recognized but not evaluated by current versions of VPA.
- "SCOR" - unused This header tag is recognized but not evaluated by current versions of VPA.
- "SEXP" - Ship Experience [v3.61f+] Contains 999 bytes, one for each ship. Each entry contains the experience level (>= 0) or 255 if not known. This record only exists when PHost 4.x experience is actually used.
- "SHIP" - Ship data Contains data for all starships, same as SHIPx.DAT, plus all scanned ships. This uses modified ship records (123 bytes each), unknown values are -1.
+0 WORD Ship Id +2 WORD Turn of last scan +4 WORD Owner +6 103 BYTEs Contents of ship record at offset 4 (FCode), see SHIPx.DAT for description. +109 WORD Last known mass +111 WORD Minimum mass scanned ever +113 WORD Maximum mass scanned ever +115 2 WORDs Last turn's X,Y +119 2 WORDs Last scanned X,Y
- "UFOS" - Ufos [v3.58+] Contains the Ufo objects; 90 bytes per object.
+0 WORD Ufo Id +2 WORD Turn number +4 78 BYTEs Standard Ufo record +82 4 WORDs -1 (?, probably previous coordinates)
- "VCRS" - VCR records Contains all VCRs, like in VCRx.DAT.
- "VERS" - VPA Version Number The Count field in the header contains the version number, encoded as 351 (decimal) for 3.51. The data area itself is empty (size 0).
- "WORM" - Wormholes Entries of 12 bytes each.
+0 WORD Wormhole Id +2 WORD Turn number of scan +4 WORD X +6 WORD Y +8 WORD Mass +10 WORD Stability (like values in UTILx.DAT, plus 1) 1 very stable 2 stable 3 mostly stable 4 unstable 5 very unstable 6 totally unstable
- "XYPL" - Planet Coordinates 500 records with an X and Y WORD each.