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

1.1     ! root        1: C SAVE- SAVE GAME STATE
        !             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:        SUBROUTINE SAVEGM
        !            10:        IMPLICIT INTEGER (A-Z)
        !            11: #include "parser.h"
        !            12: #include "gamestate.h"
        !            13: #include "state.h"
        !            14: #include "screen.h"
        !            15: #include "puzzle.h"
        !            16: #include "rooms.h"
        !            17: #include "exits.h"
        !            18: #include "objects.h"
        !            19: #include "clock.h"
        !            20: #include "villians.h"
        !            21: #include "advers.h"
        !            22: #include "flags.h"
        !            23: C
        !            24: C MISCELLANEOUS VARIABLES
        !            25: C
        !            26:        COMMON /VERS/ VMAJ,VMIN,VEDIT
        !            27:        COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
        !            28: C
        !            29:        PRSWON=.FALSE.
        !            30: C                                              !DISABLE GAME.
        !            31: C Note: save file format is different for PDP vs. non-PDP versions
        !            32: C
        !            33: #ifdef PDP
        !            34: C
        !            35: C      send restore data flag down pipe
        !            36: C
        !            37:        call outstr(stchr,1)
        !            38: 
        !            39: C      write out necessary common blocks
        !            40: C
        !            41: C      /play/
        !            42:        call arywt(4,winner)
        !            43: C
        !            44: C      /state/
        !            45:        call arywt(11,moves)
        !            46: C
        !            47: C      /screen/
        !            48:        call arywt(3,formdr)
        !            49: C
        !            50: C      /puzzle/
        !            51:        call arywt(64,cpvec)
        !            52: C
        !            53: C      /vers/
        !            54:        call arywt(3,vmaj)
        !            55: C
        !            56: C      /rooms/
        !            57:        call arywt(400,rval)
        !            58: C
        !            59: C      /objects/
        !            60:        call arywt(2860,odesc1)
        !            61: C
        !            62: C      /cevent/
        !            63:        call arywt(100,ctick)
        !            64: C
        !            65: C      /hack/
        !            66:        call arywt(8,thfpos)
        !            67: C
        !            68: C      /vill/
        !            69:        call arywt(4,vprob)
        !            70: C
        !            71: C      /advs/
        !            72:        call arywt(28,aroom)
        !            73: C
        !            74: C      /findex/
        !            75:        call arywt(114,flags)
        !            76: C
        !            77: C      send end of data flag down pipe
        !            78: C
        !            79:        call outstr(endchr,1)
        !            80:        CALL RSPEAK(597)
        !            81:        RETURN
        !            82: #else
        !            83:        OPEN (UNIT=1,file='dsave.dat',ACCESS='SEQUENTIAL',
        !            84: &              status='UNKNOWN',FORM='UNFORMATTED',ERR=100)
        !            85:        rewind (unit=1, err=100)
        !            86: C
        !            87:        CALL GTTIME(I)
        !            88: C                                              !GET TIME.
        !            89:        WRITE(1) VMAJ,VMIN,VEDIT
        !            90:        WRITE(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT,
        !            91: &              SWDACT,SWDSTA,CPVEC
        !            92:        WRITE(1) I,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD,
        !            93: &              LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC
        !            94:        WRITE(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL,
        !            95: &              OSIZE,OCAPAC,OROOM,OADV,OCAN
        !            96:        WRITE(1) RVAL,RFLAG
        !            97:        WRITE(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG
        !            98:        WRITE(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK
        !            99: C
        !           100:        CLOSE(UNIT=1)
        !           101:        CALL RSPEAK(597)
        !           102:        RETURN
        !           103: C
        !           104: 100    CALL RSPEAK(598)
        !           105: C                                              !CANT DO IT.
        !           106:        RETURN
        !           107: #endif PDP
        !           108:        END
        !           109: C RESTORE- RESTORE GAME STATE
        !           110: C
        !           111: C DECLARATIONS
        !           112: C
        !           113:        SUBROUTINE RSTRGM
        !           114:        IMPLICIT INTEGER (A-Z)
        !           115: #include "parser.h"
        !           116: #include "gamestate.h"
        !           117: #include "state.h"
        !           118: #include "screen.h"
        !           119: #include "puzzle.h"
        !           120: #include "rooms.h"
        !           121: #include "exits.h"
        !           122: #include "objects.h"
        !           123: #include "clock.h"
        !           124: #include "villians.h"
        !           125: #include "advers.h"
        !           126: #include "flags.h"
        !           127: C
        !           128: C MISCELLANEOUS VARIABLES
        !           129: C
        !           130:        COMMON /VERS/ VMAJ,VMIN,VEDIT
        !           131:        COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
        !           132: C
        !           133:        PRSWON=.FALSE.
        !           134: C                                              !DISABLE GAME.
        !           135: C Note: save file format is different for PDP vs. non-PDP versions
        !           136: C
        !           137: #ifdef PDP
        !           138: C
        !           139: C      read in necessary common blocks
        !           140: C
        !           141: C      /play/
        !           142:        call aryrd(4,winner)
        !           143: C
        !           144: C      /state/
        !           145:        call aryrd(11,moves)
        !           146: C
        !           147: C      /screen/
        !           148:        call aryrd(3,formdr)
        !           149: C
        !           150: C      /puzzle/
        !           151:        call aryrd(64,cpvec)
        !           152: C
        !           153: C      /vers/
        !           154:        call intrd(i)
        !           155:        call intrd(j)
        !           156:        call intrd(k)
        !           157: C
        !           158: C      /rooms/
        !           159:        call aryrd(400,rval)
        !           160: C
        !           161: C      /objects/
        !           162:        call aryrd(2860,odesc1)
        !           163: C
        !           164: C      /cevent/
        !           165:        call aryrd(100,ctick)
        !           166: C
        !           167: C      /hack/
        !           168:        call aryrd(8,thfpos)
        !           169: C
        !           170: C      /vill/
        !           171:        call aryrd(4,vprob)
        !           172: C
        !           173: C      /advs/
        !           174:        call aryrd(28,aroom)
        !           175: C
        !           176: C      /findex/
        !           177:        call aryrd(114,flags)
        !           178: C
        !           179: 
        !           180: C
        !           181:        IF(or((I.NE.VMAJ),(J.NE.VMIN))) GO TO 200
        !           182:        CALL RSPEAK(599)
        !           183:        RETURN
        !           184: C
        !           185: 200    CALL RSPEAK(600)                        
        !           186: C                                              !OBSOLETE VERSION
        !           187:        RETURN
        !           188: #else
        !           189:        OPEN (UNIT=1,file='dsave.dat',ACCESS='SEQUENTIAL',
        !           190: #ifdef XELOS
        !           191: &              status='OLD',FORM='UNFORMATTED',ERR=100,recl=1)
        !           192: #else
        !           193: &              status='OLD',FORM='UNFORMATTED',ERR=100)
        !           194: #endif
        !           195:        rewind (unit=1, err=100)
        !           196: C
        !           197:        READ(1) I,J,K
        !           198:        IF(or((I.NE.VMAJ),(J.NE.VMIN))) GO TO 200
        !           199: C
        !           200:        READ(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT,
        !           201: &              SWDACT,SWDSTA,CPVEC
        !           202:        READ(1) PLTIME,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD,
        !           203: &              LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC
        !           204:        READ(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL,
        !           205: &              OSIZE,OCAPAC,OROOM,OADV,OCAN
        !           206:        READ(1) RVAL,RFLAG
        !           207:        READ(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG
        !           208:        READ(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK
        !           209: C
        !           210:        CLOSE(UNIT=1)
        !           211:        CALL RSPEAK(599)
        !           212:        RETURN
        !           213: C
        !           214: 100    CALL RSPEAK(598)
        !           215: C                                              !CANT DO IT.
        !           216:        RETURN
        !           217: C
        !           218: 200    CALL RSPEAK(600)
        !           219: C                                              !OBSOLETE VERSION
        !           220:        CLOSE (UNIT=1)
        !           221:        RETURN
        !           222: #endif PDP
        !           223:        END
        !           224: C WALK- MOVE IN SPECIFIED DIRECTION
        !           225: C
        !           226: C DECLARATIONS
        !           227: C
        !           228:        LOGICAL FUNCTION WALK(X)
        !           229:        IMPLICIT INTEGER(A-Z)
        !           230:        LOGICAL FINDXT,QOPEN,LIT,PROB,MOVETO,RMDESC
        !           231: #include "parser.h"
        !           232: #include "gamestate.h"
        !           233: #include "rooms.h"
        !           234: #include "rflag.h"
        !           235: #include "curxt.h"
        !           236: #include "xsrch.h"
        !           237: #include "objects.h"
        !           238: #include "oflags.h"
        !           239: #include "clock.h"
        !           240: 
        !           241: #include "villians.h"
        !           242: #include "advers.h"
        !           243: #include "flags.h"
        !           244: C
        !           245: C FUNCTIONS AND DATA
        !           246: C
        !           247:        QOPEN(O)=and(OFLAG2(O),OPENBT).NE.0
        !           248: C WALK, PAGE 2
        !           249: C
        !           250:        WALK=.TRUE.
        !           251: C                                              !ASSUME WINS.
        !           252:        IF((WINNER.NE.PLAYER).OR.LIT(HERE).OR.PROB(25,25))
        !           253: &              GO TO 500
        !           254:        IF(.NOT.FINDXT(PRSO,HERE)) GO TO 450
        !           255: C                                              !INVALID EXIT? GRUE
        !           256: C                                              !
        !           257:        GO TO (400,200,100,300),XTYPE
        !           258: C                                              !DECODE EXIT TYPE.
        !           259:        CALL BUG(9,XTYPE)
        !           260: C
        !           261: 100    IF(CXAPPL(XACTIO).NE.0) GO TO 400
        !           262: C                                              !CEXIT... RETURNED ROOM?
        !           263:        IF(FLAGS(XFLAG)) GO TO 400
        !           264: C                                              !NO, FLAG ON?
        !           265: 200    CALL JIGSUP(523)
        !           266: C                                              !BAD EXIT, GRUE
        !           267: C                                              !
        !           268:        RETURN
        !           269: C
        !           270: 300    IF(CXAPPL(XACTIO).NE.0) GO TO 400
        !           271: C                                              !DOOR... RETURNED ROOM?
        !           272:        IF(QOPEN(XOBJ)) GO TO 400
        !           273: C                                              !NO, DOOR OPEN?
        !           274:        CALL JIGSUP(523)
        !           275: C                                              !BAD EXIT, GRUE
        !           276: C                                              !
        !           277:        RETURN
        !           278: C
        !           279: 400    IF(LIT(XROOM1)) GO TO 900
        !           280: C                                              !VALID ROOM, IS IT LIT?
        !           281: 450    CALL JIGSUP(522)
        !           282: C                                              !NO, GRUE
        !           283: C                                              !
        !           284:        RETURN
        !           285: C
        !           286: C ROOM IS LIT, OR WINNER IS NOT PLAYER (NO GRUE).
        !           287: C
        !           288: 500    IF(FINDXT(PRSO,HERE)) GO TO 550
        !           289: C                                              !EXIT EXIST?
        !           290: 525    XSTRNG=678
        !           291: C                                              !ASSUME WALL.
        !           292:        IF(PRSO.EQ.XUP) XSTRNG=679
        !           293: C                                              !IF UP, CANT.
        !           294:        IF(PRSO.EQ.XDOWN) XSTRNG=680
        !           295: C                                              !IF DOWN, CANT.
        !           296:        IF(and(RFLAG(HERE),RNWALL).NE.0) XSTRNG=524
        !           297:        CALL RSPEAK(XSTRNG)
        !           298:        PRSCON=1
        !           299: C                                              !STOP CMD STREAM.
        !           300:        RETURN
        !           301: C
        !           302: 550    GO TO (900,600,700,800),XTYPE
        !           303: C                                              !BRANCH ON EXIT TYPE.
        !           304:        CALL BUG(9,XTYPE)
        !           305: C
        !           306: 700    IF(CXAPPL(XACTIO).NE.0) GO TO 900
        !           307: C                                              !CEXIT... RETURNED ROOM?
        !           308:        IF(FLAGS(XFLAG)) GO TO 900
        !           309: C                                              !NO, FLAG ON?
        !           310: 600    IF(XSTRNG.EQ.0) GO TO 525
        !           311: C                                              !IF NO REASON, USE STD.
        !           312:        CALL RSPEAK(XSTRNG)
        !           313: C                                              !DENY EXIT.
        !           314:        PRSCON=1
        !           315: C                                              !STOP CMD STREAM.
        !           316:        RETURN
        !           317: C
        !           318: 800    IF(CXAPPL(XACTIO).NE.0) GO TO 900
        !           319: C                                              !DOOR... RETURNED ROOM?
        !           320:        IF(QOPEN(XOBJ)) GO TO 900
        !           321: C                                              !NO, DOOR OPEN?
        !           322:        IF(XSTRNG.EQ.0) XSTRNG=525
        !           323: C                                              !IF NO REASON, USE STD.
        !           324:        CALL RSPSUB(XSTRNG,ODESC2(XOBJ))
        !           325:        PRSCON=1
        !           326: C                                              !STOP CMD STREAM.
        !           327:        RETURN
        !           328: C
        !           329: 900    WALK=MOVETO(XROOM1,WINNER)
        !           330: C                                              !MOVE TO ROOM.
        !           331:        IF(WALK) WALK=RMDESC(0)
        !           332: C                                              !DESCRIBE ROOM.
        !           333:        RETURN
        !           334:        END
        !           335: C CXAPPL- CONDITIONAL EXIT PROCESSORS
        !           336: C
        !           337: C DECLARATIONS
        !           338: C
        !           339:        INTEGER FUNCTION CXAPPL(RI)
        !           340:        IMPLICIT INTEGER (A-Z)
        !           341: #include "gamestate.h"
        !           342: #include "parser.h"
        !           343: #include "puzzle.h"
        !           344: #include "rooms.h"
        !           345: #include "rindex.h"
        !           346: #include "exits.h"
        !           347: #include "curxt.h"
        !           348: #include "xpars.h"
        !           349: #include "xsrch.h"
        !           350: #include "objects.h"
        !           351: #include "oflags.h"
        !           352: #include "oindex.h"
        !           353: #include "advers.h"
        !           354: #include "flags.h"
        !           355: C CXAPPL, PAGE 2
        !           356: C
        !           357:        CXAPPL=0
        !           358: C                                              !NO RETURN.
        !           359:        IF(RI.EQ.0) RETURN
        !           360: C                                              !IF NO ACTION, DONE.
        !           361:        GO TO (1000,2000,3000,4000,5000,6000,7000,
        !           362: &              8000,9000,10000,11000,12000,13000,14000),RI
        !           363:        CALL BUG(5,RI)
        !           364: C
        !           365: C C1- COFFIN-CURE
        !           366: C
        !           367: 1000   EGYPTF=OADV(COFFI).NE.WINNER
        !           368: C                                              !T IF NO COFFIN.
        !           369:        RETURN
        !           370: C
        !           371: C C2- CAROUSEL EXIT
        !           372: C C5- CAROUSEL OUT
        !           373: C
        !           374: 2000   IF(CAROFF) RETURN
        !           375: C                                              !IF FLIPPED, NOTHING.
        !           376: 2500   CALL RSPEAK(121)
        !           377: C                                              !SPIN THE COMPASS.
        !           378: 5000   I=XELNT(XCOND)*RND(8)
        !           379: C                                              !CHOOSE RANDOM EXIT.
        !           380:        XROOM1=and(TRAVEL(REXIT(HERE)+I),XRMASK)
        !           381:        CXAPPL=XROOM1
        !           382: C                                              !RETURN EXIT.
        !           383:        RETURN
        !           384: C
        !           385: C C3- CHIMNEY FUNCTION
        !           386: C
        !           387: 3000   LITLDF=.FALSE.
        !           388: C                                              !ASSUME HEAVY LOAD.
        !           389:        J=0
        !           390:        DO 3100 I=1,OLNT
        !           391: C                                              !COUNT OBJECTS.
        !           392:          IF(OADV(I).EQ.WINNER) J=J+1
        !           393: 3100   CONTINUE
        !           394: C
        !           395:        IF(J.GT.2) RETURN
        !           396: C                                              !CARRYING TOO MUCH?
        !           397:        XSTRNG=446
        !           398: C                                              !ASSUME NO LAMP.
        !           399:        IF(OADV(LAMP).NE.WINNER) RETURN
        !           400: C                                              !NO LAMP?
        !           401:        LITLDF=.TRUE.
        !           402: C                                              !HE CAN DO IT.
        !           403:        IF(and(OFLAG2(DOOR),OPENBT).EQ.0)
        !           404: &              OFLAG2(DOOR)=and(OFLAG2(DOOR), not(TCHBT))
        !           405:        RETURN
        !           406: C
        !           407: C C4-  FROBOZZ FLAG (MAGNET ROOM, FAKE EXIT)
        !           408: C C6-  FROBOZZ FLAG (MAGNET ROOM, REAL EXIT)
        !           409: C
        !           410: 4000   IF(CAROFF) GO TO 2500
        !           411: C                                              !IF FLIPPED, GO SPIN.
        !           412:        FROBZF=.FALSE.
        !           413: C                                              !OTHERWISE, NOT AN EXIT.
        !           414:        RETURN
        !           415: C
        !           416: 6000   IF(CAROFF) GO TO 2500
        !           417: C                                              !IF FLIPPED, GO SPIN.
        !           418:        FROBZF=.TRUE.
        !           419: C                                              !OTHERWISE, AN EXIT.
        !           420:        RETURN
        !           421: C
        !           422: C C7-  FROBOZZ FLAG (BANK ALARM)
        !           423: C
        !           424: 7000   FROBZF=and((OROOM(BILLS).NE.0),(OROOM(PORTR).NE.0))
        !           425:        RETURN
        !           426: C CXAPPL, PAGE 3
        !           427: C
        !           428: C C8-  FROBOZZ FLAG (MRGO)
        !           429: C
        !           430: 8000   FROBZF=.FALSE.
        !           431: C                                              !ASSUME CANT MOVE.
        !           432:        IF(MLOC.NE.XROOM1) GO TO 8100
        !           433: C                                              !MIRROR IN WAY?
        !           434:        IF((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XSOUTH)) GO TO 8200
        !           435:        IF(MOD(MDIR,180).NE.0) GO TO 8300
        !           436: C                                              !MIRROR MUST BE N-S.
        !           437:        XROOM1=((XROOM1-MRA)*2)+MRAE
        !           438: C                                              !CALC EAST ROOM.
        !           439:        IF(PRSO.GT.XSOUTH) XROOM1=XROOM1+1
        !           440: C                                              !IF SW/NW, CALC WEST.
        !           441: 8100   CXAPPL=XROOM1
        !           442:        RETURN
        !           443: C
        !           444: 8200   XSTRNG=814
        !           445: C                                              !ASSUME STRUC BLOCKS.
        !           446:        IF(MOD(MDIR,180).EQ.0) RETURN
        !           447: C                                              !IF MIRROR N-S, DONE.
        !           448: 8300   LDIR=MDIR
        !           449: C                                              !SEE WHICH MIRROR.
        !           450:        IF(PRSO.EQ.XSOUTH) LDIR=180
        !           451:        XSTRNG=815
        !           452: C                                              !MIRROR BLOCKS.
        !           453:        IF(((LDIR.GT.180).AND..NOT.MR1F).OR.
        !           454: &        ((LDIR.LT.180).AND..NOT.MR2F)) XSTRNG=816
        !           455:        RETURN
        !           456: C
        !           457: C C9-  FROBOZZ FLAG (MIRIN)
        !           458: C
        !           459: 9000   IF(MRHERE(HERE).NE.1) GO TO 9100
        !           460: C                                              !MIRROR 1 HERE?
        !           461:        IF(MR1F) XSTRNG=805
        !           462: C                                              !SEE IF BROKEN.
        !           463:        FROBZF=MROPNF
        !           464: C                                              !ENTER IF OPEN.
        !           465:        RETURN
        !           466: C
        !           467: 9100   FROBZF=.FALSE.
        !           468: C                                              !NOT HERE,
        !           469:        XSTRNG=817
        !           470: C                                              !LOSE.
        !           471:        RETURN
        !           472: C CXAPPL, PAGE 4
        !           473: C
        !           474: C C10- FROBOZZ FLAG (MIRROR EXIT)
        !           475: C
        !           476: 10000  FROBZF=.FALSE.
        !           477: C                                              !ASSUME CANT.
        !           478:        LDIR=((PRSO-XNORTH)/XNORTH)*45
        !           479: C                                              !XLATE DIR TO DEGREES.
        !           480:        IF(.NOT.MROPNF .OR.
        !           481: &              ((MOD(MDIR+270,360).NE.LDIR).AND.(PRSO.NE.XEXIT)))
        !           482: &              GO TO 10200
        !           483:        XROOM1=((MLOC-MRA)*2)+MRAE+1-(MDIR/180)
        !           484: C                                              !ASSUME E-W EXIT.
        !           485:        IF(MOD(MDIR,180).EQ.0) GO TO 10100
        !           486: C                                              !IF N-S, OK.
        !           487:        XROOM1=MLOC+1
        !           488: C                                              !ASSUME N EXIT.
        !           489:        IF(MDIR.GT.180) XROOM1=MLOC-1
        !           490: C                                              !IF SOUTH.
        !           491: 10100  CXAPPL=XROOM1
        !           492:        RETURN
        !           493: C
        !           494: 10200  IF(.NOT.WDOPNF .OR.
        !           495: &              ((MOD(MDIR+180,360).NE.LDIR).AND.(PRSO.NE.XEXIT)))
        !           496: &              RETURN
        !           497:        XROOM1=MLOC+1
        !           498: C                                              !ASSUME N.
        !           499:        IF(MDIR.EQ.0) XROOM1=MLOC-1
        !           500: C                                              !IF S.
        !           501:        CALL RSPEAK(818)
        !           502: C                                              !CLOSE DOOR.
        !           503:        WDOPNF=.FALSE.
        !           504:        CXAPPL=XROOM1
        !           505:        RETURN
        !           506: C
        !           507: C C11- MAYBE DOOR.  NORMAL MESSAGE IS THAT DOOR IS CLOSED.
        !           508: C      BUT IF LCELL.NE.4, DOOR ISNT THERE.
        !           509: C
        !           510: 11000  IF(LCELL.NE.4) XSTRNG=678
        !           511: C                                              !SET UP MSG.
        !           512:        RETURN
        !           513: C
        !           514: C C12- FROBZF (PUZZLE ROOM MAIN ENTRANCE)
        !           515: C
        !           516: 12000  FROBZF=.TRUE.
        !           517: C                                              !ALWAYS ENTER.
        !           518:        CPHERE=10
        !           519: C                                              !SET SUBSTATE.
        !           520:        RETURN
        !           521: C
        !           522: C C13- CPOUTF (PUZZLE ROOM SIZE ENTRANCE)
        !           523: C
        !           524: 13000  CPHERE=52
        !           525: C                                              !SET SUBSTATE.
        !           526:        RETURN
        !           527: C CXAPPL, PAGE 5
        !           528: C
        !           529: C C14- FROBZF (PUZZLE ROOM TRANSITIONS)
        !           530: C
        !           531: 14000  FROBZF=.FALSE.
        !           532: C                                              !ASSSUME LOSE.
        !           533:        IF(PRSO.NE.XUP) GO TO 14100
        !           534: C                                              !UP?
        !           535:        IF(CPHERE.NE.10) RETURN
        !           536: C                                              !AT EXIT?
        !           537:        XSTRNG=881
        !           538: C                                              !ASSUME NO LADDER.
        !           539:        IF(CPVEC(CPHERE+1).NE.-2) RETURN
        !           540: C                                              !LADDER HERE?
        !           541:        CALL RSPEAK(882)
        !           542: C                                              !YOU WIN.
        !           543:        FROBZF=.TRUE.
        !           544: C                                              !LET HIM OUT.
        !           545:        RETURN
        !           546: C
        !           547: 14100  IF((CPHERE.NE.52).OR.(PRSO.NE.XWEST).OR..NOT.CPOUTF)
        !           548: &              GO TO 14200
        !           549:        FROBZF=.TRUE.
        !           550: C                                              !YES, LET HIM OUT.
        !           551:        RETURN
        !           552: C
        !           553: 14200  DO 14300 I=1,16,2
        !           554: C                                              !LOCATE EXIT.
        !           555:          IF(PRSO.EQ.CPDR(I)) GO TO 14400
        !           556: 14300  CONTINUE
        !           557:        RETURN
        !           558: C                                              !NO SUCH EXIT.
        !           559: C
        !           560: 14400  J=CPDR(I+1)
        !           561: C                                              !GET DIRECTIONAL OFFSET.
        !           562:        NXT=CPHERE+J
        !           563: C                                              !GET NEXT STATE.
        !           564:        K=8
        !           565: C                                              !GET ORTHOGONAL DIR.
        !           566:        IF(J.LT.0) K=-8
        !           567:        IF((((IABS(J).EQ.1).OR.(IABS(J).EQ.8)).OR.
        !           568: &         ((CPVEC(CPHERE+K).EQ.0).OR.(CPVEC(NXT-K).EQ.0))).AND.
        !           569: &          (CPVEC(NXT).EQ.0)) GO TO 14500
        !           570:        RETURN
        !           571: C
        !           572: 14500  CALL CPGOTO(NXT)
        !           573: C                                              !MOVE TO STATE.
        !           574:        XROOM1=CPUZZ
        !           575: C                                              !STAY IN ROOM.
        !           576:        CXAPPL=XROOM1
        !           577:        RETURN
        !           578: C
        !           579:        END

unix.superglobalmegacorp.com

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