Annotation of 43BSDReno/games/dungeon/nobjs.F, revision 1.1

1.1     ! root        1: C NOBJS-       NEW OBJECTS PROCESSOR
        !             2: C      OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
        !             3: C      MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
        !             4: C
        !             5: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
        !             6: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
        !             7: C WRITTEN BY R. M. SUPNIK
        !             8: C
        !             9: C DECLARATIONS
        !            10: C
        !            11:        LOGICAL FUNCTION NOBJS(RI,ARG)
        !            12:        IMPLICIT INTEGER (A-Z)
        !            13:        LOGICAL QOPEN,MOVETO,F
        !            14:        LOGICAL QHERE,OPNCLS,MIRPAN
        !            15: #include "parser.h"
        !            16: #include "gamestate.h"
        !            17: #include "state.h"
        !            18: #include "screen.h"
        !            19: #include "puzzle.h"
        !            20: C
        !            21: C MISCELLANEOUS VARIABLES
        !            22: C
        !            23:        COMMON /HYPER/ HFACTR
        !            24: #include "rooms.h"
        !            25: #include "rflag.h"
        !            26: #include "rindex.h"
        !            27: #include "objects.h"
        !            28: #include "oflags.h"
        !            29: #include "oindex.h"
        !            30: #include "clock.h"
        !            31: 
        !            32: #include "villians.h"
        !            33: #include "advers.h"
        !            34: #include "verbs.h"
        !            35: #include "flags.h"
        !            36: C
        !            37: C FUNCTIONS AND DATA
        !            38: C
        !            39:        QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
        !            40: C NOBJS, PAGE 2
        !            41: C
        !            42:        IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
        !            43:        IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
        !            44:        AV=AVEHIC(WINNER)
        !            45:        NOBJS=.TRUE.
        !            46: C
        !            47:        GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,
        !            48: &       10000,11000,12000,13000,14000,15000,16000,17000,
        !            49: &       18000,19000,20000,21000),
        !            50: &              (RI-31)
        !            51:        CALL BUG(6,RI)
        !            52: C
        !            53: C RETURN HERE TO DECLARE FALSE RESULT
        !            54: C
        !            55: 10     NOBJS=.FALSE.
        !            56:        RETURN
        !            57: C
        !            58: C O32--        BILLS
        !            59: C
        !            60: 1000   IF(PRSA.NE.EATW) GO TO 1100
        !            61: C                                              !EAT?
        !            62:        CALL RSPEAK(639)
        !            63: C                                              !JOKE.
        !            64:        RETURN
        !            65: C
        !            66: 1100   IF(PRSA.EQ.BURNW) CALL RSPEAK(640)
        !            67: C                                              !BURN?  JOKE.
        !            68:        GO TO 10
        !            69: C                                              !LET IT BE HANDLED.
        !            70: C NOBJS, PAGE 3
        !            71: C
        !            72: C O33--        SCREEN OF LIGHT
        !            73: C
        !            74: 2000   TARGET=SCOL
        !            75: C                                              !TARGET IS SCOL.
        !            76: 2100   IF(PRSO.NE.TARGET) GO TO 2400
        !            77: C                                              !PRSO EQ TARGET?
        !            78:        IF((PRSA.NE.PUSHW).AND.(PRSA.NE.MOVEW).AND.
        !            79: &              (PRSA.NE.TAKEW).AND.(PRSA.NE.RUBW)) GO TO 2200
        !            80:        CALL RSPEAK(673)
        !            81: C                                              !HAND PASSES THRU.
        !            82:        RETURN
        !            83: C
        !            84: 2200   IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND.
        !            85: &              (PRSA.NE.MUNGW)) GO TO 2400
        !            86:        CALL RSPSUB(674,ODI2)
        !            87: C                                              !PASSES THRU.
        !            88:        RETURN
        !            89: C
        !            90: 2400   IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10
        !            91:        IF(HERE.EQ.BKBOX) GO TO 2600
        !            92: C                                              !THRU SCOL?
        !            93:        CALL NEWSTA(PRSO,0,BKBOX,0,0)
        !            94: C                                              !NO, THRU WALL.
        !            95:        CALL RSPSUB(675,ODO2)
        !            96: C                                              !ENDS UP IN BOX ROOM.
        !            97:        CTICK(CEVSCL)=0
        !            98: C                                              !CANCEL ALARM.
        !            99:        SCOLRM=0
        !           100: C                                              !RESET SCOL ROOM.
        !           101:        RETURN
        !           102: C
        !           103: 2600   IF(SCOLRM.EQ.0) GO TO 2900
        !           104: C                                              !TRIED TO GO THRU?
        !           105:        CALL NEWSTA(PRSO,0,SCOLRM,0,0)
        !           106: C                                              !SUCCESS.
        !           107:        CALL RSPSUB(676,ODO2)
        !           108: C                                              !ENDS UP SOMEWHERE.
        !           109:        CTICK(CEVSCL)=0
        !           110: C                                              !CANCEL ALARM.
        !           111:        SCOLRM=0
        !           112: C                                              !RESET SCOL ROOM.
        !           113:        RETURN
        !           114: C
        !           115: 2900   CALL RSPEAK(213)
        !           116: C                                              !CANT DO IT.
        !           117:        RETURN
        !           118: C NOBJS, PAGE 4
        !           119: C
        !           120: C O34--        GNOME OF ZURICH
        !           121: C
        !           122: 3000   IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200
        !           123:        IF(OTVAL(PRSO).NE.0) GO TO 3100
        !           124: C                                              !THROW A TREASURE?
        !           125:        CALL NEWSTA(PRSO,641,0,0,0)
        !           126: C                                              !NO, GO POP.
        !           127:        RETURN
        !           128: C
        !           129: 3100   CALL NEWSTA(PRSO,0,0,0,0)
        !           130: C                                              !YES, BYE BYE TREASURE.
        !           131:        CALL RSPSUB(642,ODO2)
        !           132:        CALL NEWSTA(ZGNOM,0,0,0,0)
        !           133: C                                              !BYE BYE GNOME.
        !           134:        CTICK(CEVZGO)=0
        !           135: C                                              !CANCEL EXIT.
        !           136:        F=MOVETO(BKENT,WINNER)
        !           137: C                                              !NOW IN BANK ENTRANCE.
        !           138:        RETURN
        !           139: C
        !           140: 3200   IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
        !           141: &              (PRSA.NE.MUNGW)) GO TO 3300
        !           142:        CALL NEWSTA(ZGNOM,643,0,0,0)
        !           143: C                                              !VANISH GNOME.
        !           144:        CTICK(CEVZGO)=0
        !           145: C                                              !CANCEL EXIT.
        !           146:        RETURN
        !           147: C
        !           148: 3300   CALL RSPEAK(644)
        !           149: C                                              !GNOME IS IMPATIENT.
        !           150:        RETURN
        !           151: C
        !           152: C O35--        EGG
        !           153: C
        !           154: 4000   IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500
        !           155:        IF(.NOT.QOPEN(EGG)) GO TO 4100
        !           156: C                                              !OPEN ALREADY?
        !           157:        CALL RSPEAK(649)
        !           158: C                                              !YES.
        !           159:        RETURN
        !           160: C
        !           161: 4100   IF(PRSI.NE.0) GO TO 4200
        !           162: C                                              !WITH SOMETHING?
        !           163:        CALL RSPEAK(650)
        !           164: C                                              !NO, CANT.
        !           165:        RETURN
        !           166: C
        !           167: 4200   IF(PRSI.NE.HANDS) GO TO 4300
        !           168: C                                              !WITH HANDS?
        !           169:        CALL RSPEAK(651)
        !           170: C                                              !NOT RECOMMENDED.
        !           171:        RETURN
        !           172: C
        !           173: 4300   I=652
        !           174: C                                              !MUNG MESSAGE.
        !           175:        IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR.
        !           176: &              (and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600
        !           177:        I=653
        !           178: C                                              !NOVELTY 1.
        !           179:        IF(and(OFLAG2(PRSO),FITEBT).NE.0) I=654
        !           180:        OFLAG2(PRSO)=or(OFLAG2(PRSO),FITEBT)
        !           181:        CALL RSPSUB(I,ODI2)
        !           182:        RETURN
        !           183: C
        !           184: 4500   IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800
        !           185:        I=655
        !           186: C                                              !YOU BLEW IT.
        !           187: 4600   CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG))
        !           188:        CALL NEWSTA(EGG,0,0,0,0)
        !           189: C                                              !VANISH EGG.
        !           190:        OTVAL(BEGG)=2
        !           191: C                                              !BAD EGG HAS VALUE.
        !           192:        IF(OCAN(CANAR).NE.EGG) GO TO 4700
        !           193: C                                              !WAS CANARY INSIDE?
        !           194:        CALL RSPEAK(ODESCO(BCANA))
        !           195: C                                              !YES, DESCRIBE RESULT.
        !           196:        OTVAL(BCANA)=1
        !           197:        RETURN
        !           198: C
        !           199: 4700   CALL NEWSTA(BCANA,0,0,0,0)
        !           200: C                                              !NO, VANISH IT.
        !           201:        RETURN
        !           202: C
        !           203: 4800   IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10
        !           204:        CALL NEWSTA(BEGG,658,FORE3,0,0)
        !           205: C                                              !DROPPED EGG.
        !           206:        CALL NEWSTA(EGG,0,0,0,0)
        !           207:        OTVAL(BEGG)=2
        !           208:        IF(OCAN(CANAR).NE.EGG) GO TO 4700
        !           209:        OTVAL(BCANA)=1
        !           210: C                                              !BAD CANARY.
        !           211:        RETURN
        !           212: C NOBJS, PAGE 5
        !           213: C
        !           214: C O36--        CANARIES, GOOD AND BAD
        !           215: C
        !           216: 5000   IF(PRSA.NE.WINDW) GO TO 10
        !           217: C                                              !WIND EM UP?
        !           218:        IF(PRSO.EQ.CANAR) GO TO 5100
        !           219: C                                              !RIGHT ONE?
        !           220:        CALL RSPEAK(645)
        !           221: C                                              !NO, BAD NEWS.
        !           222:        RETURN
        !           223: C
        !           224: 5100   IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR.
        !           225: &              ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))))
        !           226: &              GO TO 5200
        !           227:        CALL RSPEAK(646)
        !           228: C                                              !NO, MEDIOCRE NEWS.
        !           229:        RETURN
        !           230: C
        !           231: 5200   SINGSF=.TRUE.
        !           232: C                                              !SANG SONG.
        !           233:        I=HERE
        !           234:        IF(I.EQ.MTREE) I=FORE3
        !           235: C                                              !PLACE BAUBLE.
        !           236:        CALL NEWSTA(BAUBL,647,I,0,0)
        !           237:        RETURN
        !           238: C
        !           239: C O37--        WHITE CLIFFS
        !           240: C
        !           241: 6000   IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND.
        !           242: &              (PRSA.NE.CLMBDW)) GO TO 10
        !           243:        CALL RSPEAK(648)
        !           244: C                                              !OH YEAH?
        !           245:        RETURN
        !           246: C
        !           247: C O38--        WALL
        !           248: C
        !           249: 7000   IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR.
        !           250: &              (PRSA.NE.PUSHW)) GO TO 7100
        !           251:        CALL RSPEAK(860)
        !           252: C                                              !PUSHED MIRROR WALL.
        !           253:        RETURN
        !           254: C
        !           255: 7100   IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10
        !           256:        CALL RSPEAK(662)
        !           257: C                                              !NO WALL.
        !           258:        RETURN
        !           259: C NOBJS, PAGE 6
        !           260: C
        !           261: C O39--        SONG BIRD GLOBAL
        !           262: C
        !           263: 8000   IF(PRSA.NE.FINDW) GO TO 8100
        !           264: C                                              !FIND?
        !           265:        CALL RSPEAK(666)
        !           266:        RETURN
        !           267: C
        !           268: 8100   IF(PRSA.NE.EXAMIW) GO TO 10
        !           269: C                                              !EXAMINE?
        !           270:        CALL RSPEAK(667)
        !           271:        RETURN
        !           272: C
        !           273: C O40--        PUZZLE/SCOL WALLS
        !           274: C
        !           275: 9000   IF(HERE.NE.CPUZZ) GO TO 9500
        !           276: C                                              !PUZZLE WALLS?
        !           277:        IF(PRSA.NE.PUSHW) GO TO 10
        !           278: C                                              !PUSH?
        !           279:        DO 9100 I=1,8,2
        !           280: C                                              !LOCATE WALL.
        !           281:          IF(PRSO.EQ.CPWL(I)) GO TO 9200
        !           282: 9100   CONTINUE
        !           283:        CALL BUG(80,PRSO)
        !           284: C                                              !WHAT?
        !           285: C
        !           286: 9200   J=CPWL(I+1)
        !           287: C                                              !GET DIRECTIONAL OFFSET.
        !           288:        NXT=CPHERE+J
        !           289: C                                              !GET NEXT STATE.
        !           290:        WL=CPVEC(NXT)
        !           291: C                                              !GET C(NEXT STATE).
        !           292:        GO TO (9300,9300,9300,9250,9350),(WL+4)
        !           293: C                                              !PROCESS.
        !           294: C
        !           295: 9250   CALL RSPEAK(876)
        !           296: C                                              !CLEAR CORRIDOR.
        !           297:        RETURN
        !           298: C
        !           299: 9300   IF(CPVEC(NXT+J).EQ.0) GO TO 9400
        !           300: C                                              !MOVABLE, ROOM TO MOVE?
        !           301: 9350   CALL RSPEAK(877)
        !           302: C                                              !IMMOVABLE, NO ROOM.
        !           303:        RETURN
        !           304: C
        !           305: 9400   I=878
        !           306: C                                              !ASSUME FIRST PUSH.
        !           307:        IF(CPUSHF) I=879
        !           308: C                                              !NOT?
        !           309:        CPUSHF=.TRUE.
        !           310:        CPVEC(NXT+J)=WL
        !           311: C                                              !MOVE WALL.
        !           312:        CPVEC(NXT)=0
        !           313: C                                              !VACATE NEXT STATE.
        !           314:        CALL CPGOTO(NXT)
        !           315: C                                              !ONWARD.
        !           316:        CALL CPINFO(I,NXT)
        !           317: C                                              !DESCRIBE.
        !           318:        CALL PRINCR(.TRUE.,HERE)
        !           319: C                                              !PRINT ROOMS CONTENTS.
        !           320:        RFLAG(HERE)=or(RFLAG(HERE),RSEEN)
        !           321:        RETURN
        !           322: C
        !           323: 9500   IF(HERE.NE.SCOLAC) GO TO 9700
        !           324: C                                              !IN SCOL ACTIVE ROOM?
        !           325:        DO 9600 I=1,12,3
        !           326:          TARGET=SCOLWL(I+1)
        !           327: C                                              !ASSUME TARGET.
        !           328:          IF(SCOLWL(I).EQ.HERE) GO TO 2100
        !           329: C                                              !TREAT IF FOUND.
        !           330: 9600   CONTINUE
        !           331: C
        !           332: 9700   IF(HERE.NE.BKBOX) GO TO 10
        !           333: C                                              !IN BOX ROOM?
        !           334:        TARGET=WNORT
        !           335:        GO TO 2100
        !           336: C NOBJS, PAGE 7
        !           337: C
        !           338: C O41--        SHORT POLE
        !           339: C
        !           340: 10000  IF(PRSA.NE.RAISEW) GO TO 10100
        !           341: C                                              !LIFT?
        !           342:        I=749
        !           343: C                                              !ASSUME UP.
        !           344:        IF(POLEUF.EQ.2) I=750
        !           345: C                                              !ALREADY UP?
        !           346:        CALL RSPEAK(I)
        !           347:        POLEUF=2
        !           348: C                                              !POLE IS RAISED.
        !           349:        RETURN
        !           350: C
        !           351: 10100  IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10
        !           352:        IF(POLEUF.NE.0) GO TO 10200
        !           353: C                                              !ALREADY LOWERED?
        !           354:        CALL RSPEAK(751)
        !           355: C                                              !CANT DO IT.
        !           356:        RETURN
        !           357: C
        !           358: 10200  IF(MOD(MDIR,180).NE.0) GO TO 10300
        !           359: C                                              !MIRROR N-S?
        !           360:        POLEUF=0
        !           361: C                                              !YES, LOWER INTO
        !           362:        CALL RSPEAK(752)
        !           363: C                                              !CHANNEL.
        !           364:        RETURN
        !           365: C
        !           366: 10300  IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400
        !           367:        POLEUF=0
        !           368: C                                              !LOWER INTO HOLE.
        !           369:        CALL RSPEAK(753)
        !           370:        RETURN
        !           371: C
        !           372: 10400  CALL RSPEAK(753+POLEUF)
        !           373: C                                              !POLEUF = 1 OR 2.
        !           374:        POLEUF=1
        !           375: C                                              !NOW ON FLOOR.
        !           376:        RETURN
        !           377: C
        !           378: C O42--        MIRROR SWITCH
        !           379: C
        !           380: 11000  IF(PRSA.NE.PUSHW) GO TO 10
        !           381: C                                              !PUSH?
        !           382:        IF(MRPSHF) GO TO 11300
        !           383: C                                              !ALREADY PUSHED?
        !           384:        CALL RSPEAK(756)
        !           385: C                                              !BUTTON GOES IN.
        !           386:        DO 11100 I=1,OLNT
        !           387: C                                              !BLOCKED?
        !           388:          IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200
        !           389: 11100  CONTINUE
        !           390:        CALL RSPEAK(757)
        !           391: C                                              !NOTHING IN BEAM.
        !           392:        RETURN
        !           393: C
        !           394: 11200  CFLAG(CEVMRS)=.TRUE.
        !           395: C                                              !MIRROR OPENS.
        !           396:        CTICK(CEVMRS)=7
        !           397:        MRPSHF=.TRUE.
        !           398:        MROPNF=.TRUE.
        !           399:        RETURN
        !           400: C
        !           401: 11300  CALL RSPEAK(758)
        !           402: C                                              !MIRROR ALREADYOPEN.
        !           403:        RETURN
        !           404: C NOBJS, PAGE 8
        !           405: C
        !           406: C O43--        BEAM FUNCTION
        !           407: C
        !           408: 12000  IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100
        !           409:        CALL RSPEAK(759)
        !           410: C                                              !TAKE BEAM, JOKE.
        !           411:        RETURN
        !           412: C
        !           413: 12100  I=PRSO
        !           414: C                                              !ASSUME BLK WITH DIROBJ.
        !           415:        IF((PRSA.EQ.PUTW).AND.(PRSI.EQ.RBEAM)) GO TO 12200
        !           416:        IF((PRSA.NE.MUNGW).OR.(PRSO.NE.RBEAM).OR.
        !           417: &              (PRSI.EQ.0)) GO TO 10
        !           418:        I=PRSI
        !           419: 12200  IF(OADV(I).NE.WINNER) GO TO 12300
        !           420: C                                              !CARRYING?
        !           421:        CALL NEWSTA(I,0,HERE,0,0)
        !           422: C                                              !DROP OBJ.
        !           423:        CALL RSPSUB(760,ODESC2(I))
        !           424:        RETURN
        !           425: C
        !           426: 12300  J=761
        !           427: C                                              !ASSUME NOT IN ROOM.
        !           428:        IF(QHERE(J,HERE)) I=762
        !           429: C                                              !IN ROOM?
        !           430:        CALL RSPSUB(J,ODESC2(I))
        !           431: C                                              !DESCRIBE.
        !           432:        RETURN
        !           433: C
        !           434: C O44--        BRONZE DOOR
        !           435: C
        !           436: 13000  IF((HERE.EQ.NCELL).OR.((LCELL.EQ.4).AND.
        !           437: &              ((HERE.EQ.CELL).OR.(HERE.EQ.SCORR))))
        !           438: &              GO TO 13100
        !           439:        CALL RSPEAK(763)
        !           440: C                                              !DOOR NOT THERE.
        !           441:        RETURN
        !           442: C
        !           443: 13100  IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10
        !           444: C                                              !OPEN/CLOSE?
        !           445:        IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR))
        !           446: &              CALL RSPEAK(766)
        !           447:        RETURN
        !           448: C
        !           449: C O45--        QUIZ DOOR
        !           450: C
        !           451: 14000  IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100
        !           452:        CALL RSPEAK(767)
        !           453: C                                              !DOOR WONT MOVE.
        !           454:        RETURN
        !           455: C
        !           456: 14100  IF(PRSA.NE.KNOCKW) GO TO 10
        !           457: C                                              !KNOCK?
        !           458:        IF(INQSTF) GO TO 14200
        !           459: C                                              !TRIED IT ALREADY?
        !           460:        INQSTF=.TRUE.
        !           461: C                                              !START INQUISITION.
        !           462:        CFLAG(CEVINQ)=.TRUE.
        !           463:        CTICK(CEVINQ)=2
        !           464:        QUESNO=RND(8)
        !           465: C                                              !SELECT QUESTION.
        !           466:        NQATT=0
        !           467:        CORRCT=0
        !           468:        CALL RSPEAK(768)
        !           469: C                                              !ANNOUNCE RULES.
        !           470:        CALL RSPEAK(769)
        !           471:        CALL RSPEAK(770+QUESNO)
        !           472: C                                              !ASK QUESTION.
        !           473:        RETURN
        !           474: C
        !           475: 14200  CALL RSPEAK(798)
        !           476: C                                              !NO REPLY.
        !           477:        RETURN
        !           478: C
        !           479: C O46--        LOCKED DOOR
        !           480: C
        !           481: 15000  IF(PRSA.NE.OPENW) GO TO 10
        !           482: C                                              !OPEN?
        !           483:        CALL RSPEAK(778)
        !           484: C                                              !CANT.
        !           485:        RETURN
        !           486: C
        !           487: C O47--        CELL DOOR
        !           488: C
        !           489: 16000  NOBJS=OPNCLS(CDOOR,779,780)
        !           490: C                                              !OPEN/CLOSE?
        !           491:        RETURN
        !           492: C NOBJS, PAGE 9
        !           493: C
        !           494: C O48--        DIALBUTTON
        !           495: C
        !           496: 17000  IF(PRSA.NE.PUSHW) GO TO 10
        !           497: C                                              !PUSH?
        !           498:        CALL RSPEAK(809)
        !           499: C                                              !CLICK.
        !           500:        IF(QOPEN(CDOOR)) CALL RSPEAK(810)
        !           501: C                                              !CLOSE CELL DOOR.
        !           502: C
        !           503:        DO 17100 I=1,OLNT
        !           504: C                                              !RELOCATE OLD TO HYPER.
        !           505:          IF((OROOM(I).EQ.CELL).AND.(and(OFLAG1(I),DOORBT).EQ.0))
        !           506: &              CALL NEWSTA(I,0,LCELL*HFACTR,0,0)
        !           507:          IF(OROOM(I).EQ.(PNUMB*HFACTR))
        !           508: &              CALL NEWSTA(I,0,CELL,0,0)
        !           509: 17100  CONTINUE
        !           510: C
        !           511:        OFLAG2(ODOOR)=and(OFLAG2(ODOOR), not(OPENBT))
        !           512:        OFLAG2(CDOOR)=and(OFLAG2(CDOOR), not(OPENBT))
        !           513:        OFLAG1(ODOOR)=and(OFLAG1(ODOOR), not(VISIBT))
        !           514:        IF(PNUMB.EQ.4) OFLAG1(ODOOR)=or(OFLAG1(ODOOR),VISIBT)
        !           515: C
        !           516:        IF(AROOM(PLAYER).NE.CELL) GO TO 17400
        !           517: C                                              !PLAYER IN CELL?
        !           518:        IF(LCELL.NE.4) GO TO 17200
        !           519: C                                              !IN RIGHT CELL?
        !           520:        OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT)
        !           521:        F=MOVETO(NCELL,PLAYER)
        !           522: C                                              !YES, MOVETO NCELL.
        !           523:        GO TO 17400
        !           524: 17200  F=MOVETO(PCELL,PLAYER)
        !           525: C                                              !NO, MOVETO PCELL.
        !           526: C
        !           527: 17400  LCELL=PNUMB
        !           528:        RETURN
        !           529: C NOBJS, PAGE 10
        !           530: C
        !           531: C O49--        DIAL INDICATOR
        !           532: C
        !           533: 18000  IF(PRSA.NE.SPINW) GO TO 18100
        !           534: C                                              !SPIN?
        !           535:        PNUMB=RND(8)+1
        !           536: C                                              !WHEE
        !           537: C                                              !
        !           538:        CALL RSPSUB(797,712+PNUMB)
        !           539:        RETURN
        !           540: C
        !           541: 18100  IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND.
        !           542: &              (PRSA.NE.TRNTOW)) GO TO 10
        !           543:        IF(PRSI.NE.0) GO TO 18200
        !           544: C                                              !TURN DIAL TO X?
        !           545:        CALL RSPEAK(806)
        !           546: C                                              !MUST SPECIFY.
        !           547:        RETURN
        !           548: C
        !           549: 18200  IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300
        !           550:        CALL RSPEAK(807)
        !           551: C                                              !MUST BE DIGIT.
        !           552:        RETURN
        !           553: C
        !           554: 18300  PNUMB=PRSI-NUM1+1
        !           555: C                                              !SET UP NEW.
        !           556:        CALL RSPSUB(808,712+PNUMB)
        !           557:        RETURN
        !           558: C
        !           559: C O50--        GLOBAL MIRROR
        !           560: C
        !           561: 19000  NOBJS=MIRPAN(832,.FALSE.)
        !           562:        RETURN
        !           563: C
        !           564: C O51--        GLOBAL PANEL
        !           565: C
        !           566: 20000  IF(HERE.NE.FDOOR) GO TO 20100
        !           567: C                                              !AT FRONT DOOR?
        !           568:        IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
        !           569:        CALL RSPEAK(843)
        !           570: C                                              !PANEL IN DOOR, NOGO.
        !           571:        RETURN
        !           572: C
        !           573: 20100  NOBJS=MIRPAN(838,.TRUE.)
        !           574:        RETURN
        !           575: C
        !           576: C O52--        PUZZLE ROOM SLIT
        !           577: C
        !           578: 21000  IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10
        !           579:        IF(PRSO.NE.GCARD) GO TO 21100
        !           580: C                                              !PUT CARD IN SLIT?
        !           581:        CALL NEWSTA(PRSO,863,0,0,0)
        !           582: C                                              !KILL CARD.
        !           583:        CPOUTF=.TRUE.
        !           584: C                                              !OPEN DOOR.
        !           585:        OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT))
        !           586:        RETURN
        !           587: C
        !           588: 21100  IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND.
        !           589: &        (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200
        !           590:        CALL RSPEAK(RND(5)+552)
        !           591: C                                              !JOKE FOR VILL, VICT.
        !           592:        RETURN
        !           593: C
        !           594: 21200  CALL NEWSTA(PRSO,0,0,0,0)
        !           595: C                                              !KILL OBJECT.
        !           596:        CALL RSPSUB(864,ODO2)
        !           597: C                                              !DESCRIBE.
        !           598:        RETURN
        !           599: C
        !           600:        END
        !           601: C MIRPAN--     PROCESSOR FOR GLOBAL MIRROR/PANEL
        !           602: C
        !           603: C DECLARATIONS
        !           604: C
        !           605:        LOGICAL FUNCTION MIRPAN(ST,PNF)
        !           606:        IMPLICIT INTEGER(A-Z)
        !           607:        LOGICAL PNF
        !           608: #include "gamestate.h"
        !           609: #include "parser.h"
        !           610: #include "verbs.h"
        !           611: #include "flags.h"
        !           612: C MIRPAN, PAGE 2
        !           613: C
        !           614:        MIRPAN=.TRUE.
        !           615:        NUM=MRHERE(HERE)
        !           616: C                                              !GET MIRROR NUM.
        !           617:        IF(NUM.NE.0) GO TO 100
        !           618: C                                              !ANY HERE?
        !           619:        CALL RSPEAK(ST)
        !           620: C                                              !NO, LOSE.
        !           621:        RETURN
        !           622: C
        !           623: 100    MRBF=0
        !           624: C                                              !ASSUME MIRROR OK.
        !           625:        IF(((NUM.EQ.1).AND..NOT.MR1F).OR.
        !           626: &        ((NUM.EQ.2).AND..NOT.MR2F)) MRBF=1
        !           627:        IF((PRSA.NE.MOVEW).AND.(PRSA.NE.OPENW)) GO TO 200
        !           628:        CALL RSPEAK(ST+1)
        !           629: C                                              !CANT OPEN OR MOVE.
        !           630:        RETURN
        !           631: C
        !           632: 200    IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND.
        !           633: &              (PRSA.NE.LOOKW))) GO TO 300
        !           634:        CALL RSPEAK(844+MRBF)
        !           635: C                                              !LOOK IN MIRROR.
        !           636:        RETURN
        !           637: C
        !           638: 300    IF(PRSA.NE.MUNGW) GO TO 400
        !           639: C                                              !BREAK?
        !           640:        CALL RSPEAK(ST+2+MRBF)
        !           641: C                                              !DO IT.
        !           642:        IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE.
        !           643:        IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE.
        !           644:        RETURN
        !           645: C
        !           646: 400    IF(PNF.OR.(MRBF.EQ.0)) GO TO 500
        !           647: C                                              !BROKEN MIRROR?
        !           648:        CALL RSPEAK(846)
        !           649:        RETURN
        !           650: C
        !           651: 500    IF(PRSA.NE.PUSHW) GO TO 600
        !           652: C                                              !PUSH?
        !           653:        CALL RSPEAK(ST+3+NUM)
        !           654:        RETURN
        !           655: C
        !           656: 600    MIRPAN=.FALSE.
        !           657: C                                              !CANT HANDLE IT.
        !           658:        RETURN
        !           659: C
        !           660:        END

unix.superglobalmegacorp.com

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