[comp.sources.x] v08i062: xinvaders -- space invaders for X, Part01/05

jgoldman@parc.xerox.com (Jonny Goldman) (08/04/90)

Submitted-by: Jonny Goldman <jgoldman@parc.xerox.com>
Posting-number: Volume 8, Issue 62
Archive-name: xinvaders/part01

[ the README is the first file in this archive -- page ahead to read it. ]

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  README base.bit sperma.bit vader1b.bit vader3a.bit
#   explode.bit spermb.bit vader2a.bit vader3b.bit spacer.bit
#   vader1a.bit vader2b.bit patchlevel.h vaders.h spacers.c base.c
#   widget.c main.c vaders.c shot.c score.c xinvaders.ma Imakefile
#   Makefile
# Wrapped by jgoldman@philo on Wed Aug  1 13:44:31 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(1182 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XThis is the README file for the XINVADERS game by Jonny Goldman, based on
Xthe ideas and code of Terry Weissman's roids program.
X
XFirst:
X
XAuthor:
X
X Jonny Goldman <jgoldman@parc.xerox.com>
X
XDistribution Policy:
X
X Anyway you see fit, just give me credit, and software
X may not be sold for profit.
X
XCopyright notice:
X
X This is mine.  I'm only letting you use it.  Period.  Feel free to rip off
X any of the code you see fit, but have the courtesy to give me credit.
X Otherwise great hairy beasties will rip your eyes out and eat your flesh
X when you least expect it.
X
XThis archived contains the following files:
X
X README		- this file
X
X base.bit	- shape data for the game
X sperma.bit
X vader1b.bit
X vader3a.bit
X explode.bit
X spermb.bit
X vader2a.bit
X vader3b.bit
X spacer.bit
X vader1a.bit
X vader2b.bit
X 
X patchlevel.h   - the current patch level (0 for this release)
X vaders.h	- the one and only (real) include file
X 
X spacers.c	- sources
X base.c
X widget.c
X main.c
X vaders.c
X shot.c
X score.c
X
X xinvaders.ma	- a man page (you can add the n at the end).
X
X Makefile	- an example Makefile
X
XThis game is known to compile on Sun4's running SunOS 4.0.3., and runs
Xunder MIT's X11/R4 window system.
END_OF_FILE
if test 1182 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'base.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'base.bit'\"
else
echo shar: Extracting \"'base.bit'\" \(215 characters\)
sed "s/^X//" >'base.bit' <<'END_OF_FILE'
X#define explosion_width 15
X#define explosion_height 10
Xstatic char explosion_bits[] = {
X   0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xfe, 0x3f, 0xff, 0x7f,
X   0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f};
END_OF_FILE
if test 215 -ne `wc -c <'base.bit'`; then
    echo shar: \"'base.bit'\" unpacked with wrong size!
fi
# end of 'base.bit'
fi
if test -f 'sperma.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'sperma.bit'\"
else
echo shar: Extracting \"'sperma.bit'\" \(123 characters\)
sed "s/^X//" >'sperma.bit' <<'END_OF_FILE'
X#define sperma_width 3
X#define sperma_height 7
Xstatic char sperma_bits[] = {
X   0x02, 0x01, 0x02, 0x04, 0x02, 0x01, 0x02};
END_OF_FILE
if test 123 -ne `wc -c <'sperma.bit'`; then
    echo shar: \"'sperma.bit'\" unpacked with wrong size!
fi
# end of 'sperma.bit'
fi
if test -f 'vader1b.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader1b.bit'\"
else
echo shar: Extracting \"'vader1b.bit'\" \(132 characters\)
sed "s/^X//" >'vader1b.bit' <<'END_OF_FILE'
X#define vader1b_width 8
X#define vader1b_height 8
Xstatic char vader1b_bits[] = {
X   0x18, 0x3c, 0x7e, 0xdb, 0xff, 0x5a, 0x24, 0x42};
END_OF_FILE
if test 132 -ne `wc -c <'vader1b.bit'`; then
    echo shar: \"'vader1b.bit'\" unpacked with wrong size!
