예제 #1
0
        public override void Paint(Level level)
        {
            if (LevelSave.BiomeGenerated is IceBiome)
            {
                var clip = Painter.Clip;
                Painter.Clip = null;
                Painter.Rect(level, this, 0, Tile.WallB);
                Painter.Clip = clip;
            }

            var t = Tiles.Pick(Tile.Chasm, Tile.WallA, Tile.WallB, Tile.Planks);

            if (Rnd.Chance())
            {
                Painter.Set(level, new Dot(Left + 1, Top + 1), t);
                Painter.Set(level, new Dot(Right - 1, Bottom - 1), t);
            }

            if (Rnd.Chance())
            {
                Painter.Set(level, new Dot(Right - 1, Top + 1), t);
                Painter.Set(level, new Dot(Left + 1, Bottom - 1), t);
            }

            if (Rnd.Chance(10 + Run.Scourge * 5))
            {
                var cn = GetCenter() * 16;
                var c  = Rnd.Int(2, 4);

                for (var i = 0; i < c; i++)
                {
                    var stand = new ScourgedStand();
                    level.Area.Add(stand);
                    stand.Center = cn + new Vector2(16 + (i - c / 2f) * 32, 8);

                    stand.SetItem(Items.CreateAndAdd(Scourge.GenerateItemId(), level.Area), stand);
                }

                return;
            }

            var center = GetCenter() * 16 + new Vector2(8);

            if (Rnd.Chance(5))
            {
                var chest = new ProtoChest();
                level.Area.Add(chest);
                chest.BottomCenter = center;

                return;
            }

            switch (Rnd.Int(GlobalSave.IsTrue(ShopNpc.Gobetta) ? 6 : 5))
            {
            case 0: {
                for (var i = 0; i < Rnd.Int(1, 3); i++)
                {
                    Items.CreateAndAdd("bk:heart", level.Area).Center = center;
                }

                break;
            }

            case 1: {
                for (var i = 0; i < Rnd.Int(1, 4); i++)
                {
                    Items.CreateAndAdd("bk:shield", level.Area).Center = center;
                }

                break;
            }

            case 2: {
                var stand = new ItemStand();
                level.Area.Add(stand);
                stand.BottomCenter = center;
                stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Treasure), level.Area), null);

                break;
            }

            case 3: {
                var a = Rnd.Chance();
                var c = Rnd.Int(1, a ? 3 : 4);

                for (var i = 0; i < c; i++)
                {
                    var chest = a ? (Chest) new StoneChest() : new RedChest();
                    level.Area.Add(chest);
                    chest.BottomCenter = center - new Vector2((c / 2f - i) * 20, 0);
                }

                break;
            }

            case 4: {
                for (var i = 0; i < Rnd.Int(6, 12); i++)
                {
                    Items.CreateAndAdd("bk:coin", level.Area).Center = center;
                }

                break;
            }

            case 5: {
                Gobetta.Place(GetTileCenter() * 16 + new Vector2(8, 8), level.Area);
                break;
            }
            }
        }
예제 #2
0
 public override void Paint(Level level)
 {
     base.Paint(level);
     Gobetta.Place(GetTileCenter() * 16 + new Vector2(8, 8), level.Area);
 }
예제 #3
0
        public override void Paint(Level level)
        {
            if (LevelSave.BiomeGenerated is IceBiome)
            {
                var clip = Painter.Clip;
                Painter.Clip = null;
                Painter.Rect(level, this, 0, Tile.WallB);
                Painter.Clip = clip;
            }

            Painter.Rect(level, this, 1, Tile.WallA);

            var exit = new HiddenExit {
                id = "dm"
            };

            level.Area.Add(exit);
            exit.BottomCenter = GetCenter() * 16 + new Vector2(8, 8);

            var points = new List <Vector2>();
            var a      = false;

            if (Rnd.Chance(60))
            {
                a = true;
                points.Add(new Vector2(Left + 4.5f, Top + 4.5f) * 16);
            }

            if (Rnd.Chance(60))
            {
                a = true;
                points.Add(new Vector2(Right - 3.5f, Bottom - 4f) * 16);
            }

            if (Rnd.Chance(60))
            {
                a = true;
                points.Add(new Vector2(Right - 3.5f, Top + 4.5f) * 16);
            }

            if (!a || Rnd.Chance(60))
            {
                points.Add(new Vector2(Left + 4.5f, Bottom - 4f) * 16);
            }

            var types = new List <byte> {
                /*0, 1, 2, 3,*/ 4                 /*5, 6, 7, 8*/
            };

            if (GlobalSave.IsTrue(ShopNpc.Roger))
            {
                types.Add(0);
            }

            if (GlobalSave.IsTrue(ShopNpc.Boxy))
            {
                types.Add(1);
            }

            if (GlobalSave.IsTrue(ShopNpc.Snek))
            {
                types.Add(2);
            }

            if (GlobalSave.IsTrue(ShopNpc.Vampire))
            {
                types.Add(5);
            }

            if (GlobalSave.IsTrue(ShopNpc.Nurse))
            {
                types.Add(6);
            }

            if (GlobalSave.IsTrue(ShopNpc.Elon))
            {
                types.Add(7);
            }

            if (GlobalSave.IsTrue(ShopNpc.Duck))
            {
                types.Add(8);
            }

            foreach (var p in points)
            {
                var i  = Rnd.Int(types.Count);
                var tp = types[i];
                types.RemoveAt(i);

                switch (tp)
                {
                case 0: {
                    Roger.Place(p, level.Area);
                    break;
                }

                case 1: {
                    Boxy.Place(p, level.Area);
                    break;
                }

                case 2: {
                    Snek.Place(p, level.Area);
                    break;
                }

                case 3: {
                    Gobetta.Place(p, level.Area);
                    break;
                }

                case 4: {
                    TrashGoblin.Place(p, level.Area);
                    break;
                }

                case 5: {
                    Vampire.Place(p, level.Area);
                    break;
                }

                case 6: {
                    Nurse.Place(p, level.Area);
                    break;
                }

                case 7: {
                    DungeonElon.Place(p, level.Area);
                    break;
                }

                case 8: {
                    DungeonDuck.Place(p, level.Area);
                    break;
                }
                }

                if (types.Count == 0)
                {
                    break;
                }
            }
        }