mirror of https://github.com/sean-m/zork
944 lines
20 KiB
C
944 lines
20 KiB
C
/* NOBJS- NEW OBJECTS PROCESSOR */
|
|
/* OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */
|
|
/* MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */
|
|
|
|
/*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"
|
|
|
|
static logical mirpan_ P((integer, logical));
|
|
|
|
logical nobjs_(ri, arg)
|
|
integer ri;
|
|
integer arg;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1, i__2;
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
logical f;
|
|
integer target;
|
|
integer i;
|
|
integer j;
|
|
integer av, wl;
|
|
integer nxt, odi2 = 0, odo2 = 0;
|
|
|
|
if (prsvec_1.prso != 0) {
|
|
odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
|
|
}
|
|
if (prsvec_1.prsi != 0) {
|
|
odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
|
|
}
|
|
av = advs_1.avehic[play_1.winner - 1];
|
|
ret_val = TRUE_;
|
|
|
|
switch (ri - 31) {
|
|
case 1: goto L1000;
|
|
case 2: goto L2000;
|
|
case 3: goto L3000;
|
|
case 4: goto L4000;
|
|
case 5: goto L5000;
|
|
case 6: goto L6000;
|
|
case 7: goto L7000;
|
|
case 8: goto L8000;
|
|
case 9: goto L9000;
|
|
case 10: goto L10000;
|
|
case 11: goto L11000;
|
|
case 12: goto L12000;
|
|
case 13: goto L13000;
|
|
case 14: goto L14000;
|
|
case 15: goto L15000;
|
|
case 16: goto L16000;
|
|
case 17: goto L17000;
|
|
case 18: goto L18000;
|
|
case 19: goto L19000;
|
|
case 20: goto L20000;
|
|
case 21: goto L21000;
|
|
}
|
|
bug_(6, ri);
|
|
|
|
/* RETURN HERE TO DECLARE FALSE RESULT */
|
|
|
|
L10:
|
|
ret_val = FALSE_;
|
|
return ret_val;
|
|
|
|
/* O32-- BILLS */
|
|
|
|
L1000:
|
|
if (prsvec_1.prsa != vindex_1.eatw) {
|
|
goto L1100;
|
|
}
|
|
/* !EAT? */
|
|
rspeak_(639);
|
|
/* !JOKE. */
|
|
return ret_val;
|
|
|
|
L1100:
|
|
if (prsvec_1.prsa == vindex_1.burnw) {
|
|
rspeak_(640);
|
|
}
|
|
/* !BURN? JOKE. */
|
|
goto L10;
|
|
/* !LET IT BE HANDLED. */
|
|
/* NOBJS, PAGE 3 */
|
|
|
|
/* O33-- SCREEN OF LIGHT */
|
|
|
|
L2000:
|
|
target = oindex_1.scol;
|
|
/* !TARGET IS SCOL. */
|
|
L2100:
|
|
if (prsvec_1.prso != target) {
|
|
goto L2400;
|
|
}
|
|
/* !PRSO EQ TARGET? */
|
|
if (prsvec_1.prsa != vindex_1.pushw && prsvec_1.prsa != vindex_1.movew &&
|
|
prsvec_1.prsa != vindex_1.takew && prsvec_1.prsa != vindex_1.rubw)
|
|
{
|
|
goto L2200;
|
|
}
|
|
rspeak_(673);
|
|
/* !HAND PASSES THRU. */
|
|
return ret_val;
|
|
|
|
L2200:
|
|
if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.attacw &&
|
|
prsvec_1.prsa != vindex_1.mungw) {
|
|
goto L2400;
|
|
}
|
|
rspsub_(674, odi2);
|
|
/* !PASSES THRU. */
|
|
return ret_val;
|
|
|
|
L2400:
|
|
if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prsi != target) {
|
|
goto L10;
|
|
}
|
|
if (play_1.here == rindex_1.bkbox) {
|
|
goto L2600;
|
|
}
|
|
/* !THRU SCOL? */
|
|
newsta_(prsvec_1.prso, 0, rindex_1.bkbox, 0, 0);
|
|
/* !NO, THRU WALL. */
|
|
rspsub_(675, odo2);
|
|
/* !ENDS UP IN BOX ROOM. */
|
|
cevent_1.ctick[cindex_1.cevscl - 1] = 0;
|
|
/* !CANCEL ALARM. */
|
|
screen_1.scolrm = 0;
|
|
/* !RESET SCOL ROOM. */
|
|
return ret_val;
|
|
|
|
L2600:
|
|
if (screen_1.scolrm == 0) {
|
|
goto L2900;
|
|
}
|
|
/* !TRIED TO GO THRU? */
|
|
newsta_(prsvec_1.prso, 0, screen_1.scolrm, 0, 0);
|
|
/* !SUCCESS. */
|
|
rspsub_(676, odo2);
|
|
/* !ENDS UP SOMEWHERE. */
|
|
cevent_1.ctick[cindex_1.cevscl - 1] = 0;
|
|
/* !CANCEL ALARM. */
|
|
screen_1.scolrm = 0;
|
|
/* !RESET SCOL ROOM. */
|
|
return ret_val;
|
|
|
|
L2900:
|
|
rspeak_(213);
|
|
/* !CANT DO IT. */
|
|
return ret_val;
|
|
/* NOBJS, PAGE 4 */
|
|
|
|
/* O34-- GNOME OF ZURICH */
|
|
|
|
L3000:
|
|
if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) {
|
|
|
|
goto L3200;
|
|
}
|
|
if (objcts_1.otval[prsvec_1.prso - 1] != 0) {
|
|
goto L3100;
|
|
}
|
|
/* !THROW A TREASURE? */
|
|
newsta_(prsvec_1.prso, 641, 0, 0, 0);
|
|
/* !NO, GO POP. */
|
|
return ret_val;
|
|
|
|
L3100:
|
|
newsta_(prsvec_1.prso, 0, 0, 0, 0);
|
|
/* !YES, BYE BYE TREASURE. */
|
|
rspsub_(642, odo2);
|
|
newsta_(oindex_1.zgnom, 0, 0, 0, 0);
|
|
/* !BYE BYE GNOME. */
|
|
cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
|
|
/* !CANCEL EXIT. */
|
|
f = moveto_(rindex_1.bkent, play_1.winner);
|
|
/* !NOW IN BANK ENTRANCE. */
|
|
return ret_val;
|
|
|
|
L3200:
|
|
if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw &&
|
|
prsvec_1.prsa != vindex_1.mungw) {
|
|
goto L3300;
|
|
}
|
|
newsta_(oindex_1.zgnom, 643, 0, 0, 0);
|
|
/* !VANISH GNOME. */
|
|
cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
|
|
/* !CANCEL EXIT. */
|
|
return ret_val;
|
|
|
|
L3300:
|
|
rspeak_(644);
|
|
/* !GNOME IS IMPATIENT. */
|
|
return ret_val;
|
|
|
|
/* O35-- EGG */
|
|
|
|
L4000:
|
|
if (prsvec_1.prsa != vindex_1.openw || prsvec_1.prso != oindex_1.egg) {
|
|
goto L4500;
|
|
}
|
|
if (! ((objcts_1.oflag2[oindex_1.egg - 1] & OPENBT) != 0)) {
|
|
goto L4100;
|
|
}
|
|
/* !OPEN ALREADY? */
|
|
rspeak_(649);
|
|
/* !YES. */
|
|
return ret_val;
|
|
|
|
L4100:
|
|
if (prsvec_1.prsi != 0) {
|
|
goto L4200;
|
|
}
|
|
/* !WITH SOMETHING? */
|
|
rspeak_(650);
|
|
/* !NO, CANT. */
|
|
return ret_val;
|
|
|
|
L4200:
|
|
if (prsvec_1.prsi != oindex_1.hands) {
|
|
goto L4300;
|
|
}
|
|
/* !WITH HANDS? */
|
|
rspeak_(651);
|
|
/* !NOT RECOMMENDED. */
|
|
return ret_val;
|
|
|
|
L4300:
|
|
i = 652;
|
|
/* !MUNG MESSAGE. */
|
|
if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0 || (
|
|
objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) != 0) {
|
|
goto L4600;
|
|
}
|
|
i = 653;
|
|
/* !NOVELTY 1. */
|
|
if ((objcts_1.oflag2[prsvec_1.prso - 1] & FITEBT) != 0) {
|
|
i = 654;
|
|
}
|
|
objcts_1.oflag2[prsvec_1.prso - 1] |= FITEBT;
|
|
rspsub_(i, odi2);
|
|
return ret_val;
|
|
|
|
L4500:
|
|
if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.mungw) {
|
|
goto L4800;
|
|
}
|
|
i = 655;
|
|
/* !YOU BLEW IT. */
|
|
L4600:
|
|
newsta_(oindex_1.begg, i, objcts_1.oroom[oindex_1.egg - 1],
|
|
objcts_1.ocan[oindex_1.egg - 1], objcts_1.oadv[oindex_1.egg - 1])
|
|
;
|
|
newsta_(oindex_1.egg, 0, 0, 0, 0);
|
|
/* !VANISH EGG. */
|
|
objcts_1.otval[oindex_1.begg - 1] = 2;
|
|
/* !BAD EGG HAS VALUE. */
|
|
if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
|
|
goto L4700;
|
|
}
|
|
/* !WAS CANARY INSIDE? */
|
|
rspeak_(objcts_1.odesco[oindex_1.bcana - 1]);
|
|
/* !YES, DESCRIBE RESULT. */
|
|
objcts_1.otval[oindex_1.bcana - 1] = 1;
|
|
return ret_val;
|
|
|
|
L4700:
|
|
newsta_(oindex_1.bcana, 0, 0, 0, 0);
|
|
/* !NO, VANISH IT. */
|
|
return ret_val;
|
|
|
|
L4800:
|
|
if (prsvec_1.prsa != vindex_1.dropw || play_1.here != rindex_1.mtree) {
|
|
goto L10;
|
|
}
|
|
newsta_(oindex_1.begg, 658, rindex_1.fore3, 0, 0);
|
|
/* !DROPPED EGG. */
|
|
newsta_(oindex_1.egg, 0, 0, 0, 0);
|
|
objcts_1.otval[oindex_1.begg - 1] = 2;
|
|
if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
|
|
goto L4700;
|
|
}
|
|
objcts_1.otval[oindex_1.bcana - 1] = 1;
|
|
/* !BAD CANARY. */
|
|
return ret_val;
|
|
/* NOBJS, PAGE 5 */
|
|
|
|
/* O36-- CANARIES, GOOD AND BAD */
|
|
|
|
L5000:
|
|
if (prsvec_1.prsa != vindex_1.windw) {
|
|
goto L10;
|
|
}
|
|
/* !WIND EM UP? */
|
|
if (prsvec_1.prso == oindex_1.canar) {
|
|
goto L5100;
|
|
}
|
|
/* !RIGHT ONE? */
|
|
rspeak_(645);
|
|
/* !NO, BAD NEWS. */
|
|
return ret_val;
|
|
|
|
L5100:
|
|
if (! findex_1.singsf && (play_1.here == rindex_1.mtree || play_1.here >=
|
|
rindex_1.fore1 && play_1.here < rindex_1.clear)) {
|
|
goto L5200;
|
|
}
|
|
rspeak_(646);
|
|
/* !NO, MEDIOCRE NEWS. */
|
|
return ret_val;
|
|
|
|
L5200:
|
|
findex_1.singsf = TRUE_;
|
|
/* !SANG SONG. */
|
|
i = play_1.here;
|
|
if (i == rindex_1.mtree) {
|
|
i = rindex_1.fore3;
|
|
}
|
|
/* !PLACE BAUBLE. */
|
|
newsta_(oindex_1.baubl, 647, i, 0, 0);
|
|
return ret_val;
|
|
|
|
/* O37-- WHITE CLIFFS */
|
|
|
|
L6000:
|
|
if (prsvec_1.prsa != vindex_1.clmbw && prsvec_1.prsa != vindex_1.clmbuw &&
|
|
prsvec_1.prsa != vindex_1.clmbdw) {
|
|
goto L10;
|
|
}
|
|
rspeak_(648);
|
|
/* !OH YEAH? */
|
|
return ret_val;
|
|
|
|
/* O38-- WALL */
|
|
|
|
L7000:
|
|
if ((i__1 = play_1.here - findex_1.mloc, abs(i__1)) != 1 || mrhere_(
|
|
play_1.here) != 0 || prsvec_1.prsa != vindex_1.pushw) {
|
|
goto L7100;
|
|
}
|
|
rspeak_(860);
|
|
/* !PUSHED MIRROR WALL. */
|
|
return ret_val;
|
|
|
|
L7100:
|
|
if ((rooms_1.rflag[play_1.here - 1] & RNWALL) == 0) {
|
|
goto L10;
|
|
}
|
|
rspeak_(662);
|
|
/* !NO WALL. */
|
|
return ret_val;
|
|
/* NOBJS, PAGE 6 */
|
|
|
|
/* O39-- SONG BIRD GLOBAL */
|
|
|
|
L8000:
|
|
if (prsvec_1.prsa != vindex_1.findw) {
|
|
goto L8100;
|
|
}
|
|
/* !FIND? */
|
|
rspeak_(666);
|
|
return ret_val;
|
|
|
|
L8100:
|
|
if (prsvec_1.prsa != vindex_1.examiw) {
|
|
goto L10;
|
|
}
|
|
/* !EXAMINE? */
|
|
rspeak_(667);
|
|
return ret_val;
|
|
|
|
/* O40-- PUZZLE/SCOL WALLS */
|
|
|
|
L9000:
|
|
if (play_1.here != rindex_1.cpuzz) {
|
|
goto L9500;
|
|
}
|
|
/* !PUZZLE WALLS? */
|
|
if (prsvec_1.prsa != vindex_1.pushw) {
|
|
goto L10;
|
|
}
|
|
/* !PUSH? */
|
|
for (i = 1; i <= 8; i += 2) {
|
|
/* !LOCATE WALL. */
|
|
if (prsvec_1.prso == puzzle_1.cpwl[i - 1]) {
|
|
goto L9200;
|
|
}
|
|
/* L9100: */
|
|
}
|
|
bug_(80, prsvec_1.prso);
|
|
/* !WHAT? */
|
|
|
|
L9200:
|
|
j = puzzle_1.cpwl[i];
|
|
/* !GET DIRECTIONAL OFFSET. */
|
|
nxt = findex_1.cphere + j;
|
|
/* !GET NEXT STATE. */
|
|
wl = puzzle_1.cpvec[nxt - 1];
|
|
/* !GET C(NEXT STATE). */
|
|
switch (wl + 4) {
|
|
case 1: goto L9300;
|
|
case 2: goto L9300;
|
|
case 3: goto L9300;
|
|
case 4: goto L9250;
|
|
case 5: goto L9350;
|
|
}
|
|
/* !PROCESS. */
|
|
|
|
L9250:
|
|
rspeak_(876);
|
|
/* !CLEAR CORRIDOR. */
|
|
return ret_val;
|
|
|
|
L9300:
|
|
if (puzzle_1.cpvec[nxt + j - 1] == 0) {
|
|
goto L9400;
|
|
}
|
|
/* !MOVABLE, ROOM TO MOVE? */
|
|
L9350:
|
|
rspeak_(877);
|
|
/* !IMMOVABLE, NO ROOM. */
|
|
return ret_val;
|
|
|
|
L9400:
|
|
i = 878;
|
|
/* !ASSUME FIRST PUSH. */
|
|
if (findex_1.cpushf) {
|
|
i = 879;
|
|
}
|
|
/* !NOT? */
|
|
findex_1.cpushf = TRUE_;
|
|
puzzle_1.cpvec[nxt + j - 1] = wl;
|
|
/* !MOVE WALL. */
|
|
puzzle_1.cpvec[nxt - 1] = 0;
|
|
/* !VACATE NEXT STATE. */
|
|
cpgoto_(nxt);
|
|
/* !ONWARD. */
|
|
cpinfo_(i, nxt);
|
|
/* !DESCRIBE. */
|
|
princr_(1, play_1.here);
|
|
/* !PRINT ROOMS CONTENTS. */
|
|
rooms_1.rflag[play_1.here - 1] |= RSEEN;
|
|
return ret_val;
|
|
|
|
L9500:
|
|
if (play_1.here != screen_1.scolac) {
|
|
goto L9700;
|
|
}
|
|
/* !IN SCOL ACTIVE ROOM? */
|
|
for (i = 1; i <= 12; i += 3) {
|
|
target = screen_1.scolwl[i];
|
|
/* !ASSUME TARGET. */
|
|
if (screen_1.scolwl[i - 1] == play_1.here) {
|
|
goto L2100;
|
|
}
|
|
/* !TREAT IF FOUND. */
|
|
/* L9600: */
|
|
}
|
|
|
|
L9700:
|
|
if (play_1.here != rindex_1.bkbox) {
|
|
goto L10;
|
|
}
|
|
/* !IN BOX ROOM? */
|
|
target = oindex_1.wnort;
|
|
goto L2100;
|
|
/* NOBJS, PAGE 7 */
|
|
|
|
/* O41-- SHORT POLE */
|
|
|
|
L10000:
|
|
if (prsvec_1.prsa != vindex_1.raisew) {
|
|
goto L10100;
|
|
}
|
|
/* !LIFT? */
|
|
i = 749;
|
|
/* !ASSUME UP. */
|
|
if (findex_1.poleuf == 2) {
|
|
i = 750;
|
|
}
|
|
/* !ALREADY UP? */
|
|
rspeak_(i);
|
|
findex_1.poleuf = 2;
|
|
/* !POLE IS RAISED. */
|
|
return ret_val;
|
|
|
|
L10100:
|
|
if (prsvec_1.prsa != vindex_1.lowerw && prsvec_1.prsa != vindex_1.pushw) {
|
|
|
|
goto L10;
|
|
}
|
|
if (findex_1.poleuf != 0) {
|
|
goto L10200;
|
|
}
|
|
/* !ALREADY LOWERED? */
|
|
rspeak_(751);
|
|
/* !CANT DO IT. */
|
|
return ret_val;
|
|
|
|
L10200:
|
|
if (findex_1.mdir % 180 != 0) {
|
|
goto L10300;
|
|
}
|
|
/* !MIRROR N-S? */
|
|
findex_1.poleuf = 0;
|
|
/* !YES, LOWER INTO */
|
|
rspeak_(752);
|
|
/* !CHANNEL. */
|
|
return ret_val;
|
|
|
|
L10300:
|
|
if (findex_1.mdir != 270 || findex_1.mloc != rindex_1.mrb) {
|
|
goto L10400;
|
|
}
|
|
findex_1.poleuf = 0;
|
|
/* !LOWER INTO HOLE. */
|
|
rspeak_(753);
|
|
return ret_val;
|
|
|
|
L10400:
|
|
i__1 = findex_1.poleuf + 753;
|
|
rspeak_(i__1);
|
|
/* !POLEUF = 1 OR 2. */
|
|
findex_1.poleuf = 1;
|
|
/* !NOW ON FLOOR. */
|
|
return ret_val;
|
|
|
|
/* O42-- MIRROR SWITCH */
|
|
|
|
L11000:
|
|
if (prsvec_1.prsa != vindex_1.pushw) {
|
|
goto L10;
|
|
}
|
|
/* !PUSH? */
|
|
if (findex_1.mrpshf) {
|
|
goto L11300;
|
|
}
|
|
/* !ALREADY PUSHED? */
|
|
rspeak_(756);
|
|
/* !BUTTON GOES IN. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !BLOCKED? */
|
|
if (qhere_(i, rindex_1.mreye) && i != oindex_1.rbeam) {
|
|
goto L11200;
|
|
}
|
|
/* L11100: */
|
|
}
|
|
rspeak_(757);
|
|
/* !NOTHING IN BEAM. */
|
|
return ret_val;
|
|
|
|
L11200:
|
|
cevent_1.cflag[cindex_1.cevmrs - 1] = TRUE_;
|
|
/* !MIRROR OPENS. */
|
|
cevent_1.ctick[cindex_1.cevmrs - 1] = 7;
|
|
findex_1.mrpshf = TRUE_;
|
|
findex_1.mropnf = TRUE_;
|
|
return ret_val;
|
|
|
|
L11300:
|
|
rspeak_(758);
|
|
/* !MIRROR ALREADYOPEN. */
|
|
return ret_val;
|
|
/* NOBJS, PAGE 8 */
|
|
|
|
/* O43-- BEAM FUNCTION */
|
|
|
|
L12000:
|
|
if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != oindex_1.rbeam) {
|
|
goto L12100;
|
|
}
|
|
rspeak_(759);
|
|
/* !TAKE BEAM, JOKE. */
|
|
return ret_val;
|
|
|
|
L12100:
|
|
i = prsvec_1.prso;
|
|
/* !ASSUME BLK WITH DIROBJ. */
|
|
if (prsvec_1.prsa == vindex_1.putw && prsvec_1.prsi == oindex_1.rbeam) {
|
|
goto L12200;
|
|
}
|
|
if (prsvec_1.prsa != vindex_1.mungw || prsvec_1.prso != oindex_1.rbeam ||
|
|
prsvec_1.prsi == 0) {
|
|
goto L10;
|
|
}
|
|
i = prsvec_1.prsi;
|
|
L12200:
|
|
if (objcts_1.oadv[i - 1] != play_1.winner) {
|
|
goto L12300;
|
|
}
|
|
/* !CARRYING? */
|
|
newsta_(i, 0, play_1.here, 0, 0);
|
|
/* !DROP OBJ. */
|
|
rspsub_(760, objcts_1.odesc2[i - 1]);
|
|
return ret_val;
|
|
|
|
L12300:
|
|
j = 761;
|
|
/* !ASSUME NOT IN ROOM. */
|
|
if (qhere_(j, play_1.here)) {
|
|
i = 762;
|
|
}
|
|
/* !IN ROOM? */
|
|
rspsub_(j, objcts_1.odesc2[i - 1]);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* O44-- BRONZE DOOR */
|
|
|
|
L13000:
|
|
if (play_1.here == rindex_1.ncell || findex_1.lcell == 4 && (play_1.here
|
|
== rindex_1.cell || play_1.here == rindex_1.scorr)) {
|
|
goto L13100;
|
|
}
|
|
rspeak_(763);
|
|
/* !DOOR NOT THERE. */
|
|
return ret_val;
|
|
|
|
L13100:
|
|
if (! opncls_(oindex_1.odoor, 764, 765)) {
|
|
goto L10;
|
|
}
|
|
/* !OPEN/CLOSE? */
|
|
if (play_1.here == rindex_1.ncell && (objcts_1.oflag2[oindex_1.odoor - 1]
|
|
& OPENBT) != 0) {
|
|
rspeak_(766);
|
|
}
|
|
return ret_val;
|
|
|
|
/* O45-- QUIZ DOOR */
|
|
|
|
L14000:
|
|
if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
|
|
|
|
goto L14100;
|
|
}
|
|
rspeak_(767);
|
|
/* !DOOR WONT MOVE. */
|
|
return ret_val;
|
|
|
|
L14100:
|
|
if (prsvec_1.prsa != vindex_1.knockw) {
|
|
goto L10;
|
|
}
|
|
/* !KNOCK? */
|
|
if (findex_1.inqstf) {
|
|
goto L14200;
|
|
}
|
|
/* !TRIED IT ALREADY? */
|
|
findex_1.inqstf = TRUE_;
|
|
/* !START INQUISITION. */
|
|
cevent_1.cflag[cindex_1.cevinq - 1] = TRUE_;
|
|
cevent_1.ctick[cindex_1.cevinq - 1] = 2;
|
|
findex_1.quesno = rnd_(8);
|
|
/* !SELECT QUESTION. */
|
|
findex_1.nqatt = 0;
|
|
findex_1.corrct = 0;
|
|
rspeak_(768);
|
|
/* !ANNOUNCE RULES. */
|
|
rspeak_(769);
|
|
i__1 = findex_1.quesno + 770;
|
|
rspeak_(i__1);
|
|
/* !ASK QUESTION. */
|
|
return ret_val;
|
|
|
|
L14200:
|
|
rspeak_(798);
|
|
/* !NO REPLY. */
|
|
return ret_val;
|
|
|
|
/* O46-- LOCKED DOOR */
|
|
|
|
L15000:
|
|
if (prsvec_1.prsa != vindex_1.openw) {
|
|
goto L10;
|
|
}
|
|
/* !OPEN? */
|
|
rspeak_(778);
|
|
/* !CANT. */
|
|
return ret_val;
|
|
|
|
/* O47-- CELL DOOR */
|
|
|
|
L16000:
|
|
ret_val = opncls_(oindex_1.cdoor, 779, 780);
|
|
/* !OPEN/CLOSE? */
|
|
return ret_val;
|
|
/* NOBJS, PAGE 9 */
|
|
|
|
/* O48-- DIALBUTTON */
|
|
|
|
L17000:
|
|
if (prsvec_1.prsa != vindex_1.pushw) {
|
|
goto L10;
|
|
}
|
|
/* !PUSH? */
|
|
rspeak_(809);
|
|
/* !CLICK. */
|
|
if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
|
|
rspeak_(810);
|
|
}
|
|
/* !CLOSE CELL DOOR. */
|
|
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !RELOCATE OLD TO HYPER. */
|
|
if (objcts_1.oroom[i - 1] == rindex_1.cell && (objcts_1.oflag1[i - 1]
|
|
& DOORBT) == 0) {
|
|
i__2 = findex_1.lcell * hyper_1.hfactr;
|
|
newsta_(i, 0, i__2, 0, 0);
|
|
}
|
|
if (objcts_1.oroom[i - 1] == findex_1.pnumb * hyper_1.hfactr) {
|
|
newsta_(i, 0, rindex_1.cell, 0, 0);
|
|
}
|
|
/* L17100: */
|
|
}
|
|
|
|
objcts_1.oflag2[oindex_1.odoor - 1] &= ~ OPENBT;
|
|
objcts_1.oflag2[oindex_1.cdoor - 1] &= ~ OPENBT;
|
|
objcts_1.oflag1[oindex_1.odoor - 1] &= ~ VISIBT;
|
|
if (findex_1.pnumb == 4) {
|
|
objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
|
|
}
|
|
|
|
if (advs_1.aroom[aindex_1.player - 1] != rindex_1.cell) {
|
|
goto L17400;
|
|
}
|
|
/* !PLAYER IN CELL? */
|
|
if (findex_1.lcell != 4) {
|
|
goto L17200;
|
|
}
|
|
/* !IN RIGHT CELL? */
|
|
objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
|
|
f = moveto_(rindex_1.ncell, aindex_1.player);
|
|
/* !YES, MOVETO NCELL. */
|
|
goto L17400;
|
|
L17200:
|
|
f = moveto_(rindex_1.pcell, aindex_1.player);
|
|
/* !NO, MOVETO PCELL. */
|
|
|
|
L17400:
|
|
findex_1.lcell = findex_1.pnumb;
|
|
return ret_val;
|
|
/* NOBJS, PAGE 10 */
|
|
|
|
/* O49-- DIAL INDICATOR */
|
|
|
|
L18000:
|
|
if (prsvec_1.prsa != vindex_1.spinw) {
|
|
goto L18100;
|
|
}
|
|
/* !SPIN? */
|
|
findex_1.pnumb = rnd_(8) + 1;
|
|
/* !WHEE */
|
|
/* ! */
|
|
i__1 = findex_1.pnumb + 712;
|
|
rspsub_(797, i__1);
|
|
return ret_val;
|
|
|
|
L18100:
|
|
if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.putw &&
|
|
prsvec_1.prsa != vindex_1.trntow) {
|
|
goto L10;
|
|
}
|
|
if (prsvec_1.prsi != 0) {
|
|
goto L18200;
|
|
}
|
|
/* !TURN DIAL TO X? */
|
|
rspeak_(806);
|
|
/* !MUST SPECIFY. */
|
|
return ret_val;
|
|
|
|
L18200:
|
|
if (prsvec_1.prsi >= oindex_1.num1 && prsvec_1.prsi <= oindex_1.num8) {
|
|
goto L18300;
|
|
}
|
|
rspeak_(807);
|
|
/* !MUST BE DIGIT. */
|
|
return ret_val;
|
|
|
|
L18300:
|
|
findex_1.pnumb = prsvec_1.prsi - oindex_1.num1 + 1;
|
|
/* !SET UP NEW. */
|
|
i__1 = findex_1.pnumb + 712;
|
|
rspsub_(808, i__1);
|
|
return ret_val;
|
|
|
|
/* O50-- GLOBAL MIRROR */
|
|
|
|
L19000:
|
|
ret_val = mirpan_(832, 0);
|
|
return ret_val;
|
|
|
|
/* O51-- GLOBAL PANEL */
|
|
|
|
L20000:
|
|
if (play_1.here != rindex_1.fdoor) {
|
|
goto L20100;
|
|
}
|
|
/* !AT FRONT DOOR? */
|
|
if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
|
|
|
|
goto L10;
|
|
}
|
|
rspeak_(843);
|
|
/* !PANEL IN DOOR, NOGO. */
|
|
return ret_val;
|
|
|
|
L20100:
|
|
ret_val = mirpan_(838, 1);
|
|
return ret_val;
|
|
|
|
/* O52-- PUZZLE ROOM SLIT */
|
|
|
|
L21000:
|
|
if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.cslit) {
|
|
goto L10;
|
|
}
|
|
if (prsvec_1.prso != oindex_1.gcard) {
|
|
goto L21100;
|
|
}
|
|
/* !PUT CARD IN SLIT? */
|
|
newsta_(prsvec_1.prso, 863, 0, 0, 0);
|
|
/* !KILL CARD. */
|
|
findex_1.cpoutf = TRUE_;
|
|
/* !OPEN DOOR. */
|
|
objcts_1.oflag1[oindex_1.stldr - 1] &= ~ VISIBT;
|
|
return ret_val;
|
|
|
|
L21100:
|
|
if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0 && (
|
|
objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
|
|
goto L21200;
|
|
}
|
|
i__1 = rnd_(5) + 552;
|
|
rspeak_(i__1);
|
|
/* !JOKE FOR VILL, VICT. */
|
|
return ret_val;
|
|
|
|
L21200:
|
|
newsta_(prsvec_1.prso, 0, 0, 0, 0);
|
|
/* !KILL OBJECT. */
|
|
rspsub_(864, odo2);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
} /* nobjs_ */
|
|
|
|
/* MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
static logical mirpan_(st, pnf)
|
|
integer st;
|
|
logical pnf;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1;
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
integer num;
|
|
integer mrbf;
|
|
|
|
ret_val = TRUE_;
|
|
num = mrhere_(play_1.here);
|
|
/* !GET MIRROR NUM. */
|
|
if (num != 0) {
|
|
goto L100;
|
|
}
|
|
/* !ANY HERE? */
|
|
rspeak_(st);
|
|
/* !NO, LOSE. */
|
|
return ret_val;
|
|
|
|
L100:
|
|
mrbf = 0;
|
|
/* !ASSUME MIRROR OK. */
|
|
if (num == 1 && ! findex_1.mr1f || num == 2 && ! findex_1.mr2f) {
|
|
mrbf = 1;
|
|
}
|
|
if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.openw) {
|
|
goto L200;
|
|
}
|
|
i__1 = st + 1;
|
|
rspeak_(i__1);
|
|
/* !CANT OPEN OR MOVE. */
|
|
return ret_val;
|
|
|
|
L200:
|
|
if (pnf || prsvec_1.prsa != vindex_1.lookiw && prsvec_1.prsa !=
|
|
vindex_1.examiw && prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L300;
|
|
}
|
|
i__1 = mrbf + 844;
|
|
rspeak_(i__1);
|
|
/* !LOOK IN MIRROR. */
|
|
return ret_val;
|
|
|
|
L300:
|
|
if (prsvec_1.prsa != vindex_1.mungw) {
|
|
goto L400;
|
|
}
|
|
/* !BREAK? */
|
|
i__1 = st + 2 + mrbf;
|
|
rspeak_(i__1);
|
|
/* !DO IT. */
|
|
if (num == 1 && ! (pnf)) {
|
|
findex_1.mr1f = FALSE_;
|
|
}
|
|
if (num == 2 && ! (pnf)) {
|
|
findex_1.mr2f = FALSE_;
|
|
}
|
|
return ret_val;
|
|
|
|
L400:
|
|
if (pnf || mrbf == 0) {
|
|
goto L500;
|
|
}
|
|
/* !BROKEN MIRROR? */
|
|
rspeak_(846);
|
|
return ret_val;
|
|
|
|
L500:
|
|
if (prsvec_1.prsa != vindex_1.pushw) {
|
|
goto L600;
|
|
}
|
|
/* !PUSH? */
|
|
i__1 = st + 3 + num;
|
|
rspeak_(i__1);
|
|
return ret_val;
|
|
|
|
L600:
|
|
ret_val = FALSE_;
|
|
/* !CANT HANDLE IT. */
|
|
return ret_val;
|
|
|
|
} /* mirpan_ */
|