-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathzx-spectrum-numbered.bas
94 lines (94 loc) · 4.83 KB
/
zx-spectrum-numbered.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
0 PRINT "PRESS ENTER:" : INPUT A$ : RANDOMIZE 0 : CLS : LET Z=0 : LET Y=1 : LET A=Z : LET T=Z : LET V=13 : LET C=44 : LET D=Z : LET E=Z : LET R=Z : LET X=2 : LET I=Z : LET J=Z : DIM A(45) : LET G=100 : LET H=4 : LET K=512 : LET L=32 : LET U=16 : LET N=255 : LET O=99 : LET F=65535 : LET Q=6 : LET S=3841 : LET B=4096 : LET M=39 : LET P=Y : LET W=Z : FOR I=Y TO 45 : READ A(I) : NEXT I : PRINT "WELCOME TO THE BATTLE SYSTEM TEST!" : PRINT : PRINT
1 PRINT "TWO SOLDIERS APPROACH." : PRINT
2 IF A((V*A)+Y)=Z THEN GO TO 5
3 IF A=Z THEN GO TO 21
4 LET T=Z : GO TO 43
5 IF A(Y)=Z THEN GO TO 92
6 LET A=A+Y : IF A<>Z THEN LET T=Z
7 IF A((V*A)+Y)=Z THEN LET A=A+Y
8 IF A>X THEN LET A=Z
9 LET D=Z : IF A((V*Y)+Y)=Z THEN LET D=D+Y
10 IF A((V*X)+Y)=Z THEN LET D=D+Y
11 IF D=X THEN GO TO 13
12 GO TO 2
13 PRINT "YOU ARE VICTORIOUS." : PRINT : LET W=W+Y : LET A=Z : LET T=Z : IF W>=10 THEN GO SUB 19
14 FOR I=Y TO X : LET A((I*V)+Y)=A((I*V+Y)+Y) : NEXT I : GO SUB 80 : IF R<12.5 THEN PRINT "YOU OBTAINED A POTION!"
15 IF R<12.5 THEN PRINT
16 IF R<12.5 THEN LET P=P+Y
17 IF P>O THEN LET P=O
18 GO TO 1
19 GO SUB 80 : IF R>=25 THEN RETURN
20 FOR I=V TO M-Y : LET A(I+Y)=A(I+Y)*1.5 : NEXT I : PRINT "THE ENEMIES HAVE POWERED UP!" : PRINT : RETURN
21 POKE 23692,255 : PRINT : PRINT A(Y);"/";A(X);" HP" : PRINT A(3);"/";A(H);" MP" : PRINT : PRINT "(A) ATTACK" : PRINT "(M) MAGIC" : PRINT "(I) ITEMS" : PRINT "(Q) QUIT"
22 LET A$=INKEY$ : IF A$="" THEN GO TO 22
23 IF A$="A" OR A$="a" THEN GO TO 28
24 IF A$="M" OR A$="m" THEN GO TO 32
25 IF A$="I" OR A$="i" THEN GO TO 38
26 IF A$="Q" OR A$="q" THEN GO TO 93
27 GO TO 21
28 GO SUB 81 : IF C=Z THEN GO TO 21
29 IF C>X THEN GO TO 28
30 IF C<Z THEN GO TO 28
31 GO TO 43
32 PRINT : PRINT "(1) LIGHTNING - ";A(M+Y);" MP" : PRINT "(2) CURE - ";A(M+H);" MP" : PRINT "WHICH SPELL DO YOU WANT TO CAST?" : PRINT "TYPE (0) TO GO BACK."
33 LET A$=INKEY$ : IF A$="" THEN GO TO 33
34 LET C=VAL A$ : IF C=Y THEN GO TO 62
35 IF C=X THEN GO TO 72
36 IF C=Z THEN GO TO 21
37 GO TO 32
38 PRINT : PRINT "(1) POTION - ";P : PRINT "WHICH ITEM DO YOU WISH TO USE?" : PRINT "TYPE (0) TO GO BACK."
39 LET A$=INKEY$ : IF A$="" THEN GO TO 39
40 LET C=VAL A$ : IF C=Y THEN GO TO 75
41 IF C=Z THEN GO TO 21
42 GO TO 38
43 LET C=((A((A*V+10)+Y)/H)+(A((A*V+5)+Y)))+A((A*V+7)+Y)-A((T*V+7)+Y) : GO SUB 80 : LET I=A((A*V+11)+Y) : GO SUB 88 : IF D>R THEN LET C=N
44 LET I=A((T*V+11)+Y) : GO SUB 88 : IF D>R THEN LET C=N
45 IF R<C THEN GO TO 49
46 IF T>Z THEN PRINT "YOUR ATTACK MISSED!"
47 IF T=Z THEN PRINT "SOLDIER ";A;" MISSED YOU!"
48 PRINT : GO TO 5
49 LET D=A((A*V+H)+Y) : LET E=A((A*V+12)+Y) : LET C=D+((D+E)/L)*((D*E)/L) : LET D=((U*(K-A((T*V+Q)+Y)))*C)/(U*K) : LET C=(A((A*V+11)+Y)+A((A*V+12)+Y)-A((T*V+12)+Y))/H : GO SUB 89 : IF R<=C THEN GO TO 51
50 GO TO 52
51 LET TE=D*X : LET D=INT TE
52 LET TE=D*(S+(RND*N))/B : LET D=INT TE : IF D=Z THEN LET D=Y
53 LET A((T*V)+Y)=A((T*V)+Y)-D : IF A((T*V)+Y)<=Z THEN LET A((T*V)+Y)=Z
54 IF A<>Z THEN GO TO 58
55 PRINT "YOU HIT SOLDIER ";T;" FOR ";D;" HP." : PRINT : IF A((T*V)+Y)<>Z THEN GO TO 57
56 PRINT "YOU DEFEATED SOLDIER ";T : PRINT
57 GO TO 5
58 IF D>Z THEN GO SUB 90
59 PRINT "SOLDIER ";A;" HIT YOU FOR ";D;" HP." : PRINT : IF A(Y)<>Z THEN GO TO 61
60 PRINT "YOU DIED." : PRINT
61 GO TO 5
62 LET E=Z : LET D=Z : IF A(M+Y)>A(3) THEN GO TO 71
63 LET A(3)=A(3)-A(M+Y) : GO SUB 81 : IF C=Z THEN GO TO 32
64 IF C>X THEN GO TO 62
65 IF C<Z THEN GO TO 62
66 LET C=A(M+3)+A((A*V+12)+Y)-((A((T*V+12)+Y))/X)-Y : GO SUB 80 : IF R<C THEN GO SUB 91
67 IF R>C THEN GO TO 69
68 LET D=(A(M+X)*(K-A((T*V+9)+Y))*C)/(U*K)
69 IF D>Z THEN GO TO 52
70 PRINT "YOUR SPELL MISSED." : PRINT : GO TO 5
71 PRINT : PRINT "YOU DON'T HAVE ENOUGH MP TO CAST THAT SPELL." : GO TO 32
72 LET E=3 : IF A(M+H)>A(3) THEN GO TO 71
73 LET A(3)=A(3)-A(M+H) : GO SUB 91 : LET D=C+22*A(M+Y+E+Y) : LET TE=D*(S+(RND*N))/B : LET D=INT TE : PRINT : PRINT "YOU HAVE BEEN HEALED FOR ";D;" HP." : PRINT : LET A(Y)=A(Y)+D : IF A(Y)>A(X) THEN LET A(Y)=A(X)
74 GO TO 5
75 IF P=Z THEN PRINT
76 IF P=Z THEN PRINT "YOU HAVE NO POTIONS."
77 IF P=Z THEN GO TO 21
78 LET A(Y)=A(Y)+G : IF A(Y)>A(X) THEN LET A(Y)=A(X)
79 LET P=P-Y : PRINT : PRINT "YOU HAVE BEEN HEALED FOR 100 HP." : PRINT : GO TO 5
80 LET TE=RND*G : LET R=INT TE : RETURN
81 PRINT : FOR I=Y TO X : IF A((V*I)+Y)>Z THEN PRINT "(";I;")";" SOLDIER ";I
82 NEXT I : PRINT "WHICH ENEMY DO YOU WANT TO TARGET?" : PRINT "(0) TO GO BACK."
83 LET A$=INKEY$ : IF A$="" THEN GO TO 83
84 LET C=VAL A$ : IF C=Z THEN RETURN
85 LET E=Z : IF A((V*C)+Y)<=Z THEN LET E=N
86 IF E=N THEN GO TO 81
87 LET T=C : PRINT : RETURN
88 LET D=I/H : RETURN
89 LET R=((RND*F)*O/F)+Y : RETURN
90 FOR J=Z TO G : NEXT J : BEEP .25,0 : RETURN
91 LET C=Q*(A(9)+A(V)) : RETURN
92 PRINT : PRINT "GAME OVER" : PRINT : FOR I=Z TO Y : GO SUB 90 : NEXT I
93 PRINT : PRINT "YOU WON ";W;" TIMES." : PRINT : STOP : DATA 314,314,54,54,38,96,24,1,21,17,6,14,6,30,30,0,0,6,1,4,1,1,1,50,4,2,30,30,0,0,6,1,4,1,1,1,50,4,2,4,8,100,5,5,255