xref: /csrg-svn/contrib/dungeon/dso4.F (revision 35973)
1*35973SbosticC ROBADV-- STEAL WINNER'S VALUABLES
2*35973SbosticC
3*35973SbosticC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4*35973SbosticC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5*35973SbosticC WRITTEN BY R. M. SUPNIK
6*35973SbosticC
7*35973SbosticC DECLARATIONS
8*35973SbosticC
9*35973Sbostic	INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
10*35973Sbostic	IMPLICIT INTEGER (A-Z)
11*35973Sbostic#include "objects.h"
12*35973Sbostic#include "oflags.h"
13*35973SbosticC
14*35973Sbostic	ROBADV=0
15*35973SbosticC						!COUNT OBJECTS
16*35973Sbostic	DO 100 I=1,OLNT
17*35973Sbostic	  IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
18*35973Sbostic&		(and(OFLAG2(I),SCRDBT).NE.0)) GO TO 100
19*35973Sbostic	  CALL NEWSTA(I,0,NR,NC,NA)
20*35973SbosticC						!STEAL OBJECT
21*35973Sbostic	  ROBADV=ROBADV+1
22*35973Sbostic100	CONTINUE
23*35973Sbostic	RETURN
24*35973Sbostic	END
25*35973SbosticC ROBRM-- STEAL ROOM VALUABLES
26*35973SbosticC
27*35973SbosticC DECLARATIONS
28*35973SbosticC
29*35973Sbostic	INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
30*35973Sbostic	IMPLICIT INTEGER (A-Z)
31*35973Sbostic	LOGICAL PROB,QHERE
32*35973Sbostic#include "objects.h"
33*35973Sbostic#include "oflags.h"
34*35973SbosticC
35*35973Sbostic	ROBRM=0
36*35973SbosticC						!COUNT OBJECTS
37*35973Sbostic	DO 100 I=1,OLNT
38*35973SbosticC						!LOOP ON OBJECTS.
39*35973Sbostic	  IF(.NOT. QHERE(I,RM)) GO TO 100
40*35973Sbostic	  IF((OTVAL(I).LE.0).OR.(and(OFLAG2(I),SCRDBT).NE.0).OR.
41*35973Sbostic&		(and(OFLAG1(I),VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
42*35973Sbostic&		GO TO 50
43*35973Sbostic	  CALL NEWSTA(I,0,NR,NC,NA)
44*35973Sbostic	  ROBRM=ROBRM+1
45*35973Sbostic	  OFLAG2(I)=or(OFLAG2(I),TCHBT)
46*35973Sbostic	  GO TO 100
47*35973Sbostic50	  IF(and(OFLAG2(I),ACTRBT).NE.0)
48*35973Sbostic&		ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
49*35973Sbostic100	CONTINUE
50*35973Sbostic	RETURN
51*35973Sbostic	END
52*35973SbosticC WINNIN-- SEE IF VILLAIN IS WINNING
53*35973SbosticC
54*35973SbosticC DECLARATIONS
55*35973SbosticC
56*35973Sbostic	LOGICAL FUNCTION WINNIN(VL,HR)
57*35973Sbostic	IMPLICIT INTEGER (A-Z)
58*35973Sbostic	LOGICAL PROB
59*35973Sbostic#include "objects.h"
60*35973SbosticC
61*35973Sbostic	VS=OCAPAC(VL)
62*35973SbosticC						!VILLAIN STRENGTH
63*35973Sbostic	PS=VS-FIGHTS(HR,.TRUE.)
64*35973SbosticC						!HIS MARGIN OVER HERO
65*35973Sbostic	WINNIN=PROB(90,100)
66*35973Sbostic	IF(PS.GT.3) RETURN
67*35973SbosticC						!+3... 90% WINNING
68*35973Sbostic	WINNIN=PROB(75,85)
69*35973Sbostic	IF(PS.GT.0) RETURN
70*35973SbosticC						!>0... 75% WINNING
71*35973Sbostic	WINNIN=PROB(50,30)
72*35973Sbostic	IF(PS.EQ.0) RETURN
73*35973SbosticC						!=0... 50% WINNING
74*35973Sbostic	WINNIN=PROB(25,25)
75*35973Sbostic	IF(VS.GT.1) RETURN
76*35973SbosticC						!ANY VILLAIN STRENGTH.
77*35973Sbostic	WINNIN=PROB(10,0)
78*35973Sbostic	RETURN
79*35973Sbostic	END
80*35973SbosticC FIGHTS-- COMPUTE FIGHT STRENGTH
81*35973SbosticC
82*35973SbosticC DECLARATIONS
83*35973SbosticC
84*35973Sbostic	INTEGER FUNCTION FIGHTS(H,FLG)
85*35973Sbostic	IMPLICIT INTEGER (A-Z)
86*35973Sbostic	LOGICAL FLG
87*35973SbosticC
88*35973SbosticC GAME STATE
89*35973SbosticC
90*35973Sbostic#include "state.h"
91*35973Sbostic#include "advers.h"
92*35973SbosticC
93*35973SbosticC FUNCTIONS AND DATA
94*35973SbosticC
95*35973Sbostic	DATA SMAX/7/,SMIN/2/
96*35973SbosticC
97*35973Sbostic	FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
98*35973Sbostic	IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
99*35973Sbostic	RETURN
100*35973Sbostic	END
101*35973SbosticC VILSTR-	COMPUTE VILLAIN STRENGTH
102*35973SbosticC
103*35973SbosticC DECLARATIONS
104*35973SbosticC
105*35973Sbostic	INTEGER FUNCTION VILSTR(V)
106*35973Sbostic	IMPLICIT INTEGER (A-Z)
107*35973Sbostic#include "parser.h"
108*35973Sbostic#include "objects.h"
109*35973Sbostic#include "oflags.h"
110*35973Sbostic#include "oindex.h"
111*35973Sbostic#include "villians.h"
112*35973Sbostic#include "flags.h"
113*35973SbosticC VILSTR, PAGE 2
114*35973SbosticC
115*35973Sbostic	VILSTR=OCAPAC(V)
116*35973Sbostic	IF(VILSTR.LE.0) RETURN
117*35973Sbostic	IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
118*35973Sbostic	THFENF=.FALSE.
119*35973SbosticC						!THIEF UNENGROSSED.
120*35973Sbostic	VILSTR=MIN0(VILSTR,2)
121*35973SbosticC						!NO BETTER THAN 2.
122*35973SbosticC
123*35973Sbostic100	DO 200 I=1,VLNT
124*35973SbosticC						!SEE IF  BEST WEAPON.
125*35973Sbostic	  IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
126*35973Sbostic&		VILSTR=MAX0(1,VILSTR-1)
127*35973Sbostic200	CONTINUE
128*35973Sbostic	RETURN
129*35973Sbostic	END
130