2014-05-09 12:33:33 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
DEFAULTDEST="/usr/share/games/stratagus/wargus"
|
|
|
|
|
|
|
|
SOURCE="$1"
|
|
|
|
DEST="${2:-$DEFAULTDEST}"
|
|
|
|
WARTOOL="${WARTOOL:-wartool}"
|
|
|
|
|
|
|
|
SELF="$( basename "$0" )"
|
|
|
|
if [ -z "$SOURCE" ]; then
|
|
|
|
cat <<EOF
|
|
|
|
$SELF - extract game data files from Warcraft II
|
|
|
|
|
|
|
|
Usage: $SELF [source] <dest>
|
|
|
|
|
|
|
|
source is one of:
|
|
|
|
|
|
|
|
- A block device node or symlink to one (e.g. /dev/cdrom). The
|
|
|
|
device must contain a Warcraft II CD-ROM.
|
|
|
|
|
|
|
|
- An ISO image of the Warcraft II CD-ROM.
|
|
|
|
|
|
|
|
- A directory containing an installed copy of Warcraft II.
|
|
|
|
|
|
|
|
- A zip, rar, 7z, or tar.(gz|xz|bz2) archive containing either the
|
|
|
|
contents of the Warcraft II CD-ROM or an installed copy of the game
|
|
|
|
(but NOT an archive containing an ISO image).
|
|
|
|
|
|
|
|
By "Warcraft II", we mean the original DOS version (or the expansion
|
|
|
|
pack for the DOS version), *not* the Battle.net edition. The expansion
|
|
|
|
is probably preferable (has more maps), but either one will work.
|
|
|
|
|
|
|
|
Filename case inside archives is ignored.
|
|
|
|
|
|
|
|
dest is the optional directory to output extracted data to. If not
|
|
|
|
given, $DEFAULTDEST is used.
|
|
|
|
|
|
|
|
Since this script wants to do things like mount CDs and write to
|
|
|
|
/usr/share, it generally needs to be run as root.
|
|
|
|
|
|
|
|
For extracting 7z or rar archives, you will need p7zip or unrar.
|
|
|
|
|
|
|
|
This script was written by B. Watson for the SlackBuilds.org
|
|
|
|
project and is released under the terms of the WTFPL. See
|
|
|
|
http://www.wtfpl.net/txt/copying/ for details.
|
|
|
|
EOF
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# try to figure out what $SOURCE is. It can be the CD-ROM, an ISO
|
|
|
|
# image, an installed directory, or a zip/rar/7z/tar/etc archive
|
|
|
|
# of an installed dir or the contents of the CD.
|
|
|
|
|
|
|
|
# NOT supported: archives containing the .iso image.
|
|
|
|
|
|
|
|
SOURCE=$( readlink -q -n -f "$SOURCE" )
|
|
|
|
TYPE=$( file "$SOURCE" )
|
|
|
|
|
|
|
|
SRCDIR=$( mktemp -d -t extract-warcraft2.XXXXXX )
|
|
|
|
|
|
|
|
case "$TYPE" in
|
|
|
|
*directory*) rm -rf "$SRCDIR" ; SRCDIR="$SOURCE" ; KEEPSRC="yes" ;;
|
|
|
|
|
|
|
|
*block*special*)
|
|
|
|
mount "$SOURCE" "$SRCDIR"
|
|
|
|
MOUNTED="$SRCDIR"
|
|
|
|
ROPT="-r"
|
|
|
|
;;
|
|
|
|
|
|
|
|
*ISO*9660*data*)
|
|
|
|
mount -o loop "$SOURCE" "$SRCDIR"
|
|
|
|
MOUNTED="$SRCDIR"
|
|
|
|
;;
|
|
|
|
|
|
|
|
*7-zip*)
|
|
|
|
( cd "$SRCDIR" && 7za x "$SOURCE" )
|
|
|
|
;;
|
|
|
|
|
|
|
|
*RAR*arch*)
|
|
|
|
( cd "$SRCDIR" && unrar x "$SOURCE" )
|
|
|
|
;;
|
|
|
|
|
|
|
|
*Zip*arch*)
|
|
|
|
( cd "$SRCDIR" && unzip "$SOURCE" )
|
|
|
|
;;
|
|
|
|
|
|
|
|
*gzip*|*bzip2*|*XZ*)
|
|
|
|
( cd "$SRCDIR" && tar xvf "$SOURCE" )
|
|
|
|
;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
echo "Can't figure out what '$SOURCE' is, aborting" 1>&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# now find the data dir, if it exists
|
|
|
|
DATADIR="$SRCDIR"
|
|
|
|
for i in data DATA Data; do
|
|
|
|
if [ -d "$SRCDIR/$i" ]; then
|
|
|
|
DATADIR="$SRCDIR/$i"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# sanity check the data dir we think we found
|
|
|
|
for i in REZDAT rezdat Rezdat; do
|
|
|
|
if [ -e "$DATADIR/$i.war" ] ||
|
|
|
|
[ -e "$DATADIR/$i.WAR" ] ||
|
|
|
|
[ -e "$DATADIR/$i.War" ]
|
|
|
|
then
|
|
|
|
FOUND=yes
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ "$FOUND" != "yes" ]; then
|
|
|
|
echo "Can't find rezdat.war in $DATADIR, aborting" 1>&2 &&
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
mkdir -p $DEST
|
2015-05-11 06:58:22 +02:00
|
|
|
# 20150510 bkw: wartool lost its -m option since last update.
|
|
|
|
"$WARTOOL" -v $ROPT "$DATADIR" "$DEST"
|
2014-05-09 12:33:33 +02:00
|
|
|
|
|
|
|
if [ "$MOUNTED" != "" ]; then
|
|
|
|
umount "$MOUNTED"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$KEEPSRC" != "yes" ]; then
|
|
|
|
rm -rf "$SRCDIR"
|
|
|
|
fi
|