Conflicts:
	config/retrodeck/reference_lists/features.json
	tools/configurator/components/bios_check/bios_check.gd
	tools/configurator/locales/interface.de.translation
	tools/configurator/locales/interface.en.translation
	tools/configurator/locales/interface.it.translation
	tools/configurator/locales/interface.ja.translation
	tools/configurator/locales/interface.sv.translation
	tools/configurator/locales/interface.ua.translation
	tools/configurator/locales/interface.zh.translation
	tools/configurator/main.gd
	tools/configurator/main.tscn
	tools/configurator/res/pixel_ui_theme/RetroDECKTheme.tres
	tools/configurator/scripts/data_handler.gd
	tools/configurator/scripts/emulator.gd

 All conflicts fixed but you are still merging.
 Changes to be committed:
	modified:   config/retrodeck/reference_lists/features.json
	modified:   tools/configurator/TabContainer.gd
	modified:   tools/configurator/components/bios_check/bios_check.gd
	modified:   tools/configurator/components/bios_check/bios_popup_content.tscn
	modified:   tools/configurator/components/popup.gd
	modified:   tools/configurator/components/popup.tscn
	new file:   tools/configurator/components/popup_dialogue.gd
	new file:   tools/configurator/components/popup_dialogue.tscn
	new file:   tools/configurator/controller_guide.gd
	deleted:    tools/configurator/locales/interface.de.translation
	deleted:    tools/configurator/locales/interface.en.translation
	deleted:    tools/configurator/locales/interface.it.translation
	deleted:    tools/configurator/locales/interface.ja.translation
	deleted:    tools/configurator/locales/interface.sv.translation
	deleted:    tools/configurator/locales/interface.ua.translation
	deleted:    tools/configurator/locales/interface.zh.translation
	modified:   tools/configurator/main.gd
	modified:   tools/configurator/main.tscn
	modified:   tools/configurator/res/pixel_ui_theme/RetroDECKTheme.tres
	new file:   tools/configurator/scripts/SystemTab.gd
	modified:   tools/configurator/scripts/data_handler.gd
	modified:   tools/configurator/scripts/emulator.gd
This commit is contained in:
Rekku 2024-09-06 13:21:34 +01:00
commit 56ef6b89e7
22 changed files with 884 additions and 637 deletions

View file

