-
Notifications
You must be signed in to change notification settings - Fork 9
/
TI994A.txt
180 lines (180 loc) · 3.68 KB
/
TI994A.txt
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
100 REM === BASIC MONTH 3: CANNONBALL
110 REM === HTTP://REDDIT.COM/R/RETROBATTLESTATIONS
120 REM === WRITTEN BY FOZZTEXX
130 REM === TI-99/4A VERSION BY NANOCHESS (JUL/08/2018)
200 REM === CLEAR SCREEN AND SETUP VARIABLES
210 CALL CLEAR
220 CL = 32
225 RW = 24
230 CA = 45
235 CN = 5
240 CX = 5
242 PX = CL-5
244 SC = 0
246 LV = 3
250 PI = 3.14159
260 RANDOMIZE
270 GOTO 310
300 REM === PLAY GAME
305 SC = SC + 10
310 CV = INT(RND * 15) + 10
312 GOSUB 4010
314 GOSUB 2010
320 GOSUB 2510
330 IF K$ <> "E" THEN 340
332 CA = CA + 5
334 IF CA < 85 THEN 340
336 CA = 85
340 IF K$ <> "X" THEN 350
342 CA = CA - 5
344 IF CA > 15 THEN 350
346 CA = 15
350 IF K$ = "Q" THEN 390
360 IF K$ = " " THEN 410
370 GOSUB 1010
380 GOTO 320
390 END
400 REM === FIRE!
410 LX = (CN + 1) * COS((360 - CA) * PI / 180) + 0.5
415 LY = (CN + 1) * SIN((360 - CA) * PI / 180) + 0.5
420 BX = CX + LX
425 BY = RW + LY
430 GOSUB 1510
440 VX = CV * COS((360 - CA) * PI / 180)
445 VY = CV * SIN((360 - CA) * PI / 180)
500 REM === MOVE PLAYER AND ANIMATE BALL
510 GOSUB 2510
520 IF K$ <> "S" THEN 530
522 PX = PX - 1
524 IF PX >= CX+CN THEN 530
526 PX = CX+CN
530 IF K$ <> "D" THEN 540
532 PX = PX + 1
534 IF PX <= CL - 1 THEN 540
536 PX = CL -1
540 GOSUB 2010
550 BX = BX + (VX / 10)
552 BY = BY + (VY / 10)
554 GOSUB 1510
560 VY = VY + 2
570 IF BY < RW THEN 510
580 P$=" "
582 X1=INT(BX)
584 Y1=INT(BY)
586 GOSUB 3510
600 REM === SCORE OR DIE
610 LX = BX - OX
612 LY = BY - OY
614 L2 = RW - OY
620 IX = OX + LX * (L2 / LY)
630 IF (IX >= PX - 1)*(IX <= PX + 1) THEN 305
640 LV = LV - 1
645 GOSUB 4010
650 IF LV >= 1 THEN 310
652 P$="GAME OVER"
654 X1 = INT((CL - LEN(P$)) / 2)
656 Y1 = INT(RW / 2)
658 GOSUB 3510
660 END
1000 REM === DRAW CANNON
1010 IF (CA = LA) THEN 1075
1020 P$="ANG:"&STR$(CA)&" "
1022 X1=2
1024 Y1=1
1026 GOSUB 3510
1030 LX = CN * COS((360 - LA) * PI / 180) + 0.5
1035 LY = CN * SIN((360 - LA) * PI / 180) + 0.5
1040 X1 = CX
1042 Y1 = RW
1044 X2 = X1 + LX
1046 Y2 = Y1 + LY
1048 P$ = " "
1049 GOSUB 3010
1050 LX = CN * COS((360 - CA) * PI / 180) + 0.5
1055 LY = CN * SIN((360 - CA) * PI / 180) + 0.5
1057 X1 = CX
1059 Y1 = RW
1060 X2 = X1 + LX
1062 Y2 = Y1 + LY
1064 P$= "%"
1066 GOSUB 3010
1070 LA=CA
1075 RETURN
1500 REM === DRAW BALL
1510 X1 = INT(BX)
1512 Y1 = INT(BY)
1514 P$ = "O"
1516 GOSUB 3510
1520 IF (OX = X1)*(OY = Y1) THEN 1540
1530 X1 = OX
1532 Y1 = OY
1534 P$ = " "
1536 GOSUB 3510
1537 OX = INT(BX)
1538 OY = INT(BY)
1540 RETURN
2000 REM === DRAW PLAYER
2010 P$="U"
2012 X1 = PX
2014 Y1 = RW
2016 GOSUB 3510
2020 IF QX = X1 THEN 2040
2030 X1=QX
2032 P$=" "
2034 GOSUB 3510
2036 QX=PX
2040 RETURN
2500 REM === READ THE KEYBOARD
2510 CALL KEY(0,K,S)
2512 IF S<>0 THEN 2516
2514 K = 33
2516 K$ = CHR$(K)
2520 RETURN
3000 REM === PLOT A LINE
3010 X1 = INT(X1)
3012 X2 = INT(X2)
3014 Y1 = INT(Y1)
3016 Y2 = INT(Y2)
3020 DX = ABS(X2 - X1)
3022 SX = -1
3024 IF X1 >= X2 THEN 3030
3026 SX = 1
3030 DY = ABS(Y2 - Y1)
3032 SY = -1
3034 IF Y1 >= Y2 THEN 3040
3036 SY = 1
3040 ER = -DY
3042 IF DX <= DY THEN 3050
3044 ER = DX
3050 ER = INT(ER / 2)
3060 GOSUB 3510
3070 IF (X1 = X2)*(Y1 = Y2) THEN 3140
3080 E2 = ER
3090 IF E2 <= -DX THEN 3100
3092 ER = ER - DY
3094 X1 = X1 + SX
3100 IF (X1 = X2)*(Y1 = Y2) THEN 3140
3110 IF E2 >= DY THEN 3120
3112 ER = ER + DX
3114 Y1 = Y1 + SY
3120 IF (X1 = X2)*(Y1 = Y2) THEN 3140
3130 GOTO 3060
3140 RETURN
3500 REM === PLOT A POINT
3510 IF (X1 < 1)+(X1 > CL)+(Y1 < 1)+(Y1 > RW) THEN 3540
3520 FOR CT=1 TO LEN(P$)
3525 CALL HCHAR(Y1,X1+CT-1,ASC(SEG$(P$,CT,1)))
3528 NEXT CT
3540 RETURN
4000 REM === SHOW SCORE/LIVES/VELOCITY
4010 P$="SPD:"&STR$(CV)&" "
4012 X1 = INT(CL / 3)
4014 Y1=1
4016 GOSUB 3510
4020 P$="SCORE:"&STR$(SC)
4022 X1 = INT(CL * 2 / 3)
4024 GOSUB 3510
4030 P$=SEG$(" UUU",LV+1,3)
4032 X1=CL - 2
4034 GOSUB 3510
4040 RETURN