home *** CD-ROM | disk | FTP | other *** search
- 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
-