mirror of
https://github.com/xivdev/Penumbra.git
synced 2026-02-17 21:37:50 +01:00
Meta stuff is terrible.
This commit is contained in:
parent
0186f176d0
commit
1d82e882ed
35 changed files with 1265 additions and 1247 deletions
|
|
@ -8,46 +8,46 @@ using Penumbra.String.Functions;
|
|||
|
||||
namespace Penumbra.Meta.Files;
|
||||
|
||||
// The human.cmp file contains many character-relevant parameters like color sets.
|
||||
// We only support manipulating the racial scaling parameters at the moment.
|
||||
/// <summary>
|
||||
/// The human.cmp file contains many character-relevant parameters like color sets.
|
||||
/// We only support manipulating the racial scaling parameters at the moment.
|
||||
/// </summary>
|
||||
public sealed unsafe class CmpFile : MetaBaseFile
|
||||
{
|
||||
public static readonly CharacterUtility.InternalIndex InternalIndex =
|
||||
CharacterUtility.ReverseIndices[ ( int )MetaIndex.HumanCmp ];
|
||||
CharacterUtility.ReverseIndices[(int)MetaIndex.HumanCmp];
|
||||
|
||||
private const int RacialScalingStart = 0x2A800;
|
||||
|
||||
public float this[ SubRace subRace, RspAttribute attribute ]
|
||||
public float this[SubRace subRace, RspAttribute attribute]
|
||||
{
|
||||
get => *( float* )( Data + RacialScalingStart + ToRspIndex( subRace ) * RspEntry.ByteSize + ( int )attribute * 4 );
|
||||
set => *( float* )( Data + RacialScalingStart + ToRspIndex( subRace ) * RspEntry.ByteSize + ( int )attribute * 4 ) = value;
|
||||
get => *(float*)(Data + RacialScalingStart + ToRspIndex(subRace) * RspEntry.ByteSize + (int)attribute * 4);
|
||||
set => *(float*)(Data + RacialScalingStart + ToRspIndex(subRace) * RspEntry.ByteSize + (int)attribute * 4) = value;
|
||||
}
|
||||
|
||||
public override void Reset()
|
||||
=> MemoryUtility.MemCpyUnchecked( Data, ( byte* )DefaultData.Data, DefaultData.Length );
|
||||
=> MemoryUtility.MemCpyUnchecked(Data, (byte*)DefaultData.Data, DefaultData.Length);
|
||||
|
||||
public void Reset( IEnumerable< (SubRace, RspAttribute) > entries )
|
||||
public void Reset(IEnumerable<(SubRace, RspAttribute)> entries)
|
||||
{
|
||||
foreach( var (r, a) in entries )
|
||||
{
|
||||
this[ r, a ] = GetDefault( r, a );
|
||||
}
|
||||
foreach (var (r, a) in entries)
|
||||
this[r, a] = GetDefault(Manager, r, a);
|
||||
}
|
||||
|
||||
public CmpFile()
|
||||
: base( MetaIndex.HumanCmp )
|
||||
public CmpFile(MetaFileManager manager)
|
||||
: base(manager, MetaIndex.HumanCmp)
|
||||
{
|
||||
AllocateData( DefaultData.Length );
|
||||
AllocateData(DefaultData.Length);
|
||||
Reset();
|
||||
}
|
||||
|
||||
public static float GetDefault( SubRace subRace, RspAttribute attribute )
|
||||
public static float GetDefault(MetaFileManager manager, SubRace subRace, RspAttribute attribute)
|
||||
{
|
||||
var data = ( byte* )Penumbra.CharacterUtility.DefaultResource( InternalIndex ).Address;
|
||||
return *( float* )( data + RacialScalingStart + ToRspIndex( subRace ) * RspEntry.ByteSize + ( int )attribute * 4 );
|
||||
var data = (byte*)manager.CharacterUtility.DefaultResource(InternalIndex).Address;
|
||||
return *(float*)(data + RacialScalingStart + ToRspIndex(subRace) * RspEntry.ByteSize + (int)attribute * 4);
|
||||
}
|
||||
|
||||
private static int ToRspIndex( SubRace subRace )
|
||||
private static int ToRspIndex(SubRace subRace)
|
||||
=> subRace switch
|
||||
{
|
||||
SubRace.Midlander => 0,
|
||||
|
|
@ -67,6 +67,6 @@ public sealed unsafe class CmpFile : MetaBaseFile
|
|||
SubRace.Rava => 70,
|
||||
SubRace.Veena => 71,
|
||||
SubRace.Unknown => 0,
|
||||
_ => throw new ArgumentOutOfRangeException( nameof( subRace ), subRace, null ),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(subRace), subRace, null),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue