mirror of https://github.com/sean-m/zork
941 lines
20 KiB
C
941 lines
20 KiB
C
/* RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1 */
|
|
|
|
/*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 rappl1_(ri)
|
|
integer ri;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1, i__2;
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
logical f;
|
|
integer i;
|
|
integer j;
|
|
|
|
ret_val = TRUE_;
|
|
/* !USUALLY IGNORED. */
|
|
if (ri == 0) {
|
|
return ret_val;
|
|
}
|
|
/* !RETURN IF NAUGHT. */
|
|
|
|
/* !SET TO FALSE FOR */
|
|
|
|
/* !NEW DESC NEEDED. */
|
|
switch (ri) {
|
|
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;
|
|
case 22: goto L22000;
|
|
case 23: goto L23000;
|
|
case 24: goto L24000;
|
|
case 25: goto L25000;
|
|
case 26: goto L26000;
|
|
case 27: goto L27000;
|
|
case 28: goto L28000;
|
|
case 29: goto L29000;
|
|
case 30: goto L30000;
|
|
case 31: goto L31000;
|
|
case 32: goto L32000;
|
|
case 33: goto L33000;
|
|
case 34: goto L34000;
|
|
case 35: goto L35000;
|
|
case 36: goto L36000;
|
|
case 37: goto L37000;
|
|
}
|
|
bug_(1, ri);
|
|
|
|
/* R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW */
|
|
|
|
L1000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 13;
|
|
/* !ASSUME CLOSED. */
|
|
if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
|
|
i = 12;
|
|
}
|
|
/* !IF OPEN, AJAR. */
|
|
rspsub_(11, i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R2-- KITCHEN. SAME VIEW FROM INSIDE. */
|
|
|
|
L2000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 13;
|
|
/* !ASSUME CLOSED. */
|
|
if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
|
|
i = 12;
|
|
}
|
|
/* !IF OPEN, AJAR. */
|
|
rspsub_(14, i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF */
|
|
/* DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED) */
|
|
|
|
L3000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L3500;
|
|
}
|
|
/* !LOOK? */
|
|
i = 15;
|
|
/* !ASSUME NO HOLE. */
|
|
if (findex_1.magicf) {
|
|
i = 16;
|
|
}
|
|
/* !IF MAGICF, CYCLOPS HOLE. */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
i = findex_1.orrug + 17;
|
|
/* !ASSUME INITIAL STATE. */
|
|
if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) {
|
|
i += 2;
|
|
}
|
|
/* !DOOR OPEN? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* NOT A LOOK WORD. REEVALUATE TROPHY CASE. */
|
|
|
|
L3500:
|
|
if (prsvec_1.prsa != vindex_1.takew && (prsvec_1.prsa != vindex_1.putw ||
|
|
prsvec_1.prsi != oindex_1.tcase)) {
|
|
return ret_val;
|
|
}
|
|
advs_1.ascore[play_1.winner - 1] = state_1.rwscor;
|
|
/* !SCORE TROPHY CASE. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !RETAIN RAW SCORE AS WELL. */
|
|
j = i;
|
|
/* !FIND OUT IF IN CASE. */
|
|
L3550:
|
|
j = objcts_1.ocan[j - 1];
|
|
/* !TRACE OWNERSHIP. */
|
|
if (j == 0) {
|
|
goto L3600;
|
|
}
|
|
if (j != oindex_1.tcase) {
|
|
goto L3550;
|
|
}
|
|
/* !DO ALL LEVELS. */
|
|
advs_1.ascore[play_1.winner - 1] += objcts_1.otval[i - 1];
|
|
L3600:
|
|
;
|
|
}
|
|
scrupd_(0);
|
|
/* !SEE IF ENDGAME TRIG. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 3 */
|
|
|
|
/* R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN. */
|
|
|
|
L4000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L4500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(21);
|
|
/* !DESCRIBE CELLAR. */
|
|
return ret_val;
|
|
|
|
L4500:
|
|
if (prsvec_1.prsa != vindex_1.walkiw) {
|
|
return ret_val;
|
|
}
|
|
/* !WALKIN? */
|
|
if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT +
|
|
TCHBT) != OPENBT) {
|
|
return ret_val;
|
|
}
|
|
objcts_1.oflag2[oindex_1.door - 1] = (objcts_1.oflag2[oindex_1.door - 1] |
|
|
TCHBT) & ~ OPENBT;
|
|
rspeak_(22);
|
|
/* !SLAM AND BOLT DOOR. */
|
|
return ret_val;
|
|
|
|
/* R5-- MAZE11. DESCRIBE STATE OF GRATING. */
|
|
|
|
L5000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(23);
|
|
/* !DESCRIBE. */
|
|
i = 24;
|
|
/* !ASSUME LOCKED. */
|
|
if (findex_1.grunlf) {
|
|
i = 26;
|
|
}
|
|
/* !UNLOCKED? */
|
|
if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
|
|
i = 25;
|
|
}
|
|
/* !OPEN? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE GRATE. */
|
|
return ret_val;
|
|
|
|
/* R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES. */
|
|
|
|
L6000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L6500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(27);
|
|
/* !DESCRIBE. */
|
|
if (findex_1.rvclr == 0) {
|
|
return ret_val;
|
|
}
|
|
/* !LEAVES MOVED? */
|
|
i = 28;
|
|
/* !YES, ASSUME GRATE CLOSED. */
|
|
if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
|
|
i = 29;
|
|
}
|
|
/* !OPEN? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE GRATE. */
|
|
return ret_val;
|
|
|
|
L6500:
|
|
if (findex_1.rvclr != 0 || qhere_(oindex_1.leave, rindex_1.clear) && (
|
|
prsvec_1.prsa != vindex_1.movew || prsvec_1.prso !=
|
|
oindex_1.leave)) {
|
|
return ret_val;
|
|
}
|
|
rspeak_(30);
|
|
/* !MOVE LEAVES, REVEAL GRATE. */
|
|
findex_1.rvclr = 1;
|
|
/* !INDICATE LEAVES MOVED. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 4 */
|
|
|
|
/* R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG. */
|
|
|
|
L7000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 31;
|
|
/* !ASSUME FULL. */
|
|
if (findex_1.lwtidf) {
|
|
i = 32;
|
|
}
|
|
/* !IF LOW TIDE, EMPTY. */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
rspeak_(33);
|
|
/* !DESCRIBE EXITS. */
|
|
return ret_val;
|
|
|
|
/* R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG. */
|
|
|
|
L8000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 34;
|
|
/* !ASSUME FULL. */
|
|
if (findex_1.lwtidf) {
|
|
i = 35;
|
|
}
|
|
/* !IF LOW TIDE, EMTPY. */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG. */
|
|
|
|
L9000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 36;
|
|
/* !YOU GET THE IDEA. */
|
|
if (findex_1.lwtidf) {
|
|
i = 37;
|
|
}
|
|
rspeak_(i);
|
|
rspeak_(38);
|
|
return ret_val;
|
|
|
|
/* R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS. */
|
|
|
|
L10000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(39);
|
|
/* !BASIC DESCRIPTION. */
|
|
i = 0;
|
|
/* !ASSUME NO CHANGES. */
|
|
if (findex_1.glacmf) {
|
|
i = 40;
|
|
}
|
|
/* !PARTIAL MELT? */
|
|
if (findex_1.glacrf) {
|
|
i = 41;
|
|
}
|
|
/* !COMPLETE MELT? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R11-- FOREST ROOM */
|
|
|
|
L11000:
|
|
if (prsvec_1.prsa == vindex_1.walkiw) {
|
|
cevent_1.cflag[cindex_1.cevfor - 1] = TRUE_;
|
|
}
|
|
/* !IF WALK IN, BIRDIE. */
|
|
return ret_val;
|
|
|
|
/* R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT. */
|
|
|
|
L12000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(42);
|
|
/* !DESCRIBE. */
|
|
if (findex_1.mirrmf) {
|
|
rspeak_(43);
|
|
}
|
|
/* !IF BROKEN, NASTY REMARK. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 5 */
|
|
|
|
/* R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY. */
|
|
|
|
L13000:
|
|
if (prsvec_1.prsa != vindex_1.walkiw) {
|
|
return ret_val;
|
|
}
|
|
/* !WALKIN? */
|
|
if (prob_(50, 50) || objcts_1.oadv[oindex_1.candl - 1] !=
|
|
play_1.winner || ! ((objcts_1.oflag1[oindex_1.candl - 1] &
|
|
ONBT) != 0)) {
|
|
return ret_val;
|
|
}
|
|
objcts_1.oflag1[oindex_1.candl - 1] &= ~ ONBT;
|
|
rspeak_(47);
|
|
/* !TELL OF WINDS. */
|
|
cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
|
|
/* !HALT CANDLE COUNTDOWN. */
|
|
return ret_val;
|
|
|
|
/* R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT. */
|
|
|
|
L14000:
|
|
j = objcts_1.odesc2[oindex_1.candl - 1];
|
|
/* !ASSUME CANDLE. */
|
|
if (objcts_1.oadv[oindex_1.candl - 1] == play_1.winner && (
|
|
objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
|
|
goto L14100;
|
|
}
|
|
j = objcts_1.odesc2[oindex_1.torch - 1];
|
|
/* !ASSUME TORCH. */
|
|
if (objcts_1.oadv[oindex_1.torch - 1] == play_1.winner && (
|
|
objcts_1.oflag1[oindex_1.torch - 1] & ONBT) != 0) {
|
|
goto L14100;
|
|
}
|
|
j = objcts_1.odesc2[oindex_1.match - 1];
|
|
if (objcts_1.oadv[oindex_1.match - 1] == play_1.winner && (
|
|
objcts_1.oflag1[oindex_1.match - 1] & ONBT) != 0) {
|
|
goto L14100;
|
|
}
|
|
return ret_val;
|
|
/* !SAFE */
|
|
|
|
L14100:
|
|
if (prsvec_1.prsa != vindex_1.trnonw) {
|
|
goto L14200;
|
|
}
|
|
/* !TURN ON? */
|
|
rspsub_(294, j);
|
|
/* !BOOM */
|
|
/* ! */
|
|
jigsup_(44);
|
|
return ret_val;
|
|
|
|
L14200:
|
|
if (prsvec_1.prsa != vindex_1.walkiw) {
|
|
return ret_val;
|
|
}
|
|
/* !WALKIN? */
|
|
rspsub_(295, j);
|
|
/* !BOOM */
|
|
/* ! */
|
|
jigsup_(44);
|
|
return ret_val;
|
|
|
|
/* R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT. */
|
|
|
|
L15000:
|
|
findex_1.empthf = TRUE_;
|
|
/* !ASSUME TRUE. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !SEE IF CARRYING. */
|
|
if (objcts_1.oadv[i - 1] == play_1.winner) {
|
|
findex_1.empthf = FALSE_;
|
|
}
|
|
/* L15100: */
|
|
}
|
|
|
|
if (play_1.here != rindex_1.bshaf || ! lit_(play_1.here)) {
|
|
return ret_val;
|
|
}
|
|
scrupd_(state_1.ltshft);
|
|
/* !SCORE LIGHT SHAFT. */
|
|
state_1.ltshft = 0;
|
|
/* !NEVER AGAIN. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 6 */
|
|
|
|
/* R16-- MACHINE ROOM. DESCRIBE MACHINE. */
|
|
|
|
L16000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
i = 46;
|
|
/* !ASSUME LID CLOSED. */
|
|
if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) {
|
|
i = 12;
|
|
}
|
|
/* !IF OPEN, OPEN. */
|
|
rspsub_(45, i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME... */
|
|
|
|
L17000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L17500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(48);
|
|
/* !DESCRIBE ROOM. */
|
|
if (objcts_1.oadv[oindex_1.garli - 1] == play_1.winner) {
|
|
rspeak_(49);
|
|
}
|
|
/* !BAT HOLDS NOSE. */
|
|
return ret_val;
|
|
|
|
L17500:
|
|
if (prsvec_1.prsa != vindex_1.walkiw || objcts_1.oadv[oindex_1.garli - 1]
|
|
== play_1.winner) {
|
|
return ret_val;
|
|
}
|
|
rspeak_(50);
|
|
/* !TIME TO FLY, JACK. */
|
|
f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner);
|
|
/* !SELECT RANDOM DEST. */
|
|
ret_val = FALSE_;
|
|
/* !INDICATE NEW DESC NEEDED. */
|
|
return ret_val;
|
|
|
|
/* R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING. */
|
|
|
|
L18000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L18500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(51);
|
|
/* !DESCRIBE. */
|
|
if (findex_1.domef) {
|
|
rspeak_(52);
|
|
}
|
|
/* !IF ROPE, DESCRIBE. */
|
|
return ret_val;
|
|
|
|
L18500:
|
|
if (prsvec_1.prsa == vindex_1.leapw) {
|
|
jigsup_(53);
|
|
}
|
|
/* !DID HE JUMP??? */
|
|
return ret_val;
|
|
|
|
/* R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING. */
|
|
|
|
L19000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(54);
|
|
/* !DESCRIBE. */
|
|
if (findex_1.domef) {
|
|
rspeak_(55);
|
|
}
|
|
/* !IF ROPE, DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM. */
|
|
|
|
L20000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L20500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(56);
|
|
/* !DESCRIBE. */
|
|
if (! findex_1.caroff) {
|
|
rspeak_(57);
|
|
}
|
|
/* !IF NOT FLIPPED, SPIN. */
|
|
return ret_val;
|
|
|
|
L20500:
|
|
if (prsvec_1.prsa == vindex_1.walkiw && findex_1.carozf) {
|
|
jigsup_(58);
|
|
}
|
|
/* !WALKED IN. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 7 */
|
|
|
|
/* R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS. */
|
|
|
|
L21000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L21500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(59);
|
|
/* !DESCRIBE. */
|
|
if (! findex_1.lldf) {
|
|
rspeak_(60);
|
|
}
|
|
/* !IF NOT VANISHED, GHOSTS. */
|
|
return ret_val;
|
|
|
|
L21500:
|
|
if (prsvec_1.prsa != vindex_1.exorcw) {
|
|
return ret_val;
|
|
}
|
|
/* !EXORCISE? */
|
|
if (objcts_1.oadv[oindex_1.bell - 1] == play_1.winner && objcts_1.oadv[
|
|
oindex_1.book - 1] == play_1.winner && objcts_1.oadv[
|
|
oindex_1.candl - 1] == play_1.winner && (objcts_1.oflag1[
|
|
oindex_1.candl - 1] & ONBT) != 0) {
|
|
goto L21600;
|
|
}
|
|
rspeak_(62);
|
|
/* !NOT EQUIPPED. */
|
|
return ret_val;
|
|
|
|
L21600:
|
|
if (qhere_(oindex_1.ghost, play_1.here)) {
|
|
goto L21700;
|
|
}
|
|
/* !GHOST HERE? */
|
|
jigsup_(61);
|
|
/* !NOPE, EXORCISE YOU. */
|
|
return ret_val;
|
|
|
|
L21700:
|
|
newsta_(oindex_1.ghost, 63, 0, 0, 0);
|
|
/* !VANISH GHOST. */
|
|
findex_1.lldf = TRUE_;
|
|
/* !OPEN GATE. */
|
|
return ret_val;
|
|
|
|
/* R22-- LLD2-ROOM. IS HIS HEAD ON A POLE? */
|
|
|
|
L22000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(64);
|
|
/* !DESCRIBE. */
|
|
if (findex_1.onpolf) {
|
|
rspeak_(65);
|
|
}
|
|
/* !ON POLE? */
|
|
return ret_val;
|
|
|
|
/* R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL. */
|
|
|
|
L23000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(66);
|
|
/* !DESCRIBE. */
|
|
i = 67;
|
|
if (findex_1.lwtidf) {
|
|
i = 68;
|
|
}
|
|
rspeak_(i);
|
|
/* !DESCRIBE RESERVOIR. */
|
|
rspeak_(69);
|
|
/* !DESCRIBE PANEL. */
|
|
if (findex_1.gatef) {
|
|
rspeak_(70);
|
|
}
|
|
/* !BUBBLE IS GLOWING. */
|
|
return ret_val;
|
|
|
|
/* R24-- TREE ROOM */
|
|
|
|
L24000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(660);
|
|
/* !DESCRIBE. */
|
|
i = 661;
|
|
/* !SET FLAG FOR BELOW. */
|
|
i__1 = objcts_1.olnt;
|
|
for (j = 1; j <= i__1; ++j) {
|
|
/* !DESCRIBE OBJ IN FORE3. */
|
|
if (! qhere_(j, rindex_1.fore3) || j == oindex_1.ftree) {
|
|
goto L24200;
|
|
}
|
|
rspeak_(i);
|
|
/* !SET STAGE, */
|
|
i = 0;
|
|
rspsub_(502, objcts_1.odesc2[j - 1]);
|
|
/* !DESCRIBE. */
|
|
L24200:
|
|
;
|
|
}
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 8 */
|
|
|
|
/* R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
|
|
*/
|
|
|
|
L25000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(606);
|
|
/* !DESCRIBE. */
|
|
i = 607;
|
|
/* !ASSUME BASIC STATE. */
|
|
if (findex_1.rvcyc > 0) {
|
|
i = 608;
|
|
}
|
|
/* !>0? HUNGRY. */
|
|
if (findex_1.rvcyc < 0) {
|
|
i = 609;
|
|
}
|
|
/* !<0? THIRSTY. */
|
|
if (findex_1.cyclof) {
|
|
i = 610;
|
|
}
|
|
/* !ASLEEP? */
|
|
if (findex_1.magicf) {
|
|
i = 611;
|
|
}
|
|
/* !GONE? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
if (! findex_1.cyclof && findex_1.rvcyc != 0) {
|
|
i__1 = abs(findex_1.rvcyc) + 193;
|
|
rspeak_(i__1);
|
|
}
|
|
return ret_val;
|
|
|
|
/* R26-- BANK BOX ROOM. */
|
|
|
|
L26000:
|
|
if (prsvec_1.prsa != vindex_1.walkiw) {
|
|
return ret_val;
|
|
}
|
|
/* !SURPRISE HIM. */
|
|
for (i = 1; i <= 8; i += 2) {
|
|
/* !SCOLRM DEPENDS ON */
|
|
if (screen_1.fromdr == screen_1.scoldr[i - 1]) {
|
|
screen_1.scolrm = screen_1.scoldr[i];
|
|
}
|
|
/* L26100: */
|
|
}
|
|
/* !ENTRY DIRECTION. */
|
|
return ret_val;
|
|
|
|
/* R27-- TREASURE ROOM. */
|
|
|
|
L27000:
|
|
if (prsvec_1.prsa != vindex_1.walkiw || ! hack_1.thfact) {
|
|
return ret_val;
|
|
}
|
|
if (objcts_1.oroom[oindex_1.thief - 1] != play_1.here) {
|
|
newsta_(oindex_1.thief, 82, play_1.here, 0, 0);
|
|
}
|
|
hack_1.thfpos = play_1.here;
|
|
/* !RESET SEARCH PATTERN. */
|
|
objcts_1.oflag2[oindex_1.thief - 1] |= FITEBT;
|
|
if (objcts_1.oroom[oindex_1.chali - 1] == play_1.here) {
|
|
objcts_1.oflag1[oindex_1.chali - 1] &= ~ TAKEBT;
|
|
}
|
|
|
|
/* VANISH EVERYTHING IN ROOM */
|
|
|
|
j = 0;
|
|
/* !ASSUME NOTHING TO VANISH. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
if (i == oindex_1.chali || i == oindex_1.thief || ! qhere_(i,
|
|
play_1.here)) {
|
|
goto L27200;
|
|
}
|
|
j = 83;
|
|
/* !FLAG BYEBYE. */
|
|
objcts_1.oflag1[i - 1] &= ~ VISIBT;
|
|
L27200:
|
|
;
|
|
}
|
|
rspeak_(j);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT. */
|
|
|
|
L28000:
|
|
findex_1.deflaf = objcts_1.oadv[oindex_1.rboat - 1] != play_1.winner;
|
|
/* !TRUE IF NOT CARRYING. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 9 */
|
|
|
|
/* R29-- RIVR4 ROOM. PLAY WITH BUOY. */
|
|
|
|
L29000:
|
|
if (! findex_1.buoyf || objcts_1.oadv[oindex_1.buoy - 1] != play_1.winner)
|
|
{
|
|
return ret_val;
|
|
}
|
|
rspeak_(84);
|
|
/* !GIVE HINT, */
|
|
findex_1.buoyf = FALSE_;
|
|
/* !THEN DISABLE. */
|
|
return ret_val;
|
|
|
|
/* R30-- OVERFALLS. DOOM. */
|
|
|
|
L30000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
jigsup_(85);
|
|
}
|
|
/* !OVER YOU GO. */
|
|
return ret_val;
|
|
|
|
/* R31-- BEACH ROOM. DIG A HOLE. */
|
|
|
|
L31000:
|
|
if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
|
|
return ret_val;
|
|
}
|
|
++findex_1.rvsnd;
|
|
/* !INCREMENT DIG STATE. */
|
|
switch (findex_1.rvsnd) {
|
|
case 1: goto L31100;
|
|
case 2: goto L31100;
|
|
case 3: goto L31100;
|
|
case 4: goto L31400;
|
|
case 5: goto L31500;
|
|
}
|
|
/* !PROCESS STATE. */
|
|
bug_(2, findex_1.rvsnd);
|
|
|
|
L31100:
|
|
i__1 = findex_1.rvsnd + 85;
|
|
rspeak_(i__1);
|
|
/* !1-3... DISCOURAGE HIM. */
|
|
return ret_val;
|
|
|
|
L31400:
|
|
i = 89;
|
|
/* !ASSUME DISCOVERY. */
|
|
if ((objcts_1.oflag1[oindex_1.statu - 1] & VISIBT) != 0) {
|
|
i = 88;
|
|
}
|
|
rspeak_(i);
|
|
objcts_1.oflag1[oindex_1.statu - 1] |= VISIBT;
|
|
return ret_val;
|
|
|
|
L31500:
|
|
findex_1.rvsnd = 0;
|
|
/* !5... SAND COLLAPSES */
|
|
jigsup_(90);
|
|
/* !AND SO DOES HE. */
|
|
return ret_val;
|
|
|
|
/* R32-- TCAVE ROOM. DIG A HOLE IN GUANO. */
|
|
|
|
L32000:
|
|
if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
|
|
return ret_val;
|
|
}
|
|
i = 91;
|
|
/* !ASSUME NO GUANO. */
|
|
if (! qhere_(oindex_1.guano, play_1.here)) {
|
|
goto L32100;
|
|
}
|
|
/* !IS IT HERE? */
|
|
/* Computing MIN */
|
|
i__1 = 4, i__2 = findex_1.rvgua + 1;
|
|
findex_1.rvgua = min(i__1,i__2);
|
|
/* !YES, SET NEW STATE. */
|
|
i = findex_1.rvgua + 91;
|
|
/* !GET NASTY REMARK. */
|
|
L32100:
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R33-- FALLS ROOM */
|
|
|
|
L33000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(96);
|
|
/* !DESCRIBE. */
|
|
i = 97;
|
|
/* !ASSUME NO RAINBOW. */
|
|
if (findex_1.rainbf) {
|
|
i = 98;
|
|
}
|
|
/* !GOT ONE? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
/* RAPPL1, PAGE 10 */
|
|
|
|
/* R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE. */
|
|
|
|
L34000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(100);
|
|
/* !DESCRIBE. */
|
|
i = 102;
|
|
/* !ASSUME SAFE ROOM OK. */
|
|
if ((rooms_1.rflag[rindex_1.msafe - 1] & RMUNG) != 0) {
|
|
i = 101;
|
|
}
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN. */
|
|
|
|
L35000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
return ret_val;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(104);
|
|
/* !DESCRIBE. */
|
|
i = 105;
|
|
/* !ASSUME OK. */
|
|
if (findex_1.safef) {
|
|
i = 106;
|
|
}
|
|
/* !BLOWN? */
|
|
rspeak_(i);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
/* R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM. */
|
|
|
|
L36000:
|
|
if (prsvec_1.prsa != vindex_1.lookw) {
|
|
goto L36500;
|
|
}
|
|
/* !LOOK? */
|
|
rspeak_(107);
|
|
/* !DESCRIBE. */
|
|
return ret_val;
|
|
|
|
L36500:
|
|
if (prsvec_1.prsa != vindex_1.walkiw || ! findex_1.caroff) {
|
|
return ret_val;
|
|
}
|
|
/* !WALKIN ON FLIPPED? */
|
|
if (findex_1.carozf) {
|
|
goto L36600;
|
|
}
|
|
/* !ZOOM? */
|
|
rspeak_(108);
|
|
/* !NO, SPIN HIS COMPASS. */
|
|
return ret_val;
|
|
|
|
L36600:
|
|
i = 58;
|
|
/* !SPIN HIS INSIDES. */
|
|
if (play_1.winner != aindex_1.player) {
|
|
i = 99;
|
|
}
|
|
/* !SPIN ROBOT. */
|
|
jigsup_(i);
|
|
/* !DEAD. */
|
|
return ret_val;
|
|
|
|
/* R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM. */
|
|
|
|
L37000:
|
|
if (findex_1.cagesf) {
|
|
f = moveto_(rindex_1.cager, play_1.winner);
|
|
}
|
|
/* !IF SOLVED, MOVE. */
|
|
return ret_val;
|
|
|
|
} /* rappl1_ */
|