home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol047 / dso4.for < prev    next >
Encoding:
Text File  |  1984-04-29  |  6.4 KB  |  215 lines

  1. C ROBADV-- STEAL WINNER'S VALUABLES
  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.     INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
  10.     IMPLICIT INTEGER (A-Z)
  11. C
  12. C OBJECTS
  13. C
  14.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  15.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  16.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  17.     3    OADV(220),OCAN(220),OREAD(220)
  18. C
  19.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  20.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  21.     2    TOOLBT,TURNBT,ONBT
  22.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  23.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  24.     2    TCHBT,VEHBT,SCHBT
  25. C
  26.     ROBADV=0                !COUNT OBJECTS
  27.     DO 100 I=1,OLNT
  28.       IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
  29.     1    ((OFLAG2(I).AND.SCRDBT).NE.0)) GO TO 100
  30.       CALL NEWSTA(I,0,NR,NC,NA)        !STEAL OBJECT
  31.       ROBADV=ROBADV+1
  32. 100    CONTINUE
  33.     RETURN
  34.     END
  35. C ROBRM-- STEAL ROOM VALUABLES
  36. C
  37. C DECLARATIONS
  38. C
  39.     INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
  40.     IMPLICIT INTEGER (A-Z)
  41.     LOGICAL PROB,QHERE
  42. C
  43. C OBJECTS
  44. C
  45.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  46.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  47.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  48.     3    OADV(220),OCAN(220),OREAD(220)
  49. C
  50.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  51.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  52.     2    TOOLBT,TURNBT,ONBT
  53.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  54.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  55.     2    TCHBT,VEHBT,SCHBT
  56. C
  57.     ROBRM=0                    !COUNT OBJECTS
  58.     DO 100 I=1,OLNT                !LOOP ON OBJECTS.
  59.       IF(.NOT. QHERE(I,RM)) GO TO 100
  60.       IF((OTVAL(I).LE.0).OR.((OFLAG2(I).AND.SCRDBT).NE.0).OR.
  61.     1    ((OFLAG1(I).AND.VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
  62.     2    GO TO 50
  63.       CALL NEWSTA(I,0,NR,NC,NA)
  64.       ROBRM=ROBRM+1
  65.       OFLAG2(I)=OFLAG2(I).OR.TCHBT
  66.       GO TO 100
  67. 50      IF((OFLAG2(I).AND.ACTRBT).NE.0)
  68.     1    ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
  69. 100    CONTINUE
  70.     RETURN
  71.     END
  72. C WINNIN-- SEE IF VILLAIN IS WINNING
  73. C
  74. C DECLARATIONS
  75. C
  76.     LOGICAL FUNCTION WINNIN(VL,HR)
  77.     IMPLICIT INTEGER (A-Z)
  78.     LOGICAL PROB
  79. C
  80. C OBJECTS
  81. C
  82.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  83.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  84.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  85.     3    OADV(220),OCAN(220),OREAD(220)
  86. C
  87.     VS=OCAPAC(VL)            !VILLAIN STRENGTH
  88.     PS=VS-FIGHTS(HR,.TRUE.)        !HIS MARGIN OVER HERO
  89.     WINNIN=PROB(90,100)
  90.     IF(PS.GT.3) RETURN        !+3... 90% WINNING
  91.     WINNIN=PROB(75,85)
  92.     IF(PS.GT.0) RETURN        !>0... 75% WINNING
  93.     WINNIN=PROB(50,30)
  94.     IF(PS.EQ.0) RETURN        !=0... 50% WINNING
  95.     WINNIN=PROB(25,25)
  96.     IF(VS.GT.1) RETURN        !ANY VILLAIN STRENGTH.
  97.     WINNIN=PROB(10,0)
  98.     RETURN
  99.     END
  100. C FIGHTS-- COMPUTE FIGHT STRENGTH
  101. C
  102. C DECLARATIONS
  103. C
  104.     INTEGER FUNCTION FIGHTS(H,FLG)
  105.     IMPLICIT INTEGER (A-Z)
  106.     LOGICAL FLG
  107. C
  108. C GAME STATE
  109. C
  110.     COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
  111.     1    LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
  112. C
  113. C ADVENTURERS
  114. C
  115.     COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
  116.     1    AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
  117. C
  118. C FUNCTIONS AND DATA
  119. C
  120.     DATA SMAX/7/,SMIN/2/
  121. C
  122.     FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
  123.     IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
  124.     RETURN
  125.     END
  126. C VILSTR-    COMPUTE VILLAIN STRENGTH
  127. C
  128. C DECLARATIONS
  129. C
  130.     INTEGER FUNCTION VILSTR(V)
  131.     IMPLICIT INTEGER (A-Z)
  132. C
  133. C PARSER OUTPUT
  134. C
  135.     LOGICAL PRSWON
  136.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  137. C
  138. C OBJECTS
  139. C
  140.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  141.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  142.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  143.     3    OADV(220),OCAN(220),OREAD(220)
  144. C
  145.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  146.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  147.     2    TOOLBT,TURNBT,ONBT
  148.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  149.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  150.     2    TCHBT,VEHBT,SCHBT
  151. C
  152.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  153.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  154.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  155.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  156.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  157.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  158.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  159.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  160.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  161.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  162.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  163.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  164.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  165.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  166.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  167.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  168.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  169.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  170.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  171.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  172.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  173.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  174. C
  175.     COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
  176. C
  177. C FLAGS
  178. C
  179.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  180.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  181.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  182.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  183.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  184.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  185.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  186.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  187.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  188.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  189.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  190.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  191.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  192.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  193.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  194.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  195.     COMMON /FINDEX/ BTIEF,BINFF
  196.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  197.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  198.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  199.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  200.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  201. C VILSTR, PAGE 2
  202. C
  203.     VILSTR=OCAPAC(V)
  204.     IF(VILSTR.LE.0) RETURN
  205.     IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
  206.     THFENF=.FALSE.                !THIEF UNENGROSSED.
  207.     VILSTR=MIN0(VILSTR,2)        !NO BETTER THAN 2.
  208. C
  209. 100    DO 200 I=1,VLNT                !SEE IF  BEST WEAPON.
  210.       IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
  211.     1    VILSTR=MAX0(1,VILSTR-1)
  212. 200    CONTINUE
  213.     RETURN
  214.     END
  215.