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

1.1       root        1: C TAKE-- BASIC TAKE SEQUENCE
                      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 TAKE AN OBJECT (FOR VERBS TAKE, PUT, DROP, READ, ETC.)
                      8: C
                      9:        LOGICAL FUNCTION TAKE(FLG)
                     10: C
                     11: C DECLARATIONS
                     12: C
                     13:        IMPLICIT INTEGER (A-Z)
                     14:        LOGICAL FLG,OBJACT,OAPPLI,QOPEN,QHERE
                     15: #include "parser.h"
                     16: #include "gamestate.h"
                     17: #include "state.h"
                     18:        COMMON /STAR/ MBASE,STRBIT
                     19: #include "objects.h"
                     20: #include "oflags.h"
                     21: C
                     22: #include "advers.h"
                     23: C
                     24: C FUNCTIONS AND DATA
                     25: C
                     26:        QOPEN(O)=(and(OFLAG2(O),OPENBT).NE.0)
                     27: C TAKE, PAGE 2
                     28: C
                     29:        TAKE=.FALSE.
                     30: C                                              !ASSUME LOSES.
                     31:        OA=OACTIO(PRSO)
                     32: C                                              !GET OBJECT ACTION.
                     33:        IF(PRSO.LE.STRBIT) GO TO 100
                     34: C                                              !STAR?
                     35:        TAKE=OBJACT(X)
                     36: C                                              !YES, LET IT HANDLE.
                     37:        RETURN
                     38: C
                     39: 100    X=OCAN(PRSO)
                     40: C                                              !INSIDE?
                     41:        IF(PRSO.NE.AVEHIC(WINNER)) GO TO 400
                     42: C                                              !HIS VEHICLE?
                     43:        CALL RSPEAK(672)
                     44: C                                              !DUMMY.
                     45:        RETURN
                     46: C
                     47: 400    IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 500
                     48:        IF(.NOT.OAPPLI(OA,0)) CALL RSPEAK(552+RND(5))
                     49:        RETURN
                     50: C
                     51: C OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN.
                     52: C
                     53: 500    IF((X.NE.0).OR. QHERE(PRSO,HERE)) GO TO 600
                     54:        IF(OADV(PRSO).EQ.WINNER) CALL RSPEAK(557)
                     55: C                                              !ALREADY GOT IT?
                     56:        RETURN
                     57: C
                     58: 600    IF(((X.NE.0).AND.(OADV(X).EQ.WINNER)).OR.
                     59: &              ((WEIGHT(0,PRSO,WINNER)+OSIZE(PRSO)).LE.MXLOAD))
                     60: &              GO TO 700
                     61:        CALL RSPEAK(558)
                     62: C                                              !TOO MUCH WEIGHT.
                     63:        RETURN
                     64: C
                     65: 700    TAKE=.TRUE.
                     66: C                                              !AT LAST.
                     67:        IF(OAPPLI(OA,0)) RETURN
                     68: C                                              !DID IT HANDLE?
                     69:        CALL NEWSTA(PRSO,0,0,0,WINNER)
                     70: C                                              !TAKE OBJECT FOR WINNER.
                     71:        OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
                     72:        CALL SCRUPD(OFVAL(PRSO))
                     73: C                                              !UPDATE SCORE.
                     74:        OFVAL(PRSO)=0
                     75: C                                              !CANT BE SCORED AGAIN.
                     76:        IF(FLG) CALL RSPEAK(559)
                     77: C                                              !TELL TAKEN.
                     78:        RETURN
                     79: C
                     80:        END
                     81: C DROP- DROP VERB PROCESSOR
                     82: C
                     83: C DECLARATIONS
                     84: C
                     85:        LOGICAL FUNCTION DROP(Z)
                     86:        IMPLICIT INTEGER (A-Z)
                     87:        LOGICAL F,PUT,OBJACT
                     88: #include "parser.h"
                     89: #include "gamestate.h"
                     90: C
                     91: C ROOMS
                     92: #include "rindex.h"
                     93: #include "objects.h"
                     94: #include "oflags.h"
                     95: C
                     96: #include "advers.h"
                     97: #include "verbs.h"
                     98: C DROP, PAGE 2
                     99: C
                    100:        DROP=.TRUE.
                    101: C                                              !ASSUME WINS.
                    102:        X=OCAN(PRSO)
                    103: C                                              !GET CONTAINER.
                    104:        IF(X.EQ.0) GO TO 200
                    105: C                                              !IS IT INSIDE?
                    106:        IF(OADV(X).NE.WINNER) GO TO 1000
                    107: C                                              !IS HE CARRYING CON?
                    108:        IF(and(OFLAG2(X),OPENBT).NE.0) GO TO 300
                    109:        CALL RSPSUB(525,ODESC2(X))
                    110: C                                              !CANT REACH.
                    111:        RETURN
                    112: C
                    113: 200    IF(OADV(PRSO).NE.WINNER) GO TO 1000
                    114: C                                              !IS HE CARRYING OBJ?
                    115: 300    IF(AVEHIC(WINNER).EQ.0) GO TO 400
                    116: C                                              !IS HE IN VEHICLE?
                    117:        PRSI=AVEHIC(WINNER)
                    118: C                                              !YES,
                    119:        F=PUT(.TRUE.)
                    120: C                                              !DROP INTO VEHICLE.
                    121:        PRSI=0
                    122: C                                              !DISARM PARSER.
                    123:        RETURN
                    124: C                                              !DONE.
                    125: C
                    126: 400    CALL NEWSTA(PRSO,0,HERE,0,0)
                    127: C                                              !DROP INTO ROOM.
                    128:        IF(HERE.EQ.MTREE) CALL NEWSTA(PRSO,0,FORE3,0,0)
                    129:        CALL SCRUPD(OFVAL(PRSO))
                    130: C                                              !SCORE OBJECT.
                    131:        OFVAL(PRSO)=0
                    132: C                                              !CANT BE SCORED AGAIN.
                    133:        OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
                    134: C
                    135:        IF(OBJACT(X)) RETURN
                    136: C                                              !DID IT HANDLE?
                    137:        I=0
                    138: C                                              !ASSUME NOTHING TO SAY.
                    139:        IF(PRSA.EQ.DROPW) I=528
                    140:        IF(PRSA.EQ.THROWW) I=529
                    141:        IF((I.NE.0).AND.(HERE.EQ.MTREE)) I=659
                    142:        CALL RSPSUB(I,ODESC2(PRSO))
                    143:        RETURN
                    144: C
                    145: 1000   CALL RSPEAK(527)
                    146: C                                              !DONT HAVE IT.
                    147:        RETURN
                    148: C
                    149:        END
                    150: C PUT- PUT VERB PROCESSOR
                    151: C
                    152: C DECLARATIONS
                    153: C
                    154:        LOGICAL FUNCTION PUT(FLG)
                    155:        IMPLICIT INTEGER (A-Z)
                    156:        LOGICAL TAKE,QOPEN,QHERE,OBJACT,FLG
                    157: #include "parser.h"
                    158: #include "gamestate.h"
                    159: C
                    160: C MISCELLANEOUS VARIABLES
                    161: C
                    162:        COMMON /STAR/ MBASE,STRBIT
                    163: #include "objects.h"
                    164: #include "oflags.h"
                    165: #include "advers.h"
                    166: #include "verbs.h"
                    167: C
                    168: C FUNCTIONS AND DATA
                    169: C
                    170:        QOPEN(R)=((and(OFLAG2(R),OPENBT)).NE.0)
                    171: C PUT, PAGE 2
                    172: C
                    173:        PUT=.FALSE.
                    174:        IF((PRSO.LE.STRBIT).AND.(PRSI.LE.STRBIT)) GO TO 200
                    175:        IF(.NOT.OBJACT(X)) CALL RSPEAK(560)
                    176: C                                              !STAR
                    177:        PUT=.TRUE.
                    178:        RETURN
                    179: C
                    180: 200    IF((QOPEN(PRSI))
                    181: &              .OR.(and(OFLAG1(PRSI),(DOORBT+CONTBT)).NE.0)
                    182: &              .OR.(and(OFLAG2(PRSI),VEHBT).NE.0)) GO TO 300
                    183:        CALL RSPEAK(561)
                    184: C                                              !CANT PUT IN THAT.
                    185:        RETURN
                    186: C
                    187: 300    IF(QOPEN(PRSI)) GO TO 400
                    188: C                                              !IS IT OPEN?
                    189:        CALL RSPEAK(562)
                    190: C                                              !NO, JOKE
                    191:        RETURN
                    192: C
                    193: 400    IF(PRSO.NE.PRSI) GO TO 500
                    194: C                                              !INTO ITSELF?
                    195:        CALL RSPEAK(563)
                    196: C                                              !YES, JOKE.
                    197:        RETURN
                    198: C
                    199: 500    IF(OCAN(PRSO).NE.PRSI) GO TO 600
                    200: C                                              !ALREADY INSIDE.
                    201:        CALL RSPSB2(564,ODESC2(PRSO),ODESC2(PRSI))
                    202:        PUT=.TRUE.
                    203:        RETURN
                    204: C
                    205: 600    IF((WEIGHT(0,PRSO,0)+WEIGHT(0,PRSI,0)+OSIZE(PRSO))
                    206: &              .LE.OCAPAC(PRSI)) GO TO 700
                    207:        CALL RSPEAK(565)
                    208: C                                              !THEN CANT DO IT.
                    209:        RETURN
                    210: C
                    211: C NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM
                    212: C
                    213: 700    J=PRSO
                    214: C                                              !START SEARCH.
                    215: 725    IF(QHERE(J,HERE)) GO TO 750
                    216: C                                              !IS IT HERE?
                    217:        J=OCAN(J)
                    218:        IF(J.NE.0) GO TO 725
                    219: C                                              !MORE TO DO?
                    220:        GO TO 800
                    221: C                                              !NO, SCH FAILS.
                    222: C
                    223: 750    SVO=PRSO
                    224: C                                              !SAVE PARSER.
                    225:        SVI=PRSI
                    226:        PRSA=TAKEW
                    227:        PRSI=0
                    228:        IF(.NOT.TAKE(.FALSE.)) RETURN
                    229: C                                              !TAKE OBJECT.
                    230:        PRSA=PUTW
                    231:        PRSO=SVO
                    232:        PRSI=SVI
                    233:        GO TO 1000
                    234: C
                    235: C NOW SEE IF OBJECT IS ON PERSON.
                    236: C
                    237: 800    IF(OCAN(PRSO).EQ.0) GO TO 1000
                    238: C                                              !INSIDE?
                    239:        IF(QOPEN(OCAN(PRSO))) GO TO 900
                    240: C                                              !OPEN?
                    241:        CALL RSPSUB(566,ODESC2(PRSO))
                    242: C                                              !LOSE.
                    243:        RETURN
                    244: C
                    245: 900    CALL SCRUPD(OFVAL(PRSO))
                    246: C                                              !SCORE OBJECT.
                    247:        OFVAL(PRSO)=0
                    248:        OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
                    249:        CALL NEWSTA(PRSO,0,0,0,WINNER)
                    250: C                                              !TEMPORARILY ON WINNER.
                    251: C
                    252: 1000   IF(OBJACT(X)) RETURN
                    253: C                                              !NO, GIVE OBJECT A SHOT.
                    254:        CALL NEWSTA(PRSO,2,0,PRSI,0)
                    255: C                                              !CONTAINED INSIDE.
                    256:        PUT=.TRUE.
                    257:        RETURN
                    258: C
                    259:        END
                    260: C VALUAC- HANDLES VALUABLES/EVERYTHING
                    261: C
                    262: C DECLARATIONS
                    263: C
                    264:        SUBROUTINE VALUAC(V)
                    265:        IMPLICIT INTEGER (A-Z)
                    266:        LOGICAL LIT,F,F1,TAKE,PUT,DROP,NOTVAL,QHERE
                    267: #include "parser.h"
                    268: #include "gamestate.h"
                    269: #include "objects.h"
                    270: #include "oflags.h"
                    271: #include "verbs.h"
                    272: C
                    273: C FUNCTIONS AND DATA
                    274: C
                    275:        NOTVAL(R)=(SAVEP.EQ.V).AND.(OTVAL(R).LE.0)
                    276: C VALUAC, PAGE 2
                    277: C
                    278:        F=.TRUE.
                    279: C                                              !ASSUME NO ACTIONS.
                    280:        I=579
                    281: C                                              !ASSUME NOT LIT.
                    282:        IF(.NOT.LIT(HERE)) GO TO 4000
                    283: C                                              !IF NOT LIT, PUNT.
                    284:        I=677
                    285: C                                              !ASSUME WRONG VERB.
                    286:        SAVEP=PRSO
                    287: C                                              !SAVE PRSO.
                    288:        SAVEH=HERE
                    289: C                                              !SAVE HERE.
                    290: C
                    291: 100    IF(PRSA.NE.TAKEW) GO TO 1000
                    292: C                                              !TAKE EVERY/VALUA?
                    293:        DO 500 PRSO=1,OLNT
                    294: C                                              !LOOP THRU OBJECTS.
                    295:          IF(.NOT.QHERE(PRSO,HERE).OR.
                    296: &              (and(OFLAG1(PRSO),VISIBT).EQ.0).OR.
                    297: &              (and(OFLAG2(PRSO),ACTRBT).NE.0).OR.
                    298: &              NOTVAL(PRSO)) GO TO 500
                    299:          IF((and(OFLAG1(PRSO),TAKEBT).EQ.0).AND.
                    300: &              (and(OFLAG2(PRSO),TRYBT).EQ.0)) GO TO 500
                    301:          F=.FALSE.
                    302:          CALL RSPSUB(580,ODESC2(PRSO))
                    303:          F1=TAKE(.TRUE.)
                    304:          IF(SAVEH.NE.HERE) RETURN
                    305: 500    CONTINUE
                    306:        GO TO 3000
                    307: C
                    308: 1000   IF(PRSA.NE.DROPW) GO TO 2000
                    309: C                                              !DROP EVERY/VALUA?
                    310:        DO 1500 PRSO=1,OLNT
                    311:          IF((OADV(PRSO).NE.WINNER).OR.NOTVAL(PRSO))
                    312: &              GO TO 1500
                    313:          F=.FALSE.
                    314:          CALL RSPSUB(580,ODESC2(PRSO))
                    315:          F1=DROP(.TRUE.)
                    316:          IF(SAVEH.NE.HERE) RETURN
                    317: 1500   CONTINUE
                    318:        GO TO 3000
                    319: C
                    320: 2000   IF(PRSA.NE.PUTW) GO TO 3000
                    321: C                                              !PUT EVERY/VALUA?
                    322:        DO 2500 PRSO=1,OLNT
                    323: C                                              !LOOP THRU OBJECTS.
                    324:          IF((OADV(PRSO).NE.WINNER)
                    325: &              .OR.(PRSO.EQ.PRSI).OR.NOTVAL(PRSO).OR.
                    326: &              (and(OFLAG1(PRSO),VISIBT).EQ.0)) GO TO 2500
                    327:          F=.FALSE.
                    328:          CALL RSPSUB(580,ODESC2(PRSO))
                    329:          F1=PUT(.TRUE.)
                    330:          IF(SAVEH.NE.HERE) RETURN
                    331: 2500   CONTINUE
                    332: C
                    333: 3000   I=581
                    334:        IF(SAVEP.EQ.V) I=582
                    335: C                                              !CHOOSE MESSAGE.
                    336: 4000   IF(F) CALL RSPEAK(I)
                    337: C                                              !IF NOTHING, REPORT.
                    338:        RETURN
                    339:        END

unix.superglobalmegacorp.com

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