mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 19:07:01 +02:00
systemservice: add an option to report the notice screen as skipped (#1127)
* systemservice: add an option to report the notice screen as skipped sceSystemServiceGetNoticeScreenSkipFlag always returned false. Return the new skip_notice_screen option instead. Games that check this flag skip their boot logo movies when it is set; Marvel's Wolverine, for example, then does not queue movies/BootSequence/BootSequence.movie. The option defaults to off, so behaviour is unchanged unless it is enabled with --skip-notice-screen true or the launcher's "Skip boot logos" checkbox. The launcher stores it with the other per-game settings, so it is included in per-game config import and export. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Shorten skip notice screen wording --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: nmzik <Nmzik@mail.ru>
This commit is contained in:
@@ -164,6 +164,10 @@ bool PlayGoHackEnabled() {
|
|||||||
return g_config->playgo_hack_enabled;
|
return g_config->playgo_hack_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SkipNoticeScreen() {
|
||||||
|
return g_config->skip_notice_screen;
|
||||||
|
}
|
||||||
|
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
bool RedZoneProtectionEnabled() {
|
bool RedZoneProtectionEnabled() {
|
||||||
return g_config->red_zone_protection_enabled;
|
return g_config->red_zone_protection_enabled;
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ struct ConfigOptions {
|
|||||||
bool tessellation_enabled = false;
|
bool tessellation_enabled = false;
|
||||||
bool trophy_enabled = true;
|
bool trophy_enabled = true;
|
||||||
bool playgo_hack_enabled = false;
|
bool playgo_hack_enabled = false;
|
||||||
|
bool skip_notice_screen = false;
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
bool red_zone_protection_enabled = false;
|
bool red_zone_protection_enabled = false;
|
||||||
#endif
|
#endif
|
||||||
@@ -126,6 +127,7 @@ bool ReadbackLinearImagesEnabled();
|
|||||||
bool TessellationEnabled();
|
bool TessellationEnabled();
|
||||||
bool TrophyEnabled();
|
bool TrophyEnabled();
|
||||||
bool PlayGoHackEnabled();
|
bool PlayGoHackEnabled();
|
||||||
|
bool SkipNoticeScreen();
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
bool RedZoneProtectionEnabled();
|
bool RedZoneProtectionEnabled();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -179,6 +179,12 @@
|
|||||||
<property name="text"><string>Auto-hide cursor</string></property>
|
<property name="text"><string>Auto-hide cursor</string></property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="9" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkBox_skip_notice_screen">
|
||||||
|
<property name="toolTip"><string>Skip startup logos and notices in supported games.</string></property>
|
||||||
|
<property name="text"><string>Skip boot logos</string></property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ public:
|
|||||||
bool readback_linear_images = false;
|
bool readback_linear_images = false;
|
||||||
bool tessellation_enabled = false;
|
bool tessellation_enabled = false;
|
||||||
bool trophy_enabled = true;
|
bool trophy_enabled = true;
|
||||||
|
bool skip_notice_screen = false;
|
||||||
int vblank_frequency = 60;
|
int vblank_frequency = 60;
|
||||||
int console_language = DEFAULT_CONSOLE_LANGUAGE;
|
int console_language = DEFAULT_CONSOLE_LANGUAGE;
|
||||||
bool vulkan_validation_enabled = false;
|
bool vulkan_validation_enabled = false;
|
||||||
@@ -154,6 +155,7 @@ public:
|
|||||||
readback_linear_images = other.readback_linear_images;
|
readback_linear_images = other.readback_linear_images;
|
||||||
tessellation_enabled = other.tessellation_enabled;
|
tessellation_enabled = other.tessellation_enabled;
|
||||||
trophy_enabled = other.trophy_enabled;
|
trophy_enabled = other.trophy_enabled;
|
||||||
|
skip_notice_screen = other.skip_notice_screen;
|
||||||
vblank_frequency = other.vblank_frequency;
|
vblank_frequency = other.vblank_frequency;
|
||||||
console_language = other.console_language;
|
console_language = other.console_language;
|
||||||
vulkan_validation_enabled = other.vulkan_validation_enabled;
|
vulkan_validation_enabled = other.vulkan_validation_enabled;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ QVariantMap Configuration::GameSettings() const {
|
|||||||
KYTY_CFG_SET(readback_linear_images);
|
KYTY_CFG_SET(readback_linear_images);
|
||||||
KYTY_CFG_SET(tessellation_enabled);
|
KYTY_CFG_SET(tessellation_enabled);
|
||||||
KYTY_CFG_SET(trophy_enabled);
|
KYTY_CFG_SET(trophy_enabled);
|
||||||
|
KYTY_CFG_SET(skip_notice_screen);
|
||||||
KYTY_CFG_SET(vblank_frequency);
|
KYTY_CFG_SET(vblank_frequency);
|
||||||
KYTY_CFG_SET(console_language);
|
KYTY_CFG_SET(console_language);
|
||||||
KYTY_CFG_SET(vulkan_validation_enabled);
|
KYTY_CFG_SET(vulkan_validation_enabled);
|
||||||
@@ -57,6 +58,7 @@ void Configuration::ReadGameSettingsValues(const Settings& s) {
|
|||||||
KYTY_CFG_GET(readback_linear_images);
|
KYTY_CFG_GET(readback_linear_images);
|
||||||
KYTY_CFG_GET(tessellation_enabled);
|
KYTY_CFG_GET(tessellation_enabled);
|
||||||
trophy_enabled = s.value("trophy_enabled", trophy_enabled).toBool();
|
trophy_enabled = s.value("trophy_enabled", trophy_enabled).toBool();
|
||||||
|
KYTY_CFG_GET(skip_notice_screen);
|
||||||
vblank_frequency = s.value("vblank_frequency", vblank_frequency).toInt();
|
vblank_frequency = s.value("vblank_frequency", vblank_frequency).toInt();
|
||||||
console_language = s.value("console_language", console_language).toInt();
|
console_language = s.value("console_language", console_language).toInt();
|
||||||
if (console_language < 0 || console_language > MAX_CONSOLE_LANGUAGE) {
|
if (console_language < 0 || console_language > MAX_CONSOLE_LANGUAGE) {
|
||||||
|
|||||||
@@ -276,6 +276,7 @@ void ConfigurationEditDialog::Init(const Configuration& info) {
|
|||||||
m_ui->checkBox_hide_cursor->setChecked(info.hide_cursor_enabled);
|
m_ui->checkBox_hide_cursor->setChecked(info.hide_cursor_enabled);
|
||||||
m_ui->checkBox_readback->setChecked(info.readback_linear_images);
|
m_ui->checkBox_readback->setChecked(info.readback_linear_images);
|
||||||
m_ui->checkBox_tessellation->setChecked(info.tessellation_enabled);
|
m_ui->checkBox_tessellation->setChecked(info.tessellation_enabled);
|
||||||
|
m_ui->checkBox_skip_notice_screen->setChecked(info.skip_notice_screen);
|
||||||
m_ui->checkBox_trophy_notifications->setChecked(info.trophy_enabled);
|
m_ui->checkBox_trophy_notifications->setChecked(info.trophy_enabled);
|
||||||
m_ui->spinBox_vblank_frequency->setValue(info.vblank_frequency);
|
m_ui->spinBox_vblank_frequency->setValue(info.vblank_frequency);
|
||||||
m_ui->comboBox_console_language->clear();
|
m_ui->comboBox_console_language->clear();
|
||||||
@@ -435,6 +436,7 @@ static void UpdateInfo(Configuration& info, Ui::ConfigurationEditDialog& ui, boo
|
|||||||
info.hide_cursor_enabled = ui.checkBox_hide_cursor->isChecked();
|
info.hide_cursor_enabled = ui.checkBox_hide_cursor->isChecked();
|
||||||
info.readback_linear_images = ui.checkBox_readback->isChecked();
|
info.readback_linear_images = ui.checkBox_readback->isChecked();
|
||||||
info.tessellation_enabled = ui.checkBox_tessellation->isChecked();
|
info.tessellation_enabled = ui.checkBox_tessellation->isChecked();
|
||||||
|
info.skip_notice_screen = ui.checkBox_skip_notice_screen->isChecked();
|
||||||
info.trophy_enabled = ui.checkBox_trophy_notifications->isChecked();
|
info.trophy_enabled = ui.checkBox_trophy_notifications->isChecked();
|
||||||
info.vblank_frequency = ui.spinBox_vblank_frequency->value();
|
info.vblank_frequency = ui.spinBox_vblank_frequency->value();
|
||||||
info.console_language = ui.comboBox_console_language->currentIndex();
|
info.console_language = ui.comboBox_console_language->currentIndex();
|
||||||
|
|||||||
@@ -246,6 +246,7 @@ static QStringList CreateEmulatorArgs(const Configuration& info) {
|
|||||||
}
|
}
|
||||||
args << "--readback-linear-images" << BoolArg(info.readback_linear_images);
|
args << "--readback-linear-images" << BoolArg(info.readback_linear_images);
|
||||||
args << "--trophy-notifications" << BoolArg(info.trophy_enabled);
|
args << "--trophy-notifications" << BoolArg(info.trophy_enabled);
|
||||||
|
args << "--skip-notice-screen" << BoolArg(info.skip_notice_screen);
|
||||||
if (info.tessellation_enabled) {
|
if (info.tessellation_enabled) {
|
||||||
args << "--tessellation";
|
args << "--tessellation";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ static int KYTY_SYSV_ABI SystemServiceGetNoticeScreenSkipFlag(bool* value) {
|
|||||||
return SYSTEM_SERVICE_ERROR_PARAMETER;
|
return SYSTEM_SERVICE_ERROR_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
*value = false;
|
*value = Config::SkipNoticeScreen();
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ static void PrintUsage() {
|
|||||||
::printf(
|
::printf(
|
||||||
" --trophy-notifications <true|false> Show trophy unlock toasts and play their sound.\n");
|
" --trophy-notifications <true|false> Show trophy unlock toasts and play their sound.\n");
|
||||||
::printf(" --playgo-hack Use the supplied PlayGo stub fallback.\n");
|
::printf(" --playgo-hack Use the supplied PlayGo stub fallback.\n");
|
||||||
|
::printf(
|
||||||
|
" --skip-notice-screen <true|false> Skip startup logos and notices in supported games.\n"
|
||||||
|
" Default: false.\n");
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
::printf(" --redzone Protect the guest SysV red zone.\n");
|
::printf(" --redzone Protect the guest SysV red zone.\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -428,6 +431,11 @@ static bool ParseArgs(int argc, char* argv[], RunOptions& options, bool& show_he
|
|||||||
::printf("invalid boolean for %s: %s\n", arg.c_str(), value.c_str());
|
::printf("invalid boolean for %s: %s\n", arg.c_str(), value.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (arg == "--skip-notice-screen") {
|
||||||
|
if (!ParseBool(value, options.config.skip_notice_screen)) {
|
||||||
|
::printf("invalid boolean for %s: %s\n", arg.c_str(), value.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (arg == "--keymap") {
|
} else if (arg == "--keymap") {
|
||||||
const auto split = value.find('=');
|
const auto split = value.find('=');
|
||||||
if (split == std::string::npos || split == 0 || split + 1 == value.size()) {
|
if (split == std::string::npos || split == 0 || split + 1 == value.size()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user