1: C MOVETO- MOVE PLAYER TO NEW ROOM 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: LOGICAL FUNCTION MOVETO(NR,WHO) 10: IMPLICIT INTEGER (A-Z) 11: LOGICAL NLV,LHR,LNR 12: #include "gamestate.h" 13: #include "rooms.h" 14: #include "rflag.h" 15: #include "objects.h" 16: #include "oindex.h" 17: #include "advers.h" 18: C MOVETO, PAGE 2 19: C 20: MOVETO=.FALSE. 21: C !ASSUME FAILS. 22: LHR=and(RFLAG(HERE),RLAND).NE.0 23: LNR=and(RFLAG(NR),RLAND).NE.0 24: J=AVEHIC(WHO) 25: C !HIS VEHICLE 26: C 27: IF(J.NE.0) GO TO 100 28: C !IN VEHICLE? 29: IF(LNR) GO TO 500 30: C !NO, GOING TO LAND? 31: CALL RSPEAK(427) 32: C !CAN'T GO WITHOUT VEHICLE. 33: RETURN 34: C 35: 100 BITS=0 36: C !ASSUME NOWHERE. 37: IF(J.EQ.RBOAT) BITS=RWATER 38: C !IN BOAT? 39: IF(J.EQ.BALLO) BITS=RAIR 40: C !IN BALLOON? 41: IF(J.EQ.BUCKE) BITS=RBUCK 42: C !IN BUCKET? 43: NLV=and(RFLAG(NR),BITS).EQ.0 44: IF((.NOT.LNR .AND.NLV) .OR. 45: & (LNR.AND.LHR.AND.NLV.AND.(BITS.NE.RLAND))) 46: & GO TO 800 47: C 48: 500 MOVETO=.TRUE. 49: C !MOVE SHOULD SUCCEED. 50: IF(and(RFLAG(NR),RMUNG).EQ.0) GO TO 600 51: CALL RSPEAK(RRAND(NR)) 52: C !YES, TELL HOW. 53: RETURN 54: C 55: 600 IF(WHO.NE.PLAYER) CALL NEWSTA(AOBJ(WHO),0,NR,0,0) 56: IF(J.NE.0) CALL NEWSTA(J,0,NR,0,0) 57: HERE=NR 58: AROOM(WHO)=HERE 59: CALL SCRUPD(RVAL(NR)) 60: C !SCORE ROOM 61: RVAL(NR)=0 62: RETURN 63: C 64: 800 CALL RSPSUB(428,ODESC2(J)) 65: C !WRONG VEHICLE. 66: RETURN 67: END 68: C SCORE-- PRINT OUT CURRENT SCORE 69: C 70: C DECLARATIONS 71: C 72: SUBROUTINE SCORE(FLG) 73: IMPLICIT INTEGER (A-Z) 74: LOGICAL FLG 75: INTEGER RANK(10),ERANK(5) 76: #include "gamestate.h" 77: #include "state.h" 78: C 79: COMMON /CHAN/ INPCH,OUTCH,DBCH 80: #include "advers.h" 81: #include "flags.h" 82: C 83: C FUNCTIONS AND DATA 84: C 85: DATA RANK/20,19,18,16,12,8,4,2,1,0/ 86: DATA ERANK/20,15,10,5,0/ 87: C SCORE, PAGE 2 88: C 89: AS=ASCORE(WINNER) 90: C 91: IF(ENDGMF) GO TO 60 92: C !ENDGAME? 93: #ifdef PDP 94: call pscore(AS,MXSCOR,MOVES) 95: #else 96: #ifdef NOCC 97: IF(FLG.AND.MOVES.NE.1) WRITE(OUTCH,100) AS,MXSCOR,MOVES 98: IF(FLG.AND.MOVES.EQ.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES 99: IF(.NOT.FLG.AND.MOVES.NE.1) WRITE(OUTCH,110) AS,MXSCOR,MOVES 100: IF(.NOT.FLG.AND.MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES 101: #else NOCC 102: IF(FLG) WRITE(OUTCH,100) 103: IF(.NOT.FLG) WRITE(OUTCH,110) 104: IF(MOVES.NE.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES 105: IF(MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES 106: #endif NOCC 107: #endif PDP 108: C 109: DO 10 I=1,10 110: IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50 111: 10 CONTINUE 112: 50 CALL RSPEAK(484+I) 113: RETURN 114: C 115: #ifdef PDP 116: 60 continue 117: call pscore(EGSCOR,EGMXSC,MOVES) 118: #else 119: #ifdef NOCC 120: 60 IF(FLG) WRITE(OUTCH,140) EGSCOR,EGMXSC,MOVES 121: IF(.NOT.FLG) WRITE(OUTCH,150) EGSCOR,EGMXSC,MOVES 122: #else NOCC 123: 60 IF(FLG) WRITE(OUTCH,140) 124: IF(.NOT.FLG) WRITE(OUTCH,150) 125: WRITE(OUTCH,120) EGSCOR,EGMXSC,MOVES 126: #endif NOCC 127: #endif PDP 128: DO 70 I=1,5 129: IF((EGSCOR*20/EGMXSC).GE.ERANK(I)) GO TO 80 130: 70 CONTINUE 131: 80 CALL RSPEAK(786+I) 132: RETURN 133: 134: #ifndef PDP 135: #ifdef NOCC 136: 100 FORMAT('Your score would be',I4,' [total of',I4,' points], in', 137: & I5,' moves.') 138: 110 FORMAT('Your score is',I4,' [total of',I4,' points], in', 139: & I5,' moves.') 140: 120 FORMAT('Your score would be',I4,' [total of',I4,' points], in', 141: & I5,' move.') 142: 130 FORMAT('Your score is',I4,' [total of',I4,' points], in', 143: & I5,' move.') 144: 140 FORMAT('Your score in the endgame would be',I4,' [total of', 145: & I4,' points], in',I5,' moves.') 146: 150 FORMAT('Your score in the endgame is',I4,' [total of', 147: & I4,' points], in',I5,' moves.') 148: #else NOCC 149: 100 FORMAT(' Your score would be',$) 150: 110 FORMAT(' Your score is',$) 151: 120 FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.') 152: 130 FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.') 153: 140 FORMAT(' Your score in the endgame would be',$) 154: 150 FORMAT(' Your score in the endgame is',$) 155: #endif NOCC 156: #endif PDP 157: C 158: END 159: C SCRUPD- UPDATE WINNER'S SCORE 160: C 161: C DECLARATIONS 162: C 163: SUBROUTINE SCRUPD(N) 164: IMPLICIT INTEGER (A-Z) 165: #include "gamestate.h" 166: #include "state.h" 167: #include "clock.h" 168: #include "advers.h" 169: #include "flags.h" 170: C 171: IF(ENDGMF) GO TO 100 172: C !ENDGAME? 173: ASCORE(WINNER)=ASCORE(WINNER)+N 174: C !UPDATE SCORE 175: RWSCOR=RWSCOR+N 176: C !UPDATE RAW SCORE 177: IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN 178: CFLAG(CEVEGH)=.TRUE. 179: C !TURN ON END GAME 180: CTICK(CEVEGH)=15 181: RETURN 182: C 183: 100 EGSCOR=EGSCOR+N 184: C !UPDATE EG SCORE. 185: RETURN 186: END