dcc/dcc

74 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
if [[ $# != 3 ]]; then
echo "Usage: $0 <command> <pwad> <map>" >&2
exit 1
fi
PWAD="$2"
MAP="$3"
COMMAND=()
PWADPATH="${HOME}/doom/pwads/${PWAD}"
DEMOPATH="${HOME}/doom/demos/${PWAD}"
VIDPATH="${HOME}/doom/fabricate/${PWAD}"
MAPSTR="$(tr ' ' '-' <<< "${MAP}")"
if ! [[ -e "${PWADPATH}" ]]; then
echo "PWAD ${PWAD} not found." >&2
exit 1
fi
case $1 in
"play")
;;
"record")
mkdir -p "${DEMOPATH}"
COMMAND=("-record" "${DEMOPATH}/${PWAD}_map${MAPSTR}.lmp")
;;
"fabricate")
mkdir -p "${VIDPATH}"
COMMAND=("-timedemo" "${DEMOPATH}/${PWAD}_map${MAPSTR}.lmp" "-viddump" "${VIDPATH}/${PWAD}_map${MAPSTR}.mp4")
;;
"pb")
ffplay "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}.mp4"
exit $?
;;
"ss")
convert x: +repage -crop '1280x720+0+0' -gravity center +repage "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_base.png"
exit $?
;;
*)
echo "Unknown command $1." >&2
exit 1
esac
WADS=()
readarray -d '' WADS < <(find "${PWADPATH}" -maxdepth 1 -iname '*.wad' -print0 | sort -z)
if ! [[ -z "${WADS[@]}" ]]; then
WADS=("-file" "${WADS[@]}")
# otherwise, assume it's an iwad alone.
fi
IWAD=("-iwad" "${HOME}/doom/iwads/DOOM2.WAD")
if [[ -e "${PWADPATH}/iwad" ]]; then
IWAD=("-iwad" "${HOME}/doom/iwads/$(< "${PWADPATH}/iwad").WAD")
fi
readarray -d '' DEH < <(find "${PWADPATH}" -maxdepth 1 -iname '*.deh' -print0)
if ! [[ -z "${DEH[@]}" ]]; then
DEH=("-deh" "${DEH[@]}")
fi
if ! [[ -e "${PWADPATH}/complevel" ]]; then
echo "No complevel set in PWAD dir ${PWADPATH}." >&2
exit 1
fi
COMPLEVEL=("-complevel" "$(< "${PWADPATH}/complevel")")
OPTIONS=()
if [[ -e "${PWADPATH}/options" ]]; then
OPTIONS=("-assign" "$(< "${PWADPATH}/options")")
fi
# TODO: properly split MAP into an array in case this is a UDoom wad.
dsda-doom \
-skill 4 -warp ${MAP} \
"${IWAD[@]}" "${WADS[@]}" "${DEH[@]}" "${COMPLEVEL[@]}" "${OPTIONS[@]}" "${COMMAND[@]}"