From f5faba432f1f2990c479b153c030a9043ef30e77 Mon Sep 17 00:00:00 2001 From: Carsten Teibes Date: Sun, 2 Jun 2024 14:11:14 +0200 Subject: [PATCH 01/20] Wii U: Bundle Icons and Splash screens --- CMakeLists.txt | 6 ++++-- resources/wiiu/icon.png | Bin 0 -> 9295 bytes resources/wiiu/splash-drc.png | Bin 0 -> 10757 bytes resources/wiiu/splash-tv.png | Bin 0 -> 4085 bytes 4 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 resources/wiiu/icon.png create mode 100644 resources/wiiu/splash-drc.png create mode 100644 resources/wiiu/splash-tv.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 69e1cdd57e..208374b91c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1257,9 +1257,11 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO wut_create_rpx(easyrpg-player) wut_create_wuhb(easyrpg-player NAME "EasyRPG Player ${PLAYER_VERSION_FULL}" - SHORT_NAME "Player" + SHORTNAME "EasyRPG Player" AUTHOR "EasyRPG Team" - ) # todo icon, splashs) + ICON resources/wiiu/icon.png + TVSPLASH resources/wiiu/splash-tv.png + DRCSPLASH resources/wiiu/splash-drc.png) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.rpx ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.wuhb DESTINATION . COMPONENT wiiu) diff --git a/resources/wiiu/icon.png b/resources/wiiu/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2300781f410ecedf95328ad5980c7260121588 GIT binary patch literal 9295 zcmV-VB(U3wP)4qf)p0scPfzN}VRJxQEYgw$2oL~4g0d)4A}PzJf+`&}L?8$*00LNGcY$5(VsqY|-O1Crx~iW4=rG+g9jZD3p!S_J zXJ)FaUsb*DyWhL-zWZKDSS${wWBoy?@;@bqHv+qW?MQ3@MuC1H2)OHCRWfm;-Ukg9 zVdb!Br2Z7J1k3>Efa3xV0sDYsWpxS*w<>C%Eb^aAO%tF3`1wN*1Mdai4NNt5H50(M z8gPq*XbBOjlk6n$6o~Hv-)bcZgb*M}O%R~6)o+*JqrlGrV`f3hq%vGDx#Dy=s{wiz z#MgkY0EcQ3!3qf)BY-58Tt))8Rf3NLzto5%Unf9y0;~sB06YTH7ZKv6W=Wt}y+Orp zD+PZP_yY<48o0U9{#e)a>&WMe&2FpH8A<>*0>6YLg^+jySg!4sNi8IRt?(7;W55?A zct0SoySgdxb0_MWb{+Xr0#s?gH6)OM+d#S>i6n5a5&LU|0D~a?8Sp0(L>jaD@+Z7b zfGP@5p9BCAkUo(6%|Rem@%$<(V3h!OC^p+)O7Ib>p&^*G?hzzFyH0@WU4T@p6{S*{ zzZKXDoB=MFHfRg?_Av10ip{pCaqufK6SVAg0@U;YB$MqbF_rfZW^yrv`YK?S06z=- zF|fmCYvcykTYd2laa{q-IDsa+1AqZwCol^fsYrqnA}A&;|Brz!0P6@~lAY2Tt1pgK zt}DPA0@%%pXk`*e1;2o;z{QG6U_k-y0R9}?*Tb$&{#z!yHaPJp!vP-7Tn zjRYHk!?k>ZS_Bvb{u0RZ9S6S}Af?A$UOSQL zApQ|gRlw_&^s>s_v1Jx7#44&o+sPp6^zYVHK+litUaIB;{0Az{>Q(gtDoB5az%RA- z(tg|SR2aUokHMRJaEG19O5-USr z?Z9jG?x|b>q>h1K3HY_8d(_9k4dI3@zFtXOOLP8(t7J3!y8CFW8VHjrU`91^f9@cc zc2=eUzXjZ7E>O`q@C%k!%km@{MsMz?cU!P2i?3H49vj``ep2%pvMH_ZeYIK%q*nB? zxv#DOPp+-$45evYH5H&U(qC#_l^R!)VQ6QB$Ob=}(K%0D7;x$3Sr*R4%KU-0s)1;1 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 literal 0 HcmV?d00001 diff --git a/resources/wiiu/splash-tv.png b/resources/wiiu/splash-tv.png new file mode 100644 index 0000000000000000000000000000000000000000..50a3a96f33c43014ae2d29f83fb793c478d91fb0 GIT binary patch literal 4085 zcmeAS@N?(olHy`uVBq!ia0y~yU#w#-&xa1u?mTH@GzYJRCCtR@mf!2fWCB}(~t{Wz2 zn0$`Q7CN^7IH&xqCzt=Q0ZmT&ewYPFaU=i~B8L~B6=Jbo>sVK*F->d;Gf zkdk4zXLFVfoWSHobnMV3ix0t|{?T!U<-+3XI-^68hO?tDO`7)SQgH9bGvDj$c6X)E zK6-A_w4OB2j!EhVfT4@Oe50%ent0lWp*dphbT^KglgsjSXTJHp_u1w5^XAv=o1e7* z?YnuRhB@ z{;j+Ekoe_Ejz52Yy7l?h;m5HJ>GyQX>?|tIlWYS+L;ad-r@QO7t-Q_P&&qJ8f(ckD z6J6v_*mH)(pyO&)X3K%;Ij^pr?W{Oicl_|lm2BJZm)WkL7Ap8)<*^+qif?SL)V8ry zl4kS{kkQNX+{>ROnel%J0UCR@QKR+eTfNnbo?ktilzy_q*5;lhXR2@o-E~^9MCch|YmR<|mi$6n#)%clV#kp_?BIxC%~Y`Tzga27`GJj$LwQq Date: Sun, 2 Jun 2024 15:26:04 +0200 Subject: [PATCH 02/20] CMakeLists.txt: Simplify Support bundling a game for Wii U --- CMakeLists.txt | 106 +++++++++++------------- CMakePresets.json | 4 - builds/cmake/CMakePresets.json.template | 4 - builds/cmake/gen-cmake-presets.py | 0 docs/BUILDING.md | 11 ++- 5 files changed, 52 insertions(+), 73 deletions(-) mode change 100644 => 100755 builds/cmake/gen-cmake-presets.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 208374b91c..dda4cb35c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -539,8 +539,22 @@ set_property(SOURCE src/version.cpp PROPERTY COMPILE_DEFINITIONS ) # Platform setup -set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1 libretro psvita 3ds switch wii amigaos4") -set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1 libretro psvita 3ds switch wii amigaos4) +if(NINTENDO_3DS) + set(PLAYER_TARGET_PLATFORM "3ds" CACHE STRING "Platform to compile for.") +elseif(NINTENDO_SWITCH) + set(PLAYER_TARGET_PLATFORM "switch" CACHE STRING "Platform to compile for.") +elseif(VITA) + set(PLAYER_TARGET_PLATFORM "psvita" CACHE STRING "Platform to compile for.") +elseif(NINTENDO_WII) + set(PLAYER_TARGET_PLATFORM "wii" CACHE STRING "Platform to compile for.") +elseif(NINTENDO_WIIU) + set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for.") +elseif(AMIGA) + set(PLAYER_TARGET_PLATFORM "SDL1" CACHE STRING "Platform to compile for.") +else() + set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1 libretro") + set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1 libretro) +endif() set(PLAYER_BUILD_EXECUTABLE ON) set(PLAYER_TEST_LIBRARIES ${PROJECT_NAME}) @@ -601,9 +615,6 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro") add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/builds/libretro) target_link_libraries(${PROJECT_NAME} retro_common) elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "3ds") - if(NOT NINTENDO_3DS) - message(FATAL_ERROR "Missing toolchain file! Use '-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/3DS.cmake' option.") - endif() target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=CtrUi PLAYER_NINTENDO) target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after devkitarm ships newer gcc # generate gfx assets @@ -634,9 +645,6 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "3ds") src/platform/3ds/ui.h) target_link_libraries(${PROJECT_NAME} 3ds-assets) elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "psvita") - if(NOT VITA) - message(FATAL_ERROR "Missing toolchain file! Use '-DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake' option.") - endif() include("$ENV{VITASDK}/share/vita.cmake" REQUIRED) target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=Psp2Ui) target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after vitasdk ships newer gcc @@ -649,9 +657,6 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "psvita") src/platform/psvita/ui.cpp src/platform/psvita/ui.h) elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "switch") - if(NOT NINTENDO_SWITCH) - message(FATAL_ERROR "Missing toolchain file! Use '-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Switch.cmake' option.") - endif() target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=NxUi PLAYER_NINTENDO) find_package(OpenGL CONFIG REQUIRED) find_library(GLAD glad REQUIRED) @@ -671,12 +676,7 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "switch") src/platform/switch/ui.h) target_link_libraries(${PROJECT_NAME} switch-assets) elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "wii") - if(NOT NINTENDO_WII) - message(FATAL_ERROR "Missing toolchain file! Use '-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Wii.cmake' option.") - endif() - find_package(SDL REQUIRED) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=1 PLAYER_NINTENDO) - target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR}) target_sources(${PROJECT_NAME} PRIVATE src/platform/wii/audio.cpp src/platform/wii/audio.h @@ -686,19 +686,7 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "wii") src/platform/sdl/axis.h src/platform/sdl/sdl_ui.cpp src/platform/sdl/sdl_ui.h) -elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "amigaos4") - if(NOT AMIGAOS4) - message(FATAL_ERROR "Missing toolchain file! Use '-DCMAKE_TOOLCHAIN_FILE=path/to/ppc-amigaos.cmake' option.") - endif() - find_package(SDL REQUIRED) - target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=1) - target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR}) - target_sources(${PROJECT_NAME} PRIVATE - src/platform/sdl/sdl_audio.cpp - src/platform/sdl/sdl_audio.h - src/platform/sdl/axis.h - src/platform/sdl/sdl_ui.cpp - src/platform/sdl/sdl_ui.h) + player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED) else() message(FATAL_ERROR "Invalid target platform") endif() @@ -710,13 +698,17 @@ if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|psvita|switch|wii)$" OR NINTENDO_WII set(PLAYER_ENABLE_TESTS OFF) option(PLAYER_VERSIONED_PACKAGES "Create zip packages with versioned name (for internal use)" ON) endif() -# Make romfs available -if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|switch)$") - option(PLAYER_ROMFS "Embedd a directory in the executable" OFF) - set(PLAYER_ROMFS_PATH "romfs" CACHE PATH "Directory to include in executable as romfs:/ path") - set(ROMFS_ARG "NO_ROMFS_IGNORE_ME") - if(PLAYER_ROMFS) - set(ROMFS_ARG "ROMFS") +# Make content available (romfs/wuhb bundle) +if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|switch)$" OR NINTENDO_WIIU) + option(PLAYER_BUNDLE "Embedd a directory in the executable" OFF) + set(PLAYER_BUNDLE_PATH "content" CACHE PATH "Directory to include in executable") + set(BUNDLE_ARG "_IGNORE_ME") + if(PLAYER_BUNDLE) + if(NINTENDO_WIIU) + set(BUNDLE_ARG "CONTENT") + else() + set(BUNDLE_ARG "ROMFS") + endif() endif() endif() @@ -914,21 +906,17 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1") set(PLAYER_AUDIO_BACKEND "SDL1" CACHE STRING "Audio system to use. Options: SDL1 OFF") set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 OFF) else() + # Assuming that all platforms not targeting SDL have only one audio backend set(PLAYER_AUDIO_BACKEND "Default" CACHE STRING "Audio system to use. Options: Default OFF") set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS Default OFF) - - if(${PLAYER_AUDIO_BACKEND} STREQUAL "Default") - # Assuming that all platforms not targeting SDL have only one audio backend - set(PLAYER_AUDIO_BACKEND ${PLAYER_TARGET_PLATFORM}) - endif() endif() # Configure Audio backends -if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL2|SDL1|libretro|psvita|3ds|switch|wii|amigaos4)$") +if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$") set(PLAYER_HAS_AUDIO ON) target_compile_definitions(${PROJECT_NAME} PUBLIC SUPPORT_AUDIO=1) - if(${PLAYER_AUDIO_BACKEND} STREQUAL "libretro") + if(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro") if (WIN32 OR UNIX OR APPLE) set(SUPPORT_NATIVE_MIDI ON) endif() @@ -983,7 +971,7 @@ CMAKE_DEPENDENT_OPTION(PLAYER_WITH_FLUIDLITE "Play MIDI audio with fluidlite" ON CMAKE_DEPENDENT_OPTION(PLAYER_WITH_XMP "Play MOD audio with libxmp" ON "PLAYER_HAS_AUDIO" OFF) CMAKE_DEPENDENT_OPTION(PLAYER_ENABLE_DRWAV "Play WAV audio with dr_wav (built-in). Unsupported files are played by libsndfile." ON "PLAYER_HAS_AUDIO" OFF) -if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL2|SDL1|libretro|psvita|3ds|switch|wii|amigaos4)$") +if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$") set(PLAYER_AUDIO_RESAMPLER "Auto" CACHE STRING "Audio resampler to use. Options: Auto speexdsp samplerate OFF") set_property(CACHE PLAYER_AUDIO_RESAMPLER PROPERTY STRINGS Auto speexdsp samplerate OFF) @@ -1099,7 +1087,7 @@ if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL2|SDL1|libretro|psvita|3ds|switch|wii|a endif() # Executable -if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL(1|2)$" AND NOT NINTENDO_WIIU) +if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL[12]$" AND NOT NINTENDO_WIIU) if(APPLE) set(EXE_NAME "EasyRPG-Player.app") set_source_files_properties(${${PROJECT_NAME}_BUNDLE_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") @@ -1215,7 +1203,7 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO ICON ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/icon.png) ctr_create_3dsx(easyrpg-player SMDH easyrpg-player.smdh - ${ROMFS_ARG} ${PLAYER_ROMFS_PATH}) + ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.3dsx resources/3ds/easyrpg-player.xml # consider removing, *hax² is mostly obsolete DESTINATION easyrpg-player COMPONENT 3ds) @@ -1231,14 +1219,13 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO nx_create_nro(easyrpg-player NACP easyrpg-player.nacp ICON "${PROJECT_SOURCE_DIR}/resources/switch/icon.jpg" - ${ROMFS_ARG} ${PLAYER_ROMFS_PATH}) + ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.nro DESTINATION easyrpg-player COMPONENT switch) elseif(NINTENDO_WII) add_executable(easyrpg-player src/platform/wii/main.cpp) target_link_libraries(easyrpg-player ${PROJECT_NAME} - ${SDL_LIBRARIES} -laesnd -lfat -lwiikeyboard) @@ -1261,7 +1248,8 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO AUTHOR "EasyRPG Team" ICON resources/wiiu/icon.png TVSPLASH resources/wiiu/splash-tv.png - DRCSPLASH resources/wiiu/splash-drc.png) + DRCSPLASH resources/wiiu/splash-drc.png + ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.rpx ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.wuhb DESTINATION . COMPONENT wiiu) @@ -1317,12 +1305,6 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO set(CPACK_ARCHIVE_DEBUG_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PLATFORM}-debug") set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF) # we do this manually include(CPack) -elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "amigaos4") - add_executable(easyrpg-player "src/platform/sdl/main.cpp") - target_link_libraries(easyrpg-player - ${PROJECT_NAME} - ${SDL_LIBRARIES}) - # FIXME: packaging? else() # library if(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro") add_library(easyrpg_libretro @@ -1495,9 +1477,15 @@ endif() # Print summary message(STATUS "") -message(STATUS "Target system: ${PLAYER_TARGET_PLATFORM}") -if(PLAYER_ROMFS) - message(STATUS "RomFS: Embedding directory \"${PLAYER_ROMFS_PATH}\"") +set(TARGET_STATUS "${PLAYER_TARGET_PLATFORM}") +if(NINTENDO_WIIU) + set(TARGET_STATUS "Wii U (SDL2)") +elseif(AMIGA) + set(TARGET_STATUS "Amiga (SDL1)") +endif() +message(STATUS "Target system: ${TARGET_STATUS}") +if(PLAYER_BUNDLE) + message(STATUS "Embedding directory \"${PLAYER_BUNDLE_PATH}\"") endif() message(STATUS "") @@ -1507,7 +1495,7 @@ if(PLAYER_BUILD_LIBLCF) endif() message(STATUS "Audio backend: ${PLAYER_AUDIO_BACKEND}") -if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL2|SDL1|libretro|psvita|3ds|switch|wii)$") +if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$") message(STATUS "") set(WAV_LIBS) diff --git a/CMakePresets.json b/CMakePresets.json index 2f2d4e5daa..53ff62878a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -417,7 +417,6 @@ "name": "3ds-parent", "toolchainFile": "$env{DEVKITPRO}/cmake/3DS.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "3ds", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/3ds" }, "inherits": "dkp-user", @@ -478,7 +477,6 @@ "name": "switch-parent", "toolchainFile": "$env{DEVKITPRO}/cmake/Switch.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "switch", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/switch" }, "inherits": "dkp-user", @@ -539,7 +537,6 @@ "name": "wii-parent", "toolchainFile": "$env{DEVKITPRO}/cmake/Wii.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "wii", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/wii" }, "inherits": "dkp-user", @@ -660,7 +657,6 @@ "name": "psvita-parent", "toolchainFile": "$env{EASYRPG_BUILDSCRIPTS}/vita/vitasdk/share/vita.toolchain.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "psvita", "BUILD_SHARED_LIBS": "OFF" }, "hidden": true, diff --git a/builds/cmake/CMakePresets.json.template b/builds/cmake/CMakePresets.json.template index 15a21b7eaf..c611d25086 100644 --- a/builds/cmake/CMakePresets.json.template +++ b/builds/cmake/CMakePresets.json.template @@ -77,7 +77,6 @@ "displayName": "Nintendo 3DS", "toolchainFile": "$env{DEVKITPRO}/cmake/3DS.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "3ds", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/3ds" }, "inherits": "dkp-user" @@ -87,7 +86,6 @@ "displayName": "Nintendo Switch", "toolchainFile": "$env{DEVKITPRO}/cmake/Switch.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "switch", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/switch" }, "inherits": "dkp-user" @@ -97,7 +95,6 @@ "displayName": "Nintendo Wii", "toolchainFile": "$env{DEVKITPRO}/cmake/Wii.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "wii", "PLAYER_PREFIX_PATH_APPEND": "$env{EASYRPG_BUILDSCRIPTS}/wii" }, "inherits": "dkp-user" @@ -116,7 +113,6 @@ "displayName": "PlayStation Vita", "toolchainFile": "$env{EASYRPG_BUILDSCRIPTS}/vita/vitasdk/share/vita.toolchain.cmake", "cacheVariables": { - "PLAYER_TARGET_PLATFORM": "psvita", "BUILD_SHARED_LIBS": "OFF" } } diff --git a/builds/cmake/gen-cmake-presets.py b/builds/cmake/gen-cmake-presets.py old mode 100644 new mode 100755 diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 83856138b6..567acdd7f8 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -94,13 +94,13 @@ The unsigned APK is stored in: app/build/outputs/apk/release/app-release-unsigned.apk -## Nintendo and Sony Homebrew ports (Wii, 3DS, Switch, PSVita/PSTV) +## Nintendo and Sony Homebrew ports (Wii (U), 3DS, Switch, PSVita/PSTV) This is based on the CMake method. Building requirements: -- devkitPPC for Wii +- devkitPPC for Wii and Wii U - devkitARM for 3DS - devkitA64 for Switch - vitasdk for PSVita/PSTV @@ -110,13 +110,12 @@ and vitasdk: https://vitasdk.org Invoke CMake with these additional parameters: - -DCMAKE_TOOLCHAIN_FILE=/cmake/3DS|Switch|Wii.cmake + -DCMAKE_TOOLCHAIN_FILE=/cmake/3DS|Switch|Wii|WiiU.cmake (or /share/vita.toolchain.cmake) - -DPLAYER_TARGET_PLATFORM=3ds|switch|wii|psvita -Switch and 3DS support romfs game loading, use these parameters: +Switch, Wii U and 3DS support shipping games, use these parameters: - -DPLAYER_ROMFS=ON -DPLAYER_ROMFS_PATH=path/to/myGame + -DPLAYER_BUNDLE=ON -DPLAYER_BUNDLE_PATH=path/to/myGame [buildscripts]: https://github.com/EasyRPG/buildscripts From cb3d941153c7fc5cf65276fefb60f04827363fe5 Mon Sep 17 00:00:00 2001 From: Carsten Teibes Date: Mon, 3 Jun 2024 01:38:49 +0200 Subject: [PATCH 03/20] Wii U: Handle main loop Support shipped games Better CWD handling --- CMakeLists.txt | 2 +- src/platform/sdl/main.cpp | 17 ++--- src/platform/sdl/sdl2_ui.cpp | 18 ++--- src/platform/wiiu/main.cpp | 136 +++++++++++++++++++++++++++++++++++ 4 files changed, 146 insertions(+), 27 deletions(-) create mode 100644 src/platform/wiiu/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index dda4cb35c6..a0594bde86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1239,7 +1239,7 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO ${CMAKE_CURRENT_BINARY_DIR}/resources/wii/meta.xml DESTINATION easyrpg-player COMPONENT wii) elseif(NINTENDO_WIIU) - add_executable(easyrpg-player src/platform/sdl/main.cpp) + add_executable(easyrpg-player src/platform/wiiu/main.cpp) target_link_libraries(easyrpg-player ${PROJECT_NAME}) wut_create_rpx(easyrpg-player) wut_create_wuhb(easyrpg-player diff --git a/src/platform/sdl/main.cpp b/src/platform/sdl/main.cpp index 9924e4746c..aeffa5b805 100644 --- a/src/platform/sdl/main.cpp +++ b/src/platform/sdl/main.cpp @@ -31,17 +31,14 @@ #elif defined(__ANDROID__) # include # include "platform/android/android.h" -#elif defined(__WIIU__) -# include #endif -#if defined(__ANDROID__) || defined(__WIIU__) +#ifdef __ANDROID__ static void LogCallback(LogLevel lvl, std::string const& msg, LogCallbackUserData /* userdata */) { -# if defined(__ANDROID__) -# ifdef NDEBUG +# ifdef NDEBUG // docs say debugging logs should be disabled for release builds if (lvl == LogLevel::Debug || lvl == LogLevel::Info) return; -# endif +# endif int prio = (lvl == LogLevel::Error) ? ANDROID_LOG_ERROR : (lvl == LogLevel::Warning) ? ANDROID_LOG_WARN : @@ -49,12 +46,6 @@ static void LogCallback(LogLevel lvl, std::string const& msg, LogCallbackUserDat ANDROID_LOG_INFO; __android_log_write(prio, GAME_TITLE, msg.c_str()); -# elif defined(__WIIU__) - std::string m = std::string("[" GAME_TITLE "] ") + - Output::LogLevelToString(lvl) + ": " + msg; - - OSReport("%s\n", m.c_str()); -# endif } #endif @@ -80,7 +71,7 @@ extern "C" int main(int argc, char* argv[]) { args.assign(argv, argv + argc); #endif -#if defined(__WIIU__) || defined(__ANDROID__) +#ifdef __ANDROID__ Output::SetLogCallback(LogCallback); #endif diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index 416c575958..fe21e034a6 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -155,9 +155,6 @@ Sdl2Ui::Sdl2Ui(long width, long height, const Game_Config& cfg) : BaseUi(cfg) // Only handle keyboard events when the canvas has focus SDL_SetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT, "#canvas"); #endif -#ifdef __WIIU__ - //WHBProcInit(); -#endif if (SDL_Init(SDL_INIT_VIDEO) < 0) { Output::Error("Couldn't initialize SDL.\n{}\n", SDL_GetError()); @@ -210,10 +207,6 @@ Sdl2Ui::~Sdl2Ui() { SDL_DestroyWindow(sdl_window); } SDL_Quit(); - -#ifdef __WIIU__ - //WHBProcShutdown(); -#endif } bool Sdl2Ui::vChangeDisplaySurfaceResolution(int new_width, int new_height) { @@ -527,6 +520,11 @@ void Sdl2Ui::ToggleZoom() { void Sdl2Ui::ProcessEvents() { SDL_Event evnt; +#ifdef __WIIU__ + if (!WHBProcIsRunning()) + Player::Exit(); +#endif + #if defined(USE_MOUSE) && defined(SUPPORT_MOUSE) // Reset Mouse scroll keys[Input::Keys::MOUSE_SCROLLUP] = false; @@ -1265,12 +1263,6 @@ void Sdl2Ui::vGetConfig(Game_ConfigVideo& cfg) const { cfg.vsync.SetOptionVisible(false); cfg.pause_when_focus_lost.Lock(false); cfg.pause_when_focus_lost.SetOptionVisible(false); -#elif defined(__WIIU__) - // FIXME: Some options below may crash, better disable for now - cfg.fullscreen.SetOptionVisible(false); - cfg.window_zoom.SetOptionVisible(false); - cfg.vsync.SetOptionVisible(false); - cfg.pause_when_focus_lost.SetOptionVisible(false); #endif } diff --git a/src/platform/wiiu/main.cpp b/src/platform/wiiu/main.cpp new file mode 100644 index 0000000000..e67a7fb684 --- /dev/null +++ b/src/platform/wiiu/main.cpp @@ -0,0 +1,136 @@ +/* + * This file is part of EasyRPG Player. + * + * EasyRPG Player is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * EasyRPG Player is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with EasyRPG Player. If not, see . + */ + +#include +#include +#include +#include +#include +#include "player.h" +#include "utils.h" +#include "output.h" + +#ifdef USE_SDL // SDL might wrap main() +# include +#endif +#include +#include +#include + +using namespace std::chrono_literals; + +#ifdef NDEBUG +// stubbed +static void initLogging() {} +static void deinitLogging() {} +#else +#include +#include +#include +#include + +static bool moduleLogInit = false; +static bool cafeLogInit = false; +static bool udpLogInit = false; + +static void initLogging() { + if (!(moduleLogInit = WHBLogModuleInit())) { + cafeLogInit = WHBLogCafeInit(); + udpLogInit = WHBLogUdpInit(); + } +} + +static void deinitLogging() { + if (moduleLogInit) { + WHBLogModuleDeinit(); + moduleLogInit = false; + } + if (cafeLogInit) { + WHBLogCafeDeinit(); + cafeLogInit = false; + } + if (udpLogInit) { + WHBLogUdpDeinit(); + udpLogInit = false; + } +} +#endif + +static void LogCallback(LogLevel lvl, std::string const& msg, LogCallbackUserData /* userdata */) { + std::string m = std::string("[" GAME_TITLE "] ") + + Output::LogLevelToString(lvl) + ": " + msg; + +#ifdef NDEBUG + OSReport("%s\n", m.c_str()); +#else + WHBLogPrintf("%s\n", m.c_str()); +#endif +} + +/** + * If the main function ever needs to change, be sure to update the `main()` + * functions of the other platforms as well. + */ +extern "C" int main(int argc, char* argv[]) { + std::vector args{argv, argv + argc}; + + initLogging(); + WHBProcInit(); + + Output::SetLogCallback(LogCallback); + + const char *default_dir = "fs:/vol/external01/wiiu/apps/easyrpg-player"; + + // Check if wuhb has some files inside or not + if(::access("fs:/vol/content/RPG_RT.lmt", F_OK) == 0) { + Output::Debug("Running packaged game from wuhb."); + std::string cafe_dir = "fs:/vol/content"; + + args.push_back("--project-path"); + args.push_back(cafe_dir); + + //args.push_back("--save-path"); + //args.push_back(cafe_dir); + } else if(::access(default_dir, F_OK) == 0) { + chdir(default_dir); + } else { + // fall back to current working directory + char working_dir[256]; + getcwd(working_dir, 255); + args.push_back("--project-path"); + args.push_back(working_dir); + } + + Player::Init(std::move(args)); + Player::Run(); + + // FIXME: somehow the wiiu sdl2 port does not clean up procui + // without launching the menu manually +#if 1 + SYSLaunchMenu(); + while(WHBProcIsRunning()) { + Output::Debug("Waiting for shutdown..."); + Game_Clock::SleepFor(1s); + } +#else + WHBProcShutdown(); +#endif + + deinitLogging(); + + return EXIT_SUCCESS; +} From 9eef79473825f48cf692e230f646da8fb8b934ab Mon Sep 17 00:00:00 2001 From: Carsten Teibes Date: Mon, 3 Jun 2024 01:39:49 +0200 Subject: [PATCH 04/20] SDL: use system format for audio warn if unsupported --- src/platform/sdl/sdl_audio.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/platform/sdl/sdl_audio.cpp b/src/platform/sdl/sdl_audio.cpp index 063fcfc498..16d0a4ecfa 100644 --- a/src/platform/sdl/sdl_audio.cpp +++ b/src/platform/sdl/sdl_audio.cpp @@ -64,6 +64,7 @@ AudioDecoder::Format sdl_format_to_format(Uint16 format) { return AudioDecoder::Format::F32; #endif default: + Output::Warning("Couldn't find GenericAudio format for {:#x}", format); assert(false); } @@ -96,7 +97,7 @@ SdlAudio::SdlAudio(const Game_ConfigAudio& cfg) : SDL_AudioSpec want = {}; SDL_AudioSpec have = {}; want.freq = frequency; - want.format = AUDIO_S16; + want.format = AUDIO_S16SYS; want.channels = 2; want.samples = 2048; want.callback = sdl_audio_callback; From e7c5592858f3f6157494f6a644d83145d36750f5 Mon Sep 17 00:00:00 2001 From: Carsten Teibes Date: Mon, 3 Jun 2024 01:40:57 +0200 Subject: [PATCH 05/20] Wii U: use full paths for consistency --- src/decoder_wildmidi.cpp | 7 ++++++- src/filefinder_rtp.cpp | 5 +++-- src/game_config.cpp | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/decoder_wildmidi.cpp b/src/decoder_wildmidi.cpp index a4d00cd7c8..f9555dcdf7 100644 --- a/src/decoder_wildmidi.cpp +++ b/src/decoder_wildmidi.cpp @@ -142,9 +142,14 @@ bool WildMidiDecoder::Initialize(std::string& status_message) { } #elif defined(__WIIU__) // preferred SD card directory - config_file = "/vol/external01/data/easyrpg-player/wildmidi.cfg"; + config_file = "fs:/vol/external01/wiiu/apps/easyrpg-player/wildmidi.cfg"; found = FileFinder::Root().Exists(config_file); + // shipped + if (!found) { + config_file = "fs:/vol/content/wildmidi.cfg"; + found = FileFinder::Root().Exists(config_file); + } // Current directory if (!found) { config_file = "wildmidi.cfg"; diff --git a/src/filefinder_rtp.cpp b/src/filefinder_rtp.cpp index 7753a527c9..eb2b273e81 100644 --- a/src/filefinder_rtp.cpp +++ b/src/filefinder_rtp.cpp @@ -52,8 +52,9 @@ FileFinder_RTP::FileFinder_RTP(bool no_rtp, bool no_rtp_warnings, std::string rt AddPath("sd:/data/rtp/" + version_str); AddPath("usb:/data/rtp/" + version_str); #elif defined(__WIIU__) - AddPath("./rtp/" + version_str); - AddPath("/data/easyrpg-player/rtp/" + version_str); + AddPath("fs:/vol/content/rtp/" + version_str); // shipped + AddPath("rtp/" + version_str); + AddPath("fs:/vol/external01/wiiu/data/easyrpg-player/rtp/" + version_str); #elif defined(__SWITCH__) AddPath("./rtp/" + version_str); AddPath("/switch/easyrpg-player/rtp/" + version_str); diff --git a/src/game_config.cpp b/src/game_config.cpp index f91f6c7203..2b31ac308e 100644 --- a/src/game_config.cpp +++ b/src/game_config.cpp @@ -124,7 +124,7 @@ FilesystemView Game_Config::GetGlobalConfigFilesystem() { #ifdef __wii__ path = "/data/easyrpg-player"; #elif defined(__WIIU__) - path = "/vol/external01/data/easyrpg-player"; // temp + path = "fs:/vol/external01/wiiu/apps/easyrpg-player"; #elif defined(__SWITCH__) path = "/switch/easyrpg-player"; #elif defined(__3DS__) From a92515999b954d7d2d42eca3126519031c5ec6db Mon Sep 17 00:00:00 2001 From: Ghabry Date: Mon, 3 Jun 2024 19:44:21 +0200 Subject: [PATCH 06/20] Wii U: Manually handle ProcUI without the WHB wrapper The ProcUI API is very unstable and querying it crashes when a shutdown was requested. For more control use it directly. --- CMakeLists.txt | 1 + src/platform/sdl/sdl2_ui.cpp | 8 ------ src/platform/wiiu/main.cpp | 53 ++++++++++++++++++++++++++---------- src/platform/wiiu/main.h | 19 +++++++++++++ src/player.cpp | 8 ++++++ 5 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 src/platform/wiiu/main.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a0594bde86..7c7284616e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -593,6 +593,7 @@ if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2") if(NINTENDO_WIIU) target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO) target_sources(${PROJECT_NAME} PRIVATE + src/platform/wiiu/main.h src/platform/wiiu/input_buttons.cpp) endif() diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index fe21e034a6..8e2509b135 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with EasyRPG Player. If not, see . */ - #include #include #include @@ -31,8 +30,6 @@ # include #elif defined(EMSCRIPTEN) # include -#elif defined(__WIIU__) -# include #endif #include "icon.h" @@ -520,11 +517,6 @@ void Sdl2Ui::ToggleZoom() { void Sdl2Ui::ProcessEvents() { SDL_Event evnt; -#ifdef __WIIU__ - if (!WHBProcIsRunning()) - Player::Exit(); -#endif - #if defined(USE_MOUSE) && defined(SUPPORT_MOUSE) // Reset Mouse scroll keys[Input::Keys::MOUSE_SCROLLUP] = false; diff --git a/src/platform/wiiu/main.cpp b/src/platform/wiiu/main.cpp index e67a7fb684..16406ec4a7 100644 --- a/src/platform/wiiu/main.cpp +++ b/src/platform/wiiu/main.cpp @@ -27,8 +27,10 @@ #ifdef USE_SDL // SDL might wrap main() # include #endif + #include -#include +#include +#include #include using namespace std::chrono_literals; @@ -46,6 +48,7 @@ static void deinitLogging() {} static bool moduleLogInit = false; static bool cafeLogInit = false; static bool udpLogInit = false; +static bool prodUiExited = false; static void initLogging() { if (!(moduleLogInit = WHBLogModuleInit())) { @@ -81,6 +84,38 @@ static void LogCallback(LogLevel lvl, std::string const& msg, LogCallbackUserDat #endif } +static uint32_t SaveCallback(void*) { + OSSavesDone_ReadyToRelease(); + return 0; +} + +bool WiiU_ProcessProcUI() { + ProcUIStatus status = ProcUIProcessMessages(TRUE); + if (status == PROCUI_STATUS_EXITING) { + prodUiExited = true; + return false; + } else if (status == PROCUI_STATUS_RELEASE_FOREGROUND) { + ProcUIDrawDoneRelease(); + } + return true; +} + +void WiiU_Exit() { + Output::Debug("Shutdown Reason: {}", prodUiExited ? "HOME Menu" : "Player Exit"); + + if (!prodUiExited) { + // Exit was not through the Home Menu + // Manually launch the system menu + SYSLaunchMenu(); + Game_Clock::SleepFor(std::chrono::milliseconds(10)); + while (WiiU_ProcessProcUI()) {} + } + + ProcUIShutdown(); + + deinitLogging(); +} + /** * If the main function ever needs to change, be sure to update the `main()` * functions of the other platforms as well. @@ -89,7 +124,7 @@ extern "C" int main(int argc, char* argv[]) { std::vector args{argv, argv + argc}; initLogging(); - WHBProcInit(); + ProcUIInitEx(SaveCallback, nullptr); Output::SetLogCallback(LogCallback); @@ -118,19 +153,7 @@ extern "C" int main(int argc, char* argv[]) { Player::Init(std::move(args)); Player::Run(); - // FIXME: somehow the wiiu sdl2 port does not clean up procui - // without launching the menu manually -#if 1 - SYSLaunchMenu(); - while(WHBProcIsRunning()) { - Output::Debug("Waiting for shutdown..."); - Game_Clock::SleepFor(1s); - } -#else - WHBProcShutdown(); -#endif - - deinitLogging(); + WiiU_Exit(); return EXIT_SUCCESS; } diff --git a/src/platform/wiiu/main.h b/src/platform/wiiu/main.h new file mode 100644 index 0000000000..16f91bb38c --- /dev/null +++ b/src/platform/wiiu/main.h @@ -0,0 +1,19 @@ +/* + * This file is part of EasyRPG Player. + * + * EasyRPG Player is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * EasyRPG Player is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with EasyRPG Player. If not, see . + */ + +bool WiiU_ProcessProcUI(); +void WiiU_Exit(); diff --git a/src/player.cpp b/src/player.cpp index ae4120e39a..573fd15e0d 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -31,6 +31,8 @@ # include #elif defined(EMSCRIPTEN) # include +#elif defined(__WIIU__) +# include "platform/wiiu/main.h" #endif #include "async_handler.h" @@ -216,6 +218,12 @@ void Player::Run() { // libretro invokes the MainLoop through a retro_run-callback #else while (Transition::instance().IsActive() || (Scene::instance && Scene::instance->type != Scene::Null)) { +#if defined(__WIIU__) + if (!WiiU_ProcessProcUI()) { + Player::Exit(); + return; + } +#endif MainLoop(); } #endif From a2aa44e377cee5c7733f3d706f020d2509524d0d Mon Sep 17 00:00:00 2001 From: Ghabry Date: Mon, 3 Jun 2024 19:45:02 +0200 Subject: [PATCH 07/20] Wii U: Fix MakeDirectory logic Consider "/vol" a valid path --- src/platform.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/platform.cpp b/src/platform.cpp index ea799a96f7..0106502673 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -157,6 +157,13 @@ bool Platform::File::MakeDirectory(bool follow_symlinks) const { } } +#if defined(__WIIU__) + if (cur_path == "fs:/vol" || cur_path == "/vol") { + // /vol is part of the path but checking for existance fails + continue; + } +#endif + File cf(cur_path); if (cf.IsDirectory(follow_symlinks)) { continue; From bcc1ce4544d026dfd7f24eb7dad4419b4aae39da Mon Sep 17 00:00:00 2001 From: Ghabry Date: Mon, 3 Jun 2024 20:06:59 +0200 Subject: [PATCH 08/20] Wii U: Disable settings that do not work --- src/platform/sdl/sdl2_ui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index 8e2509b135..f89b5a54b8 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -1255,6 +1255,9 @@ void Sdl2Ui::vGetConfig(Game_ConfigVideo& cfg) const { cfg.vsync.SetOptionVisible(false); cfg.pause_when_focus_lost.Lock(false); cfg.pause_when_focus_lost.SetOptionVisible(false); +#elif defined(__WIIU__) + // Only makes the screen flicker + cfg.fullscreen.SetOptionVisible(false); #endif } From c409653a3ef77d7a4e45e9d8125064b8e56ffd3a Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 4 Jun 2024 19:04:29 +0200 Subject: [PATCH 09/20] ZipFS: Replace the scan backward for determining if it is a ZIP with a single read Was the only agressive use of "end" in our code. --- src/filesystem_zip.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/filesystem_zip.cpp b/src/filesystem_zip.cpp index 68e5935100..eee40b0e36 100644 --- a/src/filesystem_zip.cpp +++ b/src/filesystem_zip.cpp @@ -30,8 +30,8 @@ #include #include -constexpr uint32_t end_of_central_directory = 0x06054b50; -constexpr int32_t end_of_central_directory_size = 22; +constexpr char end_of_central_directory[] = "\x50\x4b\x05\x06"; +constexpr int32_t end_of_central_directory_size = 18; constexpr uint32_t central_directory_entry = 0x02014b50; constexpr uint32_t local_header = 0x04034b50; @@ -212,23 +212,31 @@ bool ZipFilesystem::FindCentralDirectory(std::istream& zipfile, uint32_t& offset bool found = false; // seek to the first position where the end_of_central_directory Signature may occur - zipfile.seekg(-end_of_central_directory_size, std::ios_base::end); + zipfile.seekg(-end_of_central_directory_size - UINT16_MAX, std::ios_base::end); + zipfile.clear(); // The only variable length field in the end of central directory is the comment which // has a maximum length of UINT16_MAX - so if we seek longer, this is no zip file - for (size_t i = 0; i < UINT16_MAX && zipfile.good() && !found; i++) { - zipfile.read(reinterpret_cast(&magic), sizeof(magic)); - Utils::SwapByteOrder(magic); // Take care of big endian systems - if (magic == end_of_central_directory) { + std::vector items(UINT16_MAX); + zipfile.read(items.data(), items.size()); + zipfile.clear(); + + items.resize(zipfile.gcount()); + if (items.size() < sizeof(magic)) { + return false; + } + + int i = static_cast(items.size()) - sizeof(magic); + // The data is read once and then scanned backwards in memory (faster) + for (; i >= 0 && !found; --i) { + if (!memcmp(items.data() + i, end_of_central_directory, 4)) { found = true; - } - else { - // if not yet found the magic number step one byte back in the file - zipfile.seekg(-(static_cast(sizeof(magic)) + 1), std::ios_base::cur); + break; } } if (found) { + zipfile.seekg(-(static_cast(items.size()) - i - 4), std::ios_base::cur); // Move right after the magic zipfile.seekg(6, std::ios_base::cur); // Jump over multiarchive related fields zipfile.read(reinterpret_cast(&num_entries), sizeof(uint16_t)); Utils::SwapByteOrder(num_entries); From a2055d5081032709057bf55df9b26e366fcc5e74 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 4 Jun 2024 19:06:00 +0200 Subject: [PATCH 10/20] Add a custom buffered filebuf that uses a file descriptor Implemented for the WiiU because IO through std::filebuf appears to be unbuffered. But can maybe help on other platforms. Can be toggled by setting USE_CUSTOM_FILE_READBUF to the prefered buffer size. --- src/filesystem_native.cpp | 20 ++++++++- src/filesystem_stream.cpp | 86 +++++++++++++++++++++++++++++++++++++++ src/filesystem_stream.h | 24 +++++++++++ src/system.h | 1 + 4 files changed, 130 insertions(+), 1 deletion(-) diff --git a/src/filesystem_native.cpp b/src/filesystem_native.cpp index b3969f3b2c..1ae415fcdf 100644 --- a/src/filesystem_native.cpp +++ b/src/filesystem_native.cpp @@ -20,14 +20,21 @@ #include #include #include +#include #include #include #include +#include "filesystem_stream.h" #include "system.h" #include "output.h" #include "platform.h" +#ifdef USE_CUSTOM_FILE_READBUF +# include +# include +#endif + NativeFilesystem::NativeFilesystem(std::string base_path, FilesystemView parent_fs) : Filesystem(std::move(base_path), parent_fs) { } @@ -48,7 +55,17 @@ int64_t NativeFilesystem::GetFilesize(StringView path) const { } std::streambuf* NativeFilesystem::CreateInputStreambuffer(StringView path, std::ios_base::openmode mode) const { - auto* buf = new std::filebuf(); +#ifdef USE_CUSTOM_FILE_READBUF + (void)mode; + int fd = open(ToString(path).c_str(), O_RDONLY); + if (fd < 0) { + return nullptr; + } + + return new Filesystem_Stream::FdStreamBuf(fd); +#else + auto buf = new std::filebuf(); + buf->open( #ifdef _MSC_VER Utils::ToWideString(path), @@ -63,6 +80,7 @@ std::streambuf* NativeFilesystem::CreateInputStreambuffer(StringView path, std:: } return buf; +#endif } std::streambuf* NativeFilesystem::CreateOutputStreambuffer(StringView path, std::ios_base::openmode mode) const { diff --git a/src/filesystem_stream.cpp b/src/filesystem_stream.cpp index cadf97d4a4..5d20a59249 100644 --- a/src/filesystem_stream.cpp +++ b/src/filesystem_stream.cpp @@ -19,6 +19,10 @@ #include +#ifdef USE_CUSTOM_FILE_READBUF +# include +#endif + Filesystem_Stream::InputStream::InputStream(std::streambuf* sb, std::string name) : std::istream(sb), name(std::move(name)) {} @@ -122,3 +126,85 @@ Filesystem_Stream::InputMemoryStreamBuf::InputMemoryStreamBuf(std::vector 0) { + auto dist = std::distance(gptr(), gptr() + offset); + if (gptr() + offset > egptr()) { + // Not cached: Outside of the buffer: Reposition the stream + file_offset = lseek(fd, dist - bytes_remaining(), SEEK_CUR); + clear_buffer(); + } else { + setg(buffer.begin(), gptr() + dist, egptr()); + } + } + return file_offset - bytes_remaining(); + } else { + // Not cached: Seek to end + clear_buffer(); + file_offset = lseek(fd, offset, SEEK_END); + + if (file_offset < 0) { + file_offset = 0; + return -1; + } + + return file_offset; + } + + assert(false); +} + +std::streambuf::pos_type Filesystem_Stream::FdStreamBuf::seekpos(std::streambuf::pos_type pos, std::ios_base::openmode mode) { + return seekoff(pos, std::ios_base::beg, mode); +} + +void Filesystem_Stream::FdStreamBuf::clear_buffer() { + setg(buffer.begin(), buffer.end(), buffer.end()); +} + +ssize_t Filesystem_Stream::FdStreamBuf::bytes_remaining() const { + return egptr() - gptr(); +} + +#endif diff --git a/src/filesystem_stream.h b/src/filesystem_stream.h index 4a0d76bc7d..2114f93817 100644 --- a/src/filesystem_stream.h +++ b/src/filesystem_stream.h @@ -24,6 +24,7 @@ #include #include "filesystem.h" #include "utils.h" +#include "system.h" namespace Filesystem_Stream { class InputStream final : public std::istream { @@ -96,6 +97,29 @@ namespace Filesystem_Stream { std::vector buffer; }; +#ifdef USE_CUSTOM_FILE_READBUF + class FdStreamBuf : public std::streambuf { + public: + FdStreamBuf(int fd); + FdStreamBuf(FdStreamBuf const& other) = delete; + FdStreamBuf const& operator=(FdStreamBuf const& other) = delete; + ~FdStreamBuf(); + + protected: + int_type underflow(); + std::streambuf::pos_type seekoff(std::streambuf::off_type offset, std::ios_base::seekdir dir, std::ios_base::openmode mode); + std::streambuf::pos_type seekpos(std::streambuf::pos_type pos, std::ios_base::openmode); + + private: + void clear_buffer(); + ssize_t bytes_remaining() const; + + int fd; + off_t file_offset = 0; + std::array buffer; + }; +#endif + static constexpr std::ios_base::seekdir CSeekdirToCppSeekdir(int origin); static constexpr int CppSeekdirToCSeekdir(std::ios_base::seekdir origin); diff --git a/src/system.h b/src/system.h index c2f627d2c7..3c0c29181a 100644 --- a/src/system.h +++ b/src/system.h @@ -71,6 +71,7 @@ # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS # define SUPPORT_TOUCH +# define USE_CUSTOM_FILE_READBUF 16 * 1024 #elif defined(_WIN32) # define SUPPORT_ZOOM # define SUPPORT_MOUSE From e49777df492801aa6569606ce2013ea901c3dade Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 4 Jun 2024 20:53:37 +0200 Subject: [PATCH 11/20] Wii U: Put wildmidi config and config.ini in "data" With the upcoming audiocfg branch it will create "Soundfont" and "Font" folders on startup. Looks ugly when in the game directory as they are shown. --- src/decoder_wildmidi.cpp | 2 +- src/game_config.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/decoder_wildmidi.cpp b/src/decoder_wildmidi.cpp index f9555dcdf7..447661a8a8 100644 --- a/src/decoder_wildmidi.cpp +++ b/src/decoder_wildmidi.cpp @@ -142,7 +142,7 @@ bool WildMidiDecoder::Initialize(std::string& status_message) { } #elif defined(__WIIU__) // preferred SD card directory - config_file = "fs:/vol/external01/wiiu/apps/easyrpg-player/wildmidi.cfg"; + config_file = "fs:/vol/external01/wiiu/data/easyrpg-player/wildmidi.cfg"; found = FileFinder::Root().Exists(config_file); // shipped diff --git a/src/game_config.cpp b/src/game_config.cpp index 2b31ac308e..d9fbcd3355 100644 --- a/src/game_config.cpp +++ b/src/game_config.cpp @@ -124,7 +124,7 @@ FilesystemView Game_Config::GetGlobalConfigFilesystem() { #ifdef __wii__ path = "/data/easyrpg-player"; #elif defined(__WIIU__) - path = "fs:/vol/external01/wiiu/apps/easyrpg-player"; + path = "fs:/vol/external01/wiiu/data/easyrpg-player"; #elif defined(__SWITCH__) path = "/switch/easyrpg-player"; #elif defined(__3DS__) From f204d6d3cd0f990c27291a5a71e2e047e1798d9f Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 4 Jun 2024 21:01:31 +0200 Subject: [PATCH 12/20] Wii U: Update assets Thanks @jetrotal --- resources/wiiu/icon.png | Bin 9295 -> 4087 bytes resources/wiiu/splash-drc.png | Bin 10757 -> 147110 bytes resources/wiiu/splash-tv.png | Bin 4085 -> 25796 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/wiiu/icon.png b/resources/wiiu/icon.png index 9e2300781f410ecedf95328ad5980c7260121588..704aa1947213ca1fb3febc9a3c0f2c6a3b197e3b 100644 GIT binary patch literal 4087 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 literal 9295 zcmV-VB(U3wP)4qf)p0scPfzN}VRJxQEYgw$2oL~4g0d)4A}PzJf+`&}L?8$*00LNGcY$5(VsqY|-O1Crx~iW4=rG+g9jZD3p!S_J zXJ)FaUsb*DyWhL-zWZKDSS${wWBoy?@;@bqHv+qW?MQ3@MuC1H2)OHCRWfm;-Ukg9 zVdb!Br2Z7J1k3>Efa3xV0sDYsWpxS*w<>C%Eb^aAO%tF3`1wN*1Mdai4NNt5H50(M z8gPq*XbBOjlk6n$6o~Hv-)bcZgb*M}O%R~6)o+*JqrlGrV`f3hq%vGDx#Dy=s{wiz z#MgkY0EcQ3!3qf)BY-58Tt))8Rf3NLzto5%Unf9y0;~sB06YTH7ZKv6W=Wt}y+Orp zD+PZP_yY<48o0U9{#e)a>&WMe&2FpH8A<>*0>6YLg^+jySg!4sNi8IRt?(7;W55?A zct0SoySgdxb0_MWb{+Xr0#s?gH6)OM+d#S>i6n5a5&LU|0D~a?8Sp0(L>jaD@+Z7b zfGP@5p9BCAkUo(6%|Rem@%$<(V3h!OC^p+)O7Ib>p&^*G?hzzFyH0@WU4T@p6{S*{ zzZKXDoB=MFHfRg?_Av10ip{pCaqufK6SVAg0@U;YB$MqbF_rfZW^yrv`YK?S06z=- zF|fmCYvcykTYd2laa{q-IDsa+1AqZwCol^fsYrqnA}A&;|Brz!0P6@~lAY2Tt1pgK zt}DPA0@%%pXk`*e1;2o;z{QG6U_k-y0R9}?*Tb$&{#z!yHaPJp!vP-7Tn zjRYHk!?k>ZS_Bvb{u0RZ9S6S}Af?A$UOSQL zApQ|gRlw_&^s>s_v1Jx7#44&o+sPp6^zYVHK+litUaIB;{0Az{>Q(gtDoB5az%RA- z(tg|SR2aUokHMRJaEG19O5-USr z?Z9jG?x|b>q>h1K3HY_8d(_9k4dI3@zFtXOOLP8(t7J3!y8CFW8VHjrU`91^f9@cc zc2=eUzXjZ7E>O`q@C%k!%km@{MsMz?cU!P2i?3H49vj``ep2%pvMH_ZeYIK%q*nB? zxv#DOPp+-$45evYH5H&U(qC#_l^R!)VQ6QB$Ob=}(K%0D7;x$3Sr*R4%KU-0s)1;1 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 QRKTB}wvkr3rhUx+0QF=o#sB~S literal 10757 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 diff --git a/resources/wiiu/splash-tv.png b/resources/wiiu/splash-tv.png index 50a3a96f33c43014ae2d29f83fb793c478d91fb0..fb380777d80e701c33d4d3f0a90bb36fedf83c78 100644 GIT binary patch literal 25796 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 Date: Thu, 6 Jun 2024 00:37:32 +0200 Subject: [PATCH 13/20] Use custom readbuf on our homebrew platforms --- src/system.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/system.h b/src/system.h index 3c0c29181a..37d7729017 100644 --- a/src/system.h +++ b/src/system.h @@ -60,13 +60,16 @@ #elif defined(__3DS__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS +# define USE_CUSTOM_FILE_READBUF 4 * 1024 #elif defined(__vita__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS +# define USE_CUSTOM_FILE_READBUF 4 * 1024 #elif defined(__wii__) # include # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS +# define USE_CUSTOM_FILE_READBUF 4 * 1024 #elif defined(__WIIU__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS @@ -82,6 +85,7 @@ #elif defined(__SWITCH__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS +# define USE_CUSTOM_FILE_READBUF 16 * 1024 #elif defined(PLAYER_AMIGA) && !defined(__AROS__) # define SUPPORT_ZOOM # define SUPPORT_MOUSE From dad63629aed72ef579adbd6db535c32046598360 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Thu, 6 Jun 2024 00:38:35 +0200 Subject: [PATCH 14/20] SDL2: Swap pixel format with a faster one for pixman on Big Endian Fix WiiU texture copy by manually doing a format conversion. --- src/platform/sdl/sdl2_ui.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index f89b5a54b8..1024e9b822 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -54,7 +54,11 @@ AudioInterface& Sdl2Ui::GetAudio() { #endif static uint32_t GetDefaultFormat() { +#ifdef WORDS_BIGENDIAN + return SDL_PIXELFORMAT_ABGR32; +#else return SDL_PIXELFORMAT_RGBA32; +#endif } /** @@ -63,7 +67,18 @@ static uint32_t GetDefaultFormat() { * We prefer formats which have fast paths in pixman. */ static int GetFormatRank(uint32_t fmt) { + switch (fmt) { +#ifdef WORDS_BIGENDIAN + case SDL_PIXELFORMAT_RGBA32: + return 0; + case SDL_PIXELFORMAT_BGRA32: + return 0; + case SDL_PIXELFORMAT_ARGB32: + return 1; + case SDL_PIXELFORMAT_ABGR32: + return 2; +#else case SDL_PIXELFORMAT_RGBA32: return 2; case SDL_PIXELFORMAT_BGRA32: @@ -72,6 +87,7 @@ static int GetFormatRank(uint32_t fmt) { return 1; case SDL_PIXELFORMAT_ABGR32: return 0; +#endif default: return -1; } @@ -559,8 +575,23 @@ void Sdl2Ui::ToggleVsync() { } void Sdl2Ui::UpdateDisplay() { +#ifdef __WIIU__ + if (vcfg.scaling_mode.Get() == ConfigEnum::ScalingMode::Bilinear && window.scale > 0.f) { + // Workaround WiiU bug: Bilinear uses a render target and for these the format is not converted + void* target_pixels; + int target_pitch; + + SDL_LockTexture(sdl_texture_game, nullptr, &target_pixels, &target_pitch); + SDL_ConvertPixels(main_surface->width(), main_surface->height(), GetDefaultFormat(), main_surface->pixels(), + main_surface->pitch(), SDL_PIXELFORMAT_RGBA8888, target_pixels, target_pitch); + SDL_UnlockTexture(sdl_texture_game); + } else { + SDL_UpdateTexture(sdl_texture_game, nullptr, main_surface->pixels(), main_surface->pitch()); + } +#else // SDL_UpdateTexture was found to be faster than SDL_LockTexture / SDL_UnlockTexture. SDL_UpdateTexture(sdl_texture_game, nullptr, main_surface->pixels(), main_surface->pitch()); +#endif if (window.size_changed && window.width > 0 && window.height > 0) { // Based on SDL2 function UpdateLogicalSize From 349f604a1d18d6a72906459424566eaed57f4de1 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Thu, 6 Jun 2024 01:33:32 +0200 Subject: [PATCH 15/20] Custom Filebuf: Also use it for writing Has the same performance issues --- src/filesystem_native.cpp | 21 +++++++++++++--- src/filesystem_stream.cpp | 50 ++++++++++++++++++++++++++++++++++----- src/filesystem_stream.h | 21 ++++++++++------ src/system.h | 10 ++++---- 4 files changed, 81 insertions(+), 21 deletions(-) diff --git a/src/filesystem_native.cpp b/src/filesystem_native.cpp index 1ae415fcdf..a77bf047c2 100644 --- a/src/filesystem_native.cpp +++ b/src/filesystem_native.cpp @@ -30,7 +30,7 @@ #include "output.h" #include "platform.h" -#ifdef USE_CUSTOM_FILE_READBUF +#ifdef USE_CUSTOM_FILEBUF # include # include #endif @@ -55,14 +55,14 @@ int64_t NativeFilesystem::GetFilesize(StringView path) const { } std::streambuf* NativeFilesystem::CreateInputStreambuffer(StringView path, std::ios_base::openmode mode) const { -#ifdef USE_CUSTOM_FILE_READBUF +#ifdef USE_CUSTOM_FILEBUF (void)mode; int fd = open(ToString(path).c_str(), O_RDONLY); if (fd < 0) { return nullptr; } - return new Filesystem_Stream::FdStreamBuf(fd); + return new Filesystem_Stream::FdStreamBuf(fd, true); #else auto buf = new std::filebuf(); @@ -84,6 +84,20 @@ std::streambuf* NativeFilesystem::CreateInputStreambuffer(StringView path, std:: } std::streambuf* NativeFilesystem::CreateOutputStreambuffer(StringView path, std::ios_base::openmode mode) const { +#ifdef USE_CUSTOM_FILEBUF + int flags = O_TRUNC; + + if ((mode & std::ios_base::app) == std::ios_base::app) { + flags = O_APPEND; + } + + int fd = open(ToString(path).c_str(), O_WRONLY | O_CREAT | flags, S_IRUSR | S_IWUSR); + if (fd < 0) { + return nullptr; + } + + return new Filesystem_Stream::FdStreamBuf(fd, false); +#else auto* buf = new std::filebuf(); buf->open( #ifdef _MSC_VER @@ -99,6 +113,7 @@ std::streambuf* NativeFilesystem::CreateOutputStreambuffer(StringView path, std: } return buf; +#endif } bool NativeFilesystem::GetDirectoryContent(StringView path, std::vector& entries) const { diff --git a/src/filesystem_stream.cpp b/src/filesystem_stream.cpp index 5d20a59249..180a098958 100644 --- a/src/filesystem_stream.cpp +++ b/src/filesystem_stream.cpp @@ -19,7 +19,7 @@ #include -#ifdef USE_CUSTOM_FILE_READBUF +#ifdef USE_CUSTOM_FILEBUF # include #endif @@ -127,14 +127,21 @@ Filesystem_Stream::InputMemoryStreamBuf::InputMemoryStreamBuf(std::vector buffer; }; -#ifdef USE_CUSTOM_FILE_READBUF +#ifdef USE_CUSTOM_FILEBUF class FdStreamBuf : public std::streambuf { public: - FdStreamBuf(int fd); + FdStreamBuf(int fd, bool is_read); FdStreamBuf(FdStreamBuf const& other) = delete; FdStreamBuf const& operator=(FdStreamBuf const& other) = delete; ~FdStreamBuf(); protected: - int_type underflow(); - std::streambuf::pos_type seekoff(std::streambuf::off_type offset, std::ios_base::seekdir dir, std::ios_base::openmode mode); - std::streambuf::pos_type seekpos(std::streambuf::pos_type pos, std::ios_base::openmode); + // Reading + int_type underflow() override; + std::streambuf::pos_type seekoff(std::streambuf::off_type offset, std::ios_base::seekdir dir, std::ios_base::openmode mode) override; + std::streambuf::pos_type seekpos(std::streambuf::pos_type pos, std::ios_base::openmode) override; + // Writing + int_type overflow(int c = EOF) override; + int sync() override; private: + // Reading void clear_buffer(); ssize_t bytes_remaining() const; + off_t file_offset = 0; + // Both int fd; - off_t file_offset = 0; - std::array buffer; + bool is_read; // Streams can be read and write but we only always use one mode + std::array buffer; }; #endif diff --git a/src/system.h b/src/system.h index 37d7729017..3b8e1aa5f5 100644 --- a/src/system.h +++ b/src/system.h @@ -60,21 +60,21 @@ #elif defined(__3DS__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS -# define USE_CUSTOM_FILE_READBUF 4 * 1024 +# define USE_CUSTOM_FILEBUF 4 * 1024 #elif defined(__vita__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS -# define USE_CUSTOM_FILE_READBUF 4 * 1024 +# define USE_CUSTOM_FILEBUF 4 * 1024 #elif defined(__wii__) # include # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS -# define USE_CUSTOM_FILE_READBUF 4 * 1024 +# define USE_CUSTOM_FILEBUF 4 * 1024 #elif defined(__WIIU__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS # define SUPPORT_TOUCH -# define USE_CUSTOM_FILE_READBUF 16 * 1024 +# define USE_CUSTOM_FILEBUF 16 * 1024 #elif defined(_WIN32) # define SUPPORT_ZOOM # define SUPPORT_MOUSE @@ -85,7 +85,7 @@ #elif defined(__SWITCH__) # define SUPPORT_JOYSTICK # define SUPPORT_JOYSTICK_AXIS -# define USE_CUSTOM_FILE_READBUF 16 * 1024 +# define USE_CUSTOM_FILEBUF 16 * 1024 #elif defined(PLAYER_AMIGA) && !defined(__AROS__) # define SUPPORT_ZOOM # define SUPPORT_MOUSE From 980e242b76586fe378de4d0ebe5d64910891747a Mon Sep 17 00:00:00 2001 From: Ghabry Date: Thu, 6 Jun 2024 02:14:19 +0200 Subject: [PATCH 16/20] Wii U: Move teardown code to atexit --- src/platform/wiiu/main.cpp | 7 ++++--- src/platform/wiiu/main.h | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform/wiiu/main.cpp b/src/platform/wiiu/main.cpp index 16406ec4a7..a5746056b5 100644 --- a/src/platform/wiiu/main.cpp +++ b/src/platform/wiiu/main.cpp @@ -150,10 +150,11 @@ extern "C" int main(int argc, char* argv[]) { args.push_back(working_dir); } + // Setup teardown code + atexit(WiiU_Exit); + Player::Init(std::move(args)); Player::Run(); - WiiU_Exit(); - - return EXIT_SUCCESS; + return Player::exit_code; } diff --git a/src/platform/wiiu/main.h b/src/platform/wiiu/main.h index 16f91bb38c..35525cf4aa 100644 --- a/src/platform/wiiu/main.h +++ b/src/platform/wiiu/main.h @@ -16,4 +16,3 @@ */ bool WiiU_ProcessProcUI(); -void WiiU_Exit(); From 8260bd57dc09453d3e7c55bcc1438a9479cd0a1a Mon Sep 17 00:00:00 2001 From: Ghabry Date: Thu, 6 Jun 2024 02:51:32 +0200 Subject: [PATCH 17/20] CMake: Revert the Wii SDL part because it does not work (linker errors) --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c7284616e..62bdc51822 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -677,7 +677,9 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "switch") src/platform/switch/ui.h) target_link_libraries(${PROJECT_NAME} switch-assets) elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "wii") + find_package(SDL REQUIRED) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=1 PLAYER_NINTENDO) + target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR}) target_sources(${PROJECT_NAME} PRIVATE src/platform/wii/audio.cpp src/platform/wii/audio.h @@ -687,7 +689,6 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "wii") src/platform/sdl/axis.h src/platform/sdl/sdl_ui.cpp src/platform/sdl/sdl_ui.h) - player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED) else() message(FATAL_ERROR "Invalid target platform") endif() @@ -1227,6 +1228,7 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO add_executable(easyrpg-player src/platform/wii/main.cpp) target_link_libraries(easyrpg-player ${PROJECT_NAME} + ${SDL_LIBRARIES} -laesnd -lfat -lwiikeyboard) From f95f35821dfa82dbe6d1ae28e2b60d07ef426622 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 27 Aug 2024 18:50:48 +0200 Subject: [PATCH 18/20] WiiU: Address review comments - ProdUi renamed - Fixed save path for bundled games - Moved ProcessProcUi call to the Ui --- CMakeLists.txt | 2 +- src/platform/sdl/sdl2_ui.cpp | 9 +++++++++ src/platform/wiiu/main.cpp | 21 ++++++++++++--------- src/player.cpp | 8 -------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62bdc51822..bc946bee16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -702,7 +702,7 @@ if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|psvita|switch|wii)$" OR NINTENDO_WII endif() # Make content available (romfs/wuhb bundle) if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|switch)$" OR NINTENDO_WIIU) - option(PLAYER_BUNDLE "Embedd a directory in the executable" OFF) + option(PLAYER_BUNDLE "Embed a directory in the executable" OFF) set(PLAYER_BUNDLE_PATH "content" CACHE PATH "Directory to include in executable") set(BUNDLE_ARG "_IGNORE_ME") if(PLAYER_BUNDLE) diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index 1024e9b822..e7b75cb818 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -30,6 +30,8 @@ # include #elif defined(EMSCRIPTEN) # include +#elif defined(__WIIU__) +# include "platform/wiiu/main.h" #endif #include "icon.h" @@ -531,6 +533,13 @@ void Sdl2Ui::ToggleZoom() { } void Sdl2Ui::ProcessEvents() { +#if defined(__WIIU__) + if (!WiiU_ProcessProcUI()) { + Player::Exit(); + return; + } +#endif + SDL_Event evnt; #if defined(USE_MOUSE) && defined(SUPPORT_MOUSE) diff --git a/src/platform/wiiu/main.cpp b/src/platform/wiiu/main.cpp index a5746056b5..02a93fc89f 100644 --- a/src/platform/wiiu/main.cpp +++ b/src/platform/wiiu/main.cpp @@ -35,6 +35,8 @@ using namespace std::chrono_literals; +static bool procUiExited = false; + #ifdef NDEBUG // stubbed static void initLogging() {} @@ -48,7 +50,6 @@ static void deinitLogging() {} static bool moduleLogInit = false; static bool cafeLogInit = false; static bool udpLogInit = false; -static bool prodUiExited = false; static void initLogging() { if (!(moduleLogInit = WHBLogModuleInit())) { @@ -92,7 +93,7 @@ static uint32_t SaveCallback(void*) { bool WiiU_ProcessProcUI() { ProcUIStatus status = ProcUIProcessMessages(TRUE); if (status == PROCUI_STATUS_EXITING) { - prodUiExited = true; + procUiExited = true; return false; } else if (status == PROCUI_STATUS_RELEASE_FOREGROUND) { ProcUIDrawDoneRelease(); @@ -101,13 +102,13 @@ bool WiiU_ProcessProcUI() { } void WiiU_Exit() { - Output::Debug("Shutdown Reason: {}", prodUiExited ? "HOME Menu" : "Player Exit"); + Output::Debug("Shutdown Reason: {}", procUiExited ? "HOME Menu" : "Player Exit"); - if (!prodUiExited) { + if (!procUiExited) { // Exit was not through the Home Menu // Manually launch the system menu SYSLaunchMenu(); - Game_Clock::SleepFor(std::chrono::milliseconds(10)); + Game_Clock::SleepFor(10ms); while (WiiU_ProcessProcUI()) {} } @@ -130,6 +131,9 @@ extern "C" int main(int argc, char* argv[]) { const char *default_dir = "fs:/vol/external01/wiiu/apps/easyrpg-player"; + char working_dir[256]; + getcwd(working_dir, 255); + // Check if wuhb has some files inside or not if(::access("fs:/vol/content/RPG_RT.lmt", F_OK) == 0) { Output::Debug("Running packaged game from wuhb."); @@ -138,14 +142,13 @@ extern "C" int main(int argc, char* argv[]) { args.push_back("--project-path"); args.push_back(cafe_dir); - //args.push_back("--save-path"); - //args.push_back(cafe_dir); + // Save directory is where the wuhb is located + args.push_back("--save-path"); + args.push_back(working_dir); } else if(::access(default_dir, F_OK) == 0) { chdir(default_dir); } else { // fall back to current working directory - char working_dir[256]; - getcwd(working_dir, 255); args.push_back("--project-path"); args.push_back(working_dir); } diff --git a/src/player.cpp b/src/player.cpp index 573fd15e0d..ae4120e39a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -31,8 +31,6 @@ # include #elif defined(EMSCRIPTEN) # include -#elif defined(__WIIU__) -# include "platform/wiiu/main.h" #endif #include "async_handler.h" @@ -218,12 +216,6 @@ void Player::Run() { // libretro invokes the MainLoop through a retro_run-callback #else while (Transition::instance().IsActive() || (Scene::instance && Scene::instance->type != Scene::Null)) { -#if defined(__WIIU__) - if (!WiiU_ProcessProcUI()) { - Player::Exit(); - return; - } -#endif MainLoop(); } #endif From 8120ecbf9b59e53387ec439e2994e5ca91bc2d5f Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 27 Aug 2024 19:39:09 +0200 Subject: [PATCH 19/20] WiiU: Map the buttons according to an Xbox-Controller and then swap them with the swap abxy setting --- src/game_config.cpp | 6 ++++++ src/platform/sdl/sdl2_ui.cpp | 2 ++ src/platform/wiiu/input_buttons.cpp | 25 +++++++++++++------------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/game_config.cpp b/src/game_config.cpp index d9fbcd3355..0e6f336d81 100644 --- a/src/game_config.cpp +++ b/src/game_config.cpp @@ -84,10 +84,16 @@ void Game_ConfigInput::Hide() { Game_Config Game_Config::Create(CmdlineParser& cp) { Game_Config cfg; + // Set platform specific defaults #if USE_SDL >= 2 cfg.video.scaling_mode.Set(ConfigEnum::ScalingMode::Bilinear); #endif +#if defined(__WIIU__) + cfg.input.gamepad_swap_ab_and_xy.Set(true); +#endif + + cp.Rewind(); config_path = GetConfigPath(cp); diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index e7b75cb818..cf91ef4f4b 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -1298,6 +1298,8 @@ void Sdl2Ui::vGetConfig(Game_ConfigVideo& cfg) const { #elif defined(__WIIU__) // Only makes the screen flicker cfg.fullscreen.SetOptionVisible(false); + // WiiU always pauses apps in the background + cfg.pause_when_focus_lost.SetOptionVisible(false); #endif } diff --git a/src/platform/wiiu/input_buttons.cpp b/src/platform/wiiu/input_buttons.cpp index b90ea8f3c0..60eb42b161 100644 --- a/src/platform/wiiu/input_buttons.cpp +++ b/src/platform/wiiu/input_buttons.cpp @@ -27,10 +27,10 @@ Input::ButtonMappingArray Input::GetDefaultButtonMappings() { {DOWN, Keys::JOY_DPAD_DOWN}, {LEFT, Keys::JOY_DPAD_LEFT}, {RIGHT, Keys::JOY_DPAD_RIGHT}, - {DECISION, Keys::JOY_A}, - {CANCEL, Keys::JOY_B}, - {CANCEL, Keys::JOY_X}, - {SHIFT, Keys::JOY_Y}, + {DECISION, Keys::JOY_B}, + {CANCEL, Keys::JOY_A}, + {CANCEL, Keys::JOY_Y}, + {SHIFT, Keys::JOY_X}, {N0, Keys::JOY_LSTICK}, {N5, Keys::JOY_RSTICK}, {DEBUG_ABORT_EVENT, Keys::JOY_SHOULDER_LEFT}, @@ -65,17 +65,18 @@ Input::ButtonMappingArray Input::GetDefaultButtonMappings() { } Input::KeyNamesArray Input::GetInputKeyNames() { - // FIXME: Wiimote mapping is broken, consider removing + // FIXME: The mapping is named in terms of WiiU Gamepad / Controller + // For Wiimote the reported buttons change depending whether a Nunchuck is connected return { - {Keys::JOY_A, "A"}, // 2 (Wiimote) - {Keys::JOY_B, "B"}, // 1 (Wiimote) - {Keys::JOY_X, "X"}, // (Pad/CC/Pro) / B (Wiimote) / Z (Wiimote+Nunchuck) - {Keys::JOY_Y, "Y"}, // (Pad/CC/Pro) / A (Wiimote) / C (Wiimote+Nunchuck) + {Keys::JOY_B, "A"}, // 2 (Wiimote) / A (Wiimote+Nunchuck) + {Keys::JOY_A, "B"}, // 1 (Wiimote) / B (Wiimote+Nunchuck) + {Keys::JOY_Y, "X"}, // (Pad/CC/Pro) / B (Wiimote) / Z (Wiimote+Nunchuck) + {Keys::JOY_X, "Y"}, // (Pad/CC/Pro) / A (Wiimote) / C (Wiimote+Nunchuck) {Keys::JOY_BACK, "-"}, {Keys::JOY_START, "+"}, - {Keys::JOY_GUIDE, "Home"}, // FIXME: not mapped at all, maybe use custom trigger - {Keys::JOY_SHOULDER_LEFT, "L"}, - {Keys::JOY_SHOULDER_RIGHT, "R"}, + {Keys::JOY_GUIDE, "Home"}, // The Home Key is not notified + {Keys::JOY_SHOULDER_LEFT, "L"}, // 1 (Wiimote+Nunchuck) + {Keys::JOY_SHOULDER_RIGHT, "R"}, // 2 (Wiimote+Nunchuck) {Keys::JOY_LTRIGGER_FULL, "ZL"}, {Keys::JOY_RTRIGGER_FULL, "ZR"}, From cd0197484774918f67d5fdda29fa78aa75377344 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Tue, 27 Aug 2024 19:39:20 +0200 Subject: [PATCH 20/20] Add a bool to ProcessEvents to signal program exit. Calling Player::Exit in the Ui can crash because the Ui is deleted by it. Also the normal teardown codepath is too slow on WiiU and crashes the console when the home button is used. --- src/baseui.h | 4 +++- src/output.cpp | 6 +++--- src/platform/3ds/ui.cpp | 9 ++++++--- src/platform/3ds/ui.h | 2 +- src/platform/libretro/ui.cpp | 6 ++++-- src/platform/libretro/ui.h | 2 +- src/platform/psvita/ui.cpp | 4 +++- src/platform/psvita/ui.h | 2 +- src/platform/sdl/sdl2_ui.cpp | 7 ++++--- src/platform/sdl/sdl2_ui.h | 2 +- src/platform/sdl/sdl_ui.cpp | 4 +++- src/platform/sdl/sdl_ui.h | 2 +- src/platform/switch/ui.cpp | 4 +++- src/platform/switch/ui.h | 2 +- src/player.cpp | 15 ++++++++++++--- 15 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/baseui.h b/src/baseui.h index b4877cdf67..cb9eaeaf02 100644 --- a/src/baseui.h +++ b/src/baseui.h @@ -68,8 +68,10 @@ class BaseUi { /** * Processes events queue. + * + * @return When false requests an immediate Player shutdown */ - virtual void ProcessEvents() = 0; + virtual bool ProcessEvents() = 0; /** * Cleans video buffer. diff --git a/src/output.cpp b/src/output.cpp index 23129d9a1d..ed792352d7 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -214,9 +214,9 @@ static void HandleErrorOutput(const std::string& err) { #if !defined(USE_LIBRETRO) Game_Clock::SleepFor(1ms); #endif - DisplayUi->ProcessEvents(); - - if (Player::exit_flag) break; + if (!DisplayUi->ProcessEvents() || Player::exit_flag) { + break; + } Input::Update(); } diff --git a/src/platform/3ds/ui.cpp b/src/platform/3ds/ui.cpp index ea4472e36e..eab0b96408 100644 --- a/src/platform/3ds/ui.cpp +++ b/src/platform/3ds/ui.cpp @@ -217,9 +217,10 @@ CtrUi::~CtrUi() { ToggleBottomScreen(true); } -void CtrUi::ProcessEvents() { - if (!aptMainLoop()) - Player::Exit(); +bool CtrUi::ProcessEvents() { + if (!aptMainLoop()) { + return false; + } hidScanInput(); u32 input = hidKeysHeld(); @@ -324,6 +325,8 @@ void CtrUi::ProcessEvents() { } } #endif + + return true; } void CtrUi::UpdateDisplay() { diff --git a/src/platform/3ds/ui.h b/src/platform/3ds/ui.h index 9dc42b7122..febc4f3aa9 100644 --- a/src/platform/3ds/ui.h +++ b/src/platform/3ds/ui.h @@ -50,7 +50,7 @@ class CtrUi final : public BaseUi { */ /** @{ */ void UpdateDisplay() override; - void ProcessEvents() override; + bool ProcessEvents() override; void ToggleStretch() override; void ToggleTouchUi() override; void vGetConfig(Game_ConfigVideo& cfg) const override; diff --git a/src/platform/libretro/ui.cpp b/src/platform/libretro/ui.cpp index 0fd56faabd..efa65ca6b5 100644 --- a/src/platform/libretro/ui.cpp +++ b/src/platform/libretro/ui.cpp @@ -138,10 +138,10 @@ bool LibretroUi::vChangeDisplaySurfaceResolution(int new_width, int new_height) return true; } -void LibretroUi::ProcessEvents() { +bool LibretroUi::ProcessEvents() { # if defined(USE_JOYSTICK) && defined(SUPPORT_JOYSTICK) if (CheckInputState == nullptr) { - return; + return true; } LibretroUi::input_poll_cb(); @@ -184,6 +184,8 @@ void LibretroUi::ProcessEvents() { analog_input.trigger_right = normalize(CheckInputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_BUTTON, RETRO_DEVICE_ID_JOYPAD_R2)); # endif # endif + + return true; } retro_video_refresh_t LibretroUi::UpdateWindow = nullptr; diff --git a/src/platform/libretro/ui.h b/src/platform/libretro/ui.h index 6237d4642d..7f9ef8c3c9 100644 --- a/src/platform/libretro/ui.h +++ b/src/platform/libretro/ui.h @@ -47,7 +47,7 @@ class LibretroUi final : public BaseUi { /** @{ */ bool vChangeDisplaySurfaceResolution(int new_width, int new_height) override; void UpdateDisplay() override; - void ProcessEvents() override; + bool ProcessEvents() override; void vGetConfig(Game_ConfigVideo& cfg) const override; #ifdef SUPPORT_AUDIO diff --git a/src/platform/psvita/ui.cpp b/src/platform/psvita/ui.cpp index 397186bfa7..91afcc4120 100644 --- a/src/platform/psvita/ui.cpp +++ b/src/platform/psvita/ui.cpp @@ -207,7 +207,7 @@ Psp2Ui::~Psp2Ui() { vita2d_fini(); } -void Psp2Ui::ProcessEvents() { +bool Psp2Ui::ProcessEvents() { SceCtrlData input; SceTouchData touch; @@ -261,6 +261,8 @@ void Psp2Ui::ProcessEvents() { } } } + + return true; } void Psp2Ui::UpdateDisplay() { diff --git a/src/platform/psvita/ui.h b/src/platform/psvita/ui.h index 5f5fc59f49..d465f0620e 100644 --- a/src/platform/psvita/ui.h +++ b/src/platform/psvita/ui.h @@ -49,7 +49,7 @@ class Psp2Ui final : public BaseUi { */ /** @{ */ void UpdateDisplay() override; - void ProcessEvents() override; + bool ProcessEvents() override; void SetScalingMode(ConfigEnum::ScalingMode) override; void ToggleStretch() override; void ToggleTouchUi() override; diff --git a/src/platform/sdl/sdl2_ui.cpp b/src/platform/sdl/sdl2_ui.cpp index cf91ef4f4b..7c5d4ad72b 100644 --- a/src/platform/sdl/sdl2_ui.cpp +++ b/src/platform/sdl/sdl2_ui.cpp @@ -532,11 +532,10 @@ void Sdl2Ui::ToggleZoom() { #endif } -void Sdl2Ui::ProcessEvents() { +bool Sdl2Ui::ProcessEvents() { #if defined(__WIIU__) if (!WiiU_ProcessProcUI()) { - Player::Exit(); - return; + return false; } #endif @@ -555,6 +554,8 @@ void Sdl2Ui::ProcessEvents() { if (Player::exit_flag) break; } + + return true; } void Sdl2Ui::SetScalingMode(ConfigEnum::ScalingMode mode) { diff --git a/src/platform/sdl/sdl2_ui.h b/src/platform/sdl/sdl2_ui.h index bbade7033d..cef74fe1fd 100644 --- a/src/platform/sdl/sdl2_ui.h +++ b/src/platform/sdl/sdl2_ui.h @@ -65,7 +65,7 @@ class Sdl2Ui final : public BaseUi { void UpdateDisplay() override; void SetTitle(const std::string &title) override; bool ShowCursor(bool flag) override; - void ProcessEvents() override; + bool ProcessEvents() override; void SetScalingMode(ConfigEnum::ScalingMode) override; void ToggleStretch() override; void ToggleVsync() override; diff --git a/src/platform/sdl/sdl_ui.cpp b/src/platform/sdl/sdl_ui.cpp index 04961a612f..29fc05f7d2 100644 --- a/src/platform/sdl/sdl_ui.cpp +++ b/src/platform/sdl/sdl_ui.cpp @@ -404,7 +404,7 @@ void SdlUi::ToggleZoom() { EndDisplayModeChange(); } -void SdlUi::ProcessEvents() { +bool SdlUi::ProcessEvents() { SDL_Event evnt; // Poll SDL events and process them @@ -414,6 +414,8 @@ void SdlUi::ProcessEvents() { if (Player::exit_flag) break; } + + return true; } void SdlUi::UpdateDisplay() { diff --git a/src/platform/sdl/sdl_ui.h b/src/platform/sdl/sdl_ui.h index 775957ffa3..15c1797db5 100644 --- a/src/platform/sdl/sdl_ui.h +++ b/src/platform/sdl/sdl_ui.h @@ -63,7 +63,7 @@ class SdlUi final : public BaseUi { void UpdateDisplay() override; void SetTitle(const std::string &title) override; bool ShowCursor(bool flag) override; - void ProcessEvents() override; + bool ProcessEvents() override; void vGetConfig(Game_ConfigVideo& cfg) const override; #ifdef SUPPORT_AUDIO diff --git a/src/platform/switch/ui.cpp b/src/platform/switch/ui.cpp index 1291a15135..1ef3f28bd0 100644 --- a/src/platform/switch/ui.cpp +++ b/src/platform/switch/ui.cpp @@ -390,7 +390,7 @@ NxUi::~NxUi() { appletUnhook(&applet_hook_cookie); } -void NxUi::ProcessEvents() { +bool NxUi::ProcessEvents() { // handle system events appletMainLoop(); @@ -453,6 +453,8 @@ void NxUi::ProcessEvents() { } } } + + return true; } void NxUi::UpdateDisplay() { diff --git a/src/platform/switch/ui.h b/src/platform/switch/ui.h index 4c6ccf0027..d289f0d029 100644 --- a/src/platform/switch/ui.h +++ b/src/platform/switch/ui.h @@ -48,7 +48,7 @@ class NxUi final : public BaseUi { */ /** @{ */ void UpdateDisplay() override; - void ProcessEvents() override; + bool ProcessEvents() override; void ToggleStretch() override; void ToggleTouchUi() override; void vGetConfig(Game_ConfigVideo& cfg) const override; diff --git a/src/player.cpp b/src/player.cpp index ae4120e39a..7645c3f16b 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -229,10 +229,22 @@ void Player::MainLoop() { Player::UpdateInput(); + if (!DisplayUi->ProcessEvents()) { + Scene::PopUntil(Scene::Null); + Player::Exit(); + return; + } + int num_updates = 0; while (Game_Clock::NextGameTimeStep()) { if (num_updates > 0) { Player::UpdateInput(); + + if (!DisplayUi->ProcessEvents()) { + Scene::PopUntil(Scene::Null); + Player::Exit(); + return; + } } Scene::old_instances.clear(); @@ -306,9 +318,6 @@ void Player::UpdateInput() { if (Main_Data::game_quit) { reset_flag |= Main_Data::game_quit->ShouldQuit(); } - - // Update Logic: - DisplayUi->ProcessEvents(); } void Player::Update(bool update_scene) {