Changes

Jump to navigation Jump to search

FF8/FileFormat DAT

7,092 bytes added, 05:24, 23 May 2019
m
18 revisions imported
By Mirex, JWP , random_npc and myst6re.Edit: We now know the animation and skeleton- see https://github.com/MaKiPL/OpenVIII/blob/4ac151daad7cd1475eb0694dd0715bc35d7a4b39/FF8/debug_battleDat.cs
== Header ==
|-
|style="background:rgb(255,255,204)" | 2
|style="background:rgb(255,255,204)" | 6 bytes|style="background:rgb(255,255,204)" | Unknown|-| 8| s16f (divide by 4096f)| scaleX |-| 10| s16f (divide by 4096f)| scale -Z|-| 12| s16f (divide by 4096f)| scale Y|-|style="background:rgb(255,255,204)" | 14 |style="background:rgb(255,255,204)" | 2 bytes
|style="background:rgb(255,255,204)" | Unknown
|-
|-
| 2
| 2 bytess16f (divide by 4096f)| Bone size(?)|-| 4| s16f (divide by 4096f)| unknown, multiplied by 360f|-| 6| s16f (divide by 4096f)| unknown, multiplied by 360f|-| 8| s16f (divide by 4096f)| unknown, multiplied by 360f|-| 10| s16f (divide by 4096f)| unknown|-| 12| s16f (divide by 4096f)| unknown|-| 14| s16f (divide by 4096f)| unknown
|-
|style="background:rgb(255,255,204)" | 416|style="background:rgb(255,255,204)" | 44 28 bytes
|style="background:rgb(255,255,204)" | Unknown (often empty)
|}
| nbObjects * 4 bytes
| Object Positions
|-
| 4 + nbObjects * 4
| Varies
| Object Data (see below)
|-
| Varies
| 4 bytes
| Total count of vertices
|}
| 2
| Varies * NbVerticesData
| Vertices Data(see below)
|-
| Varies
| 4 - (absolutePosition % 4)
| Padding (0x00)
|-
| Varies
| 8 bytes
| Padding (0x00)Always empty
|-
| Varies
| numQuads * 20 bytes
| Quads
|-
| Varies
| 4 bytes
| Total number of vertices (may be not visible)
|}
==== Useful structures ====
typedef struct vertice {
sint16 x, y, z;
} vertice;
(sizeof = 6)
typedef struct triangle { uint16 vertex_indexes[3];// vertex_indexes[0] &= 0xFFF, other bits are unknown
uint8 texCoords1[2];
uint8 texCoords2[2];
uint8 texCoords3[2];
uint16 u; // textureID_related2
} triangle;
(sizeof = 16)
typedef struct quad { uint16 vertex_indexes[4];// vertex_indexes[0] &= 0xFFF, other bits are unknown
uint8 texCoords1[2];
uint16 textureID_related;
uint8 texCoords3[2];
uint8 texCoords4[2];
} triangle;
(sizeof = 20)
| nbAnimations * 4 bytes
| Animations Positions
|}
 
=== Animation ===
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 1 byte
| Number of frames
|-
|style="background:rgb(255,255,204)" | 1
|style="background:rgb(255,255,204)" | Varies
|style="background:rgb(255,255,204)" | Unknown
|}
 
== Section 4: Unknown ==
 
Optional section, often empty.
 
== Section 5: Unknown ==
 
Unknown sequences.
 
=== Header ===
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 2 bytes
| Number of sequences
|-
| 2
| nbSequences * 2 bytes
| Sequences Positions
|}
 
== Section 6: unknown ==
 
Can be empty.
 
