117 lines
3.1 KiB
Bash
Executable file
117 lines
3.1 KiB
Bash
Executable file
#!/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
|