global shipSpr, leben, shildTime, totWait -- Zeit bis Schiff wieder verwundbar global shotSpr, shotSpeed, frequenz, shotPower global pMoveAmound global blockKey -- Tastatur wird gesperrt, Computer steuert das Schiff global JumpLevel, ActLevel, LevelCompleted -- ist der Level geschafft ? global points, Modus global Initialisiere -- stellt die Variablen ein global Check -- Variabel die Einmal PowerStufenCheck aufruft bei Start des Levels (scheiß blöder) global transVar, transZeit, transLife, powerStufe -- kommt der Transporter? , Lebenspunkte global BossTimer, BossRichtung, BossTimeUp, Ziel1Life, Ziel2Life, Ziel3Life -- Zeit bis Endgegner erscheint, wie er sich bewegt global BossShotWait, BossTot, BossWait -- Zeitinterval mit der der Endgegner feuert global exploX, exploY, exploWert -- Gegner explodiert global WaitInitRand, WaitInit, WaitCount, WaitRandom -- Zeit bis neuer Gegner kommt global gegSpeed, gegShotSp, gegLife, gegLifeHP global shotWait -- Zeitinterval bis nächster Schuss kommt global tarX global tarY global schX global schY global vecX global vecY global l global movX, movY -- ------------------------------------------------------------------------------- on InitLevel -- Hintergrund positionieren -- Ebene 1 - Unten sprite(1).locH=335 sprite(1).locV=0 sprite(2).locH=335 sprite(2).locV=-660 -- Ebene 1 -- Oben sprite(3).locH=335 sprite(3).locV=0 sprite(4).locH=335 sprite(4).locV=-660 Check=true blockKey=False LevelCompleted=false sprite(100).locV=-50 shildTime=0 totWait=0 sprite(shipSpr).locH=330 sprite(shipSpr).locV=270 sprite(5).blend=0 -- Kollisionobject unsichtbar machen frequenz=false -- ist immer noch Space gedrueckt ? wegen Schussfrequenz WaitCount=0 WaitRandom=0 BossTimer=0 BossRichtung=0 BossTot=false BossWait=0 -- Variabel die zählt wenn Endgegner mal stehen bleiben soll member("Punkte").color=rgb(0,255,198) -- Farbe der Punktestanddinger member("Leben").color=rgb(0,255,198) Anzeige gegLife = list(1,2,3,4,5,6) -- Leben der Gegner movX = list(1,2,3,4) -- Wenn Gegner schießt wird die Bewegungsrichtung gespeichert movY = list(1,2,3,4) repeat with i=1 to 4 movX[i]=-100 movY[i]=-100 end repeat exploX = list(1,2,3,4,5,6) -- wo ist die Explosion exploY = list(1,2,3,4,5,6) exploWert= list(1,2,3,4,5,6) repeat with i=1 to 6 exploX[i]=-100 exploY[i]=-100 exploWert[i]=0 gegLife[i]=0 end repeat transVar = 0 -- Transporter Variable sprite(15).visible=false sprite(16).visible=false transLife = 3 -- wieviele Schuesse er aushält -- Werte für die Level zum Einstellen if ActLevel = 1 then JumpLevel=60 -- Frame wo nächster Level anfängt transZeit=100 -- Zeit bis 1. Transporter kommt gegSpeed=3 -- Geschwindigkeit der Gegner gegShotSp=7 -- Geschwindigkeit der Gegnerschüsse shotWait = 200 -- je niedriger desto schneller schießen die Gegner BossTimeUp=3000 -- jetzt kommt der Endgegner Ziel1Life=10 -- Boppel an Endgegner Ziel2Life=15 Ziel3Life=10 BossShotWait= 40 -- Wie schnell schießt der Boss WaitInit=15 -- Interval in dem Gegner erscheinen, je kleiner desto schneller WaitInitRand=40 -- Zeit für Random, je kleiner, desto gleichmässiger erscheinen Gegner gegLifeHP = 1 -- Hitpoints der Gegner end if if ActLevel = 2 then JumpLevel=90 -- Frame wo nächster Level anfängt transZeit=100 -- Zeit bis 1. Transporter kommt gegSpeed=5 -- Geschwindigkeit der Gegner gegShotSp=8 -- Geschwindigkeit der Gegnerschüsse shotWait = 100 -- je niedriger desto schneller schießen die Gegner BossTimeUp=3000 -- jetzt kommt der Endgegner Ziel1Life=20 -- Boppel an Endgegner Ziel2Life=30 Ziel3Life=20 BossShotWait= 30 -- Wie schnell schießt der Boss WaitInit=10 WaitInitRand=10 gegLifeHP = 2 -- Hitpoints der Gegner end if if ActLevel = 3 then JumpLevel=120 -- Frame wo nächster Level anfängt transZeit=100 -- Zeit bis 1. Transporter kommt gegSpeed=6 -- Geschwindigkeit der Gegner gegShotSp=8 -- Geschwindigkeit der Gegnerschüsse shotWait = 80 -- je niedriger desto schneller schießen die Gegner BossTimeUp=3000 -- jetzt kommt der Endgegner Ziel1Life=25 -- Boppel an Endgegner Ziel2Life=30 Ziel3Life=25 BossShotWait= 20 -- Wie schnell schießt der Boss WaitInit=10 WaitInitRand=10 gegLifeHP = 3 -- Hitpoints der Gegner end if if ActLevel = 4 then JumpLevel=195 -- Frame wo nächster Level anfängt transZeit=100 -- Zeit bis 1. Transporter kommt gegSpeed=5 -- Geschwindigkeit der Gegner gegShotSp=10 -- Geschwindigkeit der Gegnerschüsse shotWait = 150 -- je niedriger desto schneller schießen die Gegner BossTimeUp=3000 -- jetzt kommt der Endgegner Ziel1Life=30 -- Boppel an Endgegner Ziel2Life=40 Ziel3Life=30 BossShotWait= 10 -- Wie schnell schießt der Boss WaitInit=10 WaitInitRand=10 gegLifeHP = 4 -- Hitpoints der Gegner end if repeat with i=1 to 9 -- alle Schuesse unsichtbar sprite(19+i).visibility=false end repeat repeat with i=1 to 6 -- alle Gegner unsichtbar sprite(29+i).visibility=false end repeat end -- ------------------------------------------------------------------------------- on StartMovie Modus=1 -- Modus 1, Titelbild, Modus 2, Spiel ActLevel = 1 shipSpr = 29 -- Raumschiffnummer shotSpr = 20 -- Schusssprite shotSpeed=10 shotPower=1 powerStufe=0 -- wegen Schuss und Speed und so sprite(113).visible=false -- PowerKnoeppe sprite(114).visible=false sprite(115).visible=false points=0 leben=3 InitLevel end -- ------------------------------------------------------------------------------- on Anzeige -- aktualisiert den Highscore repeat with i=1 to 10 member("Punkte").char[i]="0" if i=10-length(string(points)) then member("Punkte").char[i]=chars(string(points),1,length(string(points))) exit repeat end if end repeat -- member("Punkte").text = string(points) member("Leben").text = string(leben) end -- ------------------------------------------------------------------------------- on Schussprog repeat with i=1 to 9 if sprite(19+i).visibility = true then sprite(19+i).locV = sprite(19+i).locV - shotSpeed if sprite(19+i).locV < 0 then sprite(19+i).visibility=false sprite(19+i).locV = 800 end if end repeat end -- ------------------------------------------------------------------------------- on GegnerschussFeuer(o) tarX=sprite(shipSpr).locH tarY=sprite(shipSpr).locV schX=sprite(o).locH schY=sprite(o).locV vecX=tarX-schX vecY=tarY-schY l = sqrt(vecX*vecX+vecY*vecY) repeat with g=1 to 4 if movX[g]=-100 then movX[g]=(vecX)*gegShotSp/l movY[g]=(vecY)*gegShotSp/l sprite(39+g).locV=sprite(o).locV sprite(39+g).locH=sprite(o).locH exit repeat end if end repeat end -- ------------------------------------------------------------------------------- on GegnerSchussBewegen repeat with i=1 to 4 if movX[i]<>-100 then sprite(39+i).locH = sprite(39+i).locH + movX[i] sprite(39+i).locV = sprite(39+i).locV + movY[i] end if if sprite(39+i).locV > 400 then movX[i]=-100 movY[i]=-100 end if if sprite(39+i).locV < -90 then movX[i]=-100 movY[i]=-100 end if if sprite(39+i).locH > 510 then movX[i]=-100 movY[i]=-100 end if if sprite(39+i).locH < 160 then movX[i]=-100 movY[i]=-100 end if -- Spieler ist getroffen worden if shildTime=0 and intersect (sprite(39+i).rect, sprite(5).rect) <> rect(0,0,0,0) then explosion (shipSpr) leben=leben-1 powerStufe=powerStufe-1 PowerStufenCheck Anzeige movX[i]=-100 movY[i]=-100 sprite(39+i).locV=500 SpielerPlatt end if end repeat end -- ------------------------------------------------------------------------------- on explosion num repeat with o=1 to 6 if exploX[o]= -100 then exploX[o]=sprite(num).locH exploY[o]=sprite(num).locV exit repeat end if end repeat end -- ------------------------------------------------------------------------------- on ExplosionWeiter repeat with i=1 to 6 if exploX[i]<>-100 then if exploWert[i]=1 then sprite(49+i).visibility=true sprite(49+i).member="Explo0"&exploWert[i] sprite(49+i).locH=integer(exploX[i]) sprite(49+i).locV=integer(exploY[i]) exploWert[i]=exploWert[i]+1 if exploWert[i]>6 then exploX[i]=-100 exploWert[i]=1 sprite(49+i).visibility=false end if end if end repeat end -- ------------------------------------------------------------------------------- on Gegnerabfrage repeat with i=1 to 6 -- Gegner bewegen sich if sprite(29+i).visibility=true then sprite(29+i).locV = sprite(29+i).locV + gegSpeed -- Das nicht jeder Schuss sofort kommt if (5+random(shotWait))=6 and sprite(29+i).locV<100 then GegnerSchussFeuer(29+i) -- Spieler ist gerammt worden if shildTime=0 and intersect (sprite(29+i).rect, sprite(5).rect) <> rect(0,0,0,0) then leben=leben-1 powerStufe=powerStufe-1 PowerStufenCheck Anzeige explosion (shipSpr) sprite(29+i).visibility=false sprite(29+i).locV=500 SpielerPlatt end if repeat with g=1 to 9 -- Gegner ist getroffen if intersect (sprite(29+i).rect, sprite(19+g).rect) <> rect(0,0,0,0) then gegLife[i]=gegLife[i]-shotPower sprite(19+g).visibility=false sprite(19+g).locV=500 if gegLife[i]<=0 then explosion (29+i) sprite(29+i).visibility=false sprite(29+i).locV=500 points=points+100 Anzeige end if end if end repeat end if if sprite(29+i).locV > 360 then sprite(29+i).visibility=false end repeat WaitCount = WaitCount + 1 if WaitCount>Waitrandom and BossTimer205 then sprite(shipSpr).locH = sprite(shipSpr).locH - pMoveAmound end if -- Rechts if keypressed (124) and sprite(shipSpr).locH<470 then sprite(shipSpr).locH = sprite(shipSpr).locH + pMoveAmound end if -- Runter if keypressed (126) and sprite(shipSpr).locV>30 then sprite(shipSpr).locV = sprite(shipSpr).locV - pMoveAmound end if -- Hoch if keypressed (125) and sprite(shipSpr).locV<300 then sprite(shipSpr).locV = sprite(shipSpr).locV + pMoveAmound end if -- Space if keypressed (SPACE) and frequenz=false then repeat with i=1 to 9 if sprite(19+i).visibility=false then sprite(19+i).visibility=true sprite(19+i).locV=sprite(shipSpr).LocV-10 sprite(19+i).locH=sprite(shipSpr).locH frequenz=true exit repeat end if end repeat end if if keypressed (SPACE) = false then frequenz=false if Modus=1 and keypressed (return) then Modus=2 Initialisiere=1 go to frame 31 end if if Modus=3 and keypressed (return) then Modus=1 Initialisiere=1 go to frame 1 end if sprite(5).locH=sprite(shipSpr).locH sprite(5).locV=sprite(shipSpr).locV end -- ------------------------------------------------------------------------------- on Hintergrund if sprite(1).locV<660-4 then sprite(1).LocV = sprite(1).LocV + 4 else sprite(1).locV=-660 if sprite(2).locV<660-4 then sprite(2).LocV = sprite(2).LocV + 4 else sprite(2).locV=-660 if sprite(3).locV<660-2 then sprite(3).LocV = sprite(3).LocV + 2 else sprite(3).locV=-660 if sprite(4).locV<660-2 then sprite(4).LocV = sprite(4).LocV + 2 else sprite(4).locV=-660 end -- ------------------------------------------------------------------------------- on Schussaendern TauschSpr repeat with i=1 to 9 sprite(19+i).member=TauschSpr end repeat end -- ------------------------------------------------------------------------------- on Transporter -- Transporter erscheint if transVar>TransZeit then sprite(15).locV = -30 sprite(15).locH = 200 + random(240) sprite(15).visible=true transVar=0 TransZeit=600+random(100) end if if sprite(15).visible=true then sprite(15).locV = sprite(15).locV + 2 end if if sprite(15).locV > 450 then sprite(15).visibility=false sprite(15).locV = 1000 end if if sprite(16).visible=true then sprite(16).locV = sprite(16).locV + 2 end if if sprite(16).locV > 450 then sprite(16).visibility=false sprite(16).locV = 1000 end if -- Spieler rammt Tansporter if shildTime=0 and intersect (sprite(15).rect, sprite(5).rect)<> rect(0,0,0,0) then Explosion(shipSpr) leben=leben-1 powerStufe=powerStufe-1 PowerStufenCheck Anzeige sprite(15).visibility=false -- Transporter erledigt sprite(15).locV=700 transLife=4 SpielerPlatt end if repeat with g=1 to 9 -- Spieler trifft Transporter if intersect (sprite(19+g).rect, sprite(15).rect) <> rect(0,0,0,0) then transLife=transLife-shotPower sprite(19+g).visibility=false sprite(19+g).locV=500 end if end repeat if transLife < 0 then Explosion (15) sprite(16).visibility=true -- PowerPack erscheint sprite(16).member="SupportShipItem" if random(10)=3 then sprite(16).member="ExtraLife" -- Extraleben erscheint sprite(16).locH=sprite(15).locH sprite(16).locV=sprite(15).locV sprite(15).visibility=false -- Transporter erledigt sprite(15).locV=700 transLife=4 points=points+500 Anzeige end if -- Player sammelt PowerPack auf if intersect (sprite(16).rect, sprite(shipSpr).rect)<> rect(0,0,0,0) then sprite(16).visibility = false sprite(16).locV = -200 if sprite(16).member.name="ExtraLife" then leben=leben+1 Anzeige end if if sprite(16).member.name="SupportShipItem" then if powerStufe < 3 then powerStufe = powerStufe +1 PowerStufenCheck end if if powerStufe=3 then points=points+500 Anzeige end if end if end if end -- ------------------------------------------------------------------------------- on PowerStufenCheck if powerStufe<0 then powerStufe=0 -- ab hier werden die Powerstufen eingeleitet if powerStufe = 0 then -- nix Schussaendern ("SchussRaumschiff0") pMoveAmound = 3 sprite(113).visible=false sprite(114).visible=false sprite(115).visible=false shotPower=1 end if if powerStufe = 1 then -- speed up Schussaendern ("SchussRaumschiff0") pMoveAmound = 7 sprite(113).visible=true sprite(114).visible=false sprite(115).visible=false shotPower=1 end if if powerStufe = 2 then -- double shot Schussaendern ("SchussRaumschiff1") sprite(113).visible=true sprite(114).visible=true sprite(115).visible=false shotPower=2 end if if powerStufe = 3 then -- triple shot Schussaendern ("SchussRaumschiff2") sprite(113).visible=true sprite(114).visible=true sprite(115).visible=true shotPower=3 end if end -- ------------------------------------------------------------------------------- on Endgegner movSpeed, shotSpeed if BossTot=false and BossRichtung=1 then if sprite(7).locH>250 then sprite(7).locH = sprite(7).locH - movSpeed sprite(11).locH = sprite(11).locH - movSpeed sprite(12).locH = sprite(12).locH - movSpeed sprite(13).locH = sprite(13).locH - movSpeed else BossRichtung=2 end if if BossTot=false and BossRichtung=2 then if sprite(7).locH<420 then sprite(7).locH = sprite(7).locH + movSpeed sprite(11).locH = sprite(11).locH + movSpeed sprite(12).locH = sprite(12).locH + movSpeed sprite(13).locH = sprite(13).locH + movSpeed else BossRichtung=1 end if -- Gegner geht nach oben brennend, raus if BossWait>50 and BossRichtung=3 then sprite(7).locV = sprite(7).locV - 2 sprite(11).locV = sprite(11).locV - 2 sprite(12).locV = sprite(12).locV - 2 sprite(13).locV = sprite(13).locV - 2 end if -- Spieler fliegt auch nach oben raus if sprite(7).locV<-100 then blockKey=true sprite(shipSpr).locV=sprite(shipSpr).locV - 4 shildTime=100 -- macht Spieler unverwundbar (hoffentlich) end if if sprite(shipSpr).locV< -200 then LevelCompleted=true if BossRichtung=0 then sprite(7).locH = 300 sprite(7).locV = 80 -150 sprite(11).locH= 240 sprite(11).locV=60 -150 sprite(12).locH=360 sprite(12).locV=60 -150 sprite(13).locH=300 sprite(13).locV =130-150 BossRichtung=4 end if if BossRichtung = 4 then sprite(7).locV=sprite(7).locV+2 sprite(11).locV = sprite(11).locV + 2 sprite(12).locV = sprite(12).locV + 2 sprite(13).locV = sprite(13).locV + 2 if sprite(7).locV>80-movSpeed then BossRichtung=1 BossWait=0 end if end if -- Test ob ein Ziel vom Gegner getroffen ist repeat with i=1 to 9 -- Ziel1 getroffen if intersect (sprite(19+i).rect, sprite(11).rect)<>rect(0,0,0,0) and sprite(11).member.name="EndGegnerZiel1" then Ziel1Life=Ziel1Life-1 sprite(19+i).visible=false sprite(19+i).locV=500 end if -- Ziel2 getroffen if intersect (sprite(19+i).rect, sprite(12).rect)<>rect(0,0,0,0) and sprite(12).member.name="EndGegnerZiel1" then Ziel2Life=Ziel2Life-1 sprite(19+i).visible=false sprite(19+i).locV=500 end if -- Ziel3 getroffen if intersect (sprite(19+i).rect, sprite(13).rect)<>rect(0,0,0,0) and sprite(13).member.name="EndGegnerZiel1" then Ziel3Life=Ziel3Life-1 sprite(19+i).visible=false sprite(19+i).locV=500 end if end repeat -- Ziele zerstört if Ziel1Life=0 then sprite(11).member="EndGegnerZiel2" Explosion (11) points=points+1000 Ziel1Life=-1 Anzeige end if if Ziel2Life=0 then sprite(12).member="EndGegnerZiel2" Explosion (12) points=points+3000 Ziel2Life=-1 Anzeige end if if Ziel3Life=0 then sprite(13).member="EndGegnerZiel2" Explosion (13) points=points+1000 Ziel3Life=-1 Anzeige end if -- Gegner feuert if random(BossShotWait)=3 and Ziel1Life>0 then GegnerschussFeuer(11) if random(BossShotWait)=3 and Ziel2Life>0 then GegnerschussFeuer(12) if random(BossShotWait)=3 and Ziel3Life>0 then GegnerschussFeuer(13) -- Endgegner zerstört if Ziel1Life=-1 and Ziel2Life=-1 and Ziel3Life=-1 then BossTot=true BossRichtung=3 end if if BossTot=true then sprite(40).locV=sprite(7).locV+random(100)-50 sprite(40).locH=sprite(7).locH+random(100)-50 Explosion (40) BossWait=BossWait+1 end if -- Spieler rammt Endgegner if shildTime=0 and (intersect (sprite(shipSpr).rect, sprite(11).rect)<> rect(0,0,0,0) or intersect (sprite(shipSpr).rect, sprite(12).rect)<> rect(0,0,0,0) or intersect (sprite(shipSpr).rect, sprite(13).rect)<> rect(0,0,0,0)) then Explosion(shipSpr) leben=leben-1 powerStufe=powerStufe-1 PowerStufenCheck Anzeige SpielerPlatt end if end -- ------------------------------------------------------------------------------- on SpielerPlatt sprite(shipSpr).blend=50 shildTime=50 end if -- ------------------------------------------------------------------------------- on SpielerTot blockKey=true totWait=totWait+1 sprite(5).locV=sprite(shipSpr).locV+random(50)-10 sprite(5).locH=sprite(shipSpr).locH+random(50)-10 Explosion(5) if totWait>20 then sprite(shipSpr).locV=sprite(shipSpr).locV+2 if sprite(shipSpr).locV>600 then leben=3 blockKey=false sprite(shipSpr).locV=500 totWait=0 Modus=3 ActLevel=1 go to frame 160 end if end -- ------------------------------------------------------------------------------- on Schild if shildTime<100 then shildTime=shildTime+1 sprite(shipSpr).blend = shildTime sprite(36).locV=sprite(shipSpr).locV sprite(36).locH=sprite(shipSpr).locH if shildTime=100 then shildTime=0 sprite(36).locV=600 sprite(36).locH=0 end if end -- ------------------------------------------------------------------------------- on MainProgram -- Hauptprogramm (macht doch Sinn, oder?) :-) if Check=true then -- Startet bei Start des Levels einmal PowerstufenCheck PowerStufenCheck Check=False end if if blockKey=false then tastaturabfrage -- wurde eine Taste gedrückt ? Hintergrund -- Hintergrund bewegen if Modus=2 then Schussprog -- fliegen Schuesse, kollision ? GegnerSchussBewegen -- GegnerSchuss fliegt, trifft ? ExplosionWeiter -- Geht Sprites der Explosionen durch Gegnerabfrage -- Gegner bewegen etc. end if transVar=transVar+1 -- Zeit bis Transporter kommt if BossTot=false or (BossTot=true and sprite(15).visible=true) then Transporter if shildTime>0 then Schild -- Unsterblichkeit nach Tot BossTimer=BossTimer+1 if BossTimer>BossTimeUp-200 and sprite(100).locV<600 then sprite(100).locV=sprite(100).locV+2 if Bosstimer>BossTimeUp then Endgegner (2,4) if leben<=0 then SpielerTot if LevelCompleted=true then ActLevel=ActLevel+1 Initialisiere=1 if JumpLevel=195 then Modus=3 Go to frame JumpLevel end if if ActLevel=2 then PowerStufenCheck if Initialisiere=1 then InitLevel Initialisiere=0 end if end -- -------------------------------------------------------------------------------