diff --git a/README.md b/README.md index f3c55c22..4a2ae22e 100644 --- a/README.md +++ b/README.md @@ -15,43 +15,43 @@ There are two ways of using EmuDeck: This option gives you all your games presented with their box arts as if they were a regular Steam Game. EmuDeck has preloaded configurations for Steam Rom Manager for the following systems: -| System | Emulator | Roms format | -| ------------------------- | ------------------------------------ | -------------------------------------------------------------------- | -| Atari 2600 | Retroarch Stella core | .7z .a26 .bin .zip | -| Atari Lynx | Retroarch Beetle Lynx core | .7z .lnx .bin .zip | -| GameBoy | Retroarch Gambatte core | .7z .gb .dmg .zip | -| GameBoy Color | Retroarch Gambatte core | .7z .gb .gbc .dmg .zip | -| GameBoy Advance | Retroarch mGBA core | .7z .gba .zip | -| Dreamcast | Retroarch FlyCast Core | .7z .cdi .chd .cue .gdi | -| Final Burn Neo | Retroarch Fbn core | .zip .7z | -| Mame 2003 Plus | Retroarch Mame 2003 Plus core | .zip | -| Mame 2010 | Retroarch Mame 2010 core | .zip | -| Mame Current | Retroarch Mame Current core | .zip | -| Neo Geo Pocket & Color | Retroarch Beetle NeoPop | .7z .ngp .ngc .bin .zip | -| Nintendo GameCube | Dolphin Standalone | .ciso .dol .elf .gcm .gcz .iso .nkit .iso .rvz .wad .wia | -| Nintendo DS | Retroarch melonDS core | .7z .nds .zip | -| Nintendo 3DS | Citra | .3ds .3dsx .app .axf .cii .cxi .elf .cia | -| Nintendo NES | Retroarch Nestopia core | .7z .nes .fds .unf .unif .zip | -| Nintendo 64 | Retroarch Mupen64plus-Next | .7z .bin .n64 .ndd .u1 .v64 .z64 .zip | -| Nintendo GameCube | Dolphin Standalone | .ciso .dol .elf .gcm .gcz .iso .nkit .iso .rvz .wad .wia .wbfs | -| Nintendo Wii | Dolphin Standalone | .ciso .dol .elf .gcm .gcz .iso .json .nkit .iso .rvz .wad .wia .wbfs | -| Nintendo Wii U | Cemu | .rpx .wud .wux .elf .iso .wad | -| Nintendo Switch | Yuzu | .kp .nca .nro .nso .nsp .xci | -| Super Nintendo | Retroarch Snes9x Current core | .7z .bs .fig .sfc .smc .swx .zip | -| Super Nintendo Widescreen | Retroarch bsnes hd beta Current core | .7z .bs .fig .sfc .smc .swx .zip | -| PrimeHacks | Dolphin PrimeHacks | .ciso .dol .elf .gcm .gcz .iso .json .nkit .iso .rvz .wad .wia .wbfs | -| Playstation | DuckStation | .cue .chd .ecm .iso .m3u .mds .pbp | -| Playstation 2 | RPCSX2 | .bin .chd .cso .dump .gz .img .iso .mdf .nrg | -| Playstation 3 | RPCS3 | /PS3_GAME/USRDIR/eboot.bin | -| PSP | PPSSPP & PPSSPP Retroarch core | .7z .elf .cso .iso .pbp .prx | -| Sega 32X | Retroarch PicoDrive core | .7z .32x .bin .zip | -| Sega CD | Retroarch Genesis Plus GX core | .7z .32x .cue .chd .iso .zip | -| Sega Game Gear | Retroarch Genesis Plus GX core | .7z .gg .zip | -| Sega Genesis / Mega Drive | Retroarch Genesis Plus GX core | .7z .gen .md .smd .zip | -| Sega Genesis Widescreen | Retroarch Genesis Plus GX Wide core | .7z .gen .md .smd .zip | -| Sega Master System | Retroarch Genesis Plus GX core | .7z .gen .sms .zip | -| Sega Saturn | Retroarch Yabause core | .7z .cue .iso .chd .zip | -| Wonderswan & Color | Retroarch Beetle Cygne core | .7z .pc2 .ws .wsc .zip | +| System | Emulator | Roms format | File Required in the base of Emulation/bios (or special consideration) | +| ------------------------- | --------------------------------------------- | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Atari 2600 | Retroarch Stella core | .7z .a26 .bin .zip | | +| Atari Lynx | Retroarch Beetle Lynx core | .7z .lnx .bin .zip | | +| Final Burn Neo | Retroarch Fbn core | .zip .7z | Bioses will be searched through 3 folders :
\* the folder of the current romset
\* the Emulation/bios/fbneo/
\* the Emulation/bios/ | +| Mame 2003 Plus | Retroarch Mame 2003 Plus core | .zip | | +| Mame 2010 | Retroarch Mame 2010 core | .zip | | +| Mame Current | Retroarch Mame Current core | .zip | | +| Microsoft Xbox | Xemu | .iso (xiso formatted) | Emulation/bios:
mcpx\_1.0.bin
modified retail "COMPLEX 4627" BIOS

