Merge branch 'cooker-0.8.0b' into feat/logging

This commit is contained in:
XargonWan 2024-02-17 09:23:42 +01:00
commit dafba7a5b5
212 changed files with 10293 additions and 1325 deletions

13
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,13 @@
# These are supported funding model platforms
#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: RetroDECK # Replace with a single Patreon username
#open_collective: # Replace with a single Open Collective username
#ko_fi: # Replace with a single Ko-fi username
#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
#liberapay: # Replace with a single Liberapay username
#issuehunt: # Replace with a single IssueHunt username
#otechie: # Replace with a single Otechie username
#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: ['https://retrodeck.readthedocs.io/en/latest/wiki_about/donations-licenses/'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

3
.gitignore vendored
View file

@ -17,6 +17,7 @@ backup
.old .old
tmp tmp
.godot .godot
rd-submodules/es-de/patches-tmp*
.local/ .local/
buildid buildid
*.bak *.bak
@ -30,4 +31,4 @@ __pycache__
rd-submodules/retroarch* rd-submodules/retroarch*
rd-submodules/ryujinx* rd-submodules/ryujinx*
rd-submodules/shared-modules* rd-submodules/shared-modules*
rd-submodules/es-de/patches-tmp* rd-submodules/es-de/patches-tmp*

View file

