[comp.sources.games] v11i081: pc-xbd - Boulder Dash for PC-VGA, Part01/03

billr@saab.CNA.TEK.COM (Bill Randle) (12/13/90)

Submitted-by: soulard@fantasio.inria.fr (Herve Soulard)
Posting-number: Volume 11, Issue 81
Archive-name: pc-xbd/Part01
Environment: PC, MS-DOS, VGA

	[I haven't been able to test this. Executables were also
	 included, which have been sent to the comp.binaries.ibm.pc
	 moderator.  -br]

[[Here is a version for IBM-PC with a VGA card (640x480) of the Boulder
  Dash game. It comes from a version available for X11 system.]]

#! /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 archive 1 (of 3)."
# Contents:  README MANIFEST bitmaps bitmaps/bitmaps.dat field.c
#   patchlev.h xbd.c xbde.c
# Wrapped by billr@saab on Wed Dec 12 10:42:10 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'\" \(414 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XBoulder-dash is still in an experimental phase.  Mail your
Xbug reports,  interesting new levels, ideas to the author
Xor to xbd@ks.id.ethz.ch.
X
X
X
X
X
XDON'T DISTRIBUTE ANY MODIFIED VERSIONS !
X
X
X
X
XJeroen Houttuin
XInformatikdienste-Kommunikationssysteme
XETH Zentrum RZ-H7
XCH-8092 Zurich
Xtel +41-1-2565837
Xfax +41-1-2615389
Xe-mail: houttuin@ks.id.ethz.ch
XX.400 : C=CH;ADMD=ARCOM;PRMD=SWITCH;O=ETHZ;OU=id;OU=ks;S=houttuin
END_OF_FILE
if test 414 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MANIFEST'\"
else
echo shar: Extracting \"'MANIFEST'\" \(1850 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X MANIFEST                   1	This shipping list
X Makefile                   2	
X README                     1	
X bitmap.c                   2	
X bitmaps                    1	
X bitmaps/bitmaps.dat        1	
X bitmaps/default            3	
X bitmaps/xbdlv001           3	
X bitmaps/xbdlv002           3	
X bitmaps/xbdlv003           2	
X bitmaps/xbdlv004           3	
X bitmaps/xbdlv005           3	
X bitmaps/xbdlv006           3	
X bitmaps/xbdlv007           3	
X bitmaps/xbdlv008           3	
X bitmaps/xbdlv009           2	
X bitmaps/xbdlv010           2	
X bitmaps/xbdlv011           2	
X bitmaps/xbdlv012           3	
X bitmaps/xbdlv013           2	
X bitmaps/xbdlv014           3	
X bitmaps/xbdlv015           3	
X bitmaps/xbdlv016           3	
X bitmaps/xbdlv017           3	
X bitmaps/xbdlv018           3	
X bitmaps/xbdlv019           3	
X bitmaps/xbdlv020           2	
X bitmaps/xbdlv021           3	
X bitmaps/xbdlv022           3	
X bitmaps/xbdlv023           3	
X bitmaps/xbdlv024           3	
X bitmaps/xbdlv025           2	
X bitmaps/xbdlv026           2	
X bitmaps/xbdlv027           3	
X bitmaps/xbdlv028           3	
X bitmaps/xbdlv029           2	
X bitmaps/xbdlv030           2	
X bitmaps/xbdlv031           2	
X bitmaps/xbdlv032           3	
X bitmaps/xbdlv033           2	
X bitmaps/xbdlv034           3	
X bitmaps/xbdlv035           2	
X bitmaps/xbdlv036           2	
X bitmaps/xbdlv037           2	
X bitmaps/xbdlv038           2	
X field.c                    1	
X graph.asm                  2	
X patchlev.h                 1	
X readme.pc                  2	
X readme1.2                  3	
X scores                     3	
X scores.c                   2	
X shared.c                   2	
X xbd.c                      1	
X xbd.h                      2	
X xbde.c                     1	
END_OF_FILE
if test 1850 -ne `wc -c <'MANIFEST'`; then
    echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test ! -d 'bitmaps' ; then
    echo shar: Creating directory \"'bitmaps'\"
    mkdir 'bitmaps'
