+0 18 BYTEs Timestamp (10 bytes date mm-dd-yyyy, 8 bytes time hh:mm:ss) +18 88 BYTEs 11 score records of 8 bytes each: +0 WORD Number of planets, 10 points each +2 WORD Number of capital ships, 10 points each +4 WORD Number of freighters, 1 point each +6 WORD Number of starbases, 120 points each +106 WORD Player Id +108 20 BYTEs Password The password has 10 characters (padded with NULs). Each character of the password is decoded as follows: 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); +128 BYTE unused This field may belong to the password data. If you define an array of size 20 in BASIC, this field really gets 21 elements (0 to 20). The password only uses 0 to 19. +129 DWORD Checksum of SHIPx.DAT/DIS +133 DWORD Checksum of PDATAx.DAT/DIS +137 DWORD Checksum of BDATAx.DAT/DIS These checksums are the total sum of all bytes of the appropriate files (i.e., count word, data, and signature block of both files). +141 WORD 13 if the password has changed, 0 else +143 10 BYTEs New password, if any: each byte is increased by 50 +153 WORD Turn number +155 WORD Checksum of the time stamp = sum of bytes at 0 to 17
From this data, a file signature is constructed: +118 10 BYTEs (second part of password data) Signature 1 is these 10 bytes. Increase the first byte by 1, the second by 2 and so on. The result is Signature 2.
Note on passwords
Passwords are padded with NULs, not spaces. High-ASCII characters are not allowed in passwords and should be treated as NULs: MASTER sometimes generates those.
The password "NOPASSWORD" disables the password query.