diff --git a/.github/workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml index 0401daab..0dbf3ad4 100644 --- a/.github/workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -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 diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index 24c0d8d6..66738986 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -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 diff --git a/emu-configs/PCSX2-QT/PCSX2.ini b/emu-configs/PCSX2-QT/PCSX2.ini index 63e59b0e..5ed8407b 100644 --- a/emu-configs/PCSX2-QT/PCSX2.ini +++ b/emu-configs/PCSX2-QT/PCSX2.ini @@ -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 diff --git a/emu-configs/PCSX2/PCSX2.ini b/emu-configs/PCSX2/PCSX2.ini index 56981725..e1d8bec8 100644 --- a/emu-configs/PCSX2/PCSX2.ini +++ b/emu-configs/PCSX2/PCSX2.ini @@ -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 \ No newline at end of file +RecursivePaths = RETRODECKHOMEDIR/roms/ps2 \ No newline at end of file diff --git a/emu-configs/PCSX2/PCSX2_ui.ini b/emu-configs/PCSX2/PCSX2_ui.ini index 14214053..8f9a5a8d 100644 --- a/emu-configs/PCSX2/PCSX2_ui.ini +++ b/emu-configs/PCSX2/PCSX2_ui.ini @@ -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 diff --git a/emu-configs/citra-qt-config.ini b/emu-configs/citra/qt-config.ini similarity index 67% rename from emu-configs/citra-qt-config.ini rename to emu-configs/citra/qt-config.ini index 1bb879f8..f0c98ac9 100644 --- a/emu-configs/citra-qt-config.ini +++ b/emu-configs/citra/qt-config.ini @@ -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 \ No newline at end of file diff --git a/tools/bios_checklist.cfg b/emu-configs/defaults/retrodeck/bios_checklist.cfg similarity index 100% rename from tools/bios_checklist.cfg rename to emu-configs/defaults/retrodeck/bios_checklist.cfg diff --git a/emu-configs/defaults/retrodeck/compression_targets.cfg b/emu-configs/defaults/retrodeck/compression_targets.cfg new file mode 100644 index 00000000..28c1b4d1 --- /dev/null +++ b/emu-configs/defaults/retrodeck/compression_targets.cfg @@ -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] \ No newline at end of file diff --git a/tools/easter_egg_checklist.cfg b/emu-configs/defaults/retrodeck/easter_egg_checklist.cfg similarity index 100% rename from tools/easter_egg_checklist.cfg rename to emu-configs/defaults/retrodeck/easter_egg_checklist.cfg diff --git a/emu-configs/defaults/retrodeck.cfg b/emu-configs/defaults/retrodeck/retrodeck.cfg similarity index 100% rename from emu-configs/defaults/retrodeck.cfg rename to emu-configs/defaults/retrodeck/retrodeck.cfg diff --git a/emu-configs/dolphin/Dolphin.ini b/emu-configs/dolphin/Dolphin.ini index bfa1e7c2..f6111c44 100644 --- a/emu-configs/dolphin/Dolphin.ini +++ b/emu-configs/dolphin/Dolphin.ini @@ -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 diff --git a/emu-configs/melonDS.ini b/emu-configs/melonDS.ini index b1443132..e43cde93 100644 --- a/emu-configs/melonDS.ini +++ b/emu-configs/melonDS.ini @@ -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 diff --git a/emu-configs/retroarch/retroarch.cfg b/emu-configs/retroarch/retroarch.cfg index 7ee4f8e2..78a223f0 100644 --- a/emu-configs/retroarch/retroarch.cfg +++ b/emu-configs/retroarch/retroarch.cfg @@ -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" diff --git a/emu-configs/yuzu/qt-config.ini b/emu-configs/yuzu/qt-config.ini index 28d4ca15..355cdcf8 100644 --- a/emu-configs/yuzu/qt-config.ini +++ b/emu-configs/yuzu/qt-config.ini @@ -9,7 +9,6 @@ volume=100 volume\default=true [Controls] -="======" controller_navigation=true controller_navigation\default=true debug_pad_button_a="toggle:0,code:67,engine:keyboard" @@ -64,6 +63,10 @@ enable_accurate_vibrations=false enable_accurate_vibrations\default=true enable_ir_sensor=false enable_ir_sensor\default=true +enable_joycon_driver=true +enable_joycon_driver\default=true +enable_procon_driver=false +enable_procon_driver\default=true enable_raw_input=false enable_raw_input\default=true enable_ring_controller=true @@ -74,11 +77,11 @@ ir_sensor_device=auto ir_sensor_device\default=true keyboard_enabled=false keyboard_enabled\default=true -motion_enabled=false -motion_enabled\default=false +motion_enabled=true +motion_enabled\default=true mouse_enabled=false mouse_enabled\default=true -mouse_panning_sensitivity=10 +mouse_panning_sensitivity=50 mouse_panning_sensitivity\default=true pause_tas_on_load=true pause_tas_on_load\default=true @@ -86,59 +89,59 @@ player_0_body_color_left=4278893030 player_0_body_color_left\default=false player_0_body_color_right=4294917160 player_0_body_color_right\default=false -player_0_button_a="button:1,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_a="pad:0,button:1,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_a\default=false -player_0_button_b="button:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_b="pad:0,button:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_b\default=false player_0_button_color_left=4278197790 player_0_button_color_left\default=false player_0_button_color_right=4280158730 player_0_button_color_right\default=false -player_0_button_ddown="hat:0,direction:down,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_ddown="hat:0,pad:0,direction:down,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_ddown\default=false -player_0_button_dleft="hat:0,direction:left,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_dleft="hat:0,pad:0,direction:left,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_dleft\default=false -player_0_button_dright="hat:0,direction:right,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_dright="hat:0,pad:0,direction:right,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_dright\default=false -player_0_button_dup="hat:0,direction:up,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_dup="hat:0,pad:0,direction:up,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_dup\default=false -player_0_button_home="button:8,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_home="engine:keyboard,port:0,pad:0,code:76" player_0_button_home\default=false -player_0_button_l="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_l="pad:0,button:4,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_l\default=false -player_0_button_lstick="button:9,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_lstick="pad:0,button:9,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_lstick\default=false -player_0_button_minus="button:6,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_minus="pad:0,button:6,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_minus\default=false -player_0_button_plus="button:7,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_plus="pad:0,button:7,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_plus\default=false -player_0_button_r="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_r="pad:0,button:5,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_r\default=false -player_0_button_rstick="button:10,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_rstick="pad:0,button:10,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_rstick\default=false -player_0_button_screenshot=[empty] +player_0_button_screenshot="engine:keyboard,port:0,pad:0,code:82" player_0_button_screenshot\default=false -player_0_button_sl="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl" -player_0_button_sl\default=false -player_0_button_sr="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl" -player_0_button_sr\default=false -player_0_button_x="button:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_sl="toggle:0,code:81,engine:keyboard" +player_0_button_sl\default=true +player_0_button_sr="toggle:0,code:69,engine:keyboard" +player_0_button_sr\default=true +player_0_button_x="pad:0,button:3,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_x\default=false -player_0_button_y="button:2,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_button_y="pad:0,button:2,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_y\default=false -player_0_button_zl="threshold:0.500000,axis:2,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl" +player_0_button_zl="threshold:0.500000,axis:2,pad:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_zl\default=false -player_0_button_zr="threshold:0.500000,axis:5,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl" +player_0_button_zr="threshold:0.500000,axis:5,pad:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_button_zr\default=false player_0_connected=true player_0_connected\default=true -player_0_lstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:0.000000,axis_y:1,offset_x:-0.000000,axis_x:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_lstick="range:0.950000,deadzone:0.150000,threshold:0.500000,axis_y:1,axis_x:0,pad:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_lstick\default=false -player_0_motionleft=[empty] -player_0_motionleft\default=false -player_0_motionright=[empty] -player_0_motionright\default=false -player_0_rstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:-0.063723,axis_y:4,offset_x:-0.024476,axis_x:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl" +player_0_motionleft="toggle:0,code:55,engine:keyboard" +player_0_motionleft\default=true +player_0_motionright="toggle:0,code:56,engine:keyboard" +player_0_motionright\default=true +player_0_rstick="range:0.950000,deadzone:0.150000,threshold:0.500000,axis_y:4,axis_x:3,pad:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl" player_0_rstick\default=false player_0_type=0 player_0_type\default=true @@ -150,60 +153,60 @@ player_1_body_color_left=4278893030 player_1_body_color_left\default=false player_1_body_color_right=4294917160 player_1_body_color_right\default=false -player_1_button_a="engine:keyboard,code:67,toggle:0" -player_1_button_a\default=false -player_1_button_b="engine:keyboard,code:88,toggle:0" -player_1_button_b\default=false +player_1_button_a="toggle:0,code:67,engine:keyboard" +player_1_button_a\default=true +player_1_button_b="toggle:0,code:88,engine:keyboard" +player_1_button_b\default=true player_1_button_color_left=4278197790 player_1_button_color_left\default=false player_1_button_color_right=4280158730 player_1_button_color_right\default=false -player_1_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_1_button_ddown\default=false -player_1_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_1_button_dleft\default=false -player_1_button_dright="engine:keyboard,code:16777236,toggle:0" -player_1_button_dright\default=false -player_1_button_dup="engine:keyboard,code:16777235,toggle:0" -player_1_button_dup\default=false -player_1_button_home="engine:keyboard,code:0,toggle:0" -player_1_button_home\default=false -player_1_button_l="engine:keyboard,code:81,toggle:0" -player_1_button_l\default=false -player_1_button_lstick="engine:keyboard,code:70,toggle:0" -player_1_button_lstick\default=false -player_1_button_minus="engine:keyboard,code:78,toggle:0" -player_1_button_minus\default=false -player_1_button_plus="engine:keyboard,code:77,toggle:0" -player_1_button_plus\default=false -player_1_button_r="engine:keyboard,code:69,toggle:0" -player_1_button_r\default=false -player_1_button_rstick="engine:keyboard,code:71,toggle:0" -player_1_button_rstick\default=false -player_1_button_screenshot="engine:keyboard,code:0,toggle:0" -player_1_button_screenshot\default=false -player_1_button_sl="engine:keyboard,code:81,toggle:0" -player_1_button_sl\default=false -player_1_button_sr="engine:keyboard,code:69,toggle:0" -player_1_button_sr\default=false -player_1_button_x="engine:keyboard,code:86,toggle:0" -player_1_button_x\default=false -player_1_button_y="engine:keyboard,code:90,toggle:0" -player_1_button_y\default=false -player_1_button_zl="engine:keyboard,code:82,toggle:0" -player_1_button_zl\default=false -player_1_button_zr="engine:keyboard,code:84,toggle:0" -player_1_button_zr\default=false +player_1_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_1_button_ddown\default=true +player_1_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_1_button_dleft\default=true +player_1_button_dright="toggle:0,code:16777236,engine:keyboard" +player_1_button_dright\default=true +player_1_button_dup="toggle:0,code:16777235,engine:keyboard" +player_1_button_dup\default=true +player_1_button_home="toggle:0,code:0,engine:keyboard" +player_1_button_home\default=true +player_1_button_l="toggle:0,code:81,engine:keyboard" +player_1_button_l\default=true +player_1_button_lstick="toggle:0,code:70,engine:keyboard" +player_1_button_lstick\default=true +player_1_button_minus="toggle:0,code:78,engine:keyboard" +player_1_button_minus\default=true +player_1_button_plus="toggle:0,code:77,engine:keyboard" +player_1_button_plus\default=true +player_1_button_r="toggle:0,code:69,engine:keyboard" +player_1_button_r\default=true +player_1_button_rstick="toggle:0,code:71,engine:keyboard" +player_1_button_rstick\default=true +player_1_button_screenshot="toggle:0,code:0,engine:keyboard" +player_1_button_screenshot\default=true +player_1_button_sl="toggle:0,code:81,engine:keyboard" +player_1_button_sl\default=true +player_1_button_sr="toggle:0,code:69,engine:keyboard" +player_1_button_sr\default=true +player_1_button_x="toggle:0,code:86,engine:keyboard" +player_1_button_x\default=true +player_1_button_y="toggle:0,code:90,engine:keyboard" +player_1_button_y\default=true +player_1_button_zl="toggle:0,code:82,engine:keyboard" +player_1_button_zl\default=true +player_1_button_zr="toggle:0,code:84,engine:keyboard" +player_1_button_zr\default=true player_1_connected=false player_1_connected\default=true -player_1_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_1_lstick\default=false -player_1_motionleft="engine:keyboard,code:55,toggle:0" -player_1_motionleft\default=false -player_1_motionright="engine:keyboard,code:56,toggle:0" -player_1_motionright\default=false -player_1_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_1_rstick\default=false +player_1_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_1_lstick\default=true +player_1_motionleft="toggle:0,code:55,engine:keyboard" +player_1_motionleft\default=true +player_1_motionright="toggle:0,code:56,engine:keyboard" +player_1_motionright\default=true +player_1_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_1_rstick\default=true player_1_type=0 player_1_type\default=true player_1_vibration_enabled=true @@ -214,60 +217,60 @@ player_2_body_color_left=4278893030 player_2_body_color_left\default=false player_2_body_color_right=4294917160 player_2_body_color_right\default=false -player_2_button_a="engine:keyboard,code:67,toggle:0" -player_2_button_a\default=false -player_2_button_b="engine:keyboard,code:88,toggle:0" -player_2_button_b\default=false +player_2_button_a="toggle:0,code:67,engine:keyboard" +player_2_button_a\default=true +player_2_button_b="toggle:0,code:88,engine:keyboard" +player_2_button_b\default=true player_2_button_color_left=4278197790 player_2_button_color_left\default=false player_2_button_color_right=4280158730 player_2_button_color_right\default=false -player_2_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_2_button_ddown\default=false -player_2_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_2_button_dleft\default=false -player_2_button_dright="engine:keyboard,code:16777236,toggle:0" -player_2_button_dright\default=false -player_2_button_dup="engine:keyboard,code:16777235,toggle:0" -player_2_button_dup\default=false -player_2_button_home="engine:keyboard,code:0,toggle:0" -player_2_button_home\default=false -player_2_button_l="engine:keyboard,code:81,toggle:0" -player_2_button_l\default=false -player_2_button_lstick="engine:keyboard,code:70,toggle:0" -player_2_button_lstick\default=false -player_2_button_minus="engine:keyboard,code:78,toggle:0" -player_2_button_minus\default=false -player_2_button_plus="engine:keyboard,code:77,toggle:0" -player_2_button_plus\default=false -player_2_button_r="engine:keyboard,code:69,toggle:0" -player_2_button_r\default=false -player_2_button_rstick="engine:keyboard,code:71,toggle:0" -player_2_button_rstick\default=false -player_2_button_screenshot="engine:keyboard,code:0,toggle:0" -player_2_button_screenshot\default=false -player_2_button_sl="engine:keyboard,code:81,toggle:0" -player_2_button_sl\default=false -player_2_button_sr="engine:keyboard,code:69,toggle:0" -player_2_button_sr\default=false -player_2_button_x="engine:keyboard,code:86,toggle:0" -player_2_button_x\default=false -player_2_button_y="engine:keyboard,code:90,toggle:0" -player_2_button_y\default=false -player_2_button_zl="engine:keyboard,code:82,toggle:0" -player_2_button_zl\default=false -player_2_button_zr="engine:keyboard,code:84,toggle:0" -player_2_button_zr\default=false +player_2_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_2_button_ddown\default=true +player_2_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_2_button_dleft\default=true +player_2_button_dright="toggle:0,code:16777236,engine:keyboard" +player_2_button_dright\default=true +player_2_button_dup="toggle:0,code:16777235,engine:keyboard" +player_2_button_dup\default=true +player_2_button_home="toggle:0,code:0,engine:keyboard" +player_2_button_home\default=true +player_2_button_l="toggle:0,code:81,engine:keyboard" +player_2_button_l\default=true +player_2_button_lstick="toggle:0,code:70,engine:keyboard" +player_2_button_lstick\default=true +player_2_button_minus="toggle:0,code:78,engine:keyboard" +player_2_button_minus\default=true +player_2_button_plus="toggle:0,code:77,engine:keyboard" +player_2_button_plus\default=true +player_2_button_r="toggle:0,code:69,engine:keyboard" +player_2_button_r\default=true +player_2_button_rstick="toggle:0,code:71,engine:keyboard" +player_2_button_rstick\default=true +player_2_button_screenshot="toggle:0,code:0,engine:keyboard" +player_2_button_screenshot\default=true +player_2_button_sl="toggle:0,code:81,engine:keyboard" +player_2_button_sl\default=true +player_2_button_sr="toggle:0,code:69,engine:keyboard" +player_2_button_sr\default=true +player_2_button_x="toggle:0,code:86,engine:keyboard" +player_2_button_x\default=true +player_2_button_y="toggle:0,code:90,engine:keyboard" +player_2_button_y\default=true +player_2_button_zl="toggle:0,code:82,engine:keyboard" +player_2_button_zl\default=true +player_2_button_zr="toggle:0,code:84,engine:keyboard" +player_2_button_zr\default=true player_2_connected=false player_2_connected\default=true -player_2_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_2_lstick\default=false -player_2_motionleft="engine:keyboard,code:55,toggle:0" -player_2_motionleft\default=false -player_2_motionright="engine:keyboard,code:56,toggle:0" -player_2_motionright\default=false -player_2_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_2_rstick\default=false +player_2_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_2_lstick\default=true +player_2_motionleft="toggle:0,code:55,engine:keyboard" +player_2_motionleft\default=true +player_2_motionright="toggle:0,code:56,engine:keyboard" +player_2_motionright\default=true +player_2_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_2_rstick\default=true player_2_type=0 player_2_type\default=true player_2_vibration_enabled=true @@ -278,60 +281,60 @@ player_3_body_color_left=4278893030 player_3_body_color_left\default=false player_3_body_color_right=4294917160 player_3_body_color_right\default=false -player_3_button_a="engine:keyboard,code:67,toggle:0" -player_3_button_a\default=false -player_3_button_b="engine:keyboard,code:88,toggle:0" -player_3_button_b\default=false +player_3_button_a="toggle:0,code:67,engine:keyboard" +player_3_button_a\default=true +player_3_button_b="toggle:0,code:88,engine:keyboard" +player_3_button_b\default=true player_3_button_color_left=4278197790 player_3_button_color_left\default=false player_3_button_color_right=4280158730 player_3_button_color_right\default=false -player_3_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_3_button_ddown\default=false -player_3_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_3_button_dleft\default=false -player_3_button_dright="engine:keyboard,code:16777236,toggle:0" -player_3_button_dright\default=false -player_3_button_dup="engine:keyboard,code:16777235,toggle:0" -player_3_button_dup\default=false -player_3_button_home="engine:keyboard,code:0,toggle:0" -player_3_button_home\default=false -player_3_button_l="engine:keyboard,code:81,toggle:0" -player_3_button_l\default=false -player_3_button_lstick="engine:keyboard,code:70,toggle:0" -player_3_button_lstick\default=false -player_3_button_minus="engine:keyboard,code:78,toggle:0" -player_3_button_minus\default=false -player_3_button_plus="engine:keyboard,code:77,toggle:0" -player_3_button_plus\default=false -player_3_button_r="engine:keyboard,code:69,toggle:0" -player_3_button_r\default=false -player_3_button_rstick="engine:keyboard,code:71,toggle:0" -player_3_button_rstick\default=false -player_3_button_screenshot="engine:keyboard,code:0,toggle:0" -player_3_button_screenshot\default=false -player_3_button_sl="engine:keyboard,code:81,toggle:0" -player_3_button_sl\default=false -player_3_button_sr="engine:keyboard,code:69,toggle:0" -player_3_button_sr\default=false -player_3_button_x="engine:keyboard,code:86,toggle:0" -player_3_button_x\default=false -player_3_button_y="engine:keyboard,code:90,toggle:0" -player_3_button_y\default=false -player_3_button_zl="engine:keyboard,code:82,toggle:0" -player_3_button_zl\default=false -player_3_button_zr="engine:keyboard,code:84,toggle:0" -player_3_button_zr\default=false +player_3_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_3_button_ddown\default=true +player_3_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_3_button_dleft\default=true +player_3_button_dright="toggle:0,code:16777236,engine:keyboard" +player_3_button_dright\default=true +player_3_button_dup="toggle:0,code:16777235,engine:keyboard" +player_3_button_dup\default=true +player_3_button_home="toggle:0,code:0,engine:keyboard" +player_3_button_home\default=true +player_3_button_l="toggle:0,code:81,engine:keyboard" +player_3_button_l\default=true +player_3_button_lstick="toggle:0,code:70,engine:keyboard" +player_3_button_lstick\default=true +player_3_button_minus="toggle:0,code:78,engine:keyboard" +player_3_button_minus\default=true +player_3_button_plus="toggle:0,code:77,engine:keyboard" +player_3_button_plus\default=true +player_3_button_r="toggle:0,code:69,engine:keyboard" +player_3_button_r\default=true +player_3_button_rstick="toggle:0,code:71,engine:keyboard" +player_3_button_rstick\default=true +player_3_button_screenshot="toggle:0,code:0,engine:keyboard" +player_3_button_screenshot\default=true +player_3_button_sl="toggle:0,code:81,engine:keyboard" +player_3_button_sl\default=true +player_3_button_sr="toggle:0,code:69,engine:keyboard" +player_3_button_sr\default=true +player_3_button_x="toggle:0,code:86,engine:keyboard" +player_3_button_x\default=true +player_3_button_y="toggle:0,code:90,engine:keyboard" +player_3_button_y\default=true +player_3_button_zl="toggle:0,code:82,engine:keyboard" +player_3_button_zl\default=true +player_3_button_zr="toggle:0,code:84,engine:keyboard" +player_3_button_zr\default=true player_3_connected=false player_3_connected\default=true -player_3_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_3_lstick\default=false -player_3_motionleft="engine:keyboard,code:55,toggle:0" -player_3_motionleft\default=false -player_3_motionright="engine:keyboard,code:56,toggle:0" -player_3_motionright\default=false -player_3_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_3_rstick\default=false +player_3_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_3_lstick\default=true +player_3_motionleft="toggle:0,code:55,engine:keyboard" +player_3_motionleft\default=true +player_3_motionright="toggle:0,code:56,engine:keyboard" +player_3_motionright\default=true +player_3_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_3_rstick\default=true player_3_type=0 player_3_type\default=true player_3_vibration_enabled=true @@ -342,60 +345,60 @@ player_4_body_color_left=4278893030 player_4_body_color_left\default=false player_4_body_color_right=4294917160 player_4_body_color_right\default=false -player_4_button_a="engine:keyboard,code:67,toggle:0" -player_4_button_a\default=false -player_4_button_b="engine:keyboard,code:88,toggle:0" -player_4_button_b\default=false +player_4_button_a="toggle:0,code:67,engine:keyboard" +player_4_button_a\default=true +player_4_button_b="toggle:0,code:88,engine:keyboard" +player_4_button_b\default=true player_4_button_color_left=4278197790 player_4_button_color_left\default=false player_4_button_color_right=4280158730 player_4_button_color_right\default=false -player_4_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_4_button_ddown\default=false -player_4_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_4_button_dleft\default=false -player_4_button_dright="engine:keyboard,code:16777236,toggle:0" -player_4_button_dright\default=false -player_4_button_dup="engine:keyboard,code:16777235,toggle:0" -player_4_button_dup\default=false -player_4_button_home="engine:keyboard,code:0,toggle:0" -player_4_button_home\default=false -player_4_button_l="engine:keyboard,code:81,toggle:0" -player_4_button_l\default=false -player_4_button_lstick="engine:keyboard,code:70,toggle:0" -player_4_button_lstick\default=false -player_4_button_minus="engine:keyboard,code:78,toggle:0" -player_4_button_minus\default=false -player_4_button_plus="engine:keyboard,code:77,toggle:0" -player_4_button_plus\default=false -player_4_button_r="engine:keyboard,code:69,toggle:0" -player_4_button_r\default=false -player_4_button_rstick="engine:keyboard,code:71,toggle:0" -player_4_button_rstick\default=false -player_4_button_screenshot="engine:keyboard,code:0,toggle:0" -player_4_button_screenshot\default=false -player_4_button_sl="engine:keyboard,code:81,toggle:0" -player_4_button_sl\default=false -player_4_button_sr="engine:keyboard,code:69,toggle:0" -player_4_button_sr\default=false -player_4_button_x="engine:keyboard,code:86,toggle:0" -player_4_button_x\default=false -player_4_button_y="engine:keyboard,code:90,toggle:0" -player_4_button_y\default=false -player_4_button_zl="engine:keyboard,code:82,toggle:0" -player_4_button_zl\default=false -player_4_button_zr="engine:keyboard,code:84,toggle:0" -player_4_button_zr\default=false +player_4_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_4_button_ddown\default=true +player_4_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_4_button_dleft\default=true +player_4_button_dright="toggle:0,code:16777236,engine:keyboard" +player_4_button_dright\default=true +player_4_button_dup="toggle:0,code:16777235,engine:keyboard" +player_4_button_dup\default=true +player_4_button_home="toggle:0,code:0,engine:keyboard" +player_4_button_home\default=true +player_4_button_l="toggle:0,code:81,engine:keyboard" +player_4_button_l\default=true +player_4_button_lstick="toggle:0,code:70,engine:keyboard" +player_4_button_lstick\default=true +player_4_button_minus="toggle:0,code:78,engine:keyboard" +player_4_button_minus\default=true +player_4_button_plus="toggle:0,code:77,engine:keyboard" +player_4_button_plus\default=true +player_4_button_r="toggle:0,code:69,engine:keyboard" +player_4_button_r\default=true +player_4_button_rstick="toggle:0,code:71,engine:keyboard" +player_4_button_rstick\default=true +player_4_button_screenshot="toggle:0,code:0,engine:keyboard" +player_4_button_screenshot\default=true +player_4_button_sl="toggle:0,code:81,engine:keyboard" +player_4_button_sl\default=true +player_4_button_sr="toggle:0,code:69,engine:keyboard" +player_4_button_sr\default=true +player_4_button_x="toggle:0,code:86,engine:keyboard" +player_4_button_x\default=true +player_4_button_y="toggle:0,code:90,engine:keyboard" +player_4_button_y\default=true +player_4_button_zl="toggle:0,code:82,engine:keyboard" +player_4_button_zl\default=true +player_4_button_zr="toggle:0,code:84,engine:keyboard" +player_4_button_zr\default=true player_4_connected=false player_4_connected\default=true -player_4_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_4_lstick\default=false -player_4_motionleft="engine:keyboard,code:55,toggle:0" -player_4_motionleft\default=false -player_4_motionright="engine:keyboard,code:56,toggle:0" -player_4_motionright\default=false -player_4_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_4_rstick\default=false +player_4_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_4_lstick\default=true +player_4_motionleft="toggle:0,code:55,engine:keyboard" +player_4_motionleft\default=true +player_4_motionright="toggle:0,code:56,engine:keyboard" +player_4_motionright\default=true +player_4_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_4_rstick\default=true player_4_type=0 player_4_type\default=true player_4_vibration_enabled=true @@ -406,60 +409,60 @@ player_5_body_color_left=4278893030 player_5_body_color_left\default=false player_5_body_color_right=4294917160 player_5_body_color_right\default=false -player_5_button_a="engine:keyboard,code:67,toggle:0" -player_5_button_a\default=false -player_5_button_b="engine:keyboard,code:88,toggle:0" -player_5_button_b\default=false +player_5_button_a="toggle:0,code:67,engine:keyboard" +player_5_button_a\default=true +player_5_button_b="toggle:0,code:88,engine:keyboard" +player_5_button_b\default=true player_5_button_color_left=4278197790 player_5_button_color_left\default=false player_5_button_color_right=4280158730 player_5_button_color_right\default=false -player_5_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_5_button_ddown\default=false -player_5_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_5_button_dleft\default=false -player_5_button_dright="engine:keyboard,code:16777236,toggle:0" -player_5_button_dright\default=false -player_5_button_dup="engine:keyboard,code:16777235,toggle:0" -player_5_button_dup\default=false -player_5_button_home="engine:keyboard,code:0,toggle:0" -player_5_button_home\default=false -player_5_button_l="engine:keyboard,code:81,toggle:0" -player_5_button_l\default=false -player_5_button_lstick="engine:keyboard,code:70,toggle:0" -player_5_button_lstick\default=false -player_5_button_minus="engine:keyboard,code:78,toggle:0" -player_5_button_minus\default=false -player_5_button_plus="engine:keyboard,code:77,toggle:0" -player_5_button_plus\default=false -player_5_button_r="engine:keyboard,code:69,toggle:0" -player_5_button_r\default=false -player_5_button_rstick="engine:keyboard,code:71,toggle:0" -player_5_button_rstick\default=false -player_5_button_screenshot="engine:keyboard,code:0,toggle:0" -player_5_button_screenshot\default=false -player_5_button_sl="engine:keyboard,code:81,toggle:0" -player_5_button_sl\default=false -player_5_button_sr="engine:keyboard,code:69,toggle:0" -player_5_button_sr\default=false -player_5_button_x="engine:keyboard,code:86,toggle:0" -player_5_button_x\default=false -player_5_button_y="engine:keyboard,code:90,toggle:0" -player_5_button_y\default=false -player_5_button_zl="engine:keyboard,code:82,toggle:0" -player_5_button_zl\default=false -player_5_button_zr="engine:keyboard,code:84,toggle:0" -player_5_button_zr\default=false +player_5_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_5_button_ddown\default=true +player_5_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_5_button_dleft\default=true +player_5_button_dright="toggle:0,code:16777236,engine:keyboard" +player_5_button_dright\default=true +player_5_button_dup="toggle:0,code:16777235,engine:keyboard" +player_5_button_dup\default=true +player_5_button_home="toggle:0,code:0,engine:keyboard" +player_5_button_home\default=true +player_5_button_l="toggle:0,code:81,engine:keyboard" +player_5_button_l\default=true +player_5_button_lstick="toggle:0,code:70,engine:keyboard" +player_5_button_lstick\default=true +player_5_button_minus="toggle:0,code:78,engine:keyboard" +player_5_button_minus\default=true +player_5_button_plus="toggle:0,code:77,engine:keyboard" +player_5_button_plus\default=true +player_5_button_r="toggle:0,code:69,engine:keyboard" +player_5_button_r\default=true +player_5_button_rstick="toggle:0,code:71,engine:keyboard" +player_5_button_rstick\default=true +player_5_button_screenshot="toggle:0,code:0,engine:keyboard" +player_5_button_screenshot\default=true +player_5_button_sl="toggle:0,code:81,engine:keyboard" +player_5_button_sl\default=true +player_5_button_sr="toggle:0,code:69,engine:keyboard" +player_5_button_sr\default=true +player_5_button_x="toggle:0,code:86,engine:keyboard" +player_5_button_x\default=true +player_5_button_y="toggle:0,code:90,engine:keyboard" +player_5_button_y\default=true +player_5_button_zl="toggle:0,code:82,engine:keyboard" +player_5_button_zl\default=true +player_5_button_zr="toggle:0,code:84,engine:keyboard" +player_5_button_zr\default=true player_5_connected=false player_5_connected\default=true -player_5_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_5_lstick\default=false -player_5_motionleft="engine:keyboard,code:55,toggle:0" -player_5_motionleft\default=false -player_5_motionright="engine:keyboard,code:56,toggle:0" -player_5_motionright\default=false -player_5_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_5_rstick\default=false +player_5_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_5_lstick\default=true +player_5_motionleft="toggle:0,code:55,engine:keyboard" +player_5_motionleft\default=true +player_5_motionright="toggle:0,code:56,engine:keyboard" +player_5_motionright\default=true +player_5_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_5_rstick\default=true player_5_type=0 player_5_type\default=true player_5_vibration_enabled=true @@ -470,60 +473,60 @@ player_6_body_color_left=4278893030 player_6_body_color_left\default=false player_6_body_color_right=4294917160 player_6_body_color_right\default=false -player_6_button_a="engine:keyboard,code:67,toggle:0" -player_6_button_a\default=false -player_6_button_b="engine:keyboard,code:88,toggle:0" -player_6_button_b\default=false +player_6_button_a="toggle:0,code:67,engine:keyboard" +player_6_button_a\default=true +player_6_button_b="toggle:0,code:88,engine:keyboard" +player_6_button_b\default=true player_6_button_color_left=4278197790 player_6_button_color_left\default=false player_6_button_color_right=4280158730 player_6_button_color_right\default=false -player_6_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_6_button_ddown\default=false -player_6_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_6_button_dleft\default=false -player_6_button_dright="engine:keyboard,code:16777236,toggle:0" -player_6_button_dright\default=false -player_6_button_dup="engine:keyboard,code:16777235,toggle:0" -player_6_button_dup\default=false -player_6_button_home="engine:keyboard,code:0,toggle:0" -player_6_button_home\default=false -player_6_button_l="engine:keyboard,code:81,toggle:0" -player_6_button_l\default=false -player_6_button_lstick="engine:keyboard,code:70,toggle:0" -player_6_button_lstick\default=false -player_6_button_minus="engine:keyboard,code:78,toggle:0" -player_6_button_minus\default=false -player_6_button_plus="engine:keyboard,code:77,toggle:0" -player_6_button_plus\default=false -player_6_button_r="engine:keyboard,code:69,toggle:0" -player_6_button_r\default=false -player_6_button_rstick="engine:keyboard,code:71,toggle:0" -player_6_button_rstick\default=false -player_6_button_screenshot="engine:keyboard,code:0,toggle:0" -player_6_button_screenshot\default=false -player_6_button_sl="engine:keyboard,code:81,toggle:0" -player_6_button_sl\default=false -player_6_button_sr="engine:keyboard,code:69,toggle:0" -player_6_button_sr\default=false -player_6_button_x="engine:keyboard,code:86,toggle:0" -player_6_button_x\default=false -player_6_button_y="engine:keyboard,code:90,toggle:0" -player_6_button_y\default=false -player_6_button_zl="engine:keyboard,code:82,toggle:0" -player_6_button_zl\default=false -player_6_button_zr="engine:keyboard,code:84,toggle:0" -player_6_button_zr\default=false +player_6_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_6_button_ddown\default=true +player_6_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_6_button_dleft\default=true +player_6_button_dright="toggle:0,code:16777236,engine:keyboard" +player_6_button_dright\default=true +player_6_button_dup="toggle:0,code:16777235,engine:keyboard" +player_6_button_dup\default=true +player_6_button_home="toggle:0,code:0,engine:keyboard" +player_6_button_home\default=true +player_6_button_l="toggle:0,code:81,engine:keyboard" +player_6_button_l\default=true +player_6_button_lstick="toggle:0,code:70,engine:keyboard" +player_6_button_lstick\default=true +player_6_button_minus="toggle:0,code:78,engine:keyboard" +player_6_button_minus\default=true +player_6_button_plus="toggle:0,code:77,engine:keyboard" +player_6_button_plus\default=true +player_6_button_r="toggle:0,code:69,engine:keyboard" +player_6_button_r\default=true +player_6_button_rstick="toggle:0,code:71,engine:keyboard" +player_6_button_rstick\default=true +player_6_button_screenshot="toggle:0,code:0,engine:keyboard" +player_6_button_screenshot\default=true +player_6_button_sl="toggle:0,code:81,engine:keyboard" +player_6_button_sl\default=true +player_6_button_sr="toggle:0,code:69,engine:keyboard" +player_6_button_sr\default=true +player_6_button_x="toggle:0,code:86,engine:keyboard" +player_6_button_x\default=true +player_6_button_y="toggle:0,code:90,engine:keyboard" +player_6_button_y\default=true +player_6_button_zl="toggle:0,code:82,engine:keyboard" +player_6_button_zl\default=true +player_6_button_zr="toggle:0,code:84,engine:keyboard" +player_6_button_zr\default=true player_6_connected=false player_6_connected\default=true -player_6_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_6_lstick\default=false -player_6_motionleft="engine:keyboard,code:55,toggle:0" -player_6_motionleft\default=false -player_6_motionright="engine:keyboard,code:56,toggle:0" -player_6_motionright\default=false -player_6_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_6_rstick\default=false +player_6_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_6_lstick\default=true +player_6_motionleft="toggle:0,code:55,engine:keyboard" +player_6_motionleft\default=true +player_6_motionright="toggle:0,code:56,engine:keyboard" +player_6_motionright\default=true +player_6_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_6_rstick\default=true player_6_type=0 player_6_type\default=true player_6_vibration_enabled=true @@ -534,60 +537,60 @@ player_7_body_color_left=4278893030 player_7_body_color_left\default=false player_7_body_color_right=4294917160 player_7_body_color_right\default=false -player_7_button_a="engine:keyboard,code:67,toggle:0" -player_7_button_a\default=false -player_7_button_b="engine:keyboard,code:88,toggle:0" -player_7_button_b\default=false +player_7_button_a="toggle:0,code:67,engine:keyboard" +player_7_button_a\default=true +player_7_button_b="toggle:0,code:88,engine:keyboard" +player_7_button_b\default=true player_7_button_color_left=4278197790 player_7_button_color_left\default=false player_7_button_color_right=4280158730 player_7_button_color_right\default=false -player_7_button_ddown="engine:keyboard,code:16777237,toggle:0" -player_7_button_ddown\default=false -player_7_button_dleft="engine:keyboard,code:16777234,toggle:0" -player_7_button_dleft\default=false -player_7_button_dright="engine:keyboard,code:16777236,toggle:0" -player_7_button_dright\default=false -player_7_button_dup="engine:keyboard,code:16777235,toggle:0" -player_7_button_dup\default=false -player_7_button_home="engine:keyboard,code:0,toggle:0" -player_7_button_home\default=false -player_7_button_l="engine:keyboard,code:81,toggle:0" -player_7_button_l\default=false -player_7_button_lstick="engine:keyboard,code:70,toggle:0" -player_7_button_lstick\default=false -player_7_button_minus="engine:keyboard,code:78,toggle:0" -player_7_button_minus\default=false -player_7_button_plus="engine:keyboard,code:77,toggle:0" -player_7_button_plus\default=false -player_7_button_r="engine:keyboard,code:69,toggle:0" -player_7_button_r\default=false -player_7_button_rstick="engine:keyboard,code:71,toggle:0" -player_7_button_rstick\default=false -player_7_button_screenshot="engine:keyboard,code:0,toggle:0" -player_7_button_screenshot\default=false -player_7_button_sl="engine:keyboard,code:81,toggle:0" -player_7_button_sl\default=false -player_7_button_sr="engine:keyboard,code:69,toggle:0" -player_7_button_sr\default=false -player_7_button_x="engine:keyboard,code:86,toggle:0" -player_7_button_x\default=false -player_7_button_y="engine:keyboard,code:90,toggle:0" -player_7_button_y\default=false -player_7_button_zl="engine:keyboard,code:82,toggle:0" -player_7_button_zl\default=false -player_7_button_zr="engine:keyboard,code:84,toggle:0" -player_7_button_zr\default=false +player_7_button_ddown="toggle:0,code:16777237,engine:keyboard" +player_7_button_ddown\default=true +player_7_button_dleft="toggle:0,code:16777234,engine:keyboard" +player_7_button_dleft\default=true +player_7_button_dright="toggle:0,code:16777236,engine:keyboard" +player_7_button_dright\default=true +player_7_button_dup="toggle:0,code:16777235,engine:keyboard" +player_7_button_dup\default=true +player_7_button_home="toggle:0,code:0,engine:keyboard" +player_7_button_home\default=true +player_7_button_l="toggle:0,code:81,engine:keyboard" +player_7_button_l\default=true +player_7_button_lstick="toggle:0,code:70,engine:keyboard" +player_7_button_lstick\default=true +player_7_button_minus="toggle:0,code:78,engine:keyboard" +player_7_button_minus\default=true +player_7_button_plus="toggle:0,code:77,engine:keyboard" +player_7_button_plus\default=true +player_7_button_r="toggle:0,code:69,engine:keyboard" +player_7_button_r\default=true +player_7_button_rstick="toggle:0,code:71,engine:keyboard" +player_7_button_rstick\default=true +player_7_button_screenshot="toggle:0,code:0,engine:keyboard" +player_7_button_screenshot\default=true +player_7_button_sl="toggle:0,code:81,engine:keyboard" +player_7_button_sl\default=true +player_7_button_sr="toggle:0,code:69,engine:keyboard" +player_7_button_sr\default=true +player_7_button_x="toggle:0,code:86,engine:keyboard" +player_7_button_x\default=true +player_7_button_y="toggle:0,code:90,engine:keyboard" +player_7_button_y\default=true +player_7_button_zl="toggle:0,code:82,engine:keyboard" +player_7_button_zl\default=true +player_7_button_zr="toggle:0,code:84,engine:keyboard" +player_7_button_zr\default=true player_7_connected=false player_7_connected\default=true -player_7_lstick="engine:analog_from_button,up:toggle$00$1code$087$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,modifier:toggle$00$1code$016777248$1engine$0keyboard,modifier_scale:0.500000" -player_7_lstick\default=false -player_7_motionleft="engine:keyboard,code:55,toggle:0" -player_7_motionleft\default=false -player_7_motionright="engine:keyboard,code:56,toggle:0" -player_7_motionright\default=false -player_7_rstick="engine:analog_from_button,up:toggle$00$1code$073$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,modifier:toggle$00$1code$00$1engine$0keyboard,modifier_scale:0.500000" -player_7_rstick\default=false +player_7_lstick="modifier_scale:0.500000,modifier:toggle$00$1code$016777248$1engine$0keyboard,right:toggle$00$1code$068$1engine$0keyboard,left:toggle$00$1code$065$1engine$0keyboard,down:toggle$00$1code$083$1engine$0keyboard,up:toggle$00$1code$087$1engine$0keyboard,engine:analog_from_button" +player_7_lstick\default=true +player_7_motionleft="toggle:0,code:55,engine:keyboard" +player_7_motionleft\default=true +player_7_motionright="toggle:0,code:56,engine:keyboard" +player_7_motionright\default=true +player_7_rstick="modifier_scale:0.500000,modifier:toggle$00$1code$00$1engine$0keyboard,right:toggle$00$1code$076$1engine$0keyboard,left:toggle$00$1code$074$1engine$0keyboard,down:toggle$00$1code$075$1engine$0keyboard,up:toggle$00$1code$073$1engine$0keyboard,engine:analog_from_button" +player_7_rstick\default=true player_7_type=0 player_7_type\default=true player_7_vibration_enabled=true @@ -746,14 +749,14 @@ touchscreen_enabled=true touchscreen_enabled\default=true udp_input_servers=127.0.0.1:26760 udp_input_servers\default=true -use_docked_mode=false +use_docked_mode=true use_docked_mode\default=true vibration_enabled=true vibration_enabled\default=true [Core] -use_extended_memory_layout=true -use_extended_memory_layout\default=false +use_extended_memory_layout=false +use_extended_memory_layout\default=true use_multi_core=true use_multi_core\default=true @@ -802,7 +805,6 @@ cpuopt_unsafe_unfuse_fma=true cpuopt_unsafe_unfuse_fma\default=true [Data%20Storage] -="======" dump_directory=/var/data/yuzu/dump dump_directory\default=true gamecard_current_game=false @@ -813,9 +815,9 @@ gamecard_path= gamecard_path\default=true load_directory=/var/data/yuzu/load load_directory\default=true -nand_directory=/var/data/yuzu/nand +nand_directory=RETRODECKHOMEDIR/saves/switch/yuzu/nand nand_directory\default=true -sdmc_directory=/var/data/yuzu/sdmc +sdmc_directory=RETRODECKHOMEDIR/saves/switch/yuzu/sdmc sdmc_directory\default=true tas_directory=/var/data/yuzu/tas tas_directory\default=true @@ -825,6 +827,8 @@ use_virtual_sd\default=true [Debugging] create_crash_dumps=false create_crash_dumps\default=true +disable_macro_hle=false +disable_macro_hle\default=true disable_macro_jit=false disable_macro_jit\default=true dump_exefs=false @@ -861,30 +865,6 @@ log_filter\default=true use_dev_keys=false use_dev_keys\default=true -[Multiplayer] -game_id=0 -game_id\default=true -host_type=0 -host_type\default=true -ip= -ip\default=true -ip_ban_list\size=0 -max_player=8 -max_player\default=true -nickname=RetroDECK -nickname\default=true -port=24872 -port\default=true -room_description= -room_description\default=true -room_name= -room_name\default=true -room_nickname= -room_nickname\default=true -room_port=24872 -room_port\default=true -username_ban_list\size=0 - [Renderer] accelerate_astc=true accelerate_astc\default=true @@ -892,6 +872,8 @@ anti_aliasing=0 anti_aliasing\default=true aspect_ratio=0 aspect_ratio\default=true +async_astc=false +async_astc\default=true backend=1 backend\default=true bg_blue=0 @@ -904,24 +886,24 @@ debug=false debug\default=true disable_shader_loop_safety_checks=false disable_shader_loop_safety_checks\default=true -fps_cap=1000 -fps_cap\default=true +force_max_clock=false +force_max_clock\default=true fsr_sharpening_slider=25 fsr_sharpening_slider\default=true fullscreen_mode=1 fullscreen_mode\default=true -gpu_accuracy=0 -gpu_accuracy\default=false -max_anisotropy=1 -max_anisotropy\default=false +gpu_accuracy=1 +gpu_accuracy\default=true +max_anisotropy=0 +max_anisotropy\default=true nsight_aftermath=false nsight_aftermath\default=true nvdec_emulation=2 nvdec_emulation\default=true resolution_setup=2 resolution_setup\default=true -scaling_filter=0 -scaling_filter\default=false +scaling_filter=1 +scaling_filter\default=true shader_backend=0 shader_backend\default=true shader_feedback=false @@ -930,23 +912,22 @@ speed_limit=100 speed_limit\default=true use_asynchronous_gpu_emulation=true use_asynchronous_gpu_emulation\default=true -use_asynchronous_shaders=true -use_asynchronous_shaders\default=false +use_asynchronous_shaders=false +use_asynchronous_shaders\default=true use_disk_shader_cache=true use_disk_shader_cache\default=true use_fast_gpu_time=true use_fast_gpu_time\default=true use_pessimistic_flushes=false use_pessimistic_flushes\default=true -use_speed_limit=true -use_speed_limit\default=true -use_vsync=false -use_vsync\default=false +use_vsync=true +use_vsync\default=true +use_vulkan_driver_pipeline_cache=true +use_vulkan_driver_pipeline_cache\default=true vulkan_device=0 vulkan_device\default=true [Services] -="======" network_interface=wlan0 network_interface\default=false @@ -957,8 +938,10 @@ custom_rtc=0 custom_rtc\default=true custom_rtc_enabled=false custom_rtc_enabled\default=true -language_index=1 -language_index\default=true +device_name=RetroDECK +device_name\default=false +language_index=12 +language_index\default=false region_index=2 region_index\default=false rng_seed=0 @@ -980,7 +963,7 @@ Multiplayer\ip\default=true Multiplayer\ip_ban_list\size=0 Multiplayer\max_player=8 Multiplayer\max_player\default=true -Multiplayer\nickname=RetroDECK +Multiplayer\nickname= Multiplayer\nickname\default=true Multiplayer\port=24872 Multiplayer\port\default=true @@ -1012,147 +995,192 @@ Paths\gamedirs\4\deep_scan=false Paths\gamedirs\4\deep_scan\default=true Paths\gamedirs\4\expanded=true Paths\gamedirs\4\expanded\default=true -Paths\gamedirs\4\path=~/retrodeck/roms/switch +Paths\gamedirs\4\path=RETRODECKHOMEDIR/roms/switch Paths\gamedirs\size=4 Paths\language=en Paths\language\default=false -Paths\romsPath=~/retrodeck/roms/switch +Paths\recentFiles=@Invalid() +Paths\romsPath= Paths\symbolsPath= -Screenshots\enable_screenshot_save_as=false -Screenshots\enable_screenshot_save_as\default=false -Screenshots\screenshot_path=~/retrodeck/screenshots +Screenshots\enable_screenshot_save_as=true +Screenshots\enable_screenshot_save_as\default=true +Screenshots\screenshot_path=RETRODECKHOMEDIR/screenshots/ Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context=1 Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context\default=true -Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq= -Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq=Home+Dpad_Right +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq=Ctrl+M Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat=false +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat\default=true Shortcuts\Main%20Window\Audio%20Volume%20Down\Context=2 Shortcuts\Main%20Window\Audio%20Volume%20Down\Context\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq= -Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq=Home+Dpad_Down +Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq=- Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat=true +Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat\default=true Shortcuts\Main%20Window\Audio%20Volume%20Up\Context=2 Shortcuts\Main%20Window\Audio%20Volume%20Up\Context\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq= -Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq=Home+Dpad_Up +Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq\default=true Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq="=" Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat=true +Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat\default=true Shortcuts\Main%20Window\Capture%20Screenshot\Context=3 Shortcuts\Main%20Window\Capture%20Screenshot\Context\default=true -Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq=Home+A -Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq=Screenshot +Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq\default=true Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+P Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=true +Shortcuts\Main%20Window\Capture%20Screenshot\Repeat=false +Shortcuts\Main%20Window\Capture%20Screenshot\Repeat\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context=2 Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq=Home+L Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq=F8 Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat=false +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\Context=2 Shortcuts\Main%20Window\Change%20Docked%20Mode\Context\default=true -Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq= -Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq=Home+X +Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq=F10 Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat=false +Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context=2 Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq=Home+R Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq=F9 Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq\default=true +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat=false +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1 Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq=Home+B Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq\default=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=F4 Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat=false +Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Exit%20Fullscreen\Context=1 Shortcuts\Main%20Window\Exit%20Fullscreen\Context\default=true -Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq= -Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq=Home+A +Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq\default=false Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Esc Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat=false +Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat\default=true Shortcuts\Main%20Window\Exit%20yuzu\Context=1 Shortcuts\Main%20Window\Exit%20yuzu\Context\default=true -Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq=Home+Plus -Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Exit%20yuzu\KeySeq= -Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=false +Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq=Home+Minus +Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=true +Shortcuts\Main%20Window\Exit%20yuzu\KeySeq=Ctrl+Q +Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20yuzu\Repeat=false +Shortcuts\Main%20Window\Exit%20yuzu\Repeat\default=true Shortcuts\Main%20Window\Fullscreen\Context=1 Shortcuts\Main%20Window\Fullscreen\Context\default=true -Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq=Home+X +Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq= Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq\default=false Shortcuts\Main%20Window\Fullscreen\KeySeq=F11 Shortcuts\Main%20Window\Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Fullscreen\Repeat=false +Shortcuts\Main%20Window\Fullscreen\Repeat\default=true Shortcuts\Main%20Window\Load%20File\Context=3 Shortcuts\Main%20Window\Load%20File\Context\default=true Shortcuts\Main%20Window\Load%20File\Controller_KeySeq= Shortcuts\Main%20Window\Load%20File\Controller_KeySeq\default=true Shortcuts\Main%20Window\Load%20File\KeySeq=Ctrl+O Shortcuts\Main%20Window\Load%20File\KeySeq\default=true +Shortcuts\Main%20Window\Load%20File\Repeat=false +Shortcuts\Main%20Window\Load%20File\Repeat\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context=3 Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq=Home+Y Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq\default=false Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=F2 Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq\default=true +Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat=false +Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat\default=true Shortcuts\Main%20Window\Restart%20Emulation\Context=1 Shortcuts\Main%20Window\Restart%20Emulation\Context\default=true Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq\default=true Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=F6 Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Restart%20Emulation\Repeat=false +Shortcuts\Main%20Window\Restart%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Stop%20Emulation\Context=1 Shortcuts\Main%20Window\Stop%20Emulation\Context\default=true Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq\default=true Shortcuts\Main%20Window\Stop%20Emulation\KeySeq=F5 Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Stop%20Emulation\Repeat=false +Shortcuts\Main%20Window\Stop%20Emulation\Repeat\default=true Shortcuts\Main%20Window\TAS%20Record\Context=2 Shortcuts\Main%20Window\TAS%20Record\Context\default=true Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Record\KeySeq=Ctrl+F7 Shortcuts\Main%20Window\TAS%20Record\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Record\Repeat=false +Shortcuts\Main%20Window\TAS%20Record\Repeat\default=true Shortcuts\Main%20Window\TAS%20Reset\Context=2 Shortcuts\Main%20Window\TAS%20Reset\Context\default=true Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Reset\KeySeq=Ctrl+F6 Shortcuts\Main%20Window\TAS%20Reset\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Reset\Repeat=false +Shortcuts\Main%20Window\TAS%20Reset\Repeat\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\Context=2 Shortcuts\Main%20Window\TAS%20Start\Stop\Context\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq\default=true Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq=Ctrl+F5 Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat=false +Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat\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\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=Ctrl+F Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat=false +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context=2 Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq=Ctrl+U Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat=false +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context=2 Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq=Ctrl+F9 Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat=false +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq=Ctrl+S Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat=false +Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat\default=true UIGameList\cache_game_list=true UIGameList\cache_game_list\default=true UIGameList\favorites\size=0 @@ -1168,23 +1196,23 @@ UIGameList\row_2_text_id=2 UIGameList\row_2_text_id\default=true UIGameList\show_add_ons=true UIGameList\show_add_ons\default=true -UIGameList\show_compat=true -UIGameList\show_compat\default=false +UIGameList\show_compat=false +UIGameList\show_compat\default=true UIGameList\show_size=true UIGameList\show_size\default=true UIGameList\show_types=true UIGameList\show_types\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\x10\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\x64\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\x3T\0\0\x2\x14\0\0\0\0\0\0\0\0\0\0\x3T\0\0\x2\x14\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\0\0\0\x3T\0\0\x2\x14) -UILayout\geometryRenderWindow=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x4\xff\0\0\x2\xe3\0\0\0\0\0\0\0\x14\0\0\x4\xff\0\0\x2\xe3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x4\xff\0\0\x2\xe3) -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\x5\x2\0\0\0\x1\0\0\0\x1\0\0\0\x64\0\0\x4X\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\0\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\x1\x10\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\x4W\0\0\x2\x14\0\0\0\0\0\0\0\0\0\0\x4W\0\0\x2\x14\0\0\0\0\0\0\0\0\x4\xfd\0\0\0\0\0\0\0\0\0\0\x4W\0\0\x2\x14) +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\x1\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\0Y\0\xff\xff\xff\0\0\x3U\0\0\x1\xeb\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\x1\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\x4X\0\0\x1\xeb\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0) calloutFlags=1 calloutFlags\default=false -confirmClose=true -confirmClose\default=true +confirmClose=false +confirmClose\default=false disable_web_applet=false disable_web_applet\default=false displayTitleBars=true @@ -1193,8 +1221,8 @@ enable_discord_presence=true enable_discord_presence\default=true firstStart=false firstStart\default=false -fullscreen=true -fullscreen\default=false +fullscreen=false +fullscreen\default=true hideInactiveMouse=true hideInactiveMouse\default=true muteWhenInBackground=false @@ -1211,11 +1239,10 @@ showStatusBar=true showStatusBar\default=true singleWindowMode=true singleWindowMode\default=true -theme=colorful -theme\default=true +theme=colorful_dark +theme\default=false [WebService] -="======" enable_telemetry=false enable_telemetry\default=false web_api_url=https://api.yuzu-emu.org diff --git a/es-configs/es_find_rules.xml b/es-configs/es_find_rules.xml index 3e71b426..78791834 100644 --- a/es-configs/es_find_rules.xml +++ b/es-configs/es_find_rules.xml @@ -327,18 +327,6 @@ ~/bin/pcsx2*-Qt.AppImage - - - - PCSX2 - pcsx2 - net.pcsx2.PCSX2 - - - /var/lib/flatpak/exports/bin/net.pcsx2.PCSX2 - ~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2 - - diff --git a/es-configs/es_systems.xml b/es-configs/es_systems.xml index 63acdcc9..84a91903 100644 --- a/es-configs/es_systems.xml +++ b/es-configs/es_systems.xml @@ -1071,7 +1071,6 @@ %EMULATOR_PCSX2% -batch %ROM% .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 %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% - ps2 ps2 @@ -1614,10 +1613,10 @@ tools RetroDECK Tools - /var/config/retrodeck/tools + /app/tools .sh .SH bash %ROM% tools tools - \ No newline at end of file + diff --git a/es-configs/tools-gamelist.xml b/es-configs/tools-gamelist.xml index 23af3195..c1a8f052 100644 --- a/es-configs/tools-gamelist.xml +++ b/es-configs/tools-gamelist.xml @@ -7,4 +7,4 @@ true true - \ No newline at end of file + \ No newline at end of file diff --git a/functions.sh b/functions.sh index 98d33403..c3eacb90 100644 --- a/functions.sh +++ b/functions.sh @@ -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 \"" + 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 } \ No newline at end of file diff --git a/global.sh b/global.sh index 7bfd48fa..51bba9c0 100755 --- a/global.sh +++ b/global.sh @@ -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 diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml index 9445e34f..08eea1b1 100644 --- a/net.retrodeck.retrodeck.appdata.xml +++ b/net.retrodeck.retrodeck.appdata.xml @@ -36,15 +36,15 @@ -

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. +

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. 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!

