home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 November
/
Ahoy_Magazine_85-11_1985_Double_L.d64
/
starship
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
18KB
|
451 lines
1 rem *** starship ***
2 rem machine language sprite movement
4 rem ** move top of memory to make room for video block at 32768
5 poke 55,255:poke 56,127:poke 643,255:poke 644,127:print "[147]"
6 rem ** declare primary variables
7 f$=" ":c0%=0:c1%=0:c2%=0:c3%=0:c4%=0:c5%=0:c6%=0:sp%=0
8 def fn pg(x)=int(x/256):def fn lo(x)=x-256*(int(x/256))
9 rem *** set-up subroutines ***
10 gosub 90:gosub 600:rem (video memory)
12 print "[147]";:gosub 95:gosub 700:gosub 2000:rem (machine language and sprites)
13 gosub 900:rem (sprite positions and game screen)
14 sys 38067:rem (start interrupt!)
15 rem ** enable sprites
16 for i=0 to 29:next:poke es,31:rem (sprites 0-4)
17 goto 100
19 rem ** load subroutine
20 for i=xb to xe:read a:poke i,a:next:print ".[146]";:return
89 rem turn off screen
90 poke 53265,0:return
94 rem turn on screen (and extended background color text mode)
95 poke 53265,91:return
98 rem *** action loop ***
100 k=peek(653):if k=7 then 300
110 for i=1 to 4:sp%=i:sys 38336:next
115 print " "
120 on c0% gosub 200:c0%=0:c4%=0:c5%=0:c6%=0
125 for i=1 to 4:sp%=i:sys 38336:next
130 if c1%>0 then gosub 220:c1%=0
135 if c2%>0 then gosub 240:c2%=0
140 if c3%>0 then gosub 260:c3%=0
196 goto 100
199 rem ** firebutton routine goes here
200 print "f"
201 if c4%=1 then print "!"
202 if c5%>1 then print "s"
203 if c6%=1 then print "f"
205 return
220 print "ew"str$(c1%):return
239 rem ** spr/spr collision routine
240 print "cs"str$(c2%):return
259 rem ** spr/fore collision routine
260 print "cf"str$(c3%):return
296 return
298 rem *** end handling ***
299 rem ** put video memory back to first block, and screen memory to 1024
300 gosub 90:poke es,0:rem disable sprites
304 rem restore video/screen memory
305 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
306 i=peek(53272):poke 53272,20:k=peek(648):poke 648,4
310 gosub 95:print "[147]quit? ([217][146] or [206][146])":print:print
315 get a$:if a$="" then 315
320 if a$="y" then print "so long, star pilot!":goto 370
325 gosub 90:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
330 poke 53272,i:poke 648,k:poke es,31:gosub 95:goto 100
370 for i=0 to 599:next
379 rem ** reenable shift/commodore and run-stop/restore
380 poke 657,0:poke 792,71:poke 808,237
390 sys 65126
598 rem *** arrange memory ***
599 rem use third video block (32768 to 49151), so rom character set is usable.
600 vb=32768:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
601 rem ** tell vic-2 where screen is without changing character set location
602 sb=0:poke 53272,(sb*16)+4:sb=vb+1024*sb
603 rem ** tell basic where screen is
604 bb=sb/256:poke 648,bb
608 rem *** register addresses ***
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)
633 rem ** set-bit and clear-bit values
634 bs(0)=1:for i=1 to 7:bs(i)=2*bs(i-1):next
635 for i=0 to 7:bc(i)=255-bs(i):next
638 rem *** initialize values ***
639 rem ** foreground color
640 poke 53281,0:print "[147][154]";:rem (light blue)
641 rem ** background color
642 poke 53281,0 :rem (black)
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),7:poke ct(1),5:poke ct(2),2:poke ct(3),6:poke ct(4),12
647 rem ** set priority
648 poke pr,0:rem (all in front)
649 rem ** set horizontal sizes
650 poke he,0:rem (all small)
651 rem ** set vertical sizes
652 poke ve,0:rem (all small)
653 rem ** enable sprites
654 poke es,0:rem (leave them off for now)
655 rem ** enabl multicolor for spr 1-4
656 poke em,30
657 rem ** set multi-colors 1 and 3 (1=light grey, 3=yellow)
658 poke mr,15:poke mr+1,7
659 rem *** ml table setup ***
660 rem ** animation timer (1=fastest)
661 poke 37920,4:poke 37921,4
662 rem ** animation counter (always 1)
663 poke 37922,1
664 rem ** animate sprite 0? (1=yes)
665 poke 37923,0
666 rem ** movement timer (number of interrupts between moves [1=fastest])
667 poke 37924,1:poke 37925,1
668 rem ** all sprites wrap at screen edge? (1=yes)
669 poke 37936,1
670 rem ** sprite 0 bounce off sprites? (1=yes)
671 poke 37940,1
672 rem ** sprite 0 bounce off foreground? (1=yes)
673 poke 37941,0
674 rem ** go-speed timer (number of sprite 0 moves per interrupt [1=slowest])
675 poke 37926,3:poke 37928,3
676 rem clear flags
677 poke 37927,0:poke 37935,0:poke 37943,0
678 rem ** extended background colors
679 poke 53282,1:poke 53283,7:poke 53284,9
683 rem ** sprite 0-7 bit table
684 x=1:for i=37962 to 37969:poke i,x:x=x*2:next
693 rem *** safety procedures ***
694 poke 657,128:rem disable shift/commodore character set switch
695 rem poke 808,234:poke 792,193:rem disable stop and stop/restore
696 return
699 rem *** intro screen ***
700 print "[147]"tab(12)"[211][212][193][210][211][200][201][208][160][195][193][208][212][193][201][206]"
710 print:print tab(6)"[217][207][213][210][160][195][210][193][198][212][160][201][211][160][194][197][201][206][199][160][208][210][197][208][193][210][197][196][146]":print:print
796 return
898 rem *** sprite positions ***
899 rem ** possible positions dim'ed
900 for i=1 to 4:poke ht(i),20+int(rnd(9)*220)
901 poke vt(i),50+int(rnd(9)*190):next
902 poke hr,0
909 rem ** put stars on the screen
910 print "[147]";:for i=0 to 49:poke vb+int(rnd(9)*1024),46:next
915 for i=0 to 8:poke vb+int(rnd(9)*1024),42:next
919 rem ** starship position
920 poke 53248,175:poke 53249,150
921 rem ** starship direction
922 poke vb+1016,16
946 return
1998 rem *** machine language ***
1999 rem ** startup sys routine
2000 poke 37888,peek(788):poke 37889,peek(789)
2002 xb=38067:xe=38079:gosub 20
2003 rem block interr, set vector to animation shell,enable interr
2004 rem sei lda #0 sta 788 lda #149 sta 789 cli rts
2005 data 120,169,0,141,20,3,169,149,141,21,3,88,96
2019 rem *** animation shell ***
2020 xb=38144:xe=38176:gosub 20
2021 rem see if timer calls for animation or movement
2022 rem dec 37920 beq+3 jmp(37898)
2023 data 206,32,148,240,3,108,10,148
2024 rem reset animation timer
2025 rem lda 37921 sta 37920
2026 data 173,33,148,141,32,148
2027 rem get next step in animation sequence
2028 rem dec 37922 bne+5 lda#8 sta 37922 ldx 37922 dex
2029 data 206,34,148,208,5,169,8,141,34,148,174,34,148,202
2030 rem if called for, animate #0
2031 rem lda 37923 beq+6
2032 data 173,35,148,240,6
2033 rem animate all sprites
2034 rem lda anim.seq.tab,x sta sprite.shape.tab
2035 a=192:b=248:for i=38177 to 38219 step 6:poke i,189:poke i+1,a:poke i+2,148
2036 poke i+3,141:poke i+4,b:poke i+5,131:a=a+8:b=b+1:next
2037 rem exit through movement handler
2038 rem jmp (37898)
2039 poke 38225,108:poke 38226,10:poke 38227,148
2049 rem *** movement counter ***
2050 xb=38272:xe=38288:gosub 20
2051 x=38272:poke 37896,fn lo(x):poke 37897,fn pg(x):rem set counter address
2052 poke 37898,fn lo(x):poke 37899,fn pg(x):rem move.vect.=joydir
2053 rem decrement timer; if not 0, go finish up
2054 rem dec 37924 beq+3 jmp(37900)
2055 data 206,36,148,240,3,108,12,148
2056 rem reset timer and jump to read routine through vector set from basic
2057 rem lda 37925 sta 37924 jmp(37890)
2058 data 173,37,148,141,36,148,108,2,148
2059 rem ** bitset subroutine **
2060 xb=38314:xe=38323:gosub 20
2061 rem get bitmask and put it in horizontal hi-bit register
2062 rem lda 37962,y ora 53264 sta 53264 rts
2063 data 185,74,148,13,16,208,141,16,208,96
2069 rem ** bitclear subroutine **
2070 xb=38324:xe=38335:gosub 20
2071 rem get bitmask, reverse it, and put it in horizontal hi-bit register
2072 rem lda 37962,y eor#255 and 53264 sta 53264 rts
2073 data 185,74,148,73,255,45,16,208,141,16,208,96
2099 rem *** xmove ***
2100 xb=38400:xe=38467:gosub 20
2101 rem test for upmove
2102 rem lda#1 and 37963,y beq+3 jsr 38528
2103 data 169,1,57,75,148,240,3,32,128,150
2107 rem test for downmove
2108 rem lda#2 and 37963,y beq+3 jsr 38592
2109 data 169,2,57,75,148,240,3,32,192,150
2117 rem test for leftmove and hi-bit
2118 rem lda#4 and 37963,y beq+17 lda 37962,y and 53264 beq+6
2119 data 169,4,57,75,148,240,17,185,74,148,45,16,208,240,6
2120 rem do either leftset or leftclear
2121 rem jsr 38656 jmp 38444 jsr 38720
2122 data 32,0,151,76,44,150,32,64,151
2126 rem test for rightmove and hi-bit
2127 rem lda#8 and 37963,y bne+1 rts lda 37962,y and 53264 beq+4
2128 data 169,8,57,75,148,208,1,96,185,74,148,45,16,208,240,4
2129 rem do either rightset or rightclear
2130 rem jsr 38784 jmp 38515 jsr 38848 rts
2131 data 32,128,151,96,32,192,151,96
2139 rem *** upmove subroutine ***
2140 xb=38528:xe=38561:gosub 20
2141 rem get vert.loc.,decrement,check edge,store new vert.loc.
2142 rem ldx 53249,y dex txa cmp 37978,y bne+3 jsr 38546 txa sta 53249,y rts
2143 data 190,1,208,202,138,217,90,148,208,3,32,146,150,138,153,1,208,96
2144 rem * topcheck
2145 rem lda 37936 bne+4 inx jmp 38391 ldx 37979,y dex jmp 38391
2146 data 173,48,148,208,4,232,76,247,149,190,91,148,202,76,247,149
2159 rem *** downmove subroutine ***
2160 xb=38592:xe=38625:gosub 20
2161 rem get vert.loc.,increment,check edge,store new vert.loc.
2162 rem ldx 53249,y inx txa cmp 37979,y bne+3 jsr 38610 txa sta 53249,y rts
2163 data 190,1,208,232,138,217,91,148,208,3,32,210,150,138,153,1,208,96
2164 rem * bottomcheck
2165 rem lda 37936 bne+4 dex jmp 38391 ldx 37978,y inx jmp 38391
2166 data 173,48,148,208,4,202,76,247,149,190,90,148,232,76,247,149
2179 rem *** leftmove (hi bit set) ***
2180 xb=38656:xe=38669:gosub 20
2181 rem get horiz loc, decrement, check crossover, store and return
2182 rem ldx 53248,y dex bpl+3 jsr 38324 txa sta 53248,7 rts
2183 data 190,0,208,202,16,3,32,180,149,138,153,0,208,96
2199 rem *** leftmove (hi bit clr) ***
2200 xb=38720:xe=38756:gosub 20
2201 rem get horizontal position, decrement; if edge, move and leave
2202 rem ldx 53248,y dex txa cmp 37994,y bne+3 jsr 38738 txa sta 53248,y rts
2203 data 190,0,208,202,138,217,106,148,208,3,32,82,151,138,153,0,208,96
2204 rem *** left check
2205 rem lda 37936 bne+4 inx jmp 38391 ldx 37995,y dex jsr 38314 jmp 38391
2206 data 173,48,148,208,4,232,76,247,149,190,107,148,202,32,170,149,76,247,149
2219 rem *** rightmve (hi bit set) ***
2220 xb=38784:xe=38820:gosub 20
2221 rem get horizontal position, increment; if edge, move and leave
2222 rem ldx 53248,y inx txa cmp 37932,y bne+3 jsr 38802 txa sta 53248,y rts
2223 data 190,0,208,232,138,217,107,148,208,3,32,146,151,138,153,0,208,96
2224 rem *** right check
2225 rem lda 37936 bne+4 dex jmp 38391 ldx 37994,y inx jsr 38324 jmp 38391
2226 data 173,48,148,208,4,202,76,247,149,190,106,148,232,32,180,149,76,247,149
2239 rem *** rightmve (hi bit clr) ***
2240 xb=38848:xe=38861:gosub 20
2241 rem get horiz loc, increment, check crossover, store and return
2242 rem ldx 53248,y inx bne+3 jsr 38314 txa sta 53248,y rts
2243 data 190,0,208,232,208,3,32,170,149,138,153,0,208,96
2399 rem *** basic movement handler ***
2400 xb=38336:xe=38346:gosub 20
2401 rem set y to offset of selected sprite
2402 rem ldy#59 lda(45)y tax ldy 37944,x jmp 38400
2403 data 160,59,177,45,170,188,56,148,76,0,150
2469 rem ** report non-sprite-0 wraps and edges to basic
2470 xb=38391:xe=38399:gosub 20
2471 rem was it sprite 0? if not, report wrap
2472 rem cpy#0 bne+1 rts sty 37943 rts
2473 data 192,0,208,1,96,140,55,148,96
2499 rem *** read joystick ***
2500 xb=38912:xe=38972:gosub 20
2501 rem set read vector to point to joystick routine
2502 x=38912:poke 37890,fn lo(x):poke 37891,fn pg(x):rem (rem this to use keyb.)
2506 rem get joystick 2; store it, check for firebutton, report if pressed
2507 rem lda 56320 sta 37933 and#16 bne+8 lda#1 sta 37927 jsr 39168
2508 data 173,0,220,141,45,148,41,16,208,8,169,1,141,39,148,32,0,153
2509 rem is movement called for? if so, set joydir, set shape 0
2510 rem lda 37933 and#15 cmp#15 bne+3 jmp(37900) eor#15 sta 37963 jsr 39040
2511 data 173,45,148,41,15,201,15,208,3,108,12,148,73,15,141,75,148,32,128,152
2512 rem move once, then point move.vect.to movement handler
2513 rem ldy#0 jsr 38400 jsr 39072 lda 37892 sta 37898
2514 data 160,0,32,0,150,32,160,152,173,4,148,141,10,148
2515 rem lda 37893 sta 37899 jmp(37900)
2516 data 173,5,148,141,11,148,108,12,148
2529 rem *** interr.move.handler ***
2530 xb=38976:xe=39009:gosub 20
2531 poke 37892,fn lo(xb):poke 37893,fn pg(xb)
2532 rem set up for sprite 0, go move, check collisions, redo if necessary
2533 rem ldy#0 jsr 38400 jsr 39072
2534 data 160,0,32,0,150,32,160,152
2535 rem do it again? if not, reset timer
2536 rem dec 37928 bne-13 lda 37926 sta 37928
2537 data 206,40,148,208,243,173,38,148,141,40,148
2538 rem reset movement vector, quit
2539 rem lda 37896 sta 37898 lda 37897 sta 37899 jmp(37900)
2540 data 173,8,148,141,10,148,173,9,148,141,11,148,108,12,148
2549 rem *** set shape 0 ***
2550 xb=39040:xe=39057:gosub 20
2551 rem using joydir as index, get sprite shape code from sprite 0 direc.table
2552 rem lda 37923 bne+9 ldy 37963 lda 37951,y sta 33784 jsr 39232 rts
2553 data 173,35,148,208,9,172,75,148,185,63,148,141,248,131,32,64,153,96
2569 rem ** sprite 0 collision routine
2570 xb=39072:xe=39111:gosub 20
2571 rem do we bounce off sprites? if so, do it
2572 rem lda 37940 beq+16 lda 53278 sta 37929 and#1 beq+6
2573 data 173,52,148,240,16,173,30,208,141,41,148,41,1,240,6
2574 rem jsr 39248 jmp unmove
2575 data 32,80,153,76,208,152
2576 rem do we bounce off foreground? if so, do it and return
2577 rem lda 37941 beq+13 lda 53279 and#1 beq+6 jsr 39280 jmp unmove rts
2578 data 173,53,148,240,13,173,31,208,41,1,240,3,32,112,153,76,208,152,96
2579 rem ** unmove **
2580 xb=39120:xe=39148:gosub 20
2581 rem stop gospeed, reverse joydir and store it
2582 rem lda#1 sta 37928 ldy 37963 lda 38009,y sta 37963
2583 data 169,1,141,40,148,172,75,148,185,121,148,141,75,148
2584 rem go move, reverse joydir and restore it, quit
2585 rem ldy#0 jsr 38400 ldy 37963 lda 38009,y sta 37963 rts
2586 data 160,0,32,0,150,172,75,148,185,121,148,141,75,148,96
2599 rem *** read keyboard ***
2600 rem xb=00000:xe=00000:gosub 20
2601 rem set read vector to point to keyboard routine (remove rem to use)
2602 rem x=38912:poke 37890,fn lo(x):poke 37891,fn pg(x):rem (not in force)
2699 rem ** basic variable subroutines
2700 xb=39168:xe=39174:gosub 20
2701 rem ** report firebutton - c0%
2702 rem ldy#10 lda#1 sta(45),y rts
2703 data 160,10,169,1,145,45,96
2709 rem ** report sprites to basic
2710 xb=39184:xe=39222:gosub 20
2711 rem c1%=edgewrap, c2%=s/s collis.
2712 rem ldy#17 lda 37943 beq+2 sta(45)y ldy#24 lda 37937 beq+2 sta(45)y
2713 data 160,17,173,55,148,240,2,145,45,160,24,173,49,148,240,2,145,45
2714 rem c3%=s/foreg.collis.,erase,ret.
2715 rem ldy#31 lda 37938 beq+2 sta(45)y
2716 data 160,31,173,50,148,240,2,145,45
2717 rem lda#0 sta 37937 sta 37938 sta 37943 rts
2718 data 169,0,141,49,148,141,50,148,141,55,148,96
2719 rem ** report movement
2720 xb=39232:xe=39241:gosub 20
2721 rem c4%=player has tried to move
2722 rem ldy#38 lda#1 sta(45)y sta 37935 rts
2723 data 160,38,169,1,145,45,141,47,148,96
2729 rem ** report sprite 0 bounce/s
2730 xb=39248:xe=39257:gosub 20
2731 rem c5%=sprite 0 bounced/sprite:
2732 rem ldy#45 lda 37929 and#254 sta(45)y rts
2733 data 160,45,173,41,148,41,254,145,45,96
2739 rem ** report sprite 0 bounce/f
2740 xb=39280:xe=39289:gosub 20
2741 rem c6%=sprite 0 bounced foregrou.
2742 rem ldy#52 lda#1 sta(45)y sta 37930 rts
2743 data 160,52,169,1,145,45,141,42,148,96
2898 rem *** wrapup ***
2899 rem all routines exit through here
2900 xb=40704:xe=40721:gosub 20
2901 rem ** set collision vector
2902 x=40704:poke 37900,fn lo(x):poke 37901,fn pg(x)
2906 rem get collision data and report it to basic variables
2907 rem lda 53278 sta 37937 lda 53279 sta 37938 jsr 39184
2908 data 173,30,208,141,49,148,173,31,208,141,50,148,32,16,153
2915 rem return to housekeeping
2916 rem jmp(37888)
2917 data 108,0,148
2989 rem routines added before final jmp() will execute every interr.
2998 rem *** set up sprite shapes ***
2999 rem ** planets
3000 for i=34304 to 34816 step 512:for j=0 to 448 step 64:for k=0 to 20
3001 read a:poke i+j+k,a:next
3002 for k=21 to 63:poke i+j+k,0:next:next:gosub 3985:next
3009 rem ** planet 1 shape data
3010 data 0,40,0,0,175,0,82,191,192,82,175,128,2,191,128,0,171,0,0,40,0
3011 data 0,40,0,0,190,0,2,255,128,5,190,128,5,254,128,0,175,0,0,40,0
3012 data 0,40,0,0,250,0,3,254,128,2,90,128,3,90,128,0,190,0,0,40,0
3013 data 0,40,0,0,234,0,3,250,128,3,229,128,3,229,128,0,250,0,0,40,0
3014 data 0,40,0,0,170,0,3,234,80,3,170,80,3,170,128,0,234,0,0,40,0
3015 data 0,40,0,0,170,20,3,170,212,2,170,128,2,170,192,0,170,0,0,40,0
3016 data 0,40,0,0,170,64,2,171,192,2,170,192,2,171,192,0,170,0,0,40,0
3017 data 0,40,0,5,171,0,6,175,192,2,171,192,2,175,192,0,170,0,0,40,0
3019 rem ** planet 2 shape data
3020 data 0,40,0,3,170,192,62,170,148,162,170,143,42,255,252,2,255,192,0,40,0
3021 data 0,40,0,3,106,192,61,106,188,241,106,143,62,171,252,2,171,192,0,40,0
3022 data 0,24,0,3,90,192,61,90,188,81,90,143,63,234,188,3,234,128,0,24,0
3023 data 0,20,0,3,86,192,61,86,188,241,86,138,61,255,168,1,255,128,0,20,0
3024 data 0,20,0,3,85,128,61,85,104,241,85,74,63,223,252,3,223,192,0,20,0
3025 data 0,20,0,3,149,192,62,149,124,242,149,79,63,253,252,3,253,192,0,20,0
3026 data 0,40,0,2,169,192,62,169,124,242,169,79,63,255,252,3,255,192,0,40,0
3027 data 0,40,0,2,170,0,42,170,188,162,170,143,63,255,212,3,255,192,0,40,0
3058 gosub 3985
3059 rem ** sprite animation tables
3060 for i=38088 to 38112 step 8:for j=0 to 7:read a:poke i+j,a:next:next
3061 rem ** animation table data
3062 data 24,25,26,27,28,29,30,31
3063 data 32,33,34,35,36,37,38,39
3064 data 27,26,25,24,31,30,29,28
3065 data 37,36,35,34,33,32,39,38
3098 rem *** sprite 0 shapes ***
3099 rem ** sprite 0 direction table
3100 for i=37952 to 37961:read a:poke i,a:next:gosub 3985
3101 data 16,20,0,22,23,21,0,18,17,19
3102 rem ** sprite 0 animation table
3103 for i=0 to 7:poke 38080+i,16+i:next
3104 rem ** sprite 0 shapes
3105 for i=33792 to 34240 step 64:for j=0 to 18 step 3
3106 read a:poke i+j,a:poke i+j+1,0:poke i+j+2,0:next
3107 for j=21 to 63:poke i+j,0:next:next:gosub 3985
3109 rem ** sprite 0 data
3110 data 8,28,28,28,54,34,0
3111 data 6,14,28,120,240,48,32
3112 data 0,224,62,31,62,224,0
3113 data 32,48,240,120,28,14,6
3114 data 0,34,54,28,28,28,8
3115 data 4,12,15,30,56,112,96
3116 data 0,7,124,248,124,7,0
3117 data 96,112,56,30,15,12,4
3298 rem ** sprite movement data
3299 rem ** location register offset table
3300 x=0:for i=37944 to 37951:poke i,x:x=x+2:next
3304 rem ** sprite bitmask table
3305 x=1:for i=37962 to 37976 step 2:poke i,x:x=x*2:next
3307 rem ** sprite joydir table
3308 rem sprite directions: 1=up 2=dn 4=lf 8=rt add for diagonals
3309 rem 0=no movement (can be changed from basic)
3310 for i=37963 to 37977 step 2:read a:poke i,a:next
3311 data 0,5,6,10,9,0,0,0
3312 rem ** sprite borders table **
3313 rem each sprite's screen margins are individually set
3314 rem sprites are considered in numerical order
3315 rem ** top edges (0-7)
3316 for i=37978 to 37992 step 2:read a:poke i,a:next
3317 data 50,43,43,43,43,43,43,43
3318 rem ** bottom edges (0-7)
3319 for i=37979 to 37993 step 2:read a:poke i,a:next
3320 data 243,250,250,250,250,250,250,250
3321 rem ** left edges (0-7)
3322 for i=37994 to 38008 step 2:read a:poke i,a:next
3323 data 23,0,0,0,0,0,0,0
3324 rem ** right edges (0-7)
3325 for i=37995 to 38009 step 2:read a:poke i,a:next
3326 data 80,87,87,87,87,87,87,87
3327 rem ** joystick reversal table
3328 for i=38010 to 38019:read a:poke i,a:next
3329 data 2,1,0,8,10,9,0,4,6,5
3985 print "![146]";
3990 return