This commit is contained in:
XargonWan 2024-09-12 02:45:54 +00:00 committed by GitHub
commit 0e89d05416
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
944 changed files with 2151 additions and 17295 deletions

View file

@ -1,102 +0,0 @@
name: GoDot Configurator Build Debug
run-name: Build Godot Configurator(DEBUG) for RetroDECK
on:
workflow_dispatch:
inputs:
job_target:
description: 'Select the platform'
required: true
default: 'linux'
type: choice
options:
- linux
- windows
- mac
- all
env:
GODOT_VERSION: 4.3
GODOT_PROJECT_LOCATION: tools/configurator/project.godot
EXPORT_FOLDER_LINUX: bin/Linux
EXPORT_FOLDER_WINDOWS: bin/Windows
EXPORT_FOLDER_MAC: bin/macOS
APPLICATION_NAME: godot_configurator
jobs:
linux-build:
runs-on: ubuntu-latest
container:
image: archlinux:latest
steps:
- name: Set up variable
run: |
echo "DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
echo "MAIN_FOLDER=$(pwd)" >> $GITHUB_ENV
- name: Installing dependencies
run: pacman -Syu --noconfirm git bash yasm python python-pip scons gcc diffutils make wget unzip tar mingw-w64
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Prepare Godot
run: |
wget -q -O godot_linux.zip https://github.com/godotengine/godot-builds/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_linux.x86_64.zip
unzip godot_linux.zip
wget -q -O godot_export_templates.tpz https://github.com/godotengine/godot-builds/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_export_templates.tpz
mkdir -p ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
unzip godot_export_templates.tpz -d ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
mv ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable/templates/* ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable/
sed -i 's/config\/version=\"[^"]\*"/config\/version=\"${{ env.DATE }}-debug\"/' ${{ env.GODOT_PROJECT_LOCATION }}
# DEBUG BUILDS
# LINUX
- name: Building debug Linux
if: ${{ github.event.inputs.job_target == 'linux' || github.event.inputs.job_target == 'all' }}
run: |
mkdir -p ${{ env.EXPORT_FOLDER_LINUX }}
./Godot_v${GODOT_VERSION}-stable_linux.x86_64 --import ${{ env.GODOT_PROJECT_LOCATION }} --quiet --headless --export-debug "Linux/X11 64-bit" ${{ env.MAIN_FOLDER }}/${{ env.EXPORT_FOLDER_LINUX }}/${{ env.APPLICATION_NAME}}.x86_64
chmod +x ${{ env.EXPORT_FOLDER_LINUX }}/${{ env.APPLICATION_NAME }}.sh
chmod +x ${{ env.EXPORT_FOLDER_LINUX }}/${{ env.APPLICATION_NAME }}.x86_64
# TAR to keep permissions set above
- name: Tar File
if: ${{ github.event.inputs.job_target == 'linux' || github.event.inputs.job_target == 'all' }}
run: tar cvf ${{ env.APPLICATION_NAME}}_linux_debug_${{ env.DATE}}.tar ${{ env.EXPORT_FOLDER_LINUX}}
- name: Uploading GDExtension artifact debug
if: ${{ github.event.inputs.job_target == 'linux' || github.event.inputs.job_target == 'all' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.APPLICATION_NAME }}_linux_debug_${{ env.DATE }}.tar
path: ${{ env.APPLICATION_NAME }}_linux_debug_${{ env.DATE }}.tar
# WINDOWS
- name: Building debug Windows
if: ${{ github.event.inputs.job_target == 'windows' || github.event.inputs.job_target == 'all' }}
run: |
mkdir -p ${{ env.EXPORT_FOLDER_WINDOWS }}
./Godot_v${GODOT_VERSION}-stable_linux.x86_64 --import ${{ env.GODOT_PROJECT_LOCATION }} --quiet --headless --export-debug "windows" ${{ env.MAIN_FOLDER }}/${{ env.EXPORT_FOLDER_WINDOWS }}/${{ env.APPLICATION_NAME}}.exe
- name: Uploading GDExtension artifact debug
if: ${{ github.event.inputs.job_target == 'windows' || github.event.inputs.job_target == 'all' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.APPLICATION_NAME }}_windows_debug_${{ env.DATE }}
path: ${{ env.EXPORT_FOLDER_WINDOWS }}/
#MAC
- name: Building debug macOS
if: ${{ github.event.inputs.job_target == 'mac' || github.event.inputs.job_target == 'all' }}
run: |
mkdir -p ${{ env.EXPORT_FOLDER_MAC }}
./Godot_v${GODOT_VERSION}-stable_linux.x86_64 --import ${{ env.GODOT_PROJECT_LOCATION }} --quiet --headless --export-debug "macOS" ${{ env.MAIN_FOLDER }}/${{ env.EXPORT_FOLDER_MAC}}/${{ env.APPLICATION_NAME}}.app
- name: Uploading GDExtension artifact debug
if: ${{ github.event.inputs.job_target == 'mac' || github.event.inputs.job_target == 'all' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.APPLICATION_NAME }}_mac_debug_${{ env.DATE }}
path: ${{ env.EXPORT_FOLDER_MAC }}/

View file

@ -85,11 +85,6 @@ jobs:
# Use GITHUB_HEAD_REF to get the source branch
source_branch="${GITHUB_HEAD_REF}"
# Replace '/' with '-' in the branch name
source_branch=${source_branch//\//-}
# Use GITHUB_HEAD_REF to get the source branch
source_branch="${GITHUB_HEAD_REF}"
# Replace '/' with '-' in the branch name
source_branch=${source_branch//\//-}
echo "[DEBUG] source branch is: $source_branch"
@ -98,7 +93,6 @@ jobs:
echo "TAG=PR-$source_branch-${{ env.buildid }}" >> $GITHUB_ENV
echo "MAKE_LATEST=false" >> $GITHUB_ENV # Not marked as the latest cooker version if it's a feature branch
else
# Generate the tag for non-pull request branches
# Generate the tag for non-pull request branches
TAG="$MANIFEST_VERSION-${{ env.buildid }}"
echo "TAG=$TAG" >> $GITHUB_ENV

View file

@ -24,3 +24,7 @@ hash^RETRODECKMELONDSLATEST^https://github.com/RetroDECK/net.kuribo64.melonDS/re
hash^RETRODECKSOLARUSLATEST^https://github.com/RetroDECK/org.solarus_games.solarus.Launcher/releases/latest/download/RetroDECK-solarus-Artifact.tar.gz
hash^RETRODECKGZDOOMLATEST^https://github.com/RetroDECK/org.zdoom.GZDoom/releases/latest/download/RetroDECK-gzdoom-Artifact.tar.gz
hash^RETRODECKMAMELATEST^https://github.com/RetroDECK/MAME/releases/latest/download/RetroDECK-MAME-Artifact.tar.gz
hash^RETRODECKSHADPS4LATESTSTABLE^https://github.com/shadps4-emu/shadPS4/releases/latest/download/shadps4-linux-qt.zip
#This will replace RETRODECKSHADPS4LATESTURL with the URL of the latest artifact and RETRODECKSHADPS4LATESTSHA with its SHA256 hash.
#latestghaartifact^RETRODECKSHADPS4LATESTURL^RETRODECKSHADPS4LATESTSHA^https://github.com/shadps4-emu/shadPS4/actions/workflows/linux-qt.yml^shadps4-linux-qt

View file

@ -188,8 +188,44 @@ handle_thisrepo() {
/bin/sed -i 's^'"$placeholder"'^'"$current_repo_url"'^g' "$rd_manifest"
}
# New function to handle the latest artifact from GitHub Actions
handle_latestghaartifact() {
local placeholder_url="$1"
local placeholder_hash="$2"
local workflow_url="$3"
local artifact_name="$4"
echo "Fetching workflow runs from: $workflow_url"
workflow_runs_url=$(echo "$workflow_url" | sed 's/github.com/api.github.com\/repos/' | sed 's/actions\/workflows\/[^\/]*$/actions\/runs/')
local runs_data=$(curl -s "$workflow_runs_url")
local latest_run_url=$(echo "$runs_data" | jq -r ".workflow_runs[0].artifacts_url")
if [[ -z "$latest_run_url" ]]; then
echo "Error: No workflow runs found"
exit 1
fi
echo "Fetching artifacts from the latest run: $latest_run_url"
local artifacts_data=$(curl -s "$latest_run_url")
local artifact_url=$(echo "$artifacts_data" | jq -r ".artifacts[] | select(.name == \"$artifact_name\").archive_download_url")
if [[ -z "$artifact_url" ]]; then
echo "Error: No artifact found with name $artifact_name"
exit 1
fi
echo "Downloading the artifact to calculate the hash..."
local artifact_hash=$(curl -sL "$artifact_url" | sha256sum | cut -d ' ' -f1)
echo "Replacing placeholder $placeholder_url with artifact URL $artifact_url"
echo "Replacing placeholder $placeholder_hash with artifact hash $artifact_hash"
/bin/sed -i 's^'"$placeholder_url"'^'"$artifact_url"'^g' "$rd_manifest"
/bin/sed -i 's^'"$placeholder_hash"'^'"$artifact_hash"'^g' "$rd_manifest"
}
# Process the task list
while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
while IFS="^" read -r action placeholder url branch artifact_name || [[ -n "$action" ]]; do
if [[ ! "$action" == "#"* ]] && [[ -n "$action" ]]; then
case "$action" in
"branch" ) handle_branch "$placeholder" ;;
@ -203,6 +239,7 @@ while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
"custom_command" ) handle_custom_command "$url" ;;
"url" ) handle_url "$placeholder" "$url" ;;
"THISREPO" ) handle_thisrepo "$placeholder" ;;
"latestghaartifact" ) handle_latestghaartifact "$placeholder" "$branch" "$url" "$artifact_name" ;;
esac
fi
done < "$automation_task_list"

View file

@ -629,6 +629,9 @@
"ps3": {
"name": "Sony PlayStation 3"
},
"ps4": {
"name": "Sony PlayStation 4"
},
"psp": {
"name": "Sony PlayStation Portable"
},
@ -960,8 +963,7 @@
"system": [
"arcade"
],
"launch": "mame",
"launch-args": "-inipath /var/config/mame/ini -rompath $(dirname \"$game\") $game"
"launch": "mame"
},
"citra": {
"description": "Citra Nintendo 3DS Emulator (via Ponzu)",
@ -997,7 +999,6 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/pcsx2/pcsx2-guide/",
"system": "ps2",
"launch": "pcsx2-qt",
"launch-args": "-batch $game",
"properties": [
{
"ask_to_exit": true,
@ -1010,7 +1011,6 @@
"description": "PlayStation Emulator",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/duckstation/duckstation-guide/",
"launch": "duckstation-qt",
"launch-args": "-batch $game",
"system": "psx",
"properties": [
{
@ -1037,8 +1037,7 @@
"description": "Vita3K PSVita Emulator",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/vita3k/vita3k-guide/",
"system": "psvita",
"launch": "Vita3K",
"launch-args": "-r $game.psvita"
"launch": "Vita3K"
},
"rpcs3": {
"name": "RPCS3",
@ -1066,16 +1065,20 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
"launch": "Yuzu",
"system": "switch",
"launch-args": "-f -g $game",
"ponzu": true,
"abxy_button": true
},
"shadps4": {
"description": "PS4 Emulator for Linux",
"name": "shadps4",
"system": "ps4",
"launch": "shadps4-qt"
},
"dolphin": {
"name": "Dolphin",
"description": "Dolphin Wii and GameCube Emulator",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
"launch": "dolphin-emu-wrapper",
"launch-args": "-e $game",
"system": [
"gc",
"wii"
@ -1095,7 +1098,6 @@
"description": "A fork of Dolphiin to enhance Metroid Prime experience",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
"launch": "primehack-wrapper",
"launch-args": "-e $game",
"system": [
"wii"
],
@ -1112,7 +1114,6 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/cemu/cemu-guide/",
"system": "wiiu",
"launch": "Cemu-wrapper",
"launch-args": "-g $game",
"properties": [
{
"abxy_button": true,
@ -1125,14 +1126,18 @@
"name": "xemu",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/xemu/xemu-guide/",
"system": "xbox",
"launch": "xemu",
"launch-args": "-dvd_path $game"
"launch": "xemu"
},
"es-de": {
"description": "ES-DE Emulation Frontend",
"name": "ES-DE",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_es_de/esde-guide/.",
"launch": "es-de"
},
"steam-rom-manager": {
"description": "Steam ROM Manager (used to sync RetroDECK favorites with Steam)",
"name": "Steam ROM Manager",
"launch": "steam-rom-manager"
}
}
}

View file

@ -30,6 +30,7 @@ default_user=
developer_options=false
kiroi_ponzu=false
akai_ponzu=false
steam_sync=false
[cheevos]
duckstation=false

View file

@ -0,0 +1,111 @@
[
{
"parserType": "Glob",
"configTitle": "RetroDECK",
"steamDirectory": "${steamdirglobal}",
"steamCategory": "RetroDECK",
"romDirectory": "${romsdirglobal}",
"executableArgs": "",
"executableModifier": "\"${exePath}\"",
"startInDirectory": "",
"titleModifier": "${fuzzyTitle}",
"imageProviders": [
"SteamGridDB"
],
"onlineImageQueries": "${${fuzzyTitle}}",
"imagePool": "${fuzzyTitle}",
"userAccounts": {
"specifiedAccounts": ""
},
"executable": {
"path": "",
"shortcutPassthrough": false,
"appendArgsToExecutable": true
},
"parserInputs": {
"glob": "${title}.sh"
},
"titleFromVariable": {
"limitToGroups": "",
"caseInsensitiveVariables": false,
"skipFileIfVariableWasNotFound": false,
"tryToMatchTitle": false
},
"fuzzyMatch": {
"replaceDiacritics": true,
"removeCharacters": true,
"removeBrackets": true
},
"controllers": {
"ps4": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_ps4.vdf",
"profileType": "template"
},
"ps5": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_ps5.vdf",
"profileType": "template"
},
"xbox360": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_xbox360_simple.vdf",
"profileType": "template"
},
"xboxone": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_xboxone_simple.vdf",
"profileType": "template"
},
"switch_joycon_left": {
"title": "Controller",
"mappingId": "controller_switch_joycon_left_gamepad_joystick.vdf",
"profileType": "template"
},
"switch_joycon_right": {
"title": "Controller",
"mappingId": "controller_switch_joycon_right_gamepad_joystick.vdf",
"profileType": "template"
},
"switch_pro": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_switchpro.vdf",
"profileType": "template"
},
"neptune": {
"title": "RetroDECK Controller",
"mappingId": "RetroDECK_controller_steamdeck_neptune_full.vdf",
"profileType": "template"
}
},
"imageProviderAPIs": {
"SteamGridDB": {
"nsfw": false,
"humor": false,
"styles": [],
"stylesHero": [],
"stylesLogo": [],
"stylesIcon": [],
"imageMotionTypes": [
"static"
]
}
},
"defaultImage": {
"tall": null,
"long": null,
"hero": null,
"logo": null,
"icon": null
},
"localImages": {
"tall": null,
"long": null,
"hero": null,
"logo": null,
"icon": null
},
"parserId": "1725539138664815",
"version": 15
}
]

View file

@ -0,0 +1,30 @@
{
"fuzzyMatcher": {
"verbose": false,
"filterProviders": true
},
"environmentVariables": {
"steamDirectory": "",
"userAccounts": "${steamlogin}",
"romsDirectory": "",
"retroarchPath": "",
"raCoresDirectory": "",
"localImagesDirectory": ""
},
"previewSettings": {
"retrieveCurrentSteamImages": true,
"deleteDisabledShortcuts": false,
"imageZoomPercentage": 30,
"preload": false
},
"enabledProviders": [
"SteamGridDB"
],
"batchDownloadSize": 50,
"language": "en-US",
"theme": "Deck",
"offlineMode": false,
"navigationWidth": 0,
"clearLogOnTest": false,
"version": 6
}

View file

@ -5,31 +5,12 @@
# This script is used to inject framework and config files inside a RetroDECK cooker installation
# To apply the injected config you have to reset the targeted component from the Configurator
# Please know what you're doing, if you need to undo this you need to completely uninstall and reinstall RetroDECK flatpak
# Please note that this may create a dirty situation where older files are still in place as the action is add and overwrite
# Please not that this may create a dirty situation where older files are still in place as the action is add and overwrite
flatpak_user_installation="$HOME/.local/share/flatpak/app/net.retrodeck.retrodeck/current/active/files"
flatpak_system_installation="/var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files"
force_user=false
force_system=false
# Parse arguments
while [[ "$#" -gt 0 ]]; do
case $1 in
--force-user) force_user=true ;;
--force-system) force_system=true ;;
*) echo "Unknown parameter: $1"; exit 1 ;;
esac
shift
done
# Determine installation path
if [ "$force_user" = true ]; then
echo "Forcing user mode installation."
app="$flatpak_user_installation"
elif [ "$force_system" = true ]; then
echo "Forcing system mode installation."
app="$flatpak_system_installation"
elif [ -d "$flatpak_user_installation" ]; then
if [ -d "$flatpak_user_installation" ]; then
echo "RetroDECK is installed in user mode, proceeding."
app="$flatpak_user_installation"
elif [ -d "$flatpak_system_installation" ]; then
@ -40,7 +21,6 @@ else
exit 1
fi
# Copying files to the installation
sudo cp -vfr "res/binding_icons" "$app/retrodeck/binding_icons"
sudo cp -vfr "config/"** "$app/retrodeck/config/"
sudo cp -vfr "tools" "$app"

View file

@ -132,9 +132,8 @@ elif [[ "$new_version_major_rev" -eq "$current_version_major_rev" ]]; then
fi
fi
# Perform post_update commands for current version if it is a cooker or PR
if grep -qF "cooker" <<< "$hard_version" || grep -qF "PR" <<< "$hard_version"; then
# If newly-installed version is a "cooker" or "PR" build, always perform post_update commands for current version
# Perform post_update commands for current version if it is a cooker
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build, always perform post_update commands for current version
if [[ "$(echo $hard_version | cut -d'-' -f2)" == "$new_version" ]]; then
is_newer_version="true"
fi

View file

@ -18,40 +18,43 @@ source /app/libexec/post_update.sh
source /app/libexec/prepare_component.sh
source /app/libexec/presets.sh
source /app/libexec/configurator_functions.sh
source /app/libexec/run_game.sh
# Static variables
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
rd_logs_folder="/var/config/retrodeck/logs" # Static location to write all RetroDECK-related logs
config="/app/retrodeck/config" # folder with all the default emulator configs
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
rd_logs_folder="/var/config/retrodeck/logs" # Static location to write all RetroDECK-related logs
config="/app/retrodeck/config" # folder with all the default emulator configs
rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
bios_checklist="$config/retrodeck/reference_lists/bios_checklist.cfg" # A config file listing BIOS file information that can be verified
input_validation="$config/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs
finit_options_list="$config/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit
splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens
current_splash_file="/var/config/ES-DE/resources/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="/var/config/ES-DE/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen
splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens
current_splash_file="/var/config/ES-DE/resources/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="/var/config/ES-DE/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen
# TODO: instead of this maybe we can iterate the features.json
multi_user_emulator_config_dirs="$config/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg" # A list of emulator config folders that can be safely linked/unlinked entirely in multi-user mode
rd_es_themes="/app/share/es-de/themes" # The directory where themes packaged with RetroDECK are stored
lockfile="/var/config/retrodeck/.lock" # Where the lockfile is located
default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path # A static location for RetroDECK logs to be written
hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem)
rd_repo="https://github.com/RetroDECK/RetroDECK" # The URL of the main RetroDECK GitHub repo
es_themes_list="https://gitlab.com/es-de/themes/themes-list/-/raw/master/themes.json" # The URL of the ES-DE 2.0 themes list
remote_network_target_1="https://flathub.org" # The URL of a common internet target for testing network access
remote_network_target_2="$rd_repo" # The URL of a common internet target for testing network access
remote_network_target_3="https://one.one.one.one" # The URL of a common internet target for testing network access
rd_es_themes="/app/share/es-de/themes" # The directory where themes packaged with RetroDECK are stored
lockfile="/var/config/retrodeck/.lock" # Where the lockfile is located
default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path
hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem)
rd_repo="https://github.com/RetroDECK/RetroDECK" # The URL of the main RetroDECK GitHub repo
es_themes_list="https://gitlab.com/es-de/themes/themes-list/-/raw/master/themes.json" # The URL of the ES-DE 2.0 themes list
remote_network_target_1="https://flathub.org" # The URL of a common internet target for testing network access
remote_network_target_2="$rd_repo" # The URL of a common internet target for testing network access
remote_network_target_3="https://one.one.one.one" # The URL of a common internet target for testing network access
helper_files_folder="$config/retrodeck/helper_files" # The parent folder of RetroDECK documentation files for deployment
rd_appdata="/app/share/appdata/net.retrodeck.retrodeck.appdata.xml" # The shipped appdata XML file for this version
rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2024_0227_3694eb3fb8d9915c112e6ab41a60c69f/PS3UPDAT.PUP"
RA_API_URL="https://retroachievements.org/dorequest.php" # API URL for RetroAchievements.org
rd_appdata="/app/share/appdata/net.retrodeck.retrodeck.appdata.xml" # The shipped appdata XML file for this version
rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2024_0227_3694eb3fb8d9915c112e6ab41a60c69f/PS3UPDAT.PUP" # RPCS3 Firmware download location
RA_API_URL="https://retroachievements.org/dorequest.php" # API URL for RetroAchievements.org
presets_dir="$config/retrodeck/presets" # Repository for all system preset config files
git_organization_name="RetroDECK" # The name of the organization in our git repository such as GitHub
cooker_repository_name="Cooker" # The name of the cooker repository under RetroDECK organization
main_repository_name="RetroDECK" # The name of the main repository under RetroDECK organization
features="$config/retrodeck/reference_lists/features.json" # A file where all the RetroDECK and component capabilities are kept for querying
git_organization_name="RetroDECK" # The name of the organization in our git repository such as GitHub
cooker_repository_name="Cooker" # The name of the cooker repository under RetroDECK organization
main_repository_name="RetroDECK" # The name of the main repository under RetroDECK organization
features="$config/retrodeck/reference_lists/features.json" # A file where all the RetroDECK and component capabilities are kept for querying
es_systems="/app/share/es-de/resources/systems/linux/es_systems.xml" # ES-DE supported system list
es_find_rules="/app/share/es-de/resources/systems/linux/es_find_rules.xml" # ES-DE emulator find rules
# Godot data transfer temp files
@ -81,6 +84,7 @@ es_source_logs="/var/config/ES-DE/logs"
raconf="/var/config/retroarch/retroarch.cfg"
ra_core_conf="/var/config/retroarch/retroarch-core-options.cfg"
ra_scummvm_conf="/var/config/retroarch/system/scummvm.ini"
ra_cores_path="/var/config/retroarch/cores"
# CEMU config files

View file

@ -880,8 +880,25 @@ release_selector() {
quit_retrodeck() {
log i "Quitting ES-DE"
pkill -f "es-de"
# if steam sync is on do the magic
if [[ $steam_sync == "true" ]]; then
(
source /app/libexec/steam_sync.sh
add_to_steam "$(ls "$rdhome/ES-DE/gamelists/")"
) |
zenity --progress \
--title="Syncing with Steam" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text="Syncing favorite games with Steam, please wait." \
--percentage=25 \
--pulsate \
--auto-close \
--auto-kill
fi
log i "Shutting down RetroDECK's framework"
pkill -f "retrodeck"
log i "See you next time"
}
@ -891,125 +908,3 @@ start_retrodeck() {
log i "Starting RetroDECK v$version"
es-de
}
run_game() {
# Initialize variables
emulator=""
system=""
# Parse options
while getopts ":e:s:" opt; do
case ${opt} in
e )
emulator=$OPTARG
;;
s )
system=$OPTARG
;;
\? )
echo "Usage: $0 --run [-e emulator] [-s system] game"
exit 1
;;
esac
done
shift $((OPTIND -1))
# Check for game argument
if [[ -z "$1" ]]; then
echo "Error: Game file is required."
echo "Usage: $0 --run [-e emulator] [-s system] game"
exit 1
fi
game=$1
# If no system is provided, extract it from the game path
if [[ -z "$system" ]]; then
system=$(echo "$game" | grep -oP '(?<=roms/)[^/]+')
fi
log d "Emulator: $emulator"
log d "System: $system"
log d "Game: $game"
# Query the features JSON for emulators that support the system
local emulators=$(jq -r --arg system "$system" '
.emulator | to_entries[] |
select(
(.value.system == $system) or
(.value.system[]? == $system)
) | .key' "$features")
# Check if the system is handled by RetroArch cores
local retroarch_cores=$(jq -r --arg system "$system" '
.emulator.retroarch.cores | to_entries[] |
select(
.value.system == $system or
(.value.system[]? == $system)
) | .key' "$features")
# if the emulator is given and it's a retroarch core just execute it
if [[ "$emulator" == *"_libretro" ]]; then
local core_path="/var/config/retroarch/cores/$emulator.so"
log d "Running RetroArch core: $core_path"
log d "Command: retroarch -L $core_path \"$game\""
eval "retroarch -L $core_path \"$game\""
return 1
fi
# If the system is handled by RetroArch cores, add them to the list of emulators
if [[ -n "$retroarch_cores" ]]; then
emulators=$(echo -e "$emulators\n$retroarch_cores")
fi
local pretty_system=$(jq -r --arg system "$system" '.system[$system].name' "$features")
# Check if multiple emulators are found and prompt the user to select one with zenity
if [[ $(echo "$emulators" | wc -l) -gt 1 ]]; then
emulator=$(echo "$emulators" | zenity --list --title="Select Emulator" --text="Multiple emulators found for $pretty_system. Select one to run." --column="Emulator")
else
emulator="$emulators"
fi
# If no emulator was selected, exit
if [[ -z "$emulator" ]]; then
log e "No emulator selected. Exiting."
return 1
fi
log d "Run game: selected emulator $emulator"
# Handle RetroArch core separately
if [[ "$emulator" == *"_libretro" ]]; then
local core_path="/var/config/retroarch/cores/$emulator.so"
log d "Running RetroArch core: $core_path"
log d "Command: retroarch -L $core_path \"$game\""
eval "retroarch -L $core_path \"$game\""
else
# Check if launch-override exists
local launch_override=$(jq -r ".emulator.$emulator.\"launch-override\"" "$features")
if [[ "$launch_override" != "null" ]]; then
# Use launch-override
launch_override=${launch_override//\$game/\"$game\"}
log d "Using launch-override: $launch_override"
eval "$launch_override"
else
# Use standard launch and launch-args
local launch_command=$(jq -r ".emulator.$emulator.launch" "$features")
local launch_args=$(jq -r ".emulator.$emulator.\"launch-args\"" "$features")
log d "launch args: $launch_args"
# Only add launch_args if they are not null
if [[ "$launch_args" != "null" ]]; then
# Replace $game in launch_args with the actual game path, quoting it to handle spaces
launch_args=${launch_args//\$game/\"$game\"}
log d "Command: \"$launch_command $launch_args\""
eval "$launch_command $launch_args"
else
log d "Command: \"$launch_command\""
eval "$launch_command \"$game\""
fi
fi
fi
}

View file

@ -433,7 +433,9 @@ post_update() {
# Placeholder for version 0.9.0b
set_setting_value "$raconf" "libretro_info_path" "/var/config/retroarch/cores" "retroarch"
prepare_component "reset" "shadps4"
prepare_component "reset" "ruffle"
prepare_component "reset" "steam-rom-manager"
update_rd_conf
# TODO: check this

View file

@ -80,6 +80,22 @@ prepare_component() {
fi
fi
if [[ "$component" =~ ^(steam-rom-manager|all)$ ]]; then
component_found="true"
log i "-----------------------------"
log i "Prepearing Steam ROM Manager"
log i "-----------------------------"
local srm_userdata="/var/config/steam-rom-manager/userData"
create_dir -d "/var/config/steam-rom-manager"
create_dir -d "$srm_userdata"
cp -fv "$config/steam-rom-manager/"*.json $srm_userdata
log i "Updating steamDirectory and romDirectory lines in $srm_userdata/userSettings.json"
jq '.environmentVariables.steamDirectory = "'$HOME'/.steam/steam"' "$srm_userdata/userSettings.json" > "$srm_userdata/tmp.json" && mv -f "$srm_userdata/tmp.json" "$srm_userdata/userSettings.json"
jq '.environmentVariables.romsDirectory = "'$rdhome'/.sync"' "$srm_userdata/userSettings.json" > "$srm_userdata/tmp.json" && mv -f "$srm_userdata/tmp.json" "$srm_userdata/userSettings.json"
fi
if [[ "$component" =~ ^(retroarch|all)$ ]]; then
component_found="true"
log i "--------------------------------"
@ -857,6 +873,16 @@ prepare_component() {
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
if [[ "$component" =~ ^(gzdoom|all)$ ]]; then
component_found="true"
# This is just a placeholder script to test the emulator's flow
log i "----------------------"
log i "Prepearing SHADPS4"
log i "----------------------"
# TODO: plceholder
fi
if [[ "$component" =~ ^(ruffle|all)$ ]]; then
component_found="true"
log i "----------------------"
@ -872,7 +898,16 @@ prepare_component() {
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/flash" "/var/data/ruffle/SharedObjects/localhost/$roms_folder/flash"
fi
fi
if [[ "$component" =~ ^(gzdoom|all)$ ]]; then
component_found="true"
# This is just a placeholder script to test the emulator's flow
log i "----------------------"
log i "Prepearing SHADPS4"
log i "----------------------"
# TODO: plceholder
fi
if [[ $component_found == "false" ]]; then

342
functions/run_game.sh Executable file
View file

@ -0,0 +1,342 @@
#!/bin/bash
run_game() {
# Initialize variables
emulator=""
system=""
manual_mode=false
# Parse options for system, emulator, and manual mode
while getopts ":e:s:m" opt; do
case ${opt} in
e)
emulator=$OPTARG # Emulator provided via -e
;;
s)
system=$OPTARG # System provided via -s
;;
m)
manual_mode=true # Manual mode enabled via -m
log i "Run game: manual mode enabled"
;;
\?)
echo "Usage: $0 --run [-e emulator] [-s system] [-m manual] game"
exit 1
;;
esac
done
shift $((OPTIND - 1))
# Check for game argument
if [[ -z "$1" ]]; then
log e "Game path is required."
log i "Usage: $0 start [-e emulator] [-s system] [-m manual] game"
exit 1
fi
game=$1
game_basename="./$(basename "$game")"
# Step 1: System Recognition
if [[ -z "$system" ]]; then
# Automatically detect system from game path
system=$(echo "$game" | grep -oP '(?<=roms/)[^/]+')
if [[ -z "$system" ]]; then
log e "Failed to detect system from game path."
exit 1
fi
fi
log d "System recognized: $system"
# Step 2: Emulator Definition
if [[ -n "$emulator" ]]; then
log d "Emulator provided via command-line: $emulator"
elif [[ "$manual_mode" = true ]]; then
log d "Manual mode: showing Zenity emulator selection"
emulator=$(show_zenity_emulator_list "$system")
if [[ -z "$emulator" ]]; then
log e "No emulator selected in manual mode."
exit 1
fi
else
log d "Automatically searching for an emulator for system: $system"
# Check for <altemulator> in the game block in gamelist.xml
altemulator=$(xmllint --recover --xpath "string(//game[path='$game_basename']/altemulator)" "$rdhome/ES-DE/gamelists/$system/gamelist.xml" 2>/dev/null)
if [[ -n "$altemulator" ]]; then
log d "Found <altemulator> for game: $altemulator"
emulator=$(xmllint --recover --xpath "string(//command[@label=\"$altemulator\"])" "$es_systems" 2>/dev/null)
else # if no altemulator is found we search if a global one is set
log d "No altemulator found in the game entry, searching for alternativeEmulator to check if a global emulator is set for the system $system"
alternative_emulator=$(xmllint --recover --xpath 'string(//alternativeEmulator/label)' "$rdhome/ES-DE/gamelists/$system/gamelist.xml" 2>/dev/null)
log d "Alternate emulator found in <alternativeEmulator> header: $alternative_emulator"
emulator=$(xmllint --recover --xpath "string(//system[platform='$system']/command[@label=\"$alternative_emulator\"])" "$es_systems" 2>/dev/null)
fi
# Fallback to first available emulator in es_systems.xml if no <altemulator> found
if [[ -z "$emulator" ]]; then
# TODO: the non-alt emulator is broken
log d "No alternate emulator found, using first available emulator in es_systems.xml"
emulator_command=$(xmllint --recover --xpath "string(//system[name='$system']/command[1])" "$es_systems" 2>/dev/null)
emulator=$(find_emulator_name_from_label "$emulator_command")
fi
if [[ -z "$emulator" ]]; then
log e "No valid emulator found for system: $system"
exit 1
fi
fi
# Step 3: Construct and Run the Command
log d "Preparing to launch with emulator: $emulator"
# Now pass the final constructed command to substitute_placeholders function
final_command=$(substitute_placeholders "$emulator")
# Log and execute the command
log i "Launching game with command: $final_command"
eval "$final_command"
}
# Assume this function handles showing the Zenity list of emulators for manual mode
show_zenity_emulator_list() {
local system="$1"
# Example logic to retrieve and show Zenity list of emulators for the system
# This would extract available emulators for the system from es_systems.xml and show a Zenity dialog
emulators=$(xmllint --xpath "//system[name='$system']/command/@label" "$es_systems" | sed 's/ label=/\n/g' | sed 's/\"//g' | grep -o '[^ ]*')
zenity --list --title="Select Emulator" --column="Emulators" $emulators
}
# Function to extract commands from es_systems.xml and present them in Zenity
find_system_commands() {
local system_name=$system
# Use xmllint to extract the system commands from the XML
system_section=$(xmllint --xpath "//system[name='$system_name']" "$es_systems" 2>/dev/null)
if [ -z "$system_section" ]; then
log e "System not found: $system_name"
exit 1
fi
# Extract commands and labels
commands=$(echo "$system_section" | xmllint --xpath "//command" - 2>/dev/null)
# Prepare Zenity command list
command_list=()
while IFS= read -r line; do
label=$(echo "$line" | sed -n 's/.*label="\([^"]*\)".*/\1/p')
command=$(echo "$line" | sed -n 's/.*<command[^>]*>\(.*\)<\/command>.*/\1/p')
# Substitute placeholders in the command
command=$(substitute_placeholders "$command")
# Add label and command to Zenity list (label first, command second)
command_list+=("$label" "$command")
done <<< "$commands"
# Check if there's only one command
if [ ${#command_list[@]} -eq 2 ]; then
log d "Only one command found for $system_name, running it directly: ${command_list[1]}"
selected_command="${command_list[1]}"
else
# Show the list with Zenity and return the **command** (second column) selected
selected_command=$(zenity --list \
--title="Select an emulator for $system_name" \
--column="Emulator" --column="Hidden Command" "${command_list[@]}" \
--width=800 --height=400 --print-column=2 --hide-column=2)
fi
echo "$selected_command"
}
# Function to substitute placeholders in the command
substitute_placeholders() {
local cmd="$1"
log d "Substitute placeholder: working on $cmd"
local rom_path="$game"
local rom_dir=$(dirname "$rom_path")
# Strip all file extensions from the base name
local base_name=$(basename "$rom_path")
base_name="${base_name%%.*}"
local file_name=$(basename "$rom_path")
local rom_raw="$rom_path"
local rom_dir_raw="$rom_dir"
local es_path=""
local emulator_path=""
# Manually replace %EMULATOR_*% placeholders
while [[ "$cmd" =~ (%EMULATOR_[A-Z0-9_]+%) ]]; do
placeholder="${BASH_REMATCH[1]}"
emulator_path=$(replace_emulator_placeholder "$placeholder")
cmd="${cmd//$placeholder/$emulator_path}"
done
# Substitute %BASENAME% and other placeholders
cmd="${cmd//"%BASENAME%"/"'$base_name'"}"
cmd="${cmd//"%FILENAME%"/"'$file_name'"}"
cmd="${cmd//"%ROMRAW%"/"'$rom_raw'"}"
cmd="${cmd//"%ROMPATH%"/"'$rom_dir'"}"
# Ensure paths are quoted correctly
cmd="${cmd//"%ROM%"/"'$rom_path'"}"
cmd="${cmd//"%GAMEDIR%"/"'$rom_dir'"}"
cmd="${cmd//"%GAMEDIRRAW%"/"'$rom_dir_raw'"}"
cmd="${cmd//"%CORE_RETROARCH%"/"$ra_cores_path"}"
log d "Command after placeholders substitutions: $cmd"
# Now handle %INJECT% after %BASENAME% has been substituted
cmd=$(handle_inject_placeholder "$cmd")
echo "$cmd"
}
# Function to replace %EMULATOR_SOMETHING% with the actual path of the emulator
replace_emulator_placeholder() {
local placeholder=$1
# Extract emulator name from placeholder without changing case
local emulator_name="${placeholder//"%EMULATOR_"/}" # Extract emulator name after %EMULATOR_
emulator_name="${emulator_name//"%"/}" # Remove the trailing %
# Use the find_emulator function to get the emulator path using the correct casing
local emulator_exec=$(find_emulator "$emulator_name")
if [[ -z "$emulator_exec" ]]; then
log e "Emulator '$emulator_name' not found."
exit 1
fi
echo "$emulator_exec"
}
# Function to handle the %INJECT% placeholder
handle_inject_placeholder() {
local cmd="$1"
local rom_dir=$(dirname "$game") # Get the ROM directory based on the game path
# Find and process all occurrences of %INJECT%='something'.extension
while [[ "$cmd" =~ (%INJECT%=\'([^\']+)\')(.[^ ]+)? ]]; do
inject_file="${BASH_REMATCH[2]}" # Extract the quoted file name
extension="${BASH_REMATCH[3]}" # Extract the extension (if any)
inject_file_full_path="$rom_dir/$inject_file$extension" # Form the full path
log d "Found inject part: %INJECT%='$inject_file'$extension"
# Check if the file exists
if [[ -f "$inject_file_full_path" ]]; then
# Read the content of the file and replace newlines with spaces
inject_content=$(cat "$inject_file_full_path" | tr '\n' ' ')
log i "File \"$inject_file_full_path\" found. Replacing %INJECT% with content."
# Escape special characters in the inject part for the replacement
escaped_inject_part=$(printf '%s' "%INJECT%='$inject_file'$extension" | sed 's/[]\/$*.^[]/\\&/g')
# Replace the entire %INJECT%=...'something'.extension part with the file content
cmd=$(echo "$cmd" | sed "s|$escaped_inject_part|$inject_content|g")
log d "Replaced cmd: $cmd"
else
log e "File \"$inject_file_full_path\" not found. Removing %INJECT% placeholder."
# Use sed to remove the entire %INJECT%=...'something'.extension
escaped_inject_part=$(printf '%s' "%INJECT%='$inject_file'$extension" | sed 's/[]\/$*.^[]/\\&/g')
cmd=$(echo "$cmd" | sed "s|$escaped_inject_part||g")
log d "sedded cmd: $cmd"
fi
done
log d "Returning the command with injected content: $cmd"
echo "$cmd"
}
# Function to get the first available emulator in the list
get_first_emulator() {
local system_name=$system
system_section=$(xmllint --xpath "//system[name='$system_name']" "$es_systems" 2>/dev/null)
if [ -z "$system_section" ]; then
log e "System not found: $system_name"
exit 1
fi
# Extract the first command and use it as the selected emulator
first_command=$(echo "$system_section" | xmllint --xpath "string(//command[1])" - 2>/dev/null)
if [[ -n "$first_command" ]]; then
# Substitute placeholders in the command
first_command=$(substitute_placeholders "$first_command")
log d "Automatically selected the first emulator: $first_command"
echo "$first_command"
else
log e "No command found for the system: $system_name"
return 1
fi
}
find_emulator() {
local emulator_name="$1"
found_path=""
# Search the es_find_rules.xml file for the emulator
emulator_section=$(xmllint --xpath "//emulator[@name='$emulator_name']" "$es_find_rules" 2>/dev/null)
if [ -z "$emulator_section" ]; then
log e "Find emulator: emulator not found: $emulator_name"
return 1
fi
# Search systempath entries
while IFS= read -r line; do
command_path=$(echo "$line" | sed -n 's/.*<entry>\(.*\)<\/entry>.*/\1/p')
if [ -x "$(command -v $command_path)" ]; then
found_path=$command_path
break
fi
done <<< "$(echo "$emulator_section" | xmllint --xpath "//rule[@type='systempath']/entry" - 2>/dev/null)"
# If not found, search staticpath entries
if [ -z "$found_path" ]; then
while IFS= read -r line; do
command_path=$(eval echo "$line" | sed -n 's/.*<entry>\(.*\)<\/entry>.*/\1/p')
if [ -x "$command_path" ]; then
found_path=$command_path
break
fi
done <<< "$(echo "$emulator_section" | xmllint --xpath "//rule[@type='staticpath']/entry" - 2>/dev/null)"
fi
if [ -z "$found_path" ]; then
log e "Find emulator: no valid path found for emulator: $emulator_name"
return 1
else
log d "Find emulator: found emulator \"$found_path\""
echo "$found_path"
return 0
fi
}
# Function to find the emulator name from the label in es_systems.xml
find_emulator_name_from_label() {
local label="$1"
# Search for the emulator matching the label in the es_systems.xml file
extracted_emulator_name=$(xmllint --recover --xpath "string(//system[name='$system']/command[@label='$label']/text())" "$es_systems" 2>/dev/null | sed 's/%//g' | sed 's/EMULATOR_//g' | cut -d' ' -f1)
log d "Found emulator from label: $extracted_emulator_name"
emulator_command=$(find_emulator "$extracted_emulator_name")
if [[ -n "$emulator_command" ]]; then
echo "$emulator_command"
else
log e "Found emulator from label: emulator name not found for label: $label"
return 1
fi
}

View file

@ -0,0 +1,404 @@
"""Sync RetroDECK favorites games with steam shortcuts"""
import binascii
import os
import re
import shlex
import shutil
import glob
import sys
import time
import hashlib
import xml.etree.ElementTree as ET
from resetsync import resetfun
command_list_default={
"3do": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/opera_libretro.so",
"amiga": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amiga1200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amiga600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amigacd32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amstradcpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"arcade": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"arduboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/arduous_libretro.so",
"astrocde": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"atari2600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
"atari5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
"atari7800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prosystem_libretro.so",
"atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"atarijaguar": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
"atarijaguarcd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
"atarilynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
"atarist": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/hatari_libretro.so",
"atarixe": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"atomiswave": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"c64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
"cavestory": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nxengine_libretro.so",
"cdimono1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
"cdtv": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"chailove": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/chailove_libretro.so",
"channelf": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freechaf_libretro.so",
"colecovision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"cps": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"doom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
"dos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
"dreamcast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"easyrpg": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/easyrpg_libretro.so",
"famicom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"flash": "TODO: I have to catch how it works", #TODO
"fba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
"fbneo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"fds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"gameandwatch": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
"gamegear": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"gb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"gba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"gbc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"genesis": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"gx4000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"intellivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freeintv_libretro.so",
"j2me": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/squirreljme_libretro.so",
"lcdgames": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
"lutro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/lutro_libretro.so",
"mame": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"mastersystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megacdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megadrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megaduck": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameduck_libretro.so",
"mess": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mess2015_libretro.so",
"model2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"moto": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
"msx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msx1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msx2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msxturbor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"multivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
"n64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
"n64dd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
"naomi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"naomigd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"nds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
"neogeo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"neogeocdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"nes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"ngp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"ngpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"odyssey2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
"palm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mu_libretro.so",
"pc88": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quasi88_libretro.so",
"pc98": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
"pcengine": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"pcenginecd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"pcfx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pcfx_libretro.so",
"pokemini": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pokemini_libretro.so",
"psx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
"quake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
"satellaview": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"saturnjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"scummvm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/scummvm_libretro.so",
"sega32x": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"sega32xjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"sega32xna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"segacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"sfc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"sg-1000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"sgb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
"snes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"snesna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"spectravideo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"sufami": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"supergrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
"supervision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/potator_libretro.so",
"tg16": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"tg-cd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"tic80": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tic80_libretro.so",
"to8": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
"uzebox": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/uzem_libretro.so",
"vectrex": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vecx_libretro.so",
"vic20": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xvic_libretro.so",
"videopac": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
"virtualboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_vb_libretro.so",
"wasm4": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/wasm4_libretro.so",
"wonderswan": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
"wonderswancolor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
"x1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/x1_libretro.so",
"x68000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/px68k_libretro.so",
"zx81": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/81_libretro.so",
"zxspectrum": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fuse_libretro.so",
"switch": "flatpak run --command=/var/data/ponzu/Yuzu/bin/yuzu net.retrodeck.retrodeck -f -g",
"n3ds": "flatpak run --command=/var/data/ponzu/Citra/bin/citra-qt net.retrodeck.retrodeck",
"ps2": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
"wiiu": "flatpak run --command=Cemu-wrapper net.retrodeck.retrodeck -g",
"gc": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"wii": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"xbox": "flatpak run --command=xemu net.retrodeck.retrodeck -dvd_path",
"ps3": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
"psp": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
"pico8": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run"
}
alt_command_list={
"PUAE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"Caprice32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"Stella": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
"a5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"Handy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
"VICE x64sc Accurate": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
"SAME CDi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
"blueMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"PrBoom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
"DOSBox-Pure": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
"Mesen": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"Genesis Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"Gamebatte": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"ParaLLEI N64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
"DeSmuME": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
"NeoCD": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"Beetle NeoPop": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"Neko Project II Kai": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"Swanstation": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
"TyrQuake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
"Beetle Saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"Snes 9x - Current": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"Beetle SuperGrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
"Yuzu (Standalone)": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g",
"Citra (Standalone)": "flatpak run --command=citra net.retrodeck.retrodeck",
"PCSX2 (Standalone)": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
"Dolphin (Standalone)": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"RPCS3 Directory (Standalone)": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
"PPSSPP (Standalone)": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
"PICO-8 (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run",
"PUAE 2021": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae2021_libretro.so",
"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
"CPCemu (Standalone)": "NYI", #NYI
"MAME 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2010_libretro.so",
"MAME 2003-Plus": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2003_plus_libretro.so",
"MAME 2000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2000_libretro.so",
"MAME (Standalone)": "NYI", #NYI
"FinalBurn Neo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"FinalBurn Neo (Standalone)": "NYI", #NYI
"FB Alpha 2012": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
"Flycast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"Flycast (Standalone)": "NYI", #NYI
"Kronos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/kronos_libretro.so",
"Supermodel (Standalone)": "NYI", #NYI
"Supermodel [Fullscreen] (Standalone)": "NYI", #NYI
"Shortcut or script": "TODO: I have to catch how it works", #TODO
"Atari800 (Standalone)": "NYI", #NYI
"Stella 2014": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella2014_libretro.so",
"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"Beetle Lynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_lynx_libretro.so",
"VICE x64 Fast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64_libretro.so",
"VICE x64 SuperCPU": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xscpu64_libretro.so",
"VICE x128": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x128_libretro.so",
"Frodo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/frodo_libretro.so",
"CDi 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cdi2015_libretro.so",
"Gearcoleco": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearcoleco_libretro.so",
"FB Alpha 2012 CPS-1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps1_libretro.so",
"FB Alpha 2012 CPS-2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps2_libretro.so",
"FB Alpha 2012 CPS-3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps3_libretro.so",
"Boom 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro.so",
"Boom 3 xp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro_xp.so",
"DOSBox-Core": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_core_libretro.so",
"DOSBox-SVN": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_svn_libretro.so",
"Keep ES-DE running": "TODO: I have to catch how it works", #TODO
"AppImage (Suspend ES-DE)": "TODO: I have to catch how it works", #TODO
"AppImage (Keep ES-DE running)": "TODO: I have to catch how it works", #TODO
"Nestopia UE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nestopia_libretro.so",
"FCEUmm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fceumm_libretro.so",
"QuickNES": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quicknes_libretro.so",
"Genesis Plus GX Wide": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_wide_libretro.so",
"Gearsystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
"SMS Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/smsplus_libretro.so",
"SameBoy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameboy_libretro.so",
"Gearboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearboy_libretro.so",
"TGB Dual": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tgbdual_libretro.so",
"Mesen-S": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
"VBA-M": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vbam_libretro.so",
"bsnes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_libretro.so",
"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"VBA Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vba_next_libretro.so",
"gpSP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gpsp_libretro.so",
"Dolphin": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dolphin_libretro.so",
"PrimeHack (Standalone)": "flatpak run --command=primehack-wrapper net.retrodeck.retrodeck -b -e",
"PicoDrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"BlastEm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/blastem_libretro.so",
"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
"fMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fmsx_libretro.so",
"Citra": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra_libretro.so",
"Citra 2018": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra2018_libretro.so",
"Mupen64Plus-Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
"DeSmuME 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume2015_libretro.so",
"melonDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/melonds_libretro.so",
"melonDS (Standalone)": "flatpak run --command=melonDS net.retrodeck.retrodeck",
"FinalBurn Neo neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck --subsystem neocd -L /var/config/retroarch/cores/fbneo_libretro.so",
"RACE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/race_libretro.so",
"Neko Project II": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nekop2_libretro.so",
"Beetle PCE FAST": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_fast_libretro.so",
"PICO-8 Splore (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -splore",
"AppImage": "TODO: I have to catch how it works", #TODO
"LRPS2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
"PCSX2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
"RPCS3 Shortcut (Standalone)": "TODO: I have to catch how it works", #TODO
"PPSSPP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/ppsspp_libretro.so",
"Beetle PSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_libretro.so",
"Beetle PSX HW": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_hw_libretro.so",
"PCSX ReARMed": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx_rearmed_libretro.so",
"DuckStation (Standalone)": "flatpak run --command=duckstation-qt net.retrodeck.retrodeck -batch",
"vitaQuake 2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2_libretro.so",
"vitaQuake 2 [Rogue]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-rogue_libretro.so",
"vitaQuake 2 [Xatrix]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-xatrix_libretro.so",
"vitaQuake 2 [Zaero]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-zaero_libretro.so",
"vitaQuake 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake3_libretro.so",
"YabaSanshiro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabasanshiro_libretro.so",
"Yabause": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabause_libretro.so",
"Snes9x 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x2010_libretro.so",
"bsnes-hd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_hd_beta_libretro.so",
"bsnes-mercury Accuracy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_mercury_accuracy_libretro.so",
"Beetle Supafaust": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supafaust_libretro.so",
"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so"
}
exit_file="/tmp/retrodeck_steam_sync_exit"
rdhome=""
roms_folder=""
def create_shortcut_new_new(games):
ignore_game=rdhome+"/.sync/IGNORE.sh"
old_games=os.listdir(rdhome+"/.sync/").copy()
for game in games:
try:
i=old_games.index(game[0]+".sh")
old_games[i]=0
except ValueError:
print(game[0]+" is a new game!")
path=rdhome+"/.sync/"+game[0]+".sh"
print("Go to path: "+path)
fl=open(path,"w")
fl.write("#!/bin/bash\n\n")
fl.write('if test "$(whereis flatpak)" = "flatpak:"\n')
fl.write("then\n")
fl.write("flatpak-spawn --host "+game[1]+"\n")
fl.write("else\n")
fl.write(game[1]+"\n")
fl.write("fi\n")
fl.close()
st=os.stat(path)
os.chmod(path, st.st_mode | 0o0111)
print("Start removing")
print(old_games)
for game in old_games:
if game:
os.remove(rdhome+"/.sync/"+game)
dir=os.listdir(rdhome+"/.sync/")
if len(dir)==0:
print("No game found, removing all")
fl=open(ignore_game,"w")
fl.close()
os.system("/app/bin/zypak-wrapper /app/srm/steam-rom-manager remove")
os.remove(ignore_game)
else:
print("Adding the games")
os.system("/app/bin/zypak-wrapper /app/srm/steam-rom-manager add")
def addToSteam(systems):
games=[]
for system in systems:
print("Start parsing system: {}".format(system))
f=open(rdhome+"/ES-DE/gamelists/"+system+"/gamelist.xml","r")
f.readline()
parser=ET.XMLParser()
parser.feed(b'<root>')
parser.feed(f.read())
parser.feed(b'</root>')
root=parser.close()
f.close()
globalAltEmu=""
for subroot in root:
if subroot.tag=="alternativeEmulator":
for alt in subroot:
globalAltEmu=alt.text
else:
for game in subroot:
path=""
name=""
favorite=""
altemulator=globalAltEmu
for tag in game:
if tag.tag=="path":
path=tag.text
elif tag.tag=="name":
name=tag.text
elif tag.tag=="favorite":
favorite=tag.text
elif tag.tag=="altemulator":
altemulator=tag.text
if favorite=="true" and altemulator=="":
print("Find favorite game: {}".format(name))
games.append([name,command_list_default[system]+" '"+roms_folder+"/"+system+path[1:]+"'"])
elif favorite=="true":
print("Find favorite game with alternative emulator: {}, {}".format(name,altemulator))
if ("neogeocd" in system) and altemulator=="FinalBurn Neo":
games.append([name,alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'"])
print(alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'")
elif system=="pico8" and altemulator=="PICO-8 Splore (Standalone)":
games.append([name,alt_command_list[altemulator]])
print(alt_command_list[altemulator])
else:
games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"])
print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'")
create_shortcut_new_new(games)
def start_config():
global rdhome
global roms_folder
global command_list_default
global alt_command_list
print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg")))
fl=open(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"),"r")
lines=fl.readlines()
for line in lines:
if "rdhome" in line:
rdhome=line[7:-1]
elif "roms_folder" in line:
roms_folder=line[12:-1]
fl.close()
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")
srm_path=os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/steam-rom-manager/userData/userConfigurations.json")
if not os.path.isfile(srm_path):
print("Steam ROM Manager configuration not initialized! Initializing now.")
resetfun(rdhome)
if not os.path.exists(rdhome+"/.sync/"):
os.makedirs(rdhome+"/.sync/")
if __name__=="__main__":
start_config()
addToSteam(os.listdir(rdhome+"/ES-DE/gamelists/"))
print("Finished!")

121
functions/steam_sync.sh Normal file
View file

@ -0,0 +1,121 @@
#!/bin/bash
# Add games to Steam function
add_to_steam() {
log "i" "Starting Steam Sync"
steamsync_folder="$rdhome/.sync"
create_dir $steamsync_folder
local srm_path="/var/config/steam-rom-manager/userData/userConfigurations.json"
if [ ! -f "$srm_path" ]; then
log "e" "Steam ROM Manager configuration not initialized! Initializing now."
prepare_component "reset" "steam-rom-manager"
fi
# Build the systems array from space-separated systems
local systems_string=$(jq -r '.system | keys[]' "$features" | paste -sd' ')
IFS=' ' read -r -a systems <<< "$systems_string" # TODO: do we need this line?
local games=()
for system in "${systems[@]}"; do
local gamelist="$rdhome/ES-DE/gamelists/$system/gamelist.xml"
if [ -f "$gamelist" ]; then
# Extract all <game> elements that are marked as favorite="true"
game_blocks=$(xmllint --recover --xpath '//game[favorite="true"]' "$gamelist" 2>/dev/null)
log d "Extracted favorite game blocks:\n\n$game_blocks\n\n"
# Split the game_blocks into an array, where each element is a full <game> block
IFS=$'\n' read -r -d '' -a game_array <<< "$(echo "$game_blocks" | xmllint --recover --format - | sed -n '/<game>/,/<\/game>/p' | tr '\n' ' ')"
# Iterate over each full <game> block in the array
for game_block in "${game_array[@]}"; do
log "d" "Processing game block:\n$game_block"
# Extract the game's name and path from the full game block
local name=$(echo "$game_block" | xmllint --xpath 'string(//game/name)' - 2>/dev/null)
local path=$(echo "$game_block" | xmllint --xpath 'string(//game/path)' - 2>/dev/null | sed 's|^\./||') # removing the ./
log "d" "Game name: $name"
log "d" "Game path: $path"
# Ensure the extracted name and path are valid
if [ -n "$name" ] && [ -n "$path" ]; then
# Check for an alternative emulator if it exists
# local emulator=$(echo "$game_block" | xmllint --xpath 'string(//game/altemulator)' - 2>/dev/null)
# if [ -z "$emulator" ]; then
# games+=("$name ${command_list_default[$system]} '$roms_folder/$system/$path'")
# else
# games+=("$name ${alt_command_list[$emulator]} '$roms_folder/$system/$path'")
# fi
log "d" "Steam Sync: found favorite game: $name"
else
log "w" "Steam Sync: failed to find valid name or path for favorite game"
fi
# Sanitize the game name for the filename: replace special characters with underscores
local sanitized_name=$(echo "$name" | sed -e 's/^A-Za-z0-9._-/ /g')
local sanitized_name=$(echo "$sanitized_name" | sed -e 's/:/ -/g')
local sanitized_name=$(echo "$sanitized_name" | sed -e 's/&/and/g')
local sanitized_name=$(echo "$sanitized_name" | sed -e 's%/%and%g')
local sanitized_name=$(echo "$sanitized_name" | sed -e 's/ / - /g')
local sanitized_name=$(echo "$sanitized_name" | sed -e 's/ / /g')
log d "File Path: $path"
log d "Game Name: $name"
# If the filename is too long, shorten it
if [ ${#sanitized_name} -gt 100 ]; then
sanitized_name=$(echo "$sanitized_name" | cut -c 1-100)
fi
log d "Sanitized Name: $sanitized_name"
local launcher="$steamsync_folder/${sanitized_name}.sh"
log d "Creating desktop file: $launcher"
# if [[ -v command_list_default[$system] ]]; then
# command="${command_list_default[$system]}"
# else
# log e "$system is not included in the commands array."
# continue
# fi
# Populate the .sync script with the correct command
# TODO: if there is any emulator defined in the xml we use that, else... how we can know which is the default one?
# TODO: if steam is flatpak the command wrapping will change in .desktop
local command="flatpak run net.retrodeck.retrodeck start -s $system '$roms_folder/$system/$path'"
# Create the launcher file using a heredoc - if you enable .desktp this remember to edit .desktop in SRM userConfigurations.json and the above launcher variable (and vice versa)
# cat <<EOF > "$launcher"
# [Desktop Entry]
# Version=1.0
# Name=$name
# Comment=$name via RetroDECK
# Exec=$command
# Icon=net.retrodeck.retrodeck
# Terminal=false
# Type=Application
# Categories=Game;Emulator;
# EOF
cat <<EOF > "$launcher"
#!/bin/bash
if [ test "$(whereis flatpak)" = "flatpak:" ]; then
flatpak-spawn --host $command
else
$command
fi
EOF
done
fi
done
steam-rom-manager add
log i "Steam Sync: completed"
}
remove_from_steam() {
echo "TBD"
}

View file

@ -2,6 +2,10 @@ app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform
runtime-version: "6.7"
sdk: org.kde.Sdk
base: org.electronjs.Electron2.BaseApp # Needed for Steam ROM Manager
base-version: "22.08"
sdk-extensions:
- org.freedesktop.Sdk.Extension.llvm18 # Needed for RPCS3
command: retrodeck.sh
finish-args:
@ -27,7 +31,7 @@ finish-args:
- --env=SDL_VIDEO_WAYLAND_WMCLASS=net.retrodeck.retrodeck
# XEMU - Fixes issues with openSUSE systems, QEMU_AUDIO_DRV is defined as "pa" causing xemu to not launch
- --unset-env=QEMU_AUDIO_DRV
# BoilR
# Steam ROM Manager
- --filesystem=xdg-data/Steam:rw #Steam (flatpak)
- --filesystem=~/.steam:rw # Steam (Non-flatpak)
- --filesystem=~/.var/app/com.valvesoftware.Steam:rw # Steam (Flatpak)
@ -46,6 +50,7 @@ cleanup:
- /bin/zstd*
- /lib/pkg-config
- /share/doc
- /share/gtk-doc # Steam ROM Manager
- /share/man
- /src
- '*.a'
@ -143,6 +148,48 @@ modules:
- type: file
url: https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
sha256: af986793a515d500ab2d35f8d2aecd656e764504b789b66d7e1a0b727a124c44
# Steam ROM Manager - START
- name: zypak
sources:
- type: git
url: https://github.com/refi64/zypak
tag: v2022.03
commit: 8424c6bcf909ca2031ebc6537d324bb64772266e
- name: steam-rom-manager
buildsystem: simple
env:
IN_FLATPAK: 1
build-commands:
- install -D run.sh ${FLATPAK_DEST}/bin/steam-rom-manager
- cp /usr/bin/ar ${FLATPAK_DEST}/bin
- ar x srm.deb
- tar xf data.tar.xz
- mv "opt/Steam ROM Manager" "${FLATPAK_DEST}/srm"
- rm -rf "usr/share/icons/hicolor/1024x1024"
- cd usr; find share/icons/hicolor -type f -exec install -Dm644 "{}"
"${FLATPAK_DEST}/{}" \;
- rm -r srm.deb control.tar.* data.tar.xz debian-binary usr opt
sources:
- type: script
dest-filename: run.sh
commands:
- /app/bin/zypak-wrapper.sh /app/srm/steam-rom-manager "${@}"
- type: file
dest-filename: srm.deb
url: https://github.com/SteamGridDB/steam-rom-manager/releases/download/v2.4.19/steam-rom-manager_2.4.19_amd64.deb
sha256: aa4f121d50612801c30b9365e05cb92a3b4a9c402974fee2b88652de8d731b0e
x-checker-data:
type: json
url: https://api.github.com/repos/SteamGridDB/steam-rom-manager/releases/latest
url-query: >-
.assets[] | select(.name=="steam-rom-manager_" + $version +
"_amd64.deb") | .browser_download_url
version-query: .tag_name | sub("^v"; "")
# Steam ROM Manager - END
- name: yq
buildsystem: simple
@ -542,6 +589,21 @@ modules:
url: https://github.com/RetroDECK/MAME/releases/latest/download/RetroDECK-MAME-Artifact.tar.gz
sha256: RETRODECKMAMELATEST
# SHADPS4
- name: shadps4
buildsystem: simple
build-commands:
- chmod +x *.AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}/"
sources:
- type: archive
url: https://github.com/shadps4-emu/shadPS4/releases/latest/download/shadps4-linux-qt.zip
sha256: RETRODECKSHADPS4LATESTSTABLE
# ES-DE
- name: ES-DE
@ -554,8 +616,10 @@ modules:
- chmod +x "${FLATPAK_DEST}/bin/"*
sources:
- type: archive
url: https://github.com/RetroDECK/ES-DE/releases/latest/download/RetroDECK-ES-DE-Artifact.tar.gz
sha256: RETRODECKESDELATEST
url: https://github.com/RetroDECK/ES-DE/releases/download/feat%2Fshadps4-200824.04/RetroDECK-ES-DE-Artifact.tar.gz
sha256: 3aa0334b4542ca4ca36c15f8b583d3c0075a7a894d765cbb8da1670a5a1f637f
#url: https://github.com/RetroDECK/ES-DE/releases/latest/download/RetroDECK-ES-DE-Artifact.tar.gz
#sha256: RETRODECKESDELATEST
- name: retrodeck-theme
buildsystem: simple

View file

@ -18,7 +18,7 @@ for i in "$@"; do
case $i in
-h*|--help*)
echo "RetroDECK v""$version"
echo -e "
echo "
Usage:
flatpak run [FLATPAK-RUN-OPTION] net.retrodeck-retrodeck [ARGUMENTS]
@ -32,7 +32,7 @@ Arguments:
--reset-component <component> \t Reset one or more component or emulator configs to the default values
--reset-retrodeck \t Starts the initial RetroDECK installer (backup your data first!)
--run [-s <path>] [-e <path>] <path>\t Run a game from cli, if no system is defined it will deducted from the path.\n\t\t\t\t\t\t For example --run ~/retrodeck/roms/system/game.ext will be run with the system "system".\n\t\t\t\t\t\t Optionally -e (emulator) and -s (system) can be passed as arguments.
start [-s <path>] [-e <path>] <path>\t Start a game from cli, if no system is defined it will deducted from the path.\n\t\t\t\t\t\t For example flatpak run net.retrodeck.retrodeck start ~/retrodeck/roms/system/game.ext will be run with the system "system".\n\t\t\t\t\t\t Optionally -e (emulator) and -s (system) can be passed as arguments.
For flatpak run specific options please run: flatpak run -h
@ -44,8 +44,8 @@ https://retrodeck.net
echo "RetroDECK v$version"
exit
;;
--run*)
shift # Remove --run
start*)
shift # Remove "start"
run_game "$@"
exit
;;
@ -206,4 +206,3 @@ fi
# Normal Startup
start_retrodeck
quit_retrodeck

View file

@ -156,6 +156,10 @@ configurator_welcome_dialog() {
configurator_about_retrodeck_dialog
;;
"Sync with Steam" )
configurator_add_steam
;;
"Developer Options" )
log i "Configurator: opening \"$choice\" menu"
configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!"
@ -1152,12 +1156,13 @@ configurator_reset_dialog() {
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which component do you want to reset to default settings?" \
--column="Component" --column="Action" \
"Steam ROM Manager" "Reset SRM that manages the sync and scraping toward Steam library" \
"ES-DE" "Reset the ES-DE frontend" \ )
# TODO: "GyroDSU" "Reset the gyroscope manager GyroDSU"
case $component_to_reset in
"ES-DE" ) # TODO: GyroDSU
"Steam ROM Manager" | "ES-DE" ) # TODO: GyroDSU
if [[ $(configurator_reset_confirmation_dialog "$component_to_reset" "Are you sure you want to reset $component_to_reset to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
prepare_component "reset" "$component_to_reset" "configurator"
configurator_process_complete_dialog "resetting $component_to_reset"
@ -1250,6 +1255,48 @@ configurator_about_retrodeck_dialog() {
esac
}
configurator_add_steam() {
if [[ $(get_setting_value $rd_conf "steam_sync" retrodeck "options") == "true" ]]; then
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization is currently enabled. Do you want to disable it?\n\nThe already added shortcut will not be removed.\n"
if [ $? == 0 ] # User clicked "Yes"
then
disable_steam_sync
else # User clicked "Cancel"
configurator_welcome_dialog
fi
else
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization is currently disabled. Do you want to enable it?\n\nAll the games marked as favorites will be syncronized with Steam ROM Manager.\nRemember to restart Steam each time to see the changes.\n"
if [ $? == 0 ]
then
enable_steam_sync
else
configurator_welcome_dialog
fi
fi
}
enable_steam_sync() {
set_setting_value $rd_conf "steam_sync" "true" retrodeck "options"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization enabled."
configurator_welcome_dialog
}
disable_steam_sync() {
set_setting_value $rd_conf "steam_sync" "false" retrodeck "options"
configurator_welcome_dialog
}
configurator_version_history_dialog() {
local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata))
local all_versions_list=()

View file

@ -1,15 +1,12 @@
extends Control
var rekku_state = false
func _input(event):
if event.is_action_released("rekku_hide"):
#self.visible = !self.visible
if rekku_state == false:
self.visible = true
rekku_state = true
%SplitContainer.split_offset=-300
elif event.is_action_released("rekku_hide") and rekku_state == true:
rekku_state = false
self.visible = false
%SplitContainer.split_offset=0
if event.is_action_pressed("rekku_hide"):
self.visible = !self.visible
%SplitContainer.split_offset=-300
if Input.is_action_pressed("back_button"):
%SplitContainer.split_offset=0
$".".visible=false

View file

@ -1,10 +1,6 @@
extends TabContainer
var icon_width: int = 32
@onready var tcount: int = get_tab_count()-1
var l1_button_texture: Texture2D = load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0797.png")
var r1_button_texture: Texture2D = load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0798.png")
func _ready():
focusFirstFocusableChild() #grab focus on first element to enable controller focusing
@ -12,50 +8,31 @@ func _ready():
%TabContainer.add_theme_icon_override("decrement_highlight",ResourceLoader.load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0763.png"))
%TabContainer.add_theme_icon_override("increment",ResourceLoader.load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0798.png"))
%TabContainer.add_theme_icon_override("increment_highlight",ResourceLoader.load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0764.png"))
set_tab_icon(0, ResourceLoader.load("res://assets/icons/pixelitos/128/map-globe.png"))
set_tab_icon(0, ResourceLoader.load("res://assets/icons/pixelitos/128/applications-graphics.png"))
set_tab_icon_max_width(0,icon_width)
set_tab_icon(1, ResourceLoader.load("res://assets/icons/pixelitos/128/preferences-system-windows.png"))
set_tab_icon_max_width(1,icon_width)
set_tab_icon(2, ResourceLoader.load("res://assets/icons/pixelitos/128/utilities-system-monitor.png"))
set_tab_icon(2, ResourceLoader.load("res://assets/icons/pixelitos/128/utilities-tweak-tool.png"))
set_tab_icon_max_width(2,icon_width)
set_tab_icon(3, ResourceLoader.load("res://assets/icons/pixelitos/128/preferences-system-session-services.png"))
set_tab_icon(3, ResourceLoader.load("res://assets/icons/pixelitos/128/network-workgroup.png"))
set_tab_icon_max_width(3,icon_width)
set_tab_icon(4, ResourceLoader.load("res://assets/icons/pixelitos/128/help-about.png"))
set_tab_icon(4, ResourceLoader.load("res://assets/icons/pixelitos/128/utilities-system-monitor.png"))
set_tab_icon_max_width(4,icon_width)
set_tab_icon(5, ResourceLoader.load("res://assets/icons/pixelitos/128/preferences-system-session-services.png"))
set_tab_icon_max_width(5,icon_width)
set_tab_icon(6, ResourceLoader.load("res://assets/icons/pixelitos/128/help-about.png"))
set_tab_icon_max_width(6,icon_width)
#%TK_GRAPHICS.name="BOB"
connect_focus_signals(self)
func connect_focus_signals(node):
for child in node.get_children():
if child is Button:
child.focus_entered.connect(_on_Button_focus_entered.bind(child))
elif child is Control:
connect_focus_signals(child)
func _on_Button_focus_entered(button: Button):
if button:
%AudioStreamPlayer2D.play()
#
func _input(event):
if (event.is_action_pressed("next_tab")):
%r1_button.texture_normal = %r1_button.texture_pressed
if current_tab == tcount:
current_tab = 0
else:
self.select_next_available()
focusFirstFocusableChild()
else:
%r1_button.texture_normal = r1_button_texture
self.select_next_available()
focusFirstFocusableChild()
if (event.is_action_pressed("previous_tab")):
%l1_button.texture_normal = %l1_button.texture_pressed
if current_tab == 0:
current_tab = tcount
else:
self.select_previous_available()
focusFirstFocusableChild()
else:
%l1_button.texture_normal = l1_button_texture
self.select_previous_available()
focusFirstFocusableChild()
func focusFirstFocusableChild():
var children = findElements(get_current_tab_control(), "Control")
for n: Control in children:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l3bredurb11m"
path="res://.godot/imported/rekku_base.png-ba655e0b7ca5167750e3c33bad52b118.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_base.png"
dest_files=["res://.godot/imported/rekku_base.png-ba655e0b7ca5167750e3c33bad52b118.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvlncuql8igrm"
path="res://.godot/imported/rekku_eye_1.png-bdb05770012bbf8805a308be308f2f11.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_eye_1.png"
dest_files=["res://.godot/imported/rekku_eye_1.png-bdb05770012bbf8805a308be308f2f11.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bdrdu4nddkqjn"
path="res://.godot/imported/rekku_eye_2.png-470f058d31522c2d3d622d57668ea739.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_eye_2.png"
dest_files=["res://.godot/imported/rekku_eye_2.png-470f058d31522c2d3d622d57668ea739.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cb2hwhaq036mu"
path="res://.godot/imported/rekku_mouth_a.png-279dcb9a384b18dcc5f0e9b1fce89965.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_mouth_a.png"
dest_files=["res://.godot/imported/rekku_mouth_a.png-279dcb9a384b18dcc5f0e9b1fce89965.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dl2fd66fvn1an"
path="res://.godot/imported/rekku_mouth_i.png-66f20d9dcec19841a364e26d8f38c17a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_mouth_i.png"
dest_files=["res://.godot/imported/rekku_mouth_i.png-66f20d9dcec19841a364e26d8f38c17a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://3ktnkmuecxea"
path="res://.godot/imported/rekku_mouth_m.png-f85c73bab4824d3102d50150c4e5375e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_mouth_m.png"
dest_files=["res://.godot/imported/rekku_mouth_m.png-f85c73bab4824d3102d50150c4e5375e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d08ngewjvxkmn"
path="res://.godot/imported/rekku_mouth_o.png-72bff84aecbb9047648fb98563492453.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_mouth_o.png"
dest_files=["res://.godot/imported/rekku_mouth_o.png-72bff84aecbb9047648fb98563492453.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dieva7tuxjrvy"
path="res://.godot/imported/rekku_nomouth.png-6aea5248544dd97243fc5c179e0e2d58.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/rekku2/rekku_nomouth.png"
dest_files=["res://.godot/imported/rekku_nomouth.png-6aea5248544dd97243fc5c179e0e2d58.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhf620jyq75t1"
path="res://.godot/imported/es-de.png-7133c76b0fc370d6d2c311241df36cf6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/es-de.png"
dest_files=["res://.godot/imported/es-de.png-7133c76b0fc370d6d2c311241df36cf6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 675 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ctm3f56t7jhiw"
path="res://.godot/imported/flycast.png-454d63296971d85691881883d8c379e3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/flycast.png"
dest_files=["res://.godot/imported/flycast.png-454d63296971d85691881883d8c379e3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://t4bq3t2l0rja"
path="res://.godot/imported/fuse.png-798b47a8862532036e29b84ce0746e43.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/fuse.png"
dest_files=["res://.godot/imported/fuse.png-798b47a8862532036e29b84ce0746e43.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bjxqyxpxb8h8q"
path="res://.godot/imported/lime3ds.png-46636e55aca4b1efb87cc2bb6ef805bd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/lime3ds.png"
dest_files=["res://.godot/imported/lime3ds.png-46636e55aca4b1efb87cc2bb6ef805bd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 497 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://de3s3tkxffqk0"
path="res://.godot/imported/nestopia.png-e3a5ed0832cb977733e851f186fe9167.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/nestopia.png"
dest_files=["res://.godot/imported/nestopia.png-e3a5ed0832cb977733e851f186fe9167.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://f8c6tobon13p"
path="res://.godot/imported/portal2.png-8c359b0df7fa9dc3dad992debc6f16c3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/portal2.png"
dest_files=["res://.godot/imported/portal2.png-8c359b0df7fa9dc3dad992debc6f16c3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View file

@ -1 +0,0 @@
portal2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 684 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cyqdlugy5lts5"
path="res://.godot/imported/snes9x.png-985444d2225cee74be2bbfe4fd683dbe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/snes9x.png"
dest_files=["res://.godot/imported/snes9x.png-985444d2225cee74be2bbfe4fd683dbe.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ck226cpy48rw"
path="res://.godot/imported/steam_icon_620.png-7a9e73f3c8c9a5c04b15bb9b88f1fab3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/steam_icon_620.png"
dest_files=["res://.godot/imported/steam_icon_620.png-7a9e73f3c8c9a5c04b15bb9b88f1fab3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 526 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2fp4cq1l0843"
path="res://.godot/imported/stella.png-e81484435d2c9330faaeb6dd19649c74.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/stella.png"
dest_files=["res://.godot/imported/stella.png-e81484435d2c9330faaeb6dd19649c74.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 737 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bsctvdrl5okkn"
path="res://.godot/imported/zsnes.png-8880495aee27e317a73877d10d9f27e8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/128/zsnes.png"
dest_files=["res://.godot/imported/zsnes.png-8880495aee27e317a73877d10d9f27e8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cp7mte1plxnns"
path="res://.godot/imported/Alacritty.png-4f73319016fc7fff22cd6bbb95727a2c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/Alacritty.png"
dest_files=["res://.godot/imported/Alacritty.png-4f73319016fc7fff22cd6bbb95727a2c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4m876fp86l7u"
path="res://.godot/imported/CMakeSetup.png-ca2e7d534d3754abdc6584a0e12d00a8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/CMakeSetup.png"
dest_files=["res://.godot/imported/CMakeSetup.png-ca2e7d534d3754abdc6584a0e12d00a8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dal18xkn0kplp"
path="res://.godot/imported/QtProject-qtcreator.png-23c831a40c505fde0c349b15be55ea27.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/QtProject-qtcreator.png"
dest_files=["res://.godot/imported/QtProject-qtcreator.png-23c831a40c505fde0c349b15be55ea27.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://df4bk3fa337ig"
path="res://.godot/imported/accesories-screenshoot.png-374d457bc7561a8d6e5b662034b15730.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accesories-screenshoot.png"
dest_files=["res://.godot/imported/accesories-screenshoot.png-374d457bc7561a8d6e5b662034b15730.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqkexg5kkpehj"
path="res://.godot/imported/accesories-screenshot.png-380a941577ff6c26d913fdd7f78ed615.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accesories-screenshot.png"
dest_files=["res://.godot/imported/accesories-screenshot.png-380a941577ff6c26d913fdd7f78ed615.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qg2fv36wcd2c"
path="res://.godot/imported/accessories-calculator.png-d15cdc6a8c179b53a6ef9124dd0b9a8f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-calculator.png"
dest_files=["res://.godot/imported/accessories-calculator.png-d15cdc6a8c179b53a6ef9124dd0b9a8f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhgc5m5hjjpge"
path="res://.godot/imported/accessories-clock.png-0b1e8af43b710d232fb1a15556ef19eb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-clock.png"
dest_files=["res://.godot/imported/accessories-clock.png-0b1e8af43b710d232fb1a15556ef19eb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dy4i0deapmyn8"
path="res://.godot/imported/accessories-dictionary.png-25017c298efba7f0e304eab6bd3fe71e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-dictionary.png"
dest_files=["res://.godot/imported/accessories-dictionary.png-25017c298efba7f0e304eab6bd3fe71e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c70ppuy4beltg"
path="res://.godot/imported/accessories-ebook-reader.png-0f54fc49eec6426cbf1120611040fb32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-ebook-reader.png"
dest_files=["res://.godot/imported/accessories-ebook-reader.png-0f54fc49eec6426cbf1120611040fb32.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://taq6pykvnl76"
path="res://.godot/imported/accessories-notes.png-f233036a4c836cc7dc186338310e9fae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-notes.png"
dest_files=["res://.godot/imported/accessories-notes.png-f233036a4c836cc7dc186338310e9fae.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crc1a37v678n5"
path="res://.godot/imported/accessories-safe.png-be007724da9b72adae416ad27a714815.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-safe.png"
dest_files=["res://.godot/imported/accessories-safe.png-be007724da9b72adae416ad27a714815.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c7owhb6jau2r7"
path="res://.godot/imported/accessories-screenshoot.png-9c31584745a04aa11537232e52d0fd4a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-screenshoot.png"
dest_files=["res://.godot/imported/accessories-screenshoot.png-9c31584745a04aa11537232e52d0fd4a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lklv1mtf0axh"
path="res://.godot/imported/accessories-text-editor.png-9d8479e48f94dc82089f933acd74fa99.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/accessories-text-editor.png"
dest_files=["res://.godot/imported/accessories-text-editor.png-9d8479e48f94dc82089f933acd74fa99.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dq62f0iqbvfct"
path="res://.godot/imported/alacarte.png-1f1500dfc98c6beb4514f5a95f95a9ef.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/alacarte.png"
dest_files=["res://.godot/imported/alacarte.png-1f1500dfc98c6beb4514f5a95f95a9ef.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dqk2qqxx4340h"
path="res://.godot/imported/anatine.png-a45209bb5a56a70dfe74ec0c6321ab8a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/anatine.png"
dest_files=["res://.godot/imported/anatine.png-a45209bb5a56a70dfe74ec0c6321ab8a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cah8bhye14opr"
path="res://.godot/imported/app.xemu.xemu.png-13fcfb6536a11564d69d3e35a4541282.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/app.xemu.xemu.png"
dest_files=["res://.godot/imported/app.xemu.xemu.png-13fcfb6536a11564d69d3e35a4541282.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7wxfcyjnrjj"
path="res://.godot/imported/apple.png-268063cc94bfb7e198f59173c4edfcd0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/apple.png"
dest_files=["res://.godot/imported/apple.png-268063cc94bfb7e198f59173c4edfcd0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://fk4h3jnjjlv6"
path="res://.godot/imported/applets-screenshooter.png-b31d48502f03856dc8298a6c10b438c4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/applets-screenshooter.png"
dest_files=["res://.godot/imported/applets-screenshooter.png-b31d48502f03856dc8298a6c10b438c4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dxd7ka0qiyqen"
path="res://.godot/imported/application-vnd.affinity-designer.png-608cf9e7df43d44f5707c7dcfcdfaa42.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/application-vnd.affinity-designer.png"
dest_files=["res://.godot/imported/application-vnd.affinity-designer.png-608cf9e7df43d44f5707c7dcfcdfaa42.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

View file

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://kbu42vp5e6yf"
path="res://.godot/imported/applications-accessories.png-e423b33993821ebfe2d5501dfae6b714.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/pixelitos/16/applications-accessories.png"
dest_files=["res://.godot/imported/applications-accessories.png-e423b33993821ebfe2d5501dfae6b714.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

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