@ -1,4 +1,3 @@
{
"about_links": {
"rd_changelog": {
@ -790,6 +789,7 @@
"name": "RetroArch",
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/retroarch/retroarch-guide/",
"launch": "retroarch",
"system": "retroarch",
"properties": [
{
"cheevos": true,

View file

@ -12,16 +12,12 @@ func _ready():
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-tweak-tool.png"))
set_tab_icon(2, ResourceLoader.load("res://assets/icons/pixelitos/128/utilities-system-monitor.png"))
set_tab_icon_max_width(2,icon_width)
set_tab_icon(3, ResourceLoader.load("res://assets/icons/pixelitos/128/network-workgroup.png"))
set_tab_icon(3, ResourceLoader.load("res://assets/icons/pixelitos/128/preferences-system-session-services.png"))
set_tab_icon_max_width(3,icon_width)
set_tab_icon(4, ResourceLoader.load("res://assets/icons/pixelitos/128/utilities-system-monitor.png"))
set_tab_icon(4, ResourceLoader.load("res://assets/icons/pixelitos/128/help-about.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)

View file

@ -12,8 +12,7 @@ var BIOS_COLUMNS_EXPERT := ["BIOS File Name", "System", "Found", "Hash Match", "
func _ready():
$".".theme = custom_theme
var table := $Table
if bios_type == 0: #Basic BIOS button pressed
if bios_type == 1: #Basic BIOS button pressed
table.columns = BIOS_COLUMNS_BASIC.size()
for i in BIOS_COLUMNS_BASIC.size():
table.set_column_title(i, BIOS_COLUMNS_BASIC[i])
@ -25,9 +24,12 @@ func _ready():
var root = table.create_item()
table.hide_root = true
if bios_type == 0: #Basic BIOS button pressed
if bios_type == 1: #Basic BIOS button pressed
var parameters = ["check_bios_files","basic"]
await run_thread_command(class_functions.wrapper_command, parameters, console)
class_functions.log_parameters[2] = class_functions.log_text + "Exit code: " + str(bios_result["exit_code"])
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
else: #Assume advanced BIOS button pressed
var parameters = ["check_bios_files"]
class_functions.execute_command(class_functions.wrapper_command, parameters, false)

View file

@ -14,21 +14,6 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_qrkee")
[node name="RichTextLabel" type="RichTextLabel" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
text = "This is a list of problematic BIOS?
Very multiline text
Why do we use it?
PS3 BIOS IS VERY BAD
I'm not sure what else?"
[node name="Table" type="Tree" parent="."]
layout_mode = 1
anchors_preset = 15
@ -38,4 +23,5 @@ grow_horizontal = 2
grow_vertical = 2
columns = 5
column_titles_visible = true
allow_rmb_select = true
select_mode = 1

View file

@ -5,14 +5,16 @@ var content = null
#@onready var button_off = get_node(current_scene.%l1_button)# .current_scene.l1_button
@onready var lbhide: TextureButton = get_tree().current_scene.get_node("%l1_button")
@onready var rbhide: TextureButton = get_tree().current_scene.get_node("%r1_button")
@onready var bios_type:int = get_tree().current_scene.bios_type
func _ready():
lbhide.visible=false
rbhide.visible=false
print (bios_type)
$".".theme = custom_theme
if (content != null):
# TODO this alowes copy and paste from RTB in logs?
if (content != null and bios_type > 0):
$Panel/MarginContainer/VBoxContainer/ContentContainer/MarginContainer.add_child(content)
func _process(delta):
if Input.is_action_pressed("back_button"):
@ -22,6 +24,7 @@ func _process(delta):
func set_content(new_content):
content = load(new_content).instantiate()
func set_title(new_title):
$Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/Label.text = new_title
func set_display_text(new_display_text):

View file

@ -73,6 +73,7 @@ layout_mode = 2
focus_mode = 2
scroll_following = true
context_menu_enabled = true
shortcut_keys_enabled = false
selection_enabled = true
[connection signal="pressed" from="Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_pressed"]

View file

@ -0,0 +1,44 @@
extends Control
@onready var custom_theme: Theme = get_tree().current_scene.custom_theme
#@onready var button_off = get_node(current_scene.%l1_button)# .current_scene.l1_button
#@onready var lbhide: TextureButton = get_tree().current_scene.get_node("%l1_button")
#@onready var rbhide: TextureButton = get_tree().current_scene.get_node("%r1_button")
var command: String
var parameters: Array
func _ready():
$".".theme = custom_theme
var args = OS.get_cmdline_args()
for arg in range(args.size()):
if args[arg] == "--title" and arg + 1 < args.size():
%title_label.text = args[arg + 1]
elif args[arg] == "--content" and arg + 1 < args.size():
%content_rtl.text = args[arg + 1]
elif args[arg] == "--command" and arg + 1 < args.size():
command = args[arg + 1]
elif args[arg] == "--parameters" and arg + 1 < args.size():
parameters.append(args[arg + 1])
elif args[arg] == "--fullscreen" and arg + 1 < args.size():
DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN)
#func _process(delta):
#if Input.is_action_pressed("back_button"):
#get_tree().quit()
func _input(event):
if Input.is_action_pressed("back_button"):
get_tree().quit()
func _on_cancel_pressed():
class_functions.log_parameters[2] = class_functions.log_text + "Exited dialogue"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
get_tree().quit()
func _on_ok_button_pressed() -> void:
class_functions.log_parameters[2] = class_functions.log_text + "Command to run:- " + command + " " + str(parameters)
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
var result = class_functions.execute_command(command,parameters , false)
class_functions.log_parameters[2] = class_functions.log_text + "Exit code: " + str(result["exit_code"])
%content_rtl.text = result["output"]
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)

View file

@ -0,0 +1,107 @@
[gd_scene load_steps=3 format=3 uid="uid://bdbxu0r51jfk1"]
[ext_resource type="Script" path="res://components/popup_dialogue.gd" id="1_oiwsy"]
[ext_resource type="Texture2D" uid="uid://brf74puvpnwsd" path="res://assets/graphics/retrodeck.png" id="2_3a55w"]
[node name="Popup_Dialogue" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 23.0
offset_top = -7.0
offset_right = 23.0
offset_bottom = -7.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_oiwsy")
[node name="Panel" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -357.0
offset_bottom = -70.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="Panel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/MarginContainer"]
layout_mode = 2
[node name="title_label" type="Label" parent="Panel/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 23
text = "Welcome to RetroDeck"
[node name="ContentContainer" type="Panel" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="MarginContainer" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer/ContentContainer"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 6
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 6
[node name="content_rtl" type="RichTextLabel" parent="Panel/MarginContainer/VBoxContainer/ContentContainer/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
focus_mode = 2
text = "Some text here for the content?"
scroll_following = true
context_menu_enabled = true
selection_enabled = true
[node name="MarginContainer_bootom" type="MarginContainer" parent="Panel/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer/MarginContainer_bootom"]
layout_mode = 2
[node name="cancel_button" type="Button" parent="Panel/MarginContainer/VBoxContainer/MarginContainer_bootom/HBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 10
text = "CANCEL"
[node name="ok_button" type="Button" parent="Panel/MarginContainer/VBoxContainer/MarginContainer_bootom/HBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 10
text = "OK"
[node name="Retrodeck" type="Sprite2D" parent="."]
position = Vector2(859, 108)
scale = Vector2(0.209961, 0.204102)
texture = ExtResource("2_3a55w")
[connection signal="pressed" from="Panel/MarginContainer/VBoxContainer/MarginContainer_bootom/HBoxContainer/cancel_button" to="." method="_on_cancel_pressed"]
[connection signal="pressed" from="Panel/MarginContainer/VBoxContainer/MarginContainer_bootom/HBoxContainer/ok_button" to="." method="_on_ok_button_pressed"]

View file

@ -0,0 +1,12 @@
extends PanelContainer
func _process(delta):
# TODO hack. Use state machine?
if %action_gridcontainer.visible == true:
if Input.is_action_pressed("back_button"):
%action_gridcontainer.visible = false
for i in range(%system_gridcontainer.get_child_count()):
var child = %system_gridcontainer.get_child(i)
if child is Button:
child.visible=true
child.toggle_mode = false

View file

@ -3,8 +3,7 @@
extends Control
var bios_type:int
var status_code_label: Label
@onready var bios_type:int
var log_results: Dictionary
var theme_option: OptionButton
#signal signal_theme_changed
@ -25,11 +24,10 @@ func _ready():
_get_nodes()
_connect_signals()
_play_main_animations()
#%locale_option.selected = class_functions.map_locale_id(OS.get_locale_language())
#app_data = data_handler.app_data
#data_handler.add_emulator()
#data_handler.modify_emulator_test()
##data_handler.add_emulator()
##data_handler.modify_emulator_test()
#if app_data:
#var website_data: Link = app_data.about_links["rd_web"]
#print (website_data.name,"-",website_data.url,"-",website_data.description,"-",website_data.url)
@ -49,6 +47,8 @@ func _ready():
## Display the properties of each emulator
#print("System Name: ", emulator.name)
#print("Description: ", emulator.description)
##print("System: ", emulator.systen)
#print("Help URL: ", emulator.url)
#print("Properties:")
#for property: EmulatorProperty in emulator.properties:
#print("Cheevos: ", property.cheevos)
@ -56,8 +56,8 @@ func _ready():
#print("ABXY_button:", property.abxy_button)
#print("multi_user_config_dir: ", property.multi_user_config_dir)
#
#for key in app_data.retroarch_cores.keys():
#var core = app_data.retroarch_cores[key]
#for key in app_data.cores.keys():
#var core = app_data.cores[key]
#print("Core Name: ", core.name)
#print("Description: ", core.description)
#print("Properties:")
@ -120,9 +120,7 @@ func _exit():
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
get_tree().quit()
func _get_nodes() -> void:
status_code_label = get_node("%status_code_label")
theme_option = get_node("%theme_optionbutton")
tab_container = get_node("%TabContainer")
anim_logo = get_node("%logo_animated")
@ -240,20 +238,21 @@ func _on_quickresume_advanced_pressed():
func _on_bios_button_pressed():
_play_main_animations()
bios_type = 0
bios_type = 1
class_functions.log_parameters[2] = class_functions.log_text + "Bios_Check"
log_results = class_functions.execute_command(class_functions.wrapper_command, class_functions.log_parameters, false)
load_popup("BIOS File Check", "res://components/bios_check/bios_popup_content.tscn","")
status_code_label.text = str(log_results["exit_code"])
bios_type = 0
func _on_bios_button_expert_pressed():
_play_main_animations()
bios_type = 1
bios_type = 2
class_functions.log_parameters[2] = class_functions.log_text + "Advanced_Bios_Check"
log_results = class_functions.execute_command(class_functions.wrapper_command, class_functions.log_parameters, false)
class_functions.log_parameters[2] = class_functions.log_text + "Exit code: " + str(log_results["exit_code"])
load_popup("BIOS File Check", "res://components/bios_check/bios_popup_content.tscn","")
status_code_label.text = str(log_results["exit_code"])
bios_type = 0
func _on_exit_button_pressed():
_play_main_animations()
class_functions.log_parameters[2] = class_functions.log_text + "Exited"

File diff suppressed because it is too large Load diff

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_3jqhf"]
[sub_resource type="Image" id="Image_vwjgb"]
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_3jqhf")
image = SubResource("Image_vwjgb")
[sub_resource type="Image" id="Image_1thte"]
[sub_resource type="Image" id="Image_ywacb"]
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_1thte")
image = SubResource("Image_ywacb")
[sub_resource type="StyleBoxTexture" id="54"]
content_margin_left = 6.0
@ -1123,7 +1123,11 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
<<<<<<< HEAD
[sub_resource type="Image" id="Image_qryl2"]
=======
[sub_resource type="Image" id="Image_haatj"]
>>>>>>> d1ccc360678c932877b874751e62537ea2cbb4e4
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 +1137,7 @@ data = {
}
[sub_resource type="ImageTexture" id="56"]
image = SubResource("Image_qryl2")
image = SubResource("Image_haatj")
[sub_resource type="StyleBoxTexture" id="57"]
content_margin_left = 6.0
@ -1147,7 +1151,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_m8e1f"]
[sub_resource type="Image" id="Image_kwe71"]
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 +1161,7 @@ data = {
}
[sub_resource type="ImageTexture" id="59"]
image = SubResource("Image_m8e1f")
image = SubResource("Image_kwe71")
[sub_resource type="StyleBoxTexture" id="60"]
content_margin_left = 6.0
@ -1175,7 +1179,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_ugtma"]
[sub_resource type="Image" id="Image_op27n"]
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 +1189,7 @@ data = {
}
[sub_resource type="ImageTexture" id="62"]
image = SubResource("Image_ugtma")
image = SubResource("Image_op27n")
[sub_resource type="StyleBoxTexture" id="63"]
content_margin_left = 6.0
@ -1199,7 +1203,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_kxy7u"]
[sub_resource type="Image" id="Image_pjro5"]
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 +1213,7 @@ data = {
}
[sub_resource type="ImageTexture" id="65"]
image = SubResource("Image_kxy7u")
image = SubResource("Image_pjro5")
[sub_resource type="StyleBoxTexture" id="66"]
content_margin_left = 6.0
@ -1223,7 +1227,7 @@ expand_margin_right = 2.0
expand_margin_bottom = 2.0
region_rect = Rect2(0, 0, 16, 16)
[sub_resource type="Image" id="Image_m6shq"]
[sub_resource type="Image" id="Image_5uy45"]
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 +1237,9 @@ data = {
}
[sub_resource type="ImageTexture" id="425"]
image = SubResource("Image_m6shq")
image = SubResource("Image_5uy45")
[sub_resource type="Image" id="Image_rt115"]
[sub_resource type="Image" id="Image_ec5ho"]
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 +1249,9 @@ data = {
}
[sub_resource type="ImageTexture" id="427"]
image = SubResource("Image_rt115")
image = SubResource("Image_ec5ho")
[sub_resource type="Image" id="Image_vkmxh"]
[sub_resource type="Image" id="Image_34hhs"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3hfgz+DO3hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Bbh0uD+4P7g1+AZAAAAAAAAAAAAAAAAAAAAAAAA3Bbh0uD+4P7g/uD+4NfgGQAAAAAAAAAAAAAAAAAA3hfg1OD+4NHg/uD94dLg/uDU3hcAAAAAAAAAAAAAAADgzeD+4NDcFuD+4P3bFeDR4P7gzAAAAAAAAAAAAAAAAOC+4MXZFP8B4P7g/QAA2xXhyeDFAAAAAAAAAAAAAAAAAAAAAAAA/wHg/uD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AeD+4P0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4MThwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"format": "LumAlpha8",
@ -1260,6 +1264,9 @@ data = {
image = SubResource("Image_vkmxh")
[sub_resource type="Image" id="Image_ggfgo"]
image = SubResource("Image_34hhs")
[sub_resource type="Image" id="Image_p5y3q"]
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",
@ -1272,6 +1279,9 @@ data = {
image = SubResource("Image_ggfgo")
[sub_resource type="Image" id="Image_2a1q2"]
image = SubResource("Image_p5y3q")
[sub_resource type="Image" id="Image_soojw"]
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 +1291,7 @@ data = {
}
[sub_resource type="ImageTexture" id="433"]
image = SubResource("Image_2a1q2")
image = SubResource("Image_soojw")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_g6bu4"]
texture = ExtResource("1_ak8qr")
@ -1360,6 +1370,7 @@ atlas = ExtResource("1_ak8qr")
region = Rect2(96, 80, 16, 16)
[sub_resource type="Image" id="Image_cd2os"]
[sub_resource type="Image" id="Image_2m260"]
data = {
"data": PackedByteArray("AAAAAJiYmHlOTk4xAAAAAAAAAACNjY15Tk5OMQAAAAAAAAAAgoKCeU5OTjEAAAAAAAAAAE5OTjFOTk4cAAAAAAAAAAA4VV8AOFVfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjKy4ADhVXwAAAAAAAAAAAIGirQA4VV8AAAAAAAAAAACYmJh5Tk5OMQAAAAAAAAAAjY2NeU5OTjEAAAAAAAAAAIKCgnlOTk4xAAAAAA=="),
"format": "RGBA8",
@ -1370,6 +1381,7 @@ data = {
[sub_resource type="ImageTexture" id="29"]
image = SubResource("Image_cd2os")
image = SubResource("Image_2m260")
[sub_resource type="StyleBoxTexture" id="4"]
content_margin_left = 6.0
@ -1440,7 +1452,7 @@ bg_color = Color(0.490196, 0.490196, 0.490196, 1)
corner_detail = 1
anti_aliasing = false
[sub_resource type="Image" id="Image_3oov2"]
[sub_resource type="Image" id="Image_vuhl3"]
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 +1462,7 @@ data = {
}
[sub_resource type="ImageTexture" id="49"]
image = SubResource("Image_3oov2")
image = SubResource("Image_vuhl3")
[sub_resource type="StyleBoxTexture" id="127"]
content_margin_left = 4.0
@ -2271,7 +2283,7 @@ texture_margin_right = 2.0
texture_margin_bottom = 2.0
region_rect = Rect2(72, 64, 8, 8)
[sub_resource type="Image" id="Image_atdte"]
[sub_resource type="Image" id="Image_ri2jg"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc5uqs87c4bPO3OGzztzhs87c4bPO3OGzztzhs3ObqrMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2281,7 +2293,11 @@ data = {
}
[sub_resource type="ImageTexture" id="199"]
<<<<<<< HEAD
image = SubResource("Image_atdte")
=======
image = SubResource("Image_ri2jg")
>>>>>>> d1ccc360678c932877b874751e62537ea2cbb4e4
[sub_resource type="StyleBoxTexture" id="200"]
texture = SubResource("199")
@ -2305,7 +2321,7 @@ texture_margin_right = 2.0
texture_margin_bottom = 2.0
region_rect = Rect2(64, 64, 8, 8)
[sub_resource type="Image" id="Image_rctl8"]
[sub_resource type="Image" id="Image_1syv2"]
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 +2331,7 @@ data = {
}
[sub_resource type="ImageTexture" id="204"]
image = SubResource("Image_rctl8")
image = SubResource("Image_1syv2")
[sub_resource type="StyleBoxTexture" id="205"]
texture = SubResource("204")
@ -2428,7 +2444,7 @@ axis_stretch_horizontal = 2
axis_stretch_vertical = 2
region_rect = Rect2(80, 0, 16, 8)
[sub_resource type="Image" id="Image_r2vw0"]
[sub_resource type="Image" id="Image_du17m"]
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 +2454,9 @@ data = {
}
[sub_resource type="ImageTexture" id="306"]
image = SubResource("Image_r2vw0")
image = SubResource("Image_du17m")
[sub_resource type="Image" id="Image_g4jd5"]
[sub_resource type="Image" id="Image_ydl7p"]
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 +2466,9 @@ data = {
}
[sub_resource type="ImageTexture" id="308"]
image = SubResource("Image_g4jd5")
image = SubResource("Image_ydl7p")
[sub_resource type="Image" id="Image_rv2mk"]
[sub_resource type="Image" id="Image_xttex"]
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 +2478,9 @@ data = {
}
[sub_resource type="ImageTexture" id="292"]
image = SubResource("Image_rv2mk")
image = SubResource("Image_xttex")
[sub_resource type="Image" id="Image_8rn4r"]
[sub_resource type="Image" id="Image_vx2db"]
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 +2490,7 @@ data = {
}
[sub_resource type="ImageTexture" id="39"]
image = SubResource("Image_8rn4r")
image = SubResource("Image_vx2db")
[sub_resource type="StyleBoxTexture" id="272"]
content_margin_left = 0.0
@ -2534,7 +2550,7 @@ axis_stretch_horizontal = 2
axis_stretch_vertical = 2
region_rect = Rect2(24, 40, 8, 8)
[sub_resource type="Image" id="Image_bqkin"]
[sub_resource type="Image" id="Image_4bgii"]
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 +2560,9 @@ data = {
}
[sub_resource type="ImageTexture" id="334"]
image = SubResource("Image_bqkin")
image = SubResource("Image_4bgii")
[sub_resource type="Image" id="Image_ydvb3"]
[sub_resource type="Image" id="Image_1s0ky"]
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 +2572,7 @@ data = {
}
[sub_resource type="ImageTexture" id="336"]
image = SubResource("Image_ydvb3")
image = SubResource("Image_1s0ky")
[sub_resource type="AtlasTexture" id="359"]
atlas = ExtResource("1_ak8qr")
@ -2632,7 +2648,7 @@ border_width_left = 1
border_color = Color(0.2, 0.2, 0.2, 1)
anti_aliasing = false
[sub_resource type="Image" id="Image_gpgg0"]
[sub_resource type="Image" id="Image_t5208"]
data = {
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKCgnmNjY15mJiYeYGirQCMrLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFVfAE5OTjGCgoJ5jY2NeZiYmHlOTk4xTk5OMU5OTjE4VV8AOFVfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhVXwBOTk4cTk5OMU5OTjFOTk4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
"format": "RGBA8",
@ -2642,7 +2658,7 @@ data = {
}
[sub_resource type="ImageTexture" id="111"]
image = SubResource("Image_gpgg0")
image = SubResource("Image_t5208")
[sub_resource type="AtlasTexture" id="20"]
atlas = ExtResource("3_0m6kw")

View file

@ -0,0 +1,110 @@
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
func _ready():
app_data = data_handler.app_data
_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:
%retroarch_button.pressed.connect(_hide_show_buttons.bind(%retroarch_button,%system_gridcontainer, %action_gridcontainer))
%mame_button.pressed.connect(_hide_show_buttons.bind(%mame_button,%system_gridcontainer, %action_gridcontainer))
%ruffle_button.pressed.connect(_hide_show_buttons.bind(%ruffle_button,%system_gridcontainer, %action_gridcontainer))
%melonds_button.pressed.connect(_hide_show_buttons.bind(%melonds_button,%system_gridcontainer, %action_gridcontainer))
%pcsx2_button.pressed.connect(_hide_show_buttons.bind(%pcsx2_button,%system_gridcontainer, %action_gridcontainer))
%duckstation_button.pressed.connect(_hide_show_buttons.bind(%duckstation_button,%system_gridcontainer, %action_gridcontainer))
%ppsspp_button.pressed.connect(_hide_show_buttons.bind(%ppsspp_button,%system_gridcontainer, %action_gridcontainer))
%vita3k_button.pressed.connect(_hide_show_buttons.bind(%vita3k_button,%system_gridcontainer, %action_gridcontainer))
%rpcs3_button.pressed.connect(_hide_show_buttons.bind(%rpcs3_button,%system_gridcontainer, %action_gridcontainer))
%ryujinx_button.pressed.connect(_hide_show_buttons.bind(%ryujinx_button,%system_gridcontainer, %action_gridcontainer))
%dolphin_button.pressed.connect(_hide_show_buttons.bind(%dolphin_button,%system_gridcontainer, %action_gridcontainer))
%primehack_button.pressed.connect(_hide_show_buttons.bind(%primehack_button,%system_gridcontainer, %action_gridcontainer))
%cemu_button.pressed.connect(_hide_show_buttons.bind(%cemu_button,%system_gridcontainer, %action_gridcontainer))
%xemu_button.pressed.connect(_hide_show_buttons.bind(%xemu_button,%system_gridcontainer, %action_gridcontainer))
%esde_button.pressed.connect(_hide_show_buttons.bind(%esde_button,%system_gridcontainer, %action_gridcontainer))
%help_button.pressed.connect(_do_action.bind(%help_button))
#%launch_button.pressed.connect(_do_action.bind(%launch_button))
%launch_button.button_down.connect(_do_action.bind(%launch_button))
%launch_button.button_up.connect(_on_Button_released.bind(%launch_progress))
%reset_button.button_down.connect(_do_action.bind(%reset_button))
%reset_button.button_up.connect(_on_Button_released.bind(%reset_progress))
func _hide_show_buttons(button: Button, buttons_gridcontainer: GridContainer, hidden_gridcontainer: GridContainer) -> void:
current_system = app_data.emulators[button.text.to_lower()]
match button.name:
"retroarch_button", "mame_button", "ruffle_button", "melonds_button", "pcsx2_button", "duckstation_button", \
"ppsspp_button", "vita3k_button", "rpcs3_button", "ryujinx_button", "dolphin_button", "primehack_button", \
"cemu_button", "xemu_button", "esde_button":
hidden_gridcontainer.visible = true
if button.toggle_mode == false:
for i in range(buttons_gridcontainer.get_child_count()):
var child = buttons_gridcontainer.get_child(i)
if child is Button and child != button:
child.visible=false
elif button.toggle_mode == true and hidden_gridcontainer.visible == true:
hidden_gridcontainer.visible = false
for i in range(buttons_gridcontainer.get_child_count()):
var child = buttons_gridcontainer.get_child(i)
if child is Button:
child.visible=true
child.toggle_mode = false
if hidden_gridcontainer.visible == true:
button.toggle_mode = true
func _on_Button_released(progress: ProgressBar) -> void:
is_launch_pressed = false
is_reset_pressed = false
press_time = 0.0
progress.value = 0.0
func _do_action(button: Button) -> void:
match [button.name, current_system.name]:
["help_button", current_system.name]:
class_functions.log_parameters[2] = class_functions.log_text + "Launching " + current_system.name + " Help"
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
class_functions.launch_help(current_system.url)
["launch_button", current_system.name]:
is_launch_pressed = true
["reset_button", current_system.name]:
is_reset_pressed = true
func _do_complete() ->void:
if is_launch_pressed:
class_functions.log_parameters[2] = class_functions.log_text + "Launching " + current_system.name
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
var launch = class_functions.execute_command(current_system.launch,[], false)
class_functions.log_parameters[2] = class_functions.log_text + "Exit Code: " + str(launch["exit_code"])
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
if is_reset_pressed:
var parameters = ["prepare_component","reset",current_system.name]
%reset_button.text = "RESETTING-NOW"
class_functions.log_parameters[2] = class_functions.log_text + "Resetting " + current_system.name
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
await run_thread_command(class_functions.wrapper_command,parameters, false)
class_functions.log_parameters[2] = class_functions.log_text + "Exit Code: " + str(reset_result["exit_code"])
class_functions.execute_command(class_functions.wrapper_command,class_functions.log_parameters, false)
%reset_button.text = "RESET COMPLETED"
func run_thread_command(command: String, parameters: Array, console: bool) -> void:
reset_result = await class_functions.run_command_in_thread(command, parameters, console)

View file

@ -35,6 +35,7 @@ func load_base_data() -> AppData:
emulator.name = emulator_data["name"]
emulator.description = emulator_data["description"]
emulator.url = emulator_data["url"]
#emulator.system = emulator_data["system"]
emulator.launch = emulator_data["launch"]
if emulator_data.has("properties"):
for property_data in emulator_data["properties"]:
@ -50,7 +51,6 @@ func load_base_data() -> AppData:
property.multi_user_config_dir = property_data.get("multi_user_config_dir",true)
emulator.properties.append(property)
emulators[key] = emulator
#TODO add systems too
var cores = {}
for key in data_dict["emulator"]["retroarch"]["cores"].keys():
@ -99,18 +99,18 @@ func save_base_data(app_dict: AppData):
file.close()
else:
print("File not found. Creating a new one.")
var about_links = {}
#var about_links ={}
var about_links_new = Link.new()
for key in app_dict.about_links.keys():
var link = app_dict.about_links[key]
about_links[key] = {
about_links_new[key] = {
"name": link.name,
"url": link.url,
"description": link.description
}
var new_data_dict = {}
# Convert about_links to a dictionary
var about_links = {}
#var about_links = {}
var about_links = Link.new()
for key in app_dict.about_links.keys():
var link = app_dict.about_links[key]
about_links[key] = {
@ -118,8 +118,6 @@ func save_base_data(app_dict: AppData):
"url": link.url,
"description": link.description
}
# Convert emulators to a dictionary
var emulators = {}
for key in app_dict.emulators.keys():
var emulator = app_data.emulators[key]
@ -129,18 +127,16 @@ func save_base_data(app_dict: AppData):
#"standalone": property.standalone,
"abxy_button": {"status": property.abxy_button}
})
emulators[key] = {
"name": emulator.name,
"description": emulator.description,
"launch": emulator.launch,
"system": emulator.system,
"url": emulator.url,
"properties": properties
}
new_data_dict["about_links"] = about_links
new_data_dict["emulators"] = emulators
# Merge existing data with new data
for key in new_data_dict.keys():
if existing_data.has(key):
@ -152,7 +148,6 @@ func save_base_data(app_dict: AppData):
existing_dict[sub_key] = new_dict[sub_key]
else:
existing_data[key] = new_data_dict[key]
# Serialize the combined data to JSON
#var json_text = JSON.new().stringify(existing_data, "\t")
#var json_text = json.stringify(existing_data, "\t")
@ -196,9 +191,7 @@ func modify_emulator(key: String, new_name: String, new_launch: String, new_desc
new_property.abxy_button = property.abxy_button
new_property.ask_to_exit = property.ask_to_exit
new_property.cheevos = property.cheevos
emulator.properties.append(new_property)
app_dict.emulators[key] = emulator
save_base_data(app_dict)
print("Emulator modified successfully")
@ -213,7 +206,6 @@ func add_emulator() -> void:
link.url = "https://example.com"
link.description = "An example description."
app_data.about_links["example_site"] = link
var emulator = Emulator.new()
emulator.name = "Example System"
emulator.description = "An example emulator."
@ -237,15 +229,13 @@ func modify_emulator_test() -> void:
func parse_config_to_json(file_path: String) -> Dictionary:
var config = {}
var current_section = ""
var file = FileAccess.open(file_path, FileAccess.READ)
if file == null:
print("Failed to open file")
return config
while not file.eof_reached():
var line = file.get_line().strip_edges()
if line.begins_with("[") and line.ends_with("]"):
# Start a new section
current_section = line.substr(1, line.length() - 2)
@ -255,8 +245,7 @@ func parse_config_to_json(file_path: String) -> Dictionary:
var parts = line.split("=")
if parts.size() == 2:
var key = parts[0].strip_edges()
var value = parts[1].strip_edges()
var value = parts[1].strip_edges()
# Convert value to proper type
if value == "true":
value = true
@ -270,10 +259,8 @@ func parse_config_to_json(file_path: String) -> Dictionary:
config[key] = value
else:
config[current_section][key] = value
file.close()
return config
func config_save_json(config: Dictionary, json_file_path: String) -> void:
#var json = JSON.new()

View file

@ -6,4 +6,5 @@ class_name Emulator
@export var description: String
@export var launch: String
@export var url: String
@export var system: String
@export var properties: Array[EmulatorProperty]