Difference between revisions of "FF7/Field Module/DAT/Tile Map"

From Final Fantasy Inside
Jump to navigation Jump to search
my_wiki>Cyberman
 
my_wiki>Cyberman
(Background Tile Map)
Line 1: Line 1:
 
==Background Tile Map==
 
==Background Tile Map==
The background tile map information on the PSX is actually stored in 2 files. The graphic tiles are in a MIM file with the same name as the DAT file. Both are needed to view the background data completely.  This section covers just the Tile Map information and not how to decode the MIM data. The Tile Map consists of 4 subsections:
+
The background tile map information on the PSX is actually stored in 2 files. The graphic tiles are in a MIM file with the same name as the DAT file. Both are needed to view the background data completely.  This section covers just the Tile Map information and not how to decode the MIM data. The Tile Map consists of 4 subsections.  The header for the tile map consists of 4 offsets which are relative to the begining of the section.
  
 
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
 
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
Line 6: Line 6:
 
! style="background:rgb(204,204,204)" align="center" | Size
 
! style="background:rgb(204,204,204)" align="center" | Size
 
! style="background:rgb(204,204,204)" align="center" | Description
 
! style="background:rgb(204,204,204)" align="center" | Description
! style="background:rgb(204,204,204)" align="center" | Section Data
 
 
|-
 
|-
 
|style="background:rgb(255,255,255)" | 0x0000
 
|style="background:rgb(255,255,255)" | 0x0000
|style="background:rgb(255,255,255)" | ????
+
|style="background:rgb(255,255,255)" | DWORD
|style="background:rgb(255,255,255)" | ????
+
|style="background:rgb(255,255,255)" | Object Meta Data
|style="background:rgb(255,255,255)" | ????
 
 
|-
 
|-
|style="background:rgb(255,255,255)" |  
+
|style="background:rgb(255,255,255)" | 0x0004
|style="background:rgb(255,255,255)" | ????
+
|style="background:rgb(255,255,255)" | DWORD
|style="background:rgb(255,255,255)" | Texture Page (1st Layer)
+
|style="background:rgb(255,255,255)" | 1st layer Information
|style="background:rgb(255,255,255)" |
 
 
|-
 
|-
|style="background:rgb(255,255,255)" |  
+
|style="background:rgb(255,255,255)" | 0x0008
|style="background:rgb(255,255,255)" | ????
+
|style="background:rgb(255,255,255)" | DWORD
|style="background:rgb(255,255,255)" |
+
|style="background:rgb(255,255,255)" | Texture Page Data
|style="background:rgb(255,255,255)" |  
 
 
|-
 
|-
|style="background:rgb(255,255,255)" |  
+
|style="background:rgb(255,255,255)" | 0x000C
|style="background:rgb(255,255,255)" | ????
+
|style="background:rgb(255,255,255)" | DWORD
|style="background:rgb(255,255,255)" |
+
|style="background:rgb(255,255,255)" | Sprite Layer Information
|style="background:rgb(255,255,255)" |  
 
 
|}
 
|}
 +
 +
 +
===Section 1===
 +
A list of data structures (size == 12 or 2 bytes). The first UINT16 indicates layer or not a layer.
 +
struct {
 +
  UINT16 Type;
 +
  UINT32 ZZ1;
 +
  UINT32 ZZ2;
 +
  UINT16 TileCount;
 +
} Section1LayerChange;
 +
Type 0x7FFE is a sprite use Section 3 to find it's texture page.
 +
Type 0x7FFF is the End of layer information Data Record.
 +
 +
===Section 2===
 +
A series of Layer 1 tile data structures (basic background information)
 +
 +
struct {
 +
  INT16 DestinationX;
 +
  INT16 DestinationY;
 +
  UINT8 TexPageSourceX;
 +
  UINT8 TexPageSourceY;
 +
  UINT16 TileData;
 +
} Layer1Tile;
 +
Destination X and Y are signed, this is used for the walkmesh information and the center of the background field.
 +
The only used portion of the tile data is:
 +
{
 +
  unsigned ZZ1:6;
 +
  unsigned ClutNumber;
 +
  unsigned ZZ2:6;
 +
} TileData;
 +
 +
===Section 3===
 +