fi
# end of 'vader1b.bit'
fi
if test -f 'vader3a.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader3a.bit'\"
else
echo shar: Extracting \"'vader3a.bit'\" \(184 characters\)
sed "s/^X//" >'vader3a.bit' <<'END_OF_FILE'
X#define vader3a_width 12
X#define vader3a_height 8
Xstatic char vader3a_bits[] = {
X   0xf0, 0x00, 0xfe, 0x07, 0xff, 0x0f, 0x67, 0x0e, 0xff, 0x0f, 0x9c, 0x03,
X   0x66, 0x06, 0x0c, 0x03};
END_OF_FILE
if test 184 -ne `wc -c <'vader3a.bit'`; then
    echo shar: \"'vader3a.bit'\" unpacked with wrong size!
fi
# end of 'vader3a.bit'
fi
if test -f 'explode.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'explode.bit'\"
else
echo shar: Extracting \"'explode.bit'\" \(215 characters\)
sed "s/^X//" >'explode.bit' <<'END_OF_FILE'
X#define explosion_width 15
X#define explosion_height 10
Xstatic char explosion_bits[] = {
X   0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0x20, 0x02, 0x3e, 0x3e, 0x0d, 0x50,
X   0x15, 0x48, 0x6d, 0x5b, 0x65, 0x4b, 0xff, 0x7f};
END_OF_FILE
if test 215 -ne `wc -c <'explode.bit'`; then
    echo shar: \"'explode.bit'\" unpacked with wrong size!
fi
# end of 'explode.bit'
fi
if test -f 'spermb.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'spermb.bit'\"
else
echo shar: Extracting \"'spermb.bit'\" \(123 characters\)
sed "s/^X//" >'spermb.bit' <<'END_OF_FILE'
X#define spermb_width 3
X#define spermb_height 7
Xstatic char spermb_bits[] = {
X   0x02, 0x04, 0x02, 0x01, 0x02, 0x04, 0x02};
END_OF_FILE
if test 123 -ne `wc -c <'spermb.bit'`; then
    echo shar: \"'spermb.bit'\" unpacked with wrong size!
fi
# end of 'spermb.bit'
fi
if test -f 'vader2a.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader2a.bit'\"
else
echo shar: Extracting \"'vader2a.bit'\" \(184 characters\)
sed "s/^X//" >'vader2a.bit' <<'END_OF_FILE'
X#define vader2a_width 10
X#define vader2a_height 8
Xstatic char vader2a_bits[] = {
X   0x84, 0x00, 0x48, 0x00, 0xfc, 0x00, 0xb6, 0x01, 0xff, 0x03, 0xfd, 0x02,
X   0x85, 0x02, 0x48, 0x00};
END_OF_FILE
if test 184 -ne `wc -c <'vader2a.bit'`; then
    echo shar: \"'vader2a.bit'\" unpacked with wrong size!
fi
# end of 'vader2a.bit'
fi
if test -f 'vader3b.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader3b.bit'\"
else
echo shar: Extracting \"'vader3b.bit'\" \(184 characters\)
sed "s/^X//" >'vader3b.bit' <<'END_OF_FILE'
X#define vader3b_width 12
X#define vader3b_height 8
Xstatic char vader3b_bits[] = {
X   0xf0, 0x00, 0xfe, 0x07, 0xff, 0x0f, 0x67, 0x0e, 0xff, 0x0f, 0x9c, 0x03,
X   0x66, 0x06, 0x03, 0x0c};
END_OF_FILE
if test 184 -ne `wc -c <'vader3b.bit'`; then
    echo shar: \"'vader3b.bit'\" unpacked with wrong size!
fi
# end of 'vader3b.bit'
fi
if test -f 'spacer.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'spacer.bit'\"
else
echo shar: Extracting \"'spacer.bit'\" \(181 characters\)
sed "s/^X//" >'spacer.bit' <<'END_OF_FILE'
X#define spacer_width 16
X#define spacer_height 8
Xstatic char spacer_bits[] = {
X   0xc0, 0x03, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xb6, 0x6d, 0xff, 0xff,
X   0x1c, 0x38, 0x08, 0x10};
END_OF_FILE
if test 181 -ne `wc -c <'spacer.bit'`; then
    echo shar: \"'spacer.bit'\" unpacked with wrong size!