== Section 7: Informations & stats ==
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 24 bytes
| Monster name
|-
| 24
| 4 bytes
| HP values
|-
| 28
| 4 bytes
| Str values
|-
| 32
| 4 bytes
| Vit values
|-
| 36
| 4 bytes
| Mag values
|-
| 40
| 4 bytes
| Spr values
|-
| 44
| 4 bytes
| Spd values
|-
| 48
| 4 bytes
| Eva values
|-
| 52
| 16*4 bytes
| Abilities, low level
|-
| 116
| 16*4 bytes
| Abilities, med level
|-
| 180
| 16*4 bytes
| Abilities, high level
|-
| 244
| 1 byte
| Med level start
|-
| 245
| 1 byte
| High level start
|-
|style="background:rgb(255,255,204)" | 246
|style="background:rgb(255,255,204)" | 1 byte
|style="background:rgb(255,255,204)" | Unknown (flags, 3 bits used)
|-
| 247
| 1 byte
| [LSB] Zombie / Fly / zz1 / zz2 / zz3 / Auto-Reflect / Auto-Shell / Auto-Protect [MSB]
|-
| 248
| 3 bytes
| Cards (low/med/high)
|-
| 251
| 3 bytes
| Devour (low/med/high)
|-
| 254
| 1 byte
| [LSB] zz1 / zz2 / unused / unused / unused / unused / Diablos missed / Always obtains card [MSB]
|-
|style="background:rgb(255,255,204)" | 255
|style="background:rgb(255,255,204)" | 1 byte
|style="background:rgb(255,255,204)" | Unknown (flags, 4 bits used)
|-
| 256
| 2 bytes
| Extra EXP
|-
| 258
| 2 bytes
| EXP
|-
| 260
| 8 bytes
| Draw (low)
|-
| 268
| 8 bytes
| Draw (med)
|-
| 276
| 8 bytes
| Draw (high)
|-
| 284
| 8 bytes
| Mug (low)
|-
| 292
| 8 bytes
| Mug (med)
|-
| 300
| 8 bytes
| Mug (high)
|-
| 308
| 8 bytes
| Drop (low)
|-
| 316
| 8 bytes
| Drop (med)
|-
| 324
| 8 bytes
| Drop (high)
|-
| 332
| 1 byte
| Mug rate
|-
| 333
| 1 byte
| Drop rate
|-
| 334
| 1 byte
| Padding (0x00)
|-
| 335
| 1 byte
| APs
|-
|style="background:rgb(255,255,204)" | 336
|style="background:rgb(255,255,204)" | 16 bytes
|style="background:rgb(255,255,204)" | Unknown
|-
| 352
| 8 bytes
| Elemental resistance<br/>(Fire, Ice, Thunder, Earth, Poison, Wind, Water, Holy)
|-
| 360
| 20 bytes
| Mental resistance<br/>
(Death, Poison, Petrify, Darkness,<br/>
Silence, Beserk, Zombie, Sleep,<br/>
Haste, Slow, Stop, Regen,<br/>
Reflect, Doom, Slow Petrify, Float,<br/>
Confuse, Drain, Expulsion, ???)
|}
 
=== Abilities ===
 
typedef struct {
uint8 kernel_id;
uint8 unknown;
uint16 ability_id;
}
 
kernel_id is the used table in kernel.bin. May be 0x02 (= magic), 0x04 (= item) or 0x08 (= monster ability). ability_id is the ability in the selected kernel table.
 
=== Draw/mug/drop ===
 
typedef struct {
uint8 id_1; // magic_id for draw, item_id for mug & drop
uint8 qty_1; // quantities are always 0 for draw
uint8 id_2;
uint8 qty_2;
uint8 id_3;
uint8 qty_3;
uint8 id_4;
uint8 qty_4;
}
 
== Section 8: Battle scripts/AI ==
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 4 bytes
| Number of sub-sections
|-
| 4
| 4 bytes
| Offset to AI sub-section
|-
| 8
| 4 bytes
| Offset to text offsets
|-
| 12
| 4 bytes
| Offset to text sub-section
|}
 
=== AI ===
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 4 bytes
| Offset to init code
|-
| 4
| 4 bytes
| Offset to code executed at ennemy's turn
|-
| 8
| 4 bytes
| Offset to counterattack code
|-
| 12
| 4 bytes
| Offset to death code
|-
|style="background:rgb(255,255,204)" | 16
|style="background:rgb(255,255,204)" | 4 bytes
|style="background:rgb(255,255,204)" | Unknown offset
|}
 
=== Texts ===
 
Text offsets is a list of text positions (2 bytes each) in the text sub-section.
 
== Section 9: Sounds ==
 
Contains AKAO sequences (can be empty).
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 2 bytes
| Number of AKAOs
|-
| 2
| nbAKAOs * 2 bytes
| AKAOs Positions
|-
| 2 + nbAKAOs * 2
| 2 bytes
| End of section 9
|-
| 4 + nbAKAOs * 2
| Varies * nbAKAOs
| AKAOs
|}
 
 
== Section 10: Sounds/Unknown ==
 
Contains AKAO sequence + unknown data (can be empty).
 
== Section 11: Textures ==
 
Contains some [[PSX/TIM_format|TIMs]] with size 128x128 (8bit paletized).
 
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"
! style="background:rgb(204,204,204)" | Offset
! style="background:rgb(204,204,204)" | Length
! style="background:rgb(204,204,204)" | Description
|-
| 0
| 4 bytes
| Number of TIMs
|-
| 4
| nbTIMs * 4 bytes
| TIMs Positions
|-
| 4 + nbTIMs * 4
| 4 bytes
| End of file
|-
| 8 + nbTIMs * 4
| Varies * nbTIMs
| TIMs
|}

Navigation menu