summaryrefslogtreecommitdiffstats
path: root/games/jfsw_registered_data/extract-shadow-warrior.sh
diff options
context:
space:
mode:
author B. Watson2020-04-28 09:00:19 +0200
committer Willy Sudiarto Raharjo2020-05-03 03:48:50 +0200
commit7d970586c2bc09735f9214288c86d24ff687df87 (patch)
tree3b2c8817d9fec48ae59e504fb5f88bf9242df779 /games/jfsw_registered_data/extract-shadow-warrior.sh
parent0cb1f29dbb533193ec76e27ed16c4fa63ef990a5 (diff)
downloadslackbuilds-7d970586c2bc09735f9214288c86d24ff687df87.tar.gz
games/jfsw_registered_data: Use CD image as source.
Signed-off-by: B. Watson <yalhcru@gmail.com> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'games/jfsw_registered_data/extract-shadow-warrior.sh')
-rw-r--r--games/jfsw_registered_data/extract-shadow-warrior.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/games/jfsw_registered_data/extract-shadow-warrior.sh b/games/jfsw_registered_data/extract-shadow-warrior.sh
new file mode 100644
index 0000000000..40d161fe84
--- /dev/null
+++ b/games/jfsw_registered_data/extract-shadow-warrior.sh
@@ -0,0 +1,71 @@
+#!/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 7 track??.wav && rm -f track??.wav
+ rm -f $cue_out
+done