Merge branch 'cooker-0.8.0b' into feat/godot-configurator [skip ci]

This commit is contained in:
XargonWan 2023-12-15 09:51:20 +01:00
commit 70efa031b4
118 changed files with 18644 additions and 6854 deletions

View file

@ -4,6 +4,7 @@ on:
push:
branches:
- cooker*
- feat*
paths:
- '.github/workflows/**'
- 'automation_tools/**'
@ -41,15 +42,7 @@ jobs:
run: "automation_tools/install_dependencies.sh"
- name: Generate cooker build ID
run: |
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"
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_build_id.sh"
- name: Run pre-build automation tasks
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
@ -57,8 +50,8 @@ jobs:
- 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: "Updating release notes in appdata"
run: "automation_tools/appdata_management.sh"
- name: "[DEBUG] Outputting manifest"
run: cat net.retrodeck.retrodeck.yml
@ -69,6 +62,9 @@ jobs:
continue-on-error: true
# Sometimes flatpak download fails, in this case it tries a second time
- name: Run pre-build automation tasks (retry)
if: steps.flatpak-download.outcome == 'failure'
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
- name: "Build flatpak: download only (retry)"
if: steps.flatpak-download.outcome == 'failure'
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh"
@ -101,13 +97,27 @@ jobs:
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 }}-${{ env.buildid }}"
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 }}
@ -119,7 +129,7 @@ jobs:
artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz"
allowUpdates: true
makeLatest: 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
@ -131,3 +141,4 @@ jobs:
name: retrodeck-flatpak
path: RetroDECK-cooker.flatpak
continue-on-error: true

View file

