10 'AA Sprite Editor
20 'By Pay McDonald 30 'Public Domain - Amstrad Action April 1989 40 SYMBOL AFTER 32:MEMORY (HIMEM-4113) 50 DEFINT a-n:DIM inkno(16):noinks=16:stepno=4:spstart=HIMEM+1:inkno(1)=26:DIM pix(63,31) 60 WHILE aafolded=0 70 GOSUB 1300 80 LOCATE 13,1:PRINT "AA Sprite Editor" 90 RESTORE 110 100 FOR n=1 TO 9:READ a$:LOCATE 7,2+(n*2):PRINT n;") ";a$:NEXT 110 DATA Draw Sprite,Edit Sprite,Save Sprite,Load Sprite,Change Mode,Change Inks,Save Mode/Inks,Load Mode/Inks,Return to BASIC 120 LOCATE 3,22:INPUT "Please enter your selection:";n 130 ON n GOSUB 150,670,840,890,940,1100,1420,1470,1410 140 WEND 150 IF inkselect=0 THEN LOCATE 1,25:PRINT "INKS NOT INPUT";CHR$(7):CALL &BB18:RETURN 160 MODE modeno:GOSUB 1340:IF editselect=1 THEN GOSUB 680:editselect=0 170 LOCATE (80/stepno)/2,2:PRINT "Editing" 180 LOCATE 2,21:PRINT "Cursor keys to move" 190 LOCATE 2,22:PRINT "C=Change pen" 200 LOCATE 2,23:PRINT "SPACE=Finish" 210 LOCATE 2,24:PRINT "COPY=Paint pixel" 220 FOR n=0 TO noinks-1:LOCATE 1,(5+n):PEN n:PRINT CHR$(143);:LOCATE (80/stepno),(5+n):PRINT CHR$(143);:NEXT:FOR n=0 TO noinks-1:INK n,inkno(n):NEXT 230 littlex=0:littley=398:bigx=192:bigy=350:paint=1:PEN 1 240 GOSUB 500:GOSUB 1330 250 WHILE INKEY(47)<>0:decisx=0:decisy=0 260 IF INKEY(9) = 0 THEN GOSUB 370 270 IF INKEY(8) = 0 AND bigx >192 THEN decisx=-1 280 IF INKEY(2) = 0 AND bigy >102 THEN decisy=-1 290 IF INKEY(1) = 0 AND bigx <(448-(stepno*4)) THEN decisx=+1 300 IF INKEY(0) = 0 AND bigy <350 THEN decisy=+1 310 GOSUB 420 320 IF INKEY(62) = 0 THEN GOSUB 470 330 WEND:CALL &BB18:CALL &BB00:CALL &BB18 340 INPUT #1,"Sprite number ?",n 350 IF n>=0 AND n<=15 THEN GOSUB 550 360 RETURN 370 GOSUB 1330 380 PLOT littlex,littley,paint 390 GOSUB 810 400 GOSUB 1330 410 RETURN 420 GOSUB 1330 430 littlex=littlex+(stepno*decisx):littley=littley+(decisy*2) 440 bigx=bigx+4*(stepno*decisx):bigy=bigy+(8*decisy) 450 GOSUB 1330 460 RETURN 470 CALL &BB18:CALL &BB00:CALL &BB18:INPUT#1,"Which ink",n 480 IF n>=0 AND n<noinks THEN paint=n:GOSUB 500 490 CLS#1:RETURN 500 FOR n=0 TO noinks-1 510 LOCATE 2,5+n:PRINT " ";:LOCATE (80/stepno)-1,5+n:PRINT " "; 520 NEXT 530 LOCATE 2,5+paint:PRINT CHR$(242);:LOCATE (80/stepno)-1,5+paint:PRINT CHR$(243); 540 RETURN 550 puthere=spstart+(n*256):RESTORE 660 560 FOR k=1 TO 8 570 READ scanfrom 580 FOR l=1 TO 4 590 FOR m=0 TO 7 600 POKE (puthere),PEEK(scanfrom+m) 610 puthere=puthere+1:NEXT m 620 scanfrom=scanfrom+80 630 NEXT l 640 NEXT k 650 RETURN 660 DATA &c000,&c800,&d000,&d800,&e000,&e800,&f000,&f800 670 editselect=1:GOSUB 150:RETURN 680 INPUT #1,"Sprite No. :",n:CLS#1 690 IF n>=0 AND n<15 THEN GOSUB 710 700 RETURN 710 scanfrom=spstart+(n*256):RESTORE 660 720 FOR k=1 TO 8 730 READ puthere 740 FOR l=1 TO 4 750 FOR m=0 TO 7 760 POKE (puthere+m),PEEK(scanfrom) 770 scanfrom=scanfrom+1:NEXT m 780 puthere=puthere+80:NEXT l 790 NEXT k 792 bigx=192:FOR x=0 TO 63 STEP stepno:littlex=x:littley=400:bigy=358 794 FOR y=0 TO 63 STEP 2:littley=littley-2:paint=TEST(littlex,littley):bigy=bigy-8 796 IF paint>0 THEN GOSUB 810 798 NEXT y:bigx=bigx+stepno*4:NEXT x 800 RETURN 810 FOR n=0 TO 3:FOR m=0 TO -3 STEP -1 820 PLOT bigx+(n*stepno),bigy+(m*2),paint 830 NEXT:NEXT:PEN 1:RETURN 840 GOSUB 1300:GOSUB 1340 850 GOSUB 1350 860 IF (a>=0 AND a<=15) AND (b>=0 AND b<=15) AND a<=b THEN GOSUB 880 870 RETURN 880 SAVE a$,b,start,zlength:RETURN 890 GOSUB 1300:GOSUB 1340 900 GOSUB 1350 910 IF (a>=0 AND a<=15) AND (b>=0 AND b<=15) AND a<=b THEN GOSUB 930 920 RETURN 930 LOAD a$,start:RETURN 940 modeselect=1:GOSUB 1300:option=0 950 WHILE option=0 960 LOCATE 13,3:PRINT "Mode Select" 970 LOCATE 4,7:PRINT "Which of the three screen modes do" 980 LOCATE 4,9:PRINT "you wish to edit sprites in." 990 LOCATE 4,11:PRINT "Current selection is ";modeno 1000 LOCATE 4,15:INPUT "What do you want:";modeno 1010 ON (modeno+1) GOSUB 1030,1050,1070:WEND 1020 RETURN 1030 option=1:stepno=4:noinks=16 1040 RETURN 1050 option=1:stepno=2:noinks=4 1060 RETURN 1070 option=1:stepno=1:noinks=2 1080 RETURN 1090 END 1100 inkselect=1:GOSUB 1300:option=0 1110 LOCATE 13,3:PRINT " Ink Select" 1120 LOCATE 4,7:PRINT "Current screen mode is";modeno 1130 LOCATE 4,9:PRINT "so you have a maximum of";noinks;"colours." 1140 LOCATE 4,11:PRINT "Enter an invalid ink number to abort." 1150 LOCATE 4,15:PRINT "Press any key to begin." 1160 CALL &BB18:a=0:a1=0 1170 WHILE option < noinks 1180 MODE modeno 1190 IF a1>=0 AND a1<=26 THEN inkno(a)=a1:INK a,inkno(a) 1200 FOR n=0 TO noinks-1 1210 PEN n:INK n,inkno(n):PRINT CHR$(143) 1220 NEXT:PEN 1 1230 WINDOW#1,2,(80/stepno)-1,1,25:CLS #1 1240 LOCATE #1,(80/stepno)/2,3:PRINT #1,"Colours" 1250 LOCATE#1,3,6:INPUT#1,"Colour to change";a:option=a 1260 LOCATE#1,3,9:INPUT#1,"Change to";a1 1270 WEND 1280 RETURN 1290 END 1300 MODE 1:INK 0,0:INK 1,26:PEN 1:RETURN 1310 LOCATE (80/stepno)/2,1:PRINT CHR$(23);CHR$(1);:RETURN 1320 PRINT CHR$(23);CHR$(0);:RETURN 1330 GOSUB 1310:TAG:PLOT littlex,littley,1:MOVE (bigx+(stepno*2)),bigy+4:PRINT CHR$(202);:TAGOFF:GOSUB 1320:RETURN 1340 WINDOW #1,1,(80/stepno),25,25:RETURN 1350 INPUT#1,"Start sprite :",a:CLS#1 1360 INPUT#1,"End sprite :",b:CLS#1 1370 GOSUB 1400 1380 start=spstart+(a*256):zlength=((b-a)*256)+255 1390 RETURN 1400 INPUT #1,"Filename :",a$:CLS #1:RETURN 1410 END 1420 GOSUB 1300:GOSUB 1340:GOSUB 1400:IF LEN(a$)=0 OR LEN(a$)>8 THEN RETURN 1430 POKE (spstart+4096),modeno:FOR n=1 TO noinks 1440 POKE (spstart+4096+n),inkno(n-1) 1450 NEXT 1460 SAVE a$,b,spstart+4096,17:RETURN 1470 GOSUB 1300:GOSUB 1340:GOSUB 1400:IF LEN(a$)=0 OR LEN(a$)>8 THEN RETURN 1480 LOAD a$,spstart+4096 1490 modeno=PEEK(spstart+4096):FOR n=1 TO noinks 1500 inkno(n-1)=peen(spstart+4096+n) 1510 NEXT:inkselect=1:RETURN |