Ar max packagingThanks to some sterling work by Ross Ridge, who has already completed work on two projects I was looking at starting, the details of the .max PS2 save format have now been uncovered.

I’m documenting the file structure and compression used and also preparing a DLL that will allow people to add .max support to their programs. As a taster here’s the .max header, part 1 of a 3 part system:

type
TMaxheader = record
   magic : array[0..11] of char; //Ps2PowerSave
   checksum : integer; //CRC32 of entire file with checksum area treated as all 0’s
   dirname : array[0..31] of char; //parent directory name
   iconSysName : array[0..31] of char; //icon.sys text
   compressedSize : integer; //size of compressed data
   fileNum: integer; //number of files
   length: integer; //size of uncompressed data
end;

What really suprised me is that the .max format has no provision for recording file attributes! Unlike the .psu format which maintains file system attributes, cruicial for accurate restoration of files back to a PS2 memory card, the .max format appears to restore files with a generic set of attributes. Luckily, or even by design, these attributes match those required by GTA saves but this runs the risk that a file is restored without the correct attributes and a different game will treat the save as corrupt.

On the same note, I’m concerned that the .max format does not support PSOne and Pocketstation files as these require a specific attribute to be set. More investigation is required for clarification.