home *** CD-ROM | disk | FTP | other *** search
- C ROBADV-- STEAL WINNER'S VALUABLES
- C
- C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- C WRITTEN BY R. M. SUPNIK
- C
- C DECLARATIONS
- C
- INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
- IMPLICIT INTEGER (A-Z)
- C
- C OBJECTS
- C
- COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
- 1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
- 2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
- 3 OADV(220),OCAN(220),OREAD(220)
- C
- COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
- 1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
- 2 TOOLBT,TURNBT,ONBT
- COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
- 1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
- 2 TCHBT,VEHBT,SCHBT
- C
- ROBADV=0 !COUNT OBJECTS
- DO 100 I=1,OLNT
- IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
- 1 ((OFLAG2(I).AND.SCRDBT).NE.0)) GO TO 100
- CALL NEWSTA(I,0,NR,NC,NA) !STEAL OBJECT
- ROBADV=ROBADV+1
- 100 CONTINUE
- RETURN
- END
- C ROBRM-- STEAL ROOM VALUABLES
- C
- C DECLARATIONS
- C
- INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
- IMPLICIT INTEGER (A-Z)
- LOGICAL PROB,QHERE
- C
- C OBJECTS
- C
- COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
- 1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
- 2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
- 3 OADV(220),OCAN(220),OREAD(220)
- C
- COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
- 1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
- 2 TOOLBT,TURNBT,ONBT
- COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
- 1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
- 2 TCHBT,VEHBT,SCHBT
- C
- ROBRM=0 !COUNT OBJECTS
- DO 100 I=1,OLNT !LOOP ON OBJECTS.
- IF(.NOT. QHERE(I,RM)) GO TO 100
- IF((OTVAL(I).LE.0).OR.((OFLAG2(I).AND.SCRDBT).NE.0).OR.
- 1 ((OFLAG1(I).AND.VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
- 2 GO TO 50
- CALL NEWSTA(I,0,NR,NC,NA)
- ROBRM=ROBRM+1
- OFLAG2(I)=OFLAG2(I).OR.TCHBT
- GO TO 100
- 50 IF((OFLAG2(I).AND.ACTRBT).NE.0)
- 1 ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
- 100 CONTINUE
- RETURN
- END
- C WINNIN-- SEE IF VILLAIN IS WINNING
- C
- C DECLARATIONS
- C
- LOGICAL FUNCTION WINNIN(VL,HR)
- IMPLICIT INTEGER (A-Z)
- LOGICAL PROB
- C
- C OBJECTS
- C
- COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
- 1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
- 2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
- 3 OADV(220),OCAN(220),OREAD(220)
- C
- VS=OCAPAC(VL) !VILLAIN STRENGTH
- PS=VS-FIGHTS(HR,.TRUE.) !HIS MARGIN OVER HERO
- WINNIN=PROB(90,100)
- IF(PS.GT.3) RETURN !+3... 90% WINNING
- WINNIN=PROB(75,85)
- IF(PS.GT.0) RETURN !>0... 75% WINNING
- WINNIN=PROB(50,30)
- IF(PS.EQ.0) RETURN !=0... 50% WINNING
- WINNIN=PROB(25,25)
- IF(VS.GT.1) RETURN !ANY VILLAIN STRENGTH.
- WINNIN=PROB(10,0)
- RETURN
- END
- C FIGHTS-- COMPUTE FIGHT STRENGTH
- C
- C DECLARATIONS
- C
- INTEGER FUNCTION FIGHTS(H,FLG)
- IMPLICIT INTEGER (A-Z)
- LOGICAL FLG
- C
- C GAME STATE
- C
- COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
- 1 LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
- C
- C ADVENTURERS
- C
- COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
- 1 AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
- C
- C FUNCTIONS AND DATA
- C
- DATA SMAX/7/,SMIN/2/
- C
- FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
- IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
- RETURN
- END
- C VILSTR- COMPUTE VILLAIN STRENGTH
- C
- C DECLARATIONS
- C
- INTEGER FUNCTION VILSTR(V)
- IMPLICIT INTEGER (A-Z)
- C
- C PARSER OUTPUT
- C
- LOGICAL PRSWON
- COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
- C
- C OBJECTS
- C
- COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
- 1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
- 2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
- 3 OADV(220),OCAN(220),OREAD(220)
- C
- COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
- 1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
- 2 TOOLBT,TURNBT,ONBT
- COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
- 1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
- 2 TCHBT,VEHBT,SCHBT
- C
- COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
- COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
- COMMON /OINDEX/ LEAVE,TROLL,AXE
- COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
- COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
- COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
- COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
- COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
- COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
- COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
- COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
- COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
- COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
- COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
- COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
- COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
- COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
- COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
- COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
- COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
- COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
- COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
- C
- COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
- C
- C FLAGS
- C
- LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
- LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
- LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
- LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
- LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
- LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
- LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
- LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
- COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
- 1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
- 2 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
- 3 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
- 4 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
- 5 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
- 6 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
- 7 FOLLWF,SPELLF,CPOUTF,CPUSHF
- COMMON /FINDEX/ BTIEF,BINFF
- COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
- COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
- COMMON /FINDEX/ MDIR,MLOC,POLEUF
- COMMON /FINDEX/ QUESNO,NQATT,CORRCT
- COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
- C VILSTR, PAGE 2
- C
- VILSTR=OCAPAC(V)
- IF(VILSTR.LE.0) RETURN
- IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
- THFENF=.FALSE. !THIEF UNENGROSSED.
- VILSTR=MIN0(VILSTR,2) !NO BETTER THAN 2.
- C
- 100 DO 200 I=1,VLNT !SEE IF BEST WEAPON.
- IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
- 1 VILSTR=MAX0(1,VILSTR-1)
- 200 CONTINUE
- RETURN
- END
-