summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Narr the Reg2023-09-07 10:55:38 -0600
committerGravatar Narr the Reg2023-09-07 11:46:12 -0600
commit57e7eed54c61d52361d4e3434bcfa4aa707e7232 (patch)
tree7f8e2d5bb8e7d7c15c42a21fb59abf332fb35986 /src
parentMerge pull request #11428 from Kelebek1/adsp_rework (diff)
downloadyuzu-57e7eed54c61d52361d4e3434bcfa4aa707e7232.tar.gz
yuzu-57e7eed54c61d52361d4e3434bcfa4aa707e7232.tar.xz
yuzu-57e7eed54c61d52361d4e3434bcfa4aa707e7232.zip
service: mii: Fix broken mii on MK8
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/applets/applet_mii_edit.cpp2
-rw-r--r--src/core/hle/service/mii/mii_manager.cpp12
-rw-r--r--src/core/hle/service/mii/mii_manager.h1
-rw-r--r--src/core/hle/service/mii/raw_data.cpp105
-rw-r--r--src/core/hle/service/mii/raw_data.h1
-rw-r--r--src/core/hle/service/nfc/common/device.cpp4
6 files changed, 118 insertions, 7 deletions
diff --git a/src/core/hle/service/am/applets/applet_mii_edit.cpp b/src/core/hle/service/am/applets/applet_mii_edit.cpp
index d1f652c09..f8e2bac32 100644
--- a/src/core/hle/service/am/applets/applet_mii_edit.cpp
+++ b/src/core/hle/service/am/applets/applet_mii_edit.cpp
@@ -90,7 +90,7 @@ void MiiEdit::Execute() {
90 const MiiEditCharInfo char_info{ 90 const MiiEditCharInfo char_info{
91 .mii_info{applet_input_common.applet_mode == MiiEditAppletMode::EditMii 91 .mii_info{applet_input_common.applet_mode == MiiEditAppletMode::EditMii
92 ? applet_input_v4.char_info.mii_info 92 ? applet_input_v4.char_info.mii_info
93 : mii_manager.BuildDefault(0)}, 93 : mii_manager.BuildBase(Mii::Gender::Male)},
94 }; 94 };
95 95
96 MiiEditOutputForCharInfoEditing(MiiEditResult::Success, char_info); 96 MiiEditOutputForCharInfoEditing(MiiEditResult::Success, char_info);
diff --git a/src/core/hle/service/mii/mii_manager.cpp b/src/core/hle/service/mii/mii_manager.cpp
index 6b966f20d..dd632df50 100644
--- a/src/core/hle/service/mii/mii_manager.cpp
+++ b/src/core/hle/service/mii/mii_manager.cpp
@@ -18,7 +18,6 @@ namespace {
18 18
19constexpr Result ERROR_CANNOT_FIND_ENTRY{ErrorModule::Mii, 4}; 19constexpr Result ERROR_CANNOT_FIND_ENTRY{ErrorModule::Mii, 4};
20 20
21constexpr std::size_t BaseMiiCount{2};
22constexpr std::size_t DefaultMiiCount{RawData::DefaultMii.size()}; 21constexpr std::size_t DefaultMiiCount{RawData::DefaultMii.size()};
23 22
24constexpr MiiStoreData::Name DefaultMiiName{u'n', u'o', u' ', u'n', u'a', u'm', u'e'}; 23constexpr MiiStoreData::Name DefaultMiiName{u'n', u'o', u' ', u'n', u'a', u'm', u'e'};
@@ -404,7 +403,7 @@ u32 MiiManager::GetCount(SourceFlag source_flag) const {
404 count += 0; 403 count += 0;
405 } 404 }
406 if ((source_flag & SourceFlag::Default) != SourceFlag::None) { 405 if ((source_flag & SourceFlag::Default) != SourceFlag::None) {
407 count += (DefaultMiiCount - BaseMiiCount); 406 count += DefaultMiiCount;
408 } 407 }
409 return static_cast<u32>(count); 408 return static_cast<u32>(count);
410} 409}
@@ -422,13 +421,18 @@ CharInfo MiiManager::BuildRandom(Age age, Gender gender, Race race) {
422 return ConvertStoreDataToInfo(BuildRandomStoreData(age, gender, race, user_id)); 421 return ConvertStoreDataToInfo(BuildRandomStoreData(age, gender, race, user_id));
423} 422}
424 423
424CharInfo MiiManager::BuildBase(Gender gender) {
425 const std::size_t index = gender == Gender::Female ? 1 : 0;
426 return ConvertStoreDataToInfo(BuildDefaultStoreData(RawData::BaseMii.at(index), user_id));
427}
428
425CharInfo MiiManager::BuildDefault(std::size_t index) { 429CharInfo MiiManager::BuildDefault(std::size_t index) {
426 return ConvertStoreDataToInfo(BuildDefaultStoreData(RawData::DefaultMii.at(index), user_id)); 430 return ConvertStoreDataToInfo(BuildDefaultStoreData(RawData::DefaultMii.at(index), user_id));
427} 431}
428 432
429CharInfo MiiManager::ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const { 433CharInfo MiiManager::ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const {
430 Service::Mii::MiiManager manager; 434 Service::Mii::MiiManager manager;
431 auto mii = manager.BuildDefault(0); 435 auto mii = manager.BuildBase(Mii::Gender::Male);
432 436
433 if (!ValidateV3Info(mii_v3)) { 437 if (!ValidateV3Info(mii_v3)) {
434 return mii; 438 return mii;
@@ -678,7 +682,7 @@ std::vector<MiiInfoElement> MiiManager::GetDefault(SourceFlag source_flag) {
678 return result; 682 return result;
679 } 683 }
680 684
681 for (std::size_t index = BaseMiiCount; index < DefaultMiiCount; index++) { 685 for (std::size_t index = 0; index < DefaultMiiCount; index++) {
682 result.emplace_back(BuildDefault(index), Source::Default); 686 result.emplace_back(BuildDefault(index), Source::Default);
683 } 687 }
684 688
diff --git a/src/core/hle/service/mii/mii_manager.h b/src/core/hle/service/mii/mii_manager.h
index 45c2be3c8..0c8295ebe 100644
--- a/src/core/hle/service/mii/mii_manager.h
+++ b/src/core/hle/service/mii/mii_manager.h
@@ -21,6 +21,7 @@ public:
21 u32 GetCount(SourceFlag source_flag) const; 21 u32 GetCount(SourceFlag source_flag) const;
22 Result UpdateLatest(CharInfo* out_info, const CharInfo& info, SourceFlag source_flag); 22 Result UpdateLatest(CharInfo* out_info, const CharInfo& info, SourceFlag source_flag);
23 CharInfo BuildRandom(Age age, Gender gender, Race race); 23 CharInfo BuildRandom(Age age, Gender gender, Race race);
24 CharInfo BuildBase(Gender gender);
24 CharInfo BuildDefault(std::size_t index); 25 CharInfo BuildDefault(std::size_t index);
25 CharInfo ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const; 26 CharInfo ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const;
26 bool ValidateV3Info(const Ver3StoreData& mii_v3) const; 27 bool ValidateV3Info(const Ver3StoreData& mii_v3) const;
diff --git a/src/core/hle/service/mii/raw_data.cpp b/src/core/hle/service/mii/raw_data.cpp
index 80369cdb0..e5245b791 100644
--- a/src/core/hle/service/mii/raw_data.cpp
+++ b/src/core/hle/service/mii/raw_data.cpp
@@ -5,6 +5,111 @@
5 5
6namespace Service::Mii::RawData { 6namespace Service::Mii::RawData {
7 7
8const std::array<Service::Mii::DefaultMii, 2> BaseMii{
9 Service::Mii::DefaultMii{
10 .face_type = 0,
11 .face_color = 0,
12 .face_wrinkle = 0,
13 .face_makeup = 0,
14 .hair_type = 33,
15 .hair_color = 1,
16 .hair_flip = 0,
17 .eye_type = 2,
18 .eye_color = 0,
19 .eye_scale = 4,
20 .eye_aspect = 3,
21 .eye_rotate = 4,
22 .eye_x = 2,
23 .eye_y = 12,
24 .eyebrow_type = 6,
25 .eyebrow_color = 1,
26 .eyebrow_scale = 4,
27 .eyebrow_aspect = 3,
28 .eyebrow_rotate = 6,
29 .eyebrow_x = 2,
30 .eyebrow_y = 10,
31 .nose_type = 1,
32 .nose_scale = 4,
33 .nose_y = 9,
34 .mouth_type = 23,
35 .mouth_color = 0,
36 .mouth_scale = 4,
37 .mouth_aspect = 3,
38 .mouth_y = 13,
39 .mustache_type = 0,
40 .beard_type = 0,
41 .beard_color = 0,
42 .mustache_scale = 4,
43 .mustache_y = 10,
44 .glasses_type = 0,
45 .glasses_color = 0,
46 .glasses_scale = 4,
47 .glasses_y = 10,
48 .mole_type = 0,
49 .mole_scale = 4,
50 .mole_x = 2,
51 .mole_y = 20,
52 .height = 64,
53 .weight = 64,
54 .gender = Gender::Male,
55 .favorite_color = 0,
56 .region = 0,
57 .font_region = FontRegion::Standard,
58 .type = 0,
59 },
60 Service::Mii::DefaultMii{
61 .face_type = 0,
62 .face_color = 0,
63 .face_wrinkle = 0,
64 .face_makeup = 0,
65 .hair_type = 12,
66 .hair_color = 1,
67 .hair_flip = 0,
68 .eye_type = 4,
69 .eye_color = 0,
70 .eye_scale = 4,
71 .eye_aspect = 3,
72 .eye_rotate = 3,
73 .eye_x = 2,
74 .eye_y = 12,
75 .eyebrow_type = 0,
76 .eyebrow_color = 1,
77 .eyebrow_scale = 4,
78 .eyebrow_aspect = 3,
79 .eyebrow_rotate = 6,
80 .eyebrow_x = 2,
81 .eyebrow_y = 10,
82 .nose_type = 1,
83 .nose_scale = 4,
84 .nose_y = 9,
85 .mouth_type = 23,
86 .mouth_color = 0,
87 .mouth_scale = 4,
88 .mouth_aspect = 3,
89 .mouth_y = 13,
90 .mustache_type = 0,
91 .beard_type = 0,
92 .beard_color = 0,
93 .mustache_scale = 4,
94 .mustache_y = 10,
95 .glasses_type = 0,
96 .glasses_color = 0,
97 .glasses_scale = 4,
98 .glasses_y = 10,
99 .mole_type = 0,
100 .mole_scale = 4,
101 .mole_x = 2,
102 .mole_y = 20,
103 .height = 64,
104 .weight = 64,
105 .gender = Gender::Female,
106 .favorite_color = 0,
107 .region = 0,
108 .font_region = FontRegion::Standard,
109 .type = 0,
110 },
111};
112
8const std::array<Service::Mii::DefaultMii, 6> DefaultMii{ 113const std::array<Service::Mii::DefaultMii, 6> DefaultMii{
9 Service::Mii::DefaultMii{ 114 Service::Mii::DefaultMii{
10 .face_type = 0, 115 .face_type = 0,
diff --git a/src/core/hle/service/mii/raw_data.h b/src/core/hle/service/mii/raw_data.h
index 5b81b013b..cdd2337d6 100644
--- a/src/core/hle/service/mii/raw_data.h
+++ b/src/core/hle/service/mii/raw_data.h
@@ -9,6 +9,7 @@
9 9
10namespace Service::Mii::RawData { 10namespace Service::Mii::RawData {
11 11
12extern const std::array<Service::Mii::DefaultMii, 2> BaseMii;
12extern const std::array<Service::Mii::DefaultMii, 6> DefaultMii; 13extern const std::array<Service::Mii::DefaultMii, 6> DefaultMii;
13extern const std::array<Service::Mii::RandomMiiData4, 18> RandomMiiFaceline; 14extern const std::array<Service::Mii::RandomMiiData4, 18> RandomMiiFaceline;
14extern const std::array<Service::Mii::RandomMiiData3, 6> RandomMiiFacelineColor; 15extern const std::array<Service::Mii::RandomMiiData3, 6> RandomMiiFacelineColor;
diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp
index 49446bc42..5df40f9a0 100644
--- a/src/core/hle/service/nfc/common/device.cpp
+++ b/src/core/hle/service/nfc/common/device.cpp
@@ -826,7 +826,7 @@ Result NfcDevice::SetRegisterInfoPrivate(const NFP::RegisterInfoPrivate& registe
826 } 826 }
827 827
828 Service::Mii::MiiManager manager; 828 Service::Mii::MiiManager manager;
829 const auto mii = manager.BuildDefault(0); 829 const auto mii = manager.BuildBase(Mii::Gender::Male);
830 auto& settings = tag_data.settings; 830 auto& settings = tag_data.settings;
831 831
832 if (tag_data.settings.settings.amiibo_initialized == 0) { 832 if (tag_data.settings.settings.amiibo_initialized == 0) {
@@ -1467,7 +1467,7 @@ void NfcDevice::BuildAmiiboWithoutKeys(NFP::NTAG215File& stubbed_tag_data,
1467 SetAmiiboName(settings, {'y', 'u', 'z', 'u', 'A', 'm', 'i', 'i', 'b', 'o'}); 1467 SetAmiiboName(settings, {'y', 'u', 'z', 'u', 'A', 'm', 'i', 'i', 'b', 'o'});
1468 settings.settings.font_region.Assign(0); 1468 settings.settings.font_region.Assign(0);
1469 settings.init_date = GetAmiiboDate(GetCurrentPosixTime()); 1469 settings.init_date = GetAmiiboDate(GetCurrentPosixTime());
1470 stubbed_tag_data.owner_mii = manager.BuildFromStoreData(manager.BuildDefault(0)); 1470 stubbed_tag_data.owner_mii = manager.BuildFromStoreData(manager.BuildBase(Mii::Gender::Male));
1471 1471
1472 // Admin info 1472 // Admin info
1473 settings.settings.amiibo_initialized.Assign(1); 1473 settings.settings.amiibo_initialized.Assign(1);