summaryrefslogtreecommitdiff
path: root/Penguloon
diff options
context:
space:
mode:
Diffstat (limited to 'Penguloon')
-rw-r--r--Penguloon/Content/Content.mgcb12
-rw-r--r--Penguloon/Content/SplashArt/5.pngbin0 -> 84583 bytes
-rw-r--r--Penguloon/ContentPathManager.cs1
-rw-r--r--Penguloon/Controls/IngameOptions.cs13
-rw-r--r--Penguloon/Controls/LevelSelector.cs1
-rw-r--r--Penguloon/Controls/MuteButton.cs8
-rw-r--r--Penguloon/Controls/ObjectSelector.cs6
-rw-r--r--Penguloon/Enemies/DarkRainbowBalloon.cs2
-rw-r--r--Penguloon/Levels/IceLevel.cs2
-rw-r--r--Penguloon/Levels/LevelBase.cs6
-rw-r--r--Penguloon/Levels/Map.cs21
-rw-r--r--Penguloon/Levels/SandLevel2.cs89
-rw-r--r--Penguloon/Levels/WaveManager.cs9
-rw-r--r--Penguloon/Objects/CannonObject.cs26
-rw-r--r--Penguloon/Objects/GoldPenguinObject.cs30
-rw-r--r--Penguloon/Objects/HealthGeneratorObject.cs11
-rw-r--r--Penguloon/Objects/KingPenguinObject.cs26
-rw-r--r--Penguloon/Objects/MortarObject.cs26
-rw-r--r--Penguloon/Objects/PenguinObject.cs24
-rw-r--r--Penguloon/Penguloon.csproj1
-rw-r--r--Penguloon/Projectiles/ProjectileBase.cs25
-rw-r--r--Penguloon/Projectiles/SnowballProjectile.cs4
22 files changed, 303 insertions, 40 deletions
diff --git a/Penguloon/Content/Content.mgcb b/Penguloon/Content/Content.mgcb
index a65c337..ceea1e6 100644
--- a/Penguloon/Content/Content.mgcb
+++ b/Penguloon/Content/Content.mgcb
@@ -1003,3 +1003,15 @@
/processorParam:TextureFormat=Color
/build:UI/BtnUnmutePressed.png
+#begin SplashArt/5.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:SplashArt/5.png
+
diff --git a/Penguloon/Content/SplashArt/5.png b/Penguloon/Content/SplashArt/5.png
new file mode 100644
index 0000000..2747b6e
--- /dev/null
+++ b/Penguloon/Content/SplashArt/5.png
Binary files differ
diff --git a/Penguloon/ContentPathManager.cs b/Penguloon/ContentPathManager.cs
index a2f59ba..71b17e9 100644
--- a/Penguloon/ContentPathManager.cs
+++ b/Penguloon/ContentPathManager.cs
@@ -81,6 +81,7 @@ namespace Penguloon
"SplashArt/2",
"SplashArt/3",
"SplashArt/4",
+ "SplashArt/5",
"Enemies/pop",
"Enemies/red",
diff --git a/Penguloon/Controls/IngameOptions.cs b/Penguloon/Controls/IngameOptions.cs
index e5a6890..137094c 100644
--- a/Penguloon/Controls/IngameOptions.cs
+++ b/Penguloon/Controls/IngameOptions.cs
@@ -23,6 +23,8 @@ namespace Penguloon.Controls
public MessageBox QuitConfirmationBox { get; set; }
public DateTime ShowTimeMsgBox { get; set; }
+ public MuteButton BtnMute { get; set; }
+
public IngameOptions(SceneBase parentScene, Vector2 position, Vector2 size) : base(parentScene, position, size)
{
this.DrawText = false;
@@ -33,6 +35,10 @@ namespace Penguloon.Controls
Vector2 BtnSize = new Vector2(Size.X - 90, StaticUIValues.IngameUIPlayButtonHeight);
Vector2 MsgBoxSize = new Vector2(900, 550);
+ BtnMute = new MuteButton(parentScene,
+ new Vector2(position.X + (Size.X / 2) - (BtnSize.X / 2), Position.Y + Size.Y - (50 * 2) - (BtnSize.Y * 2)),
+ new Vector2(StaticUIValues.MenuButtonSize.Y, StaticUIValues.MenuButtonSize.Y));
+
BtnContinue = new Button(parentScene,
new Vector2(position.X + (Size.X / 2) - (BtnSize.X / 2), Position.Y + 50),
BtnSize, parentScene.Main.Resources.GetString(Resource.String.IngameOptionsContinue));
@@ -58,7 +64,10 @@ namespace Penguloon.Controls
GameScene gameScene = (GameScene)ParentScene;
gameScene.Level.FinishGame();
- SceneManager.SelectedScene = SelectedScene.Menu;
+ gameScene.Level.EndDate = DateTime.Now;
+ gameScene.IngameEndStats.State = IngameOptionsState.Show;
+
+ //SceneManager.SelectedScene = SelectedScene.Menu;
}
private void QuitConfirmationBox_OnMissClick(object sender, EventArgs e)
@@ -93,6 +102,7 @@ namespace Penguloon.Controls
BtnContinue.Draw(deltaTime);
BtnQuit.Draw(deltaTime);
QuitConfirmationBox.Draw(deltaTime);
+ BtnMute.Draw(deltaTime);
}
public override void Update(float deltaTime, TouchLocation[] touchLocations)
@@ -109,6 +119,7 @@ namespace Penguloon.Controls
BtnContinue.Update(deltaTime, touchLocations);
BtnQuit.Update(deltaTime, touchLocations);
+ BtnMute.Update(deltaTime, touchLocations);
}
}
} \ No newline at end of file
diff --git a/Penguloon/Controls/LevelSelector.cs b/Penguloon/Controls/LevelSelector.cs
index de3b080..b5f0b26 100644
--- a/Penguloon/Controls/LevelSelector.cs
+++ b/Penguloon/Controls/LevelSelector.cs
@@ -107,6 +107,7 @@ namespace Penguloon.Controls
Levels.Add(new IceLevel3());
Levels.Add(new SandLevel1());
+ Levels.Add(new SandLevel2());
}
public override void Draw(float deltaTime)
diff --git a/Penguloon/Controls/MuteButton.cs b/Penguloon/Controls/MuteButton.cs
index fdd1d91..a8d415d 100644
--- a/Penguloon/Controls/MuteButton.cs
+++ b/Penguloon/Controls/MuteButton.cs
@@ -5,8 +5,6 @@ namespace Penguloon.Controls
{
public class MuteButton : ControlBase
{
- public bool Muted { get; set; } = false;
-
public MuteButton(SceneBase parentScene, Vector2 position, Vector2 size) : base(parentScene, position, size)
{
this.BackgroundIdle = ContentManager.GetTexture("UI/BtnMuteIdle");
@@ -23,11 +21,9 @@ namespace Penguloon.Controls
private void Button_OnClick(object sender, ClickArgs e)
{
- Muted = !Muted;
-
- SoundManager.Muted = Muted;
+ SoundManager.Muted = !SoundManager.Muted;
- if (Muted)
+ if (SoundManager.Muted)
{
this.BackgroundIdle = ContentManager.GetTexture("UI/BtnUnmuteIdle");
this.BackgroundPressed = ContentManager.GetTexture("UI/BtnUnmutePressed");
diff --git a/Penguloon/Controls/ObjectSelector.cs b/Penguloon/Controls/ObjectSelector.cs
index fd444c8..b2ae221 100644
--- a/Penguloon/Controls/ObjectSelector.cs
+++ b/Penguloon/Controls/ObjectSelector.cs
@@ -126,11 +126,11 @@ namespace Penguloon.Controls
private void LoadObjects()
{
Objects.Add(new Tuple<ObjectBase,int>(new PenguinObject(Map), 250));
- Objects.Add(new Tuple<ObjectBase, int>(new GoldPenguinObject(Map), 360));
+ Objects.Add(new Tuple<ObjectBase, int>(new GoldPenguinObject(Map), 420));
Objects.Add(new Tuple<ObjectBase, int>(new CannonObject(Map), 650));
Objects.Add(new Tuple<ObjectBase, int>(new HealthGeneratorObject(Map), 800));
- Objects.Add(new Tuple<ObjectBase, int>(new MortarObject(Map), 1200));
- Objects.Add(new Tuple<ObjectBase, int>(new KingPenguinObject(Map), 2550));
+ Objects.Add(new Tuple<ObjectBase, int>(new MortarObject(Map), 1750));
+ Objects.Add(new Tuple<ObjectBase, int>(new KingPenguinObject(Map), 3550));
}
public override void Update(float deltaTime, TouchLocation[] touchLocations)
diff --git a/Penguloon/Enemies/DarkRainbowBalloon.cs b/Penguloon/Enemies/DarkRainbowBalloon.cs
index 167aa69..c1349be 100644
--- a/Penguloon/Enemies/DarkRainbowBalloon.cs
+++ b/Penguloon/Enemies/DarkRainbowBalloon.cs
@@ -7,7 +7,7 @@ namespace Penguloon.Enemies
public DarkRainbowBalloon(Map map) : base(map)
{
this.Texture = ContentManager.GetTexture("Enemies/rainbow_dark");
- this.Speed = 85f;
+ this.Speed = 105f;
this.Health = 1;
this.ChildObject = typeof(RainbowBalloon);
this.HealthToTake = 8;
diff --git a/Penguloon/Levels/IceLevel.cs b/Penguloon/Levels/IceLevel.cs
index 4532774..07d57b7 100644
--- a/Penguloon/Levels/IceLevel.cs
+++ b/Penguloon/Levels/IceLevel.cs
@@ -11,7 +11,7 @@ namespace Penguloon.Levels
public IceLevel() : base()
{
this.SplashArt = ContentManager.GetTexture("SplashArt/1");
- this.Money = 12350;
+ this.Money = 123350;
this.Health = 200;
this.ID = 1;
this.MinimumLevel = 1;
diff --git a/Penguloon/Levels/LevelBase.cs b/Penguloon/Levels/LevelBase.cs
index 7d67d70..a9340b2 100644
--- a/Penguloon/Levels/LevelBase.cs
+++ b/Penguloon/Levels/LevelBase.cs
@@ -85,6 +85,7 @@ namespace Penguloon.Levels
public void Restart()
{
+ NewPR = false;
CreateMap();
Map.WaveManager.CurrentWave = 1;
@@ -311,8 +312,11 @@ namespace Penguloon.Levels
}
- public void FinishGame()
+ public void FinishGame(bool exit = false)
{
+ ParentScene.OptionsMenu.State = IngameOptionsState.Hide;
+
+ if (!exit)
SoundManager.PlayGameOverSound();
Finished = true;
diff --git a/Penguloon/Levels/Map.cs b/Penguloon/Levels/Map.cs
index 547c0bc..362b1ba 100644
--- a/Penguloon/Levels/Map.cs
+++ b/Penguloon/Levels/Map.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System;
using Penguloon.Objects;
using Penguloon.Controls;
+using System.Linq;
namespace Penguloon.Levels
{
@@ -71,9 +72,14 @@ namespace Penguloon.Levels
for (int i = 0; i < Enemies.Count; i++)
{
- if (Enemies[i].Texture != null)
- ParentScene.Main.SpriteBatch.Draw(Enemies[i].Texture,
- destinationRectangle: Enemies[i].Box);
+ try
+ {
+ if (Enemies[i] != null)
+ if (Enemies[i].Texture != null)
+ ParentScene.Main.SpriteBatch.Draw(Enemies[i].Texture,
+ destinationRectangle: Enemies[i].Box);
+ }
+ catch { }
}
for (int i = 0; i < Objects.Count; i++)
@@ -151,7 +157,12 @@ namespace Penguloon.Levels
{
for (int i = 0; i < Enemies.Count; i++)
{
- Enemies[i].Update(deltaTime);
+ try
+ {
+ if (Enemies[i] != null)
+ Enemies[i].Update(deltaTime);
+ }
+ catch { }
}
if (ParentScene.Level.Finished) return;
@@ -169,7 +180,7 @@ namespace Penguloon.Levels
if(Enemies.Count == 0 && WaveManager.DoneSpawning && WaveManager.RoundActive)
{
WaveManager.RoundActive = false;
- Level.Money += (WaveManager.CurrentWave * 15);
+ Level.Money += (WaveManager.CurrentWave * 25);
}
}
diff --git a/Penguloon/Levels/SandLevel2.cs b/Penguloon/Levels/SandLevel2.cs
new file mode 100644
index 0000000..5662e84
--- /dev/null
+++ b/Penguloon/Levels/SandLevel2.cs
@@ -0,0 +1,89 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Input.Touch;
+using Penguloon.Enemies;
+using Penguloon.Objects;
+using Penguloon.Scenes;
+
+namespace Penguloon.Levels
+{
+ public class SandLevel2 : LevelBase
+ {
+ public SandLevel2() : base()
+ {
+ this.SplashArt = ContentManager.GetTexture("SplashArt/5");
+ this.Money = 350;
+ this.Health = 200;
+ this.ID = 4;
+ this.MinimumLevel = 20;
+ LevelType = LevelType.Sand;
+ }
+
+ public override void DrawUnique(float deltaTime)
+ {
+ base.DrawUnique(deltaTime);
+ }
+
+ public override void UpdateUnique(float deltaTime, TouchLocation[] touchLocations)
+ {
+ base.UpdateUnique(deltaTime, touchLocations);
+ }
+
+ public override void CreateMap()
+ {
+ Map = new Map(ParentScene, this);
+ Map.SpawnPoint = new Vector2(-1 * Map.TileWidth, 6 * Map.TileHeight);
+ Map.SpawnPointTargetPos = new Vector2(0 * Map.TileWidth, 6 * Map.TileHeight);
+ Map.FinishPoint = new Vector2(-1 * Map.TileWidth, 7 * Map.TileHeight);
+
+ Tile OO = new Tile(0, Direction.None);
+
+ Tile DN = new Tile(6, Direction.Down);
+ Tile RT = new Tile(5, Direction.Right);
+ Tile LT = new Tile(5, Direction.Left);
+ Tile UP = new Tile(6, Direction.Up);
+
+ Tile TR = new Tile(4, Direction.Right);
+ Tile RU = new Tile(4, Direction.Up);
+ Tile DR = new Tile(3, Direction.Right);
+
+ Tile DL = new Tile(1, Direction.Down);
+ Tile RD = new Tile(3, Direction.Down);
+ Tile LD = new Tile(1, Direction.Left);
+ Tile LU = new Tile(2, Direction.Left);
+ Tile TL = new Tile(2, Direction.Up);
+
+ Tile FN = new Tile(5, Direction.Finish);
+
+ Map.TileMap = new Tile[13, 18]
+ {
+ { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ { OO,OO,DR,RT,RT,DL,OO,OO,DR,RT,RT,DL,OO,OO,DR,RT,RT,DL },
+ { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN },
+ { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN },
+ { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN },
+ { RT,RT,TL,OO,OO,TR,RT,RT,TL,OO,OO,TR,RT,RT,TL,OO,OO,DN },
+ { FN,LT,LD,OO,OO,RD,LT,LT,LD,OO,OO,RD,LT,LT,LD,OO,OO,DN },
+ { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN },
+ { OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN,OO,OO,UP,OO,OO,DN },
+ { OO,OO,RU,LT,LT,LU,OO,OO,RU,LT,LT,LU,OO,OO,RU,LT,LT,LU },
+ { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ };
+
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ // { OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO,OO },
+ }
+ }
+} \ No newline at end of file
diff --git a/Penguloon/Levels/WaveManager.cs b/Penguloon/Levels/WaveManager.cs
index d7be1ba..cb17596 100644
--- a/Penguloon/Levels/WaveManager.cs
+++ b/Penguloon/Levels/WaveManager.cs
@@ -43,6 +43,15 @@ namespace Penguloon.Levels
/* 13 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 25), new Tuple<Type, int>(typeof(PurpleBalloon), 7) }, 500));
/* 14 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 25), new Tuple<Type, int>(typeof(PurpleBalloon), 12) }, 500));
/* 15 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(OrangeBalloon), 7), new Tuple<Type, int>(typeof(PurpleBalloon), 20) }, 500));
+
+ /* 16 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 10) }, 500));
+ /* 17 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25) }, 500));
+ /* 18 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 7) }, 500));
+ /* 19 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 25), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 12) }, 500));
+ /* 20 */ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(RainbowBalloon), 7), new Tuple<Type, int>(typeof(DarkRainbowBalloon), 20) }, 500));
+
+ for (int i = 0; i < 400; i++)
+ Waves.Add(new Wave(new List<Tuple<Type, int>>() { new Tuple<Type, int>(typeof(DarkRainbowBalloon), 30 + (i * 10)) }, 300));
}
public void StartSpawningEnemies()
diff --git a/Penguloon/Objects/CannonObject.cs b/Penguloon/Objects/CannonObject.cs
index 41ed9bf..01afab8 100644
--- a/Penguloon/Objects/CannonObject.cs
+++ b/Penguloon/Objects/CannonObject.cs
@@ -7,6 +7,8 @@ namespace Penguloon.Objects
{
class CannonObject : ObjectBase
{
+ int extraPops = 0;
+
public CannonObject(Vector2 position, Map map) : base(position, map)
{
this.Texture = ContentManager.GetTexture("Objects/cannon");
@@ -27,6 +29,28 @@ namespace Penguloon.Objects
this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectCannon);
}
+ public override void CreateUpgrades()
+ {
+ ObjectUpgrade pop3 = new ObjectUpgrade(650, UpgradeType.PopCount, "+1 pop", null, Map.Level);
+ ObjectUpgrade pop2 = new ObjectUpgrade(500, UpgradeType.PopCount, "+1 pop", pop3, Map.Level);
+ ObjectUpgrade pop1 = new ObjectUpgrade(350, UpgradeType.PopCount, "+1 pop", pop2, Map.Level);
+ pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; };
+
+ ObjectUpgrade rng3 = new ObjectUpgrade(650, UpgradeType.Range, "+1 range", null, Map.Level);
+ ObjectUpgrade rng2 = new ObjectUpgrade(500, UpgradeType.Range, "+1 range", rng3, Map.Level);
+ ObjectUpgrade rng1 = new ObjectUpgrade(350, UpgradeType.Range, "+1 range", rng2, Map.Level);
+ rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; };
+
+ ObjectUpgrade spd3 = new ObjectUpgrade(650, UpgradeType.Speed, "+0.1 speed", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(500, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(350, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level);
+ spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; };
+
+ UpgradeList.Add(pop1);
+ UpgradeList.Add(rng1);
+ UpgradeList.Add(spd1);
+ }
+
public override void DrawUnique(float deltaTime)
{
@@ -39,7 +63,7 @@ namespace Penguloon.Objects
public override void SpawnUnique()
{
- Projectiles.Add(new CannonballProjectile(this, this.Rotation));
+ Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops));
}
}
} \ No newline at end of file
diff --git a/Penguloon/Objects/GoldPenguinObject.cs b/Penguloon/Objects/GoldPenguinObject.cs
index 1b15131..5926559 100644
--- a/Penguloon/Objects/GoldPenguinObject.cs
+++ b/Penguloon/Objects/GoldPenguinObject.cs
@@ -7,13 +7,15 @@ namespace Penguloon.Objects
{
public class GoldPenguinObject : ObjectBase
{
+ int extraPops = 0;
+
public GoldPenguinObject(Vector2 position, Map map) : base(position, map)
{
this.Texture = ContentManager.GetTexture("Objects/penguin2");
this.TileSpanX = 1;
this.TileSpanY = 1;
this.Range = Map.TileWidth * 2.5f;
- this.AttackSpeedMS = 500;
+ this.AttackSpeedMS = 700;
this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectGoldPenguin);
}
@@ -23,10 +25,32 @@ namespace Penguloon.Objects
this.TileSpanX = 1;
this.TileSpanY = 1;
this.Range = Map.TileWidth * 2.5f;
- this.AttackSpeedMS = 500;
+ this.AttackSpeedMS = 700;
this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectGoldPenguin);
}
+ public override void CreateUpgrades()
+ {
+ ObjectUpgrade pop3 = new ObjectUpgrade(550, UpgradeType.PopCount, "+1 pop", null, Map.Level);
+ ObjectUpgrade pop2 = new ObjectUpgrade(400, UpgradeType.PopCount, "+1 pop", pop3, Map.Level);
+ ObjectUpgrade pop1 = new ObjectUpgrade(250, UpgradeType.PopCount, "+1 pop", pop2, Map.Level);
+ pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; };
+
+ ObjectUpgrade rng3 = new ObjectUpgrade(550, UpgradeType.Range, "+1 range", null, Map.Level);
+ ObjectUpgrade rng2 = new ObjectUpgrade(400, UpgradeType.Range, "+1 range", rng3, Map.Level);
+ ObjectUpgrade rng1 = new ObjectUpgrade(250, UpgradeType.Range, "+1 range", rng2, Map.Level);
+ rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; };
+
+ ObjectUpgrade spd3 = new ObjectUpgrade(550, UpgradeType.Speed, "+0.1 speed", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(400, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(250, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level);
+ spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; };
+
+ UpgradeList.Add(pop1);
+ UpgradeList.Add(rng1);
+ UpgradeList.Add(spd1);
+ }
+
public override void DrawUnique(float deltaTime)
{
@@ -39,7 +63,7 @@ namespace Penguloon.Objects
public override void SpawnUnique()
{
- Projectiles.Add(new SnowballProjectile(this, this.Rotation));
+ Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops));
}
}
} \ No newline at end of file
diff --git a/Penguloon/Objects/HealthGeneratorObject.cs b/Penguloon/Objects/HealthGeneratorObject.cs
index bce4d78..703cb60 100644
--- a/Penguloon/Objects/HealthGeneratorObject.cs
+++ b/Penguloon/Objects/HealthGeneratorObject.cs
@@ -41,6 +41,17 @@ namespace Penguloon.Objects
Font = ContentManager.GetFont(StaticUIValues.IngameFont);
}
+ public override void CreateUpgrades()
+ {
+ ObjectUpgrade spd3 = new ObjectUpgrade(1850, UpgradeType.Speed, "+15 health/r", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(1200, UpgradeType.Speed, "+15 health/r", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(850, UpgradeType.Speed, "+15 health/r", spd2, Map.Level);
+ spd1.OnClick += delegate { HealthToRegenerate += 15; }; spd2.OnClick += delegate { HealthToRegenerate += 15; }; spd3.OnClick += delegate { HealthToRegenerate += 15; };
+
+ UpgradeList.Add(spd1);
+ }
+
+
public override void DrawUnique(float deltaTime)
{
if (DrawText)
diff --git a/Penguloon/Objects/KingPenguinObject.cs b/Penguloon/Objects/KingPenguinObject.cs
index 721497b..b9cb1b1 100644
--- a/Penguloon/Objects/KingPenguinObject.cs
+++ b/Penguloon/Objects/KingPenguinObject.cs
@@ -7,6 +7,8 @@ namespace Penguloon.Objects
{
public class KingPenguinObject : ObjectBase
{
+ int extraPops = 0;
+
public KingPenguinObject(Vector2 position, Map map) : base(position, map)
{
this.Texture = ContentManager.GetTexture("Objects/penguin3");
@@ -27,6 +29,28 @@ namespace Penguloon.Objects
this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectKingPenguin);
}
+ public override void CreateUpgrades()
+ {
+ ObjectUpgrade pop3 = new ObjectUpgrade(1850, UpgradeType.PopCount, "+1 pop", null, Map.Level);
+ ObjectUpgrade pop2 = new ObjectUpgrade(1200, UpgradeType.PopCount, "+1 pop", pop3, Map.Level);
+ ObjectUpgrade pop1 = new ObjectUpgrade(850, UpgradeType.PopCount, "+1 pop", pop2, Map.Level);
+ pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; };
+
+ ObjectUpgrade rng3 = new ObjectUpgrade(1850, UpgradeType.Range, "+1 range", null, Map.Level);
+ ObjectUpgrade rng2 = new ObjectUpgrade(1200, UpgradeType.Range, "+1 range", rng3, Map.Level);
+ ObjectUpgrade rng1 = new ObjectUpgrade(850, UpgradeType.Range, "+1 range", rng2, Map.Level);
+ rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; };
+
+ ObjectUpgrade spd3 = new ObjectUpgrade(1850, UpgradeType.Speed, "+0.1 speed", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(1200, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(850, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level);
+ spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; };
+
+ UpgradeList.Add(pop1);
+ UpgradeList.Add(rng1);
+ UpgradeList.Add(spd1);
+ }
+
public override void DrawUnique(float deltaTime)
{
@@ -39,7 +63,7 @@ namespace Penguloon.Objects
public override void SpawnUnique()
{
- Projectiles.Add(new SnowballProjectile(this, this.Rotation));
+ Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops));
}
}
} \ No newline at end of file
diff --git a/Penguloon/Objects/MortarObject.cs b/Penguloon/Objects/MortarObject.cs
index c210044..e1d58ca 100644
--- a/Penguloon/Objects/MortarObject.cs
+++ b/Penguloon/Objects/MortarObject.cs
@@ -7,6 +7,8 @@ namespace Penguloon.Objects
{
class MortarObject : ObjectBase
{
+ int extraPops = 0;
+
public MortarObject(Vector2 position, Map map) : base(position, map)
{
this.Texture = ContentManager.GetTexture("Objects/mortar");
@@ -29,6 +31,28 @@ namespace Penguloon.Objects
this.infoText = map.Level.ParentScene.Main.Resources.GetString(Resource.String.ObjectMortar);
}
+ public override void CreateUpgrades()
+ {
+ ObjectUpgrade pop3 = new ObjectUpgrade(850, UpgradeType.PopCount, "+1 pop", null, Map.Level);
+ ObjectUpgrade pop2 = new ObjectUpgrade(700, UpgradeType.PopCount, "+1 pop", pop3, Map.Level);
+ ObjectUpgrade pop1 = new ObjectUpgrade(550, UpgradeType.PopCount, "+1 pop", pop2, Map.Level);
+ pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; };
+
+ ObjectUpgrade rng3 = new ObjectUpgrade(850, UpgradeType.Range, "+1 range", null, Map.Level);
+ ObjectUpgrade rng2 = new ObjectUpgrade(700, UpgradeType.Range, "+1 range", rng3, Map.Level);
+ ObjectUpgrade rng1 = new ObjectUpgrade(550, UpgradeType.Range, "+1 range", rng2, Map.Level);
+ rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; };
+
+ ObjectUpgrade spd3 = new ObjectUpgrade(850, UpgradeType.Speed, "+0.1 speed", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(700, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(550, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level);
+ spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; };
+
+ UpgradeList.Add(pop1);
+ UpgradeList.Add(rng1);
+ UpgradeList.Add(spd1);
+ }
+
public override void DrawUnique(float deltaTime)
{
@@ -41,7 +65,7 @@ namespace Penguloon.Objects
public override void SpawnUnique()
{
- Projectiles.Add(new CannonballProjectile(this, this.Rotation));
+ Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops));
}
}
} \ No newline at end of file
diff --git a/Penguloon/Objects/PenguinObject.cs b/Penguloon/Objects/PenguinObject.cs
index de48e4c..00aa1da 100644
--- a/Penguloon/Objects/PenguinObject.cs
+++ b/Penguloon/Objects/PenguinObject.cs
@@ -8,6 +8,8 @@ namespace Penguloon.Objects
{
class PenguinObject : ObjectBase
{
+ int extraPops = 0;
+
public PenguinObject(Vector2 position, Map map) : base(position, map)
{
this.Texture = ContentManager.GetTexture("Objects/penguin1");
@@ -30,10 +32,24 @@ namespace Penguloon.Objects
public override void CreateUpgrades()
{
- ObjectUpgrade upg = new ObjectUpgrade(12341234, UpgradeType.PopCount, "+2 pop", null, Map.Level);
+ ObjectUpgrade pop3 = new ObjectUpgrade(450, UpgradeType.PopCount, "+1 pop", null, Map.Level);
+ ObjectUpgrade pop2 = new ObjectUpgrade(300, UpgradeType.PopCount, "+1 pop", pop3, Map.Level);
+ ObjectUpgrade pop1 = new ObjectUpgrade(150, UpgradeType.PopCount, "+1 pop", pop2, Map.Level);
+ pop1.OnClick += delegate { extraPops++; }; pop2.OnClick += delegate { extraPops++; }; pop3.OnClick += delegate { extraPops++; };
+
+ ObjectUpgrade rng3 = new ObjectUpgrade(450, UpgradeType.Range, "+1 range", null, Map.Level);
+ ObjectUpgrade rng2 = new ObjectUpgrade(300, UpgradeType.Range, "+1 range", rng3, Map.Level);
+ ObjectUpgrade rng1 = new ObjectUpgrade(150, UpgradeType.Range, "+1 range", rng2, Map.Level);
+ rng1.OnClick += delegate { Range += Map.TileWidth; }; rng2.OnClick += delegate { Range += Map.TileWidth; }; rng3.OnClick += delegate { Range += Map.TileWidth; };
+
+ ObjectUpgrade spd3 = new ObjectUpgrade(450, UpgradeType.Speed, "+0.1 speed", null, Map.Level);
+ ObjectUpgrade spd2 = new ObjectUpgrade(300, UpgradeType.Speed, "+0.1 speed", spd3, Map.Level);
+ ObjectUpgrade spd1 = new ObjectUpgrade(150, UpgradeType.Speed, "+0.1 speed", spd2, Map.Level);
+ spd1.OnClick += delegate { AttackSpeedMS -= 100; }; spd2.OnClick += delegate { AttackSpeedMS -= 100; }; spd3.OnClick += delegate { AttackSpeedMS -= 100; };
- UpgradeList.Add(new ObjectUpgrade(100, UpgradeType.PopCount, "+1 pop", upg, Map.Level));
- UpgradeList.Add(new ObjectUpgrade(100, UpgradeType.Range, "+15 Range", null, Map.Level));
+ UpgradeList.Add(pop1);
+ UpgradeList.Add(rng1);
+ UpgradeList.Add(spd1);
}
public override void DrawUnique(float deltaTime)
@@ -48,7 +64,7 @@ namespace Penguloon.Objects
public override void SpawnUnique()
{
- Projectiles.Add(new SnowballProjectile(this, this.Rotation));
+ Projectiles.Add(new SnowballProjectile(this, this.Rotation, extraPops));
}
}
} \ No newline at end of file
diff --git a/Penguloon/Penguloon.csproj b/Penguloon/Penguloon.csproj
index 4ef5e9b..a5330ce 100644
--- a/Penguloon/Penguloon.csproj
+++ b/Penguloon/Penguloon.csproj
@@ -86,6 +86,7 @@
<Compile Include="Enemies\RainbowBalloon.cs" />
<Compile Include="Enemies\RedBalloon.cs" />
<Compile Include="Enemies\YellowBalloon.cs" />
+ <Compile Include="Levels\SandLevel2.cs" />
<Compile Include="Levels\SandLevel1.cs" />
<Compile Include="Levels\IceLevel3.cs" />
<Compile Include="Levels\IceLevel2.cs" />
diff --git a/Penguloon/Projectiles/ProjectileBase.cs b/Penguloon/Projectiles/ProjectileBase.cs
index 4a4f1a2..6427c35 100644
--- a/Penguloon/Projectiles/ProjectileBase.cs
+++ b/Penguloon/Projectiles/ProjectileBase.cs
@@ -61,21 +61,26 @@ namespace Penguloon.Projectiles
for(int i = 0; i < ParentObject.Map.Enemies.Count; i++)
{
- if (ParentObject.Map.Enemies[i].Dead) continue;
-
- if (projectileRec.Intersects(ParentObject.Map.Enemies[i].Box))
+ try
{
- ParentObject.Map.Enemies[i].GetHit();
-
- this.BaloonsPopped++;
+ if (ParentObject.Map.Enemies[i] != null)
+ if (ParentObject.Map.Enemies[i].Dead) continue;
- // Remove object if it has hit maximum amount of targets
- if(BaloonsPopped >= MaxBalloonPops)
+ if (projectileRec.Intersects(ParentObject.Map.Enemies[i].Box))
{
- ParentObject.Projectiles.Remove(this);
- return;
+ ParentObject.Map.Enemies[i].GetHit();
+
+ this.BaloonsPopped++;
+
+ // Remove object if it has hit maximum amount of targets
+ if (BaloonsPopped >= MaxBalloonPops)
+ {
+ ParentObject.Projectiles.Remove(this);
+ return;
+ }
}
}
+ catch { }
}
}
}
diff --git a/Penguloon/Projectiles/SnowballProjectile.cs b/Penguloon/Projectiles/SnowballProjectile.cs
index 9f72794..c841fa9 100644
--- a/Penguloon/Projectiles/SnowballProjectile.cs
+++ b/Penguloon/Projectiles/SnowballProjectile.cs
@@ -5,13 +5,13 @@ namespace Penguloon.Projectiles
{
public class SnowballProjectile : ProjectileBase
{
- public SnowballProjectile(ObjectBase ParentObject, float RotationAngle) : base(ParentObject, RotationAngle)
+ public SnowballProjectile(ObjectBase ParentObject, float RotationAngle, int extraPops = 0) : base(ParentObject, RotationAngle)
{
this.Texture = ContentManager.GetTexture("Bullets/penguin-ammo");
this.Speed = 250f;
this.RotationSpeed = 5f;
this.Size = new Vector2(ParentObject.Map.TileWidth / 2, ParentObject.Map.TileHeight / 2);
- this.MaxBalloonPops = 1;
+ this.MaxBalloonPops = 1 + extraPops;
Rectangle parentRec = new Rectangle(ParentObject.Position.ToPoint(),
new Point(ParentObject.TileSpanX * ParentObject.Map.TileWidth, ParentObject.TileSpanY * ParentObject.Map.TileHeight));