1C TROLLP- TROLL FUNCTION 2C 3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 5C WRITTEN BY R. M. SUPNIK 6C 7C DECLARATIONS 8C 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" 19C TROLLP, PAGE 2 20C 21 TROLLP=.TRUE. 22C !ASSUME WINS. 23 IF(PRSA.NE.FIGHTW) GO TO 1100 24C !FIGHT? 25 IF(OCAN(AXE).EQ.TROLL) GO TO 10 26C !GOT AXE? NOTHING. 27 I=433 28C !ASSUME CANT GET. 29 IF(.NOT.QHERE(AXE,HERE)) GO TO 1050 30C !HERE? 31 I=434 32C !YES, RECOVER. 33 CALL NEWSTA(AXE,0,0,TROLL,0) 341050 IF(QHERE(TROLL,HERE)) CALL RSPEAK(I) 35C !IF PLAYER HERE. 36 RETURN 37C 381100 IF(PRSA.NE.DEADXW) GO TO 1200 39C !DEAD? 40 TROLLF=.TRUE. 41C !PERMIT EXITS. 42 RETURN 43C 441200 IF(PRSA.NE.OUTXW) GO TO 1300 45C !OUT? 46 TROLLF=.TRUE. 47C !PERMIT EXITS. 48 OFLAG1(AXE)=and(OFLAG1(AXE), not(VISIBT)) 49 ODESC1(TROLL)=435 50C !TROLL OUT. 51 RETURN 52C 531300 IF(PRSA.NE.INXW) GO TO 1400 54C !WAKE UP? 55 TROLLF=.FALSE. 56C !FORBID EXITS. 57 OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT) 58 ODESC1(TROLL)=436 59C !TROLL IN. 60 IF(QHERE(TROLL,HERE)) CALL RSPEAK(437) 61 RETURN 62C 631400 IF(PRSA.NE.FRSTQW) GO TO 1500 64C !FIRST ENCOUNTER? 65 TROLLP=PROB(33,66) 66C !33% TRUE UNLESS BADLK. 67 RETURN 68C 691500 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 72C !TROLL OUT? 73 OCAPAC(TROLL)=-OCAPAC(TROLL) 74C !YES, WAKE HIM. 75 OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT) 76 TROLLF=.FALSE. 77 ODESC1(TROLL)=436 78 CALL RSPEAK(437) 79C 801550 IF((PRSA.NE.TAKEW).AND.(PRSA.NE.MOVEW)) GO TO 1600 81 CALL RSPEAK(438) 82C !JOKE. 83 RETURN 84C 851600 IF(PRSA.NE.MUNGW) GO TO 1700 86C !MUNG? 87 CALL RSPEAK(439) 88C !JOKE. 89 RETURN 90C 911700 IF(PRSO.EQ.0) GO TO 10 92C !NO OBJECT? 93 I=440 94C !ASSUME THROW. 95 IF(PRSA.EQ.GIVEW) I=441 96C !GIVE? 97 CALL RSPSUB(I,ODESC2(PRSO)) 98C !TROLL TAKES. 99 IF(PRSO.EQ.KNIFE) GO TO 1900 100C !OBJ KNIFE? 101 CALL NEWSTA(PRSO,442,0,0,0) 102C !NO, EATS IT. 103 RETURN 104C 1051900 CALL RSPEAK(443) 106C !KNIFE, THROWS IT BACK 107 OFLAG2(TROLL)=or(OFLAG2(TROLL),FITEBT) 108 RETURN 109C 1102000 IF(.NOT.TROLLF.OR.(PRSA.NE.HELLOW)) GO TO 10 111 CALL RSPEAK(366) 112C !TROLL OUT. 113 RETURN 114C 11510 TROLLP=.FALSE. 116C !COULDNT HANDLE IT. 117 RETURN 118 END 119C CYCLOP- CYCLOPS FUNCTION 120C 121C DECLARATIONS 122C 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" 132C CYCLOP, PAGE 2 133C 134 CYCLOP=.TRUE. 135C !ASSUME WINS. 136 IF(.NOT.CYCLOF) GO TO 100 137C !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. 142C !WAKE CYCLOPS. 143 CALL RSPEAK(187) 144C !DESCRIBE. 145 RVCYC=IABS(RVCYC) 146 OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),FITEBT),not(SLEPBT)) 147 RETURN 148C 149100 IF((PRSA.EQ.FIGHTW).OR.(PRSA.EQ.FRSTQW)) GO TO 10 150 IF(IABS(RVCYC).LE.5) GO TO 200 151C !ANNOYED TOO MUCH? 152 RVCYC=0 153C !RESTART COUNT. 154 CALL JIGSUP(188) 155C !YES, EATS PLAYER. 156 RETURN 157C 158200 IF(PRSA.NE.GIVEW) GO TO 500 159C !GIVE? 160 IF((PRSO.NE.FOOD).OR.(RVCYC.LT.0)) GO TO 300 161C !FOOD WHEN HUNGRY? 162 CALL NEWSTA(FOOD,189,0,0,0) 163C !EATS PEPPERS. 164 RVCYC=MIN0(-1,-RVCYC) 165C !GETS THIRSTY. 166 RETURN 167C 168300 IF(PRSO.NE.WATER) GO TO 400 169C !DRINK WHEN THIRSTY? 170 IF(RVCYC.GE.0) GO TO 350 171 CALL NEWSTA(PRSO,190,0,0,0) 172C !DRINKS AND 173 CYCLOF=.TRUE. 174C !FALLS ASLEEP. 175 OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),SLEPBT),not(FITEBT)) 176 RETURN 177C 178350 CALL RSPEAK(191) 179C !NOT THIRSTY. 18010 CYCLOP=.FALSE. 181C !FAILS. 182 RETURN 183C 184400 I=192 185C !ASSUME INEDIBLE. 186 IF(PRSO.EQ.GARLI) I=193 187C !GARLIC IS JOKE. 188450 CALL RSPEAK(I) 189C !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 194C 195500 I=0 196C !ASSUME NOT HANDLED. 197 IF(PRSA.EQ.HELLOW) GO TO 450 198C !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 203C !SEE IF HANDLED. 204C 205 END 206C THIEFP- THIEF FUNCTION 207C 208C DECLARATIONS 209C 210 LOGICAL FUNCTION THIEFP(ARG) 211 IMPLICIT INTEGER (A-Z) 212 LOGICAL QHERE,PROB 213#include "parser.h" 214#include "gamestate.h" 215C 216C 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" 226C THIEFP, PAGE 2 227C 228 THIEFP=.TRUE. 229C !ASSUME WINS. 230 IF(PRSA.NE.FIGHTW) GO TO 100 231C !FIGHT? 232 IF(OCAN(STILL).EQ.THIEF) GO TO 10 233C !GOT STILLETTO? F. 234 IF(QHERE(STILL,THFPOS)) GO TO 50 235C !CAN HE RECOVER IT? 236 CALL NEWSTA(THIEF,0,0,0,0) 237C !NO, VANISH. 238 IF(QHERE(THIEF,HERE)) CALL RSPEAK(498) 239C !IF HERO, TELL. 240 RETURN 241C 24250 CALL NEWSTA(STILL,0,0,THIEF,0) 243C !YES, RECOVER. 244 IF(QHERE(THIEF,HERE)) CALL RSPEAK(499) 245C !IF HERO, TELL. 246 RETURN 247C 248100 IF(PRSA.NE.DEADXW) GO TO 200 249C !DEAD? 250 THFACT=.FALSE. 251C !DISABLE DEMON. 252 OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT) 253 J=0 254 DO 125 I=1,OLNT 255C !CARRYING ANYTHING? 256125 IF(OADV(I).EQ.-THIEF) J=500 257 CALL RSPEAK(J) 258C !TELL IF BOOTY REAPPEARS. 259C 260 J=501 261 DO 150 I=1,OLNT 262C !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)) 267C !DESCRIBE. 268 J=502 269 GO TO 150 270C 271135 IF(OADV(I).EQ.-THIEF) CALL NEWSTA(I,0,HERE,0,0) 272150 CONTINUE 273 RETURN 274C 275200 IF(PRSA.NE.FRSTQW) GO TO 250 276C !FIRST ENCOUNTER? 277 THIEFP=PROB(20,75) 278 RETURN 279C 280250 IF((PRSA.NE.HELLOW).OR.(ODESC1(THIEF).NE.504)) 281& GO TO 300 282 CALL RSPEAK(626) 283 RETURN 284C 285300 IF(PRSA.NE.OUTXW) GO TO 400 286C !OUT? 287 THFACT=.FALSE. 288C !DISABLE DEMON. 289 ODESC1(THIEF)=504 290C !CHANGE DESCRIPTION. 291 OFLAG1(STILL)=and(OFLAG1(STILL),not(VISIBT)) 292 OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT) 293 RETURN 294C 295400 IF(PRSA.NE.INXW) GO TO 500 296C !IN? 297 IF(QHERE(THIEF,HERE)) CALL RSPEAK(505) 298C !CAN HERO SEE? 299 THFACT=.TRUE. 300C !ENABLE DEMON. 301 ODESC1(THIEF)=503 302C !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 307C 308500 IF(PRSA.NE.TAKEW) GO TO 600 309C !TAKE? 310 CALL RSPEAK(506) 311C !JOKE. 312 RETURN 313C 314600 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 317C !THREW KNIFE, 10%? 318 CALL RSPEAK(507) 319C !NO, JUST MAKES 320 OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT) 321 RETURN 322C 323650 J=508 324C !THIEF DROPS STUFF. 325 DO 675 I=1,OLNT 326 IF(OADV(I).NE.-THIEF) GO TO 675 327C !THIEF CARRYING? 328 J=509 329 CALL NEWSTA(I,0,HERE,0,0) 330675 CONTINUE 331 CALL NEWSTA(THIEF,J,0,0,0) 332C !THIEF VANISHES. 333 RETURN 334C 335700 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 338C !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) 344C 345750 IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR. 346& (CTICK(CEVFUS).EQ.0)) GO TO 800 347 CALL RSPEAK(511) 348C !THIEF REFUSES BOMB. 349 RETURN 350C 351800 CALL NEWSTA(PRSO,0,0,0,-THIEF) 352C !THIEF TAKES GIFT. 353 IF(OTVAL(PRSO).GT.0) GO TO 900 354C !A TREASURE? 355 CALL RSPSUB(512,ODESC2(PRSO)) 356 RETURN 357C 358900 CALL RSPSUB(627,ODESC2(PRSO)) 359C !THIEF ENGROSSED. 360 THFENF=.TRUE. 361 RETURN 362C 36310 THIEFP=.FALSE. 364 RETURN 365 END 366