1 /* BALLOP-	BALLOON FUNCTION */
2 
3 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
4 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
5 /* WRITTEN BY R. M. SUPNIK */
6 
7 #include "funcs.h"
8 #include "vars.h"
9 
ballop_(arg)10 logical ballop_(arg)
11 integer arg;
12 {
13     /* System generated locals */
14     logical ret_val;
15 
16     ret_val = TRUE_;
17 /* 						!ASSUME WINS. */
18     if (arg != 2) {
19 	goto L200;
20     }
21 /* 						!READOUT? */
22     if (prsvec_1.prsa != vindex_1.lookw) {
23 	goto L10;
24     }
25 /* 						!ONLY PROCESS LOOK. */
26     if (findex_1.binff != 0) {
27 	goto L50;
28     }
29 /* 						!INFLATED? */
30     rspeak_(543);
31 /* 						!NO. */
32     goto L100;
33 L50:
34     rspsub_(544, objcts_1.odesc2[findex_1.binff - 1]);
35 /* 						!YES. */
36 L100:
37     if (findex_1.btief != 0) {
38 	rspeak_(545);
39     }
40 /* 						!HOOKED? */
41     return ret_val;
42 
43 L200:
44     if (arg != 1) {
45 	goto L500;
46     }
47 /* 						!READIN? */
48     if (prsvec_1.prsa != vindex_1.walkw) {
49 	goto L300;
50     }
51 /* 						!WALK? */
52     if (findxt_(prsvec_1.prso, play_1.here)) {
53 	goto L250;
54     }
55 /* 						!VALID EXIT? */
56     rspeak_(546);
57 /* 						!NO, JOKE. */
58     return ret_val;
59 
60 L250:
61     if (findex_1.btief == 0) {
62 	goto L275;
63     }
64 /* 						!TIED UP? */
65     rspeak_(547);
66 /* 						!YES, JOKE. */
67     return ret_val;
68 
69 L275:
70     if (curxt_1.xtype != xpars_1.xnorm) {
71 	goto L10;
72     }
73 /* 						!NORMAL EXIT? */
74     if ((rooms_1.rflag[curxt_1.xroom1 - 1] & RMUNG) == 0) {
75 	state_1.bloc = curxt_1.xroom1;
76     }
77 L10:
78     ret_val = FALSE_;
79     return ret_val;
80 
81 L300:
82     if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != findex_1.binff) {
83 	goto L350;
84     }
85     rspsub_(548, objcts_1.odesc2[findex_1.binff - 1]);
86 /* 						!RECEP CONT TOO HOT. */
87     return ret_val;
88 
89 L350:
90     if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.recep ||
91 	    qempty_(oindex_1.recep)) {
92 	goto L10;
93     }
94     rspeak_(549);
95     return ret_val;
96 
97 L500:
98     if (prsvec_1.prsa != vindex_1.unboaw || (rooms_1.rflag[play_1.here - 1] &
99 	    RLAND) == 0) {
100 	goto L600;
101     }
102     if (findex_1.binff != 0) {
103 	cevent_1.ctick[cindex_1.cevbal - 1] = 3;
104     }
105 /* 						!HE GOT OUT, START BALLOON. */
106     goto L10;
107 
108 L600:
109     if (prsvec_1.prsa != vindex_1.burnw || objcts_1.ocan[prsvec_1.prso - 1] !=
110 	     oindex_1.recep) {
111 	goto L700;
112     }
113     rspsub_(550, objcts_1.odesc2[prsvec_1.prso - 1]);
114 /* 						!LIGHT FIRE IN RECEP. */
115     cevent_1.ctick[cindex_1.cevbrn - 1] = objcts_1.osize[prsvec_1.prso - 1] *
116 	    20;
117     objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT + FLAMBT +
118 	    LITEBT & ~ (TAKEBT + READBT);
119     if (findex_1.binff != 0) {
120 	return ret_val;
121     }
122     if (! findex_1.blabf) {
123 	newsta_(oindex_1.blabe, 0, 0, oindex_1.ballo, 0);
124     }
125     findex_1.blabf = TRUE_;
126     findex_1.binff = prsvec_1.prso;
127     cevent_1.ctick[cindex_1.cevbal - 1] = 3;
128     rspeak_(551);
129     return ret_val;
130 
131 L700:
132     if (prsvec_1.prsa == vindex_1.unboaw && findex_1.binff != 0 && (
133 	    rooms_1.rflag[play_1.here - 1] & RLAND) != 0) {
134 	cevent_1.ctick[cindex_1.cevbal - 1] = 3;
135     }
136     goto L10;
137 
138 } /* ballop_ */
139