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