2024/07/28

RE4 EFF Documentation

https://docs.google.com/document/d/1vesS78d2KnZiYB1-wtkcB5washUtWJ3mZ9KtrycXFjA/edit

Arquivo referente aos efeitos do jogo. o arquivo é composto por 12 tabelas, No geral o arquivo é igual entre as versões UHD/PS2(2007), porem tem diferença entre as seguintes tabelas.
Table_5 (TPL Offsets) = o arquivo tpl é diferente entre as versões
Table_10 (Data Offset) = os modelos BIN/TPL são diferente entre as versões.
Table_6 (Texture Metadata) = a unica diferença aqui é que as entry do ps2 são 16 bytes, e no UHD são 32 bytes, porem esses 16 bytes a mais, são padding e sempre preenchido como 00

Header Do arquivo EFF

offset[0x00 a 0x03] MAGIC sempre 0B-00-00-00 (representa a quantidade de offsets)
offset[0x04 a 0x07] OFFSET = (0) Texture IDs      [Tables/Table_0_Room_Texture_IDs.txt]
offset[0x08 a 0x0B] OFFSET = (1) Effect IDs       [Tables/Table_1_Core_Texture_IDs.txt]
offset[0x0C a 0x0F] OFFSET = (2) EAR Link         [Tables/Table_2_EAR_Links.txt]
offset[0x10 a 0x13] OFFSET = (3) Unknown Table    [Tables/Table_3_Effect_Path_IDs.txt]
offset[0x14 a 0x17] OFFSET = (4) Model IDs        [Tables/Table_4_BIN_Model_IDs.txt]
offset[0x18 a 0x1B] OFFSET = (5) TPL Offsets      [Effect TPL Folder]
offset[0x1C a 0x1F] OFFSET = (6) Texture Metadata [Tables/TextureData.txt]
offset[0x20 a 0x23] OFFSET = (7) Effect 0 Type    [Effect 0 Folder]
offset[0x24 a 0x27] OFFSET = (8) Effect 1 Type    [Effect 1 Folder]
offset[0x28 a 0x2B] OFFSET = (9) Paths            [Tables/Paths.txt]
offset[0x2C a 0x2F] OFFSET = (10) Data Offset     [Effect Models folder]
// no UHD tem um padding de 16 bytes depois dessa tabela, no ps2 não.

Pares entre as tabela:
as tabelas tem parem entre si, então a quantidade tem que ser igual nas ambas
segue abaixo os pares abaixo:
tabelas 00, 05, 06
tabelas 01, 07
tabelas 02, 08
tabelas 04, 10
tabelas 03, 09 (tem pouca ocorrência dessas tabelas, então é difícil de confirmar)

Tabela 00: [Table_0_Room_Texture_IDs.txt]

offset[0x00 a 0x03]: Amount = quantidade de entry dessa tabela
depois vem seguido as entry uma depois da outra
cada Entry tem 8 bytes, sendo:
Offset[0x00 a 0x01] Room_Texture_ID (ushort)
offset[0x02 a 0x03] ??? Unknown (ushort) valor sempre 00
offset[0x04 a 0x05] ??? Unknown (ushort) valor sempre 00
offset[0x06 a 0x07] ??? Unknown (ushort) valor sempre 00
Nota: Room_Texture_ID é o mesmo ID que vai no campo "Texture ID"

arquivo: Table_0_Room_Texture_IDs.txt
Entry Count: 1
Entry 0: 0xC4  // identificador universal da Textura (não é o id da textura no arquivo pack)

Tabela 06: [Tables/TextureData.txt]

offset[0x00 a 0x03]: Amount = quantidade de entry dessa tabela
depois disso é uma sequencia de OFFSET que apontam para as entry dessa tabela.
referente as entry dessa tabela:
Elas tem 16 bytes de tamanha (no UHD tem mais 16 bytes de padding) 
TextureData Entry:
OFFSET[0x00 a 0x01]: Height
OFFSET[0x02 a 0x03]: Width
OFFSET[0x04 a 0x05]: Effect Height
OFFSET[0x06 a 0x07]: Effect Width
OFFSET[0x08 a 0x09]: Effect Texture Count
OFFSET[0x0A]: Offset[10] (não se sabe oque é)
OFFSET[0x0B]: Offset[11] (não se sabe oque é)
OFFSET[0x0C a 0x0F]: padding, sempre 00

