|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.