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

1.1       root        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

unix.superglobalmegacorp.com

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