Skip to content

Commit 58dbf15

Browse files
committed
Update 2.0.12.10
2 parents 260ba51 + 6f1a7b0 commit 58dbf15

File tree

10 files changed

+104
-47
lines changed

10 files changed

+104
-47
lines changed

xivModdingFramework/Items/Categories/Companions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ public async Task<List<XivPet>> GetUncachedPetList()
288288
{
289289
407, 408, 409, 410, 411, 412, 413,
290290
414, 415, 416, 417, 418, 537, 618,
291-
1027, 1028, 1430, 1930, 2023
291+
1027, 1028, 1430, 1930, 2023, 2619
292292
};
293293

294294
// A dictionary consisting of <model ID, Pet Name>
@@ -304,6 +304,7 @@ public async Task<List<XivPet>> GetUncachedPetList()
304304
{7007, XivStrings.Sephirot_Egi},
305305
{7102, XivStrings.Bahamut_Egi},
306306
{7103, XivStrings.Placeholder_Egi},
307+
{7105, XivStrings.Seraph}
307308
};
308309

309310
var modelCharaEx = await XivModelChara.GetModelCharaData(_gameDirectory);

xivModdingFramework/Materials/FileTypes/Mtrl.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,11 @@ public async Task<XivMtrl> GetMtrlData(IItemModel itemModel, XivRace race, char
185185
}
186186

187187
var mtrlData = await GetMtrlData(mtrlOffset, mtrlStringPath, dxVersion);
188-
mtrlData.hasVfx = true;
189188

189+
if (mtrlPath.HasVfx)
190+
{
191+
mtrlData.hasVfx = true;
192+
}
190193

191194
return mtrlData;
192195
}