@ -4,13 +4,13 @@
# RetroDECK on your device! # RetroDECK on your device!
<p float="center"> <p float="center">
<img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen03.jpeg?raw=true" alt="screenshot" width="300"/>
<img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen04.jpeg?raw=true" alt="screenshot" width="300"/><br/>
<img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen05.jpeg?raw=true" alt="screenshot" width="300"/> <img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen05.jpeg?raw=true" alt="screenshot" width="300"/>
<img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen06.jpeg?raw=true" alt="screenshot" width="300"/> <img src="https://github.com/XargonWan/RetroDECK/blob/main/res/screenshots/screen06.jpeg?raw=true" alt="screenshot" width="300"/>
</p> </p>
<br/>
Instead of having several different emulators, engines and frontends on your Linux/SteamOS system you only need one: RetroDECK.
![Flathub](https://img.shields.io/flathub/downloads/net.retrodeck.retrodeck) ![Flathub](https://img.shields.io/flathub/downloads/net.retrodeck.retrodeck)
![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck) ![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck)
@ -18,43 +18,21 @@
![GitHub](https://img.shields.io/github/license/XargonWan/RetroDECK) ![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) [![Documentation Status](https://readthedocs.org/projects/retrodeck/badge/?version=latest)](https://retrodeck.readthedocs.io/en/latest/?badge=latest)
# What is RetroDECK? **The RetroDECK Wiki & FAQ**
Instead of having several different software on your system for a variety of emulators and frontends you only need to have one: RetroDECK.
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. Please check out the these links for even more information:
It's inspired by embedded emulation systems like: - [RetroDECK Wiki](https://retrodeck.readthedocs.io/en/latest/)
- [RetroDECK FAQ](https://retrodeck.readthedocs.io/en/latest/wiki_general/faq/)
- AmberELEC
- EmuELEC
- CoreELEC
- Lakka
- Batocera
The RetroDECK team consists of several veterans from some of the projects mentioned above as well as a bunch of other talented individuals.
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:
[RetroDECK: Visions and Goals](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Visions-and-Goals)
### The RetroDECK community:
[Website](https://retrodeck.net) <br/>
[Wiki](https://github.com/XargonWan/RetroDECK/wiki) <br/>
[Discord](https://discord.gg/Dz3szYsP8g)<br/>
[Lemmy](https://lemmy.zip/c/retrodeck)<br/>
[Subreddit](https://www.reddit.com/r/retrodeck)
# How do I start using RetroDECK? # How do I start using RetroDECK?
Basically just download it from Flathub, put your roms/games and needed bioses and just play.
We have an in depth How To on how to get started over here: Read our getting started guide here:
[How to: Start using RetroDECK](https://github.com/XargonWan/RetroDECK/wiki/How-to%3A-Start-using-RetroDECK) [How to: Start using RetroDECK](https://retrodeck.readthedocs.io/en/latest/wiki_general/retrodeck-start/)
## What devices/systems does RetroDECK support: ## What devices/systems does RetroDECK support:
RetroDECK currently supports: RetroDECK currently supports:
- Steam Deck - Steam Deck
@ -62,21 +40,58 @@ RetroDECK currently supports:
For more information read up here: For more information read up here:
[Supported Systems](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Supported-Systems) [Supported Systems](https://retrodeck.readthedocs.io/en/latest/wiki_general/supported-devices/)
## What is RetroDECK?
RetroDECK is a [EmulationStation Desktop Edition](https://es-de.org) (ES-DE) powered Linux [Flatpak application](https://flathub.org/apps/net.retrodeck.retrodeck) that thanks to its `RetroDECK Framework` it builds-in and manage 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.
### So what does that mean?
It means that RetroDECK provides all the emulators, systems and a frontend. RetroDECK configures them for you and put them into one application you can download from Flathub.
By being one application RetroDECK can put all important files in one location for all the emulators, instead of having them spread out over your entire system and even add features on top to orchestrate them seamlessly.
## Is RetroDECK in Beta? ### The RetroDECK Framework
As previously mentioned, RetroDECK also adds the `RetroDECK Framework` on top of the emulators and ES-DE interface 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.
The `RetroDECK Configurator` is a `Utility` that some parts of exposes the `RetroDECK Framework` to the RetroDECK users.
**What can the RetroDECK Framework and by extent the RetroDECK Configurator do?**
It can help with:
- Compressing games
- Easier `Texture Pack` and `Mod` management
- File management
- Tools for troubleshooting (BIOS Checker, Multi-File Structure Checker, Partial or full reset of functions)
- Auto installing some free BIOSes
- Install prebuilt Steam Input profiles for devices like the Steam Deck and external controllers
- Easier management of `mods`, `roms`, `texture_packs`, `scraped media`, `screenshots`, `saves / states` `gamelists` and more
- Give access to global presets that can be acitivated to configure things over many emulators in one go like: `RetroAchievements`
`Borders` `Widescreen Mode` `Swaping A/B X/Y for Nintendo Games`
For our long term vision you can check out the following wiki page:
[RetroDECK: Visions and Goals](https://retrodeck.readthedocs.io/en/latest/wiki_about/visions-and-goals/)
### How to get support?
Use the supports channels on [Discord](https://discord.gg/Dz3szYsP8g) `🤝-community-support` and `🆘-support`.
### The RetroDECK community:
[Website](https://retrodeck.net) <br/>
[Wiki](https://github.com/XargonWan/RetroDECK/wiki) <br/>
[Discord](https://discord.gg/Dz3szYsP8g)<br/>
[Lemmy](https://lemmy.zip/c/retrodeck)<br/>
[Subreddit](https://www.reddit.com/r/retrodeck)
### Is RetroDECK in Beta?
Yes, here you can read more about the beta period: Yes, here you can read more about the beta period:
[RetroDECK: Beta period](https://github.com/XargonWan/RetroDECK/wiki/RetroDECK%3A-Beta-period) [RetroDECK: Beta period](https://retrodeck.readthedocs.io/en/latest/wiki_general/beta-period/)
## Can I contribute to the project?
### Can I contribute to the project?
Yes, off course! <br> Yes, off course! <br>
Read up here on how to help out, there is something for everyone: Read up here on how to help out, there is something for everyone:
[How to: Contribute to RetroDECK](https://github.com/XargonWan/RetroDECK/wiki/How-to%3A-Contribute-to-RetroDECK) [How to: Contribute to RetroDECK](https://retrodeck.readthedocs.io/en/latest/wiki_community/contibute-rd/)
## Our repositories: ## Our repositories:
| Name | Description | | Name | Description |

View file

@ -8,7 +8,8 @@ hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282f
hash^XEMUHDDHASHPLACEHOLDER^https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.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^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 hash^RANIGHTLYCORESPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch_cores.7z
#hash^RETRODECKMAMEPLACEHOLDER^ hash^RETRODECKMAMEPLACEHOLDER^"https://github.com/XargonWan/RetroDECK-MAME/releases/download/$(curl -s https://api.github.com/repos/XargonWan/RetroDECK-MAME/releases/latest | grep -oP '"tag_name": "\K(.*?)(?=")')/RetroDECK-MAME-Artifact.tar.gz"
url^RETRODECKMAMEURLPLACEHOLDER^"https://github.com/XargonWan/RetroDECK-MAME/releases/download/$(curl -s https://api.github.com/repos/XargonWan/RetroDECK-MAME/releases/latest | grep -oP '"tag_name": "\K(.*?)(?=")')/RetroDECK-MAME-Artifact.tar.gz"
latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main
outside_info^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid outside_file^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid
branch^THISBRANCH branch^THISBRANCH

View file

@ -2,4 +2,5 @@
# This scritp is installing the required dependencies to correctly run the pipeline and buold the flatpak # This scritp is installing the required dependencies to correctly run the pipeline and buold the flatpak
sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 curl sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 curl
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --user --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo

View file

@ -3,15 +3,31 @@
# For the file paths to work correctly, call this script with this command from the cloned repo folder root: # For the file paths to work correctly, call this script with this command from the cloned repo folder root:
# sh automation_tools/pre_build_automation.sh # sh automation_tools/pre_build_automation.sh
# Different actions need different information in the task list file # Different actions need different information in the task list file
# branch: This changes the placeholder text to the currently-detected GIT branch if an automated build was started from a PR environment.
# hash: Finds the SHA256 hash of a file online and updates the placeholder in the manifest. # hash: Finds the SHA256 hash of a file online and updates the placeholder in the manifest.
# Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url # Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url
# latestcommit: Finds the most recent commit of a git repo and updated the placeholder in the manifest. # latestcommit: Finds the most recent commit of a git repo and updated the placeholder in the manifest.
# Needs the URL of the repo and the branch to find the latest commit from, in this line format: latestcommit^PLACEHOLDERTEXT^url^branch # Needs the URL of the repo and the branch to find the latest commit from, in this line format: latestcommit^PLACEHOLDERTEXT^url^branch
# latestappimage: Finds the download URL and SHA256 hash of the latest AppImage release from a git repo # latestghrelease: Finds the download URL and SHA256 hash of the latest release from a git repo.
# Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos/<owner-name>/<repo-name>/releases/latest # Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos/<owner-name>/<repo-name>/releases/latest^<file suffix>
# As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest, # As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest,
# the URL that would be used in the above example is "PLACEHOLDERTEXT" and the hash placeholder text would be "HASHPLACEHOLDERTEXT" # the URL that would be used in the above example is "PLACEHOLDERTEXT" and the hash placeholder text would be "HASHPLACEHOLDERTEXT"
# The "HASH" prefix of the placeholder text is hardcoded in the script # The "HASH" prefix of the placeholder text is hardcoded in the script
# The <file_suffix> will be the file extension or other identifying suffix at the end of the file name that can be used to select from multiple releases.
# Example: If there are these file options for a given release:
# yuzu-mainline-20240205-149629642.AppImage
# yuzu-linux-20240205-149629642-source.tar.xz
# yuzu-linux-20240205-149629642-debug.tar.xz
# Entering "AppImage" (without quotes) for the <file_suffix> will identify yuzu-mainline-20240205-149629642.AppImage
# Entering "source-.tar.xz" (without quotes) for the <file_suffix> will identify yuzu-linux-20240205-149629642-source.tar.xz
# Entering "debug-tar.xz" (without quotes) for the <file_suffix> will identify yuzu-linux-20240205-149629642-debug.tar.xz
# As a file extension like ".tar.zx" can apply to multiple file options, the entire part that is appended to each release name should be included.
# The <file_suffix> will also only consider entries where the given suffix is at the end of the file name. So "AppImage" will identify "file.AppImage" but not "file.AppImage.zsync"
# outside_file: Prints the contents of a file from the build environment (such as the buildid file) and replaces the placeholder text with those contents.
# outside_env_var: Gets the value of an environmental variable from the build environment (the output of "echo $var" from the terminal) and replaces the placeholder text with that value.
# custom_command: Runs a single command explicitly as written in the $URL field of the task list, including variable and command expansion. This should work the same as if you were runnig the command directly from the terminal.
# This command does not need a PLACEHOLDERTEXT field in the task list, so needs to be in this syntax: custom_command^^$COMMAND
# url: This is used to calculate a dynamic URL and the value to the $caluculated_url environmental variable, for use in other subsequent commands.
rd_manifest=${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml rd_manifest=${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml
automation_task_list=${GITHUB_WORKSPACE}/automation_tools/automation_task_list.cfg automation_task_list=${GITHUB_WORKSPACE}/automation_tools/automation_task_list.cfg
@ -35,21 +51,28 @@ echo
while IFS="^" read -r action placeholder url branch while IFS="^" read -r action placeholder url branch
do do
if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
if [[ "$action" == "branch" ]]; then case "$action" in
"branch" )
echo echo
echo "Placeholder text: $placeholder" echo "Placeholder text: $placeholder"
echo "Current branch:" "$current_branch" echo "Current branch:" "$current_branch"
echo echo
/bin/sed -i 's^'"$placeholder"'^'"$current_branch"'^g' $rd_manifest /bin/sed -i 's^'"$placeholder"'^'"$current_branch"'^g' $rd_manifest
elif [[ "$action" == "hash" ]]; then ;;
"hash" )
echo echo
echo "Placeholder text: $placeholder" echo "Placeholder text: $placeholder"
echo "URL to hash: $url" calculated_url=$(eval echo "$url") # in case the url has to be calculated from an expression
echo "URL to hash: $calculated_url"
echo echo
hash=$(curl -sL "$url" | sha256sum | cut -d ' ' -f1) hash=$(curl -sL "$calculated_url" | sha256sum | cut -d ' ' -f1)
echo "Hash found: $hash" echo "Hash found: $hash"
/bin/sed -i 's^'"$placeholder"'^'"$hash"'^' $rd_manifest /bin/sed -i 's^'"$placeholder"'^'"$hash"'^' $rd_manifest
elif [[ "$action" == "latestcommit" ]]; then ;;
"latestcommit" )
echo echo
echo "Placeholder text: $placeholder" echo "Placeholder text: $placeholder"
echo "Repo to get latest commit from: $url branch: $branch" echo "Repo to get latest commit from: $url branch: $branch"
@ -57,18 +80,22 @@ do
commit=$(git ls-remote "$url" "$branch" | cut -f1) commit=$(git ls-remote "$url" "$branch" | cut -f1)
echo "Commit found: $commit" echo "Commit found: $commit"
/bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest /bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest
elif [[ "$action" == "latestappimage" ]]; then ;;
"latestghrelease" )
echo echo
echo "Placeholder text: $placeholder" echo "Placeholder text: $placeholder"
echo "Repo to look for AppImage releases: $url" echo "Repo to look for AppImage releases: $url"
echo echo
appimageurl=$(curl -s "$url" | grep browser_download_url | grep "\.AppImage\"" | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ') ghreleaseurl=$(curl -s "$url" | grep browser_download_url | grep "$branch\""$ | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ')
echo "AppImage URL found: $appimageurl" echo "GitHub release URL found: $ghreleaseurl"
/bin/sed -i 's^'"$placeholder"'^'"$appimageurl"'^' $rd_manifest /bin/sed -i 's^'"$placeholder"'^'"$ghreleaseurl"'^' $rd_manifest
appimagehash=$(curl -sL "$appimageurl" | sha256sum | cut -d ' ' -f1) ghreleasehash=$(curl -sL "$ghreleaseurl" | sha256sum | cut -d ' ' -f1)
echo "AppImage hash found: $appimagehash" echo "GitHub release hash found: $ghreleasehash"
/bin/sed -i 's^'"HASHFOR$placeholder"'^'"$appimagehash"'^' $rd_manifest /bin/sed -i 's^'"HASHFOR$placeholder"'^'"$ghreleasehash"'^' $rd_manifest
elif [[ "$action" == "outside_info" ]]; then ;;
"outside_file" )
if [[ "$url" = \$* ]]; then # If value is a reference to a variable name if [[ "$url" = \$* ]]; then # If value is a reference to a variable name
eval url="$url" eval url="$url"
fi fi
@ -77,6 +104,36 @@ do
echo "Information being injected: $(cat $url)" echo "Information being injected: $(cat $url)"
echo echo
/bin/sed -i 's^'"$placeholder"'^'"$(cat $url)"'^' $rd_manifest /bin/sed -i 's^'"$placeholder"'^'"$(cat $url)"'^' $rd_manifest
fi ;;
"outside_env_var" )
if [[ "$url" = \$* ]]; then # If value is a reference to a variable name
eval url="$url"
fi
echo
echo "Placeholder text: $placeholder"
echo "Information being injected: $(echo $url)"
echo
/bin/sed -i 's^'"$placeholder"'^'"$(echo $url)"'^' $rd_manifest
;;
"custom_command" )
echo
echo "Command to run: $url"
echo
eval "$url"
;;
"url" )
# this is used to calculate a dynamic url
echo
echo "Placeholder text: $placeholder"
calculated_url=$(eval echo "$url")
echo "Information being injected: $calculated_url"
echo
/bin/sed -i 's^'"$placeholder"'^'"$calculated_url"'^' $rd_manifest
;;
esac
fi fi
done < "$automation_task_list" done < "$automation_task_list"

View file

@ -1,5 +1,8 @@
#!/bin/bash #!/bin/bash
# TODO: FEDORA
# sudo dnf install -y flatpak flatpak-builder p7zip p7zip-plugins xmlstarlet bzip2 curl
export GITHUB_WORKSPACE="." export GITHUB_WORKSPACE="."
cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak
cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -44,11 +44,12 @@
<ul class="navbar-nav ms-auto"> <ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link" href="#top" style="color: rgb(49,52,55);">Home</a></li> <li class="nav-item"><a class="nav-link" href="#top" style="color: rgb(49,52,55);">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#features" style="color: rgb(49,52,55);">features</a></li> <li class="nav-item"><a class="nav-link" href="#features" style="color: rgb(49,52,55);">features</a></li>
<li class="nav-item"><a class="nav-link" href="https://github.com/XargonWan/RetroDECK/wiki" style="color: rgb(49,52,55);" target="_blank">wiki</a></li> <li class="nav-item"><a class="nav-link" href="https://retrodeck.readthedocs.io/en/latest/blog/" style="color: rgb(49,52,55);" target="_blank">blog</a></li>
<li class="nav-item"><a class="nav-link" href="https://github.com/XargonWan/RetroDECK-cooker/" style="color: rgb(49,52,55);" target="_blank">cooker</a></li> <li class="nav-item"><a class="nav-link" href="https://discord.gg/tbmBpJbpur" target="_blank" style="color: rgb(49,52,55);">Discord</a></li>
<li class="nav-item"><a class="nav-link" href="https://retrodeck.readthedocs.io/en/latest/" style="color: rgb(49,52,55);" target="_blank">wiki</a></li>
<li class="nav-item"><a class="nav-link" href="https://github.com/XargonWan/RetroDECK" target="_blank" style="color: rgb(49,52,55);">github</a></li> <li class="nav-item"><a class="nav-link" href="https://github.com/XargonWan/RetroDECK" target="_blank" style="color: rgb(49,52,55);">github</a></li>
<li class="nav-item"><a class="nav-link" href="https://www.patreon.com/RetroDECK" target="_blank" style="color: rgb(49,52,55);">patreon</a></li> <li class="nav-item"><a class="nav-link" href="https://github.com/XargonWan/RetroDECK-cooker/" style="color: rgb(49,52,55);" target="_blank">cooker</a></li>
<li class="nav-item"><a class="nav-link" href="https://discord.gg/tbmBpJbpur" target="_blank" style="color: rgb(49,52,55);">connect with us</a></li> <li class="nav-item"><a class="nav-link" href="https://retrodeck.readthedocs.io/en/latest/wiki_about/donations-licenses/" target="_blank" style="color: rgb(49,52,55);">donations</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -58,8 +59,8 @@
<div class="container"> <div class="container">
<!-- Start: Intro --> <!-- Start: Intro -->
<div class="intro"> <div class="intro">
<h2 class="text-center" style="font-size: 60px;margin-bottom: 0px;"><img class="img-fluid" src="assets/img/logo_stacked_esde.png" style="margin-bottom: 25px;"></h2> <h2 class="text-center" style="font-size: 60px;margin-bottom: 0px;"><img class="img-fluid" src="assets/img/rd-esde-logo.svg" style="margin-bottom: 25px;"></h2>
<p class="text-center" style="font-size: 20px;color: rgb(255,255,255);"><span style="color: rgb(220, 221, 222); background-color: rgba(4, 4, 5, 0.07);">RetroDECK is a polished and beginner-friendly environment for playing your retro games on Steam Deck, available with just one click from the Discover app.</span></p> <p class="text-center" style="font-size: 20px;color: rgb(255,255,255);"><span style="color: rgb(220, 221, 222); background-color: rgba(4, 4, 5, 0.07);">RetroDECK is a polished and beginner-friendly environment for playing your retro games on Steam Deck and Linux Desktop, available with just one click from the Discover app or wherever you get your flatpaks.</span></p>
</div><!-- End: Intro --> </div><!-- End: Intro -->
<!-- Start: Buttons --> <!-- Start: Buttons -->
<div class="buttons" style="margin-bottom: 0px;"><a class="btn btn-secondary" role="button" target="_blank" style="color: black;background: white;border-top-left-radius: 5px;border-top-right-radius: 5px;border-bottom-right-radius: 5px;border-bottom-left-radius: 5px;" href="https://flathub.org/apps/details/net.retrodeck.retrodeck"><i class="fas fa-download"></i>&nbsp;Get retrodeck</a></div><!-- End: Buttons --> <div class="buttons" style="margin-bottom: 0px;"><a class="btn btn-secondary" role="button" target="_blank" style="color: black;background: white;border-top-left-radius: 5px;border-top-right-radius: 5px;border-bottom-right-radius: 5px;border-bottom-left-radius: 5px;" href="https://flathub.org/apps/details/net.retrodeck.retrodeck"><i class="fas fa-download"></i>&nbsp;Get retrodeck</a></div><!-- End: Buttons -->
@ -94,8 +95,8 @@
<div class="container"> <div class="container">
<div class="text-white bg-primary border rounded border-0 border-primary d-flex flex-column justify-content-between align-items-center align-items-sm-center align-items-md-center flex-lg-row justify-content-lg-center justify-content-xl-center justify-content-xxl-center p-4 p-md-5" style="background: linear-gradient(-95deg, #1a9fff, #946beb);"> <div class="text-white bg-primary border rounded border-0 border-primary d-flex flex-column justify-content-between align-items-center align-items-sm-center align-items-md-center flex-lg-row justify-content-lg-center justify-content-xl-center justify-content-xxl-center p-4 p-md-5" style="background: linear-gradient(-95deg, #1a9fff, #946beb);">
<div class="pb-2 pb-lg-1"> <div class="pb-2 pb-lg-1">
<h2 class="fw-bold mb-2" style="color: rgb(255,255,255);text-align: center;">POWERED BY EMULATIONSTATION-DE</h2> <h2 class="fw-bold mb-2" style="color: rgb(255,255,255);text-align: center;">POWERED BY ES-DE & THE RETRODECK FRAMEWORK</h2>
<p class="mb-0" style="color: rgb(255,255,255);text-align: center;">RetroDECK teamed up with ES-DE to bring you the best retro launcher out there!</p> <p class="mb-0" style="color: rgb(255,255,255);text-align: center;">Together with ES-DE, other software and RetroDECK's own Framework. We are trying to bring you the best all-in-one system out there.</p>
</div> </div>
</div> </div>
</div> </div>
@ -110,32 +111,40 @@
<!-- Start: Features --> <!-- Start: Features -->
<div class="row justify-content-center features"> <div class="row justify-content-center features">
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-play-circle icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-play-circle icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">ready, set, go!</h3> <h3 class="name">pickup and play</h3>
<p class="description">No configuration, just play!</p> <p class="description">No configuration is needed to start. You provide the games and we provide the play.</p>
</div> </div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-exchange-alt icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-exchange-alt icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>instant pickup</strong></h3> <h3 class="name"><strong>quick resume</strong></h3>
<p class="description">Close your game? No worries! Pick up exactly where you left off!</p> <p class="description">Quit your game and pick it up exactly where you left off.</p>
</div> </div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-backward icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-backward icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>rewind</strong></h3> <h3 class="name"><strong>rewind & fast forward</strong></h3>
<p class="description">Seems like you died! Go back in time and retry without having to restart your game or lose a life. <em>(Must be manually enabled during the beta)</em></p> <p class="description"> Go back in time and retry without having to restart your game or skip over that long conversation.</p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-wrench icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">The Configurator</h3>
<p class="description">A super powerful multi-tool interface that allows you to have quick access to the advanced functions and tweak them to your desire.</p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-box icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">Flatpak</h3>
<p class="description">Everything is contained within one application and not over your entire filesystem. Only one place to look and one place to backu.!</p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fa fa-linux icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">Use your system</h3>
<p class="description">With RetroDECK there is no need to replace your existing Linux / SteamOS to get a all-in-one retro gaming solution. Install it on what you already have. </p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-gamepad icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">Hotkey System</h3>
<p class="description">Features a in-depth global hotkey system with radial menus in addition to button combos via Steam Input. </p>
</div> </div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-ghost icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-ghost icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>cheats</strong></h3> <h3 class="name"><strong>cheats</strong></h3>
<p class="description">Wanna be that guy? You can.</p> <p class="description">Can't surpass THAT point? Don't want to farm? Enable cheats and play smoothly. </p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-wifi icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">online gaming <em>(Coming soon)</em><br></h3>
<p class="description">Thanks to RetroArch's Netplay you will be able to play online with your friends, stay tuned for this feature!<br></p>
</div> </div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-database icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-database icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>metadata</strong></h3> <h3 class="name"><strong>metadata & Images</strong></h3>
<p class="description">RetroDECK pulls information from your library to create a beautiful user experience!<br></p> <p class="description">From the ES-DE frontend you can pull information to your library to create a beautiful user experience from various sources, that fits your style.<br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-cloud-download-alt icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>cloud saves <em>(coming soon)</em></strong></h3>
<p class="description">RetroDECK will backup your progression and sync it across multiple devices. <em>(User configuration may be needed)</em><br></p>
</div> </div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-medal icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i> <div class="col-sm-6 col-lg-4 item"><i class="fas fa-medal icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">Retro Achievements</h3> <h3 class="name">Retro Achievements</h3>
@ -143,16 +152,63 @@
</div> </div>
</div><!-- End: Features --> </div><!-- End: Features -->
</div> </div>
</section><!-- End: Features Clean -->
<!-- Start: Banner Color -->
<section class="py-4 py-xl-5">
<div class="container">
<div class="text-white bg-primary border rounded border-0 border-primary d-flex flex-column justify-content-between align-items-center align-items-sm-center align-items-md-center flex-lg-row justify-content-lg-center justify-content-xl-center justify-content-xxl-center p-4 p-md-5" style="background: linear-gradient(-95deg, #1a9fff, #946beb);">
<div class="pb-2 pb-lg-1">
<h2 class="fw-bold mb-2" style="color: rgb(255,255,255);text-align: center;">Always evolving & Improving </h2>
<p class="mb-0" style="color: rgb(255,255,255);text-align: center;">The RetroDECK Team always have several things in the works, what follows is just a tiny selection. To stay up to date on latest RetroDECK news check the the Wiki and join the Discord.</p>
</div>
<div class="my-2"><a class="btn btn-light fs-5 py-2 px-4" role="button" href="https://retrodeck.readthedocs.io/en/latest/wiki_development/what-are-you-working.on/" target="_blank">News</a></div>
</div>
</div>
</section><!-- End: Banner Color -->
<section id="pl-features" class="features-clean">
<div class="container">
<!-- Start: Intro -->
<div class="intro">
<h2 class="text-center" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;">Planned / In-progress Features </h2>
</div><!-- End: Intro -->
<!-- Start: Features -->
<div class="row justify-content-center features">
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-wifi icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name">online gaming <br></h3>
<p class="description">Tools to make it easier to play with your friends online. <br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-cloud-download-alt icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>cloud saves and backup </strong></h3>
<p class="description">RetroDECK will backup your progression and sync it across multiple devices. <br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-users icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>Multi-User System</strong></h3>
<p class="description">Use local RetroDECK users or bind Steam Deck users to your own saves and emulator configurations. <br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-wrench icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>Configurator Godot Edition</strong></h3>
<p class="description">The new controller friendly configurator with even more advanced tools. <br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-flask icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>Add seperate games to Steam</strong></h3>
<p class="description">Tools for adding all your favorite games as seperate entries in Steam with the click of a button. <br></p>
</div>
<div class="col-sm-6 col-lg-4 item"><i class="fas fa-dice icon" style="background: linear-gradient(-95deg, #1a9fff, #946beb);-webkit-background-clip: text;-webkit-text-fill-color: transparent;"></i>
<h3 class="name"><strong>More Content</strong></h3>
<p class="description">RetroDECK will support even more Emulators / Game Engines / Tools and Systems. <br></p>
</div>
</div><!-- End: Features -->
</div>
</section><!-- End: Features Clean --> </section><!-- End: Features Clean -->
<!-- Start: Banner Color --> <!-- Start: Banner Color -->
<section class="py-4 py-xl-5"> <section class="py-4 py-xl-5">
<div class="container"> <div class="container">
<div class="text-white bg-primary border rounded border-0 border-primary d-flex flex-column justify-content-between flex-lg-row p-4 p-md-5" style="background: linear-gradient(-95deg, #1a9fff, #946beb);"> <div class="text-white bg-primary border rounded border-0 border-primary d-flex flex-column justify-content-between flex-lg-row p-4 p-md-5" style="background: linear-gradient(-95deg, #1a9fff, #946beb);">
<div class="pb-2 pb-lg-1"> <div class="pb-2 pb-lg-1">
<h2 class="fw-bold mb-2" style="color: rgb(255,255,255);">Support us oN patreon!</h2> <h2 class="fw-bold mb-2" style="color: rgb(255,255,255);">Support RetroDECK or the software we use </h2>
<p class="mb-0" style="color: rgb(255,255,255);">Help us keep our servers running by donating to our Patreon!</p> <p class="mb-0" style="color: rgb(255,255,255);">Help us keep the game preservation ecosystem alive and healthy.</p>
</div> </div>
<div class="my-2"><a class="btn btn-light fs-5 py-2 px-4" role="button" href="https://www.patreon.com/RetroDECK" target="_blank">donate</a></div> <div class="my-2"><a class="btn btn-light fs-5 py-2 px-4" role="button" href="https://retrodeck.readthedocs.io/en/latest/wiki_about/donations-licenses/" target="_blank">donate</a></div>
</div> </div>
</div> </div>
</section><!-- End: Banner Color --> </section><!-- End: Banner Color -->
@ -161,7 +217,7 @@
<!-- Start: Social Icons --> <!-- Start: Social Icons -->
<div class="social"><a href="https://discord.gg/tbmBpJbpur" target="_blank"><i class="fab fa-discord"></i></a><a href="https://github.com/XargonWan/RetroDECK" target="_blank"><i class="icon ion-social-github"></i></a></div><!-- End: Social Icons --> <div class="social"><a href="https://discord.gg/tbmBpJbpur" target="_blank"><i class="fab fa-discord"></i></a><a href="https://github.com/XargonWan/RetroDECK" target="_blank"><i class="icon ion-social-github"></i></a></div><!-- End: Social Icons -->
<!-- Start: Copyright --> <!-- Start: Copyright -->
<p class="copyright">Made with&nbsp;<i class="fa fa-heart"></i>&nbsp;by gabeee_boii#5232</p><!-- End: Copyright --> <p class="copyright">Made with&nbsp;<i class="fa fa-heart"></i>&nbsp;by gabeee_boii#5232 and RetroDECK Team</p><!-- End: Copyright -->
</footer><!-- End: Footer Basic --> </footer><!-- End: Footer Basic -->
<script src="assets/bootstrap/js/bootstrap.min.js"></script> <script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.11.1/baguetteBox.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.11.1/baguetteBox.min.js"></script>
@ -171,4 +227,4 @@
<script src="assets/js/Simple-Slider.js"></script> <script src="assets/js/Simple-Slider.js"></script>
</body> </body>
</html> </html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View file

@ -1,8 +1,8 @@
"controller_mappings" "controller_mappings"
{ {
"version" "3" "version" "3"
"revision" "94" "revision" "160"
"title" "RetroDECK: Generic - Standard" "title" "RetroDECK: Generic - Standard v.1b"
"description" "RetroDECK: Generic - Standard - v.1b" "description" "RetroDECK: Generic - Standard - v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
@ -12,7 +12,7 @@
"controller_caps" "1573887" "controller_caps" "1573887"
"major_revision" "0" "major_revision" "0"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-1092650192" "Timestamp" "-926565536"
"actions" "actions"
{ {
"Default" "Default"
@ -826,6 +826,14 @@
"binding" "key_press TAB, Swap Screens, , " "binding" "key_press TAB, Swap Screens, , "
} }
} }
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, , "
"binding" "key_press W, , "
}
}
} }
"disabled_activators" "disabled_activators"
{ {
@ -902,6 +910,426 @@
} }
} }
"group" "group"
{
"id" "19"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"group"
{ {
"id" "10" "id" "10"
"mode" "switches" "mode" "switches"
@ -934,7 +1362,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 1 0 1, RetroDECK - Set, , " "binding" "controller_action CHANGE_PRESET 1 0 0, RetroDECK - Set, , "
} }
} }
"Full_Press" "Full_Press"
@ -1056,7 +1484,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 2 0 1, , " "binding" "controller_action CHANGE_PRESET 2 0 0, , "
} }
} }
} }
@ -1154,7 +1582,8 @@
"10" "switch active" "10" "switch active"
"11" "button_diamond active" "11" "button_diamond active"
"12" "joystick inactive" "12" "joystick inactive"
"18" "joystick active" "18" "joystick inactive"
"19" "joystick active"
"13" "left_trigger active" "13" "left_trigger active"
"14" "right_trigger active" "14" "right_trigger active"
"15" "right_joystick inactive" "15" "right_joystick inactive"

View file

@ -1,20 +1,20 @@
"controller_mappings" "controller_mappings"
{ {
"version" "3" "version" "3"
"revision" "90" "revision" "93"
"title" "RetroDECK: DualShock 3" "title" "RetroDECK: DualShock 3 v.1b"
"description" "RetroDECK: PS3 - DualShock 3 - v.1b" "description" "RetroDECK: PS3 - DualShock 3 - v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "" "url" ""
"export_type" "personal_local" "export_type" ""
"controller_type" "controller_ps3" "controller_type" "controller_ps3"
"controller_caps" "1590271" "controller_caps" "1590271"
"major_revision" "0" "major_revision" "0"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-630034944" "Timestamp" "-925476208"
"actions" "actions"
{ {
"Default" "Default"
{ {
"title" "RetroDECK - Set" "title" "RetroDECK - Set"
@ -934,7 +934,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 1 0 1, RetroDECK - Set, , " "binding" "controller_action CHANGE_PRESET 1 0 0, RetroDECK - Set, , "
} }
} }
"Full_Press" "Full_Press"
@ -1056,7 +1056,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 2 0 1, , " "binding" "controller_action CHANGE_PRESET 2 0 0, , "
} }
} }
} }
@ -1130,6 +1130,426 @@
} }
} }
} }
"group"
{
"id" "19"
"mode" "radial_menu"
"name" "dial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"preset" "preset"
{ {
"id" "0" "id" "0"
@ -1154,7 +1574,8 @@
"10" "switch active" "10" "switch active"
"11" "button_diamond active" "11" "button_diamond active"
"12" "joystick inactive" "12" "joystick inactive"
"18" "joystick active" "18" "joystick inactive"
"19" "joystick active"
"13" "left_trigger active" "13" "left_trigger active"
"14" "right_trigger active" "14" "right_trigger active"
"15" "right_joystick inactive" "15" "right_joystick inactive"

View file

@ -2,17 +2,17 @@
{ {
"version" "3" "version" "3"
"revision" "81" "revision" "81"
"title" "RetroDECK: DualShock 4" "title" "RetroDECK: DualShock 4 v.1b"
"description" "RetroDECK: PS4 - DualShock 4 - v.1b" "description" "RetroDECK: PS4 - DualShock 4 - v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "workshop://3115335528" "url" ""
"export_type" "" "export_type" ""
"controller_type" "controller_ps4" "controller_type" "controller_ps4"
"controller_caps" "35085311" "controller_caps" ""
"major_revision" "0" "major_revision" "0"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-954028624" "Timestamp" "1079447734"
"actions" "actions"
{ {
"Default" "Default"
@ -514,7 +514,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "xinput_button SELECT, , " "binding" "mouse_button RIGHT, , "
} }
} }
} }
@ -1134,6 +1134,543 @@
} }
} }
"group" "group"
{
"id" "37"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"group"
{
"id" "38"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, Right Click, , "
}
"settings"
{
"haptic_intensity" "0"
}
}
}
"disabled_activators"
{
}
}
}
}
"group"
{
"id" "39"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button MIDDLE, Middle Click, , "
}
"settings"
{
"haptic_intensity" "0"
}
}
}
"disabled_activators"
{
}
}
}
"gameactions"
{
}
}
"group"
{
"id" "41"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
}
"group"
{
"id" "42"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
}
"group"
{
"id" "43"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button MIDDLE, , "
}
}
}
"disabled_activators"
{
}
}
}
}
"group"
{ {
"id" "7" "id" "7"
"mode" "switches" "mode" "switches"
@ -1371,8 +1908,8 @@
"7" "switch active" "7" "switch active"
"0" "button_diamond active" "0" "button_diamond active"
"1" "left_trackpad inactive" "1" "left_trackpad inactive"
"11" "left_trackpad inactive" "11" "left_trackpad active"
"15" "left_trackpad active" "15" "left_trackpad inactive"
"2" "right_trackpad inactive" "2" "right_trackpad inactive"
"6" "right_trackpad inactive" "6" "right_trackpad inactive"
"10" "right_trackpad inactive" "10" "right_trackpad inactive"
@ -1382,7 +1919,9 @@
"5" "right_trigger active" "5" "right_trigger active"
"8" "right_joystick active" "8" "right_joystick active"
"9" "dpad active" "9" "dpad active"
"35" "center_trackpad active" "35" "center_trackpad inactive"
"43" "center_trackpad inactive"
"41" "gyro active"
} }
} }
"preset" "preset"
@ -1393,16 +1932,20 @@
{ {
"18" "switch active" "18" "switch active"
"19" "button_diamond active" "19" "button_diamond active"
"20" "left_trackpad active" "20" "left_trackpad inactive"
"38" "left_trackpad active"
"21" "right_trackpad active" "21" "right_trackpad active"
"22" "joystick inactive" "22" "joystick inactive"
"30" "joystick active" "30" "joystick inactive"
"37" "joystick active"
"23" "left_trigger active" "23" "left_trigger active"
"24" "right_trigger active" "24" "right_trigger active"
"25" "right_joystick inactive" "25" "right_joystick inactive"
"29" "right_joystick active" "29" "right_joystick active"
"26" "dpad active" "26" "dpad active"
"33" "center_trackpad active" "33" "center_trackpad inactive"
"39" "center_trackpad inactive"
"42" "gyro active"
} }
} }
"settings" "settings"

