home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 September
/
Ahoy_Magazine_85-09_1985_Double_L.d64
/
sprites
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
6KB
|
171 lines
1 rem *** basic sprites ***
2 rem a ship and a rocket demonstrate sprite creation and movement
9 rem *** set-up subroutines ***
10 gosub 600:rem (video memory)
11 gosub 700:rem (background)
12 gosub 800:rem (sprite shapes)
13 gosub 900:rem (sprite positions)
15 goto 100
98 rem *** action loop ***
100 vp=vp+1:if vp>vz then vp=0
110 hp=hp-1:if hp<0 then hp=hz
120 poke vt(1),vv(vp)
130 poke ht(0),hh(hp):poke hr,hb(hp):poke ht(1),hh(hp)
140 wv=wv-1:if wv<1 then wv=8
150 print dd$mid$(st$,wv,40)"";
196 goto 100
198 rem *** wait for response ***
296 return
298 rem *** ending routines ***
300 print "[147]final score: "rt*100+vp*10:print:print:vp=15:poke vt(0),vv(vp)
310 print "to play again, press p":print "to quit, press q":hp=79
315 hp=79:poke hr,hb(hp):poke ht(0),hh(hp):xp=1:poke lt(0),st(xp)
320 z=peek(203):if z=62 then 370
325 poke ht(0),hh(hp):poke hr,hb(hp)
330 hp=hp+1:if hp>hz then hp=0
345 if z<>41 then 320
350 eg=0:dl=0:dt=1:ds=5:rt=0:rc=0:gosub 930:goto 100
369 rem ** put video memory back to first block, and screen memory to 1024
370 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
371 poke 53272,20:poke 648,4
379 rem ** reenable shift/commodore and run-stop/restore
380 poke 657,0:poke 792,71:poke 808,237
390 end
598 rem *** arrange memory ***
599 rem use first video block (0 to 16383) so nothing fancy has to be done.
600 vb=0
601 rem ** screen memory stays where it is
608 rem *** register addresses ***
609 rem ** sprite shape location table
610 lt(0)=2040:for i=1 to 7:lt(i)=lt(i-1)+1:next
611 rem ** sprite color table
612 ct(0)=53287:for i=1 to 7:ct(i)=ct(i-1)+1:next
613 rem ** sprite horizontal position table (low bytes)
614 ht(0)=53248:for i=1 to 7:ht(i)=ht(i-1)+2:next
615 rem ** sprite vertical position table
616 vt(0)=53249:for i=1 to 7:vt(i)=vt(i-1)+2:next
617 rem ** sprite horizontal high-bit register
618 hr=53264
619 rem ** sprite enable register
620 es=53269
621 rem ** vertical expansion register (1=double height)
622 ve=53271
623 rem ** horizontal expansion register (1=double width)
624 he=53277
625 rem ** sprite priority register (1=sprite is in front of foreground)
626 pr=53275
627 rem ** multicolor enable register (1=multi-color enabled)
628 em=53276
629 rem ** sprite multicolor color registers
630 mr=53285:rem ('01' register: add 1 to mr for '11' register)
631 rem ** sprite-sprite collision register
632 cs=53278
633 rem ** sprite-foreground collision register
634 cf=53279
635 rem ** set-bit and clear-bit values
636 bs(0)=1:for i=1 to 7:bs(i)=2*bs(i-1):next
637 for i=0 to 7:bc(i)=255-bs(i):next
638 rem *** initialize values ***
639 rem ** foreground color
640 poke 53281,6:print "[147]";:rem (blue)
641 rem ** background color
642 poke 53281,14:rem (light blue)
643 rem ** border color
644 poke 53280,0:rem (black)
645 rem ** sprite colors (defaults: whi,red,l-grn,pur,grn,blu,yel,m-gray)
646 poke ct(0),0:poke ct(1),2:rem (the ship is black, the rocket red)
647 rem ** set priority
648 poke pr,255:rem (all behind)
649 rem ** set horizontal sizes
650 poke he,1:rem (ship is double width, rocket is normal width)
651 rem ** set vertical sizes
652 poke ve,2:rem (rocket is double height)
653 rem ** enable sprites
654 poke es,bs(0) or bs(1):rem (sprites 0 and 1)
696 return
698 rem *** set up ocean ***
700 r$=chr$(18):rx$=chr$(146):b$=" "
701 fd$=chr$(162)+chr$(185)+chr$(175)+chr$(228)
703 fu$=b$+chr$(228)+chr$(175)+chr$(185)
705 s$=r$:for i=1 to 40:s$=s$+b$:next:s$=s$+rx$
706 st$=fu$+fd$+fu$+fd$+fu$+fd$:st$=st$+st$
707 dd$=""
708 wv=8
710 print "[147]"dd$mid$(st$,wv,40)s$s$s$left$(s$,40)""rx$;
711 poke 2023,160
796 return
798 rem *** sprite shapes ***
799 rem ** number of sprite shapes (-1);number of lines per sprite shape (-1)
800 ns=1
801 rem ** locate sprite shape memory
802 st(0)=13:st(1)=14
803 rem ** loops
804 for i=0 to ns:for j=0 to 20:read ss$:for k=0 to 2:x=0:y=vb+st(i)*64+j*3+k
805 rem ** convert strings to shape bytes (use bs(0-7) to set bits)
806 for l=1 to 8:m=l+8*k:m=asc(mid$(ss$,m,1)):if m=42 then x=x or bs(8-l)
807 next:poke y,x:next:next:next
809 rem sprite shape data, 21 lines per shape: *='on' .='off'
810 data ".........*.............."
811 data ".........*.............."
812 data ".........*..**.........."
813 data ".........*..**.........."
814 data "........**..**.........."
815 data "........**.***.........."
816 data ".........*****.........."
817 data ".......*********........"
818 data "************************"
819 data "************************"
820 data "..********************.."
821 data "...******************..."
822 data "...******************..."
823 data "...*******************.."
824 data "....******************.."
825 data ".....*****************.."
826 data "........................"
827 data "........................"
828 data "........................"
829 data "........................"
830 data "........................"
831 rem ** 2nd sprite shape
832 data ".....................*.."
833 data ".....................*.."
834 data "....................***."
835 data "....................***."
836 data "....................***."
837 data "....................***."
838 data "....................***."
839 data "....................***."
840 data "....................*.*."
841 data "....................*.*."
842 data "........................"
843 data "........................"
844 data "........................"
845 data "........................"
846 data "........................"
847 data "........................"
848 data "........................"
849 data "........................"
850 data "........................"
851 data "........................"
852 data "........................"
853 data "........................"
896 return
898 rem *** sprite positions ***
899 rem ** possible positions dim'ed
900 vz=32:hz=362:dim hh(hz),vv(vz),hb(hz)
901 rem ** assign horizontal values
902 x=0:b=0:for i=0 to hz:hh(i)=x:hb(i)=b
903 x=x+1:if x>255 then x=x-256:b=3
904 next
905 rem ** assign vertical values
906 x=202:for i=0 to 9:vv(i)=x:x=x-1:next:for i=10 to 14:vv(i)=x:x=x-2:next
907 :for i=15 to 18:vv(i)=x:x=x-3:next:for i=19 to 21:vv(i)=x:x=x-6:next
908 for i=22 to vz:vv(i)=x:x=x-12:next
929 rem ** initial sprite positioning
930 hp=160:vp=0
931 poke vt(0),vv(vp):poke ht(0),hh(hp):poke hr,hb(hp)
932 poke vt(1),vv(vp):poke ht(1),hh(hp)
939 rem ** tell vic-2 where to find sprite shapes
940 poke lt(0),st(0):poke lt(1),st(1)
996 return