home *** CD-ROM | disk | FTP | other *** search
- C MOVETO- MOVE PLAYER TO NEW ROOM
- 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
- LOGICAL FUNCTION MOVETO(NR,WHO)
- IMPLICIT INTEGER (A-Z)
- LOGICAL NLV,LHR,LNR
- C
- C GAME STATE
- C
- LOGICAL TELFLG
- COMMON /PLAY/ WINNER,HERE,TELFLG
- C
- C ROOMS
- C
- COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
- 1 RACTIO(200),RVAL(200),RFLAG(200)
- INTEGER RRAND(200)
- EQUIVALENCE (RVAL,RRAND)
- C
- COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
- 1 RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
- 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 /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
- C ADVENTURERS
- C
- COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
- 1 AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
- C
- COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
- C MOVETO, PAGE 2
- C
- MOVETO=.FALSE. !ASSUME FAILS.
- LHR=(RFLAG(HERE).AND.RLAND).NE.0 !LAND HERE FLAG.
- LNR=(RFLAG(NR).AND.RLAND).NE.0 !LAND THERE FLAG.
- J=AVEHIC(WHO) !HIS VEHICLE
- C
- IF(J.NE.0) GO TO 100 !IN VEHICLE?
- IF(LNR) GO TO 500 !NO, GOING TO LAND?
- CALL RSPEAK(427) !CAN'T GO WITHOUT VEHICLE.
- RETURN
- C
- 100 BITS=0 !ASSUME NOWHERE.
- IF(J.EQ.RBOAT) BITS=RWATER !IN BOAT?
- IF(J.EQ.BALLO) BITS=RAIR !IN BALLOON?
- IF(J.EQ.BUCKE) BITS=RBUCK !IN BUCKET?
- NLV=(RFLAG(NR).AND.BITS).EQ.0 !GOT WRONG VEHICLE FLAG.
- IF((.NOT.LNR .AND.NLV) .OR.
- 1 (LNR.AND.LHR.AND.NLV.AND.(BITS.NE.RLAND)))
- 2 GO TO 800 !GOT WRONG VEHICLE?
- C
- 500 MOVETO=.TRUE. !MOVE SHOULD SUCCEED.
- IF((RFLAG(NR).AND.RMUNG).EQ.0) GO TO 600 !ROOM MUNGED?
- CALL RSPEAK(RRAND(NR)) !YES, TELL HOW.
- RETURN
- C
- 600 IF(WHO.NE.PLAYER) CALL NEWSTA(AOBJ(WHO),0,NR,0,0)
- IF(J.NE.0) CALL NEWSTA(J,0,NR,0,0)
- HERE=NR
- AROOM(WHO)=HERE
- CALL SCRUPD(RVAL(NR)) !SCORE ROOM
- RVAL(NR)=0
- RETURN
- C
- 800 CALL RSPSUB(428,ODESC2(J)) !WRONG VEHICLE.
- RETURN
- END
- C SCORE-- PRINT OUT CURRENT SCORE
- C
- C DECLARATIONS
- C
- SUBROUTINE SCORE(FLG)
- IMPLICIT INTEGER (A-Z)
- LOGICAL FLG
- INTEGER RANK(10),ERANK(5)
- C
- C GAME STATE
- C
- LOGICAL TELFLG
- COMMON /PLAY/ WINNER,HERE,TELFLG
- COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
- 1 LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
- C
- COMMON /CHAN/ INPCH,OUTCH,DBCH
- C
- C ADVENTURERS
- C
- COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
- 1 AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(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
- C FUNCTIONS AND DATA
- C
- DATA RANK/20,19,18,16,12,8,4,2,1,0/
- DATA ERANK/20,15,10,5,0/
- C SCORE, PAGE 2
- C
- AS=ASCORE(WINNER)
- IF(ENDGMF) GO TO 60 !ENDGAME?
- IF(FLG) WRITE(OUTCH,100)
- IF(.NOT.FLG) WRITE(OUTCH,110)
- IF(MOVES.NE.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES
- IF(MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES
- DO 10 I=1,10
- IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50
- 10 CONTINUE
- 50 CALL RSPEAK(484+I)
- RETURN
- C
- 60 IF(FLG) WRITE(OUTCH,140)
- IF(.NOT.FLG) WRITE(OUTCH,150)
- WRITE(OUTCH,120) EGSCOR,EGMXSC,MOVES
- DO 70 I=1,5
- IF((EGSCOR*20/EGMXSC).GE.ERANK(I)) GO TO 80
- 70 CONTINUE
- 80 CALL RSPEAK(786+I)
- RETURN
- C
- 100 FORMAT(' Your score would be',$)
- 110 FORMAT(' Your score is',$)
- 120 FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.')
- 130 FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.')
- 140 FORMAT(' Your score in the endgame would be',$)
- 150 FORMAT(' Your score in the endgame is',$)
- C
- END
- C SCRUPD- UPDATE WINNER'S SCORE
- C
- C DECLARATIONS
- C
- SUBROUTINE SCRUPD(N)
- IMPLICIT INTEGER (A-Z)
- C
- C GAME STATE
- C
- LOGICAL TELFLG
- COMMON /PLAY/ WINNER,HERE,TELFLG
- COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
- 1 LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
- C
- C CLOCK INTERRUPTS
- C
- LOGICAL*1 CFLAG
- COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
- C
- COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
- 1 CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
- 2 CEVGNO,CEVBUC,CEVSPH,CEVEGH,
- 3 CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
- 5 CEVMRS,CEVPIN,CEVINQ,CEVFOL
- C
- C ADVENTURERS
- C
- COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
- 1 AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(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
- IF(ENDGMF) GO TO 100 !ENDGAME?
- ASCORE(WINNER)=ASCORE(WINNER)+N !UPDATE SCORE
- RWSCOR=RWSCOR+N !UPDATE RAW SCORE
- IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN
- CFLAG(CEVEGH)=.TRUE. !TURN ON END GAME
- CTICK(CEVEGH)=15
- RETURN
- C
- 100 EGSCOR=EGSCOR+N !UPDATE EG SCORE.
- RETURN
- END
-