[comp.sources.games] v01i103: world - sci-fi adventure game, Part04/07

games-request@tekred.TEK.COM (07/24/87)

Submitted by: "J.D. McDonald " <mcdonald@uxe.cso.uiuc.edu>
Comp.sources.games: Volume 1, Issue 103
Archive-name: world/Part04



#! /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 4 (of 7)."
# Contents:  Makefile data.dat motion.c variab.h
# Wrapped by billr@tekred on Thu Jul 23 17:17:58 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(1538 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X# Makefile for world and support programs for Unix
X#
X# The program has been tested and compiles and runs properly on the
X# following systems:
X# 
X# 1)  VAX/VMS Digital CC compiler. No particular tricks are needed.
X# 2)  IBM PC-AT Xenix 1.00. It seems to be necessary to use the large
X#     memory model, although I'm not sure why since it runs on the
X#     same machine under DOS in the small model.
X# 3)  IBM PC under Microsoft C version 4.00. It works in the default
X#     small memory model if you compile with the -Os switch. Note
X#     that on this setup you MUST link the main program World with
X#     binmode.obj, provided by Microsoft, for it to work right.
X#     Vtxtcn and vcnvrt must NOT be linked with binmode.obj.
X#     This compiler generates a few harmless warning messages.
X#     You may need to use EXEMOD to increase the stack size.
X# 4)  VAX/4.3bsd Unix. No particular tricks needed.
X#
X# NOTE: Edit helper.c to adjust the pathname for q1text.dat for
X# your particular system.
X#
X
XWHEADERS = arrays.h variab.h
XWOBJS = demons.o helper.o motion.o parser.o verbs1.o verbs2.o world.o
XCFLAGS = -O
X
Xall:	world
X
Xinstall: 	world
X	cp world /usr/games/world
X	cp q1text.dat /usr/games/lib/q1text.dat
X
Xconvert:	vcnvrt vtxtcn vtext.dat
X	@echo "creating data files..."
X	./vtxtcn
X	./vcnvrt
X	touch convert
X
Xvtext.dat:
X	cat vtext.dat.aa vtext.dat.ab vtext.dat.ac >vtext.dat
X
Xvcnvrt:	vcnvrt.c
X	cc $(CFLAGS) -o vcnvrt vcnvrt.c
X
Xvtxtcn:	vtxtcn.c
X	cc $(CFLAGS) -o vtxtcn vtxtcn.c
X
Xworld:	convert $(WOBJS) $(WHEADERS) 
X	cc -s -o world $(WOBJS)
END_OF_Makefile
if test 1538 -ne `wc -c <Makefile`; then
    echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f data.dat -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"data.dat\"
