-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
install_from_cd.sh
executable file
·117 lines (100 loc) · 3.13 KB
/
install_from_cd.sh
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
#!/bin/sh
# builds a pk3 file that's alphabetically sorted
mk_pk3()
{
tree -fi > ./build_contents.txt
sed -i '/build_contents/d' ./build_contents.txt
sed -i '/directories,/d' ./build_contents.txt
zip -0 "$1".pk3 -@ < ./build_contents.txt
rm ./build_contents.txt
mv "$1".pk3 ../"$1".pk3
}
# grabs a patch .zip from archive.org and saves it as a pk3
grab_patch()
{
wget -nc -O ./pak$2.pk4 http://archive.org/download/hl_shareware_data/valve/$1.zip
}
SCRPATH="$( cd "$( dirname $(readlink -nf $0) )" && pwd )"
OUTPK3DIR="pak1_retail.pk3dir"
if ! [ -x "$(command -v unshield)" ]; then
printf "Error: unshield is not installed.\n" >&2
exit 1
fi
if ! [ -x "$(command -v rsync)" ]; then
printf "Error: rsync is not installed.\n" >&2
exit 1
fi
if ! [ $# -gt 0 ]; then
printf "Path to MOUNTED CD-ROM folder, e.g. /mnt/cdrom:\n"
read CDROM_PATH
else
CDROM_PATH="$1"
fi
if ! [ -f "$CDROM_PATH"/data1.cab ]; then
printf "Error: data1.cab not found in $CDROM_PATH.\n" >&2
exit 1
fi
# Check if we need to do anything
if ! [ -f "$SCRPATH/pak00_cd.pak" ] || ! [ -f "$SCRPATH/pak01_cd.pk3" ]; then
# Grab the cabinet data off the CD
mkdir -p ./tmp
unshield -d ./tmp x "$CDROM_PATH"/data1.cab
# Let's shove them all into a convenient .pk3dir
mkdir -p ./$OUTPK3DIR
mv -v ./tmp/Half-Life_PAK_File/valve/pak0.pak ./pak00_cd.pak
rsync -av ./tmp/Half-Life_Program_Files/valve/ ./$OUTPK3DIR/
mv -v ./tmp/Half-Life_Program_Files/media ./$OUTPK3DIR/media
mv -v ./tmp/Half-Life_Program_Files/logos ./$OUTPK3DIR/logos
cd ./$OUTPK3DIR
mk_pk3 pak01_cd
fi
cd "$SCRPATH"
# Get the latest patch, because that'll fix the menu assets and add more fun, free content
grab_patch 10051006 02_1006
grab_patch 10061008 03_1008
grab_patch 10081009 04_1009
grab_patch 10091010 05_1010
grab_patch 10101013 06_1013
grab_patch 10131015 07_1015
grab_patch 10151016 08_1016
grab_patch 10161100 09_1100
grab_patch 11001101 10_1101
grab_patch 11011104 11_1104
grab_patch 11041106 12_1106
grab_patch 11071108 14_1108
grab_patch 11081109 15_1109
grab_patch 11091110 16_1110
# Make sure we're back in here
cd "$SCRPATH"
printf "All done. Would you like to rip the the Compact Disc Digital Audio for music?\ny/n: "
read CHOICE
if [[ "$CHOICE" == [Yy]* ]]; then
# check if we require rippin tunes
if ! [ -f "$SCRPATH/music/track02.wav" ] && ! [ -f "$SCRPATH/music/track02.ogg" ]; then
if [ -x "$(command -v cdparanoia)" ]; then
mkdir -p "./music"
cd "./music"
cdparanoia -B
rename ".cdda." "." *.wav
# Maybe the user does not have the physical disc and cdp fails.
if [ -f "$SCRPATH/music/track02.wav" ]; then
# I'd offer FLAC, but that also requires the ffmpeg plugin
if [ -x "$(command -v oggenc)" ]; then
printf "All done. Would you like to convert them to OGG for playback compatibility\nas well as space preservation (frees up ~330 MB)?\ny/n: "
read CHOICE
if [[ "$CHOICE" == [Yy]* ]]; then
oggenc *.wav
rm *.wav
fi
fi
fi
else
printf "cdparanoia is missing. Cannot rip music.\nPlease run the installer again once you've got it installed.\n"
fi
else
printf "Music is already present.\n"
fi
fi
cd "$SCRPATH"
rm -rfv ./$OUTPK3DIR
rm -rfv ./tmp