xivModdingFramework/Models/FileTypes/Sklb.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public Sklb(DirectoryInfo gameDirectory, XivDataFile dataFile)
6161
/// <param name="model">The model we are getting the skeleton for</param>
6262
public async Task CreateSkelFromSklb(IItem item, XivMdl model)
6363
{
64-
var hasAssetcc = File.Exists(Directory.GetCurrentDirectory() + "\\AssetCc2.exe");
64+
var hasAssetcc = File.Exists(Directory.GetCurrentDirectory() + "\\NotAssetCc.exe");
6565

6666
if (hasAssetcc)
6767
{
@@ -104,8 +104,8 @@ public async Task CreateSkelFromSklb(IItem item, XivMdl model)
104104
{
105105
StartInfo = new ProcessStartInfo
106106
{
107-
FileName = Directory.GetCurrentDirectory() + "/AssetCc2.exe",
108-
Arguments = "-s \"" + skelLoc + sklbName + ".sklb\" \"" + skelLoc + sklbName + ".xml\"",
107+
FileName = Directory.GetCurrentDirectory() + "/NotAssetCc.exe",
108+
Arguments = "\"" + skelLoc + sklbName + ".sklb\" \"" + skelLoc + sklbName + ".xml\"",
109109
RedirectStandardOutput = true,
110110
UseShellExecute = false,
111111
CreateNoWindow = true
@@ -120,7 +120,7 @@ public async Task CreateSkelFromSklb(IItem item, XivMdl model)
120120
}
121121
else
122122
{
123-
throw new FileNotFoundException("AssetCc2 could not be found.");
123+
throw new FileNotFoundException("NotAssetCc could not be found.");
124124
}
125125
}
126126

xivModdingFramework/Models/ModelTextures/ModelTexture.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,25 @@ await Task.Run(() =>
222222

223223
if (multiPixels != null)
224224
{
225-
diffR = multiPixels[i - 3];
226-
diffG = multiPixels[i - 3];
227-
diffB = multiPixels[i - 3];
225+
if (materialType.Equals("hair"))
226+
{
227+
if (multiPixels.Length > i)
228+
{
229+
specR = multiPixels[i - 3];
230+
specG = multiPixels[i - 2];
231+
specB = multiPixels[i - 1];
232+
}
233+
}
234+
else
235+
{
236+
diffR = multiPixels[i - 3];
237+
diffG = multiPixels[i - 3];
238+
diffB = multiPixels[i - 3];
228239

229-
specR = multiPixels[i - 1];
230-
specG = multiPixels[i - 1];
231-
specB = multiPixels[i - 1];
240+
specR = multiPixels[i - 1];
241+
specG = multiPixels[i - 1];
242+
specB = multiPixels[i - 1];
243+
}
232244
}
233245
else
234246
{

xivModdingFramework/Resources/XivStrings.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

xivModdingFramework/Resources/XivStrings.fr.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,9 @@
336336
<data name="Selene" xml:space="preserve">
337337
<value>Selene</value>
338338
</data>
339+
<data name="Seraph" xml:space="preserve">
340+
<value>Séraphin</value>
341+
</data>
339342
<data name="Soul_Crystal" xml:space="preserve">
340343
<value>Cristal d'âme</value>
341344
</data>

xivModdingFramework/Resources/XivStrings.ja.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,9 @@
336336
<data name="Selene" xml:space="preserve">
337337
<value>フェアリー・セレネ</value>
338338
</data>
339+
<data name="Seraph" xml:space="preserve">
340+
<value>セラフィム</value>
341+
</data>
339342
<data name="Soul_Crystal" xml:space="preserve">
340343
<value>ソウルクリスタル</value>
341344
</data>

xivModdingFramework/Resources/XivStrings.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,4 +882,7 @@
882882
<data name="Dual_Wield" xml:space="preserve">
883883
<value>Dual Wield</value>
884884
</data>
885+
<data name="Seraph" xml:space="preserve">
886+
<value>Seraph</value>
887+
</data>
885888
</root>

xivModdingFramework/Variants/DataContainers/XivImc.cs

Lines changed: 19 additions & 3 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
{
@@ -30,7 +31,12 @@ public class XivImc
3031
/// <summary>
3132
/// The Material Set / Variant #
3233
/// </summary>
33-
public ushort Variant { get; set; }
34+
public byte Variant { get; set; }
35+
36+
/// <summary>
37+
/// Unknown byte next to the Variant
38+
/// </summary>
39+
public byte Unknown { get; set; }
3440

3541
/// <summary>
3642
/// The IMC mask data
@@ -54,12 +60,22 @@ public class XivImc
5460
/// Returns the raw bytes that make up this IMC entry.
5561
/// </summary>
5662
/// <returns></returns>
57-
public byte[] GetBytes()
63+
public byte[] GetBytes(ImcType type)
5864
{
5965
var bytes = new List<byte>();
6066
bytes.AddRange(BitConverter.GetBytes(Variant));
6167
bytes.AddRange(BitConverter.GetBytes(Mask));
62-
bytes.AddRange(BitConverter.GetBytes(Vfx));
68+
if (type == ImcType.NonSet)
69+
{
70+
// Always 0 for non-set entries, their VFX number is the
71+
// same as their Material Variant #.
72+
bytes.AddRange(BitConverter.GetBytes(((ushort)0)));
73+
}
74+
else
75+
{
76+
// Actual VFX number.
77+
bytes.AddRange(BitConverter.GetBytes(Vfx));
78+
}
6379
return bytes.ToArray();
6480
}
6581

xivModdingFramework/Variants/FileTypes/Imc.cs

Lines changed: 38 additions & 31 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,36 @@ 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+
byte variant = br.ReadByte();
131+
byte unknown = br.ReadByte();
132+
ushort mask = br.ReadUInt16();
133+
ushort vfx = br.ReadUInt16();
134+
134135
imcData.DefaultSubset.Add(new XivImc
135136
{
136-
Variant = br.ReadUInt16(),
137-
Mask = br.ReadUInt16(),
138-
Vfx = br.ReadUInt16()
137+
Variant = variant,
138+
Unknown = unknown,
139+
Mask = mask,
140+
Vfx = variant
139141
});
140142

141143
for (var i = 0; i < subsetCount; i++)
142144
{
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+
vfx = br.ReadUInt16();
149+
150+
var newEntry = new XivImc
151+
{
152+
Variant = variant,
153+
Unknown = unknown,
154+
Mask = mask,
155+
Vfx = vfx
145156
};
157+
var subset = new List<XivImc>() { newEntry };
158+
imcData.SubsetList.Add(subset);
146159
}
147160
}
148161
else if(imcData.TypeIdentifier == ImcType.Set)
@@ -151,15 +164,15 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
151164
imcData.DefaultSubset = new List<XivImc>()
152165
{
153166
new XivImc
154-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
167+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
155168
new XivImc
156-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
169+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
157170
new XivImc
158-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
171+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
159172
new XivImc
160-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
173+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
161174
new XivImc
162-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
175+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
163176
};
164177

165178
for (var i = 0; i < subsetCount; i++)
@@ -168,17 +181,16 @@ public async Task<FullImcInfo> GetFullImcInfo(string path)
168181
var imcGear = new List<XivImc>()
169182
{
170183
new XivImc
171-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
184+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
172185
new XivImc
173-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
186+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
174187
new XivImc
175-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
188+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
176189
new XivImc
177-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
190+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
178191
new XivImc
179-
{Variant = br.ReadUInt16(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
192+
{Variant = br.ReadByte(), Unknown = br.ReadByte(), Mask = br.ReadUInt16(), Vfx = br.ReadUInt16()},
180193
};
181-
182194
imcData.SubsetList.Add(imcGear);
183195
}
184196
} else
@@ -252,27 +264,22 @@ public async Task SaveFullImcInfo(FullImcInfo info, string path, string itemName
252264
// The rest of this is easy, it's literally just post all the sets in order.
253265
foreach(var entry in info.DefaultSubset)
254266
{
255-
data.AddRange(entry.GetBytes());
267+
data.AddRange(entry.GetBytes(info.TypeIdentifier));
256268
}
257269

258270
foreach(var set in info.SubsetList)
259271
{
260272
foreach (var entry in set)
261273
{
262-
data.AddRange(entry.GetBytes());
274+
data.AddRange(entry.GetBytes(info.TypeIdentifier));
263275
}
264276
}
265277

266278
// That's it.
267279

268-
// Get outta here with your fancy operators
269-
//itemName ??= Path.GetFileName(path);
270-
//category ??= "Meta";
271-
//source ??= "Internal";
272-
273-
itemName = itemName ?? Path.GetFileName(path);
274-
category = category ?? "Meta";
275-
source = source ?? "Internal";
280+
itemName ??= Path.GetFileName(path);
281+
category ??= "Meta";
282+
source ??= "Internal";
276283

277284
await dat.ImportType2Data(data.ToArray(), itemName, path, category, source);
278285
}

0 commit comments

Comments
 (0)