-
Notifications
You must be signed in to change notification settings - Fork 0
/
MINIWEAVE.txt
210 lines (210 loc) · 6.28 KB
/
MINIWEAVE.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
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
0 GOSUB 1500
10 REM COPYRIGHT 2022 BY SEAN GUGLER
20 REM LICENSED UNDER CC BY-NC-SA 4.0
30 REM MINI-WEAVE: JUST THE RANDOM MODE FROM CANDY WEAVER
40 REM VERSION 1.2.0 2022-11-02
50 GOTO 700
100 REM --- INPUT KEY
110 CH$="":CH=Z
120 FOR T=Z TO F:IF PEEK(KY)<K8 THEN NEXT
130 GET CH$:CH = ASC(CH$):RETURN
200 REM --- DRAW COLORED HOSE
210 GOSUB 300:BP=BI:COLOR=C(CI):T=BI+BI:PLOT BX(T),BY(T):T=T+U:PLOT BX(T),BY(T):RETURN
300 REM --- CLEAR HOSE
310 COLOR=15:T=BP+BP:PLOT BX(T),BY(T):COLOR=Z:T=T+U:PLOT BX(T),BY(T):RETURN
400 REM --- AIM HOSE
410 BI=BI-U:IF BI<Z THEN BI=W+H-U
420 GOTO 200
500 BI=BI+U:IF BI=W+H THEN BI=Z
510 GOTO 200
600 REM --- DRAW A SINGLE BAR
610 COLOR=C(CI)
620 IF BI<W THEN VLIN Y,Y+H*2 AT U+X+BI*2:RETURN
630 HLIN X,X+W*2 AT U+Y+(BI-W)*2:RETURN
700 REM --- MAIN ROUTINE
710 PRINT "PREPARING THE KITCHEN...":GOSUB 1700:GOSUB 2400
720 GOSUB 800
730 TEXT:HOME:END
800 REM --- ENDLESS RANDOMIZED ROUNDS
810 W=INT(RND(1)*7+2)
820 H=INT(RND(1)*8+2)
830 CN=INT(RND(1)*8+2)
840 GOSUB 2500:GOSUB 2100
850 GOSUB 1000
860 VTAB 24:HTAB 24:PRINT "ANOTHER ROUND?";
870 GET CH$
880 IF CH$="Y" OR CH=13 THEN 800
890 IF CH$="N" OR CH=27 THEN RETURN
900 GOTO 870
1000 REM --- MAIN GAME LOOP
1010 FOR Q=Z TO F
1020 GOSUB 100
1030 IF CH=27 THEN 1400:REM ESC
1040 IF CH=11 OR CH=8 THEN GOSUB 400:NEXT Q:REM LEFT
1050 IF CH=10 OR CH=21 THEN GOSUB 500:NEXT Q:REM RIGHT
1060 IF CH=32 OR CH=13 THEN 1320:REM SPACE, RETURN
1070 IF CH=84 THEN AX=NOT AX:GOSUB 2100:NEXT Q:REM TOGGLE LABELS
1080 IF CH=82 THEN GOSUB 2000:NEXT Q:REM REVEAL DIFFS
1090 T=CH-49:REM 1-9
1100 IF T>=Z AND T<CN THEN 1200
1110 T=CH-65:REM A-Q
1120 IF T>=Z AND T<W THEN 1300
1130 T=T-WM:IF T>=Z AND T<H THEN T=T+W:GOTO 1300
1140 NEXT Q:REM OTHER
1200 REM - CHOOSE COLOR
1210 CI=T:GOSUB 2900:GOSUB 200:NEXT Q
1300 REM - CHOOSE LINE
1310 BI=T:GOSUB 200
1320 GOSUB 600
1330 VTAB 24:HTAB U:CALL(E):PRINT "COMPARING... ";:HTAB U:GOSUB 1900
1340 IF M THEN PRINT "PROGRESS: ";M;" TO GO ";:HTAB 24:PRINT "[R]EVEAL DIFFS";:NEXT Q
1350 GOSUB 300
1360 T=RND(U)*3:INVERSE
1370 IF T<1 THEN PRINT "A PERFECT MATCH!";:GOTO 1450
1380 IF T<2 THEN PRINT "YES! DELICIOUS!";:GOTO 1450
1390 PRINT "COMPLETED! (YUM)";:GOTO 1450
1400 GOSUB 2300
1410 GOSUB 100
1420 IF CH=78 OR CH=27 THEN GOSUB 2100:NEXT Q:REM [N]O
1430 IF CH=89 THEN HOME:GOTO 1450:REM [Y]ES
1440 IF CH=83 THEN RETURN:REM DEBUG [S]KIP:GOTO 1410
1450 NORMAL:RETURN
1500 REM --- DECLARE VARIABLES
1510 REM - CONSTANTS
1520 Z=0:U=1
1530 KY=49152:REM PEEK KEYBOARD
1540 K8=128
1550 E=-868:REM CALL ERASE_LINE
1560 F=1E30:REM INFINITY
1570 REM - PERFORMANCE-CRITICAL VARIABLES
1580 M=Z:I=Z:O=-20:J=Z:A=Z:W2=Z:X=Z:Y=Z:J0=Z:J1=Z:WH=9:W=3:H=3
1590 CN=6
1600 AX=Z
1610 WM=8
1620 DIM RO(24):REM GR MEM ADDR BY ROW
1630 DIM BX(33),BY(33):REM HOSE COORDINATES
1640 DIM C(15):REM COLOR PALETTE
1650 DIM S(25):REM SHUFFLE SEQUENCE
1660 DIM CC(15*5-1):REM COLOR CLASH TABLE
1670 RETURN
1700 REM --- INITIALIZE GAME DATA
1710 FOR I=Z TO 7:FOR J=Z TO 2:RO(I+8*J)=1024+128*I+40*J:NEXT J:NEXT I
1720 GOSUB 3100
1730 RETURN
1800 REM --- INIT CHECK VARIABLES
1810 J0=(Y+U)/2:J1=J0+H-U:W2=W*2
1820 RETURN
1900 REM --- CHECK FOR MATCH
1910 M=Z:FOR J=J0 TO J1
1920 A=RO(J)+X:FOR I=A+U TO A+W2 STEP 2
1930 M=M+(PEEK(I)=PEEK(I+O))
1940 NEXT:NEXT J
1950 M=WH-M
1960 RETURN
2000 REM --- REVEAL DIFFERENCES
2010 FOR J=J0 TO J1
2020 A=RO(J)+X:FOR I=A+U TO A+W2 STEP 2
2030 P=PEEK(I):IF P=PEEK(I+O) THEN 2060
2040 POKE(I),255:FOR T=U TO 200:NEXT:POKE(I),P
2050 IF PEEK(KY)>=K8 THEN RETURN
2060 NEXT I:NEXT J:RETURN
2100 REM --- HELP TEXT
2110 VTAB 22:HTAB U
2120 IF AX THEN 2200
2130 CALL(E):PRINT " AIM: LEFT/RIGHT";
2140 HTAB 24:PRINT "[T]OGGLE LABELS"
2150 CALL(E):PRINT " LAY CANDY: SPACE";
2160 RETURN
2200 CALL(E):PRINT " PRESS A LETTER";
2210 HTAB X-3:PRINT "COL:";
2220 FOR I=Z TO W-U:PRINT " ";CHR$(65+I);:NEXT
2230 PRINT:CALL(E):PRINT " TO FAST-STRIPE";
2240 HTAB 27-H:PRINT "ROW:";
2250 FOR I=WM TO WM+H-U:PRINT " ";CHR$(65+I);:NEXT
2260 RETURN
2300 REM --- ABORT PROMPT
2310 VTAB 22:HTAB U:CALL(E)
2320 HTAB 24:PRINT "GIVE UP?"
2330 CALL(E)
2340 RETURN
2400 REM --- SEED "RND" FROM HUMAN REACTION TIME
2410 I=RND(-1*(PEEK(78)+256*PEEK(79))):RETURN
2500 REM --- LAYOUT A NEW WEAVE
2510 X=9-W:Y=20-H:WH=W*H:M=WH:GOSUB 1800
2520 GR:HOME:GOSUB 3200:GOSUB 2700:GOSUB 3000
2530 X=X+20:GOSUB 2700
2540 HOME:PRINT "AVAILABLE FLAVORS:":GOSUB 2800
2550 CP=U:CI=Z:GOSUB 2900
2560 GOSUB 3600:BP=U:BI=Z:GOSUB 200
2570 RETURN
2700 REM --- DRAW PLAY AREA BORDER
2710 COLOR=15
2720 HLIN X-U,X+W*2+U AT Y-U
2730 HLIN X-U,X+W*2+U AT Y+H*2+U
2740 VLIN Y-U,Y+H*2+U AT X-U
2750 VLIN Y-U,Y+H*2+U AT X+W*2+U
2760 RETURN
2800 REM --- DRAW COLOR PALETTE
2810 VTAB 21:HTAB 20
2820 FOR I=Z TO CN-U:COLOR=C(I):VLIN 37,38 AT 20+I*2:PRINT " ";I+U;:NEXT
2830 PRINT:RETURN
2900 REM --- SHOW SELECTED COLOR
2910 IF CI=CP THEN RETURN
2920 VTAB 21:HTAB 21+CI*2:INVERSE:PRINT CI+U;:HTAB 21+CP*2:NORMAL:PRINT CP+U;
2930 CP=CI:PRINT:RETURN
3000 REM --- DRAW PATCH
3010 SN=W+H:GOSUB 3400
3020 CI=Z
3030 FOR I=Z TO W+H-U:BI=S(I):GOSUB 600
3040 CI=CI+U:IF CI=CN THEN CI=Z
3050 NEXT I
3060 GOSUB 3500
3070 RETURN
3100 REM --- TABLE OF CLASHING COLORS
3110 FOR I=Z TO 15:S(I)=Z:NEXT
3120 FOR K=U TO 14
3130 READ I,J
3140 N=S(I):CC(I*5+N)=J:S(I)=N+U
3150 N=S(J):CC(J*5+N)=I:S(J)=N+U
3160 NEXT K
3170 RETURN
3200 REM --- GENERATE COLOR PALETTE
3210 M=Z:VTAB 21:PRINT "SELECTING FLAVORS..."
3220 M=M+U:IF M=3 THEN PRINT "TASTE TESTING FOR QUALITY..."
3230 FOR N=Z TO 13:S(N)=N+U:NEXT
3240 FOR CI=CN-U TO Z STEP -1
3250 IF N<=CI THEN 3220
3260 I=RND(U)*N
3270 K=S(I):C(CI)=K
3280 N=N-U:S(I)=S(N)
3290 K=K*5
3300 FOR J=K TO K+4
3310 A=CC(J):T=(NOT A)*N:IF T THEN J=J+5
3320 FOR I=T TO N-U
3330 IF A=S(I) THEN N=N-U:S(I)=S(N):I=N
3340 NEXT I
3350 NEXT J
3360 NEXT CI
3370 RETURN
3400 REM --- CREATE A SHUFFLE
3410 FOR I=Z TO SN-U:S(I)=I:NEXT
3420 FOR I=SN-U TO Z STEP -1:J=RND(U)*I:T=S(I):S(I)=S(J):S(J)=T:NEXT
3430 RETURN
3500 REM --- SHUFFLE COLOR PALETTE
3510 FOR I=CN-U TO Z STEP -1:J=RND(U)*I:T=C(I):C(I)=C(J):C(J)=T:NEXT
3520 RETURN
3600 REM --- INITIALIZE HOSE COORDINATES
3610 Y1=Y-2:Y0=Y1+U:T=U+X
3620 FOR I=Z TO (W-U)*2 STEP 2
3630 BX(I)=T:BX(I+U)=T
3640 BY(I)=Y0:BY(I+U)=Y1
3650 T=T+2:NEXT
3660 X0=X+W*2+U:X1=X0+U:T=U+Y
3670 FOR I=I TO (W+H-U)*2 STEP 2
3680 BX(I)=X0:BX(I+U)=X1
3690 BY(I)=T:BY(I+U)=T
3700 T=T+2:NEXT
3710 RETURN
3800 REM - CLASHING COLOR PAIRS
3810 DATA 5,10 , 7,10 , 7,11 , 7,14 , 10,11
3820 DATA 1,3 , 2,4 , 3,5 , 3,9 , 3,10 , 3,11 , 5,7 , 6,14 , 12,14