+0  10 BYTEs   Signature "VPM 2.1",0,0,0 (probably version dependent)
+10 1000 WORDs  Planet coordinates. 500 X,Y pairs
+2010 682 BYTEs Race names. Same format as RACE.NM
+2692 n BYTEs   Movie data, variable-sized blocks. Each block has the format
                 +0     BYTE    block type
                 +1   n BYTEs   block data
                A turn ends with a block of type 0 containing no data, i.e.
                just a null byte. Each block specifies the differences
                from the previous turn to this one.

--- Planet block ---
 +0     BYTE    1 (block type)
 +1   n WORDs   planet data
                 bits 0..8      Id
                 bits 9..12     owner
                 bit 13         ? (0)
                 bit 14         starbase present
                 bit 15         ? (0)
 +m     WORD    0 (block terminator)

--- Ship block ---
 +0     BYTE    2 (block type)
 +n     RECORDs of variable size:
                 +0     WORD    bit 0  hull info present
                                bit 1  owner/engine info present
                                bit 2  beam info present
                                bit 3  torp info present
                                bit 4  damage info present
                                bit 5  X coordinate present
                                bit 6  Y coordinate present
                                bit 7..15  Id
                --- all these fields are optional: ---
                 +?     BYTE   hull
                 +?     BYTE   bits 0..3 owner
                               bits 4..7 engine
                 +?     BYTE   bits 0..3 beam type
                               bits 4..7 beam count
                 +?     BYTE   bits 0..3 torp type
                               bits 4..7 torp launcher count
                 +?     BYTE   damage%
                 +?     WORD   X
                 +?     WORD   Y
 +?     WORD    0 (block terminator)

Note: when a ship is destroyed, this is reported with an entry that has only owner/engine information with new owner zero.

--- Minefield block ---
 +0     BYTE    3 (block type)
 +1   n RECORDs of variable size:
                 +0     WORD   Bits 0..8 Id
                               Bit 15    1 if radius change only
                --- if Bit 15 clear ---
                 +2     WORD   X
                 +4     WORD   Y
                 +6     WORD   Radius
                 +8     BYTE   Bits 0..3 owner
                               Bit 4     1=web
                --- if Bit 15 set ---
                 +2     WORD   Radius
 +m     WORD    0 (block terminator)

Note that the VPM player assumes that the first recorded turn is turn 1, no matter what it really was.

This is a testing version.
It may be incomplete, and have more bugs (or features) than the public live version at planetscentral.com.