diff --git a/install_from_cd_goty.sh b/install_from_cd_goty.sh new file mode 100755 index 0000000..29b54ba --- /dev/null +++ b/install_from_cd_goty.sh @@ -0,0 +1,137 @@ +#!/bin/sh + +# I mean... this sucks, I get it - but sadly we have to use Wine for this +# because no one has made an installer extractor for Wine that works on +# Linux. Sorry. + +# 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 +} + +SCRPATH="$( cd "$( dirname $(readlink -nf $0) )" && pwd )" +OUTPK3DIR="pak01_retail.pk3dir" + +if ! [ -x "$(command -v wine)" ]; then + printf "Error: wine 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"/setup.exe ]; then + printf "Error: install.EXE not found in $CDROM_PATH.\n" >&2 + exit 1 +fi + +# Set up a prefix that's 32-bit inside +export WINEPREFIX="${SCRPATH}/prefix" +export WINEARCH=win32 +DATA_PATH="${WINEPREFIX}/drive_c/Sierra/Half-Life/" + +# No pak0 present +if ! [ -f "$SCRPATH/pak0_cd.pk3" ]; then + # Check if we need to install the content, or throw a warning. + if ! [ -f "$SCRPATH/$OUTPK3DIR/liblist.gam" ]; then + # May already have been extracted here (debug) + if ! [ -f "$DATA_PATH"/hl.exe ]; then + # Because /x does NOT preserve directories. + wine "$CDROM_PATH"/setup.exe /s + fi + + # Transplant the pak0.pak out of the data dir + if ! [ -f "$SCRPATH/pak00_cd.pak" ]; then + mv "$DATA_PATH/valve/pak0.pak" "$SCRPATH/pak00_cd.pak" + fi + + # Move valve to become OUTPK3DIR + mv "$DATA_PATH/valve" "$SCRPATH/$OUTPK3DIR" + # Logos need to be in the game-dir + mv "$DATA_PATH/logos" "$SCRPATH/$OUTPK3DIR/logos" + else + printf "$OUTPK3DIR already exists... everything okay?\n" + fi + + # Make the pk3 archive + cd "$SCRPATH/$OUTPK3DIR" + mk_pk3 pak01_cd +fi + +# Make sure we're back in here +cd "$SCRPATH" + +# check if we need an icon.tga +if ! [ -f "$SCRPATH/icon.tga" ]; then + # imagemagick will help us get our icon + if [ -x "$(command -v convert)" ]; then + printf "Detected ImageMagick's convert... giving you a nice icon!\n" + convert "$DATA_PATH/valve.ico" "$SCRPATH/valve.tga" + rm "$SCRPATH/valve-0.tga" + rm "$SCRPATH/valve-1.tga" + rm "$SCRPATH/valve-3.tga" + mv "$SCRPATH/valve-2.tga" "$SCRPATH/icon.tga" + else + printf "No ImageMagick found... can't give you a window icon then.\n" + fi +fi + +# 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 was already present.\n" + fi +fi + +cd "$SCRPATH" + +# Grab patches, GOTY is at 1.1.0.6 +grab_patch() +{ + wget -nc -O ./pak$2.pk4 http://archive.org/download/hl_shareware_data/valve/$1.zip +} +grab_patch 11071108 14_1108 +grab_patch 11081109 15_1109 +grab_patch 11091110 16_1110 + +# Be real careful here +rm -rfv "./$OUTPK3DIR" +rm -rfv "./prefix"