diff --git a/.github/workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml index c841996f..3bfc2c23 100644 --- a/.github/workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -1,13 +1,16 @@ -name: cooker-selfhosted +name: "Build cooker" on: push: branches: - cooker* + - feat* paths: - '.github/workflows/**' + - 'automation_tools/**' - 'emu-configs/**' - 'es-configs/**' + - 'functions/**' - 'rd-submodules/**' - '*.sh' - 'net.retrodeck.retrodeck.yml' @@ -29,36 +32,50 @@ jobs: - name: Remove stuck mounts run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* continue-on-error: true + + - name: Clone RetroDECK repo + uses: actions/checkout@v3 + with: + submodules: 'true' - - name: Generate build ID - id: generating_buildid - run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" - - - uses: actions/checkout@v3 + - name: "Install dependencies" + run: "automation_tools/install_dependencies.sh" - - name: Initialize environment + - name: Generate cooker build ID run: | - git pull - git submodule init - git submodule update - sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - flatpak install --user -y --noninteractive \ - org.kde.Sdk//6.3 \ - org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ - io.qt.qtwebengine.BaseApp/x86_64/6.3 \ - org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ - runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 - /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks + word1=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word1="$(tr '[:lower:]' '[:upper:]' <<< ${word1:0:1})${word1:1}" + word2=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word2="$(tr '[:lower:]' '[:upper:]' <<< ${word2:0:1})${word2:1}" + result=$capitalized_word1$capitalized_word2 + echo $result > ${GITHUB_WORKSPACE}/buildid + echo "buildid=$result" >> $GITHUB_ENV + echo "VersionID is $result" + + - name: Run pre-build automation tasks + run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + + - name: "Adding flatpak portal for automated updates (cooker only)" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh" + + - name: "Updating release notes in appdata" + run: "automation_tools/appdata_management.sh" + + - name: "[DEBUG] Outputting manifest" + run: cat net.retrodeck.retrodeck.yml + + - name: "Build flatpak: download only" + id: "flatpak-download" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + continue-on-error: true + + # Sometimes flatpak download fails, in this case it tries a second time + - name: "Build flatpak: download only (retry)" + if: steps.flatpak-download.outcome == 'failure' + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak - run: | - git config --global protocol.file.allow always - mkdir -vp ${GITHUB_WORKSPACE}/local - mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker - flatpak-builder --user --force-clean --install-deps-from=flathub --install-deps-from=flathub-beta --repo=${GITHUB_WORKSPACE}/local ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" - name: Create Artifact for flathub run: | @@ -69,36 +86,64 @@ jobs: continue-on-error: true - name: Create Bundle - run: | - flatpak build-bundle ${GITHUB_WORKSPACE}/local RetroDECK.flatpak net.retrodeck.retrodeck + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh" - name: Set environment variable with current branch name run: echo "GITHUB_REF_SLUG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV + - name: Get commits since last release + run: | + # Get the latest release tag + LATEST_TAG=$(git describe --tags --abbrev=0) + # Get all commits since the latest release tag + COMMITS=$(git log $LATEST_TAG..HEAD --pretty=format:"- %s") + # Set the output variable + echo "::set-output name=commits::$COMMITS" + id: commits + continue-on-error: true + + - name: Get branch name + id: branch_name + run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV + + # if it's a feature branch it will not marked as "latest" cooker version + - name: "Set makeLatest (cooker only)" + run: | + if [[ "$BRANCH_NAME" == 'feat/'* ]]; then + echo "MAKE_LATEST=false" >> $GITHUB_ENV + else + echo "MAKE_LATEST=true" >> $GITHUB_ENV + fi + - name: Publish the flatpak in a new cooker release uses: ncipollo/release-action@v1 with: - tag: "${{ env.GITHUB_REF_SLUG }}-${{ steps.generating_buildid.outputs.build-id }}" + tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}" body: | # Release Notes (Cooker) This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + On branch [${{env.BRANCH_NAME}}](https://github.com/XargonWan/RetroDECK/tree/${{env.BRANCH_NAME}}). + + ## Commits since last release + ${{ steps.commits.outputs.commits }} + + For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/qQcrFvaA2C) on our Discord server. Cooker channel is provided for the community to test fixes and explore new functionality. Please DO NOT open issues or ask support on this build. - artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" + artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz" allowUpdates: true - #prerelease: true - makeLatest: true - #draft: true + makeLatest: ${{env.MAKE_LATEST}} # if it's a feat branch is not considered the latest build token: ${{ secrets.TRIGGER_BUILD_TOKEN }} repo: RetroDECK-cooker continue-on-error: true # In case it cannot publish the release at least it's providing the flatpak file for creating a manual release - - name: Upload RetroDECK.flatpak + - name: Upload RetroDECK-cooker.flatpak uses: actions/upload-artifact@v3 with: name: retrodeck-flatpak - path: RetroDECK.flatpak + path: RetroDECK-cooker.flatpak continue-on-error: true + diff --git a/.github/workflows/flathub_push_main.yml b/.github/workflows/flathub_push_main.yml index 1b4bad8f..7e085521 100644 --- a/.github/workflows/flathub_push_main.yml +++ b/.github/workflows/flathub_push_main.yml @@ -1,5 +1,5 @@ -name: PUSH-main-flathub +name: "Push main on Flathub" on: workflow_dispatch: @@ -9,6 +9,7 @@ jobs: Pushing_main_into_flathub: runs-on: ubuntu-latest steps: + - name: Pushing shell: bash run: | @@ -47,17 +48,35 @@ jobs: # Copying only a few files as the others are cloned by git in retrodeck.sh cd $gits_folder/RetroDECK cp -rf \ - 'flathub.json' \ 'LICENSE' \ - 'flathub.yml' \ 'README.md' \ $gits_folder/flathub/ cd $gits_folder/flathub ls -lah - # manipulating manifest - mv flathub.yml net.retrodeck.retrodeck.yml + # Creating the manifest for flathub + manifest='net.retrodeck.retrodeck.yml' + sed -n '/cleanup/q;p' $gits_folder/RetroDECK/net.retrodeck.retrodeck.yml > $manifest + sed -i '/^[[:space:]]*#/d' $manifest + sed -i 's/[[:space:]]*#.*$//' $manifest + cat << EOF >> $manifest + modules: + - name: retrodeck + buildsystem: simple + build-commands: + - cp -rn files/* /app + sources: + - type: archive + url: https://artifacts.retrodeck.net/artifacts/RetroDECK-Artifact.tar.gz + sha256: __SHA__ + EOF + + cat << EOF >> flathub.json + { + "only-arches": ["x86_64"] + } + EOF # Getting latest release name # version=$(\ diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index 438b25f7..b71961c6 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -1,9 +1,19 @@ -name: main-selfhosted +name: "Build main" on: push: branches: - main + paths: + - '.github/workflows/**' + - 'automation_tools/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'functions/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' pull_request: branches: - main @@ -22,35 +32,43 @@ jobs: run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* continue-on-error: true - - name: Generate build ID - id: generating_buildid - run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" - - - uses: actions/checkout@v3 + - name: Clone RetroDECK repo + uses: actions/checkout@v3 + with: + submodules: 'true' - - name: Initialize enviornment - run: | - git pull - git submodule init - git submodule update - sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - flatpak install --user -y --noninteractive \ - org.kde.Sdk//6.3 \ - org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ - io.qt.qtwebengine.BaseApp/x86_64/6.3 \ - org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ - runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 - /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks + - name: "Install dependencies" + run: "automation_tools/install_dependencies.sh" + + - name: Run pre-build automation tasks + run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + + - name: Read manifest content + id: read_manifest + run: echo "::set-output name=file_content::$(cat net.retrodeck.retrodeck.yml)" + + # - name: "Updating release notes in appdata" + # run: "automation_tools/appdata_management.sh" + + - name: Check versions (main only) + id: check_version_string + run: "automation_tools/main_version_checker.sh" + + - name: "[DEBUG] Outputting manifest" + run: cat net.retrodeck.retrodeck.yml + + - name: "Build flatpak: download only" + id: "flatpak-download" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + continue-on-error: true + + # Sometimes flatpak download fails, in this case it tries a second time + - name: "Build flatpak: download only (retry)" + if: steps.flatpak-download.outcome == 'failure' + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak - run: | - git config --global protocol.file.allow always - mkdir -vp ${GITHUB_WORKSPACE}/local - mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker - flatpak-builder --user --force-clean --install-deps-from=flathub --install-deps-from=flathub-beta --repo=${GITHUB_WORKSPACE}/local ${GITHUB_WORKSPACE}/retrodeck-flatpak-main net.retrodeck.retrodeck.yml + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" - name: Create Artifact for flathub run: | @@ -61,8 +79,7 @@ jobs: continue-on-error: true - name: Create Bundle - run: | - flatpak build-bundle ${GITHUB_WORKSPACE}/local RetroDECK.flatpak net.retrodeck.retrodeck + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh" - name: Getting version info id: version @@ -84,7 +101,6 @@ jobs: bodyFile: "body.md" artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" allowUpdates: true - #prerelease: true makeLatest: true token: ${{ secrets.TRIGGER_BUILD_TOKEN }} repo: RetroDECK diff --git a/.github/workflows/TEST_release_info.yml b/.github/workflows/removed/TEST_release_info.yml similarity index 100% rename from .github/workflows/TEST_release_info.yml rename to .github/workflows/removed/TEST_release_info.yml diff --git a/.github/workflows/cooker.yml b/.github/workflows/removed/cooker.yml similarity index 100% rename from .github/workflows/cooker.yml rename to .github/workflows/removed/cooker.yml diff --git a/.github/workflows/flathub_push_cooker.yml b/.github/workflows/removed/flathub_push_cooker.yml similarity index 100% rename from .github/workflows/flathub_push_cooker.yml rename to .github/workflows/removed/flathub_push_cooker.yml diff --git a/.github/workflows/main.yml b/.github/workflows/removed/main.yml similarity index 100% rename from .github/workflows/main.yml rename to .github/workflows/removed/main.yml diff --git a/.github/workflows/remove-artifacts.yml b/.github/workflows/removed/remove-artifacts.yml similarity index 100% rename from .github/workflows/remove-artifacts.yml rename to .github/workflows/removed/remove-artifacts.yml diff --git a/.github/workflows/removed/update-readthedocs.yml b/.github/workflows/removed/update-readthedocs.yml new file mode 100644 index 00000000..f32127e4 --- /dev/null +++ b/.github/workflows/removed/update-readthedocs.yml @@ -0,0 +1,34 @@ +name: Update-ReadTheDocs + +on: + gollum + # push: + # branches: + # - main + # paths: + # - 'wiki-rtd' + # pull_request: + # branches: + # - main + # paths: + # - 'wiki-rtd' + # workflow_dispatch: + + +jobs: + + Job1_-_Building_P1: + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v3 + + - name: Update ReadTheDocs wiki-rtd + id: wiki-rtd-update + run: | + git checkout https://github.com/XargonWan/RetroDECK.wiki-rtd.git tmp/wiki-rtd + cp -rf tmp/wiki-rtd/* wiki-rtd + rm wiki-rtd/index.md + mv wiki-rtd/Home.md wiki-rtd/index.md + git commit -m "Updating wiki-rtd" + git push \ No newline at end of file diff --git a/.github/workflows/submodule-update.yml b/.github/workflows/submodule-update.yml new file mode 100644 index 00000000..af02cfd7 --- /dev/null +++ b/.github/workflows/submodule-update.yml @@ -0,0 +1,57 @@ +name: Sunday Submodule Update + +on: + # At 4:00 (CET) + schedule: + - cron: '0 2 * * 0' + workflow_dispatch: + +jobs: + update_submodules: + name: Update submodules and create PR + runs-on: ubuntu-latest + steps: + + - name: Checkout repo with submodules + uses: actions/checkout@v2 + with: + token: ${{ secrets.REPO_TOKEN }} + submodules: recursive + + - name: Fetch all remote branches + run: git fetch --all + + - name: List cooker branches by date + id: list_branches + run: | + BRANCHES=$(git for-each-ref --sort=-committerdate refs/remotes/origin/cooker* --format='%(refname)') echo “::set-output name=branches::$BRANCHES” + + - name: Select target branch + id: select_branch + run: | + TARGET_BRANCH=(echo{{ steps.list_branches.outputs.branches }} | head -n 1) + echo “::set-output name=target_branch::$TARGET_BRANCH” + git checkout $TARGET_BRANCH + echo "Working on $TARGET_BRANCH" + + - name: Update submodules with command + run: git submodule update --remote --merge --recursive + + - name: Configure Git credentials + run: | + git config --global user.name 'GitHub bot' + git config --global user.email 'bot@noreply.github.com' + + - name: Commit and push changes + run: | + git commit -am "Sunday submodule update" + git push origin HEAD:submodule-update + + - name: Create PR + uses: repo-sync/pull-request@v2 + with: + github_token: ${{ secrets.REPO_TOKEN }} + pr_title: "Sunday submodule update" + pr_body: "This PR updates the submodules to the latest commit on their remote repositories." + source_branch: "submodule-update" + destination_branch: "cooker*" diff --git a/.gitignore b/.gitignore index 934dbffd..d1256aed 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,7 @@ Thumbs.db .flatpak-builder/ retrodeck-flatpak-cooker/ retrodeck-flatpak/ -bakcup +backup .old +tmp +.godot diff --git a/.gitmodules b/.gitmodules index 03419e80..038a6d59 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "rd-submodules/shared-modules"] path = rd-submodules/shared-modules url = https://github.com/flathub/shared-modules.git +[submodule "rd-submodules/ryujinx"] + path = rd-submodules/ryujinx + url = https://github.com/flathub/org.ryujinx.Ryujinx diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..5bf1fa68 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,31 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: wiki-rtd/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +formats: + - pdf + - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: wiki-rtd/requirements.txt \ No newline at end of file diff --git a/README.md b/README.md index 7f85254e..d3db6cd5 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,11 @@ ![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck) ![Discord](https://img.shields.io/discord/951662718102962256?label=discord) ![GitHub](https://img.shields.io/github/license/XargonWan/RetroDECK) +[![Documentation Status](https://readthedocs.org/projects/retrodeck/badge/?version=latest)](https://retrodeck.readthedocs.io/en/latest/?badge=latest) -# RetroDECK -**RetroDECK** brings an environment to catalog and play your retro games directly from SteamOS and it's tailored specifically for the **Steam Deck**. +# RetroDECK on your device! -It's inspired by embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera. - -Powered by [EmulationStation Desktop Edition](https://es-de.org), which uses RetroArch and other standalone emulators to allow you to import and play your favorite retro (and even not-so-retro) games in a tidy environment without flooding your Steam library. - -Visit our [website](https://retrodeck.net) and Join our [Discord](https://discord.gg/Dz3szYsP8g)!

screenshot screenshot
@@ -24,22 +19,60 @@ Visit our [website](https://retrodeck.net) and Join our [Discord](https://discor


-## What does it mean to be "tailored for the Steam Deck"? -It means that all the configurations are ready to go and tweaked to get the best graphics and performance on the Deck without having the hassle of choosing, installing and configuring tons of emulators: just put your games in the roms folder, provide your own bioses and start your games. +## What is RetroDECK? +RetroDECK is a [EmulationStation Desktop Edition](https://es-de.org) powered application that builds in a variety of emulators and other software that allows you to play your favorite retro (and even not-so-retro) games in a tidy contained flatpak sandbox environment. It's inspired by embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera. -## Do I have to partition my disk to install it? -No partitioning or formatting is required. RetroDECK (differently from AmberELEC, Batocera and others) comes as a flatpak: just install it as any other application and launch it from your desktop or Steam library. You still retain the ability to return to SteamOS by pressing the Steam button or opening the Quick Access menu while using RetroDECK. +You can also check out our: [Flathub Page](https://flathub.org/apps/net.retrodeck.retrodeck)
-## Is it available on Windows? -No, RetroDECK doesn't support Windows, but the project is fully open source so you can port it if you wish. As an alternative, [Retrobat](http://www.retrobat.ovh/) offers similar functionality (but may not be compatible with RetroDECK's rom paths). +## What devices/systems does RetroDECK support: -## How can I install it? -Just install it from Discover store.
-However if you want to test the cooker version you can follow the [Installation instructions](https://github.com/XargonWan/RetroDECK/wiki/How-to:-Getting-started) on the Wiki +### Steam Deck -## Can I help? -Of course, any help is appreciated, and not only by programming, just check out our [Discord](https://discord.gg/Dz3szYsP8g)! -


+Supported from the start and RetroDECK is tailored to the Steam Deck during the beta period. The goal is that all the configurations are ready out-of-the-box and optimized towards the Steam Deck. + +### Linux Desktop +Technically it is working, but the user experience might not be that great it could contain desktop specific bugs and other issues. +You will also need to manually configure the input to match your desktop and might need to tweak more settings. If you want to try it make sure that your distribution has flatpak support (else you will need to install it).
+We will start to have a bigger desktop focus after the beta period is over. + +### Other SteamOS or Linux handheld gaming devices with flatpak support +We do plan to support other SteamOS based devices in the future. But during the BETA we are focusing on the Steam Deck.
+You can get it to run on other Linux based devices it is not just as seamless as we want it to be and does not live up to our higher standards.
+You will need to manually configure the input to match your device and might need to tweak more settings if you try it on a none Steam Deck device. There might also be some hardware specific bugs. -###### *The Steam Deck logo is a registered trademark of Valve Corporation. This project is in no way officially affiliated with Valve.
All trademarks, logos and brand names are the property of their respective owners. All company, product and service names used in this project are for identification purposes only. Use of these names, trademarks and brands does not imply endorsement.* +## Do you have any plans for other systems? +RetroDECK does not have plans to support Windows, macOS, Android, or iOS.
For similar functionality on Windows you could explore [Retrobat](https://www.retrobat.org/) as an alternative. + +## How do I install RetroDECK? +Read and follow the guide here: [Installation instructions](https://github.com/XargonWan/RetroDECK/wiki/How-to:-Getting-started) on the Wiki + +## The RetroDECK community: + +[Website](https://retrodeck.net)
+[Wiki](https://github.com/XargonWan/RetroDECK/wiki)
+[Discord](https://discord.gg/Dz3szYsP8g)
+[Lemmy](https://lemmy.zip/c/retrodeck)
+[Subreddit](https://www.reddit.com/r/retrodeck) + + +# Short FAQ + +Please read the [Wiki](https://github.com/XargonWan/RetroDECK/wiki) for even more information. + +## Do I have to partition or format my disk/sdcard to install it? +No, partitioning or formatting is not needed at all. RetroDECK (differently from AmberELEC, Batocera and others) comes as a flatpak. Just install it as any other application and launch it from your desktop and/or Steam library. + +## Can I contribute to the project? +Yes! Everybody is welcome to contribute in any way possible if it is personal time or funds, just check out our [Discord](https://discord.gg/Dz3szYsP8g)! +- Do you know how to code and want to contribute? Please join the development team! +- Maybe you know graphics, art or UI & UX design? Join the discussion! +- You can just help by helping others in the support or guide people on various social media and communication platforms. +- You can also help by just finding and testing the best configurations for the emulators and the roms. +- Or just help us by doing bug reports on all the issues you find (please check old issues first before submitting a new one). +- By joining the ✨-new-helpers-start-here channel on [Discord](https://discord.gg/Mv3GZnwrE8) and keeping an eye on the [issues](https://github.com/XargonWan/RetroDECK/issues) tab as well as the [Roadmap](https://github.com/XargonWan/RetroDECK/milestones) tab, you can be up to speed on the latest developments on RetroDECK. +- We have a [Patreon](https://www.patreon.com/RetroDECK) page if you want to help us keep our build servers running or just buy us a beverage + +###### The Steam Deck logo is a registered trademark of Valve Corporation. This project is in no way officially affiliated with Valve.
+ +###### All trademarks, logos and brand names are the property of their respective owners. All company, product and service names used in this project are for identification purposes only. Use of these names, trademarks and brands does not imply endorsement. diff --git a/automation_tools/appdata_management.sh b/automation_tools/appdata_management.sh new file mode 100755 index 00000000..f6cdfb19 --- /dev/null +++ b/automation_tools/appdata_management.sh @@ -0,0 +1,94 @@ +#!/bin/bash + +# THIS SCRIPT IS BROKEN HENCE DISABLED FTM +# This script is getting the latest release notes from the wiki and add them to the appdata + +source automation_tools/version_extractor.sh + +# Fetch appdata version +appdata_version=$(fetch_appdata_version) +echo -e "Appdata:\t\t$appdata_version" + +# Defining manifest file location +appdata_file="net.retrodeck.retrodeck.appdata.xml" + +# Check if release with appdata_version already exists +if grep -q "version=\"$appdata_version\"" "$appdata_file"; then + echo "Deleting existing release version $appdata_version..." + + # Remove the existing release entry + sed -i "//d" "$appdata_file" +fi + +echo "Adding new release version $appdata_version..." + +# Get today's date in the required format (YYYY-MM-DD) +today_date=$(date +"%Y-%m-%d") +echo "Today is $today_date" + +# Construct the release snippet +release_snippet="\ + + + https://github.com/XargonWan/RetroDECK/releases/tag/$appdata_version + + RELEASE_NOTES_PLACEHOLDER + + " + +# Read the entire content of the XML file +xml_content=$(cat "$appdata_file") + +# Replace RELEASE_NOTES_PLACEHOLDER with the actual release notes +# TODO +git clone https://github.com/XargonWan/RetroDECK.wiki.git /tmp/wiki + +# Path to the markdown file +wiki="/tmp/wiki/Version-history:-Patch-Notes.md" +# Read the markdown file until the first occurrence of "---" +latest_version_notes="" +while IFS= read -r line; do + if [ "$line" = "---" ]; then + break + fi + latest_version_notes+="$line\n" +done < "$wiki" + +# Extract the version number +version_number="${latest_version_notes#*# RetroDECK }" # Remove text before "# RetroDECK " +version_number="${version_number%% -*}" # Remove text after " - " + +# Extract sections from the latest version notes +sections=$(echo "$latest_version_notes" | awk '/##/ { print; }') + +# Create a formatted section list +section_list="" +current_section="" +while IFS= read -r line; do + if [[ "$line" == "##"* ]]; then + if [ -n "$current_section" ]; then + section_list+="" + fi + section_name="${line##*# }" + section_list+="

${section_name}

" +fi + +# Replace RELEASE_NOTES_PLACEHOLDER with the actual release notes +release_description="${release_snippet/RELEASE_NOTES_PLACEHOLDER/$section_list}" + +# Append the new release snippet to the content +modified_xml_content="${xml_content//$release_description}" + +# Overwrite the original XML file with the modified content +echo "$modified_xml_content" > "$appdata_file" + +# Format the XML file +#xmlstarlet fo --omit-decl "$appdata_file" diff --git a/automation_tools/automation_task_list.cfg b/automation_tools/automation_task_list.cfg index 00497aff..ebf7d98f 100644 --- a/automation_tools/automation_task_list.cfg +++ b/automation_tools/automation_task_list.cfg @@ -1,5 +1,12 @@ # The proper format for this file is # ACTION^PLACEHOLDERTEXT^URL^REPO(Optional) -hash^DOOMSHAPLACEHOLDER^https://buildbot.libretro.com/assets/cores/DOOM/Doom%20%28Shareware%29.zip +# hash^DOOMSHAPLACEHOLDER^https://buildbot.libretro.com/assets/cores/DOOM/Doom%20%28Shareware%29.zip hash^VITASHAPLACEHOLDER^https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip hash^DUCKSTATIONSHAPLACEHOLDER^https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage +hash^SAMEDUCKSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip +hash^PPSSPPBIOSHASHPLACEHOLDER^https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip +hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip +hash^XEMUHDDHASHPLACEHOLDER^https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip +latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main +outside_info^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid +branch^THISBRANCH diff --git a/automation_tools/codename_wordlist.txt b/automation_tools/codename_wordlist.txt new file mode 100644 index 00000000..6faa556b --- /dev/null +++ b/automation_tools/codename_wordlist.txt @@ -0,0 +1,3319 @@ +aback +abase +abate +abaya +abbey +abbot +abets +abhor +abide +abode +abort +about +above +abuse +abuts +abyss +ached +aches +acids +acing +ackee +acorn +acres +acrid +acted +actin +actor +acute +adage +adapt +added +adder +addle +adept +adieu +adios +adits +adman +admin +admit +adobe +adobo +adopt +adore +adorn +adult +adzes +aegis +aeons +aerie +affix +afire +afoot +afore +after +again +agape +agate +agave +agent +aggro +agile +aging +aglow +agony +agora +agree +ahead +ahold +aided +aider +aides +ailed +aimed +aimer +aioli +aired +aisle +alarm +album +alder +aleph +alert +algae +algal +alias +alibi +alien +align +alike +alive +alkyd +alkyl +allay +alley +allot +allow +alloy +allyl +aloes +aloft +aloha +alone +along +aloof +aloud +alpha +altar +alter +altos +alums +amass +amaze +amber +ambit +amble +ambos +amend +amide +amine +amino +amiss +amity +amnio +among +amour +amped +ample +amply +amuse +ancho +angel +anger +angle +angry +angst +anima +anime +anion +anise +ankle +annas +annex +annoy +annul +anode +anole +antic +antis +antsy +anvil +aorta +apace +apart +aphid +apnea +apple +apply +apron +apses +apter +aptly +aquas +arbor +ardor +areal +areas +areca +arena +argon +argot +argue +argus +arias +arils +arise +armed +armor +aroma +arose +array +arrow +arses +arson +artsy +asana +ascot +ashen +ashes +aside +asked +asker +askew +aspen +aspic +assay +asses +asset +aster +astir +asura +atlas +atman +atoll +atoms +atone +atopy +attic +audio +audit +auger +aught +augur +aunts +aunty +aural +auras +autos +auxin +avail +avers +avert +avian +avoid +avows +await +awake +award +aware +awash +awful +awoke +axels +axial +axils +axing +axiom +axion +axles +axons +azide +azole +azure +babel +babes +babka +backs +bacon +baddy +badge +badly +bagel +baggy +bails +bairn +baits +baize +baked +baker +bakes +baldy +baled +baler +bales +balks +balky +balls +balms +balmy +balsa +banal +bands +bandy +banes +bangs +banjo +banks +barbs +bards +bared +barer +bares +barge +barks +barmy +barns +baron +barre +basal +based +baser +bases +basic +basil +basin +basis +basks +basso +bassy +baste +batch +bated +bathe +baths +batik +baton +batts +batty +bawdy +bawls +bayed +bayou +beach +beads +beady +beaks +beams +beamy +beans +beard +bears +beast +beats +beaus +beaut +beaux +bebop +becks +beech +beefs +beefy +beeps +beers +beery +beets +befit +began +beget +begin +begun +beige +being +belay +belch +belie +belle +bells +belly +below +belts +bench +bends +bendy +bento +bents +beret +bergs +berms +berry +berth +beryl +beset +bests +betas +betel +betta +bevel +bezel +bhaji +bible +bicep +biddy +bided +bides +bidet +bight +bigot +bijou +biked +biker +bikes +biles +bilge +bills +billy +bimbo +bindi +binds +binge +bingo +biome +biota +bipod +birch +birds +birth +bison +bitch +biter +bites +bitsy +bitty +black +blade +blame +bland +blank +blare +blase +blast +blaze +bleak +bleat +blebs +bleed +bleep +blend +bless +blimp +blind +bling +blini +blink +blips +bliss +blitz +bloat +blobs +block +blocs +blogs +bloke +blond +blood +bloom +bloop +blots +blown +blows +blued +blues +bluey +bluff +blunt +blurb +blurs +blurt +blush +board +boars +boast +boats +bobby +bocce +boche +boded +bodes +boffo +bogey +boggy +bogie +bogus +boils +bolas +boles +bolls +bolts +bolus +bombe +bombs +bonds +boned +boner +bones +boney +bongo +bongs +bonks +bonny +bonus +boobs +booby +booed +books +booms +boomy +boons +boors +boost +booth +boots +booty +booze +boozy +boppy +borax +bored +borer +bores +boric +borne +boron +bosom +boson +bossy +bosun +botch +bough +boule +bound +bouts +bowed +bowel +bower +bowls +boxed +boxer +boxes +boyar +boyos +bozos +brace +bract +brads +brags +braid +brain +brake +brand +brans +brash +brass +brats +brave +bravo +brawl +brawn +brays +braze +bread +break +bream +breed +brews +briar +bribe +brick +bride +brief +brier +brigs +brims +brine +bring +brink +briny +brisk +brits +broad +broch +broil +broke +brome +bronc +brood +brook +broom +broth +brown +brows +bruin +bruit +brunt +brush +brute +bubba +bucks +buddy +budge +buffs +buggy +bugle +build +built +bulbs +bulge +bulks +bulky +bulla +bulls +bully +bumps +bumpy +bunch +bunds +bundt +bunks +bunny +bunts +buoys +burbs +burgs +burka +burly +burns +burnt +burps +burqa +burro +burrs +bursa +burst +bused +buses +bushy +busts +busty +butch +butte +butts +buxom +buyer +buzzy +bylaw +byres +bytes +byway +cabal +cabby +caber +cabin +cable +cacao +cache +cacti +caddy +cadet +cadre +cafes +caged +cages +cagey +cairn +caked +cakes +cakey +calfs +calif +calla +calls +calms +calve +calyx +camel +cameo +campo +camps +campy +canal +candy +caned +canes +canid +canna +canny +canoe +canon +canto +caped +caper +capes +capon +capos +caput +carat +carbo +carbs +cards +cared +carer +cares +cargo +carob +carol +carom +carps +carry +carte +carts +carve +cased +cases +casks +caste +casts +catch +cater +catty +caulk +cause +caved +caver +caves +cavil +cease +cecal +cecum +cedar +ceded +cedes +ceili +celeb +cello +cells +celts +cents +chads +chafe +chaff +chain +chair +chalk +champ +chana +chant +chaos +chaps +chard +charm +chars +chart +chase +chasm +chats +cheap +cheat +check +cheek +cheep +cheer +chefs +chemo +chert +chess +chest +chews +chewy +chica +chick +chico +chide +chief +child +chile +chili +chill +chime +chimp +china +chine +ching +chino +chins +chips +chirp +chits +chive +chock +choir +choke +chomp +chops +chord +chore +chose +chows +chubs +chuck +chuff +chugs +chump +chums +chunk +churn +chute +cider +cigar +cinch +circa +cisco +cited +cites +civet +civic +civil +civvy +clack +clade +claim +clamp +clams +clang +clank +clans +claps +clash +clasp +class +clave +claws +clays +clean +clear +cleat +clefs +cleft +clerk +click +cliff +climb +clime +cline +cling +clink +clips +cloak +clock +clods +clogs +clomp +clone +close +cloth +clots +cloud +clout +clove +clown +clubs +cluck +clued +clues +clump +clung +clunk +coach +coals +coast +coati +coats +cobia +cobra +cocci +cocks +cocky +cocoa +codas +codec +coded +coder +codes +codex +codon +coeds +cohos +coifs +coils +coins +cokes +colas +colds +coles +colic +colin +colon +color +colts +comas +combo +combs +comer +comes +comet +comfy +comic +comma +commo +compo +comps +comte +conch +condo +coned +cones +conga +congo +conic +conks +cooed +cooks +cools +coops +coopt +coped +copes +copra +copse +coral +cords +cored +corer +cores +corgi +corks +corky +corms +corns +cornu +corny +corps +costs +cotta +couch +cough +could +count +coupe +coups +court +coven +cover +coves +covet +covey +cowed +cower +cowls +coyly +crabs +crack +craft +crags +cramp +crams +crane +crank +crape +craps +crash +crass +crate +crave +crawl +craws +craze +crazy +creak +cream +credo +creed +creek +creel +creep +creme +crepe +crept +cress +crest +crews +cribs +crick +cried +crier +cries +crime +crimp +crisp +crits +croak +crock +crocs +croft +crone +crony +crook +croon +crops +cross +croup +crowd +crown +crows +crude +cruel +cruet +crumb +cruse +crush +crust +crypt +cubby +cubed +cubes +cubic +cubit +cuddy +cuffs +culls +culpa +cults +cumin +cupid +cuppa +curbs +curds +cured +cures +curia +curio +curls +curly +curry +curse +curve +curvy +cushy +cusps +cuter +cutie +cutis +cutup +cycad +cycle +cyclo +cynic +cysts +czars +dacha +daddy +dados +daffy +daily +dairy +daisy +dales +dames +damns +damps +dance +dandy +dared +dares +darks +darns +darts +dashi +dated +dater +dates +datum +daubs +daunt +davit +dawns +dazed +deals +dealt +deans +dears +deary +death +debit +debts +debug +debut +decaf +decal +decay +decks +decor +decoy +decry +deeds +deems +deeps +deers +defer +deify +deign +deism +deist +deity +dekes +delay +delft +delis +dells +delta +delve +demon +demos +demur +denim +dense +dents +depot +depth +derby +desks +deter +detox +deuce +devil +dewar +dhikr +dhows +dials +diary +diced +dices +dicey +dicky +dicta +diets +digit +diked +dikes +dills +dilly +dimer +dimes +dimly +dinar +dined +diner +dines +dingo +dings +dingy +dinks +dinky +dinos +diode +dippy +direr +dirge +dirty +disco +discs +dishy +disks +ditch +ditsy +ditto +ditty +ditzy +divan +divas +dived +diver +dives +divot +divvy +dizzy +docks +dodge +dodgy +dodos +doers +doffs +doges +doggy +dogma +doing +doled +doles +dolls +dolly +dolor +dolts +domed +domes +donee +dongs +donna +donor +donut +dooms +doomy +doors +doozy +doped +dopes +dopey +dorks +dorky +dorms +dosas +dosed +doses +doted +dotes +dotty +doubt +dough +doula +douse +doves +dowdy +dowel +dower +downs +downy +dowry +dowse +doyen +dozed +dozen +dozer +dozes +drabs +draft +drags +drain +drake +drama +drams +drank +drape +drawl +drawn +draws +drays +dread +dream +dreck +dregs +dress +dribs +dried +drier +dries +drift +drill +drily +drink +drips +drive +droid +droll +drone +drool +droop +drops +dross +drove +drown +drugs +druid +drums +drunk +drupe +dryad +dryer +dryly +duals +ducal +ducat +duchy +ducks +ducky +ducts +dudes +duels +duets +duffs +dukes +dulls +dully +dulse +dumbo +dummy +dumps +dumpy +dunce +dunes +dunks +duomo +duped +dupes +dural +durum +dusks +dusky +dusts +dusty +dutch +duvet +dwarf +dweeb +dwell +dwelt +dyads +dyers +dying +dykes +eager +eagle +eared +earls +early +earns +earth +eased +easel +easer +eases +eaten +eater +eaves +ebbed +ebony +ebook +echos +eclat +edema +edged +edger +edges +edict +edify +edits +eejit +eerie +egged +egret +eider +eidos +eight +eject +ejido +eland +elbow +elder +elect +elegy +elide +elite +elope +elude +elute +elven +elves +email +embed +ember +emcee +emery +emirs +emits +emote +empty +enact +ended +endow +enema +enemy +enjoy +ennui +enoki +enrol +ensue +enter +entry +envoy +eosin +epics +epoch +epoxy +equal +equip +erase +erect +ergot +erode +erred +error +erupt +essay +ether +ethic +ethos +ethyl +etude +euros +evade +evens +event +every +evict +evils +evoke +ewers +exact +exalt +exams +excel +execs +exert +exile +exist +exits +expat +expel +expos +extol +extra +exude +exult +exurb +eying +eyrie +fable +faced +facer +faces +facet +facia +facts +faded +fader +fades +faery +fails +faint +fairs +fairy +faith +faked +faker +fakes +fakie +fakir +falls +famed +fancy +fangs +fanny +farce +fared +fares +farms +farts +fasts +fatal +fated +fates +fatso +fatty +fatwa +fault +fauna +fauns +favas +faves +favor +fawns +faxed +faxes +fazed +fazes +fears +feast +feats +fecal +feces +feeds +feels +feign +feint +fella +fells +felon +felts +femme +femur +fence +fends +feral +feria +ferns +ferny +ferry +fests +fetal +fetch +feted +fetes +fetid +fetus +feuds +fever +fewer +fiats +fiber +fibre +fiche +ficus +fiefs +field +fiend +fiery +fifes +fifth +fifty +fight +filch +filed +filer +files +filet +fills +filly +films +filmy +filth +final +finca +finch +finds +fined +finer +fines +finis +finks +fiord +fired +fires +firms +first +fishy +fists +fitly +fiver +fives +fixed +fixer +fixes +fizzy +fjord +flack +flags +flail +flair +flake +flaky +flame +flank +flans +flaps +flare +flash +flask +flats +flaws +flays +fleas +fleck +flees +fleet +flesh +flick +flier +flies +fling +float +flood +floor +flour +flown +flows +fluid +flyer +focal +focus +folks +fonts +foods +force +forms +forth +forty +forum +found +frame +fraud +fresh +fried +fries +front +frost +fruit +fuels +fully +funds +funny +gains +games +gamma +gases +gates +gauge +gears +genes +genre +ghost +giant +gifts +girls +given +gives +gland +glass +globe +glory +gloss +glove +glued +goals +goats +going +goods +grace +grade +grain +grams +grand +grant +grape +graph +grasp +grass +grave +great +greek +green +greet +grief +grill +grind +grips +gross +group +grove +grown +grows +guard +guess +guest +guide +guild +guilt +habit +hairs +halls +hands +handy +hangs +happy +harsh +hated +hates +haven +hawks +heads +heard +heart +heavy +hedge +heels +hello +helps +hence +herbs +highs +hills +hints +hired +hobby +holds +holes +holly +homes +honey +honor +hooks +hoped +hopes +horns +horse +hosts +hotel +hours +house +hover +human +humor +hurts +icons +ideal +ideas +idiot +image +imply +inbox +incur +index +indie +inner +input +intro +issue +items +inert +infer +infix +infos +infra +ingan +ingle +ingot +inion +inked +inker +inkle +inlay +inlet +inned +inner +innie +innit +inorb +input +inrun +insee +inset +inspo +intel +inter +intis +intra +intro +inula +inure +inurn +invar +inver +inwit +iodic +iodin +ionic +ioras +iotas +ippon +irade +iring +irked +iroko +irons +irony +isbas +ishes +isled +isles +islet +isnae +idler +idles +idlis +idola +idols +idyll +idyls +iftar +igapo +igged +igloo +iglus +ignis +ihram +ikans +ikats +ikons +ileac +ileal +ileum +ileus +iliac +iliad +ilial +ilium +iller +illth +image +imago +imams +imari +imaum +imbar +imbos +imbue +imide +imido +imids +imine +imino +imlis +immew +immit +immix +imped +impel +impis +imply +impot +impro +imshi +imshy +inane +inapt +inarm +inbox +inbye +incas +incel +incog +incur +incus +incut +index +india +indie +indol +indri +indue +inept +issei +issue +istle +itchy +items +ivied +ivies +ivory +ixias +ixnay +ixora +ixtle +izard +izars +izzat +jeans +jelly +jewel +joins +joint +jokes +judge +juice +juicy +jumps +jabot +jacal +jacks +jacky +jaded +jades +jager +jaggy +jails +jakes +jalap +jalee +jalor +jalur +jambe +jambs +jammy +janes +janky +japan +japed +japer +japes +jarls +jasey +jaspe +jatis +jatos +jaunt +jaups +jawan +jawed +jazzy +jeans +jebel +jedis +jeers +jefes +jehad +jello +jells +jelly +jemmy +jenny +keeps +kicks +kills +kinda +kinds +kings +knees +knife +knock +knots +known +knows +keeps +kills +kench +kilos +knelt +koala +knead +kayak +kevel +knack +knoll +kooky +kicks +kaput +khaki +knees +knock +krill +kudos +kempt +kiosk +knell +knife +krait +kites +keeve +kiddy +kneel +knobs +knurl +kaama +kabab +kabar +kabob +kacha +kacks +kadai +kades +kadis +kails +kaims +kaing +kains +kajal +kakas +kakis +kalam +kalas +kales +kalif +kalis +kalpa +kalua +kanae +kanal +kanas +kanat +kandy +kaneh +kanes +karns +karoo +karos +karri +karst +karsy +karts +karzy +kasha +katal +katas +katis +katti +kerry +kesar +kests +ketas +ketch +ketol +kevil +kexes +keyed +keyer +kibbe +kibbi +kibei +kibes +kibla +kicky +kiddo +kidel +kidge +kiefs +kiers +kieve +kiley +kilig +kilps +kilts +kilty +kinda +kinds +kindy +kines +kings +kingy +label +labor +lacks +lakes +lamps +lands +lanes +large +laser +lasts +later +laugh +layer +leads +leaks +learn +lease +least +leave +legal +lemon +level +lever +light +liked +likes +limbs +limit +lined +linen +liner +lines +links +lions +lists +lived +liver +lives +loads +loans +lobby +local +locks +lodge +logic +logos +looks +loops +loose +lords +loses +loved +lover +loves +lower +loyal +lucky +lunar +lunch +lungs +lying +lacey +lacis +lacka +lacks +laddu +laddy +laded +ladee +laden +lader +ladle +ladoo +lairs +lairy +laith +laity +laked +laker +lakes +lance +lanch +lande +lands +laned +lanes +lanky +lants +lapas +lapel +lapin +lapis +lapje +lappa +lappy +lapse +larch +lards +lardy +laree +larva +lased +laser +lases +lassi +lasso +lassy +lasts +latah +latch +later +leany +leaps +leapt +learn +lears +leary +lease +leash +least +leats +leave +leavy +leaze +leben +leccy +leche +ledes +leeps +leers +leery +leese +leets +leeze +lefte +lefts +lefty +legal +leger +leges +legge +leggo +macro +magic +major +maker +makes +males +maple +march +marks +marry +masks +match +mates +maths +matte +maybe +mayor +meals +means +meant +meats +medal +media +meets +melee +menus +mercy +merge +merit +merry +messy +metal +meter +metro +micro +midst +might +miles +minds +mines +minor +minus +mixed +mixer +mixes +model +modem +modes +moist +money +month +moral +motor +mount +mouse +mouth +moved +moves +movie +music +myths +nails +naked +named +names +nasal +nasty +naval +needs +nerve +never +newer +newly +nexus +nicer +niche +night +ninja +ninth +noble +nodes +noise +noisy +norms +north +notch +noted +notes +novel +nurse +nylon +oasis +occur +ocean +offer +often +older +olive +omega +onion +onset +opens +opera +opted +optic +orbit +order +organ +other +ought +ounce +outer +owned +owner +oxide +ocker +ocote +ocrea +octad +octal +octan +octas +octet +octic +octli +octyl +oculi +odahs +odals +odder +oddly +odeon +odeum +odist +odium +odoom +odors +odour +odsos +odums +odyle +odyls +oecus +ofays +offal +offed +offer +oflag +often +ofuro +ogams +ogees +oggin +ogham +ogive +ogled +ogler +ogles +ogmic +ogres +ohelo +ohias +ohing +ohmic +oicks +oidia +oiled +oiler +oints +oiran +ojime +okapi +okays +okehs +okies +oking +packs +pages +pains +paint +pairs +panel +panic +pants +paper +parks +parts +party +pasta +paste +patch +paths +patio +pause +peace +peach +peaks +pearl +pedal +peers +penis +penny +perks +pests +petty +phase +phone +photo +piano +picks +piece +piles +pills +pilot +pinch +pipes +pitch +pixel +pizza +place +plain +plane +plans +plant +plate +plays +plaza +plots +plugs +poems +point +poker +polar +poles +polls +pools +porch +pores +ports +posed +poses +posts +pouch +pound +power +press +price +pride +prime +print +prior +prize +probe +promo +prone +proof +props +proud +prove +proxy +psalm +pulls +pulse +pumps +punch +pupil +puppy +purse +queen +query +quest +queue +quick +quiet +quilt +quite +quote +qadis +qaids +qajaq +qanat +qapik +qibla +qilas +qipao +qophs +qorma +quabs +quack +quads +quaff +quags +quail +quair +quais +quake +quaky +quale +qualm +qualy +quank +quant +quare +quark +quarl +quart +quash +queek +queem +queen +queer +quell +queme +quena +quern +query +queso +quest +quete +queue +queyn +queys +queyu +quibs +quich +races +racks +radar +radio +rails +rainy +raise +rally +ranch +range +ranks +rapid +rated +rates +ratio +razor +reach +react +reads +ready +realm +rebel +refer +reign +relax +relay +renal +renew +reply +reset +resin +retro +rider +rides +ridge +rifle +right +rigid +rings +rinse +risen +rises +risks +risky +rival +river +roads +robot +rocks +rocky +rogue +roles +rolls +roman +rooms +roots +ropes +roses +rough +round +route +royal +rugby +ruins +ruled +ruler +rules +rural +rakee +raker +rakes +rakhi +rakia +rakis +rakki +raksi +rakus +rales +ralli +rally +ralph +ramal +ramee +ramen +rames +ramet +ramie +ramin +ramis +rammy +ramon +ramps +ramus +ranas +rance +ranch +rando +rands +randy +ranee +ranes +ranga +range +rangi +rangy +ranid +ranis +ranke +ranks +sadly +safer +salad +sales +salon +sandy +satin +sauce +saved +saves +scale +scalp +scans +scare +scarf +scary +scene +scent +scoop +scope +score +scout +scrap +screw +seals +seams +seats +seeds +seeks +seems +sells +sends +sense +serum +serve +setup +seven +sewer +shade +shaft +shake +shall +shame +shape +share +shark +sharp +sheep +sheer +sheet +shelf +shell +shift +shine +shiny +ships +shirt +shock +shoes +shook +shoot +shops +shore +short +shots +shown +shows +sides +siege +sight +sigma +signs +silly +since +sites +sixth +sized +sizes +skies +skill +skins +skirt +skull +slate +slave +sleek +sleep +slept +slice +slide +slope +slots +small +smart +smell +smile +smoke +snack +snake +sneak +socks +soils +solar +solid +solve +songs +sonic +sorry +sorts +souls +sound +south +space +spare +spark +speak +specs +speed +spell +spend +spent +sperm +spice +spicy +spike +spine +spite +split +spoke +spoon +sport +spots +spray +spurs +squad +stack +staff +stage +stain +stake +stamp +stand +stark +stars +start +state +stats +stays +steak +steal +steam +steel +steep +steer +stems +steps +stick +stiff +still +stock +stole +stone +stood +stool +stops +store +storm +story +stove +strap +straw +strip +stuck +study +stuff +style +sucks +sugar +suite +suits +sunny +super +surge +sushi +swear +sweat +sweet +swept +swift +swing +swiss +sword +syrup +table +taken +takes +tales +talks +tanks +tapes +tasks +taste +tasty +taxes +teach +teams +tears +teens +teeth +tells +tempo +tends +tenth +tents +terms +tests +texts +thank +theft +their +theme +there +these +thick +thief +thigh +thing +think +third +those +three +threw +throw +thumb +tiger +tight +tiles +timer +times +tired +tires +title +toast +today +token +tones +tools +tooth +topic +torch +total +touch +tough +tours +towel +tower +towns +toxic +trace +track +tract +trade +trail +train +trait +trans +traps +trash +treat +trees +trend +trial +tribe +trick +tried +tries +trips +trout +truck +truly +trump +trunk +trust +truth +tubes +tumor +tuned +tunes +turbo +turns +tutor +tweet +twice +twins +twist +types +tyres +ultra +uncle +under +union +unite +units +unity +until +upper +upset +urban +urged +urine +usage +users +using +usual +unsaw +unsay +unsee +unset +unsew +unsub +untag +untax +untie +until +unwed +unwet +unwit +unwon +unzip +upbow +upbye +updos +updry +upend +upjet +uplay +upled +uplit +upped +upper +upran +uprun +upsee +upset +upsey +upter +uptie +uraei +urali +uraos +urare +urari +urase +urate +urban +urbex +urbia +urdee +ureal +ureas +uredo +ureic +ureid +urena +urged +urger +urges +urial +urine +vague +valid +value +valve +vapor +vault +vegan +veins +vents +venue +verse +video +views +villa +vinyl +viral +virus +visas +visit +vital +vivid +vocal +vodka +voice +volts +voted +voter +votes +verbs +verde +verge +verra +verre +verry +versa +verse +verso +verst +verte +verts +vertu +verve +vespa +vesta +vests +vetch +veuve +veves +vexed +vexer +vexes +vexil +vezir +vials +viand +vibed +vibes +vibex +vibey +vicar +vices +vichy +vicus +wages +wagon +waist +walks +walls +wants +warns +waste +watch +water +watts +waves +wears +weeds +weeks +weigh +weird +wells +welsh +whale +wheat +wheel +where +which +while +white +whole +whose +wider +widow +width +winds +wines +wings +wiped +wired +wires +witch +wives +woman +women +woods +words +works +world +worms +worry +worse +worst +worth +would +wound +wrath +wrist +write +wrong +wrote +waacs +wacke +wacko +wacks +wacky +wadds +waddy +waded +wader +wades +wadis +wafer +waffs +wafts +waged +wager +wages +wagga +wagon +wahoo +waide +waifs +wails +wains +wairs +waist +waits +waive +wakas +waked +waken +waker +wakes +wakfs +waldo +walds +waled +waler +wales +walis +walks +walla +walls +wally +walty +waltz +wamed +wames +wamus +wands +wanes +waney +wangs +wanks +wanky +wanle +wanly +wanna +wants +wanty +wanze +waqfs +warbs +xebec +xenia +xenic +xenon +xeric +xerox +xerus +xoana +xrays +xylan +xylem +xylic +xylol +xylyl +xysti +xysts +yacht +yards +years +yeast +yield +young +yours +youth +yummy +yacca +yacht +yacka +yacks +yadda +yadim +yaffs +yager +yagis +yagna +yahoo +yajes +yajna +yakka +yakow +yales +yamen +yampa +yampy +yamun +yandy +yangs +yanks +yapok +yapon +yapps +yappy +yarak +yarco +yards +yarer +yarfa +yarks +yarns +yarra +yarrs +yarta +yarto +yasss +yates +yatra +yauds +yauld +yaups +yawed +yawey +yawls +yawns +zones +zebra +zests +zesty +zetas +zorse +zouks +zowee +zowie +zacks +zaddy +zafus +zaida +zaide +zaidy +zaire +zakah +zakat +zamac +zamak +zaman +zambo +zamia +zamis +zanja +zante +zanza +zanze +zappy +zarda +zarfs +zaris +zatar +zatis +zawns +zaxes +zayde +zerks +zeros +zests +zesty +zetas +zexes +zezes +zhlob +zhlub +zhomo +zhush +zhuzh +zibet +ziffs +zigan +zikrs +zilas +zilch +zilla +zills +zimbi +zimbs +zinco +zincs +zincy +zineb +zines +zings +zingy +zinke +zinky +zinos +zippo +zippy +ziram +zitis +zitti +zitty +zizel +zizit +zlote +zloty +zoaea +zobos +zobus +zocco +zoeae +zoeal diff --git a/automation_tools/cooker_flatpak_portal_add.sh b/automation_tools/cooker_flatpak_portal_add.sh new file mode 100755 index 00000000..f139c1d1 --- /dev/null +++ b/automation_tools/cooker_flatpak_portal_add.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# COOKER ONLY +# This script is adding the update portal (permission) to the cooker flatpak. +# This is ran by the cooker pipeline. + +sed -i '/finish-args:/a \ \ - --talk-name=org.freedesktop.Flatpak' net.retrodeck.retrodeck.yml \ No newline at end of file diff --git a/automation_tools/flatpak_build_bundle.sh b/automation_tools/flatpak_build_bundle.sh new file mode 100755 index 00000000..8c155810 --- /dev/null +++ b/automation_tools/flatpak_build_bundle.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# This is building the bundle RetroDECK.flatpak after the download and build steps are done + +flatpak build-bundle ${GITHUB_WORKSPACE}/local RetroDECK-cooker.flatpak net.retrodeck.retrodeck \ No newline at end of file diff --git a/automation_tools/flatpak_build_download_only.sh b/automation_tools/flatpak_build_download_only.sh new file mode 100755 index 00000000..55352780 --- /dev/null +++ b/automation_tools/flatpak_build_download_only.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# This script is downloading the needed files to prepare the manifest build + +git config --global protocol.file.allow always +mkdir -vp ${GITHUB_WORKSPACE}/local +mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker +flatpak-builder --user --force-clean \ + --install-deps-from=flathub \ + --install-deps-from=flathub-beta \ + --repo=${GITHUB_WORKSPACE}/local \ + --download-only \ + ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker \ + net.retrodeck.retrodeck.yml \ No newline at end of file diff --git a/automation_tools/flatpak_build_only.sh b/automation_tools/flatpak_build_only.sh new file mode 100755 index 00000000..d2ed3fe5 --- /dev/null +++ b/automation_tools/flatpak_build_only.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# This script is building the flatpak is the needed files are already downloaded + +git config --global protocol.file.allow always +mkdir -vp ${GITHUB_WORKSPACE}/local +mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker +flatpak-builder --user --force-clean \ + --install-deps-from=flathub \ + --install-deps-from=flathub-beta \ + --repo=${GITHUB_WORKSPACE}/local \ + --disable-download \ + ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker \ + net.retrodeck.retrodeck.yml \ No newline at end of file diff --git a/force-update-submodules.sh b/automation_tools/force_update_submodules.sh old mode 100644 new mode 100755 similarity index 89% rename from force-update-submodules.sh rename to automation_tools/force_update_submodules.sh index 57d3df5f..50c249c7 --- a/force-update-submodules.sh +++ b/automation_tools/force_update_submodules.sh @@ -1,5 +1,7 @@ #!/bin/bash +# WARNING: DANGEROUS! Don't use this script lightly + git submodule deinit --all rm rd-submodules/retroarch git rm -rf --cached rd-submodules/retroarch diff --git a/automation_tools/install_dependencies.sh b/automation_tools/install_dependencies.sh new file mode 100755 index 00000000..e4cc6261 --- /dev/null +++ b/automation_tools/install_dependencies.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# This scritp is installing the required dependencies to correctly run the pipeline and buold the flatpak + +sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 curl +flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo \ No newline at end of file diff --git a/automation_tools/main_version_checker.sh b/automation_tools/main_version_checker.sh new file mode 100755 index 00000000..87011bfd --- /dev/null +++ b/automation_tools/main_version_checker.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# This script is used to check that the versions are correct and stopping the pipeline if something is wrong. +# This is designed to be run on the main pipeline to check that everything is in order before building RetroDECK. + +source automation_tools/version_extractor.sh + +# Set the file paths +appdata="net.retrodeck.retrodeck.appdata.xml" +manifest="net.retrodeck.retrodeck.yml" +manifest_content=$(cat "$manifest") + +compare_versions() { + local manifest_version_cleaned=$(echo "$1" | sed 's/[a-zA-Z]//g') + local appdata_version_cleaned=$(echo "$2" | sed 's/[a-zA-Z]//g') + + if [[ "$manifest_version_cleaned" == "$appdata_version_cleaned" ]]; then + return 0 # Versions are equal + fi + + local IFS=. + local manifest_parts=($manifest_version_cleaned) + local appdata_parts=($appdata_version_cleaned) + + for ((i=0; i<${#manifest_parts[@]}; i++)); do + if ((manifest_parts[i] > appdata_parts[i])); then + return 1 # Manifest version is greater + elif ((manifest_parts[i] < appdata_parts[i])); then + return 2 # Appdata version is greater + fi + done + + return 0 # Versions are equal +} + +repo_version=$(fetch_repo_version) +echo -e "Online repository:\t$repo_version" + +manifest_version=$(fetch_manifest_version) +echo -e "Manifest:\t\t$manifest_version" + +appdata_version=$(fetch_appdata_version) +echo -e "Appdata:\t\t$appdata_version" + +# Additional checks +if [[ "$manifest_version" == "main" || "$manifest_version" == "THISBRANCH" ]]; then + echo "Manifest version cannot be 'main' or 'THISBRANCH'. Please fix it." + exit 1 +fi + +if [[ "$appdata_version" != "$manifest_version" ]]; then + echo "Appdata version is not equal to manifest version. Please fix it." + exit 1 +fi + +compare_versions "$repo_version" "$manifest_version" +result=$? + +if [ "$result" -eq 1 ]; then + echo "Repository version is less than manifest version. Please fix it." + exit 1 +fi + +echo "All checks passed. Well done!" \ No newline at end of file diff --git a/automation_tools/pre_build_automation.sh b/automation_tools/pre_build_automation.sh old mode 100644 new mode 100755 index b02225c4..f4d56c62 --- a/automation_tools/pre_build_automation.sh +++ b/automation_tools/pre_build_automation.sh @@ -15,6 +15,7 @@ rd_manifest=${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml automation_task_list=${GITHUB_WORKSPACE}/automation_tools/automation_task_list.cfg +current_branch=$(git rev-parse --abbrev-ref HEAD) echo "Manifest location: $rd_manifest" echo "Automation task list location: $automation_task_list" @@ -23,10 +24,17 @@ echo "Task list contents:" cat "$automation_task_list" echo +# Update all collected information while IFS="^" read -r action placeholder url branch do if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then - if [[ "$action" == "hash" ]]; then + if [[ "$action" == "branch" ]]; then + echo + echo "Placeholder text: $placeholder" + echo "Current branch:" "$current_branch" + echo + /bin/sed -i 's^'"$placeholder"'^'"$current_branch"'^g' $rd_manifest + elif [[ "$action" == "hash" ]]; then echo echo "Placeholder text: $placeholder" echo "URL to hash: $url" @@ -53,6 +61,15 @@ do appimagehash=$(curl -sL "$appimageurl" | sha256sum | cut -d ' ' -f1) echo "AppImage hash found: $appimagehash" /bin/sed -i 's^'"HASHFOR$placeholder"'^'"$appimagehash"'^' $rd_manifest + elif [[ "$action" == "outside_info" ]]; then + if [[ "$url" = \$* ]]; then # If value is a reference to a variable name + eval url="$url" + fi + echo + echo "Placeholder text: $placeholder" + echo "Information being injected: $(cat $url)" + echo + /bin/sed -i 's^'"$placeholder"'^'"$(cat $url)"'^' $rd_manifest fi fi done < "$automation_task_list" diff --git a/automation_tools/version_extractor.sh b/automation_tools/version_extractor.sh new file mode 100755 index 00000000..b9f679ff --- /dev/null +++ b/automation_tools/version_extractor.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# This script is intended to gather version information from various sources: +# RetroDECK repository +# Appdata.xml file +# Manifest YAML file +# It consists of three functions, each responsible for retrieving a specific version-related data. + +appdata="net.retrodeck.retrodeck.appdata.xml" +manifest="net.retrodeck.retrodeck.yml" +manifest_content=$(cat "$manifest") + +fetch_repo_version(){ + # Getting latest RetroDECK release info + LATEST_RELEASE=$(curl -s "https://api.github.com/repos/XargonWan/RetroDECK/releases/latest") + # Extracting tag name from the latest release + repo_version=$(echo "$LATEST_RELEASE" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + # Printing results + echo "$repo_version" +} + +fetch_appdata_version(){ + # Extract the version from the net.retrodeck.retrodeck.appdata.xml file + appdata_version=$(grep -oPm1 "(?<= Advanced -> Tweaks/Hacks +- Enable VRAM Write Texture Replacement and set it to On. +- Preload Texture Replacements and set it to On. + +How do I add texture packs? +Requirements: Texture pack files + +NOTE: On the Steam Deck this could be easier to do in Desktop Mode. + +Texture folder directly +- Extract any texture pack files from compressed .zip or any other format into folders. +- Go into ~/retrodeck/texture_packs/duckstation/. The folders are all named by TITLEID. +- Move textures into the right ~/retrodeck/texture_packs/duckstation/ folder. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/Duckstation%3A-Texture-Packs + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mesen-textures.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mesen-textures.txt new file mode 100644 index 00000000..33e9d9c8 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mesen-textures.txt @@ -0,0 +1,32 @@ +RetroArch - NES - Mesen +The texture_packs/RetroArch-Mesen/ represents /retroarch/system/HdPacks/ folder. + +Note: +Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +Enable Texture Packs in the Mesen core for certain games +From the RetroArch Quick Menu + +- Go to Core Options -> Enable HD Packs set to On +- Then save the current configuration for that game under Core Options -> Manage Core Options -> Save Game Options + +How do I add texture packs that can be used by the Mesen Core? +NOTE: On the Steam Deck this could be easier to do in Desktop Mode. + +- All texture packs go into the texture_packs/RetroArch-Mesen/ folder. +- The texture pack have to be extracted from .zip or other compressed format into a folder. +- The name of the folder must be the same name as that of the rom file the texture pack is for. +Example: + +You want apply a texture pack to a game called ScaryCastle USA.nes and you have downloaded the ScaryCastle TexturePACK HD.zip. + +- Extract the ScaryCastle TexturePACK HD.zip +- Move the extracted ScaryCastle TexturePACK HD folder into texture_packs/RetroArch-Mesen/ +- Rename the ScaryCastle TexturePACK HD folder so it has the same name as the rom ScaryCastle USA without the .nes file extension. +- Start up RetroDECK and select the ScaryCastle nes games. +NOTE: On the Steam Deck go into GameMode first, then launch RetroDECK. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/RetroArch-Mesen%3A-Texture-Packs + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mupen64Plus-textures.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mupen64Plus-textures.txt new file mode 100644 index 00000000..6cfe0670 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-Mupen64Plus-textures.txt @@ -0,0 +1,30 @@ +RetroArch - N64 - Mupen64Plus-Next + +The directory 'texture_packs/RetroArch-Mupen64Plus/' corresponds to the '/retroarch/system/Mupen64plus/' folder. + +Please note that some texture packs may be designed for a specific version or region of the game. Ensure you have the correct ROM and textures for it. + +To enable Texture Packs in the Mupen64Plus-Next core for certain games, follow these steps: + +1. Open the RetroArch Quick Menu. +2. Navigate to Core Options -> GLideN64. +3. Set 'Use High-Res Textures', 'Cache Textures', 'Use High-Res Full Alpha Channel', and 'Use Hi-Res Storage' to On. +4. Save the current configuration for that game under Core Options -> Manage Core Options -> Save Game Options. + +Optionally, you can set 'Use High-Res Texture Cache Compression' to On to compress uncompressed HD Textures into .hts files. + +To add texture packs that can be used by the Mupen64Plus-Next Core: + +Note: On the Steam Deck, this could be easier to do in Desktop Mode. + +1. All texture packs go into the 'texture_packs//RetroArch-Mupen64Plus/hires_texture/' or 'texture_packs/RetroArch-Mupen64Plus/cache/' folder. +2. The texture pack must be extracted from .zip or other compressed format into a folder. + +For compressed textures stored in .hts files, place them in the 'texture_packs/RetroArch-Mupen64Plus/cache/' folder. + +For uncompressed textures stored in loose folders or files, place them in the 'texture_packs/RetroArch-Mupen64Plus/hires_texture/' folder. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/RetroArch-Mupen64Plus-Next%3A-Texture-Packs + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-PCSX2-textures.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-PCSX2-textures.txt new file mode 100644 index 00000000..807513b7 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-PCSX2-textures.txt @@ -0,0 +1,26 @@ +PCSX2 - Playstation 2 + +The directory '~/retrodeck/texture_packs/PCSX2/' corresponds to the '/PCSX2/textures/' folder in PCSX2. + +Please note that some texture packs may be designed for a specific version or region of a game. Ensure you have the correct game and textures for it. + +Also, keep in mind that 'TITLEID' is different for every game. + +To enable Custom Textures, follow these steps: + +1. Open up PCSX2 inside RetroDECK Configurator by pressing 'Open Emulator' - 'PCSX2'. +2. Press 'Settings' -> 'Graphics'. +3. Set 'Load Textures' and 'Async Texture Loading' to On. + +To add texture packs, you'll need the texture pack files. On the Steam Deck, this could be easier to do in Desktop Mode. + +For direct texture folder: + +1. Extract any texture pack files from compressed .zip or any other format into folders. +2. Go into '~/retrodeck/texture_packs/PCSX2/'. The folders are all named by 'TITLEID'. +3. Move textures into the correct '~/retrodeck/texture_packs/PCSX2/' folder. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/PCSX2%3A-Texture-Packs + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-PPSSPP-textures.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-PPSSPP-textures.txt new file mode 100644 index 00000000..6fabb0e4 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-PPSSPP-textures.txt @@ -0,0 +1,26 @@ +PPSSPP - PSP + +The directory '~/retrodeck/texture_packs/ppsspp/' corresponds to the '/PSP/TEXTURES/' folder in PPSSPP. + +Please note that some texture packs may be designed for a specific version or region of the game. Ensure you have the correct ROM and textures for it. + +Also, keep in mind that 'TITLEID' is different for every game. + +To enable Custom Textures, follow these steps: + +1. Open up PPSSPP inside RetroDECK Configurator by pressing 'Open Emulator' - 'PPSSPP'. +2. Press 'Settings' -> 'Tools' -> 'Developer Tools'. +3. Set 'Replace Textures' to On. + +To add texture packs, you'll need the texture pack files. On the Steam Deck, this could be easier to do in Desktop Mode. + +For adding textures: + +1. Extract any texture pack files from compressed .zip or any other format into folders. +2. Go into '~/retrodeck/texture_packs/ppsspp/'. The folders are all named by 'TITLEID'. +3. Paste the textures into the correct '~/retrodeck/texture_packs/ppsspp/' folder. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/PPSSPP%3A-Texture-Packs + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-citra-mods.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-citra-mods.txt new file mode 100644 index 00000000..8918ba2d --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-citra-mods.txt @@ -0,0 +1,19 @@ +There are two ways of adding mods into Citra + +From Citra +- Extract any mod from compressed .zip or any other format to folders. +- Open up Citra inside RetroDECK Configurator by pressing Open Emulator - Citra. +- Right click on the game you want to add mods into. +- Click on Open Mods Location. +- Paste the mod files inside that directory, each folder is stored by the TITLLEID of the game. +- Quit Citra + +From the mod folder directly +- Extract any mod files from compressed .zip or any other format into folders. +- Go into ~/retrodeck/mods/citra/. The folders are all named by TITLEID. +- Past the mods into the right ~/retrodeck/mods/yuzu/ folder. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/Citra%3A-Mods#citra---3ds + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-custom-emulators.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-custom-emulators.txt new file mode 100644 index 00000000..2c35cf4a --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-custom-emulators.txt @@ -0,0 +1,16 @@ +There is the possibility to provide custom emutlators provided by the user. + +At the moment the only one available is Yuzu. +Place your custom Yuzu files (AppImage and such) in the custom/yuzu folder without any other subfolders, like in the example: +retrodeck/customs/yuzu/yuzu*.AppImage + +WARNINGS on custom emulators: +- Custom emulators are self managed: means that RetroDECK Team is not supporting nor troubleshooting them. +- Custom emulators could potentially break other included emulators configs: use them at your own risk. +- Remember to make the binary executable, otherwise they won't be launched. +- Hotkeys might not be working if not configured by the users. + +Related wiki article can be found here: +--- + +The RetroDECK Team diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-dolphin-mods.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-dolphin-mods.txt new file mode 100644 index 00000000..33a50c8c --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-dolphin-mods.txt @@ -0,0 +1,19 @@ +Prerequisites +- Open up Dolphin inside RetroDECK Configurator by pressing Open Emulator - Dolphin. +- Press Options -> Graphic Settings +- Enable Graphics Mods and set it to On. + +Installation +- Extract any mod files from compressed .zip or any other format into folders. +- Go into mods folders, they contain folders that are all named by GAME_ID. ~/retrodeck/mods/dolphin/. +- Move the mods into the right folder: ~/retrodeck/mods/dolphin/ + +Notes: +- The ~/retrodeck/mods/dolphin/ that represents the /load/GraphicMods folder. +- Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. +- GAME_ID is different for every game. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/Dolphin-and-Primehack%3A-Mods + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-primehack-mods.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-primehack-mods.txt new file mode 100644 index 00000000..1bcbbc05 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-primehack-mods.txt @@ -0,0 +1,19 @@ +Prerequisites +- Open up Primehack inside RetroDECK Configurator by pressing Open Emulator - Primehack. +- Press Options -> Graphic Settings +- Enable Graphics Mods and set it to On. + +Installation +- Extract any mod files from compressed .zip or any other format into folders. +- Go into mods folders, they contain folders that are all named by GAME_ID. ~/retrodeck/mods/primehack/. +- Move the mods into the right folder: ~/retrodeck/mods/primehack/ + +Notes: +- The ~/retrodeck/mods/primehack/ that represents the /load/GraphicMods folder. +- Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. +- GAME_ID is different for every game. + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/Dolphin-and-Primehack%3A-Mods + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/helper_files/how-to-install-yuzu-mods.txt b/emu-configs/defaults/retrodeck/helper_files/how-to-install-yuzu-mods.txt new file mode 100644 index 00000000..1f41c698 --- /dev/null +++ b/emu-configs/defaults/retrodeck/helper_files/how-to-install-yuzu-mods.txt @@ -0,0 +1,25 @@ +There are two ways of adding mods into Yuzu + +From Yuzu directly +- Extract any mod files from compressed .zip or any other format to folders. +- Open up Yuzu inside RetroDECK Configurator by pressing Open Emulator - Yuzu. +- Right click on the game you want to add mods into. +- Click on Open Mod Data Destination. +- Paste the mod folders inside that directory. +- Right clicking on the game and selecting Properties. +- Enable the mods you want to enable by pressing the checkboxes in the Add-Ons tab and press OK. +- Quit Yuzu + +From the mods/yuzu folder +- Extract any mod files from compressed .zip or any other format into folders. +- Go into ~/retrodeck/mods/yuzu/ and file the right folder for the game you want to add mods to. The folders are all named by TITLEID. +- Move those folders into ~/retrodeck/mods/yuzu/ +- Open up Yuzu inside RetroDECK Configurator by pressing Open Emulator - Yuzu. +- Right clicking on the game and selecting Properties. +- Enable the mods you want to enable by pressing the checkboxes in the Add-Ons tab and press OK. +- Quit Yuzu + +Related wiki article can be found here: +https://github.com/XargonWan/RetroDECK/wiki/Yuzu%3A-Mods + +The RetroDECK Team \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/presets/citra_presets.cfg b/emu-configs/defaults/retrodeck/presets/citra_presets.cfg new file mode 100644 index 00000000..9211d5c0 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/citra_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^citra +target_file^$citraconf +defaults_file^$emuconfigs/citra/qt-config.ini +change^ask_to_exit^confirmClose^true^UI +change^ask_to_exit^confirmClose\default^true^UI +change^nintendo_button_layout^profiles\1\button_a^button:1,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_b^button:0,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_x^button:3,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_y^button:2,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls diff --git a/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg b/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg new file mode 100644 index 00000000..234012e9 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^dolphin +target_file^$dolphinconf +defaults_file^$emuconfigs/dolphin/Dolphin.ini +change^ask_to_exit^ConfirmStop^True^Interface diff --git a/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg b/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg new file mode 100644 index 00000000..76c9f926 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg @@ -0,0 +1,10 @@ +config_file_format^duckstation +target_file^$duckstationconf +defaults_file^$emuconfigs/duckstation/settings.ini +change^cheevos^Enabled^true^Cheevos +change^cheevos^Username^$cheevos_username^Cheevos +change^cheevos^Token^$cheevos_token^Cheevos +change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Cheevos +change^cheevos_hardcore^ChallengeMode^true^Cheevos +change^savestate_auto_save^SaveStateOnExit^true^Main +change^ask_to_exit^ConfirmPowerOff^true^Main diff --git a/emu-configs/defaults/retrodeck/presets/example.txt b/emu-configs/defaults/retrodeck/presets/example.txt new file mode 100644 index 00000000..53d031a4 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/example.txt @@ -0,0 +1,11 @@ +config_file_format^retroarch # This is the config file format, used in functions like get_setting_value and set_setting_value +target_file^$examplefile # This is the target file that should be updated. This will be the actively-used config file by whatever emulator is being set up. This can be a variable name as well! +defaults_file^$emuconfigs/retroarch/retroarch.cfg # This is the file that is referenced when presets are disabled. This should be the "shipped" config file for this emulator +change^cheevos^Enabled^true^Cheevos # This is a preset configuration line. The syntax is ^^^^ +change^borders^overlay_file^/var/config/retroarch/overlays/borders/snes.cfg # This is another preset configuration line, for the preset section called "borders" in retrodeck.cfg. Also, there is no defined "setting section" on this line + + +OTHER NOTES: +- The name of the presets configuration file for any given system MUST be _presets.cfg +- The is whatever name is given to this system in retrodeck.cfg, it is not tied to the actual emulator name. +- The name given to the system in retrodeck.cfg will be translated to a "nice looking" format for user dialogs through the file at emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg but will be used internally as-is diff --git a/emu-configs/defaults/retrodeck/presets/gb_presets.cfg b/emu-configs/defaults/retrodeck/presets/gb_presets.cfg new file mode 100644 index 00000000..cc48e4c0 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gb_presets.cfg @@ -0,0 +1,14 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Gambatte/gb.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^576 +change^borders^custom_viewport_width^640 +change^borders^custom_viewport_x^320 +change^borders^custom_viewport_y^20 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gb.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.205000 +change^borders^input_overlay_y_offset_landscape^0.005000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gb.rmp diff --git a/emu-configs/defaults/retrodeck/presets/gba_presets.cfg b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg new file mode 100644 index 00000000..21787a86 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg @@ -0,0 +1,14 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/mGBA/gba.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^640 +change^borders^custom_viewport_width^960 +change^borders^custom_viewport_x^160 +change^borders^custom_viewport_y^0 +change^borders^input_overlay_enable^true +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gba.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_scale_landscape^1.2150000 +change^borders^input_overlay_y_offset_landscape^0.020000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp diff --git a/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg b/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg new file mode 100644 index 00000000..cd24b9e7 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg @@ -0,0 +1,14 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Gambatte/gbc.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^576 +change^borders^custom_viewport_width^640 +change^borders^custom_viewport_x^320 +change^borders^custom_viewport_y^20 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gbc.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.205000 +change^borders^input_overlay_y_offset_landscape^-0.040000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp diff --git a/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg b/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg new file mode 100644 index 00000000..ef0fbc5b --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/genesis.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.100000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.040000 +change^widescreen^aspect_ratio_index^24 diff --git a/emu-configs/defaults/retrodeck/presets/gg_presets.cfg b/emu-configs/defaults/retrodeck/presets/gg_presets.cfg new file mode 100644 index 00000000..f6b8529a --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gg_presets.cfg @@ -0,0 +1,13 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Genesis Plus GX/gg.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_width^960 +change^borders^custom_viewport_height^720 +change^borders^custom_viewport_x^160 +change^borders^custom_viewport_y^24 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gg.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.350000 +change^borders^input_overlay_y_offset_landscape^0.020000 diff --git a/emu-configs/defaults/retrodeck/presets/n64_presets.cfg b/emu-configs/defaults/retrodeck/presets/n64_presets.cfg new file mode 100644 index 00000000..542aa841 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/n64_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/N64.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.145000 +change^borders^input_overlay_enable^true +change^widescreen^aspect_ratio_index^24 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp diff --git a/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg b/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg new file mode 100644 index 00000000..ba01d17c --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg @@ -0,0 +1,10 @@ +config_file_format^pcsx2 +target_file^$pcsx2conf +defaults_file^$emuconfigs/PCSX2/PCSX2.ini +change^cheevos^Enabled^true^Achievements +change^cheevos^Username^$cheevos_username^Achievements +change^cheevos^Token^$cheevos_token^Achievements +change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Achievements +change^cheevos_hardcore^ChallengeMode^true^Achievements +change^savestate_auto_save^SaveStateOnShutdown^true^EmuCore +change^ask_to_exit^ConfirmShutdown^true^UI diff --git a/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg b/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg new file mode 100644 index 00000000..90094d5e --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^ppsspp +target_file^$ppssppconf +defaults_file^$emuconfigs/PCSX2/PCSX2.ini +change^savestate_auto_load^AutoLoadSaveState^2^General diff --git a/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg b/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg new file mode 100644 index 00000000..3abf4ba5 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^primehack +target_file^$primehackconf +defaults_file^$emuconfigs/primehack/Dolphin.ini +change^ask_to_exit^ConfirmStop^True^Interface diff --git a/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg b/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg new file mode 100644 index 00000000..f3aaa96d --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/SwanStation/psx.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retrodeck/overlays/borders/pegasus/psx.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.120000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.040000 +change^widescreen^aspect_ratio_index^24 diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg b/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg new file mode 100644 index 00000000..7a65546a --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^retroarch-all +target_file^$raconf +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^cheevos^cheevos_enable^true +change^cheevos^cheevos_token^$cheevos_token +change^cheevos^cheevos_username^$cheevos_username +change^cheevos_hardcore^cheevos_hardcore_mode_enable^true +change^savestate_auto_load^savestate_auto_load^true +change^savestate_auto_save^savestate_auto_save^true diff --git a/emu-configs/defaults/retrodeck/presets/snes_presets.cfg b/emu-configs/defaults/retrodeck/presets/snes_presets.cfg new file mode 100644 index 00000000..2d71ed98 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/snes_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Snes9x/snes.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/snes87.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.305000 +change^borders^input_overlay_scale_landscape^1.050000 +change^borders^input_overlay_enable^true +change^widescreen^aspect_ratio_index^24 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp diff --git a/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg b/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg new file mode 100644 index 00000000..bfb46f5e --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^yuzu +target_file^$yuzuconf +defaults_file^$emuconfigs/yuzu/qt-config.ini +change^ask_to_exit^confirmClose^true^UI +change^ask_to_exit^confirmClose\default^true^UI +change^nintendo_button_layout^player_0_button_a^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:0,pad:0"^Controls +change^nintendo_button_layout^player_0_button_b^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:1,pad:0"^Controls +change^nintendo_button_layout^player_0_button_x^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:2,pad:0"^Controls +change^nintendo_button_layout^player_0_button_y^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:3,pad:0"^Controls diff --git a/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg b/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg new file mode 100644 index 00000000..0c1eb4f1 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg @@ -0,0 +1,2 @@ +false^RPCS3 Firmware Install^Install firmware needed for PS3 emulation^rpcs3_firmware +false^RetroDECK Controller Profile^Install custom RetroDECK controller profile^rd_controller_profile diff --git a/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg b/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg index d5a1be95..6700e277 100644 --- a/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg +++ b/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg @@ -2,4 +2,20 @@ # FILE NAME^DESTINATION # The destination can be an internal variable name like $roms_folder if needed # The FILE name can have spaces in it, but the DESTINATION cannot, even in variable form -RetroDECK Example Readme.txt^$rdhome + +# mods +how-to-install-citra-mods.txt^$mods_folder/Citra +how-to-install-dolphin-mods.txt^$mods_folder/Dolphin +how-to-install-primehack-mods.txt^$mods_folder/Primehack +how-to-install-yuzu-mods.txt^$mods_folder/Yuzu + +# textures +how-to-install-Mesen-textures.txt^$texture_packs_folder/RetroArch-Mesen +how-to-install-PPSSPP-textures.txt^$texture_packs_folder/PPSSPP +how-to-install-PCSX2-textures.txt^$texture_packs_folder/PCSX2 +how-to-install-Mupen64Plus-textures.txt^$texture_packs_folder/RetroArch-Mupen64Plus/cache +how-to-install-Mupen64Plus-textures.txt^$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture +how-to-install-Duckstation-textures.txt^$texture_packs_folder/Duckstation + +# customs +how-to-install-custom-emulators.txt^$rdhome/customs diff --git a/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg b/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg new file mode 100644 index 00000000..417ab816 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg @@ -0,0 +1,2 @@ +borders:widescreen +widescreen:borders diff --git a/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg b/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg new file mode 100644 index 00000000..f324a56d --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg @@ -0,0 +1,17 @@ +citra^Citra (Nintendo 3DS Standalone Emulator) +dolphin^Dolphin (GameCube / Wii Standalone Emulator) +duckstation^Duckstation (Sony Playstation Standalone Emulator) +gb^Nintendo GameBoy +gba^Nintendo GameBoy Advance +gbc^Nintendo GameBoy Color +genesis^Sega Genesis/Master System +gg^Sega GameGear +n64^Nintendo 64 +pcsx2^PCSX2 (Sony Playstation 2 Standalone Emulator) +ppsspp^PPSSPP (Sony PSP Standalone Emulator) +primehack^Primehack (Metroid Prime Standalone Emulator) +psx_ra^Sony Playstation (RetroArch Core) +retroarch^RetroArch (Multi-emulator Frontend) +ryujinx^Ryujinx (Nintendo Switch Standalone Emulator) +snes^Nintendo Super Nintendo +yuzu^Yuzu (Nintendo Switch Standalone Emulator) diff --git a/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt b/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt new file mode 100644 index 00000000..eb6c994b --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt @@ -0,0 +1,71 @@ +Credits & The Team + +This is the page where we try to introduce the team and thank everyone who have contributed to the project so far. +If you feel you have contributed to the project but lacks mention, please contact us on discord! + +The Team +XargonWan +RetroDECK project founder and also one of the founding members of AmberELEC + +IceNine451 +Creator of the RetroDECK configurator and various awesome features. + +Lazorne +Community management/outreach, testing, documentation, feature suggestions and some design. + +dottormac +Beta Tester + +LX32 +Junior code contributor, Beta Tester + + +Collaborators +Leon Styhre +Maker of EmulationStation Desktop Edition + +anthonycaccese +Theme creator for ES-DE and AmberELEC + + +Additional credits +RavenKilit +Former Beta Tester and AmberELEC contributor + +MorGuux +Made the RetroDECK steamdb graphics for the old logo + +Pixelguin +Made the new logo and steamdb graphics + +teotwaki +Generous cloud hosting sponsor + +Niroku / Atari +Helps with community management, is also part of Batocera + +Gabeboii +Webmaster + +Draco +Former server admiistrator and code consultant + +ItzSelenux +Maker of pixelitos + +Kenny.nl +The Kenny.nl project provides several free game assets under open licenses. + + +Special Thanks + +We want give special thanks to: + + Our Patreons that keeps the build servers running and provide feedback. + All related emulation projects, such as Batocera and AmberELEC where we are taking our inspiration. + All people that have put both time and money into emulation projects. + All the users who help others with support, guidance and good spirit. + All the users who help with testing and reporting issues. + All the community creators who creates various art and assets for the community. + +You are the ones that makes this project possible. diff --git a/emu-configs/defaults/retrodeck/retrodeck.cfg b/emu-configs/defaults/retrodeck/retrodeck.cfg index 52553139..b821b596 100644 --- a/emu-configs/defaults/retrodeck/retrodeck.cfg +++ b/emu-configs/defaults/retrodeck/retrodeck.cfg @@ -18,6 +18,7 @@ sdcard=/run/media/mmcblk0p1 [options] power_user_warning=true desktop_mode_warning=true +low_space_warning=true update_check=false update_repo=RetroDECK update_ignore= @@ -27,14 +28,54 @@ ask_default_user=true default_user= developer_options=false +[cheevos] +duckstation=false +pcsx2=false +retroarch=false + +[cheevos_hardcore] +duckstation=false +pcsx2=false +retroarch=false + [borders] -snes=false -genesis=false -gb=false -gba=false +gb=true +gba=true +gbc=true +genesis=true +gg=true +n64=true +psx_ra=true +snes=true [widescreen] -snes=false genesis=false +n64=false +psx_ra=false +snes=false + +[nintendo_button_layout] +citra=false gb=false gba=false +gbc=false +n64=false +snes=false +yuzu=false + +[savestate_auto_load] +ppsspp=true +retroarch=true + +[savestate_auto_save] +duckstation=true +pcsx2=true +retroarch=true + +[ask_to_exit] +citra=false +dolphin=false +duckstation=false +pcsx2=false +primehack=false +yuzu=false diff --git a/emu-configs/defaults/yuzu/qt-config.ini b/emu-configs/defaults/yuzu/qt-config.ini index 0c378fa1..5a18ed8a 100644 --- a/emu-configs/defaults/yuzu/qt-config.ini +++ b/emu-configs/defaults/yuzu/qt-config.ini @@ -63,6 +63,10 @@ enable_accurate_vibrations=false enable_accurate_vibrations\default=true enable_ir_sensor=false enable_ir_sensor\default=true +enable_joycon_driver=true +enable_joycon_driver\default=true +enable_procon_driver=false +enable_procon_driver\default=true enable_raw_input=false enable_raw_input\default=true enable_ring_controller=true @@ -721,6 +725,8 @@ player_9_vibration_enabled=true player_9_vibration_enabled\default=true player_9_vibration_strength=100 player_9_vibration_strength\default=true +random_amiibo_id=false +random_amiibo_id\default=true ring_controller="modifier_scale:0.050000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$00$1engine$0keyboard,up:toggle$00$1code$00$1engine$0keyboard,engine:analog_from_button" ring_controller\default=true tas_enable=false @@ -755,6 +761,8 @@ use_extended_memory_layout=false use_extended_memory_layout\default=true use_multi_core=true use_multi_core\default=true +use_unsafe_extended_memory_layout=false +use_unsafe_extended_memory_layout\default=true [Cpu] cpu_accuracy=0 @@ -775,6 +783,8 @@ cpuopt_fastmem=true cpuopt_fastmem\default=true cpuopt_fastmem_exclusives=true cpuopt_fastmem_exclusives\default=true +cpuopt_ignore_memory_aborts=true +cpuopt_ignore_memory_aborts\default=true cpuopt_misc_ir=true cpuopt_misc_ir\default=true cpuopt_page_tables=true @@ -821,6 +831,8 @@ use_virtual_sd\default=true [Debugging] create_crash_dumps=false create_crash_dumps\default=true +disable_macro_hle=false +disable_macro_hle\default=true disable_macro_jit=false disable_macro_jit\default=true dump_exefs=false @@ -864,7 +876,7 @@ ip\default=true ip_ban_list\size=0 max_player=8 max_player\default=true -nickname= +nickname=RetroDECK nickname\default=true port=24872 port\default=true @@ -885,6 +897,12 @@ anti_aliasing=0 anti_aliasing\default=true aspect_ratio=0 aspect_ratio\default=true +astc_recompression=0 +astc_recompression\default=true +async_astc=false +async_astc\default=true +async_presentation=false +async_presentation\default=true backend=1 backend\default=true bg_blue=0 @@ -897,8 +915,12 @@ debug=false debug\default=true disable_shader_loop_safety_checks=false disable_shader_loop_safety_checks\default=true -fps_cap=1000 -fps_cap\default=true +enable_compute_pipelines=false +enable_compute_pipelines\default=true +force_max_clock=false +force_max_clock\default=true +fsr_sharpening_slider=25 +fsr_sharpening_slider\default=true fullscreen_mode=1 fullscreen_mode\default=true gpu_accuracy=1 @@ -929,15 +951,19 @@ use_fast_gpu_time=true use_fast_gpu_time\default=true use_pessimistic_flushes=false use_pessimistic_flushes\default=true -use_speed_limit=true -use_speed_limit\default=true -use_vsync=true +use_reactive_flushing=true +use_reactive_flushing\default=true +use_video_framerate=false +use_video_framerate\default=true +use_vsync=2 use_vsync\default=true +use_vulkan_driver_pipeline_cache=true +use_vulkan_driver_pipeline_cache\default=true vulkan_device=0 vulkan_device\default=true [Services] -network_interface=None +network_interface=wlan0 network_interface\default=false [System] @@ -947,6 +973,7 @@ custom_rtc=0 custom_rtc\default=true custom_rtc_enabled=false custom_rtc_enabled\default=true +device_name=RetroDECK language_index=1 language_index\default=true region_index=1 @@ -1011,139 +1038,183 @@ Paths\romsPath= Paths\symbolsPath= Screenshots\enable_screenshot_save_as=true Screenshots\enable_screenshot_save_as\default=true -Screenshots\screenshot_path=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/screenshots +Screenshots\screenshot_path=RETRODECKHOMEDIR/screenshots Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context=1 Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context\default=true Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq=Home+Dpad_Right Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq=Ctrl+M Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat=false +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat\default=true Shortcuts\Main%20Window\Audio%20Volume%20Down\Context=2 Shortcuts\Main%20Window\Audio%20Volume%20Down\Context\default=true Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq=Home+Dpad_Down Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq=- Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat=true +Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat\default=true Shortcuts\Main%20Window\Audio%20Volume%20Up\Context=2 Shortcuts\Main%20Window\Audio%20Volume%20Up\Context\default=true Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq=Home+Dpad_Up Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq="=" Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat=true +Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat\default=true Shortcuts\Main%20Window\Capture%20Screenshot\Context=3 Shortcuts\Main%20Window\Capture%20Screenshot\Context\default=true Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq=Screenshot Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq\default=true Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+P Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=true +Shortcuts\Main%20Window\Capture%20Screenshot\Repeat=false +Shortcuts\Main%20Window\Capture%20Screenshot\Repeat\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context=2 Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq=Home+L Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq=F8 Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat=false +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\Context=2 Shortcuts\Main%20Window\Change%20Docked%20Mode\Context\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq=Home+X Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq=F10 Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat=false +Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context=2 Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq=Home+R Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq=F9 Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq\default=true +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat=false +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1 Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq=Home+Plus Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=F4 Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat=false +Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Exit%20Fullscreen\Context=1 Shortcuts\Main%20Window\Exit%20Fullscreen\Context\default=true Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq= Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Esc -Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq= +Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=false +Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat=false +Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat\default=true Shortcuts\Main%20Window\Exit%20yuzu\Context=1 Shortcuts\Main%20Window\Exit%20yuzu\Context\default=true Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq=Home+Minus Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=true Shortcuts\Main%20Window\Exit%20yuzu\KeySeq=Ctrl+Q Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20yuzu\Repeat=false +Shortcuts\Main%20Window\Exit%20yuzu\Repeat\default=true Shortcuts\Main%20Window\Fullscreen\Context=1 Shortcuts\Main%20Window\Fullscreen\Context\default=true Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq=Home+B Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq\default=true Shortcuts\Main%20Window\Fullscreen\KeySeq=F11 Shortcuts\Main%20Window\Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Fullscreen\Repeat=false +Shortcuts\Main%20Window\Fullscreen\Repeat\default=true Shortcuts\Main%20Window\Load%20File\Context=3 Shortcuts\Main%20Window\Load%20File\Context\default=true Shortcuts\Main%20Window\Load%20File\Controller_KeySeq= Shortcuts\Main%20Window\Load%20File\Controller_KeySeq\default=true Shortcuts\Main%20Window\Load%20File\KeySeq=Ctrl+O Shortcuts\Main%20Window\Load%20File\KeySeq\default=true +Shortcuts\Main%20Window\Load%20File\Repeat=false +Shortcuts\Main%20Window\Load%20File\Repeat\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context=3 Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq=Home+A Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=F2 Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq\default=true +Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat=false +Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat\default=true Shortcuts\Main%20Window\Restart%20Emulation\Context=1 Shortcuts\Main%20Window\Restart%20Emulation\Context\default=true Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq\default=true Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=F6 Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Restart%20Emulation\Repeat=false +Shortcuts\Main%20Window\Restart%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Stop%20Emulation\Context=1 Shortcuts\Main%20Window\Stop%20Emulation\Context\default=true Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq\default=true Shortcuts\Main%20Window\Stop%20Emulation\KeySeq=F5 Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Stop%20Emulation\Repeat=false +Shortcuts\Main%20Window\Stop%20Emulation\Repeat\default=true Shortcuts\Main%20Window\TAS%20Record\Context=2 Shortcuts\Main%20Window\TAS%20Record\Context\default=true Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Record\KeySeq=Ctrl+F7 Shortcuts\Main%20Window\TAS%20Record\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Record\Repeat=false +Shortcuts\Main%20Window\TAS%20Record\Repeat\default=true Shortcuts\Main%20Window\TAS%20Reset\Context=2 Shortcuts\Main%20Window\TAS%20Reset\Context\default=true Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Reset\KeySeq=Ctrl+F6 Shortcuts\Main%20Window\TAS%20Reset\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Reset\Repeat=false +Shortcuts\Main%20Window\TAS%20Reset\Repeat\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\Context=2 Shortcuts\Main%20Window\TAS%20Start\Stop\Context\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq=Ctrl+F5 Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat=false +Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=Ctrl+F Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat=false +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context=2 Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq=Home+Y Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq=Ctrl+U Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat=false +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context=2 Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq=Ctrl+F9 Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat=false +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq=Ctrl+S Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat=false +Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat\default=true UIGameList\cache_game_list=true UIGameList\cache_game_list\default=true UIGameList\favorites\size=0 diff --git a/emu-configs/dolphin/Dolphin.ini b/emu-configs/dolphin/Dolphin.ini index f6111c44..07a56ad8 100644 --- a/emu-configs/dolphin/Dolphin.ini +++ b/emu-configs/dolphin/Dolphin.ini @@ -20,6 +20,8 @@ AudioStretchMaxLatency = 80 DPL2Decoder = False DPL2Quality = 2 DSPHLE = True +WiiSDCardAllowWrites = True +WiiSDCardEnableFolderSync = False [Display] Fullscreen = True DisableScreenSaver = True @@ -49,7 +51,7 @@ DSPThread = True Backend = Pulse EnableJIT = False [Interface] -ConfirmStop = True +ConfirmStop = False CursorVisibility = 0 OnScreenDisplayMessages = True PauseOnFocusLost = True diff --git a/emu-configs/dolphin/Hotkeys.ini b/emu-configs/dolphin/Hotkeys.ini index 0ea602d5..d2912ae6 100644 --- a/emu-configs/dolphin/Hotkeys.ini +++ b/emu-configs/dolphin/Hotkeys.ini @@ -4,8 +4,7 @@ General/Change Disc = @(Ctrl+D) General/Toggle Pause = @(Ctrl+P) General/Reset = @(Ctrl+R) General/Take Screenshot = @(Ctrl+X) -General/Exit = @(Ctrl+Escape) -General/Control NetPlay Golf Mode = @(Alt+G) +General/Exit = @(Ctrl+Q) Emulation Speed/Decrease Emulation Speed = @(Ctrl+`2`) Emulation Speed/Increase Emulation Speed = @(Ctrl+`1`) Emulation Speed/Disable Emulation Speed Limit = @(Ctrl+`0`) @@ -19,4 +18,7 @@ Load State/Load from Selected Slot = @(Ctrl+A) Other State Hotkeys/Undo Load State = @(Ctrl+`8`) Other State Hotkeys/Undo Save State = @(Ctrl+`9`) Other State Hotkeys/Increase Selected State Slot = @(Ctrl+K) -Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) \ No newline at end of file +Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) +General/Toggle Fullscreen = @(Ctrl+Return) +General/Control NetPlay Golf Mode = @(Alt+H) +Wii/Press Sync Button = @(Alt+W) \ No newline at end of file diff --git a/emu-configs/dolphin/WiimoteNew.ini b/emu-configs/dolphin/WiimoteNew.ini new file mode 100644 index 00000000..73002a7c --- /dev/null +++ b/emu-configs/dolphin/WiimoteNew.ini @@ -0,0 +1,90 @@ +[Wiimote1] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Buttons/A = SOUTH +Buttons/B = EAST +Buttons/1 = WEST +Buttons/2 = NORTH +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = THUMBR +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Extension = Nunchuk +Rumble/Motor = Strong +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Buttons/C = TL +Nunchuk/Buttons/Z = `Full Axis 2+` +IR/Auto-Hide = True +Hotkeys/Sideways Toggle = `XInput2/0/Virtual core pointer:Alt`&`XInput2/0/Virtual core pointer:X` +Hotkeys/Upright Toggle = `XInput2/0/Virtual core pointer:Alt_L`&`XInput2/0/Virtual core pointer:Z` +Source = 1 +IR/Up = `XInput2/0/Virtual core pointer:Cursor Y-` +IR/Down = `XInput2/0/Virtual core pointer:Cursor Y+` +IR/Left = `XInput2/0/Virtual core pointer:Cursor X-` +IR/Right = `XInput2/0/Virtual core pointer:Cursor X+` +Shake/X = `Full Axis 5+` +Shake/Y = `Full Axis 5+` +Shake/Z = `Full Axis 5+` +[Wiimote2] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[Wiimote3] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[Wiimote4] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[BalanceBoard] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 \ No newline at end of file diff --git a/emu-configs/duckstation/settings.ini b/emu-configs/duckstation/settings.ini index 0404446d..a3ab2d70 100644 --- a/emu-configs/duckstation/settings.ini +++ b/emu-configs/duckstation/settings.ini @@ -10,8 +10,8 @@ StartPaused = false StartFullscreen = false PauseOnFocusLoss = true PauseOnMenu = true -SaveStateOnExit = true -ConfirmPowerOff = true +SaveStateOnExit = false +ConfirmPowerOff = false LoadDevicesFromSaveStates = true ApplyGameSettings = true AutoLoadCheats = true @@ -92,7 +92,7 @@ ShowEnhancements = false Fullscreen = false VSync = false DisplayAllFrames = false -PostProcessChain = +PostProcessChain = MaxFPS = 0.000000 InternalResolutionScreenshots = false @@ -119,9 +119,9 @@ DumpOnBoot = false [BIOS] SearchDirectory = RETRODECKHOMEDIR/bios -PathNTSCU = -PathNTSCJ = -PathPAL = +PathNTSCU = +PathNTSCJ = +PathPAL = PatchTTYEnable = false PatchFastBoot = false @@ -182,9 +182,9 @@ Type = None Card1Type = PerGameTitle Card2Type = None UsePlaylistTitle = true -Card1Path = /var/data/duckstation/memcards/shared_card_1.mcd -Card2Path = /var/data/duckstation/memcards/shared_card_2.mcd -Directory = /var/data/duckstation/memcards +Card1Path = RETRODECKHOMEDIR/saves/psx/duckstation/memcards/shared_card_1.mcd +Card2Path = RETRODECKHOMEDIR/saves/psx/duckstation/memcards/shared_card_2.mcd +Directory = RETRODECKHOMEDIR/saves/psx/duckstation/memcards [ControllerPorts] @@ -193,7 +193,7 @@ MultitapMode = Disabled [Logging] LogLevel = Info -LogFilter = +LogFilter = LogToConsole = true LogToDebug = false LogToWindow = false @@ -220,34 +220,44 @@ GPUMaxRunAhead = 128 [Hotkeys] -OpenQuickMenu = Keyboard/Control+M -FastForward = Keyboard/Control+Keypad+Plus -ToggleTurbo = Keyboard/Control+T -ToggleFullscreen = Keyboard/Control+Return -TogglePause = Keyboard/Control+P -Screenshot = Keyboard/Control+X -Reset = Keyboard/Control+R -ChangeDisc = Keyboard/Control+D -Rewind = Keyboard/Control+Keypad+Minus -ToggleCheats = Keyboard/Control+C -IncreaseEmulationSpeed = Keyboard/Control+1 -DecreaseEmulationSpeed = Keyboard/Control+2 -ResetEmulationSpeed = Keyboard/Control+3 -IncreaseResolutionScale = Keyboard/Control+U -DecreaseResolutionScale = Keyboard/Control+Y -ToggleWidescreen = Keyboard/Control+W -LoadSelectedSaveState = Keyboard/Control+A -SaveSelectedSaveState = Keyboard/Control+S -SelectPreviousSaveStateSlot = Keyboard/Control+J -SelectNextSaveStateSlot = Keyboard/Control+K -UndoLoadState = Keyboard/Control+9 +OpenQuickMenu = Keyboard/Control & Keyboard/M +FastForward = Keyboard/Control & Keyboard/Plus +ToggleTurbo = Keyboard/Control & Keyboard/T +ToggleFullscreen = Keyboard/Control & Keyboard/Return +TogglePause = Keyboard/Control & Keyboard/P +Screenshot = Keyboard/Control & Keyboard/X +Reset = Keyboard/Control & Keyboard/R +ChangeDisc = Keyboard/Control & Keyboard/D +Rewind = Keyboard/Control & Keyboard/Minus +ToggleCheats = Keyboard/Control & Keyboard/C +IncreaseEmulationSpeed = Keyboard/Control & Keyboard/1 +DecreaseEmulationSpeed = Keyboard/Control & Keyboard/2 +ResetEmulationSpeed = Keyboard/Control & Keyboard/3 +IncreaseResolutionScale = Keyboard/Control & Keyboard/U +DecreaseResolutionScale = Keyboard/Control & Keyboard/Y +ToggleWidescreen = Keyboard/Control & Keyboard/W +LoadSelectedSaveState = Keyboard/Control & Keyboard/A +SaveSelectedSaveState = Keyboard/Control & Keyboard/S +SelectPreviousSaveStateSlot = Keyboard/Control & Keyboard/J +SelectNextSaveStateSlot = Keyboard/Control & Keyboard/K +PowerOff = Keyboard/Control & Keyboard/Q +UndoLoadState = Keyboard/Control & Keyboard/9 [Cheevos] -Enabled = true +Enabled = false TestMode = false UnofficialTestMode = false UseFirstDiscFromPlaylist = true +RichPresence = true +ChallengeMode = false +Leaderboards = true +Notifications = true +SoundEffects = true +PrimedIndicators = true +Username = +Token = +LoginTimestamp = [UI] @@ -256,4 +266,4 @@ MainWindowState = AAAA/wAAAAD9AAAAAAAAAyAAAAI9AAAABAAAAAQAAAAIAAAACPwAAAABAAAAAg [GameList] -RecursivePaths = RETRODECKHOMEDIR/roms/psx \ No newline at end of file +RecursivePaths = RETRODECKHOMEDIR/roms/psx diff --git a/emu-configs/mame/cfg/default.cfg b/emu-configs/mame/cfg/default.cfg new file mode 100644 index 00000000..7fbdab04 --- /dev/null +++ b/emu-configs/mame/cfg/default.cfg @@ -0,0 +1,53 @@ + + + + + + + + JOYCODE_1_HAT1UP + + + + + JOYCODE_1_SELECT + + + + + KEYCODE_LCONTROL KEYCODE_M + + + + + KEYCODE_LCONTROL KEYCODE_P + + + + + KEYCODE_LCONTROL KEYCODE_MINUSPAD + + + + + KEYCODE_LCONTROL KEYCODE_S + + + + + KEYCODE_LCONTROL KEYCODE_A + + + + + KEYCODE_LCONTROL KEYCODE_PLUSPAD + + + + + KEYCODE_LCONTROL KEYCODE_X + + + + + diff --git a/emu-configs/mame/mame.ini b/emu-configs/mame/mame.ini new file mode 100644 index 00000000..1e7e0c40 --- /dev/null +++ b/emu-configs/mame/mame.ini @@ -0,0 +1,411 @@ +# +# CORE CONFIGURATION OPTIONS +# +readconfig 1 +writeconfig 0 + +# +# CORE SEARCH PATH OPTIONS +# +homepath /var/config/mame +rompath /home/deck/retrodeck/roms/arcade +hashpath /app/share/mame/hash +samplepath /app/share/mame/samples +artpath $HOME/retrodeck/downloaded_media/arcade/screenshots/ +ctrlrpath /app/share/mame/ctrlr +inipath /var/config/mame +fontpath /app/bin/ +cheatpath /app/share/mame/cheat +crosshairpath /app/share/mame/crosshair +pluginspath /app/share/mame/plugins +languagepath /app/share/mame/language +swpath /app/share/mame/software + +# +# CORE OUTPUT DIRECTORY OPTIONS +# +cfg_directory /var/config/mame/cfg +nvram_directory /var/config/mame/nvram +input_directory /var/config/mame/inp +state_directory /var/config/mame/sta +snapshot_directory RETRODECKHOMEDIR/screenshots +diff_directory /var/config/mame/diff +comment_directory /var/config/mame/comments +share_directory /var/config/mame/share + +# +# CORE STATE/PLAYBACK OPTIONS +# +state +autosave 0 +rewind 0 +rewind_capacity 100 +playback +record +exit_after_playback 0 +mngwrite +aviwrite +wavwrite +snapname %g/%i +snapsize auto +snapview auto +snapbilinear 1 +statename %g +burnin 0 + +# +# CORE PERFORMANCE OPTIONS +# +autoframeskip 0 +frameskip 0 +seconds_to_run 0 +throttle 1 +sleep 1 +speed 1.0 +refreshspeed 0 +lowlatency 0 + +# +# CORE RENDER OPTIONS +# +keepaspect 1 +unevenstretch 1 +unevenstretchx 0 +unevenstretchy 0 +autostretchxy 0 +intoverscan 0 +intscalex 0 +intscaley 0 + +# +# CORE ROTATION OPTIONS +# +rotate 1 +ror 0 +rol 0 +autoror 0 +autorol 0 +flipx 0 +flipy 0 + +# +# CORE ARTWORK OPTIONS +# +artwork_crop 0 +fallback_artwork +override_artwork + +# +# CORE SCREEN OPTIONS +# +brightness 1.0 +contrast 1.0 +gamma 1.0 +pause_brightness 0.65 +effect none + +# +# CORE VECTOR OPTIONS +# +beam_width_min 1.0 +beam_width_max 1.0 +beam_dot_size 1.0 +beam_intensity_weight 0 +flicker 0 + +# +# CORE SOUND OPTIONS +# +samplerate 48000 +samples 1 +volume 0 +compressor 1 +speaker_report 0 + +# +# CORE INPUT OPTIONS +# +coin_lockout 1 +ctrlr +mouse 0 +joystick 1 +lightgun 0 +multikeyboard 0 +multimouse 0 +steadykey 0 +ui_active 0 +offscreen_reload 0 +joystick_map auto +joystick_deadzone 0.15 +joystick_saturation 0.85 +joystick_threshold 0.3 +natural 0 +joystick_contradictory 0 +coin_impulse 0 + +# +# CORE INPUT AUTOMATIC ENABLE OPTIONS +# +paddle_device keyboard +adstick_device keyboard +pedal_device keyboard +dial_device keyboard +trackball_device keyboard +lightgun_device keyboard +positional_device keyboard +mouse_device mouse + +# +# CORE DEBUGGING OPTIONS +# +verbose 0 +log 0 +oslog 0 +debug 0 +update_in_pause 0 +debugscript +debuglog 0 + +# +# CORE COMM OPTIONS +# +comm_localhost 0.0.0.0 +comm_localport 15112 +comm_remotehost 127.0.0.1 +comm_remoteport 15112 +comm_framesync 0 + +# +# CORE MISC OPTIONS +# +drc 1 +drc_use_c 0 +drc_log_uml 0 +drc_log_native 0 +bios +cheat 0 +skip_gameinfo 1 +uifont default +ui cabinet +ramsize +confirm_quit 0 +ui_mouse 1 +language +nvram_save 1 + +# +# SCRIPTING OPTIONS +# +autoboot_command +autoboot_delay 0 +autoboot_script +console 0 +plugins 1 +plugin +noplugin + +# +# HTTP SERVER OPTIONS +# +http 0 +http_port 8080 +http_root web + +# +# OSD INPUT MAPPING OPTIONS +# +uimodekey auto +controller_map none +background_input 0 + +# +# OSD FONT OPTIONS +# +uifontprovider auto + +# +# OSD OUTPUT OPTIONS +# +output auto + +# +# OSD INPUT OPTIONS +# +keyboardprovider auto +mouseprovider auto +lightgunprovider auto +joystickprovider auto + +# +# OSD DEBUGGING OPTIONS +# +debugger auto +debugger_port 23946 +debugger_font auto +debugger_font_size 0 +watchdog 0 + +# +# OSD PERFORMANCE OPTIONS +# +numprocessors auto +bench 0 + +# +# OSD VIDEO OPTIONS +# +video opengl +numscreens 1 +window 0 +maximize 1 +waitvsync 0 +syncrefresh 0 +monitorprovider auto + +# +# OSD PER-WINDOW VIDEO OPTIONS +# +screen auto +aspect auto +resolution auto +view auto +screen0 auto +aspect0 auto +resolution0 auto +view0 auto +screen1 auto +aspect1 auto +resolution1 auto +view1 auto +screen2 auto +aspect2 auto +resolution2 auto +view2 auto +screen3 auto +aspect3 auto +resolution3 auto +view3 auto + +# +# OSD FULL SCREEN OPTIONS +# +switchres 0 + +# +# OSD ACCELERATED VIDEO OPTIONS +# +filter 1 +prescale 1 + +# +# OpenGL-SPECIFIC OPTIONS +# +gl_forcepow2texture 0 +gl_notexturerect 0 +gl_vbo 1 +gl_pbo 1 +gl_glsl 0 +gl_glsl_filter 1 +glsl_shader_mame0 none +glsl_shader_mame1 none +glsl_shader_mame2 none +glsl_shader_mame3 none +glsl_shader_mame4 none +glsl_shader_mame5 none +glsl_shader_mame6 none +glsl_shader_mame7 none +glsl_shader_mame8 none +glsl_shader_mame9 none +glsl_shader_screen0 none +glsl_shader_screen1 none +glsl_shader_screen2 none +glsl_shader_screen3 none +glsl_shader_screen4 none +glsl_shader_screen5 none +glsl_shader_screen6 none +glsl_shader_screen7 none +glsl_shader_screen8 none +glsl_shader_screen9 none + +# +# OSD SOUND OPTIONS +# +sound auto +audio_latency 2 + +# +# PORTAUDIO OPTIONS +# +pa_api none +pa_device none +pa_latency 0 + +# +# OSD MIDI OPTIONS +# +midiprovider auto + +# +# OSD EMULATED NETWORKING OPTIONS +# +networkprovider auto + +# +# BGFX POST-PROCESSING OPTIONS +# +bgfx_path bgfx +bgfx_backend auto +bgfx_debug 0 +bgfx_screen_chains +bgfx_shadow_mask slot-mask.png +bgfx_lut lut-default.png +bgfx_avi_name auto + +# +# SDL PERFORMANCE OPTIONS +# +sdlvideofps 0 + +# +# SDL VIDEO OPTIONS +# +centerh 1 +centerv 1 +scalemode none + +# +# SDL FULL SCREEN OPTIONS +# +useallheads 0 +attach_window + +# +# SDL KEYBOARD MAPPING +# +keymap 0 +keymap_file keymap.dat + +# +# SDL JOYSTICK MAPPING +# +sixaxis 0 + +# +# SDL LIGHTGUN MAPPING +# +lightgun_index1 auto +lightgun_index2 auto +lightgun_index3 auto +lightgun_index4 auto +lightgun_index5 auto +lightgun_index6 auto +lightgun_index7 auto +lightgun_index8 auto + +# +# SDL LOW-LEVEL DRIVER OPTIONS +# +videodriver auto +renderdriver auto +audiodriver auto +gl_lib auto diff --git a/emu-configs/mame/ui.ini b/emu-configs/mame/ui.ini new file mode 100644 index 00000000..db76cbf3 --- /dev/null +++ b/emu-configs/mame/ui.ini @@ -0,0 +1,70 @@ +# +# UI SEARCH PATH OPTIONS +# +historypath history;dats;. +categorypath folders +cabinets_directory cabinets;cabdevs +cpanels_directory cpanel +pcbs_directory pcb +flyers_directory flyers +titles_directory titles +ends_directory ends +marquees_directory marquees;$HOME/retrodeck/downloaded_media/arcade/marquees +artwork_preview_directory "artwork preview;artpreview" +bosses_directory bosses +logos_directory logo +scores_directory scores +versus_directory versus +gameover_directory gameover +howto_directory howto +select_directory select +icons_directory icons +covers_directory covers;$HOME/retrodeck/downloaded_media/arcade/covers +ui_path ui + +# +# UI MISC OPTIONS +# +system_names +skip_warnings 1 +unthrottle_mute 0 + +# +# UI OPTIONS +# +infos_text_size 0.75 +font_rows 30 +ui_border_color ffffffff +ui_bg_color ef101030 +ui_clone_color ff808080 +ui_dipsw_color ffffff00 +ui_gfxviewer_color ef101030 +ui_mousedown_bg_color b0606000 +ui_mousedown_color ffffff80 +ui_mouseover_bg_color 70404000 +ui_mouseover_color ffffff80 +ui_selected_bg_color ef808000 +ui_selected_color ffffff00 +ui_slider_color ffffffff +ui_subitem_color ffffffff +ui_text_bg_color ef000000 +ui_text_color ffffffff +ui_unavail_color ff404040 + +# +# SYSTEM/SOFTWARE SELECTION MENU OPTIONS +# +hide_main_panel 0 +use_background 1 +skip_biosmenu 0 +skip_partsmenu 0 +remember_last 0 +last_used_filter Available +system_right_panel image +software_right_panel image +system_right_image cover +software_right_image snap +enlarge_snaps 1 +forced4x3 1 +info_audit_enabled 0 +hide_romless 1 diff --git a/emu-configs/melonds/melonDS.ini b/emu-configs/melonds/melonDS.ini index 12e7e3a8..3cbd1228 100644 --- a/emu-configs/melonds/melonDS.ini +++ b/emu-configs/melonds/melonDS.ini @@ -129,7 +129,7 @@ SaveFilePath=RETRODECKHOMEDIR/saves/nds/melonds SavestatePath=RETRODECKHOMEDIR/states/nds/melonds CheatFilePath= EnableCheats=0 -MouseHide=0 +MouseHide=1 MouseHideSeconds=5 PauseLostFocus=1 DSBatteryLevelOkay=1 diff --git a/emu-configs/patches/updates/064b_update.patch b/emu-configs/patches/updates/064b_update.patch index 3502b91d..7b7dc6d8 100644 --- a/emu-configs/patches/updates/064b_update.patch +++ b/emu-configs/patches/updates/064b_update.patch @@ -2,5 +2,5 @@ change^DSP^Backend^Pulse^primehack^$primehackconf change^Settings^AspectRatio^1^primehack^$primehackgfxconf # Update "ask on quit" and "save on quit" on supported emulators (PCSX2, Duckstation) -change^UI^ConfirmShutdown^false^pcsx2^$pcsx2qtconf -change^Main^ConfirmPowerOff^false^duckstation^$duckstationconf \ No newline at end of file +change^UI^ConfirmShutdown^false^pcsx2^$pcsx2conf +change^Main^ConfirmPowerOff^false^duckstation^$duckstationconf diff --git a/emu-configs/pico-8/config.txt b/emu-configs/pico-8/config.txt new file mode 100644 index 00000000..4c811c25 --- /dev/null +++ b/emu-configs/pico-8/config.txt @@ -0,0 +1,145 @@ +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// Configuration for pico-8 +// +// config.txt is read on startup and saved on exit. +// To generate the default config.txt, delete this file. +// +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +// :: Video Settings + +window_size 0 0 // window width, height +screen_size 0 0 // screen width, height (stretched to window) +show_fps 0 // Draw frames per second in the corner + + +// :: Window Settings + +windowed 0 // 1 to start up in windowed mode +window_position -1 -1 // x and y position of window (-1, -1 to let the window manager decide) +frameless 0 // 1 to use a window with no frame +fullscreen_method 1 // 0 maximized window (linux) 1 borderless desktop-sized window 2 hardware fullscreen (warning: erratic behaviour under some drivers) +blit_method 0 // 0 auto 1 software (slower but sometimes more reliable) 2 hardware (can do filtered scaling) + + + +// :: System Settings + +foreground_sleep_ms 2 // number of milliseconds to sleep each frame. Try 10 to conserve battery power + +background_sleep_ms 10 // number of milliseconds to sleep each frame when running in the background + +sessions 1 // number of times program has been run + +// (scancode) hold this key down and left-click to simulate right-click +rmb_key 0 // 0 for none 226 for LALT + +// Desktop for saving screenshots etc. Defaults to $HOME/Desktop +desktop_path + +// 1 to allow controller input even when application is in background +read_controllers_in_background 0 + + + +// :: Audio Settings (use "volume" for PICO-8) + +sound_volume 256 // 0..256 +music_volume 256 // 0..256 + + +// :: usually 1024. Try 2048 if you get choppy sound + +mix_buffer_size 1024 + + +// :: map scancodes. Format: 44=47,80=89,.. (scancode a, scancode b -- when press a, generates b) +// run the program with -scancodes to determine which scancodes to use +map_scancodes + + +// :: pico-8 + +version 0.2.5g + +// audio volume: 0..256 +volume 256 + + +// Location of pico-8's root folder +root_path /home/deck/.lexaloffle/pico-8/carts/ + + +// Location of cartridge save data +cdata_path /home/deck/.lexaloffle/pico-8/cdata/ + + +// Specify which player index joystick control begins at (0..7) +joystick_index 0 + + +// Custom keyboard scancodes for buttons. player0 0..6, player1 0..5 +button_keys 0 0 0 0 0 0 0 0 0 0 0 0 0 + +// Play notes as they are plotted in frequency mode +live_notes 0 + +// iff 1: when using keyboard cursor, snap to closest pixel / map cel +cursor_snap 0 + +// 0 default 1 dark blue background in code editor 2 black background in code editor 3 gray background in code editor +gui_theme 0 + +// scale of screenshots and gifs // 2 means 256x256 +screenshot_scale 3 +gif_scale 3 + +// maximum gif length in seconds (0..120; 0 means no gif recording) +gif_len 16 + +// when 1, reset the recording when pressing ctrl-9 (useful for creating a non-overlapping sequence) +gif_reset_mode 0 + +// 0 for off. 1 for auto. 2 to allow control of a cart's framerate due to host machine's cpu capacity +host_framerate_control 1 + +// filter splore cartridges +// 0 off 1 on (exclude cartridge tagged as 'mature' by community) +splore_filter 0 + +// tab display width (1 ~ 4 spaces) +tab_width 1 + +// 0 off 1 on: draw tab characters as small vertical lines +draw_tabs 0 + +// 0 off 1 on: record the current cartridge and editor view every 3 seconds (see [appdata]/activity.log.txt) +record_activity_log 1 + +// 0 off 1 on: allow F6..F9 (alternative: ctrl 6..9) +allow_function_keys 1 + +// 0 off 1 on: automatically check for a newer version of a BBS cart each time it is run. +check_for_cart_updates 1 + +// hide mouse cursor for n seconds when typing. +auto_hide_mouse_cursor 5 + +// 0 off 1 on: backup with a new timestamped filename on every run +// normally not needed -- was used for debugging crash-on-run +aggressive_backups 0 + +// back up cartridge in editor every n minutes when not idle (0 for no periodic backups) +periodic_backups 20 + +// global screen transformations: +// 129 flip horizontally +// 130 flip vertically +// 133 rotate CW 90 degrees +// 134 rotate CW 180 degrees +// 135 rotate CW 270 degrees +transform_screen 0 + +// 0 off > 1: colour to draw pixel grid in the gfx editor at zoom:8 and zoom:4 (16 for black) +gfx_grid_lines 0 diff --git a/emu-configs/pico-8/pico8-wrapper.sh b/emu-configs/pico-8/pico8-wrapper.sh index 7581e17f..4a90a91c 100644 --- a/emu-configs/pico-8/pico8-wrapper.sh +++ b/emu-configs/pico-8/pico8-wrapper.sh @@ -3,4 +3,4 @@ # This is a wrapper function for PICO8, as ES-DE does not appear to be able to find it outside of the /app/bin location. # Users should still put the real binary in the ~/retrodeck/bios/pico-8/ location -~/retrodeck/bios/pico-8/pico8 +~/.lexaloffle/pico-8/pico8 "$@" diff --git a/emu-configs/pico-8/sdl_controllers.txt b/emu-configs/pico-8/sdl_controllers.txt new file mode 100644 index 00000000..440c0383 --- /dev/null +++ b/emu-configs/pico-8/sdl_controllers.txt @@ -0,0 +1,2 @@ +// add SDL2 game controller mappings to this file +03000000de2800000512000010010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, diff --git a/emu-configs/ppssppsdl/controls.ini b/emu-configs/ppssppsdl/controls.ini index bf29c377..721182e1 100644 --- a/emu-configs/ppssppsdl/controls.ini +++ b/emu-configs/ppssppsdl/controls.ini @@ -9,19 +9,26 @@ Square = 1-29,10-191 Triangle = 1-47,10-188 Start = 1-62,10-197 Select = 1-66,10-196 -L = 1-45,10-194 -R = 1-51,10-195 +L = 1-45,10-193 +R = 1-51,10-192 An.Up = 1-37,10-4003 An.Down = 1-39,10-4002 An.Left = 1-38,10-4001 An.Right = 1-40,10-4000 Analog limiter = 1-60 -RapidFire = 1-59 -Fast-forward = 10-4010 +RapidFire = 1-113:1-48 +Fast-forward = 1-113:1-157 SpeedToggle = 1-68 -Pause = 1-40 -Rewind = 10-4008 -Save State = 1-53 -Load State = 1-48 -Screenshot = 1-46 -Home = 1-111 \ No newline at end of file +Pause = 1-111 +Rewind = 1-113:1-156 +Save State = 1-113:1-47 +Load State = 1-113:1-29 +Screenshot = 1-113:1-52 +Home = 1-111 +Audio/Video Recording = 1-113:1-50 +Next Slot = 1-113:1-39 +Toggle Fullscreen = 1-113:1-66 +RightAn.Up = 10-4007 +RightAn.Down = 10-4006 +RightAn.Left = 10-4005 +RightAn.Right = 10-4004 \ No newline at end of file diff --git a/emu-configs/ppssppsdl/ppsspp.ini b/emu-configs/ppssppsdl/ppsspp.ini index b1a74835..64135e0f 100644 --- a/emu-configs/ppssppsdl/ppsspp.ini +++ b/emu-configs/ppssppsdl/ppsspp.ini @@ -12,12 +12,12 @@ Language = en_US ForceLagSync2 = False DiscordPresence = True UISound = False -AutoLoadSaveState = 2 +AutoLoadSaveState = 0 EnableCheats = False CwCheatRefreshRate = 77 CwCheatScrollPosition = 0.000000 GameListScrollPosition = 0.000000 -ScreenshotsAsPNG = False +ScreenshotsAsPNG = True UseFFV1 = False DumpFrames = False DumpVideoOutput = False @@ -30,9 +30,9 @@ StateUndoLastSaveGame = NA StateUndoLastSaveSlot = -5 RewindFlipFrequency = 0 ShowOnScreenMessage = True -ShowRegionOnGameIcon = False +ShowRegionOnGameIcon = True ShowIDOnGameIcon = False -GameGridScale = 1.000000 +GameGridScale = 1.250000 GridView1 = True GridView2 = True GridView3 = False @@ -72,6 +72,11 @@ UITint = 0.000000 UISaturation = 1.000000 ShowMenuBar = True IgnoreCompatSettings = +RewindSnapshotInterval = 0 +WindowX = 0 +WindowY = 0 +WindowWidth = 1324 +WindowHeight = 754 [CPU] CPUCore = 1 SeparateSASThread = True @@ -101,7 +106,7 @@ HardwareTransform = True SoftwareSkinning = True TextureFiltering = 1 BufferFiltering = 1 -InternalResolution = 1 +InternalResolution = 2 AndroidHwScale = 1 HighQualityDepth = 1 FrameSkip = 0 @@ -114,7 +119,7 @@ AnisotropyLevel = 4 VertexDecCache = False TextureBackoffCache = False TextureSecondaryCache = False -FullScreen = False +FullScreen = True FullScreenMulti = False SmallDisplayZoomType = 2 SmallDisplayOffsetX = 0.500000 @@ -158,6 +163,8 @@ DisplayStretch = False ReplaceTexturesAllowLate = True SkipGPUReadbacks = False GpuLogProfiler = False +iShowStatusFlags = 0 +DisplayIntegerScale = False [Sound] Enable = True AudioBackend = 0 @@ -225,80 +232,80 @@ AnalogAutoRotSpeed = 8.000000 TouchSnapToGrid = False TouchSnapGridSize = 64 ActionButtonSpacing2 = 1.000000 -ActionButtonCenterX = -1.000000 -ActionButtonCenterY = -1.000000 +ActionButtonCenterX = 0.906250 +ActionButtonCenterY = 0.850000 ActionButtonScale = 1.150000 -DPadX = -1.000000 -DPadY = -1.000000 +DPadX = 0.111719 +DPadY = 0.640000 DPadScale = 1.150000 ShowTouchDpad = True DPadSpacing = 1.000000 -StartKeyX = -1.000000 -StartKeyY = -1.000000 +StartKeyX = 0.589844 +StartKeyY = 0.913750 StartKeyScale = 1.150000 ShowTouchStart = True -SelectKeyX = -1.000000 -SelectKeyY = -1.000000 +SelectKeyX = 0.500000 +SelectKeyY = 0.913750 SelectKeyScale = 1.150000 ShowTouchSelect = True -UnthrottleKeyX = -1.000000 -UnthrottleKeyY = -1.000000 +UnthrottleKeyX = 0.410156 +UnthrottleKeyY = 0.913750 UnthrottleKeyScale = 1.150000 ShowTouchUnthrottle = True -LKeyX = -1.000000 -LKeyY = -1.000000 +LKeyX = 0.053906 +LKeyY = 0.453750 LKeyScale = 1.150000 ShowTouchLTrigger = True -RKeyX = -1.000000 -RKeyY = -1.000000 +RKeyX = 0.946094 +RKeyY = 0.453750 RKeyScale = 1.150000 ShowTouchRTrigger = True -AnalogStickX = -1.000000 -AnalogStickY = -1.000000 +AnalogStickX = 0.111719 +AnalogStickY = 0.885000 AnalogStickScale = 1.150000 ShowAnalogStick = True -RightAnalogStickX = -1.000000 -RightAnalogStickY = -1.000000 +RightAnalogStickX = 0.906250 +RightAnalogStickY = 0.885000 RightAnalogStickScale = 1.150000 ShowRightAnalogStick = False -fcombo0X = -1.000000 -fcombo0Y = -1.000000 +fcombo0X = 0.607813 +fcombo0Y = 0.500000 comboKeyScale0 = 1.150000 ShowComboKey0 = False -fcombo1X = -1.000000 -fcombo1Y = -1.000000 +fcombo1X = 0.697656 +fcombo1Y = 0.500000 comboKeyScale1 = 1.150000 ShowComboKey1 = False -fcombo2X = -1.000000 -fcombo2Y = -1.000000 +fcombo2X = 0.787500 +fcombo2Y = 0.500000 comboKeyScale2 = 1.150000 ShowComboKey2 = False -fcombo3X = -1.000000 -fcombo3Y = -1.000000 +fcombo3X = 0.607813 +fcombo3Y = 0.332500 comboKeyScale3 = 1.150000 ShowComboKey3 = False -fcombo4X = -1.000000 -fcombo4Y = -1.000000 +fcombo4X = 0.697656 +fcombo4Y = 0.332500 comboKeyScale4 = 1.150000 ShowComboKey4 = False -fcombo5X = -1.000000 -fcombo5Y = -1.000000 +fcombo5X = 0.392188 +fcombo5Y = 0.500000 comboKeyScale5 = 1.150000 ShowComboKey5 = False -fcombo6X = -1.000000 -fcombo6Y = -1.000000 +fcombo6X = 0.302344 +fcombo6Y = 0.500000 comboKeyScale6 = 1.150000 ShowComboKey6 = False -fcombo7X = -1.000000 -fcombo7Y = -1.000000 +fcombo7X = 0.212500 +fcombo7Y = 0.500000 comboKeyScale7 = 1.150000 ShowComboKey7 = False -fcombo8X = -1.000000 -fcombo8Y = -1.000000 +fcombo8X = 0.392188 +fcombo8Y = 0.332500 comboKeyScale8 = 1.150000 ShowComboKey8 = False -fcombo9X = -1.000000 -fcombo9Y = -1.000000 +fcombo9X = 0.302344 +fcombo9Y = 0.332500 comboKeyScale9 = 1.150000 ShowComboKey9 = False AnalogDeadzone = 0.150000 @@ -309,7 +316,7 @@ AnalogLimiterDeadzone = 0.600000 LeftStickHeadScale = 1.000000 RightStickHeadScale = 1.000000 HideStickBackground = False -UseMouse = False +UseMouse = True MapMouse = False ConfineMap = False MouseSensitivity = 0.100000 @@ -501,4 +508,27 @@ VRCameraSide = 0.000000 VRCanvasDistance = 12.000000 VRFieldOfView = 100.000000 VRHeadUpDisplayScale = 0.300000 -VRMotionLength = 0.500000 \ No newline at end of file +VRMotionLength = 0.500000 +VRForce72Hz = True +VRManualForceVR = False +VRRescaleHUD = True +VRCameraPitch = 0 +VRHeadRotationScale = 5.000000 +VRHeadRotationEnabled = False +VRHeadRotationSmoothing = False +[Achievements] +AchievementsEnable = False +AchievementsChallengeMode = False +AchievementsEncoreMode = False +AchievementsUnofficial = False +AchievementsLogBadMemReads = False +AchievementsUserName = +AchievementsSoundEffects = True +AchievementsUnlockAudioFile = +AchievementsLeaderboardSubmitAudioFile = +AchievementsLeaderboardTrackerPos = 3 +AchievementsLeaderboardStartedOrFailedPos = 3 +AchievementsLeaderboardSubmittedPos = 3 +AchievementsProgressPos = 3 +AchievementsChallengePos = 3 +AchievementsUnlockedPos = 4 diff --git a/emu-configs/primehack/Dolphin.ini b/emu-configs/primehack/Dolphin.ini index 89663dd0..d2e83c39 100644 --- a/emu-configs/primehack/Dolphin.ini +++ b/emu-configs/primehack/Dolphin.ini @@ -48,7 +48,7 @@ DisableScreenSaver = True KeepWindowOnTop = False Fullscreen = True [Interface] -ConfirmStop = True +ConfirmStop = False LanguageCode = OnScreenDisplayMessages = True PauseOnFocusLost = False diff --git a/emu-configs/primehack/Hotkeys.ini b/emu-configs/primehack/Hotkeys.ini index 0ea602d5..1b0947e6 100644 --- a/emu-configs/primehack/Hotkeys.ini +++ b/emu-configs/primehack/Hotkeys.ini @@ -4,8 +4,8 @@ General/Change Disc = @(Ctrl+D) General/Toggle Pause = @(Ctrl+P) General/Reset = @(Ctrl+R) General/Take Screenshot = @(Ctrl+X) -General/Exit = @(Ctrl+Escape) -General/Control NetPlay Golf Mode = @(Alt+G) +General/Exit = @(Ctrl+Q) +General/Control NetPlay Golf Mode = @(Alt+H) Emulation Speed/Decrease Emulation Speed = @(Ctrl+`2`) Emulation Speed/Increase Emulation Speed = @(Ctrl+`1`) Emulation Speed/Disable Emulation Speed Limit = @(Ctrl+`0`) @@ -19,4 +19,6 @@ Load State/Load from Selected Slot = @(Ctrl+A) Other State Hotkeys/Undo Load State = @(Ctrl+`8`) Other State Hotkeys/Undo Save State = @(Ctrl+`9`) Other State Hotkeys/Increase Selected State Slot = @(Ctrl+K) -Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) \ No newline at end of file +Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) +General/Toggle Fullscreen = @(Ctrl+Return) +Wii/Press Sync Button = @(Alt+W) \ No newline at end of file diff --git a/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg new file mode 100644 index 00000000..3e3e4106 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AAE-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png new file mode 100644 index 00000000..2eedca69 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg new file mode 100644 index 00000000..e2d5f10b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ALFTVGame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png new file mode 100644 index 00000000..f741ac1f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg new file mode 100644 index 00000000..d5a0e1dc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = APFImagination-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png new file mode 100644 index 00000000..8d1733c0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg new file mode 100644 index 00000000..c4b9035a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornAchimedes-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png new file mode 100644 index 00000000..4ac8ffd6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg new file mode 100644 index 00000000..c802b292 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornAtom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png new file mode 100644 index 00000000..fb423431 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg new file mode 100644 index 00000000..46fa93c5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornBBCMicro-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png new file mode 100644 index 00000000..73cc80bb Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg new file mode 100644 index 00000000..c35808c9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornElectron-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png new file mode 100644 index 00000000..7e9f643e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg new file mode 100644 index 00000000..5d54f424 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ActionMax-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png new file mode 100644 index 00000000..a23ee699 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg new file mode 100644 index 00000000..adfafa4d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AdventureVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png new file mode 100644 index 00000000..c45f63e8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg new file mode 100644 index 00000000..2f23791d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmericanLaserGames-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png new file mode 100644 index 00000000..878e0e8b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg new file mode 100644 index 00000000..132ce099 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Amiga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png new file mode 100644 index 00000000..a14db3b1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg new file mode 100644 index 00000000..48454d6f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmigaCD32-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png new file mode 100644 index 00000000..e91d34b8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg new file mode 100644 index 00000000..98e3434d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Amstrad-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png new file mode 100644 index 00000000..ff7858f7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg new file mode 100644 index 00000000..cc4fbabf --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmstradCPC-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png new file mode 100644 index 00000000..15379bc5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg new file mode 100644 index 00000000..20e0a231 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmstradGX4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png new file mode 100644 index 00000000..3ada8bbd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg new file mode 100644 index 00000000..2874b472 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Android-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png new file mode 100644 index 00000000..1ff895f3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg new file mode 100644 index 00000000..8ca9612b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apogee-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png new file mode 100644 index 00000000..f581c86f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg new file mode 100644 index 00000000..599dfb4a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png new file mode 100644 index 00000000..efe3a82c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg new file mode 100644 index 00000000..160cc352 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png new file mode 100644 index 00000000..5e1e2040 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg new file mode 100644 index 00000000..8efb5849 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple2GS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png new file mode 100644 index 00000000..be1e2c9f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg new file mode 100644 index 00000000..6098bf4a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Arcadia2001-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png new file mode 100644 index 00000000..959d6594 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg new file mode 100644 index 00000000..f4368033 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari2600-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png new file mode 100644 index 00000000..5c31fef3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg new file mode 100644 index 00000000..a712367a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari5200-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png new file mode 100644 index 00000000..65375c8e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg new file mode 100644 index 00000000..6726b3db --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari7800-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png new file mode 100644 index 00000000..583ca5fa Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg new file mode 100644 index 00000000..d6f0c255 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariJaguar-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png new file mode 100644 index 00000000..638665ff Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg new file mode 100644 index 00000000..b789292b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariLynxBezel-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png new file mode 100644 index 00000000..9107dd52 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg new file mode 100644 index 00000000..9057c4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariST-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png new file mode 100644 index 00000000..cf139e04 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg new file mode 100644 index 00000000..8cb18072 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariSuperCharger-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png new file mode 100644 index 00000000..63c20cc6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg new file mode 100644 index 00000000..b6480d70 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariXE-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png new file mode 100644 index 00000000..cf28927a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg new file mode 100644 index 00000000..bfacc48e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BallyAstrocade-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png new file mode 100644 index 00000000..df6aeac1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg new file mode 100644 index 00000000..40c5fa65 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiPlaydia-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png new file mode 100644 index 00000000..50bc21b5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg new file mode 100644 index 00000000..79126e63 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiSwanCrystal-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png new file mode 100644 index 00000000..7e8dc631 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg new file mode 100644 index 00000000..b16b24f6 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiWonderSwan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png new file mode 100644 index 00000000..632f1fce Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg new file mode 100644 index 00000000..708f28df --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiWonderSwanColor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png new file mode 100644 index 00000000..08c40d03 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg new file mode 100644 index 00000000..d5f1718b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BigFishGames-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png new file mode 100644 index 00000000..d41178f5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg new file mode 100644 index 00000000..4ee4537e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CDTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png new file mode 100644 index 00000000..f461c72f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg new file mode 100644 index 00000000..b87e9e8b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CamputersLynx-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png new file mode 100644 index 00000000..274c9497 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg new file mode 100644 index 00000000..dc0d40f1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png new file mode 100644 index 00000000..b2e91b93 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg new file mode 100644 index 00000000..c240d3c0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png new file mode 100644 index 00000000..0c393b2f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg new file mode 100644 index 00000000..e37c71b2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png new file mode 100644 index 00000000..5131e854 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg new file mode 100644 index 00000000..1003b412 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomPowerSystemChnager-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png new file mode 100644 index 00000000..02271684 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg new file mode 100644 index 00000000..c3edfe58 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CasioPV1000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png new file mode 100644 index 00000000..39877503 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg new file mode 100644 index 00000000..74d71c40 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CasioPV1000b-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png new file mode 100644 index 00000000..668c949b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg new file mode 100644 index 00000000..727b3efc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Cave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png new file mode 100644 index 00000000..afffe758 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg new file mode 100644 index 00000000..d984bba9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ColecoAdam-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png new file mode 100644 index 00000000..dec84782 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg new file mode 100644 index 00000000..b1b61c1f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ColecoVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png new file mode 100644 index 00000000..b3e0e513 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg new file mode 100644 index 00000000..d214f0a8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore16-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png new file mode 100644 index 00000000..6d9385dd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg new file mode 100644 index 00000000..26d00a89 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore16Plus4-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png new file mode 100644 index 00000000..a9838676 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg new file mode 100644 index 00000000..56e08a50 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png new file mode 100644 index 00000000..ffa4bf30 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg new file mode 100644 index 00000000..98a0d730 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CommodoreMAX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png new file mode 100644 index 00000000..850e9964 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg new file mode 100644 index 00000000..c0d22b46 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CommodoreVIC20-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png new file mode 100644 index 00000000..364fcfd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg new file mode 100644 index 00000000..1f824c54 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Daphne-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png new file mode 100644 index 00000000..1f509906 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg new file mode 100644 index 00000000..890cfc24 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = DataEastClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png new file mode 100644 index 00000000..c32fd278 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg new file mode 100644 index 00000000..952abcfe --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Dice-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png new file mode 100644 index 00000000..507365d6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg new file mode 100644 index 00000000..5acf0c04 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Dragon64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png new file mode 100644 index 00000000..6cea9aea Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg new file mode 100644 index 00000000..9195417b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = EG2000ColourGenie-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png new file mode 100644 index 00000000..b74cb902 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg new file mode 100644 index 00000000..3e846788 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ElektronikaBK-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png new file mode 100644 index 00000000..164201a6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg new file mode 100644 index 00000000..461cceb0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = EpochGamePocketComputer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png new file mode 100644 index 00000000..646ea280 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg new file mode 100644 index 00000000..24a5c9b4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ExamuExBoard-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png new file mode 100644 index 00000000..ca55aaaa Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg new file mode 100644 index 00000000..50a59a60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ExidySorcerer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png new file mode 100644 index 00000000..694391db Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg new file mode 100644 index 00000000..c61bf24d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FairchildChannelF-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png new file mode 100644 index 00000000..e18af2f5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg new file mode 100644 index 00000000..08c7c932 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FightCade-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png new file mode 100644 index 00000000..049a5b3b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg new file mode 100644 index 00000000..21879caa --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FujitsuFMTownsMarty-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png new file mode 100644 index 00000000..f2904fa4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg new file mode 100644 index 00000000..5a7c610f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FuntechSuperAcan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png new file mode 100644 index 00000000..4d6deb89 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg new file mode 100644 index 00000000..81d0c8b8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GP32-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png new file mode 100644 index 00000000..598bde10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg new file mode 100644 index 00000000..cdb6fe6e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png new file mode 100644 index 00000000..6cfddd59 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg new file mode 100644 index 00000000..920785d1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GogCom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png new file mode 100644 index 00000000..f87dd65e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg new file mode 100644 index 00000000..80a409da --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = HBMame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png new file mode 100644 index 00000000..93456ad2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg new file mode 100644 index 00000000..04b54153 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IBM-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png new file mode 100644 index 00000000..09dba760 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg new file mode 100644 index 00000000..7c40f4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IGSPolygameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png new file mode 100644 index 00000000..a4f41bae Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg new file mode 100644 index 00000000..ddf1a84c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IntertronVC4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png new file mode 100644 index 00000000..f025a9f9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg new file mode 100644 index 00000000..93028605 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IremClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png new file mode 100644 index 00000000..24014efd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg new file mode 100644 index 00000000..7b3d1d95 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = JupiterAce-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png new file mode 100644 index 00000000..f9d46ba2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg new file mode 100644 index 00000000..d4726306 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiEAmusement-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png new file mode 100644 index 00000000..507ea721 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg new file mode 100644 index 00000000..fa29266f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiGX400-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png new file mode 100644 index 00000000..dcaff28f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg new file mode 100644 index 00000000..b2d8c027 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiRetro-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png new file mode 100644 index 00000000..85f274dd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg new file mode 100644 index 00000000..54eb259b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = LIVIV-PC01-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png new file mode 100644 index 00000000..a37dcfb6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg new file mode 100644 index 00000000..cce2438a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Loopy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png new file mode 100644 index 00000000..d994b8f4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg new file mode 100644 index 00000000..d1be7c18 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MGTSamCoupe-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png new file mode 100644 index 00000000..f76f1e10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg new file mode 100644 index 00000000..21222b0f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MagnavoxOdyssey-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png new file mode 100644 index 00000000..33e553bf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg new file mode 100644 index 00000000..4fb6c796 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MagnavoxOdyssey2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png new file mode 100644 index 00000000..0efed38c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg new file mode 100644 index 00000000..12fbc46b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Mame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png new file mode 100644 index 00000000..a60540d2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg new file mode 100644 index 00000000..257f1606 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelAquarius-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png new file mode 100644 index 00000000..338281a0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg new file mode 100644 index 00000000..88fa5e12 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelInteliVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png new file mode 100644 index 00000000..37f609d3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg new file mode 100644 index 00000000..fd9f1c28 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelIntelliVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png new file mode 100644 index 00000000..5487e37e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg new file mode 100644 index 00000000..65bf3e45 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MegaDuck-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png new file mode 100644 index 00000000..010f3c26 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg new file mode 100644 index 00000000..3007a4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftDOS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png new file mode 100644 index 00000000..72ef152b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg new file mode 100644 index 00000000..78d6a1ae --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png new file mode 100644 index 00000000..faa503d4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg new file mode 100644 index 00000000..04aaa886 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png new file mode 100644 index 00000000..d176757c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg new file mode 100644 index 00000000..bcc3edad --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSXTurbo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png new file mode 100644 index 00000000..3afebe80 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg new file mode 100644 index 00000000..440f3072 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftXBox-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png new file mode 100644 index 00000000..2371dfba Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg new file mode 100644 index 00000000..d9e02523 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MidwayTUnit-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png new file mode 100644 index 00000000..33d80763 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg new file mode 100644 index 00000000..b701889d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MidwayWolfUnit-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png new file mode 100644 index 00000000..a2c0cb65 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg new file mode 100644 index 00000000..a9c4438e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Mugen-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png new file mode 100644 index 00000000..701d4ff9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg new file mode 100644 index 00000000..e32c5bf1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPC8801-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png new file mode 100644 index 00000000..6f72aeda Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg new file mode 100644 index 00000000..c167a0de --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPC9801-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png new file mode 100644 index 00000000..4b0cc4e9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg new file mode 100644 index 00000000..b15bb4ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCEngine-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png new file mode 100644 index 00000000..a637c01d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg new file mode 100644 index 00000000..f43c0150 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCEngineCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png new file mode 100644 index 00000000..53153cd0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg new file mode 100644 index 00000000..4b164a8f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCFX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png new file mode 100644 index 00000000..516ac123 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg new file mode 100644 index 00000000..21d5b207 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECSuperGrafX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png new file mode 100644 index 00000000..475f1349 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg new file mode 100644 index 00000000..e6680dea --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Namco-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png new file mode 100644 index 00000000..96d6358e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg new file mode 100644 index 00000000..bc5145f5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NamcoGalaga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png new file mode 100644 index 00000000..02d29a8b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg new file mode 100644 index 00000000..046eccde --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NamcoSystem22-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png new file mode 100644 index 00000000..124de58f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg new file mode 100644 index 00000000..f3edddb8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Naomi-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png new file mode 100644 index 00000000..8be0f97d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg new file mode 100644 index 00000000..d7a8898a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Naomi2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png new file mode 100644 index 00000000..128ce59d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg new file mode 100644 index 00000000..03971df8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecCoreGrafX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png new file mode 100644 index 00000000..22cc31f8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg new file mode 100644 index 00000000..aad1cbfd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecCoreGrafX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png new file mode 100644 index 00000000..5019528c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg new file mode 100644 index 00000000..814deac0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboDuo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png new file mode 100644 index 00000000..c60ea339 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg new file mode 100644 index 00000000..a9b4c241 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafX16-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png new file mode 100644 index 00000000..f120fc92 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg new file mode 100644 index 00000000..40107b23 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafXCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png new file mode 100644 index 00000000..dcdec2b1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg new file mode 100644 index 00000000..1afb3df7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafx16b-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png new file mode 100644 index 00000000..971852f6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg new file mode 100644 index 00000000..9782aeb2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoArcadeSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png new file mode 100644 index 00000000..fd7db940 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg new file mode 100644 index 00000000..79ce8d5c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoEntertainmentSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png new file mode 100644 index 00000000..400717e5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg new file mode 100644 index 00000000..35587415 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamicomDiskSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png new file mode 100644 index 00000000..ad4ad605 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg new file mode 100644 index 00000000..33aa3207 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamicomFamily-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png new file mode 100644 index 00000000..f071b566 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg new file mode 100644 index 00000000..2774be5f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamilyComputer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png new file mode 100644 index 00000000..60ddf839 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg new file mode 100644 index 00000000..0e7f515e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png new file mode 100644 index 00000000..7c0e7f73 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg new file mode 100644 index 00000000..6ea4363e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorBleu-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png new file mode 100644 index 00000000..2497fcd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg new file mode 100644 index 00000000..04eba81b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorGris-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png new file mode 100644 index 00000000..7ab483b2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg new file mode 100644 index 00000000..5b42f04e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorJaune-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png new file mode 100644 index 00000000..f5baf3ac Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg new file mode 100644 index 00000000..59095b7b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorNoir-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png new file mode 100644 index 00000000..bac0528b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg new file mode 100644 index 00000000..1c7ad669 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorRouge-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png new file mode 100644 index 00000000..78be6809 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg new file mode 100644 index 00000000..5cf70fe2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorVert-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png new file mode 100644 index 00000000..15f19ff9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg new file mode 100644 index 00000000..265f2547 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameCube-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png new file mode 100644 index 00000000..6f1dfe21 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg new file mode 100644 index 00000000..2e18127c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoN64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png new file mode 100644 index 00000000..7acc1ec8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg new file mode 100644 index 00000000..25126fa0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoPokemonMini-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png new file mode 100644 index 00000000..74f9a621 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg new file mode 100644 index 00000000..af1524d2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSNES-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png new file mode 100644 index 00000000..ba91677f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg new file mode 100644 index 00000000..37c842c5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSatellaview-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png new file mode 100644 index 00000000..05622478 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg new file mode 100644 index 00000000..213af2f4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSuperFamicom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png new file mode 100644 index 00000000..ee006895 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg new file mode 100644 index 00000000..cfd48a75 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSuperNintendo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png new file mode 100644 index 00000000..bfb98cd6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg new file mode 100644 index 00000000..a8b39ae4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoVirtualBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png new file mode 100644 index 00000000..c9a309ec Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg new file mode 100644 index 00000000..e8b5d4e5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = OpenBor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png new file mode 100644 index 00000000..f829b614 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg new file mode 100644 index 00000000..bd78bfe1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Oric-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png new file mode 100644 index 00000000..62a32ec8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg new file mode 100644 index 00000000..cc849369 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Origin-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png new file mode 100644 index 00000000..3e40cd58 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg new file mode 100644 index 00000000..62085483 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = OthelloMultivision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png new file mode 100644 index 00000000..789398d7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg new file mode 100644 index 00000000..2c0dce0c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Panasonic-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png new file mode 100644 index 00000000..ac9039b7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg new file mode 100644 index 00000000..67285750 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Pegasus-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png new file mode 100644 index 00000000..b2e98f10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg new file mode 100644 index 00000000..1d7f6234 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PhilipsVG5000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png new file mode 100644 index 00000000..b5d6ef21 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg new file mode 100644 index 00000000..e958ae58 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PioneerPalcomLaserDisc-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png new file mode 100644 index 00000000..9596ed64 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg new file mode 100644 index 00000000..28058513 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PopCap-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png new file mode 100644 index 00000000..2d2ab94d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg new file mode 100644 index 00000000..e9dbde60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Psikyo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png new file mode 100644 index 00000000..eca79012 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg new file mode 100644 index 00000000..64947b2b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Psikyob-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png new file mode 100644 index 00000000..cda07c49 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg new file mode 100644 index 00000000..7da60b16 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = RCAStudio2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png new file mode 100644 index 00000000..274ceade Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg new file mode 100644 index 00000000..ff42488f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = RockOla-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png new file mode 100644 index 00000000..03cc5d49 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg new file mode 100644 index 00000000..2ad6145d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png new file mode 100644 index 00000000..718f63b5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg new file mode 100644 index 00000000..dbe0ac26 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKHyperNeoGeo64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png new file mode 100644 index 00000000..73216757 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg new file mode 100644 index 00000000..de65e094 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png new file mode 100644 index 00000000..08195c31 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg new file mode 100644 index 00000000..fca23850 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png new file mode 100644 index 00000000..554c80cf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg new file mode 100644 index 00000000..09b55a66 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoMVS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png new file mode 100644 index 00000000..d66aef4c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg new file mode 100644 index 00000000..66b307d2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPlaymore-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png new file mode 100644 index 00000000..37f00ccf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg new file mode 100644 index 00000000..ef7770e7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocket-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png new file mode 100644 index 00000000..7aea2f35 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg new file mode 100644 index 00000000..bc8b16e7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocketColor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png new file mode 100644 index 00000000..ca21f7d1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg new file mode 100644 index 00000000..4eb6ddd0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocketColorB-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png new file mode 100644 index 00000000..a546ba64 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg new file mode 100644 index 00000000..421f14d1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png new file mode 100644 index 00000000..d6bf3751 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg new file mode 100644 index 00000000..76c0509c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SammyAtomiswave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png new file mode 100644 index 00000000..1e71fa68 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg new file mode 100644 index 00000000..ae103c17 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SammyAtomiswaveb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png new file mode 100644 index 00000000..d2df3a3a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg new file mode 100644 index 00000000..866e2682 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ScummVM-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png new file mode 100644 index 00000000..11a551e9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg new file mode 100644 index 00000000..2324729a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Sega32X-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png new file mode 100644 index 00000000..6db32c47 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg new file mode 100644 index 00000000..ca7a59c2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaAM2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png new file mode 100644 index 00000000..2e0273cf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg new file mode 100644 index 00000000..deeb2b0c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaAM3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png new file mode 100644 index 00000000..bf5a9263 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg new file mode 100644 index 00000000..7471370f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png new file mode 100644 index 00000000..2cdbf30f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg new file mode 100644 index 00000000..8925c8e0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaDefault-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png new file mode 100644 index 00000000..2397497f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg new file mode 100644 index 00000000..c65608ca --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaDreamcast-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png new file mode 100644 index 00000000..b6d3b5db Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg new file mode 100644 index 00000000..bc2316e2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGameGear-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png new file mode 100644 index 00000000..96bfb4cd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg new file mode 100644 index 00000000..2c977951 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesis-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png new file mode 100644 index 00000000..dac7155b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg new file mode 100644 index 00000000..9555df11 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesis3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png new file mode 100644 index 00000000..fd565410 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg new file mode 100644 index 00000000..e5fa876a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesisCDx-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png new file mode 100644 index 00000000..0a378ac1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg new file mode 100644 index 00000000..52d991c1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaHikaru-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png new file mode 100644 index 00000000..465c9b8d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg new file mode 100644 index 00000000..3ea169b1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMasterSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png new file mode 100644 index 00000000..ba9e01f7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg new file mode 100644 index 00000000..f71e00c2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMegaCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png new file mode 100644 index 00000000..8141c081 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg new file mode 100644 index 00000000..af6474e0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMegadrive-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png new file mode 100644 index 00000000..650188c1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg new file mode 100644 index 00000000..f02d39d9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaNomad-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png new file mode 100644 index 00000000..ebd55739 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg new file mode 100644 index 00000000..352e61cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaPico-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png new file mode 100644 index 00000000..f4900fd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg new file mode 100644 index 00000000..0bed20f0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSC3000H-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png new file mode 100644 index 00000000..9000242b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg new file mode 100644 index 00000000..0baad73a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSG1000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png new file mode 100644 index 00000000..bb6aac25 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg new file mode 100644 index 00000000..23396861 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png new file mode 100644 index 00000000..4190c68c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg new file mode 100644 index 00000000..b081b1bd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSaturnEU-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png new file mode 100644 index 00000000..22229de7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg new file mode 100644 index 00000000..ee503a9a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSaturnJAP-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png new file mode 100644 index 00000000..3d329bdf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg new file mode 100644 index 00000000..4e58aeab --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaTriforce-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png new file mode 100644 index 00000000..40aa190c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg new file mode 100644 index 00000000..2df3c0ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaTriforceb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png new file mode 100644 index 00000000..1b0195c3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg new file mode 100644 index 00000000..d154b5ef --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png new file mode 100644 index 00000000..eef1dc39 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg new file mode 100644 index 00000000..402fb4e1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX68000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png new file mode 100644 index 00000000..b77c328d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg new file mode 100644 index 00000000..b26a94c3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX79000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png new file mode 100644 index 00000000..b3632c9a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg new file mode 100644 index 00000000..5bd8447d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SinclairZX81-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png new file mode 100644 index 00000000..e7ee3bd8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg new file mode 100644 index 00000000..7fff8c96 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SinclairZXSpectrum-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png new file mode 100644 index 00000000..6aee2249 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg new file mode 100644 index 00000000..b62f4b51 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SonyPlaystation-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png new file mode 100644 index 00000000..4017022a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg new file mode 100644 index 00000000..2eec8c13 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SordM5-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png new file mode 100644 index 00000000..891b79a6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg new file mode 100644 index 00000000..29d68854 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SpectraVideo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png new file mode 100644 index 00000000..ab906f18 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg new file mode 100644 index 00000000..5b7b9936 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperCassetteVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png new file mode 100644 index 00000000..0d7f1889 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg new file mode 100644 index 00000000..d0f7d0b6 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperGameBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png new file mode 100644 index 00000000..b3100eea Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg new file mode 100644 index 00000000..7879f3d3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png new file mode 100644 index 00000000..bd31a44b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg new file mode 100644 index 00000000..d0de6cf1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png new file mode 100644 index 00000000..e1a410b8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg new file mode 100644 index 00000000..52fcbb9f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoClassicsV2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png new file mode 100644 index 00000000..af4feb85 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg new file mode 100644 index 00000000..ba1f0fbb --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png new file mode 100644 index 00000000..3eb95916 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg new file mode 100644 index 00000000..84fa3e07 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png new file mode 100644 index 00000000..b472e984 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg new file mode 100644 index 00000000..4ed4dc60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX7-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png new file mode 100644 index 00000000..84d1ad54 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg new file mode 100644 index 00000000..2037c2e2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeXPlus-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png new file mode 100644 index 00000000..38f2a7e8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg new file mode 100644 index 00000000..13b0d7ed --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeXZero-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png new file mode 100644 index 00000000..ab0ab812 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg new file mode 100644 index 00000000..eb84455d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TandyTRS80-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png new file mode 100644 index 00000000..b6840020 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg new file mode 100644 index 00000000..de2d3995 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Techmos-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png new file mode 100644 index 00000000..bb46c80c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg new file mode 100644 index 00000000..6b245205 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TexasInstrumentTI994A-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png new file mode 100644 index 00000000..401d1153 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg new file mode 100644 index 00000000..0cceadb0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TheImaginationMachine-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png new file mode 100644 index 00000000..c2564e3d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg new file mode 100644 index 00000000..f1f522ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TigerGameCom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png new file mode 100644 index 00000000..0b86d2d9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg new file mode 100644 index 00000000..1309668d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Toaplan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png new file mode 100644 index 00000000..95cd80cb Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg new file mode 100644 index 00000000..116a0f6d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TomyTutor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png new file mode 100644 index 00000000..b98a937a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg new file mode 100644 index 00000000..367a8974 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TouhouProject-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png new file mode 100644 index 00000000..1010469e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg new file mode 100644 index 00000000..fd3135c4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vector06C-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png new file mode 100644 index 00000000..38ea98e1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg new file mode 100644 index 00000000..cd3958df --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vectrex-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png new file mode 100644 index 00000000..92c2086f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg new file mode 100644 index 00000000..f11685fc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vectrexb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png new file mode 100644 index 00000000..e9b4157a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg new file mode 100644 index 00000000..d1f59332 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vierge-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png new file mode 100644 index 00000000..c87ad050 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg new file mode 100644 index 00000000..9ccca62c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ViergeVertical-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png new file mode 100644 index 00000000..175519fe Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg new file mode 100644 index 00000000..fd03fca7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = WataraSupervision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png new file mode 100644 index 00000000..b3302328 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg new file mode 100644 index 00000000..c00910aa --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Zinc-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png new file mode 100644 index 00000000..076e74f1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg new file mode 100644 index 00000000..cc298228 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png new file mode 100644 index 00000000..f701164c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg new file mode 100644 index 00000000..3f69cec7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png new file mode 100644 index 00000000..ad208211 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg new file mode 100644 index 00000000..a766c4d8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png new file mode 100644 index 00000000..4d2c9d7d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg new file mode 100644 index 00000000..3ab7a4ff --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Capcom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png new file mode 100644 index 00000000..898589af Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg new file mode 100644 index 00000000..ad73c1a5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Cave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png new file mode 100644 index 00000000..938215e5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg new file mode 100644 index 00000000..e647bf0f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-IGSPolygameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png new file mode 100644 index 00000000..23d8b1d1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg new file mode 100644 index 00000000..07abf16a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-KonamiGX4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png new file mode 100644 index 00000000..bfc4b95e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg new file mode 100644 index 00000000..4ee748a3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-MameShmup-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png new file mode 100644 index 00000000..f27c5cf8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg new file mode 100644 index 00000000..558cb1cd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-NamcoGalaga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png new file mode 100644 index 00000000..46100351 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg new file mode 100644 index 00000000..ec70243a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Psikyo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png new file mode 100644 index 00000000..ebc9143f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg new file mode 100644 index 00000000..39ccb0bc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-SegaSTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png new file mode 100644 index 00000000..8fd56ca6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg new file mode 100644 index 00000000..0fadf5ed --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-TaitoClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png new file mode 100644 index 00000000..e58bc7d6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg new file mode 100644 index 00000000..543a9b6f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Toaplan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png new file mode 100644 index 00000000..40e1ef50 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/pegasus/3DO.cfg b/emu-configs/retroarch/borders/pegasus/3DO.cfg new file mode 100644 index 00000000..31647b5c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/3DO.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = 3do.png diff --git a/emu-configs/retroarch/borders/pegasus/3do.png b/emu-configs/retroarch/borders/pegasus/3do.png new file mode 100644 index 00000000..562e89f4 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/3do.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ChannelF.cfg b/emu-configs/retroarch/borders/pegasus/ChannelF.cfg new file mode 100644 index 00000000..3b498b7b --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ChannelF.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = channelf.png diff --git a/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg b/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg new file mode 100644 index 00000000..fe679110 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = colecovision.png diff --git a/emu-configs/retroarch/borders/pegasus/GX4000.cfg b/emu-configs/retroarch/borders/pegasus/GX4000.cfg new file mode 100644 index 00000000..86a4adb3 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/GX4000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gx4000.png diff --git a/emu-configs/retroarch/borders/pegasus/Intellivision.cfg b/emu-configs/retroarch/borders/pegasus/Intellivision.cfg new file mode 100644 index 00000000..02ca87de --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Intellivision.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = intellivision.png diff --git a/emu-configs/retroarch/borders/pegasus/MSX.cfg b/emu-configs/retroarch/borders/pegasus/MSX.cfg new file mode 100644 index 00000000..12ca37fc --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MSX.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = msx.png diff --git a/emu-configs/retroarch/borders/pegasus/MSX2.cfg b/emu-configs/retroarch/borders/pegasus/MSX2.cfg new file mode 100644 index 00000000..f083a3f4 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MSX2.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = msx2.png diff --git a/emu-configs/retroarch/borders/pegasus/MarkIII.cfg b/emu-configs/retroarch/borders/pegasus/MarkIII.cfg new file mode 100644 index 00000000..b62cf840 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MarkIII.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = markIII.png diff --git a/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg b/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg new file mode 100644 index 00000000..e2614e41 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = odyssey2.png diff --git a/emu-configs/retroarch/borders/pegasus/ScummVM.cfg b/emu-configs/retroarch/borders/pegasus/ScummVM.cfg new file mode 100644 index 00000000..404ed6ee --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ScummVM.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = scummvm.png diff --git a/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg b/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg new file mode 100644 index 00000000..b603f558 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = supergrafx.png diff --git a/emu-configs/retroarch/borders/pegasus/X1.cfg b/emu-configs/retroarch/borders/pegasus/X1.cfg new file mode 100644 index 00000000..5fa7e293 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/X1.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = x1.png diff --git a/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg b/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg new file mode 100644 index 00000000..5618a149 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = amstradcpc.png diff --git a/emu-configs/retroarch/borders/pegasus/amstradcpc.png b/emu-configs/retroarch/borders/pegasus/amstradcpc.png new file mode 100644 index 00000000..251bdc68 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/amstradcpc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atari800.cfg b/emu-configs/retroarch/borders/pegasus/atari800.cfg new file mode 100644 index 00000000..c16d5c8c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atari800.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atari800.png diff --git a/emu-configs/retroarch/borders/pegasus/atari800.png b/emu-configs/retroarch/borders/pegasus/atari800.png new file mode 100644 index 00000000..edfaff21 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atari800.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg b/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg new file mode 100644 index 00000000..37938b3d --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atarijaguar.png diff --git a/emu-configs/retroarch/borders/pegasus/atarijaguar.png b/emu-configs/retroarch/borders/pegasus/atarijaguar.png new file mode 100644 index 00000000..e5991127 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atarijaguar.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atarist.cfg b/emu-configs/retroarch/borders/pegasus/atarist.cfg new file mode 100644 index 00000000..a4312025 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atarist.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atarist.png diff --git a/emu-configs/retroarch/borders/pegasus/atarist.png b/emu-configs/retroarch/borders/pegasus/atarist.png new file mode 100644 index 00000000..557d057b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atarist.png differ diff --git a/emu-configs/retroarch/borders/pegasus/channelf.png b/emu-configs/retroarch/borders/pegasus/channelf.png new file mode 100644 index 00000000..fd06f0ac Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/channelf.png differ diff --git a/emu-configs/retroarch/borders/pegasus/colecovision.png b/emu-configs/retroarch/borders/pegasus/colecovision.png new file mode 100644 index 00000000..ca8222e0 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/colecovision.png differ diff --git a/emu-configs/retroarch/borders/pegasus/fmtowns.cfg b/emu-configs/retroarch/borders/pegasus/fmtowns.cfg new file mode 100644 index 00000000..52691471 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/fmtowns.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = fmtowns.png diff --git a/emu-configs/retroarch/borders/pegasus/fmtowns.png b/emu-configs/retroarch/borders/pegasus/fmtowns.png new file mode 100644 index 00000000..ee6e467b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/fmtowns.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gx4000.png b/emu-configs/retroarch/borders/pegasus/gx4000.png new file mode 100644 index 00000000..1cd61844 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gx4000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/intellivision.png b/emu-configs/retroarch/borders/pegasus/intellivision.png new file mode 100644 index 00000000..d88ac07c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/intellivision.png differ diff --git a/emu-configs/retroarch/borders/pegasus/markIII.png b/emu-configs/retroarch/borders/pegasus/markIII.png new file mode 100644 index 00000000..d43cd316 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/markIII.png differ diff --git a/emu-configs/retroarch/borders/pegasus/msx.png b/emu-configs/retroarch/borders/pegasus/msx.png new file mode 100644 index 00000000..7fd6f670 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/msx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/msx2.png b/emu-configs/retroarch/borders/pegasus/msx2.png new file mode 100644 index 00000000..c3f6b421 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/msx2.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeo.cfg b/emu-configs/retroarch/borders/pegasus/neogeo.cfg new file mode 100644 index 00000000..65408505 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/neogeo.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = neogeo.png diff --git a/emu-configs/retroarch/borders/pegasus/neogeo.png b/emu-configs/retroarch/borders/pegasus/neogeo.png new file mode 100644 index 00000000..aa65c06a Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeo.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeocd.cfg b/emu-configs/retroarch/borders/pegasus/neogeocd.cfg new file mode 100644 index 00000000..7dd3c0c2 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/neogeocd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = neogeocd.png diff --git a/emu-configs/retroarch/borders/pegasus/neogeocd.png b/emu-configs/retroarch/borders/pegasus/neogeocd.png new file mode 100644 index 00000000..963e8ee0 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeocd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeopocket.png b/emu-configs/retroarch/borders/pegasus/neogeopocket.png new file mode 100644 index 00000000..10fcd677 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeopocket.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ngp.cfg b/emu-configs/retroarch/borders/pegasus/ngp.cfg new file mode 100644 index 00000000..f2ed0f55 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ngp.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = neogeopocket.png + +overlay0_full_screen = true + +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/pegasus/ngpc.cfg b/emu-configs/retroarch/borders/pegasus/ngpc.cfg new file mode 100644 index 00000000..f2ed0f55 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ngpc.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = neogeopocket.png + +overlay0_full_screen = true + +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/pegasus/odyssey2.png b/emu-configs/retroarch/borders/pegasus/odyssey2.png new file mode 100644 index 00000000..9c49308c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/odyssey2.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc.cfg b/emu-configs/retroarch/borders/pegasus/pc.cfg new file mode 100644 index 00000000..29bc7fe4 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc.png diff --git a/emu-configs/retroarch/borders/pegasus/pc.png b/emu-configs/retroarch/borders/pegasus/pc.png new file mode 100644 index 00000000..12cea3ec Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc88.cfg b/emu-configs/retroarch/borders/pegasus/pc88.cfg new file mode 100644 index 00000000..26098b1c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc88.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc88.png diff --git a/emu-configs/retroarch/borders/pegasus/pc88.png b/emu-configs/retroarch/borders/pegasus/pc88.png new file mode 100644 index 00000000..318d1cd9 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc88.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc98.cfg b/emu-configs/retroarch/borders/pegasus/pc98.cfg new file mode 100644 index 00000000..98950ebb --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc98.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc98.png diff --git a/emu-configs/retroarch/borders/pegasus/pc98.png b/emu-configs/retroarch/borders/pegasus/pc98.png new file mode 100644 index 00000000..7c359dcb Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc98.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcengine.cfg b/emu-configs/retroarch/borders/pegasus/pcengine.cfg new file mode 100644 index 00000000..eafde766 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcengine.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcengine.png diff --git a/emu-configs/retroarch/borders/pegasus/pcengine.png b/emu-configs/retroarch/borders/pegasus/pcengine.png new file mode 100644 index 00000000..e94679bc Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcengine.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg b/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg new file mode 100644 index 00000000..cf35c296 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcenginecd.png diff --git a/emu-configs/retroarch/borders/pegasus/pcenginecd.png b/emu-configs/retroarch/borders/pegasus/pcenginecd.png new file mode 100644 index 00000000..39069f5d Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcenginecd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcfx.cfg b/emu-configs/retroarch/borders/pegasus/pcfx.cfg new file mode 100644 index 00000000..8536af82 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcfx.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcfx.png diff --git a/emu-configs/retroarch/borders/pegasus/pcfx.png b/emu-configs/retroarch/borders/pegasus/pcfx.png new file mode 100644 index 00000000..e3632b2a Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcfx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/saturn.cfg b/emu-configs/retroarch/borders/pegasus/saturn.cfg new file mode 100644 index 00000000..063fdb27 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/saturn.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = saturn.png diff --git a/emu-configs/retroarch/borders/pegasus/saturn.png b/emu-configs/retroarch/borders/pegasus/saturn.png new file mode 100644 index 00000000..375b24e6 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/saturn.png differ diff --git a/emu-configs/retroarch/borders/pegasus/scummvm.png b/emu-configs/retroarch/borders/pegasus/scummvm.png new file mode 100644 index 00000000..6642e6ef Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/scummvm.png differ diff --git a/emu-configs/retroarch/borders/pegasus/segacd.cfg b/emu-configs/retroarch/borders/pegasus/segacd.cfg new file mode 100644 index 00000000..05707de1 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/segacd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = segacd.png diff --git a/emu-configs/retroarch/borders/pegasus/segacd.png b/emu-configs/retroarch/borders/pegasus/segacd.png new file mode 100644 index 00000000..c53780d6 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/segacd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/sg1000.cfg b/emu-configs/retroarch/borders/pegasus/sg1000.cfg new file mode 100644 index 00000000..72375cb7 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/sg1000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = sg1000.png diff --git a/emu-configs/retroarch/borders/pegasus/sg1000.png b/emu-configs/retroarch/borders/pegasus/sg1000.png new file mode 100644 index 00000000..c51136ce Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/sg1000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/sgb.cfg b/emu-configs/retroarch/borders/pegasus/sgb.cfg new file mode 100644 index 00000000..bca410f9 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/sgb.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = sgb.png diff --git a/emu-configs/retroarch/borders/pegasus/sgb.png b/emu-configs/retroarch/borders/pegasus/sgb.png new file mode 100644 index 00000000..cac80b6b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/sgb.png differ diff --git a/emu-configs/retroarch/borders/pegasus/supergrafx.png b/emu-configs/retroarch/borders/pegasus/supergrafx.png new file mode 100644 index 00000000..5bd5ab0f Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/supergrafx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/thomson.cfg b/emu-configs/retroarch/borders/pegasus/thomson.cfg new file mode 100644 index 00000000..19335607 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/thomson.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = thomson.png diff --git a/emu-configs/retroarch/borders/pegasus/thomson.png b/emu-configs/retroarch/borders/pegasus/thomson.png new file mode 100644 index 00000000..55210e3d Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/thomson.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ti99.cfg b/emu-configs/retroarch/borders/pegasus/ti99.cfg new file mode 100644 index 00000000..e084c7e1 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ti99.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = ti99.png diff --git a/emu-configs/retroarch/borders/pegasus/ti99.png b/emu-configs/retroarch/borders/pegasus/ti99.png new file mode 100644 index 00000000..e69e8992 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/ti99.png differ diff --git a/emu-configs/retroarch/borders/pegasus/wswanc.cfg b/emu-configs/retroarch/borders/pegasus/wswanc.cfg new file mode 100644 index 00000000..444be36a --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/wswanc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = wswanc.png diff --git a/emu-configs/retroarch/borders/pegasus/wswanc.png b/emu-configs/retroarch/borders/pegasus/wswanc.png new file mode 100644 index 00000000..3e401654 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/wswanc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/x1.png b/emu-configs/retroarch/borders/pegasus/x1.png new file mode 100644 index 00000000..16f610d4 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/x1.png differ diff --git a/emu-configs/retroarch/borders/pegasus/x68000.cfg b/emu-configs/retroarch/borders/pegasus/x68000.cfg new file mode 100644 index 00000000..11cf5418 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/x68000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = x68000.png diff --git a/emu-configs/retroarch/borders/pegasus/x68000.png b/emu-configs/retroarch/borders/pegasus/x68000.png new file mode 100644 index 00000000..01dfa7f2 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/x68000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg b/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg new file mode 100644 index 00000000..feb455bf --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = zxspectrum.png diff --git a/emu-configs/retroarch/borders/pegasus/zxspectrum.png b/emu-configs/retroarch/borders/pegasus/zxspectrum.png new file mode 100644 index 00000000..0dd36b7c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/zxspectrum.png differ diff --git a/emu-configs/retroarch/retroarch-core-options.cfg b/emu-configs/retroarch/retroarch-core-options.cfg index 6be315ae..06420de7 100644 --- a/emu-configs/retroarch/retroarch-core-options.cfg +++ b/emu-configs/retroarch/retroarch-core-options.cfg @@ -401,7 +401,7 @@ melonds_screen_gap = "0" melonds_screen_layout = "Top/Bottom" melonds_swapscreen_mode = "Toggle" melonds_threaded_renderer = "disabled" -melonds_touch_mode = "enabled" +melonds_touch_mode = "Touch" mgba_allow_opposing_directions = "no" mgba_audio_low_pass_filter = "disabled" mgba_audio_low_pass_range = "60" @@ -597,3 +597,4 @@ ppsspp_texture_scaling_level = "Off" ppsspp_texture_scaling_type = "xbrz" ppsspp_texture_shader = "Off" ppsspp_vertex_cache = "disabled" +swanstation_GPU_Renderer = "Vulkan" \ No newline at end of file diff --git a/emu-configs/retroarch/retroarch.cfg b/emu-configs/retroarch/retroarch.cfg index 85d2d8a6..2fc14c02 100644 --- a/emu-configs/retroarch/retroarch.cfg +++ b/emu-configs/retroarch/retroarch.cfg @@ -1,6 +1,6 @@ accessibility_enable = "false" accessibility_narrator_speech_speed = "5" -ai_service_enable = "true" +ai_service_enable = "false" ai_service_mode = "1" ai_service_pause = "false" ai_service_source_lang = "0" @@ -80,7 +80,7 @@ cheevos_visibility_account = "true" cheevos_visibility_mastery = "true" cheevos_visibility_summary = "1" cheevos_visibility_unlock = "true" -config_save_on_exit = "false" +config_save_on_exit = "true" content_database_path = "/app/share/libretro/database/rdb" content_favorites_directory = "default" content_favorites_path = "/var/config/retroarch/content_favorites.lpl" @@ -231,7 +231,7 @@ input_enable_hotkey = "ctrl" input_enable_hotkey_axis = "nul" input_enable_hotkey_btn = "nul" input_enable_hotkey_mbtn = "nul" -input_exit_emulator = "escape" +input_exit_emulator = "q" input_exit_emulator_axis = "nul" input_exit_emulator_btn = "nul" input_exit_emulator_mbtn = "nul" @@ -2719,7 +2719,7 @@ input_replay_slot_increase = "nul" input_replay_slot_increase_axis = "nul" input_replay_slot_increase_btn = "nul" input_replay_slot_increase_mbtn = "nul" -input_reset = "nul" +input_reset = "r" input_reset_axis = "nul" input_reset_btn = "nul" input_reset_mbtn = "nul" @@ -2995,7 +2995,7 @@ notification_show_screenshot_duration = "0" notification_show_screenshot_flash = "0" notification_show_set_initial_disk = "true" notification_show_when_menu_is_alive = "false" -overlay_directory = "/var/config/retroarch/borders" +overlay_directory = "/var/config/retroarch/overlays/borders" ozone_collapse_sidebar = "false" ozone_menu_color_theme = "1" ozone_scroll_content_metadata = "false" @@ -3090,8 +3090,8 @@ save_file_compression = "false" savefile_directory = "RETRODECKHOMEDIR/saves" savefiles_in_content_dir = "false" savestate_auto_index = "false" -savestate_auto_load = "true" -savestate_auto_save = "true" +savestate_auto_load = "false" +savestate_auto_save = "false" savestate_directory = "RETRODECKHOMEDIR/states" savestate_file_compression = "true" savestate_max_keep = "0" diff --git a/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini index f9931541..b4dba439 100644 --- a/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini +++ b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini @@ -26,5 +26,25 @@ useRichPresence=true [PadSettings] geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xb3\0\0\0\0\0\0\x4\xbf\0\0\x3\x7f\0\0\0\xb3\0\0\0\x1d\0\0\x4\xbf\0\0\x3\x7f\0\0\0\0\0\0\0\0\a\x80\0\0\0\xb3\0\0\0\x1d\0\0\x4\xbf\0\0\x3\x7f) +[Shortcuts] +game_window_exit_fullscreen=null +game_window_gw_frame_limit=Ctrl+Z +game_window_log_mark=Alt+L +game_window_mouse_lock=Ctrl+L +game_window_pause_play=Ctrl+P +game_window_restart=Ctrl+R +game_window_rsx_capture=Alt+C +game_window_savestate=null +game_window_screenshot=Ctrl+X +game_window_toggle_fullscreen=Alt+Return +game_window_toggle_recording=Ctrl+V +main_window_exit_fullscreen=null +main_window_pause=Ctrl+P +main_window_refresh=Ctrl+F5 +main_window_restart=Ctrl+R +main_window_start=Ctrl+E +main_window_stop=Ctrl+Q +main_window_toggle_fullscreen=Ctrl+Return + [main_window] -infoBoxEnabledWelcome=false +infoBoxEnabledWelcome=false \ No newline at end of file diff --git a/emu-configs/ryujinx/Config.json b/emu-configs/ryujinx/Config.json index 15cbf4e2..e58b6ead 100644 --- a/emu-configs/ryujinx/Config.json +++ b/emu-configs/ryujinx/Config.json @@ -1,14 +1,17 @@ { - "version": 42, + "version": 48, "enable_file_log": true, "backend_threading": "Auto", "res_scale": 1, "res_scale_custom": 1, "max_anisotropy": -1, "aspect_ratio": "Fixed16x9", + "anti_aliasing": "None", + "scaling_filter": "Bilinear", + "scaling_filter_level": 80, "graphics_shaders_dump_path": "", "logging_enable_debug": false, - "logging_enable_stub": true, + "logging_enable_stub": false, "logging_enable_info": true, "logging_enable_warn": true, "logging_enable_error": true, @@ -21,20 +24,21 @@ "system_region": "Europe", "system_time_zone": "UTC", "system_time_offset": 0, - "docked_mode": true, + "docked_mode": false, "enable_discord_integration": true, - "check_updates_on_start": true, - "show_confirm_exit": true, - "hide_cursor_on_idle": false, + "check_updates_on_start": false, + "show_confirm_exit": false, + "hide_cursor": 2, "enable_vsync": true, "enable_shader_cache": true, "enable_texture_recompression": false, "enable_macro_hle": true, + "enable_color_space_passthrough": false, "enable_ptc": true, "enable_internet_access": false, "enable_fs_integrity_checks": true, "fs_global_access_log_mode": 0, - "audio_backend": "SDL2", + "audio_backend": "OpenAl", "audio_volume": 1, "memory_manager_mode": "HostMappedUnsafe", "expand_ram": false, @@ -58,6 +62,21 @@ "game_dirs": [ "RETRODECKHOMEDIR/roms/switch" ], + "shown_file_types": { + "nsp": true, + "pfs0": true, + "xci": true, + "nca": true, + "nro": true, + "nso": true + }, + "window_startup": { + "window_size_width": 1280, + "window_size_height": 800, + "window_position_x": 0, + "window_position_y": 0, + "window_maximized": true + }, "language_code": "en_US", "enable_custom_theme": false, "custom_theme_path": "", @@ -67,12 +86,12 @@ "grid_size": 2, "application_sort": 0, "is_ascending_order": true, - "start_fullscreen": false, + "start_fullscreen": true, "show_console": true, "enable_keyboard": false, "enable_mouse": false, "hotkeys": { - "toggle_vsync": "Tab", + "toggle_vsync": "F1", "screenshot": "F8", "show_ui": "F4", "pause": "F5", @@ -104,12 +123,12 @@ "deadzone_right": 0, "range_left": 1, "range_right": 1, - "trigger_threshold": 0, + "trigger_threshold": 0.5, "motion": { "motion_backend": "GamepadDriver", "sensitivity": 100, "gyro_deadzone": 1, - "enable_motion": false + "enable_motion": true }, "rumble": { "strong_rumble": 1, @@ -133,18 +152,20 @@ "button_zr": "RightTrigger", "button_sl": "Unbound", "button_sr": "Unbound", - "button_x": "X", + "button_x": "Y", "button_b": "A", - "button_y": "Y", + "button_y": "X", "button_a": "B" }, "version": 1, "backend": "GamepadSDL2", "id": "0-f6790003-28de-0000-ff11-000001000000", - "controller_type": "JoyconPair", - "player_index": "Player1" + "controller_type": "Handheld", + "player_index": "Handheld" } ], "graphics_backend": "Vulkan", - "preferred_gpu": "0x1002_0x163F" -} \ No newline at end of file + "preferred_gpu": "0x1002_0x163F", + "multiplayer_lan_interface_id": "0", + "use_hypervisor": true +} diff --git a/emu-configs/yuzu/qt-config.ini b/emu-configs/yuzu/qt-config.ini index aca503df..a1e63a4d 100644 --- a/emu-configs/yuzu/qt-config.ini +++ b/emu-configs/yuzu/qt-config.ini @@ -1065,7 +1065,7 @@ Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1 Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq= +Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=Ctrl+P Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat\default=true @@ -1081,7 +1081,7 @@ Shortcuts\Main%20Window\Exit%20yuzu\Context=1 Shortcuts\Main%20Window\Exit%20yuzu\Context\default=true Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq= Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Exit%20yuzu\KeySeq=Ctrl+Esc +Shortcuts\Main%20Window\Exit%20yuzu\KeySeq=Ctrl+Q Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=false Shortcuts\Main%20Window\Exit%20yuzu\Repeat=false Shortcuts\Main%20Window\Exit%20yuzu\Repeat\default=true @@ -1105,7 +1105,7 @@ Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context=3 Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq= Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=Ctrl+M +Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=Alt+M Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq\default=false Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat=false Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat\default=true diff --git a/es-configs/es_find_rules.xml b/es-configs/es_find_rules.xml index 9179cb88..c35b67f6 100644 --- a/es-configs/es_find_rules.xml +++ b/es-configs/es_find_rules.xml @@ -15,16 +15,17 @@ RetroArch-Linux-x86_64.AppImage - /var/lib/flatpak/exports/bin/org.libretro.RetroArch - ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch ~/Applications/RetroArch-Linux*.AppImage + ~/.local/share/applications/RetroArch-Linux*.AppImage ~/.local/bin/RetroArch-Linux*.AppImage ~/bin/RetroArch-Linux*.AppImage + /var/lib/flatpak/exports/bin/org.libretro.RetroArch + ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch - + /app/share/libretro/cores ~/snap/retroarch/current/.config/retroarch/cores @@ -69,11 +70,12 @@ net.cebix.basilisk - /var/lib/flatpak/exports/bin/net.cebix.basilisk - ~/.local/share/flatpak/exports/bin/net.cebix.basilisk ~/Applications/BasiliskII*.AppImage + ~/.local/share/applications/BasiliskII*.AppImage ~/.local/bin/BasiliskII*.AppImage ~/bin/BasiliskII*.AppImage + /var/lib/flatpak/exports/bin/net.cebix.basilisk + ~/.local/share/flatpak/exports/bin/net.cebix.basilisk @@ -106,9 +108,11 @@ ~/Applications/Cemu*.AppImage + ~/.local/share/applications/Cemu*.AppImage ~/.local/bin/Cemu*.AppImage ~/bin/Cemu*.AppImage ~/Applications/Cemu/Cemu + ~/.local/share/applications/Cemu/Cemu ~/.local/bin/Cemu/Cemu ~/bin/Cemu/Cemu @@ -122,6 +126,10 @@ org.citra_emu.citra + ~/Applications/citra*.AppImage + ~/.local/share/applications/citra*.AppImage + ~/.local/bin/citra*.AppImage + ~/bin/citra*.AppImage /var/lib/flatpak/exports/bin/org.citra_emu.citra ~/.local/share/flatpak/exports/bin/org.citra_emu.citra @@ -133,10 +141,20 @@ ~/Applications/cpcemu/cpcemu + ~/.local/share/applications/cpcemu/cpcemu ~/.local/bin/cpcemu/cpcemu ~/bin/cpcemu/cpcemu + + + + ~/Applications/CSpect/CSpect.exe + ~/.local/share/applications/CSpect/CSpect.exe + ~/.local/bin/CSpect/CSpect.exe + ~/bin/CSpect/CSpect.exe + + @@ -155,11 +173,12 @@ org.DolphinEmu.dolphin-emu - /var/lib/flatpak/exports/bin/org.DolphinEmu.dolphin-emu - ~/.local/share/flatpak/exports/bin/org.DolphinEmu.dolphin-emu ~/Applications/Dolphin_Emulator*.AppImage + ~/.local/share/applications/Dolphin_Emulator*.AppImage ~/.local/bin/Dolphin_Emulator*.AppImage ~/bin/Dolphin_Emulator*.AppImage + /var/lib/flatpak/exports/bin/org.DolphinEmu.dolphin-emu + ~/.local/share/flatpak/exports/bin/org.DolphinEmu.dolphin-emu @@ -192,14 +211,16 @@ org.duckstation.DuckStation - /var/lib/flatpak/exports/bin/org.duckstation.DuckStation - ~/.local/share/flatpak/exports/bin/org.duckstation.DuckStation ~/Applications/duckstation-nogui*.AppImage + ~/.local/share/applications/duckstation-nogui*.AppImage ~/.local/bin/duckstation-nogui*.AppImage ~/bin/duckstation-nogui*.AppImage ~/Applications/duckstation-qt*.AppImage + ~/.local/share/applications/duckstation-qt*.AppImage ~/.local/bin/duckstation-qt*.AppImage ~/bin/duckstation-qt*.AppImage + /var/lib/flatpak/exports/bin/org.duckstation.DuckStation + ~/.local/share/flatpak/exports/bin/org.duckstation.DuckStation @@ -209,6 +230,7 @@ ~/Applications/easyrpg/easyrpg-player + ~/.local/share/applications/easyrpg/easyrpg-player ~/.local/bin/easyrpg/easyrpg-player ~/bin/easyrpg/easyrpg-player @@ -220,6 +242,7 @@ ~/Applications/fbneo/fbneo + ~/.local/share/applications/fbneo/fbneo ~/.local/bin/fbneo/fbneo ~/bin/fbneo/fbneo @@ -231,11 +254,12 @@ org.flycast.Flycast - /var/lib/flatpak/exports/bin/org.flycast.Flycast - ~/.local/share/flatpak/exports/bin/org.flycast.Flycast ~/Applications/flycast*.AppImage + ~/.local/share/applications/flycast*.AppImage ~/.local/bin/flycast*.AppImage ~/bin/flycast*.AppImage + /var/lib/flatpak/exports/bin/org.flycast.Flycast + ~/.local/share/flatpak/exports/bin/org.flycast.Flycast @@ -267,11 +291,12 @@ gargoyle - /var/lib/flatpak/exports/bin/io.github.garglk.Gargoyle - ~/.local/share/flatpak/exports/bin/io.github.garglk.Gargoyle ~/Applications/Gargoyle*.AppImage + ~/.local/share/applications/Gargoyle*.AppImage ~/.local/bin/Gargoyle*.AppImage ~/bin/Gargoyle*.AppImage + /var/lib/flatpak/exports/bin/io.github.garglk.Gargoyle + ~/.local/share/flatpak/exports/bin/io.github.garglk.Gargoyle @@ -281,6 +306,7 @@ ~/Applications/gearboy/gearboy + ~/.local/share/applications/gearboy/gearboy ~/.local/bin/gearboy/gearboy ~/bin/gearboy/gearboy @@ -289,6 +315,7 @@ ~/Applications/gopher2600/gopher2600_linux_amd64 + ~/.local/share/applications/gopher2600/gopher2600_linux_amd64 ~/.local/bin/gopher2600/gopher2600_linux_amd64 ~/bin/gopher2600/gopher2600_linux_amd64 @@ -310,6 +337,7 @@ ~/Applications/hypseus-singe/hypseus.bin + ~/.local/share/applications/hypseus-singe/hypseus.bin ~/.local/bin/hypseus-singe/hypseus.bin ~/bin/hypseus-singe/hypseus.bin @@ -321,6 +349,7 @@ ~/Applications/lightspark/lightspark + ~/.local/share/applications/lightspark/lightspark ~/.local/bin/lightspark/lightspark ~/bin/lightspark/lightspark @@ -332,6 +361,7 @@ ~/Applications/linapple/linapple + ~/.local/share/applications/linapple/linapple ~/.local/bin/linapple/linapple ~/bin/linapple/linapple @@ -377,11 +407,12 @@ io.mgba.mGBA - /var/lib/flatpak/exports/bin/io.mgba.mGBA - ~/.local/share/flatpak/exports/bin/io.mgba.mGBA ~/Applications/mGBA*.AppImage + ~/.local/share/applications/mGBA*.AppImage ~/.local/bin/mGBA*.AppImage ~/bin/mGBA*.AppImage + /var/lib/flatpak/exports/bin/io.mgba.mGBA + ~/.local/share/flatpak/exports/bin/io.mgba.mGBA @@ -422,6 +453,7 @@ ~/Applications/oricutron/Oricutron + ~/.local/share/applications/oricutron/Oricutron ~/.local/bin/oricutron/Oricutron ~/bin/oricutron/Oricutron @@ -455,8 +487,8 @@ pico8 - ~/retrodeck/bios/pico-8/pico8 ~/Applications/pico-8/pico8 + ~/.local/share/applications/pico-8/pico8 ~/.local/bin/pico-8/pico8 ~/bin/pico-8/pico8 @@ -464,11 +496,12 @@ - /var/lib/flatpak/exports/bin/org.purei.Play - ~/.local/share/flatpak/exports/bin/org.purei.Play ~/Applications/Play!*.AppImage + ~/.local/share/applications/Play!*.AppImage ~/.local/bin/Play!*.AppImage ~/bin/Play!*.AppImage + /var/lib/flatpak/exports/bin/org.purei.Play + ~/.local/share/flatpak/exports/bin/org.purei.Play @@ -508,6 +541,7 @@ ~/Applications/punes/punes + ~/.local/share/applications/punes/punes ~/.local/bin/punes/punes ~/bin/punes/punes @@ -519,6 +553,7 @@ ~/Applications/redream/redream + ~/.local/share/applications/redream/redream ~/.local/bin/redream/redream ~/bin/redream/redream @@ -530,11 +565,12 @@ com.github.Rosalie241.RMG - /var/lib/flatpak/exports/bin/com.github.Rosalie241.RMG - ~/.local/share/flatpak/exports/bin/com.github.Rosalie241.RMG ~/Applications/RMG*.AppImage + ~/.local/share/applications/RMG*.AppImage ~/.local/bin/RMG*.AppImage ~/bin/RMG*.AppImage + /var/lib/flatpak/exports/bin/com.github.Rosalie241.RMG + ~/.local/share/flatpak/exports/bin/com.github.Rosalie241.RMG @@ -545,11 +581,12 @@ net.rpcs3.RPCS3 - /var/lib/flatpak/exports/bin/net.rpcs3.RPCS3 - ~/.local/share/flatpak/exports/bin/net.rpcs3.RPCS3 ~/Applications/rpcs3*.AppImage + ~/.local/share/applications/rpcs3*.AppImage ~/.local/bin/rpcs3*.AppImage ~/bin/rpcs3*.AppImage + /var/lib/flatpak/exports/bin/net.rpcs3.RPCS3 + ~/.local/share/flatpak/exports/bin/net.rpcs3.RPCS3 @@ -559,6 +596,7 @@ ~/Applications/ruffle/ruffle + ~/.local/share/applications/ruffle/ruffle ~/.local/bin/ruffle/ruffle ~/bin/ruffle/ruffle @@ -566,19 +604,16 @@ - Ryujinx - Ryujinx.Ava + Ryujinx.sh org.ryujinx.Ryujinx /var/lib/flatpak/exports/bin/org.ryujinx.Ryujinx ~/.local/share/flatpak/exports/bin/org.ryujinx.Ryujinx - ~/Applications/publish/Ryujinx - ~/.local/bin/publish/Ryujinx - ~/bin/publish/Ryujinx - ~/Applications/publish/Ryujinx.Ava - ~/.local/bin/publish/Ryujinx.Ava - ~/bin/publish/Ryujinx.Ava + ~/Applications/publish/Ryujinx.sh + ~/.local/share/applications/publish/Ryujinx.sh + ~/.local/bin/publish/Ryujinx.sh + ~/bin/publish/Ryujinx.sh @@ -610,6 +645,7 @@ ~/Applications/sdl2trs/sdl2trs + ~/.local/share/applications/sdl2trs/sdl2trs ~/.local/bin/sdl2trs/sdl2trs ~/bin/sdl2trs/sdl2trs @@ -621,6 +657,7 @@ ~/Applications/SheepShaver*.AppImage + ~/.local/share/applications/SheepShaver*.AppImage ~/.local/bin/SheepShaver*.AppImage ~/bin/SheepShaver*.AppImage @@ -632,6 +669,7 @@ ~/Applications/simcoupe/simcoupe + ~/.local/share/applications/simcoupe/simcoupe ~/.local/bin/simcoupe/simcoupe ~/bin/simcoupe/simcoupe @@ -693,6 +731,7 @@ ~/Applications/Supermodel/supermodel + ~/.local/share/applications/Supermodel/supermodel ~/.local/bin/Supermodel/supermodel ~/bin/Supermodel/supermodel @@ -704,6 +743,7 @@ ~/Applications/dolphin-emu-triforce*.AppImage + ~/.local/share/applications/dolphin-emu-triforce*.AppImage ~/.local/bin/dolphin-emu-triforce*.AppImage ~/bin/dolphin-emu-triforce*.AppImage @@ -712,6 +752,7 @@ ~/Applications/tsugaru/Tsugaru_CUI + ~/.local/share/applications/tsugaru/Tsugaru_CUI ~/.local/bin/tsugaru/Tsugaru_CUI ~/bin/tsugaru/Tsugaru_CUI @@ -753,6 +794,7 @@ ~/Applications/Vita3K/Vita3K + ~/.local/share/applications/Vita3K/Vita3K ~/.local/bin/Vita3K/Vita3K ~/bin/Vita3K/Vita3K @@ -764,11 +806,12 @@ app.xemu.xemu - /var/lib/flatpak/exports/bin/app.xemu.xemu - ~/.local/share/flatpak/exports/bin/app.xemu.xemu ~/Applications/xemu*.AppImage + ~/.local/share/applications/xemu*.AppImage ~/.local/bin/xemu*.AppImage ~/bin/xemu*.AppImage + /var/lib/flatpak/exports/bin/app.xemu.xemu + ~/.local/share/flatpak/exports/bin/app.xemu.xemu @@ -778,6 +821,7 @@ ~/Applications/xroar/xroar + ~/.local/share/applications/xroar/xroar ~/.local/bin/xroar/xroar ~/bin/xroar/xroar @@ -789,11 +833,30 @@ org.yuzu_emu.yuzu - /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu - ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu ~/Applications/yuzu*.AppImage + ~/.local/share/applications/yuzu*.AppImage ~/.local/bin/yuzu*.AppImage ~/bin/yuzu*.AppImage + /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu + ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu - \ No newline at end of file + + + + ~/retrodeck/customs/yuzu/yuzu*.AppImage + + + + + + zesarux + + + ~/Applications/ZEsarUX/zesarux + ~/.local/share/applications/ZEsarUX/zesarux + ~/.local/bin/ZEsarUX/zesarux + ~/bin/ZEsarUX/zesarux + + + diff --git a/es-configs/es_settings.xml b/es-configs/es_settings.xml index fce3c315..93de24b3 100644 --- a/es-configs/es_settings.xml +++ b/es-configs/es_settings.xml @@ -25,6 +25,7 @@ + @@ -51,6 +52,7 @@ + @@ -73,6 +75,7 @@ + @@ -80,6 +83,7 @@ + @@ -104,11 +108,10 @@ - + - - + @@ -117,14 +120,20 @@ + + + + + + - + @@ -135,10 +144,11 @@ - - + + - \ No newline at end of file + + \ No newline at end of file diff --git a/es-configs/es_systems.xml b/es-configs/es_systems.xml index d24d2e2e..b9da6c2e 100644 --- a/es-configs/es_systems.xml +++ b/es-configs/es_systems.xml @@ -506,6 +506,18 @@ easyrpg easyrpg + + emulators + Emulators + %ROMPATH%/emulators + .AppImage .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + pcwindows + emulators + famicom Nintendo Family Computer @@ -582,6 +594,17 @@ fmtowns fmtowns +--> + gameandwatch @@ -614,6 +637,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM% + gamegear gamegear @@ -699,6 +723,17 @@ genesis genesis + gx4000 Amstrad GX4000 @@ -750,6 +785,17 @@ lcdgames, gameandwatch lcdgames + lutro Lutro Game Engine @@ -999,7 +1045,10 @@ .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM% + + + + n64 n64 @@ -1178,7 +1227,7 @@ %ROMPATH%/pc98 .2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .m3u .M3U .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.so %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM% pc98 pc98 @@ -1239,8 +1288,9 @@ ports Ports %ROMPATH%/ports - .desktop .sh - %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + .AppImage .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" pc, pcwindows ports @@ -1248,10 +1298,11 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 + %EMULATOR_PCSX2% -batch %ROM% .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG - %EMULATOR_PCSX2% -batch %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% - + ps2 ps2 @@ -1265,6 +1316,7 @@ ps3 ps3 + psp Sony PlayStation Portable %ROMPATH%/psp .elf .ELF .iso .ISO .cso .CSO .prx .PRX .pbp .PBP .7z .7Z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ppsspp_libretro.so %ROM% %EMULATOR_PPSSPP% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ppsspp_libretro.so %ROM% psp psp @@ -1300,10 +1353,10 @@ Sony PlayStation %ROMPATH%/psx .bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .minipsf .MINIPSF .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/swanstation_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.so %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/swanstation_libretro.so %ROM% %EMULATOR_DUCKSTATION% -batch %ROM% psx @@ -1398,6 +1451,17 @@ scummvm scummvm + sega32x Sega Mega Drive 32X @@ -1592,7 +1656,8 @@ %ROMPATH%/switch .nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI %INJECT%=%BASENAME%.esprefix %EMULATOR_YUZU% -f -g %ROM% - + %EMULATOR_RYUJINX% %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_YUZU-CUSTOM% -f -g %ROM% switch switch @@ -1729,6 +1794,17 @@ virtualboy virtualboy + x68000 x68000 @@ -1820,15 +1895,17 @@ xbox xbox + zxspectrum Sinclair ZX Spectrum @@ -1859,13 +1948,4 @@ zxspectrum zxspectrum - - tools - RetroDECK Tools - /app/tools - .sh .SH - bash %ROM% - tools - tools - \ No newline at end of file diff --git a/es-configs/tools-gamelist.xml b/es-configs/tools-gamelist.xml deleted file mode 100644 index c1a8f052..00000000 --- a/es-configs/tools-gamelist.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - ./configurator.sh - RetroDECK Configurator - Change settings, move folders and more! - true - true - - \ No newline at end of file diff --git a/flathub.json b/flathub.json deleted file mode 100644 index 0b69b95e..00000000 --- a/flathub.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "only-arches": ["x86_64"] -} \ No newline at end of file diff --git a/flathub.yml b/flathub.yml deleted file mode 100644 index 0155923d..00000000 --- a/flathub.yml +++ /dev/null @@ -1,45 +0,0 @@ -app-id: net.retrodeck.retrodeck -runtime: org.kde.Platform -runtime-version: 5.15-21.08 -#runtime-version: 6.3 # bumped because of pcsx2-qt -sdk: org.kde.Sdk -sdk-extensions: - - org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3 - #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else -base: io.qt.qtwebengine.BaseApp # Needed for Yuzu -base-version: 5.15-21.08 # Needed for Yuzu -command: retrodeck.sh - -finish-args: - - --socket=x11 - #- --socket=wayland - - --socket=pulseaudio - - --share=ipc - - --share=network - - --device=all - - --filesystem=home # Needed to be able to relocate / remove / create symlink at ~/retrodeck - - --filesystem=/run/media - - --filesystem=/media - - --allow=multiarch - - --talk-name=org.freedesktop.ScreenSaver - - --talk-name=org.freedesktop.PowerManagement.Inhibit - - --talk-name=org.freedesktop.login1.Manager - - --filesystem=xdg-run/app/com.discordapp.Discord:create - # Yuzu - # - --filesystem=home:ro # This may break Yuzu, let's see - # - --filesystem=/run/media:ro - # Dolphin - - --allow=bluetooth - #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something - # rpcs3 - #- --socket=fallback-x11 - -modules: - - name: retrodeck - buildsystem: simple - build-commands: - - cp -rn files/* /app - sources: - - type: archive - url: https://artifacts.retrodeck.net/artifacts/RetroDECK-Artifact.tar.gz - sha256: __SHA__ \ No newline at end of file diff --git a/functions.sh b/functions.sh deleted file mode 100644 index cbedf1a3..00000000 --- a/functions.sh +++ /dev/null @@ -1,2239 +0,0 @@ -#!/bin/bash - -# THIS IS A CENTRALIZED LOCATION FOR FUNCTIONS, WHICH CAN BE SOURCED WITHOUT RUNNING EXTRA CODE. EXISTING USE OF THESE FUNCTIONS CAN BE REFACTORED TO HERE. - -# These functions are original to this file - -#================= -# FUNCTION SECTION -#================= - -directory_browse() { - # This function browses for a directory and returns the path chosen - # USAGE: path_to_be_browsed_for=$(directory_browse $action_text) - - local path_selected=false - - while [ $path_selected == false ] - do - local target="$(zenity --file-selection --title="Choose $1" --directory)" - if [ ! -z $target ] #yes - then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="Directory $target chosen, is this correct?" - if [ $? == 0 ] - then - path_selected=true - echo $target - break - fi - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="No directory selected. Do you want to exit the selection process?" - if [ $? == 0 ] - then - break - fi - fi - done -} - -file_browse() { - # This function browses for a file and returns the path chosen - # USAGE: file_to_be_browsed_for=$(file_browse $action_text) - - local file_selected=false - - while [ $file_selected == false ] - do - local target="$(zenity --file-selection --title="Choose $1")" - if [ ! -z "$target" ] #yes - then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="File $target chosen, is this correct?" - if [ $? == 0 ] - then - file_selected=true - echo "$target" - break - fi - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="No file selected. Do you want to exit the selection process?" - if [ $? == 0 ] - then - break - fi - fi - done -} - -verify_space() { - # Function used for verifying adequate space before moving directories around - # USAGE: verify_space $source_dir $dest_dir - # Function returns "true" if there is enough space, "false" if there is not - - source_size=$(du -sk "$1" | awk '{print $1}') - source_size=$((source_size+(source_size/10))) # Add 10% to source size for safety - dest_avail=$(df -k --output=avail "$2" | tail -1) - - if [[ $source_size -ge $dest_avail ]]; then - echo "false" - else - echo "true" - fi -} - -move() { - # Function to move a directory from one parent to another - # USAGE: move $source_dir $dest_dir - - if [[ ! -d "$2/$(basename "$1")" ]]; then - if [[ $(verify_space "$1" "$2") ]]; then - ( - if [[ ! -d "$2" ]]; then # Create destination directory if it doesn't already exist - mkdir -pv "$2" - fi - mv -v -t "$2" "$1" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $(basename "$1") to new location of $2, please wait." - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - - configurator_move_dialog - fi - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected already exists.\n\nPlease select a new destination." - fi -} - -compress_game() { - # Function for compressing one or more files to .chd format - # USAGE: compress_game $format $full_path_to_input_file - local file="$2" - local filename_no_path=$(basename "$file") - local filename_no_extension="${filename_no_path%.*}" - local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") - local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" - - if [[ "$1" == "chd" ]]; then - /app/bin/chdman createcd -i "$source_file" -o "$dest_file".chd - elif [[ "$1" == "zip" ]]; then - zip -jq9 "$dest_file".zip "$source_file" - elif [[ "$1" == "rvz" ]]; then - dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz" - fi -} - -find_compatible_compression_format() { - # This function will determine what compression format, if any, the file and system are compatible with - # USAGE: find_compatible_compression_format "$file" - local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]') - local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") - - if [[ $(validate_for_chd "$1") == "true" ]] && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "chd" ]]; then - echo "chd" - elif grep -qF ".${normalized_filename##*.}" $zip_compressable_extensions && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "zip" ]]; then - echo "zip" - elif echo "$normalized_filename" | grep -qE '\.iso|\.gcm' && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "rvz" ]]; then - echo "rvz" - else - # If no compatible format can be found for the input file - echo "none" - fi -} - -validate_for_chd() { - # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY - # USAGE: validate_for_chd $input_file - - local file="$1" - local normalized_filename=$(echo "$file" | tr '[:upper:]' '[:lower:]') - local file_validated="false" - chd_validation_log_file="compression_$(basename "$file").log" - echo "Validating file:" "$file" > "$logs_folder/$chd_validation_log_file" - if echo "$normalized_filename" | grep -qE '\.iso|\.cue|\.gdi'; then - echo ".cue/.iso/.gdi file detected" >> "$logs_folder/$chd_validation_log_file" - local file_path=$(dirname "$(realpath "$file")") - local file_base_name=$(basename "$file") - local file_name=${file_base_name%.*} - if [[ "$normalized_filename" == *".cue" ]]; then # Validate .cue file - echo "Validating .cue associated .bin files" >> "$logs_folder/$chd_validation_log_file" - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - echo "Associated bin files read:" >> "$logs_folder/$chd_validation_log_file" - printf '%s\n' "$cue_bin_files" >> "$logs_folder/$chd_validation_log_file" - if [[ ! -z "$cue_bin_files" ]]; then - while IFS= read -r line - do - echo "looking for $file_path/$line" >> "$logs_folder/$chd_validation_log_file" - if [[ -f "$file_path/$line" ]]; then - echo ".bin file found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" - file_validated="true" - else - echo ".bin file NOT found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" - echo ".cue file could not be validated. Please verify your .cue file contains the correct corresponding .bin file information and retry." >> "$logs_folder/$chd_validation_log_file" - file_validated="false" - break - fi - done < <(printf '%s\n' "$cue_bin_files") - fi - echo $file_validated - else # If file is a .iso or .gdi - file_validated="true" - echo $file_validated - fi - else - echo "File type not recognized. Supported file types are .cue, .gdi and .iso" >> "$logs_folder/$chd_validation_log_file" - echo $file_validated - fi -} - -cli_compress_single_game() { - # This function will compress a single file passed from the CLI arguments - # USAGE: cli_compress_single_game $full_file_path - local file=$(realpath "$1") - read -p "Do you want to have the original file removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup - read -p "RetroDECK will now attempt to compress your selected game. Press Enter key to continue..." - if [[ ! -z "$file" ]]; then - if [[ -f "$file" ]]; then - check_system=$(echo "$file" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") - local compatible_compression_format=$(find_compatible_compression_format "$file") - if [[ ! $compatible_compression_format == "none" ]]; then - echo "$(basename "$file") can be compressed to $compatible_compression_format" - compress_game "$compatible_compression_format" "$file" - if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ $(basename "$file") == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - echo "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - echo "Removing original file $(basename "$file")" - rm -f "$file" - else - echo "Removing original file $(basename "$file")" - rm -f "$file" - fi - fi - else - echo "$(basename "$file") does not have any compatible compression formats." - fi - else - echo "File not found, please specify the full path to the file to be compressed." - fi - else - echo "Please use this command format \"--compress-one \"" - fi -} - -cli_compress_all_games() { - if echo "$1" | grep -qE 'chd|rvz|zip'; then - local compression_format="$1" - elif [[ "$1" == "all" ]]; then - local compression_format="all" - else - echo "Please enter a supported compression format. Options are \"chd\", \"rvz\", \"zip\" or \"all\"" - exit 1 - fi - local compressable_game="" - local all_compressable_games=() - if [[ $compression_format == "all" ]]; then - local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') - else - local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') - fi - - read -p "Do you want to have the original files removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup - read -p "RetroDECK will now attempt to compress all compatible games. Press Enter key to continue..." - - while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type - do - local compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") - if [[ ! -z "$compression_candidates" ]]; then - echo "Checking files for $system" - while IFS= read -r file - do - local compatible_compression_format=$(find_compatible_compression_format "$file") - if [[ ! "$compatible_compression_format" == "none" ]]; then - echo "$(basename "$file") can be compressed to $compatible_compression_format" - compress_game "$compatible_compression_format" "$file" - if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - echo "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - echo "Removing original file "$file"" - rm -f $(realpath "$file") - else - echo "Removing original file "$file"" - rm -f $(realpath "$file") - fi - fi - else - echo "No compatible compression format found for $(basename "$file")" - fi - done < <(printf '%s\n' "$compression_candidates") - else - echo "No compatible files found for compression in $system" - fi - done < <(printf '%s\n' "$compressable_systems_list") -} - -desktop_mode_warning() { - # This function is a generic warning for issues that happen when running in desktop mode. - # Running in desktop mode can be verified with the following command: if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then - # This function will check if desktop mode is currently being used and if the warning has not been disabled, and show it if needed. - - if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then - if [[ $desktop_mode_warning == "true" ]]; then - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Desktop Mode Warning" \ - --text="You appear to be running RetroDECK in the Steam Deck's Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck's normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?") - rc=$? # Capture return code, as "Yes" button has no text value - if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked - if [[ $choice == "No" ]]; then - exit 1 - elif [[ $choice == "Never show this again" ]]; then - set_setting_value $rd_conf "desktop_mode_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks - fi - fi - fi - fi -} - -set_setting_value() { - # Function for editing settings - # USAGE: set_setting_value $setting_file "$setting_name" "$new_setting_value" $system $section_name(optional) - - local setting_name_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") - local setting_value_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") - local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") - - case $4 in - - "retrodeck" | "citra" | "melonds" | "yuzu" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' $1 - fi - ;; - - "retroarch" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' $1 - fi - ;; - - "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' $1 - fi - ;; - - "rpcs3" ) # This does not currently work for settings with a $ in them - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' $1 - fi - ;; - - "es_settings" ) - sed -i 's^'"$setting_name_to_change"'" value=".*"^'"$setting_name_to_change"'" value="'"$setting_value_to_change"'"^' $1 - ;; - - esac -} - -get_setting_name() { - # Function for getting the setting name from a full setting line from a config file - # USAGE: get_setting_name "$current_setting_line" $system - - local current_setting_line="$1" - - case $2 in - - "es_settings" ) - echo ''"$current_setting_line"'' | grep -o -P '(?<=name\=\").*(?=\" value)' - ;; - - "rpcs3" ) - echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' - ;; - - * ) - echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?=\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g;s^\\$^^' - ;; - - esac -} - -get_setting_value() { -# Function for getting the current value of a setting from a config file -# USAGE: get_setting_value $setting_file "$setting_name" $system $section (optional) - - local current_setting_name="$2" - local current_section_name="$4" - - case $3 in - - "retrodeck" | "citra" | "melonds" | "yuzu" ) # For files with this syntax - setting_name=setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name=).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*" - fi - ;; - - "retroarch" ) # For files with this syntax - setting_name = "setting_value" - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")" - fi - ;; - - "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) # For files with this syntax - setting_name = setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*" - fi - ;; - - "rpcs3" ) # For files with this syntax - setting_name: setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=$current_setting_name: ).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*" - fi - ;; - - "es_settings" ) - echo $(grep -o -P "(?<=$current_setting_name\" value=\").*(?=\")" $1) - ;; - - esac -} - -add_setting() { - # This function will add a setting line to a file. This is useful for dynamically generated config files where a setting line may not exist until the setting is changed from the default. - # USAGE: add_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") - local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i '$ a '"$current_setting_line"'' $1 - else - sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' $1 - fi - ;; - - esac -} - -disable_setting() { - # This function will add a '#' to the beginning of a defined setting line, disabling it. - # USAGE: disable_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line="$2" - local current_section_name="$4" - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1 - else - sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1 - fi - ;; - - esac -} - -enable_setting() { - # This function will remove a '#' to the beginning of a defined setting line, enabling it. - # USAGE: enable_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line="$2" - local current_section_name="$4" - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1 - else - sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1 - fi - ;; - - esac -} - -disable_file() { - # This function adds the suffix ".disabled" to the end of a file to prevent it from being used entirely. - # USAGE: disable_file $file_name - # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file - - mv $(realpath $1) $(realpath $1).disabled -} - -enable_file() { - # This function removes the suffix ".disabled" to the end of a file to allow it to be used. - # USAGE: enable_file $file_name - # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file and should not have ".disabled" as a suffix - - mv $(realpath $1.disabled) $(realpath $(echo $1 | sed -e 's/\.disabled//')) -} - -generate_single_patch() { - # generate_single_patch $original_file $modified_file $patch_file $system - - rm $3 # Remove old patch file (maybe change this to create a backup instead?) - - while read -r current_setting_line; # Look for changes from the original file to the modified one - do - - printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands - - if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines - if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line - action="section" - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name - action="section" - current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name - fi - elif [[ (! -z $current_section) ]]; then # If line is in a section... - if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines - if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^ p } }' $2) ]]; then # If disabled line is not disabled in new file... - action="disable_setting" - echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< $(sed -E 's/^[ \t]*//' <<< "$current_setting_line")) >> $3 - fi - elif [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?#'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^ p } }' $2) ]]; then # Check if line is disabled in new file - action="enable_setting" - echo $action"^"$current_section"^"$current_setting_line >> $3 - else # Look for setting value differences - current_setting_name=$(get_setting_name "$escaped_setting_line" $4) - if [[ (-z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'$^ p } }' $2)) ]]; then # If the same setting line is not found in the same section of the modified file... - if [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^ p } }' $2) ]]; then # But the setting exists in that section, only with a different value... - new_setting_value=$(get_setting_value $2 "$current_setting_name" $4 $current_section) - action="change" - echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$4 >> $3 - fi - fi - fi - elif [[ (-z $current_section) ]]; then # If line is not in a section... - if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines - if [[ -z $(grep -o -P "^\s*?$current_setting_line$" $2) ]]; then # If disabled line is not disabled in new file... - action="disable_setting" - echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< "$current_setting_line") >> $3 - fi - elif [[ ! -z $(sed -n -E '\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' $2) ]]; then # Check if line is disabled in new file - action="enable_setting" - echo $action"^"$current_section"^"$current_setting_line >> $3 - else # Look for setting value differences - if [[ (-z $(sed -n -E '\^\s*?\b'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' $2)) ]]; then # If the same setting line is not found in the modified file... - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ ! -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $2) ]]; then # But the setting exists, only with a different value... - new_setting_value=$(get_setting_value $2 "$current_setting_name" $4) - action="change" - echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$4 >> $3 - fi - fi - fi - fi - fi - done < $1 - - # Reset the variables for reuse - action="" - current_section="" - current_setting_name="" - current_setting_value="" - - while read -r current_setting_line; # Look for new lines (from dynamically generated config files) in modified file compared to original - do - - printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands - - if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines - if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line - action="section" - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - echo "Section found:" "$current_section""." - elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name - action="section" - current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name - echo "Section found:" "$current_section""." - fi - elif [[ (! -z $current_section) ]]; then - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' $1 ) ]]; then # If setting name is not found in this section of the original file... - action="add_setting" - echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 - fi - elif [[ (-z $current_section) ]]; then - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $1) ]]; then # If setting name is not found in the original file... - action="add_setting" - echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 - fi - fi - fi - done < $2 -} - -deploy_single_patch() { - -# This function will take an "original" file and a patch file and generate a ready to use modified file -# USAGE: deploy_single_patch $original_file $patch_file $output_file - -cp -fv $1 $3 # Create a copy of the original file to be patched - -while IFS="^" read -r action current_section setting_name setting_value system_name -do - - case $action in - - "disable_file" ) - eval disable_file "$setting_name" - ;; - - "enable_file" ) - eval enable_file "$setting_name" - ;; - - "add_setting" ) - eval add_setting $3 "$setting_name" $system_name $current_section - ;; - - "disable_setting" ) - eval disable_setting $3 "$setting_name" $system_name $current_section - ;; - - "enable_setting" ) - eval enable_setting $3 "$setting_name" $system_name $current_section - ;; - - "change" ) - eval set_setting_value $3 "$setting_name" "$setting_value" $system_name $current_section - ;; - - *"#"* ) - # Comment line in patch file - ;; - - * ) - echo "Config line malformed: $action" - ;; - - esac -done < $2 -} - -deploy_multi_patch() { - -# This function will take a single "batch" patch file and run all patches listed in it, across multiple config files -# USAGE: deploy_multi_patch $patch_file -# Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers: -# $action^($current_section)^$setting_name^$setting_value^$system_name^($config file) - -while IFS="^" read -r action current_section setting_name setting_value system_name config_file -do - case $action in - - "disable_file" ) - eval disable_file "$config_file" - ;; - - "enable_file" ) - eval enable_file "$config_file" - ;; - - "add_setting" ) - eval add_setting "$config_file" "$setting_name" $system_name $current_section - ;; - - "disable_setting" ) - eval disable_setting "$config_file" "$setting_name" $system_name $current_section - ;; - - "enable_setting" ) - eval enable_setting "$config_file" "$setting_name" $system_name $current_section - ;; - - "change" ) - eval set_setting_value "$config_file" "$setting_name" "$setting_value" $system_name $current_section - ;; - - *"#"* ) - # Comment line in patch file - ;; - - * ) - echo "Config line malformed: $action" - ;; - - esac -done < $1 -} - -check_network_connectivity() { - # This function will do a basic check for network availability and return "true" if it is working. - # USAGE: if [[ $(check_network_connectivity) == "true" ]]; then - - wget -q --spider "$remote_network_target" - - if [ $? -eq 0 ]; then - echo "true" - else - echo "false" - fi -} - -check_for_version_update() { - # This function will perform a basic online version check and alert the user if there is a new version available. - - local online_version=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') - - if [[ ! "$update_ignore" == "$online_version" ]]; then - if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Update Available" \ - --text="There is a new version of RetroDECK available!\n\nIf you would like to update to the new version now, click \"Yes\". If you would like to skip reminders about this version, click \"Ignore this version\".\nYou will be reminded again at the next version update.\n\nIf you would like to disable these update notifications entirely, disable Online Update Checks in the Configurator.") - rc=$? # Capture return code, as "Yes" button has no text value - if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked - if [[ $choice == "Ignore this version" ]]; then - set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks - fi - else # User clicked "Yes" - configurator_generic_dialog "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." - flatpak-spawn --host flatpak update --noninteractive -y net.retrodeck.retrodeck - exit 1 - fi - elif [[ "$update_repo" == "RetroDECK-cooker" ]] && [[ ! $current_version == $online_version ]]; then - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Update Available" \ - --text="There is a more recent build of the RetroDECK cooker branch. Would you like to update to it?\nIf you would like to skip reminders about this version, click \"Ignore this version\".\nYou will be reminded again at the next version update.\n\nIf you would like to disable these update notifications entirely, disable Online Update Checks in the Configurator.") - rc=$? # Capture return code, as "Yes" button has no text value - if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked - if [[ $choice == "Ignore this version" ]]; then - set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks. - fi - else # User clicked "Yes" - configurator_generic_dialog "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." - local latest_cooker_download=$(curl --silent https://api.github.com/repos/XargonWan/$update_repo/releases/latest | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/') - mkdir -p "$rdhome/RetroDECK_Updates" - wget -P "$rdhome/RetroDECK_Updates" $latest_cooker_download - flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK.flatpak" - rm -f "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space - exit 1 - fi - fi - fi -} - -validate_input() { - while IFS="^" read -r input action - do - if [[ "$input" == "$1" ]]; then - eval "$action" - input_validated="true" - fi - done < $input_validation -} - -update_rd_conf() { - # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. - # USAGE: update_rd_conf - - conf_read # Read current settings into memory - mv -f $rd_conf $rd_conf_backup # Backup config file before update - cp $rd_defaults $rd_conf # Copy defaults file into place - conf_write # Write old values into new default file - conf_read # Read all settings into memory -} - -resolve_preset_conflicts() { - # This function will resolve conflicts between setting presets. ie. borders and widescreen cannot both be enabled at the same time. - # The function will read the $section_that_was_just_enabled and $section_to_check_for_conflicts - # If a conflict is found (where two conflicting settings are both enabled) the $section_to_check_for_conflicts entry will be disabled - # USAGE: resolve_preset_conflict "$section_that_was_just_enabled" "$section_to_check_for_conflicts" "system" - - local section_being_enabled=$1 - local section_to_check_for_conflicts=$2 - local system=$3 - local enabled_section_results=$(sed -n '/\['"$section_being_enabled"'\]/, /\[/{ /\['"$section_being_enabled"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') - - while IFS= read -r config_line - do - system_name=$(get_setting_name "$config_line" $system) - system_value=$(get_setting_value $rd_conf "$system_name" $system $section_being_enabled) - if [[ $system_value == "true" && $(get_setting_value $rd_conf "$(get_setting_name "$config_line" $system)" $system $section_to_check_for_conflicts) == "true" ]]; then - set_setting_value $rd_conf $system_name "false" retrodeck $section_to_check_for_conflicts - fi - done < <(printf '%s\n' "$enabled_section_results") -} - -multi_user_set_default_dialog() { - chosen_user="$1" - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="No and don't ask again" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Default User" \ - --text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"") - rc=$? # Capture return code, as "Yes" button has no text value - if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked - if [[ $choice == "No and don't ask again" ]]; then - set_setting_value $rd_conf "ask_default_user" "false" retrodeck "options" - fi - else # User clicked "Yes" - set_setting_value $rd_conf "default_user" "$chosen_user" retrodeck "options" - fi -} - -multi_user_choose_current_user_dialog() { -full_userlist=() -while IFS= read -r user -do -full_userlist=("${full_userlist[@]}" "$user") -done < <(ls -1 "$multi_user_data_folder") - -chosen_user=$(zenity \ - --list --width=1200 --height=720 \ - --ok-label="Select User" \ - --text="Choose the current user:" \ - --column "Steam Username" --print-column=1 \ - "${full_userlist[@]}") - -if [[ ! -z $chosen_user && -z $default_user && $ask_default_user == "true" ]]; then - multi_user_set_default_dialog "$chosen_user" -fi -echo "$chosen_user" -} - -multi_user_enable_multi_user_mode() { - if [[ -z "$SteamAppUser" ]]; then - configurator_generic_dialog "The Steam username of the current user could not be determined from the system.\n\nThis can happen when running in Desktop mode.\n\nYou will be asked to specify the Steam username (not profile name) of the current user in the next dialog." - fi - if [[ -d "$multi_user_data_folder" && $(ls -1 "$multi_user_data_folder" | wc -l) -gt 0 ]]; then # If multi-user data folder exists from prior use and is not empty - if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then # Current user has an existing save folder - configurator_generic_dialog "The current user $SteamAppUser has an existing folder in the multi-user data folder.\n\nThe saves here are likely older than the ones currently used by RetroDECK.\n\nThe old saves will be backed up to $backups_folder and the current saves will be loaded into the multi-user data folder." - mkdir -p "$backups_folder" - tar -C "$multi_user_data_folder" -cahf "$backups_folder/multi-user-backup_$SteamAppUser_$(date +"%Y_%m_%d").zip" "$SteamAppUser" - rm -rf "$multi_user_data_folder/$SteamAppUser" # Remove stale data after backup - fi - fi - set_setting_value $rd_conf "multi_user_mode" "true" retrodeck "options" - multi_user_determine_current_user - if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then - configurator_process_complete_dialog "enabling multi-user support" - else - configurator_generic_dialog "It looks like something went wrong while enabling multi-user mode." - fi -} - -multi_user_disable_multi_user_mode() { - if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then - full_userlist=() - while IFS= read -r user - do - full_userlist=("${full_userlist[@]}" "$user") - done < <(ls -1 "$multi_user_data_folder") - - single_user=$(zenity \ - --list --width=1200 --height=720 \ - --ok-label="Select User" \ - --text="Choose the current user:" \ - --column "Steam Username" --print-column=1 \ - "${full_userlist[@]}") - - if [[ ! -z "$single_user" ]]; then # Single user was selected - multi_user_return_to_single_user "$single_user" - set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" - configurator_process_complete_dialog "disabling multi-user support" - else - configurator_generic_dialog "No single user was selected, please try the process again." - configurator_retrodeck_multiuser_dialog - fi - else - single_user=$(ls -1 "$multi_user_data_folder") - multi_user_return_to_single_user "$single_user" - set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" - configurator_process_complete_dialog "disabling multi-user support" - fi -} - -multi_user_determine_current_user() { - if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then # If multi-user environment is enabled in rd_conf - if [[ -d "$multi_user_data_folder" ]]; then - if [[ ! -z $SteamAppUser ]]; then # If running in Game Mode and this variable exists - if [[ -z $(ls -1 "$multi_user_data_folder" | grep "$SteamAppUser") ]]; then - multi_user_setup_new_user - else - multi_user_link_current_user_files - fi - else # Unable to find Steam user ID - if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then - if [[ -z $default_user ]]; then # And a default user is not set - configurator_generic_dialog "The current user could not be determined from the system, and there are multiple users registered.\n\nPlease select which user is currently playing in the next dialog." - SteamAppUser=$(multi_user_choose_current_user_dialog) - if [[ ! -z $SteamAppUser ]]; then # User was chosen from dialog - multi_user_link_current_user_files - else - configurator_generic_dialog "No user was chosen, RetroDECK will launch with the files from the user who played most recently." - fi - else # The default user is set - if [[ ! -z $(ls -1 $multi_user_data_folder | grep "$default_user") ]]; then # Confirm user data folder exists - SteamAppUser=$default_user - multi_user_link_current_user_files - else # Default user has no data folder, something may have gone horribly wrong. Setting up as a new user. - multi_user_setup_new_user - fi - fi - else # If there is only 1 user in the userlist, default to that user - SteamAppUser=$(ls -1 $multi_user_data_folder) - multi_user_link_current_user_files - fi - fi - else # If the userlist file doesn't exist yet, create it and add the current user - if [[ ! -z "$SteamAppUser" ]]; then - multi_user_setup_new_user - else # If running in Desktop mode for the first time - configurator_generic_dialog "The current user could not be determined from the system and there is no existing userlist.\n\nPlease enter the Steam account username (not profile name) into the next dialog, or run RetroDECK in game mode." - if zenity --entry \ - --title="Specify Steam username" \ - --text="Enter Steam username:" - then # User clicked "OK" - SteamAppUser="$?" - if [[ ! -z "$SteamAppUser" ]]; then - multi_user_setup_new_user - else # But dialog box was blank - configurator_generic_dialog "No username was entered, so multi-user data folder cannot be created.\n\nDisabling multi-user mode, please try the process again." - set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" - fi - else # User clicked "Cancel" - configurator_generic_dialog "Cancelling multi-user mode activation." - set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" - fi - fi - fi - else - configurator_generic_dialog "Multi-user mode is not currently enabled" - fi -} - -multi_user_return_to_single_user() { - single_user="$1" - echo "Returning to single-user mode for $single_user" - unlink "$saves_folder" - unlink "$states_folder" - unlink "$rd_conf" - mv -f "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" - # RetroArch one-offs, because it has so many folders that should be shared between users - unlink "/var/config/retroarch/retroarch.cfg" - unlink "/var/config/retroarch/retroarch-core-options.cfg" - mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" - mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" - # XEMU one-offs, because it stores its config in /var/data, not /var/config like everything else - unlink "/var/config/xemu" - unlink "/var/data/xemu" - mkdir -p "/var/config/xemu" - mv -f "$multi_user_data_folder/$single_user/config/xemu"/{.[!.],}* "/var/config/xemu" - dir_prep "/var/config/xemu" "/var/data/xemu" - mkdir -p "$saves_folder" - mkdir -p "$states_folder" - mv -f "$multi_user_data_folder/$single_user/saves"/{.[!.],}* "$saves_folder" - mv -f "$multi_user_data_folder/$single_user/states"/{.[!.],}* "$states_folder" - for emu_conf in $(find "$multi_user_data_folder/$single_user/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') - do - if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then - unlink "/var/config/$emu_conf" - mkdir -p "/var/config/$emu_conf" - mv -f "$multi_user_data_folder/$single_user/config/$emu_conf"/{.[!.],}* "/var/config/$emu_conf" - fi - done - rm -r "$multi_user_data_folder/$single_user" # Should be empty, omitting -f for safety -} - -multi_user_setup_new_user() { - # TODO: RPCS3 one-offs - echo "Setting up new user" - unlink "$saves_folder" - unlink "$states_folder" - dir_prep "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" - dir_prep "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retrodeck" - cp -L "$rd_conf" "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" # Copy existing rd_conf file for new user. - rm -f "$rd_conf" - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" - if [[ ! -L "/var/config/retroarch/retroarch.cfg" ]]; then - mv "/var/config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" - mv "/var/config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" - else - cp "$emuconfigs/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" - cp "$emuconfigs/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" - set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" - set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" - set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" - fi - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" - for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') # For all the config folders already linked to a different user - do - if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then - unlink "/var/config/$emu_conf" - prepare_emulator "reset" "$emu_conf" - fi - done - for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator - do - if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then - dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" - fi - done -} - -multi_user_link_current_user_files() { - echo "Linking existing user" - ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" - ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" - for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # Find any new emulator config folders from last time this user played - do - if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then - dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" - fi - done - for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') - do - if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then - if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator - ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf" - else # If the current user doesn't have a config folder for this emulator, init it and then link it - prepare_emulator "reset" "$emu_conf" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" - fi - fi - done -} - -conf_write() { - # This function will update the RetroDECK config file with matching variables from memory - # USAGE: conf_write - - while IFS= read -r current_setting_line # Read the existing retrodeck.cfg - do - if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - else - current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line - current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg - memory_setting_value=$(eval "echo \$${current_setting_name}") # Read the variable names' value from memory - if [[ ! "$current_setting_value" == "$memory_setting_value" ]]; then # If the values are different... - set_setting_value "$rd_conf" "$current_setting_name" "$memory_setting_value" "retrodeck" "$current_section" # Update the value in retrodeck.cfg - fi - fi - fi - done < $rd_conf -} - -conf_read() { - # This function will read the RetroDECK config file into memory - # USAGE: conf_read - - while IFS= read -r current_setting_line # Read the existing retrodeck.cfg - do - if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - else - local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line - local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg - eval "$current_setting_name=$current_setting_value" # Write the current setting name and value to memory - fi - fi - done < $rd_conf -} - -dir_prep() { - # This script is creating a symlink preserving old folder contents and moving them in the new one - - # Call me with: - # dir prep "real dir" "symlink location" - real="$1" - symlink="$2" - - echo -e "\n[DIR PREP]\nMoving $symlink in $real" #DEBUG - - # if the symlink dir is already a symlink, unlink it first, to prevent recursion - if [ -L "$symlink" ]; - then - echo "$symlink is already a symlink, unlinking to prevent recursives" #DEBUG - unlink "$symlink" - fi - - # if the dest dir exists we want to backup it - if [ -d "$symlink" ]; - then - echo "$symlink found" #DEBUG - mv -f "$symlink" "$symlink.old" - fi - - # if the real dir is already a symlink, unlink it first - if [ -L "$real" ]; - then - echo "$real is already a symlink, unlinking to prevent recursives" #DEBUG - unlink "$real" - fi - - # if the real dir doesn't exist we create it - if [ ! -d "$real" ]; - then - echo "$real not found, creating it" #DEBUG - mkdir -pv "$real" - fi - - # creating the symlink - echo "linking $real in $symlink" #DEBUG - mkdir -pv "$(dirname "$symlink")" # creating the full path except the last folder - ln -svf "$real" "$symlink" - - # moving everything from the old folder to the new one, delete the old one - if [ -d "$symlink.old" ]; - then - echo "Moving the data from $symlink.old to $real" #DEBUG - mv -f "$symlink.old"/{.[!.],}* $real - echo "Removing $symlink.old" #DEBUG - rm -rf "$symlink.old" - fi - - echo -e "$symlink is now $real\n" -} - -consolidate_retrodeck_folders() { - # This script will find folders that may have been moved out of the main RetroDECK folder individually and move them home - # USAGE: consolidate_retrodeck_folders - - while read -r path; do - if realpath "$path" | grep -q "^$main_path/"; then - echo "$path is a subfolder of $main_path" - else - echo "$path is not a subfolder of $main_path" - fi - done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') -} - -update_splashscreens() { - # This script will purge any existing ES graphics and reload them from RO space into somewhere ES will look for it - # USAGE: update_splashscreens - - rm -rf /var/config/emulationstation/.emulationstation/resources/graphics - mkdir -p /var/config/emulationstation/.emulationstation/resources/graphics - cp -rf /app/retrodeck/graphics/* /var/config/emulationstation/.emulationstation/resources/graphics -} - -deploy_helper_files() { - # This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list - # USAGE: deploy_helper_files - - while IFS='^' read -r file dest - do - if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then - eval current_dest="$dest" - cp -f "$helper_files_folder/$file" "$current_dest/$file" - fi - - done < "$helper_files_list" -} - -prepare_emulator() { - # This function will perform one of several actions on one or more emulators - # The actions currently include "reset" and "postmove" - # The "reset" action will initialize the emulator - # The "postmove" action will update the emulator settings after one or more RetroDECK folders were moved - # An emulator can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all emulators equally - # The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed - # USAGE: prepare_emulator "$action" "$emulator" "$call_source(optional)" - - action="$1" - emulator="$2" - call_source="$3" - - if [[ "$emulator" == "retrodeck" ]]; then # For use after RetroDECK is consolidated and moved - if [[ "$action" == "postmove" ]]; then - roms_folder=$rdhome/roms - saves_folder=$rdhome/saves - states_folder=$rdhome/states - bios_folder=$rdhome/bios - media_folder=$rdhome/downloaded_media - themes_folder=$rdhome/themes - logs_folder=$rdhome/.logs - screenshots_folder=$rdhome/screenshots - mods_folder=$rdhome/mods - texture_packs_folder=$rdhome/texture_packs - borders_folder=$rdhome/borders - fi - fi - - if [[ "$emulator" =~ ^(retroarch|RetroArch|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - if [[ $(check_network_connectivity) == "true" ]]; then - if [[ $multi_user_mode == "true" ]]; then - rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" - cp -fv $emuconfigs/retroarch/retroarch.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" - cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" - else - rm -rf /var/config/retroarch - mkdir -p /var/config/retroarch - dir_prep "$bios_folder" "/var/config/retroarch/system" - dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" - mkdir -pv /var/config/retroarch/shaders/ - cp -rf /app/share/libretro/shaders /var/config/retroarch/ - dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" - mkdir -pv /var/config/retroarch/cores/ - cp -f /app/share/libretro/cores/* /var/config/retroarch/cores/ - cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/ - cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/ - mkdir -pv /var/config/retroarch/config/ - cp -rf $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config - dir_prep "$borders_folder" "/var/config/retroarch/borders" - cp -rt "/var/config/retroarch/borders/" "/app/retrodeck/emu-configs/retroarch/borders/*" - set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" - set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" - set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" - fi - - # PPSSPP - echo "--------------------------------" - echo "Initializing PPSSPP_LIBRETRO" - echo "--------------------------------" - if [ -d $bios_folder/PPSSPP/flash0/font ] - then - mv -fv $bios_folder/PPSSPP/flash0/font $bios_folder/PPSSPP/flash0/font.bak - fi - mkdir -p $bios_folder/PPSSPP - wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $bios_folder/PPSSPP - unzip -q "$bios_folder/PPSSPP/master.zip" -d $bios_folder/PPSSPP/ - mv -f "$bios_folder/PPSSPP/ppsspp-master/assets/"* "$bios_folder/PPSSPP/" - rm -rfv "$bios_folder/PPSSPP/master.zip" - rm -rfv "$bios_folder/PPSSPP/ppsspp-master" - if [ -d $bios_folder/PPSSPP/flash0/font.bak ] - then - mv -f $bios_folder/PPSSPP/flash0/font.bak $bios_folder/PPSSPP/flash0/font - fi - - # MSX / SVI / ColecoVision / SG-1000 - echo "-----------------------------------------------------------" - echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO" - echo "-----------------------------------------------------------" - wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $bios_folder/MSX - unzip -q "$bios_folder/MSX/blueMSXv282full.zip" -d $bios_folder/MSX - mv -f $bios_folder/MSX/Databases $bios_folder/Databases - mv -f $bios_folder/MSX/Machines $bios_folder/Machines - rm -rf $bios_folder/MSX - else - if [[ "$call_source" == "cli" ]]; then - printf "You do not appear to be connected to a network with internet access.\n\nThe RetroArch reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available.\n" - fi - fi - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$bios_folder" "/var/config/retroarch/system" - dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" - dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" - set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" - set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" - set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" - fi - fi - - if [[ "$emulator" =~ ^(cemu|Cemu|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing CEMU" - echo "----------------------" - rm -rf /var/config/Cemu - mkdir -pv /var/config/Cemu/ - cp -fr "$emuconfigs/cemu/"* /var/config/Cemu/ - #TODO : set_setting_value for Cemu and multi_user - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/Cemu/settings.xml - dir_prep "$rdhome/saves/wiiu/cemu" "$rdhome/bios/cemu/usr/save" - fi - if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves - #TODO : set_setting_value for Cemu and multi_user - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/Cemu/settings.xml - dir_prep "$rdhome/saves/wiiu/cemu" "$rdhome/bios/cemu/usr/save" - fi - # if [[ "$action" == "postmove" ]]; then # Run only post-move commands - - # fi - fi - - if [[ "$emulator" =~ ^(citra|citra-emu|Citra|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "------------------------" - echo "Initializing CITRA" - echo "------------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/citra-emu" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/citra-emu" - cp -fv $emuconfigs/citra/qt-config.ini "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "/var/config/citra-emu" - else # Single-user actions - rm -rf /var/config/citra-emu - mkdir -pv /var/config/citra-emu/ - cp -f $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini - set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" - set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" - set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" - set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" - fi - # Shared actions - mkdir -pv "$saves_folder/n3ds/citra/nand/" - mkdir -pv "$saves_folder/n3ds/citra/sdmc/" - dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata" - dir_prep "$logs_folder/citra" "/var/data/citra-emu/log" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" - dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log" - set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" - set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" - set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" - set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" - fi - fi - - if [[ "$emulator" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing DOLPHIN" - echo "----------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" - cp -fvr $emuconfigs/dolphin/* "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "BIOS" "$bios_folder" "dolphin" "GBA" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "dolphin" "General" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "dolphin" "General" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "/var/config/dolphin-emu" - else # Single-user actions - rm -rf /var/config/dolphin-emu - mkdir -pv /var/config/dolphin-emu/ - cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/ - set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" - set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" - set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" - set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" - set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" - fi # Shared actions - dir_prep "$saves_folder/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR" # TODO: Multi-user one-off - dir_prep "$saves_folder/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA" # TODO: Multi-user one-off - dir_prep "$saves_folder/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP" # TODO: Multi-user one-off - dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" - dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" - dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$saves_folder/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR" - dir_prep "$saves_folder/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA" - dir_prep "$saves_folder/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP" - dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" - dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" - dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" - set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" - set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" - set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" - set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" - set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" - fi - fi - - if [[ "$emulator" =~ ^(duckstation|Duckstation|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "------------------------" - echo "Initializing DUCKSTATION" - echo "------------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/duckstation" - mkdir -p "$multi_user_data_folder/$SteamAppUser/data/duckstation/" - cp -fv $emuconfigs/duckstation/* "$multi_user_data_folder/$SteamAppUser/data/duckstation" - set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" - set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card1Path" "$saves_folder/duckstation/shared_card_1.mcd" "duckstation" "MemoryCards" - set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card2Path" "$saves_folder/duckstation/shared_card_2.mcd" "duckstation" "MemoryCards" - set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Directory" "$saves_folder/duckstation" "duckstation" "MemoryCards" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "/var/config/duckstation" - else # Single-user actions - rm -rf /var/config/duckstation - mkdir -p /var/data/duckstation/ - cp -fv $emuconfigs/duckstation/* /var/data/duckstation - set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" - set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/duckstation/shared_card_1.mcd" "duckstation" "MemoryCards" - set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/duckstation/shared_card_2.mcd" "duckstation" "MemoryCards" - set_setting_value "$duckstationconf" "Directory" "$saves_folder/duckstation" "duckstation" "MemoryCards" - fi - dir_prep "$saves_folder/duckstation" "/var/data/duckstation/memcards" # TODO: This shouldn't be needed anymore, verify - dir_prep "$states_folder/duckstation" "/var/data/duckstation/savestates" # TODO: This shouldn't be needed anymore, verify - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" - set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/duckstation/shared_card_1.mcd" "duckstation" "MemoryCards" - set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/duckstation/shared_card_2.mcd" "duckstation" "MemoryCards" - set_setting_value "$duckstationconf" "Directory" "$saves_folder/duckstation" "duckstation" "MemoryCards" - fi - fi - - if [[ "$emulator" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing MELONDS" - echo "----------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/melonDS" - mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/melonDS/" - cp -fvr $emuconfigs/melonds/melonDS.ini "$multi_user_data_folder/$SteamAppUser/config/melonDS/" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SavestatePath" "$states_folder/nds/melonds" "melonds" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "/var/config/melonDS" - else # Single-user actions - rm -rf /var/config/melonDS - mkdir -pv /var/config/melonDS/ - cp -fvr $emuconfigs/melonds/melonDS.ini /var/config/melonDS/ - set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" - set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" - set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" - set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" - set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" - fi - # Shared actions - mkdir -pv "$saves_folder/nds/melonds" - mkdir -pv "$states_folder/nds/melonds" - dir_prep "$bios_folder" "/var/config/melonDS/bios" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$bios_folder" "/var/config/melonDS/bios" - set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" - set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" - set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" - set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" - set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" - fi - fi - - if [[ "$emulator" =~ ^(pcsx2|PCSX2|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing PCSX2" - echo "----------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/PCSX2" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis" - cp -fvr $emuconfigs/PCSX2/* "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Bios" "$bios_folder" "pcsx2" "Folders" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "/var/config/PCSX2" - else # Single-user actions - rm -rf /var/config/PCSX2 - mkdir -pv "/var/config/PCSX2/inis" - cp -fvr $emuconfigs/PCSX2/* /var/config/PCSX2/inis/ - set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" - fi - # Shared actions - mkdir -pv "$saves_folder/ps2/pcsx2/memcards" - mkdir -pv "$states_folder/ps2/pcsx2" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" - set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" - fi - fi - - if [[ "$emulator" =~ ^(ppsspp|PPSSPP|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "------------------------" - echo "Initializing PPSSPPSDL" - echo "------------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/ppsspp" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" - cp -fv $emuconfigs/ppssppsdl/* "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/ppsspp.ini" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "/var/config/ppsspp" - else # Single-user actions - rm -rf /var/config/ppsspp - mkdir -p /var/config/ppsspp/PSP/SYSTEM/ - cp -fv $emuconfigs/ppssppsdl/* /var/config/ppsspp/PSP/SYSTEM/ - set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" - fi - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" - fi - fi - - if [[ "$emulator" =~ ^(primehack|Primehack|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing Primehack" - echo "----------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/primehack" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/primehack" - cp -fvr $emuconfigs/primehack/* "$multi_user_data_folder/$SteamAppUser/config/primehack/" - set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath0" "$roms_folder/gc" "primehack" "General" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "/var/config/primehack" - else # Single-user actions - rm -rf /var/config/primehack - mkdir -pv /var/config/primehack/ - cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/ - set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" - fi - # Shared actions - dir_prep "$saves_folder/gc/primehack/EUR" "/var/data/primehack/GC/EUR" - dir_prep "$saves_folder/gc/primehack/USA" "/var/data/primehack/GC/USA" - dir_prep "$saves_folder/gc/primehack/JAP" "/var/data/primehack/GC/JAP" - dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" - dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" - mkdir -pv /var/data/primehack/Wii/ - dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$saves_folder/gc/primehack/EUR" "/var/data/primehack/GC/EUR" - dir_prep "$saves_folder/gc/primehack/USA" "/var/data/primehack/GC/USA" - dir_prep "$saves_folder/gc/primehack/JAP" "/var/data/primehack/GC/JAP" - dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" - dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" - dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii/" - set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" - fi - fi - - if [[ "$emulator" =~ ^(rpcs3|RPCS3|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "------------------------" - echo "Initializing RPCS3" - echo "------------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/rpcs3" - mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" - cp -fr $emuconfigs/rpcs3/* "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" - # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. - sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" "/games/" "$roms_folder/ps3" "rpcs3" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "/var/config/rpcs3" - else # Single-user actions - rm -rf /var/config/rpcs3 - mkdir -pv /var/config/rpcs3/ - cp -fr $emuconfigs/rpcs3/* /var/config/rpcs3/ - # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. - sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf" - set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3" - dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" - fi - # Shared actions - mkdir -p "$bios_folder/rpcs3/dev_hdd0" - mkdir -p "$bios_folder/rpcs3/dev_hdd1" - mkdir -p "$bios_folder/rpcs3/dev_flash" - mkdir -p "$bios_folder/rpcs3/dev_flash2" - mkdir -p "$bios_folder/rpcs3/dev_flash3" - mkdir -p "$bios_folder/rpcs3/dev_bdvd" - mkdir -p "$bios_folder/rpcs3/dev_usb000" - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. - sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf" - set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3" - fi - fi - - # if [[ "$emulator" =~ ^(ryujunx|Ryujinx|all)$ ]]; then - # if [[ "$action" == "reset" ]]; then # Run reset-only commands - # echo "------------------------" - # echo "Initializing RYUJINX" - # echo "------------------------" - # if [[ $multi_user_mode == "true" ]]; then - # rm -rf "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" - # mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/system" - # cp -fv $emuconfigs/ryujinx/* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" - # sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/Config.json" - # dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "/var/config/Ryujinx" - # else - # # removing config directory to wipe legacy files - # rm -rf /var/config/Ryujinx - # mkdir -p /var/config/Ryujinx/system - # cp -fv $emuconfigs/ryujinx/* /var/config/Ryujinx - # sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$ryujinxconf" - # fi - # fi - # if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves - # dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system" - # fi - # if [[ "$action" == "postmove" ]]; then # Run only post-move commands - # sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON - # fi - # fi - - if [[ "$emulator" =~ ^(xemu|XEMU|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - if [[ $(check_network_connectivity) == "true" ]]; then - echo "------------------------" - echo "Initializing XEMU" - echo "------------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf /var/config/xemu - rm -rf /var/data/xemu - rm -rf "$multi_user_data_folder/$SteamAppUser/config/xemu" - mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/xemu/" - cp -fv $emuconfigs/xemu/xemu.toml "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "$saves_folder/xbox/xemu/xbox-eeprom.bin" "xemu" "sys.files" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look - dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu" - else # Single-user actions - rm -rf /var/config/xemu - rm -rf /var/data/xemu - dir_prep "/var/config/xemu" "/var/data/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look - cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf" - set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" - set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" - set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" - set_setting_value "$xemuconf" "eeprom_path" "$saves_folder/xbox/xemu/xbox-eeprom.bin" "xemu" "sys.files" - set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" - fi # Shared actions - mkdir -pv $saves_folder/xbox/xemu/ - # Preparing HD dummy Image if the image is not found - if [ ! -f $bios_folder/xbox_hdd.qcow2 ] - then - wget "https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip" -P $bios_folder/ - unzip -q $bios_folder/xbox_hdd.qcow2.zip -d $bios_folder/ - rm -rfv $bios_folder/xbox_hdd.qcow2.zip - fi - else - if [[ "$call_source" == "cli" ]]; then - printf "You do not appear to be connected to a network with internet access.\n\nThe Xemu reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available.\n" - fi - fi - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" - set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" - set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" - set_setting_value "$xemuconf" "eeprom_path" "$saves_folder/xbox/xemu/xbox-eeprom.bin" "xemu" "sys.files" - set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" - fi - fi - - if [[ "$emulator" =~ ^(yuzu|Yuzu|all)$ ]]; then - if [[ "$action" == "reset" ]]; then # Run reset-only commands - echo "----------------------" - echo "Initializing YUZU" - echo "----------------------" - if [[ $multi_user_mode == "true" ]]; then # Multi-user actions - rm -rf "$multi_user_data_folder/$SteamAppUser/config/yuzu" - mkdir -p "$multi_user_data_folder/$SteamAppUser/config/yuzu" - cp -fvr $emuconfigs/yuzu/* "$multi_user_data_folder/$SteamAppUser/config/yuzu/" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" - set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" - dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "/var/config/yuzu" - else # Single-user actions - rm -rf /var/config/yuzu - mkdir -pv /var/config/yuzu/ - cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/ - set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" - set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" - set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" - set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" - fi - # Shared actions - dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" - dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" - dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" - dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" - dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" - dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" - # removing dead symlinks as they were present in a past version - if [ -d $bios_folder/switch ]; then - find $bios_folder/switch -xtype l -exec rm {} \; - fi - fi - if [[ "$action" == "postmove" ]]; then # Run only post-move commands - dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" - dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" - dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" - dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" - dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" - dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" - set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" - set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" - set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" - set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" - fi - fi -} - -update_rpcs3_firmware() { - mkdir -p "$roms_folder/ps3/tmp" - chmod 777 "$roms_folder/ps3/tmp" - wget "$rpcs3_firmware" -P "$roms_folder/ps3/tmp/" - rpcs3 --installfw "$roms_folder/ps3/tmp/PS3UPDAT.PUP" - rm -rf "$roms_folder/ps3/tmp" -} - -backup_retrodeck_userdata() { - zip -rq9 "$backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip" "$saves_folder" "$states_folder" "$bios_folder" "$media_folder" "$themes_folder" "$logs_folder" "$screenshots_folder" "$mods_folder" "$texture_packs_folder" "$borders_folder" > $logs_folder/$(date +"%0m%0d")_backup_log.log -} - -create_lock() { - # creating RetroDECK's lock file and writing the version in the config file - version=$hard_version - touch "$lockfile" - conf_write -} - -easter_eggs() { - # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in easter_egg_checklist.cfg - # The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file - # Ex. The line "1001^1031^0000^2359^spooky.svg" would show the file "spooky.svg" during any time of day in the month of October - # The easter_egg_checklist.cfg is read in order, so lines higher in the file will have higher priority in the event of an overlap - # USAGE: easter_eggs - current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges - current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges - if [[ ! -z $(cat $easter_egg_checklist) ]]; then - while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values - do - if [[ $current_day -ge "$start_date" && $current_day -le "$end_date" && $current_time -ge "$start_time" && $current_time -le "$end_time" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed - new_splash_file="$splashscreen_dir/$splash_file" - break - else # When there are no matches, the default splash screen is set to deploy - new_splash_file="$default_splash_file" - fi - done < $easter_egg_checklist - else - new_splash_file="$default_splash_file" - fi - - cp -f "$new_splash_file" "$current_splash_file" # Deploy assigned splash screen -} - -tools_init() { - mkdir -pv /var/config/emulationstation/.emulationstation/gamelists/tools/ - cp -fv /app/retrodeck/tools-gamelist.xml /var/config/emulationstation/.emulationstation/gamelists/tools/gamelist.xml -} - -start_retrodeck() { - echo "Checking to see if today has a surprise..." - easter_eggs - # normal startup - echo "Starting RetroDECK v$version" - emulationstation --home /var/config/emulationstation -} - -finit_browse() { -# Function for choosing data directory location during first/forced init -path_selected=false -while [ $path_selected == false ] -do - local target="$(zenity --file-selection --title="Choose RetroDECK data directory location" --directory)" - if [[ ! -z "$target" ]]; then - if [[ -w "$target" ]]; then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ - --cancel-label="No" \ - --ok-label "Yes" \ - --text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?" - if [ $? == 0 ] #yes - then - path_selected=true - echo "$target/retrodeck" - break - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?" - if [ $? == 0 ] # yes, quit - then - exit 2 - fi - fi - fi - else - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Quit" \ - --text="No location was selected. Please run RetroDECK again to retry." - exit 2 - fi -done -} - -finit() { -# Force/First init, depending on the situation - - echo "Executing finit" - - # Internal or SD Card? - choice=$(configurator_destination_choice_dialog "RetroDECK data" "Welcome to the first configuration of RetroDECK.\nThe setup will be quick but please READ CAREFULLY each message in order to avoid misconfigurations.\n\nWhere do you want your RetroDECK data folder to be located?\n\nThis folder will contain all ROMs, BIOSs and scraped data." ) - echo "Choice is $choice" - - case $choice in - - "" ) # Cancel or X button quits - echo "Now quitting" - exit 2 - ;; - - "Internal Storage" ) # Internal - echo "Internal selected" - rdhome="$HOME/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - if [[ -L $rdhome ]]; then #Remove old symlink from existing install, if it exists - unlink $rdhome - fi - ;; - - "SD Card" ) - echo "SD Card selected" - if [ ! -d "$sdcard" ] # SD Card path is not existing - then - echo "Error: SD card not found" - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Browse" \ - --text="SD Card was not find in the default location.\nPlease choose the SD Card root.\nA retrodeck folder will be created starting from the directory that you selected." - rdhome=$(finit_browse) # Calling the browse function - if [[ -z $rdhome ]]; then # If user hit the cancel button - exit 2 - fi - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - elif [ ! -w "$sdcard" ] #SD card found but not writable - then - echo "Error: SD card found but not writable" - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Quit" \ - --text="SD card was found but is not writable\nThis can happen with cards formatted on PC.\nPlease format the SD card through the Steam Deck's Game Mode and run RetroDECK again." - echo "Now quitting" - exit 2 - else - rdhome="$sdcard/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - fi - ;; - - "Custom Location" ) - echo "Custom Location selected" - zenity --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Browse" \ - --text="Please choose the root folder for the RetroDECK data.\nA retrodeck folder will be created starting from the directory that you selected." - rdhome=$(finit_browse) # Calling the browse function - if [[ -z $rdhome ]]; then # If user hit the cancel button - exit 2 - fi - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - ;; - - esac - - if [[ ! "$rdhome" == "$HOME/retrodeck" && ! -L $HOME/retrodeck ]]; then # If data stored on SD card, create /home/deck/retrodeck symlink to keep things working until configs can get modified - echo "Symlinking retrodeck directory to home directory" - dir_prep "$rdhome" "$HOME/retrodeck" - fi - - mkdir -pv $roms_folder - - local rpcs_firmware_install=$(configurator_generic_question_dialog "RPCS3 Firmware Install" "Would you like to install the latest PS3 firmware for the RPCS3 emulator?\n\nThis process will take several minutes and requires network access.\nIf you do not plan to emulate PS3 games this can be skipped, and can always be done later through the Configurator.\n\nIf you click Yes, RPCS3 will be launched at the end of the RetroDECK setup process.\nOnce the firmware is installed, please close the emulator to finish the process.") - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ - --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." - - ( - # Recreating the folder - rm -rf /var/config/emulationstation/ - mkdir -p /var/config/emulationstation/ - - # Initializing ES-DE - # TODO: after the next update of ES-DE this will not be needed - let's test it - emulationstation --home /var/config/emulationstation --create-system-dirs - update_splashscreens - - # Initializing ROMs folder - Original in retrodeck home (or SD Card) - dir_prep $roms_folder "/var/config/emulationstation/ROMs" - - mkdir -pv $saves_folder - mkdir -pv $states_folder - mkdir -pv $screenshots_folder - mkdir -pv $logs_folder - mkdir -pv $mods_folder - mkdir -pv $texture_packs_folder - - # XMLSTARLET HERE - cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml - - # ES-DE preparing user-exposed folders - dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" - dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" - dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" - - # PICO-8 - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) - dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder - - # Add packaged extras, after the ROMS folder has been initialized - cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it - - # RetroDECK prepack metadata - mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" - cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" - mkdir -p "$media_folder/doom" - unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" - - tools_init - prepare_emulator "reset" "all" - if [[ $rpcs_firmware_install == "true" ]]; then - update_rpcs3_firmware - fi - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Finishing Initialization" \ - --text="RetroDECK is finishing the initial setup process, please wait." - - create_lock -} - -save_migration() { - # Finding existing ROMs folder - if [ -d "$default_sd/retrodeck" ] - then - # ROMs on SD card - roms_folder="$default_sd/retrodeck/roms" - if [[ ! -L $rdhome && ! -L $rdhome/roms ]]; then # Add a roms folder symlink back to ~/retrodeck if missing, to fix things like PS2 autosaves until user migrates whole ~retrodeck directory - ln -s $roms_folder $rdhome/roms - fi - else - # ROMs on Internal - roms_folder="$HOME/retrodeck/roms" - fi - echo "ROMs folder found at $roms_folder" - - # Unhiding downloaded media from the previous versions - if [ -d "$rdhome/.downloaded_media" ] - then - mv -fv "$rdhome/.downloaded_media" "$media_folder" - fi - - # Unhiding themes folder from the previous versions - if [ -d "$rdhome/.themes" ] - then - mv -fv "$rdhome/.themes" "$themes_folder" - fi - - # Doing the dir prep as we don't know from which version we came - dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" - dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" - mkdir -pv $rdhome/.logs #this was added later, maybe safe to remove in a few versions - - # Resetting es_settings, now we need it but in the future I should think a better solution, maybe with sed - cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml - - # 0.4 -> 0.5 - # Perform save and state migration if needed - - # Moving PCSX2 Saves - mv -fv /var/config/PCSX2/sstates/* $rdhome/states/ps2/pcsx2 - mv -fv /var/config/PCSX2/memcards/* $rdhome/saves/ps2/memcards - - # Moving Citra saves from legacy location to 0.5.0b structure - - mv -fv $rdhome/saves/Citra/* $rdhome/saves/n3ds/citra - rmdir $rdhome/saves/Citra # Old folder cleanup - - versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves - - if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5 - migration_logfile=$rdhome/.logs/savemove_"$(date +"%Y_%m_%d_%I_%M_%p").log" - save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" - state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library." - - allgames=($(find "$roms_folder" -maxdepth 2 -mindepth 2 ! -name "systeminfo.txt" ! -name "systems.txt" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" ! -name "*^*" | sed -e "s/ /\^/g")) # Build an array of all games and multi-disc-game-containing folders, adding whitespace placeholder - - allsaves=($(find "$saves_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all save files, ignoring standalone emulator sub-folders, adding whitespace placeholder - - allstates=($(find "$states_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all state files, ignoring standalone emulator sub-folders, adding whitespace placeholder - - totalsaves=${#allsaves[@]} - totalstates=${#allstates[@]} - filesleft= - current_dest_folder= - gamestoskip= - - tar -C $rdhome -czf $save_backup_file saves # Backup save directory for safety - echo "Saves backed up to" $save_backup_file >> $migration_logfile - tar -C $rdhome -czf $state_backup_file states # Backup state directory for safety - echo "States backed up to" $state_backup_file >> $migration_logfile - - ( - movefile() { # Take matching save and rom files and sort save into appropriate system folder - echo "# $filesleft $currentlybeingmoved remaining..." # These lines update the Zenity progress bar - progress=$(( 100 - (( 100 / "$totalfiles" ) * "$filesleft" ))) - echo $progress - filesleft=$((filesleft-1)) - if [[ ! " ${gamestoskip[*]} " =~ " ${1} " ]]; then # If the current game name exists multiple times in array ie. /roms/snes/Mortal Kombat 3.zip and /roms/genesis/Mortal Kombat 3.zip, skip and alert user to sort manually - game=$(sed -e "s/\^/ /g" <<< "$1") # Remove whitespace placeholder - gamebasename=$(basename "$game" | sed -e 's/\..*//') # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - systemdir="$(basename "$(dirname "$1")")" # Extract parent directory identifying system ROM belongs to - matches=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -name "$gamebasename"".*" | sed -e 's/ /^/g' | sed -e 's/\..*//')) # Search for multiple instances of pure game name, adding to skip list if found - if [[ ${#matches[@]} -gt 1 ]]; then - echo "ERROR: Multiple ROMS found with name:" $gamebasename "Please sort saves and states for these ROMS manually" >> $migration_logfile - gamestoskip+=("$1") - return - fi - echo "INFO: Examining ROM file:" "$game" >> $migration_logfile - echo "INFO: System detected as" $systemdir >> $migration_logfile - sosfile=$(sed -e "s/\^/ /g" <<< "$2") # Remove whitespace placeholder from s-ave o-r s-tate file - sospurebasename="$(basename "$sosfile")" # Extract pure file name ie. /saves/game1.sav becomes game1 - echo "INFO: Current save or state being examined for match:" $sosfile >> $migration_logfile - echo "INFO: Matching save or state" $sosfile "and game" $game "found." >> $migration_logfile - echo "INFO: Moving save or state to" $current_dest_folder"/"$systemdir"/"$sosbasename >> $migration_logfile - if [[ ! -d $current_dest_folder"/"$systemdir ]]; then # If system directory doesn't exist for save yet, create it - echo "WARNING: Creating missing system directory" $current_dest_folder"/"$systemdir - mkdir $current_dest_folder/$systemdir - fi - mv "$sosfile" -t $current_dest_folder/$systemdir # Move save to appropriate system directory - return - else - echo "WARNING: Game with name" "$(basename "$1" | sed -e "s/\^/ /g")" "already found. Skipping to next game..." >> $migration_logfile # Inform user of game being skipped due to duplicate ROM names - fi - } - - find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> $migration_logfile # Warn user if any of their files have the whitespace replacement character used by the script - - totalfiles=$totalsaves #set variables for save file migration - filesleft=$totalsaves - currentlybeingmoved="saves" - current_dest_folder=$saves_folder - - for i in "${allsaves[@]}"; do # For each save file, compare to every ROM file name looking for a match - found= - currentsave=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /saves/game1.sav becomes game1 - for j in "${allgames[@]}"; do - currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - [[ $currentgame == $currentsave ]] && { found=1; break; } # If names match move to next stage, otherwise skip - done - [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for save file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded save file - done - - totalfiles=$totalstates #set variables for state file migration - filesleft=$totalstates - currentlybeingmoved="states" - current_dest_folder=$states_folder - - for i in "${allstates[@]}"; do # For each state file, compare to every ROM file name looking for a match - found= - currentstate=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /states/game1.sav becomes game1 - for j in "${allgames[@]}"; do - currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - [[ $currentgame == $currentstate ]] && { found=1; break; } # If names match move to next stage, otherwise skip - done - [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for state file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded state file - done - - ) | - zenity --progress \ - --icon-name=net.retrodeck.retrodeck \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title="Processing Files" \ - --text="# files remaining..." \ - --percentage=0 \ - --no-cancel \ - --auto-close - - if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord." - - else - cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log" - fi - - else - echo "Version" $version "is after the save and state organization was changed, no need to sort again" - fi -} - -#========================= -# REUSABLE DIALOGS SECTION -#========================= - -debug_dialog() { - # This function is for displaying commands run by the Configurator without actually running them - # USAGE: debug_dialog "command" - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Debug Dialog" \ - --text="$1" -} - -configurator_process_complete_dialog() { - # This dialog shows when a process is complete. - # USAGE: configurator_process_complete_dialog "process text" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Process Complete" \ - --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK." - - if [ ! $? == 0 ] # OK button clicked - then - configurator_welcome_dialog - fi -} - -configurator_generic_dialog() { - # This dialog is for showing temporary messages before another process happens. - # USAGE: configurator_generic_dialog "info text" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility" \ - --text="$1" -} - -configurator_generic_question_dialog() { - # This dialog provides a generic dialog for getting a response from a user. - # USAGE: $(configurator_generic_question_dialog "title text" "action text") - # This function will return a "true" if the user clicks "Yes", and "false" if they click "No". - choice=$(zenity --title "RetroDECK - $1" --question --no-wrap --cancel-label="No" --ok-label="Yes" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --text="$2") - if [[ $? == "0" ]]; then - echo "true" - else - echo "false" - fi -} - -configurator_destination_choice_dialog() { - # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations. - # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text") - # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location" - choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --text="$2") - - local rc=$? - if [[ $rc == "0" ]] && [[ -z "$choice" ]]; then - echo "Back" - else - echo $choice - fi -} - -configurator_reset_confirmation_dialog() { - # This dialog provides a confirmation for any reset functions, before the reset is actually performed. - # USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text") - # This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel. - choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --text="$2") - if [[ $? == "0" ]]; then - echo "true" - else - echo "false" - fi -} diff --git a/functions/050_save_migration.sh b/functions/050_save_migration.sh new file mode 100644 index 00000000..f0187e24 --- /dev/null +++ b/functions/050_save_migration.sh @@ -0,0 +1,172 @@ +#!/bin/bash + +save_migration() { + # Finding existing ROMs folder + if [ -d "$default_sd/retrodeck" ] + then + # ROMs on SD card + roms_folder="$default_sd/retrodeck/roms" + if [[ ! -L $rdhome && ! -L $rdhome/roms ]]; then # Add a roms folder symlink back to ~/retrodeck if missing, to fix things like PS2 autosaves until user migrates whole ~retrodeck directory + ln -s $roms_folder $rdhome/roms + fi + else + # ROMs on Internal + roms_folder="$HOME/retrodeck/roms" + fi + echo "ROMs folder found at $roms_folder" + + # Unhiding downloaded media from the previous versions + if [ -d "$rdhome/.downloaded_media" ] + then + mv -fv "$rdhome/.downloaded_media" "$media_folder" + fi + + # Unhiding themes folder from the previous versions + if [ -d "$rdhome/.themes" ] + then + mv -fv "$rdhome/.themes" "$themes_folder" + fi + + # Doing the dir prep as we don't know from which version we came + dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" + dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" + mkdir -pv $rdhome/.logs #this was added later, maybe safe to remove in a few versions + + # Resetting es_settings, now we need it but in the future I should think a better solution, maybe with sed + cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml + + # 0.4 -> 0.5 + # Perform save and state migration if needed + + # Moving PCSX2 Saves + mv -fv /var/config/PCSX2/sstates/* $rdhome/states/ps2/pcsx2 + mv -fv /var/config/PCSX2/memcards/* $rdhome/saves/ps2/memcards + + # Moving Citra saves from legacy location to 0.5.0b structure + + mv -fv $rdhome/saves/Citra/* $rdhome/saves/n3ds/citra + rmdir $rdhome/saves/Citra # Old folder cleanup + + versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves + + if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5 + migration_logfile=$rdhome/.logs/savemove_"$(date +"%Y_%m_%d_%I_%M_%p").log" + save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" + state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library." + + allgames=($(find "$roms_folder" -maxdepth 2 -mindepth 2 ! -name "systeminfo.txt" ! -name "systems.txt" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" ! -name "*^*" | sed -e "s/ /\^/g")) # Build an array of all games and multi-disc-game-containing folders, adding whitespace placeholder + + allsaves=($(find "$saves_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all save files, ignoring standalone emulator sub-folders, adding whitespace placeholder + + allstates=($(find "$states_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all state files, ignoring standalone emulator sub-folders, adding whitespace placeholder + + totalsaves=${#allsaves[@]} + totalstates=${#allstates[@]} + filesleft= + current_dest_folder= + gamestoskip= + + tar -C $rdhome -czf $save_backup_file saves # Backup save directory for safety + echo "Saves backed up to" $save_backup_file >> $migration_logfile + tar -C $rdhome -czf $state_backup_file states # Backup state directory for safety + echo "States backed up to" $state_backup_file >> $migration_logfile + + ( + movefile() { # Take matching save and rom files and sort save into appropriate system folder + echo "# $filesleft $currentlybeingmoved remaining..." # These lines update the Zenity progress bar + progress=$(( 100 - (( 100 / "$totalfiles" ) * "$filesleft" ))) + echo $progress + filesleft=$((filesleft-1)) + if [[ ! " ${gamestoskip[*]} " =~ " ${1} " ]]; then # If the current game name exists multiple times in array ie. /roms/snes/Mortal Kombat 3.zip and /roms/genesis/Mortal Kombat 3.zip, skip and alert user to sort manually + game=$(sed -e "s/\^/ /g" <<< "$1") # Remove whitespace placeholder + gamebasename=$(basename "$game" | sed -e 's/\..*//') # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + systemdir="$(basename "$(dirname "$1")")" # Extract parent directory identifying system ROM belongs to + matches=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -name "$gamebasename"".*" | sed -e 's/ /^/g' | sed -e 's/\..*//')) # Search for multiple instances of pure game name, adding to skip list if found + if [[ ${#matches[@]} -gt 1 ]]; then + echo "ERROR: Multiple ROMS found with name:" $gamebasename "Please sort saves and states for these ROMS manually" >> $migration_logfile + gamestoskip+=("$1") + return + fi + echo "INFO: Examining ROM file:" "$game" >> $migration_logfile + echo "INFO: System detected as" $systemdir >> $migration_logfile + sosfile=$(sed -e "s/\^/ /g" <<< "$2") # Remove whitespace placeholder from s-ave o-r s-tate file + sospurebasename="$(basename "$sosfile")" # Extract pure file name ie. /saves/game1.sav becomes game1 + echo "INFO: Current save or state being examined for match:" $sosfile >> $migration_logfile + echo "INFO: Matching save or state" $sosfile "and game" $game "found." >> $migration_logfile + echo "INFO: Moving save or state to" $current_dest_folder"/"$systemdir"/"$sosbasename >> $migration_logfile + if [[ ! -d $current_dest_folder"/"$systemdir ]]; then # If system directory doesn't exist for save yet, create it + echo "WARNING: Creating missing system directory" $current_dest_folder"/"$systemdir + mkdir $current_dest_folder/$systemdir + fi + mv "$sosfile" -t $current_dest_folder/$systemdir # Move save to appropriate system directory + return + else + echo "WARNING: Game with name" "$(basename "$1" | sed -e "s/\^/ /g")" "already found. Skipping to next game..." >> $migration_logfile # Inform user of game being skipped due to duplicate ROM names + fi + } + + find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> $migration_logfile # Warn user if any of their files have the whitespace replacement character used by the script + + totalfiles=$totalsaves #set variables for save file migration + filesleft=$totalsaves + currentlybeingmoved="saves" + current_dest_folder=$saves_folder + + for i in "${allsaves[@]}"; do # For each save file, compare to every ROM file name looking for a match + found= + currentsave=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /saves/game1.sav becomes game1 + for j in "${allgames[@]}"; do + currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + [[ $currentgame == $currentsave ]] && { found=1; break; } # If names match move to next stage, otherwise skip + done + [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for save file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded save file + done + + totalfiles=$totalstates #set variables for state file migration + filesleft=$totalstates + currentlybeingmoved="states" + current_dest_folder=$states_folder + + for i in "${allstates[@]}"; do # For each state file, compare to every ROM file name looking for a match + found= + currentstate=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /states/game1.sav becomes game1 + for j in "${allgames[@]}"; do + currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + [[ $currentgame == $currentstate ]] && { found=1; break; } # If names match move to next stage, otherwise skip + done + [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for state file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded state file + done + + ) | + zenity --progress \ + --icon-name=net.retrodeck.retrodeck \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title="Processing Files" \ + --text="# files remaining..." \ + --percentage=0 \ + --no-cancel \ + --auto-close + + if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord." + + else + cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log" + fi + + else + echo "Version" $version "is after the save and state organization was changed, no need to sort again" + fi +} diff --git a/functions/checks.sh b/functions/checks.sh new file mode 100644 index 00000000..bb93b322 --- /dev/null +++ b/functions/checks.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +check_network_connectivity() { + # This function will do a basic check for network availability and return "true" if it is working. + # USAGE: if [[ $(check_network_connectivity) == "true" ]]; then + + if [[ ! -z $(wget --spider -t 1 $remote_network_target_1 | grep "HTTP response 200") ]]; then + local network_connected="true" + elif [[ ! -z $(wget --spider -t 1 $remote_network_target_2 | grep "HTTP response 200") ]]; then + local network_connected="true" + elif [[ ! -z $(wget --spider -t 1 $remote_network_target_3 | grep "HTTP response 200") ]]; then + local network_connected="true" + else + local network_connected="false" + fi + + echo "$network_connected" +} + +check_desktop_mode() { + # This function will do a basic check of if we are running in Steam Deck game mode or not, and return "true" if we are outside of game mode + # USAGE: if [[ $(check_desktop_mode) == "true" ]]; then + + if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then + echo "true" + else + echo "false" + fi +} + +check_for_version_update() { + # This function will perform a basic online version check and alert the user if there is a new version available. + + wget -q --spider "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" + + if [ $? -eq 0 ]; then + local online_version=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + + if [[ ! "$update_ignore" == "$online_version" ]]; then + if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then + # choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ + # --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + # --title "RetroDECK Update Available" \ + # --text="There is a new version of RetroDECK on the stable release channel $online_version. Would you like to update to it?\n\n(depending on your internet speed this could takes several minutes).") + # rc=$? # Capture return code, as "Yes" button has no text value + # if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + # if [[ $choice == "Ignore this version" ]]; then + # set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks + # fi + # else # User clicked "Yes" + # configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." + # ( + # flatpak-spawn --host flatpak update --noninteractive -y net.retrodeck.retrodeck + # ) | + # zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + # --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + # --title "RetroDECK Updater" \ + # --text="Upgrade in process please wait (this could takes several minutes)." + # configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going." + # exit 1 + # fi + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Update Available" \ + --text="There is a new version of RetroDECK on the stable release channel $online_version. Please update through the Discover app!\n\nIf you would like to ignore this version and recieve a notification at the NEXT version,\nclick the \"Ignore this version\" button.") + rc=$? # Capture return code, as "OK" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "OK" was clicked + set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks + fi + elif [[ "$update_repo" == "RetroDECK-cooker" ]] && [[ ! $version == $online_version ]]; then + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Update Available" \ + --text="There is a more recent build of the RetroDECK cooker branch.\nYou are running version $hard_version, the latest is $online_version.\n\nWould you like to update to it?\nIf you would like to skip reminders about this version, click \"Ignore this version\".\nYou will be reminded again at the next version update.\n\nIf you would like to disable these update notifications entirely, disable Online Update Checks in the Configurator.") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "Ignore this version" ]]; then + set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks. + fi + else # User clicked "Yes" + configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." + ( + local latest_cooker_download=$(curl --silent https://api.github.com/repos/XargonWan/$update_repo/releases/latest | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/') + mkdir -p "$rdhome/RetroDECK_Updates" + wget -P "$rdhome/RetroDECK_Updates" $latest_cooker_download + flatpak-spawn --host flatpak remove --noninteractive -y net.retrodeck.retrodeck # Remove current version before installing new one, to avoid duplicates + flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK-cooker.flatpak" + rm -rf "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Updater" \ + --text="RetroDECK is updating to the latest version, please wait." + configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going." + exit 1 + fi + fi + fi + else # Unable to reach the GitHub API for some reason + configurator_generic_dialog "RetroDECK Online Update" "RetroDECK is unable to reach the GitHub API to perform a version check.\nIt's possible that location is being blocked by your network or ISP.\n\nIf the problem continues, you will need to disable internal checks through the Configurator\nand perform updates manually through the Discover store." + fi +} + +validate_input() { + while IFS="^" read -r input action + do + if [[ "$input" == "$1" ]]; then + eval "$action" + input_validated="true" + fi + done < $input_validation +} diff --git a/functions/compression.sh b/functions/compression.sh new file mode 100644 index 00000000..72876292 --- /dev/null +++ b/functions/compression.sh @@ -0,0 +1,183 @@ +#!/bin/bash + +compress_game() { + # Function for compressing one or more files to .chd format + # USAGE: compress_game $format $full_path_to_input_file + local file="$2" + local filename_no_path=$(basename "$file") + local filename_no_extension="${filename_no_path%.*}" + local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") + local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" + + if [[ "$1" == "chd" ]]; then + /app/bin/chdman createcd -i "$source_file" -o "$dest_file".chd + elif [[ "$1" == "zip" ]]; then + zip -jq9 "$dest_file".zip "$source_file" + elif [[ "$1" == "rvz" ]]; then + dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz" + fi +} + +find_compatible_compression_format() { + # This function will determine what compression format, if any, the file and system are compatible with + # USAGE: find_compatible_compression_format "$file" + local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]') + local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") + + if [[ $(validate_for_chd "$1") == "true" ]] && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "chd" ]]; then + echo "chd" + elif grep -qF ".${normalized_filename##*.}" $zip_compressable_extensions && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "zip" ]]; then + echo "zip" + elif echo "$normalized_filename" | grep -qE '\.iso|\.gcm' && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "rvz" ]]; then + echo "rvz" + else + # If no compatible format can be found for the input file + echo "none" + fi +} + +validate_for_chd() { + # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY + # USAGE: validate_for_chd $input_file + + local file="$1" + local normalized_filename=$(echo "$file" | tr '[:upper:]' '[:lower:]') + local file_validated="false" + chd_validation_log_file="compression_$(basename "$file").log" + echo "Validating file:" "$file" > "$logs_folder/$chd_validation_log_file" + if echo "$normalized_filename" | grep -qE '\.iso|\.cue|\.gdi'; then + echo ".cue/.iso/.gdi file detected" >> "$logs_folder/$chd_validation_log_file" + local file_path=$(dirname "$(realpath "$file")") + local file_base_name=$(basename "$file") + local file_name=${file_base_name%.*} + if [[ "$normalized_filename" == *".cue" ]]; then # Validate .cue file + if [[ ! "$file_path" == *"dreamcast"* ]]; then # .bin/.cue compression may not work for Dreamcast, only GDI or ISO # TODO: verify + echo "Validating .cue associated .bin files" >> "$logs_folder/$chd_validation_log_file" + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + echo "Associated bin files read:" >> "$logs_folder/$chd_validation_log_file" + printf '%s\n' "$cue_bin_files" >> "$logs_folder/$chd_validation_log_file" + if [[ ! -z "$cue_bin_files" ]]; then + while IFS= read -r line + do + echo "looking for $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + if [[ -f "$file_path/$line" ]]; then + echo ".bin file found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + file_validated="true" + else + echo ".bin file NOT found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + echo ".cue file could not be validated. Please verify your .cue file contains the correct corresponding .bin file information and retry." >> "$logs_folder/$chd_validation_log_file" + file_validated="false" + break + fi + done < <(printf '%s\n' "$cue_bin_files") + fi + else + echo ".cue files not compatible with Dreamcast CHD compression" >> "$logs_folder/$chd_validation_log_file" + fi + echo $file_validated + else # If file is a .iso or .gdi + file_validated="true" + echo $file_validated + fi + else + echo "File type not recognized. Supported file types are .cue, .gdi and .iso" >> "$logs_folder/$chd_validation_log_file" + echo $file_validated + fi +} + +cli_compress_single_game() { + # This function will compress a single file passed from the CLI arguments + # USAGE: cli_compress_single_game $full_file_path + local file=$(realpath "$1") + read -p "Do you want to have the original file removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup + read -p "RetroDECK will now attempt to compress your selected game. Press Enter key to continue..." + if [[ ! -z "$file" ]]; then + if [[ -f "$file" ]]; then + check_system=$(echo "$file" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") + local compatible_compression_format=$(find_compatible_compression_format "$file") + if [[ ! $compatible_compression_format == "none" ]]; then + echo "$(basename "$file") can be compressed to $compatible_compression_format" + compress_game "$compatible_compression_format" "$file" + if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested + if [[ $(basename "$file") == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file $(basename "$file")" + rm -f "$file" + else + echo "Removing original file $(basename "$file")" + rm -f "$file" + fi + fi + else + echo "$(basename "$file") does not have any compatible compression formats." + fi + else + echo "File not found, please specify the full path to the file to be compressed." + fi + else + echo "Please use this command format \"--compress-one \"" + fi +} + +cli_compress_all_games() { + if echo "$1" | grep -qE 'chd|rvz|zip'; then + local compression_format="$1" + elif [[ "$1" == "all" ]]; then + local compression_format="all" + else + echo "Please enter a supported compression format. Options are \"chd\", \"rvz\", \"zip\" or \"all\"" + exit 1 + fi + local compressable_game="" + local all_compressable_games=() + if [[ $compression_format == "all" ]]; then + local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') + else + local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') + fi + + read -p "Do you want to have the original files removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup + read -p "RetroDECK will now attempt to compress all compatible games. Press Enter key to continue..." + + while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type + do + local compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") + if [[ ! -z "$compression_candidates" ]]; then + echo "Checking files for $system" + while IFS= read -r file + do + local compatible_compression_format=$(find_compatible_compression_format "$file") + if [[ ! "$compatible_compression_format" == "none" ]]; then + echo "$(basename "$file") can be compressed to $compatible_compression_format" + compress_game "$compatible_compression_format" "$file" + if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file "$file"" + rm -f $(realpath "$file") + else + echo "Removing original file "$file"" + rm -f $(realpath "$file") + fi + fi + else + echo "No compatible compression format found for $(basename "$file")" + fi + done < <(printf '%s\n' "$compression_candidates") + else + echo "No compatible files found for compression in $system" + fi + done < <(printf '%s\n' "$compressable_systems_list") +} diff --git a/functions/dialogs.sh b/functions/dialogs.sh new file mode 100644 index 00000000..00393287 --- /dev/null +++ b/functions/dialogs.sh @@ -0,0 +1,242 @@ +#!/bin/bash + +debug_dialog() { + # This function is for displaying commands run by the Configurator without actually running them + # USAGE: debug_dialog "command" + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Debug Dialog" \ + --text="$1" +} + +configurator_process_complete_dialog() { + # This dialog shows when a process is complete. + # USAGE: configurator_process_complete_dialog "process text" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Process Complete" \ + --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK." + + if [ ! $? == 0 ] # OK button clicked + then + configurator_welcome_dialog + fi +} + +configurator_generic_dialog() { + # This dialog is for showing temporary messages before another process happens. + # USAGE: configurator_generic_dialog "title text" "info text" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "$1" \ + --text="$2" +} + +configurator_generic_question_dialog() { + # This dialog provides a generic dialog for getting a response from a user. + # USAGE: $(configurator_generic_question_dialog "title text" "action text") + # This function will return a "true" if the user clicks "Yes", and "false" if they click "No". + choice=$(zenity --title "RetroDECK - $1" --question --no-wrap --cancel-label="No" --ok-label="Yes" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + if [[ $? == "0" ]]; then + echo "true" + else + echo "false" + fi +} + +configurator_destination_choice_dialog() { + # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations. + # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text") + # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location" + choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + + local rc=$? + if [[ $rc == "0" ]] && [[ -z "$choice" ]]; then + echo "Back" + else + echo $choice + fi +} + +configurator_reset_confirmation_dialog() { + # This dialog provides a confirmation for any reset functions, before the reset is actually performed. + # USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text") + # This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel. + choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + if [[ $? == "0" ]]; then + echo "true" + else + echo "false" + fi +} + +configurator_move_folder_dialog() { + # This dialog will take a folder variable name from retrodeck.cfg and move it to a new location. The variable will be updated in retrodeck.cfg as well as any emulator configs where it occurs. + # USAGE: configurator_move_folder_dialog "folder_variable_name" + local rd_dir_name="$1" # The folder variable name from retrodeck.cfg + local dir_to_move="$(get_setting_value "$rd_conf" "$rd_dir_name" "retrodeck" "paths")/" # The path of that folder variable + local source_root="$(echo $dir_to_move | sed -e 's/\(.*\)\/retrodeck\/.*/\1/')" # The root path of the folder, excluding retrodeck/. So /home/deck/retrodeck/roms becomes /home/deck + if [[ ! "$rd_dir_name" == "rdhome" ]]; then # If a sub-folder is being moved, find it's path without the source_root. So /home/deck/retrodeck/roms becomes retrodeck/roms + local rd_dir_path="$(echo "$dir_to_move" | sed "s/.*\(retrodeck\/.*\)/\1/; s/\/$//")" + else # Otherwise just set the retrodeck root folder + local rd_dir_path="$(basename $dir_to_move)" + fi + + if [[ -d "$dir_to_move" ]]; then # If the directory selected to move already exists at the expected location pulled from retrodeck.cfg + choice=$(configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the $(basename $dir_to_move) folder.") + case $choice in + + "Internal Storage" | "SD Card" | "Custom Location" ) # If the user picks a location + if [[ "$choice" == "Internal Storage" ]]; then # If the user wants to move the folder to internal storage, set the destination target as HOME + local dest_root="$HOME" + elif [[ "$choice" == "SD Card" ]]; then # If the user wants to move the folder to the predefined SD card location, set the target as sdcard from retrodeck.cfg + local dest_root="$sdcard" + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "Select the parent folder you would like to store the $(basename $dir_to_move) folder in." + local dest_root=$(directory_browse "RetroDECK directory location") # Set the destination root as the selected custom location + fi + + if [[ (! -z "$dest_root") && ( -w "$dest_root") ]]; then # If user picked a destination and it is writable + if [[ (-d "$dest_root/$rd_dir_path") && (! -L "$dest_root/$rd_dir_path") && (! $rd_dir_name == "rdhome") ]] || [[ "$(realpath $dir_to_move)" == "$dest_root/$rd_dir_path" ]]; then # If the user is trying to move the folder to where it already is (excluding symlinks that will be unlinked) + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The $(basename $dir_to_move) folder is already at that location, please pick a new one." + configurator_move_folder_dialog "$rd_dir_name" + else + if [[ $(verify_space "$(echo $dir_to_move | sed 's/\/$//')" "$dest_root") ]]; then # Make sure there is enough space at the destination + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "Moving $(basename $dir_to_move) folder to $choice" + unlink "$dest_root/$rd_dir_path" # In case there is already a symlink at the picked destination + move "$dir_to_move" "$dest_root/$rd_dir_path" + if [[ -d "$dest_root/$rd_dir_path" ]]; then # If the move succeeded + eval "$rd_dir_name"="$dest_root/$rd_dir_path" # Set the new path for that folder variable in retrodeck.cfg + if [[ "$rd_dir_name" == "rdhome" ]]; then # If the whole retrodeck folder was moved... + prepare_emulator "postmove" "retrodeck" + fi + prepare_emulator "postmove" "all" # Update all the appropriate emulator path settings + conf_write # Write the settings to retrodeck.cfg + if [[ -z $(ls -1 "$source_root/retrodeck") ]]; then # Cleanup empty old_path/retrodeck folder if it was left behind + rmdir "$source_root/retrodeck" + fi + configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage" + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The moving process was not completed, please try again." + fi + else # If there isn't enough space in the picked destination + zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move Directories" \ + --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." + fi + fi + else # If the user didn't pick any custom destination, or the destination picked is unwritable + if [[ ! -z "$dest_root" ]]; then + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "No destination was chosen, so no files have been moved." + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The chosen destination is not writable.\nNo files have been moved.\n\nThis can happen when trying to select a location that RetroDECK does not have permission to write.\nThis can normally be fixed by adding the desired path to the RetroDECK permissions with Flatseal." + fi + fi + ;; + + esac + else # The folder to move was not found at the path pulled from retrodeck.cfg and it needs to be reconfigured manually. + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The $(basename $dir_to_move) folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the folder." + dir_to_move=$(directory_browse "RetroDECK $(basename $dir_to_move) directory location") + eval "$rd_dir_name"="$dir_to_move" + prepare_emulator "postmove" "all" + conf_write + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "RetroDECK $(basename $dir_to_move) folder now configured at\n$dir_to_move." + configurator_move_folder_dialog "$rd_dir_name" + fi +} + +changelog_dialog() { + # This function will pull the changelog notes from the version it is passed (which must match the appdata version tag) from the net.retrodeck.retrodeck.appdata.xml file + # The function also accepts "all" as a version, and will print the entire changelog + # USAGE: changelog_dialog "version" + + if [[ "$1" == "all" ]]; then + xml sel -t -m "//release" -v "concat('RetroDECK version: ', @version)" -n -v "description" -n $rd_appdata | awk '{$1=$1;print}' | sed -e '/./b' -e :n -e 'N;s/\n$//;tn' > "/var/config/retrodeck/changelog.txt" + + zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Changelogs" \ + --filename="/var/config/retrodeck/changelog.txt" + else + local version_changelog=$(xml sel -t -m "//release[@version='$1']/description" -v . -n $rd_appdata | tr -s '\n' | sed 's/^\s*//') + + echo -e "In RetroDECK version $1, the following changes were made:\n$version_changelog" > "/var/config/retrodeck/changelog-partial.txt" + "$version_changelog" >> "/var/config/retrodeck/changelog-partial.txt" + + zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Changelogs" \ + --filename="/var/config/retrodeck/changelog-partial.txt" + fi +} + +get_cheevos_token_dialog() { + # This function will return a RetroAchvievements token from a valid username and password, will return "login failed" otherwise + # USAGE: get_cheevos_token_dialog + + local cheevos_info=$(zenity --forms --title="Cheevos" \ + --text="Username and password." \ + --separator="^" \ + --add-entry="Username" \ + --add-password="Password") + + IFS='^' read -r cheevos_username cheevos_password < <(printf '%s\n' "$cheevos_info") + local cheevos_response=$(curl --silent --data "r=login&u=$cheevos_username&p=$cheevos_password" $RA_API_URL) + local cheevos_success=$(echo $cheevos_response | jq .Success | tr -d '"') + local cheevos_token=$(echo $cheevos_response | jq .Token | tr -d '"') + local cheevos_login_timestamp=$(date +%s) + if [[ "$cheevos_success" == "true" ]]; then + echo "$cheevos_username,$cheevos_token,$cheevos_login_timestamp" + else + echo "failed" + fi +} + +desktop_mode_warning() { + # This function is a generic warning for issues that happen when running in desktop mode. + # Running in desktop mode can be verified with the following command: if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then + # This function will check if desktop mode is currently being used and if the warning has not been disabled, and show it if needed. + # USAGE: desktop_mode_warning + + if [[ $(check_desktop_mode) == "true" && $desktop_mode_warning == "true" ]]; then + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Desktop Mode Warning" \ + --text="You appear to be running RetroDECK in the Steam Deck's Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck's normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "No" ]]; then + exit 1 + elif [[ $choice == "Never show this again" ]]; then + set_setting_value $rd_conf "desktop_mode_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks + fi + fi + fi +} + +low_space_warning() { + # This function will verify that the drive with the $HOME path on it has at least 10% space free, so the user can be warned before it fills up + # USAGE: low_space_warning + + if [[ $low_space_warning == "true" ]]; then + local used_percent=$(df --output=pcent "$HOME" | tail -1 | tr -d " " | tr -d "%") + if [[ "$used_percent" -ge 90 && -d "$HOME/retrodeck" ]]; then # If there is any RetroDECK data on the main drive to move + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Never show this again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Low Space Warning" \ + --text="Your main drive is over 90% full!\n\nIf your drive fills completely this can lead to data loss or system crash.\n\nPlease consider moving some RetroDECK folders to other storage locations using the Configurator.") + if [[ $choice == "Never show this again" ]]; then + set_setting_value $rd_conf "low_space_warning" "false" retrodeck "options" # Store low space warning variable for future checks + fi + fi + fi +} diff --git a/functions/functions.sh b/functions/functions.sh new file mode 100644 index 00000000..e34a56a6 --- /dev/null +++ b/functions/functions.sh @@ -0,0 +1,535 @@ +#!/bin/bash + +directory_browse() { + # This function browses for a directory and returns the path chosen + # USAGE: path_to_be_browsed_for=$(directory_browse $action_text) + + local path_selected=false + + while [ $path_selected == false ] + do + local target="$(zenity --file-selection --title="Choose $1" --directory)" + if [ ! -z $target ] #yes + then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="Directory $target chosen, is this correct?" + if [ $? == 0 ] + then + path_selected=true + echo $target + break + fi + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="No directory selected. Do you want to exit the selection process?" + if [ $? == 0 ] + then + break + fi + fi + done +} + +file_browse() { + # This function browses for a file and returns the path chosen + # USAGE: file_to_be_browsed_for=$(file_browse $action_text) + + local file_selected=false + + while [ $file_selected == false ] + do + local target="$(zenity --file-selection --title="Choose $1")" + if [ ! -z "$target" ] #yes + then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="File $target chosen, is this correct?" + if [ $? == 0 ] + then + file_selected=true + echo "$target" + break + fi + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="No file selected. Do you want to exit the selection process?" + if [ $? == 0 ] + then + break + fi + fi + done +} + +verify_space() { + # Function used for verifying adequate space before moving directories around + # USAGE: verify_space $source_dir $dest_dir + # Function returns "true" if there is enough space, "false" if there is not + + source_size=$(du -sk "$1" | awk '{print $1}') + source_size=$((source_size+(source_size/10))) # Add 10% to source size for safety + dest_avail=$(df -k --output=avail "$2" | tail -1) + + if [[ $source_size -ge $dest_avail ]]; then + echo "false" + else + echo "true" + fi +} + +move() { + # Function to move a directory from one parent to another + # USAGE: move $source_dir $dest_dir + + source_dir="$(echo $1 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing + dest_dir="$(echo $2 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing + + ( + rsync -a --remove-source-files --ignore-existing --mkpath "$source_dir" "$dest_dir" # Copy files but don't overwrite conflicts + find "$source_dir" -type d -empty -delete # Cleanup empty folders that were left behind + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move in Progress" \ + --text="Moving directory $(basename "$1") to new location of $2, please wait." + + if [[ -d "$source_dir" ]]; then # Some conflicting files remain + zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move Directories" \ + --text="There were some conflicting files that were not moved.\n\nAll files that could be moved are in the new location,\nany files that already existed at the new location have not been moved and will need to be handled manually." + fi +} + +update_rd_conf() { + # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. + # USAGE: update_rd_conf + + # STAGE 1: For current files that haven't been broken into sections yet, where every setting name is unique + + conf_read # Read current settings into memory + mv -f $rd_conf $rd_conf_backup # Backup config file before update + cp $rd_defaults $rd_conf # Copy defaults file into place + conf_write # Write old values into new default file + + # STAGE 2: To handle presets sections that use duplicate setting names + + mv -f $rd_conf $rd_conf_backup # Backup config file agiain before update but after Stage 1 expansion + generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck # Create a patch file for differences between defaults and current user settings + sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file + deploy_single_patch $rd_defaults $rd_update_patch $rd_conf # Re-apply user settings to defaults file + set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg + rm -f $rd_update_patch # Cleanup temporary patch file + conf_read # Read all settings into memory + + # STAGE 3: Eliminate any preset incompatibility with existing user settings and new defaults + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then + local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local system_enabled=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$current_section") # Read the variables value from active retrodeck.cfg + local default_setting=$(get_setting_value "$rd_defaults" "$system_name" "retrodeck" "$current_section") # Read the variable value from the retrodeck defaults + if [[ "$system_enabled" == "true" ]]; then + while IFS=: read -r preset_being_checked known_incompatible_preset; do + if [[ "$current_section" == "$preset_being_checked" ]]; then + if [[ $(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$known_incompatible_preset") == "true" ]]; then + set_setting_value "$rd_conf" "$system_name" "false" "retrodeck" "$current_section" + fi + fi + done < "$incompatible_presets_reference_list" + fi + fi + fi + fi + done < $rd_conf +} + +conf_read() { + # This function will read the RetroDECK config file into memory + # USAGE: conf_read + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ "$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" ]]; then + local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg + eval "$current_setting_name=$current_setting_value" # Write the current setting name and value to memory + fi + fi + fi + done < $rd_conf +} + +conf_write() { + # This function will update the RetroDECK config file with matching variables from memory + # USAGE: conf_write + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ "$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" ]]; then + local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg + local memory_setting_value=$(eval "echo \$${current_setting_name}") # Read the variable names' value from memory + if [[ ! "$current_setting_value" == "$memory_setting_value" && ! -z "$memory_setting_value" ]]; then # If the values are different... + set_setting_value "$rd_conf" "$current_setting_name" "$memory_setting_value" "retrodeck" "$current_section" # Update the value in retrodeck.cfg + fi + fi + fi + fi + done < $rd_conf +} + +dir_prep() { + # This script is creating a symlink preserving old folder contents and moving them in the new one + + # Call me with: + # dir prep "real dir" "symlink location" + real="$1" + symlink="$2" + + echo -e "\n[DIR PREP]\nMoving $symlink in $real" #DEBUG + + # if the symlink dir is already a symlink, unlink it first, to prevent recursion + if [ -L "$symlink" ]; + then + echo "$symlink is already a symlink, unlinking to prevent recursives" #DEBUG + unlink "$symlink" + fi + + # if the dest dir exists we want to backup it + if [ -d "$symlink" ]; + then + echo "$symlink found" #DEBUG + mv -f "$symlink" "$symlink.old" + fi + + # if the real dir is already a symlink, unlink it first + if [ -L "$real" ]; + then + echo "$real is already a symlink, unlinking to prevent recursives" #DEBUG + unlink "$real" + fi + + # if the real dir doesn't exist we create it + if [ ! -d "$real" ]; + then + echo "$real not found, creating it" #DEBUG + mkdir -pv "$real" + fi + + # creating the symlink + echo "linking $real in $symlink" #DEBUG + mkdir -pv "$(dirname "$symlink")" # creating the full path except the last folder + ln -svf "$real" "$symlink" + + # moving everything from the old folder to the new one, delete the old one + if [ -d "$symlink.old" ]; + then + echo "Moving the data from $symlink.old to $real" #DEBUG + mv -f "$symlink.old"/{.[!.],}* $real + echo "Removing $symlink.old" #DEBUG + rm -rf "$symlink.old" + fi + + echo -e "$symlink is now $real\n" +} + +update_rpcs3_firmware() { + ( + mkdir -p "$roms_folder/ps3/tmp" + chmod 777 "$roms_folder/ps3/tmp" + wget "$rpcs3_firmware" -P "$roms_folder/ps3/tmp/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK RPCS3 Firmware Download" \ + --text="RetroDECK downloading the RPCS3 firmware, please wait." + rpcs3 --installfw "$roms_folder/ps3/tmp/PS3UPDAT.PUP" + rm -rf "$roms_folder/ps3/tmp" +} + +backup_retrodeck_userdata() { + mkdir -p "$backups_folder" + zip -rq9 "$backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip" "$saves_folder" "$states_folder" "$bios_folder" "$media_folder" "$themes_folder" "$logs_folder" "$screenshots_folder" "$mods_folder" "$texture_packs_folder" "$borders_folder" > $logs_folder/$(date +"%0m%0d")_backup_log.log +} + +make_name_pretty() { + # This function will take an internal system name (like "gbc") and return a pretty version for user display ("Nintendo GameBoy Color") + # USAGE: make_name_pretty "system name" + local system=$(grep "$1^" "$pretty_system_names_reference_list") + IFS='^' read -r internal_name pretty_name < <(echo "$system") + echo "$pretty_name" +} + +finit_browse() { +# Function for choosing data directory location during first/forced init +path_selected=false +while [ $path_selected == false ] +do + local target="$(zenity --file-selection --title="Choose RetroDECK data directory location" --directory)" + if [[ ! -z "$target" ]]; then + if [[ -w "$target" ]]; then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ + --cancel-label="No" \ + --ok-label "Yes" \ + --text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?" + if [ $? == 0 ] #yes + then + path_selected=true + echo "$target/retrodeck" + break + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?" + if [ $? == 0 ] # yes, quit + then + exit 2 + fi + fi + fi + else + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Quit" \ + --text="No location was selected. Please run RetroDECK again to retry." + exit 2 + fi +done +} + +finit_user_options_dialog() { + finit_available_options=() + + while IFS="^" read -r enabled option_name option_desc option_tag + do + finit_available_options=("${finit_available_options[@]}" "$enabled" "$option_name" "$option_desc" "$option_tag") + done < $finit_options_list + + + local choices=$(zenity \ + --list --width=1200 --height=720 \ + --checklist --hide-column=4 --ok-label="Confirm Selections" --extra-button="Enable All" \ + --separator=" " --print-column=4 \ + --text="Choose which options to enable:" \ + --column "Enabled?" \ + --column "Option" \ + --column "Description" \ + --column "option_flag" \ + "${finit_available_options[@]}") + + echo "${choices[*]}" +} + +finit() { +# Force/First init, depending on the situation + + echo "Executing finit" + + # Internal or SD Card? + local finit_dest_choice=$(configurator_destination_choice_dialog "RetroDECK data" "Welcome to the first configuration of RetroDECK.\nThe setup will be quick but please READ CAREFULLY each message in order to avoid misconfigurations.\n\nWhere do you want your RetroDECK data folder to be located?\n\nThis folder will contain all ROMs, BIOSs and scraped data." ) + echo "Choice is $finit_dest_choice" + + case $finit_dest_choice in + + "Back" | "" ) # Back or X button quits + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + echo "Now quitting" + exit 2 + ;; + + "Internal Storage" ) # Internal + echo "Internal selected" + rdhome="$HOME/retrodeck" + if [[ -L $rdhome ]]; then #Remove old symlink from existing install, if it exists + unlink $rdhome + fi + ;; + + "SD Card" ) + echo "SD Card selected" + if [ ! -d "$sdcard" ] # SD Card path is not existing + then + echo "Error: SD card not found" + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Browse" \ + --text="SD Card was not find in the default location.\nPlease choose the SD Card root.\nA retrodeck folder will be created starting from the directory that you selected." + rdhome=$(finit_browse) # Calling the browse function + if [[ -z $rdhome ]]; then # If user hit the cancel button + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + exit 2 + fi + elif [ ! -w "$sdcard" ] #SD card found but not writable + then + echo "Error: SD card found but not writable" + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Quit" \ + --text="SD card was found but is not writable\nThis can happen with cards formatted on PC.\nPlease format the SD card through the Steam Deck's Game Mode and run RetroDECK again." + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + echo "Now quitting" + exit 2 + else + rdhome="$sdcard/retrodeck" + fi + ;; + + "Custom Location" ) + echo "Custom Location selected" + zenity --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Browse" \ + --text="Please choose the root folder for the RetroDECK data.\nA retrodeck folder will be created starting from the directory that you selected." + rdhome=$(finit_browse) # Calling the browse function + if [[ -z $rdhome ]]; then # If user hit the cancel button + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + exit 2 + fi + ;; + + esac + + prepare_emulator "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders + + conf_write # Write the new values to retrodeck.cfg + + configurator_generic_dialog "RetroDECK Initial Setup" "The next dialog will be a list of optional actions to take during the initial setup.\n\nIf you choose to not do any of these now, they can be done later through the Configurator." + local finit_options_choices=$(finit_user_options_dialog) + + if [[ "$finit_options_choices" =~ (rpcs3_firmware|Enable All) ]]; then # Additional information on the firmware install process, as the emulator needs to be manually closed + configurator_generic_dialog "RPCS3 Firmware Install" "You have chosen to install the RPCS3 firmware during the RetroDECK first setup.\n\nThis process will take several minutes and requires network access.\n\nRPCS3 will be launched automatically at the end of the RetroDECK setup process.\nOnce the firmware is installed, please close the emulator to finish the process." + fi + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ + --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." + + ( + prepare_emulator "reset" "all" + build_retrodeck_current_presets + deploy_helper_files + + # Optional actions based on user choices + if [[ "$finit_options_choices" =~ (rpcs3_firmware|Enable All) ]]; then + if [[ $(check_network_connectivity) == "true" ]]; then + update_rpcs3_firmware + fi + fi + if [[ "$finit_options_choices" =~ (rd_controller_profile|Enable All) ]]; then + install_retrodeck_controller_profile + fi + if [[ "$finit_options_choices" =~ (rd_prepacks|Enable All) ]]; then + install_retrodeck_starterpack + fi + + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Initialization" \ + --text="RetroDECK is finishing the initial setup process, please wait." + + create_lock +} + +install_retrodeck_starterpack() { + # This function will install the roms, gamelists and metadata for the RetroDECK Starter Pack, a curated selection of games the creators of RetroDECK enjoy. + # USAGE: install_retrodeck_starterpack + + ## DOOM section ## + cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it + mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" + if [[ ! -f "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" ]]; then # Don't overwrite an existing gamelist + cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" + fi + mkdir -p "$media_folder/doom" + unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" +} + +install_retrodeck_controller_profile() { + # This function will install the needed files for the custom RetroDECK controller profile + # NOTE: These files need to be stored in shared locations for Steam, outside of the normal RetroDECK folders and should always be an optional user choice + # BIGGER NOTE: As part of this process, all emulators will need to have their configs hard-reset to match the controller mappings of the profile + # USAGE: install_retrodeck_controller_profile + if [[ -d "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/" && -d "$HOME/.steam/steam/controller_base/templates/" ]]; then + rsync -rlD --mkpath "/app/retrodeck/binding_icons/" "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/" + cp -f "$emuconfigs/defaults/retrodeck/controller_configs/*.vdf" "$HOME/.steam/steam/controller_base/templates" + else + configurator_generic_dialog "RetroDECK Controller Profile Install" "The target directories for the controller profile do not exist.\n\nThis may happen if you do not have Steam installed or the location is does not have permission to be read." + fi +} + +create_lock() { + # creating RetroDECK's lock file and writing the version in the config file + version=$hard_version + touch "$lockfile" + conf_write +} + +update_splashscreens() { + # This script will purge any existing ES graphics and reload them from RO space into somewhere ES will look for it + # USAGE: update_splashscreens + + rm -rf /var/config/emulationstation/.emulationstation/resources/graphics + rsync -rlD --mkpath "/app/retrodeck/graphics/" "/var/config/emulationstation/.emulationstation/resources/graphics/" +} + +deploy_helper_files() { + # This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list + # USAGE: deploy_helper_files + + while IFS='^' read -r file dest + do + if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then + eval current_dest="$dest" + cp -f "$helper_files_folder/$file" "$current_dest/$file" + fi + + done < "$helper_files_list" +} + +easter_eggs() { + # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in easter_egg_checklist.cfg + # The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file + # Ex. The line "1001^1031^0000^2359^spooky.svg" would show the file "spooky.svg" during any time of day in the month of October + # The easter_egg_checklist.cfg is read in order, so lines higher in the file will have higher priority in the event of an overlap + # USAGE: easter_eggs + current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges + current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges + if [[ ! -z $(cat $easter_egg_checklist) ]]; then + while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values + do + if [[ $current_day -ge "$start_date" && $current_day -le "$end_date" && $current_time -ge "$start_time" && $current_time -le "$end_time" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed + new_splash_file="$splashscreen_dir/$splash_file" + break + else # When there are no matches, the default splash screen is set to deploy + new_splash_file="$default_splash_file" + fi + done < $easter_egg_checklist + else + new_splash_file="$default_splash_file" + fi + + cp -f "$new_splash_file" "$current_splash_file" # Deploy assigned splash screen +} + +start_retrodeck() { + easter_eggs # Check if today has a surprise splashscreen and load it if so + # normal startup + echo "Starting RetroDECK v$version" + emulationstation --home /var/config/emulationstation +} diff --git a/global.sh b/functions/global.sh old mode 100755 new mode 100644 similarity index 66% rename from global.sh rename to functions/global.sh index 67c73288..93dbb93c --- a/global.sh +++ b/functions/global.sh @@ -2,7 +2,16 @@ # This file is containing some global function needed for the script such as the config file tools +source /app/libexec/050_save_migration.sh +source /app/libexec/checks.sh +source /app/libexec/compression.sh +source /app/libexec/dialogs.sh source /app/libexec/functions.sh +source /app/libexec/multi_user.sh +source /app/libexec/patching.sh +source /app/libexec/post_update.sh +source /app/libexec/prepare_emulator.sh +source /app/libexec/presets.sh # Static variables rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path @@ -14,31 +23,35 @@ bios_checklist="$emuconfigs/defaults/retrodeck/reference_lists/bios_checklist.cf compression_targets="$emuconfigs/defaults/retrodeck/reference_lists/compression_targets.cfg" # A config file containing supported compression types per system zip_compressable_extensions="$emuconfigs/defaults/retrodeck/reference_lists/zip_compressable_extensions.cfg" # A config file containing every file extension that is allowed to be compressed to .zip format, because there are a lot! easter_egg_checklist="$emuconfigs/defaults/retrodeck/reference_lists/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up -input_validation="$emuconfigs/defaults/retrodeck/reference_lists/input_validation.cfg" # List of valid CLI inputs -splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra-splashes" # The default location of extra splash screens +input_validation="$emuconfigs/defaults/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs +finit_options_list="$emuconfigs/defaults/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit +splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra_splashes" # The default location of extra splash screens current_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash.svg" # The active splash file that will be shown on boot default_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen -multi_user_data_folder="$rdhome/multi-user-data" # The default location of multi-user environment profiles multi_user_emulator_config_dirs="$emuconfigs/defaults/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg" # A list of emulator config folders that can be safely linked/unlinked entirely in multi-user mode -backups_folder="$rdhome/backups" # A standard location for backup file storage rd_es_themes="/app/share/emulationstation/themes" # The directory where themes packaged with RetroDECK are stored lockfile="/var/config/retrodeck/.lock" # where the lockfile is located default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem) rd_repo="https://github.com/XargonWan/RetroDECK" # The URL of the main RetroDECK GitHub repo es_themes_list="https://gitlab.com/es-de/themes/themes-list/-/raw/master/themes.json" # The URL of the ES-DE 2.0 themes list -remote_network_target="https://one.one.one.one" # The URL of a common internet target for testing network access +remote_network_target_1="https://flathub.org" # The URL of a common internet target for testing network access +remote_network_target_2="$rd_repo" # The URL of a common internet target for testing network access +remote_network_target_3="https://one.one.one.one" # The URL of a common internet target for testing network access helper_files_folder="$emuconfigs/defaults/retrodeck/helper_files" # The parent folder of RetroDECK documentation files for deployment helper_files_list="$emuconfigs/defaults/retrodeck/reference_lists/helper_files_list.cfg" # The list of files to be deployed and where they go +rd_appdata="/app/share/appdata/net.retrodeck.retrodeck.appdata.xml" # The shipped appdata XML file for this version rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2023_0228_05fe32f5dc8c78acbcd84d36ee7fdc5b/PS3UPDAT.PUP" +RA_API_URL="https://retroachievements.org/dorequest.php" # API URL for RetroAchievements.org +presets_dir="$emuconfigs/defaults/retrodeck/presets" # Repository for all system preset config files +incompatible_presets_reference_list="$emuconfigs/defaults/retrodeck/reference_lists/incompatible_presets.cfg" # A config file listing all incompatible presets for reference (eg. cannot have borders and widescreen enabled simultaniously) +pretty_system_names_reference_list="$emuconfigs/defaults/retrodeck/reference_lists/pretty_system_names.cfg" # An internal translation list for turning internal names (eg. gbc) to "pretty" names (Nintendo GameBoy Color) # Config files for emulators with single config files -cemuconf="/var/config/Cemu/settings.xml" citraconf="/var/config/citra-emu/qt-config.ini" -duckstationconf="/var/data/duckstation/settings.ini" +duckstationconf="/var/config/duckstation/settings.ini" melondsconf="/var/config/melonDS/melonDS.ini" -ppssppconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp.ini" ryujinxconf="/var/config/Ryujinx/Config.json" xemuconf="/var/config/xemu/xemu.toml" yuzuconf="/var/config/yuzu/qt-config.ini" @@ -52,6 +65,11 @@ es_settings="/var/config/emulationstation/.emulationstation/es_settings.xml" raconf="/var/config/retroarch/retroarch.cfg" ra_core_conf="/var/config/retroarch/retroarch-core-options.cfg" +# CEMU config files + +cemuconf="/var/config/Cemu/settings.xml" +cemucontrollerconf="/var/config/Cemu/controllerProfiles/controller0.xml" + # Dolphin config files dolphinconf="/var/config/dolphin-emu/Dolphin.ini" @@ -62,13 +80,15 @@ dolphinqtconf="/var/config/dolphin-emu/Qt.ini" # PCSX2 config files -pcsx2conf="/var/config/PCSX2/inis/GS.ini" -pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" -pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" +pcsx2conf="/var/config/PCSX2/inis/PCSX2.ini" +pcsx2gsconf="/var/config/PCSX2/inis/GS.ini" # This file should be deprecated since moving to PCSX2-QT +pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" # This file should be deprecated since moving to PCSX2-QT +pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" # This file should be deprecated since moving to PCSX2-QT -# PCSX2-QT config file +# PPSSPPDL config files -pcsx2qtconf="/var/config/PCSX2/inis/PCSX2.ini" +ppssppconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp.ini" +ppssppcontrolsconf="/var/config/ppsspp/PSP/SYSTEM/controls.ini" # Primehack config files @@ -90,8 +110,7 @@ then fi # If there is no config file I initalize the file with the the default values -if [ ! -f "$rd_conf" ] -then +if [[ ! -f "$rd_conf" ]]; then mkdir -p /var/config/retrodeck echo "RetroDECK config file not found in $rd_conf" echo "Initializing" @@ -108,19 +127,18 @@ then # Check if SD card path has changed from SteamOS update if [[ ! -d $default_sd && "$(ls -A /run/media/deck/)" ]]; then - configurator_generic_dialog "The SD card was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the SD card.\n\nIf you are not using an SD card, please click \"Cancel\"." + configurator_generic_dialog "RetroDECK Setup" "The SD card was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the SD card.\n\nIf you are not using an SD card, please click \"Cancel\"." default_sd=$(directory_browse "SD Card Location") fi - cp $rd_defaults $rd_conf # Load default settings + cp $rd_defaults $rd_conf # Load default settings file set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" set_setting_value $rd_conf "update_check" "true" retrodeck "options" - update_ignore=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') - set_setting_value $rd_conf "update_ignore" "$update_ignore" retrodeck "options" # Store the latest online version to ignore for future checks, as internal version and online tag version may not match up. + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" fi echo "Setting config file permissions" @@ -138,6 +156,7 @@ else if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" set_setting_value $rd_conf "update_check" "true" retrodeck "options" + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" fi conf_read @@ -145,10 +164,16 @@ else # Verify rdhome is where it is supposed to be. if [[ ! -d $rdhome ]]; then prev_home_path=$rdhome - configurator_generic_dialog "The RetroDECK data folder was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the \"retrodeck\" folder." + configurator_generic_dialog "RetroDECK Setup" "The RetroDECK data folder was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the \"retrodeck\" folder." new_home_path=$(directory_browse "RetroDECK folder location") - sed -i 's#'$prev_home_path'#'$new_home_path'#g' $rd_conf + set_setting_value $rd_conf "rdhome" "$new_home_path" retrodeck "paths" conf_read + prepare_emulator "retrodeck" "postmove" prepare_emulator "all" "postmove" + conf_write fi + + # Static variables dependent on $rd_conf values, need to be set after reading $rd_conf + backups_folder="$rdhome/backups" # A standard location for backup file storage + multi_user_data_folder="$rdhome/multi-user-data" # The default location of multi-user environment profiles fi diff --git a/functions/multi_user.sh b/functions/multi_user.sh new file mode 100644 index 00000000..08d9bf4d --- /dev/null +++ b/functions/multi_user.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +multi_user_set_default_dialog() { + chosen_user="$1" + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="No and don't ask again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Default User" \ + --text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "No and don't ask again" ]]; then + set_setting_value $rd_conf "ask_default_user" "false" retrodeck "options" + fi + else # User clicked "Yes" + set_setting_value $rd_conf "default_user" "$chosen_user" retrodeck "options" + fi +} + +multi_user_choose_current_user_dialog() { +full_userlist=() +while IFS= read -r user +do +full_userlist=("${full_userlist[@]}" "$user") +done < <(ls -1 "$multi_user_data_folder") + +chosen_user=$(zenity \ + --list --width=1200 --height=720 \ + --ok-label="Select User" \ + --text="Choose the current user:" \ + --column "Steam Username" --print-column=1 \ + "${full_userlist[@]}") + +if [[ ! -z $chosen_user && -z $default_user && $ask_default_user == "true" ]]; then + multi_user_set_default_dialog "$chosen_user" +fi +echo "$chosen_user" +} + +multi_user_enable_multi_user_mode() { + if [[ -z "$SteamAppUser" ]]; then + configurator_generic_dialog "RetroDECK Multi-User Mode" "The Steam username of the current user could not be determined from the system.\n\nThis can happen when running in Desktop mode.\n\nYou will be asked to specify the Steam username (not profile name) of the current user in the next dialog." + fi + if [[ -d "$multi_user_data_folder" && $(ls -1 "$multi_user_data_folder" | wc -l) -gt 0 ]]; then # If multi-user data folder exists from prior use and is not empty + if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then # Current user has an existing save folder + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user $SteamAppUser has an existing folder in the multi-user data folder.\n\nThe saves here are likely older than the ones currently used by RetroDECK.\n\nThe old saves will be backed up to $backups_folder and the current saves will be loaded into the multi-user data folder." + mkdir -p "$backups_folder" + tar -C "$multi_user_data_folder" -cahf "$backups_folder/multi-user-backup_$SteamAppUser_$(date +"%Y_%m_%d").zip" "$SteamAppUser" + rm -rf "$multi_user_data_folder/$SteamAppUser" # Remove stale data after backup + fi + fi + set_setting_value $rd_conf "multi_user_mode" "true" retrodeck "options" + multi_user_determine_current_user + if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then + configurator_process_complete_dialog "enabling multi-user support" + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "It looks like something went wrong while enabling multi-user mode." + fi +} + +multi_user_disable_multi_user_mode() { + if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then + full_userlist=() + while IFS= read -r user + do + full_userlist=("${full_userlist[@]}" "$user") + done < <(ls -1 "$multi_user_data_folder") + + single_user=$(zenity \ + --list --width=1200 --height=720 \ + --ok-label="Select User" \ + --text="Choose the current user:" \ + --column "Steam Username" --print-column=1 \ + "${full_userlist[@]}") + + if [[ ! -z "$single_user" ]]; then # Single user was selected + multi_user_return_to_single_user "$single_user" + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + configurator_process_complete_dialog "disabling multi-user support" + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "No single user was selected, please try the process again." + configurator_retrodeck_multiuser_dialog + fi + else + single_user=$(ls -1 "$multi_user_data_folder") + multi_user_return_to_single_user "$single_user" + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + configurator_process_complete_dialog "disabling multi-user support" + fi +} + +multi_user_determine_current_user() { + if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then # If multi-user environment is enabled in rd_conf + if [[ -d "$multi_user_data_folder" ]]; then + if [[ ! -z $SteamAppUser ]]; then # If running in Game Mode and this variable exists + if [[ -z $(ls -1 "$multi_user_data_folder" | grep "$SteamAppUser") ]]; then + multi_user_setup_new_user + else + multi_user_link_current_user_files + fi + else # Unable to find Steam user ID + if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then + if [[ -z $default_user ]]; then # And a default user is not set + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system, and there are multiple users registered.\n\nPlease select which user is currently playing in the next dialog." + SteamAppUser=$(multi_user_choose_current_user_dialog) + if [[ ! -z $SteamAppUser ]]; then # User was chosen from dialog + multi_user_link_current_user_files + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "No user was chosen, RetroDECK will launch with the files from the user who played most recently." + fi + else # The default user is set + if [[ ! -z $(ls -1 $multi_user_data_folder | grep "$default_user") ]]; then # Confirm user data folder exists + SteamAppUser=$default_user + multi_user_link_current_user_files + else # Default user has no data folder, something may have gone horribly wrong. Setting up as a new user. + multi_user_setup_new_user + fi + fi + else # If there is only 1 user in the userlist, default to that user + SteamAppUser=$(ls -1 $multi_user_data_folder) + multi_user_link_current_user_files + fi + fi + else # If the userlist file doesn't exist yet, create it and add the current user + if [[ ! -z "$SteamAppUser" ]]; then + multi_user_setup_new_user + else # If running in Desktop mode for the first time + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system and there is no existing userlist.\n\nPlease enter the Steam account username (not profile name) into the next dialog, or run RetroDECK in game mode." + if zenity --entry \ + --title="Specify Steam username" \ + --text="Enter Steam username:" + then # User clicked "OK" + SteamAppUser="$?" + if [[ ! -z "$SteamAppUser" ]]; then + multi_user_setup_new_user + else # But dialog box was blank + configurator_generic_dialog "RetroDECK Multi-User Mode" "No username was entered, so multi-user data folder cannot be created.\n\nDisabling multi-user mode, please try the process again." + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + fi + else # User clicked "Cancel" + configurator_generic_dialog "RetroDECK Multi-User Mode" "Cancelling multi-user mode activation." + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + fi + fi + fi + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "Multi-user mode is not currently enabled" + fi +} + +multi_user_return_to_single_user() { + single_user="$1" + echo "Returning to single-user mode for $single_user" + unlink "$saves_folder" + unlink "$states_folder" + unlink "$rd_conf" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + # RetroArch one-offs, because it has so many folders that should be shared between users + unlink "/var/config/retroarch/retroarch.cfg" + unlink "/var/config/retroarch/retroarch-core-options.cfg" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + # XEMU one-offs, because it stores its config in /var/data, not /var/config like everything else + unlink "/var/config/xemu" + unlink "/var/data/xemu/xemu" + mkdir -p "/var/config/xemu" + mv -f "$multi_user_data_folder/$single_user/config/xemu"/{.[!.],}* "/var/config/xemu" + dir_prep "/var/config/xemu" "/var/data/xemu/xemu" + mkdir -p "$saves_folder" + mkdir -p "$states_folder" + mv -f "$multi_user_data_folder/$single_user/saves"/{.[!.],}* "$saves_folder" + mv -f "$multi_user_data_folder/$single_user/states"/{.[!.],}* "$states_folder" + for emu_conf in $(find "$multi_user_data_folder/$single_user/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + unlink "/var/config/$emu_conf" + mkdir -p "/var/config/$emu_conf" + mv -f "$multi_user_data_folder/$single_user/config/$emu_conf"/{.[!.],}* "/var/config/$emu_conf" + fi + done + rm -r "$multi_user_data_folder/$single_user" # Should be empty, omitting -f for safety +} + +multi_user_setup_new_user() { + # TODO: RPCS3 one-offs + echo "Setting up new user" + unlink "$saves_folder" + unlink "$states_folder" + dir_prep "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" + dir_prep "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retrodeck" + cp -L "$rd_conf" "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" # Copy existing rd_conf file for new user. + rm -f "$rd_conf" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" + if [[ ! -L "/var/config/retroarch/retroarch.cfg" ]]; then + mv "/var/config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" + mv "/var/config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" + else + cp "$emuconfigs/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" + cp "$emuconfigs/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + fi + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') # For all the config folders already linked to a different user + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + unlink "/var/config/$emu_conf" + prepare_emulator "reset" "$emu_conf" + fi + done + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + done +} + +multi_user_link_current_user_files() { + echo "Linking existing user" + ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" + ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # Find any new emulator config folders from last time this user played + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + done + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf" + else # If the current user doesn't have a config folder for this emulator, init it and then link it + prepare_emulator "reset" "$emu_conf" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + fi + done +} diff --git a/functions/patching.sh b/functions/patching.sh new file mode 100644 index 00000000..32380327 --- /dev/null +++ b/functions/patching.sh @@ -0,0 +1,481 @@ +#!/bin/bash + +set_setting_value() { + # Function for editing settings + # USAGE: set_setting_value "$setting_file" "$setting_name" "$new_setting_value" "$system" "$section_name(optional)" + + local setting_name_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local setting_value_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") + + case $4 in + + "retrodeck" | "citra" | "melonds" | "yuzu" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'=^s^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + fi + if [[ "$4" == "retrodeck" && ("$current_section_name" == "" || "$current_section_name" == "paths" || "$current_section_name" == "options") ]]; then # If a RetroDECK setting is being changed, also write it to memory for immediate use + eval "$setting_name_to_change=$setting_value_to_change" + fi + ;; + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"' = ^s^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' "$1" + fi + ;; + + "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"' =^s^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' "$1" + fi + ;; + + "rpcs3" ) # This does not currently work for settings with a $ in them + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + fi + ;; + + "cemu" ) + if [[ -z "$current_section_name" ]]; then + xml ed -L -u "//$setting_name_to_change" -v "$setting_value_to_change" "$1" + else + xml ed -L -u "//$current_section_name/$setting_name_to_change" -v "$setting_value_to_change" "$1" + fi + ;; + + "es_settings" ) + sed -i 's^'"$setting_name_to_change"'" value=".*"^'"$setting_name_to_change"'" value="'"$setting_value_to_change"'"^' "$1" + ;; + + esac +} + +get_setting_name() { + # Function for getting the setting name from a full setting line from a config file + # USAGE: get_setting_name "$current_setting_line" $system + + local current_setting_line="$1" + + case $2 in + + "es_settings" ) + echo ''"$current_setting_line"'' | grep -o -P '(?<=name\=\").*(?=\" value)' + ;; + + "rpcs3" ) + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' + ;; + + * ) + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?=\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g;s^\\$^^' + ;; + + esac +} + +get_setting_value() { +# Function for getting the current value of a setting from a config file +# USAGE: get_setting_value $setting_file "$setting_name" $system $section (optional) + + local current_setting_name="$2" + local current_section_name="$4" + + case $3 in + + "retrodeck" | "citra" | "melonds" | "yuzu" ) # For files with this syntax - setting_name=setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name=).*" "$1") + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name=).*" + fi + ;; + + "retroarch" ) # For files with this syntax - setting_name = "setting_value" + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" "$1") + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name = \").*(?=\")" + fi + ;; + + "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) # For files with this syntax - setting_name = setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1) + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name = ).*" + fi + ;; + + "rpcs3" ) # For files with this syntax - setting_name: setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=$current_setting_name: ).*" "$1") + else + sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=$current_setting_name: ).*" + fi + ;; + + "cemu" ) + if [[ -z "$current_section_name" ]]; then + echo $(xml sel -t -v "//$current_setting_name" "$1") + else + echo $(xml sel -t -v "//$current_section_name/$current_setting_name" "$1") + fi + ;; + + "es_settings" ) + echo $(grep -o -P "(?<=$current_setting_name\" value=\").*(?=\")" "$1") + ;; + + esac +} + +add_setting_line() { + # This function will add a setting line to a file. This is useful for dynamically generated config files where a setting line may not exist until the setting is changed from the default. + # USAGE: add_setting_line $setting_file $setting_line $system $section (optional) + + local current_setting_line=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + if [[ -f "$1" ]]; then + sed -i '$ a '"$current_setting_line"'' "$1" + else # If the file doesn't exist, sed add doesn't work for the first line + echo "$current_setting_line" > "$1" + fi + else + sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' "$1" + fi + ;; + + esac +} + +add_setting() { + # This function will add a setting name and value to a file. This is useful for dynamically generated config files like Retroarch override files. + # USAGE: add_setting $setting_file $setting_name $setting_value $system $section (optional) + + local current_setting_name=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_setting_value=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") + + case $4 in + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i '$ a '"$current_setting_name"' = "'"$current_setting_value"'"' "$1" + else + sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_name"' = "'"$current_setting_value"'"' "$1" + fi + ;; + + esac +} + +delete_setting() { + # This function will delete a setting line from a file. This is useful for dynamically generated config files like Retroarch override files + # USAGE: delete_setting $setting_file $setting_name $system $section (optional) + + local current_setting_name=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") + + case $3 in + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i '\^'"$current_setting_name"'^d' "$1" + sed -i '/^$/d' "$1" # Cleanup empty lines left behind + fi + ;; + + esac +} + +disable_setting() { + # This function will add a '#' to the beginning of a defined setting line, disabling it. + # USAGE: disable_setting $setting_file $setting_line $system $section (optional) + + local current_setting_line="$2" + local current_section_name="$4" + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' "$1" + else + sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' "$1" + fi + ;; + + esac +} + +enable_setting() { + # This function will remove a '#' to the beginning of a defined setting line, enabling it. + # USAGE: enable_setting $setting_file $setting_line $system $section (optional) + + local current_setting_line="$2" + local current_section_name="$4" + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' "$1" + else + sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' "$1" + fi + ;; + + esac +} + +disable_file() { + # This function adds the suffix ".disabled" to the end of a file to prevent it from being used entirely. + # USAGE: disable_file $file_name + # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file + + mv "$(realpath "$1")" "$(realpath "$1")".disabled +} + +enable_file() { + # This function removes the suffix ".disabled" to the end of a file to allow it to be used. + # USAGE: enable_file $file_name + # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file and should not have ".disabled" as a suffix + + mv "$(realpath "$1".disabled)" "$(realpath "$(echo "$1" | sed -e 's/\.disabled//')")" +} + +generate_single_patch() { + # generate_single_patch $original_file $modified_file $patch_file $system + + local original_file="$1" + local modified_file="$2" + local patch_file="$3" + local system="$4" + + if [[ -f "$patch_file" ]]; then + rm "$patch_file" # Remove old patch file (maybe change this to create a backup instead?) + fi + + while read -r current_setting_line; # Look for changes from the original file to the modified one + do + printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands + escaped_setting_line=$(sed -E 's^\+^\\+^g' <<< "$escaped_setting_line") # Need to escape plus signs as well + + if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines + if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line + action="section" + current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name + elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name + action="section" + current_section=$(sed 's^:$^^' <<< "$current_setting_line") # Remove colon from section name + fi + elif [[ (! -z "$current_section") ]]; then # If line is in a section... + if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines + if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^ p } }' "$modified_file") ]]; then # If disabled line is not disabled in new file... + action="disable_setting" + echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< $(sed -E 's/^[ \t]*//' <<< "$current_setting_line")) >> "$patch_file" + fi + elif [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?#'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^ p } }' "$modified_file") ]]; then # Check if line is disabled in new file + action="enable_setting" + echo $action"^"$current_section"^"$current_setting_line >> "$patch_file" + else # Look for setting value differences + current_setting_name=$(get_setting_name "$escaped_setting_line" "$system") + if [[ (-z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'$^ p } }' "$modified_file")) ]]; then # If the same setting line is not found in the same section of the modified file... + if [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'\s*?[:=]^ p } }' "$modified_file") ]]; then # But the setting exists in that section, only with a different value... + new_setting_value=$(get_setting_value "$2" "$current_setting_name" "$system" $current_section) + action="change" + echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file" + fi + fi + fi + elif [[ -z "$current_section" ]]; then # If line is not in a section... + if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines + if [[ -z $(grep -o -P "^\s*?$current_setting_line$" "$modified_file") ]]; then # If disabled line is not disabled in new file... + action="disable_setting" + echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< "$current_setting_line") >> "$patch_file" + fi + elif [[ ! -z $(sed -n -E '\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' "$modified_file") ]]; then # Check if line is disabled in new file + action="enable_setting" + echo $action"^"$current_section"^"$current_setting_line >> "$patch_file" + else # Look for setting value differences + if [[ (-z $(sed -n -E '\^\s*?\b'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' "$modified_file")) ]]; then # If the same setting line is not found in the modified file... + current_setting_name=$(get_setting_name "$escaped_setting_line" "$system") + if [[ ! -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' "$modified_file") ]]; then # But the setting exists, only with a different value... + new_setting_value=$(get_setting_value $2 "$current_setting_name" "$system") + action="change" + echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file" + fi + fi + fi + fi + fi + done < "$original_file" + + # Reset the variables for reuse + action="" + current_section="" + current_setting_name="" + current_setting_value="" + + while read -r current_setting_line; # Look for new lines (from dynamically generated config files) in modified file compared to original + do + + printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands + + if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines + if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line + action="section" + current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name + action="section" + current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name + fi + elif [[ (! -z $current_section) ]]; then + current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") + if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' $1 ) ]]; then # If setting name is not found in this section of the original file... + action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end. + echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 + fi + elif [[ (-z $current_section) ]]; then + current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") + if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $1) ]]; then # If setting name is not found in the original file... + action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end. + echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 + fi + fi + fi + done < "$modified_file" +} + +deploy_single_patch() { + +# This function will take an "original" file and a patch file and generate a ready to use modified file +# USAGE: deploy_single_patch $original_file $patch_file $output_file + +cp -fv "$1" "$3" # Create a copy of the original file to be patched + +while IFS="^" read -r action current_section setting_name setting_value system_name +do + + case $action in + + "disable_file" ) + eval disable_file "$setting_name" + ;; + + "enable_file" ) + eval enable_file "$setting_name" + ;; + + "add_setting_line" ) + add_setting_line "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "disable_setting" ) + disable_setting "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "enable_setting" ) + enable_setting "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "change" ) + if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval setting_value="$setting_value" + fi + set_setting_value "$3" "$setting_name" "$setting_value" "$system_name" "$current_section" + ;; + + *"#"* ) + # Comment line in patch file + ;; + + * ) + echo "Config line malformed: $action" + ;; + + esac +done < "$2" +} + +deploy_multi_patch() { + +# This function will take a single "batch" patch file and run all patches listed in it, across multiple config files +# USAGE: deploy_multi_patch $patch_file +# Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers: +# $action^($current_section)^$setting_name^$setting_value^$system_name^($config file) + +while IFS="^" read -r action current_section setting_name setting_value system_name config_file +do + case $action in + + "disable_file" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + disable_file "$config_file" + ;; + + "enable_file" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + enable_file "$config_file" + ;; + + "add_setting_line" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + add_setting_line "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "disable_setting" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + disable_setting "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "enable_setting" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + enable_setting "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "change" ) + if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval setting_value="$setting_value" + fi + set_setting_value "$config_file" "$setting_name" "$setting_value" "$system_name" "$current_section" + ;; + + *"#"* ) + # Comment line in patch file + ;; + + * ) + echo "Config line malformed: $action" + ;; + + esac +done < "$1" +} diff --git a/functions/post_update.sh b/functions/post_update.sh new file mode 100644 index 00000000..82496a43 --- /dev/null +++ b/functions/post_update.sh @@ -0,0 +1,262 @@ +#!/bin/bash + +post_update() { + + # post update script + echo "Executing post-update script" + + local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version) + + if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b + save_migration + fi + + # Everything within the following ( ) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs. + + ( + if [[ $prev_version -le "062" ]]; then + # In version 0.6.2b, the following changes were made that required config file updates/reset: + # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default. + # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now! + # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/ + + rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack. + prepare_emulator "reset" "primehack" + + dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" + dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" + + mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) + dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder + fi + if [[ $prev_version -le "063" ]]; then + # In version 0.6.3b, the following changes were made that required config file updates/reset: + # - Put Dolphin and Primehack save states in different folders inside $rd_home/states + # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~) + # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates. + + dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" + + rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b + rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency. + + cp -f "$emuconfigs/citra/qt-config.ini" /var/config/citra-emu/qt-config.ini + sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini + cp -fr "$emuconfigs/yuzu/"* /var/config/yuzu/ + sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini + + # Remove unneeded tools folder, as location has changed to RO space + rm -rfv /var/config/retrodeck/tools/ + fi + if [[ $prev_version -le "064" ]]; then + # In version 0.6.4b, the following changes were made: + # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect. + # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled. + # The default configs have been updated for new installs and resets, a patch was created to address existing installs. + + deploy_multi_patch "emu-configs/patches/updates/064b_update.patch" + fi + if [[ $prev_version -le "065" ]]; then + # In version 0.6.5b, the following changes were made: + # Change Yuzu GPU accuracy to normal for better performance + + set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer" + fi + if [[ $prev_version -le "070" ]]; then + # In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem: + # - Update retrodeck.cfg and set new paths to $rdhome by default + # - Update PCSX2 and Duckstation configs to latest templates (to accomadate RetroAchievements feature) and move Duckstation config folder from /var/data to /var/config + # - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported) + # - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists + # - Copy new borders into RA config location + # - Copy new RetroArch control remaps into RA config location + # - Add shipped Amiga bios if it doesn't already exist + # - Update RPCS3 vfs file contents. migrate from old location if needed + # - Disable ESDE update checks for existing installs + # - Move Duckstation saves and states to new locations + # - Clean up legacy tools files (Configurator is now accessible through the main ES-DE menu) + # - Move Dolphin and Primehack save folder names + # - Move PPSSPP saves/states to appropriate folders + # - Set ESDE user themes folder directly + # - Disable auto-save/load in existing RA / PCSX2 / Duckstation installs for proper preset functionality + # - Disable ask-on-exit in existing Citra / Dolphin / Duckstation / Primehack installs for proper preset functionality + # - Disable auto-load-state in existing PPSSPP installs for proper preset functionality + # - Init Cemu as it is a new emulator + # - Init PICO-8 as it has newly-shipped config files + + update_rd_conf # Expand retrodeck.cfg to latest template + set_setting_value $rd_conf "screenshots_folder" "$rdhome/screenshots" + set_setting_value $rd_conf "mods_folder" "$rdhome/mods" + set_setting_value $rd_conf "texture_packs_folder" "$rdhome/texture_packs" + set_setting_value $rd_conf "borders_folder" "$rdhome/borders" + conf_read + + mv -f "$pcsx2conf" "$pcsx2conf.bak" + generate_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "$pcsx2conf.bak" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" pcsx2 + deploy_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" "$pcsx2conf" + rm -f "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" + dir_prep "/var/config/duckstation" "/var/data/duckstation" + mv -f "$duckstationconf" "$duckstationconf.bak" + generate_single_patch "$emuconfigs/duckstation/settings.ini" "$duckstationconf.bak" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" pcsx2 + deploy_single_patch "$emuconfigs/duckstation/settings.ini" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" "$duckstationconf" + rm -f "/var/config/duckstation/duckstation-cheevos-upgrade.patch" + + mkdir -p "$mods_folder" + mkdir -p "$texture_packs_folder" + mkdir -p "$borders_folder" + + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + + dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders" + rsync -rlD --mkpath "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders/" + + rsync -rlD --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/" + + if [[ ! -f "$bios_folder/capsimg.so" ]]; then + cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so" + fi + + cp -f $emuconfigs/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3" + if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once. + mkdir "$bios_folder/rpcs3" + mv "$roms_folder/ps3/emudir/"* "$bios_folder/rpcs3/" + rm "$roms_folder/ps3/emudir" + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update and due to a RPCS3 config upgrade, the files that used to exist at\n\n~/retrodeck/roms/ps3/emudir\n\nare now located at\n\n~/retrodeck/bios/rpcs3.\nYour existing files have been moved automatically." + fi + mkdir -p "$bios_folder/rpcs3/dev_hdd0" + mkdir -p "$bios_folder/rpcs3/dev_hdd1" + mkdir -p "$bios_folder/rpcs3/dev_flash" + mkdir -p "$bios_folder/rpcs3/dev_flash2" + mkdir -p "$bios_folder/rpcs3/dev_flash3" + mkdir -p "$bios_folder/rpcs3/dev_bdvd" + mkdir -p "$bios_folder/rpcs3/dev_usb000" + dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" + + set_setting_value $es_settings "ApplicationUpdaterFrequency" "never" "es_settings" + + if [[ -f "$saves_folder/duckstation/shared_card_1.mcd" || -f "$saves_folder/duckstation/shared_card_2.mcd" ]]; then + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update, the location of saves and states for Duckstation has been changed.\n\nYour files will be moved automatically, and can now be found at\n\n~.../saves/psx/duckstation/memcards/\nand\n~.../states/psx/duckstation/" + fi + mkdir -p "$saves_folder/psx/duckstation/memcards" + mv "$saves_folder/duckstation/"* "$saves_folder/psx/duckstation/memcards/" + rmdir "$saves_folder/duckstation" # File-safe folder cleanup + unlink "/var/config/duckstation/memcards" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + mkdir -p "$states_folder/psx" + mv -t "$states_folder/psx/" "$states_folder/duckstation" + unlink "/var/config/duckstation/savestates" + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" + + rm -rf /var/config/retrodeck/tools + rm -rf /var/config/emulationstation/.emulationstation/gamelists/tools/ + + mv "$saves_folder/gc/dolphin/EUR" "$saves_folder/gc/dolphin/EU" + mv "$saves_folder/gc/dolphin/USA" "$saves_folder/gc/dolphin/US" + mv "$saves_folder/gc/dolphin/JAP" "$saves_folder/gc/dolphin/JP" + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" + mv "$saves_folder/gc/primehack/EUR" "$saves_folder/gc/primehack/EU" + mv "$saves_folder/gc/primehack/USA" "$saves_folder/gc/primehack/US" + mv "$saves_folder/gc/primehack/JAP" "$saves_folder/gc/primehack/JP" + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + sed -i '$ a ' "$es_settings" # Add new default line to existing file + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + unlink "/var/config/emulationstation/ROMs" + unlink "/var/config/emulationstation/.emulationstation/downloaded_media" + unlink "/var/config/emulationstation/.emulationstation/themes" + + set_setting_value "$raconf" "savestate_auto_load" "false" "retroarch" + set_setting_value "$raconf" "savestate_auto_save" "false" "retroarch" + set_setting_value "$pcsx2conf" "SaveStateOnShutdown" "false" "pcsx2" "EmuCore" + set_setting_value "$duckstationconf" "SaveStateOnExit" "false" "duckstation" "Main" + set_setting_value "$duckstationconf" "Enabled" "false" "duckstation" "Cheevos" + + set_setting_value "$citraconf" "confirmClose" "false" "citra" "UI" + set_setting_value "$citraconf" "confirmClose\default" "false" "citra" "UI" + set_setting_value "$dolphinconf" "ConfirmStop" "False" "dolphin" "Interface" + set_setting_value "$duckstationconf" "ConfirmPowerOff" "false" "duckstation" "Main" + set_setting_value "$primehackconf" "ConfirmStop" "False" "primehack" "Interface" + + set_setting_value "$ppssppconf" "AutoLoadSaveState" "0" "ppsspp" "General" + + prepare_emulator "reset" "cemu" + + prepare_emulator "reset" "pico8" + + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "Would you like to install the official controller profile?\n(this will reset your custom emulator settings)\n\nAfter installation you can enable it from from Controller Settings -> Templates." + if [[ $(configurator_generic_question_dialog "RetroDECK Official Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then + install_retrodeck_controller_profile + prepare_emulator "reset" "all" + fi + fi + if [[ $prev_version -le "071" ]]; then + # In version 0.7.1b, the following changes were made that required config file updates/reset or other changes to the filesystem: + # - Force update PPSSPP standalone keybinds for L/R. + set_setting_value "$ppssppcontrolsconf" "L" "1-45,10-193" "ppsspp" "ControlMapping" + set_setting_value "$ppssppcontrolsconf" "R" "1-51,10-192" "ppsspp" "ControlMapping" + fi + + # The following commands are run every time. + + if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled + rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" + fi + if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled + rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" + fi + + if [[ -f "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" ]]; then # If RetroDECK controller profile has been previously installed + install_retrodeck_controller_profile + fi + + update_splashscreens + deploy_helper_files + build_retrodeck_current_presets + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Upgrade" \ + --text="RetroDECK is finishing the upgrade process, please wait." + + version=$hard_version + conf_write + + if grep -qF "cooker" <<< $hard_version; then + changelog_dialog "$(echo $version | cut -d'-' -f2)" + else + changelog_dialog "$version" + fi +} diff --git a/functions/prepare_emulator.sh b/functions/prepare_emulator.sh new file mode 100644 index 00000000..0f880fe3 --- /dev/null +++ b/functions/prepare_emulator.sh @@ -0,0 +1,674 @@ +#!/bin/bash + +prepare_emulator() { + # This function will perform one of several actions on one or more emulators + # The actions currently include "reset" and "postmove" + # The "reset" action will initialize the emulator + # The "postmove" action will update the emulator settings after one or more RetroDECK folders were moved + # An emulator can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all emulators equally + # The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed + # USAGE: prepare_emulator "$action" "$emulator" "$call_source(optional)" + + action="$1" + emulator="$2" + call_source="$3" + + if [[ "$emulator" == "retrodeck" ]]; then + if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them + while read -r config_line; do + local current_setting_name=$(get_setting_name "$config_line" "retrodeck") + if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths") + eval "$current_setting_name=$rdhome/$(basename $current_setting_value)" + mkdir -p "$rdhome/$(basename $current_setting_value)" + fi + done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') + fi + if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move + while read -r config_line; do + local current_setting_name=$(get_setting_name "$config_line" "retrodeck") + if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths") + if [[ -d "$rdhome/$(basename $current_setting_value)" ]]; then # If the folder exists at the new ~/retrodeck location + eval "$current_setting_name=$rdhome/$(basename $current_setting_value)" + fi + fi + done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') + fi + fi + + if [[ "$emulator" =~ ^(emulationstation|all)$ ]]; then # For use after ESDE-related folders are moved or a reset + if [[ "$action" == "reset" ]]; then + rm -rf /var/config/emulationstation/ + mkdir -p /var/config/emulationstation/.emulationstation/ + cp -f /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + emulationstation --home /var/config/emulationstation --create-system-dirs + update_splashscreens + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + fi + if [[ "$action" == "postmove" ]]; then + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + fi + fi + + if [[ "$emulator" =~ ^(retroarch|RetroArch|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" + cp -fv $emuconfigs/retroarch/retroarch.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" + cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" + else # Single-user actions + rm -rf /var/config/retroarch + mkdir -p /var/config/retroarch + dir_prep "$bios_folder" "/var/config/retroarch/system" + dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" + mkdir -pv /var/config/retroarch/shaders/ + cp -rf /app/share/libretro/shaders /var/config/retroarch/ + dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" + rsync -rlD --mkpath "/app/share/libretro/cores/" "/var/config/retroarch/cores/" + cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/ + cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/ + rsync -rlD --mkpath "$emuconfigs/retroarch/core-overrides/" "/var/config/retroarch/config/" + rsync -rlD --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/" + dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders" + rsync -rlD --mkpath "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders/" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch" + fi + # Shared actions + + # PPSSPP + echo "--------------------------------" + echo "Initializing PPSSPP_LIBRETRO" + echo "--------------------------------" + if [ -d $bios_folder/PPSSPP/flash0/font ] + then + mv -fv $bios_folder/PPSSPP/flash0/font $bios_folder/PPSSPP/flash0/font.bak + fi + cp -rf "/app/retrodeck/extras/PPSSPP" "$bios_folder/PPSSPP" + if [ -d $bios_folder/PPSSPP/flash0/font.bak ] + then + mv -f $bios_folder/PPSSPP/flash0/font.bak $bios_folder/PPSSPP/flash0/font + fi + + # MSX / SVI / ColecoVision / SG-1000 + echo "-----------------------------------------------------------" + echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO" + echo "-----------------------------------------------------------" + cp -rf "/app/retrodeck/extras/MSX/Databases" "$bios_folder/Databases" + cp -rf "/app/retrodeck/extras/MSX/Machines" "$bios_folder/Machines" + + # AMIGA + echo "-----------------------------------------------------------" + echo "Initializing AMIGA LIBRETRO" + echo "-----------------------------------------------------------" + cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so" + + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + + # Reset default preset settings + set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos")" "retrodeck" "cheevos" + set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore" + set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "genesis" "$(get_setting_value "$rd_defaults" "genesis" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "gg" "$(get_setting_value "$rd_defaults" "gg" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "borders")" "retrodeck" "borders" + set_setting_value "$rd_conf" "genesis" "$(get_setting_value "$rd_defaults" "genesis" "retrodeck" "widescreen")" "retrodeck" "widescreen" + set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "widescreen")" "retrodeck" "widescreen" + set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "widescreen")" "retrodeck" "widescreen" + set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "widescreen")" "retrodeck" "widescreen" + set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_load")" "retrodeck" "savestate_auto_load" + set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder" "/var/config/retroarch/system" + dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" + dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch" + fi + fi + + if [[ "$emulator" =~ ^(cemu|Cemu|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing CEMU" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/Cemu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Cemu" + cp -fr "$emuconfigs/cemu/"* "$multi_user_data_folder/$SteamAppUser/config/Cemu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/Cemu" "/var/config/Cemu" + else + rm -rf /var/config/Cemu + mkdir -pv /var/config/Cemu/ + cp -fr "$emuconfigs/cemu/"* /var/config/Cemu/ + set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + fi + # Shared actions + dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save" + fi + if [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves + set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save" + fi + fi + + if [[ "$emulator" =~ ^(citra|citra-emu|Citra|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing CITRA" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/citra-emu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/citra-emu" + cp -fv $emuconfigs/citra/qt-config.ini "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "/var/config/citra-emu" + else # Single-user actions + rm -rf /var/config/citra-emu + mkdir -pv /var/config/citra-emu/ + cp -f $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini + set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + fi + # Shared actions + mkdir -pv "$saves_folder/n3ds/citra/nand/" + mkdir -pv "$saves_folder/n3ds/citra/sdmc/" + dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata" + dir_prep "$logs_folder/citra" "/var/data/citra-emu/log" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + + # Reset default preset settings + set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" + dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + fi + fi + + if [[ "$emulator" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing DOLPHIN" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" + cp -fvr "$emuconfigs/dolphin/"* "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "/var/config/dolphin-emu" + else # Single-user actions + rm -rf /var/config/dolphin-emu + mkdir -pv /var/config/dolphin-emu/ + cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/ + set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + fi + # Shared actions + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" # TODO: Multi-user one-off + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" # TODO: Multi-user one-off + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" # TODO: Multi-user one-off + dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" + dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + + # Reset default preset settings + set_setting_value "$rd_conf" "dolphin" "$(get_setting_value "$rd_defaults" "dolphin" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" + dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + fi + fi + + if [[ "$emulator" =~ ^(duckstation|Duckstation|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing DUCKSTATION" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/duckstation" + mkdir -p "$multi_user_data_folder/$SteamAppUser/data/duckstation/" + cp -fv "$emuconfigs/duckstation/"* "$multi_user_data_folder/$SteamAppUser/data/duckstation" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "/var/config/duckstation" + else # Single-user actions + rm -rf /var/config/duckstation + mkdir -p /var/config/duckstation/ + cp -fv "$emuconfigs/duckstation/"* /var/config/duckstation + set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + fi + # Shared actions + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + + # Reset default preset settings + set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "cheevos")" "retrodeck" "cheevos" + set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore" + set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save" + set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + fi + fi + + if [[ "$emulator" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing MELONDS" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/melonDS" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/melonDS/" + cp -fvr $emuconfigs/melonds/melonDS.ini "$multi_user_data_folder/$SteamAppUser/config/melonDS/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SavestatePath" "$states_folder/nds/melonds" "melonds" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "/var/config/melonDS" + else # Single-user actions + rm -rf /var/config/melonDS + mkdir -pv /var/config/melonDS/ + cp -fvr $emuconfigs/melonds/melonDS.ini /var/config/melonDS/ + set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" + fi + # Shared actions + mkdir -pv "$saves_folder/nds/melonds" + mkdir -pv "$states_folder/nds/melonds" + dir_prep "$bios_folder" "/var/config/melonDS/bios" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder" "/var/config/melonDS/bios" + set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" + fi + fi + + if [[ "$emulator" =~ ^(pcsx2|PCSX2|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing PCSX2" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/PCSX2" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis" + cp -fvr "$emuconfigs/PCSX2/"* "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "/var/config/PCSX2" + else # Single-user actions + rm -rf /var/config/PCSX2 + mkdir -pv "/var/config/PCSX2/inis" + cp -fvr "$emuconfigs/PCSX2/"* /var/config/PCSX2/inis/ + set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + fi + # Shared actions + mkdir -pv "$saves_folder/ps2/pcsx2/memcards" + mkdir -pv "$states_folder/ps2/pcsx2" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + + # Reset default preset settings + set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "cheevos")" "retrodeck" "cheevos" + set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore" + set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save" + set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + fi + fi + + if [[ "$emulator" =~ ^(pico8|pico-8|all)$ ]]; then + if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) + dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder + cp -fv "$emuconfigs/pico-8/config.txt" "$bios_folder/pico-8/config.txt" + cp -fv "$emuconfigs/pico-8/sdl_controllers.txt" "$bios_folder/pico-8/sdl_controllers.txt" + fi + fi + + if [[ "$emulator" =~ ^(ppsspp|PPSSPP|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing PPSSPPSDL" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/ppsspp" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" + cp -fv "$emuconfigs/ppssppsdl/"* "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/ppsspp.ini" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "/var/config/ppsspp" + else # Single-user actions + rm -rf /var/config/ppsspp + mkdir -p /var/config/ppsspp/PSP/SYSTEM/ + cp -fv "$emuconfigs/ppssppsdl/"* /var/config/ppsspp/PSP/SYSTEM/ + set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + fi + # Shared actions + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + fi + fi + + if [[ "$emulator" =~ ^(primehack|Primehack|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing Primehack" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/primehack" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/primehack" + cp -fvr "$emuconfigs/primehack/"* "$multi_user_data_folder/$SteamAppUser/config/primehack/" + set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath0" "$roms_folder/gc" "primehack" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "/var/config/primehack" + else # Single-user actions + rm -rf /var/config/primehack + mkdir -pv /var/config/primehack/ + cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/ + set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" + fi + # Shared actions + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" + dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" + mkdir -pv /var/data/primehack/Wii/ + dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii" + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + + # Reset default preset settings + set_setting_value "$rd_conf" "primehack" "$(get_setting_value "$rd_defaults" "primehack" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" + dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" + dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii/" + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" + fi + fi + + if [[ "$emulator" =~ ^(rpcs3|RPCS3|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing RPCS3" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/rpcs3" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" + cp -fr "$emuconfigs/rpcs3/"* "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" "/games/" "$roms_folder/ps3/" "rpcs3" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "/var/config/rpcs3" + else # Single-user actions + rm -rf /var/config/rpcs3 + mkdir -pv /var/config/rpcs3/ + cp -fr "$emuconfigs/rpcs3/"* /var/config/rpcs3/ + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3" + dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" + fi + # Shared actions + mkdir -p "$bios_folder/rpcs3/dev_hdd0" + mkdir -p "$bios_folder/rpcs3/dev_hdd1" + mkdir -p "$bios_folder/rpcs3/dev_flash" + mkdir -p "$bios_folder/rpcs3/dev_flash2" + mkdir -p "$bios_folder/rpcs3/dev_flash3" + mkdir -p "$bios_folder/rpcs3/dev_bdvd" + mkdir -p "$bios_folder/rpcs3/dev_usb000" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3" + fi + fi + + if [[ "$emulator" =~ ^(ryujunx|Ryujinx|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing RYUJINX" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then + rm -rf "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/system" + cp -fv $emuconfigs/ryujinx/* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" + sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/Config.json" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "/var/config/Ryujinx" + else + # removing config directory to wipe legacy files + rm -rf /var/config/Ryujinx + mkdir -p /var/config/Ryujinx/system + cp -fv $emuconfigs/ryujinx/* /var/config/Ryujinx + sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$ryujinxconf" + fi + fi + if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves + dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON + fi + fi + + if [[ "$emulator" =~ ^(xemu|XEMU|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing XEMU" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf /var/config/xemu + rm -rf /var/data/xemu + rm -rf "$multi_user_data_folder/$SteamAppUser/config/xemu" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/xemu/" + cp -fv $emuconfigs/xemu/xemu.toml "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look + dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu" + else # Single-user actions + rm -rf /var/config/xemu + rm -rf /var/data/xemu + dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look + cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf" + set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + fi # Shared actions + mkdir -pv $saves_folder/xbox/xemu/ + # Preparing HD dummy Image if the image is not found + if [ ! -f $bios_folder/xbox_hdd.qcow2 ] + then + cp -f "/app/retrodeck/extras/XEMU/xbox_hdd.qcow2" "$bios_folder/xbox_hdd.qcow2" + fi + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + fi + fi + + if [[ "$emulator" =~ ^(yuzu|Yuzu|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing YUZU" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/yuzu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/yuzu" + cp -fvr "$emuconfigs/yuzu/"* "$multi_user_data_folder/$SteamAppUser/config/yuzu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "/var/config/yuzu" + else # Single-user actions + rm -rf /var/config/yuzu + mkdir -pv /var/config/yuzu/ + cp -fvr "$emuconfigs/yuzu/"* /var/config/yuzu/ + set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + fi + # Shared actions + dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" + dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" + dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" + dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" + dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" + dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + mkdir -pv "$rdhome/customs/yuzu" + # removing dead symlinks as they were present in a past version + if [ -d $bios_folder/switch ]; then + find $bios_folder/switch -xtype l -exec rm {} \; + fi + + # Reset default preset settings + set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" + set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" + dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" + dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" + dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" + dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" + dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + fi + fi + + # Update presets for all emulators after any reset or move + if [[ ! "$emulator" == "retrodeck" ]]; then + build_retrodeck_current_presets + fi +} diff --git a/functions/presets.sh b/functions/presets.sh new file mode 100644 index 00000000..664b7893 --- /dev/null +++ b/functions/presets.sh @@ -0,0 +1,207 @@ +#!/bin/bash + +change_preset_dialog() { + # This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more + # USAGE: change_preset_dialog "$preset" + + local preset="$1" + pretty_preset_name=${preset//_/ } # Preset name prettification + pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification + local current_preset_settings=() + local current_enabled_systems=() + local current_disabled_systems=() + local changed_systems=() + local changed_presets=() + local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + + while IFS= read -r config_line + do + system_name=$(get_setting_name "$config_line" "retrodeck") + all_systems=("${all_systems[@]}" "$system_name") + system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset") + if [[ "$system_value" == "true" ]]; then + current_enabled_systems=("${current_enabled_systems[@]}" "$system_name") + elif [[ "$system_value" == "false" ]]; then + current_disabled_systems=("${current_disabled_systems[@]}" "$system_name") + fi + current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name") + done < <(printf '%s\n' "$section_results") + + choice=$(zenity \ + --list --width=1200 --height=720 \ + --checklist \ + --separator="," \ + --hide-column=3 --print-column=3 \ + --text="Enable $pretty_preset_name:" \ + --column "Enabled" \ + --column "Emulator" \ + --column "internal_system_name" \ + "${current_preset_settings[@]}") + + local rc=$? + + if [[ ! -z $choice || "$rc" == 0 ]]; then + ( + IFS="," read -ra choices <<< "$choice" + for emulator in "${all_systems[@]}"; do + if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then + changed_systems=("${changed_systems[@]}" "$emulator") + if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then + changed_presets=("${changed_presets[@]}" "$preset") + fi + set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset" + # Check for conflicting presets for this system + while IFS=: read -r preset_being_checked known_incompatible_preset; do + if [[ "$preset" == "$preset_being_checked" ]]; then + if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then + changed_presets=("${changed_presets[@]}" "$known_incompatible_preset") + set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset" + fi + fi + done < "$incompatible_presets_reference_list" + fi + if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then + changed_systems=("${changed_systems[@]}" "$emulator") + if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then + changed_presets=("${changed_presets[@]}" "$preset") + fi + set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$preset" + fi + done + for emulator in "${changed_systems[@]}"; do + build_preset_config $emulator ${changed_presets[*]} + done + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Presets Configuration" \ + --text="Setting up your presets, please wait..." + else + echo "No choices made" + fi +} + +build_preset_config() { + # This function will apply one or more presets for a given system, as listed in retrodeck.cfg + # USAGE: build_preset_config "system name" "preset class 1" "preset class 2" "preset class 3" + + local system_being_changed="$1" + shift + local presets_being_changed="$*" + for current_preset in $presets_being_changed + do + local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + while IFS= read -r system_line + do + local read_system_name=$(get_setting_name "$system_line") + if [[ "$read_system_name" == "$system_being_changed" ]]; then + local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset") + while IFS='^' read -r action read_preset read_setting_name new_setting_value section + do + case "$action" in + + "config_file_format" ) + if [[ "$read_preset" == "retroarch-all" ]]; then + local retroarch_all="true" + local read_config_format="retroarch" + else + local read_config_format="$read_preset" + fi + ;; + + "target_file" ) + if [[ "$read_preset" = \$* ]]; then + eval read_preset=$read_preset + fi + local read_target_file="$read_preset" + ;; + + "defaults_file" ) + if [[ "$read_preset" = \$* ]]; then + eval read_preset=$read_preset + fi + local read_defaults_file="$read_preset" + ;; + + "change" ) + if [[ "$read_preset" == "$current_preset" ]]; then + if [[ "$read_system_enabled" == "true" ]]; then + if [[ "$new_setting_value" = \$* ]]; then + eval new_setting_value=$new_setting_value + fi + if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then # If this is a RetroArch core, generate the override file + if [[ ! -f "$read_target_file" ]]; then + mkdir -p "$(realpath "$(dirname "$read_target_file")")" + echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file" + else + if [[ -z $(grep "$read_setting_name" "$read_target_file") ]]; then + add_setting "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + else + set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + fi + fi + else + set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + fi + else + if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then + if [[ -f "$read_target_file" ]]; then + delete_setting "$read_target_file" "$read_setting_name" "$read_config_format" "$section" + if [[ -z $(cat "$read_target_file") ]]; then # If the override file is empty + rm -f "$read_target_file" + fi + if [[ -z $(ls -1 "$(dirname "$read_target_file")") ]]; then # If the override folder is empty + rmdir "$(realpath "$(dirname "$read_target_file")")" + fi + fi + else + local default_setting_value=$(get_setting_value "$read_defaults_file" "$read_setting_name" "$read_config_format" "$section") + set_setting_value "$read_target_file" "$read_setting_name" "$default_setting_value" "$read_config_format" "$section" + fi + fi + fi + ;; + + "enable" ) + if [[ "$read_preset" == "$current_preset" ]]; then + if [[ "$read_system_enabled" == "true" ]]; then + enable_file "$read_setting_name" + else + disable_file "$read_setting_name" + fi + fi + ;; + + * ) + echo "Other data: $action $read_preset $read_setting_name $new_setting_value $section" # DEBUG + ;; + + esac + done < <(cat "$presets_dir/$read_system_name"_presets.cfg) + fi + done < <(printf '%s\n' "$preset_section") + done +} + +build_retrodeck_current_presets() { + # This function will read the presets sections of the retrodeck.cfg file and build the default state + # This can also be used to build the "current" state post-update after adding new systems + # USAGE: build_retrodeck_current_presets + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then + local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local system_enabled=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$current_section") # Read the variables value from active retrodeck.cfg + if [[ "$system_enabled" == "true" ]]; then + build_preset_config "$system_name" "$current_section" + fi + fi + fi + fi + done < $rd_conf +} diff --git a/net.retrodeck.retrodeck.Configurator.desktop b/net.retrodeck.retrodeck.Configurator.desktop index ce38bb89..89c01fff 100644 --- a/net.retrodeck.retrodeck.Configurator.desktop +++ b/net.retrodeck.retrodeck.Configurator.desktop @@ -4,7 +4,7 @@ GenericName=RetroDECK Configuration Utility Type=Application Comment=A handy tool to change common RetroDECK settings Icon=net.retrodeck.retrodeck -Exec=--configurator +Exec=/app/tools/configurator.sh Terminal=false StartupNotify=false Keywords=multi;engine;emulator;standalone;steam;deck diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml index 431a0009..57db832a 100644 --- a/net.retrodeck.retrodeck.appdata.xml +++ b/net.retrodeck.retrodeck.appdata.xml @@ -65,17 +65,142 @@ GPL-3.0 CC0-1.0 - - https://github.com/XargonWan/RetroDECK/releases/tag/0.6.4b + + https://github.com/XargonWan/RetroDECK/releases/tag/0.8.0b -

New features - General:

+

News:

    -
  • Added CEMU, WiiU Emulator
  • -
  • Dolphin (Standalone) is now default for GameCube and Wii
  • +
  • Welcome to cooker 0.8.0b!
  • +
+
+
+ + https://github.com/XargonWan/RetroDECK/releases/tag/0.7.2b + +

Updates:

+
    +
  • All Emulators, ES-DE and the included theme have been updated.
  • +
+

Bugfixes and other changes:

+
    +
  • Added helper .txt files to the mod and texture pack folders.
  • +
  • The builtin changelog is now scrollable.
  • +
  • Gameboy Advanced and Game Gear integer scaling changes based on feedback.
  • +
  • Optimized and retooled the patching process for ES-DE.
  • +
  • Various fixes and optimizations to the RetroDECK build process.
  • +
+

Known issues:

+
    +
  • PPSSPP now have Retroachievements, but it is right now not configurable in the configurator (as it works a bit different the other emulators), we hope to have a solution for it at a later date. You can still login / logout / enable hardcore mode normally from the PPSSPP interface.
  • +
  • Quitting the RetroArch GB core with the radial function makes the core swap the palette.
  • +
  • Borders sometimes are disappearing, a possible workaround is to reset RetroArch from the configurator.
  • +
+
+
+ + https://github.com/XargonWan/RetroDECK/releases/tag/0.7.1b + +

Information:

+
    +
  • Steam Deck users update RetroDECK from Discover in Desktop Mode.
  • +
  • Don't forget to reapply the latest controller layout: Go into the Templates tab and reapply the new profile ending with 0.7.1b (there is no need to reinstall the entire layout from the Configurator).

Bug fixes and other changes:

    -
  • PLACEHOLDER
  • +
  • Fixed an issue to make sure the RD controller layout file at update with each RD update.
  • +
  • Fixed an issue with PPSSPP that made L and R incorrectly bound.
  • +
  • Fixed an issue in the Configurator that prevented the Yuzu preset for swapping A/B X/Y from working.
  • +
  • Fixed a notification issue on the latest SteamOS Beta releases.
  • +
  • Fixed an rsync permissions issue in the RetroDECK Framework.
  • +
  • Updated Yuzu presets to handle new config syntax in the RetroDECK Framework.
  • +
  • Changed auto-update to notification only, until permissions error can be worked out.
  • +
  • Added some new pixelart icons by ItzSelenux (pixelitos-icon-theme)
  • +
+

Updates:

+

All Emulators and ES-DE have been updated

+

Steam Deck - Global Controller Layout:

+

We have done some changes based on community feedback

+
    +
  • Select is now a hotkey trigger while pressing it down, L4 and R4 are still triggers as well.
  • +
  • The RetroArch combo of Select + Start = Quit now works on many SA-Emulators.
  • +
  • Open Menu is removed from Select.
  • +
  • R5 = A button (this allows for great Wii controls on the right touchpad and pressing down the R5 for A).
  • +
  • L5 = B button.
  • +
+

Global hotkey changes:

+
    +
  • Open Menu is on Y.
  • +
  • Increase Emulation Speed is on Dpad-UP.
  • +
  • Decrease Emulation Speed is on Dpad-Down.
  • +
  • Fullscreen OFF command is removed (as emulators have migrated to toggle).
  • +
+

Known issues:

+
    +
  • The built-in auto-updater is not working (we are working on it). Discover is ok.
  • +
  • Some emulators don't have hotkey support or have bugs affecting their hotkeys.
  • +
+
+
+ + https://github.com/XargonWan/RetroDECK/releases/tag/0.7.0b + +

New - System features:

+
    +
  • The Configurator has a new home inside the ES-DE main menu and thus the tools menu has been removed.
  • +
  • The Configurator also has a .deskop icon for ease of access for both Steam Deck desktop mode and Linux Desktop users.
  • +
  • Added RetroDECK auto updates on launch, this can be disabled from the Configurator this works in Game Mode for the Steam Deck.
  • +
+

New RetroDECK Configurator features:

+
    +
  • The Configurator has a new structure, with more menus and options.
  • +
  • The compression tool has been updated to allow for even more formats such as .zip in addition to the standard disc-based formats for certain systems.
  • +
  • The compression tool has been updated to have an even stronger verification before a compression job starts.
  • +
  • Added a global preset to swap A/B and X/Y in all supported emulators (aka N layout).
  • +
  • Added a global preset to enable/disable Widescreen in all supported emulators, globally or per core/emulator.
  • +
  • Added a global preset to enable/disable Ask-to-Exit prompts in all supported emulators.
  • +
  • Added a preset to enable/disable Pegasus and NyNy77 Borders for RetroArch, globally or per core.
  • +
  • Added an option to install Venomalia's Universial Dynamic Input Textures for Dolphin.
  • +
  • Added an RetroDECK: About section
  • +
  • Added an option to install the RetroDECK Steam Deck controller profile
  • +
  • Added an “RetroDECK: Auto Updates” function that enables or disables auto updates on RetroDECK launch.
  • +
  • Added a Semi-automated RPCS3 firmware installer.
  • +
  • The Move Folder tool has been greatly expanded
  • +
  • You can now move the entire folder or different folders as you choose. (WARNING! Please do not try to move the data to more exotic locations).
  • +
  • The basic BIOS checker has been removed.
  • +
  • The BIOS checker has been updated to look for over 120+ BIOS.
  • +
  • RetroAchivements Login: Now logs into all supported emulators/cores at once.
  • +
  • RetroAchivements Logout: Now logs out of all supported emulators/cores at once.
  • +
  • Added RetroAchivements: Hardcore Mode, that lets you toggle hardcore mode for supported emulators/cores with a logged in RetroAchivements account.
  • +
+

Updates:

+
    +
  • Updated ES-DE to the latest version.
  • +
  • Updated RetroArch and the cores to latest versions.
  • +
  • Updated all standalone emulators and to their latest versions.
  • +
+

Bugfixes and other changes:

+
    +
  • Dolphin/Primehack Wii Mote controls have been redesigned for the Steam Deck to allow both for touch input or right radial as pointer and R2 emulates the Wii Remote Shake needed for certain games.
  • +
  • Updated the RPCS3 to run better and with a better configuration. Read more on the wiki on how to install DLC and patches.
  • +
  • RPCS3 and Duckstations save files where in the wrong directory. They have been moved to fit the overall inside the RetroDECK Framework. If you have any issues, contact us on discord or add them on github.
  • +
  • We made a unique PICO-8 wrapper that makes it runs better in a flatpak environment.
  • +
  • Fixed an avcodec issue that caused some roms for certain emulators to break.
  • +
  • Changed the ES-DE progress bar color
  • +
  • Changed how Yuzu builds are handled and should allow for better Yuzu updates.
  • +
  • Added a low space warning on launch.
  • +
  • Various backend improvements and fixes.
  • +
  • Added the foss Capsimg BIOS for the Amiga RetroArch core.
  • +
  • Implemented ES-DE's experimental theme downloader. For fresh new installs we only now ship one theme: ArtBookNext (as all other themes can be downloaded from the interface).
  • +
+
+
+ + https://github.com/XargonWan/RetroDECK/releases/tag/0.6.6b + +

Bug fixes:

+
    +
  • Fixed ES-DE that was showing the update notification
  • +
  • PSX: Swanstation is back as default emulator
diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml index fe97c1fb..39d9be22 100644 --- a/net.retrodeck.retrodeck.yml +++ b/net.retrodeck.retrodeck.yml @@ -1,46 +1,45 @@ app-id: net.retrodeck.retrodeck runtime: org.kde.Platform runtime-version: 5.15-22.08 -#runtime-version: 6.3 # bumped because of pcsx2-qt sdk: org.kde.Sdk sdk-extensions: - org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3 - #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else base: io.qt.qtwebengine.BaseApp # Needed for Yuzu base-version: 5.15-22.08 # Needed for Yuzu -# add-extensions: -# org.freedesktop.Platform.ffmpeg-full: -# directory: lib/ffmpeg -# add-ld-path: . -# version: '22.08' -# autodownload: true -# autodelete: false command: retrodeck.sh +add-extensions: + org.ppsspp.PPSSPP.Locale: + directory: share/locale + bundle: true + no-autodownload: false + subdirectories: false + autodelete: true + locale-subset: true + finish-args: - - --socket=x11 - #- --socket=wayland + - --socket=fallback-x11 + - --socket=wayland - --socket=pulseaudio - --share=ipc - --share=network - --device=all - - --filesystem=home # Needed to be able to relocate / remove / create symlink at ~/retrodeck + - --filesystem=home - --filesystem=/run/media - --filesystem=/media - --allow=multiarch - --talk-name=org.freedesktop.ScreenSaver - --talk-name=org.freedesktop.PowerManagement.Inhibit - --talk-name=org.freedesktop.login1.Manager - - --talk-name=org.freedesktop.Flatpak + - --talk-name=org.freedesktop.portal.Flatpak.UpdateMonitor - --filesystem=xdg-run/app/com.discordapp.Discord:create - # Yuzu - # - --filesystem=home:ro # This may break Yuzu, let's see - # - --filesystem=/run/media:ro + - --filesystem=xdg-config/gtk-3.0:ro # Dolphin - --allow=bluetooth - #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something - # rpcs3 - #- --socket=fallback-x11 + # PPSSPP + # It allows an SDL application to specify its window class, which can be useful for window managers and desktop environments to identify and group similar windows + - --env=SDL_VIDEO_X11_WMCLASS=net.retrodeck.retrodeck + - --env=SDL_VIDEO_WAYLAND_WMCLASS=net.retrodeck.retrodeck cleanup: # ES-DE @@ -68,7 +67,1202 @@ cleanup-commands: modules: + # dependency of: CEMU + - rd-submodules/shared-modules/libusb/libusb.json + + # This module is used to define the RetroDECK version + # If the version is set as cooker it will automatically generate the version tag based on the date + # else it will just put what is written, "v" is not needed + # The version number is hardcoded in /app/retrodeck/version + # + # UPDATE STEPS FOR MAIN: + # [X] Update the VERSION variable on line containing "VERSION=THISBRANCH" + # [X] Update the appdata.xml with the version number and notes + # + - name: version-initialization + buildsystem: simple + build-commands: + - | + + # on main please update this with the version variable, eg: VERSION='0.7.0b' + VERSION=THISBRANCH + + git checkout ${GITHUB_REF_NAME} + mkdir -p ${FLATPAK_DEST}/retrodeck/ + if [[ $VERSION == *"cooker"* ]]; + then + VERSION="$VERSION-VERSIONPLACEHOLDER" + fi + echo $VERSION >> ${FLATPAK_DEST}/retrodeck/version + cat ${FLATPAK_DEST}/retrodeck/version + echo "Version is $VERSION" + sources: + - type: git + url: https://github.com/XargonWan/RetroDECK.git + branch: THISBRANCH + + - name: xmlstarlet + config-opts: + - --disable-static-libs + - --with-libxml-libs-prefix=/usr/lib + - --with-libxml-include-prefix=/usr/include/libxml2 + sources: + - type: archive + url: https://downloads.sourceforge.net/xmlstar/xmlstarlet-1.6.1.tar.gz + sha256: 15d838c4f3375332fd95554619179b69e4ec91418a3a5296e7c631b7ed19e7ca + - type: shell + commands: + - cp -p /usr/share/automake-*/config.{sub,guess} . + - autoreconf -vfi + post-install: + - ln -s "xml" "${FLATPAK_DEST}/bin/xmlstarlet" ||: + + # mesa repo got a double certificate issue and gnutils cannot handle that so GLU download fails, + # this affects even the shared-modules's glu so I have to replace it temporarly + # more info there: https://gitlab.com/gnutls/gnutls/-/issues/1335 + # dependency of: CEMU + - name: glu + buildsystem: meson + cleanup: + - /include + - /lib/debug + - /lib/pkgconfig + - /lib/*.a + sources: + - type: archive + url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz + sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 + + - name: libgudev + buildsystem: meson + config-opts: + - -Dtests=disabled + - -Dvapi=disabled + - -Dintrospection=disabled + - -Dgtk_doc=false + cleanup: + - /include + - /etc + - /libexec + - /sbin + - /lib/pkgconfig + - /lib/systemd + - /man + - /share/aclocal + - /share/doc + - /share/gtk-doc + - /share/man + - /share/pkgconfig + - '*.la' + - '*.a' + sources: + - type: archive + url: https://ftp.osuosl.org/pub/blfs/conglomeration/libgudev/libgudev-237.tar.xz + sha256: 0d06b21170d20c93e4f0534dbb9b0a8b4f1119ffb00b4031aaeb5b9148b686aa + + - name: chdman-tool + buildsystem: simple + build-commands: + - cmake -B . -G Ninja + - cmake --build . + - cp chdman /app/bin + sources: + - type: git + url: https://github.com/CharlesThobe/chdman.git + commit: f7cadf1720cbeba8a14f2685830ff424a0c7f6cd + + - name: rclone + buildsystem: simple + build-commands: + - cp rclone ${FLATPAK_DEST}/bin/ + sources: + - type: archive + url: https://github.com/rclone/rclone/releases/download/v1.61.1/rclone-v1.61.1-linux-amd64.zip + sha256: 6d6455e1cb69eb0615a52cc046a296395e44d50c0f32627ba8590c677ddf50a9 + + # Source: https://github.com/flathub/com.valvesoftware.Steam.Utility.steamtinkerlaunch/blob/129c9192f874405d21612d95f9749dc2bcaf8cea/modules/rsync.yml#L5 + - name: rsync + no-autogen: true + config-opts: + - --prefix=${FLATPAK_DEST} + - --with-included-popt + - --with-included-zlib + - --disable-debug + - --disable-xxhash # Unable to meet dependency -- rsync refuses to see the required xxhash.h file + sources: + - type: archive + url: https://download.samba.org/pub/rsync/src/rsync-3.2.7.tar.gz + sha256: 4e7d9d3f6ed10878c58c5fb724a67dacf4b6aac7340b13e488fb2dc41346f2bb + x-checker-data: + type: anitya + project-id: 4217 + stable-only: true + url-template: https://download.samba.org/pub/rsync/src/rsync-$version.tar.gz + + - name: jq + buildsystem: simple + build-commands: + - cp jq-linux64 ${FLATPAK_DEST}/bin/jq + - chmod +x ${FLATPAK_DEST}/bin/jq + sources: + - type: file + url: https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 + sha256: af986793a515d500ab2d35f8d2aecd656e764504b789b66d7e1a0b727a124c44 + + - name: yq + buildsystem: simple + build-commands: + - cp yq_linux_amd64 ${FLATPAK_DEST}/bin/yq + - chmod +x ${FLATPAK_DEST}/bin/yq + sources: + - type: file + url: https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64 + sha256: 4ee662847c588c3ef2fec8bfb304e8739e3dbaba87ccb9a608d691c88f5b64dc + + # dependency of: CEMU (13.0.0) + - name: glslang + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DENABLE_CTEST=OFF + cleanup: + - /include + - /lib/cmake + sources: + - type: archive + url: https://github.com/KhronosGroup/glslang/archive/13.0.0.tar.gz + sha256: bcda732434f829aa74414ea0e06d329ec8ac28637c38a0de45e17c8fd25a4715 + x-checker-data: + type: anitya + stable-only: true + project-id: 205796 + url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz + + # ES-DE - START + # https://gitlab.com/es-de/emulationstation-de + + #This is disabled because we added the extension (line 11), check if the videos are ok. + - name: ffmpeg + config-opts: + - --disable-static + - --disable-programs + - --disable-doc + - --enable-gpl + - --enable-shared + - --enable-libvorbis + - --enable-libopus + - --enable-libvpx + - --enable-postproc + sources: + - type: git + url: https://github.com/FFmpeg/FFmpeg.git + tag: n5.1.1 + + - name: freeimage + no-autogen: true + build-options: + cxxflags: -std=c++14 + make-args: + - DESTDIR=/app + sources: + - type: archive + url: http://downloads.sourceforge.net/freeimage/FreeImage3180.zip + sha256: f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd + - type: shell + commands: + - sed -i 's|-o root -g root ||' ./Makefile.gnu + - sed -i 's|/usr|/app|' ./Makefile.gnu + + # dependency of: CEMU + - name: pugixml + buildsystem: cmake-ninja + config-opts: + - -DBUILD_SHARED_LIBS=ON + cleanup: + - /include + - /lib/cmake + - /lib/pkgconfig + sources: + - type: archive + url: https://github.com/zeux/pugixml/releases/download/v1.13/pugixml-1.13.tar.gz + sha256: 40c0b3914ec131485640fa57e55bf1136446026b41db91c1bef678186a12abbe + x-checker-data: + type: anitya + project-id: 3728 + url-template: https://github.com/zeux/pugixml/releases/download/v$version/pugixml-$version.tar.gz + + - name: libgit2 + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DBUILD_SHARED_LIBS:BOOL=ON + - -DTHREADSAFE=ON + sources: + - type: git + url: https://github.com/libgit2/libgit2.git + tag: v1.6.3 + + # Needed from ES-DE 2.1.0+ + - name: libpoppler-glib + buildsystem: cmake-ninja + config-opts: + - -DENABLE_BOOST=OFF + sources: + - type: archive + url: https://gitlab.freedesktop.org/poppler/poppler/-/archive/poppler-22.11.0/poppler-poppler-22.11.0.tar.bz2 + sha256: b8f618d5c62030034d5c8da4d3f6a740260b7620b9a31021679ce1914d327f81 + cleanup: + - /lib/pkgconfig + - /include + - '*.a' + - '*.la' + + # When updating this module remember to check those: + # https://gitlab.com/es-de/emulationstation-de/-/blob/[VERSION]/resources/systems/unix/es_find_rules.xml + # But we don't include them 1:1 as RetroDECK got some specific configs in some cases + - name: emulationstation-de + buildsystem: cmake-ninja + config-opts: + - -DRETRODECK=on + cleanup: + - es-app + - es-core + sources: + - type: git + url: https://gitlab.com/es-de/emulationstation-de + branch: 5545187d82fabf93256b7d176f39a0a98bcd6c54 + - type: shell + commands: + - sed -i 's#"EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#"RetroDECK + v'$(cat ${FLATPAK_DEST}/retrodeck/version)', ES-DE v" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#g' + es-app/src/guis/GuiMenu.cpp + - type: patch + path: rd-submodules/es-de/GuiMenu.cpp.patch + - type: patch + path: rd-submodules/es-de/GuiMenu.h.patch + - type: patch + path: rd-submodules/es-de/ViewController.cpp.patch + - type: patch + path: rd-submodules/es-de/Window.cpp.patch + + # ES-DE - END + + # ES-DE Themes - START + + - name: art-book-next-es-de + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-es-de/ + - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-es-de/ + sources: + - type: git + url: https://github.com/anthonycaccese/art-book-next-es-de.git + commit: 4fe896af7447404f6ea083335cd661c91b0f7860 + + # ES-DE Themes - END + + # External manifests start + + # RetroArch - START + # https://github.com/flathub/org.libretro.RetroArch + + - name: retroarch + config-opts: + - '--enable-dbus' + make-args: + - 'GLOBAL_CONFIG_DIR=${FLATPAK_DEST}/etc' + - HAVE_TRANSLATE=1 + - HAVE_ACCESSIBILITY=1 + sources: + - type: git + url: 'https://github.com/libretro/RetroArch.git' + commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04 + - type: file + path: rd-submodules/retroarch/retroarch.cfg + post-install: + - mkdir -p ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ + - >- + mv ${FLATPAK_DEST}/share/pixmaps/retroarch.svg + ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ + - rmdir --ignore-fail-on-non-empty ${FLATPAK_DEST}/share/pixmaps/ + - mkdir -p ${FLATPAK_DEST}/etc + - >- + sed s:@prefix@:${FLATPAK_DEST}:g retroarch.cfg > + ${FLATPAK_DEST}/etc/retroarch.cfg + modules: + - rd-submodules/retroarch/modules/libpng/libpng-1.6.35.json + - rd-submodules/retroarch/modules/nvidia-cg-toolkit/nvidia-cg-toolkit-3.1.0013.json + - rd-submodules/shared-modules/SDL/SDL-1.2.15.json + - rd-submodules/shared-modules/SDL/SDL_image-1.2.12.json + - rd-submodules/shared-modules/SDL/SDL_mixer-1.2.12.json + - rd-submodules/shared-modules/SDL/SDL_net-1.2.8.json + - rd-submodules/shared-modules/SDL/SDL_ttf-2.0.11.json + #- rd-submodules/shared-modules/libusb/libusb.json moved outside + # certificate glu issue + #- rd-submodules/shared-modules/gudev/gudev.json + - rd-submodules/retroarch/modules/libbz2/libbz2-1.0.8.json + - rd-submodules/retroarch/modules/xrandr/xrandr-1.5.1.json + - rd-submodules/retroarch/modules/libaio/libaio-0.3.112.json + # certificate issue, check glu module for more info + #- rd-submodules/shared-modules/glu/glu-9.json + - rd-submodules/shared-modules/libdecor/libdecor-0.1.1.json + - name: retroarch-filers-video + subdir: gfx/video_filters + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/RetroArch.git' + commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04 + - name: retroarch-filers-audio + subdir: libretro-common/audio/dsp_filters + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/RetroArch.git' + commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04 + - name: retroarch-assets + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/retroarch-assets.git' + commit: 7b735ef18bcc6508b1c9a626eb237779ff787179 + - name: libretro-database + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/libretro-database.git' + commit: e3b5cb00da4f3ab99491bf67c19630ffa7ee19f2 + - name: libretro-core-info + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/libretro-core-info.git' + commit: dacae85b406131feb12395a415fdf57fc4745201 + - name: retroarch-joypad-autoconfig + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/retroarch-joypad-autoconfig.git' + commit: 5666e46bb89caf4e9af358fdb97a2b384cb62f36 + - name: common-shaders + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: https://github.com/libretro/common-shaders.git + commit: 86cfa146a8dfddf6377ddb5dbcff552feae2e5bf + - name: slang-shaders + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/slang-shaders.git' + commit: 9266fa24b64b274fd429b73469ded3561de7b8f4 + - name: glsl-shaders + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/glsl-shaders.git' + commit: c26b9e1913eda8c25d6cd218818745a3b451f982 + - name: common-overlays + make-install-args: + - PREFIX=${FLATPAK_DEST} + sources: + - type: git + url: 'https://github.com/libretro/common-overlays.git' + commit: 115d8670c2e032e4a41ba45f766f5cfd9dae28b8 + + # RetroArch - END + + # Not part of the offical RetroArch manifest + - name: retroarch-cores + buildsystem: simple + build-commands: + - mkdir -p /app/share/libretro/cores/ + - mv ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/ + sources: + - type: archive + url: https://buildbot.libretro.com/stable/1.16.0/linux/x86_64/RetroArch_cores.7z + sha256: a149d34662516d791e8f90507d1107949cb158196d6bbf75105c649fb26504b6 + + - name: retroarch-sameduck-core + buildsystem: simple + build-commands: + - mv sameduck_libretro.so /app/share/libretro/cores/sameduck_libretro.so + sources: + - type: archive + url: https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip + sha256: SAMEDUCKSHAPLACEHOLDER + + - name: ppsspp-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/PPSSPP + - mv -f assets/* ${FLATPAK_DEST}/retrodeck/extras/PPSSPP/ + sources: + - type: archive + url: https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip + sha256: PPSSPPBIOSHASHPLACEHOLDER + + - name: msx-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/MSX + - mv -f Databases ${FLATPAK_DEST}/retrodeck/extras/MSX/Databases + - mv -f Machines ${FLATPAK_DEST}/retrodeck/extras/MSX/Machines + sources: + - type: archive + url: http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip + sha256: MSXBIOSHASHPLACEHOLDER + strip-components: 0 + + - name: amiga-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/Amiga + - cp -f Linux/x86-64/capsimg.so ${FLATPAK_DEST}/retrodeck/extras/Amiga/capsimg.so + sources: + - type: archive + url: https://github.com/rsn8887/capsimg/releases/download/1.1/Capsimg_for_Retroarch.zip + sha256: 16c1b511b8e1374a2b6461a66bb6f07b7d2627eb4e941fd1497a432330acaad1 + strip-components: 0 + + # PPSSPP - START + # https://github.com/flathub/org.ppsspp.PPSSPP + + - name: ppsspp + buildsystem: cmake-ninja + config-opts: + - -DUSE_SYSTEM_FFMPEG=OFF + - -DUSE_SYSTEM_LIBZIP=ON + - -DUSE_SYSTEM_ZSTD=ON + + - -DUSE_WAYLAND_WSI=ON + - -DUSING_QT_UI=OFF + + - -DBUILD_TESTING=OFF + - -DOpenGL_GL_PREFERENCE=GLVND + build-options: + arch: + aarch64: + config-opts: + - -DUSING_EGL=ON + - -DUSING_GLES2=ON + post-install: + - install -Dm644 icons/icon-512.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ppsspp.svg + cleanup: + - /share/ppsspp/assets/lang/README.md + sources: + - type: git + url: &ppsspp-url https://github.com/hrydgard/ppsspp.git + tag: v1.16.3 + commit: a9b6421dfde68be9d065b51e9d519699ce2e9053 + x-checker-data: + type: json + url: https://api.github.com/repos/hrydgard/ppsspp/releases/latest + version-query: .tag_name | sub("^v"; "") + tag-query: .tag_name + timestamp-query: .published_at + + - name: ppsspp-localization + buildsystem: simple + build-commands: + - | + for LANG_FILE in assets/lang/*.ini; do + LANG_FILE_NAME="$(basename "$LANG_FILE")" + LANG_PREFIX="${LANG_FILE_NAME:0:2}" + LANG_DEST="$FLATPAK_DEST/share/locale/$LANG_PREFIX/ppsspp/$LANG_FILE_NAME"; + ln -fsr "$LANG_DEST" "$FLATPAK_DEST/share/ppsspp/$LANG_FILE" + install -Dm644 "$LANG_FILE" "$LANG_DEST" + done + sources: + - type: shell + commands: + - cp -a $FLATPAK_DEST/share/ppsspp/assets . + + # PPSSPP - END + + # Yuzu - START + # https://github.com/yuzu-emu/yuzu-mainline/releases + + - name: Yuzu + buildsystem: simple + build-commands: + - chmod +x yuzu*.AppImage + - ./yuzu*.AppImage --appimage-extract + - mkdir -p "${FLATPAK_DEST}/yuzu" + - cp -r squashfs-root/* "${FLATPAK_DEST}/yuzu" + - ln -s "${FLATPAK_DEST}/yuzu/usr/bin/yuzu" "${FLATPAK_DEST}/bin/yuzu" + sources: + - type: file + url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1567/yuzu-mainline-20230923-ace91dd0c.AppImage + sha256: 965bdfa63e713a0672fb5a037ecb527b4860600c6a2526f7c053bfe082b5a9d8 + + # Yuzu - END + + # CITRA - START + # DO NOT UPDATE! WENT ON QT6 + # https://github.com/flathub/org.citra_emu.citra + + - rd-submodules/shared-modules/SDL2/SDL2-with-libdecor.json + + - name: citra + buildsystem: cmake-ninja + builddir: true + config-opts: + - '-DCMAKE_BUILD_TYPE=Release' + - '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON' + - '-DENABLE_LTO=ON' + - '-DENABLE_QT_TRANSLATION=ON' + - '-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON' + - '-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF' + # - '-DENABLE_FFMPEG_VIDEO_DUMPER=ON' + # FFMPEG VIDEO DUMPER was disabled because of this: https://github.com/citra-emu/citra/issues/5949 + - '-DUSE_SYSTEM_SDL2=ON' + - '-DCMAKE_POLICY_DEFAULT_CMP0069=NEW' + - '-DENABLE_FDK=ON' + cleanup: + - /share/man + - /share/pixmaps + post-install: + - install -Dm644 ../dist/citra.svg /app/share/icons/hicolor/scalable/apps/citra.svg + - install -Dm644 ../dist/icon.png /app/share/icons/hicolor/512x512/apps/citra.png + sources: + - type: archive + url: >- + https://github.com/citra-emu/citra-nightly/releases/download/nightly-1898/citra-unified-source-20230504-70335a7.tar.xz + sha256: b320585bd8c4c075f63d3d9c74b830718e58fcf04d987a5dcead402a72abf753 + x-checker-data: + type: json + url: https://api.github.com/repos/citra-emu/citra-nightly/releases/latest + version-query: .tag_name + url-query: >- + .assets[] | .browser_download_url | + match("https://.+citra-unified-source-.+.xz$") | .string + is-main-source: true + - type: patch + path: rd-submodules/citra/unified-source-compat.patch + + + # CITRA - END + + # PCSX2 - START + # Inspired by: + # https://github.com/flathub/com.zettlr.Zettlr/blob/master/com.zettlr.Zettlr.yaml + # https://pcsx2.net/downloads/ + + - name: pcsx2-qt + buildsystem: simple + build-commands: + - chmod +x pcsx2*.AppImage + - ./pcsx2*.AppImage --appimage-extract + - mkdir -p "${FLATPAK_DEST}/pcsx2-qt" + - cp -r squashfs-root/* "${FLATPAK_DEST}/pcsx2-qt" + - ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt" + sources: + - type: file + url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5059/pcsx2-v1.7.5059-linux-appimage-x64-Qt.AppImage + sha256: a51addc9bd15b77e842160acecb1f18486f8a024e5e73e8aea5de71de2b164c7 + + # PCSX2 - END + + # Dolphin - START + # DO NOT UPDATE! WENT ON QT6 + # https://github.com/flathub/org.DolphinEmu.dolphin-emu + # WHEN UPADTING: remember to update rd-submodules/dolphin contents + + # needed for the emulate bluetooth adapter feature to work + - name: bluez + config-opts: + - --enable-library + - --disable-manpages + - --disable-udev + - --disable-tools + - --disable-cups + - --disable-monitor + - --disable-client + - --disable-systemd + - --disable-a2dp + - --disable-avrcp + - --disable-network + - --disable-obex + - --disable-bap + - --disable-mcp + - --with-dbusconfdir=/app/etc + - --with-dbussessionbusdir=/app/usr/lib/system-services + sources: + - type: archive + url: https://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz + sha256: 39fea64b590c9492984a0c27a89fc203e1cdc74866086efb8f4698677ab2b574 + x-checker-data: + type: anitya + project-id: 10029 + stable-only: true + url-template: https://www.kernel.org/pub/linux/bluetooth/bluez-$version.tar.xz + + # enables motion controls on non-wii controllers (switch, ps4, etc) + # requires a udev rule enabling Motion Sensors access + - name: libevdev + buildsystem: meson + config-opts: + - -Dtests=disabled + - -Ddocumentation=disabled + sources: + - type: archive + url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.0.tar.xz + sha256: 9edf2006cc86a5055279647c38ec923d11a821ee4dc2c3033e8d20e8ee237cd9 + x-checker-data: + type: anitya + project-id: 20540 + stable-only: true + url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz + + # needed for screensaver inhibition + - name: xdg-screensaver-shim + buildsystem: meson + sources: + - type: archive + url: https://github.com/Unrud/xdg-screensaver-shim/archive/0.0.2.tar.gz + sha256: 0ed2a69fe6ee6cbffd2fe16f85116db737f17fb1e79bfb812d893cf15c728399 + + - name: dolphin-emu + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DENABLE_ALSA=OFF + - -DENABLE_SDL=ON + - -DENABLE_EVDEV=ON + - -DDISTRIBUTOR=Flathub + cleanup: + - /share/man + post-install: + - install -D -t ${FLATPAK_DEST}/bin/ dolphin-emu-wrapper + - sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg + sources: + - type: git + # Sometimes Dolphin or its submodules clone are failing in https so it must done in ssh + # fatal: remote transport reported error + # url: ssh://git@github.com/dolphin-emu/dolphin.git + url: https://github.com/dolphin-emu/dolphin.git + commit: 46b99671d9158e0ca840c1d8ef249db0f321ced7 + x-checker-data: + type: json + url: https://dolphin-emu.org/update/latest/beta + commit-query: .hash + version-query: .shortrev + timestamp-query: .date + is-main-source: true + # detects whether dolphin is running in a flatpak sandbox + # and makes it use xdg directories if it is. + # prevents dolphin from attempting to write conf files + # in non-writable paths, typically happens when a user + # has leftover files from a previous non-flatpak install + - type: patch + path: rd-submodules/dolphin/detectflatpak.patch + # version strings must match exactly for online multiplayer + - type: patch + path: rd-submodules/dolphin/nodirtyversion.patch + - type: script + commands: + - | + for i in {0..9}; do + test -S $XDG_RUNTIME_DIR/discord-ipc-$i || + ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i; + done + dolphin-emu "$@" + dest-filename: dolphin-emu-wrapper + + - name: universal_dynamic_input + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures + - cp -r * ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures/ + sources: + - type: git + url: https://github.com/Venomalia/UniversalDynamicInput.git + commit: UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER + + # Dolphin - END + + # XEMU - START + # https://github.com/flathub/app.xemu.xemu + + - name: libpcap + buildsystem: cmake-ninja + cleanup: + - /bin + - /include + - /lib/debug + - /lib/pkgconfig + - /lib/*.a + - /share + sources: + - type: archive + url: https://www.tcpdump.org/release/libpcap-1.10.4.tar.gz + sha256: ed19a0383fad72e3ad435fd239d7cd80d64916b87269550159d20e47160ebe5f + x-checker-data: + type: anitya + project-id: 1702 + stable-only: true + url-template: https://www.tcpdump.org/release/libpcap-$version.tar.gz + + - name: PyYAML + buildsystem: simple + build-commands: + - python3 setup.py install --prefix=/app --root=/ + sources: + - type: archive + url: https://github.com/yaml/pyyaml/archive/refs/tags/6.0.tar.gz + sha256: f33eaba25d8e0c1a959bbf00655198c287dfc5868f5b7b01e401eaa1796cc778 + + - name: xemu + buildsystem: autotools + builddir: true + no-make-install: true + build-options: + cflags: -O3 -DXBOX=1 -Wno-error=redundant-decls + config-opts: + - --audio-drv-list=sdl + - --disable-werror + - --target-list=i386-softmmu + make-args: + - qemu-system-i386 + post-install: + - |- + for px in 16 32 48 64 128 256 512; do + install -Dm644 ../ui/icons/xemu_${px}x${px}.png $FLATPAK_DEST/share/icons/hicolor/${px}x${px}/apps/app.xemu.xemu.png + done + - install -Dm644 ../ui/icons/xemu.svg $FLATPAK_DEST/share/icons/hicolor/scalable/apps/app.xemu.xemu.svg + - mv qemu-system-i386 $FLATPAK_DEST/bin/xemu + - mkdir -p $FLATPAK_DEST/share/licenses/xemu + - cd .. && python3 scripts/gen-license.py > $FLATPAK_DEST/share/licenses/xemu/LICENSE.txt + sources: + - type: git + url: https://github.com/xemu-project/xemu.git + tag: v0.7.98 + commit: 7bfb7c85378f64f93556c365ea0cc18cb2181dc8 + x-checker-data: + type: json + url: https://api.github.com/repos/xemu-project/xemu/releases/latest + tag-query: .tag_name + timestamp-query: .published_at + version-query: .tag_name + + - name: xemu-dummy-hdd + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/XEMU + - mv -f "xbox_hdd.qcow2" "${FLATPAK_DEST}/retrodeck/extras/XEMU/xbox_hdd.qcow2" + sources: + - type: archive + url: https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip + sha256: XEMUHDDHASHPLACEHOLDER + + # XEMU - END + + # MELONDS - START + # https://github.com/flathub/net.kuribo64.melonDS + # ちっちゃい、かわいい! + + - name: libslirp + buildsystem: meson + sources: + - type: git + url: https://gitlab.freedesktop.org/slirp/libslirp.git + tag: v4.7.0 + - name: melonds + buildsystem: cmake-ninja + builddir: true + build-options: + arch: + aarch64: + config-opts: + - -DENABLE_LTO_RELEASE=OFF + sources: + - type: git + url: https://github.com/melonDS-emu/melonDS.git + commit: 430de6b2702bb93faa8c2004aff3fbd084db4a1e + - type: patch + path: rd-submodules/melonds/hotkeys.patch + + # MELONDS - END + + # RPCS3 - START + # DO NOT UPDATE! WENT ON QT6 + # https://github.com/flathub/net.rpcs3.RPCS3 + + # glu issue, check glu module for more info + #- rd-submodules/shared-modules/glu/glu-9.json + + # dependency of: CEMU + - rd-submodules/shared-modules/glew/glew.json + + - name: rpcs3 + buildsystem: cmake-ninja + builddir: true + build-options: + append-ld-library-path: /usr/lib/sdk/llvm16/lib + append-path: /usr/lib/sdk/llvm16/bin + cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong + -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection + -fcf-protection -fno-omit-frame-pointer + cflags-override: true + cxxflags: *optflags + cxxflags-override: true + env: + AR: llvm-ar + CC: clang + CXX: clang++ + RANLIB: llvm-ranlib + ldflags: -fuse-ld=lld + config-opts: + - -DCMAKE_BUILD_TYPE=RelWithDebInfo + #- -DBUILD_LLVM_SUBMODULE=ON this was replaced by the fllowing: + - -DBUILD_LLVM=OFF + - -DUSE_NATIVE_INSTRUCTIONS=OFF + - -DUSE_PRECOMPILED_HEADERS=OFF + - -DUSE_SDL=ON + - -DUSE_SYSTEM_CURL=ON + # Disabled this to force RPCS3 to use our built FFMPEG + - -DUSE_SYSTEM_FFMPEG=OFF + - -DUSE_SYSTEM_LIBPNG=ON + - -DUSE_SYSTEM_SDL=ON + - -DUSE_SYSTEM_ZLIB=ON + - -Wno-dev + post-install: + - cp /usr/lib/sdk/llvm16/lib/libLLVM-16.so /app/lib/ + - |- + set -eux + + COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)" + COMM_COUNT="$(git rev-list --count HEAD)"; + COMM_HASH="$(git rev-parse --short=8 HEAD)"; + sources: + - type: git + url: https://github.com/RPCS3/rpcs3.git + commit: a828c214b5c0b87b81fcd13ff3c1e952c9a5d6dd + + # RPCS3 - END + + # PRIMEHACK - START + # https://github.com/flathub/io.github.shiiion.primehack + + - name: primehack + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DENABLE_ALSA=OFF + - -DENABLE_SDL=ON + - -DENABLE_EVDEV=ON + - -DDISTRIBUTOR=Flathub + cleanup: + - /share/man + post-install: + - install -D primehack-wrapper /app/bin/primehack-wrapper + sources: + - type: git + url: https://github.com/TheDrifter363/primehack.git + commit: 6295c695307a67f11ee202b05cbdd7b5c1edae5c + # detects whether dolphin is running in a flatpak sandbox + # and makes it use xdg directories if it is. + # prevents dolphin from attempting to write conf files + # in non-writable paths, typically happens when a user + # has leftover files from a previous non-flatpak install + - type: patch + path: rd-submodules/dolphin/detectflatpak.patch + # version strings must match exactly for online multiplayer + - type: patch + path: rd-submodules/dolphin/nodirtyversion.patch + - type: script + commands: + - for i in {0..9}; do + - test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i; + - done + - primehack "$@" + dest-filename: primehack-wrapper + + # # PRIMEHACK - END + + # Duckstation-AppImage - START + # https://github.com/stenzek/duckstation/releases/tag/preview + + - name: Duckstation-AppImage + buildsystem: simple + build-commands: + - chmod +x DuckStation-*.AppImage + - ./DuckStation-x64*.AppImage --appimage-extract + - mkdir -p "${FLATPAK_DEST}/duckstation" + - cp -r squashfs-root/* "${FLATPAK_DEST}/duckstation" + - ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation-qt" "${FLATPAK_DEST}/bin/duckstation-qt" + sources: + - type: file + url: https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage + sha256: DUCKSTATIONSHAPLACEHOLDER + + # Duckstation-AppImage - END + + # Cemu - START + # LATEST BUILD BEFORE RUNTIME 23.08 + # https://github.com/cemu-project/Cemu/releases + # https://github.com/flathub/info.cemu.Cemu + + - name: hidapi + buildsystem: cmake-ninja + sources: + - type: archive + url: https://github.com/libusb/hidapi/archive/refs/tags/hidapi-0.14.0.tar.gz + sha256: a5714234abe6e1f53647dd8cba7d69f65f71c558b7896ed218864ffcf405bcbd + x-checker-data: + type: anitya + project-id: 5594 + stable-only: true + url-template: https://github.com/libusb/hidapi/archive/refs/tags/hidapi-$version.tar.gz + + - name: boost + buildsystem: simple + build-commands: + - ./bootstrap.sh --prefix=${FLATPAK_DEST} --with-toolset=gcc --with-libraries=filesystem,system,program_options,nowide + - ./b2 install variant=release link=shared runtime-link=shared cxxflags="$CXXFLAGS" + linkflags="$LDFLAGS" -j ${FLATPAK_BUILDER_N_JOBS} + cleanup: + - /include + - /lib/cmake + sources: + - type: archive + url: https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.bz2 + sha256: 6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e + x-checker-data: + type: anitya + project-id: 6845 + stable-only: true + url-template: https://boostorg.jfrog.io/artifactory/main/release/$version/source/boost_${major}_${minor}_$patch.tar.bz2 + + - name: libzip + buildsystem: cmake-ninja + config-opts: + - -DBUILD_DOC=OFF + - -DBUILD_EXAMPLES=OFF + - -DBUILD_REGRESS=OFF + - -DBUILD_TOOLS=OFF + cleanup: + - /bin + - /include + - /lib/cmake + - /lib/pkgconfig + sources: + - type: archive + url: https://libzip.org/download/libzip-1.10.1.tar.xz + mirror-urls: + - https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.xz + sha256: dc3c8d5b4c8bbd09626864f6bcf93de701540f761d76b85d7c7d710f4bd90318 + x-checker-data: + type: anitya + project-id: 10649 + url-template: https://libzip.org/download/libzip-$version.tar.xz + + - name: rapidjson + buildsystem: cmake-ninja + config-opts: + - -DRAPIDJSON_BUILD_DOC=OFF + - -DRAPIDJSON_BUILD_EXAMPLES=OFF + - -DRAPIDJSON_BUILD_TESTS=OFF + - -DRAPIDJSON_BUILD_THIRDPARTY_GTEST=OFF + cleanup: + - /include + - /lib/cmake + - /lib/pkgconfig + - /share/doc + sources: + - type: archive + url: https://github.com/Tencent/rapidjson/archive/refs/tags/v1.1.0.tar.gz + sha256: bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e + x-checker-data: + type: anitya + project-id: 7422 + stable-only: true + url-template: https://github.com/Tencent/rapidjson/archive/refs/tags/v$version.tar.gz + + - name: glm + buildsystem: cmake-ninja + cleanup: ['*'] + no-make-install: true + post-install: + - install -d ${FLATPAK_DEST}/include + - cp -R glm ${FLATPAK_DEST}/include + - cp -R cmake/glm ${FLATPAK_DEST}/lib/cmake + sources: + - type: archive + url: https://github.com/g-truc/glm/releases/download/0.9.9.8/glm-0.9.9.8.zip + sha256: 37e2a3d62ea3322e43593c34bae29f57e3e251ea89f4067506c94043769ade4c + + - name: fmt + buildsystem: cmake-ninja + config-opts: + - -DFMT_TEST=Off + cleanup: + - '*' + sources: + - type: archive + url: https://github.com/fmtlib/fmt/archive/9.1.0.tar.gz + sha256: 5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2 + x-checker-data: + type: anitya + project-id: 11526 + url-template: https://github.com/fmtlib/fmt/archive/$version.tar.gz + versions: {<: '10.0'} + + - name: wxwidgets + cleanup: + - /bin + - /include + - /lib/cmake + - /lib/wx + - /share + sources: + - type: archive + url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.2.1/wxWidgets-3.2.2.1.tar.bz2 + sha256: dffcb6be71296fff4b7f8840eb1b510178f57aa2eb236b20da41182009242c02 + x-checker-data: + type: anitya + project-id: 5150 + stable-only: true + url-template: https://github.com/wxWidgets/wxWidgets/releases/download/v$version/wxWidgets-$version.tar.bz2 + + - name: Cemu + buildsystem: cmake-ninja + config-opts: + - -DPORTABLE=false + - -DENABLE_VCPKG=false + build-options: + env: + - LC_ALL=C + sources: + - type: git + url: https://github.com/cemu-project/Cemu + # TODO: Update tag pattern on next stable ^v([\d.]+)$ + x-checker-data: + type: git + tag-pattern: ^v([\d.]+-\d+)$ + tag: v2.0-47 + commit: 85aa4f095b119e98620451a0c19c80f656d944a6 + - type: shell + commands: + - sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe + --tag | sed "s/v2.0-//")\" CACHE STRING \"\")/g" -i CMakeLists.txt + - type: script + commands: + - | + for d in DiscordCanary Discord; do + for i in {0..9}; do + test -S $XDG_RUNTIME_DIR/discord-ipc-$i || + ln -sf {app/com.discordapp.$d,$XDG_RUNTIME_DIR}/discord-ipc-$i; + done + done + Cemu_relwithdebinfo "$@" + dest-filename: Cemu-wrapper + - type: script + dest-filename: dev_release_metainfo.py + commands: + - | + import os + import xml.etree.ElementTree as ET + meta_file = os.environ.get('AS_META_FILE') + version = os.environ.get('AS_META_VERSION') + release_type = os.environ.get('AS_META_TYPE') + release_date = os.environ.get('AS_META_DATE') + release_url = os.environ.get('AS_META_URL') + tree = ET.parse(meta_file) + root = tree.getroot() + el_releases = root.find('releases') + for el_release in el_releases: + el_releases.remove(el_release) + el_release = ET.SubElement(el_releases, 'release') + el_url = ET.SubElement(el_release, 'url') + el_url.text = release_url + el_release.attrib['type'] = release_type + el_release.attrib['date'] = release_date + el_release.attrib['version'] = version + ET.indent(tree, space=' ', level=0) + tree.write(meta_file, encoding='utf8') + post-install: + - cp -r bin/gameProfiles ${FLATPAK_DEST}/share/Cemu/ + - cp -r bin/resources ${FLATPAK_DEST}/share/Cemu/ + - install -Dm644 -t ${FLATPAK_DEST}/share/icons/hicolor/128x128/apps/ dist/linux/info.cemu.Cemu.png + - install -D -t ${FLATPAK_DEST}/bin/ bin/Cemu_relwithdebinfo Cemu-wrapper + + # Cemu - END + + # Ryujinx - START + # https://github.com/flathub/org.ryujinx.Ryujinx + + - name: Ryujinx + buildsystem: simple + build-options: + no-debuginfo: true + no-debuginfo-compression: true + strip: false + arch: + x86_64: + env: + RUNTIME: linux-x64 + env: + PKG_CONFIG_PATH: /app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig + DOTNET_CLI_TELEMETRY_OPTOUT: 'true' + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true' + RYUJINX_VERSION: 1.1.1014 + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: flathub + RYUJINX_TARGET_RELEASE_CHANNEL_REPO: org.ryujinx.Ryujinx + RYUJINX_TARGET_RELEASE_CHANNEL_NAME: master + build-commands: + - | + export PATH=$PATH:/run/build/Ryujinx/dotnet-sdk + export RYUJINX_GIT_SHORT_HASH=$(git rev-parse --short HEAD) + export RUNTIME_FRAMEWORK_VERSION=$(find nuget-sources -name 'microsoft.netcore.app.host.linux-x64.*' | grep -oP '(\d.\d.\d+.nupkg)' | grep -oP '(\d.\d.\d+)') + sed -r --in-place "s/\%\%RYUJINX_BUILD_VERSION\%\%/$RYUJINX_VERSION/g;" src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$RYUJINX_GIT_SHORT_HASH/g;" src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_NAME/g;" src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_OWNER/g;" src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_REPO/g;" src/Ryujinx.Common/ReleaseInformation.cs + mkdir -p /app/bin + dotnet publish -c Release -r $RUNTIME /p:DebugType=embedded src/Ryujinx /p:Version=$RYUJINX_VERSION /p:SourceRevisionId=$RYUJINX_GIT_SHORT_HASH /p:ExtraDefineConstants="DISABLE_UPDATER%2CFORCE_EXTERNAL_BASE_DIR" /p:RuntimeFrameworkVersion=$RUNTIME_FRAMEWORK_VERSION --self-contained --source nuget-sources + if [ $? -ne 0 ]; then + exit 1; + fi; + cp -r --remove-destination /run/build/Ryujinx/src/Ryujinx/bin/Release/net7.0/$RUNTIME/publish/* /app/bin/ + chmod +x /app/bin/Ryujinx.sh + mkdir -p /app/lib/ffmpeg + ln -s /usr/lib/x86_64-linux-gnu/libX11.so.6 /app/lib/libX11.so + install -Dm755 ryujinx-wrapper /app/bin/ryujinx-wrapper + install -Dm644 distribution/misc/Logo.svg /app/share/icons/hicolor/scalable/apps/ryujinx.svg + sources: + - type: archive + only-arches: + - x86_64 + dest: dotnet-sdk + url: https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-x64.tar.gz + sha256: 4634fa4da7ae4e3dadb83e320a87fb26f0cb12a7ca02bf9f10e6c3c1c91d645c + x-checker-data: + type: rotating-url + url: https://aka.ms/dotnet/7.0/dotnet-sdk-linux-x64.tar.gz + pattern: https://dotnetcli.azureedge.net/dotnet/Sdk/^([\d\.a-z-]+)$/dotnet-sdk-^([\d\.a-z-]+)$-linux-x64.tar.gz + - rd-submodules/ryujinx/nuget_sources.json + - type: git + url: https://github.com/Ryujinx/Ryujinx.git + commit: 7ccff037e87f82f3461f3e1422235e29800eaa2f + - type: file + path: rd-submodules/ryujinx/ryujinx-wrapper + + # Ryujinx - END + # MAME - Start + # https://github.com/flathub/org.mamedev.MAME - name: mame buildsystem: simple @@ -94,22 +1288,84 @@ modules: - cp -r hash/ ${FLATPAK_DEST}/share/mame/ - cp -r hlsl/ ${FLATPAK_DEST}/share/mame/ - cp -r ini/ ${FLATPAK_DEST}/share/mame/ - #- install -Dm 0644 mame.ini ${FLATPAK_DEST}/share/mame/ini/mame.ini + - install -Dm 0644 mame.ini ${FLATPAK_DEST}/share/mame/ini/mame.ini - cp -r language/ ${FLATPAK_DEST}/share/mame/ - cp -r plugins/ ${FLATPAK_DEST}/share/mame/ - cp -r roms/ ${FLATPAK_DEST}/share/mame/ - cp -r samples/ ${FLATPAK_DEST}/share/mame/ sources: - type: archive - url: https://github.com/mamedev/mame/archive/refs/tags/mame0253.tar.gz - sha256: 52065a1ae0db365a9aa35d62bafb226edc546ad993d6c75327e166596f25e4e4 - # - type: file - # path: mame.ini - # - type: patch - # path: floppy.patch - # - type: patch - # path: sound.patch - # - type: patch - # path: ym3802.patch + url: https://github.com/mamedev/mame/archive/refs/tags/mame0259.tar.gz + sha256: 46baf431079a3373ffe8d984b3ba5d62ad5b1d5e356d1f60cf60f6ad03d4cec6 + - type: file + path: rd-submodules/mame/mame.ini + - type: patch + path: rd-submodules/mame/floppy.patch + - type: patch + path: rd-submodules/mame/sound.patch + - type: patch + path: rd-submodules/mame/ym3802.patch - # MAME - End \ No newline at end of file + # MAME - End + + # External manifests end + + - name: retrodeck + buildsystem: simple + build-commands: + + # Initializing RO retrodeck config folder + - mkdir -p ${FLATPAK_DEST}/retrodeck + + # Prep the ES-DE and RetroArch config files - I will have to SED/XMLSTARLET them soon + - rm -rf /app/share/emulationstation/resources/systems/unix/es_find_rules.xml + - cp es-configs/es_find_rules.xml /app/share/emulationstation/resources/systems/unix/ + - rm -rf /app/share/emulationstation/resources/systems/unix/es_systems.xml + - cp es-configs/es_systems.xml /app/share/emulationstation/resources/systems/unix/ + # These must be put in home folder, managed by retrodeck.sh + - cp es-configs/es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml + - mv -f -t ${FLATPAK_DEST}/retrodeck es-configs/rd_prepacks + + # Logo, res, move graphics directory away from default location so splash can be changed after build + - mv -f -t ${FLATPAK_DEST}/retrodeck /app/share/emulationstation/resources/graphics + - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash.svg + - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash-orig.svg + - cp -rf res/extra_splashes/ ${FLATPAK_DEST}/retrodeck/graphics + - cp -f res/icon.svg /app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg + - mv -f -t ${FLATPAK_DEST}/retrodeck res/binding_icons + + # RetroDECK core script + - cp retrodeck.sh /app/bin/retrodeck.sh + - chmod +x /app/bin/retrodeck.sh + + # Tools + - mkdir -p /app/tools + - cp -r tools/** /app/tools + - find /app/tools -name '*.py|*.sh' -exec chmod +x {} \; + + # Function libraries + - mkdir -p /app/libexec + - cp -r functions/* "/app/libexec/" + + # Desktop entries + - cp net.retrodeck.retrodeck.desktop /app/share/applications/net.retrodeck.retrodeck.desktop + - cp net.retrodeck.retrodeck.Configurator.desktop /app/share/applications/net.retrodeck.retrodeck.Configurator.desktop + + # Initializing default emulator configs + - cp -r emu-configs ${FLATPAK_DEST}/retrodeck/emu-configs/ + + # PICO-8 wrapper + - cp ${FLATPAK_DEST}/retrodeck/emu-configs/pico-8/pico8-wrapper.sh /app/bin/pico8 + - chmod +x /app/bin/pico8 + + # Needed for ffmpeg (RPCS3) + - mkdir -p ${FLATPAK_DEST}/lib/ffmpeg + + # Placing appdata + - mkdir -p ${FLATPAK_DEST}/share/appdata + - cp net.retrodeck.retrodeck.appdata.xml ${FLATPAK_DEST}/share/appdata + + sources: + - type: git + url: https://github.com/XargonWan/RetroDECK.git + branch: THISBRANCH \ No newline at end of file diff --git a/old/removed-modules.yml b/old/removed-modules.yml new file mode 100644 index 00000000..968982ed --- /dev/null +++ b/old/removed-modules.yml @@ -0,0 +1,154 @@ + sdk-extensions: + #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else + finish-args: + #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something + + # pcsx2-qt needs QT6, maybe others, here until every qt emulator will support qt6 (not yuzu atm) + # from: https://github.com/flathub/org.profex_xrd.Profex + + # - name: qt6-core5compat + # buildsystem: cmake-ninja + # builddir: true + # sources: + # - type: archive + # url: https://download.qt.io/official_releases/qt/6.2/6.2.4/submodules/qt5compat-everywhere-src-6.2.4.tar.xz + # sha256: 5de2b9e25bf7de161fbb88ecdd468ed1788bc899392fc05ed80aa590ebb352fa + # x-checker-data: + # type: html + # url: https://download.qt.io/official_releases/qt/6.2/ + # version-pattern: '>([\d\.-]*)/<' + # url-template: https://download.qt.io/official_releases/qt/6.2/$version/submodules/qt5compat-everywhere-src-$version.tar.xz + # post-install: + # - mkdir -p /app/lib/mkspecs + # - cp -R /app/mkspecs/* /app/lib/mkspecs/ + # - ln -fsr ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/libQt*.so* -t ${FLATPAK_DEST}/lib/ + # - sed -i 's/\\([0-9]\\+\\.[0-9]\\+\\)\\.[0-9]\\+ ${_Qt6.*_FIND_VERSION_EXACT}/\\1/' + # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake + # - sed -e 's@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" NO_DEFAULT_PATH@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" + # \"/usr/lib/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/cmake/\" NO_DEFAULT_PATH@' -i + # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake + # - sed -e 's@\\($$QT_MODULE_BIN_BASE\\)@\\1 '${FLATPAK_DEST}'/bin @' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@\\($$QT_MODULE_INCLUDE_BASE \\)@\\1'${FLATPAK_DEST}'/include @' + # -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@$$QT_MODULE_INCLUDE_BASE/@'${FLATPAK_DEST}'/include/@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@$$QT_MODULE_LIB_BASE@'${FLATPAK_DEST}'/lib@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # cleanup: + # - /app/mkspecs + + # XEMU: libglu removed due to a certificate issue, check libglu module for more info + # - name: libglu + # buildsystem: meson + # cleanup: + # - /include + # - /lib/debug + # - /lib/pkgconfig + # - /lib/*.a + # sources: + # - type: archive + # url: http://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz + # sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 + # x-checker-data: + # type: anitya + # project-id: 13518 + # stable-only: true + # url-template: http://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz + + # Duckstation - START + # https://github.com/flathub/org.duckstation.DuckStation + # Disabled until we completely switch to QT6 + + # - name: duckstation + # buildsystem: cmake-ninja + # no-make-install: true + # builddir: true + # config-opts: + # - -DCMAKE_BUILD_TYPE=RelWithDebInfo + # - -DUSE_EGL=ON + # - -DUSE_SDL2=ON + # - -DUSE_WAYLAND=ON + # - -DUSE_X11=ON + # - -DUSE_DRMKMS=ON + # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + # post-install: + # - install -m755 bin/duckstation-qt /app/bin + # - cp -r ../data/* bin/translations /app/bin + # sources: + # - type: git + # url: https://github.com/stenzek/duckstation.git + # commit: 6f709468601183083b8581d4952aaba7baf77084 + # # Cloning dep/msvc/qt is only necessary for Windows + # disable-submodules: true + + # Duckstation - END + + # Duckstation-DontUpdate - START + # Old version moved to QT6 so it's either this or AppImage + # But AppImage is a single one that keep getting updated at the same link so the sha (that's mandatory) will break the build + # So yeah we're stuck with this for a while + + # - name: duckstation-DontUpdate + # buildsystem: cmake-ninja + # no-make-install: true + # builddir: true + # config-opts: + # - -DCMAKE_BUILD_TYPE=Release + # - -DUSE_EGL=ON + # - -DUSE_SDL2=ON + # - -DUSE_WAYLAND=ON + # - -DUSE_X11=ON + # - -DUSE_DRMKMS=ON + # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + # post-install: + # - install -m 755 -t /app/bin/ bin/duckstation-nogui bin/duckstation-qt + # - |- + # for px in 16 32 48 64 128 256; do + # install -Dm644 ../extras/icons/icon-${px}px.png /app/share/icons/hicolor/${px}x${px}/apps/org.duckstation.DuckStation.png + # done + # - cp -r ../data/* bin/translations /app/bin + # sources: + # - type: git + # url: https://github.com/stenzek/duckstation.git + # commit: 3fb61865e505ba639609fbf16cb8bdf5c66e020c + + # Duckstation-DontUpdate - END + + # Ryujinx Appimage - START + # https://ryujinx.org/download + + # - name: Ryujinx + # buildsystem: simple + # build-commands: + # - | + # tar -zxvf ryujinx-1.1.685-linux_x64.tar.gz + # mv -v publish ${FLATPAK_DEST}/ryujinx + # ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx ${FLATPAK_DEST}/bin/Ryujinx + # sources: + # - type: file + # url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.685/ryujinx-1.1.685-linux_x64.tar.gz + # sha256: bc4d7076106d7aa59c3a3ea22b83c553e5fa1a897815831adcf18cc13d729e15 + + # Ryujinx Appimage - END + + # Vita3K - START + # Very broken, disabled + # NOTE: this is a continuos release, it's provided but not supported + # to update this module: + # wget https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip -O rd-submodules/vita3k/vita3k-14-01-23.zip + # sha256sum rd-submodules/vita3k/vita3k*.zip + # change url and sha + # check the branch in the url + + # - name: Vita3K + # buildsystem: simple + # build-commands: + # - | + # mkdir -p ${FLATPAK_DEST}/vita3k + # cp -r * ${FLATPAK_DEST}/vita3k + # chmod +x ${FLATPAK_DEST}/vita3k/Vita3K + # ln -s ${FLATPAK_DEST}/vita3k/Vita3K /app/bin/Vita3K + # sources: + # - type: archive + # url: https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip + # sha256: VITASHAPLACEHOLDER + + # Vita3K - END \ No newline at end of file diff --git a/old/workflows/TEST_release_info.yml b/old/workflows/TEST_release_info.yml new file mode 100644 index 00000000..ebf21609 --- /dev/null +++ b/old/workflows/TEST_release_info.yml @@ -0,0 +1,62 @@ +name: TEST_release_info + +on: + push: + branches: + - main + paths: + - .github/workflows/TEST_release_info.yml + pull_request: + branches: + - main + + workflow_dispatch: + + +jobs: + + Building_RetroDECK: + runs-on: ubuntu-latest + steps: + + - name: Generate build ID + id: generating_buildid + run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" + + - uses: actions/checkout@v3 + + - name: Initialize enviornment + run: | + git pull + git submodule init + git submodule update + sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet appstream-util + + - name: Validating the appdata + run: appstream-util validate "net.retrodeck.retrodeck.appdata.xml" + continue-on-error: true + + - name: Getting version info + id: version + run: | + appdata="https://raw.githubusercontent.com/XargonWan/RetroDECK/main/net.retrodeck.retrodeck.appdata.xml" + REL_VER=$(curl -s $appdata | xmlstarlet sel -t -v "//release/@version" | head -1) + DES="$(curl -s $appdata | xmlstarlet sel -t -m "//release[1]" -v "description" -n | sed '1,2d;$d;s/^ */- /;/^- $/d')" + echo "REL_VER=$REL_VER" >> $GITHUB_ENV + echo -e "# Release Notes\n" >> "body.md" + echo "$DES" >> "body.md" + + - name: Publish the flatpak in a new release + uses: ncipollo/release-action@v1 + env: + REL_VER: ${{ env.REL_VER }} + with: + tag: ${{ env.REL_VER }} + name: "RetroDECK v${{ env.REL_VER }}" + bodyFile: "body.md" + #artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" + allowUpdates: true + draft: true + token: ${{ secrets.TRIGGER_BUILD_TOKEN }} + repo: RetroDECK + #continue-on-error: true \ No newline at end of file diff --git a/old/workflows/cooker.yml b/old/workflows/cooker.yml new file mode 100644 index 00000000..ff8330e3 --- /dev/null +++ b/old/workflows/cooker.yml @@ -0,0 +1,205 @@ +name: cooker + +on: + # push: + # branches: + # - cooker* + # pull_request: + # branches: + # - cooker* + + workflow_dispatch: + + +jobs: + + Job1_-_Building_P1: + runs-on: ubuntu-latest + steps: + + - name: Get date for artifacts + id: date + run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M%S')" + + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - name: Generate build ID + id: generating_buildid + run: echo "##[set-output name=build-id;]$(echo "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}")" + + - uses: actions/checkout@v3 + + - name: Download global cache + uses: dawidd6/action-download-artifact@v2 + with: + workflow: cooker.yml + name: global-cache + search_artifacts: true + skip_unpack: true + continue-on-error: true + + - name: Extract global cache + run: | + tar --skip-old-files -xzvf retrodeck-cooker.tar.gz + rm -f retrodeck-cooker.tar.gz + continue-on-error: true + + - name: DEBUG + run: | + echo "Listing folder $PWD contents" + ls -lna + echo "Checking for version file" + find ~ -iname version + cat $(find ~ -iname version) + + - name: Initialize enviornment + run: | + git pull + git submodule init + git submodule update + sudo add-apt-repository ppa:alexlarsson/flatpak + sudo apt-get update + sudo apt install flatpak flatpak-builder p7zip-full + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 + + - name: Buld part 1 - Until melonds + run: | + sudo flatpak-builder --build-only --stop-at=melonds --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml + + - name: Compress cache + run: | + touch retrodeck-cooker.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build + + - name: Upload build specific cache + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.generating_buildid.outputs.build-id }}" + path: retrodeck-cooker.tar.gz + + # this is done to speed up the things now, it may be removed later + - name: Compress global cache + run: | + touch retrodeck-cooker.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build + continue-on-error: true + + - name: Upload global cache + uses: actions/upload-artifact@v3 + with: + name: global-cache + path: retrodeck-cooker.tar.gz RetroDECK.flatpak + continue-on-error: true + + outputs: + buildID: "${{ steps.generating_buildid.outputs.build-id }}" + + Job2_-_Build_P2_and_publish: + runs-on: ubuntu-latest + needs: [Job1_-_Building_P1] + steps: + + - uses: actions/checkout@v3 + + - name: Download build specific cache + uses: actions/download-artifact@v2 + with: + name: ${{ needs.Job1_-_Building_P1.outputs.buildID }} + + - name: Extract cache + run: | + tar --skip-old-files -xzvf retrodeck-cooker.tar.gz + rm -f retrodeck-cooker.tar.gz + + - name: DEBUG + run: | + echo "Listing folder $PWD contents" + ls -lna + echo "Checking for version file" + find ~ -iname version + cat $(find ~ -iname version) + + - name: Initialize enviornment + run: | + git pull + git submodule init + git submodule update + sudo add-apt-repository ppa:alexlarsson/flatpak + sudo apt-get update + sudo apt install flatpak flatpak-builder p7zip-full + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 + + - name: Create Bundle + run: | + sudo flatpak-builder --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml + sudo flatpak build-bundle $GITHUB_WORKSPACE/local RetroDECK.flatpak net.retrodeck.retrodeck + + - name: Get date for artifacts + id: date + run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M')" + + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - name: Read version from version file + id: version + run: echo "##[set-output name=version;]$(cat $(find . -name version))" + + - name: DEBUG - Print version name + shell: bash + run: | + echo "DEBUG: printing version from version file" + echo "${{ steps.version.outputs.version }}" + + - name: Publish the flatpak in a new cooker release + uses: ncipollo/release-action@v1 + with: + #tag: "${{ steps.version.outputs.version }}" + tag: "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}" + body: | + # Release Notes (Cooker) + This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + + Cooker channel is provided for the community to test fixes and explore new functionality. + Please DO NOT open issues or ask support on this build. + + artifacts: "RetroDECK.flatpak" + allowUpdates: true + prerelease: true + draft: false + token: ${{ secrets.TRIGGER_BUILD_TOKEN }} + repo: RetroDECK-cooker + continue-on-error: true + + - name: Compress global cache + run: | + touch retrodeck-cooker.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build + continue-on-error: true + + - name: Upload global cache + uses: actions/upload-artifact@v3 + with: + name: global-cache + path: retrodeck-cooker.tar.gz RetroDECK.flatpak + continue-on-error: true + + - name: Upload RetroDECK.flatpak + uses: actions/upload-artifact@v3 + with: + name: retrodeck-flatpak + path: RetroDECK.flatpak + continue-on-error: true diff --git a/old/workflows/flathub_push_cooker.yml b/old/workflows/flathub_push_cooker.yml new file mode 100644 index 00000000..65a4d349 --- /dev/null +++ b/old/workflows/flathub_push_cooker.yml @@ -0,0 +1,88 @@ + +name: PUSH-cooker-flathub + +on: + workflow_dispatch: + +jobs: + + Pushing_cooker_into_flathub: + runs-on: ubuntu-latest + steps: + - name: Pushing + shell: bash + run: | + + # EDITABLES: + rd_branch=${GITHUB_REF_NAME} + echo $rd_branch + gits_folder="${GITHUB_WORKSPACE}/gits" # without last / + + mkdir -vp $gits_folder + cd $gits_folder + if [ -d flathub ]; then + rm -rf flathub + fi + git clone --recursive https://github.com/flathub/net.retrodeck.retrodeck.git flathub + cd $gits_folder + git clone --recursive https://github.com/XargonWan/RetroDECK RetroDECK + cd $gits_folder/RetroDECK + + # NON-EDITABLES + #relname="$rd_branch-"$(date +%d%m%y.%H%M) + relname="cooker-"$(git rev-parse --short HEAD) + + git checkout $rd_branch + git submodule init + git submodule update + # NOTE: the only linked submodules are: rd-submodules/retroarch + # these must be included in the exclusion list as they must be redownloaded + #sync -rav --progress --exclude={'res/screenshots/','shared-modules/','rd-submodules/retroarch','.git/','docs','retrodeck-flatpak/','retrodeck-flatpak-cooker/','.flatpak-builder/'} ~/RetroDECK/ ~/flathub/ + + cd $gits_folder/flathub + + git checkout -b $relname + + git rm -rf * + git clean -fxd # restroing git index + + # Copying only a few files as the others are cloned by git in retrodeck.sh + cd $gits_folder/RetroDECK + cp -rf \ + 'flathub.json' \ + 'LICENSE' \ + 'flathub.yml' \ + 'README.md' \ + $gits_folder/flathub/ + + cd $gits_folder/flathub + ls -lah + + # manipulating manifest + mv flathub.yml net.retrodeck.retrodeck.yml + + # Getting latest release name + # version=$(\ + # curl -sL \ + # -H "Accept: application/vnd.github+json" \ + # -H "Authorization: Bearer ${{ secrets.TRIGGER_BUILD_TOKEN }}" \ + # https://api.github.com/repos/XargonWan/RetroDECK-cooker/releases \ + # | jq .[0].tag_name \ + # | tr -d \" \ + # ) + + sha=$(curl -sL https://artifacts.retrodeck.net/artifacts/RetroDECK-Artifact.sha) + + sed -i "s#__SHA__#$sha#g" net.retrodeck.retrodeck.yml + + echo -e "Resulting manifest:\n" + cat net.retrodeck.retrodeck.yml + + git config --global user.name "${{ secrets.GITNAME }}" + git config --global user.email "${{ secrets.GITMAIL }}" + + git add * + git commit -m "Updated flathub/net.retrodeck.retrodeck from RetroDECK/$rd_branch" + + git remote -v + git push --force https://${{ secrets.TRIGGER_BUILD_TOKEN }}@github.com/flathub/net.retrodeck.retrodeck.git $relname diff --git a/old/workflows/main.yml b/old/workflows/main.yml new file mode 100644 index 00000000..0404e018 --- /dev/null +++ b/old/workflows/main.yml @@ -0,0 +1,188 @@ +name: main + +on: + # Triggers the workflow on push or pull request events but only for the main branch + # push: + # branches: + # - main + # pull_request: + # branches: + # - main + + workflow_dispatch: + + +jobs: + + Job1_-_Building_P1: + runs-on: ubuntu-latest + steps: + + - name: Get date for artifacts + id: date + run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M%S')" + + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - name: Generate build ID + id: generating_buildid + run: echo "##[set-output name=build-id;]$(echo "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}")" + + - uses: actions/checkout@v3 + + - name: Download global cache + uses: dawidd6/action-download-artifact@v2 + with: + workflow: main.yml + name: global-cache + search_artifacts: true + skip_unpack: true + continue-on-error: true + + - name: Extract global cache + run: | + tar --skip-old-files -xzvf retrodeck-main.tar.gz + rm -f retrodeck-main.tar.gz + continue-on-error: true + + - name: DEBUG + run: | + echo "Listing folder $PWD contents" + ls -lna + echo "Checking for version file" + find ~ -iname version + cat $(find ~ -iname version) + + - name: Initialize enviornment + run: | + git pull + git submodule init + git submodule update + sudo add-apt-repository ppa:alexlarsson/flatpak + sudo apt-get update + sudo apt install flatpak flatpak-builder p7zip-full + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 + + - name: Buld part 1 - Until melonds + run: | + sudo flatpak-builder --build-only --stop-at=melonds --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-main net.retrodeck.retrodeck.yml + + - name: Compress cache + run: | + touch retrodeck-main.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build + + - name: Upload build specific cache + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.generating_buildid.outputs.build-id }}" + path: retrodeck-main.tar.gz + + # this is done to speed up the things now, it may be removed later + - name: Compress global cache + run: | + touch retrodeck-main.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build + continue-on-error: true + + - name: Upload global cache + uses: actions/upload-artifact@v3 + with: + name: global-cache + path: retrodeck-main.tar.gz RetroDECK.flatpak + continue-on-error: true + + outputs: + buildID: "${{ steps.generating_buildid.outputs.build-id }}" + + Job2_-_Build_P2_and_publish: + runs-on: ubuntu-latest + needs: [Job1_-_Building_P1] + steps: + + - uses: actions/checkout@v3 + + - name: Download build specific cache + uses: actions/download-artifact@v2 + with: + name: ${{ needs.Job1_-_Building_P1.outputs.buildID }} + + - name: Extract cache + run: | + tar --skip-old-files -xzvf retrodeck-main.tar.gz + rm -f retrodeck-main.tar.gz + + - name: DEBUG + run: | + echo "Listing folder $PWD contents" + ls -lna + echo "Checking for version file" + find ~ -iname version + cat $(find ~ -iname version) + + - name: Initialize enviornment + run: | + git pull + git submodule init + git submodule update + sudo add-apt-repository ppa:alexlarsson/flatpak + sudo apt-get update + sudo apt install flatpak flatpak-builder p7zip-full + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 + + - name: Create Bundle + run: | + sudo flatpak-builder --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-main net.retrodeck.retrodeck.yml + sudo flatpak build-bundle $GITHUB_WORKSPACE/local RetroDECK.flatpak net.retrodeck.retrodeck + + - name: Read version from version file + id: version + run: echo "##[set-output name=version;]$(cat $(find . -name version))" + + - name: Publish the flatpak in a new main release + uses: ncipollo/release-action@v1 + with: + #tag: "${{ steps.version.outputs.version }}" + #tag: "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}" + tag: "0.4.0b" + body: | + # Release Notes (main) + + artifacts: "RetroDECK.flatpak" + allowUpdates: true + prerelease: true + draft: true + token: ${{ secrets.TRIGGER_BUILD_TOKEN }} + repo: RetroDECK-main + continue-on-error: true + + - name: Compress global cache + run: | + touch retrodeck-main.tar.gz + rm -rf .flatpak-builder/build/*-{2,3,4,5,6} + find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks + tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build + continue-on-error: true + + - name: Upload global cache + uses: actions/upload-artifact@v3 + with: + name: global-cache + path: retrodeck-main.tar.gz RetroDECK.flatpak + continue-on-error: true + + - name: Upload RetroDECK.flatpak + uses: actions/upload-artifact@v3 + with: + name: retrodeck-flatpak + path: RetroDECK.flatpak + continue-on-error: true \ No newline at end of file diff --git a/old/workflows/remove-artifacts.yml b/old/workflows/remove-artifacts.yml new file mode 100644 index 00000000..84c41e8e --- /dev/null +++ b/old/workflows/remove-artifacts.yml @@ -0,0 +1,22 @@ +name: Remove-artifacts + +on: + #schedule: + # Every day at 1am + # - cron: '0 1 * * *' + + workflow_dispatch: + +jobs: + remove-old-artifacts: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Remove old artifacts + uses: c-hive/gha-remove-artifacts@v1 + with: + age: '2 seconds' # ' ', e.g. 5 days, 2 years, 90 seconds, parsed by Moment.js + # Optional inputs + # skip-tags: true + # skip-recent: 5 diff --git a/post_update.sh b/post_update.sh deleted file mode 100644 index 4ea9580d..00000000 --- a/post_update.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/bash - -post_update() { - - # post update script - echo "Executing post-update script" - - local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version) - - if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b - save_migration - fi - - # Everything within the following ( ) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs. - - ( - if [[ $prev_version -le "062" ]]; then - # In version 0.6.2b, the following changes were made that required config file updates/reset: - # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default. - # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now! - # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/ - - rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack. - prepare_emulator "reset" "primehack" - - dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" - dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" - - mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) - dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder - fi - if [[ $prev_version -le "063" ]]; then - # In version 0.6.3b, the following changes were made that required config file updates/reset: - # - Put Dolphin and Primehack save states in different folders inside $rd_home/states - # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~) - # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates. - - dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" - dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" - - rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b - rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency. - - cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini - cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini - - # Remove unneeded tools folder, as location has changed to RO space - rm -rfv /var/config/retrodeck/tools/ - fi - if [[ $prev_version -le "064" ]]; then - # In version 0.6.4b, the following changes were made: - # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect. - # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled. - # The default configs have been updated for new installs and resets, a patch was created to address existing installs. - - deploy_multi_patch "emu-configs/patches/updates/064b_update.patch" - fi - if [[ $prev_version -le "065" ]]; then - # In version 0.6.5b, the following changes were made: - # Change Yuzu GPU accuracy to normal for better performance - - set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer" - fi - if [[ $prev_version -le "070" ]]; then - # In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem: - # - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported) - # - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists - # - Add new sections [paths] and [options] headers to retrodeck.cfg - # - Prepackaged DOOM! - # - Update RPCS3 vfs file contents. migrate from old location if needed - - mkdir -p "$mods_folder" - mkdir -p "$texture_packs_folder" - dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" - dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" - dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" - dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" - dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" - dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" - dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" - - dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" - - cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it - mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" - cp -f "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" - mkdir -p "$media_folder/doom" - unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" - - cp -f $emuconfigs/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml - sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf" - set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3" - if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once. - mkdir "$bios_folder/rpcs3" - mv "$roms_folder/ps3/emudir/*" "$bios_folder/rpcs3/" - rm "$roms_folder/ps3/emudir" - configurator_generic_dialog "As part of this update and due to a RPCS3 config upgrade, the files that used to exist at\n\n~/retrodeck/roms/ps3/emudir\n\nare now located at\n\n~/retrodeck/bios/rpcs3.\nYour existing files have been moved automatically." - fi - mkdir -p "$bios_folder/rpcs3/dev_hdd0" - mkdir -p "$bios_folder/rpcs3/dev_hdd1" - mkdir -p "$bios_folder/rpcs3/dev_flash" - mkdir -p "$bios_folder/rpcs3/dev_flash2" - mkdir -p "$bios_folder/rpcs3/dev_flash3" - mkdir -p "$bios_folder/rpcs3/dev_bdvd" - mkdir -p "$bios_folder/rpcs3/dev_usb000" - dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" - fi - - # The following commands are run every time. - - tools_init - update_splashscreens - update_rd_conf - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Finishing Upgrade" \ - --text="RetroDECK is finishing the upgrade process, please wait." - create_lock -} diff --git a/rd-submodules/es-de/GuiMenu.cpp.patch b/rd-submodules/es-de/GuiMenu.cpp.patch new file mode 100644 index 00000000..b0c035ea --- /dev/null +++ b/rd-submodules/es-de/GuiMenu.cpp.patch @@ -0,0 +1,38 @@ +diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.cpp emulationstation-de/es-app/src/guis/GuiMenu.cpp +--- emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-08-23 13:12:15.617292576 +0200 ++++ emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-08-23 13:44:10.736412006 +0200 +@@ -67,2 +67,4 @@ + ++ addEntry("RETRODECK CONFIGURATOR", mMenuColorPrimary, false, [this] { openRetroDeckConfigurator(); }); ++ + if (!Settings::getInstance()->getBool("ForceKiosk") && +@@ -70,3 +72,3 @@ + #if defined(__APPLE__) +- addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); }); ++ addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); }); + #else +@@ -75,3 +77,3 @@ + else +- addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); }); ++ addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); }); + #endif +@@ -1758,3 +1760,3 @@ + auto quitText = std::make_shared( +- "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary); ++ "QUIT RETRODECK", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary); + quitText->setSelectable(true); +@@ -1910 +1912,14 @@ + } ++ ++void GuiMenu::openRetroDeckConfigurator() ++{ ++ // Launch the configurator.sh script ++ std::string command; ++ std::string startDirectory; ++ bool runInBackground; ++ command = "bash /app/tools/configurator.sh"; ++ startDirectory = "/app/tools"; ++ runInBackground = false; ++ int result = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); ++ // You can add any checks for the script's outcome here. ++} diff --git a/rd-submodules/es-de/GuiMenu.h.patch b/rd-submodules/es-de/GuiMenu.h.patch new file mode 100644 index 00000000..13a6b687 --- /dev/null +++ b/rd-submodules/es-de/GuiMenu.h.patch @@ -0,0 +1,10 @@ +diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.h emulationstation-de/es-app/src/guis/GuiMenu.h +--- emulationstation-de/es-app/src/guis/GuiMenu.h 2023-08-23 13:12:15.617292576 +0200 ++++ emulationstation-de/es-app/src/guis/GuiMenu.h 2023-08-23 13:50:20.978700234 +0200 +@@ -46,2 +46,3 @@ + void openOtherOptions(); ++ void openRetroDeckConfigurator(); + void openQuitMenu(); +@@ -54 +55,2 @@ + #endif // ES_APP_GUIS_GUI_MENU_H ++ diff --git a/rd-submodules/es-de/ViewController.cpp.patch b/rd-submodules/es-de/ViewController.cpp.patch new file mode 100644 index 00000000..2f485a31 --- /dev/null +++ b/rd-submodules/es-de/ViewController.cpp.patch @@ -0,0 +1,118 @@ +diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstation-de/es-app/src/views/ViewController.cpp +--- emulationstation-de/es-app/src/views/ViewController.cpp 2023-08-23 13:12:15.625292630 +0200 ++++ emulationstation-de/es-app/src/views/ViewController.cpp 2023-08-23 14:29:23.547223951 +0200 +@@ -164,9 +164,7 @@ + { +- mNoGamesErrorMessage = "NO GAME FILES WERE FOUND. EITHER PLACE YOUR GAMES IN " +- "THE CURRENTLY CONFIGURED ROM DIRECTORY OR CHANGE " +- "ITS PATH USING THE BUTTON BELOW. OPTIONALLY THE ROM " +- "DIRECTORY STRUCTURE CAN BE GENERATED WHICH WILL " +- "CREATE A TEXT FILE FOR EACH SYSTEM PROVIDING SOME " +- "INFORMATION SUCH AS THE SUPPORTED FILE EXTENSIONS.\n" +- "THIS IS THE CURRENTLY CONFIGURED ROM DIRECTORY:\n"; ++ mNoGamesErrorMessage = "RETRODECK COULD NOT FIND ANY ROM FILES. " ++ "PLEASE PLACE YOUR ROM FILES INTO THE APPROPRIATE " ++ "SYSTEM SUBFOLDER IN THE CONFIGURED ROM DIRECTORY " ++ "AND RUN RETRODECK AGAIN TO SCAN YOUR LIBRARY.\n" ++ "THE CURRENTLY CONFIGURED ROM DIRECTORY IS:\n"; + +@@ -179,90 +177,3 @@ + mNoGamesMessageBox = new GuiMsgBox( +- HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "CHANGE ROM DIRECTORY", +- [this] { +- std::string currentROMDirectory; +-#if defined(_WIN64) +- currentROMDirectory = Utils::String::replace(FileData::getROMDirectory(), "/", "\\"); +-#else +- currentROMDirectory = FileData::getROMDirectory(); +-#endif +- if (Settings::getInstance()->getBool("VirtualKeyboard")) { +- mWindow->pushGui(new GuiTextEditKeyboardPopup( +- HelpStyle(), 0.0f, "ENTER ROM DIRECTORY PATH", currentROMDirectory, +- [this](const std::string& newROMDirectory) { +- Settings::getInstance()->setString("ROMDirectory", +- Utils::String::trim(newROMDirectory)); +- Settings::getInstance()->saveFile(); +-#if defined(_WIN64) +- mRomDirectory = +- Utils::String::replace(FileData::getROMDirectory(), "/", "\\"); +-#else +- mRomDirectory = FileData::getROMDirectory(); +-#endif +- mNoGamesMessageBox->changeText(mNoGamesErrorMessage + mRomDirectory); +- mWindow->pushGui(new GuiMsgBox(HelpStyle(), +- "ROM DIRECTORY SETTING SAVED, RESTART\n" +- "THE APPLICATION TO RESCAN THE SYSTEMS", +- "OK", nullptr, "", nullptr, "", nullptr, +- true, true)); +- }, +- false, "SAVE", "SAVE CHANGES?", "Currently configured path:", +- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH", +- "CLEAR (LEAVE BLANK TO RESET TO DEFAULT PATH)")); +- } +- else { +- mWindow->pushGui(new GuiTextEditPopup( +- HelpStyle(), "ENTER ROM DIRECTORY PATH", currentROMDirectory, +- [this](const std::string& newROMDirectory) { +- Settings::getInstance()->setString("ROMDirectory", +- Utils::String::trim(newROMDirectory)); +- Settings::getInstance()->saveFile(); +-#if defined(_WIN64) +- mRomDirectory = +- Utils::String::replace(FileData::getROMDirectory(), "/", "\\"); +-#else +- mRomDirectory = FileData::getROMDirectory(); +-#endif +- mNoGamesMessageBox->changeText(mNoGamesErrorMessage + mRomDirectory); +- mWindow->pushGui(new GuiMsgBox(HelpStyle(), +- "ROM DIRECTORY SETTING SAVED, RESTART\n" +- "THE APPLICATION TO RESCAN THE SYSTEMS", +- "OK", nullptr, "", nullptr, "", nullptr, +- true)); +- }, +- false, "SAVE", "SAVE CHANGES?", "Currently configured path:", +- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH", +- "CLEAR (LEAVE BLANK TO RESET TO DEFAULT PATH)")); +- } +- }, +- "CREATE DIRECTORIES", +- [this] { +- mWindow->pushGui(new GuiMsgBox( +- HelpStyle(), +- "THIS WILL CREATE DIRECTORIES FOR ALL THE\n" +- "GAME SYSTEMS DEFINED IN es_systems.xml\n\n" +- "THIS MAY CREATE A LOT OF FOLDERS SO IT'S\n" +- "ADVICED TO REMOVE THE ONES YOU DON'T NEED\n\n" +- "PROCEED?", +- "YES", +- [this] { +- if (!SystemData::createSystemDirectories()) { +- mWindow->pushGui(new GuiMsgBox(HelpStyle(), +- "THE SYSTEM DIRECTORIES WERE SUCCESSFULLY\n" +- "GENERATED, EXIT THE APPLICATION AND PLACE\n" +- "YOUR GAMES IN THE NEWLY CREATED FOLDERS", +- "OK", nullptr, "", nullptr, "", nullptr, +- true)); +- } +- else { +- mWindow->pushGui(new GuiMsgBox(HelpStyle(), +- "ERROR CREATING THE SYSTEM DIRECTORIES,\n" +- "PERMISSION PROBLEMS OR DISK FULL?\n\n" +- "SEE THE LOG FILE FOR MORE DETAILS", +- "OK", nullptr, "", nullptr, "", nullptr, +- true)); +- } +- }, +- "NO", nullptr, "", nullptr, true)); +- }, +- "QUIT", ++ HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "QUIT", + [] { +@@ -272,3 +183,3 @@ + }, +- true, false, ++ "", nullptr, "", nullptr, true, false, + (mRenderer->getIsVerticalOrientation() ? +@@ -1446 +1357,2 @@ + } ++ diff --git a/rd-submodules/es-de/Window.cpp.patch b/rd-submodules/es-de/Window.cpp.patch new file mode 100644 index 00000000..c099d83b --- /dev/null +++ b/rd-submodules/es-de/Window.cpp.patch @@ -0,0 +1,9 @@ +diff -au1r emulationstation-de/es-core/src/Window.cpp emulationstation-de/es-core/src/Window.cpp +--- emulationstation-de/es-core/src/Window.cpp 2023-08-29 14:14:17.208301836 +0200 ++++ emulationstation-de/es-core/src/Window.cpp 2023-08-29 14:12:37.307334069 +0200 + +@@ -181,3 +181,3 @@ + progressBarRect.barPosY += borderThickness; +- progressBarRect.color = 0x79010FFF; ++ progressBarRect.color = 0xC858E6FF; + mProgressBarRectangles.emplace_back(progressBarRect); diff --git a/rd-submodules/es-de/es-de-retrodeck-mods.patch b/rd-submodules/es-de/es-de-retrodeck-mods.patch deleted file mode 100644 index f5f49bbd..00000000 --- a/rd-submodules/es-de/es-de-retrodeck-mods.patch +++ /dev/null @@ -1,58 +0,0 @@ -diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.cpp emulationstation-de/es-app/src/guis/GuiMenu.cpp ---- emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 09:08:12.394935336 -0400 -+++ emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 16:25:04.618753274 -0400 -@@ -10,2 +10,3 @@ - #include "guis/GuiMenu.h" -+#include "utils/PlatformUtil.h" - -@@ -66,2 +67,4 @@ - -+ addEntry("RETRODECK CONFIGURATOR", 0x777777FF, false, [this] { openRetroDeckConfigurator(); }); -+ - if (!Settings::getInstance()->getBool("ForceKiosk") && -@@ -69,3 +72,3 @@ - #if defined(__APPLE__) -- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); }); -+ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); }); - #else -@@ -74,3 +77,3 @@ - else -- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); }); -+ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); }); - #endif -@@ -1704,2 +1707,15 @@ - -+void GuiMenu::openRetroDeckConfigurator() -+{ -+ // Launch the configurator.sh script -+ std::string command; -+ std::string startDirectory; -+ bool runInBackground; -+ command = "bash /app/tools/configurator.sh"; -+ startDirectory = "/app/tools"; -+ runInBackground = false; -+ int result = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); -+ // You can add any checks for the script's outcome here. -+} -+ - void GuiMenu::openQuitMenu() -@@ -1732,3 +1748,3 @@ - }); -- auto quitText = std::make_shared("QUIT EMULATIONSTATION", -+ auto quitText = std::make_shared("QUIT RETRODECK", - Font::get(FONT_SIZE_MEDIUM), 0x777777FF); -diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.h emulationstation-de/es-app/src/guis/GuiMenu.h ---- emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:08:12.394935336 -0400 -+++ emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:33:25.023871033 -0400 -@@ -46,2 +46,3 @@ - void openOtherOptions(); -+ void openRetroDeckConfigurator(); - void openQuitMenu(); -diff -au1r emulationstation-de/es-core/src/Window.cpp emulationstation-de/es-core/src/Window.cpp ---- emulationstation-de/es-core/src/Window.cpp 2023-04-12 09:08:12.398268670 -0400 -+++ emulationstation-de/es-core/src/Window.cpp 2023-04-14 11:03:48.261309278 -0400 -@@ -179,3 +179,3 @@ - progressBarRect.barPosY += borderThickness; -- progressBarRect.color = 0x79010FFF; -+ progressBarRect.color = 0xC858E6FF; - mProgressBarRectangles.emplace_back(progressBarRect); diff --git a/rd-submodules/mame/floppy.patch b/rd-submodules/mame/floppy.patch new file mode 100644 index 00000000..1754f616 --- /dev/null +++ b/rd-submodules/mame/floppy.patch @@ -0,0 +1,41 @@ +diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp +index 3c00336d..cda94d92 100644 +--- a/src/devices/imagedev/floppy.cpp ++++ b/src/devices/imagedev/floppy.cpp +@@ -1707,9 +1707,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + { + idx = m_spin_playback_sample; + sampleend = m_sample[idx].data.size(); +- out = m_sample[idx].data[m_spin_samplepos++]; +- +- if (m_spin_samplepos >= sampleend) ++ m_spin_samplepos++; ++ if (m_spin_samplepos < sampleend) ++ out = m_sample[idx].data[m_spin_samplepos]; ++ else + { + // Motor sample has completed + switch (m_spin_playback_sample) +@@ -1763,7 +1764,8 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + idx = m_step_base + m_seek_playback_sample; + sampleend = m_sample[idx].data.size(); + // Mix it into the stream value +- out += m_sample[idx].data[(int)m_seek_samplepos]; ++ if (m_seek_samplepos < sampleend) ++ out += m_sample[idx].data[(int)m_seek_samplepos]; + // By adding different values than 1, we can change the playback speed + // This will be used to adjust the seek sound + m_seek_samplepos += m_seek_pitch; +@@ -1781,8 +1783,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + sampleend = m_sample[idx].data.size(); + + // Mix it into the stream value +- out += m_sample[idx].data[m_step_samplepos++]; +- if (m_step_samplepos >= sampleend) ++ m_step_samplepos++; ++ if (m_step_samplepos < sampleend) ++ out += m_sample[idx].data[m_step_samplepos]; ++ else + { + // Step sample done + m_step_samplepos = 0; \ No newline at end of file diff --git a/rd-submodules/mame/mame.ini b/rd-submodules/mame/mame.ini new file mode 100644 index 00000000..0164486f --- /dev/null +++ b/rd-submodules/mame/mame.ini @@ -0,0 +1,33 @@ +# +# CORE SEARCH PATH OPTIONS +# +homepath $HOME/.mame +rompath /app/share/mame/roms +hashpath /app/share/mame/hash +samplepath /app/share/mame/samples +artpath /app/share/mame/artwork +ctrlrpath /app/share/mame/ctrlr +inipath $HOME/.mame;/app/share/mame/ini +fontpath /app/bin/ +cheatpath /app/share/mame/cheat +crosshairpath /app/share/mame/crosshair +pluginspath /app/share/mame/plugins +languagepath /app/share/mame/language +swpath /app/share/mame/software + +# +# CORE OUTPUT DIRECTORY OPTIONS +# +cfg_directory $HOME/.mame/cfg +nvram_directory $HOME/.mame/nvram +input_directory $HOME/.mame/inp +state_directory $HOME/.mame/sta +snapshot_directory $HOME/.mame/snap +diff_directory $HOME/.mame/diff +comment_directory $HOME/.mame/comments +share_directory $HOME/.mame/share + +# +# OSD VIDEO OPTIONS +# +video opengl \ No newline at end of file diff --git a/rd-submodules/mame/sound.patch b/rd-submodules/mame/sound.patch new file mode 100644 index 00000000..84b51ff6 --- /dev/null +++ b/rd-submodules/mame/sound.patch @@ -0,0 +1,28 @@ +diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp +index a0293063..c4989abb 100644 +--- a/src/emu/sound.cpp ++++ b/src/emu/sound.cpp +@@ -761,6 +761,9 @@ read_stream_view sound_stream::update_view(attotime start, attotime end, u32 out + } + g_profiler.stop(); + ++ if (!m_output_view[outputnum].valid()) ++ m_output_view[outputnum] = empty_view(start, end); ++ + // return the requested view + return read_stream_view(m_output_view[outputnum], start); + } +diff --git a/src/emu/sound.h b/src/emu/sound.h +index 15f6a574..bfa45c45 100644 +--- a/src/emu/sound.h ++++ b/src/emu/sound.h +@@ -284,6 +284,9 @@ public: + return *this; + } + ++ // check basic constraints ++ bool valid() const { return m_buffer != nullptr; } ++ + // return the local gain + sample_t gain() const { return m_gain; } + \ No newline at end of file diff --git a/rd-submodules/mame/ym3802.patch b/rd-submodules/mame/ym3802.patch new file mode 100644 index 00000000..a48925ab --- /dev/null +++ b/rd-submodules/mame/ym3802.patch @@ -0,0 +1,13 @@ +diff --git a/src/devices/machine/ym3802.cpp b/src/devices/machine/ym3802.cpp +index 4a8f6a7ffae..d1bf2b961f6 100644 +--- a/src/devices/machine/ym3802.cpp ++++ b/src/devices/machine/ym3802.cpp +@@ -45,7 +45,7 @@ void ym3802_device::device_start() + + void ym3802_device::device_reset() + { +- m_reg.clear(); ++ m_reg.assign(REG_MAX, 0); + reset_irq(0xff); + transmit_register_reset(); + receive_register_reset(); \ No newline at end of file diff --git a/rd-submodules/melonds/hotkeys.patch b/rd-submodules/melonds/hotkeys.patch new file mode 100644 index 00000000..8a90570c --- /dev/null +++ b/rd-submodules/melonds/hotkeys.patch @@ -0,0 +1,18 @@ +diff -au1r melonDS/src/frontend/qt_sdl/main.cpp melonDS/src/frontend/qt_sdl/main.cpp +--- melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:27:24.822375255 +0200 ++++ melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:47:19.587498189 +0200 +@@ -1467,3 +1467,3 @@ + actSaveState[0] = submenu->addAction("File..."); +- actSaveState[0]->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_F9)); ++ actSaveState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S)); + actSaveState[0]->setData(QVariant(0)); +@@ -1483,3 +1483,3 @@ + actLoadState[0] = submenu->addAction("File..."); +- actLoadState[0]->setShortcut(QKeySequence(Qt::Key_F9)); ++ actLoadState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_A)); + actLoadState[0]->setData(QVariant(0)); +@@ -1489,3 +1489,3 @@ + actUndoStateLoad = menu->addAction("Undo state load"); +- actUndoStateLoad->setShortcut(QKeySequence(Qt::Key_F12)); ++ actUndoStateLoad->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_8)); + connect(actUndoStateLoad, &QAction::triggered, this, &MainWindow::onUndoStateLoad); diff --git a/rd-submodules/ryujinx b/rd-submodules/ryujinx new file mode 160000 index 00000000..ff79306a --- /dev/null +++ b/rd-submodules/ryujinx @@ -0,0 +1 @@ +Subproject commit ff79306a50b484ce992d02a23e091d79fcde4cac diff --git a/rd-submodules/ryujinx/nuget_sources.json b/rd-submodules/ryujinx/nuget_sources.json deleted file mode 100644 index e943cede..00000000 --- a/rd-submodules/ryujinx/nuget_sources.json +++ /dev/null @@ -1,1528 +0,0 @@ -[ - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.cairosharp/3.24.24.59-ryujinx/ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg", - "sha512": "441db2af76714be2fa020488537f4ad9cd99c6910e9df70c4876a828e776ffa8cd910d06c9a0f5bdf26827be0a6b2c0217eac3c060f0a46be5557083ed263a75", - "dest": "nuget-sources", - "dest-filename": "ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "fd8e32d7d3e9a465202e391b0ab8b95e212900879bc4d8ac22954fd2d0f98fa579e9d25f88885ac2a4bf1eba755db940f8d131250a3ffec34dbe77431a379cab", - "dest": "nuget-sources", - "dest-filename": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.osx-x64/7.0.2/microsoft.netcore.app.host.osx-x64.7.0.2.nupkg", - "sha512": "fdace91cf3c44efc3ccccfc06813ff773f97ada860dcea309dac1a47cf2cd44722b43e87d94fc9fae9ccd946b641662bedf1d47f89d4015d719e99563c085e61", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.host.osx-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding.extensions/4.0.11/system.text.encoding.extensions.4.0.11.nupkg", - "sha512": "b2ba1f2a96bf14466fb31e4ac1fad25e7032688357340ad8976b8aafe7cbe39c061835a4e17d7cf6ae291d3155f07d3371f6b65ffc1c15474c3c86dbb7735e82", - "dest": "nuget-sources", - "dest-filename": "system.text.encoding.extensions.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.io/4.3.0/runtime.any.system.io.4.3.0.nupkg", - "sha512": "7e0d4a238322d434a19afc79ea988d3727c1687fdd5bcd1c4c39cb6201073caabb924cc201c70545d60acf8b94cde8b783d0c268743e040c357d100677e4c5ed", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.io.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg", - "sha512": "650799c3e654efbb9ad67157c9c60ce46f288a81597be37ce2a0bf5d4835044065ef3f65b997328cbbbbfb81f4c89b8d7e7d61380880019deee6eb3f963f70d9", - "dest": "nuget-sources", - "dest-filename": "system.runtime.interopservices.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.1.0/system.runtime.interopservices.4.1.0.nupkg", - "sha512": "e8511e6a4cd40f3c603df4ffbbf6a4aac4d10be79bcfd0249a9af90d55cf2a02543ad9b82e607a4665d58f28c7ce9bdb0f7f3ff9bc8ded8a252213916a771bd2", - "dest": "nuget-sources", - "dest-filename": "system.runtime.interopservices.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.xml.xdocument/4.0.11/system.xml.xdocument.4.0.11.nupkg", - "sha512": "f8ae902901963f2636f39c0652d82daa9df3fb3e3d5a60493c39f6cf01ed07c7d57f175a2d2895f4a872d4e92527e5131522218d1a67da2fd491e162273a8527", - "dest": "nuget-sources", - "dest-filename": "system.xml.xdocument.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.5/system.memory.4.5.5.nupkg", - "sha512": "e8c8e536c97b94ac3443c940b30dad43cf6e97dc7a8c3d989371048fe74e168606384f5e0143bdc0d86f7783bf9fdee8417964cb3a8a5d752713e90b125172dc", - "dest": "nuget-sources", - "dest-filename": "system.memory.4.5.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.primitives/4.3.0/runtime.win.system.net.primitives.4.3.0.nupkg", - "sha512": "fbe0502089649df4a7e6e268f0b4270c5668f49d604ce04cbad1ab1932b4c0415c888469bad664669a1320769d8e14445bfce96111fc3d6079115f6fba1416e2", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.net.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.glibsharp/3.24.24.59-ryujinx/ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg", - "sha512": "0b25ed67932e8665ceff32b19f767200b2909b3b9daeaa83091ea9d98b084498fe7c610f629568722ba630dbe33f6102df9aee33ed2e86665703d62e20c43ae4", - "dest": "nuget-sources", - "dest-filename": "ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.linux-x64/7.0.2/microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg", - "sha512": "b50f95c6609ea02b4894b9aaf4a339aa5bddbf4aaf2b14cce78d9a51ef2cb523d8ff0765d41f3476f47018b461cbbe1af152e79b181c41efd6c06c2bf894748d", - "dest": "nuget-sources", - "dest-filename": "microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.runtime.extensions/4.3.0/runtime.win.system.runtime.extensions.4.3.0.nupkg", - "sha512": "f8ddce885541079b78ad27c1d4d53df5b78c976d6395a52cca6777606f0b8327dae6caa617e269034fb8100ab8964f60117708a25def4191e5c6c7c18e043b25", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.runtime.extensions.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.0.1/system.runtime.handles.4.0.1.nupkg", - "sha512": "966a943195b66118277a340075609676e951216d404478ac55196760f0b7b2bd9314bfbb38051204a1517c53097bd656e588e8ab1ec336ce264957956695848a", - "dest": "nuget-sources", - "dest-filename": "system.runtime.handles.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg", - "sha512": "0a5baf1dd554bf9e01bcb4ce082cb26ee82b783364feb47cba730faeecd70edc528efad0394dcce11f37d7f9507f8608f15629ebaf051906bfd3513e46af0f11", - "dest": "nuget-sources", - "dest-filename": "system.runtime.handles.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "61da1667a5dd1e53a5d19fbe90abbfe332d84fe755fb811a080668a47d41a97db44539e3174fd1d2a0770ff1bd83afa68c82ce06df5775da65a6054ccc12c4be", - "dest": "nuget-sources", - "dest-filename": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.resources.resourcemanager/4.3.0/runtime.any.system.resources.resourcemanager.4.3.0.nupkg", - "sha512": "39fab03cbade2b3848d62e137313530c06b37216e24cd58c70ed6ae54bdaf9d9613a3b410375ee167c87ff935a558b1f8766ee016b8b244fde99c38fcf42a49b", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.resources.resourcemanager.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.identitymodel.tokens.jwt/6.25.1/system.identitymodel.tokens.jwt.6.25.1.nupkg", - "sha512": "286685f006f25c79c1df6153eb802fc0ce49f44c12f4854c870709a1c3f1f6e7ce9e433d54cd92ae19e053c52d154858d2365b73ccd855b2627f593a33c579a5", - "dest": "nuget-sources", - "dest-filename": "system.identitymodel.tokens.jwt.6.25.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.microsoft.win32.primitives/4.3.0/runtime.unix.microsoft.win32.primitives.4.3.0.nupkg", - "sha512": "93e6d3db61f9c2ca2048f25990dda92acd5ec74561e0c776d2c6dd8d1d55128f2c953f33d6832fb6a72bd9edca304a2551085bdeafe6e18af87619c9ba943c32", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.microsoft.win32.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gtksharp/3.24.24.59-ryujinx/ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg", - "sha512": "35f68992f86629a3face6b13ce0e17933f6576de0279f9eeb023e44fe07dc2765ac58e2636a8a6f9fbfd66f4fc428867cc2bd5a07bd4f2ed8cd8978c4c1ef195", - "dest": "nuget-sources", - "dest-filename": "ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.io.filesystem/4.3.0/runtime.win.system.io.filesystem.4.3.0.nupkg", - "sha512": "17b4a6725a2e10e9d413a803130cdbbd6abd2bf94596e68c02b15e2500fe2d4bbbc34c50f1bb9576fd91d16ae11b219eab9f470df711a03e0972d3e9162893f9", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.io.filesystem.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "5dbe6bc007a9b46491e5299602291f5dbf8cc8d51e6c1b08db2fa0efd365990b41b6e181ed6bf82e873a659396427bc0e33e85b47d645d273fef8bf8ec643631", - "dest": "nuget-sources", - "dest-filename": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.diagnostics.debug/4.3.0/runtime.unix.system.diagnostics.debug.4.3.0.nupkg", - "sha512": "a8ce331953b1f4424aa7f4b6dfedfce9ad138940bc92f332de2bc6d05185830ec6eb832e752f62eaf425f749caadd4ea1789121cb7ed79740fa5868eba55c838", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.diagnostics.debug.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.atksharp/3.24.24.59-ryujinx/ryujinx.atksharp.3.24.24.59-ryujinx.nupkg", - "sha512": "6237bbfcd7f80517c9eb40d8b2ceea7586f34cc7e0aaf8e550ba6c1364d0b4bc3560a497bc7ecfb71d6e4cb08a0aabf97568cd38be6153ad74a8504cb59e9c3b", - "dest": "nuget-sources", - "dest-filename": "ryujinx.atksharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg", - "sha512": "5165916e258dd38fa83278fb98dce271a95e0091c1274b8cf5f17d88b9e6284f7a7bf145194afe4f20250cc31ad714141f9e0687cf235ff05460fb47cea0c525", - "dest": "nuget-sources", - "dest-filename": "system.resources.resourcemanager.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg", - "sha512": "9067db28f1c48d08fc52ad40a608f88c14ad9112646741ddaf426fdfe68bed61ab01954b179461e61d187371600c1e6e5c36c788993f5a105a64f5702a6b81d4", - "dest": "nuget-sources", - "dest-filename": "system.resources.resourcemanager.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.common/4.4.0/microsoft.codeanalysis.common.4.4.0.nupkg", - "sha512": "564fe62e3a4b98770b5bdcc1ca119189ba96e3c52df9c5f5d150de8b3d1bf6e058ac7a3c5cd85f6fc9db3ec91e0666d93566c763a5b2913b3c58589f557a6d29", - "dest": "nuget-sources", - "dest-filename": "microsoft.codeanalysis.common.4.4.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.tokens/6.25.1/microsoft.identitymodel.tokens.6.25.1.nupkg", - "sha512": "64a53939613d80e992f8ad43230cd50680b27fbb23591360b42699a139032315630478136b98cdbc578b56fb3fa82b6650b5278c49bdaf8bf4134f99ca842fe4", - "dest": "nuget-sources", - "dest-filename": "microsoft.identitymodel.tokens.6.25.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.handles/4.3.0/runtime.any.system.runtime.handles.4.3.0.nupkg", - "sha512": "95cdae2867a2182535bd0f4d01dc3eff70319dff044b070ab7791fa2bf8688a69b00a279ed569b7f0c5f3e26bf705303dc344ecf7d1ea014c579436d8e7b7389", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.runtime.handles.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding/4.3.0/runtime.any.system.text.encoding.4.3.0.nupkg", - "sha512": "cbe6df98acd50e2251d3343620c408af56cfe7c1979277a8ec65b5eef093e93ed93c05980902a7152ed83302d5a625d7058921baa7f446c5e67194fa4c06f20a", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.text.encoding.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/7.0.2/microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg", - "sha512": "f7eff3e04057ef75b7fab704a1c5a4c5e81af2a931476404a591e1e0e6527cc22d530a4615a8b2be6682b4bf65de30e4fd94dfc8d140cb265a5921488fe89ca1", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.io.filesystem/4.3.0/runtime.unix.system.io.filesystem.4.3.0.nupkg", - "sha512": "6d4c80aceffac60e1560fda34c5984bbfa2e1bd106bde2c6d3540905cc30c58e6f5f2eaf5703cef5e68e3d25a4b97982193b2db8130a50c622a498e43eb9bdca", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.io.filesystem.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.imagesharp/1.0.4/sixlabors.imagesharp.1.0.4.nupkg", - "sha512": "66d710910a44505cdee5bbcfa7c2d2d6025891f7c1facdea8fd52e46fbc76122ab4f7bd1e1656ab782dd84292d59bddec93a1ecf8b94117dad75b5f69b52e23e", - "dest": "nuget-sources", - "dest-filename": "sixlabors.imagesharp.1.0.4.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.redist.glfw/3.3.8.30/opentk.redist.glfw.3.3.8.30.nupkg", - "sha512": "2c0f00846b5ecc4e9ce429b3988f624f896924df8390faaf9c45429b1fb4e752f74c3f086b889cd9250e9a2a545db2f925c186030018cb2c3e3005dffc44aef3", - "dest": "nuget-sources", - "dest-filename": "opentk.redist.glfw.3.3.8.30.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.csharp/4.4.0/microsoft.codeanalysis.csharp.4.4.0.nupkg", - "sha512": "fe0f852202c1934df0a5fe5aae60f303685035a93b9ea955c326dc0e53d8d1fd2469dfa813cc0a235b9668fb642a56a18b63eda6ad5fccb58a694abb5fb8953b", - "dest": "nuget-sources", - "dest-filename": "microsoft.codeanalysis.csharp.4.4.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.windowing.graphicslibraryframework/4.7.5/opentk.windowing.graphicslibraryframework.4.7.5.nupkg", - "sha512": "74f7edbea70485aa43a5e5f08d6221674548d9a7cf1c9879576f7a21ef1e46812559f0306a7d6ca260f2446a62a75bbdeb7f5ad8ed749ccccdf21060f50a24d1", - "dest": "nuget-sources", - "dest-filename": "opentk.windowing.graphicslibraryframework.4.7.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.0.1/system.reflection.emit.4.0.1.nupkg", - "sha512": "ff7766886b945148ea65a49e4ddc648336340def2c2e94b8277b584444ec9126d96918f0bcbeb62016a530623a89ccd9eae749d62065b01058387b5d09fc7dd1", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg", - "sha512": "be45051467a36ab965410f112a475fb81510a5595347d1cc0c46b028e0436a339218dd3c073f048c2d338b67dc13b45742290b6c46f55982503f74a8f2698818", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/crc32.net/1.2.0/crc32.net.1.2.0.nupkg", - "sha512": "7d8d2291449dfc3fab36f3f3dee48dcc769198e9ca5e6c68b0657ef1bccb4cab12a200374e0dffbf4285d082e8016ad22db3e96431a5bd59fe5b2a1d5bea9123", - "dest": "nuget-sources", - "dest-filename": "crc32.net.1.2.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization.calendars/4.3.0/runtime.any.system.globalization.calendars.4.3.0.nupkg", - "sha512": "19053b502b7160af6f6b0bc5b334a8d124f77f6b4418993294fb485d0bb318cd6e97cdbda9bf8c9927366288413cad7209c9d8156a5425a6320c453a8804fb3d", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.globalization.calendars.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.5.0/microsoft.csharp.4.5.0.nupkg", - "sha512": "c9659e4db182cc13a544f583088c624d95b579c66231b6a8d194fdeca28459d061acbbd4a94f11773921cee091433be8c73c6547bbf2b4ee3738e805764c6fea", - "dest": "nuget-sources", - "dest-filename": "microsoft.csharp.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.7.0/microsoft.csharp.4.7.0.nupkg", - "sha512": "2c96988515f95714d4b83f5650f183dc6a564e0b3cf5255fa0e3ef48476debab4bde542f9f2f6c47f6620b7a71d6a515e4415e6d2e388b60817a29621d5690df", - "dest": "nuget-sources", - "dest-filename": "microsoft.csharp.4.7.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.net.http/4.0.1/runtime.native.system.net.http.4.0.1.nupkg", - "sha512": "ad933eb14740a111a81b5de6837dd0fc9390dde308fedf4338a498f97cd40ecfc65c745802e92c8ec8543d75dd262ebfef476df2e646b63cd99c609258d1bbd9", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.net.http.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.0.1/system.io.filesystem.primitives.4.0.1.nupkg", - "sha512": "dce1c4074938391ea4ea01226812982a893bfc910e66ac99ecfe31c9b6fe635f3fbff11dcab222ed5036eb21c4f49cd3f121c310adbf87d22cf3d512bf6a9d73", - "dest": "nuget-sources", - "dest-filename": "system.io.filesystem.primitives.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg", - "sha512": "5885953d09582cffd973d23a21a929064d72f2bc9518af3732d671fffcc628a8b686f1d058a001ee6a114023b3e48b3fc0d0e4b22629a1c7f715e03795ee9ee5", - "dest": "nuget-sources", - "dest-filename": "system.io.filesystem.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.codedom/7.0.0/system.codedom.7.0.0.nupkg", - "sha512": "eb3d7dece2b09817d0e3606f8a2c0e0e94a0fc928f18ae5dd7d5c768606f01fe75c9d70d047c8f44f0ade90a133c77c00f9bce6cb88f09902a9d503ab2cbccc3", - "dest": "nuget-sources", - "dest-filename": "system.codedom.7.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.codedom/4.4.0/system.codedom.4.4.0.nupkg", - "sha512": "13f96f49f3053ed35f94081d33a02e3d4f096d976a752a06a54eba1bb4ab76e0aa76b1723df95aaaa57880dd9dd21ac2069bbdd876a8aa950fe5dfa0f48b5cc7", - "dest": "nuget-sources", - "dest-filename": "system.codedom.4.4.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.primitives/4.3.0/runtime.any.system.reflection.primitives.4.3.0.nupkg", - "sha512": "a2f374276290ad9b799d3e49cd8fe7839c07b52f22894bcd77b9470841564319fb2ebbd7503e76feef42db4e8a362af8648cf0842a1cb0b5d9a60a58ef8b205e", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.reflection.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.linux-x64/7.0.2/microsoft.netcore.app.host.linux-x64.7.0.2.nupkg", - "sha512": "ccb3b16768fd6609212d5f71cce73f9b8e88a8da6d5918b8af814b6f811d2cde68f5b1c8abecd6b5cb47d24f82569927c1e362829204c3c269dfe15816605b0f", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.host.linux-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/7.0.2/microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg", - "sha512": "4365c6b2e07d9c5d2dc5fb388213490ba7e00538019b7b56cc08a02f7b0b5f82f7cd24d3094be449c410f0b7b39004844bec8842b066827b47a8380228202c4a", - "dest": "nuget-sources", - "dest-filename": "microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.logging/6.25.1/microsoft.identitymodel.logging.6.25.1.nupkg", - "sha512": "48218fef14ea564f1c3577a1cd5a2005d31d504569df97bc427fee245b4a6ad0e8370c560a0c9da8ea6d0283ba0f75f45bcf4f2c157eb2870c4fc94f654dce62", - "dest": "nuget-sources", - "dest-filename": "microsoft.identitymodel.logging.6.25.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "b2cf809fe50c4b46bd6f2372265cd3059622550123afceb5dbb2410906c07a7f47bae4273584d29253d5e7a63a17c68c7ba0434608bbc8fd4d00e479b2f128ff", - "dest": "nuget-sources", - "dest-filename": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.0.1/system.reflection.emit.lightweight.4.0.1.nupkg", - "sha512": "542863fa085a31705b0b294b64744c11617a098beae4d5664beb53189148d19246c9a112de30f2d597e0888069a414f2aed8e94a2b369294a81b24b991bc2149", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.lightweight.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg", - "sha512": "ad58af07296bd084907a089f92026fa3898b764eb9d6a07c9414b550a83ac60456f32a34127c29bb93a9633fb07ba9fd828f7b41a31dce5ff019a7cf1ab29435", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.lightweight.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/6.0.0/microsoft.extensions.dependencymodel.6.0.0.nupkg", - "sha512": "4222e75931c6e471e40966d3cb47ed73987b1bf9082d6753ef41a0ec6c6011df654847b540bc67accfe24b258fa2ea188be5c4e4458849afe7bff1d376e78789", - "dest": "nuget-sources", - "dest-filename": "microsoft.extensions.dependencymodel.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.0/netstandard.library.2.0.0.nupkg", - "sha512": "e3d64072b9cd9f9e86209c06a22688ecda7070427c9a35327d2a9560824c0e1381ccf7bc1d21d2ef8b301761f4bfc7f38fba712df7188d2f4fe4f748aac4d0c7", - "dest": "nuget-sources", - "dest-filename": "netstandard.library.2.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/1.6.0/netstandard.library.1.6.0.nupkg", - "sha512": "9838af4e2a3621de24d117c7fa58e5e8f170e50ea4e0ae3fe3d3401dfadbefd6eb5ecc3b64532c8340f6340727822eed305ef3bc21629f2bb6d76c639d054925", - "dest": "nuget-sources", - "dest-filename": "netstandard.library.1.6.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.3/netstandard.library.2.0.3.nupkg", - "sha512": "e78f0cea69c14895b1b089644077dbce8631a626055d96522f4d29e061d8bfc3e48aa1419e74faf265b998612c03f721f5f0cef4690f824150a5689764dee601", - "dest": "nuget-sources", - "dest-filename": "netstandard.library.2.0.3.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.3.0/system.numerics.vectors.4.3.0.nupkg", - "sha512": "1defa2bb3a3791c3a150cb972b39f5f227dd582e31b42110259fd9cd58a51e0325c309c44fd0152d38c29b90397ce9a1d9b3362b24437a0e0fda53d3a354831c", - "dest": "nuget-sources", - "dest-filename": "system.numerics.vectors.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg", - "sha512": "9c04ec0530f608aaf801837a791b33857e2ca6d2265a6049c01fd4e972825967e709cad3070f174829b7400f608e9a641d3afc3a45d4636d4c47dd43dd0657b3", - "dest": "nuget-sources", - "dest-filename": "system.numerics.vectors.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.4.0/system.numerics.vectors.4.4.0.nupkg", - "sha512": "81d46b509b3546b8d6dc9079a7cda162303aef1a1e14bbe1d127522168d388df2a13195b16dfd1b57c1560d73906e909fdff4e2b34104ba81a9336c97874ea1e", - "dest": "nuget-sources", - "dest-filename": "system.numerics.vectors.4.4.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/silk.net.core/2.16.0/silk.net.core.2.16.0.nupkg", - "sha512": "9cea9e04ab772b40da0f48e5f7fede810ee7380bdec00fe98fa59bd2234664adec38ef63e7e0d6fa4cf83e0ecd6054901a814a28b9c804fbac33ff045cb9f3df", - "dest": "nuget-sources", - "dest-filename": "silk.net.core.2.16.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.regularexpressions/4.1.0/system.text.regularexpressions.4.1.0.nupkg", - "sha512": "9b612027e43c33cc256e016e0b400547c5923e93ab6ed1a40d2b97292cb18a1195fa79aba2b0166a6b11842a0fef6685d31b848375daffdf6d2acf297af40bbe", - "dest": "nuget-sources", - "dest-filename": "system.text.regularexpressions.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.mathematics/4.7.5/opentk.mathematics.4.7.5.nupkg", - "sha512": "6b66bd3a3b81e38f60c67f925718aeb103ce556d8424f654bdc1e77df8fca018b570c911c7c9d95b298d0f38e39a08038d1c7572ea28cb171945199e72468d5d", - "dest": "nuget-sources", - "dest-filename": "opentk.mathematics.4.7.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal/4.3.0/system.security.principal.4.3.0.nupkg", - "sha512": "db8a1ed0d189637d9ef83147550ce5da890cf6ec189a7d006ba9de86ab55679e7f025e18bdaed2dc137ddf82a7e6a0131fb4d54d4264831862b1d7c5ee62837e", - "dest": "nuget-sources", - "dest-filename": "system.security.principal.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.numerics/4.0.1/system.runtime.numerics.4.0.1.nupkg", - "sha512": "333a3ba974e80ee66d33a9d8412e0bd585350bd30ecc65ed35e9d7c69284dbb90bc8b8d019c40476f3277049e0c7ae9b05a7d1e27614f057f39a141132304cd4", - "dest": "nuget-sources", - "dest-filename": "system.runtime.numerics.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.sockets/4.3.0/runtime.win.system.net.sockets.4.3.0.nupkg", - "sha512": "d70b564d53be12665bd4ddb4ce64e60fef42d17c68368a6c7877e059f41f3218bbb72867162b740bf3bd363304397eacbda8c48ea4f83d2d3ec958c11d23493d", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.net.sockets.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.console/4.0.0/system.console.4.0.0.nupkg", - "sha512": "44937dfe632127d3a7c89ca77502eeb6f66201ef135384e04b570a90a3eee3d72497869344c759c35295d6a4b46afd561ba19562dfff9896ecf2d4b07e96fb9b", - "dest": "nuget-sources", - "dest-filename": "system.console.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win7-x64.runtime.native.system.io.compression/4.3.0/runtime.win7-x64.runtime.native.system.io.compression.4.3.0.nupkg", - "sha512": "892d1791458f9a3901a72630af8a2aa3ffad827da90abca8cca9c972d202f809e6249eb8e06a4b79bf61a09fb60589e923c52a8a5300274de04557aa2992b2ac", - "dest": "nuget-sources", - "dest-filename": "runtime.win7-x64.runtime.native.system.io.compression.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win7.system.private.uri/4.3.0/runtime.win7.system.private.uri.4.3.0.nupkg", - "sha512": "4fd1c04141e6ee4f5fe0a906e7362651afd5cb995cd9fcd1049927a732b071f827bb962df1ea4f3630f3c4e928a0c1911fd82c838e654208c771dee6398abb3d", - "dest": "nuget-sources", - "dest-filename": "runtime.win7.system.private.uri.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.dotnet.platformabstractions/3.1.6/microsoft.dotnet.platformabstractions.3.1.6.nupkg", - "sha512": "55b87f544874686bed96889953b7e99e43426b79b0fac31cc452e0f4a27ca5cc08522c0ac967bf9df649f7c04137a5e2553d134ad79d5c1e69578367c2b4b4c6", - "dest": "nuget-sources", - "dest-filename": "microsoft.dotnet.platformabstractions.3.1.6.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg", - "sha512": "680a32b19c2bd5026f8687aa5382aea4f432b4f032f8bde299facb618c56d57369adef7f7cc8e60ad82ae3c12e5dd50772491363bf8044c778778628a6605bbc", - "dest": "nuget-sources", - "dest-filename": "system.runtime.extensions.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.1.0/system.runtime.extensions.4.1.0.nupkg", - "sha512": "42d009be57d6497aa0724924891289f3decd916d0432c1c865cc0494092f5e59287f632a70c5060b3c78e361ab04510d75dfb3c2d2853f54201f735eb6e2dea6", - "dest": "nuget-sources", - "dest-filename": "system.runtime.extensions.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.extensions/4.3.0/runtime.any.system.reflection.extensions.4.3.0.nupkg", - "sha512": "8de7a4c53fc0324e766bfec360342ee4a4b99a5975a9d61faab0a715ef71ff97aa83383a5a8affb354c02a4e2fbbb91e1b4ae6b282d2880108cb489f06aba500", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.reflection.extensions.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.threadpool/4.3.0/system.threading.threadpool.4.3.0.nupkg", - "sha512": "450a40f94a48e9396979e764e494ad624d8333f3378b91ea69b23fc836df8f5c43bbd6c8cfd91da2ab95a476e1ff042338968e09b720447f2241c014bfc75159", - "dest": "nuget-sources", - "dest-filename": "system.threading.threadpool.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading/4.3.0/system.threading.4.3.0.nupkg", - "sha512": "97a2751bdce69faaf9c54f834a9fd5c60c7a786faa52f420769828dbc9b5804c1f3721ba1ea945ea1d844835d909810f9e782c9a44d0faaecccb230c4cd95a88", - "dest": "nuget-sources", - "dest-filename": "system.threading.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg", - "sha512": "05c0dd1bbcfcedb6fc6c5f311c41920a4775f8a28a61ca246b6c65ad8afd9b04881d3357880af000ac056fd121fc5c3ec0b56d6fd607e0c27e7a639157c85e3e", - "dest": "nuget-sources", - "dest-filename": "system.threading.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/libhac/0.17.0/libhac.0.17.0.nupkg", - "sha512": "870d5f2cbd27c87bb1ed92294847b2433bcc47a078df7643b853442fe06707ae9d636626045bb82fec247533d56b52f2ade9934f9cd7a911fb40fe1cee4bf24a", - "dest": "nuget-sources", - "dest-filename": "libhac.0.17.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/concentus/1.1.7/concentus.1.1.7.nupkg", - "sha512": "ac1cbf5172bbceaf9961ee591fbf39f774720b1c5e841d9829068bf13af6a3519ce957b62c2695954a0cb6ce8bce5d4773941b17810b6c7c3e57a0821e7c0922", - "dest": "nuget-sources", - "dest-filename": "concentus.1.1.7.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/shaderc.net/0.1.0/shaderc.net.0.1.0.nupkg", - "sha512": "04ae2e3da77b5ae29e795291372ca63dcb90534043cbc432f25b72383832a0f010f0e346e7d022a1fb42068c7ec300e37c3592389607c36219847bbb060e2fc5", - "dest": "nuget-sources", - "dest-filename": "shaderc.net.0.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography/4.0.0/runtime.native.system.security.cryptography.4.0.0.nupkg", - "sha512": "83b8befe1f76e75346ea2e49cf27aa86489813034dd6e2845ac700ddb155602968a7c1d9806770418c0426e304aef1efc24b3abd4c57f792cb32449c2adf1310", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.security.cryptography.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.console/4.3.0/runtime.win.system.console.4.3.0.nupkg", - "sha512": "97473714049c029256d04027f825f0ec4cbd208d4455add8034496425e515437de812f1bd54ba65b00cdee86573502db0662f97100c52bcb47add4d67163febc", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.console.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "c9f219515e268cf40e16b135bd64cba95c35e866dd9bc34954159562314d01d2f9ea7eb8b0db94acf6bdac83d651d90bad7890cb657ffe40fa3440ec662c9944", - "dest": "nuget-sources", - "dest-filename": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.primitives/4.0.1/microsoft.win32.primitives.4.0.1.nupkg", - "sha512": "382bd3a66349e077fdf622a69a2d9e2a07d15143cf238f4fa21c74f2c1e5592f8ba97e6fb956c1c69ca0cf4eba91ca4a7d3c8ef195289c5a0e95bcac52e794be", - "dest": "nuget-sources", - "dest-filename": "microsoft.win32.primitives.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg", - "sha512": "366f07a79d72f6d61c2b7c43eaa938dd68dfb6b83599d1f6e02089b136fa82bec74b6d54d6e03e08a3c612d51c5596e3535cbc2b29f39b97a827b3e7c79826f0", - "dest": "nuget-sources", - "dest-filename": "microsoft.win32.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "ee5d047908b99b776ff9bb54856454b24b09a0f9271b127239543b1f5faa3381a032d9eeb4d813d01b5a4b7d183b6a16250f159fdc450d5314a7eace1550bea3", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg", - "sha512": "d4057301be4ec4936f24b9ce003b5ec4d99681ab6d9b65d5393dd38d04cdec37784aaa12c1a8b50ac3767ed878dae425749490773fec01e734f93cf1045822b3", - "dest": "nuget-sources", - "dest-filename": "system.runtime.compilerservices.unsafe.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg", - "sha512": "23226c503b06abecee5a9604a6e4dd3dabcdf921f55d6aa6dad2bab1ca12a001c7866af5a6de01cc9b4ace54e5c8ee1d5c2fd29dd9dfd7eda3ed86f9b35fa59f", - "dest": "nuget-sources", - "dest-filename": "system.runtime.compilerservices.unsafe.5.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.7.0/system.runtime.compilerservices.unsafe.4.7.0.nupkg", - "sha512": "14c154122872d3929f4f691aa2cb8db78f62b8b6e18b278b39a53d128d93b5cc59be330fa9b6b4613c81f9acfe004f1c97f2f815df753a8b97628c17dd543605", - "dest": "nuget-sources", - "dest-filename": "system.runtime.compilerservices.unsafe.4.7.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.ext/2.16.0/silk.net.vulkan.extensions.ext.2.16.0.nupkg", - "sha512": "1efe3177b98eec2457c6ee7ade30012580cf6077f6985ed76a9fb5ad358a9934cc9dd621bc1fdedcca90219f321e952344b898fdb5b23a59a6445e870d8d6a00", - "dest": "nuget-sources", - "dest-filename": "silk.net.vulkan.extensions.ext.2.16.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tools/4.3.0/runtime.any.system.diagnostics.tools.4.3.0.nupkg", - "sha512": "bd257401e179d4b836a4a2f7236a0e303ae997d2453c946bf272036620a0b14e85e5f42c229332930a954655ab4cae359d191a3e3d9746df09535a651367764c", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.diagnostics.tools.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.private.uri/4.3.0/runtime.unix.system.private.uri.4.3.0.nupkg", - "sha512": "203ebe272791d79ab0c40afe9d0543852ee91b9fb4ae5bc15524d97728bc8bc9d7e0cbcf65d1fab8cfb0aa7a4ae37e7938933eef127aa5ea46f60e57b6ad2d91", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.private.uri.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization/4.3.0/runtime.any.system.globalization.4.3.0.nupkg", - "sha512": "3aac1a076212fae7d0ac81d2b5fdf216b064a1d890577307f89c9a4984c239838c3bdfac4dea052027de090704839319231eef49ce542f3e8bb2f85ba23d28dc", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.globalization.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.accesscontrol/4.5.0/system.security.accesscontrol.4.5.0.nupkg", - "sha512": "e9142d713f93c8380b505b009e699d7d144674b60ac526469123ce774e76b6f605c4e4cc6906fa00d970846a99b4d3b9d8fa2c682a17bbbb9ab459deba303198", - "dest": "nuget-sources", - "dest-filename": "system.security.accesscontrol.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.analyzers/3.3.3/microsoft.codeanalysis.analyzers.3.3.3.nupkg", - "sha512": "0d4896db8aff9d731c5b1c8f73a4b37460c3f08080fbeac0ecf169abf5bdff9c9a994778f453816b888e939d9d0d615245c91a2e4ba31f85d2ea8de222767104", - "dest": "nuget-sources", - "dest-filename": "microsoft.codeanalysis.analyzers.3.3.3.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.timer/4.3.0/runtime.any.system.threading.timer.4.3.0.nupkg", - "sha512": "c0a1fc3661b4e21f329f88a8d2cbf7152698427778add9f850476fc9abe7cdf9b86df79362d6df025f7e15d53f5eb7937d8ac49bdef13fd9eca973a284929fcf", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.threading.timer.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "4981b2d7a106703b185e176ad35bfda149156f3b752778fa71c56b3686407765fd2b6625de352bd563aac1e1e8769d7886cc59a0d5d0bfb41ed60277360beb81", - "dest": "nuget-sources", - "dest-filename": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.globalization.calendars/4.0.1/system.globalization.calendars.4.0.1.nupkg", - "sha512": "e6f3f0fc443c52cbe754ccfe6c7752206557db7603187b0f1ab7e21fcb466248ee20844d9ce9f5f114e6daa5944a3293cca47f3c02a2e735a7b494f29f2278c0", - "dest": "nuget-sources", - "dest-filename": "system.globalization.calendars.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.net.sockets/4.3.0/runtime.unix.system.net.sockets.4.3.0.nupkg", - "sha512": "31b62be088315ead04d89f452a6c49a656b88f0668f7dadb2790511675d48705e01c9df24dbed3a0095157875c208ab6e6b5b6afc82bac13e4d6cdd3026f8424", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.net.sockets.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.net.http/4.1.0/system.net.http.4.1.0.nupkg", - "sha512": "55ef2f727784e744ba069bc0cdd1586ed714cb9239ab724c650629055f4f2e9f88493afd176e833d46d1493974a8e95c805c4ed4d989f095d6def8d39322fd7c", - "dest": "nuget-sources", - "dest-filename": "system.net.http.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.abstractions/6.25.1/microsoft.identitymodel.abstractions.6.25.1.nupkg", - "sha512": "9cb8de51706bc3d992cdf2500714b8242cc6ea15bdbeb34702de1acc501ec16a678ecf61b1ebcfef512d9482bc9311c12269bf803124a6351884d1077f08cbfd", - "dest": "nuget-sources", - "dest-filename": "microsoft.identitymodel.abstractions.6.25.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.registry/4.5.0/microsoft.win32.registry.4.5.0.nupkg", - "sha512": "2ca99fd058a083064184da33d12f72a5c43412151d426c309e2284a5df4b722b2f26dc72616ab6452a24ed81693839b756861d47eea27d60d7db7ff6749ab664", - "dest": "nuget-sources", - "dest-filename": "microsoft.win32.registry.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.timer/4.0.1/system.threading.timer.4.0.1.nupkg", - "sha512": "6aa43dc5b3914050850b8ddafcc2256e60670d51c0f1b38b0d26d80f36e76cf5b40d6053bf92b4abecce5f786de5b13daa70eddf541865509c7a73fe3785de4b", - "dest": "nuget-sources", - "dest-filename": "system.threading.timer.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.net.sockets/4.1.0/system.net.sockets.4.1.0.nupkg", - "sha512": "b231a1ca9d281923ffa1b8dbafa2cc074ce679fc2d473ad7c7192cdc3b51c8ab125c606cbbe0248e02b415e384bfba1bdbc59b28a139589c78aa3687e0236019", - "dest": "nuget-sources", - "dest-filename": "system.net.sockets.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.tasks/4.3.0/runtime.any.system.threading.tasks.4.3.0.nupkg", - "sha512": "5f37a56f5d6c7fc198c7ef76b822b85284f9d7d1c06583c26a698793ade65da1b273d5fb03c20be1eb91a9c835f7122ad2775f4e51dffb2758fabac2a30f8c23", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.threading.tasks.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tracing/4.3.0/runtime.any.system.diagnostics.tracing.4.3.0.nupkg", - "sha512": "0b480d21e23c38965222be7fa1e1a0c7e444cebdf400d1db8d3ac609f893b82d78c5d8b271da61808b7b179dd6466a0090bd807fc2d35020f93a00f0213bb436", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.diagnostics.tracing.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.console/4.3.0/runtime.unix.system.console.4.3.0.nupkg", - "sha512": "7c5cbda7d12315fff6b1e036d55ea27140de8b849f1a9705fd2710a00a2b70f06f534eb0d3e3c8ffb019e1a47d96c559ac61d5fc9d840e48f6e56542fdaccb83", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.console.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/msgpack.cli/1.0.1/msgpack.cli.1.0.1.nupkg", - "sha512": "8d024b49d44c94b98914f064c5196ae4d497be44f4eb2f54354e9f6c01134a11d14cd08351864720fcd8b398908da4bd62623b379323fa9d88bbe251c9dbc665", - "dest": "nuget-sources", - "dest-filename": "msgpack.cli.1.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.osx-x64/7.0.2/microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg", - "sha512": "bd49fdf797e4754971271224eed97051574872e6bf617704386cef00d2de2c61b579cdc7908c2192230fe3c80048bc0d621ce06e49ffa4481fd923cdc12489dc", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg", - "sha512": "299c5a96fffdcaf1972e3e3d1c727837d18ac9e88cb79c09914f12ff1de7280dff10c9232a49a1c1d3ba7785a5cf76f28c9dce414f0a2a567688de7fd5331dc8", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system/4.0.0/runtime.native.system.4.0.0.nupkg", - "sha512": "55ff3eafa406ec3d8e33d8be44d0d06352ce746abffdec1378716b275d634e133fc1bc56fc312bf0d921efc59e8de4ac811022cc34a77fc1f1abc982c931932b", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.jsonwebtokens/6.25.1/microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg", - "sha512": "7c8a0e5dcc06de6fa5a4700936cbc311e32289138e81150562aab78a0f74482b1782c7c7a60f3a0fd65eae53f27cf8a2695808c45231d426ab6dd564b55f33c7", - "dest": "nuget-sources", - "dest-filename": "microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/6.0.0/system.collections.immutable.6.0.0.nupkg", - "sha512": "f8036412e384c5c5af6d28f4eab2543207d2ebbb16c47b70f6c471bc5aa4b9f44404c47d776d295191f20a89caa898abd73a2304dcaf77979174ced2d9160169", - "dest": "nuget-sources", - "dest-filename": "system.collections.immutable.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "6de9544b4da49f127680cf5b3b4afea96bfcac3293038a1b0a12eea0ad60be368af31ee1dfd66d48d458b40200738c04aa0c71adcc54ae2dddbea2cd50d6f28d", - "dest": "nuget-sources", - "dest-filename": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io.compression/4.1.0/system.io.compression.4.1.0.nupkg", - "sha512": "2402b7ba4f0b43bb916cbfd608f9efdb9f60406d2a19cd9e7a677867806962c30b5666b6270b873ff9748b4fc3f7fd6e0451f2a5214d5478593f57d4d8430979", - "dest": "nuget-sources", - "dest-filename": "system.io.compression.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime/4.3.0/runtime.any.system.runtime.4.3.0.nupkg", - "sha512": "bfee3c68312296860e5459af5e770c2e9fcd4ac134361fd569a9ce1e6574b9ae3978aad403f89639a4b5bac8ee5bb0ee1b8edb819e9a60f13ca5bd1812889bbd", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.runtime.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding.codepages/6.0.0/system.text.encoding.codepages.6.0.0.nupkg", - "sha512": "ec873a95ec517de2c5a5364ada30974ddd5e0fafef2ad2517609a1900b5059d35757536fd073805001fa68d5b56a3d4647010a96c9eb233b1d172a3b45fbe4a9", - "dest": "nuget-sources", - "dest-filename": "system.text.encoding.codepages.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg", - "sha512": "9f7fdece330a81f3312ea7c804927852413bee2c929f3066b736993803df47cc0692fbca236c222bf19dc8f59b42f54f2a4c00da9a4d624e458da5874d127ce6", - "dest": "nuget-sources", - "dest-filename": "system.net.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.net.primitives/4.0.11/system.net.primitives.4.0.11.nupkg", - "sha512": "50d5a977a4926fbfaf47bc4656111ed6edb8bb6acfff0cc5c2ee9c104628a255c8298a649f33ca2abdf9c7dacf4bfbf15e48ab7f92bd797b7d50ca328fac48b9", - "dest": "nuget-sources", - "dest-filename": "system.net.primitives.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.pangosharp/3.24.24.59-ryujinx/ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg", - "sha512": "61b96fa224cd3411e91aa6690fa764455418a655ac867d1deb4eca5acc174d2115ad68310e4e4c6f9d6db5bf6169a99383617ce2fc4b123071a7e13e9b77369f", - "dest": "nuget-sources", - "dest-filename": "ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.primitives/4.0.0/system.security.cryptography.primitives.4.0.0.nupkg", - "sha512": "a11562f4fd90ff39c12af2078aa3743e323d8a70fe98cfe3d7e0ec182a2166d353c1ed8d76dd2a9525a80287d7dea228f04982edef6584b89f32f72647b2822f", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.primitives.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "e65a6a1f1928cfb760c395a399542dc7f9087399c53874376604504ae60abd2da24ed735ebd148d335000a5e35c8108ea55404685e902df392eac2e8d38fb665", - "dest": "nuget-sources", - "dest-filename": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "4afac5cc1734330a6103880e790d639e825bfb1b34dbd42083762c47db5e5dab6c03efd16049ac03861d7d87746caed09c7534241d51b7341d47ba6af7e8dd31", - "dest": "nuget-sources", - "dest-filename": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.diagnostics.debug/4.3.0/runtime.win.system.diagnostics.debug.4.3.0.nupkg", - "sha512": "a11bee46985198d0cf9717b99dfb1e92a22875ad5555c175562e53b81797ce4b70fba8ad0620b64b6be9ef9a9584d17bffe6597785010bdddde87e1ea27ce7f4", - "dest": "nuget-sources", - "dest-filename": "runtime.win.system.diagnostics.debug.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.linux-x64/7.0.2/microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg", - "sha512": "caaf98ba70b486f85686d40d973849967cef077ec53d1b3b4bd2e25d6c24a83498ea790f37feebe5db71e108df2ddf4f752adf0223382741405c186efa25d688", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.giosharp/3.24.24.59-ryujinx/ryujinx.giosharp.3.24.24.59-ryujinx.nupkg", - "sha512": "39d109adc3ce6b0ec8c4ad5d33c780d10d03c8632786f0eca0704163580d8f70cdea0e42f8ee7ea933bb0281cb58e5cbbf7ff2ccd2e51da4f23dc2f031bf13ba", - "dest": "nuget-sources", - "dest-filename": "ryujinx.giosharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/sharpziplib/1.4.1/sharpziplib.1.4.1.nupkg", - "sha512": "3f051f41f91577291da0d317d210547752251aae07f5060c1f8ff71917477f44ade9674f9862d6ce76d3c2a7a57b700165ee573286054d6dee1ea825f383f59e", - "dest": "nuget-sources", - "dest-filename": "sharpziplib.1.4.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.vulkan.dependencies.moltenvk/1.2.0/ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg", - "sha512": "d1fbf91712fcaadbd9151eb2dfe5cd1a58a0add3737053d5c53caebcb64165db1a542a2ab4d95a180d356abcc028a97491b91992cff5b1e80091758e54ba0c31", - "dest": "nuget-sources", - "dest-filename": "ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg", - "sha512": "f5191cdb360bd2624abd7454c66862540f97aa19df92ea0854786b9d3cb9549e95c6194cfe8adc01589203c4feb1673a129c4929486bcb5f8db83ea535477c53", - "dest": "nuget-sources", - "dest-filename": "system.objectmodel.4.0.12.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io.compression.zipfile/4.0.1/system.io.compression.zipfile.4.0.1.nupkg", - "sha512": "49322ce411efafb4b55d43b0d7a52bc334990e1e45b321d01f0f394cf1aaba15845603d6f08a12c8f09454a03518e6c0ab7996ba73b1116c5c7f685d768bc62c", - "dest": "nuget-sources", - "dest-filename": "system.io.compression.zipfile.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.0.1/system.reflection.primitives.4.0.1.nupkg", - "sha512": "08ad6f78c5f68af95a47b0854b4ee4360c4bad6e83946c2e45eaa88b48d27d06618c6b7479bd813eb5f30a2db486590d17645e9c0e06a72dbe12ffd37730707e", - "dest": "nuget-sources", - "dest-filename": "system.reflection.primitives.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg", - "sha512": "d4b9cc905f5a5cab900206338e889068bf66c18ee863a29d68eff3cde2ccca734112a2a851f2e2e5388a21ec28005fa19317c64d9b23923b05d6344be2e49eaa", - "dest": "nuget-sources", - "dest-filename": "system.reflection.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.management/7.0.0/system.management.7.0.0.nupkg", - "sha512": "d0469d2a5ed07e7345ce759276c92cf30bb9d5680db68e1613917793d698dd1db8301361fb33970bae77ad0f506d1ae7a56f96ea0b5d854d352f58e69bbbda7f", - "dest": "nuget-sources", - "dest-filename": "system.management.7.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding.extensions/4.3.0/runtime.any.system.text.encoding.extensions.4.3.0.nupkg", - "sha512": "656aa8bd9d7e19534964ac7b8405615f00359779e322d4cfe1f18c132fec4a4f52c5588bfe61cec9966a9142a73315f5d2b9e5a7c524b418364f0322b20961c3", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.text.encoding.extensions.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.0.1/system.reflection.emit.ilgeneration.4.0.1.nupkg", - "sha512": "c3819cd3a58f609ff579652536f9f414481caa4d9e7dc277e0d3c8c8fe8e0ff90806fa94f7c6436d4af853c6fccd26d5af57f0a49c5baceef4e0daaa39e26773", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.ilgeneration.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.3.0/system.reflection.emit.ilgeneration.4.3.0.nupkg", - "sha512": "e9be5f62bf64b1947a49857337306a5d0980686b58d665989e94006ab04aa7e0bbf4d8543d1b57d5bb38079052f275f339b73054a7357e4fa357208a0ac85d69", - "dest": "nuget-sources", - "dest-filename": "system.reflection.emit.ilgeneration.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.runtime.extensions/4.3.0/runtime.unix.system.runtime.extensions.4.3.0.nupkg", - "sha512": "54b81784c08e934389c59e6e155af6b1855e4bbc41678b01a702c94e6daba87c6ddfd16fe9e2cb61f3097bfa4950dbc37781454d027ce5ba6c50a393cc91b888", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.runtime.extensions.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/13.0.1/newtonsoft.json.13.0.1.nupkg", - "sha512": "83731b662eaf05379a23f8446ef47bbc111349dd4358b7bd8b51383fe9cf637e2fe62f78cea52a0d7bdd582dc6fbbb5837d4a7b1d53dcf37a0ae7473e21ee7b1", - "dest": "nuget-sources", - "dest-filename": "newtonsoft.json.13.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime/4.3.0/system.runtime.4.3.0.nupkg", - "sha512": "92ab2249f08073cfafdc4cfbd7db36d651ad871b8d8ba961006982187de374bf4a30af93f15f73b05af343f7a70cbd484b04d646570587636ae72171eb0714fb", - "dest": "nuget-sources", - "dest-filename": "system.runtime.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime/4.1.0/system.runtime.4.1.0.nupkg", - "sha512": "4b05eb68bb485846707c4fe3393f9616d3ffb6c5f62a121d81142ddf7d0241c931fe96d193b7bf02281a9368458e0764466766557cfa9709035dc76d8fdd7706", - "dest": "nuget-sources", - "dest-filename": "system.runtime.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.imagesharp.drawing/1.0.0-beta11/sixlabors.imagesharp.drawing.1.0.0-beta11.nupkg", - "sha512": "15c8f11059ce33331a4a9c7981a5bd91ffc19eaf05f236a1c54d5013ac0fafeb6e065cd2f63d4e9037297cdc9216ac4e67e5d9b73b967da740c174e3318a15f9", - "dest": "nuget-sources", - "dest-filename": "sixlabors.imagesharp.drawing.1.0.0-beta11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/gtksharp.dependencies/1.1.1/gtksharp.dependencies.1.1.1.nupkg", - "sha512": "6373a348b6ce3dfa2ad03c0e0eb74c4de7a4b45847c3d9ff16807eebafe6689c19f1828027abe33757f6453cee847e27a9dd952b1545576d51c63200baf1d28b", - "dest": "nuget-sources", - "dest-filename": "gtksharp.dependencies.1.1.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tools/4.0.1/system.diagnostics.tools.4.0.1.nupkg", - "sha512": "a812ccbbdd0a66eb57075121ea6332a526803ef883ca9f8b06431d6668ad50efd13624fa87dfaf6aed03c652f795c2ffb9fa9d9895a2fafa96eca614cbf86cdb", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.tools.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.openal/4.7.5/opentk.openal.4.7.5.nupkg", - "sha512": "a8f6b0345b2ca924594449bb9ddb3b02ce083247d1ff127c99d7edbc0c9805467482d610881d78dd9853d8853ee50e1f87706c35bde92f4952d2fe82ede09498", - "dest": "nuget-sources", - "dest-filename": "opentk.openal.4.7.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/spb/0.0.4-build28/spb.0.0.4-build28.nupkg", - "sha512": "b3bbcaa903a7a7da3efee334907bd2b240849fa505d57df1678c6c00f696c3da915068c333cce18504e2577d63801df59f0081c5d97fbf256a19aaa972dd81bb", - "dest": "nuget-sources", - "dest-filename": "spb.0.0.4-build28.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.linq.expressions/4.1.0/system.linq.expressions.4.1.0.nupkg", - "sha512": "04605a091d3aea404bc97cb7ffc154708b3bec886562d9e36aecd4d2ed130afbb45f54cd16a3f714f0ccb3f27c5bc7707e55fbc3e81681a783e9396930058acc", - "dest": "nuget-sources", - "dest-filename": "system.linq.expressions.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg", - "sha512": "1ef033a68688aab9997ec1c0378acb1638b4afb618e533fcaf749d93389737ba94f4a0a94481becdf701c7e988ae2fe390136a8eae225887ee60db45063490fe", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.targets.1.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.0.1/microsoft.netcore.targets.1.0.1.nupkg", - "sha512": "6ed8e75f945a18651066fe9ee31cf6c8257a5974340fe4d262438903c4959a479f4a515a4d1389e6d3d3ab34f09a3c7bc2009aada2e8a7f697b6655a82d3bfc9", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.targets.1.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg", - "sha512": "81bdb93c1c86c560343df6cc367499fb2a01a9b3016617be416874a23c4355a8d95c7be34f175510f3fdea4872302a87c8efab98a328dfa39422db520c3f291c", - "dest": "nuget-sources", - "dest-filename": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.globalization.extensions/4.0.1/system.globalization.extensions.4.0.1.nupkg", - "sha512": "415ab44aa3e46b59ad1d314ceda11f9dc78f85adede3daece96c83c98448e2a0cad7e79045edeeeaca8618115c38517364b00cdd9a0a7228e7da1ebc342b0116", - "dest": "nuget-sources", - "dest-filename": "system.globalization.extensions.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.extensions/4.0.1/system.reflection.extensions.4.0.1.nupkg", - "sha512": "3e2f07c29836735be6247e75f760de90783d5ece64e8cce4e23eceb777da8975a35130804d87ddd26449c13d2ca34180e3f6b844b0fdd2dc594bbec6e7272098", - "dest": "nuget-sources", - "dest-filename": "system.reflection.extensions.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.encoding/4.0.0/system.security.cryptography.encoding.4.0.0.nupkg", - "sha512": "f20d60a5f9affcb49995d1bf27a1c09173ad601147241c4ca504e13324d35f7d6618e8a92d04e174d5d3d9821a03e122fd3b0f8fc1d512d105b6afd73b496c5f", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.encoding.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection/4.3.0/system.reflection.4.3.0.nupkg", - "sha512": "2325b67ed60dce0302807064f25422cbe1b7fb275b539b44fba3c4a8ce4926f21d78529a5c34b31c03d80d110f7bace9af9589d457266beac014220057af8333", - "dest": "nuget-sources", - "dest-filename": "system.reflection.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection/4.1.0/system.reflection.4.1.0.nupkg", - "sha512": "67143ef8f6fb1044830c70c66e9a2b4f1850f50df5dadfaa5177338362ea7b9e9fe4b0ba59cd4eac6e1c8db4e0c285c239e4c2b3ce61391618b411aaff45f7c2", - "dest": "nuget-sources", - "dest-filename": "system.reflection.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg", - "sha512": "9f8833176c139b71a58694ae401c5aec209a63227be07c7ab559bef772082bd1f6cc38ba2949cb1c8e5c5514ad9f4ff51859838dc2f28191f8bb7ae611a50239", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.collections.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg", - "sha512": "68052086e77d3c7198737a3da163d67740b7c44f93250c39659b3bf21b6547a9abf64cbf40481f5c78f24361af3aaf47d52d188b371554a0928a7f7665c1fc14", - "dest": "nuget-sources", - "dest-filename": "system.threading.tasks.extensions.4.5.4.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.0.0/system.threading.tasks.extensions.4.0.0.nupkg", - "sha512": "f294f1a4179f53d59f91f01a372cc7896bf8c322e9827299cb1aa3ae2b1f809e98034834f5ccd4cb3fa1c30735082d244fff6584dab6e8870ad409b55e8a4986", - "dest": "nuget-sources", - "dest-filename": "system.threading.tasks.extensions.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.linq/4.1.0/system.linq.4.1.0.nupkg", - "sha512": "53e53220e5fdd6ad44f498e4657503780bca1f73be646009134150f06a76b0873753db3aae97398054bd1e8cc0c1c4cdd2db773f65a26874ab94110edb0cddb1", - "dest": "nuget-sources", - "dest-filename": "system.linq.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.5.1/system.buffers.4.5.1.nupkg", - "sha512": "80da6158e55b9bcf7e0b5e6379b9cf45a632914f037b53c5bf5609576e3cd7821f7861956b73d74470d2d0c2e56dd235a5ef4ca6ffe7e192b820dc2d023aaff2", - "dest": "nuget-sources", - "dest-filename": "system.buffers.4.5.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.3.0/system.buffers.4.3.0.nupkg", - "sha512": "3dcbf66f6edf7e9bb4f698cddcf81b9d059811d84e05c7ac618b2640efed642f089b0ef84c927c5f58feffe43bb96a6bcf4fec422529b82998b18d70e4648cbe", - "dest": "nuget-sources", - "dest-filename": "system.buffers.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.0.0/system.buffers.4.0.0.nupkg", - "sha512": "0663f4639c4e37c9dff12717cdeaebf30e38d91e986d6a99f9f16ba88189873e0399e418659e732a18c674d8875f8f41a1cf60319604173ca8430960759fddf2", - "dest": "nuget-sources", - "dest-filename": "system.buffers.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.algorithms/4.2.0/system.security.cryptography.algorithms.4.2.0.nupkg", - "sha512": "93d1e6394afc506b58bd26a9b3ccd64901bc2d48dbb8825ba1f927c17311cad607e6f8a9794cc41aee83b98eed08a23a7c58390b9b852f894735392342f37a3d", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.algorithms.4.2.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.claims/4.3.0/system.security.claims.4.3.0.nupkg", - "sha512": "ab72b90801f6c051a2b31645448eebfca74642b3cfa1d51f80e21a0d0d7ad44d3366dea139347e2852781b7f3bae820df16c3eb188a2c96244df05394ed72c86", - "dest": "nuget-sources", - "dest-filename": "system.security.claims.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.khr/2.16.0/silk.net.vulkan.extensions.khr.2.16.0.nupkg", - "sha512": "6b6365aa6246013c62408dcbc6c51818eae841a84c900f30ce4d163201386518b7f01ae10e003ae6a92e97cec9da287ca73c8665ab475666a503dc49f0790778", - "dest": "nuget-sources", - "dest-filename": "silk.net.vulkan.extensions.khr.2.16.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x64/7.0.2/microsoft.netcore.app.host.win-x64.7.0.2.nupkg", - "sha512": "82c4dccfbb1abd11925125eb4ae4ddb168de6b5889a513c9bd14909cc8a4ad8fb115867138c950a1095806bd939132d21dbf67b3412409414f816ed92e2a32e4", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.app.host.win-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.x509certificates/4.1.0/system.security.cryptography.x509certificates.4.1.0.nupkg", - "sha512": "6171106ffefaea916a72abf17af038e0203b4e779b7bb75f6fe6cec04c6de3316a7ad4eda8fd3ce7dc0bd8375a0f5e45387456499b24ba22224538cf08a0cae6", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.x509certificates.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gdksharp/3.24.24.59-ryujinx/ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg", - "sha512": "a79da0931504eea4acaceb4eedc739e844d5e978690c241446f9bc958ea62cad1f2f6df7f0f6b96f86643426a2539c3e5b1bf13bb33eac053d5b9b43e7d53bf7", - "dest": "nuget-sources", - "dest-filename": "ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection/4.3.0/runtime.any.system.reflection.4.3.0.nupkg", - "sha512": "293d3dd8be87e1c5cd76ece4ed64ebb5ae6b50be95a39bee401eeed64355e34641905f8c14392fbc3acf8609f5d6fca731f39ce7607962eb5951f09516480015", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.reflection.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg", - "sha512": "6c58fe1e3618e7f87684c1cea7efc7d3b19bd7df8d2535f9e27b62c52f441f11b67b21225d6bcd62f409e02c2a16231c4db19be33b8fab5b9b0a5c8660ddab24", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.debug.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.0.11/system.diagnostics.debug.4.0.11.nupkg", - "sha512": "02f4d0bf969eb1a876def21c1ffd75f8ed5f979aed9a1169f409e60a6e07016854e2154da5c0164fabaeaf6527a18d8e67282db1b69327a1b3581e9c0c742f58", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.debug.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.overlapped/4.3.0/system.threading.overlapped.4.3.0.nupkg", - "sha512": "25612d588a18047ccc9a0b7623fd5ee05146eaf7832f8cb303563b8ae118d86f86c99cabceac7f19094cf7633e77cd43d5c1f6769d8a4616d975079b9fc43e44", - "dest": "nuget-sources", - "dest-filename": "system.threading.overlapped.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.xml.readerwriter/4.0.11/system.xml.readerwriter.4.0.11.nupkg", - "sha512": "d40d6e9d55e57acdf04132bcb8ae8abf1abb3483620cde969c78c6c393a9936abf742c1dcf66288e6e9dffcb399a880ee3c11540ac140cb32e20b41365aaf35e", - "dest": "nuget-sources", - "dest-filename": "system.xml.readerwriter.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.nvdec.dependencies/5.0.1-build13/ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg", - "sha512": "2b3f0627e8a74a80971c50e01eec9b1a97fab47f4ce0a6e6048b08297be99b7a1a95635eabb6989eecd45a53be42111c03a7902d71162a15be3b1219df16e49c", - "dest": "nuget-sources", - "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.3.0/system.security.principal.windows.4.3.0.nupkg", - "sha512": "66c1d5a9d649b964e1653fa2cd41d8f80515b7cd727fcd7f0890552070da1099ecd1032560f259a108e0d1d6a6da23fa07bc5c922f426a91f33b667f7c004019", - "dest": "nuget-sources", - "dest-filename": "system.security.principal.windows.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.5.0/system.security.principal.windows.4.5.0.nupkg", - "sha512": "86cdb3178b4e437578890b6d5672eb9d1fe2f003abac082ed869a9e3f8cd684ffee618995838f6d052bf9bf396dc8b5d8bd5c3bea7f9e56cc7922598b4e49436", - "dest": "nuget-sources", - "dest-filename": "system.security.principal.windows.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.private.uri/4.3.0/system.private.uri.4.3.0.nupkg", - "sha512": "5989a57ef273b689a663e961a0fe09d9b1d88438e5478358efc4b165de3b2674fa9579c301ce12d2d2fa5f33295f2acb42eceea2ebebf70c733da6364ceaf94d", - "dest": "nuget-sources", - "dest-filename": "system.private.uri.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.sdl2-cs/2.26.1-build23/ryujinx.sdl2-cs.2.26.1-build23.nupkg", - "sha512": "8112accffc66185e5dad3648cdf062de1a867c762fbed2a078c87fd2748b7604b777e7bf7a721f87cfa1d32e8970a015d38950ec2aa7d1e05d24a7a776daffd5", - "dest": "nuget-sources", - "dest-filename": "ryujinx.sdl2-cs.2.26.1-build23.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg", - "sha512": "6ff7feec7313a7121f795ec7d376e4b8728c17294219fafdfd4ea078f9df1455b4685f0b3962c3810098e95d68594a8392c0b799d36ec8284cd6fcbd4cfe2c67", - "dest": "nuget-sources", - "dest-filename": "system.text.encoding.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.0.11/system.text.encoding.4.0.11.nupkg", - "sha512": "f974335143f36b318abf040ed535887f28089d749b1fa55056345df5243dfbd56d27b74c6e4d87a737fdbb8e699c5291bd25f1e5db4700bb00bf53330c7e3e9a", - "dest": "nuget-sources", - "dest-filename": "system.text.encoding.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/4.7.2/system.text.json.4.7.2.nupkg", - "sha512": "345d15c74a9ac6ddabeeba349b9ba027e48b423972984ff202ea74b5413dd502236817746a82485c840a0cfc818179b94548731db5f361b07a4d11bdda20f50f", - "dest": "nuget-sources", - "dest-filename": "system.text.json.4.7.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/6.0.0/system.text.json.6.0.0.nupkg", - "sha512": "167b4ee8d1277a5d8bd6b4fbe0a3b3a708519235fb005ea98cafdd5b30e17758efeb0a87dcd068af289400d841f4d2cd24550df882d1927c47ec6ff4fb8781ff", - "dest": "nuget-sources", - "dest-filename": "system.text.json.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.net.nameresolution/4.3.0/system.net.nameresolution.4.3.0.nupkg", - "sha512": "40d39e131fe7a392e58e9f58b516b5db88383de91c05b771f5e509acf46cc874271e90623d327ab039003ab8f2714144694390261278de324e1aee228a828ab4", - "dest": "nuget-sources", - "dest-filename": "system.net.nameresolution.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.osx-x64/7.0.2/microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg", - "sha512": "51081d70ca56578a41314b9505a8fb2d0ce7724cf5c052e52b2d32a69d82bf3979f930cfb58701327790f77956c85e5802171c83dbd07bcc9f4f1e61861807bb", - "dest": "nuget-sources", - "dest-filename": "microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/discordrichpresence/1.1.3.18/discordrichpresence.1.1.3.18.nupkg", - "sha512": "5fac6c07258c494fdb2f50e1c56ce3d4a4c8a76668be562fcd1858bd49678b581e419bbf4d9391baea9163827f99b32a21baa2bd78cd92a735af21a6add14e63", - "dest": "nuget-sources", - "dest-filename": "discordrichpresence.1.1.3.18.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg", - "sha512": "7d488ff82cb20a3b3cef6380f2dae5ea9f7baa66bf75ad711aade1e3301b25993ccf2694e33c847ea5b9bdb90ff34c46fcd8a6ba7d6f95605ba0c124ed7c5d13", - "dest": "nuget-sources", - "dest-filename": "system.threading.tasks.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.0.11/system.threading.tasks.4.0.11.nupkg", - "sha512": "fb66c496a5b4c88c5cb6e9d7b7d220e10f2fc0aed181420390f12f8d9986a1bd2829e9f1bf080bb6361cd8b8b4ffc9b622288dfa42124859e1be1e981b5cfa7b", - "dest": "nuget-sources", - "dest-filename": "system.threading.tasks.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.typeextensions/4.1.0/system.reflection.typeextensions.4.1.0.nupkg", - "sha512": "5b1875ae86f76f60307fbe261c7471e996d4d4eade0c4783cb35a5aad7fec4f01be01cb1f1f78af22d483ecce12096f6ed431d69c4a66c7bf235008bcac30cb7", - "dest": "nuget-sources", - "dest-filename": "system.reflection.typeextensions.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.collections/4.3.0/system.collections.4.3.0.nupkg", - "sha512": "ca7b952d30da1487ca4e43aa522817b5ee26e7e10537062810112fc67a7512766c39d402f394bb0426d1108bbcf9bbb64e9ce1f5af736ef215a51a35e55f051b", - "dest": "nuget-sources", - "dest-filename": "system.collections.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.collections/4.0.11/system.collections.4.0.11.nupkg", - "sha512": "f61b75329ba5d7c0e688aa9d110b2200c8934c3a1888f6b1b5f198baa7ab93f23835e8380853e8c046f257172b5060578ed86df26e5fe0ef34d8c4408a02c33f", - "dest": "nuget-sources", - "dest-filename": "system.collections.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/4.0.0/system.diagnostics.diagnosticsource.4.0.0.nupkg", - "sha512": "199e2a85b5cb0ea6c2ce13e12444af61e80da7625c4f7d0dcc97dcc363b21f2bee48c7bcfd85d99d0a23aeb1ea35f94dd7ff8fd22ab50f2481e472a749765471", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.diagnosticsource.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.csp/4.0.0/system.security.cryptography.csp.4.0.0.nupkg", - "sha512": "6f3fb8256086a16ed7fe339e0f09d42a081c4f783b0f8626bb7eec08261532ecf517f6c7a41bfbb8e2b99b8f1c79ef99ef7c724d8719e287fe7981ebe8b6aa8e", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.csp.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.microsoft.win32.primitives/4.3.0/runtime.win.microsoft.win32.primitives.4.3.0.nupkg", - "sha512": "36576acaafa80dcdf3dad082e37ccfbbd3175cd622992b0dd1c690d1cb575a1f7aef44894dccd2e89d34c6027a26de502843128982adcb7150644f51f1480935", - "dest": "nuget-sources", - "dest-filename": "runtime.win.microsoft.win32.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io/4.3.0/system.io.4.3.0.nupkg", - "sha512": "bfca5a21e3e1986b9765b13dc6fbcd6f8b89e4c1383855d1d7ef256bf1bf2f51889769db5365859dd7606fbf6454add4daeb3bab56994ffb98fd1d03fe8bc1e6", - "dest": "nuget-sources", - "dest-filename": "system.io.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io/4.1.0/system.io.4.1.0.nupkg", - "sha512": "e01b432f3d715f3c88d5d7f3e7cc1ceee78caf99407a11c3306f9103aee78963f818417f14eec52f0096fa247900a31e53bd3226e06f0c0f93870db0b2b78331", - "dest": "nuget-sources", - "dest-filename": "system.io.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/2.0.0/microsoft.netcore.platforms.2.0.0.nupkg", - "sha512": "0827f83639833a88ac7bb1408a3d953ee1c880a2acbbaf7abe44f084e90f5507cbb13981d962c57d0e3278ee5476d93c143eb7e9404cc7a63d7a8bf324a4fbe8", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.platforms.2.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg", - "sha512": "6bf892c274596fe2c7164e3d8503b24e187f64d0b7bec6d9b05eb95f04086fceb7a85ea6b2685d42dc465c52f6f0e6f636c0b3fddac48f6f0125dfd83e92d106", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.platforms.1.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.0.1/microsoft.netcore.platforms.1.0.1.nupkg", - "sha512": "5f3622dafd8fe8f3406c7a7ee506a7363c9955b28819ae1f2b067c38eae7ab6e620eb63442929b967c94fc511e47a2b7547ab62b6f1aafe37daa222499c9bb19", - "dest": "nuget-sources", - "dest-filename": "microsoft.netcore.platforms.1.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.interopservices/4.3.0/runtime.any.system.runtime.interopservices.4.3.0.nupkg", - "sha512": "70eeb2469726d092bb95568e51ba5cfdd1cc07a9e65077e2b6dd5b7c8b164d4b45c749ef4a52f45928f63a27e8accdb83b861ea73c9ad3d42dc38e6afdbd0e8c", - "dest": "nuget-sources", - "dest-filename": "runtime.any.system.runtime.interopservices.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.core/4.7.5/opentk.core.4.7.5.nupkg", - "sha512": "094eb32380f21aedf38302de221f24d20536aeb15935d0ae819adb3d974c91fbe6874dcfdb6c6f02cba7db2e4b48782597a1dff9811e105958a02b265e5bd145", - "dest": "nuget-sources", - "dest-filename": "opentk.core.4.7.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.globalization/4.3.0/system.globalization.4.3.0.nupkg", - "sha512": "823d2ba308cb073b40a3146ecccd0d9fd7b1615ac3fbefb16f73d873e411fd81c3bdc87df206d3dc7e2f14c9cd53aafca684a3570c25471280aada8de805ece2", - "dest": "nuget-sources", - "dest-filename": "system.globalization.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.globalization/4.0.11/system.globalization.4.0.11.nupkg", - "sha512": "66bc21667f5f839bc711eda3b0463863d70e0ad86770fd5410e0123006d6f031755cf7220187fb7cefed69b3f4a9eab8f0868cae765cb1425c8bf60427f395e6", - "dest": "nuget-sources", - "dest-filename": "system.globalization.4.0.11.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.collections.concurrent/4.0.12/system.collections.concurrent.4.0.12.nupkg", - "sha512": "a46bd40b8cc7afeaea14c80ee6ab99a5ef6d27e9e897cfe842e9ab5ca04b9de8d7192a310225b1040d57d4870921487acf5df993ab81301d49994048e1341e85", - "dest": "nuget-sources", - "dest-filename": "system.collections.concurrent.4.0.12.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.io.compression/4.1.0/runtime.native.system.io.compression.4.1.0.nupkg", - "sha512": "453e16348b435b0d8bc5c4db85d77c99f6e4a79f62e8168eb91c972d6e788c8f1f965ba6e46c1b42f71dee4618373ac70499024f6a4d1462c040fe4989f68283", - "dest": "nuget-sources", - "dest-filename": "runtime.native.system.io.compression.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem/4.0.1/system.io.filesystem.4.0.1.nupkg", - "sha512": "a6478b17f5d52fc5b9517458e93e1a69b92575c170f44046b3f4e25c7e67c9d4126ab486f5a3c51abcb279d05a057bd53aa8f49a1e51eae69563ae39214b72d3", - "dest": "nuget-sources", - "dest-filename": "system.io.filesystem.4.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/opentk.graphics/4.7.5/opentk.graphics.4.7.5.nupkg", - "sha512": "a8203d7210c3f88ba358d349a275a99b0f18d806444a70a2fe4caecd6fade2984a7eeb64fb8be3160add0d5c3fd6e87685cb25dd24c165fcd6c6c925846d95fa", - "dest": "nuget-sources", - "dest-filename": "opentk.graphics.4.7.5.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.fonts/1.0.0-beta0013/sixlabors.fonts.1.0.0-beta0013.nupkg", - "sha512": "4e51c75fff6601c787ced1d6ac8e955ac4c0fe4a24355099f8925705127c322f8d09a66ea38cce7db7b21b680223ae0b5d80417ad2eafc1291f37f4bab7e31b5", - "dest": "nuget-sources", - "dest-filename": "sixlabors.fonts.1.0.0-beta0013.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.5.0/system.security.cryptography.cng.4.5.0.nupkg", - "sha512": "0ec1d266805e55ed9b0249cfc1dae09c242581df345d1712f15ddebfde76045f191388d48b68bbfad21a16d87a99df67bab7b54892f685f42de08823a4dc9bc5", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.cng.4.5.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.2.0/system.security.cryptography.cng.4.2.0.nupkg", - "sha512": "4ed77501662e6d18733f507077de9d277b61b3d2dacee791e0b3a56c9a604bd2acfb81334c51660ba33bb7a6e24ed46c2da02716f6613a937152ea4806540bf1", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.cng.4.2.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.appcontext/4.1.0/system.appcontext.4.1.0.nupkg", - "sha512": "f724af13eb14aa57255f82841683a93b427de172b8d31b9fe2c6bc8c21a795e60ecf211b4e49e1c2e285fe1ad498e6bd9c843e109a60a3dc27b49df560106e96", - "dest": "nuget-sources", - "dest-filename": "system.appcontext.4.1.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.net.primitives/4.3.0/runtime.unix.system.net.primitives.4.3.0.nupkg", - "sha512": "c2a0ecf5c72b226b4776eb6281f00267827d6086a0ad758ebf6e6c64a1c148d2056fe99c87ab4207add5fa67f1db73dd1ed3dca81141fc896be6b6e98795c97e", - "dest": "nuget-sources", - "dest-filename": "runtime.unix.system.net.primitives.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg", - "sha512": "0f26afeeaa709ea1f05ef87058408dd9df640c869d7398b2c9c270268ddf21a9208cd7d2bfa1f7fbd8a5ceab735dd22d470a3689627c9c4fadc0ea5fe76237fa", - "dest": "nuget-sources", - "dest-filename": "system.text.encodings.web.6.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.openssl/4.0.0/system.security.cryptography.openssl.4.0.0.nupkg", - "sha512": "432629e457c7061a7d207fb60597a5a8a806fab8c62574833e509afa3c4ac8fed529dbc7f21d69e16dc9fdd091aaa575191e9fb552eedcf28aaa8b5954d32e9b", - "dest": "nuget-sources", - "dest-filename": "system.security.cryptography.openssl.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan/2.16.0/silk.net.vulkan.2.16.0.nupkg", - "sha512": "b6f53b3d4d2cd4e8eed14a5d567de5195ff595d2649f441b09920d7bbaec48563a95554cf7289901f8bb394339a92b428a05ae913b4d2a45a7af61ad38e44fc8", - "dest": "nuget-sources", - "dest-filename": "silk.net.vulkan.2.16.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.metadata/5.0.0/system.reflection.metadata.5.0.0.nupkg", - "sha512": "3b74e3e491eee87a8410f5b9a2e556233d9919267f6a054da7a4c9c34b6916b07c77ea9ef8cceb5b7c3361e7394e502cc3c9a09247c6a06bb58509e82554e527", - "dest": "nuget-sources", - "dest-filename": "system.reflection.metadata.5.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.audio.openal.dependencies/1.21.0.1/ryujinx.audio.openal.dependencies.1.21.0.1.nupkg", - "sha512": "4b6b99d943db72eac80779e2bbae15e9bac11ff1a30365f5363990f49f0c605fff5ce0b57bbb54e33cd73eed6e588e28598cfc0fe5bea7b56c2a3dda2d031194", - "dest": "nuget-sources", - "dest-filename": "ryujinx.audio.openal.dependencies.1.21.0.1.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices.runtimeinformation/4.0.0/system.runtime.interopservices.runtimeinformation.4.0.0.nupkg", - "sha512": "462d35e66cbdd21dc007f06c6ef129ab57e810fa0f0416bd2fc6fb7eed55138780d4d31e31ee6267a82e2e3a1607e5c642bd6efeb130b57a1baa87e3141b0080", - "dest": "nuget-sources", - "dest-filename": "system.runtime.interopservices.runtimeinformation.4.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg", - "sha512": "d0a5d30e261cd45b7dfab02b7ffbd76b64e0c9b892ed826ea61481c983c0208b05b69981cd79e91cd4e5811e1cd4c3cea06a1afce05811ece58be5e4c20169ea", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.tracing.4.3.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tracing/4.1.0/system.diagnostics.tracing.4.1.0.nupkg", - "sha512": "0c64f255836cb629587b117bd8de5e70bfe7e4c6d7d138bff10b9e85f4883fba250ae07118c21d5e9130ba3cf120a9a2bf581a17577d3a7ec09260933c7b4d47", - "dest": "nuget-sources", - "dest-filename": "system.diagnostics.tracing.4.1.0.nupkg" - } -] \ No newline at end of file diff --git a/rd-submodules/ryujinx/ryujinx-wrapper b/rd-submodules/ryujinx/ryujinx-wrapper deleted file mode 100644 index e7ea8693..00000000 --- a/rd-submodules/ryujinx/ryujinx-wrapper +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -for i in {0..9}; do - test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i; -done - -env DOTNET_EnableAlternateStackCheck=1 Ryujinx "$@" \ No newline at end of file diff --git a/res/DREAMS.ttf b/res/DREAMS.ttf new file mode 100755 index 00000000..91e70b71 Binary files /dev/null and b/res/DREAMS.ttf differ diff --git a/res/binding_icons/RD-Arcade-BLUE.png b/res/binding_icons/RD-Arcade-BLUE.png new file mode 100755 index 00000000..aac42d98 Binary files /dev/null and b/res/binding_icons/RD-Arcade-BLUE.png differ diff --git a/res/binding_icons/RD-Arcade-GREEN.png b/res/binding_icons/RD-Arcade-GREEN.png new file mode 100755 index 00000000..68672af9 Binary files /dev/null and b/res/binding_icons/RD-Arcade-GREEN.png differ diff --git a/res/binding_icons/RD-Arcade-RED.png b/res/binding_icons/RD-Arcade-RED.png new file mode 100755 index 00000000..56e6b6a6 Binary files /dev/null and b/res/binding_icons/RD-Arcade-RED.png differ diff --git a/res/binding_icons/RD-Arcade-YELLOW.png b/res/binding_icons/RD-Arcade-YELLOW.png new file mode 100755 index 00000000..1a1cf755 Binary files /dev/null and b/res/binding_icons/RD-Arcade-YELLOW.png differ diff --git a/res/binding_icons/RD-Arrow-01.png b/res/binding_icons/RD-Arrow-01.png new file mode 100755 index 00000000..5d2d61df Binary files /dev/null and b/res/binding_icons/RD-Arrow-01.png differ diff --git a/res/binding_icons/RD-Arrow-02.png b/res/binding_icons/RD-Arrow-02.png new file mode 100755 index 00000000..7c34235e Binary files /dev/null and b/res/binding_icons/RD-Arrow-02.png differ diff --git a/res/binding_icons/RD-Arrow-03.png b/res/binding_icons/RD-Arrow-03.png new file mode 100755 index 00000000..6c81c6ef Binary files /dev/null and b/res/binding_icons/RD-Arrow-03.png differ diff --git a/res/binding_icons/RD-Arrow-04.png b/res/binding_icons/RD-Arrow-04.png new file mode 100755 index 00000000..da201c93 Binary files /dev/null and b/res/binding_icons/RD-Arrow-04.png differ diff --git a/res/binding_icons/RD-Arrow-05.png b/res/binding_icons/RD-Arrow-05.png new file mode 100755 index 00000000..d2bf2041 Binary files /dev/null and b/res/binding_icons/RD-Arrow-05.png differ diff --git a/res/binding_icons/RD-Arrow-06.png b/res/binding_icons/RD-Arrow-06.png new file mode 100755 index 00000000..65ce6093 Binary files /dev/null and b/res/binding_icons/RD-Arrow-06.png differ diff --git a/res/binding_icons/RD-Arrow-07.png b/res/binding_icons/RD-Arrow-07.png new file mode 100755 index 00000000..0ec313f3 Binary files /dev/null and b/res/binding_icons/RD-Arrow-07.png differ diff --git a/res/binding_icons/RD-Arrow-08.png b/res/binding_icons/RD-Arrow-08.png new file mode 100755 index 00000000..68c2f983 Binary files /dev/null and b/res/binding_icons/RD-Arrow-08.png differ diff --git a/res/binding_icons/RD-Arrow-09.png b/res/binding_icons/RD-Arrow-09.png new file mode 100755 index 00000000..a5e06052 Binary files /dev/null and b/res/binding_icons/RD-Arrow-09.png differ diff --git a/res/binding_icons/RD-Arrow-10.png b/res/binding_icons/RD-Arrow-10.png new file mode 100755 index 00000000..a6576cda Binary files /dev/null and b/res/binding_icons/RD-Arrow-10.png differ diff --git a/res/binding_icons/RD-Arrow-11.png b/res/binding_icons/RD-Arrow-11.png new file mode 100755 index 00000000..3d11d414 Binary files /dev/null and b/res/binding_icons/RD-Arrow-11.png differ diff --git a/res/binding_icons/RD-Arrow-12.png b/res/binding_icons/RD-Arrow-12.png new file mode 100755 index 00000000..bcfa0b6f Binary files /dev/null and b/res/binding_icons/RD-Arrow-12.png differ diff --git a/res/binding_icons/RD-Arrow-13.png b/res/binding_icons/RD-Arrow-13.png new file mode 100755 index 00000000..ff370c91 Binary files /dev/null and b/res/binding_icons/RD-Arrow-13.png differ diff --git a/res/binding_icons/RD-Arrow-14.png b/res/binding_icons/RD-Arrow-14.png new file mode 100755 index 00000000..8aef5d3a Binary files /dev/null and b/res/binding_icons/RD-Arrow-14.png differ diff --git a/res/binding_icons/RD-Arrow-15.png b/res/binding_icons/RD-Arrow-15.png new file mode 100755 index 00000000..e778831f Binary files /dev/null and b/res/binding_icons/RD-Arrow-15.png differ diff --git a/res/binding_icons/RD-Arrow-16.png b/res/binding_icons/RD-Arrow-16.png new file mode 100755 index 00000000..12a1e506 Binary files /dev/null and b/res/binding_icons/RD-Arrow-16.png differ diff --git a/res/binding_icons/RD-Arrow-17.png b/res/binding_icons/RD-Arrow-17.png new file mode 100755 index 00000000..636b43d2 Binary files /dev/null and b/res/binding_icons/RD-Arrow-17.png differ diff --git a/res/binding_icons/RD-Arrow-18.png b/res/binding_icons/RD-Arrow-18.png new file mode 100755 index 00000000..ae2584a5 Binary files /dev/null and b/res/binding_icons/RD-Arrow-18.png differ diff --git a/res/binding_icons/RD-Arrow-19.png b/res/binding_icons/RD-Arrow-19.png new file mode 100755 index 00000000..1cb8ff0c Binary files /dev/null and b/res/binding_icons/RD-Arrow-19.png differ diff --git a/res/binding_icons/RD-Arrow-20.png b/res/binding_icons/RD-Arrow-20.png new file mode 100755 index 00000000..ec7841f3 Binary files /dev/null and b/res/binding_icons/RD-Arrow-20.png differ diff --git a/res/binding_icons/RD-Arrow-21.png b/res/binding_icons/RD-Arrow-21.png new file mode 100755 index 00000000..953dd433 Binary files /dev/null and b/res/binding_icons/RD-Arrow-21.png differ diff --git a/res/binding_icons/RD-Arrow-22.png b/res/binding_icons/RD-Arrow-22.png new file mode 100755 index 00000000..84867637 Binary files /dev/null and b/res/binding_icons/RD-Arrow-22.png differ diff --git a/res/binding_icons/RD-Arrow-23.png b/res/binding_icons/RD-Arrow-23.png new file mode 100755 index 00000000..03428b31 Binary files /dev/null and b/res/binding_icons/RD-Arrow-23.png differ diff --git a/res/binding_icons/RD-Arrow-24.png b/res/binding_icons/RD-Arrow-24.png new file mode 100755 index 00000000..f357241f Binary files /dev/null and b/res/binding_icons/RD-Arrow-24.png differ diff --git a/res/binding_icons/RD-Arrow-25.png b/res/binding_icons/RD-Arrow-25.png new file mode 100755 index 00000000..171466d3 Binary files /dev/null and b/res/binding_icons/RD-Arrow-25.png differ diff --git a/res/binding_icons/RD-Arrow-26.png b/res/binding_icons/RD-Arrow-26.png new file mode 100755 index 00000000..0b919ddb Binary files /dev/null and b/res/binding_icons/RD-Arrow-26.png differ diff --git a/res/binding_icons/RD-Arrow-27.png b/res/binding_icons/RD-Arrow-27.png new file mode 100755 index 00000000..2d0b726c Binary files /dev/null and b/res/binding_icons/RD-Arrow-27.png differ diff --git a/res/binding_icons/RD-Arrow-28.png b/res/binding_icons/RD-Arrow-28.png new file mode 100755 index 00000000..94a4dc90 Binary files /dev/null and b/res/binding_icons/RD-Arrow-28.png differ diff --git a/res/binding_icons/RD-Arrow-29.png b/res/binding_icons/RD-Arrow-29.png new file mode 100755 index 00000000..48467360 Binary files /dev/null and b/res/binding_icons/RD-Arrow-29.png differ diff --git a/res/binding_icons/RD-Arrow-30.png b/res/binding_icons/RD-Arrow-30.png new file mode 100755 index 00000000..d424c374 Binary files /dev/null and b/res/binding_icons/RD-Arrow-30.png differ diff --git a/res/binding_icons/RD-Arrow-31.png b/res/binding_icons/RD-Arrow-31.png new file mode 100755 index 00000000..5add6c15 Binary files /dev/null and b/res/binding_icons/RD-Arrow-31.png differ diff --git a/res/binding_icons/RD-Arrow-32.png b/res/binding_icons/RD-Arrow-32.png new file mode 100755 index 00000000..1f7694c4 Binary files /dev/null and b/res/binding_icons/RD-Arrow-32.png differ diff --git a/res/binding_icons/RD-Arrow-33.png b/res/binding_icons/RD-Arrow-33.png new file mode 100755 index 00000000..09cbaffd Binary files /dev/null and b/res/binding_icons/RD-Arrow-33.png differ diff --git a/res/binding_icons/RD-Arrow-34.png b/res/binding_icons/RD-Arrow-34.png new file mode 100755 index 00000000..44bce1e3 Binary files /dev/null and b/res/binding_icons/RD-Arrow-34.png differ diff --git a/res/binding_icons/RD-Arrow-35.png b/res/binding_icons/RD-Arrow-35.png new file mode 100755 index 00000000..5561cb07 Binary files /dev/null and b/res/binding_icons/RD-Arrow-35.png differ diff --git a/res/binding_icons/RD-Arrow-36.png b/res/binding_icons/RD-Arrow-36.png new file mode 100755 index 00000000..4866476f Binary files /dev/null and b/res/binding_icons/RD-Arrow-36.png differ diff --git a/res/binding_icons/RD-Arrow-37.png b/res/binding_icons/RD-Arrow-37.png new file mode 100755 index 00000000..af35d422 Binary files /dev/null and b/res/binding_icons/RD-Arrow-37.png differ diff --git a/res/binding_icons/RD-ESC.png b/res/binding_icons/RD-ESC.png new file mode 100755 index 00000000..f25834ff Binary files /dev/null and b/res/binding_icons/RD-ESC.png differ diff --git a/res/binding_icons/RD-Enter.png b/res/binding_icons/RD-Enter.png new file mode 100755 index 00000000..22bbb9a8 Binary files /dev/null and b/res/binding_icons/RD-Enter.png differ diff --git a/res/binding_icons/RD-F1.png b/res/binding_icons/RD-F1.png new file mode 100755 index 00000000..bc221527 Binary files /dev/null and b/res/binding_icons/RD-F1.png differ diff --git a/res/binding_icons/RD-F4.png b/res/binding_icons/RD-F4.png new file mode 100755 index 00000000..c9bafb28 Binary files /dev/null and b/res/binding_icons/RD-F4.png differ diff --git a/res/binding_icons/RD-Tab.png b/res/binding_icons/RD-Tab.png new file mode 100755 index 00000000..2bce83e0 Binary files /dev/null and b/res/binding_icons/RD-Tab.png differ diff --git a/res/binding_icons/RD-applets-screenshooter.png b/res/binding_icons/RD-applets-screenshooter.png new file mode 100755 index 00000000..23b8e8e5 Binary files /dev/null and b/res/binding_icons/RD-applets-screenshooter.png differ diff --git a/res/binding_icons/RD-application-x-iso.png b/res/binding_icons/RD-application-x-iso.png new file mode 100755 index 00000000..cd7cb423 Binary files /dev/null and b/res/binding_icons/RD-application-x-iso.png differ diff --git a/res/binding_icons/RD-battery-full-charging.png b/res/binding_icons/RD-battery-full-charging.png new file mode 100755 index 00000000..c0558ae3 Binary files /dev/null and b/res/binding_icons/RD-battery-full-charging.png differ diff --git a/res/binding_icons/RD-battery-missing.png b/res/binding_icons/RD-battery-missing.png new file mode 100755 index 00000000..2953acb8 Binary files /dev/null and b/res/binding_icons/RD-battery-missing.png differ diff --git a/res/binding_icons/RD-camera-photo.png b/res/binding_icons/RD-camera-photo.png new file mode 100755 index 00000000..64c16ab1 Binary files /dev/null and b/res/binding_icons/RD-camera-photo.png differ diff --git a/res/binding_icons/RD-cemu.png b/res/binding_icons/RD-cemu.png new file mode 100755 index 00000000..94763938 Binary files /dev/null and b/res/binding_icons/RD-cemu.png differ diff --git a/res/binding_icons/RD-citra.png b/res/binding_icons/RD-citra.png new file mode 100755 index 00000000..2ab3004e Binary files /dev/null and b/res/binding_icons/RD-citra.png differ diff --git a/res/binding_icons/RD-distributor-logo-netbsd.png b/res/binding_icons/RD-distributor-logo-netbsd.png new file mode 100755 index 00000000..815a2445 Binary files /dev/null and b/res/binding_icons/RD-distributor-logo-netbsd.png differ diff --git a/res/binding_icons/RD-document-save.png b/res/binding_icons/RD-document-save.png new file mode 100755 index 00000000..b6980cbe Binary files /dev/null and b/res/binding_icons/RD-document-save.png differ diff --git a/res/binding_icons/RD-dolphin.png b/res/binding_icons/RD-dolphin.png new file mode 100755 index 00000000..510d0ef4 Binary files /dev/null and b/res/binding_icons/RD-dolphin.png differ diff --git a/res/binding_icons/RD-edit-find.png b/res/binding_icons/RD-edit-find.png new file mode 100755 index 00000000..2583ab21 Binary files /dev/null and b/res/binding_icons/RD-edit-find.png differ diff --git a/res/binding_icons/RD-edit-undo-red.png b/res/binding_icons/RD-edit-undo-red.png new file mode 100755 index 00000000..a766a96e Binary files /dev/null and b/res/binding_icons/RD-edit-undo-red.png differ diff --git a/res/binding_icons/RD-edit-undo.png b/res/binding_icons/RD-edit-undo.png new file mode 100755 index 00000000..b37a6529 Binary files /dev/null and b/res/binding_icons/RD-edit-undo.png differ diff --git a/res/binding_icons/RD-emblem-documents.png b/res/binding_icons/RD-emblem-documents.png new file mode 100755 index 00000000..2596501a Binary files /dev/null and b/res/binding_icons/RD-emblem-documents.png differ diff --git a/res/binding_icons/RD-emblem-downloads.png b/res/binding_icons/RD-emblem-downloads.png new file mode 100755 index 00000000..dde0658b Binary files /dev/null and b/res/binding_icons/RD-emblem-downloads.png differ diff --git a/res/binding_icons/RD-emblem-encrypted-locked.png b/res/binding_icons/RD-emblem-encrypted-locked.png new file mode 100755 index 00000000..1c1f7b51 Binary files /dev/null and b/res/binding_icons/RD-emblem-encrypted-locked.png differ diff --git a/res/binding_icons/RD-emblem-encrypted-unlocked.png b/res/binding_icons/RD-emblem-encrypted-unlocked.png new file mode 100755 index 00000000..20390ea4 Binary files /dev/null and b/res/binding_icons/RD-emblem-encrypted-unlocked.png differ diff --git a/res/binding_icons/RD-emblem-favorite.png b/res/binding_icons/RD-emblem-favorite.png new file mode 100755 index 00000000..a850c5b0 Binary files /dev/null and b/res/binding_icons/RD-emblem-favorite.png differ diff --git a/res/binding_icons/RD-emblem-generic.png b/res/binding_icons/RD-emblem-generic.png new file mode 100755 index 00000000..475bfcb7 Binary files /dev/null and b/res/binding_icons/RD-emblem-generic.png differ diff --git a/res/binding_icons/RD-emblem-new.png b/res/binding_icons/RD-emblem-new.png new file mode 100755 index 00000000..f0d59167 Binary files /dev/null and b/res/binding_icons/RD-emblem-new.png differ diff --git a/res/binding_icons/RD-emblem-synchronizing.png b/res/binding_icons/RD-emblem-synchronizing.png new file mode 100755 index 00000000..812ac184 Binary files /dev/null and b/res/binding_icons/RD-emblem-synchronizing.png differ diff --git a/res/binding_icons/RD-emblem-unlocked.png b/res/binding_icons/RD-emblem-unlocked.png new file mode 100755 index 00000000..5332ef8b Binary files /dev/null and b/res/binding_icons/RD-emblem-unlocked.png differ diff --git a/res/binding_icons/RD-emblem-unreadable.png b/res/binding_icons/RD-emblem-unreadable.png new file mode 100755 index 00000000..0cd3cdfe Binary files /dev/null and b/res/binding_icons/RD-emblem-unreadable.png differ diff --git a/res/binding_icons/RD-folder-applications.png b/res/binding_icons/RD-folder-applications.png new file mode 100755 index 00000000..0e1215e1 Binary files /dev/null and b/res/binding_icons/RD-folder-applications.png differ diff --git a/res/binding_icons/RD-folder-blue-backup.png b/res/binding_icons/RD-folder-blue-backup.png new file mode 100755 index 00000000..f173f08a Binary files /dev/null and b/res/binding_icons/RD-folder-blue-backup.png differ diff --git a/res/binding_icons/RD-folder-blue-games.png b/res/binding_icons/RD-folder-blue-games.png new file mode 100755 index 00000000..67507a69 Binary files /dev/null and b/res/binding_icons/RD-folder-blue-games.png differ diff --git a/res/binding_icons/RD-go-next.png b/res/binding_icons/RD-go-next.png new file mode 100755 index 00000000..279b8b2e Binary files /dev/null and b/res/binding_icons/RD-go-next.png differ diff --git a/res/binding_icons/RD-go-previous.png b/res/binding_icons/RD-go-previous.png new file mode 100755 index 00000000..a00cabc0 Binary files /dev/null and b/res/binding_icons/RD-go-previous.png differ diff --git a/res/binding_icons/RD-godot.png b/res/binding_icons/RD-godot.png new file mode 100755 index 00000000..d29092b3 Binary files /dev/null and b/res/binding_icons/RD-godot.png differ diff --git a/res/binding_icons/RD-gzdoom.png b/res/binding_icons/RD-gzdoom.png new file mode 100755 index 00000000..51fdb052 Binary files /dev/null and b/res/binding_icons/RD-gzdoom.png differ diff --git a/res/binding_icons/RD-icon_circle_2_180x180.png b/res/binding_icons/RD-icon_circle_2_180x180.png new file mode 100755 index 00000000..bab446bb Binary files /dev/null and b/res/binding_icons/RD-icon_circle_2_180x180.png differ diff --git a/res/binding_icons/RD-io.github.antimicrox.antimicrox.png b/res/binding_icons/RD-io.github.antimicrox.antimicrox.png new file mode 100755 index 00000000..a961b0b6 Binary files /dev/null and b/res/binding_icons/RD-io.github.antimicrox.antimicrox.png differ diff --git a/res/binding_icons/RD-list-add.png b/res/binding_icons/RD-list-add.png new file mode 100755 index 00000000..fa48ad3b Binary files /dev/null and b/res/binding_icons/RD-list-add.png differ diff --git a/res/binding_icons/RD-list-remove.png b/res/binding_icons/RD-list-remove.png new file mode 100755 index 00000000..724e8514 Binary files /dev/null and b/res/binding_icons/RD-list-remove.png differ diff --git a/res/binding_icons/RD-mame.png b/res/binding_icons/RD-mame.png new file mode 100755 index 00000000..b6c7d1f0 Binary files /dev/null and b/res/binding_icons/RD-mame.png differ diff --git a/res/binding_icons/RD-media-playback-pause.png b/res/binding_icons/RD-media-playback-pause.png new file mode 100755 index 00000000..3480a713 Binary files /dev/null and b/res/binding_icons/RD-media-playback-pause.png differ diff --git a/res/binding_icons/RD-media-playback-start.png b/res/binding_icons/RD-media-playback-start.png new file mode 100755 index 00000000..375801a7 Binary files /dev/null and b/res/binding_icons/RD-media-playback-start.png differ diff --git a/res/binding_icons/RD-melonds.png b/res/binding_icons/RD-melonds.png new file mode 100755 index 00000000..e351ffb3 Binary files /dev/null and b/res/binding_icons/RD-melonds.png differ diff --git a/res/binding_icons/RD-notification-network-ethernet-connected.png b/res/binding_icons/RD-notification-network-ethernet-connected.png new file mode 100755 index 00000000..f61f11d0 Binary files /dev/null and b/res/binding_icons/RD-notification-network-ethernet-connected.png differ diff --git a/res/binding_icons/RD-notification-network-wireless.png b/res/binding_icons/RD-notification-network-wireless.png new file mode 100755 index 00000000..7bc8975e Binary files /dev/null and b/res/binding_icons/RD-notification-network-wireless.png differ diff --git a/res/binding_icons/RD-octopi.png b/res/binding_icons/RD-octopi.png new file mode 100755 index 00000000..746c1bb9 Binary files /dev/null and b/res/binding_icons/RD-octopi.png differ diff --git a/res/binding_icons/RD-org.xfce.session.png b/res/binding_icons/RD-org.xfce.session.png new file mode 100755 index 00000000..1b5febd8 Binary files /dev/null and b/res/binding_icons/RD-org.xfce.session.png differ diff --git a/res/binding_icons/RD-pcsx2.png b/res/binding_icons/RD-pcsx2.png new file mode 100755 index 00000000..7df1c994 Binary files /dev/null and b/res/binding_icons/RD-pcsx2.png differ diff --git a/res/binding_icons/RD-pcsxr-icon.png b/res/binding_icons/RD-pcsxr-icon.png new file mode 100755 index 00000000..118e83b4 Binary files /dev/null and b/res/binding_icons/RD-pcsxr-icon.png differ diff --git a/res/binding_icons/RD-playonlinux.png b/res/binding_icons/RD-playonlinux.png new file mode 100755 index 00000000..e7b383ab Binary files /dev/null and b/res/binding_icons/RD-playonlinux.png differ diff --git a/res/binding_icons/RD-ppsspp.png b/res/binding_icons/RD-ppsspp.png new file mode 100755 index 00000000..f2bc6cfd Binary files /dev/null and b/res/binding_icons/RD-ppsspp.png differ diff --git a/res/binding_icons/RD-preferences-desktop-accessibility.png b/res/binding_icons/RD-preferences-desktop-accessibility.png new file mode 100755 index 00000000..577cd803 Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-accessibility.png differ diff --git a/res/binding_icons/RD-preferences-desktop-display.png b/res/binding_icons/RD-preferences-desktop-display.png new file mode 100755 index 00000000..218908f2 Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-display.png differ diff --git a/res/binding_icons/RD-preferences-desktop-emoticons.png b/res/binding_icons/RD-preferences-desktop-emoticons.png new file mode 100755 index 00000000..279d8c1a Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-emoticons.png differ diff --git a/res/binding_icons/RD-preferences-desktop-icons.png b/res/binding_icons/RD-preferences-desktop-icons.png new file mode 100755 index 00000000..c6727a37 Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-icons.png differ diff --git a/res/binding_icons/RD-preferences-desktop-keyboard.png b/res/binding_icons/RD-preferences-desktop-keyboard.png new file mode 100755 index 00000000..2403518f Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-keyboard.png differ diff --git a/res/binding_icons/RD-preferences-system-search.png b/res/binding_icons/RD-preferences-system-search.png new file mode 100755 index 00000000..e7c60acb Binary files /dev/null and b/res/binding_icons/RD-preferences-system-search.png differ diff --git a/res/binding_icons/RD-preferences-system-windows-actions.png b/res/binding_icons/RD-preferences-system-windows-actions.png new file mode 100755 index 00000000..f4dd7342 Binary files /dev/null and b/res/binding_icons/RD-preferences-system-windows-actions.png differ diff --git a/res/binding_icons/RD-preferences-tweaks-shadows.png b/res/binding_icons/RD-preferences-tweaks-shadows.png new file mode 100755 index 00000000..9966c413 Binary files /dev/null and b/res/binding_icons/RD-preferences-tweaks-shadows.png differ diff --git a/res/binding_icons/RD-process-stop.png b/res/binding_icons/RD-process-stop.png new file mode 100755 index 00000000..d827b134 Binary files /dev/null and b/res/binding_icons/RD-process-stop.png differ diff --git a/res/binding_icons/RD-pvz.png b/res/binding_icons/RD-pvz.png new file mode 100755 index 00000000..2c64757d Binary files /dev/null and b/res/binding_icons/RD-pvz.png differ diff --git a/res/binding_icons/RD-retroarch.png b/res/binding_icons/RD-retroarch.png new file mode 100755 index 00000000..684f8f20 Binary files /dev/null and b/res/binding_icons/RD-retroarch.png differ diff --git a/res/binding_icons/RD-retrodeck-compact.png b/res/binding_icons/RD-retrodeck-compact.png new file mode 100755 index 00000000..8ad3624d Binary files /dev/null and b/res/binding_icons/RD-retrodeck-compact.png differ diff --git a/res/binding_icons/RD-rpcs3.png b/res/binding_icons/RD-rpcs3.png new file mode 100755 index 00000000..d7580360 Binary files /dev/null and b/res/binding_icons/RD-rpcs3.png differ diff --git a/res/binding_icons/RD-ryujinx.png b/res/binding_icons/RD-ryujinx.png new file mode 100755 index 00000000..1e3a15f6 Binary files /dev/null and b/res/binding_icons/RD-ryujinx.png differ diff --git a/res/binding_icons/RD-security-low.png b/res/binding_icons/RD-security-low.png new file mode 100755 index 00000000..fd686adb Binary files /dev/null and b/res/binding_icons/RD-security-low.png differ diff --git a/res/binding_icons/RD-steam.png b/res/binding_icons/RD-steam.png new file mode 100755 index 00000000..c0dc9b16 Binary files /dev/null and b/res/binding_icons/RD-steam.png differ diff --git a/res/binding_icons/RD-supertuxkart.png b/res/binding_icons/RD-supertuxkart.png new file mode 100755 index 00000000..417e433d Binary files /dev/null and b/res/binding_icons/RD-supertuxkart.png differ diff --git a/res/binding_icons/RD-system-reboot.png b/res/binding_icons/RD-system-reboot.png new file mode 100755 index 00000000..f3d4b35f Binary files /dev/null and b/res/binding_icons/RD-system-reboot.png differ diff --git a/res/binding_icons/RD-system-switch-user.png b/res/binding_icons/RD-system-switch-user.png new file mode 100755 index 00000000..82d0ecac Binary files /dev/null and b/res/binding_icons/RD-system-switch-user.png differ diff --git a/res/binding_icons/RD-tesseract.png b/res/binding_icons/RD-tesseract.png new file mode 100755 index 00000000..72ccbb57 Binary files /dev/null and b/res/binding_icons/RD-tesseract.png differ diff --git a/res/binding_icons/RD-text-x-generic.png b/res/binding_icons/RD-text-x-generic.png new file mode 100755 index 00000000..58b0fc31 Binary files /dev/null and b/res/binding_icons/RD-text-x-generic.png differ diff --git a/res/binding_icons/RD-tools-check-spelling.png b/res/binding_icons/RD-tools-check-spelling.png new file mode 100755 index 00000000..4d717891 Binary files /dev/null and b/res/binding_icons/RD-tools-check-spelling.png differ diff --git a/res/binding_icons/RD-urbanterror.png b/res/binding_icons/RD-urbanterror.png new file mode 100755 index 00000000..4efb05aa Binary files /dev/null and b/res/binding_icons/RD-urbanterror.png differ diff --git a/res/binding_icons/RD-user-red-home.png b/res/binding_icons/RD-user-red-home.png new file mode 100755 index 00000000..bf924158 Binary files /dev/null and b/res/binding_icons/RD-user-red-home.png differ diff --git a/res/binding_icons/RD-utilities-terminal.png b/res/binding_icons/RD-utilities-terminal.png new file mode 100755 index 00000000..c19c8d16 Binary files /dev/null and b/res/binding_icons/RD-utilities-terminal.png differ diff --git a/res/binding_icons/RD-vcmi.png b/res/binding_icons/RD-vcmi.png new file mode 100755 index 00000000..bbc4cd4f Binary files /dev/null and b/res/binding_icons/RD-vcmi.png differ diff --git a/res/binding_icons/RD-video-x-generic.png b/res/binding_icons/RD-video-x-generic.png new file mode 100755 index 00000000..5b772904 Binary files /dev/null and b/res/binding_icons/RD-video-x-generic.png differ diff --git a/res/binding_icons/RD-view-refresh.png b/res/binding_icons/RD-view-refresh.png new file mode 100755 index 00000000..69eaf39c Binary files /dev/null and b/res/binding_icons/RD-view-refresh.png differ diff --git a/res/binding_icons/RD-xemu.png b/res/binding_icons/RD-xemu.png new file mode 100755 index 00000000..fb949e27 Binary files /dev/null and b/res/binding_icons/RD-xemu.png differ diff --git a/res/binding_icons/RD-zoom-fit-best.png b/res/binding_icons/RD-zoom-fit-best.png new file mode 100755 index 00000000..f8d1744b Binary files /dev/null and b/res/binding_icons/RD-zoom-fit-best.png differ diff --git a/res/binding_icons/RD-zoom-in.png b/res/binding_icons/RD-zoom-in.png new file mode 100755 index 00000000..6860adeb Binary files /dev/null and b/res/binding_icons/RD-zoom-in.png differ diff --git a/res/binding_icons/RD-zoom-original.png b/res/binding_icons/RD-zoom-original.png new file mode 100755 index 00000000..1be8ca80 Binary files /dev/null and b/res/binding_icons/RD-zoom-original.png differ diff --git a/res/binding_icons/RD-zoom-out.png b/res/binding_icons/RD-zoom-out.png new file mode 100755 index 00000000..fe98a7fd Binary files /dev/null and b/res/binding_icons/RD-zoom-out.png differ diff --git a/res/extra-splashes/example-splash.svg b/res/extra_splashes/example-splash.svg similarity index 100% rename from res/extra-splashes/example-splash.svg rename to res/extra_splashes/example-splash.svg diff --git a/res/extra_splashes/japanese-retoro-dekku.svg b/res/extra_splashes/japanese-retoro-dekku.svg new file mode 100755 index 00000000..af152d5d --- /dev/null +++ b/res/extra_splashes/japanese-retoro-dekku.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + テイキョウ: + + + + レトロ + ック + + + + + + + + diff --git a/res/icon.afphoto b/res/icon.afphoto new file mode 100644 index 00000000..c47c30a2 Binary files /dev/null and b/res/icon.afphoto differ diff --git a/res/icon_alt.afphoto b/res/icon_alt.afphoto new file mode 100644 index 00000000..5f6d7bfb Binary files /dev/null and b/res/icon_alt.afphoto differ diff --git a/res/logo_cooker_Final.afphoto b/res/logo_cooker_Final.afphoto new file mode 100644 index 00000000..55c97ace Binary files /dev/null and b/res/logo_cooker_Final.afphoto differ diff --git a/res/logo_stacked_merged.afphoto b/res/logo_stacked_merged.afphoto new file mode 100644 index 00000000..0f9d928e Binary files /dev/null and b/res/logo_stacked_merged.afphoto differ diff --git a/res/logo_stacked_merged.svg b/res/logo_stacked_merged.svg new file mode 100644 index 00000000..72c87db0 --- /dev/null +++ b/res/logo_stacked_merged.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/res/logo_unstacked.afphoto b/res/logo_unstacked.afphoto new file mode 100644 index 00000000..98ae1923 Binary files /dev/null and b/res/logo_unstacked.afphoto differ diff --git a/retrodeck.sh b/retrodeck.sh index c7447ccb..763229c5 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -1,7 +1,6 @@ #!/bin/bash source /app/libexec/global.sh -source /app/libexec/post_update.sh # Arguments section @@ -49,7 +48,11 @@ https://retrodeck.net ;; --configurator*) sh /app/tools/configurator.sh - exit + if [[ $(configurator_generic_question_dialog "RetroDECK Configurator" "Would you like to launch RetroDECK after closing the Configurator?") == "false" ]]; then + exit + else + shift + fi ;; --reset-emulator*) echo "You are about to reset one or more RetroDECK emulators." @@ -98,31 +101,40 @@ done # UPDATE TRIGGERED # if lockfile exists -if [ -f "$lockfile" ] -then +if [ -f "$lockfile" ]; then # ...but the version doesn't match with the config file - if [ "$hard_version" != "$version" ]; - then + if [ "$hard_version" != "$version" ]; then echo "Config file's version is $version but the actual version is $hard_version" if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build + configurator_generic_dialog "RetroDECK Cooker Warning" "RUNNING COOKER VERSIONS OF RETRODECK CAN BE EXTREMELY DANGEROUS AND ALL OF YOUR RETRODECK DATA\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\nARE AT RISK BY CONTINUING!" + set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" cooker_base_version=$(echo $hard_version | cut -d'-' -f2) - update_ignore=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') - set_setting_value $rd_conf "update_ignore" "$update_ignore" retrodeck "options" # Store the latest online version to ignore for future checks, as internal version and online tag version may not match up. - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Fresh Install" \ + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Full Wipe and Fresh Install" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Cooker Upgrade" \ - --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK data to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.") + --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK folders and data (including ROMs and saves) to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.") rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked if [[ $choice == "Don't Upgrade" ]]; then # If user wants to bypass the post_update.sh process this time. echo "Skipping upgrade process for cooker build, updating stored version in retrodeck.cfg" set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg - elif [[ $choice == "Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install - echo "Removing RetroDECK data and starting fresh" - rm -rf /var - rm -rf "$HOME/retrodeck" - source /app/libexec/global.sh - finit + elif [[ $choice == "Full Wipe and Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "This is going to remove all of the data in all locations used by RetroDECK!\n\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\n\nAre you sure you want to contine?") == "true" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "Are you super sure?\n\nThere is no going back from this process, everything is gonzo.\nDust in the wind.\n\nYesterdays omelette.") == "true" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "But are you super DUPER sure? We REAAAALLLLLYY want to make sure you know what is happening here.\n\nThe ~/retrodeck and ~/.var/app/net.retrodeck.retrodeck folders and ALL of their contents\nare about to be PERMANENTLY removed.\n\nStill sure you want to proceed?") == "true" ]]; then + configurator_generic_dialog "RetroDECK Cooker Reset" "Ok, if you're that sure, here we go!" + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "(Are you actually being serious here? Because we are...\n\nNo backsies.)") == "true" ]]; then + echo "Removing RetroDECK data and starting fresh" + rm -rf /var + rm -rf "$HOME/retrodeck" + source /app/libexec/global.sh + finit + fi + fi + fi + fi fi else echo "Performing normal upgrade process for version" $cooker_base_version @@ -131,9 +143,12 @@ then fi else # If newly-installed version is a normal build. if grep -qF "cooker" <<< $version; then # If previously installed version was a cooker build + cooker_base_version=$(echo $version | cut -d'-' -f2) + version=$cooker_base_version # Temporarily assign cooker base version to $version so update script can read it properly. set_setting_value $rd_conf "update_repo" "RetroDECK" retrodeck "options" set_setting_value $rd_conf "update_check" "false" retrodeck "options" set_setting_value $rd_conf "update_ignore" "" retrodeck "options" + set_setting_value $rd_conf "developer_options" "false" retrodeck "options" fi post_update # Executing post update script fi @@ -142,25 +157,23 @@ then # if the lock file doesn't exist at all means that it's a fresh install or a triggered reset else echo "Lockfile not found" - if [[ $(check_network_connectivity) == "true" ]]; then - finit # Executing First/Force init - else - configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe initial RetroDECK setup requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available." - exit 1 - fi + finit # Executing First/Force init fi if [[ $multi_user_mode == "true" ]]; then multi_user_determine_current_user fi -# Check if running in Desktop mode and warn if true, unless desktop_mode_warning=false in retrodeck.cfg +# Run optional startup checks desktop_mode_warning +low_space_warning # Check if there is a new version of RetroDECK available, if update_check=true in retrodeck.cfg and there is network connectivity available. -if [[ $(check_network_connectivity) == "true" ]] && [[ $update_check == "true" ]]; then - check_for_version_update +if [[ $update_check == "true" ]]; then + if [[ $(check_network_connectivity) == "true" ]]; then + check_for_version_update + fi fi # Normal Startup diff --git a/tools/Lutris/__pycache__/shortcut.cpython-310.pyc b/tools/Lutris/__pycache__/shortcut.cpython-310.pyc new file mode 100644 index 00000000..0b8cfb8d Binary files /dev/null and b/tools/Lutris/__pycache__/shortcut.cpython-310.pyc differ diff --git a/tools/Lutris/shortcut.py b/tools/Lutris/shortcut.py new file mode 100644 index 00000000..0d488713 --- /dev/null +++ b/tools/Lutris/shortcut.py @@ -0,0 +1,434 @@ +"""Sync RetroDECK favorites games with steam shortcuts""" +import binascii +import os +import re +import shlex +import shutil +import glob +import vdf +import sys + +import xml.etree.ElementTree as ET + +command_list_default={ +"3do": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/opera_libretro.so", +"amiga": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"amiga1200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"amiga600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"amigacd32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"amstradcpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so", +"arcade": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"arduboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/arduous_libretro.so", +"astrocde": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"atari2600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so", +"atari5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so", +"atari7800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prosystem_libretro.so", +"atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so", +"atarijaguar": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so", +"atarijaguarcd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so", +"atarilynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so", +"atarist": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/hatari_libretro.so", +"atarixe": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so", +"atomiswave": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so", +"c64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so", +"cavestory": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nxengine_libretro.so", +"cdimono1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so", +"cdtv": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"chailove": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/chailove_libretro.so", +"channelf": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freechaf_libretro.so", +"colecovision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"cps": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"cps1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"cps2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"cps3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"doom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so", +"dos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so", +"dreamcast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so", +"easyrpg": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/easyrpg_libretro.so", +"famicom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so", +"fba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so", +"fbneo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so", +"fds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so", +"gameandwatch": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so", +"gamegear": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"gb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so", +"gba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so", +"gbc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so", +"genesis": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"gx4000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so", +"intellivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freeintv_libretro.so", +"j2me": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/squirreljme_libretro.so", +"lcdgames": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so", +"lutro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/lutro_libretro.so", +"mame": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"mastersystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"megacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"megacdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"megadrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"megaduck": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameduck_libretro.so", +"mess": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mess2015_libretro.so", +"model2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"moto": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so", +"msx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"msx1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"msx2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"msxturbor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"multivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so", +"n64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so", +"n64dd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so", +"naomi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so", +"naomigd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so", +"nds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so", +"neogeo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so", +"neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so", +"neogeocdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so", +"nes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so", +"ngp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so", +"ngpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so", +"odyssey2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so", +"palm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mu_libretro.so", +"pc88": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quasi88_libretro.so", +"pc98": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so", +"pcengine": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so", +"pcenginecd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so", +"pcfx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pcfx_libretro.so", +"pokemini": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pokemini_libretro.so", +"psx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so", +"quake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so", +"satellaview": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so", +"saturnjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so", +"scummvm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/scummvm_libretro.so", +"sega32x": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so", +"sega32xjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so", +"sega32xna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so", +"segacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"sfc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"sg-1000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"sgb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so", +"snes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"snesna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"spectravideo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"sufami": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"supergrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so", +"supervision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/potator_libretro.so", +"tg16": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so", +"tg-cd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so", +"tic80": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tic80_libretro.so", +"to8": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so", +"uzebox": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/uzem_libretro.so", +"vectrex": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vecx_libretro.so", +"vic20": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xvic_libretro.so", +"videopac": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so", +"virtualboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_vb_libretro.so", +"wasm4": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/wasm4_libretro.so", +"wonderswan": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so", +"wonderswancolor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so", +"x1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/x1_libretro.so", +"x68000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/px68k_libretro.so", +"zx81": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/81_libretro.so", +"zxspectrum": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fuse_libretro.so", +"switch": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g", +"n3ds": "flatpak run --command=citra net.retrodeck.retrodeck", +"ps2": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch", +"wiiu": "flatpak run --command=Cemu-wrapper net.retrodeck.retrodeck -g", +"gc": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e", +"wii": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e", +"xbox": "flatpak run --command=xemu net.retrodeck.retrodeck -dvd_path", +"ps3": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui", +"psp": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck", +"pico8": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run" +} + +alt_command_list={ +"PUAE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so", +"Caprice32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so", +"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"Stella": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so", +"a5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so", +"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so", +"Handy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so", +"VICE x64sc Accurate": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so", +"SAME CDi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so", +"blueMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so", +"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so", +"PrBoom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so", +"DOSBox-Pure": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so", +"Mesen": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so", +"Genesis Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so", +"Gamebatte": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so", +"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so", +"ParaLLEI N64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so", +"DeSmuME": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so", +"NeoCD": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so", +"Beetle NeoPop": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so", +"Neko Project II Kai": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so", +"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so", +"Swanstation": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so", +"TyrQuake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so", +"Beetle Saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so", +"Snes 9x - Current": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so", +"Beetle SuperGrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so", +"Yuzu (Standalone)": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g", +"Citra (Standalone)": "flatpak run --command=citra net.retrodeck.retrodeck", +"PCSX2 (Standalone)": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch", +"Dolphin (Standalone)": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e", +"RPCS3 Directory (Standalone)": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui", +"PPSSPP (Standalone)": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck", +"PICO-8 (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run", +"PUAE 2021": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae2021_libretro.so", +"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so", +"CPCemu (Standalone)": "NYI", #NYI +"MAME 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2010_libretro.so", +"MAME 2003-Plus": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2003_plus_libretro.so", +"MAME 2000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2000_libretro.so", +"MAME (Standalone)": "NYI", #NYI +"FinalBurn Neo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so", +"FinalBurn Neo (Standalone)": "NYI", #NYI +"FB Alpha 2012": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so", +"Flycast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so", +"Flycast (Standalone)": "NYI", #NYI +"Kronos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/kronos_libretro.so", +"Supermodel (Standalone)": "NYI", #NYI +"Supermodel [Fullscreen] (Standalone)": "NYI", #NYI +"Shortcut or script": "TODO: I have to catch how it works", #TODO +"Atari800 (Standalone)": "NYI", #NYI +"Stella 2014": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella2014_libretro.so", +"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so", +"Beetle Lynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_lynx_libretro.so", +"VICE x64 Fast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64_libretro.so", +"VICE x64 SuperCPU": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xscpu64_libretro.so", +"VICE x128": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x128_libretro.so", +"Frodo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/frodo_libretro.so", +"CDi 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cdi2015_libretro.so", +"Gearcoleco": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearcoleco_libretro.so", +"FB Alpha 2012 CPS-1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps1_libretro.so", +"FB Alpha 2012 CPS-2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps2_libretro.so", +"FB Alpha 2012 CPS-3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps3_libretro.so", +"Boom 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro.so", +"Boom 3 xp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro_xp.so", +"DOSBox-Core": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_core_libretro.so", +"DOSBox-SVN": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_svn_libretro.so", +"Keep ES-DE running": "TODO: I have to catch how it works", #TODO +"AppImage (Suspend ES-DE)": "TODO: I have to catch how it works", #TODO +"AppImage (Keep ES-DE running)": "TODO: I have to catch how it works", #TODO +"Nestopia UE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nestopia_libretro.so", +"FCEUmm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fceumm_libretro.so", +"QuickNES": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quicknes_libretro.so", +"Genesis Plus GX Wide": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_wide_libretro.so", +"Gearsystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so", +"SMS Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/smsplus_libretro.so", +"SameBoy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameboy_libretro.so", +"Gearboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearboy_libretro.so", +"TGB Dual": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tgbdual_libretro.so", +"Mesen-S": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so", +"VBA-M": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vbam_libretro.so", +"bsnes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_libretro.so", +"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so", +"VBA Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vba_next_libretro.so", +"gpSP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gpsp_libretro.so", +"Dolphin": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dolphin_libretro.so", +"PrimeHack (Standalone)": "flatpak run --command=primehack-wrapper net.retrodeck.retrodeck -b -e", +"PicoDrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so", +"BlastEm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/blastem_libretro.so", +"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so", +"fMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fmsx_libretro.so", +"Citra": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra_libretro.so", +"Citra 2018": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra2018_libretro.so", +"Mupen64Plus-Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so", +"DeSmuME 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume2015_libretro.so", +"melonDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/melonds_libretro.so", +"melonDS (Standalone)": "flatpak run --command=melonDS net.retrodeck.retrodeck", +"FinalBurn Neo neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck --subsystem neocd -L /var/config/retroarch/cores/fbneo_libretro.so", +"RACE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/race_libretro.so", +"Neko Project II": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nekop2_libretro.so", +"Beetle PCE FAST": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_fast_libretro.so", +"PICO-8 Splore (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -splore", +"AppImage": "TODO: I have to catch how it works", #TODO +"LRPS2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so", +"PCSX2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so", +"RPCS3 Shortcut (Standalone)": "TODO: I have to catch how it works", #TODO +"PPSSPP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/ppsspp_libretro.so", +"Beetle PSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_libretro.so", +"Beetle PSX HW": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_hw_libretro.so", +"PCSX ReARMed": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx_rearmed_libretro.so", +"DuckStation (Standalone)": "flatpak run --command=duckstation-qt net.retrodeck.retrodeck -batch", +"vitaQuake 2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2_libretro.so", +"vitaQuake 2 [Rogue]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-rogue_libretro.so", +"vitaQuake 2 [Xatrix]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-xatrix_libretro.so", +"vitaQuake 2 [Zaero]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-zaero_libretro.so", +"vitaQuake 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake3_libretro.so", +"YabaSanshiro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabasanshiro_libretro.so", +"Yabause": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabause_libretro.so", +"Snes9x 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x2010_libretro.so", +"bsnes-hd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_hd_beta_libretro.so", +"bsnes-mercury Accuracy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_mercury_accuracy_libretro.so", +"Beetle Supafaust": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supafaust_libretro.so", +"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so" +} + +STEAM_DATA_DIRS = ( + "~/.steam/debian-installation", + "~/.steam", + "~/.local/share/steam", + "~/.local/share/Steam", + "~/.steam/steam", + "~/.var/app/com.valvesoftware.Steam/data/steam", + "/usr/share/steam", + "/usr/local/share/steam", +) + +def create_shortcut(games, launch_config_name=None): + shortcut_path = get_shortcuts_vdf_path() + if os.path.exists(shortcut_path): + with open(shortcut_path, "rb") as shortcut_file: + shortcuts = vdf.binary_loads(shortcut_file.read())['shortcuts'].values() + else: + shortcuts = [] + + old_shortcuts=[] + for shortcut in shortcuts: + if "net.retrodeck.retrodeck" in shortcut["Exe"]: + keep=False + for game in games: + gameid=generate_shortcut_id(game[0]) + if gameid==shortcut["appid"]: + shortcut["Exe"]=game[1] + game[0]="###" + keep=True + break + if keep: + old_shortcuts.append(shortcut) + else: + old_shortcuts.append(shortcut) + + new_shortcuts=[] + for game in games: + if not game[0]=="###": + new_shortcuts=new_shortcuts+[generate_shortcut(game, launch_config_name)] + + shortcuts = list(old_shortcuts) + list(new_shortcuts) + + updated_shortcuts = { + 'shortcuts': { + str(index): elem for index, elem in enumerate(shortcuts) + } + } + with open(shortcut_path, "wb") as shortcut_file: + shortcut_file.write(vdf.binary_dumps(updated_shortcuts)) + +def get_config_path(): + config_paths = search_recursive_in_steam_dirs("userdata/**/config/") + if not config_paths: + return None + return config_paths[0] + +def get_shortcuts_vdf_path(): + config_path = get_config_path() + if not config_path: + return None + return os.path.join(config_path, "shortcuts.vdf") + +def search_recursive_in_steam_dirs(path_suffix): + """Perform a recursive search based on glob and returns a + list of hits""" + results = [] + for candidate in STEAM_DATA_DIRS: + glob_path = os.path.join(os.path.expanduser(candidate), path_suffix) + for path in glob.glob(glob_path): + results.append(path) + return results + +def generate_shortcut(game, launch_config_name): + return { + 'appid': generate_shortcut_id(game[0]), + 'appname': f'{game[0]}', + 'Exe': f'{game[1]}', + 'StartDir': f'{os.path.expanduser("~")}', + 'icon': "", + 'LaunchOptions': "", + 'IsHidden': 0, + 'AllowDesktopConfig': 1, + 'AllowOverlay': 1, + 'OpenVR': 0, + 'Devkit': 0, + 'DevkitOverrideAppID': 0, + 'LastPlayTime': 0, + } + +def generate_preliminary_id(name): + unique_id = ''.join(["RetroDECK", name]) + top = binascii.crc32(str.encode(unique_id, 'utf-8')) | 0x80000000 + return (top << 32) | 0x02000000 + +def generate_shortcut_id(name): + return (generate_preliminary_id(name) >> 32) - 0x100000000 + +def addToSteam(): + print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"))) + + fl=open(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"),"r") + lines=fl.readlines() + for line in lines: + if "rdhome" in line: + rdhome=line[7:-1] + elif "roms_folder" in line: + roms_folder=line[12:-1] + fl.close() + games=[] + + command_list_default["pico8"]=command_list_default["pico8"].replace("{GAMEDIR}",roms_folder+"/pico8") + alt_command_list["PICO-8 Splore (Standalone)"]=alt_command_list["PICO-8 Splore (Standalone)"].replace("{GAMEDIR}",roms_folder+"/pico8") + + for system in os.listdir(rdhome+"/gamelists/"): + print("Start parsing system: {}".format(system)) + + f=open(rdhome+"/gamelists/"+system+"/gamelist.xml","r") + f.readline() + parser=ET.XMLParser() + parser.feed(b'') + parser.feed(f.read()) + parser.feed(b'') + root=parser.close() + f.close() + + globalAltEmu="" + for subroot in root: + if subroot.tag=="alternativeEmulator": + for alt in subroot: + globalAltEmu=alt.text + else: + for game in subroot: + path="" + name="" + favorite="" + altemulator=globalAltEmu + for tag in game: + if tag.tag=="path": + path=tag.text + elif tag.tag=="name": + name=tag.text + elif tag.tag=="favorite": + favorite=tag.text + elif tag.tag=="altemulator": + altemulator=tag.text + + if favorite=="true" and altemulator=="": + print("Find favorite game: {}".format(name)) + games.append([name,command_list_default[system]+" '"+roms_folder+"/"+system+path[1:]+"'"]) + elif favorite=="true": + print("Find favorite game with alternative emulator: {}, {}".format(name,altemulator)) + if ("neogeocd" in system) and altemulator=="FinalBurn Neo": + games.append([name,alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'"]) + print(alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'") + elif system=="pico8" and altemulator=="PICO-8 Splore (Standalone)": + games.append([name,alt_command_list[altemulator]]) + print(alt_command_list[altemulator]) + else: + games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"]) + print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'") + + create_shortcut(games) + +if __name__=="__main__": + addToSteam() diff --git a/tools/Lutris/vdf/__init__.py b/tools/Lutris/vdf/__init__.py new file mode 100644 index 00000000..6e7f136b --- /dev/null +++ b/tools/Lutris/vdf/__init__.py @@ -0,0 +1,467 @@ +""" +Module for deserializing/serializing to and from VDF + +https://github.com/ValvePython/vdf + +MIT License +""" +# pylint: disable=raise-missing-from + +__version__ = "3.2" +__author__ = "Rossen Georgiev" + +import re +import struct +from binascii import crc32 +from io import StringIO as unicodeIO + +string_type = str +int_type = int +BOMS = '\ufffe\ufeff' + + +def strip_bom(line): + return line.lstrip(BOMS) + + +# string escaping +_unescape_char_map = { + r"\n": "\n", + r"\t": "\t", + r"\v": "\v", + r"\b": "\b", + r"\r": "\r", + r"\f": "\f", + r"\a": "\a", + r"\\": "\\", + r"\?": "?", + r"\"": "\"", + r"\'": "\'", +} +_escape_char_map = {v: k for k, v in _unescape_char_map.items()} + + +def _re_escape_match(m): + return _escape_char_map[m.group()] + + +def _re_unescape_match(m): + return _unescape_char_map[m.group()] + + +def _escape(text): + return re.sub(r"[\n\t\v\b\r\f\a\\\?\"']", _re_escape_match, text) + + +def _unescape(text): + return re.sub(r"(\\n|\\t|\\v|\\b|\\r|\\f|\\a|\\\\|\\\?|\\\"|\\')", _re_unescape_match, text) + +# parsing and dumping for KV1 + + +def parse(fp, mapper=dict, merge_duplicate_keys=True, escaped=True): + """ + Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a VDF) + to a Python object. + + ``mapper`` specifies the Python object used after deserializetion. ``dict` is + used by default. Alternatively, ``collections.OrderedDict`` can be used if you + wish to preserve key order. Or any object that acts like a ``dict``. + + ``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the + same key into one instead of overwriting. You can se this to ``False`` if you are + using ``VDFDict`` and need to preserve the duplicates. + """ + if not issubclass(mapper, dict): + raise TypeError("Expected mapper to be subclass of dict, got %s" % type(mapper)) + if not hasattr(fp, 'readline'): + raise TypeError("Expected fp to be a file-like object supporting line iteration") + + lineno = 0 + stack = [mapper()] + expect_bracket = False + + re_keyvalue = re.compile(r'^("(?P(?:\\.|[^\\"])+)"|(?P#?[a-z0-9\-\_\\\?]+))' + r'([ \t]*(' + r'"(?P(?:\\.|[^\\"])*)(?P")?' + r'|(?P[a-z0-9\-\_\\\?\*\.]+)' + r'))?', + flags=re.I) + + for lineno, line in enumerate(fp, 1): + if lineno == 1: + line = strip_bom(line) + + line = line.lstrip() + + # skip empty and comment lines + if line == "" or line[0] == '/': + continue + + # one level deeper + if line[0] == "{": + expect_bracket = False + continue + + if expect_bracket: + raise SyntaxError("vdf.parse: expected openning bracket", + (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 1, line)) + + # one level back + if line[0] == "}": + if len(stack) > 1: + stack.pop() + continue + + raise SyntaxError("vdf.parse: one too many closing parenthasis", + (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line)) + + # parse keyvalue pairs + while True: + match = re_keyvalue.match(line) + + if not match: + try: + line += next(fp) + continue + except StopIteration: + raise SyntaxError("vdf.parse: unexpected EOF (open key quote?)", + (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line)) + + key = match.group('key') if match.group('qkey') is None else match.group('qkey') + val = match.group('val') if match.group('qval') is None else match.group('qval') + + if escaped: + key = _unescape(key) + + # we have a key with value in parenthesis, so we make a new dict obj (level deeper) + if val is None: + if merge_duplicate_keys and key in stack[-1]: + _m = stack[-1][key] + else: + _m = mapper() + stack[-1][key] = _m + + stack.append(_m) + expect_bracket = True + + # we've matched a simple keyvalue pair, map it to the last dict obj in the stack + else: + # if the value is line consume one more line and try to match again, + # until we get the KeyValue pair + if match.group('vq_end') is None and match.group('qval') is not None: + try: + line += next(fp) + continue + except StopIteration: + raise SyntaxError("vdf.parse: unexpected EOF (open quote for value?)", + (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line)) + + stack[-1][key] = _unescape(val) if escaped else val + + # exit the loop + break + + if len(stack) != 1: + raise SyntaxError("vdf.parse: unclosed parenthasis or quotes (EOF)", + (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line)) + + return stack.pop() + + +def loads(s, **kwargs): + """ + Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON + document) to a Python object. + """ + if not isinstance(s, string_type): + raise TypeError("Expected s to be a str, got %s" % type(s)) + fp = unicodeIO(s) + return parse(fp, **kwargs) + + +def load(fp, **kwargs): + """ + Deserialize ``fp`` (a ``.readline()``-supporting file-like object containing + a JSON document) to a Python object. + """ + return parse(fp, **kwargs) + + +def dumps(obj, pretty=False, escaped=True): + """ + Serialize ``obj`` to a VDF formatted ``str``. + """ + if not isinstance(obj, dict): + raise TypeError("Expected data to be an instance of``dict``") + if not isinstance(pretty, bool): + raise TypeError("Expected pretty to be of type bool") + if not isinstance(escaped, bool): + raise TypeError("Expected escaped to be of type bool") + + return ''.join(_dump_gen(obj, pretty, escaped)) + + +def dump(obj, fp, pretty=False, escaped=True): + """ + Serialize ``obj`` as a VDF formatted stream to ``fp`` (a + ``.write()``-supporting file-like object). + """ + if not isinstance(obj, dict): + raise TypeError("Expected data to be an instance of``dict``") + if not hasattr(fp, 'write'): + raise TypeError("Expected fp to have write() method") + if not isinstance(pretty, bool): + raise TypeError("Expected pretty to be of type bool") + if not isinstance(escaped, bool): + raise TypeError("Expected escaped to be of type bool") + + for chunk in _dump_gen(obj, pretty, escaped): + fp.write(chunk) + + +def _dump_gen(data, pretty=False, escaped=True, level=0): + indent = "\t" + line_indent = "" + + if pretty: + line_indent = indent * level + + for key, value in data.items(): + if escaped and isinstance(key, string_type): + key = _escape(key) + + if isinstance(value, dict): + yield '%s"%s"\n%s{\n' % (line_indent, key, line_indent) + for chunk in _dump_gen(value, pretty, escaped, level + 1): + yield chunk + yield "%s}\n" % line_indent + else: + if escaped and isinstance(value, string_type): + value = _escape(value) + + yield '%s"%s" "%s"\n' % (line_indent, key, value) + + +# binary VDF +class BASE_INT(int_type): + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, self) + + +class UINT_64(BASE_INT): + pass + + +class INT_64(BASE_INT): + pass + + +class POINTER(BASE_INT): + pass + + +class COLOR(BASE_INT): + pass + + +BIN_NONE = b'\x00' +BIN_STRING = b'\x01' +BIN_INT32 = b'\x02' +BIN_FLOAT32 = b'\x03' +BIN_POINTER = b'\x04' +BIN_WIDESTRING = b'\x05' +BIN_COLOR = b'\x06' +BIN_UINT64 = b'\x07' +BIN_END = b'\x08' +BIN_INT64 = b'\x0A' +BIN_END_ALT = b'\x0B' + + +def binary_loads(s, mapper=dict, merge_duplicate_keys=True, alt_format=False): + """ + Deserialize ``s`` (``bytes`` containing a VDF in "binary form") + to a Python object. + + ``mapper`` specifies the Python object used after deserializetion. ``dict` is + used by default. Alternatively, ``collections.OrderedDict`` can be used if you + wish to preserve key order. Or any object that acts like a ``dict``. + + ``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the + same key into one instead of overwriting. You can se this to ``False`` if you are + using ``VDFDict`` and need to preserve the duplicates. + """ + if not isinstance(s, bytes): + raise TypeError("Expected s to be bytes, got %s" % type(s)) + if not issubclass(mapper, dict): + raise TypeError("Expected mapper to be subclass of dict, got %s" % type(mapper)) + + # helpers + int32 = struct.Struct(' idx: + t = s[idx:idx + 1] + idx += 1 + + if t == CURRENT_BIN_END: + if len(stack) > 1: + stack.pop() + continue + break + + key, idx = read_string(s, idx) + + if t == BIN_NONE: + if merge_duplicate_keys and key in stack[-1]: + _m = stack[-1][key] + else: + _m = mapper() + stack[-1][key] = _m + stack.append(_m) + elif t == BIN_STRING: + stack[-1][key], idx = read_string(s, idx) + elif t == BIN_WIDESTRING: + stack[-1][key], idx = read_string(s, idx, wide=True) + elif t in (BIN_INT32, BIN_POINTER, BIN_COLOR): + val = int32.unpack_from(s, idx)[0] + + if t == BIN_POINTER: + val = POINTER(val) + elif t == BIN_COLOR: + val = COLOR(val) + + stack[-1][key] = val + idx += int32.size + elif t == BIN_UINT64: + stack[-1][key] = UINT_64(uint64.unpack_from(s, idx)[0]) + idx += uint64.size + elif t == BIN_INT64: + stack[-1][key] = INT_64(int64.unpack_from(s, idx)[0]) + idx += int64.size + elif t == BIN_FLOAT32: + stack[-1][key] = float32.unpack_from(s, idx)[0] + idx += float32.size + else: + raise SyntaxError("Unknown data type at offset %d: %s" % (idx - 1, repr(t))) + + if len(s) != idx or len(stack) != 1: + raise SyntaxError("Binary VDF ended at offset %d, but length is %d" % (idx, len(s))) + + return stack.pop() + + +def binary_dumps(obj, alt_format=False): + """ + Serialize ``obj`` to a binary VDF formatted ``bytes``. + """ + return b''.join(_binary_dump_gen(obj, alt_format=alt_format)) + + +def _binary_dump_gen(obj, level=0, alt_format=False): + if level == 0 and len(obj) == 0: + return + + int32 = struct.Struct(' 0: + for idx in _range(start_idx, len(self.__omap)): + if self.__omap[idx][1] == skey: + oldkey = self.__omap[idx] + newkey = (dup_idx, skey) + super().__setitem__(newkey, self[oldkey]) + super().__delitem__(oldkey) + self.__omap[idx] = newkey + + dup_idx += 1 + tail_count -= 1 + if tail_count == 0: + break + + if self.__kcount[skey] == 0: + del self.__kcount[skey] + + return result + + def __iter__(self): + return iter(self.iterkeys()) + + def __contains__(self, key): + return super().__contains__(self._normalize_key(key)) + + def __eq__(self, other): + if isinstance(other, VDFDict): + return list(self.items()) == list(other.items()) + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def clear(self): + super().clear() + self.__kcount.clear() + self.__omap = [] + + def get(self, key, *args): + return super().get(self._normalize_key(key), *args) + + def setdefault(self, key, default=None): + if key not in self: + self.__setitem__(key, default) + return self.__getitem__(key) + + def pop(self, key): + key = self._normalize_key(key) + value = self.__getitem__(key) + self.__delitem__(key) + return value + + def popitem(self): + if not self.__omap: + raise KeyError("VDFDict is empty") + key = self.__omap[-1] + return key[1], self.pop(key) + + def update(self, data=None, **kwargs): + if isinstance(data, dict): + data = data.items() + elif not isinstance(data, list): + raise TypeError("Expected data to be a list or dict, got %s" % type(data)) + + for key, value in data: + self.__setitem__(key, value) + + def iterkeys(self): + return (key[1] for key in self.__omap) + + def keys(self): + return _kView(self) + + def itervalues(self): + return (self[key] for key in self.__omap) + + def values(self): + return _vView(self) + + def iteritems(self): + return ((key[1], self[key]) for key in self.__omap) + + def items(self): + return _iView(self) + + def get_all_for(self, key): + """ Returns all values of the given key """ + if not isinstance(key, _string_type): + raise TypeError("Key needs to be a string.") + return [self[(idx, key)] for idx in _range(self.__kcount[key])] + + def remove_all_for(self, key): + """ Removes all items with the given key """ + if not isinstance(key, _string_type): + raise TypeError("Key need to be a string.") + + for idx in _range(self.__kcount[key]): + super().__delitem__((idx, key)) + + self.__omap = list(filter(lambda x: x[1] != key, self.__omap)) + + del self.__kcount[key] + + def has_duplicates(self): + """ + Returns ``True`` if the dict contains keys with duplicates. + Recurses through any all keys with value that is ``VDFDict``. + """ + for n in getattr(self.__kcount, _iter_values)(): + if n != 1: + return True + + def dict_recurse(obj): + for v in getattr(obj, _iter_values)(): + if isinstance(v, VDFDict) and v.has_duplicates(): + return True + if isinstance(v, dict): + return dict_recurse(v) + return False + + return dict_recurse(self) diff --git a/tools/configurator.sh b/tools/configurator.sh index e5e77be0..52813c3e 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -3,44 +3,68 @@ # VARIABLES SECTION source /app/libexec/global.sh -source /app/libexec/functions.sh # DIALOG SECTION # Configurator Option Tree # Welcome -# - RetroArch Presets -# - Change Rewind Setting -# - Enable/Disable Rewind -# - RetroAchivement Login -# - Login prompt -# - Emulator Options (Behind one-time power user warning dialog) -# - Launch RetroArch -# - Launch Cemu -# - Launch Citra -# - Launch Dolphin -# - Launch Duckstation -# - Launch MelonDS -# - Launch PCSX2 -# - Launch PPSSPP -# - Launch Primehack -# - Launch RPCS3 -# - Launch XEMU -# - Launch Yuzu -# - Tools and Troubleshooting -# - Move RetroDECK -# - Multi-file game check -# - Basic BIOS file check -# - Advanced BIOS file check -# - Compress Games -# - Manual single-game selection -# - Multi-file compression (CHD) -# - Download ES themes -# - Download PS3 firmware -# - Backup RetroDECK userdata -# - Reset -# - Reset Specific Emulator +# - Presets & Settings +# - Global: Presets & Settings +# - Widescreen: Enable/Disable +# - Ask-To-Exit: Enable/Disable +# - RetroAchievements: Login +# - RetroAchievements: Logout +# - RetroAchievements: Hardcore Mode +# - Swap A/B and X/Y Buttons +# - RetroArch: Presets & Settings +# - Borders: Enable/Disable +# - Rewind: Enable/Disable +# - Wii & GameCube: Presets & Settings +# - Dolphin Textures: Universal Dynamic Input +# - Primehack Textures: Universal Dynamic Input +# - Open Emulator (Behind one-time power user warning dialog) +# - RetroArch +# - Cemu +# - Citra +# - Dolphin +# - Duckstation +# - MelonDS +# - PCSX2 +# - PPSSPP +# - Primehack +# - RPCS3 +# - Ryujinx +# - XEMU +# - Yuzu +# - Tools +# - Tool: Move Folders +# - Move all of RetroDECK +# - Move ROMs folder +# - Move BIOS folder +# - Move Downloaded Media folder +# - Move Saves folder +# - Move States folder +# - Move Themes folder +# - Move Screenshots folder +# - Move Mods folder +# - Move Texture Packs folder +# - Tool: Compress Games +# - Compress Single Game +# - Compress Multiple Games - CHD +# - Compress Multiple Games - ZIP +# - Compress Multiple Games - RVZ +# - Compress Multiple Games - All Formats +# - Compress All Games +# - Install: RetroDECK SD Controller Profile +# - Install: PS3 firmware +# - RetroDECK: Change Update Setting +# - Troubleshooting +# - Backup: RetroDECK Userdata +# - Check & Verify: BIOS +# - Check & Verify: Multi-file structure +# - RetroDECK: Reset +# - Reset Specific Emulator # - Reset RetroArch # - Reset Cemu # - Reset Citra @@ -51,133 +75,331 @@ source /app/libexec/functions.sh # - Reset PPSSPP # - Reset Primehack # - Reset RPCS3 +# - Reset Ryujinx # - Reset XEMU # - Reset Yuzu -# - Reset All Emulators -# - Reset RetroDECK +# - Reset All Emulators +# - Reset RetroDECK +# - RetroDECK: About +# - RetroDECK Version History +# - Full changelog +# - Version-specific changelogs +# - RetroDECK Credits +# - Add to Steam +# - Developer Options (Hidden) +# - Change Multi-user mode +# - Change Update channel +# - Browse the wiki +# - USB Import tool +# - Install: RetroDECK Starter Pack # DIALOG TREE FUNCTIONS -configurator_reset_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Reset Options" --cancel-label="Back" \ +configurator_welcome_dialog() { + if [[ $developer_options == "true" ]]; then + welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \ + "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \ + "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \ + "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \ + "RetroDECK: About" "Show additional information about RetroDECK" \ + "Sync with Steam" "Sync with Steam all the favorites games" \ + "Developer Options" "Welcome to the DANGER ZONE") + else + welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \ + "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \ + "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \ + "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \ + "RetroDECK: About" "Show additional information about RetroDECK" \ + "Add to Steam" "Add to Steam all the favorite games, it will not remove added games") + fi + + choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Reset Specific Emulator" "Reset only one specific emulator to default settings" \ - "Reset All Emulators" "Reset all emulators to default settings" \ - "Reset RetroDECK" "Reset RetroDECK to default settings" ) + "${welcome_menu_options[@]}") case $choice in - "Reset Specific Emulator" ) - emulator_to_reset=$(zenity --list \ - --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --text="Which emulator do you want to reset to default?" \ - --column="Emulator" --column="Action" \ - "RetroArch" "Reset RetroArch to default settings" \ - "Cemu" "Reset Cemu to default settings" \ - "Citra" "Reset Citra to default settings" \ - "Dolphin" "Reset Dolphin to default settings" \ - "Duckstation" "Reset Duckstation to default settings" \ - "MelonDS" "Reset MelonDS to default settings" \ - "PCSX2" "Reset PCSX2 to default settings" \ - "PPSSPP" "Reset PPSSPP to default settings" \ - "Primehack" "Reset Primehack to default settings" \ - "RPCS3" "Reset RPCS3 to default settings" \ - "XEMU" "Reset XEMU to default settings" \ - "Yuzu" "Reset Yuzu to default settings" ) - - case $emulator_to_reset in - - "RetroArch" | "XEMU" ) # Emulators that require network access - if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - if [[ $(check_network_connectivity) == "true" ]]; then - prepare_emulator "reset" "$emulator_to_reset" "configurator" - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe $emulator_to_reset reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available." - configurator_reset_dialog - fi - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" ) - if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - prepare_emulator "reset" "$emulator_to_reset" "configurator" - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "" ) # No selection made or Back button clicked - configurator_reset_dialog - ;; - - esac + "Presets & Settings" ) + configurator_presets_and_settings_dialog ;; -"Reset All Emulators" ) - if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - if [[ $(check_network_connectivity) == "true" ]]; then - prepare_emulator "reset" "all" - configurator_process_complete_dialog "resetting all emulators" - else - configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe all-emulator reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available." - configurator_reset_dialog - fi - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi -;; + "Open Emulator" ) + configurator_power_user_warning_dialog + ;; -"Reset RetroDECK" ) - if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Reset RetroDECK" \ - --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process." - rm -f "$lockfile" - rm -f "$rd_conf" - configurator_process_complete_dialog "resetting RetroDECK" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi -;; + "RetroDECK: Tools" ) + configurator_retrodeck_tools_dialog + ;; -"" ) # No selection made or Back button clicked - configurator_welcome_dialog -;; + "RetroDECK: Troubleshooting" ) + configurator_retrodeck_troubleshooting_dialog + ;; + + "RetroDECK: About" ) + configurator_about_retrodeck_dialog + ;; + + "Sync with Steam" ) + configurator_add_steam + ;; + + "Developer Options" ) + configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!" + configurator_developer_dialog + ;; + + "" ) + exit 1 + ;; esac } -configurator_retroachivement_dialog() { - login=$(zenity --forms --title="RetroDECK Configurator Utility - RetroArch RetroAchievements Login" --cancel-label="Back" \ +configurator_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Presets & Settings" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --text="Enter your RetroAchievements Account details.\n\nBe aware that this tool cannot verify your login details and currently only supports logging in with RetroArch.\nFor registration and more info visit\nhttps://retroachievements.org/\n" \ - --separator="=SEP=" \ - --add-entry="Username" \ - --add-password="Password") + --column="Choice" --column="Action" \ + "Global: Presets & Settings" "Here you find presets and settings that that span over multiple emulators" \ + "RetroArch: Presets & Settings" "Here you find presets and settings for RetroArch and its cores" \ + "Wii & GameCube: Presets & Settings" "Here you find presets and settings for Dolphin and Primehack" ) - if [ $? == 0 ]; then # OK button clicked - arrIN=(${login//=SEP=/ }) - user=${arrIN[0]} - pass=${arrIN[1]} + case $choice in - set_setting_value $raconf cheevos_enable true retroarch - set_setting_value $raconf cheevos_username $user retroarch - set_setting_value $raconf cheevos_password $pass retroarch + "Global: Presets & Settings" ) + configurator_global_presets_and_settings_dialog + ;; - configurator_process_complete_dialog "logging in to RetroArch RetroAchievements" - else + "RetroArch: Presets & Settings" ) + configurator_retroarch_presets_and_settings_dialog + ;; + + "Wii & GameCube: Presets & Settings" ) + configurator_wii_and_gamecube_presets_and_settings_dialog + ;; + + "" ) # No selection made or Back button clicked configurator_welcome_dialog + ;; + + esac +} + +configurator_global_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Global: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Widescreen: Enable/Disable" "Enable or disable widescreen in supported systems" \ + "Ask-to-Exit: Enable/Disable" "Enable or disable emulators confirming when quitting in supported systems" \ + "RetroAchievements: Login" "Log into the RetroAchievements service in supported systems" \ + "RetroAchievements: Logout" "Disable RetroAchievements service in ALL supported systems" \ + "RetroAchievements: Hardcore Mode" "Enable RetroAchievements hardcore mode (no cheats, rewind, save states etc.) in supported emulators" \ + "Swap A/B and X/Y Buttons" "Enable or disable a swapped A/B and X/Y button layout in supported systems" ) + + case $choice in + + "Widescreen: Enable/Disable" ) + change_preset_dialog "widescreen" + configurator_global_presets_and_settings_dialog + ;; + + "Ask-to-Exit: Enable/Disable" ) + change_preset_dialog "ask_to_exit" + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Login" ) + local cheevos_creds=$(get_cheevos_token_dialog) + if [[ ! "$cheevos_creds" == "failed" ]]; then + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login successful, please select systems you would like to enable achievements for in the next dialog." + IFS=',' read -r cheevos_username cheevos_token cheevos_login_timestamp < <(printf '%s\n' "$cheevos_creds") + change_preset_dialog "cheevos" + else + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login failed, please verify your username and password and try the process again." + fi + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Logout" ) # This is a workaround to allow disabling cheevos without having to enter login credentials + local cheevos_emulators=$(sed -n '/\[cheevos\]/, /\[/{ /\[cheevos\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + for setting_line in $cheevos_emulators; do + emulator=$(get_setting_name "$setting_line" "retrodeck") + set_setting_value "$rdconf" "$emulator" "false" "retrodeck" "cheevos" + build_preset_config "$emulator" "cheevos" + done + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements has been disabled in all supported systems." + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Hardcore Mode" ) + change_preset_dialog "cheevos_hardcore" + configurator_global_presets_and_settings_dialog + ;; + + "Swap A/B and X/Y Buttons" ) + change_preset_dialog "nintendo_button_layout" + configurator_global_presets_and_settings_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_retroarch_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Borders: Enable/Disable" "Enable or disable borders in supported systems" \ + "Rewind: Enable/Disable" "Enable or disable the Rewind function in RetroArch." ) + + case $choice in + + "Borders: Enable/Disable" ) + change_preset_dialog "borders" + configurator_retroarch_presets_and_settings_dialog + ;; + + "Rewind: Enable/Disable" ) + configurator_retroarch_rewind_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_retroarch_rewind_dialog() { + if [[ $(get_setting_value "$raconf" rewind_enable retroarch) == "true" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroArch Rewind" \ + --text="Rewind is currently enabled. Do you want to disable it?." + + if [ $? == 0 ] + then + set_setting_value "$raconf" "rewind_enable" "false" retroarch + configurator_process_complete_dialog "disabling Rewind" + else + configurator_retroarch_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroArch Rewind" \ + --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems." + + if [ $? == 0 ] + then + set_setting_value "$raconf" "rewind_enable" "true" retroarch + configurator_process_complete_dialog "enabling Rewind" + else + configurator_retroarch_presets_and_settings_dialog + fi + fi +} + +configurator_wii_and_gamecube_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Wii & GameCube: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Dolphin Textures: Universal Dynamic Input" "Enable/Disable Venomalia's Universal Dynamic Input Textures for Dolphin" \ + "Primehack Textures: Universal Dynamic Input" "Enable/Disable: Venomalia's Universal Dynamic Input Textures for Primehack") + + case $choice in + + "Dolphin Textures: Universal Dynamic Input" ) + configurator_dolphin_input_textures_dialog + ;; + + "Primehack Textures: Universal Dynamic Input" ) + configurator_primehack_input_textures_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_dolphin_input_textures_dialog() { + if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ + --text="Custom input textures are currently enabled. Do you want to disable them?." + + if [ $? == 0 ] + then + # set_setting_value $dolphingfxconf "HiresTextures" "False" dolphin # TODO: Break out a preset for texture packs so this can be enabled and disabled independently. + rm -rf "/var/data/dolphin-emu/Load/DynamicInputTextures" + configurator_process_complete_dialog "disabling Dolphin custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ + --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete." + + if [ $? == 0 ] + then + set_setting_value $dolphingfxconf "HiresTextures" "True" dolphin + ( + mkdir "/var/data/dolphin-emu/Load/DynamicInputTextures" + rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Dolphin Custom Input Textures Install" + configurator_process_complete_dialog "enabling Dolphin custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + fi +} + +configurator_primehack_input_textures_dialog() { + if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Custom Input Textures" \ + --text="Custom input textures are currently enabled. Do you want to disable them?." + + if [ $? == 0 ] + then + # set_setting_value $primehackgfxconf "HiresTextures" "False" primehack # TODO: Break out a preset for texture packs so this can be enabled and disabled independently. + rm -rf "/var/data/primehack/Load/DynamicInputTextures" + configurator_process_complete_dialog "disabling Primehack custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Primehack Custom Input Textures" \ + --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete." + + if [ $? == 0 ] + then + set_setting_value $primehackgfxconf "HiresTextures" "True" primehack + ( + mkdir "/var/data/primehack/Load/DynamicInputTextures" + rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Primehack Custom Input Textures Install" + configurator_process_complete_dialog "enabling Primehack custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi fi } @@ -185,42 +407,42 @@ configurator_power_user_warning_dialog() { if [[ $power_user_warning == "true" ]]; then choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Desktop Mode Warning" \ - --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?") + --title "RetroDECK Power User Warning" \ + --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates or when using presets.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?") fi rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "0" ]]; then # If user clicked "Yes" - configurator_power_user_changes_dialog + configurator_open_emulator_dialog else # If any button other than "Yes" was clicked if [[ $choice == "No" ]]; then configurator_welcome_dialog elif [[ $choice == "Never show this again" ]]; then - set_setting_value $rd_conf "power_user_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks - conf_read - configurator_power_user_changes_dialog + set_setting_value $rd_conf "power_user_warning" "false" retrodeck "options" # Store power user warning variable for future checks + configurator_open_emulator_dialog fi fi } -configurator_power_user_changes_dialog() { +configurator_open_emulator_dialog() { emulator=$(zenity --list \ - --title "RetroDECK Configurator Utility - Emulator Options" --cancel-label="Back" \ + --title "RetroDECK Configurator Utility - Open Emulator" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --text="Which emulator do you want to launch?" \ --hide-header \ - --column=emulator \ - "RetroArch" \ - "Cemu" \ - "Citra" \ - "Dolphin" \ - "Duckstation" \ - "MelonDS" \ - "PCSX2" \ - "PPSSPP" \ - "Primehack" \ - "RPCS3" \ - "XEMU" \ - "Yuzu") + --column="Emulator" --column="Action" \ + "RetroArch" "Open the multi-emulator frontend RetroArch" \ + "Cemu" "Open the Wii U emulator CEMU" \ + "Citra" "Open the N3DS emulator Citra" \ + "Dolphin" "Open the Wii & GC emulator Dolphin" \ + "Duckstation" "Open the PSX emulator Duckstation" \ + "MelonDS" "Open the NDS emulator MelonDS" \ + "PCSX2" "Open the PS2 emulator PSXC2" \ + "PPSSPP" "Open the PSP emulator PPSSPP" \ + "Primehack" "Open the Metroid Prime emulator Primehack" \ + "RPCS3" "Open the PS3 emulator RPCS3" \ + "Ryujinx" "Open the Switch emulator Ryujinx" \ + "XEMU" "Open the Xbox emulator XEMU" \ + "Yuzu" "Open the Switch emulator Yuzu") case $emulator in @@ -264,6 +486,10 @@ configurator_power_user_changes_dialog() { rpcs3 ;; + "Ryujinx" ) + ryujinx-wrapper + ;; + "XEMU" ) xemu ;; @@ -277,53 +503,60 @@ configurator_power_user_changes_dialog() { ;; esac + + configurator_open_emulator_dialog } -configurator_retroarch_rewind_dialog() { - if [[ $(get_setting_value $raconf rewind_enable retroarch) == "true" ]]; then - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroArch Rewind" \ - --text="Rewind is currently enabled. Do you want to disable it?." - - if [ $? == 0 ] - then - set_setting_value $raconf "rewind_enable" "false" retroarch - configurator_process_complete_dialog "disabling Rewind" - else - configurator_retroarch_options_dialog - fi - else - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroArch Rewind" \ - --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems." - - if [ $? == 0 ] - then - set_setting_value $raconf "rewind_enable" "true" retroarch - configurator_process_complete_dialog "enabling Rewind" - else - configurator_retroarch_options_dialog - fi - fi -} - -configurator_retroarch_options_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch Options" --cancel-label="Back" \ +configurator_retrodeck_tools_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Tools" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Change Rewind Setting" "Enable or disable the Rewind function in RetroArch." \ - "RetroAchievements Login" "Log into the RetroAchievements service in RetroArch." ) + "Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location" \ + "Tool: Compress Games" "Compress games for systems that support it" \ + "Install: RetroDECK SD Controller Profile" "Install the custom RetroDECK controller layout for the Steam Deck" \ + "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" \ + "RetroDECK: Change Update Setting" "Enable or disable online checks for new versions of RetroDECK" ) case $choice in - "Change Rewind Setting" ) - configurator_retroarch_rewind_dialog + "Tool: Move Folders" ) + configurator_retrodeck_move_tool_dialog ;; - "RetroAchievements Login" ) - configurator_retroachivement_dialog + "Tool: Compress Games" ) + configurator_generic_dialog "RetroDECK Configurator - Compression Tool" "Depending on your library and compression choices, the process can sometimes take a long time.\nPlease be patient once it is started!" + configurator_compression_tool_dialog + ;; + + "Install: RetroDECK SD Controller Profile" ) + configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "We are now offering a new official RetroDECK controller profile!\nIt is an optional component that helps you get the most out of RetroDECK with a new in-game radial menu for unified hotkeys across emulators.\n\nThe files need to be installed outside of the normal ~/retrodeck folder, so we wanted your permission before proceeding.\n\nThe files will be installed at the following shared Steam locations:\n\n$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/\n$HOME/.steam/steam/controller_base/templates" + if [[ $(configurator_generic_question_dialog "Install: RetroDECK Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then + install_retrodeck_controller_profile + configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "The RetroDECK controller profile install is complete.\nSee the Wiki for more details on how to use it to its fullest potential!" + fi + configurator_retrodeck_tools_dialog + ;; + + "Install: PS3 Firmware" ) + if [[ $(check_network_connectivity) == "true" ]]; then + configurator_generic_dialog "RetroDECK Configurator - Install: PS3 firmware" "This tool will download firmware required by RPCS3 to emulate PS3 games.\n\nThe process will take several minutes, and the emulator will launch to finish the installation.\nPlease close RPCS3 manually once the installation is complete." + ( + update_rpcs3_firmware + ) | + zenity --progress --pulsate \ + --icon-name=net.retrodeck.retrodeck \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title="Downloading PS3 Firmware" \ + --no-cancel \ + --auto-close + else + configurator_generic_dialog "RetroDECK Configurator - Install: PS3 Firmware" "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored." + configurator_retrodeck_tools_dialog + fi + ;; + + "RetroDECK: Change Update Setting" ) + configurator_online_update_setting_dialog ;; "" ) # No selection made or Back button clicked @@ -333,6 +566,112 @@ configurator_retroarch_options_dialog() { esac } +configurator_retrodeck_move_tool_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Move Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Move all of RetroDECK" "Move the entire retrodeck folder to a new location" \ + "Move ROMs folder" "Move only the ROMs folder to a new location" \ + "Move BIOS folder" "Move only the BIOS folder to a new location" \ + "Move Downloaded Media folder" "Move only the Downloaded Media folder to a new location" \ + "Move Saves folder" "Move only the Saves folder to a new location" \ + "Move States folder" "Move only the States folder to a new location" \ + "Move Themes folder" "Move only the Themes folder to a new location" \ + "Move Screenshots folder" "Move only the Screenshots folder to a new location" \ + "Move Mods folder" "Move only the Mods folder to a new location" \ + "Move Texture Packs folder" "Move only the Texture Packs folder to a new location" ) + + case $choice in + + "Move all of RetroDECK" ) + configurator_move_folder_dialog "rdhome" + ;; + + "Move ROMs folder" ) + configurator_move_folder_dialog "roms_folder" + ;; + + "Move BIOS folder" ) + configurator_move_folder_dialog "bios_folder" + ;; + + "Move Downloaded Media folder" ) + configurator_move_folder_dialog "media_folder" + ;; + + "Move Saves folder" ) + configurator_move_folder_dialog "saves_folder" + ;; + + "Move States folder" ) + configurator_move_folder_dialog "states_folder" + ;; + + "Move Themes folder" ) + configurator_move_folder_dialog "themes_folder" + ;; + + "Move Screenshots folder" ) + configurator_move_folder_dialog "screenshots_folder" + ;; + + "Move Mods folder" ) + configurator_move_folder_dialog "mods_folder" + ;; + + "Move Texture Packs folder" ) + configurator_move_folder_dialog "texture_packs_folder" + ;; + + esac + + configurator_retrodeck_tools_dialog +} + +configurator_compression_tool_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Compression Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Compress Single Game" "Compress a single game into a compatible format" \ + "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" \ + "Compress Multiple Games - ZIP" "Compress one or more games compatible with the ZIP format" \ + "Compress Multiple Games - RVZ" "Compress one or more games compatible with the RVZ format" \ + "Compress Multiple Games - All Formats" "Compress one or more games compatible with any format" \ + "Compress All Games" "Compress all games into compatible formats" ) + + case $choice in + + "Compress Single Game" ) + configurator_compress_single_game_dialog + ;; + + "Compress Multiple Games - CHD" ) + configurator_compress_multiple_games_dialog "chd" + ;; + + "Compress Multiple Games - ZIP" ) + configurator_compress_multiple_games_dialog "zip" + ;; + + "Compress Multiple Games - RVZ" ) + configurator_compress_multiple_games_dialog "rvz" + ;; + + "Compress Multiple Games - All Formats" ) + configurator_compress_multiple_games_dialog "all" + ;; + + "Compress All Games" ) + configurator_compress_multiple_games_dialog "everything" + ;; + + "" ) # No selection made or Back button clicked + configurator_retrodeck_tools_dialog + ;; + + esac +} + configurator_compress_single_game_dialog() { local file=$(file_browse "Game to compress") if [[ ! -z "$file" ]]; then @@ -369,30 +708,30 @@ configurator_compress_single_game_dialog() { zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" + configurator_compression_tool_dialog else - configurator_generic_dialog "The selected file does not have any compatible compressed format." - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The selected file does not have any compatible compressed format." + configurator_compression_tool_dialog fi else - configurator_generic_dialog "No file selected, returning to main menu" - configurator_welcome_dialog + configurator_compression_tool_dialog fi } -configurator_compress_some_games_dialog() { +configurator_compress_multiple_games_dialog() { # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg local compressable_games_list=() local all_compressable_games=() local games_to_compress=() + local target_selection="$1" - if [[ ! -z "$1" ]]; then - local compression_format="$1" - else + if [[ "$1" == "everything" ]]; then local compression_format="all" + else + local compression_format="$1" fi if [[ $compression_format == "all" ]]; then @@ -433,25 +772,29 @@ configurator_compress_some_games_dialog() { fi done < <(printf '%s\n' "$compressable_systems_list") - choice=$(zenity \ - --list --width=1200 --height=720 \ - --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \ - --separator="," --print-column=3 \ - --text="Choose which games to compress:" \ - --column "Compress?" \ - --column "Game" \ - --column "Game Full Path" \ - "${compressable_games_list[@]}") + if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything + choice=$(zenity \ + --list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Compression Tool" \ + --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \ + --separator="," --print-column=3 \ + --text="Choose which games to compress:" \ + --column "Compress?" \ + --column "Game" \ + --column "Game Full Path" \ + "${compressable_games_list[@]}") - local rc=$? - if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected - IFS="," read -ra games_to_compress <<< "$choice" - local total_games_to_compress=${#games_to_compress[@]} - local games_left_to_compress=$total_games_to_compress - elif [[ ! -z $choice ]]; then # User clicked "Compress All" + local rc=$? + if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected + IFS="," read -ra games_to_compress <<< "$choice" + local total_games_to_compress=${#games_to_compress[@]} + local games_left_to_compress=$total_games_to_compress + elif [[ ! -z $choice ]]; then # User clicked "Compress All" + games_to_compress=("${all_compressable_games[@]}") + local total_games_to_compress=${#all_compressable_games[@]} + local games_left_to_compress=$total_games_to_compress + fi + else # The user chose to auto-compress everything games_to_compress=("${all_compressable_games[@]}") - local total_games_to_compress=${#all_compressable_games[@]} - local games_left_to_compress=$total_games_to_compress fi if [[ ! $(echo "${#games_to_compress[@]}") == "0" ]]; then @@ -482,74 +825,17 @@ configurator_compress_some_games_dialog() { zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" + configurator_compression_tool_dialog else - configurator_compress_games_dialog - fi -} - -configurator_compress_all_games_dialog() { - # This dialog compress all games found in all compatible roms folders into compatible formats - - local all_compressable_games=() - local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') - - while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type - do - compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") - if [[ ! -z $compression_candidates ]]; then - while IFS= read -r game - do - local compatible_compression_format=$(find_compatible_compression_format "$game") - if [[ ! $compatible_compression_format == "none" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - fi - done < <(printf '%s\n' "$compression_candidates") - fi - done < <(printf '%s\n' "$compressable_systems_list") - - if [[ ! $(echo ${all_compressable_games[@]}) == "0" ]]; then - local post_compression_cleanup=$(configurator_compression_cleanup_dialog) - total_games_to_compress=${#all_compressable_games[@]} - games_left_to_compress=$total_games_to_compress - ( - for file in "${all_compressable_games[@]}"; do - local compression_format=$(find_compatible_compression_format "$file") - echo "# Compressing $(basename "$file") into $compression_format format" # Update Zenity dialog text - progress=$(( 100 - (( 100 / "$total_games_to_compress" ) * "$games_left_to_compress" ))) - echo $progress - games_left_to_compress=$((games_left_to_compress-1)) - compress_game "$compression_format" "$file" - if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - rm -f $(realpath "$file") - else - rm -f $(realpath "$file") - fi - fi - done - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog - else - configurator_generic_dialog "There were no games found that could be compressed." + configurator_compression_tool_dialog fi } configurator_compression_cleanup_dialog() { zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Compression Cleanup" \ + --title "RetroDECK Configurator - RetroDECK: Compression Tool" \ --text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library." local rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "0" ]]; then # If user clicked "Yes" @@ -559,41 +845,72 @@ configurator_compression_cleanup_dialog() { fi } -configurator_compress_games_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \ +configurator_online_update_setting_dialog() { + if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Online Update Check" \ + --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?" + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_check" "false" retrodeck "options" + else # User clicked "Cancel" + configurator_retrodeck_tools_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Online Update Check" \ + --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?" + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + else # User clicked "Cancel" + configurator_retrodeck_tools_dialog + fi + fi +} + +configurator_retrodeck_troubleshooting_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Troubleshooting" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Compress Single Game" "Compress a single game into a compatible format" \ - "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" \ - "Compress Multiple Games - ZIP" "Compress one or more games compatible with the ZIP format" \ - "Compress Multiple Games - RVZ" "Compress one or more games compatible with the RVZ format" \ - "Compress Multiple Games - All Formats" "Compress one or more games compatible with any format" \ - "Compress All Games" "Compress all games into compatible formats" ) + "Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \ + "Check & Verify: BIOS Files" "Show information about common BIOS files" \ + "Check & Verify: Multi-file structure" "Verify the proper structure of multi-file or multi-disc games" \ + "RetroDECK: Reset" "Reset specific parts or all of RetroDECK" ) case $choice in - "Compress Single Game" ) - configurator_compress_single_game_dialog + "Backup: RetroDECK Userdata" ) + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "This tool will compress important RetroDECK userdata (basically everything except the ROMs folder) into a zip file.\n\nThis process can take several minutes, and the resulting zip file can be found in the ~/retrodeck/backups folder." + ( + backup_retrodeck_userdata + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Backup in Progress" \ + --text="Backing up RetroDECK userdata, please wait..." + if [[ -f "$backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip" ]]; then + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process is now complete." + else + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process could not be completed,\nplease check the logs folder for more information." + fi + configurator_retrodeck_troubleshooting_dialog ;; - "Compress Multiple Games - CHD" ) - configurator_compress_some_games_dialog "chd" + "Check & Verify: BIOS Files" ) + configurator_check_bios_files ;; - "Compress Multiple Games - ZIP" ) - configurator_compress_some_games_dialog "zip" + "Check & Verify: Multi-file structure" ) + configurator_check_multifile_game_structure ;; - "Compress Multiple Games - RVZ" ) - configurator_compress_some_games_dialog "rvz" - ;; - - "Compress Multiple Games - All Formats" ) - configurator_compress_some_games_dialog "all" - ;; - - "Compress All Games" ) - configurator_compress_all_games_dialog + "RetroDECK: Reset" ) + configurator_reset_dialog ;; "" ) # No selection made or Back button clicked @@ -603,49 +920,8 @@ configurator_compress_games_dialog() { esac } -configurator_check_multifile_game_structure() { - local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")) - if [[ ${#folder_games[@]} -gt 1 ]]; then - echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs" - else - configurator_generic_dialog "No incorrect multi-file game folder structures found." - fi - configurator_tools_and_troubleshooting_dialog -} - -configurator_check_bios_files_basic() { - configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." - bios_checked_list=() - - while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc - do - bios_file_found="No" - bios_hash_matched="No" - if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then - bios_file_found="Yes" - if [[ $bios_hash == "Unknown" ]]; then - bios_hash_matched="Unknown" - elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then - bios_hash_matched="Yes" - fi - fi - if [[ $bios_file_found == "Yes" && ($bios_hash_matched == "Yes" || $bios_hash_matched == "Unknown") && ! " ${bios_checked_list[*]} " =~ " ${bios_system} " ]]; then - bios_checked_list=("${bios_checked_list[@]}" "$bios_system" ) - fi - done < $bios_checklist - systems_with_bios=${bios_checked_list[@]} - - configurator_generic_dialog "The following systems have been found to have at least one valid BIOS file.\n\n$systems_with_bios\n\nFor more information on the BIOS files found please use the Advanced check tool." - - configurator_tools_and_troubleshooting_dialog -} - -configurator_check_bios_files_advanced() { - configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." +configurator_check_bios_files() { + configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." bios_checked_list=() while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc @@ -663,7 +939,7 @@ configurator_check_bios_files_advanced() { bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc") done < $bios_checklist - zenity --list --title="RetroDECK Configurator Utility - Verify BIOS Files" --cancel-label="Back" \ + zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column "BIOS File Name" \ --column "System" \ @@ -672,147 +948,139 @@ configurator_check_bios_files_advanced() { --column "BIOS File Description" \ "${bios_checked_list[@]}" - configurator_tools_and_troubleshooting_dialog + configurator_retrodeck_troubleshooting_dialog } -configurator_online_theme_downloader() { - local online_themes=() - local local_themes=() - readarray -t online_themes < <(curl -s $es_themes_list | jq -r '.themeSets[] | "\(.name)\n\(.url)"') - - for (( i=0; i<${#online_themes[@]}; i+=2 )); do - local name=${online_themes[$i]} - local url=${online_themes[$i+1]} - - if [[ -d "$themes_folder/$(basename "$url" .git)" ]] || [[ -d "$rd_es_themes/$(basename "$url" .git)" ]]; then - local_themes=("${local_themes[@]}" "true" "$name" "$url") - else - local_themes=("${local_themes[@]}" "false" "$name" "$url") - fi - done - - choice=$(zenity \ - --list --width=1200 --height=720 \ - --checklist --hide-column=3 --ok-label="Download/Update Themes" \ - --separator="," --print-column=3 \ - --text="Choose which themes to download:" \ - --column "Downloaded" \ - --column "Theme" \ - --column "Theme URL" \ - "${local_themes[@]}") - - local rc=$? - if [[ $rc == "0" && ! -z $choice ]]; then - ( - IFS="," read -ra chosen_themes <<< "$choice" - for theme in "${chosen_themes[@]}"; do - if [[ ! -d "$themes_folder/$(basename $theme .git)" ]] && [[ ! -d "$rd_es_themes/$(basename $theme .git)" ]]; then - echo "# Downloading $(basename "$theme" .git)" - git clone -q "$theme" "$themes_folder/$(basename $theme .git)" - elif [[ -d "$themes_folder/$(basename $theme .git)" ]] && [[ ! -d "$rd_es_themes/$(basename $theme .git)" ]]; then - cd "$themes_folder/$(basename $theme .git)" - echo "# Checking $(basename $theme .git) for updates" - git pull -fq - cd "$rdhome" - fi - done - ) | - zenity --progress --pulsate \ - --icon-name=net.retrodeck.retrodeck \ +configurator_check_multifile_game_structure() { + local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")) + if [[ ${#folder_games[@]} -gt 1 ]]; then + echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title="Downloading Themes" \ - --no-cancel \ - --auto-close - - configurator_generic_dialog "The theme downloads and updates have been completed.\n\nYou may need to exit RetroDECK and start it again for the new themes to be available." - configurator_tools_and_troubleshooting_dialog + --title "RetroDECK Configurator - Check & Verify: Multi-file structure" \ + --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs" else - configurator_tools_and_troubleshooting_dialog + configurator_generic_dialog "RetroDECK Configurator - Check & Verify: Multi-file structure" "No incorrect multi-file game folder structures found." fi + configurator_retrodeck_troubleshooting_dialog } -configurator_rpcs3_firmware_updater() { - configurator_generic_dialog "This tool will download firmware required by RPCS3 to emulate PS3 games.\n\nThe process will take several minutes, and the emulator will launch to finish the installation.\nPlease close RPCS3 manually once the installation is complete." - ( - update_rpcs3_firmware - ) | - zenity --progress --pulsate \ - --icon-name=net.retrodeck.retrodeck \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title="Downloading PS3 Firmware" \ - --no-cancel \ - --auto-close -} - -configurator_tools_and_troubleshooting_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \ +configurator_reset_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Reset" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Move RetroDECK" "Move RetroDECK files between internal/SD card or to a custom location" \ - "Multi-file game structure check" "Verify the proper structure of multi-file or multi-disc games" \ - "Basic BIOS file check" "Show a list of systems that BIOS files are found for" \ - "Advanced BIOS file check" "Show advanced information about common BIOS files" \ - "Compress Games" "Compress games to CHD format for systems that support it" \ - "Download/Update Themes" "Download new themes for RetroDECK or update existing ones" \ - "Download PS3 Firmware" "Download PS3 firmware for use with the RPCS3 emulator" \ - "Backup RetroDECK Userdata" "Compress important RetroDECK user data folders" ) + "Reset Specific Emulator" "Reset only one specific emulator to default settings" \ + "Reset All Emulators" "Reset all emulators to default settings" \ + "Reset RetroDECK" "Reset RetroDECK to default settings" ) case $choice in - "Move RetroDECK" ) - configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder." - configurator_move_retrodeck_dialog + "Reset Specific Emulator" ) + emulator_to_reset=$(zenity --list \ + --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --text="Which emulator do you want to reset to default?" \ + --column="Emulator" --column="Action" \ + "RetroArch" "Reset the multi-emulator frontend RetroArch to default settings" \ + "Cemu" "Reset the Wii U emulator Cemu to default settings" \ + "Citra" "Reset the N3DS emulator Citra to default settings" \ + "Dolphin" "Reset the Wii/GameCube emulator Dolphin to default settings" \ + "Duckstation" "Reset the PSX emulator Duckstation to default settings" \ + "MelonDS" "Reset the NDS emulator MelonDS to default settings" \ + "PCSX2" "Reset the PS2 emulator PCSX2 to default settings" \ + "PPSSPP" "Reset the PSP emulator PPSSPP to default settings" \ + "Primehack" "Reset the Metroid Prime emulator Primehack to default settings" \ + "RPCS3" "Reset the PS3 emulator RPCS3 to default settings" \ + "Ryujinx" "Reset the Switch emulator Ryujinx to default settings" \ + "XEMU" "Reset the XBOX emulator XEMU to default settings" \ + "Yuzu" "Reset the Switch emulator Yuzu to default settings" ) + + case $emulator_to_reset in + + "RetroArch" | "XEMU" ) # Emulators that require network access + if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then + prepare_emulator "reset" "$emulator_to_reset" "configurator" + configurator_process_complete_dialog "resetting $emulator_to_reset" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi + ;; + + "Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" ) + if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then + prepare_emulator "reset" "$emulator_to_reset" "configurator" + configurator_process_complete_dialog "resetting $emulator_to_reset" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi + ;; + + "" ) # No selection made or Back button clicked + configurator_reset_dialog + ;; + + esac ;; - "Multi-file game structure check" ) - configurator_check_multifile_game_structure - ;; - - "Basic BIOS file check" ) - configurator_check_bios_files_basic - ;; - - "Advanced BIOS file check" ) - configurator_check_bios_files_advanced - ;; - - "Compress Games" ) - configurator_compress_games_dialog - ;; - - "Download/Update Themes" ) - if [[ $(check_network_connectivity) == "true" ]]; then - configurator_online_theme_downloader - else - configurator_generic_dialog "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored." - configurator_tools_and_troubleshooting_dialog - fi - ;; - - "Download PS3 Firmware" ) - if [[ $(check_network_connectivity) == "true" ]]; then - configurator_rpcs3_firmware_updater - else - configurator_generic_dialog "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored." - configurator_tools_and_troubleshooting_dialog - fi - ;; - - "Backup RetroDECK Userdata" ) - configurator_generic_dialog "This tool will compress important RetroDECK userdata (basically everything except the ROMs folder) into a zip file.\n\nThis process can take several minutes, and the resulting zip file can be found in the ~/retrodeck/backups folder." +"Reset All Emulators" ) + if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then ( - backup_retrodeck_userdata + prepare_emulator "reset" "all" ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Backup in Progress" \ - --text="Backing up RetroDECK userdata, please wait..." - if [[ -f $backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip ]]; then - configurator_generic_dialog "The backup process is now complete." - else - configurator_generic_dialog "The backup process could not be completed,\nplease check the logs folder for more information." - fi - configurator_tools_and_troubleshooting_dialog + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Initialization" \ + --text="RetroDECK is finishing the reset process, please wait." + configurator_process_complete_dialog "resetting all emulators" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi +;; + +"Reset RetroDECK" ) + if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Reset RetroDECK" \ + --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process." + rm -f "$lockfile" + rm -f "$rd_conf" + configurator_process_complete_dialog "resetting RetroDECK" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi +;; + +"" ) # No selection made or Back button clicked + configurator_retrodeck_troubleshooting_dialog +;; + + esac +} + +configurator_about_retrodeck_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: About" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Version History" "View the version changelogs for RetroDECK" \ + "Credits" "View the contribution credits for RetroDECK" ) + + case $choice in + + "Version History" ) + configurator_version_history_dialog + ;; + + "Credits" ) + zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Credits" \ + --filename="$emuconfigs/defaults/retrodeck/reference_lists/retrodeck_credits.txt" + configurator_about_retrodeck_dialog ;; "" ) # No selection made or Back button clicked @@ -822,183 +1090,106 @@ configurator_tools_and_troubleshooting_dialog() { esac } -configurator_move_retrodeck_dialog() { - if [[ -d $rdhome ]]; then - destination=$(configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the RetroDECK data folder.") - case $destination in - - "Back" ) - configurator_tools_and_troubleshooting_dialog - ;; - - "Internal Storage" ) - if [[ ! -L "$HOME/retrodeck" && -d "$HOME/retrodeck" ]]; then - configurator_generic_dialog "The RetroDECK data folder is already at that location, please pick a new one." - configurator_move_retrodeck_dialog - else - configurator_generic_dialog "Moving RetroDECK data folder to $destination" - unlink $HOME/retrodeck # Remove symlink for $rdhome - #move $rdhome "$HOME" - if [[ ! -d $rdhome && -d $HOME/retrodeck ]]; then # If the move succeeded - rdhome="$HOME/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - prepare_emulator "all" "postmove" - conf_write - - configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage" - else - configurator_generic_dialog "The moving process was not completed, please try again." - fi - fi - ;; - - "SD Card" ) - if [[ -L "$HOME/retrodeck" && -d "$sdcard/retrodeck" && "$rdhome" == "$sdcard/retrodeck" ]]; then - configurator_generic_dialog "The RetroDECK data folder is already configured to that location, please pick a new one." - configurator_move_retrodeck_dialog - else - if [[ ! -w $sdcard ]]; then - configurator_generic_dialog "The SD card was found but is not writable\nThis can happen with cards formatted on PC or for other reasons.\nPlease format the SD card through the Steam Deck's Game Mode and try the moving process again." - configurator_welcome_dialog - else - if [[ $(verify_space $rdhome $sdcard) == "true" ]]; then - configurator_generic_dialog "Moving RetroDECK data folder to $destination" - if [[ -L "$HOME/retrodeck/roms" ]]; then # Check for ROMs symlink user may have created - unlink "$HOME/retrodeck/roms" - fi - unlink $HOME/retrodeck # Remove symlink for $rdhome - - ( - dir_prep "$sdcard/retrodeck" "$rdhome" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $rdhome to new location of $sdcard/retrodeck, please wait." - - if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves - unlink $rdhome - fi - - if [[ ! -L "$HOME/retrodeck" ]]; then # Always link back to original directory - ln -svf "$sdcard/retrodeck" "$HOME" - fi - - rdhome="$sdcard/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - prepare_emulator "all" "postmove" - conf_write - configurator_process_complete_dialog "moving the RetroDECK data directory to SD card" - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - fi - fi - fi - ;; - - "Custom Location" ) - configurator_generic_dialog "Select the root folder you would like to store the RetroDECK data folder in.\n\nA new folder \"retrodeck\" will be created in the destination chosen." - custom_dest=$(directory_browse "RetroDECK directory location") - if [[ ! -w $custom_dest ]]; then - configurator_generic_dialog "The destination was found but is not writable\n\nThis can happen if RetroDECK does not have permission to write to this location.\n\nThis can typically be solved through the utility Flatseal, please make the needed changes and try the moving process again." - configurator_welcome_dialog - else - if [[ $(verify_space $rdhome $custom_dest) ]];then - configurator_generic_dialog "Moving RetroDECK data folder to $custom_dest/retrodeck" - if [[ -L $rdhome/roms ]]; then # Check for ROMs symlink user may have created - unlink $rdhome/roms - fi - - unlink $HOME/retrodeck # Remove symlink for $rdhome if the previous location was not internal - - ( - dir_prep "$custom_dest/retrodeck" "$rdhome" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $rdhome to new location of $custom_dest/retrodeck, please wait." - - if [[ ! -L "$HOME/retrodeck" ]]; then - ln -svf "$custom_dest/retrodeck" "$HOME" - fi - - if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves - unlink $rdhome - fi - - rdhome="$custom_dest/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - prepare_emulator "all" "postmove" - conf_write - configurator_process_complete_dialog "moving the RetroDECK data directory to SD card" - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - fi - fi - ;; - - esac - else - configurator_generic_dialog "The RetroDECK data folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the RetroDECK data folder." - rdhome=$(directory_browse "RetroDECK directory location") - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - emulator_post_move - conf_write - configurator_generic_dialog "RetroDECK data folder now configured at $rdhome. Please start the moving process again." - configurator_move_retrodeck_dialog - fi +configurator_add_steam() { + python3 /app/tools/Lutris/shortcut.py + configurator_welcome_dialog } -configurator_online_update_setting_dialog() { - if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then +configurator_version_history_dialog() { + local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata)) + local all_versions_list=() + + for rd_version in ${version_array[*]}; do + all_versions_list=("${all_versions_list[@]}" "RetroDECK $rd_version Changelog" "View the changes specific to version $rd_version") + done + + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK Version History" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Full RetroDECK Changelog" "View the list of all changes that have ever been made to RetroDECK" \ + "${all_versions_list[@]}") + + case $choice in + + "Full RetroDECK Changelog" ) + changelog_dialog "all" + ;; + + "RetroDECK"*"Changelog" ) + local version=$(echo "$choice" | sed 's/^RetroDECK \(.*\) Changelog$/\1/') + changelog_dialog "$version" + ;; + + esac + + configurator_about_retrodeck_dialog +} + +configurator_developer_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Change Multi-user mode" "Enable or disable multi-user support" \ + "Change Update Channel" "Change between normal and cooker builds" \ + "Browse the Wiki" "Browse the RetroDECK wiki online" \ + "USB Import" "Prepare a USB device for ROMs or import an existing collection" \ + "Install RetroDECK Starter Pack" "Install the optional RetroDECK starter pack" ) + + case $choice in + + "Change Multi-user mode" ) + configurator_retrodeck_multiuser_dialog + ;; + + "Change Update Channel" ) + configurator_online_update_channel_dialog + ;; + + "Browse the Wiki" ) + xdg-open "https://github.com/XargonWan/RetroDECK/wiki" + configurator_developer_dialog + ;; + + "USB Import" ) + configurator_usb_import_dialog + ;; + + "Install RetroDECK Starter Pack" ) + if [[ $(configurator_generic_question_dialog "Install: RetroDECK Starter Pack" "The RetroDECK creators have put together a collection of classic retro games you might enjoy!\n\nWould you like to have them automatically added to your library?") == "true" ]]; then + install_retrodeck_starterpack + fi + configurator_developer_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_welcome_dialog + ;; + esac +} + +configurator_retrodeck_multiuser_dialog() { + if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then zenity --question \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroDECK Online Update Check" \ - --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?" + --title "RetroDECK Configurator - RetroDECK Multi-user Support" \ + --text="Multi-user support is current enabled. Do you want to disable it?\n\nIf there are more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis users files will be moved to the default locations.\n\nOther users files will remain in the mutli-user-data folder.\n" if [ $? == 0 ] # User clicked "Yes" then - set_setting_value $rd_conf "update_check" "false" retrodeck "options" + multi_user_disable_multi_user_mode else # User clicked "Cancel" configurator_developer_dialog fi else zenity --question \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroDECK Online Update Check" \ - --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?" + --title "RetroDECK Configurator - RetroDECK Multi-user support" \ + --text="Multi-user support is current disabled. Do you want to enable it?\n\nThe current users saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added." - if [ $? == 0 ] # User clicked "Yes" + if [ $? == 0 ] then - set_setting_value $rd_conf "update_check" "true" retrodeck "options" - else # User clicked "Cancel" + multi_user_enable_multi_user_mode + else configurator_developer_dialog fi fi @@ -1032,110 +1223,93 @@ configurator_online_update_channel_dialog() { fi } -configurator_retrodeck_multiuser_dialog() { - if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroDECK Multi-user Support" \ - --text="Multi-user support is current enabled. Do you want to disable it?\n\nIf there are more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis users files will be moved to the default locations.\n\nOther users files will remain in the mutli-user-data folder.\n" - - if [ $? == 0 ] # User clicked "Yes" - then - multi_user_disable_multi_user_mode - else # User clicked "Cancel" - configurator_developer_dialog - fi - else - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - RetroDECK Multi-user support" \ - --text="Multi-user support is current disabled. Do you want to enable it?\n\nThe current users saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added." - - if [ $? == 0 ] - then - multi_user_enable_multi_user_mode - else - configurator_developer_dialog - fi - fi -} - -configurator_developer_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \ +configurator_usb_import_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --column="Choice" --column="Action" \ - "Change Multi-user mode" "Enable or disable multi-user support" \ - "Change Update Channel" "Change between normal and cooker builds" \ - "Change Update Check Setting" "Enable or disable online checks for new versions of RetroDECK" \ - "Browse the Wiki" "Browse the RetroDECK wiki online" ) + --column="Choice" --column="Description" \ + "Prepare USB device" "Create ROM folders on a selected USB device" \ + "Import from USB" "Import collection from a previously prepared device" ) case $choice in - "Change Multi-user mode" ) - configurator_retrodeck_multiuser_dialog + "Prepare USB device" ) + external_devices=() + + while read -r size device_path; do + device_name=$(basename "$device_path") + external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") + done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') + + if [[ "${#external_devices[@]}" -gt 0 ]]; then + choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --hide-column=3 --print-column=3 \ + --column "Device Name" \ + --column "Device Size" \ + --column "path" \ + "${external_devices[@]}") + + if [[ ! -z "$choice" ]]; then + emulationstation --home "$choice" --create-system-dirs + rm -rf "$choice/.emulationstation" # Cleanup unnecessary folder + fi + else + configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found." + fi + configurator_usb_import_dialog ;; - "Change Update Channel" ) - configurator_online_update_channel_dialog - ;; + "Import from USB" ) + external_devices=() - "Change Update Check Setting" ) - configurator_online_update_setting_dialog - ;; + while read -r size device_path; do + if [[ -d "$device_path/ROMs" ]]; then + device_name=$(basename "$device_path") + external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") + fi + done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') - "Browse the Wiki" ) - xdg-open "https://github.com/XargonWan/RetroDECK/wiki" + if [[ "${#external_devices[@]}" -gt 0 ]]; then + choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --hide-column=3 --print-column=3 \ + --column "Device Name" \ + --column "Device Size" \ + --column "path" \ + "${external_devices[@]}") + + if [[ ! -z "$choice" ]]; then + if [[ $(verify_space "$choice/ROMs" "$roms_folder") == "false" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Configurator Utility - USB Migration Tool" "You MAY not have enough free space to import this ROM library.\n\nThis utility only imports new additions from the USB device, so if there are a lot of the same ROMs in both locations you are likely going to be fine\nbut we are not able to verify how much data will be transferred before it happens.\n\nIf you are unsure, please verify your available free space before continuing.\n\nDo you want to continue now?") == "true" ]]; then + ( + rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - USB Import In Progress" + configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" + fi + else + ( + rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - USB Import In Progress" + configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" + fi + fi + else + configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found with an importable folder." + fi + configurator_usb_import_dialog ;; "" ) # No selection made or Back button clicked - configurator_welcome_dialog - ;; - esac -} - -configurator_welcome_dialog() { - if [[ $developer_options == "true" ]]; then - welcome_menu_options=("RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \ - "Emulator Options" "Launch and configure each emulators settings (for advanced users)" \ - "Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \ - "Reset" "Reset specific parts or all of RetroDECK" \ - "Developer Options" "Welcome to the DANGER ZONE") - else - welcome_menu_options=("RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \ - "Emulator Options" "Launch and configure each emulators settings (for advanced users)" \ - "Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \ - "Reset" "Reset specific parts or all of RetroDECK" ) - fi - - choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --column="Choice" --column="Action" \ - "${welcome_menu_options[@]}") - - case $choice in - - "RetroArch Presets" ) - configurator_retroarch_options_dialog - ;; - - "Emulator Options" ) - configurator_power_user_warning_dialog - ;; - - "Tools and Troubleshooting" ) - configurator_tools_and_troubleshooting_dialog - ;; - - "Reset" ) - configurator_reset_dialog - ;; - - "Developer Options" ) - configurator_generic_dialog "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!" configurator_developer_dialog ;; - esac + } # START THE CONFIGURATOR diff --git a/wiki-rtd/Archive.md b/wiki-rtd/Archive.md new file mode 100644 index 00000000..6d06b613 --- /dev/null +++ b/wiki-rtd/Archive.md @@ -0,0 +1,171 @@ +# Archive +The Archive have some legacy information from the wiki, for those that would want to read it or run some older version of RetroDECK. + +# Legacy included Themes + + +## Alekfull NX (Light) + +| System View | Gamelist View | +|----|----| +| ![rd-theme-AlekfullNXLight-SystemView](https://user-images.githubusercontent.com/1454947/193457765-e56875cd-a34d-4675-8267-56d04d4d1c32.jpeg) | ![rd-theme-AlekfullNXLight-GamelistView](https://user-images.githubusercontent.com/1454947/193457762-4d997ca3-d77c-4993-81bb-0c1a78f240a1.jpeg) | + +**Description:**
+Alekfull NX was inspired by the straightforward and intuitive interface of the Nintendo Switch and offers a similar experience but with a light retro twist. + +Source: [Alekfull NX (Light)](https://github.com/anthonycaccese/alekfull-nx-retropie/tree/retro-deck-esde-1.x-light)
+Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)
+Ported from: [Alekfull-NX for Batocera](https://github.com/fagnerpc/Alekfull-NX)
+Original creator: [fagnerpc](https://github.com/fagnerpc) + +## Retrofix Revisited + +| System View | Gamelist View | +|----|----| +| ![rd-theme-RetrofixRevisited-SystemView](https://user-images.githubusercontent.com/1454947/193457596-05dc4316-9f2a-41ae-aa27-9609c680ec5a.jpeg) | ![rd-theme-RetrofixRevisited-GamelistView](https://user-images.githubusercontent.com/1454947/193457594-b803546b-36eb-4e71-9eca-bfee1d81ba36.jpeg) | + +**Description:**
+Retrofix Revisited is a theme where the goal is to showcase that the art of video games can be more interesting than the games themselves. + +Source: [Retrofix Revisited](https://github.com/anthonycaccese/retrofix-revisited-retropie)
+Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)
+Ported from: [ES Theme Retrofix for Batocera](https://github.com/20GotoTen/es-theme-retrofix)
+Original creator: [20GotoTen](https://github.com/20GotoTen)
+ + +## Slate-DE + +| System View | Gamelist View | +|----|----| +| ![rd-SlateDE-SystemView](https://user-images.githubusercontent.com/1454947/193464197-14cb8c12-77ea-4b8b-965f-fa51a5d004b9.jpeg) | ![rd-SlateDE-GamelistView](https://user-images.githubusercontent.com/1454947/193464213-b73f18a3-840d-4cab-bac2-268bc51fbc03.jpeg) | + +**Description:**
+Slate-DE is based on the community created theme Recalbox-Multi for Recalbox. + +Source: [slate-DE](https://gitlab.com/es-de/emulationstation-de/-/tree/master/themes/slate-DE)
+Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)
+Inspired by: [Recalbox-Multi](https://gitlab.com/recalbox/recalbox-themes/-/tree/master/themes/recalbox-multi) + +## Modern-DE + +| System View | Gamelist View | +|----|----| +| ![rd-ModernDE-SystemView](https://user-images.githubusercontent.com/1454947/193464329-938c5b68-6ae9-4ab6-8ac7-e7312e9698c5.jpeg) | ![rd-ModernDE-GamelistView](https://user-images.githubusercontent.com/1454947/193464333-890444ed-dd85-4322-8056-c3be8df6cad2.jpeg) | + +**Description:**
+Modern-DE is based on ES-Theme-Switch for RetroPie, a lightweight Switch inspired theme. + +Source: [Modern-DE](https://gitlab.com/es-de/emulationstation-de/-/tree/master/themes/modern-DE)
+Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)
+Inspired by: [ES-Theme-Switch](https://github.com/lilbud/es-theme-switch) + + +## NSO Menu Interpreted + +| System View | Gamelist View | +|----|----| +| ![rd-NSO-SystemView](https://user-images.githubusercontent.com/1454947/222733121-975db30a-098c-4f77-aebd-f252ebe8c4cc.png) | ![rd-NSO-GamelistView](https://user-images.githubusercontent.com/1454947/222733148-42d38a12-34d1-4063-8ecc-13d16c1e44d3.png) | + +**Description:**
+NSO Menu Interpreted is a theme that takes inspiration from the menu design of Nintendo Switch Online. + +Source: [NSO-Menu-Interpreted](https://github.com/anthonycaccese/nso-menu-interpreted-es-de)
+Created by: [anthonycaccese](https://github.com/anthonycaccese) & [rogs123](https://github.com/rogs123) + +# Legacy Steam Deck Inputs Pre: 0.7b +These are legacy inputs from the old RetroDECK TEST Official Layout profile for the Steam Deck + +| Command | Button / Combination | +| :--- | :---: | +| RetroArch Menu | `L3+R3` or `SELECT+Y` | +| Quit Game | `START + SELECT` | +| Pause Emulation | `Select + B` | +| Take Screenshot | `Select + A` | +| Select Save State Slot +| `Select + D-Pad UP` | +| Select Save State Slot -| `Select + D-Pad Down` | +| Load State | `Select + L1` | +| Save State | `Select + R1` | +| Rewind Emulation* | `Select + L2` | +| Fast forward Emulation* | `Select + R2` | + +`*` Fast forwarding and rewind must be enabled inside RetroDeck firstly inside the Tools menu. + +## MelonDS + +| Command | Button / Combination | +| :--- | :---: | +| Fast forward Emulation* | `R2 or R4` | +| Swap screen layout | `L3 or R5` | +| Pause/Resume | `R3 or L4` | + + +## CITRA (SA) + +| Command | Button / Combination | +| :--- | :---: | +| Load State | `L4` | +| Save State | `R4` | +| Citra Main Menu | `R5` | +| Swap Screens | `L5` | + +**NOTE:** in order to quit CITRA just exit from the menu. + +## YUZU + +| Command | Button / Combination | +| :--- | :---: | +| Pause/Resume | `R4 + A` | +| Load Amiibo | `R4 + X` | +| Docked/Undocked Mode | `R4 + Y` | +| Yuzu Main Menu | `R4 + B` | +| Exit Yuzu | `R4 + Select` | +| Take Screenshot | `R4` | +| Home | `L4` | + + +## Ryujinx +Please note! +Unfortunately Ryujinx doesn't support the full hotkey customization yet. These are the default hotkeys as of now: + +| Command | Button / Combination | +| :--- | :---: | +| Vsync Toggle | `F1` | +| Sound Mute/Unmute | `F2` | +| Show UI | `F4` | +| Pause/Resume | `F5` | +| Screenshot | `F8` | +| Fulscreen Toggle | `F11` or `Alt+Enter` | + + +## DOLPHIN (SA) + +| Command | Button / Combination | +| :--- | :---: | +| Take Screenshot | `Select + A` | +| Load State | `Select + L2` | +| Save State | `Select + R2` | +| Fastforward | `Select + R4` | +| Slowdown | `Select + L4` | +| Exit Dolphin | `Select + Start` | + + +## PPSSPPSDL (SA) + +| Command | Button / Combination | +| :--- | :---: | +| Fastforward | `R2` | +| Rewind | `L2` | +| Pause/Resume | `R4` | +| Take Screenshot | `L4` | +| Load State | `L5` | +| Save State | `R5` | + + +## Duckstation (SA) + +| Command | Button / Combination | +| :--- | :---: | +| Fastforward | `R4` | +| Rewind | `L4` | +| Load State | `L5` | +| Save State | `R5` | \ No newline at end of file diff --git a/wiki-rtd/Citra-Mods.md b/wiki-rtd/Citra-Mods.md new file mode 100644 index 00000000..2a12e987 --- /dev/null +++ b/wiki-rtd/Citra-Mods.md @@ -0,0 +1,31 @@ +# Citra - 3DS +The `~/retrodeck/mods/citra/` represents the `/load/mods/` folder in Citra. + +**Note:**
+`TITLEID` is different for every game. + + +## How do I add mods? + +**Requirements:** Mod files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +There are two ways of adding mods into Citra + + + +### From Citra +1. Extract any mod from compressed `.zip` or any other format to folders. +2. Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`. +3. Right click on the game you want to add mods into. +4. Click on `Open Mods Location`. +5. Paste the mod files inside that directory, each folder is stored by the `TITLLEID` of the game. +6. Quit Citra + +### From the mod folder directly + +1. Extract any mod files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/mods/citra/`. The folders are all named by `TITLEID`. +3. Past the mods into the right `~/retrodeck/mods/yuzu/` folder. \ No newline at end of file diff --git a/wiki-rtd/Citra-Texture-Packs.md b/wiki-rtd/Citra-Texture-Packs.md new file mode 100644 index 00000000..08f44dfa --- /dev/null +++ b/wiki-rtd/Citra-Texture-Packs.md @@ -0,0 +1,43 @@ +# Citra - 3DS +The `~/retrodeck/texture_packs/citra/` represents the `/load/textures` folder in Citra. + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +**Note:**
+`TITLEID` is different for every game. + +## Enable Custom Textures +* Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`. +* Press `Emulation` -> `Configure` -> `Graphics` -> `Use Custom Textures` and set it to `On`. + + +## How do I add texture packs? + +**Requirements:** Texture pack files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +There are two ways of adding texture packs into Citra + + +### From Citra +1. Extract any texture files from compressed `.zip` or any other format to folders. +2. Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`. +3. Right click on the game you want to add textures into. +4. Click on `Open Custom Textures Location`. +5. Paste the texture folders inside that directory, each folder is stored by the `TITLLEID` of the game. +6. Quit Citra + +### From the texture folder directly + +1. Extract any texture pack files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/texture_packs/citra/`. The folders are all named by `TITLEID`. +3. Move textures into the right `~/retrodeck/texture_packs/citra/` folder. + +Example: + +* You have a `.zip` file for a game that contains the `/load/textures/0000001000` folders. +* All you need to do is take the TITLEID folder: `0000001000` and put it into `~/retrodeck/texture_packs/citra/` +* So the end result looks like: `~/retrodeck/texture_packs/citra/0000001000` \ No newline at end of file diff --git a/wiki-rtd/Development-General-notes.md b/wiki-rtd/Development-General-notes.md new file mode 100644 index 00000000..9568d331 --- /dev/null +++ b/wiki-rtd/Development-General-notes.md @@ -0,0 +1,116 @@ +# Cooker +Cooker, differently from the main (stable) branch, is what it's boiling in the pot now: the bleeding edge of the software development. +Every time a commit or a PR is done, a GitHub action automatically compiles the snapshot with the latest changes and publish them on the [cooker repository](https://github.com/XargonWan/RetroDECK-cooker). +This can be publicly tested and if it's stable will be merged in the main branch creating a new release. + +Useless to say that this channel is not suggested for the end user but it's developer / alpha tester oriented. +Expect major bugs and data loss: be warned. + +# Build instructions + +If you want to build the RetroDECK flatpak on your machine for developing or just testing purposes: +``` +cd ~ +git clone --recursive https://github.com/XargonWan/RetroDECK.git +cd RetroDECK +git submodule init +git submodule update +``` + +install `flatpak flatpak-builder p7zip-full` with your distro's package manager, then: + +``` +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +flatpak install --user -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 org.freedesktop.Platform.ffmpeg-full/x86_64/21.08 +``` + +To build the stable release: +``` +flatpak-builder --user --install --install-deps-from=flathub --install-deps-from=flathub-beta --force-clean --repo=local ~/RetroDECK/retrodeck-main ~/RetroDECK/net.retrodeck.retrodeck.yml +flatpak build-bundle local ~/RetroDECK.flatpak net.retrodeck.retrodeck +``` + +Or alternatively, to build the cooker (experimental) release: +``` +git checkout cooker +flatpak-builder --user --install --force-clean --repo=local ~/RetroDECK/retrodeck-cooker ~/RetroDECK/net.retrodeck.retrodeck.yml +flatpak build-bundle local ~/RetroDECK.flatpak net.retrodeck.retrodeck +``` + +# Debug Mode +It's possible to enter in a sort of debug mode, it's actually the flatpak shell. + +Enter in the flatpak shell: +``` +flatpak run --command=bash net.retrodeck.retrodeck +``` + +Launch ES-DE in debug mode: +``` +emulationstation --debug --home /var/config/emulationstation +``` + +Launch an emulator in debug mode: +``` +ls /app/bin +``` +To get the list of the available binaries to launch, then just write the command, such as `yuzu` or `retroarch` + +This is useful when for example a game is not starting and you want the output printed in the terminal. + +# Manual installation instructions +This method is usually for the beta/cooker testers: +- Download the RetroDECK.flatpak from the [release page](https://github.com/XargonWan/RetroDECK/releases) or from the [cooker release page](https://github.com/XargonWan/RetroDECK-cooker/releases) (be sure to download the correct version, check the date as they're not ordered unfortunately). +- `cd` where the downloded file is located +- `flatpak install RetroDECK.flatpak` or whatever the filename is + +If this doesn´t work: +- cd into your download location +- `flatpak install RetroDECK.flatpak` +- Run it from the start menu or, alternatively, from the terminal by typing `flatpak run net.retrodeck.retrodeck` +- Then the first setup will guide you in the first steps, **please read all the messages carefully** as the rom directory must not be edited in EmulationStation + +## Updating instructions +- uninstall the previous version with `flatpak uninstall net.retrodeck.retrodeck` +- follow installation instructions +- [OPTIONAL] In case of issues it's suggested to remove `~/.var/app/net.retrodeck.retrodeck` and run `flatpak run net.retrodeck.retrodeck --reset`, but this will reset the application configs, please backup your data. +NOTE: this will not be needed after v`0.4.0b`. + +# Managing RetroDECK flatpak file + +Install RetroDECK from flatpak file: +``` +flatpak install RetroDECK.flatpak +``` + +Run RetroDECK: +``` +flatpak run net.retrodeck.retrodeck +``` + +Uninstall RetroDECK: +``` +flatpak uninstall net.retrodeck.retrodeck +``` + +# CLI - (Command Line interface) +There are some functions that can be called via CLI, for a comprehensive list type: +`flatpak run net.retrodeck.retrodeck --help` or `flatpak run net.retrodeck.retrodeck -h` + +Some useful ones: +Resets the whole RetroDECK at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset +``` +Resets RetroArch configs at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset-ra +``` +Resets all the standalone emulators configs at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset-sa +``` + +# Making your own ES-DE theme +Please check the following link link over ES-DE (this is still in development)
+[Theme Development ](https://gitlab.com/es-de/emulationstation-de/-/blob/master/THEMES-DEV.md) diff --git a/wiki-rtd/Dolphin-and-Primehack-Mods.md b/wiki-rtd/Dolphin-and-Primehack-Mods.md new file mode 100644 index 00000000..24f34554 --- /dev/null +++ b/wiki-rtd/Dolphin-and-Primehack-Mods.md @@ -0,0 +1,36 @@ +# Dolphin / Primehack - GC & Wii +Primehack is based on Dolphin so the method is the same. + +The `~/retrodeck/mods/dolphin/` & `~/retrodeck/mods/primehack/` that represents the `/load/GraphicMods` folder.
+ + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +**Note:**
+`GAME_ID` is different for every game. + +## Enable Custom Textures +* Open up Dolphin or Primehack inside `RetroDECK Configurator` by pressing `Open Emulator` - `Dolphin` or `Primehack`. +* Press `Options` -> `Graphic Settings` + +`Enable Graphics Mods` and set it to `On`.
+ +## How do I add mods? + +**Requirements:** Mod files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +### Directly into the mods folder + +1. Extract any mod files from compressed `.zip` or any other format into folders. + +2. Go into mods folders, they contain folders that are all named by `GAME_ID`.
+**Dolphin:**`~/retrodeck/mods/dolphin/`
+**Primehack:**`~/retrodeck/mods/primehack/`. + +3. Move the mods into the right folder:
+**Dolphin:** `~/retrodeck/mods/dolphin/`
+**Primehack:** `~/retrodeck/mods/primehack/`
diff --git a/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md b/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md new file mode 100644 index 00000000..ebf940fb --- /dev/null +++ b/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md @@ -0,0 +1,39 @@ +# Dolphin / Primehack - GC & Wii +Primehack is based on Dolphin so the method is the same. + +The `~/retrodeck/texture_packs/dolphin/` & `~/retrodeck/texture_packs/primehack/` represents the `/load/Textures` folder.
+ + + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +**Note:**
+`GAME_ID` is different for every game. + +## Enable Custom Textures +* Open up Dolphin or Primehack inside `RetroDECK Configurator` by pressing `Open Emulator` - `Dolphin` or `Primehack`. +* Press `Options` -> `Graphic Settings` + +`Load Custom Textures` and set it to `On`.
+ +`Prefetch Custom Textures` and set it to `On`. + +## How do I add texture packs? + +**Requirements:** Texture pack files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +### Directly in the folder + +1. Extract any texture pack files from compressed `.zip` or any other format into folders. + +2. Go into texture pack folders, they contain folders that are all named by `GAME_ID`.
+**Dolphin:**`~/retrodeck/texture_packs/dolphin/`
+**Primehack:**`~/retrodeck/texture_packs/primehack/`. + +3. Move the textures into the right folder:
+**Dolphin:** `~/retrodeck/texture_packs/dolphin/`
+**Primehack:** `~/retrodeck/texture_packs/primehack/`
diff --git a/wiki-rtd/Duckstation-Texture-Packs.md b/wiki-rtd/Duckstation-Texture-Packs.md new file mode 100644 index 00000000..86be8d82 --- /dev/null +++ b/wiki-rtd/Duckstation-Texture-Packs.md @@ -0,0 +1,30 @@ +# Duckstation - PSX +The `~/retrodeck/texture_packs/duckstaiton/` represents the `/duckstation/textures/` folder in Duckstation. + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +**Note:**
+`TITLEID` is different for every game. + +## Enable Custom Textures +* Open up Duckstation inside `RetroDECK Configurator` by pressing `Open Emulator` - `Duckstation`. +* Go to `Settings` -> `Advanced` -> `Tweaks/Hacks`
+ +`Enable VRAM Write Texture Replacement` and set it to `On`.
+ +`Preload Texture Replacements` and set it to `On`.
+ + +## How do I add texture packs? + +**Requirements:** Texture pack files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +### Texture folder directly + +1. Extract any texture pack files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/texture_packs/duckstation/`. The folders are all named by `TITLEID`. +3. Move textures into the right `~/retrodeck/texture_packs/duckstation/` folder. \ No newline at end of file diff --git a/wiki-rtd/EmulationStation-DE-Themes.md b/wiki-rtd/EmulationStation-DE-Themes.md new file mode 100644 index 00000000..2aee3876 --- /dev/null +++ b/wiki-rtd/EmulationStation-DE-Themes.md @@ -0,0 +1,38 @@ +# Themes general information + +## How to switch between themes? +Go into `Main Menu` - `UI Settings` - `Theme Set` to select the theme you want to use. + +## ES-DE Theme List +Look over at the [Theme List](https://gitlab.com/es-de/themes/themes-list) and find themes you like. + +## How do I add additional themes? + +RetroDECK uses [ES-DE](https://www.es-de.org) for its interface so any theme that is compatible with ES-DE can also be used with RetroDECK + +### From the Theme Downloader + +Go into `Main Menu` - `UI Settings` - `Theme Downloader` from there you can download a wide array of themes. + +### From the Internet +If you find a theme you would like to use that is not in the `Theme Downloader` please download it and place it in `~/retrodeck/themes` (make sure the theme has its own folder in that directory). + +## FAQs: Frequently asked questions on Themes + +["Why does the theme I am using not work?" or "Why does the layout look broken?" (black screen with blue text)](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#why-does-the-theme-i-am-using-not-work-or-why-does-the-layout-look-broken-black-screen-with-blue-text) + +[Why does the theme layout look squished?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#why-does-the-theme-layout-look-squished) + +# RetroDECK: Included Theme + +## Art Book Next + +| System View | Gamelist View | +|----|----| +| ![rd-theme-ArtBookNext-SystemView](https://user-images.githubusercontent.com/1454947/193457029-9a7a1207-fe05-4cd1-8b18-eb4112e903e9.jpeg)| ![rd-theme-ArtBookNext-GamelistView](https://user-images.githubusercontent.com/1454947/193457123-505ccd23-6477-43d8-baaa-1360ed3c250e.jpeg) | + +**Description:**
+Art Book Next is a theme that tries to emulate the feeling of flipping trough your game library as if they where pages of a coffee table book. + +Source: [Art Book Next on Github](https://github.com/anthonycaccese/art-book-next-retropie)
+Created by: [anthonycaccese](https://github.com/anthonycaccese) diff --git a/wiki-rtd/EmulationStation-DE-User-Guide.md b/wiki-rtd/EmulationStation-DE-User-Guide.md new file mode 100644 index 00000000..1176aaf8 --- /dev/null +++ b/wiki-rtd/EmulationStation-DE-User-Guide.md @@ -0,0 +1,97 @@ +# The User Guide + +RetroDECK uses EmulationStation Desktop Edition (ES-DE) as its bundled interface. + +The official EmulationStation Desktop Edition user guide is over at their gitlab.
+[EmulationStation Desktop Edition user guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md) + +Note that the guide is written in a general way for the application and not how RetroDECK handles certain configurations. Also note that RetroDECK is currently not shipped with all the emulators ES-DE supports in the user guide. + +_EmulationStation Desktop Edition (ES-DE) and it's guide is written by [Leon Styhre](https://gitlab.com/leonstyhre)
+ Published under the MIT-Licence._ + +# Recommended sections in the user guide: + + +## General Interface + +### General UI Settings +Various settings that affect the user interface.
+[UI Settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#ui-settings) + +### Other UI settings +These are mostly technical settings.
+[Other UI settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings) + +### General navigation +These are the buttons mappings automatically applied by ES-DE.
+[General navigation](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#general-navigation) +If you are using the Steam Deck look at RetroDECKs hotkeys: +[Steam Deck: Hotkeys ](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Hotkeys) + +### Sound Settings +Various sound settings.
+[Sound settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#sound-settings) + +## Game settings and filters + +### Game options menu +Various navigation for the game options menu.
+[Game options menu](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#game-options-menu) + +### Game collections +ES-DE provides two types of collections, Automatic collections and Custom collections, the latter being defined by the user. Collections are as the name implies only collections of games already present in your actual game systems, so they're basically grouping of games into convenient views.
+[Game collections](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#game-collections) + +### Set alternative emulator. +ES-DE allows you to change emulators for systems that has many different emulators.
+[Set alternative emulator](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings-1) + +## Scraping and editing roms: metadata, images etc... + +### Scraper +Contains the various options for the scraper, which is used to download metadata, images and videos for your games.
+[Scraper guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#scraping) + +### Scraper account settings +Setup of ScreenScraper account.
+[Scraper account settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#account-settings) + +### Content Settings +Describes the content types to include in the scraping.
+[Content settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#content-settings) + +### How to: Manually copy custom media files (images, videos etc..) +How to add custom media files to the ES-DE interface. For example you want other images then those on screenscraper or the game you add don't exists.
+[How to: Manually copy custom media files](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#manually-copying-game-media-files) + +### Miximage settings +These are the settings for the miximage generator, which can either be run from the scraper (single-game scraper or multi-scraper) or from the offline generator. The miximage combines the screenshot, marquee, box/cover and physical media images to make a composite picture that is displayed in the gamelist view. There are various settings for the generator.
+ +[Miximage settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#miximage-settings) + +### Metadata editor +In the metadata editor, you can modify the metadata, scrape for game info and media files, clear the entry which will delete all metadata and game media files, or delete the entire game which also removes its file on the filesystem.
+[Metadata editor](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#metadata-editor) + +### Various other scraping settings.
+[Other scraper settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings) + + +## Media, video, themes and slideshow settings + +### Video screensaver settings +Options specific to the video screensaver.
+[Video screensaver settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#video-screensaver-settings) + +### Media viewer settings +Settings for the media viewer that is accessible from the gamelist views.
+[Media viewer settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#media-viewer-settings) + +### Slideshow screensaver settings +Options specific to the slideshow screensaver.
+[Slideshow screensaver settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#slideshow-screensaver-settings) + +### Theme settings +Tells you how to use themes.
+[Theme settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes) diff --git a/wiki-rtd/Emulators-BIOS-and-Firmware.md b/wiki-rtd/Emulators-BIOS-and-Firmware.md new file mode 100644 index 00000000..a219ffe4 --- /dev/null +++ b/wiki-rtd/Emulators-BIOS-and-Firmware.md @@ -0,0 +1,132 @@ +A BIOS or firmware is like the brain of a computer or electronic device. It helps the device start up and makes sure all its parts work together smoothly. In emulation, having the correct BIOS/firmware is important because it allows the software to pretend to be the real device and work properly. +That's why some emulators require BIOS and Firmware files to work correctly or at all. +Generally the bios files should be put in `~/retrodeck/bios`. + +## RetroArch (Libretro) +Some cores may need some BIOS files to work or run correctly. +Here are the most common systems, if you find more we can add them to this wiki. +However the extended information can be found on the [official libretro documentation](https://docs.libretro.com/guides/bios/), just search for your core. +More info by clicking on the system name down here. + +[Sony Playstation](https://docs.libretro.com/library/beetle_psx/#bios) +``` +scph5500.bin PS1 JP BIOS - Required for JP games 8dd7d5296a650fac7319bce665a6a53c +scph5501.bin PS1 US BIOS - Required for US games 490f666e1afb15b7362b406ed1cea246 +scph5502.bin PS1 EU BIOS - Required for EU games 32736f17079d0b2b7024407c39bd3050 +``` + +[SegaCD](https://docs.libretro.com/library/genesis_plus_gx/#bios) +``` +bios_CD_E.bin | MegaCD EU BIOS - Required for MegaCD EU games | e66fa1dc5820d254611fdcdba0662372 +bios_CD_U.bin | SegaCD US BIOS - Required for SegaCD US games | 854b9150240a198070150e4566ae1290 +bios_CD_J.bin | MegaCD JP BIOS - Required for MegaCD JP games | 278a9397d192149e84e820ac621a8edd +``` + +[Sega Saturn](https://docs.libretro.com/library/beetle_saturn/#bios) +``` +sega_101.bin | Saturn JP BIOS - Required for JP games | 85ec9ca47d8f6807718151cbcca8b964 +mpr-17933.bin | Saturn US.mdEU BIOS - Required for US/EU games | 3240872c70984b6cbfda1586cab68dbe +mpr-18811-mx.ic1 | The King of Fighters '95 ROM Cartridge - Required for this game | 255113ba943c92a54facd25a10fd780c +mpr-19367-mx.ic1 | Ultraman: Hikari no Kyojin Densetsu ROM Cartridge - Required for this game | 1cd19988d1d72a3e7caa0b73234c96b4 + +``` +*only required for a specific game + +[PPSSPP](https://docs.libretro.com/library/ppsspp/)
+Starting everything should be included.
+But if you want the original PSP fonts you can place them in `system/PPSSPP/flash0/font` + + +[MSX / SVI / ColecoVision / SG-1000](https://docs.libretro.com/library/bluemsx/#bios)
+Content of [blueMSXv282full.zip](http://bluemsx.msxblue.com/download.html).
+Not the zip itself, its contents must be extracted in `~/retrodeck/bios` folder, more info [here](https://docs.libretro.com/library/bluemsx/#bios). +Starting from v0.5.0b this is automatically provided. + +## Yuzu +Yuzu needs the key files `prod.keys`, `title.keys` and the firmware files in the following directories: + +**Yuzu keys:** `~/retrodeck/bios/switch/keys` + +**Yuzu firmware:** `~/retrodeck/bios/switch/registered` + +The directory tree should look like this example: +``` +~/retrodeck/bios/switch +├── keys +│   ├── prod.keys +│   └── title.keys +└── registered + ├── 02259fd41066eddbc64e0fdd217d9d2f.nca + ├── 02582a2cd46cc226ce72c8a52504cd97.nca + ├── 02b1dd519a6df4de1b11871851d328a1.nca + ├── other 217 files... + └── fd0d23003ea5602c24ac4e41101c16fd.nca +``` + +You can find a complete guide in the [Yuzu official wiki](https://yuzu-emu.org/help/quickstart/#downloading-and-installing-yuzu) on how to extract the BIOS from your Switch. + +## XEMU (Xbox) + +These files must be placed with the correct name in the given folders: +``` +~/retrodeck/bios/mcpx_1.0.bin' +~/retrodeck/bios/Complex.bin' +~/retrodeck/saves/xbox-eeprom.bin' +[OPTIONAL] ~/retrodeck/bios/xbox_hdd.qcow2' +``` +The hard disk is optional as RetroDECK already provides a pre-built 8G Xbox HDD image, free of any copyrighted content, and only containing a dummy dashboard. +So if you want to the complete experience you have to provide your own. + +Usually those files are dumped/found as: +``` +mcpx_1.0.bin +Complex.bin -> Complex_4627v1.03.bin or Complex_4627.bin +xbox-eeprom.bin -> eeprom.bin +xbox_hdd.qcow2 -> xbox_harddisk-D4920.qcow2 +``` +So don't forget to rename them for the RetroDECK standards. + +## PICO-8 + +Pico-8 it's not freeware hence it cannot be included with RetroDECK, however it's supported by using these steps: + +1. Download PICO-8 for `Linux 64-bit` from the [official website](https://www.lexaloffle.com/games.php?page=updates) or where you bought it. +2. Extract the zipfile somewhere on your desktop +3. Copy the content of the extracted pico-8 folder into `~/retrodeck/bios/pico-8/` + +## MelonDS (Standalone), (NDS) + +MelonDS by default needs those files:
+- `~/retrodeck/bios/bios9.bin`
+- `~/retrodeck/bios/bios7.bin`
+- `~/retrodeck/bios/firmware.bin` + +However there is a setting to disable the need of these files by going to: `Tools` -> `Start MelonDS` -> `Yes` -> `Config` -> `Emu settings` -> `DS-mode` and removing the check on `Use external BIOS/firmware files`. +Please be advised that this operation may prevent the games from running correctly. + +## PCSX2 (PS2) + +There a multitude of PS2 bios for a complete list with the hashes check
+[Gametechwiki](https://emulation.gametechwiki.com/index.php/File_hashes#Known_BIOS_Hashes) + +The PS2 bios could be named in the following ways +
+By bios version: `ps2-0200a-20040614.bin` +
+By system name:`SCPH-70012.bin` + +Put the bios inside the bios folder: `~/retrodeck/bios/SCPH-70012.bin` + +Here is a list of common used bios with `bios versions/system names/hashes`. + +``` +ps2-0200a-20040614 - SCPH-70001/SCPH-70011/SCPH-70012 - d333558cc14561c1fdc334c75d5f37b7 -PS2 US BIOS +ps2-0200e-20040614 - SCPH-70002/SCPH-70003/SCPH-70004/SCPH-70008 - dc752f160044f2ed5fc1f4964db2a095 - PS2 EU BIOS +ps2-0200j-20040614 - SCPH-70000 - 0eee5d1c779aa50e94edd168b4ebf42e - PS2 JP BIOS +``` + +## RPCS3 (PS3) +- Download the [latest PlayStation 3 firmware](https://www.playstation.com/en-us/support/hardware/ps3/system-software/). +- `Tools` -> `RetroDECK Configurator` -> `Change settings` -> `RPCS3` -> `File` -> `Install Firmware`. + +For more information on how to load the games check the [official quickstart guide](https://rpcs3.net/quickstart). \ No newline at end of file diff --git a/wiki-rtd/Emulators-Diffrent-controller-layouts.md b/wiki-rtd/Emulators-Diffrent-controller-layouts.md new file mode 100644 index 00000000..6bce1f64 --- /dev/null +++ b/wiki-rtd/Emulators-Diffrent-controller-layouts.md @@ -0,0 +1,60 @@ +# Different controller layouts in games + +## Configurator Switch Y-X and A-B +You can enable a mode that switches the Y-X and A-B buttons for supported Emulators inside the `RetroDECK Configurator`. + +## XBOX layout +Many devices like the `Steam Deck` uses the XBOX layout + +**XBOX button layout:**
+ +| Button Placement | Button | +| :--- | :---: | +| Top | `Y` | +| Left | `X` | +| Right | `B` | +| Bottom | `A` | + + +**Example:**
+So if you are emulating a Xbox game that calls for the button `B` to be pressed it corresponds to the right button. + +### Nintendo Layout + +**Nintendo - button layout:**
+ +| Button Placement | Button | +| :--- | :---: | +| Top | `X` | +| Left | `Y` | +| Right | `A` | +| Bottom | `B` | + + +**Example:**
+So if you are emulating a Nintendo game that calls for the button `A` to be pressed it corresponds to the right button. + + + +## Sony PlayStation Layout +The Sony PlayStation uses it's icon glyphs to represent it's buttons. + +**Sony PlayStation - button layout:**
+| Button Placement | Button | +| :--- | :---: | +| Top | `Triangle` | +| Left | `Square` | +| Right | `Circle` | +| Bottom | `X` | + +**Example:** + +So if you are emulating a PlayStation game that calls for the button `Square` to be pressed it corresponds to the right button. + +**Regional differences:** + +Depending on the region of your Playstation game, the buttons `Circle` and `X` switches the meaning for confirm and cancel (they are still at the same physical location). But it is good to keep in mind if you are used to exiting out of menus with a certain button and wondering why it works in some games while others not. + +**Example:** + +In the EU/US `X` is confirm while in Japan `X` is cancel. \ No newline at end of file diff --git a/wiki-rtd/Emulators-Supported-folders-and-files.md b/wiki-rtd/Emulators-Supported-folders-and-files.md new file mode 100644 index 00000000..60fd794f --- /dev/null +++ b/wiki-rtd/Emulators-Supported-folders-and-files.md @@ -0,0 +1,734 @@ +# General information + +**Disclaimer: This list is a work in progress and might contain errors** + +What follows is a list of each systems supported file extensions and the path to the folder where to put the roms. + +**NOTE: Steam Deck**
+For the Steam Deck the `roms` folder location depends on where you choose to install the roms folder during the RetroDECK installation process.
+It's either on the internal storage: `~/retrodeck/roms` or the SDCard: `/retrodeck/roms`
+ + +[What does ~ mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean) + +# 3DO +- **Roms path:**
~/retrodeck/roms/3do +- **Supported file extensions:**
.iso .ISO .bin .BIN .chd .CHD .cue .CUE .7z .7Z .zip .ZIP + + +# AdvanceMAME +- **Roms path:**
~/retrodeck/roms/mame-advmame +- **Supported file extensions:**
.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP + + +# Adventure Game Studio Game Engine +- **Roms path:**
~/retrodeck/roms/ags +- **Supported file extensions:**
.7z .7Z .zip .ZIP + +# Amstrad + + +## Amstrad CPC +- **Roms path:**
~/retrodeck/roms/amstradcpc +- **Supported file extensions:**
.cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP + + +## Amstrad GX4000 +- **Roms path:**
~/retrodeck/roms/gx4000 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Android (Google) +- **Roms path:**
~/retrodeck/roms/android +- **Supported file extensions:**
.7z .7Z .zip .ZIP + +# Apple + +## Apple II +- **Roms path:**
~/retrodeck/roms/apple2 +- **Supported file extensions:**
.nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP + + +## Apple IIGS +- **Roms path:**
~/retrodeck/roms/apple2gs +- **Supported file extensions:**
.nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP + + +# Arcade +- **Roms path:**
~/retrodeck/roms/arcade +- **Supported file extensions:**
.cmd .CMD .7z .7Z .zip .ZIP + +# Atari + +## Atari 2600 +- **Roms path:**
~/retrodeck/roms/atari2600 +- **Supported file extensions:**
.a26 .A26 .bin .BIN .7z .7Z .zip .ZIP + + +## Atari 5200 +- **Roms path:**
~/retrodeck/roms/atari5200 +- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .7z .7Z .zip .ZIP + + +## Atari 7800 ProSystem +- **Roms path:**
~/retrodeck/roms/atari7800 +- **Supported file extensions:**
.a78 .A78 .bin .BIN .7z .7Z .zip .ZIP + + +## Atari 800 +- **Roms path:**
~/retrodeck/roms/atari800 +- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .rom .ROM .7z .7Z .zip .ZIP + + +## Atari Jaguar +- **Roms path:**
~/retrodeck/roms/atarijaguar +- **Supported file extensions:**
.j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP + + +## Atari Jaguar CD +- **Roms path:**
~/retrodeck/roms/atarijaguarcd +- **Supported file extensions:**
.j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP + + +## Atari Lynx +- **Roms path:**
~/retrodeck/roms/atarilynx +- **Supported file extensions:**
.lnx .LNX .o .O .7z .7Z .zip .ZIP + + +## Atari ST +- **Roms path:**
~/retrodeck/roms/atarist +- **Supported file extensions:**
.st .ST .msa .MSA .stx .STX .dim .DIM .ipf .IPF .m3u .M3U .7z .7Z .zip .ZIP + + +## Atari XE +- **Roms path:**
~/retrodeck/roms/atarixe +- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .7z .7Z .zip .ZIP + + +# Atomiswave +- **Roms path:**
~/retrodeck/roms/atomiswave +- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP + + +# Bandai + + +## Bandai SuFami Turbo +- **Roms path:**
~/retrodeck/roms/sufami +- **Supported file extensions:**
.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP + + +## Bandai WonderSwan +- **Roms path:**
~/retrodeck/roms/wonderswan +- **Supported file extensions:**
.ws .WS .pc2 .PC2 .7z .7Z .zip .ZIP + + +## Bandai WonderSwan Color +- **Roms path:**
~/retrodeck/roms/wonderswancolor +- **Supported file extensions:**
.ws .WS .wsc .WSC .pc2 .PC2 .7z .7Z .zip .ZIP + + +# Bally Astrocade +- **Roms path:**
~/retrodeck/roms/astrocde +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# BBC Micro +- **Roms path:**
~/retrodeck/roms/bbcmicro +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Commodore + + +## Commodore Amiga +- **Roms path:**
~/retrodeck/roms/amiga +- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP + +## Commodore Amiga 600 +- **Roms path:**
~/retrodeck/roms/amiga600 +- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP + + +## Commodore Amiga 1200 +- **Roms path:**
~/retrodeck/roms/amiga1200 +- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP + + +## Commodore Amiga CD32 +- **Roms path:**
~/retrodeck/roms/amigacd32 +- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP + + +## Commodore 64 +- **Roms path:**
~/retrodeck/roms/c64 +- **Supported file extensions:**
.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + + +## Commodore CDTV +- **Roms path:**
~/retrodeck/roms/cdtv +- **Supported file extensions:**
.cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .m3u .M3U .7z .7Z .zip .ZIP + + +## Commodore VIC-20 +- **Roms path:**
~/retrodeck/roms/vic20 +- **Supported file extensions:**
.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + + +# Cave Story (NXEngine) +- **Roms path:**
~/retrodeck/roms/cavestory +- **Supported file extensions:**
.exe .EXE .7z .7Z .zip .ZIP + + +# ChaiLove Game Engine +- **Roms path:**
~/retrodeck/roms/chailove +- **Supported file extensions:**
.chai .CHAI .chailove .CHAILOVE .7z .7Z .zip .ZIP + + +# ColecoVision +- **Roms path:**
~/retrodeck/roms/coleco +- **Supported file extensions:**
.bin .BIN .cas .CAS .col .COL .cv .CV .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP + + +# Capcom Play System +- **Roms path:**
~/retrodeck/roms/cps +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Daphne Arcade LaserDisc Emulator +- **Roms path:**
~/retrodeck/roms/daphne +- **Supported file extensions:**
.daphne .singe + + +# Doom +- **Roms path:**
~/retrodeck/roms/doom +- **Supported file extensions:**
.wad .WAD .iwad .IWAD .pwad .PWAD + + +# DOS (PC) +- **Roms path:**
~/retrodeck/roms/dos +- **Supported file extensions:**
.bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z + + +# Dragon 32 +- **Roms path:**
~/retrodeck/roms/dragon32 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Fairchild Channel F +- **Roms path:**
~/retrodeck/roms/channelf +- **Supported file extensions:**
.bin .BIN .chf .CHF .7z .7Z .zip .ZIP + + +# FinalBurn + +## FinalBurn Alpha +- **Roms path:**
~/retrodeck/roms/fba +- **Supported file extensions:**
.iso .ISO .7z .7Z .zip .ZIP + + +## FinalBurn Neo +- **Roms path:**
~/retrodeck/roms/fbneo +- **Supported file extensions:**
.ccd .CCD .cue .CUE .7z .7Z .zip .ZIP + + +# Intellivision - Mattel Electronics +- **Roms path:**
~/retrodeck/roms/intellivision +- **Supported file extensions:**
.int .INT .bin .BIN .rom .ROM .7z .7Z .zip .ZIP + + +# Infocom Z-machine +- **Roms path:**
~/retrodeck/roms/zmachine +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Java 2 Micro Edition (J2ME) +- **Roms path:**
~/retrodeck/roms/j2me +- **Supported file extensions:**
.jar .JAR .7z .7Z .zip .ZIP + + +# Lutro Game Engine +- **Roms path:**
~/retrodeck/roms/lutro +- **Supported file extensions:**
.lua .LUA .lutro .LUTRO .7z .7Z .zip .ZIP + + +# Multiple Arcade Machine Emulator (MAME) +- **Roms path:**
~/retrodeck/roms/mame +- **Supported file extensions:**
.cmd .CMD .7z .7Z .zip .ZIP + + +# MAME4ALL +- **Roms path:**
~/retrodeck/roms/mame-mame4all +- **Supported file extensions:**
.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP + + +# Multi Emulator Super System (MESS) +- **Roms path:**
~/retrodeck/roms/mess +- **Supported file extensions:**
.chd .CHD .7z .7Z .zip .ZIP + + +# Moonlight Game Streaming +- **Roms path:**
~/retrodeck/roms/moonlight +- **Supported file extensions:**
.moonlight .MOONLIGHT .7z .7Z .zip .ZIP + + +# MSX + +## MSX +- **Roms path:**
~/retrodeck/roms/msx +- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP + + +## MSX1 +- **Roms path:**
~/retrodeck/roms/msx1 +- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP + + +## MSX2 +- **Roms path:**
~/retrodeck/roms/msx2 +- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP + + +## MSX Turbo R +- **Roms path:**
~/retrodeck/roms/msxturbor +- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP + +# Microsoft Xbox + +## Microsoft Xbox +- **Roms path:**
~/retrodeck/roms/xbox +- **Supported file extensions:**
.iso .ISO + + +## Microsoft Xbox 360 +- **Roms path:**
~/retrodeck/roms/xbox360 +- **Supported file extensions:**
.iso .ISO .xex .XEX + + +# Othello Multivision +- **Roms path:**
~/retrodeck/roms/multivision +- **Supported file extensions:**
.bin .BIN .gg .GG .rom .ROM .sg .SG .sms .SMS .7z .7Z .zip .ZIP + + +# Nintendo + + +## Nintendo 64 +- **Roms path:**
~/retrodeck/roms/n64 +- **Supported file extensions:**
.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP + + +## Nintendo 64DD +- **Roms path:**
~/retrodeck/roms/64dd +- **Supported file extensions:**
.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP + + +## Nintendo 3DS +- **Roms path:**
~/retrodeck/roms/n3ds +- **Supported file extensions:**
.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP + + +## Nintendo DS +- **Roms path:**
~/retrodeck/roms/nds +- **Supported file extensions:**
.bin .BIN .nds .NDS .7z .7Z .zip .ZIP + + +## Nintendo Entertainment System (NES) +- **Roms path:**
~/retrodeck/roms/nes +- **Supported file extensions:**
.nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + + +## Nintendo Family Computer (Famicom) +- **Roms path:**
~/retrodeck/roms/famicom +- **Supported file extensions:**
.nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + + +## Nintendo Famicom Disk System +- **Roms path:**
~/retrodeck/roms/fds +- **Supported file extensions:**
.nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP + + +## Nintendo Game and Watch +- **Roms path:**
~/retrodeck/roms/gameandwatch +- **Supported file extensions:**
.mgw .MGW .7z .7Z .zip .ZIP + + +## Nintendo Game Boy +- **Roms path:**
~/retrodeck/roms/gb +- **Supported file extensions:**
.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + + +## Nintendo Game Boy Advance +- **Roms path:**
~/retrodeck/roms/gba +- **Supported file extensions:**
.agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP + + +## Nintendo Game Boy Color +- **Roms path:**
~/retrodeck/roms/gbc +- **Supported file extensions:**
.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + + +## Nintendo GameCube +- **Roms path:**
~/retrodeck/roms/gc +- **Supported file extensions:**
.gcm .GCM .iso .ISO .wbfs .WBFS .wia .WIA .ciso .CISO .gcz .GCZ .elf .ELF .dol .DOL .dff .DFF .rvz .RVZ .tgc .TGC .wad .WAD .m3u .M3U .7z .7Z .zip .ZIP + + +## Nintendo SFC (Super Famicom) +- **Roms path:**
~/retrodeck/roms/sfc +- **Supported file extensions:**
.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + + +## Nintendo Virtual Boy +- **Roms path:**
~/retrodeck/roms/virtualboy +- **Supported file extensions:**
.vb .VB .vboy .VBOY .bin .BIN .7z .7Z .zip .ZIP + + +## Nintendo SNES (Super Nintendo) +- **Roms path:**
~/retrodeck/roms/snes +- **Supported file extensions:**
.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + + +## Nintendo Switch +- **Roms path:**
~/retrodeck/roms/switch +- **Supported file extensions:**
.nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI .7z .7Z .zip .ZIP + + +## Nintendo Satellaview +- **Roms path:**
~/retrodeck/roms/satellaview +- **Supported file extensions:**
.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP + + +## Nintendo Pokémon Mini +- **Roms path:**
~/retrodeck/roms/pokemini +- **Supported file extensions:**
.min .MIN .7z .7Z .zip .ZIP + + +## Nintendo Wii +- **Roms path:**
~/retrodeck/roms/wii +- **Supported file extensions:**
.gcm .GCM .iso .ISO .wbfs .WBFS .wia .WIA .ciso .CISO .gcz .GCZ .elf .ELF .dol .DOL .dff .DFF .rvz .RVZ .tgc .TGC .wad .WAD .m3u .M3U .7z .7Z .zip .ZIP + + +## Nintendo Wii U +- **Roms path:**
~/retrodeck/roms/wiiu +- **Supported file extensions:**
.7z .7Z .zip .ZIP + +# SNK + +## SNK Neo Geo +- **Roms path:**
~/retrodeck/roms/neogeo +- **Supported file extensions:**
.chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP + + +## SNK Neo Geo CD +- **Roms path:**
~/retrodeck/roms/neogeocd +- **Supported file extensions:**
.chd .CHD .cue .CUE .7z .7Z .zip .ZIP + + +## SNK Neo Geo CD +- **Roms path:**
~/retrodeck/roms/neogeocdjp +- **Supported file extensions:**
.chd .CHD .cue .CUE .7z .7Z .zip .ZIP + + +## SNK Neo Geo Pocket +- **Roms path:**
~/retrodeck/roms/ngp +- **Supported file extensions:**
.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + + +## SNK Neo Geo Pocket Color +- **Roms path:**
~/retrodeck/roms/ngpc +- **Supported file extensions:**
.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + + +# Magnavox Odyssey2 +- **Roms path:**
~/retrodeck/roms/odyssey2 +- **Supported file extensions:**
.bin .BIN .7z .7Z .zip .ZIP + + +# OpenBOR Game Engine +- **Roms path:**
~/retrodeck/roms/openbor +- **Supported file extensions:**
.AppImage + +# Tandy + +## Tandy Color Computer +- **Roms path:**
~/retrodeck/roms/coco +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +## Tandy TRS-80 +- **Roms path:**
~/retrodeck/roms/trs-80 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + + +# Tangerine Computer Systems Oric +- **Roms path:**
~/retrodeck/roms/oric +- **Supported file extensions:**
.dsk .DSK .ort .ORT .tap .TAP .wav .WAV + + +# Palm OS +- **Roms path:**
~/retrodeck/roms/palm +- **Supported file extensions:**
.prc .PRC .pqa .PQA .img .IMG .7z .7Z .zip .ZIP + +# NEC + +## NEC PC-8800 Series +- **Roms path:**
~/retrodeck/roms/pc88 +- **Supported file extensions:**
.d88 .D88 .u88 .U88 .m3u .M3U .7z .7Z .zip .ZIP + + +## NEC PC-9800 Series +- **Roms path:**
~/retrodeck/roms/pc98 +- **Supported file extensions:**
.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP + + +## NEC PC Engine +- **Roms path:**
~/retrodeck/roms/pcengine +- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + + +## NEC PC Engine CD +- **Roms path:**
~/retrodeck/roms/pcenginecd +- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + + +## NEC SuperGrafx +- **Roms path:**
~/retrodeck/roms/supergrafx +- **Supported file extensions:**
.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP + + +## NEC TurboGrafx-16 +- **Roms path:**
~/retrodeck/roms/tg16 +- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + + +## NEC TurboGrafx-CD +- **Roms path:**
~/retrodeck/roms/tg-cd +- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + + +## NEC PC-FX +- **Roms path:**
~/retrodeck/roms/pcfx +- **Supported file extensions:**
.cue CUE .ccd .CCD .toc .TOC .chd .CHD .7z .7Z .zip .ZIP + + +# Philips + +## Philips CD-i +- **Roms path:**
~/retrodeck/roms/cdimono1 +- **Supported file extensions:**
.chd .CHD .cue .CUE .iso .ISO + +## Philips Videopac G7000 +- **Roms path:**
~/retrodeck/roms/videopac +- **Supported file extensions:**
.bin .BIN .7z .7Z .zip .ZIP + + +# PICO-8 +- **Roms path:**
~/retrodeck/roms/pico8 +- **Supported file extensions:**
.p8 .P8 .png .PNG + + +# Ports +- **Roms path:**
~/retrodeck/roms/ports +- **Supported file extensions:**
.sh + + +# Sony Playstation + + +## Sony PlayStation (PSX) +- **Roms path:**
~/retrodeck/roms/psx +- **Supported file extensions:**
.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP + + +## Sony PlayStation 2 +- **Roms path:**
~/retrodeck/roms/ps2 +- **Supported file extensions:**
.bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + + +## Sony PlayStation 3 +- **Roms path:**
~/retrodeck/roms/ps3 +- **Supported file extensions:**
.ps3 .PS3 .ps3dir .PS3DIR + + +## Sony PlayStation Portable (PSP) +- **Roms path:**
~/retrodeck/roms/psp +- **Supported file extensions:**
.elf .ELF .iso .ISO .cso .CSO .prx .PRX .pbp .PBP .7z .7Z .zip .ZIP + + +## Sony PlayStation Vita +- **Roms path:**
~/retrodeck/roms/psvita +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# SAM Coupé +- **Roms path:**
~/retrodeck/roms/samcoupe +- **Supported file extensions:**
.dsk .DSK .mgt .MGT .sbt .SBT .sad .SAD .7z .7Z .zip .ZIP + + +# ScummVM Game Engine +- **Roms path:**
~/retrodeck/roms/scummvm +- **Supported file extensions:**
.scummvm .SCUMMVM .svm .SVM + +# Sega + +## Sega Game Gear +- **Roms path:**
~/retrodeck/roms/gamegear +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega Dreamcast +- **Roms path:**
~/retrodeck/roms/dreamcast +- **Supported file extensions:**
.chd .CHD .cdi .CDI .iso .ISO .elf .ELF .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP + + +## Sega Genesis (Mega Drive) +- **Roms path:**
~/retrodeck/roms/genesis +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega Master System +- **Roms path:**
~/retrodeck/roms/mastersystem +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega Mega-CD +- **Roms path:**
~/retrodeck/roms/megacd +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega Mega Drive +- **Roms path:**
~/retrodeck/roms/megadrive +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega Model 2 +- **Roms path:**
~/retrodeck/roms/model2 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +## Sega Model 3 +- **Roms path:**
~/retrodeck/roms/model3 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + + +## Sega NAOMI +- **Roms path:**
~/retrodeck/roms/naomi +- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP + + +## Sega NAOMI GD-ROM +- **Roms path:**
~/retrodeck/roms/naomigd +- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP + + +## Sega Saturn +- **Roms path:**
~/retrodeck/roms/saturn +- **Supported file extensions:**
.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP + + +## Sega Mega Drive 32X +- **Roms path:**
~/retrodeck/roms/sega32x +- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP + + +## Sega Super 32X +- **Roms path:**
~/retrodeck/roms/sega32xjp +- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP + + +## Sega Genesis 32X +- **Roms path:**
~/retrodeck/roms/sega32xna +- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP + + +## Sega SG-1000 +- **Roms path:**
~/retrodeck/roms/sg-1000 +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +## Sega CD +- **Roms path:**
~/retrodeck/roms/segacd +- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + + +# Sharp + +## Sharp X1 +- **Roms path:**
~/retrodeck/roms/x1 +- **Supported file extensions:**
.dx1 .DX1 .2d .2D .2hd .2HD .tfd .TFD .d88 .D88 .88d .88D .hdm .HDM .xdf .XDF .dup .DUP .tap .TAP .cmd .CMD .7z .7Z .zip .ZIP + + +## Sharp X68000 +- **Roms path:**
~/retrodeck/roms/x68000 +- **Supported file extensions:**
.dim .DIM .img .IMG .d88 .D88 .88d .88D .hdm .HDM .dup .DUP .2hd .2HD .xdf .XDF .hdf .HDF .cmd .CMD .m3u .M3U .7z .7Z .zip .ZIP + + +# Sinclair + +## Sinclair ZX81 +- **Roms path:**
~/retrodeck/roms/zx81 +- **Supported file extensions:**
.tzx .TZX .p .P .7z .7Z .zip .ZIP + + +## Sinclair ZX Spectrum +- **Roms path:**
~/retrodeck/roms/zxspectrum +- **Supported file extensions:**
.tzx .TZX .tap .TAP .z80 .Z80 .rzx .RZX .scl .SCL .trd .TRD .sh .SH .sna .SNA .szx .SZX .udi .UDI .mgt .MGT .img .IMG .dsk .DSK .gz .GZ .7z .7Z .zip .ZIP + + +# Solarus Game Engine +- **Roms path:**
~/retrodeck/roms/solarus +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Spectravideo +- **Roms path:**
~/retrodeck/roms/spectravideo +- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP + + +# Stratagus Game Engine +- **Roms path:**
~/retrodeck/roms/stratagus +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Symbian +- **Roms path:**
~/retrodeck/roms/symbian +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Tano Dragon +- **Roms path:**
~/retrodeck/roms/tanodragon +- **Supported file extensions:**
.7z .7Z .zip .ZIP + + +# Texas Instruments TI-99 +- **Roms path:**
~/retrodeck/roms/ti99 +- **Supported file extensions:**
.rpk .RPK .7z .7Z .zip .ZIP + + + +# TIC-80 Game Engine +- **Roms path:**
~/retrodeck/roms/tic80 +- **Supported file extensions:**
.7z .7Z .zip .ZIP + +# Thomson + +## Thomson TO8 +- **Roms path:**
~/retrodeck/roms/to8 +- **Supported file extensions:**
.fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP + + +## Thomson MO/TO Series +- **Roms path:**
~/retrodeck/roms/moto +- **Supported file extensions:**
.fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP + + +# Uzebox +- **Roms path:**
~/retrodeck/roms/uzebox +- **Supported file extensions:**
.uze .UZE .7z .7Z .zip .ZIP + + +# Vectrex +- **Roms path:**
~/retrodeck/roms/vectrex +- **Supported file extensions:**
.bin .BIN .vec .VEC .gam .GAM .vc .VC .7z .7Z .zip .ZIP diff --git a/wiki-rtd/Emulators-What's-included.md b/wiki-rtd/Emulators-What's-included.md new file mode 100644 index 00000000..c8bb4b49 --- /dev/null +++ b/wiki-rtd/Emulators-What's-included.md @@ -0,0 +1,23 @@ +# General information +The goal is to add more emulators and functions over course of the development cycle. + +What follows is a list of all the emulators currently included in RetroDECK: + +# RetroArch +RetroDECK ships will all cores under the stable branch of RetroArch. + +# Standalone Emulators +The following standalone emulators are included + +## Yuzu (Switch) +## Citra (3DS) +## PCSX2 (PS2) +## Cemu (WiiU) +As of 0.7b +## Dolphin (GameCube/Wii) +## Primehack (Metroid Prime - Dolphin Fork) +As of 0.6b +## Xemu (XBOX) +## MelondDS (DS) +## RPCS3 (PS3) +## PPSSPP (PSP) \ No newline at end of file diff --git a/wiki-rtd/FAQs-Frequently-asked-questions.md b/wiki-rtd/FAQs-Frequently-asked-questions.md new file mode 100644 index 00000000..16028587 --- /dev/null +++ b/wiki-rtd/FAQs-Frequently-asked-questions.md @@ -0,0 +1,503 @@ +# General questions: + +## What is the scope of this project? +
Click here to see the answer + +Read the "Whats the long term vision and goals" on the Home page of this wiki. + +
+ +## Do you include any games, firmware or BIOS? +
Click here to see the answer +No, this can never be done for legal reasons. + +
+ +### Can you at least point me towards where I can get them? +
Click here to see the answer +Again...no, this can never be done for legal reasons. + +
+ +## Why are games call ROMs? +
Click here to see the answer + +ROM stands for "Read Only Memory" and was a common method to store games.
+The games where later dumped from their ROM chips into digitalized files that can be played with an emulator.
+Read more on [wikipedia](https://en.wikipedia.org/wiki/Read-only_memory) + +
+ +## What is sudo? +
Click here to see the answer +The command stands for "superuser do" and in the windows world it is called "run as administrator". +Su in "sudo" refers to the "superuser" or in the windows called the "administrator". + +
+ +## Retrodeck is a flatpak, what is it? + +
Click here to see the answer + +A flatpak is generated from a manifest, our manifest is this: https://github.com/XargonWan/RetroDECK/blob/main/net.retrodeck.retrodeck.yml +There is a software named flatpak-builder that is reading that manifest and downloads and builds everything that is needed.
+ +This is creating the RetroDECK.flatpak file that can be distributed as a file or be included in the official Flathub repository accessible from Discovery.
+ +[Flaptak](https://docs.flatpak.org/en/latest/introduction.html) is like a sandbox, with its own read only filesystem that is different from your computer's filesystem, that's why flatpak is safer than installing something directly in your filesystem, moreover it persists after any SteamOS update. + +
+ +## What is RetroDECK cooker? +
Click here to see the answer + + Cooker is a bleeding edge snapshot of the current commits, the action of uploading code to GitHub is called commit.
+As you can understand, the code may not be always reviewed and so the cooker it's unstable by its nature, it's just suggested to testers or developer to try bleeding edge function or to contribute.
+ +More info on the pinned post in #💙-i-want-to-help on our [Discord Server](discord.gg/Dz3szYsP8g). +I don't support the cooker user side. + +
+ +### Why the name cooker? 🍲 +
Click here to see the answer + +That's what cooking in the pot at this moment and not yet ready to be served (released).
This name was also used by Linux Mandrake and Mandriva for the bleeding edge channel. + +
+ +# Updates, feature requests and more devices/OS questions: + +## Will you support the general Linux desktop and not only the Steam Deck? +
Click here to see the answer + +Technically it is working, but the user experience might not be that great it could contain desktop specific bugs and other issues. +You will also need to manually configure the input to match your desktop and might need to tweak more settings. If you want to try it make sure that your distribution has native flatpak support else, you might need to install it. +We will start to tackle desktop bugs and have a bigger desktop focus after the beta period is over. + +
+ +## Will you support other SteamOS or Linux handheld gaming devices with flatpak support? +
Click here to see the answer + + +We do plan to support other SteamOS based devices in the future. But during the BETA we are focusing on the Steam Deck. +You can get it to run on other Linux based devices it is not just as seamless as we want it to be and does not live up to our higher standards. +You will need to manually configure the input to match your device and might need to tweak more settings if you try it on a none Steam Deck device. There might also be some hardware specific bugs. +
+ + +## Will you support Windows or Windows based devices like the ROG Ally? +
Click here to see the answer +No, RetroDECK doesn't support Windows, but the project is fully open source so you can port it if you wish. +As an alternative you could try https://www.retrobat.ovh/ that offers similar functionality. +
+ +## Will you support MacOS? +
Click here to see the answer +Not supported and not planned. +
+ +## Will you support Android/IOS? +
Click here to see the answer +Not supported and not planned. +
+ + +## Will you implement X/Y/Z emulator? +
Click here to see the answer + +Our goal is to implement and configure a selection of the best emulators for each system. If your favorite system is not integrated you can request its integration by opening an issue on this github page. + +
+ +## Will you implement none emulator software inside of RetroDECK like Batocera? +
Click here to see the answer + +Nothing in the short term but maybe in the future. It also need to fit inside the scope of project for example: GZDoom would be ok. But another project like a multimedia center solution like Kodi would not fit. + +
+ +## When does the next version of RetroDECK come out? +
Click here to see the answer +> When it's ready. + +
+ +### When does the version after the upcoming version come out? +
Click here to see the answer + +After the upcoming version.
+ +### When does the version 1.0 of RetroDECK come out? +
Click here to see the answer + +Some time in the future. + +
+ +# Documentation questions + +## I see ~ refereed in documentation and examples, what does it mean? +
Click here to see the answer + +The tilde character ~ is the a short way of saying the logged in users home directory in the UNIX world.
+ +So for example the Steam Deck
+ +`~ = /home/deck`
+ +Read more on [Wikipedia](https://en.wikipedia.org/wiki/Home_directory)
+ +## I see SA refereed in documentation about emulators what does it mean? +
Click here to see the answer + +SA means Standalone and the emulator is not inside RetroArch/LibRetro but a separate program launched within RetroDECK.
+ +## I see CLI refereed in documentation what does it mean? +
Click here to see the answer +CLI stands for command-line interface and is often refereed commands you can run in the the Linux Terminal
+ + + +# Other Emulation Solutions questions: + +## Are you related to EmuDeck? +
Click here to see the answer + +No, the two projects are not related. + +
+ +### So what's the difference between RetroDECK and EmuDeck? +
Click here to see the answer + +Apart of that from the user point of view EmuDeck and RetroDECK may sound similar but technically they're completely different. + +EmuDeck is a shell script that you run in the Steam Decks desktop mode that downloads and configures all the separate emulators & plugins for you from various sources using a built in electron based gui. + +RetroDECK is an all-in-one application contained in a sandboxed environment called "flatpak", that is downloaded from Discover (Flathub). This is Valves and other Linux desktops recommended way of distributing applications on the Steam Deck and Linux desktop in a safe way. It grantees for example even if Valve makes major changes to the file system in a SteamOS update, RetroDECK and it’s configurations will not be touched and will be safe. + +RetroDECK only writes in these two folders: `~/retrodeck` for roms/configurations/bios etc.. And an hidden flatpak folder located in `~/.var/net.retrodeck.retrodeck`. + +As everything is contained within those two folders it will not have conflict if you decide to install an emulator from another source like Yuzu or RetroArch with your RetroDECK setup. Even if you uninstall RetroDECK all your roms/bios/saves/etc.. are safe until you remove the `~/retrodeck` folder. So if you for some reason don't like the application after playing for a while you can easily move out your important files after an uninstall (or you can just reinstall RetroDECK again and start where you left off). + +This approach of everything is in a all-in-one package will also allow RetroDECK to do tighter integrations with each bundled emulator in the future and expose all those settings when you are inside RetroDECK, so you do not need to go into Steam Decks desktop mode to do changes and tweaks. All things should be, in the long term, inside the application itself and you can already see a part of that inside the RetroDECK Configurator in the Tools menu. + +
+ +### Can I install RetroDECK if I have EmuDeck already? +
Click here to see the answer + +Yes, as RetroDECK is completely standalone. + +
+ +## Are you related anyway to Batocera? +
Click here to see the answer +No, but RetroDECK had some dialog before the project started with some of the Batocera crew if there where any plans to start a Batocera non-OS application (there where no plans at that moment and their focus is to make the best retro gaming operative system). RetroDECK and Batocera also have good dialog together with representatives of each projects inside the internal development channels. + +
+ + +## Batocera or EmuDeck or RetroDECK I still don't get it? +
Click here to see the answer + +- Batocera is a retro emulation operative system that you need to boot into separately (like from an SDCard) or replace your current OS.
For the Steam Deck you lose access to the SteamOS features and your emulation gaming is separate from your SteamOS gamemode gaming. That said; Batocera has many years of development time, is a great mature OS with a lot of features. + +- EmuDeck is a shell script that you download and run. The script downloads & configures all the separate emulators & plugins for you from various sources for various operative systems. + +- RetroDECK is an all-in-one application that already provides everything you need without to many extra steps for the user.It is on flathub and thus allows the users to update the application via standard safe operative system update methods. +You can see RetroDECK as the in between of EmuDeck and Batocera. We hope that one day we can offer a complete Batocera-like experience right inside your operative system. + +
+ +## What is your relationship with EmulationStation Desktop Edition (ES-DE)?
+
Click here to see the answer + +ES-DE and RetroDECK are separate projects, but we collaborate to give the best possible user experience.
+We have a unique partnership where inside the ES-DE code is a section just for RetroDECK specific features.
+[Read more on ES-DE FAQs](https://gitlab.com/es-de/emulationstation-de/-/blob/master/FAQ.md#what-is-the-relationship-between-es-de-and-retrodeck) + +
+ +# RetroDECK usage questions: + +## Can I launch RetroDECK from inside of the Steam Decks gamemode? +
Click here to see the answer +Yes, RetroDECK currently only supports Steam Deck's gamemode as it relies on Steam Controller configs.
+To add it into Steam please check the second step of [[Steam Deck: Installation and updates]]. + +
+ + +## Do I have to partition or format my disk/sdcard to install RetroDECK? + +
Click here to see the answer + +No, partitioning or formatting is not needed at all. RetroDECK (differently from AmberELEC, Batocera and others) comes as a flatpak. Just install it as any other application and launch it from your desktop and/or Steam library. +
+ + +## Can I move the ROMs folder to another place? +
Click here to see the answer + +Yes, you can do so inside the configurator and the `Move RetroDECK` option. + +
+ +## Is there a way to reset RetroDECK? +
Click here to see the answer + +Yes, you can reset various parts of the software using the RetroDECK configurator under the option reset
+ +Or you can use CLI arguments in the terminal. + +Resets the whole RetroDECK at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset-all +``` +Resets RetroArch configs at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset-ra +``` +Resets all the standalone emulators configs at factory defaults: +```bash +flatpak run net.retrodeck.retrodeck --reset-sa +``` +
+ + +## How do I uninstall RetroDECK? +
Click here to see the answer + +**On the Steam Deck:**
+ +Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`
+ +* Go into Discover +* Press the `Installed` tab and find RetroDECK +* Press the `Uninstall` button +* Manually backup then remove the ~\RetroDECK folder. Warning! Make a backup your data roms/bios/saves etc if you want to save them else they will be gone. + +
+ + +## Does uninstalling RetroDECK remove my roms, bios and saves? +
Click here to see the answer +No, as long as you don't manually don't delete the ~\RetroDECK folder and it's content your data is safe. You could uninstall RetroDECK and install it again and keep going. + +
+ + +## Where can I find the logfiles? +
Click here to see the answer +> In `~/retrodeck/logs/retrodeck.log` + +
+ +## Can I add a single game to my Steam Library or with Steam Rom Manager? +
Click here to see the answer + +Not yet but might be in the future, it is technical possible but quite complicated and needs to be done via launch script. We hope we can simplify this in the future via an API call or inside the Configurator. + +Example of a launch script to launch to launch a Wii game called Baloon World: + +`flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -e "/run/media/mmcblk0p1/retrodeck/roms/wii/Baloon World.rvz" -b ` + +
+ +## If I installed RetroDECK from outside of discover, do I need to uninstall the application to update? +
Click here to see the answer +If you previously installed from outside of Discover, you can find the instructions here to + +[install from discover](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Installation-and-updates) + +or here + +[to install .flatpak file](https://github.com/XargonWan/RetroDECK/wiki/Developer-notes#managing-retrodeck-flatpak-file).
+ +## After installing RetroDECK manually, Discover is not opening or giving me some errors? +
Click here to see the answer + +This bug is appearing only when installing RetroDECK manually and not from Discover. The discover release is suggested for all the users. +However you can run this to fix it: `flatpak remote-delete retrodeck-origin` + +
+ + +# General emulation & games questions: + +## What emulators and software is included in RetroDECK? +
Click here to see the answer + +You can check this wiki what emulators are currently bundled. We plan to have support for most of the emulators ES-DE support in the long term. + +
+ +## How can I set another default emulator? + +
Click here to see the answer + +The ES-DE interface allows you to change emulators for systems that has many different emulators. In the main menu go to `Other Settings` - `Alternative Emulators` to set other defaults. +
+ + +## Game X/Y/Z is not working or showing black screen +
Click here to see the answer + +Some emulators needs BIOS and/or firmware files, first you can check if you got the [needed ones](https://github.com/XargonWan/RetroDECK/wiki/BIOS-&-Firmware).
+ +Then you can check if your got a bad dump by comparing your hash with the ones of the official lists on the internet, such as [no-intro](https://datomatic.no-intro.org/index.php?page=search&s=64) or even [RetroAchievements](https://retroachievements.org) if your game is supported.
+Moreover please mind that some emulator require very specific roms, please [read here](https://github.com/XargonWan/RetroDECK/wiki/How-to-Manage-your-games#special-roms-formats). +If it still not working you are welcome to ask for support on our [Discord Server](discord.gg/Dz3szYsP8g). + +
+ +## PS2 games are not working or buggy in the RetroArch Core. +
Click here to see the answer + +It's a known issue with if you are using the libretro core but you can use the the standalone pcsx2 emulator to solve this issue.
+Be sure to check that the bios files are in the correct folder. Read more on the [Emulators: BIOS and Firmware](https://github.com/XargonWan/RetroDECK/wiki/Emulators%3A-BIOS-and-Firmware)# page on this wiki. + +
+ +## I configured RetroArch but the configuration was not saved. +
Click here to see the answer + +Configuring RetroArch can be dangerous for an inexperienced user, so RetroDECK is set to don't save the RetroArch configuration upon exiting.
+The configuration must be saved willingly by going to: `Main Menu` -> `Configuration File` -> `Save Current Configuration`.
+If you find some better configurations however, you may contribute by sharing it on the #💙-i-want-to-help channel on our [Discord Server](discord.gg/Dz3szYsP8g) that may be included in the next version. + +
+ +## Will you support Lightguns (Sinden, Gun4IR, Samco etc...)? +
Click here to see the answer + +The long term answer is yes, but there are several issues that need to be addressed from various dependencies that are beyond the scope of what RetroDECK can do by it self. We are talking to several projects and hope to have those issues addressed in the future. Right now the best way to use lightgun hardware is to use Batocera as they have developed native support in their OS. + +
+ +# Steam Deck emulation questions: + +## XBOX games are slow on the Steam Deck +
Click here to see the answer + +Unfortunately on thanks to missing optimizations focusing on the Steam Deck and the hardware is limited in scope makes performance not great. Like most emulators they will get improvements over time and we will follow the XBOX emulators progress with great interest. + +
+ +## The games are stuck at 30FPS on the Steam Deck! +
Click here to see the answer + +Press the [...] button on the Steam Deck, go into the Power menu and see if the Framerate Limit is set to 30FPS and set it to 60FPS or off. + +
+ +## Fast forwarding is slow on the Steam Deck! +
Click here to see the answer + +Same as above: Check the Power menu Framerate Limit. + +
+ + +# Theme questions: + +## How can I add more themes? +
Click here to see the answer +In the future we wish to include a themes browser and downloader, but for the moment you can put your own themes here:
+~/retrodeck/themes + +
+ +## How do you switch between themes inside of RetroDECK? +
Click here to see the answer + +**On the Steam Deck:**
+you can switch between them by pressing the `☰` button to open the menu and then navigate to `UI Settings > Theme Set` to select the theme you want to use. + +
+ +## "Why does the theme I am using not work?" or "Why does the layout look broken?" (black screen with blue text)? +
Click here to see the answer + +* Please make sure you are specifically using a theme that is compatible with [ES-DE](https://www.es-de.org).
+ +* If you are trying to use a theme that was built for Batocera it will likely not be compatible.
+ +* ES-DE uses a unique theme engine so themes are not directly portable from Batocera.
+ +* Please see ES-DE's [User Guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes) for more details. + +
+ + +## Why does the theme layout look squished? +
Click here to see the answer + +* The Steam Deck has a screen aspect ratio of `16:10` and most themes that you will find are built for an aspect ratio of `16:9`. Depending on the theme's design this may cause the layout to appear squished when using it on the Steam Deck's display.
+ +* All of the included themes are built for 16:10 aspect ratio so you should not see this issue with any of them; however if you are downloading a theme from another source there is a chance this can occur for you.
+ +* There are 2 ways to fix this if it does occur: (1) see if a specific version was built for `16:10` aspect ratio and use that instead or (2) edit the theme to make it compatible with that aspect ratio. + +
+ +# Scraping questions + +## Can I manually add custom game images/videos/media for games that I can not scrape? +
Click here to see the answer +Yes, check the file structure over at Emulationstation DE's user guide on gitlab.
+ +## [Manually copying game media files](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#manually-copying-game-media-files) + +
+ +## Where is my scraped data? +
Click here to see the answer +In `~/retrodeck/downloaded_media` + +
+ + +## I got some weird error message about quota after scraping! +
Click here to see the answer + +The error message mentions something about quota. You have a quota limit on how much you can scrape each day from [Screenscraper.fr ](https://www.screenscraper.fr/) where each item you scrape counts as 1 quota of the daily total.
+You can pay them to get a bit more daily quota and show your support or just wait 24 hours.
+
+ +## I got some weird error message about about server or service! +
Click here to see the answer + +The website is down, check [Screenscraper.fr](https://www.screenscraper.fr/) when they get back up. + +
+ +## The scraping is too slow! +
Click here to see the answer + +[Screenscraper.fr](https://www.screenscraper.fr/) offers different types of donations that can increase your speed with extra threads. + +
+ +## My systems storage ran out after scraping! +
Click here to see the answer + +Images and videos takes a lot of space, you can clean some out under `~/retrodeck/downloaded_media` + +
+ +### But I still want them! +
Click here to see the answer + +Delete something else or buy more storage. +
+ +## Can I move the downloaded_media folder? +
Click here to see the answer + +You can move it with the the move RetroDECK option inside the configurator. + +
diff --git a/wiki-rtd/How-can-I-help-with-testing.md b/wiki-rtd/How-can-I-help-with-testing.md new file mode 100644 index 00000000..5127d9e5 --- /dev/null +++ b/wiki-rtd/How-can-I-help-with-testing.md @@ -0,0 +1,73 @@ +# About testing + +There are two ways help us to test features in RetroDECK.
+The first one is our bleeding edge `RetroDECK Cooker` channel.
+The second one is the `Experimental Features` inside the stable version inside the `Developer Options Menu`. + +## 🛑 Warning! Backup before testing! 🛑 +These builds and features can make you loose all data including `ROMS`, `BIOS` and `Scraped Data` etc..
+We **recommend** that you don't run any experimental features or cooker builds on your main gaming machine. + +## 🛑 Warning! Expect bugs and issues! 🛑 +These builds and experimental features can contain several bugs and be unstable. + +## How do I take a backup? + +Backup your `/retrodeck/` and it's content and `/.var/app/net.retrodeck.retrodeck/`. +You could copy the entire folders to a secure location or for a quick test you could just rename both of the folders into something else. +Then RetroDECK will think it's a fresh install. + +Example of renaming:
+`OLDnet.retrodeck.retrodeck/`
+`OLDretrodeck/` + +## Can I help you with testing? +Yes, do the backups above and tell in Discord channel `i-want-to-help` that you are interested in testing out `RetroDECK Cooker` builds or want to give feedback on `Experimental Features`. +You will get some instructions from one of the mods and be promoted to a `BetaTester` role. + +# What is RetroDECK Cooker? +[RetroDECK Cooker](https://github.com/XargonWan/RetroDECK-cooker) are the bleeding edge development builds of [RetroDECK](https://github.com/XargonWan/RetroDECK). These builds are only for development and testing purposes. + +## How do I install cooker builds +You can download the latest `.flatpak` releases from the above link and install them via CLI or from the desktop. + +**NOTE:** +* You need to have set up a sudo password if you want to test on a Steam Deck. +* If you have `RetroDECK` the stable release on your system `RetroDECK-Cooker` will be installed separately since it is a different branch. We do not recommend running cooker on a system where you have a running `RetroDECK` stable. + +### Desktop: + +You should just be able to double click on the .`flatpak` file and what ever application manager/installer (like Discover) you have installed should be able to install it. If that does not work use the CLI method. + +### CLI: + +Run the following command from where you have downloaded the `.flatpak` file.
+`flatpak install RetroDECK.flatpak` + + +## How do I uninstall RetroDECK Cooker? + +### Desktop: +Just go into your application manager/installer (like Discover), find RetroDECK and press uninstall. + + +### CLI: + +Run the following command:
+`flatpak remove RetroDECK` + + +### Why does the cooker release have strange names? +The names are randomly generated to make it easy to see what build you are running. + +# What are RetroDECK experimental features? +Experimental features are a showcase of what proof-of-concepts we are trying out or working on that you can try out even on stable releases and we would like feedback on them. All these features are just conceptual and we hope them release ready in an later major update or scrap them if the don't work out. +Standard backup procedures apply as written above. + +## How do I enable them? + +From CLI run: + +`flatpak run net.retrodeck.retrodeck uuddlrlrstart` + +The `Developer Options Menu` should show up inside the Configurator. diff --git a/wiki-rtd/How-to-Getting-started.md b/wiki-rtd/How-to-Getting-started.md new file mode 100644 index 00000000..12eea100 --- /dev/null +++ b/wiki-rtd/How-to-Getting-started.md @@ -0,0 +1,104 @@ +# Getting started + +This is a guide on how to get started with RetroDECK + +# Step 0: Prerequisites + +## What do I need? +You need to meet the following prerequisites before you start following this guide: + +* You need to have a device to install RetroDECK on (we currently only support the Steam Deck). +* Read up on the FAQs pages:
+[Do you include any games, firmware or BIOS?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#do-you-include-any-games-firmware-or-bios)
+[Where can I get them?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#can-you-at-least-point-me-towards-where-i-can-get-them)
+[What does ~ mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean) +* Have related BIOS & Firmware ready +* Have backup rom files of the games you want to play ready + +# Step 1: Installation & Configuration +Only install RetroDECK from the official channels via flathub! + +## Steam Deck - Installation
+Read and follow the: + +* [Installation guide for the Steam Deck](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Installation-and-updates)
+ +## Linux Desktop - Installation
+ +(more information later) + + +## Other SteamOS devices - Installation
+ +(more information later) + +# Step 2: BIOS & Firmware + +**NOTE:** On the Steam Deck this step needs to be done in Desktop Mode + +## Information +Read up on [BIOS & Firmware](https://github.com/XargonWan/RetroDECK/wiki/BIOS-and-Firmware) + +* The BIOS & Firmware files go into the `~/retrodeck/bios/` directory
+ + +**Example:**
+You have a BIOS for the PSX called `exampleBIOSPSX.bin`, you just put that file into the `~/retrodeck/bios/` folder. + +# Step 3: ROMs + +**NOTE:** On the Steam Deck this step needs to be done in Desktop Mode + +## On ROMs + +Rom files needs to be put in their corresponding system directory inside the `roms` folder.
+Note that the `roms` folder location can be different depending on where you choose to put it during the installation process. The following options are available during the installation: + +### **Choice: Internal**
+If during the installation of RetroDECK you choose the Internal option for the roms folder:
+The roms folder is:`~/retrodeck/roms/` + +### **Choice: SDCard**
+If during the installation of RetroDECK you choose the SDCard option for the roms folder:
+The roms folder is: `/retrodeck/roms/`
+ +(Please note that the `` is an example and not called so inside your Linux/SteamOS system but rather your unique per SDCard ID number).
+ + +## Let's get started on ROMs: + +Read up on [Emulators: Folders & File extensions](https://github.com/XargonWan/RetroDECK/wiki/Emulators-Folders-&-File-extensions) to see what folder each system has. +* Put the corresponding roms inside the corresponding system folder + +**Example:**
+You have an example NES game called `ExampleNESGame.nes`
+You have to put that game into the `/retrodeck/roms/nes` folder. + +# Step 4: Playing the ROMs + +## Steam Deck - Gamemode +Return to gamemode on the Steam Deck and start up RetroDECK. Now the systems you put rom files for should be shown and be able to be played. + +**Example:**
+The NES column should now be shown with our `ExampleNESGame.nes` from `Step 3` + +# Step 5: Making the games "pretty" with videos, images and art. + +Do the following: +1. Make an account on https://www.screenscraper.fr/ +2. Read up on scraping on the [ES-DE Guide](https://github.com/XargonWan/RetroDECK/wiki/EmulationStation-DE-User-Guide#scraping-and-editing-roms-metadata-images-etc) +3. Login to your screenscraper account inside RetroDECK and start scraping. +4. Look at your nice pretty games. + +Also read: +* [I got some weird error message about quota after scraping in a foreign language from screenscraper.fr](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-got-some-weird-error-message-about-quota-after-scraping-in-a-foreign-language-from-screenscraperfr) +* [My system storage ran out after scraping!](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#my-system-storage-ran-out-after-scraping) + +# Step 6: Themes +RetroDECK comes with several themes built in for the ES-DE interface. + +## How to switch between themes? +* On the Steam Deck: you can switch between them by pressing the `☰` button to open the menu and then navigate to `UI Settings > Theme Set` to select the theme you want to use. + +## How to add more themes? +[More information on themes and how to add more](https://github.com/XargonWan/RetroDECK/wiki/EmulationStation-DE-Themes) diff --git a/wiki-rtd/How-to-Manage-your-games.md b/wiki-rtd/How-to-Manage-your-games.md new file mode 100644 index 00000000..48158266 --- /dev/null +++ b/wiki-rtd/How-to-Manage-your-games.md @@ -0,0 +1,84 @@ +# Supported extensions +In order to check which file extensions are supported check the page [Emulators: Folders & File extensions](https://github.com/XargonWan/RetroDECK/wiki/Emulators-Folders-&-File-extensions) + +## Special ROMs formats +Some emulators are working only with specific rips, here is what I gather. + +**XEMU**: you must use iso files called xiso (the extensions are usually `.xiso.iso` or `.iso` only)
+ +**NDS**: needs a decrypted dump
+ +**3DS**: needs a decrypted dump
+ +**PS3**: are folders that need to be with the `.ps3` file extension in the end.
+Example: `Gran Turismo 5.ps3` + +# RetroAchievements +Until we don't implement a proper menu, the RetroAchievements must be enabled from RetroArch:
+`Tools` -> `Start RetroArch` -> `Settings` -> `Achievements`
+Here you have to insert your username and password that you used to register to [RetroAchievements](https://retroachievements.org), then [save your RetroArch config](https://github.com/XargonWan/RetroDECK/wiki/FAQs---Frequently-asked-questions#i-configured-retroarch-but-the-configuration-was-not-saved).

+**NOTE:** not all the games are supported; your game [hash](https://docs.retroachievements.org/FAQ/#what-is-an-ra-hash) must be checked on [RetroAchievements website](https://retroachievements.org). + +# Multidisk/file games: Directory interpreted as files +You can put all the game files inside a sub-folder in order to keep you game list clean, these folder will be seen as the game itself from RetroDECK and not as an actual folder, more info [here](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#directories-interpreted-as-files) on the official ES-DE Documentation. The folder needs to have the corresponding .m3u file and the folder needs to be renamed to the exact filename of the .m3u + +Example on how a structure could be: +``` +─── Dragon Fantasy VII.m3u + ├── Dragon Fantasy VII - Disk1.chd + ├── Dragon Fantasy VII - Disk2.chd + ├── Dragon Fantasy VII - Disk3.chd + └── Dragon Fantasy VII.m3u +``` +In this case the folder will be viewed as a single game and it will launch `Dragon Fantasy VII.m3u` so you can easly swap the disks from RetroArch menu. + +## How do I create a Multidisk Directory? + +Let's use the Dragon Fantasy VII example as written above. + +### Step 1: Make a .m3u sub-folder +Make a new sub-folder inside the PSX roms directory where you move and store the Dragon Fantasy VII files with a .m3u file extension in the end. +The name of the folder will be Dragon Fantasy VII.m3u and the full file path will be: + +`~/retrodeck/roms/psx/Dragon Fantasy VII.m3u` + + +### Step 2: Make a .m3u file inside the folder.m3u +Following the example above, make an empty file inside the Dragon Fantasy VII.m3u folder called the exact same thing as the folder name in this case: `Dragon Fantasy VII.m3u`. Now the full file path to the newly created .m3u file should be like this: + +`~/retrodeck/roms/psx/Dragon Fantasy VII.m3u/Dragon Fantasy VII.m3u` + +### Step 3: Populate the .m3u file + +Open the `Dragon Fantasy VII.m3u` file with an text editor and write the filenames of all files contained in the folder, one per line. +When you are done, the structure of the file should look something like this: + +`Dragon Fantasy VII - Disk1.chd`
+`Dragon Fantasy VII - Disk2.chd`
+`Dragon Fantasy VII - Disk3.chd` + +Note this also works with other files types like `.bin` `.iso` `.cue` `.bin` etc.. You just need to make sure that all the files in the folders are written inside the .m3u file. + +### Step 4: Launch RetroDECK +The ES-DE interface that RetroDECK uses should now pick up on the game as one file and you can change disks inside RetroArch. + +# Emulators compatibility lists +Here is a collection of games that were tested on Steam Deck, not on RetroDECK specifically. +If you find some inconsistences please report them on our `#support` channel on Discord. +* [Xemu](https://xemu.app/#compatibility) +* [Citra](https://citra-emu.org/game/) +* [Dolphin](https://dolphin-emu.org/compat/?nocr=true) +* [Yuzu](https://yuzu-emu.org/game/) +* [PCSX2](https://pcsx2.net/compat/) +* [RPCS3](https://docs.google.com/spreadsheets/d/1EzTcNoKiBaMS4orZrGEOKwMpFOZEFKVSOZjLRJqzEkA/) + +# Scraping + +[Check out FAQ on Scraping on the wiki](https://github.com/XargonWan/RetroDECK/wiki/FAQs%3A-Frequently-asked-questions#scraping-questions) + +## Quick tips +* Register an account on https://www.screenscraper.fr/ (support them on Patreon for faster downloads, more scrapes per day and priority scraping). +* Login to your Screenscraper.fr account inside of the ES-DE interface in RetroDECK +* Choose what content you want to scrape (remember that each content you choose could take up several mb of data per game). +* Do an initial scrape of all the games you want to scrape. +* If some games are missed do a more narrow scraping by enabling `Scraper -> Other Settings -> Interactive Mode -> On`& Scraper -> `Other Settings -> Auto-Accept Single Game Matches -> On` and choose to scrape by games missing metadata. This will allow you to select each game from a list and also tweak the searches of the missing games. In some cases you need to remove certain aspects of the name like if a rom comes both with a Japanese name and English name, you could try to remove one of the names to find a better result. diff --git a/wiki-rtd/Known-Issues.md b/wiki-rtd/Known-Issues.md new file mode 100644 index 00000000..d0076c7a --- /dev/null +++ b/wiki-rtd/Known-Issues.md @@ -0,0 +1,17 @@ +# Not yet officially implemented in RetroDECK +Some of these features can be configured by the users manually but work is being done to implement across the board over time. + +**Missing features:** + +* Cloud saves +* Netplay +* External controller support * +* External display resolution support +* Not all Emulators supported by ES-DE are included as of this moment (more will be added all the time). +* A configurator that is controller usable +* Better art + +( * External controller support "semi works" in some emulators if you have docked the Steam Deck and pair a Bluetooth controller inside the Steam Gamemode GUI. Not all hotkey combinations will work how ever!) + +# Issues, bugs and suggestions +For a list of reported issues please check here on github: [RetroDECK issues](https://github.com/XargonWan/RetroDECK/issues) \ No newline at end of file diff --git a/wiki-rtd/Licences.md b/wiki-rtd/Licences.md new file mode 100644 index 00000000..64910a3b --- /dev/null +++ b/wiki-rtd/Licences.md @@ -0,0 +1,93 @@ +# RetroDECK + +https://github.com/XargonWan/RetroDECK/blob/main/LICENSE + +# Features, front-end and assets + +## ES-DE + +https://gitlab.com/es-de/emulationstation-de/-/blob/master/LICENSE + +https://gitlab.com/es-de/emulationstation-de/-/tree/master/licenses + +## Pixelitos + +https://github.com/ItzSelenux/pixelitos-icon-theme/blob/main/LICENSE + +## Kenny.nl +CC0 & CC1 (Various assets)
+https://www.kenney.nl/assets + +# Emulators & Software + +## RetroArch & LibreRetro + +https://docs.libretro.com/development/licenses/ + +## Duckstation + +https://github.com/stenzek/duckstation/blob/master/LICENSE + +## RPCS3 + +https://github.com/RPCS3/rpcs3/blob/master/LICENSE + +## Dolphin & Primehack + +https://github.com/dolphin-emu/dolphin/blob/master/LICENSE + +https://github.com/Kekun/primehack/blob/master/LICENSE + +## MAME +https://github.com/mamedev/mame/blob/master/COPYING + +## Yuzu + +https://github.com/yuzu-emu/yuzu/blob/master/LICENSE.txt + + +## Ryujinx + +https://github.com/Ryujinx/Ryujinx/blob/master/LICENSE.txt + + +## Citra + +https://github.com/citra-emu/citra/blob/master/license.txt + +## Xenia + +https://github.com/xenia-project/xenia/blob/master/LICENSE + +## Cemu + +https://github.com/cemu-project/Cemu/blob/main/LICENSE.txt + +## Xemu + +https://github.com/xemu-project/xemu + +## PPSSPP + +https://github.com/hrydgard/ppsspp/blob/master/LICENSE.TXT + +## MelonDS + +https://github.com/melonDS-emu/melonDS/blob/master/LICENSE + +## PCXS2 +https://github.com/PCSX2/pcsx2/blob/master/COPYING.GPLv3 + +## Vita3K +https://github.com/Vita3K/Vita3K/blob/master/COPYING.txt + +## ZDoom / GZDoom + +https://github.com/ZDoom/gzdoom/blob/master/LICENSE + +## ScummVM +https://github.com/scummvm/scummvm/blob/master/COPYING + +## Capsimg +https://github.com/rsn8887/capsimg/blob/master/LICENCE.txt + diff --git a/wiki-rtd/Linux-Desktop-Software-recommendations.md b/wiki-rtd/Linux-Desktop-Software-recommendations.md new file mode 100644 index 00000000..43447fae --- /dev/null +++ b/wiki-rtd/Linux-Desktop-Software-recommendations.md @@ -0,0 +1,38 @@ +# Any other recommended software? + +The following software works great with the Linux Desktop and might enhance your RetroDECK experience (these are entirely optional to install). + +## Flips +Flips is a software that let you patch romhacks IPS & BPS files onto the rom files. +It's already on flathub. + +_Made by Alcaro_ + +[Flips](https://flathub.org/apps/details/com.github.Alcaro.Flips) + +## BoilR + +BoilR will show games from other games platforms in your Steam library. It uses the Steam 3rd party shortcuts feature and does not require you to set up anything. You can also use BoilR to manually and automatically download custom art from SteamGridDB. It's already in flathub. + +_Made by Philipk_ + +[BoilR](https://flathub.org/apps/details/io.github.philipk.boilr) + +## JRomManager +A Mame and Retrogaming Rom Manager.
+This more complex application allows you to manage and verify your roms via .dat files. It's already in on flathub and downloadable in Discover. + +_Made by optyfr_ + +[JRomManager](https://flathub.org/apps/details/com.github.optyfr.JRomManager)
+ +## RomM +RomM is a game library roms manager focused in retro gaming. Manage and organize all of your games from a web browser. +Inspired by [Jellyfin](https://jellyfin.org/), allows you to manage all your games from a modern interface while enriching them with IGDB metadata. + +_Made by zurdi15_ + +[RomM](https://github.com/zurdi15/romm) + + + diff --git a/wiki-rtd/PCXS2-Texture-Packs.md b/wiki-rtd/PCXS2-Texture-Packs.md new file mode 100644 index 00000000..8911a704 --- /dev/null +++ b/wiki-rtd/PCXS2-Texture-Packs.md @@ -0,0 +1,30 @@ +# PCXS2 - Playstation 2 +The `~/retrodeck/texture_packs/PCSX2/` represents the `/PCSX2/textures/` folder in PCSX2. + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +**Note:**
+`TITLEID` is different for every game. + +## Enable Custom Textures +* Open up PCSX2 inside `RetroDECK Configurator` by pressing `Open Emulator` - `PCSX2`. +* Press `Settings` -> `Graphics`
+ +`Load Textures` and set it to `On`.
+ +`Async Texture Loading` and set it to `On`.
+ + +## How do I add texture packs? + +**Requirements:** Texture pack files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +### Texture folder directly + +1. Extract any texture pack files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/texture_packs/PCSX2/`. The folders are all named by `TITLEID`. +3. Move textures into the right `~/retrodeck/texture_packs/PCSX2/` folder. \ No newline at end of file diff --git a/wiki-rtd/PPSSPP-Texture-Packs.md b/wiki-rtd/PPSSPP-Texture-Packs.md new file mode 100644 index 00000000..6eff6f8e --- /dev/null +++ b/wiki-rtd/PPSSPP-Texture-Packs.md @@ -0,0 +1,26 @@ +# PPSSPP - PSP +The `~/retrodeck/texture_packs/ppsspp/` represents the `/PSP/TEXTURES/` folder in PPSSPP. + +**Note:**
+Some texture packs could made for a specific version or region of the game. Make sure you have the right rom and textures for it. + +**Note:**
+`TITLEID` is different for every game. + + +## Enable Custom Textures +1. Open up PPSSPP inside `RetroDECK Configurator` by pressing `Open Emulator` - `PPSSPP`. +2. Press `Settings` -> `Tools` -> `Developer Tools` -> `Replace Textures` and set it to `On`. + +## How do I add texture packs? + +**Requirements:** Texture pack files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + + +### How to add textures + +1. Extract any texture pack files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/texture_packs/ppsspp/`. The folders are all named by `TITLEID`. +3. Paste the textures into right folder `~/retrodeck/texture_packs/ppsspp/` diff --git a/wiki-rtd/Playstation-3-RPCS3.md b/wiki-rtd/Playstation-3-RPCS3.md new file mode 100644 index 00000000..4a622ea9 --- /dev/null +++ b/wiki-rtd/Playstation-3-RPCS3.md @@ -0,0 +1,87 @@ +# Where to put the games? +PS3 games comes either as a Blu-ray rip directory (folder) with a bunch of different files or a digital PSN title that needs to be installed (see guide on this page). + +PS3 games should be put under the `retrodeck/roms/ps3/` directory. + +# How to: Install the PS3UPDAT.PUP firmware + +There are two ways to install the firmware: + +## Install PS3 firmware from RetroDECK Configurator + +1. Open RPCS3 `RetroDECK Configurator` - `RetroDECK: Tools` - `Install: PS3 Firmware`. +2. Press `OK` and this will download the PS3 Firmware and open RPCS3. +3. You will get a prompt asking if you want to install the firmware from the /tmp/ folder, say `Yes` +4. Wait for the installation to finish +5. Exit RPCS3 from the GUI under `File -> Exit` + +## Manual Download +1. Download the latest PS3 firmware `PS3UPDAT.PUP` from Sony [here](https://www.playstation.com/en-us/support/hardware/ps3/system-software/) +2. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`. +3. In the RPCS3 interface navigate to `File -> Install Firmware`. +4. In the file browser navigate and select the file `PS3UPDAT.PUP` file. +5. The firmware should now be installed. + +# How to: Get games to show up inside the ES-DE interface +To get the games to show up you need to rename the directory to end with a `.ps3` file extension. + +_Example:_ + +You have directory dump of the a game Blu-ray PlayStation 3 game called Hockey World, the directory is called `Hockey World`. + +To get the it to show up you need to rename and add `.ps3` in the end of the directory name. + +The directory `Hockey World` becomes `Hockey World.ps3` and the game will show up. + + +# How to: Install DLC or patches on disc based games + +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. If you want to do it in `Game Mode` you need to press the `Steam` button and switch between windows using the window switcher. + +If you want to install some DLC or patch you can do that trough RPCS3 itself. + +1. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`. +2. In the RPCS3 interface navigate to `File -> Install Packages/Raps/Edats`. +3. In the file browser navigate and select the file you want to install. +4. The file will be installed inside the a new game directory on the RPCS3 hard drive under + `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` where `GAMEID` is unique for each game [PS3GAMEID-List](https://www.gametdb.com/PS3/List). +5. The patches or dlc should now be installed and in the GAMEID directory. +6. Move the content of the GAMEID directory into the games directory inside the `retrodeck/roms/ps3/GAMENAME.ps3` directory and overwrite & replace the files. +8. You can now remove the `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` directory as the files have been moved. +9. The game can be launched inside the ES-DE interface with patches and DLC installed. + +_Example:_ + +The game `Hockey World.ps3` inside the `retrodeck/roms/ps3/` has some DLC & and a patch you want to install. + +You follow the above guide and install the files. + +The installation made a newly created directory called `BCA111111` under `retrodeck/bios/rpcs3/dev_hdd0/game/`. + +You open up the directory `retrodeck/bios/rpcs3/dev_hdd0/game/BCA111111` and copy all of it's content and paste it into `retrodeck/roms/ps3/Hockey World.ps3` directory and replace/overwrite the files. + +You can then remove the `BCA111111` directory in `retrodeck/bios/rpcs3/dev_hdd0/game/` + +# How to: Install digital PSN titles + +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. If you want to do it in `Game Mode` you need to press the `Steam` button and switch between windows using the window switcher. + +If you want to install some PSN tiltes you can do that trough RPCS3 itself. + +1. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`. +2. In the RPCS3 interface navigate to `File -> Install Packages/Raps/Edats`. +3. In the file browser navigate and select the file you want to install. +4. The file will be installed inside the games directory on the RPCS3 hard drive under + `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` where `GAMEID` is unique for each game [PS3GAMEID-List](https://www.gametdb.com/PS3/List). +5. Install any patches or DLC for the game by repeating step .2 and .3 for each file. +6. After the game is ready move the digital games directory from `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` to `retrodeck/roms/ps3` +7. Rename the directory to the name of the game and add the .ps3 file extension to the end of the directory (see guide on top). +8. The game should now show up and be playable inside the ES-DE interface. + + +_Example:_ + +You installed a file that contained the digital game Hockey World 2, it created a directory called `BCA123456` under `retrodeck/bios/rpcs3/dev_hdd0/game/` + +After that you moved `BCA123456` from `retrodeck/bios/rpcs3/dev_hdd0/game/` to `retrodeck/roms/ps3`. +The directory `BCA123456` is renamed to `Hockey World 2.ps3`. diff --git a/wiki-rtd/RetroArch-Mesen-Texture-Packs.md b/wiki-rtd/RetroArch-Mesen-Texture-Packs.md new file mode 100644 index 00000000..1703070a --- /dev/null +++ b/wiki-rtd/RetroArch-Mesen-Texture-Packs.md @@ -0,0 +1,30 @@ +# RetroArch - NES - Mesen +The `texture_packs/RetroArch-Mesen/` represents `/retroarch/system/HdPacks/` folder. + +**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it. + +## Enable Texture Packs in the Mesen core for certain games +From the `RetroArch Quick Menu` + +* Go to `Core Options` -> `Enable HD Packs` set to `On` + +* Then save the current configuration for that game under `Core Options` -> `Manage Core Options` -> `Save Game Options` + +## How do I add texture packs that can be used by the Mesen Core? + +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + +* All texture packs go into the `texture_packs/RetroArch-Mesen/` folder. +* The texture pack have to be extracted from .zip or other compressed format into a folder. +* The name of the folder must be the same name as that of the rom file the texture pack is for. + +**Example:** + +You want apply a texture pack to a game called `ScaryCastle USA.nes` and you have downloaded the `ScaryCastle TexturePACK HD.zip`. + +1. Extract the `ScaryCastle TexturePACK HD.zip` +2. Move the extracted `ScaryCastle TexturePACK HD` folder into `texture_packs/RetroArch-Mesen/` +3. Rename the `ScaryCastle TexturePACK HD` folder so it has the same name as the rom `ScaryCastle USA` without the `.nes` file extension. +9. Start up RetroDECK and select the ScaryCastle nes games.
+**NOTE:** On the Steam Deck go into GameMode first, then launch RetroDECK. \ No newline at end of file diff --git a/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md b/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md new file mode 100644 index 00000000..f01f921e --- /dev/null +++ b/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md @@ -0,0 +1,42 @@ +# RetroArch - N64 - Mupen64Plus-Next + +The `texture_packs/RetroArch-Mupen64Plus/` represents `/retroarch/system/Mupen64plus/` folder. + +**Note:**
+Some texture packs could made for a specific version or region of the game. Make sure you have the right rom and textures for it. + +## Enable Texture Packs in the Mupen64Plus-Next core for certain games + +From the `RetroArch Quick Menu` + +* Go to `Core Options` -> `GLideN64` -> + +`Use High-Res Textures` set to `On`
+ +`Cache Textures` set to `On`
+ +`Use High-Res Full Alpha Channel` set to `On`
+ +`Use Hi-Res Storage` set to `On`
+ +Then save the current configuration for that game under `Core Options` -> `Manage Core Options` -> `Save Game Options` + +**Optional:** + +`Use High-Res Texture Cache Compression` set to `On` - compresses uncompressed HD Textures into .hts files. + + + + +## How do I add texture packs that can be used by the Mupen64Plus-Next Core? + +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + +* All texture packs go into the `texture_packs//RetroArch-Mupen64Plus/hires_texture/` or `texture_packs/RetroArch-Mupen64Plus/cache/` folder. +* The texture pack have to be extracted from .zip or other compressed format into a folder. + +## Compressed textures in .hts files +Compressed textures that are stored in `.hts` files goes into the `texture_packs/RetroArch-Mupen64Plus/cache/` folder. + +## Uncompressed textures in loose folders or files +Uncompressed textures that are stored in in loose folders or files goes into the `texture_packs/RetroArch-Mupen64Plus/hires_texture/` folder. diff --git a/wiki-rtd/RetroDECK-CLI.md b/wiki-rtd/RetroDECK-CLI.md new file mode 100644 index 00000000..637fb3d2 --- /dev/null +++ b/wiki-rtd/RetroDECK-CLI.md @@ -0,0 +1,79 @@ +# How do I run RetroDECK CLI commands? + +Open a Linux terminal on your desktop (on the Steam Deck you need to be in desktop mode). Depending on what terminal application you have installed the naming of the application can be different.
+ +In Linux distributions that uses KDE desktop environment as well as the Steam Deck; the default application is called _Konsole_. +
+The default command to run retrodeck options and arguments is: + +`flatpak run [FLATPAK-RUN-OPTION] net.retrodeck.retrodeck [ARGUMENTS]` + +Where `[FLATPAK-RUN-OPTION]` is replaced by a flatpak run option (if there is one) and `[ARGUMENTS]` is replaced by arguments. + +**Example:** + +This syntax runs the `--reset-all` argument that resets the application to default settings. + +`flatpak run net.retrodeck-retrodeck --reset-all` + +Where the argument `--reset-all` replaced `[ARGUMENTS]` and `[FLATPAK-RUN-OPTION]`was not needed to it was removed. + +# CLI argument list + +`-h` or `--help` - Prints all the available arguments. + +`-v` or `--version` - Prints the installed RetroDECK version + +`--info-msg` - Prints all the folder paths and various config information. + +`--configurator` - Starts the RetroDECK configurator + +`--compress` - Compresses a specific file to .chd format. It supports .cue .iso and .gdi formats. You need to add the filepath to the file for it to work. + +`--reset-emulator` - Opens a new input where you can input an argument to reset a specific emulator or all emulators to the default settings. Inside the prompt you can type one of the following options to reset it; + +`all-emulators` +`retroarch` +`citra` +`dolphin` +`duckstation` +`melonds` +`pcsx2` +`ppsspp` +`primehack` +`rpcs3` +`xemu` +`yuzu` + +`--reset-retrodeck` - Resets the entirety of RetroDECK to default settings! +
+⚠️ WARNING! BACK UP YOUR DATA BEFORE RUNNING THIS ARGUMENT! ⚠️ + +# General flatpak commands + +If you want to check RetroDECK's flathub page [click here](https://flathub.org/apps/details/net.retrodeck.retrodeck)
+Here follows some general flatpak commands that could be useful:
+ + +## Install RetroDECK from CLI + +If you want to install RetroDECK from CLI type:
+`flatpak install flathub net.retrodeck.retrodeck` + +NOTE! This will work on the Steam Deck out of the box.
+But on the Linux desktop you need to check your distribution if it ships with both Flatpak and Flathub integration installed, if not you may need to install it. Check your distributions or flathubs documentation on how to install it on your desktop. + +## Update all flatpaks from CLI + +If you want to update all installed flatpaks from CLI type:
+`flatpak update` + +Then answer `y` on the input prompt. + +## Update only RetroDECK from CLI + +If you just want to update RetroDECK type:
+ +`flatpak update net.retrodeck.retrodeck` + +Then answer `y` on the input prompt. \ No newline at end of file diff --git a/wiki-rtd/RetroDECK-Configurator.md b/wiki-rtd/RetroDECK-Configurator.md new file mode 100644 index 00000000..8490b387 --- /dev/null +++ b/wiki-rtd/RetroDECK-Configurator.md @@ -0,0 +1,154 @@ +# The RetroDECK Configurator + +The `RetroDECK Configurator` is a unique multi-use toolbox that exists within RetroDECK to manage/configure/change/reset/edit many aspect of the application and built around the `RetroDECK Framework`. + +The`RetroDECK Configurator` can be found: + +* In the main menu inside the ES-DE interface + +* From CLI + +* From the `.desktop` desktop shortcut. + +What follows are the commands you can use inside the Configurator (more commands will be added during development). + +# Presets & Settings + +In this menu you can set various presets. + +## Global: Presets & Settings +In this menu you will find presets and settings that span over multiple emulators. + +### RetroAchivements: Login +Login to RetroAchievements in all supported emulators and cores. + +### RetroAchivements: Logut +Logut from RetroAchievements in all supported emulators and cores. + +### RetroAchivements: Hardcore Mode +Enables `Hardcore Mode` from RetroAchievements in all supported emulators and cores. + +### Widescreen: Enable/Disable +Enables or disable Widescreen in all supported emulators and cores. + +### Swap A/B and X/Y: Enable/Disable +Swaps `A/B` `X/Y` in all supported emulators and cores. + +### Ask to Exit prompt: Enable/Disable +Enables or disables ask to exit prompts in all supported emulators and cores. +Note: If you disable this, the emulators will directly exit. + +## RetroArch: Presets & Settings +In this menu you will find presets and settings for RetroArch. + +### Borders: Enable/Disable + +Enable / Disable borders across the RetroArch cores you choose. + +### Rewind: Enable/Disable + +Enable / Disable rewind across all of RetroArch (this may impact performance on some more demanding systems). + +## Wii & Gamecube: Presets & Settings +In this menu you will find presets and settings for Dolphin and Primehack. + +### Dolphin Textures: Universal Dynamic Input +Enable / Disable Venomalias's Universal Dynamic Input Texture for Dolphin. + +### Primehack Textures: Universal Dynamic Input +Enable / Disable Venomalias's Universal Dynamic Input Texture for Primehack. + +# Open Emulator +Here you launch and configure each emulators settings, the option you choose will open that emulators GUI. For documentation on how to change the settings of each emulators settings please check the website of each emulator. + +(Please note that several emulators where not designed with controller input in mind for handling the applications GUI, just the games. So you might need to use other inputs like the Steam Decks touchscreen or a mouse and key board to navigate properly). + +The options are the following: + +## RetroArch +Opens RetroArch + +## Citra +Opens Citra + +## Dolphin +Opens Dolphin + +## Duckstation +Opens Duckstation + +## MelonDS +Opens MelonDS + +## PCSX2 +Opens PCSX2 + +## PPSSPP +Opens PPSSPP + +## RPCS3 +Opens RPCS3 + +## XEMU +Opens XEMU + +## Yuzu +Opens Yuzu + +# RetroDECK: Tools + +## Tool: Move files + +This option lets you choose the installation path of the RetroDECK folder that handles ROMS,Saves, BIOS etc... to a new location. +You get the following three options. + +`Internal Storage` - Moves the folder to the internal storage.
+`SD CARD` - Moves the folder to the SD CARD
+`Custom Location` - Choose where you want the RetroDECK folder to be.
+ +## Tool: Compress games +This option enables you to compress disc based game image files `.gdi` `.iso` `.bin` `.cue` to the less space demanding `.chd` format. +You can choose either a single game or many. + +## Install: RetroDECK SD Controller Profile +This option installs the Steam Deck controller profile to RetroDECK it also resets all emulators configurations to input the correct bindings. + +## Install: PS3 Firmware +This option downloads and installs the latest PS3 firmware. You will have to press OK to install it. + +## RetroDECK: Change update settings +This option lets you turn on or off automatic updates on launch. + +# RetroDECK: Troubleshooting + +## Backup: RetroDECK Userdata +Creates backups of the user data folders + +## Check & Verify: Multi-file structure +Verifies to the structure of multi disc/file games that uses `.m3u` files. + +## Check & Verify: BIOS +Shows a detailed BIOS list of missing and current BIOS. + +## RetroDECK: Reset +The reset menu resets various features + +### Reset Specific Emulator +Opens up a menu where you can reset a specific emulator + +### Reset All Emulators +Resets all the emulators at once + +### Reset RetroDECK +Resets the entirety of RetroDECK. + +⚠️ WARNING! BACK UP YOUR DATA BEFORE RUNNING THIS! ⚠️ + +# RetroDECK: About +This menu contains information about RetroDECK + +## Version history +Displays the changelogs + +## Credits +Displays the credits \ No newline at end of file diff --git a/wiki-rtd/RetroDECK-Credits-and-The-Team.md b/wiki-rtd/RetroDECK-Credits-and-The-Team.md new file mode 100644 index 00000000..40835378 --- /dev/null +++ b/wiki-rtd/RetroDECK-Credits-and-The-Team.md @@ -0,0 +1,99 @@ +# Credits & The Team + +This is the page where we try to introduce the team and thank everyone who have contributed to the project so far.
+If you feel you have contributed to the project but lacks mention, please contact us on discord!
+ +# The Team + +## Community Management + +### [Lazorne](https://github.com/Lazorne) +Community management/outreach, testing, documentation, feature suggestions and some design. + +
. +Internal meme lord and leader of the "Nordic Pizza Heresy Cult". Instigator of the internal pizza war and "Banana Warlock". +
+ +## Developers + +### [XargonWan](https://github.com/XargonWan) +RetroDECK project founder and also one of the founding members of [AmberELEC](https://amberelec.org/). + +
. +General of the "Italian Pizza Legion" in the internal pizza war. +
+ +### [IceNine451](https://github.com/icenine451) +Creator of the `RetroDECK configurator`, the `RetroDECK Framework` and various cool things. + +
. +Freedom loving leader of the "Murican Cheese Crust Patriots" in the internal pizza war. +
+ +### [Lx32](https://github.com/Lx32) +Develops various new features, functions and tools. + + +
. +1st Commander of the "Italian Pizza Legion" in the internal pizza war. +
+ +## Testers + +### [dottormac](https://github.com/redeemer666) +Does bleeding edge cooker testing (lives in the danger zone), some feature suggestions and design. + +
. +2nd Commander of the "Italian Pizza Legion" in the internal pizza war (might be a spy for the Nordic Cult or Muricans). +
+ +# Collaborators + +### [Niroku / Atari](https://github.com/Hew-ux) +Helps with community management, is also part of [Batocera](https://batocera.org/) + +### [Leon Styhre](https://gitlab.com/leonstyhre) +Maker of EmulationStation Desktop Edition + +### [anthonycaccese](https://github.com/anthonycaccese/) +Theme creator for ES-DE and [AmberELEC](https://amberelec.org/) + +### [Zurdi](https://github.com/zurdi15) +Creator of RomM and other projects. + +# Additional credits + +### [RavenKilit](https://github.com/RavenKilit) +Did some code and testning, contributed to [AmberELEC](https://amberelec.org/) + +### MorGuux +Made the RetroDECK steamdb graphics for the old logo + +### Pixelguin +Made the new logo and steamdb graphics + +### teotwaki +Generous cloud hosting sponsor + +### [Gabeboii](https://github.com/gabeeeboii) +Webmaster + +### Draco +Server Administration + +### [ItzSelenux](https://github.com/ItzSelenux) +Maker of [pixelitos](https://github.com/ItzSelenux/pixelitos-icon-theme) + +### [Kenny.nl](https://twitter.com/KenneyNL) +[The Kenny.nl project](https://www.kenney.nl/) provides several free game assets under open licenses. + +# Special Thanks + We want give special thanks to: +* Our [Patreons](https://www.patreon.com/RetroDECK) that keeps the build servers running and provide feedback. +* All related emulation projects. +* All people that have put both time and money into emulation projects. +* All the users who help others with support, guidance and good spirit. +* All the users who help with testing and reporting issues. +* All the community creators who creates various art and assets for the community. + +You are the ones that makes this project possible. \ No newline at end of file diff --git a/wiki-rtd/RetroDECK-Folders-and-filepaths.md b/wiki-rtd/RetroDECK-Folders-and-filepaths.md new file mode 100644 index 00000000..45b61192 --- /dev/null +++ b/wiki-rtd/RetroDECK-Folders-and-filepaths.md @@ -0,0 +1,71 @@ +# What are the various folders and filepaths in RetroDECK? + +RetroDECK is a Flatpak a sandboxed bundle of different applications and configurations. One part of the files are none writable while others are. + +### `~/retrodeck` +It's the home folder of RetroDECK itself, it contains: +- `bios`, the bios folder, the actual `retroarch/system` folder is poiting here `~/.var/app/net.retrodeck.retrodeck/config/emulationstation/.emulationstation/downloaded_media` is pointing here +- `.downloaded_media`, this is where you scraped data is saved (images, videos, logos..), +- `.lock`, this file tells RetroDECK that the settings are done and to not reset them, if this file is missing it will trigger a first boot showing the setup. Here is written the software version that is compared to the actual version to check if an update is needed. +- `.logs`, logs folder +- `roms`, if internal is chosen the roms folder is here, otherwise it's in `/retrodeck/roms` +- `saves`, emulators saves file location +- `screenshots`, emulators screenshots location +- `states`, emulators save states location +- `gamelists`, RetroDECK's gamelist location +- `texture_packs`, emulators texture packs location +- `mods`, emulators mods location +- `.themes`, additional themes folder, `~/.var/app/net.retrodeck.retrodeck/config/emulationstation/.emulationstation/themes` is poiting here + +### `~/.var/app/net.retrodeck.retrodeck` +This folder is the only flatpak folder that is editable user side, it's mapped as `/var` in the flatpak itself, from now on we will use the flatpak paths unless differently specified. + +### `/var` +- `config`, contains all the various software configs such as RetroDECK, retroarch folder and standalones emulator configs +-- `retroarch`, the retroarch folder (see below) +-- `emulationstation`, emulationstation home folder (see below) +-- `retrodeck`, to not be confued with `~/retrodeck/`, this folder contains the retrodeck configs, see below. +-- various standalone emulators config folders such as `yuzu`, `pcsx2`, `melonDS`, `dolphin-emu` and so on. + +### `/var/config/retroarch` +- `system`, retroarch bios (system) folder, this points to `~/retrodeck/bios` +- `core`, retroarch cores folder, this is populated by `/app/share/libretro/cores` at the first startup (or with `--reset`, `--reset-ra`) +- `retroarch.cfg`, the retroarch config, the original one is located in `/app/retrodeck/emu-configs/retroarch.cfg`, and similarly to above it's generated at the first startup + +### `/var/config/emulationstation` +- `ROMs`, this is linked to the roms folder in `~/retroeck/roms`or `/roms` +- `.emulationstation`, ES-DE main folder +-- `custom_systems`, where the customs systems are kept (example the tools file), check the official ES-DE docs for more info. +-- `downloaded_media`, this points to `~/retrodeck/.downloaded_media` +-- `themes`, this points to `~/retrodeck/.themes` +-- `es_log.txt`, ES-DE log file +-- `es_settings.xml`, ES-DE settings file +### `/var/config/retrodeck` +- `tools` +- `version`, this file carries the RetroDECK version number and it ś generated during the flatpak build. + +### `/var/data` +Some emulators, like yuzu, needs this path, here for example is even symlinked the yuzu keys and firmware folder. + +### `/var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files` +This is mapped as the `/app` folder in flatpak, this folder is inside the read only file system and so all this tree is immutable (actually can be edited by root for develop purposes).
+FYI: you can edit the with KWrite, it justs ask you for the root password when saving. + +### `/app/bin` +All the binary files, like `retrodeck.sh`, the main program (wrapper). +All these programs can be launched in developer mode just invoking them in the terminal. + +### `/app/retrodeck` +This folder contains the default configuration that is restored with the various `--reset` commands. +- `emu-configs` +- `steam` +- `tools` +- `es_settings.xml` +- `tools-gamelist.xml` + +### `/var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files` +Non-flatpak path: this folders contain file such as the .desktop, icons, etc. + + + + diff --git a/wiki-rtd/RetroDECK-Social-media-rules.md b/wiki-rtd/RetroDECK-Social-media-rules.md new file mode 100644 index 00000000..860dfff2 --- /dev/null +++ b/wiki-rtd/RetroDECK-Social-media-rules.md @@ -0,0 +1,80 @@ +# Discord + +## Rules: DO NOT + +1. DO NOT: Discuss any type of piracy whatsoever. + +2. DO NOT: Ask for roms, bios, games and where/how to find them and don't PM the RetroDECK team members about it either. + +3. DO NOT: Post NSFW & NSFL content. + +4. DO NOT: Try to sell or promote your products and/or services, this is not a store or a marketplace (discussing experiences, asking for advice and reviews of products related to gaming and retro gaming is fine). + +5. DO NOT: Post hateful comments. + +6. DO NOT: Discuss your political or religious viewpoints here. + +7. DO NOT: Attack server members in the channels or private in PMs on: political viewpoints, religious/non religious believes, gender, race, sexual orientation, age or any other way (if you have been attacked please message a mod in a PM). + +8. DO NOT: Spam or flood the channels. + +9. DO NOT: Share information or pictures about leaked games. + +10. DO NOT: spoil any new or old game or media. If you want to write about it, use the ||spoiler tag|| to prevent to ruin other user's fruition. + +
Rule 42 + +DO NOT : Break the space time continuum with time travel and/or para dimensional travelling. + +
+ +## Rules: DO + +11. DO: Try to keep memes, light spam and funny posts in the ⁠🐸-random-memes channel (however flooding is always prohibited and all server rules must till be respected even in this channel). + +12. DO: Be patient, be polite, don’t swear and be respectful to each other. + +13. DO: Try your best to keep the topic in the correct channel. + +14. DO: Try your best to help each other. + +15. DO: Be mindful that the RetroDECK team is working on this project out of passion and spending their own free time to make it happen. You can't expect 24/7 hours support and help. When you do feel the need to ask for help or advice from the RetroDECK team respect rule 11. + + + +# Lemmy / Reddit + +### 1. DO NOT: Post links/discussion of illegal, copyrighted, pirated or leaked content. + +* Post links directly to pirated games, ROMs, BIOSes or shader caches. +* Partake in discussion or encouragement to in piracy. +* Ask for technical support for pirated games/software. +* Post links or discussions to leaked content of any kind. +* Censoring or obfuscating parts of an link to any part of the content above to bypass filters. + +### 2. DO NOT: Post NSFW & NSFL content. + +### 3. DO NOT: Make posts about: buying, selling, trading, begging, giveaways, self or crowd-funding without asking. + +* You can’t promote crowd-funding, begging, affiliate links or other form of raising funds without asking. +* Discussing experiences, giving advice or reviews of products related to gaming and retro gaming is always OK! +* All promotions or marketing must be vetted and approved by the RetroDECK team on Discord. + +### 4. DO NOT: Make posts about anything other then RetroDECK, Emulation or community relevant content. + +### 5. DO NOT: Post hateful comments or posts. + +* Don’t attack any community member on: political viewpoints, religious/non religious believes, gender, race, sexual orientation, age or any other way (if you have been attacked please message the a mod here or on discord). +* Be patient, be polite, be kind, don’t swear and be respectful to each other. + +### 6. DO NOT: Discuss your political or religious viewpoints here. + +### 7. DO NOT: Spread misinformation + +* Spread intentional misinformation. +* Impersonate another: entity, company or person. + + + +# Vivi e lascia vivere +// RetroDECK Team \ No newline at end of file diff --git a/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md b/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md new file mode 100644 index 00000000..3e19af99 --- /dev/null +++ b/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md @@ -0,0 +1,14 @@ +# How RetroDECK was born? +Let's take a step back. + +RetroDECK was born on March 4th 2022 in Kyoto, Japan, with the name of [351EDECK](https://imgur.com/a/tGC9ZGO) because I am also one of the founding members of 351ELEC, now [AmberELEC](https://amberelec.org/). +What I wanted to do was to "port" 351ELEC to the Steam Deck, but instead of doing a custom firmware to flash, doing it as an application that could be launched from Steam. +Eventually, after talking to the other team members, we decided that we didn't want to support another platform such as Steam Deck, so I decided to continue the project on my own, renaming it to RetroDECK. + +Back then I had many options on how to create 351EDECK, such as a bash script, appimage and flatpak. +In the beginning I opted for a simple shell script, in fact RetroDECK/351EDECK v0.1a existed as a mere shell script. +However I had bad feedbacks from the community because someone was feeling unsafe to give my script the root privileges so evaluating the Steam Deck use case I felt like it was not the right direction to take, the people was not feeling comfortable to give the sudo to a random script downloaded from the internet, so they asked to packetize it in some way. + +Valve suggests the flatpak technology to port the applications on Steam Deck so, I decided to follow their guidelines, and I created the RetroDECK that you know today, starting from a Manjaro virtual machine as a development environment because I didn't have a Steam Deck yet. + +-Xargon \ No newline at end of file diff --git a/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md b/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md new file mode 100644 index 00000000..752809a7 --- /dev/null +++ b/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md @@ -0,0 +1,330 @@ +# General information + +[I see SA refereed in documentation about emulators what does it mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs%3A-Frequently-asked-questions#i-see-sa-refereed-in-documentation-about-emulators-what-does-it-mean) +## Different controller layouts in games + +### Xbox layout - Steam Deck +The Steam Deck uses the Xbox button layout as it's physical buttons. + +**Steam Deck/Xbox button layout:**
+ +| Button Placement | Button | +| :--- | :---: | +| Top | `Y` | +| Left | `X` | +| Right | `B` | +| Bottom | `A` | + +### Nintendo Layout +Nintendo systems uses the Nintendo layout in game where both the Y-X and A-B buttons have switched places with each other from the Steam Decks physical button layout. You can enable a mode that switches the Y-X and A-B buttons for supported Emulators inside the `RetroDECK Configurator`. + +
+ +**Nintendo - button layout:**
+| Button Placement | Button | +| :--- | :---: | +| Top | `X` | +| Left | `Y` | +| Right | `A` | +| Bottom | `B` | + + +**Example:**
+So if you are emulating a Nintendo game that calls for the button A to be pressed it corresponds to the right button on the Steam Deck so button B. + + +### Sony PlayStation Layout +The Sony PlayStation uses it's icon glyphs to represent it's buttons. + +**Sony PlayStation - button layout:**
+| Button Placement | Button | +| :--- | :---: | +| Top | `Triangle` | +| Left | `Square` | +| Right | `Circle` | +| Bottom | `X` | + +**Example:**
+So if you are emulating a PlayStation game that calls for the button Triangle to be pressed it corresponds to the top button on the Steam Deck so button Y. + +**Regional differences:** + +Depending on the region of your Playstation game, the buttons `Circle` and `X` switches the meaning for confirm and cancel (they are still at the same physical location). But it is good to keep in mind if you are used to exiting out of menus with a certain button and wondering why it works in some games while others not. + +**Example:** + +In the EU/US `X` is confirm while in Japan `X` is cancel. + +# Steam Deck Controller Guide - A Visual Introduction +If you are looking for a general guide on how to use the Steam Deck controls beyond RetroDECK please check this steam community guide:
+[Steam Deck Controller Guide - A Visual Introduction](https://steamcommunity.com/sharedfiles/filedetails/?id=2804823261) + + + +# RetroDECK Official Controller Layout: Hotkeys: + +### Current version of the layout +0.7.1b that is written on this wiki + +## Information +Be sure to have the `RetroDECK: Official Controller Layout` activated from the `Templates`. +- Add the Official Layout under `Controller Settings` -> `Controller Layouts` -> `Templates` in the Steam Deck called `RetroDECK: Official Layout` with a version number and apply + +Read more on
[[Steam Deck: Installation and updates]] + +## Everything is customizable +You are free to rebind the keys as you see fit in the RetroDECK: Official Layout profile and make your own to better suit your needs.
+But if you rebind the keys inside RetroDECK there can be a risk that an upcoming update will revert your changes if the emulators made changes to the keybindings for the hotkeys.
+Also note that if you break your controller profile with your tinkering please revert the RetroDECK's official profile. + +## 🚧 Please READ: 🚧 + +**Not all Emulators has hotkey support; some have partial support, some has none and some has a majority implemented** + +The plan is to map as much as we can into the RetroDECK Hotkey System below. We are also patching in Emulator Hotkeys with the `RetroDECK Framework` (if possible) to be compatible with the system. If a emulators later versions adds better hotkey support we plan to map it towards the same functions bellow for a unified experience across as many emulators as possible. + +### Known issues +* `PPSSPP` has a bug in with multi-input hotkeys in their flatpak version, so we did a workaround and bound ESC is Open Menu. This allows you to access all of the emulator features and can quit. +* `RPCS3` hotkeys/shortcuts do not work and they are a new experimental feature. To exit you have to shut down RPCS3 from the `Switch Window` inside the Steam Deck interface. +* `CEMU` has almost no hotkey support. +* `XEMU` has no hotkey support. +* `Citra` is the only dual-screen emulator that allows a hotkey for changing the screen layout, others: `MelonDS`, `RetroArch`, `Cemu` has no hotkey for it. + +## Global Hotkeys: Button Combos + +### The hotkey button +The `HK` or `hotkey button` on the Steam Deck is `L4` or `R4` or `Select` depending on what is closest for the button combo you are trying to press, all trigger the same functions. + +**Example:** + +You want to do the command `Pause / Resume`.
+You press and hold either `L4` or `R4` or `Select` and press `A` to trigger the command. + +### Button combo list +The global hotkeys are activated by pressing the hotkey button and holding it while pressing the corresponding other button input. +What follows is a list of hotkeys: + +`Command` Shows what the hotkey does.
+`Button / Combination` Shows the input you need to make to trigger the command.
+`Keyboard Command` Shows what is being sent to the emulator.
+`Emulator Support` Shows what emulators support the command.
+`Comment` Just extra comments.
+ + + +| Command | Button / Combination| Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | :---: | +| Pause / Resume | `HK + A` | `CTRL + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Take Screenshot | `HK + B` | `CTRL + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | | +| Fullscreen Toggle | `HK + X` | `CTRL + ENTER` | `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Previous State Slot | `HK + D-Pad Left` | `CTRL + J` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2`| | | +| Next State Slot | `HK + D-Pad Right` | `CTRL + K` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2`| +| Increase Emulation Speed | `HK + D-Pad Up` | `CTRL + 1` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2`| | | +| Decrease Emulation Speed | `HK + D-Pad Down` | `CTRL + 2` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2`| | | +| Load State | `HK + L1` | `CTRL + A` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Save State | `HK + R1` | `CTRL + S` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Rewind | `HK + L2` | `CTRL + -` | `RetroArch` `Duckstation` | | +| Fast forward | `HK + R2` | `CTRL + +` | `RetroArch` `Duckstation` `MelonDS` `PCSX2` | | +| Swap Screens | `HK + L3` | `CTRL + TAB` | `Citra` `MelonDS` `Cemu` | | +| Open Menu | `HK + Y` | `CTRL + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | | +| Exit Emulator | `HK + Start` | `CTRL + Q` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | | +| Escape | `HK + R3` | `ESC` | `PPSSPP` | | + + + + +### RetroArch: Additional Hotkeys + +These hotkeys also work for RetroArch and are built in. + +| Command | Button / Combination | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Open Menu | `L3 + R3` | `RetroArch` | | + +### Arcade Systems: Additional Hotkeys + +This hotkey work for RetroArch, MAME, FBNEO and other arcade systems. + +| Command | Button / Combination | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Insert Credit | `Select` | `RetroArch` | | + + +# Steam Deck - Radial Menu System + +What follows is a breakdown of the Radial System that you access on the `Left Touchpad`. + +### Is there a quick way to go back to the top of the radial menu system? +Yes, just press on the `HK` trigger buttons: `L4` or `R4` or `Select` + +## Radial Menu System +`Radial Button` Shows what the hotkey does.
+`Keyboard Command` Shows what is being sent to the emulator.
+`Emulator Support` Shows what emulators support the command.
+`Comment` Just extra comments.
+ +**NOTE:** + +Like everything in RetroDECK we plan to make revisions and updates of the menus. We hope with time be able to add more emulators and even better art. + +## Main Menu +The `Main Menu` gives you access to all the menus bellow. + +## Quick +The `Quick Menu` or `Quick Access Menu` Menu is the most populated menu. It features "best of" options from other menus. + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Exit Emulator | `Ctrl + Q` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | | +| Open Menu | `Ctrl + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | | +| Swap Screens | `Ctrl + Tab` | `Citra` `MelonDS` `Cemu` | | +| Take Screenshot | `Ctrl + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | | +| Save State | `Ctrl + S` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Load State | `Ctrl + A` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Pause / Resume | `Ctrl + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Fullscreen Toggle | `Ctrl + Enter` |`Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Restart / Reset | `CTRL + R` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Escape | `ESC` | `PPSSPP` | | + +## State +The `State Menu` is the menu where you handle anything to do with saving and loading states. + + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Previous State | `Ctrl + J` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Next State | `Ctrl + K` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Save State | `Ctrl + S` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Load State | `Ctrl + A` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Undo Load State | `Ctrl + 8` | `Dolphin/Primehack` | | +| Undo Save State | `Ctrl + 9` | `Dolphin/Primehack` `Duckstation` | | + + +## Speed / Frames +The `Speed / Frames Menu` is where you find anything related to: emulation speed, frame limits, fast forwarding and rewinding. + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Fastforward | `Ctrl + +` | `RetroArch` `Duckstation` `MelonDS` `PCSX2` | | +| Rewind | `CTRL + -` | `RetroArch` `Duckstation` | | +| Increase Emulation Speed| `CTRL + 1` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Decrease Emulation Speed| `CTRL + 2` |`Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Reset Emulation Speed | `CTRL + 3` | `Duckstation` | | +| Disable Emulation Speed Limit | `CTRL + 0` |`Dolphin/Primehack` | | +| Frame limit On/Off | `CTRL + Z` | `PCSX2` `Yuzu` | | + + +## Display / Graphics +The `Display / Graphics Menu` is where you find anything related to: up-scaling/resolution scaling, widescreen or change aspect ratio, fullscreen, swap or change dual screen layout. + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Fullscreen Toggle | `Ctrl + Enter` | `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Increase Resolution / Upscale | `Ctrl + U` | `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Decrease Resolution / Upscale | `Ctrl + Y` | `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Change Widescreen / Aspect Ratio | `Ctrl + W` | `Dolphin/Primehack` `Duckstation` `PCSX2` | | +| Swap Screens | `Ctrl + Tab` |`Citra` `MelonDS` `Cemu` | | +| Change Dual Screens Layout | `Ctrl + L` | `Citra`| | | + +## General +The `General Menu` or `General Emulation Menu` is where you find various global generic emulation hotkeys: Quit/Exit, Restart, Take Screenshot, Change CD, Pause, Turbo Input, Cheats and Video Recording. + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Exit Emulator | `Ctrl + Q` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | | +| Open Menu | `Ctrl + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | | +| Take Screenshot | `Ctrl + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Restart / Reset | `CTRL + R` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Change Disc / Next Disc | `CTRL + D` | `RetroArch` `Dolphin/Primehack` `Duckstation` | | +| Cheats On/Off | `CTRL + C` | `RetroArch` `Duckstation` | | +| Pause / Resume | `Ctrl + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | | +| Turbo On/Off | `Ctrl + T` | `Duckstation` | | +| Video Recording On/Off | `Ctrl + V` |`RetroArch` `Dolphin/Primehack` `PCSX2` | | + +## Steam Deck +The `Steam Deck Menu` is where you find Steam Deck specific functions and general computer hotkeys: Steam Screenshot, Show Steam Deck Keyboard, Escape, Alt + F4, Tab, Enter and F1. Some of these could also be useful inside the various PC emulation emulators. + + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Escape | `ESC` | `PPSSPP` | | +| Tab | `Tab` | | | +| Alt + F4 | `Alt + F4` | | | +| F1 | `F1` | | | +| Enter | `Enter` | | | +| Take Steam Screenshot | `none` | | | +| Show Steam Deck Keyboard| `none` | | | + + +## Specific + +The `Specific Menu` or `Specific Emulator Hotkeys Menu` opens up several system/emulator specific sub-menus. Here you will find hotkeys not so commonly used but could be good to have easy access to: + +### Switch +The `Switch Menu` here you find hotkeys related to Switch emulation: Change GPU Accuracy, Change Docked/Undocked Mode, Add/Remove Amiibo + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Change GPU Accuracy | `Alt + G` | `Yuzu` | | +| Load / Remove Amiibo | `Alt + M` | `Yuzu` | | +| Docked / Undocked Mode | `Alt + D` | `Yuzu` | | + +### MAME +The `MAME Menu` here find hotkeys related to the MAME standalone emulator: Servicemode and buttons 1-4, Insert None Bills (not credits that is Select) and tilt. + +**MAME SUPPORT IS NOT IN YET WILL BE IN A LATER UPDATE** + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Service Mode | `Alt + 0` | `MAME` | | +| Service Button 1 | `Alt + 1` | `MAME` | | +| Service Button 2 | `Alt + 2` | `MAME` | | +| Service Button 3 | `Alt + 3` | `MAME` | | +| Service Button 4 | `Alt + 4` | `MAME` | | +| Insert Bill / Note | `Alt + 5` | `MAME` | | +| Tilt | `Alt + 6` | `MAME` | | + +### RetroArch +The `RetroArch Menu` here you find hotkeys related to the RetroArch emulator: RetroArch Cheat Mangement, AI Service and Netplay Host. + + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Next Cheat | `Ctrl + G` | `RetroArch` | | +| Previous Cheat | `Ctrl + F` | `RetroArch` | | +| Cheats On/Off | `Ctrl + C` | `RetroArch` | | +| AI Service On/Off | `Ctrl + I` | `RetroArch` | | +| Netplay Host On/Off | `Ctrl + H` | `RetroArch` | | + +### Gamecube / Wii +The `Gamecube / Wii Menu` here you find hotkeys related to the Dolphin standalone emulator: Golf Mode, Freelook Mode On/Off/Reset, Wii Sync Button and Wii Mote Sideways / Upright. + + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Golf Mode On/Off | `Alt + H` | `Dolphin/Primehack` | | +| Freelook Mode On/Off | `Alt + F` |`Dolphin/Primehack` | | +| Freelook Mode Reset | `Alt + R` | `Dolphin/Primehack` | | +| Wii Sync Button | `Alt + W` | `Dolphin/Primehack` | | +| Wiimote Upright | `Alt + Z` | `Dolphin/Primehack` | | +| Wiimote Sideways | `Alt + X` | `Dolphin/Primehack` | | + + +### NDS +The `NDS Menu` here you find hotkeys related to the MelonDS standalone emulator: Send Close/Open Lid, Send Play Microphone and Sunlight + / -. + + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Sunlight + | `Alt + +` |`MelonDS` | | +| Sunlight - | `Alt + -` | `MelonDS` | | +| Play Microphone | `Alt + P` |`MelonDS` | | +| Close/Open Lid | `Alt + L` | `MelonDS` | | + +### 3DS +The `3DS Menu` here you find hotkeys related to the Citra standalone emulator: Load and Remove Amiibo + +| Radial Button | Keyboard Command | Emulator Support | Comment | +| :--- | :---: | :---: | :---: | +| Load Amiibo | `Alt + M` |`Citra` | | +| Remove Amiibo | `Alt + N` |`Citra` | | \ No newline at end of file diff --git a/wiki-rtd/Steam-Deck-Installation-and-updates.md b/wiki-rtd/Steam-Deck-Installation-and-updates.md new file mode 100644 index 00000000..99d9ed53 --- /dev/null +++ b/wiki-rtd/Steam-Deck-Installation-and-updates.md @@ -0,0 +1,69 @@ +# How do I install RetroDECK on the Steam Deck? + +## Quick start guide + +- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop` +- Install RetroDECK from Discover +- Start RetroDECK first time in Desktop Mode +- Choose where RetroDECK should create the `roms` folders `Internal` or `SDCard`. +- Put the BIOS inside `~/retrodeck/bios/` for more information read: [[Emulators: BIOS and Firmware]] +- Put the ROMS inside `~/retrodeck/roms/` or `/retrodeck/roms/` depending on your choice +- In Steam desktop go to the tab `Games` press `Add non Steam game to My library` and select RetroDECK to add it into your library. If that is not working you can `Right Click` on the RetroDECK desktop icon and press `Add to Steam` in the menu. +- **Optional way:** Get RetroDECK Steam Grid art and add it to your Steam library with BoilR. Or add the art manually from [SteamgridDB](https://www.steamgriddb.com/search/grids?term=RetroDeck) for the Steam Grid. +- Switch over to game mode and go to RetroDECK on the Steam Grid under `Library > Non-Steam` +- Add the Official Layout under `Controller Settings` -> `Controller Layouts` -> `Templates` in the Steam Deck called `RetroDECK: Official Layout` with a version number and apply +- Launch RetroDECK and enjoy + +### Other quick tips: +- Read up on the [[Steam Deck: Hotkeys and controls]] to ease your navigation. +- Read up on the [[EmulationStation DE: User Guide]] +- Check out our other software recommendations [[Steam Deck: Software recommendations]]. +- Check various optional optimizations that can make some emulators run even better [[Steam Deck: Optimizations]]. + + +## Full step by step guide: + +### Step 1: Go to Desktop Mode +- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop` + +### Step 2: Install from Discover + +- Open the Discover application. +- **NOTE:** Depending on what language you have set in Desktop mode your Discover application can be named differently. +- Inside Discover search for RetroDECK and press the install button. +- After the installation is finished, launch RetroDECK from Discover or in the program menu under `Games > RetroDECK`. +- Follow the first time setup instructions and choose where RetroDECK should create the `roms` folders `Internal` or `SDCard`. +- Open Steam while still in desktop mode. +- Inside Steam go to the tab `Games` press `Add non Steam game to My library` and select RetroDECK to add it into your library. +- After this is done you can now see RetroDECK in Steam Deck's gamemode after you return to it from desktop mode. + +### Step 3: Configure the official controller layout +- Go back into gamemode by pressing the return to gamemode icon on the desktop. +- Go to RetroDECK on the Steam Grid under `Library > Non-Steam` +- Press the `Controller Icon` +- Go into `Controller Layouts` and press `Templates` +- Add the layout for RetroDECK called `RetroDECK: Official Layout` with a version number. +- You can now use RetroDECK and it's ready to populate with ROMS. +- If you are unsure on how to add ROMS and BIOS to RetroDECK follow the [Getting Started Guide ](https://github.com/XargonWan/RetroDECK/wiki/How-to-Getting-started) from Step 2 and onward on how to add them. + + +### Step 4 (Optional): Extras +- Get RetroDECK Steam Grid art with BoilR or add it manually from [SteamgridDB](https://www.steamgriddb.com/search/grids?term=RetroDeck) for the Steam Grid. +- Check various optional optimizations that can make some emulators run even better [[Steam Deck: Optimizations]]. +- Read up on the [[Steam Deck: Hotkeys and controls]] to ease your navigation. +- Read up on the [[EmulationStation DE: User Guide]] +- Check out our other software recommendations [[Steam Deck: Software recommendations]]. + + +# How do I update RetroDECK on the Steam Deck? + +## Automatic Updates +RetroDECK features Automatic Updates and should download the latest version when you start the application. +This feature can be turned off inside the `RetroDECK Configurator`. + +## Manually from Desktop Mode: +- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop` +- Open the Discover application. +- Click on the updates tab. +- If there are any updates available it will be shown here. +- Click on the `Update` or `Update all` buttons. \ No newline at end of file diff --git a/wiki-rtd/Steam-Deck-Optimizations.md b/wiki-rtd/Steam-Deck-Optimizations.md new file mode 100644 index 00000000..8b7cee2c --- /dev/null +++ b/wiki-rtd/Steam-Deck-Optimizations.md @@ -0,0 +1,65 @@ +# What are some optimizations for the Steam Deck to make emulation even better? +These optimizations are entirely optional and but they can give you better performance on some more demanding emulators. + + +## Increase the VRAM to 4GB +This increases the VRAM to 4GB in the BIOS, this can give you improvements in certain emulators. + +* Power off your Steam Deck completely +* Hold the `Power Button` and `Volume Up Button` until you hear a chime/beep and release the buttons. +* Click on `Setup Utility` +* Click on `Advanced` +* Change`UMA Frame buffer Size` to 4GB +* Save and Exit + +## Setup a sudo password +[What is sudo?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#what-is-sudo) + +This is a requirement for many optimizations and solutions, it also makes your Deck safer. +It enables you to run commands/applications heighten sudo privileges. + +* Go to `Desktop Mode` +* Open `Konsole` or another `Terminal` +* Type `passwd` +* You will now set your new sudo password +* After you are done you can close the terminal + +## Install CryoUtilities +This requires that you have set up a sudo password. + +This will create a 16GB SWAP file that can improve the performance for some emulators. Note that it will take up that extra space on your Steam Deck. + +There is a official video [here](https://www.youtube.com/watch?v=C9EjXYZUqUs&t=17s) + +* Go to `Desktop Mode` +* Open a web browser and go to the [CryoUtilities](https://github.com/CryoByte33/steam-deck-utilities) github page +* Click on releases +* Download the latewst `cryo_utilities` version and save to the Desktop or Home folder +* Double click on the file and it will begin the installation +* After installation is complete you will find a new desktop icon `CryoUtilities` +* Click on `CryoUtilities` +* Click on `Recommended Settings` +* It should now be done + +## Install Decky Loader +Decky Loader is a [homebrew plugin store](https://beta.deckbrew.xyz/) for the Steam Deck and it also enables `CEF Remote Debugging` during installation. +This requires that you have set up a sudo password. + +* Go to `Desktop Mode` +* Open `Konsole` or another `Terminal` +* Type `curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/install_release.sh | sh` +* Decky Loader should now be installed and you can go back into `Game Mode`. +* To access Decky Loader you only need to press the `Menu Button - (•••)` + +### Decky Loader: Install Power Tools +Power Tools allows you to tweak various performance settings of the Steam Deck. +What the best setting is differs per emulator or even per game. +Decky Loader is a requirement. + +In Game Mode: +* `Menu Button - (•••)` +* Go into Decky Loader +* From the Store install Power Tools +* This will add a 🔌 icon to the `Menu Button - (•••)` where you can access Power Tools. + + diff --git a/wiki-rtd/Steam-Deck-Software-recommendations.md b/wiki-rtd/Steam-Deck-Software-recommendations.md new file mode 100644 index 00000000..bf037102 --- /dev/null +++ b/wiki-rtd/Steam-Deck-Software-recommendations.md @@ -0,0 +1,38 @@ +# Any other recommended software? + +The following software works great with the Steam Deck and might enhance your RetroDECK experience (these are entirely optional to install). + +There is a guide on how to install several of them under [Steam Deck: Optimizations](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck%3A-Optimizations). + +# Steam Deck specific recommendations + +For general Linux Desktop recommendations go to [Linux Desktop: Software recommendations](https://github.com/XargonWan/RetroDECK/wiki/Linux-Desktop-Software-recommendations) as many of them also work on the Steam Deck. + +## CryoUtilities +Scripts and utilities to improve performance and manage storage on the Steam Deck. + +_Made by CryoByte33_ + +[CryoUtilities](https://github.com/CryoByte33/steam-deck-utilities) + +## Decky Loader +Is a great piece of software that allows custom plugins inside Steam Deck's gamemode. It can open up more advanced features then the standard Steam Deck experience offers. But it's a bit more technical to install, please follow the guide on their github. + +_Made by Steam Deck Homebrew Team_ + +[Decky Loader](https://github.com/SteamDeckHomebrew/decky-loader) + +## PowerTools +If you install the Decky Plugin Loader above you can download the PowerTools application from the plugin store that let's you do advanced tweaking of the Steam Decks hardware. This can greatly improve performance on certain games in the PS2,GC and above generations. But it requires you to find the knowledge of what setting works best for each game and/or emulator. + +_Made by NGnius_ + +[PowerTools](https://github.com/NGnius/PowerTools) + +## Discover Overlay +If you use Discord this is a program that adds Discord integration into the Steam Deck's gamemode UI. +It's already in on flathub and downloadable in Discover. Note that you need to install and login to Discord as well. + +_Made by trigg_ + +[Discover Overlay](https://trigg.github.io/Discover/) diff --git a/wiki-rtd/Switch-Yuzu.md b/wiki-rtd/Switch-Yuzu.md new file mode 100644 index 00000000..f195a229 --- /dev/null +++ b/wiki-rtd/Switch-Yuzu.md @@ -0,0 +1,62 @@ +# Yuzu + +## Where to put the games? +Switch games should be put into the `retrodeck/roms/switch/` directory.
+The games can come in many different formats: `XCI` `NSP` `NCA` `NSO` `NRO`. + + +## Where do I put the BIOS files? +Yuzu needs the key files `prod.keys`, `title.keys` and the firmware files in the following directories: + +**Yuzu keys:** `~/retrodeck/bios/switch/keys` + +**Yuzu firmware:** `~/retrodeck/bios/switch/registered` + +The directory tree should look like this example: +``` +~/retrodeck/bios/switch +├── keys +│   ├── prod.keys +│   └── title.keys +└── registered + ├── 02259fd41066eddbc64e0fdd217d9d2f.nca + ├── 02582a2cd46cc226ce72c8a52504cd97.nca + ├── 02b1dd519a6df4de1b11871851d328a1.nca + ├── other 217 files... + └── fd0d23003ea5602c24ac4e41101c16fd.nca +``` + +You can find a complete guide in the [Yuzu official wiki](https://yuzu-emu.org/help/quickstart/#downloading-and-installing-yuzu) on how to extract the BIOS from your Switch. + +## How do I install DLC and Updates? + +**Requirements:** Patch or DLC files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + +1. Extract any patch or dlc files from compressed `.zip` or any other format to the true files. +2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`. +3. Press `File` - `Install Files to NAND` +4. Find a DLC or Patch file from the file browser and press `Open` +5. This will install the DLC or Patch file into the games NAND folder inside of Yuzu. +6. Repeat step 2 to 3 for every file you need to install. +7. Quit Yuzu +8. Start up RetroDECK and select the game you want to play.
+ +## How do I add shader caches? + +**Requirements:** Shader cache files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + +1. Extract any shader cache files from compressed `.zip` or any other format to folders. +2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`. +3. Right click on the game you want to add mods into. +4. Click on `Open Transferable Pipeline Cache`. +5. Paste the files inside that directory. +6. Start up RetroDECK and select the game.
+ +## How do I add mods? +Check the Mods: Yuzu section on this wiki +[[Yuzu: Mods]] + \ No newline at end of file diff --git a/wiki-rtd/Version-history-Patch-Notes.md b/wiki-rtd/Version-history-Patch-Notes.md new file mode 100644 index 00000000..6bcbf8fa --- /dev/null +++ b/wiki-rtd/Version-history-Patch-Notes.md @@ -0,0 +1,554 @@ +# RetroDECK 0.7.1b + +### Release Date: 2023-08-22 + +## Information: +- Steam Deck users update RetroDECK from `Discover` in Desktop Mode. +- Don't forget to reapply the latest controller layout: Go into the `Templates` tab and reapply the new profile ending with 0.7.1b (there is no need to reinstall the entire layout from the Configurator). + + +## Bugfixes & other changes: +- Fixed an issue to make sure the RD controller layout file at update with each RD update. +- Fixed an issue with PPSSPP that made `L` and `R` incorrectly bound. +- Fixed an issue in the Configurator that prevented the Yuzu preset for swapping A/B X/Y from working. +- Fixed an notification issues on the latest SteamOS Beta releases. +- Fixed an rsync permissions issue in the RetroDECK Framework. +- Updated Yuzu presets to handle new config syntax in the RetroDECK Framework. +- Changed auto-update to notification only, until permissions error can be worked out. +- Added some new pixelart icons by ItzSelenux (pixelitos-icon-theme) + + +## Updates +- All Emulators and ES-DE have been updated + +## Steam Deck - Global Controller Layout: +We have done some changes based on community feedback + +**Layout Changes:** +- `Select` is now a hotkey trigger while pressing it down, `L4` and `R4` are still triggers as well. +- The RetroArch combo of `Select` + `Start` = `Quit` now works on many SA-Emulators. +- `Open Menu` is removed from `Select`. +- `R5` = `A` button (this allows for great Wii controls on the right touchpad and pressing down the R5 for A). +- `L5` = `B` button. + +**Global hotkey changes:** +- `Open Menu` is on `Y`. +- `Increase Emulation Speed` is on `Dpad-UP`. +- `Decrease Emulation Speed` is on `Dpad-Down`. +- `Fullscreen OFF` command is removed (as emulators have migrated to toggle). + +## Known issues +- The built in auto-updater is not working (we are working on it). Discover is ok. +- Some emulators don't have hotkey support or have bugs affecting their hotkeys. + + +# RetroDECK v0.7.0b - Amazing Aozora + +### Release Date: 2023-06-16 + +## Read First – Important Changes! + +* `PCSX2-SA` latest updates are not compatible with old save states. Please make sure you do an in-game save to your virtual memory card before upgrading. + +* The following emulators have changed the defaults and now run the stand-alone version: `Dolphin`, `Citra`, `PPSSPP`.
+If you have saves states or just want to go back to the RetroArch version, you can always switch back by pressing: `Other Settings` – `Alternative Emulators` and set them back to the core versions. + +* If you decide to install the new `RetroDECK Controller Layout` for the Steam Deck (highly recommended), it will wipe your custom configurations and emulator settings. That’s because all the configs needs to be updated and changed to be compatible.
+The choice is yours (you can always install it later via the Configurator if you change your mind). + + +## New Emulators + +- Wii U powered by CEMU + +- We had hopes to add MAME standalone as well but we had to push it towards a future update because of various issues. That's why there is a MAME submenu in the new radial menus. + + + +## New General Features + +### New - Steam Deck Controller Layout + +Please read up on: https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck%3A-Hotkeys-and-controls +- All hotkeys for all emulators have been unified where possible. + +This Steam Deck Controller Layout features both + +- Radial input menus on the left touchpad. +- Button bound hotkeys you can access by either holding R4 or L4. + +**Installation of the layout:** + +**From an upgrade:** + +A upgrade from a older version to 0.7b you will get a prompt during the upgrade process that asks you if you want to install the layout. If you choose to do this (highly recommended), it will reset your emulators custom configurations if you had them. + +**For everyone (upgrade or fresh install):** + +After installation need to manually enable the config as under (you also need to do this for a new RetroDECK install):
+`Controller Settings` -> `Controller Layouts` -> `Templates` `RetroDECK: Official Layout` with a version number. + +**NOTE:** + +Not all Emulators has hotkey support; some have partial support, some has none and some has a majority implemented. + +**Known issues:** + +PPSSPP has an issue with flatpak hotkeys currently on their github so we have mapped ESC `HK + R3` ( press the `Escape` key from the radial menu) to `Open PPSSPP Menu`. In this way you can shutdown, save and access PPSSPP functions from there. +As soon as the issue is solved we will remap everything to the correct hotkeys. + +### New - RetroDECK system folders + +Handling modpacks and texture packs has never been easier! You can read more on the wiki! + +https://github.com/XargonWan/RetroDECK/wiki + +**New folder: Mods** + +`retrodeck/mods/` Inside you will find easy to access mod folders for the following systems: Citra ,Dolphin, Primehack, Yuzu + + +**New folder: Texture Packs** + +`retrodeck/texture_packs/` inside you will find easy to access texture pack folders for the following systems: Citra, Dolphin, Duckstation, PCSX2, PPSSPP, Primehack, RetroArch-Mesen, RetroArch-Mupen64Plus + + +**New folder: Gamelists** + +`retrodeck/gamelists` gamelists are now moved into by default for ease of access and added security. + + +## New - System features + +- The Configurator has a new home inside the ES-DE main menu and thus the tools menu has been removed. +- The Configurator also has a .deskop icon for ease of access for both Steam Deck desktop mode and Linux Desktop users. +- Added RetroDECK auto updates on launch, this can be disabled from the Configurator this works in Game Mode for the Steam Deck. + +## New RetroDECK Configurator features: + +- The Configurator has a new structure, with more menus and options. +- The compression tool has been updated to allow for even more formats such as .zip in addition to the standard disc-based formats for certain systems. +- The compression tool has been updated to have an even stronger verification before a compression job starts. +- Added a global preset to swap A/B and X/Y in all supported emulators (aka N layout). +- Added a global preset to enable/disable Widescreen in all supported emulators, globally or per core/emulator. +- Added a global preset to enable/disable Ask-to-Exit prompts in all supported emulators. +- Added a preset to enable/disable Pegasus and NyNy77 Borders for RetroArch, globally or per core. +- Added an option to install Venomalia's Universial Dynamic Input Textures for Dolphin https://github.com/Venomalia/UniversalDynamicInput +- Added an RetroDECK: About section +- Added an option to install the RetroDECK Steam Deck controller profile +- Added an “RetroDECK: Auto Updates” function that enables or disables auto updates on RetroDECK launch. +- Added a Semi-automated RPCS3 firmware installer. +- The Move Folder tool has been greatly expanded + - You can now move the entire folder or different folders as you choose. (WARNING! Please do not try to move the data to more exotic locations). +- The basic BIOS checker has been removed. +- The BIOS checker has been updated to look for over 120+ BIOS. +- RetroAchivements Login: Now logs into all supported emulators/cores at once. +- RetroAchivements Logout: Now logs out of all supported emulators/cores at once. +- Added RetroAchivements: Hardcore Mode, that lets you toggle hardcore mode for supported emulators/cores with a logged in RetroAchivements account. + +## Updates + +- Updated ES-DE to the latest version. +- Updated RetroArch and the cores to latest versions. +- Updated all standalone emulators and to their latest versions. + + +## Bugfixes & other changes: + +- Dolphin/Primehack Wii Mote controls have been redesigned for the Steam Deck to allow both for touch input or right radial as pointer and `R2` emulates the Wii Remote Shake needed for certain games. +- Updated the RPCS3 to run better and with a better configuration. Read more on the wiki on how to install DLC and patches. +- RPCS3 and Duckstations save files where in the wrong directory. They have been moved to fit the overall inside the RetroDECK Framework. If you have any issues, contact us on discord or add them on github. +- We made a unique PICO-8 wrapper that makes it runs better in a flatpak environment. +- Fixed an avcodec issue that caused some roms for certain emulators to break. +- Changed the ES-DE progress bar color +- Changed how Yuzu builds are handled and should allow for better Yuzu updates. +- Added a low space warning on launch. +- Various backend improvements and fixes. +- Added the foss Capsimg BIOS for the Amiga RetroArch core. +- Implemented ES-DE's experimental theme downloader. For fresh new installs we only now ship one theme: ArtBookNext (as all other themes can be downloaded from the interface). + +## Experimental features: +You can enable the RetroDECK: Multi-user system and other things from CLI for testing purposes. +Read more here on how to help us with testing: + +https://github.com/XargonWan/RetroDECK/wiki/How-can-I-help-with-testing%3F + +There is also a Q&A on the latest blog post: + +https://www.reddit.com/r/RetroDeck/comments/13x8dva/retrodeck_status_update_202306/ + +# RetroDECK v0.6.6b + +### Release Date: 2023-04-26 + +### Information: +This patch is a quick hotfix for ES-DE. + + +## Bug fixes and other changes: +- ES-DE had the wrong buildflag and pushed the update notification. +- Reverted to the Swanstation Core for RetroArch + +# RetroDECK v0.6.5b + +### Release Date: 2023-04-07 + +### Information: +Just a quick hotfix for Yuzu (since some games where not working in 0.6.4b). +So we had to roll back to the latest working version. +Newer versions will be shipped with v0.7b + +## Bug fixes and other changes: +- Rolled back to latest working Yuzu as some games had issues with the latest update. +- Slightly improved Yuzu performance by tweaking GPU options +- Fixed an issue where the default theme was not loaded +- Removed unavailable emulators entries + +# RetroDECK v0.6.4b + +### Release Date: 2023-04-04 + +## New features - General: +- Updated to ES-DE 2.0 +- Added the NSO Menu Interpreted theme +- Updated all included themes +- Updated the Emulators/RetroArch + cores + +## Bug fixes and other changes: + +- Fixed an audio issue in the Primehack configuration +- Various backend fixes + +# RetroDECK v0.6.3b + +### Release Date: 2023-03-24 + +## New features - General: +- Added support support for multiple file compression via CLI. + +## RetroDECK Configurator: +- Added support support for multiple file compression in the Configurator. +- Added safety y/n prompts to the reset functions. +- Fixed some missing layout changes. +- Renamed "Reset All" to "Reset RetroDECK". +- Moved the configurator into the RO partition for futher enhancements. + +## Bug fixes and other changes: +- Fixed a bug in the compression tool with certain filenames with spaces. +- Fixed a bug where some folders were recursively symlinked. +- Fixed a bug where some emulator configs were not correctly deployed. +- Fixed a manifest bug that caused a conflict between Dolphin and Primehack in certain scenarios. +- Fixed the Configurator BIOS tool looking in the wrong location (Thanks sofauxboho for the report!) +- Implemented new configurations for Yuzu and Citra thanks to the big config file changes in the latest emulator updates in both emulators. +- Removed some leftover files from Legacy PCSX2. +- Removed the legacy "Reset Tools" command from Configurator and CLI. + +# RetroDECK v0.6.2b + +### Release Date: 2023-03-15 + +## New features - General: +- Persistent configurations when updating RetroDECK
(This means your custom configurations should be saved across future versions. We also laid groundwork for dynamic persistent configurations, more on that in a future update. This is the reason why it has taken quite long to fix this). +- Added Primehack controller profiles for both Xbox and Nintendo button layouts +- Added a warning when running RetroDECK in desktop mode that not all control inputs will work properly. It also comes with a "Never show again" button. +- Added CLI for CHD compression (chdman) of single games +- Reworked CLI commands and added safety "y/n" confirmations for the reset arguments. + +## New features - RetroDECK Configurator: +- The RetroDECK Configurator "toolbox" has a new structure for more easy access to various tools +- The power user prompt has a "Never show again" button +- Added tool to do CHD compression (chdman) of single games (multi-game batch compression coming in a future update) +- Added tool to check for common BIOS files +- Added tool to check for common multi-file game structure issues + +## Bug fixes and other changes: +- Fixed Primehack initial configuration as it was broken (will automatically reset the emulator just this once) +- Fixed Duckstation initial configuration as it was broken (will require user-performed reset just this once) +- Fixed Pico-8 initial configuration as it was broken. +- Fixed Pico-8 dual bios folders. The program files `pico8_dyn`,`pico8.dat` and `pico8` have to be manually moved to the correct location`~/retrodeck/bios/pico-8/`. The old `~/retrodeck/bios/pico8/` is renamed `~/retrodeck/bios/pico8_olddata/` to avoid confusion on where to put files. After the files have moved the `pico8_olddata `folder can be deleted. +- Fixed a bug that made the Dolphin RetroArch core not working properly (the standalone version of Dolphin always worked and is the default) +- Various backend fixes + +## Updates: +- Updated all Emulators, RetroArch and libreretro cores.
(PLEASE NOTE! ES-DE was not updated to version 2.0, this will be done in the next major version of RetroDECK as we need more time to work on the new theme format). + +# RetroDECK v0.6.1b + +### Release Date: 2023-02-21 + +## New features: +* Added CLI option to run Configurator directly +* Added "--configure" option to RetroDECK CLI + +## Updates: +* Yuzu updated to mainline-1301 + +## Fixes & adjustments: +* Adjusted Configuration window sizes +* Temporarily removed Ryjuinx as it was broken and had too many issues (will be added back in a future patch). +* Removed deprecated emulators from Configurator (eg. Legacy PCSX2) +* Made improvements to file-moving code +* Fixed Primehack preconfiguration and Configurator entry +* Fixed a bug where the hidden files were not moved during the directory preparation +* Fixed a bug where the symlinks were recursively placed inside the prepeared paths +* Fixed issue with missing symlink after RetroDECK base directory was moved somewhere else +* Fixed Duckstation preconfiguration + +# RetroDECK v0.6.0b + +### Release Date: 2022-12-27 + +## New Emulators +* Primehack +* Ryjuinx (Disabled in 0.6.2b) + +## New Features +* Merged all tools into single Configurator +* The Configurator can now move the whole retrodeck folder eslewhere (not just the ROMs one) +* The Configurator can now reset a single emulator, all RetroArch or all Standaloned configs (so there is no need to di it via CLI anymore +* The first install is now asking where to place the whole retrodeck folder instead of requesting the location of the ROMs folder only. + +## RetroArch +* Updated RetroArch to version [v1.14.0](https://www.libretro.com/index.php/retroarch-1-14-0-release/) +* Updated Cores +* Updated Cheat_db + +## Updated standalone emulators +These emulators are updated to the latest version available on 31/10/2022. +* Updated PPSSPP +* Updated Yuzu +* Updated Citra +* Updated PCSX2-QT +* Updated Dolphin +* Updated Xemu +* Updated RPCS3 +* Updated Duckstation + +## Fixes +* PCSX2-QT is now looking for saves in the correct directory `~/retrodeck/saves/ps2/memcards` and not in `~/retrodeck/saves/ps2/pcsx2/memcards` + +# RetroDECK v0.5.3b + +### Release Date: 2022-10-28 + +## Bug fixes in v0.5.3b + +* Fixed inaccessible RetroArch shaders folder +* Fixed PSP saving issue when using RetroArch core +* Fixed ROM visibility for Dolphin when running standalone, which should address ability to use AR/Gecko codes +* Changed default RPCS3 launch method to fix games not starting properly +* Fixed PCSX2 (legacy) autosave loading issue +* (Hopefully) Fixed RetroAchievements login on PCSX2-QT + +## Changes in 0.5.3b +* Made Citra standalone the default 3DS emulator + +## Additions in 0.5.3b +* Added Citra SA sysdata folder to RetroDECK BIOS folder +* Added Yuzu save folders to RetroDECK saves folder +* A progress window during emulator initialization where it can look like RetroDECK has crashed + +# RetroDECK v0.5.2b + +### Release Date: 2022-10-14 + +## Bug fixes in 0.5.2b + +* Fixed a bug where the Citra save folder was duplicated +* Fixed a bug where scraped videos would not be played correctly for certain systems +* Fixed the Rewind Tool + +# RetroDECK v0.5.1b + +### Release Date: 2022-10-13 + +## Bug fixes in 0.5.1b + +* Fixed an issue with Yuzu not being compiled correctly in 0.5.0b + +# RetroDECK v0.5.0b + +### Release Date: 2022-10-12 + +## Important: New save folder structure and migration in 0.5.0b + +### General information + + +[I see ~ refereed in documentation and examples, what does it mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean) + +**Saves = game saves and save states**
+The word "saves" is used to reference both save files and save state files in this wiki article. Both files are treated in the same manner, the only difference is that saves are located at. + +**PLEASE BE PATIENT:**
+The migration of the saves only needs to be done once.
+Depending on how large roms library you have, this migration can take several minutes.
+If you have an extremely large roms library (+5.000 roms) this process can take over an hour. + +### Why are you changing the save folder structure? + +In the long run, it is about the safety of your saves and we feel it's better to tackle this now during the beta period then later. + +By default, RetroArch (which handles emulation of most older systems) puts all your saves together in one folder.
+This is normally not an issue, but what you if you want to play the same game but different versions of it across multiple systems?
+RetroArch has no way of telling the difference between a save for `Mortal Kombat 3` on the Sega Genesis and on the Super Nintendo when the saves are all bundled together. RetroDECK is moving to a save storage structure where every save file is in a per system sub-folder inside of the `~/retrodeck/saves/` for game saves or `~/retrodeck/states/` for save states. + +### How saves are stored in RetroDECK pre 0.5.0b: + +_Example: Structure of the `~/retrodeck/saves/` folder_ + + ~/retrodeck/saves/Final Fantasy 3.save + + ~/retrodeck/saves/Sonic the Hedgehog.save + +_Example: Structure of the `~/retrodeck/states/` folder_ + + ~/retrodeck/saves/Final Fantasy VI.savestate + + ~/retrodeck/saves/Sonic the Hedgehog 2.savestate + + +### How saves are stored in RetroDECK post 0.5.0b: + +_Example: Structure of the `~/retrodeck/saves/` folder and with new sub-folders_ + + ~/retrodeck/saves/nes/Super Mario Bros. 3.save + + ~/retrodeck/saves/genesis/Sonic the Hedgehog.save + +_Example: Structure of the `~/retrodeck/states/` folder_ + + ~/retrodeck/states/snes/Final Fantasy VI.savestate + + ~/retrodeck/states/genesis/Sonic the Hedgehog 2.savestate + +Since RetroArch will be looking for your saves in new locations, RetroDECK will do its best to sort your saves into the new structure automatically, so you likely won't need to do anything except enjoy knowing your saves are safer than ever. + +### How will it work? + +* The fist time you run RetroDECK after upgrading from a previews version to 0.5.0b a new dialog prompt will appear letting you that the migration process will start after pressing `OK`. + +* The migration process matches up all of your saves with all of your ROMs. + +* Once a match is found, the save is moved to where the sub-folder it needs to be in. + +* At the end of the process RetroDECK will let you know if any saves could not be sorted automatically. + +* **NOTE:** Only saves created by RetroArch need to be sorted, standalone emulators such as Yuzu and Citra already use their own folder structure and don't need to go through this process. + +* **NOTE:** If a match can't be found (for instance if you have a save for Mortal Kombat 3 and have both the SNES and Genesis editions in your ROM library) the save will be left alone and will need to be sorted manually, since only you will know for sure what system you were playing that game on. + +### Where will my saves be moved to? + +The saves will still be in the `~/retrodeck/saves` folder, but will also be moved into a new folder that matches what system the associated game is on. + + _Example: Game save - The Legend of Zelda on the NES_
+ +`~/retrodeck/saves/The Legend of Zelda.save` + + will be moved to + + `~/retrodeck/saves/nes/The Legend of Zelda.save` + + _Example 2: Save state - Super Mario Bros 3 on the NES_
+ +`~/retrodeck/states/Super Mario Bros 3.savestate` + + will be moved to + + `~/retrodeck/states/nes/Super Mario Bros 3.savestate` + +### Why could not all saves be moved automatically? + +If you have a large ROM library, it is likely you will have multiple versions of the same game across multiple systems. + +RetroArch creates save files that have the same name as the original ROM file. If there are multiple ROM files with the same name as a save, there is no way to tell which system the save belongs to. + +In the interest of ultimate safety for your saves, we only sort files we can be sure of. It is unfortunate that some saves may need to be sorted manually for some users, but this is a one time process that will keep your saves safer in the long run. + +### How do I move them manually? + +The saves can be moved like any other file, using the Dolphin file manager included in the Steam Deck desktop mode to the corresponding sub-folder inside `/retrodeck/saves/(system sub-folder)`. + +### Where can I find saves that could not be moved? + +If you see a message after the migration process saying some of your saves could not be sorted automatically, they will be found where they have always been, in `~/retrodeck/saves` or `~/retrodeck/states`. + +In the `~/retrodeck` folder there will also be a file called `manual_sort_needed.log` listing every save that could not be sorted automatically with a reason it was not moved. In order to be used again, these files will need to be moved into the folder matching the name of the system that the game the save belongs to runs on. + +For example, this save file could not be sorted automatically, because there are multiple ROMs in the library with the same name. + +**Example: Game saves**
+* New theme 1: [Alekfull-NX-Light](https://github.com/anthonycaccese/alekfull-nx-retropie/tree/retro-deck-esde-1.x-light) for ES-DE +![rd-theme-RetrofixRevisited-GamelistView](https://user-images.githubusercontent.com/1454947/193457594-b803546b-36eb-4e71-9eca-bfee1d81ba36.jpeg) +![rd-theme-RetrofixRevisited-SystemView](https://user-images.githubusercontent.com/1454947/193457596-05dc4316-9f2a-41ae-aa27-9609c680ec5a.jpeg) + +## Updates & minor additions in 0.5.0b + +* New variables system: now some variables such as game folder location are saved in /var/config/retrodeck/retrodeck.cfg. +* Rewritten build and publication workflows +* Updated ES-DE from 1.2.4 to 1.2.6
(Please note that not all the supported emulators in ES-DE are included in RetroDECK at this moment)
+For the full ES-DE patch notes follow these links:
+[1.2.5 Patch Notes](https://gitlab.com/es-de/emulationstation-de/-/blob/master/CHANGELOG.md#version-125)
+[1.2.6 Patch Notes](https://gitlab.com/es-de/emulationstation-de/-/blob/master/CHANGELOG.md#version-126) +* Updated RetroArch, updated all cores and added new cores from 1.10.2 to 1.11.1
+[1.10.3 Patch Notes](https://www.libretro.com/index.php/retroarch-1-10-3-release/)
+[1.11.1 Patch Notes](https://www.libretro.com/index.php/retroarch-1-11-0-release/)
+* Updated all the standalone emulators to their latest releases +* Updated all included themes to their latest version. + +## Bug fixes in 0.5.0b + +* Removed the unavailable emulators from the ES-DE interface to avoid confusion. +* Solved an issue where Dolphin (Standalone) was not saving in the intended directories. +* Various smaller bug fixes, for a more detailed list check the [issues list](https://github.com/XargonWan/RetroDECK/issues?q=is%3Aissue+milestone%3A0.5.0b+) \ No newline at end of file diff --git a/wiki-rtd/Yuzu-Mods.md b/wiki-rtd/Yuzu-Mods.md new file mode 100644 index 00000000..9000da34 --- /dev/null +++ b/wiki-rtd/Yuzu-Mods.md @@ -0,0 +1,33 @@ +# Yuzu + +**Note:**
+`TITLEID` is different for every game. + +## How do I add mods? + +**Requirements:** Mod files
+ +**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. + +There are two ways of adding mods into Yuzu + +### From Yuzu directly +1. Extract any mod files from compressed `.zip` or any other format to folders. +2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`. +3. Right click on the game you want to add mods into. +4. Click on `Open Mod Data Destination`. +5. Paste the mod folders inside that directory. +6. Right clicking on the game and selecting `Properties`. +7. Enable the mods you want to enable by pressing the checkboxes in the `Add-Ons` tab and press OK. +8. Quit Yuzu + +### From the mods/yuzu folder + + +1. Extract any mod files from compressed `.zip` or any other format into folders. +2. Go into `~/retrodeck/mods/yuzu/` and file the right folder for the game you want to add mods to. The folders are all named by `TITLEID`. +3. Move those folders into `~/retrodeck/mods/yuzu/` +4. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`. +5. Right clicking on the game and selecting `Properties`. +6. Enable the mods you want to enable by pressing the checkboxes in the `Add-Ons` tab and press OK. +7. Quit Yuzu diff --git a/wiki-rtd/_Sidebar.md b/wiki-rtd/_Sidebar.md new file mode 100644 index 00000000..92752fef --- /dev/null +++ b/wiki-rtd/_Sidebar.md @@ -0,0 +1,65 @@ +# Wiki startpage +[Home[(/XargonWan/RetroDECK/wiki)] + +## RetroDECK: Getting started +- [How to: Getting started[(How-to-Getting-started.md)] +- [FAQs: Frequently asked questions[(FAQs-Frequently-asked-questions.md)] +- [EmulationStation DE: User Guide[(EmulationStation-DE-User-Guide.md)] + +## RetroDECK: General information +- [How to: Manage your games[(How-to-Manage-your-games.md)] +- [Emulators: What's included?[(Emulators-What's-included.md)] +- [Emulators: BIOS and Firmware[(Emulators-BIOS-and-Firmware.md)] +- [Emulators: Different controller layouts[(Emulators-Diffrent-controller-layouts.md)] +- [Emulators: Supported folders and files[(Emulators-Supported-folders-and-files.md)] +- [EmulationStation DE: Themes[é(EmulationStation-DE-Themes.md)] + +## RetroDECK: Configuration +- [RetroDECK: Configurator[(RetroDECK-Configurator.md)] +- [RetroDECK: CLI[(RetroDECK-CLI.md)] +- [RetroDECK: Folders and filepaths[(RetroDECK-Folders-and-filepaths.md)] + +## RetroDECK: Development +- [Development: General notes[(Development-General-notes.md)] +- [Known Issues[(Known-Issues.md)] +- [Version history: Patch Notes[(Version-history-Patch-Notes.md)] +- [How can I help with testing?[(How-can-I-help-with-testing.md)] + + +## Emulator Guides: +- [Playstation 3: RPCS3[(Playstation-3-RPCS3.md)] +- [Switch: Yuzu[(Switch-Yuzu.md)] + +## Mod Guides: +- [Yuzu: Mods[(Yuzu-Mods.md)] +- [Citra: Mods[(Citra-Mods.md)] +- [Dolphin and Primehack: Mods[(Dolphin-and-Primehack-Mods.md)] + +## Texture Packs Guides: + +- [Citra: Texture Packs[(Citra-Texture-Packs.md)] +- [Dolphin and Primehack: Texture Packs[(Dolphin-and-Primehack-Texture-Packs.md)] +- [Duckstation: Texture Packs[(Duckstation-Texture-Packs.md)] +- [RetroArch Mesen: Texture Packs[(RetroArch-Mesen-Texture-Packs.md)] +- [RetroArch Mupen64Plus Next: Texture Packs[(RetroArch-Mupen64Plus-Next-Texture-Packs.md)] +- [PPSSPP: Texture Packs[(PPSSPP-Texture-Packs.md)] +- [PCXS2: Texture Packs[(PCXS2-Texture-Packs.md)] + +## Steam Deck +- [Steam Deck: Installation and updates[(Steam-Deck-Installation-and-updates.md)] +- [Steam Deck: Hotkeys and controls[(Steam-Deck-Hotkeys-and-controls.md)] +- [Steam Deck: Optimizations[(Steam-Deck-Optimizations.md)] +- [Steam Deck: Software recommendations[(Steam-Deck-Software-recommendations.md)] + +## Linux Desktop +- [Linux Desktop: Software recommendations[(Linux-Desktop-Software-recommendations.md)] + +## Other Devices +- (More information later) + +## Credits & Other +- [RetroDECK: Credits and The Team[(RetroDECK-Credits-and-The-Team.md)] +- [RetroDECK: The story of RetroDECK[(RetroDECK-The-story-of-RetroDECK.md)] +- [RetroDECK: Social media rules[(RetroDECK-Social-media-rules.md)] +- [Licences[(Licences.md)] +- [Archive[(Archive.md)] \ No newline at end of file diff --git a/wiki-rtd/conf.py b/wiki-rtd/conf.py new file mode 100644 index 00000000..be805dcb --- /dev/null +++ b/wiki-rtd/conf.py @@ -0,0 +1,28 @@ +project = 'RetroDECK' +author = 'RetroDECK Team' + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx_rtd_theme', + 'myst_parser', +] + +language = 'English' +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +html_theme = "sphinx_rtd_theme" + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = [".md"] +# source_suffix = '.rst' + +# The master toctree document. +master_doc = "index" \ No newline at end of file diff --git a/wiki-rtd/index.md b/wiki-rtd/index.md new file mode 100644 index 00000000..03c5c421 --- /dev/null +++ b/wiki-rtd/index.md @@ -0,0 +1,151 @@ +### RetroDECK Wiki +

+ RetroDECK logo +

+ +![Flathub](https://img.shields.io/flathub/downloads/net.retrodeck.retrodeck) +![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck) +![Discord](https://img.shields.io/discord/951662718102962256?label=discord) +![GitHub](https://img.shields.io/github/license/XargonWan/RetroDECK) + +Welcome to the **RetroDECK wiki**! + +### 🏗️ This wiki is currently under construction 🏗️ + +# What is RetroDECK? +RetroDECK is a [EmulationStation Desktop Edition](https://es-de.org) powered application that builds in a variety of emulators and other software that allows you to play your favorite retro (and even not-so-retro) games in a tidy contained flatpak sandbox environment. It's inspired by embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera. + +You can also check out our: [Flathub Page](https://flathub.org/apps/net.retrodeck.retrodeck)
+ +## What devices/systems does RetroDECK support: + +### Steam Deck + +Supported from the start and RetroDECK is tailored to the Steam Deck during the beta period. The goal is that all the configurations are ready out-of-the-box and optimized towards the Steam Deck. + +### Linux Desktop +Technically it is working, but the user experience might not be that great it could contain desktop specific bugs and other issues. +You will also need to manually configure the input to match your desktop and might need to tweak more settings. If you want to try it make sure that your distribution has flatpak support (else you will need to install it).
+We will start to have a bigger desktop focus after the beta period is over. + + +### Other SteamOS or Linux handheld gaming devices with flatpak support +We do plan to support other SteamOS based devices in the future. But during the BETA we are focusing on the Steam Deck.
+You can get it to run on other Linux based devices it is not just as seamless as we want it to be and does not live up to our higher standards.
+You will need to manually configure the input to match your device and might need to tweak more settings if you try it on a none Steam Deck device. There might also be some hardware specific bugs. + +## Do you have any plans for other systems? +RetroDECK does not have plans to support Windows, macOS, Android, or iOS.
For similar functionality on Windows you could explore [Retrobat](https://www.retrobat.org/) as an alternative. + + +## How do I start using RetroDECK? + +Please read the [How to: Getting started](https://github.com/XargonWan/RetroDECK/wiki/How-to-Getting-started) + +## RetroDECK is currently in in BETA and is not a full release. + +- What does "currently in beta" mean?, It means that the software is still under heavy development and big updates can be made that change, add, or remove features. + +- RetroDECK is missing some minor and major; emulators, features and configurations. The goal is to have them added over time.
+ Please check the [Known Issues](https://github.com/XargonWan/RetroDECK/wiki/Known-Issues) page and the [Issue tracker](https://github.com/XargonWan/RetroDECK/issues) for more information. + +- RetroDECK during the BETA period only supports the Steam Deck, but for the full release we should have full Linux Desktop support read more at [FAQs: General questions](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#general-questions). +- The "b" in the versioning stands for BETA but RetroDECK is perfectly fine for daily use even during the beta phase, albeit some features are missing. To see what features are missing check the: [Known Issues page](https://github.com/XargonWan/RetroDECK/wiki/Known-Issues). + +## The RetroDECK community: + +[Website](https://retrodeck.net)
+[Discord](https://discord.gg/Dz3szYsP8g)
+[Lemmy](https://lemmy.zip/c/retrodeck)
+[Subreddit](https://www.reddit.com/r/retrodeck)
+ +# Whats the long term vision and goals? +The long term vision and goals of the project is an all-in-one application to manage your entire retro games library that is: + +- Already configured and should just work with your games. + +- Has disaster recovery and multi device support: with cloud saves and syncs. + +- Easy to install with one click installation. + +- Easy to use and provide a "Console-like / Batocera-like" featured user experience. + +- Easy to manage your collections of roms, mods and romhacks. + +- As much as possible should be configurable from inside RetroDECK itself without needing to exiting the application. + +- Make tighter integrations with bundled emulators and expose more features and ways to handle them to the end users. + +- Should be secure, safe, and stable. + +- Should have an easy way to mange external controllers and other inputs. + +- Should support a majority of all supported Emulators in ES-DE + +- Should in the long run support applications outside of the scope of ES-DE + +- Should be plug and play and fill the need for a portable retro gaming solution that you can bring on the go to a friend’s/family/others house. Just dock into the TV and get going! + +- Should fully support Steam Deck, SteamOS based devices and the Linux Desktop. + +- AND MORE + +# Can I contribute to the project? +Yes! Everybody is welcome to contribute in any way possible if it is personal time or funds. + +- Do you know how to code and want to contribute? Please join the development team! + +- Maybe you know graphics, art or UI & UX design? Join the discussion! + +- You can just help by helping others in the support or guide people on various social media and communication platforms. + +- You can also help by just finding and testing the best configurations for the emulators and the roms. + +- Or just help us by doing bug reports on all the issues you find (please check old issues first before submitting a new one). + +- By joining the ✨-new-helpers-start-here channel on [Discord](discord.gg/Dz3szYsP8g) and keeping an eye on the [issues](https://github.com/XargonWan/RetroDECK/issues) tab as well as the [Roadmap](https://github.com/XargonWan/RetroDECK/milestones) tab, you can be up to speed on the latest developments on RetroDECK. + +- We have a [Patreon](https://www.patreon.com/RetroDECK) page if you want to help us keep our build servers running or just buy us a beverage. + +## Any specific examples of what you need help with? + +### Artist/Creators: +- Create new pixel art for the Radial menus. + +- Create easter egg art for various holidays and functions. + +- Create menu art for a new Configurator. + +- Create input art that can be shown when you start a game. + +- Create input art guides for the wiki for the Steam Deck and later various controllers. + +- Create patch note and hype videos. + +- Create instruction videos. + +- Help us make RetroDECK better. + +### Developers: +- Help us put in and make new features. + +- Help us make the Configurator a godot application with full controller support. + +- Help us get releases out faster. + +- Help us make RetroDECK better. + +### Testers: +- Help us test cooker builds and submit bugs and feedback. + +- Help us make RetroDECK better. + +### Everyone: + +- Be kind and follow the rules. + +- Spread the word of RetroDECK if you like it, if you don't like it or have suggestions put them on github into issues or discuss them on discord. + +- Engage with the rest of the community. + +- Help us make RetroDECK better. diff --git a/wiki-rtd/requirements.txt b/wiki-rtd/requirements.txt new file mode 100644 index 00000000..06e83580 --- /dev/null +++ b/wiki-rtd/requirements.txt @@ -0,0 +1,2 @@ +sphinx_rtd_theme +myst-parser \ No newline at end of file