Skip to content

Commit 6e6c268

Browse files
committed
Beta v2.3.4.2b
2 parents d0d3b36 + 843c60d commit 6e6c268

File tree

4 files changed

+65
-20
lines changed

4 files changed

+65
-20
lines changed

xivModdingFramework/Materials/FileTypes/STM.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class StainingTemplateEntry
6868
public readonly List<Half[]> DiffuseEntries = new List<Half[]>();
6969
public readonly List<Half[]> SpecularEntries = new List<Half[]>();
7070
public readonly List<Half[]> EmissiveEntries = new List<Half[]>();
71-
public readonly List<Half> DiffuseSecondaryEntries = new List<Half>();
71+
public readonly List<Half> SpecularPowerEntries = new List<Half>();
7272
public readonly List<Half> GlossEntries = new List<Half>();
7373

7474
public StainingTemplateEntry(byte[] data, int offset)
@@ -201,7 +201,7 @@ public StainingTemplateEntry(byte[] data, int offset)
201201
}
202202
else if (x == 4)
203203
{
204-
DiffuseSecondaryEntries.Add(arr[0]);
204+
SpecularPowerEntries.Add(arr[0]);
205205
}
206206
}
207207

xivModdingFramework/Models/ModelTextures/ModelTexture.cs

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,17 @@ public static CustomModelColors GetCustomColors()
116116
/// <param name="mtrl"></param>
117117
/// <param name="colors"></param>
118118
/// <returns></returns>
119-
public static async Task<ModelTextureData> GetModelMaps(DirectoryInfo gameDirectory, XivMtrl mtrl, CustomModelColors colors = null)
119+
public static async Task<ModelTextureData> GetModelMaps(DirectoryInfo gameDirectory, XivMtrl mtrl, CustomModelColors colors = null, int highlightedRow = -1)
120120
{
121121
var tex = new Tex(gameDirectory);
122-
return await GetModelMaps(tex, mtrl);
122+
return await GetModelMaps(tex, mtrl, colors, highlightedRow);
123123
}
124124

