This commit is contained in:
Rekku 2024-09-09 14:28:35 +01:00
commit c59e8a6ddd
9 changed files with 251 additions and 101 deletions

View file

@ -849,7 +849,7 @@
}
]
},
"picodrive_libetro": {
"picodrive_libretro": {
"name": "PicoDrive",
"description": "SEGA MS/MD/CD/32X Libretro Core",
"system": [
@ -866,7 +866,7 @@
}
]
},
"genesisplusgx_libetro": {
"genesisplusgx_libretro": {
"name": "Genesis Plus GX",
"description": "SEGA MS/GG/MD/CD Libretro Core",
"system": [
@ -883,7 +883,7 @@
}
]
},
"genesisplusgxwide_libetro": {
"genesisplusgxwide_libretro": {
"name": "Genesis Plus GX Wide",
"description": "SEGA MS/GG/MD/CD Libretro Core for Wide Screen",
"system": [
@ -899,7 +899,7 @@
}
]
},
"mupen64plus-next_libetro": {
"mupen64plus-next_libretro": {
"name": "Mupen64Plus-Next",
"description": "Nintendo 64 Libretro Core",
"system": "n64",
@ -911,7 +911,7 @@
}
]
},
"snes9x-current_libetro": {
"snes9x-current_libretro": {
"name": "Snes9x - Current",
"description": "Super Nintendo Libretro Core",
"system": "snes",
@ -924,7 +924,7 @@
}
]
},
"gambatte_libetro": {
"gambatte_libretro": {
"name": "Gambatte",
"description": "Game Boy/Color Libretro Core",
"system": [
@ -939,7 +939,7 @@
}
]
},
"mgba_libetro": {
"mgba_libretro": {
"name": "mGBA",
"description": "Game Boy Advance Libretro Core",
"system": "gba",
@ -960,7 +960,8 @@
"system": [
"arcade"
],
"launch": "mame"
"launch": "mame",
"launch-args": "-inipath /var/config/mame/ini -rompath $(dirname \"$game\") $game"
},
"citra": {
"description": "Citra Nintendo 3DS Emulator (via Ponzu)",
@ -976,19 +977,19 @@
}
]
},
"ruffle": {
"description": "Flash Games emulator",
"name" : "Ruffle",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
"system" : "flash",
"launch": "ruffle-rd-wrapper.sh"
},
"ruffle": {
"description": "Flash Games emulator",
"name" : "Ruffle",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
"system" : "flash",
"launch": "ruffle-rd-wrapper.sh"
},
"melonds": {
"description": "MelonDS Nintendo DS Emulator",
"name": "melonds",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/melonds/melonds-guide/",
"system": "nds",
"launch": "MelonDS"
"launch": "melonDS"
},
"pcsx2": {
"name": "pcsx2",
@ -996,6 +997,7 @@
"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,
@ -1008,6 +1010,7 @@
"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": [
{
@ -1034,7 +1037,8 @@
"description": "Vita3K PSVita Emulator",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/vita3k/vita3k-guide/",
"system": "psvita",
"launch": "Vita3K"
"launch": "Vita3K",
"launch-args": "-r $game.psvita"
},
"rpcs3": {
"name": "RPCS3",
@ -1042,6 +1046,7 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/rpcs3/rpcs3-guide/",
"system": "ps3",
"launch": "rpcs3",
"launch-override": "cd $(dirname $game) && rpcs3 $game",
"properties": [
{
"ask_to_exit": true
@ -1061,6 +1066,7 @@
"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
},
@ -1069,6 +1075,7 @@
"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"
@ -1088,6 +1095,7 @@
"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"
],
@ -1104,6 +1112,7 @@
"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,
@ -1116,7 +1125,8 @@
"name": "xemu",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/xemu/xemu-guide/",
"system": "xbox",
"launch": "xemu"
"launch": "xemu",
"launch-args": "-dvd_path $game"
},
"es-de": {
"description": "ES-DE Emulation Frontend",

View file

@ -132,8 +132,9 @@ 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
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build, always perform post_update commands for current version
# 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
if [[ "$(echo $hard_version | cut -d'-' -f2)" == "$new_version" ]]; then
is_newer_version="true"
fi

View file

@ -891,3 +891,125 @@ 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

@ -18,19 +18,21 @@ for i in "$@"; do
case $i in
-h*|--help*)
echo "RetroDECK v""$version"
echo "
echo -e "
Usage:
flatpak run [FLATPAK-RUN-OPTION] net.retrodeck-retrodeck [ARGUMENTS]
Arguments:
-h, --help Print this help
-v, --version Print RetroDECK version
--info-msg Print paths and config informations
--configurator Starts the RetroDECK Configurator
--compress-one <file> Compresses target file to a compatible format
--compress-all <format> Compresses all supported games into a compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\".
--reset-component <component> Reset one or more component or emulator configs to the default values
--reset-retrodeck Starts the initial RetroDECK installer (backup your data first!)
-h, --help \t Print this help
-v, --version \t Print RetroDECK version
--info-msg \t Print paths and config informations
--configurator \t Starts the RetroDECK Configurator
--compress-one <file> \t Compresses target file to a compatible format
--compress-all <format> \t Compresses all supported games into a compatible format.\n\t\t\t\t\t\t Available formats are \"chd\", \"zip\", \"rvz\" and \"all\".
--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.
For flatpak run specific options please run: flatpak run -h
@ -42,6 +44,11 @@ https://retrodeck.net
echo "RetroDECK v$version"
exit
;;
--run*)
shift # Remove --run
run_game "$@"
exit
;;
--info-msg*)
echo "RetroDECK v$version"
echo "RetroDECK config file is in: $rd_conf"
@ -199,3 +206,4 @@ fi
# Normal Startup
start_retrodeck
quit_retrodeck

View file

@ -10,7 +10,6 @@ var content = null
func _ready():
lbhide.visible=false
rbhide.visible=false
print (bios_type)
$".".theme = custom_theme
# TODO this alowes copy and paste from RTB in logs?
if (content != null and bios_type > 0):

View file

