Skip to content

Commit a8838d4

Browse files
committed
- Dye corrections and edge case handling.
1 parent 6e6c268 commit a8838d4

File tree

1 file changed

+50
-2
lines changed
  • xivModdingFramework/Materials/FileTypes

1 file changed

+50
-2
lines changed

xivModdingFramework/Materials/FileTypes/STM.cs

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using System.Text;
99
using System.Threading.Tasks;
1010
using xivModdingFramework.Cache;
11+
using xivModdingFramework.Exd.Enums;
12+
using xivModdingFramework.Exd.FileTypes;
1113
using xivModdingFramework.Items.DataContainers;
1214
using xivModdingFramework.Mods;
1315
using xivModdingFramework.Mods.DataContainers;
@@ -54,6 +56,40 @@ public static async Task SaveStainingTemplateFile(StainingTemplateFile file, str
5456
await _dat.ImportType2Data(data, GearStainingTemplatePath, applicationSource, null, index, modlist);
5557

5658
}
59+
public static async Task<Dictionary<int, string>> GetDyeNames()
60+
{
61+
62+
var lang = XivCache.GameInfo.GameLanguage;
63+
if (lang == General.Enums.XivLanguage.None)
64+
{
65+
lang = General.Enums.XivLanguage.English;
66+
}
67+
68+
Dictionary<int, string> Dyes = new Dictionary<int, string>();
69+
70+
var ex = new Ex(XivCache.GameInfo.GameDirectory, lang);
71+
var exData = await ex.ReadExData(XivEx.stain);
72+
73+
74+
var dataLength = exData[0].Length - 2;
75+
76+
foreach (var kv in exData)
77+
{
78+
if (kv.Key == 0) continue;
79+
80+
var size = kv.Value.Length - dataLength;
81+
var name = Encoding.UTF8.GetString(kv.Value, dataLength, size).Replace("\0", "");
82+
var dyeId = kv.Key - 1;
83+
if (String.IsNullOrEmpty(name)) {
84+
name = "Dye " + dyeId.ToString();
85+
}
86+
87+
Dyes.Add(dyeId, name);
88+
}
89+
90+
91+
return Dyes;
92+
}
5793
}
5894

5995
public enum StainingTemplateArrayType
@@ -133,7 +169,7 @@ public StainingTemplateEntry(byte[] data, int offset)
133169

134170
Half[] halfs = new Half[3];
135171

136-
var elementStart = offsetStart + (i * 2);
172+
var elementStart = offsetStart + ((i * 2) * elementSize);
137173

138174
var reversed = new byte[] { data[elementStart + 1], data[elementStart] };
139175
var test = new Half(BitConverter.ToUInt16(reversed, 0));
@@ -165,7 +201,18 @@ public StainingTemplateEntry(byte[] data, int offset)
165201
nArray.Add(new Half[] { new Half(), new Half(), new Half() });
166202
continue;
167203
}
168-
nArray.Add(halfData[index - 1]);
204+
205+
// Seriously, wtf SE?
206+
if(x == 1 && index == 1 && (i <= 110 && i != 91))
207+
{
208+
index = 0;
209+
}
210+
211+
if(index >= halfData.Count)
212+
{
213+
index = 0;
214+
}
215+
nArray.Add(halfData[index]);
169216
}
170217

171218
halfData = nArray;
@@ -280,5 +327,6 @@ public StainingTemplateFile(byte[] data)
280327
}
281328

282329

330+
283331
}
284332
}

0 commit comments

Comments
 (0)