mirror of https://github.com/sean-m/zork
139 lines
3.0 KiB
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_ */
|