diff options
author | pineappleEA <pineaea@gmail.com> | 2023-06-04 19:37:13 +0200 |
---|---|---|
committer | pineappleEA <pineaea@gmail.com> | 2023-06-04 19:37:13 +0200 |
commit | 125665beb59a47143b7560fc9d2cdde3a32be2b4 (patch) | |
tree | 9ede11440cedc37d9cf3566065193d3788bd022d | |
parent | 19ca7d484fd8782da85a8cfd29cae4d539c05acf (diff) |
early-access version 3637EA-3637
-rwxr-xr-x | README.md | 2 | ||||
-rwxr-xr-x | src/core/file_sys/control_metadata.cpp | 12 | ||||
-rwxr-xr-x | src/core/file_sys/control_metadata.h | 4 | ||||
-rwxr-xr-x | src/core/file_sys/patch_manager.cpp | 33 | ||||
-rwxr-xr-x | src/core/hle/service/filesystem/fsp_srv.cpp | 20 | ||||
-rwxr-xr-x | src/yuzu/main.cpp | 3 |
6 files changed, 55 insertions, 19 deletions
@@ -1,7 +1,7 @@ | |||
1 | yuzu emulator early access | 1 | yuzu emulator early access |
2 | ============= | 2 | ============= |
3 | 3 | ||
4 | This is the source code for early-access 3636. | 4 | This is the source code for early-access 3637. |
5 | 5 | ||
6 | ## Legal Notice | 6 | ## Legal Notice |
7 | 7 | ||
diff --git a/src/core/file_sys/control_metadata.cpp b/src/core/file_sys/control_metadata.cpp index 8921a88f8..39dd0f0b3 100755 --- a/src/core/file_sys/control_metadata.cpp +++ b/src/core/file_sys/control_metadata.cpp | |||
@@ -23,8 +23,8 @@ const std::array<const char*, 16> LANGUAGE_NAMES{{ | |||
23 | "Portuguese", | 23 | "Portuguese", |
24 | "Russian", | 24 | "Russian", |
25 | "Korean", | 25 | "Korean", |
26 | "Taiwanese", | 26 | "TraditionalChinese", |
27 | "Chinese", | 27 | "SimplifiedChinese", |
28 | "BrazilianPortuguese", | 28 | "BrazilianPortuguese", |
29 | }}; | 29 | }}; |
30 | 30 | ||
@@ -45,17 +45,17 @@ constexpr std::array<Language, 18> language_to_codes = {{ | |||
45 | Language::German, | 45 | Language::German, |
46 | Language::Italian, | 46 | Language::Italian, |
47 | Language::Spanish, | 47 | Language::Spanish, |
48 | Language::Chinese, | 48 | Language::SimplifiedChinese, |
49 | Language::Korean, | 49 | Language::Korean, |
50 | Language::Dutch, | 50 | Language::Dutch, |
51 | Language::Portuguese, | 51 | Language::Portuguese, |
52 | Language::Russian, | 52 | Language::Russian, |
53 | Language::Taiwanese, | 53 | Language::TraditionalChinese, |
54 | Language::BritishEnglish, | 54 | Language::BritishEnglish, |
55 | Language::CanadianFrench, | 55 | Language::CanadianFrench, |
56 | Language::LatinAmericanSpanish, | 56 | Language::LatinAmericanSpanish, |
57 | Language::Chinese, | 57 | Language::SimplifiedChinese, |
58 | Language::Taiwanese, | 58 | Language::TraditionalChinese, |
59 | Language::BrazilianPortuguese, | 59 | Language::BrazilianPortuguese, |
60 | }}; | 60 | }}; |
61 | 61 | ||
diff --git a/src/core/file_sys/control_metadata.h b/src/core/file_sys/control_metadata.h index b3437330d..43502df6d 100755 --- a/src/core/file_sys/control_metadata.h +++ b/src/core/file_sys/control_metadata.h | |||
@@ -84,8 +84,8 @@ enum class Language : u8 { | |||
84 | Portuguese = 10, | 84 | Portuguese = 10, |
85 | Russian = 11, | 85 | Russian = 11, |
86 | Korean = 12, | 86 | Korean = 12, |
87 | Taiwanese = 13, | 87 | TraditionalChinese = 13, |
88 | Chinese = 14, | 88 | SimplifiedChinese = 14, |
89 | BrazilianPortuguese = 15, | 89 | BrazilianPortuguese = 15, |
90 | 90 | ||
91 | Default = 255, | 91 | Default = 255, |
diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp index 1210e0b29..084021059 100755 --- a/src/core/file_sys/patch_manager.cpp +++ b/src/core/file_sys/patch_manager.cpp | |||
@@ -25,6 +25,8 @@ | |||
25 | #include "core/file_sys/vfs_layered.h" | 25 | #include "core/file_sys/vfs_layered.h" |
26 | #include "core/file_sys/vfs_vector.h" | 26 | #include "core/file_sys/vfs_vector.h" |
27 | #include "core/hle/service/filesystem/filesystem.h" | 27 | #include "core/hle/service/filesystem/filesystem.h" |
28 | #include "core/hle/service/ns/language.h" | ||
29 | #include "core/hle/service/set/set.h" | ||
28 | #include "core/loader/loader.h" | 30 | #include "core/loader/loader.h" |
29 | #include "core/loader/nso.h" | 31 | #include "core/loader/nso.h" |
30 | #include "core/memory/cheat_engine.h" | 32 | #include "core/memory/cheat_engine.h" |
@@ -624,8 +626,37 @@ PatchManager::Metadata PatchManager::ParseControlNCA(const NCA& nca) const { | |||
624 | 626 | ||
625 | auto nacp = nacp_file == nullptr ? nullptr : std::make_unique<NACP>(nacp_file); | 627 | auto nacp = nacp_file == nullptr ? nullptr : std::make_unique<NACP>(nacp_file); |
626 | 628 | ||
629 | // Get language code from settings | ||
630 | const auto language_code = | ||
631 | Service::Set::GetLanguageCodeFromIndex(Settings::values.language_index.GetValue()); | ||
632 | |||
633 | // Convert to application language and get priority list | ||
634 | const auto application_language = | ||
635 | Service::NS::ConvertToApplicationLanguage(language_code) | ||
636 | .value_or(Service::NS::ApplicationLanguage::AmericanEnglish); | ||
637 | const auto language_priority_list = | ||
638 | Service::NS::GetApplicationLanguagePriorityList(application_language); | ||
639 | |||
640 | // Convert to language names | ||
641 | auto priority_language_names = FileSys::LANGUAGE_NAMES; // Copy | ||
642 | if (language_priority_list) { | ||
643 | for (size_t i = 0; i < priority_language_names.size(); ++i) { | ||
644 | // Relies on FileSys::LANGUAGE_NAMES being in the same order as | ||
645 | // Service::NS::ApplicationLanguage | ||
646 | const auto language_index = static_cast<u8>(language_priority_list->at(i)); | ||
647 | |||
648 | if (language_index < FileSys::LANGUAGE_NAMES.size()) { | ||
649 | priority_language_names[i] = FileSys::LANGUAGE_NAMES[language_index]; | ||
650 | } else { | ||
651 | // Not a catastrophe, unlikely to happen | ||
652 | LOG_WARNING(Loader, "Invalid language index {}", language_index); | ||
653 | } | ||
654 | } | ||
655 | } | ||
656 | |||
657 | // Get first matching icon | ||
627 | VirtualFile icon_file; | 658 | VirtualFile icon_file; |
628 | for (const auto& language : FileSys::LANGUAGE_NAMES) { | 659 | for (const auto& language : priority_language_names) { |
629 | icon_file = extracted->GetFile(std::string("icon_").append(language).append(".dat")); | 660 | icon_file = extracted->GetFile(std::string("icon_").append(language).append(".dat")); |
630 | if (icon_file != nullptr) { | 661 | if (icon_file != nullptr) { |
631 | break; | 662 | break; |
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index d3e31b48b..f47cb6b5c 100755 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp | |||
@@ -968,16 +968,20 @@ void FSP_SRV::ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute(HLERequ | |||
968 | void FSP_SRV::OpenDataStorageByCurrentProcess(HLERequestContext& ctx) { | 968 | void FSP_SRV::OpenDataStorageByCurrentProcess(HLERequestContext& ctx) { |
969 | LOG_DEBUG(Service_FS, "called"); | 969 | LOG_DEBUG(Service_FS, "called"); |
970 | 970 | ||
971 | auto current_romfs = fsc.OpenRomFSCurrentProcess(); | 971 | if (!romfs) { |
972 | if (current_romfs.Failed()) { | 972 | auto current_romfs = fsc.OpenRomFSCurrentProcess(); |
973 | // TODO (bunnei): Find the right error code to use here | 973 | if (current_romfs.Failed()) { |
974 | LOG_CRITICAL(Service_FS, "no file system interface available!"); | 974 | // TODO (bunnei): Find the right error code to use here |
975 | IPC::ResponseBuilder rb{ctx, 2}; | 975 | LOG_CRITICAL(Service_FS, "no file system interface available!"); |
976 | rb.Push(ResultUnknown); | 976 | IPC::ResponseBuilder rb{ctx, 2}; |
977 | return; | 977 | rb.Push(ResultUnknown); |
978 | return; | ||
979 | } | ||
980 | |||
981 | romfs = current_romfs.Unwrap(); | ||
978 | } | 982 | } |
979 | 983 | ||
980 | auto storage = std::make_shared<IStorage>(system, std::move(current_romfs.Unwrap())); | 984 | auto storage = std::make_shared<IStorage>(system, romfs); |
981 | 985 | ||
982 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 986 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
983 | rb.Push(ResultSuccess); | 987 | rb.Push(ResultSuccess); |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 0b90a34fd..fef5cafa4 100755 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
@@ -3491,6 +3491,7 @@ void GMainWindow::ResetWindowSize1080() { | |||
3491 | void GMainWindow::OnConfigure() { | 3491 | void GMainWindow::OnConfigure() { |
3492 | const auto old_theme = UISettings::values.theme; | 3492 | const auto old_theme = UISettings::values.theme; |
3493 | const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); | 3493 | const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); |
3494 | const auto old_language_index = Settings::values.language_index.GetValue(); | ||
3494 | 3495 | ||
3495 | Settings::SetConfiguringGlobal(true); | 3496 | Settings::SetConfiguringGlobal(true); |
3496 | ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(), *system, | 3497 | ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(), *system, |
@@ -3559,7 +3560,7 @@ void GMainWindow::OnConfigure() { | |||
3559 | emit UpdateThemedIcons(); | 3560 | emit UpdateThemedIcons(); |
3560 | 3561 | ||
3561 | const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false); | 3562 | const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false); |
3562 | if (reload) { | 3563 | if (reload || Settings::values.language_index.GetValue() != old_language_index) { |
3563 | game_list->PopulateAsync(UISettings::values.game_dirs); | 3564 | game_list->PopulateAsync(UISettings::values.game_dirs); |
3564 | } | 3565 | } |
3565 | 3566 | ||