Nota: no final dessa tabela no UHD pode ter os arquivos TPL, mais isso é uma "porquidade" que a capcom fez no arquivo.

Tabela 05: [
Effect TPL Folder]

Aqui é onde contem os arquivos TPL, não vou explica como é armazenado no arquivo EFF, pois isso é uma bagunça.
o importante é quem tenha a mesma quantidade que a tabela 00 e 06;

--------
Tabela 07 ou 08 [
Effect ? Folder]

Aqui as duas tabelas seguem a mesma estrutura de definição.
por mais que seja um sistema de grupo cada EffectEntry é uma coisa diferente, só estão em grupos para definir quando aquele conjunto de Efeitos vão ser ativos ou desativados:

Header:
offset[0x00 a 0x03]: Amount = quantidade de GroupEntry dessa tabela
depois disso é uma sequencia de OFFSET que apontam para as GroupEntry dessa tabela.

GroupEntry:
Tem 48 bytes de tamanho
offset[0x00 a 0x01]: Amount quantidade de "EffectEntry" (Effect Count)
offset[0x02 a 0x03]: ??? (Offset[X02])
offset[0x04 a 0x05]: ??? (Offset[X04])
offset[0x06 a 0x07]: ??? (Offset[X06]) 
offset[0x08 a 0x08]: ??? 
(Offset[X08])
offset[0x0A]: ??? 
(Offset[X0A]) geralmente 0xFE
offset[0x0B]: ??? (
Offset[X0B]) sempre 0x00
offset[0x0C a 0x0F]: Float Group Position X (Offset[X0C])
offset[0x10 a 0x13]: Float Group Position Y (Offset[X10]) 
offset[0x14 a 0x17]: Float Group Position Z (Offset[X14]) 
offset[0x18 a 0x1B]: Float Group Angle X (em degrees 0 a 360) (Offset[X18]) 
offset[0x1C a 0x1F]: Float Group Angle Y (em degrees 0 a 360) (Offset[X1C]) 
offset[0x20 a 0x23]: Float Group Angle Z (em degrees 0 a 360) (Offset[X20]) 
offset[0x24]: ??? (Offset[X24]) sempre 0x10 
offset[0x25 a 0x2F] sempre 0x00

depois disso vem em sequencia os "
EffectEntry"
que são 300 bytes de dados (0x12C)

//Aviso, peguei o nome dos campos da tool de EFF do Zatarita:

