games/maelstrom: Added to 12.2 repository

This commit is contained in:
B. Watson 2010-05-12 23:29:26 +02:00 committed by David Somero
parent fc32ee2069
commit 1a3537baa7
10 changed files with 590 additions and 0 deletions

227
games/maelstrom/Maelstrom.6 Normal file
View file

@ -0,0 +1,227 @@
.TH MAELSTROM "6" "April 2009" "Ambrosia Software" "Games"
.SH NAME
Maelstrom \- Enhanced Asteroids\-like game
.SH SYNOPSIS
.B Maelstrom
[\-netscores] \-printscores
.P
.B Maelstrom
[options]
.P
.B Maelstrom\-netd
.br
\fI(see NETWORKING, below, for a description of Maelstrom\-netd)\fR
.SH DESCRIPTION
Maelstrom is a game based on Asteroids, but with several gameplay enhancements:
.P
\- High\-resolution color graphics
.br
\- Digital audio
.br
\- Powerups
.br
\- Networked multiplayer/deathmatch mode (up to 3 players)
.br
\- World\-wide high score server
.P
Game storyline:
.br
You pilot your ship through the dreaded "Maelstrom" asteroid belt \-\-
suddenly your best friend thrusts towards you and fires, directly at your
cockpit. You raise your shields just in time, and the battle is joined.
.P
The deadliest stretch of space known to mankind has just gotten
deadlier. Everywhere massive asteroids jostle for a chance to crush your
ship, and deadly shinobi fighter patrols pursue you across the asteroid
belt. But the deadliest of them all is your sister ship, assigned to
you on patrol. The pilot, trained by your own Navy, battle hardened by
months in the Maelstrom, is equipped with a twin of your own ship and
intimate knowledge of your tactics.
.P
The lovely Stratocaster R&R facility never sounded so good, but as you
fire full thrusters to dodge the latest barrage you begin to think you'll
never get home...
.SH OPTIONS
.TP
\fB\-fullscreen\fR
Run Maelstrom in full\-screen mode. You may also press Alt\-Enter
while Maelstrom is running, to toggle full\-screen.
.TP
\fB\-gamma\fR [0\-8]
Set the gamma correction
.TP
\fB\-volume\fR [0\-8]
Set the sound volume
.TP
\fB\-netscores\fR
Use the world\-wide network score server
.TP
\fB\-player\fR N[@host][:port]
Designate player N (at host and/or port). N must be an integer, 1 to 3.
.TP
\fB\-server\fR N@host[:port]
Play with N players using server at host. N must be an integer, 1 to 3.
.TP
\fB\-deathmatch\fR [N]
Play deathmatch to N frags (default = 8)
.SH CONTROLS
The game may be played with either the keyboard or a joystick.
The game controls may be remapped by pressing C at the main menu. The
default keyboard controls are:
.TP
\fBTab\fR, \fBJoystick Button 1\fR
Fire
.TP
\fBUp Arrow\fR, \fBJoystick Up\fR
Thrust
.TP
\fBSpace\fR, \fBJoystick Button 2\fR
Shield
.TP
\fBRight Arrow\fR, \fBJoystick Right\fR
Turn Clockwise
.TP
\fBLeft Arrow\fR, \fBJoystick Left\fR
Turn Counter\-clockwise
.TP
\fBP\fR
Pause
.TP
\fBEscape\fR
Abort Game
.TP
\fBAlt\-Enter\fR
Toggle between fullscreen and windowed modes. This keystroke
may not be remapped.
.P
No special configuration must be done to play with a joystick, provided
the joystick is supported by the SDL library on your OS.
There is no way
to remap the joystick controls.
.SH NETWORKING
.SS Netplay Without a Server
Networking has been tested on Linux, SGI and DEC. It is known to
work between SGI and DEC systems (cross\-platform), and between systems
of the same type.
.P
Up to three players can play, and the syntax is as follows:
.P
(On machine 1)
.br
.B
.nh
Maelstrom \-player 1 \-player 2@machine2 \-player 3@machine3
.hy
.P
(On machine 2)
.br
.B
.nh
Maelstrom \-player 1@machine1 \-player 2 \-player 3@machine3
.hy
.P
(On machine 3)
.br
.B
.nh
Maelstrom \-player 1@machine1 \-player 2@machine2 \-player 3
.hy
.SS Netplay With a Server
You can also use a network address server that handles the difficulties
of getting all the players and addresses right. The address server is
installed as \fBMaelstrom\-netd\fR, and if run on say "servhost", the syntax
for a three player game would be:
.P
(On machine A)
.br
.B
.nh
Maelstrom \-player 1 \-server 3@servhost
.hy
.P
(On machine B)
.br
.B
.nh
Maelstrom \-player 2 \-server 3@servhost
.hy
.P
(On machine C)
.br
.B
.nh
Maelstrom \-player 3 \-server 3@servhost
.hy
.P
The address server will let players know if they have conflicting
player numbers, and will set up the proper addresses for all players.
It can field multiple games, and can be a "game hub" where a bunch
of players can get together for romping network games. :)
.P
\fBNOTE\fR: Maelstrom-netd will not run correctly on 64\-bit hosts,
and Maelstrom running on a 64\-bit host cannot successfully play in a
mutiplayer game with the -server option. Use non\-server networked
play mode instead.
.SS Network Ports
By default, Maelstrom uses UDP ports 44718 to 44720 for networked games,
where the port number is the player number plus 44717.
(these may be overridden with the \fI:port\fR syntax, above).
.P
\fBMaelstrom-netd\fR listens on TCP port 44717.
.P
The global
high\-score server listens on the host \fBdevolution.com\fR, TCP port 4444.
.SH ADD\-ONS
Maelstrom add\-ons consist of replacement sounds, replacement sprites,
or both. Typically, the add\-on content is distributed as a zip file.
.P
There is a collection of Maelstrom add\-on content at
.br
.nh
\fIhttp://www.devolution.com/~slouken/Maelstrom/add-ons.html\fR
.hy
.SS Automated Installation (Preferred)
Use \fBmaelstrom_addon_package.pl\fR to convert the zip
file to a Slackware package, then use \fBinstallpkg\fR to install the
add\-on. Run \fBmaelstrom_addon_package.pl \-\-help\fR for more information.
.SS Manual Installation
Look within the zip file for files named
\fI%Maelstrom_Sprites\fR and/or \fI%Maelstrom_Sounds\fR or similar
(the % may be missing, the _ may be a space, and/or the filenames
may end with .bin). Copy these files to
.P
.nh
\fB/usr/share/games/Maelstrom/%Maelstrom_Sprites\fR
.br
and/or
.br
\fB/usr/share/games/Maelstrom/%Maelstrom_Sounds\fR
.hy
.P
\fBNOTE\fR: \fIThe % is important!\fR
.SS Add\-On Limitations
There is no way to install more than one add\-on at a time, or to disable
the installed add\-on without uninstalling it. There is also no way to
install add\-ons in a user's home directory, or any other place than
the system\-wide game data directory.
.SH FILES
.TP
\fB/usr/share/games/Maelstrom/\fR
game data (images, music, sound)
.TP
\fB$HOME/.Maelstrom\-data\fR
per\-user settings and high\-score records
.SH AUTHORS
The original version of this game was written for the Macintosh by
Andrew Welch, of Ambrosia Software. It was ported to Linux and then
to the Simple DirectMedia Layer library by Sam Lantinga.
.P
Man page created by B. Watson for SlackBuilds.org project (but others
are free to use it)
.SH COPYRIGHT
The source code to Maelstrom 3.0 and higher has been released under
the GNU General Public License which can be found in COPYING.GPL.
.P
The artwork and sounds used by Maelstrom are copyright Ambrosia Software
(http://www.ambrosiasw.com) and may not be redistributed separately from
the Maelstrom GPL source code.

15
games/maelstrom/README Normal file
View file

@ -0,0 +1,15 @@
Maelstrom is a game similar to Asteroids.
You pilot your ship through the dreaded "Maelstrom" asteroid belt --
suddenly your best friend thrusts towards you and fires, directly at your
cockpit. You raise your shields just in time, and the battle is joined.
The deadliest stretch of space known to mankind has just gotten
deadlier.
This package also comes with a script to create Slackware packages
from the Maelstrom add-on graphics/sound files.
Run 'maelstrom_addon_package.pl --help' for more information.
Note to users of 64-bit and other non-x86 Slackware derivatives: you
won't be able to host or join multiplayer games that use a server.
Peer to peer (without the -server argument) multiplayer works OK though.

View file

@ -0,0 +1,14 @@
diff -Naur Maelstrom-3.0.6/screenlib/SDL_FrameBuf.cpp Maelstrom-3.0.6.patched/screenlib/SDL_FrameBuf.cpp
--- Maelstrom-3.0.6/screenlib/SDL_FrameBuf.cpp 2001-07-22 17:03:13.000000000 -0400
+++ Maelstrom-3.0.6.patched/screenlib/SDL_FrameBuf.cpp 2009-04-14 14:15:49.000000000 -0400
@@ -848,8 +848,8 @@
for ( i=0; i<dirtymaplen; ++i ) {
if ( dirtymap[i] != NULL ) {
dirtymap[i] = (SDL_Rect *)(
- ((int)dirtymap[i]-(int)updatelist) +
- (int)newlist
+ ((long)dirtymap[i]-(long)updatelist) +
+ (long)newlist
);
}
}

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
fi

View file

@ -0,0 +1,35 @@
diff -Naur Maelstrom-3.0.6/Makefile.in Maelstrom-3.0.6.patched/Makefile.in
--- Maelstrom-3.0.6/Makefile.in 2002-10-20 00:19:42.000000000 -0400
+++ Maelstrom-3.0.6.patched/Makefile.in 2009-04-14 14:45:59.000000000 -0400
@@ -431,7 +431,7 @@
# Special install rule for the game
install:
- make install_gamedata target=@GAME_INSTALLDIR@
+ make install_gamedata target=$(DESTDIR)/@GAME_INSTALLDIR@
install_gamedata:
sh mkinstalldirs $(target)/
@@ -444,8 +444,8 @@
chmod 666 $(target)/Maelstrom-Scores
install_gamedocs:
- sh mkinstalldirs $(target)/
- cp -rv README* COPYING* Docs* $(target)/
+ sh mkinstalldirs $(DESTDIR)/$(target)/
+ cp -rv README* COPYING* Docs* $(DESTDIR)/$(target)/
# Rule to build tar-gzipped distribution package
$(PACKAGE)-$(VERSION).tar.gz: dist
diff -Naur Maelstrom-3.0.6/configure Maelstrom-3.0.6.patched/configure
--- Maelstrom-3.0.6/configure 2002-10-19 23:43:07.000000000 -0400
+++ Maelstrom-3.0.6.patched/configure 2009-04-14 14:47:33.000000000 -0400
@@ -3232,7 +3232,7 @@
GAME_INSTALLDIR="\$(prefix)/games/$PACKAGE"
;;
*)
- GAME_INSTALLDIR="\$(prefix)/games/$PACKAGE"
+ GAME_INSTALLDIR="\$(prefix)/share/games/$PACKAGE"
;;
esac

