Compare commits
46 Commits
update-ico
...
interval-z
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4dcbc1c03c | ||
|
|
5b019a81a7 | ||
|
|
83332316aa | ||
|
|
3141019fcd | ||
|
|
4cc9aa691d | ||
|
|
d96ab0df6a | ||
|
|
c03f7cf284 | ||
|
|
750fecda18 | ||
|
|
1f422a8f70 | ||
|
|
90877dfc85 | ||
|
|
f882ff72eb | ||
|
|
55cc4d5ede | ||
|
|
09f03f5640 | ||
|
|
7a98ee4ead | ||
|
|
dfd042c809 | ||
|
|
16ca7851c5 | ||
|
|
0eed5100f9 | ||
|
|
8d3b33c3aa | ||
|
|
e3c942b209 | ||
|
|
1b1e186a58 | ||
|
|
e75ecfd4a0 | ||
|
|
18135424df | ||
|
|
1d2b9de496 | ||
|
|
fe8017734b | ||
|
|
33ee9de85a | ||
|
|
e22756160c | ||
|
|
a33956f738 | ||
|
|
4642e82ca7 | ||
|
|
97054357d2 | ||
|
|
941caf31ce | ||
|
|
c72144abad | ||
|
|
d656e347c8 | ||
|
|
8859809ebd | ||
|
|
318998cbb5 | ||
|
|
f58097e814 | ||
|
|
1efef85352 | ||
|
|
ea0e5d630c | ||
|
|
9e610ea098 | ||
|
|
41af6ea645 | ||
|
|
91b0432591 | ||
|
|
46239dafa1 | ||
|
|
bf23921f07 | ||
|
|
e63f71c787 | ||
|
|
027085e5ba | ||
|
|
f40025fd9b | ||
|
|
ed39ec4738 |
@@ -1,21 +1,121 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
export NDK_CCACHE=$(which ccache)
|
NUM_JOBS=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)
|
||||||
|
export CMAKE_BUILD_PARALLEL_LEVEL="${NUM_JOBS}"
|
||||||
|
ARTIFACTS_DIR="$PWD/artifacts"
|
||||||
|
|
||||||
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
: "${CCACHE:=false}"
|
||||||
|
RETURN=0
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: $0 [-t|--target FLAVOR] [-b|--build-type BUILD_TYPE]
|
||||||
|
[-h|--help] [-r|--release] [extra options]
|
||||||
|
|
||||||
|
Build script for Android.
|
||||||
|
Associated variables can be set outside the script,
|
||||||
|
and will apply both to this script and the packaging script.
|
||||||
|
bool values are "true" or "false"
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-r, --release Enable update checker. If set, sets the DEVEL bool variable to false.
|
||||||
|
By default, DEVEL is true.
|
||||||
|
-t, --target <FLAVOR> Build flavor (variable: TARGET)
|
||||||
|
Valid values are: legacy, optimized, standard, chromeos
|
||||||
|
Default: standard
|
||||||
|
-b, --build-type <TYPE> Build type (variable: TYPE)
|
||||||
|
Valid values are: Release, RelWithDebInfo, Debug
|
||||||
|
Default: Debug
|
||||||
|
|
||||||
|
Extra arguments are passed to CMake (e.g. -DCMAKE_OPTION_NAME=VALUE)
|
||||||
|
Set the CCACHE variable to "true" to enable build caching.
|
||||||
|
The APK and AAB will be output into "artifacts".
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit "$RETURN"
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "-- ! $*" >&2
|
||||||
|
RETURN=1 usage
|
||||||
|
}
|
||||||
|
|
||||||
|
target() {
|
||||||
|
[ -z "$1" ] && die "You must specify a valid target."
|
||||||
|
|
||||||
|
TARGET="$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
type() {
|
||||||
|
[ -z "$1" ] && die "You must specify a valid type."
|
||||||
|
|
||||||
|
TYPE="$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
-r|--release) DEVEL=false ;;
|
||||||
|
-t|--target) target "$2"; shift ;;
|
||||||
|
-b|--build-type) type "$2"; shift ;;
|
||||||
|
-h|--help) usage ;;
|
||||||
|
*) break ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
: "${TARGET:=standard}"
|
||||||
|
: "${TYPE:=Release}"
|
||||||
|
: "${DEVEL:=true}"
|
||||||
|
|
||||||
|
TARGET_LOWER=$(echo "$TARGET" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
case "$TARGET_LOWER" in
|
||||||
|
legacy) FLAVOR=Legacy ;;
|
||||||
|
optimized) FLAVOR=GenshinSpoof ;;
|
||||||
|
standard) FLAVOR=Mainline ;;
|
||||||
|
chromeos) FLAVOR=ChromeOS ;;
|
||||||
|
*) die "Invalid build flavor $TARGET."
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$TYPE" in
|
||||||
|
RelWithDebInfo|Release|Debug) ;;
|
||||||
|
*) die "Invalid build type $TYPE."
|
||||||
|
esac
|
||||||
|
|
||||||
|
LOWER_FLAVOR=$(echo "$FLAVOR" | sed 's/./\L&/')
|
||||||
|
LOWER_TYPE=$(echo "$TYPE" | sed 's/./\L&/')
|
||||||
|
|
||||||
|
if [ -n "${ANDROID_KEYSTORE_B64}" ]; then
|
||||||
export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks"
|
export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks"
|
||||||
base64 --decode <<< "${ANDROID_KEYSTORE_B64}" > "${ANDROID_KEYSTORE_FILE}"
|
echo "${ANDROID_KEYSTORE_B64}" | base64 --decode > "${ANDROID_KEYSTORE_FILE}"
|
||||||
|
SHA1SUM=$(keytool -list -v -storepass "${ANDROID_KEYSTORE_PASS}" -keystore "${ANDROID_KEYSTORE_FILE}" | grep SHA1 | cut -d " " -f3)
|
||||||
|
echo "-- Keystore SHA1 is ${SHA1SUM}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd src/android
|
cd src/android
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
|
|
||||||
./gradlew assembleMainlineRelease
|
set -- "$@" -DUSE_CCACHE="${CCACHE}"
|
||||||
./gradlew bundleMainlineRelease
|
[ "$DEVEL" != "true" ] && set -- "$@" -DENABLE_UPDATE_CHECKER=ON
|
||||||
|
|
||||||
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
|
echo "-- building..."
|
||||||
|
|
||||||
|
./gradlew "copy${FLAVOR}${TYPE}Outputs" \
|
||||||
|
-Dorg.gradle.caching="${CCACHE}" \
|
||||||
|
-Dorg.gradle.parallel="${CCACHE}" \
|
||||||
|
-Dorg.gradle.workers.max="${NUM_JOBS}" \
|
||||||
|
-PYUZU_ANDROID_ARGS="$*" \
|
||||||
|
--info
|
||||||
|
|
||||||
|
if [ -n "${ANDROID_KEYSTORE_B64}" ]; then
|
||||||
rm "${ANDROID_KEYSTORE_FILE}"
|
rm "${ANDROID_KEYSTORE_FILE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "-- Done! APK and AAB artifacts are in ${ARTIFACTS_DIR}"
|
||||||
|
|
||||||
|
ls -l "${ARTIFACTS_DIR}/"
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
|
||||||
GITREV="$(git show -s --format='%h')"
|
|
||||||
ARTIFACTS_DIR="$PWD/artifacts"
|
|
||||||
mkdir -p "${ARTIFACTS_DIR}/"
|
|
||||||
|
|
||||||
REV_NAME="eden-android-${GITDATE}-${GITREV}"
|
|
||||||
BUILD_FLAVOR="mainline"
|
|
||||||
BUILD_TYPE_LOWER="release"
|
|
||||||
BUILD_TYPE_UPPER="Release"
|
|
||||||
|
|
||||||
cp src/android/app/build/outputs/apk/"${BUILD_FLAVOR}/${BUILD_TYPE_LOWER}/app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.apk" \
|
|
||||||
"${ARTIFACTS_DIR}/${REV_NAME}.apk" || echo "APK not found"
|
|
||||||
|
|
||||||
cp src/android/app/build/outputs/bundle/"${BUILD_FLAVOR}${BUILD_TYPE_UPPER}"/"app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.aab" \
|
|
||||||
"${ARTIFACTS_DIR}/${REV_NAME}.aab" || echo "AAB not found"
|
|
||||||
|
|
||||||
ls -la "${ARTIFACTS_DIR}/"
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# specify full path if dupes may exist
|
# specify full path if dupes may exist
|
||||||
EXCLUDE_FILES="CPM.cmake CPMUtil.cmake GetSCMRev.cmake renderdoc_app.h tools/cpm tools/shellcheck.sh tools/update-cpm.sh tools/windows/vcvarsall.sh externals/stb externals/glad externals/getopt externals/gamemode externals/FidelityFX-FSR externals/demangle externals/bc_decoder"
|
EXCLUDE_FILES="CPM.cmake CPMUtil.cmake GetSCMRev.cmake renderdoc_app.h tools/cpm tools/shellcheck.sh tools/update-cpm.sh tools/windows/vcvarsall.sh externals/stb externals/glad externals/getopt externals/gamemode externals/FidelityFX-FSR externals/demangle externals/bc_decoder externals/cmake-modules"
|
||||||
|
|
||||||
# license header constants, please change when needed :))))
|
# license header constants, please change when needed :))))
|
||||||
YEAR=2025
|
YEAR=2025
|
||||||
|
|||||||
@@ -1,3 +1,16 @@
|
|||||||
|
diff --git a/library/aesni.h b/library/aesni.h
|
||||||
|
index 754c984c79..59e27afd3e 100644
|
||||||
|
--- a/library/aesni.h
|
||||||
|
+++ b/library/aesni.h
|
||||||
|
@@ -35,7 +35,7 @@
|
||||||
|
/* GCC-like compilers: currently, we only support intrinsics if the requisite
|
||||||
|
* target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2`
|
||||||
|
* or `clang -maes -mpclmul`). */
|
||||||
|
-#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__)
|
||||||
|
+#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
#define MBEDTLS_AESNI_HAVE_INTRINSICS
|
||||||
|
#endif
|
||||||
|
/* For 32-bit, we only support intrinsics */
|
||||||
diff --git a/library/aesni.c b/library/aesni.c
|
diff --git a/library/aesni.c b/library/aesni.c
|
||||||
index 2857068..3e104ab 100644
|
index 2857068..3e104ab 100644
|
||||||
--- a/library/aesni.c
|
--- a/library/aesni.c
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 1811c42..bac9098 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-cmake_minimum_required(VERSION 2.6)
|
|
||||||
+cmake_minimum_required(VERSION 3.5)
|
|
||||||
if(TEST_CPP)
|
|
||||||
project("mbed TLS" C CXX)
|
|
||||||
else()
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/library/aesni.h b/library/aesni.h
|
|
||||||
index 754c984c79..59e27afd3e 100644
|
|
||||||
--- a/library/aesni.h
|
|
||||||
+++ b/library/aesni.h
|
|
||||||
@@ -35,7 +35,7 @@
|
|
||||||
/* GCC-like compilers: currently, we only support intrinsics if the requisite
|
|
||||||
* target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2`
|
|
||||||
* or `clang -maes -mpclmul`). */
|
|
||||||
-#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__)
|
|
||||||
+#if defined(__GNUC__) || defined(__clang__)
|
|
||||||
#define MBEDTLS_AESNI_HAVE_INTRINSICS
|
|
||||||
#endif
|
|
||||||
/* For 32-bit, we only support intrinsics */
|
|
||||||
20
.patch/mbedtls/0002-arm64-aes-fix.patch
Normal file
20
.patch/mbedtls/0002-arm64-aes-fix.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/library/common.h b/library/common.h
|
||||||
|
index 50f2a29..c60d9dc 100644
|
||||||
|
--- a/library/common.h
|
||||||
|
+++ b/library/common.h
|
||||||
|
@@ -19,11 +19,11 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
-#if defined(__ARM_NEON)
|
||||||
|
-#include <arm_neon.h>
|
||||||
|
+#if defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64)
|
||||||
|
+#include <arm64_neon.h.h>
|
||||||
|
#define MBEDTLS_HAVE_NEON_INTRINSICS
|
||||||
|
-#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64)
|
||||||
|
-#include <arm64_neon.h>
|
||||||
|
+#elif defined(__ANDROID__) || defined(__ARM_NEON)
|
||||||
|
+#include <arm_neon.h>
|
||||||
|
#define MBEDTLS_HAVE_NEON_INTRINSICS
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -14,6 +14,7 @@ License: GPL-2.0-or-later
|
|||||||
|
|
||||||
Files: dist/qt_themes/default/icons/256x256/eden.png
|
Files: dist/qt_themes/default/icons/256x256/eden.png
|
||||||
dist/qt_themes/default/icons/256x256/eden_named.png
|
dist/qt_themes/default/icons/256x256/eden_named.png
|
||||||
|
dist/Assets.car
|
||||||
dist/yuzu.bmp
|
dist/yuzu.bmp
|
||||||
dist/eden.icns
|
dist/eden.icns
|
||||||
dist/eden.ico
|
dist/eden.ico
|
||||||
|
|||||||
391
CMakeLists.txt
391
CMakeLists.txt
@@ -5,73 +5,23 @@ cmake_minimum_required(VERSION 3.22)
|
|||||||
|
|
||||||
project(yuzu)
|
project(yuzu)
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
|
||||||
set(PLATFORM_SUN ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
||||||
set(PLATFORM_FREEBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
|
||||||
set(PLATFORM_OPENBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
|
||||||
set(PLATFORM_NETBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
|
|
||||||
set(PLATFORM_DRAGONFLYBSD ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
|
||||||
set(PLATFORM_HAIKU ON)
|
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
||||||
set(PLATFORM_LINUX ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# dumb heuristic to detect msys2
|
|
||||||
if (CMAKE_COMMAND MATCHES "msys64")
|
|
||||||
set(PLATFORM_MSYS ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
set(CXX_CLANG ON)
|
|
||||||
if (MSVC)
|
|
||||||
set(CXX_CLANG_CL ON)
|
|
||||||
endif()
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set(CXX_GCC ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
|
||||||
set(CXX_CL ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
|
||||||
set(CXX_ICC ON)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
|
||||||
set(CXX_APPLE ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
||||||
|
|
||||||
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/11112
|
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
||||||
# This works totally fine on MinGW64, but not CLANG{,ARM}64
|
|
||||||
if(MINGW AND CXX_CLANG)
|
|
||||||
set(CMAKE_SYSTEM_VERSION 10.0.0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# NB: this does not account for SPARC
|
include(DetectPlatform)
|
||||||
# If you get Eden working on SPARC, please shoot crueter@crueter.xyz multiple emails
|
include(DetectArchitecture)
|
||||||
# and you will be hailed for eternity
|
include(DefaultConfig)
|
||||||
if (PLATFORM_SUN)
|
include(DownloadExternals)
|
||||||
# Terrific Solaris pkg shenanigans
|
include(CMakeDependentOption)
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
include(CTest)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
include(CPMUtil)
|
||||||
|
|
||||||
# Amazing - absolutely incredible
|
DetectArchitecture()
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
|
||||||
|
|
||||||
# For some mighty reason, doing a normal release build sometimes may not trigger
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
# the proper -O3 switch to materialize
|
message(FATAL_ERROR "Architecture didn't make it out of scope, did you delete DetectArchitecture.cmake?")
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
|
||||||
endif()
|
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Needed for FFmpeg w/ VAAPI and DRM
|
# Needed for FFmpeg w/ VAAPI and DRM
|
||||||
@@ -90,34 +40,10 @@ if (PLATFORM_NETBSD)
|
|||||||
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MSYS2 utilities
|
|
||||||
if (PLATFORM_MSYS)
|
|
||||||
include(FixMsysPaths)
|
|
||||||
# really, really dumb heuristic to detect what environment we are in
|
|
||||||
macro(system var)
|
|
||||||
if (CMAKE_COMMAND MATCHES ${var})
|
|
||||||
set(MSYSTEM ${var})
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
system(mingw64)
|
|
||||||
system(clang64)
|
|
||||||
system(clangarm64)
|
|
||||||
system(ucrt64)
|
|
||||||
|
|
||||||
if (NOT DEFINED MSYSTEM)
|
|
||||||
set(MSYSTEM msys2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# we (generally) want to prioritize environment-specific binaries if possible
|
|
||||||
# some, like autoconf, are not present on environments besides msys2 though
|
|
||||||
set(CMAKE_PROGRAM_PATH C:/msys64/${MSYSTEM}/bin C:/msys64/usr/bin)
|
|
||||||
set(ENV{PKG_CONFIG_PATH} C:/msys64/${MSYSTEM}/lib/pkgconfig)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# static stuff
|
# static stuff
|
||||||
option(YUZU_STATIC_BUILD "Use static libraries and executables if available" OFF)
|
option(YUZU_STATIC_BUILD "Use static libraries and executables if available" OFF)
|
||||||
|
|
||||||
|
# TODO: StaticBuild.cmake
|
||||||
if (YUZU_STATIC_BUILD)
|
if (YUZU_STATIC_BUILD)
|
||||||
include(StaticQtLibs)
|
include(StaticQtLibs)
|
||||||
|
|
||||||
@@ -128,9 +54,6 @@ if (YUZU_STATIC_BUILD)
|
|||||||
## find .a libs first (static, usually)
|
## find .a libs first (static, usually)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||||
|
|
||||||
## some libraries define a Library::Name_static alternative ##
|
|
||||||
set(YUZU_STATIC_SUFFIX _static)
|
|
||||||
|
|
||||||
## some libraries use CMAKE_IMPORT_LIBRARY_SUFFIX e.g. Harfbuzz ##
|
## some libraries use CMAKE_IMPORT_LIBRARY_SUFFIX e.g. Harfbuzz ##
|
||||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
|
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
|
||||||
|
|
||||||
@@ -161,109 +84,25 @@ if (YUZU_STATIC_BUILD)
|
|||||||
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
|
|
||||||
set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF)
|
set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF)
|
||||||
|
|
||||||
|
## some libraries define a Library::Name_static alternative ##
|
||||||
|
set(MBEDTLS_LIB_SUFFIX _static)
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
# these libs do not properly provide static libs/let you do it with cmake
|
|
||||||
set(YUZU_USE_CPM ON)
|
set(YUZU_USE_CPM ON)
|
||||||
|
|
||||||
set(YUZU_USE_BUNDLED_FFMPEG ON)
|
set(YUZU_USE_BUNDLED_FFMPEG ON)
|
||||||
set(YUZU_USE_BUNDLED_SDL2 ON)
|
set(YUZU_USE_BUNDLED_SDL2 ON)
|
||||||
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
set(YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
|
|
||||||
# IMPORTED_IMPLIB not set for imported target
|
# these libs do not properly provide static libs/let you do it with cmake
|
||||||
# TODO(crueter): wtf
|
|
||||||
set(fmt_FORCE_BUNDLED ON)
|
set(fmt_FORCE_BUNDLED ON)
|
||||||
set(SPIRV-Tools_FORCE_BUNDLED ON)
|
set(SPIRV-Tools_FORCE_BUNDLED ON)
|
||||||
set(SPIRV-Headers_FORCE_BUNDLED ON)
|
set(SPIRV-Headers_FORCE_BUNDLED ON)
|
||||||
set(zstd_FORCE_BUNDLED ON)
|
set(zstd_FORCE_BUNDLED ON)
|
||||||
|
set(MbedTLS_FORCE_BUNDLED ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Detect current compilation architecture and create standard definitions
|
|
||||||
# =======================================================================
|
|
||||||
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
function(detect_architecture symbol arch)
|
|
||||||
if (NOT DEFINED ARCHITECTURE)
|
|
||||||
set(CMAKE_REQUIRED_QUIET 1)
|
|
||||||
check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch})
|
|
||||||
unset(CMAKE_REQUIRED_QUIET)
|
|
||||||
|
|
||||||
# The output variable needs to be unique across invocations otherwise
|
|
||||||
# CMake's crazy scope rules will keep it defined
|
|
||||||
if (ARCHITECTURE_${arch})
|
|
||||||
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
|
||||||
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
|
||||||
add_definitions("-DARCHITECTURE_${arch}=1")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if (NOT ENABLE_GENERIC)
|
|
||||||
# https://sourceforge.net/p/predef/wiki/Architectures/
|
|
||||||
# TODO: THIS IS FUCKING FLAWED ONLY THE FIRST SYMBOL THAT APPEARS WILL BE CONSIDERED :(
|
|
||||||
if (MSVC)
|
|
||||||
detect_architecture("_M_AMD64" x86_64)
|
|
||||||
detect_architecture("_M_IX86" x86)
|
|
||||||
detect_architecture("_M_ARM" arm)
|
|
||||||
detect_architecture("_M_ARM64" arm64)
|
|
||||||
else()
|
|
||||||
detect_architecture("__x86_64__" x86_64)
|
|
||||||
detect_architecture("__i386__" x86)
|
|
||||||
detect_architecture("__arm__" arm)
|
|
||||||
detect_architecture("__aarch64__" arm64)
|
|
||||||
endif()
|
|
||||||
detect_architecture("__ARM64__" arm64)
|
|
||||||
detect_architecture("__aarch64__" arm64)
|
|
||||||
detect_architecture("_M_ARM64" arm64)
|
|
||||||
|
|
||||||
detect_architecture("__arm__" arm)
|
|
||||||
detect_architecture("__TARGET_ARCH_ARM" arm)
|
|
||||||
detect_architecture("_M_ARM" arm)
|
|
||||||
|
|
||||||
detect_architecture("__x86_64" x86_64)
|
|
||||||
detect_architecture("__x86_64__" x86_64)
|
|
||||||
detect_architecture("__amd64" x86_64)
|
|
||||||
detect_architecture("_M_X64" x86_64)
|
|
||||||
|
|
||||||
detect_architecture("__i386" x86)
|
|
||||||
detect_architecture("__i386__" x86)
|
|
||||||
detect_architecture("_M_IX86" x86)
|
|
||||||
|
|
||||||
detect_architecture("__ia64" ia64)
|
|
||||||
detect_architecture("__ia64__" ia64)
|
|
||||||
detect_architecture("_M_IA64" ia64)
|
|
||||||
|
|
||||||
detect_architecture("__mips" mips)
|
|
||||||
detect_architecture("__mips__" mips)
|
|
||||||
detect_architecture("_M_MRX000" mips)
|
|
||||||
|
|
||||||
detect_architecture("__powerpc64__" ppc64)
|
|
||||||
detect_architecture("__ppc64__" ppc64)
|
|
||||||
detect_architecture("__PPC64__" ppc64)
|
|
||||||
detect_architecture("_ARCH_PPC64" ppc64)
|
|
||||||
|
|
||||||
detect_architecture("__ppc__" ppc)
|
|
||||||
detect_architecture("__ppc" ppc)
|
|
||||||
detect_architecture("__powerpc__" ppc)
|
|
||||||
detect_architecture("_ARCH_COM" ppc)
|
|
||||||
detect_architecture("_ARCH_PWR" ppc)
|
|
||||||
detect_architecture("_ARCH_PPC" ppc)
|
|
||||||
detect_architecture("_M_MPPC" ppc)
|
|
||||||
detect_architecture("_M_PPC" ppc)
|
|
||||||
|
|
||||||
detect_architecture("__riscv" riscv)
|
|
||||||
|
|
||||||
detect_architecture("__EMSCRIPTEN__" wasm)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT DEFINED ARCHITECTURE)
|
|
||||||
set(ARCHITECTURE "GENERIC")
|
|
||||||
set(ARCHITECTURE_GENERIC 1)
|
|
||||||
add_definitions(-DARCHITECTURE_GENERIC=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Target architecture: ${ARCHITECTURE}")
|
|
||||||
|
|
||||||
if (MSVC AND ARCHITECTURE_x86)
|
if (MSVC AND ARCHITECTURE_x86)
|
||||||
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
||||||
This can typically happen if you used the Developer Command Prompt from the start menu; \
|
This can typically happen if you used the Developer Command Prompt from the start menu; \
|
||||||
@@ -293,21 +132,11 @@ if (CXX_CLANG_CL)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
|
|
||||||
|
|
||||||
include(DownloadExternals)
|
|
||||||
include(CMakeDependentOption)
|
|
||||||
include(CTest)
|
|
||||||
|
|
||||||
# Disable Warnings as Errors for MSVC
|
# Disable Warnings as Errors for MSVC
|
||||||
if (MSVC AND NOT CXX_CLANG)
|
if (MSVC AND NOT CXX_CLANG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD)
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set bundled sdl2/qt as dependent options.
|
# Set bundled sdl2/qt as dependent options.
|
||||||
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
||||||
cmake_dependent_option(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
||||||
@@ -359,13 +188,7 @@ option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
|||||||
|
|
||||||
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
|
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
|
||||||
if(YUZU_ENABLE_LTO)
|
if(YUZU_ENABLE_LTO)
|
||||||
include(CheckIPOSupported)
|
include(UseLTO)
|
||||||
check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO)
|
|
||||||
if(NOT COMPILER_SUPPORTS_LTO)
|
|
||||||
message(FATAL_ERROR "Your compiler does not support interprocedural optimization (IPO). Re-run CMake with -DYUZU_ENABLE_LTO=OFF.")
|
|
||||||
endif()
|
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
|
||||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${COMPILER_SUPPORTS_LTO})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(USE_CCACHE "Use ccache for compilation" OFF)
|
option(USE_CCACHE "Use ccache for compilation" OFF)
|
||||||
@@ -392,7 +215,6 @@ if(USE_CCACHE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO(crueter): CI this?
|
|
||||||
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
||||||
|
|
||||||
option(YUZU_LEGACY "Apply patches that improve compatibility with older GPUs (e.g. Snapdragon 865) at the cost of performance" OFF)
|
option(YUZU_LEGACY "Apply patches that improve compatibility with older GPUs (e.g. Snapdragon 865) at the cost of performance" OFF)
|
||||||
@@ -402,12 +224,12 @@ cmake_dependent_option(YUZU_ROOM_STANDALONE "Enable standalone room executable"
|
|||||||
|
|
||||||
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
|
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR PLATFORM_LINUX" OFF)
|
||||||
|
|
||||||
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
||||||
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "LINUX" OFF)
|
cmake_dependent_option(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "PLATFORM_LINUX" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib" ON "APPLE" OFF)
|
cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib" ON "APPLE" OFF)
|
||||||
|
|
||||||
@@ -437,37 +259,17 @@ if (ENABLE_OPENSSL)
|
|||||||
option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL})
|
option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" ${DEFAULT_YUZU_USE_BUNDLED_OPENSSL})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# TODO(crueter): CPM this
|
||||||
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
||||||
# TODO(crueter): CPM this
|
AddJsonPackage(vulkan-validation-layers)
|
||||||
set(vvl_version "1.4.321.0")
|
|
||||||
set(vvl_zip_file "${CMAKE_BINARY_DIR}/externals/vvl-android.zip")
|
|
||||||
if (NOT EXISTS "${vvl_zip_file}")
|
|
||||||
# Download and extract validation layer release to externals directory
|
|
||||||
set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download")
|
|
||||||
file(DOWNLOAD "${vvl_base_url}/vulkan-sdk-${vvl_version}/android-binaries-${vvl_version}.zip"
|
|
||||||
"${vvl_zip_file}" SHOW_PROGRESS)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Copy the arm64 binary to src/android/app/main/jniLibs
|
set(abi ${CMAKE_ANDROID_ARCH_ABI})
|
||||||
set(vvl_lib_path "${CMAKE_CURRENT_SOURCE_DIR}/src/android/app/src/main/jniLibs/arm64-v8a/")
|
|
||||||
file(COPY "${CMAKE_BINARY_DIR}/externals/android-binaries-${vvl_version}/arm64-v8a/libVkLayer_khronos_validation.so"
|
set(vvl_lib_path "${CMAKE_CURRENT_SOURCE_DIR}/src/android/app/src/main/jniLibs/${abi}/")
|
||||||
|
file(COPY "${VVL_SOURCE_DIR}/${abi}/libVkLayer_khronos_validation.so"
|
||||||
DESTINATION "${vvl_lib_path}")
|
DESTINATION "${vvl_lib_path}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID)
|
|
||||||
set(CMAKE_SKIP_INSTALL_RULES ON)
|
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Default to a Release build
|
|
||||||
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
||||||
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
||||||
message(STATUS "Defaulting to a Release build")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit)
|
if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit)
|
||||||
if (EXISTS ${PROJECT_SOURCE_DIR}/.git/)
|
if (EXISTS ${PROJECT_SOURCE_DIR}/.git/)
|
||||||
message(STATUS "Copying pre-commit hook")
|
message(STATUS "Copying pre-commit hook")
|
||||||
@@ -475,25 +277,23 @@ if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
|
set(compat_base dist/compatibility_list/compatibility_list)
|
||||||
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
|
set(compat_qrc ${compat_base}.qrc)
|
||||||
|
set(compat_json ${compat_base}.json)
|
||||||
|
|
||||||
|
configure_file(${PROJECT_SOURCE_DIR}/${compat_qrc}
|
||||||
|
${PROJECT_BINARY_DIR}/${compat_qrc}
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
|
|
||||||
if (EXISTS ${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json)
|
if (EXISTS ${PROJECT_SOURCE_DIR}/${compat_json})
|
||||||
configure_file("${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.json"
|
configure_file("${PROJECT_SOURCE_DIR}/${compat_json}"
|
||||||
"${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json"
|
"${PROJECT_BINARY_DIR}/${compat_json}"
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_COMPATIBILITY_LIST_DOWNLOAD AND NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
# TODO: Compat list download
|
||||||
message(STATUS "Downloading compatibility list for yuzu...")
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/${compat_json})
|
||||||
file(DOWNLOAD
|
file(WRITE ${PROJECT_BINARY_DIR}/${compat_json} "")
|
||||||
https://api.yuzu-emu.org/gamedb/
|
|
||||||
"${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json" SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT EXISTS ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
|
|
||||||
file(WRITE ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json "")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_LEGACY)
|
if (YUZU_LEGACY)
|
||||||
@@ -575,8 +375,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
|||||||
# System imported libraries
|
# System imported libraries
|
||||||
# =======================================================================
|
# =======================================================================
|
||||||
|
|
||||||
include(CPMUtil)
|
|
||||||
|
|
||||||
# openssl funniness
|
# openssl funniness
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
if (YUZU_USE_BUNDLED_OPENSSL)
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
||||||
@@ -668,6 +466,7 @@ if (YUZU_USE_CPM)
|
|||||||
add_library(Opus::opus ALIAS opus)
|
add_library(Opus::opus ALIAS opus)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
# TODO: we can probably just use CPM for this... right?
|
||||||
# Enforce the search mode of non-required packages for better and shorter failure messages
|
# Enforce the search mode of non-required packages for better and shorter failure messages
|
||||||
find_package(fmt 8 REQUIRED)
|
find_package(fmt 8 REQUIRED)
|
||||||
|
|
||||||
@@ -688,10 +487,6 @@ else()
|
|||||||
# wow
|
# wow
|
||||||
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem)
|
find_package(Boost 1.57.0 CONFIG REQUIRED OPTIONAL_COMPONENTS headers context system fiber filesystem)
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
|
|
||||||
find_package(gamemode 1.7 MODULE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
@@ -732,10 +527,9 @@ endfunction()
|
|||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
# Umbrella framework for everything GUI-related
|
# Umbrella framework for everything GUI-related
|
||||||
find_library(COCOA_LIBRARY Cocoa)
|
find_library(COCOA_LIBRARY Cocoa REQUIRED)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit REQUIRED)
|
||||||
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
||||||
# find_library(ICONV_LIBRARY iconv REQUIRED)
|
|
||||||
# list(APPEND PLATFORM_LIBRARIES ${ICONV_LIBRARY})
|
|
||||||
elseif (WIN32)
|
elseif (WIN32)
|
||||||
# Target Windows 10
|
# Target Windows 10
|
||||||
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
|
add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00)
|
||||||
@@ -768,6 +562,7 @@ find_package(VulkanUtilityLibraries)
|
|||||||
find_package(SimpleIni)
|
find_package(SimpleIni)
|
||||||
find_package(SPIRV-Tools)
|
find_package(SPIRV-Tools)
|
||||||
find_package(sirit)
|
find_package(sirit)
|
||||||
|
find_package(gamemode)
|
||||||
|
|
||||||
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
||||||
find_package(xbyak)
|
find_package(xbyak)
|
||||||
@@ -876,11 +671,6 @@ if(ENABLE_QT)
|
|||||||
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
|
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE AND NOT ANDROID)
|
|
||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
pkg_check_modules(LIBVA libva)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
||||||
# Use system installed FFmpeg
|
# Use system installed FFmpeg
|
||||||
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
||||||
@@ -907,54 +697,6 @@ endif()
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
# Setup a custom clang-format target (if clang-format can be found) that will run
|
|
||||||
# against all the src files. This should be used before making a pull request.
|
|
||||||
# =======================================================================
|
|
||||||
|
|
||||||
set(CLANG_FORMAT_POSTFIX "-15")
|
|
||||||
find_program(CLANG_FORMAT
|
|
||||||
NAMES clang-format${CLANG_FORMAT_POSTFIX}
|
|
||||||
clang-format
|
|
||||||
PATHS ${PROJECT_BINARY_DIR}/externals)
|
|
||||||
# if find_program doesn't find it, try to download from externals
|
|
||||||
if (NOT CLANG_FORMAT)
|
|
||||||
if (WIN32 AND NOT CMAKE_CROSSCOMPILING)
|
|
||||||
message(STATUS "Clang format not found! Downloading...")
|
|
||||||
set(CLANG_FORMAT "${PROJECT_BINARY_DIR}/externals/clang-format${CLANG_FORMAT_POSTFIX}.exe")
|
|
||||||
file(DOWNLOAD
|
|
||||||
https://github.com/eden-emulator/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe
|
|
||||||
"${CLANG_FORMAT}" SHOW_PROGRESS
|
|
||||||
STATUS DOWNLOAD_SUCCESS)
|
|
||||||
if (NOT DOWNLOAD_SUCCESS EQUAL 0)
|
|
||||||
message(WARNING "Could not download clang format! Disabling the clang format target")
|
|
||||||
file(REMOVE ${CLANG_FORMAT})
|
|
||||||
unset(CLANG_FORMAT)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(WARNING "Clang format not found! Disabling the clang format target")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CLANG_FORMAT)
|
|
||||||
set(SRCS ${PROJECT_SOURCE_DIR}/src)
|
|
||||||
set(CCOMMENT "Running clang format against all the .h and .cpp files in src/")
|
|
||||||
if (WIN32)
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND powershell.exe -Command "Get-ChildItem '${SRCS}/*' -Include *.cpp,*.h -Recurse | Foreach {&'${CLANG_FORMAT}' -i $_.fullname}"
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
elseif(MINGW)
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND find `cygpath -u ${SRCS}` -iname *.h -o -iname *.cpp | xargs `cygpath -u ${CLANG_FORMAT}` -i
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
else()
|
|
||||||
add_custom_target(clang-format
|
|
||||||
COMMAND find ${SRCS} -iname *.h -o -iname *.cpp | xargs ${CLANG_FORMAT} -i
|
|
||||||
COMMENT ${CCOMMENT})
|
|
||||||
endif()
|
|
||||||
unset(SRCS)
|
|
||||||
unset(CCOMMENT)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Include source code
|
# Include source code
|
||||||
# ===================
|
# ===================
|
||||||
|
|
||||||
@@ -988,47 +730,8 @@ if (MSVC AND CXX_CLANG)
|
|||||||
link_libraries(llvm-mingw-runtime)
|
link_libraries(llvm-mingw-runtime)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#[[
|
|
||||||
search order:
|
|
||||||
- gold (GCC only) - the best, generally, but unfortunately not packaged anymore
|
|
||||||
- mold (GCC only) - generally does well on GCC
|
|
||||||
- ldd - preferred on clang
|
|
||||||
- bfd - the final fallback
|
|
||||||
- If none are found (macOS uses ld.prime, etc) just use the default linker
|
|
||||||
]]
|
|
||||||
if (YUZU_USE_FASTER_LD)
|
if (YUZU_USE_FASTER_LD)
|
||||||
find_program(LINKER_BFD bfd)
|
include(FasterLinker)
|
||||||
if (LINKER_BFD)
|
|
||||||
set(LINKER bfd)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_program(LINKER_LLD lld)
|
|
||||||
if (LINKER_LLD)
|
|
||||||
set(LINKER lld)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CXX_GCC)
|
|
||||||
find_program(LINKER_MOLD mold)
|
|
||||||
if (LINKER_MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
|
||||||
set(LINKER mold)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_program(LINKER_GOLD gold)
|
|
||||||
if (LINKER_GOLD)
|
|
||||||
set(LINKER gold)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (LINKER)
|
|
||||||
message(NOTICE "Selecting ${LINKER} as linker")
|
|
||||||
add_link_options("-fuse-ld=${LINKER}")
|
|
||||||
else()
|
|
||||||
message(WARNING "No faster linker found--using default")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (LINKER STREQUAL "lld" AND CXX_GCC)
|
|
||||||
message(WARNING "Using lld on GCC may cause issues with certain LTO settings. If the program fails to compile, disable YUZU_USE_FASTER_LD, or install mold or GNU gold.")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set runtime library to MD/MDd for all configurations
|
# Set runtime library to MD/MDd for all configurations
|
||||||
@@ -1050,14 +753,6 @@ if(MSVC)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MINGW)
|
|
||||||
# This saves a truly ridiculous amount of time during linking
|
|
||||||
# In my tests, without this it takes 2 mins, with it takes 3-5 seconds
|
|
||||||
# or on GitHub Actions, 10 minutes -> 3 seconds
|
|
||||||
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections")
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
# Set yuzu project or yuzu-cmd project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
# Set yuzu project or yuzu-cmd project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
||||||
|
|||||||
@@ -603,8 +603,12 @@ function(AddCIPackage)
|
|||||||
add_ci_package(mingw-arm64)
|
add_ci_package(mingw-arm64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID AND NOT "android" IN_LIST DISABLED_PLATFORMS)
|
if((ANDROID AND ARCHITECTURE_x86_64) AND NOT "android-x86_64" IN_LIST DISABLED_PLATFORMS)
|
||||||
add_ci_package(android)
|
add_ci_package(android-x86_64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((ANDROID AND ARCHITECTURE_arm64) AND NOT "android-aarch64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
add_ci_package(android-aarch64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PLATFORM_SUN AND NOT "solaris-amd64" IN_LIST DISABLED_PLATFORMS)
|
if(PLATFORM_SUN AND NOT "solaris-amd64" IN_LIST DISABLED_PLATFORMS)
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2025 crueter
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
include(GetGitRevisionDescription)
|
|
||||||
|
|
||||||
function(trim var)
|
|
||||||
string(REGEX REPLACE "\n" "" new "${${var}}")
|
|
||||||
set(${var} ${new} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
|
||||||
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
|
||||||
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
|
||||||
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
|
||||||
|
|
||||||
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
|
||||||
file(READ ${REF_FILE} GIT_REFSPEC)
|
|
||||||
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
|
||||||
else()
|
|
||||||
get_git_head_revision(GIT_REFSPEC GIT_COMMIT)
|
|
||||||
git_branch_name(GIT_REFSPEC)
|
|
||||||
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
|
||||||
set(GIT_REFSPEC 1.0.0)
|
|
||||||
set(GIT_COMMIT stable)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (EXISTS ${TAG_FILE})
|
|
||||||
file(READ ${TAG_FILE} GIT_TAG)
|
|
||||||
else()
|
|
||||||
git_describe(GIT_TAG --tags --abbrev=0)
|
|
||||||
if (GIT_TAG MATCHES "NOTFOUND")
|
|
||||||
set(GIT_TAG "${GIT_REFSPEC}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (EXISTS ${RELEASE_FILE})
|
|
||||||
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
|
||||||
trim(GIT_RELEASE)
|
|
||||||
message(STATUS "Git release: ${GIT_RELEASE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
trim(GIT_REFSPEC)
|
|
||||||
trim(GIT_COMMIT)
|
|
||||||
trim(GIT_TAG)
|
|
||||||
|
|
||||||
message(STATUS "Git commit: ${GIT_COMMIT}")
|
|
||||||
message(STATUS "Git tag: ${GIT_TAG}")
|
|
||||||
message(STATUS "Git refspec: ${GIT_REFSPEC}")
|
|
||||||
14
cpmfile.json
14
cpmfile.json
@@ -4,7 +4,7 @@
|
|||||||
"package": "OpenSSL",
|
"package": "OpenSSL",
|
||||||
"name": "openssl",
|
"name": "openssl",
|
||||||
"repo": "crueter-ci/OpenSSL",
|
"repo": "crueter-ci/OpenSSL",
|
||||||
"version": "3.6.0-e3608d80df",
|
"version": "3.6.0-965d6279e8",
|
||||||
"min_version": "1.1.1"
|
"min_version": "1.1.1"
|
||||||
},
|
},
|
||||||
"boost": {
|
"boost": {
|
||||||
@@ -25,9 +25,9 @@
|
|||||||
"fmt": {
|
"fmt": {
|
||||||
"repo": "fmtlib/fmt",
|
"repo": "fmtlib/fmt",
|
||||||
"tag": "%VERSION%",
|
"tag": "%VERSION%",
|
||||||
"hash": "c4ab814c20fbad7e3f0ae169125a4988a2795631194703251481dc36b18da65c886c4faa9acd046b0a295005217b3689eb0126108a9ba5aac2ca909aae263c2f",
|
"hash": "f0da82c545b01692e9fd30fdfb613dbb8dd9716983dcd0ff19ac2a8d36f74beb5540ef38072fdecc1e34191b3682a8542ecbf3a61ef287dbba0a2679d4e023f2",
|
||||||
"version": "8",
|
"version": "8",
|
||||||
"git_version": "12.0.0"
|
"git_version": "12.1.0"
|
||||||
},
|
},
|
||||||
"lz4": {
|
"lz4": {
|
||||||
"name": "lz4",
|
"name": "lz4",
|
||||||
@@ -91,5 +91,13 @@
|
|||||||
"version": "20250828",
|
"version": "20250828",
|
||||||
"artifact": "clang-rt-builtins.tar.zst",
|
"artifact": "clang-rt-builtins.tar.zst",
|
||||||
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
"hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181"
|
||||||
|
},
|
||||||
|
"vulkan-validation-layers": {
|
||||||
|
"package": "VVL",
|
||||||
|
"repo": "KhronosGroup/Vulkan-ValidationLayers",
|
||||||
|
"tag": "vulkan-sdk-%VERSION%",
|
||||||
|
"git_version": "1.4.328.1",
|
||||||
|
"artifact": "android-binaries-%VERSION%.zip",
|
||||||
|
"hash": "5ec895a453cb7c2f156830b9766953a0c2bd44dea99e6a3dac4160305041ccd3e87534b4ce0bd102392178d2a8eca48411856298f9395e60117cdfe89f72137e"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
dist/Assets.car
vendored
Normal file
BIN
dist/Assets.car
vendored
Normal file
Binary file not shown.
62
docs/build/Android.md
vendored
62
docs/build/Android.md
vendored
@@ -1,30 +1,37 @@
|
|||||||
# Note: These build instructions are a work-in-progress.
|
# Android
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
* [Android Studio](https://developer.android.com/studio)
|
* [Android Studio](https://developer.android.com/studio)
|
||||||
* [NDK 27+ and CMake 3.22.1](https://developer.android.com/studio/projects/install-ndk#default-version)
|
* [NDK 27+ and CMake 3.22.1](https://developer.android.com/studio/projects/install-ndk#default-version)
|
||||||
* [Git](https://git-scm.com/download)
|
* [Git](https://git-scm.com/download)
|
||||||
|
|
||||||
### WINDOWS ONLY - Additional Dependencies
|
## WINDOWS ONLY - Additional Dependencies
|
||||||
* **[Visual Studio 2022 Community](https://visualstudio.microsoft.com/downloads/)** - **Make sure to select "Desktop development with C++" support in the installer. Make sure to update to the latest version if already installed.**
|
|
||||||
* **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** - **Make sure to select Latest SDK.**
|
* **[Visual Studio 2022 Community](https://visualstudio.microsoft.com/downloads/)** - **Make sure to select "Desktop development with C++" support in the installer. Make sure to update to the latest version if already installed.**
|
||||||
- A convenience script to install the latest SDK is provided in `.ci\windows\install-vulkan-sdk.ps1`.
|
* **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** - **Make sure to select Latest SDK.**
|
||||||
|
* A convenience script to install the latest SDK is provided in `.ci\windows\install-vulkan-sdk.ps1`.
|
||||||
|
|
||||||
## Cloning Eden with Git
|
## Cloning Eden with Git
|
||||||
```
|
|
||||||
|
```sh
|
||||||
git clone --recursive https://git.eden-emu.dev/eden-emu/eden.git
|
git clone --recursive https://git.eden-emu.dev/eden-emu/eden.git
|
||||||
```
|
```
|
||||||
Eden by default will be cloned into -
|
|
||||||
|
Eden by default will be cloned into:
|
||||||
|
|
||||||
* `C:\Users\<user-name>\eden` on Windows
|
* `C:\Users\<user-name>\eden` on Windows
|
||||||
* `~/eden` on Linux and macOS
|
* `~/eden` on Linux and macOS
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
1. Start Android Studio, on the startup dialog select `Open`.
|
1. Start Android Studio, on the startup dialog select `Open`.
|
||||||
2. Navigate to the `eden/src/android` directory and click on `OK`.
|
2. Navigate to the `eden/src/android` directory and click on `OK`.
|
||||||
3. In `Build > Select Build Variant`, select `release` or `relWithDebInfo` as the "Active build variant".
|
3. In `Build > Select Build Variant`, select `release` or `relWithDebInfo` as the "Active build variant".
|
||||||
4. Build the project with `Build > Make Project` or run it on an Android device with `Run > Run 'app'`.
|
4. Build the project with `Build > Make Project` or run it on an Android device with `Run > Run 'app'`.
|
||||||
|
|
||||||
## Building with Terminal
|
## Building with Terminal
|
||||||
|
|
||||||
1. Download the SDK and NDK from Android Studio.
|
1. Download the SDK and NDK from Android Studio.
|
||||||
2. Navigate to SDK and NDK paths.
|
2. Navigate to SDK and NDK paths.
|
||||||
3. Then set ANDROID_SDK_ROOT and ANDROID_NDK_ROOT in terminal via
|
3. Then set ANDROID_SDK_ROOT and ANDROID_NDK_ROOT in terminal via
|
||||||
@@ -38,7 +45,44 @@ Eden by default will be cloned into -
|
|||||||
Remember to have a Java SDK installed if not already, on Debian and similar this is done with `sudo apt install openjdk-17-jdk`.
|
Remember to have a Java SDK installed if not already, on Debian and similar this is done with `sudo apt install openjdk-17-jdk`.
|
||||||
|
|
||||||
### Script
|
### Script
|
||||||
A convenience script for building is provided in `.ci/android/build.sh`. The built APK can be put into an `artifacts` directory via `.ci/android/package.sh`. On Windows, these must be done in the Git Bash or MinGW terminal.
|
|
||||||
|
A convenience script for building is provided in `.ci/android/build.sh`. On Windows, this must be run in Git Bash or MSYS2. This script provides the following options:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Usage: build.sh [-c|--chromeos] [-t|--target FLAVOR] [-b|--build-type BUILD_TYPE]
|
||||||
|
[-h|--help] [-r|--release] [extra options]
|
||||||
|
|
||||||
|
Build script for Android.
|
||||||
|
Associated variables can be set outside the script,
|
||||||
|
and will apply both to this script and the packaging script.
|
||||||
|
bool values are "true" or "false"
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c, --chromeos Build for ChromeOS (x86_64) (variable: CHROMEOS, bool)
|
||||||
|
Default: false
|
||||||
|
-r, --release Enable update checker. If set, sets the DEVEL bool variable to false.
|
||||||
|
By default, DEVEL is true.
|
||||||
|
-t, --target <FLAVOR> Build flavor (variable: TARGET)
|
||||||
|
Valid values are: legacy, optimized, standard
|
||||||
|
Default: standard
|
||||||
|
-b, --build-type <TYPE> Build type (variable: TYPE)
|
||||||
|
Valid values are: Release, RelWithDebInfo, Debug
|
||||||
|
Default: Debug
|
||||||
|
|
||||||
|
Extra arguments are passed to CMake (e.g. -DCMAKE_OPTION_NAME=VALUE)
|
||||||
|
Set the CCACHE variable to "true" to enable build caching.
|
||||||
|
The APK and AAB will be output into "artifacts".
|
||||||
|
```
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* Build legacy release with update checker for ChromeOS:
|
||||||
|
* `.ci/android/build.sh -c -r -t legacy`
|
||||||
|
* Build standard release with debug info without update checker for phones:
|
||||||
|
* `.ci/android/build.sh -b RelWithDebInfo`
|
||||||
|
* Build optimized release with update checker:
|
||||||
|
* `.ci/android/build.sh -r -t optimized`
|
||||||
|
|
||||||
### Additional Resources
|
### Additional Resources
|
||||||
https://developer.android.com/studio/intro
|
|
||||||
|
<https://developer.android.com/studio/intro>
|
||||||
|
|||||||
162
docs/user/AddEdenToSRM_SteamDeck.md
Normal file
162
docs/user/AddEdenToSRM_SteamDeck.md
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
# Importing Eden into Steam with Steam Rom Manager
|
||||||
|
|
||||||
|
Use this when you want to import the Eden AppImage into your Steam Library along with artwork using *Steam ROM Manager.*
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Importing-Eden-into-Steam-with-Steam-Rom-Manager-2b757c2edaf68054851bc287b6382cb5) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden set up and configured
|
||||||
|
- Internet Connection
|
||||||
|
- Comfort Accessing and Navigating SteamOS Desktop Mode
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
### Initial Setup
|
||||||
|
|
||||||
|
1. Press the **STEAM** button and then go to *Power → Switch to Desktop* to enter the Desktop mode.
|
||||||
|
|
||||||
|
2. Install ***Steam ROM Manager*** (if needed), there are 2 ways you can accomplish this, either manually or through [*EmuDeck*](https://www.emudeck.com/#downloads).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Manual Installation
|
||||||
|
|
||||||
|
1. Open the *Discover Store* and search for *Steam ROM Manager.*
|
||||||
|
2. Select the **Install** button to install the program.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Installing Through *EmuDeck*
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: This assumes you have already set up EmuDeck, if not - just run through the guided installation and select *Steam ROM Manager* as one of the options.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
1. Open **EmuDeck**, then navigate to *Manage Emulators.*
|
||||||
|
2. Scroll down to the bottom of the page to the *Manage your Tools & Frontends* section. Click **Steam ROM Manager**.
|
||||||
|
3. Click the **Install** button on the right hand side to install it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Adding Eden into *Steam ROM Manager*
|
||||||
|
|
||||||
|
### EmuDeck Users
|
||||||
|
|
||||||
|
EmuDeck will automatically create an *Emulators - Emulators* parser for ***Steam ROM Manager*** that uses shell scripts to launch them. We will follow this convention.
|
||||||
|
|
||||||
|
1. In the file explorer go to your **EmuDeck installation folder → tools → launchers**
|
||||||
|
2. Right-Click some empty space and hit **Create New → Text File,** call this new file ***eden.sh*** instead of ***Text File.txt***
|
||||||
|
3. Right-Click the ***eden.sh*** file you created and hit ***Open with Kate***.
|
||||||
|
4. Paste the following code into the contents of the file, save and close the file.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
emuName="eden" #parameterize me
|
||||||
|
|
||||||
|
. "$HOME/.config/EmuDeck/backend/functions/all.sh"
|
||||||
|
emulatorInit "$emuName"
|
||||||
|
|
||||||
|
# find full path to emulator appimage
|
||||||
|
appimage=$(find "$emusFolder" -iname "${emuName}*.AppImage" -print -quit 2>/dev/null)
|
||||||
|
|
||||||
|
# make sure the appimage is executable
|
||||||
|
chmod +x "$appimage"
|
||||||
|
set -- "$appimage" "$@"
|
||||||
|
|
||||||
|
echo "Launching ${emuName} with:" "$@"
|
||||||
|
"$@"
|
||||||
|
|
||||||
|
cloud_sync_uploadForced
|
||||||
|
rm -rf "$savesPath/.gaming"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Open a terminal in the directory containing the ***eden.sh*** file and run the following command to make it executable.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod u+x ./eden.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Proceed to the Adding the Emulator section
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Non-EmuDeck Users
|
||||||
|
|
||||||
|
We will need to create a new parser for the Emulators. Unlike with the EmuDeck model, we will have the parser look for AppImages.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: In order to ensure that the matches occur correctly, it is recommended that you name the Eden Appimage as ***eden.AppImage***, rather than what it downloads as.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
1. Open *Steam ROM Manager* and choose **Create Parser**.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: You may need to go to **Settings → Theme** and set it to *Classic* to view this option.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
2. Add the following settings to create the parser.
|
||||||
|
|
||||||
|
1. Basic Configuration
|
||||||
|
1. **Parser Type**: *Blob*
|
||||||
|
2. **Parser Title**: *Emulators - Emulators*
|
||||||
|
3. **Steam Directory**: *${steamdirglobal}*
|
||||||
|
4. **User Accounts**: *Global*
|
||||||
|
5. **ROMs Directory**: <path to directory containing eden AppImage>
|
||||||
|
6. **Steam Collections**: *Emulation* (OPTIONAL)
|
||||||
|
2. Parser Specific Configuration
|
||||||
|
1. **Search Glob**: *${title}@(.AppImage|.APPIMAGE|.appimage)*
|
||||||
|
3. Executable Configuration
|
||||||
|
1. **Executable Modifier**: *"${exePath}”*
|
||||||
|
4. Title Modification Configuration
|
||||||
|
1. **Title Modifier**: *${fuzzyTitle}*
|
||||||
|
|
||||||
|
3. Hit the **Test** button to ensure your emulator AppImages.
|
||||||
|
4. Hit **Save** to save the Parser.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Adding Eden to Steam
|
||||||
|
|
||||||
|
Now that we have the parser or shell script created, we can actually add it to Steam.
|
||||||
|
|
||||||
|
1. Open *Steam ROM Manager* if it is not already open.
|
||||||
|
2. Toggle the **Emulators - Emulators** parser on and hit ***Add Games*** in the top left.
|
||||||
|
3. Click **Parse** to identify the emulators.
|
||||||
|
4. Make sure all your emulators are showing up and have the right matches.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Correcting a Mismatch
|
||||||
|
|
||||||
|
If the emulator is not identified correctly, you may need to tell *Steam ROM Manager* what the game is manually.
|
||||||
|
|
||||||
|
1. Hover over the emulator card and click the magnifying glass icon. Here it incorrectly identified *Eden* as a game by a similar name. **
|
||||||
|
2. Search for *Eden Emulator* on the *Search SteamGridDB* section and scroll through the results, selecting the one you want.
|
||||||
|
3. Ensure the *Name* and *Game ID* update in the **Per-App Exceptions** and press **Save and close**. The game should now update.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Excluding Matches
|
||||||
|
|
||||||
|
You may want to tell Steam ROM Manager to ignore some files that it finds in the directory. This is how you do so.
|
||||||
|
|
||||||
|
1. Hit the **Exclude Games** button in the bottom right.
|
||||||
|
2. Deselect the game you want to exclude, the poster artwork should go dim and the **Number Excluded** number should increment up. Repeat with any other exclusions you want to add.
|
||||||
|
3. Hit **Save Excludes** when you are happy with your selections.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
5. The program will now start writing the entries into the Steam Library. You should get pop up notifications of the progress, but you can monitor the progress by selecting the **Log** on the left-hand side if needed.
|
||||||
|
6. Restart Steam to have the changes take effect. Check your library to ensure that your games are there, in a category if you defined one in the parser.
|
||||||
|
7. Try to launch the Emulator from Steam and ensure everything is working. You are now good to go.
|
||||||
100
docs/user/AddGamesToSRM_SteamDeck.md
Normal file
100
docs/user/AddGamesToSRM_SteamDeck.md
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Importing Games into Steam with Steam Rom Manager
|
||||||
|
|
||||||
|
Use this when you want to import your games inside Eden into Steam to launch with artwork from Steam Game Mode without needing to launch Eden first.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Importing-Games-into-Steam-with-Steam-Rom-Manager-2b757c2edaf680d7a491c92b138f1fcc) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Steam Deck Set up and Configured
|
||||||
|
- Eden set up and Configured
|
||||||
|
- Internet Access
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Press the **STEAM** button and then go to *Power → Switch to Desktop* to enter the Desktop mode.
|
||||||
|
|
||||||
|
1. Install ***Steam ROM Manager***, there are 2 ways you can accomplish this, either manually or through [*EmuDeck*](https://www.emudeck.com/#downloads).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Manual Installation
|
||||||
|
|
||||||
|
1. Open the *Discover Store* and search for *Steam ROM Manager.*
|
||||||
|
2. Select the **Install** button to install the program.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Installing Through *EmuDeck*
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: This assumes you have already set up EmuDeck, if not - just run through the guided installation and select *Steam ROM Manager* as one of the options.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
1. Open **EmuDeck**, then navigate to *Manage Emulators.*
|
||||||
|
2. Scroll down to the bottom of the page to the *Manage your Tools & Frontends* section. Click **Steam ROM Manager**.
|
||||||
|
|
||||||
|
3. Click the **Install** button on the right hand side to install it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
2. Open the Start Menu and Launch ***Steam ROM Manager***
|
||||||
|
|
||||||
|
1. The program will now launch and show you a window with parsers.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: Your layout may look different depending on how you installed *Steam ROM Manager*. You may need to go to **Settings → Theme** and change it to *Classic* to follow along.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
2. Switch off all Parsers by hitting the *Toggle Parsers* switch.
|
||||||
|
3. Scroll down the list on the left-hand side and look for a parser called *Nintendo Switch - Eden* and switch it on. This parser may not exist depending on how you installed *Steam ROM Manager* (EmuDeck creates it for you). Follow these steps to create it if it is missing.
|
||||||
|
|
||||||
|
---
|
||||||
|
### Creating the Eden Parser
|
||||||
|
|
||||||
|
1. Select Create Parser and in the *Community Presets* option look for **Nintendo Switch - Yuzu**.
|
||||||
|
2. Change the **Parser title** from *Nintendo Switch - Yuzu* to *Nintendo Switch - Eden.*
|
||||||
|
3. Hit the **Browse** option under the *ROMs directory* section. Select the directory containing your Switch ROMs.
|
||||||
|
4. Under *Steam collections*, you can add a Steam category name. This just organizes the games under a common category in your Steam Library, this is optional but recommended.
|
||||||
|
5. Scroll down slightly to the **Executable Configuration → Executable**, select **Browse** and select the Eden AppImage.
|
||||||
|
6. Leave everything else the same and hit **Save** to save the parser.
|
||||||
|
---
|
||||||
|
|
||||||
|
4. Click the Eden parser to view the options on the right, select **Test** at the bottom of the screen to ensure that *Steam ROM Manager* detects your games correctly.
|
||||||
|
1. *Steam ROM Manager* will start to scan the specified ROMs directory and match them to games. Look over the results to ensure they are accurate. If you do not see any entries - check your parsers ROMs directory field.
|
||||||
|
1. When you are happy with the results, click the **Add Games** → **Parse** to start the actual Parsing.
|
||||||
|
1. The program will now identify the games and pull artwork from [*SteamGridDB*](https://www.steamgriddb.com/).
|
||||||
|
2. Review the game matches and ensure everything is there.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Correcting a Mismatch
|
||||||
|
|
||||||
|
If the game is not identified correctly, you may need to tell *Steam ROM Manager* what the game is manually.
|
||||||
|
|
||||||
|
1. Hover over the game card and click the magnifying glass icon.
|
||||||
|
2. Search for the game on the *Search SteamGridDB* section and scroll through the results, selecting the one you want.
|
||||||
|
3. Ensure the *Name* and *Game ID* update in the **Per-App Exceptions** and press **Save and close**. The game should now update.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Excluding Matches
|
||||||
|
|
||||||
|
You may want to tell Steam ROM Manager to ignore some files (updates/DLC/etc.) that it finds in the directory. This is how you do so.
|
||||||
|
|
||||||
|
1. Hit the **Exclude Games** button in the bottom right.
|
||||||
|
2. Deselect the game you want to exclude, the poster artwork should go dim and the **Number Excluded** number should increment up. Repeat with any other exclusions you want to add.
|
||||||
|
3. Hit **Save Excludes** when you are happy with your selections.
|
||||||
|
---
|
||||||
|
3. When you are happy with the results, select **Save to Steam** to save the results.
|
||||||
|
1. The program will now start writing the entries into the Steam Library. You should get pop up notifications of the progress, but you can monitor the progress by selecting the **Log** on the left-hand side if needed.
|
||||||
|
2. Restart Steam to have the changes take effect. Check your library to ensure that your games are there, in a category if you defined one in the parser.
|
||||||
|
3. Try to launch a game and ensure everything is working. You are now good to go.
|
||||||
154
docs/user/AddingBooleanToggles.md
Normal file
154
docs/user/AddingBooleanToggles.md
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# User Handbook - Adding Boolean Settings Toggles
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> This guide is intended for developers ONLY. If you are not a developer, this likely irrelevant to yourself.
|
||||||
|
>
|
||||||
|
> If you want to add temporary toggles, please refer to **[Adding Debug Knobs](AddingDebugKnobs.md)**
|
||||||
|
|
||||||
|
This guide will walk you through adding a new boolean toggle setting to Eden's configuration across both Qt's (PC) and Kotlin's (Android) UIs.
|
||||||
|
|
||||||
|
## Index
|
||||||
|
|
||||||
|
1. [Step 1 - src/common/settings](#step-1-src-common-settings)
|
||||||
|
2. [Qt's (PC) Steps](#qt-pc-steps)
|
||||||
|
|
||||||
|
* [Step 2 - src/qt_common/config/shared_translation.cpp](#step-2-src-qt_common-config-shared_translation-cpp)
|
||||||
|
3. [ Kotlin's (Android) Steps](#android-steps)
|
||||||
|
|
||||||
|
* [Step 3 - BooleanSetting.kt](#step-3-src-android-app-src-main-java-org-yuzu-yuzu_emu-features-settings-model-booleansetting-kt)
|
||||||
|
* [Step 4 - SettingsItem.kt](#step-4-src-android-app-src-main-java-org-yuzu-yuzu_emu-features-settings-model-view-settingsitem-kt)
|
||||||
|
* [Step 5 - SettingsFragmentPresenter.kt](#step-5-src-android-app-src-main-java-org-yuzu-yuzu_emu-features-settings-ui-settingsfragmentpresenter-kt)
|
||||||
|
* [Step 6 - strings.xml](#step-6-src-android-app-src-main-res-values-strings-xml)
|
||||||
|
4. [Step 7 - Use Your Toggle](#step-7-use-your-toggle)
|
||||||
|
5. [Best Practices](#best-practices)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1 - src/common/settings.
|
||||||
|
|
||||||
|
Firstly add your desired toggle inside `setting.h`,
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
SwitchableSetting<bool> your_setting_name{linkage, false, "your_setting_name", Category::RendererExtensions};
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE - If you wish for your toggle to be on by default then change `false` to `true` after `linkage,`.
|
||||||
|
|
||||||
|
### Remember to add your toggle to the appropriate category, for example:
|
||||||
|
|
||||||
|
Common Categories:
|
||||||
|
|
||||||
|
* Category::Renderer
|
||||||
|
* Category::RendererAdvanced
|
||||||
|
* Category::RendererExtensions
|
||||||
|
* Category::System
|
||||||
|
* Category::Core
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Qt (PC) Steps
|
||||||
|
|
||||||
|
### Step 2 - src/qt_common/config/shared_translation.cpp
|
||||||
|
|
||||||
|
Now you can add the toggle to the QT (PC) UI inside `shared_translation.cpp`,
|
||||||
|
Find where you wish for it to appear and place it there.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
INSERT(Settings,
|
||||||
|
your_setting_name,
|
||||||
|
tr("Your Setting Display Name"),
|
||||||
|
tr("Detailed description of what this setting does.\n"
|
||||||
|
"You can use multiple lines.\n"
|
||||||
|
"Explain any caveats or requirements."));
|
||||||
|
```
|
||||||
|
|
||||||
|
### Make sure to:
|
||||||
|
|
||||||
|
* Keep display naming consistant
|
||||||
|
* Put detailed info in the description
|
||||||
|
* Use `\n` for line breaks in descriptions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Android Steps
|
||||||
|
|
||||||
|
### Step 3 - src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
|
||||||
|
|
||||||
|
Now add it inside `BooleanSetting.kt` where it should be in the settings.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
RENDERER_YOUR_SETTING_NAME("your_setting_name"),
|
||||||
|
```
|
||||||
|
|
||||||
|
Remember to make sure the naming of the prefix matches the desired category.
|
||||||
|
|
||||||
|
### Step 4 - src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
|
||||||
|
|
||||||
|
Now you may add the toggle to the Kotlin (Android) UI inside `SettingsItem.kt`.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
put(
|
||||||
|
SwitchSetting(
|
||||||
|
BooleanSetting.RENDERER_YOUR_SETTING_NAME,
|
||||||
|
titleId = R.string.your_setting_name,
|
||||||
|
descriptionId = R.string.your_setting_name_description
|
||||||
|
)
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5 - src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
|
||||||
|
|
||||||
|
Now add your setting to the correct location inside `SettingsFragmentPresenter.kt` within the right category.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
add(BooleanSetting.RENDERER_YOUR_SETTING_NAME.key)
|
||||||
|
```
|
||||||
|
|
||||||
|
Remember, placing matters! Settings appear in the order of where you add them.
|
||||||
|
|
||||||
|
### Step 6 - src/android/app/src/main/res/values/strings.xml
|
||||||
|
|
||||||
|
Now add your setting and description to `strings.xml` in the appropriate place.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
<string name="your_setting_name">Your Setting Display Name</string>
|
||||||
|
<string name="your_setting_name_description">Detailed description of what this setting does. Explain any caveats, requirements, or warnings here.</string>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 7 - Use Your Toggle!
|
||||||
|
|
||||||
|
Now the UI part is done find a place in the code for the toggle,
|
||||||
|
And use it to your heart's desire!
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
const bool your_value = Settings::values.your_setting_name.GetValue();
|
||||||
|
|
||||||
|
if (your_value) {
|
||||||
|
// Do something when enabled
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you wish to do something only when the toggle is disabled,
|
||||||
|
Use `if (!your_value) {` instead of `if (your_value) {`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
* Naming - Use clear, descriptive names. Something for both the devs and the users.
|
||||||
|
* Defaults - Choose safe default values (usually false for new features).
|
||||||
|
* Documentation - Write clear descriptions explaining when and why to use the setting.
|
||||||
|
* Categories - Put settings in the appropriate category.
|
||||||
|
* Order - Place related settings near each other.
|
||||||
|
* Testing - Always test on both PC and Android before committing when possible.
|
||||||
|
|
||||||
|
### Thank you for reading, I hope this guide helped you making your toggle!
|
||||||
119
docs/user/AddingDebugKnobs.md
Normal file
119
docs/user/AddingDebugKnobs.md
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# User Handbook - Adding Debug Knobs
|
||||||
|
|
||||||
|
Debug Knobs is a 16-bit integer setting (`debug_knobs`) in the Eden Emulator that serves as a bitmask for gating various testing and debugging features. This allows developers and advanced users to enable or disable specific debug behaviors without requiring deploying of complete but temporary toggles.
|
||||||
|
|
||||||
|
The setting ranges from 0 to 65535 (0x0000 to 0xFFFF), where each bit represents a different debug feature flag.
|
||||||
|
|
||||||
|
## Index
|
||||||
|
|
||||||
|
1. [Advantages](#advantages)
|
||||||
|
2. [Usage](#usage)
|
||||||
|
|
||||||
|
* [Accessing Debug Knobs (dev side)](#accessing-debug-knobs-dev-side)
|
||||||
|
* [Setting Debug Knobs (user side)](#setting-debug-knobs-user-side)
|
||||||
|
* [Bit Manipulation Examples](#bit-manipulation-examples)
|
||||||
|
3. [Examples](#examples)
|
||||||
|
|
||||||
|
* [Example 1: Conditional Debug Logging](#example-1-conditional-debug-logging)
|
||||||
|
* [Example 2: Performance Tuning](#example-2-performance-tuning)
|
||||||
|
* [Example 3: Feature Gating](#example-3-feature-gating)
|
||||||
|
4. [Best Practices](#best-practices)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Advantages
|
||||||
|
|
||||||
|
The main advantage is to avoid deploying new disposable toggles (those made only for testing stage, and are disposed once new feature gets good to merge). This empowers devs to be free of all frontend burocracy and hassle of new toggles.
|
||||||
|
|
||||||
|
Common advantages recap:
|
||||||
|
|
||||||
|
* **Fine-Grained Control**: Enable or disable up to 16 individual debug features independently using bit manipulation on a single build
|
||||||
|
* **Runtime Configuration**: Change debug behavior at runtime the same way as new toggles would do
|
||||||
|
* **Safe incremental development**: New debug features can be added while impact can be isolated from previous deployments
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Accessing Debug Knobs (dev side)
|
||||||
|
|
||||||
|
Use the `Settings::getDebugKnobAt(u8 i)` function to check if a specific bit is set:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "common/settings.h"
|
||||||
|
|
||||||
|
// Check if bit 0 is set
|
||||||
|
bool feature_enabled = Settings::getDebugKnobAt(0);
|
||||||
|
|
||||||
|
// Check if bit 15 is set
|
||||||
|
bool another_feature = Settings::getDebugKnobAt(15);
|
||||||
|
```
|
||||||
|
|
||||||
|
The function returns `true` if the specified bit (0-15) is set in the `debug_knobs` value, `false` otherwise.
|
||||||
|
|
||||||
|
### Setting Debug Knobs (user side)
|
||||||
|
|
||||||
|
Developers must inform which knobs are tied to each functionality to be tested.
|
||||||
|
|
||||||
|
The debug knobs value can be set through:
|
||||||
|
|
||||||
|
1. **Desktop UI**: In the Debug configuration tab, there's a spinbox for "Debug knobs" (0-65535)
|
||||||
|
2. **Android UI**: Available as an integer setting in the Debug section
|
||||||
|
3. **Configuration Files**: Set the `debug_knobs` value in the emulator's configuration
|
||||||
|
|
||||||
|
### Bit Manipulation Examples
|
||||||
|
|
||||||
|
To enable specific features, calculate the decimal value by setting the appropriate bits:
|
||||||
|
|
||||||
|
* **Enable only bit 0**: Value = 1 (2^0)
|
||||||
|
* **Enable only bit 1**: Value = 2 (2^1)
|
||||||
|
* **Enable bits 0 and 1**: Value = 3 (2^0 + 2^1)
|
||||||
|
* **Enable bit 15**: Value = 32768 (2^15)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Example 1: Conditional Debug Logging
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
void SomeFunction() {
|
||||||
|
if (Settings::getDebugKnobAt(0)) {
|
||||||
|
LOG_DEBUG(Common, "Debug feature 0 is enabled");
|
||||||
|
// Additional debug code here
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Settings::getDebugKnobAt(1)) {
|
||||||
|
LOG_DEBUG(Common, "Debug feature 1 is enabled");
|
||||||
|
// Different debug behavior
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: Performance Tuning
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
bool UseOptimizedPath() {
|
||||||
|
// Skip optimization if debug bit 2 is set for testing
|
||||||
|
return !Settings::getDebugKnobAt(2);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 3: Feature Gating
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
void ExperimentalFeature() {
|
||||||
|
static constexpr u8 EXPERIMENTAL_FEATURE_BIT = 3;
|
||||||
|
|
||||||
|
if (!Settings::getDebugKnobAt(EXPERIMENTAL_FEATURE_BIT)) {
|
||||||
|
// Fallback to stable implementation
|
||||||
|
StableImplementation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Experimental implementation
|
||||||
|
ExperimentalImplementation();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
* This setting is intended for development and testing purposes only
|
||||||
|
* Knobs must be unwired before PR creation
|
||||||
|
* The setting is per-game configurable, allowing different debug setups for different titles
|
||||||
20
docs/user/AlterDate-Time.md
Normal file
20
docs/user/AlterDate-Time.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Setting a Custom Date/Time in Eden
|
||||||
|
|
||||||
|
Use this guide whenever you want to modify the Date or Time that Eden reports to games. This can be useful for modifying RNG elements, skipping wait times in games, etc.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Setting-a-Custom-Date-Time-in-Eden-2b357c2edaf680acb8d4e63ccc126564) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden set up and fully configured
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Navigate to *Emulation → Configure*.
|
||||||
|
2. Click on the **System** item on the left-hand side navigation, then check the *Custom RTC Date* box.
|
||||||
|
3. The Date/Time option now becomes editable. Set it to the value you want and hit **OK**.
|
||||||
|
4. GREAT SCOTT! We have time traveled! You can of course go forward or backward in time (as long as it is not before the year 1970) and your game should update accordingly (e.g. certain *Super Mario Odyssey* moons that take time for flowers to grow will now be fully grown.).
|
||||||
22
docs/user/CommandLine.md
Normal file
22
docs/user/CommandLine.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# User Handbook - Command Line
|
||||||
|
|
||||||
|
There are two main applications, an SDL2 based app (`eden-cli`) and a Qt based app (`eden`); both accept command line arguments.
|
||||||
|
|
||||||
|
## eden
|
||||||
|
- `./eden <path>`: Running with a single argument and nothing else, will make the emulator look for the given file and load it, this behaviour is similar to `eden-cli`; allows dragging and dropping games into the application.
|
||||||
|
- `-g <path>`: Alternate way to specify what to load, overrides. However let it be noted that arguments that use `-` will be treated as options/ignored, if your game, for some reason, starts with `-`, in order to safely handle it you may need to specify it as an argument.
|
||||||
|
- `-f`: Use fullscreen.
|
||||||
|
- `-u <number>`: Select the index of the user to load as.
|
||||||
|
- `-qlaunch`: Launch QLaunch.
|
||||||
|
- `-setup`: Launch setup applet.
|
||||||
|
|
||||||
|
## eden-cli
|
||||||
|
- `--debug/-d`: Enter debug mode, allow gdb stub at port `1234`
|
||||||
|
- `--config/-c`: Specify alternate configuration file.
|
||||||
|
- `--fullscreen/-f`: Set fullscreen.
|
||||||
|
- `--help/-h`: Display help.
|
||||||
|
- `--game/-g`: Specify the game to run.
|
||||||
|
- `--multiplayer/-m`: Specify multiplayer options.
|
||||||
|
- `--program/-p`: Specify the program arguments to pass (optional).
|
||||||
|
- `--user/-u`: Specify the user index.
|
||||||
|
- `--version/-v`: Display version and quit.
|
||||||
28
docs/user/ControllerProfileByGame.md
Normal file
28
docs/user/ControllerProfileByGame.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Setting Controller Profiles By Game
|
||||||
|
|
||||||
|
Use this guide when you want to set up specific controller profiles for specific games. This can be useful for certain games like *Captain Toad Treasure Tracker* where a blue dot appears in the middle of the screen when you have docked mode enabled, but not handheld mode.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Setting-Controller-Profiles-By-Game-2b057c2edaf681658a57f0c199cb6083) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden Emulator set up and fully configured
|
||||||
|
- Controller Profile Created
|
||||||
|
- See [*Configuring Controller Profiles*](./ControllerProfiles.md) for instructions on how to do this if needed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. *Right-Click* the game you want to apply the profile to in the main window and select **Properties.**
|
||||||
|
2. Navigate to the **Input Profiles** tab in the window that appears. Drop down on *Player 1 profile* (or whatever player profile you want to apply it to) and select the profile you want.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: You may have to resize the window to see all tabs, or press the arrows by the tabs to see **Input Profiles**.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
1. Click **OK** to apply the profile mapping.
|
||||||
|
2. Launch the game and confirm that the profile is applied, regardless of what the global configuration is.
|
||||||
20
docs/user/ControllerProfiles.md
Normal file
20
docs/user/ControllerProfiles.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Configuring Controller Profiles
|
||||||
|
|
||||||
|
Use this guide for when you want to configure specific controller settings to be reused.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Configuring-Controller-Profiles-2be57c2edaf680eabc3ac8c333ec75c4) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden Set Up and Configured
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
1. Launch Eden and wait for it to load.
|
||||||
|
2. Navigate to *Emulation > Configure…*
|
||||||
|
3. Select **Controls** from the left-hand menu and configure your controller for the way you want it to be in game.
|
||||||
|
4. Select **New** and enter a name for the profile in the box that appears. Press **OK** to save the profile settings.
|
||||||
|
5. Select **OK** to close the settings menu.
|
||||||
91
docs/user/EdenFailsToLaunch_Windows.md
Normal file
91
docs/user/EdenFailsToLaunch_Windows.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Eden Fails to Launch and Does Not Leave Any Logs
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Windows-Eden-Fails-to-Launch-and-Does-Not-Leave-Any-Logs-2b057c2edaf68156b640cf1ac549870a) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Error Details
|
||||||
|
|
||||||
|
*Behavior*: Program appears not to launch or exits immediately without leaving any log entries.
|
||||||
|
*Platform(s) Affected*:
|
||||||
|
- **Windows**
|
||||||
|
|
||||||
|
**Error Log Entries:**
|
||||||
|
|
||||||
|
```
|
||||||
|
None
|
||||||
|
```
|
||||||
|
**Example Error Message Entry in Windows Event Viewer**
|
||||||
|
```
|
||||||
|
Faulting application name: eden.exe, version: 0.0.0.0, time stamp: 0x6795dc3c
|
||||||
|
Faulting module name: ntdll.dll, version: 10.0.26100.3037, time stamp: 0x95e6c489
|
||||||
|
Exception code: 0xc0000005
|
||||||
|
Fault offset: 0x0000000000014778
|
||||||
|
Faulting process id: 0x2AF0
|
||||||
|
Faulting application start time: 0x1DB7C30D2972402
|
||||||
|
Faulting application path: C:\temp\Eden-Windows\eden.exe
|
||||||
|
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
|
||||||
|
Report Id: 4c8a6e13-9637-438c-b4d0-e802d279af66
|
||||||
|
Faulting package full name:
|
||||||
|
Faulting package-relative application ID:
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Causes
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
### Issue 1: Missing C++ Redistributable
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Eden requires the latest C++ redistributable from Microsoft in order to run. Like many other programs, it relies on aspects and libraries included in this runtime, without it - the program cannot run.*
|
||||||
|
|
||||||
|
1. Download the [Latest C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022) from Microsoft for your machine.
|
||||||
|
2. Double Click the downloaded executable file and wait for the software to install.
|
||||||
|
3. Restart the computer.
|
||||||
|
4. Launch Eden again, if the main window appears, you are good to go. If not, proceed to the next issue.
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
### Issue 2: Corrupted System Files
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*A corruption of necessary system files can cause odd behaviors when Eden tries to access them. It is a very rare case and you would likely see other programs misbehaving if this is what your issue is, but you can try if you have no other options.*
|
||||||
|
|
||||||
|
1. Launch Eden to generate a crash.
|
||||||
|
2. Confirm there are no logs created in the log directory.
|
||||||
|
1. See the [How to Access Logs](./HowToAccessLogs.md) page for the log location if you need it.
|
||||||
|
2. If there are any entries in here since you tried step 1, this is likely not your issue.
|
||||||
|
3. Navigate to your *Windows Event Viewer* (Start Menu → **eventvwr.msc)**.
|
||||||
|
4. Expand **Windows Logs** and select **Application.**
|
||||||
|
|
||||||
|
5. Look for an entry with the Level of Error, and look for a message similar to the following
|
||||||
|
|
||||||
|
```
|
||||||
|
Faulting application name: Eden.exe, version: 0.0.0.0, time stamp: 0x6795dc3c
|
||||||
|
Faulting module name: ntdll.dll, version: 10.0.26100.3037, time stamp: 0x95e6c489
|
||||||
|
Exception code: 0xc0000005
|
||||||
|
Fault offset: 0x0000000000014778
|
||||||
|
Faulting process id: 0x2AF0
|
||||||
|
Faulting application start time: 0x1DB7C30D2972402
|
||||||
|
Faulting application path: C:\temp\Eden-Windows\Eden.exe
|
||||||
|
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
|
||||||
|
Report Id: 4c8a6e13-9637-438c-b4d0-e802d279af66
|
||||||
|
Faulting package full name:
|
||||||
|
Faulting package-relative application ID:
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Run a Command Prompt terminal Window as Administrator.
|
||||||
|
7. Enter the following command and wait for it to complete. It will take a while, just be patient and do other things while it completes.
|
||||||
|
|
||||||
|
```
|
||||||
|
DISM /Online /Cleanup-Image /RestoreHealth
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Reboot your computer.
|
||||||
|
9. Launch Eden and verify it is now working.
|
||||||
|
</aside>
|
||||||
@@ -43,6 +43,12 @@ Various graphical filters exist - each of them aimed at a specific target/image
|
|||||||
- **Pros**: Offers decent pixel-art upscaling.
|
- **Pros**: Offers decent pixel-art upscaling.
|
||||||
- **Cons**: Only works for pixel-art.
|
- **Cons**: Only works for pixel-art.
|
||||||
|
|
||||||
|
### Anisotropy values
|
||||||
|
|
||||||
|
The anisotropy value is (value game wants + the set value); **Default** will use the native anisotropy value as it would be on hardware. **Automatic** sets it according to screen resolution. Turning off anisotropy is not recommended as it can break a myriad of games, however it is provided in the name of flexibility.
|
||||||
|
|
||||||
|
Values from x2, x4, x8, x16, x32 up to x64 values are provided. This should be enough to not need to revise those values in my lifetime ever again.
|
||||||
|
|
||||||
### External
|
### External
|
||||||
|
|
||||||
While stock shaders offer a basic subset of options for most users, programs such as [ReShade](https://github.com/crosire/reshade) offer a more flexible experience. In addition to that users can also seek out modifications (mods) for enhancing visual experience (60 FPS mods, HDR, etc).
|
While stock shaders offer a basic subset of options for most users, programs such as [ReShade](https://github.com/crosire/reshade) offer a more flexible experience. In addition to that users can also seek out modifications (mods) for enhancing visual experience (60 FPS mods, HDR, etc).
|
||||||
|
|||||||
29
docs/user/GyroControls_SteamDeck.md
Normal file
29
docs/user/GyroControls_SteamDeck.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Getting Gyro/Motion Controls Working on Steam Deck
|
||||||
|
Use this guide when you want to use the Steam Deck's native gyro functionality for motion controls in Eden.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Getting-Gyro-Motion-Controls-Working-on-Steam-Deck-2b057c2edaf681a1aaade35db6e0fd1b) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Steam Deck Set up and Configured
|
||||||
|
- Eden set up and Configured
|
||||||
|
- Internet Access
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Go into Steam Deck's Desktop Mode, and use the shortcut to launch EmuDeck.
|
||||||
|
2. Install [SteamDeckGyroDSU](https://github.com/kmicki/SteamDeckGyroDSU/releases) by going to *3rd Party Tools > Gyroscope* and clicking **Install.**
|
||||||
|
a. Alternatively you can install [SteamDeckGyroDSU](https://github.com/kmicki/SteamDeckGyroDSU/releases) manually following the GitHub page instructions.
|
||||||
|
3. Upon completion of the installation. You will need to reboot your Steam Deck. Do so before continuing on.
|
||||||
|
4. Go back into the Steam Deck Desktop Mode and open the Dolphin File Explorer.
|
||||||
|
5. Navigate to the following directory to see you controller configuration: `/home/deck/.config/Eden`
|
||||||
|
6. *Right-Click* the **qt-config.ini** file and open it with ***Kate***
|
||||||
|
7. Look for the following line: `player_0_motionleft=[empty]`.
|
||||||
|
8. Change the line to now say: `player_0_motionleft="motion:0,pad:0,port:26760,guid:0000000000000000000000007f000001,engine:cemuhookudp"`
|
||||||
|
9. Save the file and open Eden.
|
||||||
|
10. Launch a compatible title, like *The Legend of Zelda: Breath of the Wild*.
|
||||||
|
11. Test the gyro capabilities, for the above mentioned title, it is accessed by holding down the **R Trigger** and moving the Steam Deck around.
|
||||||
47
docs/user/HowToAccessLogs.md
Normal file
47
docs/user/HowToAccessLogs.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# How to Access Logs
|
||||||
|
|
||||||
|
Use this when you need to review the logs to determine an issue or provide them to a member of the Eden team.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/How-to-Access-Logs-2b057c2edaf68105a281fe1688a332d4) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pre-Requisites
|
||||||
|
|
||||||
|
- Eden installed and run at least once
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
*By default the Eden folder is stored in your AppData `C:\Users\<USER>\AppData\Roaming\Eden\log`, or the local **user** folder if you have a portable installation.*
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
1. Open Eden.
|
||||||
|
2. Navigate to *File > Open Eden Folder > Log Folder*, a Windows explorer window will appear.
|
||||||
|
3. Your log files are now here for your review or upload.
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
### Steam Deck
|
||||||
|
|
||||||
|
*By default the Eden folder is stored in `/home/deck/.local/share/Eden`, or the local **user** folder if you have a portable installation.*
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
1. Open Eden.
|
||||||
|
2. Navigate to *File > Open Eden Folder > Log Folder*, a Dolphin file explorer window will appear.
|
||||||
|
3. Your log files are now here for your review or upload.
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
*Logs are stored in the application data, so you wouldn't be able to access the files directly without a rooted device.*
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
1. Open the Eden application on your device.
|
||||||
|
2. Navigate to *Settings > Share Debug Logs.* You can either save it to your device or send it through some other manner supported by your device.
|
||||||
|
</aside>
|
||||||
28
docs/user/ImportingSaves_Windows.md
Normal file
28
docs/user/ImportingSaves_Windows.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Importing Saves Into Eden
|
||||||
|
|
||||||
|
Use this guide when you want to manually import save files for use in the Eden emulator.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Importing-Saves-Into-Eden-2b057c2edaf681fe968df8d63821ccae) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
- Eden emulator already set up and configured.
|
||||||
|
- The save file(s) you want to import
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
1. Open Eden and wait for it to load.
|
||||||
|
2. Start the game and create a save file to establish the directories.
|
||||||
|
3. *Right-Click* the game for which you want to load a save in.
|
||||||
|
4. Select *Open Save Data Location.*
|
||||||
|
5. A File Explorer will now appear where Eden is looking for the save data for this title.
|
||||||
|
6. Copy the save file(s) you want to import and use in Eden into this directory.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: Different games have different ways of saving them, it may be a single file or multiple files.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
7. Close the file explorer as it is no longer needed.
|
||||||
|
8. Launch the game in Eden and verify that the save data appears through whatever method the game implements.
|
||||||
32
docs/user/InstallingAtmosphereMods.md
Normal file
32
docs/user/InstallingAtmosphereMods.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Installing Atmosphere Mods
|
||||||
|
|
||||||
|
Use this guide for when you want to install an Atmosphere-based mod for use in Eden.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Installing-Atmosphere-Mods-2b057c2edaf681fe8d39cbfc2d0cc799) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden already set up and functioning with keys and firmware
|
||||||
|
- The mod you want to install
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Right-Click the game you want to apply the mod to and select **Open Mod Data Location.**
|
||||||
|
2. Create new folder inside the mod directory with the name of the mod.
|
||||||
|
3. Extract the downloaded mod (if applicable) to a temporary directory.
|
||||||
|
4. Locate the ***exefs*** and ***romfs*** folders inside the extracted mod - usually *atmosphere/contents/<TITLE_ID>*.
|
||||||
|
5. Copy the ***exefs*** and ***romfs*** folders into the mod folder you created earlier.
|
||||||
|
6. Restart Eden.
|
||||||
|
7. Right-Click the game you installed the mod to and hit *Configure Game*.
|
||||||
|
8. Look in the **Add-Ons** tab and observe that the Mod Name (or whatever you named the folder to earlier) now appears on the list and is selected.
|
||||||
|
9. Hit **OK** and launch the game. Your mod should now be active.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE:*** Your mod may not show up on the home screen initially, if it does not. Hit the refresh button in the bottom-left of the window or go back into *Configure Game* and disable the mod by unchecking it, and clicking **OK**. It should now appear on the home screen in the Add-Ons column correctly. Just go back into the *Configure Game* and enable it again if you use this method.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
10. Your mod is now ready to play.
|
||||||
52
docs/user/InstallingUpdates-DLC.md
Normal file
52
docs/user/InstallingUpdates-DLC.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Working with Updates/DLC in Eden
|
||||||
|
|
||||||
|
Use this guide when you want to install Updates or DLC for your games in Eden.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: This applies to separate Update/DLC files, not “merged” NSP/XCI’s which include the base game and Updates/DLC applied on top of them in a single file. These files work in Eden, but would not require the following steps.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Working-with-Updates-DLC-in-Eden-2b057c2edaf681dfb65dfc4dd96980c0) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
1. Eden already setup and configured for your platform.
|
||||||
|
2. The Update/DLC file(s) you want to install
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installing Updates/DLC
|
||||||
|
|
||||||
|
1. Open Eden to the Main Window.
|
||||||
|
2. Select *File > Install Files to NAND...*.
|
||||||
|
3. Navigate to the Update/DLC files you want to install.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: You can install multiple files at once by selecting multiple files in this window.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
4. The file(s) will be scanned for validity and then a confirmation window will appear, select *Install* to begin installation.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: You can deselect any that you do not want to install with the checkbox by each entry.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
5. Upon installation, you will get a prompt saying it was installed successfully.
|
||||||
|
6. Look at the *Add-Ons* column in the main window, you should now see the additional installed content reflected.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Disabling Updates/DLC
|
||||||
|
|
||||||
|
Upon occasion you may find that you want to disable a certain DLC or Update (incompatibility with a mod, causes significant regression, etc.). Luckily the process if very easy to do so.
|
||||||
|
|
||||||
|
1. *Right-Click* the game for which you want to disable the additional content.
|
||||||
|
2. Select *Configure Game.*
|
||||||
|
3. Uncheck the box next to the DLC or Update you want to disable and hit **OK**.
|
||||||
|
4. The listing should now reflect that it has been disabled with a **[D]** before the entry. If you load the game, you will observe that the reported version is not updated (assuming the game reports this information).
|
||||||
12
docs/user/Native.md
Normal file
12
docs/user/Native.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# User Handbook - Native Application Development
|
||||||
|
|
||||||
|
Debugging on physical hardware can get tedious and time consuming. Users are empowered with the debugging capabilities of the emulator to ensure their applications run as-is on the system. To the greatest extent possible atleast.
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
**Standard key prefix**: Allows to redirect the key manager to a file other than `prod.keys` (for example `other` would redirect to `other.keys`). This is useful for testing multiple keysets. Default is `prod`.
|
||||||
|
|
||||||
|
**Changing serial**: Very basic way to set debug values for the serial (and battery number). Developers do not need to write the full serial as it will be writen in-place (that is, it will be filled with the default serial and then overwrite the serial from the beginning).
|
||||||
|
- Battery serial: `YUZU0EMULATOR14022024`
|
||||||
|
- Board serial: `YUZ10000000001`
|
||||||
|
If the user were to set their board serial as `ABC`, then it will be written in-place and the resulting serial would be `ABC10000000001`. There are no underlying checks to ensure correctness of serials other than a hard limit of 16-characters for both.
|
||||||
42
docs/user/QuickStart_SteamDeck.md
Normal file
42
docs/user/QuickStart_SteamDeck.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Eden Quick Start
|
||||||
|
|
||||||
|
Use this guide to get starting using the Eden emulator on Steam Deck.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Eden-Quick-Start-2b757c2edaf680d49ffdcda291a32840) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Firmware dumped from your console
|
||||||
|
- Keys extracted from your console
|
||||||
|
- Games dumped from your console
|
||||||
|
- Internet Connection
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Access Steam Desktop Mode.
|
||||||
|
2. Download either the *Stable* or *Nightly* Eden AppImage onto your Steam Deck and save it somewhere accessible.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: If you have questions about the requirements, architectures, or general information surrounding what release you need - see the [*Basics Guide*](./Basics.md) and [*Architectures Guide*](./Architectures.md).
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
3. Double-Click the Eden executable to launch the program.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: The first time you run the AppImage you will get a notification asking you to confirm you want to launch the program. Hit **Continue**.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
4. If you have had a different Switch emulator installed, it will detect and ask if you want to import those settings. Make your selection to close the screen.
|
||||||
|
5. Eden will now launch and notify you about missing Encryption keys. Close the dialog box by hitting **OK**.
|
||||||
|
6. Navigate to **Tools → Install Decryption Keys**, navigate to the folder containing your ***prod.keys*** file and select the file and hit **Open**.
|
||||||
|
7. Navigate to **Tools → Install Firmware →** *Select **From Folder*** or ***From ZIP*** - depending on how your firmware is stored, navigate to where it is stored and select it.
|
||||||
|
8. Double-Click the main window to add the folder containing your games.
|
||||||
|
9. Go to *Emulation > Configure > Input* and set up your controller. Click **OK** to close the dialog window.
|
||||||
|
10. Double-Click a game to run it.
|
||||||
47
docs/user/QuickStart_Windows.md
Normal file
47
docs/user/QuickStart_Windows.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Eden Quick Start
|
||||||
|
|
||||||
|
Use this guide to get starting using the Eden emulator.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Eden-Quick-Start-2b057c2edaf6817b9859d8bcdb474017) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
|
||||||
|
- The [*latest C++ Redistributable*](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-supported-redistributable-version) from Microsoft.
|
||||||
|
- Eden will not even launch without it see [*Eden Fails to Launch*](./EdenFailsToLaunch.md) for more information.
|
||||||
|
- Firmware dumped from your console
|
||||||
|
- Keys extracted from your console
|
||||||
|
- Games dumped from your console
|
||||||
|
- Internet Connection
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Download either the *Stable* or *Nightly* Eden application.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: If you have questions about the requirements, architectures, or general information surrounding what release you need - see the [*Basics Guide*](./Basics.md) and [*Architectures Guide*](./Architectures.md).
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
2. Extract the contents to wherever you want to store the program on your computer.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: If you want to run Eden completely portable (everything is stored in the folder you extracted it to) - create a folder called **user** if it is not there by default.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
3. Run ***Eden.exe*** to launch the program.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***INFO***: You may get a “*Windows protected your PC”* SmartScreen message that appears. This is just Windows Defender saying it did not recognize the application and did not run it - Eden is completely safe. Click **More info** and then **Run anyway** to dismiss this message.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
4. Eden will now launch and notify you about missing Decryption keys. Close the dialog box by hitting **OK**.
|
||||||
|
5. Navigate to **Tools → Install Decryption Keys**, navigate to the folder containing your key files and select the file, you should only be able to select one.
|
||||||
|
6. Navigate to **Tools → Install Firmware**, *Select **From Folder*** or ***From ZIP*** - depending on how your firmware is stored, navigate to where it is stored and select it.
|
||||||
|
7. Double-Click the main window to add the folder containing your games.
|
||||||
|
8. Go to *Emulation > Configure > Input* and set up your controller of choice. Click **OK** to close the dialog window.
|
||||||
|
9. Double-Click a game to run it.
|
||||||
@@ -6,8 +6,12 @@ This handbook is primarily aimed at the end-user - baking useful knowledge for e
|
|||||||
|
|
||||||
- **[The Basics](Basics.md)**
|
- **[The Basics](Basics.md)**
|
||||||
- **[Audio](Audio.md)**
|
- **[Audio](Audio.md)**
|
||||||
|
- **[Server hosting](ServerHosting.md)**
|
||||||
- **[Graphics](Graphics.md)**
|
- **[Graphics](Graphics.md)**
|
||||||
- **[Platforms and Architectures](Architectures.md)**
|
- **[Platforms and Architectures](Architectures.md)**
|
||||||
- **[Testing](Testing.md)**
|
- **[Testing](Testing.md)**
|
||||||
- **[Data, savefiles and storage](Storage.md)**
|
- **[Data, savefiles and storage](Storage.md)**
|
||||||
- **[Orphaned Profiles](Orphaned.md)**
|
- **[Orphaned Profiles](Orphaned.md)**
|
||||||
|
- **[Command Line](CommandLine.md)**
|
||||||
|
- **[Native Application Development](Native.md)**
|
||||||
|
- **[Adding Boolean Settings Toggles](AddingBooleanToggles.md)**
|
||||||
|
|||||||
29
docs/user/RunOnMacOS_MacOS.md
Normal file
29
docs/user/RunOnMacOS_MacOS.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Allowing Eden to Run on MacOS
|
||||||
|
|
||||||
|
Use this guide when you need to allow Eden to run on a Mac system, but are being blocked by Apple Security policy.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Allowing-Eden-to-Run-on-MacOS-2b057c2edaf681fea63dc81027efeffd) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Permissions to modify settings in MacOS
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Why am I Seeing This?
|
||||||
|
|
||||||
|
Recent versions of MacOS (Catalina & newer) introduced the **Gatekeeper** security functionality, requiring software to be signed by Apple or a trusted (aka - paying) developer. If the signature isn’t on the list of trusted ones, it will stop the program from executing and display the message above.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. Open the *System Settings* panel.
|
||||||
|
2. Navigate to *Privacy & Security*.
|
||||||
|
3. Scroll down and observe the following message under the **Security** settings.
|
||||||
|
4. Select **Open Anyway** to tell your Mac that you trust the application.
|
||||||
|
5. You will now get another window appearing to verify you want to open Eden. Select **Open Anyway**.
|
||||||
|
6. You will be prompted for your password to authorize the request. Enter the credentials of an account that has permission to modify settings and press **OK**.
|
||||||
|
7. Eden will now open and any subsequent launches of the program will not prompt this.
|
||||||
32
docs/user/ServerHosting.md
Normal file
32
docs/user/ServerHosting.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# User Handbook - Server hosting
|
||||||
|
|
||||||
|
This guide explains how to set up a public/private self hosted Eden server/lobby.
|
||||||
|
|
||||||
|
## Using a Kamatera VPS and Docker on Ubuntu
|
||||||
|
|
||||||
|
- Firstly, head over to kamatera.com and create an account. Sign in and create a new server under "My cloud", then create a new server.
|
||||||
|
|
||||||
|
- Region: Choose a location that balances latency for both you and other players (example: New York for US-Europe connections if the host is based in the US).
|
||||||
|
|
||||||
|
- Next, under Server OS Images, select Ubuntu 24.04 LTS. Configure CPU/RAM/specs as desired for your server. Complete the creation process.
|
||||||
|
|
||||||
|
- Enable the Kamatera firewall and set default policy: IN: DROP, OUT: ACCEPT.
|
||||||
|
- After setting the default policy, add the three following rules: #1: SSH Access - Direction: IN, Interface: net0, Macro: SSH - Secure Shell Traffic, Source: ANY, Port: Blank/Auto (Handeld by SSH), Destination: Blank/Auto (Handeld by SSH), Policy: ACCEPT, leave a comment: SSH access.
|
||||||
|
- Then, after creating the first rule, add TCP & UDP Ports for Eden - Direction: IN, Interface: net0, Protocol: TCP or UDP (for respective rule), Source: ANY, Destination Port: 24872, Policy: ACCEPT, leave a comment: Eden server port.
|
||||||
|
- Note: Only UDP is required for Eden; opening TCP is optional.
|
||||||
|
|
||||||
|
- SSH into the server: `ssh root@YOUR_SERVER_IP`.
|
||||||
|
|
||||||
|
- Install Docker: `apt update`, `apt install -y docker.io`, `systemctl enable --now docker`. Verify Docker installation: `docker --version`
|
||||||
|
|
||||||
|
- (Optional) Install Eden AppImage: `chmod +x Eden-Linux*.AppImage` This step is optional and only needed if you want to manage Eden locally on a VPS.
|
||||||
|
|
||||||
|
- Now, we configure the lobby itself. Run the server: `docker run -d --name eden-lobby --restart unless-stopped -p 24872:24872/udp ikuzen/yuzu-hdr-multiplayer-dedicated --room-name "My Eden Room" --password "MySecurePass2025" --max-members 8 --preferred-game "Mario Kart 8 Deluxe" --preferred-game-id "01000ABF0C84C000" --web-api-url "api.ynet-fun.xyz"` This command starts the server in the background, maps the UDP port, and sets your room settings.
|
||||||
|
|
||||||
|
- Now you can try verifying the server: `docker ps` You should see: `eden-lobby Up 0.0.0.0:24872->24872/udp`
|
||||||
|
|
||||||
|
- Connect from the client: Open Eden on your PC, go to Multiplayer > Direct Connect to Room, enter the VPS IP address, use the room name and password you set above or alternatively you should see your lobby within the "Browse Public Game Lobby" section as well.
|
||||||
|
|
||||||
|
- Managing the Docker container: Stop the server: `docker stop eden-lobby`, Start it again: `docker start eden-lobby`, Remove it: `docker rm -f eden-lobby` if you want to change the name of your lobby, you must first stop the server via: docker stop eden-lobby, then remove it via: docker rm -f eden-lobby. Then edit the server name and just repaste the updated command.
|
||||||
|
|
||||||
|
- Notes: Only UDP port 24872 is strictly required. You can customize room name, password, max members, and preferred game. Optional parameters from the original Outcaster guide include: `--room-description` (Adds a room description in the lobby), `--allowed-name-suffix` (Restricts usernames), `--moderator-password` (Adds a moderator role), `--allow-non-preferred-game` (Allows games other than the preferred game)
|
||||||
66
docs/user/SyncthingGuide_General.md
Normal file
66
docs/user/SyncthingGuide_General.md
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# Backing Up/Syncing Eden Game Saves
|
||||||
|
|
||||||
|
Use this guide for when you want to configure automated backup/syncing of your Eden save files using [*Syncthing*](https://syncthing.net/).
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Backing-Up-Syncing-Eden-Game-Saves-2b357c2edaf68000b40cfab2c2c3dc0a) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden already installed, configured, and functioning.
|
||||||
|
- Devices to run Syncthing on.
|
||||||
|
- Ability to allow a program to communicate through the firewall of your device.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Platform Specific Setup Guides
|
||||||
|
|
||||||
|
- [*Windows*](./SyncthingGuide_Windows.md)
|
||||||
|
- *MacOS (Coming Soon)*
|
||||||
|
- *Steam Deck (Coming Soon)*
|
||||||
|
- *Android (Coming Soon)*
|
||||||
|
- [*Linux*](./SyncthingGuide_Linux.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## A Few Notes Before You Proceed
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***WARNING***: You should manually back up your save files before proceeding with this guide. If you incorrectly perform the steps, you risk losing them!
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
- While this is a de-centralized model without the concepts of a Server/Client, Parent/Child, etc. - For the purposes of these guides, we will borrow from this models terminology to avoid sync conflicts and potential data loss. After the initial setup, all the devices in the sync network are equals and can push & pull files from any other device.
|
||||||
|
- In order for this to work, you should get all of the save files in Eden in the save folder on the Parent.
|
||||||
|
- If you need help doing that, see the ***Importing Saves into Eden*** guide for the platform you elect to act as the Parent, and delete the save files on the "Child" devices.
|
||||||
|
|
||||||
|
### Terminology
|
||||||
|
|
||||||
|
- **Sync Network**: All the devices configured in *Syncthing* to push/pull files.
|
||||||
|
- **Parent**: This will be the device that you elect to push files to the other devices. There can only be one here initially in order to avoid sync conflicts.
|
||||||
|
- **Child**: All the other devices added to the Sync Network. These devices will pull files from the Parent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Rather than giving a breakdown of all the platforms and configurations, those will be in the platform’s specific guides - this will serve as a general overview of Syncthing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### What is Syncthing Anyway?
|
||||||
|
|
||||||
|
Syncthing is a continuous file synchronization program (in the layman’s - make sure 2 or more systems with the same files are always up to date). This is perfect for game saves where we would want to play on 1 device, save our game, and then continue playing it on another device. This technology is what Epic/Steam/etc. use to allow you to do this on games run through their respective services. Syncthing is an open source implementation of this technology that you control, rather than relying on a 3rd party. This has a few key benefits, most notably - better security, privacy, and speed (when on your LAN).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### What are some common issues?
|
||||||
|
|
||||||
|
Syncthing is fairly robust and doesn’t have many issues luckily, but there are some things you should watch out for (almost all of them a user issue).
|
||||||
|
|
||||||
|
- Sync conflicts
|
||||||
|
- If for whatever reason you update the same file on 2 different machines, the system does not know which updated file is considered the one to sync across. This results in a ***sync conflict*** where it may not sync the files as you would expect. Worst case scenario, this can result in your save progress being lost if you are not careful. When one of these occurs, it will create a copy of the file and store it with a specific name, like this example, *Paper Mario.sync-conflict-20251102-072925-TZBBN6S.srm.* To resolve this, you must remove the other files and remove the *.sync-conflict-<TIMESTAMP>-<Syncthing Device ID>* from the file name of the file you want to keep.
|
||||||
|
- Accidental Deletions
|
||||||
|
- If you delete a file from one of the devices, it will also remove the file on the other devices when they perform a sync so be careful when doing this.
|
||||||
96
docs/user/SyncthingGuide_Linux.md
Normal file
96
docs/user/SyncthingGuide_Linux.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# Backing Up/Syncing Eden Game Saves
|
||||||
|
|
||||||
|
Use this guide for when you want to configure automated backup/syncing of your Eden save files using [*Syncthing*](https://syncthing.net/) on Linux.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Backing-Up-Syncing-Eden-Game-Saves-2b057c2edaf680fc8a28eba5a05fd7a3) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Read the [*Syncthing General Guide*](./SyncthingGuide_General.md).
|
||||||
|
- Eden already installed, configured, and functioning.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***WARNING***: You should manually back up your save files before proceeding with this guide. If you incorrectly perform the steps, you risk losing them!
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: I am using Linux Mint for my guides, but the steps should translate pretty easily to your distro. I ***hope*** that if you are running Linux you know the basic operations. Steam Deck users should follow the guide specific to that platform.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
### Downloading and Installing Syncthing
|
||||||
|
|
||||||
|
1. Download [*Syncthing Tray*](https://flathub.org/en/apps/io.github.martchus.syncthingtray) from the Flatpak store.
|
||||||
|
2. Launch *Syncthing Tray* to run it, select the **Start guided setup** on the splash screen that appears and press **Next**.
|
||||||
|
3. It will then look for an existing *Syncthing* instance to pull settings from, but will likely fail to do so if you are here. Regardless, select the **Yes, continue configuration** option.
|
||||||
|
4. Select ***Start installed Syncthing application via Syncthing Tray***, this means it will use a built in Syncthing executable rather than relying on an externally provided one. Press **Next** to continue.
|
||||||
|
5. You will now be presented with a confirmation window with your selections, confirm they are what you want and hit **Apply** to continue.
|
||||||
|
6. You will now be prompted with a confirmation window that has a QR code and the devices identifier - you will need one of these to add other devices to the sync system.
|
||||||
|
7. *Syncthing/Syncthing Tray* are now installed. Press Finish to close the pop up.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: By default due to flatpak sandboxing limitations, Syncthing Tray will not run automatically on login. You can get around this by following the [*instructions here*](https://github.com/flathub/io.github.martchus.syncthingtray).
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Configuring this Machine as a Parent
|
||||||
|
|
||||||
|
Use this when you want to set this machine as the initial source of truth (push files out to all the other devices). Afterwards they will all be equal partners, not a parent/child relationship, this just helps with initial setup.
|
||||||
|
|
||||||
|
1. Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing.**
|
||||||
|
1. If you don’t have a taskbar in your distro, you can also reach it directly by opening a web browser to: *http://127.0.0.1:8384/.*
|
||||||
|
2. You will now have a browser window open up to a web GUI to configure *Syncthing*. You will get a pop up about allowing anonymous usage and setting a password, make your selections to close them.
|
||||||
|
3. We’ll start by adding the folder with our save files that we want to sync by Pressing **+ Add Folder**.
|
||||||
|
4. A pop-up window will appear, fill in the Folder label field with whatever you want to call it, like Switch Saves.
|
||||||
|
5. Enter the Full folder path to where your save files are stored on this machine.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way to do this would be to open Eden, right-click a game that has a save, hit ***Open Save Data Location,*** and then go up 1 directory. It should contain folders with the TitleID of your games.
|
||||||
|
|
||||||
|
It should look similar to this: ..*\nand\user\save\0000000000000000\EC573727F509799675F6E5112C581D7E*
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
6. Ignore the other tabs for now and hit **Save**.
|
||||||
|
7. The folder is now ready to be shared with other devices.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Configuring this Machine as a Child
|
||||||
|
|
||||||
|
Use this when you want to set this machine up as a child (pull files from the other devices). Afterwards they will all be equal partners, not a parent/child relationship, this just helps with initial setup.
|
||||||
|
|
||||||
|
1. Install Syncthing Tray on the client device following the section above. Copy the child’s ID and store it so it is accessible to the Parent.
|
||||||
|
2. ***ON THE PARENT***: Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing** if it is not open already**.**
|
||||||
|
3. You will now have a browser window open up to a web GUI to configure *Syncthing*. You will get a pop up about allowing anonymous usage and setting a password, make your selections to close them.
|
||||||
|
4. Navigate down to **+ Add Remote Device**, we are going to add our Child device, so I hope you have its ID handy. If not, go back and get it.
|
||||||
|
5. Add the ID and Name the device, the device may appear as a **nearby device**, in which case you can just click it to pre-populate the Device ID.
|
||||||
|
6. Click the **Sharing** Tab, and check the box next to the folder you set up on the Parent (Switch Saves in my case). Hit **Save.**
|
||||||
|
7. We are done with the parent, now **SWITCH OVER TO THE CHILD.**
|
||||||
|
8. ***ON THE CHILD***: Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing** if it is not open already.
|
||||||
|
9. You should now see a connection request pop-up from the parent. Hit **+ Add Device** to add the device.
|
||||||
|
10. Hit **Save** to finish adding the device.
|
||||||
|
11. That pop-up will close and you will get notification that the device wants to share a folder now. Hit **Add.**
|
||||||
|
12. Enter the path to the save folder in Eden and hit **Save.**
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way to do this would be to open Eden, right-click a game that has a save, hit ***Open Save Data Location,*** and then go up 1 directory. It should contain folders with the TitleID of your games.
|
||||||
|
|
||||||
|
It should look similar to this: ..*\nand\user\save\0000000000000000\EC573727F509799675F6E5112C581D7E*
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
13. *Syncthing* will now pull all the files from the Parent and store them in your local save directory. At this point the files are in sync and alterations to one will affect the other and both can be considered “*Parents*” for other devices you want to add. Repeat these steps for as many devices you want.
|
||||||
95
docs/user/SyncthingGuide_Windows.md
Normal file
95
docs/user/SyncthingGuide_Windows.md
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
# Backing Up/Syncing Eden Game Saves
|
||||||
|
|
||||||
|
Use this guide for when you want to configure automated backup/syncing of your Eden save files using [*Syncthing](https://syncthing.net/)* on Windows.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Backing-Up-Syncing-Eden-Game-Saves-2b057c2edaf680f5aa9cd1c4f97121ce) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Read the [*Syncthing General Guide*](./SyncthingGuide_General.md).
|
||||||
|
- Eden already installed, configured, and functioning.
|
||||||
|
- Ability to allow a program to communicate through the firewall in Windows.
|
||||||
|
- Ability to extract archive (.zip/.7z/.rar) files.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***WARNING***: You should manually back up your save files before proceeding with this guide. If you incorrectly perform the steps, you risk losing them!
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
### Downloading and Installing *Syncthing*
|
||||||
|
|
||||||
|
1. Download [*Syncthing Tray*](https://martchus.github.io/syncthingtray/#downloads-section).
|
||||||
|
1. While it is available as a command line interface, for most people I would recommend *Syncthing Tray* on Windows. For most people here, you would download the **64-bit (Intel/AMD)** version.
|
||||||
|
2. Open the downloaded archive and extract the **syncthingtray.exe** to wherever you want to store the executable.
|
||||||
|
3. Double-Click the application to run it, select the **Start guided setup** on the splash screen that appears and press **Next**.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: You may get a Windows Defender Smart Screen pop up, this is a known thing, just accept and run anyway.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
4. It will then look for an existing Syncthing instance to pull settings from, but will likely fail to do so if you are here. Regardless, select the **Yes, continue configuration** option.
|
||||||
|
5. Select ***Start Syncthing application that is built into Syncthing Tray***, this means it will use a built in Syncthing executable rather than relying on an externally provided one. Press **Next** to continue.
|
||||||
|
6. Check the box to start Syncthing Tray on login - as the name implies, this means the program will run automatically whenever you log onto the computer. Press Next to continue.
|
||||||
|
7. You will now be presented with a confirmation window with your selections, confirm they are what you want and hit **Apply** to continue.
|
||||||
|
8. You will now be prompted with a confirmation window and a message to allow it through the firewall. Allow the access through the firewall to close that pop up. The confirmation screen has a QR code and the devices identifier - you will need one of these to add other devices to the sync system.
|
||||||
|
9. *Syncthing/Syncthing Tray* are now installed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Configuring this Machine as a Parent
|
||||||
|
|
||||||
|
Use this when you want to set this machine as the initial source of truth (push files out to all the other devices). Afterwards they will all be equal partners, not a parent/child relationship, this just helps with initial setup.
|
||||||
|
|
||||||
|
1. Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing.**
|
||||||
|
2. You will now have a browser window open up to a web GUI to configure *Syncthing*. You will get a pop up about allowing anonymous usage and setting a password, make your selections to close them.
|
||||||
|
3. We’ll start by adding the folder with our save files that we want to sync by Pressing **+ Add Folder**.
|
||||||
|
4. A pop-up window will appear, fill in the Folder label field with whatever you want to call it, like Switch Saves.
|
||||||
|
5. Enter the Full folder path to where your save files are stored on this machine.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way to do this would be to open Eden, right-click a game that has a save, hit ***Open Save Data Location,*** and then go up 1 directory. It should contain folders with the TitleID of your games.
|
||||||
|
|
||||||
|
It should look similar to this: ..*\nand\user\save\0000000000000000\EC573727F509799675F6E5112C581D7E*
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
6. Ignore the other tabs for now and hit **Save**.
|
||||||
|
7. The folder is now ready to be shared with other devices.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Configuring this Machine as a Child
|
||||||
|
|
||||||
|
Use this when you want to set this machine up as a child (pull files from the other devices). Afterwards they will all be equal partners, not a parent/child relationship, this just helps with initial setup.
|
||||||
|
|
||||||
|
1. Install Syncthing Tray on the client device following the section above. Copy the child’s ID and store it so it is accessible to the Parent.
|
||||||
|
2. ***ON THE PARENT***: Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing** if it is not open already**.**
|
||||||
|
3. You will now have a browser window open up to a web GUI to configure *Syncthing*. You will get a pop up about allowing anonymous usage and setting a password, make your selections to close them.
|
||||||
|
4. Navigate down to **+ Add Remote Device**, we are going to add our Child device, so I hope you have its ID handy. If not, go back and get it.
|
||||||
|
5. Add the ID and Name the device, the device may appear as a **nearby device**, in which case you can just click it to pre-populate the Device ID.
|
||||||
|
6. Click the **Sharing** Tab, and check the box next to the folder you set up on the Parent (Switch Saves in my case). Hit **Save.**
|
||||||
|
7. We are done with the parent, now **SWITCH OVER TO THE CHILD.**
|
||||||
|
8. ***ON THE CHILD***: Right-Click the *Syncthing* Tray icon in your taskbar and select **Open Syncthing** if it is not open already**.**
|
||||||
|
9. You should now see a connection request from the parent. Hit **+ Add Device** to add the device.
|
||||||
|
10. Hit **Save** to finish adding the device.
|
||||||
|
11. That pop-up will close and you will get notification that the device wants to share a folder now. Hit **Add.**
|
||||||
|
12. Enter the path to the save folder in Eden and hit **Save.**
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way to do this would be to open Eden, right-click a game that has a save, hit ***Open Save Data Location,*** and then go up 1 directory. It should contain folders with the TitleID of your games.
|
||||||
|
|
||||||
|
It should look similar to this: ..*\nand\user\save\0000000000000000\EC573727F509799675F6E5112C581D7E*
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
13. *Syncthing* will now pull all the files from the Parent and store them in your local save directory. At this point the files are in sync and alterations to one will affect the other and both can be considered “*Parents*” for other devices you want to add. Repeat these steps for as many devices you want.
|
||||||
43
docs/user/UsingAmiibo_Windows.md
Normal file
43
docs/user/UsingAmiibo_Windows.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Using Amiibo with Eden
|
||||||
|
|
||||||
|
Use this guide when you want to load Amiibo into your games for use with the Eden emulator.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Using-Amiibo-with-Eden-2b057c2edaf681b1b28ec6be600c6d3e) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
1. The Eden Emulator fully set up and configured.
|
||||||
|
2. The Amiibo file you want to use.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: Eden only supports the *.bin* amiibo format, ***NOT*** the *.nfc* format.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
1. Launch Eden and launch the game you want to load Amiibo for.
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: You must be in-game before you can emulate scanning an Amiibo
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
1. Navigate to the Amiibo section of the game. The method for initiating the scanning varies from game to game, for *Captain Toad’s Treasure Tracker*, you need to go to the press the **+** button when on the level select. You will need to look up how to do so with your specific game.
|
||||||
|
2. Upon activating the Amiibo scan functionality, you should get a Scan page. Eden is now looking for an Amiibo file to be loaded, which emulates scanning an Amiibo on actual hardware.
|
||||||
|
3. Navigate to **File > Load/Remove Amiibo…**, or press the hotkey to do the same (**F2** on keyboard by default).
|
||||||
|
4. In the file explorer that opens, navigate to the amiibo file you want to use.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***NOTE***: It seems the scanning functionality is spotty and will sometimes throw a "*The current game is not looking for amiibos*” message, even though it is. Usually you just need to try loading it again or restarting the scanning from the game. In some situations it was only resolved by restarting the game.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
5. Upon loading a valid file, you will get a confirmation screen and your bonus content will be unlocked/functionality activated.
|
||||||
|
6. Repeat with any other Amiibo you want to use.
|
||||||
92
docs/user/UsingCheats_Android.md
Normal file
92
docs/user/UsingCheats_Android.md
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# Using Cheats with Eden
|
||||||
|
|
||||||
|
Use this guide when you want to add cheats into a game to alter gameplay for use with the Eden emulator.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Using-Cheats-with-Eden-2b057c2edaf6818fab66c276e2304bb4) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden Emulator fully set up and configured on your Android device.
|
||||||
|
- The cheat(s) you want to apply.
|
||||||
|
- The **Build ID** of the game.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way I have found to find the Build ID is by Right-Clicking the game **IN RYUJINX ON PC** and hitting **Manage Cheats**. Your Build ID will be displayed at the top.
|
||||||
|
|
||||||
|
Another option would be to launch the game in Eden and close it - then go into the log and look for a line like this - the first 16 characters if your Build ID. Make sure that it is the MAIN line.
|
||||||
|
[ 27.098382] Loader <Info> core/file_sys/patch_manager.cpp:HasNSOPatch:304: Querying NSO patch existence for build_id=AEE6DCCC06D9C05B42061E2019123A61, name=main
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
### Configuring a Cheat
|
||||||
|
|
||||||
|
1. Create a directory somewhere accessible on your phone with the name of the cheat. The name you choose only affects how it is displayed in Eden.
|
||||||
|
2. Create a directory inside of this folder called **cheats.**
|
||||||
|
3. Create a new text file and copy the Hex Code of the cheat into it, optionally with the cheat name at the beginning like this example. Here this code will set the timer to 999 in *New Super Mario Bros. U Deluxe.*
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[Time = 999]
|
||||||
|
58000000 00C88A70
|
||||||
|
78001000 00000090
|
||||||
|
64000000 00000000 003E6F00
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Save the file as a **txt** file with the Build ID of the game. For my example, my Build ID is **AEE6DCCC06D9C05B** so my file would be `AEE6DCCC06D9C05B.txt`.
|
||||||
|
5. Open Eden and press and hold the game you want to apply the cheat to.
|
||||||
|
6. Scroll down on the properties until you see **Add-ons**, select this option.
|
||||||
|
7. Select + **Install** then select **Mods and cheats** and **OK** on the window that appears.
|
||||||
|
8. A file explorer will now appear. Navigate to the directory created in step 1 and select the folder.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***INFO***: Make sure you select the correct directory or it will not work, the screen should show the **cheats** sub-directory.
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
2. You should now see the cheat appear in the **Add-ons** screen.
|
||||||
|
3. Launch the game and confirm that the cheat is applied.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Multiple Cheats
|
||||||
|
|
||||||
|
In order to install multiple cheats, you must repeat the steps above with the new cheat, creating a new directory with the name of the cheat and cheats directory. You **cannot** install multiple cheats with a single file.
|
||||||
|
|
||||||
|
Community Member [Ninjistix](https://github.com/Ninjistix) created a utility (Windows or anything that can run Python) that can take a file with multiple cheats and create the files/structure for you with a provided Build ID. To download and run it, see the [GitHub Project](https://github.com/Ninjistix/nxCheat_Splitter) page.
|
||||||
|
|
||||||
|
**Example cheat TXT file with multiple cheats. It must be in this format to work:**
|
||||||
|
```
|
||||||
|
[Super Mario Bros. Wonder - Various] <- Optional
|
||||||
|
|
||||||
|
[♯ 1. Always Star Power]
|
||||||
|
040E0000 00880580 52800035
|
||||||
|
|
||||||
|
[♯ 2. Star Power + Bubble Mode (Invincible)]
|
||||||
|
040E0000 00880580 52800075
|
||||||
|
|
||||||
|
[♯ 3. Can Fast Travel to Any Course and World]
|
||||||
|
040E0000 00935E10 52800036
|
||||||
|
040E0000 0048A528 52800028
|
||||||
|
040E0000 005D9F58 52800028
|
||||||
|
|
||||||
|
[♯ 4. Got All Top of Flag Poles]
|
||||||
|
040E0000 0048A818 52800028
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Enabling/Disabling Cheats
|
||||||
|
|
||||||
|
Cheats are enabled by default, but can be disabled so they don’t affect gameplay fairly easily using the game properties.
|
||||||
|
|
||||||
|
1. Open Eden and press and hold the game you want to apply the cheat to.
|
||||||
|
2. Scroll down on the properties until you see **Add-ons**, select this option.
|
||||||
|
3. *Select/Deselect* the name of the cheat you wish to enable/disable.
|
||||||
|
4. Click **OK** to close the window.
|
||||||
|
5. Launch the game to confirm the cheat is/is not active.
|
||||||
83
docs/user/UsingCheats_Windows.md
Normal file
83
docs/user/UsingCheats_Windows.md
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Using Cheats with Eden
|
||||||
|
|
||||||
|
Use this guide when you want to add cheats into a game to alter gameplay for use with the Eden emulator.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Using-Cheats-with-Eden-2b057c2edaf6818fab66c276e2304bb4) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pre-Requisites
|
||||||
|
|
||||||
|
- Eden Emulator fully set up and configured
|
||||||
|
- The cheat(s) you want to apply
|
||||||
|
- The **Build ID** of the game.
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
|
||||||
|
***TIP***: The easiest way I have found to find the Build ID is by Right-Clicking the game **IN RYUJINX** and hitting **Manage Cheats**. Your Build ID will be displayed at the top.
|
||||||
|
|
||||||
|
Another option would be to launch the game in Eden and close it - then go into the log and look for a line like this - the first 16 characters if your Build ID. **Make sure that it is the MAIN line**.
|
||||||
|
`[ 27.098382] Loader <Info> core/file_sys/patch_manager.cpp:HasNSOPatch:304: Querying NSO patch existence for build_id=AEE6DCCC06D9C05B42061E2019123A61, name=main`
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Configuring a Cheat
|
||||||
|
|
||||||
|
1. Copy the Hex Code of the cheat into a text file, optionally with the cheat name at the beginning like the example. Here this code will set the timer to 999 in *New Super Mario Bros. U Deluxe.*
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[Time = 999]
|
||||||
|
58000000 00C88A70
|
||||||
|
78001000 00000090
|
||||||
|
64000000 00000000 003E6F00
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Save the file as a **txt** file with the Build ID of the game. For my example, my Build ID is **AEE6DCCC06D9C05B** so my file would be `AEE6DCCC06D9C05B.txt`.
|
||||||
|
2. Launch Eden and wait for the program to load.
|
||||||
|
3. *Right-Click* the game in Eden and select **Open Mod Data Location**. A file explorer window should appear.
|
||||||
|
4. Create a folder inside of the file explorer window with the name of the cheat. This name does not matter and only affects how it appears in the game properties inside of Eden.
|
||||||
|
5. Navigate inside of this folder and create another folder called **cheats.**
|
||||||
|
6. Move the txt file you created earlier into this **cheats** folder. (e.g. `<mod_location>/Time 999/cheats/AEE6DCCC06D9C05B.txt` )
|
||||||
|
7. Go back to Eden and *right-click* the game. Select *Configure Game* and you should now see the cheat you created appear in the **Add-Ons** section with the name of the folder from step 6.
|
||||||
|
8. Launch the game to verify that the cheat is enabled.
|
||||||
|
|
||||||
|
### Multiple Cheats
|
||||||
|
|
||||||
|
In order to install multiple cheats, you must repeat the steps above with the new cheat, creating a new directory with the name of the cheat and cheats directory. You **cannot** install multiple cheats with a single file.
|
||||||
|
|
||||||
|
Community Member [Ninjistix](https://github.com/Ninjistix) created a utility (Windows or anything that can run Python) that can take a file with multiple cheats and create the files/structure for you with a provided Build ID. To download and run it, see the [GitHub Project](https://github.com/Ninjistix/nxCheat_Splitter) page.
|
||||||
|
|
||||||
|
**Example cheat TXT file with multiple cheats. It must be in this format to work:**
|
||||||
|
```
|
||||||
|
[Super Mario Bros. Wonder - Various] <- Optional
|
||||||
|
|
||||||
|
[♯ 1. Always Star Power]
|
||||||
|
040E0000 00880580 52800035
|
||||||
|
|
||||||
|
[♯ 2. Star Power + Bubble Mode (Invincible)]
|
||||||
|
040E0000 00880580 52800075
|
||||||
|
|
||||||
|
[♯ 3. Can Fast Travel to Any Course and World]
|
||||||
|
040E0000 00935E10 52800036
|
||||||
|
040E0000 0048A528 52800028
|
||||||
|
040E0000 005D9F58 52800028
|
||||||
|
|
||||||
|
[♯ 4. Got All Top of Flag Poles]
|
||||||
|
040E0000 0048A818 52800028
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Enabling/Disabling Cheats
|
||||||
|
|
||||||
|
Cheats are enabled by default, but can be disabled so they don’t affect gameplay fairly easily using the game properties.
|
||||||
|
|
||||||
|
1. *Right-Click* the game and select *Configure Game*.
|
||||||
|
2. In the **Add-Ons** section, locate the cheat you wish to enable.
|
||||||
|
3. *Select/Deselect* the name of the cheat you wish to enable/disable.
|
||||||
|
4. Click **OK** to close the window.
|
||||||
|
5. Launch the game to confirm the cheat is/is not active.
|
||||||
24
externals/CMakeLists.txt
vendored
24
externals/CMakeLists.txt
vendored
@@ -27,7 +27,7 @@ set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
|
|||||||
|
|
||||||
# Xbyak (also used by Dynarmic, so needs to be added first)
|
# Xbyak (also used by Dynarmic, so needs to be added first)
|
||||||
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
||||||
if (PLATFORM_SUN OR PLATFORM_OPENBSD)
|
if (PLATFORM_SUN OR PLATFORM_OPENBSD OR PLATFORM_NETBSD OR PLATFORM_DRAGONFLY)
|
||||||
AddJsonPackage(xbyak_sun)
|
AddJsonPackage(xbyak_sun)
|
||||||
else()
|
else()
|
||||||
AddJsonPackage(xbyak)
|
AddJsonPackage(xbyak)
|
||||||
@@ -267,9 +267,11 @@ if (ANDROID AND ARCHITECTURE_arm64)
|
|||||||
AddJsonPackage(libadrenotools)
|
AddJsonPackage(libadrenotools)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (UNIX AND NOT APPLE AND NOT TARGET gamemode::headers)
|
AddJsonPackage(gamemode)
|
||||||
|
|
||||||
|
if (gamemode_ADDED)
|
||||||
add_library(gamemode INTERFACE)
|
add_library(gamemode INTERFACE)
|
||||||
target_include_directories(gamemode INTERFACE gamemode)
|
target_include_directories(gamemode INTERFACE ${gamemode_SOURCE_DIR}/lib)
|
||||||
add_library(gamemode::headers ALIAS gamemode)
|
add_library(gamemode::headers ALIAS gamemode)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -392,3 +394,19 @@ if (ANDROID)
|
|||||||
|
|
||||||
add_library(oboe::oboe ALIAS oboe)
|
add_library(oboe::oboe ALIAS oboe)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
# moltenvk
|
||||||
|
if (NOT YUZU_USE_BUNDLED_MOLTENVK)
|
||||||
|
find_library(MOLTENVK_LIBRARY MoltenVK)
|
||||||
|
else()
|
||||||
|
unset(MOLTENVK_LIBRARY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO: kosmickrisp?
|
||||||
|
if (NOT MOLTENVK_LIBRARY)
|
||||||
|
AddJsonPackage(moltenvk)
|
||||||
|
|
||||||
|
set(MOLTENVK_LIBRARY "${moltenvk_SOURCE_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib" CACHE STRING "" FORCE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|||||||
17
externals/cmake-modules/DefaultConfig.cmake
vendored
Normal file
17
externals/cmake-modules/DefaultConfig.cmake
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## DefaultConfig ##
|
||||||
|
|
||||||
|
# Generally, you will always want "some" default configuration for your project.
|
||||||
|
# This module does nothing but enforce that. :)
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_TYPE_DEFAULT "Release" CACHE STRING "Default build type")
|
||||||
|
|
||||||
|
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||||
|
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE_DEFAULT}"
|
||||||
|
CACHE STRING "Choose the type of build." FORCE)
|
||||||
|
message(STATUS "[DefaultConfig] Defaulting to a "
|
||||||
|
"${CMAKE_BUILD_TYPE_DEFAULT} build")
|
||||||
|
endif()
|
||||||
225
externals/cmake-modules/DetectArchitecture.cmake
vendored
Normal file
225
externals/cmake-modules/DetectArchitecture.cmake
vendored
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## DetectArchitecture ##
|
||||||
|
#[[
|
||||||
|
Does exactly as it sounds. Detects common symbols defined for different architectures and
|
||||||
|
adds compile definitions thereof. Namely:
|
||||||
|
- arm64
|
||||||
|
- arm
|
||||||
|
- x86_64
|
||||||
|
- x86
|
||||||
|
- ia64
|
||||||
|
- mips64
|
||||||
|
- mips
|
||||||
|
- ppc64
|
||||||
|
- ppc
|
||||||
|
- riscv
|
||||||
|
- riscv64
|
||||||
|
- loongarch64
|
||||||
|
- wasm
|
||||||
|
|
||||||
|
Unsupported architectures:
|
||||||
|
- ARMv2-6
|
||||||
|
- m68k
|
||||||
|
- PIC
|
||||||
|
|
||||||
|
This file WILL NOT detect endian-ness for you.
|
||||||
|
|
||||||
|
This file is based off of Yuzu and Dynarmic.
|
||||||
|
]]
|
||||||
|
|
||||||
|
# multiarch builds are a special case and also very difficult
|
||||||
|
# this is what I have for now, but it's not ideal
|
||||||
|
|
||||||
|
# Do note that situations where multiple architectures are defined
|
||||||
|
# should NOT be too dependent on the architecture
|
||||||
|
# otherwise, you may end up with duplicate code
|
||||||
|
if (CMAKE_OSX_ARCHITECTURES)
|
||||||
|
set(MULTIARCH_BUILD 1)
|
||||||
|
set(ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
|
||||||
|
# hope and pray the architecture names match
|
||||||
|
foreach(ARCH IN ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
set(ARCHITECTURE_${ARCH} 1 PARENT_SCOPE)
|
||||||
|
add_definitions(-DARCHITECTURE_${ARCH}=1)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
function(detect_architecture symbol arch)
|
||||||
|
# The output variable needs to be unset between invocations otherwise
|
||||||
|
# CMake's crazy scope rules will keep it defined
|
||||||
|
unset(SYMBOL_EXISTS CACHE)
|
||||||
|
|
||||||
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
|
set(CMAKE_REQUIRED_QUIET 1)
|
||||||
|
check_symbol_exists("${symbol}" "" SYMBOL_EXISTS)
|
||||||
|
unset(CMAKE_REQUIRED_QUIET)
|
||||||
|
|
||||||
|
if (SYMBOL_EXISTS)
|
||||||
|
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
||||||
|
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
||||||
|
add_definitions(-DARCHITECTURE_${arch}=1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(detect_architecture_symbols)
|
||||||
|
if (DEFINED ARCHITECTURE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(oneValueArgs ARCH)
|
||||||
|
set(multiValueArgs SYMBOLS)
|
||||||
|
|
||||||
|
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}"
|
||||||
|
"${ARGN}")
|
||||||
|
|
||||||
|
set(arch "${ARGS_ARCH}")
|
||||||
|
foreach(symbol ${ARGS_SYMBOLS})
|
||||||
|
detect_architecture("${symbol}" "${arch}")
|
||||||
|
|
||||||
|
if (ARCHITECTURE_${arch})
|
||||||
|
message(DEBUG "[DetectArchitecture] Found architecture symbol ${symbol} for ${arch}")
|
||||||
|
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
||||||
|
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
||||||
|
add_definitions(-DARCHITECTURE_${arch}=1)
|
||||||
|
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(DetectArchitecture)
|
||||||
|
# arches here are put in a sane default order of importance
|
||||||
|
# notably, amd64, arm64, and riscv (in order) are BY FAR the most common
|
||||||
|
# mips is pretty popular in embedded
|
||||||
|
# ppc64 is pretty popular in supercomputing
|
||||||
|
# sparc is uh
|
||||||
|
# ia64 exists
|
||||||
|
# the rest exist, but are probably less popular than ia64
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH arm64
|
||||||
|
SYMBOLS
|
||||||
|
"__ARM64__"
|
||||||
|
"__aarch64__"
|
||||||
|
"_M_ARM64")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH x86_64
|
||||||
|
SYMBOLS
|
||||||
|
"__x86_64"
|
||||||
|
"__x86_64__"
|
||||||
|
"__amd64"
|
||||||
|
"_M_X64"
|
||||||
|
"_M_AMD64")
|
||||||
|
|
||||||
|
# riscv is interesting since it generally does not define a riscv64-specific symbol
|
||||||
|
# We can, however, check for the rv32 zcf extension which is good enough of a heuristic on GCC
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH riscv
|
||||||
|
SYMBOLS
|
||||||
|
"__riscv_zcf")
|
||||||
|
|
||||||
|
# if zcf doesn't exist we can safely assume it's riscv64
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH riscv64
|
||||||
|
SYMBOLS
|
||||||
|
"__riscv")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH x86
|
||||||
|
SYMBOLS
|
||||||
|
"__i386"
|
||||||
|
"__i386__"
|
||||||
|
"_M_IX86")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH arm
|
||||||
|
SYMBOLS
|
||||||
|
"__arm__"
|
||||||
|
"__TARGET_ARCH_ARM"
|
||||||
|
"_M_ARM")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH ia64
|
||||||
|
SYMBOLS
|
||||||
|
"__ia64"
|
||||||
|
"__ia64__"
|
||||||
|
"_M_IA64")
|
||||||
|
|
||||||
|
# mips is probably the least fun to detect due to microMIPS
|
||||||
|
# Because microMIPS is such cancer I'm considering it out of scope for now
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH mips64
|
||||||
|
SYMBOLS
|
||||||
|
"__mips64")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH mips
|
||||||
|
SYMBOLS
|
||||||
|
"__mips"
|
||||||
|
"__mips__"
|
||||||
|
"_M_MRX000")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH ppc64
|
||||||
|
SYMBOLS
|
||||||
|
"__ppc64__"
|
||||||
|
"__powerpc64__"
|
||||||
|
"_ARCH_PPC64"
|
||||||
|
"_M_PPC64")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH ppc
|
||||||
|
SYMBOLS
|
||||||
|
"__ppc__"
|
||||||
|
"__ppc"
|
||||||
|
"__powerpc__"
|
||||||
|
"_ARCH_COM"
|
||||||
|
"_ARCH_PWR"
|
||||||
|
"_ARCH_PPC"
|
||||||
|
"_M_MPPC"
|
||||||
|
"_M_PPC")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH sparc64
|
||||||
|
SYMBOLS
|
||||||
|
"__sparc_v9__")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH sparc
|
||||||
|
SYMBOLS
|
||||||
|
"__sparc__"
|
||||||
|
"__sparc")
|
||||||
|
|
||||||
|
# I don't actually know about loongarch32 since crossdev does not support it, only 64
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH loongarch64
|
||||||
|
SYMBOLS
|
||||||
|
"__loongarch__"
|
||||||
|
"__loongarch64")
|
||||||
|
|
||||||
|
detect_architecture_symbols(
|
||||||
|
ARCH wasm
|
||||||
|
SYMBOLS
|
||||||
|
"__EMSCRIPTEN__")
|
||||||
|
|
||||||
|
# "generic" target
|
||||||
|
# If you have reached this point, you're on some as-of-yet unsupported architecture.
|
||||||
|
# See the docs up above for known unsupported architectures
|
||||||
|
# If you're not in the list... I think you know what you're doing.
|
||||||
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
|
set(ARCHITECTURE "GENERIC")
|
||||||
|
set(ARCHITECTURE_GENERIC 1)
|
||||||
|
add_definitions(-DARCHITECTURE_GENERIC=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "[DetectArchitecture] Target architecture: ${ARCHITECTURE}")
|
||||||
|
set(ARCHITECTURE "${ARCHITECTURE}" PARENT_SCOPE)
|
||||||
|
set(ARCHITECTURE_${ARCHITECTURE} 1 PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
151
externals/cmake-modules/DetectPlatform.cmake
vendored
Normal file
151
externals/cmake-modules/DetectPlatform.cmake
vendored
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## DetectPlatform ##
|
||||||
|
|
||||||
|
# This is a small helper that sets PLATFORM_<platform> variables for various
|
||||||
|
# operating systems and distributions. Note that Apple, Windows, Android, etc.
|
||||||
|
# are not covered, as CMake already does that for us.
|
||||||
|
|
||||||
|
# It also sets CXX_<compiler> for the C++ compiler.
|
||||||
|
|
||||||
|
# Furthermore, some platforms have really silly requirements/quirks, so this
|
||||||
|
# also does a few of those.
|
||||||
|
|
||||||
|
# This module contains contributions from the Eden Emulator Project,
|
||||||
|
# notably from crueter and Lizzie.
|
||||||
|
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||||
|
set(PLATFORM_SUN ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
|
set(PLATFORM_FREEBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
|
set(PLATFORM_OPENBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
||||||
|
set(PLATFORM_NETBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
|
||||||
|
set(PLATFORM_DRAGONFLYBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
||||||
|
set(PLATFORM_HAIKU ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
set(PLATFORM_LINUX ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# dumb heuristic to detect msys2
|
||||||
|
if (CMAKE_COMMAND MATCHES "msys64")
|
||||||
|
set(PLATFORM_MSYS ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
|
set(CXX_CLANG ON)
|
||||||
|
if (MSVC)
|
||||||
|
set(CXX_CLANG_CL ON)
|
||||||
|
endif()
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(CXX_GCC ON)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(CXX_CL ON)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
||||||
|
set(CXX_ICC ON)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
|
set(CXX_APPLE ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/11112
|
||||||
|
# This works totally fine on MinGW64, but not CLANG{,ARM}64
|
||||||
|
if(MINGW AND CXX_CLANG)
|
||||||
|
set(CMAKE_SYSTEM_VERSION 10.0.0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# NB: this does not account for SPARC
|
||||||
|
if (PLATFORM_SUN)
|
||||||
|
# Terrific OpenIndiana pkg shenanigans
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH
|
||||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
|
|
||||||
|
# Amazing - absolutely incredible
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
||||||
|
|
||||||
|
# For some mighty reason, doing a normal release build sometimes
|
||||||
|
# may not trigger the proper -O3 switch to materialize
|
||||||
|
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
||||||
|
endif()
|
||||||
|
if (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MSYS2 utilities
|
||||||
|
|
||||||
|
# Sometimes, PkgConfig modules will incorrectly reference / when CMake
|
||||||
|
# wants you to reference it as C:/msys64/. This function corrects that.
|
||||||
|
# Example in a Find module:
|
||||||
|
#[[
|
||||||
|
if (PLATFORM_MSYS)
|
||||||
|
FixMsysPath(PkgConfig::OPUS)
|
||||||
|
endif()
|
||||||
|
]]
|
||||||
|
|
||||||
|
function(FixMsysPath target)
|
||||||
|
get_target_property(include_dir ${target} INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
|
|
||||||
|
if (NOT (include_dir MATCHES "^/"))
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(root_default $ENV{MSYS2_LOCATION})
|
||||||
|
if (root_default STREQUAL "")
|
||||||
|
set(root_default "C:/msys64")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(MSYS_ROOT_PATH ${root_default}
|
||||||
|
CACHE STRING "Location of the MSYS2 root")
|
||||||
|
|
||||||
|
set(include_dir "C:/msys64${include_dir}")
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${include_dir})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# MSYSTEM handling + program_path
|
||||||
|
if (PLATFORM_MSYS)
|
||||||
|
# really, really dumb heuristic to detect what environment we are in
|
||||||
|
macro(system var)
|
||||||
|
if (CMAKE_COMMAND MATCHES ${var})
|
||||||
|
set(MSYSTEM ${var})
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
system(mingw64)
|
||||||
|
system(clang64)
|
||||||
|
system(clangarm64)
|
||||||
|
system(ucrt64)
|
||||||
|
|
||||||
|
if (NOT DEFINED MSYSTEM)
|
||||||
|
set(MSYSTEM msys2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# We generally want to prioritize environment-specific binaries if possible
|
||||||
|
# some, like autoconf, are not present on environments besides msys2 though
|
||||||
|
set(CMAKE_PROGRAM_PATH C:/msys64/${MSYSTEM}/bin C:/msys64/usr/bin)
|
||||||
|
set(ENV{PKG_CONFIG_PATH} C:/msys64/${MSYSTEM}/lib/pkgconfig)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This saves a truly ridiculous amount of time during linking
|
||||||
|
# In my tests, without this, Eden takes 2 mins, with this, it takes 3-5 seconds
|
||||||
|
# or on GitHub Actions, 10 minutes -> 3 seconds
|
||||||
|
if (MINGW)
|
||||||
|
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
|
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# awesome
|
||||||
|
if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib")
|
||||||
|
endif()
|
||||||
58
externals/cmake-modules/FasterLinker.cmake
vendored
Normal file
58
externals/cmake-modules/FasterLinker.cmake
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## FasterLinker ##
|
||||||
|
|
||||||
|
# This finds a faster linker for your compiler, if available.
|
||||||
|
# Only really tested on Linux. I would not recommend this on MSYS2.
|
||||||
|
|
||||||
|
#[[
|
||||||
|
search order:
|
||||||
|
- gold (GCC only) - the best, generally, but not packaged anymore
|
||||||
|
- mold (GCC only) - generally does well on GCC
|
||||||
|
- lld - preferred on clang
|
||||||
|
- bfd - the final fallback
|
||||||
|
- If none are found (macOS uses ld.prime, etc) just use the default linker
|
||||||
|
]]
|
||||||
|
|
||||||
|
# This module is based on the work of Yuzu, specifically Liam White,
|
||||||
|
# and later extended by crueter.
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(CXX_GCC ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(LINKER_BFD bfd)
|
||||||
|
if (LINKER_BFD)
|
||||||
|
set(LINKER bfd)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(LINKER_LLD lld)
|
||||||
|
if (LINKER_LLD)
|
||||||
|
set(LINKER lld)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CXX_GCC)
|
||||||
|
find_program(LINKER_MOLD mold)
|
||||||
|
if (LINKER_MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
||||||
|
set(LINKER mold)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(LINKER_GOLD gold)
|
||||||
|
if (LINKER_GOLD)
|
||||||
|
set(LINKER gold)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (LINKER)
|
||||||
|
message(NOTICE "[FasterLinker] Selecting ${LINKER} as linker")
|
||||||
|
add_link_options("-fuse-ld=${LINKER}")
|
||||||
|
else()
|
||||||
|
message(WARNING "[FasterLinker] No faster linker found--using default")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (LINKER STREQUAL "lld" AND CXX_GCC)
|
||||||
|
message(WARNING
|
||||||
|
"[FasterLinker] Using lld on GCC may cause issues "
|
||||||
|
"with certain LTO settings.")
|
||||||
|
endif()
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2009 Iowa State University
|
|
||||||
# SPDX-FileContributor: Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# SPDX-License-Identifier: BSL-1.0
|
|
||||||
|
|
||||||
# - Returns a version string from Git
|
|
||||||
#
|
|
||||||
# These functions force a re-configure on each git commit so that you can
|
|
||||||
# trust the values of the variables in your build system.
|
|
||||||
#
|
|
||||||
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
|
|
||||||
#
|
|
||||||
# Returns the refspec and sha hash of the current head revision
|
|
||||||
#
|
|
||||||
# git_describe(<var> [<additional arguments to git describe> ...])
|
|
||||||
#
|
|
||||||
# Returns the results of git describe on the source tree, and adjusting
|
|
||||||
# the output so that it tests false if an error occurs.
|
|
||||||
#
|
|
||||||
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
|
||||||
#
|
|
||||||
# Returns the results of git describe --exact-match on the source tree,
|
|
||||||
# and adjusting the output so that it tests false if there was no exact
|
|
||||||
# matching tag.
|
|
||||||
#
|
|
||||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
|
||||||
#
|
|
||||||
# Original Author:
|
|
||||||
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# http://academic.cleardefinition.com
|
|
||||||
# Iowa State University HCI Graduate Program/VRAC
|
|
||||||
#
|
|
||||||
# Copyright Iowa State University 2009-2010.
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
if(__get_git_revision_description)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__get_git_revision_description YES)
|
|
||||||
|
|
||||||
# We must run the following at "include" time, not at function call time,
|
|
||||||
# to find the path to this module rather than the path to a calling list file
|
|
||||||
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
|
||||||
|
|
||||||
function(get_git_head_revision _refspecvar _hashvar)
|
|
||||||
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
||||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
|
||||||
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
|
|
||||||
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
|
|
||||||
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
|
|
||||||
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
|
|
||||||
# We have reached the root directory, we are not in git
|
|
||||||
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
|
|
||||||
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
|
||||||
endwhile()
|
|
||||||
# check if this is a submodule
|
|
||||||
if(NOT IS_DIRECTORY ${GIT_DIR})
|
|
||||||
file(READ ${GIT_DIR} submodule)
|
|
||||||
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
|
|
||||||
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
|
||||||
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
|
|
||||||
endif()
|
|
||||||
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
|
||||||
if(NOT EXISTS "${GIT_DATA}")
|
|
||||||
file(MAKE_DIRECTORY "${GIT_DATA}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT EXISTS "${GIT_DIR}/HEAD")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
|
||||||
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
|
|
||||||
|
|
||||||
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
|
||||||
"${GIT_DATA}/grabRef.cmake"
|
|
||||||
@ONLY)
|
|
||||||
include("${GIT_DATA}/grabRef.cmake")
|
|
||||||
|
|
||||||
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
|
|
||||||
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(git_branch_name _var)
|
|
||||||
if(NOT GIT_FOUND)
|
|
||||||
find_package(Git QUIET)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT GIT_FOUND)
|
|
||||||
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND
|
|
||||||
"${GIT_EXECUTABLE}"
|
|
||||||
rev-parse --abbrev-ref HEAD
|
|
||||||
WORKING_DIRECTORY
|
|
||||||
"${CMAKE_SOURCE_DIR}"
|
|
||||||
RESULT_VARIABLE
|
|
||||||
res
|
|
||||||
OUTPUT_VARIABLE
|
|
||||||
out
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
if(NOT res EQUAL 0)
|
|
||||||
set(out "${out}-${res}-NOTFOUND")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(${_var} "${out}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(git_describe _var)
|
|
||||||
if(NOT GIT_FOUND)
|
|
||||||
find_package(Git QUIET)
|
|
||||||
endif()
|
|
||||||
#get_git_head_revision(refspec hash)
|
|
||||||
if(NOT GIT_FOUND)
|
|
||||||
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
#if(NOT hash)
|
|
||||||
# set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
|
|
||||||
# return()
|
|
||||||
#endif()
|
|
||||||
|
|
||||||
# TODO sanitize
|
|
||||||
#if((${ARGN}" MATCHES "&&") OR
|
|
||||||
# (ARGN MATCHES "||") OR
|
|
||||||
# (ARGN MATCHES "\\;"))
|
|
||||||
# message("Please report the following error to the project!")
|
|
||||||
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
|
|
||||||
#endif()
|
|
||||||
|
|
||||||
#message(STATUS "Arguments to execute_process: ${ARGN}")
|
|
||||||
|
|
||||||
execute_process(COMMAND
|
|
||||||
"${GIT_EXECUTABLE}"
|
|
||||||
describe
|
|
||||||
${hash}
|
|
||||||
${ARGN}
|
|
||||||
WORKING_DIRECTORY
|
|
||||||
"${CMAKE_SOURCE_DIR}"
|
|
||||||
RESULT_VARIABLE
|
|
||||||
res
|
|
||||||
OUTPUT_VARIABLE
|
|
||||||
out
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
if(NOT res EQUAL 0)
|
|
||||||
set(out "${out}-${res}-NOTFOUND")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(${_var} "${out}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(git_get_exact_tag _var)
|
|
||||||
git_describe(out --exact-match ${ARGN})
|
|
||||||
set(${_var} "${out}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2009 Iowa State University
|
|
||||||
# SPDX-FileContributor: Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# SPDX-License-Identifier: BSL-1.0
|
|
||||||
|
|
||||||
# Internal file for GetGitRevisionDescription.cmake
|
|
||||||
#
|
|
||||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
|
||||||
#
|
|
||||||
# Original Author:
|
|
||||||
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# http://academic.cleardefinition.com
|
|
||||||
# Iowa State University HCI Graduate Program/VRAC
|
|
||||||
#
|
|
||||||
# Copyright Iowa State University 2009-2010.
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
set(HEAD_HASH)
|
|
||||||
|
|
||||||
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
|
||||||
|
|
||||||
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
|
||||||
if(HEAD_CONTENTS MATCHES "ref")
|
|
||||||
# named branch
|
|
||||||
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
|
||||||
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
|
||||||
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
|
||||||
elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}")
|
|
||||||
configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
|
||||||
set(HEAD_HASH "${HEAD_REF}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# detached HEAD
|
|
||||||
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT HEAD_HASH)
|
|
||||||
if(EXISTS "@GIT_DATA@/head-ref")
|
|
||||||
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
|
||||||
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
|
||||||
else()
|
|
||||||
set(HEAD_HASH "Unknown")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
85
externals/cmake-modules/GetSCMRev.cmake
vendored
Normal file
85
externals/cmake-modules/GetSCMRev.cmake
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## GetSCMRev ##
|
||||||
|
# Name is self explanatory. Gets revision information from files, OR from git.
|
||||||
|
# Prioritizes GIT-TAG, GIT-REFSPEC, GIT-COMMIT, GIT-RELEASE files within the root directory,
|
||||||
|
# otherwise grabs stuff from Git.
|
||||||
|
|
||||||
|
# loosely based on Ryan Pavlik's work
|
||||||
|
find_package(Git QUIET)
|
||||||
|
|
||||||
|
# commit: git rev-parse HEAD
|
||||||
|
# tag: git describe --tags --abbrev=0
|
||||||
|
# branch: git rev-parse --abbrev-ref=HEAD
|
||||||
|
|
||||||
|
function(run_git_command variable)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${variable} "GIT-NOTFOUND" PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND
|
||||||
|
"${GIT_EXECUTABLE}"
|
||||||
|
${ARGN}
|
||||||
|
WORKING_DIRECTORY
|
||||||
|
"${CMAKE_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE
|
||||||
|
res
|
||||||
|
OUTPUT_VARIABLE
|
||||||
|
out
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${variable} "${out}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(trim var)
|
||||||
|
string(REGEX REPLACE "\n" "" new "${${var}}")
|
||||||
|
set(${var} ${new} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
||||||
|
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
||||||
|
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
||||||
|
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
||||||
|
|
||||||
|
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
||||||
|
file(READ ${REF_FILE} GIT_REFSPEC)
|
||||||
|
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
||||||
|
else()
|
||||||
|
run_git_command(GIT_COMMIT rev-parse HEAD)
|
||||||
|
run_git_command(GIT_REFSPEC rev-parse --abbrev-ref HEAD)
|
||||||
|
|
||||||
|
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
||||||
|
set(GIT_REFSPEC 1.0.0)
|
||||||
|
set(GIT_COMMIT stable)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${TAG_FILE})
|
||||||
|
file(READ ${TAG_FILE} GIT_TAG)
|
||||||
|
else()
|
||||||
|
run_git_command(GIT_TAG describe --tags --abbrev=0)
|
||||||
|
if (GIT_TAG MATCHES "NOTFOUND")
|
||||||
|
set(GIT_TAG "${GIT_REFSPEC}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${RELEASE_FILE})
|
||||||
|
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
||||||
|
trim(GIT_RELEASE)
|
||||||
|
message(STATUS "[GetSCMRev] Git release: ${GIT_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
trim(GIT_REFSPEC)
|
||||||
|
trim(GIT_COMMIT)
|
||||||
|
trim(GIT_TAG)
|
||||||
|
|
||||||
|
message(STATUS "[GetSCMRev] Git commit: ${GIT_COMMIT}")
|
||||||
|
message(STATUS "[GetSCMRev] Git tag: ${GIT_TAG}")
|
||||||
|
message(STATUS "[GetSCMRev] Git refspec: ${GIT_REFSPEC}")
|
||||||
34
externals/cmake-modules/UseCcache.cmake
vendored
Normal file
34
externals/cmake-modules/UseCcache.cmake
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## UseCcache ##
|
||||||
|
|
||||||
|
# Adds an option to enable CCache and uses it if provided.
|
||||||
|
# Also does some debug info downgrading to make it easier.
|
||||||
|
# Credit to DraVee for his work on this
|
||||||
|
|
||||||
|
option(USE_CCACHE "Use ccache for compilation" OFF)
|
||||||
|
set(CCACHE_PATH "ccache" CACHE STRING "Path to ccache binary")
|
||||||
|
if(USE_CCACHE)
|
||||||
|
find_program(CCACHE_BINARY ${CCACHE_PATH})
|
||||||
|
if(CCACHE_BINARY)
|
||||||
|
message(STATUS "[UseCcache] Found ccache at: ${CCACHE_BINARY}")
|
||||||
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "[UseCcache] USE_CCACHE enabled, but no "
|
||||||
|
"executable found at: ${CCACHE_PATH}")
|
||||||
|
endif()
|
||||||
|
# Follow SCCache recommendations:
|
||||||
|
# <https://github.com/mozilla/sccache/blob/main/README.md?plain=1#L144>
|
||||||
|
if(WIN32)
|
||||||
|
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG
|
||||||
|
"${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG
|
||||||
|
"${CMAKE_C_FLAGS_DEBUG}")
|
||||||
|
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||||
|
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
|
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||||
|
"${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
17
externals/cmake-modules/UseLTO.cmake
vendored
Normal file
17
externals/cmake-modules/UseLTO.cmake
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## UseLTO ##
|
||||||
|
|
||||||
|
# Enable Interprocedural Optimization (IPO).
|
||||||
|
# Self-explanatory.
|
||||||
|
|
||||||
|
include(CheckIPOSupported)
|
||||||
|
check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO)
|
||||||
|
if(NOT COMPILER_SUPPORTS_LTO)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Your compiler does not support interprocedural optimization"
|
||||||
|
" (IPO).")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
||||||
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${COMPILER_SUPPORTS_LTO})
|
||||||
41
externals/cpmfile.json
vendored
41
externals/cpmfile.json
vendored
@@ -9,7 +9,7 @@
|
|||||||
},
|
},
|
||||||
"sirit": {
|
"sirit": {
|
||||||
"repo": "eden-emulator/sirit",
|
"repo": "eden-emulator/sirit",
|
||||||
"git_version": "1.0.2",
|
"git_version": "1.0.3",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
"artifact": "sirit-source-%VERSION%.tar.zst",
|
"artifact": "sirit-source-%VERSION%.tar.zst",
|
||||||
"hash_suffix": "sha512sum",
|
"hash_suffix": "sha512sum",
|
||||||
@@ -23,17 +23,13 @@
|
|||||||
"package": "sirit",
|
"package": "sirit",
|
||||||
"name": "sirit",
|
"name": "sirit",
|
||||||
"repo": "eden-emulator/sirit",
|
"repo": "eden-emulator/sirit",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3"
|
||||||
"disabled_platforms": [
|
|
||||||
"mingw-amd64",
|
|
||||||
"mingw-arm64"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"httplib": {
|
"httplib": {
|
||||||
"repo": "yhirose/cpp-httplib",
|
"repo": "yhirose/cpp-httplib",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
"hash": "b364500f76e2ecb0fe21b032d831272e3f1dfeea71af74e325f8fc4ce9dcdb3c941b97a5b422bdeafb9facd058597b90f8bfc284fb9afe3c33fefa15dd5a010b",
|
"hash": "e7a8877d489c97669a8ee536e1498575be921e558ed947253013fe6b67a49d4569eedd01f543caa70183b92d8ac0e8687d662a70d880954412e387317008a239",
|
||||||
"git_version": "0.26.0",
|
"git_version": "0.28.0",
|
||||||
"find_args": "MODULE GLOBAL",
|
"find_args": "MODULE GLOBAL",
|
||||||
"patches": [
|
"patches": [
|
||||||
"0001-mingw.patch"
|
"0001-mingw.patch"
|
||||||
@@ -93,9 +89,9 @@
|
|||||||
"package": "unordered_dense",
|
"package": "unordered_dense",
|
||||||
"repo": "martinus/unordered_dense",
|
"repo": "martinus/unordered_dense",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
"hash": "f9c819e28e1c1a387acfee09277d6af5e366597a0d39acf1c687acf0608a941ba966af8aaebdb8fba0126c7360269c4a51754ef4cab17c35c01a30215f953368",
|
"hash": "b98b5d4d96f8e0081b184d6c4c1181fae4e41723b54bed4296717d7f417348b48fad0bbcc664cac142b8c8a47e95aa57c1eb1cf6caa855fd782fad3e3ab99e5e",
|
||||||
"find_args": "CONFIG",
|
"find_args": "CONFIG",
|
||||||
"git_version": "4.5.0"
|
"git_version": "4.8.1"
|
||||||
},
|
},
|
||||||
"mbedtls": {
|
"mbedtls": {
|
||||||
"package": "MbedTLS",
|
"package": "MbedTLS",
|
||||||
@@ -107,8 +103,8 @@
|
|||||||
"artifact": "%TAG%.tar.bz2",
|
"artifact": "%TAG%.tar.bz2",
|
||||||
"skip_updates": true,
|
"skip_updates": true,
|
||||||
"patches": [
|
"patches": [
|
||||||
"0002-aesni-fix.patch",
|
"0001-aesni-fix.patch",
|
||||||
"0003-aesni-fix.patch"
|
"0002-arm64-aes-fix.patch"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"enet": {
|
"enet": {
|
||||||
@@ -167,7 +163,7 @@
|
|||||||
"package": "SDL2",
|
"package": "SDL2",
|
||||||
"name": "SDL2",
|
"name": "SDL2",
|
||||||
"repo": "crueter-ci/SDL2",
|
"repo": "crueter-ci/SDL2",
|
||||||
"version": "2.32.10-38e0094637",
|
"version": "2.32.10-a65111bd2d",
|
||||||
"min_version": "2.26.4"
|
"min_version": "2.26.4"
|
||||||
},
|
},
|
||||||
"catch2": {
|
"catch2": {
|
||||||
@@ -192,9 +188,9 @@
|
|||||||
"package": "SimpleIni",
|
"package": "SimpleIni",
|
||||||
"repo": "brofield/simpleini",
|
"repo": "brofield/simpleini",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
"hash": "6c198636816a0018adbf7f735d402c64245c6fcd540b7360d4388d46f007f3a520686cdaec4705cb8cb31401b2cb4797a80b42ea5d08a6a5807c0848386f7ca1",
|
"hash": "b937c18a7b6277d77ca7ebfb216af4984810f77af4c32d101b7685369a4bd5eb61406223f82698e167e6311a728d07415ab59639fdf19eff71ad6dc2abfda989",
|
||||||
"find_args": "MODULE",
|
"find_args": "MODULE",
|
||||||
"git_version": "4.22"
|
"git_version": "4.25"
|
||||||
},
|
},
|
||||||
"sdl2_generic": {
|
"sdl2_generic": {
|
||||||
"package": "SDL2",
|
"package": "SDL2",
|
||||||
@@ -214,5 +210,20 @@
|
|||||||
"key": "steamdeck",
|
"key": "steamdeck",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"skip_updates": "true"
|
"skip_updates": "true"
|
||||||
|
},
|
||||||
|
"moltenvk": {
|
||||||
|
"repo": "V380-Ori/Ryujinx.MoltenVK",
|
||||||
|
"tag": "v%VERSION%-ryujinx",
|
||||||
|
"git_version": "1.4.1",
|
||||||
|
"artifact": "MoltenVK-macOS.tar",
|
||||||
|
"hash": "5695b36ca5775819a71791557fcb40a4a5ee4495be6b8442e0b666d0c436bec02aae68cc6210183f7a5c986bdbec0e117aecfad5396e496e9c2fd5c89133a347",
|
||||||
|
"bundled": true
|
||||||
|
},
|
||||||
|
"gamemode": {
|
||||||
|
"repo": "FeralInteractive/gamemode",
|
||||||
|
"sha": "ce6fe122f3",
|
||||||
|
"hash": "e87ec14ed3e826d578ebf095c41580069dda603792ba91efa84f45f4571a28f4d91889675055fd6f042d7dc25b0b9443daf70963ae463e38b11bcba95f4c65a9",
|
||||||
|
"version": "1.7",
|
||||||
|
"find_args": "MODULE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
externals/ffmpeg/CMakeLists.txt
vendored
10
externals/ffmpeg/CMakeLists.txt
vendored
@@ -114,16 +114,6 @@ if (UNIX AND NOT ANDROID)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_BUNDLED_FFMPEG)
|
if (YUZU_USE_BUNDLED_FFMPEG)
|
||||||
# MSVC conflicts with ksuser otherwise
|
|
||||||
# MinGW has the funny quirk of requiring avutil after avcodec
|
|
||||||
# Android needs some deps to be compiled with PIC (TODO)
|
|
||||||
# TODO(crueter) fix
|
|
||||||
if (ANDROID)
|
|
||||||
set(BUILD_SHARED_LIBS ON)
|
|
||||||
else()
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
AddJsonPackage(ffmpeg-ci)
|
AddJsonPackage(ffmpeg-ci)
|
||||||
|
|
||||||
set(FFmpeg_INCLUDE_DIR
|
set(FFmpeg_INCLUDE_DIR
|
||||||
|
|||||||
6
externals/ffmpeg/cpmfile.json
vendored
6
externals/ffmpeg/cpmfile.json
vendored
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"repo": "FFmpeg/FFmpeg",
|
"repo": "FFmpeg/FFmpeg",
|
||||||
"sha": "c2184b65d2",
|
"sha": "ddf443f1e9",
|
||||||
"hash": "007b1ccdd4d3ea3324835258d9a255103253bd66edb442b12d9c60dca85149cad52136a3b3120e5094115b6a3d9e80eeacbf9c07e5ffafc9ac459614d5fa3b22",
|
"hash": "ded1c313843f23805102565bd3ca92602fb9c2951e059ca5e1a486ab3ef7d589acccf3cde05c5ff0cfc5199c3a261dccb4d2a93254e585824850696fb41a292e",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"ffmpeg-ci": {
|
"ffmpeg-ci": {
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"package": "FFmpeg",
|
"package": "FFmpeg",
|
||||||
"name": "ffmpeg",
|
"name": "ffmpeg",
|
||||||
"repo": "crueter-ci/FFmpeg",
|
"repo": "crueter-ci/FFmpeg",
|
||||||
"version": "8.0-be99d2c0b2",
|
"version": "8.0-ddf443f1e9",
|
||||||
"min_version": "4.1"
|
"min_version": "4.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
376
externals/gamemode/gamemode_client.h
vendored
376
externals/gamemode/gamemode_client.h
vendored
@@ -1,376 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
Copyright (c) 2017-2019, Feral Interactive
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Feral Interactive nor the names of its contributors
|
|
||||||
may be used to endorse or promote products derived from this software
|
|
||||||
without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
*/
|
|
||||||
#ifndef CLIENT_GAMEMODE_H
|
|
||||||
#define CLIENT_GAMEMODE_H
|
|
||||||
/*
|
|
||||||
* GameMode supports the following client functions
|
|
||||||
* Requests are refcounted in the daemon
|
|
||||||
*
|
|
||||||
* int gamemode_request_start() - Request gamemode starts
|
|
||||||
* 0 if the request was sent successfully
|
|
||||||
* -1 if the request failed
|
|
||||||
*
|
|
||||||
* int gamemode_request_end() - Request gamemode ends
|
|
||||||
* 0 if the request was sent successfully
|
|
||||||
* -1 if the request failed
|
|
||||||
*
|
|
||||||
* GAMEMODE_AUTO can be defined to make the above two functions apply during static init and
|
|
||||||
* destruction, as appropriate. In this configuration, errors will be printed to stderr
|
|
||||||
*
|
|
||||||
* int gamemode_query_status() - Query the current status of gamemode
|
|
||||||
* 0 if gamemode is inactive
|
|
||||||
* 1 if gamemode is active
|
|
||||||
* 2 if gamemode is active and this client is registered
|
|
||||||
* -1 if the query failed
|
|
||||||
*
|
|
||||||
* int gamemode_request_start_for(pid_t pid) - Request gamemode starts for another process
|
|
||||||
* 0 if the request was sent successfully
|
|
||||||
* -1 if the request failed
|
|
||||||
* -2 if the request was rejected
|
|
||||||
*
|
|
||||||
* int gamemode_request_end_for(pid_t pid) - Request gamemode ends for another process
|
|
||||||
* 0 if the request was sent successfully
|
|
||||||
* -1 if the request failed
|
|
||||||
* -2 if the request was rejected
|
|
||||||
*
|
|
||||||
* int gamemode_query_status_for(pid_t pid) - Query status of gamemode for another process
|
|
||||||
* 0 if gamemode is inactive
|
|
||||||
* 1 if gamemode is active
|
|
||||||
* 2 if gamemode is active and this client is registered
|
|
||||||
* -1 if the query failed
|
|
||||||
*
|
|
||||||
* const char* gamemode_error_string() - Get an error string
|
|
||||||
* returns a string describing any of the above errors
|
|
||||||
*
|
|
||||||
* Note: All the above requests can be blocking - dbus requests can and will block while the daemon
|
|
||||||
* handles the request. It is not recommended to make these calls in performance critical code
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
static char internal_gamemode_client_error_string[512] = { 0 };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load libgamemode dynamically to dislodge us from most dependencies.
|
|
||||||
* This allows clients to link and/or use this regardless of runtime.
|
|
||||||
* See SDL2 for an example of the reasoning behind this in terms of
|
|
||||||
* dynamic versioning as well.
|
|
||||||
*/
|
|
||||||
static volatile int internal_libgamemode_loaded = 1;
|
|
||||||
|
|
||||||
/* Typedefs for the functions to load */
|
|
||||||
typedef int (*api_call_return_int)(void);
|
|
||||||
typedef const char *(*api_call_return_cstring)(void);
|
|
||||||
typedef int (*api_call_pid_return_int)(pid_t);
|
|
||||||
|
|
||||||
/* Storage for functors */
|
|
||||||
static api_call_return_int REAL_internal_gamemode_request_start = NULL;
|
|
||||||
static api_call_return_int REAL_internal_gamemode_request_end = NULL;
|
|
||||||
static api_call_return_int REAL_internal_gamemode_query_status = NULL;
|
|
||||||
static api_call_return_cstring REAL_internal_gamemode_error_string = NULL;
|
|
||||||
static api_call_pid_return_int REAL_internal_gamemode_request_start_for = NULL;
|
|
||||||
static api_call_pid_return_int REAL_internal_gamemode_request_end_for = NULL;
|
|
||||||
static api_call_pid_return_int REAL_internal_gamemode_query_status_for = NULL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal helper to perform the symbol binding safely.
|
|
||||||
*
|
|
||||||
* Returns 0 on success and -1 on failure
|
|
||||||
*/
|
|
||||||
__attribute__((always_inline)) static inline int internal_bind_libgamemode_symbol(
|
|
||||||
void *handle, const char *name, void **out_func, size_t func_size, bool required)
|
|
||||||
{
|
|
||||||
void *symbol_lookup = NULL;
|
|
||||||
char *dl_error = NULL;
|
|
||||||
|
|
||||||
/* Safely look up the symbol */
|
|
||||||
symbol_lookup = dlsym(handle, name);
|
|
||||||
dl_error = dlerror();
|
|
||||||
if (required && (dl_error || !symbol_lookup)) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"dlsym failed - %s",
|
|
||||||
dl_error);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Have the symbol correctly, copy it to make it usable */
|
|
||||||
memcpy(out_func, &symbol_lookup, func_size);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads libgamemode and needed functions
|
|
||||||
*
|
|
||||||
* Returns 0 on success and -1 on failure
|
|
||||||
*/
|
|
||||||
__attribute__((always_inline)) static inline int internal_load_libgamemode(void)
|
|
||||||
{
|
|
||||||
/* We start at 1, 0 is a success and -1 is a fail */
|
|
||||||
if (internal_libgamemode_loaded != 1) {
|
|
||||||
return internal_libgamemode_loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Anonymous struct type to define our bindings */
|
|
||||||
struct binding {
|
|
||||||
const char *name;
|
|
||||||
void **functor;
|
|
||||||
size_t func_size;
|
|
||||||
bool required;
|
|
||||||
} bindings[] = {
|
|
||||||
{ "real_gamemode_request_start",
|
|
||||||
(void **)&REAL_internal_gamemode_request_start,
|
|
||||||
sizeof(REAL_internal_gamemode_request_start),
|
|
||||||
true },
|
|
||||||
{ "real_gamemode_request_end",
|
|
||||||
(void **)&REAL_internal_gamemode_request_end,
|
|
||||||
sizeof(REAL_internal_gamemode_request_end),
|
|
||||||
true },
|
|
||||||
{ "real_gamemode_query_status",
|
|
||||||
(void **)&REAL_internal_gamemode_query_status,
|
|
||||||
sizeof(REAL_internal_gamemode_query_status),
|
|
||||||
false },
|
|
||||||
{ "real_gamemode_error_string",
|
|
||||||
(void **)&REAL_internal_gamemode_error_string,
|
|
||||||
sizeof(REAL_internal_gamemode_error_string),
|
|
||||||
true },
|
|
||||||
{ "real_gamemode_request_start_for",
|
|
||||||
(void **)&REAL_internal_gamemode_request_start_for,
|
|
||||||
sizeof(REAL_internal_gamemode_request_start_for),
|
|
||||||
false },
|
|
||||||
{ "real_gamemode_request_end_for",
|
|
||||||
(void **)&REAL_internal_gamemode_request_end_for,
|
|
||||||
sizeof(REAL_internal_gamemode_request_end_for),
|
|
||||||
false },
|
|
||||||
{ "real_gamemode_query_status_for",
|
|
||||||
(void **)&REAL_internal_gamemode_query_status_for,
|
|
||||||
sizeof(REAL_internal_gamemode_query_status_for),
|
|
||||||
false },
|
|
||||||
};
|
|
||||||
|
|
||||||
void *libgamemode = NULL;
|
|
||||||
|
|
||||||
/* Try and load libgamemode */
|
|
||||||
libgamemode = dlopen("libgamemode.so.0", RTLD_NOW);
|
|
||||||
if (!libgamemode) {
|
|
||||||
/* Attempt to load unversioned library for compatibility with older
|
|
||||||
* versions (as of writing, there are no ABI changes between the two -
|
|
||||||
* this may need to change if ever ABI-breaking changes are made) */
|
|
||||||
libgamemode = dlopen("libgamemode.so", RTLD_NOW);
|
|
||||||
if (!libgamemode) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"dlopen failed - %s",
|
|
||||||
dlerror());
|
|
||||||
internal_libgamemode_loaded = -1;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Attempt to bind all symbols */
|
|
||||||
for (size_t i = 0; i < sizeof(bindings) / sizeof(bindings[0]); i++) {
|
|
||||||
struct binding *binder = &bindings[i];
|
|
||||||
|
|
||||||
if (internal_bind_libgamemode_symbol(libgamemode,
|
|
||||||
binder->name,
|
|
||||||
binder->functor,
|
|
||||||
binder->func_size,
|
|
||||||
binder->required)) {
|
|
||||||
internal_libgamemode_loaded = -1;
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Success */
|
|
||||||
internal_libgamemode_loaded = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Redirect to the real libgamemode
|
|
||||||
*/
|
|
||||||
__attribute__((always_inline)) static inline const char *gamemode_error_string(void)
|
|
||||||
{
|
|
||||||
/* If we fail to load the system gamemode, or we have an error string already, return our error
|
|
||||||
* string instead of diverting to the system version */
|
|
||||||
if (internal_load_libgamemode() < 0 || internal_gamemode_client_error_string[0] != '\0') {
|
|
||||||
return internal_gamemode_client_error_string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assert for static analyser that the function is not NULL */
|
|
||||||
assert(REAL_internal_gamemode_error_string != NULL);
|
|
||||||
|
|
||||||
return REAL_internal_gamemode_error_string();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Redirect to the real libgamemode
|
|
||||||
* Allow automatically requesting game mode
|
|
||||||
* Also prints errors as they happen.
|
|
||||||
*/
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
__attribute__((constructor))
|
|
||||||
#else
|
|
||||||
__attribute__((always_inline)) static inline
|
|
||||||
#endif
|
|
||||||
int gamemode_request_start(void)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
|
||||||
#endif
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assert for static analyser that the function is not NULL */
|
|
||||||
assert(REAL_internal_gamemode_request_start != NULL);
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_request_start() < 0) {
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
|
||||||
#endif
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Redirect to the real libgamemode */
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
__attribute__((destructor))
|
|
||||||
#else
|
|
||||||
__attribute__((always_inline)) static inline
|
|
||||||
#endif
|
|
||||||
int gamemode_request_end(void)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
|
||||||
#endif
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assert for static analyser that the function is not NULL */
|
|
||||||
assert(REAL_internal_gamemode_request_end != NULL);
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_request_end() < 0) {
|
|
||||||
#ifdef GAMEMODE_AUTO
|
|
||||||
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
|
||||||
#endif
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Redirect to the real libgamemode */
|
|
||||||
__attribute__((always_inline)) static inline int gamemode_query_status(void)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_query_status == NULL) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"gamemode_query_status missing (older host?)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return REAL_internal_gamemode_query_status();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Redirect to the real libgamemode */
|
|
||||||
__attribute__((always_inline)) static inline int gamemode_request_start_for(pid_t pid)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_request_start_for == NULL) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"gamemode_request_start_for missing (older host?)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return REAL_internal_gamemode_request_start_for(pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Redirect to the real libgamemode */
|
|
||||||
__attribute__((always_inline)) static inline int gamemode_request_end_for(pid_t pid)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_request_end_for == NULL) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"gamemode_request_end_for missing (older host?)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return REAL_internal_gamemode_request_end_for(pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Redirect to the real libgamemode */
|
|
||||||
__attribute__((always_inline)) static inline int gamemode_query_status_for(pid_t pid)
|
|
||||||
{
|
|
||||||
/* Need to load gamemode */
|
|
||||||
if (internal_load_libgamemode() < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (REAL_internal_gamemode_query_status_for == NULL) {
|
|
||||||
snprintf(internal_gamemode_client_error_string,
|
|
||||||
sizeof(internal_gamemode_client_error_string),
|
|
||||||
"gamemode_query_status_for missing (older host?)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return REAL_internal_gamemode_query_status_for(pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // CLIENT_GAMEMODE_H
|
|
||||||
@@ -4,10 +4,11 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project
|
// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
// import android.annotation.SuppressLint
|
||||||
import kotlin.collections.setOf
|
import kotlin.collections.setOf
|
||||||
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
|
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
|
||||||
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("com.android.application")
|
id("com.android.application")
|
||||||
@@ -63,11 +64,6 @@ android {
|
|||||||
versionName = getGitVersion()
|
versionName = getGitVersion()
|
||||||
versionCode = autoVersion
|
versionCode = autoVersion
|
||||||
|
|
||||||
ndk {
|
|
||||||
@SuppressLint("ChromeOsAbiSupport")
|
|
||||||
abiFilters += listOf("arm64-v8a")
|
|
||||||
}
|
|
||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
val extraCMakeArgs =
|
val extraCMakeArgs =
|
||||||
@@ -127,7 +123,7 @@ android {
|
|||||||
isMinifyEnabled = true
|
isMinifyEnabled = true
|
||||||
isDebuggable = false
|
isDebuggable = false
|
||||||
proguardFiles(
|
proguardFiles(
|
||||||
getDefaultProguardFile("proguard-android.txt"),
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
"proguard-rules.pro"
|
"proguard-rules.pro"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -139,7 +135,7 @@ android {
|
|||||||
signingConfig = signingConfigs.getByName("default")
|
signingConfig = signingConfigs.getByName("default")
|
||||||
isDebuggable = true
|
isDebuggable = true
|
||||||
proguardFiles(
|
proguardFiles(
|
||||||
getDefaultProguardFile("proguard-android.txt"),
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
"proguard-rules.pro"
|
"proguard-rules.pro"
|
||||||
)
|
)
|
||||||
versionNameSuffix = "-relWithDebInfo"
|
versionNameSuffix = "-relWithDebInfo"
|
||||||
@@ -163,12 +159,20 @@ android {
|
|||||||
create("mainline") {
|
create("mainline") {
|
||||||
dimension = "version"
|
dimension = "version"
|
||||||
resValue("string", "app_name_suffixed", "Eden")
|
resValue("string", "app_name_suffixed", "Eden")
|
||||||
|
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("arm64-v8a")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
create("genshinSpoof") {
|
create("genshinSpoof") {
|
||||||
dimension = "version"
|
dimension = "version"
|
||||||
resValue("string", "app_name_suffixed", "Eden Optimized")
|
resValue("string", "app_name_suffixed", "Eden Optimized")
|
||||||
applicationId = "com.miHoYo.Yuanshen"
|
applicationId = "com.miHoYo.Yuanshen"
|
||||||
|
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("arm64-v8a")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
create("legacy") {
|
create("legacy") {
|
||||||
@@ -187,6 +191,25 @@ android {
|
|||||||
res.srcDirs("src/main/legacy")
|
res.srcDirs("src/main/legacy")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("arm64-v8a")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
create("chromeOS") {
|
||||||
|
dimension = "version"
|
||||||
|
resValue("string", "app_name_suffixed", "Eden")
|
||||||
|
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("x86_64")
|
||||||
|
}
|
||||||
|
|
||||||
|
externalNativeBuild {
|
||||||
|
cmake {
|
||||||
|
abiFilters("x86_64")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,3 +344,35 @@ fun getGitVersion(): String {
|
|||||||
}
|
}
|
||||||
return versionName.ifEmpty { "0.0" }
|
return versionName.ifEmpty { "0.0" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afterEvaluate {
|
||||||
|
val artifactsDir = layout.projectDirectory.dir("../../../artifacts")
|
||||||
|
val outputsDir = layout.buildDirectory.dir("outputs").get()
|
||||||
|
|
||||||
|
android.applicationVariants.forEach { variant ->
|
||||||
|
val variantName = variant.name
|
||||||
|
val variantTask = variantName.replaceFirstChar { it.uppercaseChar() }
|
||||||
|
|
||||||
|
val flavor = variant.flavorName
|
||||||
|
val type = variant.buildType.name
|
||||||
|
|
||||||
|
val baseName = "app-$flavor-$type"
|
||||||
|
|
||||||
|
val apkFile = outputsDir.file("apk/$flavor/$type/$baseName.apk")
|
||||||
|
val aabFile = outputsDir.file("bundle/$variantName/$baseName.aab")
|
||||||
|
|
||||||
|
val taskName = "copy${variantTask}Outputs"
|
||||||
|
|
||||||
|
tasks.register<Copy>(taskName) {
|
||||||
|
group = "publishing"
|
||||||
|
description = "Copy APK and AAB for $variantName to $artifactsDir"
|
||||||
|
|
||||||
|
from(apkFile)
|
||||||
|
from(aabFile)
|
||||||
|
into(artifactsDir)
|
||||||
|
|
||||||
|
dependsOn("assemble${variantTask}")
|
||||||
|
dependsOn("bundle${variantTask}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" android:required="false" />
|
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
|||||||
@@ -235,6 +235,12 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
||||||
|
|
||||||
|
if (event.keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
|
||||||
|
event.keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
|
||||||
|
return super.dispatchKeyEvent(event)
|
||||||
|
}
|
||||||
|
|
||||||
val isPhysicalKeyboard = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD &&
|
val isPhysicalKeyboard = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD &&
|
||||||
event.device?.isVirtual == false
|
event.device?.isVirtual == false
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
@@ -8,16 +11,16 @@ import android.view.LayoutInflater
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.lifecycle.ViewModelProvider
|
|
||||||
import com.google.android.material.button.MaterialButton
|
import com.google.android.material.button.MaterialButton
|
||||||
import org.yuzu.yuzu_emu.databinding.PageSetupBinding
|
import org.yuzu.yuzu_emu.databinding.PageSetupBinding
|
||||||
import org.yuzu.yuzu_emu.model.HomeViewModel
|
import org.yuzu.yuzu_emu.model.PageState
|
||||||
import org.yuzu.yuzu_emu.model.SetupCallback
|
import org.yuzu.yuzu_emu.model.SetupCallback
|
||||||
import org.yuzu.yuzu_emu.model.SetupPage
|
import org.yuzu.yuzu_emu.model.SetupPage
|
||||||
import org.yuzu.yuzu_emu.model.StepState
|
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils
|
import org.yuzu.yuzu_emu.utils.ViewUtils
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible
|
|
||||||
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
|
||||||
|
import android.content.res.ColorStateList
|
||||||
|
import org.yuzu.yuzu_emu.R
|
||||||
|
import org.yuzu.yuzu_emu.model.ButtonState
|
||||||
|
|
||||||
class SetupAdapter(val activity: AppCompatActivity, pages: List<SetupPage>) :
|
class SetupAdapter(val activity: AppCompatActivity, pages: List<SetupPage>) :
|
||||||
AbstractListAdapter<SetupPage, SetupAdapter.SetupPageViewHolder>(pages) {
|
AbstractListAdapter<SetupPage, SetupAdapter.SetupPageViewHolder>(pages) {
|
||||||
@@ -29,9 +32,40 @@ class SetupAdapter(val activity: AppCompatActivity, pages: List<SetupPage>) :
|
|||||||
inner class SetupPageViewHolder(val binding: PageSetupBinding) :
|
inner class SetupPageViewHolder(val binding: PageSetupBinding) :
|
||||||
AbstractViewHolder<SetupPage>(binding), SetupCallback {
|
AbstractViewHolder<SetupPage>(binding), SetupCallback {
|
||||||
override fun bind(model: SetupPage) {
|
override fun bind(model: SetupPage) {
|
||||||
if (model.stepCompleted.invoke() == StepState.COMPLETE) {
|
if (model.pageSteps.invoke() == PageState.COMPLETE) {
|
||||||
binding.buttonAction.setVisible(visible = false, gone = false)
|
onStepCompleted(0, pageFullyCompleted = true)
|
||||||
binding.textConfirmation.setVisible(true)
|
}
|
||||||
|
|
||||||
|
if (model.pageButtons != null && model.pageSteps.invoke() != PageState.COMPLETE) {
|
||||||
|
for (pageButton in model.pageButtons) {
|
||||||
|
val pageButtonView = LayoutInflater.from(activity)
|
||||||
|
.inflate(
|
||||||
|
R.layout.page_button,
|
||||||
|
binding.pageButtonContainer,
|
||||||
|
false
|
||||||
|
) as MaterialButton
|
||||||
|
|
||||||
|
pageButtonView.apply {
|
||||||
|
id = pageButton.titleId
|
||||||
|
icon = ResourcesCompat.getDrawable(
|
||||||
|
activity.resources,
|
||||||
|
pageButton.iconId,
|
||||||
|
activity.theme
|
||||||
|
)
|
||||||
|
text = activity.resources.getString(pageButton.titleId)
|
||||||
|
}
|
||||||
|
|
||||||
|
pageButtonView.setOnClickListener {
|
||||||
|
pageButton.buttonAction.invoke(this@SetupPageViewHolder)
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.pageButtonContainer.addView(pageButtonView)
|
||||||
|
|
||||||
|
// Disable buton add if its already completed
|
||||||
|
if (pageButton.buttonState.invoke() == ButtonState.BUTTON_ACTION_COMPLETE) {
|
||||||
|
onStepCompleted(pageButton.titleId, pageFullyCompleted = false)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.icon.setImageDrawable(
|
binding.icon.setImageDrawable(
|
||||||
@@ -44,32 +78,26 @@ class SetupAdapter(val activity: AppCompatActivity, pages: List<SetupPage>) :
|
|||||||
binding.textTitle.text = activity.resources.getString(model.titleId)
|
binding.textTitle.text = activity.resources.getString(model.titleId)
|
||||||
binding.textDescription.text =
|
binding.textDescription.text =
|
||||||
Html.fromHtml(activity.resources.getString(model.descriptionId), 0)
|
Html.fromHtml(activity.resources.getString(model.descriptionId), 0)
|
||||||
|
|
||||||
binding.buttonAction.apply {
|
|
||||||
text = activity.resources.getString(model.buttonTextId)
|
|
||||||
if (model.buttonIconId != 0) {
|
|
||||||
icon = ResourcesCompat.getDrawable(
|
|
||||||
activity.resources,
|
|
||||||
model.buttonIconId,
|
|
||||||
activity.theme
|
|
||||||
)
|
|
||||||
}
|
|
||||||
iconGravity =
|
|
||||||
if (model.leftAlignedIcon) {
|
|
||||||
MaterialButton.ICON_GRAVITY_START
|
|
||||||
} else {
|
|
||||||
MaterialButton.ICON_GRAVITY_END
|
|
||||||
}
|
|
||||||
setOnClickListener {
|
|
||||||
model.buttonAction.invoke(this@SetupPageViewHolder)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStepCompleted() {
|
override fun onStepCompleted(pageButtonId: Int, pageFullyCompleted: Boolean) {
|
||||||
ViewUtils.hideView(binding.buttonAction, 200)
|
val button = binding.pageButtonContainer.findViewById<MaterialButton>(pageButtonId)
|
||||||
ViewUtils.showView(binding.textConfirmation, 200)
|
|
||||||
ViewModelProvider(activity)[HomeViewModel::class.java].setShouldPageForward(true)
|
if (pageFullyCompleted) {
|
||||||
|
ViewUtils.hideView(binding.pageButtonContainer, 200)
|
||||||
|
ViewUtils.showView(binding.textConfirmation, 200)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (button != null) {
|
||||||
|
button.isEnabled = false
|
||||||
|
button.animate()
|
||||||
|
.alpha(0.38f)
|
||||||
|
.setDuration(200)
|
||||||
|
.start()
|
||||||
|
button.setTextColor(button.context.getColor(com.google.android.material.R.color.material_on_surface_disabled))
|
||||||
|
button.iconTint =
|
||||||
|
ColorStateList.valueOf(button.context.getColor(com.google.android.material.R.color.material_on_surface_disabled))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,11 +52,8 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||||||
SHOW_FW_VERSION("show_firmware_version"),
|
SHOW_FW_VERSION("show_firmware_version"),
|
||||||
|
|
||||||
SOC_OVERLAY_BACKGROUND("soc_overlay_background"),
|
SOC_OVERLAY_BACKGROUND("soc_overlay_background"),
|
||||||
|
|
||||||
FRAME_INTERPOLATION("frame_interpolation"),
|
|
||||||
// FRAME_SKIPPING("frame_skipping"),
|
|
||||||
|
|
||||||
ENABLE_INPUT_OVERLAY_AUTO_HIDE("enable_input_overlay_auto_hide"),
|
ENABLE_INPUT_OVERLAY_AUTO_HIDE("enable_input_overlay_auto_hide"),
|
||||||
|
RESPECT_PRESENT_INTERVAL_ZERO("respect_present_interval_zero"),
|
||||||
|
|
||||||
PERF_OVERLAY_BACKGROUND("perf_overlay_background"),
|
PERF_OVERLAY_BACKGROUND("perf_overlay_background"),
|
||||||
SHOW_PERFORMANCE_OVERLAY("show_performance_overlay"),
|
SHOW_PERFORMANCE_OVERLAY("show_performance_overlay"),
|
||||||
@@ -72,7 +69,8 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||||||
DEBUG_FLUSH_BY_LINE("flush_line"),
|
DEBUG_FLUSH_BY_LINE("flush_line"),
|
||||||
USE_LRU_CACHE("use_lru_cache"),
|
USE_LRU_CACHE("use_lru_cache"),
|
||||||
|
|
||||||
DONT_SHOW_DRIVER_SHADER_WARNING("dont_show_driver_shader_warning");
|
DONT_SHOW_DRIVER_SHADER_WARNING("dont_show_driver_shader_warning"),
|
||||||
|
ENABLE_OVERLAY("enable_overlay");
|
||||||
|
|
||||||
|
|
||||||
// external fun isFrameSkippingEnabled(): Boolean
|
// external fun isFrameSkippingEnabled(): Boolean
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
|||||||
LOGIN_SHARE_APPLET("login_share_applet_mode"),
|
LOGIN_SHARE_APPLET("login_share_applet_mode"),
|
||||||
WIFI_WEB_AUTH_APPLET("wifi_web_auth_applet_mode"),
|
WIFI_WEB_AUTH_APPLET("wifi_web_auth_applet_mode"),
|
||||||
MY_PAGE_APPLET("my_page_applet_mode"),
|
MY_PAGE_APPLET("my_page_applet_mode"),
|
||||||
INPUT_OVERLAY_AUTO_HIDE("input_overlay_auto_hide")
|
INPUT_OVERLAY_AUTO_HIDE("input_overlay_auto_hide"),
|
||||||
|
DEBUG_KNOBS("debug_knobs")
|
||||||
;
|
;
|
||||||
|
|
||||||
override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
|
override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
|
||||||
|
|||||||
@@ -236,22 +236,14 @@ abstract class SettingsItem(
|
|||||||
|
|
||||||
override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset()
|
override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
put(
|
put(
|
||||||
SwitchSetting(
|
SwitchSetting(
|
||||||
BooleanSetting.FRAME_INTERPOLATION,
|
BooleanSetting.RESPECT_PRESENT_INTERVAL_ZERO,
|
||||||
titleId = R.string.frame_interpolation,
|
titleId = R.string.respect_present_interval_zero,
|
||||||
descriptionId = R.string.frame_interpolation_description
|
descriptionId = R.string.respect_present_interval_zero_description
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
// put(
|
|
||||||
// SwitchSetting(
|
|
||||||
// BooleanSetting.FRAME_SKIPPING,
|
|
||||||
// titleId = R.string.frame_skipping,
|
|
||||||
// descriptionId = R.string.frame_skipping_description
|
|
||||||
// )
|
|
||||||
// )
|
|
||||||
|
|
||||||
put(
|
put(
|
||||||
SwitchSetting(
|
SwitchSetting(
|
||||||
dockedModeSetting,
|
dockedModeSetting,
|
||||||
@@ -788,6 +780,16 @@ abstract class SettingsItem(
|
|||||||
descriptionId = R.string.use_auto_stub_description
|
descriptionId = R.string.use_auto_stub_description
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
put(
|
||||||
|
SpinBoxSetting(
|
||||||
|
IntSetting.DEBUG_KNOBS,
|
||||||
|
titleId = R.string.debug_knobs,
|
||||||
|
descriptionId = R.string.debug_knobs_description,
|
||||||
|
valueHint = R.string.debug_knobs_hint,
|
||||||
|
min = 0,
|
||||||
|
max = 65535
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
val fastmem = object : AbstractBooleanSetting {
|
val fastmem = object : AbstractBooleanSetting {
|
||||||
override fun getBoolean(needsGlobal: Boolean): Boolean =
|
override fun getBoolean(needsGlobal: Boolean): Boolean =
|
||||||
@@ -839,7 +841,14 @@ abstract class SettingsItem(
|
|||||||
descriptionId = R.string.airplane_mode_description
|
descriptionId = R.string.airplane_mode_description
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
put(
|
||||||
|
SwitchSetting(
|
||||||
|
BooleanSetting.ENABLE_OVERLAY,
|
||||||
|
titleId = R.string.enable_overlay,
|
||||||
|
descriptionId = R.string.enable_overlay_description
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -186,6 +186,12 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
|
|||||||
updateButtonState(isValid)
|
updateButtonState(isValid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* xbzk: these two events, along with attachRepeat feature,
|
||||||
|
* were causing spinbox buttons to respond twice per press
|
||||||
|
* cutting these out to retain accelerated press functionality
|
||||||
|
* TODO: clean this out later if no issues arise
|
||||||
|
*
|
||||||
spinboxBinding.buttonDecrement.setOnClickListener {
|
spinboxBinding.buttonDecrement.setOnClickListener {
|
||||||
val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue
|
val current = spinboxBinding.editValue.text.toString().toIntOrNull() ?: currentValue
|
||||||
val newValue = current - 1
|
val newValue = current - 1
|
||||||
@@ -199,6 +205,7 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
|
|||||||
spinboxBinding.editValue.setText(newValue.toString())
|
spinboxBinding.editValue.setText(newValue.toString())
|
||||||
updateValidity(newValue)
|
updateValidity(newValue)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
fun attachRepeat(button: View, delta: Int) {
|
fun attachRepeat(button: View, delta: Int) {
|
||||||
val handler = Handler(Looper.getMainLooper())
|
val handler = Handler(Looper.getMainLooper())
|
||||||
|
|||||||
@@ -460,10 +460,10 @@ class SettingsFragmentPresenter(
|
|||||||
add(IntSetting.RENDERER_SAMPLE_SHADING_FRACTION.key)
|
add(IntSetting.RENDERER_SAMPLE_SHADING_FRACTION.key)
|
||||||
|
|
||||||
add(HeaderSetting(R.string.veil_renderer))
|
add(HeaderSetting(R.string.veil_renderer))
|
||||||
|
add(BooleanSetting.RESPECT_PRESENT_INTERVAL_ZERO.key)
|
||||||
add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key)
|
add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key)
|
||||||
add(IntSetting.DMA_ACCURACY.key)
|
add(IntSetting.DMA_ACCURACY.key)
|
||||||
add(BooleanSetting.BUFFER_REORDER_DISABLE.key)
|
add(BooleanSetting.BUFFER_REORDER_DISABLE.key)
|
||||||
add(BooleanSetting.FRAME_INTERPOLATION.key)
|
|
||||||
add(BooleanSetting.RENDERER_FAST_GPU.key)
|
add(BooleanSetting.RENDERER_FAST_GPU.key)
|
||||||
add(IntSetting.FAST_GPU_TIME.key)
|
add(IntSetting.FAST_GPU_TIME.key)
|
||||||
add(IntSetting.RENDERER_SHADER_BACKEND.key)
|
add(IntSetting.RENDERER_SHADER_BACKEND.key)
|
||||||
@@ -491,6 +491,7 @@ class SettingsFragmentPresenter(
|
|||||||
sl.apply {
|
sl.apply {
|
||||||
add(IntSetting.SWKBD_APPLET.key)
|
add(IntSetting.SWKBD_APPLET.key)
|
||||||
add(BooleanSetting.AIRPLANE_MODE.key)
|
add(BooleanSetting.AIRPLANE_MODE.key)
|
||||||
|
add(BooleanSetting.ENABLE_OVERLAY.key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private fun addInputPlayer(sl: ArrayList<SettingsItem>, playerIndex: Int) {
|
private fun addInputPlayer(sl: ArrayList<SettingsItem>, playerIndex: Int) {
|
||||||
@@ -1167,9 +1168,10 @@ class SettingsFragmentPresenter(
|
|||||||
add(IntSetting.CPU_ACCURACY.key)
|
add(IntSetting.CPU_ACCURACY.key)
|
||||||
add(BooleanSetting.USE_AUTO_STUB.key)
|
add(BooleanSetting.USE_AUTO_STUB.key)
|
||||||
add(SettingsItem.FASTMEM_COMBINED)
|
add(SettingsItem.FASTMEM_COMBINED)
|
||||||
|
|
||||||
add(HeaderSetting(R.string.log))
|
add(HeaderSetting(R.string.log))
|
||||||
add(BooleanSetting.DEBUG_FLUSH_BY_LINE.key)
|
add(BooleanSetting.DEBUG_FLUSH_BY_LINE.key)
|
||||||
|
add(HeaderSetting(R.string.general))
|
||||||
|
add(IntSetting.DEBUG_KNOBS.key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
@@ -32,12 +35,14 @@ class AddGameFolderDialogFragment : DialogFragment() {
|
|||||||
.setTitle(R.string.add_game_folder)
|
.setTitle(R.string.add_game_folder)
|
||||||
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
|
.setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
|
||||||
val newGameDir = GameDir(folderUriString!!, binding.deepScanSwitch.isChecked)
|
val newGameDir = GameDir(folderUriString!!, binding.deepScanSwitch.isChecked)
|
||||||
homeViewModel.setGamesDirSelected(true)
|
|
||||||
val calledFromGameFragment = requireArguments().getBoolean(
|
val calledFromGameFragment = requireArguments().getBoolean(
|
||||||
"calledFromGameFragment",
|
"calledFromGameFragment",
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
gamesViewModel.addFolder(newGameDir, calledFromGameFragment)
|
val job = gamesViewModel.addFolder(newGameDir, calledFromGameFragment)
|
||||||
|
job.invokeOnCompletion {
|
||||||
|
homeViewModel.setGamesDirSelected(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setView(binding.root)
|
.setView(binding.root)
|
||||||
|
|||||||
@@ -1127,20 +1127,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||||||
val actualFps = perfStats[FPS]
|
val actualFps = perfStats[FPS]
|
||||||
|
|
||||||
if (BooleanSetting.SHOW_FPS.getBoolean(needsGlobal)) {
|
if (BooleanSetting.SHOW_FPS.getBoolean(needsGlobal)) {
|
||||||
val enableFrameInterpolation =
|
|
||||||
BooleanSetting.FRAME_INTERPOLATION.getBoolean()
|
|
||||||
// val enableFrameSkipping = BooleanSetting.FRAME_SKIPPING.getBoolean()
|
|
||||||
|
|
||||||
var fpsText = String.format("FPS: %.1f", actualFps)
|
var fpsText = String.format("FPS: %.1f", actualFps)
|
||||||
|
|
||||||
if (enableFrameInterpolation) {
|
|
||||||
fpsText += " " + getString(R.string.enhanced_fps_suffix)
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (enableFrameSkipping) {
|
|
||||||
// fpsText += " " + getString(R.string.skipping_fps_suffix)
|
|
||||||
// }
|
|
||||||
|
|
||||||
sb.append(fpsText)
|
sb.append(fpsText)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import androidx.navigation.findNavController
|
|||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
||||||
import com.google.android.material.transition.MaterialFadeThrough
|
import com.google.android.material.transition.MaterialFadeThrough
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import org.yuzu.yuzu_emu.NativeLibrary
|
import org.yuzu.yuzu_emu.NativeLibrary
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import org.yuzu.yuzu_emu.R
|
import org.yuzu.yuzu_emu.R
|
||||||
@@ -34,10 +33,13 @@ import org.yuzu.yuzu_emu.YuzuApplication
|
|||||||
import org.yuzu.yuzu_emu.adapters.SetupAdapter
|
import org.yuzu.yuzu_emu.adapters.SetupAdapter
|
||||||
import org.yuzu.yuzu_emu.databinding.FragmentSetupBinding
|
import org.yuzu.yuzu_emu.databinding.FragmentSetupBinding
|
||||||
import org.yuzu.yuzu_emu.features.settings.model.Settings
|
import org.yuzu.yuzu_emu.features.settings.model.Settings
|
||||||
|
import org.yuzu.yuzu_emu.model.ButtonState
|
||||||
|
import org.yuzu.yuzu_emu.model.GamesViewModel
|
||||||
import org.yuzu.yuzu_emu.model.HomeViewModel
|
import org.yuzu.yuzu_emu.model.HomeViewModel
|
||||||
|
import org.yuzu.yuzu_emu.model.PageButton
|
||||||
import org.yuzu.yuzu_emu.model.SetupCallback
|
import org.yuzu.yuzu_emu.model.SetupCallback
|
||||||
import org.yuzu.yuzu_emu.model.SetupPage
|
import org.yuzu.yuzu_emu.model.SetupPage
|
||||||
import org.yuzu.yuzu_emu.model.StepState
|
import org.yuzu.yuzu_emu.model.PageState
|
||||||
import org.yuzu.yuzu_emu.ui.main.MainActivity
|
import org.yuzu.yuzu_emu.ui.main.MainActivity
|
||||||
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
||||||
import org.yuzu.yuzu_emu.utils.NativeConfig
|
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||||
@@ -50,11 +52,16 @@ class SetupFragment : Fragment() {
|
|||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||||
|
private val gamesViewModel: GamesViewModel by activityViewModels()
|
||||||
|
|
||||||
private lateinit var mainActivity: MainActivity
|
private lateinit var mainActivity: MainActivity
|
||||||
|
|
||||||
private lateinit var hasBeenWarned: BooleanArray
|
private lateinit var hasBeenWarned: BooleanArray
|
||||||
|
|
||||||
|
private lateinit var pages: MutableList<SetupPage>
|
||||||
|
|
||||||
|
private lateinit var pageButtonCallback: SetupCallback
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val KEY_NEXT_VISIBILITY = "NextButtonVisibility"
|
const val KEY_NEXT_VISIBILITY = "NextButtonVisibility"
|
||||||
const val KEY_BACK_VISIBILITY = "BackButtonVisibility"
|
const val KEY_BACK_VISIBILITY = "BackButtonVisibility"
|
||||||
@@ -94,124 +101,142 @@ class SetupFragment : Fragment() {
|
|||||||
requireActivity().window.navigationBarColor =
|
requireActivity().window.navigationBarColor =
|
||||||
ContextCompat.getColor(requireContext(), android.R.color.transparent)
|
ContextCompat.getColor(requireContext(), android.R.color.transparent)
|
||||||
|
|
||||||
val pages = mutableListOf<SetupPage>()
|
pages = mutableListOf<SetupPage>()
|
||||||
pages.apply {
|
pages.apply {
|
||||||
add(
|
add(
|
||||||
SetupPage(
|
SetupPage(
|
||||||
R.drawable.ic_yuzu_title,
|
R.drawable.ic_permission,
|
||||||
R.string.welcome,
|
R.string.permissions,
|
||||||
R.string.welcome_description,
|
R.string.permissions_description,
|
||||||
0,
|
mutableListOf<PageButton>().apply {
|
||||||
true,
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
R.string.get_started,
|
add(
|
||||||
{ pageForward() },
|
PageButton(
|
||||||
false
|
R.drawable.ic_notification,
|
||||||
)
|
R.string.notifications,
|
||||||
)
|
R.string.notifications_description,
|
||||||
|
{
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
pageButtonCallback = it
|
||||||
add(
|
permissionLauncher.launch(
|
||||||
SetupPage(
|
Manifest.permission.POST_NOTIFICATIONS
|
||||||
R.drawable.ic_notification,
|
)
|
||||||
R.string.notifications,
|
},
|
||||||
R.string.notifications_description,
|
{
|
||||||
0,
|
if (NotificationManagerCompat.from(requireContext())
|
||||||
false,
|
.areNotificationsEnabled()
|
||||||
R.string.give_permission,
|
) {
|
||||||
{
|
ButtonState.BUTTON_ACTION_COMPLETE
|
||||||
notificationCallback = it
|
} else {
|
||||||
permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
|
ButtonState.BUTTON_ACTION_INCOMPLETE
|
||||||
},
|
}
|
||||||
true,
|
},
|
||||||
R.string.notification_warning,
|
false,
|
||||||
R.string.notification_warning_description,
|
false,
|
||||||
0,
|
)
|
||||||
{
|
)
|
||||||
if (NotificationManagerCompat.from(requireContext())
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
if (NotificationManagerCompat.from(requireContext())
|
||||||
.areNotificationsEnabled()
|
.areNotificationsEnabled()
|
||||||
) {
|
) {
|
||||||
StepState.COMPLETE
|
PageState.COMPLETE
|
||||||
} else {
|
|
||||||
StepState.INCOMPLETE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
add(
|
|
||||||
SetupPage(
|
|
||||||
R.drawable.ic_key,
|
|
||||||
R.string.keys,
|
|
||||||
R.string.keys_description,
|
|
||||||
R.drawable.ic_add,
|
|
||||||
true,
|
|
||||||
R.string.select_keys,
|
|
||||||
{
|
|
||||||
keyCallback = it
|
|
||||||
getProdKey.launch(arrayOf("*/*"))
|
|
||||||
},
|
|
||||||
true,
|
|
||||||
R.string.install_prod_keys_warning,
|
|
||||||
R.string.install_prod_keys_warning_description,
|
|
||||||
R.string.install_prod_keys_warning_help,
|
|
||||||
{
|
|
||||||
val file = File(DirectoryInitialization.userDirectory + "/keys/prod.keys")
|
|
||||||
if (file.exists() && NativeLibrary.areKeysPresent()) {
|
|
||||||
StepState.COMPLETE
|
|
||||||
} else {
|
} else {
|
||||||
StepState.INCOMPLETE
|
PageState.INCOMPLETE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
add(
|
add(
|
||||||
SetupPage(
|
SetupPage(
|
||||||
R.drawable.ic_firmware,
|
R.drawable.ic_folder_open,
|
||||||
R.string.firmware,
|
R.string.emulator_data,
|
||||||
R.string.firmware_description,
|
R.string.emulator_data_description,
|
||||||
R.drawable.ic_add,
|
mutableListOf<PageButton>().apply {
|
||||||
true,
|
add(
|
||||||
R.string.select_firmware,
|
PageButton(
|
||||||
{
|
R.drawable.ic_key,
|
||||||
firmwareCallback = it
|
R.string.keys,
|
||||||
getFirmware.launch(arrayOf("application/zip"))
|
R.string.keys_description,
|
||||||
|
{
|
||||||
|
pageButtonCallback = it
|
||||||
|
getProdKey.launch(arrayOf("*/*"))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
val file = File(
|
||||||
|
DirectoryInitialization.userDirectory + "/keys/prod.keys"
|
||||||
|
)
|
||||||
|
if (file.exists() && NativeLibrary.areKeysPresent()) {
|
||||||
|
ButtonState.BUTTON_ACTION_COMPLETE
|
||||||
|
} else {
|
||||||
|
ButtonState.BUTTON_ACTION_INCOMPLETE
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
R.string.install_prod_keys_warning,
|
||||||
|
R.string.install_prod_keys_warning_description,
|
||||||
|
R.string.install_prod_keys_warning_help,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
add(
|
||||||
|
PageButton(
|
||||||
|
R.drawable.ic_firmware,
|
||||||
|
R.string.firmware,
|
||||||
|
R.string.firmware_description,
|
||||||
|
{
|
||||||
|
pageButtonCallback = it
|
||||||
|
getFirmware.launch(arrayOf("application/zip"))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
if (NativeLibrary.isFirmwareAvailable()) {
|
||||||
|
ButtonState.BUTTON_ACTION_COMPLETE
|
||||||
|
} else {
|
||||||
|
ButtonState.BUTTON_ACTION_INCOMPLETE
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
R.string.install_firmware_warning,
|
||||||
|
R.string.install_firmware_warning_description,
|
||||||
|
R.string.install_firmware_warning_help,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
add(
|
||||||
|
PageButton(
|
||||||
|
R.drawable.ic_controller,
|
||||||
|
R.string.games,
|
||||||
|
R.string.games_description,
|
||||||
|
{
|
||||||
|
pageButtonCallback = it
|
||||||
|
getGamesDirectory.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
if (NativeConfig.getGameDirs().isNotEmpty()) {
|
||||||
|
ButtonState.BUTTON_ACTION_COMPLETE
|
||||||
|
} else {
|
||||||
|
ButtonState.BUTTON_ACTION_INCOMPLETE
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
R.string.add_games_warning,
|
||||||
|
R.string.add_games_warning_description,
|
||||||
|
R.string.add_games_warning_help,
|
||||||
|
)
|
||||||
|
)
|
||||||
},
|
},
|
||||||
true,
|
|
||||||
R.string.install_firmware_warning,
|
|
||||||
R.string.install_firmware_warning_description,
|
|
||||||
R.string.install_firmware_warning_help,
|
|
||||||
{
|
{
|
||||||
if (NativeLibrary.isFirmwareAvailable()) {
|
val file = File(
|
||||||
StepState.COMPLETE
|
DirectoryInitialization.userDirectory + "/keys/prod.keys"
|
||||||
|
)
|
||||||
|
if (file.exists() && NativeLibrary.areKeysPresent() &&
|
||||||
|
NativeLibrary.isFirmwareAvailable() && NativeConfig.getGameDirs()
|
||||||
|
.isNotEmpty()
|
||||||
|
) {
|
||||||
|
PageState.COMPLETE
|
||||||
} else {
|
} else {
|
||||||
StepState.INCOMPLETE
|
PageState.INCOMPLETE
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add(
|
|
||||||
SetupPage(
|
|
||||||
R.drawable.ic_controller,
|
|
||||||
R.string.games,
|
|
||||||
R.string.games_description,
|
|
||||||
R.drawable.ic_add,
|
|
||||||
true,
|
|
||||||
R.string.add_games,
|
|
||||||
{
|
|
||||||
gamesDirCallback = it
|
|
||||||
getGamesDirectory.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data)
|
|
||||||
},
|
|
||||||
true,
|
|
||||||
R.string.add_games_warning,
|
|
||||||
R.string.add_games_warning_description,
|
|
||||||
R.string.add_games_warning_help,
|
|
||||||
{
|
|
||||||
if (NativeConfig.getGameDirs().isNotEmpty()) {
|
|
||||||
StepState.COMPLETE
|
|
||||||
} else {
|
|
||||||
StepState.INCOMPLETE
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -221,12 +246,22 @@ class SetupFragment : Fragment() {
|
|||||||
R.drawable.ic_check,
|
R.drawable.ic_check,
|
||||||
R.string.done,
|
R.string.done,
|
||||||
R.string.done_description,
|
R.string.done_description,
|
||||||
R.drawable.ic_arrow_forward,
|
mutableListOf<PageButton>().apply {
|
||||||
false,
|
add(
|
||||||
R.string.text_continue,
|
PageButton(
|
||||||
{ finishSetup() },
|
R.drawable.ic_arrow_forward,
|
||||||
false
|
R.string.get_started,
|
||||||
)
|
0,
|
||||||
|
buttonAction = {
|
||||||
|
finishSetup()
|
||||||
|
},
|
||||||
|
buttonState = {
|
||||||
|
ButtonState.BUTTON_ACTION_UNDEFINED
|
||||||
|
},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
) { PageState.UNDEFINED }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +272,7 @@ class SetupFragment : Fragment() {
|
|||||||
homeViewModel.gamesDirSelected.collect(
|
homeViewModel.gamesDirSelected.collect(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
resetState = { homeViewModel.setGamesDirSelected(false) }
|
resetState = { homeViewModel.setGamesDirSelected(false) }
|
||||||
) { if (it) gamesDirCallback.onStepCompleted() }
|
) { if (it) checkForButtonState.invoke() }
|
||||||
|
|
||||||
binding.viewPager2.apply {
|
binding.viewPager2.apply {
|
||||||
adapter = SetupAdapter(requireActivity() as AppCompatActivity, pages)
|
adapter = SetupAdapter(requireActivity() as AppCompatActivity, pages)
|
||||||
@@ -251,15 +286,18 @@ class SetupFragment : Fragment() {
|
|||||||
override fun onPageSelected(position: Int) {
|
override fun onPageSelected(position: Int) {
|
||||||
super.onPageSelected(position)
|
super.onPageSelected(position)
|
||||||
|
|
||||||
if (position == 1 && previousPosition == 0) {
|
val isFirstPage = position == 0
|
||||||
ViewUtils.showView(binding.buttonNext)
|
val isLastPage = position == pages.size - 1
|
||||||
ViewUtils.showView(binding.buttonBack)
|
|
||||||
} else if (position == 0 && previousPosition == 1) {
|
if (isFirstPage) {
|
||||||
ViewUtils.hideView(binding.buttonBack)
|
ViewUtils.hideView(binding.buttonBack)
|
||||||
|
} else {
|
||||||
|
ViewUtils.showView(binding.buttonBack)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLastPage) {
|
||||||
ViewUtils.hideView(binding.buttonNext)
|
ViewUtils.hideView(binding.buttonNext)
|
||||||
} else if (position == pages.size - 1 && previousPosition == pages.size - 2) {
|
} else {
|
||||||
ViewUtils.hideView(binding.buttonNext)
|
|
||||||
} else if (position == pages.size - 2 && previousPosition == pages.size - 1) {
|
|
||||||
ViewUtils.showView(binding.buttonNext)
|
ViewUtils.showView(binding.buttonNext)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,35 +309,63 @@ class SetupFragment : Fragment() {
|
|||||||
val index = binding.viewPager2.currentItem
|
val index = binding.viewPager2.currentItem
|
||||||
val currentPage = pages[index]
|
val currentPage = pages[index]
|
||||||
|
|
||||||
// Checks if the user has completed the task on the current page
|
val warningMessages =
|
||||||
if (currentPage.hasWarning) {
|
mutableListOf<Triple<Int, Int, Int>>() // title, description, helpLink
|
||||||
val stepState = currentPage.stepCompleted.invoke()
|
|
||||||
if (stepState != StepState.INCOMPLETE) {
|
|
||||||
pageForward()
|
|
||||||
return@setOnClickListener
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasBeenWarned[index]) {
|
currentPage.pageButtons?.forEach { button ->
|
||||||
SetupWarningDialogFragment.newInstance(
|
if (button.hasWarning || button.isUnskippable) {
|
||||||
currentPage.warningTitleId,
|
val buttonState = button.buttonState()
|
||||||
currentPage.warningDescriptionId,
|
if (buttonState == ButtonState.BUTTON_ACTION_COMPLETE) {
|
||||||
currentPage.warningHelpLinkId,
|
return@forEach
|
||||||
index
|
}
|
||||||
).show(childFragmentManager, SetupWarningDialogFragment.TAG)
|
|
||||||
return@setOnClickListener
|
if (button.isUnskippable) {
|
||||||
|
MessageDialogFragment.newInstance(
|
||||||
|
activity = requireActivity(),
|
||||||
|
titleId = button.warningTitleId,
|
||||||
|
descriptionId = button.warningDescriptionId,
|
||||||
|
helpLinkId = button.warningHelpLinkId
|
||||||
|
).show(childFragmentManager, MessageDialogFragment.TAG)
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasBeenWarned[index]) {
|
||||||
|
warningMessages.add(
|
||||||
|
Triple(
|
||||||
|
button.warningTitleId,
|
||||||
|
button.warningDescriptionId,
|
||||||
|
button.warningHelpLinkId
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (warningMessages.isNotEmpty()) {
|
||||||
|
SetupWarningDialogFragment.newInstance(
|
||||||
|
warningMessages.map { it.first }.toIntArray(),
|
||||||
|
warningMessages.map { it.second }.toIntArray(),
|
||||||
|
warningMessages.map { it.third }.toIntArray(),
|
||||||
|
index
|
||||||
|
).show(childFragmentManager, SetupWarningDialogFragment.TAG)
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
pageForward()
|
pageForward()
|
||||||
}
|
}
|
||||||
binding.buttonBack.setOnClickListener { pageBackward() }
|
binding.buttonBack.setOnClickListener { pageBackward() }
|
||||||
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
val nextIsVisible = savedInstanceState.getBoolean(KEY_NEXT_VISIBILITY)
|
val nextIsVisible = savedInstanceState.getBoolean(KEY_NEXT_VISIBILITY)
|
||||||
val backIsVisible = savedInstanceState.getBoolean(KEY_BACK_VISIBILITY)
|
val backIsVisible = savedInstanceState.getBoolean(KEY_BACK_VISIBILITY)
|
||||||
hasBeenWarned = savedInstanceState.getBooleanArray(KEY_HAS_BEEN_WARNED)!!
|
hasBeenWarned = savedInstanceState.getBooleanArray(KEY_HAS_BEEN_WARNED)!!
|
||||||
|
|
||||||
binding.buttonNext.setVisible(nextIsVisible)
|
if (nextIsVisible) {
|
||||||
binding.buttonBack.setVisible(backIsVisible)
|
binding.buttonNext.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
if (backIsVisible) {
|
||||||
|
binding.buttonBack.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
hasBeenWarned = BooleanArray(pages.size)
|
hasBeenWarned = BooleanArray(pages.size)
|
||||||
}
|
}
|
||||||
@@ -307,6 +373,7 @@ class SetupFragment : Fragment() {
|
|||||||
setInsets()
|
setInsets()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
NativeConfig.saveGlobalConfig()
|
NativeConfig.saveGlobalConfig()
|
||||||
@@ -314,10 +381,8 @@ class SetupFragment : Fragment() {
|
|||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
super.onSaveInstanceState(outState)
|
super.onSaveInstanceState(outState)
|
||||||
if (_binding != null) {
|
outState.putBoolean(KEY_NEXT_VISIBILITY, binding.buttonNext.isVisible)
|
||||||
outState.putBoolean(KEY_NEXT_VISIBILITY, binding.buttonNext.isVisible)
|
outState.putBoolean(KEY_BACK_VISIBILITY, binding.buttonBack.isVisible)
|
||||||
outState.putBoolean(KEY_BACK_VISIBILITY, binding.buttonBack.isVisible)
|
|
||||||
}
|
|
||||||
outState.putBooleanArray(KEY_HAS_BEEN_WARNED, hasBeenWarned)
|
outState.putBooleanArray(KEY_HAS_BEEN_WARNED, hasBeenWarned)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,13 +391,27 @@ class SetupFragment : Fragment() {
|
|||||||
_binding = null
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var notificationCallback: SetupCallback
|
private val checkForButtonState: () -> Unit = {
|
||||||
|
val page = pages[binding.viewPager2.currentItem]
|
||||||
|
page.pageButtons?.forEach {
|
||||||
|
if (it.buttonState() == ButtonState.BUTTON_ACTION_COMPLETE) {
|
||||||
|
pageButtonCallback.onStepCompleted(
|
||||||
|
it.titleId,
|
||||||
|
pageFullyCompleted = false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (page.pageSteps() == PageState.COMPLETE) {
|
||||||
|
pageButtonCallback.onStepCompleted(0, pageFullyCompleted = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
private val permissionLauncher =
|
private val permissionLauncher =
|
||||||
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||||
if (it) {
|
if (it) {
|
||||||
notificationCallback.onStepCompleted()
|
checkForButtonState.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!it &&
|
if (!it &&
|
||||||
@@ -345,15 +424,13 @@ class SetupFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var keyCallback: SetupCallback
|
|
||||||
private lateinit var firmwareCallback: SetupCallback
|
|
||||||
|
|
||||||
val getProdKey =
|
val getProdKey =
|
||||||
registerForActivityResult(ActivityResultContracts.OpenDocument()) { result ->
|
registerForActivityResult(ActivityResultContracts.OpenDocument()) { result ->
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
mainActivity.processKey(result, "keys")
|
mainActivity.processKey(result, "keys")
|
||||||
if (NativeLibrary.areKeysPresent()) {
|
if (NativeLibrary.areKeysPresent()) {
|
||||||
keyCallback.onStepCompleted()
|
checkForButtonState.invoke()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -363,14 +440,12 @@ class SetupFragment : Fragment() {
|
|||||||
if (result != null) {
|
if (result != null) {
|
||||||
mainActivity.processFirmware(result) {
|
mainActivity.processFirmware(result) {
|
||||||
if (NativeLibrary.isFirmwareAvailable()) {
|
if (NativeLibrary.isFirmwareAvailable()) {
|
||||||
firmwareCallback.onStepCompleted()
|
checkForButtonState.invoke()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var gamesDirCallback: SetupCallback
|
|
||||||
|
|
||||||
val getGamesDirectory =
|
val getGamesDirectory =
|
||||||
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
|
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
@@ -379,9 +454,13 @@ class SetupFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun finishSetup() {
|
private fun finishSetup() {
|
||||||
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext).edit()
|
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
|
||||||
|
.edit()
|
||||||
.putBoolean(Settings.PREF_FIRST_APP_LAUNCH, false)
|
.putBoolean(Settings.PREF_FIRST_APP_LAUNCH, false)
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
|
gamesViewModel.reloadGames(directoriesChanged = true, firstStartup = false)
|
||||||
|
|
||||||
mainActivity.finishSetup(binding.root.findNavController())
|
mainActivity.finishSetup(binding.root.findNavController())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,8 +484,10 @@ class SetupFragment : Fragment() {
|
|||||||
ViewCompat.setOnApplyWindowInsetsListener(
|
ViewCompat.setOnApplyWindowInsetsListener(
|
||||||
binding.root
|
binding.root
|
||||||
) { _: View, windowInsets: WindowInsetsCompat ->
|
) { _: View, windowInsets: WindowInsetsCompat ->
|
||||||
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
val barInsets =
|
||||||
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
|
windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||||
|
val cutoutInsets =
|
||||||
|
windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
|
||||||
|
|
||||||
val leftPadding = barInsets.left + cutoutInsets.left
|
val leftPadding = barInsets.left + cutoutInsets.left
|
||||||
val topPadding = barInsets.top + cutoutInsets.top
|
val topPadding = barInsets.top + cutoutInsets.top
|
||||||
@@ -415,11 +496,22 @@ class SetupFragment : Fragment() {
|
|||||||
|
|
||||||
if (resources.getBoolean(R.bool.small_layout)) {
|
if (resources.getBoolean(R.bool.small_layout)) {
|
||||||
binding.viewPager2
|
binding.viewPager2
|
||||||
.updatePadding(left = leftPadding, top = topPadding, right = rightPadding)
|
.updatePadding(
|
||||||
|
left = leftPadding,
|
||||||
|
top = topPadding,
|
||||||
|
right = rightPadding
|
||||||
|
)
|
||||||
binding.constraintButtons
|
binding.constraintButtons
|
||||||
.updatePadding(left = leftPadding, right = rightPadding, bottom = bottomPadding)
|
.updatePadding(
|
||||||
|
left = leftPadding,
|
||||||
|
right = rightPadding,
|
||||||
|
bottom = bottomPadding
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
binding.viewPager2.updatePadding(top = topPadding, bottom = bottomPadding)
|
binding.viewPager2.updatePadding(
|
||||||
|
top = topPadding,
|
||||||
|
bottom = bottomPadding
|
||||||
|
)
|
||||||
binding.constraintButtons
|
binding.constraintButtons
|
||||||
.updatePadding(
|
.updatePadding(
|
||||||
left = leftPadding,
|
left = leftPadding,
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
@@ -11,20 +14,21 @@ import android.os.Bundle
|
|||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import org.yuzu.yuzu_emu.R
|
import org.yuzu.yuzu_emu.R
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
|
||||||
class SetupWarningDialogFragment : DialogFragment() {
|
class SetupWarningDialogFragment : DialogFragment() {
|
||||||
private var titleId: Int = 0
|
private var titleIds: IntArray = intArrayOf()
|
||||||
private var descriptionId: Int = 0
|
private var descriptionIds: IntArray = intArrayOf()
|
||||||
private var helpLinkId: Int = 0
|
private var helpLinkIds: IntArray = intArrayOf()
|
||||||
private var page: Int = 0
|
private var page: Int = 0
|
||||||
|
|
||||||
private lateinit var setupFragment: SetupFragment
|
private lateinit var setupFragment: SetupFragment
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
titleId = requireArguments().getInt(TITLE)
|
titleIds = requireArguments().getIntArray(TITLES) ?: intArrayOf()
|
||||||
descriptionId = requireArguments().getInt(DESCRIPTION)
|
descriptionIds = requireArguments().getIntArray(DESCRIPTIONS) ?: intArrayOf()
|
||||||
helpLinkId = requireArguments().getInt(HELP_LINK)
|
helpLinkIds = requireArguments().getIntArray(HELP_LINKS) ?: intArrayOf()
|
||||||
page = requireArguments().getInt(PAGE)
|
page = requireArguments().getInt(PAGE)
|
||||||
|
|
||||||
setupFragment = requireParentFragment() as SetupFragment
|
setupFragment = requireParentFragment() as SetupFragment
|
||||||
@@ -38,18 +42,24 @@ class SetupWarningDialogFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
.setNegativeButton(R.string.warning_cancel, null)
|
.setNegativeButton(R.string.warning_cancel, null)
|
||||||
|
|
||||||
if (titleId != 0) {
|
val messageBuilder = StringBuilder()
|
||||||
builder.setTitle(titleId)
|
for (i in titleIds.indices) {
|
||||||
} else {
|
if (titleIds[i] != 0) {
|
||||||
builder.setTitle("")
|
messageBuilder.append(getString(titleIds[i])).append("\n\n")
|
||||||
|
}
|
||||||
|
if (descriptionIds[i] != 0) {
|
||||||
|
messageBuilder.append(getString(descriptionIds[i])).append("\n\n")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (descriptionId != 0) {
|
|
||||||
builder.setMessage(descriptionId)
|
builder.setTitle("Warning")
|
||||||
}
|
builder.setMessage(messageBuilder.toString().trim())
|
||||||
if (helpLinkId != 0) {
|
|
||||||
|
if (helpLinkIds.any { it != 0 }) {
|
||||||
builder.setNeutralButton(R.string.warning_help) { _: DialogInterface?, _: Int ->
|
builder.setNeutralButton(R.string.warning_help) { _: DialogInterface?, _: Int ->
|
||||||
val helpLink = resources.getString(R.string.install_prod_keys_warning_help)
|
val helpLinkId = helpLinkIds.first { it != 0 }
|
||||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(helpLink))
|
val helpLink = resources.getString(helpLinkId)
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, helpLink.toUri())
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,27 +70,27 @@ class SetupWarningDialogFragment : DialogFragment() {
|
|||||||
companion object {
|
companion object {
|
||||||
const val TAG = "SetupWarningDialogFragment"
|
const val TAG = "SetupWarningDialogFragment"
|
||||||
|
|
||||||
private const val TITLE = "Title"
|
private const val TITLES = "Titles"
|
||||||
private const val DESCRIPTION = "Description"
|
private const val DESCRIPTIONS = "Descriptions"
|
||||||
private const val HELP_LINK = "HelpLink"
|
private const val HELP_LINKS = "HelpLinks"
|
||||||
private const val PAGE = "Page"
|
private const val PAGE = "Page"
|
||||||
|
|
||||||
fun newInstance(
|
fun newInstance(
|
||||||
titleId: Int,
|
titleIds: IntArray,
|
||||||
descriptionId: Int,
|
descriptionIds: IntArray,
|
||||||
helpLinkId: Int,
|
helpLinkIds: IntArray,
|
||||||
page: Int
|
page: Int
|
||||||
): SetupWarningDialogFragment {
|
): SetupWarningDialogFragment {
|
||||||
val dialog = SetupWarningDialogFragment()
|
val dialog = SetupWarningDialogFragment()
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.apply {
|
bundle.apply {
|
||||||
putInt(TITLE, titleId)
|
putIntArray(TITLES, titleIds)
|
||||||
putInt(DESCRIPTION, descriptionId)
|
putIntArray(DESCRIPTIONS, descriptionIds)
|
||||||
putInt(HELP_LINK, helpLinkId)
|
putIntArray(HELP_LINKS, helpLinkIds)
|
||||||
putInt(PAGE, page)
|
putInt(PAGE, page)
|
||||||
}
|
}
|
||||||
dialog.arguments = bundle
|
dialog.arguments = bundle
|
||||||
return dialog
|
return dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.model
|
package org.yuzu.yuzu_emu.model
|
||||||
@@ -145,7 +145,10 @@ class GamesViewModel : ViewModel() {
|
|||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
NativeConfig.addGameDir(gameDir)
|
NativeConfig.addGameDir(gameDir)
|
||||||
getGameDirs(true)
|
val isFirstTimeSetup = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
|
||||||
|
.getBoolean(org.yuzu.yuzu_emu.features.settings.model.Settings.PREF_FIRST_APP_LAUNCH, true)
|
||||||
|
|
||||||
|
getGameDirs(!isFirstTimeSetup)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (savedFromGameFragment) {
|
if (savedFromGameFragment) {
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
@@ -7,23 +10,36 @@ data class SetupPage(
|
|||||||
val iconId: Int,
|
val iconId: Int,
|
||||||
val titleId: Int,
|
val titleId: Int,
|
||||||
val descriptionId: Int,
|
val descriptionId: Int,
|
||||||
val buttonIconId: Int,
|
val pageButtons: List<PageButton>? = null,
|
||||||
val leftAlignedIcon: Boolean,
|
val pageSteps: () -> PageState = { PageState.COMPLETE },
|
||||||
val buttonTextId: Int,
|
|
||||||
|
)
|
||||||
|
|
||||||
|
data class PageButton(
|
||||||
|
val iconId: Int,
|
||||||
|
val titleId: Int,
|
||||||
|
val descriptionId: Int,
|
||||||
val buttonAction: (callback: SetupCallback) -> Unit,
|
val buttonAction: (callback: SetupCallback) -> Unit,
|
||||||
val hasWarning: Boolean,
|
val buttonState: () -> ButtonState = { ButtonState.BUTTON_ACTION_UNDEFINED },
|
||||||
|
val isUnskippable: Boolean = false,
|
||||||
|
val hasWarning: Boolean = false,
|
||||||
val warningTitleId: Int = 0,
|
val warningTitleId: Int = 0,
|
||||||
val warningDescriptionId: Int = 0,
|
val warningDescriptionId: Int = 0,
|
||||||
val warningHelpLinkId: Int = 0,
|
val warningHelpLinkId: Int = 0
|
||||||
val stepCompleted: () -> StepState = { StepState.UNDEFINED }
|
|
||||||
)
|
)
|
||||||
|
|
||||||
interface SetupCallback {
|
interface SetupCallback {
|
||||||
fun onStepCompleted()
|
fun onStepCompleted(pageButtonId: Int, pageFullyCompleted: Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class StepState {
|
enum class PageState {
|
||||||
COMPLETE,
|
COMPLETE,
|
||||||
INCOMPLETE,
|
INCOMPLETE,
|
||||||
UNDEFINED
|
UNDEFINED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class ButtonState {
|
||||||
|
BUTTON_ACTION_COMPLETE,
|
||||||
|
BUTTON_ACTION_INCOMPLETE,
|
||||||
|
BUTTON_ACTION_UNDEFINED
|
||||||
|
}
|
||||||
|
|||||||
9
src/android/app/src/main/res/drawable/ic_permission.xml
Normal file
9
src/android/app/src/main/res/drawable/ic_permission.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorControlNormal"
|
||||||
|
android:pathData="M12,1L3,5v6c0,5.55 3.84,10.74 9,12 5.16,-1.26 9,-6.45 9,-12V5l-9,-4zM12,11.99h7c-0.53,4.12 -3.28,7.79 -7,8.94V12H5V6.3l7,-3.11v8.8z"/>
|
||||||
|
</vector>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/next"
|
android:text="@string/next"
|
||||||
android:visibility="invisible"
|
android:visibility="visible"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
|
|||||||
@@ -1,97 +1,101 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/left_content"
|
||||||
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
android:layout_weight="1"
|
app:layout_constraintEnd_toStartOf="@+id/right_content"
|
||||||
android:gravity="center">
|
app:layout_constraintHorizontal_weight="2">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/icon"
|
android:id="@+id/icon"
|
||||||
android:layout_width="260dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="260dp"
|
android:layout_height="0dp"
|
||||||
android:layout_gravity="center" />
|
android:layout_marginTop="32dp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/text_title"
|
||||||
</LinearLayout>
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintHeight_max="160dp"
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
app:layout_constraintHeight_min="80dp"
|
||||||
android:layout_width="match_parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
android:layout_height="match_parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
android:layout_weight="1">
|
app:layout_constraintWidth_max="160dp"
|
||||||
|
app:layout_constraintWidth_min="80dp"
|
||||||
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
|
app:layout_constraintVertical_weight="3"
|
||||||
|
tools:src="@drawable/ic_notification" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/text_title"
|
android:id="@+id/text_title"
|
||||||
style="@style/TextAppearance.Material3.DisplaySmall"
|
style="@style/SynthwaveText.Header"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:textAlignment="center"
|
||||||
android:textColor="?attr/colorOnSurface"
|
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/text_description"
|
app:layout_constraintBottom_toTopOf="@+id/text_description"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toBottomOf="@+id/icon"
|
||||||
app:layout_constraintVertical_weight="2"
|
|
||||||
tools:text="@string/welcome" />
|
tools:text="@string/welcome" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/text_description"
|
android:id="@+id/text_description"
|
||||||
style="@style/TextAppearance.Material3.TitleLarge"
|
style="@style/TextAppearance.Material3.TitleLarge"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/button_action"
|
android:textAlignment="center"
|
||||||
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/text_confirmation"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/text_title"
|
app:layout_constraintTop_toBottomOf="@+id/text_title"
|
||||||
app:layout_constraintVertical_weight="2"
|
|
||||||
app:lineHeight="30sp"
|
app:lineHeight="30sp"
|
||||||
tools:text="@string/welcome_description" />
|
tools:text="@string/welcome_description" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/text_confirmation"
|
android:id="@+id/text_confirmation"
|
||||||
style="@style/TextAppearance.Material3.TitleLarge"
|
style="@style/SynthwaveText.Accent"
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:paddingHorizontal="16dp"
|
|
||||||
android:paddingBottom="20dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textSize="30sp"
|
|
||||||
android:visibility="invisible"
|
|
||||||
android:text="@string/step_complete"
|
|
||||||
android:textStyle="bold"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/text_description"
|
|
||||||
app:layout_constraintVertical_weight="1"
|
|
||||||
app:lineHeight="30sp" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/button_action"
|
|
||||||
style="@style/EdenButton.Primary"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="56dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:layout_marginBottom="48dp"
|
android:text="@string/step_complete"
|
||||||
android:textSize="20sp"
|
android:textAlignment="center"
|
||||||
app:iconGravity="end"
|
android:textSize="30sp"
|
||||||
app:iconSize="24sp"
|
android:textStyle="bold"
|
||||||
|
android:visibility="invisible"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/text_description"
|
app:layout_constraintTop_toBottomOf="@+id/text_description"
|
||||||
tools:text="Get started" />
|
app:lineHeight="30sp" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/right_content"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/left_content"
|
||||||
|
app:layout_constraintHorizontal_weight="1">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/page_button_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/next"
|
android:text="@string/next"
|
||||||
android:visibility="invisible"
|
android:visibility="visible"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
|
|||||||
8
src/android/app/src/main/res/layout/page_button.xml
Normal file
8
src/android/app/src/main/res/layout/page_button.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<com.google.android.material.button.MaterialButton xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="170dp"
|
||||||
|
android:layout_height="55dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
app:iconTint="?attr/colorOnPrimary"
|
||||||
|
app:iconSize="24dp"
|
||||||
|
style="@style/Widget.Material3.Button.UnelevatedButton" />
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginTop="64dp"
|
android:layout_marginTop="64dp"
|
||||||
android:layout_marginBottom="32dp"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/text_title"
|
app:layout_constraintBottom_toTopOf="@+id/text_title"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHeight_max="220dp"
|
app:layout_constraintHeight_max="220dp"
|
||||||
@@ -45,7 +44,7 @@
|
|||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/button_action"
|
app:layout_constraintBottom_toTopOf="@+id/text_confirmation"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/text_title"
|
app:layout_constraintTop_toBottomOf="@+id/text_title"
|
||||||
@@ -56,8 +55,8 @@
|
|||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/text_confirmation"
|
android:id="@+id/text_confirmation"
|
||||||
style="@style/SynthwaveText.Accent"
|
style="@style/SynthwaveText.Accent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="213dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="226dp"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="24dp"
|
android:paddingTop="24dp"
|
||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
@@ -71,20 +70,16 @@
|
|||||||
app:layout_constraintVertical_weight="1"
|
app:layout_constraintVertical_weight="1"
|
||||||
app:lineHeight="30sp" />
|
app:lineHeight="30sp" />
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<LinearLayout
|
||||||
android:id="@+id/button_action"
|
android:id="@+id/page_button_container"
|
||||||
style="@style/EdenButton.Primary"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="56dp"
|
android:orientation="vertical"
|
||||||
android:layout_marginTop="16dp"
|
android:padding="16dp"
|
||||||
android:layout_marginBottom="48dp"
|
android:gravity="center"
|
||||||
android:textSize="20sp"
|
|
||||||
app:iconGravity="end"
|
|
||||||
app:iconSize="24sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/text_description"
|
app:layout_constraintTop_toBottomOf="@+id/text_description"
|
||||||
tools:text="Get started" />
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Enhanced)</string>
|
|
||||||
<string name="process_ram">Process RAM: %1$d MB</string>
|
<string name="process_ram">Process RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">بناء</string>
|
<string name="shaders_prefix">بناء</string>
|
||||||
<string name="shaders_suffix">تظليل(ات)</string>
|
<string name="shaders_suffix">تظليل(ات)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">كثافة تمرير تظليل العينة. تؤدي القيم الأعلى إلى تحسين الجودة بشكل أكبر، ولكنها تقلل أيضًا من الأداء إلى حد كبير.</string>
|
<string name="sample_shading_fraction_description">كثافة تمرير تظليل العينة. تؤدي القيم الأعلى إلى تحسين الجودة بشكل أكبر، ولكنها تقلل أيضًا من الأداء إلى حد كبير.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">العارض</string>
|
<string name="veil_renderer">العارض</string>
|
||||||
<string name="frame_interpolation">تحسين سرعة الإطارات</string>
|
|
||||||
<string name="frame_interpolation_description">يضمن تسليمًا سلسًا ومتناسقًا للإطارات من خلال مزامنة التوقيت بينها، مما يقلل من التقطيع وعدم انتظام الحركة. مثالي للألعاب التي تعاني من عدم استقرار في توقيت الإطارات أو تقطع دقيق أثناء اللعب.</string>
|
|
||||||
<string name="renderer_early_release_fences">إطلاق الأسوار مبكرًا</string>
|
<string name="renderer_early_release_fences">إطلاق الأسوار مبكرًا</string>
|
||||||
<string name="renderer_early_release_fences_description">يساعد في إصلاح مشكلة 0 إطار في الثانية في ألعاب مثل DKCR:HD وSubnautica Below Zero وOri 2، ولكن قد يتسبب في تعطيل التحميل أو الأداء في ألعاب Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">يساعد في إصلاح مشكلة 0 إطار في الثانية في ألعاب مثل DKCR:HD وSubnautica Below Zero وOri 2، ولكن قد يتسبب في تعطيل التحميل أو الأداء في ألعاب Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">مزامنة عمليات الذاكرة</string>
|
<string name="sync_memory_operations">مزامنة عمليات الذاكرة</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">ابدأ الآن</string>
|
<string name="get_started">ابدأ الآن</string>
|
||||||
<string name="keys">المفاتيح</string>
|
<string name="keys">المفاتيح</string>
|
||||||
<string name="keys_description">حدد ملف <b>prod.keys</b> الخاص بك باستخدام الزر أدناه.</string>
|
<string name="keys_description">حدد ملف <b>prod.keys</b> الخاص بك باستخدام الزر أدناه.</string>
|
||||||
<string name="select_keys">حدد المفاتيح</string>
|
|
||||||
<string name="firmware">الفيرموير</string>
|
<string name="firmware">الفيرموير</string>
|
||||||
<string name="firmware_description">حدد ملف <b>firmware.zip</b> الخاص بك باستخدام الزر أدناه.</string>
|
<string name="firmware_description">حدد ملف <b>firmware.zip</b> الخاص بك باستخدام الزر أدناه.</string>
|
||||||
<string name="select_firmware">حدد الفيرموير</string>
|
|
||||||
<string name="games">الألعاب</string>
|
<string name="games">الألعاب</string>
|
||||||
<string name="games_description">حدد مجلد <b>الألعاب</b> الخاص بك باستخدام الزر أدناه.</string>
|
<string name="games_description">حدد مجلد <b>الألعاب</b> الخاص بك باستخدام الزر أدناه.</string>
|
||||||
<string name="done">إنهاء</string>
|
<string name="done">إنهاء</string>
|
||||||
<string name="done_description">أنت جاهز تمامًا.\nاستمتع بألعابك!</string>
|
<string name="done_description">أنت جاهز تمامًا.\nاستمتع بألعابك!</string>
|
||||||
<string name="text_continue">متابعة</string>
|
|
||||||
<string name="next">التالي</string>
|
<string name="next">التالي</string>
|
||||||
<string name="back">عودة</string>
|
<string name="back">عودة</string>
|
||||||
<string name="add_games">إضافة الألعاب</string>
|
<string name="add_games">إضافة الألعاب</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">الإشعارات</string>
|
<string name="notifications">الإشعارات</string>
|
||||||
<string name="notifications_description">امنح الإذن بالإشعار باستخدام الزر أدناه.</string>
|
<string name="notifications_description">امنح الإذن بالإشعار باستخدام الزر أدناه.</string>
|
||||||
<string name="give_permission">منح الإذن</string>
|
|
||||||
<string name="notification_warning">تخطي منح إذن الإشعارات؟</string>
|
|
||||||
<string name="notification_warning_description">لن تتمكن Eden من إشعارك بالمعلومات المهمة.</string>
|
|
||||||
<string name="permission_denied">تم رفض الإذن</string>
|
<string name="permission_denied">تم رفض الإذن</string>
|
||||||
<string name="permission_denied_description">لقد رفضت هذا الإذن عدة مرات ويتعين عليك الآن منحه يدويًا في إعدادات النظام</string>
|
<string name="permission_denied_description">لقد رفضت هذا الإذن عدة مرات ويتعين عليك الآن منحه يدويًا في إعدادات النظام</string>
|
||||||
<string name="about">حول</string>
|
<string name="about">حول</string>
|
||||||
@@ -479,8 +470,6 @@
|
|||||||
<string name="display">الشاشة</string>
|
<string name="display">الشاشة</string>
|
||||||
<string name="processing">تأثيرات بعد المعالجة</string>
|
<string name="processing">تأثيرات بعد المعالجة</string>
|
||||||
|
|
||||||
<string name="frame_skipping">قيد التطوير: تخطي الإطارات</string>
|
|
||||||
<string name="frame_skipping_description">تبديل تخطي الإطارات لتحسين الأداء عن طريق تقليل عدد الإطارات المعروضة. هذه الميزة قيد التطوير وسيتم تمكينها في الإصدارات المستقبلية.</string>
|
|
||||||
<string name="renderer_accuracy">مستوى الدقة</string>
|
<string name="renderer_accuracy">مستوى الدقة</string>
|
||||||
<string name="renderer_resolution">الدقة (الإرساء/محمول)</string>
|
<string name="renderer_resolution">الدقة (الإرساء/محمول)</string>
|
||||||
<string name="renderer_vsync">VSync وضع</string>
|
<string name="renderer_vsync">VSync وضع</string>
|
||||||
@@ -1016,10 +1005,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">خلفيات سوداء</string>
|
<string name="use_black_backgrounds">خلفيات سوداء</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">ئاگادارکردنەوەکان پیشان دەدات کاتێک شتێک بە هەڵەدا دەچێت.</string>
|
<string name="notice_notification_channel_description">ئاگادارکردنەوەکان پیشان دەدات کاتێک شتێک بە هەڵەدا دەچێت.</string>
|
||||||
<string name="notification_permission_not_granted">مۆڵەتی ئاگادارکردنەوە نەدراوە!</string>
|
<string name="notification_permission_not_granted">مۆڵەتی ئاگادارکردنەوە نەدراوە!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(پێشکەوتوو)</string>
|
|
||||||
<string name="process_ram">RAMی پرۆسە: %1$d MB</string>
|
<string name="process_ram">RAMی پرۆسە: %1$d MB</string>
|
||||||
<string name="shaders_prefix">بیناکردنی</string>
|
<string name="shaders_prefix">بیناکردنی</string>
|
||||||
<string name="shaders_suffix">شەیدەر(ەکان)</string>
|
<string name="shaders_suffix">شەیدەر(ەکان)</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">چڕی تێپەڕاندنی سێبەرکردنی نموونە. بەهای زیاتر کوالێتی باشتر دەکات بەڵام کارایی زیاتر کەم دەکاتەوە.</string>
|
<string name="sample_shading_fraction_description">چڕی تێپەڕاندنی سێبەرکردنی نموونە. بەهای زیاتر کوالێتی باشتر دەکات بەڵام کارایی زیاتر کەم دەکاتەوە.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">رێندرەر</string>
|
<string name="veil_renderer">رێندرەر</string>
|
||||||
<string name="frame_interpolation">تحسين توقيت الإطارات</string>
|
|
||||||
<string name="frame_interpolation_description">يضمن تسليمًا سلسًا ومتناسقًا للإطارات من خلال مزامنة التوقيت بينها، مما يقلل من التقطيع وعدم انتظام الحركة. مثالي للألعاب التي تعاني من عدم استقرار في توقيت الإطارات أو تقطع دقيق أثناء اللعب.</string>
|
|
||||||
<string name="renderer_early_release_fences">زێدەکردنی پەرستارەکان زووتر</string>
|
<string name="renderer_early_release_fences">زێدەکردنی پەرستارەکان زووتر</string>
|
||||||
<string name="renderer_early_release_fences_description">یارمەتی دەدات لە چارەسەری 0 FPS لە یارییەکانی وەک DKCR:HD، Subnautica Below Zero و Ori 2، بەڵام ڕەنگە بارکردن یان کارایی لە یارییەکانی Unreal Engine تێکبدات.</string>
|
<string name="renderer_early_release_fences_description">یارمەتی دەدات لە چارەسەری 0 FPS لە یارییەکانی وەک DKCR:HD، Subnautica Below Zero و Ori 2، بەڵام ڕەنگە بارکردن یان کارایی لە یارییەکانی Unreal Engine تێکبدات.</string>
|
||||||
<string name="sync_memory_operations">هاوبەشیی کردارەکانی بیرگە</string>
|
<string name="sync_memory_operations">هاوبەشیی کردارەکانی بیرگە</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">دەست پێبکە</string>
|
<string name="get_started">دەست پێبکە</string>
|
||||||
<string name="keys">کلیلەکان</string>
|
<string name="keys">کلیلەکان</string>
|
||||||
<string name="keys_description">فایلی <b>prod.keys</b> هەڵبژێرە بە دوگمەی خوارەوە.</string>
|
<string name="keys_description">فایلی <b>prod.keys</b> هەڵبژێرە بە دوگمەی خوارەوە.</string>
|
||||||
<string name="select_keys">کلیلەکان هەڵبژێرە</string>
|
|
||||||
<string name="firmware">فریموێر</string>
|
<string name="firmware">فریموێر</string>
|
||||||
<string name="select_firmware">هەڵبژاردنی فریموێر</string>
|
|
||||||
<string name="games">یاریەکان</string>
|
<string name="games">یاریەکان</string>
|
||||||
<string name="games_description">فۆڵدەری <b>Games</b> هەڵبژێرە بە دوگمەی خوارەوە.</string>
|
<string name="games_description">فۆڵدەری <b>Games</b> هەڵبژێرە بە دوگمەی خوارەوە.</string>
|
||||||
<string name="done">تەواو</string>
|
<string name="done">تەواو</string>
|
||||||
<string name="text_continue">بەردەوام بوون</string>
|
|
||||||
<string name="next">دواتر</string>
|
<string name="next">دواتر</string>
|
||||||
<string name="back">گەڕانەوە</string>
|
<string name="back">گەڕانەوە</string>
|
||||||
<string name="add_games">زیادکردنی یاری</string>
|
<string name="add_games">زیادکردنی یاری</string>
|
||||||
@@ -249,9 +243,6 @@
|
|||||||
<string name="install_firmware_warning_description">زۆر یاری پێویستیان بە فریموێر هەیە بۆ ئەوەی باش کار بکەن.</string>
|
<string name="install_firmware_warning_description">زۆر یاری پێویستیان بە فریموێر هەیە بۆ ئەوەی باش کار بکەن.</string>
|
||||||
<string name="notifications">ئاگادارکردنەوەکان</string>
|
<string name="notifications">ئاگادارکردنەوەکان</string>
|
||||||
<string name="notifications_description">بە دوگمەی خوارەوە مۆڵەتی ئاگادارکردنەوەکە بدە.</string>
|
<string name="notifications_description">بە دوگمەی خوارەوە مۆڵەتی ئاگادارکردنەوەکە بدە.</string>
|
||||||
<string name="give_permission">مۆڵەت بدە</string>
|
|
||||||
<string name="notification_warning">پێدانی مۆڵەتی ئاگادارکردنەوە تێپەڕدەکەیت؟</string>
|
|
||||||
<string name="notification_warning_description">یوزو ناتوانێت لە زانیاری گرنگ ئاگادارت بکاتەوە.</string>
|
|
||||||
<string name="permission_denied">مۆڵەت پێدان ڕەتکرایەوە</string>
|
<string name="permission_denied">مۆڵەت پێدان ڕەتکرایەوە</string>
|
||||||
<string name="permission_denied_description">زۆر جار ئەم مۆڵەتەت ڕەتکردۆتەوە و ئێستا دەبێت بە دەستی ڕێگەپێدان بکەیت لە ڕێکخستنەکانی سیستەمدا.</string>
|
<string name="permission_denied_description">زۆر جار ئەم مۆڵەتەت ڕەتکردۆتەوە و ئێستا دەبێت بە دەستی ڕێگەپێدان بکەیت لە ڕێکخستنەکانی سیستەمدا.</string>
|
||||||
<string name="about">دەربارە</string>
|
<string name="about">دەربارە</string>
|
||||||
@@ -389,8 +380,6 @@
|
|||||||
<string name="display">پیشاندان</string>
|
<string name="display">پیشاندان</string>
|
||||||
<string name="processing">پاشپڕۆسەکردن</string>
|
<string name="processing">پاشپڕۆسەکردن</string>
|
||||||
|
|
||||||
<string name="frame_skipping">قيد التطوير: تخطي الإطارات</string>
|
|
||||||
<string name="frame_skipping_description">تێپەڕاندنی فرەیمەکان بکە بۆ باشترکردنی کارایی بە کەمکردنەوەی ژمارەی فرەیمە ڕێندرکراوەکان. ئەم تایبەتمەندییە هێشتا کاردەکرێت و لە وەشانە داهاتووەکاندا چالاکدەکرێت.</string>
|
|
||||||
<string name="renderer_accuracy">ئاستی وردبینی</string>
|
<string name="renderer_accuracy">ئاستی وردبینی</string>
|
||||||
<string name="renderer_resolution">ڕوونی (دۆخی دەستی/دۆخی دۆک)</string>
|
<string name="renderer_resolution">ڕوونی (دۆخی دەستی/دۆخی دۆک)</string>
|
||||||
<string name="renderer_vsync">دۆخی VSync</string>
|
<string name="renderer_vsync">دۆخی VSync</string>
|
||||||
@@ -727,10 +716,13 @@
|
|||||||
<string name="theme_mode_dark">تاریک</string>
|
<string name="theme_mode_dark">تاریک</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">پاشبنەمای ڕەش</string>
|
<string name="use_black_backgrounds">پاشبنەمای ڕەش</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Ukáže oznámení v případě chyby.</string>
|
<string name="notice_notification_channel_description">Ukáže oznámení v případě chyby.</string>
|
||||||
<string name="notification_permission_not_granted">Oznámení nejsou oprávněna!</string>
|
<string name="notification_permission_not_granted">Oznámení nejsou oprávněna!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Vylepšený)</string>
|
|
||||||
<string name="process_ram">RAM procesu: %1$d MB</string>
|
<string name="process_ram">RAM procesu: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Sestavování</string>
|
<string name="shaders_prefix">Sestavování</string>
|
||||||
<string name="shaders_suffix">shaderů</string>
|
<string name="shaders_suffix">shaderů</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Intenzita průchodu stínování vzorku. Vyšší hodnoty zlepšují kvalitu, ale také výrazněji snižují výkon.</string>
|
<string name="sample_shading_fraction_description">Intenzita průchodu stínování vzorku. Vyšší hodnoty zlepšují kvalitu, ale také výrazněji snižují výkon.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Vylepšené časování snímků</string>
|
|
||||||
<string name="frame_interpolation_description">Zajišťuje plynulé a konzistentní zobrazování snímků synchronizací jejich časování, čímž snižuje trhání a nerovnoměrné animace. Ideální pro hry, které trpí nestabilitou časování snímků nebo mikrotrháním během hraní.</string>
|
|
||||||
<string name="renderer_early_release_fences">Uvolnit ploty brzy</string>
|
<string name="renderer_early_release_fences">Uvolnit ploty brzy</string>
|
||||||
<string name="renderer_early_release_fences_description">Pomáhá opravit 0 FPS v hrách jako DKCR:HD, Subnautica Below Zero a Ori 2, ale může narušit načítání nebo výkon v hrách na Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Pomáhá opravit 0 FPS v hrách jako DKCR:HD, Subnautica Below Zero a Ori 2, ale může narušit načítání nebo výkon v hrách na Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Synchronizace paměťových operací</string>
|
<string name="sync_memory_operations">Synchronizace paměťových operací</string>
|
||||||
@@ -214,12 +211,9 @@
|
|||||||
<string name="welcome">Vítejte!</string>
|
<string name="welcome">Vítejte!</string>
|
||||||
<string name="get_started">Začít</string>
|
<string name="get_started">Začít</string>
|
||||||
<string name="keys">Klíče</string>
|
<string name="keys">Klíče</string>
|
||||||
<string name="select_keys">Vybrat klíče</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Vybrat firmware</string>
|
|
||||||
<string name="games">Hry</string>
|
<string name="games">Hry</string>
|
||||||
<string name="done">Hotovo</string>
|
<string name="done">Hotovo</string>
|
||||||
<string name="text_continue">Pokračovat</string>
|
|
||||||
<string name="next">Další</string>
|
<string name="next">Další</string>
|
||||||
<string name="back">Zpět</string>
|
<string name="back">Zpět</string>
|
||||||
<string name="add_games">Přidat hry</string>
|
<string name="add_games">Přidat hry</string>
|
||||||
@@ -240,9 +234,6 @@
|
|||||||
<string name="install_firmware_warning">Přeskočit přidání firmwaru?</string>
|
<string name="install_firmware_warning">Přeskočit přidání firmwaru?</string>
|
||||||
<string name="install_firmware_warning_description">Mnoho her vyžaduje přístup k firmwaru pro správnou funkci.</string>
|
<string name="install_firmware_warning_description">Mnoho her vyžaduje přístup k firmwaru pro správnou funkci.</string>
|
||||||
<string name="notifications">Oznámení</string>
|
<string name="notifications">Oznámení</string>
|
||||||
<string name="give_permission">Udělit oprávnění</string>
|
|
||||||
<string name="notification_warning">Přeskočit udělení oprávnění k oznámení?</string>
|
|
||||||
<string name="notification_warning_description">Eden vám nebude schopno oznámit důležité informace.</string>
|
|
||||||
<string name="permission_denied">Oprávnění zamítnuto</string>
|
<string name="permission_denied">Oprávnění zamítnuto</string>
|
||||||
<string name="permission_denied_description">Zamítnul jste toto oprávnění příliš mnohokrát, musíte manuálně udělit oprávnění v nastavení systému.</string>
|
<string name="permission_denied_description">Zamítnul jste toto oprávnění příliš mnohokrát, musíte manuálně udělit oprávnění v nastavení systému.</string>
|
||||||
<string name="about">O aplikaci</string>
|
<string name="about">O aplikaci</string>
|
||||||
@@ -377,8 +368,6 @@
|
|||||||
<string name="display">Zobrazení</string>
|
<string name="display">Zobrazení</string>
|
||||||
<string name="processing">Postprocesing</string>
|
<string name="processing">Postprocesing</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Přeskočení snímků</string>
|
|
||||||
<string name="frame_skipping_description">Přepínání přeskočení snímků pro zlepšení výkonu snížením počtu vykreslených snímků. Tato funkce je stále ve vývoji a bude povolena v budoucích verzích.</string>
|
|
||||||
<string name="renderer_accuracy">Úroveň přesnosti</string>
|
<string name="renderer_accuracy">Úroveň přesnosti</string>
|
||||||
<string name="renderer_resolution">Rozlišení (Handheld/Docked)</string>
|
<string name="renderer_resolution">Rozlišení (Handheld/Docked)</string>
|
||||||
<string name="renderer_vsync">VSync režim</string>
|
<string name="renderer_vsync">VSync režim</string>
|
||||||
@@ -693,10 +682,13 @@
|
|||||||
<string name="theme_mode_dark">Tmavé</string>
|
<string name="theme_mode_dark">Tmavé</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Černá pozadí</string>
|
<string name="use_black_backgrounds">Černá pozadí</string>
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
<string name="value_too_high">Wert darf höchstens %1$d betragen</string>
|
<string name="value_too_high">Wert darf höchstens %1$d betragen</string>
|
||||||
<string name="input_overlay_options">Eingabe-Overlay</string>
|
<string name="input_overlay_options">Eingabe-Overlay</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Erweitert)</string>
|
|
||||||
<string name="process_ram">Prozess-RAM: %1$d MB</string>
|
<string name="process_ram">Prozess-RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Erstelle</string>
|
<string name="shaders_prefix">Erstelle</string>
|
||||||
<string name="shaders_suffix">Shader</string>
|
<string name="shaders_suffix">Shader</string>
|
||||||
@@ -85,8 +84,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Die Intensität des Sample-Shading-Durchgangs. Höhere Werte verbessern die Qualität stärker, beeinträchtigen aber auch die Leistung stärker.</string>
|
<string name="sample_shading_fraction_description">Die Intensität des Sample-Shading-Durchgangs. Höhere Werte verbessern die Qualität stärker, beeinträchtigen aber auch die Leistung stärker.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Erweiterte Frame-Synchronisation</string>
|
|
||||||
<string name="frame_interpolation_description">Sorgt für eine gleichmäßige und konsistente Frame-Wiedergabe durch Synchronisierung der Frame-Zeiten, was Ruckeln und ungleichmäßige Animationen reduziert. Ideal für Spiele, die unter instabilen Frame-Zeiten oder Mikrorucklern leiden.</string>
|
|
||||||
<string name="renderer_early_release_fences">Zäune früher freigeben</string>
|
<string name="renderer_early_release_fences">Zäune früher freigeben</string>
|
||||||
<string name="renderer_early_release_fences_description">Behebt 0 FPS in Spielen wie DKCR:HD, Subnautica Below Zero und Ori 2, kann aber Ladezeiten oder Performance in Unreal Engine-Spielen beeinträchtigen.</string>
|
<string name="renderer_early_release_fences_description">Behebt 0 FPS in Spielen wie DKCR:HD, Subnautica Below Zero und Ori 2, kann aber Ladezeiten oder Performance in Unreal Engine-Spielen beeinträchtigen.</string>
|
||||||
<string name="sync_memory_operations">Speicheroperationen synchronisieren</string>
|
<string name="sync_memory_operations">Speicheroperationen synchronisieren</string>
|
||||||
@@ -224,14 +221,11 @@
|
|||||||
<string name="get_started">Erste Schritte</string>
|
<string name="get_started">Erste Schritte</string>
|
||||||
<string name="keys">Schlüssel</string>
|
<string name="keys">Schlüssel</string>
|
||||||
<string name="keys_description">Wähle deine <b>prod.keys</b> Datei mit dem Button unten aus.</string>
|
<string name="keys_description">Wähle deine <b>prod.keys</b> Datei mit dem Button unten aus.</string>
|
||||||
<string name="select_keys">Schlüssel auswählen</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Firmware auswählen</string>
|
|
||||||
<string name="games">Spiele</string>
|
<string name="games">Spiele</string>
|
||||||
<string name="games_description">Wähle mit dem Knopf unten den <b>Spiele</b>-Ordner aus.</string>
|
<string name="games_description">Wähle mit dem Knopf unten den <b>Spiele</b>-Ordner aus.</string>
|
||||||
<string name="done">Fertig</string>
|
<string name="done">Fertig</string>
|
||||||
<string name="done_description">Du bist start klar.\nViel Spaß mit deinen Spielen!</string>
|
<string name="done_description">Du bist start klar.\nViel Spaß mit deinen Spielen!</string>
|
||||||
<string name="text_continue">Fortsetzen</string>
|
|
||||||
<string name="next">Weiter</string>
|
<string name="next">Weiter</string>
|
||||||
<string name="back">Zurück</string>
|
<string name="back">Zurück</string>
|
||||||
<string name="add_games">Spiele hinzufügen</string>
|
<string name="add_games">Spiele hinzufügen</string>
|
||||||
@@ -268,9 +262,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Benachrichtigungen</string>
|
<string name="notifications">Benachrichtigungen</string>
|
||||||
<string name="notifications_description">Erteile mit dem Knopf unten die Berechtigung, Benachrichtigungen zu senden.</string>
|
<string name="notifications_description">Erteile mit dem Knopf unten die Berechtigung, Benachrichtigungen zu senden.</string>
|
||||||
<string name="give_permission">Berechtigung erteilen</string>
|
|
||||||
<string name="notification_warning">Erteilung der Benachrichtigungsberechtigung überspringen\?</string>
|
|
||||||
<string name="notification_warning_description">Eden wird dich nicht über wichtige Informationen benachrichtigen können.</string>
|
|
||||||
<string name="permission_denied">Zugriff verweigert</string>
|
<string name="permission_denied">Zugriff verweigert</string>
|
||||||
<string name="permission_denied_description">Du hast diese Berechtigung zu oft verweigert und musst sie nun manuell in den Systemeinstellungen erteilen.</string>
|
<string name="permission_denied_description">Du hast diese Berechtigung zu oft verweigert und musst sie nun manuell in den Systemeinstellungen erteilen.</string>
|
||||||
<string name="about">Über</string>
|
<string name="about">Über</string>
|
||||||
@@ -430,12 +421,6 @@ Wird der Handheld-Modus verwendet, verringert es die Auflösung und erhöht die
|
|||||||
|
|
||||||
<!-- Graphics settings strings -->
|
<!-- Graphics settings strings -->
|
||||||
<string name="backend">Backend</string>
|
<string name="backend">Backend</string>
|
||||||
<string name="display">Anzeige</string>
|
|
||||||
<string name="processing">Nachbearbeitung</string>
|
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Frame Skipping</string>
|
|
||||||
<string name="frame_skipping_description">Aktivieren Sie Frame Skipping, um die Leistung durch Reduzierung der gerenderten Frames zu verbessern. Diese Funktion wird noch entwickelt und in zukünftigen Versionen verfügbar sein.</string>
|
|
||||||
<string name="renderer_accuracy">Genauigkeitsstufe</string>
|
|
||||||
<string name="renderer_resolution">Auflösung (Handheld/Gedockt)</string>
|
<string name="renderer_resolution">Auflösung (Handheld/Gedockt)</string>
|
||||||
<string name="renderer_vsync">VSync-Modus</string>
|
<string name="renderer_vsync">VSync-Modus</string>
|
||||||
<string name="renderer_screen_layout">Ausrichtung</string>
|
<string name="renderer_screen_layout">Ausrichtung</string>
|
||||||
@@ -912,10 +897,13 @@ Wirklich fortfahren?</string>
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Schwarze Hintergründe</string>
|
<string name="use_black_backgrounds">Schwarze Hintergründe</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Mejorado)</string>
|
|
||||||
<string name="process_ram">Proceso de RAM: %1$d MB</string>
|
<string name="process_ram">Proceso de RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Compilando</string>
|
<string name="shaders_prefix">Compilando</string>
|
||||||
<string name="shaders_suffix">Sombreador(es)</string>
|
<string name="shaders_suffix">Sombreador(es)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">La intensidad del paso de sombreado de la muestra. Los valores más altos mejoran más la calidad, pero también reducen el rendimiento en mayor medida.</string>
|
<string name="sample_shading_fraction_description">La intensidad del paso de sombreado de la muestra. Los valores más altos mejoran más la calidad, pero también reducen el rendimiento en mayor medida.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderizador</string>
|
<string name="veil_renderer">Renderizador</string>
|
||||||
<string name="frame_interpolation">Ritmo de fotogramas mejorado</string>
|
|
||||||
<string name="frame_interpolation_description">Garantiza una entrega de fotogramas fluida y consistente al sincronizar el tiempo entre fotogramas, reduciendo la tartamudez y la animación desigual. Ideal para juegos que experimentan inestabilidad en el tiempo de fotogramas o microtartamudeos durante el juego.</string>
|
|
||||||
<string name="renderer_early_release_fences">Liberar las vallas antes</string>
|
<string name="renderer_early_release_fences">Liberar las vallas antes</string>
|
||||||
<string name="renderer_early_release_fences_description">Ayuda a arreglar 0 FPS en juegos como DKCR:HD, Subnautica Below Zero y Ori 2, pero puede romper la carga o el rendimiento en juegos de Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Ayuda a arreglar 0 FPS en juegos como DKCR:HD, Subnautica Below Zero y Ori 2, pero puede romper la carga o el rendimiento en juegos de Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Sincronizar operaciones de memoria</string>
|
<string name="sync_memory_operations">Sincronizar operaciones de memoria</string>
|
||||||
@@ -238,15 +235,12 @@
|
|||||||
<string name="get_started">Empezar</string>
|
<string name="get_started">Empezar</string>
|
||||||
<string name="keys">Claves</string>
|
<string name="keys">Claves</string>
|
||||||
<string name="keys_description">Selecciona tu archivo <b>prod.keys</b> utilizando el botón de abajo.</string>
|
<string name="keys_description">Selecciona tu archivo <b>prod.keys</b> utilizando el botón de abajo.</string>
|
||||||
<string name="select_keys">Seleccionar las claves</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="firmware_description">Seleccione su archivo <b> firmware.zip </b> con el botón de abajo.</string>
|
<string name="firmware_description">Seleccione su archivo <b> firmware.zip </b> con el botón de abajo.</string>
|
||||||
<string name="select_firmware">Seleccionar firmware</string>
|
|
||||||
<string name="games">Juegos</string>
|
<string name="games">Juegos</string>
|
||||||
<string name="games_description">Selecciona la carpeta <b>Juegos</b> utilizando el botón de abajo</string>
|
<string name="games_description">Selecciona la carpeta <b>Juegos</b> utilizando el botón de abajo</string>
|
||||||
<string name="done">Hecho</string>
|
<string name="done">Hecho</string>
|
||||||
<string name="done_description">Ya está todo listo.\n¡Disfrute de tus juegos!</string>
|
<string name="done_description">Ya está todo listo.\n¡Disfrute de tus juegos!</string>
|
||||||
<string name="text_continue">Continuar</string>
|
|
||||||
<string name="next">Siguiente</string>
|
<string name="next">Siguiente</string>
|
||||||
<string name="back">Atrás</string>
|
<string name="back">Atrás</string>
|
||||||
<string name="add_games">Añadir Juegos</string>
|
<string name="add_games">Añadir Juegos</string>
|
||||||
@@ -286,9 +280,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Notificaciones</string>
|
<string name="notifications">Notificaciones</string>
|
||||||
<string name="notifications_description">Otorga el permiso de notificación con el botón de abajo.</string>
|
<string name="notifications_description">Otorga el permiso de notificación con el botón de abajo.</string>
|
||||||
<string name="give_permission">Conceder permiso</string>
|
|
||||||
<string name="notification_warning">¿Omitir conceder el permiso de notificación?</string>
|
|
||||||
<string name="notification_warning_description">Eden no podrá notificarte información importante.</string>
|
|
||||||
<string name="permission_denied">Permiso denegado</string>
|
<string name="permission_denied">Permiso denegado</string>
|
||||||
<string name="permission_denied_description">Se ha denegado este permiso demasiadas veces y ahora debes otorgarlo de forma manual en la configuración del sistema.</string>
|
<string name="permission_denied_description">Se ha denegado este permiso demasiadas veces y ahora debes otorgarlo de forma manual en la configuración del sistema.</string>
|
||||||
<string name="about">Acerca de</string>
|
<string name="about">Acerca de</string>
|
||||||
@@ -453,8 +444,6 @@
|
|||||||
<string name="display">Pantalla</string>
|
<string name="display">Pantalla</string>
|
||||||
<string name="processing">Postprocesado</string>
|
<string name="processing">Postprocesado</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Salto de fotogramas</string>
|
|
||||||
<string name="frame_skipping_description">Activa o desactiva el salto de fotogramas para mejorar el rendimiento reduciendo el número de fotogramas renderizados. Esta función está en desarrollo y se habilitará en futuras versiones.</string>
|
|
||||||
<string name="renderer_accuracy">Nivel de precisión</string>
|
<string name="renderer_accuracy">Nivel de precisión</string>
|
||||||
<string name="renderer_resolution">Resolución (Portátil/Sobremesa)</string>
|
<string name="renderer_resolution">Resolución (Portátil/Sobremesa)</string>
|
||||||
<string name="renderer_vsync">Modo VSync</string>
|
<string name="renderer_vsync">Modo VSync</string>
|
||||||
@@ -975,10 +964,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">x2</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">x4</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">x8</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">x16</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Fondos oscuros</string>
|
<string name="use_black_backgrounds">Fondos oscuros</string>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
<string name="notification_permission_not_granted">مجوز اعلان داده نشده!</string>
|
<string name="notification_permission_not_granted">مجوز اعلان داده نشده!</string>
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(بهبودیافته)</string>
|
|
||||||
<string name="process_ram">حافظه فرآیند: %1$d مگابایت</string>
|
<string name="process_ram">حافظه فرآیند: %1$d مگابایت</string>
|
||||||
<string name="shaders_prefix">در حال ساخت</string>
|
<string name="shaders_prefix">در حال ساخت</string>
|
||||||
<string name="shaders_suffix">شیدر(ها)</string>
|
<string name="shaders_suffix">شیدر(ها)</string>
|
||||||
@@ -66,10 +65,6 @@
|
|||||||
<string name="veil_misc">پردازنده و حافظه</string>
|
<string name="veil_misc">پردازنده و حافظه</string>
|
||||||
<string name="eden_veil">پرده عدن</string>
|
<string name="eden_veil">پرده عدن</string>
|
||||||
<string name="eden_veil_description">تنظیمات آزمایشی برای بهبود عملکرد و قابلیت. این تنظیمات ممکن است باعث نمایش صفحه سیاه یا سایر مشکلات بازی شود.</string>
|
<string name="eden_veil_description">تنظیمات آزمایشی برای بهبود عملکرد و قابلیت. این تنظیمات ممکن است باعث نمایش صفحه سیاه یا سایر مشکلات بازی شود.</string>
|
||||||
<string name="frame_skipping">در حال توسعه: رد کردن فریمها</string>
|
|
||||||
<string name="frame_skipping_description">با فعال کردن رد کردن فریمها، عملکرد را با کاهش تعداد فریمهای رندر شده بهبود دهید. این قابلیت در حال توسعه است و در نسخههای آینده فعال خواهد شد.</string>
|
|
||||||
<string name="frame_interpolation">زمانبندی پیشرفته فریمها</string>
|
|
||||||
<string name="frame_interpolation_description">ارسال یکنواخت و پایدار فریمها را با همگامسازی زمان بین آنها تضمین میکند، که منجر به کاهش لرزش و انیمیشنهای ناهموار میشود. برای بازیهایی که ناپایداری در زمانبندی فریمها یا میکرو لرزش در حین بازی دارند ایدهآل است</string>
|
|
||||||
<string name="renderer_early_release_fences">رهاسازی حصارها زودتر</string>
|
<string name="renderer_early_release_fences">رهاسازی حصارها زودتر</string>
|
||||||
<string name="renderer_early_release_fences_description">به رفع مشکل 0 فریم بر ثانیه در بازیهایی مانند DKCR:HD، Subnautica Below Zero و Ori 2 کمک میکند، اما ممکن است بارگذاری یا عملکرد بازیهای Unreal Engine را مختل کند.</string>
|
<string name="renderer_early_release_fences_description">به رفع مشکل 0 فریم بر ثانیه در بازیهایی مانند DKCR:HD، Subnautica Below Zero و Ori 2 کمک میکند، اما ممکن است بارگذاری یا عملکرد بازیهای Unreal Engine را مختل کند.</string>
|
||||||
<string name="sync_memory_operations">همگامسازی عملیات حافظه</string>
|
<string name="sync_memory_operations">همگامسازی عملیات حافظه</string>
|
||||||
@@ -275,15 +270,12 @@
|
|||||||
<string name="get_started">شروع کنید</string>
|
<string name="get_started">شروع کنید</string>
|
||||||
<string name="keys">کلیدها</string>
|
<string name="keys">کلیدها</string>
|
||||||
<string name="keys_description">فایل <b>prod.keys</b> خود را با دکمه زیر انتخاب کنید.</string>
|
<string name="keys_description">فایل <b>prod.keys</b> خود را با دکمه زیر انتخاب کنید.</string>
|
||||||
<string name="select_keys">انتخاب کلیدها</string>
|
|
||||||
<string name="firmware">فریمور</string>
|
<string name="firmware">فریمور</string>
|
||||||
<string name="firmware_description">فایل <b>firmware.zip</b> خود را با دکمه زیر انتخاب کنید.\nاکنون ایدن به نسخه <b>19.0.1</b> یا پایینتر نیاز دارد.</string>
|
<string name="firmware_description">فایل <b>firmware.zip</b> خود را با دکمه زیر انتخاب کنید.\nاکنون ایدن به نسخه <b>19.0.1</b> یا پایینتر نیاز دارد.</string>
|
||||||
<string name="select_firmware">انتخاب فریمور</string>
|
|
||||||
<string name="games">بازیها</string>
|
<string name="games">بازیها</string>
|
||||||
<string name="games_description">پوشه <b>بازیها</b> خود را با دکمه زیر انتخاب کنید.</string>
|
<string name="games_description">پوشه <b>بازیها</b> خود را با دکمه زیر انتخاب کنید.</string>
|
||||||
<string name="done">انجام شد</string>
|
<string name="done">انجام شد</string>
|
||||||
<string name="done_description">همه چیز آماده است.\nاز بازیهای خود لذت ببرید!</string>
|
<string name="done_description">همه چیز آماده است.\nاز بازیهای خود لذت ببرید!</string>
|
||||||
<string name="text_continue">ادامه</string>
|
|
||||||
<string name="next">بعدی</string>
|
<string name="next">بعدی</string>
|
||||||
<string name="back">قبلی</string>
|
<string name="back">قبلی</string>
|
||||||
<string name="add_games">افزودن بازیها</string>
|
<string name="add_games">افزودن بازیها</string>
|
||||||
@@ -314,9 +306,6 @@
|
|||||||
<string name="install_firmware_warning_description">بسیاری از بازیها برای اجرای صحیح به دسترسی به فریمور نیاز دارند.</string>
|
<string name="install_firmware_warning_description">بسیاری از بازیها برای اجرای صحیح به دسترسی به فریمور نیاز دارند.</string>
|
||||||
<string name="notifications">اعلانها</string>
|
<string name="notifications">اعلانها</string>
|
||||||
<string name="notifications_description">مجوز اعلان را با دکمه زیر اعطا کنید.</string>
|
<string name="notifications_description">مجوز اعلان را با دکمه زیر اعطا کنید.</string>
|
||||||
<string name="give_permission">اجازه بدهید</string>
|
|
||||||
<string name="notification_warning">دادن مجوز اعلان را رد میکنید؟</string>
|
|
||||||
<string name="notification_warning_description">Eden نمیتواند شما را از اطلاعات مهم مطلع کند.</string>
|
|
||||||
<string name="permission_denied">دسترسی داده نشد</string>
|
<string name="permission_denied">دسترسی داده نشد</string>
|
||||||
<string name="permission_denied_description">شما بارها این دسترسی را رد کردید و اکنون باید آن را به صورت دستی در تنظیمات سیستم اعطا کنید.</string>
|
<string name="permission_denied_description">شما بارها این دسترسی را رد کردید و اکنون باید آن را به صورت دستی در تنظیمات سیستم اعطا کنید.</string>
|
||||||
<string name="about">درباره</string>
|
<string name="about">درباره</string>
|
||||||
@@ -861,10 +850,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">پسزمینه مشکی</string>
|
<string name="use_black_backgrounds">پسزمینه مشکی</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Amélioré)</string>
|
|
||||||
<string name="process_ram">RAM processus: %1$d Mo</string>
|
<string name="process_ram">RAM processus: %1$d Mo</string>
|
||||||
<string name="shaders_prefix">Compilation</string>
|
<string name="shaders_prefix">Compilation</string>
|
||||||
<string name="shaders_suffix">Shader(s)</string>
|
<string name="shaders_suffix">Shader(s)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">L\'intensité de la passe d\'ombrage d\'échantillon. Des valeurs plus élevées améliorent davantage la qualité mais réduisent aussi plus fortement les performances.</string>
|
<string name="sample_shading_fraction_description">L\'intensité de la passe d\'ombrage d\'échantillon. Des valeurs plus élevées améliorent davantage la qualité mais réduisent aussi plus fortement les performances.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Rendu</string>
|
<string name="veil_renderer">Rendu</string>
|
||||||
<string name="frame_interpolation">Synchronisation avancée des frames</string>
|
|
||||||
<string name="frame_interpolation_description">Assure une diffusion fluide et régulière des frames en synchronisant leur timing, réduisant ainsi les saccades et les animations irrégulières. Idéal pour les jeux souffrant d`instabilité de timing des frames ou de micro-saccades pendant le jeu.</string>
|
|
||||||
<string name="renderer_early_release_fences">Libérer les barrières plus tôt</string>
|
<string name="renderer_early_release_fences">Libérer les barrières plus tôt</string>
|
||||||
<string name="renderer_early_release_fences_description">Résout les problèmes de 0 FPS dans des jeux comme DKCR:HD, Subnautica Below Zero et Ori 2, mais peut perturber le chargement ou les performances des jeux Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Résout les problèmes de 0 FPS dans des jeux comme DKCR:HD, Subnautica Below Zero et Ori 2, mais peut perturber le chargement ou les performances des jeux Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Synchroniser les opérations mémoire</string>
|
<string name="sync_memory_operations">Synchroniser les opérations mémoire</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">Commencer</string>
|
<string name="get_started">Commencer</string>
|
||||||
<string name="keys">Clés</string>
|
<string name="keys">Clés</string>
|
||||||
<string name="keys_description">Sélectionnez votre fichier <b>prod.keys</b> avec le bouton ci-dessous.</string>
|
<string name="keys_description">Sélectionnez votre fichier <b>prod.keys</b> avec le bouton ci-dessous.</string>
|
||||||
<string name="select_keys">Sélectionner les clés</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="firmware_description">Sélectionnez votre fichier <b>firmware.zip</b> avec le bouton ci‑dessous.</string>
|
<string name="firmware_description">Sélectionnez votre fichier <b>firmware.zip</b> avec le bouton ci‑dessous.</string>
|
||||||
<string name="select_firmware">Sélectionner le firmware</string>
|
|
||||||
<string name="games">Jeux</string>
|
<string name="games">Jeux</string>
|
||||||
<string name="games_description">Sélectionnez votre dossier <b>de Jeux</b> avec le bouton ci-dessous.</string>
|
<string name="games_description">Sélectionnez votre dossier <b>de Jeux</b> avec le bouton ci-dessous.</string>
|
||||||
<string name="done">Terminé</string>
|
<string name="done">Terminé</string>
|
||||||
<string name="done_description">Vous êtes prêt.\nProfitez de vos jeux !</string>
|
<string name="done_description">Vous êtes prêt.\nProfitez de vos jeux !</string>
|
||||||
<string name="text_continue">Continuer</string>
|
|
||||||
<string name="next">Suivant</string>
|
<string name="next">Suivant</string>
|
||||||
<string name="back">Retour</string>
|
<string name="back">Retour</string>
|
||||||
<string name="add_games">Ajouter des jeux</string>
|
<string name="add_games">Ajouter des jeux</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Notifications</string>
|
<string name="notifications">Notifications</string>
|
||||||
<string name="notifications_description">Accorder la permission de notification avec le bouton ci-dessous.</string>
|
<string name="notifications_description">Accorder la permission de notification avec le bouton ci-dessous.</string>
|
||||||
<string name="give_permission">Accorder la permission</string>
|
|
||||||
<string name="notification_warning">Ne pas accorder la permission de notification ?</string>
|
|
||||||
<string name="notification_warning_description">Eden ne pourra pas vous communiquer d\'informations importantes.</string>
|
|
||||||
<string name="permission_denied">Permission refusée</string>
|
<string name="permission_denied">Permission refusée</string>
|
||||||
<string name="permission_denied_description">Vous avez refusé cette permission trop de fois et vous devez maintenant l\'accorder manuellement dans les paramètres système.</string>
|
<string name="permission_denied_description">Vous avez refusé cette permission trop de fois et vous devez maintenant l\'accorder manuellement dans les paramètres système.</string>
|
||||||
<string name="about">À propos</string>
|
<string name="about">À propos</string>
|
||||||
@@ -454,8 +445,6 @@
|
|||||||
<string name="display">Affichage</string>
|
<string name="display">Affichage</string>
|
||||||
<string name="processing">Post-traitement</string>
|
<string name="processing">Post-traitement</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Saut de frames</string>
|
|
||||||
<string name="frame_skipping_description">Activez ou désactivez le saut d\'images pour améliorer les performances en réduisant le nombre d\'images affichées. Cette fonctionnalité est en cours de développement et sera activée dans les futures versions.</string>
|
|
||||||
<string name="renderer_accuracy">Niveau de précision</string>
|
<string name="renderer_accuracy">Niveau de précision</string>
|
||||||
<string name="renderer_resolution">Résolution (Mode Portable/Mode TV)</string>
|
<string name="renderer_resolution">Résolution (Mode Portable/Mode TV)</string>
|
||||||
<string name="renderer_vsync">Mode VSync</string>
|
<string name="renderer_vsync">Mode VSync</string>
|
||||||
@@ -988,10 +977,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Arrière-plan noir</string>
|
<string name="use_black_backgrounds">Arrière-plan noir</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">מציג התראות כאשר משהו הולך לא כשורה.</string>
|
<string name="notice_notification_channel_description">מציג התראות כאשר משהו הולך לא כשורה.</string>
|
||||||
<string name="notification_permission_not_granted">הרשאות התראות לא ניתנה!</string>
|
<string name="notification_permission_not_granted">הרשאות התראות לא ניתנה!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(משופר)</string>
|
|
||||||
<string name="process_ram">זיכרון תהליך: %1$d MB</string>
|
<string name="process_ram">זיכרון תהליך: %1$d MB</string>
|
||||||
<string name="shaders_prefix">בונה</string>
|
<string name="shaders_prefix">בונה</string>
|
||||||
<string name="shaders_suffix">שיידר(ים)</string>
|
<string name="shaders_suffix">שיידר(ים)</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">עוצמת מעבר ההצללה לדוגמה. ערכים גבוהים יותר משפרים את האיכות יותר אך גם מפחיתים את הביצועים במידה רבה יותר.</string>
|
<string name="sample_shading_fraction_description">עוצמת מעבר ההצללה לדוגמה. ערכים גבוהים יותר משפרים את האיכות יותר אך גם מפחיתים את הביצועים במידה רבה יותר.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">רנדרר</string>
|
<string name="veil_renderer">רנדרר</string>
|
||||||
<string name="frame_interpolation">סנכרון פריימים מתקדם</string>
|
|
||||||
<string name="frame_interpolation_description">מבטיח אספקה חלקה ועקבית של פריימים על ידי סנכרון התזמון ביניהם, מפחית קפיצות ואנימציה לא אחידה. אידיאלי למשחקים עם בעיות בתזמון פריימים או מיקרו-קפיצות במהלך המשחק.</string>
|
|
||||||
<string name="renderer_early_release_fences">שחרר גדרות מוקדם</string>
|
<string name="renderer_early_release_fences">שחרר גדרות מוקדם</string>
|
||||||
<string name="renderer_early_release_fences_description">עוזר לתקן 0 FPS במשחקים כמו DKCR:HD, Subnautica Below Zero ו-Ori 2, אך עלול לפגוע בטעינה או בביצועים במשחקי Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">עוזר לתקן 0 FPS במשחקים כמו DKCR:HD, Subnautica Below Zero ו-Ori 2, אך עלול לפגוע בטעינה או בביצועים במשחקי Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">סנכרון פעולות זיכרון</string>
|
<string name="sync_memory_operations">סנכרון פעולות זיכרון</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">כדי להתחיל</string>
|
<string name="get_started">כדי להתחיל</string>
|
||||||
<string name="keys">מפתחות</string>
|
<string name="keys">מפתחות</string>
|
||||||
<string name="keys_description">בחר את קובץ ה <b>prod.keys</b> שלך עם הכפתור למטה.</string>
|
<string name="keys_description">בחר את קובץ ה <b>prod.keys</b> שלך עם הכפתור למטה.</string>
|
||||||
<string name="select_keys">בחר מפתחות</string>
|
|
||||||
<string name="firmware">קושחה</string>
|
<string name="firmware">קושחה</string>
|
||||||
<string name="select_firmware">בחירת קושחה</string>
|
|
||||||
<string name="games">משחקים</string>
|
<string name="games">משחקים</string>
|
||||||
<string name="games_description">בחר את התיקיית ה <b>Games</b> שלך עם הכפתור למטה.</string>
|
<string name="games_description">בחר את התיקיית ה <b>Games</b> שלך עם הכפתור למטה.</string>
|
||||||
<string name="done">סיום</string>
|
<string name="done">סיום</string>
|
||||||
<string name="text_continue">המשך</string>
|
|
||||||
<string name="next">הבא</string>
|
<string name="next">הבא</string>
|
||||||
<string name="back">אחורה</string>
|
<string name="back">אחורה</string>
|
||||||
<string name="add_games">הוסף משחקים</string>
|
<string name="add_games">הוסף משחקים</string>
|
||||||
@@ -253,9 +247,6 @@
|
|||||||
<string name="install_firmware_warning_description">משחקים רבים דורשים גישה לקושחה כדי לפעול כראוי.</string>
|
<string name="install_firmware_warning_description">משחקים רבים דורשים גישה לקושחה כדי לפעול כראוי.</string>
|
||||||
<string name="notifications">התראות</string>
|
<string name="notifications">התראות</string>
|
||||||
<string name="notifications_description">תן גישה להתראות עם הכפתור למטה.</string>
|
<string name="notifications_description">תן גישה להתראות עם הכפתור למטה.</string>
|
||||||
<string name="give_permission">תן הרשאה</string>
|
|
||||||
<string name="notification_warning">דלג על מתן הרשאה להתראות?</string>
|
|
||||||
<string name="notification_warning_description">Eden לא יוכל להתריע לך על מידע חשוב.</string>
|
|
||||||
<string name="permission_denied">הרשאה נדחתה</string>
|
<string name="permission_denied">הרשאה נדחתה</string>
|
||||||
<string name="permission_denied_description">את/ה דיחת את ההרשאה יותר מדי פעמים ועכשיו את/ה צריך/ה לתת גישה באופן ידני בהגדרות.</string>
|
<string name="permission_denied_description">את/ה דיחת את ההרשאה יותר מדי פעמים ועכשיו את/ה צריך/ה לתת גישה באופן ידני בהגדרות.</string>
|
||||||
<string name="about">אודות</string>
|
<string name="about">אודות</string>
|
||||||
@@ -413,8 +404,6 @@
|
|||||||
<string name="display">תצוגה</string>
|
<string name="display">תצוגה</string>
|
||||||
<string name="processing">עיבוד לאחר</string>
|
<string name="processing">עיבוד לאחר</string>
|
||||||
|
|
||||||
<string name="frame_skipping">בעבודה: דילוג פריימים</string>
|
|
||||||
<string name="frame_skipping_description">החלף דילוג על פריימים כדי לשפר ביצועים על ידי הפחתת מספר הפריימים המוצגים. תכונה זו עדיין בפיתוח ותופעל בגרסאות עתידיות.</string>
|
|
||||||
<string name="renderer_accuracy">רמת דיוק</string>
|
<string name="renderer_accuracy">רמת דיוק</string>
|
||||||
<string name="renderer_resolution">רזולוציה (מעוגן/נייד)</string>
|
<string name="renderer_resolution">רזולוציה (מעוגן/נייד)</string>
|
||||||
<string name="renderer_vsync">מצב VSync</string>
|
<string name="renderer_vsync">מצב VSync</string>
|
||||||
@@ -776,10 +765,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">רקעים שחורים</string>
|
<string name="use_black_backgrounds">רקעים שחורים</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Értesítések megjelenítése, ha valami rosszul sül el.</string>
|
<string name="notice_notification_channel_description">Értesítések megjelenítése, ha valami rosszul sül el.</string>
|
||||||
<string name="notification_permission_not_granted">Nincs engedély az értesítés megjelenítéséhez!</string>
|
<string name="notification_permission_not_granted">Nincs engedély az értesítés megjelenítéséhez!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Továbbfejlesztett)</string>
|
|
||||||
<string name="process_ram">Processz RAM: %1$d MB</string>
|
<string name="process_ram">Processz RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Shader(ek)</string>
|
<string name="shaders_prefix">Shader(ek)</string>
|
||||||
<string name="shaders_suffix">fordítása</string>
|
<string name="shaders_suffix">fordítása</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">A mintavételezés árnyékolási lépés intenzitása. A magasabb értékek jobb minőséget eredményeznek, de nagyobb mértékben csökkentik a teljesítményt.</string>
|
<string name="sample_shading_fraction_description">A mintavételezés árnyékolási lépés intenzitása. A magasabb értékek jobb minőséget eredményeznek, de nagyobb mértékben csökkentik a teljesítményt.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Megjelenítő</string>
|
<string name="veil_renderer">Megjelenítő</string>
|
||||||
<string name="frame_interpolation">Továbbfejlesztett Képkocka-időzítés</string>
|
|
||||||
<string name="frame_interpolation_description">Biztosítja a képkockák sima és egyenletes kézbesítését azok időzítésének szinkronizálásával, csökkentve a megakadásokat és egyenetlen animációkat. Ideális azokhoz a játékokhoz, amelyek képkocka-időzítési instabilitást vagy mikro-reccsenést tapasztalnak játék közben.</string>
|
|
||||||
<string name="renderer_early_release_fences">Korai kerítés-felszabadítás</string>
|
<string name="renderer_early_release_fences">Korai kerítés-felszabadítás</string>
|
||||||
<string name="renderer_early_release_fences_description">Segít javítani a 0 FPS-t olyan játékokban, mint a DKCR:HD, Subnautica Below Zero és az Ori 2, de ronthatja az Unreal Engine játékok betöltését vagy teljesítményét.</string>
|
<string name="renderer_early_release_fences_description">Segít javítani a 0 FPS-t olyan játékokban, mint a DKCR:HD, Subnautica Below Zero és az Ori 2, de ronthatja az Unreal Engine játékok betöltését vagy teljesítményét.</string>
|
||||||
<string name="sync_memory_operations">Memória-műveletek szinkronizálása</string>
|
<string name="sync_memory_operations">Memória-műveletek szinkronizálása</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">Vágjunk bele</string>
|
<string name="get_started">Vágjunk bele</string>
|
||||||
<string name="keys">Kulcsok</string>
|
<string name="keys">Kulcsok</string>
|
||||||
<string name="keys_description">Válaszd ki a <b>prod.keys</b> fájlodat az alábbi gombbal.</string>
|
<string name="keys_description">Válaszd ki a <b>prod.keys</b> fájlodat az alábbi gombbal.</string>
|
||||||
<string name="select_keys">Kulcsok kiválasztása</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Firmware kiválasztása</string>
|
|
||||||
<string name="games">Játékok</string>
|
<string name="games">Játékok</string>
|
||||||
<string name="games_description">Válaszd ki a <b>Játékok</b> mappát az alábbi gombbal.</string>
|
<string name="games_description">Válaszd ki a <b>Játékok</b> mappát az alábbi gombbal.</string>
|
||||||
<string name="done">Kész</string>
|
<string name="done">Kész</string>
|
||||||
<string name="text_continue">Folytatás</string>
|
|
||||||
<string name="next">Következő</string>
|
<string name="next">Következő</string>
|
||||||
<string name="back">Vissza</string>
|
<string name="back">Vissza</string>
|
||||||
<string name="add_games">Játékok hozzáadása</string>
|
<string name="add_games">Játékok hozzáadása</string>
|
||||||
@@ -252,9 +246,6 @@
|
|||||||
<string name="install_firmware_warning_description">Sok játék megfelelő működéséhez firmware szükséges.</string>
|
<string name="install_firmware_warning_description">Sok játék megfelelő működéséhez firmware szükséges.</string>
|
||||||
<string name="notifications">Értesítések</string>
|
<string name="notifications">Értesítések</string>
|
||||||
<string name="notifications_description">Értesítési engedélyek megadása az alábbi gombbal.</string>
|
<string name="notifications_description">Értesítési engedélyek megadása az alábbi gombbal.</string>
|
||||||
<string name="give_permission">Engedély megadása</string>
|
|
||||||
<string name="notification_warning">Kihagyod az értesítési engedély megadását?</string>
|
|
||||||
<string name="notification_warning_description">Eden nem fog tudni értesíteni a fontos információkról</string>
|
|
||||||
<string name="permission_denied">Engedély megtagadva</string>
|
<string name="permission_denied">Engedély megtagadva</string>
|
||||||
<string name="permission_denied_description">Túl gyakran utasítottad el a hozzáférést, így manuálisan kell jóváhagynod a rendszer beállításokban.</string>
|
<string name="permission_denied_description">Túl gyakran utasítottad el a hozzáférést, így manuálisan kell jóváhagynod a rendszer beállításokban.</string>
|
||||||
<string name="about">Névjegy</string>
|
<string name="about">Névjegy</string>
|
||||||
@@ -408,8 +399,6 @@
|
|||||||
<string name="display">Kijelző</string>
|
<string name="display">Kijelző</string>
|
||||||
<string name="processing">Utófeldolgozás</string>
|
<string name="processing">Utófeldolgozás</string>
|
||||||
|
|
||||||
<string name="frame_skipping">Folyamatban: Képkihagyás</string>
|
|
||||||
<string name="frame_skipping_description">Kapcsolja be a képkihagyást a teljesítmény javításához a renderelt képkockák számának csökkentésével. Ez a funkció még fejlesztés alatt áll, és a jövőbeli kiadásokban lesz elérhető.</string>
|
|
||||||
<string name="renderer_accuracy">Pontosság szintje</string>
|
<string name="renderer_accuracy">Pontosság szintje</string>
|
||||||
<string name="renderer_resolution">Felbontás (Kézi/Dockolt)</string>
|
<string name="renderer_resolution">Felbontás (Kézi/Dockolt)</string>
|
||||||
<string name="renderer_vsync">VSync mód</string>
|
<string name="renderer_vsync">VSync mód</string>
|
||||||
@@ -875,10 +864,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Fekete háttér</string>
|
<string name="use_black_backgrounds">Fekete háttér</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Ditingkatkan)</string>
|
|
||||||
<string name="process_ram">RAM Proses: %1$d MB</string>
|
<string name="process_ram">RAM Proses: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Membangun</string>
|
<string name="shaders_prefix">Membangun</string>
|
||||||
<string name="shaders_suffix">Shader</string>
|
<string name="shaders_suffix">Shader</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Intensitas proses pencahayaan sampel. Nilai lebih tinggi meningkatkan kualitas lebih baik tetapi juga mengurangi performa lebih besar.</string>
|
<string name="sample_shading_fraction_description">Intensitas proses pencahayaan sampel. Nilai lebih tinggi meningkatkan kualitas lebih baik tetapi juga mengurangi performa lebih besar.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Penyelarasan Frame Tingkat Lanjut</string>
|
|
||||||
<string name="frame_interpolation_description">Memastikan pengiriman frame yang halus dan konsisten dengan menyinkronkan waktu antar frame, mengurangi stuttering dan animasi tidak rata. Ideal untuk game yang mengalami ketidakstabilan waktu frame atau micro-stutter selama gameplay.</string>
|
|
||||||
<string name="renderer_early_release_fences">Lepas Pagar Lebih Awal</string>
|
<string name="renderer_early_release_fences">Lepas Pagar Lebih Awal</string>
|
||||||
<string name="renderer_early_release_fences_description">Membantu memperbaiki 0 FPS di game seperti DKCR:HD, Subnautica Below Zero dan Ori 2, tapi mungkin mengganggu loading atau performa di game Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Membantu memperbaiki 0 FPS di game seperti DKCR:HD, Subnautica Below Zero dan Ori 2, tapi mungkin mengganggu loading atau performa di game Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Sinkronisasi Operasi Memori</string>
|
<string name="sync_memory_operations">Sinkronisasi Operasi Memori</string>
|
||||||
@@ -238,14 +235,11 @@
|
|||||||
<string name="get_started">Memulai</string>
|
<string name="get_started">Memulai</string>
|
||||||
<string name="keys">Kunci</string>
|
<string name="keys">Kunci</string>
|
||||||
<string name="keys_description">Pilih file <b>prod.keys</b> Anda dengan tombol di bawah ini.</string>
|
<string name="keys_description">Pilih file <b>prod.keys</b> Anda dengan tombol di bawah ini.</string>
|
||||||
<string name="select_keys">Pilih Kunci</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Pilih Firmware</string>
|
|
||||||
<string name="games">Permainan</string>
|
<string name="games">Permainan</string>
|
||||||
<string name="games_description">Pilih folder <b>Games</b> Anda dengan tombol di bawah ini.</string>
|
<string name="games_description">Pilih folder <b>Games</b> Anda dengan tombol di bawah ini.</string>
|
||||||
<string name="done">Selesai</string>
|
<string name="done">Selesai</string>
|
||||||
<string name="done_description">Semuanya telah siap.\nNikmati permainanmu!</string>
|
<string name="done_description">Semuanya telah siap.\nNikmati permainanmu!</string>
|
||||||
<string name="text_continue">Lanjut</string>
|
|
||||||
<string name="next">Berikutnya</string>
|
<string name="next">Berikutnya</string>
|
||||||
<string name="back">Kembali</string>
|
<string name="back">Kembali</string>
|
||||||
<string name="add_games">Tambahkan permainan</string>
|
<string name="add_games">Tambahkan permainan</string>
|
||||||
@@ -282,9 +276,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Notifikasi</string>
|
<string name="notifications">Notifikasi</string>
|
||||||
<string name="notifications_description">Berikan izin notifikasi dengan tombol di bawah ini.</string>
|
<string name="notifications_description">Berikan izin notifikasi dengan tombol di bawah ini.</string>
|
||||||
<string name="give_permission">Berikan izin</string>
|
|
||||||
<string name="notification_warning">Lewati pemberian izin notifikasi?</string>
|
|
||||||
<string name="notification_warning_description">Eden tidak akan dapat memberi tahu Anda tentang informasi penting.</string>
|
|
||||||
<string name="permission_denied">Izin ditolak</string>
|
<string name="permission_denied">Izin ditolak</string>
|
||||||
<string name="permission_denied_description">Kamu terlalu sering menolak izin ini dan sekarang anda harus memberikannya secara manual di pengaturan sistem.</string>
|
<string name="permission_denied_description">Kamu terlalu sering menolak izin ini dan sekarang anda harus memberikannya secara manual di pengaturan sistem.</string>
|
||||||
<string name="about">Tentang</string>
|
<string name="about">Tentang</string>
|
||||||
@@ -444,8 +435,6 @@
|
|||||||
<string name="display">Tampilan</string>
|
<string name="display">Tampilan</string>
|
||||||
<string name="processing">Pascaproses</string>
|
<string name="processing">Pascaproses</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Loncatan Frame</string>
|
|
||||||
<string name="frame_skipping_description">Aktifkan atau nonaktifkan frame skipping untuk meningkatkan performa dengan mengurangi jumlah frame yang dirender. Fitur ini masih dalam pengembangan dan akan diaktifkan di rilis mendatang.</string>
|
|
||||||
<string name="renderer_accuracy">Tingkatan Akurasi</string>
|
<string name="renderer_accuracy">Tingkatan Akurasi</string>
|
||||||
<string name="renderer_resolution">Resolusi (Handheld/Docked)</string>
|
<string name="renderer_resolution">Resolusi (Handheld/Docked)</string>
|
||||||
<string name="renderer_vsync">Mode Sinkronisasi Vertikal</string>
|
<string name="renderer_vsync">Mode Sinkronisasi Vertikal</string>
|
||||||
@@ -929,10 +918,13 @@
|
|||||||
<string name="cubeb">Cubeb</string>
|
<string name="cubeb">Cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Gunakan Latar Belakang Hitam</string>
|
<string name="use_black_backgrounds">Gunakan Latar Belakang Hitam</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Migliorato)</string>
|
|
||||||
<string name="process_ram">RAM processo: %1$d MB</string>
|
<string name="process_ram">RAM processo: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Compilazione</string>
|
<string name="shaders_prefix">Compilazione</string>
|
||||||
<string name="shaders_suffix">shader</string>
|
<string name="shaders_suffix">shader</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">L\'intensità della passata di ombreggiatura campione. Valori più alti migliorano la qualità ma riducono maggiormente le prestazioni.</string>
|
<string name="sample_shading_fraction_description">L\'intensità della passata di ombreggiatura campione. Valori più alti migliorano la qualità ma riducono maggiormente le prestazioni.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Sincronizzazione avanzata fotogrammi</string>
|
|
||||||
<string name="frame_interpolation_description">Garantisce una consegna fluida e costante dei fotogrammi sincronizzandone i tempi, riducendo scatti e animazioni irregolari. Ideale per giochi che presentano instabilità nei tempi dei fotogrammi o micro-scatti durante il gameplay.</string>
|
|
||||||
<string name="renderer_early_release_fences">Rilascia le barriere prima</string>
|
<string name="renderer_early_release_fences">Rilascia le barriere prima</string>
|
||||||
<string name="renderer_early_release_fences_description">Risolve problemi di 0 FPS in giochi come DKCR:HD, Subnautica Below Zero e Ori 2, ma potrebbe compromettere caricamento o prestazioni in giochi Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Risolve problemi di 0 FPS in giochi come DKCR:HD, Subnautica Below Zero e Ori 2, ma potrebbe compromettere caricamento o prestazioni in giochi Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Sincronizza operazioni di memoria</string>
|
<string name="sync_memory_operations">Sincronizza operazioni di memoria</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">Iniziare</string>
|
<string name="get_started">Iniziare</string>
|
||||||
<string name="keys">Chiavi</string>
|
<string name="keys">Chiavi</string>
|
||||||
<string name="keys_description">Seleziona il tuo file <b>prod.keys</b> con il pulsante in basso.</string>
|
<string name="keys_description">Seleziona il tuo file <b>prod.keys</b> con il pulsante in basso.</string>
|
||||||
<string name="select_keys">Seleziona le chiavi</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="firmware_description">Seleziona il tuo file <b>firmware.zip</b>con il pulsante in basso.</string>
|
<string name="firmware_description">Seleziona il tuo file <b>firmware.zip</b>con il pulsante in basso.</string>
|
||||||
<string name="select_firmware">Seleziona Firmware</string>
|
|
||||||
<string name="games">Giochi</string>
|
<string name="games">Giochi</string>
|
||||||
<string name="games_description">Seleziona la cartella dei <b>giochi</b> con il pulsante in basso.</string>
|
<string name="games_description">Seleziona la cartella dei <b>giochi</b> con il pulsante in basso.</string>
|
||||||
<string name="done">Fatto</string>
|
<string name="done">Fatto</string>
|
||||||
<string name="done_description">È tutto pronto.\nBuon divertimento con i tuoi giochi!</string>
|
<string name="done_description">È tutto pronto.\nBuon divertimento con i tuoi giochi!</string>
|
||||||
<string name="text_continue">Continua</string>
|
|
||||||
<string name="next">Successivo</string>
|
<string name="next">Successivo</string>
|
||||||
<string name="back">Indietro</string>
|
<string name="back">Indietro</string>
|
||||||
<string name="add_games">Aggiungi giochi</string>
|
<string name="add_games">Aggiungi giochi</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Notifiche</string>
|
<string name="notifications">Notifiche</string>
|
||||||
<string name="notifications_description">Concedi l\'autorizzazione alle notifiche con il pulsante in basso.</string>
|
<string name="notifications_description">Concedi l\'autorizzazione alle notifiche con il pulsante in basso.</string>
|
||||||
<string name="give_permission">Concedere l\'autorizzazione</string>
|
|
||||||
<string name="notification_warning">Saltare la concessione dell\'autorizzazione alle notifiche?</string>
|
|
||||||
<string name="notification_warning_description">Eden non sarà in grado di notificarti informazioni importanti.</string>
|
|
||||||
<string name="permission_denied">Permesso negato</string>
|
<string name="permission_denied">Permesso negato</string>
|
||||||
<string name="permission_denied_description">Hai negato l\'autorizzazione troppe volte ed ora devi concederla manualmente nelle impostazioni di sistema.</string>
|
<string name="permission_denied_description">Hai negato l\'autorizzazione troppe volte ed ora devi concederla manualmente nelle impostazioni di sistema.</string>
|
||||||
<string name="about">Informazioni</string>
|
<string name="about">Informazioni</string>
|
||||||
@@ -454,8 +445,6 @@
|
|||||||
<string name="display">Schermo</string>
|
<string name="display">Schermo</string>
|
||||||
<string name="processing">Post-elaborazione</string>
|
<string name="processing">Post-elaborazione</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Salto fotogrammi</string>
|
|
||||||
<string name="frame_skipping_description">Attiva o disattiva il salto dei fotogrammi per migliorare le prestazioni riducendo il numero di fotogrammi renderizzati. Questa funzionalità è ancora in sviluppo e verrà abilitata nelle versioni future.</string>
|
|
||||||
<string name="renderer_accuracy">Livello di accuratezza</string>
|
<string name="renderer_accuracy">Livello di accuratezza</string>
|
||||||
<string name="renderer_resolution">Risoluzione (Portatile/Docked)</string>
|
<string name="renderer_resolution">Risoluzione (Portatile/Docked)</string>
|
||||||
<string name="renderer_vsync">Modalità VSync</string>
|
<string name="renderer_vsync">Modalità VSync</string>
|
||||||
@@ -988,10 +977,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Sfondi neri</string>
|
<string name="use_black_backgrounds">Sfondi neri</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">問題の発生時に通知を表示します。</string>
|
<string name="notice_notification_channel_description">問題の発生時に通知を表示します。</string>
|
||||||
<string name="notification_permission_not_granted">通知が許可されていません!</string>
|
<string name="notification_permission_not_granted">通知が許可されていません!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(強化)</string>
|
|
||||||
<string name="process_ram">プロセスRAM: %1$d MB</string>
|
<string name="process_ram">プロセスRAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">シェーダー</string>
|
<string name="shaders_prefix">シェーダー</string>
|
||||||
<string name="shaders_suffix">を構築中</string>
|
<string name="shaders_suffix">を構築中</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">サンプルシェーディング処理の強度。高い値ほど品質は向上しますが、パフォーマンスも大きく低下します。</string>
|
<string name="sample_shading_fraction_description">サンプルシェーディング処理の強度。高い値ほど品質は向上しますが、パフォーマンスも大きく低下します。</string>
|
||||||
|
|
||||||
<string name="veil_renderer">レンダラー</string>
|
<string name="veil_renderer">レンダラー</string>
|
||||||
<string name="frame_interpolation">高度なフレーム同期</string>
|
|
||||||
<string name="frame_interpolation_description">フレーム間のタイミングを同期させることで、スムーズで一貫したフレーム配信を確保し、カクつきや不均一なアニメーションを軽減します。フレームタイミングの不安定さやマイクロスタッターが発生するゲームに最適です。</string>
|
|
||||||
<string name="renderer_early_release_fences">フェンスを早期に解放</string>
|
<string name="renderer_early_release_fences">フェンスを早期に解放</string>
|
||||||
<string name="renderer_early_release_fences_description">DKCR:HD、Subnautica Below Zero、Ori 2などのゲームで0 FPSを修正しますが、Unreal Engineゲームの読み込みやパフォーマンスに影響する可能性があります。</string>
|
<string name="renderer_early_release_fences_description">DKCR:HD、Subnautica Below Zero、Ori 2などのゲームで0 FPSを修正しますが、Unreal Engineゲームの読み込みやパフォーマンスに影響する可能性があります。</string>
|
||||||
<string name="sync_memory_operations">メモリ操作の同期</string>
|
<string name="sync_memory_operations">メモリ操作の同期</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">はじめる</string>
|
<string name="get_started">はじめる</string>
|
||||||
<string name="keys">キー</string>
|
<string name="keys">キー</string>
|
||||||
<string name="keys_description">下のボタンから <b>prod.keys</b> ファイルを選択してください。</string>
|
<string name="keys_description">下のボタンから <b>prod.keys</b> ファイルを選択してください。</string>
|
||||||
<string name="select_keys">キーを選択</string>
|
|
||||||
<string name="firmware">ファームウェア</string>
|
<string name="firmware">ファームウェア</string>
|
||||||
<string name="select_firmware">ファームウェアを選択</string>
|
|
||||||
<string name="games">ゲーム</string>
|
<string name="games">ゲーム</string>
|
||||||
<string name="games_description">下のボタンから<b>ゲーム</b>のあるフォルダを選択してください。</string>
|
<string name="games_description">下のボタンから<b>ゲーム</b>のあるフォルダを選択してください。</string>
|
||||||
<string name="done">完了</string>
|
<string name="done">完了</string>
|
||||||
<string name="text_continue">続行</string>
|
|
||||||
<string name="next">次へ</string>
|
<string name="next">次へ</string>
|
||||||
<string name="back">戻る</string>
|
<string name="back">戻る</string>
|
||||||
<string name="add_games">ゲームを追加</string>
|
<string name="add_games">ゲームを追加</string>
|
||||||
@@ -255,9 +249,6 @@
|
|||||||
<string name="install_firmware_warning_description">多くのゲームは正常に動作するためにファームウェアへのアクセスが必要です。</string>
|
<string name="install_firmware_warning_description">多くのゲームは正常に動作するためにファームウェアへのアクセスが必要です。</string>
|
||||||
<string name="notifications">通知</string>
|
<string name="notifications">通知</string>
|
||||||
<string name="notifications_description">下のボタンで通知を許可してください。</string>
|
<string name="notifications_description">下のボタンで通知を許可してください。</string>
|
||||||
<string name="give_permission">許可</string>
|
|
||||||
<string name="notification_warning">通知の許可をスキップしますか?</string>
|
|
||||||
<string name="notification_warning_description">Edenは重要なお知らせを通知できません。</string>
|
|
||||||
<string name="permission_denied">権限が拒否されました</string>
|
<string name="permission_denied">権限が拒否されました</string>
|
||||||
<string name="permission_denied_description">この権限を複数回拒否したため、設定から手動で許可する必要があります。</string>
|
<string name="permission_denied_description">この権限を複数回拒否したため、設定から手動で許可する必要があります。</string>
|
||||||
<string name="about">情報</string>
|
<string name="about">情報</string>
|
||||||
@@ -408,8 +399,6 @@
|
|||||||
<string name="display">ディスプレイ</string>
|
<string name="display">ディスプレイ</string>
|
||||||
<string name="processing">後処理</string>
|
<string name="processing">後処理</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: フレームスキップ</string>
|
|
||||||
<string name="frame_skipping_description">フレームスキップを切り替えて、レンダリングされるフレーム数を減らしパフォーマンスを向上させます。この機能は開発中であり、今後のリリースで有効になります。</string>
|
|
||||||
<string name="renderer_accuracy">精度</string>
|
<string name="renderer_accuracy">精度</string>
|
||||||
<string name="renderer_resolution">解像度(携帯モード/TVモード)</string>
|
<string name="renderer_resolution">解像度(携帯モード/TVモード)</string>
|
||||||
<string name="renderer_vsync">垂直同期モード</string>
|
<string name="renderer_vsync">垂直同期モード</string>
|
||||||
@@ -778,10 +767,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">完全な黒を使用</string>
|
<string name="use_black_backgrounds">完全な黒を使用</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">문제가 발생하면 알림을 표시합니다.</string>
|
<string name="notice_notification_channel_description">문제가 발생하면 알림을 표시합니다.</string>
|
||||||
<string name="notification_permission_not_granted">알림 권한이 부여되지 않았습니다!</string>
|
<string name="notification_permission_not_granted">알림 권한이 부여되지 않았습니다!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(향상됨)</string>
|
|
||||||
<string name="process_ram">프로세스 RAM: %1$d MB</string>
|
<string name="process_ram">프로세스 RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">셰이더</string>
|
<string name="shaders_prefix">셰이더</string>
|
||||||
<string name="shaders_suffix">빌드 중</string>
|
<string name="shaders_suffix">빌드 중</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">샘플 쉐이딩 패스의 강도. 값이 높을수록 품질이 더 향상되지만 성능도 더 크게 저하됩니다.</string>
|
<string name="sample_shading_fraction_description">샘플 쉐이딩 패스의 강도. 값이 높을수록 품질이 더 향상되지만 성능도 더 크게 저하됩니다.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">렌더러</string>
|
<string name="veil_renderer">렌더러</string>
|
||||||
<string name="frame_interpolation">향상된 프레임 페이싱</string>
|
|
||||||
<string name="frame_interpolation_description">프레임 간 타이밍을 동기화하여 부드럽고 일관된 프레임 전달을 보장하며, 끊김과 불균일한 애니메이션을 줄입니다. 프레임 타이밍 불안정이나 게임 플레이 중 미세 끊김이 발생하는 게임에 이상적입니다.</string>
|
|
||||||
<string name="renderer_early_release_fences">펜스 조기 해제</string>
|
<string name="renderer_early_release_fences">펜스 조기 해제</string>
|
||||||
<string name="renderer_early_release_fences_description">DKCR:HD, Subnautica Below Zero, Ori 2 등의 게임에서 0 FPS 현상을 해결하지만, Unreal Engine 게임의 로딩이나 성능에 문제를 일으킬 수 있습니다.</string>
|
<string name="renderer_early_release_fences_description">DKCR:HD, Subnautica Below Zero, Ori 2 등의 게임에서 0 FPS 현상을 해결하지만, Unreal Engine 게임의 로딩이나 성능에 문제를 일으킬 수 있습니다.</string>
|
||||||
<string name="sync_memory_operations">메모리 작업 동기화</string>
|
<string name="sync_memory_operations">메모리 작업 동기화</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">시작하기</string>
|
<string name="get_started">시작하기</string>
|
||||||
<string name="keys">키 설정</string>
|
<string name="keys">키 설정</string>
|
||||||
<string name="keys_description">아래 버튼으로 <b>prod.keys</b> 파일을 선택합니다.</string>
|
<string name="keys_description">아래 버튼으로 <b>prod.keys</b> 파일을 선택합니다.</string>
|
||||||
<string name="select_keys">키 선택</string>
|
|
||||||
<string name="firmware">펌웨어</string>
|
<string name="firmware">펌웨어</string>
|
||||||
<string name="select_firmware">펌웨어 선택</string>
|
|
||||||
<string name="games">게임</string>
|
<string name="games">게임</string>
|
||||||
<string name="games_description">아래 버튼으로 <b>게임</b> 폴더를 선택합니다.</string>
|
<string name="games_description">아래 버튼으로 <b>게임</b> 폴더를 선택합니다.</string>
|
||||||
<string name="done">완료</string>
|
<string name="done">완료</string>
|
||||||
<string name="text_continue">계속</string>
|
|
||||||
<string name="next">다음</string>
|
<string name="next">다음</string>
|
||||||
<string name="back">이전</string>
|
<string name="back">이전</string>
|
||||||
<string name="add_games">게임 추가</string>
|
<string name="add_games">게임 추가</string>
|
||||||
@@ -253,9 +247,6 @@
|
|||||||
<string name="install_firmware_warning_description">많은 게임이 제대로 작동하려면 펌웨어에 액세스해야 합니다.</string>
|
<string name="install_firmware_warning_description">많은 게임이 제대로 작동하려면 펌웨어에 액세스해야 합니다.</string>
|
||||||
<string name="notifications">알림</string>
|
<string name="notifications">알림</string>
|
||||||
<string name="notifications_description">아래 버튼으로 알림 권한을 부여합니다.</string>
|
<string name="notifications_description">아래 버튼으로 알림 권한을 부여합니다.</string>
|
||||||
<string name="give_permission">알림 켜기</string>
|
|
||||||
<string name="notification_warning">알림을 끄겠습니까?</string>
|
|
||||||
<string name="notification_warning_description">Eden가 중요한 정보를 알려드리지 않습니다.</string>
|
|
||||||
<string name="permission_denied">권한 거부됨</string>
|
<string name="permission_denied">권한 거부됨</string>
|
||||||
<string name="permission_denied_description">권한 허용을 너무 많이 거부하여 시스템 설정에서 수동으로 권한을 부여해야 합니다.</string>
|
<string name="permission_denied_description">권한 허용을 너무 많이 거부하여 시스템 설정에서 수동으로 권한을 부여해야 합니다.</string>
|
||||||
<string name="about">정보</string>
|
<string name="about">정보</string>
|
||||||
@@ -408,8 +399,6 @@
|
|||||||
<string name="display">디스플레이</string>
|
<string name="display">디스플레이</string>
|
||||||
<string name="processing">후처리</string>
|
<string name="processing">후처리</string>
|
||||||
|
|
||||||
<string name="frame_skipping">작업 중: 프레임 스킵</string>
|
|
||||||
<string name="frame_skipping_description">렌더링되는 프레임 수를 줄여 성능을 향상시키기 위해 프레임 스킵을 전환합니다. 이 기능은 현재 개발 중이며 향후 출시 버전에서 활성화될 예정입니다.</string>
|
|
||||||
<string name="renderer_accuracy">정확도 수준</string>
|
<string name="renderer_accuracy">정확도 수준</string>
|
||||||
<string name="renderer_resolution">해상도 (휴대 모드/독 모드)</string>
|
<string name="renderer_resolution">해상도 (휴대 모드/독 모드)</string>
|
||||||
<string name="renderer_vsync">수직동기화 모드</string>
|
<string name="renderer_vsync">수직동기화 모드</string>
|
||||||
@@ -837,10 +826,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">검정 배경</string>
|
<string name="use_black_backgrounds">검정 배경</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Viser varsler når noe går galt.</string>
|
<string name="notice_notification_channel_description">Viser varsler når noe går galt.</string>
|
||||||
<string name="notification_permission_not_granted">Varslingstillatelse ikke gitt!</string>
|
<string name="notification_permission_not_granted">Varslingstillatelse ikke gitt!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Forbedret)</string>
|
|
||||||
<string name="process_ram">Prosess-RAM: %1$d MB</string>
|
<string name="process_ram">Prosess-RAM: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Bygger</string>
|
<string name="shaders_prefix">Bygger</string>
|
||||||
<string name="shaders_suffix">shader(e)</string>
|
<string name="shaders_suffix">shader(e)</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Intensiteten til prøveskyggepasseringen. Høyere verdier forbedrer kvaliteten mer, men reduserer også ytelsen i større grad.</string>
|
<string name="sample_shading_fraction_description">Intensiteten til prøveskyggepasseringen. Høyere verdier forbedrer kvaliteten mer, men reduserer også ytelsen i større grad.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Avansert bildevindu-synkronisering</string>
|
|
||||||
<string name="frame_interpolation_description">Sikrer jevn og konsekvent bildelevering ved å synkronisere tiden mellom bilder, noe som reduserer hakking og ujevn animasjon. Ideelt for spill som opplever ustabil bildetid eller mikro-hakk under spilling.</string>
|
|
||||||
<string name="renderer_early_release_fences">Frigjør gjerder tidlig</string>
|
<string name="renderer_early_release_fences">Frigjør gjerder tidlig</string>
|
||||||
<string name="renderer_early_release_fences_description">Løser 0 FPS i spill som DKCR:HD, Subnautica Below Zero og Ori 2, men kan forårsake problemer med lasting eller ytelse i Unreal Engine-spill.</string>
|
<string name="renderer_early_release_fences_description">Løser 0 FPS i spill som DKCR:HD, Subnautica Below Zero og Ori 2, men kan forårsake problemer med lasting eller ytelse i Unreal Engine-spill.</string>
|
||||||
<string name="sync_memory_operations">Synkroniser minneoperasjoner</string>
|
<string name="sync_memory_operations">Synkroniser minneoperasjoner</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">Kom i gang</string>
|
<string name="get_started">Kom i gang</string>
|
||||||
<string name="keys">Nøkler</string>
|
<string name="keys">Nøkler</string>
|
||||||
<string name="keys_description">Velg din <b>prod.keys</b> fil ved å bruke knappen under.</string>
|
<string name="keys_description">Velg din <b>prod.keys</b> fil ved å bruke knappen under.</string>
|
||||||
<string name="select_keys">Velg nøkler</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Velg Firmware</string>
|
|
||||||
<string name="games">Spill</string>
|
<string name="games">Spill</string>
|
||||||
<string name="games_description">Velg din <b>Spill</b> mappe ved å bruke knappen under.</string>
|
<string name="games_description">Velg din <b>Spill</b> mappe ved å bruke knappen under.</string>
|
||||||
<string name="done">Ferdig</string>
|
<string name="done">Ferdig</string>
|
||||||
<string name="text_continue">Fortsett</string>
|
|
||||||
<string name="next">Neste</string>
|
<string name="next">Neste</string>
|
||||||
<string name="back">Tilbake</string>
|
<string name="back">Tilbake</string>
|
||||||
<string name="add_games">Legg til spill</string>
|
<string name="add_games">Legg til spill</string>
|
||||||
@@ -249,9 +243,6 @@
|
|||||||
<string name="install_firmware_warning_description">Mange spill krever tilgang til firmware for å fungere skikkelig.</string>
|
<string name="install_firmware_warning_description">Mange spill krever tilgang til firmware for å fungere skikkelig.</string>
|
||||||
<string name="notifications">Varsler</string>
|
<string name="notifications">Varsler</string>
|
||||||
<string name="notifications_description">Gi varslingstillatelse med knappen nedenfor.</string>
|
<string name="notifications_description">Gi varslingstillatelse med knappen nedenfor.</string>
|
||||||
<string name="give_permission">Gi tillatelse</string>
|
|
||||||
<string name="notification_warning">Hoppe over å gi tillatelse til varsling?</string>
|
|
||||||
<string name="notification_warning_description">Eden vil ikke kunne varsle deg om viktig informasjon.</string>
|
|
||||||
<string name="permission_denied">Tillatelse avslått</string>
|
<string name="permission_denied">Tillatelse avslått</string>
|
||||||
<string name="permission_denied_description">Du har nektet denne tillatelsen for mange ganger, og nå må du gi den manuelt i systeminnstillingene.</string>
|
<string name="permission_denied_description">Du har nektet denne tillatelsen for mange ganger, og nå må du gi den manuelt i systeminnstillingene.</string>
|
||||||
<string name="about">Om</string>
|
<string name="about">Om</string>
|
||||||
@@ -389,8 +380,6 @@
|
|||||||
<string name="display">Skjerm</string>
|
<string name="display">Skjerm</string>
|
||||||
<string name="processing">Etterbehandling</string>
|
<string name="processing">Etterbehandling</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Hoppe over bilder</string>
|
|
||||||
<string name="frame_skipping_description">Slå av/på frame skipping for å forbedre ytelsen ved å redusere antall renderte bilder. Denne funksjonen er fortsatt under utvikling og vil bli aktivert i fremtidige versjoner.</string>
|
|
||||||
<string name="renderer_accuracy">Nøyaktighetsnivå</string>
|
<string name="renderer_accuracy">Nøyaktighetsnivå</string>
|
||||||
<string name="renderer_resolution">Oppløsning (håndholdt/dokket)</string>
|
<string name="renderer_resolution">Oppløsning (håndholdt/dokket)</string>
|
||||||
<string name="renderer_vsync">VSync-modus</string>
|
<string name="renderer_vsync">VSync-modus</string>
|
||||||
@@ -740,10 +729,13 @@
|
|||||||
<string name="theme_mode_dark">Mørk</string>
|
<string name="theme_mode_dark">Mørk</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Svart bakgrunn</string>
|
<string name="use_black_backgrounds">Svart bakgrunn</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Ulepszony)</string>
|
|
||||||
<string name="process_ram">Pamięć procesu: %1$d MB</string>
|
<string name="process_ram">Pamięć procesu: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Kompilacja</string>
|
<string name="shaders_prefix">Kompilacja</string>
|
||||||
<string name="shaders_suffix">shaderów</string>
|
<string name="shaders_suffix">shaderów</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Intensywność przebiegu cieniowania próbki. Wyższe wartości poprawiają jakość, ale także w większym stopniu zmniejszają wydajność.</string>
|
<string name="sample_shading_fraction_description">Intensywność przebiegu cieniowania próbki. Wyższe wartości poprawiają jakość, ale także w większym stopniu zmniejszają wydajność.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderer</string>
|
<string name="veil_renderer">Renderer</string>
|
||||||
<string name="frame_interpolation">Zaawansowana synchronizacja klatek</string>
|
|
||||||
<string name="frame_interpolation_description">Zapewnia płynne i spójne wyświetlanie klatek poprzez synchronizację ich czasu, redukując zacinanie i nierówną animację. Idealne dla gier z niestabilnym czasem klatek lub mikro-zacinaniem podczas rozgrywki.</string>
|
|
||||||
<string name="renderer_early_release_fences">Wcześniejsze zwalnianie zabezpieczeń</string>
|
<string name="renderer_early_release_fences">Wcześniejsze zwalnianie zabezpieczeń</string>
|
||||||
<string name="renderer_early_release_fences_description">Pomaga naprawić 0 FPS w grach takich jak DKCR:HD, Subnautica Below Zero i Ori 2, ale może zaburzyć ładowanie lub wydajność w grach Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Pomaga naprawić 0 FPS w grach takich jak DKCR:HD, Subnautica Below Zero i Ori 2, ale może zaburzyć ładowanie lub wydajność w grach Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Synchronizuj operacje pamięci</string>
|
<string name="sync_memory_operations">Synchronizuj operacje pamięci</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">Zaczynamy</string>
|
<string name="get_started">Zaczynamy</string>
|
||||||
<string name="keys">Klucze</string>
|
<string name="keys">Klucze</string>
|
||||||
<string name="keys_description">Wybierz swoje klucze <b>prod.keys</b> za pomocą przycisku poniżej.</string>
|
<string name="keys_description">Wybierz swoje klucze <b>prod.keys</b> za pomocą przycisku poniżej.</string>
|
||||||
<string name="select_keys">Wybierz klucze</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="firmware_description">Wybierz swój plik <b>firmware.zip</b> przyciskiem poniżej.</string>
|
<string name="firmware_description">Wybierz swój plik <b>firmware.zip</b> przyciskiem poniżej.</string>
|
||||||
<string name="select_firmware">Wybierz Firmware</string>
|
|
||||||
<string name="games">Gry</string>
|
<string name="games">Gry</string>
|
||||||
<string name="games_description">Wybierz katalog z grami <b>Games</b> za pomocą przycisku poniżej.</string>
|
<string name="games_description">Wybierz katalog z grami <b>Games</b> za pomocą przycisku poniżej.</string>
|
||||||
<string name="done">Gotowe</string>
|
<string name="done">Gotowe</string>
|
||||||
<string name="done_description">Wszystko gotowe.\nMiłej gry!</string>
|
<string name="done_description">Wszystko gotowe.\nMiłej gry!</string>
|
||||||
<string name="text_continue">Kontynuuj</string>
|
|
||||||
<string name="next">Dalej</string>
|
<string name="next">Dalej</string>
|
||||||
<string name="back">Wstecz</string>
|
<string name="back">Wstecz</string>
|
||||||
<string name="add_games">Dodaj gry</string>
|
<string name="add_games">Dodaj gry</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Powiadomienia</string>
|
<string name="notifications">Powiadomienia</string>
|
||||||
<string name="notifications_description">Nadaj uprawnienia dostępu do powiadomień. </string>
|
<string name="notifications_description">Nadaj uprawnienia dostępu do powiadomień. </string>
|
||||||
<string name="give_permission">Nadaj uprawnienia</string>
|
|
||||||
<string name="notification_warning">Pominąć nadanie uprawnień powiadomień?</string>
|
|
||||||
<string name="notification_warning_description">Eden nie będzie mógł powiadamiać Cię o ważnych informacjach.</string>
|
|
||||||
<string name="permission_denied">Odmowa dostępu</string>
|
<string name="permission_denied">Odmowa dostępu</string>
|
||||||
<string name="permission_denied_description">Odmówiłeś dostępu do powiadomień zbyt wiele razy, teraz musisz przyznać je w ustawieniach systemowych Androida.</string>
|
<string name="permission_denied_description">Odmówiłeś dostępu do powiadomień zbyt wiele razy, teraz musisz przyznać je w ustawieniach systemowych Androida.</string>
|
||||||
<string name="about">O aplikacji</string>
|
<string name="about">O aplikacji</string>
|
||||||
@@ -475,8 +466,6 @@
|
|||||||
<string name="display">Wyświetlacz</string>
|
<string name="display">Wyświetlacz</string>
|
||||||
<string name="processing">Postprocessing</string>
|
<string name="processing">Postprocessing</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Pomijanie klatek</string>
|
|
||||||
<string name="frame_skipping_description">Włącz lub wyłącz pomijanie klatek, aby poprawić wydajność poprzez zmniejszenie liczby renderowanych klatek. Ta funkcja jest wciąż w fazie rozwoju i zostanie włączona w przyszłych wersjach.</string>
|
|
||||||
<string name="renderer_accuracy">Poziom precyzji emulacji</string>
|
<string name="renderer_accuracy">Poziom precyzji emulacji</string>
|
||||||
<string name="renderer_resolution">Rozdzielczość (Handheld/Zadokowany)</string>
|
<string name="renderer_resolution">Rozdzielczość (Handheld/Zadokowany)</string>
|
||||||
<string name="renderer_vsync">Synchronizacja pionowa VSync</string>
|
<string name="renderer_vsync">Synchronizacja pionowa VSync</string>
|
||||||
@@ -1012,10 +1001,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Czarne tła</string>
|
<string name="use_black_backgrounds">Czarne tła</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Aprimorado)</string>
|
|
||||||
<string name="process_ram">Memória do processo: %1$d MB</string>
|
<string name="process_ram">Memória do processo: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Compilando</string>
|
<string name="shaders_prefix">Compilando</string>
|
||||||
<string name="shaders_suffix">Shader(s)</string>
|
<string name="shaders_suffix">Shader(s)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Fração de Sombreamento de Amostra: Define a intensidade do sample shading. Quanto maior, melhor a qualidade, mas maior o impacto no desempenho.</string>
|
<string name="sample_shading_fraction_description">Fração de Sombreamento de Amostra: Define a intensidade do sample shading. Quanto maior, melhor a qualidade, mas maior o impacto no desempenho.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderizador</string>
|
<string name="veil_renderer">Renderizador</string>
|
||||||
<string name="frame_interpolation">Enhanced Frame Pacing</string>
|
|
||||||
<string name="frame_interpolation_description">Sincronização Melhorada de Quadros: Sincroniza o tempo entre os quadros para uma entrega mais uniforme, reduzindo travamentos e animações irregulares. Útil em jogos que sofrem com microtravamentos ou instabilidade na taxa de frames.</string>
|
|
||||||
<string name="renderer_early_release_fences">Release Fences Early</string>
|
<string name="renderer_early_release_fences">Release Fences Early</string>
|
||||||
<string name="renderer_early_release_fences_description">Liberar Cercas Antecipadamente: Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode prejudicar o carregamento ou o desempenho em jogos feitos com Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Liberar Cercas Antecipadamente: Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode prejudicar o carregamento ou o desempenho em jogos feitos com Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Sincronizar Operações de Memória</string>
|
<string name="sync_memory_operations">Sincronizar Operações de Memória</string>
|
||||||
@@ -238,15 +235,12 @@
|
|||||||
<string name="get_started">Vamos começar</string>
|
<string name="get_started">Vamos começar</string>
|
||||||
<string name="keys">Chaves (Keys)</string>
|
<string name="keys">Chaves (Keys)</string>
|
||||||
<string name="keys_description">Selecione seu arquivo <b>prod.keys</b> com o botão abaixo.</string>
|
<string name="keys_description">Selecione seu arquivo <b>prod.keys</b> com o botão abaixo.</string>
|
||||||
<string name="select_keys">Selecione as Chaves (Keys)</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="firmware_description">Selecione seu arquivo <b>firmware.zip</b> com o botão abaixo.</string>
|
<string name="firmware_description">Selecione seu arquivo <b>firmware.zip</b> com o botão abaixo.</string>
|
||||||
<string name="select_firmware">Selecionar Firmware</string>
|
|
||||||
<string name="games">Jogos</string>
|
<string name="games">Jogos</string>
|
||||||
<string name="games_description">Selecione sua pasta de <b>Jogos</b> com o botão abaixo.</string>
|
<string name="games_description">Selecione sua pasta de <b>Jogos</b> com o botão abaixo.</string>
|
||||||
<string name="done">Pronto</string>
|
<string name="done">Pronto</string>
|
||||||
<string name="done_description">Tudo certo.\nAproveite seus jogos!</string>
|
<string name="done_description">Tudo certo.\nAproveite seus jogos!</string>
|
||||||
<string name="text_continue">Continuar</string>
|
|
||||||
<string name="next">Próximo</string>
|
<string name="next">Próximo</string>
|
||||||
<string name="back">Voltar</string>
|
<string name="back">Voltar</string>
|
||||||
<string name="add_games">Adicionar Jogos</string>
|
<string name="add_games">Adicionar Jogos</string>
|
||||||
@@ -286,9 +280,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Notificações</string>
|
<string name="notifications">Notificações</string>
|
||||||
<string name="notifications_description">Conceda a permissão de notificação usando o botão abaixo.</string>
|
<string name="notifications_description">Conceda a permissão de notificação usando o botão abaixo.</string>
|
||||||
<string name="give_permission">Conceder permissão</string>
|
|
||||||
<string name="notification_warning">Ignorar a permissão de notificação\?</string>
|
|
||||||
<string name="notification_warning_description">O Eden não será capaz de notificá-lo sobre informações importantes.</string>
|
|
||||||
<string name="permission_denied">Permissão negada</string>
|
<string name="permission_denied">Permissão negada</string>
|
||||||
<string name="permission_denied_description">Como você negou esta permissão várias vezes, agora precisa ativá-la manualmente nas configurações do sistema.</string>
|
<string name="permission_denied_description">Como você negou esta permissão várias vezes, agora precisa ativá-la manualmente nas configurações do sistema.</string>
|
||||||
<string name="about">Sobre</string>
|
<string name="about">Sobre</string>
|
||||||
@@ -453,8 +444,6 @@
|
|||||||
<string name="display">Tela</string>
|
<string name="display">Tela</string>
|
||||||
<string name="processing">Pós-Processamento</string>
|
<string name="processing">Pós-Processamento</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Pular quadros</string>
|
|
||||||
<string name="frame_skipping_description">Ative ou desative o pulo de quadros para melhorar o desempenho reduzindo o número de quadros renderizados. Este recurso ainda está em desenvolvimento e será habilitado em versões futuras.</string>
|
|
||||||
<string name="renderer_accuracy">Nível de precisão</string>
|
<string name="renderer_accuracy">Nível de precisão</string>
|
||||||
<string name="renderer_resolution">Resolução (Portátil/Modo TV)</string>
|
<string name="renderer_resolution">Resolução (Portátil/Modo TV)</string>
|
||||||
<string name="renderer_vsync">Modo de VSync</string>
|
<string name="renderer_vsync">Modo de VSync</string>
|
||||||
@@ -976,10 +965,13 @@ uma tentativa de mapeamento automático</string>
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Planos de fundo pretos</string>
|
<string name="use_black_backgrounds">Planos de fundo pretos</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Mostra notificações quendo algo corre mal.</string>
|
<string name="notice_notification_channel_description">Mostra notificações quendo algo corre mal.</string>
|
||||||
<string name="notification_permission_not_granted">Permissões de notificação não permitidas </string>
|
<string name="notification_permission_not_granted">Permissões de notificação não permitidas </string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Melhorado)</string>
|
|
||||||
<string name="process_ram">RAM do processo: %1$d MB</string>
|
<string name="process_ram">RAM do processo: %1$d MB</string>
|
||||||
<string name="shaders_prefix">A compilar</string>
|
<string name="shaders_prefix">A compilar</string>
|
||||||
<string name="shaders_suffix">shader(s)</string>
|
<string name="shaders_suffix">shader(s)</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">A intensidade da passagem de sombreamento de amostra. Valores mais elevados melhoram a qualidade, mas também reduzem o desempenho numa maior medida.</string>
|
<string name="sample_shading_fraction_description">A intensidade da passagem de sombreamento de amostra. Valores mais elevados melhoram a qualidade, mas também reduzem o desempenho numa maior medida.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Renderizador</string>
|
<string name="veil_renderer">Renderizador</string>
|
||||||
<string name="frame_interpolation">Sincronização avançada de frames</string>
|
|
||||||
<string name="frame_interpolation_description">Garante uma entrega suave e consistente de frames sincronizando o seu tempo, reduzindo engasgadelas e animações irregulares. Ideal para jogos que experienciam instabilidade no tempo de frames ou micro-engasgadelas durante o jogo.</string>
|
|
||||||
<string name="renderer_early_release_fences">Libertar barreiras antecipadamente</string>
|
<string name="renderer_early_release_fences">Libertar barreiras antecipadamente</string>
|
||||||
<string name="renderer_early_release_fences_description">Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode afetar carregamento ou desempenho em jogos Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Ajuda a corrigir 0 FPS em jogos como DKCR:HD, Subnautica Below Zero e Ori 2, mas pode afetar carregamento ou desempenho em jogos Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Sincronizar Operações de Memória</string>
|
<string name="sync_memory_operations">Sincronizar Operações de Memória</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">Começa</string>
|
<string name="get_started">Começa</string>
|
||||||
<string name="keys">Chaves</string>
|
<string name="keys">Chaves</string>
|
||||||
<string name="keys_description">Seleciona o teu ficheiro <b>prod.keys</b> com o botão abaixo.</string>
|
<string name="keys_description">Seleciona o teu ficheiro <b>prod.keys</b> com o botão abaixo.</string>
|
||||||
<string name="select_keys">Seleciona as Chaves</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Selecionar Firmware</string>
|
|
||||||
<string name="games">Jogos</string>
|
<string name="games">Jogos</string>
|
||||||
<string name="games_description">Seleciona a tua pasta <b>Games</b> com o botão abaixo.</string>
|
<string name="games_description">Seleciona a tua pasta <b>Games</b> com o botão abaixo.</string>
|
||||||
<string name="done">Feito</string>
|
<string name="done">Feito</string>
|
||||||
<string name="text_continue">Continuar</string>
|
|
||||||
<string name="next">Próximo</string>
|
<string name="next">Próximo</string>
|
||||||
<string name="back">Voltar</string>
|
<string name="back">Voltar</string>
|
||||||
<string name="add_games">Adiciona Jogos</string>
|
<string name="add_games">Adiciona Jogos</string>
|
||||||
@@ -253,9 +247,6 @@
|
|||||||
<string name="install_firmware_warning_description">Muitos jogos requerem acesso ao firmware para funcionar corretamente.</string>
|
<string name="install_firmware_warning_description">Muitos jogos requerem acesso ao firmware para funcionar corretamente.</string>
|
||||||
<string name="notifications">Notificações</string>
|
<string name="notifications">Notificações</string>
|
||||||
<string name="notifications_description">Conceda a permissão de notificação com o botão abaixo.</string>
|
<string name="notifications_description">Conceda a permissão de notificação com o botão abaixo.</string>
|
||||||
<string name="give_permission">Conceda permissão</string>
|
|
||||||
<string name="notification_warning">Saltar a concessão da permissão de notificação?</string>
|
|
||||||
<string name="notification_warning_description">Eden não conseguirá te notificar de informações importantes. </string>
|
|
||||||
<string name="permission_denied">Permissão negada</string>
|
<string name="permission_denied">Permissão negada</string>
|
||||||
<string name="permission_denied_description">Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema.</string>
|
<string name="permission_denied_description">Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema.</string>
|
||||||
<string name="about">Sobre</string>
|
<string name="about">Sobre</string>
|
||||||
@@ -412,8 +403,6 @@
|
|||||||
<string name="display">Ecrã</string>
|
<string name="display">Ecrã</string>
|
||||||
<string name="processing">Pós-processamento</string>
|
<string name="processing">Pós-processamento</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Saltar frames</string>
|
|
||||||
<string name="frame_skipping_description">Ative ou desative o salto de frames para melhorar o desempenho reduzindo o número de frames renderizados. Esta funcionalidade ainda está em desenvolvimento e será ativada em versões futuras.</string>
|
|
||||||
<string name="renderer_accuracy">Nível de precisão</string>
|
<string name="renderer_accuracy">Nível de precisão</string>
|
||||||
<string name="renderer_resolution">Resolução (Portátil/Ancorado)</string>
|
<string name="renderer_resolution">Resolução (Portátil/Ancorado)</string>
|
||||||
<string name="renderer_vsync">Modo VSync</string>
|
<string name="renderer_vsync">Modo VSync</string>
|
||||||
@@ -890,10 +879,13 @@ uma tentativa de mapeamento automático</string>
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Plano de fundo preto</string>
|
<string name="use_black_backgrounds">Plano de fundo preto</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Улучшенный)</string>
|
|
||||||
<string name="process_ram">ОЗУ процесса: %1$d МБ</string>
|
<string name="process_ram">ОЗУ процесса: %1$d МБ</string>
|
||||||
<string name="shaders_prefix">Компиляция</string>
|
<string name="shaders_prefix">Компиляция</string>
|
||||||
<string name="shaders_suffix">Шейдер(ов)</string>
|
<string name="shaders_suffix">Шейдер(ов)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Интенсивность прохода сэмплового затенения. Более высокие значения улучшают качество, но и сильнее снижают производительность.</string>
|
<string name="sample_shading_fraction_description">Интенсивность прохода сэмплового затенения. Более высокие значения улучшают качество, но и сильнее снижают производительность.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Рендеринг</string>
|
<string name="veil_renderer">Рендеринг</string>
|
||||||
<string name="frame_interpolation">Улучшенная синхронизация кадров</string>
|
|
||||||
<string name="frame_interpolation_description">Обеспечивает плавную и стабильную подачу кадров за счет синхронизации их времени, уменьшая подтормаживания и неравномерную анимацию. Идеально для игр с нестабильным временем кадров или микро-подтормаживаниями во время игры.</string>
|
|
||||||
<string name="renderer_early_release_fences">Ранний релиз ограждений</string>
|
<string name="renderer_early_release_fences">Ранний релиз ограждений</string>
|
||||||
<string name="renderer_early_release_fences_description">Помогает исправить 0 FPS в играх типа DKCR:HD, Subnautica Below Zero и Ori 2, но может нарушить загрузку или производительность в играх на Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Помогает исправить 0 FPS в играх типа DKCR:HD, Subnautica Below Zero и Ori 2, но может нарушить загрузку или производительность в играх на Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Синхронизация операций с памятью</string>
|
<string name="sync_memory_operations">Синхронизация операций с памятью</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">Начать</string>
|
<string name="get_started">Начать</string>
|
||||||
<string name="keys">Ключи</string>
|
<string name="keys">Ключи</string>
|
||||||
<string name="keys_description">Выберите ваш файл <b>prod.keys</b> с помощью кнопки ниже.</string>
|
<string name="keys_description">Выберите ваш файл <b>prod.keys</b> с помощью кнопки ниже.</string>
|
||||||
<string name="select_keys">Выбрать ключи</string>
|
|
||||||
<string name="firmware">Прошивка</string>
|
<string name="firmware">Прошивка</string>
|
||||||
<string name="firmware_description">Выберите файл <b>firmware.zip</b> с помощью кнопки ниже.</string>
|
<string name="firmware_description">Выберите файл <b>firmware.zip</b> с помощью кнопки ниже.</string>
|
||||||
<string name="select_firmware">Выбрать прошивку</string>
|
|
||||||
<string name="games">Игры</string>
|
<string name="games">Игры</string>
|
||||||
<string name="games_description">Выберите вашу папку с <b>играми</b> с помощью кнопки ниже.</string>
|
<string name="games_description">Выберите вашу папку с <b>играми</b> с помощью кнопки ниже.</string>
|
||||||
<string name="done">Готово</string>
|
<string name="done">Готово</string>
|
||||||
<string name="done_description">Всё готово.\nПриятной игры!</string>
|
<string name="done_description">Всё готово.\nПриятной игры!</string>
|
||||||
<string name="text_continue">Продолжить</string>
|
|
||||||
<string name="next">Далее</string>
|
<string name="next">Далее</string>
|
||||||
<string name="back">Назад</string>
|
<string name="back">Назад</string>
|
||||||
<string name="add_games">Добавить игры</string>
|
<string name="add_games">Добавить игры</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Уведомления</string>
|
<string name="notifications">Уведомления</string>
|
||||||
<string name="notifications_description">Предоставьте разрешение уведомлений с помощью кнопки ниже.</string>
|
<string name="notifications_description">Предоставьте разрешение уведомлений с помощью кнопки ниже.</string>
|
||||||
<string name="give_permission">Предоставить разрешение</string>
|
|
||||||
<string name="notification_warning">Пропустить предоставление разрешения уведомлений?</string>
|
|
||||||
<string name="notification_warning_description">Eden не сможет уведомлять вас о важной информации.</string>
|
|
||||||
<string name="permission_denied">Разрешение отказано</string>
|
<string name="permission_denied">Разрешение отказано</string>
|
||||||
<string name="permission_denied_description">Вы слишком часто отклоняли это разрешение, и теперь вам нужно будет вручную предоставить его в настройках системы.</string>
|
<string name="permission_denied_description">Вы слишком часто отклоняли это разрешение, и теперь вам нужно будет вручную предоставить его в настройках системы.</string>
|
||||||
<string name="about">О нас</string>
|
<string name="about">О нас</string>
|
||||||
@@ -473,8 +464,6 @@
|
|||||||
<string name="display">Дисплей</string>
|
<string name="display">Дисплей</string>
|
||||||
<string name="processing">Постобработка</string>
|
<string name="processing">Постобработка</string>
|
||||||
|
|
||||||
<string name="frame_skipping">В разработке: Пропуск кадров</string>
|
|
||||||
<string name="frame_skipping_description">Включите или отключите пропуск кадров для повышения производительности за счет уменьшения количества отображаемых кадров. Эта функция находится в разработке и будет включена в будущих версиях.</string>
|
|
||||||
<string name="renderer_accuracy">Уровень точности</string>
|
<string name="renderer_accuracy">Уровень точности</string>
|
||||||
<string name="renderer_resolution">Разрешение (портативное/в док-станции)</string>
|
<string name="renderer_resolution">Разрешение (портативное/в док-станции)</string>
|
||||||
<string name="renderer_vsync">Режим верт. синхронизации</string>
|
<string name="renderer_vsync">Режим верт. синхронизации</string>
|
||||||
@@ -1010,10 +999,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Чёрный фон</string>
|
<string name="use_black_backgrounds">Чёрный фон</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Приказује обавештења када нешто пође по злу.</string>
|
<string name="notice_notification_channel_description">Приказује обавештења када нешто пође по злу.</string>
|
||||||
<string name="notification_permission_not_granted">Дозвола за обавештавање није одобрена!</string>
|
<string name="notification_permission_not_granted">Дозвола за обавештавање није одобрена!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Побољшано)</string>
|
|
||||||
<string name="shaders_prefix">Зграда</string>
|
<string name="shaders_prefix">Зграда</string>
|
||||||
<string name="shaders_suffix">Схадер (с)</string>
|
<string name="shaders_suffix">Схадер (с)</string>
|
||||||
<string name="charging">(Пуњење)</string>
|
<string name="charging">(Пуњење)</string>
|
||||||
@@ -76,8 +75,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Интензитет проласка сенчења узорка. Веће вредности побољшавају квалитет више, али такође више смањују перформансе.</string>
|
<string name="sample_shading_fraction_description">Интензитет проласка сенчења узорка. Веће вредности побољшавају квалитет више, али такође више смањују перформансе.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Рендерер</string>
|
<string name="veil_renderer">Рендерер</string>
|
||||||
<string name="frame_interpolation">Побољшани оквирни пејсинг</string>
|
|
||||||
<string name="frame_interpolation_description">Осигурава глатку и доследан испоруку оквира синхронизацијом времена између оквира, смањење муцања и неуједначене анимације. Идеално за игре које доживљавају временски оквир нестабилност или микро-штитнике током играња.</string>
|
|
||||||
<string name="renderer_early_release_fences">Ranije oslobađanje ograda</string>
|
<string name="renderer_early_release_fences">Ranije oslobađanje ograda</string>
|
||||||
<string name="renderer_early_release_fences_description">Pomaže u popravci 0 FPS u igrama kao što su DKCR:HD, Subnautica Below Zero i Ori 2, ali može oštetiti učitavanje ili performanse u Unreal Engine igrama.</string>
|
<string name="renderer_early_release_fences_description">Pomaže u popravci 0 FPS u igrama kao što su DKCR:HD, Subnautica Below Zero i Ori 2, ali može oštetiti učitavanje ili performanse u Unreal Engine igrama.</string>
|
||||||
<string name="sync_memory_operations">Синхронизација меморијских операција</string>
|
<string name="sync_memory_operations">Синхронизација меморијских операција</string>
|
||||||
@@ -215,13 +212,10 @@
|
|||||||
<string name="get_started">Започните</string>
|
<string name="get_started">Започните</string>
|
||||||
<string name="keys">Тастери</string>
|
<string name="keys">Тастери</string>
|
||||||
<string name="keys_description">Изаберите свој и лт; <b>prod.keys</b> датотека са дугметом испод.</string>
|
<string name="keys_description">Изаберите свој и лт; <b>prod.keys</b> датотека са дугметом испод.</string>
|
||||||
<string name="select_keys">Изаберите тастере</string>
|
|
||||||
<string name="firmware">Фирмвер</string>
|
<string name="firmware">Фирмвер</string>
|
||||||
<string name="select_firmware">Изабери фирмвер</string>
|
|
||||||
<string name="games">Игре</string>
|
<string name="games">Игре</string>
|
||||||
<string name="games_description">Изаберите свој и игре и ЛТ; Б> мапу са дугметом испод.</string>
|
<string name="games_description">Изаберите свој и игре и ЛТ; Б> мапу са дугметом испод.</string>
|
||||||
<string name="done">Доношен</string>
|
<string name="done">Доношен</string>
|
||||||
<string name="text_continue">Настављати</string>
|
|
||||||
<string name="next">Следећи</string>
|
<string name="next">Следећи</string>
|
||||||
<string name="back">Назад</string>
|
<string name="back">Назад</string>
|
||||||
<string name="add_games">Додајте игре</string>
|
<string name="add_games">Додајте игре</string>
|
||||||
@@ -252,9 +246,6 @@
|
|||||||
<string name="install_firmware_warning_description">Многе игре захтевају приступ фирмверу за правилно функционисање.</string>
|
<string name="install_firmware_warning_description">Многе игре захтевају приступ фирмверу за правилно функционисање.</string>
|
||||||
<string name="notifications">Обавештења</string>
|
<string name="notifications">Обавештења</string>
|
||||||
<string name="notifications_description">Одобрите дозволу за обавештење дугметом испод.</string>
|
<string name="notifications_description">Одобрите дозволу за обавештење дугметом испод.</string>
|
||||||
<string name="give_permission">Дозвола за одобрење</string>
|
|
||||||
<string name="notification_warning">Прескочите давање дозволе за обавештавање?</string>
|
|
||||||
<string name="notification_warning_description">Еден је победио да вас може обавестити о важним информацијама.</string>
|
|
||||||
<string name="permission_denied">Дозвола одбијена</string>
|
<string name="permission_denied">Дозвола одбијена</string>
|
||||||
<string name="permission_denied_description">Превише пута сте негирали ову дозволу и сада морате да га ручно одобри у системским подешавањима.</string>
|
<string name="permission_denied_description">Превише пута сте негирали ову дозволу и сада морате да га ручно одобри у системским подешавањима.</string>
|
||||||
<string name="about">О томе</string>
|
<string name="about">О томе</string>
|
||||||
@@ -412,8 +403,6 @@
|
|||||||
<string name="display">Приказ</string>
|
<string name="display">Приказ</string>
|
||||||
<string name="processing">Постпроцесирање</string>
|
<string name="processing">Постпроцесирање</string>
|
||||||
|
|
||||||
<string name="frame_skipping">ВИП: Фрамескип</string>
|
|
||||||
<string name="frame_skipping_description">Пребацивање оквира прескакање да бисте побољшали перформансе смањењем броја пружених оквира. Ова функција се и даље ради и биће омогућена у будућим издањима.</string>
|
|
||||||
<string name="renderer_accuracy">Ниво тачности</string>
|
<string name="renderer_accuracy">Ниво тачности</string>
|
||||||
<string name="renderer_resolution">Резолуција (ручно / прикључено)</string>
|
<string name="renderer_resolution">Резолуција (ручно / прикључено)</string>
|
||||||
<string name="renderer_vsync">Всинц мод</string>
|
<string name="renderer_vsync">Всинц мод</string>
|
||||||
@@ -888,10 +877,13 @@
|
|||||||
<string name="cubeb">Цубеб</string>
|
<string name="cubeb">Цубеб</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2к</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4к</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8к</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16к</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Црна позадина</string>
|
<string name="use_black_backgrounds">Црна позадина</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Покращений)</string>
|
|
||||||
<string name="process_ram">RAM процесу: %1$d МБ</string>
|
<string name="process_ram">RAM процесу: %1$d МБ</string>
|
||||||
<string name="shaders_prefix">Компіляція</string>
|
<string name="shaders_prefix">Компіляція</string>
|
||||||
<string name="shaders_suffix">Шейдер(и)</string>
|
<string name="shaders_suffix">Шейдер(и)</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Інтенсивність проходу затінення зразка. Вищі значення покращують якість, але й сильніше знижують продуктивність.</string>
|
<string name="sample_shading_fraction_description">Інтенсивність проходу затінення зразка. Вищі значення покращують якість, але й сильніше знижують продуктивність.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Візуалізатор</string>
|
<string name="veil_renderer">Візуалізатор</string>
|
||||||
<string name="frame_interpolation">Покращена синхронізація кадрів</string>
|
|
||||||
<string name="frame_interpolation_description">Забезпечує плавну та стабільну подачу кадрів шляхом синхронізації їх часу, зменшуючи підвисання та нерівномірну анімацію. Ідеально для ігор з нестабільним часом кадрів або мікро-підвисаннями під час гри.</string>
|
|
||||||
<string name="renderer_early_release_fences">Release fences early</string>
|
<string name="renderer_early_release_fences">Release fences early</string>
|
||||||
<string name="renderer_early_release_fences_description">Це налаштування може бути необхідним для виправлення помилок 0FPS у деяких іграх (зокрема DKCR:HD, Subnautica та Ori 2). Водночас інші ігри, особливо створені на рушії Unreal Engine, можуть працювати некоректно або взагалі не запускатися.</string>
|
<string name="renderer_early_release_fences_description">Це налаштування може бути необхідним для виправлення помилок 0FPS у деяких іграх (зокрема DKCR:HD, Subnautica та Ori 2). Водночас інші ігри, особливо створені на рушії Unreal Engine, можуть працювати некоректно або взагалі не запускатися.</string>
|
||||||
<string name="sync_memory_operations">Синхронізація операцій з пам\'яттю</string>
|
<string name="sync_memory_operations">Синхронізація операцій з пам\'яттю</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">Розпочати</string>
|
<string name="get_started">Розпочати</string>
|
||||||
<string name="keys">Ключі</string>
|
<string name="keys">Ключі</string>
|
||||||
<string name="keys_description">Виберіть ваш файл <b>prod.keys</b> за допомогою кнопки нижче.</string>
|
<string name="keys_description">Виберіть ваш файл <b>prod.keys</b> за допомогою кнопки нижче.</string>
|
||||||
<string name="select_keys">Вибрати ключі</string>
|
|
||||||
<string name="firmware">Прошивка</string>
|
<string name="firmware">Прошивка</string>
|
||||||
<string name="firmware_description">Виберіть файл <b>firmware.zip</b> за допомогою кнопки нижче.</string>
|
<string name="firmware_description">Виберіть файл <b>firmware.zip</b> за допомогою кнопки нижче.</string>
|
||||||
<string name="select_firmware">Вибрати прошивку</string>
|
|
||||||
<string name="games">Ігри</string>
|
<string name="games">Ігри</string>
|
||||||
<string name="games_description">Виберіть вашу теку з <b>іграми</b> за допомогою кнопки нижче.</string>
|
<string name="games_description">Виберіть вашу теку з <b>іграми</b> за допомогою кнопки нижче.</string>
|
||||||
<string name="done">Готово</string>
|
<string name="done">Готово</string>
|
||||||
<string name="done_description">Усе готово.\nНасолоджуйтеся грою!</string>
|
<string name="done_description">Усе готово.\nНасолоджуйтеся грою!</string>
|
||||||
<string name="text_continue">Продовжити</string>
|
|
||||||
<string name="next">Далі</string>
|
<string name="next">Далі</string>
|
||||||
<string name="back">Назад</string>
|
<string name="back">Назад</string>
|
||||||
<string name="add_games">Додати ігри</string>
|
<string name="add_games">Додати ігри</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">Сповіщення</string>
|
<string name="notifications">Сповіщення</string>
|
||||||
<string name="notifications_description">Надайте дозвіл сповіщень за допомогою кнопки нижче.</string>
|
<string name="notifications_description">Надайте дозвіл сповіщень за допомогою кнопки нижче.</string>
|
||||||
<string name="give_permission">Надати дозвіл</string>
|
|
||||||
<string name="notification_warning">Пропустити надання дозволу сповіщень?</string>
|
|
||||||
<string name="notification_warning_description">Eden не зможе повідомляти вас про важливу інформацію.</string>
|
|
||||||
<string name="permission_denied">У дозволі відмовлено</string>
|
<string name="permission_denied">У дозволі відмовлено</string>
|
||||||
<string name="permission_denied_description">Ви занадто часто відхиляли цей дозвіл, тож тепер вам потрібно буде вручну надати його в системних налаштуваннях.</string>
|
<string name="permission_denied_description">Ви занадто часто відхиляли цей дозвіл, тож тепер вам потрібно буде вручну надати його в системних налаштуваннях.</string>
|
||||||
<string name="about">Про нас</string>
|
<string name="about">Про нас</string>
|
||||||
@@ -475,8 +466,6 @@
|
|||||||
<string name="display">Дисплей</string>
|
<string name="display">Дисплей</string>
|
||||||
<string name="processing">Постобробка</string>
|
<string name="processing">Постобробка</string>
|
||||||
|
|
||||||
<string name="frame_skipping">В розробці: Пропуск кадрів</string>
|
|
||||||
<string name="frame_skipping_description">Увімкніть або вимкніть пропуск кадрів для покращення продуктивності за рахунок зменшення кількості візуалізованих кадрів. Ця функція ще розробляється та буде доступна у майбутніх версіях.</string>
|
|
||||||
<string name="renderer_accuracy">Рівень точності</string>
|
<string name="renderer_accuracy">Рівень точності</string>
|
||||||
<string name="renderer_resolution">Роздільна здатність (Портативний/Док)</string>
|
<string name="renderer_resolution">Роздільна здатність (Портативний/Док)</string>
|
||||||
<string name="renderer_vsync">Режим верт. синхронізації</string>
|
<string name="renderer_vsync">Режим верт. синхронізації</string>
|
||||||
@@ -1012,10 +1001,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Чорний фон</string>
|
<string name="use_black_backgrounds">Чорний фон</string>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<string name="notice_notification_channel_description">Hiển thị thông báo khi có sự cố xảy ra</string>
|
<string name="notice_notification_channel_description">Hiển thị thông báo khi có sự cố xảy ra</string>
|
||||||
<string name="notification_permission_not_granted">Ứng dụng không được cấp quyền thông báo!</string>
|
<string name="notification_permission_not_granted">Ứng dụng không được cấp quyền thông báo!</string>
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(Nâng cao)</string>
|
|
||||||
<string name="process_ram">RAM tiến trình: %1$d MB</string>
|
<string name="process_ram">RAM tiến trình: %1$d MB</string>
|
||||||
<string name="shaders_prefix">Đang xây dựng</string>
|
<string name="shaders_prefix">Đang xây dựng</string>
|
||||||
<string name="shaders_suffix">shader</string>
|
<string name="shaders_suffix">shader</string>
|
||||||
@@ -77,8 +76,6 @@
|
|||||||
<string name="sample_shading_fraction_description">Cường độ của bước tô bóng mẫu. Giá trị cao hơn cải thiện chất lượng tốt hơn nhưng cũng giảm hiệu suất nhiều hơn.</string>
|
<string name="sample_shading_fraction_description">Cường độ của bước tô bóng mẫu. Giá trị cao hơn cải thiện chất lượng tốt hơn nhưng cũng giảm hiệu suất nhiều hơn.</string>
|
||||||
|
|
||||||
<string name="veil_renderer">Trình kết xuất</string>
|
<string name="veil_renderer">Trình kết xuất</string>
|
||||||
<string name="frame_interpolation">Đồng bộ khung hình nâng cao</string>
|
|
||||||
<string name="frame_interpolation_description">Đảm bảo cung cấp khung hình mượt mà và ổn định bằng cách đồng bộ hóa thời gian giữa các khung hình, giảm giật lag và hoạt ảnh không đồng đều. Lý tưởng cho các trò chơi gặp vấn đề về thời gian khung hình không ổn định hoặc giật lag nhẹ trong khi chơi.</string>
|
|
||||||
<string name="renderer_early_release_fences">Giải phóng rào chắn sớm</string>
|
<string name="renderer_early_release_fences">Giải phóng rào chắn sớm</string>
|
||||||
<string name="renderer_early_release_fences_description">Giúp sửa lỗi 0 FPS trong các trò chơi như DKCR:HD, Subnautica Below Zero và Ori 2, nhưng có thể ảnh hưởng đến tải hoặc hiệu suất trong trò chơi Unreal Engine.</string>
|
<string name="renderer_early_release_fences_description">Giúp sửa lỗi 0 FPS trong các trò chơi như DKCR:HD, Subnautica Below Zero và Ori 2, nhưng có thể ảnh hưởng đến tải hoặc hiệu suất trong trò chơi Unreal Engine.</string>
|
||||||
<string name="sync_memory_operations">Đồng bộ hoá thao tác bộ nhớ</string>
|
<string name="sync_memory_operations">Đồng bộ hoá thao tác bộ nhớ</string>
|
||||||
@@ -216,13 +213,10 @@
|
|||||||
<string name="get_started">Bắt đầu</string>
|
<string name="get_started">Bắt đầu</string>
|
||||||
<string name="keys">Chìa khóa</string>
|
<string name="keys">Chìa khóa</string>
|
||||||
<string name="keys_description">Chọn file <b>prod.keys</b> của bạn bằng nút bên dưới.</string>
|
<string name="keys_description">Chọn file <b>prod.keys</b> của bạn bằng nút bên dưới.</string>
|
||||||
<string name="select_keys">Chọn Chìa khóa</string>
|
|
||||||
<string name="firmware">Firmware</string>
|
<string name="firmware">Firmware</string>
|
||||||
<string name="select_firmware">Chọn Firmware</string>
|
|
||||||
<string name="games">Trò chơi</string>
|
<string name="games">Trò chơi</string>
|
||||||
<string name="games_description">Chọn thư mục <b>Games</b> của bạn bằng nút bên dưới.</string>
|
<string name="games_description">Chọn thư mục <b>Games</b> của bạn bằng nút bên dưới.</string>
|
||||||
<string name="done">Hoàn thành</string>
|
<string name="done">Hoàn thành</string>
|
||||||
<string name="text_continue">Tiếp tục</string>
|
|
||||||
<string name="next">Tiếp theo</string>
|
<string name="next">Tiếp theo</string>
|
||||||
<string name="back">Trở lại</string>
|
<string name="back">Trở lại</string>
|
||||||
<string name="add_games">Thêm Trò chơi</string>
|
<string name="add_games">Thêm Trò chơi</string>
|
||||||
@@ -249,9 +243,6 @@
|
|||||||
<string name="install_firmware_warning_description">Nhiều trò chơi cần truy cập firmware để hoạt động bình thường.</string>
|
<string name="install_firmware_warning_description">Nhiều trò chơi cần truy cập firmware để hoạt động bình thường.</string>
|
||||||
<string name="notifications">Thông báo</string>
|
<string name="notifications">Thông báo</string>
|
||||||
<string name="notifications_description">Ấn vào nút bên dưới để cấp quyền ứng dụng gửi thông báo</string>
|
<string name="notifications_description">Ấn vào nút bên dưới để cấp quyền ứng dụng gửi thông báo</string>
|
||||||
<string name="give_permission">Cấp quyền</string>
|
|
||||||
<string name="notification_warning">Bỏ qua cấp quyền thông báo?</string>
|
|
||||||
<string name="notification_warning_description">Eden sẽ không thể gửi những thông báo quan trọng đến bạn.</string>
|
|
||||||
<string name="permission_denied">Đã từ chối cấp quyền</string>
|
<string name="permission_denied">Đã từ chối cấp quyền</string>
|
||||||
<string name="permission_denied_description">Bạn từ chối cấp quyền này quá nhiều lần và giờ bạn phải cấp quyền thủ công trong cài đặt máy.</string>
|
<string name="permission_denied_description">Bạn từ chối cấp quyền này quá nhiều lần và giờ bạn phải cấp quyền thủ công trong cài đặt máy.</string>
|
||||||
<string name="about">Thông tin</string>
|
<string name="about">Thông tin</string>
|
||||||
@@ -387,8 +378,6 @@
|
|||||||
<string name="display">Hiển thị</string>
|
<string name="display">Hiển thị</string>
|
||||||
<string name="processing">Hậu xử lý</string>
|
<string name="processing">Hậu xử lý</string>
|
||||||
|
|
||||||
<string name="frame_skipping">WIP: Bỏ qua khung hình</string>
|
|
||||||
<string name="frame_skipping_description">Bật hoặc tắt bỏ qua khung hình để cải thiện hiệu suất bằng cách giảm số lượng khung hình được kết xuất. Tính năng này đang được phát triển và sẽ được kích hoạt trong các bản phát hành tương lai.</string>
|
|
||||||
<string name="renderer_accuracy">Mức độ chính xác</string>
|
<string name="renderer_accuracy">Mức độ chính xác</string>
|
||||||
<string name="renderer_resolution">Độ phân giải (Handheld/Docked)</string>
|
<string name="renderer_resolution">Độ phân giải (Handheld/Docked)</string>
|
||||||
<string name="renderer_vsync">Chế độ VSync</string>
|
<string name="renderer_vsync">Chế độ VSync</string>
|
||||||
@@ -740,10 +729,13 @@
|
|||||||
<string name="theme_mode_dark">Tối</string>
|
<string name="theme_mode_dark">Tối</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">Nền tối</string>
|
<string name="use_black_backgrounds">Nền tối</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(增强)</string>
|
|
||||||
<string name="process_ram">进程内存: %1$d MB</string>
|
<string name="process_ram">进程内存: %1$d MB</string>
|
||||||
<string name="shaders_prefix">正在编译</string>
|
<string name="shaders_prefix">正在编译</string>
|
||||||
<string name="shaders_suffix">着色器</string>
|
<string name="shaders_suffix">着色器</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">采样着色处理的强度。值越高,质量改善越多,但性能降低也越明显。</string>
|
<string name="sample_shading_fraction_description">采样着色处理的强度。值越高,质量改善越多,但性能降低也越明显。</string>
|
||||||
|
|
||||||
<string name="veil_renderer">渲染器</string>
|
<string name="veil_renderer">渲染器</string>
|
||||||
<string name="frame_interpolation">增强帧同步</string>
|
|
||||||
<string name="frame_interpolation_description">通过同步帧间时间确保流畅一致的帧交付,减少卡顿和不均匀动画。适合存在帧时间不稳定或游戏过程中出现微卡顿的游戏。</string>
|
|
||||||
<string name="renderer_early_release_fences">提前释放围栏</string>
|
<string name="renderer_early_release_fences">提前释放围栏</string>
|
||||||
<string name="renderer_early_release_fences_description">可修复《大金刚国度:热带寒流》《深海迷航:零度之下》和《奥日2》等游戏中的0 FPS问题,但可能影响Unreal Engine游戏的加载或性能。</string>
|
<string name="renderer_early_release_fences_description">可修复《大金刚国度:热带寒流》《深海迷航:零度之下》和《奥日2》等游戏中的0 FPS问题,但可能影响Unreal Engine游戏的加载或性能。</string>
|
||||||
<string name="sync_memory_operations">同步内存操作</string>
|
<string name="sync_memory_operations">同步内存操作</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">开始</string>
|
<string name="get_started">开始</string>
|
||||||
<string name="keys">密钥文件</string>
|
<string name="keys">密钥文件</string>
|
||||||
<string name="keys_description">使用下方的按钮来选择你的 <b>prod.keys</b> 文件。</string>
|
<string name="keys_description">使用下方的按钮来选择你的 <b>prod.keys</b> 文件。</string>
|
||||||
<string name="select_keys">选择密钥文件</string>
|
|
||||||
<string name="firmware">固件</string>
|
<string name="firmware">固件</string>
|
||||||
<string name="firmware_description">请使用下面的按钮选择您的 <b>firmware.zip</b> 文件。</string>
|
<string name="firmware_description">请使用下面的按钮选择您的 <b>firmware.zip</b> 文件。</string>
|
||||||
<string name="select_firmware">选择固件</string>
|
|
||||||
<string name="games">游戏</string>
|
<string name="games">游戏</string>
|
||||||
<string name="games_description">使用下方的按钮选择你的<b>游戏</b>文件夹。</string>
|
<string name="games_description">使用下方的按钮选择你的<b>游戏</b>文件夹。</string>
|
||||||
<string name="done">完成</string>
|
<string name="done">完成</string>
|
||||||
<string name="done_description">你完成了全部设置。\n玩的开心!</string>
|
<string name="done_description">你完成了全部设置。\n玩的开心!</string>
|
||||||
<string name="text_continue">继续</string>
|
|
||||||
<string name="next">下一步</string>
|
<string name="next">下一步</string>
|
||||||
<string name="back">上一步</string>
|
<string name="back">上一步</string>
|
||||||
<string name="add_games">添加游戏</string>
|
<string name="add_games">添加游戏</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">通知</string>
|
<string name="notifications">通知</string>
|
||||||
<string name="notifications_description">使用下方的按钮授予通知权限。</string>
|
<string name="notifications_description">使用下方的按钮授予通知权限。</string>
|
||||||
<string name="give_permission">授予权限</string>
|
|
||||||
<string name="notification_warning">跳过授予通知权限?</string>
|
|
||||||
<string name="notification_warning_description">Eden 将无法通知您重要信息。</string>
|
|
||||||
<string name="permission_denied">权限被拒绝</string>
|
<string name="permission_denied">权限被拒绝</string>
|
||||||
<string name="permission_denied_description">您曾多次拒绝权限请求,现在您需要在系统设置中手动授予权限。</string>
|
<string name="permission_denied_description">您曾多次拒绝权限请求,现在您需要在系统设置中手动授予权限。</string>
|
||||||
<string name="about">关于</string>
|
<string name="about">关于</string>
|
||||||
@@ -450,8 +441,6 @@
|
|||||||
<string name="display">显示</string>
|
<string name="display">显示</string>
|
||||||
<string name="processing">后处理</string>
|
<string name="processing">后处理</string>
|
||||||
|
|
||||||
<string name="frame_skipping">开发中:跳帧</string>
|
|
||||||
<string name="frame_skipping_description">启用或禁用跳帧以减少渲染帧数,提高性能。此功能仍在开发中,将在未来版本中启用。</string>
|
|
||||||
<string name="renderer_accuracy">精度等级</string>
|
<string name="renderer_accuracy">精度等级</string>
|
||||||
<string name="renderer_resolution">分辨率 (掌机模式/主机模式)</string>
|
<string name="renderer_resolution">分辨率 (掌机模式/主机模式)</string>
|
||||||
<string name="renderer_vsync">垂直同步模式</string>
|
<string name="renderer_vsync">垂直同步模式</string>
|
||||||
@@ -984,10 +973,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">使用黑色背景</string>
|
<string name="use_black_backgrounds">使用黑色背景</string>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Stats Overlay settings -->
|
<!-- Stats Overlay settings -->
|
||||||
<string name="enhanced_fps_suffix">(增強)</string>
|
|
||||||
<string name="process_ram">記憶體使用量 %1$d MB</string>
|
<string name="process_ram">記憶體使用量 %1$d MB</string>
|
||||||
<string name="shaders_prefix">正在編譯</string>
|
<string name="shaders_prefix">正在編譯</string>
|
||||||
<string name="shaders_suffix">著色器</string>
|
<string name="shaders_suffix">著色器</string>
|
||||||
@@ -99,8 +98,6 @@
|
|||||||
<string name="sample_shading_fraction_description">採樣著色處理的強度。數值越高,品質改善越多,但效能降低也越明顯。</string>
|
<string name="sample_shading_fraction_description">採樣著色處理的強度。數值越高,品質改善越多,但效能降低也越明顯。</string>
|
||||||
|
|
||||||
<string name="veil_renderer">渲染器</string>
|
<string name="veil_renderer">渲染器</string>
|
||||||
<string name="frame_interpolation">增強幀同步</string>
|
|
||||||
<string name="frame_interpolation_description">通過同步幀間時間確保幀傳輸流暢一致,減少卡頓和不均勻動畫。適合存在幀時間不穩定或遊戲過程中出現些微卡頓的遊戲。</string>
|
|
||||||
<string name="renderer_early_release_fences">提前釋放圍欄</string>
|
<string name="renderer_early_release_fences">提前釋放圍欄</string>
|
||||||
<string name="renderer_early_release_fences_description">可修復《咚奇剛歸來HD》、《深海迷航:冰點之下》和《聖靈之光2》等遊戲中的0 FPS問題,但可能影響Unreal Engine遊戲的載入或效能。</string>
|
<string name="renderer_early_release_fences_description">可修復《咚奇剛歸來HD》、《深海迷航:冰點之下》和《聖靈之光2》等遊戲中的0 FPS問題,但可能影響Unreal Engine遊戲的載入或效能。</string>
|
||||||
<string name="sync_memory_operations">同步記憶體操作</string>
|
<string name="sync_memory_operations">同步記憶體操作</string>
|
||||||
@@ -239,15 +236,12 @@
|
|||||||
<string name="get_started">開始使用</string>
|
<string name="get_started">開始使用</string>
|
||||||
<string name="keys">金鑰</string>
|
<string name="keys">金鑰</string>
|
||||||
<string name="keys_description">使用下方的按鈕安裝您的 <b>prod.keys</b> 檔案。</string>
|
<string name="keys_description">使用下方的按鈕安裝您的 <b>prod.keys</b> 檔案。</string>
|
||||||
<string name="select_keys">選擇金鑰</string>
|
|
||||||
<string name="firmware">韌體</string>
|
<string name="firmware">韌體</string>
|
||||||
<string name="firmware_description">使用下方的按鈕安裝您的<b>firmware.zip</b>檔案</string>
|
<string name="firmware_description">使用下方的按鈕安裝您的<b>firmware.zip</b>檔案</string>
|
||||||
<string name="select_firmware">選擇韌體</string>
|
|
||||||
<string name="games">遊戲</string>
|
<string name="games">遊戲</string>
|
||||||
<string name="games_description">使用下方的按鈕選擇您的<b>遊戲</b>資料夾。</string>
|
<string name="games_description">使用下方的按鈕選擇您的<b>遊戲</b>資料夾。</string>
|
||||||
<string name="done">完成</string>
|
<string name="done">完成</string>
|
||||||
<string name="done_description">您已準備就緒。\n盡情遊玩您的遊戲!</string>
|
<string name="done_description">您已準備就緒。\n盡情遊玩您的遊戲!</string>
|
||||||
<string name="text_continue">繼續</string>
|
|
||||||
<string name="next">下一步</string>
|
<string name="next">下一步</string>
|
||||||
<string name="back">上一步</string>
|
<string name="back">上一步</string>
|
||||||
<string name="add_games">新增遊戲</string>
|
<string name="add_games">新增遊戲</string>
|
||||||
@@ -287,9 +281,6 @@
|
|||||||
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
<string name="install_firmware_warning_help">https://yuzu-mirror.github.io/help/quickstart/#guide-introduction</string>
|
||||||
<string name="notifications">通知</string>
|
<string name="notifications">通知</string>
|
||||||
<string name="notifications_description">使用下方的按鈕授予通知權限。</string>
|
<string name="notifications_description">使用下方的按鈕授予通知權限。</string>
|
||||||
<string name="give_permission">授予權限</string>
|
|
||||||
<string name="notification_warning">跳過授予通知權限?</string>
|
|
||||||
<string name="notification_warning_description">Eden 將無法通知您重要資訊。</string>
|
|
||||||
<string name="permission_denied">權限遭拒</string>
|
<string name="permission_denied">權限遭拒</string>
|
||||||
<string name="permission_denied_description">您曾多次拒絕了權限要求,現在您需要在系統設定中手動授予權限。</string>
|
<string name="permission_denied_description">您曾多次拒絕了權限要求,現在您需要在系統設定中手動授予權限。</string>
|
||||||
<string name="about">關於</string>
|
<string name="about">關於</string>
|
||||||
@@ -450,8 +441,6 @@
|
|||||||
<string name="display">顯示</string>
|
<string name="display">顯示</string>
|
||||||
<string name="processing">後處理</string>
|
<string name="processing">後處理</string>
|
||||||
|
|
||||||
<string name="frame_skipping">開發中:跳幀</string>
|
|
||||||
<string name="frame_skipping_description">啟用或停用跳幀以減少渲染幀數,提高效能。此功能仍在開發中,將在未來版本中啟用。</string>
|
|
||||||
<string name="renderer_accuracy">準確度層級</string>
|
<string name="renderer_accuracy">準確度層級</string>
|
||||||
<string name="renderer_resolution">解析度 (手提/底座)</string>
|
<string name="renderer_resolution">解析度 (手提/底座)</string>
|
||||||
<string name="renderer_vsync">垂直同步</string>
|
<string name="renderer_vsync">垂直同步</string>
|
||||||
@@ -984,10 +973,13 @@
|
|||||||
<string name="cubeb">cubeb</string>
|
<string name="cubeb">cubeb</string>
|
||||||
|
|
||||||
<!-- Anisotropic filtering options -->
|
<!-- Anisotropic filtering options -->
|
||||||
<string name="multiplier_two">2x</string>
|
<string name="multiplier_x2">x2</string>
|
||||||
<string name="multiplier_four">4x</string>
|
<string name="multiplier_x4">x4</string>
|
||||||
<string name="multiplier_eight">8x</string>
|
<string name="multiplier_x8">x8</string>
|
||||||
<string name="multiplier_sixteen">16x</string>
|
<string name="multiplier_x16">x16</string>
|
||||||
|
<string name="multiplier_x32">x32</string>
|
||||||
|
<string name="multiplier_x64">x64</string>
|
||||||
|
<string name="multiplier_none">None</string>
|
||||||
|
|
||||||
<!-- Black backgrounds theme -->
|
<!-- Black backgrounds theme -->
|
||||||
<string name="use_black_backgrounds">黑色背景</string>
|
<string name="use_black_backgrounds">黑色背景</string>
|
||||||
|
|||||||
@@ -487,10 +487,13 @@
|
|||||||
<string-array name="anisoEntries">
|
<string-array name="anisoEntries">
|
||||||
<item>@string/auto</item>
|
<item>@string/auto</item>
|
||||||
<item>@string/slider_default</item>
|
<item>@string/slider_default</item>
|
||||||
<item>@string/multiplier_two</item>
|
<item>@string/multiplier_x2</item>
|
||||||
<item>@string/multiplier_four</item>
|
<item>@string/multiplier_x4</item>
|
||||||
<item>@string/multiplier_eight</item>
|
<item>@string/multiplier_x8</item>
|
||||||
<item>@string/multiplier_sixteen</item>
|
<item>@string/multiplier_x16</item>
|
||||||
|
<item>@string/multiplier_x32</item>
|
||||||
|
<item>@string/multiplier_x64</item>
|
||||||
|
<item>@string/multiplier_none</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<integer-array name="anisoValues">
|
<integer-array name="anisoValues">
|
||||||
<item>0</item>
|
<item>0</item>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user