fi
# end of 'spacer.bit'
fi
if test -f 'vader1a.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader1a.bit'\"
else
echo shar: Extracting \"'vader1a.bit'\" \(132 characters\)
sed "s/^X//" >'vader1a.bit' <<'END_OF_FILE'
X#define vader1a_width 8
X#define vader1a_height 8
Xstatic char vader1a_bits[] = {
X   0x18, 0x3c, 0x7e, 0xdb, 0xff, 0x5a, 0x81, 0x42};
END_OF_FILE
if test 132 -ne `wc -c <'vader1a.bit'`; then
    echo shar: \"'vader1a.bit'\" unpacked with wrong size!
fi
# end of 'vader1a.bit'
fi
if test -f 'vader2b.bit' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vader2b.bit'\"
else
echo shar: Extracting \"'vader2b.bit'\" \(184 characters\)
sed "s/^X//" >'vader2b.bit' <<'END_OF_FILE'
X#define vader2b_width 10
X#define vader2b_height 8
Xstatic char vader2b_bits[] = {
X   0x84, 0x00, 0x49, 0x02, 0xfd, 0x02, 0xb7, 0x03, 0xfe, 0x01, 0xfc, 0x00,
X   0x84, 0x00, 0x02, 0x01};
END_OF_FILE
if test 184 -ne `wc -c <'vader2b.bit'`; then
    echo shar: \"'vader2b.bit'\" unpacked with wrong size!
fi
# end of 'vader2b.bit'
fi
if test -f 'patchlevel.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patchlevel.h'\"
else
echo shar: Extracting \"'patchlevel.h'\" \(398 characters\)
sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE'
X/* 
XCopyright notice:
X
XThis is mine.  I'm only letting you use it.  Period.  Feel free to rip off
Xany of the code you see fit, but have the courtesy to give me credit.
XOtherwise great hairy beasties will rip your eyes out and eat your flesh
Xwhen you least expect it.
X
XJonny Goldman <jgoldman@parc.xerox.com>
X
XTue Jul 17 1990
X*/
X
X/* patchlevel.h -- patchlevel for xinvaders */
X
X#define PATCHLEVEL 0
END_OF_FILE
if test 398 -ne `wc -c <'patchlevel.h'`; then
    echo shar: \"'patchlevel.h'\" unpacked with wrong size!
