Difference between revisions of "Phantasy Star Generation 2:Notes"

From Data Crystal
Jump to navigation Jump to search
Line 46: Line 46:
 
* its size is 512×512
 
* its size is 512×512
 
* its palette contains 64 times the 4 same colors : $FFFFFF00, $FFFFFF3A, $FFFFFF5F, $FFFFFF7F. They are all white colors, with varying alpha, for antialiasing purposes when drawing the character
 
* its palette contains 64 times the 4 same colors : $FFFFFF00, $FFFFFF3A, $FFFFFF5F, $FFFFFF7F. They are all white colors, with varying alpha, for antialiasing purposes when drawing the character
* the bitmap file is actually made of 4 512×512 layers ; each byte in the bitmap part of the SGGG codes 4 pixels, one in each layer :
+
* the bitmap file is actually made of 4 512×512 layers ; each byte in the bitmap part of the SGGG codes 4 pixels, one for each layer :
 
** bits 0-1 code a 4 colour pixel in layer 0
 
** bits 0-1 code a 4 colour pixel in layer 0
 
** bits 2-3 code a 4 colour pixel in layer 1
 
** bits 2-3 code a 4 colour pixel in layer 1

Revision as of 02:31, 17 April 2013

Compression

CUE found out the coding algorithm. It's a Lempel-Ziv related one, called Lempel-Ziv Renau.

Structure of files :

  • Bytes $0000 to $000a : header
    • 2 bytes : signature, always "CM"
    • 4 bytes: decoded data length, low endian
    • 4 bytes: encoded data length, low endian
  • From $000a : ENCODED_DATA
  • Then FLAGS. Flags are read bit per bit :
    • if bit = 0, then put one byte from ENCODED_DATA and put into DECODED_STREAM
    • if bit = 1, then the corresponding half-word in ENCODED_DATA is of the form lllloooooooooooo, where l = length and o = offset. Copy then 'length + 3' bytes from DECODED_STREAM[current_position - offset + 1] to DECODED_STREAM[curent_position].
  • Fill the file with $00, up to have a file size dividible by $800.

Files specifications

Graphics files (SGGG)

They are just 256 colors palette indexed bitmap files.

  • bytes $0 to $3 : 'SGGG' (identifier)
  • bytes $4 to $7 : always 1, usage unknown
  • bytes $8 to $9 : width (Little Endian)
  • bytes $a to $b : height (LE)
  • bytes $c to $f : unknown
  • bytes $10 to $410 : palette. Each color is 32b RGBA. Alpha max seems to be $80 (and most colors are alpha max). Colors are stored in a weird way though :
    • colors $0 to $7
    • colors $10 to $17
    • colors $8 to $f
    • colors $18 to 1f
    • and so on...
  • from bytes $410 : bitmap. The picture seems cut in 512×512 blocks in scan order, each of which described row per row, from top to bottom.

For example, a 640×448 bitmap is cut in 2 rects, one with pixels (0 - 511, 0 - 447) and the other (512 - 639, 0 - 447). No bitmap actually need more than 2 rects.

  • some files may contain other palettes after the bitmap.

Font file

The font file is file 0002 in MAPDATA.DAT archive. It's a SGGG file (see above) with the following characteristics :

  • its size is 512×512
  • its palette contains 64 times the 4 same colors : $FFFFFF00, $FFFFFF3A, $FFFFFF5F, $FFFFFF7F. They are all white colors, with varying alpha, for antialiasing purposes when drawing the character
  • the bitmap file is actually made of 4 512×512 layers ; each byte in the bitmap part of the SGGG codes 4 pixels, one for each layer :
    • bits 0-1 code a 4 colour pixel in layer 0
    • bits 2-3 code a 4 colour pixel in layer 1
    • bits 4-5 code a 4 colour pixel in layer 2
    • bits 6-7 code a 4 colour pixel in layer 3

We can thus obtain those 4 characters sheets :

(todo : insert them)

Maps files

Text files

Animations files