#!/usr/bin/env bash # Dialog setup: DIALOG_ITEM_HELP="" export DIALOGOPTS='--no-lines --visit-items' # Path where doom wads are stored doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null | head -1)" # Path to gzdoom. gzdoom="$(command -v gzdoom)" # Version of the accessibility mod tobyVersion="6-1" doomGames=( # Unmodified Doom with accessibility. "${gzdoom} ${doomPath}/TobyAccMod_V${tobyVersion}.pk3" "FreeDoom" # Toby accessibility mods "${gzdoom} ${doomPath}/TobyAccMod_V${tobyVersion}.pk3 ${doomPath}/TobyDoomLevels.wad" "Freedoom Toby Mod" # OperationMDK "${gzdoom} ${doomPath}/TobyAccMod_V${tobyVersion}.pk3 ${doomPath}/OpMDK.wad" "Freedoom OperationMDK" ) grepStrings=( '-E' '-e' '^[0-9]+\. ' '-e' '^"cl_run"' '-e' '^Game saved. ' '-e' '^A secret is revealed!$' '-e' '^MAP[0-9]*' '-e' '^Player was ' '-e' '^Please select a game wad \(or 0 to exit\):' '-e' '^You have no keys in your pocket!$' ) sedStrings=( '-e' 's/"cl_run" = "true"/run/' '-e' 's/"cl_run" = "false"/walk/' '-e' 's/MAP0\([1-9]\)/Map \1/' '-e' 's:.*/:Game saved. (:' ) gameOption="$(dialog --backtitle "Select your Doom!" \ --clear \ --no-tags \ --ok-label "Single Player" \ --cancel-label "Death Match" \ --extra-button \ --extra-label "co-op" \ --help-button \ --help-label "Exit" \ --menu "Please select one" 0 0 0 "${doomGames[@]}" --stdout)" buttonCode=$? case ${buttonCode} in 1) # Death match setup dialog --backtitle "Death Match" \ --clear \ --msgbox "Coming soon!" -1 -1 --stdout exit 1 ;; 2) # Exit was pressed, so exit. exit 0 ;; 3) # Co-op setup ipAddress="$(dialog --backtitle "Co-op Options" \ --clear \ --no-tags \ --ok-label "Join" \ --cancel-label "Exit" \ --extra-button \ --extra-label "Host" \ --inputbox "Enter ip or URL, required for join." -1 -1 --stdout)" buttonCode=$? [[ $buttonCode -eq 1 ]] && exit 0 if [[ $buttonCode -eq 0 ]]; then if [[ "${#ipAddress}" -lt 3 ]]; then dialog --backtitle "Co-op" --clear --msgbox "No ip address or URL given." -1 -1 --stdout exit 1 fi flags=('-join' "${ipAddress}") else # Get ip address yourIpAddress="$(curl -4s https://icanhazip.com)" players="$(dialog --backtitle "Host Co-op Game" \ --clear \ --ok-label "Next" \ --cancel-label "Exit" \ --rangebox "Select number of players. Remember to give them your IP address: ${yourIpAddress}" -1 -1 2 10 --stdout)" [[ $? -eq 1 ]] && exit 0 skillLevel="$(dialog --backtitle "Host Co-op Game" \ --clear \ --ok-label "Start" \ --cancel-label "Exit" \ --rangebox "Select difficulty. 1 easiest, 5 hardest." -1 -1 1 5 3 --stdout)" [[ $? -eq 1 ]] && exit 0 flags=( '-host' "${players}" '-skill' "${skillLevel}" '+set' 'sv_cheats' '1' '+set' 'sv_weaponsstay' '1' '+set' 'sv_respawnprotect' '1' '-extratic' '-dup' '3' ) fi exec stdbuf -oL ${gameOption} "${flags[@]}" | stdbuf -oL grep "${grepStrings[@]}" | stdbuf -oL sed "${sedStrings[@]}" | spd-say -e ;; 0) exec stdbuf -oL ${gameOption} | stdbuf -oL grep "${grepStrings[@]}" | stdbuf -oL sed "${sedStrings[@]}" | spd-say -e ;; esac exit 0