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