File: quake3

package info (click to toggle)
game-data-packager 37
  • links: PTS, VCS
  • area: contrib
  • in suites: jessie, jessie-kfreebsd
  • size: 512 kB
  • ctags: 97
  • sloc: sh: 235; makefile: 109
file content (145 lines) | stat: -rw-r--r-- 3,675 bytes parent folder | download
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
}