Emulation/saves/xemu:
xbox\_hdd.qcow2 | +| Neo Geo Pocket & Color | Retroarch Beetle NeoPop | .7z .ngp .ngc .bin .zip | | +| Nintendo 3DS | Citra | .3ds .3dsx .app .axf .cii .cxi .elf .cia(FOR INSTALL ONLY) | Title keys required for encrypted rom types | +| Nintendo 64 | Retroarch Mupen64plus-Next | .7z .bin .n64 .ndd .u1 .v64 .z64 .zip | | +| Nintendo DS | Retroarch melonDS core | .7z .nds .zip | bios7.bin
bios9.bin
firmware.bin | +| Nintendo GameBoy | Retroarch Gambatte core | .7z .gb .dmg .zip | | +| Nintendo GameBoy Advance | Retroarch mGBA core | .7z .gba .zip | | +| Nintendo GameBoy Color | Retroarch Gambatte core | .7z .gb .gbc .dmg .zip | | +| Nintendo GameCube | Dolphin Standalone | .ciso .dol .elf .gcm .gcz .iso .nkit.iso .rvz .wad .wia .wbfs | | +| Nintendo NES | Retroarch Nestopia core | .7z .nes .fds .unf .unif .zip | | +| Nintendo PrimeHack | PrimeHack (Metroid Prime specific) | .ciso .dol .elf .gcm .gcz .iso .json .nkit.iso .rvz .wad .wia .wbfs | | +| Nintendo Switch | Yuzu | .kp .nca .nro .nso .nsp .xci | Title keys required for encrypted rom types
firmware installation with valid mii data required for some games | +| Nintendo Wii | Dolphin Standalone | .ciso .dol .elf .gcm .gcz .iso .json .nkit.iso .rvz .wad .wia .wbfs | | +| Nintendo Wii U | Cemu | .rpx .wud .wux .elf .iso .wad | Title keys required for encrypted rom types | +| Sega 32X | Retroarch PicoDrive core | .7z .32x .bin .zip | | +| Sega CD | Retroarch Genesis Plus GX core | .7z .32x .cue .chd .iso .zip | bios\_CD\_E.bin
bios\_CD\_U.bin
bios\_CD\_J.bin | +| Sega Dreamcast | Retroarch FlyCast Core | .7z .cdi .chd .cue .gdi | dc/dc\_boot.bin | +| Sega Game Gear | Retroarch Genesis Plus GX core | .7z .gg .zip | | +| Sega Genesis / Mega Drive | Retroarch Genesis Plus GX core | .7z .gen .md .smd .zip | | +| Sega Genesis Widescreen | Retroarch Genesis Plus GX Wide core | .7z .gen .md .smd .zip | | +| Sega Master System | Retroarch Genesis Plus GX core | .7z .gen .sms .zip | | +| Sega Saturn | Retroarch Yabause core | .7z .cue .iso .chd .zip | sega\_101.bin
mpr-17933.bin | +| Sony Playstation | DuckStation Standalone
Retroarch Beetle HW | .cue .chd .ecm .iso .m3u .mds .pbp | scph5500.bin
scph5501.bin
scph5502.bin | +| Sony Playstation 2 | RPCSX2 | .bin .chd .cso .dump .gz .img .iso .mdf .nrg | Bios files are required. Here is an example set:
SCPH-70004\_BIOS\_V12\_EUR\_200.BIN
SCPH-70004\_BIOS\_V12\_EUR\_200.EROM
SCPH-70004\_BIOS\_V12\_EUR\_200.ROM1
SCPH-70004\_BIOS\_V12\_EUR\_200.ROM2 | +| Sony Playstation 3 | RPCS3 | /PS3\_GAME/USRDIR/eboot.bin | Firmware installation in the Emulator is required. | +| Sony Playstation Portable | PPSSPP Standalone
PPSSPP Retroarch core | .7z .elf .cso .iso .pbp .prx | The retroarch core requires ppsspp.zip in the bios folder.
You can obtain it from within RetroArch's downloader.
Standalone PPSSPP does not require anything special. | +| Super Nintendo | Retroarch Snes9x Current core | .7z .bs .fig .sfc .smc .swx .zip | | +| Super Nintendo Widescreen | Retroarch bsnes hd beta Current core | .7z .bs .fig .sfc .smc .swx .zip | | +| Wonderswan & Color | Retroarch Beetle Cygne core | .7z .pc2 .ws .wsc .zip | ## Using EmulationStation DE diff --git a/changelog.md b/changelog.md index f16f512b..1d02c06a 100644 --- a/changelog.md +++ b/changelog.md @@ -240,4 +240,25 @@ - Expert mode will ask about Bezels and Autosave again - Dolphin set as 16:9 by default on easy mode - Fix Sega Genesis missing extension and adds Commodore 64 -- Add support for holoISO \ No newline at end of file +- Add support for holoISO + +0.17.4 +- New user interface on install both on Easy and Expert modes +- Rom folder creation will respect user's custom symlinks +- When you first install EmuDeck an you Launch SteamRomManager we will get you back to GamingMode when closing SteamRomManager +- SRM is now located on Emulation/tools and will close Steam automatically for you. +- Fixed RPCS3 Controller not working on new install +- Updated Mupen64Plus-Next defaults for N64. Should be much better now. more accurate, faster, and look better. +- New tool added - proton-launch.sh (for all your non-steam windows app shenanigans, courtesy of Angel) +- Citra left trackpad used now as mouse instead of D-pad on our SteamInput template +- Fix Citra non exiting while pressing R5 +- PPSSPP Audio Fix when the Deck goes into Sleep Mode +- Fixed 3ds bad symlink for older installations +- PrimeHack Controller tweaks and performance gain +- Fix PCSX2 Turbo Mode +- Wii nkit.gcz support +- FBNeo fixes on SteamRomManager +- SD card is only available if one is inserted, writable, and supports symlinks +- Expert mode - Fixes RA Autosave selection +- Expert mode - Changed Cemu default controller to gamepad with gyro (gyro requires SteamDeckGyroDSU installation. See Expert mode for more details) +- Expert mode - You can now chose a custom install location. It will be tested for the ability to both write and link, and rejected if either fail. diff --git a/configs/info.cemu.Cemu/data/cemu/settings.xml b/configs/info.cemu.Cemu/data/cemu/settings.xml index 4defaa81..e95b170d 100644 --- a/configs/info.cemu.Cemu/data/cemu/settings.xml +++ b/configs/info.cemu.Cemu/data/cemu/settings.xml @@ -45,7 +45,6 @@ - Z:/run/media/mmcblk0p1/Emulation/roms/wiiu/roms diff --git a/configs/net.pcsx2.PCSX2/config/PCSX2/inis/PCSX2_vm.ini b/configs/net.pcsx2.PCSX2/config/PCSX2/inis/PCSX2_vm.ini index eb62a6a7..51a91aba 100644 --- a/configs/net.pcsx2.PCSX2/config/PCSX2/inis/PCSX2_vm.ini +++ b/configs/net.pcsx2.PCSX2/config/PCSX2/inis/PCSX2_vm.ini @@ -51,7 +51,7 @@ PreBlockCheckIOP=disabled VsyncQueueSize=2 FrameLimitEnable=enabled FrameSkipEnable=disabled -VsyncEnable=0 +VsyncEnable=1 FramerateNTSC=59.94 FrameratePAL=50 FramesToDraw=2 diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/DSUClient.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/DSUClient.ini index bd429a4e..48353009 100644 --- a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/DSUClient.ini +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/DSUClient.ini @@ -1,2 +1,3 @@ [Server] -Enabled = False +Enabled = True +Entries = steamdeckgyro:127.0.0.1:26760; diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini index e5c73c27..3f14e876 100644 --- a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini @@ -12,7 +12,7 @@ AudioStretchMaxLatency = 80 DPL2Decoder = False DPL2Quality = 2 DSPHLE = True -AutoDiscChange = False +AutoDiscChange = True EmulationSpeed = 1.00000000 EnableCheats = True OverrideRegionSettings = False @@ -44,3 +44,4 @@ UseBuiltinTitleDatabase = True UsePanicHandlers = False LanguageCode = en ThemeName = Clean +CursorVisibility = 0 diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini index 4cf061b0..cccbad10 100644 --- a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini @@ -29,3 +29,5 @@ ShaderCompilationMode = 2 WaitForShadersBeforeStarting = True MSAA = 0x00000001 SSAA = False +CacheHiresTextures = True +HiresTextures = True \ No newline at end of file diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/GCPad/base.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/GCPad/base.ini new file mode 100644 index 00000000..7cabe875 --- /dev/null +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/GCPad/base.ini @@ -0,0 +1,30 @@ +[Profile] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Buttons/A = EAST +Buttons/B = SOUTH +Buttons/X = WEST +Buttons/Y = NORTH +Buttons/Z = TL +Buttons/Start = START +Main Stick/Up = `Axis 1-` +Main Stick/Down = `Axis 1+` +Main Stick/Left = `Axis 0-` +Main Stick/Right = `Axis 0+` +Main Stick/Modifier = THUMBL +Main Stick/Modifier/Range = 50.000000000000000 +Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42 +C-Stick/Up = `Axis 4-` +C-Stick/Down = `Axis 4+` +C-Stick/Left = `Axis 3-` +C-Stick/Right = `Axis 3+` +C-Stick/Modifier = THUMBR +C-Stick/Modifier/Range = 50.000000000000000 +C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42 +Triggers/L = `Full Axis 2+` +Triggers/R = `Full Axis 5+` +Triggers/L-Analog = `Full Axis 2+` +Triggers/R-Analog = `Full Axis 5+` +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stdxbox.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stdxbox.ini new file mode 100644 index 00000000..843e60b0 --- /dev/null +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stdxbox.ini @@ -0,0 +1,75 @@ +[Profile] +Device = evdev/0/Microsoft X-Box 360 pad 1 +Buttons/A = EAST +Buttons/B = SOUTH +Buttons/1 = WEST +Buttons/2 = NORTH +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = Return +IR/Up = `Axis 4-` +IR/Down = `Axis 4+` +IR/Left = `Axis 3-` +IR/Right = `Axis 3+` +Tilt/Modifier/Range = 50.0 +Shake/Z = `Button 4` +IMUAccelerometer/Up = `Accel Up` +IMUAccelerometer/Down = `Accel Down` +IMUAccelerometer/Left = `Accel Left` +IMUAccelerometer/Right = `Accel Right` +IMUAccelerometer/Forward = `Accel Forward` +IMUAccelerometer/Backward = `Accel Backward` +IMUGyroscope/Pitch Up = `Gyro Pitch Up` +IMUGyroscope/Pitch Down = `Gyro Pitch Down` +IMUGyroscope/Roll Left = `Gyro Roll Left` +IMUGyroscope/Roll Right = `Gyro Roll Right` +IMUGyroscope/Yaw Left = `Gyro Yaw Left` +IMUGyroscope/Yaw Right = `Gyro Yaw Right` +Extension = Nunchuk +Nunchuk/Buttons/C = `Full Axis 5+` +Nunchuk/Buttons/Z = `Full Axis 2+` +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 +Nunchuk/Tilt/Modifier/Range = 50.0 +Nunchuk/Shake/X = `Click 2` +Nunchuk/Shake/Y = `Click 2` +Nunchuk/Shake/Z = TR +Classic/Buttons/A = EAST +Classic/Buttons/B = SOUTH +Classic/Buttons/X = WEST +Classic/Buttons/Y = NORTH +Classic/Buttons/ZL = TL +Classic/Buttons/ZR = TR +Classic/Buttons/- = SELECT +Classic/Buttons/+ = START +Classic/Left Stick/Up = `Axis 1-` +Classic/Left Stick/Down = `Axis 1+` +Classic/Left Stick/Left = `Axis 0-` +Classic/Left Stick/Right = `Axis 0+` +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Left Stick/Calibration = 100.00 101.96 107.63 112.05 110.67 111.78 105.49 101.89 100.00 101.96 108.24 112.08 112.34 109.50 107.04 101.96 100.00 101.96 106.95 114.00 115.73 117.91 108.24 101.96 100.00 101.96 108.24 106.97 109.81 109.07 108.24 101.96 +Classic/Right Stick/Up = `Axis 4-` +Classic/Right Stick/Down = `Axis 4+` +Classic/Right Stick/Left = `Axis 3-` +Classic/Right Stick/Right = `Axis 3+` +Classic/Right Stick/Modifier/Range = 50.0 +Classic/Right Stick/Calibration = 100.00 101.96 107.60 112.29 113.04 111.78 108.24 101.96 100.00 101.96 108.24 109.67 111.62 109.71 104.61 101.96 100.00 101.96 108.12 116.15 116.97 117.85 107.67 101.96 100.00 101.96 108.24 107.11 107.45 110.21 108.24 101.96 +Classic/Triggers/L = `Full Axis 2+` +Classic/Triggers/R = `Full Axis 5+` +Classic/Triggers/L-Analog = `Full Axis 2+` +Classic/Triggers/R-Analog = `Full Axis 5+` +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Rumble/Motor = Strong +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Hotkeys/Sideways Toggle = SELECT&THUMBR diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock with mouse.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock with mouse.ini new file mode 100644 index 00000000..70a86936 --- /dev/null +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock with mouse.ini @@ -0,0 +1,79 @@ +[Profile] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Buttons/A = SOUTH +Buttons/B = EAST +Buttons/1 = NORTH +Buttons/2 = WEST +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = Return +IR/Vertical Offset = 12.0 +IR/Total Yaw = 19.0 +IR/Total Pitch = 22.0 +IR/Up = `XInput2/0/Virtual core pointer:Cursor Y-`|`Axis 4-` +IR/Down = `XInput2/0/Virtual core pointer:Cursor Y+`|`Axis 4+` +IR/Left = `XInput2/0/Virtual core pointer:Cursor X-`|`Axis 3-` +IR/Right = `XInput2/0/Virtual core pointer:Cursor X+`|`Axis 3+` +Tilt/Modifier/Range = 50.0 +Shake/Z = TL +IMUAccelerometer/Up = `DSUClient/0/steamdeckgyro:Accel Up` +IMUAccelerometer/Down = `DSUClient/0/steamdeckgyro:Accel Down` +IMUAccelerometer/Left = `DSUClient/0/steamdeckgyro:Accel Left` +IMUAccelerometer/Right = `DSUClient/0/steamdeckgyro:Accel Right` +IMUAccelerometer/Forward = `DSUClient/0/steamdeckgyro:Accel Forward` +IMUAccelerometer/Backward = `DSUClient/0/steamdeckgyro:Accel Backward` +IMUGyroscope/Pitch Up = `DSUClient/0/steamdeckgyro:Gyro Pitch Up` +IMUGyroscope/Pitch Down = `DSUClient/0/steamdeckgyro:Gyro Pitch Down` +IMUGyroscope/Roll Left = `DSUClient/0/steamdeckgyro:Gyro Roll Left` +IMUGyroscope/Roll Right = `DSUClient/0/steamdeckgyro:Gyro Roll Right` +IMUGyroscope/Yaw Left = `DSUClient/0/steamdeckgyro:Gyro Yaw Left` +IMUGyroscope/Yaw Right = `DSUClient/0/steamdeckgyro:Gyro Yaw Right` +IMUIR/Enabled = False +Extension = Nunchuk +Nunchuk/Buttons/C = `Full Axis 5+` +Nunchuk/Buttons/Z = `Full Axis 2+` +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 +Nunchuk/Tilt/Modifier/Range = 50.0 +Nunchuk/Shake/X = `Click 2` +Nunchuk/Shake/Y = `Click 2` +Nunchuk/Shake/Z = TR +Classic/Buttons/A = EAST +Classic/Buttons/B = SOUTH +Classic/Buttons/X = WEST +Classic/Buttons/Y = NORTH +Classic/Buttons/ZL = TL +Classic/Buttons/ZR = TR +Classic/Buttons/- = SELECT +Classic/Buttons/+ = START +Classic/Left Stick/Up = `Axis 1-` +Classic/Left Stick/Down = `Axis 1+` +Classic/Left Stick/Left = `Axis 0-` +Classic/Left Stick/Right = `Axis 0+` +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Left Stick/Calibration = 100.00 101.96 107.63 112.05 110.67 111.78 105.49 101.89 100.00 101.96 108.24 112.08 112.34 109.50 107.04 101.96 100.00 101.96 106.95 114.00 115.73 117.91 108.24 101.96 100.00 101.96 108.24 106.97 109.81 109.07 108.24 101.96 +Classic/Right Stick/Up = `Axis 4-` +Classic/Right Stick/Down = `Axis 4+` +Classic/Right Stick/Left = `Axis 3-` +Classic/Right Stick/Right = `Axis 3+` +Classic/Right Stick/Modifier/Range = 50.0 +Classic/Right Stick/Calibration = 100.00 101.96 107.60 112.29 113.04 111.78 108.24 101.96 100.00 101.96 108.24 109.67 111.62 109.71 104.61 101.96 100.00 101.96 108.12 116.15 116.97 117.85 107.67 101.96 100.00 101.96 108.24 107.11 107.45 110.21 108.24 101.96 +Classic/Triggers/L = `Full Axis 2+` +Classic/Triggers/R = `Full Axis 5+` +Classic/Triggers/L-Analog = `Full Axis 2+` +Classic/Triggers/R-Analog = `Full Axis 5+` +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Rumble/Motor = Strong +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Hotkeys/Sideways Toggle = SELECT&THUMBR diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock.ini new file mode 100644 index 00000000..f4ea6fcc --- /dev/null +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/stock.ini @@ -0,0 +1,76 @@ +[Profile] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Buttons/A = SOUTH +Buttons/B = EAST +Buttons/1 = NORTH +Buttons/2 = WEST +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = Return +IR/Up = `Axis 4-` +IR/Down = `Axis 4+` +IR/Left = `Axis 3-` +IR/Right = `Axis 3+` +IR/Calibration = 100.00 101.96 108.24 110.79 111.95 112.62 106.00 101.96 100.00 101.96 107.26 115.18 111.73 111.96 106.12 101.96 100.00 101.96 106.83 115.05 118.84 118.68 108.24 101.96 100.00 101.96 107.14 110.19 108.40 108.62 107.61 101.96 +Tilt/Modifier/Range = 50.0 +Shake/Z = TL +IMUAccelerometer/Up = `Accel Up` +IMUAccelerometer/Down = `Accel Down` +IMUAccelerometer/Left = `Accel Left` +IMUAccelerometer/Right = `Accel Right` +IMUAccelerometer/Forward = `Accel Forward` +IMUAccelerometer/Backward = `Accel Backward` +IMUGyroscope/Pitch Up = `Gyro Pitch Up` +IMUGyroscope/Pitch Down = `Gyro Pitch Down` +IMUGyroscope/Roll Left = `Gyro Roll Left` +IMUGyroscope/Roll Right = `Gyro Roll Right` +IMUGyroscope/Yaw Left = `Gyro Yaw Left` +IMUGyroscope/Yaw Right = `Gyro Yaw Right` +Extension = Nunchuk +Nunchuk/Buttons/C = `Full Axis 5+` +Nunchuk/Buttons/Z = `Full Axis 2+` +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 +Nunchuk/Tilt/Modifier/Range = 50.0 +Nunchuk/Shake/X = `Click 2` +Nunchuk/Shake/Y = `Click 2` +Nunchuk/Shake/Z = TR +Classic/Buttons/A = EAST +Classic/Buttons/B = SOUTH +Classic/Buttons/X = WEST +Classic/Buttons/Y = NORTH +Classic/Buttons/ZL = TL +Classic/Buttons/ZR = TR +Classic/Buttons/- = SELECT +Classic/Buttons/+ = START +Classic/Left Stick/Up = `Axis 1-` +Classic/Left Stick/Down = `Axis 1+` +Classic/Left Stick/Left = `Axis 0-` +Classic/Left Stick/Right = `Axis 0+` +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Left Stick/Calibration = 100.00 101.96 107.63 112.05 110.67 111.78 105.49 101.89 100.00 101.96 108.24 112.08 112.34 109.50 107.04 101.96 100.00 101.96 106.95 114.00 115.73 117.91 108.24 101.96 100.00 101.96 108.24 106.97 109.81 109.07 108.24 101.96 +Classic/Right Stick/Up = `Axis 4-` +Classic/Right Stick/Down = `Axis 4+` +Classic/Right Stick/Left = `Axis 3-` +Classic/Right Stick/Right = `Axis 3+` +Classic/Right Stick/Modifier/Range = 50.0 +Classic/Right Stick/Calibration = 100.00 101.96 107.60 112.29 113.04 111.78 108.24 101.96 100.00 101.96 108.24 109.67 111.62 109.71 104.61 101.96 100.00 101.96 108.12 116.15 116.97 117.85 107.67 101.96 100.00 101.96 108.24 107.11 107.45 110.21 108.24 101.96 +Classic/Triggers/L = `Full Axis 2+` +Classic/Triggers/R = `Full Axis 5+` +Classic/Triggers/L-Analog = `Full Axis 2+` +Classic/Triggers/R-Analog = `Full Axis 5+` +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Rumble/Motor = Strong +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Hotkeys/Sideways Toggle = SELECT&THUMBR diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/wiigalaxy.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/wiigalaxy.ini new file mode 100644 index 00000000..50e1ed9f --- /dev/null +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Profiles/Wiimote/wiigalaxy.ini @@ -0,0 +1,83 @@ +[Profile] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Buttons/A = SOUTH +Buttons/B = EAST|`Full Axis 5+` +Buttons/1 = NORTH +Buttons/2 = WEST +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = Return +IR/Vertical Offset = 12.0 +IR/Total Yaw = 19.0 +IR/Total Pitch = 22.0 +IR/Auto-Hide = True +IR/Up = `XInput2/0/Virtual core pointer:Cursor Y-` +IR/Down = `XInput2/0/Virtual core pointer:Cursor Y+` +IR/Left = `XInput2/0/Virtual core pointer:Cursor X-` +IR/Right = `XInput2/0/Virtual core pointer:Cursor X+` +Tilt/Forward = `Full Axis 2+`&`Full Axis 1-` +Tilt/Backward = `Full Axis 2+`&`Full Axis 1+` +Tilt/Left = `Full Axis 2+`&`Full Axis 0-` +Tilt/Right = `Full Axis 2+`&`Full Axis 0+` +Tilt/Modifier/Range = 50.0 +Shake/Z = TL +IMUAccelerometer/Up = `Accel Up` +IMUAccelerometer/Down = `Accel Down` +IMUAccelerometer/Left = `Accel Left` +IMUAccelerometer/Right = `Accel Right` +IMUAccelerometer/Forward = `Accel Forward` +IMUAccelerometer/Backward = `Accel Backward` +IMUGyroscope/Pitch Up = `Gyro Pitch Up` +IMUGyroscope/Pitch Down = `Gyro Pitch Down` +IMUGyroscope/Roll Left = `Gyro Roll Left` +IMUGyroscope/Roll Right = `Gyro Roll Right` +IMUGyroscope/Yaw Left = `Gyro Yaw Left` +IMUGyroscope/Yaw Right = `Gyro Yaw Right` +Extension = Nunchuk +Nunchuk/Buttons/C = THUMBR +Nunchuk/Buttons/Z = TR +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 +Nunchuk/Tilt/Modifier/Range = 50.0 +Nunchuk/Shake/X = `Click 2` +Nunchuk/Shake/Y = `Click 2` +Classic/Buttons/A = EAST +Classic/Buttons/B = SOUTH +Classic/Buttons/X = WEST +Classic/Buttons/Y = NORTH +Classic/Buttons/ZL = TL +Classic/Buttons/ZR = TR +Classic/Buttons/- = SELECT +Classic/Buttons/+ = START +Classic/Left Stick/Up = `Axis 1-` +Classic/Left Stick/Down = `Axis 1+` +Classic/Left Stick/Left = `Axis 0-` +Classic/Left Stick/Right = `Axis 0+` +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Left Stick/Calibration = 100.00 101.96 107.63 112.05 110.67 111.78 105.49 101.89 100.00 101.96 108.24 112.08 112.34 109.50 107.04 101.96 100.00 101.96 106.95 114.00 115.73 117.91 108.24 101.96 100.00 101.96 108.24 106.97 109.81 109.07 108.24 101.96 +Classic/Right Stick/Up = `Axis 4-` +Classic/Right Stick/Down = `Axis 4+` +Classic/Right Stick/Left = `Axis 3-` +Classic/Right Stick/Right = `Axis 3+` +Classic/Right Stick/Modifier/Range = 50.0 +Classic/Right Stick/Calibration = 100.00 101.96 107.60 112.29 113.04 111.78 108.24 101.96 100.00 101.96 108.24 109.67 111.62 109.71 104.61 101.96 100.00 101.96 108.12 116.15 116.97 117.85 107.67 101.96 100.00 101.96 108.24 107.11 107.45 110.21 108.24 101.96 +Classic/Triggers/L = `Full Axis 2+` +Classic/Triggers/R = `Full Axis 5+` +Classic/Triggers/L-Analog = `Full Axis 2+` +Classic/Triggers/R-Analog = `Full Axis 5+` +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Rumble/Motor = Strong +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Options/Upright Wiimote = `Full Axis 2+` +Hotkeys/Sideways Toggle = SELECT&THUMBR diff --git a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/WiimoteNew.ini b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/WiimoteNew.ini index 4a583a0e..51189051 100644 --- a/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/WiimoteNew.ini +++ b/configs/org.DolphinEmu.dolphin-emu/config/dolphin-emu/WiimoteNew.ini @@ -7,48 +7,46 @@ Buttons/2 = WEST Buttons/- = SELECT Buttons/+ = START Buttons/Home = Return -IR/Up = `Axis 4-` -IR/Down = `Axis 4+` -IR/Left = `Axis 3-` -IR/Right = `Axis 3+` -Tilt/Modifier/Range = 50.000000000000000 -IMUAccelerometer/Up = `Accel Up` -IMUAccelerometer/Down = `Accel Down` -IMUAccelerometer/Left = `Accel Left` -IMUAccelerometer/Right = `Accel Right` -IMUAccelerometer/Forward = `Accel Forward` -IMUAccelerometer/Backward = `Accel Backward` -IMUGyroscope/Pitch Up = `Gyro Pitch Up` -IMUGyroscope/Pitch Down = `Gyro Pitch Down` -IMUGyroscope/Roll Left = `Gyro Roll Left` -IMUGyroscope/Roll Right = `Gyro Roll Right` -IMUGyroscope/Yaw Left = `Gyro Yaw Left` -IMUGyroscope/Yaw Right = `Gyro Yaw Right` +IR/Up = `XInput2/0/Virtual core pointer:Cursor Y-`|`Axis 4-` +IR/Down = `XInput2/0/Virtual core pointer:Cursor Y+`|`Axis 4+` +IR/Left = `XInput2/0/Virtual core pointer:Cursor X-`|`Axis 3-` +IR/Right = `XInput2/0/Virtual core pointer:Cursor X+`|`Axis 3+` +Tilt/Modifier/Range = 50.0 +IMUAccelerometer/Up = `DSUClient/0/steamdeckgyro:Accel Up` +IMUAccelerometer/Down = `DSUClient/0/steamdeckgyro:Accel Down` +IMUAccelerometer/Left = `DSUClient/0/steamdeckgyro:Accel Left` +IMUAccelerometer/Right = `DSUClient/0/steamdeckgyro:Accel Right` +IMUAccelerometer/Forward = `DSUClient/0/steamdeckgyro:Accel Forward` +IMUAccelerometer/Backward = `DSUClient/0/steamdeckgyro:Accel Backward` +IMUGyroscope/Pitch Up = `DSUClient/0/steamdeckgyro:Gyro Pitch Up` +IMUGyroscope/Pitch Down = `DSUClient/0/steamdeckgyro:Gyro Pitch Down` +IMUGyroscope/Roll Left = `DSUClient/0/steamdeckgyro:Gyro Roll Left` +IMUGyroscope/Roll Right = `DSUClient/0/steamdeckgyro:Gyro Roll Right` +IMUGyroscope/Yaw Left = `DSUClient/0/steamdeckgyro:Gyro Yaw Left` +IMUGyroscope/Yaw Right = `DSUClient/0/steamdeckgyro:Gyro Yaw Right` Nunchuk/Buttons/C = `Full Axis 5+` Nunchuk/Buttons/Z = `Full Axis 2+` Nunchuk/Stick/Up = `Axis 1-` Nunchuk/Stick/Down = `Axis 1+` Nunchuk/Stick/Left = `Axis 0-` Nunchuk/Stick/Right = `Axis 0+` -Nunchuk/Stick/Modifier/Range = 50.000000000000000 +Nunchuk/Stick/Modifier/Range = 50.0 Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 -Nunchuk/Tilt/Modifier/Range = 50.000000000000000 +Nunchuk/Tilt/Modifier/Range = 50.0 Nunchuk/Shake/X = `Click 2` Nunchuk/Shake/Y = `Click 2` -Nunchuk/Shake/Z = TR -Classic/Left Stick/Modifier/Range = 50.000000000000000 -Classic/Right Stick/Modifier/Range = 50.000000000000000 -Guitar/Stick/Modifier/Range = 50.000000000000000 -Drums/Stick/Modifier/Range = 50.000000000000000 -Turntable/Stick/Modifier/Range = 50.000000000000000 -uDraw/Stylus/Modifier/Range = 50.000000000000000 -Drawsome/Stylus/Modifier/Range = 50.000000000000000 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 D-Pad/Up = `Axis 7-` D-Pad/Down = `Axis 7+` D-Pad/Left = `Axis 6-` D-Pad/Right = `Axis 6+` Source = 1 -IR/Calibration = 100.00 101.96 108.24 110.79 111.95 112.62 106.00 101.96 100.00 101.96 107.26 115.18 111.73 111.96 106.12 101.96 100.00 101.96 106.83 115.05 118.84 118.68 108.24 101.96 100.00 101.96 107.14 110.19 108.40 108.62 107.61 101.96 Classic/Buttons/A = EAST Classic/Buttons/B = SOUTH Classic/Buttons/X = WEST @@ -75,12 +73,17 @@ Shake/Z = TL Hotkeys/Sideways Toggle = SELECT&THUMBR Extension = Nunchuk Rumble/Motor = Strong +Nunchuk/Shake/Z = TR +IR/Vertical Offset = 12.0 +IR/Total Yaw = 19.0 +IR/Total Pitch = 22.0 +IMUIR/Enabled = False [Wiimote2] -Device = SDL/0/Wireless Controller -Buttons/A = SOUTH -Buttons/B = EAST -Buttons/1 = NORTH -Buttons/2 = WEST +Device = evdev/0/Microsoft X-Box 360 pad 1 +Buttons/A = EAST +Buttons/B = SOUTH +Buttons/1 = WEST +Buttons/2 = NORTH Buttons/- = SELECT Buttons/+ = START Buttons/Home = Return @@ -88,7 +91,7 @@ IR/Up = `Axis 4-` IR/Down = `Axis 4+` IR/Left = `Axis 3-` IR/Right = `Axis 3+` -Tilt/Modifier/Range = 50.000000000000000 +Tilt/Modifier/Range = 50.0 IMUAccelerometer/Up = `Accel Up` IMUAccelerometer/Down = `Accel Down` IMUAccelerometer/Left = `Accel Left` @@ -107,25 +110,24 @@ Nunchuk/Stick/Up = `Axis 1-` Nunchuk/Stick/Down = `Axis 1+` Nunchuk/Stick/Left = `Axis 0-` Nunchuk/Stick/Right = `Axis 0+` -Nunchuk/Stick/Modifier/Range = 50.000000000000000 +Nunchuk/Stick/Modifier/Range = 50.0 Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 -Nunchuk/Tilt/Modifier/Range = 50.000000000000000 +Nunchuk/Tilt/Modifier/Range = 50.0 Nunchuk/Shake/X = `Click 2` Nunchuk/Shake/Y = `Click 2` Nunchuk/Shake/Z = TR -Classic/Left Stick/Modifier/Range = 50.000000000000000 -Classic/Right Stick/Modifier/Range = 50.000000000000000 -Guitar/Stick/Modifier/Range = 50.000000000000000 -Drums/Stick/Modifier/Range = 50.000000000000000 -Turntable/Stick/Modifier/Range = 50.000000000000000 -uDraw/Stylus/Modifier/Range = 50.000000000000000 -Drawsome/Stylus/Modifier/Range = 50.000000000000000 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 D-Pad/Up = `Axis 7-` D-Pad/Down = `Axis 7+` D-Pad/Left = `Axis 6-` D-Pad/Right = `Axis 6+` Source = 1 -IR/Calibration = 100.00 101.96 108.24 110.79 111.95 112.62 106.00 101.96 100.00 101.96 107.26 115.18 111.73 111.96 106.12 101.96 100.00 101.96 106.83 115.05 118.84 118.68 108.24 101.96 100.00 101.96 107.14 110.19 108.40 108.62 107.61 101.96 Classic/Buttons/A = EAST Classic/Buttons/B = SOUTH Classic/Buttons/X = WEST @@ -153,19 +155,19 @@ Hotkeys/Sideways Toggle = SELECT&THUMBR Extension = Nunchuk Rumble/Motor = Strong [Wiimote3] -Device = SDL/1/Wireless Controller -Buttons/A = `Button 1` -Buttons/B = `Button 2` -Buttons/1 = `Button 0` -Buttons/2 = `Button 3` -Buttons/- = `Button 8` -Buttons/+ = `Button 9` -Buttons/Home = `Button 12` -IR/Up = `Axis 5-` -IR/Down = `Axis 5+` -IR/Left = `Axis 2-` -IR/Right = `Axis 2+` -Tilt/Modifier/Range = 50.000000000000000 +Device = evdev/0/Microsoft X-Box 360 pad 2 +Buttons/A = EAST +Buttons/B = SOUTH +Buttons/1 = WEST +Buttons/2 = NORTH +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = Return +IR/Up = `Axis 4-` +IR/Down = `Axis 4+` +IR/Left = `Axis 3-` +IR/Right = `Axis 3+` +Tilt/Modifier/Range = 50.0 IMUAccelerometer/Up = `Accel Up` IMUAccelerometer/Down = `Accel Down` IMUAccelerometer/Left = `Accel Left` @@ -178,31 +180,30 @@ IMUGyroscope/Roll Left = `Gyro Roll Left` IMUGyroscope/Roll Right = `Gyro Roll Right` IMUGyroscope/Yaw Left = `Gyro Yaw Left` IMUGyroscope/Yaw Right = `Gyro Yaw Right` -Nunchuk/Buttons/C = `Full Axis 4+` -Nunchuk/Buttons/Z = `Full Axis 3+` +Nunchuk/Buttons/C = `Full Axis 5+` +Nunchuk/Buttons/Z = `Full Axis 2+` Nunchuk/Stick/Up = `Axis 1-` Nunchuk/Stick/Down = `Axis 1+` Nunchuk/Stick/Left = `Axis 0-` Nunchuk/Stick/Right = `Axis 0+` -Nunchuk/Stick/Modifier/Range = 50.000000000000000 +Nunchuk/Stick/Modifier/Range = 50.0 Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 -Nunchuk/Tilt/Modifier/Range = 50.000000000000000 +Nunchuk/Tilt/Modifier/Range = 50.0 Nunchuk/Shake/X = `Click 2` Nunchuk/Shake/Y = `Click 2` Nunchuk/Shake/Z = TR -Classic/Left Stick/Modifier/Range = 50.000000000000000 -Classic/Right Stick/Modifier/Range = 50.000000000000000 -Guitar/Stick/Modifier/Range = 50.000000000000000 -Drums/Stick/Modifier/Range = 50.000000000000000 -Turntable/Stick/Modifier/Range = 50.000000000000000 -uDraw/Stylus/Modifier/Range = 50.000000000000000 -Drawsome/Stylus/Modifier/Range = 50.000000000000000 -D-Pad/Up = `Hat 0 N` -D-Pad/Down = `Hat 0 S` -D-Pad/Left = `Hat 0 W` -D-Pad/Right = `Hat 0 E` +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` Source = 1 -IR/Calibration = 100.00 101.96 108.24 110.79 111.95 112.62 106.00 101.96 100.00 101.96 107.26 115.18 111.73 111.96 106.12 101.96 100.00 101.96 106.83 115.05 118.84 118.68 108.24 101.96 100.00 101.96 107.14 110.19 108.40 108.62 107.61 101.96 Classic/Buttons/A = EAST Classic/Buttons/B = SOUTH Classic/Buttons/X = WEST @@ -230,11 +231,11 @@ Hotkeys/Sideways Toggle = SELECT&THUMBR Extension = Nunchuk Rumble/Motor = Strong [Wiimote4] -Device = SDL/2/Wireless Controller -Buttons/A = SOUTH -Buttons/B = EAST -Buttons/1 = NORTH -Buttons/2 = WEST +Device = evdev/0/Microsoft X-Box 360 pad 3 +Buttons/A = EAST +Buttons/B = SOUTH +Buttons/1 = WEST +Buttons/2 = NORTH Buttons/- = SELECT Buttons/+ = START Buttons/Home = Return @@ -242,7 +243,7 @@ IR/Up = `Axis 4-` IR/Down = `Axis 4+` IR/Left = `Axis 3-` IR/Right = `Axis 3+` -Tilt/Modifier/Range = 50.000000000000000 +Tilt/Modifier/Range = 50.0 IMUAccelerometer/Up = `Accel Up` IMUAccelerometer/Down = `Accel Down` IMUAccelerometer/Left = `Accel Left` @@ -261,25 +262,24 @@ Nunchuk/Stick/Up = `Axis 1-` Nunchuk/Stick/Down = `Axis 1+` Nunchuk/Stick/Left = `Axis 0-` Nunchuk/Stick/Right = `Axis 0+` -Nunchuk/Stick/Modifier/Range = 50.000000000000000 +Nunchuk/Stick/Modifier/Range = 50.0 Nunchuk/Stick/Calibration = 100.00 101.96 107.70 111.02 112.30 107.98 106.91 101.96 100.00 101.96 108.24 113.14 114.55 111.79 108.24 101.96 100.00 101.96 108.24 113.60 114.92 113.33 108.24 101.96 100.00 101.96 108.24 110.60 109.10 108.88 108.24 101.96 -Nunchuk/Tilt/Modifier/Range = 50.000000000000000 +Nunchuk/Tilt/Modifier/Range = 50.0 Nunchuk/Shake/X = `Click 2` Nunchuk/Shake/Y = `Click 2` Nunchuk/Shake/Z = TR -Classic/Left Stick/Modifier/Range = 50.000000000000000 -Classic/Right Stick/Modifier/Range = 50.000000000000000 -Guitar/Stick/Modifier/Range = 50.000000000000000 -Drums/Stick/Modifier/Range = 50.000000000000000 -Turntable/Stick/Modifier/Range = 50.000000000000000 -uDraw/Stylus/Modifier/Range = 50.000000000000000 -Drawsome/Stylus/Modifier/Range = 50.000000000000000 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 D-Pad/Up = `Axis 7-` D-Pad/Down = `Axis 7+` D-Pad/Left = `Axis 6-` D-Pad/Right = `Axis 6+` -Source = 0 -IR/Calibration = 100.00 101.96 108.24 110.79 111.95 112.62 106.00 101.96 100.00 101.96 107.26 115.18 111.73 111.96 106.12 101.96 100.00 101.96 106.83 115.05 118.84 118.68 108.24 101.96 100.00 101.96 107.14 110.19 108.40 108.62 107.61 101.96 +Source = 1 Classic/Buttons/A = EAST Classic/Buttons/B = SOUTH Classic/Buttons/X = WEST @@ -302,20 +302,20 @@ Classic/Right Stick/Down = `Axis 4+` Classic/Right Stick/Left = `Axis 3-` Classic/Right Stick/Right = `Axis 3+` Classic/Right Stick/Calibration = 100.00 101.96 107.60 112.29 113.04 111.78 108.24 101.96 100.00 101.96 108.24 109.67 111.62 109.71 104.61 101.96 100.00 101.96 108.12 116.15 116.97 117.85 107.67 101.96 100.00 101.96 108.24 107.11 107.45 110.21 108.24 101.96 -Shake/Z = TL +Shake/Z = `Button 4` Hotkeys/Sideways Toggle = SELECT&THUMBR Extension = Nunchuk Rumble/Motor = Strong [BalanceBoard] Device = XInput2/0/Virtual core pointer -Tilt/Modifier/Range = 50.000000000000000 -Nunchuk/Stick/Modifier/Range = 50.000000000000000 -Nunchuk/Tilt/Modifier/Range = 50.000000000000000 -Classic/Left Stick/Modifier/Range = 50.000000000000000 -Classic/Right Stick/Modifier/Range = 50.000000000000000 -Guitar/Stick/Modifier/Range = 50.000000000000000 -Drums/Stick/Modifier/Range = 50.000000000000000 -Turntable/Stick/Modifier/Range = 50.000000000000000 -uDraw/Stylus/Modifier/Range = 50.000000000000000 -Drawsome/Stylus/Modifier/Range = 50.000000000000000 +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 Source = 0 diff --git a/configs/org.duckstation.DuckStation/data/duckstation/settings.ini b/configs/org.duckstation.DuckStation/data/duckstation/settings.ini index b7d5263d..acc29a03 100644 --- a/configs/org.duckstation.DuckStation/data/duckstation/settings.ini +++ b/configs/org.duckstation.DuckStation/data/duckstation/settings.ini @@ -7,7 +7,7 @@ SyncToHostRefreshRate = false IncreaseTimerResolution = true InhibitScreensaver = true StartPaused = false -StartFullscreen = false +StartFullscreen = true PauseOnFocusLoss = false PauseOnMenu = true SaveStateOnExit = true @@ -19,7 +19,7 @@ DisableAllEnhancements = false RewindEnable = false RewindFrequency = 10.000000 RewindSaveSlots = 10 -RunaheadFrameCount = 0.000000 +RunaheadFrameCount = 0 ControllerBackend = SDL ControllerEnhancedMode = false EnableDiscordPresence = false @@ -39,7 +39,8 @@ OverclockEnable = false RecompilerMemoryExceptions = false RecompilerBlockLinking = true ICache = false -FastmemMode = true +FastmemMode = MMap +RecompilerICache = false [GPU] @@ -68,6 +69,8 @@ PGXPPreserveProjFP = false PGXPTolerance = -1.000000 PGXPDepthBuffer = false PGXPDepthClearThreshold = 300.000000 +Adapter = AMD RADV VANGOGH +FullscreenMode = [Display] @@ -76,7 +79,7 @@ ActiveStartOffset = 0 ActiveEndOffset = 0 LineStartOffset = 0 LineEndOffset = 0 -AspectRatio = 16:9 +AspectRatio = Auto (Game Native) CustomAspectRatioNumerator = 4 Force4_3For24Bit = true LinearFiltering = true @@ -93,7 +96,6 @@ ShowEnhancements = false Fullscreen = false VSync = false DisplayAllFrames = false -PostProcessChain = MaxFPS = 0.000000 InternalResolutionScreenshots = false @@ -113,7 +115,7 @@ OutputVolume = 100 FastForwardVolume = 100 BufferSize = 2048 Resampling = true -OutputMuted = 0 +OutputMuted = false Sync = true DumpOnBoot = false @@ -170,11 +172,14 @@ FastForward = Keyboard/Tab TogglePause = Keyboard/Space ToggleFullscreen = Keyboard/Alt+Return Screenshot = Keyboard/F10 -PowerOff = Keyboard/Escape +PowerOff = Keyboard/F6 LoadSelectedSaveState = Keyboard/F1 SaveSelectedSaveState = Keyboard/F2 SelectPreviousSaveStateSlot = Keyboard/F3 SelectNextSaveStateSlot = Keyboard/F4 +ToggleFastForward = Keyboard/F5 +OpenQuickMenu = Keyboard/Escape +ChangeDisc = Keyboard/F7 [Cheevos] @@ -261,3 +266,22 @@ Type = None [Controller8] Type = None + +[SDLHostInterface] +WindowX = 0 +WindowY = 0 +WindowWidth = 1280 +WindowHeight = 711 + + +[TextureReplacements] +EnableVRAMWriteReplacements = true +PreloadTextures = true +DumpVRAMWrites = false +DumpVRAMWriteForceAlphaChannel = true +DumpVRAMWriteWidthThreshold = 128 +DumpVRAMWriteHeightThreshold = 128 + + +[GameList] +RecursivePaths = /run/media/mmcblk0p1/Emulation/roms/psx \ No newline at end of file diff --git a/configs/org.yuzu_emu.yuzu/config/input/emudeck.ini b/configs/org.yuzu_emu.yuzu/config/yuzu/input/emudeck.ini similarity index 100% rename from configs/org.yuzu_emu.yuzu/config/input/emudeck.ini rename to configs/org.yuzu_emu.yuzu/config/yuzu/input/emudeck.ini diff --git a/configs/org.yuzu_emu.yuzu/config/yuzu/qt-config.ini b/configs/org.yuzu_emu.yuzu/config/yuzu/qt-config.ini index c7a2f14f..d89582d8 100644 --- a/configs/org.yuzu_emu.yuzu/config/yuzu/qt-config.ini +++ b/configs/org.yuzu_emu.yuzu/config/yuzu/qt-config.ini @@ -793,7 +793,7 @@ cpuopt_unsafe_unfuse_fma=true cpuopt_unsafe_unfuse_fma\default=true [Data%20Storage] -dump_directory=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/dump +dump_directory=/run/media/mmcblk0p1/Emulation/storage/yuzu/dump dump_directory\default=true gamecard_current_game=false gamecard_current_game\default=true @@ -801,13 +801,13 @@ gamecard_inserted=false gamecard_inserted\default=true gamecard_path= gamecard_path\default=true -load_directory=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/load +load_directory=/run/media/mmcblk0p1/Emulation/storage/yuzu/load load_directory\default=true -nand_directory=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/nand +nand_directory=/run/media/mmcblk0p1/Emulation/storage/yuzu/nand nand_directory\default=true -sdmc_directory=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/sdmc +sdmc_directory=/run/media/mmcblk0p1/Emulation/storage/yuzu/sdmc sdmc_directory\default=true -tas_directory=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/tas +tas_directory=/run/media/mmcblk0p1/Emulation/storage/yuzu/tas tas_directory\default=true use_virtual_sd=true use_virtual_sd\default=true @@ -961,7 +961,7 @@ Paths\romsPath= Paths\symbolsPath= Screenshots\enable_screenshot_save_as=true Screenshots\enable_screenshot_save_as\default=true -Screenshots\screenshot_path=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/screenshots +Screenshots\screenshot_path=/run/media/mmcblk0p1/Emulation/storage/yuzu/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= diff --git a/configs/steam-input/duckstation_controller_config.vdf b/configs/steam-input/duckstation_controller_config.vdf new file mode 100644 index 00000000..1286bf8b --- /dev/null +++ b/configs/steam-input/duckstation_controller_config.vdf @@ -0,0 +1,886 @@ +"controller_mappings" +{ + "version" "3" + "revision" "21" + "title" "DuckStation Menu Hotkeys" + "description" "Long press hotkeys to activate." + "creator" "76561198025051816" + "progenitor" "" + "url" "template://duckstation_controller_config.vdf" + "export_type" "template" + "controller_type" "controller_neptune" + "major_revision" "0" + "minor_revision" "0" + "Timestamp" "4" + "localization" + { + "english" + { + "title" "DuckStation Menu Hotkeys" + "description" "DuckStation Menu Hotkeys" + } + "czech" + { + "title" "Gamepad s ovládáním kamery" + "description" "Tato šablona je pro většinu her podporujících gamepad a disponujících kamerou z pohledu první nebo třetí osoby. Mezi takové hry patří například akční hry z pohledu první nebo třetí osoby." + } + "danish" + { + "title" "Gamepad med kamerastyring" + "description" "Denne skabelon er til de fleste spil, der allerede har indbygget gamepad-understøttelse og har et første- eller tredjepersonskontrolleret kamera. FPS eller tredjepersons adventure-spil osv." + } + "dutch" + { + "title" "Gamepad met camerabesturing" + "description" "Deze template is voor de meeste spellen die reeds ingebouwde gamepadondersteuning hebben en die een camera hebben die wordt bestuurd in de eerste of derde persoon. FPS, third person-avontuurspellen, etc." + } + "finnish" + { + "title" "Kameraa ohjaava peliohjain" + "description" "Tämä malli on useimmille muita ohjaimia valmiiksi tukeville peleille, joissa on ensimmäisessä tai kolmannessa persoonassa ohjattava kamera. FPS-pelit, kolmannen persoonan seikkailupelit jne." + } + "french" + { + "title" "Manette avec contrôles caméra" + "description" "Ce modèle fonctionne pour la plupart des jeux ayant un support manette intégré et une caméra contrôlée à la première ou à la troisième personne. FPS, jeux d'aventure à la troisième personne, etc." + } + "german" + { + "title" "Gamepad mit Kamerasteuerung" + "description" "Diese Vorlage ist für die meisten Spiele konzipiert, die bereits volle Untersützung für Gamepads mit sich bringen und eine First- oder Third-Person-Kamerasteuerung haben. Gedacht für Ego-Shooter, Third-Person-Abenteuerspiele usw." + } + "hungarian" + { + "title" "Gamepad kamerairányítással" + "description" "Ez a sablon a legtöbb olyan játékhoz való, melyek már rendelkeznek beépített gamepad-támogatással, és van első vagy harmadik személyű kezelésű kamerájuk. Ilyenek az FPS vagy harmadik személyű kalandjátékok stb." + } + "italian" + { + "title" "Gamepad con controlli della telecamera" + "description" "Questo template è pensato per la maggior parte dei giochi che hanno già il supporto per gamepad integrato e hanno la visuale controllata in prima o terza persona. Giochi d'avventura in terza persona, FPS ecc." + } + "japanese" + { + "title" "カメラコントロール機能を持つゲームパッド" + "description" "FPS や、アドベンチャーゲームのような、一人称または三人称のカメラ操作を行うゲームパッドに標準対応したゲーム用のテンプレートです。" + } + "koreana" + { + "title" "카메라 조작 기능이 있는 게임패드" + "description" "이 템플릿은 이미 게임패드 지원이 내장되어 있으며 1인칭 또는 3인칭 시점 카메라 조작을 지원하는 대부분의 게임을 위한 것입니다. FPS, 3인칭 어드벤쳐 게임 및 기타." + } + "polish" + { + "title" "Kontroler obsługujący kamerę" + "description" "Ten szablon jest dla większości gier, które mają wbudowane wsparcie dla kontrolerów, a także kamerę kontrolowaną z perspektywy pierwszej lub trzeciej osoby, np. FPS-y bądź gry przygodowe." + } + "portuguese" + { + "title" "Comando com controlos de câmara" + "description" "Este modelo é indicado para jogos que já têm compatibilidade nativa com comando e têm uma câmara que pode ser controlada. Por exemplo, jogos em primeira ou terceira pessoa, do género de aventura, de tiros, etc." + } + "romanian" + { + "title" "Gamepad cu controale pentru cameră" + "description" "Acest șablon este pentru majoritatea jocurilor care au deja suport pentru gamepad implementat și au o cameră controlată din perspectivă first sau third person. FPS sau jocuri de aventură third person, etc." + } + "russian" + { + "title" "Геймпад с управлением камерой" + "description" "Этот шаблон предназначен для большинства игр от первого или третьего лица, в которых уже есть встроенная поддержка геймпада (например, для шутеров или экшенов)." + } + "spanish" + { + "title" "Mando con controles de cámara" + "description" "Esta plantilla es para la mayoría de juegos que ya incluyen de serie compatibilidad con mando y disponen de cámara controlada en primera o tercera persona: FPS, juegos de aventura en tercera persona, etc." + } + "swedish" + { + "title" "Gamepad med kamerakontroller" + "description" "Denna mall är för de flesta spel som redan har inbyggt stöd för spelkontroller och har en kamera som styrs i första- eller tredjeperson. FPS eller äventyrsspel etc." + } + "schinese" + { + "title" "支持视角控制的手柄" + "description" "该模板适用于已内置手柄支持,并且拥有第一或第三人称控制视角的大多数游戏。包括 FPS 或第三人称冒险游戏等。" + } + "thai" + { + "title" "เกมแพดพร้อมการควบคุมมุมกล้อง" + "description" "แม่แบบนี้ใช้สำหรับเกมส่วนมากที่มีการรองรับเกมแพดมาในตัวอยู่แล้ว และมีการควบคุมมุมกล้องในมุมมองบุคคลที่หนึ่งหรือสาม เช่น เกมยิงมุมมองบุคคลที่หนึ่ง หรือเกมผจญภัยมุมมองบุคคลที่สาม ฯลฯ" + } + "brazilian" + { + "title" "Controle com controle de câmera" + "description" "Este modelo é para jogos já compatíveis com controles que possuem uma câmera controlável, seja em primeira ou terceira pessoa, como jogos de tiro, aventura, etc." + } + "bulgarian" + { + "title" "Геймпад с управление на камерата" + "description" "Този шаблон е за повечето игри, които вече имат вградена поддръжка на геймпад и включват управление на камерата от първо или трето лице. Екшъни от първо лице, приключенски игри от трето лице и т.н." + } + "greek" + { + "title" "Χειριστήριο με πλήκτρα κάμερας" + "description" "Αυτό το πρότυπο είναι για τα περισσότερα παιχνίδια που έχουν ενσωματωμένη υποστήριξη χειριστηρίου και έχουν μια ελεγχόμενη κάμερα πρώτου ή τρίτου προσώπου. FPS ή παιχνίδια περιπέτειας τρίτου προσώπου κλπ." + } + "turkish" + { + "title" "Kamera Kontrollü Oyun Kumandası" + "description" "Bu şablon hali hazırda oyun içi oyun kumandası desteği ve birincil veya üçüncü kişi kontrollü kameraya sahip oyunlar içindir. FPS veya Üçüncü Kişi Macera oyunları vb." + } + "ukrainian" + { + "title" "Ґеймпад з елементами керування камерою" + "description" "Цей шаблон для більшості ігор, що вже мають вбудовану підтримку ґеймпада і у яких камера керується від першої або третьої особи. Шутери від першої особи чи пригодницькі ігри від третьої особи тощо." + } + } + "group" + { + "id" "0" + "mode" "four_buttons" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A" + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B" + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X" + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "1" + "mode" "dpad" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_up" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_down" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_right" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_left" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "2" + "mode" "joystick_move" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "3" + "mode" "joystick_move" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT" + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "4" + "mode" "trigger" + "description" "" + "inputs" + { + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "5" + "mode" "trigger" + "description" "" + "inputs" + { + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "6" + "mode" "joystick_move" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "8" + "mode" "joystick_move" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "9" + "mode" "dpad" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT" + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "10" + "mode" "single_button" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button START" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "11" + "mode" "single_button" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button SELECT" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "12" + "mode" "mouse_joystick" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "13" + "mode" "disabled" + "description" "" + } + "group" + { + "id" "14" + "mode" "touch_menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press F2, Save State, ghost_075_utility_020.png #232323 #0074ad" + } + } + + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "controller_action empty_binding" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press F1, Load State, ghost_075_utility_010.png #232323 #0074ad" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Space, Pause/Play, ghost_090_media_0210.png #232323 #E4E4E4" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press Escape, Quick Menu, ghost_070_setting_0030.png #232323 #ad0000" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press F7, Swap Disc, ghost_075_utility_040.png #232323 #E4E4E4" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press F3, Prev Slot, ghost_045_move_0409.png #232323 #ad0000" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press F5, FFWD, ghost_060_vehicle_0050.png #232323 #00ad00" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_8" + { + "activators" + { + "Long_Press" + { + "bindings" + { + "binding" "key_press F4, Next Slot, ghost_045_move_0408.png #232323 #ad0000" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touch_menu_button_count" "9" + "touch_menu_scale" "120" + "touch_menu_show_labels" "0" + } + } + "group" + { + "id" "7" + "mode" "switches" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start" + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select" + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left" + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right" + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1" + } + } + } + "disabled_activators" + { + } + } + } + } + "preset" + { + "id" "0" + "name" "Default" + "group_source_bindings" + { + "7" "switch active" + "0" "button_diamond active" + "1" "left_trackpad inactive" + "11" "left_trackpad inactive" + "14" "left_trackpad active" + "2" "right_trackpad inactive" + "6" "right_trackpad inactive" + "10" "right_trackpad inactive" + "12" "right_trackpad active" + "3" "joystick active" + "4" "left_trigger active" + "5" "right_trigger active" + "8" "right_joystick active" + "9" "dpad active" + "13" "gyro inactive" + } + } + "settings" + { + "left_trackpad_mode" "0" + "right_trackpad_mode" "0" + } +} diff --git a/configs/steam-input/pcsx2_controller_config.vdf b/configs/steam-input/pcsx2_controller_config.vdf index 879de218..3fa7a1e7 100644 --- a/configs/steam-input/pcsx2_controller_config.vdf +++ b/configs/steam-input/pcsx2_controller_config.vdf @@ -362,26 +362,6 @@ "description" "" "inputs" { - "click" - { - "activators" - { - "Full_Press" - { - "bindings" - { - "binding" "key_press M" - } - "settings" - { - "haptic_intensity" "2" - } - } - } - "disabled_activators" - { - } - } } "settings" { @@ -395,26 +375,6 @@ "description" "" "inputs" { - "click" - { - "activators" - { - "Full_Press" - { - "bindings" - { - "binding" "key_press N" - } - "settings" - { - "haptic_intensity" "2" - } - } - } - "disabled_activators" - { - } - } } "settings" { diff --git a/configs/steam-rom-manager/userData/userConfigurations.json b/configs/steam-rom-manager/userData/userConfigurations.json index beedcb53..fcd5cb18 100644 --- a/configs/steam-rom-manager/userData/userConfigurations.json +++ b/configs/steam-rom-manager/userData/userConfigurations.json @@ -75,7 +75,7 @@ "localHeroImages": "", "localLogoImages": "", "localIcons": "", - "disabled": true, + "disabled": false, "advanced": false, "executable": { "path": "/usr/bin/bash", @@ -1505,7 +1505,7 @@ "steamDirectory": "/home/deck/.steam/steam", "startInDirectory": "", "titleModifier": "${fuzzyTitle}", - "executableArgs": "run org.yuzu_emu.yuzu -f -g \"${filePath}\"", + "executableArgs": "-f -g \"'${filePath}'\"", "onlineImageQueries": "${${fuzzyTitle}}", "imagePool": "${fuzzyTitle}", "imageProviders": ["SteamGridDB"], @@ -1542,7 +1542,7 @@ "removeBrackets": true }, "executable": { - "path": "/usr/bin/flatpak", + "path": "/run/media/mmcblk0p1/Emulation/tools/launchers/yuzu.sh", "shortcutPassthrough": false, "appendArgsToExecutable": true }, @@ -2563,7 +2563,7 @@ "configTitle": "Sony PlayStation 3 - RPCS3(Flatpak) (Installed PKG)", "steamCategory": "${PS3}", "steamDirectory": "/home/deck/.steam/steam", - "romDirectory": "/run/media/mmcblk0p1/Emulation/saves/rpcs3/dev_hdd0/game", + "romDirectory": "/run/media/mmcblk0p1/Emulation/storage/rpcs3/dev_hdd0/game", "executableArgs": "run net.rpcs3.RPCS3 --no-gui \"${filePath}\"", "executableModifier": "\"${exePath}\"", "startInDirectory": "", diff --git a/functions/RAAchievment.sh b/functions/RAAchievment.sh new file mode 100644 index 00000000..7e658255 --- /dev/null +++ b/functions/RAAchievment.sh @@ -0,0 +1,43 @@ +#!/bin/bash +RAAchievment(){ +#if there is no rap file and we have said to enable retroachieve, we have to ask. Also if the user wants to change their sign in, we ask. +if [[ ! -f ~/emudeck/.rap && $doRAEnable == true ]] || [[ $doRASignIn == true ]]; then + + text=$(printf "Do you want to use RetroAchievments on Retroarch?\n\nYou need to have an account on https://retroachievements.org\n\nActivating RetroAchievments will disable save states unless you disable hardcore mode\n\n\n\nPress STEAM + X to get the onscreen Keyboard\n\nMake sure your RetroAchievments account is validated on the website or RetroArch will crash") + RAInput=$(zenity --forms \ + --title="Retroachievements Sign in" \ + --text="$text" \ + --add-entry="Username: " \ + --add-password="Password: " \ + --separator="," 2>/dev/null) + ans=$? + if [ $ans -eq 0 ]; then + echo "RetroAchievment Login" + echo $RAInput | awk -F "," '{print $1}' > ~/emudeck/.rau + echo $RAInput | awk -F "," '{print $2}' > ~/emudeck/.rap + rap=$(cat ~/emudeck/.rap) + rau=$(cat ~/emudeck/.rau) + if [ ${#rap} -lt 1 ]; then + echo "No password" + doRAEnable=false + elif [ ${#rau} -lt 1 ]; then + echo "No username" + doRAEnable=false + else + echo "Valid Username and Password" + fi + else + echo "Cancel RetroAchievment Login" + fi +fi + +#if we have a rap file already, and the user wanted to enable retroachievements, but didn't want to set a new username and pw. +if [[ -f ~/emudeck/.rap && $doRAEnable == true ]]; then + rap=$(cat ~/emudeck/.rap) + rau=$(cat ~/emudeck/.rau) + + sed -i "s|cheevos_password = \"\"|cheevos_password = \"${rap}\"|g" $raConfigFile + sed -i "s|cheevos_username = \"\"|cheevos_username = \"${rau}\"|g" $raConfigFile + sed -i "s|cheevos_enable = \"false\"|cheevos_enable = \"true\"|g" $raConfigFile +fi +} diff --git a/functions/RABezels.sh b/functions/RABezels.sh new file mode 100644 index 00000000..f242c796 --- /dev/null +++ b/functions/RABezels.sh @@ -0,0 +1,8 @@ +#!/bin/bash +RABezels(){ + if [ $RABezels == true ]; then + find ~/.var/app/org.libretro.RetroArch/config/retroarch/config/ -type f -name "*.bak" | while read f; do mv -v "$f" "${f%.*}.cfg"; done + else + find ~/.var/app/org.libretro.RetroArch/config/retroarch/config/ -type f -name "*.cfg" | while read f; do mv -v "$f" "${f%.*}.bak"; done + fi +} diff --git a/functions/RACores.sh b/functions/RACores.sh new file mode 100644 index 00000000..162a3150 --- /dev/null +++ b/functions/RACores.sh @@ -0,0 +1,44 @@ +#!/bin/bash +RACores(){ + mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch/cores + raUrl="https://buildbot.libretro.com/nightly/linux/x86_64/latest/" + RAcores=(bsnes_hd_beta_libretro.so flycast_libretro.so gambatte_libretro.so genesis_plus_gx_libretro.so genesis_plus_gx_wide_libretro.so mednafen_lynx_libretro.so mednafen_ngp_libretro.so mednafen_wswan_libretro.so melonds_libretro.so mesen_libretro.so mgba_libretro.so mupen64plus_next_libretro.so nestopia_libretro.so picodrive_libretro.so ppsspp_libretro.so snes9x_libretro.so stella_libretro.so yabasanshiro_libretro.so yabause_libretro.so yabause_libretro.so mame2003_plus_libretro.so mame2010_libretro.so mame_libretro.so melonds_libretro.so fbneo_libretro.so bluemsx_libretro.so desmume_libretro.so sameboy_libretro.so gearsystem_libretro.so mednafen_saturn_libretro.so opera_libretro.so dosbox_core_libretro.so dosbox_pure_libretro.so dosbox_svn_libretro.so puae_libretro.so) + setMSG "Downloading RetroArch Cores for EmuDeck" + for i in "${RAcores[@]}" + do + FILE=~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i} + if [ -f "$FILE" ]; then + echo "${i}...Already Downloaded" + else + curl $raUrl$i.zip --output ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip + #rm ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip + echo "${i}...Downloaded!" + fi + done + + if [ $doInstallESDE == true ]; then + RAcores=(a5200_libretro.so 81_libretro.so atari800_libretro.so bluemsx_libretro.so chailove_libretro.so fbneo_libretro.so freechaf_libretro.so freeintv_libretro.so fuse_libretro.so gearsystem_libretro.so gw_libretro.so hatari_libretro.so lutro_libretro.so mednafen_pcfx_libretro.so mednafen_vb_libretro.so mednafen_wswan_libretro.so mu_libretro.so neocd_libretro.so nestopia_libretro.so nxengine_libretro.so o2em_libretro.so picodrive_libretro.so pokemini_libretro.so prboom_libretro.so prosystem_libretro.so px68k_libretro.so quasi88_libretro.so scummvm_libretro.so squirreljme_libretro.so theodore_libretro.so uzem_libretro.so vecx_libretro.so vice_xvic_libretro.so virtualjaguar_libretro.so x1_libretro.so mednafen_lynx_libretro.so mednafen_ngp_libretro.so mednafen_pce_libretro.so mednafen_pce_fast_libretro.so mednafen_psx_libretro.so mednafen_psx_hw_libretro.so mednafen_saturn_libretro.so mednafen_supafaust_libretro.so mednafen_supergrafx_libretro.so blastem_libretro.so bluemsx_libretro.so bsnes_libretro.so bsnes_mercury_accuracy_libretro.so cap32_libretro.so citra2018_libretro.so citra_libretro.so crocods_libretro.so desmume2015_libretro.so desmume_libretro.so dolphin_libretro.so dosbox_core_libretro.so dosbox_pure_libretro.so dosbox_svn_libretro.so fbalpha2012_cps1_libretro.so fbalpha2012_cps2_libretro.so fbalpha2012_cps3_libretro.so fbalpha2012_libretro.so fbalpha2012_neogeo_libretro.so fceumm_libretro.so fbneo_libretro.so flycast_libretro.so fmsx_libretro.so frodo_libretro.so gambatte_libretro.so gearboy_libretro.so gearsystem_libretro.so genesis_plus_gx_libretro.so genesis_plus_gx_wide_libretro.so gpsp_libretro.so handy_libretro.so kronos_libretro.so mame2000_libretro.so mame2003_plus_libretro.so mame2010_libretro.so mame_libretro.so melonds_libretro.so mesen_libretro.so mesen-s_libretro.so mgba_libretro.so mupen64plus_next_libretro.so nekop2_libretro.so np2kai_libretro.so nestopia_libretro.so parallel_n64_libretro.so pcsx2_libretro.so pcsx_rearmed_libretro.so picodrive_libretro.so ppsspp_libretro.so puae_libretro.so quicknes_libretro.so race_libretro.so sameboy_libretro.so smsplus_libretro.so snes9x2010_libretro.so snes9x_libretro.so stella2014_libretro.so stella_libretro.so tgbdual_libretro.so vbam_libretro.so vba_next_libretro.so vice_x128_libretro.so vice_x64_libretro.so vice_x64sc_libretro.so vice_xscpu64_libretro.so yabasanshiro_libretro.so yabause_libretro.so bsnes_hd_beta_libretro.so swanstation_libretro.so) + setMSG "Downloading RetroArch Cores for EmulationStation DE" + for i in "${RAcores[@]}" + do + FILE=~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i} + if [ -f "$FILE" ]; then + echo "${i}...Already Downloaded" + else + curl $raUrl$i.zip --output ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip + #rm ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip + echo "${i}...Downloaded!" + fi + done + fi + + for entry in ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/*.zip + do + unzip -o "$entry" -d ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/ + done + + for entry in ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/*.zip + do + rm -f "$entry" + done +} diff --git a/functions/RASNES.sh b/functions/RASNES.sh new file mode 100644 index 00000000..f7ed1e76 --- /dev/null +++ b/functions/RASNES.sh @@ -0,0 +1,8 @@ +#!/bin/bash +RASNES(){ + if [ $SNESAR == 43 ]; then + cp ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes43.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes.cfg + else + cp ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes87.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes.cfg + fi +} diff --git a/functions/RAautoSave.sh b/functions/RAautoSave.sh new file mode 100644 index 00000000..44e74f06 --- /dev/null +++ b/functions/RAautoSave.sh @@ -0,0 +1,10 @@ +#!/bin/bash +RAautoSave(){ + if [ $RAautoSave == true ]; then + sed -i 's|savestate_auto_load = "false"|savestate_auto_load = "true"|g' $raConfigFile + sed -i 's|savestate_auto_save = "false"|savestate_auto_save = "true"|g' $raConfigFile + else + sed -i 's|savestate_auto_load = "true"|savestate_auto_load = "false"|g' $raConfigFile + sed -i 's|savestate_auto_save = "true"|savestate_auto_save = "false"|g' $raConfigFile + fi +} diff --git a/functions/RunFunc.sh b/functions/RunFunc.sh new file mode 100644 index 00000000..2840d197 --- /dev/null +++ b/functions/RunFunc.sh @@ -0,0 +1,2 @@ +#!/bin/bash +source all.sh && "@a" diff --git a/functions/all.sh b/functions/all.sh new file mode 100644 index 00000000..03b4aa00 --- /dev/null +++ b/functions/all.sh @@ -0,0 +1,29 @@ +#!/bin/bash +source "$EMUDECKGIT"/functions/checkPSBIOS.sh +source "$EMUDECKGIT"/functions/configEmuAI.sh +source "$EMUDECKGIT"/functions/configEmuFP.sh +source "$EMUDECKGIT"/functions/configESDE.sh +source "$EMUDECKGIT"/functions/configSRM.sh +source "$EMUDECKGIT"/functions/createDesktopIcons.sh +source "$EMUDECKGIT"/functions/createSaveFolders.sh +source "$EMUDECKGIT"/functions/installCHD.sh +source "$EMUDECKGIT"/functions/installEmuFP.sh +source "$EMUDECKGIT"/functions/installESDE.sh +source "$EMUDECKGIT"/functions/installPowerTools.sh +source "$EMUDECKGIT"/functions/installSRM.sh +source "$EMUDECKGIT"/functions/RAAchievment.sh +source "$EMUDECKGIT"/functions/RAautoSave.sh +source "$EMUDECKGIT"/functions/RABezels.sh +source "$EMUDECKGIT"/functions/RACores.sh +source "$EMUDECKGIT"/functions/RASNES.sh +source "$EMUDECKGIT"/functions/setESDEEmus.sh +source "$EMUDECKGIT"/functions/setMSG.sh +source "$EMUDECKGIT"/functions/setUpHolo.sh +source "$EMUDECKGIT"/functions/setWide.sh +source "$EMUDECKGIT"/functions/testLocationValid.sh +source "$EMUDECKGIT"/functions/setSetting.sh +source "$EMUDECKGIT"/functions/linkToSaveFolder.sh +source "$EMUDECKGIT"/functions/installEmuAI.sh +source "$EMUDECKGIT"/functions/getLatestReleaseURLGH.sh +source "$EMUDECKGIT"/functions/migrateAndLinkConfig.sh +source "$EMUDECKGIT"/functions/doMigrations.sh \ No newline at end of file diff --git a/functions/checkPSBIOS.sh b/functions/checkPSBIOS.sh new file mode 100644 index 00000000..c11e8af9 --- /dev/null +++ b/functions/checkPSBIOS.sh @@ -0,0 +1,57 @@ +#!/bin/bash +checkPSBIOS(){ + + PSXBIOS="NULL" + PS2BIOS="NULL" + for entry in $biosPath/* + do + if [ -f "$entry" ]; then + md5=($(md5sum "$entry")) + if [[ "$PSXBIOS" != true ]]; then + PSBios=(239665b1a3dade1b5a52c06338011044 2118230527a9f51bd9216e32fa912842 849515939161e62f6b866f6853006780 dc2b9bf8da62ec93e868cfd29f0d067d 54847e693405ffeb0359c6287434cbef cba733ceeff5aef5c32254f1d617fa62 da27e8b6dab242d8f91a9b25d80c63b8 417b34706319da7cf001e76e40136c23 57a06303dfa9cf9351222dfcbb4a29d9 81328b966e6dcf7ea1e32e55e1c104bb 924e392ed05558ffdb115408c263dccf e2110b8a2b97a8e0b857a45d32f7e187 ca5cfc321f916756e3f0effbfaeba13b 8dd7d5296a650fac7319bce665a6a53c 490f666e1afb15b7362b406ed1cea246 32736f17079d0b2b7024407c39bd3050 8e4c14f567745eff2f0408c8129f72a6 b84be139db3ee6cbd075630aa20a6553 1e68c231d0896b7eadcad1d7d8e76129 b9d9a0286c33dc6b7237bb13cd46fdee 8abc1b549a4a80954addc48ef02c4521 9a09ab7e49b422c007e6d54d7c49b965 b10f5e0e3d9eb60e5159690680b1e774 6e3735ff4c7dc899ee98981385f6f3d0 de93caec13d1a141a40a79f5c86168d6 c53ca5908936d412331790f4426c6c33 476d68a94ccec3b9c8303bbd1daf2810 d8f485717a5237285e4d7c5f881b7f32 fbb5f59ec332451debccf1e377017237 81bbe60ba7a3d1cea1d48c14cbcc647b) + for i in "${PSBios[@]}" + do + if [[ "$md5" == *"${i}"* ]]; then + PSXBIOS=true + break + else + PSXBIOS=false + fi + done + fi + + if [[ "$PS2BIOS" != true ]]; then + PS2Bios=(32f2e4d5ff5ee11072a6bc45530f5765 acf4730ceb38ac9d8c7d8e21f2614600 acf9968c8f596d2b15f42272082513d1 b1459d7446c69e3e97e6ace3ae23dd1c d3f1853a16c2ec18f3cd1ae655213308 63e6fd9b3c72e0d7b920e80cf76645cd a20c97c02210f16678ca3010127caf36 8db2fbbac7413bf3e7154c1e0715e565 91c87cb2f2eb6ce529a2360f80ce2457 3016b3dd42148a67e2c048595ca4d7ce b7fa11e87d51752a98b38e3e691cbf17 f63bc530bd7ad7c026fcd6f7bd0d9525 cee06bd68c333fc5768244eae77e4495 0bf988e9c7aaa4c051805b0fa6eb3387 8accc3c49ac45f5ae2c5db0adc854633 6f9a6feb749f0533aaae2cc45090b0ed 838544f12de9b0abc90811279ee223c8 bb6bbc850458fff08af30e969ffd0175 815ac991d8bc3b364696bead3457de7d b107b5710042abe887c0f6175f6e94bb ab55cceea548303c22c72570cfd4dd71 18bcaadb9ff74ed3add26cdf709fff2e 491209dd815ceee9de02dbbc408c06d6 7200a03d51cacc4c14fcdfdbc4898431 8359638e857c8bc18c3c18ac17d9cc3c 352d2ff9b3f68be7e6fa7e6dd8389346 d5ce2c7d119f563ce04bc04dbc3a323e 0d2228e6fd4fb639c9c39d077a9ec10c 72da56fccb8fcd77bba16d1b6f479914 5b1f47fbeb277c6be2fccdd6344ff2fd 315a4003535dfda689752cb25f24785c 312ad4816c232a9606e56f946bc0678a 666018ffec65c5c7e04796081295c6c7 6e69920fa6eef8522a1d688a11e41bc6 eb960de68f0c0f7f9fa083e9f79d0360 8aa12ce243210128c5074552d3b86251 240d4c5ddd4b54069bdc4a3cd2faf99d 1c6cd089e6c83da618fbf2a081eb4888 463d87789c555a4a7604e97d7db545d1 35461cecaa51712b300b2d6798825048 bd6415094e1ce9e05daabe85de807666 2e70ad008d4ec8549aada8002fdf42fb b53d51edc7fc086685e31b811dc32aad 1b6e631b536247756287b916f9396872 00da1b177096cfd2532c8fa22b43e667 afde410bd026c16be605a1ae4bd651fd 81f4336c1de607dd0865011c0447052e 0eee5d1c779aa50e94edd168b4ebf42e d333558cc14561c1fdc334c75d5f37b7 dc752f160044f2ed5fc1f4964db2a095 63ead1d74893bf7f36880af81f68a82d 3e3e030c0f600442fa05b94f87a1e238 1ad977bb539fc9448a08ab276a836bbc eb4f40fcf4911ede39c1bbfe91e7a89a 9959ad7a8685cad66206e7752ca23f8b 929a14baca1776b00869f983aa6e14d2 573f7d4a430c32b3cc0fd0c41e104bbd df63a604e8bff5b0599bd1a6c2721bd0 5b1ba4bb914406fae75ab8e38901684d cb801b7920a7d536ba07b6534d2433ca af60e6d1a939019d55e5b330d24b1c25 549a66d0c698635ca9fa3ab012da7129 5de9d0d730ff1e7ad122806335332524 21fe4cad111f7dc0f9af29477057f88d 40c11c063b3b9409aa5e4058e984e30c 80bbb237a6af9c611df43b16b930b683 c37bce95d32b2be480f87dd32704e664 80ac46fa7e77b8ab4366e86948e54f83 21038400dc633070a78ad53090c53017 dc69f0643a3030aaa4797501b483d6c4 30d56e79d89fbddf10938fa67fe3f34e 93ea3bcee4252627919175ff1b16a1d9 d3e81e95db25f5a86a7b7474550a2155) + for i in "${PS2Bios[@]}" + do + if [[ "$md5" == *"${i}"* ]]; then + PS2BIOS=true + break + else + PS2BIOS=false + fi + done + fi + fi + done + + + if [ $PSXBIOS == false ]; then + #text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: ${biosPath}"`" + text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: \n${biosPath}\n\nMake sure they are not in a subdirectory"`" + zenity --error \ + --title="EmuDeck" \ + --width=400 \ + --text="${text}" 2>/dev/null + fi + + if [ $PS2BIOS == false ]; then + #text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: ${biosPath}"`" + text="`printf "PS2 bios not detected\nYou need to copy your BIOS to: \n${biosPath}\n\nMake sure they are not in a subdirectory"`" + zenity --error \ + --title="EmuDeck" \ + --width=400 \ + --text="${text}" 2>/dev/null + fi + +} \ No newline at end of file diff --git a/functions/configESDE.sh b/functions/configESDE.sh new file mode 100644 index 00000000..7084ef6e --- /dev/null +++ b/functions/configESDE.sh @@ -0,0 +1,146 @@ +#!/bin/bash +configESDE(){ + reset=$1 + + if [[ $reset == 'reset' ]]; then + setMSG "Resetting EmulationStation DE..." + else + setMSG "Configuring EmulationStation DE..." + fi + mkdir -p ~/.emulationstation/ + mkdir -p ~/.emulationstation/custom_systems/ + es_systemsFile="$HOME/.emulationstation/custom_systems/es_systems.xml" + es_settingsFile="$HOME/.emulationstation/es_settings.xml" + + #Custom Systems config Begin + if [[ ! -f "$es_systemsFile" || $reset == "true" ]]; then + cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/custom_systems/es_systems.xml $es_systemsFile + fi + + #update cemu custom system launcher to correct path by just replacing the line, if it exists. + commandString="/usr/bin/bash ${toolsPath}launchers/cemu.sh -f -g z:%ROM%" + xmlstarlet ed -L -u '/systemList/system/command[@label="Cemu (Proton)"]' -v "$commandString" $es_systemsFile + + #insert cemu custom system if it doesn't exist, but the file does + if [[ $(grep -rnw $es_systemsFile -e 'Cemu (Proton)') == "" ]]; then + xmlstarlet ed --inplace --subnode '/systemList' --type elem --name 'system' \ + --var newSystem '$prev' \ + --subnode '$newSystem' --type elem --name 'name' -v 'wiiu' \ + --subnode '$newSystem' --type elem --name 'fullname' -v 'Nintendo Wii U' \ + --subnode '$newSystem' --type elem --name 'path' -v '%ROMPATH%/wiiu/roms' \ + --subnode '$newSystem' --type elem --name 'extension' -v '.rpx .RPX .wud .WUD .wux .WUX .elf .ELF .iso .ISO .wad .WAD .wua .WUA' \ + --subnode '$newSystem' --type elem --name 'command' -v "/usr/bin/bash ${toolsPath}launchers/cemu.sh -f -g z:%ROM%" \ + --insert '$newSystem/command' --type attr --name 'label' --value "Cemu (Proton)" \ + --subnode '$newSystem' --type elem --name 'platform' -v 'wiiu' \ + --subnode '$newSystem' --type elem --name 'theme' -v 'wiiu' \ + $es_systemsFile + fi + #Custom Systems config end + + #update es_settings.xml + if [[ ! -f "$es_settingsFile" || $reset == 'reset' ]]; then + cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/es_settings.xml $es_settingsFile + fi + + #configure roms Directory + esDE_romDir="" + romDirEmpty=$(grep -rnw $es_settingsFile -e '') + sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" $es_settingsFile + if [[ ! $romDirEmpty == '' ]]; then + sed -i "//c\\${esDE_romDir}" $es_settingsFile + fi + + #Configure Downloaded_media folder + esDE_MediaDir="" + #search for media dir in xml, if not found, change to ours. If it's blank, also change to ours. + mediaDirFound=$(grep -rnw $es_settingsFile -e 'MediaDirectory') + mediaDirEmpty=$(grep -rnw $es_settingsFile -e '') + if [[ $mediaDirFound == '' ]]; then + sed -i -e '$a'"${esDE_MediaDir}" $es_settingsFile # use config file instead of link + elif [[ ! $mediaDirEmpty == '' ]]; then + sed -i "//c\\${esDE_MediaDir}" $es_settingsFile + fi + + #We check if we have downloaded_media data on ESDE so we can move it to the SD card + + originalESMediaFolder="$HOME/.emulationstation/downloaded_media" + echo "processing $originalESMediaFolder" + if [ -L ${originalESMediaFolder} ] ; then + echo "link found" + unlink ${originalESMediaFolder} && echo "unlinked" + elif [ -e ${originalESMediaFolder} ] ; then + if [ -d "${originalESMediaFolder}" ]; then + echo -e "" + echo -e "Moving EmulationStation-DE downloaded_media to $toolsPath" + echo -e "" + rsync -a $originalESMediaFolder $toolsPath && rm -rf $originalESMediaFolder #move it, merging files if in both locations + fi + else + echo "downloaded_media not found on original location" + fi + + + if [[ $doESDEThemePicker == true ]]; then + if [[ $expert == true ]]; then + text="Which theme do you want to set as default on EmulationStation DE?" + esdeTheme=$(zenity --list \ + --title="EmuDeck" \ + --height=250 \ + --width=250 \ + --ok-label="OK" \ + --cancel-label="Exit" \ + --text="${text}" \ + --radiolist \ + --column="" \ + --column="Theme" \ + 1 "EPICNOIR" \ + 2 "MODERN-DE" \ + 3 "RBSIMPLE-DE" 2>/dev/null) + ans=$? + if [ $ans -eq 0 ]; then + echo "Theme selected" + fi + fi + fi + + mkdir -p ~/.emulationstation/themes/ + git clone https://github.com/dragoonDorise/es-theme-epicnoir.git ~/.emulationstation/themes/es-epicnoir &>> /dev/null + cd ~/.emulationstation/themes/es-epicnoir && git pull + echo -e "OK!" + + #Do this properly with wildcards + if [[ "$esdeTheme" == *"EPICNOIR"* ]]; then + sed -i "s|rbsimple-DE|es-epicnoir|" $es_settingsFile + sed -i "s|modern-DE|es-epicnoir|" $es_settingsFile + sed -i "s|es-epicnoir|es-epicnoir|" $es_settingsFile + fi + if [[ "$esdeTheme" == *"MODERN-DE"* ]]; then + sed -i "s|rbsimple-DE|modern-DE|" $es_settingsFile + sed -i "s|modern-DE|modern-DE|" $es_settingsFile + sed -i "s|es-epicnoir|modern-DE|" $es_settingsFile + fi + if [[ "$esdeTheme" == *"RBSIMPLE-DE"* ]]; then + sed -i "s|rbsimple-DE|rbsimple-DE|" $es_settingsFile + sed -i "s|modern-DE|rbsimple-DE|" $es_settingsFile + sed -i "s|es-epicnoir|rbsimple-DE|" $es_settingsFile + fi + + + #ESDE default emulators + mkdir -p ~/.emulationstation/gamelists/ + setESDEEmus 'Dolphin (Standalone)' gc + setESDEEmus 'PPSSPP (Standalone)' psp + setESDEEmus 'Dolphin (Standalone)' wii + setESDEEmus 'PCSX2 (Standalone)' ps2 + setESDEEmus 'melonDS' nds + setESDEEmus 'Citra (Standalone)' n3ds + + #Symlinks for ESDE compatibility + cd $(echo $romsPath | tr -d '\r') + ln -sn gamecube gc + ln -sn 3ds n3ds + ln -sn arcade mamecurrent + ln -sn mame mame2003 + ln -sn lynx atarilynx + +} \ No newline at end of file diff --git a/functions/configEmuAI.sh b/functions/configEmuAI.sh new file mode 100644 index 00000000..5f7b67e0 --- /dev/null +++ b/functions/configEmuAI.sh @@ -0,0 +1,23 @@ +#!/bin/bash +configEmuAI(){ + + emu=$1 + folderName=$2 + folderPath=$3 + gitLocation=$4 + overwrite=$5 + + if [[ ! $overwrite == 'true' ]]; then + overwrite="--ignore-existing" + else + overwrite="" + fi + + setMSG "Backing up ${emu} ${folderName}..." + rm -rf ${folderPath}_bak + cp -r ${folderPath} ${folderPath}_bak + + + rsync -avhp $gitLocation/ $folderPath $overwrite + +} \ No newline at end of file diff --git a/functions/configEmuFP.sh b/functions/configEmuFP.sh new file mode 100644 index 00000000..b8b753b9 --- /dev/null +++ b/functions/configEmuFP.sh @@ -0,0 +1,21 @@ +#!/bin/bash +configEmuFP(){ + + name=$1 + ID=$2 + + FOLDER=~/.var/app/"${ID}"/config_bak + if [ ! -d "$FOLDER" ]; then + setMSG "Backing up ${name} Config..." + cp -r ~/.var/app/"${ID}"/config ~/.var/app/"${ID}"/config_bak + fi + + FOLDER=~/.var/app/"${ID}"/data_bak + if [ ! -d "$FOLDER" ]; then + setMSG "Backing up ${name} Data..." + cp -r ~/.var/app/"${ID}"/data ~/.var/app/"${ID}"/data_bak + fi + + rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/"${ID}"/ ~/.var/app/"${ID}"/ + +} \ No newline at end of file diff --git a/functions/configSRM.sh b/functions/configSRM.sh new file mode 100644 index 00000000..308114a1 --- /dev/null +++ b/functions/configSRM.sh @@ -0,0 +1,11 @@ +#!/bin/bash +configSRM(){ + setMSG "Configuring Steam Rom Manager..." + mkdir -p ~/.config/steam-rom-manager/userData/ + cp ~/dragoonDoriseTools/EmuDeck/configs/steam-rom-manager/userData/userConfigurations.json ~/.config/steam-rom-manager/userData/userConfigurations.json + sleep 3 + sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json + sed -i "s|/run/media/mmcblk0p1/Emulation/tools/|${toolsPath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json + sed -i "s|/run/media/mmcblk0p1/Emulation/storage/|${storagePath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json + echo -e "OK!" +} \ No newline at end of file diff --git a/functions/createDesktopIcons.sh b/functions/createDesktopIcons.sh new file mode 100644 index 00000000..da7709ad --- /dev/null +++ b/functions/createDesktopIcons.sh @@ -0,0 +1,27 @@ +#!/bin/bash +createDesktopIcons(){ + + #We create new icons + rm -rf ~/Desktop/EmuDeckUninstall.desktop 2>/dev/null + echo '#!/usr/bin/env xdg-open + [Desktop Entry] + Name=Uninstall EmuDeck + Exec=curl https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/uninstall.sh | bash -s -- SD + Icon=delete + Terminal=true + Type=Application + StartupNotify=false' > ~/Desktop/EmuDeckUninstall.desktop + chmod +x ~/Desktop/EmuDeckUninstall.desktop + + rm -rf ~/Desktop/EmuDeck.desktop 2>/dev/null + rm -rf ~/Desktop/EmuDeckSD.desktop 2>/dev/null + echo "#!/usr/bin/env xdg-open + [Desktop Entry] + Name=EmuDeck (${version}) + Exec=curl https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/install.sh | bash -s -- SD + Icon=steamdeck-gaming-return + Terminal=true + Type=Application + StartupNotify=false" > ~/Desktop/EmuDeck.desktop + chmod +x ~/Desktop/EmuDeck.desktop +} \ No newline at end of file diff --git a/functions/createSaveFolders.sh b/functions/createSaveFolders.sh new file mode 100644 index 00000000..06a385e4 --- /dev/null +++ b/functions/createSaveFolders.sh @@ -0,0 +1,46 @@ +#!/bin/bash +createSaveFolders(){ + + #linkToSaveFolder emuname foldername pathtolink + + #RA + linkToSaveFolder retroarch states ~/.var/app/org.libretro.RetroArch/config/retroarch/states + linkToSaveFolder retroarch saves ~/.var/app/org.libretro.RetroArch/config/retroarch/saves + + #Dolphin + linkToSaveFolder dolphin GC ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC + linkToSaveFolder dolphin Wii ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/Wii + linkToSaveFolder dolphin states ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/states + + #PrimeHack + linkToSaveFolder primehack GC ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/GC + linkToSaveFolder primehack Wii ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/Wii + linkToSaveFolder primehack states ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/states + + #Yuzu + unlink $savesPath/yuzu/saves # Fix for previous bad symlink + linkToSaveFolder yuzu saves $storagePath/yuzu/nand/user/save/ + + #Duckstation + linkToSaveFolder duckstation saves ~/.var/app/org.duckstation.DuckStation/data/duckstation/memcards + linkToSaveFolder duckstation states ~/.var/app/org.duckstation.DuckStation/data/duckstation/savestates + + #PCSX2 + linkToSaveFolder pcsx2 saves ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/memcards + linkToSaveFolder pcsx2 states ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/sstates + + #Citra + linkToSaveFolder citra saves ~/.var/app/org.citra_emu.citra/data/citra-emu/sdmc + linkToSaveFolder citra states ~/.var/app/org.citra_emu.citra/data/citra-emu/states + + #PPSSPP + linkToSaveFolder ppsspp saves ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/SAVEDATA + linkToSaveFolder ppsspp states ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/PPSSPP_STATE + + #xemu + + + #rpcs3 + #add links for the actual saves here. + +} \ No newline at end of file diff --git a/functions/doMigrations.sh b/functions/doMigrations.sh new file mode 100644 index 00000000..0e784b23 --- /dev/null +++ b/functions/doMigrations.sh @@ -0,0 +1,79 @@ +#!/bin/bash +doMigrations(){ + + ##nonstandard## + #Xemu files to storage if we have a xemu app folder + if [ ! -f "$storagePath/xemu/xbox_hdd.qcow2" ] && [ -d "$HOME/.var/app/app.xemu.xemu" ]; then + + echo "xbox hdd does not exist in storagepath." + mkdir -p "$storagePath/xemu" + flatpak override app.xemu.xemu --filesystem="$storagePath"xemu:rw --user + + xemuConf="$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml" + xemuHDDLine="hdd_path = '${storagePath}xemu/xbox_hdd.qcow2'" + xemuEEPLine="eeprom_path = '${storagePath}xemu/eeprom.bin'" + sed -i "/hdd_path/c\\${xemuHDDLine}" $xemuConf + sed -i "/eeprom_path/c\\${xemuEEPLine}" $xemuConf + + echo -e "" + setMSG "Moving Xemu HDD and EEPROM to the Emulation/storage folder" + echo -e "" + + if [ -f "${savesPath}xemu/xbox_hdd.qcow2" ]; then + mv -fv ${savesPath}xemu/* ${storagePath}xemu/ && rm -rf ${savesPath}xemu/ + + elif [ -f "$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xbox_hdd.qcow2" ]; then + mv "$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xbox_hdd.qcow2" $storagePath/xemu/ + mv "$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/eeprom.bin" $storagePath/xemu/ + + fi + fi + + #RPCS3 files to storage + if [ ! -d "$storagePath"rpcs3/dev_hdd0 ] && [ -d "$HOME/.var/app/net.rpcs3.RPCS3/" ];then + echo "rpcs3 hdd does not exist in storagepath." + #update config file for the new loc $(emulatorDir) is in the file. made this annoying. + rpcs3VFSConf="$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/vfs.yml" + rpcs3DevHDD0Line="/dev_hdd0/: ${storagePath}rpcs3/dev_hdd0/" + sed -i "/dev_hdd0/c\\${rpcs3DevHDD0Line}" $rpcs3VFSConf + + echo -e "" + setMSG "Moving rpcs3 HDD to the Emulation/storage folder" + echo -e "" + + mkdir -p "$storagePath/rpcs3" + + if [ -d "$savesPath/rpcs3/dev_hdd0" ]; then + mv -f "$savesPath"rpcs3/dev_hdd0 "$storagePath"rpcs3/ + + elif [ -d "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" ]; then + rsync -av "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" "$storagePath"rpcs3/ && rm -rf "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" + + fi + fi + + #yuzu flatpak to appimage + emu="Yuzu" + #From -- > to + migrationTable=() + migrationTable+=("$HOME/.var/app/org.yuzu_emu.yuzu/data/yuzu" "$HOME/.local/share/yuzu") + migrationTable+=("$HOME/.var/app/org.yuzu_emu.yuzu/config/yuzu" "$HOME/.config/yuzu") + + migrateAndLinkConfig $emu $migrationTable + + mkdir -p ${storagePath}yuzu/dump + mkdir -p ${storagePath}yuzu/load + mkdir -p ${storagePath}yuzu/sdmc + mkdir -p ${storagePath}yuzu/nand + mkdir -p ${storagePath}yuzu/screenshots + mkdir -p ${storagePath}yuzu/tas + + #move data from hidden folders out to these folders in case the user already put stuff here. + origPath="$HOME/.local/share/" + rsync -av ${origPath}yuzu/dump ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/dump + rsync -av ${origPath}yuzu/load ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/load + rsync -av ${origPath}yuzu/sdmc ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/sdmc + rsync -av ${origPath}yuzu/nand ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/nand + rsync -av ${origPath}yuzu/screenshots ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/screenshots + rsync -av ${origPath}yuzu/tas ${storagePath}yuzu/ && rm -rf ${origPath}yuzu/tas +} \ No newline at end of file diff --git a/functions/getLatestReleaseURLGH.sh b/functions/getLatestReleaseURLGH.sh new file mode 100644 index 00000000..a1b7a94b --- /dev/null +++ b/functions/getLatestReleaseURLGH.sh @@ -0,0 +1,10 @@ +#!/bin/bash +getLatestReleaseURLGH(){ + +repository=$1 +fileType=$2 + +url="$(curl -sL https://api.github.com/repos/${repository}/releases/latest | jq -r ".assets[].browser_download_url" | grep .${fileType}\$)" + +echo "$url" +} \ No newline at end of file diff --git a/functions/installCHD.sh b/functions/installCHD.sh new file mode 100644 index 00000000..2b770182 --- /dev/null +++ b/functions/installCHD.sh @@ -0,0 +1,21 @@ +#!/bin/bash +installCHD(){ + mkdir -p "$toolsPath"chdconv/ + rsync -avhp ~/dragoonDoriseTools/EmuDeck/tools/chdconv/ "$toolsPath"chdconv/ + + rm -rf ~/Desktop/EmuDeckCHD.desktop 2>/dev/null + echo "#!/usr/bin/env xdg-open + [Desktop Entry] + Name=EmuDeck CHD Script + Exec=bash "$toolsPath"chdconv/chddeck.sh + Icon=steamdeck-gaming-return + Terminal=true + Type=Application + StartupNotify=false" > ~/Desktop/EmuDeckCHD.desktop + chmod +x ~/Desktop/EmuDeckCHD.desktop + chmod +x "$toolsPath"chdconv/chddeck.sh + chmod +x "$toolsPath"chdconv/chdman5 + #update the paths in the script + sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" "$toolsPath"chdconv/chddeck.sh + sed -i "s|/run/media/mmcblk0p1/Emulation/tools/|${toolsPath}|g" "$toolsPath"chdconv/chddeck.sh +} \ No newline at end of file diff --git a/functions/installESDE.sh b/functions/installESDE.sh new file mode 100644 index 00000000..90a17fc8 --- /dev/null +++ b/functions/installESDE.sh @@ -0,0 +1,17 @@ +#!/bin/bash +installESDE(){ + + setMSG "${installString} EmulationStation Desktop Edition" + curl https://gitlab.com/leonstyhre/emulationstation-de/-/raw/master/es-app/assets/latest_steam_deck_appimage.txt --output "$toolsPath"/latesturl.txt + latestURL=$(grep "https://gitlab" "$toolsPath"/latesturl.txt) + + #New repo if the other fails + if [ -z $latestURL ]; then + curl https://gitlab.com/es-de/emulationstation-de/-/raw/master/es-app/assets/latest_steam_deck_appimage.txt --output "$toolsPath"/latesturl.txt + latestURL=$(grep "https://gitlab" "$toolsPath"/latesturl.txt) + fi + curl $latestURL --output "$toolsPath"/EmulationStation-DE-x64_SteamDeck.AppImage + rm "$toolsPath"/latesturl.txt + chmod +x "$toolsPath"/EmulationStation-DE-x64_SteamDeck.AppImage + +} \ No newline at end of file diff --git a/functions/installEmuAI.sh b/functions/installEmuAI.sh new file mode 100644 index 00000000..6b708b19 --- /dev/null +++ b/functions/installEmuAI.sh @@ -0,0 +1,24 @@ +#!/bin/bash +installEmuAI(){ + + name=$1 + url=$2 + altName=$3 + + if [[ $altName == "" ]]; then + altName=$name + fi + + mkdir -p $HOME/Applications + cd $HOME/Applications + + wget -c "$url" -O "$altName.AppImage" + + shName=$(echo "$name" | awk '{print tolower($0)}') + + find . -type f -iname $shName.sh | while read f; do echo "deleting $f"; rm -f "$f"; done; + cp "${EMUDECKGIT}"/tools/launchers/"${shName}".sh "${toolsPath}"launchers/"${shName}".sh + + + +} \ No newline at end of file diff --git a/functions/installEmuFP.sh b/functions/installEmuFP.sh new file mode 100644 index 00000000..4bb40fbd --- /dev/null +++ b/functions/installEmuFP.sh @@ -0,0 +1,18 @@ +#!/bin/bash +installEmuFP(){ + + name=$1 + ID=$2 + + setMSG "Installing $name" + + flatpak install flathub $ID -y --system + flatpak override $ID --filesystem=host --user + flatpak override $ID --share=network --user + + shName=$(echo "$name" | awk '{print tolower($0)}') + + find . -type f -iname $shName.sh | while read f; do echo "deleting $f"; rm -f "$f"; done; + cp "${EMUDECKGIT}"/tools/launchers/"${shName}".sh "${toolsPath}"launchers/"${shName}".sh + +} \ No newline at end of file diff --git a/functions/installPowerTools.sh b/functions/installPowerTools.sh new file mode 100644 index 00000000..6b916a4d --- /dev/null +++ b/functions/installPowerTools.sh @@ -0,0 +1,16 @@ +#!/bin/bash +installPowerTools(){ + #should use sudo password piped into cache earlier. +curl -L https://github.com/SteamDeckHomebrew/PluginLoader/raw/main/dist/install_release.sh | sh +sudo rm -rf ~/homebrew/plugins/PowerTools +sudo git clone https://github.com/NGnius/PowerTools.git ~/homebrew/plugins/PowerTools +sleep 1 +cd ~/homebrew/plugins/PowerTools +sudo git checkout tags/v0.6.0 +text="$(printf "To finish the installation of PowerTools you will need to go into the Steam UI Settings\n\nUnder System -> System Settings toggle Enable Developer Mode\n\nScroll the sidebar all the way down and click on Developer\n\nUnder Miscellaneous, enable CEF Remote Debugging\n\nIn order to improve performance on Yuzu or Dolphin try configuring Powertools to activate only 4 CPU Cores\n\nYou can Access Powertools by presing the ... button and selecting the new Plugins Menu\n\n +\n\nIMPORTANT - The Powertools menu is touch ONLY.\n\n")" +zenity --info \ + --title="EmuDeck" \ + --width=450 \ + --text="${text}" 2>/dev/null +} \ No newline at end of file diff --git a/functions/installSRM.sh b/functions/installSRM.sh new file mode 100644 index 00000000..bebdd82a --- /dev/null +++ b/functions/installSRM.sh @@ -0,0 +1,19 @@ +#!/bin/bash +installSRM(){ + setMSG "${installString} Steam Rom Manager" + rm -f ~/Desktop/Steam-ROM-Manager-2.3.29.AppImage + rm -f ~/Desktop/Steam-ROM-Manager.AppImage + mkdir -p "${toolsPath}"/srm + curl -L "$(curl -s https://api.github.com/repos/SteamGridDB/steam-rom-manager/releases/latest | grep -E 'browser_download_url.*AppImage' | grep -ve 'i386' | cut -d '"' -f 4)" > "${toolsPath}"srm/Steam-ROM-Manager.AppImage + #Nova fix' + echo "#!/usr/bin/env xdg-open + [Desktop Entry] + Name=Steam Rom Manager + Exec=kill -15 \`pidof steam\` & ${toolsPath}srm/Steam-ROM-Manager.AppImage + Icon=steamdeck-gaming-return + Terminal=false + Type=Application + StartupNotify=false" > ~/Desktop/SteamRomManager.desktop + chmod +x ~/Desktop/SteamRomManager.desktop + chmod +x "${toolsPath}"/srm/Steam-ROM-Manager.AppImage +} \ No newline at end of file diff --git a/functions/linkToSaveFolder.sh b/functions/linkToSaveFolder.sh new file mode 100644 index 00000000..6079518c --- /dev/null +++ b/functions/linkToSaveFolder.sh @@ -0,0 +1,16 @@ +#!/bin/bash +linkToSaveFolder(){ + emu=$1 + folderName=$2 + path=$3 + + if [ ! -d "$savesPath/$emu/$folderName" ]; then + mkdir -p $savesPath/$emu + echo -e "" + echo -e "Linking $emu $folderName to the Emulation/saves folder" + echo -e "" + mkdir -p $path + ln -sn $path $savesPath/$emu/$folderName + fi + +} \ No newline at end of file diff --git a/functions/migrateAndLinkConfig.sh b/functions/migrateAndLinkConfig.sh new file mode 100644 index 00000000..5b685cd6 --- /dev/null +++ b/functions/migrateAndLinkConfig.sh @@ -0,0 +1,118 @@ +#!/bin/bash +migrateAndLinkConfig(){ + +emu=$1 +migrationTable=$2 +#step 1 should be attempt to unlink everything that gets passed in so we can start fresh. +#for path in $migrationTable[@] +#do +# if [ -L $path ]; then +# echo unlinking $path +# unlink $path +# fi +#done +migrationFlag="$HOME/emudeck/.${emu}MigrationCompleted" + +#check if we have a nomigrateflag for $emu +if [ ! -f "$migrationFlag" ]; then + #ask user before migrating data + text="`printf "We would like to migrate data from the flatpak to the AppImage for ${emu}. \ + \nNew directories for this emulator will be made, and config changes will point to these new folders regardless of this choice.\ + \nYou should allow this migration if you want to move your flatpak data and config to it's new home. \ + \nIf you would like to move your files manually, you may decline."`" + doMigrate=$(zenity --info --title "Migrate "${emu}" Data?" \ + --text="${text}" \ + --width=300 \ + --ok-label "Leave ${emu} alone this time" \ + --extra-button "Leave ${emu} alone forever" \ + --extra-button "Migrate Data" 2>/dev/null) + rc=$? + echo "$emu Do migration? User chose: $doMigrate" + if [ "$doMigrate" == "Migrate Data" ]; then + n=$(( ${#migrationTable[@]} - 1 )) + #odd should be flatpak + #even should be appimage + #determine plan based on first pair + if [[ ! -e ${migrationTable[0]} ]]; then + #no flatpak data. nothing to do. (or should we link it?) + echo "No flatpak data found, continuing." + elif [[ -L ${migrationTable[0]} && -L ${migrationTable[1]} ]]; then + echo "Both sides of migration are symlinks. Stopping migration. User needs to manually resolve." + elif [[ -d ${migrationTable[0]} && -d ${migrationTable[1]} ]]; then + #both locations exist + #ask user which to keep + text="`printf "Data was found for both the appimage and flatpak for ${emu}.\nWe will be using the AppImage from now on.\nPlease choose which data to keep."`" + ans=$(zenity --info --title "Migrate "${emu}" Data?" \ + --text="${text}" \ + --width=300 \ + --ok-label "Don't do anything with my stuff" \ + --extra-button "Keep AppImage Data" \ + --extra-button "Migrate Flatpak Data" 2>/dev/null) + rc=$? + if [[ ! $ans == "" ]]; then #user didn't cancel + echo "$emu flatpak/appimage data choice. User Chose: $ans" + for ((i=0; i<=n; i=(i+2))) { # for each pair of dirs + + if [[ $ans == "Migrate Flatpak Data" ]]; then + fromDir=${migrationTable[i]} + toDir=${migrationTable[i+1]} + echo "Migrating ${fromDir} to ${toDir}" + unlink + #backup destination location, delete it, then sync original over + mv "$toDir" "$toDir.orig" && mkdir -p $toDir && rsync -av "${fromDir}/" "${toDir}" + cd ${fromDir} + cd .. + #backup and remove original + mv "${fromDir}" "${fromDir}.orig" && rm -rf "${fromDir}" + + #link .config to .var so flatpak still works + ln -sfn ${toDir} . + + elif [[ $ans == "Keep AppImage Data" ]]; then + fromDir=${migrationTable[i+1]} + toDir=${migrationTable[i]} + cd ${toDir} + cd .. + #backup flatpak data + mv "${toDir}" "${toDir}.orig" + #link appimage data to flatpak folder + ln -sfn "${fromDir}" . + + else + echo "Something went wrong" + exit + fi + + } + else + echo "User doesn't want migration at this time." + fi + + elif [[ -L ${migrationTable[0]} && -d ${migrationTable[0]} && -d ${migrationTable[1]} ]]; then + echo "Flatpak already linked" + elif [[ -d ${migrationTable[0]} && ! -e ${migrationTable[1]} ]]; then + echo "No AppImage data found, but flatpak data found. New AppImage install." + for ((i=0; i<=n; i=(i+2))) { # for each pair of dirs + + + fromDir=${migrationTable[i]} + toDir=${migrationTable[i+1]} + echo "Migrating ${fromDir} to ${toDir}" + cd ${fromDir}/.. + #backup destination location, delete it, then sync original over + mkdir -p ${toDir} && rmdir ${toDir} #make the path for todir, but remove the end folder + mv "${fromDir}" "${toDir}" #move the original to the new location + #link .config to .var so flatpak still works + ln -sfn ${toDir} . + + } + else + echo "do nothing" + fi + touch $migrationFlag + elif [ $doMigrate == "Leave ${emu} alone forever" ]; then + touch $migrationFlag + fi +fi + +} \ No newline at end of file diff --git a/functions/setESDEEmus.sh b/functions/setESDEEmus.sh new file mode 100644 index 00000000..0973a67b --- /dev/null +++ b/functions/setESDEEmus.sh @@ -0,0 +1,19 @@ +#!/bin/bash +setESDEEmus(){ + emu=$1 + system=$2 + FILE=~/.emulationstation/gamelists/$system/gamelist.xml + if [ ! -f "$FILE" ]; then + mkdir -p ~/.emulationstation/gamelists/$system && cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/gamelists/$system/gamelist.xml $FILE + else + gamelistFound=$(grep -rnw $FILE -e 'gameList') + if [[ $gamelistFound == '' ]]; then + sed -i -e '$a\' $FILE + fi + alternativeEmu=$(grep -rnw $FILE -e 'alternativeEmulator') + if [[ $alternativeEmu == '' ]]; then + echo "" >> $FILE + fi + sed -i "s|||g" $FILE + fi +} \ No newline at end of file diff --git a/functions/setMSG.sh b/functions/setMSG.sh new file mode 100644 index 00000000..fd74a309 --- /dev/null +++ b/functions/setMSG.sh @@ -0,0 +1,11 @@ +#!/bin/bash +setMSG(){ + progressBar=$((progressBar + 5)) + #We prevent the zenity to close if we have too much MSG, the classic eternal 99% + if [ $progressBar == 95 ]; then + progressBar=90 + fi + echo "$progressBar" > ~/emudeck/msg.log + echo "# $1" >> ~/emudeck/msg.log + sleep 0.5 +} \ No newline at end of file diff --git a/functions/setSetting.sh b/functions/setSetting.sh new file mode 100644 index 00000000..28114505 --- /dev/null +++ b/functions/setSetting.sh @@ -0,0 +1,16 @@ +#!/bin/bash +setSetting () { + var=$1 + new_val=$2 + file=~/emudeck/settings.sh + settingExists=$(grep -rnw $file -e $var) + if [[ $settingExists == '' ]]; then + #insert setting to end + sed -i -e '$a\'"$var=$new_val" $FILE + elif [[ ! $settingExists == '' ]]; then + #update setting + sed -i "s|^$var *= *.*|$var=$new_val|; s|^$var [^=]*$|$var $new_val|" "$file" + fi + #Update values + source ~/emudeck/settings.sh +} \ No newline at end of file diff --git a/functions/setUpHolo.sh b/functions/setUpHolo.sh new file mode 100644 index 00000000..9b8aeacd --- /dev/null +++ b/functions/setUpHolo.sh @@ -0,0 +1,26 @@ +#!/bin/bash +setUpHolo(){ + + #Ensure the dependencies are installed before proceeding. + for package in packagekit-qt5 flatpak rsync unzip jq + do + pacman -Q ${package} || sudo pacman -Sy --noconfirm ${package} + done + + #The user must be in the wheel group to install flatpaks successfully. + wheel=$(awk '/'${USER}'/ {if ($1 ~ /wheel/) print}' /etc/group) + if [[ ! "${wheel}" =~ ${USER} ]]; then + text="$(printf "Hey! This is not an SteamDeck. EmuDeck can work just fine, but you need to have a valid user account\n\nThe script will ask for your password to make sure everything works as expected.")" + zenity --info \ + --title="EmuDeck" \ + --width=450 \ + --text="${text}" 2>/dev/null + sudo usermod -a -G wheel ${USER} + newgrp wheel + fi + + #Ensure the Desktop directory isn't owned by root + if [[ "$(stat -c %U ${HOME}/Desktop)" =~ root ]]; then + sudo chown -R ${USER}:${USER} ~/Desktop + fi +} \ No newline at end of file diff --git a/functions/setWide.sh b/functions/setWide.sh new file mode 100644 index 00000000..d4f21b35 --- /dev/null +++ b/functions/setWide.sh @@ -0,0 +1,24 @@ +#!/bin/bash +setWide(){ + if [ $duckWide == true ]; then + sed -i "s|WidescreenHack = false|WidescreenHack = true|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini + else + sed -i "s|WidescreenHack = true|WidescreenHack = false|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini + fi + if [ $DolphinWide == true ]; then + sed -i "s|wideScreenHack = False|wideScreenHack = True|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini + else + sed -i "s|wideScreenHack = True|wideScreenHack = False|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini + fi + if [ $DreamcastWide == true ]; then + sed -i "s|reicast_widescreen_hack = \"disabled\"|reicast_widescreen_hack = \"enabled\"|g" ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Flycast/Flycast.opt + else + sed -i "s|reicast_widescreen_hack = \"enabled\"|reicast_widescreen_hack = \"disabled\"|g" ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Flycast/Flycast.opt + fi + + if [ $BeetleWide == true ]; then + sed -i "s|beetle_psx_hw_widescreen_hack = \"disabled\"|beetle_psx_hw_widescreen_hack = \"enabled\"|g" "$HOME/.var/app/org.libretro.RetroArch/config/retroarch/config/Beetle PSX HW/Beetle PSX HW.opt" + else + sed -i "s|beetle_psx_hw_widescreen_hack = \"enabled\"|beetle_psx_hw_widescreen_hack = \"disabled\"|g" "$HOME/.var/app/org.libretro.RetroArch/config/retroarch/config/Beetle PSX HW/Beetle PSX HW.opt" + fi +} \ No newline at end of file diff --git a/functions/testLocationValid.sh b/functions/testLocationValid.sh new file mode 100644 index 00000000..ba0ad279 --- /dev/null +++ b/functions/testLocationValid.sh @@ -0,0 +1,24 @@ +#!/bin/bash +testLocationValid(){ + testLocation=$2 + touch $testLocation/testwrite + return="" + if [ ! -f $testLocation/testwrite ]; then + #echo "$testLocation not writeable" + return="invalid" + else + #echo "$testLocation writable" + + ln -s $testLocation/testwrite $testLocation/testwrite.link + if [ ! -f $testLocation/testwrite.link ]; then + #echo "Symlink creation failed in $testLocation" + return="invalid" + else + return="valid" + #doesn't work? scope issue? + #locationTable+=(FALSE "$1" "$testLocation") #valid only if location is writable and linkable + fi + fi + rm -f "$testLocation/testwrite" "$testLocation/testwrite.link" + echo $return +} \ No newline at end of file diff --git a/install.sh b/install.sh index 9affd954..99f7560b 100644 --- a/install.sh +++ b/install.sh @@ -1,16 +1,12 @@ #!/bin/bash -NONE='\033[00m' -RED='\033[01;31m' -GREEN='\033[01;32m' -YELLOW='\033[01;33m' -PURPLE='\033[01;35m' -CYAN='\033[01;36m' -WHITE='\033[01;37m' -BOLD='\033[1m' -UNDERLINE='\033[4m' -BLINK='\x1b[5m' -#DEV MODE +# +## +## Downloading files... +## +# + +# Which branch? devMode=$1 case $devMode in "BETA") @@ -24,91 +20,28 @@ case $devMode in ;; esac -#Clean up from previous installations +#Clean up previous installations rm ~/emudek.log 2>/dev/null # This is emudeck's old log file, it's not a typo! rm -rf ~/dragoonDoriseTools mkdir -p ~/emudeck + #Creating log file echo "" > ~/emudeck/emudeck.log LOGFILE=~/emudeck/emudeck.log exec > >(tee ${LOGFILE}) 2>&1 -#Mark as second time so we can detect previous users -FOLDER=~/.var/app/io.github.shiiion.primehack/config_bak +#Mark if this not a fresh install +FOLDER=~/emudeck/ if [ -d "$FOLDER" ]; then echo "" > ~/emudeck/.finished fi sleep 1 SECONDTIME=~/emudeck/.finished -#Exper mode off by default -expert=false - -#Update all systems by default -doUpdateRA=true -doUpdateDolphin=true -doUpdatePCSX2=true -doUpdateRPCS3=true -doUpdateYuzu=true -doUpdateCitra=true -doUpdateDuck=true -doUpdateCemu=true -doUpdateXenia=false -doUpdateRyujinx=true -doUpdatePrimeHacks=true -doUpdatePPSSPP=true -doUpdateXemu=true -doUpdateSRM=true -#doUpdateMelon=true - -#Install all systems by default -doInstallSRM=true -doInstallESDE=true -doInstallRA=false -doInstallDolphin=false -doInstallPCSX2=false -doInstallRPCS3=false -doInstallYuzu=false -doInstallCitra=false -doInstallDuck=false -doInstallCemu=false -doInstallXenia=false -doInstallPrimeHacks=false -doInstallPPSSPP=false -doInstallXemu=false -#doInstallMelon=false -doInstallCHD=false -doInstallPowertools=false -doInstallGyro=false -installString='Installing' - -#Default RetroArch configuration -RABezels=true -RAautoSave=false -SNESAR=43 - -#Default widescreen -duckWide=true -DolphinWide=true -DreamcastWide=true -BeetleWide=true - -#Default installation folders -emulationPath=~/Emulation/ -romsPath=~/Emulation/roms/ -toolsPath=~/Emulation/tools/ -biosPath=~/Emulation/bios/ -savesPath=~/Emulation/saves/ - -#Default ESDE Theme -esdeTheme="EPICNOIR" - -#Progress Bar +# Seeting up the progress Bar for the rest of the installation finished=false -progressBar=0 - echo "0" > ~/emudeck/msg.log -echo "# Starting Installation" >> ~/emudeck/msg.log +echo "# Downloading files from $branch channel..." >> ~/emudeck/msg.log MSG=~/emudeck/msg.log ( while [ $finished == false ] @@ -123,7 +56,7 @@ MSG=~/emudeck/msg.log ) | zenity --progress \ --title="Installing EmuDeck" \ - --text="Installing..." \ + --text="Downloading files from $branch channel..." \ --percentage=0 \ --no-cancel \ --pulsate \ @@ -131,83 +64,26 @@ zenity --progress \ --width=300 \ & if [ "$?" = -1 ] ; then - zenity --error \ - --text="Update canceled." + zenity --error \ + --text="Update canceled." fi -#Functions -echo "" > ~/emudeck/prog.log -setMSG(){ - progressBar=$((progressBar + 5)) - #We prevent the zenity to close if we have too much MSG, the classic eternal 99% - if [ $progressBar == 95 ]; then - progressBar=90 - fi - echo "$progressBar" > ~/emudeck/msg.log - echo "# $1" >> ~/emudeck/msg.log - sleep 0.5 -} - -setESDEEmus(){ - emu=$1 - system=$2 - FILE=~/.emulationstation/gamelists/$system/gamelist.xml - if [ ! -f "$FILE" ]; then - mkdir -p ~/.emulationstation/gamelists/$system && cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/gamelists/$system/gamelist.xml $FILE - else - gamelistFound=$(grep -rnw $FILE -e 'gameList') - if [[ $gamelistFound == '' ]]; then - sed -i -e '$a\' $FILE - fi - alternativeEmu=$(grep -rnw $FILE -e 'alternativeEmulator') - if [[ $alternativeEmu == '' ]]; then - echo "" >> $FILE - fi - sed -i "s|||g" $FILE - fi -} -testLocationValid(){ - testLocation=$2 - touch $testLocation/testwrite - return="" - if [ ! -f $testLocation/testwrite ]; then - #echo "$testLocation not writeable" - return="invalid" - else - #echo "$testLocation writable" - - ln -s $testLocation/testwrite $testLocation/testwrite.link - if [ ! -f $testLocation/testwrite.link ]; then - #echo "Symlink creation failed in $testLocation" - return="invalid" - else - return="valid" - #doesn't work? scope issue? - #locationTable+=(FALSE "$1" "$testLocation") #valid only if location is writable and linkable - fi - fi - rm -f "$testLocation/testwrite" "$testLocation/testwrite.link" - echo $return -} - -setMSG "Downloading files from $branch channel..." -sleep 5 - #We create all the needed folders for installation mkdir -p dragoonDoriseTools mkdir -p dragoonDoriseTools/EmuDeck cd dragoonDoriseTools - +#Cloning EmuDeck files git clone https://github.com/dragoonDorise/EmuDeck.git ~/dragoonDoriseTools/EmuDeck if [ ! -z "$devMode" ]; then cd ~/dragoonDoriseTools/EmuDeck git checkout $branch fi -FOLDER=~/dragoonDoriseTools/EmuDeck -if [ -d "$FOLDER" ]; then - echo -e "OK!" +#Test if we have a successful clone +EMUDECKGIT=~/dragoonDoriseTools/EmuDeck +if [ -d "$EMUDECKGIT" ]; then + echo -e "Files Downloaded!" else echo -e "" echo -e "We couldn't download the needed files, exiting in a few seconds" @@ -216,22 +92,55 @@ else exit fi - latest=$(cat ~/dragoonDoriseTools/EmuDeck/latest.md) - - if [ -f "$SECONDTIME" ]; then - text="$(printf "Hi, this is the changelog of the new features added in this version\n\n${latest}")" - width=1000 +# +## +## EmuDeck is installed, start setting up stuff +## +# + + +# +## Settings +# +#Check for config file +FILE=~/emudeck/settings.sh +if [ -f "$FILE" ]; then + source "$EMUDECKGIT"/settings.sh else - text="$(printf "Welcome to EmuDeck!")" - width=300 - fi - zenity --info \ - --title="EmuDeck" \ - --width=${width} \ - --text="${text}" 2>/dev/null + cp "$EMUDECKGIT"/settings.sh ~/emudeck/settings.sh +fi + +# +## Functions +# + +source "$EMUDECKGIT"/functions/all.sh + +# +## extra Binaries to path +# +export PATH="${EMUDECKGIT}/tools/binaries/:$PATH" +chmod +x "${EMUDECKGIT}/tools/binaries/xmlstarlet" + +# +## Splash screen +# + +latest=$(cat ~/dragoonDoriseTools/EmuDeck/latest.md) +if [ -f "$SECONDTIME" ]; then + text="$(printf "Hi, this is the changelog of the new features added in this version\n\n${latest}")" + width=1000 +else + text="$(printf "Welcome to EmuDeck!")" + width=300 +fi + zenity --info \ +--title="EmuDeck" \ +--width=${width} \ +--text="${text}" 2>/dev/null # -#Hardware Check +#Hardware Check for Holo Users # if [[ "$(cat /sys/devices/virtual/dmi/id/product_name)" =~ Jupiter ]]; then isRealDeck=true @@ -239,7 +148,6 @@ else isRealDeck=false fi - # # Initialize locations # @@ -271,11 +179,14 @@ zenity --question \ --text="${text}" 2>/dev/null ans=$? if [ $ans -eq 0 ]; then - expert=true + setSetting expert true + echo "Mode selected: Expert" locationTable+=(FALSE "Custom" "CUSTOM") #in expert mode we'll allow the user to pick an arbitrary place. else - expert=false + setSetting expert false + echo "Mode selected: Easy" fi + # #Storage Selection # @@ -316,24 +227,28 @@ if [[ $destination == "CUSTOM" ]]; then fi fi - - #New paths based on where the user picked. -emulationPath="${destination}/Emulation/" -romsPath="${destination}/Emulation/roms/" -toolsPath="${destination}/Emulation/tools/" -biosPath="${destination}/Emulation/bios/" -savesPath="${destination}/Emulation/saves/" +setSetting emulationPath "${destination}/Emulation/" +setSetting romsPath "${destination}/Emulation/roms/" +setSetting toolsPath "${destination}/Emulation/tools/" +setSetting biosPath "${destination}/Emulation/bios/" +setSetting savesPath "${destination}/Emulation/saves/" +setSetting storagePath "${destination}/Emulation/storage/" ESDEscrapData="${destination}/Emulation/tools/downloaded_media" - +#Folder creation... mkdir -p "$emulationPath" mkdir -p "$toolsPath"launchers mkdir -p "$savesPath" +mkdir -p "$romsPath" +mkdir -p "$storagePath" +mkdir -p "$biosPath"yuzu -#Cleanup for old users -find "$romsPath" -name "readme.md" -type f -delete +##Generate rom folders +setMSG "Creating roms folder in $destination" +sleep 3 +rsync -r --ignore-existing ~/dragoonDoriseTools/EmuDeck/roms/ "$romsPath" # # Start of Expert mode configuration @@ -341,16 +256,16 @@ find "$romsPath" -name "readme.md" -type f -delete # out of the ordinary has to had its flag enabled/disabled on Expert mode # -if [ $expert == true ]; then - +if [ $expert == "true" ]; then + echo "Expert mode begin" #set all features to false doInstallCHD=false doInstallPowertools=false doInstallGyro=false - doUpdateSRM=false + doSetupSRM=false doInstallESDE=false doSelectEmulators=false - doCustomEmulators=false + doResetEmulators=false doSelectRABezels=false doSelectRAAutoSave=false doSNESAR87=false @@ -365,10 +280,10 @@ if [ $expert == true ]; then table+=(TRUE "CHDScript" "Install the latest version of our CHD conversion script?") table+=(TRUE "PowerTools" "Install Power Tools for CPU control? (password required)") table+=(TRUE "SteamGyro" "Setup the SteamDeckGyroDSU for gyro control (password required)") - table+=(TRUE "updateSRM" "Install/Update Steam Rom Manager?") - table+=(TRUE "updateESDE" "Install/Update Emulation Station DE?") + table+=(TRUE "updateSRM" "Install/Update Steam Rom Manager? Customizations will not be reset.") + table+=(TRUE "updateESDE" "Install/Update Emulation Station DE? Customizations and scrapes will not be reset.") table+=(TRUE "selectEmulators" "Select the emulators to install.") - table+=(TRUE "selectEmulatorConfig" "Customize the emulators who's config we override (note: Fixes will be skipped)") + table+=(TRUE "selectEmulatorConfig" "Customize the emulator configuration reset. (note: Fixes will be skipped if boxes are unchecked)") table+=(TRUE "selectRABezels" "Turn on Bezels for Retroarch?") table+=(TRUE "selectRAAutoSave" "Turn on Retroarch AutoSave/Restore state?") table+=(TRUE "snesAR" "SNES 8:7 Aspect Ratio? (unchecked is 4:3)") @@ -378,7 +293,7 @@ if [ $expert == true ]; then table+=(TRUE "doESDEThemePicker" "Choose your EmulationStation-DE Theme?") #table+=(TRUE "doXboxButtons" "Should facebutton letters match between Nintendo and Steamdeck? (default is matched location)") - declare -i height=(${#table[@]}*50) + declare -i height=(${#table[@]}*40) expertModeFeatureList=$(zenity --list --checklist --width=1000 --height=${height} \ --column="Select?" \ @@ -386,7 +301,7 @@ if [ $expert == true ]; then --column="Description" \ --hide-column=2 \ "${table[@]}" 2>/dev/null) - + echo "user selected: $expertModeFeatureList" #set flags to true for selected expert mode features if [[ "$expertModeFeatureList" == *"CHDScript"* ]]; then doInstallCHD=true @@ -398,9 +313,9 @@ if [ $expert == true ]; then doInstallGyro=true fi if [[ "$expertModeFeatureList" == *"updateSRM"* ]]; then - doUpdateSRM=true + doSetupSRM=true else - doUpdateSRM=false + doSetupSRM=false fi if [[ "$expertModeFeatureList" == *"updateESDE"* ]]; then doInstallESDE=true @@ -411,7 +326,7 @@ if [ $expert == true ]; then doSelectEmulators=true fi if [[ "$expertModeFeatureList" == *"selectEmulatorConfig"* ]]; then - doCustomEmulators=true + doResetEmulators=true fi if [[ "$expertModeFeatureList" == *"selectRABezels"* ]]; then RABezels=true @@ -426,7 +341,7 @@ if [ $expert == true ]; then if [[ "$expertModeFeatureList" == *"snesAR"* ]]; then SNESAR=43 else - SNESAR=83 + SNESAR=87 fi if [[ "$expertModeFeatureList" == *"selectWideScreen"* ]]; then doSelectWideScreen=true @@ -442,31 +357,51 @@ if [ $expert == true ]; then fi - if [[ $doInstallPowertools == true || $doInstallGyro == true || $isRealDeck == false ]]; then - hasPass=$(passwd -S $(whoami) | awk -F " " '{print $2}' ) - if [[ $hasPass == "NP" ]]; then - echo "You don't have a password set. Please set one now. once set, you will be prompted to enter it in a new window." + if [[ $doInstallPowertools == "true" || $doInstallGyro == "true" || $isRealDeck == "false" ]]; then + hasPass=$(passwd -S $(whoami) | awk -F " " '{print $2}') + if [[ ! $hasPass == "P" ]]; then + text="`printf "Password not set.\n Please set one now in the terminal.\nYou will not see text entry in the terminal for your password. This is normal.\nOnce set, you will be prompted to enter it in a new window."`" + zenity --error \ + --title="EmuDeck" \ + --width=400 \ + --text="${text}" 2>/dev/null passwd fi - PASSWD="$(zenity --password --title="Enter Deck User Password" 2>/dev/null)" - echo $PASSWD | sudo -v -S + PASSWD="$(zenity --password --title="Enter Deck User Password (not Steam account!)" 2>/dev/null)" + echo $PASSWD | sudo -v -S + ans=$? + if [[ $ans == 1 ]]; then + #incorrect password + PASSWD="$(zenity --password --title="Password was incorrect. Try again. (Did you remember to set a password for linux before running this?)" 2>/dev/null)" + echo $PASSWD | sudo -v -S + ans=$? + if [[ $ans == 1 ]]; then + text="`printf "Password not accepted.\n Expert mode tools which require a password will not work. Disabling them."`" + zenity --error \ + --title="EmuDeck" \ + --width=400 \ + --text="${text}" 2>/dev/null + doInstallPowertools=false + doInstallGyro=false + fi + fi fi - if [[ $doSelectEmulators == true ]]; then + if [[ $doSelectEmulators == "true" ]]; then emuTable=() - emuTable+=(TRUE "RetroArch") - emuTable+=(TRUE "PrimeHack") - emuTable+=(TRUE "PCSX2") - emuTable+=(TRUE "RPCS3") - emuTable+=(TRUE "Citra") - emuTable+=(TRUE "Dolphin") - emuTable+=(TRUE "Duckstation") - emuTable+=(TRUE "PPSSPP") - emuTable+=(TRUE "Yuzu") - emuTable+=(TRUE "Cemu") - emuTable+=(TRUE "Xemu") + emuTable+=(TRUE "Multiple" "RetroArch") + emuTable+=(TRUE "Metroid Prime" "PrimeHack") + emuTable+=(TRUE "PS2" "PCSX2") + emuTable+=(TRUE "PS3" "RPCS3") + emuTable+=(TRUE "3DS" "Citra") + emuTable+=(TRUE "GC/Wii" "Dolphin") + emuTable+=(TRUE "PSX" "Duckstation") + emuTable+=(TRUE "PSP" "PPSSPP") + emuTable+=(TRUE "Switch" "Yuzu") + emuTable+=(TRUE "WiiU" "Cemu") + emuTable+=(TRUE "XBox" "Xemu") #Emulator selector text="`printf "What emulators do you want to install?"`" @@ -479,12 +414,14 @@ if [ $expert == true ]; then --text="${text}" \ --checklist \ --column="Select" \ + --column="System" \ --column="Emulator" \ + --print-column=3 \ "${emuTable[@]}" 2>/dev/null) - clear - ans=$? - if [ $ans -eq 0 ]; then + ans=$? + if [ $ans -eq 0 ]; then + echo "User selected: $emusToInstall" if [[ "$emusToInstall" == *"RetroArch"* ]]; then doInstallRA=true fi @@ -532,12 +469,12 @@ if [ $expert == true ]; then fi #We force new Cemu install if we detect an older version exists DIR=$romsPath/wiiu/roms/ - if [ -d "$DIR" ]; then + if [ -d "$DIR" ]; then #this is always true i think. doInstallCemu=true fi - if [[ $doSelectWideScreen == true ]]; then + if [[ $doSelectWideScreen == "true" ]]; then #Emulators screenHacks emuTable=() emuTable+=(TRUE "Dolphin") @@ -557,10 +494,9 @@ if [ $expert == true ]; then --column="Widescreen?" \ --column="Emulator" \ "${emuTable[@]}" 2>/dev/null) - clear ans=$? if [ $ans -eq 0 ]; then - + echo "User selected: $wideToInstall" if [[ "$wideToInstall" == *"Duckstation"* ]]; then duckWide=true else @@ -590,101 +526,103 @@ if [ $expert == true ]; then #We mark we've made a custom configuration for future updates echo "" > ~/emudeck/.custom -if [[ $doCustomEmulators == true ]]; then - # Configuration that only appplies to previous users - if [ -f "$SECONDTIME" ]; then - #We make sure all the emus can write its saves outside its own folders. - #Also needed for certain emus to open certain menus for adding rom directories in the front end. - #flatpak override net.pcsx2.PCSX2 --filesystem=host --user - flatpak override net.pcsx2.PCSX2 --share=network --user # for network access / online play - flatpak override io.github.shiiion.primehack --filesystem=host --user - flatpak override net.rpcs3.RPCS3 --filesystem=host --user - flatpak override org.citra_emu.citra --filesystem=host --user - flatpak override org.DolphinEmu.dolphin-emu --filesystem=host --user - #flatpak override org.duckstation.DuckStation --filesystem=host --user - #flatpak override org.libretro.RetroArch --filesystem=host --user - #flatpak override org.ppsspp.PPSSPP --filesystem=host --user - flatpak override org.yuzu_emu.yuzu --filesystem=host --user - flatpak override app.xemu.xemu --filesystem=/run/media:rw --user - flatpak override app.xemu.xemu --filesystem="$savesPath"xemu:rw --user + if [[ $doResetEmulators == "true" ]]; then + # Configuration that only appplies to previous users + if [ -f "$SECONDTIME" ]; then + #We make sure all the emus can write its saves outside its own folders. + #Also needed for certain emus to open certain menus for adding rom directories in the front end. + #flatpak override net.pcsx2.PCSX2 --filesystem=host --user + flatpak override net.pcsx2.PCSX2 --share=network --user # for network access / online play + flatpak override io.github.shiiion.primehack --filesystem=host --user + flatpak override net.rpcs3.RPCS3 --filesystem=host --user + flatpak override org.citra_emu.citra --filesystem=host --user + flatpak override org.DolphinEmu.dolphin-emu --filesystem=host --user + #flatpak override org.duckstation.DuckStation --filesystem=host --user + #flatpak override org.libretro.RetroArch --filesystem=host --user + #flatpak override org.ppsspp.PPSSPP --filesystem=host --user + flatpak override org.yuzu_emu.yuzu --filesystem=host --user + flatpak override app.xemu.xemu --filesystem=/run/media:rw --user + flatpak override app.xemu.xemu --filesystem="$savesPath"xemu:rw --user - installString='Updating' + installString='Updating' - emuTable=() - emuTable+=(TRUE "RetroArch") - emuTable+=(TRUE "PrimeHack") - emuTable+=(TRUE "PCSX2") - emuTable+=(TRUE "RPCS3") - emuTable+=(TRUE "Citra") - emuTable+=(TRUE "Dolphin") - emuTable+=(TRUE "Duckstation") - emuTable+=(TRUE "PPSSPP") - emuTable+=(TRUE "Yuzu") - emuTable+=(TRUE "Cemu") - emuTable+=(TRUE "Xemu") - emuTable+=(TRUE "Steam Rom Manager") + emuTable=() + emuTable+=(TRUE "RetroArch") + emuTable+=(TRUE "PrimeHack") + emuTable+=(TRUE "PCSX2") + emuTable+=(TRUE "RPCS3") + emuTable+=(TRUE "Citra") + emuTable+=(TRUE "Dolphin") + emuTable+=(TRUE "Duckstation") + emuTable+=(TRUE "PPSSPP") + emuTable+=(TRUE "Yuzu") + emuTable+=(TRUE "Cemu") + emuTable+=(TRUE "Xemu") + emuTable+=(TRUE "Steam Rom Manager") + emuTable+=(TRUE "EmulationStation DE") - - text="`printf "EmuDeck will overwrite the following Emulators configurations by default \nWhich systems do you want reconfigure?\nWe recommend to keep all of them checked so everything gets updated and known issues are fixed.\n If you want to mantain any custom configuration on some emulator unselect its name on this list"`" - emusToReset=$(zenity --list \ - --title="EmuDeck" \ - --height=500 \ - --width=250 \ - --ok-label="OK" \ - --cancel-label="Exit" \ - --text="${text}" \ - --checklist \ - --column="Reconfigure?" \ - --column="Emulator" \ - "${emuTable[@]}" 2>/dev/null) - clear - cat ~/dragoonDoriseTools/EmuDeck/logo.ans - echo -e "EmuDeck ${version}" - ans=$? - if [ $ans -eq 0 ]; then - - if [[ "$emusToReset" == *"RetroArch"* ]]; then - doUpdateRA=true - fi - if [[ "$emusToReset" == *"PrimeHack"* ]]; then - doUpdatePrimeHacks=true - fi - if [[ "$emusToReset" == *"PCSX2"* ]]; then - doUpdatePCSX2=true - fi - if [[ "$emusToReset" == *"RPCS3"* ]]; then - doUpdateRPCS3=true - fi - if [[ "$emusToReset" == *"Citra"* ]]; then - doUpdateCitra=true - fi - if [[ "$emusToReset" == *"Dolphin"* ]]; then - doUpdateDolphin=true - fi - if [[ "$emusToReset" == *"Duckstation"* ]]; then - doUpdateDuck=true - fi - if [[ "$emusToReset" == *"PPSSPP"* ]]; then - doUpdatePPSSPP=true - fi - if [[ "$emusToReset" == *"Yuzu"* ]]; then - doUpdateYuzu=true - fi - if [[ "$emusToReset" == *"Cemu"* ]]; then - doUpdateCemu=true - fi - if [[ "$emusToReset" == *"Xemu"* ]]; then - doUpdateXemu=true - fi - if [[ "$emusToReset" == *"Xenia"* ]]; then - doUpdateXenia=false #false until we add above - fi - #if [[ "$emusToReset" == *"MelonDS"* ]]; then - # doUpdateMelon=false - #fi - if [[ "$emusToReset" == *"Steam Rom Manager"* ]]; then - doUpdateSRM=true - fi + text="`printf "EmuDeck will reset the following Emulator's configurations by default.\nWhich systems do you want reset to the newest version of the defaults?\nWe recommend you keep all of them checked so everything gets updated and known issues are fixed.\nIf you want to mantain any custom configuration on an emulator unselect its name from this list."`" + emusToReset=$(zenity --list \ + --title="EmuDeck" \ + --height=500 \ + --width=250 \ + --ok-label="OK" \ + --cancel-label="Exit" \ + --text="${text}" \ + --checklist \ + --column="Reset?" \ + --column="Emulator" \ + "${emuTable[@]}" 2>/dev/null) + ans=$? + cat ~/dragoonDoriseTools/EmuDeck/logo.ans + echo -e "EmuDeck ${version}" + if [ $ans -eq 0 ]; then + echo "User selected: $emusToReset" + if [[ "$emusToReset" == *"RetroArch"* ]]; then + doSetupRA=true + fi + if [[ "$emusToReset" == *"PrimeHack"* ]]; then + doSetupPrimeHacks=true + fi + if [[ "$emusToReset" == *"PCSX2"* ]]; then + doSetupPCSX2=true + fi + if [[ "$emusToReset" == *"RPCS3"* ]]; then + doSetupRPCS3=true + fi + if [[ "$emusToReset" == *"Citra"* ]]; then + doSetupCitra=true + fi + if [[ "$emusToReset" == *"Dolphin"* ]]; then + doSetupDolphin=true + fi + if [[ "$emusToReset" == *"Duckstation"* ]]; then + doSetupDuck=true + fi + if [[ "$emusToReset" == *"PPSSPP"* ]]; then + doSetupPPSSPP=true + fi + if [[ "$emusToReset" == *"Yuzu"* ]]; then + doSetupYuzu=true + fi + if [[ "$emusToReset" == *"Cemu"* ]]; then + doSetupCemu=true + fi + if [[ "$emusToReset" == *"Xemu"* ]]; then + doSetupXemu=true + fi + if [[ "$emusToReset" == *"Xenia"* ]]; then + doSetupXenia=false #false until we add above + fi + #if [[ "$emusToReset" == *"MelonDS"* ]]; then + # doSetupMelon=false + #fi + if [[ "$emusToReset" == *"Steam Rom Manager"* ]]; then + doSetupSRM=true + fi + if [[ "$emusToReset" == *"EmulationStation DE"* ]]; then + doSetupESDE=true + fi else @@ -709,6 +647,12 @@ else doInstallXemu=true #doInstallMelon=true + #widescreen off by default + duckWide=false + DolphinWide=false + DreamcastWide=false + BeetleWide=false + fi # end Expert if ## @@ -725,244 +669,67 @@ fi # end Expert if ## Start of installation ## ## - +## First up - migrate things that need to move. +echo "begin migrations" +doMigrations #ESDE Installation -if [ $doInstallESDE == true ]; then - - setMSG "${installString} EmulationStation Desktop Edition" - curl https://gitlab.com/leonstyhre/emulationstation-de/-/raw/master/es-app/assets/latest_steam_deck_appimage.txt --output "$toolsPath"/latesturl.txt - latestURL=$(grep "https://gitlab" "$toolsPath"/latesturl.txt) +if [ $doInstallESDE == "true" ]; then + installESDE +fi - #New repo if the other fails - if [ -z $latestURL ]; then - curl https://gitlab.com/es-de/emulationstation-de/-/raw/master/es-app/assets/latest_steam_deck_appimage.txt --output "$toolsPath"/latesturl.txt - latestURL=$(grep "https://gitlab" "$toolsPath"/latesturl.txt) - fi - curl $latestURL --output "$toolsPath"/EmulationStation-DE-x64_SteamDeck.AppImage - rm "$toolsPath"/latesturl.txt - chmod +x "$toolsPath"/EmulationStation-DE-x64_SteamDeck.AppImage - if [[ $doESDEThemePicker == true ]]; then - if [[ $expert == true ]]; then - text="Which theme do you want to set as default on EmulationStation DE?" - esdeTheme=$(zenity --list \ - --title="EmuDeck" \ - --height=250 \ - --width=250 \ - --ok-label="OK" \ - --cancel-label="Exit" \ - --text="${text}" \ - --radiolist \ - --column="" \ - --column="Theme" \ - 1 "EPICNOIR" \ - 2 "MODERN-DE" \ - 3 "RBSIMPLE-DE" 2>/dev/null) - clear - ans=$? - if [ $ans -eq 0 ]; then - echo "Theme selected" - fi - fi - fi - -fi - -#We check if we have scrapped data on ESDE so we can move it to the SD card -#We do this wether the user wants to install ESDE or not to account for old users that might have ESDE already installed and won't update -#Leon requested we use his config instead of symlink - -originalESMediaFolder="$HOME/.emulationstation/downloaded_media" -echo "processing $originalESMediaFolder" -if [ -L ${originalESMediaFolder} ] ; then - echo "link found" - unlink ${originalESMediaFolder} && echo "unlinked" -elif [ -e ${originalESMediaFolder} ] ; then - if [ -d "$HOME/.emulationstation/downloaded_media" ]; then - echo -e "" - echo -e "Moving EmulationStation-DE downloaded_media to $toolsPath" - echo -e "" - rsync -a $originalESMediaFolder $toolsPath && rm -rf $originalESMediaFolder #move it, merging files if in both locations - fi -else - echo "downloaded_media not found on original location" -fi - - - -#Configure Downloaded_media folder -esDE_MediaDir="" -#search for media dir in xml, if not found, change to ours. -mediaDirFound=$(grep -rnw $HOME/.emulationstation/es_settings.xml -e 'MediaDirectory') -if [[ $mediaDirFound == '' ]]; then - sed -i -e '$a'"${esDE_MediaDir}" ~/.emulationstation/es_settings.xml # use config file instead of link -fi - - #SRM Installation -if [ $doInstallSRM == true ]; then - setMSG "${installString} Steam Rom Manager" - rm -f ~/Desktop/Steam-ROM-Manager-2.3.29.AppImage - rm -f ~/Desktop/Steam-ROM-Manager.AppImage - mkdir -p "${toolsPath}"/srm - curl -L "$(curl -s https://api.github.com/repos/SteamGridDB/steam-rom-manager/releases/latest | grep -E 'browser_download_url.*AppImage' | grep -ve 'i386' | cut -d '"' -f 4)" > "${toolsPath}"srm/Steam-ROM-Manager.AppImage - #Nova fix' - echo "#!/usr/bin/env xdg-open - [Desktop Entry] - Name=Steam Rom Manager - Exec=kill -9 `pidof steam` & ${toolsPath}srm/Steam-ROM-Manager.AppImage - Icon=steamdeck-gaming-return - Terminal=false - Type=Application - StartupNotify=false" > ~/Desktop/SteamRomManager.desktop - chmod +x ~/Desktop/SteamRomManager.desktop - chmod +x "${toolsPath}"/srm/Steam-ROM-Manager.AppImage +if [ $doInstallSRM == "true" ]; then + installSRM fi #Support for non-valve hardware. if [[ $isRealDeck == false ]]; then - -# text="$(printf "Hey! This is not an SteamDeck. EmuDeck can work just fine, but you need to have a valid user account\n\nThe script will ask for your password to make sure everything works as expected.")" -# zenity --info \ -# --title="EmuDeck" \ -# --width=450 \ -# --text="${text}" 2>/dev/null - - #Ensure the dependencies are installed before proceeding. - for package in packagekit-qt5 flatpak rsync unzip - do - pacman -Q ${package} || sudo pacman -Sy --noconfirm ${package} - done - - #The user must be in the wheel group to install flatpaks successfully. - wheel=$(awk '/'${USER}'/ {if ($1 ~ /wheel/) print}' /etc/group) - if [[ ! "${wheel}" =~ ${USER} ]]; then - sudo usermod -a -G wheel ${USER} - newgrp wheel - fi - - #Ensure the Desktop directory isn't owned by root - if [[ "$(stat -c %U ${HOME}/Desktop)" =~ root ]]; then - sudo chown -R ${USER}:${USER} ~/Desktop - fi + setUpHolo fi #Emulators Installation -if [ $doInstallPCSX2 == "true" ]; then - setMSG "Installing PCSX2" - flatpak install flathub net.pcsx2.PCSX2 -y --system - flatpak override net.pcsx2.PCSX2 --filesystem=host --user - flatpak override net.pcsx2.PCSX2 --share=network --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run net.pcsx2.PCSX2" > "${toolsPath}"launchers/pcsx2.sh - chmod +x "${toolsPath}"launchers/pcsx2.sh +if [ $doInstallPCSX2 == "true" ]; then + installEmuFP "PCSX2" "net.pcsx2.PCSX2" fi if [ $doInstallPrimeHacks == "true" ]; then - setMSG "Installing PrimeHack" - flatpak install flathub io.github.shiiion.primehack -y --system - flatpak override io.github.shiiion.primehack --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run io.github.shiiion.primehack" > "${toolsPath}"launchers/primehack.sh - chmod +x "${toolsPath}"launchers/primehack.sh + installEmuFP "PrimeHack" "io.github.shiiion.primehack" fi if [ $doInstallRPCS3 == "true" ]; then - setMSG "Installing RPCS3" - flatpak install flathub net.rpcs3.RPCS3 -y --system - flatpak override net.rpcs3.RPCS3 --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run net.rpcs3.RPCS3" > "${toolsPath}"launchers/rpcs3.sh - chmod +x "${toolsPath}"launchers/rpcs3.sh + installEmuFP "RPCS3" "net.rpcs3.RPCS3" fi if [ $doInstallCitra == "true" ]; then - setMSG "Installing Citra" - flatpak install flathub org.citra_emu.citra -y --system - flatpak override org.citra_emu.citra --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.citra_emu.citra" > "${toolsPath}"launchers/citra.sh - chmod +x "${toolsPath}"launchers/citra.sh + installEmuFP "Citra" "org.citra_emu.citra" fi if [ $doInstallDolphin == "true" ]; then - setMSG "Installing Dolphin" - flatpak install flathub org.DolphinEmu.dolphin-emu -y --system - flatpak override org.DolphinEmu.dolphin-emu --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.DolphinEmu.dolphin-emu" > "${toolsPath}"launchers/dolphin-emu.sh - chmod +x "${toolsPath}"launchers/dolphin-emu.sh + installEmuFP "Dolphin" "org.DolphinEmu.dolphin-emu" fi if [ $doInstallDuck == "true" ]; then - setMSG "Installing DuckStation" - flatpak install flathub org.duckstation.DuckStation -y --system - #flatpak override org.duckstation.DuckStation --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.duckstation.DuckStation" > "${toolsPath}"launchers/duckstation.sh - chmod +x "${toolsPath}"launchers/duckstation.sh + installEmuFP "DuckStation" "org.duckstation.DuckStation" fi if [ $doInstallRA == "true" ]; then - setMSG "Installing RetroArch" - flatpak install flathub org.libretro.RetroArch -y --system - #flatpak override org.libretro.RetroArch --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.libretro.RetroArch" > "${toolsPath}"launchers/RetroArch.sh - chmod +x "${toolsPath}"launchers/RetroArch.sh + installEmuFP "RetroArch" "org.libretro.RetroArch" fi if [ $doInstallPPSSPP == "true" ]; then - setMSG "Installing PPSSPP" - flatpak install flathub org.ppsspp.PPSSPP -y --system - #flatpak override org.ppsspp.PPSSPP --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.ppsspp.PPSSPP" > "${toolsPath}"launchers/ppsspp.sh - chmod +x "${toolsPath}"launchers/ppsspp.sh + installEmuFP "PPSSPP" "org.ppsspp.PPSSPP" fi if [ $doInstallYuzu == "true" ]; then - setMSG "Installing Yuzu" - flatpak install flathub org.yuzu_emu.yuzu -y --system - flatpak override org.yuzu_emu.yuzu --filesystem=host --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run org.yuzu_emu.yuzu" > "${toolsPath}"launchers/yuzu.sh - chmod +x "${toolsPath}"launchers/yuzu.sh + #installEmuFP "Yuzu" "org.yuzu_emu.yuzu" + installEmuAI "yuzu" $(getLatestReleaseURLGH "yuzu-emu/yuzu-mainline" "AppImage") #needs to be lowercase yuzu for EsDE to find it. fi if [ $doInstallXemu == "true" ]; then - setMSG "Installing Xemu" - flatpak install flathub app.xemu.xemu -y --system - flatpak override app.xemu.xemu --filesystem=/run/media:rw --user - flatpak override app.xemu.xemu --filesystem="$savesPath"xemu:rw --user - #write out launcher - echo "#!/bin/sh - /usr/bin/flatpak run app.xemu.xemu" > "${toolsPath}"launchers/xemu-emu.sh - chmod +x "${toolsPath}"launchers/xemu-emu.sh + installEmuFP "Xemu-Emu" "app.xemu.xemu" fi -#if [ $doInstallMelon == "true" ]; then -# echo -e "Installing MelonDS" -# flatpak install flathub net.kuribo64.melonDS -y --system -#fi -echo -e "" -##Generate rom folders - setMSG "Creating roms folder in $destination" - mkdir -p "$romsPath" - mkdir -p "$biosPath" - mkdir -p "$biosPath"/yuzu/ - sleep 3 - rsync -r --ignore-existing ~/dragoonDoriseTools/EmuDeck/roms/ "$romsPath" - echo -e "OK!" #Cemu - We need to install Cemu after creating the Roms folders! if [ $doInstallCemu == "true" ]; then setMSG "Installing Cemu" FILE="${romsPath}/wiiu/Cemu.exe" if [ -f "$FILE" ]; then - echo "" 2>/dev/null + echo "Cemu.exe already exists" else curl https://cemu.info/releases/cemu_1.26.2.zip --output $romsPath/wiiu/cemu_1.26.2.zip mkdir -p $romsPath/wiiu/tmp @@ -980,28 +747,6 @@ if [ $doInstallCemu == "true" ]; then sed -i "s|/run/media/mmcblk0p1/Emulation/roms/wiiu|${romsPath}wiiu|" "${toolsPath}"launchers/cemu.sh chmod +x "${toolsPath}"launchers/cemu.sh - #Commented until we get CEMU flatpak working - #echo -e "EmuDeck will add Witherking25's flatpak repo to your Discorver App.this is required for cemu now" - #flatpak remote-add --user --if-not-exists withertech https://repo.withertech.com/flatpak/withertech.flatpakrepo - #flatpak install withertech info.cemu.Cemu -y - #flatpak install flathub org.winehq.Wine -y - # - ##We move roms to the new path - #DIR=$romsPath/wiiu/roms/ - #if [ -d "$DIR" ]; then - # echo -e "Moving your WiiU games and configuration to the new Cemu...This might take a while" - # mv $romsPath/wiiu/roms/ $romsPath/wiiutemp - # mv $romsPath/wiiu/Cemu.exe $romsPath/wiiu/Cemu.bak - # rsync -ri $romsPath/wiiu/ ~/.var/app/info.cemu.Cemu/data/cemu/ - # mv $romsPath/wiiu/ $romsPath/wiiu_delete_me - # mv $romsPath/wiiutemp/ $romsPath/wiiu/ - # - # zenity --info \ - # --title="EmuDeck" \ - # --width=250 \ - # --text="We have updated your CEMU installation, you will need to open Steam Rom Manager and add your Wii U games again. This time you don't need to set CEMU to use Proton ever again :)" 2>/dev/null - # - #fi fi @@ -1024,126 +769,28 @@ fi #Steam RomManager Config -if [ $doUpdateSRM == true ]; then - setMSG "Configuring Steam Rom Manager..." - mkdir -p ~/.config/steam-rom-manager/userData/ - cp ~/dragoonDoriseTools/EmuDeck/configs/steam-rom-manager/userData/userConfigurations.json ~/.config/steam-rom-manager/userData/userConfigurations.json - sleep 3 - sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json - sed -i "s|/run/media/mmcblk0p1/Emulation/tools/|${toolsPath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json - sed -i "s|/run/media/mmcblk0p1/Emulation/saves/|${savesPath}|g" ~/.config/steam-rom-manager/userData/userConfigurations.json - echo -e "OK!" +if [ $doSetupSRM == "true" ]; then + configSRM fi #ESDE Config -setMSG "Configuring EmulationStation DE..." -mkdir -p ~/.emulationstation/ -#Cemu (Proton) commented until we get it right -mkdir -p ~/.emulationstation/custom_systems/ -cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/custom_systems/es_systems.xml ~/.emulationstation/custom_systems/es_systems.xml -sed -i "s|/run/media/mmcblk0p1/Emulation/tools/launchers/cemu.sh|${toolsPath}launchers/cemu.sh|" ~/.emulationstation/custom_systems/es_systems.xml -#Commented until we get CEMU flatpak working -#rsync -r ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/ ~/.emulationstation/ -cp ~/dragoonDoriseTools/EmuDeck/configs/emulationstation/es_settings.xml ~/.emulationstation/es_settings.xml -sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.emulationstation/es_settings.xml +if [ $doSetupESDE == "true" ]; then + configESDE +fi -#Configure Downloaded_media folder -esDE_MediaDir="" -#search for media dir in xml, if not found, change to ours. -mediaDirFound=$(grep -rnw ~/.emulationstation/es_settings.xml -e 'MediaDirectory') -if [[ $mediaDirFound == '' ]]; then - sed -i -e '$a'"${esDE_MediaDir}" ~/.emulationstation/es_settings.xml # use config file instead of link -fi -#sed -i "s|name=\"ROMDirectory\" value=\"/name=\"ROMDirectory\" value=\"${romsPathSed}/g" ~/.emulationstation/es_settings.xml -mkdir -p ~/.emulationstation/themes/ -git clone https://github.com/dragoonDorise/es-theme-epicnoir.git ~/.emulationstation/themes/es-epicnoir &>> /dev/null -cd ~/.emulationstation/themes/es-epicnoir && git pull -echo -e "OK!" - -#Do this properly with wildcards -if [[ "$esdeTheme" == *"EPICNOIR"* ]]; then - sed -i "s|rbsimple-DE|es-epicnoir|" ~/.emulationstation/es_settings.xml - sed -i "s|modern-DE|es-epicnoir|" ~/.emulationstation/es_settings.xml - sed -i "s|es-epicnoir|es-epicnoir|" ~/.emulationstation/es_settings.xml -fi -if [[ "$esdeTheme" == *"MODERN-DE"* ]]; then - sed -i "s|rbsimple-DE|modern-DE|" ~/.emulationstation/es_settings.xml - sed -i "s|modern-DE|modern-DE|" ~/.emulationstation/es_settings.xml - sed -i "s|es-epicnoir|modern-DE|" ~/.emulationstation/es_settings.xml -fi -if [[ "$esdeTheme" == *"RBSIMPLE-DE"* ]]; then - sed -i "s|rbsimple-DE|rbsimple-DE|" ~/.emulationstation/es_settings.xml - sed -i "s|modern-DE|rbsimple-DE|" ~/.emulationstation/es_settings.xml - sed -i "s|es-epicnoir|rbsimple-DE|" ~/.emulationstation/es_settings.xml -fi - - -#ESDE default emulators -mkdir -p ~/.emulationstation/gamelists/ -setESDEEmus 'Genesis Plus GX' gamegear -setESDEEmus 'Gambatte' gb -setESDEEmus 'Gambatte' gbc -setESDEEmus 'Dolphin (Standalone)' gc -setESDEEmus 'PPSSPP (Standalone)' psp -setESDEEmus 'Dolphin (Standalone)' wii -setESDEEmus 'Mesen' nes -setESDEEmus 'DOSBox-Pure' dos -setESDEEmus 'PCSX2 (Standalone)' ps2 -setESDEEmus 'melonDS' nds -setESDEEmus 'Citra (Standalone)' n3ds - #Emus config setMSG "Configuring Steam Input for emulators.." rsync -r ~/dragoonDoriseTools/EmuDeck/configs/steam-input/ ~/.steam/steam/controller_base/templates/ -echo -e "OK!" + setMSG "Configuring emulators.." echo -e "" -if [ $doUpdateRA == true ]; then +if [ $doSetupRA == "true" ]; then mkdir -p ~/.var/app/org.libretro.RetroArch mkdir -p ~/.var/app/org.libretro.RetroArch/config mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch - mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch/cores - raUrl="https://buildbot.libretro.com/nightly/linux/x86_64/latest/" - RAcores=(bsnes_hd_beta_libretro.so flycast_libretro.so gambatte_libretro.so genesis_plus_gx_libretro.so genesis_plus_gx_wide_libretro.so mednafen_lynx_libretro.so mednafen_ngp_libretro.so mednafen_wswan_libretro.so melonds_libretro.so mesen_libretro.so mgba_libretro.so mupen64plus_next_libretro.so nestopia_libretro.so picodrive_libretro.so ppsspp_libretro.so snes9x_libretro.so stella_libretro.so yabasanshiro_libretro.so yabause_libretro.so yabause_libretro.so mame2003_plus_libretro.so mame2010_libretro.so mame_libretro.so melonds_libretro.so fbneo_libretro.so bluemsx_libretro.so desmume_libretro.so sameboy_libretro.so gearsystem_libretro.so mednafen_saturn_libretro.so opera_libretro.so dosbox_core_libretro.so dosbox_pure_libretro.so dosbox_svn_libretro.so puae_libretro.so) - setMSG "Downloading RetroArch Cores for EmuDeck" - for i in "${RAcores[@]}" - do - FILE=~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i} - if [ -f "$FILE" ]; then - echo "${i}...Already Downloaded" - else - curl $raUrl$i.zip --output ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip - #rm ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip - echo "${i}...Downloaded!" - fi - done - if [ $doInstallESDE == true ]; then - RAcores=(a5200_libretro.so 81_libretro.so atari800_libretro.so bluemsx_libretro.so chailove_libretro.so fbneo_libretro.so freechaf_libretro.so freeintv_libretro.so fuse_libretro.so gearsystem_libretro.so gw_libretro.so hatari_libretro.so lutro_libretro.so mednafen_pcfx_libretro.so mednafen_vb_libretro.so mednafen_wswan_libretro.so mu_libretro.so neocd_libretro.so nestopia_libretro.so nxengine_libretro.so o2em_libretro.so picodrive_libretro.so pokemini_libretro.so prboom_libretro.so prosystem_libretro.so px68k_libretro.so quasi88_libretro.so scummvm_libretro.so squirreljme_libretro.so theodore_libretro.so uzem_libretro.so vecx_libretro.so vice_xvic_libretro.so virtualjaguar_libretro.so x1_libretro.so mednafen_lynx_libretro.so mednafen_ngp_libretro.so mednafen_pce_libretro.so mednafen_pce_fast_libretro.so mednafen_psx_libretro.so mednafen_psx_hw_libretro.so mednafen_saturn_libretro.so mednafen_supafaust_libretro.so mednafen_supergrafx_libretro.so blastem_libretro.so bluemsx_libretro.so bsnes_libretro.so bsnes_mercury_accuracy_libretro.so cap32_libretro.so citra2018_libretro.so citra_libretro.so crocods_libretro.so desmume2015_libretro.so desmume_libretro.so dolphin_libretro.so dosbox_core_libretro.so dosbox_pure_libretro.so dosbox_svn_libretro.so fbalpha2012_cps1_libretro.so fbalpha2012_cps2_libretro.so fbalpha2012_cps3_libretro.so fbalpha2012_libretro.so fbalpha2012_neogeo_libretro.so fceumm_libretro.so fbneo_libretro.so flycast_libretro.so fmsx_libretro.so frodo_libretro.so gambatte_libretro.so gearboy_libretro.so gearsystem_libretro.so genesis_plus_gx_libretro.so genesis_plus_gx_wide_libretro.so gpsp_libretro.so handy_libretro.so kronos_libretro.so mame2000_libretro.so mame2003_plus_libretro.so mame2010_libretro.so mame_libretro.so melonds_libretro.so mesen_libretro.so mesen-s_libretro.so mgba_libretro.so mupen64plus_next_libretro.so nekop2_libretro.so np2kai_libretro.so nestopia_libretro.so parallel_n64_libretro.so pcsx2_libretro.so pcsx_rearmed_libretro.so picodrive_libretro.so ppsspp_libretro.so puae_libretro.so quicknes_libretro.so race_libretro.so sameboy_libretro.so smsplus_libretro.so snes9x2010_libretro.so snes9x_libretro.so stella2014_libretro.so stella_libretro.so tgbdual_libretro.so vbam_libretro.so vba_next_libretro.so vice_x128_libretro.so vice_x64_libretro.so vice_x64sc_libretro.so vice_xscpu64_libretro.so yabasanshiro_libretro.so yabause_libretro.so bsnes_hd_beta_libretro.so swanstation_libretro.so) - setMSG "Downloading RetroArch Cores for EmulationStation DE" - for i in "${RAcores[@]}" - do - FILE=~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i} - if [ -f "$FILE" ]; then - echo "${i}...Already Downloaded" - else - curl $raUrl$i.zip --output ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip - #rm ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/${i}.zip - echo "${i}...Downloaded!" - fi - done - fi - - for entry in ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/*.zip - do - unzip -o "$entry" -d ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/ - done - - for entry in ~/.var/app/org.libretro.RetroArch/config/retroarch/cores/*.zip - do - rm -f "$entry" - done + RACores raConfigFile=~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg FILE=~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg.bak @@ -1151,8 +798,7 @@ if [ $doUpdateRA == true ]; then echo -e "" 2>/dev/null else setMSG "Backing up RA..." - cp ~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg.bak - echo -e "OK!" + cp ~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/retroarch.cfg.bak fi #mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch/overlays @@ -1161,193 +807,104 @@ if [ $doUpdateRA == true ]; then find ~/.var/app/org.libretro.RetroArch/config/retroarch/config/ -type f -name "*.bak" | while read f; do rm -f "$f"; done rsync -r ~/dragoonDoriseTools/EmuDeck/configs/org.libretro.RetroArch/config/ ~/.var/app/org.libretro.RetroArch/config/ - #rsync -r ~/dragoonDoriseTools/EmuDeck/configs/org.libretro.RetroArch/config/retroarch/config/ ~/.var/app/org.libretro.RetroArch/config/retroarch/config sed -i "s|/run/media/mmcblk0p1/Emulation|${emulationPath}|g" $raConfigFile fi echo -e "" setMSG "Applying Emu configurations..." -if [ $doUpdatePrimeHacks == true ]; then - FOLDER=~/.var/app/io.github.shiiion.primehack/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up PrimeHacks..." - cp -r ~/.var/app/io.github.shiiion.primehack/config ~/.var/app/io.github.shiiion.primehack/config_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/io.github.shiiion.primehack/ ~/.var/app/io.github.shiiion.primehack/ +if [ $doSetupPrimeHacks == "true" ]; then + configEmuFP "PrimeHack" "io.github.shiiion.primehack" sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.var/app/io.github.shiiion.primehack/config/dolphin-emu/Dolphin.ini fi -if [ $doUpdateDolphin == true ]; then - - # Check if there's an existing MAC address and Analytics ID in the Dolphin config - #config_path=~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini - #WirelessMacOld=$(grep -E "^WirelessMac" $config_path | cut -d\= -f2) - #AnalyticsIDold=$(grep -E "ID ?= ?[0-9a-f]{32}" $config_path | cut -d\= -f2) - - FOLDER=~/.var/app/org.DolphinEmu.dolphin-emu/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up Dolphin..." - cp -r ~/.var/app/org.DolphinEmu.dolphin-emu/config ~/.var/app/org.DolphinEmu.dolphin-emu/config_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.DolphinEmu.dolphin-emu/ ~/.var/app/org.DolphinEmu.dolphin-emu/ - - - # We add the previous Mac address - #if [ $AnalyticsIDold != "" ]; then - # # Insert old analytics ID: - # sed -i "s|@@DOLPHIN_ANALYTICS_ID@@|${AnalyticsIDold}|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini - #fi - # - #if [ $WirelessMacOld != "" ]; then - # # Insert old MAC address: - # sed -i "s|@@WIRELESS_DEVICE_MAC@@|${WirelessMacOld}|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini - #fi - +if [ $doSetupDolphin == "true" ]; then + configEmuFP "Dolphin" "org.DolphinEmu.dolphin-emu" sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/Dolphin.ini fi -if [ $doUpdatePCSX2 == true ]; then - FOLDER=~/.var/app/net.pcsx2.PCSX2/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up PCSX2..." - cp -r ~/.var/app/net.pcsx2.PCSX2/config ~/.var/app/net.pcsx2.PCSX2/config_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/net.pcsx2.PCSX2/ ~/.var/app/net.pcsx2.PCSX2/ +if [ $doSetupPCSX2 == "true" ]; then + configEmuFP "PCSX2" "net.pcsx2.PCSX2" #Bios Fix sed -i "s|/run/media/mmcblk0p1/Emulation/bios|${biosPath}|g" ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/inis/PCSX2_ui.ini fi -if [ $doUpdateRPCS3 == true ]; then - FOLDER=~/.var/app/net.rpcs3.RPCS3/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up RPCS3..." - cp -r ~/.var/app/net.rpcs3.RPCS3/config ~/.var/app/net.rpcs3.RPCS3/config_bak - echo -e "OK!" - fi - - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/net.rpcs3.RPCS3/ ~/.var/app/net.rpcs3.RPCS3/ - sed -i 's| $(EmulatorDir)dev_hdd0/| '$savesPath'/rpcs3/dev_hdd0/|g' /home/deck/.var/app/net.rpcs3.RPCS3/config/rpcs3/vfs.yml - mkdir -p $savesPath/rpcs3/ +if [ $doSetupRPCS3 == "true" ]; then + configEmuFP "RPCS3" "net.rpcs3.RPCS3" + #HDD Config + sed -i 's| $(EmulatorDir)dev_hdd0/| '$storagePath'/rpcs3/dev_hdd0/|g' $HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/vfs.yml + mkdir -p $storagePath/rpcs3/ fi -if [ $doUpdateCitra == true ]; then - FOLDER=~/.var/app/org.citra_emu.citra/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up Citra..." - cp -r ~/.var/app/org.citra_emu.citra/config ~/.var/app/org.citra_emu.citra/config_bak - echo -e "OK!" - fi - - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.citra_emu.citra/ ~/.var/app/org.citra_emu.citra/ - sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.var/app/org.citra_emu.citra/config/citra-emu/qt-config.ini +if [ $doSetupCitra == "true" ]; then + configEmuFP "Citra" "org.citra_emu.citra" + #Roms Path + sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" $HOME/.var/app/org.citra_emu.citra/config/citra-emu/qt-config.ini fi -if [ $doUpdateDuck == true ]; then - FOLDER=~/.var/app/org.duckstation.DuckStation/data_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up DuckStation..." - cp -r ~/.var/app/org.duckstation.DuckStation/data ~/.var/app/org.duckstation.DuckStation/data_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.duckstation.DuckStation/ ~/.var/app/org.duckstation.DuckStation/ - sleep 3 +if [ $doSetupDuck == "true" ]; then + configEmuFP "DuckStation" "org.duckstation.DuckStation" + #Bios Path sed -i "s|/run/media/mmcblk0p1/Emulation/bios/|${biosPath}|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini + sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini fi -if [ $doUpdateYuzu == true ]; then - FOLDER=~/.var/app/org.yuzu_emu.yuzu/config - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up Yuzu..." - cp -r ~/.var/app/org.yuzu_emu.yuzu/config ~/.var/app/org.yuzu_emu.yuzu/config_bak - echo -e "OK!" +if [ $doSetupYuzu == "true" ]; then + configEmuAI "yuzu" "config" "$HOME/.config/yuzu" "$HOME/dragoonDoriseTools/EmuDeck/configs/org.yuzu_emu.yuzu/config/yuzu" "true" + configEmuAI "yuzu" "data" "$HOME/.local/share/yuzu" "$HOME/dragoonDoriseTools/EmuDeck/configs/org.yuzu_emu.yuzu/data/yuzu" "true" + #Roms Path + sed -i "s|/run/media/mmcblk0p1/|${destination}/|g" "$HOME/.config/yuzu/qt-config.ini" + mkdir -p ${storagePath}yuzu/dump + mkdir -p ${storagePath}yuzu/load + mkdir -p ${storagePath}yuzu/sdmc + mkdir -p ${storagePath}yuzu/nand + mkdir -p ${storagePath}yuzu/screenshots + mkdir -p ${storagePath}yuzu/tas +fi + +if [ $doSetupPPSSPP == "true" ]; then + configEmuFP "PPSSPP" "org.ppsspp.PPSSPP" +fi +if [ $doSetupXemu == "true" ]; then + configEmuFP "Xemu" "app.xemu.xemu" + #Bios Fix + sed -i "s|/run/media/mmcblk0p1/Emulation/bios/|${biosPath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.ini + sed -i "s|/run/media/mmcblk0p1/Emulation/bios/|${biosPath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml + sed -i "s|/run/media/mmcblk0p1/Emulation/saves/|${storagePath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml + if [[ ! -f "${storagePath}xemu/xbox_hdd.qcow2" ]]; then + mkdir -p "${storagePath}xemu" + cd "${storagePath}xemu" + wget https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip && unzip -j xbox_hdd.qcow2.zip && rm -rf xbox_hdd.qcow2.zip fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.yuzu_emu.yuzu/ ~/.var/app/org.yuzu_emu.yuzu/ - sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" ~/.var/app/org.yuzu_emu.yuzu/config/yuzu/qt-config.ini fi -#if [ $doUpdateMelon == true ]; then -# FOLDER=~/.var/app/net.kuribo64.melonDS/config -# if [ -d "$FOLDER" ]; then -# echo "" -# else -# echo -ne "Backing up MelonDS..." -# cp -r ~/.var/app/net.kuribo64.melonDS/config ~/.var/app/net.kuribo64.melonDS/config_bak -# echo -e "OK!" -# fi -# rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/net.kuribo64.melonDS/ ~/.var/app/net.kuribo64.melonDS/ -#fi -if [ $doUpdateCemu == true ]; then + +#Proton Emus +if [ $doSetupCemu == "true" ]; then echo "" #Commented until we get CEMU flatpak working #rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/info.cemu.Cemu/ ~/.var/app/info.cemu.Cemu/ - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/info.cemu.Cemu/data/cemu/ "$romsPath"/wiiu - sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" "$romsPath"/wiiu/settings.xml + cemuSettings="${romsPath}wiiu/settings.xml" + mv -f $cemuSettings $cemuSettings.bak #retain cemusettings if it exists to stop wiping peoples mods. Just insert our search path for installed games. + rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/info.cemu.Cemu/data/cemu/ "${romsPath}wiiu" + rm $cemuSettings + mv -f $cemuSettings.bak $cemuSettings + if [[ -f "${cemuSettings}" ]]; then + gamePathEntryFound=$(grep -rnw $cemuSettings -e "z:${romsPath}wiiu/roms") + if [[ $gamePathEntryFound == '' ]]; then + xmlstarlet ed --inplace --subnode "content/GamePaths" --type elem -n Entry -v "z:${romsPath}wiiu/roms" $cemuSettings + fi + fi fi -if [ $doUpdateXenia == true ]; then +if [ $doSetupXenia == "true" ]; then echo "" rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/xenia/ "$romsPath"/xbox360 fi -if [ $doUpdateRyujinx == true ]; then - echo "" - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.ryujinx.Ryujinx/ ~/.var/app/org.ryujinx.Ryujinx/ -fi -if [ $doUpdatePPSSPP == true ]; then - FOLDER=~/.var/app/org.ppsspp.PPSSPP/config_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up PPSSPP..." - cp -r ~/.var/app/org.ppsspp.PPSSPP/config ~/.var/app/org.ppsspp.PPSSPP/config_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/org.ppsspp.PPSSPP/ ~/.var/app/org.ppsspp.PPSSPP/ -fi -if [ $doUpdateXemu == true ]; then - FOLDER=~/.var/app/app.xemu.xemu/data/xemu/xemu_bak - if [ -d "$FOLDER" ]; then - echo "" - else - setMSG "Backing up Xemu..." - cp -r ~/.var/app/app.xemu.xemu/data/xemu/xemu ~/.var/app/app.xemu.xemu/data/xemu/xemu_bak - echo -e "OK!" - fi - rsync -avhp ~/dragoonDoriseTools/EmuDeck/configs/app.xemu.xemu/ ~/.var/app/app.xemu.xemu/ - sed -i "s|/run/media/mmcblk0p1/Emulation/bios/|${biosPath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.ini - sed -i "s|/run/media/mmcblk0p1/Emulation/bios/|${biosPath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml - sed -i "s|/run/media/mmcblk0p1/Emulation/saves/|${savesPath}|g" ~/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml -fi -echo -e "OK!" -#Fixes ESDE older installations -unlink megacd -unlink megadrive -unlink n3ds -#Symlinks for ESDE compatibility -cd $(echo $romsPath | tr -d '\r') -ln -sn gamecube gc -ln -sn 3ds n3ds -ln -sn arcade mamecurrent -ln -sn mame mame2003 -ln -sn lynx atarilynx +#Setup Bios symlinks +unlink ${biosPath}yuzu/keys +mkdir -p "$HOME/.local/share/yuzu/keys/" +ln -sn "$HOME/.local/share/yuzu/keys/" ${biosPath}yuzu/keys - -cd $(echo $biosPath | tr -d '\r') -cd yuzu -ln -sn ~/.var/app/org.yuzu_emu.yuzu/data/yuzu/keys/ ./keys -ln -sn ~/.var/app/org.yuzu_emu.yuzu/data/yuzu/nand/system/Contents/registered/ ./firmware +unlink ${biosPath}yuzu/firmware +mkdir -p ${storagePath}yuzu/nand/system/Contents/registered/ +touch ${storagePath}yuzu/nand/system/Contents/registered/putfirmwarehere.txt +ln -sn ${storagePath}yuzu/nand/system/Contents/registered/ ${biosPath}yuzu/firmware #Fixes repeated Symlink for older installations cd ~/.var/app/org.yuzu_emu.yuzu/data/yuzu/keys/ @@ -1371,61 +928,10 @@ unlink registered # #PS Bios -PSXBIOS="NULL" -PS2BIOS="NULL" -for entry in $biosPath/* -do - if [ -f "$entry" ]; then - md5=($(md5sum "$entry")) - if [[ "$PSXBIOS" != true ]]; then - PSBios=(239665b1a3dade1b5a52c06338011044 2118230527a9f51bd9216e32fa912842 849515939161e62f6b866f6853006780 dc2b9bf8da62ec93e868cfd29f0d067d 54847e693405ffeb0359c6287434cbef cba733ceeff5aef5c32254f1d617fa62 da27e8b6dab242d8f91a9b25d80c63b8 417b34706319da7cf001e76e40136c23 57a06303dfa9cf9351222dfcbb4a29d9 81328b966e6dcf7ea1e32e55e1c104bb 924e392ed05558ffdb115408c263dccf e2110b8a2b97a8e0b857a45d32f7e187 ca5cfc321f916756e3f0effbfaeba13b 8dd7d5296a650fac7319bce665a6a53c 490f666e1afb15b7362b406ed1cea246 32736f17079d0b2b7024407c39bd3050 8e4c14f567745eff2f0408c8129f72a6 b84be139db3ee6cbd075630aa20a6553 1e68c231d0896b7eadcad1d7d8e76129 b9d9a0286c33dc6b7237bb13cd46fdee 8abc1b549a4a80954addc48ef02c4521 9a09ab7e49b422c007e6d54d7c49b965 b10f5e0e3d9eb60e5159690680b1e774 6e3735ff4c7dc899ee98981385f6f3d0 de93caec13d1a141a40a79f5c86168d6 c53ca5908936d412331790f4426c6c33 476d68a94ccec3b9c8303bbd1daf2810 d8f485717a5237285e4d7c5f881b7f32 fbb5f59ec332451debccf1e377017237 81bbe60ba7a3d1cea1d48c14cbcc647b) - for i in "${PSBios[@]}" - do - if [[ "$md5" == *"${i}"* ]]; then - PSXBIOS=true - break - else - PSXBIOS=false - fi - done - fi - - if [[ "$PS2BIOS" != true ]]; then - PS2Bios=(32f2e4d5ff5ee11072a6bc45530f5765 acf4730ceb38ac9d8c7d8e21f2614600 acf9968c8f596d2b15f42272082513d1 b1459d7446c69e3e97e6ace3ae23dd1c d3f1853a16c2ec18f3cd1ae655213308 63e6fd9b3c72e0d7b920e80cf76645cd a20c97c02210f16678ca3010127caf36 8db2fbbac7413bf3e7154c1e0715e565 91c87cb2f2eb6ce529a2360f80ce2457 3016b3dd42148a67e2c048595ca4d7ce b7fa11e87d51752a98b38e3e691cbf17 f63bc530bd7ad7c026fcd6f7bd0d9525 cee06bd68c333fc5768244eae77e4495 0bf988e9c7aaa4c051805b0fa6eb3387 8accc3c49ac45f5ae2c5db0adc854633 6f9a6feb749f0533aaae2cc45090b0ed 838544f12de9b0abc90811279ee223c8 bb6bbc850458fff08af30e969ffd0175 815ac991d8bc3b364696bead3457de7d b107b5710042abe887c0f6175f6e94bb ab55cceea548303c22c72570cfd4dd71 18bcaadb9ff74ed3add26cdf709fff2e 491209dd815ceee9de02dbbc408c06d6 7200a03d51cacc4c14fcdfdbc4898431 8359638e857c8bc18c3c18ac17d9cc3c 352d2ff9b3f68be7e6fa7e6dd8389346 d5ce2c7d119f563ce04bc04dbc3a323e 0d2228e6fd4fb639c9c39d077a9ec10c 72da56fccb8fcd77bba16d1b6f479914 5b1f47fbeb277c6be2fccdd6344ff2fd 315a4003535dfda689752cb25f24785c 312ad4816c232a9606e56f946bc0678a 666018ffec65c5c7e04796081295c6c7 6e69920fa6eef8522a1d688a11e41bc6 eb960de68f0c0f7f9fa083e9f79d0360 8aa12ce243210128c5074552d3b86251 240d4c5ddd4b54069bdc4a3cd2faf99d 1c6cd089e6c83da618fbf2a081eb4888 463d87789c555a4a7604e97d7db545d1 35461cecaa51712b300b2d6798825048 bd6415094e1ce9e05daabe85de807666 2e70ad008d4ec8549aada8002fdf42fb b53d51edc7fc086685e31b811dc32aad 1b6e631b536247756287b916f9396872 00da1b177096cfd2532c8fa22b43e667 afde410bd026c16be605a1ae4bd651fd 81f4336c1de607dd0865011c0447052e 0eee5d1c779aa50e94edd168b4ebf42e d333558cc14561c1fdc334c75d5f37b7 dc752f160044f2ed5fc1f4964db2a095 63ead1d74893bf7f36880af81f68a82d 3e3e030c0f600442fa05b94f87a1e238 1ad977bb539fc9448a08ab276a836bbc eb4f40fcf4911ede39c1bbfe91e7a89a 9959ad7a8685cad66206e7752ca23f8b 929a14baca1776b00869f983aa6e14d2 573f7d4a430c32b3cc0fd0c41e104bbd df63a604e8bff5b0599bd1a6c2721bd0 5b1ba4bb914406fae75ab8e38901684d cb801b7920a7d536ba07b6534d2433ca af60e6d1a939019d55e5b330d24b1c25 549a66d0c698635ca9fa3ab012da7129 5de9d0d730ff1e7ad122806335332524 21fe4cad111f7dc0f9af29477057f88d 40c11c063b3b9409aa5e4058e984e30c 80bbb237a6af9c611df43b16b930b683 c37bce95d32b2be480f87dd32704e664 80ac46fa7e77b8ab4366e86948e54f83 21038400dc633070a78ad53090c53017 dc69f0643a3030aaa4797501b483d6c4 30d56e79d89fbddf10938fa67fe3f34e 93ea3bcee4252627919175ff1b16a1d9 d3e81e95db25f5a86a7b7474550a2155) - for i in "${PS2Bios[@]}" - do - if [[ "$md5" == *"${i}"* ]]; then - PS2BIOS=true - break - else - PS2BIOS=false - fi - done - fi - fi -done - -if [ $PSXBIOS == false ]; then - #text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: ${biosPath}"`" - text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: \n${biosPath}\n\nMake sure they are not in a subdirectory"`" - zenity --error \ - --title="EmuDeck" \ - --width=400 \ - --text="${text}" 2>/dev/null -fi - -if [ $PS2BIOS == false ]; then - #text="`printf "PS1 bios not detected\nYou need to copy your BIOS to: ${biosPath}"`" - text="`printf "PS2 bios not detected\nYou need to copy your BIOS to: \n${biosPath}\n\nMake sure they are not in a subdirectory"`" - zenity --error \ - --title="EmuDeck" \ - --width=400 \ - --text="${text}" 2>/dev/null -fi - +checkPSBIOS #Yuzu Keys & Firmware -FILE=~/.var/app/org.yuzu_emu.yuzu/data/yuzu/keys/prod.keys +FILE="$HOME/.local/share/yuzu/keys/prod.keys" if [ -f "$FILE" ]; then echo -e "" 2>/dev/null else @@ -1437,8 +943,6 @@ else --text="${text}" 2>/dev/null fi -#melonDS permissions? -#flatpak override net.kuribo64.melonDS --filesystem=host --user ## ## @@ -1448,351 +952,46 @@ fi #RA Bezels -if [ $RABezels == true ]; then - find ~/.var/app/org.libretro.RetroArch/config/retroarch/config/ -type f -name "*.bak" | while read f; do mv -v "$f" "${f%.*}.cfg"; done -else - find ~/.var/app/org.libretro.RetroArch/config/retroarch/config/ -type f -name "*.cfg" | while read f; do mv -v "$f" "${f%.*}.bak"; done -fi +RABezels #RA SNES Aspect Ratio -if [ $SNESAR == 43 ]; then - cp ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes43.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes.cfg -else - cp ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes87.cfg ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Snes9x/snes.cfg -fi - +RASNES #RA AutoSave -if [ $RAautoSave == true ]; then - sed -i 's|savestate_auto_load = "false"|savestate_auto_load = "true"|g' $raConfigFile - sed -i 's|savestate_auto_save = "false"|savestate_auto_save = "true"|g' $raConfigFile -else - sed -i 's|savestate_auto_load = "true"|savestate_auto_load = "false"|g' $raConfigFile - sed -i 's|savestate_auto_save = "true"|savestate_auto_save = "false"|g' $raConfigFile -fi +RAautoSave + + +## +## +## Other Customizations. +## +## #Widescreen hacks -if [ $duckWide == true ]; then - sed -i "s|WidescreenHack = false|WidescreenHack = true|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini -else - sed -i "s|WidescreenHack = true|WidescreenHack = false|g" ~/.var/app/org.duckstation.DuckStation/data/duckstation/settings.ini -fi -if [ $DolphinWide == true ]; then - sed -i "s|wideScreenHack = False|wideScreenHack = True|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini -else - sed -i "s|wideScreenHack = True|wideScreenHack = False|g" ~/.var/app/org.DolphinEmu.dolphin-emu/config/dolphin-emu/GFX.ini -fi -if [ $DreamcastWide == true ]; then - sed -i "s|reicast_widescreen_hack = \"disabled\"|reicast_widescreen_hack = \"enabled\"|g" ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Flycast/Flycast.opt -else - sed -i "s|reicast_widescreen_hack = \"enabled\"|reicast_widescreen_hack = \"disabled\"|g" ~/.var/app/org.libretro.RetroArch/config/retroarch/config/Flycast/Flycast.opt -fi - -if [ $BeetleWide == true ]; then - sed -i "s|beetle_psx_hw_widescreen_hack = \"disabled\"|beetle_psx_hw_widescreen_hack = \"enabled\"|g" "$HOME/.var/app/org.libretro.RetroArch/config/retroarch/config/Beetle PSX HW/Beetle PSX HW.opt" -else - sed -i "s|beetle_psx_hw_widescreen_hack = \"enabled\"|beetle_psx_hw_widescreen_hack = \"disabled\"|g" "$HOME/.var/app/org.libretro.RetroArch/config/retroarch/config/Beetle PSX HW/Beetle PSX HW.opt" -fi +setWide #We move all the saved folders to the emulation path - -#RA -if [ ! -d "$savesPath/retroarch/states" ]; then - mkdir -p $savesPath/retroarch - echo -e "" - echo -e "Linking RetroArch saved states to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch/states - ln -sn ~/.var/app/org.libretro.RetroArch/config/retroarch/states $savesPath/retroarch/states -fi -if [ ! -d "$savesPath/retroarch/saves" ]; then - mkdir -p $savesPath/retroarch - echo -e "" - setMSG "Linking RetroArch saved games to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.libretro.RetroArch/config/retroarch/saves - ln -sn ~/.var/app/org.libretro.RetroArch/config/retroarch/saves $savesPath/retroarch/saves -fi - -#Dolphin -if [ ! -d "$savesPath/dolphin/GC" ]; then - mkdir -p $savesPath/dolphin - echo -e "" - setMSG "Linking Dolphin Gamecube saved games to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC - ln -sn ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/GC $savesPath/dolphin/GC -fi -if [ ! -d "$savesPath/dolphin/Wii" ]; then - mkdir -p $savesPath/dolphin - echo -e "" - setMSG "Linking Dolphin Wii saved games to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/Wii - ln -sn ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/Wii $savesPath/dolphin/Wii -fi -if [ ! -d "$savesPath/dolphin/states" ]; then - mkdir -p $savesPath/dolphin - echo -e "" - setMSG "Linking Dolphin States to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/StateSaves - ln -sn ~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/StateSaves $savesPath/dolphin/states -fi - -#PrimeHack -if [ ! -d "$savesPath/primehack/GC" ]; then - mkdir -p $savesPath/primehack - echo -e "" - setMSG "Linking PrimeHack Gamecube saved games to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/GC - ln -sn ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/GC $savesPath/primehack/GC -fi -if [ ! -d "$savesPath/primehack/Wii" ]; then - mkdir -p $savesPath/primehack - echo -e "" - setMSG "Linking PrimeHack Wii saved games to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/Wii - ln -sn ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/Wii $savesPath/primehack/Wii -fi -if [ ! -d "$savesPath/primehack/states" ]; then - mkdir -p $savesPath/primehack - echo -e "" - setMSG "Linking PrimeHack States to the Emulation/states folder" - echo -e "" - mkdir -p ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/StateSaves - ln -sn ~/.var/app/io.github.shiiion.primehack/data/dolphin-emu/StateSaves $savesPath/primehack/states -fi - -#Yuzu -if [ ! -d "$savesPath/yuzu/saves" ]; then - mkdir -p $savesPath/yuzu - echo -e "" - setMSG "Linking Yuzu Saves to the Emulation/saves folder" - echo -e "" - - mkdir -p ~/.var/app/org.yuzu_emu.yuzu/data/yuzu/sdmc - ln -sn ~/.var/app/org.yuzu_emu.yuzu/data/yuzu/sdmc $savesPath/yuzu/saves -fi - -#Duckstation -if [ ! -d "$savesPath/duckstation/saves" ]; then - mkdir -p $savesPath/duckstation - echo -e "" - setMSG "Linking Duckstation Saves to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.duckstation.DuckStation/data/duckstation/memcards - ln -sn ~/.var/app/org.duckstation.DuckStation/data/duckstation/memcards $savesPath/duckstation/saves -fi -if [ ! -d "$savesPath/duckstation/states" ]; then - mkdir -p $savesPath/duckstation - echo -e "" - setMSG "Linking Duckstation Saves to the Emulation/states folder" - echo -e "" - mkdir -p ~/.var/app/org.duckstation.DuckStation/data/duckstation/savestates - ln -sn ~/.var/app/org.duckstation.DuckStation/data/duckstation/savestates $savesPath/duckstation/states -fi - -#Xemu -if [ ! -d "$savesPath/xemu" ]; then - mkdir -p "$savesPath/xemu" - echo -e "" - setMSG "Moving Xemu HDD and EEPROM to the Emulation/saves folder" - echo -e "" - mv /home/deck/.var/app/app.xemu.xemu/data/xemu/xemu/xbox_hdd.qcow2 $savesPath/xemu - mv /home/deck/.var/app/app.xemu.xemu/data/xemu/xemu/eeprom.bin $savesPath/xemu - flatpak override app.xemu.xemu --filesystem="$savesPath"xemu:rw --user -fi - -#PCSX2 -if [ ! -d "$savesPath/pcsx2/saves" ]; then - mkdir -p $savesPath/pcsx2 - echo -e "" - setMSG "Linking PCSX2 Saves to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/memcards - ln -sn ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/memcards $savesPath/pcsx2/saves -fi -if [ ! -d "$savesPath/pcsx2/states" ]; then - mkdir -p $savesPath/pcsx2 - echo -e "" - setMSG "Linking PCSX2 Saves to the Emulation/states folder" - echo -e "" - mkdir -p ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/sstates - ln -sn ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/sstates $savesPath/pcsx2/states -fi - -#RPCS3 -if [ ! -d "$savesPath/rpcs3/dev_hdd0/savedata" ] && [ -d "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" ]; then - if [ $destination != "$home" ]; then - text="$(printf "Moving rpcs3 hdd0 to the Emulation/Saves folder\n\nDepending on how many pkgs you have installed, this may take a while.If you do not have enough available space in your chosen location this will fail, clean up your SD Card and run EmuDeck Again.")" - else - text="$(printf "Moving rpcs3 hdd0 to the Emulation/Saves folder\n\nDepending on how many pkgs you have installed, this may take a while.")" - fi - zenity --info \ - --title="EmuDeck" \ - --width=450 \ - --text="${text}" 2>/dev/null - - mkdir -p "$savesPath/rpcs3" - rsync -r ~/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0 "$savesPath"/rpcs3/ && rm -rf ~/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0 - #update config file for the new loc $(emulatorDir) is in the file. made this annoying. - sed -i "'s|$(EmulatorDir)dev_hdd0/|'$savesPath'/rpcs3/dev_hdd0/|g'" /home/deck/.var/app/net.rpcs3.RPCS3/config/rpcs3/vfs.yml -fi - -#Citra -if [ ! -d "$savesPath/citra/saves" ]; then - mkdir -p $savesPath/citra - echo -e "" - setMSG "Linking Citra Saves to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.citra_emu.citra/data/citra-emu/sdmc - ln -sn ~/.var/app/org.citra_emu.citra/data/citra-emu/sdmc $savesPath/citra/saves -fi -if [ ! -d "$savesPath/citra/states" ]; then - mkdir -p $savesPath/citra - echo -e "" - setMSG "Linking Citra Saves to the Emulation/states folder" - echo -e "" - mkdir -p ~/.var/app/org.citra_emu.citra/data/citra-emu/states - ln -sn ~/.var/app/org.citra_emu.citra/data/citra-emu/states $savesPath/citra/states -fi -#PPSSPP -if [ ! -d "$savesPath/ppsspp/saves" ]; then - mkdir -p $savesPath/ppsspp - echo -e "" - setMSG "Linking PPSSPP Saves to the Emulation/saves folder" - echo -e "" - mkdir -p ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/SAVEDATA - ln -sn ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/SAVEDATA $savesPath/ppsspp/saves -fi -if [ ! -d "$savesPath/ppsspp/states" ]; then - mkdir -p $savesPath/ppsspp - echo -e "" - setMSG "Linking PPSSPP Saves to the Emulation/states folder" - echo -e "" - mkdir -p ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/PPSSPP_STATE - ln -sn ~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/PPSSPP_STATE $savesPath/ppsspp/states -fi +createSaveFolders #RetroAchievments -#if there is no rap file and we have said to enable retroachieve, we have to ask. Also if the user wants to change their sign in, we ask. -if [[ ! -f ~/emudeck/.rap && $doRAEnable == true ]] || [[ $doRASignIn == true ]]; then +RAAchievment - text=$(printf "Do you want to use RetroAchievments on Retroarch?\n\nYou need to have an account on https://retroachievements.org\n\nActivating RetroAchievments will disable save states unless you disable hardcore mode\n\n\n\nPress STEAM + X to get the onscreen Keyboard") - RAInput=$(zenity --forms \ - --title="Retroachievements Sign in" \ - --text="$text" \ - --add-entry="Username: " \ - --add-password="Password: " \ - --separator="," 2>/dev/null) - - if [ $ans -eq 0 ]; then - echo "RetroAchievment Login" - echo $RAInput | awk -F "," '{print $1}' > ~/emudeck/.rau - echo $RAInput | awk -F "," '{print $2}' > ~/emudeck/.rap - rap=$(cat ~/emudeck/.rap) - rau=$(cat ~/emudeck/.rau) - if [ ${#rap} -lt 1 ]; then - echo "No password" - doRAEnable=false - elif [ ${#rau} -lt 1 ]; then - echo "No username" - doRAEnable=false - else - echo "Valid Username and Password" - fi - else - echo "Cancel RetroAchievment Login" - fi + +if [ $doInstallCHD == "true" ]; then + installCHD fi -#if we have a rap file already, and the user wanted to enable retroachievements, but didn't want to set a new username and pw. -if [[ -f ~/emudeck/.rap && $doRAEnable == true ]]; then - rap=$(cat ~/emudeck/.rap) - rau=$(cat ~/emudeck/.rau) - - sed -i "s|cheevos_password = \"\"|cheevos_password = \"${rap}\"|g" $raConfigFile - sed -i "s|cheevos_username = \"\"|cheevos_username = \"${rau}\"|g" $raConfigFile - sed -i "s|cheevos_enable = \"false\"|cheevos_enable = \"true\"|g" $raConfigFile -fi - -if [ $doInstallCHD == true ]; then - mkdir -p "$toolsPath"chdconv/ - rsync -avhp ~/dragoonDoriseTools/EmuDeck/tools/chdconv/ "$toolsPath"chdconv/ - - rm -rf ~/Desktop/EmuDeckCHD.desktop 2>/dev/null - echo "#!/usr/bin/env xdg-open - [Desktop Entry] - Name=EmuDeck CHD Script - Exec=bash "$toolsPath"chdconv/chddeck.sh - Icon=steamdeck-gaming-return - Terminal=true - Type=Application - StartupNotify=false" > ~/Desktop/EmuDeckCHD.desktop - chmod +x ~/Desktop/EmuDeckCHD.desktop - chmod +x "$toolsPath"chdconv/chddeck.sh - chmod +x "$toolsPath"chdconv/chdman5 - #update the paths in the script - sed -i "s|/run/media/mmcblk0p1/Emulation/roms/|${romsPath}|g" "$toolsPath"chdconv/chddeck.sh - sed -i "s|/run/media/mmcblk0p1/Emulation/tools/|${toolsPath}|g" "$toolsPath"chdconv/chddeck.sh - -fi - -if [ $doInstallGyro == true ]; then - +if [ $doInstallGyro == "true" ]; then InstallGyro=$(bash <(curl -sL https://github.com/kmicki/SteamDeckGyroDSU/raw/master/pkg/update.sh)) echo $InstallGyro - fi -if [ $doInstallPowertools == true ]; then - - #should use sudo password piped into cache earlier. - curl -L https://github.com/SteamDeckHomebrew/PluginLoader/raw/main/dist/install_release.sh | sh - sudo rm -rf ~/homebrew/plugins/PowerTools - sudo git clone https://github.com/NGnius/PowerTools.git ~/homebrew/plugins/PowerTools - sleep 1 - cd ~/homebrew/plugins/PowerTools - sudo git checkout tags/v0.5.0 - text="$(printf "To finish the installation go into the Steam UI Settings\n\nUnder System -> System Settings toggle Enable Developer Mode\n\nScroll the sidebar all the way down and click on Developer\n\nUnder Miscellaneous, enable CEF Remote Debugging\n\nIn order to improve performance on Yuzu or Dolphin try configuring Powertools to activate only 4 CPU Cores\n\nYou can Access Powertools by presing the ... button and selecting the new Plugins Menu\n\n - \n\nIMPORTANT - The Powertools menu is touch ONLY.\n\n")" - zenity --info \ - --title="EmuDeck" \ - --width=450 \ - --text="${text}" 2>/dev/null - +if [ $doInstallPowertools == "true" ]; then + installPowerTools fi - if [ $branch == 'main' ];then - - #We create new icons - rm -rf ~/Desktop/EmuDeckUninstall.desktop 2>/dev/null - echo '#!/usr/bin/env xdg-open - [Desktop Entry] - Name=Uninstall EmuDeck - Exec=curl https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/uninstall.sh | bash -s -- SD - Icon=delete - Terminal=false - Type=Application - StartupNotify=false' > ~/Desktop/EmuDeckUninstall.desktop - chmod +x ~/Desktop/EmuDeckUninstall.desktop - - rm -rf ~/Desktop/EmuDeck.desktop 2>/dev/null - rm -rf ~/Desktop/EmuDeckSD.desktop 2>/dev/null - echo "#!/usr/bin/env xdg-open - [Desktop Entry] - Name=EmuDeck (${version}) - Exec=curl https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/install.sh | bash -s -- SD - Icon=steamdeck-gaming-return - Terminal=false - Type=Application - StartupNotify=false" > ~/Desktop/EmuDeck.desktop - chmod +x ~/Desktop/EmuDeck.desktop - + createDesktopIcons fi setMSG "Cleaning up downloaded files..." @@ -1808,11 +1007,11 @@ finished=true text="`printf "Done!\n\nRemember to add your games here:\n${romsPath}\nAnd your Bios (PS1, PS2, Yuzu) here:\n${biosPath}\n\nOpen Steam Rom Manager on your Desktop to add your games to your SteamUI Interface.\n\nThere is a bug in RetroArch that if you are using Bezels you can not set save configuration files unless you close your current game. Use overrides for your custom configurations or use expert mode to disabled them\n\nIf you encounter any problem please visit our Discord:\nhttps://discord.gg/b9F7GpXtFP\n\nTo Update EmuDeck in the future, just run this App again.\n\nEnjoy!"`" zenity --question \ - --title="EmuDeck" \ - --width=450 \ - --ok-label="Open Steam Rom Manager" \ - --cancel-label="Exit" \ - --text="${text}" 2>/dev/null + --title="EmuDeck" \ + --width=450 \ + --ok-label="Open Steam Rom Manager" \ + --cancel-label="Exit" \ + --text="${text}" 2>/dev/null ans=$? if [ $ans -eq 0 ]; then kill -15 `pidof steam` diff --git a/latest.md b/latest.md index 7c3c3e36..ff0d7e20 100644 --- a/latest.md +++ b/latest.md @@ -1,20 +1,27 @@ -0.17.4 -- New user interface on install both on Easy and Expert modes -- Rom folder creation will respect user's custom symlinks -- When you first install EmuDeck an you Launch SteamRomManager we will get you back to GamingMode when closing SteamRomManager -- SRM is now located on Emulation/tools and will close Steam automatically for you. -- Fixed RPCS3 Controller not working on new install -- Updated Mupen64Plus-Next defaults for N64. Should be much better now. more accurate, faster, and look better. -- New tool added - proton-launch.sh (for all your non-steam windows app shenanigans, courtesy of Angel) -- Citra left trackpad used now as mouse instead of D-pad on our SteamInput template -- Fix Citra non exiting while pressing R5 -- PPSSPP Audio Fix when the Deck goes into Sleep Mode -- Fixed 3ds bad symlink for older installations -- PrimeHack Controller tweaks and performance gain -- Fix PCSX2 Turbo Mode -- Wii nkit.gcz support -- FBNeo fixes on SteamRomManager -- SD card is only available if one is inserted, writable, and supports symlinks -- Expert mode - Fixes RA Autosave selection -- Expert mode - Changed Cemu default controller to gamepad with gyro (gyro requires SteamDeckGyroDSU installation. See Expert mode for more details) -- Expert mode - You can now chose a custom install location. It will be tested for the ability to both write and link, and rejected if either fail. +0.17.5 +- EmuDeck internal fixes and modularity.. setting it up for great things on the future... +- New - Steam Input Template for DuckStation with left trackpad Touchinput (Thanks Moskeeto) +- New - Yuzu AppImage ( Seemingly better performance than the one in discover store, also right click to open menus work! ) + It is VERY important you let Emudeck run the updates on Yuzu so the + data migration can happen seamlessly. You will be notified if we find data in the default appimage location + and can choose to keep and migrate the old Flatpak data, or you can use the existing AppImage data you have. + The chosen data will be migrated to the AppImage location, and linked back to the flatpak data location. + Steam Rom Manager users will need to re-parse for Yuzu games to use the new AppImage. + The Flatpak installation is NOT removed, but must be for EmulationStation-DE to use the AppImage instead. +- New - Storage folder to keep Xemu, Yuzu, and RPCS3 data in the Emulation folder. Migration will happen at the start. + You may need to re-parse for rpcs3 installed files. +- New - CHD Script now handles wii / gc iso --> rvz conversion +- Fix - Dolphin pointer is now right trackpad and works more smoothly. If you have SteamGyro setup, motion now works. + *You may need to set the controller to Default Gamepad With Mouse Trackpad if steam decided to use Touchpad as Joystick instead. +- Fix - DuckStation rom path added. New hotkeys added to coincide with Steam Input Template. Changed quickMenu to Esc. (Steam + Dpad Left) +- Fix - Widescreen Hacks are now off by default for all emulators. They can be enabled by running in Expert Mode. +- Fix - PCSX2 Steam Input profile updated so it wont pause on RT. (Thanks Wintermute) +- Fix - Updates won't wipe out EmulationStation-DE custom systems and EmulationStation-DE metadata info anymore. +- Fix - Updates won't wipe out Cemu graphics pack settings anymore. +- Fix - EmulationStation-DE's hidden downloaded_media wouldn't get moved + to the Emulation/tools directory if the setting existed but was blank. +- Fix - Expert Mode: Widescreen Hacks Selection. +- Fix - Expert Mode: Emulator install Selection. +- Fix - Expert Mode: Emulator reconfiguration selection. +- Fix - Expert Mode: Entering a password wrong in the pop up will make it re-pop. + You have 2 chances and then it will disable the Expert mode settings that require a password. diff --git a/settings.sh b/settings.sh new file mode 100644 index 00000000..dc032559 --- /dev/null +++ b/settings.sh @@ -0,0 +1,67 @@ + +#Expert mode off by default +expert=false + + + +#Default settings for all systems +doSetupRA=true +doSetupDolphin=true +doSetupPCSX2=true +doSetupRPCS3=true +doSetupYuzu=true +doSetupCitra=true +doSetupDuck=true +doSetupCemu=true +doSetupXenia=false +doSetupRyujinx=true +doSetupPrimeHacks=true +doSetupPPSSPP=true +doSetupXemu=true +doSetupESDE=true +doSetupSRM=true +#doSetupMelon=true + +#Install all systems by default +doInstallSRM=true +doInstallESDE=true +doInstallRA=false +doInstallDolphin=false +doInstallPCSX2=false +doInstallRPCS3=false +doInstallYuzu=false +doInstallCitra=false +doInstallDuck=false +doInstallCemu=false +doInstallXenia=false +doInstallPrimeHacks=false +doInstallPPSSPP=false +doInstallXemu=false +#doInstallMelon=false +doInstallCHD=false +doInstallPowertools=false +doInstallGyro=false +installString='Installing' + +#Default RetroArch configuration +RABezels=true +RAautoSave=false +SNESAR=43 + +#Default widescreen +duckWide=true +DolphinWide=true +DreamcastWide=true +BeetleWide=true + +#Default installation folders +emulationPath=~/Emulation/ +romsPath=~/Emulation/roms/ +toolsPath=~/Emulation/tools/ +biosPath=~/Emulation/bios/ +savesPath=~/Emulation/saves/ +storagePath=~/Emulation/storage/ + +#Default ESDE Theme +esdeTheme="EPICNOIR" + diff --git a/tools/binaries/xmlstarlet b/tools/binaries/xmlstarlet new file mode 100644 index 00000000..c81180ac Binary files /dev/null and b/tools/binaries/xmlstarlet differ diff --git a/tools/chdconv/DolphinTool.exe b/tools/chdconv/DolphinTool.exe new file mode 100644 index 00000000..3d890dbb Binary files /dev/null and b/tools/chdconv/DolphinTool.exe differ diff --git a/tools/chdconv/chddeck.sh b/tools/chdconv/chddeck.sh index f1996863..85f36239 100644 --- a/tools/chdconv/chddeck.sh +++ b/tools/chdconv/chddeck.sh @@ -11,26 +11,33 @@ zenity --question \ ans=$? if [ $ans -eq 0 ]; then - + #paths update via sed in main script romsPath="/run/media/mmcblk0p1/Emulation/roms/" - chdPath="/run/media/mmcblk0p1/Emulation/tools/chdconv/" + toolsPath="/run/media/mmcblk0p1/Emulation/tools/" + chdPath="${toolsPath}chdconv/" + #initialize log TIMESTAMP=`date "+%Y%m%d_%H%M%S"` LOGFILE="$chdPath/chdman-$TIMESTAMP.log" exec > >(tee ${LOGFILE}) 2>&1 + + #ask user if they want to pick manually or run a search for eligible files. Manual will need to ask the user to pick a file, and then it will need to ask the type to convert to. (chd, rvz, cso) + + echo "Checking $romsPath for files eligible for conversion." #whitelist - declare -a folderWhiteList=("dreamcast" "psx" "segacd" "3do" "saturn" "tg-cd" "pcenginecd" "pcfx" "amigacd32" "neogeocd" "megacd" "ps2") + declare -a chdfolderWhiteList=("dreamcast" "psx" "segacd" "3do" "saturn" "tg-cd" "pcenginecd" "pcfx" "amigacd32" "neogeocd" "megacd" "ps2") + declare -a rvzfolderWhiteList=("gamecube" "wii") declare -a searchFolderList - + echo $chdfolderWhiteList export PATH="${chdPath}/:$PATH" #find file types we support within whitelist of folders - for romfolder in ${folderWhiteList[@]}; do + for romfolder in ${chdfolderWhiteList[@]}; do echo "Checking ${romsPath}${romfolder}/" files=(`find "${romsPath}${romfolder}/" -type f -iname "*.gdi" -o -type f -iname "*.cue" -o -type f -iname "*.iso"`) if [ ${#files[@]} -gt 0 ]; then @@ -38,6 +45,15 @@ if [ $ans -eq 0 ]; then searchFolderList+=("$romfolder") fi done + + for romfolder in ${rvzfolderWhiteList[@]}; do + echo "Checking ${romsPath}${romfolder}/" + files=(`find "${romsPath}${romfolder}/" -type f -iname "*.gcm" -o -type f -iname "*.iso"`) + if [ ${#files[@]} -gt 0 ]; then + echo "found in $romfolder" + searchFolderList+=("$romfolder") + fi + done if (( ${#searchFolderList[@]} == 0 )); then echo "No eligible files found." @@ -50,6 +66,7 @@ if [ $ans -eq 0 ]; then exit fi + declare -i height=(${#searchFolderList[@]}*100) selectColumnStr="RomFolder " for (( i=1; i<=${#searchFolderList[@]}; i++ )); do selectColumnStr+="$i ${searchFolderList[$i-1]} " ; done @@ -70,12 +87,39 @@ if [ $ans -eq 0 ]; then #query user about FileTypes? maybe they only want to convert bin/cue? Iso? Gdi? #check list here? - + + # should be able to use grep / bash compare the files in the dir against the cue / gdi file to determine if it should be deleted. + # something like after the processing of the cue / gdi succeeds, then do this + # for file in folder #where file is a foreach variable and folder is some array of the files in the folder being processed. + # if grep -q $file "$f"; then #where $f is the cue / gdi, and $file is a file in the folder. + # rm -rf $file + # fi + # + + + #CHD for romfolder in ${romfolders[@]}; do - find "$romsPath$romfolder" -type f -iname "*.cue" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f" && rm -rf "${f%.*}.[bB][iI][nN]"; done; - find "$romsPath$romfolder" -type f -iname "*.gdi" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f"; done; #going to need work - find "$romsPath$romfolder" -type f -iname "*.iso" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f"; done; + if [[ " ${chdfolderWhiteList[*]} " =~ " ${romfolder} " ]]; then + find "$romsPath$romfolder" -type f -iname "*.cue" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f" && rm -rf "${f%.*}.bin"; done; + find "$romsPath$romfolder" -type f -iname "*.gdi" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f"; done; #going to need work + find "$romsPath$romfolder" -type f -iname "*.iso" | while read f; do echo "Converting: $f"; chdman5 createcd -i "$f" -o "${f%.*}.chd" && rm -rf "$f"; done; + fi done + + #rvz + if [[ -f "${toolsPath}proton-launch.sh" && -f "${chdPath}DolphinTool.exe" ]]; then #ensure tools are in place + for romfolder in ${romfolders[@]}; do + if [[ " ${rvzfolderWhiteList[*]} " =~ " ${romfolder} " ]]; then + find "$romsPath$romfolder" -type f -iname "*.iso" | while read f; do echo "Converting: $f"; ${toolsPath}proton-launch.sh ${chdPath}DolphinTool.exe convert -f rvz -b 131072 -c zstd -l 5 -i "z:$f" -o "z:${f%.*}.rvz" && rm -rf "$f"; done; + find "$romsPath$romfolder" -type f -iname "*.gcm" | while read f; do echo "Converting: $f"; ${toolsPath}proton-launch.sh ${chdPath}DolphinTool.exe convert -f rvz -b 131072 -c zstd -l 5 -i "z:$f" -o "z:${f%.*}.rvz" && rm -rf "$f"; done; + fi + done + else + echo "missing tools" + fi + #cso + # + else exit fi diff --git a/tools/launchers/dolphin-emu.sh b/tools/launchers/dolphin.sh similarity index 100% rename from tools/launchers/dolphin-emu.sh rename to tools/launchers/dolphin.sh diff --git a/tools/launchers/PCSX2.sh b/tools/launchers/pcsx2.sh similarity index 100% rename from tools/launchers/PCSX2.sh rename to tools/launchers/pcsx2.sh diff --git a/tools/launchers/RPCS3.sh b/tools/launchers/rpcs3.sh similarity index 100% rename from tools/launchers/RPCS3.sh rename to tools/launchers/rpcs3.sh diff --git a/tools/launchers/yuzu.sh b/tools/launchers/yuzu.sh index ac17e0f4..62d56d5e 100644 --- a/tools/launchers/yuzu.sh +++ b/tools/launchers/yuzu.sh @@ -1,2 +1,18 @@ #!/bin/sh -/usr/bin/flatpak run org.yuzu_emu.yuzu \ No newline at end of file +emuName="yuzu" #parameterize me +emufolder="$HOME/Applications" # has to be applications for ES-DE to find it + +#find full path to emu executable +exe=$(find $emufolder -iname "${emuName}*.AppImage" | sort -n | cut -d' ' -f 2- | tail -n 1 2>/dev/null) + +#if appimage doesn't exist fall back to flatpak. +if [[ $exe == '' ]]; then + #flatpak + flatpakApp=$(flatpak list --app --columns=application | grep $emuName) + exe="/usr/bin/flatpak run "$flatpakApp +else +#make sure that file is executable + chmod +x $exe +fi +#run the executable with the params. +eval "${exe} ${@}" diff --git a/uninstall.sh b/uninstall.sh index d0de30a1..64ce5112 100644 --- a/uninstall.sh +++ b/uninstall.sh @@ -70,7 +70,6 @@ if [ "$doUninstall" == true ]; then 11 "Cemu" \ 12 "SteamRomManager" \ 13 "EmulationStationDE") - clear ans=$? if [ $ans -eq 0 ]; then @@ -123,39 +122,39 @@ if [ "$doUninstall" == true ]; then #Uninstalling if [[ "$doUninstallRA" == true ]]; then - flatpak uninstall org.libretro.RetroArch + flatpak uninstall org.libretro.RetroArch --system -y rm -rf ~/.var/app/org.libretro.RetroArch &>> /dev/null fi if [[ "$doUninstallPrimeHacks" == true ]]; then - flatpak uninstall io.github.shiiion.primehack + flatpak uninstall io.github.shiiion.primehack --system -y rm -rf ~/.var/app/io.github.shiiion.primehack &>> /dev/null fi if [[ "$doUninstallPCSX2" == true ]]; then - flatpak uninstall net.pcsx2.PCSX2 + flatpak uninstall net.pcsx2.PCSX2 --system -y rm -rf ~/.var/app/net.pcsx2.PCSX2 &>> /dev/null fi if [[ "$doUninstallRPCS3" == true ]]; then - flatpak uninstall net.rpcs3.RPCS3 + flatpak uninstall net.rpcs3.RPCS3 --system -y rm -rf ~/.var/app/net.rpcs3.RPCS3 &>> /dev/null fi if [[ "$doUninstallCitra" == true ]]; then - flatpak uninstall org.citra_emu.citra + flatpak uninstall org.citra_emu.citra --system -y rm -rf ~/.var/app/org.citra_emu.citra &>> /dev/null fi if [[ "$doUninstallDolphin" == true ]]; then - flatpak uninstall org.DolphinEmu.dolphin-emu + flatpak uninstall org.DolphinEmu.dolphin-emu --system -y rm -rf ~/.var/app/org.DolphinEmu.dolphin-emu &>> /dev/null fi if [[ "$doUninstallDuck" == true ]]; then - flatpak uninstall org.duckstation.DuckStation + flatpak uninstall org.duckstation.DuckStation --system -y rm -rf ~/.var/app/org.duckstation.DuckStation &>> /dev/null fi if [[ "$doUninstallPPSSPP" == true ]]; then - flatpak uninstall org.ppsspp.PPSSPP + flatpak uninstall org.ppsspp.PPSSPP --system -y rm -rf ~/.var/app/org.ppsspp.PPSSPP &>> /dev/null fi if [[ "$doUninstallYuzu" == true ]]; then - flatpak uninstall org.yuzu_emu.yuzu + flatpak uninstall org.yuzu_emu.yuzu --system -y rm -rf ~/.var/app/org.yuzu_emu.yuzu &>> /dev/null fi if [[ "$doUninstallCemu" == true ]]; then @@ -169,11 +168,11 @@ if [ "$doUninstall" == true ]; then # rm -f /run/media/mmcblk0p1/Emulation/roms/xbox360/* &>> /dev/null #fi if [[ "$doUninstallXemu" == true ]]; then - flatpak uninstall app.xemu.xemu + flatpak uninstall app.xemu.xemu --system -y rm -rf ~/.var/app/app.xemu.xemu &>> /dev/null fi if [[ "$doUninstallSRM" == true ]]; then - rm -rf ~/Desktop/Steam-ROM-Manager.AppImage &>> /dev/null + rm -rf ~/Desktop/SteamRomManager.desktop &>> /dev/null fi if [[ "$doUninstallESDE" == true ]]; then rm -rf ~/.emulationstation &>> /dev/null @@ -183,9 +182,9 @@ if [ "$doUninstall" == true ]; then rm -rf ~/.steam/steam/controller_base/templates/cemu_controller_config.vdf rm -rf ~/.steam/steam/controller_base/templates/citra_controller_config.vdf rm -rf ~/.steam/steam/controller_base/templates/pcsx2_controller_config.vdf + rm -rf ~/.steam/steam/controller_base/templates/duckstation_controller_config.vdf rm -rf ~/emudeck &>> /dev/null rm -rf ~/Desktop/EmuDeckCHD.desktop &>> /dev/null - rm -rf ~/Desktop/EmuDeckCHD.desktop &>> /dev/null rm -rf ~/Desktop/EmuDeckUninstall.desktop &>> /dev/null rm -rf ~/Desktop/EmuDeck.desktop &>> /dev/null rm -rf ~/Desktop/EmuDeckSD.desktop &>> /dev/null