Annotation of 43BSDReno/games/dungeon/nrooms.F, revision 1.1.1.1

1.1       root        1: C RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
                      2: C
                      3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
                      4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
                      5: C WRITTEN BY R. M. SUPNIK
                      6: C
                      7: C DECLARATIONS
                      8: C
                      9:        LOGICAL FUNCTION RAPPL2(RI)
                     10:        IMPLICIT INTEGER (A-Z)
                     11:        LOGICAL QOPEN,QHERE
                     12: #include "parser.h"
                     13: #include "gamestate.h"
                     14: #include "state.h"
                     15: #include "io.h"
                     16: #include "rooms.h"
                     17: #include "rflag.h"
                     18: #include "rindex.h"
                     19: #include "objects.h"
                     20: #include "oflags.h"
                     21: #include "oindex.h"
                     22: #include "xsrch.h"
                     23: #include "clock.h"
                     24: #include "advers.h"
                     25: #include "verbs.h"
                     26: #include "flags.h"
                     27: C
                     28: C FUNCTIONS AND DATA
                     29: C
                     30:        QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
                     31:        DATA NEWRMS/38/
                     32: C RAPPL2, PAGE 2
                     33: C
                     34:        RAPPL2=.TRUE.
                     35:        GO TO (38000,39000,40000,41000,42000,43000,44000,
                     36: &              45000,46000,47000,48000,49000,50000,
                     37: &              51000,52000,53000,54000,55000,56000,
                     38: &              57000,58000,59000,60000),
                     39: &              (RI-NEWRMS+1)
                     40:        CALL BUG(70,RI)
                     41:        RETURN
                     42: C
                     43: C R38--        MIRROR D ROOM
                     44: C
                     45: 38000  IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
                     46:        RETURN
                     47: C
                     48: C R39--        MIRROR G ROOM
                     49: C
                     50: 39000  IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
                     51:        RETURN
                     52: C
                     53: C R40--        MIRROR C ROOM
                     54: C
                     55: 40000  IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
                     56:        RETURN
                     57: C
                     58: C R41--        MIRROR B ROOM
                     59: C
                     60: 41000  IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
                     61:        RETURN
                     62: C
                     63: C R42--        MIRROR A ROOM
                     64: C
                     65: 42000  IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
                     66:        RETURN
                     67: C RAPPL2, PAGE 3
                     68: C
                     69: C R43--        MIRROR C EAST/WEST
                     70: C
                     71: 43000  IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
                     72:        RETURN
                     73: C
                     74: C R44--        MIRROR B EAST/WEST
                     75: C
                     76: 44000  IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
                     77:        RETURN
                     78: C
                     79: C R45--        MIRROR A EAST/WEST
                     80: C
                     81: 45000  IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
                     82:        RETURN
                     83: C
                     84: C R46--        INSIDE MIRROR
                     85: C
                     86: 46000  IF(PRSA.NE.LOOKW) RETURN
                     87: C                                              !LOOK?
                     88:        CALL RSPEAK(688)
                     89: C                                              !DESCRIBE
                     90: C
                     91: C NOW DESCRIBE POLE STATE.
                     92: C
                     93: C CASES 1,2--  MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
                     94: C CASES 3,4--  MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
                     95: C CASE 5--     POLE IS UP
                     96: C
                     97:        I=689
                     98: C                                              !ASSUME CASE 5.
                     99:        IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB))
                    100: &              I=690+MIN0(POLEUF,1)
                    101:        IF(MOD(MDIR,180).EQ.0)
                    102: &              I=692+MIN0(POLEUF,1)
                    103:        CALL RSPEAK(I)
                    104: C                                              !DESCRIBE POLE.
                    105:        CALL RSPSUB(694,695+(MDIR/45))
                    106: C                                              !DESCRIBE ARROW.
                    107:        RETURN
                    108: C RAPPL2, PAGE 4
                    109: C
                    110: C R47--        MIRROR EYE ROOM
                    111: C
                    112: 47000  IF(PRSA.NE.LOOKW) RETURN
                    113: C                                              !LOOK?
                    114:        I=704
                    115: C                                              !ASSUME BEAM STOP.
                    116:        DO 47100 J=1,OLNT
                    117:          IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
                    118: 47100  CONTINUE
                    119:        I=703
                    120: 47200  CALL RSPSUB(I,ODESC2(J))
                    121: C                                              !DESCRIBE BEAM.
                    122:        CALL LOOKTO(MRA,0,0,0,0)
                    123: C                                              !LOOK NORTH.
                    124:        RETURN
                    125: C
                    126: C R48--        INSIDE CRYPT
                    127: C
                    128: 48000  IF(PRSA.NE.LOOKW) RETURN
                    129: C                                              !LOOK?
                    130:        I=46
                    131: C                                              !CRYPT IS OPEN/CLOSED.
                    132:        IF(QOPEN(TOMB)) I=12
                    133:        CALL RSPSUB(705,I)
                    134:        RETURN
                    135: C
                    136: C R49--        SOUTH CORRIDOR
                    137: C
                    138: 49000  IF(PRSA.NE.LOOKW) RETURN
                    139: C                                              !LOOK?
                    140:        CALL RSPEAK(706)
                    141: C                                              !DESCRIBE.
                    142:        I=46
                    143: C                                              !ODOOR IS OPEN/CLOSED.
                    144:        IF(QOPEN(ODOOR)) I=12
                    145:        IF(LCELL.EQ.4) CALL RSPSUB(707,I)
                    146: C                                              !DESCRIBE ODOOR IF THERE.
                    147:        RETURN
                    148: C
                    149: C R50--        BEHIND DOOR
                    150: C
                    151: 50000  IF(PRSA.NE.WALKIW) GO TO 50100
                    152: C                                              !WALK IN?
                    153:        CFLAG(CEVFOL)=.TRUE.
                    154: C                                              !MASTER FOLLOWS.
                    155:        CTICK(CEVFOL)=-1
                    156:        RETURN
                    157: C
                    158: 50100  IF(PRSA.NE.LOOKW) RETURN
                    159: C                                              !LOOK?
                    160:        I=46
                    161: C                                              !QDOOR IS OPEN/CLOSED.
                    162:        IF(QOPEN(QDOOR)) I=12
                    163:        CALL RSPSUB(708,I)
                    164:        RETURN
                    165: C RAPPL2, PAGE 5
                    166: C
                    167: C R51--        FRONT DOOR
                    168: C
                    169: 51000  IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
                    170: C                                              !IF EXITS, KILL FOLLOW.
                    171:        IF(PRSA.NE.LOOKW) RETURN
                    172: C                                              !LOOK?
                    173:        CALL LOOKTO(0,MRD,709,0,0)
                    174: C                                              !DESCRIBE SOUTH.
                    175:        I=46
                    176: C                                              !PANEL IS OPEN/CLOSED.
                    177:        IF(INQSTF) I=12
                    178: C                                              !OPEN IF INQ STARTED.
                    179:        J=46
                    180: C                                              !QDOOR IS OPEN/CLOSED.
                    181:        IF(QOPEN(QDOOR)) J=12
                    182:        CALL RSPSB2(710,I,J)
                    183:        RETURN
                    184: C
                    185: C R52--        NORTH CORRIDOR
                    186: C
                    187: 52000  IF(PRSA.NE.LOOKW) RETURN
                    188: C                                              !LOOK?
                    189:        I=46
                    190:        IF(QOPEN(CDOOR)) I=12
                    191: C                                              !CDOOR IS OPEN/CLOSED.
                    192:        CALL RSPSUB(711,I)
                    193:        RETURN
                    194: C
                    195: C R53--        PARAPET
                    196: C
                    197: 53000  IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
                    198:        RETURN
                    199: C
                    200: C R54--        CELL
                    201: C
                    202: 54000  IF(PRSA.NE.LOOKW) RETURN
                    203: C                                              !LOOK?
                    204:        I=721
                    205: C                                              !CDOOR IS OPEN/CLOSED.
                    206:        IF(QOPEN(CDOOR)) I=722
                    207:        CALL RSPEAK(I)
                    208:        I=46
                    209: C                                              !ODOOR IS OPEN/CLOSED.
                    210:        IF(QOPEN(ODOOR)) I=12
                    211:        IF(LCELL.EQ.4) CALL RSPSUB(723,I)
                    212: C                                              !DESCRIBE.
                    213:        RETURN
                    214: C
                    215: C R55--        PRISON CELL
                    216: C
                    217: 55000  IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
                    218: C                                              !LOOK?
                    219:        RETURN
                    220: C
                    221: C R56--        NIRVANA CELL
                    222: C
                    223: 56000  IF(PRSA.NE.LOOKW) RETURN
                    224: C                                              !LOOK?
                    225:        I=46
                    226: C                                              !ODOOR IS OPEN/CLOSED.
                    227:        IF(QOPEN(ODOOR)) I=12
                    228:        CALL RSPSUB(725,I)
                    229:        RETURN
                    230: C RAPPL2, PAGE 6
                    231: C
                    232: C R57--        NIRVANA AND END OF GAME
                    233: C
                    234: 57000  IF(PRSA.NE.WALKIW) RETURN
                    235: C                                              !WALKIN?
                    236:        CALL RSPEAK(726)
                    237:        CALL SCORE(.FALSE.)
                    238: C moved to exit routine        CLOSE(DBCH)
                    239:        CALL EXIT
                    240: C
                    241: C R58--        TOMB ROOM
                    242: C
                    243: 58000  IF(PRSA.NE.LOOKW) RETURN
                    244: C                                              !LOOK?
                    245:        I=46
                    246: C                                              !TOMB IS OPEN/CLOSED.
                    247:        IF(QOPEN(TOMB)) I=12
                    248:        CALL RSPSUB(792,I)
                    249:        RETURN
                    250: C
                    251: C R59--        PUZZLE SIDE ROOM
                    252: C
                    253: 59000  IF(PRSA.NE.LOOKW) RETURN
                    254: C                                              !LOOK?
                    255:        I=861
                    256: C                                              !ASSUME DOOR CLOSED.
                    257:        IF(CPOUTF) I=862
                    258: C                                              !OPEN?
                    259:        CALL RSPEAK(I)
                    260: C                                              !DESCRIBE.
                    261:        RETURN
                    262: C
                    263: C R60--        PUZZLE ROOM
                    264: C
                    265: 60000  IF(PRSA.NE.LOOKW) RETURN
                    266: C                                              !LOOK?
                    267:        IF(CPUSHF) GO TO 60100
                    268: C                                              !STARTED PUZZLE?
                    269:        CALL RSPEAK(868)
                    270: C                                              !NO, DESCRIBE.
                    271:        IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
                    272:        RETURN
                    273: C
                    274: 60100  CALL CPINFO(880,CPHERE)
                    275: C                                              !DESCRIBE ROOM.
                    276:        RETURN
                    277: C
                    278:        END
                    279: C LOOKTO--     DESCRIBE VIEW IN MIRROR HALLWAY
                    280: C
                    281: C DECLARATIONS
                    282: C
                    283:        SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
                    284:        IMPLICIT INTEGER(A-Z)
                    285: #include "gamestate.h"
                    286: #include "flags.h"
                    287: C LOOKTO, PAGE 2
                    288: C
                    289:        CALL RSPEAK(HT)
                    290: C                                              !DESCRIBE HALL.
                    291:        CALL RSPEAK(NT)
                    292: C                                              !DESCRIBE NORTH VIEW.
                    293:        CALL RSPEAK(ST)
                    294: C                                              !DESCRIBE SOUTH VIEW.
                    295:        DIR=0
                    296: C                                              !ASSUME NO DIRECTION.
                    297:        IF(IABS(MLOC-HERE).NE.1) GO TO 200
                    298: C                                              !MIRROR TO N OR S?
                    299:        IF(MLOC.EQ.NRM) DIR=695
                    300:        IF(MLOC.EQ.SRM) DIR=699
                    301: C                                              !DIR=N/S.
                    302:        IF(MOD(MDIR,180).NE.0) GO TO 100
                    303: C                                              !MIRROR N-S?
                    304:        CALL RSPSUB(847,DIR)
                    305: C                                              !YES, HE SEES PANEL
                    306:        CALL RSPSB2(848,DIR,DIR)
                    307: C                                              !AND NARROW ROOMS.
                    308:        GO TO 200
                    309: C
                    310: 100    M1=MRHERE(HERE)
                    311: C                                              !WHICH MIRROR?
                    312:        MRBF=0
                    313: C                                              !ASSUME INTACT.
                    314:        IF(((M1.EQ.1).AND..NOT.MR1F).OR.
                    315: &        ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1
                    316:        CALL RSPSUB(849+MRBF,DIR)
                    317: C                                              !DESCRIBE.
                    318:        IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
                    319:        IF(MRBF.NE.0) CALL RSPEAK(851)
                    320: C
                    321: 200    I=0
                    322: C                                              !ASSUME NO MORE TO DO.
                    323:        IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852
                    324:        IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853
                    325:        IF((NT+ST+DIR).EQ.0) I=854
                    326:        IF(HT.NE.0) CALL RSPEAK(I)
                    327: C                                              !DESCRIBE HALLS.
                    328:        RETURN
                    329: C
                    330:        END
                    331: C EWTELL--     DESCRIBE E/W NARROW ROOMS
                    332: C
                    333: C DECLARATIONS
                    334: C
                    335:        SUBROUTINE EWTELL(RM,ST)
                    336:        IMPLICIT INTEGER(A-Z)
                    337:        LOGICAL M1
                    338: C
                    339: C ROOMS
                    340: #include "rindex.h"
                    341: #include "flags.h"
                    342: C EWTELL, PAGE 2
                    343: C
                    344: C NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
                    345: C MIRROR MUST BE N-S.
                    346: C
                    347:        M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
                    348:        I=819+MOD(RM-MRAE,2)
                    349: C                                              !GET BASIC E/W STRING.
                    350:        IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F))
                    351: &              I=I+2
                    352:        CALL RSPEAK(I)
                    353:        IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2))
                    354:        CALL RSPEAK(825)
                    355:        CALL RSPEAK(ST)
                    356:        RETURN
                    357: C
                    358:        END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.