mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-23 20:41:50 +01:00
Add a system region setting
Needed for games such as AC:NH. The `Auto` option automatically selects a region based on the currently selected system language. Co-Authored-By: Timotej Leginus <35149140+timleg002@users.noreply.github.com>
This commit is contained in:
parent
d4800d13b8
commit
782f9e37ee
@ -34,6 +34,7 @@ namespace skyline {
|
|||||||
isDocked = ktSettings.GetBool("isDocked");
|
isDocked = ktSettings.GetBool("isDocked");
|
||||||
usernameValue = std::move(ktSettings.GetString("usernameValue"));
|
usernameValue = std::move(ktSettings.GetString("usernameValue"));
|
||||||
systemLanguage = ktSettings.GetInt<skyline::language::SystemLanguage>("systemLanguage");
|
systemLanguage = ktSettings.GetInt<skyline::language::SystemLanguage>("systemLanguage");
|
||||||
|
systemRegion = ktSettings.GetInt<skyline::region::RegionCode>("systemRegion");
|
||||||
forceTripleBuffering = ktSettings.GetBool("forceTripleBuffering");
|
forceTripleBuffering = ktSettings.GetBool("forceTripleBuffering");
|
||||||
disableFrameThrottling = ktSettings.GetBool("disableFrameThrottling");
|
disableFrameThrottling = ktSettings.GetBool("disableFrameThrottling");
|
||||||
gpuDriver = ktSettings.GetString("gpuDriver");
|
gpuDriver = ktSettings.GetString("gpuDriver");
|
||||||
|
@ -106,4 +106,53 @@ namespace skyline {
|
|||||||
|
|
||||||
#undef LANGUAGES
|
#undef LANGUAGES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace region {
|
||||||
|
/**
|
||||||
|
* @brief The list of all regions
|
||||||
|
* @url https://switchbrew.org/wiki/Settings_services#RegionCode_2
|
||||||
|
*/
|
||||||
|
enum class RegionCode : i32 {
|
||||||
|
Auto = -1, // Automatically determine region based on the selected language
|
||||||
|
Japan = 0,
|
||||||
|
Usa = 1,
|
||||||
|
Europe = 2,
|
||||||
|
Australia = 3,
|
||||||
|
HongKongTaiwanKorea = 4,
|
||||||
|
China = 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the region code for the given system language
|
||||||
|
*/
|
||||||
|
constexpr region::RegionCode GetRegionCodeForSystemLanguage(language::SystemLanguage systemLanguage) {
|
||||||
|
switch (systemLanguage) {
|
||||||
|
case language::SystemLanguage::Japanese:
|
||||||
|
return region::RegionCode::Japan;
|
||||||
|
case language::SystemLanguage::AmericanEnglish:
|
||||||
|
case language::SystemLanguage::CanadianFrench:
|
||||||
|
case language::SystemLanguage::LatinAmericanSpanish:
|
||||||
|
case language::SystemLanguage::BrazilianPortuguese:
|
||||||
|
return region::RegionCode::Usa;
|
||||||
|
case language::SystemLanguage::French:
|
||||||
|
case language::SystemLanguage::German:
|
||||||
|
case language::SystemLanguage::Italian:
|
||||||
|
case language::SystemLanguage::Spanish:
|
||||||
|
case language::SystemLanguage::Dutch:
|
||||||
|
case language::SystemLanguage::Portuguese:
|
||||||
|
case language::SystemLanguage::Russian:
|
||||||
|
case language::SystemLanguage::BritishEnglish:
|
||||||
|
return region::RegionCode::Europe;
|
||||||
|
case language::SystemLanguage::Chinese:
|
||||||
|
case language::SystemLanguage::SimplifiedChinese:
|
||||||
|
case language::SystemLanguage::TraditionalChinese:
|
||||||
|
return region::RegionCode::China;
|
||||||
|
case language::SystemLanguage::Taiwanese:
|
||||||
|
case language::SystemLanguage::Korean:
|
||||||
|
return region::RegionCode::HongKongTaiwanKorea;
|
||||||
|
default:
|
||||||
|
throw exception("Invalid system language: {}", systemLanguage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,7 @@ namespace skyline {
|
|||||||
Setting<bool> isDocked; //!< If the emulated Switch should be handheld or docked
|
Setting<bool> isDocked; //!< If the emulated Switch should be handheld or docked
|
||||||
Setting<std::string> usernameValue; //!< The user name to be supplied to the guest
|
Setting<std::string> usernameValue; //!< The user name to be supplied to the guest
|
||||||
Setting<language::SystemLanguage> systemLanguage; //!< The system language
|
Setting<language::SystemLanguage> systemLanguage; //!< The system language
|
||||||
|
Setting<region::RegionCode> systemRegion; //!< The system region
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
Setting<bool> forceTripleBuffering; //!< If the presentation engine should always triple buffer even if the swapchain supports double buffering
|
Setting<bool> forceTripleBuffering; //!< If the presentation engine should always triple buffer even if the swapchain supports double buffering
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <common/language.h>
|
#include <common/language.h>
|
||||||
#include "ISettingsServer.h"
|
#include "ISettingsServer.h"
|
||||||
|
#include <common/settings.h>
|
||||||
|
|
||||||
namespace skyline::service::settings {
|
namespace skyline::service::settings {
|
||||||
ISettingsServer::ISettingsServer(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {}
|
ISettingsServer::ISettingsServer(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {}
|
||||||
@ -23,4 +24,14 @@ namespace skyline::service::settings {
|
|||||||
response.Push<i32>(constant::NewLanguageCodeListSize);
|
response.Push<i32>(constant::NewLanguageCodeListSize);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result ISettingsServer::GetRegionCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
region::RegionCode regionCode{*state.settings->systemRegion};
|
||||||
|
|
||||||
|
if (regionCode == region::RegionCode::Auto)
|
||||||
|
regionCode = region::GetRegionCodeForSystemLanguage(*state.settings->systemLanguage);
|
||||||
|
|
||||||
|
response.Push(regionCode);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,11 @@ namespace skyline::service::settings {
|
|||||||
*/
|
*/
|
||||||
Result MakeLanguageCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
Result MakeLanguageCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the user-selected region's code
|
||||||
|
*/
|
||||||
|
Result GetRegionCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Reads the available language codes that an application can use (post 4.0.0)
|
* @brief Reads the available language codes that an application can use (post 4.0.0)
|
||||||
*/
|
*/
|
||||||
@ -32,6 +37,7 @@ namespace skyline::service::settings {
|
|||||||
SERVICE_DECL(
|
SERVICE_DECL(
|
||||||
SFUNC(0x1, ISettingsServer, GetAvailableLanguageCodes),
|
SFUNC(0x1, ISettingsServer, GetAvailableLanguageCodes),
|
||||||
SFUNC(0x2, ISettingsServer, MakeLanguageCode),
|
SFUNC(0x2, ISettingsServer, MakeLanguageCode),
|
||||||
|
SFUNC(0x4, ISettingsServer, GetRegionCode),
|
||||||
SFUNC(0x5, ISettingsServer, GetAvailableLanguageCodes2)
|
SFUNC(0x5, ISettingsServer, GetAvailableLanguageCodes2)
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,7 @@ class NativeSettings(context : Context, pref : PreferenceSettings) {
|
|||||||
var isDocked : Boolean = pref.isDocked
|
var isDocked : Boolean = pref.isDocked
|
||||||
var usernameValue : String = pref.usernameValue
|
var usernameValue : String = pref.usernameValue
|
||||||
var systemLanguage : Int = pref.systemLanguage
|
var systemLanguage : Int = pref.systemLanguage
|
||||||
|
var systemRegion : Int = pref.systemRegion
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
var forceTripleBuffering : Boolean = pref.forceTripleBuffering
|
var forceTripleBuffering : Boolean = pref.forceTripleBuffering
|
||||||
|
@ -26,6 +26,7 @@ class PreferenceSettings @Inject constructor(@ApplicationContext private val con
|
|||||||
var isDocked by sharedPreferences(context, true)
|
var isDocked by sharedPreferences(context, true)
|
||||||
var usernameValue by sharedPreferences(context, context.getString(R.string.username_default))
|
var usernameValue by sharedPreferences(context, context.getString(R.string.username_default))
|
||||||
var systemLanguage by sharedPreferences(context, 1)
|
var systemLanguage by sharedPreferences(context, 1)
|
||||||
|
var systemRegion by sharedPreferences(context, -1)
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
var forceTripleBuffering by sharedPreferences(context, true)
|
var forceTripleBuffering by sharedPreferences(context, true)
|
||||||
|
@ -38,24 +38,42 @@
|
|||||||
<item>臺語 (Taiwanese)</item>
|
<item>臺語 (Taiwanese)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<integer-array name="system_languages_val">
|
<integer-array name="system_languages_val">
|
||||||
<item>1</item>
|
<item>1</item> <!-- American English -->
|
||||||
<item>12</item>
|
<item>12</item> <!-- British English -->
|
||||||
<item>2</item>
|
<item>2</item> <!-- French -->
|
||||||
<item>13</item>
|
<item>13</item> <!-- Canadian French -->
|
||||||
<item>3</item>
|
<item>3</item> <!-- German -->
|
||||||
<item>5</item>
|
<item>5</item> <!-- Spanish -->
|
||||||
<item>14</item>
|
<item>14</item> <!-- Latin American Spanish -->
|
||||||
<item>4</item>
|
<item>4</item> <!-- Italian -->
|
||||||
<item>8</item>
|
<item>8</item> <!-- Dutch -->
|
||||||
<item>9</item>
|
<item>9</item> <!-- Portuguese -->
|
||||||
<item>17</item>
|
<item>17</item> <!-- Brazilian Portuguese -->
|
||||||
<item>10</item>
|
<item>10</item> <!-- Russian -->
|
||||||
<item>0</item>
|
<item>0</item> <!-- Japanese -->
|
||||||
<item>6</item>
|
<item>6</item> <!-- Chinese -->
|
||||||
<item>16</item>
|
<item>16</item> <!-- Traditional Chinese -->
|
||||||
<item>15</item>
|
<item>15</item> <!-- Simplified Chinese -->
|
||||||
<item>7</item>
|
<item>7</item> <!-- Korean -->
|
||||||
<item>11</item>
|
<item>11</item> <!-- Taiwanese -->
|
||||||
|
</integer-array>
|
||||||
|
<string-array name="system_region">
|
||||||
|
<item>Auto</item>
|
||||||
|
<item>Japan</item>
|
||||||
|
<item>The Americas</item>
|
||||||
|
<item>Europe</item>
|
||||||
|
<item>Australia / New Zealand</item>
|
||||||
|
<item>Hong Kong / Taiwan / South Korea</item>
|
||||||
|
<item>China</item>
|
||||||
|
</string-array>
|
||||||
|
<integer-array name="system_region_val">
|
||||||
|
<item>-1</item> <!-- Auto -->
|
||||||
|
<item>0</item> <!-- Japan -->
|
||||||
|
<item>1</item> <!-- The Americas -->
|
||||||
|
<item>2</item> <!-- Europe -->
|
||||||
|
<item>3</item> <!-- Australia / New Zealand -->
|
||||||
|
<item>4</item> <!-- Hong Kong / Taiwan / South Korea -->
|
||||||
|
<item>5</item> <!-- China -->
|
||||||
</integer-array>
|
</integer-array>
|
||||||
<string-array name="aspect_ratios">
|
<string-array name="aspect_ratios">
|
||||||
<item>16:9 (Switch, Recommended)</item>
|
<item>16:9 (Switch, Recommended)</item>
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
<string name="username">Username</string>
|
<string name="username">Username</string>
|
||||||
<string name="username_default">@string/app_name</string>
|
<string name="username_default">@string/app_name</string>
|
||||||
<string name="system_language">System language</string>
|
<string name="system_language">System language</string>
|
||||||
|
<string name="system_region">System region</string>
|
||||||
<!-- Settings - Keys -->
|
<!-- Settings - Keys -->
|
||||||
<string name="keys">Keys</string>
|
<string name="keys">Keys</string>
|
||||||
<string name="prod_keys">Production Keys</string>
|
<string name="prod_keys">Production Keys</string>
|
||||||
|
@ -78,6 +78,13 @@
|
|||||||
app:refreshRequired="true"
|
app:refreshRequired="true"
|
||||||
app:title="@string/system_language"
|
app:title="@string/system_language"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
<emu.skyline.preference.IntegerListPreference
|
||||||
|
android:defaultValue="-1"
|
||||||
|
android:entries="@array/system_region"
|
||||||
|
android:entryValues="@array/system_region_val"
|
||||||
|
app:key="system_region"
|
||||||
|
app:title="@string/system_region"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="category_presentation"
|
android:key="category_presentation"
|
||||||
|
Loading…
Reference in New Issue
Block a user