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

1.1       root        1: C CEVAPP- CLOCK EVENT APPLICABLES
                      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:        SUBROUTINE CEVAPP(RI)
                     10:        IMPLICIT INTEGER (A-Z)
                     11:        INTEGER CNDTCK(10),LMPTCK(12)
                     12:        LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO
                     13:        LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
                     14: #include "gamestate.h"
                     15: #include "state.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 "clock.h"
                     23: #include "curxt.h"
                     24: #include "xsrch.h"
                     25: #include "villians.h"
                     26: #include "advers.h"
                     27: #include "flags.h"
                     28: C
                     29: C FUNCTIONS AND DATA
                     30: C
                     31:        QOPEN(R)=(and(OFLAG2(R),OPENBT)).NE.0
                     32:        QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.
                     33: &              (R.EQ.VLBOT)
                     34:        QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.
                     35: &               (R.EQ.VAIR4)
                     36:        DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
                     37:        DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/
                     38: C CEVAPP, PAGE 2
                     39: C
                     40:        IF(RI.EQ.0) RETURN
                     41: C                                              !IGNORE DISABLED.
                     42:        GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
                     43: &       11000,12000,13000,14000,15000,16000,17000,18000,19000,
                     44: &       20000,21000,22000,23000,24000),RI
                     45:        CALL BUG(3,RI)
                     46: C
                     47: C CEV1--       CURE CLOCK.  LET PLAYER SLOWLY RECOVER.
                     48: C
                     49: 1000   ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)
                     50: C                                              !RECOVER.
                     51:        IF(ASTREN(PLAYER).GE.0) RETURN
                     52: C                                              !FULLY RECOVERED?
                     53:        CTICK(CEVCUR)=30
                     54: C                                              !NO, WAIT SOME MORE.
                     55:        RETURN
                     56: C
                     57: C CEV2--       MAINT-ROOM WITH LEAK.  RAISE THE WATER LEVEL.
                     58: C
                     59: 2000   IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))
                     60: C                                              !DESCRIBE.
                     61:        RVMNT=RVMNT+1
                     62: C                                              !RAISE WATER LEVEL.
                     63:        IF(RVMNT.LE.16) RETURN
                     64: C                                              !IF NOT FULL, EXIT.
                     65:        CTICK(CEVMNT)=0
                     66: C                                              !FULL, DISABLE CLOCK.
                     67:        RFLAG(MAINT)=or(RFLAG(MAINT),RMUNG)
                     68:        RRAND(MAINT)=80
                     69: C                                              !SAY IT IS FULL OF WATER.
                     70:        IF(HERE.EQ.MAINT) CALL JIGSUP(81)
                     71: C                                              !DROWN HIM IF PRESENT.
                     72:        RETURN
                     73: C
                     74: C CEV3--       LANTERN.  DESCRIBE GROWING DIMNESS.
                     75: C
                     76: 3000   CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)
                     77: C                                              !DO LIGHT INTERRUPT.
                     78:        RETURN
                     79: C
                     80: C CEV4--       MATCH.  OUT IT GOES.
                     81: C
                     82: 4000   CALL RSPEAK(153)
                     83: C                                              !MATCH IS OUT.
                     84:        OFLAG1(MATCH)=and(OFLAG1(MATCH), not(ONBT))
                     85:        RETURN
                     86: C
                     87: C CEV5--       CANDLE.  DESCRIBE GROWING DIMNESS.
                     88: C
                     89: 5000   CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)
                     90: C                                              !DO CANDLE INTERRUPT.
                     91:        RETURN
                     92: C CEVAPP, PAGE 3
                     93: C
                     94: C CEV6--       BALLOON
                     95: C
                     96: 6000   CTICK(CEVBAL)=3
                     97: C                                              !RESCHEDULE INTERRUPT.
                     98:        F=AVEHIC(WINNER).EQ.BALLO
                     99: C                                              !SEE IF IN BALLOON.
                    100:        IF(BLOC.EQ.VLBOT) GO TO 6800
                    101: C                                              !AT BOTTOM?
                    102:        IF(QLEDGE(BLOC)) GO TO 6700
                    103: C                                              !ON LEDGE?
                    104:        IF(QOPEN(RECEP).AND.(BINFF.NE.0))
                    105: &              GO TO 6500
                    106: C
                    107: C BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
                    108: C FALL TO NEXT ROOM.
                    109: C
                    110:        IF(BLOC.NE.VAIR1) GO TO 6300
                    111: C                                              !IN VAIR1?
                    112:        BLOC=VLBOT
                    113: C                                              !YES, NOW AT VLBOT.
                    114:        CALL NEWSTA(BALLO,0,BLOC,0,0)
                    115:        IF(F) GO TO 6200
                    116: C                                              !IN BALLOON?
                    117:        IF(QLEDGE(HERE)) CALL RSPEAK(530)
                    118: C                                              !ON LEDGE, DESCRIBE.
                    119:        RETURN
                    120: C
                    121: 6200   F=MOVETO(BLOC,WINNER)
                    122: C                                              !MOVE HIM.
                    123:        IF(BINFF.EQ.0) GO TO 6250
                    124: C                                              !IN BALLOON.  INFLATED?
                    125:        CALL RSPEAK(531)
                    126: C                                              !YES, LANDED.
                    127:        F=RMDESC(0)
                    128: C                                              !DESCRIBE.
                    129:        RETURN
                    130: C
                    131: 6250   CALL NEWSTA(BALLO,532,0,0,0)
                    132: C                                              !NO, BALLOON & CONTENTS DIE.
                    133:        CALL NEWSTA(DBALL,0,BLOC,0,0)
                    134: C                                              !INSERT DEAD BALLOON.
                    135:        AVEHIC(WINNER)=0
                    136: C                                              !NOT IN VEHICLE.
                    137:        CFLAG(CEVBAL)=.FALSE.
                    138: C                                              !DISABLE INTERRUPTS.
                    139:        CFLAG(CEVBRN)=.FALSE.
                    140:        BINFF=0
                    141:        BTIEF=0
                    142:        RETURN
                    143: C
                    144: 6300   BLOC=BLOC-1
                    145: C                                              !NOT IN VAIR1, DESCEND.
                    146:        CALL NEWSTA(BALLO,0,BLOC,0,0)
                    147:        IF(F) GO TO 6400
                    148: C                                              !IS HE IN BALLOON?
                    149:        IF(QLEDGE(HERE)) CALL RSPEAK(533)
                    150: C                                              !IF ON LEDGE, DESCRIBE.
                    151:        RETURN
                    152: C
                    153: 6400   F=MOVETO(BLOC,WINNER)
                    154: C                                              !IN BALLOON, MOVE HIM.
                    155:        CALL RSPEAK(534)
                    156: C                                              !DESCRIBE.
                    157:        F=RMDESC(0)
                    158:        RETURN
                    159: C
                    160: C BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY
                    161: C                                              !
                    162: C
                    163: 6500   IF(BLOC.NE.VAIR4) GO TO 6600
                    164: C                                              !AT VAIR4?
                    165:        CTICK(CEVBRN)=0
                    166:        CTICK(CEVBAL)=0
                    167:        BINFF=0
                    168:        BTIEF=0
                    169:        BLOC=VLBOT
                    170: C                                              !FALL TO BOTTOM.
                    171:        CALL NEWSTA(BALLO,0,0,0,0)
                    172: C                                              !BALLOON & CONTENTS DIE.
                    173:        CALL NEWSTA(DBALL,0,BLOC,0,0)
                    174: C                                              !SUBSTITUTE DEAD BALLOON.
                    175:        IF(F) GO TO 6550
                    176: C                                              !WAS HE IN IT?
                    177:        IF(QLEDGE(HERE)) CALL RSPEAK(535)
                    178: C                                              !IF HE CAN SEE, DESCRIBE.
                    179:        RETURN
                    180: C
                    181: 6550   CALL JIGSUP(536)
                    182: C                                              !IN BALLOON AT CRASH, DIE.
                    183:        RETURN
                    184: C
                    185: 6600   BLOC=BLOC+1
                    186: C                                              !NOT AT VAIR4, GO UP.
                    187:        CALL NEWSTA(BALLO,0,BLOC,0,0)
                    188:        IF(F) GO TO 6650
                    189: C                                              !IN BALLOON?
                    190:        IF(QLEDGE(HERE)) CALL RSPEAK(537)
                    191: C                                              !CAN HE SEE IT?
                    192:        RETURN
                    193: C
                    194: 6650   F=MOVETO(BLOC,WINNER)
                    195: C                                              !MOVE PLAYER.
                    196:        CALL RSPEAK(538)
                    197: C                                              !DESCRIBE.
                    198:        F=RMDESC(0)
                    199:        RETURN
                    200: C
                    201: C ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
                    202: C
                    203: 6700   BLOC=BLOC+(VAIR2-LEDG2)
                    204: C                                              !MOVE TO MIDAIR.
                    205:        CALL NEWSTA(BALLO,0,BLOC,0,0)
                    206:        IF(F) GO TO 6750
                    207: C                                              !IN BALLOON?
                    208:        IF(QLEDGE(HERE)) CALL RSPEAK(539)
                    209: C                                              !NO, STRANDED.
                    210:        CTICK(CEVVLG)=10
                    211: C                                              !MATERIALIZE GNOME.
                    212:        RETURN
                    213: C
                    214: 6750   F=MOVETO(BLOC,WINNER)
                    215: C                                              !MOVE TO NEW ROOM.
                    216:        CALL RSPEAK(540)
                    217: C                                              !DESCRIBE.
                    218:        F=RMDESC(0)
                    219:        RETURN
                    220: C
                    221: C AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
                    222: C
                    223: 6800   IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
                    224:        BLOC=VAIR1
                    225: C                                              !INFLATED AND OPEN,
                    226:        CALL NEWSTA(BALLO,0,BLOC,0,0)
                    227: C                                              !GO UP TO VAIR1.
                    228:        IF(F) GO TO 6850
                    229: C                                              !IN BALLOON?
                    230:        IF(QLEDGE(HERE)) CALL RSPEAK(541)
                    231: C                                              !IF CAN SEE, DESCRIBE.
                    232:        RETURN
                    233: C
                    234: 6850   F=MOVETO(BLOC,WINNER)
                    235: C                                              !MOVE PLAYER.
                    236:        CALL RSPEAK(542)
                    237:        F=RMDESC(0)
                    238:        RETURN
                    239: C CEVAPP, PAGE 4
                    240: C
                    241: C CEV7--       BALLOON BURNUP
                    242: C
                    243: 7000   DO 7100 I=1,OLNT
                    244: C                                              !FIND BURNING OBJECT
                    245:          IF((RECEP.EQ.OCAN(I)).AND.((and(OFLAG1(I),FLAMBT)).NE.0))
                    246: &              GO TO 7200
                    247: 7100   CONTINUE
                    248:        CALL BUG(4,0)
                    249: C
                    250: 7200   CALL NEWSTA(I,0,0,0,0)
                    251: C                                              !VANISH OBJECT.
                    252:        BINFF=0
                    253: C                                              !UNINFLATED.
                    254:        IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))
                    255: C                                              !DESCRIBE.
                    256:        RETURN
                    257: C
                    258: C CEV8--       FUSE FUNCTION
                    259: C
                    260: 8000   IF(OCAN(FUSE).NE.BRICK) GO TO 8500
                    261: C                                              !IGNITED BRICK?
                    262:        BR=OROOM(BRICK)
                    263: C                                              !GET BRICK ROOM.
                    264:        BC=OCAN(BRICK)
                    265: C                                              !GET CONTAINER.
                    266:        IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
                    267:        CALL NEWSTA(FUSE,0,0,0,0)
                    268: C                                              !KILL FUSE.
                    269:        CALL NEWSTA(BRICK,0,0,0,0)
                    270: C                                              !KILL BRICK.
                    271:        IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100
                    272: C                                              !BRICK ELSEWHERE?
                    273: C
                    274:        RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
                    275:        RRAND(HERE)=114
                    276: C                                              !MUNG ROOM.
                    277:        CALL JIGSUP(150)
                    278: C                                              !DEAD.
                    279:        RETURN
                    280: C
                    281: 8100   CALL RSPEAK(151)
                    282: C                                              !BOOM.
                    283:        MUNGRM=BR
                    284: C                                              !SAVE ROOM THAT BLEW.
                    285:        CTICK(CEVSAF)=5
                    286: C                                              !SET SAFE INTERRUPT.
                    287:        IF(BR.NE.MSAFE) GO TO 8200
                    288: C                                              !BLEW SAFE ROOM?
                    289:        IF(BC.NE.SSLOT) RETURN
                    290: C                                              !WAS BRICK IN SAFE?
                    291:        CALL NEWSTA(SSLOT,0,0,0,0)
                    292: C                                              !KILL SLOT.
                    293:        OFLAG2(SAFE)=or(OFLAG2(SAFE),OPENBT)
                    294:        SAFEF=.TRUE.
                    295: C                                              !INDICATE SAFE BLOWN.
                    296:        RETURN
                    297: C
                    298: 8200   DO 8250 I=1,OLNT
                    299: C                                              !BLEW WRONG ROOM.
                    300:          IF(QHERE(I,BR) .AND. ((and(OFLAG1(I),TAKEBT)).NE.0))
                    301: &              CALL NEWSTA(I,0,0,0,0)
                    302: 8250   CONTINUE
                    303:        IF(BR.NE.LROOM) RETURN
                    304: C                                              !BLEW LIVING ROOM?
                    305:        DO 8300 I=1,OLNT
                    306:          IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)
                    307: C                                              !KILL TROPHY CASE.
                    308: 8300   CONTINUE
                    309:        RETURN
                    310: C
                    311: 8500   IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
                    312: &              CALL RSPEAK(152)
                    313:        CALL NEWSTA(FUSE,0,0,0,0)
                    314: C                                              !KILL FUSE.
                    315:        RETURN
                    316: C CEVAPP, PAGE 5
                    317: C
                    318: C CEV9--       LEDGE MUNGE.
                    319: C
                    320: 9000   RFLAG(LEDG4)=or(RFLAG(LEDG4),RMUNG)
                    321:        RRAND(LEDG4)=109
                    322:        IF(HERE.EQ.LEDG4) GO TO 9100
                    323: C                                              !WAS HE THERE?
                    324:        CALL RSPEAK(110)
                    325: C                                              !NO, NARROW ESCAPE.
                    326:        RETURN
                    327: C
                    328: 9100   IF(AVEHIC(WINNER).NE.0) GO TO 9200
                    329: C                                              !IN VEHICLE?
                    330:        CALL JIGSUP(111)
                    331: C                                              !NO, DEAD.
                    332:        RETURN
                    333: C
                    334: 9200   IF(BTIEF.NE.0) GO TO 9300
                    335: C                                              !TIED TO LEDGE?
                    336:        CALL RSPEAK(112)
                    337: C                                              !NO, NO PLACE TO LAND.
                    338:        RETURN
                    339: C
                    340: 9300   BLOC=VLBOT
                    341: C                                              !YES, CRASH BALLOON.
                    342:        CALL NEWSTA(BALLO,0,0,0,0)
                    343: C                                              !BALLOON & CONTENTS DIE.
                    344:        CALL NEWSTA(DBALL,0,BLOC,0,0)
                    345: C                                              !INSERT DEAD BALLOON.
                    346:        BTIEF=0
                    347:        BINFF=0
                    348:        CFLAG(CEVBAL)=.FALSE.
                    349:        CFLAG(CEVBRN)=.FALSE.
                    350:        CALL JIGSUP(113)
                    351: C                                              !DEAD
                    352:        RETURN
                    353: C
                    354: C CEV10--      SAFE MUNG.
                    355: C
                    356: 10000  RFLAG(MUNGRM)=or(RFLAG(MUNGRM),RMUNG)
                    357:        RRAND(MUNGRM)=114
                    358:        IF(HERE.EQ.MUNGRM) GO TO 10100
                    359: C                                              !IS HE PRESENT?
                    360:        CALL RSPEAK(115)
                    361: C                                              !LET HIM KNOW.
                    362:        IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8
                    363: C                                              !START LEDGE CLOCK.
                    364:        RETURN
                    365: C
                    366: 10100  I=116
                    367: C                                              !HE'S DEAD,
                    368:        IF((and(RFLAG(HERE),RHOUSE)).NE.0) I=117
                    369:        CALL JIGSUP(I)
                    370: C                                              !LET HIM KNOW.
                    371:        RETURN
                    372: C CEVAPP, PAGE 6
                    373: C
                    374: C CEV11--      VOLCANO GNOME
                    375: C
                    376: 11000  IF(QLEDGE(HERE)) GO TO 11100
                    377: C                                              !IS HE ON LEDGE?
                    378:        CTICK(CEVVLG)=1
                    379: C                                              !NO, WAIT A WHILE.
                    380:        RETURN
                    381: C
                    382: 11100  CALL NEWSTA(GNOME,118,HERE,0,0)
                    383: C                                              !YES, MATERIALIZE GNOME.
                    384:        RETURN
                    385: C
                    386: C CEV12--      VOLCANO GNOME DISAPPEARS
                    387: C
                    388: 12000  CALL NEWSTA(GNOME,149,0,0,0)
                    389: C                                              !DISAPPEAR THE GNOME.
                    390:        RETURN
                    391: C
                    392: C CEV13--      BUCKET.
                    393: C
                    394: 13000  IF(OCAN(WATER).EQ.BUCKE)
                    395: &              CALL NEWSTA(WATER,0,0,0,0)
                    396:        RETURN
                    397: C
                    398: C CEV14--      SPHERE.  IF EXPIRES, HE'S TRAPPED.
                    399: C
                    400: 14000  RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
                    401:        RRAND(CAGER)=147
                    402:        CALL JIGSUP(148)
                    403: C                                              !MUNG PLAYER.
                    404:        RETURN
                    405: C
                    406: C CEV15--      END GAME HERALD.
                    407: C
                    408: 15000  ENDGMF=.TRUE.
                    409: C                                              !WE'RE IN ENDGAME.
                    410:        CALL RSPEAK(119)
                    411: C                                              !INFORM OF ENDGAME.
                    412:        RETURN
                    413: C CEVAPP, PAGE 7
                    414: C
                    415: C CEV16--      FOREST MURMURS
                    416: C
                    417: 16000  CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.
                    418: &              ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
                    419:        IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
                    420:        RETURN
                    421: C
                    422: C CEV17--      SCOL ALARM
                    423: C
                    424: 17000  IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.
                    425: C                                              !IF IN TWI, GNOME.
                    426:        IF(HERE.EQ.BKVAU) CALL JIGSUP(636)
                    427: C                                              !IF IN VAU, DEAD.
                    428:        RETURN
                    429: C
                    430: C CEV18--      ENTER GNOME OF ZURICH
                    431: C
                    432: 18000  CFLAG(CEVZGO)=.TRUE.
                    433: C                                              !EXITS, TOO.
                    434:        CALL NEWSTA(ZGNOM,0,BKTWI,0,0)
                    435: C                                              !PLACE IN TWI.
                    436:        IF(HERE.EQ.BKTWI) CALL RSPEAK(637)
                    437: C                                              !ANNOUNCE.
                    438:        RETURN
                    439: C
                    440: C CEV19--      EXIT GNOME
                    441: C
                    442: 19000  CALL NEWSTA(ZGNOM,0,0,0,0)
                    443: C                                              !VANISH.
                    444:        IF(HERE.EQ.BKTWI) CALL RSPEAK(638)
                    445: C                                              !ANNOUNCE.
                    446:        RETURN
                    447: C CEVAPP, PAGE 8
                    448: C
                    449: C CEV20--      START OF ENDGAME
                    450: C
                    451: 20000  IF(SPELLF) GO TO 20200
                    452: C                                              !SPELL HIS WAY IN?
                    453:        IF(HERE.NE.CRYPT) RETURN
                    454: C                                              !NO, STILL IN TOMB?
                    455:        IF(.NOT.LIT(HERE)) GO TO 20100
                    456: C                                              !LIGHTS OFF?
                    457:        CTICK(CEVSTE)=3
                    458: C                                              !RESCHEDULE.
                    459:        RETURN
                    460: C
                    461: 20100  CALL RSPEAK(727)
                    462: C                                              !ANNOUNCE.
                    463: 20200  DO 20300 I=1,OLNT
                    464: C                                              !STRIP HIM OF OBJS.
                    465:          CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
                    466: 20300  CONTINUE
                    467:        CALL NEWSTA(LAMP,0,0,0,PLAYER)
                    468: C                                              !GIVE HIM LAMP.
                    469:        CALL NEWSTA(SWORD,0,0,0,PLAYER)
                    470: C                                              !GIVE HIM SWORD.
                    471: C
                    472:        OFLAG1(LAMP)=and((or(OFLAG1(LAMP),LITEBT)), not(ONBT))
                    473:        OFLAG2(LAMP)=or(OFLAG2(LAMP),TCHBT)
                    474:        CFLAG(CEVLNT)=.FALSE.
                    475: C                                              !LAMP IS GOOD AS NEW.
                    476:        CTICK(CEVLNT)=350
                    477:        ORLAMP=0
                    478:        OFLAG2(SWORD)=or(OFLAG2(SWORD),TCHBT)
                    479:        SWDACT=.TRUE.
                    480:        SWDSTA=0
                    481: C
                    482:        THFACT=.FALSE.
                    483: C                                              !THIEF GONE.
                    484:        ENDGMF=.TRUE.
                    485: C                                              !ENDGAME RUNNING.
                    486:        CFLAG(CEVMAT)=.FALSE.
                    487: C                                              !MATCHES GONE,
                    488:        CFLAG(CEVCND)=.FALSE.
                    489: C                                              !CANDLES GONE.
                    490: C
                    491:        CALL SCRUPD(RVAL(CRYPT))
                    492: C                                              !SCORE CRYPT,
                    493:        RVAL(CRYPT)=0
                    494: C                                              !BUT ONLY ONCE.
                    495:        F=MOVETO(TSTRS,WINNER)
                    496: C                                              !TO TOP OF STAIRS,
                    497:        F=RMDESC(3)
                    498: C                                              !AND DESCRIBE.
                    499:        RETURN
                    500: C                                              !BAM
                    501: C                                              !
                    502: C
                    503: C CEV21--      MIRROR CLOSES.
                    504: C
                    505: 21000  MRPSHF=.FALSE.
                    506: C                                              !BUTTON IS OUT.
                    507:        MROPNF=.FALSE.
                    508: C                                              !MIRROR IS CLOSED.
                    509:        IF(HERE.EQ.MRANT) CALL RSPEAK(728)
                    510: C                                              !DESCRIBE BUTTON.
                    511:        IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
                    512: &              CALL RSPEAK(729)
                    513:        RETURN
                    514: C CEVAPP, PAGE 9
                    515: C
                    516: C CEV22--      DOOR CLOSES.
                    517: C
                    518: 22000  IF(WDOPNF) CALL RSPEAK(730)
                    519: C                                              !DESCRIBE.
                    520:        WDOPNF=.FALSE.
                    521: C                                              !CLOSED.
                    522:        RETURN
                    523: C
                    524: C CEV23--      INQUISITOR'S QUESTION
                    525: C
                    526: 23000  IF(AROOM(PLAYER).NE.FDOOR) RETURN
                    527: C                                              !IF PLAYER LEFT, DIE.
                    528:        CALL RSPEAK(769)
                    529:        CALL RSPEAK(770+QUESNO)
                    530:        CTICK(CEVINQ)=2
                    531:        RETURN
                    532: C
                    533: C CEV24--      MASTER FOLLOWS
                    534: C
                    535: 24000  IF(AROOM(AMASTR).EQ.HERE) RETURN
                    536: C                                              !NO MOVEMENT, DONE.
                    537:        IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
                    538:        IF(FOLLWF) CALL RSPEAK(811)
                    539: C                                              !WONT GO TO CELLS.
                    540:        FOLLWF=.FALSE.
                    541:        RETURN
                    542: C
                    543: 24100  FOLLWF=.TRUE.
                    544: C                                              !FOLLOWING.
                    545:        I=812
                    546: C                                              !ASSUME CATCHES UP.
                    547:        DO 24200 J=XMIN,XMAX,XMIN
                    548:          IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
                    549: &              I=813
                    550: 24200  CONTINUE
                    551:        CALL RSPEAK(I)
                    552:        CALL NEWSTA(MASTER,0,HERE,0,0)
                    553: C                                              !MOVE MASTER OBJECT.
                    554:        AROOM(AMASTR)=HERE
                    555: C                                              !MOVE MASTER PLAYER.
                    556:        RETURN
                    557: C
                    558:        END
                    559: C LITINT-      LIGHT INTERRUPT PROCESSOR
                    560: C
                    561: C DECLARATIONS
                    562: C
                    563:        SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
                    564:        IMPLICIT INTEGER (A-Z)
                    565:        INTEGER TICKS(TICKLN)
                    566: #include "gamestate.h"
                    567: #include "objects.h"
                    568: #include "oflags.h"
                    569: #include "clock.h"
                    570: C
                    571:        CTR=CTR+1
                    572: C                                              !ADVANCE STATE CNTR.
                    573:        CTICK(CEV)=TICKS(CTR)
                    574: C                                              !RESET INTERRUPT.
                    575:        IF(CTICK(CEV).NE.0) GO TO 100
                    576: C                                              !EXPIRED?
                    577:        OFLAG1(OBJ)=and(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT))
                    578:        IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
                    579: &              CALL RSPSUB(293,ODESC2(OBJ))
                    580:        RETURN
                    581: C
                    582: 100    IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
                    583: &              CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
                    584:        RETURN
                    585: C
                    586:        END

unix.superglobalmegacorp.com

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