fi
# end of 'patchlevel.h'
fi
if test -f 'vaders.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vaders.h'\"
else
echo shar: Extracting \"'vaders.h'\" \(4253 characters\)
sed "s/^X//" >'vaders.h' <<'END_OF_FILE'
X/* 
XCopyright notice:
X
XThis is mine.  I'm only letting you use it.  Period.  Feel free to rip off
Xany of the code you see fit, but have the courtesy to give me credit.
XOtherwise great hairy beasties will rip your eyes out and eat your flesh
Xwhen you least expect it.
X
XJonny Goldman <jgoldman@parc.xerox.com>
X
XTue Jul 17 1990
X*/
X
X/* vaders.h - definitions of vaders data structures. */
X
X#ifndef _vaders_h
X#define _vaders_h
X
X#include <stdio.h>
X#include <math.h>
X#include <X11/Xlib.h>
X#include <X11/Xos.h>
X
X#include <X11/Xutil.h>
X#include <X11/cursorfont.h>
X
X#include <X11/IntrinsicP.h>
X#include <X11/StringDefs.h>
X
X#define XtRFloat "Float"
X#define rint(x) ((int) (x))
X#define MIN(x, y)	((x) < (y) ? (x) : (y))
X#define MAX(x, y)	((x) > (y) ? (x) : (y))
X
X#define VWIDTH 		280
X#define VHEIGHT 	190
X
X#ifndef M_PI
X#define	M_PI	3.14159265358979323846
X#define	M_PI_2	1.57079632679489661923
X#define	M_PI_4	0.78539816339744830962
X#endif
X
X#ifdef MAIN
X#define ext
X#else
X#define ext extern
X#endif
X
X/*
X * Definitions to make us act as a widget.
X */
X
X/* New fields for the Vaders widget class record */
Xtypedef struct {
X     int mumble;   /* No new procedures */
X} VadersClassPart;
X
X/* Full class record declaration */
Xtypedef struct _VadersClassRec {
X    CoreClassPart       core_class;
X    VadersClassPart    vaders_class;
X} VadersClassRec;
X
Xextern VadersClassRec vadersClassRec;
Xextern WidgetClass vadersWidgetClass;
X
X/* New fields for the Vaders widget record */
Xtypedef struct _VadersPart {
X    int dummy;
X} VadersPart;
X
X
X
X/* Full instance record declaration */
X
Xtypedef struct _VadersRec {
X    CorePart core;
X    VadersPart vaders;
X} VadersRec, *VadersWidget;
X
X
X
X
X/*
X * Actual vaders definitions.
X */
X
Xext Boolean debug;
Xext int level;
X
Xext Display *dpy;
Xext Window gamewindow;
Xext VadersWidget gamewidget;
Xext int gamewidth, gameheight;
Xext Widget toplevel, scorewidget;
Xext int score;
Xext int basesleft;
X
X/* Base info: */
X
Xext int basewait;		/* Number of milleseconds to wait between */
X				/* moving base. */
Xext int numdestroyed;
X
X
X
Xext XtIntervalId basetimerid;
X
Xext Pixel basepixel;
Xext Pixel buildingpixel;
Xext Boolean basedestroyed;	/* TRUE if the base is non-existant */
X
X/* Vader info: */
X
Xext XtIntervalId vadertimerid;
Xext Pixel vader1pixel;
Xext Pixel vader2pixel;
Xext Pixel vader3pixel;
Xext int vaderwait;		/* Number of milleseconds to wait between */
X				/* moving vaders. */
X
X/* Spacer info */
X
Xext Pixel spacerpixel;
Xext XtIntervalId spacertimerid;
Xext int spacerwait;		/* Number of milliseconds to wait between
X				/* moving spacers. /*
Xext int spacerappear;		/* same, but for the interval between appearances */
X
Xext Boolean spacer_shown;    	/* Currnet_Spacer is something */
Xext int spacer_counter;		/* number of cycles to create a spacer */
X
X/* Shot info. */
X
Xext XtIntervalId shottimerid;
Xext XtIntervalId vshottimerid;
Xext Pixel shotpixel;
Xext Pixel vshotpixel;
Xext int shotwait;
Xext int vshotwait;
Xext int maxshots;		/* How many shots are allowed to exist at */
X				/* once. */
Xext int maxvshots;		/* How many shots are allowed to exist at */
X				/* once. */
Xext int numshots;		/* how many shots (from the base) there are right now. */
Xext int numvshots;		/* how many shots (from vaders) there are right now. */
X
X/* Score info */
X
Xext Pixel scorepixel;
X
X
Xext int bases, nextbonus, hiscore, lastscore;
X
X
Xext GC
X  backgc, basegc, buildinggc, vadergc[3],
X  shotgc, vshotgc, spacergc, scoregc;
X
X/* From widget.c */
X
Xextern Boolean TakeFocus();
Xextern void Quit();
Xextern void Pause();
Xextern int paused;
Xextern void SuspendTimers();
Xextern void EnableTimers();
X
X/* From base.c */
X
Xextern void MoveBase();
Xextern void MoveLeft();
Xextern void MoveRight();
Xextern void Stop();
Xextern void Fire();
Xextern Boolean ShotHitsBuilding();
X
X/* From vaders.c */
X
Xextern Boolean ShotHitsVader();
Xextern void MoveVaders();
Xextern void InitVaders();
Xextern void AddVShot();
Xextern void MoveVShots();
Xextern void CreateVaders();
X
X/* from spacer.c */
X
Xextern Boolean ShotHitsSpacer();
Xextern void MoveSpacer();
Xextern void MakeSpacer();
Xextern void InitSpacers();
X
X/* From shot.c */
X
Xextern void AddLine();
Xextern void AddShot();
Xextern void AddVshot();
Xextern void MoveShots();
Xextern void MoveVshots();
X
Xext Pixel defaultback, defaultfore;
X
X#endif _vaders_h
END_OF_FILE
if test 4253 -ne `wc -c <'vaders.h'`; then
    echo shar: \"'vaders.h'\" unpacked with wrong size!
fi
# end of 'vaders.h'
fi
if test -f 'spacers.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'spacers.c'\"
else
echo shar: Extracting \"'spacers.c'\" \(3543 characters\)
sed "s/^X//" >'spacers.c' <<'END_OF_FILE'
X/* 

dan
----------------------------------------------------
O'Reilly && Associates   argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.