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

1.1     ! root        1: C GETOBJ--     FIND OBJ DESCRIBED BY ADJ, NAME PAIR
        !             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: C THIS ROUTINE DETAILS ON BIT 3 OF PRSFLG
        !            10: C
        !            11:        INTEGER FUNCTION GETOBJ(OIDX,AIDX,SPCOBJ)
        !            12:        IMPLICIT INTEGER(A-Z)
        !            13:        LOGICAL THISIT,GHERE,LIT,CHOMP
        !            14: #include "parser.h"
        !            15: #include "gamestate.h"
        !            16: C
        !            17: C MISCELLANEOUS VARIABLES
        !            18: C
        !            19:        COMMON /STAR/ MBASE,STRBIT
        !            20: #include "debug.h"
        !            21: #include "objects.h"
        !            22: #include "oflags.h"
        !            23: #include "advers.h"
        !            24: #include "vocab.h"
        !            25: C GETOBJ, PAGE 2
        !            26: C
        !            27: #ifdef debug
        !            28:        DFLAG=and(PRSFLG, 8).NE.0
        !            29: #endif debug
        !            30:        CHOMP=.FALSE.
        !            31:        AV=AVEHIC(WINNER)
        !            32:        OBJ=0
        !            33: C                                              !ASSUME DARK.
        !            34:        IF(.NOT.LIT(HERE)) GO TO 200
        !            35: C                                              !LIT?
        !            36: C
        !            37:        OBJ=SCHLST(OIDX,AIDX,HERE,0,0,SPCOBJ)
        !            38: C                                              !SEARCH ROOM.
        !            39: #ifdef debug
        !            40:        IF(DFLAG) PRINT 10,OBJ
        !            41: #ifdef NOCC
        !            42: 10     FORMAT('SCHLST- ROOM SCH ',I6)
        !            43: #else NOCC
        !            44: 10     FORMAT(' SCHLST- ROOM SCH ',I6)
        !            45: #endif NOCC
        !            46: #endif debug
        !            47:        IF(OBJ) 1000,200,100
        !            48: C                                              !TEST RESULT.
        !            49: 100    IF((AV.EQ.0).OR.(AV.EQ.OBJ).OR.
        !            50: &              (and(OFLAG2(OBJ),FINDBT).NE.0)) GO TO 200
        !            51:        IF(OCAN(OBJ).EQ.AV) GO TO 200
        !            52: C                                              !TEST IF REACHABLE.
        !            53:        CHOMP=.TRUE.
        !            54: C                                              !PROBABLY NOT.
        !            55: C
        !            56: 200    IF(AV.EQ.0) GO TO 400
        !            57: C                                              !IN VEHICLE?
        !            58:        NOBJ=SCHLST(OIDX,AIDX,0,AV,0,SPCOBJ)
        !            59: C                                              !SEARCH VEHICLE.
        !            60: #ifdef debug
        !            61:        IF(DFLAG) PRINT 20,NOBJ
        !            62: #ifdef NOCC
        !            63: 20     FORMAT('SCHLST- VEH SCH  ',I6)
        !            64: #else NOCC
        !            65: 20     FORMAT(' SCHLST- VEH SCH  ',I6)
        !            66: #endif NOCC
        !            67: #endif debug
        !            68:        IF(NOBJ) 1100,400,300
        !            69: C                                              !TEST RESULT.
        !            70: 300    CHOMP=.FALSE.
        !            71: C                                              !REACHABLE.
        !            72:        IF(OBJ.EQ.NOBJ) GO TO 400
        !            73: C                                              !SAME AS BEFORE?
        !            74:        IF(OBJ.NE.0) NOBJ=-NOBJ
        !            75: C                                              !AMB RESULT?
        !            76:        OBJ=NOBJ
        !            77: C
        !            78: 400    NOBJ=SCHLST(OIDX,AIDX,0,0,WINNER,SPCOBJ)
        !            79: C                                              !SEARCH ADVENTURER.
        !            80: #ifdef debug
        !            81:        IF(DFLAG) PRINT 30,NOBJ
        !            82: #ifdef NOCC
        !            83: 30     FORMAT('SCHLST- ADV SCH  ',I6)
        !            84: #else NOCC
        !            85: 30     FORMAT(' SCHLST- ADV SCH  ',I6)
        !            86: #endif NOCC
        !            87: #endif debug
        !            88:        IF(NOBJ) 1100,600,500
        !            89: C                                              !TEST RESULT
        !            90: 500    IF(OBJ.NE.0) NOBJ=-NOBJ
        !            91: C                                              !AMB RESULT?
        !            92: 1100   OBJ=NOBJ
        !            93: C                                              !RETURN NEW OBJECT.
        !            94: 600    IF(CHOMP) OBJ=-10000
        !            95: C                                              !UNREACHABLE.
        !            96: 1000   GETOBJ=OBJ
        !            97: C
        !            98:        IF(GETOBJ.NE.0) GO TO 1500
        !            99: C                                              !GOT SOMETHING?
        !           100:        DO 1200 I=STRBIT+1,OLNT
        !           101: C                                              !NO, SEARCH GLOBALS.
        !           102:          IF(.NOT.THISIT(OIDX,AIDX,I,SPCOBJ)) GO TO 1200
        !           103:          IF(.NOT.GHERE(I,HERE)) GO TO 1200
        !           104: C                                              !CAN IT BE HERE?
        !           105:          IF(GETOBJ.NE.0) GETOBJ=-I
        !           106: C                                              !AMB MATCH?
        !           107:          IF(GETOBJ.EQ.0) GETOBJ=I
        !           108: 1200   CONTINUE
        !           109: C
        !           110: 1500   CONTINUE
        !           111: C                                              !END OF SEARCH.
        !           112: #ifdef debug
        !           113:        IF(DFLAG) PRINT 40,GETOBJ
        !           114: #ifdef NOCC
        !           115: 40     FORMAT('SCHLST- RESULT   ',I6)
        !           116: #else NOCC
        !           117: 40     FORMAT(' SCHLST- RESULT   ',I6)
        !           118: #endif NOCC
        !           119: #endif debug
        !           120:        RETURN
        !           121:        END
        !           122: C SCHLST--     SEARCH FOR OBJECT
        !           123: C
        !           124: C DECLARATIONS
        !           125: C
        !           126:        INTEGER FUNCTION SCHLST(OIDX,AIDX,RM,CN,AD,SPCOBJ)
        !           127:        IMPLICIT INTEGER(A-Z)
        !           128:        LOGICAL THISIT,QHERE,NOTRAN,NOVIS
        !           129: C
        !           130:        COMMON /STAR/ MBASE,STRBIT
        !           131: #include "objects.h"
        !           132: #include "oflags.h"
        !           133: C
        !           134: C FUNCTIONS AND DATA
        !           135: C
        !           136:        NOTRAN(O)=(and(OFLAG1(O),TRANBT).EQ.0).AND.
        !           137: &              (and(OFLAG2(O),OPENBT).EQ.0)
        !           138:        NOVIS(O)=(and(OFLAG1(O),VISIBT).EQ.0)
        !           139: C
        !           140:        SCHLST=0
        !           141: C                                              !NO RESULT.
        !           142:        DO 1000 I=1,OLNT
        !           143: C                                              !SEARCH OBJECTS.
        !           144:          IF(NOVIS(I).OR.
        !           145: &              (((RM.EQ.0).OR.(.NOT.QHERE(I,RM))).AND.
        !           146: &               ((CN.EQ.0).OR.(OCAN(I).NE.CN)).AND.
        !           147: &               ((AD.EQ.0).OR.(OADV(I).NE.AD)))) GO TO 1000
        !           148:          IF(.NOT.THISIT(OIDX,AIDX,I,SPCOBJ)) GO TO 200
        !           149:          IF(SCHLST.NE.0) GO TO 2000
        !           150: C                                              !GOT ONE ALREADY?
        !           151:          SCHLST=I
        !           152: C                                              !NO.
        !           153: C
        !           154: C IF OPEN OR TRANSPARENT, SEARCH THE OBJECT ITSELF.
        !           155: C
        !           156: 200      IF(NOTRAN(I)) GO TO 1000
        !           157: C
        !           158: C SEARCH IS CONDUCTED IN REVERSE.  ALL OBJECTS ARE CHECKED TO
        !           159: C SEE IF THEY ARE AT SOME LEVEL OF CONTAINMENT INSIDE OBJECT 'I'.
        !           160: C IF THEY ARE AT LEVEL 1, OR IF ALL LINKS IN THE CONTAINMENT
        !           161: C CHAIN ARE OPEN, VISIBLE, AND HAVE SEARCHME SET, THEY CAN QUALIFY
        !           162: C AS A POTENTIAL MATCH.
        !           163: C
        !           164:          DO 500 J=1,OLNT
        !           165: C                                              !SEARCH OBJECTS.
        !           166:            IF(NOVIS(J).OR. (.NOT.THISIT(OIDX,AIDX,J,SPCOBJ)))
        !           167: &              GO TO 500
        !           168:            X=OCAN(J)
        !           169: C                                              !GET CONTAINER.
        !           170: 300        IF(X.EQ.I) GO TO 400
        !           171: C                                              !INSIDE TARGET?
        !           172:            IF(X.EQ.0) GO TO 500
        !           173: C                                              !INSIDE ANYTHING?
        !           174:            IF(NOVIS(X).OR.NOTRAN(X).OR.
        !           175: &              (and(OFLAG2(X),SCHBT).EQ.0)) GO TO 500
        !           176:            X=OCAN(X)
        !           177: C                                              !GO ANOTHER LEVEL.
        !           178:            GO TO 300
        !           179: C
        !           180: 400        IF(SCHLST.NE.0) GO TO 2000
        !           181: C                                              !ALREADY GOT ONE?
        !           182:            SCHLST=J
        !           183: C                                              !NO.
        !           184: 500      CONTINUE
        !           185: C
        !           186: 1000   CONTINUE
        !           187:        RETURN
        !           188: C
        !           189: 2000   SCHLST=-SCHLST
        !           190: C                                              !AMB RETURN.
        !           191:        RETURN
        !           192: C
        !           193:        END
        !           194: C
        !           195: C THISIT--     VALIDATE OBJECT VS DESCRIPTION
        !           196: C
        !           197: C DECLARATIONS
        !           198: C
        !           199:        LOGICAL  FUNCTION  THISIT(OIDX,AIDX,OBJ,SPCOBJ)
        !           200:        IMPLICIT INTEGER(A-Z)
        !           201:        LOGICAL  NOTEST
        !           202: #include "vocab.h"
        !           203: C
        !           204: C FUNCTIONS AND DATA
        !           205: C
        !           206:        NOTEST(O)=(O.LE.0).OR.(O.GE.R50MIN)
        !           207: C
        !           208: C    THE FOLLOWING DATA STATEMENT USED RADIX-50 NOTATION (R50MIN/1RA/)
        !           209: C       IN RADIX-50 NOTATION, AN "A" IN THE FIRST POSITION IS
        !           210: C       ENCODED AS 1*40*40 = 1600.
        !           211: C
        !           212:        DATA R50MIN/1600/
        !           213: C
        !           214:        THISIT=.FALSE.
        !           215: C                                              !ASSUME NO MATCH.
        !           216:        IF((SPCOBJ.NE.0).AND.(OBJ.EQ.SPCOBJ)) GO TO 500
        !           217: C
        !           218: C CHECK FOR OBJECT NAMES
        !           219: C
        !           220:        I=OIDX+1
        !           221: 100    I=I+1
        !           222:        IF(NOTEST(OVOC(I))) RETURN
        !           223: C                                              !IF DONE, LOSE.
        !           224:        IF(OVOC(I).NE.OBJ) GO TO 100
        !           225: C                                              !IF FAIL, CONT.
        !           226: C
        !           227:        IF(AIDX.EQ.0) GO TO 500
        !           228: C                                              !ANY ADJ?
        !           229:        I=AIDX+1
        !           230: 200    I=I+1
        !           231:        IF(NOTEST(AVOC(I))) RETURN
        !           232: C                                              !IF DONE, LOSE.
        !           233:        IF(AVOC(I).NE.OBJ) GO TO 200
        !           234: C                                              !IF FAIL, CONT.
        !           235: C
        !           236: 500    THISIT=.TRUE.
        !           237:        RETURN
        !           238:        END

unix.superglobalmegacorp.com

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