! MUST USE XB256 ! ****************************** ! * * ! * I'M NOT SAYING IT'S ALIENS * ! * BUT IT'S ALIENS * ! * * ! * J.MORRIS OCTOBER '21 * ! * * ! * NEEDS 32K RAM * ! * * ! * MUST BE COMPILED WITH * ! * WILHELM COMPILER WHILST * ! * RUNNING IN XB256 EXTENSION * ! * * ! ****************************** ! ************************ ! * INITIALIZE SCREEN * ! ************************ 1 CALL LINK("SCRN2") :: CALL LINK("SCREEN",2) :: CALL CLEAR :: RANDOMIZE::TOP=0 ! ******************** ! * DIMENSION ARRAYS * ! ******************** ! AA(XX) = ALIEN ALIVE ARRAY, 1 IF ALIVE, 0 IF DEAD ! AX(XX) = ALIEN'S X POSITION ON THE SCREEN ! AY(XX) = ALIEN'S Y POSITION ON THE SCREEN ! BP(X) = THE SOUND TONES DURING GAMEPLAY ! SW(XX) = ANIMATION BETWEEN CHARACTERS 112 AND 113 FOR ALIENS ! WP(3) = UNUSED ! MAPX(X)= SPRITE MAP FOR SCREEN ! MAPY(X)= SPRITE MAP FOR SCREEN ! MC(XX) = ! NTE(XX) = ARRAY FOR MUSICAL NOTATIONS IN TITLE PAGE ! DU(XX) = ARRAY FOR MUSICAL DURATION IN TITLE PAGE ! SU$(X) = STRING ARRAY FOR SUMMARY OF GAMEPLAY AT END OF GAME 4 DIM AA(40),AX(40),AY(40),BP(4),SW(40),WP(3),MAPX(24),MAPY(32),MC(40),NTE(49),DU(49),su$(8) 5 BP(1)=900::BP(2)=800::BP(3)=750::BP(4)=720::WP(1)=1000::WP(2)=1100::WP(3)=1150 6 N=0::FOR L=1 TO 24::MAPX(L)=N::N=N+8::NEXT L::MAPX(1)=1 7 N=0::FOR L=1 TO 32::MAPY(L)=N::N=N+8::NEXT L::MAPY(1)=1 ! ************************* ! * TITLE PAGE MUSIC DATA * ! ************************* 10 FOR L=1 TO 49:: READ N1,N2::DU(L)=N1::NTE(L)=N2::NEXT L 11 DATA 250,147,150,175,150,165,250,147,150,175,150,165,250,147,150,175,150,165,250,147,150,175,150,165,250,147 12 DATA 250,165,150,198,150,185,250,165,150,198,150,185,250,165,150,198,150,185,250,165,150,198,150,185,250,165 13 data 250,147,150,175,150,165,250,147,150,175,150,165,250,147,150,175,150,165,250,147,150,175,150,165,250,147 14 data 250,139,150,165,150,154,250,139,250,110,250,131,150,155,150,139,250,131,250,110 15 restore 20 ! ********************************** ! * STRING FOR SUMMARY OF GAMEPLAY * ! ********************************** 16 for l=1 to 8::read z$::su$(l)=z$::next l 20 data "MASTER BLASTER","BETTER THAN MOST","FAIR TO MIDDLING","BELOW AVERAGE" 22 DATA "COULD DO BETTER","NOT GOOD AT ALL","PRETTY DIRE","GOTTA BE KIDDING" ! ************************ ! * GRAPHICS DEFINITIONS * ! ************************ 50 A$="000000031F3F3F3F183CFFFFFFFFFFFF000000C0F8FCFCFC181818180000000000925400C6005492" 52 CALL LINK("CHAR2",104,A$) 54 CALL LINK("CHAR2",112,"42247EDBDBFFE7BDA5A5FFDBDBFF663C492A0063002A4900") 58 CALL LINK("CHAR2",120,"0103070F1F3F7FFF80C0E0F0F8FCFEFFFFFFFFFFFFFFFFFF") 60 CALL LINK("CHAR2",64,"0008081000000000001028447C44444400784444784444780038444040404438") 62 CALL LINK("CHAR2",48,"0038444C54644438")::CALL CHAR(114,"492A0063002A4900") 64 CALL CHAR(40,"010F7FD57F38100080F0FEABFE1C08000000001000000000",105,"0018181818180000") 66 CALL CHAR(43,"00001",45,"3C5EBFBFFFFF7E3C",115,"183018301830180008080808081C0800") ! ********************** ! * COLOUR DEFINITIONS * ! ********************** 200 CALL LINK("COLOR2",10,4,1,11,6,1,12,13,1) 201 FOR L=3 TO 8::CALL LINK("COLOR2",L,16,2)::NEXT L ! **************** ! * TITLE SCREEN * ! **************** ! LINE 250 AND 251 CYCLE THROUGH THE MUSICAL NOTATIONS ARRAY 210 CALL CLEAR::CALL DELSPRITE(ALL)::Z$="BEST "&STR$(TOP)&"0"::py=16::NI=0::for l=1 to 40::mc(l)=0::next l::tmax=2 215 IF TOP=0 THEN Z$="BEST 0" 220 SHOTS=0::HITS=0::k=0::CALL LINK("DELAY",500) 225 CALL LINK("DISPLY",1,11,"RETROSPECT")::CALL LINK("DISPLY",8,3,"I@M NOT SAYING IT@S ALIENS") 230 CALL LINK("DISPLY",10,9,"BUT IT@S ALIENS") 235 CALL LINK("DISPLY",3,11,Z$)::CALL LINK("DISPLY",18,7,"CHOOSE OPTION") 236 CALL LINK("DISPLY",20,7,"1 STANDARD SHIELDS")::CALL LINK("DISPLY",21,7,"2 MOVING SHIELDS") 238 CALL LINK("DISPLY",22,7,"3 NO SHIELDS") 250 CALL KEY(0,K,ST)::NI=NI+1::IF NI>49 THEN NI=1 251 CALL SOUND(DU(NI),NTE(NI),1,NTE(NI)+1,1) 252 IF K=49 THEN MODE=1::CALL SOUND(200,1224,0)::GOTO 260 254 IF K=50 THEN MODE=2::t6=0::CALL SOUND(200,1224,0)::GOTO 260 256 IF K=51 THEN MODE=3::CALL SOUND(200,1224,0)::GOTO 260 257 GOTO 250 ! ************************* ! *ASSIGN PLAYER CONTROLS * ! ************************* 260 CALL CLEAR::CALL LINK("DELAY",500) 261 CALL LINK("DISPLY",3,5,"KEYBOARD GAME CONTROLS") 265 CALL LINK("DISPLY",13,5,"KEY FOR LEFT")::GOSUB 9110 266 CALL KEY(0,K,ST)::IF ST=0 THEN 266 267 KEYL=K::K$=CHR$(KEYL)::CALL LINK("DISPLY",13,20,K$)::CALL LINK("DISPLY",15,5,"KEY FOR RIGHT")::GOSUB 9110 268 CALL KEY(0,K,ST)::IF ST=0 THEN 268 269 KEYR=K::K$=CHR$(KEYR)::CALL LINK("DISPLY",15,20,K$)::CALL LINK("DISPLY",17,5,"KEY FOR FIRE")::GOSUB 9110 270 CALL KEY(0,K,ST)::IF ST=0 THEN 270 271 KEYF=K::K$=CHR$(KEYF)::CALL LINK("DISPLY",17,20,K$)::CALL LINK("DISPLY",19,5,"CONFIRM Y OR N")::CALL SOUND(250,1224,0) 272 CALL KEY(0,K,ST)::IF ST=0 THEN 272 273 IF K=ASC("Y") THEN 275 ELSE IF K=ASC("y") THEN 275 274 IF K=ASC("N") THEN 260 ELSE IF K=ASC("n") THEN 260 ELSE 272 275 CALL SOUND(250,1224,0) ! *************************** ! * START OF GAME VARIABLES * ! *************************** ! RESTARTS FROM LINE 307 300 tmax=2 305 LV=3 ! PLAYER LIVES 306 SCORE=0 ! PLAYER SCORE 307 lev=1 ! player level 308 sn=10::pill=0::TMAX=2::CALL LINK("COLOR2",10,4,2) 310 PF=0 ! PLAYER FIRE NILL 315 PY=16 ! PLAYER Y POSITION 320 FOR L=1 TO 10::AX(L)=4+lev::NEXT L 321 FOR L=11 TO 20::AX(L)=6+lev::NEXT L 322 FOR L=21 TO 30::AX(L)=8+lev::NEXT L 323 FOR L=31 TO 40::AX(L)=10+lev::NEXT L 324 N=8::FOR L=1 TO 10::AY(L)=N::N=N+2::NEXT L 325 N=8::FOR L=11 TO 20::AY(L)=N::N=N+2::NEXT L 326 N=8::FOR L=21 TO 30::AY(L)=N::N=N+2::NEXT L 327 N=8::FOR L=31 TO 40::AY(L)=N::N=N+2::NEXT L 330 AM=0 ! ALIEN TO MOVE 335 SND=0 ! SOUND FOR BP(XX) ARRAY 340 DEAD=0 ! ALIENS DEAD NILL 345 T1=0 ! TICKER 350 AF=0 ! ALIEN FIRING 355 T5=0 360 BONUS=0 365 FOR L=1 TO 40::MC(L)=0::NEXT L ! ******************* ! * GAME LOGIC TREE * ! ******************* 1000 GOSUB 30100 ! GET GAME SCREEN 1005 GOSUB 30300 ! GET ALIENS 1010 GOSUB 8100 ! JOYSTICK INPUT 1025 GOSUB 8200 ! MOVE AN ALIEN 1030 GOSUB 8300 ! CHECK FOR PLAYER MISSILE 1035 gosub 8700 ! CAN ALIEN FIRE? 1037 GOSUB 8800 ! CHECK ALIEN FIRE 1038 GOSUB 9600 ! CHECK FOR GAME MODE 1039 GOSUB 9700 ! CHECK FOR BONUS UFO 1040 GOSUB 9800 ! IS BONUS ACTIVE? 1042 gosub 6500 ! is power-up active? if not randomly make it active 1045 GOSUB 30200 ! TWINKLE TWINKLE LITTLE STAR 1050 GOTO 1010 ! ************ ! * POWER UP * ! ************ ! RR VARIABLE CAN BE ALTERED TO DETERMINE HOW OFTEN POWER UP'S HAPPEN 6500 if pill>0 then 6510 6502 rr=int(8000*rnd)+1 :: if rr>7900 then 6504 else 6599 6504 ty=int(2*rnd)+1 :: on ty goto 6506,6508 6506 pill=1::rpy=int(25*rnd)+4::rpx=1::call sprite(#8,45,13,mapx(rpx),mapy(rpy))::goto 6599 6508 pill=2::rpy=int(25*rnd)+4::rpx=1::call sprite(#8,45,7,mapx(rpx),mapy(rpy))::goto 6599 6510 rpx=rpx+1 :: if rpx>23 then 6600 6512 call locate(#8,mapx(rpx),mapy(rpy)) 6514 call gchar(rpx,rpy,ch) 6516 if ch=104 then 6520 else if ch=105 then 6520 else if ch=106 then 6520 6518 goto 6599 6520 if pill=1 then 6521 else 6522 6521 gosub 9200::goto 6599 6522 gosub 9300::goto 6599 6599 return ! ********************** ! * POWER UP DISAPPEAR * ! ********************** 6600 if bonus=0 then 6605 else 6610 6605 call sound(-1,110,30)::call sound(-100,110,30,110,30,6000,30,-8,10) 6610 call delsprite(#8)::pill=0::goto 6599 ! ******************** ! * KEYBOARD INPUT * ! ******************** 8100 t5=t5+1::if t5>tmax then 8101 else 8125 8101 t5=0::CALL KEY(0,K,ST) 8105 IF K=KEYL THEN 8135 ELSE IF K=KEYR THEN 8145 8110 IF K=KEYF THEN 8150 8125 RETURN ! LEFT MOVE 8135 Z=PY-1::IF Z<1 THEN Z=1 8136 CALL LINK("DISPLY",23,PY," ")::PY=Z::CALL LINK("DISPLY",23,PY,"hij")::GOTO 8125 ! RIGHT MOVE 8145 Z=PY+1::IF Z>30 THEN Z=30 8146 CALL LINK("DISPLY",23,PY," ")::PY=Z::CALL LINK("DISPLY",23,PY,"hij")::GOTO 8125 ! FIRE MISSILE 8150 IF PF=1 THEN 8125 ELSE PF=1::FX=22::FY=PY+1::CALL SPRITE(#1,105,16,MAPX(FX),MAPY(FY)) 8152 shots=shots+1::gosub 8175::GOTO 8125 ! ************************ ! * PLAYER MISSILE SOUND * ! ************************ ! WON'T PLAY IF BONUS SAUCER IS PRESENT 8175 IF BONUS=0 THEN CALL SOUND(-1,110,30)::CALL SOUND(-500,110,30,110,30,30000,30,-4,4) 8176 RETURN ! ***************** ! * MOVE AN ALIEN * ! ***************** 8200 AM=AM+1 :: IF AM>40 THEN 8201 ELSE 8210 8201 AM=1::SND=SND+1::IF SND>4 THEN SND=1 8202 IF BONUS=0 THEN CALL SOUND(-250,110,30,110,30,BP(SND),30,-4,0) 8210 IF AA(AM)=0 THEN 8299 8211 XX=AX(AM) 8220 ZZ=AY(AM)::AY(AM)=AY(AM)+1 :: IF AY(AM)>32 THEN AY(AM)=1 8221 SW(AM)=SW(AM)+1::IF SW(AM)>2 THEN SW(AM)=1 8222 IF SW(AM)=1 THEN CH=112 ELSE IF SW(AM)=2 THEN CH=113 8225 MC(AM)=MC(AM)+1::IF MC(AM)>16 THEN 8230 ELSE 8250 8230 MC(AM)=0::AX(AM)=AX(AM)+1 8250 CALL LINK("DISPLY",XX,ZZ," ")::CALL LINK("DISPLY",AX(AM),AY(AM),CHR$(CH)) 8255 IF AX(AM)=23 THEN 8260 ELSE 8299 8260 CALL DELSPRITE(#1,#2,#3,#4)::GOTO 9000 8299 RETURN ! **************************** ! * CHECK FOR PLAYER MISSILE * ! **************************** 8300 IF PF=1 THEN 8305 ELSE 8399 8305 FX=FX-1::IF FX<1 THEN 8306 ELSE 8310 8306 CALL DELSPRITE(#1)::PF=0::GOTO 8399 8310 CALL LOCATE(#1,MAPX(FX),MAPY(FY))::CALL GCHAR(FX,FY,CH) 8315 IF CH=120 THEN 8400 ELSE IF CH=121 THEN 8400 ELSE IF CH=122 THEN 8400 8320 IF CH=112 THEN 8500 ELSE IF CH=113 THEN 8500 8330 CALL COINC(#1,#3,8,C)::IF C=-1 THEN 8340 ELSE 8399 8331 call coinc(#1,#4,8,c)::if c=-1 then 8340 else 8399 8340 CALL DELSPRITE(#1,#3,#4)::pf=0::SCORE=SCORE+int(10*rnd)+2::GOSUB 30400::hits=hits+1 8345 call sound(-1,110,30) 8346 FOR ZZ=330 TO 440::CALL SOUND(-100,ZZ,0)::NEXT ZZ 8350 BONUS=0 8399 RETURN ! ******************************** ! * PLAYER SHOOTS HIS OWN SHIELD * ! ******************************** 8400 CALL DELSPRITE(#1)::PF=0::CALL LINK("DISPLY",FX,FY," ") 8410 IF BONUS=0 THEN call sound(-1,110,30)::call sound(-250,110,30,110,30,1000,30,-8,0) 8420 GOTO 8399 ! ************************** ! * PLAYER SHOOTS AN ENEMY * ! ************************** 8500 CALL LINK("DISPLY",FX,FY," ")::CALL PATTERN(#1,114)::IF BONUS=0 THEN 8501 ELSE 8503 8501 CALL SOUND(-1,110,30)::CALL SOUND(4,800,0)::CALL SOUND(4,700,0) 8502 CALL SOUND(4,600,0)::CALL SOUND(4,500,0) 8503 SCORE=SCORE+2::hits=hits+1::GOSUB 30400 8510 FOR L=1 TO 40 8520 IF AX(L)=FX AND AY(L)=FY THEN AA(L)=0::GOTO 8540 8530 NEXT L::GOTO 8550 8540 CALL DELSPRITE(#1)::PF=0::DEAD=DEAD+1::AX(L)=0::AY(l)=0::IF DEAD>39 THEN 8600 8550 RETURN ! ******************* ! * ALL ALIENS DEAD * ! ******************* 8600 lev=lev+1::if lev>8 then 9100 8604 FOR L=1 TO 10::AX(L)=4+lev::NEXT L 8605 FOR L=11 TO 20::AX(L)=6+lev::NEXT L 8610 FOR L=21 TO 30::AX(L)=8+lev::NEXT L 8615 FOR L=31 TO 40::AX(L)=10+lev::NEXT L 8620 N=8::FOR L=1 TO 10::AY(L)=N::N=N+2::NEXT L 8625 N=8::FOR L=11 TO 20::AY(L)=N::N=N+2::NEXT L 8630 N=8::FOR L=21 TO 30::AY(L)=N::N=N+2::NEXT L 8635 N=8::FOR L=31 TO 40::AY(L)=N::N=N+2::NEXT L 8640 AM=0 ! ALIEN TO MOVE 8645 SND=0 ! SOUND FOR BP(XX) ARRAY 8650 DEAD=0 ! ALIENS DEAD NILL 8651 CALL HCHAR(23,1,32,32) 8655 for l=1 to 40::mc(l)=0::next l::gosub 30100::py=16::CALL LINK("DELAY",1500)::GOTO 1005 ! *************************** ! * ALIEN SHOOTS A MISSILE? * ! *************************** 8700 IF AF=0 THEN 8705 ELSE 8799 8705 RR=INT(40*RND)+1 :: IF AA(RR)=1 THEN 8710 ELSE 8799 8710 AF=1::AFX=AX(AM)+1::AFY=AY(AM)::TY=INT(2*RND)+1::ON TY GOTO 8712,8714 8712 MISSILE=115::GOTO 8720 8714 MISSILE=116 8720 CALL SPRITE(#2,MISSILE,16,MAPX(AFX),MAPY(AFY)) 8799 RETURN ! *********************** ! * CHECK ALIEN MISSILE * ! *********************** 8800 IF AF=1 THEN 8805 ELSE 8899 8805 t1=t1+1::if t1>1 then 8806 else 8820 8806 t1=0 8807 AFX=AFX+1::IF AFX>23 THEN 8810 ELSE 8820 8810 AF=0::CALL DELSPRITE(#2)::GOTO 8899 8820 CALL SPRITE(#2,MISSILE,16,MAPX(AFX),MAPY(AFY))::CALL GCHAR(AFX,AFY,CH) 8825 IF CH=120 THEN 8900 ELSE IF CH=121 THEN 8900 ELSE IF CH=122 THEN 8900 8830 IF CH=104 THEN 8950 ELSE IF CH=105 THEN 8950 ELSE IF CH=106 THEN 8950 8899 RETURN ! *************************** ! * ALIEN MISSILE VS SHIELD * ! *************************** 8900 CALL LINK("DISPLY",AFX,AFY," ")::CALL DELSPRITE(#2)::AF=0 8910 GOTO 8899 ! ******************************** ! * ALIEN MISSILE VS PLAYER BASE * ! ******************************** 8950 CALL LINK("DISPLY",23,PY,"lll")::CALL SOUND(-1,110,30)::CALL SOUND(1000,110,30,110,30,1200,30,-8,0) 8951 CALL DELSPRITE(#2,#3,#4)::AF=0::CALL LINK("DELAY",1000)::CALL LINK("DISPLY",23,PY," ")::LV=LV-1::PY=16 8952 bonus=0::IF LV<0 THEN 9000 8954 GOSUB 30400::AF=0::PY=16 8955 CALL LINK("DISPLY",23,8,"GET READY PLAYER") 8957 CALL LINK("DELAY",2000)::CALL LINK("DISPLY",23,8," ")::CALL LINK("DISPLY",23,PY,"hij") 8958 GOTO 8899 ! ************* ! * GAME OVER * ! ************* 9000 CALL LINK("DISPLY",13,13,"GAME OVER")::IF SCORE>TOP THEN 9001 ELSE 9004 9001 TOP=SCORE::FOR L=1 TO 4 9002 GOSUB 30400::FOR V=0 TO 30 STEP 2::CALL SOUND(32,1224,V)::NEXT V 9003 CALL LINK("DISPLY",24,1," ")::CALL LINK("DELAY",500)::NEXT L 9004 GOSUB 30400::CALL LINK("DELAY",1500) 9010 CALL CLEAR::CALL DELSPRITE(ALL) 9012 Z$="SHOTS FIRED "&STR$(SHOTS)::CALL LINK("DISPLY",6,8,Z$) 9016 Z$="SHOTS THAT HIT "&STR$(HITS)::CALL LINK("DISPLY",8,8,Z$) 9020 Z$="YOUR SCORE "&STR$(SCORE)&"0"::CALL LINK("DISPLY",10,8,Z$) 9021 CALL LINK("DISPLY",12,8,"SHOOTING ABILITY")::Q=SHOTS-HITS 9022 IF Q<11 THEN M$=SU$(1)::GOTO 9030 9023 IF Q>10 AND Q<20 THEN M$=SU$(2)::GOTO 9030 9024 IF Q>20 AND Q<30 THEN M$=SU$(3)::GOTO 9030 9025 IF Q>29 AND Q<40 THEN M$=SU$(4)::GOTO 9030 9026 IF Q>39 AND Q<60 THEN M$=SU$(5)::GOTO 9030 9027 IF Q>59 AND Q<80 THEN M$=SU$(6)::GOTO 9030 9028 IF Q>79 AND Q<100 THEN M$=SU$(7)::GOTO 9030 9029 IF Q>99 THEN M$=SU$(8) 9030 CALL LINK("DISPLY",14,8,M$) 9040 CALL LINK("DISPLY",24,6,"PRESS FIRE TO CONTINUE") 9045 CALL KEY(0,K,ST)::IF ST=0 THEN 9045 9046 IF K=KEYF THEN 210 ELSE 9045 ! ***************** ! * GAME COMPLETE * ! ***************** 9100 LV=LV+1 :: GOSUB 30400 :: GOTO 307 ! ****************************************** ! * CONFIRMATION SOUND FOR KEYBOARD ASSIGN * ! ****************************************** 9110 FOR ZZ=330 TO 440::CALL SOUND(-100,ZZ,1)::NEXT ZZ 9111 FOR ZZ=370 TO 494::CALL SOUND(-100,ZZ,1)::NEXT ZZ 9112 FOR ZZ=440 TO 554 STEP 2::CALL SOUND(-100,ZZ,1)::NEXT ZZ 9113 FOR ZZ=494 TO 594 STEP 2::CALL SOUND(-100,ZZ,1)::NEXT ZZ::K=0::RETURN ! **************************** ! * player eats a green pill * ! **************************** 9200 if bonus=0 then 9210 else 9230 9210 call sound(-1,110,30)::for zz=440 to 554::call sound(-1,zz,0)::next zz 9220 tmax=0::call delsprite(#8)::pill=0::CALL LINK("COLOR2",10,13,2) 9230 return ! ************************** ! * player eats a red pill * ! ************************** 9300 if bonus=0 then 9310 else 9330 9310 call sound(-1,110,30)::for zz=554 to 440 step-1::call sound(-1,zz,0)::next zz 9320 tmax=4::call delsprite(#8)::pill=0::CALL LINK("COLOR2",10,7,2) 9330 return ! ************************** ! * CHECK FOR GAME MODE * ! ************************** 9600 IF MODE=2 THEN 9610 ELSE 9699 9610 t6=t6+1::if t6>16 then 9620 else 9699 9620 t6=0::CALL LINK("WINDOW",19,1,21,32)::CALL LINK("SCRLLF",1) 9699 RETURN ! ************************** ! * CHECK FOR BONUS UFO * ! ************************** 9700 IF BONUS=1 THEN 9799 9705 RR=INT(4000*RND)+1 :: IF RR>3990 THEN 9710 ELSE 9799 9710 BONUS=1::CALL SPRITE(#3,40,16,16,1,0,20,#4,41,16,16,10,0,20) 9720 call sound(-2500,110,1,111,1,112,1) 9799 RETURN ! ********************** ! * IS BONUS ACTIVE? * ! ********************** 9800 IF BONUS=1 THEN 9820 ELSE 9899 9820 CALL POSITION(#4,B1,B2)::IF B2>248 THEN 9830 ELSE 9825 9825 call coinc(#1,#3,8,c)::if c=-1 then 9900 9826 call coinc(#1,#4,8,c)::if c=-1 then 9900 9827 goto 9899 9830 CALL DELSPRITE(#3,#4)::BONUS=0 9899 RETURN 9900 call position(#3,p1,p2)::call pattern(#3,114,#4,114)::call motion(#3,20,-8,#4,20,8) 9901 CALL DELSPRITE(#1)::pf=0::SCORE=SCORE+int(10*rnd)+2::GOSUB 30400 9902 call sound(-1,110,30)::hits=hits+1 9905 FOR ZZ=330 TO 440::CALL SOUND(-100,ZZ,0)::NEXT ZZ 9910 BONUS=0::call delsprite(#3,#4)::goto 9899 ! ****************************** ! * ALIEN "TYPE" REPOSITORY * ! ****************************** 10000 ON LEV GOTO 10100,10200,10300,10400,10500,10600,10700,10800 10100 CALL LINK("CHAR2",112,"42247EDBDBFFE7BDA5A5FFDBDBFF663C") 10110 CALL LINK("COLOR2",11,16,2)::GOTO 10900 10200 CALL LINK("CHAR2",112,"815A3C7EDBFF2442005ABD7EDBFF2418") 10210 CALL LINK("COLOR2",11,14,2)::GOTO 10900 10300 CALL LINK("CHAR2",112,"815A3CFFDB7E2442005ABDFFDB7E2418") 10310 CALL LINK("COLOR2",11,13,2)::GOTO 10900 10400 CALL LINK("CHAR2",112,"3C5EBFBFFFFD7A3C00182C5E5E341800") 10410 CALL LINK("COLOR2",11,10,2)::GOTO 10900 10500 CALL LINK("CHAR2",112,"00C3C3FFFFC3C3007E7E181818187E7E") 10510 CALL LINK("COLOR2",11,6,2)::GOTO 10900 10600 CALL LINK("CHAR2",112,"663C181818183C66C37E181818187EC3") 10610 CALL LINK("COLOR2",11,4,2)::GOTO 10900 10700 CALL LINK("CHAR2",112,"C3E77E3C3C7EE7C300003C3C3C3C0000") 10710 CALL LINK("COLOR2",11,3,2)::GOTO 10900 10800 CALL LINK("CHAR2",112,"1898FF3D3C3C64061819FFBC3C3C2660") 10810 CALL LINK("CHAR2",11,5,2)::GOTO 10900 10900 RETURN ! ************************* ! * SET UP GAME SCREEN * ! ************************* 30100 CALL CLEAR::CALL DELSPRITE(ALL)::IF MODE=3 THEN 30135 30105 CALL LINK("DISPLY",19,6,"xzzy")::CALL LINK("DISPLY",20,6,"zzzz")::CALL LINK("DISPLY",21,6,"zzzz") 30110 CALL LINK("DISPLY",19,15,"xzzy")::CALL LINK("DISPLY",20,15,"zzzz")::CALL LINK("DISPLY",21,15,"zzzz") 30115 CALL LINK("DISPLY",19,24,"xzzy")::CALL LINK("DISPLY",20,24,"zzzz")::CALL LINK("DISPLY",21,24,"zzzz") 30135 CALL LINK("DISPLY",23,16,"hij")::GOSUB 30400::GOSUB 10000 30140 N=10::for l=1 to 18 30145 sy=int(32*rnd)+1 :: CALL SPRITE(#N,43,16,MAPX(L),MAPY(SY)) 30150 N=N+1 :: NEXT L 30155 RETURN ! ******************** ! * TWINKLE A STAR * ! ******************* 30200 SN=SN+1 :: IF SN>28 THEN SN=10 30205 ZZ=INT(4*RND)+1 :: ON ZZ GOTO 30210,30215,30220,30225 30210 CALL COLOR(#SN,2) :: GOTO 30230 30215 CALL COLOR(#SN,16) :: GOTO 30230 30220 CALL COLOR(#SN,5) :: GOTO 30230 30225 CALL COLOR(#SN,10) 30230 RETURN ! ****************************** ! * WARP ALIENS ONTO SCREEN* ! ****************************** 30300 FOR L=1 TO 40 :: AA(L)=1 :: GOSUB 8100::GOSUB 8300 30322 CALL LINK("DISPLY",AX(L),AY(L),"p") 30330 NEXT L 30335 RETURN ! ************************************* ! * SHOW THE PLAYER SCORE / LIVES * ! ************************************* 30400 Z$=STR$(SCORE)&"0"::IF SCORE=0 THEN Z$="0" 30410 CALL LINK("DISPLY",24,1,Z$)::Z$=STR$(LV)::CALL LINK("DISPLY",24,16,Z$) 30420 RETURN