View file

@ -1,18 +1,18 @@
"controller_mappings" "controller_mappings"
{ {
"version" "3" "version" "3"
"revision" "84" "revision" "114"
"title" "RetroDECK: DualSense" "title" "RetroDECK: DualSense v.1b"
"description" "RetroDECK: PS5 - DualSense - v.1b" "description" "RetroDECK: PS5 - DualSense v.1"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "" "url" "f"
"export_type" "" "export_type" ""
"controller_type" "controller_ps5" "controller_type" "controller_ps5"
"controller_caps" "35148799" "controller_caps" "35148799"
"major_revision" "0" "major_revision" "0"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-1064394560" "Timestamp" "-1043740912"
"actions" "actions"
{ {
"Default" "Default"
@ -514,7 +514,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "xinput_button SELECT, , " "binding" "mouse_button RIGHT, , "
} }
} }
} }
@ -1134,6 +1134,550 @@
} }
} }
"group" "group"
{
"id" "45"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"group"
{
"id" "47"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button MIDDLE, , "
}
"settings"
{
"haptic_intensity" "0"
}
}
}
"disabled_activators"
{
}
}
}
"gameactions"
{
}
}
"group"
{
"id" "49"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, , "
}
"settings"
{
"haptic_intensity" "0"
}
}
}
"disabled_activators"
{
}
}
}
}
"group"
{
"id" "50"
"mode" "single_button"
"name" ""
"description" ""
"inputs"
{
"click"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button MIDDLE, , "
}
"settings"
{
"haptic_intensity" "0"
}
}
}
"disabled_activators"
{
}
}
}
"gameactions"
{
}
}
"group"
{
"id" "51"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
}
"group"
{
"id" "52"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
}
"group"
{ {
"id" "7" "id" "7"
"mode" "switches" "mode" "switches"
@ -1172,7 +1716,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 2 0 1, , " "binding" "controller_action CHANGE_PRESET 2 0 0, , "
} }
} }
} }
@ -1295,7 +1839,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 1 0 1, , " "binding" "controller_action CHANGE_PRESET 1 0 0, , "
} }
} }
"Full_Press" "Full_Press"
@ -1403,8 +1947,8 @@
"7" "switch active" "7" "switch active"
"0" "button_diamond active" "0" "button_diamond active"
"1" "left_trackpad inactive" "1" "left_trackpad inactive"
"11" "left_trackpad inactive" "11" "left_trackpad active"
"26" "left_trackpad active" "26" "left_trackpad inactive"
"2" "right_trackpad inactive" "2" "right_trackpad inactive"
"6" "right_trackpad inactive" "6" "right_trackpad inactive"
"10" "right_trackpad inactive" "10" "right_trackpad inactive"
@ -1414,7 +1958,9 @@
"5" "right_trigger active" "5" "right_trigger active"
"8" "right_joystick active" "8" "right_joystick active"
"9" "dpad active" "9" "dpad active"
"41" "center_trackpad active" "41" "center_trackpad inactive"
"47" "center_trackpad inactive"
"51" "gyro active"
} }
} }
"preset" "preset"
@ -1425,16 +1971,20 @@
{ {
"29" "switch active" "29" "switch active"
"30" "button_diamond active" "30" "button_diamond active"
"31" "left_trackpad active" "31" "left_trackpad inactive"
"49" "left_trackpad active"
"32" "right_trackpad active" "32" "right_trackpad active"
"33" "joystick inactive" "33" "joystick inactive"
"42" "joystick active" "42" "joystick inactive"
"45" "joystick active"
"34" "left_trigger active" "34" "left_trigger active"
"35" "right_trigger active" "35" "right_trigger active"
"36" "right_joystick inactive" "36" "right_joystick inactive"
"43" "right_joystick active" "43" "right_joystick active"
"37" "dpad active" "37" "dpad active"
"40" "center_trackpad active" "40" "center_trackpad inactive"
"50" "center_trackpad inactive"
"52" "gyro active"
} }
} }
"settings" "settings"

View file

@ -1,20 +1,20 @@
"controller_mappings" "controller_mappings"
{ {
"version" "3" "version" "3"
"revision" "70" "revision" "73"
"title" "RetroDECK: Steam Controller - Gordon" "title" "RetroDECK: Steam Controller - Gordon v.1b"
"description" "RetroDECK: Steam Controller - Gordon - v.1b" "description" "RetroDECK: Steam Controller - Gordon v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "" "url" ""
"export_type" "personal_local" "export_type" ""
"controller_type" "controller_steamcontroller_gordon" "controller_type" "controller_steamcontroller_gordon"
"controller_caps" "2179063" "controller_caps" "2179063"
"major_revision" "1" "major_revision" "1"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-1090008992" "Timestamp" "-596696880"
"actions" "actions"
{ {
"Default" "Default"
{ {
"title" "RetroDECK - Set" "title" "RetroDECK - Set"
@ -1156,6 +1156,426 @@
} }
} }
"group" "group"
{
"id" "38"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"group"
{ {
"id" "7" "id" "7"
"mode" "switches" "mode" "switches"
@ -1481,6 +1901,57 @@
} }
} }
} }
"group"
{
"id" "40"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
"gameactions"
{
}
}
"group"
{
"id" "41"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
"gameactions"
{
}
}
"group"
{
"id" "42"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
"gameactions"
{
}
}
"preset" "preset"
{ {
"id" "0" "id" "0"
@ -1498,6 +1969,7 @@
"4" "left_trigger active" "4" "left_trigger active"
"5" "right_trigger active" "5" "right_trigger active"
"23" "gyro inactive" "23" "gyro inactive"
"40" "gyro active"
} }
} }
"preset" "preset"
@ -1512,9 +1984,11 @@
"13" "right_trackpad inactive" "13" "right_trackpad inactive"
"20" "right_trackpad active" "20" "right_trackpad active"
"14" "joystick inactive" "14" "joystick inactive"
"26" "joystick active" "26" "joystick inactive"
"38" "joystick active"
"15" "left_trigger active" "15" "left_trigger active"
"16" "right_trigger active" "16" "right_trigger active"
"41" "gyro active"
} }
} }
"preset" "preset"
@ -1531,6 +2005,7 @@
"32" "joystick active" "32" "joystick active"
"33" "left_trigger active" "33" "left_trigger active"
"34" "right_trigger active" "34" "right_trigger active"
"42" "gyro active"
} }
} }
"settings" "settings"

View file

