-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest-numbered-on-goto.bas
274 lines (274 loc) · 5.57 KB
/
test-numbered-on-goto.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
1 REM RANDOMIZATION ROUTINE
2 PRINT "PRESS A KEY"
3 Z=0
4 Z=Z+1
5 A$=INKEY$
6 IF A$="" THEN 4
7 Y=RND(-Z)
8 REM CLEAR SCREEN ROUTINE
9 FOR Z=0 TO 24
10 PRINT
11 NEXT Z
12 REM VARIABLES
20 Z=0
30 Y=1
40 A=Z
50 T=Z
60 V=13
70 C=44
80 D=Z
90 E=Z
100 R=Z
110 X=2
120 I=Z
130 J=Z
140 DIM A(C)
150 G=100
160 H=4
170 K=512
180 L=32
190 U=16
200 N=255
210 O=99
220 F=65535
230 Q=6
240 S=3841
250 B=4096
260 M=39
270 P=Y
280 W=Z
290 FOR I=Z TO C
300 READ A(I)
310 NEXT I
320 PRINT "WELCOME TO THE BATTLE SYSTEM TEST!"
330 PRINT
340 PRINT
350 PRINT "TWO SOLDIERS APPROACH."
360 PRINT
370 REM MAIN LOOP
380 IF A(V*A)=Z THEN 420
390 IF A=Z THEN 780
400 T=Z
410 GOTO 1190
420 REM ITERATE ATTACKER
430 IF A(Z)=Z THEN 2410
440 A=A+Y
450 IF A<>Z THEN T=Z
460 IF A(V*A)=Z THEN A=A+Y
470 IF A>X THEN A=Z
480 D=Z
490 IF A(V*Y)=Z THEN D=D+Y
500 IF A(V*X)=Z THEN D=D+Y
510 IF D=X THEN 530
520 GOTO 370
530 REM NEW GAME
540 PRINT "YOU ARE VICTORIOUS."
550 PRINT
560 W=W+Y
570 A=Z
580 T=Z
590 IF W>=10 THEN GOSUB 690
600 FOR I=Y TO X
610 A(I*V)=A(I*V+Y)
620 NEXT I
630 GOSUB 2090
640 IF R<12.5 THEN PRINT "YOU OBTAINED A POTION!"
650 IF R<12.5 THEN PRINT
660 IF R<12.5 THEN P=P+Y
670 IF P>O THEN P=O
680 GOTO 350
690 REM INCREASE DIFFICULTY
700 GOSUB 2090
710 IF R>=25 THEN RETURN
720 FOR I=V TO M-Y
730 A(I)=A(I)*1.5
740 NEXT I
750 PRINT "THE ENEMIES HAVE POWERED UP!"
760 PRINT
770 RETURN
780 REM MENU LOOP
790 PRINT
800 PRINT A(Z);"/";A(Y);"HP"
810 PRINT A(X);"/";A(3);"MP"
820 PRINT
830 PRINT "(A) ATTACK"
840 PRINT "(M) MAGIC"
850 PRINT "(I) ITEMS"
860 PRINT "(Q) QUIT"
870 A$=INKEY$
871 IF A$="" THEN 870
875 ON C GOTO 930,990,1100,2480,990,1050,1100,1150,1190,1330,1420,1440,1550,1560,1620,1630,1770,1810,1850,1980,2090,2120
880 IF A$="A" OR A$="a" THEN 930
890 IF A$="M" OR A$="m" THEN 990
900 IF A$="I" OR A$="i" THEN 1100
910 IF A$="Q" OR A$="q" THEN 2480
920 GOTO 780
930 REM ATTACK INPUT ROUTINE
940 GOSUB 2120
950 IF C=Z THEN 780
960 IF C>X THEN 930
970 IF C<Z THEN 930
980 GOTO 1190
990 REM MAGIC INPUT ROUTINE
1000 PRINT
1010 PRINT "(1) LIGHTNING -";A(M);"MP"
1020 PRINT "(2) CURE -";A(M+3);"MP"
1030 PRINT "WHICH SPELL DO YOU WANT TO CAST?"
1040 PRINT "TYPE (0) TO GO BACK."
1050 A$=INKEY$
1051 IF A$="" THEN 1050
1052 C=VAL(A$)
1060 IF C=Y THEN 1630
1070 IF C=X THEN 1850
1080 IF C=Z THEN 780
1090 GOTO 990
1100 REM ITEM ROUTINE
1110 PRINT
1120 PRINT "(1) POTION -";P
1130 PRINT "WHICH ITEM DO YOU WISH TO USE?"
1140 PRINT "TYPE (0) TO GO BACK."
1150 A$=INKEY$
1151 IF A$="" THEN 1150
1152 C=VAL(A$)
1160 IF C=Y THEN 1980
1170 IF C=Z THEN 780
1180 GOTO 1100
1190 REM ATTACK ROUTINE
1200 C=((A(A*V+10)/H)+(A(A*V+5)))+A(A*V+7)-A(T*V+7)
1210 GOSUB 2090
1220 I=A(A*V+11)
1230 GOSUB 2270
1240 IF D>R THEN C=N
1250 I=A(T*V+11)
1260 GOSUB 2270
1270 IF D>R THEN C=N
1280 IF R<C THEN 1330
1290 IF T>Z THEN PRINT "YOUR ATTACK MISSED!"
1300 IF T=Z THEN PRINT "SOLDIER";A;"MISSED YOU!"
1310 PRINT
1320 GOTO 420
1330 REM PHYSICAL DAMAGE ROUTINE
1340 D=A(A*V+H)
1350 E=A(A*V+12)
1360 C=D+((D+E)/L)*((D*E)/L)
1370 D=((U*(K-A(T*V+Q)))*C)/(U*K)
1380 C=(A(A*V+11)+A(A*V+12)-A(T*V+12))/H
1390 GOSUB 2300
1400 IF R<=C THEN 1420
1410 GOTO 1440
1420 REM CRITICAL HIT DAMAGE
1430 D=INT(D*X)
1440 REM RANDOM DAMAGE VARIATION
1450 D=INT(D*(S+(RND(Y)*N))/B)
1460 IF D=Z THEN D=Y
1470 A(T*V)=A(T*V)-D
1480 IF A(T*V)<=Z THEN A(T*V)=Z
1490 IF A<>Z THEN 1560
1500 PRINT "YOU HIT SOLDIER";T;"FOR";D;"HP."
1510 PRINT
1520 IF A(T*V)<>Z THEN 1550
1530 PRINT "YOU DEFEATED SOLDIER";T
1540 PRINT
1550 GOTO 420
1560 IF D>Z THEN GOSUB 2330
1570 PRINT "SOLDIER";A;"HIT YOU FOR";D;"HP."
1580 PRINT
1590 IF A(Z)<>Z THEN 1620
1600 PRINT "YOU DIED."
1610 PRINT
1620 GOTO 420
1630 REM LIGHTNING ROUTINE
1640 E=Z
1650 D=Z
1660 IF A(M)>A(X) THEN 1810
1670 A(X)=A(X)-A(M)
1680 GOSUB 2120
1690 IF C=Z THEN 990
1700 IF C>X THEN 1630
1710 IF C<Z THEN 1630
1720 C=A(M+X)+A(A*V+12)-((A(T*V+12))/X)-Y
1730 GOSUB 2090
1740 IF R<C THEN GOSUB 2380
1750 IF R>C THEN 1770
1760 D=(A(M+Y)*(K-A(T*V+9))*C)/(U*K)
1770 IF D>Z THEN 1440
1780 PRINT "YOUR SPELL MISSED."
1790 PRINT
1800 GOTO 420
1810 REM NOT ENOUGH MP ROUTINE
1820 PRINT
1830 PRINT "YOU DON'T HAVE ENOUGH MP TO CAST THAT SPELL."
1840 GOTO 990
1850 REM CURE ROUTINE
1860 E=3
1870 IF A(M+3)>A(X) THEN 1810
1880 A(X)=A(X)-A(M+3)
1890 GOSUB 2380
1900 D=C+22*A(M+Y+E)
1910 D=INT(D*(S+(RND(Y)*N))/B)
1920 PRINT
1930 PRINT "YOU HAVE BEEN HEALED FOR";D;"HP."
1940 PRINT
1950 A(Z)=A(Z)+D
1960 IF A(Z)>A(Y) THEN A(Z)=A(Y)
1970 GOTO 420
1980 REM ITEM ROUTINE
1990 IF P=Z THEN PRINT
2000 IF P=Z THEN PRINT "YOU HAVE NO POTIONS."
2010 IF P=Z THEN 780
2020 A(Z)=A(Z)+G
2030 IF A(Z)>A(Y) THEN A(Z)=A(Y)
2040 P=P-Y
2050 PRINT
2060 PRINT "YOU HAVE BEEN HEALED FOR 100 HP."
2070 PRINT
2080 GOTO 420
2090 REM RANDOM 100 ROUTINE
2100 R=INT(RND(Y)*G)
2110 RETURN
2120 REM SHARED INPUT ROUTINE
2130 PRINT
2140 FOR I=Y TO X
2150 IF A(V*I)>Z THEN PRINT "(";I;")";" SOLDIER";I
2160 NEXT I
2170 PRINT "WHICH ENEMY DO YOU WANT TO TARGET?"
2180 PRINT "(0) TO GO BACK."
2190 A$=INKEY$
2191 IF A$="" THEN 2190
2192 C=VAL(A$)
2200 IF C=Z THEN RETURN
2210 E=Z
2220 IF A(V*C)<=Z THEN E=N
2230 IF E=N THEN 2120
2240 T=C
2250 PRINT
2260 RETURN
2270 REM LUCKY HIT ROUTINE
2280 D=I/H
2290 RETURN
2300 REM RANDOM 65535 ROUTINE
2310 R=((RND(Y)*F)*O/F)+Y
2320 RETURN
2330 REM DING ROUTINE
2340 FOR J=Z TO G
2350 NEXT J
2360 PRINT CHR$(7)
2370 RETURN
2380 REM MAGIC DAMAGE ROUTINE
2390 C=Q*(A(8)+A(12))
2400 RETURN
2410 REM GAME OVER ROUTINE
2420 PRINT
2430 PRINT "GAME OVER"
2440 PRINT
2450 FOR I=Z TO Y
2460 GOSUB 2330
2470 NEXT I
2480 PRINT
2490 PRINT "YOU WON";W;"TIMES."
2500 PRINT
2510 END
2520 DATA 314,314,54,54,38,96,24,1,21,17,6,14,6
2530 DATA 30,30,0,0,6,1,4,1,1,1,50,4,2
2540 DATA 30,30,0,0,6,1,4,1,1,1,50,4,2
2550 DATA 4,8,100,5,5,255