public static void LoadAssets(Engine engine) { // items //Utils.LoadAnimation(engine, "potions", Path.Combine("items", "potions.png"), 17, 11); Utils.LoadAnimation(engine, "items", Path.Combine("items", "items.png"), 14, 30); // audio engine.LoadAsset("sound_drink", new AudioAsset(Path.Combine("sound", "inventory", "bottle.ogg"))); engine.LoadAsset("sound_powerup", new AudioAsset(Path.Combine("sound", "inventory", "powerup.ogg"))); }
public static void LoadAssets(Engine engine) { // set the base path for assets Asset.BasePath = "..\\..\\Assets"; // misc music engine.LoadAsset("sound_soundtrack", new AudioAsset(Path.Combine("sound", "misc", "soundtrack.ogg"), true)); engine.LoadAsset("sound_levelup", new AudioAsset(Path.Combine("sound", "misc", "levelup.ogg"))); // base engine.LoadAsset("logo", new SpriteAsset("Futuridium.png")); engine.LoadAsset("sound_death", new AudioAsset(Path.Combine("sound", "NPC", "death.ogg"))); // animated player Utils.LoadAnimation(engine, "player_animated", Path.Combine("characters", "player.png"), 3, 4); Player.Init(engine); // enemies Utils.LoadAnimation(engine, "scorpion", Path.Combine("characters", "scorpion.png"), 6, 4); Utils.LoadAnimation(engine, "goblins", Path.Combine("characters", "goblins.png"), 12, 8); Utils.LoadAnimation(engine, "ogre", Path.Combine("characters", "ogre.png"), 4, 4); Utils.LoadAnimation(engine, "snake", Path.Combine("characters", "snake.png"), 4, 4); // bosses // spells engine.LoadAsset("bullet", new SpriteAsset(Path.Combine("spells", "singleBullet.png"))); engine.LoadAsset("sound_energy_bullet", new AudioAsset(Path.Combine("sound", "battle", "energy_bullet.ogg"))); engine.LoadAsset("orb", new SpriteAsset(Path.Combine("spells", "bullets.png"), 436, 327, 64, 64)); engine.LoadAsset("sound_energy_orb", new AudioAsset(Path.Combine("sound", "battle", "energy_bullet.ogg"))); engine.LoadAsset("sound_drivex", new AudioAsset(Path.Combine("sound", "battle", "drivex.ogg"))); // decorations engine.LoadAsset("blood", new SpriteAsset(Path.Combine("background", "blood.png"))); engine.LoadAsset("skull", new SpriteAsset(Path.Combine("background", "skull.png"))); engine.LoadAsset("sadskull", new SpriteAsset(Path.Combine("background", "sadskull.png"))); // background LoadBackground(engine); // doors engine.LoadAsset("top_door", new SpriteAsset(Path.Combine("background", "top_door.png"), 0, 0, 45, 70)); engine.LoadAsset("bottom_door", new SpriteAsset(Path.Combine("background", "bottom_door.png"), 51 * 4 + 1, 0, 45, 70)); engine.LoadAsset("left_door", new SpriteAsset(Path.Combine("background", "left_door.png"), 0, 51 * 4 + 1, 70, 45)); engine.LoadAsset("right_door", new SpriteAsset(Path.Combine("background", "right_door.png"), 0, 0, 70, 45)); engine.LoadAsset("escape_floor", new SpriteAsset(Path.Combine("background", "escape_floor.png"))); engine.LoadAsset("sound_door_open", new AudioAsset(Path.Combine("sound", "world", "door_open.ogg"))); engine.LoadAsset("sound_door_close", new AudioAsset(Path.Combine("sound", "world", "door_close.ogg"))); }
private void StartEvent(object sender) { CurrentSprite = (SpriteAsset)Engine.GetAsset("player_animated_2_0"); //var fWidth = Width; //var fHeight = Height; SpellManager.Mask = (GameObject enemy) => enemy is Enemy; X = Engine.Width / 2 - Width / 2; Y = Engine.Height / 2 - Height / 2; Order = 9; redWindow = new RectangleObject(Engine.Width, Engine.Height) { Name = "redWindow", Color = Color.FromArgb(155, 255, 0, 0), X = 0, Y = 0, Fill = true, Order = Order + 1, IgnoreCamera = true }; redWindow.Box.scale = Vector2.Zero; Engine.SpawnObject("redWindow", redWindow); // Load animations var idleName = GetMovingStateString(MovingState.Idle); var movingLeftName = GetMovingStateString(MovingState.MovingLeft); var movingRightName = GetMovingStateString(MovingState.MovingRight); var movingDownName = GetMovingStateString(MovingState.MovingDown); var movingUpName = GetMovingStateString(MovingState.MovingUp); var baseSpriteName = "player_animated"; AddAnimation(idleName, Utils.GetAssetName(baseSpriteName, 1, 0), 5).Loop = false; AddAnimation(movingRightName, Utils.GetAssetName(baseSpriteName, 0, 2, 3), 5); AddAnimation(movingLeftName, Utils.GetAssetName(baseSpriteName, 0, 1, 3), 5); AddAnimation(movingUpName, Utils.GetAssetName(baseSpriteName, 0, 3, 3), 5); AddAnimation(movingDownName, Utils.GetAssetName(baseSpriteName, 0, 0, 3), 5); //CalculateAnimationHitBoxes(); }
private void LoadEnemies() { var idleName = Character.GetMovingStateString(Character.MovingState.Idle); var movingLeftName = Character.GetMovingStateString(Character.MovingState.MovingLeft); var movingRightName = Character.GetMovingStateString(Character.MovingState.MovingRight); var movingDownName = Character.GetMovingStateString(Character.MovingState.MovingDown); var movingUpName = Character.GetMovingStateString(Character.MovingState.MovingUp); var goblinSpriteName = $"goblins"; // same for others // ROOM TYPE: 0 var mageGoblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 1, 4)[0]); var mageGoblin = new Enemy("enemy_magegoblin", "Mage Goblin", "magegoblin", mageGoblinIdleSprite.Width, mageGoblinIdleSprite.Height) { Level0 = { MaxHp = 100, Attack = 30, XpReward = 35, Speed = 110f, SpellCd = 0.65f, SpellSpeed = 120f, SpellRange = 600, SpellSize = 12, SpellList = new List <Type> { typeof(Bullet) }, DropModifier = 1f } }; mageGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 1, 4), 5, Engine).Loop = false; mageGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 0, 6, 3), 5, Engine); mageGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 0, 5, 3), 5, Engine); mageGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 0, 7, 3), 5, Engine); mageGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 0, 4, 3), 5, Engine); mageGoblin.CalculateAnimationHitBoxes(); var goblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 4, 0)[0]); var goblin = new Enemy("enemy_goblin", "Goblin", "goblin", goblinIdleSprite.Width, goblinIdleSprite.Height) { Level0 = { MaxHp = 70, Attack = 40, XpReward = 18, Speed = 150f, DropModifier = 0.55f } }; goblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 4, 0), 5, Engine).Loop = false; goblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 3, 2, 3), 5, Engine); goblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 3, 1, 3), 5, Engine); goblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 3, 3, 3), 5, Engine); goblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 3, 0, 3), 5, Engine); goblin.CalculateAnimationHitBoxes(); var undeadGoblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 1, 0)[0]); var undeadGoblin = new Enemy("enemy_undeadgoblin", "Undead Goblin", "undeadgoblin", undeadGoblinIdleSprite.Width, undeadGoblinIdleSprite.Height) { Level0 = { MaxHp = 100, Attack = 60, XpReward = 20, Speed = 140f, DropModifier = 0.65f } }; undeadGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 1, 0), 5, Engine).Loop = false; undeadGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 0, 2, 3), 5, Engine); undeadGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 0, 1, 3), 5, Engine); undeadGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 0, 3, 3), 5, Engine); undeadGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 0, 0, 3), 5, Engine); undeadGoblin.CalculateAnimationHitBoxes(); var mummyGoblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 7, 4)[0]); var mummyGoblin = new Enemy("enemy_mummygoblin", "Mummy Goblin", "mummygoblin", mummyGoblinIdleSprite.Width, mummyGoblinIdleSprite.Height) { Level0 = { MaxHp = 115, Attack = 70, XpReward = 20, Speed = 130f, DropModifier = 0.75f } }; mummyGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 7, 4), 5, Engine).Loop = false; mummyGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 6, 6, 3), 5, Engine); mummyGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 6, 5, 3), 5, Engine); mummyGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 6, 7, 3), 5, Engine); mummyGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 6, 4, 3), 5, Engine); mummyGoblin.CalculateAnimationHitBoxes(); var warriorGoblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 10, 0)[0]); var warriorGoblin = new Enemy("enemy_warriorgoblin", "Warrior Goblin", "warriorgoblin", warriorGoblinIdleSprite.Width, warriorGoblinIdleSprite.Height) { Level0 = { MaxHp = 120, Attack = 40, XpReward = 30, Speed = 140f, SpellCd = 1f, SpellSpeed = 110f, SpellRange = 400, SpellSize = 15, SpellList = new List <Type> { typeof(Bullet) }, DropModifier = 0.8f } }; warriorGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 10, 0), 5, Engine).Loop = false; warriorGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 9, 2, 3), 5, Engine); warriorGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 9, 1, 3), 5, Engine); warriorGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 9, 3, 3), 5, Engine); warriorGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 9, 0, 3), 5, Engine); warriorGoblin.CalculateAnimationHitBoxes(); var captainGoblinIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 7, 0)[0]); var captainGoblin = new Enemy("enemy_captaingoblin", "Captain Goblin", "captaingoblin", captainGoblinIdleSprite.Width, captainGoblinIdleSprite.Height) { Level0 = { MaxHp = 160, Attack = 55, XpReward = 35, Speed = 160f, SpellCd = 1.2f, SpellSpeed = 120f, SpellRange = 500, SpellSize = 16, SpellList = new List <Type> { typeof(Bullet) }, DropModifier = 1f } }; captainGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 7, 0), 5, Engine).Loop = false; captainGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 6, 2, 3), 5, Engine); captainGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 6, 1, 3), 5, Engine); captainGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 6, 3, 3), 5, Engine); captainGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 6, 0, 3), 5, Engine); captainGoblin.CalculateAnimationHitBoxes(); var scorpionSpriteName = $"scorpion"; var scorpionIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(scorpionSpriteName, 0, 0)[0]); var scorpion = new Enemy("enemy_scorpion", "Scorpion", "scorpion", scorpionIdleSprite.Width, scorpionIdleSprite.Height) { Level0 = { MaxHp = 60, Attack = 40, XpReward = 15, Speed = 170f, DropModifier = 0.5f } }; scorpion.AddAnimation(idleName, Utils.GetAssetName(scorpionSpriteName, 0, 0), 5, Engine).Loop = false; scorpion.AddAnimation(movingRightName, Utils.GetAssetName(scorpionSpriteName, 0, 3, 6), 5, Engine); scorpion.AddAnimation(movingLeftName, Utils.GetAssetName(scorpionSpriteName, 0, 2, 6), 5, Engine); scorpion.AddAnimation(movingUpName, Utils.GetAssetName(scorpionSpriteName, 0, 1, 6), 5, Engine); scorpion.AddAnimation(movingDownName, Utils.GetAssetName(scorpionSpriteName, 0, 0, 6), 5, Engine); scorpion.CalculateAnimationHitBoxes(); var snakeSpriteName = $"snake"; var snakeIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(snakeSpriteName, 0, 0)[0]); var snake = new Enemy("enemy_snake", "Snake", "snake", snakeIdleSprite.Width, snakeIdleSprite.Height) { Level0 = { MaxHp = 50, Attack = 50, XpReward = 15, Speed = 160f, DropModifier = 0.5f } }; snake.AddAnimation(idleName, Utils.GetAssetName(snakeSpriteName, 0, 0), 5, Engine).Loop = false; snake.AddAnimation(movingRightName, Utils.GetAssetName(snakeSpriteName, 0, 2, 4), 5, Engine); snake.AddAnimation(movingLeftName, Utils.GetAssetName(snakeSpriteName, 0, 1, 4), 5, Engine); snake.AddAnimation(movingUpName, Utils.GetAssetName(snakeSpriteName, 0, 3, 4), 5, Engine); snake.AddAnimation(movingDownName, Utils.GetAssetName(snakeSpriteName, 0, 0, 4), 5, Engine); snake.CalculateAnimationHitBoxes(); enemiesSpawnRate.Add(new Dictionary <Enemy, float>(3)); enemiesSpawnRate[0][mageGoblin] = 0.8f; enemiesSpawnRate[0][mummyGoblin] = 0.8f; enemiesSpawnRate[0][warriorGoblin] = 0.8f; enemiesSpawnRate[0][goblin] = 1.0f; enemiesSpawnRate[0][undeadGoblin] = 0.9f; enemiesSpawnRate[0][captainGoblin] = 0.75f; enemiesSpawnRate[0][scorpion] = 1.66f; enemiesSpawnRate[0][snake] = 1.66f; // ROOM TYPE: 1 var kingGoblinSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(goblinSpriteName, 4, 4)[0]); var kingGoblin = new Enemy("enemy_kinggoblin", "King Goblin", "kinggoblin", kingGoblinSprite.Width, kingGoblinSprite.Height) { Level0 = { MaxHp = 500, Attack = 140, XpReward = 220, Speed = 170, SpellCd = 0.8f, SpellSpeed = 300f, SpellRange = 800, SpellSize = 14, SpellList = new List <Type> { typeof(Bullet) }, DropModifier = 6f } }; kingGoblin.AddAnimation(idleName, Utils.GetAssetName(goblinSpriteName, 4, 4), 5, Engine).Loop = false; kingGoblin.AddAnimation(movingRightName, Utils.GetAssetName(goblinSpriteName, 3, 6, 3), 5, Engine); kingGoblin.AddAnimation(movingLeftName, Utils.GetAssetName(goblinSpriteName, 3, 5, 3), 5, Engine); kingGoblin.AddAnimation(movingUpName, Utils.GetAssetName(goblinSpriteName, 3, 7, 3), 5, Engine); kingGoblin.AddAnimation(movingDownName, Utils.GetAssetName(goblinSpriteName, 3, 4, 3), 5, Engine); kingGoblin.CalculateAnimationHitBoxes(); var ogreSpriteName = "ogre"; var ogreIdleSprite = (SpriteAsset)Engine.GetAsset(Utils.GetAssetName(ogreSpriteName, 0, 0)[0]); var ogre = new Enemy("enemy_ogre", "Ogre", "ogre", ogreIdleSprite.Width, ogreIdleSprite.Height) { Level0 = { MaxHp = 600, Attack = 220, XpReward = 200, Speed = 130, SpellCd = 2f, SpellSpeed = 200f, SpellRange = 2200, // :) SpellSize = 35, SpellList = new List <Type> { typeof(Bullet) }, DropModifier = 5f } }; ogre.AddAnimation(idleName, Utils.GetAssetName(ogreSpriteName, 0, 0), 5, Engine).Loop = false; ogre.AddAnimation(movingRightName, Utils.GetAssetName(ogreSpriteName, 0, 2, 4), 5, Engine); ogre.AddAnimation(movingLeftName, Utils.GetAssetName(ogreSpriteName, 0, 1, 4), 5, Engine); ogre.AddAnimation(movingUpName, Utils.GetAssetName(ogreSpriteName, 0, 3, 4), 5, Engine); ogre.AddAnimation(movingDownName, Utils.GetAssetName(ogreSpriteName, 0, 0, 4), 5, Engine); ogre.CalculateAnimationHitBoxes(); enemiesSpawnRate.Add(new Dictionary <Enemy, float>(2)); enemiesSpawnRate[1][kingGoblin] = 1f; enemiesSpawnRate[1][ogre] = 1f; var count = 0; foreach (var list in enemiesSpawnRate) { rndRanges.Add(0); foreach (var pair in list) { rndRanges[count] += pair.Value; enemiesList[pair.Key.CharacterName] = pair.Key; } count++; } }
public static void Initialize(Engine engine) { var potionScale = new Vector2(1.33f, 1.33f); // HP var minorHpPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 0, 3)[0]); MinorHpPotion = new Item(minorHpPotionAsset.Width, minorHpPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Hp += owner.Level.MaxHp * 0.07f, Item.EffectType.Instant) }, ItemName = "Minor HP Potion", Description = "Phew there, some health points for you.", ActivateSound = "drink", CurrentSprite = minorHpPotionAsset, Scale = potionScale }; //MinorHpPotion.AddAnimation("base", Utils.GetAssetName("potions", 0, 1), 7, engine); //MinorHpPotion.CurrentAnimation = "base"; var hpPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 7, 2)[0]); HpPotion = new Item(hpPotionAsset.Width, hpPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Hp += owner.Level.MaxHp * 0.14f, Item.EffectType.Instant) }, ItemName = "HP Potion", Description = "Feels good!", ActivateSound = "drink", CurrentSprite = hpPotionAsset, Scale = potionScale }; var mediumHpPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 7, 3)[0]); MediumHpPotion = new Item(mediumHpPotionAsset.Width, mediumHpPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Hp += owner.Level.MaxHp * 0.24f, Item.EffectType.Instant) }, ItemName = "Medium HP Potion", Description = "+24% hp", ActivateSound = "drink", CurrentSprite = mediumHpPotionAsset, Scale = potionScale }; var bigHpPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 0, 2)[0]); BigHpPotion = new Item(bigHpPotionAsset.Width, bigHpPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Hp += owner.Level.MaxHp * 0.4f, Item.EffectType.Instant) }, ItemName = "Big HP Potion", Description = "Gnom gnom gnom gnom", ActivateSound = "drink", CurrentSprite = bigHpPotionAsset, Scale = potionScale }; // ENERGY var minorEnergyPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 3, 3)[0]); MinorEnergyPotion = new Item(minorEnergyPotionAsset.Width, minorEnergyPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Energy += owner.Level.MaxEnergy * 0.07f, Item.EffectType.Instant) }, ItemName = "Minor Energy Potion", Description = "Spam time?", ActivateSound = "drink", CurrentSprite = minorEnergyPotionAsset, Scale = potionScale }; var energyPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 10, 2)[0]); EnergyPotion = new Item(energyPotionAsset.Width, energyPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Energy += owner.Level.MaxEnergy * 0.14f, Item.EffectType.Instant) }, ItemName = "Energy Potion", Description = "More energy for you", ActivateSound = "drink", CurrentSprite = energyPotionAsset, Scale = potionScale }; var mediumEnergyPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 10, 3)[0]); MediumEnergyPotion = new Item(mediumEnergyPotionAsset.Width, mediumEnergyPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Energy += owner.Level.MaxEnergy * 0.24f, Item.EffectType.Instant) }, ItemName = "Medium Energy Potion", Description = "Mmmhana", ActivateSound = "drink", CurrentSprite = mediumEnergyPotionAsset, Scale = potionScale }; var bigEnergyPotionAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 3, 2)[0]); BigEnergyPotion = new Item(bigEnergyPotionAsset.Width, bigEnergyPotionAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => owner.Level.Energy += owner.Level.MaxEnergy * 0.4f, Item.EffectType.Instant) }, ItemName = "Big Energy Potion", Description = "Eeeeeeeeeeeeeeeeeeeeeeeenergy!!!", ActivateSound = "drink", CurrentSprite = bigEnergyPotionAsset, Scale = potionScale }; // POWERUPS var blackRockAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 13, 15)[0]); BlackRock = new Item(blackRockAsset.Width, blackRockAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>(owner => { owner.Level.Attack *= 1.15f; owner.Level.Luck *= 1.05f; owner.Level.MaxEnergy *= 1.05f; owner.Level.SpellCd *= 0.95f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>(owner => { owner.Level.Hp += owner.Level.MaxHp * 0.33f; owner.Level.Energy += owner.Level.MaxEnergy * 0.33f; }, Item.EffectType.Instant) }, ItemName = "Black Rock", Description = "Glows with energy... emits a weird obscure light", ActivateSound = "powerup", CurrentSprite = blackRockAsset, Scale = potionScale }; var usainBoltAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 4, 14)[0]); UsainBolt = new Item(usainBoltAsset.Width, usainBoltAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Speed *= 1.2f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Hp += owner.Level.MaxHp * 0.1f; }, Item.EffectType.Instant) }, ItemName = "Usain Bolt", Description = "100m in 9.58s", ActivateSound = "powerup", CurrentSprite = usainBoltAsset, Scale = potionScale }; var johnnysMindAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 9, 18)[0]); JohnnysMind = new Item(johnnysMindAsset.Width, johnnysMindAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>(owner => { var mod = 0.2f; var choose = new Random(Guid.NewGuid().GetHashCode()).Next(6); var buff = new Buff { Type = Buff.BuffType.PerRoom }; switch (choose) { case 0: buff.Stat = "attack"; buff.Value = owner.Level.Attack * mod; break; case 1: buff.Stat = "speed"; buff.Value = owner.Level.Speed * mod; break; case 2: buff.Stat = "spellCd"; buff.Value = -owner.Level.SpellCd * mod; break; case 3: buff.Stat = "spellRange"; buff.Value = owner.Level.SpellRange * mod; break; case 4: buff.Stat = "spellSize"; buff.Value = owner.Level.SpellSize * mod; break; case 5: buff.Stat = "spellSpeed"; buff.Value = owner.Level.SpellSpeed * mod; break; } owner.LevelManager.AddBuff(buff); }, Item.EffectType.PerRoom), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Luck *= 1.1f; }, Item.EffectType.Persistent) }, ItemName = "Johnny's mind", Description = "The random one", ActivateSound = "powerup", CurrentSprite = johnnysMindAsset, Scale = potionScale }; var growthHormoneAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 8, 4)[0]); GrowthHormone = new Item(growthHormoneAsset.Width, growthHormoneAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>(owner => { owner.Level.Attack *= 1.22f; owner.Level.Size += 0.20f; owner.Level.Speed *= 0.95f; owner.Level.SpellSize *= 1.25f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Hp -= owner.Level.MaxHp * 0.2f; }, Item.EffectType.Instant), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Hp += owner.Level.MaxHp * 0.01f; }, Item.EffectType.PerRoom) }, ItemName = "Growth Hormone", Description = "Stimulates growth, cell reproduction, and cell regeneration.", ActivateSound = "powerup", CurrentSprite = growthHormoneAsset, Scale = potionScale * 2f }; var drGregoryHouseAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 7, 22)[0]); DrGregoryHouse = new Item(drGregoryHouseAsset.Width, drGregoryHouseAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.MaxHp *= 1.1f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Hp = owner.Level.MaxHp; }, Item.EffectType.Instant), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Hp += owner.Level.MaxHp * 0.03f; }, Item.EffectType.PerRoom) }, ItemName = "Dr. Gregory House", Description = "Want some vicodin?", ActivateSound = "powerup", CurrentSprite = drGregoryHouseAsset, Scale = potionScale }; var energyAmuletAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 8, 19)[0]); EnergyAmulet = new Item(energyAmuletAsset.Width, energyAmuletAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.MaxEnergy *= 1.1f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Energy = owner.Level.MaxEnergy; }, Item.EffectType.Instant), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Energy += owner.Level.MaxEnergy * 0.03f; }, Item.EffectType.PerRoom) }, ItemName = "Energy Amulet", Description = "You feel full of energy!", ActivateSound = "powerup", CurrentSprite = energyAmuletAsset, Scale = potionScale }; var manaStoneAsset = (SpriteAsset)engine.GetAsset(Utils.GetAssetName("items", 2, 15)[0]); ManaStone = new Item(manaStoneAsset.Width, manaStoneAsset.Height) { Effects = { Tuple.Create <Action <Character>, Item.EffectType>(owner => { owner.Level.Attack *= 1.05f; owner.Level.SpellEnergyModifier *= 0.9f; }, Item.EffectType.Persistent), Tuple.Create <Action <Character>, Item.EffectType>( owner => { owner.Level.Energy -= owner.Level.MaxEnergy * 0.03f; }, Item.EffectType.PerRoom) }, ItemName = "Mana Stone", Description = "Mana? What's 'mana'? Why is this thing leeching my energy??", ActivateSound = "powerup", CurrentSprite = manaStoneAsset, Scale = potionScale }; }