View file

@ -0,0 +1,93 @@
#!/bin/sh
# Slackware build script for maelstrom
# Written by B. Watson (yalhcru@gmail.com)
# Note to 64-bit users: Maelstrom-netd and the -server option to Maelstrom
# do not work correctly. I haven't investigated why. You can still play
# networked games in non-server mode (see man page). Users of actual
# Slackware are not affected by this.
PRGNAM=maelstrom
SRCNAM=Maelstrom
VERSION=${VERSION:-3.0.6}
ARCH=${ARCH:-i486}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
cd $SRCNAM-$VERSION
chown -R root:root .
chmod -R a-s,u+w,go+r-w .
# Fix 64-bit compile issue (not needed on 32-bit, but does no harm)
patch -p1 < $CWD/compile_fix.diff
# Install game data in /usr/share/games/Maelstrom, not /usr/games/Maelstrom
# (also make `make install' support DESTDIR properly!)
patch -p1 < $CWD/install_dirs.diff
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--bindir=/usr/games
make
make install DESTDIR=$PKG
strip $PKG/usr/games/*
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
make install_gamedocs target=$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
# Why does `make install' install this?
rm -f $PKG/usr/doc/$PRGNAM-$VERSION/Docs/Makefile
install -m0755 -o root -g root $CWD/maelstrom_addon_package.pl $PKG/usr/games
# CLI users would probably prefer to type 'maelstrom', not 'Maelstrom'
( cd $PKG/usr/games && ln -s $SRCNAM $PRGNAM )
mkdir -p $PKG/usr/share/pixmaps
( cd $PKG/usr/share/pixmaps
ln -s ../games/$SRCNAM/icon.xpm $PRGNAM.xpm
)
mkdir -p $PKG/usr/share/applications
cp $CWD/$PRGNAM.desktop $PKG/usr/share/applications
mkdir -p $PKG/usr/man/man6
gzip -9c $CWD/$SRCNAM.6 > $PKG/usr/man/man6/$SRCNAM.6.gz
( cd $PKG/usr/man/man6
ln -s $SRCNAM.6.gz $PRGNAM.6.gz
ln -s $SRCNAM.6.gz $SRCNAM-netd.6.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.tgz

View file

@ -0,0 +1,8 @@
[Desktop Entry]
Encoding=UTF-8
Name=Maelstrom
Exec=Maelstrom
Type=Application
Icon=maelstrom
GenericName=Maelstrom
Categories=Game;Arcade;

View file

@ -0,0 +1,8 @@
PRGNAM="maelstrom"
VERSION="3.0.6"
HOMEPAGE="http://www.devolution.com/~slouken/Maelstrom/"
DOWNLOAD="http://www.devolution.com/~slouken/Maelstrom/src/Maelstrom-3.0.6.tar.gz"
MD5SUM="4fbeb6070eebdf161bd156b083b8804e"
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"
APPROVED="dsomero"

View file

@ -0,0 +1,168 @@
#!/usr/bin/perl -w
# maelstrom_addon_package.pl - create a Slackware tgz
# package from a Maelstrom addon zip file, for use with
# the SlackBuilds.org maelstrom package.
# Beware: only *one* addon may be installed at a time!
# This script is meant to work on a stock Slackware system, so it
# doesn't use any CPAN modules (which makes the code a bit awkward).
# Author: B. Watson (yalhcru@gmail.com)
# This program is released into the public domain; do as ye list wi' her.
# Author not responsible for any damages resulting from the use of this
# program.
use strict;
use File::Find; # core Perl module, not CPAN
our $GAMEDIR = "/usr/share/games/Maelstrom";
chomp(our $pkgver = `date +%Y%m%d`);
our $pkgname;
our $spritefile;
our $soundfile;
our @text_files;
sub usage() {
warn <<EOF;
Usage: maelstrom_addon_package.pl zipfile [pkgname]
Creates a Slackware tgz package from a Maelstrom addon zip file. The
zipfile may be either a local file (e.g. "my_addon.zip") or a URL
(e.g. "http://example.com/foo_addon.zip").
The output file will be located in /tmp, and will be named
maelstrom_addon_pkgname-YYYYMMDD-noarch-1_mael.tgz
where pkgname is the [pkgname] argument, or derived from the zipfile name if
no [pkgname] is given on the command line, and YYYYMMDD is the current date.
The resulting .tgz package is suitable for installation with installpkg.
However, only one Maelstrom addon package may be installed at a time
(since the addon filenames are the same, the 2nd one would overwrite the
first one).
Since the script must be able to create files as the root user, you
must run it with root privileges (e.g. with su or sudo).
You can find a collection of Maelstrom add-on zip files here:
http://www.devolution.com/~slouken/Maelstrom/add-ons.html
EOF
exit 1;
}
sub make_temp_dir() {
my $dir = "/tmp/maelstrom_addon_" . rand(10000000) . $$;
system("mkdir -p \"$dir\"") && die "can't create $dir\n";
return $dir;
}
sub extract($$) {
my $tmpdir = shift;
my $archive = shift;
system("cd \"$tmpdir\" && unzip \"$archive\"") &&
die "can't extract $archive in $tmpdir\n";
}
sub cleanup(@) {
for my $tmpdir (@_) {
system("cd \"$tmpdir\" && rm -rf *");
system("cd / && rmdir \"$tmpdir\"");
}
}
sub make_slack_desc($) {
my $package_dir = shift;
mkdir($package_dir . "/install");
open my $f, ">$package_dir/install/slack-desc";
print $f "$pkgname: Maelstrom add-on sprites/sound package\n";
print $f "$pkgname:\n" for (1..10);
close $f;
}
sub copy_files($) {
my $package_dir = shift;
system("mkdir -p $package_dir/usr/share/games/Maelstrom");
system("mkdir -p $package_dir/usr/doc/$pkgname-$pkgver");
system("cp \"$_\" $package_dir/usr/doc/$pkgname-$pkgver") for @text_files;
if($spritefile) {
system("cp \"$spritefile\" " .
"$package_dir/usr/share/games/Maelstrom/\%Maelstrom_Sprites");
}
if($soundfile) {
system("cp \"$soundfile\" " .
"$package_dir/usr/share/games/Maelstrom/\%Maelstrom_Sounds");
}
}
sub wanted {
my $file = $File::Find::fullname;
if(/\.txt$/i) {
warn "Found text file: $file\n";
push @text_files, $file;
} elsif(/\%?maelstrom.sounds(?:\..*)?$/i) {
warn "Found sounds: $file\n";
warn "warning: Duplicate sounds file $file\n" if $soundfile;
$soundfile = $file;
} elsif(/\%?maelstrom.sprites(?:\..*)?$/i) {
warn "Found sprites: $file\n";
warn "warning: Duplicate sprites file $file\n" if $spritefile;
$spritefile = $file;
}
}
# main()
my $archive = shift || usage();
usage() if $archive =~ /^--?(?:\?|h(?:elp)?)/i;
die "You must run this script as root\n" if $> != 0;
$pkgname = shift || $archive;
for($pkgname) {
s/.*\///;
s/\..*//;
s/-/_/g;
s/\W//g;
y/A-Z/a-z/;
}
die "Invalid package name\n" unless $pkgname;
$pkgname =~ s/^/maelstrom_addon_/;
if($archive =~ /^(?:ht|f)tps?:\/\//) {
system("wget -O /tmp/$pkgname.zip \"$archive\"");
$archive = "/tmp/$pkgname.zip";
}
my $unzip_dir = make_temp_dir();
extract($unzip_dir, $archive);
find({ wanted => \&wanted, follow => 1 }, $unzip_dir);
unless($spritefile or $soundfile) {
die "Can't find any sprites or sounds, aborting\n";
}
my $package_dir = make_temp_dir();
copy_files($package_dir);
make_slack_desc($package_dir);
chdir($package_dir) or die $!;
system("/sbin/makepkg -l y -c y /tmp/$pkgname-$pkgver-noarch-1_mael.tgz");
chdir("/");
cleanup($package_dir, $unzip_dir);

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------------------------------------------------------|
maelstrom: maelstrom (a game similar to Asteroids)
maelstrom:
maelstrom: You pilot your ship through the dreaded "Maelstrom" asteroid belt --
maelstrom: suddenly your best friend thrusts towards you and fires, directly
maelstrom: at your cockpit. You raise your shields just in time, and the battle
maelstrom: is joined. The deadliest stretch of space known to mankind has just
maelstrom: gotten deadlier.
maelstrom:
maelstrom:
maelstrom:
maelstrom: