1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
# vim:set ft=sh:
SHORTNAME=quake3
LONGNAME="Quake III Arena"
POINTFILE=linuxq3apoint-1.32b-3.x86.run
Q3MIRRORFILE=/etc/game-data-packager/quake3-mirrors
IDMIRRORFILE=/etc/game-data-packager/idstuff-mirrors
if [ "$0" = "./game-data-packager" ]; then
Q3MIRRORFILE="./etc/quake3-mirrors"
IDMIRRORFILE="./etc/idstuff-mirrors"
fi
quake3_usage() {
echo "quake3 game arguments:"
printf "\tmountpoint - Quake III Arena CD mount-point or baseq3/pak0.pk3 filename\n"
printf "\tpoint release - ${POINTFILE}\n"
}
get_mirror () {
(
if [ -s "${Q3MIRRORFILE}" ]; then
grep -v '^#' "${Q3MIRRORFILE}"
fi
grep -v '^#' "${IDMIRRORFILE}" | sed 's#$#/quake3/linux#'
) | sort -R | head -n1
}
parse_args() {
if [ $# -eq 1 ] && [ -f ${IDMIRRORFILE} ]; then
CDROM="$1"
POINT="false"
elif [ $# -eq 2 ]; then
CDROM="$1"
POINT="$2"
else
usage >&2
quake3_usage >&2
exit 1
fi
}
fetch_point_release() {
if [ "x$POINT" != xfalse ]; then
cp -p "$POINT" "$WORKDIR/$POINTFILE"
return
fi
if ! mirror=`get_mirror`; then
echo "${POINTFILE} or a download mirror in $Q3MIRRORFILE or $IDMIRRORFILE is required" >&2
exit 1
fi
wget -O $WORKDIR/$POINTFILE $mirror/$POINTFILE
}
find_pak0() {
# identify where pak0.pk3 is (underneath the CD-ROM mount-point)
# and set the relevant variable
if [ -f "$CDROM" ] && [ "${CDROM%pak0.pk3}" != "$CDROM" ]; then
PAKFILE="$CDROM"
elif [ -f "$CDROM/Quake3/baseq3/pak0.pk3" ]; then
PAKFILE="$CDROM/Quake3/baseq3/pak0.pk3"
elif [ -f "$CDROM/baseq3/pak0.pk3" ]; then
PAKFILE="$CDROM/baseq3/pak0.pk3"
else
PAKFILE=`find "$CDROM" -type f -name "pak0.pk3" | head -1`
fi
if [ "" = "$PAKFILE" ]; then
echo "couldn't find pak0.pk3 under $CDROM." >&2
exit 1
fi
cp -p "$PAKFILE" "$WORKDIR/pak0.pk3"
}
# TODO: roll a more advanced check_sums into the game-package-shared
check_sums() {
POINTMD5=c71fdddccb20e8fc393d846e9c61d685
SUM=`md5sum "$WORKDIR/$POINTFILE" | cut -d' ' -f1`
if [ "$SUM" != "$POINTMD5" ]; then
echo "error: $POINTFILE sum ($SUM) does not match expected sum" >&2
echo "($POINTMD5)" >&2
exit 1
fi
PAK0MD5=1197ca3df1e65f3c380f8abc10ca43bf
SUM=`md5sum $WORKDIR/pak0.pk3 | cut -d' ' -f1`
if [ "$SUM" != "$PAK0MD5" ]; then
echo "error: pak0.pk3 sum ($SUM) does not match expected sum" >&2
echo "($PAK0MD5)" >&2
exit 1
fi
}
unpack_point() {
mkdir "$WORKDIR/unpacked"
(
cd "$WORKDIR/unpacked"
dd if=$WORKDIR/$POINTFILE ibs=1 obs=1024 skip=8251 |
tar zxf -
)
# now interested in $WORKDIR/unpacked/baseq3/pak[1-8].pk3
}
DEBBASE="${SHORTNAME}-data_${GAME_PACKAGE_VERSION}_all.deb"
BASEQ3=/usr/share/games/quake3/baseq3
DEB="$DATADIR/$DEBBASE"
go() {
parse_args $*
fetch_point_release
find_pak0
check_sums
unpack_point
DEST="${BASEQ3#/}"
# smcv FIXME: copied from lib/doom-common
if [ "" = "$OUTDIR" ]; then
OUTFILE="$WORKDIR/out.deb"
else
OUTFILE=`unravel "$OUTDIR"`"/$DEBBASE"
fi
# smcv FIXME: end
cp -p "$DEB" "$OUTFILE"
slipstream "$OUTFILE" "$DEST" pak0.pk3 \
unpacked/baseq3/pak1.pk3 \
unpacked/baseq3/pak2.pk3 \
unpacked/baseq3/pak3.pk3 \
unpacked/baseq3/pak4.pk3 \
unpacked/baseq3/pak5.pk3 \
unpacked/baseq3/pak6.pk3 \
unpacked/baseq3/pak7.pk3 \
unpacked/baseq3/pak8.pk3
rm -fr $WORKDIR/unpacked
rm -f $WORKDIR/pak0.pk3 $WORKDIR/linuxq3apoint-1.32b-3.x86.run
}
|