else
echo shar: Extracting \"data.dat\" \(31769 characters\)
sed "s/^X//" >data.dat <<'END_OF_data.dat'
X*THIS IS THE DATA TABLE FOR THE GAME
X*A STAR IN THE FIRST COLUMN IS A COMMENT
X*THE FIRST SECTION IS THE TRAVEL TABLE
X*THE SECOND SECTION IS THE LOCATION DATA
X*THE THIRD SECTION IS THE DATA ON MOVEABLE OBJECTS
X*THE FOURTH SECTION IS THE DATA ON FIXED OBJECTS
X*THE SECTIONS ARE SEPARATED BY 9999 IN THE FIRST FOUR COLUMNS
X*THE TRAVEL TABLE WORKS AS FOLLOWS:
X*  IT APPLIES ONLY TO "GO" OR TO WORDS WHICH TRANSLATE TO GO,
X*  SUCH AS RUN. IT DOES NOT APPLY TO SWIM OR JUMP OR CRAWL OR STAND
X*  OR SIT. THESE ARE HANDLED BY SPECIAL CODE.
X*AN ENTEY BEGINNING IN COLUMN TWO IS A "FROM" LOCATION,
X*WHICH MUST OCCUR IN ORDER.
X*THE NEXT ENTRY 
X*MAY BE BLANK OR C FOR CAREFULLY, S FOR SLOWLY, OR Q FOR QUICKLY
X*THE NEXT ENTRY IS A DIRECTION: N,NW,E,...NW,U,D OR BLANK
X*   THESE TWO ARE COMBINED IN THE TABLE IN THE FORM:
X*      C*16+S*32+Q*64+DIR (WHERE 1<=DIR<=10)
X*THE NEXT ENTRY INDICATES WHAT TYPE OF CONDITION:
X*1) MEANS NEXT IS LOCATION;UNCONDITIONAL MOTION
X*2) MEANS NEXT IS A MESSAGE NUMBER; STAY WHERE HE IS
X*3) MEANS NEXT IS VARIABLE FOR COMPUTED GOTO
X*4) MEANS HE DIED. NEXT IS THE MESSAGE.
X*5) MEANS HE MUST BE DEAD, AND HAVE BEEN THERE BEFORE.
X*6) IS SAME AS 2 EXCEPT 512 IS ADDED TO MESSAGE NUMBER
X*7-15 ARE UNUSED
X*16-31) MEANS NEXT IS NEWLOC;GO WITH (NUMBER-15)*6 % CHANCE
X*    THESE TWO ARE COMBINED IN THE FORM 512*(FIRST WORD)+SECOND WORD
X*EACH LOC AND DIRECTION MAY HAVE SEVERAL POSSIBILITIES; THEY
X*ARE TAKEN IN ORDER UNTIL SOMETHING SUCEEDS OR THE END IS REACHED,
X*IN WHICH CASE NOTHING AT ALL HAPPENS.
X*IF A DIRECTION IS MISSING, HE GETS A "YOU CAN'T POSSIBLY GO THERE"
X*MESSAGE
X*
X    1   D      2     30
X        S      2     30
X        U      1      2
X        N      1      2
X    2   D      1      1
X        S      1      1
X        U      1      3
X        N      1      3
X    3   D      1      4
X        S      1      2
X        N      1      4
X    4   S      2     31
X        U      2     31
X        D      2     32
X        NW     1      5
X        NE     1     18
X    5   SE     1      4
X        N      1     19
X        W      5      6
X        W      2     47
X        NW     2     61
X        SW     2     61
X    6   S      1      7
X        E      5      5
X        E      2     47
X    7   N      1      8
X        S      1      6
X        E      1     10
X        W      1      7
X    8   N      1     11
X        S     28      9
X        S      1     12
X        E      1      7
X        W     22      9
X        W      1     12
X    9   N      1     10
X        S      1     12
X        E      1     11
X        W     24      9
X        W      1      8
X   10   N      1      7
X        S      1     10
X        E      1      9
X        W      1     15
X   11   N      1      9
X        S      1     12
X        E      1      8
X        W      1     11
X   12   D      1     11
X        E      1      9
X        U      3      1
X        U      2     33
X   13   D  C   1     12
X        D     24     12
X        D      4     37
X        U  C   1     14
X        U     24     14
X        U      4     37
X   14   D  C   1     13
X        D     20     13
X        D      4     37
X        U      2     34
X   15   S      1     10
X        N      5     17
X        N      2     47
X   16   N      2     47
X        S      5      6
X        S      2     47
X        E      2     47
X        W      5     15
X        W      2     47
X        NE     2     47
X        SE     2     47
X        NW     2     47
X        SW     2     47
X   17   N      1     57
X        E      1     19
X        S      5     15
X        S      2     47
X   18   SW     1      4
X        NE     1     22
X   19   NE C   1     21
X        NE     5     21
X        NE    20     21
X        NE     4     38       
X        W     23     17
X        W      2     36
X        SW    20     17
X        SW    25      5
X        SW     2     36
X        S     24      5
X        S      2     36
X   20   W      1     57
X        E      1     22
X        U      1     52
X   21   SW C   1     19
X        SW     5     19
X        SW    20     19
X        SW     4     38
X        E      1     26
X   22   N      1     20
X        S      1     18
X        E      1     23
X   23   E      1     24
X        W      1     22
X   24   W      1     23
X        E      3      2
X        E      2    118
X   25   W      1     24
X        E      1     98
X   26   SW     1     21
X        NE Q   1     27
X        NE     5     27
X        NE     2    130
X   27   SW Q   1     26
X        SW     5     26
X        SW     2    130
X        NE     1     46
X        E      1     28
X   28   W      1     27
X        NE     1     29
X        SE     1     30
X   29   W      1     28
X        E      1     37
X        S      1     31
X        N      1     45
X   30   W      1     28
X        E      1     31
X        S      3      3
X        S      2    129
X   31   N      1     29
X        W      1     30
X        NE     1     32
X   32   SW     1     31
X        N      1     37
X        SE     1     33
X        E      1     38
X        NE     1     38
X   33   NW     1     32
X        NE     1     34
X        N      1     38
X   34   SW     1     33
X        N      1     35
X        W      1     38
X        NW     1     38
X   35   S      1     34
X        NW     1     36
X        N      1     39
X        W      1     38
X        SW     1     38
X   36   SW     1     37
X        SE     1     35
X        S      1     38
X   37   W      1     29
X        S      1     32
X        NE     1     36
X        E      1     38
X        SE     1     38
X   38   N      5     36
X        N      2    131
X        NE     5     35
X        NE     2    131
X        E      5     35
X        E      2    131
X        SE     5     34
X        SE     2    131
X        S      5     33
X        S      2    131
X        SW     5     32
X        SW     2    131
X        W      5     37
X        W      2    131
X        NW     5     37
X        NW     2    131
X        U      5     35
X        U      2    131
X   39   S      1     35
X        W      1     40
X   40   E      1     39
X        NW     1     41
X   41   SE     1     40
X        SW     1     44
X        D      3      4
X        D      2    132
X   42   N      1     30
X   43   W      1     47
X        E      1     45
X        NE     1     44
X   44   S      1     45
X        SW     1     43
X        NE     1     41
X        NW     1     50
X   45   N      1     44
X        S      1     29
X        W      1     43
X   46   SW     1     27
X        N      1     47
X   47   S      1     46
X        E      1     43
X        NW     1     48
X        N      3      5
X        N      2    239
X   48   U      2    133
X        SE     1     47
X   49   D      1     48
X   50   SE     1     44
X        N  Q   1     86
X        N      5     86
X        N      2    130
X   51   S      3      5
X        S      2    239
X   52   D      1     20
X        E      1     53
X        W      1     54
X   53   W      1     52
X   54   E      1     52
X        U      1     55
X   55   U      1     56
X        D      1     54
X   56   D      1     55
X   57   E      1     20
X        S      1     17
X        NW     1     58
X   58   SE     1     57
X        NW     1     62
X        D      1     59
X   59   U      1     58
X        NE     1     58
X        SW     1     60
X   60   NE     1     59
X        S      1     61
X   61   N      1     60
X   62   S      1     58
X        N  Q   1     63
X        N      5     63
X        N      2    130
X        W      2    246
X   63   N      1     64
X        S  Q   1     62
X        S      5     62
X        S      2    130
X   64   S      1     63
X        N      1     65
X   65   S      1     64
X        N      1     67
X        U      1     66
X   66   D      1     65
X   67   S      1     65
X        N      1     68
X   68   S      1     67
X        W      3     13
X        W      2    246
X        N      1     69
X        E      1     71
X   69   S      1     68
X        E      1     73
X   70   N      1     74
X        W      1     73
X        S      1     71
X        E      1     78
X   71   N      1     70
X        S      1     72
X        E      1     81
X        W      1     68
X   72   N      1     71
X        S      1     83
X   73   W      1     69
X        E      1     70
X        D      3      7
X        D      2    260
X   74   S      5     73
X        S      3      6
X        S      2    259
X   75   D      1     77
X        E      1     76
X   76   W      1     75
X        D      3      8
X        D      5     79
X        D      4    261
X   77   U      1     75
X        D      1     78
X   78   U      1     77
X        W      1     70
X        E      1     79
X   79   U      2    262
X        W      1     78
X   80   U      2    263
X        D      1     79
X   81   W      1     71
X        N      1     82
X        E      1     89
X   82   S      1     81
X        N      3     15
X        N      5    151
X        N      2    440
X        U      3     15
X        U      5    151
X        U      2    440
X   83   N      1     72
X        D      1     84
X   84   U      1     83
X        D      1     85
X        E      1     86
X   85   U      1     84
X        S      3      9
X        S      2    272
X   86   W      1     84
X        S  Q   1     50
X        S      5     50
X        S      2    130
X        N      1     87
X   87   S      1     86
X        N      3     10
X        N      2    264
X   88   S      3     10
X        S      2    264
X   89   W      1     81
X        E      2    265
X   90   E      1     68
X        N      1     91
X        S      1     95
X   91   S      1     90
X        W      1     92
X   92   E      1     91
X        SW     1     93
X   93   NE     1     92
X        SE     1     94
X   94   NW     1     93
X        E      1     95
X   95   W      1     94
X        N      1     90
X   96   D      4    266
X        E      5    102
X        E      4    266
X        U      5     73
X        U      2    267
X   97   U      5     96
X   98   W      1     25
X        N      3     14
X        N      2    281
X        SE     1    117
X   99   S      1    108
X  100   U      1    115
X  101   N      1    107
X        E      1    116
X        W      1    108
X        D      1    103
X  102   S      1     96
X        W      1    102
X        SE     1    107
X        U      1    112
X  103   E      1    104
X        D      1    116
X  104   N      1    103
X        NW     1    105
X        U      1    107
X  105   S      1    114
X        SE     1    104
X        NW     1    110
X  106   S      1    108
X        W      1    106
X        U      1    116
X  107   NE     1    106
X        NW     1    101
X        U      1    102
X  108   N      1     99
X        W      1    101
X        NW     1    116
X  109   S      1    102
X        U      1    116
X        D      1    104
X  110   W      1    111
X        NE     1    117
X        D      1    110
X  111   N      1    103
X        E      1    110
X        SE     1    112
X  112   S      1    113
X        NW     1    111
X        U      1    112
X  113   N      1    112
X        SE     1    114
X        SW     1    130
X  114   S      1    105
X        U      1    115
X        D      1    114
X  115   N      1    116
X        W      1    114
X        D      1    100
X  116   S      1    104
X        NE     1    101
X        U      1    109
X  117   NW     1     98
X        N      1    118
X        E      1    101
X  118   S      1    117
X        N      1    119
X        NE     1    129
X  119   S      1    118
X        E      1    120
X        NW     1    119
X        SW     1    119
X  120   S      1    119
X        E      1    130
X        D      1    121
X  121   U      1    120
X        D      1    122
X        SE     1    122
X  122   W      1    121
X        U      1    121
X  123   U      5    121
X        U      2    269
X        SE     1    124
X        S      1    125
X        SW     1    126
X  124   NW     1    123
X  125   N      1    123
X  126   NE     1    123
X        D      1    127
X        U      1    128
X  127   U      2    270
X  128   U      2    271
X        D      1    129
X  129   SW     1    118
X        U      2    271
X  130   N      1    132
X        NE     1    113
X        SE     1    131
X        W      1    120
X  131   NW     1    130
X  132   S      1    130
X  133   W      1    139
X        S      1    134
X        E      1    135
X  134   N      1    133
X  135   W      1    133
X        E      3     11
X        E      2    272
X  136   N      3     12
X        N      2    272
X        S      1    137
X  137   N      1    136
X        S      1    138
X        W      1    143
X        E      1    147
X  138   N      1    137
X        S      1    139
X        W      1    144
X        E      1    148
X  139   N      1    138
X        E      1    133
X        S      1    140
X  140   N      1    139
X        S      1    141
X        W      1    145
X        E      1    149
X  141   N      1    140
X        S      1    142
X        W      1    146
X        E      1    150
X  142   N      1    141
X        S      5     98
X        S      3     14
X        S      2    281
X  143   E      1    137
X  144   E      1    138
X  145   E      1    140
X  146   E      1    141
X  147   W      1    137
X  148   W      1    138
X  149   W      1    140
X  150   W      1    141
X  151   D      1     82
X        N      1    152
X  152   S      1    151
X  153   D      1    154
X  154   U      1    153
X        N      1    155
X        NE     1    156
X        E      1    157
X        SE     1    158
X        S      1    159
X        SW     1    160
X        W      1    161
X        NW     1    162
X  155   S      1    154
X        E      1    156
X        SE     1    157
X        SW     1    161
X        W      1    162
X        N      1    163
X  156   W      1    155 
X        SW     1    154 
X        S      1    157
X  157   N      1    156 
X        NW     1    155 
X        W      1    154
X        SW     1    159
X        S      1    158
X        E      1    167
X  158   N      1    157
X        NW     1    154
X        W      1    159
X  159   NE     1    157
X        E      1    158
X        N      1    154
X        NW     1    161
X        W      1    160
X        S      1    172
X  160   E      1    159
X        NE     1    154
X        N      1    161
X  161   SE     1    159
X        E      1    154
X        S      1    160
X        NE     1    155
X        N      1    162
X        W      1    164
X  162   S      1    161
X        SE     1    154
X        E      1    155
X  163   S      1    155
X        W      1    165
X  164   E      1    161
X        N      1    165
X  165   E      1    163
X        S      1    164
X        NW     3     16
X        NW     2    239
X  166   SE     3     16
X        SE     2    239
X  167   W      1    157
X        E      1    168
X        S      1    169
X  168   W      1    167
X  169   N      1    167
X        E      1    171
X        S      3     18
X        S      2     58
X  170   N      1    169
X        W      1    174
X  171   W      1    169
X        E      4    498
X        S      4    498
X        N      4    498
X  172   N      1    159
X        S      1    173
X  173   S      2    239
X        N      1    172
X  174   N      2    239
X        S      3     17
X        S      2    239
X        E      1    170
X  175   N      3     17
X        N      2    239    
X  176   N      2    272
X  177   N      2    272
X  178   N      2    272
X  179   N      2    272 
X  180   N      2    272
X  181   N      3     17
X        N      2    239
X  182   S      1    181
X        N      1    183
X  183   S      1    182
X  184   N      3     17
X        N      2    239
X  185   N      1    186
X        S      1    184
X  186   S      1    185
X  187   N      3     17
X        N      2    239
X  188   S      1    187
X        N      1    189
X  189   S      1    188
X        N      2    499
X        W      1    190
X  190   E      2    499
X 9999
X*LOCATION DATA 
X*BITS ARE: 1)LIGHT ALWAYS
X*          2)DARK ALWAYS (NEEDS LAMP)
X*          4)HAS LIGHTS
X*          8)OUTDOORS
X*         16)LIGHTS ARE ON
X*         32)ADVENTURER CAN ENTER ROOM
X*         64,128,256,512)OTHER PLAYES CAN ENTER
X*       1024)THERE IS WATER HERE
X*       2048)THERE ARE OAKS HERE
X*      16384)HAS BEEN VISITED
X 0001  16424
X 0002     40
X 0003     40
X 0004   2088
X 0005   3112
X 0006   3112
X 0007   2088
X 0008   2088
X 0009   2088
X 0010   2088
X 0011   2088
X 0012   2088
X 0013     40
X 0014     40
X 0015   3112
X 0016   3112
X 0017   3112
X 0018     40
X 0019   2088
X 0020   1064
X 0021     40
X 0022   1064
X 0023   1064
X 0024   1064
X 0025     33
X 0026     40
X 0027     40
X 0028     40
X 0029     40
X 0030     40
X 0031     40
X 0032     40
X 0033     40 
X 0034     40
X 0035     40
X 0036     40
X 0037     40
X 0038     40
X 0039     40
X 0040     40
X 0041     40
X 0042     40
X 0043     40
X 0044     40
X 0045     40
X 0046     40
X 0047     40
X 0048     40
X 0049     40
X 0050     40
X 0051     33
X 0052     40
X 0053     40
X 0054     40
X 0055     40
X 0056     40
X 0057   3112
X 0058   1064
X 0059   1064
X 0060   1064
X 0061   1064
X 0062     40
X 0063     40
X 0064     40
X 0065    104
X 0066     40
X 0067    104
X 0068    104
X 0069    104
X 0070    104
X 0071    104
X 0072    104
X 0073     40
X 0074    104
X 0075     40
X 0076     40
X 0077     40
X 0078    104
X 0079     40
X 0080     40
X 0081     40
X 0082     40
X 0083     40
X 0084     33
X 0085     33
X 0086     40
X 0087     40
X 0088     40
X 0089     40
X 0090     65
X 0091     65
X 0092     65
X 0093     65
X 0094     65
X 0095     65
X 0096     34
X 0097     34
X 0098     33
X 0099     33
X 0100     33
X 0101     34
X 0102     34
X 0103     34
X 0104     34
X 0105     34
X 0106     34
X 0107     34
X 0108     34
X 0109     34
X 0110     34
X 0111     34
X 0112     34
X 0113     34
X 0114     34
X 0115     34
X 0116     34
X 0117     34
X 0118     34
X 0119     34
X 0120     34
X 0121     34
X 0122   1062
X 0123   1062
X 0124   1062
X 0125   1062
X 0126   1062
X 0127   1062
X 0128     34
X 0129     34
X 0130     34
X 0131     33
X 0132     33
X 0133     33
X 0134     33
X 0135     33
X 0136     33
X 0137     33
X 0138     33
X 0139     33
X 0140     33
X 0141     33
X 0142     33
X 0143   1076
X 0144     36
X 0145     36
X 0146     33
X 0147     36
X 0148     36
X 0149     52
X 0150     36
X 0151     40
X 0152     40
X 0153     33
X 0154     33
X 0155     33
X 0156     33
X 0157     33
X 0158     33
X 0159     33
X 0160     33
X 0161     33
X 0162     33
X 0163     33
X 0164     33
X 0165     33
X 0166     33
X 0167     33
X 0168     33
X 0169     33
X 0170     33
X 0171     33
X 0172     33
X 0173     33
X 0174     33
X 0175     33
X 0176     33
X 0177     33
X 0178     33
X 0179     33
X 0180     33
X 0181     33
X 0182     33
X 0183   1057
X 0184     33
X 0185     33
X 0186     33
X 0187     33
X 0188     33
X 0189     33
X 0190     33
X 9999
X*THE PROPERTIES OF OBJECTS IS DESCRIBED HERE
X*THE PROPERTIES OF ALL MOVEABLE OBJECTS IS DESCRIBED BEFORE
X*THOSE OF FIXED OBJECTS.
X*THE PROPERTIES ARE: 
X*1)    THE NOUN
X*2)    THE ADJECTIVE, MINUS IF OPTIONAL
X*3)    WEIGHT*256+SIZE IF MOVEABLE      LOCATION IF FIXED
X*        THE ITEMS ABOVE AND BELOW ARE SPLIT IN TWO ON THE CHART
X*4)    VALUE*4096+LOCATION FOR ALL POINTS (FLOC) IF MOVEABLE
X*         A LOCATION >=4000 IMPLIES THAT CREDIT IS GIVEN IF THE
X*         LOCATION OF THE OBJECT IN NOT LOCATION-4000
X*            ;LOCAT #2 IF FIXED
X*5)    FIXED ("PURE") PROPERTY WORD. BITS ARE:
X*          1)CAN BE CLOSED          (I.E.    PPRP)
X*          2)DRINKABLE 
X*          4)FOOD
X*          8)POISON
X*         16)READABLE
X*         32)SENTIENT
X*         64)WEARABLE
X*        128)OPAQUE
X*        256)PLURAL
X*        512)LOCKABLE
X*       2048*M 0<M<16 CONTAINER VALUE       (I.E.CVAL)
X*6)     VARIABLE ("IMPURE") PROPERTY WORD    (I.E. IMPRP)
X*          1)HAS BEEN SEEN (I.E. IF PREVIOUSLY HIDDEN)
X*          2)CURRENTLY CLOSED
X*          4)CURRENTLY LOCKED
X*       +8*(INDEX TO DESCRIPTORS)+ 64*(RESPONSE TO EXAMINE OR READ)
X*             +512*(CONTAINER DESCRIPTION, E.G. THE BOTTLE IS EMPTY)
X*             +4096*(CURRENT SPECIAL PROPERTY)
X*                 SPECIAL PROPERTY 1 MEANS INCREMENT
X*                 INDEX TO DESCRIPTORS WHEN TAKEN
X*7)     PRESENT ONLY FOR MOVEABLE OBJECTS, THE LOCATION    (ILOC)
X*          ZERO MEANS NONEXISTENT
X*          1 TO 500 MEANS A PLACE NUMBER
X*          1000 IS CARRIED BY ADVENTURER
X*          1001 IS CARRIED BY FIRST MOVEABLE BEING
X*          1002 IS CARRIED BY SECOND BEING ET.
X*          2001 MEANS INSIDE OBJECT NUMBER 1
X*          2002 MEANS INSIDE OBJECT NUMBER 2
X*          6001 MEANS INSIDE fixed OBJECT NUMBER 1
X*NUM   NOUN      ADJ      WT   SIZE  VAL   FLOC  PPRP IMPRP  ILOC  CVAL PARAM
X 0001  KEY      -CHROME     1     1     2  4014    64  4105    14     0 CKEY
X 0002  SAPPHI   -BLUE       1     1     1  1000    64  4105    18     0 BSAPPH
X 0003  FISH      COLORF     2     2     3  2015     8  4297    16     0 CFISH
X 0004  FISH      DEAD       2     2     1  2015     8     0     0     0 DFISH
X 0005  KNAPSA     0        20   100     0  1000   192  1673  3000    15 ZKNAPS
X 0006  SHIRT     RED        3     4     0     0    64     9  3000     0 RSHIRT
X 0007  SHIRT     GREEN      3     4     0     0    64     9  2005     0 GSHIRT
X 0008  BOOTS    -HEAVY     20     5     0     0   320   137  3000     0 HBOOTS
X 0009  SHOES    -CANVAS    10     5     0     0   320   137  2005     0 CSHOES
X 0010  PANTS     BLUE       3     4     0     0   320     9  3000     0 LPANT
X 0011  PANTS     BROWN      3     4     0     0   320     9  2005     0 RPANT
X 0012  NET      -BUTTER     1     3     0     0     0  1033  2005     2 BNET
X 0013  TUBE     -PLASTI     1     2     0     0    24   137  2005     0 BREPEL
X 0014  CAMERA   -INSTAN     6     4     0     0     0   137  2005     0 ICAMER
X 0015  BAG      -PLASTI     1     3     0     0     0  1673  2005     2 PLBAG
X 0016  FOSSIL   -CRABLI    10     5     1  1000    64  4105    56     0 CFOSSI
X 0017  PHOTOG    PTEROD     1     2     1  1000     0   137     0     0 PPHOTO
X 0018  PHOTOG    MARTIA     1     2     1  1000     0   137     0     0 MPHOTO
X 0019  DIAMON   -HUGE       6     5     2  1000     0     9    49     0 ZDIAMO
X 0020  PUCK     -HOCKEY    10     3     2  1000     0   137    38     0 HPUCK
X 0021  BOULDE   -RED      100   101     0     0     0  4097    27     0 RBOULD
X 0022  MOSS     -GREEN      2     5     0     0     0  4225    19     0 GMOSS
X 0023  GLASS    -GLASS     10   101     1  4000     0   137     0     0 PGLASS
X 0024  WIRE     -WIRE       5     3     0     0    16   137    88     0 ZWIRE
X 0025  SPHERE   -GLOWIN    14     4     2  4051     0   137    51     0 GSPHER
X 0026  LATEX    -GOOEY      6     6     0     0    12  4361    66     0 ZLATEX
X 0027  CABLE     BROKEN     2     2     0     0     0  4225  6023     0 DCABLE
X 0028  CABLE     GOOD       2     2     0     0     0   137   148     0 GCABLE
X 0029  ORCHID     0         1     2     1  1000     0  4297    70     0 ZORCHI
X 0030  FLYTRA   -VENUS      1     2     1  1000     0  4297    72     0 ZFLYTR
X 0031  CASSET   -HUGE       2     9     0     0     0   137   149     0 ZCASSE
X 0032  PHOTOG    OVEREX     1     2     0     0     0   137     0     0 OPHOTO
X 0033  TOMATO     0         2     4     0     0    12   137    73     0 ZTOMAT
X 0034  LETTUC     0         2     4     0     0     4   137    73     0 ZLETTU
X 0035  CABBAG     0         2     3     0     0     4   137    73     0 ZCABBA
X 0036  STRAWB     0         2     2     0     0     4   137    74     0 ZSTRAW
X 0037  GRAPE      0         2     2     0     0     4  4297    74     0 ZGRAPE
X 0038  SEED     -BLACK      5     4     0     0     0  4297    86     0 ZSEED
X 0039  BUCKET     0        10   101     0     0     0  1545   149    13 ZBUCKE
X 0040  PITCHF     0        10   101     0     0     0     9    88     0 ZPITCH
X 0041  SHOVEL     0        10   101     0     0     0     9    88     0 ZSHOVE
X 0042  ROBOT      0       127   101     0     0    48  2249    70     0 ZROBOT
X 0043  STATUE     0         5     5     2  1000     0   137    99     0 ZSTATU
X 0044  MUSHRO   -HUGE       1     3     0     0     4     9   118     0 ZMUSHR
X 0045  NUGGET   -NUGGET    10     2     3  1000     0     9   128     0 ZNUGGE
X 0046  PHOTOG    PAINTI     1     2     1  1000     0   137     0     0 APHOTO
X 0047  PHOTOG    FAMILY     1     2     1  1000     0   137     0     0 FPHOTO
X 0048  CAT      -BLACK      6     5     3  4080     0  4105    80     0 ZCAT
X 0049  DEET       0         2     2     0     0     8   137   147     0 ZDEET
X 0050  METOL      0         2     2     0     0     8   137   147     0 ZMETOL
X 0051  HYPO       0         2     2     0     0     8   137   147     0 ZHYPO
X 0052  CARTRI    TERRAN     2     2     3  4000     0   137     0     0 ZCART
X 0053  KNIFE      0         3     3     0     0     0     9   150     0 ZKNIFE
X 0054  HAMMER     0         5     3     0     0     0     9   150     0 ZHAMME
X 0055  SCREWD     0         2     3     0     0     0     9   150     0 ZSCREW
X 0056  CARTRI    CYGNAN     2     2     0     0     0   137   146     0 CCART
X 0057  BEAD     -GLOWIN     2     4     1  4000     0   137     0     0 ZBEAD
X 0058  INSECT   -SILICO     1     2     3  1000     0   201    94     0 ZINSEC
X 0059  FILM     -XRAY       1     4     0     0     0   137     0     0 ZFILM
X 0060  BOX      -MAGNES     3     5     0     0   129  1679  6032     5 ZBOX
X 0061  DISC      GOOD       1     1     5     0     0   137  2060     0 GDISC 
X 0062  DISC      BROKEN     1     1     0     0     0   137  2060     0 BDISC
X 0063  MINERA   -VIOLET     3     1     3  1000     0   137   152     0 LMINER
X 0064  EGG      -CHOCOL     3     2     0     0     4  4105     0     0 CEGG
X 0065  COIN      SILVER     2     2     2  1000    16   137     0     0 SCOIN
X 0066  COIN      BRASS      2     2     0     0    16   137     0     0 BCOIN
X 0067  COIN      NICKEL     2     2     0     0    16   137     0     0 NCOIN
X 0068  COIN      COPPER     2     2     0     0    16   137     0     0 CCOIN
X 0069  COIN      PLATIN     2     2     0     0    16   137     0     0 PCOIN
X 0070  MAP         0        2     2     0     0    16   137     0     0 MMAP
X 0071  BALL     -RED        2     2     0     0     4     9     0     0 BBALL
X 0072  NEWSPA      0        2     2     0     0    16   137     0     0 NNEWS
X 0073  ROD      -YELLOW     1     1     0     0     0     9   166     0 YROD
X 0074  NOTE        0        2     2     0     0    16   137  6071     0 NNOTE
X 9999
X 0001  SPIRE      0              12          13     0   129           0 ZSPIRE
X 0002  PTEROD   -SMALL           24           0     0    65           0 ZPTERO
X 0003  STOOL    -CERAMI          42           0     0    65           0 ZSTOOL
X 0004  KNOB     -METAL           42           0     0    65           0 ZKNOB
X 0005  WINDOW     0              42          30     0    65           0 ZWINDO
X 0006  DOOR      ROUND           47          51   513   207           0 RDOOR
X 0007  TOWER      0              48           0     0     1           0 ZTOWER
X 0008  DIMPLE   -METAL           47           0     0     1           0 MDIMPL
X 0009  CUBE     -STONE           61           0    16    65           0 SCUBE
X 0010  HORSET     0              24          25   256    65           0 ZHORSE
X 0011  DOOR      METAL           41         135   513    15           0 MDOOR
X 0012  DOOR      GLASS           85         136   513    15           0 GDOOR
X 0013  HOLE     -RABBIT          73           0     0     9           0 RHOLE
X 0014  LOUVER      0             98         142     0     1           0 ZLOUVE
X 0015  VINE     -GRAPE           74           0     0     9           0 ZVINE
X 0016  SLOT      SLOT           146           0     0   513           2 RSLOT
X 0017  BUTTON    TRIANG         146           0     0     1           0 TBUTTO
X 0018  BUTTON    SQUARE         146           0     0     1           0 SBUTTO
X 0019  BUTTON    ROUND          146           0     0     1           0 RBUTTO
X 0020  BUTTON    HEXAGO         146           0     0     1           0 HBUTTO
X 0021  SCREEN   -VIDEO          146           0     0     9           0 ZSCREE
X 0022  SINK        0            143           0     0   513          10 ZSINK
X 0023  ANTENN   -MICROW          69           0     0    65           0 ZANTEN
X 0024  ENLARG   -ENLARG         143           0     0   513           6 ZENLAR
X 0025  RACK     -HUGE           143           0     0  1089          10 ZRACK
X 0026  TRAY     -SMALL          143           0     0   513           5 ZTRAY
X 0027  HOPPER      0            143           0     0   513           5 ZHOPPE
X 0028  FUNNEL    LEFT           143           0     0     1           3 LFUNNE
X 0029  FUNNEL    MIDDLE         143           0     0     1           3 MFUNNE
X 0030  FUNNEL    RIGHT          143           0     0     1           3 RFUNNE
X 0031  BUTTON    RED            143           0     0     1           0 RDBUTT
X 0032  DESK        0            145           0   129   515          10 ZDESK
X 0033  INDICA   -LEVEL          143           0     0    73           0 ZINDIC
X 0034  LIGHT     RED            143           0     0    73           0 RLIGHT
X 0035  LIGHT     GREEN          143           0     0    73           0 GLIGHT
X 0036  ACID     -ACID            91           0     0   513          15 ZACID
X 0037  PIT      -FIERY           94           0     0     1          15 FPIT
X 0038  MUD      -SULFUR          95           0     0     1          15 ZMUD
X 0039  BUTTON    VIOLET         134           0     0     1           0 VBUTTO
X 0040  BUTTON    ORANGE         134           0     0     1           0 OBUTTO
X 0041  BUTTON    WHITE          134           0     0     1           0 WBUTTO
X 0042  BUTTON    BLUE           134           0     0     1           0 BBUTTO
X 0043  RECESS      0            134           0     0   513           2 ZRECES
X 0044  VAPOR     RED             93           0     0   513          15 RVAPOR
X 0045  VAPOR     GREEN           93           0     0   513          15 GVAPOR
X 0046  FROG     -GREEN           67           0     0    65           0 ZFROG
X 0047  BIRD      RED             65          66     0    65           0 RBIRD
X 0048  BIRD      BEAUTI          78          79     0    65           0 XBIRD
X 0049  BIRD      BEAUTI          77          80     0    65           0 YBIRD
X 0050  BIRD      BEAUTI          75          76     0    65           0 ZBIRD
X 0051  BEES        0             87           0     0     1           0 ZBEES
X 0052  CACTUS      0             82           0     0     1           0 ZCACTU
X 0053  HOUSE    -DOLL           132           0     0    65           0 DHOUSE
X 0054  WATERF      0             24           0     0    65           0 FALLS
X 0055  MACHIN    VENDIN         156           0    16   137           0 TMACH
X 0056  SLOT      SLOT           156           0     0     1           0 TSLOT
X 0057  MACHIN    VENDIN         158           0    16   137           0 NMACH
X 0058  SLOT      SLOT           158           0     0     1           0 NSLOT
X 0059  MACHIN    VENDIN         160           0    16   137           0 SMACH
X 0060  SLOT      SLOT           160           0     0     1           0 SSLOT
X 0061  MACHIN    VENDIN         162           0    16   137           0 MMACH
X 0062  SLOT      SLOT           162           0     0     1           0 MSLOT
X 0063  MACHIN    HUGE           153           0     0    65           0 PMACH
X 0064  DOOR      ORANGE         165         166   513    15           0 ODOOR
X 0065  DOOR      PINK           173         174   513    15           0 PDOOR
X 0066  DOOR      BLUE           174         175     1    11           0 BDOOR
X 0067  CLIP      ORANGE         166           0     0   513           2 OCLIP
X 0068  CLIP      VIOLET         166           0     0   513           2 VCLIP
X 0069  CLIP      YELLOW         175           0     0   513           2 YCLIP
X 0070  CLIP      BLUE           175           0     0   513           2 BCLIP
X 0071  CABINE   -FILEC          169           0   129   515          12 FCABIN
X 0072  BUTTON    GREEN          169           0     0     1           0 GBUTTO
X 0073  MURAL    -HUGE           169           0     0   201           0 HMURAL
X 0074  RED       GREEN            1           0     0     0           0 WDUMMX
X 9999
END_OF_data.dat
if test 31769 -ne `wc -c <data.dat`; then
    echo shar: \"data.dat\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f motion.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"motion.c\"