A list of UINT16, bit fields, because the ordering of fields within such an object are unspecifiable in the C and C++ standards (IE the compilor can choose any way which it may be done the standard doesn't care), this structure will be shown (a BIT?) differently.
 +
{
 +
  unsigned ZZ:11; // 11 MSB
 +
  unsigned page_y:1; //
 +
  unsigned page_x:4; // 4 LSB
 +
}
 +
 +
===Section 4===
 +
This section consists of the sprite data (2d data that is either non static or can be walked behind).
 +
struct {
 +
  INT16 DestinationX;
 +
  INT16 DestinationY;
 +
  UINT8 TexPageSourceX;
 +
  UINT8 TexPageSourceY;
 +
  UINT16 TileClutData;
 +
  UINT16 SpriteTP_Blend;
 +
  UINT8 Group; // 4 lsb bits only
 +
  UINT8 Layer;
 +
} SpriteTile;
 +
Destination X and Y are signed, this is used for the walkmesh information and the center of the background field.
 +
 +
Tile Color Lookup Table Data
 +
{
 +
  unsigned ZZ1:6;
 +
  unsigned ClutNumber;
 +
  unsigned ZZ2:6;
 +
} TileClutData;
 +
 +
Sprite Texture Page and Blending Mode data
 +
{
 +
  unsigned ZZ:9;
 +
  unsigned blending_mode:2;
 +
  unsigned page_y:1;
 +
  unsigned page_x:4;
 +
} SpriteTP_Blend;

Revision as of 01:58, 28 November 2006

Background Tile Map

The background tile map information on the PSX is actually stored in 2 files. The graphic tiles are in a MIM file with the same name as the DAT file. Both are needed to view the background data completely. This section covers just the Tile Map information and not how to decode the MIM data. The Tile Map consists of 4 subsections. The header for the tile map consists of 4 offsets which are relative to the begining of the section.

Offset Size Description
0x0000 DWORD Object Meta Data
0x0004 DWORD 1st layer Information
0x0008 DWORD Texture Page Data
0x000C DWORD Sprite Layer Information


Section 1

A list of data structures (size == 12 or 2 bytes). The first UINT16 indicates layer or not a layer.

struct {
 UINT16 Type;
 UINT32 ZZ1;
 UINT32 ZZ2;
 UINT16 TileCount;
} Section1LayerChange;
Type 0x7FFE is a sprite use Section 3 to find it's texture page.
Type 0x7FFF is the End of layer information Data Record.

Section 2

A series of Layer 1 tile data structures (basic background information)

struct {
 INT16 DestinationX;
 INT16 DestinationY;
 UINT8 TexPageSourceX;
 UINT8 TexPageSourceY;
 UINT16 TileData;
} Layer1Tile;

Destination X and Y are signed, this is used for the walkmesh information and the center of the background field. The only used portion of the tile data is:

{
 unsigned ZZ1:6;
 unsigned ClutNumber;
 unsigned ZZ2:6;
} TileData;

Section 3

A list of UINT16, bit fields, because the ordering of fields within such an object are unspecifiable in the C and C++ standards (IE the compilor can choose any way which it may be done the standard doesn't care), this structure will be shown (a BIT?) differently.

{
  unsigned ZZ:11; // 11 MSB
  unsigned page_y:1; // 
  unsigned page_x:4; // 4 LSB
}

Section 4

This section consists of the sprite data (2d data that is either non static or can be walked behind).

struct {
 INT16 DestinationX;
 INT16 DestinationY;
 UINT8 TexPageSourceX;
 UINT8 TexPageSourceY;
 UINT16 TileClutData;
 UINT16 SpriteTP_Blend;
 UINT8 Group; // 4 lsb bits only
 UINT8 Layer;
} SpriteTile;

Destination X and Y are signed, this is used for the walkmesh information and the center of the background field.

Tile Color Lookup Table Data

{
 unsigned ZZ1:6;
 unsigned ClutNumber;
 unsigned ZZ2:6;
} TileClutData;

Sprite Texture Page and Blending Mode data

{
  unsigned ZZ:9;
  unsigned blending_mode:2;
  unsigned page_y:1;
  unsigned page_x:4;
} SpriteTP_Blend;