mirror of https://github.com/sean-m/zork
1344 lines
25 KiB
C
1344 lines
25 KiB
C
/* VAPPLI- MAIN VERB PROCESSING ROUTINE */
|
|
|
|
/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
|
|
/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
|
|
/* WRITTEN BY R. M. SUPNIK */
|
|
|
|
#include "funcs.h"
|
|
#include "vars.h"
|
|
|
|
logical vappli_(ri)
|
|
integer ri;
|
|
{
|
|
/* Initialized data */
|
|
|
|
const integer mxnop = 39;
|
|
const integer mxsmp = 99;
|
|
|
|
/* System generated locals */
|
|
integer i__1;
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
integer melee;
|
|
logical f;
|
|
integer i, j, av;
|
|
integer rmk;
|
|
integer odi2 = 0, odo2 = 0;
|
|
|
|
ret_val = TRUE_;
|
|
/* !ASSUME WINS. */
|
|
|
|
if (prsvec_1.prso > 220) {
|
|
goto L5;
|
|
}
|
|
|
|
if (prsvec_1.prso != 0) {
|
|
odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
|
|
}
|
|
/* !SET UP DESCRIPTORS. */
|
|
L5:
|
|
if (prsvec_1.prsi != 0) {
|
|
odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
|
|
}
|
|
av = advs_1.avehic[play_1.winner - 1];
|
|
rmk = rnd_(6) + 372;
|
|
/* !REMARK FOR HACK-HACKS. */
|
|
|
|
if (ri == 0) {
|
|
goto L10;
|
|
}
|
|
/* !ZERO IS FALSE. */
|
|
if (ri <= mxnop) {
|
|
return ret_val;
|
|
}
|
|
/* !NOP? */
|
|
if (ri <= mxsmp) {
|
|
goto L100;
|
|
}
|
|
/* !SIMPLE VERB? */
|
|
switch (ri - mxsmp) {
|
|
case 1: goto L18000;
|
|
case 2: goto L20000;
|
|
case 3: goto L22000;
|
|
case 4: goto L23000;
|
|
case 5: goto L24000;
|
|
case 6: goto L25000;
|
|
case 7: goto L26000;
|
|
case 8: goto L27000;
|
|
case 9: goto L28000;
|
|
case 10: goto L29000;
|
|
case 11: goto L30000;
|
|
case 12: goto L31000;
|
|
case 13: goto L32000;
|
|
case 14: goto L33000;
|
|
case 15: goto L34000;
|
|
case 16: goto L35000;
|
|
case 17: goto L36000;
|
|
case 18: goto L38000;
|
|
case 19: goto L39000;
|
|
case 20: goto L40000;
|
|
case 21: goto L41000;
|
|
case 22: goto L42000;
|
|
case 23: goto L43000;
|
|
case 24: goto L44000;
|
|
case 25: goto L45000;
|
|
case 26: goto L46000;
|
|
case 27: goto L47000;
|
|
case 28: goto L48000;
|
|
case 29: goto L49000;
|
|
case 30: goto L50000;
|
|
case 31: goto L51000;
|
|
case 32: goto L52000;
|
|
case 33: goto L53000;
|
|
case 34: goto L55000;
|
|
case 35: goto L56000;
|
|
case 36: goto L58000;
|
|
case 37: goto L59000;
|
|
case 38: goto L60000;
|
|
case 39: goto L63000;
|
|
case 40: goto L64000;
|
|
case 41: goto L65000;
|
|
case 42: goto L66000;
|
|
case 43: goto L68000;
|
|
case 44: goto L69000;
|
|
case 45: goto L70000;
|
|
case 46: goto L71000;
|
|
case 47: goto L72000;
|
|
case 48: goto L73000;
|
|
case 49: goto L74000;
|
|
case 50: goto L77000;
|
|
case 51: goto L78000;
|
|
case 52: goto L80000;
|
|
case 53: goto L81000;
|
|
case 54: goto L82000;
|
|
case 55: goto L83000;
|
|
case 56: goto L84000;
|
|
case 57: goto L85000;
|
|
case 58: goto L86000;
|
|
case 59: goto L87000;
|
|
case 60: goto L88000;
|
|
}
|
|
bug_(7, ri);
|
|
|
|
/* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */
|
|
|
|
L10:
|
|
ret_val = FALSE_;
|
|
/* !LOSE. */
|
|
return ret_val;
|
|
|
|
/* SIMPLE VERBS ARE HANDLED EXTERNALLY. */
|
|
|
|
L100:
|
|
ret_val = sverbs_(ri);
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 3 */
|
|
|
|
/* V100-- READ. OUR FIRST REAL VERB. */
|
|
|
|
L18000:
|
|
if (lit_(play_1.here)) {
|
|
goto L18100;
|
|
}
|
|
/* !ROOM LIT? */
|
|
rspeak_(356);
|
|
/* !NO, CANT READ. */
|
|
return ret_val;
|
|
|
|
L18100:
|
|
if (prsvec_1.prsi == 0) {
|
|
goto L18200;
|
|
}
|
|
/* !READ THROUGH OBJ? */
|
|
if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TRANBT) != 0) {
|
|
goto L18200;
|
|
}
|
|
rspsub_(357, odi2);
|
|
/* !NOT TRANSPARENT. */
|
|
return ret_val;
|
|
|
|
L18200:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & READBT) != 0) {
|
|
goto L18300;
|
|
}
|
|
rspsub_(358, odo2);
|
|
/* !NOT READABLE. */
|
|
return ret_val;
|
|
|
|
L18300:
|
|
if (! objact_()) {
|
|
rspeak_(objcts_1.oread[prsvec_1.prso - 1]);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V101-- MELT. UNLESS OBJECT HANDLES, JOKE. */
|
|
|
|
L20000:
|
|
if (! objact_()) {
|
|
rspsub_(361, odo2);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V102-- INFLATE. WORKS ONLY WITH BOATS. */
|
|
|
|
L22000:
|
|
if (! objact_()) {
|
|
rspeak_(368);
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
return ret_val;
|
|
|
|
/* V103-- DEFLATE. */
|
|
|
|
L23000:
|
|
if (! objact_()) {
|
|
rspeak_(369);
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 4 */
|
|
|
|
/* V104-- ALARM. IF SLEEPING, WAKE HIM UP. */
|
|
|
|
L24000:
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & SLEPBT) == 0) {
|
|
goto L24100;
|
|
}
|
|
ret_val = objact_();
|
|
/* !SLEEPING, LET OBJ DO. */
|
|
return ret_val;
|
|
|
|
L24100:
|
|
rspsub_(370, odo2);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
|
|
/* V105-- EXORCISE. OBJECTS HANDLE. */
|
|
|
|
L25000:
|
|
f = objact_();
|
|
/* !OBJECTS HANDLE. */
|
|
return ret_val;
|
|
|
|
/* V106-- PLUG. LET OBJECTS HANDLE. */
|
|
|
|
L26000:
|
|
if (! objact_()) {
|
|
rspeak_(371);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V107-- KICK. IF OBJECT IGNORES, JOKE. */
|
|
|
|
L27000:
|
|
if (! objact_()) {
|
|
rspsb2_(378, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V108-- WAVE. SAME. */
|
|
|
|
L28000:
|
|
if (! objact_()) {
|
|
rspsb2_(379, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V109,V110-- RAISE, LOWER. SAME. */
|
|
|
|
L29000:
|
|
L30000:
|
|
if (! objact_()) {
|
|
rspsb2_(380, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V111-- RUB. SAME. */
|
|
|
|
L31000:
|
|
if (! objact_()) {
|
|
rspsb2_(381, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V112-- PUSH. SAME. */
|
|
|
|
L32000:
|
|
if (! objact_()) {
|
|
rspsb2_(382, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 5 */
|
|
|
|
/* V113-- UNTIE. IF OBJECT IGNORES, JOKE. */
|
|
|
|
L33000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJECT HANDLE? */
|
|
i = 383;
|
|
/* !NO, NOT TIED. */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) == 0) {
|
|
i = 384;
|
|
}
|
|
rspeak_(i);
|
|
return ret_val;
|
|
|
|
/* V114-- TIE. NEVER REALLY WORKS. */
|
|
|
|
L34000:
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) != 0) {
|
|
goto L34100;
|
|
}
|
|
rspeak_(385);
|
|
/* !NOT TIEABLE. */
|
|
return ret_val;
|
|
|
|
L34100:
|
|
if (! objact_()) {
|
|
rspsub_(386, odo2);
|
|
}
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
|
|
/* V115-- TIE UP. NEVER REALLY WORKS. */
|
|
|
|
L35000:
|
|
if ((objcts_1.oflag2[prsvec_1.prsi - 1] & TIEBT) != 0) {
|
|
goto L35100;
|
|
}
|
|
rspsub_(387, odo2);
|
|
/* !NOT TIEABLE. */
|
|
return ret_val;
|
|
|
|
L35100:
|
|
i = 388;
|
|
/* !ASSUME VILLAIN. */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
|
|
i = 389;
|
|
}
|
|
rspsub_(i, odo2);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
|
|
/* V116-- TURN. OBJECT MUST HANDLE. */
|
|
|
|
L36000:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & TURNBT) != 0) {
|
|
goto L36100;
|
|
}
|
|
rspeak_(390);
|
|
/* !NOT TURNABLE. */
|
|
return ret_val;
|
|
|
|
L36100:
|
|
if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0) {
|
|
goto L36200;
|
|
}
|
|
rspsub_(391, odi2);
|
|
/* !NOT A TOOL. */
|
|
return ret_val;
|
|
|
|
L36200:
|
|
ret_val = objact_();
|
|
/* !LET OBJECT HANDLE. */
|
|
return ret_val;
|
|
|
|
/* V117-- BREATHE. BECOMES INFLATE WITH LUNGS. */
|
|
|
|
L38000:
|
|
prsvec_1.prsa = vindex_1.inflaw;
|
|
prsvec_1.prsi = oindex_1.lungs;
|
|
goto L22000;
|
|
/* !HANDLE LIKE INFLATE. */
|
|
|
|
/* V118-- KNOCK. MOSTLY JOKE. */
|
|
|
|
L39000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = 394;
|
|
/* !JOKE FOR DOOR. */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
|
|
i = 395;
|
|
}
|
|
rspsub_(i, odo2);
|
|
/* !JOKE FOR NONDOORS TOO. */
|
|
return ret_val;
|
|
|
|
/* V119-- LOOK. */
|
|
|
|
L40000:
|
|
if (prsvec_1.prso != 0) {
|
|
goto L41500;
|
|
}
|
|
/* !SOMETHING TO LOOK AT? */
|
|
ret_val = rmdesc_(3);
|
|
/* !HANDLED BY RMDESC. */
|
|
return ret_val;
|
|
|
|
/* V120-- EXAMINE. */
|
|
|
|
L41000:
|
|
if (prsvec_1.prso != 0) {
|
|
goto L41500;
|
|
}
|
|
/* !SOMETHING TO EXAMINE? */
|
|
ret_val = rmdesc_(0);
|
|
/* !HANDLED BY RMDESC. */
|
|
return ret_val;
|
|
|
|
L41500:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = objcts_1.oread[prsvec_1.prso - 1];
|
|
/* !GET READING MATERIAL. */
|
|
if (i != 0) {
|
|
rspeak_(i);
|
|
}
|
|
/* !OUTPUT IF THERE, */
|
|
if (i == 0) {
|
|
rspsub_(429, odo2);
|
|
}
|
|
/* !OTHERWISE DEFAULT. */
|
|
prsvec_1.prsa = vindex_1.foow;
|
|
/* !DEFUSE ROOM PROCESSORS. */
|
|
return ret_val;
|
|
|
|
/* V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION. */
|
|
|
|
L42000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJECT HANDLE? */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
|
|
goto L42100;
|
|
}
|
|
rspeak_(371);
|
|
/* !JOKE FOR VILLAINS. */
|
|
return ret_val;
|
|
|
|
L42100:
|
|
if (qempty_(prsvec_1.prso) || (objcts_1.oflag1[prsvec_1.prso - 1] &
|
|
TAKEBT) == 0) {
|
|
goto L10;
|
|
}
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
|
|
goto L42300;
|
|
}
|
|
/* !OPEN? SPILL. */
|
|
rspsub_(396, odo2);
|
|
/* !NO, DESCRIBE NOISE. */
|
|
return ret_val;
|
|
|
|
L42300:
|
|
rspsub_(397, odo2);
|
|
/* !SPILL THE WORKS. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !SPILL CONTENTS. */
|
|
if (objcts_1.ocan[i - 1] != prsvec_1.prso) {
|
|
goto L42500;
|
|
}
|
|
/* !INSIDE? */
|
|
objcts_1.oflag2[i - 1] |= TCHBT;
|
|
if (av == 0) {
|
|
goto L42400;
|
|
}
|
|
/* !IN VEHICLE? */
|
|
newsta_(i, 0, 0, av, 0);
|
|
/* !YES, SPILL IN THERE. */
|
|
goto L42500;
|
|
|
|
L42400:
|
|
newsta_(i, 0, play_1.here, 0, 0);
|
|
/* !NO, SPILL ON FLOOR, */
|
|
if (i == oindex_1.water) {
|
|
newsta_(i, 133, 0, 0, 0);
|
|
}
|
|
/* !BUT WATER DISAPPEARS. */
|
|
L42500:
|
|
;
|
|
}
|
|
return ret_val;
|
|
|
|
/* V122-- MOVE. MOSTLY JOKES. */
|
|
|
|
L43000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = 398;
|
|
/* !ASSUME NOT HERE. */
|
|
if (qhere_(prsvec_1.prso, play_1.here)) {
|
|
i = 399;
|
|
}
|
|
rspsub_(i, odo2);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 6 */
|
|
|
|
/* V123-- TURN ON. */
|
|
|
|
L44000:
|
|
f = lit_(play_1.here);
|
|
/* !RECORD IF LIT. */
|
|
if (objact_()) {
|
|
goto L44300;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 &&
|
|
objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
|
|
goto L44100;
|
|
}
|
|
rspeak_(400);
|
|
/* !CANT DO IT. */
|
|
return ret_val;
|
|
|
|
L44100:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) == 0) {
|
|
goto L44200;
|
|
}
|
|
rspeak_(401);
|
|
/* !ALREADY ON. */
|
|
return ret_val;
|
|
|
|
L44200:
|
|
objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT;
|
|
rspsub_(404, odo2);
|
|
L44300:
|
|
if (! f && lit_(play_1.here)) {
|
|
f = rmdesc_(0);
|
|
}
|
|
/* !ROOM NEWLY LIT. */
|
|
return ret_val;
|
|
|
|
/* V124-- TURN OFF. */
|
|
|
|
L45000:
|
|
if (objact_()) {
|
|
goto L45300;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 &&
|
|
objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
|
|
goto L45100;
|
|
}
|
|
rspeak_(402);
|
|
/* !CANT DO IT. */
|
|
return ret_val;
|
|
|
|
L45100:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) != 0) {
|
|
goto L45200;
|
|
}
|
|
rspeak_(403);
|
|
/* !ALREADY OFF. */
|
|
return ret_val;
|
|
|
|
L45200:
|
|
objcts_1.oflag1[prsvec_1.prso - 1] &= ~ ONBT;
|
|
rspsub_(405, odo2);
|
|
L45300:
|
|
if (! lit_(play_1.here)) {
|
|
rspeak_(406);
|
|
}
|
|
/* !MAY BE DARK. */
|
|
return ret_val;
|
|
|
|
/* V125-- OPEN. A FINE MESS. */
|
|
|
|
L46000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
|
|
goto L46100;
|
|
}
|
|
L46050:
|
|
rspsub_(407, odo2);
|
|
/* !NOT OPENABLE. */
|
|
return ret_val;
|
|
|
|
L46100:
|
|
if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
|
|
goto L46200;
|
|
}
|
|
rspsub_(408, odo2);
|
|
/* !NOT OPENABLE. */
|
|
return ret_val;
|
|
|
|
L46200:
|
|
if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
|
|
goto L46225;
|
|
}
|
|
rspeak_(412);
|
|
/* !ALREADY OPEN. */
|
|
return ret_val;
|
|
|
|
L46225:
|
|
objcts_1.oflag2[prsvec_1.prso - 1] |= OPENBT;
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0 ||
|
|
qempty_(prsvec_1.prso)) {
|
|
goto L46300;
|
|
}
|
|
princo_(prsvec_1.prso, 410);
|
|
/* !PRINT CONTENTS. */
|
|
return ret_val;
|
|
|
|
L46300:
|
|
rspeak_(409);
|
|
/* !DONE */
|
|
return ret_val;
|
|
|
|
/* V126-- CLOSE. */
|
|
|
|
L47000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) == 0) {
|
|
goto L46050;
|
|
}
|
|
if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
|
|
goto L47100;
|
|
}
|
|
rspsub_(411, odo2);
|
|
/* !NOT CLOSABLE. */
|
|
return ret_val;
|
|
|
|
L47100:
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
|
|
goto L47200;
|
|
}
|
|
/* !OPEN? */
|
|
rspeak_(413);
|
|
/* !NO, JOKE. */
|
|
return ret_val;
|
|
|
|
L47200:
|
|
objcts_1.oflag2[prsvec_1.prso - 1] &= ~ OPENBT;
|
|
rspeak_(414);
|
|
/* !DONE. */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 7 */
|
|
|
|
/* V127-- FIND. BIG MEGILLA. */
|
|
|
|
L48000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = 415;
|
|
/* !DEFAULT CASE. */
|
|
if (qhere_(prsvec_1.prso, play_1.here)) {
|
|
goto L48300;
|
|
}
|
|
/* !IN ROOM? */
|
|
if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
|
|
goto L48200;
|
|
}
|
|
/* !ON WINNER? */
|
|
j = objcts_1.ocan[prsvec_1.prso - 1];
|
|
/* !DOWN ONE LEVEL. */
|
|
if (j == 0) {
|
|
goto L10;
|
|
}
|
|
if ((objcts_1.oflag1[j - 1] & TRANBT) == 0 && (! ((
|
|
objcts_1.oflag2[j - 1] & OPENBT) != 0) || (
|
|
objcts_1.oflag1[j - 1] & DOORBT + CONTBT) == 0))
|
|
{
|
|
goto L10;
|
|
}
|
|
i = 417;
|
|
/* !ASSUME IN ROOM. */
|
|
if (qhere_(j, play_1.here)) {
|
|
goto L48100;
|
|
}
|
|
if (objcts_1.oadv[j - 1] != play_1.winner) {
|
|
goto L10;
|
|
}
|
|
/* !NOT HERE OR ON PERSON. */
|
|
i = 418;
|
|
L48100:
|
|
rspsub_(i, objcts_1.odesc2[j - 1]);
|
|
/* !DESCRIBE FINDINGS. */
|
|
return ret_val;
|
|
|
|
L48200:
|
|
i = 416;
|
|
L48300:
|
|
rspsub_(i, odo2);
|
|
/* !DESCRIBE FINDINGS. */
|
|
return ret_val;
|
|
|
|
/* V128-- WAIT. RUN CLOCK DEMON. */
|
|
|
|
L49000:
|
|
rspeak_(419);
|
|
/* !TIME PASSES. */
|
|
for (i = 1; i <= 3; ++i) {
|
|
if (clockd_()) {
|
|
return ret_val;
|
|
}
|
|
/* L49100: */
|
|
}
|
|
return ret_val;
|
|
|
|
/* V129-- SPIN. */
|
|
/* V159-- TURN TO. */
|
|
|
|
L50000:
|
|
L88000:
|
|
if (! objact_()) {
|
|
rspeak_(663);
|
|
}
|
|
/* !IF NOT OBJ, JOKE. */
|
|
return ret_val;
|
|
|
|
/* V130-- BOARD. WORKS WITH VEHICLES. */
|
|
|
|
L51000:
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
|
|
goto L51100;
|
|
}
|
|
rspsub_(421, odo2);
|
|
/* !NOT VEHICLE, JOKE. */
|
|
return ret_val;
|
|
|
|
L51100:
|
|
if (qhere_(prsvec_1.prso, play_1.here)) {
|
|
goto L51200;
|
|
}
|
|
/* !HERE? */
|
|
rspsub_(420, odo2);
|
|
/* !NO, JOKE. */
|
|
return ret_val;
|
|
|
|
L51200:
|
|
if (av == 0) {
|
|
goto L51300;
|
|
}
|
|
/* !ALREADY GOT ONE? */
|
|
rspsub_(422, odo2);
|
|
/* !YES, JOKE. */
|
|
return ret_val;
|
|
|
|
L51300:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
rspsub_(423, odo2);
|
|
/* !DESCRIBE. */
|
|
advs_1.avehic[play_1.winner - 1] = prsvec_1.prso;
|
|
if (play_1.winner != aindex_1.player) {
|
|
objcts_1.ocan[advs_1.aobj[play_1.winner - 1] - 1] = prsvec_1.prso;
|
|
}
|
|
return ret_val;
|
|
|
|
/* V131-- DISEMBARK. */
|
|
|
|
L52000:
|
|
if (av == prsvec_1.prso) {
|
|
goto L52100;
|
|
}
|
|
/* !FROM VEHICLE? */
|
|
rspeak_(424);
|
|
/* !NO, JOKE. */
|
|
return ret_val;
|
|
|
|
L52100:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((rooms_1.rflag[play_1.here - 1] & RLAND) != 0) {
|
|
goto L52200;
|
|
}
|
|
rspeak_(425);
|
|
/* !NOT ON LAND. */
|
|
return ret_val;
|
|
|
|
L52200:
|
|
advs_1.avehic[play_1.winner - 1] = 0;
|
|
rspeak_(426);
|
|
if (play_1.winner != aindex_1.player) {
|
|
newsta_(advs_1.aobj[play_1.winner - 1], 0, play_1.here, 0, 0);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V132-- TAKE. HANDLED EXTERNALLY. */
|
|
|
|
L53000:
|
|
ret_val = take_(1);
|
|
return ret_val;
|
|
|
|
/* V133-- INVENTORY. PROCESSED EXTERNALLY. */
|
|
|
|
L55000:
|
|
invent_(play_1.winner);
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 8 */
|
|
|
|
/* V134-- FILL. STRANGE DOINGS WITH WATER. */
|
|
|
|
L56000:
|
|
if (prsvec_1.prsi != 0) {
|
|
goto L56050;
|
|
}
|
|
/* !ANY OBJ SPECIFIED? */
|
|
if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) !=
|
|
0) {
|
|
goto L56025;
|
|
}
|
|
rspeak_(516);
|
|
/* !NOTHING TO FILL WITH. */
|
|
prsvec_1.prswon = FALSE_;
|
|
/* !YOU LOSE. */
|
|
return ret_val;
|
|
|
|
L56025:
|
|
prsvec_1.prsi = oindex_1.gwate;
|
|
/* !USE GLOBAL WATER. */
|
|
L56050:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if (prsvec_1.prsi != oindex_1.gwate && prsvec_1.prsi != oindex_1.water) {
|
|
rspsb2_(444, odi2, odo2);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V135,V136-- EAT/DRINK */
|
|
|
|
L58000:
|
|
L59000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if (prsvec_1.prso == oindex_1.gwate) {
|
|
goto L59500;
|
|
}
|
|
/* !DRINK GLOBAL WATER? */
|
|
if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & FOODBT) != 0)) {
|
|
goto L59400;
|
|
}
|
|
/* !EDIBLE? */
|
|
if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
|
|
goto L59200;
|
|
}
|
|
/* !YES, ON WINNER? */
|
|
L59100:
|
|
rspsub_(454, odo2);
|
|
/* !NOT ACCESSIBLE. */
|
|
return ret_val;
|
|
|
|
L59200:
|
|
if (prsvec_1.prsa == vindex_1.drinkw) {
|
|
goto L59300;
|
|
}
|
|
/* !DRINK FOOD? */
|
|
newsta_(prsvec_1.prso, 455, 0, 0, 0);
|
|
/* !NO, IT DISAPPEARS. */
|
|
return ret_val;
|
|
|
|
L59300:
|
|
rspeak_(456);
|
|
/* !YES, JOKE. */
|
|
return ret_val;
|
|
|
|
L59400:
|
|
if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & DRNKBT) != 0)) {
|
|
goto L59600;
|
|
}
|
|
/* !DRINKABLE? */
|
|
if (objcts_1.ocan[prsvec_1.prso - 1] == 0) {
|
|
goto L59100;
|
|
}
|
|
/* !YES, IN SOMETHING? */
|
|
if (objcts_1.oadv[objcts_1.ocan[prsvec_1.prso - 1] - 1] != play_1.winner)
|
|
{
|
|
goto L59100;
|
|
}
|
|
if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] &
|
|
OPENBT) != 0) {
|
|
goto L59500;
|
|
}
|
|
/* !CONT OPEN? */
|
|
rspeak_(457);
|
|
/* !NO, JOKE. */
|
|
return ret_val;
|
|
|
|
L59500:
|
|
newsta_(prsvec_1.prso, 458, 0, 0, 0);
|
|
/* !GONE. */
|
|
return ret_val;
|
|
|
|
L59600:
|
|
rspsub_(453, odo2);
|
|
/* !NOT FOOD OR DRINK. */
|
|
return ret_val;
|
|
|
|
/* V137-- BURN. COMPLICATED. */
|
|
|
|
L60000:
|
|
if ((objcts_1.oflag1[prsvec_1.prsi - 1] & FLAMBT +
|
|
LITEBT + ONBT) != FLAMBT +
|
|
LITEBT + ONBT) {
|
|
goto L60400;
|
|
}
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if (objcts_1.ocan[prsvec_1.prso - 1] != oindex_1.recep) {
|
|
goto L60050;
|
|
}
|
|
/* !BALLOON? */
|
|
if (oappli_(objcts_1.oactio[oindex_1.ballo - 1], 0)) {
|
|
return ret_val;
|
|
}
|
|
/* !DID IT HANDLE? */
|
|
L60050:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & BURNBT) == 0) {
|
|
goto L60300;
|
|
}
|
|
if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) {
|
|
goto L60100;
|
|
}
|
|
/* !CARRYING IT? */
|
|
rspsub_(459, odo2);
|
|
jigsup_(460);
|
|
return ret_val;
|
|
|
|
L60100:
|
|
j = objcts_1.ocan[prsvec_1.prso - 1];
|
|
/* !GET CONTAINER. */
|
|
if (qhere_(prsvec_1.prso, play_1.here) || av != 0 && j == av) {
|
|
goto L60200;
|
|
}
|
|
if (j == 0) {
|
|
goto L60150;
|
|
}
|
|
/* !INSIDE? */
|
|
if (! ((objcts_1.oflag2[j - 1] & OPENBT) != 0)) {
|
|
goto L60150;
|
|
}
|
|
/* !OPEN? */
|
|
if (qhere_(j, play_1.here) || av != 0 && objcts_1.ocan[j - 1] == av) {
|
|
goto L60200;
|
|
}
|
|
L60150:
|
|
rspeak_(461);
|
|
/* !CANT REACH IT. */
|
|
return ret_val;
|
|
|
|
L60200:
|
|
rspsub_(462, odo2);
|
|
/* !BURN IT. */
|
|
newsta_(prsvec_1.prso, 0, 0, 0, 0);
|
|
return ret_val;
|
|
|
|
L60300:
|
|
rspsub_(463, odo2);
|
|
/* !CANT BURN IT. */
|
|
return ret_val;
|
|
|
|
L60400:
|
|
rspsub_(301, odi2);
|
|
/* !CANT BURN IT WITH THAT. */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 9 */
|
|
|
|
/* V138-- MUNG. GO TO COMMON ATTACK CODE. */
|
|
|
|
L63000:
|
|
i = 466;
|
|
/* !CHOOSE PHRASE. */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
|
|
goto L66100;
|
|
}
|
|
if (! objact_()) {
|
|
rspsb2_(466, odo2, rmk);
|
|
}
|
|
return ret_val;
|
|
|
|
/* V139-- KILL. GO TO COMMON ATTACK CODE. */
|
|
|
|
L64000:
|
|
i = 467;
|
|
/* !CHOOSE PHRASE. */
|
|
goto L66100;
|
|
|
|
/* V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK. */
|
|
|
|
L65000:
|
|
j = prsvec_1.prso;
|
|
/* !INVERT. */
|
|
prsvec_1.prso = prsvec_1.prsi;
|
|
prsvec_1.prsi = j;
|
|
j = odo2;
|
|
odo2 = odi2;
|
|
odi2 = j;
|
|
prsvec_1.prsa = vindex_1.attacw;
|
|
/* !FOR OBJACT. */
|
|
|
|
/* V141-- ATTACK. FALL THRU TO ATTACK CODE. */
|
|
|
|
L66000:
|
|
i = 468;
|
|
|
|
/* COMMON MUNG/ATTACK/SWING/KILL CODE. */
|
|
|
|
L66100:
|
|
if (prsvec_1.prso != 0) {
|
|
goto L66200;
|
|
}
|
|
/* !ANYTHING? */
|
|
rspeak_(469);
|
|
/* !NO, JOKE. */
|
|
return ret_val;
|
|
|
|
L66200:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
|
|
goto L66300;
|
|
}
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0) {
|
|
rspsub_(470, odo2);
|
|
}
|
|
return ret_val;
|
|
|
|
L66300:
|
|
j = 471;
|
|
/* !ASSUME NO WEAPON. */
|
|
if (prsvec_1.prsi == 0) {
|
|
goto L66500;
|
|
}
|
|
if ((objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) == 0) {
|
|
goto L66400;
|
|
}
|
|
melee = 1;
|
|
/* !ASSUME SWORD. */
|
|
if (prsvec_1.prsi != oindex_1.sword) {
|
|
melee = 2;
|
|
}
|
|
/* !MUST BE KNIFE. */
|
|
i = blow_(aindex_1.player, prsvec_1.prso, melee, 1, 0);
|
|
/* !STRIKE BLOW. */
|
|
return ret_val;
|
|
|
|
L66400:
|
|
j = 472;
|
|
/* !NOT A WEAPON. */
|
|
L66500:
|
|
rspsb2_(i, odo2, j);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 10 */
|
|
|
|
/* V142-- WALK. PROCESSED EXTERNALLY. */
|
|
|
|
L68000:
|
|
ret_val = walk_();
|
|
return ret_val;
|
|
|
|
/* V143-- TELL. PROCESSED IN GAME. */
|
|
|
|
L69000:
|
|
rspeak_(603);
|
|
return ret_val;
|
|
|
|
/* V144-- PUT. PROCESSED EXTERNALLY. */
|
|
|
|
L70000:
|
|
ret_val = put_(1);
|
|
return ret_val;
|
|
|
|
/* V145,V146,V147,V148-- DROP/GIVE/POUR/THROW */
|
|
|
|
L71000:
|
|
L72000:
|
|
L73000:
|
|
L74000:
|
|
ret_val = drop_(0);
|
|
return ret_val;
|
|
|
|
/* V149-- SAVE */
|
|
|
|
L77000:
|
|
if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
|
|
goto L77100;
|
|
}
|
|
rspeak_(828);
|
|
/* !NO SAVES IN ENDGAME. */
|
|
return ret_val;
|
|
|
|
L77100:
|
|
savegm_();
|
|
return ret_val;
|
|
|
|
/* V150-- RESTORE */
|
|
|
|
L78000:
|
|
if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
|
|
goto L78100;
|
|
}
|
|
rspeak_(829);
|
|
/* !NO RESTORES IN ENDGAME. */
|
|
return ret_val;
|
|
|
|
L78100:
|
|
rstrgm_();
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 11 */
|
|
|
|
/* V151-- HELLO */
|
|
|
|
L80000:
|
|
if (prsvec_1.prso != 0) {
|
|
goto L80100;
|
|
}
|
|
/* !ANY OBJ? */
|
|
i__1 = rnd_(4) + 346;
|
|
rspeak_(i__1);
|
|
/* !NO, VANILLA HELLO. */
|
|
return ret_val;
|
|
|
|
L80100:
|
|
if (prsvec_1.prso != oindex_1.aviat) {
|
|
goto L80200;
|
|
}
|
|
/* !HELLO AVIATOR? */
|
|
rspeak_(350);
|
|
/* !NOTHING HAPPENS. */
|
|
return ret_val;
|
|
|
|
L80200:
|
|
if (prsvec_1.prso != oindex_1.sailo) {
|
|
goto L80300;
|
|
}
|
|
/* !HELLO SAILOR? */
|
|
++state_1.hs;
|
|
/* !COUNT. */
|
|
i = 351;
|
|
/* !GIVE NORMAL OR */
|
|
if (state_1.hs % 10 == 0) {
|
|
i = 352;
|
|
}
|
|
/* !RANDOM MESSAGE. */
|
|
if (state_1.hs % 20 == 0) {
|
|
i = 353;
|
|
}
|
|
rspeak_(i);
|
|
/* !SPEAK UP. */
|
|
return ret_val;
|
|
|
|
L80300:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = 354;
|
|
/* !ASSUME VILLAIN. */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT +
|
|
ACTRBT) == 0) {
|
|
i = 355;
|
|
}
|
|
rspsub_(i, odo2);
|
|
/* !HELLO THERE */
|
|
/* ! */
|
|
return ret_val;
|
|
|
|
/* V152-- LOOK INTO */
|
|
|
|
L81000:
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
|
|
goto L81300;
|
|
}
|
|
if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
|
|
goto L81200;
|
|
}
|
|
/* !OPEN? */
|
|
rspsub_(628, odo2);
|
|
/* !OPEN DOOR- UNINTERESTING. */
|
|
return ret_val;
|
|
|
|
L81200:
|
|
rspsub_(525, odo2);
|
|
/* !CLOSED DOOR- CANT SEE. */
|
|
return ret_val;
|
|
|
|
L81300:
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
|
|
goto L81400;
|
|
}
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0 || (
|
|
objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0) {
|
|
goto L81400;
|
|
}
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
|
|
goto L81200;
|
|
}
|
|
rspsub_(630, odo2);
|
|
/* !CANT LOOK INSIDE. */
|
|
return ret_val;
|
|
|
|
L81400:
|
|
if (qempty_(prsvec_1.prso)) {
|
|
goto L81500;
|
|
}
|
|
/* !VEH OR SEE IN. EMPTY? */
|
|
princo_(prsvec_1.prso, 573);
|
|
/* !NO, LIST CONTENTS. */
|
|
return ret_val;
|
|
|
|
L81500:
|
|
rspsub_(629, odo2);
|
|
/* !EMPTY. */
|
|
return ret_val;
|
|
|
|
/* V153-- LOOK UNDER */
|
|
|
|
L82000:
|
|
if (! objact_()) {
|
|
rspeak_(631);
|
|
}
|
|
/* !OBJECT HANDLE? */
|
|
return ret_val;
|
|
/* VAPPLI, PAGE 12 */
|
|
|
|
/* V154-- PUMP */
|
|
|
|
L83000:
|
|
if (objcts_1.oroom[oindex_1.pump - 1] == play_1.here || objcts_1.oadv[
|
|
oindex_1.pump - 1] == play_1.winner) {
|
|
goto L83100;
|
|
}
|
|
rspeak_(632);
|
|
/* !NO. */
|
|
return ret_val;
|
|
|
|
L83100:
|
|
prsvec_1.prsi = oindex_1.pump;
|
|
/* !BECOMES INFLATE */
|
|
prsvec_1.prsa = vindex_1.inflaw;
|
|
/* !X WITH PUMP. */
|
|
goto L22000;
|
|
/* !DONE. */
|
|
|
|
/* V155-- WIND */
|
|
|
|
L84000:
|
|
if (! objact_()) {
|
|
rspsub_(634, odo2);
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
return ret_val;
|
|
|
|
/* V156-- CLIMB */
|
|
/* V157-- CLIMB UP */
|
|
/* V158-- CLIMB DOWN */
|
|
|
|
L85000:
|
|
L86000:
|
|
L87000:
|
|
i = xsrch_1.xup;
|
|
/* !ASSUME UP. */
|
|
if (prsvec_1.prsa == vindex_1.clmbdw) {
|
|
i = xsrch_1.xdown;
|
|
}
|
|
/* !UNLESS CLIMB DN. */
|
|
f = (objcts_1.oflag2[prsvec_1.prso - 1] & CLMBBT) != 0;
|
|
if (f && findxt_(i, play_1.here)) {
|
|
goto L87500;
|
|
}
|
|
/* !ANYTHING TO CLIMB? */
|
|
if (objact_()) {
|
|
return ret_val;
|
|
}
|
|
/* !OBJ HANDLE? */
|
|
i = 657;
|
|
if (f) {
|
|
i = 524;
|
|
}
|
|
/* !VARIETY OF JOKES. */
|
|
if (! f && (prsvec_1.prso == oindex_1.wall || prsvec_1.prso >=
|
|
oindex_1.wnort && prsvec_1.prso <= oindex_1.wnort + 3)) {
|
|
i = 656;
|
|
}
|
|
rspeak_(i);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
|
|
L87500:
|
|
prsvec_1.prsa = vindex_1.walkw;
|
|
/* !WALK */
|
|
prsvec_1.prso = i;
|
|
/* !IN SPECIFIED DIR. */
|
|
ret_val = walk_();
|
|
return ret_val;
|
|
|
|
} /* vappli_ */
|
|
|
|
/* CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
logical clockd_()
|
|
{
|
|
/* System generated locals */
|
|
integer i__1;
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
integer i;
|
|
|
|
ret_val = FALSE_;
|
|
/* !ASSUME NO ACTION. */
|
|
i__1 = cevent_1.clnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
if (! cevent_1.cflag[i - 1] || cevent_1.ctick[i - 1] == 0) {
|
|
goto L100;
|
|
}
|
|
if (cevent_1.ctick[i - 1] < 0) {
|
|
goto L50;
|
|
}
|
|
/* !PERMANENT ENTRY? */
|
|
--cevent_1.ctick[i - 1];
|
|
if (cevent_1.ctick[i - 1] != 0) {
|
|
goto L100;
|
|
}
|
|
/* !TIMER EXPIRED? */
|
|
L50:
|
|
ret_val = TRUE_;
|
|
cevapp_(cevent_1.cactio[i - 1]);
|
|
/* !DO ACTION. */
|
|
L100:
|
|
;
|
|
}
|
|
return ret_val;
|
|
|
|
} /* clockd_ */
|