Przeglądaj źródła

settings: Add custom RTC settings

Stored as signed seconds since epoch.
Zach Hilman 7 lat temu
rodzic
commit
c6016856d8

+ 3 - 0
src/core/settings.h

@@ -350,6 +350,9 @@ struct Values {
     bool use_docked_mode;
     bool enable_nfc;
     std::optional<u32> rng_seed;
+    std::optional<s64> custom_rtc; // Measured in seconds since epoch
+    s64 custom_rtc_differential;   // Set on game boot, reset on stop. Seconds difference between
+                                   // current time and `custom_rtc`
     s32 current_user;
     s32 language_index;
 

+ 12 - 2
src/yuzu/configuration/config.cpp

@@ -419,13 +419,20 @@ void Config::ReadValues() {
 
     Settings::values.language_index = qt_config->value("language_index", 1).toInt();
 
-    const auto enabled = qt_config->value("rng_seed_enabled", false).toBool();
-    if (enabled) {
+    const auto rng_seed_enabled = qt_config->value("rng_seed_enabled", false).toBool();
+    if (rng_seed_enabled) {
         Settings::values.rng_seed = qt_config->value("rng_seed", 0).toULongLong();
     } else {
         Settings::values.rng_seed = std::nullopt;
     }
 
+    const auto custom_rtc_enabled = qt_config->value("custom_rtc_enabled", false).toBool();
+    if (custom_rtc_enabled) {
+        Settings::values.custom_rtc = qt_config->value("custom_rtc", 0).toULongLong();
+    } else {
+        Settings::values.custom_rtc = std::nullopt;
+    }
+
     qt_config->endGroup();
 
     qt_config->beginGroup("Miscellaneous");
@@ -653,6 +660,9 @@ void Config::SaveValues() {
     qt_config->setValue("rng_seed_enabled", Settings::values.rng_seed.has_value());
     qt_config->setValue("rng_seed", Settings::values.rng_seed.value_or(0));
 
+    qt_config->setValue("custom_rtc_enabled", Settings::values.custom_rtc.has_value());
+    qt_config->setValue("custom_rtc", Settings::values.custom_rtc.value_or(0));
+
     qt_config->endGroup();
 
     qt_config->beginGroup("Miscellaneous");

+ 9 - 2
src/yuzu_cmd/config.cpp

@@ -325,13 +325,20 @@ void Config::ReadValues() {
     Settings::values.current_user = std::clamp<int>(
         sdl2_config->GetInteger("System", "current_user", 0), 0, Service::Account::MAX_USERS - 1);
 
-    const auto enabled = sdl2_config->GetBoolean("System", "rng_seed_enabled", false);
-    if (enabled) {
+    const auto rng_seed_enabled = sdl2_config->GetBoolean("System", "rng_seed_enabled", false);
+    if (rng_seed_enabled) {
         Settings::values.rng_seed = sdl2_config->GetInteger("System", "rng_seed", 0);
     } else {
         Settings::values.rng_seed = std::nullopt;
     }
 
+    const auto custom_rtc_enabled = sdl2_config->GetBoolean("System", "custom_rtc_enabled", false);
+    if (custom_rtc_enabled) {
+        Settings::values.custom_rtc = sdl2_config->GetInteger("System", "custom_rtc", 0);
+    } else {
+        Settings::values.custom_rtc = std::nullopt;
+    }
+
     // Core
     Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true);
     Settings::values.use_multi_core = sdl2_config->GetBoolean("Core", "use_multi_core", false);

+ 6 - 0
src/yuzu_cmd/default_ini.h

@@ -183,6 +183,12 @@ enable_nfc =
 rng_seed_enabled =
 rng_seed =
 
+# Sets the current time (in seconds since 12:00 AM Jan 1, 1970) that will be used by the time service
+# This will auto-increment, with the time set being the time the game is started
+# This override will only occur if custom_rtc_enabled is true, otherwise the current time is used
+custom_rtc_enabled = 
+custom_rtc = 
+
 # Sets the account username, max length is 32 characters
 # yuzu (default)
 username = yuzu