125125
/// <summary>
126126
/// Gets the texture maps for the model
127127
/// </summary>
128128
/// <returns>The texture maps in byte arrays inside a ModelTextureData class</returns>
129-
public static async Task<ModelTextureData> GetModelMaps(Tex tex, XivMtrl mtrl, CustomModelColors colors = null)
129+
public static async Task<ModelTextureData> GetModelMaps(Tex tex, XivMtrl mtrl, CustomModelColors colors = null, int highlightedRow = -1)
130130
{
131131

132132
// Use static values as needed.
@@ -233,7 +233,7 @@ await Task.Run(() =>
233233
{
234234
var cs = texMapData.ColorSet.Data;
235235
Color finalDiffuseColor, finalSpecularColor;
236-
ComputeColorsetBlending(mtrl, colorsetValue, cs, diffuseColor, specularColor, out finalDiffuseColor, out finalSpecularColor, out emissiveColor);
236+
ComputeColorsetBlending(mtrl, colorsetValue, cs, diffuseColor, specularColor, out finalDiffuseColor, out finalSpecularColor, out emissiveColor, highlightedRow);
237237
diffuseColor = finalDiffuseColor;
238238
specularColor = finalSpecularColor;
239239
}
@@ -644,7 +644,7 @@ private static void ComputeShaderColors(CustomModelColors colors, ShaderInfo in
644644
}
645645
}
646646

647-
private static void ComputeColorsetBlending(XivMtrl mtrl, byte colorsetByte, byte[] colorSetData, Color baseDiffuse, Color baseSpecular, out Color newDiffuse, out Color newSpecular, out Color emissiveColor)
647+
private static void ComputeColorsetBlending(XivMtrl mtrl, byte colorsetByte, byte[] colorSetData, Color baseDiffuse, Color baseSpecular, out Color newDiffuse, out Color newSpecular, out Color emissiveColor, int highlightRow = -1)
648648
{
649649
int rowNumber = colorsetByte / 17;
650650
int nextRow = rowNumber >= 15 ? 15 : rowNumber + 1;
@@ -659,14 +659,52 @@ private static void ComputeColorsetBlending(XivMtrl mtrl, byte colorsetByte, byt
659659
var row1Offset = Clamp(rowNumber * 16);
660660
var row2Offset = Clamp(nextRow * 16);
661661

662-
diffuse1 = new Color(colorSetData[row1Offset + 0], colorSetData[row1Offset + 1], colorSetData[row1Offset + 2], (byte)255);
663-
diffuse2 = new Color(colorSetData[row2Offset + 0], colorSetData[row2Offset + 1], colorSetData[row2Offset + 2], (byte)255);
662+
if (highlightRow >= 0)
663+
{
664+
if (rowNumber == highlightRow)
665+
{
666+
diffuse1 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
667+
diffuse2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
668+
669+
spec1 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
670+
spec2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
664671

665-
spec1 = new Color(colorSetData[row1Offset + 4], colorSetData[row1Offset + 5], colorSetData[row1Offset + 6], (byte)255);
666-
spec2 = new Color(colorSetData[row2Offset + 4], colorSetData[row2Offset + 5], colorSetData[row2Offset + 6], (byte)255);
672+
emiss1 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
673+
emiss2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
674+
}
675+
else if (nextRow == highlightRow)
676+
{
677+
diffuse1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
678+
diffuse2 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
679+
680+
spec1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
681+
spec2 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
682+
683+
emiss1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
684+
emiss2 = new Color((byte)255, (byte)255, (byte)255, (byte)255);
685+
} else
686+
{
687+
diffuse1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
688+
diffuse2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
667689

668-
emiss1 = new Color(colorSetData[row1Offset + 8], colorSetData[row1Offset + 9], colorSetData[row1Offset + 10], (byte)255);
669-
emiss2 = new Color(colorSetData[row2Offset + 8], colorSetData[row2Offset + 9], colorSetData[row2Offset + 10], (byte)255);
690+
spec1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
691+
spec2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
692+
693+
emiss1 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
694+
emiss2 = new Color((byte)0, (byte)0, (byte)0, (byte)255);
695+
}
696+
}
697+
else
698+
{
699+
diffuse1 = new Color(colorSetData[row1Offset + 0], colorSetData[row1Offset + 1], colorSetData[row1Offset + 2], (byte)255);
700+
diffuse2 = new Color(colorSetData[row2Offset + 0], colorSetData[row2Offset + 1], colorSetData[row2Offset + 2], (byte)255);
701+
702+
spec1 = new Color(colorSetData[row1Offset + 4], colorSetData[row1Offset + 5], colorSetData[row1Offset + 6], (byte)255);
703+
spec2 = new Color(colorSetData[row2Offset + 4], colorSetData[row2Offset + 5], colorSetData[row2Offset + 6], (byte)255);
704+
705+
emiss1 = new Color(colorSetData[row1Offset + 8], colorSetData[row1Offset + 9], colorSetData[row1Offset + 10], (byte)255);
706+
emiss2 = new Color(colorSetData[row2Offset + 8], colorSetData[row2Offset + 9], colorSetData[row2Offset + 10], (byte)255);
707+
}
670708

671709

672710
// These are now our base values to multiply the base values by.

xivModdingFramework/Textures/FileTypes/ATex.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public async Task<XivTex> GetATexData(long offset)
107107
var atexData = await dat.GetType2Data(offset, _dataFile);
108108

109109
var xivTex = new XivTex();
110+
xivTex.Layers = 1;
110111

111112
using (var br = new BinaryReader(new MemoryStream(atexData)))
112113
{

xivModdingFramework/Textures/FileTypes/Tex.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -421,29 +421,35 @@ public Task<byte[]> GetImageData(XivTex xivTex, int layer = -1)
421421
{
422422
byte[] imageData = null;
423423

424+
var layers = xivTex.Layers;
425+
if(layers == 0)
426+
{
427+
layers = 1;
428+
}
429+
424430
switch (xivTex.TextureFormat)
425431
{
426432
case XivTexFormat.DXT1:
427-
imageData = DxtUtil.DecompressDxt1(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
433+
imageData = DxtUtil.DecompressDxt1(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
428434
break;
429435
case XivTexFormat.DXT3:
430-
imageData = DxtUtil.DecompressDxt3(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
436+
imageData = DxtUtil.DecompressDxt3(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
431437
break;
432438
case XivTexFormat.DXT5:
433-
imageData = DxtUtil.DecompressDxt5(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
439+
imageData = DxtUtil.DecompressDxt5(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
434440
break;
435441
case XivTexFormat.A4R4G4B4:
436-
imageData = await Read4444Image(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
442+
imageData = await Read4444Image(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
437443
break;
438444
case XivTexFormat.A1R5G5B5:
439-
imageData = await Read5551Image(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
445+
imageData = await Read5551Image(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
440446
break;
441447
case XivTexFormat.A8R8G8B8:
442-
imageData = await SwapRBColors(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
448+
imageData = await SwapRBColors(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
443449
break;
444450
case XivTexFormat.L8:
445451
case XivTexFormat.A8:
446-
imageData = await Read8bitImage(xivTex.TexData, xivTex.Width, xivTex.Height * xivTex.Layers);
452+
imageData = await Read8bitImage(xivTex.TexData, xivTex.Width, xivTex.Height * layers);
447453
break;
448454
case XivTexFormat.X8R8G8B8:
449455
case XivTexFormat.R32F:

0 commit comments

Comments
 (0)