Compare commits

..

No commits in common. "master" and "2125.0" have entirely different histories.

251 changed files with 10202 additions and 26041 deletions

View file

@ -12,9 +12,6 @@ fi
echo "Tag name is: $TAG_NAME"
docker build --no-cache -f docker/azahar-room/Dockerfile -t azahar-room:$TAG_NAME .
docker build -f docker/azahar-room/Dockerfile -t azahar-room:$TAG_NAME .
mkdir -p build
FILENAME="azahar-room-$TARGET-$TAG_NAME.dockerimage"
docker save azahar-room:$TAG_NAME > build/$FILENAME
echo "DOCKER_IMAGE_PATH=artifacts/$FILENAME" >> $GITHUB_ENV
docker save azahar-room:$TAG_NAME > build/azahar-room-$TAG_NAME.dockerimage

View file

@ -2,14 +2,13 @@
ARTIFACTS_LIST=($ARTIFACTS)
BUILD_DIR=build
UNIVERSAL_DIR=$BUILD_DIR/universal
BUNDLE_DIR=$UNIVERSAL_DIR/bundle
OTHER_BUNDLE_DIR=$BUILD_DIR/x86_64/bundle
BUNDLE_DIR=build/bundle
mkdir build
# Set up the base bundle to combine into.
mkdir $UNIVERSAL_DIR
cp -a $BUILD_DIR/arm64/bundle $UNIVERSAL_DIR
# Set up the base artifact to combine into.
BASE_ARTIFACT=${ARTIFACTS_LIST[0]}
BASE_ARTIFACT_ARCH="${BASE_ARTIFACT##*-}"
mv $BASE_ARTIFACT $BUNDLE_DIR
# Executable binary paths that need to be combined.
BIN_PATHS=(Azahar.app/Contents/MacOS/azahar)
@ -20,18 +19,21 @@ DYLIB_PATHS=($(cd $BUNDLE_DIR && find . -name '*.dylib'))
unset IFS
# Combine all of the executable binaries and dylibs.
for BIN_PATH in "${BIN_PATHS[@]}"; do
lipo -create -output $BUNDLE_DIR/$BIN_PATH $BUNDLE_DIR/$BIN_PATH $OTHER_BUNDLE_DIR/$BIN_PATH
done
for OTHER_ARTIFACT in "${ARTIFACTS_LIST[@]:1}"; do
OTHER_ARTIFACT_ARCH="${OTHER_ARTIFACT##*-}"
for DYLIB_PATH in "${DYLIB_PATHS[@]}"; do
# Only merge if the libraries do not have conflicting arches, otherwise it will fail.
DYLIB_INFO=`file $BUNDLE_DIR/$DYLIB_PATH`
for BIN_PATH in "${BIN_PATHS[@]}"; do
lipo -create -output $BUNDLE_DIR/$BIN_PATH $BUNDLE_DIR/$BIN_PATH $OTHER_ARTIFACT/$BIN_PATH
done
OTHER_DYLIB_INFO=`file $OTHER_BUNDLE_DIR/$DYLIB_PATH`
if ! [[ "$DYLIB_INFO" =~ "x86_64" ]] && ! [[ "$OTHER_DYLIB_INFO" =~ "arm64" ]]; then
lipo -create -output $BUNDLE_DIR/$DYLIB_PATH $BUNDLE_DIR/$DYLIB_PATH $OTHER_BUNDLE_DIR/$DYLIB_PATH
fi
for DYLIB_PATH in "${DYLIB_PATHS[@]}"; do
# Only merge if the libraries do not have conflicting arches, otherwise it will fail.
DYLIB_INFO=`file $BUNDLE_DIR/$DYLIB_PATH`
OTHER_DYLIB_INFO=`file $OTHER_ARTIFACT/$DYLIB_PATH`
if ! [[ "$DYLIB_INFO" =~ "$OTHER_ARTIFACT_ARCH" ]] && ! [[ "$OTHER_DYLIB_INFO" =~ "$BASE_ARTIFACT_ARCH" ]]; then
lipo -create -output $BUNDLE_DIR/$DYLIB_PATH $BUNDLE_DIR/$DYLIB_PATH $OTHER_ARTIFACT/$DYLIB_PATH
fi
done
done
# Remove leftover libs so that they aren't distributed

View file

@ -4,10 +4,12 @@ if [ "$GITHUB_REF_TYPE" == "tag" ]; then
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
fi
mkdir -p build/$BUILD_ARCH && cd build/$BUILD_ARCH
cmake ../.. -GNinja \
mkdir build && cd build
cmake .. -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES="$BUILD_ARCH" \
-DCMAKE_OSX_ARCHITECTURES="$TARGET" \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DENABLE_QT_TRANSLATION=ON \
-DENABLE_ROOM_STANDALONE=OFF \
-DUSE_DISCORD_PRESENCE=ON \
@ -16,8 +18,9 @@ ninja
ninja bundle
mv ./bundle/azahar.app ./bundle/Azahar.app # TODO: Can this be done in CMake?
ccache -s -v
CURRENT_ARCH=`arch`
if [ "$BUILD_ARCH" = "$CURRENT_ARCH" ]; then
if [ "$TARGET" = "$CURRENT_ARCH" ]; then
ctest -VV -C Release
fi

View file

