diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 691fbf61..2fcefd3b 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -70,6 +70,11 @@ set(SWA_KERNEL_CXX_SOURCES "kernel/io/file_system.cpp" ) +set(SWA_LOCALE_CXX_SOURCES + "locale/config_locale.cpp" + "locale/locale.cpp" +) + set(SWA_OS_CXX_SOURCES "os/logger.cpp" "os/media.cpp" @@ -143,6 +148,7 @@ set(SWA_UI_CXX_SOURCES "ui/button_guide.cpp" "ui/fader.cpp" "ui/message_window.cpp" + "ui/options_menu_thumbnails.cpp" "ui/options_menu.cpp" "ui/sdl_listener.cpp" "ui/window.cpp" @@ -191,6 +197,7 @@ set(SWA_CXX_SOURCES "stdafx.cpp" ${SWA_KERNEL_CXX_SOURCES} + ${SWA_LOCALE_CXX_SOURCES} ${SWA_OS_CXX_SOURCES} ${SWA_CPU_CXX_SOURCES} ${SWA_GPU_CXX_SOURCES} @@ -404,35 +411,48 @@ BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/in BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/installer/pulse_install.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/installer/pulse_install.dds" ARRAY_NAME "g_pulse_install" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/achievement_notifications.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/achievement_notifications.dds" ARRAY_NAME "g_achievement_notifications" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/allow_background_input.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/allow_background_input.dds" ARRAY_NAME "g_allow_background_input" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/allow_dpad_movement.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/allow_dpad_movement.dds" ARRAY_NAME "g_allow_dpad_movement" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/antialiasing.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/antialiasing.dds" ARRAY_NAME "g_antialiasing" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/aspect_ratio.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/aspect_ratio.dds" ARRAY_NAME "g_aspect_ratio" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/battle_theme.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/battle_theme.dds" ARRAY_NAME "g_battle_theme" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/brightness.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/brightness.dds" ARRAY_NAME "g_brightness" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/control_tutorial.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/control_tutorial.dds" ARRAY_NAME "g_control_tutorial" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/controller_icons.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/controller_icons.dds" ARRAY_NAME "g_controller_icons" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/default.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/default.dds" ARRAY_NAME "g_default" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/effects_volume.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/effects_volume.dds" ARRAY_NAME "g_effects_volume" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/fps.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/fps.dds" ARRAY_NAME "g_fps" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/fullscreen.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/fullscreen.dds" ARRAY_NAME "g_fullscreen" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/gi_texture_filtering.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/gi_texture_filtering.dds" ARRAY_NAME "g_gi_texture_filtering" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/gi_texture_filtering_bilinear.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/gi_texture_filtering_bilinear.dds" ARRAY_NAME "g_gi_texture_filtering_bilinear" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/gi_texture_filtering_bicubic.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/gi_texture_filtering_bicubic.dds" ARRAY_NAME "g_gi_texture_filtering_bicubic" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/hints.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/hints.dds" ARRAY_NAME "g_hints" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/invert_camera_x.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/invert_camera_x.dds" ARRAY_NAME "g_invert_camera_x" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/invert_camera_y.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/invert_camera_y.dds" ARRAY_NAME "g_invert_camera_y" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/language.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/language.dds" ARRAY_NAME "g_language" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/monitor.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/monitor.dds" ARRAY_NAME "g_monitor" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/motion_blur.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/motion_blur.dds" ARRAY_NAME "g_motion_blur" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/motion_blur_off.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/motion_blur_off.dds" ARRAY_NAME "g_motion_blur_off" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/motion_blur_original.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/motion_blur_original.dds" ARRAY_NAME "g_motion_blur_original" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/motion_blur_enhanced.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/motion_blur_enhanced.dds" ARRAY_NAME "g_motion_blur_enhanced" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/movie_scale_mode.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/movie_scale_mode.dds" ARRAY_NAME "g_movie_scale_mode" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/music_attenuation.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/music_attenuation.dds" ARRAY_NAME "g_music_attenuation" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/music_volume.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/music_volume.dds" ARRAY_NAME "g_music_volume" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/resolution_scale.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/resolution_scale.dds" ARRAY_NAME "g_resolution_scale" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution.dds" ARRAY_NAME "g_shadow_resolution" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_original.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_original.dds" ARRAY_NAME "g_shadow_resolution_original" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_x512.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_x512.dds" ARRAY_NAME "g_shadow_resolution_x512" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_x1024.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_x1024.dds" ARRAY_NAME "g_shadow_resolution_x1024" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_x2048.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_x2048.dds" ARRAY_NAME "g_shadow_resolution_x2048" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_x4096.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_x4096.dds" ARRAY_NAME "g_shadow_resolution_x4096" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/shadow_resolution_x8192.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/shadow_resolution_x8192.dds" ARRAY_NAME "g_shadow_resolution_x8192" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/subtitles.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/subtitles.dds" ARRAY_NAME "g_subtitles" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/time_of_day_transition.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/time_of_day_transition.dds" ARRAY_NAME "g_time_of_day_transition" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/transparency_antialiasing.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/transparency_antialiasing.dds" ARRAY_NAME "g_transparency_antialiasing" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/time_of_day_transition_xbox.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/time_of_day_transition_xbox.dds" ARRAY_NAME "g_time_of_day_transition_xbox" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/time_of_day_transition_playstation.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/time_of_day_transition_playstation.dds" ARRAY_NAME "g_time_of_day_transition_playstation" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/transparency_antialiasing_false.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/transparency_antialiasing_false.dds" ARRAY_NAME "g_transparency_antialiasing_false" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/transparency_antialiasing_true.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/transparency_antialiasing_true.dds" ARRAY_NAME "g_transparency_antialiasing_true" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/ui_scale_mode.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/ui_scale_mode.dds" ARRAY_NAME "g_ui_scale_mode" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/voice_language.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/voice_language.dds" ARRAY_NAME "g_voice_language" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/vsync.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/vsync.dds" ARRAY_NAME "g_vsync" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/window_size.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/window_size.dds" ARRAY_NAME "g_window_size" COMPRESSION_TYPE "zstd") -BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/xbox_color_correction.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/xbox_color_correction.dds" ARRAY_NAME "g_xbox_color_correction" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/xbox_color_correction_false.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/xbox_color_correction_false.dds" ARRAY_NAME "g_xbox_color_correction_false" COMPRESSION_TYPE "zstd") +BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/options_menu/thumbnails/xbox_color_correction_true.dds" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/options_menu/thumbnails/xbox_color_correction_true.dds" ARRAY_NAME "g_xbox_color_correction_true" COMPRESSION_TYPE "zstd") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/game_icon.bmp" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/game_icon.bmp" ARRAY_NAME "g_game_icon") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/images/game_icon_night.bmp" DEST_FILE "${RESOURCES_OUTPUT_PATH}/images/game_icon_night.bmp" ARRAY_NAME "g_game_icon_night") BIN2C(TARGET_OBJ UnleashedRecomp SOURCE_FILE "${RESOURCES_SOURCE_PATH}/sounds/sys_worldmap_cursor.ogg" DEST_FILE "${RESOURCES_OUTPUT_PATH}/sounds/sys_worldmap_cursor.ogg" ARRAY_NAME "g_sys_worldmap_cursor") diff --git a/UnleashedRecomp/gpu/imgui/imgui_snapshot.cpp b/UnleashedRecomp/gpu/imgui/imgui_snapshot.cpp index dbf87eee..cdb1c714 100644 --- a/UnleashedRecomp/gpu/imgui/imgui_snapshot.cpp +++ b/UnleashedRecomp/gpu/imgui/imgui_snapshot.cpp @@ -211,15 +211,6 @@ void ImFontAtlasSnapshot::GenerateGlyphRanges() { for (auto& [language, value] : locale) GetGlyphs(glyphs, value); - } - - for (auto& [language, locale] : g_bool_locale) - { - for (auto& [value, nameAndDesc] : locale) - { - GetGlyphs(glyphs, std::get<0>(nameAndDesc)); - GetGlyphs(glyphs, std::get<1>(nameAndDesc)); - } } for (size_t i = XDBF_LANGUAGE_ENGLISH; i <= XDBF_LANGUAGE_ITALIAN; i++) diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp index 499b60f0..4ea8eee8 100644 --- a/UnleashedRecomp/gpu/video.cpp +++ b/UnleashedRecomp/gpu/video.cpp @@ -1582,7 +1582,7 @@ static void BeginCommandList() if (g_swapChainValid) { - bool applyingGammaCorrection = Config::XboxColourCorrection || abs(Config::Brightness - 0.5f) > 0.001f; + bool applyingGammaCorrection = Config::XboxColorCorrection || abs(Config::Brightness - 0.5f) > 0.001f; if (applyingGammaCorrection) { @@ -2100,7 +2100,7 @@ static void ProcPresent(const RenderCommand& cmd) uint32_t textureDescriptorIndex; } constants; - if (Config::XboxColourCorrection) + if (Config::XboxColorCorrection) { constants.gammaR = 1.2f; constants.gammaG = 1.17f; diff --git a/UnleashedRecomp/locale/config_locale.h b/UnleashedRecomp/locale/config_locale.cpp similarity index 88% rename from UnleashedRecomp/locale/config_locale.h rename to UnleashedRecomp/locale/config_locale.cpp index a06d2ab2..9a904c00 100644 --- a/UnleashedRecomp/locale/config_locale.h +++ b/UnleashedRecomp/locale/config_locale.cpp @@ -1,58 +1,11 @@ -#pragma once - +#include #include #define CONFIG_DEFINE_LOCALE(name) \ - inline std::unordered_map> g_##name##_locale = + CONFIG_LOCALE Config::g_##name##_locale = #define CONFIG_DEFINE_ENUM_LOCALE(type) \ - inline std::unordered_map>> g_##type##_locale = - -CONFIG_DEFINE_ENUM_LOCALE(bool) -{ - { - ELanguage::English, - { - { true, { "ON", "" } }, - { false, { "OFF", "" } } - } - }, - { - ELanguage::Japanese, - { - { true, { "オン", "" } }, - { false, { "オフ", "" } } - } - }, - { - ELanguage::German, - { - { true, { "EIN", "" } }, - { false, { "AUS", "" } } - } - }, - { - ELanguage::French, - { - { true, { "OUI", "" } }, - { false, { "NON", "" } } - } - }, - { - ELanguage::Spanish, - { - { true, { "SÍ", "" } }, - { false, { "NO", "" } } - } - }, - { - ELanguage::Italian, - { - { true, { "SÌ", "" } }, - { false, { "NO", "" } } - } - } -}; + CONFIG_ENUM_LOCALE(type) Config::g_##type##_locale = CONFIG_DEFINE_LOCALE(Language) { @@ -142,6 +95,11 @@ CONFIG_DEFINE_LOCALE(AllowBackgroundInput) { ELanguage::English, { "Allow Background Input", "Accept controller input whilst the game window is unfocused." } } }; +CONFIG_DEFINE_LOCALE(AllowDPadMovement) +{ + { ELanguage::English, { "Allow D-Pad Movement", "Allow the player to also be controlled using the directional pad." } } +}; + CONFIG_DEFINE_LOCALE(MusicVolume) { { ELanguage::English, { "Music Volume", "Adjust the volume for the music." } } @@ -183,6 +141,11 @@ CONFIG_DEFINE_LOCALE(BattleTheme) { ELanguage::English, { "Battle Theme", "Play the Werehog battle theme during combat.\n\nThis option will apply the next time you're in combat." } } }; +CONFIG_DEFINE_LOCALE(Monitor) +{ + { ELanguage::English, { "Monitor", "Change which monitor to display the game on." } } +}; + CONFIG_DEFINE_LOCALE(AspectRatio) { { ELanguage::English, { "Aspect Ratio", "Change the aspect ratio." } } @@ -293,7 +256,7 @@ CONFIG_DEFINE_ENUM_LOCALE(EMotionBlur) } }; -CONFIG_DEFINE_LOCALE(XboxColourCorrection) +CONFIG_DEFINE_LOCALE(XboxColorCorrection) { { ELanguage::English, { "Xbox Color Correction", "Use the warm tint from the Xbox version of the game." } } }; diff --git a/UnleashedRecomp/locale/locale.cpp b/UnleashedRecomp/locale/locale.cpp new file mode 100644 index 00000000..31048047 --- /dev/null +++ b/UnleashedRecomp/locale/locale.cpp @@ -0,0 +1,333 @@ +#include + +std::unordered_map> g_locale = +{ + { + "Options_Category_System", + { + { ELanguage::English, "SYSTEM" } + } + }, + { + "Options_Category_Input", + { + { ELanguage::English, "INPUT" } + } + }, + { + "Options_Category_Audio", + { + { ELanguage::English, "AUDIO" } + } + }, + { + "Options_Category_Video", + { + { ELanguage::English, "VIDEO" } + } + }, + { + "Options_Value_Max", + { + { ELanguage::English, "MAX" } + } + }, + { + "Options_Name_WindowSize", + { + { ELanguage::English, "Window Size" } + } + }, + { + "Options_Desc_WindowSize", + { + { ELanguage::English, "Adjust the size of the game window in windowed mode." } + } + }, + { + "Options_Desc_NotAvailable", + { + { ELanguage::English, "This option is not available at this location." } + } + }, + { + "Options_Desc_NotAvailableMSAA", + { + { ELanguage::English, "This option is not available without MSAA." } + } + }, + { + "Options_Desc_OSNotSupported", + { + { ELanguage::English, "This option is not supported by your operating system." } + } + }, + { + "Options_Message_Restart", + { + { ELanguage::English, "The game will now restart." } + } + }, + { + "Achievements_Name", + { + { ELanguage::English, "Achievements" } + } + }, + { + "Achievements_Name_Uppercase", + { + { ELanguage::English, "ACHIEVEMENTS" } + } + }, + { + "Achievements_Unlock", + { + { ELanguage::English, "Achievement Unlocked!" } + } + }, + { + "Installer_Header_Installer", + { + { ELanguage::English, "INSTALLER" }, + { ELanguage::Spanish, "INSTALADOR" }, + }, + }, + { + "Installer_Header_Installing", + { + { ELanguage::English, "INSTALLING" }, + { ELanguage::Spanish, "INSTALANDO" }, + } + }, + { + "Installer_Page_SelectLanguage", + { + { ELanguage::English, "Please select a language." } + } + }, + { + "Installer_Page_Introduction", + { + { ELanguage::English, "Welcome to Unleashed Recompiled!\n\nYou'll need an Xbox 360 copy\nof Sonic Unleashed in order to proceed with the installation." } + } + }, + { + "Installer_Page_SelectGameAndUpdate", + { + { ELanguage::English, "Add the files for the game and its title update. You can use digital dumps or pre-extracted folders containing the necessary files." } + } + }, + { + "Installer_Page_SelectDLC", + { + { ELanguage::English, "Add the files for the DLC. You can use digital dumps or pre-extracted folders containing the necessary files." } + } + }, + { + "Installer_Page_CheckSpace", + { + { ELanguage::English, "The content will be installed to the program's folder. Please confirm you have enough free space.\n\n" } + } + }, + { + "Installer_Page_Installing", + { + { ELanguage::English, "Please wait while the content is being installed..." } + } + }, + { + "Installer_Page_InstallSucceeded", + { + { ELanguage::English, "Installation complete.\n\nThis project is brought to you by:\n\n" } + } + }, + { + "Installer_Page_InstallFailed", + { + { ELanguage::English, "Installation failed.\n\nError:\n\n" } + } + }, + { + "Installer_Step_Game", + { + { ELanguage::English, "GAME" } + } + }, + { + "Installer_Step_Update", + { + { ELanguage::English, "UPDATE" } + } + }, + { + "Installer_Step_RequiredSpace", + { + { ELanguage::English, "Required space: %2.2f GiB" } + } + }, + { + "Installer_Step_AvailableSpace", + { + { ELanguage::English, "Available space: %2.2f GiB" } + } + }, + { + "Installer_Button_Next", + { + { ELanguage::English, "NEXT" }, + { ELanguage::Spanish, "SIGUIENTE" }, + { ELanguage::German, "WEITER" }, + } + }, + { + "Installer_Button_Skip", + { + { ELanguage::English, "SKIP" }, + { ELanguage::Spanish, "SALTAR" }, + { ELanguage::German, "ÜBERSPRINGEN" }, + } + }, + { + "Installer_Button_AddFiles", + { + { ELanguage::English, "ADD FILES" }, + { ELanguage::Spanish, "AÑADIR ARCHIVOS" }, + { ELanguage::German, "DATEIEN HINZUFÜGEN" }, + } + }, + { + "Installer_Button_AddFolder", + { + { ELanguage::English, "ADD FOLDER" }, + { ELanguage::Spanish, "AÑADIR CARPETA" }, + { ELanguage::German, "ORDNER HINZUFÜGEN" }, + } + }, + { + "Installer_Message_InvalidFilesList", + { + { ELanguage::English, "The following selected files are invalid:" } + } + }, + { + "Installer_Message_InvalidFiles", + { + { ELanguage::English, "Some of the files that have\nbeen provided are not valid.\n\nPlease make sure all the\nspecified files are correct\nand try again." } + } + }, + { + "Installer_Message_IncompatibleGameData", + { + { ELanguage::English, "The specified game and\nupdate file are incompatible.\n\nPlease ensure the files are\nfor the same version and\nregion and try again." } + } + }, + { + "Installer_Message_DLCWarning", + { + { ELanguage::English, "It is highly recommended\nthat you install all of the\nDLC, as it includes high\nquality lighting textures\nfor the base game.\n\nAre you sure you want to\nskip this step?" } + } + }, + { + "Installer_Message_TitleMissingDLC", + { + { ELanguage::English, "This will restart the game to\nallow you to install any DLC\nthat you are missing.\n\nInstalling DLC will improve the\nlighting quality across the game.\n\nWould you like to install missing\ncontent?" } + } + }, + { + "Installer_Message_Title", + { + { ELanguage::English, "This restarts the game to\nallow you to install any DLC\nthat you may be missing.\n\nYou are not currently\nmissing any DLC.\n\nWould you like to proceed\nanyway?" } + } + }, + { + "Title_Message_Quit", + { + { ELanguage::English, "Are you sure you want to quit?" } + } + }, + { + "Common_On", + { + { ELanguage::English, "ON" }, + { ELanguage::Japanese, "オン" }, + { ELanguage::German, "EIN" }, + { ELanguage::French, "OUI" }, + { ELanguage::Spanish, "SÍ" }, + { ELanguage::Italian, "SÌ" } + } + }, + { + "Common_Off", + { + { ELanguage::English, "OFF" }, + { ELanguage::Japanese, "オフ" }, + { ELanguage::German, "AUS" }, + { ELanguage::French, "NON" }, + { ELanguage::Spanish, "NO" }, + { ELanguage::Italian, "NO" } + } + }, + { + "Common_Yes", + { + { ELanguage::English, "Yes" } + } + }, + { + "Common_No", + { + { ELanguage::English, "No" } + } + }, + { + "Common_Next", + { + { ELanguage::English, "Next" } + } + }, + { + "Common_Select", + { + { ELanguage::English, "Select" } + } + }, + { + "Common_Back", + { + { ELanguage::English, "Back" } + } + }, + { + "Common_Reset", + { + { ELanguage::English, "Reset" } + } + }, + { + "Common_Switch", + { + { ELanguage::English, "Switch" } + } + } +}; + +std::string& Localise(const char* key) +{ + if (!g_locale.count(key)) + return g_localeMissing; + + if (!g_locale[key].count(Config::Language)) + { + if (g_locale[key].count(ELanguage::English)) + { + return g_locale[key][ELanguage::English]; + } + else + { + return g_localeMissing; + } + } + + return g_locale[key][Config::Language]; +} diff --git a/UnleashedRecomp/locale/locale.h b/UnleashedRecomp/locale/locale.h index aeceb6f6..0c0986a1 100644 --- a/UnleashedRecomp/locale/locale.h +++ b/UnleashedRecomp/locale/locale.h @@ -4,312 +4,6 @@ inline std::string g_localeMissing = ""; -inline std::unordered_map> g_locale -{ - { - "Options_Category_System", - { - { ELanguage::English, "SYSTEM" } - } - }, - { - "Options_Category_Input", - { - { ELanguage::English, "INPUT" } - } - }, - { - "Options_Category_Audio", - { - { ELanguage::English, "AUDIO" } - } - }, - { - "Options_Category_Video", - { - { ELanguage::English, "VIDEO" } - } - }, - { - "Options_Value_Max", - { - { ELanguage::English, "MAX" } - } - }, - { - "Options_Name_WindowSize", - { - { ELanguage::English, "Window Size" } - } - }, - { - "Options_Desc_WindowSize", - { - { ELanguage::English, "Adjust the size of the game window in windowed mode." } - } - }, - { - "Options_Desc_NotAvailable", - { - { ELanguage::English, "This option is not available at this location." } - } - }, - { - "Options_Desc_NotAvailableMSAA", - { - { ELanguage::English, "This option is not available without MSAA." } - } - }, - { - "Options_Desc_OSNotSupported", - { - { ELanguage::English, "This option is not supported by your operating system." } - } - }, - { - "Options_Message_Restart", - { - { ELanguage::English, "The game will now restart." } - } - }, - { - "Achievements_Name", - { - { ELanguage::English, "Achievements" } - } - }, - { - "Achievements_Name_Uppercase", - { - { ELanguage::English, "ACHIEVEMENTS" } - } - }, - { - "Achievements_Unlock", - { - { ELanguage::English, "Achievement Unlocked!" } - } - }, - { - "Installer_Header_Installer", - { - { ELanguage::English, "INSTALLER" }, - { ELanguage::Spanish, "INSTALADOR" }, - }, - }, - { - "Installer_Header_Installing", - { - { ELanguage::English, "INSTALLING" }, - { ELanguage::Spanish, "INSTALANDO" }, - } - }, - { - "Installer_Page_SelectLanguage", - { - { ELanguage::English, "Please select a language." } - } - }, - { - "Installer_Page_Introduction", - { - { ELanguage::English, "Welcome to Unleashed Recompiled!\n\nYou'll need an Xbox 360 copy\nof Sonic Unleashed in order to proceed with the installation." } - } - }, - { - "Installer_Page_SelectGameAndUpdate", - { - { ELanguage::English, "Add the files for the game and its title update. You can use digital dumps or pre-extracted folders containing the necessary files." } - } - }, - { - "Installer_Page_SelectDLC", - { - { ELanguage::English, "Add the files for the DLC. You can use digital dumps or pre-extracted folders containing the necessary files." } - } - }, - { - "Installer_Page_CheckSpace", - { - { ELanguage::English, "The content will be installed to the program's folder. Please confirm you have enough free space.\n\n" } - } - }, - { - "Installer_Page_Installing", - { - { ELanguage::English, "Please wait while the content is being installed..." } - } - }, - { - "Installer_Page_InstallSucceeded", - { - { ELanguage::English, "Installation complete.\n\nThis project is brought to you by:\n\n" } - } - }, - { - "Installer_Page_InstallFailed", - { - { ELanguage::English, "Installation failed.\n\nError:\n\n" } - } - }, - { - "Installer_Step_Game", - { - { ELanguage::English, "GAME" } - } - }, - { - "Installer_Step_Update", - { - { ELanguage::English, "UPDATE" } - } - }, - { - "Installer_Step_RequiredSpace", - { - { ELanguage::English, "Required space: %2.2f GiB" } - } - }, - { - "Installer_Step_AvailableSpace", - { - { ELanguage::English, "Available space: %2.2f GiB" } - } - }, - { - "Installer_Button_Next", - { - { ELanguage::English, "NEXT" }, - { ELanguage::Spanish, "SIGUIENTE" }, - { ELanguage::German, "WEITER" }, - } - }, - { - "Installer_Button_Skip", - { - { ELanguage::English, "SKIP" }, - { ELanguage::Spanish, "SALTAR" }, - { ELanguage::German, "ÜBERSPRINGEN" }, - } - }, - { - "Installer_Button_AddFiles", - { - { ELanguage::English, "ADD FILES" }, - { ELanguage::Spanish, "AÑADIR ARCHIVOS" }, - { ELanguage::German, "DATEIEN HINZUFÜGEN" }, - } - }, - { - "Installer_Button_AddFolder", - { - { ELanguage::English, "ADD FOLDER" }, - { ELanguage::Spanish, "AÑADIR CARPETA" }, - { ELanguage::German, "ORDNER HINZUFÜGEN" }, - } - }, - { - "Installer_Message_InvalidFilesList", - { - { ELanguage::English, "The following selected files are invalid:" } - } - }, - { - "Installer_Message_InvalidFiles", - { - { ELanguage::English, "Some of the files that have\nbeen provided are not valid.\n\nPlease make sure all the\nspecified files are correct\nand try again." } - } - }, - { - "Installer_Message_IncompatibleGameData", - { - { ELanguage::English, "The specified game and\nupdate file are incompatible.\n\nPlease ensure the files are\nfor the same version and\nregion and try again." } - } - }, - { - "Installer_Message_DLCWarning", - { - { ELanguage::English, "It is highly recommended\nthat you install all of the\nDLC, as it includes high\nquality lighting textures\nfor the base game.\n\nAre you sure you want to\nskip this step?" } - } - }, - { - "Installer_Message_TitleMissingDLC", - { - { ELanguage::English, "This will restart the game to\nallow you to install any DLC\nthat you are missing.\n\nInstalling DLC will improve the\nlighting quality across the game.\n\nWould you like to install missing\ncontent?" } - } - }, - { - "Installer_Message_Title", - { - { ELanguage::English, "This restarts the game to\nallow you to install any DLC\nthat you may be missing.\n\nYou are not currently\nmissing any DLC.\n\nWould you like to proceed\nanyway?" } - } - }, - { - "Title_Message_Quit", - { - { ELanguage::English, "Are you sure you want to quit?" } - } - }, - { - "Common_Yes", - { - { ELanguage::English, "Yes" } - } - }, - { - "Common_No", - { - { ELanguage::English, "No" } - } - }, - { - "Common_Next", - { - { ELanguage::English, "Next" } - } - }, - { - "Common_Select", - { - { ELanguage::English, "Select" } - } - }, - { - "Common_Back", - { - { ELanguage::English, "Back" } - } - }, - { - "Common_Reset", - { - { ELanguage::English, "Reset" } - } - }, - { - "Common_Switch", - { - { ELanguage::English, "Switch" } - } - } -}; +extern std::unordered_map> g_locale; -inline std::string& Localise(const char* key) -{ - if (!g_locale.count(key)) - return g_localeMissing; - - if (!g_locale[key].count(Config::Language)) - { - if (g_locale[key].count(ELanguage::English)) - { - return g_locale[key][ELanguage::English]; - } - else - { - return g_localeMissing; - } - } - - return g_locale[key][Config::Language]; -} +std::string& Localise(const char* key); diff --git a/UnleashedRecomp/patches/player_patches.cpp b/UnleashedRecomp/patches/player_patches.cpp index c3699fd0..dfa1142d 100644 --- a/UnleashedRecomp/patches/player_patches.cpp +++ b/UnleashedRecomp/patches/player_patches.cpp @@ -9,6 +9,26 @@ uint32_t m_lastCheckpointScore = 0; float m_lastDarkGaiaEnergy = 0.0f; bool m_isUnleashCancelled = false; +void PostureDPadSupportMidAsmHook(PPCRegister& r3) +{ + if (!Config::AllowDPadMovement) + return; + + auto pPadState = (SWA::SPadState*)g_memory.Translate(r3.u32); + + if (pPadState->IsDown(SWA::eKeyState_DpadUp)) + pPadState->LeftStickVertical = 1.0f; + + if (pPadState->IsDown(SWA::eKeyState_DpadDown)) + pPadState->LeftStickVertical = -1.0f; + + if (pPadState->IsDown(SWA::eKeyState_DpadLeft)) + pPadState->LeftStickHorizontal = -1.0f; + + if (pPadState->IsDown(SWA::eKeyState_DpadRight)) + pPadState->LeftStickHorizontal = 1.0f; +} + /* Hook function for when checkpoints are activated to preserve the current checkpoint score. */ PPC_FUNC_IMPL(__imp__sub_82624308); diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index 43e11e72..c68cc51a 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -1105,6 +1105,7 @@ static void InstallerStart() { g_currentPage = WizardPage::Installing; g_installerStartTime = ImGui::GetTime(); + g_installerEndTime = DBL_MAX; g_installerProgressRatioCurrent = 0.0f; g_installerProgressRatioTarget = 0.0f; g_installerFailed = false; diff --git a/UnleashedRecomp/ui/options_menu.cpp b/UnleashedRecomp/ui/options_menu.cpp index 066b7e81..d9153783 100644 --- a/UnleashedRecomp/ui/options_menu.cpp +++ b/UnleashedRecomp/ui/options_menu.cpp @@ -809,6 +809,7 @@ static void DrawConfigOptions() DrawConfigOption(rowCount++, yOffset, &Config::InvertCameraX, true); DrawConfigOption(rowCount++, yOffset, &Config::InvertCameraY, true); DrawConfigOption(rowCount++, yOffset, &Config::AllowBackgroundInput, true); + DrawConfigOption(rowCount++, yOffset, &Config::AllowDPadMovement, true); DrawConfigOption(rowCount++, yOffset, &Config::ControllerIcons, true); break; case 2: // AUDIO @@ -832,7 +833,7 @@ static void DrawConfigOptions() DrawConfigOption(rowCount++, yOffset, &Config::ShadowResolution, true); DrawConfigOption(rowCount++, yOffset, &Config::GITextureFiltering, true); DrawConfigOption(rowCount++, yOffset, &Config::MotionBlur, true); - DrawConfigOption(rowCount++, yOffset, &Config::XboxColourCorrection, true); + DrawConfigOption(rowCount++, yOffset, &Config::XboxColorCorrection, true); DrawConfigOption(rowCount++, yOffset, &Config::MovieScaleMode, true); DrawConfigOption(rowCount++, yOffset, &Config::UIScaleMode, true); break; @@ -952,8 +953,10 @@ static void DrawInfoPanel() if (g_selectedItem) { auto desc = g_selectedItem->GetDescription(); + auto thumbnail = GetThumbnail(g_selectedItem); - drawList->AddImage(GetThumbnail(g_selectedItem->GetName()), clipRectMin, thumbnailMax); + if (thumbnail) + drawList->AddImage(thumbnail, clipRectMin, thumbnailMax); if (g_inaccessibleReason) { diff --git a/UnleashedRecomp/ui/options_menu_thumbnails.cpp b/UnleashedRecomp/ui/options_menu_thumbnails.cpp new file mode 100644 index 00000000..39c6c17f --- /dev/null +++ b/UnleashedRecomp/ui/options_menu_thumbnails.cpp @@ -0,0 +1,181 @@ +#include +#include + +// TODO (Hyper): lower the resolution of these textures once final. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define VALUE_THUMBNAIL_MAP(type) std::unordered_map> + +static std::unordered_map> g_namedThumbnails; +static std::unordered_map> g_configThumbnails; + +static VALUE_THUMBNAIL_MAP(ETimeOfDayTransition) g_timeOfDayTransitionThumbnails; +static VALUE_THUMBNAIL_MAP(bool) g_transparencyAntiAliasingThumbnails; +static VALUE_THUMBNAIL_MAP(EShadowResolution) g_shadowResolutionThumbnails; +static VALUE_THUMBNAIL_MAP(EGITextureFiltering) g_giTextureFilteringThumbnails; +static VALUE_THUMBNAIL_MAP(EMotionBlur) g_motionBlurThumbnails; +static VALUE_THUMBNAIL_MAP(bool) g_xboxColorCorrectionThumbnails; + +void LoadThumbnails() +{ + g_namedThumbnails["Default"] = LOAD_ZSTD_TEXTURE(g_default); + g_namedThumbnails["WindowSize"] = LOAD_ZSTD_TEXTURE(g_window_size); + + g_configThumbnails[&Config::Language] = LOAD_ZSTD_TEXTURE(g_language); + g_configThumbnails[&Config::Hints] = LOAD_ZSTD_TEXTURE(g_hints); + g_configThumbnails[&Config::ControlTutorial] = LOAD_ZSTD_TEXTURE(g_control_tutorial); + g_configThumbnails[&Config::AchievementNotifications] = LOAD_ZSTD_TEXTURE(g_achievement_notifications); + + g_timeOfDayTransitionThumbnails[ETimeOfDayTransition::Xbox] = LOAD_ZSTD_TEXTURE(g_time_of_day_transition_xbox); + g_timeOfDayTransitionThumbnails[ETimeOfDayTransition::PlayStation] = LOAD_ZSTD_TEXTURE(g_time_of_day_transition_playstation); + + g_configThumbnails[&Config::InvertCameraX] = LOAD_ZSTD_TEXTURE(g_invert_camera_x); + g_configThumbnails[&Config::InvertCameraY] = LOAD_ZSTD_TEXTURE(g_invert_camera_y); + g_configThumbnails[&Config::AllowBackgroundInput] = LOAD_ZSTD_TEXTURE(g_allow_background_input); + g_configThumbnails[&Config::AllowDPadMovement] = LOAD_ZSTD_TEXTURE(g_allow_dpad_movement); + g_configThumbnails[&Config::ControllerIcons] = LOAD_ZSTD_TEXTURE(g_controller_icons); + g_configThumbnails[&Config::MusicVolume] = LOAD_ZSTD_TEXTURE(g_music_volume); + g_configThumbnails[&Config::EffectsVolume] = LOAD_ZSTD_TEXTURE(g_effects_volume); + g_configThumbnails[&Config::VoiceLanguage] = LOAD_ZSTD_TEXTURE(g_voice_language); + g_configThumbnails[&Config::Subtitles] = LOAD_ZSTD_TEXTURE(g_subtitles); + g_configThumbnails[&Config::MusicAttenuation] = LOAD_ZSTD_TEXTURE(g_music_attenuation); + g_configThumbnails[&Config::BattleTheme] = LOAD_ZSTD_TEXTURE(g_battle_theme); + g_configThumbnails[&Config::Monitor] = LOAD_ZSTD_TEXTURE(g_monitor); + g_configThumbnails[&Config::AspectRatio] = LOAD_ZSTD_TEXTURE(g_aspect_ratio); + g_configThumbnails[&Config::ResolutionScale] = LOAD_ZSTD_TEXTURE(g_resolution_scale); + g_configThumbnails[&Config::Fullscreen] = LOAD_ZSTD_TEXTURE(g_fullscreen); + g_configThumbnails[&Config::VSync] = LOAD_ZSTD_TEXTURE(g_vsync); + g_configThumbnails[&Config::FPS] = LOAD_ZSTD_TEXTURE(g_fps); + g_configThumbnails[&Config::Brightness] = LOAD_ZSTD_TEXTURE(g_brightness); + g_configThumbnails[&Config::AntiAliasing] = LOAD_ZSTD_TEXTURE(g_antialiasing); + + g_transparencyAntiAliasingThumbnails[false] = LOAD_ZSTD_TEXTURE(g_transparency_antialiasing_false); + g_transparencyAntiAliasingThumbnails[true] = LOAD_ZSTD_TEXTURE(g_transparency_antialiasing_true); + + g_shadowResolutionThumbnails[EShadowResolution::Original] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_original); + g_shadowResolutionThumbnails[EShadowResolution::x512] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_x512); + g_shadowResolutionThumbnails[EShadowResolution::x1024] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_x1024); + g_shadowResolutionThumbnails[EShadowResolution::x2048] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_x2048); + g_shadowResolutionThumbnails[EShadowResolution::x4096] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_x4096); + g_shadowResolutionThumbnails[EShadowResolution::x8192] = LOAD_ZSTD_TEXTURE(g_shadow_resolution_x8192); + + g_giTextureFilteringThumbnails[EGITextureFiltering::Bilinear] = LOAD_ZSTD_TEXTURE(g_gi_texture_filtering_bilinear); + g_giTextureFilteringThumbnails[EGITextureFiltering::Bicubic] = LOAD_ZSTD_TEXTURE(g_gi_texture_filtering_bicubic); + + g_motionBlurThumbnails[EMotionBlur::Off] = LOAD_ZSTD_TEXTURE(g_motion_blur_off); + g_motionBlurThumbnails[EMotionBlur::Original] = LOAD_ZSTD_TEXTURE(g_motion_blur_original); + g_motionBlurThumbnails[EMotionBlur::Enhanced] = LOAD_ZSTD_TEXTURE(g_motion_blur_enhanced); + + g_xboxColorCorrectionThumbnails[false] = LOAD_ZSTD_TEXTURE(g_xbox_color_correction_false); + g_xboxColorCorrectionThumbnails[true] = LOAD_ZSTD_TEXTURE(g_xbox_color_correction_true); + + g_configThumbnails[&Config::MovieScaleMode] = LOAD_ZSTD_TEXTURE(g_movie_scale_mode); + g_configThumbnails[&Config::UIScaleMode] = LOAD_ZSTD_TEXTURE(g_ui_scale_mode); +} + +template +bool TryGetValueThumbnail(const IConfigDef* cfg, VALUE_THUMBNAIL_MAP(T)* thumbnails, GuestTexture** texture) +{ + if (!texture) + return false; + + if (!cfg->GetValue()) + return false; + + auto result = thumbnails->at(*(T*)cfg->GetValue()).get(); + + if (!result) + return false; + + *texture = result; + + return true; +} + +GuestTexture* GetThumbnail(const std::string_view name) +{ + if (!g_namedThumbnails.count(name)) + return g_namedThumbnails["Default"].get(); + + return g_namedThumbnails[name].get(); +} + +GuestTexture* GetThumbnail(const IConfigDef* cfg) +{ + if (!g_configThumbnails.count(cfg)) + { + auto texture = g_namedThumbnails["Default"].get(); + + if (cfg == &Config::TimeOfDayTransition) + { + TryGetValueThumbnail(cfg, &g_timeOfDayTransitionThumbnails, &texture); + } + else if (cfg == &Config::TransparencyAntiAliasing) + { + TryGetValueThumbnail(cfg, &g_transparencyAntiAliasingThumbnails, &texture); + } + else if (cfg == &Config::ShadowResolution) + { + TryGetValueThumbnail(cfg, &g_shadowResolutionThumbnails, &texture); + } + else if (cfg == &Config::GITextureFiltering) + { + TryGetValueThumbnail(cfg, &g_giTextureFilteringThumbnails, &texture); + } + else if (cfg == &Config::MotionBlur) + { + TryGetValueThumbnail(cfg, &g_motionBlurThumbnails, &texture); + } + else if (cfg == &Config::XboxColorCorrection) + { + TryGetValueThumbnail(cfg, &g_xboxColorCorrectionThumbnails, &texture); + } + + return texture; + } + + return g_configThumbnails[cfg].get(); +} diff --git a/UnleashedRecomp/ui/options_menu_thumbnails.h b/UnleashedRecomp/ui/options_menu_thumbnails.h index 43e26c18..3b813763 100644 --- a/UnleashedRecomp/ui/options_menu_thumbnails.h +++ b/UnleashedRecomp/ui/options_menu_thumbnails.h @@ -2,81 +2,8 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +void LoadThumbnails(); -inline std::unordered_map> g_thumbnails; - -inline void LoadThumbnails() -{ - g_thumbnails[Config::Language.Name] = LOAD_ZSTD_TEXTURE(g_language); - g_thumbnails[Config::Hints.Name] = LOAD_ZSTD_TEXTURE(g_hints); - g_thumbnails[Config::ControlTutorial.Name] = LOAD_ZSTD_TEXTURE(g_control_tutorial); - g_thumbnails[Config::AchievementNotifications.Name] = LOAD_ZSTD_TEXTURE(g_achievement_notifications); - g_thumbnails[Config::TimeOfDayTransition.Name] = LOAD_ZSTD_TEXTURE(g_time_of_day_transition); - g_thumbnails[Config::InvertCameraX.Name] = LOAD_ZSTD_TEXTURE(g_invert_camera_x); - g_thumbnails[Config::InvertCameraY.Name] = LOAD_ZSTD_TEXTURE(g_invert_camera_y); - g_thumbnails[Config::AllowBackgroundInput.Name] = LOAD_ZSTD_TEXTURE(g_allow_background_input); - g_thumbnails[Config::ControllerIcons.Name] = LOAD_ZSTD_TEXTURE(g_controller_icons); - g_thumbnails[Config::MusicVolume.Name] = LOAD_ZSTD_TEXTURE(g_music_volume); - g_thumbnails[Config::EffectsVolume.Name] = LOAD_ZSTD_TEXTURE(g_effects_volume); - g_thumbnails[Config::VoiceLanguage.Name] = LOAD_ZSTD_TEXTURE(g_voice_language); - g_thumbnails[Config::Subtitles.Name] = LOAD_ZSTD_TEXTURE(g_subtitles); - g_thumbnails[Config::MusicAttenuation.Name] = LOAD_ZSTD_TEXTURE(g_music_attenuation); - g_thumbnails[Config::BattleTheme.Name] = LOAD_ZSTD_TEXTURE(g_battle_theme); - g_thumbnails["WindowSize"] = LOAD_ZSTD_TEXTURE(g_window_size); - g_thumbnails["Monitor"] = LOAD_ZSTD_TEXTURE(g_monitor); - g_thumbnails[Config::AspectRatio.Name] = LOAD_ZSTD_TEXTURE(g_aspect_ratio); - g_thumbnails[Config::ResolutionScale.Name] = LOAD_ZSTD_TEXTURE(g_resolution_scale); - g_thumbnails[Config::Fullscreen.Name] = LOAD_ZSTD_TEXTURE(g_fullscreen); - g_thumbnails[Config::VSync.Name] = LOAD_ZSTD_TEXTURE(g_vsync); - g_thumbnails[Config::FPS.Name] = LOAD_ZSTD_TEXTURE(g_fps); - g_thumbnails[Config::Brightness.Name] = LOAD_ZSTD_TEXTURE(g_brightness); - g_thumbnails[Config::AntiAliasing.Name] = LOAD_ZSTD_TEXTURE(g_antialiasing); - g_thumbnails[Config::TransparencyAntiAliasing.Name] = LOAD_ZSTD_TEXTURE(g_transparency_antialiasing); - g_thumbnails[Config::ShadowResolution.Name] = LOAD_ZSTD_TEXTURE(g_shadow_resolution); - g_thumbnails[Config::GITextureFiltering.Name] = LOAD_ZSTD_TEXTURE(g_gi_texture_filtering); - g_thumbnails[Config::MotionBlur.Name] = LOAD_ZSTD_TEXTURE(g_motion_blur); - g_thumbnails[Config::XboxColourCorrection.Name] = LOAD_ZSTD_TEXTURE(g_xbox_color_correction); - g_thumbnails[Config::MovieScaleMode.Name] = LOAD_ZSTD_TEXTURE(g_movie_scale_mode); - g_thumbnails[Config::UIScaleMode.Name] = LOAD_ZSTD_TEXTURE(g_ui_scale_mode); -} - -inline GuestTexture* GetThumbnail(const std::string_view name) -{ - if (!g_thumbnails.count(name)) - return nullptr; - - return g_thumbnails[name].get(); -} +GuestTexture* GetThumbnail(const std::string_view name); +GuestTexture* GetThumbnail(const IConfigDef* cfg); diff --git a/UnleashedRecomp/user/config.h b/UnleashedRecomp/user/config.h index f1b3ce57..137925ab 100644 --- a/UnleashedRecomp/user/config.h +++ b/UnleashedRecomp/user/config.h @@ -1,7 +1,6 @@ #pragma once #include -#include #include #include @@ -19,6 +18,7 @@ public: CONFIG_DEFINE_LOCALISED("Input", bool, InvertCameraX, false); CONFIG_DEFINE_LOCALISED("Input", bool, InvertCameraY, false); CONFIG_DEFINE_LOCALISED("Input", bool, AllowBackgroundInput, false); + CONFIG_DEFINE_LOCALISED("Input", bool, AllowDPadMovement, false); CONFIG_DEFINE_ENUM_LOCALISED("Input", EControllerIcons, ControllerIcons, EControllerIcons::Auto); CONFIG_DEFINE_LOCALISED("Audio", float, MusicVolume, 1.0f); @@ -39,6 +39,7 @@ public: CONFIG_DEFINE("Video", int32_t, WindowWidth, 1280); CONFIG_DEFINE("Video", int32_t, WindowHeight, 720); CONFIG_DEFINE_ENUM("Video", EWindowState, WindowState, EWindowState::Normal); + CONFIG_DEFINE_LOCALISED("Video", size_t, Monitor, 0); CONFIG_DEFINE_ENUM_LOCALISED("Video", EAspectRatio, AspectRatio, EAspectRatio::Auto); CONFIG_DEFINE_CALLBACK("Video", float, ResolutionScale, 1.0f, @@ -65,7 +66,7 @@ public: CONFIG_DEFINE_ENUM_LOCALISED("Video", EGITextureFiltering, GITextureFiltering, EGITextureFiltering::Bicubic); CONFIG_DEFINE_ENUM("Video", EDepthOfFieldQuality, DepthOfFieldQuality, EDepthOfFieldQuality::Auto); CONFIG_DEFINE_ENUM_LOCALISED("Video", EMotionBlur, MotionBlur, EMotionBlur::Original); - CONFIG_DEFINE_LOCALISED("Video", bool, XboxColourCorrection, false); + CONFIG_DEFINE_LOCALISED("Video", bool, XboxColorCorrection, false); CONFIG_DEFINE_ENUM_LOCALISED("Video", EMovieScaleMode, MovieScaleMode, EMovieScaleMode::Fit); CONFIG_DEFINE_ENUM_LOCALISED("Video", EUIScaleMode, UIScaleMode, EUIScaleMode::Edge); diff --git a/UnleashedRecomp/user/config_detail.cpp b/UnleashedRecomp/user/config_detail.cpp index 31492253..dc4cfb4c 100644 --- a/UnleashedRecomp/user/config_detail.cpp +++ b/UnleashedRecomp/user/config_detail.cpp @@ -1,5 +1,6 @@ #include "config.h" #include "config_detail.h" +#include // CONFIG_DEFINE template @@ -100,7 +101,9 @@ std::string ConfigDef::GetValueLocalised() const } else if constexpr (std::is_same_v) { - locale = &g_bool_locale; + return Value + ? Localise("Common_On") + : Localise("Common_Off"); } if (!locale) @@ -138,7 +141,7 @@ std::string ConfigDef::GetValueDescription() const } else if constexpr (std::is_same_v) { - locale = &g_bool_locale; + return ""; } if (!locale) diff --git a/UnleashedRecomp/user/config_detail.h b/UnleashedRecomp/user/config_detail.h index 7ca8a902..cfa91e3d 100644 --- a/UnleashedRecomp/user/config_detail.h +++ b/UnleashedRecomp/user/config_detail.h @@ -1,26 +1,30 @@ #pragma once +#define CONFIG_LOCALE std::unordered_map> +#define CONFIG_ENUM_LOCALE(type) std::unordered_map>> + #define CONFIG_DEFINE(section, type, name, defaultValue) \ static inline ConfigDef name{section, #name, defaultValue}; #define CONFIG_DEFINE_LOCALISED(section, type, name, defaultValue) \ + static CONFIG_LOCALE g_##name##_locale; \ static inline ConfigDef name{section, #name, &g_##name##_locale, defaultValue}; #define CONFIG_DEFINE_ENUM(section, type, name, defaultValue) \ static inline ConfigDef name{section, #name, defaultValue, &g_##type##_template}; #define CONFIG_DEFINE_ENUM_LOCALISED(section, type, name, defaultValue) \ + static CONFIG_LOCALE g_##name##_locale; \ + static CONFIG_ENUM_LOCALE(type) g_##type##_locale; \ static inline ConfigDef name{section, #name, &g_##name##_locale, defaultValue, &g_##type##_template, &g_##type##_locale}; #define CONFIG_DEFINE_CALLBACK(section, type, name, defaultValue, readCallback) \ + static CONFIG_LOCALE g_##name##_locale; \ static inline ConfigDef name{section, #name, defaultValue, [](ConfigDef* def) readCallback}; #define CONFIG_DEFINE_ENUM_TEMPLATE(type) \ inline std::unordered_map g_##type##_template = -#define CONFIG_LOCALE std::unordered_map> -#define CONFIG_ENUM_LOCALE(type) std::unordered_map>> - #define WINDOWPOS_CENTRED 0x2FFF0000 enum class ELanguage : uint32_t @@ -76,8 +80,8 @@ enum class EControllerIcons : uint32_t CONFIG_DEFINE_ENUM_TEMPLATE(EControllerIcons) { - { "Auto", EControllerIcons::Auto }, - { "Xbox", EControllerIcons::Xbox }, + { "Auto", EControllerIcons::Auto }, + { "Xbox", EControllerIcons::Xbox }, { "PlayStation", EControllerIcons::PlayStation } }; @@ -146,8 +150,8 @@ enum class ETripleBuffering : uint32_t CONFIG_DEFINE_ENUM_TEMPLATE(ETripleBuffering) { { "Auto", ETripleBuffering::Auto }, - { "On", ETripleBuffering::On }, - { "Off", ETripleBuffering::Off } + { "On", ETripleBuffering::On }, + { "Off", ETripleBuffering::Off } }; enum class EAntiAliasing : uint32_t diff --git a/UnleashedRecompLib/config/SWA.toml b/UnleashedRecompLib/config/SWA.toml index 7ccbab90..cc13d6a1 100644 --- a/UnleashedRecompLib/config/SWA.toml +++ b/UnleashedRecompLib/config/SWA.toml @@ -564,3 +564,27 @@ jump_address = 0x82585480 [[midasm_hook]] name = "LoadingScreenControllerMidAsmHook" address = 0x824DC9D4 + +# CPlayerSpeedPostureInputOnPath +[[midasm_hook]] +name = "PostureDPadSupportMidAsmHook" +address = 0x8234F174 +registers = ["r3"] + +# CPlayerSpeedPostureInputOnPathLocal +[[midasm_hook]] +name = "PostureDPadSupportMidAsmHook" +address = 0x8234F518 +registers = ["r3"] + +# CPlayerSpeedPostureInput3DStandard +[[midasm_hook]] +name = "PostureDPadSupportMidAsmHook" +address = 0x8234EEC8 +registers = ["r3"] + +# CEvilPostureInputStandard +[[midasm_hook]] +name = "PostureDPadSupportMidAsmHook" +address = 0x823CDA2C +registers = ["r3"] diff --git a/UnleashedRecompResources b/UnleashedRecompResources index 7179a845..a9f556b4 160000 --- a/UnleashedRecompResources +++ b/UnleashedRecompResources @@ -1 +1 @@ -Subproject commit 7179a84509ac565edd07bddeee131fb229e0e99f +Subproject commit a9f556b4435cd7217411219dea23760624266ef2