Annotation of 43BSDReno/games/dungeon/nrooms.F, revision 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.