10 REM PLATONIC SOLIDS - PCG SPRITE VERSION 3
20 REM MICROWORLD BASIC 5.29 - PREMIUM, 8 PCG BANKS
30 REM MACHINE CODE AT 24576: 24576 CLEAR BUFFER, 24590 COPY TO PCG,
40 REM 24623 ATTRIBUTES, 24660 CODES, 24685 CLEAR ATTRIBUTES, 24708 DRAW FRAME
50 REM TABLE: 25088 EDGE COUNT, 25089 EDGE PAIRS, 25152 X, 25184 Y
60 DIM S(27),X(19),Y(19),Z(19)
70 STRS(100)
80 RESTORE 1000
90 FOR I=0 TO 27:READ S(I):NEXT I
95 GOSUB 3000
100 REM MENU
110 CLS
120 CURS1,1:PRINT "PLATONIC SOLIDS - PCG SPRITES"
130 CURS1,3:PRINT "1 TETRAHEDRON    4 FACES"
140 CURS1,4:PRINT "2 CUBE           6 FACES"
150 CURS1,5:PRINT "3 OCTAHEDRON     8 FACES"
160 CURS1,6:PRINT "4 DODECAHEDRON  12 FACES"
170 CURS1,7:PRINT "5 ICOSAHEDRON   20 FACES"
180 CURS1,8:PRINT "6 EXIT"
190 CURS1,10:PRINT "ANY KEY STOPS THE SPIN"
200 CURS1,12:INPUT "CHOOSE 1-6";H
210 IF H=6 THEN 990
220 IF H<1 THEN 110
230 IF H>5 THEN 110
240 RESTORE 2005+H*100
250 READ O,L
260 FOR I=0 TO O-1:READ X(I),Y(I),Z(I):NEXT I
270 K=25088:POKE K,L
280 FOR I=0 TO L-1:READ J,G:K=25089+I*2:POKE K,J:K=K+1:POKE K,G:NEXT I
300 REM 16 FRAMES = 120 DEGREES OF SPIN ABOUT A 3-FOLD AXIS
310 CLS:CURS1,1:PRINT "BUILDING FRAME"
320 FOR A=0 TO 15
330 N=S(A):C=S(A+12)
340 FOR I=0 TO O-1
350 U=(X(I)*C+Z(I)*N)/100
360 W=(Z(I)*C-X(I)*N)/100
370 V=(Y(I)*91-W*42)/100
380 W=(Y(I)*42+W*91)/100
390 K=(U*94-V*34)/100
400 V=(U*34+V*94)/100
410 G=(W+400)/4
420 J=64+K*39/G:K=25152+I:POKE K,J
430 J=32-V*26/G:K=25184+I:POKE K,J
440 NEXT I
450 B=A:IF A>7 THEN LET B=15-A
460 D=USR(24708)
470 D=USR(24590,A/8*256+B)
480 CURS16,1:PRINT A+1;
490 NEXT A
800 REM SHOW THE SPRITE
810 CLS
820 D=USR(24685)
830 D=USR(24660,128)
850 RESTORE 2000+H*100+1:READ A0$
860 CURS1,1:PRINT A0$;
870 CURS1,16:PRINT "ANY KEY FOR THE MENU";
900 REM SPIN - FRAMES 0-7 USE CHARACTERS 0-63, FRAMES 8-15 USE 64-127
910 FOR A=0 TO 15
920 IF A=0 THEN 960
930 IF A=8 THEN 960
940 B=A:IF A>7 THEN LET B=15-A
950 D=USR(24623,B):GOTO 975
960 D=USR(24660,128+A/8*64)
975 IF KEY$<>"" THEN 985
980 NEXT A:GOTO 910
985 D=USR(24685):GOTO 110
990 D=USR(24685):CLS
995 END
1000 REM SINE X 100 FOR 0-202.5 DEGREES IN 7.5S
1010 DATA 0,13,26,38,50,61,71,79,87,92,97,99,100,99
1020 DATA 97,92,87,79,71,61,50,38,26,13,0,-13,-26,-38
2100 REM TETRAHEDRON: CORNERS,EDGES / X,Y,Z / EDGE PAIRS
2101 DATA "TETRAHEDRON"
2105 DATA 4,6
2110 DATA 0,120,0,109,-40,-29,-80,-40,-80,-29,-40,109
2115 DATA 0,1,0,2,0,3,1,2,1,3,2,3
2200 REM CUBE: CORNERS,EDGES / X,Y,Z / EDGE PAIRS
2201 DATA "CUBE"
2205 DATA 8,12
2210 DATA 0,-120,0,109,-40,-29,29,40,-109,-80,-40,-80
2215 DATA -29,-40,109,80,40,80,0,120,0,-109,40,29
2220 DATA 0,1,0,3,0,4,1,2,1,5,2,3,2,6,3,7
2225 DATA 4,5,4,7,5,6,6,7
2300 REM OCTAHEDRON: CORNERS,EDGES / X,Y,Z / EDGE PAIRS
2301 DATA "OCTAHEDRON"
2305 DATA 6,12
2310 DATA 95,69,-25,-95,-69,25,-69,69,-69,69,-69,69
2315 DATA -25,69,95,25,-69,-95
2320 DATA 0,2,0,3,0,4,0,5,1,2,1,3,1,4,1,5
2325 DATA 2,4,2,5,3,4,3,5
2400 REM DODECAHEDRON: CORNERS,EDGES / X,Y,Z / EDGE PAIRS
2401 DATA "DODECAHEDRON"
2405 DATA 20,30
2410 DATA 0,120,0,29,40,-109,80,40,80,109,-40,-29
2415 DATA -109,40,29,-80,-40,-80,-29,-40,109,0,-120,0
2420 DATA -48,89,64,-1,-40,-113,1,40,113,48,-89,-64
2425 DATA -31,89,-74,98,-40,56,-98,40,-56,31,-89,74
2430 DATA 79,89,10,97,40,-57,-97,-40,57,-79,-89,-10
2435 DATA 0,8,0,12,0,16,1,9,1,12,1,17,2,10,2,13
2440 DATA 2,16,3,11,3,13,3,17,4,8,4,14,4,18,5,9
2445 DATA 5,14,5,19,6,10,6,15,6,18,7,11,7,15,7,19
2450 DATA 8,10,9,11,12,14,13,15,16,17,18,19
2500 REM ICOSAHEDRON: CORNERS,EDGES / X,Y,Z / EDGE PAIRS
2501 DATA "ICOSAHEDRON"
2505 DATA 12,30
2510 DATA -58,95,44,-15,-23,-117,15,23,117,58,-95,-44
2515 DATA -9,95,-72,109,-23,46,-109,23,-46,9,-95,72
2520 DATA 67,95,28,94,23,-71,-94,-23,71,-67,-95,-28
2525 DATA 0,2,0,4,0,6,0,8,0,10,1,3,1,4,1,6
2530 DATA 1,9,1,11,2,5,2,7,2,8,2,10,3,5,3,7
2535 DATA 3,9,3,11,4,6,4,8,4,9,5,7,5,8,5,9
2540 DATA 6,10,6,11,7,10,7,11,8,9,10,11
3000 REM LOAD THE MACHINE CODE
3010 RESTORE 3100
3020 FOR I=24576 TO 24948:READ K:POKE I,K:NEXT I
3030 RETURN
3100 DATA 33,0,100,17,1,100,1,255,3,54,0,237,176,201,237,87
3110 DATA 245,243,121,246,128,211,28,120,135,135,198,248,87,30,0,33
3120 DATA 0,100,1,0,4,237,176,62,128,211,28,241,224,251,201,237
3130 DATA 87,245,243,62,144,211,28,205,60,96,24,235,33,152,241,30
3140 DATA 4,6,16,229,113,35,16,252,225,125,198,64,111,48,1,36
3150 DATA 29,32,238,201,33,152,241,30,4,6,16,229,113,12,35,16
3160 DATA 251,225,125,198,64,111,48,1,36,29,32,237,201,237,87,245
3170 DATA 243,62,144,211,28,33,0,240,17,1,240,1,255,3,54,0
3180 DATA 237,176,24,163,221,229,205,0,96,58,0,98,183,40,53,71
3190 DATA 221,33,1,98,197,221,94,1,22,0,33,64,98,25,126,50
3200 DATA 109,97,33,96,98,25,126,50,110,97,221,94,0,22,0,33
3210 DATA 64,98,25,78,33,96,98,25,94,81,205,199,96,221,35,221
3220 DATA 35,193,16,208,221,225,201,58,109,97,146,14,1,48,4,237
3230 DATA 68,14,255,50,111,97,121,50,113,97,58,110,97,147,14,1
3240 DATA 48,4,237,68,14,255,50,112,97,121,50,114,97,58,111,97
3250 DATA 111,38,0,58,112,97,79,6,0,183,237,66,34,115,97,205
3260 DATA 75,97,58,109,97,186,32,5,58,110,97,187,200,42,115,97
3270 DATA 41,229,58,112,97,79,6,0,9,203,124,32,18,124,181,40
3280 DATA 14,42,115,97,183,237,66,34,115,97,58,113,97,130,87,225
3290 DATA 58,111,97,79,6,0,183,237,66,203,124,40,194,42,115,97
3300 DATA 9,34,115,97,58,114,97,131,95,24,180,123,15,15,15,15
3310 DATA 230,15,198,100,103,122,230,248,135,111,123,230,15,181,111,122
3320 DATA 230,7,71,62,128,40,3,15,16,253,182,119,201,0,0,0
3330 DATA 0,0,0,0,0
