RetroDECK v0.6.3b

This commit is contained in:
XargonWan 2023-03-24 07:53:07 +00:00
commit e2f75251de
24 changed files with 1217 additions and 826 deletions

View file

@ -17,6 +17,7 @@ jobs:
runs-on: self-hosted
steps:
# Circumventing this bug: https://github.com/flatpak/flatpak-builder/issues/317
- name: Remove stuck mounts
run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/*
continue-on-error: true
@ -80,7 +81,8 @@ jobs:
artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz"
allowUpdates: true
#prerelease: true
draft: false
makeLatest: true
#draft: true
token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
repo: RetroDECK-cooker
continue-on-error: true

View file

@ -17,6 +17,7 @@ jobs:
runs-on: self-hosted
steps:
# Circumventing this bug: https://github.com/flatpak/flatpak-builder/issues/317
- name: Remove stuck mounts
run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/*
continue-on-error: true
@ -81,7 +82,8 @@ jobs:
bodyFile: "body.md"
artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz"
allowUpdates: true
prerelease: true
#prerelease: true
makeLatest: true
token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
repo: RetroDECK
continue-on-error: true

View file

@ -14,11 +14,11 @@ Theme = darkfusion
[Folders]
Bios = ~/retrodeck/roms/bios
Snapshots = ~/retrodeck/screenshots
Savestates = ~/retrodeck/states/ps2/pcsx2
MemoryCards = ~/retrodeck/saves/ps2/memcards
Logs = ~/retrodeck/.logs
Bios = RETRODECKHOMEDIR/roms/bios
Snapshots = RETRODECKHOMEDIR/screenshots
Savestates = RETRODECKHOMEDIR/states/ps2/pcsx2
MemoryCards = RETRODECKHOMEDIR/saves/ps2/memcards
Logs = RETRODECKHOMEDIR/.logs
Cheats = /var/config/PCSX2/cheats
CheatsWS = /var/config/PCSX2/cheats_ws
CheatsNI = cheats_ni

View file

@ -296,10 +296,10 @@ Multitap2_Slot4_Filename = Mcd-Multitap2-Slot04.ps2
[Folders]
Bios = ~/retrodeck/bios
Snapshots = ~/retrodeck/screenshots
SaveStates = ~/retrodeck/states/ps2/pcsx2
MemoryCards = ~/retrodeck/saves/ps2/pcsx2/memcards
Bios = RETRODECKHOMEDIR/bios
Snapshots = RETRODECKHOMEDIR/screenshots
SaveStates = RETRODECKHOMEDIR/states/ps2/pcsx2
MemoryCards = RETRODECKHOMEDIR/saves/ps2/pcsx2/memcards
Logs = logs
Cheats = cheats
CheatsWS = cheats_ws
@ -447,4 +447,4 @@ PressureModifier = 0.500000
[GameList]
RecursivePaths = ~/retrodeck/roms/ps2
RecursivePaths = RETRODECKHOMEDIR/roms/ps2

View file

@ -40,11 +40,11 @@ UseDefaultLangs=enabled
UseDefaultCheats=enabled
UseDefaultCheatsWS=enabled
UseDefaultTextures=enabled
Bios=~/retrodeck/roms/bios
Snapshots=~/retrodeck/screenshots
Savestates=~/retrodeck/states/ps2/pcsx2
MemoryCards=~/retrodeck/saves/ps2/memcards
Logs=~/retrodeck/.logs
Bios=RETRODECKHOMEDIR/roms/bios
Snapshots=RETRODECKHOMEDIR/screenshots
Savestates=RETRODECKHOMEDIR/states/ps2/pcsx2
MemoryCards=RETRODECKHOMEDIR/saves/ps2/memcards
Logs=RETRODECKHOMEDIR/.logs
Langs=/app/share/PCSX2/resources/locale
Cheats=/var/config/PCSX2/cheats
CheatsWS=/var/config/PCSX2/cheats_ws

View file

@ -1,10 +1,8 @@
[Audio]
audio_emulation=0
audio_emulation\default=true
enable_audio_stretching=true
enable_audio_stretching\default=true
enable_dsp_lle=false
enable_dsp_lle\default=true
enable_dsp_lle_multithread=false
enable_dsp_lle_multithread\default=true
mic_input_device=Default
mic_input_device\default=true
mic_input_type=0
@ -39,43 +37,43 @@ camera_outer_right_name\default=true
[Controls]
profile=0
profile\default=true
profiles\1\button_a="button:0,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_a="button:0,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_a\default=false
profiles\1\button_b="button:1,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_b="button:1,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_b\default=false
profiles\1\button_debug="code:79,engine:keyboard"
profiles\1\button_debug\default=true
profiles\1\button_down="direction:down,engine:sdl,guid:03000000de280000ff11000001000000,hat:0,port:0"
profiles\1\button_down="direction:down,engine:sdl,guid:030079f6de280000ff11000001000000,hat:0,port:0"
profiles\1\button_down\default=false
profiles\1\button_gpio14="code:80,engine:keyboard"
profiles\1\button_gpio14\default=true
profiles\1\button_home="button:8,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_home\default=false
profiles\1\button_l="button:4,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_home="code:66,engine:keyboard"
profiles\1\button_home\default=true
profiles\1\button_l="button:4,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_l\default=false
profiles\1\button_left="direction:left,engine:sdl,guid:03000000de280000ff11000001000000,hat:0,port:0"
profiles\1\button_left="direction:left,engine:sdl,guid:030079f6de280000ff11000001000000,hat:0,port:0"
profiles\1\button_left\default=false
profiles\1\button_r="button:5,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_r="button:5,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_r\default=false
profiles\1\button_right="direction:right,engine:sdl,guid:03000000de280000ff11000001000000,hat:0,port:0"
profiles\1\button_right="direction:right,engine:sdl,guid:030079f6de280000ff11000001000000,hat:0,port:0"
profiles\1\button_right\default=false
profiles\1\button_select="button:6,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_select="button:6,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_select\default=false
profiles\1\button_start="button:7,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_start="button:7,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_start\default=false
profiles\1\button_up="direction:up,engine:sdl,guid:03000000de280000ff11000001000000,hat:0,port:0"
profiles\1\button_up="direction:up,engine:sdl,guid:030079f6de280000ff11000001000000,hat:0,port:0"
profiles\1\button_up\default=false
profiles\1\button_x="button:2,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_x="button:2,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_x\default=false
profiles\1\button_y="button:3,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\button_y="button:3,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\button_y\default=false
profiles\1\button_zl="axis:3,direction:-,engine:sdl,guid:03000000de280000ff11000001000000,port:0,threshold:-0.5"
profiles\1\button_zl="axis:2,direction:+,engine:sdl,guid:030079f6de280000ff11000001000000,port:0,threshold:0.5"
profiles\1\button_zl\default=false
profiles\1\button_zr="axis:5,direction:+,engine:sdl,guid:03000000de280000ff11000001000000,port:0,threshold:0.5"
profiles\1\button_zr="axis:5,direction:+,engine:sdl,guid:030079f6de280000ff11000001000000,port:0,threshold:0.5"
profiles\1\button_zr\default=false
profiles\1\c_stick="axis_x:3,axis_y:4,deadzone:0.100000,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\c_stick="axis_x:3,axis_y:4,deadzone:0.100000,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\c_stick\default=false
profiles\1\circle_pad="axis_x:0,axis_y:1,deadzone:0.100000,engine:sdl,guid:03000000de280000ff11000001000000,port:0"
profiles\1\circle_pad="axis_x:0,axis_y:1,deadzone:0.100000,engine:sdl,guid:030079f6de280000ff11000001000000,port:0"
profiles\1\circle_pad\default=false
profiles\1\motion_device="engine:motion_emu,update_period:100,sensitivity:0.01,tilt_clamp:90.0"
profiles\1\motion_device\default=true
@ -106,10 +104,12 @@ use_cpu_jit=true
use_cpu_jit\default=true
[Data%20Storage]
nand_directory=~/retrodeck/saves/n3ds/citra/nand/
nand_directory=RETRODECKHOMEDIR/saves/n3ds/citra/nand/
nand_directory\default=false
sdmc_directory=~/retrodeck/saves/n3ds/citra/sdmc/
sdmc_directory=RETRODECKHOMEDIR/saves/n3ds/citra/sdmc/
sdmc_directory\default=false
use_custom_storage=true
use_custom_storage\default=false
use_virtual_sd=true
use_virtual_sd\default=true
@ -178,6 +178,8 @@ LLE\NWM=false
LLE\NWM\default=true
LLE\PDN=false
LLE\PDN\default=true
LLE\PLGLDR=false
LLE\PLGLDR\default=true
LLE\PM=false
LLE\PM\default=true
LLE\PS=false
@ -194,36 +196,43 @@ LLE\SPI=false
LLE\SPI\default=true
LLE\SSL=false
LLE\SSL\default=true
gdbstub_port=24689
gdbstub_port=@Variant(\0\0\0\x85`q)
gdbstub_port\default=true
record_frame_times=false
use_gdbstub=false
use_gdbstub\default=true
[Layout]
custom_bottom_bottom=480
custom_bottom_bottom=@Variant(\0\0\0\x85\x1\xe0)
custom_bottom_bottom\default=true
custom_bottom_left=40
custom_bottom_left=@Variant(\0\0\0\x85\0()
custom_bottom_left\default=true
custom_bottom_right=360
custom_bottom_right=@Variant(\0\0\0\x85\x1h)
custom_bottom_right\default=true
custom_bottom_top=240
custom_bottom_top=@Variant(\0\0\0\x85\0\xf0)
custom_bottom_top\default=true
custom_layout=false
custom_layout\default=true
custom_top_bottom=240
custom_second_layer_opacity=@Variant(\0\0\0\x85\0\x64)
custom_second_layer_opacity\default=true
custom_top_bottom=@Variant(\0\0\0\x85\0\xf0)
custom_top_bottom\default=true
custom_top_left=0
custom_top_left=@Variant(\0\0\0\x85\0\0)
custom_top_left\default=true
custom_top_right=400
custom_top_right=@Variant(\0\0\0\x85\x1\x90)
custom_top_right\default=true
custom_top_top=0
custom_top_top=@Variant(\0\0\0\x85\0\0)
custom_top_top\default=true
factor_3d=0
factor_3d\default=true
filter_mode=true
filter_mode\default=true
large_screen_proportion=@Variant(\0\0\0\x87@\x80\0\0)
large_screen_proportion\default=true
layout_option=0
layout_option\default=true
mono_render_option=0
mono_render_option\default=true
pp_shader_name=none (builtin)
pp_shader_name\default=true
render_3d=0
@ -244,20 +253,16 @@ bg_green=0
bg_green\default=true
bg_red=0
bg_red\default=true
frame_limit=100
frame_limit=@Variant(\0\0\0\x85\0\x64)
frame_limit\default=true
frame_limit_alternate=200
frame_limit_alternate\default=true
resolution_factor=1
resolution_factor=@Variant(\0\0\0\x85\0\x1)
resolution_factor\default=true
shaders_accurate_mul=true
shaders_accurate_mul\default=true
texture_filter_name=none
texture_filter_name\default=true
texture_filter_name=Linear (Default)
texture_filter_name\default=false
use_disk_shader_cache=true
use_disk_shader_cache\default=true
use_frame_limit_alternate=false
use_frame_limit_alternate\default=true
use_hw_renderer=true
use_hw_renderer\default=true
use_hw_shader=true
@ -268,12 +273,18 @@ use_vsync_new=true
use_vsync_new\default=true
[System]
allow_plugin_loader=true
allow_plugin_loader\default=true
init_clock=0
init_clock\default=true
init_time=946681277
init_time=@Variant(\0\0\0\x84\0\0\0\0\x38m5\xbd)
init_time\default=true
init_time_offset=@Variant(\0\0\0\x81\0\0\0\0\0\0\0\0)
init_time_offset\default=true
is_new_3ds=true
is_new_3ds\default=true
plugin_loader=false
plugin_loader\default=true
region_value=-1
region_value\default=true
@ -324,22 +335,23 @@ Paths\gamedirs\3\deep_scan=false
Paths\gamedirs\3\deep_scan\default=true
Paths\gamedirs\3\expanded=true
Paths\gamedirs\3\expanded\default=true
Paths\gamedirs\3\path=/home/deck/retrodeck/roms/n3ds
Paths\gamedirs\3\path=RETRODECKHOMEDIR/roms/n3ds
Paths\gamedirs\size=3
Paths\language=en
Paths\language\default=false
Paths\moviePlaybackPath=
Paths\movieRecordPath=
Paths\recentFiles=
Paths\romsPath=/home/deck/retrodeck/roms/n3ds
Paths\screenshotPath=
Paths\recentFiles=@Invalid()
Paths\romsPath=
Paths\screenshotPath=RETRODECKHOMEDIR/screenshots
Paths\screenshotPath\default=false
Paths\symbolsPath=
Paths\videoDumpingPath=
Shortcuts\Main%20Window\Advance%20Frame\Context=2
Shortcuts\Main%20Window\Advance%20Frame\Context\default=true
Shortcuts\Main%20Window\Advance%20Frame\KeySeq=\\
Shortcuts\Main%20Window\Advance%20Frame\Context=1
Shortcuts\Main%20Window\Advance%20Frame\Context\default=false
Shortcuts\Main%20Window\Advance%20Frame\KeySeq=
Shortcuts\Main%20Window\Advance%20Frame\KeySeq\default=true
Shortcuts\Main%20Window\Capture%20Screenshot\Context=2
Shortcuts\Main%20Window\Capture%20Screenshot\Context=3
Shortcuts\Main%20Window\Capture%20Screenshot\Context\default=true
Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+P
Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=true
@ -347,31 +359,39 @@ Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1
Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true
Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=F4
Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=true
Shortcuts\Main%20Window\Decrease%203D%20Factor\Context=2
Shortcuts\Main%20Window\Decrease%203D%20Factor\Context\default=true
Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq=Ctrl+-
Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq\default=true
Shortcuts\Main%20Window\Decrease%20Speed%20Limit\Context=2
Shortcuts\Main%20Window\Decrease%20Speed%20Limit\Context\default=true
Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq=-
Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq\default=true
Shortcuts\Main%20Window\Exit%20Citra\Context=1
Shortcuts\Main%20Window\Exit%20Citra\Context\default=true
Shortcuts\Main%20Window\Exit%20Citra\KeySeq=T
Shortcuts\Main%20Window\Exit%20Citra\KeySeq\default=false
Shortcuts\Main%20Window\Exit%20Citra\KeySeq=Ctrl+Q
Shortcuts\Main%20Window\Exit%20Citra\KeySeq\default=true
Shortcuts\Main%20Window\Exit%20Fullscreen\Context=1
Shortcuts\Main%20Window\Exit%20Fullscreen\Context\default=true
Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Esc
Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=true
Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Y
Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=false
Shortcuts\Main%20Window\Fullscreen\Context=1
Shortcuts\Main%20Window\Fullscreen\Context\default=true
Shortcuts\Main%20Window\Fullscreen\KeySeq=F11
Shortcuts\Main%20Window\Fullscreen\KeySeq\default=true
Shortcuts\Main%20Window\Increase%203D%20Factor\Context=2
Shortcuts\Main%20Window\Increase%203D%20Factor\Context\default=true
Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq=Ctrl++
Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq\default=true
Shortcuts\Main%20Window\Increase%20Speed%20Limit\Context=2
Shortcuts\Main%20Window\Increase%20Speed%20Limit\Context\default=true
Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq=+
Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq\default=true
Shortcuts\Main%20Window\Load%20Amiibo\Context=2
Shortcuts\Main%20Window\Load%20Amiibo\Context=3
Shortcuts\Main%20Window\Load%20Amiibo\Context\default=true
Shortcuts\Main%20Window\Load%20Amiibo\KeySeq=F2
Shortcuts\Main%20Window\Load%20Amiibo\KeySeq\default=true
Shortcuts\Main%20Window\Load%20File\Context=1
Shortcuts\Main%20Window\Load%20File\Context=3
Shortcuts\Main%20Window\Load%20File\Context\default=true
Shortcuts\Main%20Window\Load%20File\KeySeq=Ctrl+O
Shortcuts\Main%20Window\Load%20File\KeySeq\default=true
@ -379,6 +399,10 @@ Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\Context=1
Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\Context\default=true
Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\KeySeq=R
Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\KeySeq\default=false
Shortcuts\Main%20Window\Mute%20Audio\Context=1
Shortcuts\Main%20Window\Mute%20Audio\Context\default=true
Shortcuts\Main%20Window\Mute%20Audio\KeySeq=Ctrl+M
Shortcuts\Main%20Window\Mute%20Audio\KeySeq\default=true
Shortcuts\Main%20Window\Remove%20Amiibo\Context=2
Shortcuts\Main%20Window\Remove%20Amiibo\Context\default=true
Shortcuts\Main%20Window\Remove%20Amiibo\KeySeq=F3
@ -401,20 +425,24 @@ Shortcuts\Main%20Window\Stop%20Emulation\KeySeq=F5
Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=true
Shortcuts\Main%20Window\Swap%20Screens\Context=1
Shortcuts\Main%20Window\Swap%20Screens\Context\default=true
Shortcuts\Main%20Window\Swap%20Screens\KeySeq=Y
Shortcuts\Main%20Window\Swap%20Screens\KeySeq=T
Shortcuts\Main%20Window\Swap%20Screens\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Alternate%20Speed\Context=2
Shortcuts\Main%20Window\Toggle%20Alternate%20Speed\Context\default=true
Shortcuts\Main%20Window\Toggle%20Alternate%20Speed\KeySeq=Ctrl+Z
Shortcuts\Main%20Window\Toggle%20Alternate%20Speed\KeySeq\default=true
Shortcuts\Main%20Window\Toggle%203D\Context=2
Shortcuts\Main%20Window\Toggle%203D\Context\default=true
Shortcuts\Main%20Window\Toggle%203D\KeySeq=Ctrl+3
Shortcuts\Main%20Window\Toggle%203D\KeySeq\default=true
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context=1
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=true
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=false
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=Ctrl+F
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=true
Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context=2
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context\default=true
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context\default=false
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq=Ctrl+A
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq\default=true
Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context=2
Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context\default=true
Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\KeySeq=Ctrl+Z
Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\KeySeq\default=false
Shortcuts\Main%20Window\Toggle%20Screen%20Layout\Context=1
Shortcuts\Main%20Window\Toggle%20Screen%20Layout\Context\default=true
Shortcuts\Main%20Window\Toggle%20Screen%20Layout\KeySeq=F10
@ -423,17 +451,17 @@ Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context=1
Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context\default=true
Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq=Ctrl+S
Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=true
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context=2
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context\default=true
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\KeySeq=Ctrl+D
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context=1
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context\default=false
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\KeySeq=
Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\KeySeq\default=true
UILayout\gameListHeaderState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\x5\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x4\x9c\0\0\0\x5\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x5\0\0\x2\x80\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\xf0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64)
UILayout\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xd6\0\0\0\x97\0\0\x4*\0\0\x2\x43\0\0\0\xd6\0\0\0\xb4\0\0\x4*\0\0\x2\x43\0\0\0\0\0\0\0\0\x5\0\0\0\0\xd6\0\0\0\xb4\0\0\x4*\0\0\x2\x43)
UILayout\geometryRenderWindow=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x1\x8f\0\0\x1\xf3\0\0\0\0\0\0\0\x14\0\0\x1\x8f\0\0\x1\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x1\x8f\0\0\x1\xf3)
UILayout\microProfileDialogGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k)
UILayout\gameListHeaderState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\x5\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x4 \0\0\0\x5\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x5\0\0\x2\x80\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0t\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64)
UILayout\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\x1f\0\0\x1\x8f\0\0\0\0\0\0\0\0\0\0\x4\x1f\0\0\x1\x8f\0\0\0\0\0\0\0\0\x4\xfd\0\0\0\0\0\0\0\0\0\0\x4\x1f\0\0\x1\x8f)
UILayout\geometryRenderWindow=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x4\xfd\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
UILayout\microProfileDialogGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k\0\0\0\0\0\0\0\0\x4\xfd\0\0\0\0\0\0\0\x14\0\0\x3\xe7\0\0\x2k)
UILayout\microProfileDialogVisible=false
UILayout\microProfileDialogVisible\default=true
UILayout\state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\0\0\0\0\0\0\0\0\0\xfc\x2\0\0\0\x1\xfb\0\0\0\x1c\0W\0\x61\0i\0t\0T\0r\0\x65\0\x65\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x62\x1\0\0\x3\0\0\0\x1\0\0\0\0\0\0\0\0\xfc\x2\0\0\0\b\xfb\0\0\0\x18\0\x41\0R\0M\0R\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0n\x1\0\0\x3\xfb\0\0\0 \0G\0r\0\x61\0p\0h\0i\0\x63\0s\0\x44\0\x65\0\x62\0u\0g\0g\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x62\x1\0\0\x3\xfb\0\0\0\"\0P\0i\0\x63\0\x61\0 \0\x43\0o\0m\0m\0\x61\0n\0\x64\0 \0L\0i\0s\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x94\x1\0\0\x3\xfb\0\0\0*\0P\0i\0\x63\0\x61\0\x42\0r\0\x65\0\x61\0k\0P\0o\0i\0n\0t\0s\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x94\x1\0\0\x3\xfb\0\0\0 \0P\0i\0\x63\0\x61\0V\0\x65\0r\0t\0\x65\0x\0S\0h\0\x61\0\x64\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\xd2\x1\0\0\x3\xfb\0\0\0\x12\0\x43\0i\0T\0r\0\x61\0\x63\0i\0n\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0N\x1\0\0\x3\xfb\0\0\0.\0L\0L\0\x45\0S\0\x65\0r\0v\0i\0\x63\0\x65\0M\0o\0\x64\0u\0l\0\x65\0s\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x62\x1\0\0\x3\xfb\0\0\0\x16\0I\0P\0\x43\0R\0\x65\0\x63\0o\0r\0\x64\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xd3\x1\0\0\x3\0\0\x3U\0\0\x1Q\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0)
UILayout\state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\0\0\0\0\0\0\0\0\0\xfc\x2\0\0\0\x1\xfb\0\0\0\x1c\0W\0\x61\0i\0t\0T\0r\0\x65\0\x65\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0V\0\xff\xff\xff\0\0\0\x1\0\0\0\0\0\0\0\0\xfc\x2\0\0\0\b\xfb\0\0\0\x18\0\x41\0R\0M\0R\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0h\0\xff\xff\xff\xfb\0\0\0 \0G\0r\0\x61\0p\0h\0i\0\x63\0s\0\x44\0\x65\0\x62\0u\0g\0g\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0V\0\xff\xff\xff\xfb\0\0\0\"\0P\0i\0\x63\0\x61\0 \0\x43\0o\0m\0m\0\x61\0n\0\x64\0 \0L\0i\0s\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x87\0\xff\xff\xff\xfb\0\0\0*\0P\0i\0\x63\0\x61\0\x42\0r\0\x65\0\x61\0k\0P\0o\0i\0n\0t\0s\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x87\0\xff\xff\xff\xfb\0\0\0 \0P\0i\0\x63\0\x61\0V\0\x65\0r\0t\0\x65\0x\0S\0h\0\x61\0\x64\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\xaa\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0i\0T\0r\0\x61\0\x63\0i\0n\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x41\0\xff\xff\xff\xfb\0\0\0.\0L\0L\0\x45\0S\0\x65\0r\0v\0i\0\x63\0\x65\0M\0o\0\x64\0u\0l\0\x65\0s\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0V\0\xff\xff\xff\xfb\0\0\0\x16\0I\0P\0\x43\0R\0\x65\0\x63\0o\0r\0\x64\0\x65\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xc3\0\xff\xff\xff\0\0\x4 \0\0\x1^\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0)
Updater\check_for_update_on_start=true
Updater\check_for_update_on_start\default=true
Updater\update_on_close=false
@ -448,13 +476,13 @@ enable_discord_presence=true
enable_discord_presence\default=true
firstStart=false
firstStart\default=false
fullscreen=true
fullscreen=false
fullscreen\default=true
hideInactiveMouse=false
hideInactiveMouse\default=true
pauseWhenInBackground=true
pauseWhenInBackground=false
pauseWhenInBackground\default=true
screenshot_resolution_factor=0
screenshot_resolution_factor=@Variant(\0\0\0\x85\0\0)
screenshot_resolution_factor\default=true
showConsole=false
showConsole\default=true
@ -494,8 +522,8 @@ video_encoder_options\default=true
[WebService]
citra_token=
citra_username=
citra_username=RetroDECK
enable_telemetry=false
enable_telemetry\default=false
web_api_url=https://api.citra-emu.org
web_api_url\default=true
web_api_url\default=true

View file

@ -0,0 +1,38 @@
[chd]
dreamcast
psx
ps2
[chd-maybe]
3do
amiga
amiga1200
amiga600
amigacd32
cdimono1
cdtv
dreamcast
gamegear
genesis
mame-advmame
mame-mame4all
mastersystem
megacd
megacdjp
megadrive
mess
neogeo
neogeocd
neogeocdjp
pcengine
pcenginecd
pcfx
ps2
psx
saturn
saturnjp
segacd
sg-1000
supergrafx
tg16
tg-cd
[zip]

View file

@ -24,19 +24,19 @@ DSPHLE = True
Fullscreen = True
DisableScreenSaver = True
[GBA]
BIOS = ~/retrodeck/bios
BIOS = RETRODECKHOMEDIR/bios
Rom1 =
Rom2 =
Rom3 =
Rom4 =
SavesInRomPath = False
SavesPath = ~/retrodeck/saves/gba
SavesPath = RETRODECKHOMEDIR/saves/gba
Threads = True
[General]
ISOPath0 = ~/retrodeck/roms/wii
ISOPath1 = ~/retrodeck/roms/gc
ISOPath0 = RETRODECKHOMEDIR/roms/wii
ISOPath1 = RETRODECKHOMEDIR/roms/gc
ISOPaths = 2
WiiSDCardPath = ~/retrodeck/saves/wii/dolphin/sd.raw
WiiSDCardPath = RETRODECKHOMEDIR/saves/wii/dolphin/sd.raw
WirelessMac = 00:17:ab:83:9b:d4
HotkeysRequireFocus = True
RecursiveISOPaths = True

View file

@ -75,9 +75,9 @@ JIT_BranchOptimisations=1
JIT_LiteralOptimisations=1
JIT_FastMemory=1
ExternalBIOSEnable=1
BIOS9Path=~/retrodeck/bios/bios9.bin
BIOS7Path=~/retrodeck/bios/bios7.bin
FirmwarePath=~/retrodeck/bios/firmware.bin
BIOS9Path=RETRODECKHOMEDIR/bios/bios9.bin
BIOS7Path=RETRODECKHOMEDIR/bios/bios7.bin
FirmwarePath=RETRODECKHOMEDIR/bios/firmware.bin
DSiBIOS9Path=
DSiBIOS7Path=
DSiFirmwarePath=
@ -123,8 +123,8 @@ RecentROM_6=
RecentROM_7=
RecentROM_8=
RecentROM_9=
SaveFilePath=~/retrodeck/saves/nds/melonds
SavestatePath=~/retrodeck/states/nds/melonds
SaveFilePath=RETRODECKHOMEDIR/saves/nds/melonds
SavestatePath=RETRODECKHOMEDIR/states/nds/melonds
CheatFilePath=
EnableCheats=0
MouseHide=0

View file

@ -3036,12 +3036,12 @@ run_ahead_hide_warnings = "false"
run_ahead_secondary_instance = "true"
runtime_log_directory = "default"
save_file_compression = "false"
savefile_directory = "~/retrodeck/saves"
savefile_directory = "RETRODECKHOMEDIR/saves"
savefiles_in_content_dir = "false"
savestate_auto_index = "false"
savestate_auto_load = "true"
savestate_auto_save = "true"
savestate_directory = "~/retrodeck/states"
savestate_directory = "RETRODECKHOMEDIR/states"
savestate_file_compression = "true"
savestate_max_keep = "0"
savestate_thumbnail_enable = "false"
@ -3049,7 +3049,7 @@ savestates_in_content_dir = "false"
scan_without_core_match = "false"
screen_brightness = "100"
screen_orientation = "0"
screenshot_directory = "~/retrodeck/screenshots"
screenshot_directory = "RETRODECKHOMEDIR/screenshots"
screenshots_in_content_dir = "false"
settings_show_accessibility = "true"
settings_show_achievements = "true"

File diff suppressed because it is too large Load diff

View file

@ -327,18 +327,6 @@
<entry>~/bin/pcsx2*-Qt.AppImage</entry>
</rule>
</emulator>
<emulator name="PCSX2-LEGACY">
<!-- Sony PlayStation 2 emulator PCSX2 (legacy) -->
<rule type="systempath">
<entry>PCSX2</entry>
<entry>pcsx2</entry>
<entry>net.pcsx2.PCSX2</entry>
</rule>
<rule type="staticpath">
<entry>/var/lib/flatpak/exports/bin/net.pcsx2.PCSX2</entry>
<entry>~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2</entry>
</rule>
</emulator>
<emulator name="PICO-8">
<!-- PICO-8 Fantasy Console (game engine) -->
<rule type="systempath">

View file

@ -1071,7 +1071,6 @@
<command label="PCSX2 (Standalone)">%EMULATOR_PCSX2% -batch %ROM%</command>
<extension>.bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG</extension>
<command label="PCSX2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM%</command>
<!-- <command label="PCSX2 Legacy (Standalone)">%EMULATOR_PCSX2-LEGACY% -REMOVEME-nogui %ROM%</command> -->
<!-- <command label="Play! (Standalone)">%EMULATOR_PLAY!% &#45;&#45;disc %ROM%</command> -->
<platform>ps2</platform>
<theme>ps2</theme>
@ -1614,10 +1613,10 @@
<system>
<name>tools</name>
<fullname>RetroDECK Tools</fullname>
<path>/var/config/retrodeck/tools</path>
<path>/app/tools</path>
<extension>.sh .SH</extension>
<command>bash %ROM%</command>
<platform>tools</platform>
<theme>tools</theme>
</system>
</systemList>
</systemList>

View file

@ -7,4 +7,4 @@
<nogamecount>true</nogamecount>
<nomultiscrape>true</nomultiscrape>
</game>
</gameList>
</gameList>

View file

@ -47,14 +47,14 @@ file_browse() {
while [ $file_selected == false ]
do
local target="$(zenity --file-selection --title="Choose $1")"
if [ ! -z $target ] #yes
if [ ! -z "$target" ] #yes
then
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="File $target chosen, is this correct?"
if [ $? == 0 ]
then
file_selected=true
echo $target
echo "$target"
break
fi
else
@ -73,9 +73,9 @@ verify_space() {
# USAGE: verify_space $source_dir $dest_dir
# Function returns "true" if there is enough space, "false" if there is not
source_size=$(du -sk $1 | awk '{print $1}')
source_size=$(du -sk "$1" | awk '{print $1}')
source_size=$((source_size+(source_size/10))) # Add 10% to source size for safety
dest_avail=$(df -k --output=avail $2 | tail -1)
dest_avail=$(df -k --output=avail "$2" | tail -1)
if [[ $source_size -ge $dest_avail ]]; then
echo "false"
@ -88,13 +88,13 @@ move() {
# Function to move a directory from one parent to another
# USAGE: move $source_dir $dest_dir
if [[ ! -d "$2/$(basename $1)" ]]; then
if [[ $(verify_space $1 $2) ]]; then
if [[ ! -d "$2/$(basename "$1")" ]]; then
if [[ $(verify_space "$1" "$2") ]]; then
(
if [[ ! -d $2 ]]; then # Create destination directory if it doesn't already exist
mkdir -pv $2
if [[ ! -d "$2" ]]; then # Create destination directory if it doesn't already exist
mkdir -pv "$2"
fi
mv -v -t $2 $1
mv -v -t "$2" "$1"
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
@ -121,49 +121,98 @@ compress_to_chd () {
# USAGE: compress_to_chd $full_path_to_input_file $full_path_to_output_file
echo "Compressing file $1 to $2.chd"
/app/bin/chdman createcd -i $1 -o $2.chd
/app/bin/chdman createcd -i "$1" -o "$2".chd
}
validate_for_chd () {
# Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY
# USAGE: validate_for_chd $input_file
local file=$1
current_run_log_file="chd_compression_"$(date +"%Y_%m_%d_%I_%M_%p").log""
echo "Validating file:" $file > "$logs_folder/$current_run_log_file"
if [[ "$file" == *".cue" ]] || [[ "$file" == *".gdi" ]] || [[ "$file" == *".iso" ]]; then
echo ".cue/.iso/.gdi file detected" >> $logs_folder/$current_run_log_file
local file_path=$(dirname $(realpath $file))
local file_base_name=$(basename $file)
local file="$1"
local normalized_filename=$(echo "$file" | tr '[:upper:]' '[:lower:]')
local file_validated="false"
current_run_log_file="chd_compression_$(basename "$file").log"
echo "Validating file:" "$file" > "$logs_folder/$current_run_log_file"
if [[ "$normalized_filename" == *".cue" ]] || [[ "$normalized_filename" == *".gdi" ]] || [[ "$normalized_filename" == *".iso" ]]; then
echo ".cue/.iso/.gdi file detected" >> "$logs_folder/$current_run_log_file"
local file_path=$(dirname "$(realpath "$file")")
local file_base_name=$(basename "$file")
local file_name=${file_base_name%.*}
echo "File base path:" $file_path >> "$logs_folder/$current_run_log_file"
echo "File base name:" $file_name >> "$logs_folder/$current_run_log_file"
if [[ "$file" == *".cue" ]]; then # Validate .cue file
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" $file)
local cue_validated="false"
for line in $cue_bin_files
if [[ "$normalized_filename" == *".cue" ]]; then # Validate .cue file
echo "Validating .cue associated .bin files" >> "$logs_folder/$current_run_log_file"
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
echo "Associated bin files read:" >> "$logs_folder/$current_run_log_file"
printf '%s\n' "$cue_bin_files" >> "$logs_folder/$current_run_log_file"
while IFS= read -r line
do
echo "looking for $file_path/$line" >> "$logs_folder/$current_run_log_file"
if [[ -f "$file_path/$line" ]]; then
echo ".bin file found at $file_path/$line" >> "$logs_folder/$current_run_log_file"
cue_validated="true"
file_validated="true"
else
echo ".bin file NOT found at $file_path/$line" >> "$logs_folder/$current_run_log_file"
echo ".cue file could not be validated. Please verify your .cue file contains the correct corresponding .bin file information and retry." >> "$logs_folder/$current_run_log_file"
cue_validated="false"
file_validated="false"
break
fi
done
if [[ $cue_validated == "true" ]]; then
echo $cue_validated
done < <(printf '%s\n' "$cue_bin_files")
if [[ $file_validated == "true" ]]; then
echo $file_validated
fi
else
echo $cue_validated
else # If file is a .iso or .gdi
file_validated="true"
echo $file_validated
fi
else
echo "File type not recognized. Supported file types are .cue, .gdi and .iso" >> "$logs_folder/$current_run_log_file"
fi
}
cli_compress_file() {
# This function will compress a single file passed from the CLI arguments
# USAGE: cli_compress_file $full_file_path
local file="$1"
echo "Looking for" "$file"
current_run_log_file="chd_compression_$(basename "$file").log"
if [[ ! -z "$file" ]]; then
if [[ -f "$file" ]]; then
if [[ $(validate_for_chd "$file") == "true" ]]; then
read -p "RetroDECK will now attempt to compress your selected game. Press Enter key to continue..."
read -p "Do you want to have the original file removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup
local filename_no_path=$(basename "$file")
local filename_no_extension="${filename_no_path%.*}"
local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file")
local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension"
echo "Compressing $filename_no_path"
compress_to_chd "$source_file" "$dest_file"
if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do # Remove associated .bin files
echo "Removing file "$line""
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file
echo "Removing file "$filename_no_path""
rm -f $(realpath "$file")
else
echo "Removing file "$filename_no_path""
rm -f $(realpath "$file")
fi
fi
else
printf "An error occured during the compression process. Please see the following log entries for details:\n\n"
cat "$logs_folder/$current_run_log_file"
fi
else
echo "File not found, please specify the full path to the file to be compressed."
fi
else
echo "Please use this command format \"--compress <cue/gdi/iso file to compress>\""
fi
}
desktop_mode_warning() {
# This function is a generic warning for issues that happen when running in desktop mode.
# Running in desktop mode can be verified with the following command: if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then
@ -581,7 +630,6 @@ update_rd_conf() {
deploy_single_patch $rd_defaults $rd_update_patch $rd_conf
set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
rm -f $rd_update_patch # Cleanup temporary patch file
source $rd_conf # Load new config file variables
}
conf_write() {
@ -658,6 +706,13 @@ dir_prep() {
echo -e "\n[DIR PREP]\nMoving $symlink in $real" #DEBUG
# if the symlink dir is already a symlink, unlink it first, to prevent recursion
if [ -L "$symlink" ];
then
echo "$symlink is already a symlink, unlinking to prevent recursives" #DEBUG
unlink "$symlink"
fi
# if the dest dir exists we want to backup it
if [ -d "$symlink" ];
then
@ -668,6 +723,7 @@ dir_prep() {
# if the real dir is already a symlink, unlink it first
if [ -L "$real" ];
then
echo "$real is already a symlink, unlinking to prevent recursives" #DEBUG
unlink "$real"
fi
@ -716,7 +772,7 @@ yuzu_init() {
rm -rf /var/config/yuzu
mkdir -pv /var/config/yuzu/
cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/yuzu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
dir_prep "$rdhome/screenshots" "/var/data/yuzu/screenshots"
}
@ -728,12 +784,12 @@ dolphin_init() {
rm -rf /var/config/dolphin-emu
mkdir -pv /var/config/dolphin-emu/
cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini
dir_prep "$rdhome/saves/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR"
dir_prep "$rdhome/saves/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA"
dir_prep "$rdhome/saves/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP"
dir_prep "$rdhome/screenshots" "/var/data/dolphin-emu/ScreenShots"
dir_prep "$rdhome/states" "/var/data/dolphin-emu/StateSaves"
dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
mkdir -pv /var/data/dolphin-emu/Wii/
dir_prep "$rdhome/saves/wii/dolphin" "/var/data/dolphin-emu/Wii"
}
@ -746,12 +802,12 @@ primehack_init() {
rm -rf /var/config/primehack
mkdir -pv /var/config/primehack/
cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/primehack/Dolphin.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/primehack/Dolphin.ini
dir_prep "$rdhome/saves/gc/primehack/EUR" "/var/data/primehack/GC/EUR"
dir_prep "$rdhome/saves/gc/primehack/USA" "/var/data/primehack/GC/USA"
dir_prep "$rdhome/saves/gc/primehack/JAP" "/var/data/primehack/GC/JAP"
dir_prep "$rdhome/screenshots" "/var/data/primehack/ScreenShots"
dir_prep "$rdhome/states" "/var/data/primehack/StateSaves"
dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
mkdir -pv /var/data/primehack/Wii/
dir_prep "$rdhome/saves/wii/primehack" "/var/data/primehack/Wii"
}
@ -766,8 +822,8 @@ pcsx2_init() {
mkdir -pv "$rdhome/saves/ps2/pcsx2/memcards"
mkdir -pv "$rdhome/states/ps2/pcsx2"
cp -fvr $emuconfigs/PCSX2/* /var/config/PCSX2/inis/
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini
#dir_prep "$rdhome/states/ps2/pcsx2" "/var/config/PCSX2/sstates"
#dir_prep "$rdhome/screenshots" "/var/config/PCSX2/snaps"
#dir_prep "$rdhome/.logs" "/var/config/PCSX2/logs"
@ -785,8 +841,7 @@ melonds_init() {
mkdir -pv "$rdhome/states/nds/melonds"
dir_prep "$rdhome/bios" "/var/config/melonDS/bios"
cp -fvr $emuconfigs/melonDS.ini /var/config/melonDS/
# Replace ~/retrodeck with $rdhome as ~ cannot be understood by MelonDS
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/melonDS/melonDS.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/melonDS/melonDS.ini
}
citra_init() {
@ -800,11 +855,8 @@ citra_init() {
mkdir -pv "$rdhome/saves/n3ds/citra/sdmc/"
dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata"
dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log"
cp -fv $emuconfigs/citra-qt-config.ini /var/config/citra-emu/qt-config.ini
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
#TODO: do the same with roms folders after new variables is pushed (check even the others qt-emu)
#But actually everything is always symlinked to retrodeck/roms so it might be not needed
#sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
}
rpcs3_init() {
@ -825,9 +877,10 @@ xemu_init() {
mkdir -pv $rdhome/saves/xbox/xemu/
# removing config directory to wipe legacy files
rm -rf /var/config/xemu
mkdir -pv /var/data/xemu/
cp -fv $emuconfigs/xemu.toml /var/data/xemu/xemu.toml
sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/data/xemu/xemu.toml
rm -rf /var/data/xemu
dir_prep "/var/config/xemu" "/var/data/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look
cp -fv $emuconfigs/xemu.toml /var/config/xemu/xemu.toml
sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/xemu/xemu.toml
# Preparing HD dummy Image if the image is not found
if [ ! -f $rdhome/bios/xbox_hdd.qcow2 ]
then
@ -908,7 +961,7 @@ ra_init() {
mkdir -pv /var/config/retroarch/config/
cp -rf $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config
#rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
# PPSSPP
echo "--------------------------------"
@ -989,15 +1042,6 @@ cli_emulator_reset() {
esac
}
tools_init() {
rm -rfv /var/config/retrodeck/tools/
mkdir -pv /var/config/retrodeck/tools/
cp -rfv /app/retrodeck/tools/* /var/config/retrodeck/tools/
mkdir -pv /var/config/emulationstation/.emulationstation/custom_systems/tools/
rm -rfv /var/config/retrodeck/tools/gamelist.xml
cp -fv /app/retrodeck/tools-gamelist.xml /var/config/retrodeck/tools/gamelist.xml
}
emulators_post_move() {
# This script will redo the symlinks for all emulators after moving the $rdhome location without resetting other options
# FUTURE WORK: The sed commands here should be replaced with set_setting_value and dir_prep should be replaced with changing paths in config files directly where possible
@ -1009,6 +1053,7 @@ emulators_post_move() {
dir_prep "$rdhome/bios" "/var/config/retroarch/system"
dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs"
dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
# Yuzu section
dir_prep "$rdhome/bios/switch/keys" "/var/data/yuzu/keys"
@ -1017,38 +1062,38 @@ emulators_post_move() {
dir_prep "$rdhome/saves/switch/yuzu/sdmc" "/var/data/yuzu/sdmc"
dir_prep "$rdhome/.logs/yuzu" "/var/data/yuzu/log"
dir_prep "$rdhome/screenshots" "/var/data/yuzu/screenshots"
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/yuzu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
# Dolphin section
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini
dir_prep "$rdhome/saves/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR"
dir_prep "$rdhome/saves/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA"
dir_prep "$rdhome/saves/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP"
dir_prep "$rdhome/screenshots" "/var/data/dolphin-emu/ScreenShots"
dir_prep "$rdhome/states" "/var/data/dolphin-emu/StateSaves"
dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
dir_prep "$rdhome/saves/wii/dolphin" "/var/data/dolphin-emu/Wii/"
# Primehack section
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/primehack/Dolphin.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/primehack/Dolphin.ini
dir_prep "$rdhome/saves/gc/primehack/EUR" "/var/data/primehack/GC/EUR"
dir_prep "$rdhome/saves/gc/primehack/USA" "/var/data/primehack/GC/USA"
dir_prep "$rdhome/saves/gc/primehack/JAP" "/var/data/primehack/GC/JAP"
dir_prep "$rdhome/screenshots" "/var/data/primehack/ScreenShots"
dir_prep "$rdhome/states" "/var/data/primehack/StateSaves"
dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
dir_prep "$rdhome/saves/wii/primehack" "/var/data/primehack/Wii/"
# PCSX2 section
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini
# MelonDS section
dir_prep "$rdhome/bios" "/var/config/melonDS/bios"
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/melonDS/melonDS.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/melonDS/melonDS.ini
# Citra section
dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata"
dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log"
sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
# RPCS3 section
sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/rpcs3/vfs.yml
@ -1242,15 +1287,12 @@ finit() {
# Recreating the folder
rm -rfv /var/config/emulationstation/
rm -rfv /var/config/retrodeck/tools/
mkdir -pv /var/config/emulationstation/
# Initializing ES-DE
# TODO: after the next update of ES-DE this will not be needed - let's test it
emulationstation --home /var/config/emulationstation --create-system-dirs
mkdir -pv /var/config/retrodeck/tools/
#zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --text="RetroDECK will now install the needed files.\nPlease wait up to one minute,\nanother message will notify when the process will be finished.\n\nPress OK to continue."
# Initializing ROMs folder - Original in retrodeck home (or SD Card)
@ -1269,14 +1311,13 @@ finit() {
dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes"
# PICO-8
dir_prep "$bios_folder/pico-8" "~/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder
dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder
(
ra_init
standalones_init
tools_init
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
@ -1338,4 +1379,18 @@ configurator_destination_choice_dialog() {
--text="$2")
echo $choice
}
configurator_reset_confirmation_dialog() {
# This dialog provides a confirmation for any reset functions, before the reset is actually performed.
# USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text")
# This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel.
choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text="$2")
if [[ $? == "0" ]]; then
echo "true"
else
echo "false"
fi
}

View file

@ -5,19 +5,20 @@
source /app/libexec/functions.sh
# Static variables
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
emuconfigs="/app/retrodeck/emu-configs" # folder with all the default emulator configs
rd_defaults="$emuconfigs/defaults/retrodeck.cfg" # A default RetroDECK config file
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
bios_checklist="/var/config/retrodeck/tools/bios_checklist.cfg" # A config file listing BIOS file information that can be verified
easter_egg_checklist="/var/config/retrodeck/tools/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up
splashscreen_dir="/var/config/emulationstation/graphics/extra-splashes" # The default location of extra splash screens
current_splash_file="/var/config/emulationstation/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="/var/config/emulationstation/graphics/splash-orig.svg" # The default RetroDECK splash screen
lockfile="/var/config/retrodeck/.lock" # where the lockfile is located
default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path
hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem)
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
emuconfigs="/app/retrodeck/emu-configs" # folder with all the default emulator configs
rd_defaults="$emuconfigs/defaults/retrodeck/retrodeck.cfg" # A default RetroDECK config file
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
bios_checklist="$emuconfigs/defaults/retrodeck/bios_checklist.cfg" # A config file listing BIOS file information that can be verified
compression_targets="$emuconfigs/defaults/retrodeck/compression_targets.cfg" # A config file containing supported compression types per system
easter_egg_checklist="$emuconfigs/defaults/retrodeck/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up
splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra-splashes" # The default location of extra splash screens
current_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen
lockfile="/var/config/retrodeck/.lock" # where the lockfile is located
default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path
hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem)
# Config files for emulators with single config files
@ -54,6 +55,14 @@ pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini"
pcsx2qtconf="/var/config/PCSX2/inis/PCSX2.ini"
# Primehack config files
primehackconf="/var/config/primehack/Dolphin.ini"
primehackgcpadconf="/var/config/primehack/GCPadNew.ini"
primehackgfxconf="/var/config/primehack/GFX.ini"
primehackhkconf="/var/config/primehack/Hotkeys.ini"
primehackqtconf="/var/config/primehack/Qt.ini"
# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions
if [ -f "$HOME/retrodeck/.lock" ]
then

View file

@ -36,15 +36,15 @@
</screenshot>
</screenshots>
<description>
<p>What is Retrodeck?
RetroDECK is an emulation and retro gaming solution to catalog and play your game collection directly from Linux in one unified application.
<p>What is Retrodeck?</p>
<p>RetroDECK is an emulation and retro gaming solution to catalog and play your game collection directly from Linux in one unified application.
It's inspired by other embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera.
RetroDECK is powered by EmulationStation Desktop Edition, that uses RetroArch and other standalone emulators to allow you to import and play your favorite games in a tidy environment.
No other software is needed as everything it's already included in one package!</p>
<p>BETA NOTICE: RetroDECK is still in Beta and the team is actively developing and adding more features.</p>
<p>About the Beta:
The primary focus during the beta period is on SteamOS and the Steam Deck but we hope to expand to more devices and general Linux desktop in the future (NOTE: It can be run on Linux desktop right now but there will be some manual configurations needed for input, storage location and other tiny hickups).</p>
<p>NOTE: Albeit RetroDECK could possibily work on every distro, it's supported only on Steam Deck.</p>
The primary focus during the beta period is on SteamOS and the Steam Deck but we hope to expand to more devices and general Linux desktop in the future</p>
<p>NOTE: It can be run on Linux desktop right now but there will be some manual configurations needed for input, storage location and other tiny hickups.</p>
<p>
INSTALLATION INSTRUCTIONS FOR THE STEAM DECK:
<ul>
@ -54,18 +54,46 @@
<li>4. [OPTIONAL] Download Steam Grids graphics for RetroDECK with BoilR</li>
</ul>
</p>
<p>For more detailed information check our wiki:
https://github.com/XargonWan/RetroDECK/wiki</p>
<p>If you want to sponsor the project:
https://www.patreon.com/RetroDECK</p>
<p>If you want to join the RetroDECK community check our:
Discord: https://discord.gg/Dz3szYsP8g
Reddit: https://www.reddit.com/r/RetroDECK/</p>
<p>For more detailed information check our wiki:</p>
<p>https://github.com/XargonWan/RetroDECK/wiki</p>
<p>If you want to sponsor the project:</p>
<p>https://www.patreon.com/RetroDECK</p>
<p>If you want to join the RetroDECK community check our:</p>
<p>Discord: https://discord.gg/Dz3szYsP8g</p>
<p>Reddit: https://www.reddit.com/r/RetroDECK/</p>
<p>If you want to help out with the project join the "i-want-to-help" channel on our Discord.</p>
</description>
<project_license>GPL-3.0</project_license>
<metadata_license>CC0-1.0</metadata_license>
<releases>
<release version="0.6.3b" date="2023-03-24">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.6.3b</url>
<description>
<p>New features - General:</p>
<ul>
<li>Added support support for multiple file compression via CLI.</li>
</ul>
<p>RetroDECK Configurator:</p>
<ul>
<li>Added support support for multiple file compression in the Configurator.</li>
<li>Added safety y/n prompts to the reset functions.</li>
<li>Fixed some missing layout changes.</li>
<li>Renamed "Reset All" to "Reset RetroDECK".</li>
<li>Moved configurator into the RO partition for futher enhancements.</li>
</ul>
<p>Bug fixes and other changes:</p>
<ul>
<li>Fixed a bug in the compression tool with certain filenames with spaces.</li>
<li>Fixed a bug where some folders were recursively symlinked.</li>
<li>Fixed a bug where some emulator configs were not correctly deployed.</li>
<li>Fixed the Configurator BIOS tool looking in the wrong location (Thanks sofauxboho for the report!).</li>
<li>Fixed a manifest bug that caused a conflict between Dolphin and Primehack in certain scenarios.</li>
<li>Implemented new configurations for Yuzu and Citra thanks to the big config file changes in the latest emulator updates in both emulators.</li>
<li>Removed leftover files from Legacy PCSX2.</li>
<li>Removed the legacy "Reset Tools" command from Configurator and CLI.</li>
</ul>
</description>
</release>
<release version="0.6.2b" date="2023-03-15">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.6.2b</url>
<description>

View file

@ -78,7 +78,7 @@ modules:
- |
git checkout ${GITHUB_REF_NAME}
mkdir -p ${FLATPAK_DEST}/retrodeck/
VERSION="0.6.2b"
VERSION="cooker-0.6.3b"
if [[ $VERSION == *"cooker"* ]];
then
VERSION="$VERSION-[$(git rev-parse --short HEAD)]"
@ -88,7 +88,7 @@ modules:
sources:
- type: git
url: https://github.com/XargonWan/RetroDECK.git
branch: main
branch: cooker-0.6.3b
- name: xmlstarlet
config-opts:
@ -417,7 +417,7 @@ modules:
sources:
- type: archive
url: https://buildbot.libretro.com/stable/1.15.0/linux/x86_64/RetroArch_cores.7z
sha256: 1fdec5c2cbabea4f194ede4a1fb0dd1d17e14e64bf7ef705e3ad763592411073
sha256: 2230bc38eaf87406efd0c2b7bdd1cf9e813ba113505600f14a7ef9eb06f8c7c0
# PPSSPP - START
# https://github.com/flathub/org.ppsspp.PPSSPP
@ -574,7 +574,7 @@ modules:
- --disable-avrcp
- --disable-network
- --disable-obex
- --disable-bap
- --disable-bap
- --disable-mcp
- --with-dbusconfdir=/app/etc
- --with-dbussessionbusdir=/app/usr/lib/system-services
@ -628,7 +628,9 @@ modules:
- sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg
sources:
- type: git
#url: ssh://git@github.com/dolphin-emu/dolphin.git
# Sometimes Dolphin or its submodules clone are failing in https so it must done in ssh
# fatal: remote transport reported error
# url: ssh://git@github.com/dolphin-emu/dolphin.git
url: https://github.com/dolphin-emu/dolphin.git
commit: 46b99671d9158e0ca840c1d8ef249db0f321ced7
x-checker-data:
@ -847,8 +849,8 @@ modules:
- install -D primehack-wrapper /app/bin/primehack-wrapper
sources:
- type: git
url: https://github.com/shiiion/dolphin.git
commit: efb99ebfd20b1bc16ea3e51fec409c91e354d8c2
url: https://github.com/TheDrifter363/primehack.git
commit: 6295c695307a67f11ee202b05cbdd7b5c1edae5c
# detects whether dolphin is running in a flatpak sandbox
# and makes it use xdg directories if it is.
# prevents dolphin from attempting to write conf files
@ -1052,21 +1054,23 @@ modules:
- cp es-configs/es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml
# Logo, res, move graphics directory to mutable space so splash can be changed after build
- mv -f -t ${FLATPAK_DEST}/emulationstation /app/share/emulationstation/resources/graphics
- mv -f -t ${FLATPAK_DEST}/emulationstation /app/share/emulationstation/resources/graphics
- ln -s ${FLATPAK_DEST}/emulationstation/graphics /app/share/emulationstation/resources/graphics
- cp -f res/extra-splashes/* ${FLATPAK_DEST}/emulationstation/graphics
- cp -f res/splash.svg ${FLATPAK_DEST}/emulationstation/graphics/splash.svg
- cp -f res/splash.svg ${FLATPAK_DEST}/emulationstation/graphics/splash-orig.svg
- cp -f res/icon.svg /app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg
# Tools
- mkdir -p ${FLATPAK_DEST}/retrodeck/tools/
- cp tools/* ${FLATPAK_DEST}/retrodeck/tools/
- mv -f es-configs/tools-gamelist.xml ${FLATPAK_DEST}/retrodeck/
# RetroDECK core script
- cp retrodeck.sh /app/bin/retrodeck.sh
- chmod +x /app/bin/retrodeck.sh
# Tools
- mkdir -p /app/tools
- cp tools/configurator.sh /app/tools/configurator.sh
- chmod +x /app/tools/configurator.sh
- cp es-configs/tools-gamelist.xml /app/tools/gamelist.xml
# Function libraries
- mkdir -p /app/libexec
- cp global.sh /app/libexec/global.sh
@ -1091,4 +1095,4 @@ modules:
sources:
- type: git
url: https://github.com/XargonWan/RetroDECK.git
branch: main
branch: cooker-0.6.3b

View file

@ -187,7 +187,7 @@ post_update() {
# - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default.
# - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now!
# - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/
rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack.
primehack_init
@ -195,20 +195,41 @@ post_update() {
dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates"
mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion
dir_prep "$bios_folder/pico-8" "~/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder
fi
if [[ $prev_version -le "063" ]]; then
# In version 0.6.2b, the following changes were made that required config file updates/reset:
# - Put Dolphin and Primehack save states in different folders inside $rd_home/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.
dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b
rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency.
cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
# Remove unneeded tools folder, as location has changed to RO space
rm -rfv /var/config/retrodeck/tools/
fi
# The following commands are run every time.
tools_init
update_rd_conf
) |
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 Upgrade" \
--text="RetroDECK is finishing the upgrade process, please wait."
source $rd_conf # Load new config file variables
create_lock
}

View file

@ -20,7 +20,6 @@ Arguments:
--configurator Starts the RetroDECK Configurator
--compress <file> Compresses target file to .chd format. Supports .cue, .iso and .gdi formats
--reset-emulator <emulator> Reset one or more emulator configs to the default values
--reset-tools Reset the RetroDECK Tools section
--reset-retrodeck Starts the initial RetroDECK installer (backup your data first!)
For flatpak run specific options please run: flatpak run -h
@ -41,28 +40,11 @@ https://retrodeck.net
exit
;;
--compress*)
read -p "RetroDECK will now attempt to compress your selected game. The original game will still exist and will need to be removed manually after the process completes. Press any key to continue..."
if [[ ! -z $2 ]]; then
if [[ -f $2 ]]; then
current_run_log_file="chd_compression_"$(date +"%Y_%m_%d_%I_%M_%p").log""
if [[ $(validate_for_chd $2) == "true" ]]; then
filename_no_path=$(basename $2)
filename_no_extension=${filename_no_path%.*}
compress_to_chd $(dirname $(realpath $2))/$(basename $2) $(dirname $(realpath $2))/$filename_no_extension
else
printf "An error occured during the compression process. Please see the following log entries for details:\n\n"
cat $logs_folder/$current_run_log_file
fi
else
echo "File not found, please specify the full path to the file to be compressed."
fi
else
echo "Please use this command format \"--compress <cue/gdi/iso file to compress>\""
fi
cli_compress_file "$2"
exit
;;
--configurator*)
sh /var/config/retrodeck/tools/configurator.sh
sh /app/tools/configurator.sh
exit
;;
--reset-emulator*)
@ -70,13 +52,13 @@ https://retrodeck.net
echo "Available options are: retroarch citra dolphin duckstation melonds pcsx2 ppsspp primehack rpcs3 xemu yuzu all-emulators"
read -p "Please enter the emulator you would like to reset: " emulator
if [[ "$emulator" =~ ^(retroarch|citra|dolphin|duckstation|melonds|pcsx2|ppsspp|primehack|rpcs3|xemu|yuzu|all-emulators)$ ]]; then
read -p "You are about to reset $emulator to default settings. Press 'y' to continue, 'n' to stop: " response
read -p "You are about to reset $emulator to default settings. Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then
cli_emulator_reset $emulator
read -p "The process has been completed, press any key to start RetroDECK."
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 any key to exit."
read -p "The process has been cancelled, press Enter key to exit."
exit
fi
else
@ -84,27 +66,16 @@ https://retrodeck.net
exit
fi
;;
--reset-tools*)
echo "You are about to reset the RetroDECK tools."
read -p "Press 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then
tools_init
read -p "The process has been completed, press any key to start RetroDECK."
shift # Continue launch after previous command is finished
else
read -p "The process has been cancelled, press any key to exit."
exit
fi
;;
--reset-retrodeck*)
echo "You are about to reset RetroDECK completely."
read -p "Press 'y' to continue, 'n' to stop: " response
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"
read -p "The process has been completed, press any key to start the initial RetroDECK setup process."
rm -f "$rd_conf"
read -p "The process has been completed, press Enter key to start the initial RetroDECK setup process."
shift # Continue launch after previous command is finished
else
read -p "The process has been cancelled, press any key to exit."
read -p "The process has been cancelled, press Enter key to exit."
exit
fi
;;
@ -135,6 +106,8 @@ else
finit # Executing First/Force init
fi
source $rd_conf # Load latest variable values
# Check if running in Desktop mode and warn if true, unless desktop_mode_warning=false in retrodeck.cfg
desktop_mode_warning

View file

@ -11,11 +11,12 @@ source /app/libexec/functions.sh
# Welcome
# - Move RetroDECK
# - Change RetroArch Options
# - Enable/Disable Rewind Setting
# - RetroArch Presets
# - Change Rewind Setting
# - Enable/Disable Rewind
# - RetroAchivement Login
# - Login prompt
# - Change Standalone Emulator Options (Behind one-time power user warning dialog)
# - Emulator Options (Behind one-time power user warning dialog)
# - Launch RetroArch
# - Launch Citra
# - Launch Dolphin
@ -27,10 +28,13 @@ source /app/libexec/functions.sh
# - Launch RPCS3
# - Launch XEMU
# - Launch Yuzu
# - Compress Games
# - Manual single-game selection
# - Troubleshooting Tools
# - Tools and Troubleshooting
# - Multi-file game check
# - Basic BIOS file check
# - Advanced BIOS file check
# - Compress Games
# - Manual single-game selection
# - Multi-file compression (CHD)
# - Reset
# - Reset Specific Emulator
# - Reset RetroArch
@ -46,7 +50,6 @@ source /app/libexec/functions.sh
# - Reset XEMU
# - Reset Yuzu
# - Reset All Emulators
# - Reset Tools
# - Reset All
# Code for the menus should be put in reverse order, so functions for sub-menus exists before it is called by the parent menu
@ -59,8 +62,7 @@ configurator_reset_dialog() {
--column="Choice" --column="Action" \
"Reset Specific Emulator" "Reset only one specific emulator to default settings" \
"Reset All Emulators" "Reset all emulators to default settings" \
"Reset Tools" "Reset Tools menu entries" \
"Reset All" "Reset RetroDECK to default settings" )
"Reset RetroDECK" "Reset RetroDECK to default settings" )
case $choice in
@ -85,58 +87,113 @@ configurator_reset_dialog() {
case $emulator_to_reset in
"RetroArch" )
ra_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "RetroArch" "Are you sure you want to reset the RetroArch emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
ra_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Citra" )
citra_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "Citra" "Are you sure you want to reset the Citra emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
citra_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Dolphin" )
dolphin_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "Dolphin" "Are you sure you want to reset the Dolphin emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
dolphin_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Duckstation" )
duckstation_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "Duckstation" "Are you sure you want to reset the Duckstation emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
duckstation_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"MelonDS" )
melonds_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "MelonDS" "Are you sure you want to reset the MelonDS emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
melonds_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"PCSX2" )
pcsx2_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "PCSX2" "Are you sure you want to reset the PCSX2 emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
pcsx2_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"PPSSPP" )
ppssppsdl_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "PPSSPP" "Are you sure you want to reset the PPSSPP emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
ppssppsdl_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Primehack" )
primehack_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "Primehack" "Are you sure you want to reset the Primehack emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
primehack_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"RPCS3" )
rpcs3_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "RPCS3" "Are you sure you want to reset the RPCS3 emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
rpcs3_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"XEMU" )
xemu_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "XEMU" "Are you sure you want to reset the XEMU emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
xemu_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Yuzu" )
yuzu_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
if [[ $(configurator_reset_confirmation_dialog "Yuzu" "Are you sure you want to reset the Yuzu emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
yuzu_init
configurator_process_complete_dialog "resetting $emulator_to_reset"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"" ) # No selection made or Back button clicked
@ -147,23 +204,29 @@ configurator_reset_dialog() {
;;
"Reset All Emulators" )
ra_init
standalones_init
configurator_process_complete_dialog "resetting all emulators"
if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
ra_init
standalones_init
configurator_process_complete_dialog "resetting all emulators"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"Reset Tools" )
tools_init
configurator_process_complete_dialog "resetting the tools menu"
;;
"Reset All" )
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Reset RetroDECK" \
--text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process again."
rm -f "$lockfile"
configurator_process_complete_dialog "resetting RetroDECK"
"Reset RetroDECK" )
if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Reset RetroDECK" \
--text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process."
rm -f "$lockfile"
rm -f "$rd_conf"
configurator_process_complete_dialog "resetting RetroDECK"
else
configurator_generic_dialog "Reset process cancelled."
configurator_reset_dialog
fi
;;
"" ) # No selection made or Back button clicked
@ -218,9 +281,9 @@ configurator_power_user_warning_dialog() {
configurator_power_user_changes_dialog() {
emulator=$(zenity --list \
--title "RetroDECK Configurator Utility - Power User Options" --cancel-label="Back" \
--title "RetroDECK Configurator Utility - Emulator Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which emulator do you want to configure?" \
--text="Which emulator do you want to launch?" \
--hide-header \
--column=emulator \
"RetroArch" \
@ -306,7 +369,7 @@ configurator_retroarch_rewind_dialog() {
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Rewind" \
--text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance expecially on the latest systems."
--text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems."
if [ $? == 0 ]
then
@ -323,7 +386,7 @@ configurator_retroarch_options_dialog() {
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
"Change Rewind Setting" "Enable or disable the Rewind function in RetroArch." \
"Log in to RetroAchivements" "Log into the RetroAchievements service in RetroArch." )
"RetroAchievements Login" "Log into the RetroAchievements service in RetroArch." )
case $choice in
@ -331,33 +394,54 @@ configurator_retroarch_options_dialog() {
configurator_retroarch_rewind_dialog
;;
"Log in to RetroAchivements" )
"RetroAchievements Login" )
configurator_retroachivement_dialog
;;
"" ) # No selection made or Back button clicked
configurator_options_dialog
configurator_welcome_dialog
;;
esac
}
configurator_compress_single_game_dialog() {
file_to_compress=$(file_browse "Game to compress")
if [[ ! -z $file_to_compress ]]; then
if [[ $(validate_for_chd $file_to_compress) == "true" ]]; then
local file=$(file_browse "Game to compress")
if [[ ! -z "$file" ]]; then
if [[ $(validate_for_chd "$file") == "true" ]]; then
local post_compression_cleanup=$(configurator_compression_cleanup_dialog)
local filename_no_path=$(basename "$file")
local filename_no_extension="${filename_no_path%.*}"
local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file")
local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension"
(
filename_no_path=$(basename $file_to_compress)
filename_no_extension=${filename_no_path%.*}
compress_to_chd $(dirname $(realpath $file_to_compress))/$(basename $file_to_compress) $(dirname $(realpath $file_to_compress))/$filename_no_extension
echo "# Compressing $filename_no_path, please wait..."
compress_to_chd "$source_file" "$dest_file"
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
echo "# Removing file $line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
echo "# Removing file $filename_no_path"
rm -f "$file"
else
echo "# Removing file $filename_no_path"
rm -f "$file"
fi
fi
) |
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 - Compression in Progress" \
--text="Compressing game $filename_no_path, please wait."
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Compression in Progress"
configurator_generic_dialog "The compression process is complete!"
configurator_compress_games_dialog
else
configurator_generic_dialog "File type not recognized. Supported file types are .cue, .gdi and .iso"
configurator_compress_single_game_dialog
configurator_compress_games_dialog
fi
else
configurator_generic_dialog "No file selected, returning to main menu"
@ -365,11 +449,151 @@ configurator_compress_single_game_dialog() {
fi
}
configurator_compress_games_dialog() {
# This is currently a placeholder for a dialog where you can compress a single game or multiple at once. Currently only the single game option is available, so is launched by default.
configurator_compress_multi_game_dialog() {
# This dialog will display any games it finds to be compressable, from the systems listed under each compression type in
local compression_format=$1
local compressable_game=""
local compressable_games_list=()
local all_compressable_games=()
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d')
configurator_generic_dialog "This utility will compress a single game into .CHD format.\n\nPlease select the game to be compressed in the next dialog: supported file types are .cue, .iso and .gdi\n\nThe original game files will be untouched and will need to be removed manually."
configurator_compress_single_game_dialog
while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type
do
if [[ $compression_format == "chd" ]]; then
compression_candidates=$(find "$roms_folder/$system" -type f \( -name "*.cue" -o -name "*.iso" -o -name "*.gdi" \) ! -path "*.m3u*")
# TODO: Add ZIP file compression search here
fi
while IFS= read -r game
do
if [[ $(validate_for_chd "$game") == "true" ]]; then
all_compressable_games=("${all_compressable_games[@]}" "$game")
compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game")
fi
done < <(printf '%s\n' "$compression_candidates")
done < <(printf '%s\n' "$compressable_systems_list")
choice=$(zenity \
--list --width=1200 --height=720 \
--checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \
--separator="," --print-column=3 \
--text="Choose which games to compress:" \
--column "Compress?" \
--column "Game" \
--column "Game Full Path" \
"${compressable_games_list[@]}")
local rc=$?
if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected
local post_compression_cleanup=$(configurator_compression_cleanup_dialog)
IFS="," read -ra games_to_compress <<< "$choice"
(
for file in "${games_to_compress[@]}"; do
local filename_no_path=$(basename "$file")
local filename_no_extension="${filename_no_path%.*}"
local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file")
local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension"
echo "# Compressing $filename_no_path" # Update Zenity dialog text
compress_to_chd "$source_file" "$dest_file"
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
echo "# Removing file $line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
echo "# Removing file $filename_no_path"
rm -f $(realpath "$file")
else
echo "# Removing file $filename_no_path"
rm -f "$(realpath "$file")"
fi
fi
done
) |
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 - Compression in Progress"
configurator_generic_dialog "The compression process is complete!"
configurator_compress_games_dialog
else
if [[ ! -z $choice ]]; then # User clicked "Compress All"
local post_compression_cleanup=$(configurator_compression_cleanup_dialog)
(
for file in "${all_compressable_games[@]}"; do
local filename_no_path=$(basename "$file")
local filename_no_extension="${filename_no_path%.*}"
local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file")
local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension"
echo "# Compressing $filename_no_path" # Update Zenity dialog text
compress_to_chd "$source_file" "$dest_file"
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ "$file" == *".cue" ]]; then
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
local file_path=$(dirname "$(realpath "$file")")
while IFS= read -r line
do
echo "# Removing file $line"
rm -f "$file_path/$line"
done < <(printf '%s\n' "$cue_bin_files")
echo "# Removing file $filename_no_path"
rm -f $(realpath "$file")
else
echo "# Removing file $filename_no_path"
rm -f $(realpath "$file")
fi
fi
done
) |
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 - Compression in Progress"
configurator_generic_dialog "The compression process is complete!"
configurator_compress_games_dialog
else
configurator_compress_games_dialog
fi
fi
}
configurator_compression_cleanup_dialog() {
zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Compression Cleanup" \
--text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library."
local rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "0" ]]; then # If user clicked "Yes"
echo "true"
else # If "No" was clicked
echo "false"
fi
}
configurator_compress_games_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
"Compress Single Game" "Compress a single game into a compatible format" \
"Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" )
case $choice in
"Compress Single Game" )
configurator_compress_single_game_dialog
;;
"Compress Multiple Games - CHD" )
configurator_compress_multi_game_dialog "chd"
;;
# TODO: Add ZIP compression option
"" ) # No selection made or Back button clicked
configurator_welcome_dialog
;;
esac
}
configurator_check_multifile_game_structure() {
@ -394,11 +618,11 @@ configurator_check_bios_files_basic() {
do
bios_file_found="No"
bios_hash_matched="No"
if [[ -f "$bios_dir/$bios_subdir$bios_file" ]]; then
if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
bios_file_found="Yes"
if [[ $bios_hash == "Unknown" ]]; then
bios_hash_matched="Unknown"
elif [[ $(md5sum "$bios_dir/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
bios_hash_matched="Yes"
fi
fi
@ -421,11 +645,11 @@ configurator_check_bios_files_advanced() {
do
bios_file_found="No"
bios_hash_matched="No"
if [[ -f "$bios_dir/$bios_subdir$bios_file" ]]; then
if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
bios_file_found="Yes"
if [[ $bios_hash == "Unknown" ]]; then
bios_hash_matched="Unknown"
elif [[ $(md5sum "$bios_dir/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
bios_hash_matched="Yes"
fi
fi
@ -448,12 +672,19 @@ configurator_troubleshooting_tools_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
"Move RetroDECK" "Move RetroDECK files between internal/SD card or to a custom location" \
"Multi-file game structure check" "Verify the proper structure of multi-file or multi-disc games" \
"Basic BIOS file check" "Show a list of systems that BIOS files are found for" \
"Advanced BIOS file check" "Show advanced information about common BIOS files" )
"Advanced BIOS file check" "Show advanced information about common BIOS files" \
"Compress Games" "Compress games to CHD format for systems that support it" )
case $choice in
"Move RetroDECK" )
configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder."
configurator_move_dialog
;;
"Multi-file game structure check" )
configurator_check_multifile_game_structure
;;
@ -466,6 +697,10 @@ configurator_troubleshooting_tools_dialog() {
configurator_check_bios_files_advanced
;;
"Compress Games" )
configurator_compress_games_dialog
;;
"" ) # No selection made or Back button clicked
configurator_welcome_dialog
;;
@ -628,43 +863,25 @@ configurator_move_dialog() {
}
configurator_welcome_dialog() {
# Clear the variables
source=
destination=
action=
setting=
setting_value=
choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
"Move Files" "Move files between internal/SD card or to custom locations." \
"Change RetroArch Options" "Change RetroArch presets, log into RetroAchievements etc." \
"Change Standalone Emulator Options" "Run emulators standalone to make advanced config changes." \
"Compress Games" "Compress games to CHD format for systems that support it." \
"Troubleshooting Tools" "Run RetroDECK troubleshooting tools for common issues." \
"Reset" "Reset specific parts or all of RetroDECK." )
"RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \
"Emulator Options" "Launch and configure each emulators settings (for advanced users)" \
"Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \
"Reset" "Reset specific parts or all of RetroDECK" )
case $choice in
"Move Files" )
configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder."
configurator_move_dialog
;;
"Change RetroArch Options" )
"RetroArch Presets" )
configurator_retroarch_options_dialog
;;
"Change Standalone Emulator Options" )
"Emulator Options" )
configurator_power_user_warning_dialog
;;
"Compress Games" )
configurator_compress_games_dialog
;;
"Troubleshooting Tools" )
"Tools and Troubleshooting" )
configurator_troubleshooting_tools_dialog
;;