@ -76,7 +76,6 @@ jobs:
hash=($(sha256sum ${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz))
echo $hash > ${GITHUB_WORKSPACE}/RetroDECK-Artifact.sha
mv -f RetroDECK-Artifact.* ${{ secrets.ARTIFACT_REPO }}
continue-on-error: true
- name: Create Bundle
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh"

View file

@ -68,7 +68,7 @@ jobs:
- 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
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: |
@ -140,8 +140,8 @@ jobs:
- 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
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

View file

@ -69,7 +69,7 @@ jobs:
- 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
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: |
@ -141,8 +141,8 @@ jobs:
- 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
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

13
.gitignore vendored
View file

@ -17,3 +17,16 @@ backup
.old
tmp
.godot
rd-submodules/es-de/patches-tmp*
.local/
buildid
# Python #
##########
__pycache__
# Submodules #
##############
rd-submodules/retroarch/
rd-submodules/ryujinx/
rd-submodules/shared-modules/

9
.gitmodules vendored
View file

@ -1,6 +1,9 @@
[submodule "rd-submodules/retroarch"]
path = rd-submodules/retroarch
url = https://github.com/flathub/org.libretro.RetroArch
[submodule "rd-submodules/shared-modules"]
path = rd-submodules/shared-modules
url = https://github.com/flathub/shared-modules.git
[submodule "rd-submodules/retroarch"]
path = rd-submodules/retroarch
url = https://github.com/flathub/org.libretro.RetroArch.git
[submodule "rd-submodules/ryujinx"]
path = rd-submodules/ryujinx
url = https://github.com/flathub/org.ryujinx.Ryujinx

View file

@ -2,13 +2,6 @@
<img src="https://github.com/XargonWan/RetroDECK/blob/main/res/logo.png?raw=true" alt="RetroDECK logo" width="600"/>
</p>
![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)
[![Documentation Status](https://readthedocs.org/projects/retrodeck/badge/?version=latest)](https://retrodeck.readthedocs.io/en/latest/?badge=latest)
# RetroDECK on your device!
<p float="center">
@ -19,35 +12,34 @@
</p>
<br/>
## 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.
![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)
[![Documentation Status](https://readthedocs.org/projects/retrodeck/badge/?version=latest)](https://retrodeck.readthedocs.io/en/latest/?badge=latest)
You can also check out our: [Flathub Page](https://flathub.org/apps/net.retrodeck.retrodeck)<br/>
# What is RetroDECK?
Instead of having several different software on your system for a variety of emulators and frontends you only need to have one: RetroDECK.
## What devices/systems does RetroDECK support:
RetroDECK is a [EmulationStation Desktop Edition](https://es-de.org) (ES-DE) powered flatpak 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 one complete package.
### Steam Deck
It's inspired by embedded emulation systems like:
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.
- AmberELEC
- EmuELEC
- CoreELEC
- Lakka
- Batocera
### 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).<br>
We will start to have a bigger desktop focus after the beta period is over.
The RetroDECK team consists of several veterans from some of the projects mentioned above as well as a bunch of other talented individuals.
### 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.<br/>
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.<br/>
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.
RetroDECK also adds the `RetroDECK Framework` and the `RetroDECK Configurator` on top of the emulators and ES-DE frontend that allows deeper integrations between emulators and easier exposure to a variety of features that you otherwise need to set per emulator basis to create a uniformity between them.
For our long term vision you can check out the following wiki page:
## Do you have any plans for other systems?
RetroDECK does not have plans to support Windows, macOS, Android, or iOS.<br>For similar functionality on Windows you could explore [Retrobat](https://www.retrobat.org/) as an alternative.
[RetroDECK: Visions and Goals](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Visions-and-Goals)
## 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:
### The RetroDECK community:
[Website](https://retrodeck.net) <br/>
[Wiki](https://github.com/XargonWan/RetroDECK/wiki) <br/>
@ -55,24 +47,44 @@ Read and follow the guide here: [Installation instructions](https://github.com/X
[Lemmy](https://lemmy.zip/c/retrodeck)<br/>
[Subreddit](https://www.reddit.com/r/retrodeck)
# How do I start using RetroDECK?
# Short FAQ
We have an in depth How To on how to get started over here:
Please read the [Wiki](https://github.com/XargonWan/RetroDECK/wiki) for even more information.
[How to: Start using RetroDECK](https://github.com/XargonWan/RetroDECK/wiki/How-to%3A-Start-using-RetroDECK)
## What devices/systems does RetroDECK support:
RetroDECK currently supports:
- Steam Deck
- Linux Desktop
For more information read up here:
[Supported Systems](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Supported-Systems)
## Is RetroDECK in Beta?
Yes, here you can read more about the beta period:
[RetroDECK: Beta period](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Beta-period)
## 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.<br/>
Yes, off course! <br>
Read up here on how to help out, there is something for everyone:
###### 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.
[How to: Contribute to RetroDECK](https://github.com/XargonWan/RetroDECK/wiki/How-to%3A-Contribute-to-RetroDECK)
# The RetroDECK Wiki
Please check out the [Wiki](https://github.com/XargonWan/RetroDECK/wiki) for even more information.
## The FAQ
The RetroDECK [FAQ](https://github.com/XargonWan/RetroDECK/wiki/FAQs%3A-Frequently-asked-questions) on the wiki has a vast variety of questions and awnsers.
# How to get support?
Use the supports channels on [Discord](https://discord.gg/Dz3szYsP8g).

View file

@ -1,12 +1,13 @@
# 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^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
hash^VITA3KSHAPLACEHOLDER^https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip
hash^RANIGHTLYCORESPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch_cores.7z
latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main
outside_info^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid
branch^THISBRANCH

View file

@ -0,0 +1,10 @@
#!/bin/bash
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"

View file

@ -1,7 +1,7 @@
#!/bin/bash
# COOKER ONLY
# This script is adding the update portal (permission) to the ooker flatpak.
# 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

View file

@ -2,4 +2,8 @@
# 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
if [ "${GITHUB_REF##*/}" = "main" ]; then
flatpak build-bundle ${GITHUB_WORKSPACE}/.local RetroDECK.flatpak net.retrodeck.retrodeck
else
flatpak build-bundle ${GITHUB_WORKSPACE}/.local RetroDECK-cooker.flatpak net.retrodeck.retrodeck
fi

View file

@ -3,12 +3,21 @@
# 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
if [[ "${GITHUB_REF##*/}" == "main" ]]; then
BUNDLE_NAME="RetroDECK.flatpak"
FOLDER=retrodeck-flatpak
else
BUNDLE_NAME="RetroDECK-cooker.flatpak"
FOLDER=retrodeck-flatpak-cooker
fi
mkdir -vp "${GITHUB_WORKSPACE}"/{local,retrodeck-flatpak-cooker}
flatpak-builder --user --force-clean \
--install-deps-from=flathub \
--install-deps-from=flathub-beta \
--repo=${GITHUB_WORKSPACE}/local \
--repo="${GITHUB_WORKSPACE}/.local" \
--download-only \
${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker \
"${GITHUB_WORKSPACE}/${FOLDER}" \
net.retrodeck.retrodeck.yml

View file

@ -1,14 +1,24 @@
#!/bin/bash
# This script is building the flatpak is the needed files are already downloaded
# 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
if [ "${GITHUB_REF##*/}" = "main" ]; then
BUNDLE_NAME="RetroDECK.flatpak"
FOLDER=retrodeck-flatpak-main
else
BUNDLE_NAME="RetroDECK-cooker.flatpak"
FOLDER=retrodeck-flatpak-cooker
fi
mkdir -vp ${GITHUB_WORKSPACE}/.local
mkdir -vp ${GITHUB_WORKSPACE}/"$FOLDER"
flatpak-builder --user --force-clean \
--install-deps-from=flathub \
--install-deps-from=flathub-beta \
--repo=${GITHUB_WORKSPACE}/local \
--repo=${GITHUB_WORKSPACE}/.local \
--disable-download \
${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker \
${GITHUB_WORKSPACE}/"$FOLDER" \
net.retrodeck.retrodeck.yml

View file

@ -2,16 +2,27 @@
# WARNING: DANGEROUS! Don't use this script lightly
git submodule deinit --all
rm rd-submodules/retroarch
git submodule deinit -f --all
rm -rf rd-submodules/retroarch
git rm -rf --cached rd-submodules/retroarch
rm -rf .git/modules/rd-submodules/retroarch
rm -rf shared-modules
git rm -rf --cached shared-modules
rm -rf .git/modules/shared-modules
rm -rf rd-submodules/ryujinx
git rm -rf --cached rd-submodules/ryujinx
rm -rf .git/modules/rd-submodules/ryujinx
rm -rf rd-submodules/shared-modules
git rm -rf --cached rd-submodules/shared-modules
rm -rf .git/modules/rd-submodules/shared-modules
rm .gitmodules
# Do a commit here before giving the next commands
git submodule add https://github.com/flathub/shared-modules.git rd-submodules/shared-modules
git submodule add https://github.com/flathub/org.libretro.RetroArch.git rd-submodules/retroarch
git submodule add https://github.com/flathub/org.ryujinx.Ryujinx rd-submodules/ryujinx
git submodule init
git submodule add https://github.com/flathub/shared-modules.git
git submodule add https://github.com/flathub/org.libretro.RetroArch rd-submodules/retroarch
git submodule update --remote --merge --recursive

19
build-locally.sh Executable file
View file

@ -0,0 +1,19 @@
#!/bin/bash
export GITHUB_WORKSPACE="."
cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak
cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak
automation_tools/install_dependencies.sh
automation_tools/cooker_build_id.sh
automation_tools/pre_build_automation.sh
automation_tools/cooker_flatpak_portal_add.sh
automation_tools/appdata_management.sh
automation_tools/flatpak_build_download_only.sh
automation_tools/flatpak_build_only.sh
automation_tools/flatpak_build_bundle.sh
rm -f net.retrodeck.retrodeck.appdata.xml
rm -f net.retrodeck.retrodeck.yml
cp net.retrodeck.retrodeck.appdata.xml.bak net.retrodeck.retrodeck.appdata.xml
cp net.retrodeck.retrodeck.yml.bak net.retrodeck.retrodeck.yml

View file

@ -7,6 +7,7 @@
<language>0</language>
<use_discord_presence>true</use_discord_presence>
<fullscreen_menubar>false</fullscreen_menubar>
<feral_gamemode>false</feral_gamemode>
<check_update>false</check_update>
<save_screenshot>true</save_screenshot>
<vk_warning>false</vk_warning>
@ -90,9 +91,9 @@
<TVChannels>1</TVChannels>
<PadChannels>1</PadChannels>
<InputChannels>0</InputChannels>
<TVVolume>50</TVVolume>
<PadVolume>0</PadVolume>
<InputVolume>50</InputVolume>
<TVVolume>100</TVVolume>
<PadVolume>100</PadVolume>
<InputVolume>100</InputVolume>
<TVDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</TVDevice>
<PadDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</PadDevice>
<InputDevice>filter-chain-source</InputDevice>

View file

@ -3,6 +3,10 @@ audio_emulation=0
audio_emulation\default=true
enable_audio_stretching=true
enable_audio_stretching\default=true
input_device=auto
input_device\default=true
input_type=0
input_type\default=true
mic_input_device=Default
mic_input_device\default=true
mic_input_type=0
@ -11,7 +15,9 @@ output_device=auto
output_device\default=true
output_engine=auto
output_engine\default=true
volume=@Variant(\0\0\0\x87?\x80\0\0)
output_type=0
output_type\default=true
volume=1
volume\default=true
[Camera]
@ -233,8 +239,8 @@ filter_mode=true
filter_mode\default=true
large_screen_proportion=@Variant(\0\0\0\x87@\x80\0\0)
large_screen_proportion\default=true
layout_option=0
layout_option\default=true
layout_option=5
layout_option\default=false
mono_render_option=0
mono_render_option\default=true
pp_shader_name=none (builtin)
@ -251,6 +257,10 @@ log_filter=*:Info
log_filter\default=true
[Renderer]
async_presentation=true
async_presentation\default=true
async_shader_compilation=false
async_shader_compilation\default=true
bg_blue=0
bg_blue\default=true
bg_green=0
@ -261,10 +271,16 @@ frame_limit=100
frame_limit\default=true
graphics_api=1
graphics_api\default=true
physical_device=0
physical_device\default=true
resolution_factor=1
resolution_factor\default=true
shaders_accurate_mul=true
shaders_accurate_mul\default=true
spirv_shader_gen=true
spirv_shader_gen\default=true
texture_filter=0
texture_filter\default=true
texture_filter_name=Linear (Default)
texture_filter_name\default=false
use_disk_shader_cache=true
@ -303,6 +319,14 @@ GameList\row1=2
GameList\row1\default=true
GameList\row2=0
GameList\row2\default=true
GameList\show_compat_column=true
GameList\show_compat_column\default=true
GameList\show_region_column=true
GameList\show_region_column\default=true
GameList\show_size_column=true
GameList\show_size_column\default=true
GameList\show_type_column=true
GameList\show_type_column\default=true
GameList\singleLineMode=false
GameList\singleLineMode\default=true
Multiplayer\game_id=0
@ -437,6 +461,10 @@ Shortcuts\Main%20Window\Toggle%203D\Context=1
Shortcuts\Main%20Window\Toggle%203D\Context\default=false
Shortcuts\Main%20Window\Toggle%203D\KeySeq=
Shortcuts\Main%20Window\Toggle%203D\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Custom%20Textures\Context=2
Shortcuts\Main%20Window\Toggle%20Custom%20Textures\Context\default=true
Shortcuts\Main%20Window\Toggle%20Custom%20Textures\KeySeq=F7
Shortcuts\Main%20Window\Toggle%20Custom%20Textures\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context=1
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=false
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=
@ -488,6 +516,8 @@ hideInactiveMouse=false
hideInactiveMouse\default=true
pauseWhenInBackground=false
pauseWhenInBackground\default=true
saveStateWarning=true
saveStateWarning\default=true
screenshot_resolution_factor=0
screenshot_resolution_factor\default=true
showConsole=false
@ -502,6 +532,8 @@ theme=colorful_dark
theme\default=false
[Utility]
async_custom_loading=true
async_custom_loading\default=true
custom_textures=false
custom_textures\default=true
dump_textures=false

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -0,0 +1,22 @@
# Guide: Vita3K
Please note that the PSVita support is still experimental and it will be available starting from RetroDECK 0.8.0b, and for the way Vita3K is actually working the automation is limited.
In order to install a PSVita games is needed to:
- Install a game opening the Vita3K emulator via Configurator, the supported formats are `pkg`, `zip`, `vpk`.
- Upon installation the `zRIF` may be asked, it's different for each game, you can find it via web search by searching for example `WipEout 2048 (EU) zRIF`.
- Install DLCs and patches in the same way.
- Create an empty file in `retrodeck/roms/psvita/gamename.psvita`, please mind the `.psvita` extension.<br>
For example: `roms/psvita/WipEout 2048 (EU).psvita.`
- Edit the empty file adding the game `Title ID` (more below).
- The game should appear in the game list after RetroDECK is re-opened or reloaded from the Utilities.
## How to find a title ID
It can be found inside the Vita3K GUI in the Title ID column, or found via web search.
For example the game `WipEout 2048 (EU)` has an ID that is `PCSF00007`.
So simply add `PCSF00007` to the `WipEout 2048 (EU).psvita` file and the setup for this game is complete.
Related wiki article can be found here:
--
The RetroDECK Team

View file

@ -0,0 +1 @@
1201^1231^0000^2359^RetroDECK-Xmas-splash.svg

View file

@ -16,3 +16,9 @@ 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
# emulators
how-to-install-psvita-games.txt^$roms_folder/psvita

View file

@ -12,5 +12,6 @@ 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)

View file

@ -39,14 +39,14 @@ pcsx2=false
retroarch=false
[borders]
gb=true
gba=true
gbc=true
genesis=true
gg=true
n64=true
psx_ra=true
snes=true
gb=false
gba=false
gbc=false
genesis=false
gg=false
n64=false
psx_ra=false
snes=false
[widescreen]
genesis=false

View file

@ -4,7 +4,7 @@ Buttons/A = SOUTH
Buttons/B = EAST
Buttons/X = NORTH
Buttons/Y = WEST
Buttons/Z = `Full Axis 5+`
Buttons/Z = TR
Buttons/Start = START
Main Stick/Up = `Axis 1-`
Main Stick/Down = `Axis 1+`
@ -20,8 +20,8 @@ C-Stick/Right = `Axis 3+`
C-Stick/Modifier = `Ctrl`
C-Stick/Modifier/Range = 50.0
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
Triggers/L = TL
Triggers/R = TR
Triggers/L = `Full Axis 2+`
Triggers/R = `Full Axis 5+`
D-Pad/Up = `Axis 7-`
D-Pad/Down = `Axis 7+`
D-Pad/Left = `Axis 6-`

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,48 @@
#!/bin/bash
LOG_FILE="$rdhome/.logs/gzdoom.log"
if [ -e "$LOG_FILE" ]; then
rm "$LOG_FILE"
fi
echo "RetroDECK GZDOOM wrapper init." | tee -a "$LOG_FILE"
# List of IWAD files
IWAD_FILES=("DOOM1.WAD" "DOOM.WAD" "DOOM2.WAD" "DOOM2F.WAD" "DOOM64.WAD" "TNT.WAD"
"PLUTONIA.WAD" "HERETIC1.WAD" "HERETIC.WAD" "HEXEN.WAD" "HEXDD.WAD"
"STRIFE0.WAD" "STRIFE1.WAD" "VOICES.WAD" "CHEX.WAD"
"CHEX3.WAD" "HACX.WAD" "freedoom1.wad" "freedoom2.wad" "freedm.wad" # unlicensed iwads
"doom_complete.pk3" # this includes them all
)
echo "Trying to load \"$1\"." | tee -a "$LOG_FILE"
if [ ! -e "$1" ]; then
echo "$1 not found. Quitting." | tee -a "$LOG_FILE"
exit 0
fi
filename=$(basename "$1") # Extracts only the filename from the full path
extension="${filename##*.}" # Extracts the file extension
if [ "$extension" == "doom" ]; then
map_file="$1"
iwad="-iwad $(head -n 1 "$map_file")"
file="-file $(tail -n +2 "$map_file" | sed 's/.*/-file &/')"
echo "Found a .doom file: $1, parsing it." | tee -a "$LOG_FILE"
echo "Calling GZDoom with: \"$iwad $file\"." | tee -a "$LOG_FILE"
gzdoom -config /var/config/gzdoom/gzdoom.ini $iwad $file | tee -a "$LOG_FILE"
else
shopt -s nocasematch # Enable case-insensitive matching
if [[ "${IWAD_FILES[@]}" =~ "$filename" ]]; then
type="iwad"
else
type="file"
fi
shopt -u nocasematch # Disable case-insensitive matching after use
echo "Found $type: $1, loading it." | tee -a "$LOG_FILE"
gzdoom -config /var/config/gzdoom/gzdoom.ini -$type "$1" | tee -a "$LOG_FILE"
fi

View file

@ -1,79 +0,0 @@
#!/usr/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2021-present AmberELEC (https://github.com/AmberELEC)
#. /etc/profile
ROM="${1##*/}"
PLATFORM="doom"
CONF="/storage/.config/distribution/configs/distribution.conf"
function get_setting() {
#We look for the setting on the ROM first, if not found we search for platform and lastly we search globally
PAT="s|^${PLATFORM}\[\"${ROM}\"\].*${1}=\(.*\)|\1|p"
EES=$(sed -n "${PAT}" "${CONF}" | head -1)
if [ -z "${EES}" ]; then
PAT="s|^${PLATFORM}[\.-]${1}=\(.*\)|\1|p"
EES=$(sed -n "${PAT}" "${CONF}" | head -1)
fi
if [ -z "${EES}" ]; then
PAT="s|^global[\.-].*${1}=\(.*\)|\1|p"
EES=$(sed -n "${PAT}" "${CONF}" | head -1)
fi
[ -z "${EES}" ] && EES="false"
}
# Show FPS
get_setting "show_fps"
echo ${EES}
if [ "${EES}" == "auto" ] || [ "${EES}" == "disabled" ] || [ "${EES}" == "false" ] || [ "${EES}" == "none" ] || [ "${EES}" == "0" ]; then
SHOWFPS='0'
else
SHOWFPS='1'
fi
EE_DEVICE=$(cat /storage/.config/.OS_ARCH)
RUN_DIR="/storage/roms/doom"
CONFIG="/storage/.config/distribution/gzdoom/gzdoom.ini"
SAVE_DIR="/storage/roms/gamedata/gzdoom"
if [ ! -L "/storage/.config/gzdoom" ]
then
ln -sf "/storage/.config/distribution/gzdoom" "/storage/.config/gzdoom"
fi
if [ ! -f "/storage/.config/distribution/gzdoom/gzdoom.ini" ]
then
cp -rf /usr/config/distribution/gzdoom/gzdoom.ini /storage/.config/distribution/gzdoom/
fi
mkdir -p ${SAVE_DIR}
params=" -config ${CONFIG} -savedir ${SAVE_DIR}"
# EXT can be wad, WAD, iwad, IWAD, pwad, PWAD or doom
EXT=${1#*.}
# If its not a simple wad (extension .doom) read the file and parse the data
if [ ${EXT} == "doom" ]; then
dos2unix "${1}"
while IFS== read -r key value; do
if [ "$key" == "IWAD" ]; then
params+=" -iwad $value"
fi
if [ "$key" == "MOD" ]; then
params+=" -file $value"
fi
done < "${1}"
else
params+=" -iwad ${1}"
fi
params+=" +gl_es 1 +vid_preferbackend 3 +cl_capfps 0 +vid_fps $SHOWFPS"
cd "${RUN_DIR}"
/usr/bin/gzdoom ${params} >/tmp/logs/gzdoom.log 2>&1

View file

@ -7,7 +7,7 @@ Core:
Use LLVM CPU: ""
Max LLVM Compile Threads: 0
PPU LLVM Greedy Mode: false
PPU LLVM Precompilation: true
LLVM Precompilation: true
Thread Scheduler Mode: Operating System
Set DAZ and FTZ: false
SPU Decoder: Recompiler (LLVM)
@ -33,9 +33,7 @@ Core:
MFC Commands Timeout: 0
MFC Commands Shuffling In Steps: false
Enable TSX: Disabled
Accurate xfloat: false
Approximate xfloat: true
Relaxed xfloat: true
XFloat Accuracy: Approximate
Accurate PPU 128-byte Reservation Op Max Length: 0
Stub PPU Traps: 0
Full Width AVX-512: false
@ -61,6 +59,7 @@ Core:
Max CPU Preempt Count: 0
Allow RSX CPU Preemptions: true
Sleep Timers Accuracy: As Host
Usleep Time Addend: 0
Performance Report Threshold: 500
Enable Performance Report: false
Assume External Debugger: false
@ -74,15 +73,16 @@ Video:
Renderer: Vulkan
Resolution: 1280x720
Aspect ratio: 16:9
Frame limit: Auto
Frame limit: 30
Second Frame Limit: 0
MSAA: Auto
Shader Mode: Async Shader Recompiler
Shader Precision: High
Shader Precision: Auto
Write Color Buffers: false
Write Depth Buffer: false
Read Color Buffers: false
Read Depth Buffer: false
Handle RSX Memory Tiling: false
Log shader programs: false
VSync: false
Debug output: false
@ -104,7 +104,7 @@ Video:
Strict Texture Flushing: false
Multithreaded RSX: false
Relaxed ZCULL Sync: false
Enable 3D: false
3D Display Mode: Disabled
Debug Program Analyser: false
Accurate ZCULL stats: true
Consecutive Frames To Draw: 1
@ -123,13 +123,14 @@ Video:
Disable MSL Fast Math: false
Output Scaling Mode: Bilinear
Vulkan:
Adapter: AMD RADV VANGOGH
Adapter: AMD Custom GPU 0405 (RADV VANGOGH)
Force FIFO present mode: false
Force primitive restart flag: false
Exclusive Fullscreen Mode: Automatic
Asynchronous Texture Streaming 2: false
FidelityFX CAS Sharpening Intensity: 50
Asynchronous Queue Scheduler: Fast
VRAM allocation limit (MB): 65536
Performance Overlay:
Enabled: false
Enable Framerate Graph: false
@ -186,9 +187,13 @@ Input/Output:
Turntable emulated controller: "Null"
GHLtar emulated controller: "Null"
Pad handler mode: Single-threaded
Keep pads connected: false
Pad handler sleep (microseconds): 1000
Background input enabled: true
Show move cursor: false
Lock overlay input to player one: false
Emulated Midi devices: Keyboardßßß@@@Keyboardßßß@@@Keyboardßßß@@@
Load SDL GameController Mappings: true
System:
License Area: SCEE
Language: English (US)
@ -197,6 +202,8 @@ System:
Console time offset (s): 0
PSID high: 0
PSID low: 0
HDD Model Name: ""
HDD Serial Number: ""
Net:
Internet enabled: Disconnected
IP address: 0.0.0.0
@ -208,15 +215,18 @@ Net:
Savestate:
Start Paused: false
Suspend Emulation Savestate Mode: true
Compatible Savestate Mode: false
Inspection Mode Savestates: false
Save Disc Game Data: false
Miscellaneous:
Automatically start games after boot: true
Exit RPCS3 when process finishes: true
Pause emulation on RPCS3 focus loss: false
Start games in fullscreen mode: true
Prevent display sleep while running games: true
Show trophy popups: true
Show shader compilation hint: true
Show PPU compilation hint: true
Use native user interface: true
GDB Server: 127.0.0.1:2345
Silence All Logs: false

View file

@ -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"
"preferred_gpu": "0x1002_0x163F",
"multiplayer_lan_interface_id": "0",
"use_hypervisor": true
}

View file

@ -0,0 +1,121 @@
---
initial-setup: true
gdbstub: false
log-active-shaders: false
log-uniforms: false
log-compat-warn: false
validation-layer: true
pstv-mode: false
show-mode: false
demo-mode: false
show-gui: false
show-info-bar: false
apps-list-grid: false
display-system-apps: true
stretch_the_display_area: false
show-live-area-screen: true
icon-size: 64
archive-log: false
backend-renderer: OpenGL
gpu-idx: 0
high-accuracy: true
resolution-multiplier: 1
disable-surface-sync: true
screen-filter: Bilinear
v-sync: true
anisotropic-filtering: 1
texture-cache: true
show-compile-shaders: true
hashless-texture-cache: false
boot-apps-full-screen: true
audio-backend: SDL
ngs-enable: true
sys-button: 1
sys-lang: 1
sys-date-format: 2
sys-time-format: 0
cpu-pool-size: 10
modules-mode: 0
delay-background: 4
delay-start: 10
background-alpha: 0.300000012
log-level: 0
cpu-backend: Dynarmic
cpu-opt: true
pref-path: RETRODECKHOMEDIR/bios/Vita3K/
discord-rich-presence: true
wait-for-debugger: false
color-surface-debug: false
show-touchpad-cursor: true
performance-overlay: false
perfomance-overlay-detail: 0
perfomance-overlay-position: 0
keyboard-button-select: 229
keyboard-button-start: 40
keyboard-button-up: 82
keyboard-button-right: 79
keyboard-button-down: 81
keyboard-button-left: 80
keyboard-button-l1: 20
keyboard-button-r1: 8
keyboard-button-l2: 24
keyboard-button-r2: 18
keyboard-button-l3: 9
keyboard-button-r3: 11
keyboard-button-triangle: 25
keyboard-button-circle: 6
keyboard-button-cross: 27
keyboard-button-square: 29
keyboard-leftstick-left: 4
keyboard-leftstick-right: 7
keyboard-leftstick-up: 26
keyboard-leftstick-down: 22
keyboard-rightstick-left: 13
keyboard-rightstick-right: 15
keyboard-rightstick-up: 12
keyboard-rightstick-down: 14
keyboard-button-psbutton: 19
keyboard-gui-toggle-gui: 10
keyboard-gui-fullscreen: 68
keyboard-gui-toggle-touch: 23
user-id: 00
user-auto-connect: true
dump-textures: false
display-info-message: true
show-welcome: false
asia-font-support: false
shader-cache: true
spirv-shader: false
current-ime-lang: 4
psn-status: 0
http-enable: true
http-timeout-attempts: 50
http-timeout-sleep-ms: 100
http-read-end-attempts: 10
http-read-end-sleep-ms: 250
tracy-primitive-impl: false
controller-binds:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
controller-led-color:
[]
lle-modules:
[]
ime-langs:
- 4
tracy-advanced-profiling-modules:
[]
...

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<user id="00" name="RetroDECK">
<avatar>/app/retrodeck/retrodeck.png</avatar>
<sort-apps-list type="4" state="1" />
<theme use-background="true">
<content-id>default</content-id>
</theme>
<start-screen type="default">
<path></path>
</start-screen>
<backgrounds />
</user>

View file

@ -12,7 +12,6 @@
<rule type="systempath">
<entry>retroarch</entry>
<entry>org.libretro.RetroArch</entry>
<entry>RetroArch-Linux-x86_64.AppImage</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/RetroArch-Linux*.AppImage</entry>
@ -25,14 +24,18 @@
</emulator>
<core name="RETROARCH">
<rule type="corepath">
<!-- Flatpak RetroDECK -->
<entry>/app/share/libretro/cores</entry>
<!-- Snap package -->
<entry>~/snap/retroarch/current/.config/retroarch/cores</entry>
<entry>/app/share/libretro/cores</entry> <!-- RetroDECK -->
<!-- Non-portable AppImage and compiled from source -->
<entry>~/.config/retroarch/cores</entry>
<!-- Portable AppImage -->
<entry>~/Applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores</entry>
<entry>~/.local/share/applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores</entry>
<entry>~/.local/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores</entry>
<entry>~/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores</entry>
<!-- Flatpak package -->
<entry>~/.var/app/org.libretro.RetroArch/config/retroarch/cores</entry>
<!-- AppImage and compiled from source -->
<entry>~/.config/retroarch/cores</entry>
<!-- Snap package -->
<entry>~/snap/retroarch/current/.config/retroarch/cores</entry>
<!-- Ubuntu and Linux Mint repository -->
<entry>/usr/lib/x86_64-linux-gnu/libretro</entry>
<!-- Fedora repository -->
@ -45,6 +48,27 @@
<entry>/usr/pkg/lib/libretro</entry>
</rule>
</core>
<emulator name="3DSEN-WINDOWS">
<!-- Nintendo NES and Famicom emulator 3dSen -->
<rule type="staticpath">
<entry>~/Applications/3dSen/3dSen.exe</entry>
<entry>~/.local/share/applications/3dSen/3dSen.exe</entry>
<entry>~/.local/bin/3dSen/3dSen.exe</entry>
<entry>~/bin/3dSen/3dSen.exe</entry>
</rule>
</emulator>
<emulator name="ADVANCEMAME">
<!-- Arcade emulator AdvanceMAME -->
<rule type="systempath">
<entry>advmame</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/advancemame/advmame</entry>
<entry>~/.local/share/applications/advancemame/advmame</entry>
<entry>~/.local/bin/advancemame/advmame</entry>
<entry>~/bin/advancemame/advmame</entry>
</rule>
</emulator>
<emulator name="ARES">
<!-- Multi-system emulator ares -->
<rule type="systempath">
@ -78,6 +102,15 @@
<entry>~/.local/share/flatpak/exports/bin/net.cebix.basilisk</entry>
</rule>
</emulator>
<emulator name="BIGPEMU-WINDOWS">
<!-- Atari Jaguar emulator BigPEmu -->
<rule type="staticpath">
<entry>~/Applications/BigPEmu/BigPEmu.exe</entry>
<entry>~/.local/share/applications/BigPEmu/BigPEmu.exe</entry>
<entry>~/.local/bin/BigPEmu/BigPEmu.exe</entry>
<entry>~/bin/BigPEmu/BigPEmu.exe</entry>
</rule>
</emulator>
<emulator name="BLASTEM">
<!-- Sega Mega Drive/Genesis emulator BlastEm -->
<rule type="systempath">
@ -93,6 +126,7 @@
<!-- Super Nintendo/Super Famicom emulator bsnes -->
<rule type="systempath">
<entry>bsnes</entry>
<entry>dev.bsnes.bsnes</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/dev.bsnes.bsnes</entry>
@ -102,7 +136,7 @@
<emulator name="CEMU">
<!-- Nintendo Wii U emulator Cemu -->
<rule type="systempath">
<entry>Cemu-wrapper</entry>
<entry>Cemu-wrapper</entry> <!-- RetroDECK -->
<entry>cemu</entry>
<entry>Cemu</entry>
</rule>
@ -115,21 +149,25 @@
<entry>~/.local/share/applications/Cemu/Cemu</entry>
<entry>~/.local/bin/Cemu/Cemu</entry>
<entry>~/bin/Cemu/Cemu</entry>
<entry>/var/lib/flatpak/exports/bin/info.cemu.Cemu</entry>
<entry>~/.local/share/flatpak/exports/bin/info.cemu.Cemu</entry>
</rule>
</emulator>
<emulator name="CITRA">
<!-- Nintendo 3DS emulator Citra -->
<rule type="systempath">
<entry>citra-qt</entry>
<entry>citra-qt</entry> <!-- RetroDECK -->
<entry>citra</entry>
<entry>citra-emu.citra-nightly</entry>
<entry>org.citra_emu.citra</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/citra*.AppImage</entry>
<entry>~/.local/share/applications/citra*.AppImage</entry>
<entry>~/.local/bin/citra*.AppImage</entry>
<entry>~/bin/citra*.AppImage</entry>
<entry>~/Applications/citra-qt*.AppImage</entry>
<entry>~/.local/share/applications/citra-qt*.AppImage</entry>
<entry>~/.local/bin/citra-qt*.AppImage</entry>
<entry>~/bin/citra-qt*.AppImage</entry>
<entry>~/.citra/canary/citra-qt.AppImage</entry>
<entry>~/.citra/nightly/citra-qt.AppImage</entry>
<entry>/var/lib/flatpak/exports/bin/org.citra_emu.citra</entry>
<entry>~/.local/share/flatpak/exports/bin/org.citra_emu.citra</entry>
</rule>
@ -170,6 +208,7 @@
<!-- Nintendo GameCube and Wii emulator Dolphin -->
<rule type="systempath">
<entry>dolphin-emu</entry>
<entry>dolphin-emulator.dolphin-emu</entry>
<entry>org.DolphinEmu.dolphin-emu</entry>
</rule>
<rule type="staticpath">
@ -211,6 +250,10 @@
<entry>org.duckstation.DuckStation</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/DuckStation*.AppImage</entry>
<entry>~/.local/share/applications/DuckStation*.AppImage</entry>
<entry>~/.local/bin/DuckStation*.AppImage</entry>
<entry>~/bin/DuckStation*.AppImage</entry>
<entry>~/Applications/duckstation-nogui*.AppImage</entry>
<entry>~/.local/share/applications/duckstation-nogui*.AppImage</entry>
<entry>~/.local/bin/duckstation-nogui*.AppImage</entry>
@ -235,6 +278,27 @@
<entry>~/bin/easyrpg/easyrpg-player</entry>
</rule>
</emulator>
<emulator name="EKA2L1">
<!-- Symbian and Nokia N-Gage emulator EKA2L1 -->
<rule type="systempath">
<entry>eka2l1_qt</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/EKA2L1*.AppImage</entry>
<entry>~/.local/share/applications/EKA2L1*.AppImage</entry>
<entry>~/.local/bin/EKA2L1*.AppImage</entry>
<entry>~/bin/EKA2L1*.AppImage</entry>
</rule>
</emulator>
<emulator name="EKA2L1-WINDOWS">
<!-- Symbian and Nokia N-Gage emulator EKA2L1 -->
<rule type="staticpath">
<entry>~/Applications/EKA2L1/eka2l1_qt.exe</entry>
<entry>~/.local/share/applications/EKA2L1/eka2l1_qt.exe</entry>
<entry>~/.local/bin/EKA2L1/eka2l1_qt.exe</entry>
<entry>~/bin/EKA2L1/eka2l1_qt.exe</entry>
</rule>
</emulator>
<emulator name="FINALBURN-NEO">
<!-- Arcade emulator FinalBurn Neo -->
<rule type="systempath">
@ -289,6 +353,7 @@
<!-- Interactive fiction player Gargoyle -->
<rule type="systempath">
<entry>gargoyle</entry>
<entry>io.github.garglk.Gargoyle</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/Gargoyle*.AppImage</entry>
@ -324,6 +389,7 @@
<!-- Atari ST/STE/TT/Falcon emulator Hatari -->
<rule type="systempath">
<entry>hatari</entry>
<entry>org.tuxfamily.hatari</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/org.tuxfamily.hatari</entry>
@ -366,6 +432,15 @@
<entry>~/bin/linapple/linapple</entry>
</rule>
</emulator>
<emulator name="M2EMULATOR-WINDOWS">
<!-- Sega Model 2 Emulator -->
<rule type="staticpath">
<entry>~/Applications/m2emulator/EMULATOR.EXE</entry>
<entry>~/.local/share/applications/m2emulator/EMULATOR.EXE</entry>
<entry>~/.local/bin/m2emulator/EMULATOR.EXE</entry>
<entry>~/bin/m2emulator/EMULATOR.EXE</entry>
</rule>
</emulator>
<emulator name="MAME">
<!-- Arcade emulator MAME -->
<rule type="systempath">
@ -399,6 +474,18 @@
<entry>~/.local/share/flatpak/exports/bin/net.kuribo64.melonDS</entry>
</rule>
</emulator>
<emulator name="MESEN">
<!-- Multi-system emulator Mesen -->
<rule type="systempath">
<entry>mesen2</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/Mesen*.AppImage</entry>
<entry>~/.local/share/applications/Mesen*.AppImage</entry>
<entry>~/.local/bin/Mesen*.AppImage</entry>
<entry>~/bin/Mesen*.AppImage</entry>
</rule>
</emulator>
<emulator name="MGBA">
<!-- Nintendo Game Boy Advance emulator mGBA -->
<rule type="systempath">
@ -430,6 +517,7 @@
<!-- Nintendo NES and Famicom emulator Nestopia UE -->
<rule type="systempath">
<entry>nestopia</entry>
<entry>ca._0ldsk00l.Nestopia</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/ca._0ldsk00l.Nestopia</entry>
@ -440,6 +528,7 @@
<!-- MSX home computer emulator openMSX -->
<rule type="systempath">
<entry>openmsx</entry>
<entry>org.openmsx.openMSX</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/org.openmsx.openMSX</entry>
@ -462,11 +551,15 @@
<!-- Sony PlayStation 2 emulator PCSX2 -->
<rule type="systempath">
<entry>pcsx2-qt</entry>
<entry>net.pcsx2.PCSX2</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/pcsx2*-Qt.AppImage</entry>
<entry>~/.local/bin/pcsx2*-Qt.AppImage</entry>
<entry>~/bin/pcsx2*-Qt.AppImage</entry>
<entry>~/Applications/pcsx2*.AppImage</entry>
<entry>~/.local/share/applications/pcsx2*.AppImage</entry>
<entry>~/.local/bin/pcsx2*.AppImage</entry>
<entry>~/bin/pcsx2*.AppImage</entry>
<entry>/var/lib/flatpak/exports/bin/net.pcsx2.PCSX2</entry>
<entry>~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2</entry>
</rule>
</emulator>
<emulator name="PCSX2-LEGACY">
@ -495,6 +588,9 @@
</emulator>
<emulator name="PLAY!">
<!-- Sony PlayStation 2 emulator Play! -->
<rule type="systempath">
<entry>org.purei.Play</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/Play!*.AppImage</entry>
<entry>~/.local/share/applications/Play!*.AppImage</entry>
@ -508,9 +604,9 @@
<!-- Sony PlayStation Portable emulator PPSSPP -->
<rule type="systempath">
<entry>ppsspp-emu.ppsspp-sdl</entry>
<entry>org.ppsspp.PPSSPP</entry>
<entry>PPSSPPSDL</entry>
<entry>PPSSPPQt</entry>
<entry>org.ppsspp.PPSSPP</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/org.ppsspp.PPSSPP</entry>
@ -534,6 +630,15 @@
<entry>~/.local/share/flatpak/exports/bin/io.github.shiiion.primehack</entry>
</rule>
</emulator>
<emulator name="PROTON">
<!-- Microsoft Windows compatibility layer Proton -->
<rule type="staticpath">
<entry>~/Applications/Proton/wine*.AppImage</entry>
<entry>~/.local/share/applications/Proton/wine*.AppImage</entry>
<entry>~/.local/bin/Proton/wine*.AppImage</entry>
<entry>~/bin/Proton/wine*.AppImage</entry>
</rule>
</emulator>
<emulator name="PUNES">
<!-- Nintendo NES and Famicom emulator puNES -->
<rule type="systempath">
@ -546,6 +651,18 @@
<entry>~/bin/punes/punes</entry>
</rule>
</emulator>
<emulator name="QUASI88">
<!-- NEC PC-8800 series emulator QUASI88 -->
<rule type="systempath">
<entry>quasi88</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/quasi88/quasi88</entry>
<entry>~/.local/share/applications/quasi88/quasi88</entry>
<entry>~/.local/bin/quasi88/quasi88</entry>
<entry>~/bin/quasi88/quasi88</entry>
</rule>
</emulator>
<emulator name="REDREAM">
<!-- Sega Dreamcast emulator Redream -->
<rule type="systempath">
@ -604,21 +721,16 @@
<emulator name="RYUJINX">
<!-- Nintendo Switch emulator Ryujinx -->
<rule type="systempath">
<entry>Ryujinx</entry>
<entry>Ryujinx.Ava</entry>
<entry>Ryujinx.sh</entry>
<entry>org.ryujinx.Ryujinx</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/org.ryujinx.Ryujinx</entry>
<entry>~/.local/share/flatpak/exports/bin/org.ryujinx.Ryujinx</entry>
<entry>~/Applications/publish/Ryujinx</entry>
<entry>~/.local/share/applications/publish/Ryujinx</entry>
<entry>~/.local/bin/publish/Ryujinx</entry>
<entry>~/bin/publish/Ryujinx</entry>
<entry>~/Applications/publish/Ryujinx.Ava</entry>
<entry>~/.local/share/applications/publish/Ryujinx.Ava</entry>
<entry>~/.local/bin/publish/Ryujinx.Ava</entry>
<entry>~/bin/publish/Ryujinx.Ava</entry>
<entry>~/Applications/publish/Ryujinx.sh</entry>
<entry>~/.local/share/applications/publish/Ryujinx.sh</entry>
<entry>~/.local/bin/publish/Ryujinx.sh</entry>
<entry>~/bin/publish/Ryujinx.sh</entry>
</rule>
</emulator>
<emulator name="SAMEBOY">
@ -690,13 +802,30 @@
<entry>~/.local/share/flatpak/exports/bin/io.github.simple64.simple64</entry>
</rule>
</emulator>
<emulator name="SKYEMU">
<!-- Nintendo Game Boy, Game Boy Color, Game Boy Advance and DS emulator SkyEmu -->
<rule type="systempath">
<entry>SkyEmu</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/SkyEmu/SkyEmu</entry>
<entry>~/.local/share/applications/SkyEmu/SkyEmu</entry>
<entry>~/.local/bin/SkyEmu/SkyEmu</entry>
<entry>~/bin/SkyEmu/SkyEmu</entry>
</rule>
</emulator>
<emulator name="SNES9X">
<!-- Super Nintendo emulator Snes9x -->
<rule type="systempath">
<entry>snes9x</entry>
<entry>snes9x-gtk</entry>
<entry>com.snes9x.Snes9x</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/Snes9x*.AppImage</entry>
<entry>~/.local/share/applications/Snes9x*.AppImage</entry>
<entry>~/.local/bin/Snes9x*.AppImage</entry>
<entry>~/bin/Snes9x*.AppImage</entry>
<entry>/var/lib/flatpak/exports/bin/com.snes9x.Snes9x</entry>
<entry>~/.local/share/flatpak/exports/bin/com.snes9x.Snes9x</entry>
</rule>
@ -780,8 +909,19 @@
<entry>~/.local/share/flatpak/exports/bin/net.sf.VICE</entry>
</rule>
</emulator>
<emulator name="VICE-XPLUS4">
<!-- Commodore 8-bit computer emulator VICE (xplus4) -->
<rule type="systempath">
<entry>xplus4</entry>
<entry>vice-jz.xplus4</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE</entry>
<entry>~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE</entry>
</rule>
</emulator>
<emulator name="VICE-XVIC">
<!-- Commodore 8-bit computer emulator VICE (xvic VIC-20) -->
<!-- Commodore 8-bit computer emulator VICE (xvic) -->
<rule type="systempath">
<entry>xvic</entry>
<entry>vice-jz.xvic</entry>
@ -791,6 +931,18 @@
<entry>~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xvic net.sf.VICE</entry>
</rule>
</emulator>
<emulator name="VISUAL-PINBALL">
<!-- Pinball simulator Visual Pinball -->
<rule type="systempath">
<entry>VPinballX_GL</entry>
</rule>
<rule type="staticpath">
<entry>~/Applications/VPinballX/VPinballX_GL</entry>
<entry>~/.local/share/applications/VPinballX/VPinballX_GL</entry>
<entry>~/.local/bin/VPinballX/VPinballX_GL</entry>
<entry>~/bin/VPinballX/VPinballX_GL</entry>
</rule>
</emulator>
<emulator name="VITA3K">
<!-- Sony PlayStation Vita emulator Vita3K -->
<rule type="systempath">
@ -819,6 +971,28 @@
<entry>~/.local/share/flatpak/exports/bin/app.xemu.xemu</entry>
</rule>
</emulator>
<emulator name="WINE">
<!-- Microsoft Windows compatibility layer Wine -->
<rule type="staticpath">
<entry>~/Applications/Wine/wine*.AppImage</entry>
<entry>~/.local/share/applications/Wine/wine*.AppImage</entry>
<entry>~/.local/bin/Wine/wine*.AppImage</entry>
<entry>~/bin/Wine/wine*.AppImage</entry>
</rule>
</emulator>
<emulator name="XENIA-WINDOWS">
<!-- Microsoft Xbox 360 emulator xenia -->
<rule type="staticpath">
<entry>~/Applications/xenia/xenia.exe</entry>
<entry>~/.local/share/applications/xenia/xenia.exe</entry>
<entry>~/.local/bin/xenia/xenia.exe</entry>
<entry>~/bin/xenia/xenia.exe</entry>
<entry>~/Applications/xenia/xenia_canary.exe</entry>
<entry>~/.local/share/applications/xenia/xenia_canary.exe</entry>
<entry>~/.local/bin/xenia/xenia_canary.exe</entry>
<entry>~/bin/xenia/xenia_canary.exe</entry>
</rule>
</emulator>
<emulator name="XROAR">
<!-- Dragon and Tandy 8-bit computer emulator XRoar -->
<rule type="systempath">
@ -846,6 +1020,12 @@
<entry>~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu</entry>
</rule>
</emulator>
<emulator name="YUZU-CUSTOM">
<!-- Nintendo Switch emulator Yuzu Custom provided by the user -->
<rule type="staticpath">
<entry>~/retrodeck/customs/yuzu/yuzu*.AppImage</entry>
</rule>
</emulator>
<emulator name="ZESARUX">
<!-- Sinclair ZX Spectrum emulator ZEsarUX -->
<rule type="systempath">

View file

@ -3,6 +3,7 @@
<bool name="ApplicationUpdaterPrereleases" value="false" />
<bool name="CollectionShowSystemInfo" value="true" />
<bool name="CustomEventScripts" value="false" />
<bool name="DebugMode" value="false" />
<bool name="DebugSkipInputLogging" value="false" />
<bool name="DebugSkipMissingThemeFiles" value="false" />
<bool name="DebugSkipMissingThemeFilesCustomCollections" value="true" />
@ -69,6 +70,7 @@
<bool name="ScraperOverwriteData" value="false" />
<bool name="ScraperRegionFallback" value="true" />
<bool name="ScraperRespectExclusions" value="true" />
<bool name="ScraperSearchFileHash" value="true" />
<bool name="ScraperSearchMetadataName" value="true" />
<bool name="ScraperSemiautomatic" value="true" />
<bool name="ScraperUseAccountScreenScraper" value="true" />
@ -101,6 +103,7 @@
<int name="ScraperConnectionTimeout" value="30" />
<int name="ScraperRetryOnErrorCount" value="3" />
<int name="ScraperRetryOnErrorTimer" value="3" />
<int name="ScraperSearchFileHashMaxSize" value="384" />
<int name="ScraperTransferTimeout" value="120" />
<int name="ScreenRotate" value="0" />
<int name="ScreensaverSwapImageTimeout" value="10000" />
@ -108,12 +111,13 @@
<int name="ScreensaverTimer" value="300000" />
<int name="SoundVolumeNavigation" value="70" />
<int name="SoundVolumeVideos" value="80" />
<string name="ApplicationUpdaterDownloadDirectory" value="" />
<string name="ApplicationUpdaterFrequency" value="never" />
<string name="ApplicationUpdaterLastCheck" value="20230331T153206" />
<string name="CollectionCustomGrouping" value="unthemed" />
<string name="CollectionSystemsAuto" value="recent" />
<string name="CollectionSystemsCustom" value="" />
<string name="DefaultSortOrder" value="filename, ascending" />
<string name="DefaultSortOrder" value="name, ascending" />
<string name="GamelistViewStyle" value="automatic" />
<string name="InputControllerType" value="xbox" />
<string name="KeyboardQuitShortcut" value="AltF4" />
@ -144,11 +148,13 @@
<string name="ScreensaverSlideshowImageDir" value="~/.emulationstation/slideshow/custom_images" />
<string name="ScreensaverType" value="video" />
<string name="StartupSystem" value="" />
<string name="SystemsSorting" value="default" />
<string name="Theme" value="art-book-next-es-de" />
<string name="ThemeAspectRatio" value="automatic" />
<string name="ThemeColorScheme" value="art-book-next" />
<string name="ThemeSet" value="art-book-next-es-de" />
<string name="ThemeTransitions" value="automatic" />
<string name="ThemeVariant" value="" />
<string name="ThemeVariant" value="system-multi-gamelist-list-immersive" />
<string name="UIMode" value="full" />
<string name="UIMode_passkey" value="uuddlrlrba" />
<string name="UserThemeDirectory" value="" />

View file

@ -5,18 +5,32 @@
<name>3do</name>
<fullname>3DO Interactive Multiplayer</fullname>
<path>%ROMPATH%/3do</path>
<extension>.bin .BIN .chd .CHD .cue .CUE .iso .ISO</extension>
<extension>.bin .BIN .chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP</extension>
<command label="Opera">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/opera_libretro.so %ROM%</command>
<platform>3do</platform>
<theme>3do</theme>
</system>
<system>
<name>adam</name>
<fullname>Coleco Adam</fullname>
<path>%ROMPATH%/adam</path>
<extension>.1dd .1DD .bin .BIN .col .COL .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .ddp .DDP .dfi .DFI .dsk .DSK .hfe .HFE .imd .IMD .mfi .MFI .mfm .MFM .rom .ROM .td0 .TD0 .wav .WAV .7z .7Z .zip .ZIP</extension>
<command label="MAME [Diskette] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -flop1 %ROM%</command>
<command label="MAME [Tape] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cass1 %ROM%</command>
<command label="MAME [Cartridge] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cart1 %ROM%</command>
<command label="MAME [Software list] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam %BASENAME%</command>
<platform>adam</platform>
<theme>adam</theme>
</system>
<!--
<system>
<name>ags</name>
<fullname>Adventure Game Studio Game Engine</fullname>
<path>%ROMPATH%/ags</path>
<extension>.desktop</extension>
<command label="Native binary">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<extension>.desktop .sh</extension>
<command label="Native binary">%STARTDIR%=%GAMEDIR% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<platform>ags</platform>
<theme>ags</theme>
</system>
@ -69,6 +83,7 @@
<command label="Caprice32">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.so %ROM%</command>
<command label="CrocoDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.so %ROM%</command>
<command label="CPCemu (Standalone)">%STARTDIR%=~/.CPCemu %EMULATOR_CPCEMU% %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/amstradcpc cpc6128 -flop1 %ROM%</command>
<platform>amstradcpc</platform>
<theme>amstradcpc</theme>
</system>
@ -81,28 +96,30 @@
<platform>android</platform>
<theme>android</theme>
</system>
<!--
<system>
<name>apple2</name>
<fullname>Apple II</fullname>
<path>%ROMPATH%/apple2</path>
<extension>.do .DO .dsk .DSK .nib .NIB .po .PO</extension>
<command label="LinApple (Standalone)">%EMULATOR_LINAPPLE% -f -b &ndash;&ndash;d1 %ROM%</command>
<command label="Mednafen (Standalone)">%EMULATOR_MEDNAFEN% -force_module apple2 %ROM%</command>
<!-- <command label="LinApple (Standalone)">%EMULATOR_LINAPPLE% -f -b &ndash;&ndash;d1 %ROM%</command> -->
<!-- <command label="Mednafen (Standalone)">%EMULATOR_MEDNAFEN% -force_module apple2 %ROM%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -flop1 %ROM%</command>
<platform>apple2</platform>
<theme>apple2</theme>
</system>
-->
<system>
<name>apple2gs</name>
<fullname>Apple IIGS</fullname>
<path>%ROMPATH%/apple2gs</path>
<extension>.2mg .2MG</extension>
<extension>.2mg .2MG .7z .7z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2gs -rompath %GAMEDIR%\;%ROMPATH%/apple2gs -flop3 \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -flop3 %ROM%</command>
<platform>apple2gs</platform>
<theme>apple2gs</theme>
</system>
<system>
<name>arcade</name>
<fullname>Arcade</fullname>
@ -125,17 +142,31 @@
<platform>arcade</platform>
<theme>arcade</theme>
</system>
<!--
<system>
<name>arcadia</name>
<fullname>Emerson Arcadia 2001</fullname>
<path>%ROMPATH%/arcadia</path>
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "arcadia -rompath %GAMEDIR%\;%ROMPATH%/arcadia -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/arcadia arcadia -cart %ROM%</command>
<platform>arcadia</platform>
<theme>arcadia</theme>
</system>
-->
<system>
<name>archimedes</name>
<fullname>Acorn Archimedes</fullname>
<path>%ROMPATH%/archimedes</path>
<extension>.1dd .1DD .360 .adf .ADF .adl .ADL .adm .ADM .ads .ADS .apd .APD .bbc .BBC .chd .CHD .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .dfi .DFI .dsd .DSD .dsk .DSK .hfe .HFE .ima .IMA .imd .IMD .img .IMG .ipf .IPF .jfd .JFD .mfi .MFI .mfm .MFM .msa .MSA .ssd .SSD .st .ST .td0 .TD0 .ufi .UFI .7z .7Z .zip .ZIP</extension>
<command label="MAME [Model A440/1] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa4401 -flop1 %ROM%</command>
<command label="MAME [Model A3000] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa3000 -flop1 %ROM%</command>
<command label="MAME [Model A310] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa310 -flop1 %ROM%</command>
<command label="MAME [Model A540] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa540 -flop1 %ROM%</command>
<platform>archimedes</platform>
<theme>archimedes</theme>
</system>
<system>
<name>arduboy</name>
<fullname>Arduboy Miniature Game System</fullname>
@ -185,6 +216,7 @@
<path>%ROMPATH%/atari7800</path>
<extension>.a78 .A78 .bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="ProSystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prosystem_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atari7800 a7800 -cart %ROM%</command>
<platform>atari7800</platform>
<theme>atari7800</theme>
</system>
@ -204,19 +236,24 @@
<path>%ROMPATH%/atarijaguar</path>
<extension>.abs .ABS .bin .BIN .cdi .CDI .cof .COF .cue .CUE .j64 .J64 .jag .JAG .prg .PRG .rom .ROM .7z .7Z .zip .ZIP</extension>
<command label="Virtual Jaguar">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/virtualjaguar_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM%</command> -->
<platform>atarijaguar, atarijaguarcd</platform>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM%</command>
<!--<command label="BigPEmu (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM%</command>-->
<!--<command label="BigPEmu (Proton)">%STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM%</command>-->
<platform>atarijaguar</platform>
<theme>atarijaguar</theme>
</system>
<!--
<system>
<name>atarijaguarcd</name>
<fullname>Atari Jaguar CD</fullname>
<path>%ROMPATH%/atarijaguarcd</path>
<extension>.j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP</extension>
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/virtualjaguar_libretro.so %ROM%</command>
<extension>.abs .ABS .bin .BIN .cdi .CDI .cof .COF .cue .CUE .j64 .J64 .jag .JAG .prg .PRG .rom .ROM .7z .7Z .zip .ZIP</extension>
<command label="BigPEmu (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM%</command>
<command label="BigPEmu (Proton)">%STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM%</command>
<platform>atarijaguarcd</platform>
<theme>atarijaguarcd</theme>
</system>
-->
<system>
<name>atarilynx</name>
<fullname>Atari Lynx</fullname>
@ -258,7 +295,7 @@
<platform>arcade</platform>
<theme>atomiswave</theme>
</system>
<!--
<system>
<name>bbcmicro</name>
<fullname>Acorn Computers BBC Micro</fullname>
@ -268,7 +305,7 @@
<platform>bbcmicro</platform>
<theme>bbcmicro</theme>
</system>
-->
<system>
<name>c64</name>
<fullname>Commodore 64</fullname>
@ -299,6 +336,7 @@
<extension>.chd .CHD .cue .CUE .iso .ISO</extension>
<command label="SAME CDi">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/same_cdi_libretro.so %ROM%</command>
<command label="CDi 2015">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cdi2015_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cdimono1 cdimono1 -cdrom %ROM%</command>
<platform>cdimono1</platform>
<theme>cdimono1</theme>
</system>
@ -330,7 +368,7 @@
<platform>channelf</platform>
<theme>channelf</theme>
</system>
<!--
<system>
<name>coco</name>
<fullname>Tandy Color Computer</fullname>
@ -341,7 +379,7 @@
<platform>coco</platform>
<theme>coco</theme>
</system>
-->
<system>
<name>colecovision</name>
<fullname>Coleco ColecoVision</fullname>
@ -354,6 +392,25 @@
<platform>colecovision</platform>
<theme>colecovision</theme>
</system>
<system>
<name>consolearcade</name>
<fullname>Console Arcade Systems</fullname>
<path>%ROMPATH%/consolearcade</path>
<extension>.arcadedef .desktop .iso .ISO .sh .xbe .XBE .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/consolearcade %BASENAME%</command>
<command label="Flycast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM%</command>
<!--<command label="Flycast (Standalone)">%EMULATOR_FLYCAST% %ROM%</command>-->
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM%</command>
<!--<command label="Mednafen [Sega Saturn] (Standalone)">%EMULATOR_MEDNAFEN% -force_module ss %ROM%</command>-->
<!--<command label="Play! (Standalone)">%EMULATOR_PLAY!% &ndash;&ndash;disc %ROM%</command>-->
<command label="RPCS3 Shortcut (Standalone)">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<!--<command label="Triforce (Standalone)">%INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM%</command>-->
<command label="xemu (Standalone)">%INJECT%=%BASENAME%.esprefix %EMULATOR_XEMU% -dvd_path %ROM%</command>
<command label="Shortcut or script">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<platform>arcade</platform>
<theme>consolearcade</theme>
</system>
<system>
<name>cps</name>
<fullname>Capcom Play System</fullname>
@ -363,7 +420,7 @@
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps %BASENAME%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
@ -382,7 +439,7 @@
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps1 %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps1 %BASENAME%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
@ -399,7 +456,7 @@
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps2 %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps2 %BASENAME%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
@ -416,7 +473,7 @@
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps3 %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps3 %BASENAME%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
@ -424,34 +481,38 @@
<platform>arcade</platform>
<theme>cps3</theme>
</system>
<!--
<system>
<name>crvision</name>
<fullname>VTech CreatiVision</fullname>
<path>%ROMPATH%/crvision</path>
<extension>.bin .BIN .rom .ROM .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "crvision -rompath %GAMEDIR%\;%ROMPATH%/crvision -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/crvision crvision -cart %ROM%</command>
<platform>crvision</platform>
<theme>crvision</theme>
</system>
-->
<!--
<system>
<name>daphne</name>
<fullname>Daphne Arcade LaserDisc Emulator</fullname>
<path>%ROMPATH%/daphne</path>
<extension>.daphne .singe</extension>
<command label="Hypseus [Daphne] (Standalone)">%EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands</command>
<command label="Hypseus [Singe] (Standalone)">%EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands</command>
<platform>daphne</platform>
<extension>.daphne .singe .7z .7Z .zip .ZIP</extension>
<!--<command label="Hypseus [Daphne] (Standalone)">%EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands</command>-->
<!--<command label="Hypseus [Singe] (Standalone)">%EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands</command>-->
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/daphne %BASENAME%</command>
<platform>daphne, arcade</platform>
<theme>daphne</theme>
</system>
-->
<system>
<name>doom</name>
<fullname>Doom</fullname>
<path>%ROMPATH%/doom</path>
<extension>.desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD</extension>
<extension>.doom .DOOM .desktop .iwad .IWAD .pk4 .PK4 .pk3 .PK3 .pwad .PWAD .sh .wad .WAD</extension>
<command label="GZDoom (Standalone)">gzdoom.sh %ROM%</command>
<command label="PrBoom">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prboom_libretro.so %ROM%</command>
<!-- <command label="PrBoom+ (Standalone)">%EMULATOR_PRBOOM-PLUS% -iwad %ROM%</command> -->
<command label="Boom 3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/boom3_libretro.so %ROM%</command>
@ -506,6 +567,20 @@
<platform>easyrpg</platform>
<theme>easyrpg</theme>
</system>
<system>
<name>electron</name>
<fullname>Acorn Electron</fullname>
<path>%ROMPATH%/electron</path>
<extension>.1dd .1DD .adf .ADF .adl .ADL .adm .ADM .ads .ADS .bbc .BBC .bin .BIN .cqi .CQI .cqm .CQM .csw .CSW .d77 .D77 .d88 .D88 .dfi .DFI .dsd .DSD .dsk .DSK .hfe .HFE .imd .IMD .img .IMG .mfi .MFI .mfm .MFM .rom .ROM .ssd .SSD .td0 .TD0 .uef .UEF .wav .WAV .7z .7Z .zip .ZIP</extension>
<command label="MAME [Tape] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -autoboot_delay "2" -autoboot_command "*T.\nCH.\"\"\n" -cass1 %ROM%</command>
<command label="MAME [Diskette DFS] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -exp plus1 -cart1 seds -autoboot_delay "2" -autoboot_command "*CAT\n\n\n\n\n\n*EXEC !BOOT\n" -flop1 %ROM%</command>
<command label="MAME [Diskette ADFS] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -exp plus3 -exp:plus3:fdc:1 35dd -autoboot_delay "2" -autoboot_command "*CAT\n\n\n\n\n\n*RUN !BOOT\n" -flop1 %ROM%</command>
<platform>electron</platform>
<theme>electron</theme>
</system>
<!--
<system>
<name>emulators</name>
<fullname>Emulators</fullname>
@ -518,12 +593,14 @@
<platform>pcwindows</platform>
<theme>emulators</theme>
</system>
-->
<system>
<name>famicom</name>
<fullname>Nintendo Family Computer</fullname>
<path>%ROMPATH%/famicom</path>
<extension>.fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP</extension>
<extension>.3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP</extension>
<command label="Mesen">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<command label="Nestopia UE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM%</command>
<!-- <command label="Nestopia UE (Standalone)">%EMULATOR_NESTOPIA-UE% &ndash;&ndash;fullscreen %ROM%</command> -->
<command label="FCEUmm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM%</command>
@ -564,6 +641,7 @@
<path>%ROMPATH%/fds</path>
<extension>.nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP</extension>
<command label="Mesen">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<command label="Nestopia UE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM%</command>
<!-- <command label="Nestopia UE (Standalone)">%EMULATOR_NESTOPIA-UE% &ndash;&ndash;fullscreen %ROM%</command> -->
<command label="FCEUmm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM%</command>
@ -584,17 +662,34 @@
<theme>flash</theme>
</system>
-->
<!--
<system>
<name>fm7</name>
<fullname>Fujitsu FM-7</fullname>
<path>%ROMPATH%/fm7</path>
<extension>.1dd .1DD .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .dfi .DFI .dsk .DSK .hfe .HFE .imd .IMD .mfi .MFI .mfm .MFM .t77 .T77 .td0 .TD0 .wav .WAV .7z .7Z .zip .ZIP</extension>
<command label="MAME [FM-7 Diskette] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 -flop1 %ROM%</command>
<command label="MAME [FM-7 Tape] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 -autoboot_delay "5" -autoboot_command "load\n\n\nrun\n" -cass1 %ROM%</command>
<command label="MAME [FM-7 Software list] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 %BASENAME%</command>
<command label="MAME [FM77AV Diskette] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av -flop1 %ROM%</command>
<command label="MAME [FM77AV Tape] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av -autoboot_delay "5" -autoboot_command "load\n\n\nrun\n" -cass1 %ROM%</command>
<command label="MAME [FM77AV Software list] (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av %BASENAME%</command>
<platform>fm7</platform>
<theme>fm7</theme>
</system>
<system>
<name>fmtowns</name>
<fullname>Fujitsu FM Towns</fullname>
<path>%ROMPATH%/fmtowns</path>
<extension>.cue .CUE .iso .ISO</extension>
<command label="Tsugaru (Standalone)">%EMULATOR_TSUGARU% %EMUDIR%/roms -HOSTSHORTCUT ESC 0 0 FORCEQUIT -FULLSCREEN -CD %ROM% %INJECT%=%BASENAME%.cfg</command>
<extension>.cue .CUE .iso .ISO .7z .7Z .zip .ZIP</extension>
<!--<command label="Tsugaru (Standalone)">%EMULATOR_TSUGARU% %EMUDIR%/roms -HOSTSHORTCUT ESC 0 0 FORCEQUIT -FULLSCREEN -CD %ROM% %INJECT%=%BASENAME%.cfg</command>-->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fmtowns fmtowns %BASENAME%</command>
<platform>fmtowns</platform>
<theme>fmtowns</theme>
</system>
-->
<!--
<system>
<name>fpinball</name>
@ -606,28 +701,41 @@
<theme>fpinball</theme>
</system>
-->
<system>
<name>gamate</name>
<fullname>Bit Corporation Gamate</fullname>
<path>%ROMPATH%/gamate</path>
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gamate -rompath %GAMEDIR%\;%ROMPATH%/gamate -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gamate gamate -cart %ROM%</command>
<platform>gamate</platform>
<theme>gamate</theme>
</system>
<system>
<name>gameandwatch</name>
<fullname>Nintendo Game and Watch</fullname>
<path>%ROMPATH%/gameandwatch</path>
<extension>.mgw .MGW .7z .7Z .zip .ZIP</extension>
<!-- <command label="MAME Local Artwork (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -artpath %ROMPATH%/gameandwatch/artwork -rompath %GAMEDIR%\;%ROMPATH%/gameandwatch %BASENAME%</command> -->
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gameandwatch %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gameandwatch %BASENAME%</command>
<command label="Handheld Electronic (GW)">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gw_libretro.so %ROM%</command>
<platform>gameandwatch</platform>
<theme>gameandwatch</theme>
</system>
<!--
<system>
<name>gamecom</name>
<fullname>Tiger Electronics Game.com</fullname>
<path>%ROMPATH%/gamecom</path>
<extension>.tgc .TGC .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gamecom -rompath %GAMEDIR%\;%ROMPATH%/gamecom -cartridge1 \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gamecom gamecom -cartridge1 %ROM%</command>
<platform>gamecom</platform>
<theme>gamecom</theme>
</system>
-->
<system>
<name>gamegear</name>
<fullname>Sega Game Gear</fullname>
@ -639,6 +747,7 @@
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM%</command>
<!--<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command> -->
<!--<command label="Mednafen (Standalone)">%EMULATOR_MEDNAFEN% -force_module gg %ROM%</command> -->
<!--<command label="ares (Standalone)">%EMULATOR_ARES% &ndash;&ndash;fullscreen &ndash;&ndash;system "Game Gear" %ROM%</command>-->
<platform>gamegear</platform>
<theme>gamegear</theme>
</system>
@ -654,6 +763,7 @@
<!-- <command label="Gearboy (Standalone)">%EMULATOR_GEARBOY% %ROM%</command> -->
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM%</command>
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
<command label="mGBA">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM%</command>
<!-- <command label="mGBA (Standalone)">%EMULATOR_MGBA% -f %ROM%</command> -->
@ -673,6 +783,8 @@
<!-- <command label="VBA-M (Standalone)">%EMULATOR_VBA-M% -f %ROM%</command> -->
<command label="VBA Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.so %ROM%</command>
<command label="gpSP">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.so %ROM%</command>
<!--<command label="ares (Standalone)">%EMULATOR_ARES% &ndash;&ndash;fullscreen &ndash;&ndash;system "Game Boy Advance" %ROM%</command>-->
<!--<command label="SkyEmu (Standalone)">%EMULATOR_SKYEMU% %ROM%</command>-->
<platform>gba</platform>
<theme>gba</theme>
</system>
@ -688,6 +800,7 @@
<!-- <command label="Gearboy (Standalone)">%EMULATOR_GEARBOY% %ROM%</command> -->
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM%</command>
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
<command label="mGBA">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM%</command>
<!-- <command label="mGBA (Standalone)">%EMULATOR_MGBA% -f %ROM%</command> -->
@ -723,17 +836,18 @@
<platform>genesis</platform>
<theme>genesis</theme>
</system>
<!--
<system>
<name>gmaster</name>
<fullname>Hartung Game Master</fullname>
<path>%ROMPATH%/gmaster</path>
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gmaster -rompath %GAMEDIR%\;%ROMPATH%/gmaster -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gmaster gmaster -cart %ROM%</command>
<platform>gmaster</platform>
<theme>gmaster</theme>
</system>
-->
<system>
<name>gx4000</name>
<fullname>Amstrad GX4000</fullname>
@ -741,7 +855,7 @@
<extension>.bin .BIN .cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP</extension>
<command label="Caprice32">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.so %ROM%</command>
<command label="CrocoDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gx4000 gx4000 -cart %ROM%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gx4000 gx4000 -cart %ROM%</command>
<platform>gx4000</platform>
<theme>gx4000</theme>
</system>
@ -774,13 +888,25 @@
<theme>kodi</theme>
</system>
-->
<system>
<name>laserdisc</name>
<fullname>LaserDisc Games</fullname>
<path>%ROMPATH%/laserdisc</path>
<extension>.daphne .singe .7z .7Z .zip .ZIP</extension>
<!--<command label="Hypseus [Daphne] (Standalone)">%EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands</command>-->
<!--<command label="Hypseus [Singe] (Standalone)">%EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands</command>-->
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/laserdisc %BASENAME%</command>
<platform>daphne, arcade</platform>
<theme>laserdisc</theme>
</system>
<system>
<name>lcdgames</name>
<fullname>LCD Handheld Games</fullname>
<path>%ROMPATH%/lcdgames</path>
<extension>.mgw .MGW .7z .7Z .zip .ZIP</extension>
<!-- <command label="MAME Local Artwork (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -artpath %ROMPATH%/lcdgames/artwork -rompath %GAMEDIR%\;%ROMPATH%/lcdgames %BASENAME%</command> -->
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/lcdgames %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/lcdgames %BASENAME%</command>
<command label="Handheld Electronic (GW)">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gw_libretro.so %ROM%</command>
<platform>lcdgames, gameandwatch</platform>
<theme>lcdgames</theme>
@ -814,7 +940,7 @@
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/mame %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/mame %BASENAME%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
@ -827,24 +953,17 @@
<platform>arcade</platform>
<theme>mame</theme>
</system>
<system>
<name>mame-advmame</name>
<fullname>AdvanceMAME</fullname>
<path>%ROMPATH%/mame-advmame</path>
<extension>.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP</extension>
<command>PLACEHOLDER %ROM%</command>
<extension>.7z .7Z .zip .ZIP</extension>
<command label="AdvanceMAME (Standalone)">%STARTDIR%=~/.advance %EMULATOR_ADVANCEMAME% %BASENAME%</command>
<platform>arcade</platform>
<theme>mame-advmame</theme>
</system>
<system>
<name>mame-mame4all</name>
<fullname>MAME4ALL</fullname>
<path>%ROMPATH%/mame-mame4all</path>
<extension>.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP</extension>
<command>PLACEHOLDER %ROM%</command>
<platform>arcade</platform>
<theme>mame-mame4all</theme>
</system>
<system>
<name>mastersystem</name>
<fullname>Sega Master System</fullname>
@ -917,13 +1036,16 @@
<platform>mess</platform>
<theme>mess</theme>
</system>
<system>
<name>model2</name>
<fullname>Sega Model 2</fullname>
<path>%ROMPATH%/model2</path>
<extension>.7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/model2 %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/model2 %BASENAME%</command>
<!--<command label="Model 2 Emulator (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME%</command>-->
<!--<command label="Model 2 Emulator (Proton)">%STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME%</command>-->
<platform>arcade</platform>
<theme>model2</theme>
</system>
@ -1073,11 +1195,21 @@
<platform>arcade</platform>
<theme>naomi</theme>
</system>
<system>
<name>naomi2</name>
<fullname>Sega NAOMI 2</fullname>
<path>%ROMPATH%/naomi2</path>
<extension>.bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP</extension>
<command label="Flycast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM%</command>
<!--<command label="Flycast (Standalone)">%EMULATOR_FLYCAST% %ROM%</command>-->
<platform>arcade</platform>
<theme>naomi2</theme>
</system>
<system>
<name>naomigd</name>
<fullname>Sega NAOMI GD-ROM</fullname>
<path>%ROMPATH%/naomigd</path>
<extension>.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP</extension>
<extension>.bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP</extension>
<command label="Flycast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM%</command>
<!-- <command label="Flycast (Standalone)">%EMULATOR_FLYCAST% %ROM%</command> -->
<platform>arcade</platform>
@ -1093,6 +1225,7 @@
<!-- <command label="DeSmuME (Standalone)">%EMULATOR_DESMUME% %ROM%</command> -->
<command label="melonDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM%</command>
<command label="melonDS (Standalone)">%EMULATOR_MELONDS% %ROM%</command>
<!--<command label="SkyEmu (Standalone)">%EMULATOR_SKYEMU% %ROM%</command>-->
<platform>nds</platform>
<theme>nds</theme>
</system>
@ -1103,7 +1236,7 @@
<extension>.7z .7Z .zip .ZIP</extension>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME%</command> -->
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeo %BASENAME%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeo %BASENAME%</command>
<platform>neogeo</platform>
<theme>neogeo</theme>
</system>
@ -1115,7 +1248,7 @@
<command label="NeoCD">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/neocd_libretro.so %ROM%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% --subsystem neocd -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% neocdz -fullscreen -cd %ROM%</command> -->
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocd neocdz -cdrm %ROM%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocd neocdz -cdrm %ROM%</command>
<platform>neogeocd</platform>
<theme>neogeocd</theme>
</system>
@ -1127,7 +1260,7 @@
<command label="NeoCD">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/neocd_libretro.so %ROM%</command>
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% --subsystem neocd -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
<!-- <command label="FinalBurn Neo (Standalone)">%EMULATOR_FINALBURN-NEO% neocdz -fullscreen -cd %ROM%</command> -->
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocdjp neocdz -cdrm %ROM%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocdjp neocdz -cdrm %ROM%</command>
<platform>neogeocd</platform>
<theme>neogeocdjp</theme>
</system>
@ -1137,8 +1270,9 @@
<path>%ROMPATH%/nes</path>
<extension>.fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP</extension>
<command label="Mesen">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<command label="Nestopia UE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM%</command>
<!-- <command label="Nestopia UE (Standalone)">%EMULATOR_NESTOPIA-UE% &ndash;&ndashfullscreen %ROM%</command> -->
<!-- <command label="Nestopia UE (Standalone)">%EMULATOR_NESTOPIA-UE% &ndash;&ndash;fullscreen %ROM%</command> -->
<command label="FCEUmm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM%</command>
<command label="QuickNES">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quicknes_libretro.so %ROM%</command>
<!-- <command label="puNES (Standalone)">%EMULATOR_PUNES% -u yes %ROM%</command> -->
@ -1148,6 +1282,20 @@
<platform>nes</platform>
<theme>nes</theme>
</system>
<!--
<system>
<name>ngage</name>
<fullname>Nokia N-Gage</fullname>
<path>%ROMPATH%/ngage</path>
<extension>.ngage .zip .ZIP</extension>
<command label="EKA2L1 [Mounted] (Standalone)">%EMULATOR_EKA2L1% &ndash;&ndash;fullscreen &ndash;&ndash;device RH-29 &ndash;&ndash;mount %ROM% &ndash;&ndash;run "%BASENAME%"</command>
<command label="EKA2L1 [Installed] (Standalone)">%EMULATOR_EKA2L1% &ndash;&ndash;fullscreen &ndash;&ndash;device RH-29 &ndash;&ndash;run "%BASENAME%"</command>
<command label="EKA2L1 [Mounted] (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% &ndash;&ndash;fullscreen &ndash;&ndash;device RH-29 &ndash;&ndash;mount %ROM% &ndash;&ndash;run "%BASENAME%"</command>
<command label="EKA2L1 [Installed] (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% &ndash;&ndash;fullscreen &ndash;&ndash;device RH-29 &ndash;&ndash;run "%BASENAME%"</command>
<platform>ngage</platform>
<theme>ngage</theme>
</system>
-->
<system>
<name>ngp</name>
<fullname>SNK Neo Geo Pocket</fullname>
@ -1216,8 +1364,9 @@
<name>pc88</name>
<fullname>NEC PC-8800 Series</fullname>
<path>%ROMPATH%/pc88</path>
<extension>.d88 .D88 .u88 .U88 .m3u .M3U .7z .7Z .zip .ZIP</extension>
<extension>.88d .88D .cmt .CMT .d88 .D88 .m3u .M3U .t88 .T88 .u88 .U88</extension>
<command label="QUASI88">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quasi88_libretro.so %ROM%</command>
<!--<command label="QUASI88 (Standalone)">%EMULATOR_QUASI88% -romdir ~/.quasi88 %ROM%</command>-->
<platform>pc88</platform>
<theme>pc88</theme>
</system>
@ -1275,6 +1424,16 @@
<platform>pico8</platform>
<theme>pico8</theme>
</system>
<system>
<name>plus4</name>
<fullname>Commodore Plus/4</fullname>
<path>%ROMPATH%/plus4</path>
<extension>.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</extension>
<command label="VICE xplus4">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xplus4_libretro.so %ROM%</command>
<!--<command label="VICE xplus4 (Standalone)">%EMULATOR_VICE-XPLUS4% %ROM%</command>-->
<platform>plus4</platform>
<theme>plus4</theme>
</system>
<system>
<name>pokemini</name>
<fullname>Nintendo Pokémon Mini</fullname>
@ -1298,11 +1457,12 @@
<name>ps2</name>
<fullname>Sony PlayStation 2</fullname>
<path>%ROMPATH%/ps2</path>
<extension>.arcadedef .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</extension>
<command label="PCSX2 (Standalone)">%EMULATOR_PCSX2% -batch %ROM%</command>
<extension>.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</extension>
<command label="LRPS2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM%</command>
<command label="PCSX2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM%</command>
<!-- <command label="Play! (Standalone)">%EMULATOR_PLAY!% &ndash;&ndashdisc %ROM%</command> -->
<!--<command label="PCSX2 Legacy (Standalone)">%EMULATOR_PCSX2-LEGACY% &ndash;&ndash;nogui %ROM%</command>-->
<!--<command label="Play! (Standalone)">%EMULATOR_PLAY!% &ndash;&ndash;disc %ROM%</command>-->
<platform>ps2</platform>
<theme>ps2</theme>
</system>
@ -1337,7 +1497,7 @@
<platform>psp</platform>
<theme>psp</theme>
</system>
<!--
<system>
<name>psvita</name>
<fullname>Sony PlayStation Vita</fullname>
@ -1347,7 +1507,7 @@
<platform>psvita</platform>
<theme>psvita</theme>
</system>
-->
<system>
<name>psx</name>
<fullname>Sony PlayStation</fullname>
@ -1362,7 +1522,7 @@
<platform>psx</platform>
<theme>psx</theme>
</system>
<!--
<system>
<name>pv1000</name>
<fullname>Casio PV-1000</fullname>
@ -1372,7 +1532,7 @@
<platform>pv1000</platform>
<theme>pv1000</theme>
</system>
-->
<system>
<name>quake</name>
<fullname>Quake</fullname>
@ -1412,6 +1572,8 @@
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
<!--<command label="bsnes (Standalone)">%EMULATOR_BSNES% &ndash;&ndashfullscreen %ROM%</command> -->
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
<!--<command label="Mesen (Standalone)">%EMULATOR_MESEN% &ndash;&ndash;fullscreen %ROM%</command>-->
<!--<command label="ares (Standalone)">%EMULATOR_ARES% &ndash;&ndash;fullscreen &ndash;&ndash;system "Super Famicom" %ROM%</command>-->
<platform>satellaview</platform>
<theme>satellaview</theme>
</system>
@ -1451,17 +1613,18 @@
<platform>scummvm</platform>
<theme>scummvm</theme>
</system>
<!--
<system>
<name>scv</name>
<fullname>Epoch Super Cassette Vision</fullname>
<path>%ROMPATH%/scv</path>
<extension>.0 .bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "scv -rompath %GAMEDIR%\;%ROMPATH%/scv -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/scv scv -cart %ROM%</command>
<platform>scv</platform>
<theme>scv</theme>
</system>
-->
<system>
<name>sega32x</name>
<fullname>Sega Mega Drive 32X</fullname>
@ -1585,7 +1748,7 @@
<platform>snes</platform>
<theme>snesna</theme>
</system>
<!--
<system>
<name>solarus</name>
<fullname>Solarus Game Engine</fullname>
@ -1595,7 +1758,7 @@
<platform>solarus</platform>
<theme>solarus</theme>
</system>
-->
<system>
<name>spectravideo</name>
<fullname>Spectravideo</fullname>
@ -1614,6 +1777,18 @@
<platform>stratagus</platform>
<theme>stratagus</theme>
</system>
<system>
<name>stv</name>
<fullname>Sega Titan Video Game System</fullname>
<path>%ROMPATH%/stv</path>
<extension>.7z .7Z .zip .ZIP</extension>
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM%</command>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/stv %BASENAME%</command>
<!--<command label="Mednafen (Standalone)">%EMULATOR_MEDNAFEN% -force_module ss %ROM%</command>-->
<platform>arcade</platform>
<theme>stv</theme>
</system>
<system>
<name>sufami</name>
<fullname>Bandai SuFami Turbo</fullname>
@ -1650,13 +1825,26 @@
<platform>supervision</platform>
<theme>supervision</theme>
</system>
<system>
<name>supracan</name>
<fullname>Funtech Super A'Can</fullname>
<path>%ROMPATH%/supracan</path>
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "supracan -rompath %GAMEDIR%\;%ROMPATH%/supracan -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/supracan supracan -cart %ROM%</command>
<platform>supracan</platform>
<theme>supracan</theme>
</system>
<system>
<name>switch</name>
<fullname>Nintendo Switch</fullname>
<path>%ROMPATH%/switch</path>
<extension>.nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI</extension>
<command label="Yuzu (Standalone)">%INJECT%=%BASENAME%.esprefix %EMULATOR_YUZU% -f -g %ROM%</command>
<!-- <command label="Ryujinx (Standalone)">%EMULATOR_RYUJINX% %ROM%</command> -->
<command label="Ryujinx (Standalone)">%EMULATOR_RYUJINX% %ROM%</command>
<command label="Yuzu (User provided)">%INJECT%=%BASENAME%.esprefix %EMULATOR_YUZU-CUSTOM% -f -g %ROM%</command>
<platform>switch</platform>
<theme>switch</theme>
</system>
@ -1664,9 +1852,12 @@
<name>symbian</name>
<fullname>Symbian</fullname>
<path>%ROMPATH%/symbian</path>
<extension>.7z .7Z .zip .ZIP</extension>
<command>PLACEHOLDER %ROM%</command>
<platform>android</platform>
<extension>.sis .SIS .sisx .SISX .symbian</extension>
<command label="EKA2L1 [Nokia N-Gage] (Standalone)">%EMULATOR_EKA2L1% --fullscreen --device RH-29 --run "%BASENAME%"</command>
<command label="EKA2L1 [Nokia N70] (Standalone)">%EMULATOR_EKA2L1% --fullscreen --device RM-84 --run "%BASENAME%"</command>
<command label="EKA2L1 [Nokia N97] (Standalone)">%EMULATOR_EKA2L1% --fullscreen --device RM-507 --run "%BASENAME%"</command>
<command label="EKA2L1 [Custom device] (Standalone)">%EMULATOR_EKA2L1% --fullscreen --device %INJECT%=%BASENAME%.device --run "%BASENAME%"</command>
<platform>ngage</platform>
<theme>symbian</theme>
</system>
<!--
@ -1704,7 +1895,7 @@
<platform>pcenginecd</platform>
<theme>tg-cd</theme>
</system>
<!--
<system>
<name>ti99</name>
<fullname>Texas Instruments TI-99</fullname>
@ -1714,7 +1905,7 @@
<platform>ti99</platform>
<theme>ti99</theme>
</system>
-->
<system>
<name>tic80</name>
<fullname>TIC-80 Game Engine</fullname>
@ -1734,6 +1925,15 @@
<theme>to8</theme>
</system>
<!--
<system>
<name>triforce</name>
<fullname>Namco-Sega-Nintendo Triforce</fullname>
<path>%ROMPATH%/triforce</path>
<extension>.ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP</extension>
<command label="Triforce (Standalone)">%INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM%</command>
<platform>arcade</platform>
<theme>triforce</theme>
</system>
<system>
<name>trs-80</name>
<fullname>Tandy TRS-80</fullname>
@ -1745,6 +1945,18 @@
<platform>trs-80</platform>
<theme>trs-80</theme>
</system>
<system>
<name>type-x</name>
<fullname>Taito Type X</fullname>
<path>%ROMPATH%/type-x</path>
<extension>.AppImage .desktop .exe .EXE .sh</extension>
<command label="Wine (Standalone)">%STARTDIR%=%GAMEDIR% %EMULATOR_WINE% %ROM%</command>
<command label="Proton (Standalone)">%STARTDIR%=%GAMEDIR% %EMULATOR_PROTON% %ROM%</command>
<command label="AppImage">%EMULATOR_OS-SHELL% -c "%ROM%"</command>
<command label="Shortcut or script">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<platform>arcade</platform>
<theme>type-x</theme>
</system>
-->
<system>
<name>uzebox</name>
@ -1799,22 +2011,23 @@
<fullname>Visual Pinball</fullname>
<path>%ROMPATH%/vpinball</path>
<extension>.vpt .VPT .vpx .VPX</extension>
<command label="Visual Pinball (Standalone)">PLACEHOLDER %ROM%</command>
<command label="Visual Pinball (Standalone)">%EMULATOR_VISUAL-PINBALL% -Minimized -Play %ROM%</command>
<platform>vpinball</platform>
<theme>vpinball</theme>
</system>
-->
<!--
<system>
<name>vsmile</name>
<fullname>VTech V.Smile</fullname>
<path>%ROMPATH%/vsmile</path>
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "vsmile -rompath %GAMEDIR%\;%ROMPATH%/vsmile -cart \"%ROMRAW%\""</command>
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/vsmile vsmile -cart %ROM%</command>
<platform>vsmile</platform>
<theme>vsmile</theme>
</system>
-->
<system>
<name>wasm4</name>
<fullname>WASM-4 Fantasy Console</fullname>
@ -1881,7 +2094,7 @@
<path>%ROMPATH%/x68000</path>
<extension>.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</extension>
<command label="PX68k">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/px68k_libretro.so %ROM%</command>
<!-- <command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/x68000 x68000 -flop1 %ROM%</command> -->
<command label="MAME (Standalone)">%STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/x68000 x68000 -flop1 %ROM%</command>
<platform>x68000</platform>
<theme>x68000</theme>
</system>
@ -1899,8 +2112,10 @@
<name>xbox360</name>
<fullname>Microsoft Xbox 360</fullname>
<path>%ROMPATH%/xbox360</path>
<extension>. .iso .ISO .xex .XEX</extension>
<command>PLACEHOLDER %ROM%</command>
<extension>. .desktop .iso .ISO .sh .xex .XEX</extension>
<command label="xenia (Wine)">%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM%</command>
<command label="xenia (Proton)">%STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_XENIA-WINDOWS% %ROM%</command>
<command label="Shortcut or script">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<platform>xbox360</platform>
<theme>xbox360</theme>
</system>

View file

@ -16,11 +16,13 @@ configurator_process_complete_dialog() {
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."
--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 quit RetroDECK."
if [ ! $? == 0 ] # OK button clicked
then
if [ ! $? == 0 ]; then # OK button clicked
configurator_welcome_dialog
elif [ ! $? == 1 ]; then # Quit button clicked
pkill -f retrodeck
pkill -f emulationstation
fi
}
@ -113,7 +115,7 @@ configurator_move_folder_dialog() {
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
declare -g "$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
@ -146,7 +148,7 @@ configurator_move_folder_dialog() {
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"
declare -g "$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."

View file

@ -9,14 +9,14 @@ directory_browse() {
while [ $path_selected == false ]
do
local target="$(zenity --file-selection --title="Choose $1" --directory)"
if [ ! -z $target ] #yes
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
echo "$target"
break
fi
else
@ -161,7 +161,7 @@ conf_read() {
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
declare -g "$current_setting_name=$current_setting_value" # Write the current setting name and value to memory
fi
fi
fi
@ -341,7 +341,7 @@ finit() {
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
case "$finit_dest_choice" in
"Back" | "" ) # Back or X button quits
rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted
@ -352,8 +352,8 @@ finit() {
"Internal Storage" ) # Internal
echo "Internal selected"
rdhome="$HOME/retrodeck"
if [[ -L $rdhome ]]; then #Remove old symlink from existing install, if it exists
unlink $rdhome
if [[ -L "$rdhome" ]]; then #Remove old symlink from existing install, if it exists
unlink "$rdhome"
fi
;;
@ -366,9 +366,9 @@ finit() {
--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
--text="SD Card was not found 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
@ -395,8 +395,8 @@ finit() {
--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
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
@ -467,7 +467,7 @@ install_retrodeck_controller_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/RetroDECK_controller_config.vdf" "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf"
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

View file

@ -103,6 +103,11 @@ primehackqtconf="/var/config/primehack/Qt.ini"
rpcs3conf="/var/config/rpcs3/config.yml"
rpcs3vfsconf="/var/config/rpcs3/vfs.yml"
# Vita3k config files
vita3kconf="/var/data/Vita3K/config.yml"
vita3kusrconfdir="$bios_folder/Vita3K/Vita3K"
# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions
if [ -f "$HOME/retrodeck/.lock" ]
then
@ -126,9 +131,13 @@ if [[ ! -f "$rd_conf" ]]; then
fi
# Check if SD card path has changed from SteamOS update
if [[ ! -d $default_sd && "$(ls -A /run/media/deck/)" ]]; then
if [[ ! -d "$default_sd" && "$(ls -A /run/media/deck/)" ]]; then
if [[ $(find media/deck/* -maxdepth 0 -type d -print | wc -l) -eq 1 ]]; then # If there is only one SD card found in the new Steam OS 3.5 location, assign it as the default
default_sd="$(find media/deck/* -maxdepth 0 -type d -print)"
else # If the default legacy path cannot be found, and there are multiple entries in the new Steam OS 3.5 SD card path, let the user pick which one to use
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")
default_sd="$(directory_browse "SD Card Location")"
fi
fi
cp $rd_defaults $rd_conf # Load default settings file

View file

@ -17,7 +17,7 @@ set_setting_value() {
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"
declare -g "$setting_name_to_change=$setting_value_to_change"
fi
;;
@ -37,7 +37,7 @@ set_setting_value() {
fi
;;
"rpcs3" ) # This does not currently work for settings with a $ in them
"rpcs3" | "vita3k" ) # 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
@ -72,7 +72,7 @@ get_setting_name() {
echo ''"$current_setting_line"'' | grep -o -P '(?<=name\=\").*(?=\" value)'
;;
"rpcs3" )
"rpcs3" | "vita3k" )
echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g'
;;
@ -116,7 +116,7 @@ get_setting_value() {
fi
;;
"rpcs3" ) # For files with this syntax - setting_name: setting_value
"rpcs3" | "vita3k" ) # For files with this syntax - setting_name: setting_value
if [[ -z $current_section_name ]]; then
echo $(grep -o -P "(?<=$current_setting_name: ).*" "$1")
else

View file

@ -229,6 +229,11 @@ post_update() {
set_setting_value "$ppssppcontrolsconf" "R" "1-51,10-192" "ppsspp" "ControlMapping"
fi
if [[ $prev_version -le "073" ]]; then
# In version 0.7.3b, there was a bug that prevented the correct creations of the roms/system folders, so we force recreate them.
emulationstation --home /var/config/emulationstation --create-system-dirs
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
@ -239,8 +244,7 @@ post_update() {
fi
if [[ -f "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" ]]; then # If RetroDECK controller profile has been previously installed
cp -f "$emuconfigs/defaults/retrodeck/RetroDECK_controller_config.vdf" "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf"
rsync -rlD --mkpath "/app/retrodeck/binding_icons/" "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/"
install_retrodeck_controller_profile
fi
update_splashscreens

View file

@ -19,7 +19,7 @@ prepare_emulator() {
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)"
declare -g "$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')
@ -30,7 +30,7 @@ prepare_emulator() {
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)"
declare -g "$current_setting_name=$rdhome/$(basename $current_setting_value)"
fi
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
@ -45,9 +45,9 @@ prepare_emulator() {
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"
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"
@ -539,32 +539,32 @@ prepare_emulator() {
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" =~ ^(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
@ -642,6 +642,7 @@ prepare_emulator() {
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 {} \;
@ -666,6 +667,68 @@ prepare_emulator() {
fi
fi
if [[ "$emulator" =~ ^(vita3k|Vita3K|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands
echo "----------------------"
echo "Initializing Vita3K"
echo "----------------------"
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
echo "Figure out what Vita3k needs for multi-user"
else # Single-user actions
# NOTE: the emulator is writing in "." so it must be placed in the rw filesystem. A symlink of the binary is already placed in /app/bin/Vita3K
rm -rf "/var/data/Vita3K"
mkdir -p "/var/data/Vita3K"
unzip "/app/retrodeck/vita3k.zip" -d "/var/data/Vita3K"
chmod +x "/var/data/Vita3K/Vita3K"
rm -f "/var/data/Vita3K/update-vita3k.sh"
cp -fvr "$emuconfigs/vita3k/config.yml" "/var/data/Vita3K" # Emulator config
cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K" # User config
set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k"
fi
# Shared actions
dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe?
# Installing firmware
# TODO: at the moment this is here instead of a tool because it seems like it cannot run without Firmware
curl "http://dus01.psv.update.playstation.net/update/psv/image/2022_0209/rel_f2c7b12fe85496ec88a0391b514d6e3b/PSVUPDAT.PUP" -po /tmp/PSVUPDAT.PUP
curl "http://dus01.psp2.update.playstation.net/update/psp2/image/2019_0924/sd_8b5f60b56c3da8365b973dba570c53a5/PSP2UPDAT.PUP?dest=us" -po /tmp/PSP2UPDAT.PUP
Vita3K --firmware /tmp/PSVUPDAT.PUP
Vita3K --firmware /tmp/PSP2UPDAT.PUP
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe?
set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k"
fi
fi
if [[ "$emulator" =~ ^(mame|MAME|all)$ ]]; then
# TODO: do a proper script
# This is just a placeholder script to test the emulator's flow
echo "----------------------"
echo "Initializing MAME"
echo "----------------------"
mkdir -p "/var/config/mame"
cp -fvr "$emuconfigs/mame/**" "/var/config/mame"
fi
if [[ "$emulator" =~ ^(gzdoom|GZDOOM|all)$ ]]; then
# TODO: do a proper script
# This is just a placeholder script to test the emulator's flow
echo "----------------------"
echo "Initializing GZDOOM"
echo "----------------------"
mkdir -p "/var/config/gzdoom"
mkdir -p "/var/data/gzdoom"
cp -fvr "$emuconfigs/gzdoom/gzdoom.ini" "/var/config/gzdoom"
cp -fvr "$emuconfigs/gzdoom/gzdoom.pk3" "/var/data/gzdoom"
sed -i 's#RETRODECKROMSDIR#'$roms_folder'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKSAVESDIR#'$saves_folder'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
fi
# Update presets for all emulators after any reset or move
if [[ ! "$emulator" == "retrodeck" ]]; then
build_retrodeck_current_presets

View file

@ -0,0 +1,435 @@
"""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",
"~/.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'<root>')
parser.feed(f.read())
parser.feed(b'</root>')
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()

View file

@ -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<qkey>(?:\\.|[^\\"])+)"|(?P<key>#?[a-z0-9\-\_\\\?]+))'
r'([ \t]*('
r'"(?P<qval>(?:\\.|[^\\"])*)(?P<vq_end>")?'
r'|(?P<val>[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('<i')
uint64 = struct.Struct('<Q')
int64 = struct.Struct('<q')
float32 = struct.Struct('<f')
def read_string(s, idx, wide=False):
if wide:
end = s.find(b'\x00\x00', idx)
if (end - idx) % 2 != 0:
end += 1
else:
end = s.find(b'\x00', idx)
if end == -1:
raise SyntaxError("Unterminated cstring (offset: %d)" % idx)
result = s[idx:end]
if wide:
result = result.decode('utf-16')
elif bytes is not str:
result = result.decode('utf-8', 'replace')
else:
try:
result.decode('ascii')
except:
result = result.decode('utf-8', 'replace')
return result, end + (2 if wide else 1)
stack = [mapper()]
idx = 0
CURRENT_BIN_END = BIN_END if not alt_format else BIN_END_ALT
while len(s) > 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('<i')
uint64 = struct.Struct('<Q')
int64 = struct.Struct('<q')
float32 = struct.Struct('<f')
for key, value in obj.items():
if isinstance(key, string_type):
key = key.encode('utf-8')
else:
raise TypeError("dict keys must be of type str, got %s" % type(key))
if isinstance(value, dict):
yield BIN_NONE + key + BIN_NONE
for chunk in _binary_dump_gen(value, level + 1, alt_format=alt_format):
yield chunk
elif isinstance(value, UINT_64):
yield BIN_UINT64 + key + BIN_NONE + uint64.pack(value)
elif isinstance(value, INT_64):
yield BIN_INT64 + key + BIN_NONE + int64.pack(value)
elif isinstance(value, string_type):
try:
value = value.encode('utf-8') + BIN_NONE
yield BIN_STRING
except:
value = value.encode('utf-16') + BIN_NONE * 2
yield BIN_WIDESTRING
yield key + BIN_NONE + value
elif isinstance(value, float):
yield BIN_FLOAT32 + key + BIN_NONE + float32.pack(value)
elif isinstance(value, (COLOR, POINTER, int, int_type)):
if isinstance(value, COLOR):
yield BIN_COLOR
elif isinstance(value, POINTER):
yield BIN_POINTER
else:
yield BIN_INT32
yield key + BIN_NONE
yield int32.pack(value)
else:
raise TypeError("Unsupported type: %s" % type(value))
yield BIN_END if not alt_format else BIN_END_ALT
def vbkv_loads(s, mapper=dict, merge_duplicate_keys=True):
"""
Deserialize ``s`` (``bytes`` containing a VBKV 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 s[:4] != b'VBKV':
raise ValueError("Invalid header")
checksum, = struct.unpack('<i', s[4:8])
if checksum != crc32(s[8:]):
raise ValueError("Invalid checksum")
return binary_loads(s[8:], mapper, merge_duplicate_keys, alt_format=True)
def vbkv_dumps(obj):
"""
Serialize ``obj`` to a VBKV formatted ``bytes``.
"""
data = b''.join(_binary_dump_gen(obj, alt_format=True))
checksum = crc32(data)
return b'VBKV' + struct.pack('<i', checksum) + data

View file

@ -0,0 +1,219 @@
# pylint: disable=no-member,unnecessary-dunder-call
from collections import Counter
_iter_values = 'values'
_range = range
_string_type = str
import collections as _c
class _kView(_c.KeysView):
def __iter__(self):
return self._mapping.iterkeys()
class _vView(_c.ValuesView):
def __iter__(self):
return self._mapping.itervalues()
class _iView(_c.ItemsView):
def __iter__(self):
return self._mapping.iteritems()
class VDFDict(dict):
def __init__(self, data=None):
"""
This is a dictionary that supports duplicate keys and preserves insert order
``data`` can be a ``dict``, or a sequence of key-value tuples. (e.g. ``[('key', 'value'),..]``)
The only supported type for key is str.
Get/set duplicates is done by tuples ``(index, key)``, where index is the duplicate index
for the specified key. (e.g. ``(0, 'key')``, ``(1, 'key')``...)
When the ``key`` is ``str``, instead of tuple, set will create a duplicate and get will look up ``(0, key)``
"""
super().__init__()
self.__omap = []
self.__kcount = Counter()
if data is not None:
if not isinstance(data, (list, dict)):
raise ValueError("Expected data to be list of pairs or dict, got %s" % type(data))
self.update(data)
def __repr__(self):
out = "%s(" % self.__class__.__name__
out += "%s)" % repr(list(self.iteritems()))
return out
def __len__(self):
return len(self.__omap)
def _verify_key_tuple(self, key):
if len(key) != 2:
raise ValueError("Expected key tuple length to be 2, got %d" % len(key))
if not isinstance(key[0], int):
raise TypeError("Key index should be an int")
if not isinstance(key[1], _string_type):
raise TypeError("Key value should be a str")
def _normalize_key(self, key):
if isinstance(key, _string_type):
key = (0, key)
elif isinstance(key, tuple):
self._verify_key_tuple(key)
else:
raise TypeError("Expected key to be a str or tuple, got %s" % type(key))
return key
def __setitem__(self, key, value):
if isinstance(key, _string_type):
key = (self.__kcount[key], key)
self.__omap.append(key)
elif isinstance(key, tuple):
self._verify_key_tuple(key)
if key not in self:
raise KeyError("%s doesn't exist" % repr(key))
else:
raise TypeError("Expected either a str or tuple for key")
super().__setitem__(key, value)
self.__kcount[key[1]] += 1
def __getitem__(self, key):
return super().__getitem__(self._normalize_key(key))
def __delitem__(self, key):
key = self._normalize_key(key)
result = super().__delitem__(key)
start_idx = self.__omap.index(key)
del self.__omap[start_idx]
dup_idx, skey = key
self.__kcount[skey] -= 1
tail_count = self.__kcount[skey] - dup_idx
if tail_count > 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)

View file

@ -4,7 +4,7 @@ GenericName=RetroDECK Configuration Utility
Type=Application
Comment=A handy tool to change common RetroDECK settings
Icon=net.retrodeck.retrodeck
Exec=/app/tools/configurator.sh
Exec=/bin/bash /app/tools/configurator.sh
Terminal=false
StartupNotify=false
Keywords=multi;engine;emulator;standalone;steam;deck

View file

@ -4,7 +4,7 @@
<id>net.retrodeck.retrodeck</id>
<launchable type="desktop-id">net.retrodeck.retrodeck.desktop</launchable>
<name>RetroDECK</name>
<summary>RetroDECK brings an environment to catalog and play your retro games directly on your Steam Deck.</summary>
<summary>RetroDECK brings an environment to catalog and play your retro games directly on your Steam Deck</summary>
<developer_name>RetroDECK Team</developer_name>
<url type="homepage">https://retrodeck.net</url>
<url type="bugtracker">https://github.com/XargonWan/RetroDECK/issues</url>
@ -65,12 +65,80 @@
<project_license>GPL-3.0</project_license>
<metadata_license>CC0-1.0</metadata_license>
<releases>
<release version="0.8.0b" date="2023-09-28">
<release version="0.8.0b" date="2023-12-14">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.0b</url>
<description>
<p>News:</p>
<p>Changes:</p>
<ul>
<li>Welcome to cooker 0.8.0b!</li>
<li>Added new system: SOLARUS</li>
<li>Added new engine: GZDOOM</li>
<li>Quit button after emulators reset should act as an actual full quit button</li>
</ul>
<p>Fixes:</p>
<ul>
<li>GZDOOM: now the controller should work properly</li>
<li>GZDOOM: can automatically detect if the loaded file is a WAD or an IWAD</li>
</ul>
<p>Issues:</p>
<ul>
<li>VITA3K is not working, waiting for external fixes</li>
<li>MAME (standalone) is not working, more enhancements needed</li>
</ul>
<p>Missing:</p>
<ul>
<li>GZDOOM: hotkeys</li>
<li>SOLARUS: hotkeys</li>
<li>A proper reset script for the new emulators, now it's just a draft</li>
</ul>
</description>
</release>
<release version="0.7.5b" date="2023-14-12">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.5b</url>
<description>
<p>Bug fixes and other changes:</p>
<ul>
<li>RetroDECK Team wishes you happy holidays with a festive loading screen!</li>
<li>Framework: Fixed the SD card path resolution for SteamOS 3.5</li>
<li>Configurator: Added the possibility to reset ES-DE configs via Configurator and CLI</li>
<li>RetroArch: Borders/Overlays are now disabled by default on fresh installs to prevent screen burn-in</li>
<li>RetroArch: added nightly cores, stable cores have priority over them</li>
<li>RPCS3: tweaked confing to improve performance</li>
<li>Dolphin (SA): fixed GC buttons layout. Now R1 is Z and L2/R2 are L/R</li>
<li>CEMU: tweaked audio config to choose the correct output device when docked</li>
</ul>
<p>Updates:</p>
<ul>
<li>All standalone emulators to their latest versions (prior to llvm17 and 6.6 framework updates)</li>
</ul>
</description>
</release>
<release version="0.7.4b" date="2023-11-18">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.4b</url>
<description>
<p>Hotfix:</p>
<ul>
<li>Fixed a bug where the system folders were not correctly generated</li>
<li>Fixed a bug where the RetroDECK Configurator desktop file was not opening the Configurator from Desktop Mode</li>
<li>Fixed a bug where the theme was not showing correctly</li>
<li>Added retrodeck and configurator commands to be called from the shell or bash inside flatpak</li>
</ul>
<p>Known issues:</p>
<ul>
<li>Please check the know issues in the Wiki under General Infomration</li>
</ul>
</description>
</release>
<release version="0.7.3b" date="2023-11-14">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.3b</url>
<description>
<p>Updates:</p>
<ul>
<li>All standalone emulators</li>
<li>EmulationStation Desktop Edition (ES-DE)</li>
</ul>
<p>Known issues:</p>
<ul>
<li>Please check the know issues in the Wiki under General Infomration</li>
</ul>
</description>
</release>
@ -85,7 +153,6 @@
<ul>
<li>Added helper .txt files to the mod and texture pack folders.</li>
<li>The builtin changelog is now scrollable.</li>
<li>The loading bar color is after much debate once again red.</li>
<li>Gameboy Advanced and Game Gear integer scaling changes based on feedback.</li>
<li>Optimized and retooled the patching process for ES-DE.</li>
<li>Various fixes and optimizations to the RetroDECK build process.</li>

View file

@ -1,11 +1,11 @@
app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform
runtime-version: 5.15-22.08
runtime-version: "6.5"
sdk: org.kde.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3
base: io.qt.qtwebengine.BaseApp # Needed for Yuzu
base-version: 5.15-22.08 # Needed for Yuzu
- org.freedesktop.Sdk.Extension.llvm16 # Needed for rpcs3 (llvm15) but llvm16 for CITRA
# base: io.qt.qtwebengine.BaseApp # Needed for Yuzu - Disabled as we're using AppImage for Yuzu
# base-version: "6.5" # Needed for Yuzu - Disabled as we're using AppImage for Yuzu
command: retrodeck.sh
add-extensions:
@ -27,19 +27,22 @@ finish-args:
- --filesystem=home
- --filesystem=/run/media
- --filesystem=/media
- --filesystem=home/.var/app/com.valvesoftware.Steam
- --allow=multiarch
- --talk-name=org.freedesktop.ScreenSaver
- --talk-name=org.freedesktop.PowerManagement.Inhibit
- --talk-name=org.freedesktop.login1.Manager
- --talk-name=org.freedesktop.portal.Flatpak.UpdateMonitor
- --filesystem=xdg-run/app/com.discordapp.Discord:create
- --filesystem=xdg-config/gtk-3.0:ro
#- --filesystem=xdg-config/gtk-3.0:ro #not needed as we got --filesystem=home
# Dolphin
- --allow=bluetooth
# 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
# XEMU - Fixes issues with openSUSE systems, QEMU_AUDIO_DRV is defined as "pa" causing xemu to not launch
- --unset-env=QEMU_AUDIO_DRV
cleanup:
# ES-DE
@ -61,13 +64,13 @@ cleanup:
# XMLSTARLET
- /lib/debug
- /share/runtime
cleanup-commands:
#cleanup-commands:
# Yuzu
- /app/cleanup-BaseApp.sh
#- /app/cleanup-BaseApp.sh
modules:
# dependency of: CEMU
# dependency of: CEMU, CITRA, DOLPHIN
- rd-submodules/shared-modules/libusb/libusb.json
# This module is used to define the RetroDECK version
@ -76,15 +79,16 @@ modules:
# 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
# [ ] Update the VERSION variable on line containing "VERSION=THISBRANCH"
# [ ] 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'
# on main please update this with the version variable, eg: VERSION='0.7.4b'
# on cooker will be THISBRANCH
VERSION=THISBRANCH
git checkout ${GITHUB_REF_NAME}
@ -118,10 +122,10 @@ modules:
- 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
# this affects even the shared-modules's libglu so I have to replace it temporarly
# more info there: https://gitlab.com/gnutls/gnutls/-/issues/1335
# dependency of: CEMU
- name: glu
# dependency of: RETROARCH, CEMU, RPCS3, XEMU
- name: libglu
buildsystem: meson
cleanup:
- /include
@ -130,8 +134,16 @@ modules:
- /lib/*.a
sources:
- type: archive
url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.3.tar.xz
sha256: bd43fe12f374b1192eb15fe20e45ff456b9bc26ab57f0eee919f96ca0f8a330f
# - type: archive
# url: https://mesa.freedesktop.org/archive/glu/glu-9.0.3.tar.xz
# sha256: bd43fe12f374b1192eb15fe20e45ff456b9bc26ab57f0eee919f96ca0f8a330f
# x-checker-data:
# type: anitya
# project-id: 13518
# stable-only: true
# url-template: https://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz
- name: libgudev
buildsystem: meson
@ -219,24 +231,120 @@ modules:
url: https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64
sha256: 4ee662847c588c3ef2fec8bfb304e8739e3dbaba87ccb9a608d691c88f5b64dc
# dependency of: CEMU (13.0.0)
# dependency of: CEMU (13.1.1), CITRA (13.0.0)
- name: glslang
buildsystem: cmake-ninja
config-opts:
- -DCMAKE_BUILD_TYPE=Release
- -DENABLE_CTEST=OFF
# TODO: Does Cemu benefit from SPIRV-Tools-opt
- -DENABLE_OPT=OFF
cleanup:
- /include
- /lib/cmake
sources:
- type: archive
url: https://github.com/KhronosGroup/glslang/archive/13.0.0.tar.gz
sha256: bcda732434f829aa74414ea0e06d329ec8ac28637c38a0de45e17c8fd25a4715
url: https://github.com/KhronosGroup/glslang/archive/13.1.1.tar.gz
sha256: 1c4d0a5a38c8aaf89a2d7e6093be734320599f5a6775b2726beeb05b0c054e66
# 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
# - type: git
# url: https://github.com/KhronosGroup/SPIRV-Tools.git
# tag: sdk-1.3.261.1
# dest: External/spirv-tools
# - type: git
# url: https://github.com/KhronosGroup/SPIRV-Headers.git
# tag: sdk-1.3.261.1
# dest: External/spirv-tools/external/spirv-headers
# enables motion controls on non-wii controllers (switch, ps4, etc)
# dependency of: DOLPHIN, RPCS3
# TODO: 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.1.tar.xz
sha256: 06a77bf2ac5c993305882bc1641017f5bec1592d6d1b64787bad492ab34f2f36
x-checker-data:
type: anitya
project-id: 20540
stable-only: true
url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz
# dependency of: CITRA, CEMU
- 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
# dependency of: CEMU, SOLARUS
- 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
# dependency of: CEMU, ES-DE
- 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.14/pugixml-1.14.tar.gz
sha256: 2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015
x-checker-data:
type: anitya
project-id: 3728
url-template: https://github.com/zeux/pugixml/releases/download/v$version/pugixml-$version.tar.gz
# dependency of: CEMU, RPCS3
- rd-submodules/shared-modules/glew/glew.json
# dependency of: XEMU, MelonDS
- name: libslirp
buildsystem: meson
sources:
- type: git
url: https://gitlab.freedesktop.org/slirp/libslirp.git
tag: v4.7.0
# ES-DE - START
# https://gitlab.com/es-de/emulationstation-de
@ -273,24 +381,6 @@ modules:
- 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:
@ -309,8 +399,10 @@ modules:
- -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
# original link not working, found a mirror
url: https://poppler.freedesktop.org/poppler-22.11.0.tar.xz
#url: https://gitlab.freedesktop.org/poppler/poppler/-/archive/poppler-22.11.0/poppler-poppler-22.11.0.tar.bz2
sha256: 093ba9844ed774285517361c15e21a31ba4df278a499263d4403cca74f2da828
cleanup:
- /lib/pkgconfig
- /include
@ -330,7 +422,7 @@ modules:
sources:
- type: git
url: https://gitlab.com/es-de/emulationstation-de
branch: 5545187d82fabf93256b7d176f39a0a98bcd6c54
branch: 77bf5ed8a03c5d065512cded36e4fb3bea90f4df
- type: shell
commands:
- sed -i 's#"EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#"RetroDECK
@ -482,15 +574,26 @@ modules:
# RetroArch - END
# Not part of the offical RetroArch manifest
# retroarch-cores-nightly must be earlier than retroarch-cores as it will overwrite this cores with the stable ones
- name: retroarch-cores-nightly
buildsystem: simple
build-commands:
- mkdir -p /app/share/libretro/cores/
- mv -f ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/
sources:
- type: archive
url: https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch_cores.7z
sha256: RANIGHTLYCORESPLACEHOLDER
- 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/
- mv -f ./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: e4f7c9843ba827812088b3d1c7d745e802d7691180eb789ba5a37732461f2a06
sha256: a149d34662516d791e8f90507d1107949cb158196d6bbf75105c649fb26504b6
- name: retroarch-sameduck-core
buildsystem: simple
@ -543,10 +646,8 @@ modules:
- -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:
@ -562,8 +663,8 @@ modules:
sources:
- type: git
url: &ppsspp-url https://github.com/hrydgard/ppsspp.git
tag: v1.16.3
commit: a9b6421dfde68be9d065b51e9d519699ce2e9053
tag: v1.16.6
commit: ba0ce344937d17e177ec8656ab957f6b82facdda
x-checker-data:
type: json
url: https://api.github.com/repos/hrydgard/ppsspp/releases/latest
@ -602,43 +703,63 @@ modules:
- 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
url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1648/yuzu-mainline-20231211-14c24e64e.AppImage
sha256: d40f61c2abf8ddd0bb53098e2d9edf0c47e1cfd89e50cf5856b8cc27dbb25bd6
# 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
- rd-submodules/shared-modules/SDL2/SDL2-with-libdecor.json
- name: citra
buildsystem: cmake-ninja
builddir: true
build-options:
env:
CI: '1'
GITHUB_ACTIONS: '1'
GITHUB_REPOSITORY: citra-emu/citra-nightly
GITHUB_REF_NAME: nightly-2025
append-path: /usr/lib/sdk/llvm16/bin
prepend-ld-library-path: /usr/lib/sdk/llvm16/lib
cflags: '-Wno-unused-command-line-argument'
cxxflags: '-Wno-unused-command-line-argument'
config-opts:
- '-DCMAKE_BUILD_TYPE=Release'
- '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON'
- '-DENABLE_LTO=ON'
- '-DCMAKE_C_COMPILER=clang'
- '-DCMAKE_CXX_COMPILER=clang++'
- '-DCMAKE_LINKER=lld'
- '-DENABLE_QT_TRANSLATION=ON'
- '-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON'
- '-DUSE_DISCORD_PRESENCE=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
- install -Dm755 ../citra-launcher.sh /app/bin/citra-launcher
- >-
install -Dm644 ../org.citra_emu.citra.svg
/app/share/icons/hicolor/scalable/apps/citra.svg
- >-
install -Dm644 ../dist/icon.png
/app/share/icons/hicolor/512x512/apps/citra.png
- >-
mv /app/share/mime/packages/citra.xml
/app/share/mime/packages/org.citra_emu.citra.xml
- >-
sed 's/citra/org.citra_emu.citra/g' -i
/app/share/mime/packages/org.citra_emu.citra.xml
sources:
- type: archive
url: >-
https://github.com/citra-emu/citra-nightly/releases/download/nightly-1898/citra-unified-source-20230504-70335a7.tar.xz
sha256: b320585bd8c4c075f63d3d9c74b830718e58fcf04d987a5dcead402a72abf753
https://github.com/citra-emu/citra-nightly/releases/download/nightly-2025/citra-unified-source-20231105-998b9a9.tar.xz
sha256: ebf52af66c6ef729688a29d093d9139baa76973b698c0630a295f38d126cf118
x-checker-data:
type: json
url: https://api.github.com/repos/citra-emu/citra-nightly/releases/latest
@ -647,9 +768,10 @@ modules:
.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
- type: file
path: rd-submodules/citra/org.citra_emu.citra.svg
- type: file
path: rd-submodules/citra/citra-launcher.sh
# CITRA - END
@ -668,62 +790,15 @@ modules:
- 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
url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5284/pcsx2-v1.7.5284-linux-appimage-x64-Qt.AppImage
sha256: b3cb23e07435f7efe7145cddd0cf4d473cc65eee8feae436b8a718fc3017721a
# 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
@ -751,7 +826,7 @@ modules:
# fatal: remote transport reported error
# url: ssh://git@github.com/dolphin-emu/dolphin.git
url: https://github.com/dolphin-emu/dolphin.git
commit: 46b99671d9158e0ca840c1d8ef249db0f321ced7
commit: 032c77b462a220016f23c5079e71bb23e0ad2adf
x-checker-data:
type: json
url: https://dolphin-emu.org/update/latest/beta
@ -846,8 +921,8 @@ modules:
sources:
- type: git
url: https://github.com/xemu-project/xemu.git
tag: v0.7.98
commit: 7bfb7c85378f64f93556c365ea0cc18cb2181dc8
tag: v0.7.116
commit: b3fc80b3a83fa99aeb541a0c665cfb596cedd71c
x-checker-data:
type: json
url: https://api.github.com/repos/xemu-project/xemu/releases/latest
@ -871,15 +946,11 @@ modules:
# 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
config-opts:
- -DUSE_QT6=ON
build-options:
arch:
aarch64:
@ -895,15 +966,8 @@ modules:
# 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
@ -924,14 +988,12 @@ modules:
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_FFMPEG=OFF # Disabled this to force RPCS3 to use our built FFMPEG
- -DUSE_SYSTEM_LIBPNG=ON
- -DUSE_SYSTEM_SDL=ON
- -DUSE_SYSTEM_ZLIB=ON
@ -940,14 +1002,13 @@ modules:
- 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
commit: f9d213650cfe4733937c43d93de91a17f8582820
# RPCS3 - END
@ -962,24 +1023,27 @@ modules:
- -DENABLE_SDL=ON
- -DENABLE_EVDEV=ON
- -DDISTRIBUTOR=Flathub
- -DQT_DIR=
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
url: https://github.com/XargonWan/primehack
commit: af7710ef7b04a632b4294eae5e0eff8fe9c4d1f8
#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
path: rd-submodules/primehack/detectflatpak.patch
# version strings must match exactly for online multiplayer
- type: patch
path: rd-submodules/dolphin/nodirtyversion.patch
path: rd-submodules/primehack/nodirtyversion.patch
- type: script
commands:
- for i in {0..9}; do
@ -1009,7 +1073,6 @@ modules:
# 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
@ -1067,41 +1130,6 @@ modules:
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:
@ -1118,7 +1146,8 @@ modules:
url-template: https://github.com/fmtlib/fmt/archive/$version.tar.gz
versions: {<: '10.0'}
- name: wxwidgets
- name: wxWidgets
buildsystem: cmake-ninja
cleanup:
- /bin
- /include
@ -1127,13 +1156,14 @@ modules:
- /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
url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.4/wxWidgets-3.2.4.tar.bz2
sha256: 0640e1ab716db5af2ecb7389dbef6138d7679261fbff730d23845ba838ca133e
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
versions: {'!=': 3.2.4-with-msvs2012-fix}
- name: Cemu
buildsystem: cmake-ninja
@ -1150,8 +1180,8 @@ modules:
x-checker-data:
type: git
tag-pattern: ^v([\d.]+-\d+)$
tag: v2.0-47
commit: 85aa4f095b119e98620451a0c19c80f656d944a6
tag: v2.0-61
commit: b6aaf6633063be47d89a8216e269e32aec5a4b49
- type: shell
commands:
- sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe
@ -1199,6 +1229,134 @@ modules:
# Cemu - END
# Vita3K - START
- name: vita3k
buildsystem: simple
build-commands:
# Copying the user icon
- mkdir -p ${FLATPAK_DEST}/retrodeck
- cp retrodeck.png ${FLATPAK_DEST}/retrodeck
- unzip "ubuntu-latest.zip" -d "${FLATPAK_DEST}/share/Vita3K"
- chmod +x "${FLATPAK_DEST}/share/Vita3K/Vita3K"
- rm -f "${FLATPAK_DEST}/share/Vita3K/update-vita3k.sh"
- ln -s ${FLATPAK_DEST}/share/Vita3K/Vita3K ${FLATPAK_DEST}/bin/Vita3K
sources:
- type: file
url: https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip
sha256: VITA3KSHAPLACEHOLDER
- type: file
path: res/retrodeck.png
# Vita3K - END
# SOLARUS - START
# https://github.com/flathub/org.solarus_games.solarus.Launcher
- name: luajit
no-autogen: true
cleanup:
- /bin
- /lib/*.a
- /include
- /lib/pkgconfig
- /share/man
sources:
- type: archive
url: https://luajit.org/download/LuaJIT-2.0.5.tar.gz
sha256: 874b1f8297c697821f561f9b73b57ffd419ed8f4278c82e05b48806d30c1e979
- type: shell
commands:
- sed -i 's|/usr/local|/app|' ./Makefile
- name: libmodplug
cleanup:
- /include
sources:
- type: archive
url: https://download.sourceforge.net/project/modplug-xmms/libmodplug/0.8.9.0/libmodplug-0.8.9.0.tar.gz
sha512: 880e10154fd367ee24ace53ca7e32a5c1fee7dfff1f934e6499944c12779427da63e2f55f8d6ce25db0a42a5b4424053bf64305b31dbfc4ef6a8909924d655fd
- name: physfs
buildsystem: cmake-ninja
config-opts:
- -DPHYSFS_BUILD_TEST=OFF
sources:
- type: archive
url: https://icculus.org/physfs/downloads/physfs-3.0.2.tar.bz2
sha256: 304df76206d633df5360e738b138c94e82ccf086e50ba84f456d3f8432f9f863
size: 194888
x-checker-data:
type: anitya
project-id: 3631
url-template: https://icculus.org/physfs/downloads/physfs-$version.tar.bz2
- name: solarus
buildsystem: cmake-ninja
builddir: true
config-opts:
- -DSOLARUS_GUI=OFF
sources:
- type: git
url: https://gitlab.com/solarus-games/solarus.git
tag: v1.6.5
commit: 3aec70b0556a8d7aed7903d1a3e4d9a18c5d1649
- rd-submodules/shared-modules/gzdoom/gzdoom.json
# SOLARUS - END
# MAME - Start
# https://sdlmame.wallyweek.org/download/
# To enable the debugger try: QT_HOME='/usr'
- name: mame
buildsystem: simple
build-options:
no-debuginfo: true
strip: true
build-commands:
- make
-j ${FLATPAK_BUILDER_N_JOBS}
CFLAGS+=-Wno-error=restrict
USE_QTDEBUG=0
USE_WAYLAND=1
USE_SYSTEM_LIB_FLAC=1
SDL_INI_PATH='$$HOME/.APP_NAME;/app/share/APP_NAME/ini'
LDOPTS=-Wl,-s
- install -Dm 0755 mame ${FLATPAK_DEST}/bin/mame
- cp COPYING ${FLATPAK_DEST}/bin/
- cp uismall.bdf ${FLATPAK_DEST}/bin/
- mkdir -p ${FLATPAK_DEST}/share/mame/
- cp -r artwork/ ${FLATPAK_DEST}/share/mame/
- cp -r bgfx/ ${FLATPAK_DEST}/share/mame/
- cp -r ctrlr/ ${FLATPAK_DEST}/share/mame/
- mkdir -p ${FLATPAK_DEST}/share/mame/docs/
- cp -r docs/legal/ ${FLATPAK_DEST}/share/mame/docs/
- cp -r docs/man/ ${FLATPAK_DEST}/share/mame/docs
- 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
- 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/mame0261.tar.gz
sha256: 51d5ce1563897709ceb7a924c31a70cc5ff2bec466aab8d0cc9ff3cc72b38899
- 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
# External manifests end
- name: retrodeck
@ -1231,18 +1389,17 @@ modules:
# Tools
- mkdir -p /app/tools
- cp tools/configurator.sh /app/tools/configurator.sh
- chmod +x /app/tools/configurator.sh
- cp tools/retrodeck_function_wrapper.sh /app/tools/retrodeck_function_wrapper.sh
- chmod +x /app/tools/retrodeck_function_wrapper.sh
- 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/"
- 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
- chmod +x net.retrodeck.retrodeck*desktop
# Initializing default emulator configs
- cp -r emu-configs ${FLATPAK_DEST}/retrodeck/emu-configs/
@ -1258,6 +1415,14 @@ modules:
- mkdir -p ${FLATPAK_DEST}/share/appdata
- cp net.retrodeck.retrodeck.appdata.xml ${FLATPAK_DEST}/share/appdata
# Creating symlinks for a prettier access
- ln -s /app/bin/retrodeck.sh /app/bin/retrodeck
- ln -s /app/tools/configurator.sh /app/bin/configurator
# GZDOOM wrapper
- cp emu-configs/gzdoom/gzdoom.sh ${FLATPAK_DEST}/bin/gzdoom.sh
- chmod +x ${FLATPAK_DEST}/bin/gzdoom.sh
sources:
- type: git
url: https://github.com/XargonWan/RetroDECK.git

View file

@ -129,26 +129,64 @@
# 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
# Ryujinx - START
# https://github.com/flathub/org.ryujinx.Ryujinx
# - 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
- 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
# Vita3K - END
# Ryujinx - END

View file

@ -1,22 +0,0 @@
{
"name": "SDL2",
"buildsystem": "autotools",
"config-opts": ["--disable-static"],
"sources": [
{
"type": "archive",
"url": "https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.26.3.tar.gz",
"sha256": "af0ff86e4a268bc12c915a0ea19ea1a16419ab1426d92bad5f4e26eb31583967"
}
],
"cleanup": [ "/bin/sdl2-config",
"/include",
"/lib/libSDL2.la",
"/lib/libSDL2main.a",
"/lib/libSDL2main.la",
"/lib/libSDL2_test.a",
"/lib/libSDL2_test.la",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"]
}

View file

@ -0,0 +1,25 @@
#!/bin/bash -e
report_error() {
read -r -d '|' MESSAGE <<EOF
Unfortunately, Citra seems to have crashed.
We kindly ask you to submit a bug report to <a href="https://github.com/flathub/org.citra_emu.citra/issues">https://github.com/flathub/org.citra_emu.citra/issues</a>.
When submitting a bug report, please attach your <b>system information</b> and the <b>Citra log file</b>.
You seem to be using ${XDG_SESSION_DESKTOP} ${DESKTOP_SESSION} (${XDG_SESSION_TYPE}):
To obtain Citra log files, please see <a href="https://community.citra-emu.org/t/how-to-upload-the-log-file/296">this guide</a>.
To obtain your system information, please install <tt>inxi</tt> and run <tt>inxi -v3</tt>. |
EOF
zenity --warning --no-wrap --title "That's awkward ..." --text "$MESSAGE"
}
unset VK_ICD_FILENAMES VK_DRIVER_FILES
# Discord RPC
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
if ! prlimit --nofile=8192 citra-qt "$@"; then
report_error
fi

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -1,56 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 710f3fcfb..e5f4f4687 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -94,7 +94,11 @@ function(check_submodules_present)
endif()
endforeach()
endfunction()
-check_submodules_present()
+
+if (EXISTS "${PROJECT_SOURCE_DIR}/.git/objects")
+ # only check submodules when source is obtained via Git
+ check_submodules_present()
+endif()
configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake
index a011c6cbf..87e9eef35 100644
--- a/CMakeModules/GenerateSCMRev.cmake
+++ b/CMakeModules/GenerateSCMRev.cmake
@@ -6,15 +6,27 @@ endfunction()
list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules")
-# Find the package here with the known path so that the GetGit commands can find it as well
-find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
-
# generate git/build information
-include(GetGitRevisionDescription)
-get_git_head_revision(GIT_REF_SPEC GIT_REV)
-git_describe(GIT_DESC --always --long --dirty)
-git_branch_name(GIT_BRANCH)
get_timestamp(BUILD_DATE)
+if (EXISTS "${SRC_DIR}/.git/objects")
+ # Find the package here with the known path so that the GetGit commands can find it as well
+ find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
+ # only use Git to check revision info when source is obtained via Git
+ include(GetGitRevisionDescription)
+ get_git_head_revision(GIT_REF_SPEC GIT_REV)
+ git_describe(GIT_DESC --always --long --dirty)
+ git_branch_name(GIT_BRANCH)
+elseif(EXISTS "${SRC_DIR}/GIT-COMMIT" AND EXISTS "${SRC_DIR}/GIT-TAG")
+ # unified source archive
+ file(READ "${SRC_DIR}/GIT-COMMIT" GIT_REV_RAW LIMIT 64)
+ string(STRIP "${GIT_REV_RAW}" GIT_REV)
+ string(SUBSTRING "${GIT_REV_RAW}" 0 9 GIT_DESC)
+ set(GIT_BRANCH "HEAD")
+else()
+ # self-packed archive?
+ set(GIT_DESC "UNKNOWN")
+ set(GIT_BRANCH "UNKNOWN")
+endif()
# Generate cpp with Git revision from template
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well

View file

@ -1,8 +1,8 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9af66009a1..2acd3bed9a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -149,7 +149,7 @@ if(GIT_FOUND)
diff --git a/CMake/ScmRevGen.cmake b/CMake/ScmRevGen.cmake
index aacf7491ce..503791cda8 100644
--- a/CMake/ScmRevGen.cmake
+++ b/CMake/ScmRevGen.cmake
@@ -7,7 +7,7 @@ if(GIT_FOUND)
OUTPUT_VARIABLE DOLPHIN_WC_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DOLPHIN_WC_DESCRIBE

View file

@ -0,0 +1,10 @@
diff -au1r emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp
--- emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp 2023-11-03 16:25:01.115126901 +0100
+++ emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp 2023-11-03 16:26:18.882607724 +0100
@@ -602,4 +602,4 @@
getHelpStyle(),
- "IT SEEMS AS IF YOU'RE NOT RUNNING THE LATEST ES-DE RELEASE, PLEASE UPGRADE BEFORE "
- "PROCEEDING AS THESE THEMES MAY NOT BE COMPATIBLE WITH YOUR VERSION",
+ "ES-DE THEME ENGINE WAS UPDATED UPSTREAM. THESE THEMES MAY NOT BE COMPATIBLE WITH THE CURRENT RETRODECK VERSION."
+ "CHECK IF A NEW RETRODECK UPDATE IS AVAILABLE, ELSE PLEASE WAIT FOR IT OR PROCEED AT YOUR OWN RISK.",
"OK", [] { return; }, "", nullptr, "", nullptr, nullptr, true));

View file

@ -1,22 +1,7 @@
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 @@
--- emulationstation-de/es-app/src/views/ViewController.cpp 2023-11-04 15:09:24.332178777 -0400
+++ emulationstation-de/es-app/src/views/ViewController.cpp 2023-11-04 15:13:59.015780009 -0400
@@ -195,91 +195,3 @@
mNoGamesMessageBox = new GuiMsgBox(
- HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "CHANGE ROM DIRECTORY",
- [this] {
@ -29,9 +14,10 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- 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));
- [this, currentROMDirectory](const std::string& newROMDirectory) {
- if (currentROMDirectory != newROMDirectory) {
- Settings::getInstance()->setString(
- "ROMDirectory", Utils::String::trim(newROMDirectory));
- Settings::getInstance()->saveFile();
-#if defined(_WIN64)
- mRomDirectory =
@ -44,7 +30,8 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- "ROM DIRECTORY SETTING SAVED, RESTART\n"
- "THE APPLICATION TO RESCAN THE SYSTEMS",
- "OK", nullptr, "", nullptr, "", nullptr,
- true, true));
- nullptr, true, true));
- }
- },
- false, "SAVE", "SAVE CHANGES?", "Currently configured path:",
- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH",
@ -68,7 +55,7 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- "ROM DIRECTORY SETTING SAVED, RESTART\n"
- "THE APPLICATION TO RESCAN THE SYSTEMS",
- "OK", nullptr, "", nullptr, "", nullptr,
- true));
- nullptr, true));
- },
- false, "SAVE", "SAVE CHANGES?", "Currently configured path:",
- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH",
@ -82,9 +69,8 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- "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",
- "ADVICED TO REMOVE THE ONES YOU DON'T NEED",
- "PROCEED",
- [this] {
- if (!SystemData::createSystemDirectories()) {
- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
@ -92,7 +78,7 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- "GENERATED, EXIT THE APPLICATION AND PLACE\n"
- "YOUR GAMES IN THE NEWLY CREATED FOLDERS",
- "OK", nullptr, "", nullptr, "", nullptr,
- true));
- nullptr, true));
- }
- else {
- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
@ -100,19 +86,16 @@ diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstat
- "PERMISSION PROBLEMS OR DISK FULL?\n\n"
- "SEE THE LOG FILE FOR MORE DETAILS",
- "OK", nullptr, "", nullptr, "", nullptr,
- true));
- nullptr, true));
- }
- },
- "NO", nullptr, "", nullptr, true));
- "CANCEL", nullptr, "", nullptr, nullptr, false));
- },
- "QUIT",
+ HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "QUIT",
[] {
@@ -272,3 +183,3 @@
@@ -289,3 +201,3 @@
},
- true, false,
+ "", nullptr, "", nullptr, true, false,
- nullptr, true, false,
+ "", nullptr, "", nullptr, nullptr, true, true,
(mRenderer->getIsVerticalOrientation() ?
@@ -1446 +1357,2 @@
}
+

View file

@ -0,0 +1,31 @@
#!/bin/bash
mkdir /tmp
branch="00a226062fff37209d98e0ab048ac89af50ecacc"
git clone "https://gitlab.com/es-de/emulationstation-de.git" /tmp/emulationstation-de
pushd .
cd /tmp/emulationstation-de
git checkout $branch
popd
mkdir patches-tmp
cp /tmp/emulationstation-de/es-app/src/guis/GuiMenu.cpp ./patches-tmp
cp /tmp/emulationstation-de/es-app/src/guis/GuiMenu.h ./patches-tmp
cp /tmp/emulationstation-de/es-app/src/views/ViewController.cpp ./patches-tmp
cp /tmp/emulationstation-de/es-core/src/Window.cpp ./patches-tmp
cp /tmp/emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp ./patches-tmp
read -p "Please edit the files in \"patches-tmp\" and press enter to continue."
diff -au1r /tmp/emulationstation-de/es-app/src/guis/GuiMenu.cpp ./patches-tmp/GuiMenu.cpp > GuiMenu.cpp.patch
diff -au1r /tmp/emulationstation-de/es-app/src/guis/GuiMenu.h ./patches-tmp/GuiMenu.h > GuiMenu.h.patch
diff -au1r /tmp/emulationstation-de/es-app/src/views/ViewController.cpp ./patches-tmp/ViewController.cpp > ViewController.cpp.patch
diff -au1r /tmp/emulationstation-de/es-core/src/Window.cpp ./patches-tmp/Window.cpp > Window.cpp.patch
diff -au1r /tmp/emulationstation-de/es-app/src/guis/GuiThemeDownloader.cpp ./patches-tmp/GuiThemeDownloader.cpp > GuiThemeDownloader.cpp.patch
rm -rf patches-tmp
echo "Done, now please remeber to edit the headers of the patch files with the correct paths."

View file

@ -0,0 +1,34 @@
From f2d3b349d8487cf0ee50b36ba024ac513d36f826 Mon Sep 17 00:00:00 2001
From: Carles Pastor <cpbadosa@gmail.com>
Date: Sat, 20 Aug 2022 13:35:32 +0200
Subject: [PATCH] Detect we are running inside a flatpak sandbox
---
Source/Core/UICommon/UICommon.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Source/Core/UICommon/UICommon.cpp b/Source/Core/UICommon/UICommon.cpp
index 8d9dc2abb8..8a9d39a3d5 100644
--- a/Source/Core/UICommon/UICommon.cpp
+++ b/Source/Core/UICommon/UICommon.cpp
@@ -348,7 +348,7 @@ void SetUserDirectory(std::string custom_path)
// -> Use GetExeDirectory()/User
// 2. $DOLPHIN_EMU_USERPATH is set
// -> Use $DOLPHIN_EMU_USERPATH
- // 3. ~/.dolphin-emu directory exists
+ // 3. ~/.dolphin-emu directory exists, and we're not in flatpak
// -> Use ~/.dolphin-emu
// 4. Default
// -> Use XDG basedir, see
@@ -381,7 +381,7 @@ void SetUserDirectory(std::string custom_path)
{
user_path = home_path + "." DOLPHIN_DATA_DIR DIR_SEP;
- if (!File::Exists(user_path))
+ if (File::Exists("/.flatpak-info") || !File::Exists(user_path))
{
const char* data_home = getenv("XDG_DATA_HOME");
std::string data_path =
--
2.37.1

View file

@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9af66009a1..2acd3bed9a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -149,7 +149,7 @@ if(GIT_FOUND)
OUTPUT_VARIABLE DOLPHIN_WC_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DOLPHIN_WC_DESCRIBE
- execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty
+ execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long
OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE
OUTPUT_STRIP_TRAILING_WHITESPACE)

@ -1 +1 @@
Subproject commit 9dc439300e92338d5b2bc3fc680eedd4fe1d3b0c
Subproject commit a96821769848a711db1ed0b71883f91383e2b4ab

File diff suppressed because it is too large Load diff

View file

@ -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 "$@"

@ -1 +1 @@
Subproject commit 76809270588f87c6c14df96fef2dde9a7bac84f4
Subproject commit 55a8e460c6343229597a13e973ba4855c27a1c4c

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 122 KiB

BIN
res/retrodeck.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -20,6 +20,7 @@ Arguments:
--compress-one <file> Compresses target file to a compatible format
--compress-all <format> Compresses all supported games into compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\".
--reset-emulator <emulator> Reset one or more emulator configs to the default values
--reset-emulationstation Reset EmulationStation DE to default settings
--reset-retrodeck Starts the initial RetroDECK installer (backup your data first!)
For flatpak run specific options please run: flatpak run -h
@ -73,6 +74,18 @@ https://retrodeck.net
exit
fi
;;
--reset-emulationstation*)
echo "You are about to reset EmulationStation DE to default settings. Your scraped media, downloaded themes and gamelists will remain untouched."
read -p "Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then
prepare_emulator "reset" "emulationstation" "cli"
read -p "The process has been completed, press Enter key to start RetroDECK."
shift # Continue launch after previous command is finished
else
read -p "The process has been cancelled, press Enter key to exit."
exit
fi
;;
--reset-retrodeck*)
echo "You are about to reset RetroDECK completely!"
read -p "Enter 'y' to continue, 'n' to stop: " response

View file

@ -29,11 +29,14 @@ source /app/libexec/global.sh
# - Citra
# - Dolphin
# - Duckstation
# - MAME
# - MelonDS
# - PCSX2
# - PPSSPP
# - Primehack
# - RPCS3
# - Ryujinx
# - Vita3K
# - XEMU
# - Yuzu
# - Tools
@ -69,20 +72,25 @@ source /app/libexec/global.sh
# - Reset Citra
# - Reset Dolphin
# - Reset Duckstation
# - Reset GZDoom
# - Reset MelonDS
# - Reset PCSX2
# - Reset PPSSPP
# - Reset Primehack
# - Reset RPCS3
# - Reset Ryujinx
# - Reset Vita3k
# - Reset XEMU
# - Reset Yuzu
# - Reset All Emulators
# - Reset EmulationStation DE
# - 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
@ -99,13 +107,15 @@ configurator_welcome_dialog() {
"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" )
"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" \
@ -135,6 +145,10 @@ configurator_welcome_dialog() {
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
@ -426,11 +440,14 @@ configurator_open_emulator_dialog() {
"Citra" "Open the N3DS emulator Citra" \
"Dolphin" "Open the Wii & GC emulator Dolphin" \
"Duckstation" "Open the PSX emulator Duckstation" \
"MAME" "Open the Multiple Arcade Machine Emulator emulator MAME" \
"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" \
"Vita3K" "Open the PSVita emulator Vita3K" \
"XEMU" "Open the Xbox emulator XEMU" \
"Yuzu" "Open the Switch emulator Yuzu")
@ -456,6 +473,10 @@ configurator_open_emulator_dialog() {
duckstation-qt
;;
"MAME" )
mame
;;
"MelonDS" )
melonDS
;;
@ -476,6 +497,14 @@ configurator_open_emulator_dialog() {
rpcs3
;;
"Ryujinx" )
ryujinx-wrapper
;;
"Vita3K" )
Vita3K
;;
"XEMU" )
xemu
;;
@ -515,7 +544,7 @@ configurator_retrodeck_tools_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/RetroDECK_controller_config.vdf"
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!"
@ -957,6 +986,7 @@ configurator_reset_dialog() {
--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 EmulationStation DE" "Reset the ES-DE frontend" \
"Reset RetroDECK" "Reset RetroDECK to default settings" )
case $choice in
@ -972,17 +1002,22 @@ configurator_reset_dialog() {
"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" \
"GZDoom" "Reset the GZDoom Doom engine to default settings" \
"MAME" "Reset the Multiple Arcade Machine Emulator (MAME) 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" \
"Vita3k" "Reset the PS Vita emulator Vita3k 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
"RetroArch" | "Vita3k" | "XEMU" ) # Emulators that require network access
if [[ $(check_network_connectivity) == "true" ]]; then
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"
@ -990,6 +1025,10 @@ configurator_reset_dialog() {
configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
configurator_reset_dialog
fi
else
configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Resetting this emulator requires active network access.\nPlease try again when you are connected to an Internet-capable network.\n\nReset process cancelled."
configurator_reset_dialog
fi
;;
"Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" )
@ -1010,6 +1049,7 @@ configurator_reset_dialog() {
;;
"Reset All Emulators" )
if [[ $(check_network_connectivity) == "true" ]]; then
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
(
prepare_emulator "reset" "all"
@ -1023,6 +1063,24 @@ configurator_reset_dialog() {
configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
configurator_reset_dialog
fi
else
configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Resetting all emulators requires active network access.\nPlease try again when you are connected to an Internet-capable network.\n\nReset process cancelled."
configurator_reset_dialog
fi
;;
"Reset EmulationStation DE" )
if [[ $(configurator_reset_confirmation_dialog "EmulationStation DE" "Are you sure you want to reset EmulationStation DE to default settings?\n\nYour scraped media, downloaded themes and gamelists will not be touched.\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 EmulationStation DE" \
--text="You are resetting EmulationStation DE to its default settings.\n\nAfter the process is complete you will need to exit RetroDECK and run it again."
prepare_emulator "reset" "emulationstation" "configurator"
configurator_process_complete_dialog "resetting EmulationStation DE"
else
configurator_generic_dialog "RetroDeck Configurator - EmulationStation DE: Reset" "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Reset RetroDECK" )
@ -1075,6 +1133,11 @@ configurator_about_retrodeck_dialog() {
esac
}
configurator_add_steam() {
python3 /app/libexec/steam-sync/steam-sync.py
configurator_welcome_dialog
}
configurator_version_history_dialog() {
local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata))
local all_versions_list=()

View file

@ -1,171 +0,0 @@
# 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:** <br>
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)<br>
Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)<br>
Ported from: [Alekfull-NX for Batocera](https://github.com/fagnerpc/Alekfull-NX)<br>
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:** <br>
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)<br>
Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)<br>
Ported from: [ES Theme Retrofix for Batocera](https://github.com/20GotoTen/es-theme-retrofix)<br>
Original creator: [20GotoTen](https://github.com/20GotoTen)<br>
## 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:** <br>
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)<br>
Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)<br>
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:** <br>
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)<br>
Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)<br>
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:** <br>
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)<br>
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` |

View file

@ -1,31 +0,0 @@
# Citra - 3DS
The `~/retrodeck/mods/citra/` represents the `/load/mods/` folder in Citra.
**Note:**<br>
`TITLEID` is different for every game.
## How do I add mods?
**Requirements:** Mod files <br>
**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/<TITLEID>` folder.

View file

@ -1,43 +0,0 @@
# Citra - 3DS
The `~/retrodeck/texture_packs/citra/` represents the `/load/textures` folder in Citra.
**Note:** <br>
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:**<br>
`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 <br>
**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/<TITLEID>` 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`

View file

@ -1,116 +0,0 @@
# 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)<br>
[Theme Development ](https://gitlab.com/es-de/emulationstation-de/-/blob/master/THEMES-DEV.md)

View file

@ -1,36 +0,0 @@
# 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.<br>
**Note:** <br>
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:**<br>
`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`.<br>
## How do I add mods?
**Requirements:** Mod files <br>
**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`.<br>
**Dolphin:**`~/retrodeck/mods/dolphin/` <br>
**Primehack:**`~/retrodeck/mods/primehack/`.
3. Move the mods into the right folder: <br>
**Dolphin:** `~/retrodeck/mods/dolphin/<GAME_ID>` <br>
**Primehack:** `~/retrodeck/mods/primehack/<GAME_ID>` <br>

View file

@ -1,39 +0,0 @@
# 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.<br>
**Note:** <br>
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:**<br>
`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`.<br>
`Prefetch Custom Textures` and set it to `On`.
## How do I add texture packs?
**Requirements:** Texture pack files <br>
**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`.<br>
**Dolphin:**`~/retrodeck/texture_packs/dolphin/` <br>
**Primehack:**`~/retrodeck/texture_packs/primehack/`.
3. Move the textures into the right folder: <br>
**Dolphin:** `~/retrodeck/texture_packs/dolphin/<GAME_ID>` <br>
**Primehack:** `~/retrodeck/texture_packs/primehack/<GAME_ID>` <br>

View file

@ -1,30 +0,0 @@
# Duckstation - PSX
The `~/retrodeck/texture_packs/duckstaiton/` represents the `/duckstation/textures/` folder in Duckstation.
**Note:** <br>
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:**<br>
`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` <br>
`Enable VRAM Write Texture Replacement` and set it to `On`.<br>
`Preload Texture Replacements` and set it to `On`.<br>
## How do I add texture packs?
**Requirements:** Texture pack files <br>
**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/<TITLEID>` folder.

View file

@ -1,38 +0,0 @@
# 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:** <br>
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)<br>
Created by: [anthonycaccese](https://github.com/anthonycaccese)

View file

@ -1,97 +0,0 @@
# 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.<br>
[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)<br>
Published under the MIT-Licence._
# Recommended sections in the user guide:
## General Interface
### General UI Settings
Various settings that affect the user interface.<br>
[UI Settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#ui-settings)
### Other UI settings
These are mostly technical settings.<br>
[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.<br>
[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.<br>
[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.<br>
[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.<br>
[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.<br>
[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.<br>
[Scraper guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#scraping)
### Scraper account settings
Setup of ScreenScraper account.<br>
[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.<br>
[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.<br>
[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.<br>
[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. <br>
[Metadata editor](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#metadata-editor)
### Various other scraping settings.<br>
[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.<br>
[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.<br>
[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.<br>
[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.<br>
[Theme settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes)

View file

@ -1,132 +0,0 @@
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/)<br/>
Starting everything should be included. <br/>
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)<br/>
Content of [blueMSXv282full.zip](http://bluemsx.msxblue.com/download.html).<br/>
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:<br/>
- `~/retrodeck/bios/bios9.bin`<br/>
- `~/retrodeck/bios/bios7.bin`<br/>
- `~/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 <br>
[Gametechwiki](https://emulation.gametechwiki.com/index.php/File_hashes#Known_BIOS_Hashes)
The PS2 bios could be named in the following ways
<br>
By bios version: `ps2-0200a-20040614.bin`
<br>
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).

View file

@ -1,60 +0,0 @@
# 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:**<br>
| Button Placement | Button |
| :--- | :---: |
| Top | `Y` |
| Left | `X` |
| Right | `B` |
| Bottom | `A` |
**Example:**<br>
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:**<br>
| Button Placement | Button |
| :--- | :---: |
| Top | `X` |
| Left | `Y` |
| Right | `A` |
| Bottom | `B` |
**Example:**<br>
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:**<br>
| 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.

View file

@ -1,734 +0,0 @@
# 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**<br>
For the Steam Deck the `roms` folder location depends on where you choose to install the roms folder during the RetroDECK installation process.<br>
It's either on the internal storage: `~/retrodeck/roms` or the SDCard: `<sdcard>/retrodeck/roms`<br>
[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:**<br> ~/retrodeck/roms/3do
- **Supported file extensions:**<br> .iso .ISO .bin .BIN .chd .CHD .cue .CUE .7z .7Z .zip .ZIP
# AdvanceMAME
- **Roms path:**<br> ~/retrodeck/roms/mame-advmame
- **Supported file extensions:**<br> .chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP
# Adventure Game Studio Game Engine
- **Roms path:**<br> ~/retrodeck/roms/ags
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Amstrad
## Amstrad CPC
- **Roms path:**<br> ~/retrodeck/roms/amstradcpc
- **Supported file extensions:**<br> .cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP
## Amstrad GX4000
- **Roms path:**<br> ~/retrodeck/roms/gx4000
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Android (Google)
- **Roms path:**<br> ~/retrodeck/roms/android
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Apple
## Apple II
- **Roms path:**<br> ~/retrodeck/roms/apple2
- **Supported file extensions:**<br> .nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP
## Apple IIGS
- **Roms path:**<br> ~/retrodeck/roms/apple2gs
- **Supported file extensions:**<br> .nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP
# Arcade
- **Roms path:**<br> ~/retrodeck/roms/arcade
- **Supported file extensions:**<br> .cmd .CMD .7z .7Z .zip .ZIP
# Atari
## Atari 2600
- **Roms path:**<br> ~/retrodeck/roms/atari2600
- **Supported file extensions:**<br> .a26 .A26 .bin .BIN .7z .7Z .zip .ZIP
## Atari 5200
- **Roms path:**<br> ~/retrodeck/roms/atari5200
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/atari7800
- **Supported file extensions:**<br> .a78 .A78 .bin .BIN .7z .7Z .zip .ZIP
## Atari 800
- **Roms path:**<br> ~/retrodeck/roms/atari800
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/atarijaguar
- **Supported file extensions:**<br> .j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP
## Atari Jaguar CD
- **Roms path:**<br> ~/retrodeck/roms/atarijaguarcd
- **Supported file extensions:**<br> .j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP
## Atari Lynx
- **Roms path:**<br> ~/retrodeck/roms/atarilynx
- **Supported file extensions:**<br> .lnx .LNX .o .O .7z .7Z .zip .ZIP
## Atari ST
- **Roms path:**<br> ~/retrodeck/roms/atarist
- **Supported file extensions:**<br> .st .ST .msa .MSA .stx .STX .dim .DIM .ipf .IPF .m3u .M3U .7z .7Z .zip .ZIP
## Atari XE
- **Roms path:**<br> ~/retrodeck/roms/atarixe
- **Supported file extensions:**<br> .xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .7z .7Z .zip .ZIP
# Atomiswave
- **Roms path:**<br> ~/retrodeck/roms/atomiswave
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sufami
- **Supported file extensions:**<br> .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP
## Bandai WonderSwan
- **Roms path:**<br> ~/retrodeck/roms/wonderswan
- **Supported file extensions:**<br> .ws .WS .pc2 .PC2 .7z .7Z .zip .ZIP
## Bandai WonderSwan Color
- **Roms path:**<br> ~/retrodeck/roms/wonderswancolor
- **Supported file extensions:**<br> .ws .WS .wsc .WSC .pc2 .PC2 .7z .7Z .zip .ZIP
# Bally Astrocade
- **Roms path:**<br> ~/retrodeck/roms/astrocde
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# BBC Micro
- **Roms path:**<br> ~/retrodeck/roms/bbcmicro
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Commodore
## Commodore Amiga
- **Roms path:**<br> ~/retrodeck/roms/amiga
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/amiga600
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/amiga1200
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/amigacd32
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/c64
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/cdtv
- **Supported file extensions:**<br> .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .m3u .M3U .7z .7Z .zip .ZIP
## Commodore VIC-20
- **Roms path:**<br> ~/retrodeck/roms/vic20
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/cavestory
- **Supported file extensions:**<br> .exe .EXE .7z .7Z .zip .ZIP
# ChaiLove Game Engine
- **Roms path:**<br> ~/retrodeck/roms/chailove
- **Supported file extensions:**<br> .chai .CHAI .chailove .CHAILOVE .7z .7Z .zip .ZIP
# ColecoVision
- **Roms path:**<br> ~/retrodeck/roms/coleco
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/cps
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Daphne Arcade LaserDisc Emulator
- **Roms path:**<br> ~/retrodeck/roms/daphne
- **Supported file extensions:**<br> .daphne .singe
# Doom
- **Roms path:**<br> ~/retrodeck/roms/doom
- **Supported file extensions:**<br> .wad .WAD .iwad .IWAD .pwad .PWAD
# DOS (PC)
- **Roms path:**<br> ~/retrodeck/roms/dos
- **Supported file extensions:**<br> .bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z
# Dragon 32
- **Roms path:**<br> ~/retrodeck/roms/dragon32
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Fairchild Channel F
- **Roms path:**<br> ~/retrodeck/roms/channelf
- **Supported file extensions:**<br> .bin .BIN .chf .CHF .7z .7Z .zip .ZIP
# FinalBurn
## FinalBurn Alpha
- **Roms path:**<br> ~/retrodeck/roms/fba
- **Supported file extensions:**<br> .iso .ISO .7z .7Z .zip .ZIP
## FinalBurn Neo
- **Roms path:**<br> ~/retrodeck/roms/fbneo
- **Supported file extensions:**<br> .ccd .CCD .cue .CUE .7z .7Z .zip .ZIP
# Intellivision - Mattel Electronics
- **Roms path:**<br> ~/retrodeck/roms/intellivision
- **Supported file extensions:**<br> .int .INT .bin .BIN .rom .ROM .7z .7Z .zip .ZIP
# Infocom Z-machine
- **Roms path:**<br> ~/retrodeck/roms/zmachine
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Java 2 Micro Edition (J2ME)
- **Roms path:**<br> ~/retrodeck/roms/j2me
- **Supported file extensions:**<br> .jar .JAR .7z .7Z .zip .ZIP
# Lutro Game Engine
- **Roms path:**<br> ~/retrodeck/roms/lutro
- **Supported file extensions:**<br> .lua .LUA .lutro .LUTRO .7z .7Z .zip .ZIP
# Multiple Arcade Machine Emulator (MAME)
- **Roms path:**<br> ~/retrodeck/roms/mame
- **Supported file extensions:**<br> .cmd .CMD .7z .7Z .zip .ZIP
# MAME4ALL
- **Roms path:**<br> ~/retrodeck/roms/mame-mame4all
- **Supported file extensions:**<br> .chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP
# Multi Emulator Super System (MESS)
- **Roms path:**<br> ~/retrodeck/roms/mess
- **Supported file extensions:**<br> .chd .CHD .7z .7Z .zip .ZIP
# Moonlight Game Streaming
- **Roms path:**<br> ~/retrodeck/roms/moonlight
- **Supported file extensions:**<br> .moonlight .MOONLIGHT .7z .7Z .zip .ZIP
# MSX
## MSX
- **Roms path:**<br> ~/retrodeck/roms/msx
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/msx1
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/msx2
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/msxturbor
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/xbox
- **Supported file extensions:**<br> .iso .ISO
## Microsoft Xbox 360
- **Roms path:**<br> ~/retrodeck/roms/xbox360
- **Supported file extensions:**<br> .iso .ISO .xex .XEX
# Othello Multivision
- **Roms path:**<br> ~/retrodeck/roms/multivision
- **Supported file extensions:**<br> .bin .BIN .gg .GG .rom .ROM .sg .SG .sms .SMS .7z .7Z .zip .ZIP
# Nintendo
## Nintendo 64
- **Roms path:**<br> ~/retrodeck/roms/n64
- **Supported file extensions:**<br> .n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP
## Nintendo 64DD
- **Roms path:**<br> ~/retrodeck/roms/64dd
- **Supported file extensions:**<br> .n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP
## Nintendo 3DS
- **Roms path:**<br> ~/retrodeck/roms/n3ds
- **Supported file extensions:**<br> .3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP
## Nintendo DS
- **Roms path:**<br> ~/retrodeck/roms/nds
- **Supported file extensions:**<br> .bin .BIN .nds .NDS .7z .7Z .zip .ZIP
## Nintendo Entertainment System (NES)
- **Roms path:**<br> ~/retrodeck/roms/nes
- **Supported file extensions:**<br> .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP
## Nintendo Family Computer (Famicom)
- **Roms path:**<br> ~/retrodeck/roms/famicom
- **Supported file extensions:**<br> .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP
## Nintendo Famicom Disk System
- **Roms path:**<br> ~/retrodeck/roms/fds
- **Supported file extensions:**<br> .nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP
## Nintendo Game and Watch
- **Roms path:**<br> ~/retrodeck/roms/gameandwatch
- **Supported file extensions:**<br> .mgw .MGW .7z .7Z .zip .ZIP
## Nintendo Game Boy
- **Roms path:**<br> ~/retrodeck/roms/gb
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/gba
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/gbc
- **Supported file extensions:**<br> .bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP
## Nintendo GameCube
- **Roms path:**<br> ~/retrodeck/roms/gc
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sfc
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/virtualboy
- **Supported file extensions:**<br> .vb .VB .vboy .VBOY .bin .BIN .7z .7Z .zip .ZIP
## Nintendo SNES (Super Nintendo)
- **Roms path:**<br> ~/retrodeck/roms/snes
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/switch
- **Supported file extensions:**<br> .nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI .7z .7Z .zip .ZIP
## Nintendo Satellaview
- **Roms path:**<br> ~/retrodeck/roms/satellaview
- **Supported file extensions:**<br> .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP
## Nintendo Pokémon Mini
- **Roms path:**<br> ~/retrodeck/roms/pokemini
- **Supported file extensions:**<br> .min .MIN .7z .7Z .zip .ZIP
## Nintendo Wii
- **Roms path:**<br> ~/retrodeck/roms/wii
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/wiiu
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# SNK
## SNK Neo Geo
- **Roms path:**<br> ~/retrodeck/roms/neogeo
- **Supported file extensions:**<br> .chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP
## SNK Neo Geo CD
- **Roms path:**<br> ~/retrodeck/roms/neogeocd
- **Supported file extensions:**<br> .chd .CHD .cue .CUE .7z .7Z .zip .ZIP
## SNK Neo Geo CD
- **Roms path:**<br> ~/retrodeck/roms/neogeocdjp
- **Supported file extensions:**<br> .chd .CHD .cue .CUE .7z .7Z .zip .ZIP
## SNK Neo Geo Pocket
- **Roms path:**<br> ~/retrodeck/roms/ngp
- **Supported file extensions:**<br> .ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP
## SNK Neo Geo Pocket Color
- **Roms path:**<br> ~/retrodeck/roms/ngpc
- **Supported file extensions:**<br> .ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP
# Magnavox Odyssey2
- **Roms path:**<br> ~/retrodeck/roms/odyssey2
- **Supported file extensions:**<br> .bin .BIN .7z .7Z .zip .ZIP
# OpenBOR Game Engine
- **Roms path:**<br> ~/retrodeck/roms/openbor
- **Supported file extensions:**<br> .AppImage
# Tandy
## Tandy Color Computer
- **Roms path:**<br> ~/retrodeck/roms/coco
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
## Tandy TRS-80
- **Roms path:**<br> ~/retrodeck/roms/trs-80
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Tangerine Computer Systems Oric
- **Roms path:**<br> ~/retrodeck/roms/oric
- **Supported file extensions:**<br> .dsk .DSK .ort .ORT .tap .TAP .wav .WAV
# Palm OS
- **Roms path:**<br> ~/retrodeck/roms/palm
- **Supported file extensions:**<br> .prc .PRC .pqa .PQA .img .IMG .7z .7Z .zip .ZIP
# NEC
## NEC PC-8800 Series
- **Roms path:**<br> ~/retrodeck/roms/pc88
- **Supported file extensions:**<br> .d88 .D88 .u88 .U88 .m3u .M3U .7z .7Z .zip .ZIP
## NEC PC-9800 Series
- **Roms path:**<br> ~/retrodeck/roms/pc98
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/pcengine
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/pcenginecd
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/supergrafx
- **Supported file extensions:**<br> .pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP
## NEC TurboGrafx-16
- **Roms path:**<br> ~/retrodeck/roms/tg16
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/tg-cd
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/pcfx
- **Supported file extensions:**<br> .cue CUE .ccd .CCD .toc .TOC .chd .CHD .7z .7Z .zip .ZIP
# Philips
## Philips CD-i
- **Roms path:**<br> ~/retrodeck/roms/cdimono1
- **Supported file extensions:**<br> .chd .CHD .cue .CUE .iso .ISO
## Philips Videopac G7000
- **Roms path:**<br> ~/retrodeck/roms/videopac
- **Supported file extensions:**<br> .bin .BIN .7z .7Z .zip .ZIP
# PICO-8
- **Roms path:**<br> ~/retrodeck/roms/pico8
- **Supported file extensions:**<br> .p8 .P8 .png .PNG
# Ports
- **Roms path:**<br> ~/retrodeck/roms/ports
- **Supported file extensions:**<br> .sh
# Sony Playstation
## Sony PlayStation (PSX)
- **Roms path:**<br> ~/retrodeck/roms/psx
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/ps2
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/ps3
- **Supported file extensions:**<br> .ps3 .PS3 .ps3dir .PS3DIR
## Sony PlayStation Portable (PSP)
- **Roms path:**<br> ~/retrodeck/roms/psp
- **Supported file extensions:**<br> .elf .ELF .iso .ISO .cso .CSO .prx .PRX .pbp .PBP .7z .7Z .zip .ZIP
## Sony PlayStation Vita
- **Roms path:**<br> ~/retrodeck/roms/psvita
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# SAM Coupé
- **Roms path:**<br> ~/retrodeck/roms/samcoupe
- **Supported file extensions:**<br> .dsk .DSK .mgt .MGT .sbt .SBT .sad .SAD .7z .7Z .zip .ZIP
# ScummVM Game Engine
- **Roms path:**<br> ~/retrodeck/roms/scummvm
- **Supported file extensions:**<br> .scummvm .SCUMMVM .svm .SVM
# Sega
## Sega Game Gear
- **Roms path:**<br> ~/retrodeck/roms/gamegear
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/dreamcast
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/genesis
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/mastersystem
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/megacd
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/megadrive
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/model2
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
## Sega Model 3
- **Roms path:**<br> ~/retrodeck/roms/model3
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
## Sega NAOMI
- **Roms path:**<br> ~/retrodeck/roms/naomi
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/naomigd
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/saturn
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sega32x
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sega32xjp
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sega32xna
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/sg-1000
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/segacd
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/x1
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/x68000
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/zx81
- **Supported file extensions:**<br> .tzx .TZX .p .P .7z .7Z .zip .ZIP
## Sinclair ZX Spectrum
- **Roms path:**<br> ~/retrodeck/roms/zxspectrum
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/solarus
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Spectravideo
- **Roms path:**<br> ~/retrodeck/roms/spectravideo
- **Supported file extensions:**<br> .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:**<br> ~/retrodeck/roms/stratagus
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Symbian
- **Roms path:**<br> ~/retrodeck/roms/symbian
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Tano Dragon
- **Roms path:**<br> ~/retrodeck/roms/tanodragon
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Texas Instruments TI-99
- **Roms path:**<br> ~/retrodeck/roms/ti99
- **Supported file extensions:**<br> .rpk .RPK .7z .7Z .zip .ZIP
# TIC-80 Game Engine
- **Roms path:**<br> ~/retrodeck/roms/tic80
- **Supported file extensions:**<br> .7z .7Z .zip .ZIP
# Thomson
## Thomson TO8
- **Roms path:**<br> ~/retrodeck/roms/to8
- **Supported file extensions:**<br> .fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP
## Thomson MO/TO Series
- **Roms path:**<br> ~/retrodeck/roms/moto
- **Supported file extensions:**<br> .fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP
# Uzebox
- **Roms path:**<br> ~/retrodeck/roms/uzebox
- **Supported file extensions:**<br> .uze .UZE .7z .7Z .zip .ZIP
# Vectrex
- **Roms path:**<br> ~/retrodeck/roms/vectrex
- **Supported file extensions:**<br> .bin .BIN .vec .VEC .gam .GAM .vc .VC .7z .7Z .zip .ZIP

View file

@ -1,23 +0,0 @@
# 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)

View file

@ -1,503 +0,0 @@
# General questions:
## What is the scope of this project?
<details><summary>Click here to see the answer</summary>
Read the "Whats the long term vision and goals" on the Home page of this wiki.
</details>
## Do you include any games, firmware or BIOS?
<details><summary>Click here to see the answer</summary>
No, this can never be done for legal reasons.
</details>
### Can you at least point me towards where I can get them?
<details><summary>Click here to see the answer</summary>
Again...no, this can never be done for legal reasons.
</details>
## Why are games call ROMs?
<details><summary>Click here to see the answer</summary>
ROM stands for "Read Only Memory" and was a common method to store games.<br>
The games where later dumped from their ROM chips into digitalized files that can be played with an emulator.<br>
Read more on [wikipedia](https://en.wikipedia.org/wiki/Read-only_memory)
</details>
## What is sudo?
<details><summary>Click here to see the answer</summary>
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".
</details>
## Retrodeck is a flatpak, what is it?
<details><summary>Click here to see the answer</summary>
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.<br/>
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.<br/>
[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.
</details>
## What is RetroDECK cooker?
<details><summary>Click here to see the answer</summary>
Cooker is a bleeding edge snapshot of the current commits, the action of uploading code to GitHub is called commit.<br/>
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.<br/>
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.
</details>
### Why the name cooker? 🍲
<details><summary>Click here to see the answer</summary>
That's what cooking in the pot at this moment and not yet ready to be served (released).<br> This name was also used by Linux Mandrake and Mandriva for the bleeding edge channel.
</details>
# Updates, feature requests and more devices/OS questions:
## Will you support the general Linux desktop and not only the Steam Deck?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Will you support other SteamOS or Linux handheld gaming devices with flatpak support?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Will you support Windows or Windows based devices like the ROG Ally?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Will you support MacOS?
<details><summary>Click here to see the answer</summary>
Not supported and not planned.
</details>
## Will you support Android/IOS?
<details><summary>Click here to see the answer</summary>
Not supported and not planned.
</details>
## Will you implement X/Y/Z emulator?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Will you implement none emulator software inside of RetroDECK like Batocera?
<details><summary>Click here to see the answer</summary>
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.
</details>
## When does the next version of RetroDECK come out?
<details><summary>Click here to see the answer</summary>
> When it's ready.
</details>
### When does the version after the upcoming version come out?
<details><summary>Click here to see the answer</summary>
After the upcoming version.</details>
### When does the version 1.0 of RetroDECK come out?
<details><summary>Click here to see the answer</summary>
Some time in the future.
</details>
# Documentation questions
## I see ~ refereed in documentation and examples, what does it mean?
<details><summary>Click here to see the answer</summary>
The tilde character ~ is the a short way of saying the logged in users home directory in the UNIX world.<br>
So for example the Steam Deck<br>
`~ = /home/deck`<br>
Read more on [Wikipedia](https://en.wikipedia.org/wiki/Home_directory)</details>
## I see SA refereed in documentation about emulators what does it mean?
<details><summary>Click here to see the answer</summary>
SA means Standalone and the emulator is not inside RetroArch/LibRetro but a separate program launched within RetroDECK. </details>
## I see CLI refereed in documentation what does it mean?
<details><summary>Click here to see the answer</summary>
CLI stands for command-line interface and is often refereed commands you can run in the the Linux Terminal </details>
# Other Emulation Solutions questions:
## Are you related to EmuDeck?
<details><summary>Click here to see the answer</summary>
No, the two projects are not related.
</details>
### So what's the difference between RetroDECK and EmuDeck?
<details><summary>Click here to see the answer</summary>
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 its 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.
</details>
### Can I install RetroDECK if I have EmuDeck already?
<details><summary>Click here to see the answer</summary>
Yes, as RetroDECK is completely standalone.
</details>
## Are you related anyway to Batocera?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Batocera or EmuDeck or RetroDECK I still don't get it?
<details><summary>Click here to see the answer</summary>
- Batocera is a retro emulation operative system that you need to boot into separately (like from an SDCard) or replace your current OS. <br> 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.
</details>
## What is your relationship with EmulationStation Desktop Edition (ES-DE)?<br>
<details><summary>Click here to see the answer</summary>
ES-DE and RetroDECK are separate projects, but we collaborate to give the best possible user experience.<br>
We have a unique partnership where inside the ES-DE code is a section just for RetroDECK specific features. <br>
[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)
</details>
# RetroDECK usage questions:
## Can I launch RetroDECK from inside of the Steam Decks gamemode?
<details><summary>Click here to see the answer</summary>
Yes, RetroDECK currently only supports Steam Deck's gamemode as it relies on Steam Controller configs. <br>
To add it into Steam please check the second step of [[Steam Deck: Installation and updates]].
</details>
## Do I have to partition or format my disk/sdcard to install RetroDECK?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Can I move the ROMs folder to another place?
<details><summary>Click here to see the answer</summary>
Yes, you can do so inside the configurator and the `Move RetroDECK` option.
</details>
## Is there a way to reset RetroDECK?
<details><summary>Click here to see the answer</summary>
Yes, you can reset various parts of the software using the RetroDECK configurator under the option reset<br/>
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
```
</details>
## How do I uninstall RetroDECK?
<details><summary>Click here to see the answer</summary>
**On the Steam Deck:**<br>
Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`<br>
* 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.
</details>
## Does uninstalling RetroDECK remove my roms, bios and saves?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Where can I find the logfiles?
<details><summary>Click here to see the answer</summary>
> In `~/retrodeck/logs/retrodeck.log`
</details>
## Can I add a single game to my Steam Library or with Steam Rom Manager?
<details><summary>Click here to see the answer</summary>
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 `
</details>
## If I installed RetroDECK from outside of discover, do I need to uninstall the application to update?
<details><summary>Click here to see the answer</summary>
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).</details>
## After installing RetroDECK manually, Discover is not opening or giving me some errors?
<details><summary>Click here to see the answer</summary>
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`
</details>
# General emulation & games questions:
## What emulators and software is included in RetroDECK?
<details><summary>Click here to see the answer</summary>
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.
</details>
## How can I set another default emulator?
<details><summary>Click here to see the answer</summary>
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.
</details>
## Game X/Y/Z is not working or showing black screen
<details><summary>Click here to see the answer</summary>
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).<br/>
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.<br/>
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).
</details>
## PS2 games are not working or buggy in the RetroArch Core.
<details><summary>Click here to see the answer</summary>
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.<br>
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.
</details>
## I configured RetroArch but the configuration was not saved.
<details><summary>Click here to see the answer</summary>
Configuring RetroArch can be dangerous for an inexperienced user, so RetroDECK is set to don't save the RetroArch configuration upon exiting.<br/>
The configuration must be saved willingly by going to: `Main Menu` -> `Configuration File` -> `Save Current Configuration`.<br/>
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.
</details>
## Will you support Lightguns (Sinden, Gun4IR, Samco etc...)?
<details><summary>Click here to see the answer</summary>
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.
</details>
# Steam Deck emulation questions:
## XBOX games are slow on the Steam Deck
<details><summary>Click here to see the answer</summary>
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.
</details>
## The games are stuck at 30FPS on the Steam Deck!
<details><summary>Click here to see the answer</summary>
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.
</details>
## Fast forwarding is slow on the Steam Deck!
<details><summary>Click here to see the answer</summary>
Same as above: Check the Power menu Framerate Limit.
</details>
# Theme questions:
## How can I add more themes?
<details><summary>Click here to see the answer</summary>
In the future we wish to include a themes browser and downloader, but for the moment you can put your own themes here: <br>
~/retrodeck/themes
</details>
## How do you switch between themes inside of RetroDECK?
<details><summary>Click here to see the answer</summary>
**On the Steam Deck:**<br>
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.
</details>
## "Why does the theme I am using not work?" or "Why does the layout look broken?" (black screen with blue text)?
<details><summary>Click here to see the answer</summary>
* Please make sure you are specifically using a theme that is compatible with [ES-DE](https://www.es-de.org). <br>
* If you are trying to use a theme that was built for Batocera it will likely not be compatible.<br>
* ES-DE uses a unique theme engine so themes are not directly portable from Batocera. <br>
* Please see ES-DE's [User Guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes) for more details.
</details>
## Why does the theme layout look squished?
<details><summary>Click here to see the answer</summary>
* 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. <br>
* 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. <br>
* 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.
</details>
# Scraping questions
## Can I manually add custom game images/videos/media for games that I can not scrape?
<details><summary>Click here to see the answer</summary>
Yes, check the file structure over at Emulationstation DE's user guide on gitlab.<br>
## [Manually copying game media files](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#manually-copying-game-media-files)
</details>
## Where is my scraped data?
<details><summary>Click here to see the answer</summary>
In `~/retrodeck/downloaded_media`
</details>
## I got some weird error message about quota after scraping!
<details><summary>Click here to see the answer</summary>
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.<br>
You can pay them to get a bit more daily quota and show your support or just wait 24 hours.<br>
</details>
## I got some weird error message about about server or service!
<details><summary>Click here to see the answer</summary>
The website is down, check [Screenscraper.fr](https://www.screenscraper.fr/) when they get back up.
</details>
## The scraping is too slow!
<details><summary>Click here to see the answer</summary>
[Screenscraper.fr](https://www.screenscraper.fr/) offers different types of donations that can increase your speed with extra threads.
</details>
## My systems storage ran out after scraping!
<details><summary>Click here to see the answer</summary>
Images and videos takes a lot of space, you can clean some out under `~/retrodeck/downloaded_media`
</details>
### But I still want them!
<details><summary>Click here to see the answer</summary>
Delete something else or buy more storage.
</details>
## Can I move the downloaded_media folder?
<details><summary>Click here to see the answer</summary>
You can move it with the the move RetroDECK option inside the configurator.
</details>

View file

@ -1,73 +0,0 @@
# About testing
There are two ways help us to test features in RetroDECK.<br>
The first one is our bleeding edge `RetroDECK Cooker` channel.<br>
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..<br>
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:<br>
`OLDnet.retrodeck.retrodeck/`<br>
`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. <br>
`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: <br>
`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.

View file

@ -1,104 +0,0 @@
# 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: <br>
[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)<br>
[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)<br>
[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<br>
Read and follow the:
* [Installation guide for the Steam Deck](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck:-Installation-and-updates)<br>
## Linux Desktop - Installation<br>
(more information later)
## Other SteamOS devices - Installation<br>
(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 <br>
**Example:**<br>
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.<br>
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**<br>
If during the installation of RetroDECK you choose the Internal option for the roms folder:<br>
The roms folder is:`~/retrodeck/roms/`
### **Choice: SDCard**<br>
If during the installation of RetroDECK you choose the SDCard option for the roms folder:<br>
The roms folder is: `<sdcard>/retrodeck/roms/`<br>
(Please note that the `<sdcard>` is an example and not called so inside your Linux/SteamOS system but rather your unique per SDCard ID number).<br>
## 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:**<br>
You have an example NES game called `ExampleNESGame.nes` <br>
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:**<br>
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)

View file

@ -1,84 +0,0 @@
# 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)<br/>
**NDS**: needs a decrypted dump<br/>
**3DS**: needs a decrypted dump<br/>
**PS3**: are folders that need to be with the `.ps3` file extension in the end. <br/>
Example: `Gran Turismo 5.ps3`
# RetroAchievements
Until we don't implement a proper menu, the RetroAchievements must be enabled from RetroArch:<br/>
`Tools` -> `Start RetroArch` -> `Settings` -> `Achievements`<br/>
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).<br/><br/>
**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`<br>
`Dragon Fantasy VII - Disk2.chd`<br>
`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.

View file

@ -1,17 +0,0 @@
# 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)

View file

@ -1,93 +0,0 @@
# 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) <br>
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

View file

@ -1,38 +0,0 @@
# 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. <br>
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)<br>
## 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)

View file

@ -1,30 +0,0 @@
# PCXS2 - Playstation 2
The `~/retrodeck/texture_packs/PCSX2/` represents the `/PCSX2/textures/` folder in PCSX2.
**Note:** <br>
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:**<br>
`TITLEID` is different for every game.
## Enable Custom Textures
* Open up PCSX2 inside `RetroDECK Configurator` by pressing `Open Emulator` - `PCSX2`.
* Press `Settings` -> `Graphics` <br>
`Load Textures` and set it to `On`.<br>
`Async Texture Loading` and set it to `On`.<br>
## How do I add texture packs?
**Requirements:** Texture pack files <br>
**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/<TITLEID>` folder.

View file

@ -1,26 +0,0 @@
# PPSSPP - PSP
The `~/retrodeck/texture_packs/ppsspp/` represents the `/PSP/TEXTURES/` folder in PPSSPP.
**Note:** <br>
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:**<br>
`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 <br>
**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/<TITLEID>`

View file

@ -1,87 +0,0 @@
# 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`.

View file

@ -1,30 +0,0 @@
# RetroArch - NES - Mesen
The `texture_packs/RetroArch-Mesen/` represents `/retroarch/system/HdPacks/` folder.
**Note:** <br>
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. <br>
**NOTE:** On the Steam Deck go into GameMode first, then launch RetroDECK.

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