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