home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol045 / dverb1.fnt < prev    next >
Encoding:
Text File  |  1984-04-29  |  12.1 KB  |  433 lines

  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. C
  16. C PARSER OUTPUT
  17. C
  18.     LOGICAL PRSWON
  19.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  20. C
  21. C GAME STATE
  22. C
  23.     LOGICAL TELFLG
  24.     COMMON /PLAY/ WINNER,HERE,TELFLG
  25.     COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
  26.     1    LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
  27.     COMMON /STAR/ MBASE,STRBIT
  28. C
  29. C OBJECTS
  30. C
  31.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  32.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  33.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  34.     3    OADV(220),OCAN(220),OREAD(220)
  35. C
  36.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  37.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  38.     2    TOOLBT,TURNBT,ONBT
  39.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  40.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  41.     2    TCHBT,VEHBT,SCHBT
  42. C
  43. C
  44. C ADVENTURERS
  45. C
  46.     COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
  47.     1    AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
  48. C
  49.     COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
  50. C
  51. C FUNCTIONS AND DATA
  52. C
  53.     QOPEN(O)=(OFLAG2(O).AND.OPENBT).NE.0
  54. C TAKE, PAGE 2
  55. C
  56.     TAKE=.FALSE.                !ASSUME LOSES.
  57.     OA=OACTIO(PRSO)                !GET OBJECT ACTION.
  58.     IF(PRSO.LE.STRBIT) GO TO 100    !STAR?
  59.     TAKE=OBJACT(X)            !YES, LET IT HANDLE.
  60.     RETURN
  61. C
  62. 100    X=OCAN(PRSO)                !INSIDE?
  63.     IF(PRSO.NE.AVEHIC(WINNER)) GO TO 400    !HIS VEHICLE?
  64.     CALL RSPEAK(672)            !DUMMY.
  65.     RETURN
  66. C
  67. 400    IF((OFLAG1(PRSO).AND.TAKEBT).NE.0) GO TO 500 !TAKEABLE?
  68.     IF(.NOT.OAPPLI(OA,0)) CALL RSPEAK(552+RND(5))
  69.     RETURN
  70. C
  71. C OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN.
  72. C
  73. 500    IF((X.NE.0).OR. QHERE(PRSO,HERE)) GO TO 600
  74.     IF(OADV(PRSO).EQ.WINNER) CALL RSPEAK(557)    !ALREADY GOT IT?
  75.     RETURN
  76. C
  77. 600    IF(((X.NE.0).AND.(OADV(X).EQ.WINNER)).OR.
  78.     1    ((WEIGHT(0,PRSO,WINNER)+OSIZE(PRSO)).LE.MXLOAD))
  79.     2    GO TO 700
  80.     CALL RSPEAK(558)            !TOO MUCH WEIGHT.
  81.     RETURN
  82. C
  83. 700    TAKE=.TRUE.                !AT LAST.
  84.     IF(OAPPLI(OA,0)) RETURN            !DID IT HANDLE?
  85.     CALL NEWSTA(PRSO,0,0,0,WINNER)        !TAKE OBJECT FOR WINNER.
  86.     OFLAG2(PRSO)=OFLAG2(PRSO).OR.TCHBT    !HAS BEEN TOUCHED.
  87.     CALL SCRUPD(OFVAL(PRSO))        !UPDATE SCORE.
  88.     OFVAL(PRSO)=0                !CANT BE SCORED AGAIN.
  89.     IF(FLG) CALL RSPEAK(559)        !TELL TAKEN.
  90.     RETURN
  91. C
  92.     END
  93. C DROP- DROP VERB PROCESSOR
  94. C
  95. C DECLARATIONS
  96. C
  97.     LOGICAL FUNCTION DROP(Z)
  98.     IMPLICIT INTEGER (A-Z)
  99.     LOGICAL F,PUT,OBJACT
  100. C
  101. C PARSER OUTPUT
  102. C
  103.     LOGICAL PRSWON
  104.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  105. C
  106. C GAME STATE
  107. C
  108.     LOGICAL TELFLG
  109.     COMMON /PLAY/ WINNER,HERE,TELFLG
  110. C
  111. C ROOMS
  112. C
  113.     COMMON /RINDEX/ WHOUS,LROOM,CELLA
  114.     COMMON /RINDEX/ MTROL,MAZE1    
  115.     COMMON /RINDEX/ MGRAT,MAZ15    
  116.     COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
  117.     COMMON /RINDEX/ STREA,EGYPT,ECHOR
  118.     COMMON /RINDEX/ TSHAF    
  119.     COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
  120.     COMMON /RINDEX/ CAROU    
  121.     COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
  122.     COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
  123.     COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
  124.     COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
  125.     COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
  126.     COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
  127.     COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
  128.     COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
  129.     COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
  130.     COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
  131.     COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
  132.     COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
  133. C
  134. C OBJECTS
  135. C
  136.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  137.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  138.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  139.     3    OADV(220),OCAN(220),OREAD(220)
  140. C
  141.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  142.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  143.     2    TOOLBT,TURNBT,ONBT
  144.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  145.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  146.     2    TCHBT,VEHBT,SCHBT
  147. C
  148. C
  149. C ADVENTURERS
  150. C
  151.     COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
  152.     1    AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
  153. C
  154. C VERBS
  155. C
  156.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  157.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  158.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  159.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  160.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  161.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  162.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  163.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  164.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  165.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  166.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  167.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  168.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  169. C DROP, PAGE 2
  170. C
  171.     DROP=.TRUE.                !ASSUME WINS.
  172.     X=OCAN(PRSO)                !GET CONTAINER.
  173.     IF(X.EQ.0) GO TO 200            !IS IT INSIDE?
  174.     IF(OADV(X).NE.WINNER) GO TO 1000    !IS HE CARRYING CON?
  175.     IF((OFLAG2(X).AND.OPENBT).NE.0) GO TO 300 !IS IT OPEN?
  176.     CALL RSPSUB(525,ODESC2(X))        !CANT REACH.
  177.     RETURN
  178. C
  179. 200    IF(OADV(PRSO).NE.WINNER) GO TO 1000    !IS HE CARRYING OBJ?
  180. 300    IF(AVEHIC(WINNER).EQ.0) GO TO 400    !IS HE IN VEHICLE?
  181.     PRSI=AVEHIC(WINNER)            !YES,
  182.     F=PUT(.TRUE.)                !DROP INTO VEHICLE.
  183.     PRSI=0                    !DISARM PARSER.
  184.     RETURN                    !DONE.
  185. C
  186. 400    CALL NEWSTA(PRSO,0,HERE,0,0)        !DROP INTO ROOM.
  187.     IF(HERE.EQ.MTREE) CALL NEWSTA(PRSO,0,FORE3,0,0)
  188.     CALL SCRUPD(OFVAL(PRSO))        !SCORE OBJECT.
  189.     OFVAL(PRSO)=0                !CANT BE SCORED AGAIN.
  190.     OFLAG2(PRSO)=OFLAG2(PRSO).OR.TCHBT    !HAS BEEN TOUCHED.
  191. C
  192.     IF(OBJACT(X)) RETURN            !DID IT HANDLE?
  193.     I=0                    !ASSUME NOTHING TO SAY.
  194.     IF(PRSA.EQ.DROPW) I=528
  195.     IF(PRSA.EQ.THROWW) I=529
  196.     IF((I.NE.0).AND.(HERE.EQ.MTREE)) I=659
  197.     CALL RSPSUB(I,ODESC2(PRSO))
  198.     RETURN
  199. C
  200. 1000    CALL RSPEAK(527)            !DONT HAVE IT.
  201.     RETURN
  202. C
  203.     END
  204. C PUT- PUT VERB PROCESSOR
  205. C
  206. C DECLARATIONS
  207. C
  208.     LOGICAL FUNCTION PUT(FLG)
  209.     IMPLICIT INTEGER (A-Z)
  210.     LOGICAL QOPEN,QHERE,OBJACT,FLG
  211. C
  212. C PARSER OUTPUT
  213. C
  214.     LOGICAL PRSWON
  215.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  216. C
  217. C GAME STATE
  218. C
  219.     LOGICAL TELFLG
  220.     COMMON /PLAY/ WINNER,HERE,TELFLG
  221. C
  222. C MISCELLANEOUS VARIABLES
  223. C
  224.     COMMON /STAR/ MBASE,STRBIT
  225. C
  226. C OBJECTS
  227. C
  228.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  229.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  230.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  231.     3    OADV(220),OCAN(220),OREAD(220)
  232. C
  233.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  234.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  235.     2    TOOLBT,TURNBT,ONBT
  236.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  237.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  238.     2    TCHBT,VEHBT,SCHBT
  239. C
  240. C ADVENTURERS
  241. C
  242.     COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
  243.     1    AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
  244. C
  245. C VERBS
  246. C
  247.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  248.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  249.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  250.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  251.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  252.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  253.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  254.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  255.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  256.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  257.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  258.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  259.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  260. C
  261. C FUNCTIONS AND DATA
  262. C
  263.     QOPEN(R)=(OFLAG2(R).AND.OPENBT).NE.0
  264. C PUT, PAGE 2
  265. C
  266.     PUT=.FALSE.
  267.     IF((PRSO.LE.STRBIT).AND.(PRSI.LE.STRBIT)) GO TO 200
  268.     IF(.NOT.OBJACT(X)) CALL RSPEAK(560)        !STAR
  269.     PUT=.TRUE.
  270.     RETURN
  271. C
  272. 200    IF(QOPEN(PRSI).OR.((OFLAG1(PRSI).AND.(DOORBT+CONTBT)).NE.0)
  273.     1    .OR.((OFLAG2(PRSI).AND.VEHBT).NE.0)) GO TO 300
  274.     CALL RSPEAK(561)            !CANT PUT IN THAT.
  275.     RETURN
  276. C
  277. 300    IF(QOPEN(PRSI)) GO TO 400        !IS IT OPEN?
  278.     CALL RSPEAK(562)            !NO, JOKE
  279.     RETURN
  280. C
  281. 400    IF(PRSO.NE.PRSI) GO TO 500        !INTO ITSELF?
  282.     CALL RSPEAK(563)            !YES, JOKE.
  283.     RETURN
  284. C
  285. 500    IF(OCAN(PRSO).NE.PRSI) GO TO 600    !ALREADY INSIDE.
  286.     CALL RSPSB2(564,ODESC2(PRSO),ODESC2(PRSI))
  287.     PUT=.TRUE.
  288.     RETURN
  289. C
  290. 600    IF((WEIGHT(0,PRSO,0)+WEIGHT(0,PRSI,0)+OSIZE(PRSO))
  291.     1    .LE.OCAPAC(PRSI)) GO TO 700    !NOT TOO FULL?
  292.     CALL RSPEAK(565)            !THEN CANT DO IT.
  293.     RETURN
  294. C
  295. C NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM
  296. C
  297. 700    J=PRSO                    !START SEARCH.
  298. 725    IF(QHERE(J,HERE)) GO TO 750        !IS IT HERE?
  299.     J=OCAN(J)
  300.     IF(J.NE.0) GO TO 725            !MORE TO DO?
  301.     GO TO 800                !NO, SCH FAILS.
  302. C
  303. 750    SVO=PRSO                !SAVE PARSER.
  304.     SVI=PRSI
  305.     PRSA=TAKEW
  306.     PRSI=0
  307.     IF(.NOT.TAKE(.FALSE.)) RETURN        !TAKE OBJECT.
  308.     PRSA=PUTW
  309.     PRSO=SVO
  310.     PRSI=SVI
  311.     GO TO 1000
  312. C
  313. C NOW SEE IF OBJECT IS ON PERSON.
  314. C
  315. 800    IF(OCAN(PRSO).EQ.0) GO TO 1000        !INSIDE?
  316.     IF(QOPEN(OCAN(PRSO))) GO TO 900        !OPEN?
  317.     CALL RSPSUB(566,ODESC2(PRSO))        !LOSE.
  318.     RETURN
  319. C
  320. 900    CALL SCRUPD(OFVAL(PRSO))        !SCORE OBJECT.
  321.     OFVAL(PRSO)=0
  322.     OFLAG2(PRSO)=OFLAG2(PRSO).OR.TCHBT    !HAS BEEN TOUCHED.
  323.     CALL NEWSTA(PRSO,0,0,0,WINNER)        !TEMPORARILY ON WINNER.
  324. C
  325. 1000    IF(OBJACT(X)) RETURN            !NO, GIVE OBJECT A SHOT.
  326.     CALL NEWSTA(PRSO,2,0,PRSI,0)        !CONTAINED INSIDE.
  327.     PUT=.TRUE.
  328.     RETURN
  329. C
  330.     END
  331. C VALUAC- HANDLES VALUABLES/EVERYTHING
  332. C
  333. C DECLARATIONS
  334. C
  335.     SUBROUTINE VALUAC(V)
  336.     IMPLICIT INTEGER (A-Z)
  337.     LOGICAL LIT,F,F1,TAKE,PUT,DROP,NOTVAL,QHERE
  338. C
  339. C PARSER OUTPUT
  340. C
  341.     LOGICAL PRSWON
  342.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  343. C
  344. C GAME STATE
  345. C
  346.     LOGICAL TELFLG
  347.     COMMON /PLAY/ WINNER,HERE,TELFLG
  348. C
  349. C OBJECTS
  350. C
  351.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  352.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  353.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  354.     3    OADV(220),OCAN(220),OREAD(220)
  355. C
  356.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  357.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  358.     2    TOOLBT,TURNBT,ONBT
  359.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  360.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  361.     2    TCHBT,VEHBT,SCHBT
  362. C
  363. C VERBS
  364. C
  365.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  366.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  367.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  368.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  369.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  370.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  371.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  372.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  373.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  374.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  375.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  376.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  377.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  378. C
  379. C FUNCTIONS AND DATA
  380. C
  381.     NOTVAL(R)=(SAVEP.EQ.V).AND.(OTVAL(R).LE.0)
  382. C VALUAC, PAGE 2
  383. C
  384.     F=.TRUE.                !ASSUME NO ACTIONS.
  385.     I=579                    !ASSUME NOT LIT.
  386.     IF(.NOT.LIT(HERE)) GO TO 4000        !IF NOT LIT, PUNT.
  387.     I=677                    !ASSUME WRONG VERB.
  388.     SAVEP=PRSO                !SAVE PRSO.
  389.     SAVEH=HERE                !SAVE HERE.
  390. C
  391. 100    IF(PRSA.NE.TAKEW) GO TO 1000        !TAKE EVERY/VALUA?
  392.     DO 500 PRSO=1,OLNT            !LOOP THRU OBJECTS.
  393.       IF(.NOT.QHERE(PRSO,HERE).OR.
  394.     1    ((OFLAG1(PRSO).AND.VISIBT).EQ.0).OR.
  395.     2    ((OFLAG2(PRSO).AND.ACTRBT).NE.0).OR.
  396.     3    NOTVAL(PRSO)) GO TO 500
  397.       IF(((OFLAG1(PRSO).AND.TAKEBT).EQ.0).AND.
  398.     1    ((OFLAG2(PRSO).AND.TRYBT).EQ.0)) GO TO 500
  399.       F=.FALSE.
  400.       CALL RSPSUB(580,ODESC2(PRSO))
  401.       F1=TAKE(.TRUE.)
  402.       IF(SAVEH.NE.HERE) RETURN
  403. 500    CONTINUE
  404.     GO TO 3000
  405. C
  406. 1000    IF(PRSA.NE.DROPW) GO TO 2000        !DROP EVERY/VALUA?
  407.     DO 1500 PRSO=1,OLNT
  408.       IF((OADV(PRSO).NE.WINNER).OR.NOTVAL(PRSO))
  409.     1    GO TO 1500
  410.       F=.FALSE.
  411.       CALL RSPSUB(580,ODESC2(PRSO))
  412.       F1=DROP(.TRUE.)
  413.       IF(SAVEH.NE.HERE) RETURN
  414. 1500    CONTINUE
  415.     GO TO 3000
  416. C
  417. 2000    IF(PRSA.NE.PUTW) GO TO 3000        !PUT EVERY/VALUA?
  418.     DO 2500 PRSO=1,OLNT            !LOOP THRU OBJECTS.
  419.       IF((OADV(PRSO).NE.WINNER)
  420.     1    .OR.(PRSO.EQ.PRSI).OR.NOTVAL(PRSO).OR.
  421.     2    ((OFLAG1(PRSO).AND.VISIBT).EQ.0)) GO TO 2500
  422.       F=.FALSE.
  423.       CALL RSPSUB(580,ODESC2(PRSO))
  424.       F1=PUT(.TRUE.)
  425.       IF(SAVEH.NE.HERE) RETURN
  426. 2500    CONTINUE
  427. C
  428. 3000    I=581
  429.     IF(SAVEP.EQ.V) I=582            !CHOOSE MESSAGE.
  430. 4000    IF(F) CALL RSPEAK(I)            !IF NOTHING, REPORT.
  431.     RETURN
  432.     END
  433.