#!/bin/bash if [[ $# != 3 ]]; then echo "Usage: $0 " >&2 exit 1 fi PWAD="$2" MAP="$3" COMMAND=() DSDA="${HOME}/dsda-doom/dsda-0.28.3" PWADPATH="${HOME}/doom/pwads/${PWAD}" DEMOPATH="${HOME}/doom/demos/${PWAD}" VIDPATH="${HOME}/doom/fabricate/${PWAD}" MAPSTR="$(tr ' ' '-' <<< "${MAP}")" MAPFILE="${PWAD}_map${MAPSTR}" DEMONAME="${MAPFILE}.lmp" DEMO_IN="$(ls "${DEMOPATH}/${MAPFILE}"* -t | head -1)" 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" "${DEMO_IN}" "-viddump" "${VIDPATH}/${PWAD}_map${MAPSTR}.mp4") ;; "put") s3cmd put -P --content-type=binary/octet-stream "${DEMO_IN}" "s3://yrriban/doom/${MAPFILE}.lmp" exit $? ;; "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 $? ;; "check") identify "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_base.png" display "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_base.png" exit $? ;; "nmtext") LABEL="$(printf "%s\nUV-Max Demo" "$(cat -)")" convert -background transparent -fill white -font "League-Spartan-Bold" -strokewidth 10 \ -stroke "srgb(176,0,0)" -interline-spacing -10 -pointsize 64 -trim +repage -border 5 \ -bordercolor transparent -gravity NorthWest \ label:"${LABEL}" -stroke none -strokewidth 0 -annotate +8+6 "${LABEL}" \ "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_text.png" exit $? ;; "text") LABEL="$(printf "MAP%s: %s\nUV-Max Demo" "${MAPSTR}" "$(cat -)")" convert -background transparent -fill white -font "League-Spartan-Bold" -strokewidth 10 \ -stroke "srgb(176,0,0)" -interline-spacing -10 -pointsize 64 -trim +repage -border 5 \ -bordercolor transparent -gravity NorthWest \ label:"${LABEL}" -stroke none -strokewidth 0 -annotate +8+6 "${LABEL}" \ "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_text.png" exit $? ;; "tysontext") read TEXT LABEL="$(printf "MAP%s: %s\nUV-Tyson-Max Demo" "${MAPSTR}" "${TEXT}")" convert -background transparent -fill white -font "League-Spartan-Bold" -strokewidth 10 \ -stroke "srgb(176,0,0)" -interline-spacing -10 -pointsize 64 -trim +repage -border 5 \ -bordercolor transparent -gravity NorthWest \ label:"${LABEL}" -stroke none -strokewidth 0 -annotate +8+6 "${LABEL}" \ "${HOME}/doom/fabricate/${PWAD}/${PWAD}_map${MAPSTR}_text.png" exit $? ;; "thumb") convert "${VIDPATH}/${PWAD}_map${MAPSTR}_base.png" "${VIDPATH}/M_DOOM_scaled.png" -gravity NorthWest -composite "${VIDPATH}/${PWAD}_map${MAPSTR}_text.png" -gravity SouthWest -composite "${VIDPATH}/${PWAD}_map${MAPSTR}_final.png" exit $? ;; "dithumb") convert "${VIDPATH}/${PWAD}_map${MAPSTR}_base.png" "${VIDPATH}/M_DOOM_scaled.png" -gravity NorthWest -composite "${VIDPATH}/${PWAD}_map${MAPSTR}_text.png" -gravity SouthWest -composite "${HOME}/doom/fabricate/doomed_index.png" -gravity NorthEast -composite "${VIDPATH}/${PWAD}_map${MAPSTR}_final.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}" -skill 4 -warp ${MAP} \ "${IWAD[@]}" "${WADS[@]}" "${DEH[@]}" "${COMPLEVEL[@]}" "${OPTIONS[@]}" "${COMMAND[@]}"