summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorsmls2015-07-09 15:58:06 +0200
committersmls2015-07-09 15:58:06 +0200
commitf7d22f66ff0e1f2b9d3b47474799d3fca3d76bc4 (patch)
tree8f40eb1d6067e1f92ed29ca0eebe007a360eed08
downloadaur-f7d22f66ff0e1f2b9d3b47474799d3fca3d76bc4.tar.gz
Initial import
-rw-r--r--.SRCINFO20
-rw-r--r--PKGBUILD49
-rw-r--r--arx-fatalis-data.install10
-rwxr-xr-xinstall-gog96
-rw-r--r--install-verify257
5 files changed, 432 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..7af46d43f575
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,20 @@
+pkgbase = arx-fatalis-data-gog
+ pkgdesc = Arx Fatalis game data from GOG.com installer
+ pkgver = 1.21
+ pkgrel = 1
+ url = http://www.gog.com/en/gamecard/arx_fatalis
+ install = arx-fatalis-data.install
+ arch = i686
+ arch = x86_64
+ license = custom:commercial
+ makedepends = innoextract
+ provides = arx-fatalis-data
+ conflicts = arx-fatalis-data-copy
+ conflicts = arx-fatalis-data-demo
+ source = install-verify
+ source = install-gog
+ md5sums = e9c245ac1bb48cb8ef667933e0b725d2
+ md5sums = fc86639646ba5dba6d737560fb846f4a
+
+pkgname = arx-fatalis-data-gog
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..a032ac18f8b8
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,49 @@
+# Maintainer: Sam S. <smls75@gmail.com>
+
+pkgname=arx-fatalis-data-gog
+pkgver=1.21
+pkgrel=1
+pkgdesc='Arx Fatalis game data from GOG.com installer'
+url='http://www.gog.com/en/gamecard/arx_fatalis'
+arch=('i686' 'x86_64')
+license=('custom:commercial')
+makedepends=('innoextract')
+provides=('arx-fatalis-data')
+conflicts=('arx-fatalis-data-copy' 'arx-fatalis-data-demo')
+source=("install-verify" "install-gog")
+md5sums=('e9c245ac1bb48cb8ef667933e0b725d2'
+ 'fc86639646ba5dba6d737560fb846f4a')
+install='arx-fatalis-data.install'
+PKGEXT='.pkg.tar'
+
+_gamepkg="setup_arx_fatalis.exe"
+
+
+package() {
+ cd $srcdir
+ _get_local_source "$_gamepkg" || {
+ error "Unable to find the game archive. Please download it from your GOG.com
+ account, and copy or symlink it into one of the above directories."
+ exit 1; }
+
+ msg "Starting setup..."
+ chmod +x install-gog
+ ./install-gog --no-progress "$_gamepkg" "$pkgdir/usr/share/arx"
+ mkdir "$pkgdir/usr/share/games" && ln -s "/usr/share/arx/" "$pkgdir/usr/share/games/arx"
+}
+
+
+# Locate a file or folder provided by the user, and symlink it into $srcdir
+_get_local_source() {
+ msg "Looking for '$1'..."
+ declare -A _search=(['build dir']="$startdir"
+ ['$LOCAL_PACKAGE_SOURCES']="$LOCAL_PACKAGE_SOURCES")
+ for _key in "${!_search[@]}"; do local _dir="${_search["$_key"]}"
+ if [ -z "$_dir" ]; then _dir="<undefined>"; fi
+ echo -n " - in $_key ['$_dir'] ... ";
+ if [ -e "$_dir/$1" ]; then
+ echo "FOUND"; ln -sfT "$(readlink -f "$_dir/$1")" "$srcdir/$1"; break; fi
+ echo "NOT FOUND"
+ done
+ if [ ! -e "$srcdir/$1" ]; then return 1; fi
+}
diff --git a/arx-fatalis-data.install b/arx-fatalis-data.install
new file mode 100644
index 000000000000..3db61fb887ac
--- /dev/null
+++ b/arx-fatalis-data.install
@@ -0,0 +1,10 @@
+
+post_install() {
+ echo "This package only installs the (proprietary) game data, no"
+ echo "game binaries."
+ echo "To actually play the game, compile and install Arx Libertatis,"
+ echo "the community-driven open-source port of Arx Fatalis for Linux"
+ echo "based on the publically released Arx Fatalis 1.21 source code."
+ echo " -> http://arx-libertatis.org"
+ echo " -> AUR package: arx-libertatis"
+}
diff --git a/install-gog b/install-gog
new file mode 100755
index 000000000000..98f09ca83492
--- /dev/null
+++ b/install-gog
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+die() {
+ echo "$@" >&2
+ exit 1
+}
+
+# Handle arguments
+
+innoextract_opts=''
+if [ "$1" = "--no-progress" ] ; then
+ innoextract_opts='--progress=off'
+ shift
+fi
+
+[ "$1" = "--help" ] || [ "$1" = "-h" ] || setupfile="$(readlink -m "$1")"
+
+[ "$setupfile" != "" ] || die "\
+Usage: install-gog path/to/setup_arx_fatalis.exe [output_dir]
+
+Optional option (must be the first argument):
+ --no-progress Disable the innoextract progress bar
+
+This script can be used to install the Arx Fatalis data from a GOG.com setup file.
+Files will be verified and renamed as needed by Arx Libertatis.
+
+setup_arx_fatalis.exe can be downloaded from your GOG.com account after buying Arx Fatalis"
+
+if [ "$2" = "" ]
+ then destdir="$(pwd)"
+ else destdir="$(readlink -m "$2")"
+fi
+
+cd "$(dirname "$0")"
+here="$(pwd)"
+
+echo "Installing Arx Fatalis GOG.com data from \"$setupfile\" to \"$destdir\".
+"
+
+[ -f "$here/install-verify" ] || die "Missing install-verify script."
+install_verify_sourced=1
+. "$here/install-verify"
+
+# Check for required commands
+
+innoextract=`which innoextract 2> /dev/null`
+
+[ -f "$innoextract" ] \
+ || die "Please install innoextract (http://constexpr.org/innoextract/)"
+
+# Verify input file
+
+checksum="$("$md5sum" -b "$setupfile" | sed 's/ .*//')"
+expected='0dd8ec13c10146db1a741258b624040a'
+if [ "$checksum" = "$expected" ]
+ then echo "Checksum matched."
+ else echo "Got checksum $checksum, expected $expected."
+fi
+
+# Prepare output and temp dirs
+
+mkdir -p "$destdir" || exit 1
+
+tempdir="$destdir/arx-install-gog-temp"
+
+rm -rf "$tempdir" 2> /dev/null
+mkdir "$tempdir" || exit 1
+cd "$tempdir" || exit 1
+
+# Extract files
+
+"$innoextract" $innoextract_opts --lowercase "$setupfile"
+
+# Install required files
+
+for f in "$@" ; do
+
+ dir="$(dirname "$f")"
+ mkdir -pv "$destdir/$dir"
+
+ mv -fv "app/$f" "$destdir/$f"
+
+ chmod "--reference=$destdir" "$destdir/$f" > /dev/null 2>&1
+ chmod -x "$destdir/$f" > /dev/null 2>&1
+
+done
+
+# Cleanup temporary files
+
+rm -rf "$tempdir"
+
+# Verify installed files
+
+cd "$destdir"
+detect_language
+verify_checksums
diff --git a/install-verify b/install-verify
new file mode 100644
index 000000000000..d52bddac27ec
--- /dev/null
+++ b/install-verify
@@ -0,0 +1,257 @@
+#!/bin/sh
+
+# Verify arx fatalis non-demo checksums.
+# This script is meant to be run on it's own or sourced by the other
+# install scripts.
+
+# List of required files
+
+if [ "$install_verify_sourced" != "1" ] ; then
+ die() {
+ echo "$@" >&2
+ exit 1
+ }
+ ( [ "$1" = "--help" ] || [ "$1" = "-h" ] ) && die "\
+Usage: install-verify [directory]"
+ if [ "$1" = "" ]
+ then checkdir="$(pwd)"
+ else checkdir="$(readlink -m "$1")"
+ fi
+ [ -d "$checkdir" ] || die "directory $checkdir does not exist"
+fi
+
+set -- \
+ "data2.pak" \
+ "graph/interface/misc/arkane.bmp" \
+ "graph/interface/misc/quit1.bmp" \
+ "graph/obj3d/textures/fixinter_barrel.jpg" \
+ "graph/obj3d/textures/fixinter_bell.bmp" \
+ "graph/obj3d/textures/fixinter_metal_door.jpg" \
+ "graph/obj3d/textures/fixinter_public_notice.bmp" \
+ "graph/obj3d/textures/item_bread.bmp" \
+ "graph/obj3d/textures/item_club.jpg" \
+ "graph/obj3d/textures/item_long_sword.jpg" \
+ "graph/obj3d/textures/item_mauld_sabre.jpg" \
+ "graph/obj3d/textures/item_mauldsword.jpg" \
+ "graph/obj3d/textures/item_mirror.jpg" \
+ "graph/obj3d/textures/item_ring_casting.bmp" \
+ "graph/obj3d/textures/item_rope.bmp" \
+ "graph/obj3d/textures/item_spell_sheet.jpg" \
+ "graph/obj3d/textures/item_torch2.jpg" \
+ "graph/obj3d/textures/item_torch.jpg" \
+ "graph/obj3d/textures/item_zohark.bmp" \
+ "graph/obj3d/textures/l7_dwarf_[wood]_board08.jpg" \
+ "graph/obj3d/textures/l7_dwarf_[wood]_board80.jpg" \
+ "graph/obj3d/textures/npc_dog.bmp" \
+ "graph/obj3d/textures/npc_pig.bmp" \
+ "graph/obj3d/textures/npc_pig_dirty.bmp" \
+ "graph/obj3d/textures/npc_rat_base.bmp" \
+ "graph/obj3d/textures/npc_rat_base_cm.bmp" \
+ "graph/obj3d/textures/npc_worm_body_part1.jpg" \
+ "graph/obj3d/textures/npc_worm_body_part2.bmp" \
+ "graph/obj3d/textures/[wood]_light_door.jpg" \
+ "manual.pdf" \
+ "map.pdf" \
+ "misc/arx_default.ttf" \
+ "misc/arx_russian.ttf" \
+ "misc/arx_taiwanese.ttf" \
+ "misc/logo.avi" \
+ "misc/logo.bmp" \
+ "sfx.pak" \
+ "data.pak" \
+ "loc.pak" \
+ "speech.pak"
+
+# Common functions
+
+md5sum=`which md5sum 2> /dev/null`
+[ -f "$md5sum" ] \
+ || die "Please install md5sum (http://www.gnu.org/software/coreutils/)"
+
+data_lang='english'
+detect_language() {
+
+ speech_checksum=`find '.' -iname "speech.pak" -exec "$md5sum" -b {} \; \
+ | sed "s/ .*//g"`
+ if [ "$speech_checksum" = '' ] ; then
+ speech_checksum=`find '.' -iname "speech_default.pak" \
+ -exec "$md5sum" -b {} \; | sed "s/ .*//g"`
+ fi
+
+ # check if the checksum is of a known localisation and set data_lang to
+ # the language string to be used with the 1.21 patch installer
+ case "$speech_checksum" in
+
+ '4c3fdb1f702700255924afde49081b6e') data_lang='german'
+ loc_checksum='31bc35bca48e430e108db1b8bcc2621d' ;;
+
+ # Bundled version of AF included with NVIDIA card
+ 'ab8a93161688d793a7c78fbefd7d133e') data_lang='german'
+ loc_checksum='31bc35bca48e430e108db1b8bcc2621d' ;;
+
+ '4e8f962d8204bcfd79ce6f3226d6d6de') data_lang='english'
+ loc_checksum='a47b192493afb5794e2161a62d35b69f' ;;
+
+ '2f88c67ae1537919e69386d27583125b') data_lang='spanish'
+ loc_checksum='121f99608814a2c9c5857cfadb665553' ;;
+
+ '4edf9f8c799190590b4cd52cfa5f91b1') data_lang='french'
+ loc_checksum='f8fc448fea12469ed94f417c313fe5ea' ;;
+
+ '81f05dea47c52d43f01c9b44dd8fe962') data_lang='italian'
+ loc_checksum='a9e162f2916f5737a95bd8c5bd8a979e' ;;
+
+ '677163bc319cd1e9aa1b53b5fb3e9402') data_lang='russian'
+ loc_checksum='a131bf2398ee70a9c22a2bbffd9d0d99' ;;
+
+ '') die "speech*.pak not found in $(pwd)" ;;
+ *) die "unsupported data language - speech*.pak checksum:" \
+ "$speech_checksum" ;;
+ esac
+
+ echo "
+Data language: $data_lang
+"
+}
+
+record_checksum_failure() {
+ if [ $checksum_failed = 0 ] ; then
+ echo "
+Checksum failed:"
+ checksum_failed=1
+ fi
+}
+
+verify_checksum() {
+
+ file="$1" ; shift
+
+ if [ ! -f "$file" ] ; then
+ record_checksum_failure
+ echo "- missing $file"
+ return
+ fi
+
+ checksum=`"$md5sum" -b "$file" | sed "s/ .*//g"`
+
+ checksum_matched=0
+ for valid_checksum in "$@" ; do
+ [ "$checksum" = "$valid_checksum" ] && checksum_matched=1
+ done
+
+ if [ $checksum_matched = 0 ] ; then
+
+ record_checksum_failure
+
+ errorstr="- $file: got '$checksum', expected '$1'" ; shift
+ for alternate_checksum in "$@" ; do
+ errorstr="$errorstr or '$alternate_checksum'"
+ done
+ echo "$errorstr"
+ fi
+}
+
+verify_checksums() {
+
+ echo "
+Done:"
+
+ checksum_failed=0
+
+ # Common files
+ verify_checksum 'data2.pak' \
+ 'f7e0ce700bf963429ac535ca86f8a7b4'
+ verify_checksum 'graph/interface/misc/arkane.bmp' \
+ 'afff1099c01ffeb03b9a351f7b5966b6'
+ verify_checksum 'graph/interface/misc/quit1.bmp' \
+ '41445d3792a1f8818d950aca47254488'
+ verify_checksum 'graph/obj3d/textures/fixinter_barrel.jpg' \
+ '8419274acbff7346c3661b18d6aad6dc'
+ verify_checksum 'graph/obj3d/textures/fixinter_bell.bmp' \
+ '5743b9047c9ad65540c318dfcc98123a'
+ verify_checksum 'graph/obj3d/textures/fixinter_metal_door.jpg' \
+ 'f246eff6b19c9c710313b4a4dce96a69'
+ verify_checksum 'graph/obj3d/textures/fixinter_public_notice.bmp' \
+ 'f81394abbb9006ce0950843b7909db33'
+ verify_checksum 'graph/obj3d/textures/item_bread.bmp' \
+ '544448f8eedc912aa231a6a04fffb7c5'
+ verify_checksum 'graph/obj3d/textures/item_club.jpg' \
+ '7e26c4199ddaca494c8b369294306b0b'
+ verify_checksum 'graph/obj3d/textures/item_long_sword.jpg' \
+ '3a6196fe9b7666c7d80d82be06f6de86'
+ verify_checksum 'graph/obj3d/textures/item_mauld_sabre.jpg' \
+ '18492c25ebac02f83e2f0ebda61ecb00'
+ verify_checksum 'graph/obj3d/textures/item_mauldsword.jpg' \
+ '503a5c2f23668040c675aefdde6dbbe5'
+ verify_checksum 'graph/obj3d/textures/item_mirror.jpg' \
+ 'c0a22b4f7a7a6461da68206e94928637'
+ verify_checksum 'graph/obj3d/textures/item_ring_casting.bmp' \
+ '348f9add709bacee08556d1f8cf10f3f'
+ verify_checksum 'graph/obj3d/textures/item_rope.bmp' \
+ 'ff05de281c8b380ee98f6e123d3d51cb'
+ verify_checksum 'graph/obj3d/textures/item_spell_sheet.jpg' \
+ '024ccbb520020f92fba5a5a4f0270cea'
+ verify_checksum 'graph/obj3d/textures/item_torch2.jpg' \
+ '027951899b4829599ca611010ea3484f'
+ verify_checksum 'graph/obj3d/textures/item_torch.jpg' \
+ '9ada166f23ddcb775ac20836e752187e'
+ verify_checksum 'graph/obj3d/textures/item_zohark.bmp' \
+ 'cd206a4027f86c6e57b7710c94049efa'
+ verify_checksum 'graph/obj3d/textures/l7_dwarf_[wood]_board08.jpg' \
+ '79ccc81adb7c37b98f40b478ef1fccd4'
+ verify_checksum 'graph/obj3d/textures/l7_dwarf_[wood]_board80.jpg' \
+ '691611087b13d38ef02bb9dfd6a2518e'
+ verify_checksum 'graph/obj3d/textures/npc_dog.bmp' \
+ '116bd374c14ae8c387a4da1899e1dca7'
+ verify_checksum 'graph/obj3d/textures/npc_pig.bmp' \
+ 'b7a4d0d3d230b2d1470176909004e38b'
+ verify_checksum 'graph/obj3d/textures/npc_pig_dirty.bmp' \
+ '76034d8d74056c8a982479d36321c228'
+ verify_checksum 'graph/obj3d/textures/npc_rat_base.bmp' \
+ '00c585ec9ebe8006d7ca72993de7b51b'
+ verify_checksum 'graph/obj3d/textures/npc_rat_base_cm.bmp' \
+ 'cae38facbf77db742180b9e58d0eb42f'
+ verify_checksum 'graph/obj3d/textures/npc_worm_body_part1.jpg' \
+ '0b220bffaedc89fa663f08d12630c342'
+ verify_checksum 'graph/obj3d/textures/npc_worm_body_part2.bmp' \
+ '20797cb78f6393a0fb5405969ba9f805'
+ verify_checksum 'graph/obj3d/textures/[wood]_light_door.jpg' \
+ '00d0b018e995e7d013d6e52e92126901'
+ verify_checksum 'misc/arx_default.ttf' \
+ '9a95ff96795c034524ba1c2e94ea12c7'
+ verify_checksum 'misc/arx_russian.ttf' \
+ '921561e83786efcd25f92147b60a13db'
+ verify_checksum 'misc/arx_taiwanese.ttf' \
+ 'da59198061cef0761c6b2fca113f76f6'
+ verify_checksum 'misc/logo.avi' \
+ '63ed31a4eb3d226c23e58cfaa974d484'
+ verify_checksum 'misc/logo.bmp' \
+ 'afff1099c01ffeb03b9a351f7b5966b6'
+ verify_checksum 'sfx.pak' \
+ '2efc9a74c517fd1ee9919900cf4091d2'
+
+ # data.pak is censored in some versions (presumably has less gore)
+ # At least the original german and italian CDs have the censored version.
+ # The censored version has different level files and a different
+ # human_female_villager model.
+ # There are also minor differences in the scripts, but those are
+ # overwritten by data2.pak from the 1.21 patch.
+ data_checksum_original='a91a0b39a046233debbb10b4850e13eb'
+ data_checksum_censored='a88d239dc7919ab113ff45483cb4ad46'
+ verify_checksum 'data.pak' "$data_checksum_original" "$data_checksum_censored"
+
+ # Language-specific files
+ verify_checksum 'loc.pak' "$loc_checksum"
+ # There is no need to check speech.pak here as we already used it to
+ # detect $loc_checksum
+
+ [ $checksum_failed = 0 ] || die "
+ERROR: Checksum mismatch."
+ echo "Checksum match."
+}
+
+if [ "$install_verify_sourced" != "1" ] ; then
+ cd "$checkdir"
+ detect_language
+ verify_checksums
+fi