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

1.1       root        1: C OAPPLI- OBJECT SPECIAL ACTION ROUTINES
                      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 OAPPLI(RI,ARG)
                     10:        IMPLICIT INTEGER (A-Z)
                     11:        LOGICAL SOBJS,NOBJS
                     12:        LOGICAL QOPEN,QON,LIT
                     13:        LOGICAL MOVETO,RMDESC,CLOCKD
                     14:        LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP,LIGHTP
                     15:        LOGICAL QEMPTY,QHERE,F,OPNCLS
                     16: #include "parser.h"
                     17: #include "gamestate.h"
                     18: #include "state.h"
                     19: C
                     20:        COMMON /BATS/ BATDRP(9)
                     21: C
                     22: C PUZZLE ROOM
                     23: C
                     24:        COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
                     25: #include "rooms.h"
                     26: #include "rflag.h"
                     27: #include "rindex.h"
                     28: #include "objects.h"
                     29: #include "oflags.h"
                     30: #include "oindex.h"
                     31: #include "clock.h"
                     32: 
                     33: #include "advers.h"
                     34: #include "verbs.h"
                     35: #include "flags.h"
                     36: C
                     37: C FUNCTIONS AND DATA
                     38: C
                     39:        QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
                     40:        QON(R)=and(OFLAG1(R),ONBT).NE.0
                     41:        DATA MXSMP/99/
                     42: C OAPPLI, PAGE 2
                     43: C
                     44:        IF(RI.EQ.0) GO TO 10
                     45: C                                              !ZERO IS FALSE APP.
                     46:        IF(RI.LE.MXSMP) GO TO 100
                     47: C                                              !SIMPLE OBJECT?
                     48:        IF(PRSO.GT.220) GO TO 5
                     49:        IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
                     50: 5      IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
                     51:        AV=AVEHIC(WINNER)
                     52:        FLOBTS=FLAMBT+LITEBT+ONBT
                     53:        OAPPLI=.TRUE.
                     54: C
                     55:        GO TO (2000,5000,10000,11000,12000,15000,18000,
                     56: &       19000,20000,22000,25000,26000,32000,35000,39000,40000,
                     57: &       45000,47000,48000,49000,50000,51000,52000,54000,55000,
                     58: &       56000,57000,58000,59000,60000,61000,62000),
                     59: &              (RI-MXSMP)
                     60:        CALL BUG(6,RI)
                     61: C
                     62: C RETURN HERE TO DECLARE FALSE RESULT
                     63: C
                     64: 10     OAPPLI=.FALSE.
                     65:        RETURN
                     66: C
                     67: C SIMPLE OBJECTS, PROCESSED EXTERNALLY.
                     68: C
                     69: 100    IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG)
                     70:        IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG)
                     71:        RETURN
                     72: C OAPPLI, PAGE 3
                     73: C
                     74: C O100--       MACHINE FUNCTION
                     75: C
                     76: 2000   IF(HERE.NE.MMACH) GO TO 10
                     77: C                                              !NOT HERE? F
                     78:        OAPPLI=OPNCLS(MACHI,123,124)
                     79: C                                              !HANDLE OPN/CLS.
                     80:        RETURN
                     81: C
                     82: C O101--       WATER FUNCTION
                     83: C
                     84: 5000   IF(PRSA.NE.FILLW) GO TO 5050
                     85: C                                              !FILL X WITH Y IS
                     86:        PRSA=PUTW
                     87: C                                              !MADE INTO
                     88:        I=PRSI
                     89:        PRSI=PRSO
                     90:        PRSO=I
                     91: C                                              !PUT Y IN X.
                     92:        I=ODI2
                     93:        ODI2=ODO2
                     94:        ODO2=I
                     95: 5050   IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100
                     96:        CALL RSPEAK(561)
                     97: C                                              !WATER IS IND OBJ,
                     98:        RETURN
                     99: C                                              !PUNT.
                    100: C
                    101: 5100   IF(PRSA.NE.TAKEW) GO TO 5400
                    102: C                                              !TAKE WATER?
                    103:        IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL))
                    104: &              GO TO 5500
                    105:        IF(OCAN(PRSO).EQ.0) GO TO 5200
                    106: C                                              !INSIDE ANYTHING?
                    107:        IF(QOPEN(OCAN(PRSO))) GO TO 5200
                    108: C                                              !YES, OPEN?
                    109:        CALL RSPEAK(525,ODESC2(OCAN(PRSO)))
                    110: C                                              !INSIDE, CLOSED, PUNT.
                    111:        RETURN
                    112: C
                    113: 5200   CALL RSPEAK(615)
                    114: C                                              !NOT INSIDE OR OPEN,
                    115:        RETURN
                    116: C                                              !SLIPS THRU FINGERS.
                    117: C
                    118: 5400   IF(PRSA.NE.PUTW) GO TO 5700
                    119: C                                              !PUT WATER IN X?
                    120:        IF((AV.NE.0).AND.(PRSI.EQ.AV)) GO TO 5800
                    121: C                                              !IN VEH?
                    122:        IF(PRSI.EQ.BOTTL) GO TO 5500
                    123: C                                              !IN BOTTLE?
                    124:        CALL RSPSUB(297,ODI2)
                    125: C                                              !WONT GO ELSEWHERE.
                    126:        CALL NEWSTA(PRSO,0,0,0,0)
                    127: C                                              !VANISH WATER.
                    128:        RETURN
                    129: C
                    130: 5500   IF(QOPEN(BOTTL)) GO TO 5550
                    131: C                                              !BOTTLE OPEN?
                    132:        CALL RSPEAK(612)
                    133: C                                              !NO, LOSE.
                    134:        RETURN
                    135: C
                    136: 5550   IF(QEMPTY(BOTTL)) GO TO 5600
                    137: C                                              !OPEN, EMPTY?
                    138:        CALL RSPEAK(613)
                    139: C                                              !NO, ALREADY FULL.
                    140:        RETURN
                    141: C
                    142: 5600   CALL NEWSTA(WATER,614,0,BOTTL,0)
                    143: C                                              !TAKE WATER TO BOTTLE.
                    144:        RETURN
                    145: C
                    146: 5700   IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW).AND.
                    147: &              (PRSA.NE.GIVEW)) GO TO 5900
                    148:        IF(AV.NE.0) GO TO 5800
                    149: C                                              !INTO VEHICLE?
                    150:        CALL NEWSTA(PRSO,133,0,0,0)
                    151: C                                              !NO, VANISHES.
                    152:        RETURN
                    153: C
                    154: 5800   CALL NEWSTA(WATER,0,0,AV,0)
                    155: C                                              !WATER INTO VEHICLE.
                    156:        CALL RSPSUB(296,ODESC2(AV))
                    157: C                                              !DESCRIBE.
                    158:        RETURN
                    159: C
                    160: 5900   IF(PRSA.NE.THROWW) GO TO 10
                    161: C                                              !LAST CHANCE, THROW?
                    162:        CALL NEWSTA(PRSO,132,0,0,0)
                    163: C                                              !VANISHES.
                    164:        RETURN
                    165: C OAPPLI, PAGE 4
                    166: C
                    167: C O102--       LEAF PILE
                    168: C
                    169: 10000  IF(PRSA.NE.BURNW) GO TO 10500
                    170: C                                              !BURN?
                    171:        IF(OROOM(PRSO).EQ.0) GO TO 10100
                    172: C                                              !WAS HE CARRYING?
                    173:        CALL NEWSTA(PRSO,158,0,0,0)
                    174: C                                              !NO, BURN IT.
                    175:        RETURN
                    176: C
                    177: 10100  CALL NEWSTA(PRSO,0,HERE,0,0)
                    178: C                                              !DROP LEAVES.
                    179:        CALL JIGSUP(159)
                    180: C                                              !BURN HIM.
                    181:        RETURN
                    182: C
                    183: 10500  IF(PRSA.NE.MOVEW) GO TO 10600
                    184: C                                              !MOVE?
                    185:        CALL RSPEAK(2)
                    186: C                                              !DONE.
                    187:        RETURN
                    188: C
                    189: 10600  IF((PRSA.NE.LOOKUW).OR.(RVCLR.NE.0)) GO TO 10
                    190:        CALL RSPEAK(344)
                    191: C                                              !LOOK UNDER?
                    192:        RETURN
                    193: C
                    194: C O103--       TROLL, DONE EXTERNALLY.
                    195: C
                    196: 11000  OAPPLI=TROLLP(ARG)
                    197: C                                              !TROLL PROCESSOR.
                    198:        RETURN
                    199: C
                    200: C O104--       RUSTY KNIFE.
                    201: C
                    202: 12000  IF(PRSA.NE.TAKEW) GO TO 12100
                    203: C                                              !TAKE?
                    204:        IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160)
                    205: C                                              !PULSE SWORD.
                    206:        GO TO 10
                    207: C
                    208: 12100  IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR.
                    209: &              (PRSI.NE.RKNIF)).AND.
                    210: &        (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR.
                    211: &              (PRSO.NE.RKNIF))) GO TO 10
                    212:        CALL NEWSTA(RKNIF,0,0,0,0)
                    213: C                                              !KILL KNIFE.
                    214:        CALL JIGSUP(161)
                    215: C                                              !KILL HIM.
                    216:        RETURN
                    217: C OAPPLI, PAGE 5
                    218: C
                    219: C O105--       GLACIER
                    220: C
                    221: 15000  IF(PRSA.NE.THROWW) GO TO 15500
                    222: C                                              !THROW?
                    223:        IF(PRSO.NE.TORCH) GO TO 15400
                    224: C                                              !TORCH?
                    225:        CALL NEWSTA(ICE,169,0,0,0)
                    226: C                                              !MELT ICE.
                    227:        ODESC1(TORCH)=174
                    228: C                                              !MUNG TORCH.
                    229:        ODESC2(TORCH)=173
                    230:        OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
                    231:        CALL NEWSTA(TORCH,0,STREA,0,0)
                    232: C                                              !MOVE TORCH.
                    233:        GLACRF=.TRUE.
                    234: C                                              !GLACIER GONE.
                    235:        IF(.NOT.LIT(HERE)) CALL RSPEAK(170)
                    236: C                                              !IN DARK?
                    237:        RETURN
                    238: C
                    239: 15400  CALL RSPEAK(171)
                    240: C                                              !JOKE IF NOT TORCH.
                    241:        RETURN
                    242: C
                    243: 15500  IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
                    244:        IF(and(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600
                    245:        CALL RSPSUB(298,ODI2)
                    246: C                                              !CANT MELT WITH THAT.
                    247:        RETURN
                    248: C
                    249: 15600  GLACMF=.TRUE.
                    250: C                                              !PARTIAL MELT.
                    251:        IF(PRSI.NE.TORCH) GO TO 15700
                    252: C                                              !MELT WITH TORCH?
                    253:        ODESC1(TORCH)=174
                    254: C                                              !MUNG TORCH.
                    255:        ODESC2(TORCH)=173
                    256:        OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
                    257: 15700  CALL JIGSUP(172)
                    258: C                                              !DROWN.
                    259:        RETURN
                    260: C
                    261: C O106--       BLACK BOOK
                    262: C
                    263: 18000  IF(PRSA.NE.OPENW) GO TO 18100
                    264: C                                              !OPEN?
                    265:        CALL RSPEAK(180)
                    266: C                                              !JOKE.
                    267:        RETURN
                    268: C
                    269: 18100  IF(PRSA.NE.CLOSEW) GO TO 18200
                    270: C                                              !CLOSE?
                    271:        CALL RSPEAK(181)
                    272:        RETURN
                    273: C
                    274: 18200  IF(PRSA.NE.BURNW) GO TO 10
                    275: C                                              !BURN?
                    276:        CALL NEWSTA(PRSO,0,0,0,0)
                    277: C                                              !FATAL JOKE.
                    278:        CALL JIGSUP(182)
                    279:        RETURN
                    280: C OAPPLI, PAGE 6
                    281: C
                    282: C O107--       CANDLES, PROCESSED EXTERNALLY
                    283: C
                    284: 19000  OAPPLI=LIGHTP(CANDL)
                    285:        RETURN
                    286: C
                    287: C O108--       MATCHES, PROCESSED EXTERNALLY
                    288: C
                    289: 20000  OAPPLI=LIGHTP(MATCH)
                    290:        RETURN
                    291: C
                    292: C O109--       CYCLOPS, PROCESSED EXTERNALLY.
                    293: C
                    294: 22000  OAPPLI=CYCLOP(ARG)
                    295: C                                              !CYCLOPS
                    296:        RETURN
                    297: C
                    298: C O110--       THIEF, PROCESSED EXTERNALLY
                    299: C
                    300: 25000  OAPPLI=THIEFP(ARG)
                    301:        RETURN
                    302: C
                    303: C O111--       WINDOW
                    304: C
                    305: 26000  OAPPLI=OPNCLS(WINDO,208,209)
                    306: C                                              !OPEN/CLS WINDOW.
                    307:        RETURN
                    308: C
                    309: C O112--       PILE OF BODIES
                    310: C
                    311: 32000  IF(PRSA.NE.TAKEW) GO TO 32500
                    312: C                                              !TAKE?
                    313:        CALL RSPEAK(228)
                    314: C                                              !CANT.
                    315:        RETURN
                    316: C
                    317: 32500  IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
                    318:        IF(ONPOLF) RETURN
                    319: C                                              !BURN OR MUNG?
                    320:        ONPOLF=.TRUE.
                    321: C                                              !SET HEAD ON POLE.
                    322:        CALL NEWSTA(HPOLE,0,LLD2,0,0)
                    323:        CALL JIGSUP(229)
                    324: C                                              !BEHEADED.
                    325:        RETURN
                    326: C
                    327: C O113--       VAMPIRE BAT
                    328: C
                    329: 35000  CALL RSPEAK(50)
                    330: C                                              !TIME TO FLY, JACK.
                    331:        F=MOVETO(BATDRP(RND(9)+1),WINNER)
                    332: C                                              !SELECT RANDOM DEST.
                    333:        F=RMDESC(0)
                    334:        RETURN
                    335: C OAPPLI, PAGE 7
                    336: C
                    337: C O114--       STICK
                    338: C
                    339: 39000  IF(PRSA.NE.WAVEW) GO TO 10
                    340: C                                              !WAVE?
                    341:        IF(HERE.EQ.MRAIN) GO TO 39500
                    342: C                                              !ON RAINBOW?
                    343:        IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
                    344:        CALL RSPEAK(244)
                    345: C                                              !NOTHING HAPPENS.
                    346:        RETURN
                    347: C
                    348: 39200  OFLAG1(POT)=or(OFLAG1(POT),VISIBT)
                    349:        RAINBF=.NOT. RAINBF
                    350: C                                              !COMPLEMENT RAINBOW.
                    351:        I=245
                    352: C                                              !ASSUME OFF.
                    353:        IF(RAINBF) I=246
                    354: C                                              !IF ON, SOLID.
                    355:        CALL RSPEAK(I)
                    356: C                                              !DESCRIBE.
                    357:        RETURN
                    358: C
                    359: 39500  RAINBF=.FALSE.
                    360: C                                              !ON RAINBOW,
                    361:        CALL JIGSUP(247)
                    362: C                                              !TAKE A FALL.
                    363:        RETURN
                    364: C
                    365: C O115--       BALLOON, HANDLED EXTERNALLY
                    366: C
                    367: 40000  OAPPLI=BALLOP(ARG)
                    368:        RETURN
                    369: C
                    370: C O116--       HEADS
                    371: C
                    372: 45000  IF(PRSA.NE.HELLOW) GO TO 45100
                    373: C                                              !HELLO HEADS?
                    374:        CALL RSPEAK(633)
                    375: C                                              !TRULY BIZARRE.
                    376:        RETURN
                    377: C
                    378: 45100  IF(PRSA.EQ.READW) GO TO 10
                    379: C                                              !READ IS OK.
                    380:        CALL NEWSTA(LCASE,260,LROOM,0,0)
                    381: C                                              !MAKE LARGE CASE.
                    382:        I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
                    383:        CALL JIGSUP(261)
                    384: C                                              !KILL HIM.
                    385:        RETURN
                    386: C OAPPLI, PAGE 8
                    387: C
                    388: C O117--       SPHERE
                    389: C
                    390: 47000  IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10
                    391: C                                              !TAKE?
                    392:        IF(WINNER.NE.PLAYER) GO TO 47500
                    393: C                                              !ROBOT TAKE?
                    394:        CALL RSPEAK(263)
                    395: C                                              !NO, DROP CAGE.
                    396:        IF(OROOM(ROBOT).NE.HERE) GO TO 47200
                    397: C                                              !ROBOT HERE?
                    398:        F=MOVETO(CAGED,WINNER)
                    399: C                                              !YES, MOVE INTO CAGE.
                    400:        CALL NEWSTA(ROBOT,0,CAGED,0,0)
                    401: C                                              !MOVE ROBOT.
                    402:        AROOM(AROBOT)=CAGED
                    403:        OFLAG1(ROBOT)=or(OFLAG1(ROBOT),NDSCBT)
                    404:        CTICK(CEVSPH)=10
                    405: C                                              !GET OUT IN 10 OR ELSE.
                    406:        RETURN
                    407: C
                    408: 47200  CALL NEWSTA(SPHER,0,0,0,0)
                    409: C                                              !YOURE DEAD.
                    410:        RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
                    411:        RRAND(CAGER)=147
                    412:        CALL JIGSUP(148)
                    413: C                                              !MUNG PLAYER.
                    414:        RETURN
                    415: C
                    416: 47500  CALL NEWSTA(SPHER,0,0,0,0)
                    417: C                                              !ROBOT TRIED,
                    418:        CALL NEWSTA(ROBOT,264,0,0,0)
                    419: C                                              !KILL HIM.
                    420:        CALL NEWSTA(CAGE,0,HERE,0,0)
                    421: C                                              !INSERT MANGLED CAGE.
                    422:        RETURN
                    423: C
                    424: C O118--       GEOMETRICAL BUTTONS
                    425: C
                    426: 48000  IF(PRSA.NE.PUSHW) GO TO 10
                    427: C                                              !PUSH?
                    428:        I=PRSO-SQBUT+1
                    429: C                                              !GET BUTTON INDEX.
                    430:        IF((I.LE.0).OR.(I.GE.4)) GO TO 10
                    431: C                                              !A BUTTON?
                    432:        IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
                    433:        CALL JIGSUP(265)
                    434: C                                              !YOU PUSHED, YOU DIE.
                    435:        RETURN
                    436: C
                    437: 48100  I=267
                    438:        IF(CAROZF) I=266
                    439: C                                              !SPEED UP?
                    440:        CAROZF=.TRUE.
                    441:        CALL RSPEAK(I)
                    442:        RETURN
                    443: C
                    444: 48200  I=266
                    445: C                                              !ASSUME NO CHANGE.
                    446:        IF(CAROZF) I=268
                    447:        CAROZF=.FALSE.
                    448:        CALL RSPEAK(I)
                    449:        RETURN
                    450: C
                    451: 48300  CAROFF=.NOT.CAROFF
                    452: C                                              !FLIP CAROUSEL.
                    453:        IF(.NOT.QHERE(IRBOX,CAROU)) RETURN
                    454: C                                              !IRON BOX IN CAROUSEL?
                    455:        CALL RSPEAK(269)
                    456: C                                              !YES, THUMP.
                    457:        OFLAG1(IRBOX)=xor(OFLAG1(IRBOX),VISIBT)
                    458:        IF(CAROFF) RFLAG(CAROU)=and(RFLAG(CAROU), not(RSEEN))
                    459:        RETURN
                    460: C
                    461: C O119--       FLASK FUNCTION
                    462: C
                    463: 49000  IF(PRSA.EQ.OPENW) GO TO 49100
                    464: C                                              !OPEN?
                    465:        IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
                    466:        CALL NEWSTA(FLASK,270,0,0,0)
                    467: C                                              !KILL FLASK.
                    468: 49100  RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
                    469:        RRAND(HERE)=271
                    470:        CALL JIGSUP(272)
                    471: C                                              !POISONED.
                    472:        RETURN
                    473: C
                    474: C O120--       BUCKET FUNCTION
                    475: C
                    476: 50000  IF(ARG.NE.2) GO TO 10
                    477: C                                              !READOUT?
                    478:        IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
                    479:        BUCKTF=.TRUE.
                    480: C                                              !BUCKET AT TOP.
                    481:        CTICK(CEVBUC)=100
                    482: C                                              !START COUNTDOWN.
                    483:        CALL NEWSTA(BUCKE,290,TWELL,0,0)
                    484: C                                              !REPOSITION BUCKET.
                    485:        GO TO 50900
                    486: C                                              !FINISH UP.
                    487: C
                    488: 50500  IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
                    489:        BUCKTF=.FALSE.
                    490:        CALL NEWSTA(BUCKE,291,BWELL,0,0)
                    491: C                                              !BUCKET AT BOTTOM.
                    492: 50900  IF(AV.NE.BUCKE) RETURN
                    493: C                                              !IN BUCKET?
                    494:        F=MOVETO(OROOM(BUCKE),WINNER)
                    495: C                                              !MOVE ADVENTURER.
                    496:        F=RMDESC(0)
                    497: C                                              !DESCRIBE ROOM.
                    498:        RETURN
                    499: C OAPPLI, PAGE 9
                    500: C
                    501: C O121--       EATME CAKE
                    502: C
                    503: 51000  IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
                    504: &              (HERE.NE.ALICE)) GO TO 10
                    505:        CALL NEWSTA(ECAKE,273,0,0,0)
                    506: C                                              !VANISH CAKE.
                    507:        OFLAG1(ROBOT)=and(OFLAG1(ROBOT), not(VISIBT))
                    508:        OAPPLI=MOVETO(ALISM,WINNER)
                    509: C                                              !MOVE TO ALICE SMALL.
                    510:        IZ=64
                    511:        IR=ALISM
                    512:        IO=ALICE
                    513:        GO TO 52405
                    514: C
                    515: C O122--       ICINGS
                    516: C
                    517: 52000  IF(PRSA.NE.READW) GO TO 52200
                    518: C                                              !READ?
                    519:        I=274
                    520: C                                              !CANT READ.
                    521:        IF(PRSI.NE.0) I=275
                    522: C                                              !THROUGH SOMETHING?
                    523:        IF(PRSI.EQ.BOTTL) I=276
                    524: C                                              !THROUGH BOTTLE?
                    525:        IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)
                    526: C                                              !THROUGH FLASK?
                    527:        CALL RSPEAK(I)
                    528: C                                              !READ FLASK.
                    529:        RETURN
                    530: C
                    531: 52200  IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL))
                    532: &              GO TO 52300
                    533:        CALL NEWSTA(POOL,280,0,0,0)
                    534: C                                              !VANISH POOL.
                    535:        OFLAG1(SAFFR)=or(OFLAG1(SAFFR),VISIBT)
                    536:        RETURN
                    537: C
                    538: 52300  IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR))
                    539: &              GO TO 10
                    540:        IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
                    541: &              (PRSO.NE.ORICE)) GO TO 52400
                    542:        CALL NEWSTA(ORICE,0,0,0,0)
                    543: C                                              !VANISH ORANGE ICE.
                    544:        RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
                    545:        RRAND(HERE)=281
                    546:        CALL JIGSUP(282)
                    547: C                                              !VANISH ADVENTURER.
                    548:        RETURN
                    549: C
                    550: 52400  IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE))
                    551: &              GO TO 10
                    552:        CALL NEWSTA(BLICE,283,0,0,0)
                    553: C                                              !VANISH BLUE ICE.
                    554:        IF(HERE.NE.ALISM) GO TO 52500
                    555: C                                              !IN REDUCED ROOM?
                    556:        OFLAG1(ROBOT)=or(OFLAG1(ROBOT),VISIBT)
                    557:        IO=HERE
                    558:        OAPPLI=MOVETO(ALICE,WINNER)
                    559:        IZ=1/64
                    560:        IR=ALICE
                    561: C
                    562: C  Do a size change, common loop used also by code at 51000
                    563: C
                    564: 52405  DO 52450 I=1,OLNT
                    565: C                                              !ENLARGE WORLD.
                    566:          IF((OROOM(I).NE.IO).OR.(OSIZE(I).EQ.10000))
                    567: &              GO TO 52450
                    568:          OROOM(I)=IR
                    569:          OSIZE(I)=OSIZE(I)*IZ
                    570: 52450  CONTINUE
                    571:        RETURN
                    572: C
                    573: 52500  CALL JIGSUP(284)
                    574: C                                              !ENLARGED IN WRONG ROOM.
                    575:        RETURN
                    576: C
                    577: C O123--       BRICK
                    578: C
                    579: 54000  IF(PRSA.NE.BURNW) GO TO 10
                    580: C                                              !BURN?
                    581:        CALL JIGSUP(150)
                    582: C                                              !BOOM
                    583: C                                              !
                    584:        RETURN
                    585: C
                    586: C O124--       MYSELF
                    587: C
                    588: 55000  IF(PRSA.NE.GIVEW) GO TO 55100
                    589: C                                              !GIVE?
                    590:        CALL NEWSTA(PRSO,2,0,0,PLAYER)
                    591: C                                              !DONE.
                    592:        RETURN
                    593: C
                    594: 55100  IF(PRSA.NE.TAKEW) GO TO 55200
                    595: C                                              !TAKE?
                    596:        CALL RSPEAK(286)
                    597: C                                              !JOKE.
                    598:        RETURN
                    599: C
                    600: 55200  IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10
                    601:        CALL JIGSUP(287)
                    602: C                                              !KILL, NO JOKE.
                    603:        RETURN
                    604: C OAPPLI, PAGE 10
                    605: C
                    606: C O125--       PANELS INSIDE MIRROR
                    607: C
                    608: 56000  IF(PRSA.NE.PUSHW) GO TO 10
                    609: C                                              !PUSH?
                    610:        IF(POLEUF.NE.0) GO TO 56100
                    611: C                                              !SHORT POLE UP?
                    612:        I=731
                    613: C                                              !NO, WONT BUDGE.
                    614:        IF(MOD(MDIR,180).EQ.0) I=732
                    615: C                                              !DIFF MSG IF N-S.
                    616:        CALL RSPEAK(I)
                    617: C                                              !TELL WONT MOVE.
                    618:        RETURN
                    619: C
                    620: 56100  IF(MLOC.NE.MRG) GO TO 56200
                    621: C                                              !IN GDN ROOM?
                    622:        CALL RSPEAK(733)
                    623: C                                              !YOU LOSE.
                    624:        CALL JIGSUP(685)
                    625:        RETURN
                    626: C
                    627: 56200  I=831
                    628: C                                              !ROTATE L OR R.
                    629:        IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
                    630:        CALL RSPEAK(I)
                    631: C                                              !TELL DIRECTION.
                    632:        MDIR=MOD(MDIR+45+(270*(I-830)),360)
                    633: C                                              !CALCULATE NEW DIR.
                    634:        CALL RSPSUB(734,695+(MDIR/45))
                    635: C                                              !TELL NEW DIR.
                    636:        IF(WDOPNF) CALL RSPEAK(730)
                    637: C                                              !IF PANEL OPEN, CLOSE.
                    638:        WDOPNF=.FALSE.
                    639:        RETURN
                    640: C                                              !DONE.
                    641: C
                    642: C O126--       ENDS INSIDE MIRROR
                    643: C
                    644: 57000  IF(PRSA.NE.PUSHW) GO TO 10
                    645: C                                              !PUSH?
                    646:        IF(MOD(MDIR,180).EQ.0) GO TO 57100
                    647: C                                              !MIRROR N-S?
                    648:        CALL RSPEAK(735)
                    649: C                                              !NO, WONT BUDGE.
                    650:        RETURN
                    651: C
                    652: 57100  IF(PRSO.NE.PINDR) GO TO 57300
                    653: C                                              !PUSH PINE WALL?
                    654:        IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
                    655: &        ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
                    656: &         (MLOC.EQ.MRG)) GO TO 57200
                    657:        CALL RSPEAK(736)
                    658: C                                              !NO, OPENS.
                    659:        WDOPNF=.TRUE.
                    660: C                                              !INDICATE OPEN.
                    661:        CFLAG(CEVPIN)=.TRUE.
                    662: C                                              !TIME OPENING.
                    663:        CTICK(CEVPIN)=5
                    664:        RETURN
                    665: C
                    666: 57200  CALL RSPEAK(737)
                    667: C                                              !GDN SEES YOU, DIE.
                    668:        CALL JIGSUP(685)
                    669:        RETURN
                    670: C
                    671: 57300  NLOC=MLOC-1
                    672: C                                              !NEW LOC IF SOUTH.
                    673:        IF(MDIR.EQ.0) NLOC=MLOC+1
                    674: C                                              !NEW LOC IF NORTH.
                    675:        IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
                    676:        CALL RSPEAK(738)
                    677: C                                              !HAVE REACHED END.
                    678:        RETURN
                    679: C
                    680: 57400  I=699
                    681: C                                              !ASSUME SOUTH.
                    682:        IF(MDIR.EQ.0) I=695
                    683: C                                              !NORTH.
                    684:        J=739
                    685: C                                              !ASSUME SMOOTH.
                    686:        IF(POLEUF.NE.0) J=740
                    687: C                                              !POLE UP, WOBBLES.
                    688:        CALL RSPSUB(J,I)
                    689: C                                              !DESCRIBE.
                    690:        MLOC=NLOC
                    691:        IF(MLOC.NE.MRG) RETURN
                    692: C                                              !NOW IN GDN ROOM?
                    693: C
                    694:        IF(POLEUF.NE.0) GO TO 57500
                    695: C                                              !POLE UP, GDN SEES.
                    696:        IF(MROPNF.OR.WDOPNF) GO TO 57600
                    697: C                                              !DOOR OPEN, GDN SEES.
                    698:        IF(MR1F.AND.MR2F) RETURN
                    699: C                                              !MIRRORS INTACT, OK.
                    700:        CALL RSPEAK(742)
                    701: C                                              !MIRRORS BROKEN, DIE.
                    702:        CALL JIGSUP(743)
                    703:        RETURN
                    704: C
                    705: 57500  CALL RSPEAK(741)
                    706: C                                              !POLE UP, DIE.
                    707:        CALL JIGSUP(743)
                    708:        RETURN
                    709: C
                    710: 57600  CALL RSPEAK(744)
                    711: C                                              !DOOR OPEN, DIE.
                    712:        CALL JIGSUP(743)
                    713:        RETURN
                    714: C OAPPLI, PAGE 11
                    715: C
                    716: C O127--       GLOBAL GUARDIANS
                    717: C
                    718: 58000  IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
                    719: &        (PRSA.NE.MUNGW)) GO TO 58100
                    720:        CALL JIGSUP(745)
                    721: C                                              !LOSE.
                    722:        RETURN
                    723: C
                    724: 58100  IF(PRSA.NE.HELLOW) GO TO 10
                    725: C                                              !HELLO?
                    726:        CALL RSPEAK(746)
                    727: C                                              !NO REPLY.
                    728:        RETURN
                    729: C
                    730: C O128--       GLOBAL MASTER
                    731: C
                    732: 59000  IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
                    733: &        (PRSA.NE.MUNGW)) GO TO 59100
                    734:        CALL JIGSUP(747)
                    735: C                                              !BAD IDEA.
                    736:        RETURN
                    737: C
                    738: 59100  IF(PRSA.NE.TAKEW) GO TO 10
                    739: C                                              !TAKE?
                    740:        CALL RSPEAK(748)
                    741: C                                              !JOKE.
                    742:        RETURN
                    743: C
                    744: C O129--       NUMERAL FIVE (FOR JOKE)
                    745: C
                    746: 60000  IF(PRSA.NE.TAKEW) GO TO 10
                    747: C                                              !TAKE FIVE?
                    748:        CALL RSPEAK(419)
                    749: C                                              !TIME PASSES.
                    750:        DO 60100 I=1,3
                    751: C                                              !WAIT A WHILE.
                    752:          IF(CLOCKD(X)) RETURN
                    753: 60100  CONTINUE
                    754:        RETURN
                    755: C
                    756: C O130--       CRYPT FUNCTION
                    757: C
                    758: 61000  IF(.NOT.ENDGMF) GO TO 45000
                    759: C                                              !IF NOT EG, DIE.
                    760:        IF(PRSA.NE.OPENW) GO TO 61100
                    761: C                                              !OPEN?
                    762:        I=793
                    763:        IF(QOPEN(TOMB)) I=794
                    764:        CALL RSPEAK(I)
                    765:        OFLAG2(TOMB)=or(OFLAG2(TOMB),OPENBT)
                    766:        RETURN
                    767: C
                    768: 61100  IF(PRSA.NE.CLOSEW) GO TO 45000
                    769: C                                              !CLOSE?
                    770:        I=795
                    771:        IF(QOPEN(TOMB)) I=796
                    772:        CALL RSPEAK(I)
                    773:        OFLAG2(TOMB)=and(OFLAG2(TOMB),not(OPENBT))
                    774:        IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3
                    775: C                                              !IF IN CRYPT, START EG.
                    776:        RETURN
                    777: C OAPPLI, PAGE 12
                    778: C
                    779: C O131--       GLOBAL LADDER
                    780: C
                    781: 62000  IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3))
                    782: &              GO TO 62100
                    783:        CALL RSPEAK(865)
                    784: C                                              !NO, LOSE.
                    785:        RETURN
                    786: C
                    787: 62100  IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200
                    788:        CALL RSPEAK(866)
                    789: C                                              !CLIMB IT?
                    790:        RETURN
                    791: C
                    792: 62200  IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2))
                    793: &              GO TO 62300
                    794:        CALL RSPEAK(867)
                    795: C                                              !NO, HIT YOUR HEAD.
                    796:        RETURN
                    797: C
                    798: 62300  F=MOVETO(CPANT,WINNER)
                    799: C                                              !TO ANTEROOM.
                    800:        F=RMDESC(3)
                    801: C                                              !DESCRIBE.
                    802:        RETURN
                    803: C
                    804:        END

unix.superglobalmegacorp.com

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