diff --git a/cemutil.sh b/cemutil.sh index 9325ef4..5f2039c 100755 --- a/cemutil.sh +++ b/cemutil.sh @@ -4,8 +4,25 @@ if [ -z "$DISPLAY" ]; then export DISPLAY=:0.0 fi +# help function: +function printhelp { + echo "usage examples: Download latest public cemu + cemuhook and install to ~/.cemu (default):" + echo "./cemutil.sh -a" + echo "Use local zips and install to ~/Documents/cemu:" + echo "./cemutil.sh -c cemu.zip -h cemuhook.zip -i ~/Documents/cemu/" + exit 1 +} + +function downloadlatest { + echo "Downloading latest cemu" + wget -q --show-progress -O cemutemp.zip $(curl -s http://cemu.info |grep .zip |awk -F '"' {'print $2'}) + echo "Downloading latest cemuhook" + wget -q --show-progress -O cemuhooktemp.zip $(curl -s https://cemuhook.sshnuke.net |grep .zip |awk -F '"' NR==2{'print $2'}) + return +} + #Check installed software -declare -a reqsw=("wine" "bsdtar" "glxinfo") +declare -a reqsw=("wine" "bsdtar" "unzip" "glxinfo" "curl" "wget") for i in "${reqsw[@]}" do if ! [ -x "$(command -v $i)" ]; then @@ -14,42 +31,92 @@ do fi done -if ! $(glxinfo | grep -q "18.3"); then - if ! $(glxinfo | grep -q "18.2"); then +if ! $(glxinfo | grep -q "Mesa 18.3"); then + if ! $(glxinfo | grep -q "Mesa 18.2"); then echo "You must install at least Mesa 18.2.0" exit 1 fi fi -#Check that args were used, otherwise print info -if [[ $# -eq 0 ]] ; then - echo "Usage: cemutil.sh cemu.zip cemuhook.zip installdir(optional)" - exit 0 -else - if [ ! -f "$1" ]; then - echo "cemu zip doesn't exist" - exit 1 - fi - if [ ! -f "$2" ]; then - echo "cemuhook zip doesn't exist" +if ! $(glxinfo | grep -q "LLVM 8"); then + if ! $(glxinfo | grep -q "LLVM 7"); then + echo "You must install Mesa built with at least LLVM 7" exit 1 fi fi -# Make scripts using installdir if applicable -if [[ "$3" != "" ]]; then - INSTDIR="$3" -else - INSTDIR=$HOME/.cemu +if ! $(glxinfo | grep -q "4.5 (Compat"); then + echo "Your hardware doesn't support the required OpenGL version." + echo "You may attempt using MESA_GL_VERSION_OVERRIDE=4.4COMPAT in the LaunchCEMU script." + echo "This isn't officially supported, and may cause heavy glitches or not work. Proceeding as usual..." fi -mkdir -p $INSTDIR -bsdtar -xf "$1" -s'|[^/]*/||' -C $INSTDIR -unzip -q -o "$2" -d $INSTDIR +#Check for args +if [[ ! $@ =~ ^\-.+ ]] +then + printhelp; +fi +#Handle args +while getopts ":c:h:ai:" opt; do + case ${opt} in + c ) + cemuzip=$OPTARG + if [ ! -f "$cemuzip" ]; then + echo "cemu zip doesn't exist" + exit 1 + fi + ;; + h ) + cemuhookzip=$OPTARG + if [ ! -f "$cemuhookzip" ]; then + echo "cemuhook zip doesn't exist" + exit 1 + fi + ;; + a ) + downloadlatest + ;; + i ) + instdir=$OPTARG + ;; + \? ) + printhelp + ;; + : ) + echo "Invalid option: $OPTARG requires an argument" 1>&2 + printhelp + ;; + esac +done +shift $((OPTIND -1)) + +#Set opts if unset +if [[ "$instdir" == "" ]]; then + instdir=$HOME/.cemutemp +fi +if [[ "$cemuzip" == "" ]]; then + cemuzip=cemutemp.zip +fi +if [[ "$cemuhookzip" == "" ]]; then + cemuhookzip=cemuhooktemp.zip +fi + +#Extract zips +echo "Extracting zips" +mkdir -p $instdir +bsdtar -xf "$cemuzip" -s'|[^/]*/||' -C $instdir +unzip -q -o "$cemuhookzip" -d $instdir +#Delete downloaded zips if applicable +if [ -f "cemutemp.zip" ]; then + rm -rf cemutemp.zip + rm -rf cemuhooktemp.zip +fi + +#Create launch scripts cat > LaunchCEMU << EOF1 #!/bin/bash -export WINEPREFIX="$(realpath $INSTDIR)/wine" +export WINEPREFIX="$(realpath $instdir)/wine" export WINEDLLOVERRIDES="mscoree=;mshtml=;dbghelp.dll=n,b" if [ -z `winetricks list-installed|grep vcrun2015` ]; then @@ -59,14 +126,14 @@ if [ -z `winetricks list-installed|grep vcrun2015` ]; then winetricks -q vcrun2015 winetricks settings win7 fi -cd $(realpath $INSTDIR) -mesa_glthread=true vblank_mode=0 WINEESYNC=0 wine $(realpath $INSTDIR)/Cemu.exe "\$@" +cd $(realpath $instdir) +mesa_glthread=true vblank_mode=0 WINEESYNC=0 wine $(realpath $instdir)/Cemu.exe "\$@" EOF1 chmod +x LaunchCEMU cat > LaunchCEMUgcn3BOTW << EOF1 #!/bin/bash -export WINEPREFIX="$(realpath $INSTDIR)/wine" +export WINEPREFIX="$(realpath $instdir)/wine" export WINEDLLOVERRIDES="mscoree=;mshtml=;dbghelp.dll=n,b" if [ -z `winetricks list-installed|grep vcrun2015` ]; then @@ -76,12 +143,12 @@ if [ -z `winetricks list-installed|grep vcrun2015` ]; then winetricks -q vcrun2015 winetricks settings win7 fi -cd $(realpath $INSTDIR) -R600_DEBUG=nohyperz mesa_glthread=true vblank_mode=0 WINEESYNC=0 wine $(realpath $INSTDIR)/Cemu.exe "\$@" +cd $(realpath $instdir) +R600_DEBUG=nohyperz mesa_glthread=true vblank_mode=0 WINEESYNC=0 wine $(realpath $instdir)/Cemu.exe "\$@" EOF1 chmod +x LaunchCEMUgcn3BOTW -echo "Successfully installed to $(realpath $INSTDIR)" +echo "Successfully installed to $(realpath $instdir)" echo "You may now run CEMU with CEMULaunch written in this directory" echo "You may place CEMULaunch anywhere, and even pass arguments to it just like Cemu.exe on Windows" echo "Note: When launching there may be a WxWidgets error. Press Cancel; this is normal from cemuhook"