diff options
author | Martin Wilke <miwi@FreeBSD.org> | 2013-02-04 09:38:05 +0000 |
---|---|---|
committer | Martin Wilke <miwi@FreeBSD.org> | 2013-02-04 09:38:05 +0000 |
commit | 232ac32ead8f5bad0967a522cb0fd1fa45f3c291 (patch) | |
tree | 379f195874e647ea1a21e17fc374efb22b966587 /games/xasteroids | |
parent | 63a50f4df38055166891bbdf4170393cb7ff9fed (diff) | |
download | ports-232ac32ead8f5bad0967a522cb0fd1fa45f3c291.tar.gz ports-232ac32ead8f5bad0967a522cb0fd1fa45f3c291.zip |
Notes
Diffstat (limited to 'games/xasteroids')
-rw-r--r-- | games/xasteroids/Makefile | 35 | ||||
-rw-r--r-- | games/xasteroids/files/Imakefile | 9 | ||||
-rw-r--r-- | games/xasteroids/files/patch-xast.c | 421 | ||||
-rw-r--r-- | games/xasteroids/files/patch-xast.man | 122 |
4 files changed, 565 insertions, 22 deletions
diff --git a/games/xasteroids/Makefile b/games/xasteroids/Makefile index b924a8f61e25..ff885c144886 100644 --- a/games/xasteroids/Makefile +++ b/games/xasteroids/Makefile @@ -1,31 +1,40 @@ -# New ports collection makefile for: xasteroids -# Date created: 3 Jan 1995 -# Whom: swallace -# +# Created by: swallace # $FreeBSD$ -# PORTNAME= xasteroids PORTVERSION= 5.0 PORTREVISION= 2 CATEGORIES= games -MASTER_SITES= ftp://ftp.x.org/R5contrib/ -DISTFILES= xasteroids.sh.Z +MASTER_SITES= XCONTRIB/../R5contrib +DISTNAME= ${PORTNAME} +EXTRACT_SUFX= .sh.Z MAINTAINER= ports@FreeBSD.org COMMENT= X11 based asteroids style arcade game -USE_IMAKE= yes -USE_XORG= x11 xext -NO_WRKSUBDIR= yes -EXTRACT_CMD= ( cd ${WRKDIR}; zcat | sh -s ) +EXTRACT_CMD= ( cd ${WRKDIR}; zcat | ${SH} -s ) EXTRACT_BEFORE_ARGS= < EXTRACT_AFTER_ARGS= # empty + +NO_WRKSUBDIR= yes + +USE_XORG= x11 xext + +CPPFLAGS+= -I${LOCALBASE}/include +LDFLAGS+= -L${LOCALBASE}/lib -lXext -lX11 -lm + MAN6= xasteroids.6 PLIST_FILES= bin/xasteroids post-extract: - ${CP} ${FILESDIR}/Imakefile ${WRKSRC} - ${CP} ${WRKSRC}/xast.man ${WRKSRC}/xasteroids.man + @${LN} -sf xast.man ${WRKSRC}/xasteroids.6 + +do-build: + (cd ${WRKSRC} && ${CC} ${CPPFLAGS} ${CFLAGS} -o xasteroids xast.c \ + ${LDFLAGS}) + +do-install: + (cd ${WRKSRC} && ${INSTALL_PROGRAM} xasteroids ${PREFIX}/bin) + (cd ${WRKSRC} && ${INSTALL_MAN} xasteroids.6 ${MAN6PREFIX}/man/man6) .include <bsd.port.mk> diff --git a/games/xasteroids/files/Imakefile b/games/xasteroids/files/Imakefile deleted file mode 100644 index 638c39d55691..000000000000 --- a/games/xasteroids/files/Imakefile +++ /dev/null @@ -1,9 +0,0 @@ - LOCAL_LIBRARIES = -lm $(XLIB) - - MANSUFFIX=6 - - OBJS = xast.o - - SRCS = xast.c - - ComplexProgramTarget(xasteroids) diff --git a/games/xasteroids/files/patch-xast.c b/games/xasteroids/files/patch-xast.c new file mode 100644 index 000000000000..f426eaf6f3f7 --- /dev/null +++ b/games/xasteroids/files/patch-xast.c @@ -0,0 +1,421 @@ +--- xast.c.orig ++++ xast.c +@@ -3,6 +3,13 @@ + goetz@cs.buffalo.EDU + Version 5, 9 Feb 93 + ++ Changes after version 5.0: ++ ++ Improved cursor-hiding. ++ Arrow keys. ++ ANSI-C cleanups. ++ Use usleep() instead of a delay loop, when available. ++ + Changes from version 4.3: + + High score script. +@@ -27,16 +34,30 @@ + Pat Ryan <pat@jaameri.gsfc.nasa.gov> + Craig Smith <csmith@cscs.UUCP> + Doug Merritt <doug@netcom.com> ++ Stephen McCamant <alias@mcs.com> + Makefile by James Berg <berg@plains> + Hi score script by Chris Moore <moore@src.bae.co.uk> + Man page by David Partain <dpl@ida.liu.se> + */ + #include <stdio.h> /* For NULL */ ++#include <stdlib.h> /* For malloc(), rand() etc */ ++#include <string.h> /* For srtlen() */ ++#include <time.h> /* For time() */ + #include <X11/Xlib.h> + #include <X11/Xutil.h> +-#include <X11/cursorfont.h> /* For erasing cursor - not important */ ++#include <X11/keysym.h> + #include <math.h> + ++#ifdef HAS_USLEEP ++#include <unistd.h> ++#endif ++ ++#ifndef __STDC__ ++define void ++#endif ++ ++#define rand(rndint) rand() /* ??? */ ++ + /* Indexes for 1st dimension of obj */ + /* The order they are in is important */ + #define AST 0 +@@ -68,10 +89,10 @@ + #define M_BULLET 0.1 + + /* Keys */ +-#define FIRE 'p' +-#define PAUSE 27 /* escape */ +-#define SHIELD '`' +-#define THRUST 'o' ++#define FIRE XK_p ++#define PAUSE XK_Escape /* escape */ ++#define SHIELD XK_grave /* ` */ ++#define THRUST XK_o + + #define BMAX 300 /* Max particles in a "boom" + 1 */ + #define letheight 20 /* height of font */ +@@ -121,6 +142,7 @@ + shapesize[LASTSHAPE+1] = {44, 21, 10, 2, 1, SHIPSIZE+1, 35, 20}, + shield_on; + ++void + initasts() + { int i; + extern Objtype obj[SHIP+1]; +@@ -143,6 +165,7 @@ + obj[i].mass = M_BULLET; + } } + ++void + makeasts() + { int i; + extern Objtype obj[SHIP+1]; +@@ -163,7 +186,7 @@ + if (a > 63) + obj[i].y = (double) a; + else obj[i].y = (double) height - a; +- a = rand(rndint); a = 4 - a>>5; ++ a = rand(rndint); a = 4 - (a>>5); + obj[i].rot = (double) a; + a = rand(rndint); + obj[i].rotvel = ((double) a)/2048; +@@ -177,6 +200,7 @@ + numasts = i; + } + ++void + makeenemy() /* Start an enemy ship */ + { extern Objtype obj[SHIP+1]; + extern int height, level, rndint; +@@ -258,6 +282,7 @@ + return 0; + } + ++void + blastpair(i, j) /* Generate random velocity vector v. */ + int i, j ; /* Add v to i, -v to j. */ + { extern int rndint; +@@ -266,7 +291,7 @@ + double vx, vy; + c = rand(rndint); + /* c = 4 - c>>5; if you need angles from -3 to 4 */ +- c>>2; /* possibly save some time on sin/cos */ ++ c >>= 2; /* possibly save some time on sin/cos */ + vx = cos((double) c); vy = sin((double) c); + obj[i].xvel = obj[i].xvel + vx; + obj[i].yvel = obj[i].yvel + vy; +@@ -282,6 +307,7 @@ + #define rotinert(i) (double) (obj[i].mass*shapesize[obj[i].shape]*shapesize[obj[i].shape]) + + /* cause two objects to collide elastically */ ++void + bounce(i, j) + int i,j; + { +@@ -345,6 +371,7 @@ + obj[j].rotvel = temp; + } + ++void + botline(disp, window, gc) /* Print status line text */ + Display *disp; + Drawable window; +@@ -357,6 +384,7 @@ + text, strlen(text)); + } + ++void + printss(disp, window, gc) /* Print ships and score */ + Display *disp; + Drawable window; +@@ -389,6 +417,7 @@ + XClearArea(disp, window, 340+(energy>>1), height+8, 8, 10, False); + } + ++void + upscore(killer, up) /* Only award score for things the player shot */ + int killer, up; + { extern int score; +@@ -397,6 +426,7 @@ + } + + /* boom, movebooms, drawbooms all by Peter Phillips */ ++void + boom(ob, particles, duration) + int ob; + int particles; +@@ -429,6 +459,7 @@ + } + + /* move the various booms that are active */ ++void + movebooms() + { + int i; +@@ -461,6 +492,7 @@ + } + + /* Draw the various booms */ ++void + drawbooms(disp, window, gc) + Display *disp; + Drawable window; +@@ -481,6 +513,7 @@ + } + } + ++void + deletebooms() /* delete all booms */ + { Boom b; + +@@ -490,11 +523,12 @@ + b = b->next; + } } + ++void + killast(killer, i) + int killer, i; /* i = Asteroid # to kill */ + { extern Objtype obj[SHIP+1]; + extern int numasts; +- int k, na, oldna; ++ int k, na = 0, oldna; + + if (obj[i].shape == ASTSHAPE1) + { na = nextast(); /* Could put 6 lines in a sub */ +@@ -543,6 +577,8 @@ + { boom(i, 9, 7); + obj[i].alive = 0; upscore(killer, 500);} + } ++ ++void + moveobjs(crash) + int *crash; + { extern Objtype obj[SHIP+1]; +@@ -585,6 +621,7 @@ + } + } + ++void + fire() + { extern Objtype obj[SHIP+1]; + extern int width, nextbul; +@@ -603,6 +640,7 @@ + nextbul++; if (nextbul == LASTBUL+1) nextbul = FBUL; + } + ++void + hyper() + { extern Objtype obj[SHIP+1]; + extern int width, height, rndint; +@@ -617,6 +655,7 @@ + obj[SHIP].y = (double) i; + } + ++void + vdraw(disp, window, gc, shape, x, y, rot) + Display *disp; + Drawable window; +@@ -639,6 +678,7 @@ + XDrawLines (disp, window, gc, figure, numpairs[shape], CoordModePrevious); + } + ++int + main(argc, argv) + int argc; + char **argv; +@@ -663,8 +703,8 @@ + extern int level, numasts, rndint, ships, score, oldscore; + extern Objtype obj[SHIP+1]; + unsigned char c; /* for rand */ +- double *temp, dx, dy, dist; +- int crashed, flashon, len, pause = 0, delay = 64, ++ double dx, dy, dist; ++ int crashed, flashon, pause = 0, delay = 64, + enemycount, counter, counterstart = 1, + i, /* index for drawing objs, counting bullets */ + r; /* radius of shield circle */ +@@ -704,11 +744,30 @@ + KeyPressMask | KeyReleaseMask | StructureNotifyMask); + XMapRaised (disp, window); + +- /* Erase cursor. Just delete next 5 lines if any error. */ ++ /* Make cursor invisible. Just delete chunk if any error. */ + cmap = XDefaultColormap(disp, screen); + XAllocNamedColor(disp, cmap, "Black", &exact, &black); ++#if 0 /* Easy way, but can leave a black spot */ ++#include <X11/cursorfont.h> + cursor = XCreateFontCursor(disp, XC_dot); + XRecolorCursor(disp, cursor, &black, &black); ++#else /* Hard, good way */ ++ { unsigned wd, ht; ++ Pixmap pm, maskpm; ++ GC cleargc; ++ XQueryBestCursor(disp, window, 1, 1, &wd, &ht); ++ pm = XCreatePixmap(disp, window, wd, ht, 1); ++ maskpm = XCreatePixmap(disp, window, wd, ht, 1); ++ cleargc = XCreateGC(disp, pm, 0, 0); ++ XFillRectangle(disp, pm, cleargc, 0, 0, wd, ht); ++ XFillRectangle(disp, maskpm, cleargc, 0, 0, wd, ht); ++ cursor = XCreatePixmapCursor(disp, pm, maskpm, ++ &black, &black, 1, 1); ++ XFreePixmap(disp, pm); ++ XFreePixmap(disp, maskpm); ++ XFreeGC(disp, cleargc); ++ } ++#endif + XDefineCursor(disp, window, cursor); + + XFillRectangle (disp, pixmap, pmgc, 0, 0, width, height); +@@ -746,7 +805,7 @@ + { XNextEvent(disp, &event); + switch (event.type) + { case MappingNotify: +- XRefreshKeyboardMapping (&event); ++ XRefreshKeyboardMapping ((XMappingEvent *)&event); + break; + case ConfigureNotify: + width = event.xconfigure.width; +@@ -757,28 +816,29 @@ + botline(disp, window, gc); + break; + case KeyPress: +- len = XLookupString (&event, text, 10, &key, 0); +- if (len == 1 && !shield_on) switch (text[0]) +- { case 'e': ++ key = XLookupKeysym ((XKeyEvent *)&event, 0); ++ if (!shield_on) switch (key) ++ { case XK_Left: case XK_e: + obj[SHIP].rotvel = obj[SHIP].rotvel - .1; break; +- case 'r': ++ case XK_Right: case XK_r: + obj[SHIP].rotvel = obj[SHIP].rotvel + .1; break; +- case 'w': ++ case XK_w: + obj[SHIP].rot -= pi/4; break; +- case 't': ++ case XK_t: + obj[SHIP].rot += pi/4; break; +- case 'd': ++ case XK_d: + obj[SHIP].rotvel = obj[SHIP].rotvel - .02; break; +- case 'f': ++ case XK_f: + obj[SHIP].rotvel = obj[SHIP].rotvel + .02; break; +- case THRUST: ++ case XK_Up: case THRUST: + obj[SHIP].xvel += cos(obj[SHIP].rot); + obj[SHIP].yvel += sin(obj[SHIP].rot); + obj[SHIP].shape = SHIPTHRSHAPE; + break; ++ case XK_Control_L: case XK_Control_R: + case FIRE: + if (obj[SHIP].alive) fire(); break; +- case ' ': ++ case XK_space: + if (obj[SHIP].alive) + { hyper(); flashon = 1; + /* NOT XSetForeground (disp, gc, bg); +@@ -787,52 +847,55 @@ + XFillRectangle (disp, pixmap, pmgc, 0, 0, width, height); + } + break; +- case SHIELD: ++ case XK_Down: case SHIELD: + if (energy) + { shield_on = 1; + obj[SHIP].shape = SHIPSHAPE;} + break; +- case '.': /* decrease delay */ ++ case XK_period: /* decrease delay */ + if (delay > 1) delay >>=1; break; +- case ',': /* increase delay */ ++ case XK_comma: /* increase delay */ + delay <<=1; break; +- case 'm': /* decrease drawscale - may go negative */ ++ case XK_m: /* decrease drawscale - may go negative */ + drawscale -= .1; break; +- case 'n': /* increase drawscale */ ++ case XK_n: /* increase drawscale */ + drawscale += .1; break; +- case '2': /* increase speedscale */ ++ case XK_2: /* increase speedscale */ + speedscale += .1; break; +- case '1': /* decrease speedscale */ ++ case XK_1: /* decrease speedscale */ + speedscale -= .1; break; +- case 'b': /* increase moves/update */ ++ case XK_b: /* increase moves/update */ + counterstart++; break; +- case 'v': /* decrease moves/update */ ++ case XK_v: /* decrease moves/update */ + if (counterstart > 1) counterstart--; + break; + case PAUSE: /* pause */ + pause = 1 - pause; break; +- case '+': /* cheat */ ++ case XK_plus: /* cheat */ + ships++; botline(disp, window, gc); break; +- case 'Q': /* quit */ +- goto End; +- case 's': /* start new ship */ +- if (!obj[SHIP].alive) ++ case XK_q: /* quit */ ++ if (event.xkey.state & ShiftMask) ++ goto End; ++ break; ++ case XK_s: /* start new ship */ ++ if (!obj[SHIP].alive) { + if (ships < 1) goto Newgame; + else goto Newship; ++ } + break; + } + break; + case KeyRelease: +- len = XLookupString(&event, text, 10, &key, 0); +- if (len == 1) switch (text[0]) +- { case 'e': ++ key = XLookupKeysym((XKeyEvent *)&event, 0); ++ switch (key) ++ { case XK_Left: case XK_e: + obj[SHIP].rotvel = 0; break; +- case 'r': ++ case XK_Right: case XK_r: + obj[SHIP].rotvel = 0; break; +- case THRUST: ++ case XK_Up: case THRUST: + obj[SHIP].shape = SHIPSHAPE; + break; +- case SHIELD: ++ case XK_Down: case SHIELD: + shield_on = 0; break; + } + /* break; */ +@@ -850,7 +913,7 @@ + botline(disp, window, gc); + } + /* Write copyright notice */ +- if (!ships && blist == NULL) ++ if (!ships) + { sprintf(text, "Xasteroids"); + XDrawImageString (disp, pixmap, gc, + width/2-50, height/2-2*letheight, +@@ -917,7 +980,11 @@ + } + else obj[ENEMYBUL].alive = 0; + } ++#ifdef HAS_USLEEP ++ usleep(delay); ++#else + for (i = 0; i < delay; i++); ++#endif + } + } + } diff --git a/games/xasteroids/files/patch-xast.man b/games/xasteroids/files/patch-xast.man new file mode 100644 index 000000000000..ca47d46783a1 --- /dev/null +++ b/games/xasteroids/files/patch-xast.man @@ -0,0 +1,122 @@ +--- xast.man.orig ++++ xast.man +@@ -1,9 +1,9 @@ +-.TH xasteroids n ++.TH xasteroids 6 + .SH NAME + xasteroids - X windows based asteroids style arcade game + .SH SYNOPSIS +-.ta 8n +-\fBxasteroids\fP ++.ta 6 ++\fBxasteroids\fP [-s] + .br + .SH DESCRIPTION + Make big rocks into little ones. +@@ -11,60 +11,70 @@ + .SH COMMANDS + .I xasteroids + +- e Rotate counterclockwise ("left") +- r Rotate clockwise ("right") +- w Rotate 45 degrees counterclockwise +- t Rotate 45 degrees clockwise +- d Increase counterclockwise rotational velocity +- f Increase clockwise rotational velocity +- o Thrust +- p Fire +- ` Shields +- space Hyperspace +- s Start new ship in center of playing field +- (Also used to start a new game) +- esc Pause +- Q Quit ++.ft CW ++ e Left Arrow Rotate counterclockwise ("left") ++ r Right Arrow Rotate clockwise ("right") ++ w Rotate 45 degrees counterclockwise ++ t Rotate 45 degrees clockwise ++ d Increase CCWise rotational velocity ++ f Increase clockwise rotational velocity ++ o Up Arrow Thrust ++ p Control Fire ++ ` Down Arrow Shields ++ space Hyperspace ++ s Start new ship in center of playing field ++ (Also used to start a new game) ++ esc Pause ++ Q Quit ++.ft R + + Speed commands: Key associated with faster speed is to the right of its +- corresponding key associated with slower speed. ++corresponding key associated with slower speed. + +- . Decrease delay: Speed game up +- , Increase delay: Slow the game down +- m Decrease size ("Minimize") +- n Increase size +- b Increase # of moves/frame +- v Decrease # of moves/frame +- 2 Increase scale of movement +- 1 Decrease scale of movement ++.ft CW ++ . Decrease delay: Speed game up ++ , Increase delay: Slow the game down ++ m Decrease size ("Minimize") ++ n Increase size ++ b Increase # of moves/frame ++ v Decrease # of moves/frame ++ 2 Increase scale of movement ++ 1 Decrease scale of movement + + Object Score + +- Big asteroid 25, or 2000*level if it is the last asteroid remaining +- Medium asteroid 50, or 500*level if it is the last asteroid remaining ++ Big asteroid 25, or ++ 2000*level if last asteroid remaining ++ Medium asteroid 50, or ++ 500*level if last asteroid remaining + Little asteroid 100 + Enemy spaceship 500 + Enemy bullet 500 ++.ft R + + Commands can only be entered when the mouse pointer is in the + asteroids window. + + Resize the window with your window manager + at any time for a different playing field. +- +-.SH OPTIONS +-.I xasteroids [-s] +--s Display high scores without running game. + .PP + .SH AUTHOR + Phil Goetz + .br + goetz@cs.Buffalo.EDU + .SH CONTRIBUTORS +-Peter Phillips pphillip@cs.ubc.ca +-Pat Ryan pat@jaameri.gsfc.nasa.gov +-Craig Smith csmith@cscs.UUCP +-Doug Merritt doug@netcom.com +-James Berg berg@plains (makefile) +-Chris Moore moore@src.bae.co.uk (hi score script) +-David Partain dlp@ida.liu.se (original man page) ++Peter Phillips <pphillip@cs.ubc.ca> ++.br ++Pat Ryan <pat@jaameri.gsfc.nasa.gov> ++.br ++Craig Smith <csmith@cscs.UUCP> ++.br ++Doug Merritt <doug@netcom.com> ++.br ++Stephen McCamant <alias@mcs.com> ++.br ++James Berg <berg@plains> (makefile) ++.br ++Chris Moore <moore@src.bae.co.uk> (hi score script) ++.br ++David Partain <dlp@ida.liu.se> (original man page) |