home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume2 / dungeon / part07 / dso4.F < prev    next >
Text File  |  1987-09-01  |  3KB  |  130 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. #include "objects.h"
  12. #include "oflags.h"
  13. C
  14.     ROBADV=0
  15. C                        !COUNT OBJECTS
  16.     DO 100 I=1,OLNT
  17.       IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
  18. &        (and(OFLAG2(I),SCRDBT).NE.0)) GO TO 100
  19.       CALL NEWSTA(I,0,NR,NC,NA)
  20. C                        !STEAL OBJECT
  21.       ROBADV=ROBADV+1
  22. 100    CONTINUE
  23.     RETURN
  24.     END
  25. C ROBRM-- STEAL ROOM VALUABLES
  26. C
  27. C DECLARATIONS
  28. C
  29.     INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
  30.     IMPLICIT INTEGER (A-Z)
  31.     LOGICAL PROB,QHERE
  32. #include "objects.h"
  33. #include "oflags.h"
  34. C
  35.     ROBRM=0
  36. C                        !COUNT OBJECTS
  37.     DO 100 I=1,OLNT
  38. C                        !LOOP ON OBJECTS.
  39.       IF(.NOT. QHERE(I,RM)) GO TO 100
  40.       IF((OTVAL(I).LE.0).OR.(and(OFLAG2(I),SCRDBT).NE.0).OR.
  41. &        (and(OFLAG1(I),VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
  42. &        GO TO 50
  43.       CALL NEWSTA(I,0,NR,NC,NA)
  44.       ROBRM=ROBRM+1
  45.       OFLAG2(I)=or(OFLAG2(I),TCHBT)
  46.       GO TO 100
  47. 50      IF(and(OFLAG2(I),ACTRBT).NE.0)
  48. &        ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
  49. 100    CONTINUE
  50.     RETURN
  51.     END
  52. C WINNIN-- SEE IF VILLAIN IS WINNING
  53. C
  54. C DECLARATIONS
  55. C
  56.     LOGICAL FUNCTION WINNIN(VL,HR)
  57.     IMPLICIT INTEGER (A-Z)
  58.     LOGICAL PROB
  59. #include "objects.h"
  60. C
  61.     VS=OCAPAC(VL)
  62. C                        !VILLAIN STRENGTH
  63.     PS=VS-FIGHTS(HR,.TRUE.)
  64. C                        !HIS MARGIN OVER HERO
  65.     WINNIN=PROB(90,100)
  66.     IF(PS.GT.3) RETURN
  67. C                        !+3... 90% WINNING
  68.     WINNIN=PROB(75,85)
  69.     IF(PS.GT.0) RETURN
  70. C                        !>0... 75% WINNING
  71.     WINNIN=PROB(50,30)
  72.     IF(PS.EQ.0) RETURN
  73. C                        !=0... 50% WINNING
  74.     WINNIN=PROB(25,25)
  75.     IF(VS.GT.1) RETURN
  76. C                        !ANY VILLAIN STRENGTH.
  77.     WINNIN=PROB(10,0)
  78.     RETURN
  79.     END
  80. C FIGHTS-- COMPUTE FIGHT STRENGTH
  81. C
  82. C DECLARATIONS
  83. C
  84.     INTEGER FUNCTION FIGHTS(H,FLG)
  85.     IMPLICIT INTEGER (A-Z)
  86.     LOGICAL FLG
  87. C
  88. C GAME STATE
  89. C
  90. #include "state.h"
  91. #include "advers.h"
  92. C
  93. C FUNCTIONS AND DATA
  94. C
  95.     DATA SMAX/7/,SMIN/2/
  96. C
  97.     FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
  98.     IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
  99.     RETURN
  100.     END
  101. C VILSTR-    COMPUTE VILLAIN STRENGTH
  102. C
  103. C DECLARATIONS
  104. C
  105.     INTEGER FUNCTION VILSTR(V)
  106.     IMPLICIT INTEGER (A-Z)
  107. #include "parser.h"
  108. #include "objects.h"
  109. #include "oflags.h"
  110. #include "oindex.h"
  111. #include "villians.h"
  112. #include "flags.h"
  113. C VILSTR, PAGE 2
  114. C
  115.     VILSTR=OCAPAC(V)
  116.     IF(VILSTR.LE.0) RETURN
  117.     IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
  118.     THFENF=.FALSE.
  119. C                        !THIEF UNENGROSSED.
  120.     VILSTR=MIN0(VILSTR,2)
  121. C                        !NO BETTER THAN 2.
  122. C
  123. 100    DO 200 I=1,VLNT
  124. C                        !SEE IF  BEST WEAPON.
  125.       IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
  126. &        VILSTR=MAX0(1,VILSTR-1)
  127. 200    CONTINUE
  128.     RETURN
  129.     END
  130.