|
Post by Adam on Apr 14, 2009 16:32:26 GMT -5
well, i was I was working on it so you could add more enemies but never got it done to the point you where you could do it without the source so.... here Struc SAnimate Cow(7) Bear(2) Skeleton(2) Chicken(2) Blood(5) Explosion(15) Increase(7) Bongo(2) Bullet(1) Volume(1) Die(1) Mouse(1) End Struc
Struc SWeapon Ammo As Single Max_Ammo As Single Name As String Texture Speed Strength Size(1) As Single Angle_Offset As Single Sound Shoot_Delay Special As String Array_Pos Bought Price End Struc
Struc SBox Handle Type_ Active End Struc
Struc SHelp Supplies Plane Calls Texture(2) Dropped Flying Location(1) As Single Times_Called Cool_Down End Struc
Struc SPlayer Handle(1) Health As Single Sweapon &Main_Weapon Sweapon &Secondary_Weapon Shoot Cursor Cash Bullet(99) Bullet_Type(99) Bullet_Strength(99) End Struc
Struc SKill Record Count Dies Danger Box_Count End Struc
Struc SEnemy_Type Health Strength As Single Name As String Texture As String Size(1) As Single Speed As Single Angle_Offset As Single Anim_Speed As Single Special As String Cash_Drop Color#(2) End Struc
Struc SEnemy Active Handle Attack Health As Single Splat(9) CurrentSplat SEnemy_Type &Type_ End Struc
Struc SCurrent Enemy_Max Enemy_Creation Color# Enemy_Create Time Start Game_Over Bullet TileMap Creation_Timer Allow_Shoot Active_Boxes Use_Mine Cursor Mouse End Struc
Struc SMine Active(1) Handle Explosion Timer End Struc
Struc SSound On Explosion Danger(2) Game_Over(1) Plane(1) PlaceMine EmptyClip &Volume End Struc
Include Modded buttonlib_v12.inc
Struc SPointers But_Struc &Buttons End Struc
Struc SMenu Weapon(1) But_Struc Buttons(8) WeaponPic(1) Active Arrow End Struc
Struc SButtons SPointers Point(4) But_Struc Options But_Struc Mine But_Struc Exit But_Struc Volume But_Struc Increase End Struc
Declare Sub Create_Box(Use)
Const Max_Enemies = 1000 Const Mine_Cost = 100 Const Max_Weapons = 4 Const Enemy_Types = 5 Const Max_Boxes = 20 Const Max_Mines = 20 Const Max_Splat = 10 Dim Percent, Rnd1, Rnd2, Distance As Single Dim SEnemy_Type Enemy_Type(Enemy_Types-1) Dim SWeapon Weapon(Max_Weapons-1) Dim Texture(ArrayMax(Weapon)) As String Dim SEnemy Enemy(MAX_ENEMIES-1) Dim Sound$(ArrayMax(Weapon)) Dim SMine Mine(Max_Mines-1) Dim SBox Box(Max_Boxes-1) Dim SAnimate Animate Dim SCurrent Current Dim SButtons Buttons Dim SPlayer Player Dim SWeapon &Weapn Dim Tiles(14)(14) Dim Mine_Texture Dim SSound Sound Dim SKill Kill Dim SHelp Help Dim SMenu Menu Dim Video_Mode Dim X, Y, I Dim NAngle# Dim Base Dim Temp
Map: Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 Data 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 Data 0,0,0,0,0,1,0,0,0,0,0,0,1,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 Data 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
SetTextScroll(FALSE) TextMode(Text_Buffered) ResizeText(60,40) Font(LoadTex("Data/Charset Bump3.png"))
Sub SetTextures() Dim AllImages(3) = LoadTexStrip("Data/Teddy.png") Animate.Cow = LoadTexStrip("Data/Dancing Cow.png") Animate.Explosion = LoadTexStrip("Data/Explode.png") Animate.Volume = LoadTexStrip("Data/Volume.png") Animate.Bear(0) = AllImages(1) Animate.Bear(1) = AllImages(2) Animate.Bear(2) = AllImages(3) AllImages = LoadTexStrip("Data/Skull Man.png") Animate.Skeleton(0) = AllImages(1) Animate.Skeleton(1) = AllImages(2) Animate.Skeleton(2) = AllImages(3) Animate.Blood = LoadTexStrip("Data/Splat2.png") Animate.Die = LoadTexStrip("Data/TalkingSkull.png") Animate.Chicken = LoadTexStrip("Data/Chicken.png") Animate.Increase = LoadTexStrip("Data/Increase.png") Animate.Bullet = LoadTexStrip("Data/EBullet1.png") Animate.Bongo = LoadTexStrip("Data/Bongo.png") Animate.Mouse = LoadtexStrip("Data/TargetSiteAni.png") Player.Handle(0) = NewSprite(LoadTex("Data/TankBase.png")) SprSetPos(100,240) SprSetZorder(100) SprSetAnimSpeed(.5) 'SprSetAnimLoop(False) Player.Handle(1) = NewSprite(LoadTex("Data/TankTurret.png")) SprSetSize(24,48) SprSetPos(100,240)' subtract 6 'SprSetYCentre(.75) SprSetAngle(180) SprSetZOrder(25) Base = NewSprite(LoadTexStrip("Textures/Base.png")) SprSetSize(128,128) SprSetPos(560,80) SprSetZOrder(75) Current.Cursor = NewSprite(Animate.Mouse) SprSetZOrder(-10) SprSetSize(16,16) SprSetSpin(5) Current.TileMap = NewTileMap(LoadTexStrip("Textures/KillJoyStrip"+Video_Mode+".png")) SprSetTiles(Tiles) SprSetZOrder(1000) Help.Plane = NewSprite(LoadTexStrip("Data/BigPlane.png")) SprSetPos(-128,0) SprSetSize(64,64) SprSetAnimSpeed(1) Help.Supplies = NewSprite(LoadTex("Textures/Supplies.png")) SprSetSize(24,24) SprSetPos(16,16) SprSetSpin(-1) Help.Texture(0) = LoadTex("Textures/Crate1.png") Help.Texture(1) = LoadTex("Textures/Crate2.png") Help.Texture(2) = LoadTex("Textures/Crate3.png") Menu.Arrow = LoadTex("Data/LeftArrow.png") Mine_Texture = LoadTex("Data\Mine.png") Current.Mouse = NewSprite(Mine_Texture) SprSetSize(10,10) SprSetSpin(1) SprSetVisible(True) Kill.Danger = NewSprite(0) SprSetPos(320,240) SprSetSize(640,480) SprSetColor(.49,0,0) SprSetVisible(False) SprSetZOrder(-2) Menu.WeaponPic(0) = NewSprite(0) SprSetPos(242,72) SprSetZOrder(-10) SprSetVisible(False) Menu.WeaponPic(1) = NewSprite(0) SprSetPos(562,72) SprSetZOrder(-10) SprSetVisible(False) End Sub
Sub SetButtons() &Sound.Volume = &Animate.Volume(Sound.On+1) ButtonParamEx(Buttons.Mine,608,418,16,16,2,10,True,0,Mine_Texture,Mine_Texture,Mine_Texture,Mine_Texture):SprSetSpin(-1) ButtonParamEx(Buttons.Options,320,448,48,48,2,10,True,0,"Data/plus.png","Data/plus2.png","Data/plus1.png","Data/plus.png"):SprSetSpin(1) ButtonParamEx(Buttons.Exit,348,448,48,48,2,10,False,0,"Data/plus.png","Data/plus2.png","Data/plus1.png","Data/plus.png"):SprSetSpin(-1) ButtonParamEx(Buttons.Volume,616,24,16,16,0,10,True,0,Sound.Volume,Sound.Volume,Sound.Volume,Sound.Volume) ButtonParamEx(Buttons.Increase,20,410,32,32,2,10,True,0,0,0,0,0):SprSetTextures(Animate.Increase):SprSetAnimSpeed(1):SprSetAngle(58.5) BindButton(Buttons.Increase):SetButtonSpecial(True) ButtonParamEx(Menu.Buttons(0),295,290,12,16,2,10,False,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow):SprSetColor(125/255.0,0,0) ButtonParamEx(Menu.Buttons(1),311,290,12,16,2,10,False,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow):SprSetColor(125/255.0,0,0):SprSetXFlip(True) ButtonParamEx(Menu.Buttons(2),329,290,12,16,2,10,False,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow):SprSetColor(125/255.0,0,0) ButtonParamEx(Menu.Buttons(3),345,290,12,16,2,10,False,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow,Menu.Arrow):SprSetColor(125/255.0,0,0):SprSetXFlip(True) ButtonParamEx(Menu.Buttons(4),154,246,32,12,2,10,False,0,0,0,0,0):SprSetColor(.29,.29,.29) ButtonParamEx(Menu.Buttons(5),474,246,32,12,2,10,False,0,0,0,0,0):SprSetColor(.29,.29,.29) ButtonParamEx(Menu.Buttons(6),554,366,106,12,2,10,False,0,0,0,0,0):SprSetColor(.29,.29,.29) ButtonParamEx(Menu.Buttons(7),554,390,48,12,2,10,False,0,0,0,0,0):SprSetColor(.29,.29,.29) &Buttons.Point(0).Buttons = &Buttons.Mine &Buttons.Point(1).Buttons = &Buttons.Options &Buttons.Point(2).Buttons = &Buttons.Exit &Buttons.Point(3).Buttons = &Buttons.Volume &Buttons.Point(4).Buttons = &Buttons.Increase End Sub
Sub SetSounds() Sound.Explosion = LoadSound("Sounds/Boom.wav") Sound.Danger(0) = LoadSound("Sounds/siren1.wav") Sound.Game_Over(0) = LoadSound("Sounds/WindDown.wav") Sound.PlaceMine = LoadSound("Sounds/Zap2.wav") Sound.EmptyClip = LoadSound("Sounds/Ladder.wav") Sound.Plane(0) = LoadSound("Sounds/Machine_Gun4.wav") End Sub
Sub GameOver() IF Not Sound.Game_Over(1) Then IF Sound.On Then PlaySound(Sound.Game_Over(0)) Endif DeleteSprite(Player.Handle(1)) DeleteSprite(Player.Handle(0)) 'SprSetTextures() NewSprite(Animate.Die) SprSetPos(320,240) SprSetAnimSpeed(.5) SprSetZOrder(-1) Sound.Game_Over(1) = True Kill.Dies = Kill.Dies + 1 Endif Locate 25, 20 Color(Sin(Current.Color#)*125,0,0) Print "GAME OVER" Current.Color# = Current.Color# + .001 Current.Game_Over = True IF Current.Color# > 10 Then Run Endif End Sub
Sub Setup() CompFile("Preferences.Kill"):Exec SetTextures() SetButtons() SetSounds() CompFile("Weapons.Kill"):Exec CompFile("Enemies.Kill"):Exec Reset Map For Y = 0 To 14 For X = 0 To 14 Read Tiles(X)(Y) Next Next Player.Health = 100 Current.Start = PerformanceCounter() IF Kill.Box_Count > 0 Then For I = 0 To Kill.Box_Count-1 Create_Box(False) Next Endif End Sub
Function Angle#(x1#,y1#,x2#,y2#) NAngle# = ATN2D(x2#-x1#, y2#-y1#) Return 180-NAngle# EndFunction
Sub CreateBullet(Point) Player.Bullet_Type(Current.Bullet) = Point IF Not Player.Bullet(Current.Bullet) Then Player.Bullet(Current.Bullet) = NewSprite(0) SprSetZOrder(100) Else BindSprite(Player.Bullet(Current.Bullet)) Endif IF Point = 0 Then &Weapn = &Player.Main_Weapon Else &Weapn = &Player.Secondary_Weapon Endif SprSetTexture(Weapn.Texture) IF Sound.On And Weapn.Sound <> 0 Then PlaySound(Weapn.Sound,.5,False) Endif Player.Bullet_Strength(Current.Bullet) = Weapn.Strength SprSetSize(Weapn.Size) SprSetAngle(SprAngle (Player.Handle(1))+Weapn.Angle_Offset) SprSetPos(SprPos(Player.Handle(0))) SprSetVel (MatrixRotateZ (SprAngle (Player.Handle(1))) * vec2 (0, -Weapn.Speed)) IF Len(Weapn.Special) > 0 Then Comp(Weapn.Special):Exec Endif Current.Bullet = Current.Bullet + 1 IF Current.Bullet > ArrayMax(Player.Bullet) Then Current.Bullet = 0 Endif End Sub
Sub CreateBlood(Temp) IF Enemy(I).Splat(Enemy(I).CurrentSplat) > 0 Then DeleteSprite(Enemy(I).Splat(Enemy(I).CurrentSplat)) Endif Enemy(I).Splat(Enemy(I).CurrentSplat) = NewSprite(Animate.Blood) SprSetAnimSpeed(1) SprSetAnimLoop(False) SprSetPos(SprPos(Enemy(I).Handle)) IF Temp = 1 Then SprSetSize(Enemy(I).Type_.Size) Else SprSetSize(Enemy(I).Type_.Size/2) Endif SprSetColor(255,0,0) SprSetZorder(120) Enemy(I).CurrentSplat = Enemy(I).CurrentSplat + 1 IF Enemy(I).CurrentSplat > Max_Splat-1 Then Enemy(I).CurrentSplat = 0 Endif End Sub
Sub Create_Explosion() IF Not Mine(X).Explosion Then Mine(X).Explosion = NewSprite(Animate.Explosion) SprSetZOrder(30) SprSetSize(180,180) SprSetAnimLoop(False) SprSetAnimSpeed(.4) Else BindSprite(Mine(X).Explosion) Endif IF Sound.On Then PlaySound(Sound.Explosion) Endif SprSetPos(SprPos(Mine(X).Handle)) SprSetAngle(SprAngle(Mine(X).Handle)) SprSetFrame(0) BindSprite(Mine(X).Handle) SprSetVisible(False) End Sub
Sub Kill_Enemy() IF Enemy(I).Health <= 0 Then SprSetVisible(False) Enemy(I).Active = False Enemy(I).Attack = False Kill.Count = Kill.Count + 1 Player.Cash = Player.Cash + Enemy(I).Type_.Cash_Drop CreateBlood(1) Else CreateBlood(0) Endif IF Help.Times_Called + 10 <= Kill.Count Then Help.Times_Called = Kill.Count Help.Calls = Help.Calls + 1 Endif End Sub
Sub DeleteBullet() DeleteSprite(Player.Bullet(X)) Player.Bullet(X) = 0 End Sub Sub CreateEnemy() For I = 0 To Current.Enemy_Max -1 IF Not Enemy(I).Active Then Percent = Rnd()% Current.Enemy_Creation + 1 IF Percent = 1 Then &Enemy(I).Type_ = &Enemy_Type(Rnd()%Enemy_Types) IF Not Enemy(I).Handle Then Enemy(I).Handle = NewSprite(0) SprSetZOrder(50) Else BindSprite(Enemy(I).Handle) Endif Comp("SprSetTextures("+Enemy(I).Type_.Texture+")"):Exec SprSetAnimSpeed(Enemy(I).Type_.Anim_Speed) SprSetSize(Enemy(I).Type_.Size) SprSetColor(Enemy(I).Type_.Color#) Enemy(I).Active = True Enemy(I).Health = Enemy(I).Type_.Health Rnd1 = Rnd()% 2+1 Rnd2 = Rnd()% 480+1 IF Rnd1 = 1 Then SprSetPos(-32,480-Rnd2) Else SprSetPos(Rnd2,512) Endif SprSetVisible(True) SprSetAngle(Angle#(SprX(),SprY(),560,80)-90+Enemy(I).Type_.Angle_Offset) SprSetVel(MatrixRotateZ(SprAngle())*Vec2(Enemy(I).Type_.Speed,0)) Comp(Enemy(I).Type_.Special):Exec Endif Else BindSprite(Enemy(I).Handle) IF SprX() > 672 Or SprY() < -32 Then Enemy(I).Active = False SprSetVisible(False) Else Distance = Sqrt(Pow(560-SprX(),2)+Pow(80-SprY(),2)) IF Distance <= 64 Then SprSetVel(0,0) Enemy(I).Attack = True Endif Endif For X = 0 To 99 IF Player.Bullet(X) > 0 Then IF SprX(Player.Bullet(X)) < -SprXSize(Player.Bullet(X))/2 Or SprX(Player.Bullet(X)) > 640 + SprXSize(Player.Bullet(X))/2 Or SprY(Player.Bullet(X)) < -SprYSize(Player.Bullet(X))/2 Or SprY(Player.Bullet(X)) > 480 + sprYSize(Player.Bullet(X))/2 Then DeleteBullet() Endif IF Player.Bullet(X) > 0 Then IF SprTop() <= SprBottom(Player.Bullet(X)) Then IF SprLeft() <= SprRight(Player.Bullet(X)) Then IF SprBottom()>= SprTop(Player.Bullet(X)) Then IF SprRight() >= SprLeft(PLayer.Bullet(X)) Then Enemy(I).Health = Enemy(I).Health - Player.Bullet_Strength(X) Kill_Enemy() Player.Bullet_Strength(X) = Player.Bullet_Strength(X) - Enemy(I).Type_.Health IF Player.Bullet_Strength(X) <= 0 Then DeleteBullet() Endif Endif Endif Endif Endif Endif Endif Next IF Abs(SprXVel(Player.Handle(0))) > .05 Or Abs(SprYVel(Player.Handle(0))) > .005 Then IF SprTop() < SprBottom(Player.Handle(0)) Then IF SprBottom() > SprTop(Player.Handle(0)) Then IF SprLeft() < SprRight(Player.Handle(0)) Then IF SprRight() > SprLeft(Player.Handle(0)) Then Enemy(I).Health = Enemy(I).Health - 20 Kill_Enemy() Endif Endif Endif Endif Endif For X = 0 To Max_Mines-1 IF Mine(X).Active(0) Then Distance = Sqrt(Pow(SprX(Mine(X).Handle)-SprX(),2)+Pow(SprY(Mine(X).Handle)-SprY(),2)) IF Distance <= 8 + Enemy(I).Type_.Size(0)/2 Then Mine(X).Active(0) = False Mine(X).Active(1) = True Mine(X).Timer = Current.Time Create_Explosion() Endif ElseIF Mine(X).Active(1) Then Distance = Sqrt(Pow(SprX(Mine(X).Explosion)-SprX(),2)+Pow(SprY(Mine(X).Explosion)-SprY(),2)) IF Distance < 64 + Enemy(I).Type_.Size(0)/2 Then Enemy(I).Health = Enemy(I).Health - (64+Enemy(I).Type_.Size(0)/2-Distance) Kill_Enemy() Endif IF Mine(X).Timer + 2000 < Current.Time Then Mine(X).Active(1) = False Endif Endif Next IF Enemy(I).Health <= 0 Then Kill_Enemy() Endif IF Enemy(I).Attack And Enemy(I).Active Then Player.Health = Player.Health - Enemy(I).Type_.Strength*.01 IF Player.Health < 0 Then Player.Health = 0 GameOver() Endif Endif Endif Next IF Current.Time/1000 > Current.Creation_Timer + 10 Then Current.Creation_Timer = Current.Time/1000 Current.Enemy_Creation = Current.Enemy_Creation - 1 Current.Enemy_Max = Current.Enemy_Max + 1 IF Current.Enemy_Creation < 0 Then Current.Enemy_Creation = 0 Endif IF Current.Enemy_Max > MAX_ENEMIES Then Current.Enemy_Max = MAX_ENEMIES Endif Endif IF Sound.On And Player.Health < 20 And Not Sound.Danger(1) Then Sound.Danger(2) = PlaySound(Sound.Danger(0),.5,True) Sound.Danger(1) = True ElseIF Sound.On And Player.Health >= 20 And Sound.Danger(1) Then StopSoundVoice(Sound.Danger(2)) Sound.Danger(1) = False Endif IF Not Sound.On And Sound.Danger(1) Then StopSoundVoice(Sound.Danger(2)) Sound.Danger(1) = False Endif BindSprite(Kill.Danger) SprSetVisible(Player.Health <20) SprSetAlpha(Sind(Current.Time/((Player.Health+1)/2))) End Sub
Sub Init_Help() IF Not Current.Active_Boxes <= ArrayMax(Box) Then Return Endif IF Help.Flying Then Return Endif IF Not Help.Calls > 0 Then Return Endif Help.Calls = Help.Calls - 1 Rnd1 = Rnd()% 4+1 Rnd2 = Rnd()% 480+1 BindSprite(Help.Plane) IF Rnd1 = 1 Then SprSetPos(-64,480-Rnd2) ElseIF Rnd1 = 2 Then SprSetPos(640-Rnd2,512) ElseIF Rnd1 = 3 Then SprSetPos(704,Rnd2) ElseIF Rnd1 = 4 Then SprSetPos(Rnd2,-64) Endif Do Help.Location(0) = Rnd()%576+32 Help.Location(1) = Rnd()%416+32 Distance = Sqrt(Pow(560-Help.Location(0),2)+Pow(80-Help.Location(1),2)) Loop Until Distance >= 74 SprSetAngle(Angle#(SprX(),SprY(),Help.Location(0),Help.Location(1))) SprSetVel(MatrixRotateZ(SprAngle())*Vec2(0,-5)) Help.Dropped = False Sound.Plane(1) = PlaySound(Sound.Plane(0),.075,True) End Sub
Sub Create_Box(Use) For I = 0 To Max_Boxes-1 IF Not Box(I).Active Then IF Not Box(I).Handle Then Box(I).Handle = NewSprite(0) SprSetZOrder(110) SprSetSize(20,20) Else BindSprite(Box(I).Handle) SprSetVisible(True) Endif Box(I).Type_ = Rnd()%3 SprSetTexture(Help.Texture(Box(I).Type_)) IF Use Then SprSetAngle(SprAngle(Help.Plane)) SprSetPos(SprPos(Help.Plane)) Else SprSetAngle(Rnd()%360) SprSetPos(Rnd()%576+32,Rnd()%416+32) Endif Box(I).Active = True Current.Active_Boxes = Current.Active_Boxes + 1 Return Endif Next End Sub
Sub Handle_Help() Distance = Sqrt(Pow(Help.Location(0)-SprX(Help.Plane),2)+Pow(Help.Location(1)-SprY(Help.Plane),2)) Rnd1 = Rnd()%64+1 IF Distance < Rnd1 And Not Help.Dropped Then Create_Box(True) Help.Dropped = True Endif For I = 0 To Max_Boxes-1 IF Box(I).Active Then BindSprite(Box(I).Handle) IF SprTop() < SprBottom(Player.Handle(0)) Then IF SprBottom() > SprTop(Player.Handle(0)) Then IF SprLeft() < SprRight(Player.Handle(0)) Then IF SprRight() > SprLeft(Player.Handle(0)) Then Box(I).Active = False Current.Active_Boxes = Current.Active_Boxes - 1 SprSetVisible(False) IF Box(I).Type_ = 0 Then Player.Health = Player.Health + 20 IF Player.Health > 100 Then Player.Health = 100 Endif ElseIF Box(I).Type_ = 1 Then Player.Main_Weapon.Ammo = Player.Main_Weapon.Max_Ammo ElseIF Box(I).Type_ = 2 Then Player.Secondary_Weapon.Ammo = Player.Secondary_Weapon.Max_Ammo Endif Endif Endif Endif Endif Endif Next IF Help.Calls > 0 And Help.Cool_Down + 5000 < Current.Time Then Init_Help() Endif IF SprX(Help.Plane) < -64 Or SprX(Help.Plane) > 704 Or SprY(Help.Plane) < -64 Or SprY(Help.Plane) > 512 Then Help.Flying = False StopSoundVoice(Sound.Plane(1)) Else Help.Flying = True Help.Cool_Down = Current.Time Endif End Sub
Sub Create_Mine() For I = 0 To Max_Mines-1 IF Not Mine(I).Active(0) Then IF Not Mine(I).Handle Then Mine(I).Handle = NewSprite(Mine_Texture) SprSetSize(16,16) SprSetZOrder(110) Else BindSprite(Mine(I).Handle) Endif IF Sound.On Then PlaySound(Sound.PlaceMine) Endif SprSetVisible(True) SprSetPos(Mouse_X()*640,Mouse_Y()*480) SprSetAngle(SprAngle(Current.Mouse)) Mine(I).Active(0) = true Return Endif Next End Sub
Sub Save() Dim File = OpenFileWrite("Preferences.Kill") WriteLine(File,"Video_Mode = "+Video_Mode) WriteLine(File,"Kill.Record = "+Kill.Record) IF Kill.Record Then WriteLine(File,"Kill.Count = "+Kill.Count) WriteLine(File,"Kill.Dies = "+Kill.Dies) Endif WriteLine(File,"Sound.On = "+Sound.On) WriteLine(File,"") WriteLine(File,"&Player.Main_Weapon = &Weapon("+Player.Main_Weapon.Array_Pos+")") WriteLine(File,"&Player.Secondary_Weapon = &Weapon("+Player.Secondary_Weapon.Array_Pos+")") WriteLine(File,"") WriteLine(File,"Current.Enemy_Creation = "+Current.Enemy_Creation) WriteLine(File,"Current.Enemy_Max = "+Current.Enemy_Max) WriteLine(File,"Kill.Box_Count = "+Current.Active_Boxes) WriteLine(File,"") WriteLine(File,"Player.Cash = "+Player.Cash) WriteLine(File,"Help.Calls = "+Help.Calls) WriteLine(File,"") WriteLine(File,"Weapons:") For I = 0 To Max_Weapons-1 IF Weapon(I).Bought Then Temp = Weapon(I).Ammo Else Temp = -1 Endif WriteLine(File,"Data "+Weapon(I).Bought+","+Temp) Next CloseFile(File) End Sub
Sub End_Game() Save() StopSounds() End End Sub
Sub Inputs() BindSprite(Player.Handle(0)) If ScanKeyDown(VK_Down) Or KeyDown("S") Then SprSetVel (SprVel (Player.Handle(0)) - MatrixRotateZ (SprAngle (Player.Handle(0))) * vec2 (0, -.05)) Endif IF ScanKeyDown(VK_Up) Or KeyDown("W") Then SprSetVel (SprVel (Player.Handle(0)) + MatrixRotateZ (SprAngle (Player.Handle(0))) * vec2 (0, -.05)) Endif If ScanKeyDown(VK_LEFT) Or KeyDown("A") Then SprSetAngle(SprAngle() - 5) Endif IF ScanKeyDown(VK_RIGHT) Or KeyDown("D") Then SprSetAngle(SprAngle() + 5) Endif IF (ScanKeyDown(VK_Space) Or Mouse_Button(0)) And Current.Allow_Shoot And Current.Time > Player.Shoot + Player.Main_Weapon.Shoot_Delay Then IF Int(Player.Main_Weapon.Ammo) > 0 Then CreateBullet(0) Player.Shoot = Current.Time Player.Main_Weapon.Ammo = Player.Main_Weapon.Ammo - 1 IF Player.Main_Weapon.Ammo < 0 Then Player.Main_Weapon.Ammo = 0 Endif Else IF Sound.On Then PlaySound(Sound.EmptyClip) Endif Endif Endif IF ScanKeyDown(VK_Escape) Then End_Game() Endif If Mouse_Button(1) And Current.Time > Player.Shoot + Player.Secondary_Weapon.Shoot_Delay Then IF Int(Player.Secondary_Weapon.Ammo) > 0 Then CreateBullet(1) Player.Shoot = Current.Time Player.Secondary_Weapon.Ammo = Player.Secondary_Weapon.Ammo - 1 IF Player.Secondary_Weapon.Ammo < 0 Then Player.Secondary_Weapon.Ammo = 0 Endif Else IF Sound.On Then PlaySound(Sound.EmptyClip) Endif Endif Endif IF Mouse_Button(02) And Current.Use_Mine Then Create_Mine() Current.Use_Mine = False Player.Shoot = Current.Time Endif IF KeyDown("Q") And Player.Cash >= Mine_Cost And Not Current.Use_Mine Then Player.Cash = Player.Cash - Mine_Cost Current.Use_Mine = True Endif SprSetXVel(SprXVel()/1.02) SprSetYVel(SprYVel()/1.02) IF SprX() < -SprXSize()/2 Then SprSetX(640+SprXSize()/2) Endif IF SprX() > 640+SprXSize()/2 Then SprSetX(-SprXSize()/2) Endif IF SprY() < -SprYSize()/2 Then SprSetY(480+SprYSize()/2) Endif IF SprY() > 480+SprYSize()/2 Then SprSetY(-SprYSize()/2) Endif BindSprite(Player.Handle(1)) SprSetVel (SprVel (Player.Handle(0))) SprSetAngle(Angle#(SprX(),SprY(),Mouse_X()*SpriteAreaWidth(),Mouse_Y()*SpriteAreaHeight())) SprSetPos(SprPos(Player.Handle(0))) BindSprite(Current.Mouse) IF Current.Use_Mine Then SprSetVisible(True) SprSetPos(Mouse_X()*640,Mouse_Y()*480) Else SprSetVisible(False) Endif IF Not Sound.On Then StopSounds() Endif End Sub
Sub ScreenPrint() Locate 51,6 Color((100-Player.Health)/100*255,Player.Health/100*255,0) print Int(Player.Health)+"% " BindSprite(Base) SprSetFrame(10-(Player.Health/10)) Current.Time = PerformanceCounter() - Current.Start Color (140,140,0) Locate 1,36 Print "Cash "+Player.Cash+" " Locate 1,37 Print "Body Count "+Kill.Count Locate 1,38 Print "Time Wasted "+Current.Time/1000/60 Color(125,0,0) Locate 3-Len(Str$(Help.Calls)),1 Print Help.Calls +" " Locate 53,36 Color((Player.Main_Weapon.Max_Ammo+Player.Secondary_Weapon.Max_Ammo-(Player.Main_Weapon.Ammo+Player.Secondary_Weapon.Ammo))/(Player.Main_Weapon.Max_Ammo+Player.Secondary_Weapon.Max_Ammo)*255,(Player.Main_Weapon.Ammo+Player.Secondary_Weapon.Ammo)/(Player.Main_Weapon.Max_Ammo+Player.Secondary_Weapon.Max_Ammo)*255,0) Print "Ammo" Locate 53,37 Color((Player.Main_Weapon.Max_Ammo-Player.Main_Weapon.Ammo)/Player.Main_Weapon.Max_Ammo*255,Player.Main_Weapon.Ammo/Player.Main_Weapon.Max_Ammo*255,0) Print Int(Player.Main_Weapon.Ammo)+"/"+Player.Main_Weapon.Max_Ammo+" " Locate 53,38 Color((Player.Secondary_Weapon.Max_Ammo-Player.Secondary_Weapon.Ammo)/Player.Secondary_Weapon.Max_Ammo*255,Player.Secondary_Weapon.Ammo/Player.Secondary_Weapon.Max_Ammo*255,0) Print Int(Player.Secondary_Weapon.Ammo)+"/"+Player.Secondary_Weapon.Max_Ammo+" " BindSprite(Current.Cursor) SprSetPos(Mouse_X()*SpriteAreaWidth(),Mouse_Y()*SpriteAreaHeight()) End Sub
Sub UpdateButtons() Locate 28,39 Print " " Locate 28,39 For I = 0 To ArrayMax(Buttons.Point) BindButton (Buttons.Point(I).Buttons) Button() IF (GetButtonState() = 1) Or (GetButtonState() = 2) Or (GetButtonState() = 5) Then Current.Allow_Shoot = False Endif Next IF ButtonReleased(Buttons.Mine) And Player.Cash >= 50 And Not Current.Use_Mine Then Player.Cash = Player.Cash - 50 Current.Use_Mine = True Endif BindButton(Buttons.Options) IF IsButtonState(Released) Then Menu.Active = Not Menu.Active For I = 0 To 8 BindButton(Menu.Buttons(I)) ToggleButtonVisibility() Button() Next BindSprite(Menu.WeaponPic(0)) SprSetVisible(Menu.Active) BindSprite(Menu.WeaponPic(1)) SprSetVisible(Menu.Active) Menu.Weapon(0) = Player.Main_Weapon.Array_Pos Menu.Weapon(1) = Player.Secondary_Weapon.Array_Pos Cls ElseIF ISButtonState(Hover) Then Print "MENU" ElseIF ISButtonState(Pressed) Then Color(140,50,50) Print "MENU" Endif BindButton(Buttons.Exit) IF IsButtonState(Released) Then End_Game() ElseIF ISButtonState(Hover) Then Print "Exit" ElseIF ISButtonState(Pressed) Then Color(140,50,50) Print "Exit" Endif IF ButtonReleased(Buttons.Volume) Then Sound.On = Not Sound.On &Sound.Volume = &Animate.Volume(Sound.On+1) For i = 0 to 3 Buttons.Volume.SprTex(I) = Sound.Volume Next Endif IF ButtonReleased(Buttons.Increase) Then Current.Enemy_Creation = Current.Enemy_Creation - 1000 IF Current.Enemy_Creation < 0 Then Current.Enemy_Creation = 0 Endif Endif End Sub
Sub Handle_Menu() For I = 0 To 8 BindButton(Menu.Buttons(I)) Button() Next IF ButtonReleased(Menu.Buttons(0)) Then Menu.Weapon(0) = Menu.Weapon(0) - 1 IF Menu.Weapon(0) = Menu.Weapon(1) Then Menu.Weapon(0) = Menu.Weapon(0) - 1 Endif IF Menu.Weapon(0) < 0 Then Menu.Weapon(0) = Max_Weapons-1:IF Menu.Weapon(0) = Menu.Weapon(1) Then Menu.Weapon(0) = Menu.Weapon(0) - 1 Endif: Endif ElseIF ButtonReleased(Menu.Buttons(1)) Then Menu.Weapon(0) = Menu.Weapon(0) + 1 IF Menu.Weapon(0) = Menu.Weapon(1) Then Menu.Weapon(0) = Menu.Weapon(0) + 1 Endif IF Menu.Weapon(0) >= Max_Weapons Then Menu.Weapon(0) = 0:IF Menu.Weapon(0) = Menu.Weapon(1) Then Menu.Weapon(0) = Menu.Weapon(0) + 1 Endif: Endif ElseIF ButtonReleased(Menu.Buttons(2)) Then Menu.Weapon(1) = Menu.Weapon(1) - 1 IF Menu.Weapon(1) = Menu.Weapon(0) Then Menu.Weapon(1) = Menu.Weapon(1) - 1 Endif IF Menu.Weapon(1) < 0 Then Menu.Weapon(1) = Max_Weapons-1:IF Menu.Weapon(1) = Menu.Weapon(0) Then Menu.Weapon(1) = Menu.Weapon(1) - 1 Endif: Endif ElseIF ButtonReleased(Menu.Buttons(3)) Then Menu.Weapon(1) = Menu.Weapon(1) + 1 IF Menu.Weapon(1) = Menu.Weapon(0) Then Menu.Weapon(1) = Menu.Weapon(1) + 1 Endif IF Menu.Weapon(1) >= Max_Weapons Then Menu.Weapon(1) = 0:IF Menu.Weapon(1) = Menu.Weapon(0) Then Menu.Weapon(1) = Menu.Weapon(1) + 1 Endif: Endif ElseIF ButtonReleased(Menu.Buttons(4)) Then IF Not Weapon(Menu.Weapon(0)).Bought Then IF Player.Cash >= Weapon(Menu.Weapon(0)).Price Then Player.Cash = Player.Cash - Weapon(Menu.Weapon(0)).Price Weapon(Menu.Weapon(0)).Bought = True Endif Endif IF Weapon(Menu.Weapon(0)).Bought Then IF Weapon(Menu.Weapon(0)).Array_Pos = Player.Secondary_Weapon.Array_Pos Then &Player.Secondary_Weapon = &Player.Main_Weapon Endif &Player.Main_Weapon = &Weapon(Menu.Weapon(0)) Endif ElseIF ButtonReleased(Menu.Buttons(5)) Then IF Not Weapon(Menu.Weapon(1)).Bought Then IF Player.Cash >= Weapon(Menu.Weapon(1)).Price Then Player.Cash = Player.Cash - Weapon(Menu.Weapon(1)).Price Weapon(Menu.Weapon(1)).Bought = True Endif Endif IF Weapon(Menu.Weapon(1)).Bought Then IF Weapon(Menu.Weapon(1)).Array_Pos = Player.Main_Weapon.Array_Pos Then &Player.Main_Weapon = &Player.Secondary_Weapon Endif &Player.Secondary_Weapon = &Weapon(Menu.Weapon(1)) Endif ElseIF ButtonReleased(Menu.Buttons(6)) Then CompFile("Preferences(New).Kill"):Exec Save() End 'Run ElseIF ButtonReleased(Menu.Buttons(7)) Then End_Game() Endif BindSprite(Menu.WeaponPic(0)) SprSetTexture(Weapon(Menu.Weapon(0)).Texture) SprSetAngle(SprAngle()+1) BindSprite(Menu.WeaponPic(1)) SprSetTexture(Weapon(Menu.Weapon(1)).Texture) SprSetAngle(SprAngle()-1) Cls Color(255,0,0) Locate 1,3: Print "Primary" Locate 2,6: Print Weapon(Menu.Weapon(0)).Name Locate 3,8: Print "Power:"+Weapon(Menu.Weapon(0)).Strength Locate 3,9: Print "Speed:"+Weapon(Menu.Weapon(0)).Speed Locate 3,10: Print "Reload:"+Weapon(Menu.Weapon(0)).Shoot_Delay+" ms" Locate 3,12: Print "Status:" IF Not Weapon(Menu.Weapon(0)).Bought Then Print "Cost "+Weapon(Menu.Weapon(0)).Price Else Print "Owned" Endif Locate 13,20:Print "Use" Locate 31,3: Print "Secondary" Locate 32,6: Print Weapon(Menu.Weapon(1)).Name Locate 33,8: Print "Power:"+Weapon(Menu.Weapon(1)).Strength Locate 33,9: Print "Speed:"+Weapon(Menu.Weapon(1)).Speed Locate 33,10:Print "Reload:"+Weapon(Menu.Weapon(1)).Shoot_Delay+" ms" Locate 33,12:Print "Status:" IF Not Weapon(Menu.Weapon(01)).Bought Then Print "Cost "+Weapon(Menu.Weapon(1)).Price Else Print "Owned" Endif Locate 43,20:Print "Use" Locate 47,30:Print "Reset Data" Locate 50,32:Print "Exit" End Sub Setup()
Do IF Current.Enemy_Create + 50 < Current.Time Then Current.Allow_Shoot = True UpdateButtons() IF Not Menu.Active Then IF Not Current.Game_Over Then Inputs() Endif Current.Enemy_Create = Current.Time CreateEnemy() Handle_Help() AnimateSprites() Else Handle_Menu() Endif Endif ScreenPrint() DrawText() Loop all you have to do is add a variable in the animate structure for your enemy animation, load it in the set textures sub routine and add 1 to the enemy_types const. after that all you have to do is add a block to the enemy.kill file for your new enemy. you can add new weapons too but i will let you figure that at as for i'm at a friends house at the moment. I don't have interwebs at home anymore and smc, i know it is easy to hack. there are many a thing i could have done to change that fact but... for 1 thing, i was too lazy and just don't care.
|
|