From 589babbf7477423457dddbefbbb29623fa5c0624 Mon Sep 17 00:00:00 2001
From: mailwl <mailwl@gmail.com>
Date: Sat, 12 Aug 2017 11:10:04 +0300
Subject: [PATCH] Mii Selector Applet: update Mii structures

---
 src/core/hle/applets/mii_selector.cpp |  6 +--
 src/core/hle/applets/mii_selector.h   | 57 ++++++++++++---------------
 2 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp
index 705859f1e..f225c23a5 100644
--- a/src/core/hle/applets/mii_selector.cpp
+++ b/src/core/hle/applets/mii_selector.cpp
@@ -66,7 +66,7 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa
     // continue.
     MiiResult result;
     memset(&result, 0, sizeof(result));
-    result.result_code = 0;
+    result.return_code = 0;
 
     // Let the application know that we're closing
     Service::APT::MessageParameter message;
@@ -82,5 +82,5 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa
 }
 
 void MiiSelector::Update() {}
-}
-} // namespace
+} // namespace Applets
+} // namespace HLE
diff --git a/src/core/hle/applets/mii_selector.h b/src/core/hle/applets/mii_selector.h
index ec00e29d2..69db401d0 100644
--- a/src/core/hle/applets/mii_selector.h
+++ b/src/core/hle/applets/mii_selector.h
@@ -16,51 +16,46 @@ namespace HLE {
 namespace Applets {
 
 struct MiiConfig {
-    u8 unk_000;
-    u8 unk_001;
-    u8 unk_002;
-    u8 unk_003;
-    u8 unk_004;
+    u8 cancel_button_flag;
+    u8 enable_guest_mii_flag;
+    u8 show_on_top_screen_flag;
+    INSERT_PADDING_BYTES(5);
+    u16 title[0x40];
+    INSERT_PADDING_BYTES(4);
+    u8 show_guest_miis_flag;
     INSERT_PADDING_BYTES(3);
-    u16 unk_008;
-    INSERT_PADDING_BYTES(0x82);
-    u8 unk_08C;
-    INSERT_PADDING_BYTES(3);
-    u16 unk_090;
+    u32 initially_selected_mii_index;
+    u8 guest_mii_whitelist[6];
+    u8 user_mii_whitelist[0x64];
     INSERT_PADDING_BYTES(2);
-    u32 unk_094;
-    u16 unk_098;
-    u8 unk_09A[0x64];
-    u8 unk_0FE;
-    u8 unk_0FF;
-    u32 unk_100;
+    u32 magic_value;
 };
-
 static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size");
 #define ASSERT_REG_POSITION(field_name, position)                                                  \
     static_assert(offsetof(MiiConfig, field_name) == position,                                     \
                   "Field " #field_name " has invalid position")
-ASSERT_REG_POSITION(unk_008, 0x08);
-ASSERT_REG_POSITION(unk_08C, 0x8C);
-ASSERT_REG_POSITION(unk_090, 0x90);
-ASSERT_REG_POSITION(unk_094, 0x94);
-ASSERT_REG_POSITION(unk_0FE, 0xFE);
+ASSERT_REG_POSITION(title, 0x08);
+ASSERT_REG_POSITION(show_guest_miis_flag, 0x8C);
+ASSERT_REG_POSITION(initially_selected_mii_index, 0x90);
+ASSERT_REG_POSITION(guest_mii_whitelist, 0x94);
 #undef ASSERT_REG_POSITION
 
 struct MiiResult {
-    u32 result_code;
-    u8 unk_04;
-    INSERT_PADDING_BYTES(7);
-    u8 unk_0C[0x60];
-    u8 unk_6C[0x16];
+    u32 return_code;
+    u32 guest_mii_selected_flag;
+    u32 selected_guest_mii_index;
+    // TODO(mailwl): expand to Mii Format structure: https://www.3dbrew.org/wiki/Mii
+    u8 selected_mii_data[0x5C];
     INSERT_PADDING_BYTES(2);
+    u16 mii_data_checksum;
+    u16 guest_mii_name[0xC];
 };
 static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size");
 #define ASSERT_REG_POSITION(field_name, position)                                                  \
     static_assert(offsetof(MiiResult, field_name) == position,                                     \
                   "Field " #field_name " has invalid position")
-ASSERT_REG_POSITION(unk_0C, 0x0C);
-ASSERT_REG_POSITION(unk_6C, 0x6C);
+ASSERT_REG_POSITION(selected_mii_data, 0x0C);
+ASSERT_REG_POSITION(guest_mii_name, 0x6C);
 #undef ASSERT_REG_POSITION
 
 class MiiSelector final : public Applet {
@@ -79,5 +74,5 @@ private:
 
     MiiConfig config;
 };
-}
-} // namespace
+} // namespace Applets
+} // namespace HLE