@ -2,12 +2,12 @@
{ {
"version" "3" "version" "3"
"revision" "83" "revision" "83"
"title" "RetroDECK: Switch Pro" "title" "RetroDECK: Switch Pro v.1b"
"description" "RetroDECK: Switch - Pro - v.1b" "description" "RetroDECK: Switch - Pro Controller - v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "" "url" ""
"export_type" "personal_local" "export_type" ""
"controller_type" "controller_switch_pro" "controller_type" "controller_switch_pro"
"controller_caps" "77087743" "controller_caps" "77087743"
"major_revision" "0" "major_revision" "0"
@ -488,8 +488,8 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press LEFT_CONTROL, Pause / Resume, , " "binding" "key_press LEFT_CONTROL, Take Screenshot, , "
"binding" "key_press P, Pause / Resume, , " "binding" "key_press X, Take Screenshot, , "
} }
} }
} }
@ -505,8 +505,8 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press LEFT_CONTROL, Take Screenshot, , " "binding" "key_press LEFT_CONTROL, Pause / Resume, , "
"binding" "key_press X, Take Screenshot, , " "binding" "key_press P, Pause / Resume, , "
} }
} }
} }
@ -522,8 +522,8 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press LEFT_CONTROL, Fullscreen Toggle, , " "binding" "key_press LEFT_CONTROL, Open Menu, , "
"binding" "key_press RETURN, Fullscreen Toggle, , " "binding" "key_press M, Open Menu, , "
} }
} }
} }
@ -539,8 +539,8 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press LEFT_CONTROL, Open Menu, , " "binding" "key_press LEFT_CONTROL, Fullscreen Toggle, , "
"binding" "key_press M, Open Menu, , " "binding" "key_press RETURN, Fullscreen Toggle, , "
} }
} }
} }
@ -902,6 +902,426 @@
} }
} }
"group" "group"
{
"id" "22"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"group"
{ {
"id" "7" "id" "7"
"mode" "switches" "mode" "switches"
@ -934,7 +1354,7 @@
"bindings" "bindings"
{ {
"binding" "xinput_button SELECT, , " "binding" "xinput_button SELECT, , "
"binding" "controller_action CHANGE_PRESET 2 0 1, , " "binding" "controller_action CHANGE_PRESET 2 0 0, , "
} }
} }
} }
@ -1057,7 +1477,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 1 0 1, , " "binding" "controller_action CHANGE_PRESET 1 0 0, , "
} }
} }
"Full_Press" "Full_Press"
@ -1156,6 +1576,40 @@
} }
} }
} }
"group"
{
"id" "24"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
"gameactions"
{
}
}
"group"
{
"id" "25"
"mode" "dpad"
"name" ""
"description" ""
"inputs"
{
}
"settings"
{
"requires_click" "0"
}
"gameactions"
{
}
}
"preset" "preset"
{ {
"id" "0" "id" "0"
@ -1169,6 +1623,7 @@
"5" "right_trigger active" "5" "right_trigger active"
"8" "right_joystick active" "8" "right_joystick active"
"9" "dpad active" "9" "dpad active"
"24" "gyro active"
} }
} }
"preset" "preset"
@ -1180,12 +1635,14 @@
"11" "switch active" "11" "switch active"
"12" "button_diamond active" "12" "button_diamond active"
"13" "joystick inactive" "13" "joystick inactive"
"19" "joystick active" "19" "joystick inactive"
"22" "joystick active"
"14" "left_trigger active" "14" "left_trigger active"
"15" "right_trigger active" "15" "right_trigger active"
"16" "right_joystick inactive" "16" "right_joystick inactive"
"20" "right_joystick active" "20" "right_joystick active"
"17" "dpad active" "17" "dpad active"
"25" "gyro active"
} }
} }
"settings" "settings"

View file

@ -2,7 +2,7 @@
{ {
"version" "3" "version" "3"
"revision" "84" "revision" "84"
"title" "RetroDECK: Xbox 360" "title" "RetroDECK: Xbox 360 v.1b"
"description" "RetroDECK: Xbox 360 - v.1b" "description" "RetroDECK: Xbox 360 - v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
@ -934,7 +934,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 1 0 1, RetroDECK - Set, , " "binding" "controller_action CHANGE_PRESET 1 0 0, RetroDECK - Set, , "
} }
} }
"Full_Press" "Full_Press"
@ -1056,7 +1056,7 @@
{ {
"bindings" "bindings"
{ {
"binding" "controller_action CHANGE_PRESET 2 0 1, , " "binding" "controller_action CHANGE_PRESET 2 0 0, , "
} }
} }
} }
@ -1130,6 +1130,426 @@
} }
} }
} }
"group"
{
"id" "19"
"mode" "radial_menu"
"name" "dial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_1"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_2"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_3"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
}
"settings"
{
"touchmenu_button_fire_type" "0"
}
}
"preset" "preset"
{ {
"id" "0" "id" "0"
@ -1154,7 +1574,8 @@
"10" "switch active" "10" "switch active"
"11" "button_diamond active" "11" "button_diamond active"
"12" "joystick inactive" "12" "joystick inactive"
"18" "joystick active" "18" "joystick inactive"
"19" "joystick active"
"13" "left_trigger active" "13" "left_trigger active"
"14" "right_trigger active" "14" "right_trigger active"
"15" "right_joystick inactive" "15" "right_joystick inactive"
@ -1168,3 +1589,4 @@
"right_trackpad_mode" "0" "right_trackpad_mode" "0"
} }
} }

View file

