'USE SPRITES AND RASTER EFFECTS TO SAVE SPRITES 'VERTICAL WAVES WOULD WORK WELL WITH RASTER EFFECTS, '- BUT UNFORTUNATELY THEY SHOULD BE HORIZONTAL 'MAYBE A BG WITH RASTER EFFECTS COULD BE USED 'DISPLAYS '- SINE '- SAW '- PULSE '- NOISE '- ADSR ' - GOES UP ONCE, GOES DOWN ONCE, COULD CONTAIN HORIZONTAL LINES, ' - RASTER OPTIMIZATIONS ARE POSSIBLE 'LFO WAVE MODIFIERS '- ONE WAVE '- TRIGGER (MAKE THE WAVE MOVE (SHIFT HORIZONTALLY) CONSTANTLY WHEN OFF) '- INVERT WAVE (EASY) DIM GLOBAL RAST_SCHEDULE_N(127) DIM GLOBAL RAST_SPRITE_N(63) DIM GLOBAL RAST_SPRITE_X(63) DIM GLOBAL RAST_SPRITE_Y(63) DIM GLOBAL RAST_TBL(127) DIM GLOBAL OCCUPATION(127) GLOBAL SKIP,MAINSIZE,MAINADDR,OCCUPATIONADDR,OCCUPATIONSIZE SKIP=44 MAINSIZE=SKIP*128 MAINADDR=$A000 OCCUPATIONADDR=MAINADDR+MAINSIZE OCCUPATIONSIZE=128 '11 OF 64 SPRITES AVAILABLE PER RASTER MAXADDR=$E000-44 FOR I=0 TO 127 RAST_TBL(I)=MAINADDR+I*SKIP IF RAST_TBL(I)>=MAXADDR THEN RAST_TBL(I)=MAXADDR NEXT I 'STORE SPRITE PRESET DATA IN RAM AND LOAD IT TO $FE00+4*N 'TURN ALL NECCESSARY SPRITES ON FOR I=0 TO 10 SPRITE I,0,0,1 NEXT I ON RASTER CALL OPTIMIZER SUB OPTIMIZER 'N=RAST_SCHEDULE_N(RASTER) 'SPRITE RAST_SPRITE_N(RASTER),RAST_SPRITE_X(RASTER),RAST_SPRITE_Y(RASTER),1 COPY RAST_TBL(RASTER),44 TO $FE00 END SUB TOUCHSCREEN S=0.5 A=10 'H=63 H=A O=0 DO S=0.002*(160-TOUCH.X) A=TOUCH.Y/2 H=A 'CALL PRECLEAR 'CALL INIT_OCCUPATION FILL MAINADDR,MAINSIZE+OCCUPATIONSIZE CALL LOAD_SCHEDULE(H,A,S,O) 'CALL CLEANUP ADD O,0.1 WAIT VBL LOOP SUB SIMPLESINE(H,A,S,O) FOR T=0 TO 63 SPRITE T,T,H+A*SIN(T*S+O),1 NEXT T END SUB SUB PRECLEAR FILL MAINADDR,MAINSIZE END SUB SUB INIT_OCCUPATION FILL OCCUPATIONADDR,OCCUPATIONSIZE 'FOR I=0 TO 127 'OCCUPATION(I)=0 'NEXT I END SUB SUB LOAD_SCHEDULE(H,A,S,O) FOR T=0 TO 159 CALL RASTERPLOT(T,INT(H+A*SIN(T*S+O)),1,0) 'CALL RASTERPLOT(T,1,1,0) 'CALL RASTERPLOT(T,T,1,0) NEXT T END SUB SUB CLEANUP FOR I=0 TO 127 'CALL RASTERPLOTRESET(I,-1,-1,0,0) CALL RASTERPLOTCLEAR(I) NEXT I END SUB SUB MANUALRASTERNAV FOR I=0 TO 127 REPEAT WAIT VBL UNTIL TAP COPY RAST_TBL(I),44 TO $FE00 NUMBER 0,15,I,3 TEXT 4,15,HEX$(RAST_TBL(I)) NEXT I END SUB SUB VARBOUND(V,L,H) IF VH THEN V=H END IF END SUB SUB RASTERPLOT(X,Y1,C,A) Y=Y1 CALL VARBOUND(Y,0,127) N=PEEK(OCCUPATIONADDR+Y) 'N=OCCUPATION(Y) CALL VARBOUND(N,0,10) ADDR=MAINADDR+N*4+Y*SKIP POKE ADDR ,X+32 POKE ADDR+1,Y+32 POKE ADDR+2,C POKE ADDR+3,A POKE OCCUPATIONADDR+Y,N+1 'INC OCCUPATION(Y) END SUB SUB RASTERPLOTRESET(Y1,X,Y2,C,A) Y=Y1 CALL VARBOUND(Y,0,127) N=OCCUPATION(Y) CALL VARBOUND(N,0,10) A0=MAINADDR+Y*SKIP X3=X+32 Y3=Y2+32 'WRITE TO TEMP RAM, USE COPY FOR I=N TO 10 ADDR=A0+I*4 POKE ADDR ,X3 POKE ADDR+1,Y3 POKE ADDR+2,C POKE ADDR+3,A NEXT I END SUB SUB RASTERPLOTCLEAR(Y1) Y=Y1 CALL VARBOUND(Y,0,127) N=OCCUPATION(Y) CALL VARBOUND(N,0,10) FILL MAINADDR+Y*SKIP+N*4,(10-N)*4 'A0=MAINADDR+Y*SKIP 'FOR I=N TO 10 'ADDR=A0+I*4 'FILL ADDR,4 'NEXT I END SUB #1:MAIN PALETTES 0004080C00383400003C0C00003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 80000000000000008000000000000000