fi
if test -f 'bitmaps/bitmaps.dat' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bitmaps/bitmaps.dat'\"
else
echo shar: Extracting \"'bitmaps/bitmaps.dat'\" \(18800 characters\)
sed "s/^X//" >'bitmaps/bitmaps.dat' <<'END_OF_FILE'
Xplayer_pgms  0
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0 15 15 15 15 15 15  0  0  0  0 
X	 0  0  0  0  0 15  0  0  0  0 15  0  0  0  0  0 
X	 0  0  0  0 15  0  0  0  0 15  0 15 15  0  0  0 
X	 0  0  0 15  0 15  0 15  0 15  0  0 15  0  0  0 
X	 0  0  0 15  0  0  0  0  0 15  0  0 15  0  0  0 
X	 0 15 15 15  0 15 15 15  0 15 15 15 15  0  0  0 
X	15 15 15 15  0  0  0  0  0 15 15 15  0  0  0  0 
X	15  0  0 15  0  0  0  0  0 15  0  0  0  0  0  0 
X	15  0  0 15  0  0  0  0  0 15  0  0  0  0  0  0 
X	15 15  0 15  0  0 15  0  0 15  0  0  0  0  0  0 
X	 0  0  0 15  0  0 15  0  0 15  0  0  0  0  0  0 
X	 0  0 15  0  0  0 15  0  0  0 15  0  0  0  0  0 
X	 0 15  0  0  0  0 15  0  0  0  0 15  0  0  0  0 
X	 0 15 15 15 15 15  0 15 15 15 15 15  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xplayer2_pgms  1
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0 15 15 15 15 15 15  0  0  0  0  0  0  0  0  0 
X	 0  0 15  0  0  0  0 15  0  0  0  0  0  0  0  0 
X	15 15  0 15  0  0  0  0 15  0  0  0  0  0  0  0 
X	15  0  0 15  0 15  0 15  0 15  0  0  0  0  0  0 
X	15  0  0 15  0  0  0  0  0 15  0  0  0  0  0  0 
X	15 15 15 15  0 15  0 15  0 15 15 15  0  0  0  0 
X	 0 15 15 15  0  0 15  0  0 15 15 15 15  0  0  0 
X	 0  0  0 15  0  0  0  0  0 15  0  0 15  0  0  0 
X	 0  0  0 15  0  0  0  0  0 15  0  0 15  0  0  0 
X	 0  0  0 15  0  0 15  0  0 15  0 15 15  0  0  0 
X	 0  0  0 15  0  0 15  0  0 15  0  0  0  0  0  0 
X	 0  0 15  0  0  0 15  0  0  0 15  0  0  0  0  0 
X	 0 15  0  0  0  0 15  0  0  0  0 15  0  0  0  0 
X	 0 15 15 15 15 15  0 15 15 15 15 15  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xwall_pgms  2
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	
Xwall2_pgms  3
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4  4  4  4  4  4 14 
X	14 14  4  1  4 14 14 14 14  4  1  4 14 14 14 14 
X	 4  4  1  1  4  4  4  4  4  4  1  1  4  4  4  4 
X	 4  1  1  1  1  1  1  1  1  1  1  1  1  4  4  4 
X	 1  1  1  1  1  1  1  1  1  1  1  1  1  1  4  4 
X	 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 
X	 1  1  1  1  1  1  1  1  1  1  1  1  1  1  4  4 
X	 4  1  1  1  1  1  1  1  1  1  1  1  1  4  4  4 
X	 4  4  1  1  4  4  4  4  4  4  1  1  4  4  4  4 
X	14 14  4  1  4 14 14 14 14  4  1  4 14 14 14 14 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	
Xspace_pgms  4
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xgrass_pgms  5
X	 0  2  2  2  0  2  0  2  2  2  0  2  2  2  2  2 
X	 2  0  0  0  0  0  2  0  2  2  2  0  2  0  2  0 
X	 0  0  0  2  0  0  0  0  0  0  2  0  2  0  0  2 
X	 2  0  2  2  2  0  0  2  0  0  0  2  0  2  2  0 
X	 0  0  0  0  0  0  0  0  0  2  0  0  0  0  0  2 
X	 0  2  0  2  2  0  2  2  2  0  2  0  2  0  2  0 
X	 0  0  0  0  0  0  0  0  2  2  2  2  0  2  0  2 
X	 2  2  0  2  2  0  2  0  2  0  0  0  0  0  2  0 
X	 0  0  0  2  0  0  0  0  0  0  2  0  0  2  0  2 
X	 2  0  2  2  2  2  2  2  2  0  2  2  0  2  0  0 
X	 0  2  0  2  0  2  0  0  0  0  0  2  0  0  2  2 
X	 0  0  0  2  2  0  0  0  2  0  0  0  0  0  0  0 
X	 0  0  0  2  0  2  0  2  2  2  0  2  0  2  2  0 
X	 2  0  0  0  0  0  0  0  2  0  0  0  0  0  2  0 
X	 0  2  0  0  0  0  0  2  0  2  0  2  0  2  0  2 
X	 2  2  0  0  2  0  2  0  0  0  0  0  2  2  2  0 
X	
Xdiamond_pgms  6
X	 0  0  0  0  0  0  0 15  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0 15  0 15  0  0  0  0  0  0  0 
X	 0  0  0  0  0 15 15 15 15 15  0  0  0  0  0  0 
X	 0  0  0  0 15 15 15 15 15 15 15  0  0  0  0  0 
X	 0  0  0 15  0  0  0  0  0  0  0 15  0  0  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15  0  0  0 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15  0 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15  0  0  0 
X	 0  0  0 15  0  0  0  0  0  0  0 15  0  0  0  0 
X	 0  0  0  0 15 15 15 15 15 15 15  0  0  0  0  0 
X	 0  0  0  0  0 15 15 15 15 15  0  0  0  0  0  0 
X	 0  0  0  0  0  0 15  0 15  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0 15  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xdiamond2_pgms  7
X	 0  0  0  0  0  0  0 15  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0 15 15 15  0  0  0  0  0  0  0 
X	 0  0  0  0  0 15  0  0  0 15  0  0  0  0  0  0 
X	 0  0  0  0 15  0  0  0  0  0 15  0  0  0  0  0 
X	 0  0  0 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0  0 15  0  0  0  0  0  0  0  0  0 15  0  0  0 
X	 0 15  0  0  0  0  0  0  0  0  0  0  0 15  0  0 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15  0 
X	 0 15  0  0  0  0  0  0  0  0  0  0  0 15  0  0 
X	 0  0 15  0  0  0  0  0  0  0  0  0 15  0  0  0 
X	 0  0  0 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0  0  0  0 15  0  0  0  0  0 15  0  0  0  0  0 
X	 0  0  0  0  0 15  0  0  0 15  0  0  0  0  0  0 
X	 0  0  0  0  0  0 15 15 15  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0 15  0  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xsteel_pgms  8
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0 15 15 15  0  0  0 15 15 15  0  0 15 15 
X	15  0  0 15  0  0  0  0  0 15  0  0  0  0 15 15 
X	15  0  0 15  0 15  0  0  0 15  0 15  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0 15 15 15  0  0  0 15 15 15  0  0 15 15 
X	15  0  0 15  0  0  0  0  0 15  0  0  0  0 15 15 
X	15  0  0 15  0 15  0  0  0 15  0 15  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	
Xboulder_pgms  9
X	 0  0  0 14  0 14 14 15 14 14  0  0  0  0  0  0 
X	 0  0 15 14 15 14 15 14  0 14 14 14  0  0  0  0 
X	 0 14 14 15 14 15 14 15 14 14 14 15  0 15  0  0 
X	14 15  0 15 14 14  0  0 14  0 15  0 14  0  0  0 
X	14 14 14 14 15  0 15 14 15  0 14 14  0 14  0  0 
X	14 15  0 14  0 14  0 14  0 14 15  0 14  0 14  0 
X	14 14 15  0 14  0 14  0  0 14  0 14  0 14  0 14 
X	15  0 14 14  0 14 14  0 15  0 14  0 14  0 14 14 
X	14  0 14  0 14  0  0 14  0 14  0 14  0 14  0  0 
X	 0 14  0  0 15  0 15  0 14  0 14  0 14  0  0 14 
X	14  0 15  0 14 14  0 14 14  0  0  0 14  0 14  0 
X	14  0 14  0 15  0  0  0 14  0 14  0  0  0  0  0 
X	 0 14  0 14  0 14 14  0 14  0  0  0  0 14  0  0 
X	 0  0 14  0  0  0 14  0  0  0 14  0 14  0  0  0 
X	 0  0  0 14  0  0 14  0  0  0  0  0  0  0  0  0 
X	 0  0  0  0 14  0 14  0 14  0  0  0  0  0  0  0 
X	
Xexplosion_pgms 10
X	 0 11  0  0  0  0 11  0 15  0  0  0  0  4  0  0 
X	 0  0 11  0  0  0 11  0 15  0  4  0  4  4  0  0 
X	 0  0  0  4  0  4  0  0 15  0  4  0  4  0 15 15 
X	15 15  0  4  0  0  6  0  0  0  4  0  0  4  0  0 
X	 0  0  0  0  4  0  6  0 15 15  0  0  4  0  0  0 
X	15 15 15  0  4  0  6  0 15  0  0  0  0  0  6  0 
X	 0  0  0  6  6  6  0 15  0  0 15  0  6  6  0 15 
X	 4  4  0  0  0  6  4  4  4  0  6  6  0  0  0  0 
X	 0  0 15  0  6  0  4  4  4  6  0  0  0  0 15  0 
X	15  0  0  4  0 15  4  4  0  0 15  0 15 15  0  0 
X	 0  4  4  0 15  0 15  6 15  4  0  0  0  0  0  0 
X	 6  0  0 15  0 15  0  6 15  0  4  0  0 15 15  0 
X	 0  0  0  0  0  0  4  0  6  0  0  4  0  0  0 15 
X	 0 15  0  4 15  0  4 15  0  6  0  0  4  4  0  0 
X	15  0  0 15  0  0  4  0  0  6  0 15  0  0  4  0 
X	 0  0 15  0  0  0  4  0 15  0  0 15  0  0  0  0 
X	
Xlmonster_pgms 11
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15  0 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	 0 15  0 15 15 15 15 15 15 15 15  0 15  0 15 15 
X	 0 15  0 15  0  0  0  0  0  0 15  0 15  0 15 15 
X	 0 15  0 15  0 15 15 15 15  0 15  0 15  0 15 15 
X	 0 15  0 15  0 15  0  0 15  0 15  0 15  0 15 15 
X	 0 15  0 15  0 15  0  0 15  0 15  0 15  0 15 15 
X	 0 15  0 15  0 15 15 15 15  0 15  0 15  0 15 15 
X	 0 15  0 15  0  0  0  0  0  0 15  0 15  0 15 15 
X	 0 15  0 15 15 15 15 15 15 15 15  0 15  0 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15  0 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	
Xlmonster2_pgms 12
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15  0  0 
X	15  0 15 15 15 15 15 15 15 15 15 15  0 15  0  0 
X	15  0 15  0  0  0  0  0  0  0  0 15  0 15  0  0 
X	15  0 15  0 15 15 15 15 15 15  0 15  0 15  0  0 
X	15  0 15  0 15  0  0  0  0 15  0 15  0 15  0  0 
X	15  0 15  0 15  0 15 15  0 15  0 15  0 15  0  0 
X	15  0 15  0 15  0 15 15  0 15  0 15  0 15  0  0 
X	15  0 15  0 15  0  0  0  0 15  0 15  0 15  0  0 
X	15  0 15  0 15 15 15 15 15 15  0 15  0 15  0  0 
X	15  0 15  0  0  0  0  0  0  0  0 15  0 15  0  0 
X	15  0 15 15 15 15 15 15 15 15 15 15  0 15  0  0 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15  0  0 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
X	
Xrmonster_pgms 13
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	 0  0 15  0  0  0  0  0  0  0  0 15  0  0 15 15 
X	 0  0  0 15  0  0  0  0  0  0 15  0  0  0 15 15 
X	 0 15  0  0 15  0  0  0  0 15  0  0 15  0 15 15 
X	 0 15 15  0  0 15  0  0 15  0  0 15 15  0 15 15 
X	 0 15  0 15  0  0 15 15  0  0 15  0 15  0 15 15 
X	 0 15  0 15  0  0 15 15  0  0 15  0 15  0 15 15 
X	 0 15 15  0  0 15  0  0 15  0  0 15 15  0 15 15 
X	 0 15  0  0 15  0  0  0  0 15  0  0 15  0 15 15 
X	 0  0  0 15  0  0  0  0  0  0 15  0  0  0 15 15 
X	 0  0 15  0  0  0  0  0  0  0  0 15  0  0 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	
Xrmonster2_pgms 14
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	 0  0 15  0  0  0  0  0  0  0  0 15  0  0 15 15 
X	 0 15  0 15  0  0  0  0  0  0 15  0 15  0 15 15 
X	 0 15 15  0 15  0  0  0  0 15  0 15 15  0 15 15 
X	 0 15  0 15  0 15  0  0 15  0 15  0 15  0 15 15 
X	 0 15  0  0 15  0 15 15  0 15  0  0 15  0 15 15 
X	 0 15  0  0 15  0 15 15  0 15  0  0 15  0 15 15 
X	 0 15  0 15  0 15  0  0 15  0 15  0 15  0 15 15 
X	 0 15 15  0 15  0  0  0  0 15  0 15 15  0 15 15 
X	 0 15  0 15  0  0  0  0  0  0 15  0 15  0 15 15 
X	 0  0 15  0  0  0  0  0  0  0  0 15  0  0 15 15 
X	 0 15  0  0  0  0  0  0  0  0  0  0 15  0 15 15 
X	15  0  0  0  0  0  0  0  0  0  0  0  0 15 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	
Xeater_pgms 15
X	 0  0  0  0 15 15 15 15 15 15  0  0  0  0  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15  0  0  0 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	15 15 15  0  0  0 15 15  0  0  0 15 15 15  0  0 
X	15 15  0  0 15  0 15 15  0 15  0  0 15 15 15 15 
X	15 15  0  0  0  0 15 15  0  0  0  0 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15  0  0  0  0  0  0 15 15 15 15 15 15 
X	15 15 15  0  0  0  0  0  0  0  0 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15  0 15 15 15  0 15  0 15 15 15  0 15 15 
X	 0  0 15  0  0 15  0  0 15  0  0 15  0  0 15 15 
X	
Xeater2_pgms 16
X	 0  0  0  0 15 15 15 15 15 15  0  0  0  0  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15  0  0  0 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15  0  0 
X	15 15  0  0  0  0 15 15  0  0  0  0 15 15  0  0 
X	15  0  0 15 15  0 15 15  0 15 15  0  0 15 15 15 
X	15  0  0  0  0  0 15 15  0  0  0  0  0 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15  0 15  0  0 15  0 15 15 15 15 15 15 
X	15 15 15  0  0  0  0  0  0  0  0 15 15 15 15 15 
X	15 15 15 15  0 15  0  0 15  0 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15  0 15 15 15  0 15  0 15 15 15  0 15 15 
X	 0  0 15  0  0 15  0  0 15  0  0 15  0  0 15 15 
X	
Xexit2_pgms 17
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 
X	 0  0  0  0  0  0  0  0  0  0  0  0  0 15 15 15 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15 15  0  0  0 15 15 15  0  0  0 15 15 15 
X	 0  0 15 15  0 15 15 15 15 15  0 15 15 15 15 15 
X	 0  0 15 15  0 15  0 15 15 15  0 15  0 15 15 15 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	 0  0 15 15  0  0  0 15 15 15  0  0  0 15 15 15 
X	 0  0 15 15  0 15 15 15 15 15  0 15 15 15 15 15 
X	 0  0 15 15  0 15  0 15 15 15  0 15  0 15 15 15 
X	 0 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 
X	
Xnucbal_pgms 18
X	 0  0  0  0 15 15 15 15 15 15  0  0  0  0  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0 15 15  0  0 15 15 15 15  0  0 15 15  0  0  0 
X	15 15  0  0  0 15 15 15 15  0  0  0 15 15  0  0 
X	15  0  0  0  0  0 15 15  0  0  0  0  0 15  0  0 
X	15  0  0  0  0  0 15 15  0  0  0  0  0 15 15 15 
X	15 15 15  0  0  0  0  0  0  0  0 15 15 15 15 15 
X	15 15 15 15 15  0 15 15  0 15 15 15 15 15 15 15 
X	15 15 15 15 15  0 15 15  0 15 15 15 15 15 15 15 
X	15 15 15  0  0  0  0  0  0  0  0 15 15 15 15 15 
X	15  0  0  0  0  0 15 15  0  0  0  0  0 15 15 15 
X	15  0  0  0  0  0 15 15  0  0  0  0  0 15  0  0 
X	15 15  0  0  0 15 15 15 15  0  0  0 15 15  0  0 
X	 0 15 15  0  0 15 15 15 15  0  0 15 15  0  0  0 
X	 0  0 15 15 15 15 15 15 15 15 15 15  0  0  0  0 
X	 0  0  0  0 15 15 15 15 15 15  0  0  0  0  0  0 
X	
Xblob_pgms 19
X	 0  6  7  0  0  6  0  0  0  0  0  0  0  0  0  0 
X	 6  0  0  6  7  0  0  0  6  6  7  6  0  0  0  6 
X	 6  6  7  6  0  0  6  6  7  0  0  6  6  7  6  6 
X	 0  0  0  6  7  6  6  7  0  0  6  7  6  0  0  0 
X	 6  6  7  6  6  0  0  0  0  0  0  0  0  0  0  6 
X	 6  7  6  0  0  0  0  0  0  0  6  7  6  7  0  0 
X	 0  0  0  0  6  6  0  6  6  6  0  0  0  6  6  0 
X	 6  6  6  6  0  0  0  6  0  0  0  6  0  0  7  0 
X	 0  0  0  0  0  0  6  0  0  6  7  6  7  0  0  0 
X	 6  7  0  0  7  6  0  7  6  0  0  0  0  6  7  0 
X	 7  0  6  6  6  0  7  6  0  0  0  0  0  0  0  6 
X	 6  6  7  7  0  0  0  0  0  0  6  6  6  0  0  6 
X	 0  0  0  6  0  0  0  0  7  6  7  6  0  6  0  0 
X	 0  0  6  7  6  7  0  6  6  6  0  0  6  0  6  0 
X	 6  6  0  6  0  6  6  7  0  0  0  0  0  0  0  6 
X	 0  0  0  0  0  0  0  0  0  0  0  6  6  0  0  0 
X	
Xblob2_pgms 20
X	 6  0  6  6  0  0  6  0  6  0  0  0  0  0  0  0 
X	 0  0  0  0  0  0 14  6 14  6  0  0  0  0  0  0 
X	14  6  6 14  6 14  0  0  0  0  6  0  6  6  0  6 
X	 0  0  0  0  0  0  6  6  0  0  0  0  0  0  6  6 
X	 0  0  0  0  0  0  0  0  6  0  0  0 14  6 14  0 
X	 0  0  6 14 14  6 14  0  0  6  6  6  0  0  0  0 
X	 0  6  0  0  0  0  6  0  0  0  0  0  0  6  6  0 
X	 6 14  6 10  6  6  0 14  0  0  0  6  6  0  0  6 
X	 6  6  0  0  0  0  6  6  0  6  6  0  0  6  6  0 
X	 0  0  0 14  6  0  0  6 14 14 14 14  0 14  0  6 
X	 0  0  6  6  0 14  0  0  0  6  6  6  6  0  0  0 
X	 0  0  0  0  6  0  0  6  6  0  0  0  0  0  0  0 
X	 0 14  6 14  6  6 14  0  0  0  0  0  0  0  6  0 
X	 6 14  0  0  0  0  0 14  6 14  6 14  6 14  6  0 
X	 0  0 14  0  6 14  0  0  6  6  6 14 14  6  0  0 
X	 0  6  0  0  0  6  0  0  0  0  6  6  0  0  0  0 
X	
Xtinkle1_pgms 21
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  4  4  4  4 14  4  4  4  4 14 
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4 14  4  4  4  4 14  4  4  4 
X	
Xtinkle2_pgms 22
X	14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 
X	 4  4  4  4 14  4  4  1  4  4 14  4  4  4  4 14 
X	 4  4  4  4 14  4  1  1  1  4 14  4  4  4  4 14 
X	 4  4  4  4 14  1  1  1  1  1 14  4  4  4  4 14 
X	14 14 14 14  1  1  1  1  1  1  1 14 14 14 14 14 
X	 4  4 14  1  1  1  1  1  1  1  1  1 14  4  4  4 
X	 4  4 14  4  4  1  1  1  1  1  4  4 14  4  4  4 
X	 4  4 14  4  4  1  1  1  1  1  4  4 14  4  4  4 
X	14 14 14 14 14  1  1  1  1  1 14 14 14 14 14 14 
X	 4  4  4  4 14  1  1  1  1  1 14  4  4  4  4 14 
X	 4  4  4  4 14  1  1  1  1  1 14  4  4  4  4 14 
X	 4  4  4  1  1  1  1  1  1  1  1  1  4  4  4 14 
X	14 14 14 14  1  1  1  1  1  1  1 14 14 14 14 14 
X	 4  4 14  4  4  1  1  1  1  1  4  4 14  4  4  4 
X	 4  4 14  4  4  4  1  1  1  4  4  4 14  4  4  4 
X	 4  4 14  4  4  4  4  1  4  4  4  4 14  4  4  4 
X	
END_OF_FILE
if test 18800 -ne `wc -c <'bitmaps/bitmaps.dat'`; then
    echo shar: \"'bitmaps/bitmaps.dat'\" unpacked with wrong size!
