mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 20:24:17 +01:00
124 lines
5.1 KiB
C#
124 lines
5.1 KiB
C#
using Penumbra.GameData.Enums;
|
|
|
|
namespace Penumbra.Interop.Structs;
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public unsafe struct CharacterUtilityData
|
|
{
|
|
public const int IndexHumanPbd = 63;
|
|
public const int IndexTransparentTex = 79;
|
|
public const int IndexDecalTex = 80;
|
|
public const int IndexTileOrbArrayTex = 81;
|
|
public const int IndexTileNormArrayTex = 82;
|
|
public const int IndexSkinShpk = 83;
|
|
public const int IndexGudStm = 94;
|
|
public const int IndexLegacyStm = 95;
|
|
public const int IndexSphereDArrayTex = 96;
|
|
|
|
public static readonly MetaIndex[] EqdpIndices = Enum.GetNames<MetaIndex>()
|
|
.Zip(Enum.GetValues<MetaIndex>())
|
|
.Where(n => n.First.StartsWith("Eqdp"))
|
|
.Select(n => n.Second).ToArray();
|
|
|
|
public const int TotalNumResources = 114;
|
|
|
|
/// <summary> Obtain the index for the eqdp file corresponding to the given race code and accessory. </summary>
|
|
public static MetaIndex EqdpIdx(GenderRace raceCode, bool accessory)
|
|
=> +(int)raceCode switch
|
|
{
|
|
0101 => accessory ? MetaIndex.Eqdp0101Acc : MetaIndex.Eqdp0101,
|
|
0201 => accessory ? MetaIndex.Eqdp0201Acc : MetaIndex.Eqdp0201,
|
|
0301 => accessory ? MetaIndex.Eqdp0301Acc : MetaIndex.Eqdp0301,
|
|
0401 => accessory ? MetaIndex.Eqdp0401Acc : MetaIndex.Eqdp0401,
|
|
0501 => accessory ? MetaIndex.Eqdp0501Acc : MetaIndex.Eqdp0501,
|
|
0601 => accessory ? MetaIndex.Eqdp0601Acc : MetaIndex.Eqdp0601,
|
|
0701 => accessory ? MetaIndex.Eqdp0701Acc : MetaIndex.Eqdp0701,
|
|
0801 => accessory ? MetaIndex.Eqdp0801Acc : MetaIndex.Eqdp0801,
|
|
0901 => accessory ? MetaIndex.Eqdp0901Acc : MetaIndex.Eqdp0901,
|
|
1001 => accessory ? MetaIndex.Eqdp1001Acc : MetaIndex.Eqdp1001,
|
|
1101 => accessory ? MetaIndex.Eqdp1101Acc : MetaIndex.Eqdp1101,
|
|
1201 => accessory ? MetaIndex.Eqdp1201Acc : MetaIndex.Eqdp1201,
|
|
1301 => accessory ? MetaIndex.Eqdp1301Acc : MetaIndex.Eqdp1301,
|
|
1401 => accessory ? MetaIndex.Eqdp1401Acc : MetaIndex.Eqdp1401,
|
|
1501 => accessory ? MetaIndex.Eqdp1501Acc : MetaIndex.Eqdp1501,
|
|
1601 => accessory ? MetaIndex.Eqdp1601Acc : MetaIndex.Eqdp1601,
|
|
1701 => accessory ? MetaIndex.Eqdp1701Acc : MetaIndex.Eqdp1701,
|
|
1801 => accessory ? MetaIndex.Eqdp1801Acc : MetaIndex.Eqdp1801,
|
|
0104 => accessory ? MetaIndex.Eqdp0104Acc : MetaIndex.Eqdp0104,
|
|
0204 => accessory ? MetaIndex.Eqdp0204Acc : MetaIndex.Eqdp0204,
|
|
0504 => accessory ? MetaIndex.Eqdp0504Acc : MetaIndex.Eqdp0504,
|
|
0604 => accessory ? MetaIndex.Eqdp0604Acc : MetaIndex.Eqdp0604,
|
|
0704 => accessory ? MetaIndex.Eqdp0704Acc : MetaIndex.Eqdp0704,
|
|
0804 => accessory ? MetaIndex.Eqdp0804Acc : MetaIndex.Eqdp0804,
|
|
1304 => accessory ? MetaIndex.Eqdp1304Acc : MetaIndex.Eqdp1304,
|
|
1404 => accessory ? MetaIndex.Eqdp1404Acc : MetaIndex.Eqdp1404,
|
|
9104 => accessory ? MetaIndex.Eqdp9104Acc : MetaIndex.Eqdp9104,
|
|
9204 => accessory ? MetaIndex.Eqdp9204Acc : MetaIndex.Eqdp9204,
|
|
_ => (MetaIndex)(-1),
|
|
};
|
|
|
|
[FieldOffset(0)]
|
|
public void* VTable;
|
|
|
|
[FieldOffset(8)]
|
|
public fixed ulong Resources[TotalNumResources];
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.Eqp * 8)]
|
|
public ResourceHandle* EqpResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.Gmp * 8)]
|
|
public ResourceHandle* GmpResource;
|
|
|
|
public ResourceHandle* Resource(int idx)
|
|
=> (ResourceHandle*)Resources[idx];
|
|
|
|
public ResourceHandle* Resource(MetaIndex idx)
|
|
=> Resource((int)idx);
|
|
|
|
public ResourceHandle* EqdpResource(GenderRace raceCode, bool accessory)
|
|
=> Resource((int)EqdpIdx(raceCode, accessory));
|
|
|
|
[FieldOffset(8 + IndexHumanPbd * 8)]
|
|
public ResourceHandle* HumanPbdResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.HumanCmp * 8)]
|
|
public ResourceHandle* HumanCmpResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.FaceEst * 8)]
|
|
public ResourceHandle* FaceEstResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.HairEst * 8)]
|
|
public ResourceHandle* HairEstResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.BodyEst * 8)]
|
|
public ResourceHandle* BodyEstResource;
|
|
|
|
[FieldOffset(8 + (int)MetaIndex.HeadEst * 8)]
|
|
public ResourceHandle* HeadEstResource;
|
|
|
|
[FieldOffset(8 + IndexTransparentTex * 8)]
|
|
public TextureResourceHandle* TransparentTexResource;
|
|
|
|
[FieldOffset(8 + IndexDecalTex * 8)]
|
|
public TextureResourceHandle* DecalTexResource;
|
|
|
|
[FieldOffset(8 + IndexTileOrbArrayTex * 8)]
|
|
public TextureResourceHandle* TileOrbArrayTexResource;
|
|
|
|
[FieldOffset(8 + IndexTileNormArrayTex * 8)]
|
|
public TextureResourceHandle* TileNormArrayTexResource;
|
|
|
|
[FieldOffset(8 + IndexSkinShpk * 8)]
|
|
public ResourceHandle* SkinShpkResource;
|
|
|
|
[FieldOffset(8 + IndexGudStm * 8)]
|
|
public ResourceHandle* GudStmResource;
|
|
|
|
[FieldOffset(8 + IndexLegacyStm * 8)]
|
|
public ResourceHandle* LegacyStmResource;
|
|
|
|
[FieldOffset(8 + IndexSphereDArrayTex * 8)]
|
|
public TextureResourceHandle* SphereDArrayTexResource;
|
|
|
|
// not included resources have no known use case.
|
|
}
|