From 4cf2419e6cfd3d7959914412abbb01f8cd473a76 Mon Sep 17 00:00:00 2001 From: TSRBerry <20988865+TSRBerry@users.noreply.github.com> Date: Thu, 20 Jul 2023 03:02:31 +0200 Subject: HLE: Fix corrupted Mii structs (#5468) * StructArrayHelpers: Add PureAttribute to all AsSpan() methods * Fix broken Mii structs --- .../HOS/Services/Mii/Types/RandomMiiConstants.cs | 41 +++++++++------------- 1 file changed, 16 insertions(+), 25 deletions(-) (limited to 'src/Ryujinx.HLE/HOS') 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 Values => SpanHelpers.AsSpan(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 _values; - public readonly ReadOnlySpan Values => _values.Values[..ValuesCount]; + public ReadOnlySpan 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 _values; - public readonly ReadOnlySpan Values => _values.Values[..ValuesCount]; + public ReadOnlySpan 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 _values; - public readonly ReadOnlySpan Values => _values.Values[..ValuesCount]; + public ReadOnlySpan Values => _values.AsSpan()[..ValuesCount]; } public static ReadOnlySpan RandomMiiFacelineArray => MemoryMarshal.Cast(RandomMiiFacelineRawArray); -- cgit v1.2.3