blob: 2dc2b4e667597e7336ef86ae546aace47a2c8af9 (
plain) (
tree)
|
|
#!/bin/sh
# extract-shadow-warrior.sh, by B. Watson (yalhcru@gmail.com).
# Licensed under the WTFPL: Do WTF you want with this. See
# http://www.wtfpl.net/txt/copying/ for details.
# This file is part of the SlackBuilds.org jfsw_registered_data build,
# but you're welcome to use it for any other purpose (that's why I made
# it a standalone script).
# Extracts the game data from bin/cue of Shadow Warrior for DOS, as found
# in the zip file from https://archive.org/details/ShadowWarriorUSA. The
# tool that handles bin/cue files is bchunk, but sadly it doesn't properly
# handle bin/cue where each track is in a separate bin file... so we
# help it along by chopping up the .cue file.
# We expect a single argument: the name of the .cue file. Output will be
# a set of .iso and .wav files in the current directory, named track01.iso
# and track02.wav through track14.wav, plus a set of converted track02.ogg
# through track14.ogg, if the oggenc command is found on $PATH.
# When we're finished, the files will take up around 900MB of space,
# so plan accordingly.
# Note: converting the same wav file to ogg with oggenc multiple times,
# does not give identical ogg files. It *does* however give the same
# sized file every time (down to the byte). Really only matters if you're
# debugging this script, I guess.
if [ "$*" = "" ] || [ ! -e "$1" ]; then
echo "Usage: $( basename $0 ) cue-file.cue" 1>&2
exit 1
fi
# need this to let "read" read the initial spaces in the .cue file lines
IFS=""
# save old stdout
exec 3>&1
# clean up any turds from previous runs
rm -f tmpcue??.cue
# split up each track entry in the input .cue file into a separate .cue
# file containing only that track.
count=1
cat "$1" | while read line; do
case "$line" in
FILE*) cue_out="tmpcue$( printf '%02d' $count ).cue"
exec > "$cue_out"
count="$( expr $count + 1 )"
;;
esac
echo "$line"
done
# restore old stdout
exec 1>&3
# now convert each file to .iso or .wav (bchunk is smart enough
# to know which is which). if a file is a .wav, we'll convert it
# to .ogg and delete it, so we don't end up chewing up 1.3GB of
# disk space all at once.
for cue_out in tmpcue??.cue; do
rm -f track??.wav
binfile="$( head -1 "$cue_out" | cut -d\" -f2 )"
bchunk -w "$binfile" "$cue_out" track
[ -e track??.wav ] && oggenc -q ${OGGQUAL:-7} track??.wav && rm -f track??.wav
rm -f $cue_out
done
|