REM TO DO: GAMESPEED=0 REM SET SPEED AS 0,1,2,OR 3 ONLY DIM GLOBAL ASTEP(3,3),ADIR(3,3),PX(3),PY(3),XC(3),YC(3),AR(3),NEG(3),MI(3),AI(3),ASTOP(3),YLINE(3) GLOBAL SHIPS,SCORE,LEVEL REM WAS8BIT RANDOMIZE TIMER GAMEPAD 1 REM WAS8BIT FONT 32 AA=PI/2 PIA=PI/128 REM 255=1/1 REM 127=1/2 REM 63=1/4 REM 31=1/8 REPLAY: CLS BG 1 FOR I=1 TO 100 FLIP RND(1),RND(1) CELL RND(31),RND(31),9+RND(2) NEXT I ASLOW=0 ISPEED=INT(GAMESPEED) ADD ISPEED,0,1 TO 3 TRACE ISPEED SPEED=3 ILOOP=3 SPRITE OFF ISPR=1 BURST=0 WANI=0 IANI=0 WBUL=0 IBUL=0 FOR IS=1 TO 3 CALL NEWALIEN(IS) NEXT IS YSCROLL=0 XSHIP=9*8 SPRITE 0,XSHIP,11*9,1 SPRITE 0 SIZE 1 SHIPS=9-3*GAMESPEED LEVEL=1 SCORE=0 CALL STATS SPRITE 8,-16,56,16 SPRITE 4,0,-16,33 DO ADD WBUL,1,0 TO 8 IF WBUL=0 THEN ADD IBUL,1,0 TO 1 IF BUTTON(0,0) AND SPRITE.Y(4)=-16 THEN PLAY 0,57,6 SOUND 4 SPRITE 4,XSHIP+5,90, END IF IF SPRITE.Y(4)>-16 AND RND(2)=0 THEN SPRITE 4,,SPRITE.Y(4)-1,33+IBUL IF SPRITE HIT(4,1 TO 3) THEN SPRITE 4,,-16, SPRITE HIT,,,75 END IF IF LEFT(0) THEN ADD XSHIP,-1,0 TO 143 IF RIGHT(0) THEN ADD XSHIP,1,0 TO 143 IF LEFT(0) OR RIGHT(0) THEN BURST=100 PLAY 0,25,5 SOUND 0 END IF IF BURST>0 THEN DEC BURST ADD WANI,1,0 TO 8 IF WANI=0 THEN ADD IANI,2,64 TO 66 SPRITE 0,,,IANI ELSE SPRITE 0,,,1 END IF SPRITE 0,XSHIP,, FOR IS=1 TO 3 IF AI(IS)=999 THEN AI(IS)=0 ADD MI(IS),1,1 TO 6 IF MI(IS)=1 THEN XC(IS)=120 END IF IF MI(IS)<4 THEN I=MI(IS) ELSE I=MI(IS)-3 ASTOP(IS)=ASTEP(I,IS)*32 IF ADIR(I,IS)=1 THEN IF MI(IS)<4 THEN GOSUB DPOINT IF AI(IS)=999 THEN YC(IS)=PY(IS) XC(IS)=PX(IS)-AR(IS) END IF ELSE GOSUB RDPOINT2 IF AI(IS)=999 THEN YC(IS)=PY(IS) XC(IS)=PX(IS)+AR(IS) END IF END IF ELSE IF MI(IS)<4 THEN GOSUB RDPOINT IF AI(IS)=999 THEN YC(IS)=PY(IS) XC(IS)=PX(IS)-AR(IS) END IF ELSE GOSUB DPOINT2 IF AI(IS)=999 THEN YC(IS)=PY(IS) XC(IS)=PX(IS)+AR(IS) END IF END IF END IF IF MI(IS)=3 AND AI(IS)=999 THEN XC(IS)=XC(IS)+(2*AR(IS)) ADD YLINE(IS),0.01*(SPEED*1.5+1) IF YLINE(IS)+PY(IS)>160 THEN CALL NEWALIEN(IS) NEXT IS ADD ISPEED,1,0 TO SPEED IF ISPEED=0 THEN WAIT VBL ADD YSCROLL,(1+SPEED)/(10-SPEED*2),0 TO (32*8) SCROLL 1,0,-YSCROLL END IF IF SPRITE.X(8)<170 AND RND(3)=1 THEN SPRITE 8,SPRITE.X(8)+1,, LOOP SUB STATS BG 0 PAL 0 FLIP 0,0 TEXT 0,15,"+++++++++ :99 ;0000" FOR X=1 TO SHIPS CELL X-1,15,27 NEXT X NUMBER 12,15,LEVEL,2 END SUB DPOINT: INC AI(IS) PX(IS)=XC(IS)+AR(IS)*COS(AI(IS)*PIA) PY(IS)=YC(IS)+AR(IS)*SIN(AI(IS)*PIA) GOSUB DRAWIT IF AI(IS)>=ASTOP(IS) THEN AI(IS)=999 RETURN RDPOINT: DEC AI(IS) PX(IS)=XC(IS)+AR(IS)*COS(AI(IS)*PIA) PY(IS)=YC(IS)+AR(IS)*SIN(AI(IS)*PIA) GOSUB DRAWIT IF AI(IS)<=-ASTOP(IS) THEN AI(IS)=999 RETURN DPOINT2: INC AI(IS) PX(IS)=XC(IS)-AR(IS)*COS(AI(IS)*PIA) PY(IS)=YC(IS)+AR(IS)*SIN(AI(IS)*PIA) GOSUB DRAWIT IF AI(IS)>=ASTOP(IS) THEN AI(IS)=999 RETURN RDPOINT2: DEC AI(IS) PX(IS)=XC(IS)-AR(IS)*COS(AI(IS)*PIA) PY(IS)=YC(IS)+AR(IS)*SIN(AI(IS)*PIA) GOSUB DRAWIT IF AI(IS)<=-ASTOP(IS) THEN AI(IS)=999 RETURN DRAWIT: IF NEG(IS)=0 THEN SPRITE IS,PX(IS),PY(IS)+YLINE(IS), ELSE IF NEG(IS)=1 THEN SPRITE IS,140-PX(IS),PY(IS)+YLINE(IS), END IF RETURN SUB NEWALIEN(IS) IF IS=1 THEN PLAY 1,37,30 SOUND 1 IF IS=2 THEN PLAY 2,39,30 SOUND 2 IF IS=3 THEN PLAY 3,42,30 SOUND 3 IF IS=3 THEN SPRITE 8,-32,8+RND(48), INC LEVEL CALL STATS END IF II=1 FOR I=1 TO 3 ASTEP(I,IS)=INT(RND*7)+1 ADIR(I,IS)=II II=-II NEXT I IPAL=1+RND(2) SPRITE IS,,,1+IPAL*2 SPRITE IS SIZE 1 PAL IPAL YLINE(IS)=0 AR(IS)=5+RND*15 AR(IS)=15 NEG(IS)=RND(1) MI(IS)=0 AI(IS)=0 XC(IS)=120 YC(IS)=0-IS*45 PX(IS)=60 PY(IS)=0 AI(IS)=999 END SUB #1:MAIN PALETTES 003F2A1500383020002E0C08002B2227 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 00000000000000000000000000000101 0000000000008080000000000080C0C0 0000030E19205060000010372F1F3B31 0000C07098040A06000008ECF4F8DC8C 202870393B4307090000010F071F1719 04140E9CDCC2E090000080F0E0F8E898 0000387F7F7F2D05080D071B3D2F1D3D 00001CFEFEFEB4A010B0E0D8BCF4B8BC 0008142A1408000000081C361C080000 00000000040A040000000000040E0400 00000000000002000000000000000200 00000000000837480000000000083F77 00000000008C728D00000000008CFE73 0000000000225DA20000000000227FDD 00000000002CD22D00000000002CFED3 00000424742400003C7EFBDB8BDB7E3C 0000000001060810011113171F1E3830 80800000C0300804C0C4E4F4FC3C0E06 605020190E030000313B1F2F37100000 060A049870C000008CDCF8F4EC080000 0907433B3970282019171F070F010000 90E0C2DC9C0E140498E8F8E0F0800000 052F7F7F7F3800003D1F2F3D1B070D08 A0F4FEFEFE1C0000BCF8F4BCD8E0B010 00000000000001010000000000010000 000000000000C0C00000000000C08080 0000000000000000101092BAFEC68200 A25D220000000000DD7F220000000000 2DD22C0000000000D3FE2C0000000000 4837080000000000773F080000000000 8D728C000000000073FE8C0000000000 00000000000000000000000000000000 002050A8A8A85020002070D8D8D87020 00040A1515150A0400040E1B1B1B0E04 040A15152A2A1408040E1B1B36361C08 2050A8A8545428102070D8D86C6C3810 142A552A552A1400143E6B366B3E1400 08142A552A140800081C366B361C0800 142A552A55220000143E6B5577220000 22552A552A1400002277556B3E140000 0101020401060810001011131F1E3830 C0C02010C83008048084C4ECF43C0E06 101092BAFEC68200101092BAFEC68200 0000000000314EB10000000000317FCE 000000000010EC12000000000010FCEE 0000000000344BB40000000000347FCB 000000000044BA45000000000044FEBB 3C7EFFFFFFFF7E3C3C4299918999423C 183C7C3C3C7EFF7E182444242466817E 3C7EFF7E3C7EFF7E3C429972244E817E 3C7EFF7E6FFF7E3C3C4299726999423C 66FFFFFF7F0F0F066699998179090906 7EFFFEFE7F7FFE7C7E819E827979827C 1C3E7CFEFFFF7E3C1C224C829999423C 7EFF7F1E3C7878307E81791224484830 3C7EFF7EFFFF7E3C3C4299429999423C 3C7EFF7F7FFF7E3C3C4299417999423C 0080C0CADFFFFEE40080404A55751AE4 0060F0E6EFFEEFC600609066A9D629C6 B44B340000000000CB7F340000000000 45BA440000000000BBFE440000000000 B14E310000000000CE7F310000000000 12EC100000000000EEFC100000000000 00000000000000000000000000000101 0000000000008080000000000080C0C0 00000000000000000000000000000101 0000000000008080000000000080C0C0 00402400400210020050000A40200402 001204400004A0000012200208408800 00140000520002000004080010240200 00100012000250000000201004224000 00402400400210020050000A40200402 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000001060912011113171F1E3830 80800000C0B04884C0C4E4F4FC3C0E06 0000000001070810011113171F1E3830 80800000C070A854C0C4E4F4FC3C0E06 00052000022048000011021040044800 40084002002402004020040250000A00 000A4000480008000002442008040000 0040004A000028000040240800102000 00052000022048000011021040044800 #15:MAIN SOUND 3800068F00000F00180084CC00AA0000 180084CC00AB0000180084CC00AC0000 2500F05600FEE0000500F04E00FEE000 0500F04E00FEE0000500F04E00FEE000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000