games/xu4: Added (Ultima IV remake)

Signed-off-by: Niels Horn <niels.horn@slackbuilds.org>
This commit is contained in:
B. Watson 2011-10-29 21:44:45 -02:00 committed by Niels Horn
parent 15b7a9ab86
commit ca2058fb86
10 changed files with 615 additions and 0 deletions

25
games/xu4/README Normal file
View File

@ -0,0 +1,25 @@
XU4 is a remake of the computer game Ultima IV. The goal is to make
it easy and convenient to play this classic on modern operating
systems.
XU4 isn't a new game based on the Ultima IV story -- it is a faithful
recreation of the old game, right up to the crappy graphics. If you
are looking for a game with modern gameplay and graphics, this is not
it -- yet. New features that improve the gameplay and keep with the
spirit of the original game will be added.
This package can be built with optional extras. See README-SBo.txt
for details.
Copyright notice: The file ultima4.zip is included in this package. This
file and its contents have a proprietary license and MAY NOT be
redistributed. You may download it from the original site, but not give
out copies of it yourself (including binary packages built from this
SlackBuild, since they include ultima4.zip).
If you have trouble downloading ultima4.zip from the URL listed
in the .info file, you can instead download UltimaIV.zip from
http://www.ultimaforever.com/ (registration required, JavaScript browser
required, no direct download URL). It's a different packaging of the
same content; the script is smart enough to build a package from either
release of Ultima 4.

47
games/xu4/README-SBo.txt Normal file
View File

@ -0,0 +1,47 @@
Optional stuff: Music, enhanced graphics, and PDF manuals.
Music
-----
To hear the in-game music, you'll need a set of MIDI patches, either the
eawpats or freepats package from slackbuilds.org (make sure you set up
timidity.cfg correctly). These can be installed after the fact (no need
to rebuild xu4 after installing them). The timidity package itself isn't
required (xu4 uses SDL_mixer to play back the music).
Enhanced Graphics
-----------------
By default, the script will build a package that uses the graphics from
the original PC/DOS version of the game. If you'd like to use the
upgraded graphics from the Ultima IV Upgrade Project, download the file
u4upgrad.zip and place it in the same directory as the SlackBuild script,
before running it. The upgrade can be downloaded here:
URL: http://www.moongates.com/u4/upgrade/files/u4upgrad.zip
md5sum: 4ce9c9cd9dab111275e0ebfde7a482c4
Homepage: http://www.moongates.com/u4/upgrade/Upgrade.htm
The graphics upgrade isn't listed in the .info file because it isn't
required to play the game, and also because some users will prefer the
original CGA-style graphics.
PDF Manuals
-----------
Some of the documentation in this package is in Microsoft Word format. To
read it, you can use KWord... or just live with the text-only versions
(also included in this package). These are the manuals for the original
game, and unlike most modern games, you really do need to read them to
have any chance of completing Ultima IV. The text files and Word docs
contain all the information needed to play the game.
However, the text and MS Word manuals don't really capture the
flavor of the original manuals: they're just the content, without the
presentation. If you want a more authentic retro-gaming experience,
you should install the PDF manuals. To do this, download the file
ultima4_scanned_docs.zip and place it in the SlackBuild directory,
before running the script.
URL: http://urchlay.naptime.net/slackstuff/src/ultima4_scanned_docs.zip
md5sum: c6be37b7028d6f7b56843a73517a5c31
The PDF docs aren't listed in the .info file because they're fairly large,
and not needed just to play the game.

3
games/xu4/doinst.sh Normal file
View File

@ -0,0 +1,3 @@
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

View File

