mirror of
https://github.com/RetroDECK/RetroDECK.git
synced 2024-11-27 16:15:42 +00:00
commit
782ce2f173
|
@ -14,6 +14,7 @@ config/name="RetroDECKConfigurator"
|
|||
config/version="0.053"
|
||||
run/main_scene="res://main.tscn"
|
||||
config/features=PackedStringArray("4.3", "GL Compatibility")
|
||||
run/low_processor_mode=true
|
||||
boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 0)
|
||||
boot_splash/show_image=false
|
||||
config/icon="res://icon.svg"
|
||||
|
|
|
@ -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_3f0rd"]
|
||||
[sub_resource type="Image" id="Image_p38j5"]
|
||||
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_3f0rd")
|
||||
image = SubResource("Image_p38j5")
|
||||
|
||||
[sub_resource type="Image" id="Image_kyr1d"]
|
||||
[sub_resource type="Image" id="Image_ti0v5"]
|
||||
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_kyr1d")
|
||||
image = SubResource("Image_ti0v5")
|
||||
|
||||
[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_p4fmj"]
|
||||
[sub_resource type="Image" id="Image_iq3ow"]
|
||||
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_p4fmj")
|
||||
image = SubResource("Image_iq3ow")
|
||||
|
||||
[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_4lbps"]
|
||||
[sub_resource type="Image" id="Image_nv4fw"]
|
||||
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_4lbps")
|
||||
image = SubResource("Image_nv4fw")
|
||||
|
||||
[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_b8j2s"]
|
||||
[sub_resource type="Image" id="Image_wh5mm"]
|
||||
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_b8j2s")
|
||||
image = SubResource("Image_wh5mm")
|
||||
|
||||
[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_fg85n"]
|
||||
[sub_resource type="Image" id="Image_vulrp"]
|
||||
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_fg85n")
|
||||
image = SubResource("Image_vulrp")
|
||||
|
||||
[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_6ujc8"]
|
||||
[sub_resource type="Image" id="Image_olnpm"]
|
||||
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_6ujc8")
|
||||
image = SubResource("Image_olnpm")
|
||||
|
||||
[sub_resource type="Image" id="Image_an2bn"]
|
||||
[sub_resource type="Image" id="Image_pevvq"]
|
||||
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_an2bn")
|
||||
image = SubResource("Image_pevvq")
|
||||
|
||||
[sub_resource type="Image" id="Image_cvk7t"]
|
||||
[sub_resource type="Image" id="Image_tlada"]
|
||||
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_cvk7t")
|
||||
image = SubResource("Image_tlada")
|
||||
|
||||
[sub_resource type="Image" id="Image_hbobg"]
|
||||
[sub_resource type="Image" id="Image_dyu87"]
|
||||
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_hbobg")
|
||||
image = SubResource("Image_dyu87")
|
||||
|
||||
[sub_resource type="Image" id="Image_2uton"]
|
||||
[sub_resource type="Image" id="Image_3wd43"]
|
||||
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_2uton")
|
||||
image = SubResource("Image_3wd43")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_g6bu4"]
|
||||
texture = ExtResource("1_ak8qr")
|
||||
|
@ -1377,7 +1377,7 @@ bg_color = Color(0.490196, 0.490196, 0.490196, 1)
|
|||
corner_detail = 1
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="Image" id="Image_74cmk"]
|
||||
[sub_resource type="Image" id="Image_nn2bg"]
|
||||
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",
|
||||
|
@ -1387,7 +1387,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="49"]
|
||||
image = SubResource("Image_74cmk")
|
||||
image = SubResource("Image_nn2bg")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="127"]
|
||||
content_margin_left = 4.0
|
||||
|
@ -2208,7 +2208,7 @@ texture_margin_right = 2.0
|
|||
texture_margin_bottom = 2.0
|
||||
region_rect = Rect2(72, 64, 8, 8)
|
||||
|
||||
[sub_resource type="Image" id="Image_fgheo"]
|
||||
[sub_resource type="Image" id="Image_rrpoh"]
|
||||
data = {
|
||||
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc5uqs87c4bPO3OGzztzhs87c4bPO3OGzztzhs3ObqrMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
|
||||
"format": "RGBA8",
|
||||
|
@ -2218,7 +2218,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="199"]
|
||||
image = SubResource("Image_fgheo")
|
||||
image = SubResource("Image_rrpoh")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="200"]
|
||||
texture = SubResource("199")
|
||||
|
@ -2242,7 +2242,7 @@ texture_margin_right = 2.0
|
|||
texture_margin_bottom = 2.0
|
||||
region_rect = Rect2(64, 64, 8, 8)
|
||||
|
||||
[sub_resource type="Image" id="Image_uueco"]
|
||||
[sub_resource type="Image" id="Image_hq21w"]
|
||||
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",
|
||||
|
@ -2252,7 +2252,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="204"]
|
||||
image = SubResource("Image_uueco")
|
||||
image = SubResource("Image_hq21w")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="205"]
|
||||
texture = SubResource("204")
|
||||
|
@ -2365,7 +2365,7 @@ axis_stretch_horizontal = 2
|
|||
axis_stretch_vertical = 2
|
||||
region_rect = Rect2(80, 0, 16, 8)
|
||||
|
||||
[sub_resource type="Image" id="Image_aet7u"]
|
||||
[sub_resource type="Image" id="Image_ldmxt"]
|
||||
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",
|
||||
|
@ -2375,9 +2375,9 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="306"]
|
||||
image = SubResource("Image_aet7u")
|
||||
image = SubResource("Image_ldmxt")
|
||||
|
||||
[sub_resource type="Image" id="Image_jhqhk"]
|
||||
[sub_resource type="Image" id="Image_kdpx4"]
|
||||
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",
|
||||
|
@ -2387,9 +2387,9 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="308"]
|
||||
image = SubResource("Image_jhqhk")
|
||||
image = SubResource("Image_kdpx4")
|
||||
|
||||
[sub_resource type="Image" id="Image_w4jbr"]
|
||||
[sub_resource type="Image" id="Image_h4uwx"]
|
||||
data = {
|
||||
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAAAA/1n/FP8U/1kAAAAAAAAAAP9Z/xT/FP9ZAAAAAAAA/1n/FP8U/1kAAAAAAAD/Wf8U/xT/WQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="),
|
||||
"format": "LumAlpha8",
|
||||
|
@ -2399,9 +2399,9 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="292"]
|
||||
image = SubResource("Image_w4jbr")
|
||||
image = SubResource("Image_h4uwx")
|
||||
|
||||
[sub_resource type="Image" id="Image_u505n"]
|
||||
[sub_resource type="Image" id="Image_8kgfr"]
|
||||
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",
|
||||
|
@ -2411,7 +2411,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="39"]
|
||||
image = SubResource("Image_u505n")
|
||||
image = SubResource("Image_8kgfr")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="272"]
|
||||
content_margin_left = 0.0
|
||||
|
@ -2471,7 +2471,7 @@ axis_stretch_horizontal = 2
|
|||
axis_stretch_vertical = 2
|
||||
region_rect = Rect2(24, 40, 8, 8)
|
||||
|
||||
[sub_resource type="Image" id="Image_jtv2p"]
|
||||
[sub_resource type="Image" id="Image_mwp2i"]
|
||||
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",
|
||||
|
@ -2481,9 +2481,9 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="334"]
|
||||
image = SubResource("Image_jtv2p")
|
||||
image = SubResource("Image_mwp2i")
|
||||
|
||||
[sub_resource type="Image" id="Image_ehswk"]
|
||||
[sub_resource type="Image" id="Image_141qk"]
|
||||
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",
|
||||
|
@ -2493,7 +2493,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="336"]
|
||||
image = SubResource("Image_ehswk")
|
||||
image = SubResource("Image_141qk")
|
||||
|
||||
[sub_resource type="AtlasTexture" id="359"]
|
||||
atlas = ExtResource("1_ak8qr")
|
||||
|
@ -2581,7 +2581,7 @@ region = Rect2(96, 96, 16, 16)
|
|||
atlas = ExtResource("1_ak8qr")
|
||||
region = Rect2(96, 80, 16, 16)
|
||||
|
||||
[sub_resource type="Image" id="Image_jtti3"]
|
||||
[sub_resource type="Image" id="Image_ex42w"]
|
||||
data = {
|
||||
"data": PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKCgnmNjY15mJiYeYGirQCMrLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFVfAE5OTjGCgoJ5jY2NeZiYmHlOTk4xTk5OMU5OTjE4VV8AOFVfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhVXwBOTk4cTk5OMU5OTjFOTk4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
|
||||
"format": "RGBA8",
|
||||
|
@ -2591,7 +2591,7 @@ data = {
|
|||
}
|
||||
|
||||
[sub_resource type="ImageTexture" id="111"]
|
||||
image = SubResource("Image_jtti3")
|
||||
image = SubResource("Image_ex42w")
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="4"]
|
||||
content_margin_left = 6.0
|
||||
|
|
|
@ -14,13 +14,13 @@ func _input(event):
|
|||
await class_functions.wait(split_speed)
|
||||
%SplitContainer.split_offset=n
|
||||
%pop_rtl.visible = false
|
||||
%TabContainer.set_tab_title(0, "GLOBALS")
|
||||
%TabContainer.set_tab_title(0, "GLOBAL")
|
||||
%TabContainer.set_tab_title(1, "SYSTEMS")
|
||||
%TabContainer.set_tab_title(2, "TOOLS")
|
||||
%TabContainer.set_tab_title(3, "SETTINGS")
|
||||
%TabContainer.set_tab_title(4, "ABOUT")
|
||||
elif event.is_action_released("rekku_hide") and class_functions.rekku_state == true:
|
||||
%TabContainer.set_tab_title(0, " GLOBALS ")
|
||||
%TabContainer.set_tab_title(0, " GLOBAL ")
|
||||
%TabContainer.set_tab_title(1, " SYSTEMS ")
|
||||
%TabContainer.set_tab_title(2, " TOOLS ")
|
||||
%TabContainer.set_tab_title(3, " SETTINGS ")
|
||||
|
|
|
@ -15,7 +15,7 @@ func _ready():
|
|||
%TabContainer.add_theme_font_size_override("font_size", 15)
|
||||
else:
|
||||
%TabContainer.add_theme_font_size_override("font_size", class_functions.font_tab_size)
|
||||
set_tab_title(0, " GLOBALS ")
|
||||
set_tab_title(0, " GLOBAL ")
|
||||
set_tab_title(1, " SYSTEMS ")
|
||||
set_tab_title(2, " TOOLS ")
|
||||
set_tab_title(3, " SETTINGS ")
|
||||
|
|
|
@ -102,13 +102,13 @@ func multi_state(section: String, state: String) -> String:
|
|||
state = "mixed"
|
||||
return state
|
||||
|
||||
func logger(log_type: String, log_text: String) -> void:
|
||||
func logger_bash(log_type: String, log_text: String) -> void:
|
||||
var log_header_text = "gdc_"
|
||||
log_header_text+=log_text
|
||||
log_parameters = ["log", log_type, log_header_text]
|
||||
log_result = await run_thread_command(wrapper_command,log_parameters, false)
|
||||
|
||||
func logger_godot(log_type: String, log_text: String) -> void:
|
||||
func logger(log_type: String, log_text: String) -> void:
|
||||
var log_dir_path: String = "/var/config/retrodeck/logs/"
|
||||
var log_path: String = '/var/config/retrodeck/logs/gd_logs.log'
|
||||
|
||||
|
@ -335,19 +335,19 @@ func run_function(button: Button, preset: String) -> void:
|
|||
|
||||
func update_global(button: Button, preset: String, state: bool) -> void:
|
||||
#TODO pass state as an object in future version
|
||||
var result: Array
|
||||
result.append("build_preset_config")
|
||||
var result: Array
|
||||
result.append("make_preset_changes")
|
||||
var config_section:Dictionary = data_handler.get_elements_in_section(config_file_path, preset)
|
||||
match button.name:
|
||||
"quick_resume_button", "retroarch_quick_resume_button":
|
||||
quick_resume_status = state
|
||||
result.append_array(data_handler.change_cfg_value(config_file_path, "retroarch", preset, str(state)))
|
||||
change_global(result, button, str(quick_resume_status))
|
||||
#var resultT: Dictionary = await run_thread_command("/home/tim/bin/mult.sh", [], false)
|
||||
"update_notification_button":
|
||||
update_check = state
|
||||
#result.append("build_preset_config")
|
||||
result.append_array(data_handler.change_cfg_value(config_file_path, preset, "options", str(state)))
|
||||
change_global(result, button, str(result))
|
||||
#change_global(result, button, str(result))
|
||||
"sound_button":
|
||||
sound_effects = state
|
||||
result.append_array(data_handler.change_cfg_value(config_file_path, preset, "options", str(state)))
|
||||
|
@ -361,71 +361,83 @@ func update_global(button: Button, preset: String, state: bool) -> void:
|
|||
"button_swap_button":
|
||||
if abxy_state != "mixed":
|
||||
abxy_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, abxy_state)
|
||||
"ask_to_exit_button":
|
||||
if ask_to_exit_state != "mixed":
|
||||
ask_to_exit_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
await change_global(result, button, ask_to_exit_state)
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, ask_to_exit_state)
|
||||
"border_button":
|
||||
if border_state != "mixed":
|
||||
border_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
await change_global(result, button, border_state)
|
||||
#result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, border_state)
|
||||
if widescreen_state == "true" or widescreen_state == "mixed":
|
||||
var button_tmp = main_scene.get_node("%widescreen_button")
|
||||
#Remove last array item or tries to append again
|
||||
result.clear()
|
||||
result.append("build_preset_config")
|
||||
result.append_array([preset])
|
||||
config_section = data_handler.get_elements_in_section(config_file_path, "widescreen")
|
||||
widescreen_state = "false"
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, "widescreen", widescreen_state))
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, widescreen_state)
|
||||
"widescreen_button":
|
||||
if widescreen_state != "mixed":
|
||||
widescreen_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
await change_global(result, button, widescreen_state)
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, widescreen_state)
|
||||
if border_state == "true" or border_state == "mixed":
|
||||
var button_tmp = main_scene.get_node("%border_button")
|
||||
#Remove last array item or tries to append again
|
||||
result.clear()
|
||||
result.append("build_preset_config")
|
||||
result.append_array([preset])
|
||||
config_section = data_handler.get_elements_in_section(config_file_path, "borders")
|
||||
border_state = "false"
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, "borders", border_state))
|
||||
border_state = "mixed"
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button_tmp, border_state)
|
||||
"quick_rewind_button":
|
||||
if quick_rewind_state != "mixed":
|
||||
quick_rewind_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, quick_rewind_state)
|
||||
"cheevos_button":
|
||||
if cheevos_state != "mixed":
|
||||
cheevos_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, cheevos_state)
|
||||
if cheevos_state == "false":
|
||||
cheevos_hardcore_state = "false"
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, "cheevos_hardcore", class_functions.cheevos_hardcore_state))
|
||||
change_global(result, button, cheevos_hardcore_state)
|
||||
#if cheevos_state == "false":
|
||||
#cheevos_hardcore_state = "false"
|
||||
#result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, "cheevos_hardcore", class_functions.cheevos_hardcore_state))
|
||||
#change_global(result, button, cheevos_hardcore_state)
|
||||
"cheevos_hardcore_button":
|
||||
if cheevos_hardcore_state != "mixed":
|
||||
cheevos_hardcore_state = str(state)
|
||||
result.append_array(data_handler.change_all_cfg_values(config_file_path, config_section, preset, str(state)))
|
||||
result.append_array([preset])
|
||||
result.append_array([config_section.keys()])
|
||||
change_global(result, button, cheevos_hardcore_state)
|
||||
|
||||
func change_global(parameters: Array, button: Button, state: String) -> void:
|
||||
#print (str(parameters))
|
||||
match parameters[2]:
|
||||
print (parameters)
|
||||
match parameters[1]:
|
||||
"abxy_button_swap", "ask_to_exit", "borders", "widescreen", "rewind", "cheevos", "cheevos_hardcore":
|
||||
for system in parameters[1].keys():
|
||||
var command_parameter: Array = [parameters[0],system, parameters[2]]
|
||||
logger("d", "Change Global Multi: %s " % str(command_parameter))
|
||||
var result: Dictionary = await run_thread_command(wrapper_command, command_parameter, false)
|
||||
#var result = OS.execute_with_pipe(wrapper_command, command_parameter)
|
||||
logger("d", "Exit code: %s" % result["exit_code"])
|
||||
var command_parameter: Array
|
||||
if state == "true":
|
||||
parameters[2] =String(",").join(parameters[2])
|
||||
command_parameter = [parameters[0],parameters[1],parameters[2]]
|
||||
else:
|
||||
command_parameter = [parameters[0],parameters[1]]
|
||||
logger("d", "Change Global Multi: %s " % str(command_parameter))
|
||||
var result: Dictionary = await run_thread_command(wrapper_command, command_parameter, false)
|
||||
#var result = OS.execute_with_pipe(wrapper_command, command_parameter)
|
||||
logger("d", "Exit code: %s" % result["exit_code"])
|
||||
_:
|
||||
logger("d", "Change Global Single: %s" % str(parameters))
|
||||
var result: Dictionary = await run_thread_command(wrapper_command, parameters, false)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
extends Node
|
||||
|
||||
class_name DataHandler
|
||||
|
||||
extends Node
|
||||
|
||||
var data_file_path = "/app/retrodeck/config/retrodeck/reference_lists/features.json"
|
||||
var app_data: AppData
|
||||
|
||||
|
@ -34,8 +34,10 @@ func load_base_data() -> AppData:
|
|||
var emulator = Emulator.new()
|
||||
emulator.name = emulator_data["name"]
|
||||
emulator.description = emulator_data["description"]
|
||||
emulator.url = emulator_data["url"]
|
||||
#emulator.system = emulator_data["system"]
|
||||
if emulator_data.has("url"):
|
||||
emulator.url = emulator_data["url"]
|
||||
if emulator_data.has("system"):
|
||||
emulator.system = emulator_data["system"]
|
||||
emulator.launch = emulator_data["launch"]
|
||||
if emulator_data.has("properties"):
|
||||
for property_data in emulator_data["properties"]:
|
||||
|
@ -158,73 +160,6 @@ func save_base_data(app_dict: AppData):
|
|||
file = FileAccess.open(data_file_path, FileAccess.WRITE)
|
||||
file.store_string(json_text)
|
||||
file.close()
|
||||
|
||||
# Function to modify an existing link
|
||||
func modify_link(key: String, new_name: String, new_url: String, new_description: String):
|
||||
var app_dict = load_base_data() # was app_data
|
||||
if app_dict and app_dict.about_links.has(key):
|
||||
var link = app_dict.about_links[key]
|
||||
link.name = new_name
|
||||
link.url = new_url
|
||||
link.description = new_description
|
||||
app_dict.about_links[key] = link
|
||||
save_base_data(app_dict)
|
||||
print("Link modified successfully")
|
||||
else:
|
||||
print("Link not found")
|
||||
|
||||
# Function to modify an existing emulator
|
||||
func modify_emulator(key: String, new_name: String, new_launch: String, new_description: String, new_properties: Array):
|
||||
#data_handler.modify_emulator_test()
|
||||
var app_dict = load_base_data() # was app_data
|
||||
if app_dict and app_dict.emulators.has(key):
|
||||
var emulator = app_dict.emulators[key]
|
||||
emulator.name = new_name
|
||||
emulator.description = new_description
|
||||
emulator.launch = new_launch
|
||||
|
||||
# Update properties
|
||||
emulator.properties.clear()
|
||||
for property in new_properties:
|
||||
var new_property = EmulatorProperty.new()
|
||||
new_property.borders = property.borders
|
||||
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")
|
||||
else:
|
||||
print("Emulator not found")
|
||||
|
||||
|
||||
func add_emulator() -> void:
|
||||
#data_handler.add_emulator()
|
||||
var link = Link.new()
|
||||
link.name = "Example Site"
|
||||
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."
|
||||
emulator.launch = "launcher"
|
||||
var property = EmulatorProperty.new()
|
||||
#property.standalone = true
|
||||
property.abxy_button = false
|
||||
emulator.properties.append(property)
|
||||
app_data.emulators["example_emulator"] = emulator
|
||||
data_handler.save_base_data(app_data)
|
||||
|
||||
func modify_emulator_test() -> void:
|
||||
data_handler.modify_link("example_site", "Updated Site", "https://updated-example.com", "Updated description.")
|
||||
var new_properties = []
|
||||
var new_property = EmulatorProperty.new()
|
||||
#new_property.standalone = false
|
||||
new_property.abxy_button = true
|
||||
new_properties.append(new_property)
|
||||
data_handler.modify_emulator("example_emulator", "Updated System", "launcher", "Updated description", new_properties)
|
||||
|
||||
func parse_config_to_json(file_path: String) -> Dictionary:
|
||||
var config = {}
|
||||
|
|
391
tools/configurator/scripts/data_handler_bak.gd
Normal file
391
tools/configurator/scripts/data_handler_bak.gd
Normal file
|
@ -0,0 +1,391 @@
|
|||
#class_name DataHandler
|
||||
|
||||
extends Node
|
||||
|
||||
var data_file_path = "/app/retrodeck/config/retrodeck/reference_lists/features.json"
|
||||
var app_data: AppData
|
||||
|
||||
func _ready():
|
||||
# Load the data when the scene is ready
|
||||
app_data = load_base_data()
|
||||
|
||||
func load_base_data() -> AppData:
|
||||
var file = FileAccess.open(data_file_path, FileAccess.READ)
|
||||
if file:
|
||||
var json_data = file.get_as_text()
|
||||
file.close()
|
||||
#var json = JSON.new()
|
||||
var parsed_data = JSON.parse_string(json_data)
|
||||
if parsed_data:
|
||||
var data_dict = parsed_data
|
||||
var about_links = {}
|
||||
for key in data_dict["about_links"].keys():
|
||||
var link_data = data_dict["about_links"][key]
|
||||
var link = Link.new()
|
||||
link.name = link_data["name"]
|
||||
link.url = link_data["url"]
|
||||
link.description = link_data["description"]
|
||||
link.icon = link_data["icon"]
|
||||
about_links[key] = link
|
||||
|
||||
var emulators = {}
|
||||
for key in data_dict["emulator"].keys():
|
||||
var emulator_data = data_dict["emulator"][key]
|
||||
var emulator = Emulator.new()
|
||||
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"]:
|
||||
#print (emulator,"----",property_data)
|
||||
var property = EmulatorProperty.new()
|
||||
if property_data.has("cheevos"):
|
||||
property.cheevos = property_data.get("cheevos",true)
|
||||
if property_data.has("cheevos_hardcore"):
|
||||
property.cheevos_hardcore = property_data.get("cheevos_hardcore",true)
|
||||
if property_data.has("abxy_button"):
|
||||
property.abxy_button = property_data.get("abxy_button",true)
|
||||
if property_data.has("multi_user_config_dir"):
|
||||
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():
|
||||
var core_data = data_dict["emulator"]["retroarch"]["cores"][key]
|
||||
var core = Core.new()
|
||||
core.name = core_data["name"]
|
||||
core.description = core_data["description"]
|
||||
if core_data.has("properties"):
|
||||
for property_data in core_data["properties"]:
|
||||
#print (core.name,"----",property_data)
|
||||
# inherit from RetroArch
|
||||
var property = CoreProperty.new()
|
||||
property.cheevos = true
|
||||
property.cheevos_hardcore = true
|
||||
property.quick_resume = true
|
||||
if property_data.has("abxy_button"):
|
||||
property.abxy_button = property_data.get("abxy_button",true)
|
||||
if property_data.has("widescreen"):
|
||||
property.widescreen = property_data.get("widescreen",true)
|
||||
if property_data.has("borders"):
|
||||
property.borders = property_data.get("borders",true)
|
||||
if property_data.has("rewind"):
|
||||
property.rewind = property_data.get("rewind",true)
|
||||
core.properties.append(property)
|
||||
cores[key] = core
|
||||
|
||||
var app_dict = AppData.new()
|
||||
app_dict.about_links = about_links
|
||||
app_dict.emulators = emulators
|
||||
app_dict.cores = cores
|
||||
return app_dict
|
||||
else:
|
||||
class_functions.logger("d","Error parsing JSON ")
|
||||
else:
|
||||
class_functions.logger("d","Error opening file: %s" % file)
|
||||
get_tree().quit()
|
||||
return null
|
||||
|
||||
func save_base_data(app_dict: AppData):
|
||||
var file = FileAccess.open(data_file_path, FileAccess.READ)
|
||||
var existing_data = {}
|
||||
if file:
|
||||
var json = JSON.new()
|
||||
var error = json.parse(file.get_as_text())
|
||||
if error == OK:
|
||||
existing_data = json.get_data()
|
||||
file.close()
|
||||
else:
|
||||
print("File not found. Creating a new one.")
|
||||
#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_new[key] = {
|
||||
"name": link.name,
|
||||
"url": link.url,
|
||||
"description": link.description
|
||||
}
|
||||
var new_data_dict = {}
|
||||
#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] = {
|
||||
"name": link.name,
|
||||
"url": link.url,
|
||||
"description": link.description
|
||||
}
|
||||
var emulators = {}
|
||||
for key in app_dict.emulators.keys():
|
||||
var emulator = app_data.emulators[key]
|
||||
var properties = []
|
||||
for property in emulator.properties:
|
||||
properties.append({
|
||||
#"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):
|
||||
var existing_dict = existing_data[key]
|
||||
var new_dict = new_data_dict[key]
|
||||
|
||||
# Merge dictionaries
|
||||
for sub_key in new_dict.keys():
|
||||
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")
|
||||
var json_text = JSON.stringify(existing_data, "\t")
|
||||
|
||||
# Open the file in append mode and write the new JSON data
|
||||
file = FileAccess.open(data_file_path, FileAccess.WRITE)
|
||||
file.store_string(json_text)
|
||||
file.close()
|
||||
|
||||
# Function to modify an existing link
|
||||
func modify_link(key: String, new_name: String, new_url: String, new_description: String):
|
||||
var app_dict = load_base_data() # was app_data
|
||||
if app_dict and app_dict.about_links.has(key):
|
||||
var link = app_dict.about_links[key]
|
||||
link.name = new_name
|
||||
link.url = new_url
|
||||
link.description = new_description
|
||||
app_dict.about_links[key] = link
|
||||
save_base_data(app_dict)
|
||||
print("Link modified successfully")
|
||||
else:
|
||||
print("Link not found")
|
||||
|
||||
# Function to modify an existing emulator
|
||||
func modify_emulator(key: String, new_name: String, new_launch: String, new_description: String, new_properties: Array):
|
||||
#data_handler.modify_emulator_test()
|
||||
var app_dict = load_base_data() # was app_data
|
||||
if app_dict and app_dict.emulators.has(key):
|
||||
var emulator = app_dict.emulators[key]
|
||||
emulator.name = new_name
|
||||
emulator.description = new_description
|
||||
emulator.launch = new_launch
|
||||
|
||||
# Update properties
|
||||
emulator.properties.clear()
|
||||
for property in new_properties:
|
||||
var new_property = EmulatorProperty.new()
|
||||
new_property.borders = property.borders
|
||||
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")
|
||||
else:
|
||||
print("Emulator not found")
|
||||
|
||||
|
||||
func add_emulator() -> void:
|
||||
#data_handler.add_emulator()
|
||||
var link = Link.new()
|
||||
link.name = "Example Site"
|
||||
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."
|
||||
emulator.launch = "launcher"
|
||||
var property = EmulatorProperty.new()
|
||||
#property.standalone = true
|
||||
property.abxy_button = false
|
||||
emulator.properties.append(property)
|
||||
app_data.emulators["example_emulator"] = emulator
|
||||
data_handler.save_base_data(app_data)
|
||||
|
||||
func modify_emulator_test() -> void:
|
||||
data_handler.modify_link("example_site", "Updated Site", "https://updated-example.com", "Updated description.")
|
||||
var new_properties = []
|
||||
var new_property = EmulatorProperty.new()
|
||||
#new_property.standalone = false
|
||||
new_property.abxy_button = true
|
||||
new_properties.append(new_property)
|
||||
data_handler.modify_emulator("example_emulator", "Updated System", "launcher", "Updated description", new_properties)
|
||||
|
||||
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:
|
||||
class_functions.logger("e","Failed to open file: " + file_path)
|
||||
return config
|
||||
while not file.eof_reached():
|
||||
var line = file.get_line().strip_edges()
|
||||
if line.begins_with("[") and line.ends_with("]"):
|
||||
current_section = line.substr(1, line.length() - 2)
|
||||
config[current_section] = {}
|
||||
elif line != "" and not line.begins_with("#"):
|
||||
var parts = line.split("=")
|
||||
if parts.size() == 2:
|
||||
var key = parts[0].strip_edges()
|
||||
var value = parts[1].strip_edges()
|
||||
if value == "true":
|
||||
value = true
|
||||
elif value == "false":
|
||||
value = false
|
||||
if key == "version":
|
||||
config[key] = value
|
||||
else:
|
||||
if current_section == "":
|
||||
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()
|
||||
var json_string = JSON.stringify(config, "\t")
|
||||
|
||||
var file = FileAccess.open(json_file_path, FileAccess.WRITE)
|
||||
if file != null:
|
||||
file.store_string(json_string)
|
||||
file.close()
|
||||
else:
|
||||
class_functions.logger("e", "File not found: %s" % json_file_path)
|
||||
|
||||
func read_cfg_file(file_path: String) -> Array:
|
||||
var lines: Array = []
|
||||
var file: FileAccess = FileAccess.open(file_path, FileAccess.ModeFlags.READ)
|
||||
if file:
|
||||
while not file.eof_reached():
|
||||
var line: String = file.get_line()
|
||||
lines.append(line)
|
||||
file.close()
|
||||
else:
|
||||
class_functions.logger("e", "File not found: %s" % file_path)
|
||||
return lines
|
||||
|
||||
func write_cfg_file(file_path: String, lines: Array, changes: Dictionary) -> void:
|
||||
var file: FileAccess = FileAccess.open(file_path, FileAccess.ModeFlags.WRITE)
|
||||
var current_section: String = ""
|
||||
var line_count: int = lines.size()
|
||||
for i in line_count:
|
||||
var line: String = lines[i]
|
||||
var trimmed_line: String = line.strip_edges()
|
||||
if trimmed_line.begins_with("[") and trimmed_line.ends_with("]"):
|
||||
current_section = trimmed_line.trim_prefix("[").trim_suffix("]")# trimmed_line.trim_prefix("["].trim_suffix("]")
|
||||
file.store_line(line)
|
||||
elif "=" in trimmed_line and current_section in changes:
|
||||
var parts: Array = trimmed_line.split("=", false)
|
||||
if parts.size() == 2:
|
||||
var key: String = parts[0].strip_edges()
|
||||
var original_value: String = parts[1].strip_edges()
|
||||
if key in changes[current_section]:
|
||||
var new_value: String = changes[current_section][key]
|
||||
if new_value != original_value:
|
||||
file.store_line("%s=%s" % [key, new_value])
|
||||
class_functions.logger("i", "Changed %s in section [%s] from %s to %s" % [key, current_section, original_value, new_value])
|
||||
else:
|
||||
file.store_line(line)
|
||||
else:
|
||||
file.store_line(line)
|
||||
else:
|
||||
file.store_line(line)
|
||||
else:
|
||||
file.store_line(line)
|
||||
if i == line_count - 2:
|
||||
break
|
||||
file.close()
|
||||
|
||||
func change_cfg_value(file_path: String, system: String, section: String, new_value: String) -> Array:
|
||||
var lines: Array = read_cfg_file(file_path)
|
||||
var parameters: Array =[system, section]
|
||||
var changes: Dictionary = {}
|
||||
changes[section] = {system: new_value}
|
||||
class_functions.logger("i", "Change: System: %s Section %s New Value: %s" % [system, section, new_value])
|
||||
write_cfg_file(file_path, lines, changes)
|
||||
return parameters
|
||||
|
||||
func change_all_cfg_values(file_path: String, systems: Dictionary, section: String, new_value: String) -> Array:
|
||||
var lines: Array = read_cfg_file(file_path)
|
||||
var parameters: Array =[systems, section]
|
||||
var changes: Dictionary = {}
|
||||
var current_section: String
|
||||
for line in lines:
|
||||
var trimmed_line: String = line.strip_edges()
|
||||
if trimmed_line.begins_with("[") and trimmed_line.ends_with("]"):
|
||||
current_section = trimmed_line.trim_prefix("[").trim_suffix("]")
|
||||
if current_section == section:
|
||||
changes[current_section] = {}
|
||||
elif "=" in trimmed_line and current_section == section:
|
||||
var parts: Array = trimmed_line.split("=", false)
|
||||
if parts.size() >= 2:
|
||||
var key: String = parts[0].strip_edges()
|
||||
changes[section][key] = new_value
|
||||
class_functions.logger("i", "Change: Systems: %s Section %s New Value: %s" % [systems, section, new_value])
|
||||
write_cfg_file(file_path, lines, changes)
|
||||
return parameters
|
||||
|
||||
func get_elements_in_section(file_path: String, section: String) -> Dictionary:
|
||||
var lines: Array = read_cfg_file(file_path)
|
||||
var elements: Dictionary = {}
|
||||
var current_section: String = ""
|
||||
for line in lines:
|
||||
var trimmed_line: String = line.strip_edges()
|
||||
if trimmed_line.begins_with("[") and trimmed_line.ends_with("]"):
|
||||
current_section = trimmed_line.trim_prefix("[").trim_suffix("]")
|
||||
elif "=" in trimmed_line and current_section == section:
|
||||
var parts: Array = trimmed_line.split("=", false)
|
||||
if parts.size() >= 2:
|
||||
var key: String = parts[0].strip_edges()
|
||||
var value: String = parts[1].strip_edges()
|
||||
elements[key] = value
|
||||
return elements
|
||||
|
||||
func read_change_regex(file_path: String, key: String, new_value: String, use_quotes: bool = true) -> String:
|
||||
var file := FileAccess.open(file_path, FileAccess.READ_WRITE)
|
||||
if file == null:
|
||||
print("Error: Could not open the file - %s" % file_path)
|
||||
return ""
|
||||
var content := file.get_as_text()
|
||||
file.close()
|
||||
var pattern := ""
|
||||
if use_quotes:
|
||||
pattern = '%s\\s*=\\s*"(.*?)"' % key
|
||||
else:
|
||||
pattern = '%s\\s*=\\s*(.*)' % key # For keys without quotes
|
||||
var regex := RegEx.new()
|
||||
regex.compile(pattern)
|
||||
var match := regex.search(content)
|
||||
if match == null:
|
||||
print("Key %s not found for match - %s" % [key, match])
|
||||
return ""
|
||||
var current_value := match.get_string(1)
|
||||
if new_value == current_value:
|
||||
print (current_value)
|
||||
return current_value
|
||||
var updated_content := ""
|
||||
if use_quotes:
|
||||
updated_content = regex.sub(content, '%s = "%s"' % [key, new_value])
|
||||
else:
|
||||
updated_content = regex.sub(content, '%s = %s' % [key, new_value])
|
||||
file = FileAccess.open(file_path, FileAccess.WRITE)
|
||||
file.store_string(updated_content)
|
||||
file.close()
|
||||
print("File updated successfully")
|
||||
return new_value
|
Loading…
Reference in a new issue