else
echo shar: Extracting \"motion.c\" \(16932 characters\)
sed "s/^X//" >motion.c <<'END_OF_motion.c'
X#include "parame.inc"
X#include "variab.h"
X#include "arrays.h"
X#include "trvtbl.inc"
X
X/* World C Version 1.00 copyright 1987 J.D.McDonald 
X   Use as you like for non-commercial purposes, but please
X   leave this note, and document any changes you make as yours */
X
X    static  int     rax[] = {556, 2445, 7552, 1105, 3111};
X    static  int     dx[] = {2331, 4293, 2204, 6339, 3325};
X    static  int     locx[] = {176, 177, 178, 179, 180};
X
Xvship()
X{
X    int             locy, i;
X
X    if (wrdnum[0] == ACTIVA) {
X	if ((loc < 175 || loc > 181) && loc != 184 && loc != 187)
X	    speak(71);
X	else if (lpill == 0)
X	    speak(237);
X	else if (obloc[YROD] != 2000 + YCLIP || obloc[BSAPPH] != BCLIP + 2000)
X	    speak(539);
X	else if ((obimpr[BDOOR] & 2) == 0)
X	    speak(544);
X	else if (spcloc != 2)
X	    speak(542);
X	else if (loc == 181 || loc == 184 || loc == 187) {
X	    speak(536);
X	    oldloc = 0;
X	    oldlc2 = 0;
X	    if (loc == 181)
X		loc = 177;
X	    else if (loc == 184)
X		loc = 180;
X	    else
X		loc = 179;
X	} else {
X	    locy = 0;
X	    for (i = 0; i < 5; i++) {
X		if (rax[i] == raset && dx[i] == decset)
X		    locy = locx[i];
X	    }
X	    if (locy == 0)
X		speak(537);
X	    else if (loc == locy)
X		speak(500);
X	    else {
X		speak(538);
X		if (loc == 175)
X		    speak(545);
X		for (i = 1; i <= MOVMAX; i++)
X		    if (obloc[i] == loc)
X			obloc[i] = locy;
X		loc = locy;
X		oldloc = 0;
X		oldlc2 = 0;
X	    }
X	}
X    } else if (loc < 176 || loc > 180)
X	speak(71);
X    else if (lpill == 0)
X	speak(237);
X    else if (obloc[YROD] != YCLIP + 2000 || obloc[BSAPPH]
X	     != BCLIP + 2000)
X	speak(539);
X    else if ((obimpr[BDOOR] & 2) == 0)
X	speak(544);
X    else if (spcloc != 2)
X	speak(542);
X    else if (loc == 176)
X	speak(540);
X    else if (loc == 178)
X	speak(541);
X    else if (spcloc != 2)
X	speak(543);
X    else {
X	oldloc = 0;
X	oldlc2 = 0;
X	speak(543);
X	if (loc == 177)
X	    locy = 181;
X	else if (loc == 179)
X	    locy = 187;
X	else
X	    locy = 184;
X	for (i = 1; i <= MOVMAX; i++)
X	    if (obloc[i] == loc)
X		obloc[i] = locy;
X	loc = locy;
X    }
X}
X
X
Xvcross()
X{
X    int             result;
X
X    result = 0;
X    /* the tree over the chasm */
X
X    if ((loc == 19 || loc == 21) && (dobjs[0] == TREE ||
X		       dobjs[0] == LOG || dobjs[0] == CHASM) && (prepdo == 0
X			      || prepdo == OVER) && (iobj == TREE || iobj ==
X						     LOG || iobj == 0)) {
X	result = 1;
X	prepdo = 0;
X	dobjs[0] = NORTHE;
X	if (loc == 21)
X	    dobjs[0] = SOUTHW;
X    }
X    /* you can't "cross" the lake  */
X
X    else if ((loc == 5 || loc == 6 || loc == 15 || loc == 17) && (
X							 dobjs[0] == WATER))
X	speak(47);
X    else
X	speak(94);
X    return (result);
X}
X
X
Xvcrawl()
X{
X    int             result;
X    result = 0;
X    /* you can crawl over the log   */
X
X    if ((loc == 19 || loc == 21) && (dobjs[0] == TREE ||
X				     dobjs[0] == LOG || dobjs[0] == CHASM) &&
X	prepdo == OVER) {
X	adverb = CAREFU;
X	prepdo = 0;
X	oldlc2 = oldloc;
X	oldloc = loc;
X	if (loc == 19)
X	    loc = 21;
X	else
X	    loc = 19;
X    }
X    /* if "crawl direction" but not u or d, then call go  */
X
X    else if (dobjs[0] <= NORTHW && prepdo == 0) {
X	if (loc == 19 || loc == 21)
X	    adverb = CAREFU;
X	result = 1;
X	speak(109);
X    }
X    /* otherwise, don't understand  */
X
X    else
X	speak(94);
X    return (result);
X
X}
X
X
X
X
X
X
X
Xvjump()
X{
X    int             result, ncarrd, nweigh, kcarrd, kweigh;
X    result = 0;
X    /* can't jump if dead */
X
X    if (deadf) {
X	speak(46);
X	return (result);
X    }
X    /* jumping off the spire is fatal  */
X
X    if ((loc == 13 || loc == 14) && ((dobjs[0] == SPIRE &&
X				      prepdo == OFF) || dobjs[0] == 0)) {
X	speak(49);
X	speak(37);
X	oldlc2 = 0;
X	oldloc = 0;
X	loc = 12;
X	vdead();
X	return (result);
X    }
X    /* trying to jump the chasm isn't too smart either  */
X
X    if ((loc == 21 || loc == 19) && (dobjs[0] == 0 || ((dobjs[0] ==
X		 CHASM || dobjs[0] == TREE || dobjs[0] == LOG) && (prepdo ==
X						   0 || prepdo == OVER)))) {
X	speak(49);
X	speak(38);
X	oldlc2 = 0;
X	oldloc = 0;
X	loc = 22;
X	locdat[22] |= 16384;
X	vdead();
X	return (result);
X    }
X    /* but you can jump onto the tower  */
X
X    if (loc == 48 && (dobjs[0] == 0 || dobjs[0] == TOWER) &&
X	(prepdo == ON || prepdo == 0)) {
X	/* if you're not carrying too much  */
X
X	burden(&ncarrd, &nweigh, &kcarrd, &kweigh);
X	if (ncarrd == 0 && (obloc[ZKNAPS] != 1000 && obloc[ZKNAPS]
X			    != 3000) && wirelc[5] != 1000) {
X	    speak(136);
X	    oldlc2 = oldloc;
X	    oldloc = loc;
X	    loc = 49;
X	} else
X	    speak(139);
X
X	return (result);
X    }
X    /* but not off the tower  */
X
X    if ((loc == 49) && ((dobjs[0] == TOWER &&
X			 prepdo == OFF) || dobjs[0] == 0)) {
X	speak(49);
X	speak(137);
X	oldlc2 = 0;
X	oldloc = 0;
X	loc = 48;
X	vdead();
X	return (result);
X    }
X    /* jumping at the barrier   */
X
X    if ((loc == 26 || loc == 27) && dobjs[0] == BARRIE) {
X	if (prepdo == OVER || prepdo == 0) {
X	    speak(170);
X	    return (result);
X	} else if (prepdo == THROUG) {
X	    oldloc = 0;
X	    oldlc2 = 0;
X	    if (loc == 26)
X		loc = 27;
X	    else
X		loc = 26;
X	}
X    }
X    /* bottomless pit   */
X
X    if (loc == 96) {
X	oldloc = 0;
X	oldlc2 = 0;
X	if (dobjs[0] == TUNNEL)
X	    loc = 102;
X	else {
X	    speak(266);
X	    vdead();
X	    loc = 97;
X	}
X    }
X    /* wheeeeeee!!!  */
X
X    speak(49);
X    return (result);
X}
X
X
Xvgo()
X{
X    int             aloc, xretr, dir, errno, nloc, k, kkk, indx1, ix;
X    int             m, n, xgox, kk, indx2, s;
X
X
X    /* the entrance to the cave at the waterfall */
X
X    rmove = 0;
X    if (prepdo == BEHIND && loc == 24 && dobjs[0] == HORSET) {
X	horflg = 1;
X	oldlc2 = oldloc;
X	oldloc = loc;
X	loc = 25;
X	return;
X    }
X    aloc = loc;
X    if (actor == ROBOT)
X	aloc = obloc[ZROBOT];
X    /* translate go through barrier to direction  */
X
X    if (dobjs[0] == BARRIE && prepdo == THROUG) {
X	prepdo = 0;
X	if (aloc == 26)
X	    dobjs[0] = NORTHE;
X	else if (aloc == 19)
X	    dobjs[0] = SOUTHW;
X	else if (aloc == 62 || aloc == 50)
X	    dobjs[0] = NORTH;
X	else if (aloc == 86 || aloc == 63)
X	    dobjs[0] = SOUTH;
X	else if (aloc == 68)
X	    dobjs[0] = WEST;
X	else if (aloc == 90)
X	    dobjs[0] = EAST;
X	else
X	    prepdo = THROUG;
X    }
X    /*
X
X     * all prepositional expressions must be handled by special code above
X
X     * this point  
X
X     
X*/
X
X    if (prepdo > DOWN) {
X	speak(94);
X	return;
X    }
X    xretr = 0;
X    dir = 0;
X    errno = 0;
X    if (prepdo == UP || prepdo == DOWN) {
X	if (dobjs[0] == 0)
X	    dir = prepdo + 9 - PRPMIN;
X	else if (dobjs[0] > 0 && dobjs[0] <= NORTHW)
X	    errno = 57;
X	else if (dobjs[0] == SPIRE && (aloc >= 12 && aloc <= 14))
X	    dobjs[0] = 0;
X	else
X	    errno = 28;
X    } else if (dobjs[0] > 0 && dobjs[0] <= NORTHW)
X	dir = dobjs[0] + 1 - NUNMIN;
X    else
X	errno = 28;
X    if (errno != 0)
X	goto lab9000;
X    /****** we have reached the point where we use the travel table  */
X    xgox = 0;
X    k = dir;
X    kkk = k;
X    if (adverb == QUICKL)
X	k = k + 64;
X    if (adverb == SLOWLY)
X	k = k + 32;
X    if (adverb == CAREFU)
X	k = k + 16;
X    /*
X     * if he says "go quickly" that will match "go quickly" or just "go" but
X     * "go" will not match "go quickly" . same for other adverbs 
X     */
X
X    if (deadf)
X	k = kkk;
X    indx1 = dispat[aloc];
X    indx2 = dispat[aloc + 1];
X    for (ix = indx1; ix <= indx2 - 2; ix += 2)
X	if (trvtbl[ix] == k || kkk == trvtbl[ix])
X	    goto lab200;
X    errno = 58;
X    goto lab9000;
Xlab200:
X    indx1 = ix + 1;
X    m = trvtbl[indx1] / 512;
X    n = trvtbl[indx1] - m * 512;
X    if (actor != 1 && actor != ROBOT)
X	return;
X    else if (actor == ROBOT) {
X	if (m == 1) {
X	    xgox = 1;
X	    nloc = n;
X	} else if (m == 3 && n == 13 && aloc == 68) {
X	    xgox = 1;
X	    nloc = 90;
X	} else if (m == 3 && n == 6 && aloc == 74) {
X	    xgox = 1;
X	    nloc = 70;
X	} else;
X    }
X    /* unconditional motion */
X
X    else if (m == 1) {
X	xgox = 1;
X	nloc = n;
X	xretr = 1;
X	/* unconditional stay where is */
X
X    } else if (m == 2) {
X	errno = n;
X	/* forced to get out of chair */
X
X	if (aloc == 184 || aloc == 187 || aloc == 166 ||
X	    (aloc >= 175 && aloc <= 181))
X	    spcloc = 0;
X	else;
X    } else if (m == 3) {
X	/***    special conditions */
X
X	if (n == 1) {
X	    /*
X	     * to climb the spire you must wear shoes, but nothing else, and
X	     * it must be daytime  
X             */
X
X	    if (daytim == 0 || (turns % 100) > 73) {
X		speak(123);
X		return;
X	    }
X	    if (obloc[CSHOES] == 3000) {
X		for (kk = 1; kk <= MOVMAX; kk++) {
X		    if (kk == CSHOES)
X			continue;
X		    if (obloc[kk] == 1000 || (obloc[kk] == 3000 && kk != CKEY))
X			errno = 60;
X		}
X		if (errno != 60) {
X		    xgox = 1;
X		    nloc = 13;
X		}
X	    }
X	}
X	/* to get behind the horsetails */
X
X	else if (n == 2) {
X	    if (horflg || (locdat[25] & 16384) != 0) {
X		xgox = 1;
X		nloc = 25;
X	    }
X	}
X	/* into the bar  */
X
X	else if (n == 3) {
X	    if (daytim == 1 || deadf) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 42;
X	    } else if (marflg[0]) {
X		speak(128);
X		return;
X	    }
X	}
X	/* underground from mars */
X
X	else if (n == 4 || n == 11) {
X	    if ((obimpr[MDOOR] & 2) == 0) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 135;
X		if (n == 11)
X		    nloc = 41;
X	    }
X	} else if (n == 5) {
X	    /* warehouse  */
X
X	    if ((obimpr[RDOOR] & 2) != 2) {
X		xgox = 1;
X		xretr = 0;
X		nloc = 47;
X		if (aloc == 47)
X		    nloc = 51;
X	    }
X	} else if (n == 6) {
X	    if ((obimpr[ZVINE] & 56) == 16) {
X		xgox = 1;
X		nloc = 70;
X		xretr = 1;
X	    }
X	} else if (n == 7) {
X	    /* rabbit hole  */
X
X	    if (obimpr[RHOLE] == 17) {
X		xgox = 1;
X		nloc = 96;
X	    }
X	} else if (n == 8) {
X	    /* going down the pole c */
X
X	    if ((obimpr[ZLATEX] & 56) == 24) {
X		xgox = 1;
X		nloc = 80;
X	    }
X	} else if (n == 9 || n == 12) {
X	    /* glass door  */
X
X	    if ((obimpr[GDOOR] & 2) == 0) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 136;
X		if (aloc == 136)
X		    nloc = 85;
X	    }
X	}
X	/* beehive  */
X
X	else if (n == 10) {
X	    if (obimpr[ZDEET] >= 4096) {
X		xgox = 1;
X		nloc = 88;
X		if (aloc == 88)
X		    nloc = 87;
X	    }
X	} else if (n == 13);
X	else if (n == 14) {
X	    if (obimpr[ZLOUVE] == 9) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 142;
X		if (aloc == 142)
X		    nloc = 98;
X	    }
X	}
X	/* the scree slope  */
X
X	else if (n == 15) {
X	    if (screef > 0) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 151;
X	    }
X	} else if (n == 16) {
X	    if ((obimpr[ODOOR] & 2) == 0) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 166;
X		if (aloc == 166)
X		    nloc = 165;
X	    }
X	} else if (n == 17) {
X	    if ((obimpr[BDOOR] & 2) == 0) {
X		xgox = 1;
X		xretr = 1;
X		if (aloc == 174)
X		    nloc = 175;
X		else if (aloc == 175)
X		    nloc = 174;
X		else if (aloc == 181)
X		    nloc = 182;
X		else if (aloc == 184)
X		    nloc = 185;
X		else if (aloc == 187)
X		    nloc = 188;
X		else;
X	    }
X	} else if (n == 18) {
X	    if (obimpr[HMURAL] == 209) {
X		xgox = 1;
X		xretr = 1;
X		nloc = 170;
X	    }
X	} else {
X	    linout("bug in travel table", 19);
X	    return;
X	}
X    }
X    /***    end special conditions
X
X            he dies. code give his final location */
X
X    else if (m == 4) {
X	if (deadf)
X	    errno = 46;
X	else {
X	    oldlc2 = 0;
X	    oldloc = 0;
X	    if (loc == 13 || loc == 14)
X		loc = 12;
X	    if (loc == 19 || loc == 21)
X		loc = 22;
X	    if (loc == 76)
X		loc = 79;
X	    /* if he moved when he dies, special code goes here  */
X
X	    locdat[loc] |= 16384;
X	    vdead();
X	    if (loc == 96) {
X		loc = 97;
X		locdat[97] |= 16384;
X	    }
X	    errno = n;
X	}
X    }
X    /* goes to newloc if he is dead and has been there before */
X
X    else if (m == 5) {
X	if (deadf && (locdat[n] & 16384) != 0) {
X	    xgox = 1;
X	    nloc = n;
X	}
X    }
X    /* motion with some probability */
X
X    else if (m >= 16 && m <= 31) {
X	s = (m - 15) * 6;
X	if (pct(s)) {
X	    xgox = 1;
X	    nloc = n;
X	}
X    } else {
X	speak(252);
X	return;
X    }
X
X
X    if (errno != 0)
X	goto lab9000;
X    if (xgox && actor == 1) {
X	if ((locdat[nloc] & 25) == 0 && obloc[25] != 1000 && !deadf)
X	    errno = 258;
X	else if ((locdat[nloc] & 32) != 0) {
X	    oldlc2 = oldloc;
X	    oldloc = loc;
X	    loc = nloc;
X	    if (!xretr || loc == 38 || loc == 97 || loc == 127
X		|| loc == 88 || loc == 74 || loc == 96) {
X		oldloc = 0;
X		oldlc2 = 0;
X	    }
X	} else
X	    errno = 59;
X    } else if (xgox && actor == ROBOT) {
X	if ((locdat[nloc] & 64) != 0) {
X	    obloc[ZROBOT] = nloc;
X	    rmove = 1;
X	} else
X	    errno = 299;
X    } else {
X	ix = indx1 + 1;
X	if (trvtbl[ix] == kkk || trvtbl[ix] == k)
X	    goto lab200;
X	errno = 58;
X	if (actor == 1)
X	    errno = 299;
X    }
X    /***   all errors and "you are dead" or "impossibility" messages go here */
X
Xlab9000:
X    if (errno != 0)
X	speak(errno);
X}
X
X
X
Xvretre()
X/* retreat or back */
X
X{
X    if (oldloc == 0)
X	speak(65);
X    else {
X	loc = oldloc;
X	oldloc = oldlc2;
X	oldlc2 = 0;
X    }
X}
X
Xvclimb()
X{
X    int             result;
X
X    result = 0;
X    /*
X
X     * if result is 1 call vgo rubber tree jungle trees 
X
X     
X*/
X
X    if ((loc == 64 || loc == 67) && (dobjs[0] == TREE || dobjs[0]
X				     == 0))
X	speak(430);
X    else if ((loc == 78 || loc == 79) && (dobjs[0] == TREE || dobjs[0]
X					  == 0))
X	speak(431);
X    else if (loc == 65 && (prepdo == 0 || prepdo == UP) && (dobjs[0]
X						== TREE || dobjs[0] == 0)) {
X	oldlc2 = oldloc;
X	oldloc = loc;
X	loc = 66;
X    } else if (loc == 66 && (prepdo == DOWN || prepdo == 0) && (dobjs[0]
X						== 0 || dobjs[0] == TREE)) {
X	oldlc2 = oldloc;
X	oldloc = loc;
X	loc = 65;
X    }
X    /* pole  */
X
X    else if ((loc == 80 || loc == 79 || loc == 76) && (dobjs[0] == POLE
X						       || dobjs[0] == 0)) {
X	result = 1;
X	wrdnum[0] = GO;
X	dobjs[0] = 0;
X	if (prepdo == 0)
X	    prepdo = UP;
X    }
X    /*
X
X     * you can climb the spire if you are careful but the actual motion is
X
X     * done by "vgo" 
X
X     
X*/
X
X    else if ((loc >= 12 && loc <= 14) && (dobjs[0] == 0 || dobjs[0]
X					  == SPIRE)) {
X	wrdnum[0] = GO;
X	dobjs[0] = 0;
X	result = 1;
X	if ((loc == 12 && (prepdo == 0 || prepdo == UP)) ||
X	    (loc == 13 && (prepdo == 0 || prepdo == UP)))
X	    prepdo = UP;
X	else if (((loc == 13 || loc == 14) && prepdo == DOWN) ||
X		 (loc == 14 && prepdo == 0))
X	    prepdo = DOWN;
X	else;
X    }
X    /* you can climb over the log but not up a tree!  */
X
X    else if (loc == 19 || loc == 21) {
X	if ((dobjs[0] == TREE || dobjs[0] == LOG) && prepdo == OVER) {
X	    prepdo = 0;
X	    result = 1;
X	    dobjs[0] = NORTHE;
X	    {
X		if (loc == 21)
X		    dobjs[0] = SOUTHW;
X	    }
X	} else if (dobjs[0] == TREE && (prepdo == UP || prepdo == 0))
X	    speak(108);
X	else
X	    speak(94);
X    }
X    /* you can't climb the tower  */
X
X    else if (loc == 48 && (prepdo == 0 || prepdo == UP) &&
X	     (dobjs[0] == 0 || dobjs[0] == TOWER))
X	speak(138);
X    /* but you can climb down the tower */
X
X    else if (loc == 49 && (prepdo == 0 || prepdo == DOWN) &&
X	     (dobjs[0] == TOWER || dobjs[0] == 0)) {
X	oldlc2 = oldloc;
X	oldloc = loc;
X	loc = 48;
X    }
X    /* you can't climb the barrier  */
X
X    else if ((loc == 26 || loc == 27) && dobjs[0] == BARRIE)
X	speak(170);
X    else if (dobjs[0] == TREE) {
X	if ((locdat[loc] & 2048) == 2048)
X	    speak(244);
X	else
X	    speak(245);
X    } else if (loc == 20 || (loc >= 52 && loc <= 56)) {
X	wrdnum[0] = GO;
X	{
X	    if (prepdo == 0)
X		prepdo = UP;
X	}
X	result = 1;
X    } else
X	speak(50);
X    return (result);
X}
X
X
Xvrun()
X{
X    int             result;
X    result = 0;
X    /* ru translates to "go quickly"  */
X
X    if (adverb == SLOWLY)
X	speak(51);
X    else {
X	result = 1;
X	adverb = QUICKL;
X	wrdnum[0] = GO;
X    }
X    return (result);
X}
X
X
Xvswim()
X{
X    int             spk, m, i, xloc;
X    spk = 0;
X    /* he can't swim at night (for no real reason)  */
X
X    if (daytim == 0 && (loc == 5 || loc == 6 || loc == 15 || loc
X			== 17))
X	spk = 122;
X    /* he can't swim while dead */
X
X    else if (deadf)
X	spk = 46;
X    /* you must swim in the lake or poool  */
X
X    else if ((loc < 5 || loc > 17 || (loc > 6 && loc < 15))
X	     && loc != 122)
X	spk = 52;
X    else;
X    if (spk != 0) {
X	speak(spk);
X	return (0);
X    }
X    m = dobjs[0];
X    if ((m == WATER && prepdo != IN) || ((m == ISLAND || m == SHORE)
X			    && prepdo != TO) || (m == POOL && prepdo != IN))
X	spk = 28;
X    else if ((loc == 5 && (m == WEST || m == ISLAND)) ||
X	     (loc == 15 && m == EAST) ||
X	     (loc == 16 && m == SOUTH))
X	xloc = 6;
X    else if (loc == 6 && (m == EAST || m == SHORE))
X	xloc = 5;
X    else if ((loc == 6 && m == NORTH) ||
X	     (loc == 17 && (m == SOUTH || m == ISLAND)) ||
X	     (loc == 16 && m == WEST))
X	xloc = 15;
X    else if ((loc == 6 && m == SOUTH) || (loc == 15 && m == WEST))
X	xloc = 16;
X    else if (loc == 15 && (m == NORTH || m == SHORE))
X	xloc = 17;
X    else if ((loc == 5 || loc == 6 || (loc <= 17 && loc >= 15))
X	     && (m == WATER)) {
X	if (dirty < 10)
X	    spk = 110;
X	else
X	    spk = 111;
X    } else if (loc == 122 && m == POOL)
X	xloc = 123;
X    else
X	spk = 54;
X    if (spk == 0) {
X	/* but not if you are wearing too much  */
X
X	for (i = 1; i <= MOVMAX; i++) {
X	    if (i == CSHOES || i == CKEY || i == CFISH || i == DFISH
X		|| i == BNET || i == GSPHER)
X		continue;
X            if(obloc[i] == 1000 || obloc[i] == 3000) {
X        	speak(53);
X	        return (0);
X            }
X	}
X	oldlc2 = 0;
X	oldloc = 0;
X	loc = xloc;
X	return (0);
X    }
X    speak(spk);
X    return (0);
X}
END_OF_motion.c
if test 16932 -ne `wc -c <motion.c`; then
    echo shar: \"motion.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f variab.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"variab.h\"
