From 5b8bc56e65b4ef7457c0cc9a2fbf3cf7cb81227e Mon Sep 17 00:00:00 2001 From: Chloe Marcec Date: Wed, 20 Jan 2021 21:53:57 +1100 Subject: mii: Fix BuildRandomStoreData & Cleanup raw_data Cleaned up mii raw data to reflect the underlying values instead of just a chunk of bytes. Fixed BuildRandomStoreData not actually generating random miis properly. "values" should be a u32, not a u8. --- src/core/hle/service/mii/manager.cpp | 50 +++++++++++------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) (limited to 'src/core/hle/service/mii/manager.cpp') diff --git a/src/core/hle/service/mii/manager.cpp b/src/core/hle/service/mii/manager.cpp index 567a4e345..70350a2a3 100644 --- a/src/core/hle/service/mii/manager.cpp +++ b/src/core/hle/service/mii/manager.cpp @@ -21,7 +21,7 @@ namespace { constexpr ResultCode ERROR_CANNOT_FIND_ENTRY{ErrorModule::Mii, 4}; -constexpr std::size_t DefaultMiiCount{sizeof(RawData::DefaultMii) / sizeof(DefaultMii)}; +constexpr std::size_t DefaultMiiCount{RawData::DefaultMii.size()}; constexpr MiiStoreData::Name DefaultMiiName{u'y', u'u', u'z', u'u'}; constexpr std::array HairColorLookup{8, 1, 2, 3, 4, 5, 6, 7}; @@ -141,13 +141,6 @@ T GetRandomValue(T max) { return GetRandomValue({}, max); } -template -T GetArrayValue(const u8* data, std::size_t index) { - T result{}; - std::memcpy(&result, &data[index * sizeof(T)], sizeof(T)); - return result; -} - MiiStoreData BuildRandomStoreData(Age age, Gender gender, Race race, const Common::UUID& user_id) { MiiStoreBitFields bf{}; @@ -193,32 +186,20 @@ MiiStoreData BuildRandomStoreData(Age age, Gender gender, Race race, const Commo const std::size_t index{3 * static_cast(age) + 9 * static_cast(gender) + static_cast(race)}; - const auto faceline_type_info{ - GetArrayValue(&RawData::RandomMiiFaceline[0], index)}; - const auto faceline_color_info{GetArrayValue( - RawData::RandomMiiFacelineColor.data(), + const auto faceline_type_info{RawData::RandomMiiFaceline.at(index)}; + const auto faceline_color_info{RawData::RandomMiiFacelineColor.at( 3 * static_cast(gender) + static_cast(race))}; - const auto faceline_wrinkle_info{ - GetArrayValue(RawData::RandomMiiFacelineWrinkle.data(), index)}; - const auto faceline_makeup_info{ - GetArrayValue(RawData::RandomMiiFacelineMakeup.data(), index)}; - const auto hair_type_info{ - GetArrayValue(RawData::RandomMiiHairType.data(), index)}; - const auto hair_color_info{GetArrayValue(RawData::RandomMiiHairColor.data(), - 3 * static_cast(race) + - static_cast(age))}; - const auto eye_type_info{ - GetArrayValue(RawData::RandomMiiEyeType.data(), index)}; - const auto eye_color_info{GetArrayValue(RawData::RandomMiiEyeColor.data(), - static_cast(race))}; - const auto eyebrow_type_info{ - GetArrayValue(RawData::RandomMiiEyebrowType.data(), index)}; - const auto nose_type_info{ - GetArrayValue(RawData::RandomMiiNoseType.data(), index)}; - const auto mouth_type_info{ - GetArrayValue(RawData::RandomMiiMouthType.data(), index)}; - const auto glasses_type_info{GetArrayValue(RawData::RandomMiiGlassType.data(), - static_cast(age))}; + const auto faceline_wrinkle_info{RawData::RandomMiiFacelineWrinkle.at(index)}; + const auto faceline_makeup_info{RawData::RandomMiiFacelineMakeup.at(index)}; + const auto hair_type_info{RawData::RandomMiiHairType.at(index)}; + const auto hair_color_info{RawData::RandomMiiHairColor.at(3 * static_cast(race) + + static_cast(age))}; + const auto eye_type_info{RawData::RandomMiiEyeType.at(index)}; + const auto eye_color_info{RawData::RandomMiiEyeColor.at(static_cast(race))}; + const auto eyebrow_type_info{RawData::RandomMiiEyebrowType.at(index)}; + const auto nose_type_info{RawData::RandomMiiNoseType.at(index)}; + const auto mouth_type_info{RawData::RandomMiiMouthType.at(index)}; + const auto glasses_type_info{RawData::RandomMiiGlassType.at(static_cast(age))}; bf.faceline_type.Assign( faceline_type_info.values[GetRandomValue(faceline_type_info.values_count)]); @@ -455,8 +436,7 @@ MiiInfo MiiManager::BuildRandom(Age age, Gender gender, Race race) { } MiiInfo MiiManager::BuildDefault(std::size_t index) { - return ConvertStoreDataToInfo(BuildDefaultStoreData( - GetArrayValue(RawData::DefaultMii.data(), index), user_id)); + return ConvertStoreDataToInfo(BuildDefaultStoreData(RawData::DefaultMii.at(index), user_id)); } ResultVal> MiiManager::GetDefault(SourceFlag source_flag) { -- cgit v1.2.3