-
-
Save reneklacan/7825b82723bf0534cbd2eae014e121ca to your computer and use it in GitHub Desktop.
#!/bin/bash | |
set -ex | |
STEAM_DIR=/home/$USER/.steam/steam/steamapps | |
AOE4_DIR=$STEAM_DIR/compatdata/1466860 | |
AOE4_WIN_DIR=$AOE4_DIR/pfx/drive_c/windows | |
AOE4_WIN_SYS32_DIR=$AOE4_WIN_DIR/system32 | |
AOE4_WIN_SYS64_DIR=$AOE4_WIN_DIR/syswow64 | |
function check_deps() { | |
which wget || (echo "wget is required (on Ubuntu you can install it with 'sudo apt-get install wget')" && exit 1) | |
which cabextract || (echo "cabextract is required (on Ubuntu you can install it with 'sudo apt-get install cabextract')" && exit 1) | |
} | |
function cleanup() { | |
local arch=$1 | |
rm -f vc_redist.$arch.exe | |
rm -rf 0 a{0..11} u{0..31} | |
} | |
function backup() { | |
local timestamp=$(date +%s) | |
mv ucrtbase.dll ucrtbase.dll.bak-$timestamp | |
mv concrt140.dll concrt140.dll.bak-$timestamp | |
mv msvcp140.dll msvcp140.dll.bak-$timestamp | |
mv vcamp140.dll vcamp140.dll.bak-$timestamp | |
mv vccorlib140.dll vccorlib140.dll.bak-$timestamp | |
mv vcomp140.dll vcomp140.dll.bak-$timestamp | |
mv vcruntime140.dll vcruntime140.dll.bak-$timestamp | |
} | |
function download_and_replace() { | |
local arch=$1 | |
wget https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.$arch.exe | |
cabextract vc_redist.$arch.exe | |
cabextract a10 | |
} | |
function replace_dlls() { | |
local dir=$1 | |
local arch=$2 | |
cd $dir | |
backup | |
cleanup $arch | |
download_and_replace $arch | |
cleanup $arch | |
} | |
check_deps | |
replace_dlls $AOE4_WIN_SYS32_DIR x64 | |
replace_dlls $AOE4_WIN_SYS64_DIR x86 |
Linux noob here (literally, day #3 of Kubuntu here). I ran the code with the set -ex
to set -x
tweak, and now AOE doesn't even open. Tried uninstalling and reinstalling, but no change, and now none of my games open. Anyone else run into this issue and solve it?
FYI this script does not account for the following scenarios:
- If your games are stored on another drive, as in outside your home folder. I myself have two additional storage drives mounted elsewhere, since well, games are big and need to put them different places.
- Once adapted to other locations, this script is also intolerant for spaces in parent folders where a Steam Library could be housed at. Like "/mnt/ssd-1tb/Steam Library" kind of deal.
I'm not sure what the best solution to #1 is, however for #2, double quotes are needed to surround the variables in the early parts declaring paths and sub-paths, and then also for the cd $dir step, should be cd "$dir", and the replace_dlls step needs double quotes around both 32 and 64 bit dirs.
The double quotes may be needed for arch too, but I could be wrong there.
I had to manually adapt the script for my situation and hopefully this helps someone else in the future.
Either way though, thanks for this script! \o/
For the people who have steam
installed by snap
, change:
STEAM_DIR=/home/$USER/.steam/steam/steamapps
to:
STEAM_DIR=/home/$USER/snap/steam/common/.local/share/Steam/steamapps
After this script with GE Proton still had the sync issue, it let me get an hour into the match before that tho. I was able to play through shorter matches no problem.
I've modified this to be a generic version of this to work with most other games by passing the APP ID. Also collected some additional examples for users so they don't have to edit the file directly (they still can though)
https://gist.github.com/CrackerJackMack/374f49b4ad98e14c0a7e8bbcac668d63
Distrobox is great on the steam deck.
In the script edit:
in this line on the top:
You should have something like that:
install Distrobox and run the script from it.