fi
# end of 'bitmaps/bitmaps.dat'
fi
if test -f 'field.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'field.c'\"
else
echo shar: Extracting \"'field.c'\" \(14108 characters\)
sed "s/^X//" >'field.c' <<'END_OF_FILE'
X/*********************************************/
X/* you just keep on pushing my luck over the */
X/*           BOULDER        DASH             */
X/*                                           */
X/*     Jeroen Houttuin, ETH Zurich, 1990     */
X/*                                           */
X/*                                           */
X/*	  PC-VGA version from :				*/
X/*                                           */
X/*		Herve SOULARD, Paris, 1990		*/
X/*                                           */
X/*********************************************/
X
X#include <stdio.h>
X#include <signal.h>
X#include <time.h>
X#include <sys/timeb.h>
X#include "xbd.h"
X
Xvoid blink(i, j)
Xint	i, j;
X{
X	field[i][j].changed = TRUE;
X}
X
X
Xvoid move_cell(i, j, ii, jj)
Xint	i, j, ii, jj;
X{
X	field[ii][jj] = field[i][j];
X	field[ii][jj].speed = 1;
X	field[ii][jj].changed = TRUE;
X	field[ii][jj].dir = ((ii - i) == 1) ? S : ((i - ii) == 1) ? 
X		                                 N : ((jj - j) == 1) ? E : W;
X	set_cell(i, j, SPACE);
X}
X
X
Xvoid	explode(a, b, stage)
Xint	a, b, stage;
X{
X  if (field[a][b].content != STEEL) {
X	  set_cell(a, b, EXPLOSION);
X	  field[a][b].stage = stage;/* dirty fix, not what stage was meant for */
X  }
X}
X
X
XBool move_nucbal(i, j, t)
Xint	i, j, t;
X{
X	ii = (!t) ? (i + y - 1) % y : i;
X	if (!t)
X		jj = j;
X	else
X		switch (field[i][j].dir) {
X			case E:
X				jj = (t == 1) ? (j + x - 1) % x : (j + 1) % x;
X				break;
X			case W:
X			default:
X				jj = (t == 2) ? (j + x - 1) % x : (j + 1) % x;
X				break;
X		}
X	switch (field[ii][jj].content) {
X		case SPACE:
X			move_cell(i, j, ii, jj);
X			return (TRUE);
X		case NUCBAL:
X			explode(i, j, DIAEXPLO);
X			explode(ii, jj, DIAEXPLO);
X			return (TRUE);
X		default:
X			if (field[i][j].dir == N)
X				field[i][j].dir = E;
X			else
X				field[i][j].dir = ((field[i][j].dir + 2) % 4);
X			return (FALSE);
X	}
X}
X
X
XBool move_monster(content, direction)
Xchar	content, direction;
X{
X	switch (direction) {
X		case N:	
X			ii = (i + y - 1) % y;
X			jj	= j;
X			break;
X		case E:
X			jj = (j + 1) % x;
X			ii = i;
X			break;
X		case S:
X			ii = (i + 1) % y;
X			jj = j;
X			break;
X		default:
X			jj = (j + x - 1) % x;
X			ii = i;
X			break;			/* default must be SOMEthing, West */
X	}
X	switch (field[ii][jj].content) {
X		case SPACE:
X			if (!field[ii][jj].changed) {
X				move_cell(i, j, ii, jj);
X				field[ii][jj].dir = direction;
X				return (TRUE);
X			} 
X			else
X				return (FALSE);
X			break;
X		case BOULDER:
X		case DIAMOND:
X			if ((direction == N) && (field[ii][jj].speed != 0))
X				if (content == RMONSTER) {
X					explode(i, j, DIAEXPLO);
X					return (TRUE);
X				} 
X				else 
X					if (content == LMONSTER) {
X						explode(i, j, SPACEEXPLO);
X						return (TRUE);
X					} 
X					else
X						return (FALSE);
X			else
X				return (FALSE);
X			break;
X		default:
X			return (FALSE);
X			break;
X	}
X	return (FALSE);
X}
X
X
XBool search_destroy(content)
Xchar	content;
X{
X	ii = (i + y - 1) % y;
X	jj = (j + x - 1) % x;
X	if (field[i][jj].content == PLAYER || field[i][jj].content == BLOB) {
X		set_cell(i, j, SPACE);
X		if (field[i][jj].content == PLAYER) {
X			lives--;
X			scoreobs = TRUE;
X		}
X		if (content == RMONSTER)
X			explode(i, jj, DIAEXPLO);
X		else
X			explode(i, jj, SPACEEXPLO);
X		return (TRUE);
X	} 
X	else 
X		if (field[ii][j].content == PLAYER || field[ii][j].content == BLOB) {
X			set_cell(i, j, SPACE);
X			if (field[ii][j].content == PLAYER) {
X				lives--;
X				scoreobs = TRUE;
X			}
X			if (content == RMONSTER)
X				explode(ii, j, DIAEXPLO);
X			else
X				explode(ii, j, SPACEEXPLO);
X			return (TRUE);
X		}
X		else {
X			ii = (i + 1) % y;
X			jj = (j + 1) % x;
X			if (field[i][jj].content == PLAYER || field[i][jj].content == BLOB) {
X				set_cell(i, j, SPACE);
X				if (field[i][jj].content == PLAYER) {
X					lives--;
X					scoreobs = TRUE;
X				}
X				if (content == RMONSTER)
X					explode(i, jj, DIAEXPLO);
X				else
X					explode(i, jj, SPACEEXPLO);
X				return (TRUE);
X			} 
X			else 
X				if (field[ii][j].content == PLAYER || field[ii][j].content == BLOB) {
X					set_cell(i, j, SPACE);
X					if (field[ii][j].content == PLAYER) {
X						lives--;
X						scoreobs = TRUE;
X					}
X					if (content == RMONSTER)
X						explode(ii, j, DIAEXPLO);
X					else
X						explode(ii, j, SPACEEXPLO);
X					return (TRUE);
X				} 
X				else
X					return (FALSE);
X			}
X	}
X
Xvoid propagate(i, j, dias)
Xint             i, j;
XBool            dias;
X{
X	int	t, it, jt;
X	if (dias)
X		set_cell(i, j, DIAMOND);
X	else {
X		field[i][j].checked = PROPAGATED;
X		field[i][j].caught = TRUE;
X	}
X	for (t = 0; (t < 4); ++t) {
X		it = (t == 1) ? (i + y - 1) % y : (t == 3) ? (i + 1) % y : i;
X		jt = (t == 2) ? (j + x - 1) % x : (t == 0) ? (j + 1) % x : j;	
X		switch (field[it][jt].content) {
X			case BLOB:
X				if (field[it][jt].checked != PROPAGATED)
X					propagate(it, jt, dias);
X				break;
X			case SPACE:
X			case GRASS:
X				if (!(rand() % (blobbreak + 1))) {
X					set_cell(it, jt, BLOB);
X					field[it][jt].checked = PROPAGATED;
X					field[it][jt].caught = TRUE;
X				}
X				break;
X			default:
X				break;
X		}
X	}	
X}
X
X
XBool caught(i, j)
Xint	i, j;
X{
X	Bool	Free;
X	int	t, it, jt;
X
X	field[i][j].checked = 1;
X	Free = FALSE;
X
X	for (t = 0; ((t < 4) && !Free); ++t) {
X		it = (t == 1) ? (i + y - 1) % y : (t == 3) ? (i + 1) % y : i;
X		jt = (t == 2) ? (j + x - 1) % x : (t == 0) ? (j + 1) % x : j;
X		
X		switch (field[it][jt].content) {
X			case SPACE:
X			case GRASS:
X			case RMONSTER:
X			case LMONSTER:
X			case EATER:
X				Free = TRUE;
X				break;
X			case BLOB:
X				Free = (Free || ((field[it][jt].checked == 1) ? 
X					             !field[i][j].caught : !caught(it, jt)));
X				break;
X			default:
X				break;
X		}
X	}
X	field[i][j].caught != Free;
X	return (!Free);
X}
X
X
Xvoid diaboulderproc(i, j)
Xint	i, j;
X{
X	
X	if (field[i][j].content == DIAMOND)
X		blink(i, j);
X	
X	ii = (ii + 1) % y;
X	field[i][j].dir = NODIR;
X	switch (field[ii][j].content) {
X		case SPACE:			/* directly underneath */
X			move_cell(i, j, ii, j);
X			field[ii][j].speed = 1;
X			break;
X		case PLAYER:
X			if (field[i][j].speed) {
X				set_cell(i, j, SPACE);
X				explode(ii, j, SPACEEXPLO);
X				lives--;
X				scoreobs = TRUE;
X			}
X			break;
X		case LMONSTER:
X		case EATER:
X			if (field[i][j].speed) {
X				set_cell(i, j, SPACE);
X				explode(ii, j, SPACEEXPLO);
X			}
X			break;
X		case RMONSTER:
X			if (field[i][j].speed) {
X				set_cell(i, j, SPACE);
X				explode(ii, j, DIAEXPLO);
X			}
X			break;
X		case TINKLE:
X			if (field[i][j].speed) {
X				tinkact = TRUE;
X				field[ii][j].stage = field[i][j].content;
X				field[ii][j].speed = 1;
X				set_cell(i, j, SPACE);
X				break;
X			}
X			break;
X		case WALL:
X		case BOULDER:
X		case DIAMOND:
X		case EXPLOSION:
X			jj = (j + 1) % x;
X			if (field[i][jj].content == SPACE && field[ii][jj].content == SPACE) {
X				move_cell(i, j, i, jj);
X				field[i][jj].speed = 0;
X			} 
X			else {
X				jj = (j - 1) % x;
X				if (field[i][jj].content == SPACE && field[ii][jj].content == SPACE) {
X					move_cell(i, j, i, jj);
X					field[i][jj].speed = 0;
X				}
X				else
X					field[i][j].speed = 0;
X			}
X			break;
X		default:
X			field[i][j].speed = 0;
X			break;
X	}
X}
X
X
Xvoid calculate_field()
X{
X	players = 0;
X
X	/* Iterate through each horizontal line */
X	if (!curtime)
X		curorder = KILL;
X	for (i = y - 1; i >= 0; --i) {
X		for (j = 0; j < x; ++j) {
X			if (!(field[i][j].changed)) {
X				ii = i;
X				jj = j;
X				switch (field[i][j].content) {
X					case PLAYER:
X						players++;
X						switch (curorder) {
X							case STAND:
X								break;
X							case UP:
X								ii = (i + y - 1) % y;
X								break;
X							case DOWN:
X								ii = (i + 1) % y;
X								break;
X							case LEFT:
X								jj = (j + x - 1) % x;
X								break;
X							case RIGHT:
X								jj = (j + 1) % x;
X								break;
X						}
X						if (!(curorder == STAND) && !(field[i][j].changed)) {
X							if (curorder == KILL) {
X								set_cell(i, j, EXPLOSION);
X								lives--;
X								scoreobs = TRUE;
X								break;
X							}
X							switch (field[ii][jj].content) {
X								case SPACE:
X								case GRASS:
X								case DIAMOND:
X									if (field[ii][jj].content == DIAMOND) {
X										if (curorder == UP && field[ii][jj].speed)
X											break;
X										score += diapoints;
X										if (diareq)
X											diareq--;
X										scoreobs = TRUE;
X									}
X									if (steal)
X										set_cell(ii, jj, SPACE);
X									else
X										move_cell(i, j, ii, jj);
X									break;
X								case BOULDER:
X									jjj = (2 * jj - j + x) % x;
X									if (field[i][jjj].content == SPACE && 
X										((rand() % 2) == 0) &&	
X										!(field[ii][jj].dir == E))	{
X										move_cell(i, jj, i, jjj);
X										field[i][jjj].speed = 0;
X										if (!steal) {
X											move_cell(i, j, i, jj);
X										}
X									}
X									break;
X								case EXIT:
X									if (diareq < 1) {
X										if (!steal)
X											move_cell(i, j, ii, jj);
X										else
X											set_cell(ii, jj, SPACE);
X										if (!levincreased) {
X											levelnum++;
X											lives++;
X											levincreased = TRUE;
X											for (jj = curtime / 10; jj > 0; --jj) {
X												score += 10;
X												draw_score();
X											}
X										}
X										gamestop = TRUE;
X										stoplevel = TRUE;
X									}
X									break;
X							}
X						}
X						blink(i, j);
X						break;
X					case DIAMOND:
X					case BOULDER:
X						diaboulderproc(i, j);
X						break;
X					case EATER:
X						if (!field[i][j].speed) {
X							for (jjj = 0; ((!field[i][j].changed) && (jjj < 4)); ++jjj) {
X								ii = (jjj == 2) ? (i + 1) % y : (jjj == 0) ? (i + y - 1) % y : i;
X								jj = (jjj == 1) ? (j + 1) % x : (jjj == 3) ? (j + x - 1) % x : j;
X								switch (field[ii][jj].content) {
X									case PLAYER:
X										lives--;
X										scoreobs = TRUE;
X									case DIAMOND:
X										if (field[ii][jj].speed && (ii == i - 1) && (jj == j))
X											break;
X									case BLOB:
X									case LMONSTER:
X									case RMONSTER:
X									case NUCBAL:
X										move_cell(i, j, ii, jj);
X										break;
X									default:
X										break;
X								}
X							}
X						}
X						else {
X							jjj = field[i][j].dir;
X							ii = (jjj == 2) ? (i + 1) % y : (jjj == 0) ? (i + y - 1) % y : i;
X							jj = (jjj == 1) ? (j + 1) % x : (jjj == 3) ? (j + x - 1) % x : j;
X							switch (field[ii][jj].content) {
X								case LMONSTER:
X								case BLOB:
X								case SPACE:
X								case GRASS:
X								case DIAMOND:
X								case RMONSTER:
X								case PLAYER:
X								case NUCBAL:
X									if (field[ii][jj].content == PLAYER) {
X										lives--;
X										scoreobs = TRUE;
X									}
X									move_cell(i, j, ii, jj);
X									break;
X								case BOULDER:
X									jjj = (2 * jj - j + x) % x;
X									if (field[i][jjj].content == SPACE && 
X										 ((rand() % 2) == 0) && 
X										 !(field[ii][jj].dir == E)) {
X										 move_cell(i, jj, i, jjj);
X										 move_cell(i, j, i, jj);
X									 }
X									 else
X										 field[i][j].speed = 0;
X									 break;
X								default:
X									field[i][j].speed = 0;
X									break;
X							}
X						}
X						blink(i, j);
X						break;
X					case RMONSTER:
X						blink(i, j);
X						if (search_destroy(RMONSTER))
X							break;
X						jjj =	3;
X						while (jjj >= 0 && !move_monster(RMONSTER, (field[i][j].dir + jjj + 2) % 4))
X							jjj--;
X						break;
X					case LMONSTER:
X						blink(i, j);
X						if (search_destroy(LMONSTER))
X							break;
X						jjj = 0;
X						while (jjj <= 4 && !move_monster(LMONSTER, (field[i][j].dir + jjj + 3) % 4))
X							jjj++;
X						break;
X					case EXPLOSION:
X						jjj = field[i][j].stage;
X						if (!(jjj % 5)) {
X							jjj++;		/* use jjj for setting new stage */
X							ii = (i + 1) % y;
X							jj = (j + 1) % x;
X							explode(i, j, jjj);
X							explode(i, jj, jjj);
X							explode(ii, j, jjj);
X							explode(ii, jj, jjj);
X							ii = (i + y - 1) % y;
X							explode(ii, j, jjj);
X							explode(ii, jj, jjj);
X							jj = (j + x - 1) % x;
X							explode(ii, jj, jjj);
X							explode(i, jj, jjj);
X							ii = (i + 1) % y;
X							explode(ii, jj, jjj);
X						}
X						else {
X							if (jjj % 10 < 3)
X								field[i][j].stage++;
X							else 
X								if (jjj > DIAEXPLO) {
X									set_cell(i, j, DIAMOND);
X								} 
X								else 
X									if (jjj > BOULDEXPLO) {
X										set_cell(i, j, BOULDER);
X									}
X									else
X										if (jjj > SPACEEXPLO) {
X											set_cell(i, j, SPACE);
X										}
X										else
X											field[i][j].stage++;
X						}
X						break;
X					case EXIT:
X						blink(i, j);
X						break;
X					case BLOB:
X						blobcells++;
X						if (blobcollapse)
X							set_cell(i, j, BOULDER);
X						else {
X							if (blobcells > critical)
X								blobcollapse = TRUE;
X							else {
X								if (!field[i][j].checked) {
X									if (caught(i, j))
X										propagate(i, j, DIAMOND);
X									else
X										propagate(i, j, FALSE);
X								}
X								field[i][j].checked = FALSE;
X								field[i][j].caught = TRUE;
X							}
X						}
X						blink(i, j);
X						break;
X					case NUCBAL:
X						for (jjj = 0; ((jjj < 3) && !move_nucbal(i, j, jjj)); ++jjj);
X						blink(i, j);
X						break;
X					case MAGICWALL:
X						jj = (j + x - 1) % x;
X						if (field[i][jj].content == SPACE)
X							set_cell(i, jj, MAGICWALL);
X						jj = (j + 1) % x;
X						if (field[i][jj].content == SPACE)
X							set_cell(i, jj, MAGICWALL);
X						break;
X					case TINKLE:
X						if (tinkact) {
X							blink(i, j);
X							if (tinkdur > 0) {
X								switch (field[i][j].stage) {
X									case BOULDER:
X										{
X											field[i][j].content = DIAMOND;
X											diaboulderproc(i, j);
X											break;
X										}
X									case DIAMOND:
X										{
X											field[i][j].content = BOULDER;
X											diaboulderproc(i, j);
X											break;
X										}
X									default:
X										break;
X								}
X							}
X						}
X						set_cell(i, j, TINKLE);	/* reset to empty tinkle wall */
X						break;
X					default:
X						break;
X				}
X			}
X		}
X	}
X	curorder = STAND;		/* reset orders */
X	blobcells = 0;
X	pgc = (pgc == pgc1) ? ((rand() % 22) == 0) ? pgc2 : pgc1 : pgc1;
X	dgc = (dgc == dgc1) ? dgc2 : dgc1;
X	lgc = (lgc == lgc1) ? lgc2 : lgc1;
X	rgc = (rgc == rgc1) ? rgc2 : rgc1;
X	egc = (egc == egc1) ? egc2 : egc1;
X	Bgc = (Bgc == Bgc1) ? Bgc2 : Bgc1;
X	if (tinkact)
X		tgc = (tgc == tgc1) ? tgc2 : tgc1;
X	if (!diareq) {
X		Egc = (Egc == Egc1) ? Egc2 : Egc1;
X	if (diareq == 0) {
X		diapoints = extradiapoints;
X		scoreobs = TRUE;
X	}
X}
X}
END_OF_FILE
if test 14108 -ne `wc -c <'field.c'`; then
    echo shar: \"'field.c'\" unpacked with wrong size!
