Merge branch 'cooker'
|
@ -4,21 +4,19 @@ Buttons/A = SOUTH
|
|||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR | TL
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
|
@ -26,30 +24,28 @@ D-Pad/Up = `Axis 7-`
|
|||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
Rumble/Motor = Strong
|
||||
[GCPad2]
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 1
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR | TL
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
|
@ -57,30 +53,28 @@ D-Pad/Up = `Axis 7-`
|
|||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
Rumble/Motor = Strong
|
||||
[GCPad3]
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 2
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR | TL
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
|
@ -88,30 +82,28 @@ D-Pad/Up = `Axis 7-`
|
|||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
Rumble/Motor = Strong
|
||||
[GCPad4]
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 3
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR | TL
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
|
@ -119,6 +111,6 @@ D-Pad/Up = `Axis 7-`
|
|||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
Rumble/Motor = Strong
|
||||
|
|
10
config/dolphin/RetroAchievements.ini
Normal file
|
@ -0,0 +1,10 @@
|
|||
[Achievements]
|
||||
ApiToken =
|
||||
DiscordPresenceEnabled = True
|
||||
Enabled = False
|
||||
EncoreEnabled = True
|
||||
HardcoreEnabled = False
|
||||
ProgressEnabled = False
|
||||
SpectatorEnabled = False
|
||||
UnofficialEnabled = False
|
||||
Username =
|
0
config/ppssppsdl/ppsspp_retroachievements.dat
Normal file
|
@ -41,8 +41,9 @@ UseDiscordPresence = True
|
|||
HotkeysRequireFocus = True
|
||||
UseGameCovers = False
|
||||
RecursiveISOPaths = False
|
||||
ISOPath0 = RETRODECKHOMEDIR/roms/gc
|
||||
ISOPaths = 1
|
||||
ISOPath0 = RETRODECKHOMEDIR/roms/wii
|
||||
ISOPath1 = RETRODECKHOMEDIR/roms/gc
|
||||
ISOPaths = 2
|
||||
[Display]
|
||||
DisableScreenSaver = True
|
||||
KeepWindowOnTop = False
|
||||
|
|
|
@ -1,49 +1,116 @@
|
|||
[GCPad1]
|
||||
Device = SDL/0/Microsoft X-Box 360 pad 0
|
||||
Buttons/A = `Full Axis 5+` | `Button 0`
|
||||
Buttons/B = `Button 1`
|
||||
Buttons/X = `Button 2`
|
||||
Buttons/Y = `Button 3`
|
||||
Buttons/Z = `Button 6`
|
||||
Buttons/Start = `Button 7`
|
||||
Main Stick/Dead Zone = 10.0
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 0
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Button 5` & `Hat 0 N`
|
||||
C-Stick/Down = `Button 5` & `Hat 0 S`
|
||||
C-Stick/Left = `Button 5` & `Hat 0 W`
|
||||
C-Stick/Right = `Button 5` & `Hat 0 E`
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
D-Pad/Up = `Axis 7-`
|
||||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
D-Pad/Up = !`Button 5` & `Hat 0 N`
|
||||
D-Pad/Down = !`Button 5` & `Hat 0 S`
|
||||
D-Pad/Left = !`Button 5` & `Hat 0 W`
|
||||
D-Pad/Right = !`Button 5` & `Hat 0 E`
|
||||
Camera Control/Dead Zone = 10.0
|
||||
Camera Control/Up = `Axis 4-`
|
||||
Camera Control/Down = `Axis 4+`
|
||||
Camera Control/Left = `Axis 3-`
|
||||
Camera Control/Right = `Axis 3+`
|
||||
Camera Control/Modifier/Range = 50.0
|
||||
PrimeHack/Mode = 1
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
[GCPad2]
|
||||
Device = XInput2/0/Virtual core pointer
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
Camera Control/Modifier/Range = 50.0
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 1
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
D-Pad/Up = `Axis 7-`
|
||||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
[GCPad3]
|
||||
Device = XInput2/0/Virtual core pointer
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
Camera Control/Modifier/Range = 50.0
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 2
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
D-Pad/Up = `Axis 7-`
|
||||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
[GCPad4]
|
||||
Device = XInput2/0/Virtual core pointer
|
||||
Main Stick/Modifier/Range = 50.0
|
||||
C-Stick/Modifier/Range = 50.0
|
||||
Camera Control/Modifier/Range = 50.0
|
||||
Device = evdev/0/Microsoft X-Box 360 pad 3
|
||||
Buttons/A = SOUTH
|
||||
Buttons/B = EAST
|
||||
Buttons/X = NORTH
|
||||
Buttons/Y = WEST
|
||||
Buttons/Z = TR
|
||||
Buttons/Start = START
|
||||
Main Stick/Up = `Axis 1-`
|
||||
Main Stick/Down = `Axis 1+`
|
||||
Main Stick/Left = `Axis 0-`
|
||||
Main Stick/Right = `Axis 0+`
|
||||
Main Stick/Modifier = THUMBL
|
||||
Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
C-Stick/Up = `Axis 4-`
|
||||
C-Stick/Down = `Axis 4+`
|
||||
C-Stick/Left = `Axis 3-`
|
||||
C-Stick/Right = `Axis 3+`
|
||||
C-Stick/Modifier = THUMBR
|
||||
C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
|
||||
Triggers/L = `Full Axis 2+`
|
||||
Triggers/R = `Full Axis 5+`
|
||||
D-Pad/Up = `Axis 7-`
|
||||
D-Pad/Down = `Axis 7+`
|
||||
D-Pad/Left = `Axis 6-`
|
||||
D-Pad/Right = `Axis 6+`
|
||||
Rumble/Motor = Strong
|
||||
Triggers/L-Analog = `Full Axis 2+`
|
||||
Triggers/R-Analog = `Full Axis 5+`
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
"export_type" ""
|
||||
"controller_type" "controller_neptune"
|
||||
"controller_caps" "23117823"
|
||||
"major_revision" "0"
|
||||
"major_revision" "1"
|
||||
"minor_revision" "0"
|
||||
"Timestamp" "-942108240"
|
||||
"actions"
|
||||
|
|
|
@ -1,2 +1,6 @@
|
|||
config_file_format^dolphin
|
||||
change^ask_to_exit^ConfirmStop^True^Interface^$dolphinconf^$config/dolphin/Dolphin.ini
|
||||
change^cheevos^Enabled^True^Achievements^$dolphinCheevosConf^$config/dolphin-emu/RetroAchievements.ini
|
||||
change^cheevos^ApiToken^$cheevos_token^Achievements^$dolphinCheevosConf^$config/dolphin-emu/RetroAchievements.ini
|
||||
change^cheevos^Username^$cheevos_username^Achievements^$dolphinCheevosConf^$config/dolphin-emu/RetroAchievements.ini
|
||||
change^cheevos_hardcore^HardcoreEnabled^True^Achievements^$dolphinCheevosConf^$config/dolphin-emu/RetroAchievements.ini
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
config_file_format^ppsspp
|
||||
change^savestate_auto_load^AutoLoadSaveState^2^General^$ppssppconf^$config/ppssppdl/ppsspp.ini
|
||||
change^cheevos^AchievementsEnable^True^Achievements^$ppssppconf^$config/ppssppdl/ppsspp.ini
|
||||
change^cheevos^AchievementsUserName^Achievements^$cheevos_username^$ppssppconf^$config/ppssppdl/ppsspp.ini
|
||||
change^cheevos_hardcore^AchievementsChallengeMode^True^Achievements^$ppssppconf^$config/ppssppdl/ppsspp.ini
|
||||
change^savestate_auto_load^AutoLoadSaveState^2^General^$ppssppconf^$config/ppssppsdl/ppsspp.ini
|
||||
change^cheevos^AchievementsEnable^True^Achievements^$ppssppconf^$config/ppssppsdl/ppsspp.ini
|
||||
change^cheevos^AchievementsUserName^$cheevos_username^Achievements^$ppssppconf^$config/ppssppsdl/ppsspp.ini
|
||||
rewrite^cheevos^^$cheevos_token^^$ppssppcheevosconf^$config/ppssppsdl/ppsspp_retroachievements.dat
|
||||
change^cheevos_hardcore^AchievementsChallengeMode^True^Achievements^$ppssppconf^$config/ppssppsdl/ppsspp.ini
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
config_file_format^retroarch
|
||||
change^borders^input_overlay^/var/config/retrodeck/overlays/borders/pegasus/psx.cfg^^/var/config/retroarch/config/SwanStation/psx.cfg^$config/retroarch/retroarch.cfg
|
||||
change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/psx.cfg^^/var/config/retroarch/config/SwanStation/psx.cfg^$config/retroarch/retroarch.cfg
|
||||
change^borders^input_overlay_aspect_adjust_landscape^0.120000^^/var/config/retroarch/config/SwanStation/psx.cfg^$config/retroarch/retroarch.cfg
|
||||
change^borders^input_overlay_enable^true^^/var/config/retroarch/config/SwanStation/psx.cfg^$config/retroarch/retroarch.cfg
|
||||
change^borders^input_overlay_scale_landscape^1.040000^^/var/config/retroarch/config/SwanStation/psx.cfg^$config/retroarch/retroarch.cfg
|
||||
|
|
|
@ -74,9 +74,9 @@
|
|||
"description": "Neo Geo BIOS",
|
||||
"required": "required",
|
||||
"paths": [
|
||||
"roms/neogeo",
|
||||
"roms/fbneo",
|
||||
"roms/arcade"
|
||||
"$roms_folder/neogeo",
|
||||
"$roms_folder/fbneo",
|
||||
"$roms_folder/arcade"
|
||||
]
|
||||
},
|
||||
"neocdz.zip": {
|
||||
|
@ -664,13 +664,13 @@
|
|||
"system": "switch",
|
||||
"description": "A file required for Switch emulation",
|
||||
"required": "required",
|
||||
"paths": "bios/switch/keys"
|
||||
"paths": "$bios_folder/switch/keys"
|
||||
},
|
||||
"title.keys": {
|
||||
"system": "switch",
|
||||
"description": "A file required for Switch emulation",
|
||||
"required": "required",
|
||||
"paths": "bios/switch/keys"
|
||||
"paths": "$bios_folder/switch/keys"
|
||||
},
|
||||
"pico8": {
|
||||
"system": "PICO-8",
|
||||
|
@ -709,7 +709,7 @@
|
|||
"md5": "e10c53c2f8b90bab96ead2d368858623",
|
||||
"system": "dreamcast",
|
||||
"description": "Dreamcast BIOS",
|
||||
"paths": "bios/dc",
|
||||
"paths": "$bios_folder/dc",
|
||||
"required": "required"
|
||||
},
|
||||
"naomi.zip": {
|
||||
|
@ -719,13 +719,13 @@
|
|||
],
|
||||
"system": "dreamcast",
|
||||
"description": "Naomi BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"naomi2.zip": {
|
||||
"md5": "9b85e0de6ef359e5006c9b79a5a266b0",
|
||||
"system": "dreamcast",
|
||||
"description": "Naomi BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"naomi_boot.bin": {
|
||||
"md5": [
|
||||
|
@ -737,7 +737,7 @@
|
|||
"arcade"
|
||||
],
|
||||
"description": "Naomi BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"hod2bios.zip": {
|
||||
"md5": [
|
||||
|
@ -746,7 +746,7 @@
|
|||
],
|
||||
"system": "dreamcast",
|
||||
"description": "Naomi The House of the Dead 2 BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"f355dlx.zip": {
|
||||
"md5": [
|
||||
|
@ -755,7 +755,7 @@
|
|||
],
|
||||
"system": "dreamcast",
|
||||
"description": "Naomi Ferrari F355 Challenge Deluxe BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"f355bios.zip": {
|
||||
"md5": [
|
||||
|
@ -767,7 +767,7 @@
|
|||
"arcade"
|
||||
],
|
||||
"description": "Naomi Ferrari F355 Challenge Twin/Deluxe BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"airlbios.zip": {
|
||||
"md5": [
|
||||
|
@ -779,7 +779,7 @@
|
|||
"arcade"
|
||||
],
|
||||
"description": "Naomi Airline Pilots Deluxe BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"awbios.zip": {
|
||||
"md5": [
|
||||
|
@ -791,7 +791,7 @@
|
|||
"arcade"
|
||||
],
|
||||
"description": "Naomi Atomiswave BIOS",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"bios.sms": {
|
||||
"md5": "840481177270d5642a14ca71ee72844c",
|
||||
|
@ -1168,51 +1168,86 @@
|
|||
"gc-dvd-20010608.bin": {
|
||||
"md5": "561532ad496f644897952d2cef5bb431",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/EU",
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube DVD BIOS"
|
||||
},
|
||||
"gc-dvd-20010831.bin": {
|
||||
"md5": "b953eb1a8fc9922b3f7051c1cdc451f1",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/EU",
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"system": "gc",
|
||||
"description": "Gamecube DVD BIOS"
|
||||
},
|
||||
"gc-dvd-20020402.bin": {
|
||||
"md5": "413154dd0e2c824c9b18b807fd03ec4e",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/EU",
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube DVD BIOS"
|
||||
},
|
||||
"gc-dvd-20020823.bin": {
|
||||
"md5": "c03f6bbaf644eb9b3ee261dbe199eb42",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/EU",
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube DVD BIOS"
|
||||
},
|
||||
"gc-ntsc-10.bin": {
|
||||
"md5": "fc924a7c879b661abc37cec4f018fdf3",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube NTSC BIOS"
|
||||
},
|
||||
"gc-ntsc-11.bin": {
|
||||
"md5": "019e39822a9ca3029124f74dd4d55ac4",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube NTSC BIOS"
|
||||
},
|
||||
"gc-ntsc-12.bin": {
|
||||
"md5": "b17148254a5799684c7d783206504926",
|
||||
"system": "gc",
|
||||
"paths": [
|
||||
"$saves_folder/gc/dolphin/US",
|
||||
"$saves_folder/gc/dolphin/JP"
|
||||
],
|
||||
"description": "Gamecube NTSC BIOS"
|
||||
},
|
||||
"gc-pal-10.bin": {
|
||||
"md5": "0cdda509e2da83c85bfe423dd87346cc",
|
||||
"system": "gc",
|
||||
"paths": "$saves_folder/gc/dolphin/EU",
|
||||
"description": "Gamecube PAL BIOS"
|
||||
},
|
||||
"gc-pal-11.bin": {
|
||||
"md5": "339848a0b7c2124cf155276c1e79cbd0",
|
||||
"system": "gc",
|
||||
"paths": "$saves_folder/gc/dolphin/EU",
|
||||
"description": "Gamecube PAL BIOS"
|
||||
},
|
||||
"gc-pal-12.bin": {
|
||||
"md5": "db92574caab77a7ec99d4605fd6f2450",
|
||||
"system": "gc",
|
||||
"paths": "$saves_folder/gc/dolphin/EU",
|
||||
"description": "Gamecube PAL BIOS"
|
||||
},
|
||||
"64DD_IPL.bin": {
|
||||
|
@ -1390,14 +1425,14 @@
|
|||
"system": "dreamcast",
|
||||
"description": "Dreamcast BIOS",
|
||||
"required": "required",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"flash.bin": {
|
||||
"md5": "0a93f7940c455905bea6e392dfde92a4",
|
||||
"system": "dreamcast",
|
||||
"description": "Dreamcast BIOS",
|
||||
"required": "required",
|
||||
"paths": "bios/dc"
|
||||
"paths": "$bios_folder/dc"
|
||||
},
|
||||
"bios_J.sms": {
|
||||
"md5": "24a519c53f67b00640d0048ef7089105",
|
||||
|
@ -2329,6 +2364,54 @@
|
|||
"md5": "88dc7876d584f90e4106f91444ab23b7",
|
||||
"system": "enterprise",
|
||||
"description": "Enterprise - 64/128 BIOS"
|
||||
},
|
||||
"a2diskiing.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Holds the ROM(s) for the Disk II interface",
|
||||
"paths": [
|
||||
"$roms_folder/apple2"
|
||||
],
|
||||
"required": "required"
|
||||
},
|
||||
"apple2e.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Contains the main BIOS ROM images for the Apple IIe system",
|
||||
"paths": [
|
||||
"$roms_folder/apple2"
|
||||
],
|
||||
"required": "required"
|
||||
},
|
||||
"d2fdc.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Provides the ROM for the floppy disk controller itself",
|
||||
"paths": [
|
||||
"$roms_folder/apple2"
|
||||
],
|
||||
"required": "required"
|
||||
},
|
||||
"votrsc01.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Contains the ROM images for the Votrax SC-01 speech synthesizer chip",
|
||||
"paths": [
|
||||
"$roms_folder/apple2"
|
||||
],
|
||||
"required": "required"
|
||||
},
|
||||
"votrsc01a.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Contains the ROM images for the Votrax SC-01 speech synthesizer chip",
|
||||
"paths": [
|
||||
"$roms_folder/apple2"
|
||||
],
|
||||
"required": "required"
|
||||
},
|
||||
"apple2gs.zip": {
|
||||
"system": "apple2",
|
||||
"description": "Apple IIGS system bios",
|
||||
"paths": [
|
||||
"$roms_folder/apple2gs"
|
||||
],
|
||||
"required": "required"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -156,6 +156,15 @@
|
|||
"full_end_date": "2025-10-05",
|
||||
"filename": "placeholder.svg"
|
||||
},
|
||||
"halloween": {
|
||||
"start_date": "1025",
|
||||
"end_date": "1102",
|
||||
"start_time": "0000",
|
||||
"end_time": "2359",
|
||||
"full_start_date": "2025-10-25",
|
||||
"full_end_date": "2025-11-02",
|
||||
"filename": "placeholder.svg"
|
||||
},
|
||||
"xmas": {
|
||||
"start_date": "1201",
|
||||
"end_date": "1231",
|
||||
|
@ -248,6 +257,7 @@
|
|||
"gbc",
|
||||
"genesis",
|
||||
"mastersystem",
|
||||
"megadrive",
|
||||
"n64",
|
||||
"nes",
|
||||
"ngp",
|
||||
|
@ -683,6 +693,9 @@
|
|||
"psx": {
|
||||
"name": "Sony PlayStation"
|
||||
},
|
||||
"psx_ra": {
|
||||
"name": "Sony PlayStation"
|
||||
},
|
||||
"pv1000": {
|
||||
"name": "Casio PV-1000"
|
||||
},
|
||||
|
@ -829,8 +842,14 @@
|
|||
}
|
||||
},
|
||||
"emulator": {
|
||||
"retrodeck": {
|
||||
"description": "RetroDECK Framework",
|
||||
"name": "RetroDECK",
|
||||
"url": "https://retrodeck.net/",
|
||||
"cli-arg": "--version"
|
||||
},
|
||||
"retroarch": {
|
||||
"description": "RetroArch (Multi-emulator Frontend)",
|
||||
"description": "Libretro Multi-emulator Frontend",
|
||||
"name": "RetroArch",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/retroarch/retroarch-guide/",
|
||||
"launch": "retroarch",
|
||||
|
@ -1000,7 +1019,7 @@
|
|||
}
|
||||
},
|
||||
"mame": {
|
||||
"description": "MAME: Multiple Arcade Machine Emulator",
|
||||
"description": "Multiple Arcade Machine Emulator",
|
||||
"name": "MAME",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/mame/mame-guide/",
|
||||
"system": [
|
||||
|
@ -1010,7 +1029,7 @@
|
|||
"cli-arg": "-help"
|
||||
},
|
||||
"citra": {
|
||||
"description": "Citra Nintendo 3DS Emulator (via Ponzu)",
|
||||
"description": "A legacy Nintendo 3DS Emulator (via Ponzu)",
|
||||
"name": "Citra (via Ponzu)",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
|
||||
"system": "n3ds",
|
||||
|
@ -1033,7 +1052,7 @@
|
|||
"cli-arg": ""
|
||||
},
|
||||
"melonds": {
|
||||
"description": "MelonDS Nintendo DS Emulator",
|
||||
"description": "Nintendo DS Emulator",
|
||||
"name": "melonDS",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/melonds/melonds-guide/",
|
||||
"system": "nds",
|
||||
|
@ -1042,7 +1061,7 @@
|
|||
},
|
||||
"pcsx2": {
|
||||
"name": "pcsx2",
|
||||
"description": "PCSX2 Play Station 2 Emulator",
|
||||
"description": "PlayStation 2 Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/pcsx2/pcsx2-guide/",
|
||||
"system": "ps2",
|
||||
"launch": "pcsx2-qt",
|
||||
|
@ -1070,7 +1089,7 @@
|
|||
},
|
||||
"ppsspp": {
|
||||
"name": "PPSSPP",
|
||||
"description": "PPSSPP: PlayStation Portable Emulator",
|
||||
"description": "PlayStation Portable Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/ppsspp/ppsspp-guide/",
|
||||
"launch": "PPSSPPSDL",
|
||||
"cli-arg": "--version",
|
||||
|
@ -1084,7 +1103,7 @@
|
|||
},
|
||||
"vita3k": {
|
||||
"name": "Vita3k",
|
||||
"description": "Vita3K PSVita Emulator",
|
||||
"description": "PSVita Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/vita3k/vita3k-guide/",
|
||||
"system": "psvita",
|
||||
"launch": "Vita3K",
|
||||
|
@ -1092,7 +1111,7 @@
|
|||
},
|
||||
"rpcs3": {
|
||||
"name": "RPCS3",
|
||||
"description": "RPCS3 PlayStation 3 Emulator",
|
||||
"description": "PlayStation 3 Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/rpcs3/rpcs3-guide/",
|
||||
"system": "ps3",
|
||||
"launch": "rpcs3",
|
||||
|
@ -1106,7 +1125,7 @@
|
|||
},
|
||||
"ryujinx": {
|
||||
"name": "Ryujinx",
|
||||
"description": "Ryujinx Nintendo Switch Emulator",
|
||||
"description": "A legacy Nintendo Switch Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/ryujinx/ryujinx-guide/",
|
||||
"system": "switch",
|
||||
"launch": "Ryujinx.sh",
|
||||
|
@ -1114,7 +1133,7 @@
|
|||
},
|
||||
"yuzu": {
|
||||
"name": "Yuzu (via Ponzu)",
|
||||
"description": "Yuzu Nintendo Switch Emulator (via Ponzu)",
|
||||
"description": "A legacy Nintendo Switch Emulator (via Ponzu)",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
|
||||
"launch": "Yuzu",
|
||||
"cli-arg": "",
|
||||
|
@ -1124,7 +1143,7 @@
|
|||
},
|
||||
"dolphin": {
|
||||
"name": "Dolphin",
|
||||
"description": "Dolphin Wii and GameCube Emulator",
|
||||
"description": "Wii and GameCube Emulator",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
|
||||
"launch": "dolphin-emu-wrapper",
|
||||
"cli-arg": "--version",
|
||||
|
@ -1144,7 +1163,7 @@
|
|||
},
|
||||
"primehack": {
|
||||
"name": "PrimeHack",
|
||||
"description": "A fork of Dolphiin to enhance Metroid Prime experience",
|
||||
"description": "A fork of Dolphin to enhance Metroid Prime experience",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
|
||||
"launch": "primehack-wrapper",
|
||||
"cli-arg": "--version",
|
||||
|
@ -1173,7 +1192,7 @@
|
|||
]
|
||||
},
|
||||
"xemu": {
|
||||
"description": "xemu Xbox Emulator",
|
||||
"description": "Xbox Emulator",
|
||||
"name": "xemu",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/xemu/xemu-guide/",
|
||||
"system": "xbox",
|
||||
|
@ -1181,20 +1200,20 @@
|
|||
"cli-arg": "--version"
|
||||
},
|
||||
"es-de": {
|
||||
"description": "ES-DE Emulation Frontend",
|
||||
"description": "Emulation Frontend",
|
||||
"name": "ES-DE",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_es_de/esde-guide/.",
|
||||
"launch": "es-de",
|
||||
"cli-arg": "--version"
|
||||
},
|
||||
"steam-rom-manager": {
|
||||
"description": "Steam ROM Manager (used to sync RetroDECK favorites with Steam)",
|
||||
"description": "Used to sync RetroDECK favorites and Launcher with Steam",
|
||||
"name": "Steam ROM Manager",
|
||||
"launch": "steam-rom-manager",
|
||||
"cli-arg": "--version"
|
||||
},
|
||||
"portmaster": {
|
||||
"description": "PortMaster",
|
||||
"description": "Port Manager also available on various linux handheld devices that ease the managing of ports",
|
||||
"name": "PortMaster",
|
||||
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
|
||||
"system": "portmaster",
|
||||
|
|
|
@ -5,7 +5,9 @@ rdhome=/home/deck/retrodeck
|
|||
roms_folder=/home/deck/retrodeck/roms
|
||||
saves_folder=/home/deck/retrodeck/saves
|
||||
states_folder=/home/deck/retrodeck/states
|
||||
shaders_folder=/home/deck/retrodeck/shaders
|
||||
bios_folder=/home/deck/retrodeck/bios
|
||||
backups_folder=/home/deck/retrodeck/backups
|
||||
media_folder=/home/deck/retrodeck/ES-DE/downloaded_media
|
||||
themes_folder=/home/deck/retrodeck/ES-DE/themes
|
||||
logs_folder=/home/deck/retrodeck/logs
|
||||
|
@ -13,6 +15,7 @@ screenshots_folder=/home/deck/retrodeck/screenshots
|
|||
mods_folder=/home/deck/retrodeck/mods
|
||||
texture_packs_folder=/home/deck/retrodeck/texture_packs
|
||||
borders_folder=/home/deck/retrodeck/borders
|
||||
cheats_folder=/home/deck/retrodeck/cheats
|
||||
sdcard=/run/media/mmcblk0p1
|
||||
|
||||
[options]
|
||||
|
@ -37,16 +40,21 @@ font=1
|
|||
cheevos_login=false
|
||||
logging_level=info
|
||||
portmaster_reload_esde=true
|
||||
portmaster_show=true
|
||||
|
||||
[cheevos]
|
||||
duckstation=false
|
||||
pcsx2=false
|
||||
retroarch=false
|
||||
ppsspp=false
|
||||
dolphin=false
|
||||
|
||||
[cheevos_hardcore]
|
||||
duckstation=false
|
||||
pcsx2=false
|
||||
retroarch=false
|
||||
ppsspp=false
|
||||
dolphin=false
|
||||
|
||||
[rewind]
|
||||
gb=false
|
||||
|
|
|
@ -16,7 +16,7 @@ if [[ $(check_desktop_mode) == "true" ]]; then
|
|||
log d "ruffle --graphics vulkan $static_invoke $@"
|
||||
ruffle --graphics vulkan $static_invoke "$@"
|
||||
else
|
||||
log d "Running Ruffle in Desktop Mode"
|
||||
log d "Running Ruffle in Gaming Mode"
|
||||
log d "ruffle --graphics gl --no-gui $static_invoke $@"
|
||||
ruffle --graphics gl --no-gui $static_invoke "$@"
|
||||
fi
|
6
config/steam-rom-manager/manifests/RetroDECK.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"title": "RetroDECK",
|
||||
"target": "flatpak",
|
||||
"launchOptions": "run net.retrodeck.retrodeck",
|
||||
"startIn": ""
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"parserType": "Glob",
|
||||
"configTitle": "RetroDECK",
|
||||
"configTitle": "RetroDECK Steam Sync",
|
||||
"steamDirectory": "${steamdirglobal}",
|
||||
"romDirectory": "${romsdirglobal}",
|
||||
"steamCategories": [
|
||||
|
@ -128,5 +128,132 @@
|
|||
},
|
||||
"parserId": "1725539138664815",
|
||||
"version": 25
|
||||
},
|
||||
{
|
||||
"parserType": "Manual",
|
||||
"configTitle": "RetroDECK Launcher",
|
||||
"steamDirectory": "${steamdirglobal}",
|
||||
"romDirectory": "${romsdirglobal}",
|
||||
"steamCategories": [
|
||||
"RetroDECK"
|
||||
],
|
||||
"executableArgs": "",
|
||||
"executableModifier": "",
|
||||
"startInDirectory": "",
|
||||
"titleModifier": "",
|
||||
"fetchControllerTemplatesButton": null,
|
||||
"removeControllersButton": null,
|
||||
"steamInputEnabled": "2",
|
||||
"imageProviders": [],
|
||||
"onlineImageQueries": [
|
||||
"${fuzzyTitle}"
|
||||
],
|
||||
"imagePool": "",
|
||||
"drmProtect": false,
|
||||
"userAccounts": {
|
||||
"specifiedAccounts": [
|
||||
""
|
||||
]
|
||||
},
|
||||
"parserInputs": {
|
||||
"manualManifests": "/var/config/steam-rom-manager/userData/manifests"
|
||||
},
|
||||
"executable": {
|
||||
"path": "",
|
||||
"shortcutPassthrough": false,
|
||||
"appendArgsToExecutable": false
|
||||
},
|
||||
"titleFromVariable": {
|
||||
"limitToGroups": [],
|
||||
"caseInsensitiveVariables": false,
|
||||
"skipFileIfVariableWasNotFound": false
|
||||
},
|
||||
"fuzzyMatch": {
|
||||
"replaceDiacritics": true,
|
||||
"removeCharacters": true,
|
||||
"removeBrackets": true
|
||||
},
|
||||
"controllers": {
|
||||
"ps4": {
|
||||
"title": "RetroDECK: DualShock 4 v.1b",
|
||||
"mappingId": "RetroDECK_controller_ps4_dualshock4_simple.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"ps5": {
|
||||
"title": "RetroDECK: DualSense v.1b",
|
||||
"mappingId": "RetroDECK_controller_ps5_dualsense_simple.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"ps5_edge": null,
|
||||
"xbox360": {
|
||||
"title": "RetroDECK: Xbox 360 v.1b",
|
||||
"mappingId": "RetroDECK_controller_xbox360_simple.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"xboxone": {
|
||||
"title": "RetroDECK: Xbox Wireless v.1b",
|
||||
"mappingId": "RetroDECK_controller_xboxone_simple.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"xboxelite": null,
|
||||
"switch_joycon_left": {
|
||||
"title": "Controller",
|
||||
"mappingId": "controller_switch_joycon_left_gamepad_joystick.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"switch_joycon_right": {
|
||||
"title": "Controller",
|
||||
"mappingId": "controller_switch_joycon_right_gamepad_joystick.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"switch_pro": {
|
||||
"title": "RetroDECK: Switch Pro v.1b",
|
||||
"mappingId": "RetroDECK_controller_switch_pro_simple.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"neptune": {
|
||||
"title": "RetroDECK: Steam Deck - Neptune v.1.1b FULL",
|
||||
"mappingId": "RetroDECK_controller_steamdeck_neptune_full.vdf",
|
||||
"profileType": "template"
|
||||
},
|
||||
"steamcontroller_gordon": {
|
||||
"title": "RetroDECK: Steam Controller - Gordon v.1b",
|
||||
"mappingId": "RetroDECK_controller_steam_controller_gordon_simple.vdf",
|
||||
"profileType": "template"
|
||||
}
|
||||
},
|
||||
"imageProviderAPIs": {
|
||||
"sgdb": {
|
||||
"nsfw": false,
|
||||
"humor": false,
|
||||
"styles": [],
|
||||
"stylesHero": [],
|
||||
"stylesLogo": [],
|
||||
"stylesIcon": [],
|
||||
"imageMotionTypes": [
|
||||
"static"
|
||||
],
|
||||
"sizes": [],
|
||||
"sizesHero": [],
|
||||
"sizesTall": null,
|
||||
"sizesIcon": []
|
||||
}
|
||||
},
|
||||
"defaultImage": {
|
||||
"tall": "/app/retrodeck/steam_grid/portrait.png",
|
||||
"long": "/app/retrodeck/steam_grid/banner.png",
|
||||
"hero": "/app/retrodeck/steam_grid/hero.png",
|
||||
"logo": "/app/retrodeck/steam_grid/logo.png",
|
||||
"icon": "/app/retrodeck/steam_grid/icon.png"
|
||||
},
|
||||
"localImages": {
|
||||
"tall": null,
|
||||
"long": null,
|
||||
"hero": null,
|
||||
"logo": null,
|
||||
"icon": null
|
||||
},
|
||||
"parserId": "173908444383456337",
|
||||
"version": 25
|
||||
}
|
||||
]
|
||||
]
|
|
@ -41,10 +41,12 @@ else
|
|||
fi
|
||||
|
||||
# Copying files to the installation
|
||||
sudo cp -vfr "res/binding_icons" "$app/retrodeck/binding_icons"
|
||||
sudo cp -vfr "res/binding_icons" "$app/retrodeck/binding_icons"
|
||||
sudo cp -vfr "res/steam_grid" "$app/retrodeck"
|
||||
sudo cp -vfr "config/"** "$app/retrodeck/config/"
|
||||
sudo cp -vfr "tools" "$app"
|
||||
sudo cp -vfr "retrodeck.sh" "$app/bin/"
|
||||
sudo cp -vfr "functions/"** "$app/libexec/"
|
||||
sudo cp -vfr "config/gzdoom/gzdoom.sh" "$app/bin/"
|
||||
sudo cp -vfr "config/ruffle/ruffle-rdwrapper.sh" "$app/bin/"
|
||||
sudo cp -vfr "net.retrodeck.retrodeck.metainfo.xml" "$app/share/metainfo/net.retrodeck.retrodeck.metainfo.xml"
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
save_migration() {
|
||||
|
||||
log i "Executing 0.5.0b save migration"
|
||||
|
||||
# Finding existing ROMs folder
|
||||
if [ -d "$default_sd/retrodeck" ]
|
||||
then
|
||||
|
@ -50,9 +53,9 @@ save_migration() {
|
|||
versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves
|
||||
|
||||
if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5
|
||||
migration_logfile=$rdhome/logs/savemove_"$(date +"%Y_%m_%d_%I_%M_%p").log"
|
||||
save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip"
|
||||
state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip"
|
||||
migration_logfile="$rdhome/logs/savemove_$(date +"%Y_%m_%d_%I_%M_%p").log"
|
||||
save_backup_file="$rdhome/savebackup_$(date +"%Y_%m_%d_%I_%M_%p").zip"
|
||||
state_backup_file="$rdhome/statesbackup_$(date +"%Y_%m_%d_%I_%M_%p").zip"
|
||||
|
||||
rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
|
|
|
@ -59,7 +59,7 @@ check_for_version_update() {
|
|||
|
||||
if [[ ! "$update_ignore" == "$online_version" ]]; then
|
||||
if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then
|
||||
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \
|
||||
choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK - New Update Available" \
|
||||
--text="There is a new version of RetroDECK available: <span foreground='$blue'><b>$online_version</b></span>.\nYou can easily update from the app store you have installed, examples: KDE Discover or Gnome Software.\n\nIf you would like to ignore this notification, click the \"Ignore this version\" button.")
|
||||
|
|
|
@ -6,7 +6,8 @@ compress_game() {
|
|||
local file="$2"
|
||||
local filename_no_path=$(basename "$file")
|
||||
local filename_no_extension="${filename_no_path%.*}"
|
||||
local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file")
|
||||
local filename_extension="${filename_no_path##*.}"
|
||||
local source_file=$(dirname "$(realpath "$file")")"/""$(basename "$file")"
|
||||
local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension"
|
||||
|
||||
if [[ "$1" == "chd" ]]; then
|
||||
|
@ -15,7 +16,11 @@ compress_game() {
|
|||
/app/bin/chdman createdvd --hunksize 2048 -i "$source_file" -o "$dest_file".chd -c zstd
|
||||
;;
|
||||
"ps2" )
|
||||
/app/bin/chdman createdvd -i "$source_file" -o "$dest_file".chd -c zstd
|
||||
if [[ "$filename_extension" == "cue" ]]; then
|
||||
/app/bin/chdman createcd -i "$source_file" -o "$dest_file".chd
|
||||
else
|
||||
/app/bin/chdman createdvd -i "$source_file" -o "$dest_file".chd -c zstd
|
||||
fi
|
||||
;;
|
||||
* )
|
||||
/app/bin/chdman createcd -i "$source_file" -o "$dest_file".chd
|
||||
|
@ -126,68 +131,94 @@ validate_for_chd() {
|
|||
}
|
||||
|
||||
find_compatible_games() {
|
||||
# The function takes the following arguments, which alter what files are compressed:
|
||||
# "everything" - Compresses all games found into their compatible formats
|
||||
# "all" - Compresses a list of user-chosen files into their compatible formats
|
||||
# "chd" or "zip" or "rvz" - Compresses a list of user-chosen files into the given format
|
||||
# Supported parameters:
|
||||
# "everything" - All games found (regardless of format)
|
||||
# "all" - Only user-chosen games (later selected via checklist)
|
||||
# "chd", "zip", "rvz" - Only games matching that compression type
|
||||
|
||||
if [[ -f "$godot_compression_compatible_games" ]]; then
|
||||
rm -f "$godot_compression_compatible_games" # Godot data transfer temp files
|
||||
fi
|
||||
touch "$godot_compression_compatible_games"
|
||||
|
||||
compressable_games_list=()
|
||||
all_compressable_games=()
|
||||
games_to_compress=()
|
||||
target_selection="$1"
|
||||
log d "Started find_compatible_games with parameter: $1"
|
||||
local output_file="${godot_compression_compatible_games}"
|
||||
[ -f "$output_file" ] && rm -f "$output_file"
|
||||
touch "$output_file"
|
||||
|
||||
local target_selection="$1"
|
||||
local compression_format
|
||||
if [[ "$1" == "everything" ]]; then
|
||||
local compression_format="all"
|
||||
compression_format="all"
|
||||
else
|
||||
local compression_format="$1"
|
||||
compression_format="$1"
|
||||
fi
|
||||
|
||||
if [[ $compression_format == "all" ]]; then
|
||||
local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d')
|
||||
local compressable_systems_list
|
||||
if [[ "$compression_format" == "all" ]]; then
|
||||
compressable_systems_list=$(jq -r '.compression_targets | to_entries[] | .value[]' "$features")
|
||||
log d "compressable_systems_list: $compressable_systems_list"
|
||||
else
|
||||
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d')
|
||||
compressable_systems_list=$(jq -r '.compression_targets["'"$compression_format"'"][]' "$features")
|
||||
log d "compressable_systems_list: $compressable_systems_list"
|
||||
fi
|
||||
|
||||
while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type
|
||||
do
|
||||
log d "Finding compatible games for compression ($1)"
|
||||
log d "compression_targets: $compression_targets"
|
||||
|
||||
while IFS= read -r system; do
|
||||
log d "Checking system: $system"
|
||||
local compression_candidates
|
||||
compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt")
|
||||
if [[ ! -z $compression_candidates ]]; then
|
||||
while IFS= read -r game
|
||||
do
|
||||
local compatible_compression_format=$(find_compatible_compression_format "$game")
|
||||
if [[ $compression_format == "chd" ]]; then
|
||||
if [[ $compatible_compression_format == "chd" && ! -f "$(echo ${game%.*}.chd)" ]]; then
|
||||
all_compressable_games=("${all_compressable_games[@]}" "$game")
|
||||
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
|
||||
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
|
||||
fi
|
||||
elif [[ $compression_format == "zip" ]]; then
|
||||
if [[ $compatible_compression_format == "zip" && ! -f "$(echo ${game%.*}.zip)" ]]; then
|
||||
all_compressable_games=("${all_compressable_games[@]}" "$game")
|
||||
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
|
||||
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
|
||||
fi
|
||||
elif [[ $compression_format == "rvz" ]]; then
|
||||
if [[ $compatible_compression_format == "rvz" && ! -f "$(echo ${game%.*}.rvz)" ]]; then
|
||||
all_compressable_games=("${all_compressable_games[@]}" "$game")
|
||||
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
|
||||
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
|
||||
fi
|
||||
elif [[ $compression_format == "all" ]]; then
|
||||
if [[ ! $compatible_compression_format == "none" ]]; then
|
||||
all_compressable_games=("${all_compressable_games[@]}" "$game")
|
||||
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
|
||||
echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games"
|
||||
fi
|
||||
fi
|
||||
if [[ -n "$compression_candidates" ]]; then
|
||||
while IFS= read -r game; do
|
||||
log d "Checking game: $game"
|
||||
local compatible_compression_format
|
||||
compatible_compression_format=$(find_compatible_compression_format "$game")
|
||||
local file_ext="${game##*.}"
|
||||
case "$compression_format" in
|
||||
"chd")
|
||||
if [[ "$compatible_compression_format" == "chd" ]]; then
|
||||
if [[ "$file_ext" == "chd" ]]; then
|
||||
log d "Skipping $game because it is already a CHD file."
|
||||
elif [[ ! -f "${game%.*}.chd" ]]; then
|
||||
log d "Game $game is compatible with CHD compression"
|
||||
echo "${game}^chd" >> "$output_file"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
"zip")
|
||||
if [[ "$compatible_compression_format" == "zip" ]]; then
|
||||
if [[ "$file_ext" == "zip" ]]; then
|
||||
log d "Skipping $game because it is already a ZIP file."
|
||||
elif [[ ! -f "${game%.*}.zip" ]]; then
|
||||
log d "Game $game is compatible with ZIP compression"
|
||||
echo "${game}^zip" >> "$output_file"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
"rvz")
|
||||
if [[ "$compatible_compression_format" == "rvz" ]]; then
|
||||
if [[ "$file_ext" == "rvz" ]]; then
|
||||
log d "Skipping $game because it is already an RVZ file."
|
||||
elif [[ ! -f "${game%.*}.rvz" ]]; then
|
||||
log d "Game $game is compatible with RVZ compression"
|
||||
echo "${game}^rvz" >> "$output_file"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
"all")
|
||||
if [[ "$compatible_compression_format" != "none" ]]; then
|
||||
if [[ "$file_ext" == "$compatible_compression_format" ]]; then
|
||||
log d "Skipping $game because it is already in $compatible_compression_format format."
|
||||
else
|
||||
log d "Game $game is compatible with $compatible_compression_format compression"
|
||||
echo "${game}^${compatible_compression_format}" >> "$output_file"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < <(printf '%s\n' "$compression_candidates")
|
||||
fi
|
||||
done < <(printf '%s\n' "$compressable_systems_list")
|
||||
|
||||
log d "Compatible games have been written to $output_file"
|
||||
cat "$output_file"
|
||||
}
|
||||
|
||||
cli_compress_single_game() {
|
||||
|
@ -226,9 +257,9 @@ cli_compress_all_games() {
|
|||
local compressable_game=""
|
||||
local all_compressable_games=()
|
||||
if [[ $compression_format == "all" ]]; then
|
||||
local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d')
|
||||
local compressable_systems_list=$(jq -r '.compression_targets | to_entries[] | .value[]' $features)
|
||||
else
|
||||
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d')
|
||||
local compressable_systems_list=$(jq -r '.compression_targets["'"$compression_format"'"][]' $features)
|
||||
fi
|
||||
|
||||
read -p "Do you want to have the original files removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup
|
||||
|
|
|
@ -50,3 +50,16 @@ find_empty_rom_folders() {
|
|||
done
|
||||
}
|
||||
|
||||
configurator_check_multifile_game_structure() {
|
||||
local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
|
||||
if [[ ${#folder_games[@]} -gt 1 ]]; then
|
||||
echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
|
||||
rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Configurator - Verify Multi-file Structure" \
|
||||
--text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/logs"
|
||||
else
|
||||
configurator_generic_dialog "RetroDECK Configurator - Verify Multi-file Structure" "No incorrect multi-file game folder structures found."
|
||||
fi
|
||||
configurator_welcome_dialog
|
||||
}
|
||||
|
|
|
@ -11,10 +11,28 @@ rd_logs_folder="/var/config/retrodeck/logs" # Static location to write all Retro
|
|||
source /app/libexec/logger.sh
|
||||
rotate_logs
|
||||
|
||||
# OS detection
|
||||
width=$(grep -oP '\d+(?=x)' /sys/class/graphics/fb0/modes)
|
||||
height=$(grep -oP '(?<=x)\d+' /sys/class/graphics/fb0/modes)
|
||||
if [[ $width -ne 1280 ]] || [[ $height -ne 800 ]]; then
|
||||
native_resolution=false
|
||||
else
|
||||
native_resolution=true
|
||||
fi
|
||||
distro_name=$(flatpak-spawn --host grep '^ID=' /etc/os-release | cut -d'=' -f2)
|
||||
distro_version=$(flatpak-spawn --host grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2)
|
||||
gpu_info=$(flatpak-spawn --host lspci | grep -i 'vga\|3d\|2d')
|
||||
|
||||
log d "Debug mode enabled"
|
||||
log i "Initializing RetroDECK"
|
||||
log i "Running on $XDG_SESSION_DESKTOP, $XDG_SESSION_TYPE"
|
||||
log i "Running on $XDG_SESSION_DESKTOP, $XDG_SESSION_TYPE, $distro_name $distro_version"
|
||||
if [[ -n $container ]]; then
|
||||
log i "$container environment"
|
||||
log i "Running inside $container environment"
|
||||
fi
|
||||
log i "GPU: $gpu_info"
|
||||
log i "Resolution: $width x $height"
|
||||
if [[ $native_resolution == true ]]; then
|
||||
log i "Steam Deck native resolution detected"
|
||||
fi
|
||||
|
||||
source /app/libexec/050_save_migration.sh
|
||||
|
@ -65,7 +83,6 @@ features="$config/retrodeck/reference_lists/features.json"
|
|||
es_systems="/app/share/es-de/resources/systems/linux/es_systems.xml" # ES-DE supported system list
|
||||
es_find_rules="/app/share/es-de/resources/systems/linux/es_find_rules.xml" # ES-DE emulator find rules
|
||||
|
||||
|
||||
# Godot data transfer temp files
|
||||
|
||||
godot_bios_files_checked="/var/config/retrodeck/godot/godot_bios_files_checked.tmp"
|
||||
|
@ -107,6 +124,8 @@ dolphingcpadconf="/var/config/dolphin-emu/GCPadNew.ini"
|
|||
dolphingfxconf="/var/config/dolphin-emu/GFX.ini"
|
||||
dolphinhkconf="/var/config/dolphin-emu/Hotkeys.ini"
|
||||
dolphinqtconf="/var/config/dolphin-emu/Qt.ini"
|
||||
dolphinDynamicInputTexturesPath="/var/data/dolphin-emu/Load/DynamicInputTextures"
|
||||
dolphinCheevosConf="/var/config/dolphin-emu/RetroAchievements.ini"
|
||||
|
||||
# PCSX2 config files
|
||||
|
||||
|
@ -115,10 +134,11 @@ pcsx2gsconf="/var/config/PCSX2/inis/GS.ini" # This file should be deprecated sin
|
|||
pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" # This file should be deprecated since moving to PCSX2-QT
|
||||
pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" # This file should be deprecated since moving to PCSX2-QT
|
||||
|
||||
# PPSSPPDL config files
|
||||
# PPSSPP-SDL config files
|
||||
|
||||
ppssppconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp.ini"
|
||||
ppssppcontrolsconf="/var/config/ppsspp/PSP/SYSTEM/controls.ini"
|
||||
ppssppcheevosconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp_retroachievements.dat"
|
||||
|
||||
# Primehack config files
|
||||
|
||||
|
@ -127,6 +147,7 @@ primehackgcpadconf="/var/config/primehack/GCPadNew.ini"
|
|||
primehackgfxconf="/var/config/primehack/GFX.ini"
|
||||
primehackhkconf="/var/config/primehack/Hotkeys.ini"
|
||||
primehackqtconf="/var/config/primehack/Qt.ini"
|
||||
primehackDynamicInputTexturesPath="/var/data/primehack/Load/DynamicInputTextures"
|
||||
|
||||
# RPCS3 config files
|
||||
|
||||
|
@ -203,8 +224,7 @@ if [[ ! -f "$rd_conf" ]]; then
|
|||
|
||||
# If the config file is existing i just read the variables
|
||||
else
|
||||
log i "Found RetroDECK config file in $rd_conf"
|
||||
log i "Loading it"
|
||||
log i "Loading RetroDECK config file in $rd_conf"
|
||||
|
||||
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
|
||||
set_setting_value $rd_conf "update_repo" "$cooker_repository_name" retrodeck "options"
|
||||
|
@ -235,5 +255,7 @@ fi
|
|||
logs_folder="$rdhome/logs" # The path of the logs folder, here we collect all the logs
|
||||
steamsync_folder="$rdhome/.sync" # Folder containing all the steam sync launchers for SRM
|
||||
steamsync_folder_tmp="$rdhome/.sync-tmp" # Temp folder containing all the steam sync launchers for SRM
|
||||
cheats_folder="$rdhome/cheats" # Folder containing all the cheats for the emulators
|
||||
backups_folder="$rdhome/backups" # Folder containing all the RetroDECK backups
|
||||
|
||||
export GLOBAL_SOURCED=true
|
|
@ -22,30 +22,45 @@
|
|||
# The function auto-detects if the shell is sh and avoids colorizing the output in that case.
|
||||
|
||||
log() {
|
||||
# Exit early if logging_level is "none"
|
||||
|
||||
# Define and export log color environment variables for ES-DE
|
||||
export logcolor_debug="\033[32m[DEBUG]"
|
||||
export logcolor_error="\033[31m[ERROR]"
|
||||
export logcolor_warn="\033[33m[WARN]"
|
||||
export logcolor_info="\033[37m[INFO]"
|
||||
export logcolor_default="\033[37m[LOG]"
|
||||
|
||||
# Define and export log prefix environment variables for ES-DE
|
||||
export logprefix_debug="[DEBUG]"
|
||||
export logprefix_error="[ERROR]"
|
||||
export logprefix_warn="[WARN]"
|
||||
export logprefix_info="[INFO]"
|
||||
export logprefix_default="[LOG]"
|
||||
|
||||
# Exit immediately if logging_level is "none"
|
||||
if [[ $logging_level == "none" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local level="$1" # Logging level of the current message
|
||||
local message="$2" # Message to log
|
||||
local logfile="${3:-$rd_logs_folder/retrodeck.log}" # Log file, default to retrodeck.log
|
||||
local timestamp="$(date +[%Y-%m-%d\ %H:%M:%S.%3N])" # Timestamp for the log entry
|
||||
local level="$1" # Current message level
|
||||
local message="$2" # Message to log
|
||||
local logfile="${3:-$rd_logs_folder/retrodeck.log}" # Default log file
|
||||
local timestamp="$(date +[%Y-%m-%d\ %H:%M:%S.%3N])" # Timestamp
|
||||
local colorize_terminal=true
|
||||
|
||||
# Determine the calling function or use [FWORK]
|
||||
# Determine the calling function, or use [FWORK]
|
||||
local caller="${FUNCNAME[1]:-FWORK}"
|
||||
caller="${caller^^}" # Convert to uppercase
|
||||
caller="${caller^^}" # Convert to uppercase
|
||||
|
||||
# Check if the shell is sh (not bash or zsh) to avoid colorization
|
||||
if [ "${SHELL##*/}" = "sh" ]; then
|
||||
colorize_terminal=false
|
||||
fi
|
||||
# # Check if the shell is sh to avoid colorization
|
||||
# if [ "${SHELL##*/}" = "sh" ]; then
|
||||
# colorize_terminal=false
|
||||
# fi
|
||||
|
||||
# Function to check if the current message level should be logged
|
||||
# Internal function to check if the message should be logged
|
||||
should_log() {
|
||||
case "$logging_level" in
|
||||
debug) return 0 ;; # Always log everything
|
||||
debug) return 0 ;; # Log everything
|
||||
info) [[ "$level" == "i" || "$level" == "e" ]] && return 0 ;;
|
||||
warn) [[ "$level" != "d" ]] && return 0 ;;
|
||||
error) [[ "$level" == "e" ]] && return 0 ;;
|
||||
|
@ -54,31 +69,31 @@ log() {
|
|||
}
|
||||
|
||||
if should_log; then
|
||||
# Define message colors based on level
|
||||
# Define colors based on the message level
|
||||
case "$level" in
|
||||
d)
|
||||
color="\e[32m[DEBUG]"
|
||||
prefix="[DEBUG]"
|
||||
color="${logcolor_debug:-\033[32m[DEBUG]}"
|
||||
prefix="${logprefix_debug:-[DEBUG]}"
|
||||
;;
|
||||
e)
|
||||
color="\e[31m[ERROR]"
|
||||
prefix="[ERROR]"
|
||||
color="${logcolor_error:-\033[31m[ERROR]}"
|
||||
prefix="${logprefix_error:-[ERROR]}"
|
||||
;;
|
||||
w)
|
||||
color="\e[33m[WARN]"
|
||||
prefix="[WARN]"
|
||||
color="${logcolor_warn:-\033[33m[WARN]}"
|
||||
prefix="${logprefix_warn:-[WARN]}"
|
||||
;;
|
||||
i)
|
||||
color="\e[34m[INFO]"
|
||||
prefix="[INFO]"
|
||||
color="${logcolor_info:-\033[37m[INFO]}"
|
||||
prefix="${logprefix_info:-[INFO]}"
|
||||
;;
|
||||
*)
|
||||
color="\e[37m[LOG]"
|
||||
prefix="[LOG]"
|
||||
color="${logcolor_default:-\033[37m[LOG]}"
|
||||
prefix="${logprefix_default:-[LOG]}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Construct the log message
|
||||
# Build the message to display
|
||||
if [ "$colorize_terminal" = true ]; then
|
||||
colored_message="$color [$caller] $message\e[0m"
|
||||
else
|
||||
|
@ -86,17 +101,20 @@ log() {
|
|||
fi
|
||||
log_message="$timestamp $prefix [$caller] $message"
|
||||
|
||||
# Display the message in the terminal
|
||||
echo -e "$colored_message" >&2
|
||||
# If silent mode is not active, print the message to the terminal
|
||||
if [[ "$LOG_SILENT" != "true" ]]; then
|
||||
echo -e "$colored_message" >&2
|
||||
fi
|
||||
|
||||
# Write the log message to the log file
|
||||
# Ensure the log file exists
|
||||
if [ ! -f "$logfile" ]; then
|
||||
#echo "$timestamp [WARN] Log file not found in \"$logfile\", creating it" >&2 # Disabled it as it's always appearing because of log rotation
|
||||
if [[ ! -d "$(dirname "$logfile")" ]]; then
|
||||
mkdir -p "$(dirname "$logfile")"
|
||||
fi
|
||||
touch "$logfile"
|
||||
fi
|
||||
|
||||
# Write the log to the file
|
||||
echo "$log_message" >> "$logfile"
|
||||
fi
|
||||
}
|
||||
|
@ -130,4 +148,4 @@ rotate_logs() {
|
|||
# Compress without directory structure and suppress tar output
|
||||
tar -czf "${logfile}.1.tar.gz" -C "$(dirname "$logfile")" "$(basename "$logfile")" --remove-files &>/dev/null
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
|
|
@ -299,7 +299,17 @@ dir_prep() {
|
|||
|
||||
rd_zenity() {
|
||||
# This function replaces the standard 'zenity' command and filters out annoying GTK errors on Steam Deck
|
||||
export CONFIGURATOR_GUI="zenity"
|
||||
|
||||
# env GDK_SCALE=1.5 \
|
||||
# GDK_DPI_SCALE=1.5 \
|
||||
zenity 2> >(grep -v 'Gtk' >&2) "$@"
|
||||
|
||||
local status=${PIPESTATUS[0]} # Capture the exit code of 'zenity'
|
||||
|
||||
unset CONFIGURATOR_GUI
|
||||
|
||||
return $status
|
||||
}
|
||||
|
||||
update_rpcs3_firmware() {
|
||||
|
@ -519,8 +529,9 @@ finit() {
|
|||
rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Finishing Initialization" \
|
||||
--text="RetroDECK is finishing the initial setup process, please wait."
|
||||
--text="RetroDECK is finishing the initial setup process, please wait.\n\n"
|
||||
|
||||
add_retrodeck_to_steam
|
||||
create_lock
|
||||
|
||||
# Inform the user where to put the ROMs and BIOS files
|
||||
|
@ -641,7 +652,7 @@ install_release() {
|
|||
log d "Constructed flatpak URL: $flatpak_url"
|
||||
|
||||
# Confirm installation with the user
|
||||
zenity --question --icon-name=net.retrodeck.retrodeck --no-wrap \
|
||||
rd_zenity --question --icon-name=net.retrodeck.retrodeck --no-wrap \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Updater" \
|
||||
--text="$1 will be now installed.\nThe update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again, you will be using the latest version.\n\nDo you want to continue?"
|
||||
|
@ -672,7 +683,7 @@ install_release() {
|
|||
# Cleanup old bundles to save space
|
||||
rm -rf "$rdhome/RetroDECK_Updates"
|
||||
) |
|
||||
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
|
||||
rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Updater" \
|
||||
--text="RetroDECK is updating to the selected version, please wait."
|
||||
|
@ -781,7 +792,7 @@ ponzu_remove() {
|
|||
else
|
||||
log e "Ponzu: \"$1\" is not a vaild choice for removal, quitting"
|
||||
fi
|
||||
configurator_retrodeck_tools_dialog
|
||||
configurator_tools_dialog
|
||||
}
|
||||
|
||||
release_selector() {
|
||||
|
@ -790,7 +801,7 @@ release_selector() {
|
|||
while true; do
|
||||
echo "# Fetching all available releases from GitHub repositories... Please wait. This may take some time." ; sleep 1
|
||||
done
|
||||
) | zenity --progress --title="Fetching Releases" --text="Fetching releases..." --pulsate --no-cancel --auto-close --width=500 --height=150 &
|
||||
) | rd_zenity --progress --title="Fetching Releases" --text="Fetching releases..." --pulsate --no-cancel --auto-close --width=500 --height=150 &
|
||||
|
||||
progress_pid=$! # save process PID to kill it later
|
||||
|
||||
|
@ -930,10 +941,10 @@ quit_retrodeck() {
|
|||
source /app/libexec/steam_sync.sh
|
||||
add_to_steam "$(ls "$rdhome/ES-DE/gamelists/")"
|
||||
) |
|
||||
zenity --progress \
|
||||
rd_zenity --progress \
|
||||
--title="Syncing with Steam" \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--text="<span foreground='$purple'><b>\t\t\t\t\tSyncing favorite games with Steam.</b></span>\n\n<b>NOTE: </b>This operation may take some time depending on the size of your library.\nFeel free to leave this in the background and switch to another application.\n\n" \
|
||||
--text="<span foreground='$purple'><b>\t\t\t\tSyncing favorite games with Steam</b></span>\n\n<b>NOTE: </b>This operation may take some time depending on the size of your library.\nFeel free to leave this in the background and switch to another application.\n\n" \
|
||||
--percentage=25 \
|
||||
--pulsate \
|
||||
--width=500 \
|
||||
|
@ -953,6 +964,16 @@ start_retrodeck() {
|
|||
get_steam_user # get steam user info
|
||||
splash_screen # Check if today has a surprise splashscreen and load it if so
|
||||
ponzu
|
||||
|
||||
log d "Checking if PortMaster should be shown"
|
||||
if [[ $(get_setting_value "$rd_conf" "portmaster_show" "retrodeck" "options") == "false" ]]; then
|
||||
log d "Assuring that PortMaster is hidden on ES-DE"
|
||||
portmaster_show "false"
|
||||
else
|
||||
log d "Assuring that PortMaster is shown on ES-DE"
|
||||
portmaster_show "true"
|
||||
fi
|
||||
|
||||
log i "Starting RetroDECK v$version"
|
||||
es-de
|
||||
}
|
||||
|
@ -973,3 +994,111 @@ convert_to_markdown() {
|
|||
-e 's|</description>||g' \
|
||||
-e '/<[^>]*>/d' > "$output_file" # Remove any other XML tags and output to .md file
|
||||
}
|
||||
|
||||
# This function updates RetroArch by synchronizing shaders, cores, and border overlays.
|
||||
# It should be called whenever RetroArch is reset or updated.
|
||||
retroarch_updater(){
|
||||
|
||||
log i "Running RetroArch updater"
|
||||
|
||||
# Synchronize cores from the application share directory to the RetroArch cores directory
|
||||
rsync -rlD --mkpath "/app/share/libretro/cores/" "/var/config/retroarch/cores/" && log d "RetroArch cores updated correctly"
|
||||
|
||||
# Synchronize border overlays from the RetroDeck configuration directory to the RetroArch overlays directory
|
||||
rsync -rlD --mkpath "/app/retrodeck/config/retroarch/borders/" "/var/config/retroarch/overlays/borders/" && log d "RetroArch overlays and borders updated correctly"
|
||||
}
|
||||
|
||||
portmaster_show(){
|
||||
log d "Setting PortMaster visibility in ES-DE"
|
||||
if [ "$1" = "true" ]; then
|
||||
log d "\"$roms_folder/portmaster/PortMaster.sh\" is not found, installing it"
|
||||
install -Dm755 "/var/data/PortMaster/PortMaster.sh" "$roms_folder/portmaster/PortMaster.sh" && log d "PortMaster is correctly showing in ES-DE"
|
||||
set_setting_value $rd_conf "portmaster_show" "true" retrodeck "options"
|
||||
elif [ "$1" = "false" ]; then
|
||||
rm -rf "$roms_folder/portmaster/PortMaster.sh" && log d "PortMaster is correctly hidden in ES-DE"
|
||||
set_setting_value $rd_conf "portmaster_show" "false" retrodeck "options"
|
||||
else
|
||||
log e "\"$1\" is not a valid choice, quitting"
|
||||
fi
|
||||
}
|
||||
|
||||
open_component(){
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
cmd=$(jq -r '.emulator[] | select(.ponzu != true) | .name' "$features")
|
||||
if [[ $(get_setting_value "$rd_conf" "akai_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.citra | .name' "$features")"
|
||||
fi
|
||||
if [[ $(get_setting_value "$rd_conf" "kiroi_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.yuzu | .name' "$features")"
|
||||
fi
|
||||
echo -e "This command expects one of the following components as arguments:\n$(echo -e "$cmd")"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$1" == "--list" ]]; then
|
||||
cmd=$(jq -r '.emulator[] | select(.ponzu != true) | .name' "$features")
|
||||
if [[ $(get_setting_value "$rd_conf" "akai_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.citra | .name' "$features")"
|
||||
fi
|
||||
if [[ $(get_setting_value "$rd_conf" "kiroi_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.yuzu | .name' "$features")"
|
||||
fi
|
||||
echo -e "$cmd"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$1" == "--getdesc" ]]; then
|
||||
cmd=$(jq -r '.emulator[] | select(.ponzu != true) | "\(.description)"' "$features")
|
||||
if [[ $(get_setting_value "$rd_conf" "akai_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.citra | "\(.description)"' "$features")"
|
||||
fi
|
||||
if [[ $(get_setting_value "$rd_conf" "kiroi_ponzu" "retrodeck" "options") == "true" ]]; then
|
||||
cmd+="\n$(jq -r '.emulator.yuzu | "\(.description)"' "$features")"
|
||||
fi
|
||||
echo -e "$cmd"
|
||||
return
|
||||
fi
|
||||
|
||||
launch_exists=$(jq -r --arg name "$1" '.emulator[] | select(.name == $name) | has("launch")' "$features")
|
||||
if [[ "$launch_exists" != "true" ]]; then
|
||||
echo "Error: The component '$1' cannot be opened."
|
||||
return 1
|
||||
fi
|
||||
|
||||
cmd=$(jq -r --arg name "$1" '.emulator[] | select(.name == $name and .ponzu != true) | .launch' "$features")
|
||||
if [[ -z "$cmd" && $(get_setting_value "$rd_conf" "akai_ponzu" "retrodeck" "options") == "true" && "$1" == "citra" ]]; then
|
||||
cmd=$(jq -r '.emulator.citra | .launch' "$features")
|
||||
fi
|
||||
if [[ -z "$cmd" && $(get_setting_value "$rd_conf" "kiroi_ponzu" "retrodeck" "options") == "true" && "$1" == "yuzu" ]]; then
|
||||
cmd=$(jq -r '.emulator.yuzu | .launch' "$features")
|
||||
fi
|
||||
|
||||
if [[ -n "$cmd" ]]; then
|
||||
eval "$cmd" "${@:2}"
|
||||
else
|
||||
echo "Invalid component name: $1"
|
||||
echo "Please ensure the name is correctly spelled (case sensitive) and quoted if it contains spaces."
|
||||
fi
|
||||
}
|
||||
|
||||
add_retrodeck_to_steam(){
|
||||
|
||||
log i "Adding RetroDECK to Steam"
|
||||
|
||||
rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \
|
||||
--text="Do you want to add RetroDECK to Steam?"
|
||||
if [ $? == 0 ]; then
|
||||
(
|
||||
steam-rom-manager enable --names "RetroDECK Launcher"
|
||||
steam-rom-manager add
|
||||
) |
|
||||
rd_zenity --progress --no-cancel --pulsate --auto-close \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "Adding RetroDECK to Steam" \
|
||||
--text="Please wait while RetroDECK is being added to Steam...\n\n"
|
||||
rd_zenity --info --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --text="RetroDECK has been added to Steam.\n\nPlease close and reopen Steam to see the changes."
|
||||
fi
|
||||
|
||||
log i "RetroDECK has been added to Steam"
|
||||
}
|
|
@ -5,7 +5,10 @@ post_update() {
|
|||
# post update script
|
||||
log i "Executing post-update script"
|
||||
|
||||
update_rd_conf
|
||||
|
||||
if [[ $(check_version_is_older_than "0.5.0b") == "true" ]]; then # If updating from prior to save sorting change at 0.5.0b
|
||||
log d "Version is older than 0.5.0b, executing save migration"
|
||||
save_migration
|
||||
fi
|
||||
|
||||
|
@ -30,7 +33,7 @@ post_update() {
|
|||
fi
|
||||
if [[ $(check_version_is_older_than "0.6.3b") == "true" ]]; then
|
||||
# In version 0.6.3b, the following changes were made that required config file updates/reset:
|
||||
# - Put Dolphin and Primehack save states in different folders inside $rd_home/states
|
||||
# - Put Dolphin and Primehack save states in different folders inside $rdhome/states
|
||||
# - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~)
|
||||
# - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates.
|
||||
|
||||
|
@ -425,7 +428,7 @@ post_update() {
|
|||
|
||||
# Create a Zenity window with checkboxes for each reset option and two buttons
|
||||
while true; do
|
||||
choices=$(zenity --list --checklist --title="RetroDECK Reset Options" \
|
||||
choices=$(rd_zenity --list --checklist --title="RetroDECK Reset Options" \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--text="The following components have been updated and need to be reset or fixed to ensure compatibility with the new version: select the components you want to reset.\n\nNot resetting them may cause serious issues with your installation.\nYou can also reset them manually later via Configurator -> Troubleshooting -> Reset Component.\n\nNote: Your games, saves, game collections and scraped data will not be affected." \
|
||||
--column="Select" --column="Component" --column="Description" --width="1100" --height="700" \
|
||||
|
@ -453,7 +456,7 @@ post_update() {
|
|||
fi
|
||||
|
||||
if [[ $? -eq 0 && -n "$choices" ]]; then
|
||||
if ! zenity --question --title="Confirmation" --text="Are you sure you want to proceed with only the selected options?\n\nThis might cause issues in RetroDECK"; then
|
||||
if ! rd_zenity --question --title="Confirmation" --text="Are you sure you want to proceed with only the selected options?\n\nThis might cause issues in RetroDECK"; then
|
||||
log i "User is not sure, showing the checklist window again."
|
||||
continue
|
||||
else
|
||||
|
@ -463,7 +466,7 @@ post_update() {
|
|||
fi
|
||||
|
||||
if [[ $? == 0 ]]; then
|
||||
if ! zenity --question --title="Confirmation" --text="Are you sure you want to skip the reset process?\n\nThis might cause issues in RetroDECK"; then
|
||||
if ! rd_zenity --question --title="Confirmation" --text="Are you sure you want to skip the reset process?\n\nThis might cause issues in RetroDECK"; then
|
||||
log i "User is not sure, showing the checklist window again."
|
||||
continue
|
||||
else
|
||||
|
@ -520,13 +523,12 @@ post_update() {
|
|||
set_setting_value "$primehackgfxconf" "AspectRatio" "0" "dolphin" "Settings"
|
||||
fi
|
||||
|
||||
# --- ALWAYS EXECUTED ---
|
||||
# --- ALWAYS EXECUTED IN 0.9.0b ---
|
||||
|
||||
# New components preparation
|
||||
log i "New components were added in this version, initializing them"
|
||||
prepare_component "reset" "portmaster"
|
||||
prepare_component "reset" "ruffle"
|
||||
update_rd_conf
|
||||
prepare_component "reset" "steam-rom-manager"
|
||||
|
||||
# RetroArch
|
||||
|
@ -555,6 +557,121 @@ post_update() {
|
|||
|
||||
fi # end of 0.9.0b
|
||||
|
||||
if [[ $(check_version_is_older_than "0.9.1b") == "true" ]]; then
|
||||
|
||||
log i "Running the 0.9.1b post update process"
|
||||
|
||||
# Create a Zenity window with checkboxes for each reset option and two buttons
|
||||
while true; do
|
||||
choices=$(rd_zenity --list --checklist --title="RetroDECK Reset Options" \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--text="The following components have been updated and need to be reset or fixed to ensure compatibility with the new version: select the components you want to reset.\n\nNot resetting them may cause serious issues with your installation.\nYou can also reset them manually later via Configurator -> Troubleshooting -> Reset Component.\n\nNote: Your games, saves, game collections and scraped data will not be affected." \
|
||||
--column="Select" --column="Component" --column="Description" --width="1100" --height="700" \
|
||||
TRUE "Dolphin - GameCube Controller" "The GameCube controller configuration needs to be reset to fix a trigger issue" \
|
||||
TRUE "RetroArch" "Needs to be reset to fix the borders issue on some sytems such as psx" \
|
||||
TRUE "Steam ROM Manager" "Needs to add the \"Add RetroDECk to Steam\" functionality" \
|
||||
--separator=":" \
|
||||
--extra-button="Execute All" \
|
||||
--ok-label="Execute Selected Only" \
|
||||
--cancel-label="Execute None")
|
||||
|
||||
log d "User selected: $choices"
|
||||
log d "User pressed: $?"
|
||||
|
||||
# Check if "Execute All" button was pressed
|
||||
if [[ "$choices" == "Execute All" ]]; then
|
||||
execute_all=true
|
||||
break
|
||||
else
|
||||
execute_all=false
|
||||
# Split the choices into an array
|
||||
IFS=":" read -r -a selected_choices <<< "$choices"
|
||||
fi
|
||||
|
||||
if [[ $? -eq 0 && -n "$choices" ]]; then
|
||||
if ! rd_zenity --question --title="Confirmation" --text="Are you sure you want to proceed with only the selected options?\n\nThis might cause issues in RetroDECK"; then
|
||||
log i "User is not sure, showing the checklist window again."
|
||||
continue
|
||||
else
|
||||
log i "User confirmed to proceed with only the selected options."
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $? == 0 ]]; then
|
||||
if ! rd_zenity --question --title="Confirmation" --text="Are you sure you want to skip the reset process?\n\nThis might cause issues in RetroDECK"; then
|
||||
log i "User is not sure, showing the checklist window again."
|
||||
continue
|
||||
else
|
||||
log i "User confirmed to proceed without any reset."
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
||||
break
|
||||
done
|
||||
|
||||
# Execute the selected resets
|
||||
|
||||
# RetroArch reset
|
||||
if [[ "$execute_all" == "true" || " ${selected_choices[@]} " =~ " RetroArch " ]]; then
|
||||
log i "User agreed to RetroArch reset"
|
||||
# Twice to toggle them once and then toggle them back to the original value
|
||||
make_preset_changes "borders" "all"
|
||||
make_preset_changes "borders" "all"
|
||||
fi
|
||||
|
||||
# Dolphin - GameCube Controller
|
||||
if [[ "$execute_all" == "true" || " ${selected_choices[@]} " =~ " Dolphin - GameCube Controller " ]]; then
|
||||
log i "User agreed to reset Dolphin - GameCube Controller"
|
||||
cp -f "$config/dolphin/GCPadNew.ini" "$dolphingcpadconf" && log i "Done"
|
||||
fi
|
||||
|
||||
# Steam ROM Manager - Add to Steam fix
|
||||
if [[ "$execute_all" == "true" || " ${selected_choices[@]} " =~ " Steam ROM Manager " ]]; then
|
||||
log i "User agreed to reset Steam ROM Manager - Add to Steam fix"
|
||||
prepare_component reset steam-rom-manager
|
||||
fi
|
||||
|
||||
# --- ALWAYS EXECUTED IN 0.9.1b ---
|
||||
|
||||
log i "Preparing the shaders folder for MAME..."
|
||||
shaders_folder=$rdhome/shaders && log i "Shaders folder set to \"$shaders_folder\""
|
||||
conf_write && log i "Done"
|
||||
create_dir "$shaders_folder/mame/bgfx"
|
||||
set_setting_value "$mameconf" "bgfx_path" "$shaders_folder/mame/bgfx/" "mame"
|
||||
cp -fvr "/app/share/mame/bgfx/"* "$shaders_folder/mame/bgfx"
|
||||
|
||||
log i "Preparing the cheats for RetroArch..."
|
||||
create_dir "$cheats_folder/retroarch"
|
||||
set_setting_value "$raconf" "cheat_database_path" "$cheats_folder/retroarch" "retroarch"
|
||||
tar --strip-components=1 -xzf /app/retrodeck/cheats/retroarch.tar.gz -C "$cheats_folder/retroarch" --overwrite && log i "Cheats for RetroArch installed"
|
||||
|
||||
log i "Preparing the cheats for PPSSPP..."
|
||||
create_dir -d "$cheats_folder/PPSSPP"
|
||||
dir_prep "$cheats_folder/PPSSPP" "/var/config/ppsspp/PSP/Cheats"
|
||||
tar -xzf /app/retrodeck/cheats/ppsspp.tar.gz -C "$cheats_folder/PPSSPP" --overwrite && log i "Cheats for PPSSPP installed"
|
||||
|
||||
log i "Preparing the cheats for PCSX2..."
|
||||
create_dir "$cheats_folder/pcsx2"
|
||||
set_setting_value "$pcsx2conf" "Cheats" "$cheats_folder/pcsx2" "Folders"
|
||||
tar --strip-components=1 -xzf /app/retrodeck/cheats/pcsx2.tar.gz -C "$cheats_folder/pcsx2" --overwrite && log i "Cheats for PCSX2 installed"
|
||||
|
||||
log i "Preparing the cheats for MAME..."
|
||||
create_dir "$cheats_folder/mame"
|
||||
set_setting_value "$mameconf" "cheatpath" "$cheats_folder/mame" "mame"
|
||||
unzip -j -o "$config/mame/cheat0264.zip" 'cheat.7z' -d "$cheats_folder/mame" && log i "Cheats for MAME installed"
|
||||
rm -rf /var/data/mame/cheat
|
||||
|
||||
log i "Preparing the RetroAchievements for Dolphin..."
|
||||
cp -vn "$config/dolphin/"* /var/config/dolphin-emu/
|
||||
|
||||
log i "Fixing PrimeHack roms paths..."
|
||||
set_setting_value "$rd_conf" "ppsspp" "$(get_setting_value "$rd_defaults" "ppsspp" "retrodeck" "cheevos")" "retrodeck" "cheevos"
|
||||
set_setting_value "$rd_conf" "ppsspp" "$(get_setting_value "$rd_defaults" "ppsspp" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore"
|
||||
|
||||
fi # end of 0.9.1b
|
||||
|
||||
# The following commands are run every time.
|
||||
|
||||
if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
|
||||
|
@ -570,6 +687,7 @@ post_update() {
|
|||
install_retrodeck_controller_profile
|
||||
fi
|
||||
|
||||
retroarch_updater
|
||||
update_splashscreens
|
||||
deploy_helper_files
|
||||
build_retrodeck_current_presets
|
||||
|
@ -589,4 +707,6 @@ post_update() {
|
|||
else
|
||||
changelog_dialog "$version"
|
||||
fi
|
||||
|
||||
log i "Upgrade process completed successfully."
|
||||
}
|
||||
|
|
|
@ -1,22 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
change_preset_dialog() {
|
||||
# This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more
|
||||
# This function will build a list of all systems compatible with a given preset,
|
||||
# show their current enable/disabled state and allow the user to change one or more.
|
||||
# USAGE: change_preset_dialog "$preset"
|
||||
|
||||
preset="$1"
|
||||
pretty_preset_name=${preset//_/ } # Preset name prettification
|
||||
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
|
||||
current_preset_settings=()
|
||||
local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
|
||||
log d "Starting change_preset_dialog for preset: $preset"
|
||||
|
||||
while IFS= read -r config_line
|
||||
do
|
||||
preset="$1"
|
||||
pretty_preset_name=${preset//_/ } # Preset name prettification
|
||||
pretty_preset_name=$(echo "$pretty_preset_name" | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1')
|
||||
current_preset_settings=()
|
||||
local section_results
|
||||
section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' "$rd_conf" | sed '/^$/d')
|
||||
|
||||
while IFS= read -r config_line; do
|
||||
system_name=$(get_setting_name "$config_line" "retrodeck")
|
||||
system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset")
|
||||
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name")
|
||||
# Append three values: the current enabled state, a pretty name, and the internal system name.
|
||||
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty "$system_name")" "$system_name")
|
||||
done < <(printf '%s\n' "$section_results")
|
||||
|
||||
log d "Current preset settings built for preset: $preset"
|
||||
|
||||
# Show the checklist with extra buttons for "Enable All" and "Disable All"
|
||||
choice=$(rd_zenity \
|
||||
--list --width=1200 --height=720 \
|
||||
--checklist \
|
||||
|
@ -26,28 +33,79 @@ change_preset_dialog() {
|
|||
--column "Enabled" \
|
||||
--column "Emulator" \
|
||||
--column "internal_system_name" \
|
||||
"${current_preset_settings[@]}")
|
||||
"${current_preset_settings[@]}" \
|
||||
--extra-button "Enable All" \
|
||||
--extra-button "Disable All")
|
||||
|
||||
local rc=$?
|
||||
local extra_action=""
|
||||
|
||||
if [[ ! -z $choice || "$rc" == 0 ]]; then
|
||||
log d "User made a choice: $choice with return code: $rc"
|
||||
|
||||
# Handle extra button responses.
|
||||
if [ "$choice" == "Enable All" ]; then
|
||||
log d "Enable All selected"
|
||||
# Build a comma-separated list of all internal system names.
|
||||
all_systems=""
|
||||
for ((i=2; i<${#current_preset_settings[@]}; i+=3)); do
|
||||
if [ -z "$all_systems" ]; then
|
||||
all_systems="${current_preset_settings[$i]}"
|
||||
else
|
||||
all_systems="$all_systems,${current_preset_settings[$i]}"
|
||||
fi
|
||||
done
|
||||
choice="$all_systems"
|
||||
extra_action="extra"
|
||||
force_state="true"
|
||||
elif [ "$choice" == "Disable All" ]; then
|
||||
log d "Disable All selected"
|
||||
# Build a comma-separated list of all internal system names.
|
||||
all_systems=""
|
||||
for ((i=2; i<${#current_preset_settings[@]}; i+=3)); do
|
||||
if [ -z "$all_systems" ]; then
|
||||
all_systems="${current_preset_settings[$i]}"
|
||||
else
|
||||
all_systems="$all_systems,${current_preset_settings[$i]}"
|
||||
fi
|
||||
done
|
||||
choice="$all_systems"
|
||||
extra_action="extra"
|
||||
force_state="false"
|
||||
fi
|
||||
|
||||
# Call make_preset_changes if the user made a selection,
|
||||
# or if an extra button was clicked (even if the resulting choice is empty).
|
||||
if [[ "$rc" == 0 || "$extra_action" == "extra" || -n "$choice" ]]; then
|
||||
log d "Calling make_preset_changes with choice: $choice"
|
||||
(
|
||||
make_preset_changes "$1" "$choice"
|
||||
) |
|
||||
rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Configurator Utility - Presets Configuration" \
|
||||
--text="Setting up your presets, please wait..."
|
||||
make_preset_changes "$preset" "$choice" "$force_state"
|
||||
) | rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
|
||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
|
||||
--title "RetroDECK Configurator Utility - Presets Configuration" \
|
||||
--text="Setting up your presets, please wait..."
|
||||
else
|
||||
log i "No preset choices made"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
build_preset_list_options() {
|
||||
# This function will build a list of all the systems available for a given preset
|
||||
# The list will be generated into a Godot temp file and the variable $current_preset_settings
|
||||
# The other arrays built (all_systems, changed_systems etc.) are also used in the make_preset_changes() function, so this needs to be called in the same memory space as that function at least once
|
||||
# FUNCTION: build_preset_list_options
|
||||
# DESCRIPTION: This function builds a list of all the systems available for a given preset.
|
||||
# It generates the list into a Godot temp file and updates the variable $current_preset_settings.
|
||||
# The function also builds several arrays (all_systems, changed_systems, etc.) that are used in the make_preset_changes() function.
|
||||
# This function needs to be called in the same memory space as make_preset_changes() at least once.
|
||||
# USAGE: build_preset_list_options "$preset"
|
||||
# INPUT:
|
||||
# - $1: The name of the preset.
|
||||
# OUTPUT:
|
||||
# - $godot_current_preset_settings: A Godot temp file containing the system values, pretty system names, and system names.
|
||||
# - $current_preset_settings: An array containing the system values, pretty system names, and system names.
|
||||
# - $current_enabled_systems: An array containing the names of systems that are enabled in the preset.
|
||||
# - $current_disabled_systems: An array containing the names of systems that are disabled in the preset.
|
||||
# - $changed_systems: An array that will be used to track systems that have changed.
|
||||
# - $changed_presets: An array that will be used to track presets that have changed.
|
||||
# - $all_systems: An array containing the names of all systems in the preset.
|
||||
|
||||
if [[ -f "$godot_current_preset_settings" ]]; then
|
||||
rm -f "$godot_current_preset_settings" # Godot data transfer temp files
|
||||
|
@ -82,56 +140,106 @@ build_preset_list_options() {
|
|||
|
||||
|
||||
make_preset_changes() {
|
||||
# This function will take a preset name $preset and a CSV list $choice, which contains the names of systems that have been enabled for this preset and enable them in the backend
|
||||
# Any systems which are currently enabled and not in the CSV list $choice will instead be disabled in the backend
|
||||
# USAGE: make_preset_changes $preset $choice
|
||||
# This function takes a preset name ($1) and a CSV list ($2) of system names.
|
||||
# If a third parameter is provided (force_state), it forces the specified state (true/false)
|
||||
# for only the systems in the CSV list. Otherwise, it toggles the current state.
|
||||
#
|
||||
# USAGE: make_preset_changes $preset $choice [force_state]
|
||||
#
|
||||
# Examples:
|
||||
# Force "borders" to be true for gba:
|
||||
# make_preset_changes "borders" "gba" true
|
||||
# Force "borders" to be true for all supported systems:
|
||||
# make_preset_changes "borders" "all" true
|
||||
# Toggle gba in preset "borders", this will disable the enabled and vice versa:
|
||||
# make_preset_changes "borders" "gba" true
|
||||
# Toggle all in preset "borders":
|
||||
# make_preset_changes "borders" "all"
|
||||
|
||||
# Fetch incompatible presets from JSON and create a lookup list
|
||||
log d "Fetching incompatible presets from JSON file"
|
||||
incompatible_presets=$(jq -r '
|
||||
.incompatible_presets | to_entries[] |
|
||||
.incompatible_presets | to_entries[] |
|
||||
[
|
||||
"\(.key):\(.value)",
|
||||
"\(.key):\(.value)",
|
||||
"\(.value):\(.key)"
|
||||
] | join("\n")
|
||||
' $features)
|
||||
' "$features")
|
||||
|
||||
preset="$1"
|
||||
choice="$2"
|
||||
force_state="${3:-}"
|
||||
|
||||
if [[ "${force_state,,}" == "on" || "${force_state,,}" == "true" ]]; then
|
||||
force_state="true"
|
||||
elif [[ "${force_state,,}" == "off" || "${force_state,,}" == "false" ]]; then
|
||||
force_state="false"
|
||||
fi
|
||||
|
||||
log d "Building preset list options for preset: $preset"
|
||||
build_preset_list_options "$preset"
|
||||
|
||||
IFS="," read -ra choices <<< "$choice"
|
||||
for emulator in "${all_systems[@]}"; do
|
||||
if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then
|
||||
changed_systems=("${changed_systems[@]}" "$emulator")
|
||||
if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then
|
||||
changed_presets=("${changed_presets[@]}" "$preset")
|
||||
if [[ " ${choices[*]} " == *" all "* ]]; then
|
||||
log d "All systems selected for preset: $preset"
|
||||
choices=("${all_systems[@]}")
|
||||
fi
|
||||
|
||||
# Use an associative array to store the new state for each emulator.
|
||||
declare -A emulator_state
|
||||
|
||||
# Iterate only over the specified systems.
|
||||
for emulator in "${choices[@]}"; do
|
||||
if [[ -n "$force_state" ]]; then
|
||||
new_state="$force_state"
|
||||
log i "Forcing $preset to state: $new_state for $emulator"
|
||||
else
|
||||
current_state=$(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$preset")
|
||||
if [[ "$current_state" == "true" ]]; then
|
||||
new_state="false"
|
||||
if [[ $emulator == "all" ]]; then
|
||||
log i "Toggling off $preset for all systems"
|
||||
else
|
||||
log i "Toggling off $preset for system: $emulator"
|
||||
fi
|
||||
set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset"
|
||||
# Check for conflicting presets for this system
|
||||
while IFS=: read -r preset_being_checked known_incompatible_preset || [[ -n "$preset_being_checked" ]];
|
||||
do
|
||||
if [[ ! $preset_being_checked == "#"* ]] && [[ ! -z "$preset_being_checked" ]]; then
|
||||
if [[ "$preset" == "$preset_being_checked" ]]; then
|
||||
if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then
|
||||
changed_presets=("${changed_presets[@]}" "$known_incompatible_preset")
|
||||
set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [[ $emulator == "all" ]]; then
|
||||
log i "Toggling on $preset for all systems"
|
||||
else
|
||||
new_state="true"
|
||||
log i "Toggling on $preset for system: $emulator"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
emulator_state["$emulator"]="$new_state"
|
||||
changed_systems=("${changed_systems[@]}" "$emulator")
|
||||
[[ ! " ${changed_presets[*]} " =~ " ${preset} " ]] && changed_presets=("${changed_presets[@]}" "$preset")
|
||||
set_setting_value "$rd_conf" "$emulator" "$new_state" "retrodeck" "$preset"
|
||||
|
||||
# If enabling the emulator, disable any conflicting presets.
|
||||
if [[ "$new_state" == "true" ]]; then
|
||||
while IFS=: read -r preset_being_checked known_incompatible_preset || [[ -n "$preset_being_checked" ]]; do
|
||||
if [[ ! $preset_being_checked =~ ^# ]] && [[ -n "$preset_being_checked" ]]; then
|
||||
if [[ "$preset" == "$preset_being_checked" ]] && [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then
|
||||
log d "Disabling conflicting preset: $known_incompatible_preset for emulator: $emulator"
|
||||
changed_presets=("${changed_presets[@]}" "$known_incompatible_preset")
|
||||
set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset"
|
||||
fi
|
||||
done < <(echo "$incompatible_presets")
|
||||
fi
|
||||
if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then
|
||||
changed_systems=("${changed_systems[@]}" "$emulator")
|
||||
if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then
|
||||
changed_presets=("${changed_presets[@]}" "$preset")
|
||||
fi
|
||||
set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$preset"
|
||||
fi
|
||||
done
|
||||
for emulator in "${changed_systems[@]}"; do
|
||||
build_preset_config $emulator ${changed_presets[*]}
|
||||
done
|
||||
done < <(echo "$incompatible_presets")
|
||||
fi
|
||||
done
|
||||
|
||||
# Rebuild config for all changed systems.
|
||||
for emulator in "${changed_systems[@]}"; do
|
||||
log d "Building preset config for changed emulator: $emulator"
|
||||
if [[ "${emulator_state[$emulator]}" == "true" ]]; then
|
||||
# When enabling, force a full config update (detailed settings applied).
|
||||
build_preset_config "$emulator" "${changed_presets[*]}" true
|
||||
else
|
||||
build_preset_config "$emulator" "${changed_presets[*]}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
build_preset_config() {
|
||||
|
@ -141,6 +249,7 @@ build_preset_config() {
|
|||
local system_being_changed="$1"
|
||||
shift
|
||||
local presets_being_changed="$*"
|
||||
log d "Applying presets: $presets_being_changed for system: $system_being_changed"
|
||||
for current_preset in $presets_being_changed
|
||||
do
|
||||
local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
|
||||
|
@ -149,6 +258,7 @@ build_preset_config() {
|
|||
local read_system_name=$(get_setting_name "$system_line")
|
||||
if [[ "$read_system_name" == "$system_being_changed" ]]; then
|
||||
local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset")
|
||||
log d "Processing system: $read_system_name with preset: $current_preset, enabled: $read_system_enabled"
|
||||
while IFS='^' read -r action read_preset read_setting_name new_setting_value section target_file defaults_file || [[ -n "$action" ]];
|
||||
do
|
||||
if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
|
||||
|
@ -161,6 +271,7 @@ build_preset_config() {
|
|||
else
|
||||
local read_config_format="$read_preset"
|
||||
fi
|
||||
log d "Config file format: $read_config_format"
|
||||
;;
|
||||
|
||||
"change" )
|
||||
|
@ -173,6 +284,7 @@ build_preset_config() {
|
|||
eval defaults_file=$defaults_file
|
||||
fi
|
||||
local read_defaults_file="$defaults_file"
|
||||
log d "Changing setting: $read_setting_name to $new_setting_value in $read_target_file"
|
||||
if [[ "$read_system_enabled" == "true" ]]; then
|
||||
if [[ "$new_setting_value" = \$* ]]; then
|
||||
eval new_setting_value=$new_setting_value
|
||||
|
@ -210,8 +322,31 @@ build_preset_config() {
|
|||
fi
|
||||
;;
|
||||
|
||||
"rewrite" )
|
||||
if [[ "$read_preset" == "$current_preset" ]]; then
|
||||
if [[ "$target_file" = \$* ]]; then # Read current target file and resolve if it is a variable
|
||||
eval target_file=$target_file
|
||||
fi
|
||||
local read_target_file="$target_file"
|
||||
if [[ "$defaults_file" = \$* ]]; then # Read current defaults file and resolve if it is a variable
|
||||
eval defaults_file=$defaults_file
|
||||
fi
|
||||
local read_defaults_file="$defaults_file"
|
||||
log d "Rewriting setting: $read_setting_name to $new_setting_value in $read_target_file"
|
||||
if [[ "$read_system_enabled" == "true" ]]; then
|
||||
if [[ "$new_setting_value" = \$* ]]; then # Resolve new setting value if it is a variable
|
||||
eval new_setting_value=$new_setting_value
|
||||
fi
|
||||
echo -n "$new_setting_value" > "$read_target_file" # Write the new setting value to the target file
|
||||
else
|
||||
cat "$read_defaults_file" > "$read_target_file" # Restore the default settings from the defaults file
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
"enable" )
|
||||
if [[ "$read_preset" == "$current_preset" ]]; then
|
||||
log d "Enabling file: $read_setting_name"
|
||||
if [[ "$read_system_enabled" == "true" ]]; then
|
||||
enable_file "$read_setting_name"
|
||||
else
|
||||
|
@ -254,3 +389,62 @@ build_retrodeck_current_presets() {
|
|||
fi
|
||||
done < $rd_conf
|
||||
}
|
||||
|
||||
fetch_all_presets() {
|
||||
# This function fetches all possible presets from the presets directory
|
||||
# USAGE: fetch_all_presets [--pretty] [system_name]
|
||||
|
||||
local presets_dir="$config/retrodeck/presets"
|
||||
local presets=()
|
||||
local pretty_presets=()
|
||||
local pretty_output=false
|
||||
local system_name=""
|
||||
|
||||
if [[ "$1" == "--pretty" ]]; then
|
||||
pretty_output=true
|
||||
system_name="$2"
|
||||
else
|
||||
system_name="$1"
|
||||
fi
|
||||
|
||||
if [[ -n "$system_name" ]]; then
|
||||
preset_file="$presets_dir/${system_name}_presets.cfg"
|
||||
if [[ -f "$preset_file" ]]; then
|
||||
while IFS= read -r line; do
|
||||
if [[ $line =~ ^(change|enable)\^([a-zA-Z0-9_]+)\^ ]]; then
|
||||
preset="${BASH_REMATCH[2]}"
|
||||
if [[ ! " ${presets[*]} " =~ " ${preset} " ]]; then
|
||||
presets+=("$preset")
|
||||
if $pretty_output; then
|
||||
pretty_preset_name=${preset//_/ } # Preset name prettification
|
||||
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
|
||||
pretty_presets+=("$pretty_preset_name")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < "$preset_file"
|
||||
fi
|
||||
else
|
||||
for preset_file in "$presets_dir"/*_presets.cfg; do
|
||||
while IFS= read -r line; do
|
||||
if [[ $line =~ ^change\^([a-zA-Z0-9_]+)\^ ]]; then
|
||||
preset="${BASH_REMATCH[1]}"
|
||||
if [[ ! " ${presets[*]} " =~ " ${preset} " ]]; then
|
||||
presets+=("$preset")
|
||||
if $pretty_output; then
|
||||
pretty_preset_name=${preset//_/ } # Preset name prettification
|
||||
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
|
||||
pretty_presets+=("$pretty_preset_name")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < "$preset_file"
|
||||
done
|
||||
fi
|
||||
|
||||
if $pretty_output; then
|
||||
printf "%s\n" "${pretty_presets[@]}"
|
||||
else
|
||||
echo "${presets[@]}"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ run_game() {
|
|||
system=""
|
||||
manual_mode=false
|
||||
|
||||
usage="Usage: flatpak run net.retrodeck.retrodeck [-e emulator] [-s system] [-m] game"
|
||||
|
||||
# Parse options for system, emulator, and manual mode
|
||||
while getopts ":e:s:m" opt; do
|
||||
case ${opt} in
|
||||
|
@ -20,7 +22,7 @@ run_game() {
|
|||
log i "Run game: manual mode enabled"
|
||||
;;
|
||||
\?)
|
||||
echo "Usage: $0 [-e emulator] [-s system] [-m] game"
|
||||
echo "$usage"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
@ -30,7 +32,7 @@ run_game() {
|
|||
# Check for game argument
|
||||
if [[ -z "$1" ]]; then
|
||||
log e "Game path is required."
|
||||
log i "Usage: $0 [-e emulator] [-s system] [-m] game"
|
||||
log i "$usage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -178,7 +180,7 @@ find_system_commands() {
|
|||
selected_command="${command_list[1]}"
|
||||
else
|
||||
# Show the list with Zenity and return the **command** (second column) selected
|
||||
selected_command=$(zenity --list \
|
||||
selected_command=$(rd_zenity --list \
|
||||
--title="Select an emulator for $system_name" \
|
||||
--column="Emulator" --column="Hidden Command" "${command_list[@]}" \
|
||||
--width=800 --height=400 --print-column=2 --hide-column=2)
|
||||
|
|
|
@ -100,6 +100,7 @@ add_to_steam() {
|
|||
remove_from_steam
|
||||
else
|
||||
log d "Updating game list"
|
||||
steam-rom-manager enable --names "RetroDECK Steam Sync"
|
||||
steam-rom-manager add
|
||||
fi
|
||||
}
|
||||
|
@ -110,7 +111,11 @@ remove_from_steam() {
|
|||
log d "Creating dummy game"
|
||||
cat "" > "$steamsync_folder/CUL0.sh"
|
||||
log d "Cleaning the shortcut"
|
||||
steam-rom-manager enable --names "RetroDECK Steam Sync"
|
||||
steam-rom-manager disable --names "RetroDECK Launcher"
|
||||
steam-rom-manager remove
|
||||
log d "Removing dummy game"
|
||||
rm "$steamsync_folder/CUL0.sh"
|
||||
steam-rom-manager enable --names "RetroDECK Launcher"
|
||||
steam-rom-manager disable --names "RetroDECK Steam Sync"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Name=RetroDECK
|
||||
GenericName=Universal Emulator Platform
|
||||
GenericName=All-in-One Retro Gaming Platform
|
||||
Type=Application
|
||||
Comment=All-in-one emulation solution for Steam Deck and Linux desktops, making emulation easy and accessible
|
||||
Icon=net.retrodeck.retrodeck
|
||||
|
|
|
@ -36,22 +36,35 @@
|
|||
</screenshot>
|
||||
</screenshots>
|
||||
<description>
|
||||
<p>RetroDECK is an emulation and retro gaming application powered by the ES-DE Frontend that allows you to catalog and play your game collection directly on Linux in one unified experience. It's inspired by other embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera. The goal is to have everything you need included in one package, so no other software is required.</p>
|
||||
<p>Currently in Beta, RetroDECK focuses on SteamOS, Steam Deck, and Linux Desktop. It uses Steam Input for controller inputs and hotkeys. For the best experience, play and launch RetroDECK via Steam, though manual tweaks via RetroDECK Configurator may be needed if played without it.</p>
|
||||
<p>Thanks to the built-in RetroENGINE, RetroDECK can be used as a headless engine, and with Steam Sync, you can synchronize your favorites as non-Steam games (powered by Steam ROM Manager).</p>
|
||||
<p>What is it in detail?
|
||||
https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/</p>
|
||||
<p>How-to: Get Started using RetroDECK
|
||||
https://retrodeck.readthedocs.io/en/latest/wiki_general/retrodeck-start/</p>
|
||||
<p>If you want to sponsor the project:
|
||||
https://www.patreon.com/RetroDECK</p>
|
||||
<p>RetroDECK is a universal retro gaming platform that brings the power and flexibility of custom firmware without replacing your system’s OS. Perfect for Steam Deck and Linux desktops, RetroDECK is a self-contained app that delivers everything you need for retro gaming right out of the box.</p>
|
||||
<p>Why RetroDECK?</p>
|
||||
<ul>
|
||||
<li>All-in-One Convenience: Catalog, customize, and play your retro games from one unified app.</li>
|
||||
<li>No Custom Firmware: Enjoy the benefits of custom firmware without modifying your system — RetroDECK runs as a fully self-contained app.</li>
|
||||
<li>Easy Installation and Updates: RetroDECK is easy to install, update, and remove if you choose, ensuring a hassle-free experience.</li>
|
||||
</ul>
|
||||
<p>What’s Inside?</p>
|
||||
<ul>
|
||||
<li>RetroDECK Framework: A flexible and powerful environment for seamless emulation and retro gaming.</li>
|
||||
<li>RetroENGINE: Offers a versatile gaming setup with headless engine mode, perfect for advanced users.</li>
|
||||
<li>RetroDECK Configurator: A multi-tool interface to tweak and tailor your gaming experience.</li>
|
||||
<li>Steam Input Controller Support: Advanced input handling, radial menus and hotkeys via Steam Input.</li>
|
||||
<li>Steam Sync: Add your games as non-Steam titles with ease using Steam ROM Manager.</li>
|
||||
<li>ES-DE Frontend: A polished, user-friendly interface for browsing and launching your retro collection.</li>
|
||||
<li>Emulators: Packed with emulators like RetroArch, MAME, PCSX2, and more — play almost any retro game you can think of.</li>
|
||||
<li>Engines: Support for game engines like Solarus, GZDoom, and others.</li>
|
||||
<li>PortMaster: Manage your Linux game ports with ease — no more headaches setting up game ports manually.</li>
|
||||
</ul>
|
||||
<p>RetroDECK gives you the power of a retro game handheld's custom firmware experience in a tidy, self-contained package. No system modding, no OS replacement — just pure retro gaming bliss.</p>
|
||||
<p>The RetroDECK Community:</p>
|
||||
<p>Blog: https://retrodeck.readthedocs.io/en/latest/blog/</p>
|
||||
<p>Discord: https://discord.gg/WDc5C9YWMx</p>
|
||||
<p>Matrix: https://matrix.to/#/#retrodeck:matrix.org</p>
|
||||
<p>Lemmy Community: https://lemmy.zip/c/retrodeck</p>
|
||||
<p>Subreddit: https://www.reddit.com/r/retrodeck</p>
|
||||
<p>Bluesky: https://bsky.app/profile/retrodeck.net</p>
|
||||
<ul>
|
||||
<li>Blog: https://retrodeck.readthedocs.io/en/latest/blog/</li>
|
||||
<li>Discord: https://discord.gg/WDc5C9YWMx</li>
|
||||
<li>Matrix: https://matrix.to/#/#retrodeck:matrix.org</li>
|
||||
<li>Lemmy Community: https://lemmy.zip/c/retrodeck</li>
|
||||
<li>Subreddit: https://www.reddit.com/r/retrodeck</li>
|
||||
<li>Bluesky: https://bsky.app/profile/retrodeck.net</li>
|
||||
</ul>
|
||||
</description>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#94a6fb</color>
|
||||
|
@ -60,6 +73,51 @@
|
|||
<project_license>GPL-3.0</project_license>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<releases>
|
||||
<release version="0.9.1b" date="2025-02-07">
|
||||
<url>https://github.com/RetroDECK/RetroDECK/releases/tag/0.9.0b</url>
|
||||
<description>
|
||||
<p>New Additions:</p>
|
||||
<ul>
|
||||
<li>RetroAchievements: PPSSPP support added (by Cohee)</li>
|
||||
<li>RetroAchievements: Dolphin support added</li>
|
||||
<li>INITIAL SETUP: prompts to add RetroDECK to Steam</li>
|
||||
<li>CONFIGURATOR: reset components menu simplified and allowed multiple choices and `Factory Reset`</li>
|
||||
<li>CONFIGURATOR: refacotred open component menu</li>
|
||||
<li>CONFIGURATOR: scaled UI to 1.5x</li>
|
||||
<li>New CLI argument `--set` to set presets, call retrodeck with `--set help` for more information</li>
|
||||
<li>New CLI argument `--open` to open a component or emulator. Call retrodeck with `--open --list` for a list of available components or emulator to open</li>
|
||||
<li>New CLI argument `--reset` that replaces the previous ones</li>
|
||||
<li>New CLI argument `--factory-reset` that resets RetroDECK completely and brings the user to the first setup</li>
|
||||
<li>CHEATS: added basic cheats support for RetroArch, PCSX2, PPSSPP and MAME</li>
|
||||
<li>GAME COMPRESSOR: refactored</li>
|
||||
<li>CHANGE PRESET DIALOG: added enable all and disable all buttons</li>
|
||||
<li>RPCS3: updated</li>
|
||||
<li>MAME: updated to 0.275</li>
|
||||
</ul>
|
||||
<p>Bug fixes:</p>
|
||||
<ul>
|
||||
<li>CONFIGURATOR: restructured menus for better navigation and clarity</li>
|
||||
<li>RETROARCH: fixed a bug where the cores were not updated along with RetroArch itself</li>
|
||||
<li>DOLPHIN and PRIMEHACK: Fixed a bug where the Universal Dynamic Input was missing from the build</li>
|
||||
<li>DOLPHIN: fixed a bug where it wouldn't start in some Wayland configurations</li>
|
||||
<li>DOLPHIN: fixed a trigger issue in the controller configuration</li>
|
||||
<li>PRIMEHACK: fixed an issue where wii folder was not mapped as roms path in GTK GUI</li>
|
||||
<li>PORTMASTER: added the ability to hide PortMaster from ES-DE</li>
|
||||
<li>PSX: fixed an issue that was not showing the borders correctly</li>
|
||||
<li>BIOS CHECKER: fixed wrong folder check</li>
|
||||
<li>POST_UPDATE: fixed a bug where retrodeck.cfg was not updated at every version</li>
|
||||
<li>COMPRESSOR: fixed a bug where user selected items were misread</li>
|
||||
<li>ES-DE: removed 7zip and zip formats from PSP as not supported by PPSSPP (Standalone)</li>
|
||||
</ul>
|
||||
<p>Developers, developers, developers:</p>
|
||||
<ul>
|
||||
<li>Function `make_preset_changes` enhanced to be 100% headless</li>
|
||||
<li>New `fetch_all_presets` function to list all the presets globally of per-system</li>
|
||||
<li>`preapre_components` can now act/reset multiple components at once</li>
|
||||
<li>`preapre_components` can now execute a factory reset with --factory-reset</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.0b" date="2025-02-04">
|
||||
<url>https://github.com/RetroDECK/RetroDECK/releases/tag/0.9.0b</url>
|
||||
<description>
|
||||
|
@ -88,6 +146,7 @@
|
|||
<li>Fixed an issue that was not correctly displaying version notes</li>
|
||||
<li>Vita3K now uses Vulkan as default</li>
|
||||
<li>Dolphin and Primehack are no longer scaled wide by default but are set to auto</li>
|
||||
<li>Removed zip extension from NDS system as is not supported</li>
|
||||
</ul>
|
||||
<p>Developers, developers, developers:</p>
|
||||
<ul>
|
||||
|
|
|
@ -86,7 +86,7 @@ modules:
|
|||
# VERSION INITIALIZATION
|
||||
# on main please update this with the version variable, eg: VERSION=0.8.0b
|
||||
# on cooker will be VERSION=cooker-0.9.0b for example
|
||||
VERSION=0.9.0b
|
||||
VERSION=cooker-0.9.1b
|
||||
|
||||
git checkout ${GITHUB_REF_NAME}
|
||||
mkdir -p ${FLATPAK_DEST}/retrodeck/
|
||||
|
@ -311,6 +311,16 @@ modules:
|
|||
url: https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip
|
||||
sha256: SAMEDUCKSHAPLACEHOLDER
|
||||
|
||||
- name: retroarch-cheats
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p ${FLATPAK_DEST}/retrodeck/cheats
|
||||
- tar -czf ${FLATPAK_DEST}/retrodeck/cheats/retroarch.tar.gz cht
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/libretro/libretro-database
|
||||
branch: master
|
||||
|
||||
- name: ppsspp-bios
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
|
@ -366,6 +376,16 @@ modules:
|
|||
url: https://github.com/RetroDECK/org.ppsspp.PPSSPP/releases/latest/download/RetroDECK-Artifact.tar.gz
|
||||
sha256: RETRODECKPPSSPPLATEST
|
||||
|
||||
- name: ppsspp-cheats
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p ${FLATPAK_DEST}/retrodeck/cheats
|
||||
- tar -czf ${FLATPAK_DEST}/retrodeck/cheats/ppsspp.tar.gz cheat.db
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/Saramagrean/CWCheat-Database-Plus-
|
||||
branch: master
|
||||
|
||||
# PCSX2 - FROZEN UNTIL QT 6.8 UPDATE
|
||||
# Inspired by: https://github.com/flathub/com.zettlr.Zettlr/blob/master/com.zettlr.Zettlr.yaml
|
||||
# https://pcsx2.net/downloads/
|
||||
|
@ -386,6 +406,16 @@ modules:
|
|||
url: https://github.com/PCSX2/pcsx2/releases/download/v2.1.190/pcsx2-v2.1.190-linux-appimage-x64-Qt.AppImage
|
||||
sha256: 6a83a7bc499ad4ef4940aa2df08624876b452998f897ebdb8f8d7687c9035b79
|
||||
|
||||
- name: pcsx2-cheats
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p ${FLATPAK_DEST}/retrodeck/cheats
|
||||
- tar -czf ${FLATPAK_DEST}/retrodeck/cheats/pcsx2.tar.gz cheats
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/xs1l3n7x/pcsx2_cheats_collection
|
||||
branch: main
|
||||
|
||||
# Dolphin
|
||||
# why from source: AppImage not provided, only Flatpak
|
||||
# https://github.com/RetroDECK/org.DolphinEmu.dolphin-emu
|
||||
|
@ -431,6 +461,17 @@ modules:
|
|||
url: https://github.com/RetroDECK/io.github.shiiion.primehack/releases/latest/download/RetroDECK-primehack-Artifact.tar.gz
|
||||
sha256: RETRODECKPRIMEHACKLATEST
|
||||
|
||||
# Universal Dynamic Input for Dolphin and Primehack
|
||||
- name: universal_dynamic_input
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures
|
||||
- cp -r * ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures/
|
||||
sources:
|
||||
- type: git
|
||||
url: https://github.com/Venomalia/UniversalDynamicInput.git
|
||||
commit: UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER
|
||||
|
||||
# RPCS3
|
||||
# https://rpcs3.net/download
|
||||
|
||||
|
@ -761,6 +802,7 @@ modules:
|
|||
- cp -f res/icon.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg
|
||||
- cp -f res/icon-configurator.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.configurator.svg
|
||||
- mv -f -t ${FLATPAK_DEST}/retrodeck res/binding_icons
|
||||
- mv -f -t ${FLATPAK_DEST}/retrodeck res/steam_grid
|
||||
|
||||
# RetroDECK core script
|
||||
- install -Dm755 retrodeck.sh ${FLATPAK_DEST}/bin/retrodeck.sh
|
||||
|
|
BIN
res/Affinity Files/icon.afphoto~lock~
Normal file
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 85 KiB |
|
@ -4,15 +4,11 @@
|
|||
<g transform="matrix(1.88235,0,0,1.86861,-7.52941,-5.60584)">
|
||||
<path d="M140,37.25C140,18.347 124.765,3 106,3L38,3C19.235,3 4,18.347 4,37.25L4,105.75C4,124.653 19.235,140 38,140L106,140C124.765,140 140,124.653 140,105.75L140,37.25Z" style="fill:rgb(17,17,17);"/>
|
||||
</g>
|
||||
<g transform="matrix(2.02105,0,0,2.02105,-13.4737,-13.4737)">
|
||||
<g id="D" transform="matrix(-0.674885,8.26495e-17,-8.26495e-17,-0.674885,223.747,109.037)">
|
||||
<path d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g id="Left-Symbol" serif:id="Left Symbol" transform="matrix(0.494792,-0,-0,0.494792,6.66667,6.66667)">
|
||||
<use xlink:href="#_Image1" x="38.93" y="88.886" width="101px" height="79px"/>
|
||||
</g>
|
||||
<use id="Central-Icons" serif:id="Central Icons" xlink:href="#_Image1" x="55.434" y="81.667" width="80px" height="93px"/>
|
||||
<g id="D" transform="matrix(-1.36398,1.67039e-16,-1.67039e-16,-1.36398,438.73,206.895)">
|
||||
<path d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<defs>
|
||||
<image id="_Image1" width="101px" height="79px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAABPCAYAAADySwufAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACYklEQVR4nO3dwWoTQQDG8f+MoZ6l6CHexJvES6lFX8NDGnrSo+jVF1DwCbwIehNS0WfwImqgglR8hUQUwYOiIM56yDabTZq0hSH7od8PAhl2u5n0T5dku8sGZrzqjdZSoFfARgp0UgidFFgvgBQghUACirBgTCCF+rh6Pl7/0PHU9ufGk+dQlK83GZevd6wx5c9PlpXznyxbMIap9zQzPuT9Vsuq7c2Np3+f9fH51nSQ19vDzQSPgc5sLFudePDkzfbwLvAWB2lcBBh0h5vAA6YiWXPioDtcY7zLchAREejhXZaUCGw0PQmri/ivRI6jCIrAetOTsDp/4hLkKIIcRZCjCGodvcqRfgG/M2zHxoocUW5cf3Kun2E7VvLuS5CjCHIUQY4iyFEEOYogRxHkKIIcRZCjCHIUQY4iyFEEOYqgHIfuL764+fmKz7pfetb9n/e3Wu9WGeVe+bDFvgFnjruyd1+CHEWQowhyFEGOIshRBDmKIEcR5CiCHEWQowhyFEGOIijHUeKPwKcM2/mXfT/Jyjmi3PelEHl59yXIUQQ5iiBHEeQoghxFkKMIchRBjiLIUQQ5iiBHEeQoghxFkKMIchRBYdAdFjB/Ec2SW0nM3qpjP8HIFw1lu1XHTo7/PF4uH5bHae++BDmKIEcR5CiCIvCj6UlYXWR8Mp0JicCHpidhdRHYb3oSVheBp8CXpidilbi12/4K3Gl6IlY5+Ej8DHje5ESsEgG2dtsF0AVuc8LT9i2/yZfHq/12utZvPwQuAY+APeBnUxP7n4VlC1/ujE6lEC6kwFnfZXtlh+73/gIFdaUBKdRJYwAAAABJRU5ErkJggg=="/>
|
||||
<image id="_Image1" width="80px" height="93px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABdCAYAAAAyj+FzAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGX0lEQVR4nO2daWxUVRSAvzOUskMBE0hFBININUgqGgQiUYNLlIQQAyg7ZW3LVva17KtAKZtQtiCpgqiAqRIBCT9QJE1RJAiCEajQtNVIgEI35tYfwyvTvbO9O8v7kkk7S+8598u5k7mnk/uEGvhyVG64EgYokZ5KiLJDlBKpp4RMJdxQIr8rYee4LS2v1jRWMCJVPXF4ZG6EEsYrYaISIpUISsAOGL87boISSpRwVAnJ8ZtaHjMxf+1UKvCbETldlchhJbQpJ6oqgaU3O3JCCfFTNra4YvJctFBBYNrwnCFK2KFE6juLcUEgSihSwsdKZPn0Dc3zNczLNGzOd44OzxkE7APqezhuODAPuLgm4fb7Ho7l15RW4PfDsjsqkQw7NK6sslyswPLPHVEik+aui8jUOFefIADHh2bXU8JZJdLFIcjrAlEiD5SwTMHaxLURxXqn7T2MJTwY6OLjWA2BFcD5hTPuvOHjWKZhCBxnYswo4OSCmXdS582609rEuD5BfhiSHa2Ec8aS8+ESdvwE7I8fv6OERCWyZfXKpnbNLtzCBvTXGL8ZkAykz5h7t5vGPNzGBnTQnQQQDZyZNu9uSsK8ey10J+MKNqCd7iQeIcAY4I9J8+/FTFhwr8ptpj9hA9rrTqIcTwC7gNNxiXkv6k6mJmw4EvZHegAZ4xfmJY1dlNdEdzJVYav5JVoJA6YAl0cvzhuoO5nK8HeBBpHA/pgl94+PWHK/o+5knAkUgQa9gQtDl95fNnjZgwa6k4HAEwhOnZ6Plj/Q3ukJRIEG7YG0gSseHO6/Mr+triQCWaBBX+DSB6vy5/RblV/X7ODBIBCcOj19V+eb2ukJFoEGUcDJPmsKUt/7uMCUTk+wCTQYBFx+d23BxLfXFdbxZaBgFQiOTs9GIL33+kKfdXqCWaBBNHDmzaTClNeTirze6QkFgeDU6em1oSimZ3KR1zo9oSLQoLTT031jsVc6PaEm0KAHkNFtU3HSK5uLPer0hKpAcOr0dN1S7HanJ5QFGkQC+6O3PjzWZetDlzs9lsDHvAVc6PzJw2UvbLPXutNjCSxLaaen03Z7rTo9lsDKaQ+kdUyxH+6wQ1Xb6bEEVk9f4OIzO1W/ql5gCayZxsBX7XaphW13qQofwC2BtUOARTi+O1kGS6BrDG6zu6TMF7Esga6zPnJPSennRUug6zQEdhh3LIHu0StyT0knsAR6wnCwBHrC0Mg9JWIJdJ8ngVaWQM9oawn0DEughzS3BHpGliXQM25YAj0j0xLoPmezRspdS6D77AVrJ+IuhcB+sAS6S0rWSLkNlkB3uAzMMu5YAl2jGBicNVJKz4GwBNaeAmDYzRg55/xgmKZkAo1bQL/MUbb08k9YFVgzp4CXr1ciD6wKrI4cYMafY2wV/pXpjFWBFVHAFqDTlbF1qpUHVgWWJx2IvTi+TkZt/8CqQAe3gVjg1QuxYbWWB1YFluDY0878JS7sH3cGCGWBF4C49Al1T3sySCgu4TxgGvDS2YmeyYPQq8CDQMKPk8NveWvAUBF4FZhwKiHc66drBvsSLgASgc4nE+r55GjSYK7Ab4FJx6bV+8uXQYJRYCYw5bsZ9Q+ZESyYlnAxsBqISptpjjwIngo8BcQdmt3gktmBA11gNjD94JwGqboSCNQlbAc2A50OzG2oTR4EZgWeBeJS5zc8V+MrTSCQKvA/HGe9dt+3oJFfyIPAqMASYA8wa3dio391J1OeMBzvJz49GsQDfgNiUxY1/kl3IlVhA27qTqIS7gFTga7bFvuvPHBU4DXgad2JOHEAmLp5aZMs3YnUhjDguu4kHnEFiE9a3uSE7kRcwQac15xDPrAA6LxuedOAkgeOCkzFsYcM1xA/DZi0emXTaxpiewXjag6fK+FDE4+Cv6GEyUvXNDuidfZewPggvdWkeEXASuD5YJAHZS/Isl2JjPVhBZ5UQvz8tRGX9U3X+zjvRCYD3YHOXo6RDUybuy7iMy+P6xeU7oXf+bR1ATAAyPXS2HYc5/c9N3t986CUB5Vf1espJRxSIl09WMI/KyF2anKLXzXMyVQqdGP67G31N/Aajg28cnG8HGAs0CMU5EE1VzYE+Dom91klTFXCcCXSoJoKzFDCRiUciN/UstCk3P2CWp3k+MXo3AglEq3KXlvzhnp0bc0xW1v6TX/ObP4HOCdVp+44FjkAAAAASUVORK5CYII="/>
|
||||
</defs>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.3 KiB |
18
res/icon-framework.svg
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1.88235,0,0,1.86861,-7.52941,-5.60584)">
|
||||
<path d="M140,37.25C140,18.347 124.765,3 106,3L38,3C19.235,3 4,18.347 4,37.25L4,105.75C4,124.653 19.235,140 38,140L106,140C124.765,140 140,124.653 140,105.75L140,37.25Z" style="fill:rgb(17,17,17);"/>
|
||||
</g>
|
||||
<g transform="matrix(2.02105,0,0,2.02105,-13.4737,-13.4737)">
|
||||
<g id="D" transform="matrix(-0.674885,8.26495e-17,-8.26495e-17,-0.674885,223.747,109.037)">
|
||||
<path d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g id="Engine" transform="matrix(0.494792,-0,-0,0.494792,6.66667,6.66667)">
|
||||
<use xlink:href="#_Image1" x="33.993" y="72.667" width="111px" height="111px"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<image id="_Image1" width="111px" height="111px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABvCAYAAADixZ5gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFq0lEQVR4nO2dTWhUVxSAvzN5/hSLEayCIIJ0U61ixKZiacWddOHSkurOpibGCqYqVFIQCo1mVazUJqm2WiuVQqELDYJQDXShFqSx1S5dWSlJaytEJSb3djFJE8P85b37ZuY454MhkHn3nDvnm5n33tz73hWqiK72+5edsNGL4AAn4AUckv0rPPGw5eOu+kuhczd1PjzmoM2LZPOO55+SGw97+g7MPR46d1wyle7ANNaS7VO+xxzgpZRyrymSOwOsTil3LKpNXqXxMZ+rCCZPMSZPMSZPMSZPMSZPMSZPMSZPMSZPMSZPMSZPMSZPMSZPMZJW4JO7hhZ7YZ1Dlk0O7UCRIZdPnPBcgSEhPHznhB+dyP8xJraZGnd6u1y5n2on7HfwoheRPP3zHn5ywtlcuZ/OA05k1MMtJwz8/N6sR2nUOKi8r1uGZjuhw8MOJyydVpxS5I1vm1ee9yAuW5zQ8or1z3nI5MudQ97ENs7DTSfScWN31Bey3sHkfbNzsMGJnHHCqpjFKUXeZLvyyyuYu4A8PDgnknHCSQ/vD7RFD0LUPMg+7+zOwQbgGrAyRLxnkIk6vwP0r/58dHbIoLH59t3B2cAZIAoRrwZoADpCBApR7A5gVaBYtcKHq7pHG5IGCVHwHQFi1BoZYFuIILE51zy4GFiatBM1iAMakwZJ+slbl7QDNUoGaFzZPZao/lHCTiwrcbvhhHm0EZGdpliIecAC4O8kSdJmuPWzhc+XIU/V8NqnI5uBi2nnsSNExZg8xZg8xZg8xZg8xZg8xZg8xZg8xZg8xURXtt+77JC1sUaLIcig4gRd7fd/cMKmKh1Jdx729R2Y+1XAl3xnRc+Yz9e/qa9xGh44FAEbqZ5P4CagvtKdKMCrQEh582O288CGapGmgWq6rNlB9XzijBiYPMWYPMWYPMWYPJ0IZOU9SRionEdh1XTEV0kywEgEbCH+LaFeB94K1qXiCPA90J9C7L3AclK8+CYHB4k/v+d8tOnskktArBuxnWseHKG88gD6Dx+pPxY6aFPnw61k5ZWT3t9b6mJPQLJ9nmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmJMnmKiK9vvHXPImpiXeC2pQJ/3Hvzg363BL/HKLn5Ybi6s6Bl7EuMSL4CjEdBG9hOoZU7kctKb5VXOaX8eWB+zrQB3o2n/0ICWfhYjyesYA9vnqcbkKcbkKcbkKcbkKWbq0WbcUwVPuDeBS9iXNBHC9ssR/4izDvARsAdYHTPIy8AbMdvmYh/Z22VUIx7oDRgvA5wCHsdsfzrROdO55sEWL3RP/iqQ8xeM4Z3Ha+82xU7k4pTlaPLVZuHtVrvEqyYxeYoxeYoxeYoxeYoxeYoxeYoxeYopx1pCUffuvzbX1Jqx8EoZ6ppY3mgJ28yhDIsiKaWU+uUl6dfmrYTta5k/brfWJVq1Oam8ASZHAozSccDVpEESyWs6segRcBMTOFMywPUQQZLSEShOreCAe0BP0kCJi/72F4v6gC+TxqkhMsCO31qjf0IECkE78EugWM8qE7uWzl93RUGOvoPI29676AHZ2b8fMdlJ2w9mmajDn8CbA21RR6jAwWcfn2odavCwzQmNXmh0yLyZngRX8CTdexEpsBxNpuTrOLLb3HXCNQ/XnUjPjd3JvyqnkurU8RNtQxmHLJiBvDtOmF9E3kEn9KYg74KD9QXkeQ+nnbCvRHmjV/fMSnQeV4xUfx5rPv6CYwbrgHe13y9ldtbw4SP1sed95KOp82EpN0p/fHH/3OC542KH+IoxeYoxeYoxeYoxeYoxeYoxeYoxeYoxeYoxeYoxeYoxeYopx7zNmeDHH7nGAoX032zC+A1qclCXcu4ZU23yDgEbCjw/ApxPKfdR4G6B5z1wOqXcsfgP3aQLLxWNbfYAAAAASUVORK5CYII="/>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
BIN
res/steam_grid/banner.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
res/steam_grid/hero.png
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
res/steam_grid/icon.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
res/steam_grid/logo.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
res/steam_grid/portrait.png
Normal file
After Width: | Height: | Size: 42 KiB |
277
retrodeck.sh
|
@ -1,34 +1,24 @@
|
|||
#!/bin/bash
|
||||
|
||||
source /app/libexec/global.sh
|
||||
|
||||
# uses jq to extract all the emulators (components) that don't have resettable: false in the features.json and separate them with "|"
|
||||
resettable_components=$(jq -r '
|
||||
[(.emulator | to_entries[]) |
|
||||
select(.value.core == null and .value.resettable != false) |
|
||||
.key] | sort | join("|")
|
||||
' "$features")
|
||||
|
||||
# uses sed to create, a, list, like, this
|
||||
pretty_resettable_components=$(echo "$resettable_components" | sed 's/|/, /g')
|
||||
|
||||
|
||||
# Function to display CLI help
|
||||
show_cli_help() {
|
||||
echo -e "
|
||||
Usage:
|
||||
flatpak run [FLATPAK-RUN-OPTION] net.retrodeck-retrodeck [ARGUMENTS]
|
||||
echo -e "
|
||||
Usage:
|
||||
flatpak run [FLATPAK-RUN-OPTION] net.retrodeck.retrodeck [ARGUMENTS]
|
||||
|
||||
Arguments:
|
||||
-h, --help \t Print this help
|
||||
-v, --version \t Print RetroDECK version
|
||||
--info-msg \t Print paths and config informations
|
||||
--debug \t Enable debug logging for this launch of RetroDECK (This may miss errors very early in the launch process)
|
||||
--show-config \t Print information about the RetroDECK configuration file and its contents
|
||||
--debug \t Enable debug logging for this run of RetroDECK
|
||||
--configurator \t Starts the RetroDECK Configurator
|
||||
--compress-one <file> \t Compresses target file to a compatible format
|
||||
--compress-all <format> \t Compresses all supported games into a compatible format.\n\t\t\t\t\t\t Available formats are \"chd\", \"zip\", \"rvz\" and \"all\"
|
||||
--reset-component <component> \t Reset one or more component or emulator configs to the default values
|
||||
--reset-retrodeck \t Starts the initial RetroDECK installer (backup your data first!)
|
||||
--reset <component> \t Reset RetroDECK or one or more component/emulator configurations to default values. WARNING: no confirmation prompt
|
||||
--factory-reset \t Factory Reset, triggers the initial setup WARNING: no confirmation prompt
|
||||
--test-upgrade <version> \t Test upgrading RetroDECK to a specific version, developer use only
|
||||
--set <preset> <system/all> [value] \t Configure or toggle a preset. Examples: --set borders, --set borders all true,\n\t\t\t\t\t\t --set borders gba false. Use --set-help for more information
|
||||
--open <component/emulator> \t Open a specific component or emulator\n\t\t\t\t\t\t --open --list for a list of available components
|
||||
|
||||
Game Launch:
|
||||
[<options>] <game_path> \t Start a game using the default emulator or\n\t\t\t\t\t\t the one defined in ES-DE for game or system
|
||||
|
@ -39,121 +29,154 @@ Game Launch:
|
|||
|
||||
For flatpak run specific options please run: flatpak run -h
|
||||
|
||||
The RetroDECK Team
|
||||
https://retrodeck.net
|
||||
"
|
||||
}
|
||||
|
||||
# Arguments section
|
||||
|
||||
for i in "$@"; do
|
||||
case $i in
|
||||
-h*|--help*)
|
||||
echo "RetroDECK v""$version"
|
||||
show_cli_help
|
||||
exit
|
||||
;;
|
||||
--version*|-v*)
|
||||
# Check if is an infromational message
|
||||
# If so, set LOG_SILENT to true, source the global.sh script,
|
||||
# show the needed information and quit
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
LOG_SILENT=true
|
||||
source /app/libexec/global.sh
|
||||
if [[ "$version" =~ ^[0-9] ]]; then
|
||||
echo "RetroDECK v$version"
|
||||
exit
|
||||
;;
|
||||
--info-msg*)
|
||||
else
|
||||
echo "RetroDECK $version"
|
||||
fi
|
||||
show_cli_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--version)
|
||||
LOG_SILENT=true
|
||||
source /app/libexec/global.sh
|
||||
if [[ "$version" =~ ^[0-9] ]]; then
|
||||
echo "RetroDECK v$version"
|
||||
echo "RetroDECK config file is in: $rd_conf"
|
||||
echo "Contents:"
|
||||
cat $rd_conf
|
||||
exit
|
||||
;;
|
||||
--debug*)
|
||||
logging_level="debug"
|
||||
shift
|
||||
;;
|
||||
--compress-one*)
|
||||
cli_compress_single_game "$2"
|
||||
exit
|
||||
;;
|
||||
--compress-all*)
|
||||
cli_compress_all_games "$2"
|
||||
;;
|
||||
--configurator*)
|
||||
sh /app/tools/configurator.sh
|
||||
#sh /app/bin/godot-configurator.sh
|
||||
;;
|
||||
# --legacy-configurator*)
|
||||
# sh /app/tools/configurator.sh
|
||||
# if [[ $(configurator_generic_question_dialog "RetroDECK Configurator" "Would you like to launch RetroDECK after closing the Configurator?") == "false" ]]; then
|
||||
# exit
|
||||
# else
|
||||
# shift
|
||||
# fi
|
||||
# ;;
|
||||
--reset-component*)
|
||||
component="$2"
|
||||
if [ -z "$component" ]; then
|
||||
echo "You are about to reset one or more RetroDECK components or emulators."
|
||||
echo -e "Available options are:\nall, $pretty_resettable_components"
|
||||
read -p "Please enter the component you would like to reset: " component
|
||||
component=$(echo "$component" | tr '[:upper:]' '[:lower:]')
|
||||
fi
|
||||
else
|
||||
echo "RetroDECK $version"
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
--set-help)
|
||||
LOG_SILENT=true
|
||||
source /app/libexec/global.sh
|
||||
echo -e "\nUsed to toggle or set a preset.\n\nAvailable presets are:"
|
||||
fetch_all_presets | tr ' ' ',' | sed 's/,/, /g'
|
||||
echo -e "\nUsage: --set <preset> <system/all> [value]"
|
||||
echo -e "\nExamples:"
|
||||
echo -e " Force borders to be ON for GBA:"
|
||||
echo -e " make_preset_changes borders gba on"
|
||||
echo -e " Force borders to be OFF for all supported systems:"
|
||||
echo -e " make_preset_changes borders all off"
|
||||
echo -e " Toggle GBA in preset borders (this will disable if enabled and vice versa):"
|
||||
echo -e " make_preset_changes borders gba"
|
||||
echo -e " Toggle all in preset borders:"
|
||||
echo -e " make_preset_changes borders all"
|
||||
echo -e "\nYou can also use 'true' or 'false' instead of 'on' and 'off'.\nThe forced status is case insensitive."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "$component" =~ ^(all|$resettable_components)$ ]]; then
|
||||
read -p "You are about to reset $component to default settings. Enter 'y' to continue, 'n' to stop: " response
|
||||
if [[ $response == [yY] ]]; then
|
||||
prepare_component "reset" "$component" "cli"
|
||||
read -p "The process has been completed, press Enter key to start RetroDECK."
|
||||
shift # Continue launch after previous command is finished
|
||||
else
|
||||
read -p "The process has been cancelled, press Enter key to exit."
|
||||
exit
|
||||
fi
|
||||
else
|
||||
echo "$component is not a valid selection, exiting..."
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
--reset-retrodeck*)
|
||||
echo "You are about to reset RetroDECK completely!"
|
||||
read -p "Enter 'y' to continue, 'n' to stop: " response
|
||||
if [[ $response == [yY] ]]; then
|
||||
rm -f "$lockfile"
|
||||
rm -f "$rd_conf"
|
||||
read -p "The process has been completed, press Enter key to exit. Please run RetroDECK again to start the initial setup process."
|
||||
exit 1
|
||||
else
|
||||
read -p "The process has been cancelled, press Enter key to exit."
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
--test-upgrade*)
|
||||
echo "You are about to test upgrading RetroDECK from version $2 to $hard_version"
|
||||
read -p "Enter 'y' to continue, 'n' to start RetroDECK normally: " response
|
||||
if [[ $response == [yY] ]]; then
|
||||
version="$2"
|
||||
shift
|
||||
else
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Assume unknown arguments are game start arguments
|
||||
if [ -f "$i" ]; then
|
||||
log i "Attempting to start the game: $i"
|
||||
source /app/libexec/global.sh
|
||||
|
||||
# Process command-line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
# If the first argument is -e, -s, -m, or a valid file, attempt to launch the game
|
||||
if [ -f "$1" ] || [[ "$1" == "-e" || "$1" == "-s" || "$1" == "-m" ]]; then
|
||||
echo "$LOG_BUFFER"
|
||||
log i "Game start option detected: $1"
|
||||
run_game "$@"
|
||||
exit
|
||||
elif [[ "$i" == "-e" || "$i" == "-s" || "$i" == "-m" ]]; then
|
||||
log i "Game start option detected: $i"
|
||||
run_game "$@"
|
||||
exit
|
||||
else
|
||||
log i "Command or File '$i' not found. Ignoring argument and continuing..."
|
||||
break # Continue with the main program
|
||||
fi
|
||||
;;
|
||||
-*|--*)
|
||||
log i "Unknown option $i"
|
||||
show_cli_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
--show-config)
|
||||
echo ""
|
||||
cat "$rd_conf"
|
||||
exit 0
|
||||
;;
|
||||
--debug)
|
||||
logging_level="debug"
|
||||
shift
|
||||
;;
|
||||
--compress-one)
|
||||
cli_compress_single_game "$2"
|
||||
exit 0
|
||||
;;
|
||||
--compress-all)
|
||||
cli_compress_all_games "$2"
|
||||
shift 2
|
||||
;;
|
||||
--configurator)
|
||||
sh /app/tools/configurator.sh
|
||||
exit 0
|
||||
;;
|
||||
--reset)
|
||||
component="${@:2}"
|
||||
if [ -z "$component" ]; then
|
||||
echo "You are about to reset one or more RetroDECK components or emulators."
|
||||
echo -e "Available options are:\nall, $(prepare_component --list | tr ' ' ',' | sed 's/,/, /g')"
|
||||
read -p "Please enter the component you would like to reset: " component
|
||||
component=$(echo "$component" | tr '[:upper:]' '[:lower:]')
|
||||
fi
|
||||
log d "Resetting component: $component"
|
||||
prepare_component "reset" "$component"
|
||||
exit 0
|
||||
;;
|
||||
--factory-reset)
|
||||
prepare_component --factory-reset
|
||||
exit 0
|
||||
;;
|
||||
--test-upgrade)
|
||||
if [[ "$2" =~ ^.+ ]]; then
|
||||
echo "You are about to test upgrading RetroDECK from version $2 to $hard_version"
|
||||
read -p "Enter 'y' to continue, 'n' to start RetroDECK normally: " response
|
||||
if [[ $response == [yY] ]]; then
|
||||
version="$2"
|
||||
logging_level="debug" # Temporarily enable debug logging
|
||||
shift 2
|
||||
else
|
||||
shift
|
||||
fi
|
||||
else
|
||||
echo "Error: Invalid format. Usage: --test-upgrade <version>"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
--set)
|
||||
preset="$2"
|
||||
system="$3"
|
||||
value="$4"
|
||||
if [ "$preset" == "cheevos" ]; then
|
||||
echo "Error: The 'cheevos' preset is not yet supported via CLI. Please use the RetroDECK Configurator."
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$preset" ]; then
|
||||
echo "Error: No preset specified. Usage: --set <preset> <system/all> [value] (use --set-help for more information)"
|
||||
exit 1
|
||||
fi
|
||||
make_preset_changes "$preset" "$system" "$value"
|
||||
exit 0
|
||||
;;
|
||||
--open)
|
||||
open_component "${@:2}"
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
# Catch-all for unrecognized options starting with a dash
|
||||
log e "Error: Unknown option '$1'"
|
||||
echo "Error: Unrecognized option '$1'. Use -h or --help for usage information."
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
# If it reaches here and is an unrecognized argument, report the error
|
||||
log e "Error: Command or file '$1' not recognized."
|
||||
echo "Error: Command or file '$1' not recognized. Use -h or --help for usage information."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# if lockfile exists
|
||||
|
|
|
@ -124,12 +124,12 @@ This option lets you turn on or off automatic updates on launch.
|
|||
Various troubleshooting options.
|
||||
|
||||
|
||||
### Backup: RetroDECK Userdata
|
||||
### Backup Userdata
|
||||
Creates backups of the user data folders
|
||||
|
||||
|
||||
|
||||
### Check & Verify: Multi-file structure
|
||||
### Verify Multi-file Structure
|
||||
Verifies the structure of multi disc/file games that uses `.m3u` files.
|
||||
|
||||
|
||||
|
|
|
@ -28,12 +28,14 @@
|
|||
"cheevos": {
|
||||
"duckstation": false,
|
||||
"pcsx2": false,
|
||||
"retroarch": false
|
||||
"retroarch": false,
|
||||
"ppsspp": false
|
||||
},
|
||||
"cheevos_hardcore": {
|
||||
"duckstation": false,
|
||||
"pcsx2": false,
|
||||
"retroarch": false
|
||||
"retroarch": false,
|
||||
"ppsspp": false
|
||||
},
|
||||
"options": {
|
||||
"akai_ponzu": false,
|
||||
|
|
|
@ -6,7 +6,7 @@ func _ready():
|
|||
add_child(http_request)
|
||||
http_request.request_completed.connect(_on_request_completed)
|
||||
_connect_signals()
|
||||
#%backup_user_button.text += " - " + class_functions.rdhome + "/backup"
|
||||
#%backup_user_button.text += " - " + class_functions.rdhome + "/backups"
|
||||
|
||||
func _connect_signals() -> void:
|
||||
%check_conn_button.pressed.connect(check_internet_connection)
|
||||
|
@ -34,7 +34,7 @@ func _run_backup(button: Button) -> void:
|
|||
var parameters = ["backup_retrodeck_userdata"]
|
||||
var run_result = await class_functions.run_thread_command(class_functions.wrapper_command, parameters, true)
|
||||
if run_result["exit_code"] == 0:
|
||||
button.text = "Backup Complete - " + class_functions.rdhome + "/backup"
|
||||
button.text = "Backup Complete - " + class_functions.rdhome + "/backups"
|
||||
class_functions.logger("d","User Backup Completed")
|
||||
await class_functions.wait(3.0)
|
||||
button.text = original_txt
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
# TODO: is this function still needed?
|
||||
|
||||
# This wrapper will run a single RetroDECK function with any number of arguments
|
||||
# USAGE: /bin/bash retrodeck_function_wrapper.sh <function_name> <arg1> <arg2> ...
|
||||
|
||||
|
|