public void RenderSetPiece(World world, IntPoint pos) { int[,] p = new int[Size, Size]; const double SCALE = 5.5; for (int x = 0; x < Size; x++) //Lava { double t = (double)x / Size * Math.PI; double x_ = t / Math.Sqrt(2) - Math.Sin(t) / (SCALE * Math.Sqrt(2)); double y1 = t / Math.Sqrt(2) - 2 * Math.Sin(t) / (SCALE * Math.Sqrt(2)); double y2 = t / Math.Sqrt(2) + Math.Sin(t) / (SCALE * Math.Sqrt(2)); y1 /= Math.PI / Math.Sqrt(2); y2 /= Math.PI / Math.Sqrt(2); int y1_ = (int)Math.Ceiling(y1 * Size); int y2_ = (int)Math.Floor(y2 * Size); for (int i = y1_; i < y2_; i++) { p[x, i] = 1; } } for (int x = 0; x < Size; x++) //Floor { for (int y = 0; y < Size; y++) { if (p[x, y] == 1 && rand.Next() % 5 == 0) { p[x, y] = 2; } } } int r = rand.Next(0, 4); //Rotation for (int i = 0; i < r; i++) { p = SetPieces.rotateCW(p); } p[20, 20] = 2; for (int x = 0; x < Size; x++) //Rendering { for (int y = 0; y < Size; y++) { if (p[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Lava; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (p[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Lava; tile.ObjType = Floor; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } } } Entity demon = Entity.Resolve(0x668); demon.Move(pos.X + 20.5f, pos.Y + 20.5f); world.EnterWorld(demon); Container container = new Container(0x0501, null, false); int count = rand.Next(5, 8); List <Item> items = new List <Item>(); while (items.Count < count) { Item item = chest.GetRandomLoot(rand); if (item != null) { items.Add(item); } } for (int i = 0; i < items.Count; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + 20.5f, pos.Y + 20.5f); world.EnterWorld(container); }
public void RenderSetPiece(World world, IntPoint pos) { var p = new int[Size, Size]; const double SCALE = 5.5; for (int x = 0; x < Size; x++) //Lava { double t = (double)x / Size * Math.PI; double x_ = t / Math.Sqrt(2) - Math.Sin(t) / (SCALE * Math.Sqrt(2)); double y1 = t / Math.Sqrt(2) - 2 * Math.Sin(t) / (SCALE * Math.Sqrt(2)); double y2 = t / Math.Sqrt(2) + Math.Sin(t) / (SCALE * Math.Sqrt(2)); y1 /= Math.PI / Math.Sqrt(2); y2 /= Math.PI / Math.Sqrt(2); var y1_ = (int)Math.Ceiling(y1 * Size); var y2_ = (int)Math.Floor(y2 * Size); for (int i = y1_; i < y2_; i++) { p[x, i] = 1; } } for (int x = 0; x < Size; x++) //Floor { for (int y = 0; y < Size; y++) { if (p[x, y] == 1 && rand.Next() % 5 == 0) { p[x, y] = 2; } } } int r = rand.Next(0, 4); //Rotation for (int i = 0; i < r; i++) { p = SetPieces.rotateCW(p); } p[20, 20] = 2; XmlData dat = world.Manager.GameData; for (int x = 0; x < Size; x++) //Rendering { for (int y = 0; y < Size; y++) { if (p[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Lava]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (p[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Lava]; tile.ObjType = dat.IdToObjectType[Floor]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } } } Entity demon = Entity.Resolve(world.Manager, "Red Demon"); demon.Move(pos.X + 20.5f, pos.Y + 20.5f); world.EnterWorld(demon); var container = new Container(world.Manager, 0x0501, null, false); Item[] items = chest.GetLoots(world.Manager, 5, 8).ToArray(); for (int i = 0; i < items.Length; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + 20.5f, pos.Y + 20.5f); world.EnterWorld(container); }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[25, 26]; for (int x = 2; x < 23; x++) //Floor { for (int y = 1; y < 24; y++) { t[x, y] = rand.Next() % 10 == 0 ? 0 : 1; } } for (int y = 1; y < 24; y++) //Perimeters { t[2, y] = t[22, y] = 2; } for (int x = 2; x < 23; x++) { t[x, 23] = 2; } for (int x = 0; x < 3; x++) { for (int y = 0; y < 3; y++) { t[x + 1, y] = t[x + 21, y] = 2; } } for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { if ((x == 0 && y == 0) || (x == 0 && y == 4) || (x == 4 && y == 0) || (x == 4 && y == 4)) { continue; } t[x, y + 21] = t[x + 20, y + 21] = 2; } } for (int y = 0; y < 6; y++) //Pillars { t[9, 4 + 3 * y] = t[15, 4 + 3 * y] = 4; } for (int x = 0; x < 25; x++) //Corruption { for (int y = 0; y < 26; y++) { if (t[x, y] == 1 || t[x, y] == 0) { continue; } double p = rand.NextDouble(); if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } int r = rand.Next(0, 4); for (int i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); XmlData dat = world.Manager.GameData; for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[WallA]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; world.Map[x + pos.X, y + pos.Y] = tile; Entity wall = Entity.Resolve(world.Manager, dat.IdToObjectType[WallB]); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 4) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[PillarA]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[PillarB]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } } } //Boss Entity lich = Entity.Resolve(world.Manager, "Lich"); lich.Move(pos.X + Size / 2, pos.Y + Size / 2); world.EnterWorld(lich); }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[31, 40]; for (int x = 0; x < 13; x++) //Moats { for (int y = 0; y < 13; y++) { if ((x == 0 && (y < 3 || y > 9)) || (y == 0 && (x < 3 || x > 9)) || (x == 12 && (y < 3 || y > 9)) || (y == 12 && (x < 3 || x > 9))) { continue; } t[x + 0, y + 0] = t[x + 18, y + 0] = 2; t[x + 0, y + 27] = t[x + 18, y + 27] = 2; } } for (int x = 3; x < 28; x++) { for (int y = 3; y < 37; y++) { if (x < 6 || x > 24 || y < 6 || y > 33) { t[x, y] = 2; } } } for (int x = 7; x < 24; x++) //Floor { for (int y = 7; y < 33; y++) { t[x, y] = rand.Next() % 3 == 0 ? 0 : 1; } } for (int x = 0; x < 7; x++) //Perimeter { for (int y = 0; y < 7; y++) { if ((x == 0 && y != 3) || (y == 0 && x != 3) || (x == 6 && y != 3) || (y == 6 && x != 3)) { continue; } t[x + 3, y + 3] = t[x + 21, y + 3] = 4; t[x + 3, y + 30] = t[x + 21, y + 30] = 4; } } for (int x = 6; x < 25; x++) { t[x, 6] = t[x, 33] = 4; } for (int y = 6; y < 34; y++) { t[6, y] = t[24, y] = 4; } for (int x = 13; x < 18; x++) //Bridge { for (int y = 3; y < 7; y++) { t[x, y] = 6; } } for (int x = 0; x < 31; x++) //Corruption { for (int y = 0; y < 40; y++) { if (t[x, y] == 1 || t[x, y] == 0) { continue; } double p = rand.NextDouble(); if (t[x, y] == 6) { if (p < 0.4) { t[x, y] = 0; } continue; } if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } //Boss & Chest t[15, 27] = 7; t[15, 20] = 8; int r = rand.Next(0, 4); for (int i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); XmlData dat = world.Manager.GameData; for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[WaterA]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[WaterB]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 4) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[WallA]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; world.Map[x + pos.X, y + pos.Y] = tile; Entity wall = Entity.Resolve(world.Manager, dat.IdToObjectType[WallB]); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 6) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Bridge]; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 7) { Container container = new Container(world.Manager, 0x0501, null, false); Item[] items = chest.GetLoots(world.Manager, 5, 8).ToArray(); for (int i = 0; i < items.Length; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + x + 0.5f, pos.Y + y + 0.5f); world.EnterWorld(container); } else if (t[x, y] == 8) { Entity cyclops = Entity.Resolve(world.Manager, "Cyclops God"); cyclops.Move(pos.X + x, pos.Y + y); world.EnterWorld(cyclops); } } } }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[27, 27]; int[,] q = (int[, ])quarter.Clone(); for (int y = 0; y < 14; y++) //Top left { for (int x = 0; x < 14; x++) { t[x, y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Top right for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[13 + x, y] = q[x, y]; } } q = SetPieces.reflectVert(q); //Bottom right for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[13 + x, 13 + y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Bottom left for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[x, 13 + y] = q[x, y]; } } for (int y = 1; y < 4; y++) //Opening { for (int x = 8; x < 19; x++) { t[x, y] = 2; } } t[12, 0] = t[13, 0] = t[14, 0] = 2; int r = rand.Next(0, 4); //Rotation for (int i = 0; i < r; i++) { t = SetPieces.rotateCW(t); } t[13 + 6, 13] = 3; XmlData dat = world.Manager.Resources.GameData; for (int x = 0; x < 27; x++) //Rendering { for (int y = 0; y < 27; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[Wall]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { Entity cyclops = Entity.Resolve(world.Manager, 0x0928); cyclops.Move(pos.X + x, pos.Y + y); world.EnterWorld(cyclops); } } } }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[25, 26]; for (var x = 2; x < 23; x++) //Floor { for (var y = 1; y < 24; y++) { t[x, y] = rand.Next() % 10 == 0 ? 0 : 1; } } for (var y = 1; y < 24; y++) //Perimeters { t[2, y] = t[22, y] = 2; } for (var x = 2; x < 23; x++) { t[x, 23] = 2; } for (var x = 0; x < 3; x++) { for (var y = 0; y < 3; y++) { t[x + 1, y] = t[x + 21, y] = 2; } } for (var x = 0; x < 5; x++) { for (var y = 0; y < 5; y++) { if ((x == 0 && y == 0) || (x == 0 && y == 4) || (x == 4 && y == 0) || (x == 4 && y == 4)) { continue; } t[x, y + 21] = t[x + 20, y + 21] = 2; } } for (var y = 0; y < 6; y++) //Pillars { t[9, 4 + 3 * y] = t[15, 4 + 3 * y] = 4; } for (var x = 0; x < 25; x++) //Corruption { for (var y = 0; y < 26; y++) { if (t[x, y] == 1 || t[x, y] == 0) { continue; } var p = rand.NextDouble(); if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } var r = rand.Next(0, 4); for (var i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); for (var x = 0; x < w; x++) //Rendering { for (var y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = WallA; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; var wall = Entity.Resolve(WallB); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 4) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = PillarA; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = PillarB; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } } } //Boss var lich = Entity.Resolve(0x091b); lich.Move(pos.X + Size / 2, pos.Y + Size / 2); world.EnterWorld(lich); }
public override void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[Size, Size]; int[,] o = new int[Size, Size]; for (int x = 0; x < 60; x++) //Flooring { for (int y = 0; y < 60; y++) { if (Math.Abs(x - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.9 && Math.Abs(y - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.9) { double dist = Math.Sqrt(((x - Size / 2) * (x - Size / 2) + (y - Size / 2) * (y - Size / 2)) / ((Size / 2.0) * (Size / 2.0))); t[x, y] = rand.NextDouble() < (1 - dist) * (1 - dist) ? 2 : 1; } } } for (int x = 0; x < Size; x++) //Corruption { for (int y = 0; y < Size; y++) { if (rand.Next() % 50 == 0) { t[x, y] = 0; } } } const int bas = 16; //Walls for (int x = 0; x < 23; x++) { if (x > 9 && x < 13) { continue; } o[bas + x, bas] = 2; o[bas + x, bas + 1] = 2; o[bas + x, bas + 21] = 2; o[bas + x, bas + 22] = 2; } for (int y = 0; y < 23; y++) { if (y > 9 && y < 13) { continue; } o[bas, bas + y] = 2; o[bas + 1, bas + y] = 2; o[bas + 21, bas + y] = 2; o[bas + 22, bas + y] = 2; } o[bas - 1, bas + 7] = o[bas - 1, bas + 8] = o[bas - 1, bas + 9] = o[bas - 1, bas + 13] = o[bas - 1, bas + 14] = o[bas - 1, bas + 15] = 1; o[bas + 23, bas + 7] = o[bas + 23, bas + 8] = o[bas + 23, bas + 9] = o[bas + 23, bas + 13] = o[bas + 23, bas + 14] = o[bas + 23, bas + 15] = 1; o[bas + 7, bas - 1] = o[bas + 8, bas - 1] = o[bas + 9, bas - 1] = o[bas + 13, bas - 1] = o[bas + 14, bas - 1] = o[bas + 15, bas - 1] = 1; o[bas + 7, bas + 23] = o[bas + 8, bas + 23] = o[bas + 9, bas + 23] = o[bas + 13, bas + 23] = o[bas + 14, bas + 23] = o[bas + 15, bas + 23] = 1; for (int y = 0; y < 4; y++) //Columns { for (int x = 0; x < 4; x++) { o[bas + 5 + x * 4, bas + 5 + y * 4] = 3; } } for (int x = 0; x < Size; x++) //Plants { for (int y = 0; y < Size; y++) { if (((x > 5 && x < bas) || (x < Size - 5 && x > Size - bas) || (y > 5 && y < bas) || (y < Size - 5 && y > Size - bas)) && o[x, y] == 0 && t[x, y] == 1) { double r = rand.NextDouble(); if (r > 0.6) //0.4 { o[x, y] = 4; } else if (r > 0.35) //0.25 { o[x, y] = 5; } else if (r > 0.33) //0.02 { o[x, y] = 6; } } } } int rotation = rand.Next(0, 4); //Rotation for (int i = 0; i < rotation; i++) { t = SetPieces.rotateCW(t); o = SetPieces.rotateCW(o); } Render(this, world, pos, t, o); //Boss & Chest Container container = new Container(world.Manager, 0x0501, null, false); Item[] items = chest.GetLoots(world.Manager, 3, 8).ToArray(); for (int i = 0; i < items.Length; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + bas + 11.5f, pos.Y + bas + 11.5f); world.EnterWorld(container); Entity snake = Entity.Resolve(world.Manager, 0x0dc2); snake.Move(pos.X + bas + 11.5f, pos.Y + bas + 11.5f); world.EnterWorld(snake); }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[11, 11]; for (int x = 0; x < 11; x++) //Moats { for (int y = 0; y < 11; y++) { if (x == 0 || x == 10 || y == 0 || y == 10) { t[x, y] = t[x, y] = 1; t[x, y] = t[x, y] = 1; } } } for (int x = 1; x < 10; x++) //Floor { for (int y = 1; y < 10; y++) { t[x, y] = 2; } } //Boss & Chest t[5, 5] = 7; t[5, 6] = 8; int r = rand.Next(0, 4); for (int i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); var dat = world.Manager.GameData; for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Lava]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 7) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; Container container = new Container(world.Manager, 0x0501, null, false); Item[] items = chest.GetLoots(world.Manager, 5, 8).ToArray(); for (int i = 0; i < items.Length; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + x + 0.5f, pos.Y + y + 0.5f); world.EnterWorld(container); } else if (t[x, y] == 8) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; Entity mage = Entity.Resolve(world.Manager, "Forgotten Archmage of Flame"); mage.Move(pos.X + x, pos.Y + y); world.EnterWorld(mage); } } } }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[23, 35]; for (int x = 0; x < 23; x++) //Floor { for (int y = 0; y < 35; y++) { t[x, y] = rand.Next() % 3 == 0 ? 0 : 1; } } for (int y = 0; y < 35; y++) //Perimeters { t[0, y] = t[22, y] = 2; } for (int x = 0; x < 23; x++) { t[x, 0] = t[x, 34] = 2; } var pts = new List <IntPoint>(); for (int y = 0; y < 11; y++) //Crosses { for (int x = 0; x < 7; x++) { if (rand.Next() % 3 > 0) { t[2 + 3 * x, 2 + 3 * y] = 4; } else { pts.Add(new IntPoint(2 + 3 * x, 2 + 3 * y)); } } } for (int x = 0; x < 23; x++) //Corruption { for (int y = 0; y < 35; y++) { if (t[x, y] == 1 || t[x, y] == 0 || t[x, y] == 4) { continue; } double p = rand.NextDouble(); if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } //Boss & Chest IntPoint pt = pts[rand.Next(0, pts.Count)]; t[pt.X, pt.Y] = 5; t[pt.X + 1, pt.Y] = 6; int r = rand.Next(0, 4); for (int i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); XmlData dat = world.Manager.GameData; for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[WallA]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; world.Map[x + pos.X, y + pos.Y] = tile; Entity wall = Entity.Resolve(world.Manager, dat.IdToObjectType[WallB]); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 4) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = dat.IdToObjectType[Cross]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { var container = new Container(world.Manager, 0x0501, null, false); Item[] items = chest.GetLoots(world.Manager, 3, 8).ToArray(); for (int i = 0; i < items.Length; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + x + 0.5f, pos.Y + y + 0.5f); world.EnterWorld(container); } else if (t[x, y] == 6) { Entity mage = Entity.Resolve(world.Manager, "Deathmage"); mage.Move(pos.X + x, pos.Y + y); world.EnterWorld(mage); } } } }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[31, 40]; for (int x = 0; x < 13; x++) //Moats { for (int y = 0; y < 13; y++) { if ((x == 0 && (y < 3 || y > 9)) || (y == 0 && (x < 3 || x > 9)) || (x == 12 && (y < 3 || y > 9)) || (y == 12 && (x < 3 || x > 9))) { continue; } t[x + 0, y + 0] = t[x + 18, y + 0] = 2; t[x + 0, y + 27] = t[x + 18, y + 27] = 2; } } for (int x = 3; x < 28; x++) { for (int y = 3; y < 37; y++) { if (x < 6 || x > 24 || y < 6 || y > 33) { t[x, y] = 2; } } } for (int x = 7; x < 24; x++) //Floor { for (int y = 7; y < 33; y++) { t[x, y] = rand.Next() % 3 == 0 ? 0 : 1; } } for (int x = 0; x < 7; x++) //Perimeter { for (int y = 0; y < 7; y++) { if ((x == 0 && y != 3) || (y == 0 && x != 3) || (x == 6 && y != 3) || (y == 6 && x != 3)) { continue; } t[x + 3, y + 3] = t[x + 21, y + 3] = 4; t[x + 3, y + 30] = t[x + 21, y + 30] = 4; } } for (int x = 6; x < 25; x++) { t[x, 6] = t[x, 33] = 4; } for (int y = 6; y < 34; y++) { t[6, y] = t[24, y] = 4; } for (int x = 13; x < 18; x++) //Bridge { for (int y = 3; y < 7; y++) { t[x, y] = 6; } } for (int x = 0; x < 31; x++) //Corruption { for (int y = 0; y < 40; y++) { if (t[x, y] == 1 || t[x, y] == 0) { continue; } double p = rand.NextDouble(); if (t[x, y] == 6) { if (p < 0.4) { t[x, y] = 0; } continue; } if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } //Boss & Chest t[15, 27] = 7; t[15, 20] = 8; int r = rand.Next(0, 4); for (int i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = WaterA; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = WaterB; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 3; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 4) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = WallA; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; Entity wall = Entity.Resolve(WallB); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 6) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Bridge; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 7) { Container container = new Container(0x0501, null, false); int count = rand.Next(5, 8); List <Item> items = new List <Item>(); while (items.Count < count) { Item item = chest.GetRandomLoot(rand); if (item != null) { items.Add(item); } } for (int i = 0; i < items.Count; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + x + 0.5f, pos.Y + y + 0.5f); world.EnterWorld(container); } else if (t[x, y] == 8) { Entity cyclops = Entity.Resolve(0x67d); cyclops.Move(pos.X + x, pos.Y + y); world.EnterWorld(cyclops); } } } }
public void RenderSetPiece(World world, IntPoint pos) { int w = rand.Next(19, 22), h = rand.Next(19, 22); var t = new int[w, h]; for (var x = 0; x < w; x++) //Perimeter { t[x, 0] = 1; t[x, h - 1] = 1; } for (var y = 0; y < h; y++) { t[0, y] = 1; t[w - 1, y] = 1; } var midPtH = h / 2 + rand.Next(-2, 3); //Mid hori wall var sepH = rand.Next(2, 4); if (rand.Next() % 2 == 0) { for (var x = sepH; x < w; x++) { t[x, midPtH] = 1; } } else { for (var x = 0; x < w - sepH; x++) { t[x, midPtH] = 1; } } int begin, end; if (rand.Next() % 2 == 0) { begin = 0; end = midPtH; } else { begin = midPtH; end = h; } var midPtV = w / 2 + rand.Next(-2, 3); //Mid vert wall var sepW = rand.Next(2, 4); if (rand.Next() % 2 == 0) { for (var y = begin + sepW; y < end; y++) { t[midPtV, y] = 1; } } else { for (var y = begin; y < end - sepW; y++) { t[midPtV, y] = 1; } } for (var x = 0; x < w; x++) //Flooring { for (var y = 0; y < h; y++) { if (t[x, y] == 0) { t[x, y] = 2; } } } for (var x = 0; x < w; x++) //Corruption { for (var y = 0; y < h; y++) { if (rand.Next() % 2 == 0) { t[x, y] = 0; } } } var rotation = rand.Next(0, 4); //Rotation for (var i = 0; i < rotation; i++) { t = SetPieces.rotateCW(t); } w = t.GetLength(0); h = t.GetLength(1); for (var x = 0; x < w; x++) //Rendering { for (var y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.ObjType = Wall; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } } } }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[27, 27]; int[,] q = (int[, ])quarter.Clone(); for (int y = 0; y < 14; y++) //Top left { for (int x = 0; x < 14; x++) { t[x, y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Top right for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[13 + x, y] = q[x, y]; } } q = SetPieces.reflectVert(q); //Bottom right for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[13 + x, 13 + y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Bottom left for (int y = 0; y < 14; y++) { for (int x = 0; x < 14; x++) { t[x, 13 + y] = q[x, y]; } } for (int y = 1; y < 4; y++) //Opening { for (int x = 8; x < 19; x++) { t[x, y] = 2; } } t[12, 0] = t[13, 0] = t[14, 0] = 2; int r = rand.Next(0, 4); //Rotation for (int i = 0; i < r; i++) { t = SetPieces.rotateCW(t); } //center t[13 + 6, 13] = 4; //Tombstones spawn ;) t[4, 2] = t[6, 2] = t[8, 2] = t[10, 2] = 3; t[4, 4] = t[6, 4] = t[8, 4] = t[10, 4] = 3; t[4, 10] = t[6, 10] = t[8, 10] = t[10, 10] = 3; t[4, 12] = t[6, 12] = t[8, 12] = t[10, 12] = 3; t[4, 12] = t[6, 12] = t[8, 12] = t[10, 12] = 3; t[4, 14] = t[6, 14] = t[8, 14] = t[10, 14] = 3; t[4, 20] = t[6, 20] = t[8, 10] = t[10, 20] = 3; t[4, 22] = t[6, 22] = t[8, 12] = t[10, 22] = 3; t[14, 2] = t[16, 2] = t[18, 2] = t[20, 2] = 3; t[14, 4] = t[16, 4] = t[18, 4] = t[20, 4] = 3; t[14, 10] = t[16, 10] = t[18, 10] = t[20, 10] = 3; t[14, 12] = t[16, 12] = t[18, 12] = t[20, 12] = 3; t[14, 2] = t[16, 2] = t[18, 2] = t[20, 2] = 3; t[14, 4] = t[16, 4] = t[18, 4] = t[20, 4] = 3; t[14, 10] = t[16, 10] = t[18, 10] = t[20, 10] = 3; t[14, 12] = t[16, 12] = t[18, 12] = t[20, 12] = 3; XmlData dat = world.Manager.GameData; for (int x = 0; x < 27; x++) //Rendering { for (int y = 0; y < 27; y++) { if (t[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { Entity tombstones = Entity.Resolve(world.Manager, "Tombstone"); tombstones.Move(pos.X + x, pos.Y + y); world.EnterWorld(tombstones); } else if (t[x, y] == 4) { Entity tombstones = Entity.Resolve(world.Manager, "Kage Kami"); tombstones.Move(pos.X + x, pos.Y + y); world.EnterWorld(tombstones); } } } }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[27, 27]; var q = (int[, ])quarter.Clone(); for (var y = 0; y < 14; y++) //Top left { for (var x = 0; x < 14; x++) { t[x, y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Top right for (var y = 0; y < 14; y++) { for (var x = 0; x < 14; x++) { t[13 + x, y] = q[x, y]; } } q = SetPieces.reflectVert(q); //Bottom right for (var y = 0; y < 14; y++) { for (var x = 0; x < 14; x++) { t[13 + x, 13 + y] = q[x, y]; } } q = SetPieces.reflectHori(q); //Bottom left for (var y = 0; y < 14; y++) { for (var x = 0; x < 14; x++) { t[x, 13 + y] = q[x, y]; } } for (var y = 1; y < 4; y++) //Opening { for (var x = 8; x < 19; x++) { t[x, y] = 2; } } t[12, 0] = t[13, 0] = t[14, 0] = 2; var r = rand.Next(0, 4); //Rotation for (var i = 0; i < r; i++) { t = SetPieces.rotateCW(t); } t[13 + 6, 13] = 3; for (var x = 0; x < 27; x++) //Rendering { for (var y = 0; y < 27; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = Wall; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { var cyclops = Entity.Resolve(0x0928); cyclops.Move(pos.X + x, pos.Y + y); world.EnterWorld(cyclops); } } } }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[23, 35]; for (var x = 0; x < 23; x++) //Floor { for (var y = 0; y < 35; y++) { t[x, y] = rand.Next() % 3 == 0 ? 0 : 1; } } for (var y = 0; y < 35; y++) //Perimeters { t[0, y] = t[22, y] = 2; } for (var x = 0; x < 23; x++) { t[x, 0] = t[x, 34] = 2; } var pts = new List <IntPoint>(); for (var y = 0; y < 11; y++) //Crosses { for (var x = 0; x < 7; x++) { if (rand.Next() % 3 > 0) { t[2 + 3 * x, 2 + 3 * y] = 4; } else { pts.Add(new IntPoint(2 + 3 * x, 2 + 3 * y)); } } } for (var x = 0; x < 23; x++) //Corruption { for (var y = 0; y < 35; y++) { if (t[x, y] == 1 || t[x, y] == 0 || t[x, y] == 4) { continue; } var p = rand.NextDouble(); if (p < 0.1) { t[x, y] = 1; } else if (p < 0.4) { t[x, y]++; } } } //Boss & Chest var pt = pts[rand.Next(0, pts.Count)]; t[pt.X, pt.Y] = 5; t[pt.X + 1, pt.Y] = 6; var r = rand.Next(0, 4); for (var i = 0; i < r; i++) //Rotation { t = SetPieces.rotateCW(t); } int w = t.GetLength(0), h = t.GetLength(1); for (var x = 0; x < w; x++) //Rendering { for (var y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = WallA; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; var wall = Entity.Resolve(WallB); wall.Move(x + pos.X + 0.5f, y + pos.Y + 0.5f); world.EnterWorld(wall); } else if (t[x, y] == 4) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Floor; tile.ObjType = Cross; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { var container = new Container(0x0501, null, false); var count = rand.Next(3, 8); var items = new List <Item>(); while (items.Count < count) { var item = chest.GetRandomLoot(rand); if (item != null) { items.Add(item); } } for (var i = 0; i < items.Count; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + x + 0.5f, pos.Y + y + 0.5f); world.EnterWorld(container); } else if (t[x, y] == 6) { var mage = Entity.Resolve(0x0925); mage.Move(pos.X + x, pos.Y + y); world.EnterWorld(mage); } } } //Boss & Chest }
public void RenderSetPiece(World world, IntPoint pos) { int w = rand.Next(19, 22), h = rand.Next(19, 22); int[,] t = new int[w, h]; for (int x = 0; x < w; x++) //Perimeter { t[x, 0] = 1; t[x, h - 1] = 1; } for (int y = 0; y < h; y++) { t[0, y] = 1; t[w - 1, y] = 1; } int midPtH = h / 2 + rand.Next(-2, 3); //Mid hori wall int sepH = rand.Next(2, 4); if (rand.Next() % 2 == 0) { for (int x = sepH; x < w; x++) { t[x, midPtH] = 1; } } else { for (int x = 0; x < w - sepH; x++) { t[x, midPtH] = 1; } } int begin, end; if (rand.Next() % 2 == 0) { begin = 0; end = midPtH; } else { begin = midPtH; end = h; } int midPtV = w / 2 + rand.Next(-2, 3); //Mid vert wall int sepW = rand.Next(2, 4); if (rand.Next() % 2 == 0) { for (int y = begin + sepW; y < end; y++) { t[midPtV, y] = 1; } } else { for (int y = begin; y < end - sepW; y++) { t[midPtV, y] = 1; } } for (int x = 0; x < w; x++) //Flooring { for (int y = 0; y < h; y++) { if (t[x, y] == 0) { t[x, y] = 2; } } } for (int x = 0; x < w; x++) //Corruption { for (int y = 0; y < h; y++) { if (rand.Next() % 2 == 0) { t[x, y] = 0; } } } int rotation = rand.Next(0, 4); //Rotation for (int i = 0; i < rotation; i++) { t = SetPieces.rotateCW(t); } w = t.GetLength(0); h = t.GetLength(1); XmlData dat = world.Manager.Resources.GameData; for (int x = 0; x < w; x++) //Rendering { for (int y = 0; y < h; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.ObjType = dat.IdToObjectType[Wall]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Floor]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } } } }
public override void RenderSetPiece(World world, IntPoint pos) { var t = new int[Size, Size]; var o = new int[Size, Size]; for (var x = 0; x < 60; x++) //Flooring { for (var y = 0; y < 60; y++) { if (Math.Abs(x - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.9 && Math.Abs(y - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.9) { var dist = Math.Sqrt(((x - Size / 2) * (x - Size / 2) + (y - Size / 2) * (y - Size / 2)) / ((Size / 2.0) * (Size / 2.0))); t[x, y] = rand.NextDouble() < (1 - dist) * (1 - dist) ? 2 : 1; } } } for (var x = 0; x < Size; x++) //Corruption { for (var y = 0; y < Size; y++) { if (rand.Next() % 50 == 0) { t[x, y] = 0; } } } const int bas = 17; //Walls for (var x = 0; x < 20; x++) { o[bas + x, bas] = x == 19 ? 2 : 1; o[bas + x, bas + 1] = 2; } for (var y = 0; y < 20; y++) { o[bas, bas + y] = y == 19 ? 2 : 1; if (y != 0) { o[bas + 1, bas + y] = 2; } } for (var x = 0; x < 19; x++) { o[bas + 8 + x, bas + 25] = 2; o[bas + 8 + x, bas + 26] = x == 0 ? 2 : 1; } for (var y = 0; y < 19; y++) { if (y != 18) { o[bas + 25, bas + 8 + y] = 2; } o[bas + 26, bas + 8 + y] = y == 0 ? 2 : 1; } o[bas + 5, bas + 5] = 3; //Columns o[bas + 21, bas + 5] = 3; o[bas + 5, bas + 21] = 3; o[bas + 21, bas + 21] = 3; o[bas + 9, bas + 9] = 3; o[bas + 17, bas + 9] = 3; o[bas + 9, bas + 17] = 3; o[bas + 17, bas + 17] = 3; for (var x = 0; x < Size; x++) //Plants { for (var y = 0; y < Size; y++) { if (((x > 5 && x < bas) || (x < Size - 5 && x > Size - bas) || (y > 5 && y < bas) || (y < Size - 5 && y > Size - bas)) && o[x, y] == 0 && t[x, y] == 1) { var r = rand.NextDouble(); if (r > 0.6) //0.4 { o[x, y] = 4; } else if (r > 0.35) //0.25 { o[x, y] = 5; } else if (r > 0.33) //0.02 { o[x, y] = 6; } } } } var rotation = rand.Next(0, 4); //Rotation for (var i = 0; i < rotation; i++) { t = SetPieces.rotateCW(t); o = SetPieces.rotateCW(o); } Render(this, world, pos, t, o); //Boss & Chest var container = new Container(0x0501, null, false); var count = rand.Next(3, 8); var items = new List <Item>(); while (items.Count < count) { var item = chest.GetRandomLoot(rand); if (item != null) { items.Add(item); } } for (var i = 0; i < items.Count; i++) { container.Inventory[i] = items[i]; } container.Move(pos.X + Size / 2, pos.Y + Size / 2); world.EnterWorld(container); var snake = Entity.Resolve(0x0dc2); snake.Move(pos.X + Size / 2, pos.Y + Size / 2); world.EnterWorld(snake); }
public void RenderSetPiece(World world, IntPoint pos) { int[,] t = new int[33, 33]; for (int x = 0; x < 33; x++) //Grassing { for (int y = 0; y < 33; y++) { if (Math.Abs(x - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.95 && Math.Abs(y - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.95) { t[x, y] = 1; } } } for (int x = 12; x < 21; x++) //Outer { for (int y = 4; y < 29; y++) { t[x, y] = 2; } } t = SetPieces.rotateCW(t); for (int x = 12; x < 21; x++) { for (int y = 4; y < 29; y++) { t[x, y] = 2; } } for (int x = 13; x < 20; x++) //Inner { for (int y = 5; y < 28; y++) { t[x, y] = 4; } } t = SetPieces.rotateCW(t); for (int x = 13; x < 20; x++) { for (int y = 5; y < 28; y++) { t[x, y] = 4; } } for (int i = 0; i < 4; i++) //Ext { for (int x = 13; x < 20; x++) { for (int y = 5; y < 7; y++) { t[x, y] = 3; } } t = SetPieces.rotateCW(t); } for (int i = 0; i < 4; i++) //Pillars { t[13, 7] = rand.Next() % 3 == 0 ? 6 : 5; t[19, 7] = rand.Next() % 3 == 0 ? 6 : 5; t[13, 10] = rand.Next() % 3 == 0 ? 6 : 5; t[19, 10] = rand.Next() % 3 == 0 ? 6 : 5; t = SetPieces.rotateCW(t); } Noise noise = new Noise(Environment.TickCount); //Perlin noise for (int x = 0; x < 33; x++) { for (int y = 0; y < 33; y++) { if (noise.GetNoise(x / 33f * 8, y / 33f * 8, .5f) < 0.2) { t[x, y] = 0; } } } XmlData dat = world.Manager.GameData; for (int x = 0; x < 33; x++) //Rendering { for (int y = 0; y < 33; y++) { if (t[x, y] == 1) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Grass]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[TileDark]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Tile]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 4) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Stone]; tile.ObjType = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Stone]; tile.ObjType = dat.IdToObjectType[PillarA]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 6) { WmapTile tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = dat.IdToTileType[Stone]; tile.ObjType = dat.IdToObjectType[PillarB]; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Map[x + pos.X, y + pos.Y] = tile; } } } Entity skull = Entity.Resolve(world.Manager, "Skull Shrine"); //Skulls! skull.Move(pos.X + Size / 2f, pos.Y + Size / 2f); world.EnterWorld(skull); }
public void RenderSetPiece(World world, IntPoint pos) { var t = new int[33, 33]; for (var x = 0; x < 33; x++) //Grassing { for (var y = 0; y < 33; y++) { if (Math.Abs(x - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.95 && Math.Abs(y - Size / 2) / (Size / 2.0) + rand.NextDouble() * 0.3 < 0.95) { t[x, y] = 1; } } } for (var x = 12; x < 21; x++) //Outer { for (var y = 4; y < 29; y++) { t[x, y] = 2; } } t = SetPieces.rotateCW(t); for (var x = 12; x < 21; x++) { for (var y = 4; y < 29; y++) { t[x, y] = 2; } } for (var x = 13; x < 20; x++) //Inner { for (var y = 5; y < 28; y++) { t[x, y] = 4; } } t = SetPieces.rotateCW(t); for (var x = 13; x < 20; x++) { for (var y = 5; y < 28; y++) { t[x, y] = 4; } } for (var i = 0; i < 4; i++) //Ext { for (var x = 13; x < 20; x++) { for (var y = 5; y < 7; y++) { t[x, y] = 3; } } t = SetPieces.rotateCW(t); } for (var i = 0; i < 4; i++) //Pillars { t[13, 7] = rand.Next() % 3 == 0 ? 6 : 5; t[19, 7] = rand.Next() % 3 == 0 ? 6 : 5; t[13, 10] = rand.Next() % 3 == 0 ? 6 : 5; t[19, 10] = rand.Next() % 3 == 0 ? 6 : 5; t = SetPieces.rotateCW(t); } var noise = new Noise(Environment.TickCount); //Perlin noise for (var x = 0; x < 33; x++) { for (var y = 0; y < 33; y++) { if (noise.GetNoise(x / 33f * 8, y / 33f * 8, .5f) < 0.2) { t[x, y] = 0; } } } for (var x = 0; x < 33; x++) //Rendering { for (var y = 0; y < 33; y++) { if (t[x, y] == 1) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Grass; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 2) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = TileDark; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 3) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Tile; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 4) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Stone; tile.ObjType = 0; world.Obstacles[x + pos.X, y + pos.Y] = 0; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 5) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Stone; tile.ObjType = PillarA; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } else if (t[x, y] == 6) { var tile = world.Map[x + pos.X, y + pos.Y].Clone(); tile.TileId = Stone; tile.ObjType = PillarB; if (tile.ObjId == 0) { tile.ObjId = world.GetNextEntityId(); } world.Obstacles[x + pos.X, y + pos.Y] = 2; world.Map[x + pos.X, y + pos.Y] = tile; } } } var skull = Entity.Resolve(0x0d56); //Skulls! skull.Move(pos.X + Size / 2f, pos.Y + Size / 2f); world.EnterWorld(skull); }