@ -1,18 +1,18 @@
"controller_mappings" "controller_mappings"
{ {
"version" "3" "version" "3"
"revision" "93" "revision" "101"
"title" "RetroDECK: Official Layout - Xbox One/S/X" "title" "RetroDECK: Xbox Wireless v.1b"
"description" "RetroDECK: Xbox One/S/X" "description" "RetroDECK: One/S/X - Xbox Wireless v.1b"
"creator" "" "creator" ""
"progenitor" "" "progenitor" ""
"url" "" "url" ""
"export_type" "" "export_type" "personal_cloud"
"controller_type" "controller_xboxone" "controller_type" "controller_xboxone"
"controller_caps" "1590271" "controller_caps" "9978879"
"major_revision" "0" "major_revision" "0"
"minor_revision" "0" "minor_revision" "0"
"Timestamp" "-5320" "Timestamp" "1079645600"
"actions" "actions"
{ {
"Default" "Default"
@ -828,7 +828,21 @@
"description" "" "description" ""
"inputs" "inputs"
{ {
"dpad_north" }
"settings"
{
"requires_click" "0"
}
}
"group"
{
"id" "20"
"mode" "radial_menu"
"name" "Global Radial"
"description" ""
"inputs"
{
"touch_menu_button_0"
{ {
"activators" "activators"
{ {
@ -836,8 +850,11 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press LEFT_CONTROL, Swap Screens, , " "binding" "mouse_button RIGHT, RetroDECK, RD-icon_circle_2_180x180.png, "
"binding" "key_press TAB, Swap Screens, , " }
"settings"
{
"haptic_intensity" "2"
} }
} }
} }
@ -845,7 +862,7 @@
{ {
} }
} }
"dpad_south" "touch_menu_button_1"
{ {
"activators" "activators"
{ {
@ -853,7 +870,11 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press ESCAPE, , " "binding" "key_press ESCAPE, Escape, RD-ESC.png, "
}
"settings"
{
"haptic_intensity" "2"
} }
} }
} }
@ -861,7 +882,7 @@
{ {
} }
} }
"dpad_east" "touch_menu_button_2"
{ {
"activators" "activators"
{ {
@ -869,7 +890,11 @@
{ {
"bindings" "bindings"
{ {
"binding" "key_press RETURN, , " "binding" "key_press RETURN, Enter, RD-Enter.png, "
}
"settings"
{
"haptic_intensity" "2"
} }
} }
} }
@ -877,7 +902,7 @@
{ {
} }
} }
"click" "touch_menu_button_3"
{ {
"activators" "activators"
{ {
@ -885,7 +910,337 @@
{ {
"bindings" "bindings"
{ {
"binding" "mouse_button RIGHT, , " "binding" "key_press TAB, Tab, RD-Tab.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_4"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Control, RD-ctrl.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_5"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press SPACE, Space, RD-space.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_6"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press FORWARD_SLASH, /, RD-frontslash.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_7"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Alt, RD-alt.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_8"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F1, F1, RD-F1.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_9"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F4, F4, RD-F4.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_10"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F5, F5, RD-F5.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_11"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F7, F7, RD-F7.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_12"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F8, F8, RD-F8.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_13"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press F10, F10, RD-F10.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_14"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, "
"binding" "key_press R, Restart / Reset, RD-system-reboot.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_15"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, "
"binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_16"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Dual - Screens, RD-system-switch-user.png, "
"binding" "key_press TAB, Swap Dual - Screens, RD-system-switch-user.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_17"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
"binding" "key_press L, Change Dual Screen - Layout, RD-preferences-system-windows-actions.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_18"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
"binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, "
}
"settings"
{
"haptic_intensity" "2"
}
}
}
"disabled_activators"
{
}
}
"touch_menu_button_19"
{
"activators"
{
"Full_Press"
{
"bindings"
{
"binding" "key_press LEFT_CONTROL, Swap Disc, RD-application-x-iso.png, "
"binding" "key_press D, Swap Disc, RD-application-x-iso.png, "
}
"settings"
{
"haptic_intensity" "2"
} }
} }
} }
@ -896,7 +1251,7 @@
} }
"settings" "settings"
{ {
"requires_click" "0" "touchmenu_button_fire_type" "0"
} }
} }
"group" "group"
@ -1096,7 +1451,7 @@
"binding" "controller_action CHANGE_PRESET 1 0 1, , " "binding" "controller_action CHANGE_PRESET 1 0 1, , "
} }
} }
"release" "Full_Press"
{ {
"bindings" "bindings"
{ {
@ -1248,7 +1603,8 @@
"10" "switch active" "10" "switch active"
"11" "button_diamond active" "11" "button_diamond active"
"12" "joystick inactive" "12" "joystick inactive"
"19" "joystick active" "19" "joystick inactive"
"20" "joystick active"
"13" "left_trigger active" "13" "left_trigger active"
"14" "right_trigger active" "14" "right_trigger active"
"15" "right_joystick inactive" "15" "right_joystick inactive"

View file

@ -1,9 +1,7 @@
config_file_format^citra config_file_format^citra
target_file^$citraconf change^ask_to_exit^confirmClose^true^UI^$citraconf^$emuconfigs/citra/qt-config.ini
defaults_file^$emuconfigs/citra/qt-config.ini change^ask_to_exit^confirmClose\default^true^UI^$citraconf^$emuconfigs/citra/qt-config.ini
change^ask_to_exit^confirmClose^true^UI change^abxy_button_swap^profiles\1\button_a^button:1,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls^$citraconf^$emuconfigs/citra/qt-config.ini
change^ask_to_exit^confirmClose\default^true^UI change^abxy_button_swap^profiles\1\button_b^button:0,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls^$citraconf^$emuconfigs/citra/qt-config.ini
change^nintendo_button_layout^profiles\1\button_a^button:1,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls change^abxy_button_swap^profiles\1\button_x^button:3,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls^$citraconf^$emuconfigs/citra/qt-config.ini
change^nintendo_button_layout^profiles\1\button_b^button:0,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls change^abxy_button_swap^profiles\1\button_y^button:2,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls^$citraconf^$emuconfigs/citra/qt-config.ini
change^nintendo_button_layout^profiles\1\button_x^button:3,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls
change^nintendo_button_layout^profiles\1\button_y^button:2,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls

View file

@ -1,4 +1,2 @@
config_file_format^dolphin config_file_format^dolphin
target_file^$dolphinconf change^ask_to_exit^ConfirmStop^True^Interface^$dolphinconf^$emuconfigs/dolphin/Dolphin.ini
defaults_file^$emuconfigs/dolphin/Dolphin.ini
change^ask_to_exit^ConfirmStop^True^Interface

View file

@ -1,10 +1,8 @@
config_file_format^duckstation config_file_format^duckstation
target_file^$duckstationconf change^cheevos^Enabled^true^Cheevos^$duckstationconf^$emuconfigs/duckstation/settings.ini
defaults_file^$emuconfigs/duckstation/settings.ini change^cheevos^Username^$cheevos_username^Cheevos^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^cheevos^Enabled^true^Cheevos change^cheevos^Token^$cheevos_token^Cheevos^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^cheevos^Username^$cheevos_username^Cheevos change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Cheevos^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^cheevos^Token^$cheevos_token^Cheevos change^cheevos_hardcore^ChallengeMode^true^Cheevos^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Cheevos change^savestate_auto_save^SaveStateOnExit^true^Main^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^cheevos_hardcore^ChallengeMode^true^Cheevos change^ask_to_exit^ConfirmPowerOff^true^Main^$duckstationconf^$emuconfigs/duckstation/settings.ini
change^savestate_auto_save^SaveStateOnExit^true^Main
change^ask_to_exit^ConfirmPowerOff^true^Main

View file

@ -1,9 +1,7 @@
config_file_format^retroarch # This is the config file format, used in functions like get_setting_value and set_setting_value config_file_format^retroarch # This is the config file format, used in functions like get_setting_value and set_setting_value
target_file^$examplefile # This is the target file that should be updated. This will be the actively-used config file by whatever emulator is being set up. This can be a variable name as well! change^cheevos^Enabled^true^Cheevos^$target_file^$defaults_file # This is a preset configuration line. The syntax is <action>^<preset name (as defined in retrodeck.cfg)>^<setting name>^<setting value when enabled>^<setting section in emulator config file, if there is one>^<target file to be changed?^<defaults file for disabling the preset>
defaults_file^$emuconfigs/retroarch/retroarch.cfg # This is the file that is referenced when presets are disabled. This should be the "shipped" config file for this emulator change^borders^overlay_file^/var/config/retroarch/overlays/borders/snes.cfg^^target_file^defaults_file # This is another preset configuration line, for the preset section called "borders" in retrodeck.cfg. Also, there is no defined "setting section" on this line, but there must be an empty field between ^^
change^cheevos^Enabled^true^Cheevos # This is a preset configuration line. The syntax is <action>^<preset name (as defined in retrodeck.cfg)>^<setting name>^<setting value when enabled>^<setting section in emulator config file, if there is one> enable^abxy_button_swap^/var/config/retroarch/config/remaps/Snes9x/snes.rmp # This will remove the ".disabled" suffix from the target file, or add ".disabled" to the suffix of the target file if the preset is being disabled
change^borders^overlay_file^/var/config/retroarch/overlays/borders/snes.cfg # This is another preset configuration line, for the preset section called "borders" in retrodeck.cfg. Also, there is no defined "setting section" on this line
OTHER NOTES: OTHER NOTES:
- The name of the presets configuration file for any given system MUST be <system name>_presets.cfg - The name of the presets configuration file for any given system MUST be <system name>_presets.cfg

View file

@ -1,14 +1,12 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Gambatte/gb.cfg change^borders^aspect_ratio_index^23^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_height^576^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^aspect_ratio_index^23 change^borders^custom_viewport_width^640^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_height^576 change^borders^custom_viewport_x^320^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_width^640 change^borders^custom_viewport_y^20^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_x^320 change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gb.cfg^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_y^20 change^borders^input_overlay_aspect_adjust_landscape^0.110000^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gb.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.110000 change^borders^input_overlay_scale_landscape^1.205000^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^borders^input_overlay_y_offset_landscape^0.005000^^/var/config/retroarch/config/Gambatte/gb.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.205000 enable^abxy_button_swap^/var/config/retroarch/config/remaps/Gambatte/gb.rmp
change^borders^input_overlay_y_offset_landscape^0.005000
enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gb.rmp

View file

@ -1,14 +1,12 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/mGBA/gba.cfg change^borders^aspect_ratio_index^23^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_height^640^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^aspect_ratio_index^23 change^borders^custom_viewport_width^960^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_height^640 change^borders^custom_viewport_x^160^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_width^960 change^borders^custom_viewport_y^0^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_x^160 change^borders^input_overlay_enable^true^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_y^0 change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gba.cfg^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^borders^input_overlay_aspect_adjust_landscape^0.110000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gba.cfg change^borders^input_overlay_scale_landscape^1.2150000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.110000 change^borders^input_overlay_y_offset_landscape^0.020000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.2150000 enable^abxy_button_swap^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp
change^borders^input_overlay_y_offset_landscape^0.020000
enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp

View file

@ -1,14 +1,12 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Gambatte/gbc.cfg change^borders^aspect_ratio_index^23^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_height^576^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^aspect_ratio_index^23 change^borders^custom_viewport_width^640^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_height^576 change^borders^custom_viewport_x^320^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_width^640 change^borders^custom_viewport_y^20^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_x^320 change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gbc.cfg^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_y^20 change^borders^input_overlay_aspect_adjust_landscape^0.110000^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gbc.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.110000 change^borders^input_overlay_scale_landscape^1.205000^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^borders^input_overlay_y_offset_landscape^-0.040000^^/var/config/retroarch/config/Gambatte/gbc.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.205000 enable^abxy_button_swap^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp
change^borders^input_overlay_y_offset_landscape^-0.040000
enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp

View file

@ -1,8 +1,6 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/genesis.cfg^^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_aspect_adjust_landscape^0.100000^^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/genesis.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.100000 change^borders^input_overlay_scale_landscape^1.040000^^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^widescreen^aspect_ratio_index^24^^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.040000
change^widescreen^aspect_ratio_index^24

View file

@ -1,13 +1,11 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Genesis Plus GX/gg.cfg change^borders^aspect_ratio_index^23^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_width^960^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^aspect_ratio_index^23 change^borders^custom_viewport_height^720^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_width^960 change^borders^custom_viewport_x^160^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_height^720 change^borders^custom_viewport_y^24^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_x^160 change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gg.cfg^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^custom_viewport_y^24 change^borders^input_overlay_aspect_adjust_landscape^0.110000^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gg.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.110000 change^borders^input_overlay_scale_landscape^1.350000^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^borders^input_overlay_y_offset_landscape^0.020000^^/var/config/retroarch/config/Genesis Plus GX/gg.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.350000
change^borders^input_overlay_y_offset_landscape^0.020000

View file

@ -1,8 +1,6 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/N64.cfg^^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_aspect_adjust_landscape^0.145000^^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/N64.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.145000 change^widescreen^aspect_ratio_index^24^^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true enable^abxy_button_swap^/var/config/retroarch/config/remaps/Snes9x/snes.rmp
change^widescreen^aspect_ratio_index^24
enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp

View file

@ -1,10 +1,8 @@
config_file_format^pcsx2 config_file_format^pcsx2
target_file^$pcsx2conf change^cheevos^Enabled^true^Achievements^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
defaults_file^$emuconfigs/PCSX2/PCSX2.ini change^cheevos^Username^$cheevos_username^Achievements^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^cheevos^Enabled^true^Achievements change^cheevos^Token^$cheevos_token^Achievements^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^cheevos^Username^$cheevos_username^Achievements change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Achievements^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^cheevos^Token^$cheevos_token^Achievements change^cheevos_hardcore^ChallengeMode^true^Achievements^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Achievements change^savestate_auto_save^SaveStateOnShutdown^true^EmuCore^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^cheevos_hardcore^ChallengeMode^true^Achievements change^ask_to_exit^ConfirmShutdown^true^UI^$pcsx2conf^$emuconfigs/PCSX2/PCSX2.ini
change^savestate_auto_save^SaveStateOnShutdown^true^EmuCore
change^ask_to_exit^ConfirmShutdown^true^UI

View file

@ -1,4 +1,5 @@
config_file_format^ppsspp config_file_format^ppsspp
target_file^$ppssppconf change^savestate_auto_load^AutoLoadSaveState^2^General^$ppssppconf^$emuconfigs/ppssppdl/ppsspp.ini
defaults_file^$emuconfigs/PCSX2/PCSX2.ini change^cheevos^AchievementsEnable^True^Achievements^$ppssppconf^$emuconfigs/ppssppdl/ppsspp.ini
change^savestate_auto_load^AutoLoadSaveState^2^General change^cheevos^AchievementsUserName^Achievements^$cheevos_username^$ppssppconf^$emuconfigs/ppssppdl/ppsspp.ini
change^cheevos_hardcore^AchievementsChallengeMode^True^Achievements^$ppssppconf^$emuconfigs/ppssppdl/ppsspp.ini

View file

@ -1,4 +1,2 @@
config_file_format^primehack config_file_format^primehack
target_file^$primehackconf change^ask_to_exit^ConfirmStop^True^Interface^$primehackconf^$emuconfigs/primehack/Dolphin.ini
defaults_file^$emuconfigs/primehack/Dolphin.ini
change^ask_to_exit^ConfirmStop^True^Interface

View file

@ -1,8 +1,6 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/SwanStation/psx.cfg change^borders^input_overlay^/var/config/retrodeck/overlays/borders/pegasus/psx.cfg^^/var/config/retroarch/config/SwanStation/psx.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_aspect_adjust_landscape^0.120000^^/var/config/retroarch/config/SwanStation/psx.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retrodeck/overlays/borders/pegasus/psx.cfg change^borders^input_overlay_enable^true^^/var/config/retroarch/config/SwanStation/psx.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.120000 change^borders^input_overlay_scale_landscape^1.040000^^/var/config/retroarch/config/SwanStation/psx.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true change^widescreen^aspect_ratio_index^24^^/var/config/retroarch/config/SwanStation/psx.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.040000
change^widescreen^aspect_ratio_index^24

View file

@ -1,9 +1,7 @@
config_file_format^retroarch-all config_file_format^retroarch-all
target_file^$raconf change^cheevos^cheevos_enable^true^^$raconf^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^cheevos^cheevos_token^$cheevos_token^^$raconf^$emuconfigs/retroarch/retroarch.cfg
change^cheevos^cheevos_enable^true change^cheevos^cheevos_username^$cheevos_username^^$raconf^$emuconfigs/retroarch/retroarch.cfg
change^cheevos^cheevos_token^$cheevos_token change^cheevos_hardcore^cheevos_hardcore_mode_enable^true^^$raconf^$emuconfigs/retroarch/retroarch.cfg
change^cheevos^cheevos_username^$cheevos_username change^savestate_auto_load^savestate_auto_load^true^^$raconf^$emuconfigs/retroarch/retroarch.cfg
change^cheevos_hardcore^cheevos_hardcore_mode_enable^true change^savestate_auto_save^savestate_auto_save^true^^$raconf^$emuconfigs/retroarch/retroarch.cfg
change^savestate_auto_load^savestate_auto_load^true
change^savestate_auto_save^savestate_auto_save^true

View file

@ -1,9 +1,7 @@
config_file_format^retroarch config_file_format^retroarch
target_file^/var/config/retroarch/config/Snes9x/snes.cfg change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/snes87.cfg^^/var/config/retroarch/config/Snes9x/snes.cfg^$emuconfigs/retroarch/retroarch.cfg
defaults_file^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_aspect_adjust_landscape^0.305000^^/var/config/retroarch/config/Snes9x/snes.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/snes87.cfg change^borders^input_overlay_scale_landscape^1.050000^^/var/config/retroarch/config/Snes9x/snes.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_aspect_adjust_landscape^0.305000 change^borders^input_overlay_enable^true^^/var/config/retroarch/config/Snes9x/snes.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_scale_landscape^1.050000 change^widescreen^aspect_ratio_index^24^^/var/config/retroarch/config/Snes9x/snes.cfg^$emuconfigs/retroarch/retroarch.cfg
change^borders^input_overlay_enable^true enable^abxy_button_swap^/var/config/retroarch/config/remaps/Snes9x/snes.rmp
change^widescreen^aspect_ratio_index^24
enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp

View file

@ -1,9 +1,7 @@
config_file_format^yuzu config_file_format^yuzu
target_file^$yuzuconf change^ask_to_exit^confirmClose^true^UI^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
defaults_file^$emuconfigs/yuzu/qt-config.ini change^ask_to_exit^confirmClose\default^true^UI^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
change^ask_to_exit^confirmClose^true^UI change^abxy_button_swap^player_0_button_a^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:0,pad:0"^Controls^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
change^ask_to_exit^confirmClose\default^true^UI change^abxy_button_swap^player_0_button_b^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:1,pad:0"^Controls^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
change^nintendo_button_layout^player_0_button_a^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:0,pad:0"^Controls change^abxy_button_swap^player_0_button_x^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:2,pad:0"^Controls^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
change^nintendo_button_layout^player_0_button_b^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:1,pad:0"^Controls change^abxy_button_swap^player_0_button_y^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:3,pad:0"^Controls^$yuzuconf^$emuconfigs/yuzu/qt-config.ini
change^nintendo_button_layout^player_0_button_x^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:2,pad:0"^Controls
change^nintendo_button_layout^player_0_button_y^"engine:sdl,guid:03000000de280000ff11000001000000,port:0,button:3,pad:0"^Controls

View file

@ -6,6 +6,7 @@ megacd
neogeocd neogeocd
pcenginecd pcenginecd
pcfx pcfx
psp
psx psx
ps2 ps2
saturn saturn
@ -29,7 +30,13 @@ gba
gbc gbc
genesis genesis
mastersystem mastersystem
n64
nds nds
nes nes
ngp
ngpc
sega32x
sega32xjp
sega32xna
snes snes
snesna snesna

View file

@ -1 +1,4 @@
1201^1231^0000^2359^RetroDECK-Xmas-splash.svg 1201^1231^0000^2359^rd-xmas-splash.svg
0209^0212^0000^2359^rd-lunar-dragon-splash.svg
0214^0214^0001^2359^rd-valentines-splash.svg
0317^0317^0000^2359^rd-stpatricks-splash.svg

View file

@ -5,19 +5,22 @@ If you feel you have contributed to the project but lacks mention, please contac
The Team The Team
XargonWan XargonWan
RetroDECK project founder and also one of the founding members of AmberELEC RetroDECK project founder and also one of the founding members of AmberELEC.
IceNine451 IceNine451
Creator of the RetroDECK configurator and various awesome features. Creator of the RetroDECK configurator and the RetroDECK Framework.
Lazorne Lazorne
Community management/outreach, testing, documentation, feature suggestions and some design. Community management/outreach, testing, documentation and Wiki Lord.
dottormac WallK
Beta Tester Works on Godot Features.
LX32 LX32
Junior code contributor, Beta Tester Works on a many projects.
dottormac
Tester
Collaborators Collaborators

View file

@ -54,7 +54,7 @@ n64=false
psx_ra=false psx_ra=false
snes=false snes=false
[nintendo_button_layout] [abxy_button_swap]
citra=false citra=false
gb=false gb=false
gba=false gba=false

View file

@ -4,7 +4,7 @@ Buttons/A = SOUTH
Buttons/B = EAST Buttons/B = EAST
Buttons/X = NORTH Buttons/X = NORTH
Buttons/Y = WEST Buttons/Y = WEST
Buttons/Z = TR Buttons/Z = `TR` | `TL`
Buttons/Start = START Buttons/Start = START
Main Stick/Up = `Axis 1-` Main Stick/Up = `Axis 1-`
Main Stick/Down = `Axis 1+` Main Stick/Down = `Axis 1+`

View file

@ -21,4 +21,9 @@ Other State Hotkeys/Increase Selected State Slot = @(Ctrl+K)
Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J)
General/Toggle Fullscreen = @(Ctrl+Return) General/Toggle Fullscreen = @(Ctrl+Return)
General/Control NetPlay Golf Mode = @(Alt+H) General/Control NetPlay Golf Mode = @(Alt+H)
Wii/Press Sync Button = @(Alt+W) Wii/Press Sync Button = @(Alt+W)
Wii/Connect Wii Remote 1 = @(Alt+W+`1`)
Wii/Connect Wii Remote 2 = @(Alt+W+`2`)
Wii/Connect Wii Remote 3 = @(Alt+W+`3`)
Wii/Connect Wii Remote 4 = @(Alt+W+`4`)
Wii/Connect Balance Board = @(Alt+W+`5`)

View file

@ -10,7 +10,7 @@ Drums/Stick/Modifier/Range = 50.0
Turntable/Stick/Modifier/Range = 50.0 Turntable/Stick/Modifier/Range = 50.0
uDraw/Stylus/Modifier/Range = 50.0 uDraw/Stylus/Modifier/Range = 50.0
Drawsome/Stylus/Modifier/Range = 50.0 Drawsome/Stylus/Modifier/Range = 50.0
Buttons/A = SOUTH Buttons/A = `SOUTH` | `Click 1` | `XInput2/0/Virtual core pointer:Click 1`
Buttons/B = EAST Buttons/B = EAST
Buttons/1 = WEST Buttons/1 = WEST
Buttons/2 = NORTH Buttons/2 = NORTH

View file

@ -18,8 +18,8 @@ An.Right = 1-40,10-4000
Analog limiter = 1-60 Analog limiter = 1-60
RapidFire = 1-113:1-48 RapidFire = 1-113:1-48
Fast-forward = 1-113:1-157 Fast-forward = 1-113:1-157
SpeedToggle = 1-68 SpeedToggle = 1-113:1-144
Pause = 1-111 Pause = 1-113:1-41
Rewind = 1-113:1-156 Rewind = 1-113:1-156
Save State = 1-113:1-47 Save State = 1-113:1-47
Load State = 1-113:1-29 Load State = 1-113:1-29
@ -31,4 +31,6 @@ Toggle Fullscreen = 1-113:1-66
RightAn.Up = 10-4007 RightAn.Up = 10-4007
RightAn.Down = 10-4006 RightAn.Down = 10-4006
RightAn.Left = 10-4005 RightAn.Left = 10-4005
RightAn.Right = 10-4004 RightAn.Right = 10-4004
Previous Slot = 1-113:1-38
Exit App = 1-113:1-45

View file

@ -12,7 +12,7 @@ Language = en_US
ForceLagSync2 = False ForceLagSync2 = False
DiscordPresence = True DiscordPresence = True
UISound = False UISound = False
AutoLoadSaveState = 0 AutoLoadSaveState = 2
EnableCheats = False EnableCheats = False
CwCheatRefreshRate = 77 CwCheatRefreshRate = 77
CwCheatScrollPosition = 0.000000 CwCheatScrollPosition = 0.000000
@ -165,6 +165,10 @@ SkipGPUReadbacks = False
GpuLogProfiler = False GpuLogProfiler = False
iShowStatusFlags = 0 iShowStatusFlags = 0
DisplayIntegerScale = False DisplayIntegerScale = False
VSync = False
MultiThreading = True
UberShaderVertex = True
UberShaderFragment = True
[Sound] [Sound]
Enable = True Enable = True
AudioBackend = 0 AudioBackend = 0
@ -332,6 +336,100 @@ Custom6Repeat = False
Custom7Repeat = False Custom7Repeat = False
Custom8Repeat = False Custom8Repeat = False
Custom9Repeat = False Custom9Repeat = False
Custom10Mapping = 0x0000000000000000
Custom10Image = 0
Custom10Shape = 2
Custom10Toggle = False
Custom10Repeat = False
Custom11Mapping = 0x0000000000000000
Custom11Image = 1
Custom11Shape = 2
Custom11Toggle = False
Custom11Repeat = False
Custom12Mapping = 0x0000000000000000
Custom12Image = 2
Custom12Shape = 2
Custom12Toggle = False
Custom12Repeat = False
Custom13Mapping = 0x0000000000000000
Custom13Image = 3
Custom13Shape = 2
Custom13Toggle = False
Custom13Repeat = False
Custom14Mapping = 0x0000000000000000
Custom14Image = 4
Custom14Shape = 2
Custom14Toggle = False
Custom14Repeat = False
Custom15Mapping = 0x0000000000000000
Custom15Image = 0
Custom15Shape = 9
Custom15Toggle = False
Custom15Repeat = False
Custom16Mapping = 0x0000000000000000
Custom16Image = 1
Custom16Shape = 9
Custom16Toggle = False
Custom16Repeat = False
Custom17Mapping = 0x0000000000000000
Custom17Image = 2
Custom17Shape = 9
Custom17Toggle = False
Custom17Repeat = False
Custom18Mapping = 0x0000000000000000
Custom18Image = 3
Custom18Shape = 9
Custom18Toggle = False
Custom18Repeat = False
Custom19Mapping = 0x0000000000000000
Custom19Image = 4
Custom19Shape = 9
Custom19Toggle = False
Custom19Repeat = False
fcombo10X = 0.643378
fcombo10Y = 0.581952
comboKeyScale10 = 1.150000
ShowComboKey10 = False
fcombo11X = 0.763295
fcombo11Y = 0.581952
comboKeyScale11 = 1.150000
ShowComboKey11 = False
fcombo12X = 0.883212
fcombo12Y = 0.581952
comboKeyScale12 = 1.150000
ShowComboKey12 = False
fcombo13X = 0.643378
fcombo13Y = 0.416206
comboKeyScale13 = 1.150000
ShowComboKey13 = False
fcombo14X = 0.763295
fcombo14Y = 0.416206
comboKeyScale14 = 1.150000
ShowComboKey14 = False
fcombo15X = 0.355579
fcombo15Y = 0.581952
comboKeyScale15 = 1.150000
ShowComboKey15 = False
fcombo16X = 0.235662
fcombo16Y = 0.581952
comboKeyScale16 = 1.150000
ShowComboKey16 = False
fcombo17X = 0.115746
fcombo17Y = 0.581952
comboKeyScale17 = 1.150000
ShowComboKey17 = False
fcombo18X = 0.355579
fcombo18Y = 0.416206
comboKeyScale18 = 1.150000
ShowComboKey18 = False
fcombo19X = 0.235662
fcombo19Y = 0.416206
comboKeyScale19 = 1.150000
ShowComboKey19 = False
AllowMappingCombos = True
RapidFileInterval = 5
AnalogGesture = False
AnalogGestureSensibility = 1.000000
[Network] [Network]
EnableWlan = False EnableWlan = False
EnableAdhocServer = False EnableAdhocServer = False
@ -367,6 +465,7 @@ WlanPowerSave = False
EncryptSave = True EncryptSave = True
SavedataUpgradeVersion = True SavedataUpgradeVersion = True
MemStickSize = 16 MemStickSize = 16
GameLanguage = -1
[Debugger] [Debugger]
DisasmWindowX = -1 DisasmWindowX = -1
DisasmWindowY = -1 DisasmWindowY = -1
@ -390,6 +489,7 @@ DrawFrameGraph = False
GEWindowTabsBL = 0x00000000 GEWindowTabsBL = 0x00000000
GEWindowTabsBR = 0x00000000 GEWindowTabsBR = 0x00000000
GEWindowTabsTR = 0x00000000 GEWindowTabsTR = 0x00000000
SkipFuncHashMap =
[Upgrade] [Upgrade]
UpgradeMessage = UpgradeMessage =
UpgradeVersion = UpgradeVersion =
@ -516,6 +616,8 @@ VRCameraPitch = 0
VRHeadRotationScale = 5.000000 VRHeadRotationScale = 5.000000
VRHeadRotationEnabled = False VRHeadRotationEnabled = False
VRHeadRotationSmoothing = False VRHeadRotationSmoothing = False
VRPassthrough = False
VRCanvas3DDistance = 3.000000
[Achievements] [Achievements]
AchievementsEnable = False AchievementsEnable = False
AchievementsChallengeMode = False AchievementsChallengeMode = False

View file

@ -1129,7 +1129,7 @@
<platform>msxturbor</platform> <platform>msxturbor</platform>
<theme>msxturbor</theme> <theme>msxturbor</theme>
</system> </system>
<!--
<system> <system>
<name>mugen</name> <name>mugen</name>
<fullname>M.U.G.E.N Game Engine</fullname> <fullname>M.U.G.E.N Game Engine</fullname>
@ -1139,7 +1139,7 @@
<platform>mugen</platform> <platform>mugen</platform>
<theme>mugen</theme> <theme>mugen</theme>
</system> </system>
-->
<system> <system>
<name>multivision</name> <name>multivision</name>
<fullname>Othello Multivision</fullname> <fullname>Othello Multivision</fullname>
@ -1329,7 +1329,7 @@
<platform>odyssey2</platform> <platform>odyssey2</platform>
<theme>odyssey2</theme> <theme>odyssey2</theme>
</system> </system>
<!--
<system> <system>
<name>openbor</name> <name>openbor</name>
<fullname>OpenBOR Game Engine</fullname> <fullname>OpenBOR Game Engine</fullname>
@ -1339,7 +1339,7 @@
<platform>openbor</platform> <platform>openbor</platform>
<theme>openbor</theme> <theme>openbor</theme>
</system> </system>
-->
<!-- <!--
<system> <system>
<name>oric</name> <name>oric</name>
@ -1471,8 +1471,8 @@
<fullname>Sony PlayStation 3</fullname> <fullname>Sony PlayStation 3</fullname>
<path>%ROMPATH%/ps3</path> <path>%ROMPATH%/ps3</path>
<extension>.desktop .ps3 .PS3 .ps3dir .PS3DIR</extension> <extension>.desktop .ps3 .PS3 .ps3dir .PS3DIR</extension>
<command label="RPCS3 Directory (Standalone)">%EMULATOR_RPCS3% --no-gui %ROM%</command>
<command label="RPCS3 Shortcut (Standalone)">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command> <command label="RPCS3 Shortcut (Standalone)">%ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<command label="RPCS3 Directory (Standalone)">%EMULATOR_RPCS3% --no-gui %ROM%</command>
<platform>ps3</platform> <platform>ps3</platform>
<theme>ps3</theme> <theme>ps3</theme>
</system> </system>

View file

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
source /app/libexec/functions.sh source /app/libexec/functions.sh
source /app/libexec/logger.sh
debug_dialog() { debug_dialog() {
# This function is for displaying commands run by the Configurator without actually running them # This function is for displaying commands run by the Configurator without actually running them
@ -119,9 +118,9 @@ configurator_move_folder_dialog() {
if [[ -d "$dest_root/$rd_dir_path" ]]; then # If the move succeeded if [[ -d "$dest_root/$rd_dir_path" ]]; then # If the move succeeded
declare -g "$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... if [[ "$rd_dir_name" == "rdhome" ]]; then # If the whole retrodeck folder was moved...
prepare_emulator "postmove" "retrodeck" prepare_component "postmove" "retrodeck"
fi fi
prepare_emulator "postmove" "all" # Update all the appropriate emulator path settings prepare_component "postmove" "all" # Update all the appropriate emulator path settings
conf_write # Write the settings to retrodeck.cfg conf_write # Write the settings to retrodeck.cfg
if [[ -z $(ls -1 "$source_root/retrodeck") ]]; then # Cleanup empty old_path/retrodeck folder if it was left behind if [[ -z $(ls -1 "$source_root/retrodeck") ]]; then # Cleanup empty old_path/retrodeck folder if it was left behind
rmdir "$source_root/retrodeck" rmdir "$source_root/retrodeck"
@ -151,7 +150,7 @@ configurator_move_folder_dialog() {
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." 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") dir_to_move=$(directory_browse "RetroDECK $(basename $dir_to_move) directory location")
declare -g "$rd_dir_name=$dir_to_move" declare -g "$rd_dir_name=$dir_to_move"
prepare_emulator "postmove" "all" prepare_component "postmove" "all"
conf_write conf_write
configurator_generic_dialog "RetroDECK Configurator - Move Folder" "RetroDECK $(basename $dir_to_move) folder now configured at\n$dir_to_move." configurator_generic_dialog "RetroDECK Configurator - Move Folder" "RetroDECK $(basename $dir_to_move) folder now configured at\n$dir_to_move."
configurator_move_folder_dialog "$rd_dir_name" configurator_move_folder_dialog "$rd_dir_name"

View file

@ -104,6 +104,43 @@ move() {
fi fi
} }
download_file() {
# Function to download file from the Internet, with Zenity progress bar
# USAGE: download_file $source_url $file_dest $file_name
# source_url is the location the file is downloaded from
# file_dest is the destination the file should be in the filesystem, needs filename included!
# file_name is a user-readable file name or description to be put in the Zenity dialog
# Run wget in the background and redirect the progress to a temporary file
(
wget "$1" -O "$2" -q --show-progress --progress=dot 2>&1 | sed -n -e 's/^.* \([0-9]*\)%.*$/\1/p' > "/var/cache/tmp/download_progress" &
wget_pid=$!
progress="0"
echo "$progress" # Initial progress value. sent to Zenity
while true; do
progress=$(tail -n 2 "/var/cache/tmp/download_progress" | head -1) # Read the second-to-last value written to the pipe, to avoid reading data that is half written
echo "$progress" # Send value to Zenity
if [[ "$(tail -n 1 "/var/cache/tmp/download_progress")" == "100" ]]; then # Read last line every time to check for download completion
echo "100"
break
fi
sleep 0.5
done
# Wait for wget process to finish
wait "$wget_pid"
) |
zenity --progress \
--title="Downloading File" \
--text="Downloading $3..." \
--percentage=0 \
--auto-close
# Cleanup temp file
rm -f "/var/cache/tmp/download_progress"
}
update_rd_conf() { update_rd_conf() {
# This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings.
# USAGE: update_rd_conf # USAGE: update_rd_conf
@ -251,15 +288,9 @@ dir_prep() {
} }
update_rpcs3_firmware() { update_rpcs3_firmware() {
(
mkdir -p "$roms_folder/ps3/tmp" mkdir -p "$roms_folder/ps3/tmp"
chmod 777 "$roms_folder/ps3/tmp" chmod 777 "$roms_folder/ps3/tmp"
wget "$rpcs3_firmware" -P "$roms_folder/ps3/tmp/" download_file "$rpcs3_firmware" "$roms_folder/ps3/tmp/PS3UPDAT.PUP" "RPCS3 Firmware"
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK RPCS3 Firmware Download" \
--text="RetroDECK downloading the RPCS3 firmware, please wait."
rpcs3 --installfw "$roms_folder/ps3/tmp/PS3UPDAT.PUP" rpcs3 --installfw "$roms_folder/ps3/tmp/PS3UPDAT.PUP"
rm -rf "$roms_folder/ps3/tmp" rm -rf "$roms_folder/ps3/tmp"
} }
@ -343,6 +374,9 @@ finit() {
log i "Executing finit" log i "Executing finit"
# Placing the default retrodeck.cfg
cp -vf $rd_defaults $rd_conf
# Internal or SD Card? # Internal or SD Card?
local finit_dest_choice=$(configurator_destination_choice_dialog "RetroDECK data" "Welcome to the first configuration of RetroDECK.\nThe setup will be quick but please READ CAREFULLY each message in order to avoid misconfigurations.\n\nWhere do you want your RetroDECK data folder to be located?\n\nThis folder will contain all ROMs, BIOSs and scraped data." ) 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." )
log i "Choice is $finit_dest_choice" log i "Choice is $finit_dest_choice"
@ -410,7 +444,7 @@ finit() {
esac esac
prepare_emulator "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders prepare_component "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders
conf_write # Write the new values to retrodeck.cfg conf_write # Write the new values to retrodeck.cfg
@ -426,7 +460,7 @@ finit() {
--text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue."
( (
prepare_emulator "reset" "all" prepare_component "reset" "all"
build_retrodeck_current_presets build_retrodeck_current_presets
deploy_helper_files deploy_helper_files
@ -473,7 +507,8 @@ install_retrodeck_controller_profile() {
# USAGE: 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 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/" rsync -rlD --mkpath "/app/retrodeck/binding_icons/" "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/"
cp -f "$emuconfigs/defaults/retrodeck/controller_configs/*.vdf" "$HOME/.steam/steam/controller_base/templates" rsync -rlD --mkpath "$emuconfigs/defaults/retrodeck/controller_configs/" "$HOME/.steam/steam/controller_base/templates/"
# TODO: delete older files Issue#672
else 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." 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 fi
@ -519,7 +554,7 @@ easter_eggs() {
if [[ ! -z $(cat $easter_egg_checklist) ]]; then if [[ ! -z $(cat $easter_egg_checklist) ]]; then
while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values
do do
if [[ $current_day -ge "$start_date" && $current_day -le "$end_date" && $current_time -ge "$start_time" && $current_time -le "$end_time" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed if [[ "$((10#$current_day))" -ge "$((10#$start_date))" && "$((10#$current_day))" -le "$((10#$end_date))" && "$((10#$current_time))" -ge "$((10#$start_time))" && "$((10#$current_time))" -le "$((10#$end_time))" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed
new_splash_file="$splashscreen_dir/$splash_file" new_splash_file="$splashscreen_dir/$splash_file"
break break
else # When there are no matches, the default splash screen is set to deploy else # When there are no matches, the default splash screen is set to deploy

View file

@ -10,7 +10,7 @@ source /app/libexec/functions.sh
source /app/libexec/multi_user.sh source /app/libexec/multi_user.sh
source /app/libexec/patching.sh source /app/libexec/patching.sh
source /app/libexec/post_update.sh source /app/libexec/post_update.sh
source /app/libexec/prepare_emulator.sh source /app/libexec/prepare_component.sh
source /app/libexec/presets.sh source /app/libexec/presets.sh
source /app/libexec/logger.sh source /app/libexec/logger.sh
@ -180,8 +180,8 @@ else
set_setting_value $rd_conf "rdhome" "$new_home_path" retrodeck "paths" set_setting_value $rd_conf "rdhome" "$new_home_path" retrodeck "paths"
conf_read conf_read
tmplog_merger tmplog_merger
prepare_emulator "retrodeck" "postmove" prepare_component "retrodeck" "postmove"
prepare_emulator "all" "postmove" prepare_component "all" "postmove"
conf_write conf_write
fi fi

View file

@ -210,7 +210,7 @@ multi_user_setup_new_user() {
do do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
unlink "/var/config/$emu_conf" unlink "/var/config/$emu_conf"
prepare_emulator "reset" "$emu_conf" prepare_component "reset" "$emu_conf"
fi fi
done done
for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator
@ -240,7 +240,7 @@ multi_user_link_current_user_files() {
if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf" ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf"
else # If the current user doesn't have a config folder for this emulator, init it and then link it else # If the current user doesn't have a config folder for this emulator, init it and then link it
prepare_emulator "reset" "$emu_conf" prepare_component "reset" "$emu_conf"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf"
fi fi
fi fi

View file

@ -1,7 +1,5 @@
#!/bin/bash #!/bin/bash
source /app/libexec/logger.sh
post_update() { post_update() {
# post update script # post update script
@ -23,7 +21,7 @@ post_update() {
# - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/ # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/
rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack. rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack.
prepare_emulator "reset" "primehack" prepare_component "reset" "primehack"
dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards"
dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates"
@ -214,14 +212,14 @@ post_update() {
set_setting_value "$ppssppconf" "AutoLoadSaveState" "0" "ppsspp" "General" set_setting_value "$ppssppconf" "AutoLoadSaveState" "0" "ppsspp" "General"
prepare_emulator "reset" "cemu" prepare_component "reset" "cemu"
prepare_emulator "reset" "pico8" prepare_component "reset" "pico8"
configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "Would you like to install the official controller profile?\n(this will reset your custom emulator settings)\n\nAfter installation you can enable it from from Controller Settings -> Templates." configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "Would you like to install the official controller profile?\n(this will reset your custom emulator settings)\n\nAfter installation you can enable it from from Controller Settings -> Templates."
if [[ $(configurator_generic_question_dialog "RetroDECK Official Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then if [[ $(configurator_generic_question_dialog "RetroDECK Official Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then
install_retrodeck_controller_profile install_retrodeck_controller_profile
prepare_emulator "reset" "all" prepare_component "reset" "all"
fi fi
fi fi
if [[ $prev_version -le "071" ]]; then if [[ $prev_version -le "071" ]]; then
@ -236,6 +234,15 @@ post_update() {
emulationstation --home /var/config/emulationstation --create-system-dirs emulationstation --home /var/config/emulationstation --create-system-dirs
fi fi
if [[ $prev_version -le "080" ]]; then
# In version 0.8.0b, the following changes were made that required config file updates/reset or other changes to the filesystem:
# - Remove RetroDECK controller profile from existing template location TODO
# - Determine if Steam is installed via normal desktop application / Flatpak / SteamOS TODO
# - Install RetroDECK controller profile in desired location TODO
# - Change section name in retrodeck.cfg for ABXY button swap preset
sed -i 's^nintendo_button_layout^abxy_button_swap^' "$rd_conf" # This is a one-off sed statement as there are no functions for replacing section names
fi
# The following commands are run every time. # The following commands are run every time.
if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
@ -269,8 +276,9 @@ post_update() {
if [[ $prev_version -le "075" ]]; then if [[ $prev_version -le "075" ]]; then
# In version 0.7.5b, the following changes were made: # In version 0.7.5b, the following changes were made:
# TODO: vita3k init prepare_component "reset" "vita3k"
# TODO: MAME init prepare_component "reset" "mame"
prepare_component "reset" "boilr"
if [ -d "$rdhome/.logs" ]; then if [ -d "$rdhome/.logs" ]; then
mv "$rdhome/.logs" "$logs_folder" mv "$rdhome/.logs" "$logs_folder"
log i "Logs folder renamed successfully" log i "Logs folder renamed successfully"
@ -278,6 +286,8 @@ post_update() {
log i "The .logs folder does not exist, continuing." log i "The .logs folder does not exist, continuing."
fi fi
# The save folder of rpcs3 was inverted so we're moving the saves into the real one # The save folder of rpcs3 was inverted so we're moving the saves into the real one
log w "RPCS3 saves needs to be migrated, executing." log w "RPCS3 saves needs to be migrated, executing."
mv "$saves_folder/ps3/rpcs3" "$saves_folder/ps3/rpcs3.bak" mv "$saves_folder/ps3/rpcs3" "$saves_folder/ps3/rpcs3.bak"

View file

@ -1,21 +1,19 @@
#!/bin/bash #!/bin/bash
source /app/libexec/logger.sh prepare_component() {
# This function will perform one of several actions on one or more components
prepare_emulator() {
# This function will perform one of several actions on one or more emulators
# The actions currently include "reset" and "postmove" # The actions currently include "reset" and "postmove"
# The "reset" action will initialize the emulator # The "reset" action will initialize the component
# The "postmove" action will update the emulator settings after one or more RetroDECK folders were moved # The "postmove" action will update the component settings after one or more RetroDECK folders were moved
# An emulator can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all emulators equally # An component can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all components equally
# The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed # The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed
# USAGE: prepare_emulator "$action" "$emulator" "$call_source(optional)" # USAGE: prepare_component "$action" "$component" "$call_source(optional)"
action="$1" action="$1"
emulator="$2" component="$2"
call_source="$3" call_source="$3"
if [[ "$emulator" == "retrodeck" ]]; then if [[ "$component" == "retrodeck" ]]; then
if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them
while read -r config_line; do while read -r config_line; do
local current_setting_name=$(get_setting_name "$config_line" "retrodeck") local current_setting_name=$(get_setting_name "$config_line" "retrodeck")
@ -39,7 +37,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(emulationstation|all)$ ]]; then # For use after ESDE-related folders are moved or a reset if [[ "$component" =~ ^(es-de|ES-DE|all)$ ]]; then # For use after ESDE-related folders are moved or a reset
if [[ "$action" == "reset" ]]; then if [[ "$action" == "reset" ]]; then
rm -rf /var/config/emulationstation/ rm -rf /var/config/emulationstation/
mkdir -p /var/config/emulationstation/.emulationstation/ mkdir -p /var/config/emulationstation/.emulationstation/
@ -59,7 +57,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(retroarch|RetroArch|all)$ ]]; then if [[ "$component" =~ ^(retroarch|RetroArch|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch" rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch"
@ -134,11 +132,11 @@ prepare_emulator() {
set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "widescreen")" "retrodeck" "widescreen" set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "widescreen")" "retrodeck" "widescreen"
set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "widescreen")" "retrodeck" "widescreen" set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "widescreen")" "retrodeck" "widescreen"
set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "widescreen")" "retrodeck" "widescreen" set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "widescreen")" "retrodeck" "widescreen"
set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_load")" "retrodeck" "savestate_auto_load" set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_load")" "retrodeck" "savestate_auto_load"
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save" set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save"
fi fi
@ -156,7 +154,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(cemu|Cemu|all)$ ]]; then if [[ "$component" =~ ^(cemu|Cemu|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing CEMU" log i "Initializing CEMU"
@ -185,7 +183,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(citra|citra-emu|Citra|all)$ ]]; then if [[ "$component" =~ ^(citra|citra-emu|Citra|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing CITRA" log i "Initializing CITRA"
@ -217,7 +215,7 @@ prepare_emulator() {
dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
# Reset default preset settings # Reset default preset settings
set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands if [[ "$action" == "postmove" ]]; then # Run only post-move commands
@ -232,7 +230,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then if [[ "$component" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing DOLPHIN" log i "Initializing DOLPHIN"
@ -287,7 +285,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(duckstation|Duckstation|all)$ ]]; then if [[ "$component" =~ ^(duckstation|Duckstation|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing DUCKSTATION" log i "Initializing DUCKSTATION"
@ -334,7 +332,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then if [[ "$component" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing MELONDS" log i "Initializing MELONDS"
@ -374,7 +372,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(pcsx2|PCSX2|all)$ ]]; then if [[ "$component" =~ ^(pcsx2|PCSX2|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing PCSX2" log i "Initializing PCSX2"
@ -420,7 +418,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(pico8|pico-8|all)$ ]]; then if [[ "$component" =~ ^(pico8|pico-8|all)$ ]]; then
if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
@ -430,7 +428,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(ppsspp|PPSSPP|all)$ ]]; then if [[ "$component" =~ ^(ppsspp|PPSSPP|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing PPSSPPSDL" log i "Initializing PPSSPPSDL"
@ -460,7 +458,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(primehack|Primehack|all)$ ]]; then if [[ "$component" =~ ^(primehack|Primehack|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing Primehack" log i "Initializing Primehack"
@ -504,7 +502,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(rpcs3|RPCS3|all)$ ]]; then if [[ "$component" =~ ^(rpcs3|RPCS3|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing RPCS3" log i "Initializing RPCS3"
@ -542,7 +540,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(ryujunx|Ryujinx|all)$ ]]; then if [[ "$component" =~ ^(ryujunx|Ryujinx|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing RYUJINX" log i "Initializing RYUJINX"
@ -569,7 +567,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(xemu|XEMU|all)$ ]]; then if [[ "$component" =~ ^(xemu|XEMU|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Initializing XEMU" log i "Initializing XEMU"
@ -585,12 +583,12 @@ prepare_emulator() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where component will look
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu" dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu"
else # Single-user actions else # Single-user actions
rm -rf /var/config/xemu rm -rf /var/config/xemu
rm -rf /var/data/xemu rm -rf /var/data/xemu
dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where component will look
cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf" cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf"
set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files"
@ -614,7 +612,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(yuzu|Yuzu|all)$ ]]; then if [[ "$component" =~ ^(yuzu|Yuzu|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing YUZU" log i "Initializing YUZU"
@ -652,7 +650,7 @@ prepare_emulator() {
fi fi
# Reset default preset settings # Reset default preset settings
set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout" set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands if [[ "$action" == "postmove" ]]; then # Run only post-move commands
@ -670,7 +668,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(vita3k|Vita3K|all)$ ]]; then if [[ "$component" =~ ^(vita3k|Vita3K|all)$ ]]; then
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Initializing Vita3K" log i "Initializing Vita3K"
@ -678,13 +676,13 @@ prepare_emulator() {
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
log d "Figure out what Vita3k needs for multi-user" log d "Figure out what Vita3k needs for multi-user"
else # Single-user actions 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 # NOTE: the component 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" rm -rf "/var/data/Vita3K"
mkdir -p "/var/data/Vita3K" mkdir -p "/var/data/Vita3K"
unzip "/app/retrodeck/vita3k.zip" -d "/var/data/Vita3K" unzip "/app/retrodeck/vita3k.zip" -d "/var/data/Vita3K"
chmod +x "/var/data/Vita3K/Vita3K" chmod +x "/var/data/Vita3K/Vita3K"
rm -f "/var/data/Vita3K/update-vita3k.sh" rm -f "/var/data/Vita3K/update-vita3k.sh"
cp -fvr "$emuconfigs/vita3k/config.yml" "/var/data/Vita3K" # Emulator config cp -fvr "$emuconfigs/vita3k/config.yml" "/var/data/Vita3K" # component config
cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K" # User config cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K" # User config
set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k" set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k"
fi fi
@ -704,7 +702,7 @@ prepare_emulator() {
fi fi
fi fi
if [[ "$emulator" =~ ^(mame|MAME|all)$ ]]; then if [[ "$component" =~ ^(mame|MAME|all)$ ]]; then
# TODO: do a proper script # TODO: do a proper script
# This is just a placeholder script to test the emulator's flow # This is just a placeholder script to test the emulator's flow
log i "----------------------" log i "----------------------"
@ -721,7 +719,7 @@ prepare_emulator() {
fi fi
if [[ "$emulator" =~ ^(gzdoom|GZDOOM|all)$ ]]; then if [[ "$component" =~ ^(gzdoom|GZDOOM|all)$ ]]; then
# TODO: do a proper script # TODO: do a proper script
# This is just a placeholder script to test the emulator's flow # This is just a placeholder script to test the emulator's flow
log i "----------------------" log i "----------------------"
@ -737,8 +735,18 @@ prepare_emulator() {
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 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 fi
# Update presets for all emulators after any reset or move if [[ "$component" =~ ^(boilr|BOILR|all)$ ]]; then
if [[ ! "$emulator" == "retrodeck" ]]; then log i "----------------------"
log i "Initializing BOILR"
log i "----------------------"
mkdir -p "/var/config/boilr"
cp -fvr "/app/libexec/steam-sync/config.toml" "/var/config/boilr"
fi
# Update presets for all components after any reset or move
if [[ ! "$component" == "retrodeck" ]]; then
build_retrodeck_current_presets build_retrodeck_current_presets
fi fi
} }

View file

@ -98,7 +98,7 @@ build_preset_config() {
local read_system_name=$(get_setting_name "$system_line") local read_system_name=$(get_setting_name "$system_line")
if [[ "$read_system_name" == "$system_being_changed" ]]; then if [[ "$read_system_name" == "$system_being_changed" ]]; then
local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset") local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset")
while IFS='^' read -r action read_preset read_setting_name new_setting_value section while IFS='^' read -r action read_preset read_setting_name new_setting_value section target_file defaults_file
do do
case "$action" in case "$action" in
@ -111,22 +111,16 @@ build_preset_config() {
fi fi
;; ;;
"target_file" )
if [[ "$read_preset" = \$* ]]; then
eval read_preset=$read_preset
fi
local read_target_file="$read_preset"
;;
"defaults_file" )
if [[ "$read_preset" = \$* ]]; then
eval read_preset=$read_preset
fi
local read_defaults_file="$read_preset"
;;
"change" ) "change" )
if [[ "$read_preset" == "$current_preset" ]]; then if [[ "$read_preset" == "$current_preset" ]]; then
if [[ "$target_file" = \$* ]]; then # Read current target file and resolve if it is a variable
declare -g "target_file=$target_file"
fi
local read_target_file="$target_file"
if [[ "$defaults_file" = \$* ]]; then #Read current defaults file and resolve if it is a variable
declare -g "defaults_file=$defaults_file"
fi
local read_defaults_file="$defaults_file"
if [[ "$read_system_enabled" == "true" ]]; then if [[ "$read_system_enabled" == "true" ]]; then
if [[ "$new_setting_value" = \$* ]]; then if [[ "$new_setting_value" = \$* ]]; then
eval new_setting_value=$new_setting_value eval new_setting_value=$new_setting_value

View file

@ -0,0 +1,60 @@
debug = false
config_version = 1
blacklisted_games = []
[steamgrid_db]
enabled = true
prefer_animated = false
banned_images = []
only_download_boilr_images = false
allow_nsfw = false
[steam]
create_collections = false
optimize_for_big_picture = false
stop_steam = false
start_steam = false
[bottles]
enabled = false
[epic_games]
enabled = false
safe_launch = []
[flatpak]
enabled = false
[gog]
enabled = false
create_symlinks = true
[heroic]
enabled = false
launch_games_through_heroic = []
default_launch_through_heroic = true
[itch]
enabled = false
create_symlinks = true
[legendary]
enabled = false
[lutris]
enabled = false
executable = "lutris"
flatpak = true
flatpak_image = "net.lutris.Lutris"
installed = true
[origin]
enabled = false
[uplay]
enabled = false
[minigalaxy]
enabled = true
create_symlinks = false
games_folder = "/var/config/boilr/sync/"

View file

@ -5,7 +5,6 @@ import re
import shlex import shlex
import shutil import shutil
import glob import glob
import vdf
import sys import sys
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
@ -267,103 +266,61 @@ alt_command_list={
"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so" "Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so"
} }
STEAM_DATA_DIRS = ( def create_shortcut_new(games,rdhome):
"~/.steam/debian-installation", old_games=os.listdir(rdhome+"/sync/")
"~/.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: for game in games:
if not game[0]=="###": try:
new_shortcuts=new_shortcuts+[generate_shortcut(game, launch_config_name)] i=old_games.index(game[0])
old_games[i]=0
shortcuts = list(old_shortcuts) + list(new_shortcuts) except ValueError:
print(game[0]+" is a new game!")
updated_shortcuts = {
'shortcuts': { path=rdhome+"/sync/"+game[0]
str(index): elem for index, elem in enumerate(shortcuts) print("Go to path: "+path)
} if not os.path.exists(path):
} os.makedirs(path)
with open(shortcut_path, "wb") as shortcut_file: fl=open(path+"/goggame-0.info","w")
shortcut_file.write(vdf.binary_dumps(updated_shortcuts)) fl.write('{\n')
fl.write(' "buildId": "",\n')
def get_config_path(): fl.write(' "clientId": "",\n')
config_paths = search_recursive_in_steam_dirs("userdata/**/config/") fl.write(' "gameId": "",\n')
if not config_paths: fl.write(' "name": "'+game[0]+'",\n')
return None fl.write(' "playTasks": [\n')
return config_paths[0] fl.write(' {\n')
fl.write(' "category": "launcher",\n')
def get_shortcuts_vdf_path(): fl.write(' "isPrimary": true,\n')
config_path = get_config_path() fl.write(' "languages": [\n')
if not config_path: fl.write(' "en-US"\n')
return None fl.write(' ],\n')
return os.path.join(config_path, "shortcuts.vdf") fl.write(' "name": "'+game[0]+'",\n')
fl.write(' "path": "launch.sh",\n')
def search_recursive_in_steam_dirs(path_suffix): fl.write(' "type": "FileTask"\n')
"""Perform a recursive search based on glob and returns a fl.write(' }\n')
list of hits""" fl.write(' ]\n')
results = [] fl.write('}\n')
for candidate in STEAM_DATA_DIRS: fl.close()
glob_path = os.path.join(os.path.expanduser(candidate), path_suffix)
for path in glob.glob(glob_path): fl=open(path+"/launch.sh","w")
results.append(path) fl.write("#!/bin/bash\n\n")
return results fl.write('if test "$(whereis flatpak)" = "flatpak:"\n')
fl.write("then\n")
def generate_shortcut(game, launch_config_name): fl.write("flatpak-spawn --host "+game[1]+"\n")
return { fl.write("else\n")
'appid': generate_shortcut_id(game[0]), fl.write(game[1]+"\n")
'appname': f'{game[0]}', fl.write("fi\n")
'Exe': f'{game[1]}', fl.close()
'StartDir': f'{os.path.expanduser("~")}',
'icon': "", st=os.stat(path+"/launch.sh")
'LaunchOptions': "", os.chmod(path+"/launch.sh", st.st_mode | 0o0111)
'IsHidden': 0,
'AllowDesktopConfig': 1, print("Start removing")
'AllowOverlay': 1, print(old_games)
'OpenVR': 0, for game in old_games:
'Devkit': 0, if game:
'DevkitOverrideAppID': 0, shutil.rmtree(rdhome+"/sync/"+game)
'LastPlayTime': 0,
} os.system("boilr --no-ui")
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(): def addToSteam():
print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"))) print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg")))
@ -381,6 +338,12 @@ def addToSteam():
command_list_default["pico8"]=command_list_default["pico8"].replace("{GAMEDIR}",roms_folder+"/pico8") 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") alt_command_list["PICO-8 Splore (Standalone)"]=alt_command_list["PICO-8 Splore (Standalone)"].replace("{GAMEDIR}",roms_folder+"/pico8")
if not os.path.exists(rdhome+"/sync/"):
os.makedirs(rdhome+"/sync/")
if not os.path.exists(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/boilr/sync")):
os.symlink(rdhome+"/sync",os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/boilr/sync"))
for system in os.listdir(rdhome+"/gamelists/"): for system in os.listdir(rdhome+"/gamelists/"):
print("Start parsing system: {}".format(system)) print("Start parsing system: {}".format(system))
@ -428,8 +391,10 @@ def addToSteam():
else: else:
games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"]) games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"])
print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'") print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'")
create_shortcut(games) create_shortcut_new(games,rdhome)
if __name__=="__main__": if __name__=="__main__":
addToSteam() addToSteam()
print("Finish!")

View file

@ -1,467 +0,0 @@
"""
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

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

@ -68,25 +68,38 @@
<release version="0.8.0b" date="2023-12-14"> <release version="0.8.0b" date="2023-12-14">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.0b</url> <url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.0b</url>
<description> <description>
<p>CRITICAL:</p>
<ul>
<li>DEEP TEST: prepare_emulator function is now called prepare_component, eidted even in the cli and split it into the Configurator, so we need to test if the reset emulator works as supposed, if the cli and the Configurator is consistent.</li>
</ul>
<p>Changes:</p> <p>Changes:</p>
<ul> <ul>
<li>Added new system: SOLARUS</li> <li>Added new system: SOLARUS</li>
<li>Added new engine: GZDOOM</li> <li>Added new engine: GZDOOM</li>
<li>Added new emulator: Vita3K</li> <li>Added new emulator: Vita3K - Reset the emulator to grap the lates changes</li>
<li>Added new emulator: MAME (Standalone)</li>
<li>PPSSPP: added hotkeys</li>
<li>DOLPHIN: improved wiimote pointer emulation for controllers</li>
<li>Added Steam Sync (with BoilR)</li>
<li>Quit button after emulators reset should act as an actual full quit button</li> <li>Quit button after emulators reset should act as an actual full quit button</li>
<li>Created a quit_retrodeck function to ease the quit in the scripts.</li> <li>Created a quit_retrodeck function to ease the quit in the scripts.</li>
<li>Logs folder is now in retrodeck/logs (previously was .logs)</li> <li>Logs folder is now in retrodeck/logs (previously was .logs)</li>
<li>The post update script is initializing vita3k, mame and boilr when coming from a version ealrier that 0.8.0, this don't work in cokker and must be resetted manually (for boilr reset RetroDECK)</li>
<li>RPCS3 is now running via shortcut (.desktop file) by default - WARN THE USERS TO MIGRATE</li>
<li>Added controller config for PS4 and PS5</li>
<li>Controller config overhaul</li>
<li>Removed talk names in the manifest as they're not needed anymore as enabled by default</li>
</ul> </ul>
<p>Fixes:</p> <p>Fixes:</p>
<ul> <ul>
<li>Fixed DUCKSTATION memory card folder</li> <li>Fixed DUCKSTATION memory card folder</li>
<li>Fixed RPCS3 saves folder (wrong symlink)</li> <li>Fixed RPCS3 saves folder (wrong symlink) - WRN THE USERS TO BACKUP</li>
<li>Fixed issues that prevents Steam Sync to work correctly</li>
</ul> </ul>
<p>Issues:</p> <p>Issues:</p>
<ul> <ul>
<li>GZDOOM: the controller for player 2+ is not correctly configured</li> <li>GZDOOM: the controller for player 2+ is not correctly configured</li>
<li>quit_retrodeck function seems to not working correctly</li> <li>quit_retrodeck function seems to not working correctly</li>
<li>Added new emulator: MAME (Standalone) -- Removed cause of compiling issues</li>
<li>MAME (Standalone) paths should be fixed</li> <li>MAME (Standalone) paths should be fixed</li>
</ul> </ul>
<p>Missing:</p> <p>Missing:</p>
@ -98,6 +111,24 @@
</ul> </ul>
</description> </description>
</release> </release>
<release version="0.7.6b" date="2024-02-08">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.6b</url>
<description>
<p>Changes:</p>
<ul>
<li>Added new splash screens for Lunar New Year, St. Valentines and St. Patricks, be sure to check them out!</li>
<li>Updated PPSSPP</li>
<li>PPSSPP: implemented combo hotkeys, more details in the wiki</li>
<li>Reworked building pipelines andautomations</li>
<li>Removed talk names in the manifest as they're not needed anymore as enabled by default</li>
<li>Fixed a sync issue with the RetroDECK controller profiles</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.5b" date="2023-14-12"> <release version="0.7.5b" date="2023-14-12">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.5b</url> <url>https://github.com/XargonWan/RetroDECK/releases/tag/0.7.5b</url>
<description> <description>
@ -743,4 +774,4 @@
</description> </description>
</release> </release>
</releases> </releases>
</component> </component>

View file

@ -3,20 +3,12 @@ runtime: org.kde.Platform
runtime-version: "6.5" runtime-version: "6.5"
sdk: org.kde.Sdk sdk: org.kde.Sdk
sdk-extensions: sdk-extensions:
- org.freedesktop.Sdk.Extension.llvm16 # Needed for rpcs3 (llvm15) but llvm16 for CITRA - org.freedesktop.Sdk.Extension.llvm16 # Needed for rpcs3 (llvm15) but llvm16 for CITRA
- org.freedesktop.Sdk.Extension.rust-stable # Needed for BoilR
# base: io.qt.qtwebengine.BaseApp # Needed for Yuzu - Disabled as we're using AppImage for Yuzu # 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 # base-version: "6.5" # Needed for Yuzu - Disabled as we're using AppImage for Yuzu
command: retrodeck.sh command: retrodeck.sh
add-extensions:
org.ppsspp.PPSSPP.Locale:
directory: share/locale
bundle: true
no-autodownload: false
subdirectories: false
autodelete: true
locale-subset: true
finish-args: finish-args:
- --socket=fallback-x11 - --socket=fallback-x11
- --socket=wayland - --socket=wayland
@ -27,14 +19,15 @@ finish-args:
- --filesystem=home - --filesystem=home
- --filesystem=/run/media - --filesystem=/run/media
- --filesystem=/media - --filesystem=/media
- --filesystem=/mnt
- --filesystem=home/.var/app/com.valvesoftware.Steam - --filesystem=home/.var/app/com.valvesoftware.Steam
- --allow=multiarch - --allow=multiarch
- --talk-name=org.freedesktop.ScreenSaver - --talk-name=org.freedesktop.ScreenSaver
- --talk-name=org.freedesktop.PowerManagement.Inhibit - --talk-name=org.freedesktop.PowerManagement.Inhibit
- --talk-name=org.freedesktop.login1.Manager - --talk-name=org.freedesktop.login1.Manager
- --talk-name=org.freedesktop.portal.Flatpak.UpdateMonitor
- --filesystem=xdg-run/app/com.discordapp.Discord:create - --filesystem=xdg-run/app/com.discordapp.Discord:create
- --filesystem=xdg-config/gtk-3.0:ro - --filesystem=xdg-config/gtk-3.0:ro
- --env=QT_QPA_PLATFORM=wayland-egl;wayland;xcb
# Dolphin # Dolphin
- --allow=bluetooth - --allow=bluetooth
# PPSSPP # PPSSPP
@ -43,6 +36,10 @@ finish-args:
- --env=SDL_VIDEO_WAYLAND_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 # XEMU - Fixes issues with openSUSE systems, QEMU_AUDIO_DRV is defined as "pa" causing xemu to not launch
- --unset-env=QEMU_AUDIO_DRV - --unset-env=QEMU_AUDIO_DRV
# BoilR
- --filesystem=xdg-data/Steam:rw #Steam (flatpak)
- --filesystem=~/.steam:rw # Steam (Non-flatpak)
- --filesystem=~/.var/app/com.valvesoftware.Steam:rw # Steam (Flatpak)
cleanup: cleanup:
# ES-DE # ES-DE
@ -412,7 +409,7 @@ modules:
# When updating this module remember to check those: # When updating this module remember to check those:
# https://gitlab.com/es-de/emulationstation-de/-/blob/[VERSION]/resources/systems/unix/es_find_rules.xml # https://gitlab.com/es-de/emulationstation-de/-/blob/[VERSION]/resources/systems/unix/es_find_rules.xml
# But we don't include them 1:1 as RetroDECK got some specific configs in some cases # But we don't include them 1:1 as RetroDECK got some specific configs in some cases
- name: emulationstation-de - name: ES-DE
buildsystem: cmake-ninja buildsystem: cmake-ninja
config-opts: config-opts:
- -DRETRODECK=on - -DRETRODECK=on
@ -447,6 +444,24 @@ modules:
# External manifests start # External manifests start
- name: boilr
buildsystem: simple
build-options:
append-path: /usr/lib/sdk/rust-stable/bin
env:
# To pick up vendored deps
CARGO_HOME: /run/build/boilr/cargo
RUSTFLAGS: "-L /app/lib/"
build-commands:
- cargo --offline fetch --manifest-path Cargo.toml --verbose
- cargo --offline build --release --verbose --features flatpak
- install -Dm755 ./target/release/boilr -t /app/bin/
sources:
- type: git
url: https://github.com/PhilipK/BoilR
commit: b33d965f227fe971fd590cb022f608521b506ef3
- rd-submodules/boilr/cargo-lock.json
# RetroArch - START # RetroArch - START
# https://github.com/flathub/org.libretro.RetroArch # https://github.com/flathub/org.libretro.RetroArch
@ -655,8 +670,8 @@ modules:
sources: sources:
- type: git - type: git
url: &ppsspp-url https://github.com/hrydgard/ppsspp.git url: &ppsspp-url https://github.com/hrydgard/ppsspp.git
tag: v1.16.6 tag: v1.17
commit: ba0ce344937d17e177ec8656ab957f6b82facdda commit: 493122a2fcf9ff538e242fe2844f019b53afd483
x-checker-data: x-checker-data:
type: json type: json
url: https://api.github.com/repos/hrydgard/ppsspp/releases/latest url: https://api.github.com/repos/hrydgard/ppsspp/releases/latest
@ -664,22 +679,6 @@ modules:
tag-query: .tag_name tag-query: .tag_name
timestamp-query: .published_at timestamp-query: .published_at
- name: ppsspp-localization
buildsystem: simple
build-commands:
- |
for LANG_FILE in assets/lang/*.ini; do
LANG_FILE_NAME="$(basename "$LANG_FILE")"
LANG_PREFIX="${LANG_FILE_NAME:0:2}"
LANG_DEST="$FLATPAK_DEST/share/locale/$LANG_PREFIX/ppsspp/$LANG_FILE_NAME";
ln -fsr "$LANG_DEST" "$FLATPAK_DEST/share/ppsspp/$LANG_FILE"
install -Dm644 "$LANG_FILE" "$LANG_DEST"
done
sources:
- type: shell
commands:
- cp -a $FLATPAK_DEST/share/ppsspp/assets .
# PPSSPP - END # PPSSPP - END
# Yuzu - START # Yuzu - START
@ -695,8 +694,8 @@ modules:
- ln -s "${FLATPAK_DEST}/yuzu/usr/bin/yuzu" "${FLATPAK_DEST}/bin/yuzu" - ln -s "${FLATPAK_DEST}/yuzu/usr/bin/yuzu" "${FLATPAK_DEST}/bin/yuzu"
sources: sources:
- type: file - type: file
url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1648/yuzu-mainline-20231211-14c24e64e.AppImage url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1696/yuzu-mainline-20240128-1bd7a09e3.AppImage
sha256: d40f61c2abf8ddd0bb53098e2d9edf0c47e1cfd89e50cf5856b8cc27dbb25bd6 sha256: d8ca508daa5ba929efda956488f4a9cbc38df9fd672fcb55cb2184625971706d
# Yuzu - END # Yuzu - END
@ -1300,14 +1299,14 @@ modules:
# MAME - Start # MAME - Start
# - name: retrodeck-mame - name: retrodeck-mame
# buildsystem: simple buildsystem: simple
# build-commands: build-commands:
# - cp -rn files/* /app - cp -rn files/* /app
# sources: sources:
# - type: archive - type: archive
# url: url: RETRODECKMAMEURLPLACEHOLDER
# sha256: RETRODECKMAMEPLACEHOLDER sha256: RETRODECKMAMEPLACEHOLDER
# MAME - End # MAME - End

File diff suppressed because it is too large Load diff

@ -1 +1 @@
Subproject commit a96821769848a711db1ed0b71883f91383e2b4ab Subproject commit 51d4821a45ac5fe13b2baa69aaaea864ead407ce

@ -1 +1 @@
Subproject commit f9e0cd83f366025c15de7de46621963cab793ea9 Subproject commit ebcd7d1c9bbb2d4857555238727a81e89f6600f1

@ -1 +1 @@
Subproject commit 55a8e460c6343229597a13e973ba4855c27a1c4c Subproject commit 6ba63f383ad54e7ebe2b0cda64c15602cf9a9153

BIN
res/binding_icons/RD-0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
res/binding_icons/RD-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
res/binding_icons/RD-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

BIN
res/binding_icons/RD-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
res/binding_icons/RD-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
res/binding_icons/RD-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

BIN
res/binding_icons/RD-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

BIN
res/binding_icons/RD-7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

BIN
res/binding_icons/RD-8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
res/binding_icons/RD-9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
res/binding_icons/RD-F2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
res/binding_icons/RD-F3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
res/binding_icons/RD-F5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

BIN
res/binding_icons/RD-F6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

BIN
res/binding_icons/RD-F7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

BIN
res/binding_icons/RD-F8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
res/binding_icons/RD-F9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

BIN
res/binding_icons/RD-a.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

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