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