Example #1
0
        public Level(int w, int h, int level, Level parentLevel)
        {
            DirtColor = 322;
            unchecked
            {
                if (level < 0)
                {
                    DirtColor = 222;
                }
                Depth = level;
                W     = w;
                H     = h;
                byte[][] maps;

                if (level == 1)
                {
                    DirtColor = 444;
                }
                if (level == 0)
                {
                    maps = LevelGen.CreateAndValidateTopMap(w, h);
                }
                else if (level < 0)
                {
                    maps           = LevelGen.CreateAndValidateUndergroundMap(w, h, -level);
                    MonsterDensity = 4;
                }
                else
                {
                    maps           = LevelGen.CreateAndValidateSkyMap(w, h); // Sky level
                    MonsterDensity = 4;
                }

                Tiles = maps[0];
                Data  = maps[1];

                if (parentLevel != null)
                {
                    for (int y = 0; y < h; y++)
                    {
                        for (int x = 0; x < w; x++)
                        {
                            if (parentLevel.GetTile(x, y) != Tile.StairsDown)
                            {
                                continue;
                            }
                            SetTile(x, y, Tile.StairsUp, 0);
                            if (level == 0)
                            {
                                SetTile(x - 1, y, Tile.HardRock, 0);
                                SetTile(x + 1, y, Tile.HardRock, 0);
                                SetTile(x, y - 1, Tile.HardRock, 0);
                                SetTile(x, y + 1, Tile.HardRock, 0);
                                SetTile(x - 1, y - 1, Tile.HardRock, 0);
                                SetTile(x - 1, y + 1, Tile.HardRock, 0);
                                SetTile(x + 1, y - 1, Tile.HardRock, 0);
                                SetTile(x + 1, y + 1, Tile.HardRock, 0);
                            }
                            else
                            {
                                SetTile(x - 1, y, Tile.Dirt, 0);
                                SetTile(x + 1, y, Tile.Dirt, 0);
                                SetTile(x, y - 1, Tile.Dirt, 0);
                                SetTile(x, y + 1, Tile.Dirt, 0);
                                SetTile(x - 1, y - 1, Tile.Dirt, 0);
                                SetTile(x - 1, y + 1, Tile.Dirt, 0);
                                SetTile(x + 1, y - 1, Tile.Dirt, 0);
                                SetTile(x + 1, y + 1, Tile.Dirt, 0);
                            }
                        }
                    }
                }

                _entitiesInTiles = new List <Entity> [w * h];
                for (int i = 0; i < w * h; i++)
                {
                    _entitiesInTiles[i] = new List <Entity>();
                }

                if (level == 1)
                {
                    TheWizard aw = new TheWizard
                    {
                        X = w * 8,
                        Y = h * 8
                    };
                    Add(aw);
                }
            }
        }