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

       1: C AAPPLI- APPLICABLES FOR ADVENTURERS
       2: C
       3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
       4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
       5: C WRITTEN BY R. M. SUPNIK
       6: C
       7: C DECLARATIONS
       8: C
       9:         LOGICAL FUNCTION AAPPLI(RI)
      10:         IMPLICIT INTEGER (A-Z)
      11:         LOGICAL F,MOVETO
      12: #include "parser.h"
      13: #include "gamestate.h"
      14: #include "rooms.h"
      15: #include "rflag.h"
      16: #include "rindex.h"
      17: #include "xsrch.h"
      18: #include "objects.h"
      19: #include "oflags.h"
      20: #include "oindex.h"
      21: #include "clock.h"
      22: #include "advers.h"
      23: #include "verbs.h"
      24: #include "flags.h"
      25: C AAPPLI, PAGE 2
      26: C
      27:         IF(RI.EQ.0) GO TO 10
      28: C						!IF ZERO, NO APP.
      29:         AAPPLI=.TRUE.
      30: C						!ASSUME WINS.
      31:         GO TO (1000,2000),RI
      32: C						!BRANCH ON ADV.
      33:         CALL BUG(11,RI)
      34: C
      35: C COMMON FALSE RETURN.
      36: C
      37: 10      AAPPLI=.FALSE.
      38:         RETURN
      39: C
      40: C A1--	ROBOT.  PROCESS MOST COMMANDS GIVEN TO ROBOT.
      41: C
      42: 1000    IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
      43:         CFLAG(CEVSPH)=.FALSE.
      44: C						!ROBOT RAISED CAGE.
      45:         WINNER=PLAYER
      46: C						!RESET FOR PLAYER.
      47:         F=MOVETO(CAGER,WINNER)
      48: C						!MOVE TO NEW ROOM.
      49:         CALL NEWSTA(CAGE,567,CAGER,0,0)
      50: C						!INSTALL CAGE IN ROOM.
      51:         CALL NEWSTA(ROBOT,0,CAGER,0,0)
      52: C						!INSTALL ROBOT IN ROOM.
      53:         AROOM(AROBOT)=CAGER
      54: C						!ALSO MOVE ROBOT/ADV.
      55:         CAGESF=.TRUE.
      56: C						!CAGE SOLVED.
      57:         OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
      58:         OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
      59:         RETURN
      60: C
      61: 1200    IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
      62:         CALL RSPEAK(568)
      63: C						!EAT OR DRINK, JOKE.
      64:         RETURN
      65: C
      66: 1300    IF(PRSA.NE.READW) GO TO 1400
      67: C						!READ,
      68:         CALL RSPEAK(569)
      69: C						!JOKE.
      70:         RETURN
      71: C
      72: 1400    IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
      73: &        .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
      74: &        .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
      75:         CALL RSPEAK(570)
      76: C						!JOKE.
      77:         RETURN
      78: C AAPPLI, PAGE 3
      79: C
      80: C A2--	MASTER.  PROCESS MOST COMMANDS GIVEN TO MASTER.
      81: C
      82: 2000    IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
      83:         CALL RSPEAK(783)
      84: C						!NO MASTER YET.
      85:         RETURN
      86: C
      87: 2100    IF(PRSA.NE.WALKW) GO TO 2200
      88: C						!WALK?
      89:         I=784
      90: C						!ASSUME WONT.
      91:         IF(((HERE.EQ.SCORR).AND.
      92: &               ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
      93: &         ((HERE.EQ.NCORR).AND.
      94: &               ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
      95: &               I=785
      96:         CALL RSPEAK(I)
      97:         RETURN
      98: C
      99: 2200    IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
     100: &         (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
     101: &         (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
     102: &         (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
     103: &         (PRSA.EQ.KILLW)) GO TO 10
     104:         CALL RSPEAK(786)
     105: C						!MASTER CANT DO IT.
     106:         RETURN
     107: C
     108:         END
     109: C THIEFD-	INTERMOVE THIEF DEMON
     110: C
     111: C DECLARATIONS
     112: C
     113:         SUBROUTINE THIEFD
     114:         IMPLICIT INTEGER (A-Z)
     115:         LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
     116: #include "gamestate.h"
     117: C
     118: #include "debug.h"
     119: #include "rooms.h"
     120: #include "rflag.h"
     121: #include "rindex.h"
     122: #include "objects.h"
     123: #include "oflags.h"
     124: #include "oindex.h"
     125: #include "villians.h"
     126: #include "flags.h"
     127: C
     128: C FUNCTIONS AND DATA
     129: C
     130:         QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
     131: C THIEFD, PAGE 2
     132: C
     133: #ifdef debug
     134:         DFLAG=and(PRSFLG, 32768).NE.0
     135: #endif debug
     136: C						!SET UP DETAIL FLAG.
     137:         ONCE=.FALSE.
     138: C						!INIT FLAG.
     139: 1025    RHERE=OROOM(THIEF)
     140: C						!VISIBLE POS.
     141:         IF(RHERE.NE.0) THFPOS=RHERE
     142: C
     143:         IF(THFPOS.EQ.HERE) GO TO 1100
     144: C						!THIEF IN WIN RM?
     145:         IF(THFPOS.NE.TREAS) GO TO 1400
     146: C						!THIEF NOT IN TREAS?
     147: C
     148: C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
     149: C
     150: #ifdef debug
     151:         IF(DFLAG) PRINT 10
     152: #ifdef NOCC
     153: 10      FORMAT('THIEFD-- IN TREASURE ROOM')
     154: #else NOCC
     155: 10      FORMAT(' THIEFD-- IN TREASURE ROOM')
     156: #endif
     157: #endif debug
     158:         IF(RHERE.EQ.0) GO TO 1050
     159: C						!VISIBLE?
     160:         CALL NEWSTA(THIEF,0,0,0,0)
     161: C						!YES, VANISH.
     162:         RHERE=0
     163:         IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
     164: 1050    I=ROBADV(-THIEF,THFPOS,0,0)
     165: C						!DROP VALUABLES.
     166:         IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
     167:         GO TO 1700
     168: C
     169: C THIEF AND WINNER IN SAME ROOM.
     170: C
     171: 1100    IF(THFPOS.EQ.TREAS) GO TO 1700
     172: C						!IF TREAS ROOM, NOTHING.
     173:         IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
     174: #ifdef debug
     175:         IF(DFLAG) PRINT 20
     176: #ifdef NOCC
     177: 20      FORMAT('THIEFD-- IN ADV ROOM')
     178: #else NOCC
     179: 20      FORMAT(' THIEFD-- IN ADV ROOM')
     180: #endif NOCC
     181: #endif debug
     182:         IF(THFFLG) GO TO 1300
     183: C						!THIEF ANNOUNCED?
     184:         IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
     185: C						!IF INVIS AND 30%.
     186:         IF(OCAN(STILL).NE.THIEF) GO TO 1700
     187: C						!ABORT IF NO STILLETTO.
     188:         CALL NEWSTA(THIEF,583,THFPOS,0,0)
     189: C						!INSERT THIEF INTO ROOM.
     190:         THFFLG=.TRUE.
     191: C						!THIEF IS ANNOUNCED.
     192:         RETURN
     193: C
     194: 1150    IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
     195: &               GO TO 1200
     196:         IF(WINNIN(THIEF,WINNER)) GO TO 1175
     197: C						!WINNING?
     198:         CALL NEWSTA(THIEF,584,0,0,0)
     199: C						!NO, VANISH THIEF.
     200:         OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
     201:         IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
     202:         RETURN
     203: C
     204: 1175    IF(PROB(90,90)) GO TO 1700
     205: C						!90% CHANCE TO STAY.
     206: C
     207: 1200    IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
     208: C						!IF VISIBLE AND 30%
     209:         CALL NEWSTA(THIEF,585,0,0,0)
     210: C						!VANISH THIEF.
     211:         IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
     212:         RETURN
     213: C
     214: 1300    IF(RHERE.EQ.0) GO TO 1700
     215: C						!ANNOUNCED.  VISIBLE?
     216: 1250    IF(PROB(70,70)) RETURN
     217: C						!70% CHANCE TO DO NOTHING.
     218:         THFFLG=.TRUE.
     219:         NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
     220:         I=586
     221: C						!ROBBED EM.
     222:         IF(RHERE.NE.0) I=588
     223: C						!WAS HE VISIBLE?
     224:         IF(NR.NE.0) I=I+1
     225: C						!DID HE GET ANYTHING?
     226:         CALL NEWSTA(THIEF,I,0,0,0)
     227: C						!VANISH THIEF.
     228:         IF(QSTILL(THFPOS))
     229: &               CALL NEWSTA(STILL,0,0,THIEF,0)
     230:         IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
     231:         RHERE=0
     232:         GO TO 1700
     233: C						!ONWARD.
     234: C
     235: C NOT IN ADVENTURERS ROOM.
     236: C
     237: 1400    CALL NEWSTA(THIEF,0,0,0,0)
     238: C						!VANISH.
     239:         RHERE=0
     240: #ifdef debug
     241:         IF(DFLAG) PRINT 30,THFPOS
     242: #ifdef NOCC
     243: 30      FORMAT('THIEFD-- IN ROOM ',I4)
     244: #else NOCC
     245: 30      FORMAT(' THIEFD-- IN ROOM ',I4)
     246: #endif NOCC
     247: #endif debug
     248:         IF(QSTILL(THFPOS))
     249: &               CALL NEWSTA(STILL,0,0,THIEF,0)
     250:         IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
     251:         I=ROBRM(THFPOS,75,0,0,-THIEF)
     252: C						!ROB ROOM 75%.
     253:         IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
     254: &               (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
     255:         DO 1450 I=1,OLNT
     256: C						!BOTH IN MAZE.
     257:           IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
     258: &               (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
     259: &               GO TO 1450
     260:           CALL RSPSUB(590,ODESC2(I))
     261: C						!TAKE OBJECT.
     262:           IF(PROB(40,20)) GO TO 1700
     263:           CALL NEWSTA(I,0,0,0,-THIEF)
     264: C						!MOST OF THE TIME.
     265:           OFLAG2(I)=or(OFLAG2(I),TCHBT)
     266:           GO TO 1700
     267: 1450    CONTINUE
     268:         GO TO 1700
     269: C
     270: 1500    DO 1550 I=1,OLNT
     271: C						!NOT IN MAZE.
     272:           IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
     273: &               (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
     274: &               GO TO 1550
     275:           CALL NEWSTA(I,0,0,0,-THIEF)
     276:           OFLAG2(I)=or(OFLAG2(I),TCHBT)
     277:           GO TO 1700
     278: 1550    CONTINUE
     279: C
     280: C NOW MOVE TO NEW ROOM.
     281: C
     282: 1700    IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
     283:         IF(ONCE) GO TO 1800
     284:         ONCE=.NOT.ONCE
     285: 1750    THFPOS=THFPOS-1
     286: C						!NEXT ROOM.
     287:         IF(THFPOS.LE.0) THFPOS=RLNT
     288:         IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
     289: &               GO TO 1750
     290:         THFFLG=.FALSE.
     291: C						!NOT ANNOUNCED.
     292:         GO TO 1025
     293: C						!ONCE MORE.
     294: C
     295: C ALL DONE.
     296: C
     297: 1800    IF(THFPOS.EQ.TREAS) RETURN
     298: C						!IN TREASURE ROOM?
     299:         J=591
     300: C						!NO, DROP STUFF.
     301:         IF(THFPOS.NE.HERE) J=0
     302:         DO 1850 I=1,OLNT
     303:           IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
     304: &               (OTVAL(I).GT.0)) GO TO 1850
     305:           CALL NEWSTA(I,J,THFPOS,0,0)
     306:           J=0
     307: 1850    CONTINUE
     308:         RETURN
     309: C
     310:         END

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