@ -0,0 +1,29 @@
diff -Naur xu4-20111026_svn/src/settings.cpp xu4-20111026_svn.patched//src/settings.cpp
--- xu4-20111026_svn/src/settings.cpp 2011-06-23 13:36:06.000000000 -0400
+++ xu4-20111026_svn.patched//src/settings.cpp 2011-10-27 17:27:02.000000000 -0400
@@ -81,12 +81,6 @@
* Initialize the settings.
*/
void Settings::init(const bool useProfile, const string profileName) {
- if (useProfile) {
- userPath = "./profiles/";
- userPath += profileName.c_str();
- userPath += "/";
- } else {
-
#if defined(MACOSX)
FSRef folder;
OSErr err = FSFindFolder(kUserDomain, kApplicationSupportFolderType, kCreateFolder, &folder);
@@ -150,7 +144,12 @@
userPath = "./";
#endif
+ if (useProfile) {
+ userPath += "profiles/";
+ userPath += profileName.c_str();
+ userPath += "/";
}
+
FileSystem::createDirectory(userPath);
filename = userPath + SETTINGS_BASE_FILENAME;

68
games/xu4/repackage.sh Normal file
View File

@ -0,0 +1,68 @@
#!/bin/bash
# Repackage the official UltimaIV.zip from http://www.ultimaforever.com/
# so that its zip file structure is the more-or-less the same as the dragon
# release listed in the .info file. Also the official release includes the
# PDF docs, so we pack them into ultima4_scanned_docs.zip like the build
# script expects.
# The resulting package will be missing Keyboard.txt. Since the contents
# of Keyboard.txt are in the man page, I don't see it as a problem. The
# package will also have an extra copy of the map (Map.jpg), higher res
# than Map.bmp, but scanned from a creased map.
SRCZIP="$1"
if [ -z "$SRCZIP" -o ! -e "$SRCZIP" ]; then
echo "Usage: $0 /full/path/to/UltimaIV.zip"
fi
TMP=${TMP:-/tmp/SBo}
WORK=$TMP/u4_repackage
set -e
OUTPUT="$( dirname $SRCZIP )"
rm -rf $WORK
mkdir -p $WORK
cd $WORK
unzip "$SRCZIP"
# The manuals & map. This map is a jpeg, higher quality than the
# bmp version, except the jpeg was scanned from a map with a big
# crease in the middle. The dragon release lacks the jpeg map,
# so the SlackBuild script will be smart enough to handle the
# case where it's missing.
mkdir ultima4_scanned_docs
mv ultima4/EXTRAS/*.pdf ultima4_scanned_docs
zip -r "$OUTPUT/ultima4_scanned_docs.zip" ultima4_scanned_docs
mv "ultima4/EXTRAS/UltimaIV_Cloth Map.jpg" ultima4/Map.jpg
rm -rf ultima4_scanned_docs ultima4/EXTRAS
# dragon release has no containing directory inside the zipfile, so work
# from here.
cd ultima4
# Rename some files:
# The low-res (but not creased) map.
mv MAP.BMP Map.bmp
# there is no KEYBOARD.TXT. Use the word doc or the man page.
# there is no README.TXT. It doesn't apply to xu4 anyway.
mv HINTS.TXT Hints.txt
mv WISDOM.TXT Wisdom.txt
mv HISTORY.TXT History.txt
mv KEYBOARD.DOC "Keyboard Reference.doc"
# Readme.doc is different but has the same name. We don't need it anyway.
mv HINTS.DOC Hints.doc
mv THEBOOKO.DOC "The Book of Mystic Wisdom.doc"
mv THEHISTO.DOC "The History of Britannia.doc"
zip -r "$OUTPUT/ultima4.zip" .
if [ "$2" != "--keep" ]; then
cd $TMP
rm -rf $WORK
fi

19
games/xu4/slack-desc Normal file
View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in. You must
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
xu4: xu4 (Ultima IV remake)
xu4:
xu4: XU4 is a remake of the computer game Ultima IV. The goal is to make
xu4: it easy and convenient to play this classic on modern operating
xu4: systems.
xu4:
xu4: XU4 isn't a new game based on the Ultima IV story -- it is a faithful
xu4: recreation of the old game, right up to the crappy graphics. If you
xu4: are looking for a game with modern gameplay and graphics, this is not
xu4: it -- yet. New features that improve the gameplay and keep with the
xu4: spirit of the original game will be added.

240
games/xu4/u4.1 Normal file
View File

@ -0,0 +1,240 @@
.TH u4 1 "26 Oct 2011" "Version 1.1+svn" "XU4 Manual"
.SH NAME
\fBu4\fR \- A modern reimplementation of the classic Ultima IV role\-playing game.
.SH SYNOPSIS
.B u4
.RI [ options ]
.SH DESCRIPTION
.B XU4
is a remake of the computer game Ultima IV. The goal is to make
it easy and convenient to play this classic on modern operating
systems.
.PP
This man page only describes the command\-line options and keyboard commands
supported by \fBu4\fR.
For full documentation, see the files in \fI/usr/doc/xu4\-@VERSION@/\fR. The
README is a good place to start. Also the "History of Britannia" and the "Book
of Mystic Wisdom" are found there (you should read them before playing).
.SH OPTIONS
\fBu4\fR accepts the following options:
.TP
.B "\-f, \-\-fullscreen"
Run in fullscreen mode.
.TP
.B \-filter <filt>
Apply a filter on the scaled images. The <filt>
parameter must be set to one of the following
case\-sensitive options:
.I point
.I 2xBi
.I 2xSaI
.I Scale2x
.TP
.B "\-i, \-skipintro"
Skip the intro, and go directly into the game.
This option requires the existance of a valid saved game.
.TP
.B "\-p <profname>, \-profile <profname>"
Activate a specific save game profile. Using this
option, you may have multiple saved games at the
same time. Also, the game's config is stored on
a per\-profile basis, so different profiles could
have e.g. different screen resolutions.
Use quotation marks around profile names that
include spaces.
All profiles are stored in the
.I ~/.xu4/profiles
sub\-directory.
The active profile name is shown on the
introduction map view off the main menu.
.TP
.B "\-q, \-quiet"
Quiet mode \- no music.
.TP
.B \-scale <n>
Scale the original graphics by a factor of <n>.
Factor <n> must be 1, 2, 3, 4, or 5.
.TP
.B "\-v, \-verbose"
Verbose output; prints out information useful for
trouble\-shooting.
.SH KEYBOARD CONTROLS
XU4 is played entirely with the keyboard. To make choices from menus,
press the first letter of the menu choice (e.g. \fBJ\fR for "Journey Onward"
at the main menu). The Config menu also supports navigation with the arrow
keys and Enter.
.PP
During gameplay, the following keystrokes are supported (information taken
from Keyboard.txt and README):
.TP
.B A (Attack)
Attempt to engage thy foe with the weapon thou hast
readied (Ready Weapon command); must be followed by the
direction of thy foe.
.TP
.B B (Board)
Board a vessel or mount a horse.
.TP
.B C (Cast)
Cast a magical spell; must be followed by the number
of the player who wishes to cast it (not needed in combat or
in dungeon rooms), and then the first letter of the desired
spell. Note: All spells must have reagents mixed in advance
of casting.
.TP
.B D (Descend)
Climb down ladder to next level of dungeon or
building.
.TP
.B E (Enter)
Go into such places as villages, townes, castles,
dungeons and shrines.
.TP
.B F (Fire)
Fire a ship's cannons (once thou hast Boarded); must
be followed by a direction. Note: Broadsides only!
.TP
.B G (Get Chest)
Attempt to open (and disarm, if trapped) chest;
must be followed by the number of the player who wishes to
open the chest, except during combat and in dungeon rooms.
Note: 'Tis wisest to use the player with the highest
Dexterity when examining potentially dangerous chests as
this lessens the chances of setting off any traps.
.TP
.B H (Hole up and camp)
Set up camp to rest and recover from thy wounds.
Note: This command may only be used successfully with limited frequency.
.TP
.B 1 (Ignite a torch)
Light a torch for illumination in dungeons. Requires a special item.
.TP
.B J (Jimmy lock)
Use a magical key to unlock a sealed door. Must be followed by the direction of the door that thou dost wish to unlock.
.TP
.B K (Klimb)
Climb up a ladder to the next level of a building or dungeon, or to reach the surface from the topmost level of a dungeon.
.TP
.B L (Locate Position)
Requires a special item.
.TP
.B M (Mix Reagents)
Prepare material components of spells for later use.
Note: Thou must have reagents mixed ahead of time in
order to cast any spells. When asked "Reagent:", type the
letter corresponding to the reagents desired and then type
[Return] when thou wishes to mix them.
.TP
.B N (New order)
Exchanges the position of two players indicated within thy party, except for player #1, for thou must lead the party.
.TP
.B O (Open door)
Open a door in the direction indicated.
.TP
.B P (Peer at gem)
Requires a special item.
.TP
.B Q (Quit & Save)
Saves the current game status to disk; thou may continue after this command or power down thy computer.
.TP
.B R (Ready a weapon)
Equip a player with the weapon of thy choice (if owned) for use in combat.
.TP
.B S (Search)
Search thy exact current location for unusual items.
.TP
.B T (Talk)
Allows a player to converse with merchants or townesfolk in the direction indicated.
.TP
.B U (Use)
Use an item thou hast found during play by means of the "Search" command.
.TP
.B V (Volume)
Toggles sound effects on or off.
.TP
.B W (Wear armour)
Outfits a player with the armour of thy choice if owned for defense in combat.
.TP
.B X (Xit)
That's (e)xit thy current form of transportation and continue on foot.
.TP
.B Y (Yell)
Yell "giddyup" or "whoa" to speed up or slow down thy horse.
.TP
.B Z (Ztats)
Displays the status and attributes of a
selected player; if 0 is pressed instead of a player number,
this command will display the lists of weapons, armour,
items, reagents and mixtures. The left and right arrow
keys will scroll through these lists, while pressing any
other key will return thee to game play.
.TP
.B
ARROW KEYS
Control movement. North/South/East/West
.SH FILES
.TP
.B ~/.xu4/
Configuration and saved games are stored here, when \fB\-p\fR is not in use. The config file is
\fBxu4rc\fR. It is human\-readable and editable, but normally is
created and updated by the in\-game configuration menu. The savegames
are in a binary format.
.TP
.B ~/.xu4/profiles/<profname>/
When using the \fB\-p <profname>\fR option, config and savegame data are
stored here instead.
.SH AUTHORS
Ultima IV was created by Richard Garriott, aka Lord British.
.PP
.B XU4
authors:
.br
Andrew Taylor <andrewtaylor@users.sourceforge.net>
.br
Main developer
.PP
Marc Winterrowd <nodling at yahoo dot com>
.br
LZW decoder, tile animations, title screen fixes, and lots more
.PP
Daniel Browning\-Weber <dan_ultima@users.sourceforge.net>
.br
Developer
.PP
Darren Janeczek <darren_janeczek@users.sourceforge.net>
.br
Developer
.PP
Doug Day <dougday@users.sourceforge.net>
.br
Developer
.PP
Travis Howell <kirben@users.sourceforge.net>
.br
Windows port
.PP
Frank Wolter <FrankWolter@gmx.net>
.br
Ultima IV icon used in xu4
.PP
Dennis De Marco <dennis@demarco.com>
.br
Sound code
.PP
Steve Saunders <s_j_nevets@yahoo.com.au>
.br
MacOSX port
.PP
Michael Ryan <solus@users.sourceforge.net>
.br
Text colorization, profiles, enhanced LOS algorithm, title/intro sequence, general fixes
.PP
Gregory Saunders <grerfy@users.sourceforge.net>
.br
Amiga file formats, minor enhancements
.PP
Man page created (from README contents) by B. Watson, for the SlackBuilds.org
project. Permission hereby granted to use this man page anywhere, for any purpose.

8
games/xu4/u4.desktop Normal file
View File

@ -0,0 +1,8 @@
[Desktop Entry]
Name=Ultima 4
Comment=Ultima 4 (xu4)
Exec=u4
Icon=u4
Terminal=false
Type=Application
Categories=Game;RolePlaying;

164
games/xu4/xu4.SlackBuild Normal file
View File

@ -0,0 +1,164 @@
#!/bin/bash
# Slackware build script for xu4
# Written by B. Watson (yalhcru@gmail.com)
PRGNAM=xu4
VERSION=${VERSION:-20111026_svn}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
# There actually are some executables in the lib dir. If there hadn't
# been, I would have left it as /usr/lib even on 64-bit, or better yet
# change to /usr/share. As it is, it has to be /usr/lib64 on 64-bit.
LIBDIR=/usr/lib$LIBDIRSUFFIX
PKGLIBDIR=$PKG/$LIBDIR
# Fix path to "profiles/" dir used by -p option. Patch makes it use
# ~/.xu4/profiles/ rather than ./profiles off the current dir.
patch -p1 < $CWD/profile_path.diff
# Fix hard-coded libdir. Ugh.
sed -i -e "s,/usr/lib,$LIBDIR," src/u4file.cpp
# Stop u4 from writing border.png in the current dir (it never *reads* it!)
sed -i -e '/border\.png/s,^,//,' src/imagemgr.cpp
# The -DNPERF stops u4 from creating a debug/ in the current dir.
make -C src DEBUGCXXFLAGS="-DNPERF $SLKCFLAGS" prefix=/usr libdir=$PKGLIBDIR
make -C src install prefix=$PKG/usr libdir=$PKGLIBDIR
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
# If we have the official release rather than the "dragon" one, repackage
# it with the same layout as the dragon release. Note that the official
# release isn't the default because there's no direct download link for
# the .info file (the site requires javascript + registration).
if [ -e $CWD/UltimaIV.zip ]; then
sh $CWD/repackage.sh $CWD/UltimaIV.zip
fi
# The game data. This is the zip file, not the self-extracting exe (the
# exe lacks the documentation, for one thing).
cat $CWD/ultima4.zip > $PKGLIBDIR/u4/ultima4.zip
# Replace stock .desktop file with one that validates.
cat $CWD/u4.desktop > $PKG/usr/share/applications/u4.desktop
# These files should be (but aren't) installed by "make install". Without
# them, we get no music!
install -m0644 mid/*.it $PKGLIBDIR/u4/music/
# Remove execute permission from data files. Grr.
chmod 644 $PKG/usr/share/pixmaps/* $PKG/usr/share/applications/*
find $PKGLIBDIR \
-type f -a \
\( -name \*.mid -o -name \*.vga -o -name \*.png -o \
-name \*.xml -o -name \*.dtd -o -name \*.ogg \) \
-print0 | xargs -0 chmod 644
# Docs. N.B. we don't need border.png.
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/developers
cp -a *.html AUTHORS COPYING README $PKG/usr/doc/$PRGNAM-$VERSION
cp -a doc/* $PKG/usr/doc/$PRGNAM-$VERSION/developers
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
# Include the upgrade (and extract its docs) if we have it.
if [ -e $CWD/u4upgrad.zip ]; then
cat $CWD/u4upgrad.zip > $PKGLIBDIR/u4/u4upgrad.zip
cd $PKG/usr/doc/$PRGNAM-$VERSION
unzip $CWD/u4upgrad.zip Readme.txt
mv Readme.txt Readme-Upgrade.txt
cd -
fi
# Include the PDF docs, if we have them.
if [ -e $CWD/ultima4_scanned_docs.zip ]; then
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/pdf
cd $PKG/usr/doc/$PRGNAM-$VERSION/pdf
unzip $CWD/ultima4_scanned_docs.zip '*.pdf'
mv ultima4_scanned_docs/Ultima_IV_-_Cluebook_-_PC.pdf Hints.pdf
mv ultima4_scanned_docs/Ultima_IV_-_Manual_-_PC.pdf History.pdf
mv ultima4_scanned_docs/Ultima_IV_-_Spellbook_-_PC.pdf Wisdom.pdf
rm -rf ultima4_scanned_docs
cd -
fi
# Include the original Ultima IV docs.
cd $PKG/usr/doc/$PRGNAM-$VERSION
unzip $CWD/ultima4.zip '*.txt' '*.doc' '*.bmp' '*.jpg' || true
# These docs only apply to running the original game on DOS or Windows. Bye.
rm -f Readme.txt Readme.doc
# The Word versions of the docs don't really offer much improvement
# over the plain text ones, but here they are.
mkdir ms_word_docs
mv *.doc ms_word_docs
# Fix permissions and line endings.
[ -e Map.bmp ] && chmod 644 Map.bmp
[ -e Map.jpg ] && chmod 644 Map.jpg
chmod 644 *.txt ms_word_docs/*.doc
sed -i 's/\r//' *.txt
cd -
# I hate packages called "xfoo" whose binaries are called "foo".
ln -s u4 $PKG/usr/bin/$PRGNAM
# I also hate binaries that take options but have no man pages, so here's
# the one I made. Enjoy.
mkdir -p $PKG/usr/man/man1
sed "s/@VERSION@/$VERSION/" $CWD/u4.1 | gzip -9c - > $PKG/usr/man/man1/u4.1.gz
ln -s u4.1.gz $PKG/usr/man/man1/$PRGNAM.1.gz
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

12
games/xu4/xu4.info Normal file
View File

@ -0,0 +1,12 @@
PRGNAM="xu4"
VERSION="20111026_svn"
HOMEPAGE="http://xu4.sourceforge.net/"
DOWNLOAD="http://urchlay.naptime.net/slackstuff/src/xu4-20111026_svn.tar.xz \
http://www.thatfleminggent.com/ultima/ultima4.zip"
MD5SUM="de6669e76a4323c6a6b32a70612b02bf \
f2006a5dbf175571912ef2594b6eb900"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"
APPROVED="Niels Horn"