Changes

Jump to navigation Jump to search

FF8/FileFormat DAT

5,833 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 ==
Optionnal Optional section, often empty.
== Section 5: A.I. Unknown ==
Maybe A.I. scriptsUnknown sequences.
=== Header ===
| 0
| 2 bytes
| Number of scriptssequences
|-
| 2
| nbScripts nbSequences * 2 bytes| Scripts Sequences Positions
|}
== Section 7: Informations & stats ==
TODO {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;"! style="background:rgb(interpreted at 94%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 sequencessequence + unknown data (can be empty).
== Section 11: Textures ==

Navigation menu