# 2.11BSD#431 - /usr/src/new/PORT/dungeon/clockr.F

       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

Last modified: 1988-10-21 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 683 |