1
1
//------------------------------------------------
2
2
//--- 010 Editor v8.0 Binary Template
3
3
//
4
- // File:
4
+ // File: Xenoblade BDAT data file
5
5
// Authors:
6
6
// Version:
7
7
// Purpose:
11
11
// History:
12
12
//------------------------------------------------
13
13
14
- local int i;
15
-
16
- struct TextEntry(int size) {
17
- uchar Data[size];
14
+ enum <byte> ValueType
15
+ {
16
+ VT_None = 0,
17
+ UInt8 = 1,
18
+ UInt16 = 2,
19
+ UInt32 = 3,
20
+ Int8 = 4,
21
+ Int16 = 5,
22
+ Int32 = 6,
23
+ String = 7,
24
+ FP32 = 8
18
25
};
19
26
20
- struct BdatMember {
21
- short MemberDescOffset;
22
- short NextHashCollisionOffset;
23
- short NameOffset;
27
+ enum <byte> MemberType
28
+ {
29
+ MT_None = 0,
30
+ Scalar = 1,
31
+ Array = 2,
32
+ Flag = 3
24
33
};
25
34
26
- struct BdatMemberDesc {
27
- uchar Type;
28
- uchar ValType;
35
+ local int i;
36
+
37
+ typedef struct(int size) {
38
+ uchar Data[size];
39
+ } TextEntry;
40
+
41
+ typedef struct {
42
+ MemberType Type;
43
+ ValueType ValType;
29
44
ushort MemberOffset;
30
- if(Type == 2 )
45
+ if(Type == Array )
31
46
{
32
47
ushort ArrayLength;
33
48
}
34
- };
49
+ } BdatMemberDesc ;
35
50
36
- struct BdatId(int size){
51
+ typedef struct(int base) {
52
+ SetBackColor(cLtRed);
53
+ short MemberDescOffset;
54
+ short NextHashCollisionOffset;
55
+ short NameOffset;
56
+
57
+ SetBackColor(cAqua);
58
+ local int end = FTell();
59
+ FSeek(base + NameOffset);
60
+ string Name;
61
+
62
+ SetBackColor(cLtPurple);
63
+ FSeek(base + MemberDescOffset);
64
+ BdatMemberDesc Description;
65
+
66
+ FSeek(end);
67
+ } BdatMember <read=BdatMemberRead>;
68
+
69
+ string BdatMemberRead( BdatMember &m )
70
+ {
71
+ string s;
72
+ SPrintf( s, "%-6s %-6s %s", EnumToString(m.Description.Type), EnumToString(m.Description.ValType), m.Name);
73
+ return s;
74
+ }
75
+
76
+ typedef struct(int size){
37
77
if(size > 0) {
38
78
uchar Data[size];
39
79
}
40
- };
80
+ } BdatId ;
41
81
42
- struct BdatFile {
82
+ typedef struct {
43
83
local int base = FTell();
44
84
local int i;
45
85
SetBackColor(cAqua);
46
86
char ID[4];
47
- uint16 Field4 ;
87
+ uint16 Flags ;
48
88
uint16 NamesOffset;
49
89
uint16 ItemSize;
50
90
uint16 HashTableOffset;
@@ -59,34 +99,23 @@ struct BdatFile {
59
99
uint16 MemberTableOffset;
60
100
uint16 MemberCount;
61
101
62
- Printf("%i\n", BaseId);
63
102
FSeek(base + HashTableOffset);
64
103
SetBackColor(cGray);
65
- uint16 Hashes [HashTableLength];
104
+ uint16 HashLookupTable [HashTableLength];
66
105
67
106
FSeek(base + MemberTableOffset);
68
107
SetBackColor(cLtRed);
69
108
70
109
if(MemberCount > 0) {
71
- BdatMember Members[MemberCount];
72
- }
73
-
74
-
75
- for(i = 0; i < MemberCount; i++)
76
- {
77
- FSeek(base + Members[i].MemberDescOffset);
78
- SetBackColor(cLtPurple);
79
- BdatMemberDesc MemberDesc;
110
+ BdatMember Members(base)[MemberCount] <optimize=false>;
80
111
}
81
112
82
113
SetBackColor(cSilver);
83
114
FSeek(base + ItemTableOffset);
84
115
if(ItemSize > 0) {
85
116
BdatId Ids(ItemSize)[ItemCount] <optimize=false>;
86
117
}
87
- };
88
-
89
-
118
+ } BdatFile;
90
119
91
120
int32 FileCount;
92
121
int32 ArchiveSize;
0 commit comments