BETA NOTICE: RetroDECK is still in Beta and the team is actively developing and adding more features.

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).

-

NOTE: Albeit RetroDECK could possibily work on every distro, it's supported only on Steam Deck.

+ 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.

INSTALLATION INSTRUCTIONS FOR THE STEAM DECK:

    @@ -54,18 +54,46 @@
  • 4. [OPTIONAL] Download Steam Grids graphics for RetroDECK with BoilR

-

For more detailed information check our wiki: - https://github.com/XargonWan/RetroDECK/wiki

-

If you want to sponsor the project: - https://www.patreon.com/RetroDECK

-

If you want to join the RetroDECK community check our: - Discord: https://discord.gg/Dz3szYsP8g - Reddit: https://www.reddit.com/r/RetroDECK/

+

For more detailed information check our wiki:

+

https://github.com/XargonWan/RetroDECK/wiki

+

If you want to sponsor the project:

+

https://www.patreon.com/RetroDECK

+

If you want to join the RetroDECK community check our:

+

Discord: https://discord.gg/Dz3szYsP8g

+

Reddit: https://www.reddit.com/r/RetroDECK/

If you want to help out with the project join the "i-want-to-help" channel on our Discord.

GPL-3.0 CC0-1.0 + + https://github.com/XargonWan/RetroDECK/releases/tag/0.6.3b + +

