diff --git a/automation-tools/alchemist/version_policy.sh b/automation-tools/alchemist/version_policy.sh index 3dceaaa4..0cc7282f 100644 --- a/automation-tools/alchemist/version_policy.sh +++ b/automation-tools/alchemist/version_policy.sh @@ -379,6 +379,13 @@ export XENIA_EDGE_VERSION_POLICY="newest" # ------------------------------------------------------------------------------ export ZESARUX_VERSION_POLICY="latest" +# ------------------------------------------------------------------------------ +# Satellaview - Super Famicom Add-on +# ------------------------------------------------------------------------------ +export SATELLAVIEW_PLUS_VERSION_POLICY="V5" +export SATELLAVIEW_PLUS_SNES9X_VERSION_POLICY="latest" + + # ============================================================================== diff --git a/satellaview_plus/LICENSE b/satellaview_plus/LICENSE new file mode 100644 index 00000000..11f1c913 --- /dev/null +++ b/satellaview_plus/LICENSE @@ -0,0 +1 @@ +Satellite tuning sound by https://pixabay.com/users/freesound_community-46691455/ \ No newline at end of file diff --git a/satellaview_plus/TODO.txt b/satellaview_plus/TODO.txt new file mode 100644 index 00000000..0f796f72 --- /dev/null +++ b/satellaview_plus/TODO.txt @@ -0,0 +1,4 @@ +snes9x: +- controller config + +what about load/save state? diff --git a/satellaview_plus/component_functions.sh b/satellaview_plus/component_functions.sh new file mode 100755 index 00000000..05f45465 --- /dev/null +++ b/satellaview_plus/component_functions.sh @@ -0,0 +1,161 @@ +#!/bin/bash + +export satellaview_plus_download_path="$storage_path/satellaview_plus/" +export satellaview_plus_bsx_path="$storage_path/satellaview_plus/roms/bs-x" +export satellaview_plus_config_path="$XDG_CONFIG_HOME/satellaview_plus" +export satellaview_plus_rd_config_dir="$rd_components/satellaview_plus/rd_config" +export satellaview_plus_esde_assets_dir="$rd_components/satellaview_plus/es-de" +export satellaview_plus_config_file="$satellaview_plus_config_path/config.json" +export satellaview_plus_snes9x_config="$XDG_CONFIG_HOME/satellaview_plus/snes9x/snes9x/snes9x.conf" +export satellaview_soundlink_stream="https://howlingf-gecko.radioca.st/stream" + +_set_setting_value::satellaview_plus() { + + local file="$1" + + if [[ "$file" =~ \.json$ ]]; then + + local name="$2" value="$3" + + local tmp_file + tmp_file="$(mktemp)" + + jq --arg name "$name" --arg value "$value" '.[$name] = $value' "$file" > "$tmp_file" && mv -f "$tmp_file" "$file" + + elif [[ "$file" =~ \.conf$ ]]; then + + local name=$(sed_escape_pattern "$2") value=$(sed_escape_replacement "$3") section="${4:-}" + + if [[ -n "$section" ]]; then + section=$(sed_escape_pattern "$section") + sed -i '\^\['"$section"'\]^,\^\^'"$name"'[[:space:]]*=^s^\^'"$name"'[[:space:]]*=.*^'"$name"' = '"$value"'^' "$file" + else + sed -i 's^\^'"$name"'[[:space:]]*=.*^'"$name"' = '"$value"'^' "$file" + fi + + fi + +} + +_get_setting_value::satellaview_plus() { + local file="$1" name="$2" section="${3:-}" + + if [[ "$file" =~ \.json$ ]]; then + + if [[ -z "$section" ]]; then + jq -r --arg name "$name" '.[$name] // empty' "$file" + elif jq -e --arg section "$section" '.presets | has($section)' "$file" > /dev/null 2>&1; then + jq -r --arg section "$section" --arg name "$name" \ + '.presets[$section] | .. | objects | select(has($name)) | .[$name] // empty' "$file" + else + local section_parts section_json + IFS='.' read -ra section_parts <<< "$section" + section_json=$(printf '%s\n' "${section_parts[@]}" | jq -R . | jq -sc .) + jq -r --argjson path "$section_json" --arg name "$name" \ + 'getpath($path + [$name]) // empty' "$file" + fi + + elif [[ "$file" =~ \.conf$ ]]; then + + if [[ -n "$section" ]]; then + KEY="$name" SECTION="[$section]" awk -F'=' \ + 'NR==1 { sub(/^\xEF\xBB\xBF/, "") } + BEGIN { key=ENVIRON["KEY"]; section=ENVIRON["SECTION"] } + $0 == section { in_section=1; next } + /^\[/ { in_section=0 } + in_section && $0 ~ "^" key "[[:space:]]*=" { + gsub(/^[[:space:]]*/, "", $2) + print $2; exit + }' "$file" + else + KEY="$name" awk -F'=' \ + 'NR==1 { sub(/^\xEF\xBB\xBF/, "") } + BEGIN { key=ENVIRON["KEY"] } + $0 ~ "^" key "[[:space:]]*=" { + gsub(/^[[:space:]]*/, "", $2) + print $2; exit + }' "$file" + fi + + fi +} + +_prepare_component::satellaview_plus() { + local action="$1" + shift + + local component_path="$(get_own_component_path)" + + case "$action" in + + reset) + log i "-----------------------" + log i "Resetting Satellaview+" + log i "-----------------------" + + log i "Clearing BS-X satellite data directory" + create_dir -d "$satellaview_plus_download_path" + + log i "Clearing BS-X ROM directory" + create_dir -d "$satellaview_plus_bsx_path" + + log i "Initializing Satellaview+ Launcher configuration" + create_dir -d "$satellaview_plus_config_path" + cp -fv "$satellaview_plus_rd_config_dir/config.json" "$satellaview_plus_config_file" + set_setting_value "$satellaview_plus_config_file" "DownloadLocation" "$satellaview_plus_download_path" "satellaview_plus" + + log i "Initializing Snes9x configuration for Satellaview+" + create_dir -d "$(dirname "$satellaview_plus_snes9x_config")" + cp -fv "$satellaview_plus_rd_config_dir/snes9x.conf" "$satellaview_plus_snes9x_config" + set_setting_value "$satellaview_plus_snes9x_config" "SRAMDirectory" "$saves_path/satellaview_plus" "satellaview_plus" "Files" + set_setting_value "$satellaview_plus_snes9x_config" "SaveStateDirectory" "$states_path/satellaview_plus" "satellaview_plus" "Files" + + log i "Creating ROMs directory and copying launchers" + create_dir "$roms_path/satellaview_plus" + cp -rfv "$satellaview_plus_esde_assets_dir/launchers/"* "$roms_path/satellaview_plus/" + + log i "Populating gamelist.xml for ES-DE" + local source_gamelist="$component_path/es-de/gamelist/gamelist.xml" + local dest_gamelist="$rd_home_path/ES-DE/gamelists/satellaview_plus/gamelist.xml" + create_dir "$(dirname "$dest_gamelist")" + + log i "Populating ES-DE media assets" + create_dir "$rd_home_path/ES-DE/downloaded_media/satellaview_plus" + cp -rfv "$satellaview_plus_esde_assets_dir/downloaded_media/satellaview_plus/"* "$rd_home_path/ES-DE/downloaded_media/satellaview_plus/" + ;; + + esac +} + +satellaview_toggle_soundlink(){ + + if [[ "$(get_component_option satellaview_plus satellaview_plus_soundlink_stream_toggle)" == "true" ]]; then + local status="enabled" + else + local status="disabled" + fi + + zenity --question --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK: Satellaview+ - Toggle Soundlink+ Stream" \ + --text="Soundlink+ stream is currently $status.\n\nDo you want to toggle it?" + + # If not cancel + if [[ $? -eq 0 ]]; then + + if [[ "$(get_component_option satellaview_plus satellaview_plus_soundlink_stream_toggle)" == "true" ]]; then + set_component_option "satellaview_plus" "satellaview_plus_soundlink_stream_toggle" "false" && log i "Soundlink+ stream disabled" + zenity --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK: Satellaview+ - Soundlink+ Stream" \ + --text="Soundlink+ stream is now disabled.\n\nYou should start hearing the music within a few seconds after launching a game.\n\nMake sure to have your audio output set up correctly and enjoy the authentic Satellaview+ experience!" + else + set_component_option "satellaview_plus" "satellaview_plus_soundlink_stream_toggle" "true" && log i "Soundlink+ stream enabled" + zenity --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK: Satellaview+ - Soundlink+ Stream" \ + --text="Soundlink+ stream is now enabled.\n\nYou will no longer hear the music from the Soundlink+ stream when launching a game." + fi + + fi +} diff --git a/satellaview_plus/component_launcher.sh b/satellaview_plus/component_launcher.sh new file mode 100755 index 00000000..cf63bdb7 --- /dev/null +++ b/satellaview_plus/component_launcher.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +source /app/libexec/launcher_functions.sh +source /app/libexec/components.sh + +if [[ ! -f "$roms_path/satellaview_plus/bs-x.sfc" ]]; then + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK: Satellaview+ - Error: ROM not found" \ + --text="Satellaview+ ROM not found.\n\nPlease provide the 'bs-x.sfc' ROM file in the\n\n'$roms_path/satellaview_plus'\n\ndirectory and try again.\n\nNote: you would need either an \"English + No DRM\" or \"Japanese + No DRM\" version to work with Satellaview+.\nRun the BIOS Checker Tool in the Configurator for more information about the required ROMs and their checksums." + exit 1 +else + cp "$roms_path/satellaview_plus/bs-x.sfc" "$satellaview_plus_bsx_path/bs-x.sfc" + # TODO: if we need to patch the roms we can do it here +fi + +# Setting component name and path based on the directory name +component_name="$(basename "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")" +component_path="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)" + +log i "RetroDECK is now launching $component_name" +log d "Library path is: $LD_LIBRARY_PATH" + +satellaview_tuner() { + + export LD_LIBRARY_PATH="$component_path/usr/lib/:$component_path/lib:$rd_shared_libs:${DEFAULT_LD_LIBRARY_PATH}" + export QT_PLUGIN_PATH="${QT_PLUGIN_PATH}" + export QT_QPA_PLATFORM_PLUGIN_PATH="${QT_QPA_PLATFORM_PLUGIN_PATH}" + + log i "Opening Satellaview+ Tuner command" + + # We move here because the config file is read from ./ + cd "$satellaview_plus_config_path" + exec "$component_path/AppRun" + +} + +run_satellaview(){ + + export satellaview_plus_download_path="$storage_path/satellaview_plus/" + export satellaview_plus_bsx_path="$storage_path/satellaview_plus/roms/bs-x" + + log i "Running Satellaview+ SNES9X" + + cd "$storage_path/satellaview_plus/" + + # WORKAROUND: the launcher is supposed to move the doiwnloaded satdata into the rom folder (in storage) but is not doing it, + # so we are symlinking it by ourselves before launching the game and cleaning it up later + ln -s "$satellaview_plus_download_path/satdata/"* "$satellaview_plus_bsx_path/" + + if [ "$(get_component_option satellaview_plus satellaview_plus_soundlink_stream_toggle)" == "true" ]; then + + log i "Soundlink+ stream toggle is enabled, starting the stream" + + # Start soundlink+ streaming in the background + ffplay -nodisp -autoexit "$satellaview_soundlink_stream" >/dev/null 2>&1 & + STREAM_PID=$! + + # Auto cleanup the stream when the game is closed + cleanup() { + kill "$STREAM_PID" 2>/dev/null + } + + trap cleanup EXIT INT TERM + + else + log i "Soundlink+ stream toggle is disabled, skipping the stream" + fi + + XDG_CONFIG_HOME="$XDG_CONFIG_HOME/satellaview_plus/snes9x" "$component_path/bin/snes9x-gtk" "$satellaview_plus_bsx_path/bs-x.sfc" + + # Cleanup the symlinks after the game is closed + log d "Cleaning up symlinks in BS-X ROM directory" + find "$satellaview_plus_bsx_path" -type l -delete + +} + +# This function is called by the .sh launchers in the rom folder and it decides which command to run based on the content of the launcher script +if [[ -f "$1" ]]; then + log i "Reading command from file '$1'" + command=$(cat "$1") + log i "Command read from file '$1': $command" +elif [[ -n "$1" ]]; then + log i "\"$1\" appears to be a command argument. Using the argument as command." + command="$1" +else + log w "Command file '$1' not found, falling back to default run command" + command="run" +fi + +case $command in + + tuner|--tuner|-t) + satellaview_tuner + ;; + + run|--run|-r) + run_satellaview + ;; + + help|--help|-h) + log i "Available commands in the launcher script:" + log i " tuner, --tuner, -t: Launch the Satellaview+ Tuner" + log i " run, --run, -r: Run the Satellaview+ SNES9X emulator" + log i " help, --help, -h: Show this help message" + ;; + + *) + log e "Unknown command '$command' in launcher script '$1'" + log w "Falling back to Satellaview+ run command" + run_satellaview + ;; + +esac \ No newline at end of file diff --git a/satellaview_plus/component_manifest.json b/satellaview_plus/component_manifest.json new file mode 100644 index 00000000..29316091 --- /dev/null +++ b/satellaview_plus/component_manifest.json @@ -0,0 +1,146 @@ +{ + "satellaview_plus": { + "name": "Satellaview+", + "core_framework_compatibility": "1", + "component_version": "1.0.0", + "capabilities": ["reset","open"], + "url_rdwiki": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/satellaview/satellaview-guide/", + "url_webpage": "https://satellaviewplus.github.io", + "url_donation_purchase": "", + "url_source": "https://github.com/SatellaviewPlus/Satellaview-", + "description": "Satellaview+ is the revival service to St. Giga's sattelite service, Satellaview, which allows you to play special Satellaview games, read magazines, and more!.", + "system_friendly_name": "Satellaview+", + "component_type": "Emulator", + "system": "satellaview_plus", + "backup_data": { + "core": [ + {"path": "$XDG_CONFIG_HOME/satellaview_plus"} + ] + }, + "component_options": { + "satellaview_plus_soundlink_stream_toggle": "true" + }, + "es_de_config": { + "es_find_rules": { + "emulators": [ + { + "name": "SATELLAVIEW_PLUS", + "description": "Satellaview+ revival service for St. Giga's sattelite service, Satellaview", + "rules": [ + { + "type": "staticpath", + "entries": [ + "%COMPONENT_PATH%/component_launcher.sh" + ] + } + ] + } + ] + }, + "es_systems": [ + { + "name": "satellaview_plus", + "fullname": "Satellaview+", + "path": "%ROMPATH%/satellaview_plus", + "extension": ".sh", + "commands": [ + { + "label": "Snes9x (Satellaview+)", + "command": "%EMULATOR_SATELLAVIEW_PLUS% %ROM%", + "priority": 60 + } + ], + "platform": "satellaview", + "theme": "satellaview" + } + ] + }, + "es_de_gamelist_entries": { + "image_root": "%COMPONENT_PATH%/rd_assets/es_de", + "entries": { + "satellaview_plus_run": { + "system": "satellaview_plus", + "gamelist_data": { + "path": "satellaview_plus_run.sh", + "name": "Start Satellaview+", + "desc": "Launches Satellaview+, allowing you to play Satellaview+ content. Run the Satellaview+ Channel Tuner first to update channels data and see broadcast schedules.", + "players": "1" + } + }, + "satellaview_plus_tuner": { + "system": "satellaview_plus", + "gamelist_data": { + "path": "satellaview_plus_tuner.sh", + "name": "Satellaview+ Channel Tuner", + "desc": "Launches the Satellaview+ Channel Tuner, which allows you to update Satellaview+ channels data and see broadcast schedules. You must run this tool before accessing any Satellaview+ content.", + "genre": "Various / Utilities", + "players": "1" + } + } + } + }, + "configurator_menus": { + "settings": [ + { + "name": "Satellaview SoundLink+ Toggle", + "description": "Enable or disable: Satellaview SoundLink+ streaming while playing.", + "command": { + "zenity": "satellaview_toggle_soundlink" + } + } + ] + }, + "bios": [ + { + "filename": "bs-x.sfc", + "md5": ["96cf17bf589fcbfa6f8de2dc84f19fa2", "d5af0ab2545c053b90ffa0866074ecf1"], + "system": "satellaview_plus", + "paths": [ + "$roms_path/satellaview_plus/" + ], + "description": "Satellaview+ ROM", + "required": "Required" + } + ], + "presets_actions": { + "abxy_button_swap": [ + { + "enabled_states": ["true"], + "setting_name": "A", + "action": "change", + "new_setting_value": "TODO", + "section": "Joypad 0", + "target_file": "$satellaview_plus_snes9x_config", + "defaults_file": "$rd_components/satellaview_plus/rd_config/snes9x-config.ini" + }, + { + "enabled_states": ["true"], + "setting_name": "B", + "action": "change", + "new_setting_value": "TODO", + "section": "Joypad 0", + "target_file": "$satellaview_plus_snes9x_config", + "defaults_file": "$rd_components/satellaview_plus/rd_config/snes9x-config.ini" + }, + { + "enabled_states": ["true"], + "setting_name": "X", + "action": "change", + "new_setting_value": "TODO", + "section": "Joypad 0", + "target_file": "$satellaview_plus_snes9x_config", + "defaults_file": "$rd_components/satellaview_plus/rd_config/snes9x-config.ini" + }, + { + "enabled_states": ["true"], + "setting_name": "Y", + "action": "change", + "new_setting_value": "TODO", + "section": "Joypad 0", + "target_file": "$satellaview_plus_snes9x_config", + "defaults_file": "$rd_components/satellaview_plus/rd_config/snes9x-config.ini" + } + ] + } + } +} diff --git a/satellaview_plus/component_recipe.json b/satellaview_plus/component_recipe.json new file mode 100755 index 00000000..46ece07d --- /dev/null +++ b/satellaview_plus/component_recipe.json @@ -0,0 +1,100 @@ +{ + "satellaview_plus": [ + { + "source_url": "https://satellaview-plus.com/client/linux-x64/Satellaview+_{VERSION}.AppImage", + "source_type": "http", + "version": "$SATELLAVIEW_PLUS_DESIRED_VERSION", + "extraction_type": "appimage", + "assets": [ + { + "type": "file", + "source": "AppRun", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "file", + "source": "AppRun.env", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "dir", + "source": "lib", + "dest": "lib" + }, + { + "type": "dir", + "source": "runtime", + "dest": "runtime" + }, + { + "type": "file", + "source": "SatellaviewPlusV5.png", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "dir", + "source": "usr", + "dest": "usr" + }, + { + "type": "dir", + "source": "$REPO_ROOT/$COMPONENT_NAME/rd_assets/rd_config", + "dest": "rd_config" + }, + { + "type": "dir", + "source": "$REPO_ROOT/$COMPONENT_NAME/rd_assets/es-de", + "dest": "es-de" + }, + { + "type": "file", + "source": "$REPO_ROOT/$COMPONENT_NAME/component_functions.sh", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "file", + "source": "$REPO_ROOT/$COMPONENT_NAME/component_launcher.sh", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "file", + "source": "$REPO_ROOT/$COMPONENT_NAME/component_manifest.json", + "dest": "$COMPONENT_ARTIFACT_ROOT" + }, + { + "type": "file", + "source": "$REPO_ROOT/$COMPONENT_NAME/component_recipe.json", + "dest": "$COMPONENT_ARTIFACT_ROOT" + } + ] + }, + { + "source_url": "https://github.com/snes9xgit/snes9x/releases/download/{VERSION}/Snes9x-{VERSION}-x86_64.AppImage", + "version": "$SATELLAVIEW_PLUS_SNES9X_DESIRED_VERSION", + "source_type": "github-release", + "extraction_type": "appimage", + "assets": [ + { + "type": "dir", + "source": "usr/bin", + "dest": "bin" + }, + { + "type": "dir", + "source": "usr/lib", + "dest": "lib" + }, + { + "type": "dir", + "source": "$REPO_ROOT/$COMPONENT_NAME/rd_assets/lib", + "dest": "lib" + }, + { + "type": "dir", + "source": "usr/share", + "dest": "share" + } + ] + } + ] +} diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_run.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_run.png new file mode 100644 index 00000000..eb459567 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_run.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_tuner.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_tuner.png new file mode 100644 index 00000000..1f39b319 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/covers/satellaview_plus_tuner.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_run.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_run.png new file mode 100644 index 00000000..59b63a80 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_run.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_tuner.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_tuner.png new file mode 100644 index 00000000..59b63a80 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/marquees/satellaview_plus_tuner.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/miximages/satellaview_plus_run.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/miximages/satellaview_plus_run.png new file mode 100644 index 00000000..0b176a95 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/miximages/satellaview_plus_run.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/physicalmedia/satellaview_plus_run.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/physicalmedia/satellaview_plus_run.png new file mode 100644 index 00000000..3dbb542d Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/physicalmedia/satellaview_plus_run.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/screenshots/satellaview_plus_run.png b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/screenshots/satellaview_plus_run.png new file mode 100644 index 00000000..2fe2cfbd Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/screenshots/satellaview_plus_run.png differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_run.mp4 b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_run.mp4 new file mode 100644 index 00000000..653beadb Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_run.mp4 differ diff --git a/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_tuner.mp4 b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_tuner.mp4 new file mode 100644 index 00000000..feba4232 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/downloaded_media/satellaview_plus/videos/satellaview_plus_tuner.mp4 differ diff --git a/satellaview_plus/rd_assets/es-de/img_src/tuner_boxart.xcf b/satellaview_plus/rd_assets/es-de/img_src/tuner_boxart.xcf new file mode 100644 index 00000000..9fc15839 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/img_src/tuner_boxart.xcf differ diff --git a/satellaview_plus/rd_assets/es-de/img_src/tuner_screenshot.xcf b/satellaview_plus/rd_assets/es-de/img_src/tuner_screenshot.xcf new file mode 100644 index 00000000..19cdc2b5 Binary files /dev/null and b/satellaview_plus/rd_assets/es-de/img_src/tuner_screenshot.xcf differ diff --git a/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_run.sh b/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_run.sh new file mode 100755 index 00000000..e5224d53 --- /dev/null +++ b/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_run.sh @@ -0,0 +1 @@ +run \ No newline at end of file diff --git a/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_tuner.sh b/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_tuner.sh new file mode 100755 index 00000000..028d5f36 --- /dev/null +++ b/satellaview_plus/rd_assets/es-de/launchers/satellaview_plus_tuner.sh @@ -0,0 +1 @@ +tuner \ No newline at end of file diff --git a/satellaview_plus/rd_assets/lib/libgiomm-2.4.so.1 b/satellaview_plus/rd_assets/lib/libgiomm-2.4.so.1 new file mode 100755 index 00000000..36298ddf Binary files /dev/null and b/satellaview_plus/rd_assets/lib/libgiomm-2.4.so.1 differ diff --git a/satellaview_plus/rd_assets/lib/libglibmm-2.4.so.1 b/satellaview_plus/rd_assets/lib/libglibmm-2.4.so.1 new file mode 100755 index 00000000..087c881c Binary files /dev/null and b/satellaview_plus/rd_assets/lib/libglibmm-2.4.so.1 differ diff --git a/satellaview_plus/rd_assets/rd_config/config.json b/satellaview_plus/rd_assets/rd_config/config.json new file mode 100644 index 00000000..e612bfe9 --- /dev/null +++ b/satellaview_plus/rd_assets/rd_config/config.json @@ -0,0 +1,6 @@ +{ + "DownloadLocation": "/home/deck/retrodeck/storage/satellaview_plus", + "Emulator": "SNES9X", + "StartMinimized": false, + "ExitOnClose": true +} \ No newline at end of file diff --git a/satellaview_plus/rd_assets/rd_config/snes9x.conf b/satellaview_plus/rd_assets/rd_config/snes9x.conf new file mode 100644 index 00000000..e7ac1a58 --- /dev/null +++ b/satellaview_plus/rd_assets/rd_config/snes9x.conf @@ -0,0 +1,440 @@ +# Config file output by snes9x +# Mon Apr 27 20:39:22 2026 + +[Input] +ControllerPort0 = joypad +ControllerPort1 = joypad +JoystickThreshold = 40 + +[OpenGL] +EnableCustomShaders = false +ReduceInputLag = false +VSync = true +ShaderFile = + +[Hacks] +EchoBufferHack = false # Prevents echo buffer from overwriting APU RAM +OverclockCPU = false +RemoveSpriteLimit = false +SoundInterpolationMethod = 2 # 0: None, 1: Linear, 2: Gaussian (what the hardware uses), 3: Cubic, 4: Sinc +SuperFXClockMultiplier = 100 + +[Behavior] +CurrentSaveSlot = 0 +DefaultESCKeyBehavior = 1 +PauseEmulationWhenFocusLost = false +PreventScreensaver = false +RewindBufferSize = 0 # Amount of memory (in MB) to use for rewinding +RewindGranularity = 5 # Only save rewind snapshots every N frames +UseModalDialogs = true + +[Files] +CheatDirectory = +ExportDirectory = +LastDirectory = +LastShaderDirectory = +PatchDirectory = +SRAMDirectory = +SaveStateDirectory = + +[Netplay] +ActAsServer = false +DefaultPort = 6096 +LastUsedPort = 6096 +MaxFrameLoss = 10 +SendROM = false +UseResetToSync = true +LastUsedHost = +LastUsedROM = + +[Emulation] +AllowDPadContradictions = false # Allow the D-Pad to press both up + down at the same time, or left + right +BlockInvalidVRAMAccess = true +DisplayFrameRate = false +DisplayIndicators = false +DisplayPressedKeys = false +DisplayTime = false +EmulateTransparency = true +SaveSRAMEveryNSeconds = 0 +SpeedControlMethod = 0 # 0: Time the frames to 50 or 60Hz, 1: Same, but skip frames if too slow, 2: Synchronize to the sound buffer, 3: Unlimited, except potentially by vsync + +[Sound] +AutomaticInputRate = true # Guess input rate by asking the monitor what its refresh rate is +BufferSize = 48 # Buffer size in milliseconds +Driver = 3 +DynamicRateControl = false +DynamicRateControlLimit = 5 +InputRate = 31950 +MuteSound = false +MuteSoundDuringTurbo = false +PlaybackRate = 7 # 1: 8000Hz, 2: 11025Hz, 3: 16000Hz, 4: 22050Hz, 5: 32000Hz, 6: 44100Hz, 7: 48000Hz + +[Window State] +CurrentDisplayTab = 0 +EnableIcons = true +Fullscreen = true +MainHeight = 251 +MainWidth = 277 +PreferencesHeight = -1 +PreferencesWidth = -1 +ShaderParametersHeight = -1 +ShaderParametersWidth = -1 +UIVisible = true + +[NTSC] +Artifacts = 0,000000 +Bleed = 0,000000 +Brightness = 0,000000 +Contrast = 0,000000 +Fringing = 0,000000 +Gamma = 0,000000 +Hue = 0,000000 +MergeFields = true +Resolution = 0,000000 +Saturation = 0,000000 +ScanlineIntensity = 1 +Sharpness = 0,000000 + +[Display] +AspectRatio = 2 # 0: uncorrected, 1: uncorrected integer scale, 2: 4:3, 3: 4/3 integer scale, 4: NTSC/PAL, 5: NTSC/PAL integer scale +AutoVRR = false # Automatically use the best settings for variable sync in fullscreen mode +BilinearFilter = false # Smoothes scaled image +ChangeDisplayResolution = false # Set the resolution in fullscreen mode +ForceInvertedByteOrder = false +FullscreenOnOpen = true # Set the screen resolution after opening a ROM +HardwareAcceleration = vulkan # none, opengl, xv, vulkan +HiresEffect = 1 # 0: Downscale to low-res, 1: Leave as-is, 2: Upscale low-res screens +MaintainAspectRatio = true # Resize the screen to the proportions set by aspect ratio option +Multithreading = false # Apply filters using multiple threads +NumberOfThreads = 2 +OSDSize = 24 # Size of on-screen display elements. Default: 24pt +ScaleToFit = true # Scale the image to fit the window size +ScanlineFilterIntensity = 0 # 0: 0%, 1: 12.5%, 2: 25%, 3: 50%, 4: 100% +ShowOverscanArea = false +SoftwareScaleFilter = 0 # Build-specific number of filter used for software scaling +SplashBackground = 5 # 0: Black, 1: Color bars, 2: Pattern, 3: Blue, 4: Default +VideoMode = 0 # Platform-specific video mode number + +[Joypad 0] +A = Keyboard z +B = Keyboard x +Down = Keyboard Down +L = Keyboard q +Left = Keyboard Left +R = Keyboard w +Right = Keyboard Right +Select = Keyboard Shift_R +Start = Keyboard Return +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Keyboard Up +X = Keyboard a +Y = Keyboard s + +[Joypad 1] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 2] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 3] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 4] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 5] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 6] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 7] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 8] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Joypad 9] +A = Unset +B = Unset +Down = Unset +L = Unset +Left = Unset +R = Unset +Right = Unset +Select = Unset +Start = Unset +Sticky A = Unset +Sticky B = Unset +Sticky L = Unset +Sticky R = Unset +Sticky X = Unset +Sticky Y = Unset +Turbo A = Unset +Turbo B = Unset +Turbo L = Unset +Turbo R = Unset +Turbo X = Unset +Turbo Y = Unset +Up = Unset +X = Unset +Y = Unset + +[Shortcuts] +BeginRecordingMovie = Unset +DecFrameRate = Unset +DecFrameTime = Unset +EmuTurbo = Unset +EndRecordingMovie = Unset +GTK_fullscreen = Unset +GTK_grab_mouse = Unset +GTK_open_rom = Unset +GTK_pause = Keyboard Ctrl+p +GTK_quit = Unset +GTK_rewind = Unset +GTK_save_spc = Unset +GTK_seek_to_frame = Unset +GTK_state_decrement = Unset +GTK_state_decrement_load = Unset +GTK_state_increment = Unset +GTK_state_increment_save = Unset +GTK_state_load_current = Unset +GTK_state_save_current = Unset +GTK_swap_controllers = Unset +IncFrameRate = Unset +IncFrameTime = Unset +LoadMovie = Unset +QuickLoad000 = Unset +QuickLoad001 = Unset +QuickLoad002 = Unset +QuickLoad003 = Unset +QuickLoad004 = Unset +QuickLoad005 = Unset +QuickLoad006 = Unset +QuickLoad007 = Unset +QuickLoad008 = Unset +QuickLoad009 = Unset +QuickSave000 = Unset +QuickSave001 = Unset +QuickSave002 = Unset +QuickSave003 = Unset +QuickSave004 = Unset +QuickSave005 = Unset +QuickSave006 = Unset +QuickSave007 = Unset +QuickSave008 = Unset +QuickSave009 = Unset +Reset = Unset +Screenshot = Unset +SoftReset = Unset +SoundChannel0 = Unset +SoundChannel1 = Unset +SoundChannel2 = Unset +SoundChannel3 = Unset +SoundChannel4 = Unset +SoundChannel5 = Unset +SoundChannel6 = Unset +SoundChannel7 = Unset +SoundChannelsOn = Unset +ToggleBG0 = Unset +ToggleBG1 = Unset +ToggleBG2 = Unset +ToggleBG3 = Unset +ToggleBackdrop = Unset +ToggleEmuTurbo = Unset +ToggleSprites = Unset