2024-04-17 03:18:57 -04:00
#!/usr/bin/env bash
pushd " $doomPath "
# Set up the pk3 and wad files
gameOption = (
" ${ doomPath } /TobyAccMod_V ${ tobyVersion } .pk3 "
2024-04-23 01:56:17 -04:00
" ${ doomPath } /PB-Toby-Compatibility-Addon.pk3 "
" ${ doomPath } /Toby-Universal-Pickup-Beacon-Prototype.pk3 "
2024-05-02 16:24:20 -04:00
" $( find /usr/share/games/ -name 'Project_Brutality-master.pk3' ) "
2024-04-17 03:18:57 -04:00
" ${ doomPath } /TobyDeathArena_V1-0.wad "
)
# Death match setup
ipAddress = " $( dialog --backtitle "Deathmatch 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 "Deathmatch" --clear --msgbox "No ip address or URL given." -1 -1 --stdout
exit 1
fi
flags = ( '-join' " ${ ipAddress } " )
else
# List of maps included:
maps = (
"1" "Com Station (2-4 players)"
"2" "Warehouse (2-4 players)"
"3" "Sector 3 (2-4 players)"
"4" "Dungeon of Doom (2-4 players)"
"5" "Ocean Fortress (2-4 players)"
"6" "Water Treatment Facility (2-4 players)"
"7" "Phobos Base Site 4 (2-4 players)"
"8" "Hangar Bay 18 (2-4 players)" )
# Array of how many players a given map supports in dialog rangebox syntax
declare -a mapPlayers = (
[ 1] = "2 4"
[ 2] = "2 4"
[ 3] = "2 4"
[ 4] = "2 4"
[ 5] = "2 4"
[ 6] = "2 4"
[ 7] = "2 4"
[ 8] = "2 4" )
map = " $( dialog --backtitle "Select Map" \
--clear \
--no-tags \
--cancel-label "Exit" \
--ok-label "Next" \
--menu "Please select one" 0 0 0 " ${ maps [@] } " --stdout) "
fraglimit = " $( dialog --backtitle "Fraglimit" \
--clear \
--ok-label "Next" \
--cancel-label "Exit" \
--rangebox "Select Fraglimit" -1 -1 1 500 20 --stdout) "
[ [ $? -eq 1 ] ] && exit 0
# Get ip address
yourIpAddress = " $( curl -4s https://icanhazip.com) "
players = " $( dialog --backtitle "Host Deathmatch Game" \
--clear \
--ok-label "Next" \
--cancel-label "Exit" \
--rangebox " Select number of players. Remember to give them your IP address: ${ yourIpAddress } " -1 -1 ${ mapPlayers [ $map ] } --stdout) "
[ [ $? -eq 1 ] ] && exit 0
skillLevel = " $( dialog --backtitle "Host Deathmatch Game" \
--clear \
--ok-label "Start" \
--cancel-label "Exit" \
--extra-button \
--extra-label "Bots Only" \
--rangebox "Select difficulty. 1 easiest, 5 hardest." -1 -1 1 5 3 --stdout) "
code = $?
[ [ $code -eq 1 ] ] && exit 0
if [ [ $code -eq 3 ] ] ; then
players = 1
dialog --backtitle "Preparing to Launch" \
--msgbox "When the game starts, press \` to open the console. Type addbot, press enter. Repeat addbot for as many bots as you would like. Press \` again to close the console." -1 -1 --stdout
fi
flags = (
'-host' " ${ players } "
'-skill' " ${ skillLevel } "
'-deathmatch'
'+set' 'sv_cheats' '1'
'+fraglimit' " $fraglimit "
'+dmflags' '16384' '+dmflags' '4' '+dmflags' '128' '+dmflags' '4096'
'+dmflags2' '512' '+dmflags2' '1024'
'-extratic' '-dup' '3'
'-warp' " $map "
)
fi
# Check for and include if present a wad. Some people may not have it.
2024-04-18 16:26:42 -04:00
if [ [ -e " ${ doomPath } /DoomMetalVol7.wad " ] ] ; then
gameOption += " DoomMetalVol7.wad"
elif [ [ -e " ${ doomPath } /DoomMetalVol6.wad " ] ] ; then
gameOption += " DoomMetalVol6.wad"
2024-04-17 03:18:57 -04:00
fi
2024-05-02 17:08:41 -04:00
# Source common variable extensions.
pbrc = " $( find " ${ 0 %/* } / " -type f -name '.projectbrutalityrc' ) "
source " ${ pbrc } "
2024-04-17 03:18:57 -04:00
# Launch the game and pipe things to be spoken through speech-dispatcher.
# This also leaves the console output intact for people who may want to read it.
exec stdbuf -oL ${ gzdoom } ${ gameOption [@] } " ${ flags [@] } " | while IFS = read -r l ; do echo " $l " | { grep " ${ grepStrings [@] } " | grep " ${ antiGrepStrings [@] } " | sed " ${ sedStrings [@] } " | spd-say -e ${ spd_module } ${ spd_pitch } ${ spd_rate } ${ spd_voice } ${ spd_volume } -- > /dev/null 2>& 1; } ; echo " $l " ; done