#!/bin/bash if [[ $# != 3 ]]; then echo "Usage: $0 " >&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) 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[@]}"