Last active
September 3, 2026 04:49
-
-
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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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