EmuDeck/functions/EmuScripts/emuDeckXemu.sh
rawdatafeel d21319055d
Fix launchers not resetting properly (#1108)
* If a user clicked reset config instead of reinstall, they would not get the latest version of the launchers. This would cause the common issue of launching into the emulator instead of directly into the game.
2024-03-11 11:57:24 -04:00

199 lines
4.5 KiB
Bash

#!/bin/bash
#variables
Xemu_emuName="Xemu-Emu"
Xemu_emuType="$emuDeckEmuTypeFlatpak"
Xemu_emuPath="app.xemu.xemu"
# https://xboxdevwiki.net/EEPROM
declare -A Xemu_languages
Xemu_languages=(
["en"]=1
["ja"]=2
["de"]=3
["fr"]=4
["es"]=5
["it"]=6
["ko"]=7
["zh"]=8
["pt"]=9)
#cleanupOlderThings
Xemu_cleanup(){
echo "NYI"
}
#Install
Xemu_install() {
installEmuFP "${Xemu_emuName}" "${Xemu_emuPath}"
}
#ApplyInitialSettings
Xemu_init() {
configEmuFP "${Xemu_emuName}" "${Xemu_emuPath}" "true"
Xemu_migrate
Xemu_setupStorage
Xemu_setEmulationFolder
Xemu_setCustomizations
#SRM_createParsers
Xemu_flushEmulatorLauncher
}
#update
Xemu_update() {
configEmuFP "${Xemu_emuName}" "${Xemu_emuPath}"
Xemu_migrate
Xemu_setupStorage
Xemu_setEmulationFolder
Xemu_setupSaves
Xemu_flushEmulatorLauncher
}
#ConfigurePaths
Xemu_setEmulationFolder(){
configFile="$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml"
bootrrom_path='bootrom_path = '
flashrom_path='flashrom_path = '
eeprom_path='eeprom_path = '
hdd_path='hdd_path = '
bootrrom_pathSetting="${bootrrom_path}""'${biosPath}/mcpx_1.0.bin'"
flashrom_pathSetting="${flashrom_path}""'${biosPath}/Complex_4627v1.03.bin'"
eeprom_pathSetting="${eeprom_path}""'${storagePath}/xemu/eeprom.bin'"
hdd_pathSetting="${hdd_path}""'${storagePath}/xemu/xbox_hdd.qcow2'"
changeLine "${bootrrom_path}" "${bootrrom_pathSetting}" "$configFile"
changeLine "${flashrom_path}" "${flashrom_pathSetting}" "$configFile"
changeLine "${eeprom_path}" "${eeprom_pathSetting}" "$configFile"
changeLine "${hdd_path}" "${hdd_pathSetting}" "$configFile"
}
#SetLanguage
Xemu_setLanguage(){
setMSG "Setting Xemu Language"
eepromPath="${storagePath}/xemu/eeprom.bin"
#TODO: call this somewhere, and input the $language from somewhere (args?)
if [[ -f "${eepromPath}" ]]; then # TODO: if not generate the eeprom?
if [ ${Xemu_languages[$language]+_} ]; then
# write the language as a byte to the file at the given offset
printf "%02x" "${Xemu_languages[$language]}" | xxd -r -p - | dd of=$eepromPath obs=1 seek=$((16#90)) conv=block,notrunc
#TODO: also do region? its rc4 encoded
fi
fi
}
#SetupSaves
Xemu_setupSaves(){
mkdir -p "$savesPath/xemu/"
ln -s "${storagePath}/xemu" "$savesPath/xemu/saves"
}
#SetupStorage
Xemu_setupStorage(){
mkdir -p "${storagePath}/xemu"
flatpak override app.xemu.xemu --filesystem="${storagePath}/xemu":rw --user
if [[ ! -f "${storagePath}/xemu/xbox_hdd.qcow2" ]]; then
mkdir -p "${storagePath}/xemu"
cd "${storagePath}/xemu"
curl -L https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip -o xbox_hdd.qcow2.zip && unzip -j xbox_hdd.qcow2.zip && rm -rf xbox_hdd.qcow2.zip
fi
}
#WipeSettings
Xemu_wipe() {
rm -rf "$HOME/.var/app/$Xemu_emuPath"
# prob not cause roms are here
}
#Uninstall
Xemu_uninstall() {
flatpak uninstall "$Xemu_emuPath" --user -y
}
#setABXYstyle
Xemu_setABXYstyle(){
echo "NYI"
}
#Migrate
Xemu_migrate(){
if [ ! -f "$storagePath/xemu/xbox_hdd.qcow2" ] && [ -d "$HOME/.var/app/app.xemu.xemu" ]; then
echo "xbox hdd does not exist in storagepath."
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
}
#WideScreenOn
Xemu_wideScreenOn(){
configFile="$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml"
fit='fit = '
fitSetting="${fit}'scale_16_9'"
changeLine "${fit}" "${fitSetting}" "$configFile"
}
#WideScreenOff
Xemu_wideScreenOff(){
configFile="$HOME/.var/app/app.xemu.xemu/data/xemu/xemu/xemu.toml"
fit='fit = '
fitSetting="${fit}'scale_4_3'"
changeLine "${fit}" "${fitSetting}" "$configFile"
}
#BezelOn
Xemu_bezelOn(){
echo "NYI"
}
#BezelOff
Xemu_bezelOff(){
echo "NYI"
}
#finalExec - Extra stuff
Xemu_finalize(){
echo "NYI"
}
Xemu_IsInstalled(){
isFpInstalled "$Xemu_emuPath"
}
Xemu_resetConfig(){
Xemu_init &>/dev/null && echo "true" || echo "false"
}
Xemu_setCustomizations(){
if [ "$arClassic3D" == 169 ]; then
Xemu_wideScreenOn
else
Xemu_wideScreenOff
fi
}
Xemu_setResolution(){
$xemuResolution
echo "NYI"
}
Xemu_flushEmulatorLauncher(){
flushEmulatorLaunchers "xemu-emu"
}