mirror of https://github.com/sean-m/zork
182 lines
3.5 KiB
C
182 lines
3.5 KiB
C
/* PRINCR- PRINT CONTENTS OF ROOM */
|
|
|
|
/*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"
|
|
|
|
void princr_(full, rm)
|
|
logical full;
|
|
integer rm;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1, i__2;
|
|
|
|
/* Local variables */
|
|
integer i, j, k;
|
|
|
|
j = 329;
|
|
/* !ASSUME SUPERBRIEF FORMAT. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !LOOP ON OBJECTS */
|
|
if (! qhere_(i, rm) || (objcts_1.oflag1[i - 1] & VISIBT +
|
|
NDSCBT) != VISIBT || i == advs_1.avehic[
|
|
play_1.winner - 1]) {
|
|
goto L500;
|
|
}
|
|
if (! (full) && (findex_1.superf || findex_1.brieff && (
|
|
rooms_1.rflag[play_1.here - 1] & RSEEN) != 0)) {
|
|
goto L200;
|
|
}
|
|
|
|
/* DO LONG DESCRIPTION OF OBJECT. */
|
|
|
|
k = objcts_1.odesco[i - 1];
|
|
/* !GET UNTOUCHED. */
|
|
if (k == 0 || (objcts_1.oflag2[i - 1] & TCHBT) != 0) {
|
|
k = objcts_1.odesc1[i - 1];
|
|
}
|
|
rspeak_(k);
|
|
/* !DESCRIBE. */
|
|
goto L500;
|
|
/* DO SHORT DESCRIPTION OF OBJECT. */
|
|
|
|
L200:
|
|
rspsub_(j, objcts_1.odesc2[i - 1]);
|
|
/* !YOU CAN SEE IT. */
|
|
j = 502;
|
|
|
|
L500:
|
|
;
|
|
}
|
|
|
|
/* NOW LOOP TO PRINT CONTENTS OF OBJECTS IN ROOM. */
|
|
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !LOOP ON OBJECTS. */
|
|
if (! qhere_(i, rm) || (objcts_1.oflag1[i - 1] & VISIBT +
|
|
NDSCBT) != VISIBT) {
|
|
goto L1000;
|
|
}
|
|
if ((objcts_1.oflag2[i - 1] & ACTRBT) != 0) {
|
|
i__2 = oactor_(i);
|
|
invent_(i__2);
|
|
}
|
|
if ((objcts_1.oflag1[i - 1] & TRANBT) == 0 && (
|
|
objcts_1.oflag2[i - 1] & OPENBT) == 0 || qempty_(i))
|
|
{
|
|
goto L1000;
|
|
}
|
|
|
|
/* OBJECT IS NOT EMPTY AND IS OPEN OR TRANSPARENT. */
|
|
|
|
j = 573;
|
|
if (i != oindex_1.tcase) {
|
|
goto L600;
|
|
}
|
|
/* !TROPHY CASE? */
|
|
j = 574;
|
|
if ((findex_1.brieff || findex_1.superf) && ! (full)) {
|
|
goto L1000;
|
|
}
|
|
L600:
|
|
princo_(i, j);
|
|
/* !PRINT CONTENTS. */
|
|
|
|
L1000:
|
|
;
|
|
}
|
|
} /* princr_ */
|
|
|
|
/* INVENT- PRINT CONTENTS OF ADVENTURER */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
void invent_(adv)
|
|
integer adv;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1;
|
|
|
|
/* Local variables */
|
|
integer i, j;
|
|
|
|
i = 575;
|
|
/* !FIRST LINE. */
|
|
if (adv != aindex_1.player) {
|
|
i = 576;
|
|
}
|
|
/* !IF NOT ME. */
|
|
i__1 = objcts_1.olnt;
|
|
for (j = 1; j <= i__1; ++j) {
|
|
/* !LOOP */
|
|
if (objcts_1.oadv[j - 1] != adv || (objcts_1.oflag1[j - 1] &
|
|
VISIBT) == 0) {
|
|
goto L10;
|
|
}
|
|
rspsub_(i, objcts_1.odesc2[advs_1.aobj[adv - 1] - 1]);
|
|
i = 0;
|
|
rspsub_(502, objcts_1.odesc2[j - 1]);
|
|
L10:
|
|
;
|
|
}
|
|
|
|
if (i == 0) {
|
|
goto L25;
|
|
}
|
|
/* !ANY OBJECTS? */
|
|
if (adv == aindex_1.player) {
|
|
rspeak_(578);
|
|
}
|
|
/* !NO, TELL HIM. */
|
|
return;
|
|
|
|
L25:
|
|
i__1 = objcts_1.olnt;
|
|
for (j = 1; j <= i__1; ++j) {
|
|
/* !LOOP. */
|
|
if (objcts_1.oadv[j - 1] != adv || (objcts_1.oflag1[j - 1] &
|
|
VISIBT) == 0 || (objcts_1.oflag1[j - 1] &
|
|
TRANBT) == 0 && (objcts_1.oflag2[j - 1] &
|
|
OPENBT) == 0) {
|
|
goto L100;
|
|
}
|
|
if (! qempty_(j)) {
|
|
princo_(j, 573);
|
|
}
|
|
/* !IF NOT EMPTY, LIST. */
|
|
L100:
|
|
;
|
|
}
|
|
} /* invent_ */
|
|
|
|
/* PRINCO- PRINT CONTENTS OF OBJECT */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
void princo_(obj, desc)
|
|
integer obj;
|
|
integer desc;
|
|
{
|
|
/* System generated locals */
|
|
integer i__1;
|
|
|
|
/* Local variables */
|
|
integer i;
|
|
|
|
rspsub_(desc, objcts_1.odesc2[obj - 1]);
|
|
/* !PRINT HEADER. */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !LOOP THRU. */
|
|
if (objcts_1.ocan[i - 1] == obj) {
|
|
rspsub_(502, objcts_1.odesc2[i - 1]);
|
|
}
|
|
/* L100: */
|
|
}
|
|
} /* princo_ */
|