! 36 PLAYER SHIP NORMAL ! 40 PLAYER SHIP DOWN ! 44 PLAYER SHIP UP ! 60 PLAYER MISSILE ! 96 FLYING SAUCER ! R1 CHANGE PATTERN OF FLYING SAUCER ! D1 BACKGROUND SCROLL DELAY TIMER ! D2 BACKGROUND SCROLL MAXIMUM FOR D1 TO INCREMENT TO ! ** ALTERS FROM 4 (DEFAULT) TO 2 WHEN ENEMIES ARE ON SCREEN ! CO COUNTER FOR STAR ANIMATIONS ! ********************* ! * INITIALIZE SCREEN * ! ********************* 100 CALL LINK("SCRN2")::CALL CLEAR::CALL SCREEN(2)::CALL MAGNIFY(3)::RANDOMIZE::CALL LINK("CHSETL") 105 CALL LINK("WINDOW",18,1,19,32) 106 DIM S(30),SX(30),SY(30) ! *************************** ! * PLAYER SHIP DEFINITIONS * ! *************************** 110 CALL CHAR(36,"0000C0F38430F83EB38F5F0E00000000000000C03048003FEE74A00000000000") 120 CALL CHAR(40,"000F1CC3EC18C8F84E134F5F1F0E0000000020CE3748040C3FEE74A080000000") 130 CALL CHAR(44,"0E1F1F9FCF1FBFBF1FBF0F120F0000000080A074FECFF0FCFCF3CC2000000000") 140 CALL CHAR(60,"00000000000000570000000000000000000000000000E0F0E000000000000000") ! ****************************************** ! * SCROLLING BACKGROUND IMAGE DEFINITIONS * ! ****************************************** ! COLOUR 15,4,1,16,4,13,28,13,2 150 a$="02070F0F3F7FFFFF000081CBEFF7F7FB02071FBFBFDFDFEF0000C0E0E0F8FCFE" 155 CALL LINK("CHAR2",144,A$) 160 A$="00040A11A14222243049860402020101814224281010080410A84484020201000000000000000000" 165 CALL LINK("CHAR2",152,A$,248,"FFFFFFFF00000000") 166 A$="00000001000000000000000200000000000000000000000000000008000000000000001000000000000000200000000000000040000000000000008000000000" 167 CALL LINK("CHAR2",160,A$) ! ********************** ! * COLOUR DEFINITIONS * ! ********************** 175 CALL LINK("COLOR2",2,16,2,3,16,2,4,16,2,5,16,2,17,16,2) 180 CALL LINK("COLOR2",6,16,2,7,16,2,8,16,2,15,4,2,16,2,4) ! ********************* ! * ENEMY SPEED ARRAY * ! ********************* 200 DIM ES(8) ! **************************** ! * ENEMY ALIVE STATUS ARRAY * ! **************************** 210 DIM A(8) ! ************** ! * TITLE PAGE * ! ************** 500 CALL CLEAR :: CALL DELSPRITE(ALL) ! *********************** ! * GET GAME BACKGROUND * ! *********************** 600 GOSUB 32100 605 STA=0::PF=0 ! ************************* ! * INCREMENT STAGE "STA" * ! ************************* 700 STA=STA+1 :: IF STA>8 THEN STA=1 ! ***************** ! * START STAGE 1 * ! ***************** 1000 CALL SPRITE(#1,36,16,96,32)::DLY=1::DLT=0::D1=0::D2=4 ! **************** ! * STAGE 1 LOOP * ! **************** 1010 GOSUB 32300 ! DELAY? 1020 GOSUB 8100 ! JOYSTICK 1030 GOSUB 8200 ! ANIMATE STARS 1040 GOSUB 8300 ! SCROLL GROUND 1045 GOSUB 8200 ! ANIMATE STARS 1050 GOSUB 8400 ! ENEMY ATTRIBUTES 1060 GOTO 1010 ! ******************************** ! * JOYSTICK CONTROL PLAYER SHIP * ! ******************************** 8100 CALL JOYST(1,JY,JX)::CALL MOTION(#1,-JX*4,JY*3)::CALL KEY(1,K,ST)::GOSUB 8120 8101 IF K=18 THEN 8102 ELSE 8105 8102 IF PF=1 THEN 8105 ELSE CALL POSITION(#1,PP1,PP2)::CALL SPRITE(#2,60,12,PP1,PP2,0,40)::PF=1 8105 IF JX=4 THEN CALL PATTERN(#1,44) ELSE IF JX=-4 THEN CALL PATTERN(#1,40) ELSE CALL PATTERN(#1,36) 8110 RETURN 8120 CALL POSITION(#1,P1,P2,#2,P3,P4)::IF PF=1 THEN 8121 ELSE 8122 8121 IF P4>240 THEN CALL DELSPRITE(#2)::PF=0 8122 IF P1<16 THEN CALL LOCATE(#1,24,P2) ELSE IF P1>128 THEN 32200 8123 IF P2<9 THEN CALL LOCATE(#1,P1,16) ELSE IF P2>160 THEN CALL LOCATE(#1,P1,152) 8124 RETURN ! ******************* ! * STARS ANIMATION * ! ******************* 8200 S(CO)=S(CO)+1 8205 IF S(CO)>167 THEN 8210 ELSE 8220 8210 S(CO)=160::ZZ=SY(CO)::SY(CO)=SY(CO)-1::IF SY(CO)<1 THEN SY(CO)=32 8215 CALL LINK("DISPLY",SX(CO),ZZ," ")::CALL LINK("DISPLY",SX(CO),SY(CO),CHR$(S(CO)))::GOTO 8230 8220 CO=CO+1 :: IF CO>15 THEN CO=1 8225 CALL LINK("DISPLY",SX(CO),SY(CO),CHR$(S(CO))) 8230 return ! ***************** ! * SCROLL GROUND * ! ***************** 8300 D1=D1+1 :: IF D1>D2 THEN 8310 ELSE 8399 8310 D1=0::CALL LINK("SCPXLF",144,4,1,152,4,2) 8399 RETURN ! ******************** ! * ENEMY ATTRIBUTES * ! ******************** 8400 IF DLY=1 THEN 8499 8405 ON STA GOSUB 25100 8499 RETURN ! ********************* ! * GET FLYING SAUCER * ! ********************* 20100 CALL CHAR(96,"00000003041F38FF7C3F000000000000000000C020F804FF02FC000000000000") 20105 R1=1::ES(1)=14::ES(2)=16::ES(3)=18::ES(4)=20 20110 CALL SPRITE(#11,96,6,32,255,0,-ES(1)) 20115 CALL SPRITE(#12,96,11,64,1,0,ES(2)) 20120 CALL SPRITE(#13,96,14,96,255,0,-ES(3)) 20125 CALL SPRITE(#14,96,10,128,1,0,ES(4)) 20130 A(1)=1::A(2)=1::A(3)=1::A(4)=1 20135 RETURN ! ******************************** ! * CHANGE FLYING SAUCER PATTERN * ! ******************************** 25100 R1=R1+1 25105 IF R1>8 THEN R1=1 25110 ON R1 GOTO 25111,25112,25113,25114,25115,25116,25117,25118 25111 A$="00000003041F38FF7C3F000000000000000000C020F804FF02FC000000000000"::GOTO 25120 25112 A$="00000003061F2EFF4F3F000000000000000000C020F804FF02FC000000000000"::GOTO 25120 25113 A$="00000003051F27FF473F000000000000000000C020F804FF82FC000000000000"::GOTO 25120 25114 A$="00000003041F21FF433F000000000000000000C0A0F884FFC2FC000000000000"::GOTO 25120 25115 A$="00000003041F20FF413F000000000000000000C060F8C4FFE2FC000000000000"::GOTO 25120 25116 A$="00000003041F20FF403F000000000000000000C020F864FF72FC000000000000"::GOTO 25120 25117 A$="00000003041F20FF403F000000000000000000C020F834FF1EFC000000000000"::GOTO 25120 25118 A$="00000003041F20FF403F000000000000000000C020F80CFF06FC000000000000" 25120 CALL CHAR(96,A$)::RETURN ! ************************* ! * DRAW BACKGROUND IMAGE * ! ************************* 32100 CALL CLEAR 32105 CALL DELSPRITE(ALL) 32110 A$=CHR$(144)&CHR$(145)&CHR$(146)&CHR$(147) 32115 A$=RPT$(A$,8) 32120 CALL LINK("DISPLY",18,1,A$) 32125 A$=CHR$(152)&CHR$(153)&CHR$(154)&CHR$(155) 32130 A$=RPT$(A$,8) 32135 CALL LINK("DISPLY",19,1,A$) 32140 CALL HCHAR(20,1,156,32) 32145 CALL LINK("DISPLY",22,1,"SCORE") 32150 CALL LINK("DISPLY",22,21,"TOP") 32155 N=160::CO=1::FOR Q=2 TO 16::Z=INT(32*RND)+1::SX(CO)=Q::SY(CO)=Z::S(Q)=N 32160 CALL LINK("DISPLY",SX(CO),SY(CO),CHR$(N))::N=N+1::IF N>167 THEN N=160 32165 CO=CO+1 32170 NEXT Q 32175 CO=1::RETURN ! ********************* ! * CRASH WITH GROUND * ! ********************* 32200 STOP ! ********* ! * DELAY * ! ********* 32300 IF DLY=1 THEN 32305 ELSE 32399 32305 DLT=DLT+1 :: IF DLT>200 THEN 32310 ELSE 32399 32310 DLT=0::DLY=0::ON STA GOTO 32400,32410,32420,32430,32440,32450,32460,32470 32399 RETURN ! ********************* ! * INTRODUCE SAUCERS * ! ********************* 32400 D2=2::GOSUB 20100::GOTO 32499 ! * 32410 STOP 32420 STOP 32430 STOP 32440 STOP 32450 STOP 32460 STOP 32470 STOP 32499 RETURN