Skip to content

Commit 1422e6f

Browse files
authored
[ZH][BFME] Support BINORMAL & TANGENT chunks from BFME (#736)
1 parent cbb2b40 commit 1422e6f

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

.github/workflows/valid-tags.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[GEN]
22
[ZH]
3+
[BFME]
34
[CMAKE]
45
[GITHUB]
56
[CORE]

GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/w3d_file.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,11 @@ April 5, 2025
315315
Added W3D_CHUNK_FX_SHADERS and subchunks, which were added in BFME2. These
316316
chunks are used to define usage of a specific shader and pass params.
317317
318+
April 21, 2025
319+
320+
Added W3D_CHUNK_VERTEX_TANGENT and W3D_CHUNK_VERTEX_BINORMAL chunks. These are used to define
321+
normal mapping information for a mesh. They were added in BFME2.
322+
318323
********************************************************************************/
319324

320325

@@ -397,6 +402,9 @@ enum {
397402
W3D_CHUNK_DEFORM_KEYFRAME =0x0000005A, // a keyframe of deform information in the set
398403
W3D_CHUNK_DEFORM_DATA =0x0000005B, // deform information about a single vertex
399404

405+
W3D_CHUNK_VERTEX_TANGENTS = 0x00000060, // array of tangents (array of W3dVectorStruct's)
406+
W3D_CHUNK_VERTEX_BINORMALS = 0x00000061, // array of binormals (array of W3dVectorStruct's)
407+
400408
W3D_CHUNK_PS2_SHADERS =0x00000080, // Shader info specific to the Playstation 2.
401409

402410
W3D_CHUNK_AABTREE =0x00000090, // Axis-Aligned Box Tree for hierarchical polygon culling

GeneralsMD/Code/Tools/wdump/chunk_d.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,36 @@ void ChunkTableClass::List_W3D_CHUNK_SHADERS(ChunkItem * Item,CListCtrl *List)
10351035
}
10361036
}
10371037

1038+
void ChunkTableClass::List_W3D_CHUNK_VERTEX_TANGENTS(ChunkItem *Item, CListCtrl *List) {
1039+
W3dVectorStruct *data;
1040+
data = (W3dVectorStruct *) Item->Data;
1041+
int Counter = 0;
1042+
int index = 0;
1043+
void *max = (char *) Item->Data + Item->Length;
1044+
int counter = 0;
1045+
char buf[256];
1046+
while(data < max) {
1047+
sprintf(buf, "Tangent[%d]", counter++);
1048+
AddItem(List, Counter,buf, data);
1049+
data++;
1050+
}
1051+
}
1052+
1053+
void ChunkTableClass::List_W3D_CHUNK_VERTEX_BINORMALS(ChunkItem *Item, CListCtrl *List) {
1054+
W3dVectorStruct *data;
1055+
data = (W3dVectorStruct *) Item->Data;
1056+
int Counter = 0;
1057+
int index = 0;
1058+
void *max = (char *) Item->Data + Item->Length;
1059+
int counter = 0;
1060+
char buf[256];
1061+
while(data < max) {
1062+
sprintf(buf, "Binormal[%d]", counter++);
1063+
AddItem(List, Counter,buf, data);
1064+
data++;
1065+
}
1066+
}
1067+
10381068
void ChunkTableClass::List_W3D_CHUNK_PS2_SHADERS(ChunkItem * Item,CListCtrl *List)
10391069
{
10401070
struct W3dPS2ShaderStruct *shader = (W3dPS2ShaderStruct *)Item->Data;
@@ -2143,6 +2173,8 @@ ChunkTableClass::ChunkTableClass() {
21432173
NewType( W3D_CHUNK_FX_SHADER,"W3D_CHUNK_FX_SHADER",List_W3D_CHUNK_FX_SHADER, true);
21442174
NewType( W3D_CHUNK_FX_SHADER_INFO, "W3D_CHUNK_FX_SHADER_INFO", List_W3D_CHUNK_FX_SHADER_INFO);
21452175
NewType( W3D_CHUNK_FX_SHADER_CONSTANT, "W3D_CHUNK_FX_SHADER_CONSTANT", List_W3D_CHUNK_FX_SHADER_CONSTANT);
2176+
NewType( W3D_CHUNK_VERTEX_TANGENTS, "W3D_CHUNK_VERTEX_TANGENTS", List_W3D_CHUNK_VERTEX_TANGENTS);
2177+
NewType( W3D_CHUNK_VERTEX_BINORMALS, "W3D_CHUNK_VERTEX_BINORMALS", List_W3D_CHUNK_VERTEX_BINORMALS);
21462178
NewType( W3D_CHUNK_PS2_SHADERS,"W3D_CHUNK_PS2_SHADERS",List_W3D_CHUNK_PS2_SHADERS);
21472179

21482180
NewType( W3D_CHUNK_VERTEX_MATERIALS, "W3D_CHUNK_VERTEX_MATERIALS",List_W3D_CHUNK_VERTEX_MATERIALS,true);

GeneralsMD/Code/Tools/wdump/chunk_d.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ class ChunkTableClass {
111111
static void List_W3D_CHUNK_VERTEX_SHADE_INDICES(ChunkItem * Item,CListCtrl *List);
112112
static void List_W3D_CHUNK_MATERIAL_INFO(ChunkItem * Item,CListCtrl *List);
113113

114+
static void List_W3D_CHUNK_VERTEX_TANGENTS(ChunkItem *Item, CListCtrl *List);
115+
static void List_W3D_CHUNK_VERTEX_BINORMALS(ChunkItem *Item, CListCtrl *List);
116+
114117
static void List_W3D_CHUNK_SHADERS(ChunkItem * Item,CListCtrl *List);
115118
static void List_W3D_CHUNK_PS2_SHADERS(ChunkItem * Item,CListCtrl *List);
116119
static void List_W3D_CHUNK_FX_SHADERS(ChunkItem * Item,CListCtrl *List);

0 commit comments

Comments
 (0)