@ -1,26 +0,0 @@
#!/bin/bash -ex
# TODO: Why doesn't the CI environment use the PATH set in the Dockerimage?
# It works fine when using the image locally.
export PATH="/mxe/usr/bin:${PATH}"
mkdir build && cd build
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
export EXTRA_CMAKE_FLAGS=(-DENABLE_QT_UPDATE_CHECKER=ON)
fi
x86_64-w64-mingw32.shared-cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DENABLE_QT_TRANSLATION=ON \
-DUSE_DISCORD_PRESENCE=ON \
-DUSE_SYSTEM_BOOST=ON \
-DUSE_SYSTEM_CRYPTOPP=ON \
"${EXTRA_CMAKE_FLAGS[@]}"
x86_64-w64-mingw32.shared-cmake --build . -- -j$(nproc)
x86_64-w64-mingw32.shared-strip -s bin/Release/*.exe
make bundle
ccache -s -v

View file

@ -3,21 +3,20 @@
# Determine the full revision name.
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
GITREV="`git show -s --format='%h'`"
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
# Determine the name of the release being built.
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
RELEASE_NAME=azahar-$GITHUB_REF_NAME
REV_NAME="azahar-$OS-$TARGET-$GITHUB_REF_NAME"
else
RELEASE_NAME=azahar-head
fi
# Archive and upload the artifacts.
mkdir -p artifacts
function pack_artifacts() {
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
# Determine the name of the release being built.
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
RELEASE_NAME=azahar-$GITHUB_REF_NAME
REV_NAME="azahar-$OS-$TARGET-$GITHUB_REF_NAME"
else
RELEASE_NAME=azahar-head
fi
ARTIFACTS_PATH="$1"
# Set up root directory for archive.
@ -36,10 +35,10 @@ function pack_artifacts() {
fi
# Create .zip/.tar.gz
if [ "$OS" = "windows" ] && [ "$TARGET" != "mxe" ]; then
if [ "$OS" = "windows" ]; then
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
powershell Compress-Archive "$REV_NAME" "$ARCHIVE_FULL_NAME"
elif [ "$OS" = "android" ] || [ "$OS" = "macos" ] || [ "$TARGET" = "mxe" ]; then
elif [ "$OS" = "android" ] || [ "$OS" = "macos" ]; then
ARCHIVE_FULL_NAME="$ARCHIVE_NAME.zip"
zip -r "$ARCHIVE_FULL_NAME" "$REV_NAME"
else
@ -57,23 +56,11 @@ if [ -n "$UNPACKED" ]; then
FILENAME=$(basename "$ARTIFACT")
EXTENSION="${FILENAME##*.}"
# TODO: Deduplicate
REV_NAME="azahar-$OS-$TARGET-$GITDATE-$GITREV"
# Determine the name of the release being built.
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
RELEASE_NAME=azahar-$GITHUB_REF_NAME
REV_NAME="azahar-$OS-$TARGET-$GITHUB_REF_NAME"
else
RELEASE_NAME=azahar-head
fi
mv "$ARTIFACT" "artifacts/$REV_NAME.$EXTENSION"
done
elif [ -n "$PACK_INDIVIDUALLY" ]; then
# Pack and upload the artifacts one-by-one.
for ARTIFACT in build/bundle/*; do
TARGET=$(basename "$ARTIFACT")
pack_artifacts "$ARTIFACT"
done
else

View file

@ -1,5 +1,4 @@
- [ ] I have read the [Azahar AI Policy document](https://github.com/azahar-emu/azahar/blob/master/AI-POLICY.md) and have disclosed any use of AI if applicable under those terms.
---------
---
<!--

View file

@ -7,41 +7,21 @@ on:
pull_request:
branches: [ master ]
permissions:
id-token: write
contents: read
attestations: write
jobs:
source:
if: ${{ !github.head_ref }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Pack
run: ./.ci/source.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: ./
format: spdx-json
output-file: artifacts/source.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: source
path: artifacts/
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
artifacts/*.tar.xz
sbom-path: artifacts/source.spdx.json
linux-x86_64:
runs-on: ubuntu-latest
@ -59,15 +39,14 @@ jobs:
OS: linux
TARGET: ${{ matrix.target }}
SHOULD_RUN: ${{ (matrix.target != 'appimage-wayland' || github.ref_type == 'tag') }}
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
if: ${{ env.SHOULD_RUN == 'true' }}
with:
submodules: recursive
- name: Set up cache
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
uses: actions/cache@v5
if: ${{ env.SHOULD_RUN == 'true' }}
uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
@ -85,27 +64,12 @@ jobs:
if: ${{ matrix.target == 'appimage-wayland' && env.SHOULD_RUN == 'true' }}
run: |
mv artifacts/azahar.AppImage artifacts/azahar-wayland.AppImage
- name: Generate SBOM
if: ${{ contains(matrix.target, 'appimage') && github.ref_type == 'tag' && env.SHOULD_RUN == 'true' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: artifacts/linux-x86_64-${{ matrix.target }}.spdx.json
upload-artifact: false
- name: Upload
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}-${{ matrix.target }}
path: artifacts/
- name: Attest artifacts
if: ${{ contains(matrix.target, 'appimage') && github.ref_type == 'tag' && env.SHOULD_RUN == 'true' }}
uses: actions/attest@v4
with:
subject-path: |
artifacts/*.AppImage
sbom-path: artifacts/linux-x86_64-${{ matrix.target }}.spdx.json
linux-arm64:
runs-on: ubuntu-24.04-arm
@ -123,11 +87,11 @@ jobs:
OS: linux
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up cache
uses: actions/cache@v5
uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
@ -137,80 +101,85 @@ jobs:
run: ./.ci/linux.sh
macos:
runs-on: 'macos-26'
runs-on: ${{ (matrix.target == 'x86_64' && 'macos-26-intel') || 'macos-26' }}
strategy:
fail-fast: false
matrix:
target: ["x86_64", "arm64"]
env:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
OS: macos
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up cache
if: ${{ env.CACHE_ENABLED == 'true' }}
uses: actions/cache@v5
uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ github.sha }}
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-
${{ runner.os }}-${{ matrix.target }}-
- name: Install tools
run: brew install ccache ninja spirv-tools
- name: Build (x86_64)
run: BUILD_ARCH=x86_64 ./.ci/macos.sh
- name: Build (arm64)
run: BUILD_ARCH=arm64 ./.ci/macos.sh
- name: Build
run: ./.ci/macos.sh
- name: Prepare outputs for caching
run: cp -R build/bundle $OS-$TARGET
- name: Cache outputs for universal build
uses: actions/cache/save@v4
with:
path: ${{ env.OS }}-${{ env.TARGET }}
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
- name: Pack
run: ./.ci/pack.sh
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: artifacts/
macos-universal:
runs-on: macos-26
needs: macos
env:
OS: macos
TARGET: universal
steps:
- uses: actions/checkout@v4
- name: Download x86_64 build from cache
uses: actions/cache/restore@v4
with:
path: ${{ env.OS }}-x86_64
key: ${{ runner.os }}-x86_64-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
fail-on-cache-miss: true
- name: Download ARM64 build from cache
uses: actions/cache/restore@v4
with:
path: ${{ env.OS }}-arm64
key: ${{ runner.os }}-arm64-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
fail-on-cache-miss: true
- name: Create universal app
run: ./.ci/macos-universal.sh
- name: Prepare for packing
run: |
mkdir build/bundle
cp -r build/x86_64/bundle build/bundle/x86_64
cp -r build/arm64/bundle build/bundle/arm64
cp -r build/universal/bundle build/bundle/universal
- name: Pack
env:
PACK_INDIVIDUALLY: 1
ARTIFACTS: ${{ env.OS }}-x86_64 ${{ env.OS }}-arm64
- name: Pack
run: ./.ci/pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: artifacts/macos.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}
name: ${{ env.OS }}-${{ env.TARGET }}
path: artifacts/
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
artifacts/*.zip
sbom-path: artifacts/macos.spdx.json
windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- target: msvc
os: windows-latest
- target: msys2
os: windows-latest
- target: mxe
os: ubuntu-latest
container:
image: opensauce04/azahar-build-environment:latest
options: -u 1001
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
target: ["msvc", "msys2"]
defaults:
run:
shell: ${{ (matrix.target == 'msys2' && 'msys2') || 'bash' }} {0}
@ -218,16 +187,14 @@ jobs:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
OS: windows
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up cache
if: ${{ env.CACHE_ENABLED == 'true' }}
uses: actions/cache@v5
uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
@ -235,7 +202,7 @@ jobs:
${{ runner.os }}-${{ matrix.target }}-
- name: Set up MSVC
if: ${{ matrix.target == 'msvc' }}
uses: azahar-emu/msvc-dev-cmd@v1
uses: ilammy/msvc-dev-cmd@v1
- name: Install extra tools (MSVC)
if: ${{ matrix.target == 'msvc' }}
run: choco install ccache ninja ptime wget
@ -256,62 +223,34 @@ jobs:
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
- name: Install extra tools (MSYS2)
if: ${{ matrix.target == 'msys2' }}
uses: crazy-max/ghaction-chocolatey@v4
uses: crazy-max/ghaction-chocolatey@v3
with:
args: install ptime wget
- name: Install NSIS
if: ${{ github.ref_type == 'tag' && matrix.target != 'mxe' }}
if: ${{ github.ref_type == 'tag' }}
run: |
wget https://download.sourceforge.net/project/nsis/NSIS%203/3.11/nsis-3.11-setup.exe -O D:/a/_temp/nsis-setup.exe
ptime D:/a/_temp/nsis-setup.exe /S
shell: pwsh
- name: Disable line ending translation
run: git config --global core.autocrlf input
- name: Build (Native)
if: ${{ matrix.target != 'mxe' }}
- name: Build
run: ./.ci/windows.sh
- name: Build (MXE)
if: ${{ matrix.target == 'mxe' }}
run: ./.ci/mxe.sh
- name: Generate installer (Native)
if: ${{ github.ref_type == 'tag' && matrix.target != 'mxe' }}
- name: Generate installer
if: ${{ github.ref_type == 'tag' }}
run: |
cd src\installer
"C:\Program Files (x86)\NSIS\makensis.exe" /DPRODUCT_VARIANT=${{ matrix.target }} /DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
mkdir ..\..\artifacts 2> NUL
move /y *.exe ..\..\artifacts\
shell: cmd
- name: Generate installer (MXE)
if: ${{ github.ref_type == 'tag' && matrix.target == 'mxe' }}
run: |
export PATH="/mxe/usr/bin:${PATH}" # TODO: Why do we have to do this if it's in the image?
cd src/installer
x86_64-w64-mingw32.shared-makensis -DPRODUCT_VARIANT=${{ matrix.target }} -DPRODUCT_VERSION=${{ github.ref_name }} citra.nsi
mkdir -p ../../artifacts
mv ./*.exe ../../artifacts/
- name: Pack
run: ./.ci/pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: artifacts/windows-${{ matrix.target }}.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: artifacts/
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
artifacts/*.zip
artifacts/*.exe
sbom-path: artifacts/windows-${{ matrix.target }}.spdx.json
android:
runs-on: ubuntu-latest
@ -323,18 +262,17 @@ jobs:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
OS: android
TARGET: ${{ matrix.target }}
SHOULD_RUN: ${{ (matrix.target == 'vanilla' || github.ref_type == 'tag') }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
if: ${{ env.SHOULD_RUN == 'true' }}
with:
submodules: recursive
- name: Set up cache
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
uses: actions/cache@v5
if: ${{ env.SHOULD_RUN == 'true' }}
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
@ -372,48 +310,23 @@ jobs:
working-directory: src/android/app
env:
UNPACKED: 1
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: src/android
format: spdx-json
output-file: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
upload-artifact: false
- name: Upload
if: ${{ env.SHOULD_RUN == 'true' }}
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: src/android/app/artifacts/
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
src/android/app/artifacts/*.apk
src/android/app/artifacts/*.aab
sbom-path: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
docker:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64
os: ubuntu-24.04
- target: arm64
os: ubuntu-24.04-arm
runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
container:
# Can't use docker:dind for ARM64 because it's Alpine-based, see https://github.com/actions/upload-artifact/issues/739
image: earthbuild/dind:ubuntu-24.04-docker-28.5.2-1
env:
TARGET: ${{ matrix.target }}
image: docker:dind
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install tools
run: apk add bash
- name: Fix git ownership
run: git config --global --add safe.directory .
- name: Build Docker image
@ -422,23 +335,8 @@ jobs:
run: |
mkdir -p artifacts
mv build/*.dockerimage artifacts/
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
image: ${{ env.DOCKER_IMAGE_PATH }}
format: spdx-json
output-file: artifacts/docker-room.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: docker-${{ env.TARGET }}
path: artifacts/
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
artifacts/*.dockerimage
sbom-path: artifacts/docker-room.spdx.json
name: docker
path: artifacts/

View file

@ -20,7 +20,7 @@ jobs:
(github.event.pull_request.author_association != 'OWNER')
steps:
- name: Detect PR if author is first-time contributor
uses: actions/github-script@v9
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;

View file

@ -14,7 +14,7 @@ jobs:
if: github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'needs verification')
steps:
- name: Verify and reopen PR
uses: actions/github-script@v9
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;

View file

@ -13,7 +13,7 @@ jobs:
image: opensauce04/azahar-build-environment:latest
options: -u 1001
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build

View file

@ -11,11 +11,6 @@ on:
env:
CORE_ARGS: -DENABLE_LIBRETRO=ON
permissions:
id-token: write
contents: read
attestations: write
jobs:
android:
runs-on: ubuntu-22.04
@ -28,7 +23,7 @@ jobs:
BUILD_DIR: build/android-arm64-v8a
EXTRA_PATH: bin/Release
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set tag name
@ -37,10 +32,6 @@ jobs:
echo "GIT_TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
fi
echo $GIT_TAG_NAME
- name: Install tools
run: |
sudo apt-get update -y
sudo apt-get install -y llvm
- name: Update Android SDK CMake version
run: |
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "ndk;$ANDROID_NDK_VERSION"
@ -50,32 +41,13 @@ jobs:
export NDK_ROOT=${ANDROID_SDK_ROOT}/ndk/$ANDROID_NDK_VERSION
${ANDROID_SDK_ROOT}/cmake/3.30.3/bin/cmake $CORE_ARGS -DANDROID_PLATFORM=android-$API_LEVEL -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_STL=c++_static -DANDROID_ABI=$ANDROID_ABI . -B $BUILD_DIR
${ANDROID_SDK_ROOT}/cmake/3.30.3/bin/cmake --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)
llvm-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-android.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-android.spdx.json
path: ./*.zip
linux:
runs-on: ubuntu-22.04
env:
@ -85,43 +57,20 @@ jobs:
EXTRA_PATH: bin/Release
EXTRA_CORE_ARGS: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DENABLE_LTO=OFF
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install tools
run: |
sudo apt-get update -y
sudo apt-get install -y llvm
- name: Build
run: |
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
cmake --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)
llvm-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-linux.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-linux.spdx.json
path: ./*.zip
windows:
runs-on: ubuntu-latest
env:
@ -130,10 +79,10 @@ jobs:
BUILD_DIR: build/windows-x86_64
EXTRA_CORE_ARGS: -DENABLE_LTO=OFF -G Ninja
CMAKE: x86_64-w64-mingw32.static-cmake
IMAGE: reallibretroretroarch/libretro-build-mxe-win-cross-cores:mingw12
IMAGE: git.libretro.com:5050/libretro-infrastructure/libretro-build-mxe-win-cross-cores:mingw12
EXTRA_PATH: bin/Release
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build in cross-container
@ -145,36 +94,17 @@ jobs:
$IMAGE \
bash -lc "\
${CMAKE} $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR && \
${CMAKE} --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc) && \
x86_64-w64-mingw32.static-strip -s $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*"
${CMAKE} --build $BUILD_DIR --target azahar_libretro --config Release -j $(nproc)"
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-windows.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-windows.spdx.json
path: ./*.zip
macos:
runs-on: macos-26
strategy:
fail-fast: false
matrix:
target: ["x86_64", "arm64"]
env:
@ -184,7 +114,7 @@ jobs:
BUILD_DIR: build/osx-${{ matrix.target }}
EXTRA_PATH: bin/Release
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install tools
@ -193,32 +123,13 @@ jobs:
run: |
cmake $CORE_ARGS -DCMAKE_OSX_ARCHITECTURES=$TARGET . -B $BUILD_DIR
cmake --build $BUILD_DIR --target azahar_libretro --config Release
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-macos-${{ matrix.target }}.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-macos-${{ matrix.target }}.spdx.json
path: ./*.zip
ios:
runs-on: macos-26
env:
@ -228,39 +139,20 @@ jobs:
EXTRA_PATH: bin/Release
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build
run: |
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
cmake --build $BUILD_DIR --target azahar_libretro --config Release
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-ios.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-ios.spdx.json
path: ./*.zip
tvos:
runs-on: macos-26
env:
@ -270,35 +162,17 @@ jobs:
EXTRA_PATH: bin/Release
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build
run: |
cmake $CORE_ARGS $EXTRA_CORE_ARGS . -B $BUILD_DIR
cmake --build $BUILD_DIR --target azahar_libretro --config Release
strip -x $BUILD_DIR/$EXTRA_PATH/azahar_libretro.*
- name: Pack
run: ./.ci/libretro-pack.sh
- name: Generate SBOM
if: ${{ github.ref_type == 'tag' }}
uses: anchore/sbom-action@v0
with:
path: build/
format: spdx-json
output-file: libretro-tvos.spdx.json
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@v4
with:
name: ${{ env.OS }}-${{ env.TARGET }}
path: |
./*.zip
./*.spdx.json
- name: Attest artifacts
if: ${{ github.ref_type == 'tag' }}
uses: actions/attest@v4
with:
subject-path: |
./*.zip
sbom-path: libretro-tvos.spdx.json
path: ./*.zip

View file

@ -11,7 +11,7 @@ jobs:
image: opensauce04/azahar-build-environment:latest
options: -u 1001
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch

View file

@ -10,7 +10,7 @@ jobs:
permissions:
issues: write
steps:
- uses: actions/stale@v10.2.0
- uses: actions/stale@v9.1.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-issue-stale: 90

View file

@ -7,10 +7,10 @@ on:
jobs:
transifex:
runs-on: ubuntu-latest
container: opensauce04/azahar-build-environment:latest
container: opensauce04/azahar-build-environment:transifex
if: ${{ github.repository == 'azahar-emu/azahar' }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

3
.gitignore vendored
View file

@ -60,6 +60,3 @@ VULKAN_SDK/
# Version info files
GIT-COMMIT
GIT-TAG
# verify-release.sh downloads
verify/

14
.gitmodules vendored
View file

@ -55,12 +55,18 @@
[submodule "sdl2"]
path = externals/sdl2/SDL
url = https://github.com/libsdl-org/SDL
[submodule "cryptopp-cmake"]
path = externals/cryptopp-cmake
url = https://github.com/abdes/cryptopp-cmake.git
[submodule "cryptopp"]
path = externals/cryptopp
url = https://github.com/weidai11/cryptopp.git
[submodule "dds-ktx"]
path = externals/dds-ktx
url = https://github.com/septag/dds-ktx
[submodule "openal-soft"]
path = externals/openal-soft
url = https://github.com/azahar-emu/openal-soft
url = https://github.com/kcat/openal-soft
[submodule "glslang"]
path = externals/glslang
url = https://github.com/KhronosGroup/glslang
@ -100,9 +106,3 @@
[submodule "externals/libretro-common"]
path = externals/libretro-common/libretro-common
url = https://github.com/libretro/libretro-common.git
[submodule "dllwalker"]
path = externals/dllwalker
url = https://github.com/azahar-emu/dllwalker
[submodule "externals/cryptopp"]
path = externals/cryptopp
url = https://github.com/cryptopp-modern/cryptopp-modern.git

View file

@ -13,9 +13,6 @@ cmake_policy(SET CMP0063 NEW)
cmake_policy(SET CMP0127 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
# Prefer building bundled dependencies as static instead of shared
set(BUILD_SHARED_LIBS OFF)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
include(DownloadExternals)
@ -28,15 +25,6 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
enable_language(OBJC OBJCXX)
endif()
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND MINGW)
string(TOLOWER ${LIBTYPE} LIBTYPE_LOWER)
set(CMAKE_AR x86_64-w64-mingw32.${LIBTYPE_LOWER}-gcc-ar)
endif()
if (BSD STREQUAL "OpenBSD")
add_link_options(-z wxneeded)
endif()
option(ENABLE_LIBRETRO "Build as a LibRetro core" OFF)
# Some submodules like to pick their own default build type if not specified.
@ -107,7 +95,7 @@ endif()
# Track which options were explicitly set by the user (for libretro conflict detection)
set(_LIBRETRO_INCOMPATIBLE_OPTIONS
ENABLE_SDL2 ENABLE_QT ENABLE_WEB_SERVICE ENABLE_SCRIPTING ENABLE_GDBSTUB
ENABLE_SDL2 ENABLE_QT ENABLE_WEB_SERVICE ENABLE_SCRIPTING
ENABLE_OPENAL ENABLE_ROOM ENABLE_ROOM_STANDALONE ENABLE_CUBEB ENABLE_LIBUSB)
set(_USER_SET_OPTIONS "")
foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS)
@ -130,7 +118,6 @@ CMAKE_DEPENDENT_OPTION(ENABLE_ROOM_STANDALONE "Enable generating a standalone de
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
option(ENABLE_SCRIPTING "Enable RPC server for scripting" ON)
option(ENABLE_GDBSTUB "Enable GDB stub for emulated applications" ON)
CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF)
option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON)
@ -139,8 +126,7 @@ CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support
CMAKE_DEPENDENT_OPTION(ENABLE_SOFTWARE_RENDERER "Enables the software renderer" ON "NOT ANDROID" OFF)
CMAKE_DEPENDENT_OPTION(ENABLE_OPENGL "Enables the OpenGL renderer" ${DEFAULT_ENABLE_OPENGL} "NOT APPLE" OFF)
# NetBSD doesn't support Vulkan yet, remove this check when it does.
CMAKE_DEPENDENT_OPTION(ENABLE_VULKAN "Enables the Vulkan renderer" ON "NOT (BSD MATCHES \"NetBSD\")" OFF)
option(ENABLE_VULKAN "Enables the Vulkan renderer" ON)
option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
@ -150,8 +136,6 @@ option(ENABLE_SSE42 "Enable SSE4.2 optimizations on x86_64" ON)
option(ENABLE_DEVELOPER_OPTIONS "Enable functionality targeted at emulator developers" OFF)
option(ENABLE_BUILTIN_KEYBLOB "Enable the inclusion of the default crypto keys blob" ON)
# Compile options
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF)
option(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
@ -411,21 +395,13 @@ if (APPLE)
endif()
find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED)
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY})
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY})
if (ENABLE_VULKAN AND NOT ENABLE_LIBRETRO)
if (USE_SYSTEM_MOLTENVK)
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
else()
if (NOT USE_SYSTEM_MOLTENVK)
download_moltenvk()
if (IOS)
set(MOLTENVK_RELATIVE_LIBPATH "static/MoltenVK.xcframework/ios-arm64/libMoltenVK.a")
else()
set(MOLTENVK_RELATIVE_LIBPATH "dynamic/dylib/macOS/libMoltenVK.dylib")
endif()
set(MOLTENVK_LIBRARY "${CMAKE_BINARY_DIR}/externals/MoltenVK/MoltenVK/${MOLTENVK_RELATIVE_LIBPATH}")
endif()
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY})
endif()

View file

@ -198,10 +198,6 @@ if (BUNDLE_TARGET_EXECUTE)
# On Linux, always bundle an AppImage.
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
if (IS_MINGW)
return()
endif()
if (IN_PLACE)
message(FATAL_ERROR "Cannot bundle for Linux in-place.")
endif()
@ -277,23 +273,15 @@ else()
# On Linux, add a command to prepare linuxdeploy and any required plugins before any bundling occurs.
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
if (MINGW)
add_custom_command(
TARGET bundle
# The target here is arbitrary
COMMAND cp -r "$<TARGET_FILE_DIR:citra_meta>/*" "${CMAKE_BINARY_DIR}/bundle/"
POST_BUILD)
else()
add_custom_command(
TARGET bundle
COMMAND ${CMAKE_COMMAND}
"-DBUNDLE_TARGET_DOWNLOAD_LINUXDEPLOY=1"
"-DLINUXDEPLOY_PATH=${CMAKE_BINARY_DIR}/externals/linuxdeploy"
"-DLINUXDEPLOY_ARCH=${CMAKE_HOST_SYSTEM_PROCESSOR}"
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
POST_BUILD)
endif()
add_custom_command(
TARGET bundle
COMMAND ${CMAKE_COMMAND}
"-DBUNDLE_TARGET_DOWNLOAD_LINUXDEPLOY=1"
"-DLINUXDEPLOY_PATH=${CMAKE_BINARY_DIR}/externals/linuxdeploy"
"-DLINUXDEPLOY_ARCH=${CMAKE_HOST_SYSTEM_PROCESSOR}"
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
POST_BUILD)
endif()
endfunction()
@ -305,11 +293,6 @@ else()
create_base_bundle_target()
endif()
if (CMAKE_HOST_SYSTEM STREQUAL "Linux" AND MINGW)
# We don't really need to "bundle" MXE builds, so don't do anything
return()
endif()
set(bundle_executable_path "$<TARGET_FILE:${target_name}>")
if (bundle_qt AND APPLE)
# For Qt targets on Apple, expect an app bundle.
@ -348,7 +331,6 @@ else()
"-DBUNDLE_LIBRARY_PATHS=\"${bundle_library_paths}\""
"-DBUNDLE_QT=${bundle_qt}"
"-DIN_PLACE=${in_place}"
"-DIS_MINGW=${MINGW}"
"-DLINUXDEPLOY=${CMAKE_BINARY_DIR}/externals/linuxdeploy/squashfs-root/AppRun"
-P "${CMAKE_SOURCE_DIR}/CMakeModules/BundleTarget.cmake"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")

View file

@ -1,11 +0,0 @@
function(disable_pax_mprotect target)
if (BSD STREQUAL "NetBSD")
add_custom_command(TARGET ${target} POST_BUILD
COMMAND paxctl +m "$<TARGET_FILE:${target}>"
COMMENT "Disabling PaX MPROTECT restrictions for '${target}'"
VERBATIM
)
else()
message(FATAL_ERROR "disable_pax_mprotect only applies on NetBSD.")
endif()
endfunction()

View file

@ -171,8 +171,15 @@ function(download_qt target)
endfunction()
function(download_moltenvk)
if (IOS)
set(MOLTENVK_PLATFORM "static/MoltenVK.xcframework/ios-arm64")
else()
set(MOLTENVK_PLATFORM "dynamic/dylib/macOS")
endif()
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
if (NOT EXISTS "${CMAKE_BINARY_DIR}/externals/MoltenVK")
if (NOT EXISTS ${MOLTENVK_DIR})
if (NOT EXISTS ${MOLTENVK_TAR})
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar
${MOLTENVK_TAR} SHOW_PROGRESS)
@ -181,6 +188,10 @@ function(download_moltenvk)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
endif()
# Add the MoltenVK library path to the prefix so find_library can locate it.
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/${MOLTENVK_PLATFORM}")
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
endfunction()
function(get_external_prefix lib_name prefix_var)

View file

@ -17,7 +17,6 @@ foreach(KEY IN ITEMS
"use_virtual_sd"
"use_custom_storage"
"compress_cia_installs"
"async_fs_operations"
"region_value"
"init_clock"
"init_time"
@ -49,7 +48,6 @@ foreach(KEY IN ITEMS
"texture_filter"
"texture_sampling"
"delay_game_render_thread_us"
"simulate_3ds_gpu_timings"
"layout_option"
"swap_screen"
"upright_screen"
@ -109,7 +107,6 @@ foreach(KEY IN ITEMS
"output_device"
"input_type"
"input_device"
"simulate_headphones_plugged"
"delay_start_for_lle_modules"
"use_gdbstub"
"gdbstub_port"
@ -118,7 +115,6 @@ foreach(KEY IN ITEMS
"log_filter"
"log_regex_filter"
"toggle_unique_data_console_type"
"break_on_unmapped_memory_access"
"use_integer_scaling"
"layouts_to_cycle"
"camera_inner_flip"

1
CONTRIBUTING.md Normal file
View file

@ -0,0 +1 @@
**The Contributor's Guide has moved to [the wiki](https://github.com/citra-emu/citra/wiki/Contributing).**

View file

@ -12,4 +12,4 @@ lang_map = ca@valencia:ca_ES_valencia
file_filter = ../../src/android/app/src/main/res/values-<lang>/strings.xml
source_file = ../../src/android/app/src/main/res/values/strings.xml
type = ANDROID
lang_map = ca@valencia:b+ca+ES+valencia, es_419:b+es+419, pt_BR:b+pt+BR, zh_CN:b+zh+CN, zh_TW:b+zh+TW
lang_map = es_ES:b+es+ES, hu_HU:b+hu+HU, ru_RU:b+ru+RU, pt_BR:b+pt+BR, zh_CN:b+zh+CN, pl_PL:b+pl+PL, ca@valencia:b+ca+ES+valencia, ko_KR:b+ko+KR, da_DK:b+da+DK, ja_JP:b+ja+JP, lt_LT:b+lt+LT, ro_RO:b+ro+RO, tr_TR:b+tr+TR, vi_VN:b+vi+VN, zh_TW:b+zh+TW

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1050
dist/languages/de.ts vendored

File diff suppressed because it is too large Load diff

828
dist/languages/el.ts vendored

File diff suppressed because it is too large Load diff

7928
dist/languages/es_419.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

810
dist/languages/fi.ts vendored

File diff suppressed because it is too large Load diff

826
dist/languages/fr.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

810
dist/languages/id.ts vendored

File diff suppressed because it is too large Load diff

836
dist/languages/it.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1228
dist/languages/nb.ts vendored

File diff suppressed because it is too large Load diff

814
dist/languages/nl.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

826
dist/languages/sv.ts vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -4,19 +4,23 @@
# --- Builder ----------------
FROM opensauce04/azahar-build-environment:latest AS builder
RUN mkdir /var/azahar-src/
COPY ./ /var/azahar-src/
COPY . /var/azahar-src
RUN mkdir ./builddir/
WORKDIR ./builddir/
RUN cmake /var/azahar-src -G Ninja \
RUN mkdir builddir && cd builddir && \
cmake /var/azahar-src -G Ninja \
-DENABLE_QT=OFF \
-DENABLE_GDBSTUB=OFF \
-DENABLE_TESTS=OFF \
-DENABLE_ROOM=ON \
-DENABLE_ROOM_STANDALONE=ON
RUN ninja
RUN mv ./bin/Release/azahar-room /usr/local/bin/
-DENABLE_ROOM_STANDALONE=ON \
-DENABLE_OPENGL=OFF $( : "TODO: Can we disable these automatically when there's no frontend?") \
-DENABLE_VULKAN=OFF \
-DENABLE_SDL2=OFF \
-DENABLE_LIBUSB=OFF \
-DENABLE_CUBEB=OFF \
-DENABLE_OPENAL=OFF && \
ninja && \
mv bin/Release/azahar-room /usr/local/bin/ && \
cd .. && rm -rf builddir
# --- Final ------------------
FROM debian:trixie AS final

View file

@ -57,10 +57,9 @@ if (ENABLE_TESTS)
else()
set(CATCH_INSTALL_DOCS OFF CACHE BOOL "")
set(CATCH_INSTALL_EXTRAS OFF CACHE BOOL "")
add_subdirectory(catch2 EXCLUDE_FROM_ALL)
add_subdirectory(catch2)
endif()
target_link_libraries(catch2 INTERFACE Catch2::Catch2WithMain)
include(Catch)
endif()
# Crypto++
@ -69,9 +68,17 @@ if(USE_SYSTEM_CRYPTOPP)
add_library(cryptopp INTERFACE)
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
else()
if (WIN32 AND NOT MSVC AND "arm64" IN_LIST ARCHITECTURE)
# TODO: CryptoPP ARM64 ASM does not seem to support Windows unless compiled with MSVC.
# TODO: See https://github.com/weidai11/cryptopp/issues/1260
set(CRYPTOPP_DISABLE_ASM ON CACHE BOOL "")
endif()
set(CRYPTOPP_BUILD_DOCUMENTATION OFF CACHE BOOL "")
set(CRYPTOPP_BUILD_TESTING OFF CACHE BOOL "")
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
add_subdirectory(cryptopp EXCLUDE_FROM_ALL)
set(CRYPTOPP_SOURCES "${CMAKE_SOURCE_DIR}/externals/cryptopp" CACHE STRING "")
add_subdirectory(cryptopp-cmake)
endif()
# dds-ktx
@ -104,13 +111,7 @@ endif()
# Oaknut
if ("arm64" IN_LIST ARCHITECTURE)
if(USE_SYSTEM_OAKNUT)
find_package(oaknut REQUIRED)
add_library(oaknut INTERFACE)
target_link_libraries(oaknut INTERFACE merry::oaknut)
else()
add_subdirectory(oaknut EXCLUDE_FROM_ALL)
endif()
add_subdirectory(oaknut EXCLUDE_FROM_ALL)
endif()
# Dynarmic
@ -134,7 +135,7 @@ endif()
# getopt
if (MSVC)
add_subdirectory(getopt EXCLUDE_FROM_ALL)
add_subdirectory(getopt)
endif()
# inih
@ -143,7 +144,7 @@ if(USE_SYSTEM_INIH)
add_library(inih INTERFACE)
target_link_libraries(inih INTERFACE inih::inih inih::inir)
else()
add_subdirectory(inih EXCLUDE_FROM_ALL)
add_subdirectory(inih)
endif()
# MicroProfile
@ -166,7 +167,7 @@ if (NOT MSVC)
endif()
# Open Source Archives
add_subdirectory(open_source_archives EXCLUDE_FROM_ALL)
add_subdirectory(open_source_archives)
# faad2
add_subdirectory(faad2 EXCLUDE_FROM_ALL)
@ -205,12 +206,12 @@ add_subdirectory(teakra EXCLUDE_FROM_ALL)
# SDL2
if (ENABLE_SDL2 AND NOT USE_SYSTEM_SDL2)
add_subdirectory(sdl2 EXCLUDE_FROM_ALL)
add_subdirectory(sdl2)
endif()
# libusb
if (ENABLE_LIBUSB AND NOT USE_SYSTEM_LIBUSB)
add_subdirectory(libusb EXCLUDE_FROM_ALL)
add_subdirectory(libusb)
set(LIBUSB_INCLUDE_DIR "" PARENT_SCOPE)
set(LIBUSB_LIBRARIES usb PARENT_SCOPE)
endif()
@ -254,7 +255,7 @@ if(USE_SYSTEM_ENET)
add_library(enet INTERFACE)
target_link_libraries(enet INTERFACE libenet::libenet)
else()
add_subdirectory(enet EXCLUDE_FROM_ALL)
add_subdirectory(enet)
target_include_directories(enet INTERFACE ./enet/include)
endif()
@ -319,8 +320,12 @@ endif()
# OpenSSL
if (USE_SYSTEM_OPENSSL)
find_package(OpenSSL 1.1)
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
else()
if (OPENSSL_FOUND)
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
endif()
endif()
if (NOT OPENSSL_FOUND)
# LibreSSL
set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "")
set(OPENSSLDIR "/etc/ssl/")
@ -362,7 +367,7 @@ target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
if (UNIX AND NOT APPLE)
add_subdirectory(gamemode EXCLUDE_FROM_ALL)
add_subdirectory(gamemode)
endif()
# cpp-jwt
@ -385,13 +390,13 @@ if(USE_SYSTEM_LODEPNG)
find_package(lodepng REQUIRED)
target_link_libraries(lodepng INTERFACE lodepng::lodepng)
else()
add_subdirectory(lodepng EXCLUDE_FROM_ALL)
add_subdirectory(lodepng)
endif()
# (xperia64): Only use libyuv on Android b/c of build issues on Windows and mandatory JPEG
if(ANDROID)
# libyuv
add_subdirectory(libyuv EXCLUDE_FROM_ALL)
add_subdirectory(libyuv)
target_include_directories(yuv INTERFACE ./libyuv/include)
endif()
@ -402,9 +407,6 @@ if (ENABLE_OPENAL)
find_package(OpenAL REQUIRED)
target_link_libraries(OpenAL INTERFACE OpenAL::OpenAL)
else()
if (BSD STREQUAL "OpenBSD")
set(ALSOFT_BACKEND_SOLARIS OFF CACHE BOOL "")
endif()
set(ALSOFT_EMBED_HRTF_DATA OFF CACHE BOOL "")
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
set(ALSOFT_INSTALL OFF CACHE BOOL "")
@ -420,7 +422,7 @@ endif()
# OpenGL dependencies
if (ENABLE_OPENGL)
# Glad
add_subdirectory(glad EXCLUDE_FROM_ALL)
add_subdirectory(glad)
endif()
# Vulkan dependencies
@ -460,7 +462,7 @@ if (ENABLE_VULKAN)
set(ENABLE_CTEST OFF CACHE BOOL "")
set(ENABLE_HLSL OFF CACHE BOOL "")
set(BUILD_EXTERNAL OFF CACHE BOOL "")
add_subdirectory(glslang EXCLUDE_FROM_ALL)
add_subdirectory(glslang)
endif()
# sirit
@ -491,24 +493,11 @@ if (ENABLE_VULKAN)
else()
target_include_directories(vulkan-headers INTERFACE ./vulkan-headers/include)
target_disable_warnings(vulkan-headers)
if (BSD STREQUAL "NetBSD")
# There may be a better way to do this with
# find_package(X11), but I couldn't get
# CMake to do it, so we're depending on
# the x11-links package and assuming the
# prefix location. -OS
target_include_directories(vulkan-headers INTERFACE
/usr/pkg/share/x11-links/include)
elseif (BSD STREQUAL "OpenBSD")
# This is fine to hardcode because it'll never change
target_include_directories(vulkan-headers INTERFACE
/usr/X11R6/include)
endif()
endif()
# adrenotools
if (ANDROID AND "arm64" IN_LIST ARCHITECTURE)
add_subdirectory(libadrenotools EXCLUDE_FROM_ALL)
add_subdirectory(libadrenotools)
endif()
endif()
@ -524,4 +513,4 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8")
else()
target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR)
message(STATUS "Disabling SIMD for xxHash")
endif()
endif()

2
externals/boost vendored

@ -1 +1 @@
Subproject commit 6a85c3100499e886e11c87a5c2109eedacea0a61
Subproject commit f9b15f673a688982f78a5f63a49a27275b318e5f

View file

@ -14,7 +14,6 @@ option(USE_SYSTEM_JSON "Use the system JSON (nlohmann-json3) package (instead of
option(USE_SYSTEM_DYNARMIC "Use the system dynarmic (instead of the bundled one)" OFF)
option(USE_SYSTEM_FMT "Use the system fmt (instead of the bundled one)" OFF)
option(USE_SYSTEM_XBYAK "Use the system xbyak (instead of the bundled one)" OFF)
option(USE_SYSTEM_OAKNUT "Use the system oaknut (instead of the bundled one)" OFF)
option(USE_SYSTEM_INIH "Use the system inih (instead of the bundled one)" OFF)
option(USE_SYSTEM_FFMPEG_HEADERS "Use the system FFmpeg headers (instead of the bundled one)" OFF)
option(USE_SYSTEM_GLSLANG "Use the system glslang and SPIR-V libraries (instead of the bundled ones)" OFF)
@ -41,7 +40,6 @@ CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_JSON "Disable system JSON" OFF "USE_SYSTEM
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_DYNARMIC "Disable system Dynarmic" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FMT "Disable system fmt" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_XBYAK "Disable system xbyak" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_OAKNUT "Disable system oaknut" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_INIH "Disable system inih" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_FFMPEG_HEADERS "Disable system ffmpeg" OFF "USE_SYSTEM_LIBS" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_GLSLANG "Disable system glslang" OFF "USE_SYSTEM_LIBS" OFF)
@ -68,7 +66,6 @@ set(LIB_VAR_LIST
DYNARMIC
FMT
XBYAK
OAKNUT
INIH
FFMPEG_HEADERS
GLSLANG

2
externals/cryptopp vendored

@ -1 +1 @@
Subproject commit 8d92d788421483a43e09acf1cd4a2861cb2b8cab
Subproject commit 60f81a77e0c9a0e7ffc1ca1bc438ddfa2e43b78e

1
externals/cryptopp-cmake vendored Submodule

@ -0,0 +1 @@
Subproject commit 00a151f8489daaa32434ab1f340e6750793ddf0c

1
externals/dllwalker vendored

@ -1 +0,0 @@
Subproject commit 2f8b349c26832cae612aa7082154c0697a9cbc8e

@ -1 +1 @@
Subproject commit e399840fc6aba5f7bc3f0633e8ff10bba0640906
Subproject commit 90191edd20bb877c5cbddfdac7ec0fe49ad93727

View file

@ -183,9 +183,6 @@ endif()
if(ENABLE_DEVELOPER_OPTIONS)
add_compile_definitions(ENABLE_DEVELOPER_OPTIONS)
endif()
if(ENABLE_BUILTIN_KEYBLOB)
add_compile_definitions(ENABLE_BUILTIN_KEYBLOB)
endif()
add_subdirectory(common)
add_subdirectory(core)
@ -203,7 +200,6 @@ if (ENABLE_QT)
endif()
if (ENABLE_QT) # Or any other hypothetical future frontends
add_subdirectory(citra_cli)
add_subdirectory(citra_meta)
endif()

View file

@ -24,11 +24,12 @@ val abiFilter = listOf("arm64-v8a", "x86_64")
val downloadedJniLibsPath = "${layout.buildDirectory.get().asFile.path}/downloadedJniLibs"
@Suppress("UnstableApiUsage")
android {
namespace = "org.citra.citra_emu"
compileSdkVersion = "android-35"
ndkVersion = "27.3.13750724"
ndkVersion = "27.1.12297006"
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
@ -79,8 +80,7 @@ android {
"-DENABLE_QT=0", // Don't use QT
"-DENABLE_SDL2=0", // Don't use SDL
"-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", // Support Android 15 16KiB page sizes
"-DENABLE_GDBSTUB=OFF", // Disable GDB stub
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" // Support Android 15 16KiB page sizes
)
}
}

View file

@ -19,7 +19,6 @@ import android.view.Surface
import android.view.View
import android.widget.TextView
import androidx.annotation.Keep
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import androidx.fragment.app.DialogFragment
@ -259,9 +258,6 @@ object NativeLibrary {
external fun nativeFileExists(path: String): Boolean
external fun deleteOpenGLShaderCache(titleId: Long)
external fun deleteVulkanShaderCache(titleId: Long)
private var coreErrorAlertResult = false
private val coreErrorAlertLock = Object()
@ -318,12 +314,6 @@ object NativeLibrary {
canContinue = false
}
CoreError.ErrorCoreExceptionRaised -> {
title = emulationActivity.getString(R.string.fatal_error)
message = emulationActivity.getString(R.string.fatal_error_message)
canContinue = false
}
CoreError.ErrorUnknown -> {
title = emulationActivity.getString(R.string.fatal_error)
message = emulationActivity.getString(R.string.fatal_error_message)
@ -446,7 +436,7 @@ object NativeLibrary {
return
}
if (resultCode == CoreError.ShutdownRequested.value) {
if (resultCode == EmulationErrorDialogFragment.ShutdownRequested) {
emulationActivity.finish()
return
}
@ -465,51 +455,23 @@ object NativeLibrary {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
emulationActivity = requireActivity() as EmulationActivity
var coreError = CoreError.fromInt(requireArguments().getInt(RESULT_CODE))
val title: String
val message: String
when (coreError) {
CoreError.ErrorGetLoader, CoreError.ErrorLoader_ErrorInvalidFormat, CoreError.ErrorSystemMode -> {
title = getString(R.string.loader_error_invalid_format)
message = getString(R.string.loader_error_invalid_format_description)
}
CoreError.ErrorLoader_ErrorEncrypted -> {
title = getString(R.string.loader_error_encrypted)
message = getString(R.string.loader_error_encrypted_description)
}
CoreError.ErrorArticDisconnected -> {
title = getString(R.string.artic_base)
message = getString(R.string.artic_server_comm_error)
}
CoreError.ErrorN3DSApplication -> {
title = getString(R.string.loader_error_invalid_system_mode)
message = getString(R.string.loader_error_invalid_system_mode_description)
}
CoreError.ErrorLoader_ErrorPatches -> {
title = getString(R.string.loader_error_applying_patches)
message = getString(R.string.loader_error_applying_patches_description)
}
CoreError.ErrorLoader_ErrorPatchesInvalidTitle -> {
title = getString(R.string.loader_error_applying_patches)
message = getString(R.string.loader_error_patch_wrong_application)
}
else -> {
title = getString(R.string.loader_error_generic_title)
message = getString(R.string.loader_error_generic,
getString(coreError.stringRes), coreError.value)
}
var captionId = R.string.loader_error_invalid_format
val result = requireArguments().getInt(RESULT_CODE)
if (result == ErrorLoader_ErrorEncrypted) {
captionId = R.string.loader_error_encrypted
}
if (result == ErrorArticDisconnected) {
captionId = R.string.artic_base
}
val alert = MaterialAlertDialogBuilder(requireContext())
.setTitle(title)
.setTitle(captionId)
.setMessage(
Html.fromHtml(message,
Html.fromHtml(
if (result == ErrorArticDisconnected)
CitraApplication.appContext.resources.getString(R.string.artic_server_comm_error)
else
CitraApplication.appContext.resources.getString(R.string.redump_games),
Html.FROM_HTML_MODE_LEGACY
)
)
@ -531,6 +493,20 @@ object NativeLibrary {
const val RESULT_CODE = "resultcode"
const val Success = 0
const val ErrorNotInitialized = 1
const val ErrorGetLoader = 2
const val ErrorSystemMode = 3
const val ErrorLoader = 4
const val ErrorLoader_ErrorEncrypted = 5
const val ErrorLoader_ErrorInvalidFormat = 6
const val ErrorLoader_ErrorGBATitle = 7
const val ErrorSystemFiles = 8
const val ErrorSavestate = 9
const val ErrorArticDisconnected = 10
const val ShutdownRequested = 11
const val ErrorUnknown = 12
fun newInstance(resultCode: Int): EmulationErrorDialogFragment {
val args = Bundle()
args.putInt(RESULT_CODE, resultCode)
@ -877,31 +853,12 @@ object NativeLibrary {
FileUtil.deleteDocument(path)
}
enum class CoreError(val value: Int, @StringRes val stringRes: Int) {
Success(0, R.string.core_error_success),
ErrorNotInitialized(1, R.string.core_error_not_initialized),
ErrorGetLoader(2, R.string.core_error_get_loader),
ErrorSystemMode(3, R.string.core_error_system_mode),
ErrorLoader(4, R.string.core_error_loader),
ErrorLoader_ErrorEncrypted(5, R.string.core_error_loader_encrypted),
ErrorLoader_ErrorInvalidFormat(6, R.string.core_error_loader_invalid_format),
ErrorLoader_ErrorGBATitle(7, R.string.core_error_loader_gba_title),
ErrorLoader_ErrorPatches(8, R.string.core_error_loader_error_patches),
ErrorLoader_ErrorPatchesInvalidTitle(9, R.string.core_error_loader_patches_invalid_title),
ErrorSystemFiles(10, R.string.core_error_system_files),
ErrorSavestate(11, R.string.core_error_savestate),
ErrorArticDisconnected(12, R.string.core_error_artic_disconnected),
ErrorN3DSApplication(13, R.string.core_error_n3ds_application),
ErrorCoreExceptionRaised(14, R.string.core_error_core_exception_raised),
ErrorMemoryExceptionRaised(15, R.string.core_error_memory_exception_raised),
ShutdownRequested(16, R.string.core_error_shutdown_requested),
ErrorUnknown(17, R.string.core_error_unknown);
companion object {
fun fromInt(value: Int): CoreError {
return entries.find { it.value == value } ?: ErrorUnknown
}
}
enum class CoreError {
ErrorSystemFiles,
ErrorSavestate,
ErrorArticDisconnected,
ErrorN3DSApplication,
ErrorUnknown
}
enum class InstallStatus {

View file

@ -8,7 +8,6 @@ import android.Manifest.permission
import android.annotation.SuppressLint
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
@ -81,9 +80,7 @@ class EmulationActivity : AppCompatActivity() {
return navHostFragment.getChildFragmentManager().fragments.last() as EmulationFragment
}
private var isRotationBlocked: Boolean = true
private var isEmulationRunning: Boolean = false
private var isEmulationReady: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
@ -92,20 +89,12 @@ class EmulationActivity : AppCompatActivity() {
ThemeUtil.setTheme(this)
settingsViewModel.settings.loadSettings()
screenAdjustmentUtil = ScreenAdjustmentUtil(this, windowManager, settingsViewModel.settings)
// Block orientation until emulation is ready to prevent unneccesary
// surface recreation until the renderer is ready.
isRotationBlocked = true
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
super.onCreate(savedInstanceState)
secondaryDisplay = SecondaryDisplay(this)
secondaryDisplay.updateDisplay()
binding = ActivityEmulationBinding.inflate(layoutInflater)
screenAdjustmentUtil = ScreenAdjustmentUtil(this, windowManager, settingsViewModel.settings)
hotkeyUtility = HotkeyUtility(screenAdjustmentUtil, this)
setContentView(binding.root)
@ -130,6 +119,8 @@ class EmulationActivity : AppCompatActivity() {
isEmulationRunning = true
instance = this
applyOrientationSettings() // Check for orientation settings at startup
val game = try {
intent.extras?.let { extras ->
BundleCompat.getParcelable(extras, "game", Game::class.java)
@ -145,46 +136,13 @@ class EmulationActivity : AppCompatActivity() {
NativeLibrary.playTimeManagerStart(game.titleId)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
NativeLibrary.stopEmulation()
NativeLibrary.playTimeManagerStop()
isEmulationReady = false
isRotationBlocked = true
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
emulationViewModel.setEmulationStarted(false)
val game = intent.extras?.let { extras ->
BundleCompat.getParcelable(extras, "game", Game::class.java)
}
if (game != null) {
NativeLibrary.playTimeManagerStart(game.titleId)
}
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
navHostFragment.navController.setGraph(R.navigation.emulation_navigation, intent.extras)
}
// On some devices, the system bars will not disappear on first boot or after some
// rotations. Here we set full screen immersive repeatedly in onResume and in
// onWindowFocusChanged to prevent the unwanted status bar state.
override fun onResume() {
enableFullscreenImmersive()
if (isEmulationReady) {
// If emulation is ready then unblock rotation
isRotationBlocked = false
applyOrientationSettings()
emulationViewModel.setEmulationStarted(true)
} else {
if (!isRotationBlocked) {
applyOrientationSettings()
}
}
super.onResume()
enableFullscreenImmersive()
applyOrientationSettings() // Check for orientation settings changes on runtime
}
override fun onStop() {
@ -193,8 +151,8 @@ class EmulationActivity : AppCompatActivity() {
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
enableFullscreenImmersive()
super.onWindowFocusChanged(hasFocus)
enableFullscreenImmersive()
}
public override fun onRestart() {
@ -206,15 +164,11 @@ class EmulationActivity : AppCompatActivity() {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean("isEmulationRunning", isEmulationRunning)
outState.putBoolean("isEmulationReady", isEmulationReady)
outState.putBoolean("isRotationBlocked", isRotationBlocked)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
isEmulationRunning = savedInstanceState.getBoolean("isEmulationRunning", false)
isEmulationReady = savedInstanceState.getBoolean("isEmulationReady", false)
isRotationBlocked = savedInstanceState.getBoolean("isRotationBlocked", isRotationBlocked)
}
override fun onDestroy() {
@ -268,11 +222,6 @@ class EmulationActivity : AppCompatActivity() {
fun onEmulationStarted() {
emulationViewModel.setEmulationStarted(true)
isEmulationReady = true
if (isRotationBlocked) {
isRotationBlocked = false
applyOrientationSettings()
}
Toast.makeText(
applicationContext,
getString(R.string.emulation_menu_help),

View file

@ -36,7 +36,6 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import android.widget.PopupMenu
import androidx.lifecycle.lifecycleScope
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton
@ -515,63 +514,6 @@ class GameAdapter(
showUninstallContextMenu(it, game, bottomSheetDialog)
}
bottomSheetView.findViewById<MaterialButton>(R.id.delete_cache).setOnClickListener {
val options = arrayOf(context.getString(R.string.vulkan), context.getString(R.string.opengles))
var selectedIndex = -1
val dialog = MaterialAlertDialogBuilder(context)
.setTitle(R.string.delete_cache_select_backend)
.setSingleChoiceItems(options, -1) { dialog, which ->
selectedIndex = which
}
.setPositiveButton(android.R.string.ok) {_, _ ->
val progToast = Toast.makeText(
CitraApplication.appContext,
R.string.deleting_shader_cache,
Toast.LENGTH_LONG
)
progToast.show()
activity.lifecycleScope.launch(Dispatchers.IO) {
when (selectedIndex) {
0 -> {
NativeLibrary.deleteVulkanShaderCache(game.titleId)
}
1 -> {
NativeLibrary.deleteOpenGLShaderCache(game.titleId)
}
}
activity.runOnUiThread {
progToast.cancel()
Toast.makeText(
CitraApplication.appContext,
R.string.shader_cache_deleted,
Toast.LENGTH_SHORT
).show()
}
}
}
.setNegativeButton(android.R.string.cancel) { dialog, _ ->
dialog.dismiss()
}
.create()
dialog.setOnShowListener {
val positiveButton = dialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE)
positiveButton.isEnabled = false
val listView = dialog.listView
listView.setOnItemClickListener { _, _, position, _ ->
selectedIndex = position
positiveButton.isEnabled = true
}
}
dialog.show()
}
val bottomSheetBehavior = bottomSheetDialog.getBehavior()
bottomSheetBehavior.skipCollapsed = true
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED

View file

@ -18,7 +18,6 @@ object SettingKeys {
external fun enable_required_online_lle_modules(): String
external fun use_virtual_sd(): String
external fun compress_cia_installs(): String
external fun async_fs_operations(): String
external fun region_value(): String
external fun init_clock(): String
external fun init_time(): String
@ -46,7 +45,6 @@ object SettingKeys {
external fun texture_filter(): String
external fun texture_sampling(): String
external fun delay_game_render_thread_us(): String
external fun simulate_3ds_gpu_timings(): String
external fun layout_option(): String
external fun swap_screen(): String
external fun upright_screen(): String
@ -94,7 +92,6 @@ object SettingKeys {
external fun audio_emulation(): String
external fun enable_audio_stretching(): String
external fun enable_realtime_audio(): String
external fun simulate_headphones_plugged(): String
external fun volume(): String
external fun output_type(): String
external fun output_device(): String

View file

@ -44,7 +44,6 @@ enum class BooleanSetting(
PRELOAD_TEXTURES(SettingKeys.preload_textures(), Settings.SECTION_UTILITY, false),
ENABLE_AUDIO_STRETCHING(SettingKeys.enable_audio_stretching(), Settings.SECTION_AUDIO, true),
ENABLE_REALTIME_AUDIO(SettingKeys.enable_realtime_audio(), Settings.SECTION_AUDIO, false),
SIMULATE_HEADPHONES_PLUGGED(SettingKeys.simulate_headphones_plugged(), Settings.SECTION_AUDIO, false),
CPU_JIT(SettingKeys.use_cpu_jit(), Settings.SECTION_CORE, true),
HW_SHADER(SettingKeys.use_hw_shader(), Settings.SECTION_RENDERER, true),
SHADER_JIT(SettingKeys.use_shader_jit(), Settings.SECTION_RENDERER, true),
@ -55,11 +54,9 @@ enum class BooleanSetting(
USE_ARTIC_BASE_CONTROLLER(SettingKeys.use_artic_base_controller(), Settings.SECTION_CONTROLS, false),
UPRIGHT_SCREEN(SettingKeys.upright_screen(), Settings.SECTION_LAYOUT, false),
COMPRESS_INSTALLED_CIA_CONTENT(SettingKeys.compress_cia_installs(), Settings.SECTION_STORAGE, false),
ASYNC_FS_OPERATIONS(SettingKeys.async_fs_operations(), Settings.SECTION_STORAGE, true),
ANDROID_HIDE_IMAGES(SettingKeys.android_hide_images(), Settings.SECTION_MISC, false),
APPLY_REGION_FREE_PATCH(SettingKeys.apply_region_free_patch(), Settings.SECTION_SYSTEM, true),
USE_INTEGER_SCALING(SettingKeys.use_integer_scaling(), Settings.SECTION_RENDERER, false),
SIMULATE_3DS_GPU_TIMINGS(SettingKeys.simulate_3ds_gpu_timings(), Settings.SECTION_RENDERER, true);
USE_INTEGER_SCALING(SettingKeys.use_integer_scaling(), Settings.SECTION_RENDERER, false);
override var boolean: Boolean = defaultValue
@ -94,7 +91,6 @@ enum class BooleanSetting(
SHADERS_ACCURATE_MUL,
USE_ARTIC_BASE_CONTROLLER,
COMPRESS_INSTALLED_CIA_CONTENT,
ASYNC_FS_OPERATIONS,
ANDROID_HIDE_IMAGES,
PERF_OVERLAY_ENABLE, // Works in overlay options, but not from the settings menu
APPLY_REGION_FREE_PATCH

View file

@ -4,8 +4,6 @@
package org.citra.citra_emu.features.settings.model
import org.citra.citra_emu.features.settings.SettingKeys
enum class IntListSetting(
override val key: String,
override val section: String,
@ -13,7 +11,7 @@ enum class IntListSetting(
val canBeEmpty: Boolean = true
) : AbstractListSetting<Int> {
LAYOUTS_TO_CYCLE(SettingKeys.layouts_to_cycle(), Settings.SECTION_LAYOUT, listOf(0, 1, 2, 3, 4, 5), canBeEmpty = false);
LAYOUTS_TO_CYCLE("layouts_to_cycle", Settings.SECTION_LAYOUT, listOf(0, 1, 2, 3, 4, 5), canBeEmpty = false);
private var backingList: List<Int> = defaultValue
private var lastValidList : List<Int> = defaultValue

View file

@ -17,7 +17,7 @@ enum class IntSetting(
CAMERA_INNER_FLIP(SettingKeys.camera_inner_flip(), Settings.SECTION_CAMERA, 0),
CAMERA_OUTER_LEFT_FLIP(SettingKeys.camera_outer_left_flip(), Settings.SECTION_CAMERA, 0),
CAMERA_OUTER_RIGHT_FLIP(SettingKeys.camera_outer_right_flip(), Settings.SECTION_CAMERA, 0),
GRAPHICS_API(SettingKeys.graphics_api(), Settings.SECTION_RENDERER, 2),
GRAPHICS_API(SettingKeys.graphics_api(), Settings.SECTION_RENDERER, 1),
RESOLUTION_FACTOR(SettingKeys.resolution_factor(), Settings.SECTION_RENDERER, 1),
STEREOSCOPIC_3D_MODE(SettingKeys.render_3d(), Settings.SECTION_RENDERER, 2),
STEREOSCOPIC_3D_DEPTH(SettingKeys.factor_3d(), Settings.SECTION_RENDERER, 0),

View file

@ -599,15 +599,6 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
BooleanSetting.COMPRESS_INSTALLED_CIA_CONTENT.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.ASYNC_FS_OPERATIONS,
R.string.async_fs_operations,
R.string.async_fs_operations_description,
BooleanSetting.ASYNC_FS_OPERATIONS.key,
BooleanSetting.ASYNC_FS_OPERATIONS.defaultValue
)
)
}
}
@ -1284,7 +1275,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
override val section = null
override val isRuntimeEditable = false
override val valueAsString = int.toString()
override val defaultValue = FloatSetting.BACKGROUND_RED.defaultValue.toInt()
override val defaultValue = FloatSetting.BACKGROUND_RED.defaultValue
}
add(
SliderSetting(
@ -1307,7 +1298,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
override val section = null
override val isRuntimeEditable = false
override val valueAsString = int.toString()
override val defaultValue = FloatSetting.BACKGROUND_GREEN.defaultValue.toInt()
override val defaultValue = FloatSetting.BACKGROUND_GREEN.defaultValue
}
add(
SliderSetting(
@ -1330,7 +1321,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
override val section = null
override val isRuntimeEditable = false
override val valueAsString = int.toString()
override val defaultValue = FloatSetting.BACKGROUND_BLUE.defaultValue.toInt()
override val defaultValue = FloatSetting.BACKGROUND_BLUE.defaultValue
}
add(
SliderSetting(
@ -1713,15 +1704,6 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
BooleanSetting.ENABLE_REALTIME_AUDIO.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.SIMULATE_HEADPHONES_PLUGGED,
R.string.simulate_headphones_plugged,
R.string.simulate_headphones_plugged_description,
BooleanSetting.SIMULATE_HEADPHONES_PLUGGED.key,
BooleanSetting.SIMULATE_HEADPHONES_PLUGGED.defaultValue
)
)
add(
SingleChoiceSetting(
IntSetting.AUDIO_INPUT_TYPE,
@ -1808,15 +1790,6 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
BooleanSetting.VSYNC.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.SIMULATE_3DS_GPU_TIMINGS,
R.string.simulate_3ds_gpu_timings,
R.string.simulate_3ds_gpu_timings_description,
BooleanSetting.SIMULATE_3DS_GPU_TIMINGS.key,
BooleanSetting.SIMULATE_3DS_GPU_TIMINGS.defaultValue
)
)
add(
SwitchSetting(
BooleanSetting.DEBUG_RENDERER,

View file

@ -543,9 +543,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
}
override fun onDestroy() {
if (::emulationState.isInitialized && requireActivity().isFinishing) {
emulationState.stop()
}
EmulationLifecycleUtil.removeHook(onPause)
EmulationLifecycleUtil.removeHook(onShutdown)
if (gameFd != null) {

View file

@ -1,4 +1,4 @@
// Copyright Citra Emulator Project / Azahar Emulator Project
// Copyright 2023 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@ -78,9 +78,8 @@ class GamesViewModel : ViewModel() {
val filteredList = sortedList.filter {
if (it.isSystemTitle) {
it.isVisibleSystemTitle
} else {
true
}
true
}
_games.value = filteredList

View file

@ -179,7 +179,6 @@ void Config::ReadValues() {
ReadSetting("Renderer", Settings::values.bg_blue);
ReadSetting("Renderer", Settings::values.custom_second_layer_opacity);
ReadSetting("Renderer", Settings::values.delay_game_render_thread_us);
ReadSetting("Renderer", Settings::values.simulate_3ds_gpu_timings);
ReadSetting("Renderer", Settings::values.disable_right_eye_render);
ReadSetting("Renderer", Settings::values.swap_eyes_3d);
ReadSetting("Renderer", Settings::values.render_3d_which_display);
@ -232,7 +231,6 @@ void Config::ReadValues() {
// Storage
ReadSetting("Storage", Settings::values.compress_cia_installs);
ReadSetting("Storage", Settings::values.async_fs_operations);
// Utility
ReadSetting("Utility", Settings::values.dump_textures);
@ -244,7 +242,6 @@ void Config::ReadValues() {
ReadSetting("Audio", Settings::values.audio_emulation);
ReadSetting("Audio", Settings::values.enable_audio_stretching);
ReadSetting("Audio", Settings::values.enable_realtime_audio);
ReadSetting("Audio", Settings::values.simulate_headphones_plugged);
ReadSetting("Audio", Settings::values.volume);
ReadSetting("Audio", Settings::values.output_type);
ReadSetting("Audio", Settings::values.output_device);
@ -319,7 +316,6 @@ void Config::ReadValues() {
ReadSetting("Debugging", Settings::values.instant_debug_log);
ReadSetting("Debugging", Settings::values.enable_rpc_server);
ReadSetting("Debugging", Settings::values.toggle_unique_data_console_type);
ReadSetting("Debugging", Settings::values.break_on_unmapped_memory_access);
for (const auto& service_module : Service::service_module_map) {
bool use_lle =
@ -339,13 +335,14 @@ void Config::Reload() {
for (auto key = Settings::Keys::keys_array.begin(); key != Settings::Keys::keys_array.end();
++key) {
const auto key_declaration_string = std::string(*key) + " =";
if ((std::ranges::find(DefaultINI::android_config_omitted_keys, *key) ==
std::end(DefaultINI::android_config_omitted_keys)) &&
(std::string(DefaultINI::android_config_default_file_content)
.find(key_declaration_string) == std::string::npos)) {
// FIXME: This code looks so ass when formatted by clang-format -OS
if (std::ranges::find(DefaultINI::android_config_omitted_keys, *key) ==
std::end(DefaultINI::android_config_omitted_keys) &&
std::string(DefaultINI::android_config_default_file_content)
.find(key_declaration_string) == std::string::npos) {
ASSERT_MSG(false,
"Validation of default config content (jni/default_ini.h) failed: Missing "
"declaration for key '{}'",
"Validation of default content config failed: Missing or malformed key "
"declaration {}",
*key);
}
}

View file

@ -35,10 +35,7 @@ constexpr std::array android_config_omitted_keys = {
Keys::audio_encoder,
Keys::audio_encoder_options,
Keys::audio_bitrate,
Keys::last_artic_base_addr, // On Android, this value is stored as a "preference"
Keys::break_on_unmapped_memory_access, // Does nothing as the error is ignored
Keys::use_gdbstub, // GDB functionality disabled by deafult on Android
Keys::gdbstub_port,
Keys::last_artic_base_addr, // On Android, this value is stored as a "preference"
};
// clang-format off
@ -93,7 +90,7 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"(
[Renderer]
# Whether to render using OpenGL
# 1: OpenGL ES, 2: Vulkan (default)
# 1: OpenGL ES (default), 2: Vulkan
)") DECLARE_KEY(graphics_api) BOOST_HANA_STRING(R"(
# Whether to compile shaders on multiple worker threads (Vulkan only)
@ -199,10 +196,6 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"(
# Set to 0 for no delay, only useful in dynamic-fps games to simulate GPU delay.
)") DECLARE_KEY(delay_game_render_thread_us) BOOST_HANA_STRING(R"(
# Delays GPU completion events based on measurements taken from real hardware
# 0: No delay, 1 (default): Enable delay
)") DECLARE_KEY(simulate_3ds_gpu_timings) BOOST_HANA_STRING(R"(
# Disables rendering the right eye image
# Greatly improves performance in some games, but can cause flickering in others.
# 0 : Enable right eye rendering, 1: Disable right eye rendering
@ -278,10 +271,6 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"(
# 0 (default): Do not compress, 1: Compress
)") DECLARE_KEY(compress_cia_installs) BOOST_HANA_STRING(R"(
# Whether to enable async filesystem operations
# 0: Disabled, 1 (default): Enabled
)") DECLARE_KEY(async_fs_operations) BOOST_HANA_STRING(R"(
# Position of the performance overlay
# 0: Top Left
# 1: Center Top
@ -415,10 +404,6 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"(
# 0 (default): No, 1: Yes
)") DECLARE_KEY(enable_realtime_audio) BOOST_HANA_STRING(R"(
# Simulates whether headphones are plugged in to the emulated 3DS system
# 0 (default): No, 1: Yes
)") DECLARE_KEY(simulate_headphones_plugged) BOOST_HANA_STRING(R"(
# Output volume.
# 1.0 (default): 100%, 0.0; mute
)") DECLARE_KEY(volume) BOOST_HANA_STRING(R"(
@ -542,6 +527,10 @@ static const char* android_config_default_file_content = (BOOST_HANA_STRING(R"(
# 0 (default): Off, 1: On
)") DECLARE_KEY(renderer_debug) BOOST_HANA_STRING(R"(
# Port for listening to GDB connections.
)") DECLARE_KEY(use_gdbstub) BOOST_HANA_STRING(R"(
)") DECLARE_KEY(gdbstub_port) BOOST_HANA_STRING(R"(
# Flush log output on every message
# Immediately commits the debug log to file. Use this if Azahar crashes and the log output is being cut.
)") DECLARE_KEY(instant_debug_log) BOOST_HANA_STRING(R"(

View file

@ -1130,44 +1130,4 @@ jboolean Java_org_citra_citra_1emu_NativeLibrary_nativeFileExists(JNIEnv* env, j
return FileUtil::Exists(path);
}
void Java_org_citra_citra_1emu_NativeLibrary_deleteOpenGLShaderCache(JNIEnv* env, jobject obj,
jlong title_id) {
for (const std::string_view cache_type : {"separable", "conventional"}) {
const std::string path =
fmt::format("{}opengl/precompiled/{}/{:016X}.bin",
FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir), cache_type, title_id);
LOG_INFO(Frontend, "Deleting shader file: {}", path);
FileUtil::Delete(path);
}
const std::string path =
fmt::format("{}opengl/transferable/{:016X}.bin",
FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir), title_id);
LOG_INFO(Frontend, "Deleting shader file: {}", path);
FileUtil::Delete(path);
}
void Java_org_citra_citra_1emu_NativeLibrary_deleteVulkanShaderCache(JNIEnv* env, jobject obj,
jlong title_id) {
for (const std::string_view cache_type : {"vs", "fs", "gs", "pl"}) {
const std::string path =
fmt::format("{}vulkan/transferable/{:016X}_{}.vkch",
FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir), title_id, cache_type);
LOG_INFO(Frontend, "Deleting shader file: {}", path);
FileUtil::Delete(path);
}
FileUtil::ForeachDirectoryEntry(
nullptr,
fmt::format("{}vulkan/pipeline", FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir)),
[title_id]([[maybe_unused]] u64* num_entries_out, const std::string& directory,
const std::string& virtual_name) {
if (virtual_name.starts_with(fmt::format("{:016X}", title_id))) {
std::string path = directory + DIR_SEP + virtual_name;
LOG_INFO(Frontend, "Deleting shader file: {}", path);
FileUtil::Delete(path);
}
return true;
});
}
} // extern "C"
} // extern "C"

View file

@ -161,7 +161,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/horizontal_layout_2"
android:id="@+id/game_button_tray"
style="@style/ThemeOverlay.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -199,24 +199,19 @@
</LinearLayout>
<LinearLayout
android:id="@+id/horizontal_layout_3"
android:id="@+id/compress_tray"
style="@style/ThemeOverlay.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="start|center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/horizontal_layout_2">
app:layout_constraintTop_toBottomOf="@+id/game_button_tray">
<com.google.android.material.button.MaterialButton
android:id="@+id/delete_cache"
style="@style/Widget.Material3.Button.TonalButton.Icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/delete_shader_cache"
android:text="@string/delete_shader_cache" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -5,13 +5,13 @@
android:id="@+id/coordinator_about"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="?attr/colorSurface">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_about"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar_system_files"

View file

@ -212,6 +212,7 @@
<string name="storage">Emmagatzematge</string>
<string name="compress_cia_installs">Comprimir el contingut de CIAs instal·lats</string>
<string name="compress_cia_installs_description">Comprimix el contingut de fitxers CIA quan són instal·lats a la SD emulada. Només afecta contingut CIA instal·lat amb esta opció activada.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Càmera interior</string>
<string name="outer_left_camera">Càmera esquerra externa</string>
@ -370,6 +371,7 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="learn_more">Més Informació</string>
<string name="close">Tancar</string>
<string name="reset_to_default">Restablir valors de fàbrica</string>
<string name="redump_games"><![CDATA[Per favor, seguix les guies per a bolcar els teus <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">cartutxos de joc</a> i/o <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">títols instal·lats</a>.]]></string>
<string name="option_default">Per omissió</string>
<string name="none">Cap</string>
<string name="auto">Auto</string>
@ -411,7 +413,9 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<string name="preferences_theme">Tema i Color</string>
<string name="preferences_layout">Estil</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">La teua ROM està encriptada</string>
<string name="loader_error_invalid_format">Format de ROM no vàlid</string>
<string name="loader_error_file_not_found">El fitxer ROM no existix</string>
<string name="no_game_present">No hi ha cap joc iniciable!</string>
@ -562,10 +566,6 @@ S\'esperen errors gràfics temporals quan estigue activat.</string>
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Preparant ombrejadors</string>
<string name="building_shaders">Construint%s</string>
<string name="delete_shader_cache">Eliminar cache d\'ombrejadors</string>
<string name="delete_cache_select_backend">Selecciona l\'API gràfica per a eliminar la cache d\'ombrejadors</string>
<string name="deleting_shader_cache">Eliminant la caché d\'ombrejadors, per favor espere…</string>
<string name="shader_cache_deleted">Caché d\'ombrejadors eliminada</string>
<!-- About Game Dialog -->
<string name="play">Jugar</string>

View file

@ -203,6 +203,7 @@
<string name="storage">Lager</string>
<string name="compress_cia_installs">Komprimer installeret CIA-indhold</string>
<string name="compress_cia_installs_description">Komprimerer indholdet af CIA-filer, når de installeres på det emulerede SD-kort. Påvirker kun CIA-indhold, der installeres, når indstillingen er aktiveret.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Indre kamera</string>
<string name="outer_left_camera">Ydre venstre kamera</string>
@ -395,7 +396,9 @@
<string name="preferences_theme">Tema og farve</string>
<string name="preferences_layout">Layout</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Din ROM er krypteret</string>
<string name="loader_error_invalid_format">Ugyldigt ROM-format</string>
<string name="loader_error_file_not_found">ROM-fil eksisterer ikke</string>
<string name="no_game_present">Intet startbart spil til stede!</string>

View file

@ -1,332 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_disclaimer">Este software ejecutará aplicaciones para la consola portátil Nintendo 3DS. No se incluyen juegos.\n\nAntes de comenzar con la emulación, seleccione una carpeta para almacenar los datos de usuario de Azahar en.\n\nQué es ésto:\n<a href='https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage'>Wiki - Datos de usuario de Azahar Android y almacenamiento</a></string>
<string name="app_notification_channel_description">Notificaciones del emulador 3DS Azahar</string>
<string name="app_notification_running">Azahar está ejecutándose</string>
<string name="app_game_install_description">A continuación, deberás seleccionar una Carpeta de Aplicaciones. Azahar mostrará todas las ROM de 3DS de la carpeta seleccionada en la aplicación.\n\nLas ROM CIA, actualizaciones y los DLC deben instalarse por separado haciendo clic en el icono de la carpeta y seleccionando Instalar CIA.</string>
<!-- Home Strings -->
<string name="grid_menu_core_settings">Configuración</string>
<string name="home_options">Opciones</string>
<string name="home_search">Buscar</string>
<string name="home_games">Aplicaciones</string>
<string name="settings_description">Configurar opciones del emulador</string>
<string name="install_game_content">Instalar archivo CIA</string>
<string name="install_game_content_description">Instalar aplicaciones, actualizaciones o DLC</string>
<string name="share_log">Compartir Registro</string>
<string name="share_log_description">Compartir el archivo de registro de Azahar para depurar problemas</string>
<string name="gpu_driver_manager">Administrador de drivers de GPU</string>
<string name="install_gpu_driver">Instalar drivers de GPU</string>
<string name="install_gpu_driver_description">Instala drivers alternativos para intentar mejorar el rendimiento o la precisión</string>
<string name="driver_already_installed">Driver ya instalado</string>
<string name="custom_driver_not_supported">Drivers personalizados no compatibles</string>
<string name="custom_driver_not_supported_description">La carga de drivers personalizados no es compatible en este dispositivo.\n¡Comprueba esta opción otra vez en el futuro para ver si ya está disponible!</string>
<string name="share_log_not_found">No se encontró ningún archivo de registro</string>
<string name="select_games_folder">Selecciona el directorio de aplicaciones</string>
<string name="select_games_folder_description">Permite que Azahar llene la lista de aplicaciones</string>
<string name="about">Acerca de</string>
<string name="citra_description">Un emulador de 3DS de código abierto</string>
<string name="about_description">Versión de compilación, créditos y más</string>
<string name="games_dir_selected">Directorio de aplicaciones seleccionado</string>
<string name="select_citra_user_folder_home_description">Cambia los archivos que Azahar usa para cargar aplicaciones</string>
<string name="theme_and_color_description">Cambia la apariencia de la app</string>
<string name="install_cia_title">Instalar CIA</string>
<!-- GPU driver installation -->
<string name="select_gpu_driver">Seleccionar driver de GPU</string>
<string name="select_gpu_driver_title">¿Quieres reemplazar tu driver actual de GPU?</string>
<string name="select_gpu_driver_install">Instalar</string>
<string name="select_gpu_driver_default">Por defecto</string>
<string name="select_gpu_driver_install_success">Instalado %s</string>
<string name="select_gpu_driver_use_default">Usando el driver por defecto de la GPU</string>
<string name="select_gpu_driver_error">¡El driver seleccionado no es válido, se usará el driver por defecto del sistema!</string>
<string name="system_gpu_driver">Driver de la GPU del sistema</string>
<string name="installing_driver">Instalando el driver...</string>
<!-- About screen strings -->
<string name="copied_to_clipboard">Copiado al portapapeles</string>
<string name="contributors">Colaboradores</string>
<string name="contributors_description">Colaboradores que hicieron posible Azahar</string>
<string name="licenses_description">Proyectos utilizados por Azahar para Android</string>
<string name="build">Compilación</string>
<string name="licenses">Licencias</string>
<!-- Setup strings -->
<string name="welcome">¡Te damos la bienvenida!</string>
<string name="welcome_description">Aprende a configurar &lt;b>Azahar&lt;/b> y disfruta de la emulación.</string>
<string name="get_started">Comenzar</string>
<string name="step_complete">¡Completado!</string>
<string name="games">Aplicaciones</string>
<string name="games_description">Selecciona la carpeta de &lt;b>Aplicaciones&lt;/b> con el botón de abajo.</string>
<string name="done">Terminado</string>
<string name="done_description">¡Ya estás listo!\n¡Disfruta del emulador!</string>
<string name="text_continue">Continuar</string>
<string name="notifications">Notificaciones</string>
<string name="notifications_description">Concede el permiso de notificaciones con el botón de abajo.</string>
<string name="give_permission">Conceder permiso</string>
<string name="notification_warning">¿Omitir el permiso de notificaciones?</string>
<string name="notification_warning_description">Azahar no podrá notificarte sobre información importante.</string>
<string name="filesystem_permission_warning">Faltan permisos</string>
<string name="filesystem_permission_warning_description">Azahar necesita permiso para administrar archivos en este dispositivo para poder almacenar y administrar los datos de usuario.\n\nPor favor, concede el permiso antes de continuar.</string>
<string name="camera_permission">Cámara</string>
<string name="camera_permission_description">Concede el permiso de cámara para emular la cámara de la 3DS.</string>
<string name="microphone_permission">Micrófono</string>
<string name="microphone_permission_description">Concede el permiso de micrófono para emular el micrófono de la 3DS.</string>
<string name="filesystem_permission">Sistema de archivos</string>
<string name="filesystem_permission_description">Concede el permiso de sistema de archivos para permitir que Azahar almacene archivos.</string>
<string name="permission_denied">Permiso denegado</string>
<string name="add_games_warning">¿Omitir la selección de la carpeta de aplicaciones?</string>
<string name="add_games_warning_description">No se mostrará nada en la lista de aplicaciones si no se selecciona una carpeta.</string>
<string name="permissions">Permisos</string>
<string name="select_emulator_data_folders">Carpetas de datos</string>
<string name="select_emulator_data_folders_description"><![CDATA[Seleccionar carpetas de datos<br/>(Carpeta de usuario es necesaria)]]></string>
<string name="permissions_description">Concede permisos opcionales para usar funciones específicas del emulador</string>
<string name="warning_help">Ayuda</string>
<string name="warning_skip">Omitir</string>
<string name="warning_cancel">Cancelar</string>
<string name="select_citra_user_folder">Selecciona la carpeta de usuario</string>
<string name="select_citra_user_folder_description"><![CDATA[Selecciona tu directorio de <a href=\"https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage\">datos de usuario</a> con el botón de abajo.]]></string>
<string name="select_which_user_directory_to_use">Parece que tienes directorios de usuario configurados tanto para Lime3DS como para Azahar. Probablemente se deba a que actualizaste a Azahar y, cuando se te pidió, elegiste un directorio de usuario diferente al que usabas para Lime3DS.\n\nEsto puede haberte hecho pensar que perdiste partidas guardadas u otras configuraciones; te pedimos disculpas si eso ocurrió.\n\n¿Prefieres volver a usar tu directorio de usuario original de Lime3DS, restaurando la configuración y las partidas guardadas de Lime3DS, o conservar tu directorio de usuario actual de Azahar?\n\nNinguno de los directorios se eliminará, independientemente de tu elección, y puedes cambiar libremente entre ellos usando la opción \"Selecciona la carpeta de usuario\".</string>
<string name="keep_current_azahar_directory">Mantener el directorio actual de Azahar</string>
<string name="use_prior_lime3ds_directory">Usar el directorio de Lime3DS anterior</string>
<string name="select">Seleccionar</string>
<string name="cannot_skip">No puedes omitir configurar la carpeta de usuario</string>
<string name="cannot_skip_directory_description">Este paso es necesario para permitir que Azahar funcione. Por favor, selecciona un directorio y luego puedes continuar.</string>
<string name="selecting_user_directory_without_write_permissions">Has perdido los permisos de escritura en tu <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">directorio de datos de usuario</a>, donde se guardan las partidas guardadas y otra información. Esto puede ocurrir después de actualizar Android o algunas aplicaciones. Vuelve a seleccionar el directorio para recuperar los permisos y poder continuar.</string>
<string name="invalid_selection">Selección no válida</string>
<string name="invalid_user_directory">La selección del directorio de usuario no es válida.\nVuelve a seleccionar el directorio de usuario, asegurándote de navegar hasta él desde la raíz del almacenamiento del dispositivo.</string>
<string name="filesystem_permission_lost">Azahar ha perdido el permiso para administrar archivos en este dispositivo. Esto puede ocurrir después de actualizar Android o algunas aplicaciones. Vuelve a conceder este permiso en la siguiente pantalla para seguir usando la aplicación.</string>
<string name="set_up_theme_settings">Configuración del tema</string>
<string name="setup_theme_settings_description">Configura tus preferencias de tema de Azahar.</string>
<string name="setup_set_theme">Establecer tema</string>
<!-- Search Strings -->
<string name="search_and_filter_games">Buscar y filtrar aplicaciones</string>
<string name="home_search_games">Buscar aplicaciones</string>
<string name="search_recently_played">Jugado recientemente</string>
<string name="search_recently_added">Añadido recientemente</string>
<string name="search_installed">Instalados</string>
<!-- Input related strings -->
<string name="controller_auto_map">Asignar control automáticamente</string>
<string name="controller_auto_map_description">Aplica la asignación de control estándar para todos los botones y ejes</string>
<string name="auto_map_prompt">¡Presiona este botón en tu control!</string>
<string name="auto_map_image_description">Botones frontales de 3DS en rombo con el botón A resaltado</string>
<string name="controller_clear_all">Eliminar todas las asignaciones</string>
<string name="controller_clear_all_confirm">Esto eliminará todas los asignaciones del control actual.</string>
<string name="controller_circlepad">Circle Pad</string>
<string name="controller_c">Palanca C</string>
<string name="controller_hotkeys">Teclas de atajo</string>
<string name="controller_hotkeys_description">Si la tecla \"Habilitar teclas de acceso rápido\" está asignada, se debe presionar esa tecla además de la tecla de acceso rápido asignada</string>
<string name="controller_hotkey_enable_button">Habilitar teclas de acceso rápido</string>
<string name="controller_triggers">Gatillos</string>
<string name="controller_trigger">Gatillo</string>
<string name="controller_dpad">Cruceta</string>
<string name="controller_dpad_axis">Cruceta (eje)</string>
<string name="controller_dpad_axis_description">Es posible que algunos controles no puedan asignar la Cruceta como un eje. Si ese es el caso, utilice la sección Cruceta (botones).</string>
<string name="controller_dpad_button">Cruceta (botón)</string>
<string name="controller_dpad_button_description">Solamente asigne la Cruceta a éstos si tiene problemas con las asignaciones de botones de la Cruceta (eje).</string>
<string name="controller_axis_vertical">Eje vertical</string>
<string name="controller_axis_horizontal">Eje horizontal</string>
<string name="direction_up">Arriba</string>
<string name="direction_down">Abajo</string>
<string name="direction_left">Izquierda</string>
<string name="direction_right">Derecha</string>
<string name="input_dialog_title">Asigna %1$s %2$s</string>
<string name="input_dialog_description">Presiona un botón o mueve una palanca</string>
<string name="input_binding">Asignación de botones</string>
<string name="input_binding_description">Pulsa un botón o mueve una palanca para asignarlo a %1$s.</string>
<string name="input_binding_description_vertical_axis">Presiona ARRIBA en tu joystick.</string>
<string name="input_binding_description_horizontal_axis">Presiona DERECHA en tu joystick.</string>
<string name="button_home">HOME</string>
<string name="button_swap">Intercambiar pantallas</string>
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">¡Este control debe asignarse a una palanca analógica o a un eje de la Cruceta!</string>
<string name="input_message_button_only">¡Este dispositivo debe asignarse a un botón del control!</string>
<string name="turbo_limit_hotkey">Velocidad turbo</string>
<string name="turbo_enabled_toast">Velocidad turbo activada</string>
<string name="turbo_disabled_toast">Velocidad turbo desactivada</string>
<!-- System files strings -->
<string name="setup_system_files">Archivos del sistema</string>
<string name="setup_system_files_description">Realizar operaciones de archivos del sistema, como instalar archivos del sistema o iniciar el Menú Home</string>
<string name="setup_tool_connect">Conectar con la herramienta de configuración Artic</string>
<string name="setup_system_files_preamble"><![CDATA[Azahar necesita archivos de una consola real para poder utilizar algunas de sus funciones. Puedes obtener los archivos con la <a href=https://github.com/azahar-emu/ArticSetupTool>herramienta de configuración Artic</a>.<br>Notas:<ul><li><b>Esta operación instalará archivos únicos de la consola en Azahar, ¡no compartas las carpetas de usuario ni nand después de realizar el proceso de configuración!</b></li><li>Tras la configuración, Azahar se vinculará a la consola que ha ejecutado la herramienta de configuración. Puedes desvincular la consola más tarde desde la pestaña \"Archivos de sistema\" del menú de opciones del emulador.</li><li>No te conectes en línea con Azahar y la consola 3DS al mismo tiempo después de configurar los archivos del sistema, ya que esto podría causar problemas.</li><li>Se necesita la configuración de Old 3DS para que la New 3DS funcione (se recomienda configurar ambos modos).</li><li>Ambos modos de configuración funcionarán independientemente del modelo de la consola donde se ejecute la herramienta.</li></ul>]]></string>
<string name="setup_system_files_detect">Obteniendo el estado actual de los archivos del sistema, por favor espere...</string>
<string name="delete_system_files">Desvincular datos únicos de la consola</string>
<string name="delete_system_files_description"><![CDATA[Esta acción desvinculará tu consola real de Azahar, con las siguientes consecuencias:<br><ul><li>OTP, SecureInfo y LocalFriendCodeSeed serán eliminados de Azahar.</li><li>Tu lista de amigos se restablecerá y se cerrará la sesión de tu cuenta NNID/PNID.</li><li>Los archivos del sistema y los títulos de la eShop obtenidos a través de Azahar obtenidos a través de Azahar se volverán inaccesibles hasta que la misma consola se vincule nuevamente usando la herramienta de configuración (los datos guardados no se perderán).</li></ul><br>¿Continuar?]]></string>
<string name="setup_system_files_o3ds">Configuración de Old 3DS</string>
<string name="setup_system_files_n3ds">Configuración de New 3DS</string>
<string name="setup_system_files_possible">La configuración es posible.</string>
<string name="setup_system_files_o3ds_needed">La configuración Old 3DS es necesaria primero.</string>
<string name="setup_system_files_completed">Configuración completa.</string>
<string name="setup_system_files_enter_address">Ingresa la dirección de la herramienta de configuración Artic</string>
<string name="setup_system_files_preparing">Preparando configuración, por favor espere...</string>
<string name="boot_home_menu">Cargar el Menú HOME</string>
<string name="show_home_apps">Mostrar las aplicaciones del menú HOME en la lista de aplicaciones</string>
<string name="run_system_setup">Ejecutar la configuración de la consola cuando se ejecute el Menú HOME</string>
<string name="home_menu">Menú HOME</string>
<!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Botones</string>
<string name="button">Botón</string>
<!-- System settings strings -->
<string name="emulation_settings">Opciones de emulación</string>
<string name="username">Nombre de usuario</string>
<string name="new_3ds">Modo New 3DS</string>
<string name="lle_applets">Usar Applets LLE (si están instaladas)</string>
<string name="apply_region_free_patch">Aplicar parche de región libre a las aplicaciones instaladas</string>
<string name="apply_region_free_patch_desc">Parchea la región de las aplicaciones instaladas para que estén libres de región, de modo que siempre aparezcan en el menú home.</string>
<string name="enable_required_online_lle_modules">Habilitar los módulos LLE necesarios para las funciones en línea (si están instalados)</string>
<string name="enable_required_online_lle_modules_desc">Habilita los módulos LLE necesarios para el modo multijugador en línea, acceso a la eShop, etc.</string>
<string name="clock">Reloj</string>
<string name="init_clock">Reloj</string>
<string name="init_clock_description">Configura el reloj emulado de la 3DS para que tenga la misma fecha y hora de tu dispositivo o para simular una distinta.</string>
<string name="device_clock">Reloj del sistema</string>
<string name="simulated_clock">Reloj simulado</string>
<string name="simulated_clock_description">Si el reloj está en \"Reloj simulado\", esto cambia la fecha y hora de inicio.</string>
<string name="profile_settings">Opciones de perfil</string>
<string name="emulated_region">Región</string>
<string name="emulated_language">Idioma</string>
<string name="birthday">Cumpleaños</string>
<string name="birthday_month">Mes</string>
<string name="birthday_day">Día</string>
<string name="country">País</string>
<string name="play_coins">Monedas de juego</string>
<string name="steps_per_hour">Pasos por hora del podómetro</string>
<string name="steps_per_hour_description">Número de pasos por hora reportados por el podómetro. Rango de 0 a 65.535.</string>
<string name="console_id">ID de la Consola</string>
<string name="regenerate_console_id">Regenerar ID de la consola</string>
<string name="regenerate_console_id_description">Esto reemplazará tu ID de consola de 3DS virtual por una nueva. Tu ID virtual actual será irrecuperable. Esto puede tener efectos inesperados en algunas aplicaciones. Si usas un archivo de configuración obsoleto esto podría fallar. ¿Quieres continuar?</string>
<string name="mac_address">Dirección MAC</string>
<string name="regenerate_mac_address">Regenerar dirección MAC</string>
<string name="regenerate_mac_address_description">Esto reemplazará tu dirección MAC actual por una nueva. No se recomienda hacerlo si obtuviste la dirección MAC de tu consola real con la herramienta de configuración. ¿Quieres continuar?</string>
<string name="plugin_loader">Cargador de complementos 3GX</string>
<string name="plugin_loader_description">Carga los complementos 3GX de la SD emulada si están disponibles.</string>
<string name="allow_plugin_loader">Permite que las aplicaciones cambien el estado del cargador de complementos.</string>
<string name="allow_plugin_loader_description">Permite que las apps de homebrew activen el cargador de complementos incluso cuando está desactivado.</string>
<string name="region_mismatch">Advertencia de región no válida</string>
<string name="region_mismatch_emulated">La configuración del país no es válida para la región emulada seleccionada.</string>
<string name="region_mismatch_console">La configuración del país no es válida para la consola vinculada actual.</string>
<string name="storage">Almacenamiento</string>
<string name="compress_cia_installs">Comprimir contenido CIA instalado</string>
<string name="compress_cia_installs_description">Comprime el contenido de archivos CIA cuando son instalados a la SD emulada. Solo afecta contenido CIA instalado con esta opción activada.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Cámara interior</string>
<string name="outer_left_camera">Cámara izquierda externa</string>
<string name="outer_right_camera">Cámara derecha externa</string>
<string name="image_source">Fuente de la imagen de la cámara</string>
<string name="image_source_description">Configura la fuente de imagen de la cámara virtual. Puedes usar un archivo de imagen o una cámara si es compatible.</string>
<string name="camera_device">Cámara</string>
<string name="camera_device_description">Si la \"Fuente de imagen\" está en \"Cámara del dispositivo\", se usará la cámara del propio dispositivo.</string>
<string name="camera_facing_front">Frontal</string>
<string name="camera_facing_back">Trasera</string>
<string name="camera_facing_external">Externa</string>
<string name="image_flip">Rotación</string>
<!-- Graphics settings strings -->
<string name="renderer">Motor gráfico</string>
<string name="graphics_api">API gráfica</string>
<string name="spirv_shader_gen">Activar generación de shaders SPIR-V</string>
<string name="spirv_shader_gen_description">Usa SPIR-V en vez de GLSL para emitir el shader de fragmentos usado para emular PICA.</string>
<string name="disable_spirv_optimizer">Desactivar el optimizador de SPIR-V</string>
<string name="disable_spirv_optimizer_description">Desactiva el paso de optimización SPIR-V reduciendo considerablemente los tirones y afectando muy poco el rendimiento.</string>
<string name="async_shaders">Activar compilación asíncrona de shaders</string>
<string name="async_shaders_description">Compila los shaders en segundo plano para reducir los tirones durante la partida. Habrá fallos gráficos temporales cuando esté activado.</string>
<string name="linear_filtering">Filtrado lineal</string>
<string name="linear_filtering_description">Activa el filtrado linear, que hace que los gráficos del juego se vean más suaves.</string>
<string name="use_integer_scaling">Escalado de enteros</string>
<string name="use_integer_scaling_description">Escala las pantallas usando un multiplicador entero basado en la resolución original de 3DS. En diseños con dos tamaños de pantalla diferentes, la más grande usará el escalado de enteros.</string>
<string name="texture_filter_name">Filtrado de texturas</string>
<string name="texture_filter_description">Mejora los gráficos visuales de las aplicaciones aplicando un filtro a las texturas. Los filtros compatibles son Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale y MMPX.</string>
<string name="delay_render_thread">Atrasar hilo del motor gráfico del juego</string>
<string name="delay_render_thread_description">Retrasa el hilo del motor gráfico del juego cuando envía datos a la GPU. Ayuda con los problemas de rendimiento en las (muy pocas) aplicaciones con tasas de fotogramas dinámicas.</string>
<string name="advanced">Avanzado</string>
<string name="texture_sampling_name">Muestreo de texturas</string>
<string name="texture_sampling_description">Sobrescribe el filtro de muestreo original del juego. Puede ser útil en ciertos casos con juegos con problemas gráficos al aumentar la resolución. Si no estás seguro, déjalo en Controlado por juego.</string>
<string name="shaders_accurate_mul">Multiplicación precisa</string>
<string name="shaders_accurate_mul_description">Usa una multiplicación más precisa en los shaders por hardware, lo cual puede solucionar ciertos errores gráficos. Al activarse, el rendimiento disminuirá.</string>
<string name="asynchronous_gpu">Activar emulación asíncrona de la GPU</string>
<string name="asynchronous_gpu_description">Usa un hilo separado para emular la GPU de manera asíncrona. Al activarse, el rendimiento mejorará.</string>
<string name="frame_limit_enable">Límite de velocidad</string>
<string name="frame_limit_enable_description">Si se activa, la velocidad de emulación se limitará a un porcentaje determinado de velocidad normal. Si se desactiva, la velocidad no tendrá límite y el atajo para la velocidad velocidad turbo no funcionará.</string>
<string name="frame_limit_slider">Limitar porcentaje de velocidad</string>
<string name="frame_limit_slider_description">Especifica el valor al que se limita la velocidad de emulación. Con el valor por defecto del 100%, la emulación se limitará a la velocidad normal. Los valores altos o bajos aumentarán o reducirán el límite de velocidad.</string>
<string name="android_hide_images">Ocultar las imágenes de 3DS de la galería de Android</string>
<string name="android_hide_images_description">Evita que Android indexe las imágenes de la cámara, capturas de pantalla y texturas personalizadas de la 3DS y las muestre en la galería. Es posible que tengas que reiniciar el dispositivo después de cambiar esta configuración para que surta efecto.</string>
<string name="turbo_limit">Límite de velocidad turbo</string>
<string name="turbo_limit_description">Límite de velocidad de emulación que se aplica al activar el turbo.</string>
<string name="expand_to_cutout_area">Expandir al área de recorte</string>
<string name="expand_to_cutout_area_description">Amplía la pantalla para incluir el recorte de la cámara (o notch).</string>
<string name="internal_resolution">Resolución interna</string>
<string name="internal_resolution_description">Especifica la resolución de renderizado. Una alta resolución mejorará considerablemente la calidad visual, pero tendrá un gran impacto en el rendimiento y puede causar fallos en ciertas aplicaciones.</string>
<string name="internal_resolution_setting_auto">Auto (Tamaño pantalla)</string>
<string name="internal_resolution_setting_1x">Nativa (400x240)</string>
<string name="internal_resolution_setting_2x">2x Nativa (800x480)</string>
<string name="internal_resolution_setting_3x">3x Nativa (1200x720)</string>
<string name="internal_resolution_setting_4x">4x Nativa (1600x960)</string>
<string name="internal_resolution_setting_5x">5x Nativa (2000x1200)</string>
<string name="internal_resolution_setting_6x">6x Nativa (2400x1440)</string>
<string name="internal_resolution_setting_7x">7x Nativa (2800x1680)</string>
<string name="internal_resolution_setting_8x">8x Nativa (3200x1920)</string>
<string name="internal_resolution_setting_9x">9x Nativa (3600x2160)</string>
<string name="internal_resolution_setting_10x">10x Nativa (4000x2400)</string>
<string name="performance_warning">¡Desactivar esta opción reducirá notablemente el rendimiento de la emulación! Para obtener la mejor experiencia, se recomienda dejarla activada.</string>
<string name="debug_warning">Aviso: Modificar estos ajustes reducirá la velocidad de emulación.</string>
<string name="stereoscopy">Estereoscopia</string>
<string name="render3d">Modo 3D estereoscópico</string>
<string name="render3d_description">Elige el modo 3D estereoscópico para el renderizado 3D. Los modos de lado a lado son los más comunes en la actualidad. Los modos anaglifo y entrelazado se aplicarán siempre a todas las pantallas conectadas.</string>
<string name="factor3d">Profundidad</string>
<string name="factor3d_description">Especifica el valor del regulador 3D. Debería ajustarse por encima del 0% cuando el 3D estereoscópico esté activado.\nNota: Los valores de profundidad superiores al 100% no son posibles en el hardware real y pueden causar problemas gráficos.</string>
<string name="disable_right_eye_render">Desactivar el renderizado de ojo derecho</string>
<string name="disable_right_eye_render_description">Mejora mucho el rendimiento en algunas aplicaciones, pero puede causar parpadeo en otras.</string>
<string name="swap_eyes_3d">Intercambiar ojos</string>
<string name="swap_eyes_3d_description">Intercambia qué ojo se muestra en cada lado. Combinado con el modo lado a lado, ¡permite ver en 3D cruzando los ojos!</string>
<string name="render_3d_which_display">Renderizado 3D estereoscópico</string>
<string name="render_3d_which_display_description">Si se enciende el 3D estereoscópico, y en que pantallas. Las opciones para una sola pantalla solo son relevantes si hay varias pantallas conectadas.</string>
<string name="render_3d_which_display_both">Activado (todas las pantallas)</string>
<string name="render_3d_which_display_primary">Encendido (Solo Pantalla Principal)</string>
<string name="render_3d_which_display_secondary">Encendido (Solo Pantalla Secundaria)</string>
<string name="cardboard_vr">Cardboard VR</string>
<string name="cardboard_screen_size">Tamaño de la pantalla para Cardboard</string>
<string name="cardboard_screen_size_description">Escala la pantalla a un porcentaje de su tamaño original.</string>
<string name="cardboard_x_shift">Desplazamiento horizontal</string>
<string name="cardboard_x_shift_description">Especifica el porcentaje de espacio vacío para desplazar las pantallas horizontalmente. Los valores positivos acercan los dos ojos al medio, mientras que los negativos los alejan.</string>
<string name="cardboard_y_shift">Desplazamiento vertical</string>
<string name="cardboard_y_shift_description">Especifica el porcentaje de espacio vacío para desplazar las pantallas verticalmente. Los valores positivos mueven los dos ojos hacia abajo, mientras que los negativos los mueve hacia arriba.</string>
<string name="use_shader_jit">Shader JIT</string>
<string name="use_disk_shader_cache">Caché de shader en disco</string>
<string name="use_disk_shader_cache_description">Reduce los tirones al guardar y cargar shaders generados en el disco. No se puede usar sin activar la opción shader por hardware.</string>
<string name="utility">Utilidades</string>
<string name="dump_textures">Volcar texturas</string>
<string name="dump_textures_description">Las texturas se vuelcan en dump/textures/[Title ID]/.</string>
<string name="custom_textures">Texturas personalizadas</string>
<string name="custom_textures_description">Las texturas se cargan desde load/textures/[Title ID]/.</string>
<string name="preload_textures">Precargar texturas personalizadas</string>
<string name="preload_textures_description">Carga todas las texturas personalizadas en la memoria. Esta función puede usar mucha memoria.</string>
<string name="async_custom_loading">Carga asíncrona de texturas personalizadas</string>
<string name="async_custom_loading_description">Carga las texturas personalizadas de manera asíncrona con hilos de fondo para reducir los tirones de carga.</string>
<!-- Audio settings strings -->
<string name="audio_volume">Volumen</string>
<string name="audio_stretch">Estiramiento de audio</string>
<string name="audio_stretch_description">Estira el audio para reducir los tirones. Al activarse, la latencia del audio se incrementará y reducirá un poco el rendimiento.</string>
<string name="realtime_audio">Activar audio en tiempo real</string>
<string name="realtime_audio_description">Escala la velocidad de reproducción de audio para compensar por perdidas en la velocidad de fotogramas durante la emulación. Esto significa que el audio se reproducirá a velocidad completa incluso cuando la velocidad de fotogramas del juego sea baja. Puede causar problemas de desincronización de audio.</string>
<string name="audio_input_type">Dispositivo de entrada de audio</string>
<string name="sound_output_mode">Modo de salida del audio</string>
<!-- Debug settings strings -->
<string name="cpu_jit">CPU JIT</string>
<string name="cpu_jit_description">Usa el compilador Just-in-Time (JIT) para emular la CPU. Cuando este encendido, el rendimiento de los juegos mejorará significativamente. </string>
<string name="hw_shaders">Activar shader por hardware</string>
<string name="hw_shaders_description">Usa el hardware para emular los shaders de la 3DS. Al activarse, el rendimiento mejorará notablemente.</string>
<string name="cpu_clock_speed">Velocidad de reloj de la CPU</string>
<string name="vsync">Activar V-Sync</string>
<string name="vsync_description">Sincroniza la velocidad de fotogramas con la tasa de actualización de tu dispositivo. Puede causar latencia de entrada adicional, pero puede reducir el rasgado de imagen en algunos casos.</string>
<string name="renderer_debug">Renderizador de depuración</string>
<string name="toggle_unique_data_console_type">Alternar tipo de consola.</string>
<string name="emulation_toggle_controls">Alternar Controles</string>
<string name="emulation_switch_secondary_layout_description">El diseño usado por una pantalla secundaria conectada, alámbrica o inalámbrica (Chromecast, Miracast)</string>
</resources>

View file

@ -212,6 +212,7 @@
<string name="storage">Almacenamiento</string>
<string name="compress_cia_installs">Comprimir el contenido de CIAs instalados</string>
<string name="compress_cia_installs_description">Comprime el contenido de archivos CIA cuando son instalados a la SD emulada. Solo afecta contenido CIA instalado con esta opción activada.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Cámara interior</string>
<string name="outer_left_camera">Cámara izquierda externa</string>
@ -370,6 +371,7 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="learn_more">Más Información</string>
<string name="close">Cerrar</string>
<string name="reset_to_default">Restablecer valores de fábrica</string>
<string name="redump_games"><![CDATA[Por favor, sigue las guías para volcar tus <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">cartuchos de juego</a> y/o <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">títulos instalados</a>.]]></string>
<string name="option_default">Por defecto</string>
<string name="none">Ninguno</string>
<string name="auto">Auto</string>
@ -411,7 +413,9 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<string name="preferences_theme">Tema y Color</string>
<string name="preferences_layout">Estilo</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Tu ROM está encriptada</string>
<string name="loader_error_invalid_format">Formato de ROM no válido</string>
<string name="loader_error_file_not_found">El archivo ROM no existe</string>
<string name="no_game_present">¡No hay ningún juego iniciable!</string>
@ -562,10 +566,6 @@ Se esperan fallos gráficos temporales cuando ésta esté activado.</string>
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Preparando shaders</string>
<string name="building_shaders">Construyendo%s</string>
<string name="delete_shader_cache">Eliminar caché de sombreadores </string>
<string name="delete_cache_select_backend">Selecciona la API gráfica para eliminar la caché de sombreadores</string>
<string name="deleting_shader_cache">Eliminando la caché de sombreadores, por favor espere…</string>
<string name="shader_cache_deleted">Caché de sombreadores eliminada</string>
<!-- About Game Dialog -->
<string name="play">Jugar</string>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_disclaimer">To oprogramowanie umożliwia uruchamianie aplikacje na konsolę przenośną Nintendo 3DS. Nie zawiera tytułów gier.\n\nPrzed rozpoczęciem emulacji należy wybrać folder do przechowywania danych użytkownika Azahar.\n\nCo to jest:\n<a href='https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage'>Wiki - Dane użytkownika i przechowywanie Azahar dla systemu Android</a></string>
<string name="app_disclaimer">To oprogramowanie umożliwia uruchamianie aplikacja na konsolę przenośną Nintendo 3DS. Nie zawiera tytułów gier.\n\nPrzed rozpoczęciem emulacji należy wybrać folder do przechowywania danych użytkownika Azahar.\n\nCo to jest:\n<a href='https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage'>Wiki - Dane użytkownika i przechowywanie Azahar dla systemu Android</a></string>
<string name="app_notification_channel_description">Powiadomienia o emulatorze Azahar</string>
<string name="app_notification_running">Azahar jest uruchomiony</string>
<string name="app_game_install_description">Następnie należy wybrać folder z aplikacjami. Azahar wyświetli wszystkie ROM-y 3DS w wybranym folderze w aplikacji.\n\nROMy CIA, aktualizacje i DLC będą musiały zostać zainstalowane oddzielnie, klikając ikonę folderu i wybierając opcję Zainstaluj CIA.</string>
@ -212,8 +212,6 @@
<string name="storage">Miejsce</string>
<string name="compress_cia_installs">Kompresuj zainstalowaną zawartość CIA</string>
<string name="compress_cia_installs_description">Kompresuje zawartość plików CIA zainstalowanych na emulowanej karcie SD. Ma wpływ tylko na zawartość CIA, która jest instalowana, gdy ustawienie jest włączone.</string>
<string name="async_fs_operations">Asynchroniczne operacje systemu plików</string>
<string name="async_fs_operations_description">Sprawia, że operacje na emulowanym systemie plików przebiegają asynchronicznie. Znacznie ogranicza opóźnienia związane z systemem plików, ale może nieznacznie wydłużyć czas ładowania.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Kamera wewnętrzna</string>
@ -245,8 +243,6 @@
<string name="texture_filter_description">Ulepsza oprawę wizualną aplikacji poprzez zastosowanie filtrów do tekstur. Obsługiwane filtry to Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale i MMPX.</string>
<string name="delay_render_thread">Opóźnienie Renderowania Wątku Gry</string>
<string name="delay_render_thread_description">Opóźnia wątek renderowania aplikacji podczas przesyłania danych do GPU. Pomaga w kwestiach wydajności w (bardzo niewielu) aplikacjach z dynamiczną liczbą klatek na sekundę.</string>
<string name="simulate_3ds_gpu_timings">Symuluj czasy pracy procesora graficznego 3DS</string>
<string name="simulate_3ds_gpu_timings_description">Opóźnia zdarzenia zakończenia pracy procesora graficznego GPU na podstawie pomiarów przeprowadzonych na rzeczywistym sprzęcie, dzięki czemu gry uzyskują bardziej realistyczne pomiary czasu pracy procesora graficznego. Pomaga to ustabilizować działanie gier z dynamiczną liczbą klatek na sekundę. Wyłączenie tej funkcji może w niektórych rzadkich przypadkach poprawić wydajność, ale kosztem stabilności działania.</string>
<string name="advanced">Zaawansowane</string>
<string name="texture_sampling_name">Próbkowanie tekstur</string>
<string name="texture_sampling_description">Zastępuje filtr próbkowania używany przez gry. Może to być przydatne w niektórych przypadkach, gdy gry źle zachowują się podczas skalowania w górę. Jeśli nie masz pewności, ustaw tę opcję na Kontrolowane przez grę.</string>
@ -374,6 +370,7 @@
<string name="learn_more">Dowiedz się więcej</string>
<string name="close">Zamknij</string>
<string name="reset_to_default">Przywróć ustawienia domyślne</string>
<string name="redump_games"><![CDATA[Postępuj zgodnie z poniższymi krokami, aby zrzucić <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">kartridże z grami</a> lub <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">zainstalowane tytuły</a>.]]></string>
<string name="option_default">Domyślne</string>
<string name="none">Brak</string>
<string name="auto">Automatyczne</string>
@ -416,39 +413,11 @@
<string name="preferences_layout">Układ</string>
<!-- ROM loading errors -->
<string name="loader_error_generic_title">Wystąpił błąd podczas ładowania aplikacji</string>
<string name="loader_error_invalid_format">Nieprawidłowy format aplikacji</string>
<string name="loader_error_invalid_format_description"><![CDATA[Format pliku aplikacji nie jest obsługiwany.<br>Upewnij się, że używasz jednego z obsługiwanych formatów plików:<ul><li>Obrazy kartridża: <b>.cci/.zcci/.3ds</b></li><li>Archiwa instalacyjne: <b>.cia/.zcia</b></li><li>Tytuły homebrew: <b>.3dsx/.z3dsx</b></li><li>Pliki NCCH: <b>.cxi/.zcxi/.app</li><li>Pliki ELF: <b>.elf/.axf</b></li></ul>]]></string>
<string name="loader_error_invalid_system_mode">Nieprawidłowy moduł systemu</string>
<string name="loader_error_invalid_system_mode_description">Aplikacje dostępne wyłącznie na konsoli New 3DS nie mogą być uruchamiane bez włączenia trybu New 3DS.</string>
<string name="loader_error_applying_patches">Błąd podczas instalowania łatki</string>
<string name="loader_error_applying_patches_description">Podczas instalowania łatki w aplikacji wystąpił ogólny błąd. Więcej szczegółów można znaleźć w logu.</string>
<string name="loader_error_patch_wrong_application">Nie udało się zainstalować łatki, ponieważ jest ona przeznaczona dla innej aplikacji. Upewnij się, że używasz łatki przeznaczonej dla właściwej aplikacji, regionu i wersji.</string>
<string name="loader_error_encrypted">Twój ROM jest zaszyfrowany</string>
<string name="loader_error_encrypted_description"><![CDATA[Azahar nie obsługuje zaszyfrowanych plików ROM. Więcej informacji znajdziesz na naszym <a href=\"https://azahar-emu.org/blog/game-loading-changes/\">blogu</a>.]]></string>
<string name="loader_error_invalid_format">Nieprawidłowy format ROMu</string>
<string name="loader_error_file_not_found">Plik ROMu nie istnieje</string>
<string name="no_game_present">Brak gry do uruchomienia!</string>
<string name="loader_error_generic">Wystąpił błąd podczas ładowania pamięci ROM: \"%s (%d)\"</string>
<string name="core_error_success">Sukces</string>
<string name="core_error_not_initialized">Nie zainicjowano</string>
<string name="core_error_get_loader">Nie znaleziono pliku, który miał zostać załadowany, typ pliku jest niekompatybilny</string>
<string name="core_error_system_mode">Nie udało się przeanalizować pliku</string>
<string name="core_error_loader">Ogólny błąd modułu ładującego</string>
<string name="core_error_loader_encrypted">Zaszyfrowany plik</string>
<string name="core_error_loader_invalid_format">Uszkodzony plik</string>
<string name="core_error_loader_gba_title">Gra jest tytułem na konsolę GBA</string>
<string name="core_error_loader_error_patches">Błąd podczas instalowania łatki</string>
<string name="core_error_loader_patches_invalid_title">Te łatki są przeznaczone do innej aplikacji</string>
<string name="core_error_system_files">Brakujące pliki systemowe</string>
<string name="core_error_savestate">Nie powiodło się zapisanie savestate.u</string>
<string name="core_error_artic_disconnected">Odłączono Artic Base</string>
<string name="core_error_n3ds_application">Aplikacja jest dostępna wyłącznie na konsolę New 3DS</string>
<string name="core_error_core_exception_raised">Wystąpił błąd rdzenia</string>
<string name="core_error_memory_exception_raised">Wystąpił błąd pamięci</string>
<string name="core_error_shutdown_requested">Prośba o zamknięcie</string>
<string name="core_error_unknown">Nieznany błąd</string>
<!-- Emulation Menu -->
<string name="emulation_menu_help">Naciśnij przycisk Wstecz, aby przejść do menu.</string>
<string name="emulation_save_state">Zapisz stan</string>
@ -596,10 +565,6 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Przygotowanie shaderów</string>
<string name="building_shaders">Tworzenie%s</string>
<string name="delete_shader_cache">Usuń pamięć podręczną shaderów</string>
<string name="delete_cache_select_backend">Wybierz interfejs API grafiki, dla którego chcesz usunąć pamięć podręczną shaderów</string>
<string name="deleting_shader_cache">Usuwanie pamięci podręcznej shaderów dla tytułu, proszę zaczekać...</string>
<string name="shader_cache_deleted">Pamięć podręczna shaderów została usunięta</string>
<!-- About Game Dialog -->
<string name="play">Odtwórz</string>

View file

@ -14,7 +14,7 @@
<string name="settings_description">Definir as configurações do emulador</string>
<string name="install_game_content">Instalar arquivo CIA</string>
<string name="install_game_content_description">Instalar aplicativos, atualizações ou DLC</string>
<string name="share_log">Compartilhar Log</string>
<string name="share_log">Compartilhar Registro</string>
<string name="share_log_description">Compartilhe o arquivo de log do Azahar para depurar problemas</string>
<string name="gpu_driver_manager">Gerenciador de Driver da GPU</string>
<string name="install_gpu_driver">Instalar driver da GPU</string>
@ -86,7 +86,7 @@
<string name="warning_cancel">Cancelar</string>
<string name="select_citra_user_folder">Selecione a Pasta do Usuário</string>
<string name="select_citra_user_folder_description"><![CDATA[Selecione o seu diretório de <a href=\"https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage\">dados de usuário</a>com o botão abaixo.]]></string>
<string name="select_which_user_directory_to_use">Parece que você possui pastas de usuário configuradas tanto para o Lime3DS quanto para o Azahar. Isso provavelmente ocorreu porque você atualizou para o Azahar e, quando solicitado, escolheu uma pasta de usuário diferente da que era usada pelo Lime3DS.\n\nIsso pode ter feito você pensar que perdeu seus saves ou outras configurações — pedimos desculpas se isso aconteceu.\n\nVocê gostaria de voltar a usar sua pasta de usuário original do Lime3DS, restaurando as configurações e jogos salvos do Lime3DS, ou manter sua pasta de usuário atual do Azahar?\n\nNenhuma das pastas será excluída, independentemente da sua escolha, e você pode alternar livremente entre elas usando a opção Selecionar Pasta do Usuário.</string>
<string name="select_which_user_directory_to_use">Parece que você tem diretórios de usuários configurados para ambos o Lime3DS e o Azahar. Isso ocorreu devido a você ter atualizado para o Azahar, e quando solicitado, escolha um diretório de usuário diferente daquele que foi usado pelo Lime3DS.\n\nIsso pode ter resultado em você pensar que tenha perdidos dados salvos ou outras configurações - pedimos desculpas caso isso tenha acontecido.\n\nGostaria de voltar a usar sua pasta de usuário original do Lime3DS, restaurar configurações e salvar os jogos do Lime3DS, ou manter o diretório de usuário do Azahar atual?\n\nNenhum dos diretórios serão excluídos, independente de sua escolha, sinta-se livre para trocar entre elas usando a opção Selecionar Pasta de Usuário.</string>
<string name="keep_current_azahar_directory">Manter diretório atual do Azahar</string>
<string name="use_prior_lime3ds_directory">Usar o diretório antigo do Lime3DS</string>
<string name="select">Selecionar</string>
@ -141,7 +141,7 @@
<string name="button_home">Menu Principal</string>
<string name="button_swap">Trocar telas</string>
<string name="button_turbo">Turbo</string>
<string name="input_message_analog_only">Este controle deve ser mapeado para um analógico ou eixo do D-pad!</string>
<string name="input_message_analog_only">Este controle tem de ser mapeado a um eixo analógico do gamepad ou um eixo de D-pad!</string>
<string name="input_message_button_only">Este controle tem de ser mapeado a um botão do gamepad!</string>
<string name="turbo_limit_hotkey">Velocidade Turbo</string>
<string name="turbo_enabled_toast">Velocidade Turbo Ativada</string>
@ -212,8 +212,6 @@
<string name="storage">Armazenamento</string>
<string name="compress_cia_installs">Comprimir conteúdo CIA instalado</string>
<string name="compress_cia_installs_description">Comprime o conteúdo dos arquivos CIA ao serem instalados no cartão SD emulado. Afeta apenas o conteúdo CIA instalado enquanto a opção estiver ativada.</string>
<string name="async_fs_operations">Operações assíncronas do sistema de arquivos</string>
<string name="async_fs_operations_description">Torna assíncronos os acessos ao sistema de arquivos emulado. Reduz consideravelmente os engasgos relacionados ao sistema de arquivos, mas pode aumentar um pouco os tempos de carregamento.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Câmera frontal</string>
@ -245,8 +243,6 @@
<string name="texture_filter_description">Aprimora o visual dos aplicativos ao aplicar filtros às texturas. Os filtros compatíveis são: Anime4K Ultrafast, Bicúbico, ScaleForce, xBRZ Freescale e MMPX.</string>
<string name="delay_render_thread">Atrasar Thread de Renderização do Aplicativo</string>
<string name="delay_render_thread_description">Atrasar thread de renderização do aplicativo quando for enviado dados para a GPU. Ajuda com problemas de desempenho em (muito poucos) aplicativos com taxa de quadros dinâmica.</string>
<string name="simulate_3ds_gpu_timings">Simular temporizações da GPU do 3DS</string>
<string name="simulate_3ds_gpu_timings_description">Atrasa os eventos de conclusão da GPU com base em medições feitas no hardware original, para que os jogos tenham medições de tempo de GPU mais realistas. Ajuda a estabilizar jogos com FPS dinâmico. Desativar este recurso pode melhorar o desempenho em alguns casos raros, à custa da estabilidade.</string>
<string name="advanced">Avançado</string>
<string name="texture_sampling_name">Amostragem de Texturas</string>
<string name="texture_sampling_description">Substitui o filtro de amostragem usado pelos jogos. Isso pode ser útil em certos casos com jogos que se comportem mal durante o upscaling. Em caso de dúvidas, defina como Controlado pelo Jogo.</string>
@ -319,8 +315,6 @@
<string name="audio_stretch_description">Estica o áudio para reduzir engasgos. Quando ativado, aumenta a latência do áudio e reduz levemente o desempenho.</string>
<string name="realtime_audio">Ativar Áudio em Tempo Real</string>
<string name="realtime_audio_description">Dimensiona a velocidade de reprodução de áudio para compensar quedas na taxa de quadros da emulação. Isso significa que o áudio será reproduzido em velocidade máxima mesmo quando a taxa de quadros do jogo estiver baixa. Pode causar problemas de dessincronização de áudio.</string>
<string name="simulate_headphones_plugged">Simular fones de ouvido conectados</string>
<string name="simulate_headphones_plugged_description">Simula se os fones de ouvido estão conectados ao sistema emulado do 3DS.</string>
<string name="audio_input_type">Dispositivo de entrada de áudio</string>
<string name="sound_output_mode">Modo de Saída de Som</string>
@ -376,6 +370,7 @@
<string name="learn_more">Saber mais</string>
<string name="close">Fechar</string>
<string name="reset_to_default">Redefinir para o Padrão</string>
<string name="redump_games"><![CDATA[Por favor, siga os guias para extrair novamente seus <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">cartuchos de jogo</a> ou <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">títulos instalados</a>.]]></string>
<string name="option_default">Padrão</string>
<string name="none">Nenhum</string>
<string name="auto">Automático</string>
@ -418,39 +413,11 @@
<string name="preferences_layout">Disposição</string>
<!-- ROM loading errors -->
<string name="loader_error_generic_title">Erro ao carregar o aplicativo</string>
<string name="loader_error_invalid_format">Formato de aplicativo inválido</string>
<string name="loader_error_invalid_format_description"><![CDATA[Formato de arquivo do aplicativo não suportado.<br>Certifique-se de estar usando um dos formatos de arquivo compatíveis: <ul><li>Imagens de cartucho: <b>.cci/.zcci/.3ds</b></li><li>Arquivos instaláveis: <b>.cia/.zcia</b></li><li> Títulos homebrew: <b>.3dsx/.z3dsx</b></li><li>Contêineres NCCH: <b>.cxi/.zcxi/.app</b></li><li>Arquivos ELF: <b>.elf/.axf</b></li></ul>]]></string>
<string name="loader_error_invalid_system_mode">Modo de sistema inválido</string>
<string name="loader_error_invalid_system_mode_description">Aplicativos exclusivos do New 3DS não podem ser carregados sem ativar o modo New 3DS.</string>
<string name="loader_error_applying_patches">Erro ao aplicar patches</string>
<string name="loader_error_applying_patches_description">Ocorreu um erro genérico ao aplicar um patch ao aplicativo. Verifique o log para mais detalhes.</string>
<string name="loader_error_patch_wrong_application">Falha ao aplicar um patch porque ele foi projetado para um aplicativo diferente. Certifique-se de estar usando os patches para o aplicativo, região e versão corretos.</string>
<string name="loader_error_encrypted">Sua ROM está Criptografada</string>
<string name="loader_error_encrypted_description"><![CDATA[O Azahar não suporta aplicativos criptografados. Leia nosso <a href=\"https://azahar-emu.org/blog/game-loading-changes/\">post no blog</a> para mais informações.]]></string>
<string name="loader_error_invalid_format">Formato inválido de ROM</string>
<string name="loader_error_file_not_found">O arquivo ROM não existe</string>
<string name="no_game_present">Nenhum jogo inicializável presente!</string>
<string name="loader_error_generic">Ocorreu um erro ao carregar a ROM: \"%s (%d)\"</string>
<string name="core_error_success">Sucesso</string>
<string name="core_error_not_initialized">Não inicializado</string>
<string name="core_error_get_loader">Carregador do arquivo não encontrado, tipo de arquivo incompatível</string>
<string name="core_error_system_mode">Falha ao analisar o arquivo</string>
<string name="core_error_loader">Erro genérico do carregador</string>
<string name="core_error_loader_encrypted">Arquivo criptografado</string>
<string name="core_error_loader_invalid_format">Arquivo corrompido</string>
<string name="core_error_loader_gba_title">O arquivo é um título de GBA</string>
<string name="core_error_loader_error_patches">Erro ao aplicar patches</string>
<string name="core_error_loader_patches_invalid_title">Os patches são para um aplicativo diferente</string>
<string name="core_error_system_files">Arquivos de sistema ausentes</string>
<string name="core_error_savestate">Falha no savestate</string>
<string name="core_error_artic_disconnected">Artic Base desconectado</string>
<string name="core_error_n3ds_application">O arquivo é um aplicativo do New 3DS</string>
<string name="core_error_core_exception_raised">Exceção de núcleo disparada</string>
<string name="core_error_memory_exception_raised">Exceção de memória disparada</string>
<string name="core_error_shutdown_requested">Desligamento solicitado</string>
<string name="core_error_unknown">Erro desconhecido</string>
<!-- Emulation Menu -->
<string name="emulation_menu_help">Pressione Voltar para acessar o menu.</string>
<string name="emulation_save_state">Salvar estado</string>
@ -598,10 +565,6 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Preparando Shaders</string>
<string name="building_shaders">Construindo %s</string>
<string name="delete_shader_cache">Excluir Cache de Shaders</string>
<string name="delete_cache_select_backend">Selecione a API gráfica para excluir o cache de shaders</string>
<string name="deleting_shader_cache">Excluindo cache de shaders do título, aguarde...</string>
<string name="shader_cache_deleted">Cache de shaders excluído</string>
<!-- About Game Dialog -->
<string name="play">Jogar</string>

View file

@ -214,7 +214,9 @@
<string name="preferences_audio">Аудио</string>
<string name="preferences_debug">Отладка</string>
<string name="preferences_theme">Тема и цвет</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Образ зашифрован</string>
<string name="loader_error_invalid_format">Неправильный формат образа</string>
<string name="loader_error_file_not_found">Файл образа не существует</string>
<string name="no_game_present">Отсутствует игра для загрузки!</string>

View file

@ -88,7 +88,6 @@
<string name="cannot_skip">Kullanıcı klasörü ayarlamayı atlayamazsınız</string>
<string name="cannot_skip_directory_description">Bu adım Azahar\'ın çalışması için gereklidir. Lütfen devam etmek için bir dizin seçin.</string>
<string name="selecting_user_directory_without_write_permissions">Kayıtların ve diğer bilgilerin depolandığı <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">kullanıcı verileri</a>dizininizdeki yazma izinlerini kaybettiniz. Bu durum bazı uygulama veya Android güncellemelerinden sonra meydana gelebilir. Devam edebilmeniz için lütfen izinleri yeniden kazanmak üzere dizini yeniden seçin.</string>
<string name="invalid_selection">Geçersiz Seçim</string>
<string name="set_up_theme_settings">Tema Ayarları</string>
<string name="setup_theme_settings_description">Azahar için tema tercihlerinizi yapılandırın.</string>
<string name="setup_set_theme">Tema Ayarla</string>
@ -347,7 +346,9 @@
<string name="preferences_theme">Tema ve Renk</string>
<string name="preferences_layout">Düzen</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">ROM\'unuz Şifreli</string>
<string name="loader_error_invalid_format">Geçersiz ROM formatı</string>
<string name="loader_error_file_not_found">ROM dosyası mevcut değil</string>
<string name="no_game_present">Başlatılabilir oyun yok!</string>

View file

@ -190,6 +190,7 @@
<string name="storage">存储</string>
<string name="compress_cia_installs">压缩已安装的 CIA 内容</string>
<string name="compress_cia_installs_description">安装到模拟 SD 卡时,压缩 CIA 文件的内容。仅影响启用此设置时安装的 CIA 内容。</string>
<!-- Camera settings strings -->
<string name="inner_camera">内置摄像头</string>
<string name="outer_left_camera">外置左摄像头</string>
@ -374,7 +375,9 @@
<string name="preferences_theme">主题和色彩</string>
<string name="preferences_layout">布局</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">您的 ROM 是加密的</string>
<string name="loader_error_invalid_format">无效的 ROM 格式</string>
<string name="loader_error_file_not_found">ROM 文件不存在</string>
<string name="no_game_present">目前没有可启动的游戏!</string>

View file

@ -66,7 +66,6 @@
<string name="give_permission">Berechtigung erteilen</string>
<string name="notification_warning">Möchtest du keine Benachrichtigungsberechtigung gewähren?</string>
<string name="notification_warning_description">Azahar wird dich nicht über wichtige Informationen benachrichtigen.</string>
<string name="filesystem_permission_warning">Fehlende Berechtigungen</string>
<string name="camera_permission">Kamera</string>
<string name="camera_permission_description">Teile unten die Kameraberechtigung, um die 3DS-Kamera zu emulieren</string>
<string name="microphone_permission">Mikrofon</string>
@ -90,7 +89,6 @@
<string name="cannot_skip">Der Nutzer Ordner muss gesetzt sein</string>
<string name="cannot_skip_directory_description">Dieser Schritt ist nötig, damit Azahar funktionieren kann. Bitte wähle ein Verzeichnis aus, damit du fortfahren kannst.</string>
<string name="selecting_user_directory_without_write_permissions">Die Schreibrechte auf dein <a href="https://web.archive.org/web/20240304193549/https://github.com/citra-emu/citra/wiki/Citra-Android-user-data-and-storage">Nutzerdaten</a>-Verzeichnis, wo deine Speicherstände und andere Informationen gespeichert sind, fehlen. Dies kann durch ein Anwendungsupdate, oder ein Androidupdate passiert sein. Bitte wähle das Verzeichnis erneut aus, damit die Berechtigungen wiederhergestellt werden können.</string>
<string name="invalid_selection">Ungültige Auswahl</string>
<string name="set_up_theme_settings">Design-Einstellung</string>
<string name="setup_theme_settings_description">Konfigurieren sie ihre Designeinstellungen für Azahar.</string>
<string name="setup_set_theme">Design wählen</string>
@ -102,7 +100,6 @@
<string name="search_recently_added">Kürzlich hinzugefügt</string>
<string name="search_installed">Installiert</string>
<string name="controller_clear_all">Alle Bindungen zurücksetzen</string>
<string name="controller_circlepad">Schiebepad</string>
<string name="controller_c">C-Stick</string>
<string name="controller_hotkeys">Tastenkürzel</string>
@ -193,6 +190,7 @@
<string name="storage">Speicher</string>
<string name="compress_cia_installs">Komprimiere installierten CIA Kontent</string>
<string name="compress_cia_installs_description">Komprimiert den Inhalt von CIA-Dateien, wenn diese auf der emulierten SD-Karte installiert werden. Betrifft nur CIA-Inhalte, die installiert werden, während die Einstellung aktiviert ist.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Innenkamera</string>
<string name="outer_left_camera">Außenkamera Links</string>
@ -216,7 +214,6 @@
<string name="async_shaders_description">Kompiliere Shader im Hintergrund, um das Stottern des Spiels zu reduzieren. Dadurch kann es zu temporären grafischen Fehlern während des Spielens kommen.</string>
<string name="linear_filtering">Lineare Filterung</string>
<string name="linear_filtering_description">Aktiviert lineare Filterung, welche die Spieltexturen glättet.</string>
<string name="use_integer_scaling">Integer-Skalierung</string>
<string name="texture_filter_name">Texturfilter</string>
<string name="texture_filter_description">Verbessert die Optik von Anwendungen durch Anwenden eines Filters auf Texturen. Die unterstützten Filter sind Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale und MMPX.</string>
<string name="delay_render_thread_description">Verzögert den Render-Thread des Spiels, wenn er Daten an die GPU sendet. Hilft bei Leistungsproblemen in den (sehr wenigen) Anwendungen mit dynamischen Frameraten.</string>
@ -225,7 +222,6 @@
<string name="texture_sampling_description">Setzt den von Spielen verwendeten Sampling-Filter außer Kraft. Dies kann in bestimmten Fällen nützlich sein, wenn sich die Spiele beim Hochskalieren schlecht verhalten. Wenn du dir unsicher bist, setze diese Einstellung auf „Spielgesteuert“</string>
<string name="shaders_accurate_mul">Genaue Multiplikation</string>
<string name="shaders_accurate_mul_description">Benutzt genauere Multiplikation in Hardware-Shadern, welche einige Grafikbugs fixen kann. Wenn aktiviert, ist die Leistung reduziert.</string>
<string name="asynchronous_gpu">Aktiviere Asynchrone GPU-Emulation</string>
<string name="asynchronous_gpu_description">Verwendet einen separaten Thread, um die GPU asynchron zu emulieren. Wenn aktiviert, wird die Leistung verbessert.</string>
<string name="frame_limit_enable">Höchstgeschwindigkeit</string>
<string name="frame_limit_enable_description">Wenn aktiviert, wird die Emulationsgeschwindigkeit auf einen angegebenen Prozentsatz der normalen Geschwindigkeit begrenzt. Wenn diese Option deaktiviert ist, wird die Emulationsgeschwindigkeit nicht begrenzt und der Hotkey für die Turbogeschwindigkeit funktioniert nicht.</string>
@ -256,7 +252,6 @@
<string name="factor3d_description">Gibt den Wert des 3D-Schiebereglers an. Dieser Wert sollte auf mehr als 0 % eingestellt werden, wenn Stereoskopisches 3D aktiviert ist.\nHinweis: Tiefenwerte über 100% werden nicht von echter Hardware unterstützt und könnten zu grafischen Fehlern führen.</string>
<string name="disable_right_eye_render">Rendering für das rechte Auge deaktivieren</string>
<string name="disable_right_eye_render_description">Verbessert die Leistung in einigen Anwendungen erheblich, kann in anderen jedoch zu Flackern führen.</string>
<string name="swap_eyes_3d">Augen tauschen</string>
<string name="cardboard_vr">Karton-VR</string>
<string name="cardboard_screen_size">Karton-Bildschirmgröße</string>
<string name="cardboard_screen_size_description">Skaliert den Bildschirm auf einen Prozentsatz seiner Originalgröße.</string>
@ -281,7 +276,6 @@
<string name="audio_volume">Lautstärke</string>
<string name="audio_stretch">Audiodehnung</string>
<string name="audio_stretch_description">Dehnt Audio, um Stottern zu reduzieren. Wenn aktiviert, wird die Audiolatenz erhöht und die Leistung leicht verschlechtert.</string>
<string name="realtime_audio">Echtzeitaudio aktivieren</string>
<string name="realtime_audio_description">Skaliert die Tonabspielgeschwindigkeit, um Einbrüche in der Emulationsframerate zu minimieren. Das bedeutet, dass der Ton in voller Geschwindigkeit abspielt, selbst wenn die Framerate des Spiels niedrig ist. Kann zu Tonverschiebungen führen.</string>
<string name="audio_input_type">Audioeingabegerät</string>
<string name="sound_output_mode">Tonausgabemodus</string>
@ -295,9 +289,7 @@
<string name="vsync">V-Sync aktivieren</string>
<string name="renderer_debug">Debug-Renderer</string>
<string name="renderer_debug_description">Zusätzliche grafisch spezifische Debuginformationen werden protokolliert. Wenn dies aktiviert ist, ist die Leistung des Spiels minimal reduziert.</string>
<string name="instant_debug_log">Log Output bei jeder Nachricht leeren</string>
<string name="instant_debug_log_description">Überträgt das Debugprotokoll sofort in eine Datei. Verwenden Sie dies, wenn Azahar abstürzt und die Protokollausgabe abgeschnitten wird.</string>
<string name="delay_start_lle_modules">Start mit LLE-Module verzögern</string>
<string name="delay_start_lle_modules_description">Verzögert den Start der App, wenn die LLE-Module aktiviert sind.</string>
<string name="deterministic_async_operations">Deterministische asynchrone Operationen</string>
<string name="deterministic_async_operations_description">Asynchrone Operationen werden für Debug-Zwecke deterministisch. Die Aktivierung dieser Funktion kann zum Einfrieren führen.</string>
@ -374,7 +366,9 @@
<string name="preferences_theme">Design und Farbe</string>
<string name="preferences_layout">Anordnung</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Deine ROM ist verschlüsselt</string>
<string name="loader_error_invalid_format">Ungültiges ROM-Format</string>
<string name="loader_error_file_not_found">ROM-Datei existiert nicht</string>
<string name="no_game_present">Kein ausführbares Spiel vorhanden!</string>
@ -410,10 +404,6 @@
<string name="emulation_screen_layout_original">Original</string>
<string name="emulation_portrait_layout_top_full">Standard</string>
<string name="emulation_screen_layout_custom">Benutzerdefinierte Anordnung</string>
<string name="bg_color">Hintergrundfarbe</string>
<string name="bg_red">Rot</string>
<string name="bg_green">Grün</string>
<string name="bg_blue">Blau</string>
<string name="emulation_small_screen_position">Position des kleinen Bildschirms</string>
<string name="small_screen_position_description">Wo soll der kleine Bildschirm im Verhältnis zum großen Bildschirm in der Großbild-Anordnung erscheinen?</string>
<string name="small_screen_position_top_right">Oben Rechts</string>
@ -530,27 +520,11 @@
<string name="create_shortcut">Verknüpfung erstellen</string>
<string name="shortcut_name_empty">Verknüpfungsname darf nicht leer sein</string>
<string name="shortcut_image_stretch_toggle">Bildgröße anpassen</string>
<string name="game_context_id">ID:</string>
<string name="game_context_file">Datei:</string>
<string name="game_context_insert">Spielkarte einsetzen</string>
<string name="game_context_eject">Spielkarte Entfernen</string>
<!-- Performance Overlay settings -->
<string name="performance_overlay_show">Leistungs-Overlay anzeigen</string>
<string name="performance_overlay_options">Leistungs-Overlay</string>
<string name="performance_overlay_enable">Leistungsoverlay aktivieren</string>
<string name="performance_overlay_options_description">Konfigurieren Sie, ob das Leistungs-Overlay angezeigt wird und welche Informationen angezeigt werden.</string>
<string name="performance_overlay_show_fps">FPS anzeigen</string>
<string name="performance_overlay_show_frametime">Frametime anzeigen</string>
<string name="performance_overlay_show_speed">Geschwindigkeit anzeigen</string>
<string name="performance_overlay_show_app_ram_usage">App-Speichernutzung anzeigen</string>
<string name="performance_overlay_show_available_ram">Verfügbaren Speicher anzeigen</string>
<string name="performance_overlay_show_battery_temp">Batterietemperatur anzeigen</string>
<string name="performance_overlay_position">Overlay-Position</string>
<string name="performance_overlay_position_top_left">Oben Links</string>
<string name="performance_overlay_position_top_right">Oben Rechts</string>
<string name="performance_overlay_position_bottom_left">Unten Links</string>
<string name="performance_overlay_position_bottom_right">Unten Rechts</string>
<!-- Cheats -->
<string name="cheats">Cheats</string>
<string name="cheats_add">Cheat hinzufügen</string>
@ -841,10 +815,4 @@
<string name="emulation_occupied_quicksave_slot">Schnellspeichern - %1$tF %1$tR</string>
<string name="quickload_not_found">Kein Schnellspeicher vorhanden.</string>
<!-- File Compression -->
<string name="compress">Komprimiere</string>
<string name="compressing">Wird komprimiert...</string>
<string name="decompress">Dekomprimiere</string>
<string name="decompressing">Wird dekomprimiert...</string>
<string name="compress_success">Alle Dateien wurden erfolgreich komprimiert.</string>
</resources>

View file

@ -122,6 +122,7 @@
<string name="preferences_theme">Θέμα και χρώμα</string>
<string name="preferences_layout">Διάταξη</string>
<string name="loader_error_invalid_format">Μη έγκυρη μορφή ROM</string>
<string name="emulation_save_state">Αποθήκευση κατάστασης</string>
<string name="emulation_load_state">Φόρτωση κατάστασης</string>
<string name="emulation_edit_layout">Επεξεργασία διάταξης</string>

View file

@ -47,7 +47,9 @@
<string name="preferences_controls">Ohjain</string>
<string name="preferences_graphics">Grafiikat</string>
<string name="preferences_audio">Ääni</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Pelitiedostosi on salattu.</string>
<string name="loader_error_invalid_format">Epäsopiva pelitiedoston formaatti</string>
<string name="emulation_show_fps">Näytä FPS</string>
<string name="emulation_done">Valmis</string>
<string name="emulation_open_settings">Avaa asetukset</string>

View file

@ -212,8 +212,6 @@
<string name="storage">Stockage</string>
<string name="compress_cia_installs">Compresser le contenu CIA installé</string>
<string name="compress_cia_installs_description">Compresse le contenu des fichiers CIA lorsqu\'ils sont installés sur la carte SD émulée. N\'affecte que le contenu CIA installé lorsque le paramètre est activé.</string>
<string name="async_fs_operations">Opérations du système de fichiers asynchrones</string>
<string name="async_fs_operations_description">Rend les accès au système de fichier émulé asynchrones. Réduit grandement les saccades liées au système de fichiers, mais peut légèrement augmenter les temps de chargement.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Caméra intérieure</string>
@ -245,8 +243,6 @@
<string name="texture_filter_description">Améliore l\'aspect visuel des applications en appliquant un filtre aux textures. Les filtres pris en charge sont Anime4K Ultrafast, Bicubique, ScaleForce, xBRZ freescale et MMPX.</string>
<string name="delay_render_thread">Retarder le fil de rendu du jeu</string>
<string name="delay_render_thread_description">Délai le thread de rendu du jeu lorsqu\'il soumet des données au GPU. Cela permet de résoudre les problèmes de performance dans les (très rares) applications avec des fréquences d\'images dynamiques.</string>
<string name="simulate_3ds_gpu_timings">Simuler les timings du GPU de la 3DS</string>
<string name="simulate_3ds_gpu_timings_description">Retarde les évènements de complétion du GPU en suivant des mesures prises sur du matériel réel, afin que les jeux aient des mesure de temps de GPU plus réalistes. Aide à stabiliser les jeux à taux de rafraichissement dynamique. Désactiver cette fonctionnalité peut améliorer la performance dans de rares cas, au détriment de la stabilité.</string>
<string name="advanced">Avancé</string>
<string name="texture_sampling_name">Échantillonnage de texture</string>
<string name="texture_sampling_description">Remplace le filtre d\'échantillonnage utilisé par les jeux. Cela peut être utile dans certains cas où les jeux se comportent mal lors de la conversion ascendante. En cas de doute, réglez ce paramètre sur « Contrôlé par le jeu ».</string>
@ -319,8 +315,6 @@
<string name="audio_stretch_description">Étire le son pour réduire les saccades. Lorsqu\'il est activé, la latence est augmentée et les performances sont légèrement réduites.</string>
<string name="realtime_audio">Activer l\'audio en temps réel</string>
<string name="realtime_audio_description">Adapte la vitesse de lecture de l\'audio afin de ne pas être perturbé par les pertes de framerate. Ceci veut dire que l\'audio sera joué correctement même si le jeu n\'est pas aussi rapide. Peut provoquer des problèmes de synchronisation audio.</string>
<string name="simulate_headphones_plugged">Simuler le branchement d\'écouteurs</string>
<string name="simulate_headphones_plugged_description">Simule si des écouteurs sont branchés à la console 3DS émulée.</string>
<string name="audio_input_type">Périphérique d\'entrée audio</string>
<string name="sound_output_mode">Mode de sortie audio</string>
@ -376,6 +370,7 @@
<string name="learn_more">En savoir plus</string>
<string name="close">Fermer</string>
<string name="reset_to_default">Par défaut</string>
<string name="redump_games"><![CDATA[Merci de suivre les guides pour extraire à nouveau vos <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">cartouches</a> ou <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">titres installés</a>.]]></string>
<string name="option_default">Par défaut</string>
<string name="none">Aucun</string>
<string name="auto">Auto</string>
@ -418,39 +413,11 @@
<string name="preferences_layout">Disposition</string>
<!-- ROM loading errors -->
<string name="loader_error_generic_title">Erreur lors du chargement de l\'application</string>
<string name="loader_error_invalid_format">Format d\'application invalide</string>
<string name="loader_error_invalid_format_description"><![CDATA[Le format de fichier d\'application n\'est pas supporté.<br>Assurez vous d\'utiliser un des formats compatibles : <ul><li>Images de cartouche : <b>.cci/.zcci/.3ds</b></li><li>Archives installables : <b>.cia/.zcia</b></li><li>Applications Homebrew : <b>.3dsx/.z3dsx</b></li><li>Conteneurs NCCH : <b>.cxi/.zcxi/.app</b></li><li>Fichiers ELF : <b>.elf/.axf</b></li></ul>]]></string>
<string name="loader_error_invalid_system_mode">Mode système invalide</string>
<string name="loader_error_invalid_system_mode_description">Les applications exclusives à la New 3DS ne peuvent pas être chargées sans activer le mode New 3DS.</string>
<string name="loader_error_applying_patches">Erreur lors de l\'application de patchs</string>
<string name="loader_error_applying_patches_description">Une erreur générique s\'est produite lors de l\'application de correctifs à l\'application. Veuillez consulter les logs pour plus de détails.</string>
<string name="loader_error_patch_wrong_application">Échec de l\'application d\'un correctif car il est conçu pour une autre application. Veuillez vous assurer que vous utilisez les correctifs pour la bonne application, région et version.</string>
<string name="loader_error_encrypted">Votre ROM est chiffrée</string>
<string name="loader_error_encrypted_description"><![CDATA[Azahar ne supporte pas les applications encryptées. Lisez notre <a href=\"https://azahar-emu.org/blog/game-loading-changes/\">article</a> pour plus d\'informations.]]></string>
<string name="loader_error_invalid_format">Format de ROM non valide</string>
<string name="loader_error_file_not_found">Le fichier ROM n\'existe pas</string>
<string name="no_game_present">Aucun jeu démarrable présent !</string>
<string name="loader_error_generic">Une erreur s\'est produite lors du chargement de la ROM : \"%s (%d)\"</string>
<string name="core_error_success">Réussite</string>
<string name="core_error_not_initialized">Non initialisé</string>
<string name="core_error_get_loader">Aucun lanceur trouvé pour ce fichier, type de fichier incompatible</string>
<string name="core_error_system_mode">Échec lors de l\'analyse du fichier</string>
<string name="core_error_loader">Erreur de chargement générique</string>
<string name="core_error_loader_encrypted">Fichier encrypté</string>
<string name="core_error_loader_invalid_format">Fichier corrompu</string>
<string name="core_error_loader_gba_title">Le fichier est une application GBA</string>
<string name="core_error_loader_error_patches">Erreur lors de l\'application de patchs</string>
<string name="core_error_loader_patches_invalid_title">Les correctifs sont pour une application différente</string>
<string name="core_error_system_files">Fichiers systèmes manquants</string>
<string name="core_error_savestate">Échec de la sauvegarde du point de récupération</string>
<string name="core_error_artic_disconnected">Artic Base déconnecté</string>
<string name="core_error_n3ds_application">Le fichier est une application New 3DS</string>
<string name="core_error_core_exception_raised">Une erreur du cœur s\'est produite</string>
<string name="core_error_memory_exception_raised">Une erreur de mémoire s\'est produite</string>
<string name="core_error_shutdown_requested">Arrêt demandé</string>
<string name="core_error_unknown">Erreur inconnue</string>
<!-- Emulation Menu -->
<string name="emulation_menu_help">Appuyez sur Retour pour accéder au menu.</string>
<string name="emulation_save_state">Établir pt de récupération</string>
@ -598,10 +565,6 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Préparation des shaders</string>
<string name="building_shaders">Construction %s</string>
<string name="delete_shader_cache">Supprimer le cache de shaders</string>
<string name="delete_cache_select_backend">Sélectionnez l\'API graphique pour laquelle vous voulez supprimer le cache de shaders</string>
<string name="deleting_shader_cache">Suppression du cache de shaders pour cette application, veuillez patienter ...</string>
<string name="shader_cache_deleted">Le cache de shaders a été supprimé.</string>
<!-- About Game Dialog -->
<string name="play">Jouer</string>

View file

@ -212,8 +212,6 @@
<string name="storage">Archiviazione</string>
<string name="compress_cia_installs">Comprimi i contenuti CIA installati</string>
<string name="compress_cia_installs_description">Comprime il contenuto dei file CIA quando installati sulla scheda SD emulata. Riguarda solo i contenuti CIA installati mentre l\'impostazione è abilitata.</string>
<string name="async_fs_operations">Operazioni filesystem asincrone</string>
<string name="async_fs_operations_description">Rende asincroni gli accessi al filesystem emulato. Riduce drasticamente i micro-scatti legati alla lettura dei file, ma potrebbe aumentare leggermente i tempi di caricamento.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Fotocamera Interna</string>
@ -245,8 +243,6 @@
<string name="texture_filter_description">Migliora la grafica delle applicazioni applicando un filtro alle texture. I filtri supportati sono Anime4k Ultrafast, Bicubic, ScaleForce, xBRZ freescale e MMPX.</string>
<string name="delay_render_thread">Ritarda il thread di rendering del gioco</string>
<string name="delay_render_thread_description">Ritarda il thread di rendering del gioco quando invia dati alla GPU. Aiuta con i problemi di prestazioni nelle (poche) applicazioni con frame rate dinamici.</string>
<string name="simulate_3ds_gpu_timings">Simula timing della GPU 3DS</string>
<string name="simulate_3ds_gpu_timings_description">Ritarda gli eventi di completamento della GPU in base alle misurazioni effettuate su hardware reale, garantendo ai giochi una gestione dei tempi della GPU più realistica. Aiuta a stabilizzare i titoli con FPS dinamici. In rari casi, disattivare questa funzione può migliorare le prestazioni a discapito della stabilità.</string>
<string name="advanced">Avanzato</string>
<string name="texture_sampling_name">Campionamento texture</string>
<string name="texture_sampling_description">Sovrascrive il filtro di campionamento utilizzato dai giochi. Questo può essere utile in alcuni casi con giochi che gestiscono male l\'upscaling. Se hai dubbi, imposta questa opzione su \"Gestito dal gioco\".</string>
@ -319,8 +315,6 @@
<string name="audio_stretch_description">Allunga l\'audio per ridurre gli scatti. Quando è abilitato, aumenta la latenza dell\'audio e riduce lievemente le prestazioni.</string>
<string name="realtime_audio">Abilita audio in tempo reale</string>
<string name="realtime_audio_description">Regola la velocità della riproduzione dell\'audio per compensare i cali nel framerate dell\'emulazione. Questo significa che l\'audio verrà riprodotto a velocità normale anche mentre il framerate del gioco è basso. Può causare problemi di desincronizzazione dell\'audio.</string>
<string name="simulate_headphones_plugged">Simula cuffie collegate</string>
<string name="simulate_headphones_plugged_description">Simula se le cuffie sono collegate al sistema 3DS emulato.</string>
<string name="audio_input_type">Dispositivo di input dell\'audio</string>
<string name="sound_output_mode">Modalità di output del suono</string>
@ -376,6 +370,7 @@
<string name="learn_more">Scopri di più</string>
<string name="close">Chiudi</string>
<string name="reset_to_default">Reimposta</string>
<string name="redump_games"><![CDATA[Per favore segui le guide per dumpare nuovamente le tue <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">cartuccie di gioco</a> o <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">titoli installati</a>.]]></string>
<string name="option_default">Standard</string>
<string name="none">Nessuno</string>
<string name="auto">Auto</string>
@ -418,39 +413,11 @@
<string name="preferences_layout">Layout</string>
<!-- ROM loading errors -->
<string name="loader_error_generic_title">Errore nel caricamento dell\'applicazione</string>
<string name="loader_error_invalid_format">Formato applicazione non valido</string>
<string name="loader_error_invalid_format_description"><![CDATA[Formato del file dell\'applicazione non supportato.<br>Assicurati di utilizzare uno dei formati compatibili:<ul><li>Immagini schedine: <b>.cci/.zcci/.3ds</b></li><li>Archivi installabili: <b>.cia/.zcia</b></li><li>Titoli Homebrew: <b>.3dsx/.z3dsx</b></li><li>Container NCCH: <b>.cxi/.zcxi/.app</b></li><li>File ELF: <b>.elf/.axf</b></li></ul>]]></string>
<string name="loader_error_invalid_system_mode">Modalità di sistema non valida</string>
<string name="loader_error_invalid_system_mode_description">Le applicazioni esclusive per New 3DS non possono essere caricate senza aver abilitato la modalità New 3DS.</string>
<string name="loader_error_applying_patches">Errore nell\'applicazione della patch</string>
<string name="loader_error_applying_patches_description">Si è verificato un errore generico durante l\'applicazione di una patch all\'applicazione. Consulta il file di log per ulteriori dettagli.</string>
<string name="loader_error_patch_wrong_application">Impossibile applicare la patch perché è progettata per un\'altra applicazione. Assicurati di utilizzare le patch corrette per l\'applicazione, la regione e la versione corrispondenti.</string>
<string name="loader_error_encrypted">La tua ROM è criptata</string>
<string name="loader_error_encrypted_description"><![CDATA[Azahar non supporta le applicazioni criptate. Leggi il <a href=\"https://azahar-emu.org/blog/game-loading-changes/\">post sul nostro blog</a> per ulteriori informazioni.]]></string>
<string name="loader_error_invalid_format">Formato ROM non valido</string>
<string name="loader_error_file_not_found">Il file ROM non esiste</string>
<string name="no_game_present">Nessun gioco avviabile è presente!</string>
<string name="loader_error_generic">Si è verificato un errore durante il caricamento della ROM: \"%s (%d)\"</string>
<string name="core_error_success">Successo</string>
<string name="core_error_not_initialized">Non inizializzato</string>
<string name="core_error_get_loader">Loader per il file non trovato, tipo di file non compatibile</string>
<string name="core_error_system_mode">Analisi del file fallita</string>
<string name="core_error_loader">Errore generico del loader</string>
<string name="core_error_loader_encrypted">File criptato</string>
<string name="core_error_loader_invalid_format">File corrotto</string>
<string name="core_error_loader_gba_title">Il file è un titolo GBA</string>
<string name="core_error_loader_error_patches">Errore nell\'applicazione della patch</string>
<string name="core_error_loader_patches_invalid_title">Le patch sono per un\'altra applicazione</string>
<string name="core_error_system_files">File di sistema mancanti</string>
<string name="core_error_savestate">Savestate fallito</string>
<string name="core_error_artic_disconnected">Artic Base disconnesso</string>
<string name="core_error_n3ds_application">Il file è un\'applicazione New 3DS</string>
<string name="core_error_core_exception_raised">Rilevata eccezione del core</string>
<string name="core_error_memory_exception_raised">Rilevata eccezione della memoria</string>
<string name="core_error_shutdown_requested">Spegnimento richiesto</string>
<string name="core_error_unknown">Errore sconosciuto</string>
<!-- Emulation Menu -->
<string name="emulation_menu_help">Premi Indietro per accedere al menù</string>
<string name="emulation_save_state">Salva stato</string>
@ -557,7 +524,7 @@
<string name="copy_file_name">Copia file: %s</string>
<string name="copy_complete">Copia completata</string>
<string name="savestates">Stati salvati</string>
<string name="savestate_warning_message">Attenzione: i Savestate salvati NON sostituiscono i salvataggi in-game, e non sono pensati per essere affidabili.\n\nUsali a tuo rischio e pericolo.</string>
<string name="savestate_warning_message">Attenzione: Gli stati salvati NON sostituiscono i salvataggi in-game, e non sono pensati per essere affidabili.\n\nUsali a tuo rischio e pericolo.</string>
<!-- Software Keyboard -->
<string name="software_keyboard">Tastiera Software</string>
@ -598,10 +565,6 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Preparazione degli shader</string>
<string name="building_shaders">Compilazione %s</string>
<string name="delete_shader_cache">Cancella cache shader</string>
<string name="delete_cache_select_backend">Seleziona per quale API grafica eliminare la cache shader</string>
<string name="deleting_shader_cache">Eliminazione della cache shader per il titolo, attendi...</string>
<string name="shader_cache_deleted">Cache shader cancellate</string>
<!-- About Game Dialog -->
<string name="play">Riproduci</string>

View file

@ -68,12 +68,14 @@
<string name="preferences_graphics">Grafikk</string>
<string name="preferences_audio">Lyd</string>
<string name="preferences_debug">Feilsøk</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Ditt ROM er kryptert</string>
<string name="loader_error_invalid_format">Ugyldig ROM format </string>
<string name="emulation_show_fps">Vis FPS</string>
<string name="emulation_configure_controls">Konfigurer Kontroller</string>
<string name="emulation_edit_layout">Endre Utseende </string>
<string name="emulation_done">Ferdig</string>
<string name="emulation_toggle_controls">Bytt Kontrollene</string>
<string name="emulation_toggle_controls">Veksle Kontroller</string>
<string name="emulation_control_scale">Juster Skala</string>
<string name="emulation_open_settings">Åpne Innstillinger</string>
<string name="emulation_switch_screen_layout">Landskap Skjermoppsett</string>

View file

@ -212,6 +212,7 @@
<string name="storage">Lagring</string>
<string name="compress_cia_installs">Komprimera installerat CIA-innehåll</string>
<string name="compress_cia_installs_description">Komprimerar innehållet i CIA-filer när det installeras på det emulerade SD-kortet. Påverkar endast CIA-innehåll som installeras medan inställningen är aktiverad.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Innerkamera</string>
<string name="outer_left_camera">Yttre vänstra kameran</string>
@ -369,6 +370,7 @@
<string name="learn_more">Lär dig mer</string>
<string name="close">Stäng</string>
<string name="reset_to_default">Återställ till standard</string>
<string name="redump_games"><![CDATA[Följ anvisningarna för att göra en ny dump av dina <a href=\"https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/\">spelkassetter</a> eller <a href=\"https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/\">installerade titlarna</a>.]]></string>
<string name="option_default">Standard</string>
<string name="none">Ingen</string>
<string name="auto">Auto</string>
@ -410,7 +412,9 @@
<string name="preferences_theme">Tema och färg</string>
<string name="preferences_layout">Layout</string>
<!-- ROM loading errors -->
<string name="loader_error_encrypted">Ditt ROM är krypterat</string>
<string name="loader_error_invalid_format"> Ogiltigt ROM-format</string>
<string name="loader_error_file_not_found">ROM-filen finns inte</string>
<string name="no_game_present">Inget startbart spel närvarande!</string>
@ -561,6 +565,7 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Förbereder shaders</string>
<string name="building_shaders">Bygger %s</string>
<!-- About Game Dialog -->
<string name="play">Spela</string>
<string name="uninstall_cia">Avinstallera applikation</string>

View file

@ -233,8 +233,6 @@
<string name="storage">Storage</string>
<string name="compress_cia_installs">Compress installed CIA content</string>
<string name="compress_cia_installs_description">Compresses the content of CIA files when installed to the emulated SD card. Only affects CIA content which is installed while the setting is enabled.</string>
<string name="async_fs_operations">Asynchronous filesystem operations</string>
<string name="async_fs_operations_description">Makes emulated filesystem accesses asynchronous. Greatly reduces filesystem related stutter, but may slightly increase load times.</string>
<!-- Camera settings strings -->
<string name="inner_camera">Inner Camera</string>
@ -266,8 +264,6 @@
<string name="texture_filter_description">Enhances the visuals of applications by applying a filter to textures. The supported filters are Anime4K Ultrafast, Bicubic, ScaleForce, xBRZ freescale, and MMPX.</string>
<string name="delay_render_thread">Delay Game Render Thread</string>
<string name="delay_render_thread_description">Delay the game render thread when it submits data to the GPU. Helps with performance issues in the (very few) applications with dynamic framerates.</string>
<string name="simulate_3ds_gpu_timings">Simulate 3DS GPU Timings</string>
<string name="simulate_3ds_gpu_timings_description">Delays GPU completion events based on measurements taken from real hardware, so that games have more realistic GPU time measurements. Helps stabilize dynamic FPS games. Disabling this feature may improve performance in some rare cases at the cost of stability.</string>
<string name="advanced">Advanced</string>
<string name="texture_sampling_name">Texture Sampling</string>
<string name="texture_sampling_description">Overrides the sampling filter used by games. This can be useful in certain cases with poorly behaved games when upscaling. If unsure, set this to Game Controlled.</string>
@ -340,8 +336,6 @@
<string name="audio_stretch_description">Stretches audio to reduce stuttering. When enabled, increases audio latency and slightly reduces performance.</string>
<string name="realtime_audio">Enable Realtime Audio</string>
<string name="realtime_audio_description">Scales audio playback speed to account for drops in emulation framerate. This means that audio will play at full speed even while the game framerate is low. May cause audio desync issues.</string>
<string name="simulate_headphones_plugged">Simulate Headphones Plugged In</string>
<string name="simulate_headphones_plugged_description">Simulates whether headphones are plugged in to the emulated 3DS system.</string>
<string name="audio_input_type">Audio Input Device</string>
<string name="sound_output_mode">Sound Output Mode</string>
@ -397,6 +391,7 @@
<string name="learn_more">Learn More</string>
<string name="close">Close</string>
<string name="reset_to_default">Reset to Default</string>
<string name="redump_games"><![CDATA[Please follow the guides to redump your <a href="https://web.archive.org/web/20240304210021/https://citra-emu.org/wiki/dumping-game-cartridges/">game cartridges</a> or <a href="https://web.archive.org/web/20240304210011/https://citra-emu.org/wiki/dumping-installed-titles/">installed titles</a>.]]></string>
<string name="option_default">Default</string>
<string name="none">None</string>
<string name="auto">Auto</string>
@ -439,39 +434,11 @@
<string name="preferences_layout">Layout</string>
<!-- ROM loading errors -->
<string name="loader_error_generic_title">Error loading application</string>
<string name="loader_error_invalid_format">Invalid application format</string>
<string name="loader_error_invalid_format_description"><![CDATA[The application file format not supported.<br>Please make sure you are using one of the compatible file formats:<ul><li>Cartridge images: <b>.cci/.zcci/.3ds</b></li><li>Installable archives: <b>.cia/.zcia</b></li><li>Homebrew titles: <b>.3dsx/.z3dsx</b></li><li>NCCH containers: <b>.cxi/.zcxi/.app</b></li><li>ELF files: <b>.elf/.axf</b></li></ul>]]></string>
<string name="loader_error_invalid_system_mode">Invalid system mode</string>
<string name="loader_error_invalid_system_mode_description">New 3DS exclusive applications cannot be loaded without enabling the New 3DS mode.</string>
<string name="loader_error_applying_patches">Error applying patches</string>
<string name="loader_error_applying_patches_description">A generic error occurred while applying a patch to the application. Please check the log for more details.</string>
<string name="loader_error_patch_wrong_application">Failed to apply a patch because it is designed for a different application. Please make sure you are using the patches for the right application, region and version.</string>
<string name="loader_error_encrypted">Your ROM is Encrypted</string>
<string name="loader_error_encrypted_description"><![CDATA[Azahar does not support encrypted applications. Read our <a href="https://azahar-emu.org/blog/game-loading-changes/">blog post</a> for more information.]]></string>
<string name="loader_error_invalid_format">Invalid ROM format</string>
<string name="loader_error_file_not_found">ROM file does not exist</string>
<string name="no_game_present">No bootable game present!</string>
<string name="loader_error_generic">An error occurred while loading ROM: \"%s (%d)\"</string>
<string name="core_error_success">Success</string>
<string name="core_error_not_initialized">Not initialized</string>
<string name="core_error_get_loader">Loader for file not found, incompatible file type</string>
<string name="core_error_system_mode">Failed to parse file</string>
<string name="core_error_loader">Generic loader error</string>
<string name="core_error_loader_encrypted">Encrypted file</string>
<string name="core_error_loader_invalid_format">Corrupted file</string>
<string name="core_error_loader_gba_title">File is GBA title</string>
<string name="core_error_loader_error_patches">Error applying patches</string>
<string name="core_error_loader_patches_invalid_title">Patches are for a different application</string>
<string name="core_error_system_files">Missing system files</string>
<string name="core_error_savestate">Savestate failed</string>
<string name="core_error_artic_disconnected">Artic Base disconnected</string>
<string name="core_error_n3ds_application">File is New 3DS application</string>
<string name="core_error_core_exception_raised">Core exception raised</string>
<string name="core_error_memory_exception_raised">Memory exception raised</string>
<string name="core_error_shutdown_requested">Shutdown requested</string>
<string name="core_error_unknown">Unknown error</string>
<!-- Emulation Menu -->
<string name="emulation_menu_help">Press Back to access the menu.</string>
<string name="emulation_save_state">Save State</string>
@ -619,10 +586,6 @@
<!-- Disk Shader Cache -->
<string name="preparing_shaders">Preparing Shaders</string>
<string name="building_shaders">Building %s</string>
<string name="delete_shader_cache">Delete Shader Cache</string>
<string name="delete_cache_select_backend">Select which graphics API to delete the shader cache</string>
<string name="deleting_shader_cache">Deleting shader cache for title, please wait…</string>
<string name="shader_cache_deleted">Shader cache deleted</string>
<!-- About Game Dialog -->
<string name="play">Play</string>

View file

@ -4,8 +4,8 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.13.2" apply false
id("com.android.library") version "8.13.2" apply false
id("com.android.application") version "8.13.1" apply false
id("com.android.library") version "8.13.1" apply false
id("org.jetbrains.kotlin.android") version "2.0.20" apply false
id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20"
}

View file

@ -1,4 +1,4 @@
add_library(audio_core STATIC EXCLUDE_FROM_ALL
add_library(audio_core STATIC
audio_types.h
codec.cpp
codec.h

View file

@ -1,12 +0,0 @@
add_library(citra_cli STATIC EXCLUDE_FROM_ALL
citra_cli.h
citra_cli.cpp
compression_cli.h
compression_cli.cpp
)
target_link_libraries(citra_cli PRIVATE citra_common citra_core)
if (MSVC)
target_link_libraries(citra_cli PRIVATE getopt)
endif()

View file

@ -1,45 +0,0 @@
// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#undef _UNICODE
#include <getopt.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include "citra_cli/citra_cli.h"
#include "citra_cli/compression_cli.h"
namespace CitraCLI {
bool CheckForOptions(const char* optstring, int argc, char* argv[]) {
const int original_opterr = opterr;
opterr = 0; // Temporarily suppress invalid option messages
bool return_value = false;
int option;
while ((option = getopt(argc, argv, optstring)) != -1) {
for (size_t i = 0; optstring[i] != '\0'; ++i) {
if (optstring[i] == ':') {
continue;
}
if (option == optstring[i]) {
return_value = true;
break;
}
}
}
opterr = original_opterr;
optind = 1; // Reset getopt so that it can be used again
return return_value;
}
int ParseCommand(int argc, char* argv[]) {
if (CheckForOptions(compression_ops_optstring, argc, argv)) {
return ParseCompressionCommand(argc, argv);
}
}
} // namespace CitraCLI

Some files were not shown because too many files have changed in this diff Show more