@ -11,9 +11,6 @@ var custom_theme: Theme = $".".theme
var log_option: OptionButton
var tab_container: TabContainer
var anim_logo: AnimatedSprite2D
var rd_logs: String
var rd_version: String
var gc_version: String
var a_button_texture: Texture2D = load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0042.png")
var b_button_texture: Texture2D = load("res://assets/icons/kenney_input-prompts-pixel-16/Tiles/tile_0043.png")
var app_data := AppData.new()
@ -23,16 +20,12 @@ func _ready():
_connect_signals()
_play_main_animations()
#%locale_option.selected = class_functions.map_locale_id(OS.get_locale_language())
#display_json_data()
var config_file_path = "/var/config/retrodeck/retrodeck.cfg"
var json_file_path = "/var/config/retrodeck/retrodeck.json"
var config = data_handler.parse_config_to_json(config_file_path)
data_handler.config_save_json(config, json_file_path)
rd_logs = config["paths"]["logs_folder"]
rd_version = config["version"]
gc_version = ProjectSettings.get_setting("application/config/version")
%rd_title.text+= "\n " + rd_version + "\nConfigurator\n " + gc_version
#class_functions.logger()
%rd_title.text += class_functions.read_cfg()
class_functions.log_parameters[2] = class_functions.log_text + "started configurator"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
print (class_functions.rd_log)
#var log_file = class_functions.import_text_file(rd_logs +"/retrodeck.log")
#for id in config.paths:
# var path_data = config.paths[id]
@ -63,6 +56,8 @@ func _input(event):
_exit()
func _exit():
class_functions.log_parameters[2] = class_functions.log_text + "exited configurator"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
get_tree().quit()
@ -90,17 +85,17 @@ func _load_log(index: int) -> void:
1:
class_functions.log_parameters[2] = class_functions.log_text + "Loading RetroDeck log"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
log_content = class_functions.import_text_file(rd_logs +"/retrodeck.log")
log_content = class_functions.import_text_file(class_functions.rd_log_folder +"/retrodeck.log")
load_popup("RetroDeck Log", "res://components/logs_view/logs_popup_content.tscn", log_content)
2:
class_functions.log_parameters[2] = class_functions.log_text + "Loading ES-DE log"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
log_content = class_functions.import_text_file(rd_logs +"/ES-DE/es_log.txt")
log_content = class_functions.import_text_file(class_functions.rd_log_folder +"/ES-DE/es_log.txt")
load_popup("ES-DE Log", "res://components/logs_view/logs_popup_content.tscn",log_content)
3:
class_functions.log_parameters[2] = class_functions.log_text + "Loading RetroArch log"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
log_content = class_functions.import_text_file(rd_logs +"/retroarch/logs/log.txt")
log_content = class_functions.import_text_file(class_functions.rd_log_folder +"/retroarch/logs/log.txt")
load_popup("Retroarch Log", "res://components/logs_view/logs_popup_content.tscn",log_content)
func _play_main_animations() -> void:
@ -201,9 +196,7 @@ func _on_bios_button_expert_pressed():
func _on_exit_button_pressed():
_play_main_animations()
class_functions.log_parameters[2] = class_functions.log_text + "Exited"
log_results = class_functions.execute_command(class_functions.wrapper_command, class_functions.log_parameters, false)
class_functions._exit()
_exit()
func _on_locale_selected(index):
match index:

View file

