Annotation of 43BSDReno/games/dungeon/villns.F, revision 1.1.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.