diff options
| author | Liliana Marie Prikler <liliana.prikler@gmail.com> | 2026-03-19 19:20:43 +0100 |
|---|---|---|
| committer | Liliana Marie Prikler <liliana.prikler@gmail.com> | 2026-03-29 21:09:48 +0200 |
| commit | 05b247befe1d72816957f3a0bd1057a62def40e5 (patch) | |
| tree | 3010fa8bc5c2d6978ea2ee2164ea6c7785ef4023 /gnu | |
| parent | 7aeb5d0483683fa29d23229995a03a85c763470a (diff) | |
gnu: Add ppsspp.
* gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/emulators.scm (aemu-postoffice-source, libchdr-source)
(rcheevos-source): New variables.
(ppsspp): New variable.
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/local.mk | 1 | ||||
| -rw-r--r-- | gnu/packages/emulators.scm | 240 | ||||
| -rw-r--r-- | gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch | 984 |
3 files changed, 1225 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index fc0a519da36..8d87c520582 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2086,6 +2086,7 @@ dist_patch_DATA = \ %D%/packages/patches/podofo-gcc-14.patch \ %D%/packages/patches/pokerth-boost.patch \ %D%/packages/patches/pounce-readable-checks.patch \ + %D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch \ %D%/packages/patches/procps-strtod-test.patch \ %D%/packages/patches/prusa-slicer-add-cmake-module.patch \ %D%/packages/patches/pthreadpool-system-libraries.patch \ diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 62c2c58e541..c11400f720f 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -29,6 +29,7 @@ ;;; Copyright © 2026 Nikita Alkhovik <forgoty13@gmail.com> ;;; Copyright © 2026 Justin Veilleux <terramorpha@cock.li> ;;; Copyright © 2026 Spencer King <spencer.king@wustl.edu> +;;; Copyright © 2021–2023, 2026 Liliana Marie Prikler <liliana.prikler@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -4715,6 +4716,245 @@ emulator framework based on QEMU.") (sha256 (base32 "0mlfs8qfi0clyncfkbxp6in0cpl747510i6bqymwid43xcirbikz")))))) +(define-public (aemu-postoffice-source commit sha256-hash) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/Kethen/aemu_postoffice") + (commit commit))) + (file-name "aemu-postoffice-source") + (sha256 sha256-hash))) + +(define-public (libchdr-source commit sha256-hash) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/rtissera/libchdr") + (commit commit))) + (file-name "libchdr-source") + (sha256 sha256-hash))) + +(define-public (rcheevos-source commit sha256-hash) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/RetroAchievements/rcheevos/") + (commit commit))) + (file-name "rcheevos-source") + (sha256 sha256-hash))) + +(define-public ppsspp + (package + (name "ppsspp") + (version "1.20.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hrydgard/ppsspp") + (commit (string-append "v" version)))) + (sha256 + (base32 "186d2jc6h6xmiqnrifq4xcw0g3fv1slcnvs5mzzxcnfk7ljr6r6p")) + (file-name (git-file-name name version)) + (patches + (search-patches "ppsspp-disable-upgrade-and-gold.patch")) + (modules '((guix build utils))) + (snippet + `(begin + ;; The following is quite a heavy-handed way of unbundling PPSSPP. + ;; There are still a number of external sources, that we don't + ;; remove here. Some may be packaged, others are not. + ;; First, we patch existing sources to include the right headers. + (substitute* (append (find-files "Common" ".*\\.(h|cpp)") + (find-files "Core" ".*\\.(h|cpp)") + (find-files "GPU" ".*\\.(h|cpp)") + (find-files "SDL" ".*\\.(h|cpp)") + (find-files "UI" ".*\\.(h|cpp)")) + ;; These headers are all hard-coded in the original source. + (("ext/cityhash/") "") + (("ext/cpu_features/include/") "cpu_features/") + (("ext/glslang/glslang/") "glslang/") + (("ext/glslang/") "glslang/") + (("ext/miniupnp/") "") + (("ext/nanosvg/src") "nanosvg") + (("ext/rapidjson/include/") "") + (("ext/SPIRV-Cross/") "spirv_cross/") + (("ext/vulkan/") "vulkan/") + (("ext/xxhash.h") "xxhash.h") + ;; These definitions do not actually exist in the Vulkan headers, + ;; but PPSSPP defines them in ext/vulkan. + (("VK_FORMAT_BEGIN_RANGE") "VK_FORMAT_UNDEFINED") + (("VK_FORMAT_END_RANGE") "VK_FORMAT_ASTC_12x12_SRGB_BLOCK")) + ;; Next, we patch CMakeLists. + (substitute* "CMakeLists.txt" + ;; Drop unnecessary includes and targets. + (("include_directories\\(ext/glslang\\)") "") + (("target_include_directories\\(.*ext/xxhash\\)") "") + (("target_include_directories\\(.*ext/cityhash\\)") "") + (("set_target_properties\\(cityhash .*\\)") "") + (("target_compile_options\\(cityhash .*\\)") "") + ;; Fix linking to GLEW. + (("TARGET Ext::GLEW") "true") + (("target_link_libraries\\((Common|native) Ext::GLEW\\)" all lib) + (string-append "find_package(GLEW)\n" + "target_link_libraries(" lib " GLEW::GLEW)")) + (("Ext::Snappy") "snappy") + (("OGLCompiler") "") + (("OSDependent") "") + ;; Don't search for cityhash/xxhash, we already have them. + (("add_library\\((city|xx)hash STATIC") "if()\nendif(") + (("ext/xxhash\\.[ch]") "") + (("ext/cityhash/.*\\.(cpp|h)") "") + ;; Drop remaining references to GOLD. + (("UI/IAPScreen\\.(cpp|h)") "") + ;; Link all of spirv-cross. + (("spirv-cross-glsl" all) + (string-append all + " spirv-cross-core spirv-cross-cpp" + " spirv-cross-reflect spirv-cross-util"))) + (substitute* "ext/CMakeLists.txt" + (("add_subdirectory\\(cmake.*") "") + (("add_subdirectory\\(freetype.*") "") + (("add_subdirectory\\(glew.*") "") + (("add_subdirectory\\(glslang.*") "") + (("add_subdirectory\\(snappy.*") "") + (("add_subdirectory\\(SPIRV-Cross-build.*") "") + (("add_subdirectory\\(zstd.*") "")) + ;; Finally, we can delete the bundled sources… + (for-each delete-file-recursively + '("ext/cmake" + "ext/glew" + "ext/glslang" "ext/glslang-build" + "ext/miniupnp" "ext/miniupnp-build" + "ext/native" + "ext/snappy" + "ext/SPIRV-Cross" "ext/SPIRV-Cross-build" + "ext/vulkan" + "ext/xxhash.c" + "ext/xxhash.h" + "ext/zlib" + "ext/zstd")) + ;; … as well as the remaining files referencing GOLD. + (for-each delete-file + '("UI/IAPScreen.cpp" + "UI/IAPScreen.h" + "ios/IAPManager.mm" + "ios/IAPManager.h")) + ;; Since we are not including git as an input, PPSSPP is confused + ;; about its version. Let's fix that here. + (substitute* "git-version.cmake" + (("unknown") ,version)))))) + (build-system cmake-build-system) + (arguments + (list + #:out-of-source? #f + #:configure-flags #~(list "-DARMIPS_USE_STD_FILESYSTEM=ON" ; from armips + "-DUSE_DISCORD=OFF" + "-DUSE_SYSTEM_FFMPEG=ON" + "-DUSE_SYSTEM_LIBZIP=ON" + "-DUSE_SYSTEM_MINIUPNPC=ON" + "-DUSE_SYSTEM_ZSTD=ON" + ;; for testing + "-DUNITTEST=ON" "-DHEADLESS=ON") + #:phases + #~(modify-phases %standard-phases + (add-after 'set-paths 'add-sdl-paths + (lambda* (#:key inputs #:allow-other-keys) + (setenv "CPLUS_INCLUDE_PATH" + (string-append + (dirname (search-input-file inputs + "include/SDL2/SDL.h")) + ":" + (getenv "CPLUS_INCLUDE_PATH"))))) + (add-after 'unpack 'add-external-sources + (lambda* (#:key inputs #:allow-other-keys) + ;; TODO: unbundle armips. + (copy-recursively #$(package-source armips) "ext/armips") + ;; XXX: Lua 5.4 is missing lapi.h, so we have to bundle it 😫 + (with-directory-excursion "ext/lua" + (invoke "tar" "xvf" #$(package-source lua-5.4) + "--strip-components=2")) + (copy-recursively + #$(this-package-native-input "aemu-postoffice-source") + "ext/aemu_postoffice") + ;; No public release, leave bundled for now. + (copy-recursively + #$(this-package-native-input "libchdr-source") + "ext/libchdr") + ;; TODO: Unbundle rcheevos. + (copy-recursively + #$(this-package-native-input "rcheevos-source") + "ext/rcheevos"))) + (add-after 'unpack 'fix-shader + (lambda _ + (substitute* (find-files "Common/GPU/" "\\.cpp$") + (("#include \"glslang/SPIRV/GlslangToSpv\\.h\"" all) + (string-append "#include <glslang/Public/ShaderLang.h>\n" + all))))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin/ppsspp (string-append out "/bin/ppsspp")) + (share (string-append out "/share/ppsspp"))) + (copy-recursively "icons/hicolor" + (string-append out "/share/icons/hicolor")) + (install-file "PPSSPPSDL" share) + (copy-recursively "assets" (string-append share "/assets")) + + (make-desktop-entry-file + (string-append out "/share/applications/ppsspp.desktop") + #:name "PPSSPP" + #:exec (string-append share "/PPSSPPSDL") + #:icon "ppsspp") + (mkdir-p (string-append out "/bin")) + (with-output-to-file bin/ppsspp + (lambda () + (format #t "#!~a~%exec ~a/PPSSPPSDL \"$@\"" + (search-input-file inputs "/bin/bash") share))) + (chmod bin/ppsspp #o755))))))) + (native-inputs + (list pkg-config python + (package-source lua-5.4) + (aemu-postoffice-source + "2026-03-16" + (base32 "072w3jf87s8b00kp8nvscrggn1wq7nv37xfm527h2rg2sm57irp3")) + (libchdr-source + "8bba7745d758627258b315997a860039244cedaf" + (base32 "05syp2mk6m9mdvg7qq0wd612apps615x71kv6im9pxd2f76k1wy3")) + (rcheevos-source + "v12.3.0" + (base32 "09h9n7znl2ajkicshv4scawjb9zz3v9aka8986j9sg5y02a4h3wf")))) + (inputs (list bash + cityhash + cpu-features + ffmpeg + glew + glslang + libpng + libzip + ;; lua-5.4 + mesa + miniupnpc + nanosvg + openxr + rapidjson + sdl2 + sdl2-ttf + snappy + spirv-cross + vulkan-headers + vulkan-loader + wayland + xxhash + zlib + `(,zstd "lib"))) + (home-page "https://www.ppsspp.org/") + (synopsis "PSP emulator") + (description + "PPSSPP is a ``high-level'' emulator simulating the PSP operating +system.") + (license license:gpl2+))) + (define-public exomizer (package (name "exomizer") diff --git a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch new file mode 100644 index 00000000000..7a8a4568a92 --- /dev/null +++ b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch @@ -0,0 +1,984 @@ +From 82e98cf24808754578ab26adef5c33acc949f75e Mon Sep 17 00:00:00 2001 +From: Liliana Marie Prikler <liliana.prikler@gmail.com> +Date: Sat, 5 Jun 2021 22:47:00 -0400 +Subject: [PATCH] ppsspp: Remove upgrade code and gold support. + +Original patch from Liliana Marie Prikler. +Rebased on master (commit 69fa20744958aef8da9ca052ba7675fdc1636e46) by +Maxim Cournoyer. +Revised again by Liliana Marie Prikler for versions 1.12.3 and 1.14.4. +Revised again again by Liliana Marie Prikler for version 1.20.3. +--- + CMakeLists.txt | 78 +++++------------------ + Common/System/Request.cpp | 2 - + Common/System/System.h | 1 - + Core/Config.cpp | 123 +------------------------------------ + Core/Config.h | 11 ---- + Core/MIPS/IR/IRJit.h | 5 -- + Qt/QtMain.cpp | 6 -- + Qt/mainwindow.cpp | 8 +-- + Qt/mainwindow.h | 3 +- + SDL/SDLMain.cpp | 11 +--- + UI/Background.cpp | 2 +- + UI/GameSettingsScreen.cpp | 7 --- + UI/MainScreen.cpp | 91 +-------------------------- + UI/MainScreen.h | 3 - + UI/MemStickScreen.cpp | 9 +-- + UI/MiscScreens.cpp | 36 +---------- + UI/ReportScreen.cpp | 11 +--- + UI/UIAtlas.cpp | 1 - + UWP/PPSSPP_UWPMain.cpp | 8 +-- + Windows/MainWindowMenu.cpp | 9 --- + Windows/main.cpp | 10 +-- + Windows/resource.h | 1 - + ios/main.mm | 33 ++++------ + 23 files changed, 39 insertions(+), 430 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 070f49b..f206ced 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -137,27 +137,6 @@ if(OPENXR AND NOT ARMV7_DEVICE) + message("OpenXR enabled") + endif() + +-if(GOLD) +- add_compile_definitions(GOLD) +- message("Gold Build") +- if(IOS_APP_STORE) +- message("WARNING: Gold build for iOS is deprecated") +- endif() +-else() +- message("Non-gold Build") +-endif() +- +-if(USE_IAP) +- if(GOLD) +- message(FATAL_ERROR "USE_IAP and GOLD can't be enabled together") +- endif() +- if(NOT IOS_APP_STORE) +- message(FATAL_ERROR "USE_IAP can only be enabled in app store builds") +- endif() +- message("USE_IAP for iOS enabled") +- add_compile_definitions(USE_IAP) +-endif() +- + if(IOS_APP_STORE) + add_compile_definitions(PPSSPP_PLATFORM_IOS_APP_STORE) + add_compile_definitions(GLES_SILENCE_DEPRECATION) +@@ -211,8 +190,6 @@ option(USE_ASAN "Use address sanitizer" OFF) + option(USE_UBSAN "Use undefined behaviour sanitizer" OFF) + option(USE_CCACHE "Use ccache if detected" ON) + option(USE_NO_MMAP "Disable mmap usage" OFF) +-option(USE_IAP "IAP enabled" OFF) +-option(GOLD "Gold build" OFF) + + if(USE_CCACHE) + include(ccache) +@@ -1462,11 +1439,7 @@ elseif(WIN32) + set(TargetBin PPSSPPWindows) + elseif(LIBRETRO) + else() +- if(GOLD) +- set(TargetBin PPSSPPGold) +- else() +- set(TargetBin PPSSPPSDL) +- endif() ++ set(TargetBin PPSSPPSDL) + # Require SDL + add_compile_definitions(SDL) + list(APPEND nativeExtra +@@ -2972,17 +2945,10 @@ endif() + if(TargetBin) + if(APPLE) + if(NOT IOS) +- if(GOLD) +- set(ICON_PATH_ABS ${CMAKE_CURRENT_SOURCE_DIR}/icons/ppsspp_gold.icns) +- set(MACOSX_BUNDLE_ICON_FILE ppsspp_gold.icns) +- set(MACOSX_BUNDLE_BUNDLE_NAME "PPSSPP Gold") +- set(MACOSX_BUNDLE_GUI_IDENTIFIER org.ppsspp.ppssppgold) +- else() +- set(ICON_PATH_ABS ${CMAKE_CURRENT_SOURCE_DIR}/icons/ppsspp.icns) +- set(MACOSX_BUNDLE_ICON_FILE ppsspp.icns) +- set(MACOSX_BUNDLE_BUNDLE_NAME "PPSSPP") +- set(MACOSX_BUNDLE_GUI_IDENTIFIER org.ppsspp.ppsspp) +- endif() ++ set(ICON_PATH_ABS ${CMAKE_CURRENT_SOURCE_DIR}/icons/ppsspp.icns) ++ set(MACOSX_BUNDLE_ICON_FILE ppsspp.icns) ++ set(MACOSX_BUNDLE_BUNDLE_NAME "PPSSPP") ++ set(MACOSX_BUNDLE_GUI_IDENTIFIER org.ppsspp.ppsspp) + set_source_files_properties(${ICON_PATH_ABS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + endif() + +@@ -3081,25 +3047,15 @@ if(IOS AND NOT LIBRETRO) + set(PRODUCT_NAME "PPSSPP") + set(BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ios/PPSSPP-Info.plist") + set(BUNDLE_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/App.entitlements") +- if(GOLD) +- if(IOS_APP_STORE) +- set(BUNDLE_IDENTIFIER "org.ppsspp.ppsspp-gold") +- else() +- set(BUNDLE_IDENTIFIER "org.ppsspp.ppssppgold") +- endif() +- set(ICON_NAME "PPSSPPGold") +- set(DISPLAY_NAME "PPSSPP Gold") ++ if(IOS_APP_STORE) ++ set(BUNDLE_IDENTIFIER "org.ppsspp.ppsspp-free") + else() +- if(IOS_APP_STORE) +- set(BUNDLE_IDENTIFIER "org.ppsspp.ppsspp-free") +- else() +- set(BUNDLE_IDENTIFIER "org.ppsspp.ppsspp") +- endif() +- set(ICON_NAME "AppIcon") +- set(DISPLAY_NAME "PPSSPP") ++ set(BUNDLE_IDENTIFIER "org.ppsspp.ppsspp") + endif() ++ set(ICON_NAME "AppIcon") ++ set(DISPLAY_NAME "PPSSPP") + if(IOS_APP_STORE) +- message(STATUS "DevTeam: ${DEVELOPMENT_TEAM_ID} Icon: ${ICON_NAME} Target: ${TargetBin} Gold: ${GOLD} IAP: ${USE_IAP}") ++ message(STATUS "DevTeam: ${DEVELOPMENT_TEAM_ID} Icon: ${ICON_NAME} Target: ${TargetBin}") + message(STATUS "CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}") + + # This is for injecting the version into the plist, and also copying resources. +@@ -3191,15 +3147,9 @@ if(IOS AND NOT LIBRETRO) + endif() + + if(MACOSX AND NOT IOS) +- if(GOLD) +- set_target_properties(${TargetBin} PROPERTIES +- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/InfoGold.plist" +- ) +- else() +- set_target_properties(${TargetBin} PROPERTIES +- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist" +- ) +- endif() ++ set_target_properties(${TargetBin} PROPERTIES ++ MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist" ++ ) + endif() + + if(UNIX AND NOT ANDROID AND NOT APPLE) +diff --git a/Common/System/Request.cpp b/Common/System/Request.cpp +index 8332529..00035fd 100644 +--- a/Common/System/Request.cpp ++++ b/Common/System/Request.cpp +@@ -49,8 +49,6 @@ const char *RequestTypeAsString(SystemRequestType type) { + case SystemRequestType::MICROPHONE_COMMAND: return "MICROPHONE_COMMAND"; + case SystemRequestType::RUN_CALLBACK_IN_WNDPROC: return "RUN_CALLBACK_IN_WNDPROC"; + case SystemRequestType::MOVE_TO_TRASH: return "MOVE_TO_TRASH"; +- case SystemRequestType::IAP_RESTORE_PURCHASES: return "IAP_RESTORE_PURCHASES"; +- case SystemRequestType::IAP_MAKE_PURCHASE: return "IAP_MAKE_PURCHASE"; + default: return "N/A"; + } + } +diff --git a/Common/System/System.h b/Common/System/System.h +index e58a5cc..3c227be 100644 +--- a/Common/System/System.h ++++ b/Common/System/System.h +@@ -194,7 +194,6 @@ enum SystemProperty { + SYSPROP_DISPLAY_HAS_CAMERA_CUTOUT, + + SYSPROP_DEVICE_TYPE, +- SYSPROP_APP_GOLD, // To avoid having #ifdef GOLD other than in main.cpp and similar. + + // Exposed on Android. Choosing the optimal sample rate for audio + // will result in lower latencies. Buffer size is automatically matched +diff --git a/Core/Config.cpp b/Core/Config.cpp +index 4380e80..afd177a 100644 +--- a/Core/Config.cpp ++++ b/Core/Config.cpp +@@ -237,7 +237,6 @@ static const ConfigSetting generalSettings[] = { + ConfigSetting("CurrentDirectory", SETTING(g_Config, currentDirectory), "", CfgFlag::DEFAULT), + ConfigSetting("ShowDebuggerOnLoad", SETTING(g_Config, bShowDebuggerOnLoad), false, CfgFlag::DEFAULT), + ConfigSetting("ShowImDebugger", SETTING(g_Config, bShowImDebugger), false, CfgFlag::DONT_SAVE), +- ConfigSetting("CheckForNewVersion", SETTING(g_Config, bCheckForNewVersion), true, CfgFlag::DEFAULT), + ConfigSetting("Language", SETTING(g_Config, sLanguageIni), &DefaultLangRegion, CfgFlag::DEFAULT), + ConfigSetting("ForceLagSync2", SETTING(g_Config, bForceLagSync), false, CfgFlag::PER_GAME), + ConfigSetting("DiscordRichPresence", SETTING(g_Config, bDiscordRichPresence), false, CfgFlag::DEFAULT), +@@ -1112,12 +1111,6 @@ static const ConfigSetting jitSettings[] = { + ConfigSetting("DiscardRegsOnJRRA", SETTING(g_Config, bDiscardRegsOnJRRA), false, CfgFlag::DONT_SAVE | CfgFlag::REPORT), + }; + +-static const ConfigSetting upgradeSettings[] = { +- ConfigSetting("UpgradeMessage", SETTING(g_Config, sUpgradeMessage), "", CfgFlag::DEFAULT), +- ConfigSetting("UpgradeVersion", SETTING(g_Config, sUpgradeVersion), "", CfgFlag::DEFAULT), +- ConfigSetting("DismissedVersion", SETTING(g_Config, sDismissedVersion), "", CfgFlag::DEFAULT), +-}; +- + static const ConfigSetting themeSettings[] = { + ConfigSetting("ThemeName", SETTING(g_Config, sThemeName), "Default", CfgFlag::DEFAULT), + }; +@@ -1156,7 +1149,6 @@ static const ConfigSectionMeta g_sectionMeta[] = { + { &g_Config, themeSettings, ARRAY_SIZE(themeSettings), "Theme" }, + { &g_Config, vrSettings, ARRAY_SIZE(vrSettings), "VR" }, + { &g_Config, achievementSettings, ARRAY_SIZE(achievementSettings), "Achievements" }, +- { &g_Config, upgradeSettings, ARRAY_SIZE(upgradeSettings), "Upgrade" }, + { &g_Config.displayLayoutLandscape, displayLayoutSettings, ARRAY_SIZE(displayLayoutSettings), "DisplayLayout.Landscape", "Graphics" }, // We read the old settings from [Graphics], since most people played in landscape before. + { &g_Config.displayLayoutPortrait, displayLayoutSettings, ARRAY_SIZE(displayLayoutSettings), "DisplayLayout.Portrait"}, // These we don't want to read from the old settings, since for most people, those settings will be bad. + { &g_Config.touchControlsLandscape, touchControlSettings, ARRAY_SIZE(touchControlSettings), "TouchControls.Landscape", "Control" }, // We read the old settings from [Control], since most people played in landscape before. +@@ -1400,8 +1392,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) { + } + } + +- CheckForUpdate(); +- + INFO_LOG(Log::Loader, "Loading controller config: %s", controllerIniFilename_.c_str()); + bSaveSettings = true; + +@@ -1623,117 +1613,6 @@ void Config::NotifyUpdatedCpuCore() { + } + } + +-bool Config::SupportsUpgradeCheck() const { +-#if PPSSPP_PLATFORM(WINDOWS) || PPSSPP_PLATFORM(LINUX) || PPSSPP_PLATFORM(MACOS) || PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS_APP_STORE) +- return true; +-#else +- return false; +-#endif +-} +- +-#if 0 +-// Use for debugging the version check without messing with the server +-#define NEW_VERSION_OVERRIDE "v1.100.3-gaaaaaaaaa" +-constexpr int UPDATE_CHECK_FREQ = 1; +-#else +-constexpr int UPDATE_CHECK_FREQ = 5; +-#endif +- +-void Config::CheckForUpdate() { +- if (!bCheckForNewVersion || !SupportsUpgradeCheck()) { +- return; +- } +- +- const char *gitVer = PPSSPP_GIT_VERSION; +- Version installed(gitVer); +- Version upgrade(sUpgradeVersion); +- const bool versionsValid = installed.IsValid() && upgrade.IsValid(); +- +- // Do this regardless of iRunCount to prevent a silly bug where one might use an older +- // build of PPSSPP, receive an upgrade notice, then start a newer version, and still receive the upgrade notice, +- // even if said newer version is >= the upgrade found online. +- if ((sDismissedVersion == sUpgradeVersion) || (versionsValid && (installed >= upgrade))) { +- sUpgradeMessage.clear(); +- } +- +- // Check for new version on every 10 runs. +- // Sometimes the download may not be finished when the main screen shows (if the user dismisses the +- // splash screen quickly), but then we'll just show the notification next time instead, we store the +- // upgrade number in the ini. +- +- const bool checkThisTime = iRunCount % UPDATE_CHECK_FREQ == 0; +- if (checkThisTime) { +- const char *versionUrl = "http://www.ppsspp.org/version.json"; +- const char *acceptMime = "application/json, text/*; q=0.9, */*; q=0.8"; +- g_DownloadManager.StartDownload(versionUrl, Path(), http::RequestFlags::Default, acceptMime, "version", [this](http::Request &download) { VersionJsonDownloadCompleted(download); }); +- } +-} +- +-void Config::VersionJsonDownloadCompleted(http::Request &download) { +- if (download.ResultCode() != 200) { +- ERROR_LOG(Log::Loader, "Failed to download %s: %d", download.url().c_str(), download.ResultCode()); +- return; +- } +- std::string data; +- download.buffer().TakeAll(&data); +- if (data.empty()) { +- ERROR_LOG(Log::Loader, "Version check: Empty data from server!"); +- return; +- } +- +- json::JsonReader reader(data.c_str(), data.size()); +- const json::JsonGet root = reader.root(); +- if (!root) { +- ERROR_LOG(Log::Loader, "Failed to parse json"); +- return; +- } +- +- std::string version; +- root.getString("version", &version); +- +- #ifdef NEW_VERSION_OVERRIDE +- version = NEW_VERSION_OVERRIDE; +- #endif +- +- const char *gitVer = PPSSPP_GIT_VERSION; +- Version installed(gitVer); +- Version upgrade(version); +- Version dismissed(g_Config.sDismissedVersion); +- +- if (!installed.IsValid()) { +- ERROR_LOG(Log::Loader, "Version check: Local version string invalid. Build problems? %s", PPSSPP_GIT_VERSION); +- return; +- } +- if (!upgrade.IsValid()) { +- ERROR_LOG(Log::Loader, "Version check: Invalid server version: %s", version.c_str()); +- return; +- } +- +- if (installed >= upgrade) { +- INFO_LOG(Log::Loader, "Version check: Already up to date, erasing any upgrade message"); +- g_Config.sUpgradeMessage.clear(); +- g_Config.sUpgradeVersion = upgrade.ToString(); +- g_Config.sDismissedVersion.clear(); +- return; +- } +- +- if (installed < upgrade && dismissed != upgrade) { +- g_Config.sUpgradeMessage = "New version of PPSSPP available!"; +- g_Config.sUpgradeVersion = upgrade.ToString(); +- g_Config.sDismissedVersion.clear(); +- } +-} +- +-bool Config::ShowUpgradeReminder() { +- return !sUpgradeMessage.empty() && !sUpgradeVersion.empty() && sUpgradeVersion != sDismissedVersion; +-} +- +-void Config::DismissUpgrade() { +- INFO_LOG(Log::Loader, "Upgrade dismissed for version %s", sUpgradeVersion.c_str()); +- sDismissedVersion = sUpgradeVersion; +- sUpgradeMessage.clear(); +-} +- + void Config::SetSearchPath(const Path &searchPath) { + searchPath_ = searchPath; + } +diff --git a/Core/Config.h b/Core/Config.h +index 3cb451c..b7f6d10 100644 +--- a/Core/Config.h ++++ b/Core/Config.h +@@ -679,11 +679,6 @@ struct Config : public ConfigBlock { + + Path mountRoot; // Actually, mount as host0. keeping consistent with headless args. + +- // Data for upgrade prompt +- std::string sUpgradeMessage; // The actual message from the server is currently not used, need a translation mechanism. So this just acts as a flag. +- std::string sUpgradeVersion; +- std::string sDismissedVersion; +- + void Load(const char *iniFileName = nullptr, const char *controllerIniFilename = nullptr); + bool Save(const char *saveReason); + void Reload(); +@@ -706,12 +701,6 @@ struct Config : public ConfigBlock { + + void UpdateIniLocation(const char *iniFileName = nullptr, const char *controllerIniFilename = nullptr); + +- bool SupportsUpgradeCheck() const; +- void CheckForUpdate(); +- void VersionJsonDownloadCompleted(http::Request &download); +- void DismissUpgrade(); +- bool ShowUpgradeReminder(); +- + void GetReportingInfo(UrlEncoder &data) const; + + int NextValidBackend(); +diff --git a/Core/MIPS/IR/IRJit.h b/Core/MIPS/IR/IRJit.h +index 4667043..e3af580 100644 +--- a/Core/MIPS/IR/IRJit.h ++++ b/Core/MIPS/IR/IRJit.h +@@ -38,11 +38,6 @@ + // + // #define IR_PROFILING + +-// Try to catch obvious misses of be above rule. +-#if defined(IR_PROFILING) && defined(GOLD) +-#error +-#endif +- + namespace MIPSComp { + + // TODO : Use arena allocators. For now let's just malloc. +diff --git a/Qt/QtMain.cpp b/Qt/QtMain.cpp +index c7d43a3..4e0786d 100644 +--- a/Qt/QtMain.cpp ++++ b/Qt/QtMain.cpp +@@ -262,12 +262,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + return true; + case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR: + return true; // FileUtil.cpp: OpenFileInEditor +- case SYSPROP_APP_GOLD: +-#ifdef GOLD +- return true; +-#else +- return false; +-#endif + case SYSPROP_CAN_JIT: + return true; + case SYSPROP_HAS_KEYBOARD: +diff --git a/Qt/mainwindow.cpp b/Qt/mainwindow.cpp +index cbd9fda..670a1ca 100644 +--- a/Qt/mainwindow.cpp ++++ b/Qt/mainwindow.cpp +@@ -112,7 +112,7 @@ void MainWindow::updateMenus() + int width = (internalPortrait ? 272 : 480) * action->data().toInt(); + int height = (internalPortrait ? 480 : 272) * action->data().toInt(); + if (g_Config.iWindowWidth == width && g_Config.iWindowHeight == height) { +- action->setChecked(true); ++ action->setChecked(true); + break; + } + } +@@ -423,11 +423,6 @@ void MainWindow::forumAct() + QDesktopServices::openUrl(QUrl("https://forums.ppsspp.org/")); + } + +-void MainWindow::goldAct() +-{ +- QDesktopServices::openUrl(QUrl("https://www.ppsspp.org/buygold")); +-} +- + void MainWindow::gitAct() + { + QDesktopServices::openUrl(QUrl("https://github.com/hrydgard/ppsspp/")); +@@ -680,7 +675,6 @@ void MainWindow::createMenus() + MenuTree* helpMenu = new MenuTree(this, menuBar(), QT_TR_NOOP("&Help")); + helpMenu->add(new MenuAction(this, SLOT(websiteAct()), QT_TR_NOOP("Visit www.&ppsspp.org"))); + helpMenu->add(new MenuAction(this, SLOT(forumAct()), QT_TR_NOOP("PPSSPP &forums"))); +- helpMenu->add(new MenuAction(this, SLOT(goldAct()), QT_TR_NOOP("Buy &Gold"))); + helpMenu->add(new MenuAction(this, SLOT(gitAct()), QT_TR_NOOP("Git&Hub"))); + helpMenu->add(new MenuAction(this, SLOT(discordAct()), QT_TR_NOOP("Discord"))); + helpMenu->addSeparator(); +diff --git a/Qt/mainwindow.h b/Qt/mainwindow.h +index 5e735ae..55a180f 100644 +--- a/Qt/mainwindow.h ++++ b/Qt/mainwindow.h +@@ -100,7 +100,7 @@ private slots: + void stopAct(); + void resetAct(); + void switchUMDAct(); +- void displayRotationGroup_triggered(QAction *action) { ++ void displayRotationGroup_triggered(QAction *action) { + DisplayLayoutConfig &config = g_Config.GetDisplayLayoutConfig(g_display.GetDeviceOrientation()); + config.iInternalScreenRotation = action->data().toInt(); + } +@@ -187,7 +187,6 @@ private slots: + // Help + void websiteAct(); + void forumAct(); +- void goldAct(); + void gitAct(); + void discordAct(); + void aboutAct(); +diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp +index 5eea6e5..9799010 100644 +--- a/SDL/SDLMain.cpp ++++ b/SDL/SDLMain.cpp +@@ -438,7 +438,7 @@ bool System_MakeRequest(SystemRequestType type, int requestId, const std::string + case SystemRequestType::SET_WINDOW_TITLE: + { + std::lock_guard<std::mutex> guard(g_mutexWindow); +- const char *app_name = System_GetPropertyBool(SYSPROP_APP_GOLD) ? "PPSSPP Gold" : "PPSSPP"; ++ const char *app_name = "PPSSPP"; + g_windowState.title = param1.empty() ? app_name : param1; + g_windowState.update = true; + return true; +@@ -742,12 +742,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + #endif + case SYSPROP_HAS_KEYBOARD: + return true; +- case SYSPROP_APP_GOLD: +-#ifdef GOLD +- return true; +-#else +- return false; +-#endif + case SYSPROP_CAN_JIT: + return true; + case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR: +@@ -777,9 +771,6 @@ case SYSPROP_HAS_FILE_BROWSER: + #else + return false; + #endif +- // hack for testing - do not commit +- case SYSPROP_USE_IAP: +- return false; + default: + return false; + } +diff --git a/UI/Background.cpp b/UI/Background.cpp +index 73be05b..3d5fb96 100644 +--- a/UI/Background.cpp ++++ b/UI/Background.cpp +@@ -272,7 +272,7 @@ class BouncingIconAnimation : public Animation { + // Draw the image. + float xpos = xbase + dc.GetBounds().x; + float ypos = ybase + dc.GetBounds().y; +- ImageID icon = !color_ix && System_GetPropertyBool(SYSPROP_APP_GOLD) ? ImageID("I_ICON_GOLD") : ImageID("I_ICON"); ++ ImageID icon = ImageID("I_ICON"); + ui_draw2d.DrawImage(icon, xpos, ypos, scale, COLORS[color_ix], ALIGN_CENTER); + dc.Flush(); + +diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp +index 85cd7f7..fa0c330 100644 +--- a/UI/GameSettingsScreen.cpp ++++ b/UI/GameSettingsScreen.cpp +@@ -1439,13 +1439,6 @@ void GameSettingsScreen::CreateSystemSettings(UI::ViewGroup *systemSettings) { + systemSettings->Add(new CheckBox(&g_Config.bCacheFullIsoInRam, sy->T("Cache full ISO in RAM")))->SetEnabled(!PSP_IsInited()); + } + +- CheckBox *checkForUpdate = systemSettings->Add(new CheckBox(&g_Config.bCheckForNewVersion, sy->T("VersionCheck", "Check for new versions of PPSSPP"))); +- checkForUpdate->OnClick.Add([](UI::EventParams &e) { +- // Reset the dismissed version so it will check again. +- if (g_Config.bCheckForNewVersion) { +- g_Config.sDismissedVersion.clear(); +- } +- }); + systemSettings->Add(new CheckBox(&g_Config.bScreenshotsAsPNG, sy->T("Screenshots as PNG"))); + static const char *screenshotModeChoices[] = { "Final processed image", "Raw game image" }; + systemSettings->Add(new PopupMultiChoice(&g_Config.iScreenshotMode, sy->T("Screenshot mode"), screenshotModeChoices, 0, ARRAY_SIZE(screenshotModeChoices), I18NCat::SYSTEM, screenManager())); +diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp +index 8e7ca54..6153025 100644 +--- a/UI/MainScreen.cpp ++++ b/UI/MainScreen.cpp +@@ -57,7 +57,6 @@ + #include "UI/GameSettingsScreen.h" + #include "UI/BaseScreens.h" + #include "UI/ControlMappingScreen.h" +-#include "UI/IAPScreen.h" + #include "UI/RemoteISOScreen.h" + #include "UI/DisplayLayoutScreen.h" + #include "UI/SavedataScreen.h" +@@ -1280,7 +1279,7 @@ class LogoView : public UI::AnchorLayout { + + private: + ImageID GetIconID() const { +- return System_GetPropertyBool(SYSPROP_APP_GOLD) ? ImageID("I_ICON_GOLD") : ImageID("I_ICON"); ++ return ImageID("I_ICON"); + } + + const bool portrait_; +@@ -1302,16 +1301,6 @@ void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool portrait) { + parent->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg); + } + +- if (!System_GetPropertyBool(SYSPROP_APP_GOLD) && (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) != DEVICE_TYPE_VR)) { +- Choice *gold = parent->Add(portrait ? new Choice(ImageID("I_ICON_GOLD"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Buy PPSSPP Gold"))); +- gold->OnClick.Add([this](UI::EventParams &) { +- LaunchBuyGold(this->screenManager()); +- }); +- gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f); +- gold->SetImageScale(0.6f); // for the left-icon in case of vertical. +- gold->SetShine(true); +- } +- + if (!portrait) { + parent->Add(new Spacer(16.0)); + } +@@ -1384,7 +1373,7 @@ void MainScreen::CreateViews() { + if (g_recentFiles.HasAny()) { + tabHolder_->SetCurrentTab(std::clamp(g_Config.iDefaultTab, 0, g_Config.bRemoteTab ? 3 : 2), true); + } else if (g_Config.iMaxRecent > 0) { +- tabHolder_->SetCurrentTab(1, true); ++ tabHolder_->SetCurrentTab(1, true); + } + + if (backFromStore_ || showHomebrewTab) { +@@ -1490,41 +1479,6 @@ void MainScreen::CreateViews() { + } + + root_->SetTag("mainroot"); +- +- if (!g_Config.sUpgradeMessage.empty()) { +- auto di = GetI18NCategory(I18NCat::DIALOG); +- Margins margins(0, 0); +- if (vertical) { +- margins.bottom = ITEM_HEIGHT; +- } +- UI::LinearLayout *upgradeBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, margins)); +- +- UI::Margins textMargins(10, 5); +- UI::Margins buttonMargins(5, 0); +- UI::Drawable solid(0xFFbd9939); +- upgradeBar->SetSpacing(5.0f); +- upgradeBar->SetBG(solid); +- std::string upgradeMessage(di->T("New version of PPSSPP available")); +- if (!vertical) { +- // The version only really fits in the horizontal layout. +- upgradeMessage += ": " + g_Config.sUpgradeVersion; +- } +- upgradeBar->Add(new TextView(upgradeMessage, new LinearLayoutParams(1.0f, UI::Gravity::G_VCENTER, textMargins))); +- upgradeBar->Add(new Choice(di->T("Download"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDownloadUpgrade); +- Choice *dismiss = upgradeBar->Add(new Choice("", ImageID("I_CROSS"), new LinearLayoutParams(buttonMargins))); +- dismiss->OnClick.Add([this](UI::EventParams &e) { +- g_Config.DismissUpgrade(); +- g_Config.Save("dismissupgrade"); +- RecreateViews(); +- }); +- +- // Slip in under root_ +- LinearLayout *newRoot = new LinearLayout(ORIENT_VERTICAL); +- newRoot->Add(root_); +- newRoot->Add(upgradeBar); +- root_->ReplaceLayoutParams(new LinearLayoutParams(1.0)); +- root_ = newRoot; +- } + } + + bool MainScreen::key(const KeyInput &key) { +@@ -1565,26 +1519,6 @@ void MainScreen::OnAllowStorage(UI::EventParams &e) { + System_AskForPermission(SYSTEM_PERMISSION_STORAGE); + } + +-// See Config::SupportsUpgradeCheck() if you add more platforms. +-void MainScreen::OnDownloadUpgrade(UI::EventParams &e) { +-#if PPSSPP_PLATFORM(ANDROID) +- // Go to app store +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "market://details?id=org.ppsspp.ppssppgold"); +- } else { +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "market://details?id=org.ppsspp.ppsspp"); +- } +-#elif PPSSPP_PLATFORM(WINDOWS) +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/download"); +-#elif PPSSPP_PLATFORM(IOS_APP_STORE) +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "itms-apps://itunes.apple.com/app/id6496972903"); +-#else +- // Go directly to ppsspp.org and let the user sort it out +- // (for details and in case downloads doesn't have their platform.) +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/"); +-#endif +-} +- + void MainScreen::sendMessage(UIMessage message, const char *value) { + // Always call the base class method first to handle the most common messages. + UIBaseScreen::sendMessage(message, value); +@@ -1732,24 +1666,6 @@ void MainScreen::OnCredits(UI::EventParams &e) { + screenManager()->push(new CreditsScreen()); + } + +-void LaunchBuyGold(ScreenManager *screenManager) { +- if (System_GetPropertyBool(SYSPROP_USE_IAP)) { +- screenManager->push(new IAPScreen(true)); +- } else if (System_GetPropertyBool(SYSPROP_USE_APP_STORE)) { +-#if PPSSPP_PLATFORM(ANDROID) +- LaunchPlayStoreOrWebsiteGold(); +-#else +- screenManager->push(new IAPScreen(false)); +-#endif +- } else { +-#if PPSSPP_PLATFORM(IOS_APP_STORE) +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/buygold_ios"); +-#else +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/buygold"); +-#endif +- } +-} +- + void MainScreen::OnPPSSPPOrg(UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org"); + } +@@ -1785,9 +1701,6 @@ void MainScreen::dialogFinished(const Screen *dialog, DialogResult result) { + if (gameBrowsers_.size() >= 2) { + gameBrowsers_[1]->RequestRefresh(); + } +- } else if (tag == "IAP") { +- // Gold status may have changed. +- RecreateViews(); + } else if (tag == "Upload") { + // Files may have been uploaded. + RecreateViews(); +diff --git a/UI/MainScreen.h b/UI/MainScreen.h +index 49d743c..457ccd7 100644 +--- a/UI/MainScreen.h ++++ b/UI/MainScreen.h +@@ -166,7 +166,6 @@ class MainScreen : public UIBaseScreen { + void OnCredits(UI::EventParams &e); + void OnPPSSPPOrg(UI::EventParams &e); + void OnForums(UI::EventParams &e); +- void OnDownloadUpgrade(UI::EventParams &e); + void OnAllowStorage(UI::EventParams &e); + + UI::TabHolder *tabHolder_ = nullptr; +@@ -218,5 +217,3 @@ class GridSettingsPopupScreen : public UI::PopupScreen { + const float MAX_GAME_GRID_SCALE = 3.0f; + const float MIN_GAME_GRID_SCALE = 0.8f; + }; +- +-void LaunchBuyGold(ScreenManager *screenManager); +diff --git a/UI/MemStickScreen.cpp b/UI/MemStickScreen.cpp +index 69b9d3d..8a02aff 100644 +--- a/UI/MemStickScreen.cpp ++++ b/UI/MemStickScreen.cpp +@@ -123,12 +123,10 @@ static void AddExplanation(UI::ViewGroup *viewGroup, MemStickScreen::Choice choi + case MemStickScreen::CHOICE_STORAGE_ROOT: + // Old school choice + holder->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP"), flags, false))->SetBullet(true); +- holder->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold"), flags, false))->SetBullet(true); + holder->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access"), flags, false))->SetBullet(true); + break; + case MemStickScreen::CHOICE_BROWSE_FOLDER: + holder->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP"), flags, false))->SetBullet(true); +- holder->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold"), flags, false))->SetBullet(true); + #if !PPSSPP_PLATFORM(UWP) + holder->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access"), flags, false))->SetBullet(true); + #endif +@@ -136,13 +134,8 @@ static void AddExplanation(UI::ViewGroup *viewGroup, MemStickScreen::Choice choi + case MemStickScreen::CHOICE_PRIVATE_DIRECTORY: + // Consider https://www.compart.com/en/unicode/U+26A0 (unicode warning sign?)? or a graphic? + holder->Add(new TextView(iz->T("DataWillBeLostOnUninstall", "Warning! Data will be lost when you uninstall PPSSPP!"), flags, false))->SetBullet(true); +- holder->Add(new TextView(iz->T("DataCannotBeShared", "Data CANNOT be shared between PPSSPP regular/Gold!"), flags, false))->SetBullet(true); + #if !PPSSPP_PLATFORM(UWP) +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- holder->Add(new TextView(iz->T("USBAccessThroughGold", "USB access through Android/data/org.ppsspp.ppssppgold/files"), flags, false))->SetBullet(true); +- } else { +- holder->Add(new TextView(iz->T("USBAccessThrough", "USB access through Android/data/org.ppsspp.ppsspp/files"), flags, false))->SetBullet(true); +- } ++ holder->Add(new TextView(iz->T("USBAccessThrough", "USB access through Android/data/org.ppsspp.ppsspp/files"), flags, false))->SetBullet(true); + #endif + break; + case MemStickScreen::CHOICE_SET_MANUAL: +diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp +index 1dedbef..9c4f965 100644 +--- a/UI/MiscScreens.cpp ++++ b/UI/MiscScreens.cpp +@@ -441,12 +441,7 @@ void LogoScreen::DrawForeground(UIContext &dc) { + + // Manually formatting UTF-8 is fun. \xXX doesn't work everywhere. + snprintf(temp, sizeof(temp), "%s Henrik Rydg%c%crd", cr->T_cstr("created", "Created by"), 0xC3, 0xA5); +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- UI::DrawIconShine(dc, Bounds::FromCenter(bounds.centerX() - 125, startY, 60.0f), 0.7f, true); +- dc.Draw()->DrawImage(ImageID("I_ICON_GOLD"), bounds.centerX() - 125, startY, 1.2f, 0xFFFFFFFF, ALIGN_CENTER); +- } else { +- dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 125, startY, 1.2f, 0xFFFFFFFF, ALIGN_CENTER); +- } ++ dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 125, startY, 1.2f, 0xFFFFFFFF, ALIGN_CENTER); + dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 45, startY, 1.5f, 0xFFFFFFFF, ALIGN_CENTER); + //dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", bounds.w / 2, bounds.h / 2 - 30, textColor, ALIGN_CENTER); + dc.SetFontScale(1.0f, 1.0f); +@@ -512,15 +507,6 @@ void CreditsScreen::CreateDialogViews(UI::ViewGroup *parent) { + + const bool portrait = GetDeviceOrientation() == DeviceOrientation::Portrait; + +- const bool gold = System_GetPropertyBool(SYSPROP_APP_GOLD); +- +- /* +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- root_->Add(new ShinyIcon(ImageID("I_ICON_GOLD"), new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, 10, 10, NONE, NONE, false)))->SetScale(1.5f); +- } else { +- root_->Add(new ImageView(ImageID("I_ICON"), "", IS_DEFAULT, new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, 10, 10, NONE, NONE, false)))->SetScale(1.5f); +- }*/ +- + constexpr float columnWidth = 265.0f; + + LinearLayout *left; +@@ -544,18 +530,6 @@ void CreditsScreen::CreateDialogViews(UI::ViewGroup *parent) { + } + + int rightYOffset = 0; +- if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- ScreenManager *sm = screenManager(); +- Choice *gold = new Choice(mm->T("Buy PPSSPP Gold")); +- gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f); +- gold->SetImageScale(0.6f); // for the left-icon in case of vertical. +- gold->SetShine(true); +- +- left->Add(gold)->OnClick.Add([sm](UI::EventParams) { +- LaunchBuyGold(sm); +- }); +- rightYOffset = 74; +- } + left->Add(new Choice(cr->T("PPSSPP Forums"), ImageID("I_LINK_OUT")))->OnClick.Add([](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://forums.ppsspp.org"); + }); +@@ -611,7 +585,7 @@ void CreditsScroller::Draw(UIContext &dc) { + specialthankssolarmystic += ')'; + + std::string_view credits[] = { +- System_GetPropertyBool(SYSPROP_APP_GOLD) ? "PPSSPP Gold" : "PPSSPP", ++ "PPSSPP", + "", + cr->T("title", "A fast and portable PSP emulator"), + "", +@@ -735,11 +709,7 @@ void CreditsScroller::Draw(UIContext &dc) { + + // TODO: This is kinda ugly, done on every frame... + char temp[256]; +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- snprintf(temp, sizeof(temp), "PPSSPP Gold %s", PPSSPP_GIT_VERSION); +- } else { +- snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION); +- } ++ snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION); + credits[0] = (const char *)temp; + + dc.Begin(); +diff --git a/UI/ReportScreen.cpp b/UI/ReportScreen.cpp +index 02080aa..7a0e773 100644 +--- a/UI/ReportScreen.cpp ++++ b/UI/ReportScreen.cpp +@@ -478,11 +478,7 @@ void ReportFinishScreen::ShowSuggestions() { + bool valid = false; + for (const auto &item : suggestions) { + std::string_view suggestion = ""; +- if (item == "Upgrade") { +- suggestion = rp->T("SuggestionUpgrade", "Upgrade to a newer PPSSPP build"); +- } else if (item == "Downgrade") { +- suggestion = rp->T("SuggestionDowngrade", "Downgrade to an older PPSSPP version (please report this bug)"); +- } else if (item == "VerifyDisc") { ++ if (item == "VerifyDisc") { + suggestion = rp->T("SuggestionVerifyDisc", "Check your ISO is a good copy of your disc"); + } else if (item == "Config:CPUSpeed:0") { + suggestion = rp->T("SuggestionCPUSpeed0", "Disable locked CPU speed setting"); +@@ -500,11 +496,6 @@ void ReportFinishScreen::ShowSuggestions() { + resultItems_->Add(new TextView(std::string(" - ") + std::string(suggestion), FLAG_WRAP_TEXT, false))->SetShadow(true); + } + } +- +- if (!valid) { +- // No actual valid versions. Let's just say upgrade and hope the server's not broken. +- resultItems_->Add(new TextView(std::string(" - ") + rp->T_cstr("SuggestionUpgrade", "Upgrade to a newer PPSSPP build"), FLAG_WRAP_TEXT, false))->SetShadow(true); +- } + } + } + +diff --git a/UI/UIAtlas.cpp b/UI/UIAtlas.cpp +index 92b1d3a..50199d2 100644 +--- a/UI/UIAtlas.cpp ++++ b/UI/UIAtlas.cpp +@@ -75,7 +75,6 @@ static const ImageMeta imageIDs[] = { + {"I_GRID", false}, + {"I_LOGO", false}, + {"I_ICON", false}, +- {"I_ICON_GOLD", false}, + {"I_FOLDER", false}, + {"I_UP_DIRECTORY", false}, + {"I_GEAR", false}, +diff --git a/UWP/PPSSPP_UWPMain.cpp b/UWP/PPSSPP_UWPMain.cpp +index a89ee1f..eed5bdf 100644 +--- a/UWP/PPSSPP_UWPMain.cpp ++++ b/UWP/PPSSPP_UWPMain.cpp +@@ -478,12 +478,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + return true; + case SYSPROP_HAS_ACCELEROMETER: + return IsMobile(); +- case SYSPROP_APP_GOLD: +-#ifdef GOLD +- return true; +-#else +- return false; +-#endif + case SYSPROP_CAN_JIT: + return true; + case SYSPROP_HAS_KEYBOARD: +@@ -705,7 +699,7 @@ std::string GetCPUBrandString() { + winrt::hstring dev_filter = L"System.Devices.DeviceInstanceID:=\"" + cpu_id + L"\""; + + try { +- auto collection = winrt::Windows::Devices::Enumeration::DeviceInformation::FindAllAsync(dev_filter, {}, ++ auto collection = winrt::Windows::Devices::Enumeration::DeviceInformation::FindAllAsync(dev_filter, {}, + winrt::Windows::Devices::Enumeration::DeviceInformationKind::Device).get(); + if (collection.Size() > 0) { + cpu_name = collection.GetAt(0).Name(); +diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp +index 856e39d..cc22d2b 100644 +--- a/Windows/MainWindowMenu.cpp ++++ b/Windows/MainWindowMenu.cpp +@@ -170,10 +170,6 @@ namespace MainWindow { + // Don't need to update here, happens later. + + HMENU helpMenu = GetSubmenuById(hMenu, ID_HELP_MENU); +- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { +- RemoveMenu(helpMenu, ID_HELP_BUYGOLD, MF_BYCOMMAND); +- } +- + HMENU hMenuOptions = GetSubmenuById(hMenu, ID_OPTIONS_MENU); + g_hMenuBackend = GetSubmenuById(hMenuOptions, ID_OPTIONS_BACKEND_MENU); + } +@@ -310,7 +306,6 @@ namespace MainWindow { + // Help menu: it's translated in CreateHelpMenu. + TranslateMenuItem(menu, ID_HELP_OPENWEBSITE); + TranslateMenuItem(menu, ID_HELP_OPENFORUM); +- TranslateMenuItem(menu, ID_HELP_BUYGOLD); + TranslateMenuItem(menu, ID_HELP_GITHUB); + TranslateMenuItem(menu, ID_HELP_DISCORD); + TranslateMenuItem(menu, ID_HELP_ABOUT); +@@ -933,10 +928,6 @@ namespace MainWindow { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/"); + break; + +- case ID_HELP_BUYGOLD: +- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/buygold"); +- break; +- + case ID_HELP_OPENFORUM: + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://forums.ppsspp.org/"); + break; +diff --git a/Windows/main.cpp b/Windows/main.cpp +index c7ad098..0280cb9 100644 +--- a/Windows/main.cpp ++++ b/Windows/main.cpp +@@ -450,12 +450,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + return true; + case SYSPROP_HAS_LOGIN_DIALOG: + return true; +- case SYSPROP_APP_GOLD: +-#ifdef GOLD +- return true; +-#else +- return false; +-#endif + case SYSPROP_CAN_JIT: + return true; + case SYSPROP_HAS_KEYBOARD: +@@ -478,8 +472,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + #endif + case SYSPROP_HAS_ACCELEROMETER: + return g_InputManager.AnyAccelerometer(); +- case SYSPROP_USE_IAP: +- return false; // This should never be set to true on Windows. Only for testing/dev. + case SYSPROP_USE_APP_STORE: + return false; + default: +@@ -654,7 +646,7 @@ bool System_MakeRequest(SystemRequestType type, int requestId, const std::string + } + case SystemRequestType::SET_WINDOW_TITLE: + { +- const char *name = System_GetPropertyBool(SYSPROP_APP_GOLD) ? "PPSSPP Gold " : "PPSSPP "; ++ const char *name = "PPSSPP "; + std::wstring winTitle = ConvertUTF8ToWString(std::string(name) + PPSSPP_GIT_VERSION); + if (!param1.empty()) { + winTitle.append(ConvertUTF8ToWString(" - " + param1)); +diff --git a/Windows/resource.h b/Windows/resource.h +index 0dee92b..602b2fb 100644 +--- a/Windows/resource.h ++++ b/Windows/resource.h +@@ -353,7 +353,6 @@ + // Dummy option to let the buffered rendering hotkey cycle through all the options. + #define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500 + #define IDC_STEPOUT 40501 +-#define ID_HELP_BUYGOLD 40502 + + #define IDC_STATIC -1 + +diff --git a/ios/main.mm b/ios/main.mm +index 0407b8b..13aace6 100644 +--- a/ios/main.mm ++++ b/ios/main.mm +@@ -379,16 +379,6 @@ bool System_GetPropertyBool(SystemProperty prop) { + case SYSPROP_KEYBOARD_IS_SOFT: + // If a hardware keyboard is connected, and we add support, we could return false here. + return true; +- case SYSPROP_APP_GOLD: +-#ifdef GOLD +- // This is deprecated. +- return true; +-#elif PPSSPP_PLATFORM(IOS_APP_STORE) +- // Check the IAP status. +- return [[IAPManager sharedIAPManager] isGoldUnlocked]; +-#else +- return false; +-#endif + case SYSPROP_USE_IAP: + #if PPSSPP_PLATFORM(IOS_APP_STORE) && defined(USE_IAP) + return true; +@@ -701,4 +691,3 @@ int main(int argc, char *argv[]) { + return UIApplicationMain(argc, argv, NSStringFromClass([PPSSPPUIApplication class]), NSStringFromClass([AppDelegate class])); + } + } +- +-- +2.52.0 + |