fi
# end of 'field.c'
fi
if test -f 'patchlev.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patchlev.h'\"
else
echo shar: Extracting \"'patchlev.h'\" \(21 characters\)
sed "s/^X//" >'patchlev.h' <<'END_OF_FILE'
X#define PATCHLEVEL 0
END_OF_FILE
if test 21 -ne `wc -c <'patchlev.h'`; then
    echo shar: \"'patchlev.h'\" unpacked with wrong size!
fi
# end of 'patchlev.h'
fi
if test -f 'xbd.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xbd.c'\"
else
echo shar: Extracting \"'xbd.c'\" \(4685 characters\)
sed "s/^X//" >'xbd.c' <<'END_OF_FILE'
X/*********************************************/
X/* you just keep on pushing my luck over the */
X/*          BOULDER        DASH              */
X/*                                           */
X/*     Jeroen Houttuin, ETH Zurich, 1990     */
X/*                                           */
X/*                                           */
X/*	  PC-VGA version from :				*/
X/*                                           */
X/*		Herve SOULARD, Paris, 1990		*/
X/*                                           */
X/*********************************************/
X
X#include <stdio.h>
X#include <conio.h>
X#include <ctype.h>
X#include <dos.h>
X#include <graph.h>
X
X#include "xbd.h"
X
X
X
Xvoid (interrupt far *oldVect)();
X
Xint count = 0;
XBool startCount = FALSE;
XBool newLevel = FALSE;
X
X
Xvoid far interrupt newClock()
X{
X	if (startCount && count)
X		count--;
X	_chain_intr(oldVect);
X}
X
X
XBool kbdHit(void)
X{ 
X	if (*kbdPtrRead == *kbdPtrWrite)
X		return(FALSE);
X	else
X		return(TRUE);
X}
X
Xvoid getKbd(byte *TT,byte *T)
X{ 
X	*T = *(kbdBuffer + *kbdPtrRead);
X	if (*T == 0x00 || *T == 0xE0) {
X		*T = *(kbdBuffer + *kbdPtrRead + 1);
X		*TT = 'F';
X	}
X	else
X		*TT = 'T';
X	*kbdPtrRead += 2;
X	if (*kbdPtrRead == 0x3E)
X		*kbdPtrRead = 0x1E;
X}
X
X
Xvoid init_vars()
X{
X	blobbreak = 100;
X	critical = 100;
X	blobcells = 0;
X	curorder = STAND;
X	gamestop = TRUE;
X	scoreobs = TRUE;
X	stoplevel = FALSE;
X	levelnum = 1;
X	speed = 1;
X	lives = 4;
X	xin = 0;
X	yin = 0;
X	players = 1;
X}
X
X
Xvoid adapt_timer()
X{
X	if (speed <= 0)
X		speed = 1;
X	count = 34 / speed;
X}
X
X
X
X/* Handle a key stroke by the user. */
Xvoid handle_key(byte keytype, byte keyhit)
X{
X	if (players <= 0) {
X		init_level(levelnum);
X		adapt_timer();
X		stoplevel = FALSE;
X		draw_field(TRUE);
X		gamestop = TRUE;
X		players = 1;
X		return;
X	}
X	if (keytype == 'T') {
X		switch (keyhit) {
X			case K_SPACE:
X				gamestop = !gamestop;
X				break;
X		}
X	}
X	else {
X		switch (keyhit) {
X			case K_LEFT:
X				curorder = LEFT;
X				gamestop = FALSE;
X				break;
X			case K_UP:
X				curorder = UP;
X				gamestop = FALSE;
X				break;
X			case K_DOWN:
X				curorder = DOWN;
X				gamestop = FALSE;
X				break;
X			case K_RIGHT:
X				curorder = RIGHT;
X				gamestop = FALSE;
X				break;
X		}
X	}
X}
X
X
X/* Function which is called whenever the timer signal goes off */
Xvoid ticker()
X{
X	startCount = FALSE;
X	if (curtime)
X		curtime--;
X	if (tinkact)
X		tinkdur--;
X	if (curtime % 10 == 1)
X		scoreobs = TRUE;
X
X	if (!gamestop) {
X		if (newLevel) {
X			newLevel = FALSE;
X			_clearscreen(_GCLEARSCREEN);
X		}
X		calculate_field();
X		draw_field(0);
X	}
X	if (stoplevel) {
X		init_level(levelnum);
X		adapt_timer();
X		gamestop = TRUE;
X		stoplevel = FALSE;
X		newLevel = TRUE;
X	}
X	adapt_timer();
X	startCount = TRUE;
X}
X
X
X
X
Xvoid main(argc, argv)
Xint argc;
Xchar **argv;
X{
X	long		period;
X	char		buf[50];
X	int		i;
X
X	byte	keyhit;
X	byte	keytype;
X	
X	init_vars();
X
X	/* scan the command line for executing parameters and flags */
X	for (i = 1; i < argc; ++i) {
X		if (argv[i][0] == '-') {
X			if (argv[i][1] == 'l') {
X				if (argv[i][2] == '\0' && i + 1 < argc) {
X					sscanf(argv[i + 1], "%d", &levelnum);
X					i++;	
X				} 
X				else
X					sscanf(argv[i] + 2, "%d", &levelnum);
X			} 
X			else {
X				printf("usage: xbd [-l <level>] \n");
X				exit(1);
X			}
X		}
X	}
X
X	levelstart = levelnum;
X	init_level(levelnum);
X
X	oldVect = _dos_getvect(0x1C);
X	xstart();
X
X	load();
X	
X	make_gcs();
X	_clearscreen(_GCLEARSCREEN);
X	draw_field(TRUE);
X	draw_score();
X
X	/* initialize timer structure according to speed */
X	adapt_timer();
X
X	startCount = FALSE;
X	_dos_setvect(0x1C,newClock);
X	
X	while (lives > 0) {		/* MAIN LOOP */
X		if (!count) 
X			ticker();
X		if (kbdHit()) {
X			getKbd(&keytype,&keyhit);
X			if (keytype == 'T') {
X				switch (keyhit) {
X					case K_ESC:
X						xend();
X						_dos_setvect(0x1C,oldVect);
X						add_score();
X						exit(-1);
X						break;
X					case K_D:
X					case K_d:
X						curorder = KILL;
X						break;
X					case K_R:
X					case	K_r:
X						_clearscreen(_GCLEARSCREEN);
X						draw_field(TRUE);
X						break;
X					default:
X						handle_key(keytype,keyhit);
X						break;
X				}
X			}
X			/*
X				Handle of CTRL key is to be done
X				
X			if ((*kbdStatus & 0x0F) == CTL_SHIFT) {
X				steal = TRUE;
X				if (keytype == 'T') {
X					switch (keyhit) {
X						case K_C:
X						case K_U:
X						case K_c:
X						case K_u:
X							xend();
X							_dos_setvect(0x1C,oldVect);
X							add_score();
X							exit(-1);
X							break;
X						case K_D:
X						case K_d:
X							curorder = KILL;
X						case K_R:
X						case	K_r:
X							draw_field(TRUE);
X							break;
X						default:
X							handle_key(keytype,keyhit);
X							break;
X					}
X				}
X			}
X			*/
X			else
X				handle_key(keytype,keyhit);
X		}
X		if (!gamestop)
X			startCount = TRUE;
X	}
X	xend();
X	_dos_setvect(0x1C,oldVect);
X	add_score();
X	exit(-1);
X}
X
X
END_OF_FILE
if test 4685 -ne `wc -c <'xbd.c'`; then
    echo shar: \"'xbd.c'\" unpacked with wrong size!
