Skip to content

Commit 9ab18e1

Browse files
committed
- Fixed Type 1 IMC Entries not having correct VFX Data
- Removed Unnecessary Usings
1 parent 260ba51 commit 9ab18e1

File tree

2 files changed

+33
-14
lines changed

2 files changed

+33
-14
lines changed

xivModdingFramework/Variants/DataContainers/XivImc.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System.Collections.Generic;
2020
using System.Linq;
2121
using xivModdingFramework.Helpers;
22+
using xivModdingFramework.Variants.FileTypes;
2223

2324
namespace xivModdingFramework.Variants.DataContainers
2425
{
@@ -54,12 +55,22 @@ public class XivImc
5455
/// Returns the raw bytes that make up this IMC entry.
5556
/// </summary>
5657
/// <returns></returns>
57-
public byte[] GetBytes()
58+
public byte[] GetBytes(ImcType type)
5859
{
5960
var bytes = new List<byte>();
6061
bytes.AddRange(BitConverter.GetBytes(Variant));
6162
bytes.AddRange(BitConverter.GetBytes(Mask));
62-
bytes.AddRange(BitConverter.GetBytes(Vfx));
63+
if (type == ImcType.NonSet)
64+
{
65+
// Always 0 for non-set entries, their VFX number is the
66+
// same as their Material Variant #.
67+
bytes.AddRange(BitConverter.GetBytes(((ushort)0)));
68+
}
69+
else
70+
{
71+
// Actual VFX number.
72+
bytes.AddRange(BitConverter.GetBytes(Vfx));
73+
}
6374
return bytes.ToArray();
6475
}
6576

xivModdingFramework/Variants/FileTypes/Imc.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,15 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
using HelixToolkit.SharpDX.Core;
1817
using System;
1918
using System.Collections.Generic;
2019
using System.IO;
2120
using System.Threading.Tasks;
2221
using xivModdingFramework.General.Enums;
23-
using xivModdingFramework.Helpers;
2422
using xivModdingFramework.Items;
2523
using xivModdingFramework.Items.DataContainers;
2624
using xivModdingFramework.Items.Enums;
2725
using xivModdingFramework.Items.Interfaces;
28-
using xivModdingFramework.Models.FileTypes;
29-
using xivModdingFramework.Resources;
3026
using xivModdingFramework.SqPack.FileTypes;
3127
using xivModdingFramework.Variants.DataContainers;
3228

@@ -130,19 +126,31 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
130126
//weapons and monsters do not have variant sets
131127
if (imcData.TypeIdentifier == ImcType.NonSet)
132128
{
133-
// Identifier used by weapons and monsters.
129+
// This type uses the first short for both Variant and VFX.
130+
var variantAndVfx = br.ReadUInt16();
131+
var mask = br.ReadUInt16();
132+
var alwaysZero = br.ReadUInt16();
133+
134134
imcData.DefaultSubset.Add(new XivImc
135135
{
136-
Variant = br.ReadUInt16(),
137-
Mask = br.ReadUInt16(),
138-
Vfx = br.ReadUInt16()
136+
Variant = variantAndVfx,
137+
Mask = mask,
138+
Vfx = variantAndVfx
139139
});
140140

141141
for (var i = 0; i < subsetCount; i++)
142142
{
143-
var subset = new List<XivImc>() {
144-
new XivImc {Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()}
143+
variantAndVfx = br.ReadUInt16();
144+
mask = br.ReadUInt16();
145+
alwaysZero = br.ReadUInt16();
146+
147+
var newEntry = new XivImc
148+
{
149+
Variant = variantAndVfx,
150+
Mask = mask,
151+
Vfx = variantAndVfx
145152
};
153+
var subset = new List<XivImc>() { newEntry };
146154
}
147155
}
148156
else if(imcData.TypeIdentifier == ImcType.Set)
@@ -252,14 +260,14 @@ public async Task SaveFullImcInfo(FullImcInfo info, string path, string itemName
252260
// The rest of this is easy, it's literally just post all the sets in order.
253261
foreach(var entry in info.DefaultSubset)
254262
{
255-
data.AddRange(entry.GetBytes());
263+
data.AddRange(entry.GetBytes(info.TypeIdentifier));
256264
}
257265

258266
foreach(var set in info.SubsetList)
259267
{
260268
foreach (var entry in set)
261269
{
262-
data.AddRange(entry.GetBytes());
270+
data.AddRange(entry.GetBytes(info.TypeIdentifier));
263271
}
264272
}
265273

0 commit comments

Comments
 (0)