zork/ballop.c

139 lines
3.0 KiB
C

/* BALLOP- BALLOON FUNCTION */
/*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 ballop_(arg)
integer arg;
{
/* System generated locals */
logical ret_val;
ret_val = TRUE_;
/* !ASSUME WINS. */
if (arg != 2) {
goto L200;
}
/* !READOUT? */
if (prsvec_1.prsa != vindex_1.lookw) {
goto L10;
}
/* !ONLY PROCESS LOOK. */
if (findex_1.binff != 0) {
goto L50;
}
/* !INFLATED? */
rspeak_(543);
/* !NO. */
goto L100;
L50:
rspsub_(544, objcts_1.odesc2[findex_1.binff - 1]);
/* !YES. */
L100:
if (findex_1.btief != 0) {
rspeak_(545);
}
/* !HOOKED? */
return ret_val;
L200:
if (arg != 1) {
goto L500;
}
/* !READIN? */
if (prsvec_1.prsa != vindex_1.walkw) {
goto L300;
}
/* !WALK? */
if (findxt_(prsvec_1.prso, play_1.here)) {
goto L250;
}
/* !VALID EXIT? */
rspeak_(546);
/* !NO, JOKE. */
return ret_val;
L250:
if (findex_1.btief == 0) {
goto L275;
}
/* !TIED UP? */
rspeak_(547);
/* !YES, JOKE. */
return ret_val;
L275:
if (curxt_1.xtype != xpars_1.xnorm) {
goto L10;
}
/* !NORMAL EXIT? */
if ((rooms_1.rflag[curxt_1.xroom1 - 1] & RMUNG) == 0) {
state_1.bloc = curxt_1.xroom1;
}
L10:
ret_val = FALSE_;
return ret_val;
L300:
if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != findex_1.binff) {
goto L350;
}
rspsub_(548, objcts_1.odesc2[findex_1.binff - 1]);
/* !RECEP CONT TOO HOT. */
return ret_val;
L350:
if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.recep ||
qempty_(oindex_1.recep)) {
goto L10;
}
rspeak_(549);
return ret_val;
L500:
if (prsvec_1.prsa != vindex_1.unboaw || (rooms_1.rflag[play_1.here - 1] &
RLAND) == 0) {
goto L600;
}
if (findex_1.binff != 0) {
cevent_1.ctick[cindex_1.cevbal - 1] = 3;
}
/* !HE GOT OUT, START BALLOON. */
goto L10;
L600:
if (prsvec_1.prsa != vindex_1.burnw || objcts_1.ocan[prsvec_1.prso - 1] !=
oindex_1.recep) {
goto L700;
}
rspsub_(550, objcts_1.odesc2[prsvec_1.prso - 1]);
/* !LIGHT FIRE IN RECEP. */
cevent_1.ctick[cindex_1.cevbrn - 1] = objcts_1.osize[prsvec_1.prso - 1] *
20;
objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT + FLAMBT +
LITEBT & ~ (TAKEBT + READBT);
if (findex_1.binff != 0) {
return ret_val;
}
if (! findex_1.blabf) {
newsta_(oindex_1.blabe, 0, 0, oindex_1.ballo, 0);
}
findex_1.blabf = TRUE_;
findex_1.binff = prsvec_1.prso;
cevent_1.ctick[cindex_1.cevbal - 1] = 3;
rspeak_(551);
return ret_val;
L700:
if (prsvec_1.prsa == vindex_1.unboaw && findex_1.binff != 0 && (
rooms_1.rflag[play_1.here - 1] & RLAND) != 0) {
cevent_1.ctick[cindex_1.cevbal - 1] = 3;
}
goto L10;
} /* ballop_ */