14
14
// You should have received a copy of the GNU General Public License
15
15
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
17
- using HelixToolkit . SharpDX . Core ;
18
17
using System ;
19
18
using System . Collections . Generic ;
20
19
using System . IO ;
21
20
using System . Threading . Tasks ;
22
21
using xivModdingFramework . General . Enums ;
23
- using xivModdingFramework . Helpers ;
24
22
using xivModdingFramework . Items ;
25
23
using xivModdingFramework . Items . DataContainers ;
26
24
using xivModdingFramework . Items . Enums ;
27
25
using xivModdingFramework . Items . Interfaces ;
28
- using xivModdingFramework . Models . FileTypes ;
29
- using xivModdingFramework . Resources ;
30
26
using xivModdingFramework . SqPack . FileTypes ;
31
27
using xivModdingFramework . Variants . DataContainers ;
32
28
@@ -130,19 +126,35 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
130
126
//weapons and monsters do not have variant sets
131
127
if ( imcData . TypeIdentifier == ImcType . NonSet )
132
128
{
133
- // Identifier used by weapons and monsters.
129
+ // This type uses the first short for both Variant and VFX.
130
+ byte variant = br . ReadByte ( ) ;
131
+ byte unknown = br . ReadByte ( ) ;
132
+ ushort mask = br . ReadUInt16 ( ) ;
133
+ ushort alwaysZero = br . ReadUInt16 ( ) ;
134
+
134
135
imcData . DefaultSubset . Add ( new XivImc
135
136
{
136
- Variant = br . ReadUInt16 ( ) ,
137
- Mask = br . ReadUInt16 ( ) ,
138
- Vfx = br . ReadUInt16 ( )
137
+ Variant = variant ,
138
+ Unknown = unknown ,
139
+ Mask = mask ,
140
+ Vfx = variant
139
141
} ) ;
140
142
141
143
for ( var i = 0 ; i < subsetCount ; i ++ )
142
144
{
143
- var subset = new List < XivImc > ( ) {
144
- new XivImc { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) }
145
+ variant = br . ReadByte ( ) ;
146
+ unknown = br . ReadByte ( ) ;
147
+ mask = br . ReadUInt16 ( ) ;
148
+ alwaysZero = br . ReadUInt16 ( ) ;
149
+
150
+ var newEntry = new XivImc
151
+ {
152
+ Variant = variant ,
153
+ Unknown = unknown ,
154
+ Mask = mask ,
155
+ Vfx = variant
145
156
} ;
157
+ var subset = new List < XivImc > ( ) { newEntry } ;
146
158
}
147
159
}
148
160
else if ( imcData . TypeIdentifier == ImcType . Set )
@@ -151,15 +163,15 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
151
163
imcData . DefaultSubset = new List < XivImc > ( )
152
164
{
153
165
new XivImc
154
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
166
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
155
167
new XivImc
156
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
168
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
157
169
new XivImc
158
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
170
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
159
171
new XivImc
160
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
172
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
161
173
new XivImc
162
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
174
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
163
175
} ;
164
176
165
177
for ( var i = 0 ; i < subsetCount ; i ++ )
@@ -168,17 +180,16 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
168
180
var imcGear = new List < XivImc > ( )
169
181
{
170
182
new XivImc
171
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
183
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
172
184
new XivImc
173
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
185
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
174
186
new XivImc
175
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
187
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
176
188
new XivImc
177
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
189
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
178
190
new XivImc
179
- { Variant = br . ReadUInt16 ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
191
+ { Variant = br . ReadByte ( ) , Unknown = br . ReadByte ( ) , Mask = br . ReadUInt16 ( ) , Vfx = br . ReadUInt16 ( ) } ,
180
192
} ;
181
-
182
193
imcData . SubsetList . Add ( imcGear ) ;
183
194
}
184
195
} else
@@ -252,14 +263,14 @@ public async Task SaveFullImcInfo(FullImcInfo info, string path, string itemName
252
263
// The rest of this is easy, it's literally just post all the sets in order.
253
264
foreach ( var entry in info . DefaultSubset )
254
265
{
255
- data . AddRange ( entry . GetBytes ( ) ) ;
266
+ data . AddRange ( entry . GetBytes ( info . TypeIdentifier ) ) ;
256
267
}
257
268
258
269
foreach ( var set in info . SubsetList )
259
270
{
260
271
foreach ( var entry in set )
261
272
{
262
- data . AddRange ( entry . GetBytes ( ) ) ;
273
+ data . AddRange ( entry . GetBytes ( info . TypeIdentifier ) ) ;
263
274
}
264
275
}
265
276
0 commit comments