Skip to content

Instantly share code, notes, and snippets.

@skorotkiewicz
Last active September 3, 2026 04:49
Show Gist options
  • Select an option

  • Save skorotkiewicz/779b096516632d333aec2e12ce0befcf to your computer and use it in GitHub Desktop.

Select an option

Save skorotkiewicz/779b096516632d333aec2e12ce0befcf to your computer and use it in GitHub Desktop.
Run Sim Copter on Arch Linux on Wayland (Press ESC after each run, otherwise you see only black, seriously just press ESC).
#!/usr/bin/env bash
set -euo pipefail
GAME_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GAME_EXE="$GAME_DIR/SimCopter.exe"
export WINEPREFIX="$HOME/.local/share/wineprefixes/simcopter"
DXWRAPPER_VERSION="v1.7.8400.25"
DXWRAPPER_URL="https://github.com/elishacloud/dxwrapper/releases/download/${DXWRAPPER_VERSION}/dxwrapper.zip"
die() {
echo "ERROR: $*" >&2
exit 1
}
[[ -f "$GAME_EXE" ]] || die "Put this script next to SimCopter.exe"
# Dependencies
needed=(wine gamescope wget unzip)
missing=()
for pkg in "${needed[@]}"; do
pacman -Q "$pkg" &>/dev/null || missing+=("$pkg")
done
if ((${#missing[@]})); then
sudo pacman -S --needed "${missing[@]}"
fi
# 32-bit graphics libs
if lspci 2>/dev/null | grep -qi nvidia; then
pacman -Q lib32-nvidia-utils &>/dev/null ||
sudo pacman -S --needed lib32-nvidia-utils
else
pacman -Q lib32-mesa &>/dev/null ||
sudo pacman -S --needed lib32-mesa
fi
# Wine prefix — only first run
if [[ ! -d "$WINEPREFIX" ]]; then
echo "==> Creating Wine prefix..."
mkdir -p "$(dirname "$WINEPREFIX")"
wineboot -u
# Works for me...
wine reg add \
'HKEY_CURRENT_USER\Software\Wine\Drivers' \
/v Graphics /t REG_SZ /d x11 /f >/dev/null
wine reg add \
'HKEY_CURRENT_USER\Software\Wine\X11 Driver' \
/v UseEGL /t REG_SZ /d N /f >/dev/null
fi
# dxwrapper — only download if missing
if [[ ! -f "$GAME_DIR/ddraw.dll" ||
! -f "$GAME_DIR/dxwrapper.dll" ]]; then
echo "==> Installing dxwrapper..."
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
wget -q --show-progress \
"$DXWRAPPER_URL" \
-O "$TMP/dxwrapper.zip"
unzip -q "$TMP/dxwrapper.zip" -d "$TMP/dxwrapper"
cp "$TMP/dxwrapper/Stub/ddraw.dll" "$GAME_DIR/"
cp "$TMP/dxwrapper/dxwrapper.dll" "$GAME_DIR/"
rm -rf "$TMP"
trap - EXIT
fi
# Known-good dxwrapper config
cat > "$GAME_DIR/dxwrapper.ini" <<'EOF'
[Compatibility]
Dd7to9 = 1
[Dd7to9]
DdrawUseNativeResolution = 0
DdrawMaintainAspectRatio = 0
DdrawIntegerScalingClamp = 0
[d3d9]
LimitPerFrameFPS = 29.97
EnableWindowMode = 0
FullscreenWindowMode = 0
EOF
# RUN :3
cd "$GAME_DIR"
echo
echo " Starting SimCopter..."
echo " Black intro? Press ESC."
echo
SDL_VIDEODRIVER=x11 \
gamescope --backend sdl \
-w 640 -h 480 \
-W 1920 -H 1080 \
-S fit -f \
-- env \
WINEPREFIX="$WINEPREFIX" \
WINEDLLOVERRIDES="ddraw=n" \
wine SimCopter.exe
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment