mirror of
https://github.com/PDP-10/its.git
synced 2026-03-06 19:31:20 +00:00
728 lines
13 KiB
Plaintext
728 lines
13 KiB
Plaintext
C ADVENTURES
|
|
IMPLICIT INTEGER(A-Z)
|
|
REAL RAN
|
|
COMMON RTEXT,LLINE
|
|
DIMENSION IOBJ(300),ICHAIN(100),IPLACE(100)
|
|
1 ,IFIXED(100),COND(300),PROP(100),ABB(300),LLINE(1000,22)
|
|
2 ,LTEXT(300),STEXT(300),KEY(300),DEFAULT(300),TRAVEL(1000)
|
|
3 ,TK(25),KTAB(1000),ATAB(1000),BTEXT(200),DSEEN(10)
|
|
4 ,DLOC(10),ODLOC(10),DTRAV(20),RTEXT(100),JSPKT(100)
|
|
5 ,IPLT(100),IFIXT(100),QUIP(100)
|
|
|
|
C READ THE PARAMETERS
|
|
|
|
IF(SETUP.NE.0) GOTO 1
|
|
SETUP=1
|
|
KEYS=1
|
|
LAMP=2
|
|
GRATE=3
|
|
ROD=5
|
|
BIRD=7
|
|
NUGGET=10
|
|
SNAKE=11
|
|
FOOD=19
|
|
WATER=20
|
|
AXE=21
|
|
DATA(QUIP(I),I=1,9)/50,51,64,66,67,68,69,49,79/
|
|
DATA(JSPKT(I),I=1,16)/24,29,0,31,0,31,38,38,42,42,43,46,77,71
|
|
1 ,73,75/
|
|
DATA(IPLT(I),I=1,20)/3,3,8,10,11,14,13,9,15,18,19,17,27,28,29
|
|
1 ,30,0,0,3,3/
|
|
DATA(IFIXT(I),I=1,20)/0,0,1,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0/
|
|
DATA(DTRAV(I),I=1,15)/36,28,19,30,62,60,41,27,17,15,19,28,36
|
|
1 ,300,300/
|
|
DO 1001 I=1,300
|
|
STEXT(I)=0
|
|
IF(I.LE.200) BTEXT(I)=0
|
|
IF(I.LE.100)RTEXT(I)=0
|
|
1001 LTEXT(I)=0
|
|
I=1
|
|
CALL IFILE(1,'ADVENT')
|
|
1002 READ(1,1003) IKIND
|
|
1003 FORMAT(G)
|
|
GOTO(1100,1004,1004,1013,1020,1004,1004)(IKIND+1)
|
|
1004 READ(1,1005)JKIND,(LLINE(I,J),J=3,22)
|
|
1005 FORMAT(1G,20A5)
|
|
IF(JKIND.EQ.-1) GOTO 1002
|
|
DO 1006 K=1,20
|
|
KK=K
|
|
IF(LLINE(I,21-K).NE.' ') GOTO 1007
|
|
1006 CONTINUE
|
|
STOP
|
|
1007 LLINE(I,2)=20-KK+1
|
|
LLINE(I,1)=0
|
|
IF(IKIND.EQ.6)GOTO 1023
|
|
IF(IKIND.EQ.5)GOTO 1011
|
|
IF(IKIND.EQ.1) GOTO 1008
|
|
IF(STEXT(JKIND).NE.0) GOTO 1009
|
|
STEXT(JKIND)=I
|
|
GOTO 1010
|
|
|
|
1008 IF(LTEXT(JKIND).NE.0) GOTO 1009
|
|
LTEXT(JKIND)=I
|
|
GOTO 1010
|
|
1009 LLINE(I-1,1)=I
|
|
1010 I=I+1
|
|
IF(I.NE.1000)GOTO 1004
|
|
PAUSE 'TOO MANY LINES'
|
|
|
|
1011 IF(JKIND.LT.200)GOTO 1012
|
|
IF(BTEXT(JKIND-100).NE.0)GOTO 1009
|
|
BTEXT(JKIND-100)=I
|
|
BTEXT(JKIND-200)=I
|
|
GOTO 1010
|
|
1012 IF(BTEXT(JKIND).NE.0)GOTO 1009
|
|
BTEXT(JKIND)=I
|
|
GOTO 1010
|
|
|
|
1023 IF(RTEXT(JKIND).NE.0) GOTO 1009
|
|
RTEXT(JKIND)=I
|
|
GOTO 1010
|
|
|
|
1013 I=1
|
|
1014 READ(1,1015)JKIND,LKIND,(TK(L),L=1,10)
|
|
1015 FORMAT(12G)
|
|
IF(JKIND.EQ.-1) GOTO 1002
|
|
IF(KEY(JKIND).NE.0) GOTO 1016
|
|
KEY(JKIND)=I
|
|
GOTO 1017
|
|
1016 TRAVEL(I-1)=-TRAVEL(I-1)
|
|
1017 DO 1018 L=1,10
|
|
IF(TK(L).EQ.0) GOTO 1019
|
|
TRAVEL(I)=LKIND*1024+TK(L)
|
|
I=I+1
|
|
IF(I.EQ.1000) STOP
|
|
1018 CONTINUE
|
|
1019 TRAVEL(I-1)=-TRAVEL(I-1)
|
|
GOTO 1014
|
|
|
|
1020 DO 1022 IU=1,1000
|
|
READ(1,1021) KTAB(IU),ATAB(IU)
|
|
1021 FORMAT(G,A5)
|
|
IF(KTAB(IU).EQ.-1)GOTO 1002
|
|
1022 CONTINUE
|
|
PAUSE 'TOO MANY WORDS'
|
|
|
|
|
|
C TRAVEL = NEG IF LAST THIS SOURCE + DEST*1024 + KEYWORD
|
|
|
|
C COND = 1 IF LIGHT, 2 IF DON T ASK QUESTION
|
|
|
|
|
|
|
|
|
|
|
|
1100 DO 1101 I=1,100
|
|
IPLACE(I)=IPLT(I)
|
|
IFIXED(I)=IFIXT(I)
|
|
1101 ICHAIN(I)=0
|
|
|
|
DO 1102 I=1,300
|
|
COND(I)=0
|
|
ABB(I)=0
|
|
1102 IOBJ(I)=0
|
|
DO 1103 I=1,10
|
|
1103 COND(I)=1
|
|
COND(16)=2
|
|
COND(20)=2
|
|
COND(21)=2
|
|
COND(22)=2
|
|
COND(23)=2
|
|
COND(24)=2
|
|
COND(25)=2
|
|
COND(26)=2
|
|
COND(31)=2
|
|
COND(32)=2
|
|
COND(79)=2
|
|
|
|
DO 1107 I=1,100
|
|
KTEM=IPLACE(I)
|
|
IF(KTEM.EQ.0)GOTO 1107
|
|
IF(IOBJ(KTEM).NE.0) GOTO 1104
|
|
IOBJ(KTEM)=I
|
|
GO TO 1107
|
|
1104 KTEM=IOBJ(KTEM)
|
|
1105 IF(ICHAIN(KTEM).NE.0) GOTO 1106
|
|
ICHAIN(KTEM)=I
|
|
GOTO 1107
|
|
1106 KTEM=ICHAIN(KTEM)
|
|
GOTO 1105
|
|
1107 CONTINUE
|
|
IDWARF=0
|
|
IFIRST=1
|
|
IWEST=0
|
|
ILONG=1
|
|
IDETAL=0
|
|
PAUSE 'INIT DONE'
|
|
|
|
|
|
|
|
1 CALL YES(65,1,0,YEA)
|
|
L=1
|
|
LOC=1
|
|
2 DO 73 I=1,3
|
|
IF(ODLOC(I).NE.L.OR.DSEEN(I).EQ.0)GOTO 73
|
|
L=LOC
|
|
CALL SPEAK(2)
|
|
GOTO 74
|
|
73 CONTINUE
|
|
74 LOC=L
|
|
|
|
C DWARF STUFF
|
|
|
|
IF(IDWARF.NE.0) GOTO 60
|
|
IF(LOC.EQ.15) IDWARF=1
|
|
GOTO 71
|
|
60 IF(IDWARF.NE.1)GOTO 63
|
|
IF(RAN(QZ).GT.0.05) GOTO 71
|
|
IDWARF=2
|
|
DO 61 I=1,3
|
|
DLOC(I)=0
|
|
ODLOC(I)=0
|
|
61 DSEEN(I)=0
|
|
CALL SPEAK(3)
|
|
ICHAIN(AXE)=IOBJ(LOC)
|
|
IOBJ(LOC)=AXE
|
|
IPLACE(AXE)=LOC
|
|
GOTO 71
|
|
|
|
63 IDWARF=IDWARF+1
|
|
ATTACK=0
|
|
DTOT=0
|
|
STICK=0
|
|
DO 66 I=1,3
|
|
IF(2*I+IDWARF.LT.8)GOTO 66
|
|
IF(2*I+IDWARF.GT.23.AND.DSEEN(I).EQ.0)GOTO 66
|
|
ODLOC(I)=DLOC(I)
|
|
IF(DSEEN(I).NE.0.AND.LOC.GT.14)GOTO 65
|
|
DLOC(I)=DTRAV(I*2+IDWARF-8)
|
|
DSEEN(I)=0
|
|
IF(DLOC(I).NE.LOC.AND.ODLOC(I).NE.LOC) GOTO 66
|
|
65 DSEEN(I)=1
|
|
DLOC(I)=LOC
|
|
DTOT=DTOT+1
|
|
IF(ODLOC(I).NE.DLOC(I)) GOTO 66
|
|
ATTACK=ATTACK+1
|
|
IF(RAN(QZ).LT.0.1) STICK=STICK+1
|
|
66 CONTINUE
|
|
IF(DTOT.EQ.0) GOTO 71
|
|
IF(DTOT.EQ.1)GOTO 75
|
|
TYPE 67,DTOT
|
|
67 FORMAT(' THERE ARE ',I2,' THREATENING LITTLE DWARVES IN THE
|
|
1 ROOM WITH YOU.',/)
|
|
GOTO 77
|
|
75 CALL SPEAK(4)
|
|
77 IF(ATTACK.EQ.0)GOTO 71
|
|
IF(ATTACK.EQ.1)GOTO 79
|
|
TYPE 78,ATTACK
|
|
78 FORMAT(' ',I2,' OF THEM THROW KNIVES AT YOU!',/)
|
|
GOTO 81
|
|
79 CALL SPEAK(5)
|
|
CALL SPEAK(52+STICK)
|
|
GOTO(71,83)(STICK+1)
|
|
|
|
81 IF(STICK.EQ.0) GOTO 69
|
|
IF(STICK.EQ.1)GOTO 82
|
|
TYPE 68,STICK
|
|
68 FORMAT(' ',I2,' OF THEM GET YOU.',/)
|
|
GOTO 83
|
|
82 CALL SPEAK(6)
|
|
83 PAUSE 'GAMES OVER'
|
|
GOTO 71
|
|
69 CALL SPEAK(7)
|
|
|
|
C PLACE DESCRIPTOR
|
|
|
|
|
|
|
|
71 KK=STEXT(L)
|
|
IF(ABB(L).EQ.0.OR.KK.EQ.0)KK=LTEXT(L)
|
|
IF(KK.EQ.0) GOTO 7
|
|
4 TYPE 5,(LLINE(KK,JJ),JJ=3,LLINE(KK,2))
|
|
5 FORMAT(1X,20A5)
|
|
KK=KK+1
|
|
IF(LLINE(KK-1,1).NE.0) GOTO 4
|
|
TYPE 6
|
|
6 FORMAT(/)
|
|
7 IF(COND(L).EQ.2)GOTO 8
|
|
IF(LOC.EQ.33.AND.RAN(QZ).LT.0.25)CALL SPEAK(8)
|
|
J=L
|
|
GOTO 2000
|
|
|
|
C GO GET A NEW LOCATION
|
|
|
|
8 KK=KEY(LOC)
|
|
IF(KK.EQ.0)GOTO 19
|
|
IF(K.EQ.57)GOTO 32
|
|
IF(K.EQ.67)GOTO 40
|
|
IF(K.EQ.8)GOTO 12
|
|
LOLD=L
|
|
9 LL=TRAVEL(KK)
|
|
IF(LL.LT.0) LL=-LL
|
|
IF(1.EQ.MOD(LL,1024))GOTO 10
|
|
IF(K.EQ.MOD(LL,1024))GOTO 10
|
|
IF(TRAVEL(KK).LT.0)GOTO 11
|
|
KK=KK+1
|
|
GOTO 9
|
|
12 TEMP=LOLD
|
|
LOLD=L
|
|
L=TEMP
|
|
GOTO 21
|
|
10 L=LL/1024
|
|
GOTO 21
|
|
11 JSPK=12
|
|
IF(K.GE.43.AND.K.LE.46)JSPK=9
|
|
IF(K.EQ.29.OR.K.EQ.30)JSPK=9
|
|
IF(K.EQ.7.OR.K.EQ.8.OR.K.EQ.36.OR.K.EQ.37.OR.K.EQ.68)
|
|
1 JSPK=10
|
|
IF(K.EQ.11.OR.K.EQ.19)JSPK=11
|
|
IF(JVERB.EQ.1)JSPK=59
|
|
IF(K.EQ.48)JSPK=42
|
|
IF(K.EQ.17)JSPK=80
|
|
CALL SPEAK(JSPK)
|
|
GOTO 2
|
|
19 CALL SPEAK(13)
|
|
L=LOC
|
|
IF(IFIRST.EQ.0) CALL SPEAK(14)
|
|
21 IF(L.LT.300)GOTO 2
|
|
IL=L-300+1
|
|
GOTO(22,23,24,25,26,31,27,28,29,30,33,34,36,37)IL
|
|
GOTO 2
|
|
|
|
22 L=6
|
|
IF(RAN(QZ).GT.0.5) L=5
|
|
GOTO 2
|
|
23 L=23
|
|
IF(PROP(GRATE).NE.0) L=9
|
|
GOTO 2
|
|
24 L=9
|
|
IF(PROP(GRATE).NE.0)L=8
|
|
GOTO 2
|
|
25 L=20
|
|
IF(IPLACE(NUGGET).NE.-1)L=15
|
|
GOTO 2
|
|
26 L=22
|
|
IF(IPLACE(NUGGET).NE.-1) L=14
|
|
GOTO 2
|
|
27 L=27
|
|
IF(PROP(12).EQ.0)L=31
|
|
GOTO 2
|
|
28 L=28
|
|
IF(PROP(SNAKE).EQ.0)L=32
|
|
GOTO 2
|
|
29 L=29
|
|
IF(PROP(SNAKE).EQ.0) L=32
|
|
GOTO 2
|
|
30 L=30
|
|
IF(PROP(SNAKE).EQ.0) L=32
|
|
GOTO 2
|
|
31 PAUSE 'GAME IS OVER'
|
|
GOTO 1100
|
|
32 IF(IDETAL.LT.3)CALL SPEAK(15)
|
|
IDETAL=IDETAL+1
|
|
L=LOC
|
|
ABB(L)=0
|
|
GOTO 2
|
|
33 L=8
|
|
IF(PROP(GRATE).EQ.0) L=9
|
|
GOTO 2
|
|
34 IF(RAN(QZ).GT.0.2)GOTO 35
|
|
L=68
|
|
GOTO 2
|
|
35 L=65
|
|
38 CALL SPEAK(56)
|
|
GOTO 2
|
|
36 IF(RAN(QZ).GT.0.2)GOTO 35
|
|
L=39
|
|
IF(RAN(QZ).GT.0.5)L=70
|
|
GOTO 2
|
|
37 L=66
|
|
IF(RAN(QZ).GT.0.4)GOTO 38
|
|
L=71
|
|
IF(RAN(QZ).GT.0.25)L=72
|
|
GOTO 2
|
|
39 L=66
|
|
IF(RAN(QZ).GT.0.2)GOTO 38
|
|
L=77
|
|
GOTO 2
|
|
40 IF(LOC.LT.8)CALL SPEAK(57)
|
|
IF(LOC.GE.8)CALL SPEAK(58)
|
|
L=LOC
|
|
GOTO 2
|
|
|
|
|
|
|
|
C DO NEXT INPUT
|
|
|
|
|
|
2000 LTRUBL=0
|
|
LOC=J
|
|
ABB(J)=MOD((ABB(J)+1),5)
|
|
IDARK=0
|
|
IF(MOD(COND(J),2).EQ.1) GOTO 2003
|
|
IF((IPLACE(2).NE.J).AND.(IPLACE(2).NE.-1)) GOTO 2001
|
|
IF(PROP(2).EQ.1)GOTO 2003
|
|
2001 CALL SPEAK(16)
|
|
IDARK=1
|
|
|
|
|
|
2003 I=IOBJ(J)
|
|
2004 IF(I.EQ.0) GOTO 2011
|
|
IF(((I.EQ.6).OR.(I.EQ.9)).AND.(IPLACE(10).EQ.-1))GOTO 2008
|
|
ILK=I
|
|
IF(PROP(I).NE.0) ILK=I+100
|
|
KK=BTEXT(ILK)
|
|
IF(KK.EQ.0) GOTO 2008
|
|
2005 TYPE 2006,(LLINE(KK,JJ),JJ=3,LLINE(KK,2))
|
|
2006 FORMAT(1X,20A5)
|
|
KK=KK+1
|
|
IF(LLINE(KK-1,1).NE.0) GOTO 2005
|
|
TYPE 2007
|
|
2007 FORMAT(/)
|
|
2008 I=ICHAIN(I)
|
|
GOTO 2004
|
|
|
|
|
|
|
|
C K=1 MEANS ANY INPUT
|
|
|
|
|
|
2012 A=B
|
|
JTWO=0
|
|
GOTO 2021
|
|
|
|
2010 JSPK=QUIP(K)
|
|
GOTO 5200
|
|
|
|
2009 JSPK=54
|
|
5200 CALL SPEAK(JSPK)
|
|
|
|
2011 JVERB=0
|
|
JOBJ=0
|
|
JTWO=0
|
|
|
|
2020 CALL GETIN(JTWO,A,TWOWD,B)
|
|
K=70
|
|
IF(A.EQ.'ENTER'.AND.(B.EQ.'STREAM'.OR.B.EQ.'WATER'))GOTO 2010
|
|
IF(A.EQ.'ENTER'.AND.JTWO.NE.0)GOTO 2012
|
|
2021 IF(A.NE.'WEST')GOTO 2023
|
|
IWEST=IWEST+1
|
|
IF(IWEST.NE.10)GOTO 2023
|
|
CALL SPEAK(17)
|
|
2023 DO 2024 I=1,1000
|
|
IF(KTAB(I).EQ.-1)GOTO 3000
|
|
IF(ATAB(I).EQ.A)GOTO 2025
|
|
2024 CONTINUE
|
|
PAUSE 'ERROR 6'
|
|
2025 K=MOD(KTAB(I),1000)
|
|
KQ=KTAB(I)/1000+1
|
|
GOTO (5014,5000,2026,2010)KQ
|
|
PAUSE 'NO NO'
|
|
2026 JVERB=K
|
|
JSPK=JSPKT(JVERB)
|
|
IF(JTWO.NE.0)GOTO 2028
|
|
IF(JOBJ.EQ.0)GOTO 2036
|
|
2027 GOTO(9000,5066,3000,5031,2009,5031,9404,9406,5081,5200,
|
|
1 5200,5300,5506,5502,5504,5505)JVERB
|
|
PAUSE 'ERROR 5'
|
|
|
|
|
|
2028 A=TWOWD
|
|
B=' '
|
|
JTWO=0
|
|
GOTO 2023
|
|
|
|
3000 JSPK=60
|
|
IF(RAN(QZ).GT.0.8)JSPK=61
|
|
IF(RAN(QZ).GT.0.8)JSPK=13
|
|
CALL SPEAK(JSPK)
|
|
LTRUBL=LTRUBL+1
|
|
IF(LTRUBL.NE.3)GOTO 2020
|
|
IF(J.NE.13.OR.IPLACE(7).NE.13.OR.IPLACE(5).NE.-1)GOTO 2032
|
|
CALL YES(18,19,54,YEA)
|
|
GOTO 2033
|
|
2032 IF(J.NE.19.OR.PROP(11).NE.0.OR.IPLACE(7).EQ.-1)GOTO 2034
|
|
CALL YES(20,21,54,YEA)
|
|
GOTO 2033
|
|
2034 IF(J.NE.8.OR.PROP(GRATE).NE.0)GOTO 2035
|
|
CALL YES(62,63,54,YEA)
|
|
2033 IF(YEA.EQ.0)GOTO 2011
|
|
GOTO 2020
|
|
2035 IF(IPLACE(5).NE.J.AND.IPLACE(5).NE.-1)GOTO 2020
|
|
IF(JOBJ.NE.5)GOTO 2020
|
|
CALL SPEAK(22)
|
|
GOTO 2020
|
|
|
|
|
|
2036 GOTO(2037,5062,5062,9403,2009,9403,9404,9406,5062,5062,
|
|
1 5200,5300,5062,5062,5062,5062)JVERB
|
|
PAUSE 'OOPS'
|
|
2037 IF((IOBJ(J).EQ.0).OR.(ICHAIN(IOBJ(J)).NE.0)) GOTO 5062
|
|
DO 5312 I=1,3
|
|
IF(DSEEN(I).NE.0)GOTO 5062
|
|
5312 CONTINUE
|
|
JOBJ=IOBJ(J)
|
|
GOTO 2027
|
|
5062 IF(B.NE.' ')GOTO 5333
|
|
TYPE 5063,A
|
|
5063 FORMAT(' ',A5,' WHAT?',/)
|
|
GOTO 2020
|
|
|
|
5333 TYPE 5334,A,B
|
|
5334 FORMAT(' ',2A5,' WHAT?',/)
|
|
GOTO 2020
|
|
5014 IF(IDARK.EQ.0) GOTO 8
|
|
|
|
IF(RAN(QZ).GT.0.25) GOTO 8
|
|
5017 CALL SPEAK(23)
|
|
PAUSE 'GAME IS OVER'
|
|
GOTO 2011
|
|
|
|
|
|
|
|
5000 JOBJ=K
|
|
IF(JTWO.NE.0)GOTO 2028
|
|
IF((J.EQ.IPLACE(K)).OR.(IPLACE(K).EQ.-1)) GOTO 5004
|
|
IF(K.NE.GRATE)GOTO 502
|
|
IF((J.EQ.1).OR.(J.EQ.4).OR.(J.EQ.7))GOTO 5098
|
|
IF((J.GT.9).AND.(J.LT.15))GOTO 5097
|
|
502 IF(B.NE.' ')GOTO 5316
|
|
TYPE 5005,A
|
|
5005 FORMAT(' I SEE NO ',A5,' HERE.',/)
|
|
GOTO 2011
|
|
5316 TYPE 5317,A,B
|
|
5317 FORMAT(' I SEE NO ',2A5,' HERE.'/)
|
|
GOTO 2011
|
|
5098 K=49
|
|
GOTO 5014
|
|
5097 K=50
|
|
GOTO 5014
|
|
5004 JOBJ=K
|
|
IF(JVERB.NE.0)GOTO 2027
|
|
|
|
|
|
5064 IF(B.NE.' ')GOTO 5314
|
|
TYPE 5001,A
|
|
5001 FORMAT(' WHAT DO YOU WANT TO DO WITH THE ',A5,'?',/)
|
|
GOTO 2020
|
|
5314 TYPE 5315,A,B
|
|
5315 FORMAT(' WHAT DO YOU WANT TO DO WITH THE ',2A5,'?',/)
|
|
GOTO 2020
|
|
|
|
C CARRY
|
|
|
|
9000 IF(JOBJ.EQ.18)GOTO 2009
|
|
IF(IPLACE(JOBJ).NE.J) GOTO 5200
|
|
9001 IF(IFIXED(JOBJ).EQ.0)GOTO 9002
|
|
CALL SPEAK(25)
|
|
GOTO 2011
|
|
9002 IF(JOBJ.NE.BIRD)GOTO 9004
|
|
IF(IPLACE(ROD).NE.-1)GOTO 9003
|
|
CALL SPEAK(26)
|
|
GOTO 2011
|
|
9003 IF((IPLACE(4).EQ.-1).OR.(IPLACE(4).EQ.J)) GOTO 9004
|
|
CALL SPEAK(27)
|
|
GOTO 2011
|
|
9004 IPLACE(JOBJ)=-1
|
|
9005 IF(IOBJ(J).NE.JOBJ) GOTO 9006
|
|
IOBJ(J)=ICHAIN(JOBJ)
|
|
GOTO 2009
|
|
9006 ITEMP=IOBJ(J)
|
|
9007 IF(ICHAIN(ITEMP).EQ.(JOBJ)) GOTO 9008
|
|
ITEMP=ICHAIN(ITEMP)
|
|
GOTO 9007
|
|
9008 ICHAIN(ITEMP)=ICHAIN(JOBJ)
|
|
GOTO 2009
|
|
|
|
|
|
C LOCK, UNLOCK, NO OBJECT YET
|
|
|
|
9403 IF((J.EQ.8).OR.(J.EQ.9))GOTO 5105
|
|
5032 CALL SPEAK(28)
|
|
GOTO 2011
|
|
5105 JOBJ=GRATE
|
|
GOTO 2027
|
|
|
|
C DISCARD OBJECT
|
|
|
|
5066 IF(JOBJ.EQ.18)GOTO 2009
|
|
IF(IPLACE(JOBJ).NE.-1) GOTO 5200
|
|
5012 IF((JOBJ.NE.BIRD).OR.(J.NE.19).OR.(PROP(11).EQ.1))GOTO 9401
|
|
CALL SPEAK(30)
|
|
PROP(11)=1
|
|
5160 ICHAIN(JOBJ)=IOBJ(J)
|
|
IOBJ(J)=JOBJ
|
|
IPLACE(JOBJ)=J
|
|
GOTO 2011
|
|
|
|
9401 CALL SPEAK(54)
|
|
GOTO 5160
|
|
|
|
C LOCK,UNLOCK OBJECT
|
|
|
|
5031 IF(IPLACE(KEYS).NE.-1.AND.IPLACE(KEYS).NE.J)GOTO 5200
|
|
IF(JOBJ.NE.4)GOTO 5102
|
|
CALL SPEAK(32)
|
|
GOTO 2011
|
|
5102 IF(JOBJ.NE.KEYS)GOTO 5104
|
|
CALL SPEAK(55)
|
|
GOTO 2011
|
|
5104 IF(JOBJ.EQ.GRATE)GOTO 5107
|
|
CALL SPEAK(33)
|
|
GOTO 2011
|
|
5107 IF(JVERB.EQ.4) GOTO 5033
|
|
IF(PROP(GRATE).NE.0)GOTO 5034
|
|
CALL SPEAK(34)
|
|
GOTO 2011
|
|
5034 CALL SPEAK(35)
|
|
PROP(GRATE)=0
|
|
PROP(8)=0
|
|
GOTO 2011
|
|
5033 IF(PROP(GRATE).EQ.0)GOTO 5109
|
|
CALL SPEAK(36)
|
|
GOTO 2011
|
|
5109 CALL SPEAK(37)
|
|
PROP(GRATE)=1
|
|
PROP(8)=1
|
|
GOTO 2011
|
|
|
|
|
|
|
|
C LIGHT LAMP
|
|
|
|
9404 IF((IPLACE(2).NE.J).AND.(IPLACE(2).NE.-1))GOTO 5200
|
|
PROP(2)=1
|
|
IDARK=0
|
|
CALL SPEAK(39)
|
|
GOTO 2011
|
|
|
|
C LAMP OFF
|
|
|
|
9406 IF((IPLACE(2).NE.J).AND.(IPLACE(2).NE.-1)) GOTO 5200
|
|
PROP(2)=0
|
|
CALL SPEAK(40)
|
|
GOTO 2011
|
|
|
|
C STRIKE
|
|
|
|
5081 IF(JOBJ.NE.12)GOTO 5200
|
|
PROP(12)=1
|
|
GOTO 2003
|
|
|
|
C ATTACK
|
|
|
|
5300 DO 5313 ID=1,3
|
|
IID=ID
|
|
IF(DSEEN(ID).NE.0)GOTO 5307
|
|
5313 CONTINUE
|
|
IF(JOBJ.EQ.0)GOTO 5062
|
|
IF(JOBJ.EQ.SNAKE) GOTO 5200
|
|
IF(JOBJ.EQ.BIRD) GOTO 5302
|
|
CALL SPEAK(44)
|
|
GOTO 2011
|
|
5302 CALL SPEAK(45)
|
|
IPLACE(JOBJ)=300
|
|
GOTO 9005
|
|
|
|
5307 IF(RAN(QZ).GT.0.4) GOTO 5309
|
|
DSEEN(IID)=0
|
|
ODLOC(IID)=0
|
|
DLOC(IID)=0
|
|
CALL SPEAK(47)
|
|
GOTO 5311
|
|
5309 CALL SPEAK(48)
|
|
5311 K=21
|
|
GOTO 5014
|
|
|
|
C EAT
|
|
|
|
5502 IF((IPLACE(FOOD).NE.J.AND.IPLACE(FOOD).NE.-1).OR.PROP(FOOD).NE.0
|
|
1 .OR.JOBJ.NE.FOOD)GOTO 5200
|
|
PROP(FOOD)=1
|
|
5501 JSPK=72
|
|
GOTO 5200
|
|
|
|
C DRINK
|
|
|
|
5504 IF((IPLACE(WATER).NE.J.AND.IPLACE(WATER).NE.-1)
|
|
1 .OR.PROP(WATER).NE.0.OR.JOBJ.NE.WATER) GOTO 5200
|
|
PROP(WATER)=1
|
|
JSPK=74
|
|
GOTO 5200
|
|
|
|
C RUB
|
|
|
|
5505 IF(JOBJ.NE.LAMP)JSPK=76
|
|
GOTO 5200
|
|
|
|
C POUR
|
|
|
|
5506 IF(JOBJ.NE.WATER)JSPK=78
|
|
PROP(WATER)=1
|
|
GOTO 5200
|
|
|
|
|
|
|
|
END
|
|
|
|
|
|
SUBROUTINE SPEAK(IT)
|
|
IMPLICIT INTEGER(A-Z)
|
|
COMMON RTEXT,LLINE
|
|
DIMENSION RTEXT(100),LLINE(1000,22)
|
|
|
|
KKT=RTEXT(IT)
|
|
IF(KKT.EQ.0)RETURN
|
|
999 TYPE 998, (LLINE(KKT,JJT),JJT=3,LLINE(KKT,2))
|
|
998 FORMAT(1X,20A5)
|
|
KKT=KKT+1
|
|
IF(LLINE(KKT-1,1).NE.0)GOTO 999
|
|
997 TYPE 996
|
|
996 FORMAT(/)
|
|
RETURN
|
|
END
|
|
|
|
|
|
SUBROUTINE GETIN(TWOW,B,C,D)
|
|
IMPLICIT INTEGER(A-Z)
|
|
DIMENSION A(5),M2(6)
|
|
DATA M2/"4000000000,"20000000,"100000,"400,"2,0/
|
|
6 ACCEPT 1,(A(I), I=1,4)
|
|
1 FORMAT(4A5)
|
|
TWOW=0
|
|
S=0
|
|
B=A(1)
|
|
DO 2 J=1,4
|
|
DO 2 K=1,5
|
|
MASK1="774000000000
|
|
IF(K.NE.1) MASK1="177*M2(K)
|
|
IF(((A(J).XOR."201004020100).AND.MASK1).EQ.0)GOTO 3
|
|
IF(S.EQ.0) GOTO 2
|
|
TWOW=1
|
|
CALL SHIFT(A(J),7*(K-1),XX)
|
|
CALL SHIFT(A(J+1),7*(I-6),YY)
|
|
MASK=-M2(6-K)
|
|
C=(XX.AND.MASK)+(YY.AND.(-2-MASK))
|
|
GOTO 4
|
|
3 IF(S.EQ.1) GOTO 2
|
|
S=1
|
|
IF(J.EQ.1) B=(B.AND.-M2(K)).OR.("201004020100.AND.
|
|
1 (-M2(K).XOR.-1))
|
|
2 CONTINUE
|
|
4 D=A(2)
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE YES(X,Y,Z,YEA)
|
|
IMPLICIT INTEGER(A-Z)
|
|
CALL SPEAK(X)
|
|
CALL GETIN(JUNK,IA1,JUNK,IB1)
|
|
IF(IA1.EQ.'NO'.OR.IA1.EQ.'N') GOTO 1
|
|
YEA=1
|
|
IF(Y.NE.0) CALL SPEAK(Y)
|
|
RETURN
|
|
1 YEA=0
|
|
IF(Z.NE.0)CALL SPEAK(Z)
|
|
RETURN
|
|
END
|