else
echo shar: Extracting \"variab.h\" \(772 characters\)
sed "s/^X//" >variab.h <<'END_OF_variab.h'
X
X  int horflg, wirelc[6], punct, three[3] ,eolflg ,lptr ,dotflg ,clause;  
X  int zadjs[12], zobjs[12], ziadj, ziobj, zpdo, zpio, zactor, zadvrb;
X  int zverb, znumb, zall, zbut;
X  int wrdnum[30], wrdtyp[30], adverb, actor;
X  int dobjs[30], iobj, doadjs[12], ioadj, prepdo, prepio;
X  int numdo, butflg, allflg, turns, loc, oldloc, oldlc2, brfflg;
X  int deadf, dirty, nonext ,spcloc;
X  int fshlif, noshoe, daytim, martim ,marflg[9] ,oextim, rdietm;
X  int rvtim, gvtim, eattim, easttm, filmtm, screef;
X  int filmst, machst, fimage, dial1, dial2, dial1x, dial2x;
X  int wwflag, kmax, xindnt, slflag, more, nomor, rmove, chgact;
X  int eastsc, cactsc, diesc, bonus, jackpo, lpill, pbstat, decset;
X  int raset, dcombi, chaset, chaser, guardl;
X  char outst2[66];
X  char inbuf[128];
END_OF_variab.h
if test 772 -ne `wc -c <variab.h`; then
    echo shar: \"variab.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 4 \(of 7\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 7 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archivElse if (n