games@tekred.CNA.TEK.COM (02/15/89)
Submitted by: Dave Bodenstab <att!iwsl8!imdave>
Comp.sources.games: Volume 6, Issue 10
Archive-name: ega-wanderer/Part02
#! /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 2 (of 5)."
# Contents: 159x174.c edit.c game.c read.c
# Wrapped by billr@saab on Tue Feb 14 15:28:00 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f '159x174.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'159x174.c'\"
else
echo shar: Extracting \"'159x174.c'\" \(21921 characters\)
sed "s/^X//" >'159x174.c' <<'END_OF_FILE'
X#include "bitmap.h"
X
XBM(159,174) wanderer ={ 159, 174,
X 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
X 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x80, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
X 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07,
X 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
X 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
X 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff,
X 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfc, 0x00,
X 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
X 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfe,
X 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x03, 0xff,
X 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
X 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0xff, 0xff, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xc1, 0xff,
X 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe0, 0x7f, 0xff, 0x80, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x3f, 0xff, 0x00,
X 0x00, 0x00, 0x03, 0xff, 0xf8, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
X 0x03, 0xff, 0xfc, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x1f, 0xe0, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xfc,
X 0x7c, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x0f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x1c, 0x7f,
X 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe1,
X 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x1c, 0x7f, 0xff, 0xc0,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe3, 0xe3, 0xff,
X 0xfe, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x1c, 0x7f, 0xff, 0xc0, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe3, 0x80, 0xff, 0xfe, 0x00,
X 0x00, 0x00, 0x03, 0xf0, 0x1c, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x07, 0xe3, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00,
X 0x03, 0xfc, 0x7c, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x03, 0xe7, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff,
X 0xfc, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
X 0x01, 0xef, 0x80, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfd, 0xff,
X 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xff,
X 0xe3, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80,
X 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff,
X 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
X 0x00, 0x70, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00,
X 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0xf8,
X 0x1f, 0x80, 0x06, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00,
X 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xc0,
X 0x1f, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f,
X 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x0f, 0xe0, 0x3f, 0x00,
X 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
X 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x07, 0xf0, 0x7e, 0x01, 0xc0, 0x00,
X 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00,
X 0x00, 0x00, 0x00, 0x1f, 0x83, 0xf8, 0xfc, 0x07, 0xe0, 0x00, 0x0f, 0xff,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
X 0x00, 0x0f, 0xc1, 0xfc, 0xfc, 0x0f, 0xc0, 0x00, 0x01, 0xff, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
X 0xe0, 0xfc, 0xfc, 0x1f, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0xfc,
X 0xfc, 0x3f, 0x01, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x01, 0xf8, 0xfc, 0xfc, 0x7e,
X 0x07, 0xe0, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80,
X 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0xfc, 0xfc, 0xfc, 0x7e, 0x0f, 0xc0,
X 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
X 0x00, 0x07, 0xfc, 0x00, 0xfc, 0xfc, 0xfc, 0x7e, 0x1f, 0x80, 0x00, 0x1f,
X 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
X 0xfe, 0x00, 0x7d, 0xfc, 0xfc, 0x7e, 0x3f, 0x00, 0x00, 0x1f, 0xc0, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80,
X 0x7f, 0xfc, 0xfc, 0x7e, 0x3f, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x3f, 0xf8,
X 0xfc, 0x7e, 0x3f, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x07, 0xff, 0x00,
X 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x3f, 0xf0, 0xfc, 0x7e,
X 0x3f, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xf0, 0xff, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x3f, 0xe0, 0xfc, 0x7e, 0x3f, 0x00,
X 0x00, 0x07, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0xff, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x01, 0xf8, 0x7f, 0xe0, 0xfc, 0xfe, 0x7e, 0x00, 0x00, 0x07,
X 0xf8, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07,
X 0x00, 0xff, 0xff, 0xc0, 0xfc, 0xfe, 0x7e, 0x00, 0x00, 0x07, 0xfc, 0x7f,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x7f,
X 0xff, 0xc0, 0xfc, 0xfe, 0x7e, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x7f, 0xff, 0x80,
X 0xfe, 0xff, 0x7e, 0x01, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x7f, 0xff, 0x80, 0xfe, 0xff,
X 0x7e, 0x03, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
X 0x00, 0x00, 0x00, 0x1f, 0x80, 0x7f, 0xff, 0x00, 0xfe, 0xff, 0x7e, 0x07,
X 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
X 0x00, 0x3f, 0x00, 0x7f, 0xff, 0x00, 0xff, 0xff, 0xfc, 0x0f, 0xe0, 0x01,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f,
X 0x80, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0xc0, 0x00, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xff, 0xff,
X 0xff, 0x00, 0xff, 0xff, 0xf8, 0x3f, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00,
X 0xff, 0xff, 0xf8, 0x7f, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0xff, 0xff,
X 0xf8, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfd, 0xfe,
X 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
X 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,
X 0x00, 0x1f, 0xff, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f,
X 0xff, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
X 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0xff, 0xff,
X 0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0xff, 0xff, 0xff, 0xc0,
X 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
X 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x7f, 0xff, 0xff, 0x80, 0x00, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
X 0x00, 0x01, 0xff, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01,
X 0xff, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00,
X 0x07, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x03, 0xff,
X 0xc0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x03, 0xff, 0x80, 0x00,
X 0x01, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x80,
X 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x03, 0xff, 0x80, 0x00, 0x01, 0xff,
X 0xff, 0xff, 0xff, 0xe3, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
X 0x00, 0x01, 0xff, 0x00, 0x03, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff,
X 0xff, 0xe3, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01,
X 0xff, 0x00, 0x03, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc1,
X 0xe0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00,
X 0x03, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x03, 0xff,
X 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x03, 0xff, 0x80, 0x00,
X 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
X 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00,
X 0x00, 0x3f, 0xfe, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff,
X 0xfe, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00,
X 0x03, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xe3,
X 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x03, 0xff,
X 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xc1, 0xff, 0xff,
X 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xfe, 0x00,
X 0x0f, 0xff, 0xff, 0xff, 0xe7, 0x1f, 0xff, 0xc1, 0xe3, 0xff, 0xff, 0xf0,
X 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x1f, 0xff,
X 0xff, 0xff, 0xc7, 0x1c, 0x01, 0xc1, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xfe,
X 0x07, 0x1c, 0x00, 0xe1, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0x80, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf8, 0x07, 0x1c,
X 0x00, 0x71, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
X 0x00, 0x1f, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0x1c, 0x00, 0x39,
X 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0f,
X 0xff, 0xff, 0x1f, 0xff, 0xff, 0xe0, 0x07, 0x1c, 0x00, 0x1d, 0xc0, 0x00,
X 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff,
X 0xdf, 0xff, 0xff, 0xc0, 0x07, 0x1c, 0x00, 0x1d, 0xc0, 0x00, 0x7f, 0xff,
X 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xc0, 0x07, 0x38, 0x00, 0x0f, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xf8,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
X 0x03, 0xf0, 0x00, 0x07, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xc0,
X 0x00, 0x02, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x80, 0x00, 0x00,
X 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
X 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
X 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x80,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x0f,
X 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x1f, 0xff, 0xc0,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
X 0xff, 0x80, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80,
X 0x00, 0x01, 0xdc, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x03,
X 0x8e, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x07, 0x0e, 0x00,
X 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x0e, 0x07, 0x00, 0x1f, 0xff,
X 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x03, 0xff, 0xff, 0xfe, 0x00, 0x1c, 0x07, 0x00, 0x7f, 0xff, 0xff, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
X 0xff, 0xff, 0x00, 0x1c, 0x07, 0x01, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff,
X 0xc0, 0x1c, 0x07, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf8, 0x1c,
X 0x07, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfc, 0x1e, 0x07, 0x7f,
X 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff,
X 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x0f, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
X 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0,
X 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x07,
X 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0xfe,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
X 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00,
X 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00,
X 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
X 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc3, 0xc0, 0x00, 0x00, 0x3f, 0xff,
X 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x03, 0xe3, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00,
X 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0x3e, 0x00, 0x00, 0x00,
X 0x00, 0x01, 0xf3, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
X 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x01,
X 0xf9, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
X 0xe0, 0x00, 0x00, 0x1e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe,
X 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00,
X 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff,
X 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xc0,
X 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,
X 0x00, 0x00, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00,
X 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1f,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
X 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
X 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
X 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
X 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x01,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
X 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff,
X 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, };
END_OF_FILE
if test 21921 -ne `wc -c <'159x174.c'`; then
echo shar: \"'159x174.c'\" unpacked with wrong size!
fi
# end of '159x174.c'
fi
if test -f 'edit.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'edit.c'\"
else
echo shar: Extracting \"'edit.c'\" \(8175 characters\)
sed "s/^X//" >'edit.c' <<'END_OF_FILE'
X#include "wand_head.h"
X#ifdef EGA
X#include "bitmap.h"
X
Xextern bitmap *b16x16[];
Xextern char *EGAaddr;
X
Xint egaedit();
Xint screenedit();
X#endif
X
Xextern char *playscreen();
X
Xextern int debug_disp;
Xextern char *edit_screen;
Xextern char (*screen)[ROWLEN+1+1];
X
X
Xstatic char *inst[] = { "O Boulder",
X "< > Arrows",
X "^ Balloon",
X ": Earth",
X "! Landmine",
X "* Treasure",
X "/ \\ Deflectors",
X "+ Cage",
X "= # Rock",
X "T Teleport",
X "A Arrival (1 max)",
X "X Exit (always 1)",
X "@ Start (always 1)",
X "M Big Monster (1 max)",
X "S Baby Monster",
X "- Alternative space",
X "C Time Capsule",
X NULL };
X
X/* Print instructions around the screen */
Xvoid instruct()
X{
Xint loop;
Xfor(loop = 0; inst[loop] ; loop++)
X mvaddstr(loop+1,55,inst[loop]);
Xmvaddstr(20,0,"Use wanderer keys to move. m = change no. of moves, p = play game");
Xmvaddstr(21,0,"n = play game with full screen, q = quit, x = quit without save.");
X}
X
Xvoid noins()
X{
Xint loop;
Xfor(loop =0; inst[loop] ; loop++)
X mvaddstr(loop+1,55," ");
Xmove(20,0);
Xclrtoeol();
Xmove(21,0);
Xclrtoeol();
X}
X
Xvoid edit(num,score,bell,maxmoves,keys)
Xint num, maxmoves,
X *bell;
Xlong *score;
Xchar keys[10];
X{
Xint x,y,sx=0,sy=0,nosave;
X
Xfor(x=0;x<=ROWLEN;x++)
X for(y=0;y<NOOFROWS;y++)
X {
X if(screen[y][x] == '@')
X {
X sx = x;
X sy = y;
X }
X if(screen[y][x] == '-')
X screen[y][x] = ' ';
X }
X
X#ifdef EGA
Xif(EGAaddr)
X nosave = egaedit(sx,sy,num,score,bell,maxmoves,keys);
Xelse
X#endif
X nosave = screenedit(sx,sy,num,score,bell,maxmoves,keys);
X
Xif(! nosave)
X {
X for(y = 0; y<=NOOFROWS;y++) /* certain editors - eg ded - have a */
X /* habit of truncating trailing spaces*/
X /* so this should stop them! */
X if(screen[y][ROWLEN-1] == ' ')
X screen[y][ROWLEN-1] = '-';
X wscreen(num,maxmoves);
X }
X
Xmove(20,0);
Xrefresh();
X}
X
X#ifdef EGA
Xint egaedit(x,y,num,score,bell,maxmoves,keys)
Xint num, maxmoves,
X *bell;
Xlong *score;
Xchar keys[10];
X{
Xint ch,quit=0,nx,ny,nosave =0;
Xchar buffer[81];
Xchar *howdead;
XBM(16,16) xmap;
Xbitmap *omap;
X
Xstart_over:
X
Xdebug_disp=1;
Xmap();
X
Xif(maxmoves != 0)
X egaprintf(0,260,"Moves = %-5d",maxmoves);
Xelse
X egaputs(0,260,"Unlimited moves");
X
Xegaputs(0,278," / \\ Deflectors O Boulder T Teleport : Earth");
Xegaputs(0,287," < > Arrows ^ Balloon A Arrival + Cage");
Xegaputs(0,296," = # Brick/Wall ! Landmine X Exit M Big Monster");
Xegaputs(0,305," C Time capsule * Treasure - Space S Baby Monster");
Xegaputs(0,323," Use wanderer keys to move. m = change # of moves, p = play game,");
Xegaputs(0,332," n = play game with full screen, q = quit, x = quit without save.");
X
X/* ACTUAL EDIT FUNCTION */
X
Xwhile(!quit)
X {
X invert( &xmap, omap = b16x16[ symbol(screen[y][x]) ] );
X
X egapaint( x * xmap.x, y * xmap.y, &xmap );
X
X ch = Getch();
X
X nx=x;
X ny=y;
X
X if(ch == keys[3]||ch == keys[2]||ch == keys[1]||ch == keys[0]||ch == '\b')
X {
X if(ch == keys[3])
X nx++;
X if(ch == keys[2] || ch == '\b')
X nx--;
X if(ch == keys[1])
X ny++;
X if(ch == keys[0])
X ny--;
X }
X else if(ch == 'q')
X break;
X else if(ch == 'x')
X {
X egaputs(4,341,"You will lose any changes made this session - are you sure? (y/n)");
X ch = Getch();
X egaclear(4,341, 639,349);
X if(ch == 'y')
X {
X nosave = 1;
X break;
X }
X }
X else if(ch == 'm') /* change to number of moves for the screen */
X {
X egaputs(0+30*8, 260,"How many moves for this screen? ");
X egagets(0+30*8+32*8,260,buffer);
X sscanf(buffer,"%d",&maxmoves);
X if(maxmoves < 0 ) maxmoves = 0;
X egaclear(0+30*8,260, 0+30*8+40*8,268);
X if(maxmoves != 0)
X egaprintf(0,260,"Moves = %-5d",maxmoves);
X else
X egaputs(0,260,"Unlimited moves");
X }
X else if(ch == 'p' || ch == 'n') /* play the game (test) */
X {
X wscreen(num,maxmoves);
X if(ch == 'p')
X debug_disp = 0;
X *score = 0;
X howdead = playscreen(&num,score,bell,maxmoves,keys);
X if(howdead!=NULL)
X sprintf(buffer,"Killed by %-57s Hit any key",howdead);
X else
X sprintf(buffer,"%-67s Hit any key", "You made it!" );
X egaputs(4,341,buffer);
X (void) Getch();
X egaclear(4,341, 639,349);
X rscreen(num,&maxmoves);
X goto start_over;
X }
X else
X {
X if(ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A';
X if(ch < ' ' || ch >= 127) ch = '.'; /* no ctrl codes, thankyou */
X if(ch == '"') ch = Getch();
X invert( &xmap, omap = b16x16[ symbol(screen[y][x]=ch) ] );
X egapaint( x * xmap.x, y * xmap.y, &xmap );
X nx++;
X }
X if(nx < 0)
X {
X nx = ROWLEN-1;
X ny--;
X }
X if(nx >= ROWLEN)
X {
X nx = 0;
X ny++;
X }
X if(ny < 0) ny = NOOFROWS-1;
X if(ny >= NOOFROWS) ny = 0;
X if(x != nx || y != ny) {
X egapaint( x * omap->width, y * omap->height, omap );
X x=nx;
X y=ny;
X }
X }
X
Xreturn( nosave );
X}
X
X/*
X * Invert a bitmap and put a border around it
X */
Xinvert( d, s )
Xbitmap *d, *s;
X{
X int i, x, y, border, w = (s->width + 7) / 8;
X
X *d = *s;
X memcpy( d->bits, s->bits, s->height * w );
X
X for( i = 0; i < d->height * w; ++i )
X d->bits[i] ^= 0xff;
X
X border = 0x0101 >> (d->width & 07);
X
X for( y = 0; y < d->height; ++y ) {
X if ( y == 0 )
X for( x = 0; x < w; ++x )
X d->bits[y * w + x] = 0xff;
X d->bits[y * w] |= 0x80;
X d->bits[y * w + w - 1] |= border;
X if ( y == d->height - 1 )
X for( x = 0; x < w; ++x )
X d->bits[y * w + x] = 0xff;
X }
X}
X#endif
X
X
Xint screenedit(x,y,num,score,bell,maxmoves,keys)
Xint num, maxmoves,
X *bell;
Xlong *score;
Xchar keys[10];
X{
Xint ch,quit=0,nx,ny,nosave =0;
Xchar buffer[50];
Xchar *howdead;
X
Xif(maxmoves != 0)
X (void) sprintf(buffer,"Moves remaining = %d ",maxmoves);
Xelse
X (void) strcpy(buffer," Unlimited moves ");
Xdebug_disp=1;
Xmap();
Xmove(18,0);
Xaddstr(buffer);
X
X/* ACTUAL EDIT FUNCTION */
X
Xinstruct();
Xwhile(!quit)
X {
X move(y+1,x+1);
X refresh();
X ch = getch();
X
X nx=x;
X ny=y;
X
X if(ch == keys[3]||ch == keys[2]||ch == keys[1]||ch == keys[0]||
X ch == KEY_RIGHT||ch == KEY_LEFT||ch == KEY_BACKSPACE||ch == KEY_DOWN||ch == KEY_UP||ch == '\b')
X {
X if(ch == keys[3] || ch == KEY_RIGHT)
X nx++;
X if(ch == keys[2] || ch == KEY_LEFT || ch == KEY_BACKSPACE || ch == '\b')
X nx--;
X if(ch == keys[1] || ch == KEY_DOWN)
X ny++;
X if(ch == keys[0] || ch == KEY_UP)
X ny--;
X }
X else if(ch == 'q')
X {
X noins();
X break;
X }
X else if(ch == 'x')
X {
X noins();
X mvaddstr(20,0,"You will lose any changes made this session - are you sure? (y/n)");
X refresh();
X ch = getch();
X if(ch != 'y')
X {
X noins();
X instruct();
X refresh();
X }
X else
X {
X nosave = 1;
X addch('\n');
X refresh();
X break;
X }
X }
X else if(ch == 'm') /* change to number of moves for the screen */
X {
X mvaddstr(19,0,"How many moves for this screen? :");
X refresh();
X echo();
X scanw("%d",&maxmoves);
X noecho();
X if(maxmoves < 0 ) maxmoves = 0;
X mvaddstr(19,0," ");
X if(maxmoves != 0)
X mvprintw(18,0,"Moves remaining = %d ",maxmoves);
X else
X mvaddstr(18,0," Unlimited moves ");
X refresh(); /* for some reason, this seems to add a '.' to */
X /* the map... Ive no idea why yet... */
X }
X else if(ch == 'p' || ch == 'n') /* play the game (test) */
X {
X noins();
X wscreen(num,maxmoves);
X if(ch == 'p')
X {
X debug_disp = 0;
X clear();
X }
X *score = 0;
X howdead = playscreen(&num,score,bell,maxmoves,keys);
X if(howdead!=NULL)
X mvprintw(20,0,"Killed by %s",howdead);
X else
X mvaddstr(20,0,"DONE!");
X addstr("; hit any key to continue\n");
X refresh();
X (void) getch();
X clear();
X rscreen(num,&maxmoves);
X debug_disp = 1;
X map();
X instruct();
X }
X else
X {
X if(ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A';
X if(ch < ' ' || ch >= 127) ch = '.'; /* no ctrl codes, thankyou */
X if(ch == '"') ch = getch();
X screen[y][x] = ch;
X mvaddch(y+1,x+1,ch);
X nx++;
X }
X if(nx < 0)
X {
X nx = ROWLEN-1;
X ny--;
X }
X if(nx >= ROWLEN)
X {
X nx = 0;
X ny++;
X }
X if(ny < 0) ny = NOOFROWS-1;
X if(ny >= NOOFROWS) ny = 0;
X move(ny+1,nx+1);
X x=nx;
X y=ny;
X }
X
Xnoins();
X
Xreturn( nosave );
X}
END_OF_FILE
if test 8175 -ne `wc -c <'edit.c'`; then
echo shar: \"'edit.c'\" unpacked with wrong size!
fi
# end of 'edit.c'
fi
if test -f 'game.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'game.c'\"
else
echo shar: Extracting \"'game.c'\" \(20960 characters\)
sed "s/^X//" >'game.c' <<'END_OF_FILE'
X#include "wand_head.h"
X
X#ifdef EGA
X#include "bitmap.h"
X
Xextern bitmap *b16x16[];
Xextern bitmap *b48x48[];
Xextern char *EGAaddr;
X
Xchar *split();
X#endif
X
X#define viable(x,y) (((screen[y][x] == ' ') || (screen[y][x] == ':') ||\
X (screen[y][x] == '@') || (screen[y][x] == '+') ||\
X (screen[y][x] == 'S')) && (y >= 0) &&\
X (x >= 0) && (y < NOOFROWS) && (x < ROWLEN))
X
Xtypedef struct { int d[2]; } direction;
X
X#ifdef LINT_ARGS /* M001 */
Xstatic int new_direction(int, int, int, int, direction*);
X#else
Xstatic int new_direction();
X#endif
X
Xextern int jumpscreen();
Xextern int check();
Xextern void showpass();
Xextern void draw_symbol();
Xextern void display();
Xextern int fall();
Xextern void map();
Xextern void redraw_screen();
Xextern int debug_disp;
Xextern int edit_mode;
Xextern int saved_game;
Xextern char (*screen)[ROWLEN+1+1];
X
X/* Add a spirit to the chain */
X/* Maintain a doubly linked list to make reuse possible.
X tail_of_list is *NOT* the last monster allocated, but
X the last monster alloted to a screen. start_of_list
X is a dummy entry to ease processing. last_of_list
X is the last entry allocated. */
Xstatic struct mon_rec start_of_list = {0,0,0,0,0,NULL,NULL};
X
Xstruct mon_rec *tail_of_list;
Xstruct mon_rec *last_of_list;
X
Xstruct mon_rec *make_monster(x,y)
Xint x,y;
X{
Xchar *malloc();
X#define MALLOC (struct mon_rec *)malloc(sizeof(struct mon_rec))
Xstruct mon_rec *monster;
Xif(tail_of_list->next == NULL)
X {
X if((last_of_list = MALLOC) == NULL)
X return NULL;
X tail_of_list->next = last_of_list;
X last_of_list->prev = tail_of_list;
X last_of_list->next = NULL;
X }
Xmonster = tail_of_list = tail_of_list->next;
Xmonster->x = x;
Xmonster->y = y;
Xmonster->mx = 1; /* always start moving RIGHT. (fix later) */
Xmonster->my = 0;
Xmonster->under = ' ';
Xreturn monster;
X}
X
X/* find a monster at [y,x]; but not this_one */
X
Xstruct mon_rec *monster_at_xy( x, y, this_one )
Xstruct mon_rec *this_one;
X{
Xstruct mon_rec *mp;
Xmp = &start_of_list;
Xwhile( mp != tail_of_list )
X {
X mp = mp->next;
X if(mp->x == x && mp->y == y)
X if(mp != this_one)
X return mp;
X }
Xreturn NULL;
X}
X
X/* escape from a monster (only possible when debugging) */
X
Xreset_under( x, y )
X{
Xstruct mon_rec *mp;
Xmp = &start_of_list;
Xwhile( mp != tail_of_list )
X {
X mp = mp->next;
X if(mp->x == x && mp->y == y)
X mp->under = ' ';
X }
X}
X
X/* 'follow lefthand wall' algorithm for baby monsters */
X
Xstatic int new_direction(x,y,bx,by,out)
Xint x,y,bx,by;
Xdirection *out;
X{
Xif(viable((x+by),(y-bx)))
X {
X out->d[0] = by;
X out->d[1] = -bx;
X return 1;
X }
Xif(viable((x+bx),(y+by)))
X {
X out->d[0] = bx;
X out->d[1] = by;
X return 1;
X }
Xif(viable((x-by),(y+bx)))
X {
X out->d[0] = -by;
X out->d[1] = bx;
X return 1;
X }
Xif(viable((x-bx),(y-by)))
X {
X out->d[0] = -bx;
X out->d[1] = -by;
X return 1;
X }
Xout->d[0] =
Xout->d[1] = 0;
Xreturn 0;
X}
X
X/* Actual game function -
X Calls fall() to move boulders and arrows recursively */
X/* Variable explaination :
X All the var names make sense to ME, but some people think them a
X bit confusing... :-) So heres an explanation:
X x,y : where you are
X nx,ny : where you're trying to move to
X sx,sy : where the screen window on the playing area is
X mx,my : where the monster is
X tx,ty : teleport arrival
X lx,ly : the place you left when teleporting
X nf : how many diamonds youve got so far
X new_disp : the vector the baby monster is trying
X*/
X
Xchar *playscreen(num,score,bell,maxmoves,keys)
Xint *num, maxmoves, *bell;
Xlong *score;
Xchar keys[10];
X{
Xint x,y,nx,ny,deadyet =0,
X sx = -1,sy = -1,tx = -1,ty = -1,lx,ly,mx = -1,my = -1,
X tmpx,tmpy, ch, newnum,
X max_score = 250,
X diamonds = 0, nf = 0,hd ,vd ,xdirection,ydirection;
Xstatic char howdead[25]; /* M001 can't use auto var for return value */
Xdirection new_disp;
Xstruct mon_rec *monster,*current,*mp;
Xstruct { int x,y,c; } redraw;
X
Xtail_of_list = &start_of_list;
X
Xfor(x=0;x<=ROWLEN;x++)
X for(y=0;y<NOOFROWS;y++)
X {
X if((screen[y][x] == '*')||(screen[y][x] == '+'))
X {
X diamonds++;
X max_score += 10;
X if(screen[y][x] == '+')
X max_score += 20;
X }
X if(screen[y][x] == 'A') /* note teleport arrival point & */
X { /* replace with space */
X tx = x;
X ty = y;
X screen[y][x] = ' ';
X }
X if(screen[y][x] == '@')
X {
X sx = x;
X sy = y;
X }
X if(screen[y][x] == 'M') /* Put megamonster in */
X {
X mx = x;
X my = y;
X }
X if(screen[y][x] == 'S') /* link small monster to pointer chain */
X {
X if((monster = make_monster(x,y)) == NULL)
X return "running out of memory";
X if(!viable(x,y-1)) /* make sure its running in the correct */
X { /* direction.. */
X monster->mx = 1;
X monster->my = 0;
X }
X else if(!viable(x+1,y))
X {
X monster->mx = 0;
X monster->my = 1;
X }
X else if(!viable(x,y+1))
X {
X monster->mx = -1;
X monster->my = 0;
X }
X else if(!viable(x-1,y))
X {
X monster->mx = 0;
X monster->my = -1;
X }
X }
X if(screen[y][x] == '-')
X screen[y][x] = ' ';
X }
Xx=sx;
Xy=sy;
Xif((x == -1)&&(y == -1)) /* no start position in screen ? */
X return "a screen design error";
X
Xupdate_game: /* M002 restored game restarts here */
X
Xredraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X
Xredraw.c = 0;
X
X/* ACTUAL GAME FUNCTION - Returns method of death in string */
Xwhile(deadyet == 0)
X{
Xch = getch();
X
Xnx=x;
Xny=y;
X
Xif((ch == keys[3] || ch == KEY_RIGHT) && (x <(ROWLEN-1))) /* move about - but thats obvious */
X nx++;
Xif((ch == keys[2] || ch == KEY_LEFT || ch == KEY_BACKSPACE || ch == '\b') && (x > 0))
X nx--;
Xif((ch == keys[1] || ch == KEY_DOWN) && (y <(NOOFROWS-1)))
X ny++;
Xif((ch == keys[0] || ch == KEY_UP) && (y > 0))
X ny--;
Xif(ch == '1') /* Add or get rid of that awful sound */
X {
X *bell = 1;
X beep();
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egaputs( 4+28*8,306, " Bell ON " );
X else
X egaputs( 540,104, "Bell ON " );
X }
X else
X#endif
X {
X move(10,45);
X (void) addstr("Bell ON ");
X move(16,0);
X refresh();
X }
X continue;
X }
Xif(ch == '0')
X {
X *bell = 0;
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egaputs( 4+28*8,306, " Bell OFF" );
X else
X egaputs( 540,104, "Bell OFF" );
X }
X else
X#endif
X {
X move(10,45);
X (void) addstr("Bell OFF");
X move(16,0);
X refresh();
X }
X continue;
X }
Xif(ch == '~' && !edit_mode) /* level jump */
X {
X if((newnum = jumpscreen(*num)) == 0)
X return "a jump error";
X if(newnum != *num)
X { /* Sorry Greg, no points for free */
X sprintf(howdead,"~%c",newnum);
X return howdead;
X }
X beep();
X continue;
X }
Xif(ch == '!' || ch == 'v') /* look at the map */
X {
X if(debug_disp)
X continue;
X#ifdef EGA
X if(EGAaddr) {
X map();
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X }
X else
X#endif
X {
X map();
X display(sx,sy);
X }
X continue;
X }
Xif(ch == 'q')
X return "quitting the game";
Xif(ch == '?')
X {
X helpme(keys);
X#ifdef EGA
X if(EGAaddr)
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X else
X#endif
X if(debug_disp)
X map();
X else
X display(sx,sy);
X continue;
X }
Xif((ch == '@')&&(!debug_disp))
X {
X sx = x;
X sy = y;
X display(sx,sy);
X continue;
X }
Xif(ch == '#')
X {
X debug_disp = 1 - debug_disp;
X sx = x; sy = y;
X#ifdef EGA
X if(EGAaddr)
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X else
X#endif
X if(debug_disp)
X map();
X else
X {
X for(tmpy=0;tmpy<=(NOOFROWS+1);tmpy++)
X {
X move(tmpy,0);
X for(tmpx=0;tmpx<=(ROWLEN+2);tmpx++)
X addch(' ');
X }
X display(sx,sy);
X }
X continue;
X }
Xif(ch == 'W' || ch == '\f') /* redraw screen */
X {
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X continue;
X }
X
X/* M002 Added save/restore game feature. Gregory H. Margo */
Xif(ch == 'S') /* save game */
X {
X extern struct save_vars zz;
X
X /* stuff away important local variables to be saved */
X /* so the game state may be acurately restored */
X zz.z_x = x;
X zz.z_y = y;
X zz.z_tx = tx;
X zz.z_ty = ty;
X zz.z_mx = mx;
X zz.z_my = my;
X zz.z_max_score = max_score;
X zz.z_diamonds = diamonds;
X zz.z_nf = nf;
X
X save_game(*num,score,bell,maxmoves,&start_of_list,tail_of_list);
X
X /* must have had an error saving game */
X#ifdef EGA
X if(EGAaddr) {
X egaputs(4,341,"Hit any key to continue");
X (void) Getch();
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X }
X else
X#endif
X {
X mvaddstr(LINES - 1, 0, "Type any character to continue");
X refresh();
X (void) getch();
X move(LINES - 3, 0);
X clrtobot();
X move(16,0);
X refresh();
X }
X continue;
X }
Xif(ch == 'R') /* restore game */
X {
X extern struct save_vars zz;
X
X if (!restore_game(num,score,bell,&maxmoves,&start_of_list,&tail_of_list))
X {
X#ifdef EGA
X if(EGAaddr) {
X egaputs(4,341,"Hit any key to continue");
X (void) Getch();
X redraw_screen(&maxmoves,*num,*score,nf,diamonds,mx,sx,sy);
X }
X else
X#endif
X {
X mvaddstr(LINES - 1, 0, "Type any character to continue");
X refresh();
X (void) getch();
X move(LINES - 3, 0);
X clrtobot();
X move(16,0);
X refresh();
X }
X continue;
X }
X
X /* recover important local variables */
X sx =
X x = zz.z_x;
X if(sx < 4) sx = 4; else if(sx>(ROWLEN -5)) sx = ROWLEN -5;
X sy =
X y = zz.z_y;
X if(sy < 2) sy = 2; else if(sy > (NOOFROWS-3)) sy = NOOFROWS -3;
X tx = zz.z_tx;
X ty = zz.z_ty;
X mx = zz.z_mx;
X my = zz.z_my;
X max_score = zz.z_max_score;
X diamonds = zz.z_diamonds;
X nf = zz.z_nf;
X
X if (maxmoves == -1)
X maxmoves = 0; /* to get the "unlimited moves" message */
X
X goto update_game; /* the dreaded goto */
X }
X
Xif(screen[ny][nx] == 'C')
X {
X screen[ny][nx] = ':';
X *score+=4;
X if (*bell)
X beep();
X if(maxmoves != -1)
X maxmoves+=250;
X }
X
Xcannot_move: /* try again with nx=x and ny=y in case we're */
X /* debugging and the monster's got'im */
Xswitch(screen[ny][nx])
X {
X case '@':
X break;
X case '*':
X *score+=9;
X if (*bell)
X beep();
X max_score -= 10;
X nf++;
X case ':':
X *score+=1;
X update_score(*score,nf,diamonds);
X case ' ':
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X else
X reset_under(x,y);
X draw( nx, ny, sx, sy, '@' );
X deadyet += check(&mx,&my,x,y,nx-x,ny-y,sx,sy,howdead);
X move(16,0);
X refresh();
X y = ny;
X x = nx;
X break;
X case 'O':
X if(screen[y][nx*2-x] == 'M')
X {
X screen[y][nx*2-x] = ' ';
X mx = my = -1;
X if (*bell)
X beep();
X *score+=100;
X update_score(*score,nf,diamonds);
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egapaint( 480,289, b48x48[SPACE] );
X else
X egapaint( 566,130, b48x48[SPACE] );
X }
X else
X#endif
X {
X draw_symbol(48,10,' ');
X move(16,0);
X refresh();
X }
X }
X if(screen[y][nx*2-x] == ' ')
X {
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X else
X reset_under(x,y);
X draw( nx, ny, sx, sy, '@' );
X draw( nx*2-x, y, sx, sy, 'O' );
X deadyet += fall(&mx,&my,nx*2-x,y+1,sx,sy,howdead);
X deadyet += fall(&mx,&my,x*2-nx,y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y-1,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y+1,sx,sy,howdead);
X move(16,0);
X refresh();
X y = ny;
X x = nx;
X break;
X }
X else
X {
X nx = x;
X ny = y;
X goto cannot_move;
X }
X case '^':
X if(screen[y][nx*2-x] == ' ')
X {
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X else
X reset_under(x,y);
X draw( nx, ny, sx, sy, '@' );
X draw( nx*2-x, y, sx, sy, '^' );
X deadyet += fall(&mx,&my,nx*2-x,y-1,sx,sy,howdead);
X deadyet += fall(&mx,&my,x*2-nx,y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y+1,sx,sy,howdead);
X deadyet += fall(&mx,&my,x,y-1,sx,sy,howdead);
X move(16,0);
X refresh();
X y = ny;
X x = nx;
X break;
X }
X else
X {
X nx = x;
X ny = y;
X goto cannot_move;
X }
X case '<':
X case '>':
X if(screen[ny*2-y][x] == 'M')
X {
X screen[ny*2-y][x] = ' ';
X mx = my = -1;
X if (*bell)
X beep();
X *score+=100;
X update_score(*score,nf,diamonds);
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egapaint( 480,289, b48x48[SPACE] );
X else
X egapaint( 566,130, b48x48[SPACE] );
X }
X else
X#endif
X {
X draw_symbol(48,10,' ');
X move(16,0);
X refresh();
X }
X }
X if(screen[ny*2-y][x] == ' ')
X {
X draw( x, ny*2-y, sx, sy, screen[ny][nx] );
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X else
X reset_under(x,y);
X draw( nx, ny, sx, sy, '@' );
X deadyet += fall(&mx,&my,x,y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x-1,(ny>y)?y:(y-1),sx,sy,howdead);
X deadyet += fall(&mx,&my,x+1,(ny>y)?y:(y-1),sx,sy,howdead);
X deadyet += fall(&mx,&my,x-1,ny*2-y,sx,sy,howdead);
X deadyet += fall(&mx,&my,x+1,ny*2-y,sx,sy,howdead);
X move(16,0);
X refresh();
X y = ny;
X x = nx;
X break;
X }
X else
X {
X nx = x;
X ny = y;
X goto cannot_move;
X }
X case '!':
X strcpy(howdead,"an exploding landmine");
X deadyet = 1;
X redraw.x = nx;
X redraw.y = ny;
X redraw.c = '!';
X if(screen[y][x] != 'M' && screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X draw( nx, ny, sx, sy, '@' );
X move(16,0);
X refresh();
X break;
X case 'X':
X if(nf == diamonds)
X {
X *score+=250;
X if (*bell)
X beep();
X showpass(*num);
X return NULL;
X }
X break;
X case 'T':
X if(tx > -1)
X {
X draw( nx, ny, sx, sy, ' ' );
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X else
X reset_under(x,y);
X lx = x;
X ly = y;
X y = ty;
X x = tx;
X sx = x;
X sy = y;
X draw( x, y, sx, sy, '@' );
X *score += 20;
X update_score(*score,nf,diamonds);
X if(!debug_disp)
X display(sx,sy);
X else
X#ifdef EGA
X if(!EGAaddr)
X#endif
X map();
X deadyet = fall(&mx,&my,nx,ny,sx,sy,howdead);
X if(deadyet == 0)
X deadyet = fall(&mx,&my,lx,ly,sx,sy,howdead);
X if(deadyet == 0)
X deadyet = fall(&mx,&my,lx+1,ly-1,sx,sy,howdead);
X if(deadyet == 0)
X deadyet = fall(&mx,&my,lx+1,ly+1,sx,sy,howdead);
X if(deadyet == 0)
X deadyet = fall(&mx,&my,lx-1,ly+1,sx,sy,howdead);
X if(deadyet == 0)
X deadyet = fall(&mx,&my,lx-1,ly-1,sx,sy,howdead);
X move(16,0);
X refresh();
X }
X else
X {
X redraw.x = nx;
X redraw.y = ny;
X redraw.c = ' ';
X strcpy(howdead,"teleport out of order");
X deadyet = 1;
X }
X break;
X case 'M':
X strcpy(howdead,"a hungry monster");
X deadyet = 1;
X if(nx != x || ny != y)
X if(screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X move(16,0);
X refresh();
X break;
X case 'S':
X strcpy(howdead,"walking into a monster");
X deadyet = 1;
X if(nx != x || ny != y)
X if(screen[y][x] != 'M' && screen[y][x] != 'S')
X draw( x, y, sx, sy, ' ' );
X move(16,0);
X refresh();
X break;
X default:
X nx = x;
X ny = y;
X goto cannot_move;
X }
X
Xif((y == ny) && (x == nx) && (maxmoves>0))
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egaprintf( 4+28*8,288, "Remaining moves %6d", --maxmoves );
X else
X egaprintf( 540,84, "Moves %6d", --maxmoves );
X }
X else
X#endif
X mvprintw(15,48,"Moves remaining = %d ",--maxmoves);
X
Xif(maxmoves == 0)
X return "running out of time";
Xif(!debug_disp)
X {
X if ((x<(sx-3))&& (deadyet ==0)) /* screen scrolling if necessary */
X {
X sx-=6;
X if(sx < 4)
X sx = 4;
X display(sx,sy);
X }
X if ((y<(sy-2))&& (deadyet == 0))
X {
X sy-=5;
X if(sy < 2)
X sy = 2;
X display(sx,sy);
X }
X if ((x>(sx+3)) && (deadyet == 0))
X {
X sx+=6;
X if(sx>(ROWLEN -5))
X sx = ROWLEN -5;
X display(sx,sy);
X }
X if ((y>(sy+2))&& (deadyet ==0))
X {
X sy+=5;
X if(sy > (NOOFROWS-3))
X sy = NOOFROWS -3;
X display(sx,sy);
X }
X }
X
X /* MONSTER SECTION */
X
X/* big monster first */
Xif(mx == -2) /* has the monster been killed ? */
X {
X *score+=100;
X mx = my = -1;
X update_score(*score,nf,diamonds);
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egapaint( 480,289, b48x48[SPACE] );
X else
X egapaint( 566,130, b48x48[SPACE] );
X }
X else
X#endif
X {
X draw_symbol(48,10,' ');
X move(16,0);
X refresh();
X }
X } /* if monster still alive */
Xelse if(mx != -1 && !deadyet) /* then move that monster ! */
X {
X if(mx>x)
X xdirection = -1;
X else
X xdirection = 1;
X draw( mx, my, sx, sy, ' ' );
X if((hd = (mx-x))<0)
X hd = -hd;
X if((vd = (my-y))<0)
X vd = -vd;
X if((hd>vd)&&((screen[my][mx+xdirection] == ' ')||(screen[my][mx+xdirection] == '@')))
X mx+=xdirection;
X else
X {
X if(my>y)
X ydirection = -1;
X else
X ydirection = 1;
X if((screen[my+ydirection][mx] == ' ')||(screen[my+ydirection][mx] == '@'))
X my+=ydirection;
X else
X if((screen[my][mx+xdirection] == ' ')||(screen[my][mx+xdirection] == '@'))
X mx+=xdirection;
X }
X if(screen[my][mx] == '@') /* ha! got'im! */
X {
X strcpy(howdead, "a hungry monster");
X deadyet = 1;
X }
X draw( mx, my, sx, sy, 'M' );
X move(16,0);
X refresh();
X }
X
Xcurrent = &start_of_list; /* baby monsters now */
Xwhile((current != tail_of_list)&&(!deadyet))
X /* deal with those little monsters */
X {
X monster = current->next;
X if(new_direction(monster->x,monster->y,monster->mx,monster->my,&new_disp))
X {
X /* move from monster->x,monster->y */
X if(monster_at_xy(monster->x,monster->y,monster) == NULL)
X /* restore screen */
X {
X draw( monster->x, monster->y, sx, sy, monster->under );
X if(monster->under == ' ' || monster->under == '@')
X deadyet+=check(&mx,&my,monster->x,monster->y,new_disp.d[0],new_disp.d[1],sx,sy,howdead);
X }
X monster->mx = new_disp.d[0];
X monster->my = new_disp.d[1];
X monster->x += monster->mx;
X monster->y += monster->my;
X /* move to monster->x,monster->y */
X if(mp = monster_at_xy(monster->x,monster->y,monster))
X /* there is another monster already here */
X monster->under = mp->under;
X else
X {
X monster->under = screen[monster->y][monster->x];
X draw( monster->x, monster->y, sx, sy, 'S' );
X }
X }
X if(monster->under == '@') /* monster hit you? */
X {
X move(16,0);
X refresh();
X strcpy(howdead, "the little monsters");
X deadyet = 1;
X }
X if(monster->under == '+') /* monster hit cage? */
X {
X *score +=20;
X if (*bell)
X beep();
X max_score -= 20;
X update_score(*score,nf,diamonds);
X /* remove from chain, and insert at the end (at last_of_list) */
X if(monster == tail_of_list)
X tail_of_list = tail_of_list->prev;
X else
X {
X current->next = monster-> next;
X current->next->prev = current;
X monster->next = NULL;
X monster->prev = last_of_list;
X last_of_list->next = monster;
X last_of_list = monster;
X }
X draw( monster->x, monster->y, sx, sy, '*' );
X }
X else
X current = monster;
X move(16,0);
X refresh();
X }
X
Xif((edit_mode)&&(deadyet)) { /* stop death if testing */
X#ifdef EGA
X if(EGAaddr) {
X char buffer[80], *next;
X int line;
X
X if(debug_disp)
X egaprintf(4,341,"You were killed by %s; press 'c' to continue",howdead);
X else {
X sprintf(buffer,"Killed by %s",howdead);
X
X line = 200 - 10;
X do {
X next = split( buffer, 12 );
X egaputs(540,line+=10,buffer);
X } while( next && strcpy(buffer,next) );
X
X egaputs(540,332,"Press 'c' to");
X egaputs(540,341," continue");
X }
X }
X else
X#endif
X {
X if(!debug_disp)
X move(18,0);
X else
X move(20,0);
X printw("You were killed by %s\n",howdead);
X addstr("Press 'c' to continue ");
X refresh();
X }
X if ( !(deadyet = getch() != 'c') ) {
X if(redraw.c) {
X draw( redraw.x, redraw.y, sx, sy, redraw.c );
X redraw.c = 0;
X }
X if(screen[y][x] != 'M' && screen[y][x] != 'S')
X draw( x, y, sx, sy, '@' );
X }
X#ifdef EGA
X if(EGAaddr) {
X if(debug_disp)
X egaclear(4,341, 639,349);
X else
X egaclear(540,200, 639,349);
X }
X else
X#endif
X {
X if(!debug_disp)
X move(18,0);
X else
X move(20,0);
X clrtobot();
X move(16,0);
X refresh();
X }
X }
X
X}
Xreturn(howdead);
X}
X
Xdraw( x, y, sx, sy, c )
X{
Xscreen[y][x] = c;
Xif(!debug_disp)
X {
X if( y < sy+4 && y > sy-4 && x < sx+6 && x > sx-6 )
X draw_symbol( (x-sx+5)*3, (y-sy+3)*2, c );
X }
Xelse
X {
X#ifdef EGA
X if(EGAaddr) {
X bitmap *map = b16x16[ symbol(c) ];
X egapaint( x * map->width, y * map->height, map );
X }
X else
X#endif
X {
X move(y+1,x+1);
X addch(c);
X }
X }
X}
X
X
X#ifdef EGA
X/*
X * Split a string at the first white space such that the portion is
X * not longer than max
X */
Xchar *split( string, max )
Xchar *string;
X{
Xchar *s = string, *t = NULL, c;
X
Xwhile( c = *string++ ) {
X if(c == ' ' || c == '\t') {
X if(string - s - 1 <= max)
X t = string - 1;
X else {
X if(!t)
X t = string - 1;
X
X *t++ = 0;
X
X return( t );
X }
X }
X }
X
Xif(!t)
X return( NULL );
X
X*t++ = 0;
X
Xreturn( t );
X}
X#endif
END_OF_FILE
if test 20960 -ne `wc -c <'game.c'`; then
echo shar: \"'game.c'\" unpacked with wrong size!
fi
# end of 'game.c'
fi
if test -f 'read.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'read.c'\"
else
echo shar: Extracting \"'read.c'\" \(2132 characters\)
sed "s/^X//" >'read.c' <<'END_OF_FILE'
X#include "wand_head.h"
X
Xextern int edit_mode;
Xextern char *edit_screen;
Xextern char *screenpath;
Xextern char (*screen)[ROWLEN+1+1];
X#ifdef EGA
Xextern char *EGAaddr;
X#endif
X
Xint rscreen(num,maxmoves)
Xint *maxmoves, num;
X{
Xint y;
XFILE *fp;
Xchar name[50];
Xchar (*row_ptr)[ROWLEN+1+1] = screen;
X
Xif(!edit_mode)
X sprintf(name,"%s/screen.%d",screenpath,num);
Xelse
X {
X if(!edit_screen)
X strcpy(name,"./screen");
X else
X strcpy(name,edit_screen);
X }
Xfp = fopen(name,"r");
Xif(fp == NULL)
X {
X if(edit_mode)
X printf("\nCannot find file %s.\n\n",name);
X else
X printf("\nFile for screen %d unavailable.\n\n",num) ;
X return 1;
X }
Xelse
X {
X for(y = 0;y<NOOFROWS;y++)
X {
X fgets(*row_ptr++,ROWLEN + 1,fp);
X fgetc(fp); /* remove newline char*/
X }
X if(fscanf(fp,"%*s\n%d",maxmoves) != 1)
X *maxmoves=0;
X fclose(fp);
X return 0;
X }
X}
X
Xint wscreen(maxmoves)
Xint maxmoves;
X{
Xint y,x;
XFILE *fp;
Xstatic char name[50];
Xchar buffer[80];
X
Xif(!edit_screen)
X strcpy(name,"./screen");
Xelse
X strcpy(name,edit_screen);
Xfp = fopen(name,"w");
Xif(fp == NULL)
X {
X sprintf(edit_screen=name,"/tmp/screen.%d",getpid());
X fp = fopen(name,"w");
X if(fp == NULL) {
X#ifdef EGA
X if(EGAaddr)
X sprintf(buffer,"Screen file set to \"%s\"; cannot be written.",edit_screen);
X else
X#endif
X mvaddstr(21,0,"Screen file cannot be written");
X }
X else {
X#ifdef EGA
X if(EGAaddr)
X sprintf(buffer,"Screen file set to \"%s\"; written.",edit_screen);
X else
X#endif
X mvprintw(20,0,"Screen file set to %s",name);
X }
X refresh();
X }
X#ifdef EGA
Xelse
X sprintf(buffer,"Screen file \"%s\" written.",name);
X#endif
Xif(fp != NULL)
X {
X for(y = 0;y<NOOFROWS;y++)
X {
X for(x = 0;x<ROWLEN;x++)
X fputc(screen[y][x],fp);
X fputc('\n',fp);
X }
X for(x = 0; x<ROWLEN;x++)
X fputc('#',fp);
X fputc('\n',fp);
X if(maxmoves != 0)
X fprintf(fp,"%d\n",maxmoves);
X fclose(fp);
X#ifdef EGA
X if(EGAaddr) {
X egaputs(4,341,buffer);
X egaputs(4+79*8-11*8,341,"Hit any key");
X (void) Getch();
X }
X else
X#endif
X mvprintw(21,0,"Screen %s written",name);
X return 0;
X }
Xelse
X return 1;
X}
END_OF_FILE
if test 2132 -ne `wc -c <'read.c'`; then
echo shar: \"'read.c'\" unpacked with wrong size!
fi
# end of 'read.c'
fi
echo shar: End of archive 2 \(of 5\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 5 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