fi
# end of 'xbd.c'
fi
if test -f 'xbde.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xbde.c'\"
else
echo shar: Extracting \"'xbde.c'\" \(9470 characters\)
sed "s/^X//" >'xbde.c' <<'END_OF_FILE'
X/*********************************************/
X/* you just keep on pushing my luck over the */
X/*		   BOULDER	   DASH			*/
X/*									*/
X/*	  Jeroen Houttuin, ETH Zurich, 1990	*/
X/*									*/
X/*									*/
X/*	  PC-VGA version from :				*/
X/*									*/
X/*		Herve SOULARD, Paris, 1990		*/
X/*									*/
X/*********************************************/
X
X#include <stdio.h>
X#include <graph.h>
X
X#include "xbd.h"
X
X#define	HEIGHT	16
X#define	WIDTH	16
X
X#define	MAXPGM	23
X
Xchar	curchar;
X
Xchar	allPgms[NB_EDIT_PGM];
X
X
XBool kbdHit(void)
X{ 
X	if (*kbdPtrRead == *kbdPtrWrite)
X		return(FALSE);
X	else
X		return(TRUE);
X}
X
Xvoid getKbd(byte *TT,byte *T)
X{ 
X	*T = *(kbdBuffer + *kbdPtrRead);
X	if (*T == 0x00 || *T == 0xE0) {
X		*T = *(kbdBuffer + *kbdPtrRead + 1);
X		*TT = 'F';
X	}
X	else
X		*TT = 'T';
X	*kbdPtrRead += 2;
X	if (*kbdPtrRead == 0x3E)
X		*kbdPtrRead = 0x1E;
X}
X
X
Xvoid init_vars()
X{
X	levelnum = -1;
X	xin = 0;
X	yin = 0;
X}
X
X
X/* Save the current level back into a file.	The global variable */
X/* filename is used to determine the file name. */
X
Xvoid save_level()
X{
X	FILE		  *levelfile;
X	char		   buf[300];
X	register int	   i, j;
X
X	/* Open the data file */
X	levelfile = fopen(filename, "w");
X	if (levelfile == NULL) {
X		exit(1);
X	}
X	
X	/* Write out the size of the level.  Normal text is used so that */
X	/* levels can be easily copied across architectures. */
X	fprintf(levelfile, "%d %d %d %d %d %d %d %d %d %s\n", y, x,
X			speed, diareq, diapoints, extradiapoints, blobbreak, 
X			tinkdur, curtime, levname);
X	
X	/* Terminate the lines for writing out the horizontal level lines */
X	buf[x] = '\n';
X	buf[x + 1] = '\0';
X	
X	/* Iterate through each vertical position */
X	for (i = 0; i < y; ++i) {
X
X		/* Copy each horizontal line into the output buffer */
X		for (j = 0; j < x; ++j)
X			buf[j] = field[i][j].content;
X		
X		/* Write the line out to the file */
X		fputs(buf, levelfile);
X	}
X	
X	/* Close the data file */
X	fclose(levelfile);
X}
X
Xint getIndex(char c)
X{
X	int i=0;
X	
X	while (allPgms[i] != c && i < NB_EDIT_PGM)
X		i++;
X	if (i == NB_EDIT_PGM)
X		return (-1);
X	else
X		return(i);
X}
X
Xvoid setCursor(xC,yC)
Xint xC,yC;
X{
X	int x,y;
X
X	_setcolor(15);
X	y = yC * HEIGHT;
X	x = xC * WIDTH;
X	_rectangle(_GBORDER, x, y, x + WIDTH -1, y + HEIGHT-1);
X	_setcolor(0);
X	_rectangle(_GBORDER, x+1, y+1, x + WIDTH-2, y + HEIGHT-2);
X
X}
X
X
Xvoid unsetCursor(xC,yC)
Xint xC,yC;
X{
X	switch (field[yC][xC].content) {
X		case GRASS:
X			drawPgm((xC << 1), (yC << 4), ggc, _GPSET);
X			break;
X		case	SPACE:
X			drawPgm((xC << 1), (yC << 4), sgc, _GPSET);
X			break;
X		case PLAYER:
X			drawPgm((xC << 1), (yC << 4), pgc, _GPSET);
X			break;
X		case WALL:
X			drawPgm((xC << 1), (yC << 4), wgc, _GPSET);
X			break;
X		case MAGICWALL:
X			drawPgm((xC << 1), (yC << 4), Wgc, _GPSET);
X			break;
X		case DIAMOND:
X			drawPgm((xC << 1), (yC << 4), dgc, _GPSET);
X			break;
X		case BOULDER:
X			drawPgm((xC << 1), (yC << 4), bgc, _GPSET);
X			break;
X		case EXPLOSION:
X			drawPgm((xC << 1), (yC << 4), xgc, _GPSET);
X			break;
X		case LMONSTER:
X			drawPgm((xC << 1), (yC << 4), lgc, _GPSET);
X			break;
X		case RMONSTER:
X			drawPgm((xC << 1), (yC << 4), rgc, _GPSET);
X			break;
X		case NUCBAL:
X			drawPgm((xC << 1), (yC << 4), ngc, _GPSET);
X			break;
X		case BLOB:
X			drawPgm((xC << 1), (yC << 4), Bgc, _GPSET);
X			break;
X		case TINKLE:
X			drawPgm((xC << 1), (yC << 4), tgc, _GPSET);
X			break;
X		case EATER:
X			drawPgm((xC << 1), (yC << 4), egc, _GPSET);
X			break;
X		case EXIT:
X			drawPgm((xC << 1), (yC << 4), Egc, _GPSET);
X			break;
X		case STEEL:
X			drawPgm((xC << 1), (yC << 4), Sgc, _GPSET);
X			break;
X	}
X}
X
Xvoid showLocPgm(int xC, int yC)
X{
X	char c;
X	int i;
X	
X	c = field[yC][xC].content;
X	i = getIndex(c);
X	_setcolor(15);
X	_rectangle(_GFILLINTERIOR, 625, 22+(i*20), 635, 26+(i*20));
X}
X
Xvoid unShowLocPgm(int xC, int yC)
X{
X	char c;
X	int i;
X	
X	c = field[yC][xC].content;
X	i = getIndex(c);
X	_setcolor(0);
X	_rectangle(_GFILLINTERIOR, 625, 22+(i*20), 635, 26+(i*20));
X}
X
Xvoid drawAllPgm()
X{
X	drawPgm(75, 16, pgc, _GPSET); allPgms[0] = PLAYER;
X	drawPgm(75, 36, sgc, _GPSET); allPgms[1] = SPACE;
X	drawPgm(75, 56, lgc, _GPSET); allPgms[2] = LMONSTER;
X	drawPgm(75, 76, rgc, _GPSET); allPgms[3] = RMONSTER;
X	drawPgm(75, 96, ggc, _GPSET); allPgms[4] = GRASS;
X	drawPgm(75,116, wgc, _GPSET);	allPgms[5] = WALL;
X	drawPgm(75,136, Wgc, _GPSET);	allPgms[6] = MAGICWALL;
X	drawPgm(75,156, dgc, _GPSET);	allPgms[7] = DIAMOND;
X	drawPgm(75,176, Sgc, _GPSET);	allPgms[8] = STEEL;
X	drawPgm(75,196, bgc, _GPSET);	allPgms[9] = BOULDER;
X	drawPgm(75,216, xgc, _GPSET);	allPgms[10] = EXPLOSION;
X	drawPgm(75,236, Egc, _GPSET);	allPgms[11] = EXIT;
X	drawPgm(75,256, egc, _GPSET);	allPgms[12] = EATER;
X	drawPgm(75,276, ngc, _GPSET);	allPgms[13] = NUCBAL;
X	drawPgm(75,296, Bgc, _GPSET);	allPgms[14] = BLOB;
X	drawPgm(75,316, tgc, _GPSET);	allPgms[15] = TINKLE;
X}
X
X
X/* Main routine for editing levels */
Xvoid main(argc, argv)
Xint	argc;
Xchar	**argv;
X{
X	register int		i, j;
X	int	tmp;
X	char	buf[50];
X	int	pX = 0,
X		pY = 0;
X
X	int curPgm = 0;
X	
X	Bool end = FALSE;
X	byte	keyhit;
X	byte	keytype;
X
X	init_vars();
X
X	/* Read in command line options */
X	for (i = 1; i < argc; ++i) {
X		if (argv[i][0] == '-') {
X			
X			/* -w sets the level width */
X			if (argv[i][1] == 'w') {
X				if (argv[i][2] == '\0' && i + 1 < argc) {
X					sscanf(argv[i + 1], "%d", &xin);
X					i++;
X				} 
X				else
X					sscanf(argv[i] + 2, "%d", &xin);
X			}
X			
X			/* -h sets the level height */
X			else 
X				if (argv[i][1] == 'h') {
X					if (argv[i][2] == '\0' && i + 1 < argc) {
X						sscanf(argv[i + 1], "%d", &yin);
X						i++;
X					} 
X					else
X						sscanf(argv[i] + 2, "%d", &yin);
X				}
X				
X				/* -l sets the level number */
X				else 
X					if (argv[i][1] == 'l') {
X						if (argv[i][2] == '\0' && i + 1 < argc) {
X							sscanf(argv[i + 1], "%d", &levelnum);
X							i++;
X						} 
X						else
X							sscanf(argv[i] + 2, "%d", &levelnum);
X					} 
X					else	{
X						printf("usage: xbde [-h <height>] [-w <width>] -l <level> \n");
X						exit(1);
X					}
X		}
X	}
X	
X	/* Make sure some value was chosen for the level number.	This */
X	/* discourages everybody editing the same level all the time. */
X	if (levelnum == -1) {
X		printf("usage: xbde [-h <height>] [-w <width>] -l <level> \n");
X		exit(1);
X	}
X	
X	/* Load in level data from file. */
X	init_level(levelnum);
X	
X	/* Start up X windows and create all graphics cursors */
X	xstart();
X
X	load();
X	
X	make_gcs();
X	Egc = Egc2;
X	Wgc = Wgc2;
X	tgc = tgc3;
X	draw_field(TRUE);
X
X
X	drawAllPgm();
X	_setcolor(15);
X	_rectangle(_GFILLINTERIOR, 580, 22+(curPgm*20), 590, 26+(curPgm*20));
X	showLocPgm(pX,pY);
X
X	
X	/* Main event loop */
X	while (!end) {
X		setCursor(pX, pY);
X		if (kbdHit()) {
X			getKbd(&keytype,&keyhit);
X			if (keytype == 'T') {
X				switch (keyhit) {
X					/* C erases the entire level */
X					case K_C :
X					case K_c :
X						/* Replace level contents with space */
X						for (i = 0; i < y; ++i)
X							for (j = 0; j < x; ++j)
X								if ((i == 0) || (i == y - 1) 
X									|| (j == 0) || (j == x - 1))
X									set_cell(i, j, STEEL);
X								else
X									set_cell(i, j, SPACE);
X						/* Redraw empty level */
X						draw_field(FALSE);
X						showLocPgm(pX,pY);
X						break;
X
X					case K_U :
X					case K_u :
X						save_level();
X						break;
X
X					case K_ESC :
X						end = TRUE;
X						break;
X						
X					case K_SPACE :
X						unShowLocPgm(pX,pY);
X						set_cell(pY, pX, allPgms[curPgm]);
X						showLocPgm(pX,pY);
X						break;
X						
X					default :
X						curchar = keyhit;
X						break;
X				}
X			}
X			else {
X				switch (keyhit) {
X					case K_PGUP :
X						_setcolor(0);
X						_rectangle(_GFILLINTERIOR, 580, 22+(curPgm*20),
X							      590, 26+(curPgm*20));
X						if (--curPgm < 0)
X							curPgm = NB_EDIT_PGM - 1;
X						_setcolor(15);
X						_rectangle(_GFILLINTERIOR, 580, 22+(curPgm*20),
X							      590, 26+(curPgm*20));
X						break;
X
X					case K_PGDOWN :
X						_setcolor(0);
X						_rectangle(_GFILLINTERIOR, 580, 22+(curPgm*20),
X							      590, 26+(curPgm*20));
X						if (++curPgm >= NB_EDIT_PGM)
X							curPgm = 0;
X						_setcolor(15);
X						_rectangle(_GFILLINTERIOR, 580, 22+(curPgm*20),
X							      590, 26+(curPgm*20));
X						break;
X
X					case K_LEFT :
X						unsetCursor(pX,pY);
X						unShowLocPgm(pX,pY);
X						if (--pX < 0)
X							pX = x-1;
X						setCursor(pX,pY);
X						showLocPgm(pX,pY);
X						break;
X
X					case K_RIGHT :
X						unsetCursor(pX,pY);
X						unShowLocPgm(pX,pY);
X						if (++pX >= x)
X							pX = 0;
X						setCursor(pX,pY);
X						showLocPgm(pX,pY);
X						break;
X
X					case K_UP :
X						unsetCursor(pX,pY);
X						unShowLocPgm(pX,pY);
X						if (--pY < 0)
X							pY = y-1;
X						setCursor(pX,pY);
X						showLocPgm(pX,pY);
X						break;
X						
X					case K_DOWN :
X						unShowLocPgm(pX,pY);
X						unsetCursor(pX,pY);
X						if (++pY >= y)
X							pY = 0;
X						showLocPgm(pX,pY);
X						setCursor(pX,pY);
X						break;
X				}
X			}
X		}
X		unsetCursor(pX, pY);
X			
X		/* If the mouse moves with the button pressed, or the button is */
X		/* pressed, draw the current block at that position */
X		
X		/*
X		else 
X			if (xev.type == MotionNotify) {
X				if (xev.xmotion.state & Button3Mask)
X					set_cell(xev.xmotion.y >> 5, xev.xmotion.x >> 5, SPACE);
X				else 
X					if (xev.xmotion.state & Button1Mask)
X						set_cell(xev.xmotion.y >> 5, xev.xmotion.x >> 5, curchar);
X			} 
X			else 
X				if (xev.type == ButtonPress) {
X					if (xev.xbutton.button == Button3)
X						set_cell(xev.xbutton.y >> 5, xev.xbutton.x >> 5, SPACE);
X					else
X						set_cell(xev.xbutton.y >> 5, xev.xbutton.x >> 5, curchar);
X				}
X			draw_field(FALSE);
X			XFlush(disp);
X			
X		*/
X		
X	} 
X	  
X	xend();
X	exit(0);
X}
END_OF_FILE
if test 9470 -ne `wc -c <'xbde.c'`; then
    echo shar: \"'xbde.c'\" unpacked with wrong size!
fi
# end of 'xbde.c'
fi
echo shar: End of archive 1 \(of 3\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 3 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0