terraria-source-code/GameContent/Biomes/CaveHouseBiome.cs
2021-10-27 18:03:19 -04:00

699 lines
35 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Biomes.CaveHouseBiome
// Assembly: Terraria, Version=1.3.5.3, Culture=neutral, PublicKeyToken=null
// MVID: 68659D26-2BE6-448F-8663-74FA559E6F08
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using Terraria.GameContent.Generation;
using Terraria.ID;
using Terraria.World.Generation;
namespace Terraria.GameContent.Biomes
{
public class CaveHouseBiome : MicroBiome
{
private const int VERTICAL_EXIT_WIDTH = 3;
private static readonly bool[] _blacklistedTiles = TileID.Sets.Factory.CreateBoolSet(true, 225, 41, 43, 44, 226, 203, 112, 25, 151);
private int _sharpenerCount;
private int _extractinatorCount;
private Microsoft.Xna.Framework.Rectangle GetRoom(Point origin)
{
Point result1;
bool flag1 = WorldUtils.Find(origin, Searches.Chain((GenSearch) new Searches.Left(25), (GenCondition) new Conditions.IsSolid()), out result1);
Point result2;
int num1 = WorldUtils.Find(origin, Searches.Chain((GenSearch) new Searches.Right(25), (GenCondition) new Conditions.IsSolid()), out result2) ? 1 : 0;
if (!flag1)
result1 = new Point(origin.X - 25, origin.Y);
if (num1 == 0)
result2 = new Point(origin.X + 25, origin.Y);
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(origin.X, origin.Y, 0, 0);
if (origin.X - result1.X > result2.X - origin.X)
{
rectangle.X = result1.X;
rectangle.Width = Utils.Clamp<int>(result2.X - result1.X, 15, 30);
}
else
{
rectangle.Width = Utils.Clamp<int>(result2.X - result1.X, 15, 30);
rectangle.X = result2.X - rectangle.Width;
}
Point result3;
bool flag2 = WorldUtils.Find(result1, Searches.Chain((GenSearch) new Searches.Up(10), (GenCondition) new Conditions.IsSolid()), out result3);
Point result4;
int num2 = WorldUtils.Find(result2, Searches.Chain((GenSearch) new Searches.Up(10), (GenCondition) new Conditions.IsSolid()), out result4) ? 1 : 0;
if (!flag2)
result3 = new Point(origin.X, origin.Y - 10);
if (num2 == 0)
result4 = new Point(origin.X, origin.Y - 10);
rectangle.Height = Utils.Clamp<int>(Math.Max(origin.Y - result3.Y, origin.Y - result4.Y), 8, 12);
rectangle.Y -= rectangle.Height;
return rectangle;
}
private float RoomSolidPrecentage(Microsoft.Xna.Framework.Rectangle room)
{
float num = (float) (room.Width * room.Height);
Ref<int> count = new Ref<int>(0);
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.IsSolid(), (GenAction) new Actions.Count(count)));
return (float) count.Value / num;
}
private bool FindVerticalExit(Microsoft.Xna.Framework.Rectangle wall, bool isUp, out int exitX)
{
Point result;
int num = WorldUtils.Find(new Point(wall.X + wall.Width - 3, wall.Y + (isUp ? -5 : 0)), Searches.Chain((GenSearch) new Searches.Left(wall.Width - 3), new Conditions.IsSolid().Not().AreaOr(3, 5)), out result) ? 1 : 0;
exitX = result.X;
return num != 0;
}
private bool FindSideExit(Microsoft.Xna.Framework.Rectangle wall, bool isLeft, out int exitY)
{
Point result;
int num = WorldUtils.Find(new Point(wall.X + (isLeft ? -4 : 0), wall.Y + wall.Height - 3), Searches.Chain((GenSearch) new Searches.Up(wall.Height - 3), new Conditions.IsSolid().Not().AreaOr(4, 3)), out result) ? 1 : 0;
exitY = result.Y;
return num != 0;
}
private int SortBiomeResults(
Tuple<CaveHouseBiome.BuildData, int> item1,
Tuple<CaveHouseBiome.BuildData, int> item2)
{
return item2.Item2.CompareTo(item1.Item2);
}
public override bool Place(Point origin, StructureMap structures)
{
Point result1;
if (!WorldUtils.Find(origin, Searches.Chain((GenSearch) new Searches.Down(200), (GenCondition) new Conditions.IsSolid()), out result1) || result1 == origin)
return false;
Microsoft.Xna.Framework.Rectangle room1 = this.GetRoom(result1);
Microsoft.Xna.Framework.Rectangle room2 = this.GetRoom(new Point(room1.Center.X, room1.Y + 1));
Microsoft.Xna.Framework.Rectangle room3 = this.GetRoom(new Point(room1.Center.X, room1.Y + room1.Height + 10));
room3.Y = room1.Y + room1.Height - 1;
float num1 = this.RoomSolidPrecentage(room2);
float num2 = this.RoomSolidPrecentage(room3);
room1.Y += 3;
room2.Y += 3;
room3.Y += 3;
List<Microsoft.Xna.Framework.Rectangle> rectangleList1 = new List<Microsoft.Xna.Framework.Rectangle>();
if ((double) GenBase._random.NextFloat() > (double) num1 + 0.200000002980232)
rectangleList1.Add(room2);
else
room2 = room1;
rectangleList1.Add(room1);
if ((double) GenBase._random.NextFloat() > (double) num2 + 0.200000002980232)
rectangleList1.Add(room3);
else
room3 = room1;
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
if (rectangle.Y + rectangle.Height > Main.maxTilesY - 220)
return false;
}
Dictionary<ushort, int> resultsOutput = new Dictionary<ushort, int>();
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
WorldUtils.Gen(new Point(rectangle.X - 10, rectangle.Y - 10), (GenShape) new Shapes.Rectangle(rectangle.Width + 20, rectangle.Height + 20), (GenAction) new Actions.TileScanner(new ushort[12]
{
(ushort) 0,
(ushort) 59,
(ushort) 147,
(ushort) 1,
(ushort) 161,
(ushort) 53,
(ushort) 396,
(ushort) 397,
(ushort) 368,
(ushort) 367,
(ushort) 60,
(ushort) 70
}).Output(resultsOutput));
List<Tuple<CaveHouseBiome.BuildData, int>> tupleList1 = new List<Tuple<CaveHouseBiome.BuildData, int>>();
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Default, resultsOutput[(ushort) 0] + resultsOutput[(ushort) 1]));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Jungle, resultsOutput[(ushort) 59] + resultsOutput[(ushort) 60] * 10));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Mushroom, resultsOutput[(ushort) 59] + resultsOutput[(ushort) 70] * 10));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Snow, resultsOutput[(ushort) 147] + resultsOutput[(ushort) 161]));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Desert, resultsOutput[(ushort) 397] + resultsOutput[(ushort) 396] + resultsOutput[(ushort) 53]));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Granite, resultsOutput[(ushort) 368]));
tupleList1.Add(Tuple.Create<CaveHouseBiome.BuildData, int>(CaveHouseBiome.BuildData.Marble, resultsOutput[(ushort) 367]));
tupleList1.Sort(new Comparison<Tuple<CaveHouseBiome.BuildData, int>>(this.SortBiomeResults));
CaveHouseBiome.BuildData buildData = tupleList1[0].Item1;
foreach (Microsoft.Xna.Framework.Rectangle area in rectangleList1)
{
if (buildData != CaveHouseBiome.BuildData.Granite)
{
if (WorldUtils.Find(new Point(area.X - 2, area.Y - 2), Searches.Chain(new Searches.Rectangle(area.Width + 4, area.Height + 4).RequireAll(false), (GenCondition) new Conditions.HasLava()), out Point _))
return false;
}
if (!structures.CanPlace(area, CaveHouseBiome._blacklistedTiles, 5))
return false;
}
int val1_1 = room1.X;
int val1_2 = room1.X + room1.Width - 1;
List<Microsoft.Xna.Framework.Rectangle> rectangleList2 = new List<Microsoft.Xna.Framework.Rectangle>();
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
val1_1 = Math.Min(val1_1, rectangle.X);
val1_2 = Math.Max(val1_2, rectangle.X + rectangle.Width - 1);
}
int num3 = 6;
while (num3 > 4 && (val1_2 - val1_1) % num3 != 0)
--num3;
for (int x = val1_1; x <= val1_2; x += num3)
{
for (int index1 = 0; index1 < rectangleList1.Count; ++index1)
{
Microsoft.Xna.Framework.Rectangle rectangle = rectangleList1[index1];
if (x >= rectangle.X && x < rectangle.X + rectangle.Width)
{
int y = rectangle.Y + rectangle.Height;
int num4 = 50;
for (int index2 = index1 + 1; index2 < rectangleList1.Count; ++index2)
{
if (x >= rectangleList1[index2].X && x < rectangleList1[index2].X + rectangleList1[index2].Width)
num4 = Math.Min(num4, rectangleList1[index2].Y - y);
}
if (num4 > 0)
{
Point result2;
bool flag = WorldUtils.Find(new Point(x, y), Searches.Chain((GenSearch) new Searches.Down(num4), (GenCondition) new Conditions.IsSolid()), out result2);
if (num4 < 50)
{
flag = true;
result2 = new Point(x, y + num4);
}
if (flag)
rectangleList2.Add(new Microsoft.Xna.Framework.Rectangle(x, y, 1, result2.Y - y));
}
}
}
}
List<Point> pointList1 = new List<Point>();
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int exitY;
if (this.FindSideExit(new Microsoft.Xna.Framework.Rectangle(rectangle.X + rectangle.Width, rectangle.Y + 1, 1, rectangle.Height - 2), false, out exitY))
pointList1.Add(new Point(rectangle.X + rectangle.Width - 1, exitY));
if (this.FindSideExit(new Microsoft.Xna.Framework.Rectangle(rectangle.X, rectangle.Y + 1, 1, rectangle.Height - 2), true, out exitY))
pointList1.Add(new Point(rectangle.X, exitY));
}
List<Tuple<Point, Point>> tupleList2 = new List<Tuple<Point, Point>>();
for (int index = 1; index < rectangleList1.Count; ++index)
{
Microsoft.Xna.Framework.Rectangle rectangle1 = rectangleList1[index];
Microsoft.Xna.Framework.Rectangle rectangle2 = rectangleList1[index - 1];
if (rectangle2.X - rectangle1.X > rectangle1.X + rectangle1.Width - (rectangle2.X + rectangle2.Width))
tupleList2.Add(new Tuple<Point, Point>(new Point(rectangle1.X + rectangle1.Width - 1, rectangle1.Y + 1), new Point(rectangle1.X + rectangle1.Width - rectangle1.Height + 1, rectangle1.Y + rectangle1.Height - 1)));
else
tupleList2.Add(new Tuple<Point, Point>(new Point(rectangle1.X, rectangle1.Y + 1), new Point(rectangle1.X + rectangle1.Height - 1, rectangle1.Y + rectangle1.Height - 1)));
}
List<Point> pointList2 = new List<Point>();
int exitX;
if (this.FindVerticalExit(new Microsoft.Xna.Framework.Rectangle(room2.X + 2, room2.Y, room2.Width - 4, 1), true, out exitX))
pointList2.Add(new Point(exitX, room2.Y));
if (this.FindVerticalExit(new Microsoft.Xna.Framework.Rectangle(room3.X + 2, room3.Y + room3.Height - 1, room3.Width - 4, 1), false, out exitX))
pointList2.Add(new Point(exitX, room3.Y + room3.Height - 1));
foreach (Microsoft.Xna.Framework.Rectangle area in rectangleList1)
{
WorldUtils.Gen(new Point(area.X, area.Y), (GenShape) new Shapes.Rectangle(area.Width, area.Height), Actions.Chain((GenAction) new Actions.SetTile(buildData.Tile), (GenAction) new Actions.SetFrames(true)));
WorldUtils.Gen(new Point(area.X + 1, area.Y + 1), (GenShape) new Shapes.Rectangle(area.Width - 2, area.Height - 2), Actions.Chain((GenAction) new Actions.ClearTile(true), (GenAction) new Actions.PlaceWall(buildData.Wall)));
structures.AddStructure(area, 8);
}
foreach (Tuple<Point, Point> tuple in tupleList2)
{
Point origin1 = tuple.Item1;
Point point = tuple.Item2;
int num5 = point.X > origin1.X ? 1 : -1;
ShapeData data = new ShapeData();
for (int y = 0; y < point.Y - origin1.Y; ++y)
data.Add(num5 * (y + 1), y);
WorldUtils.Gen(origin1, (GenShape) new ModShapes.All(data), Actions.Chain((GenAction) new Actions.PlaceTile((ushort) 19, buildData.PlatformStyle), (GenAction) new Actions.SetSlope(num5 == 1 ? 1 : 2), (GenAction) new Actions.SetFrames(true)));
WorldUtils.Gen(new Point(origin1.X + (num5 == 1 ? 1 : -4), origin1.Y - 1), (GenShape) new Shapes.Rectangle(4, 1), Actions.Chain((GenAction) new Actions.Clear(), (GenAction) new Actions.PlaceWall(buildData.Wall), (GenAction) new Actions.PlaceTile((ushort) 19, buildData.PlatformStyle), (GenAction) new Actions.SetFrames(true)));
}
foreach (Point origin2 in pointList1)
{
WorldUtils.Gen(origin2, (GenShape) new Shapes.Rectangle(1, 3), (GenAction) new Actions.ClearTile(true));
WorldGen.PlaceTile(origin2.X, origin2.Y, 10, true, true, style: buildData.DoorStyle);
}
foreach (Point origin3 in pointList2)
{
Shapes.Rectangle rectangle = new Shapes.Rectangle(3, 1);
GenAction action = Actions.Chain((GenAction) new Actions.ClearMetadata(), (GenAction) new Actions.PlaceTile((ushort) 19, buildData.PlatformStyle), (GenAction) new Actions.SetFrames(true));
WorldUtils.Gen(origin3, (GenShape) rectangle, action);
}
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList2)
{
if (rectangle.Height > 1 && GenBase._tiles[rectangle.X, rectangle.Y - 1].type != (ushort) 19)
{
WorldUtils.Gen(new Point(rectangle.X, rectangle.Y), (GenShape) new Shapes.Rectangle(rectangle.Width, rectangle.Height), Actions.Chain((GenAction) new Actions.SetTile((ushort) 124), (GenAction) new Actions.SetFrames(true)));
Tile tile = GenBase._tiles[rectangle.X, rectangle.Y + rectangle.Height];
tile.slope((byte) 0);
tile.halfBrick(false);
}
}
Point[] pointArray = new Point[7]
{
new Point(14, buildData.TableStyle),
new Point(16, 0),
new Point(18, buildData.WorkbenchStyle),
new Point(86, 0),
new Point(87, buildData.PianoStyle),
new Point(94, 0),
new Point(101, buildData.BookcaseStyle)
};
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int num6 = rectangle.Width / 8;
int num7 = rectangle.Width / (num6 + 1);
int num8 = GenBase._random.Next(2);
for (int index3 = 0; index3 < num6; ++index3)
{
int num9 = (index3 + 1) * num7 + rectangle.X;
switch (index3 + num8 % 2)
{
case 0:
int num10 = rectangle.Y + Math.Min(rectangle.Height / 2, rectangle.Height - 5);
Vector2 vector2 = WorldGen.randHousePicture();
int x = (int) vector2.X;
int y = (int) vector2.Y;
if (!WorldGen.nearPicture(num9, num10))
{
WorldGen.PlaceTile(num9, num10, x, true, style: y);
break;
}
break;
case 1:
int j = rectangle.Y + 1;
WorldGen.PlaceTile(num9, j, 34, true, style: GenBase._random.Next(6));
for (int index4 = -1; index4 < 2; ++index4)
{
for (int index5 = 0; index5 < 3; ++index5)
GenBase._tiles[index4 + num9, index5 + j].frameX += (short) 54;
}
break;
}
}
int num11 = rectangle.Width / 8 + 3;
WorldGen.SetupStatueList();
for (; num11 > 0; --num11)
{
int num12 = GenBase._random.Next(rectangle.Width - 3) + 1 + rectangle.X;
int num13 = rectangle.Y + rectangle.Height - 2;
switch (GenBase._random.Next(4))
{
case 0:
WorldGen.PlaceSmallPile(num12, num13, GenBase._random.Next(31, 34), 1);
break;
case 1:
WorldGen.PlaceTile(num12, num13, 186, true, style: GenBase._random.Next(22, 26));
break;
case 2:
int index = GenBase._random.Next(2, WorldGen.statueList.Length);
WorldGen.PlaceTile(num12, num13, (int) WorldGen.statueList[index].X, true, style: ((int) WorldGen.statueList[index].Y));
if (WorldGen.StatuesWithTraps.Contains(index))
{
WorldGen.PlaceStatueTrap(num12, num13);
break;
}
break;
case 3:
Point point = Utils.SelectRandom<Point>(GenBase._random, pointArray);
WorldGen.PlaceTile(num12, num13, point.X, true, style: point.Y);
break;
}
}
}
foreach (Microsoft.Xna.Framework.Rectangle room4 in rectangleList1)
buildData.ProcessRoom(room4);
bool flag1 = false;
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int j = rectangle.Height - 1 + rectangle.Y;
int Style = j > (int) Main.worldSurface ? buildData.ChestStyle : 0;
int num14 = 0;
while (num14 < 10 && !(flag1 = WorldGen.AddBuriedChest(GenBase._random.Next(2, rectangle.Width - 2) + rectangle.X, j, Style: Style)))
++num14;
if (!flag1)
{
int i = rectangle.X + 2;
while (i <= rectangle.X + rectangle.Width - 2 && !(flag1 = WorldGen.AddBuriedChest(i, j, Style: Style)))
++i;
if (flag1)
break;
}
else
break;
}
if (!flag1)
{
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int j = rectangle.Y - 1;
int Style = j > (int) Main.worldSurface ? buildData.ChestStyle : 0;
int num15 = 0;
while (num15 < 10 && !(flag1 = WorldGen.AddBuriedChest(GenBase._random.Next(2, rectangle.Width - 2) + rectangle.X, j, Style: Style)))
++num15;
if (!flag1)
{
int i = rectangle.X + 2;
while (i <= rectangle.X + rectangle.Width - 2 && !(flag1 = WorldGen.AddBuriedChest(i, j, Style: Style)))
++i;
if (flag1)
break;
}
else
break;
}
}
if (!flag1)
{
for (int index = 0; index < 1000; ++index)
{
int i = GenBase._random.Next(rectangleList1[0].X - 30, rectangleList1[0].X + 30);
int num16 = GenBase._random.Next(rectangleList1[0].Y - 30, rectangleList1[0].Y + 30);
int num17 = num16 > (int) Main.worldSurface ? buildData.ChestStyle : 0;
int j = num16;
int Style = num17;
if (WorldGen.AddBuriedChest(i, j, Style: Style))
break;
}
}
if (buildData == CaveHouseBiome.BuildData.Jungle && this._sharpenerCount < GenBase._random.Next(2, 5))
{
bool flag2 = false;
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int j = rectangle.Height - 2 + rectangle.Y;
for (int index = 0; index < 10; ++index)
{
int i = GenBase._random.Next(2, rectangle.Width - 2) + rectangle.X;
WorldGen.PlaceTile(i, j, 377, true, true);
if (flag2 = GenBase._tiles[i, j].active() && GenBase._tiles[i, j].type == (ushort) 377)
break;
}
if (!flag2)
{
int i = rectangle.X + 2;
while (i <= rectangle.X + rectangle.Width - 2 && !(flag2 = WorldGen.PlaceTile(i, j, 377, true, true)))
++i;
if (flag2)
break;
}
else
break;
}
if (flag2)
++this._sharpenerCount;
}
if (buildData == CaveHouseBiome.BuildData.Desert && this._extractinatorCount < GenBase._random.Next(2, 5))
{
bool flag3 = false;
foreach (Microsoft.Xna.Framework.Rectangle rectangle in rectangleList1)
{
int j = rectangle.Height - 2 + rectangle.Y;
for (int index = 0; index < 10; ++index)
{
int i = GenBase._random.Next(2, rectangle.Width - 2) + rectangle.X;
WorldGen.PlaceTile(i, j, 219, true, true);
if (flag3 = GenBase._tiles[i, j].active() && GenBase._tiles[i, j].type == (ushort) 219)
break;
}
if (!flag3)
{
int i = rectangle.X + 2;
while (i <= rectangle.X + rectangle.Width - 2 && !(flag3 = WorldGen.PlaceTile(i, j, 219, true, true)))
++i;
if (flag3)
break;
}
else
break;
}
if (flag3)
++this._extractinatorCount;
}
return true;
}
public override void Reset()
{
this._sharpenerCount = 0;
this._extractinatorCount = 0;
}
internal static void AgeDefaultRoom(Microsoft.Xna.Framework.Rectangle room)
{
for (int index = 0; index < room.Width * room.Height / 16; ++index)
WorldUtils.Gen(new Point(GenBase._random.Next(1, room.Width - 1) + room.X, GenBase._random.Next(1, room.Height - 1) + room.Y), (GenShape) new Shapes.Rectangle(2, 2), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.Blotches(chance: 2.0), (GenAction) new Modifiers.IsEmpty(), (GenAction) new Actions.SetTile((ushort) 51, true)));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(), (GenAction) new Modifiers.OnlyWalls(new byte[1]
{
CaveHouseBiome.BuildData.Default.Wall
}), (double) room.Y > Main.worldSurface ? (GenAction) new Actions.ClearWall(true) : (GenAction) new Actions.PlaceWall((byte) 2)));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.949999988079071), (GenAction) new Modifiers.OnlyTiles(new ushort[3]
{
(ushort) 30,
(ushort) 321,
(ushort) 158
}), (GenAction) new Actions.ClearTile(true)));
}
internal static void AgeSnowRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.Blotches(chance: 0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Snow.Tile
}), (GenAction) new Actions.SetTile((ushort) 161, true), (GenAction) new Modifiers.Dither(0.8), (GenAction) new Actions.SetTile((ushort) 147, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 161
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 161
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(chance: 0.8), (double) room.Y > Main.worldSurface ? (GenAction) new Actions.ClearWall(true) : (GenAction) new Actions.PlaceWall((byte) 40)));
}
internal static void AgeDesertRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.Blotches(chance: 0.200000002980232), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Desert.Tile
}), (GenAction) new Actions.SetTile((ushort) 396, true), (GenAction) new Modifiers.Dither(), (GenAction) new Actions.SetTile((ushort) 397, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[2]
{
(ushort) 397,
(ushort) 396
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[2]
{
(ushort) 397,
(ushort) 396
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.Blotches(), (GenAction) new Modifiers.OnlyWalls(new byte[1]
{
CaveHouseBiome.BuildData.Desert.Wall
}), (GenAction) new Actions.PlaceWall((byte) 216)));
}
internal static void AgeGraniteRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.Blotches(chance: 0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Granite.Tile
}), (GenAction) new Actions.SetTile((ushort) 368, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 368
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 368
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(), (GenAction) new Actions.PlaceWall((byte) 180)));
}
internal static void AgeMarbleRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.Blotches(chance: 0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Marble.Tile
}), (GenAction) new Actions.SetTile((ushort) 367, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 367
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 367
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionStalagtite()));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(), (GenAction) new Actions.PlaceWall((byte) 178)));
}
internal static void AgeMushroomRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.699999988079071), (GenAction) new Modifiers.Blotches(chance: 0.5), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Mushroom.Tile
}), (GenAction) new Actions.SetTile((ushort) 70, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 70
}), (GenAction) new Modifiers.Offset(0, -1), (GenAction) new Actions.SetTile((ushort) 71)));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 70
}), (GenAction) new Modifiers.Offset(0, -1), (GenAction) new Actions.SetTile((ushort) 71)));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(), (GenAction) new Actions.ClearWall()));
}
internal static void AgeJungleRoom(Microsoft.Xna.Framework.Rectangle room)
{
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.600000023841858), (GenAction) new Modifiers.Blotches(chance: 0.600000023841858), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
CaveHouseBiome.BuildData.Jungle.Tile
}), (GenAction) new Actions.SetTile((ushort) 60, true), (GenAction) new Modifiers.Dither(0.800000011920929), (GenAction) new Actions.SetTile((ushort) 59, true)));
WorldUtils.Gen(new Point(room.X + 1, room.Y), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 60
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionVines(3, room.Height, 62)));
WorldUtils.Gen(new Point(room.X + 1, room.Y + room.Height - 1), (GenShape) new Shapes.Rectangle(room.Width - 2, 1), Actions.Chain((GenAction) new Modifiers.Dither(), (GenAction) new Modifiers.OnlyTiles(new ushort[1]
{
(ushort) 60
}), (GenAction) new Modifiers.Offset(0, 1), (GenAction) new ActionVines(3, room.Height, 62)));
WorldUtils.Gen(new Point(room.X, room.Y), (GenShape) new Shapes.Rectangle(room.Width, room.Height), Actions.Chain((GenAction) new Modifiers.Dither(0.850000023841858), (GenAction) new Modifiers.Blotches(), (GenAction) new Actions.PlaceWall((byte) 64)));
}
private class BuildData
{
public static CaveHouseBiome.BuildData Snow = CaveHouseBiome.BuildData.CreateSnowData();
public static CaveHouseBiome.BuildData Jungle = CaveHouseBiome.BuildData.CreateJungleData();
public static CaveHouseBiome.BuildData Default = CaveHouseBiome.BuildData.CreateDefaultData();
public static CaveHouseBiome.BuildData Granite = CaveHouseBiome.BuildData.CreateGraniteData();
public static CaveHouseBiome.BuildData Marble = CaveHouseBiome.BuildData.CreateMarbleData();
public static CaveHouseBiome.BuildData Mushroom = CaveHouseBiome.BuildData.CreateMushroomData();
public static CaveHouseBiome.BuildData Desert = CaveHouseBiome.BuildData.CreateDesertData();
public ushort Tile;
public byte Wall;
public int PlatformStyle;
public int DoorStyle;
public int TableStyle;
public int WorkbenchStyle;
public int PianoStyle;
public int BookcaseStyle;
public int ChairStyle;
public int ChestStyle;
public CaveHouseBiome.BuildData.ProcessRoomMethod ProcessRoom;
public static CaveHouseBiome.BuildData CreateSnowData() => new CaveHouseBiome.BuildData()
{
Tile = 321,
Wall = 149,
DoorStyle = 30,
PlatformStyle = 19,
TableStyle = 28,
WorkbenchStyle = 23,
PianoStyle = 23,
BookcaseStyle = 25,
ChairStyle = 30,
ChestStyle = 11,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeSnowRoom)
};
public static CaveHouseBiome.BuildData CreateDesertData() => new CaveHouseBiome.BuildData()
{
Tile = 396,
Wall = 187,
PlatformStyle = 0,
DoorStyle = 0,
TableStyle = 0,
WorkbenchStyle = 0,
PianoStyle = 0,
BookcaseStyle = 0,
ChairStyle = 0,
ChestStyle = 1,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeDesertRoom)
};
public static CaveHouseBiome.BuildData CreateJungleData() => new CaveHouseBiome.BuildData()
{
Tile = 158,
Wall = 42,
PlatformStyle = 2,
DoorStyle = 2,
TableStyle = 2,
WorkbenchStyle = 2,
PianoStyle = 2,
BookcaseStyle = 12,
ChairStyle = 3,
ChestStyle = 8,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeJungleRoom)
};
public static CaveHouseBiome.BuildData CreateGraniteData() => new CaveHouseBiome.BuildData()
{
Tile = 369,
Wall = 181,
PlatformStyle = 28,
DoorStyle = 34,
TableStyle = 33,
WorkbenchStyle = 29,
PianoStyle = 28,
BookcaseStyle = 30,
ChairStyle = 34,
ChestStyle = 50,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeGraniteRoom)
};
public static CaveHouseBiome.BuildData CreateMarbleData() => new CaveHouseBiome.BuildData()
{
Tile = 357,
Wall = 179,
PlatformStyle = 29,
DoorStyle = 35,
TableStyle = 34,
WorkbenchStyle = 30,
PianoStyle = 29,
BookcaseStyle = 31,
ChairStyle = 35,
ChestStyle = 51,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeMarbleRoom)
};
public static CaveHouseBiome.BuildData CreateMushroomData() => new CaveHouseBiome.BuildData()
{
Tile = 190,
Wall = 74,
PlatformStyle = 18,
DoorStyle = 6,
TableStyle = 27,
WorkbenchStyle = 7,
PianoStyle = 22,
BookcaseStyle = 24,
ChairStyle = 9,
ChestStyle = 32,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeMushroomRoom)
};
public static CaveHouseBiome.BuildData CreateDefaultData() => new CaveHouseBiome.BuildData()
{
Tile = 30,
Wall = 27,
PlatformStyle = 0,
DoorStyle = 0,
TableStyle = 0,
WorkbenchStyle = 0,
PianoStyle = 0,
BookcaseStyle = 0,
ChairStyle = 0,
ChestStyle = 1,
ProcessRoom = new CaveHouseBiome.BuildData.ProcessRoomMethod(CaveHouseBiome.AgeDefaultRoom)
};
public delegate void ProcessRoomMethod(Microsoft.Xna.Framework.Rectangle room);
}
}
}