aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS
diff options
context:
space:
mode:
authorTSRBerry <20988865+TSRBerry@users.noreply.github.com>2023-07-20 03:02:31 +0200
committerGitHub <noreply@github.com>2023-07-19 22:02:31 -0300
commit4cf2419e6cfd3d7959914412abbb01f8cd473a76 (patch)
tree9a062cf916feefd72058297016a2426b19d0e239 /src/Ryujinx.HLE/HOS
parent440abac9f8cde2a8213083e4af2e4a8ae7ed1e02 (diff)
HLE: Fix corrupted Mii structs (#5468)
* StructArrayHelpers: Add PureAttribute to all AsSpan() methods * Fix broken Mii structs
Diffstat (limited to 'src/Ryujinx.HLE/HOS')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs41
1 files changed, 16 insertions, 25 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs
index 17333093..5599d0df 100644
--- a/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs
@@ -1,4 +1,4 @@
-using Ryujinx.Common.Utilities;
+using Ryujinx.Common.Memory;
using System;
using System.Runtime.InteropServices;
@@ -6,14 +6,14 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types
{
static class RandomMiiConstants
{
- public static int[] EyeRotateTable = {
+ public static readonly int[] EyeRotateTable = {
0x03, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04,
0x04, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04,
0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04,
};
- public static int[] EyebrowRotateTable = {
+ public static readonly int[] EyebrowRotateTable = {
0x06, 0x06, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x07, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06,
0x07, 0x07, 0x06, 0x06, 0x05, 0x06, 0x07, 0x05,
};
@@ -25,27 +25,17 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types
Mustache,
}
- [StructLayout(LayoutKind.Sequential, Pack = 4, Size = ValuesArraySize)]
- public struct RandomMiiValues
- {
- private const int ValuesArraySize = 0xbc;
-
- private readonly int _firstValueByte;
-
- public ReadOnlySpan<int> Values => SpanHelpers.AsSpan<RandomMiiValues, int>(ref this);
- }
-
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 0xCC)]
public struct RandomMiiData4
{
- public int Gender;
- public int Age;
- public int Race;
- public int ValuesCount;
+ public readonly int Gender;
+ public readonly int Age;
+ public readonly int Race;
+ public readonly int ValuesCount;
- private readonly RandomMiiValues _values;
+ private Array47<int> _values;
- public readonly ReadOnlySpan<int> Values => _values.Values[..ValuesCount];
+ public ReadOnlySpan<int> Values => _values.AsSpan()[..ValuesCount];
}
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 0xC8)]
@@ -54,22 +44,23 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types
private readonly int _argument1;
private readonly int _argument2;
- public int ValuesCount;
+ public readonly int ValuesCount;
- private readonly RandomMiiValues _values;
+ private Array47<int> _values;
- public readonly ReadOnlySpan<int> Values => _values.Values[..ValuesCount];
+ public ReadOnlySpan<int> Values => _values.AsSpan()[..ValuesCount];
}
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 0xC4)]
public struct RandomMiiData2
{
private readonly int _argument;
- public int ValuesCount;
- private readonly RandomMiiValues _values;
+ public readonly int ValuesCount;
+
+ private Array47<int> _values;
- public readonly ReadOnlySpan<int> Values => _values.Values[..ValuesCount];
+ public ReadOnlySpan<int> Values => _values.AsSpan()[..ValuesCount];
}
public static ReadOnlySpan<RandomMiiData4> RandomMiiFacelineArray => MemoryMarshal.Cast<byte, RandomMiiData4>(RandomMiiFacelineRawArray);