Annotation of 43BSDReno/games/dungeon/villns.F, revision 1.1

1.1     ! root        1: C TROLLP-      TROLL FUNCTION
        !             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 TROLLP(ARG)
        !            10:        IMPLICIT INTEGER (A-Z)
        !            11:        LOGICAL QHERE,PROB
        !            12: #include "parser.h"
        !            13: #include "gamestate.h"
        !            14: #include "objects.h"
        !            15: #include "oflags.h"
        !            16: #include "oindex.h"
        !            17: #include "verbs.h"
        !            18: #include "flags.h"
        !            19: C TROLLP, PAGE 2
        !            20: C
        !            21:        TROLLP=.TRUE.
        !            22: C                                              !ASSUME WINS.
        !            23:        IF(PRSA.NE.FIGHTW) GO TO 1100
        !            24: C                                              !FIGHT?
        !            25:        IF(OCAN(AXE).EQ.TROLL) GO TO 10
        !            26: C                                              !GOT AXE?  NOTHING.
        !            27:        I=433
        !            28: C                                              !ASSUME CANT GET.
        !            29:        IF(.NOT.QHERE(AXE,HERE)) GO TO 1050
        !            30: C                                              !HERE?
        !            31:        I=434
        !            32: C                                              !YES, RECOVER.
        !            33:        CALL NEWSTA(AXE,0,0,TROLL,0)
        !            34: 1050   IF(QHERE(TROLL,HERE)) CALL RSPEAK(I)
        !            35: C                                              !IF PLAYER HERE.
        !            36:        RETURN
        !            37: C
        !            38: 1100   IF(PRSA.NE.DEADXW) GO TO 1200
        !            39: C                                              !DEAD?
        !            40:        TROLLF=.TRUE.
        !            41: C                                              !PERMIT EXITS.
        !            42:        RETURN
        !            43: C
        !            44: 1200   IF(PRSA.NE.OUTXW) GO TO 1300
        !            45: C                                              !OUT?
        !            46:        TROLLF=.TRUE.
        !            47: C                                              !PERMIT EXITS.
        !            48:        OFLAG1(AXE)=and(OFLAG1(AXE), not(VISIBT))
        !            49:        ODESC1(TROLL)=435
        !            50: C                                              !TROLL OUT.
        !            51:        RETURN
        !            52: C
        !            53: 1300   IF(PRSA.NE.INXW) GO TO 1400
        !            54: C                                              !WAKE UP?
        !            55:        TROLLF=.FALSE.
        !            56: C                                              !FORBID EXITS.
        !            57:        OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT)
        !            58:        ODESC1(TROLL)=436
        !            59: C                                              !TROLL IN.
        !            60:        IF(QHERE(TROLL,HERE)) CALL RSPEAK(437)
        !            61:        RETURN
        !            62: C
        !            63: 1400   IF(PRSA.NE.FRSTQW) GO TO 1500
        !            64: C                                              !FIRST ENCOUNTER?
        !            65:        TROLLP=PROB(33,66)
        !            66: C                                              !33% TRUE UNLESS BADLK.
        !            67:        RETURN
        !            68: C
        !            69: 1500   IF((PRSA.NE.MOVEW).AND.(PRSA.NE.TAKEW).AND.(PRSA.NE.MUNGW)
        !            70: &              .AND.(PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)) GO TO 2000
        !            71:        IF(OCAPAC(TROLL).GE.0) GO TO 1550
        !            72: C                                              !TROLL OUT?
        !            73:        OCAPAC(TROLL)=-OCAPAC(TROLL)
        !            74: C                                              !YES, WAKE HIM.
        !            75:        OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT)
        !            76:        TROLLF=.FALSE.
        !            77:        ODESC1(TROLL)=436
        !            78:        CALL RSPEAK(437)
        !            79: C
        !            80: 1550   IF((PRSA.NE.TAKEW).AND.(PRSA.NE.MOVEW)) GO TO 1600
        !            81:        CALL RSPEAK(438)
        !            82: C                                              !JOKE.
        !            83:        RETURN
        !            84: C
        !            85: 1600   IF(PRSA.NE.MUNGW) GO TO 1700
        !            86: C                                              !MUNG?
        !            87:        CALL RSPEAK(439)
        !            88: C                                              !JOKE.
        !            89:        RETURN
        !            90: C
        !            91: 1700   IF(PRSO.EQ.0) GO TO 10
        !            92: C                                              !NO OBJECT?
        !            93:        I=440
        !            94: C                                              !ASSUME THROW.
        !            95:        IF(PRSA.EQ.GIVEW) I=441
        !            96: C                                              !GIVE?
        !            97:        CALL RSPSUB(I,ODESC2(PRSO))
        !            98: C                                              !TROLL TAKES.
        !            99:        IF(PRSO.EQ.KNIFE) GO TO 1900
        !           100: C                                              !OBJ KNIFE?
        !           101:        CALL NEWSTA(PRSO,442,0,0,0)
        !           102: C                                              !NO, EATS IT.
        !           103:        RETURN
        !           104: C
        !           105: 1900   CALL RSPEAK(443)
        !           106: C                                              !KNIFE, THROWS IT BACK
        !           107:        OFLAG2(TROLL)=or(OFLAG2(TROLL),FITEBT)
        !           108:        RETURN
        !           109: C
        !           110: 2000   IF(.NOT.TROLLF.OR.(PRSA.NE.HELLOW)) GO TO 10
        !           111:        CALL RSPEAK(366)
        !           112: C                                              !TROLL OUT.
        !           113:        RETURN
        !           114: C
        !           115: 10     TROLLP=.FALSE.
        !           116: C                                              !COULDNT HANDLE IT.
        !           117:        RETURN
        !           118:        END
        !           119: C CYCLOP-      CYCLOPS FUNCTION
        !           120: C
        !           121: C DECLARATIONS
        !           122: C
        !           123:        LOGICAL FUNCTION CYCLOP(ARG)
        !           124:        IMPLICIT INTEGER (A-Z)
        !           125: #include "parser.h"
        !           126: #include "gamestate.h"
        !           127: #include "objects.h"
        !           128: #include "oflags.h"
        !           129: #include "oindex.h"
        !           130: #include "verbs.h"
        !           131: #include "flags.h"
        !           132: C CYCLOP, PAGE 2
        !           133: C
        !           134:        CYCLOP=.TRUE.
        !           135: C                                              !ASSUME WINS.
        !           136:        IF(.NOT.CYCLOF) GO TO 100
        !           137: C                                              !ASLEEP?
        !           138:        IF((PRSA.NE.ALARMW).AND.(PRSA.NE.MUNGW).AND.(PRSA.NE.HELLOW).AND.
        !           139: &              (PRSA.NE.BURNW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW))
        !           140: &               GO TO 10
        !           141:        CYCLOF=.FALSE.
        !           142: C                                              !WAKE CYCLOPS.
        !           143:        CALL RSPEAK(187)
        !           144: C                                              !DESCRIBE.
        !           145:        RVCYC=IABS(RVCYC)
        !           146:        OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),FITEBT),not(SLEPBT))
        !           147:        RETURN
        !           148: C
        !           149: 100    IF((PRSA.EQ.FIGHTW).OR.(PRSA.EQ.FRSTQW)) GO TO 10
        !           150:        IF(IABS(RVCYC).LE.5) GO TO 200
        !           151: C                                              !ANNOYED TOO MUCH?
        !           152:        RVCYC=0
        !           153: C                                              !RESTART COUNT.
        !           154:        CALL JIGSUP(188)
        !           155: C                                              !YES, EATS PLAYER.
        !           156:        RETURN
        !           157: C
        !           158: 200    IF(PRSA.NE.GIVEW) GO TO 500
        !           159: C                                              !GIVE?
        !           160:        IF((PRSO.NE.FOOD).OR.(RVCYC.LT.0)) GO TO 300
        !           161: C                                              !FOOD WHEN HUNGRY?
        !           162:        CALL NEWSTA(FOOD,189,0,0,0)
        !           163: C                                              !EATS PEPPERS.
        !           164:        RVCYC=MIN0(-1,-RVCYC)
        !           165: C                                              !GETS THIRSTY.
        !           166:        RETURN
        !           167: C
        !           168: 300    IF(PRSO.NE.WATER) GO TO 400
        !           169: C                                              !DRINK WHEN THIRSTY?
        !           170:        IF(RVCYC.GE.0) GO TO 350
        !           171:        CALL NEWSTA(PRSO,190,0,0,0)
        !           172: C                                              !DRINKS AND
        !           173:        CYCLOF=.TRUE.
        !           174: C                                              !FALLS ASLEEP.
        !           175:        OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),SLEPBT),not(FITEBT))
        !           176:        RETURN
        !           177: C
        !           178: 350    CALL RSPEAK(191)
        !           179: C                                              !NOT THIRSTY.
        !           180: 10     CYCLOP=.FALSE.
        !           181: C                                              !FAILS.
        !           182:        RETURN
        !           183: C
        !           184: 400    I=192
        !           185: C                                              !ASSUME INEDIBLE.
        !           186:        IF(PRSO.EQ.GARLI) I=193
        !           187: C                                              !GARLIC IS JOKE.
        !           188: 450    CALL RSPEAK(I)
        !           189: C                                              !DISDAIN IT.
        !           190:        IF(RVCYC.LT.0) RVCYC=RVCYC-1
        !           191:        IF(RVCYC.GE.0) RVCYC=RVCYC+1
        !           192:        IF(.NOT.CYCLOF) CALL RSPEAK(193+IABS(RVCYC))
        !           193:        RETURN
        !           194: C
        !           195: 500    I=0
        !           196: C                                              !ASSUME NOT HANDLED.
        !           197:        IF(PRSA.EQ.HELLOW) GO TO 450
        !           198: C                                              !HELLO IS NO GO.
        !           199:        IF((PRSA.EQ.THROWW).OR.(PRSA.EQ.MUNGW)) I=200+RND(2)
        !           200:        IF(PRSA.EQ.TAKEW) I=202
        !           201:        IF(PRSA.EQ.TIEW) I=203
        !           202:        IF(I) 10,10,450
        !           203: C                                              !SEE IF HANDLED.
        !           204: C
        !           205:        END
        !           206: C THIEFP-      THIEF FUNCTION
        !           207: C
        !           208: C DECLARATIONS
        !           209: C
        !           210:        LOGICAL FUNCTION THIEFP(ARG)
        !           211:        IMPLICIT INTEGER (A-Z)
        !           212:        LOGICAL QHERE,PROB
        !           213: #include "parser.h"
        !           214: #include "gamestate.h"
        !           215: C
        !           216: C ROOMS
        !           217: #include "rindex.h"
        !           218: #include "objects.h"
        !           219: #include "oflags.h"
        !           220: #include "oindex.h"
        !           221: #include "clock.h"
        !           222: 
        !           223: #include "villians.h"
        !           224: #include "verbs.h"
        !           225: #include "flags.h"
        !           226: C THIEFP, PAGE 2
        !           227: C
        !           228:        THIEFP=.TRUE.
        !           229: C                                              !ASSUME WINS.
        !           230:        IF(PRSA.NE.FIGHTW) GO TO 100
        !           231: C                                              !FIGHT?
        !           232:        IF(OCAN(STILL).EQ.THIEF) GO TO 10
        !           233: C                                              !GOT STILLETTO?  F.
        !           234:        IF(QHERE(STILL,THFPOS)) GO TO 50
        !           235: C                                              !CAN HE RECOVER IT?
        !           236:        CALL NEWSTA(THIEF,0,0,0,0)
        !           237: C                                              !NO, VANISH.
        !           238:        IF(QHERE(THIEF,HERE)) CALL RSPEAK(498)
        !           239: C                                              !IF HERO, TELL.
        !           240:        RETURN
        !           241: C
        !           242: 50     CALL NEWSTA(STILL,0,0,THIEF,0)
        !           243: C                                              !YES, RECOVER.
        !           244:        IF(QHERE(THIEF,HERE)) CALL RSPEAK(499)
        !           245: C                                              !IF HERO, TELL.
        !           246:        RETURN
        !           247: C
        !           248: 100    IF(PRSA.NE.DEADXW) GO TO 200
        !           249: C                                              !DEAD?
        !           250:        THFACT=.FALSE.
        !           251: C                                              !DISABLE DEMON.
        !           252:        OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT)
        !           253:        J=0
        !           254:        DO 125 I=1,OLNT
        !           255: C                                              !CARRYING ANYTHING?
        !           256: 125      IF(OADV(I).EQ.-THIEF) J=500
        !           257:        CALL RSPEAK(J)
        !           258: C                                              !TELL IF BOOTY REAPPEARS.
        !           259: C
        !           260:        J=501
        !           261:        DO 150 I=1,OLNT
        !           262: C                                              !LOOP.
        !           263:          IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR.(HERE.NE.TREAS)
        !           264: &              .OR. .NOT.QHERE(I,HERE)) GO TO 135
        !           265:          OFLAG1(I)=or(OFLAG1(I),VISIBT)
        !           266:          CALL RSPSUB(J,ODESC2(I))
        !           267: C                                              !DESCRIBE.
        !           268:          J=502
        !           269:          GO TO 150
        !           270: C
        !           271: 135      IF(OADV(I).EQ.-THIEF) CALL NEWSTA(I,0,HERE,0,0)
        !           272: 150    CONTINUE
        !           273:        RETURN
        !           274: C
        !           275: 200    IF(PRSA.NE.FRSTQW) GO TO 250
        !           276: C                                              !FIRST ENCOUNTER?
        !           277:        THIEFP=PROB(20,75)
        !           278:        RETURN
        !           279: C
        !           280: 250    IF((PRSA.NE.HELLOW).OR.(ODESC1(THIEF).NE.504))
        !           281: &              GO TO 300
        !           282:        CALL RSPEAK(626)
        !           283:        RETURN
        !           284: C
        !           285: 300    IF(PRSA.NE.OUTXW) GO TO 400
        !           286: C                                              !OUT?
        !           287:        THFACT=.FALSE.
        !           288: C                                              !DISABLE DEMON.
        !           289:        ODESC1(THIEF)=504
        !           290: C                                              !CHANGE DESCRIPTION.
        !           291:        OFLAG1(STILL)=and(OFLAG1(STILL),not(VISIBT))
        !           292:        OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT)
        !           293:        RETURN
        !           294: C
        !           295: 400    IF(PRSA.NE.INXW) GO TO 500
        !           296: C                                              !IN?
        !           297:        IF(QHERE(THIEF,HERE)) CALL RSPEAK(505)
        !           298: C                                              !CAN HERO SEE?
        !           299:        THFACT=.TRUE.
        !           300: C                                              !ENABLE DEMON.
        !           301:        ODESC1(THIEF)=503
        !           302: C                                              !CHANGE DESCRIPTION.
        !           303:        OFLAG1(STILL)=or(OFLAG1(STILL),VISIBT)
        !           304:        IF((HERE.EQ.TREAS).AND.QHERE(CHALI,HERE))
        !           305: &              OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
        !           306:        RETURN
        !           307: C
        !           308: 500    IF(PRSA.NE.TAKEW) GO TO 600
        !           309: C                                              !TAKE?
        !           310:        CALL RSPEAK(506)
        !           311: C                                              !JOKE.
        !           312:        RETURN
        !           313: C
        !           314: 600    IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
        !           315: &              (and(OFLAG2(THIEF),FITEBT).NE.0)) GO TO 700
        !           316:        IF(PROB(10)) GO TO 650
        !           317: C                                              !THREW KNIFE, 10%?
        !           318:        CALL RSPEAK(507)
        !           319: C                                              !NO, JUST MAKES
        !           320:        OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
        !           321:        RETURN
        !           322: C
        !           323: 650    J=508
        !           324: C                                              !THIEF DROPS STUFF.
        !           325:        DO 675 I=1,OLNT
        !           326:          IF(OADV(I).NE.-THIEF) GO TO 675
        !           327: C                                              !THIEF CARRYING?
        !           328:          J=509
        !           329:          CALL NEWSTA(I,0,HERE,0,0)
        !           330: 675    CONTINUE
        !           331:        CALL NEWSTA(THIEF,J,0,0,0)
        !           332: C                                              !THIEF VANISHES.
        !           333:        RETURN
        !           334: C
        !           335: 700    IF(((PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)).OR.(PRSO.EQ.0).OR.
        !           336: &              (PRSO.EQ.THIEF)) GO TO 10
        !           337:        IF(OCAPAC(THIEF).GE.0) GO TO 750
        !           338: C                                              !WAKE HIM UP.
        !           339:        OCAPAC(THIEF)=-OCAPAC(THIEF)
        !           340:        THFACT=.TRUE.
        !           341:        OFLAG1(STILL)=or(OFLAG1(STILL),VISIBT)
        !           342:        ODESC1(THIEF)=503
        !           343:        CALL RSPEAK(510)
        !           344: C
        !           345: 750    IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
        !           346: &              (CTICK(CEVFUS).EQ.0)) GO TO 800
        !           347:        CALL RSPEAK(511)
        !           348: C                                              !THIEF REFUSES BOMB.
        !           349:        RETURN
        !           350: C
        !           351: 800    CALL NEWSTA(PRSO,0,0,0,-THIEF)
        !           352: C                                              !THIEF TAKES GIFT.
        !           353:        IF(OTVAL(PRSO).GT.0) GO TO 900
        !           354: C                                              !A TREASURE?
        !           355:        CALL RSPSUB(512,ODESC2(PRSO))
        !           356:        RETURN
        !           357: C
        !           358: 900    CALL RSPSUB(627,ODESC2(PRSO))
        !           359: C                                              !THIEF ENGROSSED.
        !           360:        THFENF=.TRUE.
        !           361:        RETURN
        !           362: C
        !           363: 10     THIEFP=.FALSE.
        !           364:        RETURN
        !           365:        END

unix.superglobalmegacorp.com

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