New features - General:

+
    +
  • Added support support for multiple file compression via CLI.
  • +
+

RetroDECK Configurator:

+
    +
  • Added support support for multiple file compression in the Configurator.
  • +
  • Added safety y/n prompts to the reset functions.
  • +
  • Fixed some missing layout changes.
  • +
  • Renamed "Reset All" to "Reset RetroDECK".
  • +
  • Moved configurator into the RO partition for futher enhancements.
  • +
+

Bug fixes and other changes:

+
    +
  • Fixed a bug in the compression tool with certain filenames with spaces.
  • +
  • Fixed a bug where some folders were recursively symlinked.
  • +
  • Fixed a bug where some emulator configs were not correctly deployed.
  • +
  • Fixed the Configurator BIOS tool looking in the wrong location (Thanks sofauxboho for the report!).
  • +
  • Fixed a manifest bug that caused a conflict between Dolphin and Primehack in certain scenarios.
  • +
  • Implemented new configurations for Yuzu and Citra thanks to the big config file changes in the latest emulator updates in both emulators.
  • +
  • Removed leftover files from Legacy PCSX2.
  • +
  • Removed the legacy "Reset Tools" command from Configurator and CLI.
  • +
+
+
https://github.com/XargonWan/RetroDECK/releases/tag/0.6.2b diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml index b03add64..7fd6917c 100644 --- a/net.retrodeck.retrodeck.yml +++ b/net.retrodeck.retrodeck.yml @@ -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 \ No newline at end of file diff --git a/post_update.sh b/post_update.sh index cc469cec..8b79912c 100644 --- a/post_update.sh +++ b/post_update.sh @@ -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 } \ No newline at end of file diff --git a/retrodeck.sh b/retrodeck.sh index 7222f481..4de1c492 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -20,7 +20,6 @@ Arguments: --configurator Starts the RetroDECK Configurator --compress Compresses target file to .chd format. Supports .cue, .iso and .gdi formats --reset-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 \"" - 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 diff --git a/tools/configurator.sh b/tools/configurator.sh index 1e9839bc..44f2869f 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -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 ;;