Effect 0 // esse é o índice da ordem no arquivo
offset[0x00]=  ID: 1 = esse campo é sempre 0x01
offset[0x01]=  ESP ID: 78 = tipo do efeito
offset[0x02]= Texture ID: 246 = ID da textura aplicado no efeito (nota, é o mesmo id definido na tabela 00,
nota2: esse id tambem é o mesmo id da table04, que vincula os modelos 3d)
offset[0x03]= ?????????
offset[0x04 a 0x05]= 
Time: 0 (ushort)
offset[0x06]= Parent: 0
offset[0x07]= Parent Part: 0xFE
offset[0x08 a 0x0B]= Flags: 0x0 (uint)
offset[0x0C a 0x0F]= Position X: -92885.1875  (float)
offset[0x10 a 0x13]= Position Y: 1404.5344  (float)
offset[0x14 a 0x17]= Position Z: -9848.6962  (float)
offset[0x18 a 0x1B]= Random Position X: 0  (float)
offset[0x1C a 0x1F]= Random Position Y: 0  (float)
offset[0x20 a 0x23]= Random Position Z: 0  (float)
offset[0x24 a 0x27]= Speed X: 0  (float)
offset[0x28 a 0x2B]= Speed Y: 0  (float)
offset[0x2C a 0x2F]= Speed Z: 0  (float)
offset[0x30 a 0x33]= Delta Speed: 0  (float)
offset[0x34 a 0x37]= Random Speed X: 0  (float)
offset[0x38 a 0x3B]= Random Speed Y: 0  (float)
offset[0x3C a 0x3F]= Random Speed Z: 0  (float)
offset[0x40 a 0x43]= Acceleration X: 0  (float)
offset[0x44 a 0x47]= Acceleration Y: 0  (float)
offset[0x48 a 0x4B]= Acceleration Z: 0  (float)
offset[0x4C a 0x4F]= Random Acceleration X: 0  (float)
offset[0x50 a 0x53]= Random Acceleration Y: 0  (float)
offset[0x54 a 0x57]= Random Acceleration Z: 0  (float)
offset[0x58 a 0x5B]= Rotation X: 0  (float)
offset[0x5C a 0x5F]= Rotation Y: 0  (float)
offset[0x60 a 0x63]= Rotation Z: 0  (float)
offset[0x64 a 0x67]= Random Rotation X: 0  (float)
offset[0x68 a 0x6B]= Random Rotation Y: 0  (float)
offset[0x6C a 0x6F]= Random Rotation Z: 0  (float)
offset[0x70 a 0x73]= Rotation Acceleration X: 0  (float)
offset[0x74 a 0x77]= Rotation Acceleration Y: 0  (float)
offset[0x78 a 0x7B]= Rotation Acceleration Z: 0  (float)
offset[0x7C a 0x7F]= Random Rotation Acceleration X: 0  (float)
offset[0x80 a 0x83]= Random Rotation Acceleration Y: 0  (float)
offset[0x84 a 0x87]= Random Rotation Acceleration Z: 0  (float)
offset[0x88 a 0x8B]= Width: 90  (float) = esse campo interfere no tamanho da textura e do modelo 3d
offset[0x8C a 0x8F]= Height: 90  (float) = o mesmo que de cima so que para a altura.
offset[0x90 a 0x93]= Random Size: 0  (float)
offset[0x94 a 0x97]= Grow: 0  (float)
offset[0x98 a 0x9B]= Delta Grow: 0  (float)
offset[0x9C]= R: 0x80
offset[0x9D]= G: 0x80
offset[0x9E]= B: 0x80
offset[0x9F]= A: 0xFF
offset[0xA0 a 0xA3]= Delta R: 1  (float)
offset[0xA4 a 0xA7]= Delta G: 1  (float)
offset[0xA8 a 0xAB]= Delta B: 1  (float)
offset[0xAC a 0xAF]= Delta A: 1  (float)
offset[0xB0 a 0xB1]= Delta Color Max Frame: 0  (ushort)
offset[0xB2 a 0xB3]= Delta Color Start Frame: 0  (ushort)
offset[0xB4 a 0xB5]= ???????????????  (ushort)
offset[0xB6 a 0xB7]= Delta Size Start Frame: 0  (ushort)
offset[0xB8 a 0xB9]= Lifetime: 0  (ushort)
offset[0xBA a 0xBD]= Animation Speed: 0  (uint)
offset[0xBE a 0xBF]= ?????????????  (ushort)
offset[0xC0]= Release Time: 0  (byte)
offset[0xC1 a 0xC2]= Blend: 0  (ushort)
offset[0xC3]= Simulation Type: 0
offset[0xC4]= Simulation Power: 0
offset[0xC5]= Mask Texture ID: 0
offset[0xC6]= Value In: 0
offset[0xC7]= Value Out: 0
offset[0xC8]= Work 0: 0
offset[0xC9]= Work 1: 0
offset[0xCA]= Work 2: 0
offset[0xCB]= Work 3: 0
offset[0xCC a 0xCF]= Work 4: 0  (uint)
offset[0xD0 a 0xD3]= Work 5: 0  (uint)
offset[0xD4 a 0xD7]= Work 6: 0  (uint)
offset[0xD8 a 0xDB]= Vector 0 X: 0  (float)
offset[0xDC a 0xDF]= Vector 0 Y: 0  (float)
offset[0xE0 a 0xE3]= Vector 0 Z: 0  (float)
offset[0xE4 a 0xE7]= Vector 1 X: 0  (float)
offset[0xE8 a 0xEB]= Vector 1 Y: 0  (float)
offset[0xEC a 0xEF]= Vector 1 Z: 0  (float)
offset[0xF0 a 0xF3]= Vector 2 X: 0  (float)
offset[0xF4 a 0xF7]= Vector 2 Y: 0  (float)
offset[0xF8 a 0xFB]= Vector 2 Z: 0  (float)
offset[0xFC]= Spline 0: 0
offset[0xFD]= Spline 1: 0
offset[0xFE]= Spline 2: 0
offset[0xFF]= Spline 3: 0
offset[0x100 a 0x103]= ???????????   (uint)
offset[0x104]= Path Own: 0
offset[0x105]= Path Number: 0
offset[0x106]= Path Start: 0
offset[0x107]= Path Random: 0
offset[0x108]= Effect Type: 0
offset[0x109]= Control ID: 0
offset[0x10A a 0x10B]= Control Flag: 0  (ushort)
offset[0x10C]= Control Interval: 0
offset[0x10D]= Control Number: 0
offset[0x10E]= Control RP: 0
offset[0x10F]= ??????????????
offset[0x110 a 0x111]= Control Life: 0  (ushort)
offset[0x112 a 0x113]= ???????????  (ushort)
offset[0x114 a 0x115]= ???????????  (ushort)
offset[0x116 a 0x117]= ???????????  (ushort)
offset[0x118 a 0x11B]= Control Path Scale X: 0  (float) aviso: na tool do zatarita esse campo esta nos offset errados;
offset[0x11C a 0x11F]= Control Path Scale Y: 0  (float) aviso: na tool do zatarita esse campo esta nos offset errados;
offset[0x120 a 0x123]= Control Path Scale Z: 0  (float) aviso: na tool do zatarita esse campo esta nos offset errados;
offset[0x124]= Control Path Delta Size: 0
offset[0x125]= Control Path Delta Speed: 0
offset[0x126]= Control Path Delta Alpha: 0
offset[0x127]= Control Path Delta Interval: 0
offset[0x128]= Control Path Random Interval: 0
offset[0x129]= Control Path Rotation X: 0
offset[0x12A]= Control Path Rotation Y: 0
offset[0x12B]= Control Path Flag: 0 
//Fim do EffectEntry

