diff options
| -rw-r--r-- | src/core/hle/service/mii/mii_manager.cpp | 33 | ||||
| -rw-r--r-- | src/core/hle/service/mii/mii_manager.h | 7 | ||||
| -rw-r--r-- | src/core/hle/service/mii/types.h | 57 | ||||
| -rw-r--r-- | src/core/hle/service/nfp/amiibo_crypto.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/nfp/nfp_device.cpp | 10 | ||||
| -rw-r--r-- | src/core/hle/service/nfp/nfp_types.h | 6 |
6 files changed, 100 insertions, 15 deletions
diff --git a/src/core/hle/service/mii/mii_manager.cpp b/src/core/hle/service/mii/mii_manager.cpp index 9d31a080c..c920650f5 100644 --- a/src/core/hle/service/mii/mii_manager.cpp +++ b/src/core/hle/service/mii/mii_manager.cpp | |||
| @@ -510,7 +510,7 @@ CharInfo MiiManager::ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const { | |||
| 510 | return mii; | 510 | return mii; |
| 511 | } | 511 | } |
| 512 | 512 | ||
| 513 | Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | 513 | Ver3StoreData MiiManager::BuildFromStoreData(const CharInfo& mii) const { |
| 514 | Service::Mii::MiiManager manager; | 514 | Service::Mii::MiiManager manager; |
| 515 | Ver3StoreData mii_v3{}; | 515 | Ver3StoreData mii_v3{}; |
| 516 | 516 | ||
| @@ -534,16 +534,13 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 534 | mii_v3.region_information.character_set.Assign(mii.font_region); | 534 | mii_v3.region_information.character_set.Assign(mii.font_region); |
| 535 | 535 | ||
| 536 | mii_v3.appearance_bits1.face_shape.Assign(mii.faceline_type); | 536 | mii_v3.appearance_bits1.face_shape.Assign(mii.faceline_type); |
| 537 | mii_v3.appearance_bits1.skin_color.Assign(mii.faceline_color); | ||
| 538 | mii_v3.appearance_bits2.wrinkles.Assign(mii.faceline_wrinkle); | 537 | mii_v3.appearance_bits2.wrinkles.Assign(mii.faceline_wrinkle); |
| 539 | mii_v3.appearance_bits2.makeup.Assign(mii.faceline_make); | 538 | mii_v3.appearance_bits2.makeup.Assign(mii.faceline_make); |
| 540 | 539 | ||
| 541 | mii_v3.hair_style = mii.hair_type; | 540 | mii_v3.hair_style = mii.hair_type; |
| 542 | mii_v3.appearance_bits3.hair_color.Assign(mii.hair_color); | ||
| 543 | mii_v3.appearance_bits3.flip_hair.Assign(mii.hair_flip); | 541 | mii_v3.appearance_bits3.flip_hair.Assign(mii.hair_flip); |
| 544 | 542 | ||
| 545 | mii_v3.appearance_bits4.eye_type.Assign(mii.eye_type); | 543 | mii_v3.appearance_bits4.eye_type.Assign(mii.eye_type); |
| 546 | mii_v3.appearance_bits4.eye_color.Assign(mii.eye_color); | ||
| 547 | mii_v3.appearance_bits4.eye_scale.Assign(mii.eye_scale); | 544 | mii_v3.appearance_bits4.eye_scale.Assign(mii.eye_scale); |
| 548 | mii_v3.appearance_bits4.eye_vertical_stretch.Assign(mii.eye_aspect); | 545 | mii_v3.appearance_bits4.eye_vertical_stretch.Assign(mii.eye_aspect); |
| 549 | mii_v3.appearance_bits4.eye_rotation.Assign(mii.eye_rotate); | 546 | mii_v3.appearance_bits4.eye_rotation.Assign(mii.eye_rotate); |
| @@ -551,7 +548,6 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 551 | mii_v3.appearance_bits4.eye_y_position.Assign(mii.eye_y); | 548 | mii_v3.appearance_bits4.eye_y_position.Assign(mii.eye_y); |
| 552 | 549 | ||
| 553 | mii_v3.appearance_bits5.eyebrow_style.Assign(mii.eyebrow_type); | 550 | mii_v3.appearance_bits5.eyebrow_style.Assign(mii.eyebrow_type); |
| 554 | mii_v3.appearance_bits5.eyebrow_color.Assign(mii.eyebrow_color); | ||
| 555 | mii_v3.appearance_bits5.eyebrow_scale.Assign(mii.eyebrow_scale); | 551 | mii_v3.appearance_bits5.eyebrow_scale.Assign(mii.eyebrow_scale); |
| 556 | mii_v3.appearance_bits5.eyebrow_yscale.Assign(mii.eyebrow_aspect); | 552 | mii_v3.appearance_bits5.eyebrow_yscale.Assign(mii.eyebrow_aspect); |
| 557 | mii_v3.appearance_bits5.eyebrow_rotation.Assign(mii.eyebrow_rotate); | 553 | mii_v3.appearance_bits5.eyebrow_rotation.Assign(mii.eyebrow_rotate); |
| @@ -563,7 +559,6 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 563 | mii_v3.appearance_bits6.nose_y_position.Assign(mii.nose_y); | 559 | mii_v3.appearance_bits6.nose_y_position.Assign(mii.nose_y); |
| 564 | 560 | ||
| 565 | mii_v3.appearance_bits7.mouth_type.Assign(mii.mouth_type); | 561 | mii_v3.appearance_bits7.mouth_type.Assign(mii.mouth_type); |
| 566 | mii_v3.appearance_bits7.mouth_color.Assign(mii.mouth_color); | ||
| 567 | mii_v3.appearance_bits7.mouth_scale.Assign(mii.mouth_scale); | 562 | mii_v3.appearance_bits7.mouth_scale.Assign(mii.mouth_scale); |
| 568 | mii_v3.appearance_bits7.mouth_horizontal_stretch.Assign(mii.mouth_aspect); | 563 | mii_v3.appearance_bits7.mouth_horizontal_stretch.Assign(mii.mouth_aspect); |
| 569 | mii_v3.appearance_bits8.mouth_y_position.Assign(mii.mouth_y); | 564 | mii_v3.appearance_bits8.mouth_y_position.Assign(mii.mouth_y); |
| @@ -573,10 +568,7 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 573 | mii_v3.appearance_bits9.mustache_y_position.Assign(mii.mustache_y); | 568 | mii_v3.appearance_bits9.mustache_y_position.Assign(mii.mustache_y); |
| 574 | 569 | ||
| 575 | mii_v3.appearance_bits9.bear_type.Assign(mii.beard_type); | 570 | mii_v3.appearance_bits9.bear_type.Assign(mii.beard_type); |
| 576 | mii_v3.appearance_bits9.facial_hair_color.Assign(mii.beard_color); | ||
| 577 | 571 | ||
| 578 | mii_v3.appearance_bits10.glasses_type.Assign(mii.glasses_type); | ||
| 579 | mii_v3.appearance_bits10.glasses_color.Assign(mii.glasses_color); | ||
| 580 | mii_v3.appearance_bits10.glasses_scale.Assign(mii.glasses_scale); | 572 | mii_v3.appearance_bits10.glasses_scale.Assign(mii.glasses_scale); |
| 581 | mii_v3.appearance_bits10.glasses_y_position.Assign(mii.glasses_y); | 573 | mii_v3.appearance_bits10.glasses_y_position.Assign(mii.glasses_y); |
| 582 | 574 | ||
| @@ -585,6 +577,16 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 585 | mii_v3.appearance_bits11.mole_x_position.Assign(mii.mole_x); | 577 | mii_v3.appearance_bits11.mole_x_position.Assign(mii.mole_x); |
| 586 | mii_v3.appearance_bits11.mole_y_position.Assign(mii.mole_y); | 578 | mii_v3.appearance_bits11.mole_y_position.Assign(mii.mole_y); |
| 587 | 579 | ||
| 580 | // These types are converted to V3 from a table | ||
| 581 | mii_v3.appearance_bits1.skin_color.Assign(Ver3FacelineColorTable[mii.faceline_color]); | ||
| 582 | mii_v3.appearance_bits3.hair_color.Assign(Ver3HairColorTable[mii.hair_color]); | ||
| 583 | mii_v3.appearance_bits4.eye_color.Assign(Ver3EyeColorTable[mii.eye_color]); | ||
| 584 | mii_v3.appearance_bits5.eyebrow_color.Assign(Ver3HairColorTable[mii.eyebrow_color]); | ||
| 585 | mii_v3.appearance_bits7.mouth_color.Assign(Ver3MouthlineColorTable[mii.mouth_color]); | ||
| 586 | mii_v3.appearance_bits9.facial_hair_color.Assign(Ver3HairColorTable[mii.beard_color]); | ||
| 587 | mii_v3.appearance_bits10.glasses_color.Assign(Ver3GlassColorTable[mii.glasses_color]); | ||
| 588 | mii_v3.appearance_bits10.glasses_type.Assign(Ver3GlassTypeTable[mii.glasses_type]); | ||
| 589 | |||
| 588 | mii_v3.crc = GenerateCrc16(&mii_v3, sizeof(Ver3StoreData) - sizeof(u16)); | 590 | mii_v3.crc = GenerateCrc16(&mii_v3, sizeof(Ver3StoreData) - sizeof(u16)); |
| 589 | 591 | ||
| 590 | // TODO: Validate mii_v3 data | 592 | // TODO: Validate mii_v3 data |
| @@ -592,6 +594,19 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { | |||
| 592 | return mii_v3; | 594 | return mii_v3; |
| 593 | } | 595 | } |
| 594 | 596 | ||
| 597 | NfpStoreDataExtension MiiManager::SetFromStoreData(const CharInfo& mii) const { | ||
| 598 | return { | ||
| 599 | .faceline_color = static_cast<u8>(mii.faceline_color & 0xf), | ||
| 600 | .hair_color = static_cast<u8>(mii.hair_color & 0x7f), | ||
| 601 | .eye_color = static_cast<u8>(mii.eyebrow_color & 0x7f), | ||
| 602 | .eyebrow_color = static_cast<u8>(mii.eyebrow_color & 0x7f), | ||
| 603 | .mouth_color = static_cast<u8>(mii.mouth_color & 0x7f), | ||
| 604 | .beard_color = static_cast<u8>(mii.beard_color & 0x7f), | ||
| 605 | .glass_color = static_cast<u8>(mii.glasses_color & 0x7f), | ||
| 606 | .glass_type = static_cast<u8>(mii.glasses_type & 0x1f), | ||
| 607 | }; | ||
| 608 | } | ||
| 609 | |||
| 595 | bool MiiManager::ValidateV3Info(const Ver3StoreData& mii_v3) const { | 610 | bool MiiManager::ValidateV3Info(const Ver3StoreData& mii_v3) const { |
| 596 | bool is_valid = mii_v3.version == 0 || mii_v3.version == 3; | 611 | bool is_valid = mii_v3.version == 0 || mii_v3.version == 3; |
| 597 | 612 | ||
diff --git a/src/core/hle/service/mii/mii_manager.h b/src/core/hle/service/mii/mii_manager.h index 83ad3d343..5525fcd1c 100644 --- a/src/core/hle/service/mii/mii_manager.h +++ b/src/core/hle/service/mii/mii_manager.h | |||
| @@ -23,11 +23,16 @@ public: | |||
| 23 | CharInfo BuildRandom(Age age, Gender gender, Race race); | 23 | CharInfo BuildRandom(Age age, Gender gender, Race race); |
| 24 | CharInfo BuildDefault(std::size_t index); | 24 | CharInfo BuildDefault(std::size_t index); |
| 25 | CharInfo ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const; | 25 | CharInfo ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const; |
| 26 | Ver3StoreData ConvertCharInfoToV3(const CharInfo& mii) const; | ||
| 27 | bool ValidateV3Info(const Ver3StoreData& mii_v3) const; | 26 | bool ValidateV3Info(const Ver3StoreData& mii_v3) const; |
| 28 | ResultVal<std::vector<MiiInfoElement>> GetDefault(SourceFlag source_flag); | 27 | ResultVal<std::vector<MiiInfoElement>> GetDefault(SourceFlag source_flag); |
| 29 | Result GetIndex(const CharInfo& info, u32& index); | 28 | Result GetIndex(const CharInfo& info, u32& index); |
| 30 | 29 | ||
| 30 | // This is nn::mii::detail::Ver::StoreDataRaw::BuildFromStoreData | ||
| 31 | Ver3StoreData BuildFromStoreData(const CharInfo& mii) const; | ||
| 32 | |||
| 33 | // This is nn::mii::detail::NfpStoreDataExtentionRaw::SetFromStoreData | ||
| 34 | NfpStoreDataExtension SetFromStoreData(const CharInfo& mii) const; | ||
| 35 | |||
| 31 | private: | 36 | private: |
| 32 | const Common::UUID user_id{}; | 37 | const Common::UUID user_id{}; |
| 33 | u64 update_counter{}; | 38 | u64 update_counter{}; |
diff --git a/src/core/hle/service/mii/types.h b/src/core/hle/service/mii/types.h index 1f53e6af3..c48d08d79 100644 --- a/src/core/hle/service/mii/types.h +++ b/src/core/hle/service/mii/types.h | |||
| @@ -370,6 +370,63 @@ struct Ver3StoreData { | |||
| 370 | }; | 370 | }; |
| 371 | static_assert(sizeof(Ver3StoreData) == 0x60, "Ver3StoreData is an invalid size"); | 371 | static_assert(sizeof(Ver3StoreData) == 0x60, "Ver3StoreData is an invalid size"); |
| 372 | 372 | ||
| 373 | struct NfpStoreDataExtension { | ||
| 374 | u8 faceline_color; | ||
| 375 | u8 hair_color; | ||
| 376 | u8 eye_color; | ||
| 377 | u8 eyebrow_color; | ||
| 378 | u8 mouth_color; | ||
| 379 | u8 beard_color; | ||
| 380 | u8 glass_color; | ||
| 381 | u8 glass_type; | ||
| 382 | }; | ||
| 383 | static_assert(sizeof(NfpStoreDataExtension) == 0x8, "NfpStoreDataExtension is an invalid size"); | ||
| 384 | |||
| 385 | constexpr std::array<u8, 0x10> Ver3FacelineColorTable{ | ||
| 386 | 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x0, 0x1, 0x5, 0x5, | ||
| 387 | }; | ||
| 388 | |||
| 389 | constexpr std::array<u8, 100> Ver3HairColorTable{ | ||
| 390 | 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x0, 0x4, 0x3, 0x5, 0x4, 0x4, 0x6, 0x2, 0x0, | ||
| 391 | 0x6, 0x4, 0x3, 0x2, 0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, | ||
| 392 | 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x4, | ||
| 393 | 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, | ||
| 394 | 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x7, 0x5, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0x7, | ||
| 395 | 0x7, 0x7, 0x7, 0x7, 0x3, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, 0x4, 0x4, 0x4, 0x4, | ||
| 396 | }; | ||
| 397 | |||
| 398 | constexpr std::array<u8, 100> Ver3EyeColorTable{ | ||
| 399 | 0x0, 0x2, 0x2, 0x2, 0x1, 0x3, 0x2, 0x3, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x2, 0x2, 0x4, | ||
| 400 | 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, | ||
| 401 | 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1, 0x0, 0x4, 0x4, | ||
| 402 | 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, | ||
| 403 | 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, | ||
| 404 | 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, | ||
| 405 | }; | ||
| 406 | |||
| 407 | constexpr std::array<u8, 100> Ver3MouthlineColorTable{ | ||
| 408 | 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1, 0x4, | ||
| 409 | 0x4, 0x4, 0x0, 0x1, 0x2, 0x3, 0x4, 0x4, 0x2, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x1, 0x4, | ||
| 410 | 0x4, 0x2, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, | ||
| 411 | 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, | ||
| 412 | 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, | ||
| 413 | 0x3, 0x3, 0x3, 0x3, 0x4, 0x0, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, 0x3, 0x3, | ||
| 414 | }; | ||
| 415 | |||
| 416 | constexpr std::array<u8, 100> Ver3GlassColorTable{ | ||
| 417 | 0x0, 0x1, 0x1, 0x1, 0x5, 0x1, 0x1, 0x4, 0x0, 0x5, 0x1, 0x1, 0x3, 0x5, 0x1, 0x2, 0x3, | ||
| 418 | 0x4, 0x5, 0x4, 0x2, 0x2, 0x4, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, | ||
| 419 | 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, | ||
| 420 | 0x3, 0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x0, 0x5, 0x5, | ||
| 421 | 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x1, 0x4, | ||
| 422 | 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, | ||
| 423 | }; | ||
| 424 | |||
| 425 | constexpr std::array<u8, 20> Ver3GlassTypeTable{ | ||
| 426 | 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x1, | ||
| 427 | 0x2, 0x1, 0x3, 0x7, 0x7, 0x6, 0x7, 0x8, 0x7, 0x7, | ||
| 428 | }; | ||
| 429 | |||
| 373 | struct MiiStoreData { | 430 | struct MiiStoreData { |
| 374 | using Name = std::array<char16_t, 10>; | 431 | using Name = std::array<char16_t, 10>; |
| 375 | 432 | ||
diff --git a/src/core/hle/service/nfp/amiibo_crypto.cpp b/src/core/hle/service/nfp/amiibo_crypto.cpp index 66773d26c..bba862fb2 100644 --- a/src/core/hle/service/nfp/amiibo_crypto.cpp +++ b/src/core/hle/service/nfp/amiibo_crypto.cpp | |||
| @@ -88,6 +88,7 @@ NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { | |||
| 88 | encoded_data.application_area_id = nfc_data.user_memory.application_area_id; | 88 | encoded_data.application_area_id = nfc_data.user_memory.application_area_id; |
| 89 | encoded_data.application_id_byte = nfc_data.user_memory.application_id_byte; | 89 | encoded_data.application_id_byte = nfc_data.user_memory.application_id_byte; |
| 90 | encoded_data.unknown = nfc_data.user_memory.unknown; | 90 | encoded_data.unknown = nfc_data.user_memory.unknown; |
| 91 | encoded_data.mii_extension = nfc_data.user_memory.mii_extension; | ||
| 91 | encoded_data.unknown2 = nfc_data.user_memory.unknown2; | 92 | encoded_data.unknown2 = nfc_data.user_memory.unknown2; |
| 92 | encoded_data.register_info_crc = nfc_data.user_memory.register_info_crc; | 93 | encoded_data.register_info_crc = nfc_data.user_memory.register_info_crc; |
| 93 | encoded_data.application_area = nfc_data.user_memory.application_area; | 94 | encoded_data.application_area = nfc_data.user_memory.application_area; |
| @@ -122,6 +123,7 @@ EncryptedNTAG215File EncodedDataToNfcData(const NTAG215File& encoded_data) { | |||
| 122 | nfc_data.user_memory.application_area_id = encoded_data.application_area_id; | 123 | nfc_data.user_memory.application_area_id = encoded_data.application_area_id; |
| 123 | nfc_data.user_memory.application_id_byte = encoded_data.application_id_byte; | 124 | nfc_data.user_memory.application_id_byte = encoded_data.application_id_byte; |
| 124 | nfc_data.user_memory.unknown = encoded_data.unknown; | 125 | nfc_data.user_memory.unknown = encoded_data.unknown; |
| 126 | nfc_data.user_memory.mii_extension = encoded_data.mii_extension; | ||
| 125 | nfc_data.user_memory.unknown2 = encoded_data.unknown2; | 127 | nfc_data.user_memory.unknown2 = encoded_data.unknown2; |
| 126 | nfc_data.user_memory.register_info_crc = encoded_data.register_info_crc; | 128 | nfc_data.user_memory.register_info_crc = encoded_data.register_info_crc; |
| 127 | nfc_data.user_memory.application_area = encoded_data.application_area; | 129 | nfc_data.user_memory.application_area = encoded_data.application_area; |
diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp index 53bc56814..c5d8ceeff 100644 --- a/src/core/hle/service/nfp/nfp_device.cpp +++ b/src/core/hle/service/nfp/nfp_device.cpp | |||
| @@ -471,6 +471,7 @@ Result NfpDevice::SetRegisterInfoPrivate(const AmiiboName& amiibo_name) { | |||
| 471 | } | 471 | } |
| 472 | 472 | ||
| 473 | Service::Mii::MiiManager manager; | 473 | Service::Mii::MiiManager manager; |
| 474 | const auto mii = manager.BuildDefault(0); | ||
| 474 | auto& settings = tag_data.settings; | 475 | auto& settings = tag_data.settings; |
| 475 | 476 | ||
| 476 | if (tag_data.settings.settings.amiibo_initialized == 0) { | 477 | if (tag_data.settings.settings.amiibo_initialized == 0) { |
| @@ -479,9 +480,10 @@ Result NfpDevice::SetRegisterInfoPrivate(const AmiiboName& amiibo_name) { | |||
| 479 | } | 480 | } |
| 480 | 481 | ||
| 481 | SetAmiiboName(settings, amiibo_name); | 482 | SetAmiiboName(settings, amiibo_name); |
| 482 | tag_data.owner_mii = manager.ConvertCharInfoToV3(manager.BuildDefault(0)); | 483 | tag_data.owner_mii = manager.BuildFromStoreData(mii); |
| 484 | tag_data.mii_extension = manager.SetFromStoreData(mii); | ||
| 483 | tag_data.unknown = 0; | 485 | tag_data.unknown = 0; |
| 484 | tag_data.unknown2[6] = 0; | 486 | tag_data.unknown2 = {}; |
| 485 | settings.country_code_id = 0; | 487 | settings.country_code_id = 0; |
| 486 | settings.settings.font_region.Assign(0); | 488 | settings.settings.font_region.Assign(0); |
| 487 | settings.settings.amiibo_initialized.Assign(1); | 489 | settings.settings.amiibo_initialized.Assign(1); |
| @@ -840,7 +842,8 @@ void NfpDevice::UpdateRegisterInfoCrc() { | |||
| 840 | Mii::Ver3StoreData mii; | 842 | Mii::Ver3StoreData mii; |
| 841 | u8 application_id_byte; | 843 | u8 application_id_byte; |
| 842 | u8 unknown; | 844 | u8 unknown; |
| 843 | std::array<u32, 0x7> unknown2; | 845 | Mii::NfpStoreDataExtension mii_extension; |
| 846 | std::array<u32, 0x5> unknown2; | ||
| 844 | }; | 847 | }; |
| 845 | static_assert(sizeof(CrcData) == 0x7e, "CrcData is an invalid size"); | 848 | static_assert(sizeof(CrcData) == 0x7e, "CrcData is an invalid size"); |
| 846 | #pragma pack(pop) | 849 | #pragma pack(pop) |
| @@ -849,6 +852,7 @@ void NfpDevice::UpdateRegisterInfoCrc() { | |||
| 849 | .mii = tag_data.owner_mii, | 852 | .mii = tag_data.owner_mii, |
| 850 | .application_id_byte = tag_data.application_id_byte, | 853 | .application_id_byte = tag_data.application_id_byte, |
| 851 | .unknown = tag_data.unknown, | 854 | .unknown = tag_data.unknown, |
| 855 | .mii_extension = tag_data.mii_extension, | ||
| 852 | .unknown2 = tag_data.unknown2, | 856 | .unknown2 = tag_data.unknown2, |
| 853 | }; | 857 | }; |
| 854 | 858 | ||
diff --git a/src/core/hle/service/nfp/nfp_types.h b/src/core/hle/service/nfp/nfp_types.h index 5f4a5d7f9..b3599a513 100644 --- a/src/core/hle/service/nfp/nfp_types.h +++ b/src/core/hle/service/nfp/nfp_types.h | |||
| @@ -259,7 +259,8 @@ struct EncryptedAmiiboFile { | |||
| 259 | u32_be application_area_id; // Encrypted Game id | 259 | u32_be application_area_id; // Encrypted Game id |
| 260 | u8 application_id_byte; | 260 | u8 application_id_byte; |
| 261 | u8 unknown; | 261 | u8 unknown; |
| 262 | std::array<u32, 0x7> unknown2; | 262 | Service::Mii::NfpStoreDataExtension mii_extension; |
| 263 | std::array<u32, 0x5> unknown2; | ||
| 263 | u32_be register_info_crc; | 264 | u32_be register_info_crc; |
| 264 | ApplicationArea application_area; // Encrypted Game data | 265 | ApplicationArea application_area; // Encrypted Game data |
| 265 | }; | 266 | }; |
| @@ -280,7 +281,8 @@ struct NTAG215File { | |||
| 280 | u32_be application_area_id; | 281 | u32_be application_area_id; |
| 281 | u8 application_id_byte; | 282 | u8 application_id_byte; |
| 282 | u8 unknown; | 283 | u8 unknown; |
| 283 | std::array<u32, 0x7> unknown2; | 284 | Service::Mii::NfpStoreDataExtension mii_extension; |
| 285 | std::array<u32, 0x5> unknown2; | ||
| 284 | u32_be register_info_crc; | 286 | u32_be register_info_crc; |
| 285 | ApplicationArea application_area; // Encrypted Game data | 287 | ApplicationArea application_area; // Encrypted Game data |
| 286 | HashData hmac_tag; // Hash | 288 | HashData hmac_tag; // Hash |