zork/verbs.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_ */