@ -1087,7 +1087,7 @@ cache/0/16/0/glyphs/95/uv_rect = Rect2(92, 148, 6, 1)
cache/0/16/0/glyphs/95/texture_idx = 0
cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0)
[sub_resource type="Image" id="Image_t7efe"]
[sub_resource type="Image" id="Image_62emc"]
data = {
"data": PackedByteArray("4ODg4ODg4OD//////////+Dg4ODg4ODg///////////g4ODg4ODg4P//////////4ODg4ODg4OD//////////+Dg4ODg4ODg///////////g4ODg4ODg4P//////////4ODg4ODg4OD//////////+Dg4ODg4ODg/////////////////////+Dg4ODg4ODg///////////g4ODg4ODg4P//////////4ODg4ODg4OD//////////+Dg4ODg4ODg///////////g4ODg4ODg4P//////////4ODg4ODg4OD//////////+Dg4ODg4ODg///////////g4ODg4ODg4A=="),
"format": "Lum8",
@ -1097,9 +1097,9 @@ data = {
}
[sub_resource type="ImageTexture" id="447"]
image = SubResource("Image_t7efe")
image = SubResource("Image_62emc")
[sub_resource type="Image" id="Image_kmit8"]
[sub_resource type="Image" id="Image_43yh4"]
data = {
"data": PackedByteArray("AAQACgARABkAHwAiACQAJAAkACQAIgAfABkAEQAKAAQACgAVACUANAA/AEYARwBIAEgARwBGAD8ANAAlABUACgARACU/d1rvVv9W/1b/Vv9W/1b/Vv9W/1rvP3cAJQARABkANFnvSP9E/0P/Q/9D/0P/Q/9D/0T/SP9Z7wA0ABkAHwA/VP9D/0P/Q/9D/0P/Q/9D/0P/Q/9D/1T/AD8AHwAiAEZS/0L/Qv9C/0L/Qv9C/0L/Qv9C/0L/Uv8ARgAiACQAR1H/QP9A/0D/QP9A/0D/QP9A/0D/QP9R/wBHACQAJABIT/8//z//P/8//z//P/8//z//P/8//0//AEgAJAAkAEhN/z7/Pv8+/z7/Pv8+/z7/Pv8+/z7/Tf8ASAAkACQAR0z/Pf89/z3/Pf89/z3/Pf89/z3/Pf9M/wBHACQAIgBGSv87/zv/O/87/zv/O/87/zv/O/87/0r/AEYAIgAfAD9J/zr/Ov86/zr/Ov86/zr/Ov86/zr/Sf8APwAfABkANEvvPf85/zn/Of85/zn/Of85/zn/Pf9L7wA0ABkAEQAlNXdK70f/Rv9G/0b/Rv9G/0b/R/9K7TV3ACUAEQAKABUAJQA0AD8ARgBHAEgASABHAEYAPwA0ACUAFQAKAAQACgARABkAHwAiACQAJAAkACQAIgAfABkAEQAKAAQ="),
"format": "LumAlpha8",
@ -1109,7 +1109,7 @@ data = {
}
[sub_resource type="ImageTexture" id="53"]
image = SubResource("Image_kmit8")
image = SubResource("Image_43yh4")
[sub_resource type="StyleBoxTexture" id="54"]
content_margin_left = 6.0
@ -1123,7 +1123,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_565c1"]
[sub_resource type="Image" id="Image_g8qbb"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEeMvw5HjL85R4y/aEeMv3pHjL97R4y/e0eMv3tHjL97R4y/ekeMv2hHjL85R4y/DgAAAAAAAAAAAAAAAAAAAABHjL86R4y/dEeMvxBHjL8IR4y/CEeMvwhHjL8IR4y/CEeMvwhHjL8QR4y/dEeMvzoAAAAAAAAAAAAAAAAAAAAAR4y/aUeMvw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEeMvw9HjL9pAAAAAAAAAAAAAAAAAAAAAEeMv3tHjL8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHjL8GR4y/ewAAAAAAAAAAAAAAAAAAAABHjL97R4y/CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR4y/CEeMv3sAAAAAAAAAAAAAAAAAAAAAR4y/e0eMvwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEeMvwhHjL97AAAAAAAAAAAAAAAAAAAAAEeMv3tHjL8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHjL8IR4y/ewAAAAAAAAAAAAAAAAAAAABHjL97R4y/CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR4y/CEeMv3sAAAAAAAAAAAAAAAAAAAAAR4y/e0eMvwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEeMvwZHjL97AAAAAAAAAAAAAAAAAAAAAEeMv2lHjL8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHjL8OR4y/aQAAAAAAAAAAAAAAAAAAAABHjL86R4y/dUeMvw9HjL8IR4y/CEeMvwhHjL8IR4y/CEeMvwhHjL8RR4y/dEeMvzoAAAAAAAAAAAAAAAAAAAAAR4y/DkeMvzpHjL9oR4y/ekeMv3tHjL97R4y/e0eMv3tHjL96R4y/aEeMvzlHjL8OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -1133,7 +1133,7 @@ data = {
}
[sub_resource type="ImageTexture" id="56"]
image = SubResource("Image_565c1")
image = SubResource("Image_g8qbb")
[sub_resource type="StyleBoxTexture" id="57"]
content_margin_left = 6.0
@ -1147,7 +1147,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_q0vn6"]
[sub_resource type="Image" id="Image_8hsq5"]
data = {
"data": PackedByteArray("AAAABAAAAAoAAAARAAAAGQAAAB8AAAAiAAAAJAAAACQAAAAkAAAAJAAAACIAAAAfAAAAGQAAABEAAAAKAAAABAAAAAoAAAAVAAAAJQAAADQAAAA/AAAARgAAAEcAAABIAAAASAAAAEcAAABGAAAAPwAAADQAAAAlAAAAFQAAAAoAAAARAAAAJUJAS3dfWmzvW1do/1pWZ/9aVmf/WlZn/1pWZ/9aVmf/WlZn/1tXaP9fWmzvQkBLdwAAACUAAAARAAAAGQAAADRfWmvvTUpX/0lGUv9IRVH/SEVR/0hFUf9IRVH/SEVR/0hFUf9JRlL/TUpX/19aa+8AAAA0AAAAGQAAAB8AAAA/W1dm/0lGUv9IRVH/SEVR/0hFUf9IRVH/SEVR/0hFUf9IRVH/SEVR/0lGUv9bV2b/AAAAPwAAAB8AAAAiAAAARllVZP9HRFD/R0RQ/0dEUP9HRFD/R0RQ/0dEUP9HRFD/R0RQ/0dEUP9HRFD/WVVk/wAAAEYAAAAiAAAAJAAAAEdYVGT/RkNQ/0ZDUP9GQ1D/RkNQ/0ZDUP9GQ1D/RkNQ/0ZDUP9GQ1D/RkNQ/1hUZP8AAABHAAAAJAAAACQAAABIVlNj/0VCT/9FQk//RUJP/0VCT/9FQk//RUJP/0VCT/9FQk//RUJP/0VCT/9WU2P/AAAASAAAACQAAAAkAAAASFZTYv9FQk7/RUJO/0VCTv9FQk7/RUJO/0VCTv9FQk7/RUJO/0VCTv9FQk7/VlNi/wAAAEgAAAAkAAAAJAAAAEdVUWL/REFO/0RBTv9EQU7/REFO/0RBTv9EQU7/REFO/0RBTv9EQU7/REFO/1VRYv8AAABHAAAAJAAAACIAAABGVVFg/0RBTf9EQU3/REFN/0RBTf9EQU3/REFN/0RBTf9EQU3/REFN/0RBTf9VUWD/AAAARgAAACIAAAAfAAAAP1VRYP9EQU3/Q0BM/0NATP9DQEz/Q0BM/0NATP9DQEz/Q0BM/0NATP9EQU3/VVFg/wAAAD8AAAAfAAAAGQAAADRWU2TvR0NR/0M/Tf9CP0z/Qj9M/0I/TP9CP0z/Qj9M/0I/TP9DP03/R0NR/1dTZO8AAAA0AAAAGQAAABEAAAAlPjtGd1dTY+9TUF//U09e/1NPXv9TT17/U09e/1NPXv9TT17/U1Bf/1dTY+0+O0Z3AAAAJQAAABEAAAAKAAAAFQAAACUAAAA0AAAAPwAAAEYAAABHAAAASAAAAEgAAABHAAAARgAAAD8AAAA0AAAAJQAAABUAAAAKAAAABAAAAAoAAAARAAAAGQAAAB8AAAAiAAAAJAAAACQAAAAkAAAAJAAAACIAAAAfAAAAGQAAABEAAAAKAAAABA=="),
"format": "RGBA8",
@ -1157,7 +1157,7 @@ data = {
}
[sub_resource type="ImageTexture" id="59"]
image = SubResource("Image_q0vn6")
image = SubResource("Image_8hsq5")
[sub_resource type="StyleBoxTexture" id="60"]
content_margin_left = 6.0
@ -1175,7 +1175,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_s5c2d"]
[sub_resource type="Image" id="Image_xq8h4"]
data = {
"data": PackedByteArray("AAAABAAAAAoAAAARAAAAGQAAAB8AAAAiAAAAJAAAACQAAAAkAAAAJAAAACIAAAAfAAAAGQAAABEAAAAKAAAABAAAAAoAAAAVAAAAJQAAADQAAAA/AAAARgAAAEcAAABIAAAASAAAAEcAAABGAAAAPwAAADQAAAAlAAAAFQAAAAoAAAARAAAAJTw6RHdWU2HvUlBd/1FPXf9RT13/UU9d/1FPXf9RT13/UU9d/1JQXf9WU2HvPDpEdwAAACUAAAARAAAAGQAAADRWUmDvRkJO/0I+Sv9BPkn/QT5J/0E+Sf9BPkn/QT5J/0E+Sf9CPkr/RkJO/1ZSYO8AAAA0AAAAGQAAAB8AAAA/UU5b/0E+Sf9APkj/QD5I/0A+SP9APkj/QD5I/0A+SP9APkj/QD5I/0E+Sf9RTlv/AAAAPwAAAB8AAAAiAAAARk9MWf8/PUf/Pz1H/z89R/8/PUf/Pz1H/z89R/8/PUf/Pz1H/z89R/8/PUf/T0xZ/wAAAEYAAAAiAAAAJAAAAEdOSlj/PjtG/z47Rv8+O0b/PjtG/z47Rv8+O0b/PjtG/z47Rv8+O0b/PjtG/05KWP8AAABHAAAAJAAAACQAAABIS0lV/zw6RP88OkT/PDpE/zw6RP88OkT/PDpE/zw6RP88OkT/PDpE/zw6RP9LSVX/AAAASAAAACQAAAAkAAAASEpHVP87OUP/OzlD/zs5Q/87OUP/OzlD/zs5Q/87OUP/OzlD/zs5Q/87OUP/SkdU/wAAAEgAAAAkAAAAJAAAAEdJRlP/OjhC/zo4Qv86OEL/OjhC/zo4Qv86OEL/OjhC/zo4Qv86OEL/OjhC/0lGU/8AAABHAAAAJAAAACIAAABGR0VQ/zk3QP85N0D/OTdA/zk3QP85N0D/OTdA/zk3QP85N0D/OTdA/zk3QP9HRVD/AAAARgAAACIAAAAfAAAAP0dDUP84NT//ODU//zg1P/84NT//ODU//zg1P/84NT//ODU//zg1P/84NT//R0NQ/wAAAD8AAAAfAAAAGQAAADRHRFLvOjhC/zY0Pv82ND7/NjQ+/zY0Pv82ND7/NjQ+/zY0Pv82ND7/OjhC/0dEUu8AAAA0AAAAGQAAABEAAAAlMzE5d0dEUO9EQk3/REFM/0RBTP9EQUz/REFM/0RBTP9EQUz/REJN/0dEUe0zMTl3AAAAJQAAABEAAAAKAAAAFQAAACUAAAA0AAAAPwAAAEYAAABHAAAASAAAAEgAAABHAAAARgAAAD8AAAA0AAAAJQAAABUAAAAKAAAABAAAAAoAAAARAAAAGQAAAB8AAAAiAAAAJAAAACQAAAAkAAAAJAAAACIAAAAfAAAAGQAAABEAAAAKAAAABA=="),
"format": "RGBA8",
@ -1185,7 +1185,7 @@ data = {
}
[sub_resource type="ImageTexture" id="62"]
image = SubResource("Image_s5c2d")
image = SubResource("Image_xq8h4")
[sub_resource type="StyleBoxTexture" id="63"]
content_margin_left = 6.0
@ -1199,7 +1199,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_rqfhb"]
[sub_resource type="Image" id="Image_33w4k"]
data = {
"data": PackedByteArray("AAAABAAAAAoAAAARAAAAGQAAAB8AAAAiAAAAJAAAACQAAAAkAAAAJAAAACIAAAAfAAAAGQAAABEAAAAKAAAABAAAAAsAAAAWAAAAJwAAADYAAABBAAAASQAAAEoAAABLAAAASwAAAEoAAABJAAAAQQAAADYAAAAnAAAAFgAAAAsAAAATAAAAKTEvN4BGQ0/xQ0BM/0JAS/9CQEv/QkBL/0JAS/9CQEv/QkBL/0NATP9GQ0/xMS83fwAAACkAAAATAAAAHgAAAD1HRFDyOjhB/wsLDP8LCgz/CwoM/wsKDP8LCgz/CwsM/wsLDP8LCwz/OjhB/0dEUPIAAAA9AAAAHgAAACcAAABNREJO/w8OEf8PDhH/Dw4R/w8OEf8PDhH/Dw4R/w8OEf8PDhH/Dw4R/w8OEf9EQk7/AAAATQAAACcAAAAsAAAAWEZCT/8UExb/ExIW/xMSFv8UExb/ExIW/xQTFv8UExb/FBMW/xQTFv8TEhb/RkJP/wAAAFgAAAAsAAAAMgAAAF1HRVD/GBcb/xgXG/8YFxv/GBcb/xgXG/8YFxv/GBcb/xkYHP8YFxv/GBcb/0dFUP8AAABdAAAAMgAAADMAAABjSUZT/x0cIf8dHCH/HRwh/x0cIf8dHCH/HRwh/x0cIf8dHCH/HRwh/x0cIf9JRlP/AAAAYwAAADMAAAA2AAAAZkpHVP8iISf/IiEn/yIhJ/8iISf/IiEn/yIhJ/8iISf/IiEn/yIhJ/8iISf/SkdU/wAAAGYAAAA2AAAAOQAAAGlLSVX/JyYt/ycmLf8nJi3/JyYt/ycmLf8nJi3/JyYt/ygmLf8nJi3/KCYt/0tJVf8AAABpAAAAOQAAADgAAABsTkpY/y0rM/8tKzP/LSsz/y0rM/8tKzP/LSsz/y0rM/8tKzP/LSsz/y0rM/9OSlj/AAAAbAAAADgAAAA1AAAAZVBNWv8zMTr/MzE5/zMxOf8zMTn/MzE5/zMxOf8zMTn/MzE5/zMxOf8zMTr/UE1a/wAAAGUAAAA1AAAALQAAAFlVUl/8RUJN/zk3QP84N0D/OTdA/zg3QP84N0D/ODdA/zg3QP86N0H/RUJN/1VSYPwAAABZAAAALQAAACAAAABEPTpFtFZSYP1STlz/UU5b/1FOW/9RTlv/UU5b/1FOW/9RTlv/Uk5c/1ZSYP09OkW0AAAARAAAACAAAAAUAAAAKAAAAEUAAABdAAAAbgAAAHkAAAB6AAAAfAAAAHwAAAB6AAAAeQAAAG4AAABdAAAARQAAACgAAAAUAAAACAAAABQAAAAhAAAAMAAAADoAAAA/AAAAQwAAAEMAAABDAAAAQwAAAD8AAAA6AAAAMAAAACEAAAAUAAAACA=="),
"format": "RGBA8",
@ -1209,7 +1209,7 @@ data = {
}
[sub_resource type="ImageTexture" id="65"]
image = SubResource("Image_rqfhb")
image = SubResource("Image_33w4k")
[sub_resource type="StyleBoxTexture" id="66"]
content_margin_left = 6.0
@ -1223,7 +1223,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_4flla"]
[sub_resource type="Image" id="Image_dg6qs"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/wAAAADf39+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P8AAAAA4ODg/9/f34gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/AAAAAODg4P/g4OD/39/fiAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/wAAAADg4OD/4ODg/+Dg4P/f39+IAAAAAAAAAAAAAAAAAAAAAODg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P8AAAAAAAAAAAAAAAAAAAAA4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/AAAAAAAAAAAAAAAAAAAAAODg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/wAAAAAAAAAAAAAAAAAAAADg4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P8AAAAAAAAAAAAAAAAAAAAA4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/AAAAAAAAAAAAAAAAAAAAAODg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/wAAAAAAAAAAAAAAAAAAAADg4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P8AAAAAAAAAAAAAAAAAAAAA4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/AAAAAAAAAAAAAAAAAAAAAODg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -1233,9 +1233,9 @@ data = {
}
[sub_resource type="ImageTexture" id="425"]
image = SubResource("Image_4flla")
image = SubResource("Image_dg6qs")
[sub_resource type="Image" id="Image_t0i0f"]
[sub_resource type="Image" id="Image_d8gug"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4MXg/+D/4P/g/+D/4P/gwwAAAAAAAAAAAAAAAAAAAADg/+D/4P/g/+D/4P/g/+D/AAAAAAAAAAAAAAAAAAAAAOD/4P/g/+D/4P/g/+D/4P/hPAAAAAAAAAAAAAAAAAAA4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/gwwAAAADg/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/AAAAAOD/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P8AAAAA4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/wAAAADg/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/AAAAAOD/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P8AAAAA4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/wAAAADg/+D/4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/AAAAAODD4P/g/+D/4P/g/+D/4P/g/+D/4P/g/+D/38IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -1245,9 +1245,9 @@ data = {
}
[sub_resource type="ImageTexture" id="427"]
image = SubResource("Image_t0i0f")
image = SubResource("Image_d8gug")
[sub_resource type="Image" id="Image_vc636"]
[sub_resource type="Image" id="Image_r7rto"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3hfgz+DO3hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Bbh0uD+4P7g1+AZAAAAAAAAAAAAAAAAAAAAAAAA3Bbh0uD+4P7g/uD+4NfgGQAAAAAAAAAAAAAAAAAA3hfg1OD+4NHg/uD94dLg/uDU3hcAAAAAAAAAAAAAAADgzeD+4NDcFuD+4P3bFeDR4P7gzAAAAAAAAAAAAAAAAOC+4MXZFP8B4P7g/QAA2xXhyeDFAAAAAAAAAAAAAAAAAAAAAAAA/wHg/uD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AeD+4P0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4MThwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -1257,9 +1257,9 @@ data = {
}
[sub_resource type="ImageTexture" id="429"]
image = SubResource("Image_vc636")
image = SubResource("Image_r7rto")
[sub_resource type="Image" id="Image_ya6ox"]
[sub_resource type="Image" id="Image_emksd"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbB99u4Mfg8+Dz4MfebdsHAAAAAAAAAAAAAAAAAADjG+DP4P7g/uD+4P7g/uD+4M7jGwAAAAAAAAAAAADbB+DP4P7g4eBT2A3YDd9Q4Nfg/uDO2wcAAAAAAAAAAN9u4P7g4eMSAAAAAAAAAADhEeDh4P7ebAAAAAAAAAAA4Mjg/uBTAAAAAAAAAAAAAAAA3lXg/uDGAAAAAAAAAADg8uD+2A0AAAAAAAAAAAAAAADbDuD+4PEAAAAA4J7g/uD+4P7g/uCeAAAAAAAAAAAAAN0P4P7g8QAAAADoC+DU4P7g/uDU6AsAAAAAAAAAAAAA3lbg/uDGAAAAAAAA4Svg8+Dz4SsAAAAAAAAAAAAA5BPh4uD+3mwAAAAAAAAAAN9g32AAAAAAAAAAANsO3lbh4uD+4M7VBgAAAAAAAAAAAAAAAAAAAAAAAAAA4P7g/uD+4M7jGwAAAAAAAAAAAAAAAAAAAAAAAAAAAADg8uDF3mzVBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -1269,9 +1269,9 @@ data = {
}
[sub_resource type="ImageTexture" id="431"]
image = SubResource("Image_ya6ox")
image = SubResource("Image_emksd")
[sub_resource type="Image" id="Image_nxhkg"]
[sub_resource type="Image" id="Image_kxpah"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA39/fCN7e3mzg4ODF4ODg9ODg4PPg4ODF3t7ebePj4wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eLuDg4Njg4OD+4ODg/uDg4P7g4OD+4ODg/uDg4P7h4eHa4ODgMgAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eL+Dg4PDg4OD+4ODg4eDg4FPY2NgN2NjYDd/f31Dg4ODX4ODg/uDg4PLh4eEzAAAAAAAAAAAAAAAA4+PjCeDg4Nzg4OD+4ODg4ePj4xIAAAAAAAAAAAAAAAAAAAAA4eHhEeDg4OHg4OD+4ODg3+bm5goAAAAAAAAAAN/f33fg4OD+4ODg/uDg4FMAAAAA4ODgS+Dg4OPh4eHi4ODgSQAAAADe3t5V4ODg/uDg4P7f3995AAAAAAAAAADh4eHa4ODg/uDg4P7Y2NgNAAAAAOHh4eLg4OD+4ODg/uDg4OEAAAAA29vbDuDg4P7g4OD+4eHh2gAAAAAAAAAA4ODg2+Dg4P7g4OD+2NjYDQAAAADh4eHi4ODg/uDg4P7g4ODhAAAAAN3d3Q/g4OD+4ODg/uDg4NsAAAAAAAAAAN7e3nzg4OD+4ODg/t/f31AAAAAA4ODgSeHh4eLg4ODh39/fSAAAAADe3t5W4ODg/uDg4P7g4OB7AAAAAAAAAADV1dUM4ODg4+Dg4P7g4ODX4eHhEQAAAAAAAAAAAAAAAAAAAADk5OQT4eHh4uDg4P7g4ODh1dXVDAAAAAAAAAAAAAAAAN/f3zjg4OD04ODg/uDg4OHe3t5V29vbDtvb2w7e3t5W4eHh4uDg4P7g4OD03t7eNgAAAAAAAAAAAAAAAAAAAAAAAAAA39/fN+Dg4N7g4OD+4ODg/uDg4P7g4OD+4ODg/uDg4P7g4ODd3t7eNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADm5uYK39/fcODg4MXg4ODz4ODg8+Dg4MXf399u5ubmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -1281,7 +1281,7 @@ data = {
}
[sub_resource type="ImageTexture" id="433"]
image = SubResource("Image_nxhkg")
image = SubResource("Image_kxpah")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_g6bu4"]
texture = ExtResource("1_ak8qr")
@ -1359,7 +1359,7 @@ region = Rect2(96, 96, 16, 16)
atlas = ExtResource("1_ak8qr")
region = Rect2(96, 80, 16, 16)
[sub_resource type="Image" id="Image_1y0us"]
[sub_resource type="Image" id="Image_nr33g"]
data = {
"data": PackedByteArray("AAAAAJiYmHlOTk4xAAAAAAAAAACNjY15Tk5OMQAAAAAAAAAAgoKCeU5OTjEAAAAAAAAAAE5OTjFOTk4cAAAAAAAAAAA4VV8AOFVfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjKy4ADhVXwAAAAAAAAAAAIGirQA4VV8AAAAAAAAAAACYmJh5Tk5OMQAAAAAAAAAAjY2NeU5OTjEAAAAAAAAAAIKCgnlOTk4xAAAAAA=="),
"format": "RGBA8",
@ -1369,7 +1369,7 @@ data = {
}
[sub_resource type="ImageTexture" id="29"]
image = SubResource("Image_1y0us")
image = SubResource("Image_nr33g")
[sub_resource type="StyleBoxTexture" id="4"]
content_margin_left = 6.0
@ -1440,7 +1440,7 @@ bg_color = Color(0.490196, 0.490196, 0.490196, 1)
corner_detail = 1
anti_aliasing = false
[sub_resource type="Image" id="Image_w2tlo"]
[sub_resource type="Image" id="Image_67hak"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN9Y3BYAAAAAAAAAAAAAAADcFt9YAAAAAAAAAAAAAN9Y4P7g09wWAAAAAAAAAADcFuDT4P7fWAAAAAAAAAAA2xXf0uD/4NfgGQAAAADbFd/S4P/g198YAAAAAAAAAAAAANsV39Lg/+DX4BnbFd/S4P/g198YAAAAAAAAAAAAAAAAAADbFd/S4P/h2uDW4P/g198YAAAAAAAAAAAAAAAAAAAAAAAA2xXf1uD/4P/g298YAAAAAAAAAAAAAAAAAAAAAAAAAADbFd/W4P/g/+Db4BkAAAAAAAAAAAAAAAAAAAAAAADbFd/S4P/f2uDW4P/g1+AZAAAAAAAAAAAAAAAAAADbFd/S4P/g198Y2xXf0uD/4NfgGQAAAAAAAAAAAADbFd/S4P/g198YAAAAANsV39Lg/+DX4BkAAAAAAAAAAN9Y4P7g09wWAAAAAAAAAADcFuDT4P7fWAAAAAAAAAAAAADfWNwWAAAAAAAAAAAAAAAA3BbfWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -1450,7 +1450,7 @@ data = {
}
[sub_resource type="ImageTexture" id="49"]
image = SubResource("Image_w2tlo")
image = SubResource("Image_67hak")
[sub_resource type="StyleBoxTexture" id="127"]
content_margin_left = 4.0
@ -2271,7 +2271,7 @@ texture_margin_right = 2.0
texture_margin_bottom = 2.0
region_rect = Rect2(72, 64, 8, 8)
[sub_resource type="Image" id="Image_7o6hp"]
[sub_resource type="Image" id="Image_22qm6"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc5uqs87c4bPO3OGzztzhs87c4bPO3OGzztzhs3ObqrMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2281,7 +2281,7 @@ data = {
}
[sub_resource type="ImageTexture" id="199"]
image = SubResource("Image_7o6hp")
image = SubResource("Image_22qm6")
[sub_resource type="StyleBoxTexture" id="200"]
texture = SubResource("199")
@ -2305,7 +2305,7 @@ texture_margin_right = 2.0
texture_margin_bottom = 2.0
region_rect = Rect2(64, 64, 8, 8)
[sub_resource type="Image" id="Image_hdjaq"]
[sub_resource type="Image" id="Image_mwlj8"]
data = {
"data": PackedByteArray("/wD//wD//wD//wD/Z3qFZnqGaHuGaHuGaHuGaHuGZnqGZ3qF/wD//wD//wD//wD//wD//wD/Z3qFZnqGV1FRTEJATUNBTUNBTUNBTUNBTEJAV1FRZnqGZ3qF/wD//wD//wD/Z3qFVkxLTEJATURBTUNBTkRCTkRCTkRCTkRCTUNBTURBTEJAV1FRZ3qF/wD//wD/ZnqGTEJATEJATUNBT0VDT0VDT0VDT0VDT0VDT0VDTUNBTEJATEJAZ3uH/wD/Z3qFV1FRTEJATEJATkRCT0RDUEVEUkZEUkZEUUZFT0RDTkRCTEJATEJAV1FRZ3qFZnqGS0A/TEJATUNBT0RDUUdFUkhGU0hHU0hHUkhGUUdFT0RDTkRCTEJAS0E/Z3uHZ3uHS0E/TEJATUNBT0RDUUdFVElGVUpHVUlHVUpHUkhGUEVETUNBTEJAS0E/aHyIZ3uHSkA+S0E/TUNBT0VDUUdFVElGVUtJVk1LVElGU0lHUEZETkRCTEJAS0E/aHyIZ3uHSkE+S0E/TEJAT0VDUUdFVElGVUtJVUtJVUpHUkhGUEZETkRCTEJASkA+aHyIZ3uHSD48S0I/S0E/TkRCUEVEUUZFU0lHU0lHUkhGUEVETkRCTEJAS0E/ST89aHyIZ3uHRj08SD48SkA+TEJATkRCT0RDUEVEUEVEUEZET0VDTEJAS0A/ST89Rz07Z3uHZ3qFV1FRRz47SUA9S0E/TEJATUNBTkRCTkRCTUNBTEJAS0E/ST89Rz07V1FRaHuG/wD/Z3uHRj08Rz07SD48ST89SkA+S0E/S0E/S0A/SkA+SD48Rz47Rz07Z3uH/wD//wD/Z3qFV1FRRTw7Rz07Rz07Rz07SD48SD48Rz07Rz07Rz47Rj08V1FRZnqG/wD//wD//wD/Z3qFZ3uHV1FRRjw6Rjw6Rz47Rz47Rjw6Rjw6V1FRZ3uHaHuG/wD//wD//wD//wD//wD//wD/ZnqGZ3uHaHyIaHyIaHyIaHyIZ3uHaHuG/wD//wD//wD//wD/"),
"format": "RGB8",
@ -2315,7 +2315,7 @@ data = {
}
[sub_resource type="ImageTexture" id="204"]
image = SubResource("Image_hdjaq")
image = SubResource("Image_mwlj8")
[sub_resource type="StyleBoxTexture" id="205"]
texture = SubResource("204")
@ -2428,7 +2428,7 @@ axis_stretch_horizontal = 2
axis_stretch_vertical = 2
region_rect = Rect2(80, 0, 16, 8)
[sub_resource type="Image" id="Image_vxc33"]
[sub_resource type="Image" id="Image_k0gxe"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOD/4P/g/+D/4P/g/+D/4P8AAAAAAAAAAOD/4P/g/+D/4P/g/+D/4P8AAAAAAAAAAOD/4P/g/+D/4P/g/+D/4P8AAAAAAAAAAOFe4PTg/+D/4P/g/+D24WYAAAAAAAAAAAAA3yjf0uD/4P/g1+MtAAAAAAAAAAAAAAAAAADoC+Gf4Z/oCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
"format": "LumAlpha8",
@ -2438,9 +2438,9 @@ data = {
}
[sub_resource type="ImageTexture" id="306"]
image = SubResource("Image_vxc33")
image = SubResource("Image_k0gxe")
[sub_resource type="Image" id="Image_lx6tj"]
[sub_resource type="Image" id="Image_x5o30"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4P/g/+D/32AAAAAAAAAAAAAAAAAAAAAA4P/g/+D/4PThKwAAAAAAAAAAAAAAAAAA4P/g/+D/4P/g1egLAAAAAAAAAAAAAAAA4P/g/+D/4P/g/+GfAAAAAAAAAAAAAAAA4P/g/+D/4P/g/+GfAAAAAAAAAAAAAAAA4P/g/+D/4P/g1egLAAAAAAAAAAAAAAAA4P/g/+D/4PThKwAAAAAAAAAAAAAAAAAA4P/g/+D/32AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
"format": "LumAlpha8",
@ -2450,9 +2450,9 @@ data = {
}
[sub_resource type="ImageTexture" id="308"]
image = SubResource("Image_lx6tj")
image = SubResource("Image_x5o30")
[sub_resource type="Image" id="Image_1jeby"]
[sub_resource type="Image" id="Image_r2uaw"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAP9Z/xT/FP9ZAAAAAAAA/1n/FP8U/1kAAAAAAAD/Wf8U/xT/WQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -2462,9 +2462,9 @@ data = {
}
[sub_resource type="ImageTexture" id="292"]
image = SubResource("Image_1jeby")
image = SubResource("Image_r2uaw")
[sub_resource type="Image" id="Image_is1c5"]
[sub_resource type="Image" id="Image_mmk83"]
data = {
"data": PackedByteArray("FxYabx0cIe8gHiT3IR8l9yEfJfchHyX3IR8l9yAeJPcdHCHvFxYabx0cIfAkIin/KCYt/ygmLv8oJi7/KCYu/ygmLv8oJi3/JCIp/x0cIfAgHiT5KCYt/ysqMf8sKjL/LCoy/ywqMv8sKjL/Kyox/ygmLf8gHiT5IR8l9ygmLv8sKjL/LCoy/ywqMv8sKjL/LCoy/ywqMv8oJi7/IR8l9yEfJfcoJi7/LCoy/ywqMv8sKjL/LCoy/ywqMv8sKjL/KCYu/yEfJfchHyX3KCYu/ywqMv8sKjL/LCoy/ywqMv8sKjL/LCoy/ygmLv8hHyX3IR8l9ygmLv8sKjL/LCoy/ywqMv8sKjL/LCoy/ywqMv8oJi7/IR8l9yAeJPkoJi3/Kyox/ywqMv8sKjL/LCoy/ywqMv8rKjH/KCYt/yAeJPkdHCHwJCIp/ygmLf8oJi7/KCYu/ygmLv8oJi7/KCYt/yQiKf8dHCHxFxYabx0cIfAgHiT3IR8l9yEfJfchHyX3IR8l9yAeJPcdHCHuFxYabw=="),
"format": "RGBA8",
@ -2474,7 +2474,7 @@ data = {
}
[sub_resource type="ImageTexture" id="39"]
image = SubResource("Image_is1c5")
image = SubResource("Image_mmk83")
[sub_resource type="StyleBoxTexture" id="272"]
content_margin_left = 0.0
@ -2534,7 +2534,7 @@ axis_stretch_horizontal = 2
axis_stretch_vertical = 2
region_rect = Rect2(24, 40, 8, 8)
[sub_resource type="Image" id="Image_2vtcd"]
[sub_resource type="Image" id="Image_kak1t"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNS1kHTUtZJ01LWVBNS1lmTUtZaE1LWWhNS1loTUtZaE1LWWhNS1loWFZjarCvtYFNS1knTUtZBwAAAAAAAAAATUtZJzg3QLQgICT6Hh4i/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/4uLjf//////tra53U1LWScAAAAAAAAAAE1LWVAgICT6ICAk/yIiJ/8jIyj/IyMo/yMjKP8jIyj/IyMo/0JCR//4+Pj//v7+/1dXWvtNS1lQAAAAAAAAAABNS1lmHh4i/yIiJ/8lJSr/JSUq/05OUv8mJiv/JSUq/yUlKv/Fxcf//////6qqq/8eHiL/TUtZZgAAAAAAAAAATUtZaB8fI/8jIyj/JSUq/7i4uv//////X19j/yUlKv90dHf//////+3t7f8zMzj/Hx8j/01LWWgAAAAAAAAAAE1LWWgfHyP/IyMo/yUlKv+NjY///////7i4uf81NTn/7e3t//////90dHf/IyMo/x8fI/9NS1loAAAAAAAAAABNS1loHx8j/yMjKP8lJSr/Ojo+//v7+//6+vr/srK0///////Fxcf/JSUq/yMjKP8fHyP/TUtZaAAAAAAAAAAATUtZaB8fI/8jIyj/JSUq/yUlKv+4uLr///////7+/v/4+Pj/RUVJ/yUlKv8jIyj/Hx8j/01LWWgAAAAAAAAAAE1LWWgfHyP/IyMo/yUlKv8lJSr/YWFl////////////j4+S/yUlKv8lJSr/IyMo/x8fI/9NS1loAAAAAAAAAABNS1loHx8j/yMjKP8lJSr/JSUq/yYmK/9OTlL/Y2Nm/yoqL/8lJSr/JSUq/yMjKP8fHyP/TUtZaAAAAAAAAAAATUtZZh4eIv8iIif/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8iIif/Hh4i/01LWWYAAAAAAAAAAE1LWVAgICT6ICAk/yIiJ/8jIyj/IyMo/yMjKP8jIyj/IyMo/yMjKP8iIif/ICAk/yAgJPtNS1lQAAAAAAAAAABNS1knODZAtCAgJPseHiL/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hh4i/yAgJfo4NkC0TUtZJwAAAAAAAAAATUtZB01LWSdNS1lQTUtZZk1LWWhNS1loTUtZaE1LWWhNS1loTUtZaE1LWWZNS1lQTUtZJ01LWQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2544,9 +2544,9 @@ data = {
}
[sub_resource type="ImageTexture" id="334"]
image = SubResource("Image_2vtcd")
image = SubResource("Image_kak1t")
[sub_resource type="Image" id="Image_qaks8"]
[sub_resource type="Image" id="Image_ds41u"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNS1kHTUtZJ01LWVBNS1lmTUtZaE1LWWhNS1loTUtZaE1LWWhNS1loTUtZZk1LWVBNS1knTUtZBwAAAAAAAAAATUtZJzg3QLQgICT6Hh4i/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x4eIv8gICT6ODdAtE1LWScAAAAAAAAAAE1LWVAgICT6ICAk/yIiJ/8jIyj/IyMo/yMjKP8jIyj/IyMo/yMjKP8iIif/ICAk/yAgJPpNS1lQAAAAAAAAAABNS1lmHh4i/yIiJ/8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yIiJ/8eHiL/TUtZZgAAAAAAAAAATUtZaB8fI/8jIyj/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8jIyj/Hx8j/01LWWgAAAAAAAAAAE1LWWgfHyP/IyMo/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/IyMo/x8fI/9NS1loAAAAAAAAAABNS1loHx8j/yMjKP8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yMjKP8fHyP/TUtZaAAAAAAAAAAATUtZaB8fI/8jIyj/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8jIyj/Hx8j/01LWWgAAAAAAAAAAE1LWWgfHyP/IyMo/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/IyMo/x8fI/9NS1loAAAAAAAAAABNS1loHx8j/yMjKP8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yMjKP8fHyP/TUtZaAAAAAAAAAAATUtZZh4eIv8iIif/JSUq/yUlKv8lJSr/JSUq/yUlKv8lJSr/JSUq/yUlKv8iIif/Hh4i/01LWWYAAAAAAAAAAE1LWVAgICT6ICAk/yIiJ/8jIyj/IyMo/yMjKP8jIyj/IyMo/yMjKP8iIif/ICAk/yAgJPtNS1lQAAAAAAAAAABNS1knODZAtCAgJPseHiL/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hh4i/yAgJfo4NkC0TUtZJwAAAAAAAAAATUtZB01LWSdNS1lQTUtZZk1LWWhNS1loTUtZaE1LWWhNS1loTUtZaE1LWWZNS1lQTUtZJ01LWQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2556,7 +2556,7 @@ data = {
}
[sub_resource type="ImageTexture" id="336"]
image = SubResource("Image_qaks8")
image = SubResource("Image_ds41u")
[sub_resource type="AtlasTexture" id="359"]
atlas = ExtResource("1_ak8qr")
@ -2632,7 +2632,7 @@ border_width_left = 1
border_color = Color(0.2, 0.2, 0.2, 1)
anti_aliasing = false
[sub_resource type="Image" id="Image_j0gfq"]
[sub_resource type="Image" id="Image_1e2s7"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKCgnmNjY15mJiYeYGirQCMrLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFVfAE5OTjGCgoJ5jY2NeZiYmHlOTk4xTk5OMU5OTjE4VV8AOFVfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhVXwBOTk4cTk5OMU5OTjFOTk4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2642,7 +2642,7 @@ data = {
}
[sub_resource type="ImageTexture" id="111"]
image = SubResource("Image_j0gfq")
image = SubResource("Image_1e2s7")
[sub_resource type="AtlasTexture" id="20"]
atlas = ExtResource("3_0m6kw")

View file

@ -3,7 +3,6 @@ extends Control
var app_data := AppData.new()
var current_system := Emulator.new()
var press_time: float = 0.0
var is_launch_pressed: bool = false
var is_reset_pressed: bool = false
var reset_result: Dictionary
@export var PRESS_DURATION: float = 3.0
@ -13,18 +12,13 @@ func _ready():
_connect_signals()
func _process(delta: float) -> void:
if is_launch_pressed:
press_time += delta
%launch_progress.value = press_time / PRESS_DURATION * 100.0
if is_reset_pressed:
press_time += delta
%reset_progress.value = press_time / PRESS_DURATION * 100.0
if press_time >= PRESS_DURATION:
_do_complete()
press_time = 0.0
is_launch_pressed = false
is_reset_pressed = false
%launch_progress.value = 0.0
%reset_progress.value = 0.0
func _connect_signals() -> void:

View file

@ -2,8 +2,31 @@ class_name ClassFunctions
extends Control
var log_text = "gdc_"
var log_parameters: Array = ["log", "i", log_text]
var wrapper_command: String = "../../tools/retrodeck_function_wrapper.sh"
var log_parameters: Array
var wrapper_command: String = "/app/tools/retrodeck_function_wrapper.sh"
var rd_log: String
var rd_log_folder: String
var rd_version: String
var gc_version: String
func read_cfg() -> String:
var title: String
var config_file_path = "/var/config/retrodeck/retrodeck.cfg"
var json_file_path = "/var/config/retrodeck/retrodeck.json"
var config = data_handler.parse_config_to_json(config_file_path)
data_handler.config_save_json(config, json_file_path)
rd_log_folder = config["paths"]["logs_folder"]
rd_log = rd_log_folder + "/retrodeck.log"
#rd_log = "/var/config/retrodeck/logs/retrodeck.log"
log_parameters = ["log", "i", log_text, rd_log]
rd_version = config["version"]
gc_version = ProjectSettings.get_setting("application/config/version")
title = "\n " + rd_version + "\nConfigurator\n " + gc_version
print ("Make logging a function\nAlso add d,i,e,w: ", rd_log)
return title
func logger() -> void:
pass
func array_to_string(arr: Array) -> String:
var text: String