Tabela 02 [Table_2_EAR_Links.txt]
offset[0x00 a 0x03]: Amount = quantidade de entry dessa tabela
depois vem seguido as entry uma depois da outra
cada Entry tem 8 bytes, sendo:
offset[0x00 a 0x01]: 
Effect Group: (index, identificador único do group da table08)
offset[0x02 a 0x03]: EAR Link ID: (índice de conexão com uma entry do arquivo EAR).
offset[0x04 a 0x07]: ???? : (desconhecido valor sempre 00)
(questão, fico na duvidada do porque ter um index, sendo que a própria ordem poderia ser um, e no que esse index é associado)

Tabela 01 [Table_1_Core_Texture_IDs.txt]
offset[0x00 a 0x03]: Amount = quantidade de entry dessa tabela
depois vem seguido as entry uma depois da outra
cada Entry tem 8 bytes, sendo:
Offset[0x00 a 0x01] CoreTextureID (ushort) ??? o correto seria um index do group da table 07
offset[0x02 a 0x03] ??? Unknown (ushort) valor sempre 00
offset[0x04 a 0x05] ??? Unknown (ushort) valor sempre 00
offset[0x06 a 0x07] ??? Unknown (ushort) valor sempre 00

Arquivo: Table_1_Core_Texture_IDs.txt
Entry Count: 1
Entry 0: 0x0

Tabela 04 [Table_4_BIN_Model_IDs.txt]
offset[0x00 a 0x03]: Amount = quantidade de entry dessa tabela
depois vem seguido as entry uma depois da outra
cada Entry tem 8 bytes, sendo:
Offset[0x00 a 0x01] Room_Model_ID (ushort)
offset[0x02 a 0x03] ??? Unknown (ushort) valor sempre 00
offset[0x04 a 0x05] ??? Unknown (ushort) valor sempre 00
offset[0x06 a 0x07] ??? Unknown (ushort) valor sempre 00
Nota: Room_Model_ID é o mesmo ID que vai no campo "
Texture ID"

arquivo: Table_0_Room_Texture_IDs.txt
Entry Count: 4
Entry 0: 0xA3  // identificador universal do modelo 3d (usar mesmo valor no campo "Texture ID")


Nenhum comentário:

Postar um comentário