Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 10 GO TO 2630
- 20 REM Artillery, based on the 1987 Macintosh game by Kirk Crawford
- 30 REM Started in about 1994 and mostly developed in Feb 2019 by patters
- 40 REM
- 50 REM sub - trajectories loop
- 60 REM
- 70 FOR t=0 TO 30 STEP 0.5
- 80 POKE 23677,r: POKE 23678,s: LET p1=j: LET p3=f
- 90 LET v1=v1+z/8
- 100 LET x=o1+v1*t
- 110 LET y=o3+v3*t-4.905*t*t
- 120 LET j=x>=0
- 130 IF y<0 THEN LET f=0
- 140 IF x>255 THEN LET j=0: IF y<c2 THEN LET f=0
- 150 IF h=1 THEN LET h=0: PRINT c$
- 160 IF h=2 THEN LET h=0: PRINT e$
- 170 IF NOT f THEN GO TO 240
- 180 IF y>175 THEN LET j=0: IF x>=0 AND x<=255 THEN LET c$(3)=CHR$ (INT (x/8)): PRINT c$: LET h=1
- 190 IF x>255 THEN IF y>=c2 AND y<=175 THEN LET e$(2)=CHR$ (21-INT (y/8)): PRINT e$: LET h=2
- 200 IF NOT j THEN GO TO 240
- 210 IF p1 THEN DRAW INK 3;x-r,y-s
- 220 IF NOT p1 THEN PLOT INK 3;x,y
- 230 IF ATTR (21-INT (y/8),INT (x/8))=gd THEN LET f=0
- 240 IF NOT h2 THEN IF PEEK a+PEEK b+PEEK c+PEEK d<>cs THEN LET h2=1: PRINT h$: BEEP .4,-20: LET s$=s$+"2": IF x>127 THEN LET f=0: LET p3=0
- 250 IF NOT f THEN IF p3 THEN BEEP .01,-20
- 260 LET r=PEEK 23677: LET s=PEEK 23678
- 270 POKE 23677,p: POKE 23678,q: LET p2=i: LET p4=e
- 280 LET v2=v2+z/8
- 290 LET v=o2+v2*t
- 300 LET w=o4+v4*t-4.905*t*t
- 310 LET i=v<=255
- 320 IF w<0 THEN LET e=0
- 330 IF v<0 THEN LET i=0: IF w<c1 THEN LET e=0
- 340 IF g=1 THEN LET g=0: PRINT d$
- 350 IF g=2 THEN LET g=0: PRINT f$
- 360 IF NOT e THEN GO TO 430
- 370 IF w>175 THEN LET i=0: IF v>=0 AND v<=255 THEN LET d$(3)=CHR$ (INT (v/8)): PRINT d$: LET g=1
- 380 IF v<0 THEN IF w>=c1 AND w<=175 THEN LET f$(2)=CHR$ (21-INT (w/8)): PRINT f$: LET g=2
- 390 IF NOT i THEN GO TO 430
- 400 IF p2 THEN DRAW INK 3;v-p,w-q
- 410 IF NOT p2 THEN PLOT INK 3;v,w
- 420 IF ATTR (21-INT (w/8),INT (v/8))=gd THEN LET e=0
- 430 IF NOT h1 THEN IF PEEK l+PEEK m+PEEK n+PEEK o<>cs THEN LET h1=1: PRINT g$: BEEP .4,-20: LET s$=s$+"1": IF v<128 THEN LET e=0: LET p4=0
- 440 IF NOT e THEN IF p4 THEN BEEP .01,-20
- 450 LET p=PEEK 23677: LET q=PEEK 23678
- 460 IF f OR e THEN NEXT t
- 470 RETURN
- 480 REM
- 490 REM sub - redraw terrain
- 500 REM
- 510 LET t=0: IF te<>tp OR bt<>bp THEN LET t=1
- 520 IF bt=bs THEN IF sk=sp THEN IF te=tp THEN LET t=2
- 530 FOR y=s TO e STEP dd
- 540 IF dd=-1 THEN IF y=18 THEN IF rv THEN GO SUB 1420
- 550 IF t=2 THEN PRINT AT y,0; PAPER 8; INK 8; BRIGHT bs; OVER 1;TAB 31;" ": GO TO 590
- 560 IF c(y+1,1) THEN PRINT AT y,0; PAPER sk; BRIGHT bs; OVER ov; INK 8;TAB c(y+1,1)-1;" "
- 570 IF t THEN PRINT AT y,c(y+1,1); PAPER te; BRIGHT bt; OVER 1; INK 8;TAB c(y+1,2);" "
- 580 IF c(y+1,2)<31 THEN PRINT AT y,c(y+1,2)+1; PAPER sk; BRIGHT bs; OVER ov; INK 8;TAB 31;" "
- 590 IF y=k THEN PRINT a$(30 TO )
- 600 IF y=k-1 THEN PRINT a$(17 TO 29)
- 610 IF y=k-2 THEN PRINT a$( TO 16)
- 620 IF y=u THEN PRINT b$(30 TO )
- 630 IF y=u-1 THEN PRINT b$(17 TO 29)
- 640 IF y=u-2 THEN PRINT b$( TO 16)
- 650 NEXT y
- 660 IF dd=1 AND rv THEN GO SUB 1420: REM draw water
- 670 RETURN
- 680 REM
- 690 REM sub - generate and draw terrain
- 700 REM
- 710 DIM c(22,2): REM terrain matrix, last 2 rows for water extents
- 720 REM generate terrain left to right with sine function
- 730 LET yp=k+2: REM previous y value
- 740 LET t=0: REM x is river
- 750 LET p=0: REM prev x is river
- 760 LET ym=19: REM peak
- 770 FOR x=x1+3 TO x2-2
- 780 LET n=ABS (31*q-x): REM x-flip
- 790 LET y=21-INT (v*SIN (PI/w*n-s)+r+0.5)
- 800 REM river extents
- 810 IF y>19 THEN LET y=19: IF rv THEN LET t=1
- 820 IF t THEN IF NOT p THEN LET c(21+(c(21,1)<>0),1)=x: REM start
- 830 IF NOT t THEN IF p THEN LET c(21+(c(21,2)<>0),2)=x-1: REM end
- 840 IF t THEN IF x=x2-2 THEN LET c(21+(c(21,2)<>0),2)=x: REM catch last extent
- 850 LET p=t: LET t=0
- 860 IF y<0 THEN LET y=0
- 870 PRINT AT y,x;"-"
- 880 REM find horizontal extents
- 890 IF y<>yp THEN LET c(y+1,2-(y<yp))=x
- 900 IF y>yp THEN LET c(yp+1,2)=x-1: REM fix descending extents after gaps
- 910 LET yp=y
- 920 IF y<ym THEN LET ym=y: REM peak
- 930 NEXT x
- 940 IF u+1>y THEN LET c(y+1,2)=x-1: REM fix last descending extent
- 950 FOR y=k+1 TO 19: LET c(y+1,1)=0: NEXT y: REM castle 1 footing
- 960 FOR y=u+1 TO 19: LET c(y+1,2)=31: NEXT y: REM castle 2 footing
- 970 REM edge detection pass
- 980 LET v=0: LET w=0
- 990 FOR y=ym TO 19
- 1000 IF NOT c(y+1,1) AND y<=k THEN LET c(y+1,1)=v
- 1010 IF NOT c(y+1,2) THEN LET c(y+1,2)=w
- 1020 LET v=c(y+1,1): LET w=c(y+1,2)
- 1030 NEXT y
- 1040 REM
- 1050 REM draw terrain
- 1060 REM
- 1070 LET ov=0
- 1080 FOR y=19 TO ym STEP -1
- 1090 IF y=18 THEN IF rv THEN GO SUB 1420: REM draw water
- 1100 IF y=k THEN PRINT a$
- 1110 IF y=u THEN PRINT b$
- 1120 PRINT AT y,c(y+1,1); PAPER te; INK 3; BRIGHT bt;TAB c(y+1,2);" "
- 1130 NEXT y
- 1140 IF k<=ym THEN PRINT a$
- 1150 IF u<=ym THEN PRINT b$
- 1160 RETURN
- 1170 REM
- 1180 REM sub - redraw sky
- 1190 REM
- 1200 FOR y=s TO e STEP dd
- 1210 PRINT AT y,0; OVER ov; INK 8;TAB 31;" "
- 1220 IF y=k THEN PRINT a$(30 TO )
- 1230 IF y=k-1 THEN PRINT a$(17 TO 29)
- 1240 IF y=k-2 THEN PRINT a$( TO 16)
- 1250 IF y=u THEN PRINT b$(30 TO )
- 1260 IF y=u-1 THEN PRINT b$(17 TO 29)
- 1270 IF y=u-2 THEN PRINT b$( TO 16)
- 1280 NEXT y
- 1290 RETURN
- 1300 REM
- 1310 REM sub - redraw terrain and sky
- 1320 REM
- 1330 LET ov=1: LET dd=-1: IF td=1 OR td=4 THEN LET dd=1: REM draw dir, sunrise or sunset
- 1340 IF td=3 AND tn>4 THEN LET ov=0: LET tn=0: REM nightfall scrubs trails in sky after 4 turns
- 1350 IF dd=-1 THEN LET s=19: LET e=ym: GO SUB 510: LET s=ym-1: LET e=0: GO SUB 1200
- 1360 IF dd=1 THEN LET s=0: LET e=ym-1: GO SUB 1200: LET s=ym: LET e=19: GO SUB 510
- 1370 PRINT a$+b$: REM redraw castles to catch edge cases
- 1380 RETURN
- 1390 REM
- 1400 REM sub - draw water
- 1410 REM
- 1420 PRINT AT 19,c(21,1); PAPER 1; BRIGHT (bs=0); INK 3; OVER ov;TAB c(21,2)+(c(21,1)>0);AT 19,c(22,1);TAB c(22,2)+(c(22,1)>0)
- 1430 RETURN
- 1440 REM
- 1450 REM sub - check input
- 1460 REM
- 1470 PRINT #0;AT 1,ix;"Entry error": PAUSE 50
- 1480 INPUT AT 1,ix;(v$;" [";d;"]: "); LINE i$
- 1490 IF i$="" THEN LET i=d: RETURN
- 1500 FOR n=1 TO LEN i$: IF CODE i$(n)<45 OR CODE i$(n)>57 THEN GO TO 1470: NEXT n
- 1510 LET i=INT VAL i$
- 1520 IF i<mn THEN LET i=mn: PRINT #0;"Constrained to min": PAUSE 50
- 1530 IF i>mx THEN LET i=mx: PRINT #0;"Constrained to max": PAUSE 50
- 1540 RETURN
- 1550 PAPER 7: INK 0: BRIGHT 0: FLASH 0: BORDER 7: CLS
- 1560 LET s1=0: LET s2=0: REM score
- 1570 LET sk=0: LET te=0: LET bt=0: REM sky colour, terrain colour, terrain bright
- 1580 LET td=1: REM time of day
- 1590 LET ix=0: REM input x pos
- 1600 LET wn=5: LET v$="Score to win match (1-9)": LET d=wn: LET mn=1: LET mx=9: GO SUB 1480: LET wn=i
- 1610 RANDOMIZE
- 1620 REM
- 1630 REM start round
- 1640 REM
- 1650 LET z=(INT (RND*11))-5: REM wind
- 1660 IF td=5 THEN LET td=1: REM loop time of day counter
- 1670 REM default params
- 1680 LET a1=60: LET a2=60: REM angle (deg)
- 1690 LET q1=45: LET q2=45: REM initial velocity
- 1700 LET h1=0: LET h2=0: REM reset castle hit states
- 1710 LET s$="": REM records order castles are hit in
- 1720 LET tn=0: REM turns
- 1730 REM
- 1740 REM terrain and castle setup
- 1750 REM
- 1760 LET v=(RND*8)+3: REM amplitude
- 1770 LET w=(RND*4)+13: REM frequency
- 1780 LET r=(RND*(17-((v<6)*v)+((v>9)*(12-v))))-2: REM y-offset
- 1790 LET s=((RND*25)+2)/10: REM x-offset
- 1800 LET q=INT (RND*2): REM terrain function may x-flip, to remove bias
- 1810 REM castle 1 location
- 1820 LET x1=2+(INT (RND*4))
- 1830 LET n=ABS (31*q-(x1+2)): REM x-flip
- 1840 LET k=21-INT (v*SIN (PI/w*n-s)+r+0.5)-1: REM castle is 1 row higher than terrain at x
- 1850 IF k<4 THEN GO TO 1760: REM problem, reset terrain params
- 1860 IF k>18 THEN LET k=18
- 1870 REM castle 2 location
- 1880 LET x2=28-(INT (RND*4))
- 1890 LET n=ABS (31*q-(x2-1)): REM x-flip
- 1900 LET u=21-INT (v*SIN (PI/w*n-s)+r+0.5)-1: REM castle is 1 row higher than terrain at x
- 1910 IF u<4 THEN GO TO 1760: REM problem, reset terrain params
- 1920 IF u>18 THEN LET u=18
- 1930 REM castle coords valid, continue setup
- 1940 LET lv=INT (RND*8)+2: REM level type, grass desert soil snow
- 1950 IF lv>7 THEN LET lv=3: REM grass is more likely
- 1960 LET rv=INT (RND*3): IF rv=2 THEN LET rv=0: REM water
- 1970 IF lv=7 THEN LET rv=1
- 1980 REM trajectory origin coords
- 1990 LET o1=(x1+2)*8: LET o3=(21-k+2)*8
- 2000 LET o2=(x2*8)-1: LET o4=(21-u+2)*8
- 2010 GO SUB 3320: REM set up time of day
- 2020 INK 0: CLS
- 2030 GO SUB 3090: REM wind arrow
- 2040 FOR n=20 TO 21: PRINT AT n,0; BRIGHT 0; PAPER 7; OVER 1;TAB 31;" ": NEXT n
- 2050 REM
- 2060 REM update castle sprites
- 2070 REM
- 2080 LET a$(2 TO 3)=CHR$ (k-2)+CHR$ (x1+po): LET a$(10 TO 13)=w$(po+1)+CHR$ 22+CHR$ (k-2)+CHR$ (x1+fl): LET a$(16 TO 19)=w$(fl+1)+CHR$ 22+CHR$ (k-1)+CHR$ x1: LET a$(31 TO 32)=CHR$ k+CHR$ x1
- 2090 LET b$(2 TO 3)=CHR$ (u-2)+CHR$ (x2+po): LET b$(10 TO 19)=w$(po+1)+CHR$ 22+CHR$ (u-2)+CHR$ (x2+fl)+CHR$ 16+CHR$ 2+w$(fl+1)+CHR$ 22+CHR$ (u-1)+CHR$ x2: LET b$(31 TO 32)=CHR$ u+CHR$ x2
- 2100 LET g$( TO 32)=a$( TO 32): LET g$(9)=CHR$ 6: LET g$(28)=CHR$ 2
- 2110 LET h$( TO 32)=b$( TO 32): LET h$(9)=CHR$ 6: LET h$(28)=CHR$ 2
- 2120 GO SUB 3490: REM update sprite colours
- 2130 GO SUB 710: REM generate and draw terrain
- 2140 REM
- 2150 REM start turn
- 2160 REM
- 2170 LET tn=tn+1
- 2180 PRINT AT 21,1; BRIGHT 0; INVERSE 1; PAPER 7;"SCORE ";AT 21,8-(s1>9);s1;AT 21,23;"SCORE ";AT 21,30-(s2>9);s2
- 2190 GO SUB 2900: REM player 1 input
- 2200 PRINT a$(11 TO 16)
- 2210 GO SUB 2990: REM player 2 input
- 2220 PRINT b$(11 TO 16)
- 2230 LET j=1: LET i=1: REM on-screen trajectory flag
- 2240 LET f=1: LET e=1: REM projectile in flight flag
- 2250 LET r=o1: LET s=o3: LET p=o2: LET q=o4: REM draw coords set to origins
- 2260 REM velocity components
- 2270 LET n=a1*PI/180: REM deg to rad
- 2280 LET v1=q1*COS n
- 2290 LET v3=q1*SIN n
- 2300 LET n=(180-a2+180)*PI/180: REM deg to rad, x flip
- 2310 LET v2=-q2*COS n
- 2320 LET v4=-q2*SIN n
- 2330 LET h=0: LET g=0: REM off screen arrows
- 2340 LET c1=(21-k)*8: LET c2=(21-u)*8: REM castle footings y
- 2350 REM castle ATTR mem addr
- 2360 LET l=22528+k*32+x1: LET m=l+1: LET n=l-32: LET o=n+1
- 2370 LET a=22528+u*32+x2: LET b=a+1: LET c=a-32: LET d=c+1
- 2380 BEEP .1,-35
- 2390 GO SUB 70: REM trajectories loop
- 2400 REM
- 2410 REM end of turn, check outcomes
- 2420 REM
- 2430 PRINT a$(11 TO 16)+b$(11 TO 16): REM fix flags colour clash
- 2440 FOR n=0 TO 1: PRINT AT 20+n,0; BRIGHT 0; PAPER 7; OVER 1;TAB 31;" ": NEXT n: REM fix HUD colour clash
- 2450 IF s$="1" THEN LET pl=1: LET x=x1: LET y=k: GO SUB 3220: REM castle 1 collapse
- 2460 IF s$="2" THEN LET pl=2: LET x=x2: LET y=u: GO SUB 3220: REM castle 2 collapse
- 2470 IF s$="21" THEN LET pl=2: LET x=x2: LET y=u: GO SUB 3220: LET pl=1: LET y=k: LET x=x1: GO SUB 3220: REM castle 2 then 1 collapse
- 2480 IF s$="12" THEN LET pl=1: LET x=x1: LET y=k: GO SUB 3220: LET pl=2: LET y=u: LET x=x2: GO SUB 3220: REM castle 1 then 2 collapse
- 2490 IF s$<>"" THEN LET td=INT td+1: GO TO 3550: REM round over, increment time of day
- 2500 IF td=2 OR td=4 THEN LET td=td+0.5: REM dawn and dusk last one turn only
- 2510 LET td=td+0.5: IF td=5 THEN LET td=1: REM night and day last two turns
- 2520 IF td-(INT td)=0 THEN GO SUB 3320: GO SUB 3490: GO SUB 1330: REM change time of day, update sprites, redraw screen
- 2530 GO TO 2150: REM no score, round continues
- 2540 REM
- 2550 REM user defined graphics
- 2560 REM
- 2570 RESTORE 2590
- 2580 FOR x=0 TO 71: READ y: POKE USR CHR$ (144)+x,y: NEXT x
- 2590 DATA 1,1,1,1,1,1,1,1,153,153,255,96,40,37,34,34,153,153,255,38,132,68,164,164,34,34,35,32,44,38,32,32,164,36,236,28,20,4,100,4,128,128,128,128,128,128,128,128,0,16,40,16,0,0,0,0,0,0,16,32,126,32,16,0,0,0,8,4,126,4,8,0
- 2600 REM
- 2610 REM variables setup, perf critical first
- 2620 REM
- 2630 LET x=0: LET y=0: LET v=0: LET w=0: LET r=0: LET s=0: LET p=0: LET q=0: LET t=0: LET v1=0: LET v3=0: LET v2=0: LET v4=0: LET o1=0: LET o3=0: LET o2=0: LET o4=0: LET f=0: LET e=0: LET j=0: LET i=0: LET h=0: LET g=0: LET p1=0: LET p2=0: LET p3=0: LET p4=0: LET h1=0: LET h2=0: LET gd=0: LET cs=0
- 2640 LET c$=CHR$ 22+CHR$ 0+CHR$ 0+CHR$ 21+CHR$ 1+CHR$ 19+CHR$ 8+CHR$ 17+CHR$ 8+CHR$ 16+CHR$ 3+"^": LET d$=c$: LET e$=c$: LET f$=c$: LET e$(12)="\i": LET e$(3)=CHR$ 31: LET f$(12)="\h": REM offscreen arrows
- 2650 DIM a$(42): DIM b$(42): REM castle sprites
- 2660 DIM g$(46): DIM h$(46): REM hit castle sprites
- 2670 LET a$( TO 16)=CHR$ 22+CHR$ 17+CHR$ 0+CHR$ 17+CHR$ 8+CHR$ 19+CHR$ 8+CHR$ 16+CHR$ 7+"\a"+CHR$ 22+CHR$ 17+CHR$ 1+CHR$ 16+CHR$ 1+"\' ": REM castle flag,16 chars
- 2680 LET a$(17 TO 29)=CHR$ 22+CHR$ 18+CHR$ 0+CHR$ 19+CHR$ 1+CHR$ 16+CHR$ 0+"\b"+CHR$ 19+CHR$ 0+CHR$ 16+CHR$ 1+"\c": REM castle top, 13 chars
- 2690 LET a$(30 TO 42)=CHR$ 22+CHR$ 19+CHR$ 0+CHR$ 19+CHR$ 1+CHR$ 16+CHR$ 0+"\d"+CHR$ 19+CHR$ 0+CHR$ 16+CHR$ 1+"\e": REM castle base, 13 chars
- 2700 LET b$()=a$
- 2710 LET g$()=a$: LET g$(36 TO 46)=CHR$ 6+CHR$ 17+CHR$ 2+CHR$ 18+CHR$ 1+CHR$ 21+CHR$ 1+"\.'"+CHR$ 19+CHR$ 0+"\.'": REM hit castle
- 2720 LET h$()=g$
- 2730 DIM c(22,2): DIM d(32)
- 2740 REM time of day colour lookup table
- 2750 REM day,dusk,night,dawn - 1st row sky types, +10 for bright
- 2760 RESTORE 2770
- 2770 DATA 15,5,1,6
- 2780 DATA 2,2,0,2
- 2790 DATA 4,4,0,4
- 2800 DATA 14,4,0,5
- 2810 DATA 6,6,0,6
- 2820 DATA 16,6,0,16
- 2830 DATA 17,17,5,17
- 2840 DIM e(7,4)
- 2850 FOR n=1 TO 7: FOR t=1 TO 4: READ a: LET e(n,t)=a: NEXT t: NEXT n
- 2860 GO TO 1550
- 2870 REM
- 2880 REM sub - user input player 1
- 2890 REM
- 2900 PRINT AT k-2,x1+fl; INK 1-(sk=1); FLASH 1; BRIGHT bs;"\..": REM highlight flag
- 2910 LET ix=0: LET v$="Angle": LET d=a1: LET mn=-45: LET mx=135: GO SUB 1480: LET a1=i
- 2920 PRINT AT 20,1; PAPER 7; INK 0; BRIGHT 0;" ";AT 20,1;a1;"\g"
- 2930 LET ix=0: LET v$="Velocity": LET d=q1: LET mn=20: LET mx=99: GO SUB 1480: LET q1=i
- 2940 PRINT AT 20,6; PAPER 7; INK 0; BRIGHT 0;" ";AT 20,6;"V";q1
- 2950 RETURN
- 2960 REM
- 2970 REM sub - user input player 2
- 2980 REM
- 2990 PRINT AT u-2,x2+fl; INK 2; FLASH 1; BRIGHT bs;"\..": REM highlight flag
- 3000 LET ix=15: LET v$="Angle": LET d=a2: LET mn=-45: LET mx=135: GO SUB 1480: LET a2=i
- 3010 PRINT AT 20,23; PAPER 7; INK 0; BRIGHT 0;" ";AT 20,23;a2;"\g"
- 3020 LET ix=12: LET v$="Velocity": LET d=q2: LET mn=20: LET mx=99: GO SUB 1480: LET q2=i
- 3030 PRINT AT 20,28; PAPER 7; INK 0; BRIGHT 0;" ";AT 20,28;"V";q2
- 3040 INPUT #1: REM clear bottom of screen
- 3050 RETURN
- 3060 REM
- 3070 REM sub - wind arrow & flag
- 3080 REM
- 3090 LET r$="No Wind": IF z>0 THEN LET m$="-----": LET r$=m$(1 TO z-1)+">"
- 3100 IF z THEN PRINT AT 21,14;"Wind"
- 3110 IF z<0 THEN LET m$="<-----": LET r$=m$(1 TO INT (ABS (z)+0.5))
- 3120 LET n=INT ((32-(LEN r$))/2)
- 3130 PRINT AT 20,n; r$
- 3140 IF z<0 THEN PLOT (8*n)+3,11: DRAW (((LEN r$)-1)*8)+3,0
- 3150 IF z>0 THEN PLOT (8*n)+2,11: DRAW (((LEN r$)-1)*8)+3,0
- 3160 LET w$="\a\' \. ": LET po=0: LET fl=1
- 3170 IF z<0 THEN LET w$="\ '\f\ .": LET po=1: LET fl=0
- 3180 RETURN
- 3190 REM
- 3200 REM sub - castle collapse
- 3210 REM
- 3220 PRINT AT y-2,x+fl; INK pl-(pl=1 AND sk=1);w$(3): PAUSE 10: PRINT AT y-2,x+fl;" ": PAUSE 10: PRINT AT y-2,x+fl; INK 7; BRIGHT bs;w$(3): PAUSE 10: PRINT AT y-2,x+fl; INK 7; BRIGHT bs;w$(fl+1)
- 3230 PAUSE 60: PRINT AT y-2,x;" ";AT y-1,x; INK 0; BRIGHT 1; OVER 1;"#"; BRIGHT 0; INK 1-(sk=1);"#";AT y,x; BRIGHT 1; INK 0;"\b"; BRIGHT 0; INK 1-(sk=1);"\c"
- 3240 FOR n=20 TO -10 STEP -5: BEEP 0.005,n: NEXT n
- 3250 PRINT AT y-1,x; INK 0; BRIGHT bs;" ";AT y,x; BRIGHT bs; INVERSE 1; OVER 1;"00"
- 3260 PRINT AT y,x-1; INK 0; BRIGHT bs;".";AT y,x+2; INK 1-(sk=1);"'"
- 3270 PAUSE 20: PRINT AT y-2,x; INK 0; BRIGHT bs;" ";AT y-1,x;" ";AT y,x; BRIGHT 1;"\b"; BRIGHT 0; INK 1-(sk=1);"\c"; BRIGHT bs;",";AT y,x; OVER 1; BRIGHT 1; INK 0;"_"; INK 1-(sk=1); BRIGHT 0;"_"
- 3280 PAUSE 20: RETURN
- 3290 REM
- 3300 REM sub - set time of day
- 3310 REM
- 3320 LET sp=sk: LET tp=te: LET bp=bt: REM store previous values
- 3330 LET sk=e(1,td)
- 3340 LET bs=0: REM sky bright
- 3350 IF sk>10 THEN LET bs=1: LET sk=sk-10
- 3360 LET te=e(lv,td)
- 3370 LET bt=0: REM terrain bright
- 3380 IF te>10 THEN LET bt=1: LET te=te-10
- 3390 REM colour constraints
- 3400 IF te=6 AND sk=6 THEN LET sk=5
- 3410 IF te=5 AND sk=5 THEN LET sk=6: LET bs=0
- 3420 PAPER sk: BRIGHT bs
- 3430 LET gd=64*bt+8*te+3: REM ground ATTR
- 3440 LET cs=32*sk+130-(sk=1)*2: REM castle aggregate ATTR
- 3450 RETURN
- 3460 REM
- 3470 REM sub - update sprite colours
- 3480 REM
- 3490 IF sk=1 OR sp=1 THEN LET a$(9)=CHR$ (7-(sk=1)*2): LET b$(9)=a$(9): LET a$(15)=CHR$ (1-(sk=1)): LET a$(28)=a$(15): LET b$(28)=a$(15): LET a$(41)=a$(15): LET b$(41)=a$(15): LET g$(15)=a$(15): LET g$(21 TO 23)=a$(15)+CHR$ 16+CHR$ (0+(sk=1)*6): LET h$(21 TO 23)=g$(21 TO 23)
- 3500 IF sk=6 OR sp=6 THEN LET g$(9)=CHR$ (6+(sk=6)): LET h$(9)=g$(9)
- 3510 RETURN
- 3520 REM
- 3530 REM check scores
- 3540 REM
- 3550 PAPER 7: BRIGHT 0: INK 0: PAUSE 60
- 3560 PRINT AT 21,1; BRIGHT 0; INVERSE 1; PAPER 7;"SCORE ";AT 21,8-(s1>9);s1;AT 21,14; INVERSE 0;" ";AT 21,23; INVERSE 1;"SCORE ";AT 21,30-(s2>9);s2;AT 20,0; INVERSE 0;TAB 31;" "
- 3570 FOR n=0 TO 10: PRINT AT n,0; OVER 1; BRIGHT 0;TAB 31;" ";AT 20-n,0;TAB 31;" ": NEXT n: PAUSE 20
- 3580 IF h2=1 THEN LET s1=s1+1: BEEP 0.01,20: PRINT AT 21,8-(s1>9); INVERSE 1; PAPER 7; BRIGHT 1;s1: BEEP 0.01,30: PAUSE 30
- 3590 IF h1=1 THEN LET s2=s2+1: BEEP 0.01,20: PRINT AT 21,30-(s2>9); INVERSE 1; BRIGHT 1; PAPER 7;s2: BEEP 0.01,30: PAUSE 30
- 3600 PAUSE 60: FOR n=0 TO 10: PRINT AT n,0;TAB 31;" ";AT 20-n,0;TAB 31;" ": NEXT n
- 3610 IF s1<wn AND s2<wn THEN GO TO 1650
- 3620 IF s1=s2 THEN LET wn=wn+1: GO TO 1650: REM tied, play another round
- 3630 REM
- 3640 REM game over yeah
- 3650 REM
- 3660 IF s1=wn THEN LET pl=1
- 3670 IF s2=wn THEN LET pl=2
- 3680 CLS : BRIGHT bs: PAPER sk
- 3690 FOR n=6 TO 12
- 3700 IF n>10 THEN PAPER te: BRIGHT bt
- 3710 PRINT AT n,12;TAB 19;" "
- 3720 NEXT n
- 3730 LET n=10: LET y=10: LET x=15: PAPER sk: BRIGHT bs: PRINT AT y-2,x; INK 7-(sk=1)*2;"\a"; INK pl-(pl=1 AND sk=1);"\' ";AT y-1,x;a$(20 TO 29);AT y,x;a$(33 TO ): PAUSE 5: PRINT AT y-2,x+1; INK pl-(pl=1 AND sk=1);"\''": PAUSE n
- 3740 INK pl: PRINT AT 15,12; BRIGHT 0; INVERSE 1; PAPER 7;"VICTORY!"
- 3750 LET x=x+2: LET y=y-2: PAUSE n: INK pl-(pl=1 AND sk=1): BRIGHT bs: PRINT AT y,x;"\' ": PAUSE n: PRINT AT y,x;"\. ": PAUSE n: FLASH 1: PRINT AT y,x;"\'.": PAUSE n*2: PRINT AT y,x;"\''": PRINT AT y,x+1; FLASH 0;"\' ": PAUSE n: PRINT AT y,x+1; FLASH 0;"\. ": PAUSE n: PRINT AT y,x+1;"\.."
- 3760 BEEP 0.5,0: BEEP 0.25,0: BEEP 0.5,7
- 3770 FLASH 0: PAPER 7: INK 0: BRIGHT 0: PAUSE 0: LET sp=1: LET sk=6: GO SUB 3490: GO TO 1550
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement