diff --git a/.github/workflows/pull_request_template.md b/.github/workflows/pull_request_template.md deleted file mode 100644 index da534fdb..00000000 --- a/.github/workflows/pull_request_template.md +++ /dev/null @@ -1,16 +0,0 @@ -# PR Description -Please write a small description of what this PR is trying to accomplish, a new feature to EmuDeck, solving a bug, etc. - -## Usage: -EmuDeck is a free open source project, but we have an Early Access tier on Patreon where people can get timely exclusive to some features. - -Do you allow us to merge this PR to the Early Access branch, or do you only want your work to be available when the next public build is released? - -- [x] Early Access, Public Beta and Public -- [ ] Public and Beta only - -## Checklist: -- [ ] I am using the dev branch as the target for this PR. -- [ ] I've tested and verified that the PR works in at least one device. -- [ ] I've checked that my PR doesn't do anything wild like deleting user saved games :) -- [ ] If I'm using a third party binary or tool from other developer I'm allowed to use it. diff --git a/README.md b/README.md index e466599f..8f471e4e 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,98 @@ # EmuDeck - [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-908a85?logo=gitpod)](https://gitpod.io/from-referrer/) -EmuDeck is a collection of scripts that allows you to autoconfigure your Steam Deck or any other Linux Distro, it creates your roms directory structure and downloads all of the needed Emulators for you along with the best configurations for each of them. EmuDeck works great with [Steam Rom Manager](https://github.com/SteamGridDB/steam-rom-manager) or with [EmulationStation DE](https://es-de.org) +EmuDeck is a collection of scripts that allows you to autoconfigure your Steam Deck, it creates your roms directory structure and downloads all of the needed Emulators for you along with the best configurations for each of them. EmuDeck works great with [Steam ROM Manager](https://github.com/SteamGridDB/steam-rom-manager) or with [EmulationStation DE](https://es-de.org) -# How to use EmuDeck? +** If you are a dev please read till the bottom ** -We recomend you take a look at our extensive Wiki, you'll find guides, videos and all sorts of content about the project: +There are two ways of using EmuDeck: -[EmuDeck Wiki](https://emudeck.github.io/how-to-install-emudeck/steamos/) +## Using Steam ROM Manager + + + +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: + +https://emudeck.github.io/emulators/steamos/supported-emulators/ + +## Using EmulationStation DE + + + +EmuDeck configures EmulationStation DE to use the same rom folders that EmuDeck creates for you and it even downloads all the emulators and cores the ES-DE needs, all configurations that EmuDeck installs are carried over when using EmulationStation DE. For a comprehensive list of all the systems that ESDE supports go to [ES-DE](https://es-de.org) + +# Hotkeys + +We try to use the same hotkeys for every emulator but some of them have their own different hotkeys, shown here: + +https://emudeck.github.io/controls-and-hotkeys/windows/hotkeys/?h=hotkeys + +Note that Nintendo-oriented emulators refer to "A" in the emulated sense (physical Steam Deck "B") # Developers, developers, developers. If you wanna help us improve EmuDeck we are open to accept your PR! Just keep in mind this simple guide: -- Think that EmuDeck is for everybody, tech savvy and is specially directed to regular users that are new to Emulation, so everything has to be properly explained. +- Think EmuDeck is for everybody, tech savvy and regular users, so everything has to be properly explained, use Easy mode for unattended automatic stuff. +- User input is non recommended, everything should be done with no mouse or keyboard input. If input is a must then you have to code your feature only on expert mode. - Things using sudo are a big no no, there are exceptions but always try to find a way of prevent using sudo. -- Every Emulator needs to have a SRM profile and follow the AmberElec hotkey mapping. +- Every Emulator added has to be included on this readme file, have a SRM profile and follow the AmberElec hotkey mapping ( just check the previous table) - Always do your PR to the dev branch. + +## Submitting a PR Request for a Steam ROM Manager Parser + +If you would like to submit a PR request for a Steam ROM Manager parser, use the following format: + +### The Basics + +* Spell out console names - no acronyms + * For example, `PSP` should be spelled out as `PlayStation Portable` +* Respect original capitalization and spacing + * A few examples: + * `RetroArch` uses a capital `R` and capital `A` + * The `Nintendo Game Boy` uses a capital `N`, `G`, and `B` with spaces between each word + * The `PlayStation Portable` uses a capital `P` and `S` in `PlayStation` as do the other `PlayStation` handhelds and consoles + +### Parser Structure + +* `configTitle`: + * `COMPANYNAME SYSTEMNAME - EMULATORNAME RETROARCHCORENAME` + * If the standalone emulator name is identical to the RetroArch core name, add `(Standalone)` behind the `EMULATORNAME` + * A few examples: + * Config Title: `"configTitle": "Amiga - RetroArch PUAE",` + * Config Title: `"configTitle": "Nintendo Game Boy Color - mGBA (Standalone)",` + * Config Title: `"configTitle": "Sony PlayStation 2 - PCSX2",` +* `steamCategory`: + * **Note:** Non-Default Parsers refer to when a system has multiple emulation choices (through alternative emulators or RetroArch cores). Only one of these parsers is enabled by default and any alternative choices are disabled by default. + * Default Parsers: + * `COMPANYNAME CONSOLENAME` + * Non-Default Parsers: + * Standalone: `COMPANYNAME CONSOLENAME - EMULATORNAME` + * RetroArch Core: `COMPANYNAME CONSOLENAME - RETROARCHCORENAME` + * If the RetroArch core's name is identical to the Standalone emulator name, add `RetroArch` in front of the `RETROARCHCORENAME` + * If the standalone emulator name is identical to the RetroArch core name, add `(Standalone)` behind the `EMULATORNAME` + * A few examples: + * Default Parsers: + * Mupen64Plus Next (RetroArch core for Nintendo 64) + * Steam Category Name: `"steamCategory": ""${Nintendo 64}",` + * DuckStation (PSX Emulator) + * Steam Category Name: `"steamCategory": "${Sony PlayStation}",` + * Non-Default Parsers: + * Rosalie's Mupen GUI (N64 Emulator) + * Steam Category Name: `"steamCategory": "${Nintendo 64 - Rosalie's Mupen GUI}",` + * Beetle PSX HW (RetroArch core for PSX) + * Steam Category Name: `"steamCategory": "${Sony PlayStation - Beetle PSX HW}",` + +### Parser Filename + +`companyname_systemname-emulatorname-retroarchcore.json` + +If it is a RetroArch core, replace `emulatorname` with `ra`. + +* A few examples: + * `nintendo_wii-dolphin.json` + * `nintendo_64-rmg.json` + * `nintendo_gba-ra-mgba.json` + * `sega_saturn-ra-mednafen.json` diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..26a2e013 --- /dev/null +++ b/changelog.md @@ -0,0 +1,331 @@ +0.1 > 0.4 + +- Several fixes + + 0.5 + +- RetroArch Core downloader +- MAME 2003 Plus +- Genesis + + 0.5.1 + +- Dreamcast 16:9 hacks + + 0.5.2 + +- Fixes Genesis (SRM) & Gamecube(folder name) + + 0.5.3 + +- Fullscreen Citra + Steam Input for Citra Roms + steam://controllerconfig/3151590086/2784099045 + + 0.6 + +- Added Yuzu and NDS support + + 0.6.1 + +- Added FBNeo support + + 0.6.2 + +- Fix BIOS folder RA + + 0.6.3 + +- Cemu Experimental + + 0.6.4 + +- Ryujinx controls +- Fix RA Toggle Menu L3+R3 +- Nunchuk fix + + 0.7 + +- PrimeHacks support +- Fix .md on genesis folders + + 0.8 + +- Automatic Steam Input for Citra and Cemu + + 0.8.1 + +- CEMU Steam Input fix + + 0.9 + +- Added EmulationStation rom path configuration, folders and cores + + 0.10 + +- Fixed Yuzu's controls on Steam UI +- Added standalone PPSSPP +- Added PS2 optimized configuration + + 0.11 + +- Automatic Emulator Installation +- No need to launch the emulators before playing for the first time +- Yuzu paths for Firmware and Keys are symlinked in Emulation/bios + + 0.12 + +- Fixes several Bugs +- Adds cores for EmulationStation DE +- Installs EmulationStation DE +- Creates EmulationStation DE icon on SteamUI +- Removes readme.md files to prevent problems with Sega Systems +- Added Cemu icon to SteamUI +- Vulkan for CEMU +- ES Fix + + 0.13 + +- RA Fix +- Cemu autoinstallation +- Log file +- RPCS3 Controls +- SRM autoinstallation +- ES Fix + + 0.14 + +- RPCS3 is working from SteamUI thanks to Flatseal + + 0.15 + +- Complete revamp of the interface +- Now you can customize some RetroArch Options: Bezels +- Emulators can now be skipped so you can mantain your custom configuration + + 0.15.1 + +- Added support for .rpx Wii U Games + + 0.15.2 + +- Fixed Gamecube and Wii controls +- Dolphin FPS meter disabled by default + + 0.15.3 + +- Fixed RA bios path on internal storage +- RA changed fast forward mode from hold to toggle +- Added MAME folders for 2010, 2003 and current. +- Fixed some EmuDeck customize menus that weren't appearing +- Fixed Citra buttons to original hardware button positions A<->B + + 0.15.4 + +- Fixes a bug on 0.15.3 that prevented the script to finish +- Amber Elec Hotkeys configured for almost all emulators +- Hotkeys and Emulators cheatsheet available on github: https://github.com/dragoonDorise/EmuDeck + + 0.15.5 + +- More PS1 formats supported. Thanks to https://github.com/Godsbane +- SRM always up to date. Thanks to https://github.com/Nikki1993 +- Fixed Atary Linx +- Fixed symlinks repeating itselfs inside folders +- Fixes RA save configuration file issue +- Removes symlinks for MegaDrive y MegaCD +- Fixed recursive symlinks on yuzu folders +- Added 3DO support +- Fixed issues with bios paths when using internal storage +- Better BIOS detection for PS1 and PS2 +- Fixes autoload / autosave option on RetroArch + + 0.16 + +- Fixes Nes Bezels when using Mesen Core +- Fixes RA warning "Controller not configured, using fallback" +- Showing latest changelog when updating EmuDeck +- New Easy mode - 100% Plug and play for non tech savvy users. +- New Expert mode - Power users can now customize EmuDeck installations: + + - Choose what Emulators to install + - Choose if you want to keep your configuration or if you want EmuDeck to overwrite it. + - RA configuration: Bezels ON/OFF Autosave ON/OFF + - Allows users to be able to save its own RA configuration ( Bezels needs to be turned OFF, it's a RA Bug) + - This mode will allow a lot more in the future: Use non EXT4 SD Cards, use experimental emulators, choose different frontends, etc. + + 0.16.2 + +- Cemu installation fixes + + 0.17 + +- Added Beta and Dev release channels +- ESDE Downloaded data moved to SD Card if the user chose SD card on install +- Uninstall icon for those that want to uninstall EmuDeck +- Updated Icon with current version installed +- Fixes Bezels and Autosave configuration +- Added Xemu emulator support - Godsbane +- Enabled rumble motor on Dolphin +- Improved SD Card detection - Godsbane +- Added .wua support for upcoming Cemu 1.27 - v-tron + + 0.17.1 + +- New Emulation/saves folder so you can sync your saved games and states using Dropbox or similar +- Snes Aspect Ratio selection (4:3 or 8:7) +- Widescreen Hacks selection (Flycast RA, Dolphin, DuckStation) +- CHD Conversion script +- Support for PowerTools on Expert Mode - Improves Yuzu and Dolphin performance +- Added support for DualShock 4 and DualSense controllers for player 2 and 3 +- Wii U Rom folder creation fix +- Fixed PrimeHack SRM config - Godsbane +- Fixed PS1 SRM parsers to avoid duplicated titles - Godsbane +- Fixed PrimeHack controller config +- Fixes for people with custom flathubs repos - Godsbane +- New SD Card detection method ( BTRFS Support is back ) - popsUlfr + Godsbane +- Added Emulators parser on SRM + + 0.17.2 + +- Added RetroAchievments for RA +- Added Amiga support on SRM +- Set default emulators on ESDE +- Uninstaller fixes +- Fixed Widescreen toggle for Dolphin +- RA video driver changed to Vulkan except for Dolphin - AngelofWoe +- Xbox Parser turned on by default on SRM - Godsbane +- Added PS1 Beetle PSX RA Core on SRM (disabled by default) - Godsbane +- Added DOSBOX to SRM - AngelofWoe +- FIX 3DS parser on SRM, Remove CIA / Add CCI - Godsbane +- Updated Xemu toml config file - Godsbane +- RPCS3 Installed games moved to /Emulation/saves/rpcs3 - Godsbane +- Added PS3 PKG games on SRM - Godsbane +- Fixed Emulators flatpak permission to access their roms folder when not using SRM or ESDE - Godsbane +- Fixed Emulator launchers, only created for the ones the user chooses to install - Godsbane +- Get ESDE latest version from Dynamic url - Godsbane +- CHD script improvements - Godsbane +- Fix PCSX2 Save/Load state mappings - LBRapid + + 0.17.3 + +- New ESDE Epic Noir Theme set as default & Theme Selector +- Ability to launch WiiU Games from ESDE +- Cemu Script added to installers. Adding WiiU games to SRM no longer requires proton to be set, it just works TM! +- Widescreen Hacks for PS2 Games - Only US +- Widescreen for 70 Wii and GC games - SkyHighBrownie +- Added log files for Community Dolphin ini hacks. Send us your own! +- Added new ExpertMode feature - SteamGyroDSU. (requires sudo) +- Added logging to CHDman script so you can check what it did after the run. +- Added paths to Yuzu for roms directory. +- Added paths to Citra for roms directory. +- Added paths to Primehack for roms directory. +- Added permissions for PCSX2 to do netplay. +- Added permissions for Xemu to write to its hdd if it's internal. +- Added default paths for Cemu to mlc01 +- Added default paths for Cemu to roms folder. When you launch cemu with proton, you may need to refresh the games list manually for them to show up. +- Set new default emulators for ES-DE to be more in line with the ones we set for SRM and set preparations for future ESDE updates +- New emulation station defaults: + 'Genesis Plus GX' gamegear + 'Gambatte' gb + 'Gambatte' gbc + 'Dolphin (Standalone)' gc + 'PPSSPP (Standalone)' psp + 'Dolphin (Standalone)' wii + 'Mesen' nes + 'DOSBox-Pure' dos + 'PCSX2 (Standalone)' ps2 + 'melonDS' nds +- Update RPCS3 config with new version, as its config had changed +- Update PowerTools to version 4.1 ( Expert mode ). SMT Toggle is in. Be aware that this may crash MangoHud(stats) if enabled, but it won't hurt anything. MangoHud will come back on reboot. +- Fixed SRM Parser for Installed PS3 games for internal users. +- 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 + + 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 Touch Menu (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 - Binary Updater tool added. Ths new tool can update EmulationStation-DE, SteamRomManager, Cemu, Yuzu, or Xenia + to their latest versions without going through the EmuDeck install process. +- New - CHD Script now handles wii / gc iso --> rvz conversion +- New - Citra now has the microphone mapped for games that need it. +- New - Citra now has the gyro mapped for those that need it. (requires SteamDeckGyroDSU) +- New - Citra has load textures and precache on by default. (for users who want custom texture packs) +- New - Added a few properly labeled WiiMote profiles for dolphin +- New - Wiimote 2,3,4 are mapped to steaminput devices 2,3,4 - but not connected by default to avoid phantom cursors +- New - Auto download xbox hdd from xemu site on xemu install if it doesn't exist. User only needs to provide files in bios after this. +- New - Dolphin load textures and precache is now on by default. (for users who want custom texture packs) +- New - Dolphin Auto Change disc is now on by default. +- New - Dolphin cursor is now hidden by default. +- New - PCSX2 vsync is now on by default +- New - DuckStation rom path added. New hotkeys added to coincide with Steam Input Template. Changed quickMenu to Esc. (Steam + Dpad Left) +- Fix - Citra Steam Input. R5 only closes Citra after a long a press +- Fix - Cemu is now at 100% volume instead of 50% volume by default for new installs +- Fix - Dolphin pointer is now right trackpad and the joystick and works more smoothly. + If you have SteamGyro setup, there is are extra Wiimote profiles included that can use it. + _You may need to set the controller to Default Gamepad With Mouse Trackpad if steam decided to use Touchpad as Joystick instead._ +- Fix - Widescreen Hacks are now off by default for all emulators. They can be enabled by running in Expert Mode and choosing to customize Widescreen. +- 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. +- Fix - Citra is now 2x instead of 3x res by default for performance reasons +- Fix - Dolphin hotkey for Fast Forward has been updated from just Select to Select + R2 to match the other hotkeys + +0.17.6 + +- Added 16:9 bezel support for holoISO and Anbernic Win600 (or other 16:9 devices) +- Icon renamed to Update EmuDeck to avoid confusion +- Fixed Atari Bezels. Added bezels to Dreamcast, N64 and Saturn +- Fixed Dolphin and Primehack from sending button presses as part of hotkeys as in-game button presses +- Added Naomi (flycast) parser for Steam ROM Manager. Uses roms/naomi folder +- Fixed retroachievements not working for users with certain special characters in their passwords. +- Added easyRPG core to RA. Required additional files are not yet downloaded. You can add them manually. +- Added PCSX2-Qt AppImage and Steam ROM Manager Parser. This can live side by side with your existing pcsx2, but it should be removed. +- Migrate pcsx2 saves files to the Emulation folder. This is no longer a link. +- Both versions of Pcsx2 use the same saves location in their config so no matter which, you can save / load state. +- Expert mode settings are remembered. + If you run expert mode, and change a setting it will be retained and used on the next run of easy mode. (except install / reconfigure) +- RetroArch settings will be backed up before update. Settings files for this are no longer replaced. The options are updated or appended. +- Installing PluginLoader (powertools) now activates dev mode and installs the new version of the loader and plugin. Reboot may be required +- CHD script Renamed to Emudeck Compression Tool. New support for Wii games to convert them to rvz format +- ... too much more to fit here! \ No newline at end of file diff --git a/configs/org.libretro.RetroArch/config/retroarch/retroarch.cfg b/configs/org.libretro.RetroArch/config/retroarch/retroarch.cfg index 84ac28d4..00c22248 100644 --- a/configs/org.libretro.RetroArch/config/retroarch/retroarch.cfg +++ b/configs/org.libretro.RetroArch/config/retroarch/retroarch.cfg @@ -215,7 +215,7 @@ input_disk_prev = "nul" input_disk_prev_axis = "nul" input_disk_prev_btn = "nul" input_disk_prev_mbtn = "nul" -input_driver = "sdl" +input_driver = "x" input_duty_cycle = "3" input_enable_hotkey = "nul" input_enable_hotkey_axis = "nul" diff --git a/functions/EmuScripts/emuDeckCitra.sh b/functions/EmuScripts/emuDeckCitra.sh index 55a227f8..f28d3c62 100755 --- a/functions/EmuScripts/emuDeckCitra.sh +++ b/functions/EmuScripts/emuDeckCitra.sh @@ -1,10 +1,10 @@ #!/bin/bash #variables Citra_emuName="Citra" -Citra_emuType="AppImage" -Citra_emuPath="citra_emu" +Citra_emuType="FlatPak" +Citra_emuPath="org.citra_emu.citra" Citra_releaseURL="" -Citra_configFile="$HOME/.config/citra-emu/qt-config.ini" +Citra_configFile="$HOME/.var/app/org.citra_emu.citra/config/citra-emu/qt-config.ini" #cleanupOlderThings Citra_finalize(){ @@ -15,8 +15,7 @@ Citra_finalize(){ Citra_install(){ setMSG "Installing $Citra_emuName" installEmuFP "${Citra_emuName}" "${Citra_emuPath}" - curl -L https://github.com/citra-emu/citra-web/releases/download/2.0/citra-setup-linux > citra-setup-linux && chmod +x citra-setup-linux && ./citra-setup-linux --accept-licenses --confirm-command install - rm citra-setup-linux + flatpak override "${Citra_emuPath}" --filesystem=host --user } #ApplyInitialSettings @@ -32,7 +31,7 @@ Citra_init(){ #update Citra_update(){ setMSG "Updating $Citra_emuName settings." - cd $HOME/.citra && ./maintenancetool update + configEmuFP "${Citra_emuName}" "${Citra_emuPath}" Citra_setupStorage Citra_setEmulationFolder Citra_setupSaves @@ -49,35 +48,35 @@ Citra_setEmulationFolder(){ #Setup symlink for AES keys mkdir -p "${biosPath}/citra/" - mkdir -p "$HOME/.local/share/citra-emu/sysdata" - ln -sn "$HOME/.local/share/citra-emu/sysdata" "${biosPath}/citra/keys" + mkdir -p "$HOME/.var/app/org.citra_emu.citra/data/citra-emu/sysdata" + ln -sn "$HOME/.var/app/org.citra_emu.citra/data/citra-emu/sysdata" "${biosPath}/citra/keys" } #SetupSaves Citra_setupSaves(){ - linkToSaveFolder citra saves "$HOME/.local/share/citra-emu/sdmc" - linkToSaveFolder citra states "$HOME/.local/share/citra-emu/states" + linkToSaveFolder citra saves "$HOME/.var/app/org.citra_emu.citra/data/citra-emu/sdmc" + linkToSaveFolder citra states "$HOME/.var/app/org.citra_emu.citra/data/citra-emu/states" } #SetupStorage Citra_setupStorage(){ - if [ ! -f "$storagePath/citra/nand" ] && [ -d "$HOME/.local/share/citra-emu/nand/" ]; then + if [ ! -f "$storagePath/citra/nand" ] && [ -d "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/nand/" ]; then echo "citra nand does not exist in storagepath." echo -e "" setMSG "Moving Citra nand to the Emulation/storage folder" echo -e "" - mv "$HOME/.local/share/citra-emu/nand/" $storagePath/citra/nand/ - mv "$HOME/.local/share/citra-emu/sdmc/" $storagePath/citra/sdmc/ + mv "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/nand/" $storagePath/citra/nand/ + mv "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/sdmc/" $storagePath/citra/sdmc/ - unlink "$HOME/.local/share/citra-emu/nand/" - unlink "$HOME/.local/share/citra-emu/sdmc/" + unlink "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/nand/" + unlink "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/sdmc/" - ln -ns "${storagePath}/citra/nand/" "$HOME/.local/share/citra-emu/nand/" - ln -ns "${storagePath}/citra/sdmc/" "$HOME/.local/share/citra-emu/sdmc/" + ln -ns "${storagePath}/citra/nand/" "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/nand/" + ln -ns "${storagePath}/citra/sdmc/" "$HOME/.var/app/org.ctira_emu.citra/data/citra-emu/sdmc/" fi } @@ -86,14 +85,14 @@ Citra_setupStorage(){ #WipeSettings Citra_wipe(){ setMSG "Wiping $Citra_emuName config directory. (factory reset)" - rm -rf "$HOME/.config/citra-emu" + rm -rf "$HOME/.var/app/$Citra_emuPath" } #Uninstall Citra_uninstall(){ setMSG "Uninstalling $Citra_emuName." - cd $HOME/.citra && ./maintenancetool purge + flatpak uninstall "$Citra_emuPath" --user -y } #setABXYstyle @@ -103,31 +102,7 @@ Citra_setABXYstyle(){ #Migrate Citra_migrate(){ -echo "Begin Citra Migration" - emu="Citra" - migrationFlag="$HOME/.config/EmuDeck/.${emu}MigrationCompleted" - #check if we have a nomigrateflag for $emu - if [ ! -f "$migrationFlag" ]; then - #citra flatpak to appimage - #From -- > to - migrationTable=() - migrationTable+=("$HOME/.var/app/org.citra_emu.citra/data/citra-emu" "$HOME/.local/share/citra-emu") - migrationTable+=("$HOME/.var/app/org.citra_emu.citra/config/citra-emu" "$HOME/.config/citra-emu") - - # migrateAndLinkConfig "$emu" "$migrationTable" - fi - - #move data from hidden folders out to these folders in case the user already put stuff here. - origPath="$HOME/.var/app/org.citra_emu.citra/data/citra_emu/" - - citra_setupStorage - - rsync -av "${origPath}citra/dump" "${storagePath}/citra/" && rm -rf "${origPath}citra/dump" - rsync -av "${origPath}citra/load" "${storagePath}/citra/" && rm -rf "${origPath}citra/load" - rsync -av "${origPath}citra/sdmc" "${storagePath}/citra/" && rm -rf "${origPath}citra/sdmc" - rsync -av "${origPath}citra/nand" "${storagePath}/citra/" && rm -rf "${origPath}citra/nand" - rsync -av "${origPath}citra/screenshots" "${storagePath}/citra/" && rm -rf "${origPath}citra/screenshots" - rsync -av "${origPath}citra/tas" "${storagePath}/citra/" && rm -rf "${origPath}citra/tas" +echo "NYI" } #WideScreenOn @@ -166,4 +141,4 @@ Citra_resetConfig(){ Citra_addSteamInputProfile(){ addSteamInputCustomIcons rsync -r "$EMUDECKGIT/configs/steam-input/citra_controller_config.vdf" "$HOME/.steam/steam/controller_base/templates/" -} \ No newline at end of file +} diff --git a/functions/EmuScripts/emuDeckRPCS3.sh b/functions/EmuScripts/emuDeckRPCS3.sh index 5b98b558..5fd70dc3 100644 --- a/functions/EmuScripts/emuDeckRPCS3.sh +++ b/functions/EmuScripts/emuDeckRPCS3.sh @@ -1,11 +1,10 @@ #!/bin/bash #variables -RPCS3_emuName="RPCS3" -RPCS3_emuType="AppImage" -RPCS3_releaseURL="https://rpcs3.net/latest-appimage" -RPCS3_emuPath="$HOME/Applications/rpcs3.AppImage" -RPCS3_flatpakPath="$HOME/.var/app/net.rpcs3.RPCS3" -RPCS3_VFSConf="$HOME/.config/rpcs3/vfs.yml" +RPCS3_remuName="RPCS3" +RPCS3_emuType="FlatPak" +RPCS3_emuPath="net.rpcs3.RPCS3" +RPCS3_releaseURL="" +RPCS3_VFSConf="$HOME/.var/app/${RPCS3_emuPath}/config/rpcs3/vfs.yml" #cleanupOlderThings RPCS3_cleanup(){ @@ -14,40 +13,13 @@ RPCS3_cleanup(){ #Install RPCS3_install(){ - setMSG "Installing RPCS3" - - # RPCS3 does not have a "latest" tag on their GitHub repo. Open issue said to use the below URL instead. Modified from ES-DE script - RPCS3_releaseMD5="$(curl -sL https://rpcs3.net/latest-appimage | md5sum | cut -d ' ' -f 1)" - - local showProgress="$1" - - if [[ $RPCS3_releaseURL = "https://rpcs3.net/latest-appimage"* ]]; then - - if safeDownload "$RPCS3_remuName" "$RPCS3_releaseURL" "$RPCS3_emuPath" "$showProgress"; then - RPCS3_md5sum=($(md5sum $RPCS3_emuPath)) # get first element - if [ "$RPCS3_md5sum" == "$RPCS3_releaseMD5" ]; then - echo "RPCS3 PASSED HASH CHECK." - chmod +x "$RPCS3_emuPath" - else - echo "RPCS3 FAILED HASH CHECK. Expected $RPCS3_releaseMD5, got $RPCS3_md5sum" - fi - else - return 1 - fi - else - setMSG "$RPCS3_remuName not found" - return 1 - fi - - # Preserve flatpak permissions for old RPCS3 Install - flatpak override net.rpcs3.RPCS3 --filesystem=host --user - + installEmuFP "${RPCS3_remuName}" "${RPCS3_emuPath}" + flatpak override "${RPCS3_emuPath}" --filesystem=host --user } #ApplyInitialSettings RPCS3_init(){ - RPCS3_migrate - configEmuAI "$RPCS3_emuName" "config" "$HOME/.config/rpcs3" "$EMUDECKGIT/configs/rpcs3" "true" + configEmuFP "${RPCS3_remuName}" "${RPCS3_emuPath}" "true" RPCS3_setupStorage RPCS3_setEmulationFolder RPCS3_setupSaves @@ -55,8 +27,7 @@ RPCS3_init(){ #update RPCS3_update(){ - RPCS3_migrate - configEmuAI "$RPCS3_emuName" "config" "$HOME/.config/rpcs3" "$EMUDECKGIT/configs/rpcs3" + configEmuFP "${RPCS3_remuName}" "${RPCS3_emuPath}" RPCS3_setupStorage RPCS3_setEmulationFolder RPCS3_setupSaves @@ -64,14 +35,13 @@ RPCS3_update(){ #ConfigurePaths RPCS3_setEmulationFolder(){ - iniFieldUpdate "$RPCS3_VFSConf" "" "/dev_hdd0/" "$storagePath/rpcs3/dev_hdd0/" ": " - iniFieldUpdate "$RPCS3_VFSConf" "" "/games/" "$romsPath/ps3/" ": " + iniFieldUpdate "$RPCS3_VFSConf" "" "/dev_hdd0/" "$storagePath/rpcs3/dev_hdd0/" ": " + iniFieldUpdate "$RPCS3_VFSConf" "" "/games/" "$romsPath/ps3/" ": " } #SetupSaves RPCS3_setupSaves(){ linkToSaveFolder rpcs3 saves "${storagePath}/rpcs3/dev_hdd0/home/00000001/savedata" - linkToSaveFolder rpcs3 trophy "${storagePath}/rpcs3/dev_hdd0/home/00000001/trophy" } @@ -80,11 +50,11 @@ RPCS3_setupStorage(){ mkdir -p "$storagePath/rpcs3/" - if [ ! -d "$storagePath"/rpcs3/dev_hdd0 ] && [ -d "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/" -o -d "$HOME/.config/rpcs3/" ]; then - echo "RPCS3 HDD does not exist in storage path" + if [ ! -d "$storagePath"/rpcs3/dev_hdd0 ] && [ -d "$HOME/.var/app/${RPCS3_emuPath}/" ];then + echo "rpcs3 hdd does not exist in storagepath." echo -e "" - setMSG "Moving RPCS3 HDD to the Emulation/storage folder" + setMSG "Moving rpcs3 HDD to the Emulation/storage folder" echo -e "" mkdir -p "$storagePath/rpcs3" @@ -92,39 +62,24 @@ RPCS3_setupStorage(){ 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" - - elif [ -d "$HOME/.config/rpcs3/dev_hdd0" ]; then - rsync -av "$HOME/.config/rpcs3/dev_hdd0" "$storagePath"/rpcs3/ && rm -rf "$HOME/.config/rpcs3/dev_hdd0" + elif [ -d "$HOME/.var/app/${RPCS3_emuPath}/config/rpcs3/dev_hdd0" ]; then + rsync -av "$HOME/.var/app/${RPCS3_emuPath}/config/rpcs3/dev_hdd0" "$storagePath"/rpcs3/ && rm -rf "$HOME/.var/app/${RPCS3_emuPath}/config/rpcs3/dev_hdd0" fi fi } + #WipeSettings RPCS3_wipe(){ - setMSG "Wiping $RPCS3_emuName settings." - rm -rf "$HOME/.config/rpcs3" - rm -rf "$HOME/.cache/rpcs3" - + rm -rf "$HOME/.var/app/$RPCS3_emuPath" + # prob not cause roms are here } -# Create desktop shortcut -RPCS3_createDesktopShortcut(){ - - createDesktopShortcut "$HOME/.local/share/applications/$RPCS3_remuName.desktop" \ - "$RPCS3_emuName AppImage" \ - "${toolsPath}/launchers/rpcs3.sh" \ - "false" -} - #Uninstall RPCS3_uninstall(){ - setMSG "Uninstalling $RPCS3_emuName." - rm -rf "$RPCS3_emuPath" - RPCS3_wipe + flatpak uninstall "$RPCS3_emuPath" --user -y } #setABXYstyle @@ -134,22 +89,7 @@ RPCS3_setABXYstyle(){ #Migrate RPCS3_migrate(){ - echo "Begin RPCS3 Migration" - - # Migration - migrationFlag="$HOME/.config/EmuDeck/.${RPCS3_emuName}MigrationCompleted" - #check if we have a nomigrateflag for $emu - if [ ! -f "$migrationFlag" ]; then - #RPCS3 flatpak to appimage - #From -- > to - migrationTable=() - migrationTable+=("$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3" "$HOME/.config/rpcs3") - - migrateAndLinkConfig "$RPCS3_emuName" "$migrationTable" - fi - - echo "true" - + echo "NYI" } #WideScreenOn @@ -178,13 +118,9 @@ RPCS3_finalize(){ } RPCS3_IsInstalled(){ - if [ -e "$RPCS3_emuPath" ] || [ -e "$RPCS3_flatpakPath" ]; then - echo "true" - else - echo "false" - fi + isFpInstalled "$RPCS3_emuPath" } RPCS3_resetConfig(){ RPCS3_init &>/dev/null && echo "true" || echo "false" -} \ No newline at end of file +} diff --git a/functions/ToolScripts/emuDeckCloudSync.sh b/functions/ToolScripts/emuDeckCloudSync.sh index 6fd436c6..0dfb81c8 100644 --- a/functions/ToolScripts/emuDeckCloudSync.sh +++ b/functions/ToolScripts/emuDeckCloudSync.sh @@ -64,15 +64,6 @@ cloud_sync_config(){ } -createCloudFile() { - local folder=$1 - local cloudFilePath="${folder}/.cloud" - if [ ! -f "$cloudFilePath" ]; then - echo "" > "$cloudFilePath" - fi -} - - cloud_sync_setup_providers(){ startLog ${FUNCNAME[0]} if [ "$cloud_sync_provider" == "Emudeck-NextCloud" ]; then @@ -118,16 +109,13 @@ cloud_sync_setup_providers(){ username="$(echo "$NCInput" | awk -F "," '{print $2}')" password="$(echo "$NCInput" | awk -F "," '{print $3}')" port="$(echo "$NCInput" | awk -F "," '{print $4}')" - find "$savesPath" -type d -exec bash -c 'createCloudFile "$0"' {} \; - "$cloud_sync_bin" config update "$cloud_sync_provider" host="$host" user="$username" port="$port" pass="$("$cloud_sync_bin" obscure $password)" && "$cloud_sync_bin" mkdir "$cloud_sync_provider:Emudeck\saves" && "$cloud_sync_bin" copy "$savesPath" "$cloud_sync_provider:Emudeck\saves" --include "*.cloud" echo "true" - find "$savesPath" -type f -name "*.cloud" -exec rm {} \; + + "$cloud_sync_bin" config update "$cloud_sync_provider" host="$host" user="$username" port="$port" pass="$("$cloud_sync_bin" obscure $password)" else echo "Cancel SFTP Login" fi - elif [ "$cloud_sync_provider" == "Emudeck-OneDrive" ]; then - find "$savesPath" -type d -exec bash -c 'createCloudFile "$0"' {} \; - "$cloud_sync_bin" config update "$cloud_sync_provider" && "$cloud_sync_bin" mkdir "$cloud_sync_provider:Emudeck\saves" && "$cloud_sync_bin" copy "$savesPath" "$cloud_sync_provider:Emudeck\saves" --include "*.cloud" echo "true" - find "$savesPath" -type f -name "*.cloud" -exec rm {} \; + + elif [ "$cloud_sync_provider" == "Emudeck-SMB" ]; then NCInput=$(zenity --forms \ @@ -144,10 +132,8 @@ cloud_sync_setup_providers(){ host="$(echo "$NCInput" | awk -F "," '{print $1}')" username="$(echo "$NCInput" | awk -F "," '{print $2}')" password="$(echo "$NCInput" | awk -F "," '{print $3}')" - find "$savesPath" -type d -exec bash -c 'createCloudFile "$0"' {} \; - "$cloud_sync_bin" config update "$cloud_sync_provider" host=$host user=$username pass="$("$cloud_sync_bin" obscure $password)" && "$cloud_sync_bin" mkdir "$cloud_sync_provider:Emudeck\saves" && "$cloud_sync_bin" copy "$savesPath" "$cloud_sync_provider:Emudeck\saves" --include "*.cloud" echo "true" - find "$savesPath" -type f -name "*.cloud" -exec rm {} \; + "$cloud_sync_bin" config update "$cloud_sync_provider" host=$host user=$username pass="$("$cloud_sync_bin" obscure $password)" else echo "Cancel SMB Login" fi diff --git a/functions/ToolScripts/emuDeckSRM.sh b/functions/ToolScripts/emuDeckSRM.sh index a186741a..241642ae 100644 --- a/functions/ToolScripts/emuDeckSRM.sh +++ b/functions/ToolScripts/emuDeckSRM.sh @@ -297,8 +297,7 @@ SRM_init(){ rm -rf "$HOME/temp_parser" ln -s "$json_directory" "$HOME/temp_parser" files=$(find "$HOME/temp_parser/emudeck" -name "*.json" | sort) - customfiles=$(find "$SRM_userData_configDir/parsers/custom/" -name "*.json" | sort) - jq -s '.' $files $customfiles > "$output_file" + jq -s '.' $files > "$output_file" rm -rf "$HOME/temp_parser" sleep 1 diff --git a/functions/appImageInit.sh b/functions/appImageInit.sh index bbeddb5f..ce314771 100644 --- a/functions/appImageInit.sh +++ b/functions/appImageInit.sh @@ -1,18 +1,6 @@ #!/bin/bash appImageInit() { - if [ "$system" == "chimeraos" ]; then - ESDE_chimeraOS - mkdir -p $HOME/Applications - - downloads_dir="$HOME/Downloads" - destination_dir="$HOME/Applications" - file_name="EmuDeck" - - find "$downloads_dir" -type f -name "*$file_name*.AppImage" -exec mv {} "$destination_dir/$file_name.AppImage" \; - - fi - #Autofixes, put here functions that make under the hood fixes. autofix_duplicateESDE #autofix_raSavesFolders diff --git a/latest.md b/latest.md new file mode 100644 index 00000000..90e2ef1c --- /dev/null +++ b/latest.md @@ -0,0 +1,21 @@ +0.17.6 +- Added 16:9 bezel support for holoISO and Anbernic Win600 (or other 16:9 devices) +- Left Analog stick mirrors the d-pad controls for older systems +- Recursive SRM parsers. Now you can organize your games in folders +- Icon renamed to Update EmuDeck to avoid confusion +- Fixed Atari Bezels. Added bezels to Dreamcast, N64 and Saturn +- Fixed Dolphin and Primehack from sending button presses as part of hotkeys as in-game button presses +- Added Naomi (flycast) parser for Steam ROM Manager. Uses roms/naomi folder +- Fixed retroachievements not working for users with certain special characters in their passwords. +- Added easyRPG core to RA. Required additional files are not yet downloaded. You can add them manually. +- Added PCSX2-Qt AppImage and Steam ROM Manager Parser. This can live side by side with your existing pcsx2, but it should be removed. +- Migrate pcsx2 saves files to the Emulation folder. This is no longer a link. +- Both versions of Pcsx2 use the same saves location in their config so no matter which, you can save / load state. +- Expert mode settings are remembered. + If you run expert mode, and change a setting it will be retained and used on the next run of easy mode. (except install / reconfigure) +- RetroArch settings will be backed up before update. Settings files for this are no longer replaced. The options are updated or appended. +- Installing PluginLoader (powertools) now activates dev mode and installs the new version of the loader and plugin. Reboot may be required +- CHD script Renamed to Emudeck Compression Tool. New support for Wii games to convert them to rvz format +- Preserve custom Artwork on Steam ROM Manager on second scans +- Support for Mesen HD Packs +- ... too much more to fit here! diff --git a/system-setup.sh b/system-setup.sh new file mode 100755 index 00000000..7fc89627 --- /dev/null +++ b/system-setup.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -e + +SCRIPT_DIR=$( cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) + +function log_err { + echo "$@" >&2 +} + +function script_failure { + log_err "An error occurred:$([ -z "$1" ] && " on line $1" || "(unknown)")." + log_err "Installation failed!" +} + +trap 'script_failure $LINENO' ERR + +echo "Installing EmuDeck prerequisites..." +echo +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + if command -v apt-get >/dev/null; then + echo "Installing packages with apt..." + DEBIAN_DEPS="steam jq zenity flatpak unzip bash" + + sudo apt-get -y update + sudo apt-get -y install $DEBIAN_DEPS + elif command -v pacman >/dev/null; then + echo "Installing packages with pacman..." + ARCH_DEPS="steam jq zenity flatpak unzip bash" + + sudo pacman -Syu + sudo pacman -S $ARCH_DEPS + elif command -v dnf >/dev/null; then + echo "Installing packages with dnf..." + FEDORA_DEPS="steam jq zenity flatpak unzip bash" + + sudo dnf install -y $FEDORA_DEPS + else + log_err "Your Linux distro '$(lsb_release -s -d)' is not supported by this script. We invite to open an issue or help us with adding your distro to this script. https://github.com/dragoonDorise/EmuDeck/issues" + exit 1 + fi +else + log_err "Your operating system '$(OSTYPE)' is not supported by this script. We invite to open an issue or help us with adding your OS to this script. https://github.com/dragoonDorise/EmuDeck/issues" + exit 1 +fi + +# this could be replaced to immediately start the EmuDeck setup script + +echo "All prerequisite packages have been installed. You're free to install EmuDeck!" diff --git a/tools/binupdate/binupdate.sh b/tools/binupdate/binupdate.sh index 1557167e..6fc03808 100644 --- a/tools/binupdate/binupdate.sh +++ b/tools/binupdate/binupdate.sh @@ -293,4 +293,4 @@ else zenity --error \ --text="Nothing available to be updated." 2>/dev/null -fi \ No newline at end of file +fi diff --git a/tools/launchers/rpcs3.sh b/tools/launchers/rpcs3.sh index a84fca2c..480a98f0 100644 --- a/tools/launchers/rpcs3.sh +++ b/tools/launchers/rpcs3.sh @@ -1,7 +1,7 @@ #!/bin/sh source $HOME/.config/EmuDeck/backend/functions/all.sh cloud_sync_downloadEmu "rpcs3" && cloud_sync_startService -emuName="rpcs3" +emuName="rpcs3" #parameterize me emufolder="$HOME/Applications" # has to be applications for ES-DE to find it #find full path to emu executable @@ -10,7 +10,7 @@ exe=$(find $emufolder -iname "${emuName}*.AppImage" | sort -n | cut -d' ' -f 2- #if appimage doesn't exist fall back to flatpak. if [[ $exe == '' ]]; then #flatpak - flatpakApp=$(flatpak list --app --columns=application | grep $RPCS3_emuName) + flatpakApp=$(flatpak list --app --columns=application | grep $emuName) exe="/usr/bin/flatpak run "$flatpakApp else #make sure that file is executable diff --git a/version.md b/version.md new file mode 100644 index 00000000..5543a76e --- /dev/null +++ b/version.md @@ -0,0 +1 @@ +0.17.6 diff --git a/zenity-setup.sh b/zenity-setup.sh new file mode 100644 index 00000000..b9368cad --- /dev/null +++ b/zenity-setup.sh @@ -0,0 +1,714 @@ +#!/bin/bash + +# Seeting up the progress Bar for the rest of the installation +finished=false +MSG=$HOME/.config/EmuDeck/msg.log +echo "0" > "$MSG" +echo "# Installing EmuDeck" >> "$MSG" + +( + while [ $finished == false ] + do + cat "$MSG" + if grep -q "100" "$MSG"; then + finished=true + break + fi + # sleep 10 + done +) | zenity --progress \ + --title="Installing EmuDeck" \ + --text="Installing EmuDeck..." \ + --percentage=0 \ + --no-cancel \ + --pulsate \ + --auto-close \ + --width=300 2>/dev/null & + +if [ "$?" == -1 ] ; then + zenity --error \ + --text="Update canceled." 2>/dev/null +fi + +# +## Splash screen +# + +latest=$(cat "$EMUDECKGIT/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 + + + +# +# Initialize locations +# +locationTable=() +locationTable+=(TRUE "Internal" "$HOME") #always valid + +#built in SD Card reader +sdCardFull=$(getSDPath) +sdValid=$(testLocationValid "SD" "$sdCardFull") +echo "$sdCardFull $sdValid" +if [[ ! $sdValid =~ "Invalid" ]]; then + locationTable+=(FALSE "SD Card" "$sdCardFull") +fi + +# +# Installation mode selection +# + +text="$(printf "Hi!\nDo you want to run EmuDeck on Easy or Expert mode?\n\nEasy Mode takes care of everything for you, it is an unattended installation.\n\nExpert mode gives you a bit more of control on how EmuDeck configures your system like giving you the option to install PowerTools or keep your custom configurations per Emulator")" +zenity --question \ + --title="EmuDeck" \ + --width=250 \ + --ok-label="Expert Mode" \ + --cancel-label="Easy Mode" \ + --text="${text}" 2>/dev/null +ans=$? +if [ $ans -eq 0 ]; then + 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 + setSetting expert false + echo "Mode selected: Easy" +fi + +# +#Storage Selection +# + +if [[ ${#locationTable[@]} -gt 3 ]]; then # -gt 3 because there's 3 entries per row. + destination=$(zenity --list \ + --title="Where would you like Emudeck to be installed?" \ + --radiolist \ + --width=400 --height=225 \ + --column="" --column="Install Location" --column="value" \ + --hide-column=3 --print-column=3 \ + "${locationTable[@]}" 2>/dev/null) + ans=$? + if [ $ans -eq 0 ]; then + echo "Storage: ${destination}" + else + echo "No storage choice made" + exit + fi +else + destination="$HOME" +fi + +if [[ $destination == "CUSTOM" ]]; then + destination=$(customLocation) + customValid=$(testLocationValid "Custom" "${destination}") + echo "$customValid" + if [[ $customValid =~ "Invalid" ]]; then + echo "User chose invalid location. Exiting." + #zenity pop up explaining why + exit + fi +fi + +#New paths based on where the user picked. +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" +setSetting ESDEscrapData "${destination}/Emulation/tools/downloaded_media/" + +#createFolders I think we dont need this anymore in here + +# +# Start of Expert mode configuration +# The idea is that Easy mode is unatended, so everything that's out +# out of the ordinary has to had its flag enabled/disabled on Expert mode +# + +if [ "$expert" == "true" ]; then + echo "Expert mode begin" + + #one entry per expert mode feature + table=() + #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? 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 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 "arSnes" "SNES 8:7 Aspect Ratio? (unchecked is 4:3)") + table+=(TRUE "selectWideScreen" "Customize Emulator Widescreen Selection?") + table+=(TRUE "setRAEnabled" "Enable Retroachievments in Retroarch?") + table+=(TRUE "setRASignIn" "Change RetroAchievements Sign in?") + table+=(TRUE "doESDEThemePicker" "Choose your EmulationStation-DE Theme?") + #table+=(TRUE "doXboxButtons" "Should facebutton letters match between Nintendo and Steamdeck? (default is matched location)") + + if [[ ! $branch == "main" ]]; then + table+=(TRUE "SaveSync" "Setup Save Synchronization for Emudeck to a cloud provider") + fi + + declare -i height=(${#table[@]}*40) + + expertModeFeatureList=$(zenity --list --checklist --width=1000 --height="${height}" \ + --column="Select?" \ + --column="Features" \ + --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 + # setSetting doInstallCHD true + #fi + if [[ "$expertModeFeatureList" == *"PowerTools"* ]]; then + setSetting doInstallPowertools true + else + setSetting doInstallPowertools false + fi + if [[ "$expertModeFeatureList" == *"SteamGyro"* ]]; then + setSetting doInstallGyro true + else + setSetting doInstallGyro false + fi + if [[ "$expertModeFeatureList" == *"SaveSync"* ]]; then + setSetting doSetupSaveSync true + else + setSetting doSetupSaveSync false + fi + if [[ "$expertModeFeatureList" == *"updateSRM"* ]]; then + setSetting doSetupSRM true + else + setSetting doSetupSRM false + fi + if [[ "$expertModeFeatureList" == *"updateESDE"* ]]; then + setSetting doInstallESDE true + else + setSetting doInstallESDE false + fi + if [[ "$expertModeFeatureList" == *"selectEmulators"* ]]; then + setSetting doSelectEmulators true + else + setSetting doSelectEmulators false + fi + if [[ "$expertModeFeatureList" == *"selectEmulatorConfig"* ]]; then + setSetting doResetEmulators true + else + setSetting doResetEmulators false + fi + if [[ "$expertModeFeatureList" == *"selectRABezels"* ]]; then + setSetting RABezels true + else + setSetting RABezels false + fi + if [[ "$expertModeFeatureList" == *"selectRAAutoSave"* ]]; then + setSetting RAautoSave true + else + setSetting RAautoSave false + fi + if [[ "$expertModeFeatureList" == *"arSnes"* ]]; then + setSetting arSnes 43 + else + setSetting arSnes 87 + fi + if [[ "$expertModeFeatureList" == *"selectWideScreen"* ]]; then + setSetting doSelectWideScreen true + else + setSetting doSelectWideScreen false + fi + if [[ "$expertModeFeatureList" == *"setRASignIn"* ]]; then + setSetting doRASignIn true + else + setSetting doRASignIn false + fi + if [[ "$expertModeFeatureList" == *"setRAEnable"* ]]; then + setSetting doRAEnable true + else + setSetting doRAEnable false + fi + if [[ "$expertModeFeatureList" == *"doESDEThemePicker"* ]]; then + setSetting doESDEThemePicker true + else + setSetting doESDEThemePicker false + fi + + + if [[ $doInstallPowertools == "true" || $doInstallGyro == "true" || $isRealDeck == "false" ]]; then + hasPass=$(passwd -S "$USER" | 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 + sleep 1 + clear + echo "Enter a new password for the local Deck account here. You will have to enter it twice. No visual indication of typing will occur." + echo "Please remember it." + passwd + ans=$? + if [[ $ans == 1 ]]; then + echo "Setting password failed." + fi + fi + PASSWD="$(zenity --password --title="Password Entry" --text="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 Entry" --text="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 + setSetting doInstallPowertools false + setSetting doInstallGyro false + fi + fi + fi + if [[ $doESDEThemePicker == true ]]; then + text="Which theme do you want to set for 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: $esdeTheme" + setSetting esdeTheme $esdeTheme + fi + fi + + + if [[ $doSelectEmulators == "true" ]]; then + + emuTable=() + emuTable+=(TRUE "Multiple" "RetroArch") + emuTable+=(TRUE "Arcade" "MAME") + emuTable+=(TRUE "Dreamcast" "Flycast") + emuTable+=(TRUE "Metroid Prime" "PrimeHack") + emuTable+=(TRUE "PS2" "PCSX2-Legacy") + emuTable+=(TRUE "PS2" "PCSX2-QT") + 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 "Switch" "Ryujinx") + emuTable+=(TRUE "WiiU" "Cemu") + emuTable+=(TRUE "XBox" "Xemu") + emuTable+=(TRUE "N64" "RMG") + emuTable+=(TRUE "Multi-Systems Emulator" "ares") + emuTable+=(FALSE "GameBoy / Color / Advance" "mGBA") + + #if we are in beta / dev install, allow Xenia. Still false by default though. Will only work on expert mode, and explicitly turned on. + if [[ $branch == "beta" || $branch == "dev" ]]; then + emuTable+=(FALSE "Xbox360" "Xenia") + fi + + #Emulator selector + text="$(printf "What emulators do you want to install?")" + emusToInstall=$(zenity --list \ + --title="EmuDeck" \ + --height=500 \ + --width=250 \ + --ok-label="OK" \ + --cancel-label="Exit" \ + --text="${text}" \ + --checklist \ + --column="Select" \ + --column="System" \ + --column="Emulator" \ + --print-column=3 \ + "${emuTable[@]}" 2>/dev/null) + ans=$? + + if [ $ans -eq 0 ]; then + echo "Emu Install selected: $emusToInstall" + if [[ "$emusToInstall" == *"RetroArch"* ]]; then + setSetting doInstallRA true + else + setSetting doInstallRA false + fi + if [[ "$emusToInstall" == *"Flycast"* ]]; then + setSetting doInstallFlycast true + else + setSetting doInstallFlycast false + fi + if [[ "$emusToInstall" == *"PrimeHack"* ]]; then + setSetting doInstallPrimeHack true + else + setSetting doInstallPrimeHack false + fi + if [[ "$emusToInstall" == *"PCSX2-Legacy"* ]]; then + setSetting doInstallPCSX2 true + else + setSetting doInstallPCSX2 false + fi + if [[ "$emusToInstall" == *"PCSX2-QT"* ]]; then + setSetting doInstallPCSX2QT true + else + setSetting doInstallPCSX2QT false + fi + if [[ "$emusToInstall" == *"RPCS3"* ]]; then + setSetting doInstallRPCS3 true + else + setSetting doInstallRPCS3 false + fi + if [[ "$emusToInstall" == *"Citra"* ]]; then + setSetting doInstallCitra true + else + setSetting doInstallCitra false + fi + if [[ "$emusToInstall" == *"Dolphin"* ]]; then + setSetting doInstallDolphin true + else + setSetting doInstallDolphin false + fi + if [[ "$emusToInstall" == *"Duckstation"* ]]; then + setSetting doInstallDuck true + else + setSetting doInstallDuck false + fi + if [[ "$emusToInstall" == *"PPSSPP"* ]]; then + setSetting doInstallPPSSPP true + else + setSetting doInstallPPSSPP false + fi + if [[ "$emusToInstall" == *"mGBA"* ]]; then + setSetting doInstallMGBA true + else + setSetting doInstallMGBA false + fi + if [[ "$emusToInstall" == *"Yuzu"* ]]; then + setSetting doInstallYuzu true + else + setSetting doInstallYuzu false + fi + if [[ "$emusToInstall" == *"Ryujinx"* ]]; then + setSetting doInstallRyujinx true + else + setSetting doInstallRyujinx false + fi + if [[ "$emusToInstall" == *"Cemu"* ]]; then + setSetting doInstallCemu true + else + setSetting doInstallCemu false + fi + if [[ "$emusToInstall" == *"Xemu"* ]]; then + setSetting doInstallXemu true + else + setSetting doInstallXemu false + fi + if [[ "$emusToInstall" == *"Xenia"* ]]; then + setSetting doInstallXenia true + else + setSetting doInstallXenia false + fi + #if [[ "$emusToInstall" == *"MelonDS"* ]]; then + # doInstallMelon=true + #fi + if [[ "$emusToInstall" == *"RMG"* ]]; then + setSetting doInstallRMG true + else + setSetting doInstallRMG false + fi + if [[ "$emusToInstall" == *"ares"* ]]; then + setSetting doInstallares true + else + setSetting doInstallares false + fi + + else + exit + fi + fi + + + if [[ $doSelectWideScreen == "true" ]]; then + #Emulators screenHacks + emuTable=() + emuTable+=(TRUE "Dolphin") + emuTable+=(TRUE "Duckstation") + emuTable+=(TRUE "Flycast") + emuTable+=(TRUE "PCSX2-QT") + emuTable+=(TRUE "RA-BeetlePSX") + emuTable+=(TRUE "RA-Flycast") + emuTable+=(TRUE "Xemu") + + text="$(printf "Selected Emulators will use WideScreen Hacks")" + wideToInstall=$(zenity --list \ + --title="EmuDeck" \ + --height=500 \ + --width=250 \ + --ok-label="OK" \ + --cancel-label="Exit" \ + --text="${text}" \ + --checklist \ + --column="Widescreen?" \ + --column="Emulator" \ + "${emuTable[@]}" 2>/dev/null) + ans=$? + if [ $ans -eq 0 ]; then + echo "Widescreen choices: $wideToInstall" + if [[ "$wideToInstall" == *"Duckstation"* ]]; then + setSetting duckWide true + else + setSetting duckWide false + fi + if [[ "$wideToInstall" == *"Dolphin"* ]]; then + setSetting DolphinWide true + else + setSetting DolphinWide false + fi + if [[ "$wideToInstall" == *"RA-Flycast"* ]]; then + setSetting DreamcastWide true + else + setSetting DreamcastWide false + fi + if [[ "$wideToInstall" == *"Flycast"* ]]; then + setSetting DreamcastWide true + else + setSetting DreamcastWide false + fi + if [[ "$wideToInstall" == *"BeetlePSX"* ]]; then + setSetting BeetleWide true + else + setSetting BeetleWide false + fi + if [[ "$wideToInstall" == *"Xemu"* ]]; then + setSetting XemuWide true + else + setSetting XemuWide false + fi + if [[ "$wideToInstall" == *"PCSX2-QT"* ]]; then + setSetting PCSX2QTWide true + else + setSetting PCSX2QTWide false + fi + else + exit + fi + fi + + if [[ $doResetEmulators == "true" ]]; then + # Configuration that only appplies to previous users + if [ -f "$SECONDTIME" ]; then + + emuTable=() + emuTable+=(TRUE "RetroArch") + emuTable+=(TRUE "MAME") + emuTable+=(TRUE "PrimeHack") + emuTable+=(TRUE "PCSX2-Legacy") + emuTable+=(TRUE "PCSX2-QT") + emuTable+=(TRUE "RPCS3") + emuTable+=(TRUE "Citra") + emuTable+=(TRUE "Dolphin") + emuTable+=(TRUE "Duckstation") + emuTable+=(TRUE "PPSSPP") + emuTable+=(TRUE "Yuzu") + emuTable+=(TRUE "Ryujinx") + emuTable+=(TRUE "Cemu") + emuTable+=(TRUE "Xemu") + emuTable+=(TRUE "Steam ROM Manager") + emuTable+=(TRUE "EmulationStation DE") + emuTable+=(TRUE "RMG") + emuTable+=(TRUE "ares") + + + 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=$? + #Nova fix' + cat "$EMUDECKGIT/logo.ans" + echo -e "EmuDeck ${version}" + if [ $ans -eq 0 ]; then + echo "Emulators to reinstall selected: $emusToReset" + if [[ "$emusToReset" == *"RetroArch"* ]]; then + setSetting doSetupRA true + else + setSetting doSetupRA false + fi + if [[ "$emusToReset" == *"PrimeHack"* ]]; then + setSetting doSetupPrimehack true + else + setSetting doSetupPrimehack false + fi + if [[ "$emusToReset" == *"PCSX2-Legacy"* ]]; then + setSetting doSetupPCSX2 true + else + setSetting doSetupPCSX2 false + fi + if [[ "$emusToReset" == *"PCSX2-QT"* ]]; then + setSetting doSetupPCSX2QT true + else + setSetting doSetupPCSX2QT false + fi + if [[ "$emusToReset" == *"RPCS3"* ]]; then + setSetting doSetupRPCS3 true + else + setSetting doSetupRPCS3 false + fi + if [[ "$emusToReset" == *"Citra"* ]]; then + setSetting doSetupCitra true + else + setSetting doSetupCitra false + fi + if [[ "$emusToReset" == *"Dolphin"* ]]; then + setSetting doSetupDolphin true + else + setSetting doSetupDolphin false + fi + if [[ "$emusToReset" == *"Duckstation"* ]]; then + setSetting doSetupDuck true + else + setSetting doSetupDuck false + fi + if [[ "$emusToReset" == *"PPSSPP"* ]]; then + setSetting doSetupPPSSPP true + else + setSetting doSetupPPSSPP false + fi + if [[ "$emusToReset" == *"mGBA"* ]]; then + setSetting doSetupMGBA true + else + setSetting doSetupMGBA false + fi + if [[ "$emusToReset" == *"Yuzu"* ]]; then + setSetting doSetupYuzu true + else + setSetting doSetupYuzu false + fi + if [[ "$emusToReset" == *"Ryujinx"* ]]; then + setSetting doSetupRyujinx true + else + setSetting doSetupRyujinx false + fi + if [[ "$emusToReset" == *"Cemu"* ]]; then + setSetting doSetupCemu true + else + setSetting doSetupCemu false + fi + if [[ "$emusToReset" == *"Xemu"* ]]; then + setSetting doSetupXemu true + else + setSetting doSetupXemu false + fi + if [[ "$emusToReset" == *"Xenia"* ]]; then + setSetting doSetupXenia true #false until we add above + else + setSetting doSetupXenia false + fi + #if [[ "$emusToReset" == *"MelonDS"* ]]; then + # setSetting doSetupMelonDS true + #else + # setSetting doSetupRA false + #fi + if [[ "$emusToReset" == *"Steam ROM Manager"* ]]; then + setSetting doSetupSRM true + else + setSetting doSetupSRM false + fi + if [[ "$emusToReset" == *"EmulationStation DE"* ]]; then + setSetting doSetupESDE true + else + setSetting doSetupESDE false + fi + + + else + echo "" + fi + + fi + fi +else + echo "Applying Easy mode Settings" + #easy mode settings + setSetting doInstallRA true + setSetting doInstallDolphin true + setSetting doInstallPCSX2 false + setSetting doInstallPCSX2QT true + setSetting doInstallRPCS3 true + setSetting doInstallYuzu true + setSetting doInstallRyujinx false + setSetting doInstallCitra true + setSetting doInstallDuck true + setSetting doInstallCemu true + setSetting doInstallPrimeHack true + setSetting doInstallPPSSPP true + setSetting doInstallXemu true + setSetting doInstallMAME true + setSetting doInstallXenia false + setSetting doInstallMGBA false + setSetting doInstallRMG true + setSetting doInstallares true + setSetting doInstallFlycast true + #doInstallMelon=true + + setSetting doSetupRA true + setSetting doSetupPrimehack true + setSetting doSetupDolphin true + setSetting doSetupPCSX2 false + setSetting doSetupPCSX2QT true + setSetting doSetupRPCS3 true + setSetting doSetupCitra true + setSetting doSetupDuck true + setSetting doSetupYuzu true + setSetting doSetupRyujinx false + setSetting doSetupPPSSPP true + setSetting doSetupXemu true + setSetting doSetupMAME true + setSetting doSetupCemu true + setSetting doSetupXenia false + setSetting doSetupMGBA false + setSetting doSetupRMG true + setSetting doSetupares true + setSetting doSetupFlycast true + + #widescreen off by default + setSetting duckWide false + setSetting DolphinWide false + setSetting DreamcastWide false + setSetting FlycastWide false + setSetting BeetleWide false + setSetting XemuWide false + setSetting PCSX2QTWide false + +fi # end Expert if \ No newline at end of file