zork/dso6.c

171 lines
3.5 KiB
C

/* GHERE-- IS GLOBAL ACTUALLY IN THIS 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"
logical ghere_(obj, rm)
integer obj;
integer rm;
{
/* System generated locals */
logical ret_val;
ret_val = TRUE_;
/* !ASSUME WINS. */
switch (obj - star_1.strbit) {
case 1: goto L1000;
case 2: goto L1000;
case 3: goto L1000;
case 4: goto L1000;
case 5: goto L1000;
case 6: goto L1000;
case 7: goto L1000;
case 8: goto L1000;
case 9: goto L1000;
case 10: goto L1000;
case 11: goto L1000;
case 12: goto L2000;
case 13: goto L3000;
case 14: goto L4000;
case 15: goto L5000;
case 16: goto L5000;
case 17: goto L5000;
case 18: goto L6000;
case 19: goto L7000;
case 20: goto L8000;
case 21: goto L9000;
case 22: goto L9100;
case 23: goto L8000;
case 24: goto L10000;
case 25: goto L11000;
}
bug_(60, obj);
/* 1000-- STARS ARE ALWAYS HERE */
L1000:
return ret_val;
/* 2000-- BIRD */
L2000:
ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear || rm ==
rindex_1.mtree;
return ret_val;
/* 3000-- TREE */
L3000:
ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear && rm !=
rindex_1.fore3;
return ret_val;
/* 4000-- NORTH WALL */
L4000:
ret_val = rm >= rindex_1.bkvw && rm <= rindex_1.bkbox || rm ==
rindex_1.cpuzz;
return ret_val;
/* 5000-- EAST, SOUTH, WEST WALLS */
L5000:
ret_val = rm >= rindex_1.bkvw && rm < rindex_1.bkbox || rm ==
rindex_1.cpuzz;
return ret_val;
/* 6000-- GLOBAL WATER */
L6000:
ret_val = (rooms_1.rflag[rm - 1] & RWATER + RFILL) != 0;
return ret_val;
/* 7000-- GLOBAL GUARDIANS */
L7000:
ret_val = rm >= rindex_1.mrc && rm <= rindex_1.mrd || rm >=
rindex_1.mrce && rm <= rindex_1.mrdw || rm == rindex_1.inmir;
return ret_val;
/* 8000-- ROSE/CHANNEL */
L8000:
ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrd || rm ==
rindex_1.inmir;
return ret_val;
/* 9000-- MIRROR */
/* 9100 PANEL */
L9100:
if (rm == rindex_1.fdoor) {
return ret_val;
}
/* !PANEL AT FDOOR. */
L9000:
ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrc || rm >=
rindex_1.mrae && rm <= rindex_1.mrcw;
return ret_val;
/* 10000-- MASTER */
L10000:
ret_val = rm == rindex_1.fdoor || rm == rindex_1.ncorr || rm ==
rindex_1.parap || rm == rindex_1.cell;
return ret_val;
/* 11000-- LADDER */
L11000:
ret_val = rm == rindex_1.cpuzz;
return ret_val;
} /* ghere_ */
/* MRHERE-- IS MIRROR HERE? */
/* DECLARATIONS */
integer mrhere_(rm)
integer rm;
{
/* System generated locals */
integer ret_val, i__1;
if (rm < rindex_1.mrae || rm > rindex_1.mrdw) {
goto L100;
}
/* RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180) */
ret_val = 1;
/* !ASSUME MIRROR 1 HERE. */
if ((rm - rindex_1.mrae) % 2 == findex_1.mdir / 180) {
ret_val = 2;
}
return ret_val;
/* RM IS NORTH OR SOUTH OF MIRROR. IF MIRROR IS N-S OR NOT */
/* WITHIN ONE ROOM OF RM, LOSE. */
L100:
ret_val = 0;
if ((i__1 = findex_1.mloc - rm, abs(i__1)) != 1 || findex_1.mdir % 180 ==
0) {
return ret_val;
}
/* RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W */
ret_val = 1;
if (rm < findex_1.mloc && findex_1.mdir < 180 || rm > findex_1.mloc &&
findex_1.mdir > 180) {
ret_val = 2;
}
return ret_val;
} /* mrhere_ */