Exemplo n.º 1
0
 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")));
 }
Exemplo n.º 2
0
 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")));
 }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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++;
            }
        }
Exemplo n.º 5
0
        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
            };
        }