COMAL-80-C64-SPRITE-COLLISION-TEST-TEXT-SCREEN -------------------------------------------------------------------------------------------------- TOOL: COMAL-80 {Commodore C64} Language: STRUCTURED BASIC Extra: - Author: Misel Zivanovic Note: (C) 15th March 2026 - www.lived.ch, mzretro.ch --------------------------------------------------------------------------------------------------- COMAL-80 Command : datacollision (sprite#,TRUE/FALSE) or spritecollision (sprite#,TRUE/FALSE) are obviously not effecting sprites on the TEXT SCREEN of COMAL-80 and that is why we will look for alternate ways to deal with that problem. In other words, good old fashion PEEK and POKE! Fortunately, all these locations are still active when you use COMAL-80. Absolutely not difficult as you will see! To select the sprite you wish to move, press on 1,2 or 3 {I used that because it is easier than 0,1,2!} Sprites can be moved around with WASD keys! As you can see, it is easy to identify collisions and take needed actions/steps accordingly. --------------------------------------------------------------------------------------------------- Collision test for SPRITE - GRAPHICS and SPRITE - SPRITE: --------------------------------------------------------------------------------------------------- 0010 PAGE 0020 USE sprites 0030 USE graphics 0040 textbackground(0); textborder(0) 0050 textcolor(15) 0060 // load sprites 0070 RESTORE mysprites 0080 FOR a:=0 TO 191 DO 0090 READ spritedata 0100 POKE 832+a,spritedata 0110 ENDFOR a 0120 DIM xm(8), ym(8) 0130 // 0140 // ************************** 0150 sc:=0 // active sprite 0160 sg:=0; ss:=0 // collisions 0170 xm(sc+1):=200 // x-coordinate 0180 ym(sc+1):=100 // y-coordinate 0190 xm(sc+2):=230 // x-coordinate 0200 ym(sc+2):=100 // y-coordinate 0210 xm(sc+3):=260 // x-coordinate 0220 ym(sc+3):=100 // y-coordinate 0230 0240 // ************************** 0250 // sprite 0 - 2 on 0260 POKE 53269,7 0270 // 0280 // sprite 0-2 0290 FOR a:=0 TO 2 DO 0300 spritepos(a,xm(a+1),ym(a+1)) 0310 POKE 2040+a,13+a 0320 ENDFOR a 0330 // *************************** 0340 info 0350 0360 control: 0370 motion 0380 // keycheck 0390 collcheck 0400 GOTO control 0410 PROC motion 0420 b:=PEEK(203) 0430 IF b=10 THEN // left a 0440 xm(sc+1):=xm(sc+1)-1 0450 ENDIF 0460 IF b=18 THEN // right d 0470 xm(sc+1):=xm(sc+1)+1 0480 ENDIF 0490 IF b=13 THEN // down s 0500 ym(sc+1):=ym(sc+1)-1 0510 ENDIF 0520 IF b=9 THEN // up w 0530 ym(sc+1):=ym(sc+1)+1 0540 ENDIF 0550 // 0560 spritepos(sc,xm(sc+1),ym(sc+1)) 0570 // 0580 IF b=56 THEN sc:=0 0590 IF b=59 THEN sc:=1 0600 IF b=8 THEN sc:=2 0610 CASE sc OF 0620 WHEN 0 0630 PRINT AT 2,18: xm(1);ym(1) 0640 WHEN 1 0650 PRINT AT 3,18: xm(2);ym(2) 0660 WHEN 2 0670 PRINT AT 4,18: xm(3);ym(3) 0680 OTHERWISE 0690 ENDCASE 0700 ENDPROC motion 0710 // 0720 PROC keycheck 0730 PRINT AT 5,1: "**" 0740 PRINT AT 5,1: PEEK(203) 0750 ENDPROC keycheck 0760 // 0770 PROC collcheck 0780 sg:=PEEK(53279) 0790 PRINT AT 8,18: sg 0800 ss:=PEEK(53278) 0810 PRINT AT 9,18: ss 0820 ENDPROC collcheck 0830 PROC info 0840 sg:=PEEK(53279) 0850 PRINT AT 7,1: "collision mode!" 0860 PRINT AT 8,1: "sprite-gfx:" 0870 PRINT AT 9,1: "sprite-sprite:" 0880 // 0890 PRINT AT 1,1: "coordinates!" 0900 PRINT AT 2,1: "0-sprite x - y:" 0910 PRINT AT 3,1: "1-sprite x - y:" 0920 PRINT AT 4,1: "2-sprite x - y:" 0930 // 0940 PRINT AT 12,1: "sprites: 0-1-2" 0950 PRINT AT 13,1: "bits : 1-2-4" 0960 // 0970 PRINT AT 16,1: "use 1,2,3 to" 0980 PRINT AT 17,1: "select sprites"; 0990 PRINT AT 18,1: "and 'awsd' to "; 1000 PRINT AT 19,1: "move around! " 1010 // 1020 PRINT AT 22,1: "***************" 1030 PRINT AT 23,1: "collision check"; 1040 PRINT " by mzretro.ch!" 1050 PRINT AT 24,1: "***************" 1060 1070 ENDPROC info 1080 mysprites: 1090 DATA $00,$00,$00,$00,$00,$00 1100 DATA $00,$00,$00,$00,$00,$00 1110 DATA $00,$00,$00,$00,$ff,$00 1120 DATA $03,$ff,$c0,$07,$e3,$e0 1130 DATA $07,$c3,$e0,$0f,$83,$f0 1140 DATA $0f,$f3,$f0,$0f,$f3,$f0 1150 DATA $0f,$f3,$f0,$0f,$f3,$f0 1160 DATA $07,$f3,$e0,$07,$f3,$e0 1170 DATA $03,$ff,$c0,$00,$ff,$00 1180 DATA $00,$00,$00,$00,$00,$00 1190 DATA $00,$00,$00,$00,$00,$00 1200 DATA $00,$00,$00,$00,$00,$00 1210 DATA $00,$00,$00,$00,$00,$00 1220 DATA $00,$00,$ff,$00,$03,$ff 1230 DATA $c0,$07,$c3,$e0,$07,$99 1240 DATA $e0,$0f,$f9,$f0,$0f,$f9 1250 DATA $f0,$0f,$f3,$f0,$0f,$e7 1260 DATA $f0,$0f,$cf,$f0,$07,$9f 1270 DATA $e0,$07,$81,$e0,$03,$ff 1280 DATA $c0,$00,$ff,$00,$00,$00 1290 DATA $00,$00,$00,$00,$00,$00 1300 DATA $00,$00,$00,$00,$00,$00 1310 DATA $00,$00,$00,$00,$00,$00 1320 DATA $00,$00,$00,$00,$00,$00 1330 DATA $ff,$00,$03,$ff,$c0,$07 1340 DATA $99,$e0,$07,$99,$e0,$0f 1350 DATA $99,$f0,$0f,$99,$f0,$0f 1360 DATA $80,$f0,$0f,$80,$f0,$0f 1370 DATA $f9,$f0,$07,$f9,$e0,$07 1380 DATA $f9,$e0,$03,$ff,$c0,$00 1390 DATA $ff,$00,$00,$00,$00,$00 1400 DATA $00,$00,$00,$00,$00,$00 ---------------------------------------------------------------------------------------------------