#!/bin/sh

# script to print (or copy) resources used in an idTech2 .bsp level
# primarily for Quake/Half-Life but can easily be adapted to other things...
# -- eukara <marco@icculus.org>

if [ $# -lt 1 ]
then
    echo Usage: `basename $0` mapname.bsp [output dir] >&2
    exit 2
fi

SKY=$(grep -hr --binary-files=text "\"skyname\"" "$1"  | cut -f 4 -d '"' | tr '[:upper:]' '[:lower:]')
MODELS=$(grep -hr --binary-files=text "\.mdl" "$1"  | cut -f 4 -d '"' | tr '[:upper:]' '[:lower:]' | sort | uniq)
SPRITES=$(grep -hr --binary-files=text "\.spr" "$1"  | cut -f 4 -d '"' | tr '[:upper:]' '[:lower:]' | sort | uniq)
SOUNDS=$(grep -hr --binary-files=text "\.wav" "$1"  | cut -f 4 -d '"' | tr '[:upper:]' '[:lower:]' | sort | uniq)

# Quake II
NOISE=$(grep -hr --binary-files=text "\"noise\"" "$1"  | cut -f 4 -d '"' | tr '[:upper:]' '[:lower:]' | sort | uniq)

if [ "$SKY" != "" ]; then
	echo gfx/env/"$SKY"bk.tga
	echo gfx/env/"$SKY"dn.tga
	echo gfx/env/"$SKY"ft.tga
	echo gfx/env/"$SKY"lf.tga
	echo gfx/env/"$SKY"rt.tga
	echo gfx/env/"$SKY"up.tga
fi

if [ "$MODELS" != "" ]; then
	echo "$MODELS"
fi

if [ "$SPRITES" != "" ]; then
	echo "$SPRITES"
fi

if [ "$SOUNDS" != "" ]; then
	echo "$SOUNDS"
fi

if [ "$NOISE" != "" ]; then
	echo "$NOISE"
fi

if [ "$2" != "" ]; then
	OUTDIR="$2"
	mkdir -p "$OUTDIR"/maps

	cp ./"$1" ./"$OUTDIR"/maps/"$1"

	if [ "$SKY" != "" ]; then
		echo "$SKY" | while read C_IN; do
			mkdir -p `dirname "./$OUTDIR/gfx/env/$C_IN"`
			cp ../gfx/env/"$C_IN"bk.tga "./$OUTDIR/gfx/env/$C_IN"bk.tga
			cp ../gfx/env/"$C_IN"dn.tga "./$OUTDIR/gfx/env/$C_IN"dn.tga
			cp ../gfx/env/"$C_IN"ft.tga "./$OUTDIR/gfx/env/$C_IN"ft.tga
			cp ../gfx/env/"$C_IN"lf.tga "./$OUTDIR/gfx/env/$C_IN"lf.tga
			cp ../gfx/env/"$C_IN"rt.tga "./$OUTDIR/gfx/env/$C_IN"rt.tga
			cp ../gfx/env/"$C_IN"up.tga "./$OUTDIR/gfx/env/$C_IN"up.tga
		done;
	fi

	if [ "$MODELS" != "" ]; then
		echo "$MODELS" | while read C_IN; do
			mkdir -p `dirname "./$OUTDIR/$C_IN"`
			cp ../"$C_IN" "./$OUTDIR/$C_IN"
		done;
	fi

	if [ "$SPRITES" != "" ]; then
		echo "$SPRITES" | while read C_IN; do
			mkdir -p `dirname "./$OUTDIR/$C_IN"`
			cp ../"$C_IN" "./$OUTDIR/$C_IN"
		done;
	fi

	if [ "$SOUNDS" != "" ]; then
		echo "$SOUNDS" | while read C_IN; do
			mkdir -p `dirname "./$OUTDIR/sound/$C_IN"`
			cp ../sound/"$C_IN" "./$OUTDIR/sound/$C_IN"
		done;
	fi

	if [ "$NOISE" != "" ]; then
		echo "$NOISE" | while read C_IN; do
			mkdir -p `dirname "./$OUTDIR/sound/$C_IN".wav`
			cp ../sound/"$C_IN".wav "./$OUTDIR/sound/$C_IN".wav
		done;
	fi

	strings "$1" | grep "./" | cut -f 2 -d '"' | grep "./" | while read C_IN; do
		WAL=textures/"$C_IN".wal
		if test -f ../"$WAL"; then
			mkdir -p `dirname "./$OUTDIR/$WAL"`
    		cp ../"$WAL" ./$OUTDIR/"$WAL"
		fi
	done;
fi
