TShock/Terraria/WorldGen.cs
2011-05-28 20:49:41 -06:00

15666 lines
706 KiB
C#

namespace Terraria
{
using Microsoft.Xna.Framework;
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
internal class WorldGen
{
public static int bestX = 0;
public static int bestY = 0;
public static bool canSpawn;
private static int[] DDoorPos = new int[300];
private static int[] DDoorX = new int[300];
private static int[] DDoorY = new int[300];
public static int dEnteranceX = 0;
private static bool destroyObject = false;
private static int dMaxX;
private static int dMaxY;
private static int dMinX;
private static int dMinY;
private static int[] DPlatX = new int[300];
private static int[] DPlatY = new int[300];
public static bool dSurface = false;
public static int dungeonX;
public static int dungeonY;
private static double dxStrength1;
private static double dxStrength2;
private static double dyStrength1;
private static double dyStrength2;
private static int[] fihX = new int[300];
private static int[] fihY = new int[300];
public static bool gen = false;
[ThreadStatic]
public static Random genRand = new Random();
public static int hiScore = 0;
private static int houseCount = 0;
public static bool[] houseTile = new bool[80];
private static int[] JChestX = new int[100];
private static int[] JChestY = new int[100];
public static Vector2 lastDungeonHall = new Vector2();
private static int lastMaxTilesX = 0;
private static int lastMaxTilesY = 0;
public static int lavaLine;
public static bool loadFailed = false;
public static int maxDRooms = 100;
private static int[] dRoomB = new int[maxDRooms];
private static int[] dRoomL = new int[maxDRooms];
private static int[] dRoomR = new int[maxDRooms];
public static int[] dRoomSize = new int[maxDRooms];
private static int[] dRoomT = new int[maxDRooms];
private static bool[] dRoomTreasure = new bool[maxDRooms];
public static int[] dRoomX = new int[maxDRooms];
public static int[] dRoomY = new int[maxDRooms];
public static int maxRoomTiles = 0x76c;
private static int[] mCaveX = new int[300];
private static int[] mCaveY = new int[300];
private static bool mergeDown = false;
private static bool mergeLeft = false;
private static bool mergeRight = false;
private static bool mergeUp = false;
public static bool noLiquidCheck = false;
private static int numDDoors;
private static int numDPlats;
public static int numDRooms = 0;
private static int numIslandHouses = 0;
private static int numJChests = 0;
private static int numMCaves = 0;
public static int numRoomTiles;
public static int[] roomX = new int[maxRoomTiles];
public static int roomX1;
public static int roomX2;
public static int[] roomY = new int[maxRoomTiles];
public static int roomY1;
public static int roomY2;
public static bool saveLock = false;
public static int shadowOrbCount = 0;
public static bool shadowOrbSmashed = false;
public static int spawnDelay = 0;
public static bool spawnEye = false;
public static bool spawnMeteor = false;
public static int spawnNPC = 0;
public static string statusText = "";
private static bool stopDrops = false;
private static bool tempBloodMoon = Main.bloodMoon;
private static bool tempDayTime = Main.dayTime;
private static int tempMoonPhase = Main.moonPhase;
private static double tempTime = Main.time;
public static int waterLine;
public static bool worldCleared = false;
public static bool AddBuriedChest(int i, int j, int contain = 0)
{
if (genRand == null)
{
genRand = new Random((int) DateTime.Now.Ticks);
}
for (int k = j; k < Main.maxTilesY; k++)
{
if (Main.tile[i, k].active && Main.tileSolid[Main.tile[i, k].type])
{
int num2 = i;
int num3 = k;
int index = PlaceChest(num2 - 1, num3 - 1, 0x15);
if (index < 0)
{
return false;
}
int num5 = 0;
while (num5 == 0)
{
if (contain > 0)
{
Main.chest[index].item[num5].SetDefaults(contain);
num5++;
}
else
{
switch (genRand.Next(7))
{
case 0:
Main.chest[index].item[num5].SetDefaults(0x31);
break;
case 1:
Main.chest[index].item[num5].SetDefaults(50);
break;
case 2:
Main.chest[index].item[num5].SetDefaults(0x34);
break;
case 3:
Main.chest[index].item[num5].SetDefaults(0x35);
break;
case 4:
Main.chest[index].item[num5].SetDefaults(0x36);
break;
case 5:
Main.chest[index].item[num5].SetDefaults(0x37);
break;
case 6:
Main.chest[index].item[num5].SetDefaults(0x33);
Main.chest[index].item[num5].stack = genRand.Next(0x1a) + 0x19;
break;
}
num5++;
}
if (genRand.Next(3) == 0)
{
Main.chest[index].item[num5].SetDefaults(0xa7);
num5++;
}
if (genRand.Next(2) == 0)
{
int num7 = genRand.Next(4);
int num8 = genRand.Next(8) + 3;
switch (num7)
{
case 0:
Main.chest[index].item[num5].SetDefaults(0x13);
break;
case 1:
Main.chest[index].item[num5].SetDefaults(20);
break;
case 2:
Main.chest[index].item[num5].SetDefaults(0x15);
break;
case 3:
Main.chest[index].item[num5].SetDefaults(0x16);
break;
}
Main.chest[index].item[num5].stack = num8;
num5++;
}
if (genRand.Next(2) == 0)
{
int num9 = genRand.Next(2);
int num10 = genRand.Next(0x1a) + 0x19;
switch (num9)
{
case 0:
Main.chest[index].item[num5].SetDefaults(40);
break;
case 1:
Main.chest[index].item[num5].SetDefaults(0x2a);
break;
}
Main.chest[index].item[num5].stack = num10;
num5++;
}
if (genRand.Next(2) == 0)
{
int num11 = genRand.Next(1);
int num12 = genRand.Next(3) + 3;
if (num11 == 0)
{
Main.chest[index].item[num5].SetDefaults(0x1c);
}
Main.chest[index].item[num5].stack = num12;
num5++;
}
if (genRand.Next(2) == 0)
{
int num13 = genRand.Next(2);
int num14 = genRand.Next(11) + 10;
switch (num13)
{
case 0:
Main.chest[index].item[num5].SetDefaults(8);
break;
case 1:
Main.chest[index].item[num5].SetDefaults(0x1f);
break;
}
Main.chest[index].item[num5].stack = num14;
num5++;
}
if (genRand.Next(2) == 0)
{
Main.chest[index].item[num5].SetDefaults(0x49);
Main.chest[index].item[num5].stack = genRand.Next(1, 3);
num5++;
}
}
return true;
}
}
return false;
}
public static void AddHellHouses()
{
int num = (int) (Main.maxTilesX * 0.25);
for (int i = num; i < (Main.maxTilesX - num); i++)
{
int j = Main.maxTilesY - 40;
while (Main.tile[i, j].active || (Main.tile[i, j].liquid > 0))
{
j--;
}
if (Main.tile[i, j + 1].active)
{
HellHouse(i, j);
i += genRand.Next(15, 80);
}
}
}
public static bool AddLifeCrystal(int i, int j)
{
for (int k = j; k < Main.maxTilesY; k++)
{
if (Main.tile[i, k].active && Main.tileSolid[Main.tile[i, k].type])
{
int endX = i;
int endY = k - 1;
if (Main.tile[endX, endY - 1].lava || Main.tile[endX - 1, endY - 1].lava)
{
return false;
}
if (!EmptyTileCheck(endX - 1, endX, endY - 1, endY, -1))
{
return false;
}
Main.tile[endX - 1, endY - 1].active = true;
Main.tile[endX - 1, endY - 1].type = 12;
Main.tile[endX - 1, endY - 1].frameX = 0;
Main.tile[endX - 1, endY - 1].frameY = 0;
Main.tile[endX, endY - 1].active = true;
Main.tile[endX, endY - 1].type = 12;
Main.tile[endX, endY - 1].frameX = 0x12;
Main.tile[endX, endY - 1].frameY = 0;
Main.tile[endX - 1, endY].active = true;
Main.tile[endX - 1, endY].type = 12;
Main.tile[endX - 1, endY].frameX = 0;
Main.tile[endX - 1, endY].frameY = 0x12;
Main.tile[endX, endY].active = true;
Main.tile[endX, endY].type = 12;
Main.tile[endX, endY].frameX = 0x12;
Main.tile[endX, endY].frameY = 0x12;
return true;
}
}
return false;
}
public static void AddPlants()
{
for (int i = 0; i < Main.maxTilesX; i++)
{
for (int j = 1; j < Main.maxTilesY; j++)
{
if ((Main.tile[i, j].type == 2) && Main.tile[i, j].active)
{
if (!Main.tile[i, j - 1].active)
{
PlaceTile(i, j - 1, 3, true, false, -1);
}
}
else if (((Main.tile[i, j].type == 0x17) && Main.tile[i, j].active) && !Main.tile[i, j - 1].active)
{
PlaceTile(i, j - 1, 0x18, true, false, -1);
}
}
}
}
public static void AddShadowOrb(int x, int y)
{
if (((x >= 10) && (x <= (Main.maxTilesX - 10))) && ((y >= 10) && (y <= (Main.maxTilesY - 10))))
{
Main.tile[x - 1, y - 1].active = true;
Main.tile[x - 1, y - 1].type = 0x1f;
Main.tile[x - 1, y - 1].frameX = 0;
Main.tile[x - 1, y - 1].frameY = 0;
Main.tile[x, y - 1].active = true;
Main.tile[x, y - 1].type = 0x1f;
Main.tile[x, y - 1].frameX = 0x12;
Main.tile[x, y - 1].frameY = 0;
Main.tile[x - 1, y].active = true;
Main.tile[x - 1, y].type = 0x1f;
Main.tile[x - 1, y].frameX = 0;
Main.tile[x - 1, y].frameY = 0x12;
Main.tile[x, y].active = true;
Main.tile[x, y].type = 0x1f;
Main.tile[x, y].frameX = 0x12;
Main.tile[x, y].frameY = 0x12;
}
}
public static void AddTrees()
{
for (int i = 1; i < (Main.maxTilesX - 1); i++)
{
for (int j = 20; j < Main.worldSurface; j++)
{
GrowTree(i, j);
}
}
}
public static void CaveOpenater(int i, int j)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(7, 12);
double num6 = num5;
int num7 = 1;
if (genRand.Next(2) == 0)
{
num7 = -1;
}
vector.X = i;
vector.Y = j;
int num8 = 100;
vector2.Y = 0f;
vector2.X = num7;
while (num8 > 0)
{
if (Main.tile[(int) vector.X, (int) vector.Y].wall == 0)
{
num8 = 0;
}
num8--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
float num11 = Math.Abs((float) (k - vector.X));
float num12 = Math.Abs((float) (m - vector.Y));
if (Math.Sqrt((double) ((num11 * num11) + (num12 * num12))) < (num6 * 0.4))
{
Main.tile[k, m].active = false;
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > (num7 + 0.5f))
{
vector2.X = num7 + 0.5f;
}
if (vector2.X < (num7 - 0.5f))
{
vector2.X = num7 - 0.5f;
}
if (vector2.Y > 0f)
{
vector2.Y = 0f;
}
if (vector2.Y < -0.5)
{
vector2.Y = -0.5f;
}
}
}
public static void Cavinator(int i, int j, int steps)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(7, 15);
double num6 = num5;
int num7 = 1;
if (genRand.Next(2) == 0)
{
num7 = -1;
}
vector.X = i;
vector.Y = j;
int num8 = genRand.Next(20, 40);
vector2.Y = genRand.Next(10, 20) * 0.01f;
vector2.X = num7;
while (num8 > 0)
{
num8--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
float num11 = Math.Abs((float) (k - vector.X));
float num12 = Math.Abs((float) (m - vector.Y));
if (Math.Sqrt((double) ((num11 * num11) + (num12 * num12))) < (num6 * 0.4))
{
Main.tile[k, m].active = false;
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > (num7 + 0.5f))
{
vector2.X = num7 + 0.5f;
}
if (vector2.X < (num7 - 0.5f))
{
vector2.X = num7 - 0.5f;
}
if (vector2.Y > 2f)
{
vector2.Y = 2f;
}
if (vector2.Y < 0f)
{
vector2.Y = 0f;
}
}
if ((steps > 0) && (((int) vector.Y) < (Main.rockLayer + 50.0)))
{
Cavinator((int) vector.X, (int) vector.Y, steps - 1);
}
}
public static void ChasmRunner(int i, int j, int steps, bool makeOrb = false)
{
Vector2 vector;
Vector2 vector2;
bool flag = false;
bool flag2 = false;
if (!makeOrb)
{
flag = true;
}
float num5 = steps;
vector.X = i;
vector.Y = j;
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = (genRand.Next(11) * 0.2f) + 0.5f;
int num6 = 5;
double num7 = genRand.Next(5) + 7;
while (num7 > 0.0)
{
int num;
int num2;
int num3;
int maxTilesY;
if (num5 > 0f)
{
num7 += genRand.Next(3);
num7 -= genRand.Next(3);
if (num7 < 7.0)
{
num7 = 7.0;
}
if (num7 > 20.0)
{
num7 = 20.0;
}
if ((num5 == 1f) && (num7 < 10.0))
{
num7 = 10.0;
}
}
else
{
num7 -= genRand.Next(4);
}
if ((vector.Y > Main.rockLayer) && (num5 > 0f))
{
num5 = 0f;
}
num5--;
if (num5 > num6)
{
num = (int) (vector.X - (num7 * 0.5));
num3 = (int) (vector.X + (num7 * 0.5));
num2 = (int) (vector.Y - (num7 * 0.5));
maxTilesY = (int) (vector.Y + (num7 * 0.5));
if (num < 0)
{
num = 0;
}
if (num3 > (Main.maxTilesX - 1))
{
num3 = Main.maxTilesX - 1;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int n = num; n < num3; n++)
{
for (int num9 = num2; num9 < maxTilesY; num9++)
{
if ((Math.Abs((float) (n - vector.X)) + Math.Abs((float) (num9 - vector.Y))) < ((num7 * 0.5) * (1.0 + (genRand.Next(-10, 11) * 0.015))))
{
Main.tile[n, num9].active = false;
}
}
}
}
if (num5 <= 0f)
{
if (!flag)
{
flag = true;
AddShadowOrb((int) vector.X, (int) vector.Y);
}
else if (!flag2)
{
flag2 = false;
bool flag3 = false;
int num10 = 0;
while (!flag3)
{
int x = genRand.Next(((int) vector.X) - 0x19, ((int) vector.X) + 0x19);
int y = genRand.Next(((int) vector.Y) - 50, (int) vector.Y);
if (x < 5)
{
x = 5;
}
if (x > (Main.maxTilesX - 5))
{
x = Main.maxTilesX - 5;
}
if (y < 5)
{
y = 5;
}
if (y > (Main.maxTilesY - 5))
{
y = Main.maxTilesY - 5;
}
if (y > Main.worldSurface)
{
Place3x2(x, y, 0x1a);
if (Main.tile[x, y].type == 0x1a)
{
flag3 = true;
}
else
{
num10++;
if (num10 >= 0x2710)
{
flag3 = true;
}
}
}
else
{
flag3 = true;
}
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.01f;
if (vector2.X > 0.3)
{
vector2.X = 0.3f;
}
if (vector2.X < -0.3)
{
vector2.X = -0.3f;
}
num = (int) (vector.X - (num7 * 1.1));
num3 = (int) (vector.X + (num7 * 1.1));
num2 = (int) (vector.Y - (num7 * 1.1));
maxTilesY = (int) (vector.Y + (num7 * 1.1));
if (num < 1)
{
num = 1;
}
if (num3 > (Main.maxTilesX - 1))
{
num3 = Main.maxTilesX - 1;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int k = num; k < num3; k++)
{
for (int num14 = num2; num14 < maxTilesY; num14++)
{
if ((Math.Abs((float) (k - vector.X)) + Math.Abs((float) (num14 - vector.Y))) < ((num7 * 1.1) * (1.0 + (genRand.Next(-10, 11) * 0.015))))
{
if ((Main.tile[k, num14].type != 0x19) && (num14 > (j + genRand.Next(3, 20))))
{
Main.tile[k, num14].active = true;
}
if (steps <= num6)
{
Main.tile[k, num14].active = true;
}
if (Main.tile[k, num14].type != 0x1f)
{
Main.tile[k, num14].type = 0x19;
}
if (Main.tile[k, num14].wall == 2)
{
Main.tile[k, num14].wall = 0;
}
}
}
}
for (int m = num; m < num3; m++)
{
for (int num16 = num2; num16 < maxTilesY; num16++)
{
if ((Math.Abs((float) (m - vector.X)) + Math.Abs((float) (num16 - vector.Y))) < ((num7 * 1.1) * (1.0 + (genRand.Next(-10, 11) * 0.015))))
{
if (Main.tile[m, num16].type != 0x1f)
{
Main.tile[m, num16].type = 0x19;
}
if (steps <= num6)
{
Main.tile[m, num16].active = true;
}
if (num16 > (j + genRand.Next(3, 20)))
{
PlaceWall(m, num16, 3, true);
}
}
}
}
}
}
public static void Check1x2(int x, int j, byte type)
{
if (!destroyObject)
{
int num = j;
bool flag = true;
if (Main.tile[x, num] == null)
{
Main.tile[x, num] = new Tile();
}
if (Main.tile[x, num + 1] == null)
{
Main.tile[x, num + 1] = new Tile();
}
if (Main.tile[x, num].frameY == 0x12)
{
num--;
}
if (Main.tile[x, num] == null)
{
Main.tile[x, num] = new Tile();
}
if (((Main.tile[x, num].frameY == 0) && (Main.tile[x, num + 1].frameY == 0x12)) && ((Main.tile[x, num].type == type) && (Main.tile[x, num + 1].type == type)))
{
flag = false;
}
if (Main.tile[x, num + 2] == null)
{
Main.tile[x, num + 2] = new Tile();
}
if (!Main.tile[x, num + 2].active || !Main.tileSolid[Main.tile[x, num + 2].type])
{
flag = true;
}
if ((Main.tile[x, num + 2].type != 2) && (Main.tile[x, num].type == 20))
{
flag = true;
}
if (flag)
{
destroyObject = true;
if (Main.tile[x, num].type == type)
{
KillTile(x, num, false, false, false);
}
if (Main.tile[x, num + 1].type == type)
{
KillTile(x, num + 1, false, false, false);
}
if (type == 15)
{
Item.NewItem(x * 0x10, num * 0x10, 0x20, 0x20, 0x22, 1, false);
}
destroyObject = false;
}
}
}
public static void Check1x2Top(int x, int j, byte type)
{
if (!destroyObject)
{
int num = j;
bool flag = true;
if (Main.tile[x, num] == null)
{
Main.tile[x, num] = new Tile();
}
if (Main.tile[x, num + 1] == null)
{
Main.tile[x, num + 1] = new Tile();
}
if (Main.tile[x, num].frameY == 0x12)
{
num--;
}
if (Main.tile[x, num] == null)
{
Main.tile[x, num] = new Tile();
}
if (((Main.tile[x, num].frameY == 0) && (Main.tile[x, num + 1].frameY == 0x12)) && ((Main.tile[x, num].type == type) && (Main.tile[x, num + 1].type == type)))
{
flag = false;
}
if (Main.tile[x, num - 1] == null)
{
Main.tile[x, num - 1] = new Tile();
}
if ((!Main.tile[x, num - 1].active || !Main.tileSolid[Main.tile[x, num - 1].type]) || Main.tileSolidTop[Main.tile[x, num - 1].type])
{
flag = true;
}
if (flag)
{
destroyObject = true;
if (Main.tile[x, num].type == type)
{
KillTile(x, num, false, false, false);
}
if (Main.tile[x, num + 1].type == type)
{
KillTile(x, num + 1, false, false, false);
}
if (type == 0x2a)
{
Item.NewItem(x * 0x10, num * 0x10, 0x20, 0x20, 0x88, 1, false);
}
destroyObject = false;
}
}
}
public static void Check2x1(int i, int y, byte type)
{
if (!destroyObject)
{
int num = i;
bool flag = true;
if (Main.tile[num, y] == null)
{
Main.tile[num, y] = new Tile();
}
if (Main.tile[num + 1, y] == null)
{
Main.tile[num + 1, y] = new Tile();
}
if (Main.tile[num, y + 1] == null)
{
Main.tile[num, y + 1] = new Tile();
}
if (Main.tile[num + 1, y + 1] == null)
{
Main.tile[num + 1, y + 1] = new Tile();
}
if (Main.tile[num, y].frameX == 0x12)
{
num--;
}
if (Main.tile[num, y] == null)
{
Main.tile[num, y] = new Tile();
}
if (((Main.tile[num, y].frameX == 0) && (Main.tile[num + 1, y].frameX == 0x12)) && ((Main.tile[num, y].type == type) && (Main.tile[num + 1, y].type == type)))
{
flag = false;
}
if (type == 0x1d)
{
if (!Main.tile[num, y + 1].active || !Main.tileTable[Main.tile[num, y + 1].type])
{
flag = true;
}
if (!Main.tile[num + 1, y + 1].active || !Main.tileTable[Main.tile[num + 1, y + 1].type])
{
flag = true;
}
}
else
{
if (!Main.tile[num, y + 1].active || !Main.tileSolid[Main.tile[num, y + 1].type])
{
flag = true;
}
if (!Main.tile[num + 1, y + 1].active || !Main.tileSolid[Main.tile[num + 1, y + 1].type])
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
if (Main.tile[num, y].type == type)
{
KillTile(num, y, false, false, false);
}
if (Main.tile[num + 1, y].type == type)
{
KillTile(num + 1, y, false, false, false);
}
if (type == 0x10)
{
Item.NewItem(num * 0x10, y * 0x10, 0x20, 0x20, 0x23, 1, false);
}
if (type == 0x12)
{
Item.NewItem(num * 0x10, y * 0x10, 0x20, 0x20, 0x24, 1, false);
}
if (type == 0x1d)
{
Item.NewItem(num * 0x10, y * 0x10, 0x20, 0x20, 0x57, 1, false);
Main.PlaySound(13, i * 0x10, y * 0x10, 1);
}
destroyObject = false;
}
}
}
public static void Check3x2(int i, int j, int type)
{
if (!destroyObject)
{
bool flag = false;
int num = i;
int num2 = j;
num += (Main.tile[i, j].frameX / 0x12) * -1;
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
for (int k = num; k < (num + 3); k++)
{
for (int m = num2; m < (num2 + 2); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((Main.tile[k, m].frameX != ((k - num) * 0x12)) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
if (Main.tile[k, num2 + 2] == null)
{
Main.tile[k, num2 + 2] = new Tile();
}
if (!Main.tile[k, num2 + 2].active || !Main.tileSolid[Main.tile[k, num2 + 2].type])
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
for (int n = num; n < (num + 3); n++)
{
for (int num6 = num2; num6 < (num2 + 3); num6++)
{
if ((Main.tile[n, num6].type == type) && Main.tile[n, num6].active)
{
KillTile(n, num6, false, false, false);
}
}
}
if (type == 14)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x20, 1, false);
}
else if (type == 0x11)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x21, 1, false);
}
else if (type == 0x4d)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0xdd, 1, false);
}
destroyObject = false;
for (int num7 = num - 1; num7 < (num + 4); num7++)
{
for (int num8 = num2 - 1; num8 < (num2 + 4); num8++)
{
TileFrame(num7, num8, false, false);
}
}
}
}
}
public static void Check3x3(int i, int j, int type)
{
if (!destroyObject)
{
bool flag = false;
int num = i;
int num2 = j;
num += (Main.tile[i, j].frameX / 0x12) * -1;
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
for (int k = num; k < (num + 3); k++)
{
for (int m = num2; m < (num2 + 3); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((Main.tile[k, m].frameX != ((k - num) * 0x12)) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
}
if (Main.tile[num + 1, num2 - 1] == null)
{
Main.tile[num + 1, num2 - 1] = new Tile();
}
if ((!Main.tile[num + 1, num2 - 1].active || !Main.tileSolid[Main.tile[num + 1, num2 - 1].type]) || Main.tileSolidTop[Main.tile[num + 1, num2 - 1].type])
{
flag = true;
}
if (flag)
{
destroyObject = true;
for (int n = num; n < (num + 3); n++)
{
for (int num6 = num2; num6 < (num2 + 3); num6++)
{
if ((Main.tile[n, num6].type == type) && Main.tile[n, num6].active)
{
KillTile(n, num6, false, false, false);
}
}
}
if (type == 0x22)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x6a, 1, false);
}
else if (type == 0x23)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x6b, 1, false);
}
else if (type == 0x24)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x6c, 1, false);
}
destroyObject = false;
for (int num7 = num - 1; num7 < (num + 4); num7++)
{
for (int num8 = num2 - 1; num8 < (num2 + 4); num8++)
{
TileFrame(num7, num8, false, false);
}
}
}
}
}
public static void Check4x2(int i, int j, int type)
{
if (!destroyObject)
{
bool flag = false;
int num = i;
int num2 = j;
num += (Main.tile[i, j].frameX / 0x12) * -1;
if ((type == 0x4f) && (Main.tile[i, j].frameX >= 0x48))
{
num += 4;
}
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
for (int k = num; k < (num + 4); k++)
{
for (int m = num2; m < (num2 + 2); m++)
{
int num5 = (k - num) * 0x12;
if ((type == 0x4f) && (Main.tile[i, j].frameX >= 0x48))
{
num5 = ((k - num) + 4) * 0x12;
}
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((Main.tile[k, m].frameX != num5) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
if (Main.tile[k, num2 + 2] == null)
{
Main.tile[k, num2 + 2] = new Tile();
}
if (!Main.tile[k, num2 + 2].active || !Main.tileSolid[Main.tile[k, num2 + 2].type])
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
for (int n = num; n < (num + 4); n++)
{
for (int num7 = num2; num7 < (num2 + 3); num7++)
{
if ((Main.tile[n, num7].type == type) && Main.tile[n, num7].active)
{
KillTile(n, num7, false, false, false);
}
}
}
if (type == 0x4f)
{
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0xe0, 1, false);
}
destroyObject = false;
for (int num8 = num - 1; num8 < (num + 4); num8++)
{
for (int num9 = num2 - 1; num9 < (num2 + 4); num9++)
{
TileFrame(num8, num9, false, false);
}
}
}
}
}
public static void CheckChest(int i, int j, int type)
{
if (!destroyObject)
{
bool flag = false;
int num = i;
int num2 = j;
num += (Main.tile[i, j].frameX / 0x12) * -1;
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
for (int k = num; k < (num + 2); k++)
{
for (int m = num2; m < (num2 + 2); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((Main.tile[k, m].frameX != ((k - num) * 0x12)) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
if (Main.tile[k, num2 + 2] == null)
{
Main.tile[k, num2 + 2] = new Tile();
}
if (!Main.tile[k, num2 + 2].active || !Main.tileSolid[Main.tile[k, num2 + 2].type])
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
for (int n = num; n < (num + 2); n++)
{
for (int num6 = num2; num6 < (num2 + 3); num6++)
{
if ((Main.tile[n, num6].type == type) && Main.tile[n, num6].active)
{
KillTile(n, num6, false, false, false);
}
}
}
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x30, 1, false);
destroyObject = false;
}
}
}
public static void CheckOnTable1x1(int x, int y, int type)
{
if ((Main.tile[x, y + 1] != null) && (!Main.tile[x, y + 1].active || !Main.tileTable[Main.tile[x, y + 1].type]))
{
if (type == 0x4e)
{
if (!Main.tile[x, y + 1].active || !Main.tileSolid[Main.tile[x, y + 1].type])
{
KillTile(x, y, false, false, false);
}
}
else
{
KillTile(x, y, false, false, false);
}
}
}
public static void CheckPot(int i, int j, int type = 0x1c)
{
if (!destroyObject)
{
bool flag = false;
int num = 0;
int num2 = j;
num += Main.tile[i, j].frameX / 0x12;
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
while (num > 1)
{
num -= 2;
}
num *= -1;
num += i;
for (int k = num; k < (num + 2); k++)
{
for (int m = num2; m < (num2 + 2); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
int num5 = Main.tile[k, m].frameX / 0x12;
while (num5 > 1)
{
num5 -= 2;
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((num5 != (k - num)) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
if (Main.tile[k, num2 + 2] == null)
{
Main.tile[k, num2 + 2] = new Tile();
}
if (!Main.tile[k, num2 + 2].active || !Main.tileSolid[Main.tile[k, num2 + 2].type])
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
Main.PlaySound(13, i * 0x10, j * 0x10, 1);
for (int n = num; n < (num + 2); n++)
{
for (int num7 = num2; num7 < (num2 + 2); num7++)
{
if ((Main.tile[n, num7].type == type) && Main.tile[n, num7].active)
{
KillTile(n, num7, false, false, false);
}
}
}
Gore.NewGore(new Vector2((float) (i * 0x10), (float) (j * 0x10)), new Vector2(), 0x33);
Gore.NewGore(new Vector2((float) (i * 0x10), (float) (j * 0x10)), new Vector2(), 0x34);
Gore.NewGore(new Vector2((float) (i * 0x10), (float) (j * 0x10)), new Vector2(), 0x35);
int num8 = Main.rand.Next(10);
if ((num8 == 0) && (Main.player[Player.FindClosest(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10)].statLife < Main.player[Player.FindClosest(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10)].statLifeMax))
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x3a, 1, false);
}
else if ((num8 == 1) && (Main.player[Player.FindClosest(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10)].statMana < Main.player[Player.FindClosest(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10)].statManaMax))
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0xb8, 1, false);
}
else if (num8 == 2)
{
int stack = Main.rand.Next(3) + 1;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 8, stack, false);
}
else if (num8 == 3)
{
int num10 = Main.rand.Next(8) + 3;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 40, num10, false);
}
else if (num8 == 4)
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x1c, 1, false);
}
else if (num8 == 5)
{
int num11 = Main.rand.Next(4) + 1;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0xa6, num11, false);
}
else
{
float num12 = 200 + genRand.Next(-100, 0x65);
num12 *= 1f + (Main.rand.Next(-20, 0x15) * 0.01f);
if (Main.rand.Next(5) == 0)
{
num12 *= 1f + (Main.rand.Next(5, 11) * 0.01f);
}
if (Main.rand.Next(10) == 0)
{
num12 *= 1f + (Main.rand.Next(10, 0x15) * 0.01f);
}
if (Main.rand.Next(15) == 0)
{
num12 *= 1f + (Main.rand.Next(20, 0x29) * 0.01f);
}
if (Main.rand.Next(20) == 0)
{
num12 *= 1f + (Main.rand.Next(40, 0x51) * 0.01f);
}
if (Main.rand.Next(0x19) == 0)
{
num12 *= 1f + (Main.rand.Next(50, 0x65) * 0.01f);
}
while (((int) num12) > 0)
{
if (num12 > 1000000f)
{
int num13 = (int) (num12 / 1000000f);
if ((num13 > 50) && (Main.rand.Next(2) == 0))
{
num13 /= Main.rand.Next(3) + 1;
}
if (Main.rand.Next(2) == 0)
{
num13 /= Main.rand.Next(3) + 1;
}
num12 -= 0xf4240 * num13;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x4a, num13, false);
}
else
{
if (num12 > 10000f)
{
int num14 = (int) (num12 / 10000f);
if ((num14 > 50) && (Main.rand.Next(2) == 0))
{
num14 /= Main.rand.Next(3) + 1;
}
if (Main.rand.Next(2) == 0)
{
num14 /= Main.rand.Next(3) + 1;
}
num12 -= 0x2710 * num14;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x49, num14, false);
continue;
}
if (num12 > 100f)
{
int num15 = (int) (num12 / 100f);
if ((num15 > 50) && (Main.rand.Next(2) == 0))
{
num15 /= Main.rand.Next(3) + 1;
}
if (Main.rand.Next(2) == 0)
{
num15 /= Main.rand.Next(3) + 1;
}
num12 -= 100 * num15;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x48, num15, false);
continue;
}
int num16 = (int) num12;
if ((num16 > 50) && (Main.rand.Next(2) == 0))
{
num16 /= Main.rand.Next(3) + 1;
}
if (Main.rand.Next(2) == 0)
{
num16 /= Main.rand.Next(4) + 1;
}
if (num16 < 1)
{
num16 = 1;
}
num12 -= num16;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x47, num16, false);
}
}
}
destroyObject = false;
}
}
}
public static void CheckRoom(int x, int y)
{
if (canSpawn)
{
if (((x < 10) || (y < 10)) || ((x >= (Main.maxTilesX - 10)) || (y >= (lastMaxTilesY - 10))))
{
canSpawn = false;
}
else
{
for (int i = 0; i < numRoomTiles; i++)
{
if ((roomX[i] == x) && (roomY[i] == y))
{
return;
}
}
roomX[numRoomTiles] = x;
roomY[numRoomTiles] = y;
numRoomTiles++;
if (numRoomTiles >= maxRoomTiles)
{
canSpawn = false;
}
else
{
if (Main.tile[x, y].active)
{
houseTile[Main.tile[x, y].type] = true;
if (Main.tileSolid[Main.tile[x, y].type] || (Main.tile[x, y].type == 11))
{
return;
}
}
if (x < roomX1)
{
roomX1 = x;
}
if (x > roomX2)
{
roomX2 = x;
}
if (y < roomY1)
{
roomY1 = y;
}
if (y > roomY2)
{
roomY2 = y;
}
bool flag = false;
bool flag2 = false;
for (int j = -2; j < 3; j++)
{
if (Main.wallHouse[Main.tile[x + j, y].wall])
{
flag = true;
}
if (Main.tile[x + j, y].active && (Main.tileSolid[Main.tile[x + j, y].type] || (Main.tile[x + j, y].type == 11)))
{
flag = true;
}
if (Main.wallHouse[Main.tile[x, y + j].wall])
{
flag2 = true;
}
if (Main.tile[x, y + j].active && (Main.tileSolid[Main.tile[x, y + j].type] || (Main.tile[x, y + j].type == 11)))
{
flag2 = true;
}
}
if (!flag || !flag2)
{
canSpawn = false;
}
else
{
for (int k = x - 1; k < (x + 2); k++)
{
for (int m = y - 1; m < (y + 2); m++)
{
if (((k != x) || (m != y)) && canSpawn)
{
CheckRoom(k, m);
}
}
}
}
}
}
}
}
public static void CheckSign(int x, int y, int type)
{
if (!destroyObject)
{
int num = x - 2;
int num2 = x + 3;
int num3 = y - 2;
int num4 = y + 3;
if ((((num >= 0) && (num2 <= Main.maxTilesX)) && (num3 >= 0)) && (num4 <= Main.maxTilesY))
{
bool flag = false;
for (int i = num; i < num2; i++)
{
for (int k = num3; k < num4; k++)
{
if (Main.tile[i, k] == null)
{
Main.tile[i, k] = new Tile();
}
}
}
int num7 = Main.tile[x, y].frameX / 0x12;
int num8 = Main.tile[x, y].frameY / 0x12;
while (num7 > 1)
{
num7 -= 2;
}
int num9 = x - num7;
int num10 = y - num8;
int num11 = (Main.tile[num9, num10].frameX / 0x12) / 2;
num = num9;
num2 = num9 + 2;
num3 = num10;
num4 = num10 + 2;
num7 = 0;
for (int j = num; j < num2; j++)
{
num8 = 0;
for (int m = num3; m < num4; m++)
{
if (!Main.tile[j, m].active || (Main.tile[j, m].type != type))
{
flag = true;
goto Label_017B;
}
if (((Main.tile[j, m].frameX / 0x12) != (num7 + (num11 * 2))) || ((Main.tile[j, m].frameY / 0x12) != num8))
{
flag = true;
goto Label_017B;
}
num8++;
}
Label_017B:
num7++;
}
if (!flag)
{
if ((Main.tile[num9, num10 + 2].active && Main.tileSolid[Main.tile[num9, num10 + 2].type]) && (Main.tile[num9 + 1, num10 + 2].active && Main.tileSolid[Main.tile[num9 + 1, num10 + 2].type]))
{
num11 = 0;
}
else if (((Main.tile[num9, num10 - 1].active && Main.tileSolid[Main.tile[num9, num10 - 1].type]) && (!Main.tileSolidTop[Main.tile[num9, num10 - 1].type] && Main.tile[num9 + 1, num10 - 1].active)) && (Main.tileSolid[Main.tile[num9 + 1, num10 - 1].type] && !Main.tileSolidTop[Main.tile[num9 + 1, num10 - 1].type]))
{
num11 = 1;
}
else if (((Main.tile[num9 - 1, num10].active && Main.tileSolid[Main.tile[num9 - 1, num10].type]) && (!Main.tileSolidTop[Main.tile[num9 - 1, num10].type] && Main.tile[num9 - 1, num10 + 1].active)) && (Main.tileSolid[Main.tile[num9 - 1, num10 + 1].type] && !Main.tileSolidTop[Main.tile[num9 - 1, num10 + 1].type]))
{
num11 = 2;
}
else if (((Main.tile[num9 + 2, num10].active && Main.tileSolid[Main.tile[num9 + 2, num10].type]) && (!Main.tileSolidTop[Main.tile[num9 + 2, num10].type] && Main.tile[num9 + 2, num10 + 1].active)) && (Main.tileSolid[Main.tile[num9 + 2, num10 + 1].type] && !Main.tileSolidTop[Main.tile[num9 + 2, num10 + 1].type]))
{
num11 = 3;
}
else
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
for (int n = num; n < num2; n++)
{
for (int num15 = num3; num15 < num4; num15++)
{
if (Main.tile[n, num15].type == type)
{
KillTile(n, num15, false, false, false);
}
}
}
Sign.KillSign(num9, num10);
Item.NewItem(x * 0x10, y * 0x10, 0x20, 0x20, 0xab, 1, false);
destroyObject = false;
}
else
{
int num16 = 0x24 * num11;
for (int num17 = 0; num17 < 2; num17++)
{
for (int num18 = 0; num18 < 2; num18++)
{
Main.tile[num9 + num17, num10 + num18].active = true;
Main.tile[num9 + num17, num10 + num18].type = (byte) type;
Main.tile[num9 + num17, num10 + num18].frameX = (short) (num16 + (0x12 * num17));
Main.tile[num9 + num17, num10 + num18].frameY = (short) (0x12 * num18);
}
}
}
}
}
}
public static void CheckSunflower(int i, int j, int type = 0x1b)
{
if (!destroyObject)
{
bool flag = false;
int num = 0;
int num2 = j;
num += Main.tile[i, j].frameX / 0x12;
num2 += (Main.tile[i, j].frameY / 0x12) * -1;
while (num > 1)
{
num -= 2;
}
num *= -1;
num += i;
for (int k = num; k < (num + 2); k++)
{
for (int m = num2; m < (num2 + 4); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
int num5 = Main.tile[k, m].frameX / 0x12;
while (num5 > 1)
{
num5 -= 2;
}
if ((!Main.tile[k, m].active || (Main.tile[k, m].type != type)) || ((num5 != (k - num)) || (Main.tile[k, m].frameY != ((m - num2) * 0x12))))
{
flag = true;
}
}
if (Main.tile[k, num2 + 4] == null)
{
Main.tile[k, num2 + 4] = new Tile();
}
if (!Main.tile[k, num2 + 4].active || (Main.tile[k, num2 + 4].type != 2))
{
flag = true;
}
}
if (flag)
{
destroyObject = true;
for (int n = num; n < (num + 2); n++)
{
for (int num7 = num2; num7 < (num2 + 4); num7++)
{
if ((Main.tile[n, num7].type == type) && Main.tile[n, num7].active)
{
KillTile(n, num7, false, false, false);
}
}
}
Item.NewItem(i * 0x10, j * 0x10, 0x20, 0x20, 0x3f, 1, false);
destroyObject = false;
}
}
}
public static void clearWorld()
{
spawnEye = false;
spawnNPC = 0;
shadowOrbCount = 0;
Main.helpText = 0;
Main.dungeonX = 0;
Main.dungeonY = 0;
NPC.downedBoss1 = false;
NPC.downedBoss2 = false;
NPC.downedBoss3 = false;
shadowOrbSmashed = false;
spawnMeteor = false;
stopDrops = false;
Main.invasionDelay = 0;
Main.invasionType = 0;
Main.invasionSize = 0;
Main.invasionWarn = 0;
Main.invasionX = 0.0;
noLiquidCheck = false;
Liquid.numLiquid = 0;
LiquidBuffer.numLiquidBuffer = 0;
if (((Main.netMode == 1) || (lastMaxTilesX > Main.maxTilesX)) || (lastMaxTilesY > Main.maxTilesY))
{
for (int num = 0; num < lastMaxTilesX; num++)
{
float num2 = ((float) num) / ((float) lastMaxTilesX);
Main.statusText = "Freeing unused resources: " + ((int) ((num2 * 100f) + 1f)) + "%";
for (int num3 = 0; num3 < lastMaxTilesY; num3++)
{
Main.tile[num, num3] = null;
}
}
}
lastMaxTilesX = Main.maxTilesX;
lastMaxTilesY = Main.maxTilesY;
if (Main.netMode != 1)
{
for (int num4 = 0; num4 < Main.maxTilesX; num4++)
{
float num5 = ((float) num4) / ((float) Main.maxTilesX);
Main.statusText = "Resetting game objects: " + ((int) ((num5 * 100f) + 1f)) + "%";
for (int num6 = 0; num6 < Main.maxTilesY; num6++)
{
Main.tile[num4, num6] = new Tile();
}
}
}
for (int i = 0; i < 0x7d0; i++)
{
Main.dust[i] = new Dust();
}
for (int j = 0; j < 200; j++)
{
Main.gore[j] = new Gore();
}
for (int k = 0; k < 200; k++)
{
Main.item[k] = new Item();
}
for (int m = 0; m < 0x3e8; m++)
{
Main.npc[m] = new NPC();
}
for (int n = 0; n < 0x3e8; n++)
{
Main.projectile[n] = new Projectile();
}
for (int num12 = 0; num12 < 0x3e8; num12++)
{
Main.chest[num12] = null;
}
for (int num13 = 0; num13 < 0x3e8; num13++)
{
Main.sign[num13] = null;
}
for (int num14 = 0; num14 < Liquid.resLiquid; num14++)
{
Main.liquid[num14] = new Liquid();
}
for (int num15 = 0; num15 < 0x2710; num15++)
{
Main.liquidBuffer[num15] = new LiquidBuffer();
}
setWorldSize();
worldCleared = true;
}
public static bool CloseDoor(int i, int j, bool forced = false)
{
int num = 0;
int num2 = i;
int num3 = j;
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
int frameX = Main.tile[i, j].frameX;
int frameY = Main.tile[i, j].frameY;
switch (frameX)
{
case 0:
num2 = i;
num = 1;
break;
case 0x12:
num2 = i - 1;
num = 1;
break;
case 0x24:
num2 = i + 1;
num = -1;
break;
case 0x36:
num2 = i;
num = -1;
break;
}
switch (frameY)
{
case 0:
num3 = j;
break;
case 0x12:
num3 = j - 1;
break;
case 0x24:
num3 = j - 2;
break;
}
int num6 = num2;
if (num == -1)
{
num6 = num2 - 1;
}
if (!forced)
{
for (int n = num3; n < (num3 + 3); n++)
{
if (!Collision.EmptyTile(num2, n, true))
{
return false;
}
}
}
for (int k = num6; k < (num6 + 2); k++)
{
for (int num9 = num3; num9 < (num3 + 3); num9++)
{
if (k == num2)
{
if (Main.tile[k, num9] == null)
{
Main.tile[k, num9] = new Tile();
}
Main.tile[k, num9].type = 10;
Main.tile[k, num9].frameX = (short) (genRand.Next(3) * 0x12);
}
else
{
if (Main.tile[k, num9] == null)
{
Main.tile[k, num9] = new Tile();
}
Main.tile[k, num9].active = false;
}
}
}
for (int m = num2 - 1; m <= (num2 + 1); m++)
{
for (int num11 = num3 - 1; num11 <= (num3 + 2); num11++)
{
TileFrame(m, num11, false, false);
}
}
Main.PlaySound(9, i * 0x10, j * 0x10, 1);
return true;
}
public static void CreateNewWorld()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.worldGenCallBack), 1);
}
public static void dropMeteor()
{
bool flag = true;
int num = 0;
if (Main.netMode != 1)
{
for (int i = 0; i < 8; i++)
{
if (Main.player[i].active)
{
flag = false;
break;
}
}
int num3 = 0;
float num4 = Main.maxTilesX / 0x1068;
int num5 = (int) (400f * num4);
for (int j = 5; j < (Main.maxTilesX - 5); j++)
{
for (int k = 5; k < Main.worldSurface; k++)
{
if (Main.tile[j, k].active && (Main.tile[j, k].type == 0x25))
{
num3++;
if (num3 > num5)
{
return;
}
}
}
}
while (!flag)
{
float num8 = Main.maxTilesX * 0.08f;
int num9 = Main.rand.Next(50, Main.maxTilesX - 50);
while ((num9 > (Main.spawnTileX - num8)) && (num9 < (Main.spawnTileX + num8)))
{
num9 = Main.rand.Next(50, Main.maxTilesX - 50);
}
for (int m = Main.rand.Next(100); m < Main.maxTilesY; m++)
{
if (Main.tile[num9, m].active && Main.tileSolid[Main.tile[num9, m].type])
{
flag = meteor(num9, m);
break;
}
}
num++;
if (num >= 100)
{
return;
}
}
}
}
public static void DungeonEnt(int i, int j, int tileType, int wallType)
{
Vector2 vector;
double num5 = dxStrength1;
double num6 = dyStrength1;
vector.X = i;
vector.Y = j - (((float) num6) / 2f);
dMinY = (int) vector.Y;
int num7 = 1;
if (i > (Main.maxTilesX / 2))
{
num7 = -1;
}
int num = ((int) (vector.X - (num5 * 0.60000002384185791))) - genRand.Next(2, 5);
int maxTilesX = ((int) (vector.X + (num5 * 0.60000002384185791))) + genRand.Next(2, 5);
int num2 = ((int) (vector.Y - (num6 * 0.60000002384185791))) - genRand.Next(2, 5);
int maxTilesY = ((int) (vector.Y + (num6 * 0.60000002384185791))) + genRand.Next(8, 0x10);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int k = num; k < maxTilesX; k++)
{
for (int num9 = num2; num9 < maxTilesY; num9++)
{
Main.tile[k, num9].liquid = 0;
if (Main.tile[k, num9].wall != wallType)
{
Main.tile[k, num9].wall = 0;
if (((k > (num + 1)) && (k < (maxTilesX - 2))) && ((num9 > (num2 + 1)) && (num9 < (maxTilesY - 2))))
{
PlaceWall(k, num9, wallType, true);
}
Main.tile[k, num9].active = true;
Main.tile[k, num9].type = (byte) tileType;
}
}
}
int num10 = num;
int num11 = (num + 5) + genRand.Next(4);
int num12 = (num2 - 3) - genRand.Next(3);
int num13 = num2;
for (int m = num10; m < num11; m++)
{
for (int num15 = num12; num15 < num13; num15++)
{
if (Main.tile[m, num15].wall != wallType)
{
Main.tile[m, num15].active = true;
Main.tile[m, num15].type = (byte) tileType;
}
}
}
num10 = (maxTilesX - 5) - genRand.Next(4);
num11 = maxTilesX;
num12 = (num2 - 3) - genRand.Next(3);
num13 = num2;
for (int n = num10; n < num11; n++)
{
for (int num17 = num12; num17 < num13; num17++)
{
if (Main.tile[n, num17].wall != wallType)
{
Main.tile[n, num17].active = true;
Main.tile[n, num17].type = (byte) tileType;
}
}
}
int num18 = 1 + genRand.Next(2);
int num19 = 2 + genRand.Next(4);
int num20 = 0;
for (int num21 = num; num21 < maxTilesX; num21++)
{
for (int num22 = num2 - num18; num22 < num2; num22++)
{
if (Main.tile[num21, num22].wall != wallType)
{
Main.tile[num21, num22].active = true;
Main.tile[num21, num22].type = (byte) tileType;
}
}
num20++;
if (num20 >= num19)
{
num21 += num19;
num20 = 0;
}
}
for (int num23 = num; num23 < maxTilesX; num23++)
{
for (int num24 = maxTilesY; num24 < (maxTilesY + 100); num24++)
{
PlaceWall(num23, num24, 2, true);
}
}
num = (int) (vector.X - (num5 * 0.60000002384185791));
maxTilesX = (int) (vector.X + (num5 * 0.60000002384185791));
num2 = (int) (vector.Y - (num6 * 0.60000002384185791));
maxTilesY = (int) (vector.Y + (num6 * 0.60000002384185791));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num25 = num; num25 < maxTilesX; num25++)
{
for (int num26 = num2; num26 < maxTilesY; num26++)
{
PlaceWall(num25, num26, wallType, true);
}
}
num = (int) ((vector.X - (num5 * 0.6)) - 1.0);
maxTilesX = (int) ((vector.X + (num5 * 0.6)) + 1.0);
num2 = (int) ((vector.Y - (num6 * 0.6)) - 1.0);
maxTilesY = (int) ((vector.Y + (num6 * 0.6)) + 1.0);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num27 = num; num27 < maxTilesX; num27++)
{
for (int num28 = num2; num28 < maxTilesY; num28++)
{
Main.tile[num27, num28].wall = (byte) wallType;
}
}
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num2 = (int) (vector.Y - (num6 * 0.5));
maxTilesY = (int) (vector.Y + (num6 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num29 = num; num29 < maxTilesX; num29++)
{
for (int num30 = num2; num30 < maxTilesY; num30++)
{
Main.tile[num29, num30].active = false;
Main.tile[num29, num30].wall = (byte) wallType;
}
}
DPlatX[numDPlats] = (int) vector.X;
DPlatY[numDPlats] = maxTilesY;
numDPlats++;
vector.X += (((float) num5) * 0.6f) * num7;
vector.Y += ((float) num6) * 0.5f;
num5 = dxStrength2;
num6 = dyStrength2;
vector.X += (((float) num5) * 0.55f) * num7;
vector.Y -= ((float) num6) * 0.5f;
num = ((int) (vector.X - (num5 * 0.60000002384185791))) - genRand.Next(1, 3);
maxTilesX = ((int) (vector.X + (num5 * 0.60000002384185791))) + genRand.Next(1, 3);
num2 = ((int) (vector.Y - (num6 * 0.60000002384185791))) - genRand.Next(1, 3);
maxTilesY = ((int) (vector.Y + (num6 * 0.60000002384185791))) + genRand.Next(6, 0x10);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num31 = num; num31 < maxTilesX; num31++)
{
for (int num32 = num2; num32 < maxTilesY; num32++)
{
if (Main.tile[num31, num32].wall != wallType)
{
bool flag = true;
if (num7 < 0)
{
if (num31 < (vector.X - (num5 * 0.5)))
{
flag = false;
}
}
else if (num31 > ((vector.X + (num5 * 0.5)) - 1.0))
{
flag = false;
}
if (flag)
{
Main.tile[num31, num32].wall = 0;
Main.tile[num31, num32].active = true;
Main.tile[num31, num32].type = (byte) tileType;
}
}
}
}
for (int num33 = num; num33 < maxTilesX; num33++)
{
for (int num34 = maxTilesY; num34 < (maxTilesY + 100); num34++)
{
PlaceWall(num33, num34, 2, true);
}
}
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num10 = num;
if (num7 < 0)
{
num10++;
}
num11 = (num10 + 5) + genRand.Next(4);
num12 = (num2 - 3) - genRand.Next(3);
num13 = num2;
for (int num35 = num10; num35 < num11; num35++)
{
for (int num36 = num12; num36 < num13; num36++)
{
if (Main.tile[num35, num36].wall != wallType)
{
Main.tile[num35, num36].active = true;
Main.tile[num35, num36].type = (byte) tileType;
}
}
}
num10 = (maxTilesX - 5) - genRand.Next(4);
num11 = maxTilesX;
num12 = (num2 - 3) - genRand.Next(3);
num13 = num2;
for (int num37 = num10; num37 < num11; num37++)
{
for (int num38 = num12; num38 < num13; num38++)
{
if (Main.tile[num37, num38].wall != wallType)
{
Main.tile[num37, num38].active = true;
Main.tile[num37, num38].type = (byte) tileType;
}
}
}
num18 = 1 + genRand.Next(2);
num19 = 2 + genRand.Next(4);
num20 = 0;
if (num7 < 0)
{
maxTilesX++;
}
for (int num39 = num + 1; num39 < (maxTilesX - 1); num39++)
{
for (int num40 = num2 - num18; num40 < num2; num40++)
{
if (Main.tile[num39, num40].wall != wallType)
{
Main.tile[num39, num40].active = true;
Main.tile[num39, num40].type = (byte) tileType;
}
}
num20++;
if (num20 >= num19)
{
num39 += num19;
num20 = 0;
}
}
num = (int) (vector.X - (num5 * 0.6));
maxTilesX = (int) (vector.X + (num5 * 0.6));
num2 = (int) (vector.Y - (num6 * 0.6));
maxTilesY = (int) (vector.Y + (num6 * 0.6));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num41 = num; num41 < maxTilesX; num41++)
{
for (int num42 = num2; num42 < maxTilesY; num42++)
{
Main.tile[num41, num42].wall = 0;
}
}
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num2 = (int) (vector.Y - (num6 * 0.5));
maxTilesY = (int) (vector.Y + (num6 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num43 = num; num43 < maxTilesX; num43++)
{
for (int num44 = num2; num44 < maxTilesY; num44++)
{
Main.tile[num43, num44].active = false;
Main.tile[num43, num44].wall = 0;
}
}
for (int num45 = num; num45 < maxTilesX; num45++)
{
if (!Main.tile[num45, maxTilesY].active)
{
Main.tile[num45, maxTilesY].active = true;
Main.tile[num45, maxTilesY].type = 0x13;
}
}
Main.dungeonX = (int) vector.X;
Main.dungeonY = maxTilesY;
int index = NPC.NewNPC((dungeonX * 0x10) + 8, dungeonY * 0x10, 0x25, 0);
Main.npc[index].homeless = false;
Main.npc[index].homeTileX = Main.dungeonX;
Main.npc[index].homeTileY = Main.dungeonY;
if (num7 == 1)
{
int num47 = 0;
for (int num48 = maxTilesX; num48 < (maxTilesX + 0x19); num48++)
{
num47++;
for (int num49 = maxTilesY + num47; num49 < (maxTilesY + 0x19); num49++)
{
Main.tile[num48, num49].active = true;
Main.tile[num48, num49].type = (byte) tileType;
}
}
}
else
{
int num50 = 0;
for (int num51 = num; num51 > (num - 0x19); num51--)
{
num50++;
for (int num52 = maxTilesY + num50; num52 < (maxTilesY + 0x19); num52++)
{
Main.tile[num51, num52].active = true;
Main.tile[num51, num52].type = (byte) tileType;
}
}
}
num18 = 1 + genRand.Next(2);
num19 = 2 + genRand.Next(4);
num20 = 0;
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num += 2;
maxTilesX -= 2;
for (int num53 = num; num53 < maxTilesX; num53++)
{
for (int num54 = num2; num54 < maxTilesY; num54++)
{
PlaceWall(num53, num54, wallType, true);
}
num20++;
if (num20 >= num19)
{
num53 += num19 * 2;
num20 = 0;
}
}
vector.X -= (((float) num5) * 0.6f) * num7;
vector.Y += ((float) num6) * 0.5f;
num5 = 15.0;
num6 = 3.0;
vector.Y -= ((float) num6) * 0.5f;
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num2 = (int) (vector.Y - (num6 * 0.5));
maxTilesY = (int) (vector.Y + (num6 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int num55 = num; num55 < maxTilesX; num55++)
{
for (int num56 = num2; num56 < maxTilesY; num56++)
{
Main.tile[num55, num56].active = false;
}
}
if (num7 < 0)
{
vector.X--;
}
PlaceTile((int) vector.X, ((int) vector.Y) + 1, 10, false, false, -1);
}
public static void DungeonHalls(int i, int j, int tileType, int wallType, bool forceX = false)
{
Vector2 vector;
Vector2 vector2 = new Vector2();
double num5 = genRand.Next(4, 6);
Vector2 vector3 = new Vector2();
Vector2 vector4 = new Vector2();
int num6 = 1;
vector.X = i;
vector.Y = j;
int num7 = genRand.Next(0x23, 80);
if (forceX)
{
num7 += 20;
lastDungeonHall = new Vector2();
}
else if (genRand.Next(5) == 0)
{
num5 *= 2.0;
num7 /= 2;
}
bool flag = false;
while (!flag)
{
if (genRand.Next(2) == 0)
{
num6 = -1;
}
else
{
num6 = 1;
}
bool flag2 = false;
if (genRand.Next(2) == 0)
{
flag2 = true;
}
if (forceX)
{
flag2 = true;
}
if (flag2)
{
vector3.Y = 0f;
vector3.X = num6;
vector4.Y = 0f;
vector4.X = -num6;
vector2.Y = 0f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.Y = -0.2f;
}
else
{
vector2.Y = 0.2f;
}
}
}
else
{
num5++;
vector2.Y = num6;
vector2.X = 0f;
vector3.X = 0f;
vector3.Y = num6;
vector4.X = 0f;
vector4.Y = -num6;
if (genRand.Next(2) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.X = 0.3f;
}
else
{
vector2.X = -0.3f;
}
}
else
{
num7 /= 2;
}
}
if (lastDungeonHall != vector4)
{
flag = true;
}
}
if (!forceX)
{
if (vector.X > (lastMaxTilesX - 200))
{
num6 = -1;
vector3.Y = 0f;
vector3.X = num6;
vector2.Y = 0f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.Y = -0.2f;
}
else
{
vector2.Y = 0.2f;
}
}
}
else if (vector.X < 200f)
{
num6 = 1;
vector3.Y = 0f;
vector3.X = num6;
vector2.Y = 0f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.Y = -0.2f;
}
else
{
vector2.Y = 0.2f;
}
}
}
else if (vector.Y > (lastMaxTilesY + 200))
{
num6 = -1;
num5++;
vector2.Y = num6;
vector2.X = 0f;
vector3.X = 0f;
vector3.Y = num6;
if (genRand.Next(2) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.X = 0.3f;
}
else
{
vector2.X = -0.3f;
}
}
}
else if (vector.Y < Main.rockLayer)
{
num6 = 1;
num5++;
vector2.Y = num6;
vector2.X = 0f;
vector3.X = 0f;
vector3.Y = num6;
if (genRand.Next(2) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.X = 0.3f;
}
else
{
vector2.X = -0.3f;
}
}
}
else if ((vector.X < (Main.maxTilesX / 2)) && (vector.X > (Main.maxTilesX * 0.25)))
{
num6 = -1;
vector3.Y = 0f;
vector3.X = num6;
vector2.Y = 0f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.Y = -0.2f;
}
else
{
vector2.Y = 0.2f;
}
}
}
else if ((vector.X > (Main.maxTilesX / 2)) && (vector.X < (Main.maxTilesX * 0.75)))
{
num6 = 1;
vector3.Y = 0f;
vector3.X = num6;
vector2.Y = 0f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
if (genRand.Next(2) == 0)
{
vector2.Y = -0.2f;
}
else
{
vector2.Y = 0.2f;
}
}
}
}
if (vector3.Y == 0f)
{
DDoorX[numDDoors] = (int) vector.X;
DDoorY[numDDoors] = (int) vector.Y;
DDoorPos[numDDoors] = 0;
numDDoors++;
}
else
{
DPlatX[numDPlats] = (int) vector.X;
DPlatY[numDPlats] = (int) vector.Y;
numDPlats++;
}
lastDungeonHall = vector3;
while (num7 > 0)
{
if ((vector3.X > 0f) && (vector.X > (Main.maxTilesX - 100)))
{
num7 = 0;
}
else if ((vector3.X < 0f) && (vector.X < 100f))
{
num7 = 0;
}
else if ((vector3.Y > 0f) && (vector.Y > (Main.maxTilesY - 100)))
{
num7 = 0;
}
else if ((vector3.Y < 0f) && (vector.Y < (Main.rockLayer + 50.0)))
{
num7 = 0;
}
num7--;
int num = ((int) ((vector.X - num5) - 4.0)) - genRand.Next(6);
int maxTilesX = ((int) ((vector.X + num5) + 4.0)) + genRand.Next(6);
int num2 = ((int) ((vector.Y - num5) - 4.0)) - genRand.Next(6);
int maxTilesY = ((int) ((vector.Y + num5) + 4.0)) + genRand.Next(6);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int k = num; k < maxTilesX; k++)
{
for (int num9 = num2; num9 < maxTilesY; num9++)
{
Main.tile[k, num9].liquid = 0;
if (Main.tile[k, num9].wall == 0)
{
Main.tile[k, num9].active = true;
Main.tile[k, num9].type = (byte) tileType;
}
}
}
for (int m = num + 1; m < (maxTilesX - 1); m++)
{
for (int num11 = num2 + 1; num11 < (maxTilesY - 1); num11++)
{
PlaceWall(m, num11, wallType, true);
}
}
int num12 = 0;
if ((vector2.Y == 0f) && (genRand.Next(((int) num5) + 1) == 0))
{
num12 = genRand.Next(1, 3);
}
else if ((vector2.X == 0f) && (genRand.Next(((int) num5) - 1) == 0))
{
num12 = genRand.Next(1, 3);
}
else if (genRand.Next(((int) num5) * 3) == 0)
{
num12 = genRand.Next(1, 3);
}
num = ((int) (vector.X - (num5 * 0.5))) - num12;
maxTilesX = ((int) (vector.X + (num5 * 0.5))) + num12;
num2 = ((int) (vector.Y - (num5 * 0.5))) - num12;
maxTilesY = ((int) (vector.Y + (num5 * 0.5))) + num12;
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int n = num; n < maxTilesX; n++)
{
for (int num14 = num2; num14 < maxTilesY; num14++)
{
Main.tile[n, num14].active = false;
Main.tile[n, num14].wall = (byte) wallType;
}
}
vector += vector2;
}
dungeonX = (int) vector.X;
dungeonY = (int) vector.Y;
if (vector3.Y == 0f)
{
DDoorX[numDDoors] = (int) vector.X;
DDoorY[numDDoors] = (int) vector.Y;
DDoorPos[numDDoors] = 0;
numDDoors++;
}
else
{
DPlatX[numDPlats] = (int) vector.X;
DPlatY[numDPlats] = (int) vector.Y;
numDPlats++;
}
}
public static void DungeonRoom(int i, int j, int tileType, int wallType)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(15, 30);
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = genRand.Next(-10, 11) * 0.1f;
vector.X = i;
vector.Y = j - (((float) num5) / 2f);
int num6 = genRand.Next(10, 20);
double x = vector.X;
double num8 = vector.X;
double y = vector.Y;
double num10 = vector.Y;
while (num6 > 0)
{
num6--;
int num = (int) ((vector.X - (num5 * 0.800000011920929)) - 5.0);
int maxTilesX = (int) ((vector.X + (num5 * 0.800000011920929)) + 5.0);
int num2 = (int) ((vector.Y - (num5 * 0.800000011920929)) - 5.0);
int maxTilesY = (int) ((vector.Y + (num5 * 0.800000011920929)) + 5.0);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int k = num; k < maxTilesX; k++)
{
for (int num12 = num2; num12 < maxTilesY; num12++)
{
Main.tile[k, num12].liquid = 0;
if (Main.tile[k, num12].wall == 0)
{
Main.tile[k, num12].active = true;
Main.tile[k, num12].type = (byte) tileType;
}
}
}
for (int m = num + 1; m < (maxTilesX - 1); m++)
{
for (int num14 = num2 + 1; num14 < (maxTilesY - 1); num14++)
{
PlaceWall(m, num14, wallType, true);
}
}
num = (int) (vector.X - (num5 * 0.5));
maxTilesX = (int) (vector.X + (num5 * 0.5));
num2 = (int) (vector.Y - (num5 * 0.5));
maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
if (num < x)
{
x = num;
}
if (maxTilesX > num8)
{
num8 = maxTilesX;
}
if (num2 < y)
{
y = num2;
}
if (maxTilesY > num10)
{
num10 = maxTilesY;
}
for (int n = num; n < maxTilesX; n++)
{
for (int num16 = num2; num16 < maxTilesY; num16++)
{
Main.tile[n, num16].active = false;
Main.tile[n, num16].wall = (byte) wallType;
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 1f)
{
vector2.X = 1f;
}
if (vector2.X < -1f)
{
vector2.X = -1f;
}
if (vector2.Y > 1f)
{
vector2.Y = 1f;
}
if (vector2.Y < -1f)
{
vector2.Y = -1f;
}
}
dRoomX[numDRooms] = (int) vector.X;
dRoomY[numDRooms] = (int) vector.Y;
dRoomSize[numDRooms] = (int) num5;
dRoomL[numDRooms] = (int) x;
dRoomR[numDRooms] = (int) num8;
dRoomT[numDRooms] = (int) y;
dRoomB[numDRooms] = (int) num10;
dRoomTreasure[numDRooms] = false;
numDRooms++;
}
public static void DungeonStairs(int i, int j, int tileType, int wallType)
{
Vector2 vector;
Vector2 vector2 = new Vector2();
double num5 = genRand.Next(5, 9);
int num6 = 1;
vector.X = i;
vector.Y = j;
int num7 = genRand.Next(10, 30);
if (i > dEnteranceX)
{
num6 = -1;
}
else
{
num6 = 1;
}
vector2.Y = -1f;
vector2.X = num6;
if (genRand.Next(3) == 0)
{
vector2.X *= 0.5f;
}
else if (genRand.Next(3) == 0)
{
vector2.Y *= 2f;
}
while (num7 > 0)
{
num7--;
int num = ((int) ((vector.X - num5) - 4.0)) - genRand.Next(6);
int maxTilesX = ((int) ((vector.X + num5) + 4.0)) + genRand.Next(6);
int num2 = (int) ((vector.Y - num5) - 4.0);
int maxTilesY = ((int) ((vector.Y + num5) + 4.0)) + genRand.Next(6);
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
int num8 = 1;
if (vector.X > (Main.maxTilesX / 2))
{
num8 = -1;
}
int num9 = (int) ((vector.X + ((((float) dxStrength1) * 0.6f) * num8)) + (((float) dxStrength2) * num8));
int num10 = (int) (dyStrength2 * 0.5);
if (((vector.Y < (Main.worldSurface - 5.0)) && (Main.tile[num9, ((int) ((vector.Y - num5) - 6.0)) + num10].wall == 0)) && ((Main.tile[num9, ((int) ((vector.Y - num5) - 7.0)) + num10].wall == 0) && (Main.tile[num9, ((int) ((vector.Y - num5) - 8.0)) + num10].wall == 0)))
{
dSurface = true;
TileRunner(num9, ((int) ((vector.Y - num5) - 6.0)) + num10, (double) genRand.Next(0x19, 0x23), genRand.Next(10, 20), -1, false, 0f, -1f, false, true);
}
for (int k = num; k < maxTilesX; k++)
{
for (int num12 = num2; num12 < maxTilesY; num12++)
{
Main.tile[k, num12].liquid = 0;
if (Main.tile[k, num12].wall != wallType)
{
Main.tile[k, num12].wall = 0;
Main.tile[k, num12].active = true;
Main.tile[k, num12].type = (byte) tileType;
}
}
}
for (int m = num + 1; m < (maxTilesX - 1); m++)
{
for (int num14 = num2 + 1; num14 < (maxTilesY - 1); num14++)
{
PlaceWall(m, num14, wallType, true);
}
}
int num15 = 0;
if (genRand.Next((int) num5) == 0)
{
num15 = genRand.Next(1, 3);
}
num = ((int) (vector.X - (num5 * 0.5))) - num15;
maxTilesX = ((int) (vector.X + (num5 * 0.5))) + num15;
num2 = ((int) (vector.Y - (num5 * 0.5))) - num15;
maxTilesY = ((int) (vector.Y + (num5 * 0.5))) + num15;
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int n = num; n < maxTilesX; n++)
{
for (int num17 = num2; num17 < maxTilesY; num17++)
{
Main.tile[n, num17].active = false;
PlaceWall(n, num17, wallType, true);
}
}
if (dSurface)
{
num7 = 0;
}
vector += vector2;
}
dungeonX = (int) vector.X;
dungeonY = (int) vector.Y;
}
public static bool EmptyTileCheck(int startX, int endX, int startY, int endY, int ignoreStyle = -1)
{
if (startX < 0)
{
return false;
}
if (endX >= Main.maxTilesX)
{
return false;
}
if (startY < 0)
{
return false;
}
if (endY >= Main.maxTilesY)
{
return false;
}
for (int i = startX; i < (endX + 1); i++)
{
for (int j = startY; j < (endY + 1); j++)
{
if (Main.tile[i, j].active)
{
if (ignoreStyle == -1)
{
return false;
}
if ((ignoreStyle == 11) && (Main.tile[i, j].type != 11))
{
return false;
}
if (((ignoreStyle == 20) && (Main.tile[i, j].type != 20)) && (Main.tile[i, j].type != 3))
{
return false;
}
if ((ignoreStyle == 0x47) && (Main.tile[i, j].type != 0x47))
{
return false;
}
}
}
}
return true;
}
public static void EveryTileFrame()
{
noLiquidCheck = true;
for (int i = 0; i < Main.maxTilesX; i++)
{
float num2 = ((float) i) / ((float) Main.maxTilesX);
Main.statusText = "Finding tile frames: " + ((int) ((num2 * 100f) + 1f)) + "%";
for (int j = 0; j < Main.maxTilesY; j++)
{
TileFrame(i, j, true, false);
WallFrame(i, j, true);
}
}
noLiquidCheck = false;
}
public static void FloatingIsland(int i, int j)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(80, 120);
double num6 = num5;
float num7 = genRand.Next(20, 0x19);
vector.X = i;
vector.Y = j;
vector2.X = genRand.Next(-20, 0x15) * 0.2f;
while ((vector2.X > -2f) && (vector2.X < 2f))
{
vector2.X = genRand.Next(-20, 0x15) * 0.2f;
}
vector2.Y = genRand.Next(-20, -10) * 0.02f;
while ((num5 > 0.0) && (num7 > 0f))
{
num5 -= genRand.Next(4);
num7--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
float y = vector.Y + 1f;
for (int k = num; k < maxTilesX; k++)
{
if (genRand.Next(2) == 0)
{
y += genRand.Next(-1, 2);
}
if (y < vector.Y)
{
y = vector.Y;
}
if (y > (vector.Y + 2f))
{
y = vector.Y + 2f;
}
for (int n = num2; n < maxTilesY; n++)
{
if (n > y)
{
float num11 = Math.Abs((float) (k - vector.X));
float num12 = Math.Abs((float) (n - vector.Y)) * 2f;
if (Math.Sqrt((double) ((num11 * num11) + (num12 * num12))) < (num6 * 0.4))
{
Main.tile[k, n].active = true;
}
}
}
}
TileRunner(genRand.Next(num + 10, maxTilesX - 10), (int) ((vector.Y + (num6 * 0.1)) + 5.0), (double) genRand.Next(5, 10), genRand.Next(10, 15), 0, true, 0f, 2f, true, true);
num = (int) (vector.X - (num5 * 0.4));
maxTilesX = (int) (vector.X + (num5 * 0.4));
num2 = (int) (vector.Y - (num5 * 0.4));
maxTilesY = (int) (vector.Y + (num5 * 0.4));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int m = num; m < maxTilesX; m++)
{
for (int num15 = num2; num15 < maxTilesY; num15++)
{
if (num15 > (vector.Y + 2f))
{
float num16 = Math.Abs((float) (m - vector.X));
float num17 = Math.Abs((float) (num15 - vector.Y)) * 2f;
if (Math.Sqrt((double) ((num16 * num16) + (num17 * num17))) < (num6 * 0.4))
{
Main.tile[m, num15].wall = 2;
}
}
}
}
vector += vector2;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 1f)
{
vector2.X = 1f;
}
if (vector2.X < -1f)
{
vector2.X = -1f;
}
if (vector2.Y > 0.2)
{
vector2.Y = -0.2f;
}
if (vector2.Y < -0.2)
{
vector2.Y = -0.2f;
}
}
}
public static void generateWorld(int seed = -1)
{
gen = true;
if (seed > 0)
{
genRand = new Random(seed);
}
else
{
genRand = new Random((int) DateTime.Now.Ticks);
}
Main.worldID = genRand.Next(0x7fffffff);
int num7 = 0;
int num8 = 0;
double num = Main.maxTilesY * 0.3;
num *= genRand.Next(90, 110) * 0.005;
double num4 = num + (Main.maxTilesY * 0.2);
num4 *= genRand.Next(90, 110) * 0.01;
double num2 = num;
double num3 = num;
double num5 = num4;
double num6 = num4;
int num9 = 0;
if (genRand.Next(2) == 0)
{
num9 = -1;
}
else
{
num9 = 1;
}
for (int i = 0; i < Main.maxTilesX; i++)
{
float num11 = ((float) i) / ((float) Main.maxTilesX);
Main.statusText = "Generating world terrain: " + ((int) ((num11 * 100f) + 1f)) + "%";
if (num < num2)
{
num2 = num;
}
if (num > num3)
{
num3 = num;
}
if (num4 < num5)
{
num5 = num4;
}
if (num4 > num6)
{
num6 = num4;
}
if (num8 <= 0)
{
num7 = genRand.Next(0, 5);
num8 = genRand.Next(5, 40);
if (num7 == 0)
{
num8 *= (int) (genRand.Next(5, 30) * 0.2);
}
}
num8--;
switch (num7)
{
case 0:
while (genRand.Next(0, 7) == 0)
{
num += genRand.Next(-1, 2);
}
break;
case 1:
while (genRand.Next(0, 4) == 0)
{
num--;
}
while (genRand.Next(0, 10) == 0)
{
num++;
}
break;
case 2:
while (genRand.Next(0, 4) == 0)
{
num++;
}
while (genRand.Next(0, 10) == 0)
{
num--;
}
break;
case 3:
while (genRand.Next(0, 2) == 0)
{
num--;
}
while (genRand.Next(0, 6) == 0)
{
num++;
}
break;
case 4:
while (genRand.Next(0, 2) == 0)
{
num++;
}
while (genRand.Next(0, 5) == 0)
{
num--;
}
break;
}
if (num < (Main.maxTilesY * 0.15))
{
num = Main.maxTilesY * 0.15;
num8 = 0;
}
else if (num > (Main.maxTilesY * 0.3))
{
num = Main.maxTilesY * 0.3;
num8 = 0;
}
while (genRand.Next(0, 3) == 0)
{
num4 += genRand.Next(-2, 3);
}
if (num4 < (num + (Main.maxTilesY * 0.05)))
{
num4++;
}
if (num4 > (num + (Main.maxTilesY * 0.35)))
{
num4--;
}
for (int num12 = 0; num12 < num; num12++)
{
Main.tile[i, num12].active = false;
Main.tile[i, num12].lighted = true;
Main.tile[i, num12].frameX = -1;
Main.tile[i, num12].frameY = -1;
}
for (int num13 = (int) num; num13 < Main.maxTilesY; num13++)
{
if (num13 < num4)
{
Main.tile[i, num13].active = true;
Main.tile[i, num13].type = 0;
Main.tile[i, num13].frameX = -1;
Main.tile[i, num13].frameY = -1;
}
else
{
Main.tile[i, num13].active = true;
Main.tile[i, num13].type = 1;
Main.tile[i, num13].frameX = -1;
Main.tile[i, num13].frameY = -1;
}
}
}
Main.worldSurface = num3 + 5.0;
Main.rockLayer = num6;
double num14 = ((int) ((Main.rockLayer - Main.worldSurface) / 6.0)) * 6;
Main.rockLayer = Main.worldSurface + num14;
waterLine = (((int) Main.rockLayer) + Main.maxTilesY) / 2;
waterLine += genRand.Next(-100, 20);
lavaLine = waterLine + genRand.Next(50, 80);
int num15 = 0;
Main.statusText = "Adding sand...";
int num16 = genRand.Next((int) (Main.maxTilesX * 0.0007), (int) (Main.maxTilesX * 0.002)) + 2;
for (int j = 0; j < num16; j++)
{
int num18 = genRand.Next(Main.maxTilesX);
while ((num18 > (Main.maxTilesX * 0.45f)) && (num18 < (Main.maxTilesX * 0.55f)))
{
num18 = genRand.Next(Main.maxTilesX);
}
int num19 = genRand.Next(15, 90);
if (genRand.Next(3) == 0)
{
num19 *= 2;
}
int num20 = num18 - num19;
num19 = genRand.Next(15, 90);
if (genRand.Next(3) == 0)
{
num19 *= 2;
}
int maxTilesX = num18 + num19;
if (num20 < 0)
{
num20 = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
switch (j)
{
case 0:
num20 = 0;
maxTilesX = genRand.Next(250, 300);
break;
case 2:
num20 = Main.maxTilesX - genRand.Next(250, 300);
maxTilesX = Main.maxTilesX;
break;
}
int num22 = genRand.Next(50, 100);
for (int num23 = num20; num23 < maxTilesX; num23++)
{
if (genRand.Next(2) == 0)
{
num22 += genRand.Next(-1, 2);
if (num22 < 50)
{
num22 = 50;
}
if (num22 > 100)
{
num22 = 100;
}
}
for (int num24 = 0; num24 < Main.worldSurface; num24++)
{
if (Main.tile[num23, num24].active)
{
int num25 = num22;
if ((num23 - num20) < num25)
{
num25 = num23 - num20;
}
if ((maxTilesX - num23) < num25)
{
num25 = maxTilesX - num23;
}
num25 += genRand.Next(5);
for (int num26 = num24; num26 < (num24 + num25); num26++)
{
if ((num23 > (num20 + genRand.Next(5))) && (num23 < (maxTilesX - genRand.Next(5))))
{
Main.tile[num23, num26].type = 0x35;
}
}
break;
}
}
}
}
for (int k = 0; k < ((int) ((Main.maxTilesX * Main.maxTilesY) * 8E-06)); k++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) Main.worldSurface, (int) Main.rockLayer), (double) genRand.Next(15, 70), genRand.Next(20, 130), 0x35, false, 0f, 0f, false, true);
}
numMCaves = 0;
Main.statusText = "Generating hills...";
for (int m = 0; m < ((int) (Main.maxTilesX * 0.0008)); m++)
{
int num29 = 0;
bool flag = false;
bool flag2 = false;
int num30 = genRand.Next((int) (Main.maxTilesX * 0.25), (int) (Main.maxTilesX * 0.75));
while (!flag2)
{
flag2 = true;
while ((num30 > ((Main.maxTilesX / 2) - 100)) && (num30 < ((Main.maxTilesX / 2) + 100)))
{
num30 = genRand.Next((int) (Main.maxTilesX * 0.25), (int) (Main.maxTilesX * 0.75));
}
for (int num31 = 0; num31 < numMCaves; num31++)
{
if ((num30 > (mCaveX[num31] - 50)) && (num30 < (mCaveX[num31] + 50)))
{
num29++;
flag2 = false;
break;
}
}
if (num29 >= 200)
{
flag = true;
break;
}
}
if (!flag)
{
for (int num32 = 0; num32 < Main.worldSurface; num32++)
{
if (Main.tile[num30, num32].active)
{
Mountinater(num30, num32);
mCaveX[numMCaves] = num30;
mCaveY[numMCaves] = num32;
numMCaves++;
break;
}
}
}
}
for (int n = 1; n < (Main.maxTilesX - 1); n++)
{
float num34 = ((float) n) / ((float) Main.maxTilesX);
Main.statusText = "Puttin dirt behind dirt: " + ((int) ((num34 * 100f) + 1f)) + "%";
bool flag3 = false;
num15 += genRand.Next(-1, 2);
if (num15 < 0)
{
num15 = 0;
}
if (num15 > 10)
{
num15 = 10;
}
for (int num35 = 0; num35 < (Main.worldSurface + 10.0); num35++)
{
if (num35 > (Main.worldSurface + num15))
{
break;
}
if (flag3)
{
Main.tile[n, num35].wall = 2;
}
if (((Main.tile[n, num35].active && Main.tile[n - 1, num35].active) && (Main.tile[n + 1, num35].active && Main.tile[n, num35 + 1].active)) && (Main.tile[n - 1, num35 + 1].active && Main.tile[n + 1, num35 + 1].active))
{
flag3 = true;
}
}
}
numIslandHouses = 0;
houseCount = 0;
Main.statusText = "Generating floating islands...";
for (int num36 = 0; num36 < ((int) (Main.maxTilesX * 0.0008)); num36++)
{
int num37 = 0;
bool flag4 = false;
int num38 = genRand.Next((int) (Main.maxTilesX * 0.1), (int) (Main.maxTilesX * 0.9));
bool flag5 = false;
while (!flag5)
{
flag5 = true;
while ((num38 > ((Main.maxTilesX / 2) - 80)) && (num38 < ((Main.maxTilesX / 2) + 80)))
{
num38 = genRand.Next((int) (Main.maxTilesX * 0.1), (int) (Main.maxTilesX * 0.9));
}
for (int num39 = 0; num39 < numIslandHouses; num39++)
{
if ((num38 > (fihX[num39] - 80)) && (num38 < (fihX[num39] + 80)))
{
num37++;
flag5 = false;
break;
}
}
if (num37 >= 200)
{
flag4 = true;
break;
}
}
if (!flag4)
{
for (int num40 = 200; num40 < Main.worldSurface; num40++)
{
if (Main.tile[num38, num40].active)
{
int num41 = num38;
int num42 = genRand.Next(100, num40 - 100);
while (num42 > (num2 - 50.0))
{
num42--;
}
FloatingIsland(num41, num42);
fihX[numIslandHouses] = num41;
fihY[numIslandHouses] = num42;
numIslandHouses++;
break;
}
}
}
}
Main.statusText = "Placing rocks in the dirt...";
for (int num43 = 0; num43 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0002)); num43++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next(0, ((int) num2) + 1), (double) genRand.Next(4, 15), genRand.Next(5, 40), 1, false, 0f, 0f, false, true);
}
for (int num44 = 0; num44 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0002)); num44++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num2, ((int) num3) + 1), (double) genRand.Next(4, 10), genRand.Next(5, 30), 1, false, 0f, 0f, false, true);
}
for (int num45 = 0; num45 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0045)); num45++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, ((int) num6) + 1), (double) genRand.Next(2, 7), genRand.Next(2, 0x17), 1, false, 0f, 0f, false, true);
}
Main.statusText = "Placing dirt in the rocks...";
for (int num46 = 0; num46 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.005)); num46++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(2, 6), genRand.Next(2, 40), 0, false, 0f, 0f, false, true);
}
Main.statusText = "Adding clay...";
for (int num47 = 0; num47 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 2E-05)); num47++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next(0, (int) num2), (double) genRand.Next(4, 14), genRand.Next(10, 50), 40, false, 0f, 0f, false, true);
}
for (int num48 = 0; num48 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 5E-05)); num48++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num2, ((int) num3) + 1), (double) genRand.Next(8, 14), genRand.Next(15, 0x2d), 40, false, 0f, 0f, false, true);
}
for (int num49 = 0; num49 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 2E-05)); num49++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, ((int) num6) + 1), (double) genRand.Next(8, 15), genRand.Next(5, 50), 40, false, 0f, 0f, false, true);
}
for (int num50 = 5; num50 < (Main.maxTilesX - 5); num50++)
{
for (int num51 = 1; num51 < (Main.worldSurface - 1.0); num51++)
{
if (Main.tile[num50, num51].active)
{
for (int num52 = num51; num52 < (num51 + 5); num52++)
{
if (Main.tile[num50, num52].type == 40)
{
Main.tile[num50, num52].type = 0;
}
}
break;
}
}
}
for (int num53 = 0; num53 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0015)); num53++)
{
float num54 = (float) (((double) num53) / ((Main.maxTilesX * Main.maxTilesY) * 0.0015));
Main.statusText = "Making random holes: " + ((int) ((num54 * 100f) + 1f)) + "%";
int type = -1;
if (genRand.Next(5) == 0)
{
type = -2;
}
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, Main.maxTilesY), (double) genRand.Next(2, 5), genRand.Next(2, 20), type, false, 0f, 0f, false, true);
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, Main.maxTilesY), (double) genRand.Next(8, 15), genRand.Next(7, 30), type, false, 0f, 0f, false, true);
}
for (int num56 = 0; num56 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 3E-05)); num56++)
{
float num57 = (float) (((double) num56) / ((Main.maxTilesX * Main.maxTilesY) * 3E-05));
Main.statusText = "Generating small caves: " + ((int) ((num57 * 100f) + 1f)) + "%";
if (num6 <= Main.maxTilesY)
{
int num58 = -1;
if (genRand.Next(6) == 0)
{
num58 = -2;
}
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num2, ((int) num6) + 1), (double) genRand.Next(5, 15), genRand.Next(30, 200), num58, false, 0f, 0f, false, true);
}
}
for (int num59 = 0; num59 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.00015)); num59++)
{
float num60 = (float) (((double) num59) / ((Main.maxTilesX * Main.maxTilesY) * 0.00015));
Main.statusText = "Generating large caves: " + ((int) ((num60 * 100f) + 1f)) + "%";
if (num6 <= Main.maxTilesY)
{
int num61 = -1;
if (genRand.Next(10) == 0)
{
num61 = -2;
}
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num6, Main.maxTilesY), (double) genRand.Next(6, 20), genRand.Next(50, 300), num61, false, 0f, 0f, false, true);
}
}
int num62 = 0;
Main.statusText = "Generating surface caves...";
for (int num63 = 0; num63 < ((int) (Main.maxTilesX * 0.0025)); num63++)
{
num62 = genRand.Next(0, Main.maxTilesX);
for (int num64 = 0; num64 < num3; num64++)
{
if (Main.tile[num62, num64].active)
{
TileRunner(num62, num64, (double) genRand.Next(3, 6), genRand.Next(5, 50), -1, false, genRand.Next(-10, 11) * 0.1f, 1f, false, true);
break;
}
}
}
for (int num65 = 0; num65 < ((int) (Main.maxTilesX * 0.0007)); num65++)
{
num62 = genRand.Next(0, Main.maxTilesX);
for (int num66 = 0; num66 < num3; num66++)
{
if (Main.tile[num62, num66].active)
{
TileRunner(num62, num66, (double) genRand.Next(10, 15), genRand.Next(50, 130), -1, false, genRand.Next(-10, 11) * 0.1f, 2f, false, true);
break;
}
}
}
for (int num67 = 0; num67 < ((int) (Main.maxTilesX * 0.0003)); num67++)
{
num62 = genRand.Next(0, Main.maxTilesX);
for (int num68 = 0; num68 < num3; num68++)
{
if (Main.tile[num62, num68].active)
{
TileRunner(num62, num68, (double) genRand.Next(12, 0x19), genRand.Next(150, 500), -1, false, genRand.Next(-10, 11) * 0.1f, 4f, false, true);
TileRunner(num62, num68, (double) genRand.Next(8, 0x11), genRand.Next(60, 200), -1, false, genRand.Next(-10, 11) * 0.1f, 2f, false, true);
TileRunner(num62, num68, (double) genRand.Next(5, 13), genRand.Next(40, 170), -1, false, genRand.Next(-10, 11) * 0.1f, 2f, false, true);
break;
}
}
}
for (int num69 = 0; num69 < ((int) (Main.maxTilesX * 0.0004)); num69++)
{
num62 = genRand.Next(0, Main.maxTilesX);
for (int num70 = 0; num70 < num3; num70++)
{
if (Main.tile[num62, num70].active)
{
TileRunner(num62, num70, (double) genRand.Next(7, 12), genRand.Next(150, 250), -1, false, 0f, 1f, true, true);
break;
}
}
}
for (int num73 = 0; num73 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.002)); num73++)
{
int num71 = genRand.Next(1, Main.maxTilesX - 1);
int num72 = genRand.Next((int) num2, (int) num3);
if (num72 >= Main.maxTilesY)
{
num72 = Main.maxTilesY - 2;
}
if (((Main.tile[num71 - 1, num72].active && (Main.tile[num71 - 1, num72].type == 0)) && (Main.tile[num71 + 1, num72].active && (Main.tile[num71 + 1, num72].type == 0))) && ((Main.tile[num71, num72 - 1].active && (Main.tile[num71, num72 - 1].type == 0)) && (Main.tile[num71, num72 + 1].active && (Main.tile[num71, num72 + 1].type == 0))))
{
Main.tile[num71, num72].active = true;
Main.tile[num71, num72].type = 2;
}
num71 = genRand.Next(1, Main.maxTilesX - 1);
num72 = genRand.Next(0, (int) num2);
if (num72 >= Main.maxTilesY)
{
num72 = Main.maxTilesY - 2;
}
if (((Main.tile[num71 - 1, num72].active && (Main.tile[num71 - 1, num72].type == 0)) && (Main.tile[num71 + 1, num72].active && (Main.tile[num71 + 1, num72].type == 0))) && ((Main.tile[num71, num72 - 1].active && (Main.tile[num71, num72 - 1].type == 0)) && (Main.tile[num71, num72 + 1].active && (Main.tile[num71, num72 + 1].type == 0))))
{
Main.tile[num71, num72].active = true;
Main.tile[num71, num72].type = 2;
}
}
Main.statusText = "Generating underground jungle: 0%";
float num74 = Main.maxTilesX / 0x1068;
num74 *= 1.5f;
int num75 = 0;
if (num9 == -1)
{
num75 = (int) (Main.maxTilesX * 0.8f);
}
else
{
num75 = (int) (Main.maxTilesX * 0.2f);
}
int num76 = (Main.maxTilesY + ((int) Main.rockLayer)) / 2;
num75 += genRand.Next((int) (-100f * num74), (int) (101f * num74));
num76 += genRand.Next((int) (-100f * num74), (int) (101f * num74));
TileRunner(num75, num76, (double) genRand.Next((int) (250f * num74), (int) (500f * num74)), genRand.Next(50, 150), 0x3b, false, (float) (num9 * 3), 0f, false, true);
Main.statusText = "Generating underground jungle: 20%";
num75 += genRand.Next((int) (-250f * num74), (int) (251f * num74));
num76 += genRand.Next((int) (-150f * num74), (int) (151f * num74));
int num77 = num75;
int num78 = num76;
TileRunner(num75, num76, (double) genRand.Next((int) (250f * num74), (int) (500f * num74)), genRand.Next(50, 150), 0x3b, false, 0f, 0f, false, true);
Main.statusText = "Generating underground jungle: 40%";
num75 += genRand.Next((int) (-400f * num74), (int) (401f * num74));
num76 += genRand.Next((int) (-150f * num74), (int) (151f * num74));
TileRunner(num75, num76, (double) genRand.Next((int) (250f * num74), (int) (500f * num74)), genRand.Next(50, 150), 0x3b, false, (float) (num9 * -3), 0f, false, true);
Main.statusText = "Generating underground jungle: 60%";
num75 = num77;
num76 = num78;
for (int num79 = 0; num79 <= (20f * num74); num79++)
{
Main.statusText = "Generating underground jungle: " + ((int) (60f + (((float) num79) / num74))) + "%";
num75 += genRand.Next((int) (-5f * num74), (int) (6f * num74));
num76 += genRand.Next((int) (-5f * num74), (int) (6f * num74));
TileRunner(num75, num76, (double) genRand.Next(40, 100), genRand.Next(300, 500), 0x3b, false, 0f, 0f, false, true);
}
for (int num80 = 0; num80 <= (10f * num74); num80++)
{
Main.statusText = "Generating underground jungle: " + ((int) (80f + ((((float) num80) / num74) * 2f))) + "%";
num75 = num77 + genRand.Next((int) (-600f * num74), (int) (600f * num74));
num76 = num78 + genRand.Next((int) (-200f * num74), (int) (200f * num74));
while ((((num75 < 1) || (num75 >= (Main.maxTilesX - 1))) || ((num76 < 1) || (num76 >= (Main.maxTilesY - 1)))) || (Main.tile[num75, num76].type != 0x3b))
{
num75 = num77 + genRand.Next((int) (-600f * num74), (int) (600f * num74));
num76 = num78 + genRand.Next((int) (-200f * num74), (int) (200f * num74));
}
for (int num81 = 0; num81 < (8f * num74); num81++)
{
num75 += genRand.Next(-30, 0x1f);
num76 += genRand.Next(-30, 0x1f);
int num82 = -1;
if (genRand.Next(7) == 0)
{
num82 = -2;
}
TileRunner(num75, num76, (double) genRand.Next(10, 20), genRand.Next(30, 70), num82, false, 0f, 0f, false, true);
}
}
for (int num83 = 0; num83 <= (300f * num74); num83++)
{
num75 = num77 + genRand.Next((int) (-600f * num74), (int) (600f * num74));
num76 = num78 + genRand.Next((int) (-200f * num74), (int) (200f * num74));
while ((((num75 < 1) || (num75 >= (Main.maxTilesX - 1))) || ((num76 < 1) || (num76 >= (Main.maxTilesY - 1)))) || (Main.tile[num75, num76].type != 0x3b))
{
num75 = num77 + genRand.Next((int) (-600f * num74), (int) (600f * num74));
num76 = num78 + genRand.Next((int) (-200f * num74), (int) (200f * num74));
}
TileRunner(num75, num76, (double) genRand.Next(4, 10), genRand.Next(5, 30), 1, false, 0f, 0f, false, true);
if (genRand.Next(4) == 0)
{
int num84 = genRand.Next(0x3f, 0x45);
TileRunner(num75 + genRand.Next(-1, 2), num76 + genRand.Next(-1, 2), (double) genRand.Next(3, 7), genRand.Next(4, 8), num84, false, 0f, 0f, false, true);
}
}
num75 = num77;
num76 = num78;
float num85 = genRand.Next(6, 10);
float num86 = Main.maxTilesX / 0x1068;
num85 *= num86;
for (int num87 = 0; num87 < num85; num87++)
{
bool flag6 = true;
while (flag6)
{
num75 = genRand.Next(20, Main.maxTilesX - 20);
num76 = genRand.Next(20, Main.maxTilesY - 300);
if (Main.tile[num75, num76].type == 0x3b)
{
flag6 = false;
int num88 = genRand.Next(2, 4);
int num89 = genRand.Next(2, 4);
for (int num90 = (num75 - num88) - 1; num90 <= ((num75 + num88) + 1); num90++)
{
for (int num91 = (num76 - num89) - 1; num91 <= ((num76 + num89) + 1); num91++)
{
Main.tile[num90, num91].active = true;
Main.tile[num90, num91].type = 0x2d;
Main.tile[num90, num91].liquid = 0;
Main.tile[num90, num91].lava = false;
}
}
for (int num92 = num75 - num88; num92 <= (num75 + num88); num92++)
{
for (int num93 = num76 - num89; num93 <= (num76 + num89); num93++)
{
Main.tile[num92, num93].active = false;
Main.tile[num92, num93].wall = 10;
}
}
bool flag7 = false;
int num94 = 0;
while (!flag7 && (num94 < 100))
{
num94++;
int num95 = genRand.Next(num75 - num88, (num75 + num88) + 1);
int num96 = genRand.Next(num76 - num89, (num76 + num89) - 2);
PlaceTile(num95, num96, 4, true, false, -1);
if (Main.tile[num95, num96].type == 4)
{
flag7 = true;
}
}
for (int num97 = (num75 - num88) - 1; num97 <= ((num75 + num88) + 1); num97++)
{
for (int num98 = (num76 + num89) - 2; num98 <= (num76 + num89); num98++)
{
Main.tile[num97, num98].active = false;
}
}
for (int num99 = (num75 - num88) - 1; num99 <= ((num75 + num88) + 1); num99++)
{
for (int num100 = (num76 + num89) - 2; num100 <= ((num76 + num89) - 1); num100++)
{
Main.tile[num99, num100].active = false;
}
}
for (int num101 = (num75 - num88) - 1; num101 <= ((num75 + num88) + 1); num101++)
{
int num102 = 4;
int num103 = (num76 + num89) + 2;
while ((!Main.tile[num101, num103].active && (num103 < Main.maxTilesY)) && (num102 > 0))
{
Main.tile[num101, num103].active = true;
Main.tile[num101, num103].type = 0x3b;
num103++;
num102--;
}
}
num88 -= genRand.Next(1, 3);
for (int num104 = (num76 - num89) - 2; num88 > -1; num104--)
{
for (int num105 = (num75 - num88) - 1; num105 <= ((num75 + num88) + 1); num105++)
{
Main.tile[num105, num104].active = true;
Main.tile[num105, num104].type = 0x2d;
}
num88 -= genRand.Next(1, 3);
}
JChestX[numJChests] = num75;
JChestY[numJChests] = num76;
numJChests++;
}
}
}
for (int num106 = 0; num106 < Main.maxTilesX; num106++)
{
for (int num107 = (int) Main.worldSurface; num107 < Main.maxTilesY; num107++)
{
if (Main.tile[num106, num107].active)
{
SpreadGrass(num106, num107, 0x3b, 60, false);
}
}
}
Main.statusText = "Adding mushroom patches...";
for (int num108 = 0; num108 < (Main.maxTilesX / 300); num108++)
{
int num109 = genRand.Next((int) (Main.maxTilesX * 0.3), (int) (Main.maxTilesX * 0.7));
int num110 = genRand.Next((int) Main.rockLayer, Main.maxTilesY - 300);
ShroomPatch(num109, num110);
}
for (int num111 = 0; num111 < Main.maxTilesX; num111++)
{
for (int num112 = (int) Main.worldSurface; num112 < Main.maxTilesY; num112++)
{
if (Main.tile[num111, num112].active)
{
SpreadGrass(num111, num112, 0x3b, 70, false);
}
}
}
Main.statusText = "Placing mud in the dirt...";
for (int num113 = 0; num113 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.001)); num113++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(2, 6), genRand.Next(2, 40), 0x3b, false, 0f, 0f, false, true);
}
Main.statusText = "Adding shinies...";
for (int num114 = 0; num114 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 6E-05)); num114++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num2, (int) num3), (double) genRand.Next(3, 6), genRand.Next(2, 6), 7, false, 0f, 0f, false, true);
}
for (int num115 = 0; num115 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 8E-05)); num115++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, (int) num6), (double) genRand.Next(3, 7), genRand.Next(3, 7), 7, false, 0f, 0f, false, true);
}
for (int num116 = 0; num116 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0002)); num116++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(4, 9), genRand.Next(4, 8), 7, false, 0f, 0f, false, true);
}
for (int num117 = 0; num117 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 3E-05)); num117++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num2, (int) num3), (double) genRand.Next(3, 7), genRand.Next(2, 5), 6, false, 0f, 0f, false, true);
}
for (int num118 = 0; num118 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 8E-05)); num118++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, (int) num6), (double) genRand.Next(3, 6), genRand.Next(3, 6), 6, false, 0f, 0f, false, true);
}
for (int num119 = 0; num119 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0002)); num119++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(4, 9), genRand.Next(4, 8), 6, false, 0f, 0f, false, true);
}
for (int num120 = 0; num120 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 3E-05)); num120++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num3, (int) num6), (double) genRand.Next(3, 6), genRand.Next(3, 6), 9, false, 0f, 0f, false, true);
}
for (int num121 = 0; num121 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.00017)); num121++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(4, 9), genRand.Next(4, 8), 9, false, 0f, 0f, false, true);
}
for (int num122 = 0; num122 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.00017)); num122++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next(0, (int) num2), (double) genRand.Next(4, 9), genRand.Next(4, 8), 9, false, 0f, 0f, false, true);
}
for (int num123 = 0; num123 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.00012)); num123++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next((int) num5, Main.maxTilesY), (double) genRand.Next(4, 8), genRand.Next(4, 8), 8, false, 0f, 0f, false, true);
}
for (int num124 = 0; num124 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.00012)); num124++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next(0, ((int) num2) - 20), (double) genRand.Next(4, 8), genRand.Next(4, 8), 8, false, 0f, 0f, false, true);
}
Main.statusText = "Adding webs...";
for (int num125 = 0; num125 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.001)); num125++)
{
int num126 = genRand.Next(20, Main.maxTilesX - 20);
int num127 = genRand.Next((int) num2, Main.maxTilesY - 20);
if (num125 < numMCaves)
{
num126 = mCaveX[num125];
num127 = mCaveY[num125];
}
if (!Main.tile[num126, num127].active && ((num127 > Main.worldSurface) || (Main.tile[num126, num127].wall > 0)))
{
while (!Main.tile[num126, num127].active && (num127 > ((int) num2)))
{
num127--;
}
num127++;
int num128 = 1;
if (genRand.Next(2) == 0)
{
num128 = -1;
}
while ((!Main.tile[num126, num127].active && (num126 > 10)) && (num126 < (Main.maxTilesX - 10)))
{
num126 += num128;
}
num126 -= num128;
if ((num127 > Main.worldSurface) || (Main.tile[num126, num127].wall > 0))
{
TileRunner(num126, num127, (double) genRand.Next(4, 13), genRand.Next(2, 5), 0x33, true, (float) num128, -1f, false, false);
}
}
}
Main.statusText = "Creating underworld: 0%";
int num129 = Main.maxTilesY - genRand.Next(150, 190);
for (int num130 = 0; num130 < Main.maxTilesX; num130++)
{
num129 += genRand.Next(-3, 4);
if (num129 < (Main.maxTilesY - 190))
{
num129 = Main.maxTilesY - 190;
}
if (num129 > (Main.maxTilesY - 160))
{
num129 = Main.maxTilesY - 160;
}
for (int num131 = (num129 - 20) - genRand.Next(3); num131 < Main.maxTilesY; num131++)
{
if (num131 >= num129)
{
Main.tile[num130, num131].active = false;
Main.tile[num130, num131].lava = false;
Main.tile[num130, num131].liquid = 0;
}
else
{
Main.tile[num130, num131].type = 0x39;
}
}
}
int num132 = Main.maxTilesY - genRand.Next(40, 70);
for (int num133 = 10; num133 < (Main.maxTilesX - 10); num133++)
{
num132 += genRand.Next(-10, 11);
if (num132 > (Main.maxTilesY - 60))
{
num132 = Main.maxTilesY - 60;
}
if (num132 < (Main.maxTilesY - 100))
{
num132 = Main.maxTilesY - 120;
}
for (int num134 = num132; num134 < (Main.maxTilesY - 10); num134++)
{
if (!Main.tile[num133, num134].active)
{
Main.tile[num133, num134].lava = true;
Main.tile[num133, num134].liquid = 0xff;
}
}
}
for (int num135 = 0; num135 < Main.maxTilesX; num135++)
{
if (genRand.Next(50) == 0)
{
int num136 = Main.maxTilesY - 0x41;
while (!Main.tile[num135, num136].active && (num136 > (Main.maxTilesY - 0x87)))
{
num136--;
}
TileRunner(genRand.Next(0, Main.maxTilesX), num136 + genRand.Next(20, 50), (double) genRand.Next(15, 20), 0x3e8, 0x39, true, 0f, (float) genRand.Next(1, 3), true, true);
}
}
Liquid.QuickWater(-2, -1, -1);
for (int num137 = 0; num137 < Main.maxTilesX; num137++)
{
float num138 = ((float) num137) / ((float) (Main.maxTilesX - 1));
Main.statusText = "Creating underworld: " + ((int) (((num138 * 100f) / 2f) + 50f)) + "%";
if (genRand.Next(13) == 0)
{
int num139 = Main.maxTilesY - 0x41;
while (((Main.tile[num137, num139].liquid > 0) || Main.tile[num137, num139].active) && (num139 > (Main.maxTilesY - 140)))
{
num139--;
}
TileRunner(num137, num139 - genRand.Next(2, 5), (double) genRand.Next(5, 30), 0x3e8, 0x39, true, 0f, (float) genRand.Next(1, 3), true, true);
float num140 = genRand.Next(1, 3);
if (genRand.Next(3) == 0)
{
num140 *= 0.5f;
}
if (genRand.Next(2) == 0)
{
TileRunner(num137, num139 - genRand.Next(2, 5), (double) ((int) (genRand.Next(5, 15) * num140)), (int) (genRand.Next(10, 15) * num140), 0x39, true, 1f, 0.3f, false, true);
}
if (genRand.Next(2) == 0)
{
num140 = genRand.Next(1, 3);
TileRunner(num137, num139 - genRand.Next(2, 5), (double) ((int) (genRand.Next(5, 15) * num140)), (int) (genRand.Next(10, 15) * num140), 0x39, true, -1f, 0.3f, false, true);
}
TileRunner(num137 + genRand.Next(-10, 10), num139 + genRand.Next(-10, 10), (double) genRand.Next(5, 15), genRand.Next(5, 10), -2, false, (float) genRand.Next(-1, 3), (float) genRand.Next(-1, 3), false, true);
if (genRand.Next(3) == 0)
{
TileRunner(num137 + genRand.Next(-10, 10), num139 + genRand.Next(-10, 10), (double) genRand.Next(10, 30), genRand.Next(10, 20), -2, false, (float) genRand.Next(-1, 3), (float) genRand.Next(-1, 3), false, true);
}
if (genRand.Next(5) == 0)
{
TileRunner(num137 + genRand.Next(-15, 15), num139 + genRand.Next(-15, 10), (double) genRand.Next(15, 30), genRand.Next(5, 20), -2, false, (float) genRand.Next(-1, 3), (float) genRand.Next(-1, 3), false, true);
}
}
}
for (int num141 = 0; num141 < Main.maxTilesX; num141++)
{
if (!Main.tile[num141, Main.maxTilesY - 0x91].active)
{
Main.tile[num141, Main.maxTilesY - 0x91].liquid = 0xff;
Main.tile[num141, Main.maxTilesY - 0x91].lava = true;
}
if (!Main.tile[num141, Main.maxTilesY - 0x90].active)
{
Main.tile[num141, Main.maxTilesY - 0x90].liquid = 0xff;
Main.tile[num141, Main.maxTilesY - 0x90].lava = true;
}
}
for (int num142 = 0; num142 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.002)); num142++)
{
TileRunner(genRand.Next(0, Main.maxTilesX), genRand.Next(Main.maxTilesY - 140, Main.maxTilesY), (double) genRand.Next(3, 8), genRand.Next(3, 8), 0x3a, false, 0f, 0f, false, true);
}
AddHellHouses();
int num143 = genRand.Next(2, (int) (Main.maxTilesX * 0.005));
for (int num144 = 0; num144 < num143; num144++)
{
float num145 = ((float) num144) / ((float) num143);
Main.statusText = "Adding water bodies: " + ((int) (num145 * 100f)) + "%";
int num146 = genRand.Next(300, Main.maxTilesX - 300);
while ((num146 > ((Main.maxTilesX / 2) - 50)) && (num146 < ((Main.maxTilesX / 2) + 50)))
{
num146 = genRand.Next(300, Main.maxTilesX - 300);
}
int num147 = ((int) num2) - 20;
while (!Main.tile[num146, num147].active)
{
num147++;
}
Lakinater(num146, num147);
}
int x = 0;
if (num9 == -1)
{
x = genRand.Next((int) (Main.maxTilesX * 0.05), (int) (Main.maxTilesX * 0.2));
num9 = -1;
}
else
{
x = genRand.Next((int) (Main.maxTilesX * 0.8), (int) (Main.maxTilesX * 0.95));
num9 = 1;
}
int y = ((int) ((Main.rockLayer + Main.maxTilesY) / 2.0)) + genRand.Next(-200, 200);
MakeDungeon(x, y, 0x29, 7);
for (int num150 = 0; num150 < (Main.maxTilesX * 0.0004); num150++)
{
float num151 = (float) (((double) num150) / (Main.maxTilesX * 0.0004));
Main.statusText = "Making the world evil: " + ((int) (num151 * 100f)) + "%";
bool flag8 = false;
int num152 = 0;
int num153 = 0;
int num154 = 0;
while (!flag8)
{
flag8 = true;
int num155 = Main.maxTilesX / 2;
int num156 = 200;
num152 = genRand.Next(Main.maxTilesX);
num153 = (num152 - genRand.Next(150)) - 0xaf;
num154 = (num152 + genRand.Next(150)) + 0xaf;
if (num153 < 0)
{
num153 = 0;
}
if (num154 > Main.maxTilesX)
{
num154 = Main.maxTilesX;
}
if ((num152 > (num155 - num156)) && (num152 < (num155 + num156)))
{
flag8 = false;
}
if ((num153 > (num155 - num156)) && (num153 < (num155 + num156)))
{
flag8 = false;
}
if ((num154 > (num155 - num156)) && (num154 < (num155 + num156)))
{
flag8 = false;
}
for (int num157 = num153; num157 < num154; num157++)
{
for (int num158 = 0; num158 < ((int) Main.worldSurface); num158 += 5)
{
if (Main.tile[num157, num158].active && Main.tileDungeon[Main.tile[num157, num158].type])
{
flag8 = false;
break;
}
if (!flag8)
{
break;
}
}
}
}
int num159 = 0;
for (int num160 = num153; num160 < num154; num160++)
{
if (num159 > 0)
{
num159--;
}
if ((num160 == num152) || (num159 == 0))
{
for (int num161 = (int) num2; num161 < (Main.worldSurface - 1.0); num161++)
{
if (Main.tile[num160, num161].active || (Main.tile[num160, num161].wall > 0))
{
if (num160 == num152)
{
num159 = 20;
ChasmRunner(num160, num161, genRand.Next(150) + 150, true);
}
else if ((genRand.Next(30) == 0) && (num159 == 0))
{
num159 = 20;
bool makeOrb = false;
if (genRand.Next(2) == 0)
{
makeOrb = true;
}
ChasmRunner(num160, num161, genRand.Next(50) + 50, makeOrb);
}
break;
}
}
}
}
double num162 = Main.worldSurface + 40.0;
for (int num163 = num153; num163 < num154; num163++)
{
num162 += genRand.Next(-2, 3);
if (num162 < (Main.worldSurface + 30.0))
{
num162 = Main.worldSurface + 30.0;
}
if (num162 > (Main.worldSurface + 50.0))
{
num162 = Main.worldSurface + 50.0;
}
num62 = num163;
bool flag10 = false;
for (int num164 = (int) num2; num164 < num162; num164++)
{
if (Main.tile[num62, num164].active)
{
if (((Main.tile[num62, num164].type == 0) && (num164 < (Main.worldSurface - 1.0))) && !flag10)
{
SpreadGrass(num62, num164, 0, 0x17, true);
}
flag10 = true;
if (((Main.tile[num62, num164].type == 1) && (num62 >= (num153 + genRand.Next(5)))) && (num62 <= (num154 - genRand.Next(5))))
{
Main.tile[num62, num164].type = 0x19;
}
if (Main.tile[num62, num164].type == 2)
{
Main.tile[num62, num164].type = 0x17;
}
}
}
}
for (int num165 = num153; num165 < num154; num165++)
{
for (int num166 = 0; num166 < (Main.maxTilesY - 50); num166++)
{
if (Main.tile[num165, num166].active && (Main.tile[num165, num166].type == 0x1f))
{
int num167 = num165 - 13;
int num168 = num165 + 13;
int num169 = num166 - 13;
int num170 = num166 + 13;
for (int num171 = num167; num171 < num168; num171++)
{
if ((num171 > 10) && (num171 < (Main.maxTilesX - 10)))
{
for (int num172 = num169; num172 < num170; num172++)
{
if ((((Math.Abs((int) (num171 - num165)) + Math.Abs((int) (num172 - num166))) < (9 + genRand.Next(11))) && (genRand.Next(3) != 0)) && (Main.tile[num171, num172].type != 0x1f))
{
Main.tile[num171, num172].active = true;
Main.tile[num171, num172].type = 0x19;
if ((Math.Abs((int) (num171 - num165)) <= 1) && (Math.Abs((int) (num172 - num166)) <= 1))
{
Main.tile[num171, num172].active = false;
}
}
if (((Main.tile[num171, num172].type != 0x1f) && (Math.Abs((int) (num171 - num165)) <= (2 + genRand.Next(3)))) && (Math.Abs((int) (num172 - num166)) <= (2 + genRand.Next(3))))
{
Main.tile[num171, num172].active = false;
}
}
}
}
}
}
}
}
Main.statusText = "Generating mountain caves...";
for (int num173 = 0; num173 < numMCaves; num173++)
{
int num174 = mCaveX[num173];
int num175 = mCaveY[num173];
CaveOpenater(num174, num175);
Cavinator(num174, num175, genRand.Next(40, 50));
}
Main.statusText = "Creating beaches...";
for (int num176 = 0; num176 < 2; num176++)
{
int num177 = 0;
int num178 = 0;
if (num176 == 0)
{
num177 = 0;
num178 = genRand.Next(0x7d, 200);
float num179 = 1f;
int num180 = 0;
while (!Main.tile[num178 - 1, num180].active)
{
num180++;
}
for (int num181 = num178 - 1; num181 >= num177; num181--)
{
num179 += genRand.Next(10, 20) * 0.05f;
for (int num182 = 0; num182 < (num180 + num179); num182++)
{
if (num182 < ((num180 + (num179 * 0.75f)) - 3f))
{
Main.tile[num181, num182].active = false;
if (num182 > num180)
{
Main.tile[num181, num182].liquid = 0xff;
}
else if (num182 == num180)
{
Main.tile[num181, num182].liquid = 0x7f;
}
}
else if (num182 > num180)
{
Main.tile[num181, num182].type = 0x35;
Main.tile[num181, num182].active = true;
}
Main.tile[num181, num182].wall = 0;
}
}
}
else
{
num177 = Main.maxTilesX - genRand.Next(0x7d, 200);
num178 = Main.maxTilesX;
float num183 = 1f;
int num184 = 0;
while (!Main.tile[num177, num184].active)
{
num184++;
}
for (int num185 = num177; num185 < num178; num185++)
{
num183 += genRand.Next(10, 20) * 0.05f;
for (int num186 = 0; num186 < (num184 + num183); num186++)
{
if (num186 < ((num184 + (num183 * 0.75f)) - 3f))
{
Main.tile[num185, num186].active = false;
if (num186 > num184)
{
Main.tile[num185, num186].liquid = 0xff;
}
else if (num186 == num184)
{
Main.tile[num185, num186].liquid = 0x7f;
}
}
else if (num186 > num184)
{
Main.tile[num185, num186].type = 0x35;
Main.tile[num185, num186].active = true;
}
Main.tile[num185, num186].wall = 0;
}
}
}
}
Main.statusText = "Adding gems...";
for (int num187 = 0x3f; num187 <= 0x44; num187++)
{
float num188 = 0f;
switch (num187)
{
case 0x43:
num188 = Main.maxTilesX * 0.5f;
break;
case 0x42:
num188 = Main.maxTilesX * 0.45f;
break;
case 0x3f:
num188 = Main.maxTilesX * 0.3f;
break;
case 0x41:
num188 = Main.maxTilesX * 0.25f;
break;
case 0x40:
num188 = Main.maxTilesX * 0.1f;
break;
case 0x44:
num188 = Main.maxTilesX * 0.05f;
break;
}
num188 *= 0.2f;
for (int num189 = 0; num189 < num188; num189++)
{
int num190 = genRand.Next(0, Main.maxTilesX);
int num191 = genRand.Next((int) Main.worldSurface, Main.maxTilesY);
while (Main.tile[num190, num191].type != 1)
{
num190 = genRand.Next(0, Main.maxTilesX);
num191 = genRand.Next((int) Main.worldSurface, Main.maxTilesY);
}
TileRunner(num190, num191, (double) genRand.Next(2, 6), genRand.Next(3, 7), num187, false, 0f, 0f, false, true);
}
}
for (int num192 = 0; num192 < Main.maxTilesX; num192++)
{
float num193 = ((float) num192) / ((float) (Main.maxTilesX - 1));
Main.statusText = "Gravitating sand: " + ((int) (num193 * 100f)) + "%";
for (int num194 = Main.maxTilesY - 5; num194 > 0; num194--)
{
if (Main.tile[num192, num194].active && (Main.tile[num192, num194].type == 0x35))
{
for (int num195 = num194; !Main.tile[num192, num195 + 1].active && (num195 < (Main.maxTilesY - 5)); num195++)
{
Main.tile[num192, num195 + 1].active = true;
Main.tile[num192, num195 + 1].type = 0x35;
}
}
}
}
for (int num196 = 3; num196 < (Main.maxTilesX - 3); num196++)
{
float num197 = ((float) num196) / ((float) Main.maxTilesX);
Main.statusText = "Cleaning up dirt backgrounds: " + ((int) ((num197 * 100f) + 1f)) + "%";
for (int num198 = 0; num198 < Main.worldSurface; num198++)
{
if (Main.tile[num196, num198].wall == 2)
{
Main.tile[num196, num198].wall = 0;
}
if (Main.tile[num196, num198].type != 0x35)
{
if (Main.tile[num196 - 1, num198].wall == 2)
{
Main.tile[num196 - 1, num198].wall = 0;
}
if ((Main.tile[num196 - 2, num198].wall == 2) && (genRand.Next(2) == 0))
{
Main.tile[num196 - 2, num198].wall = 0;
}
if ((Main.tile[num196 - 3, num198].wall == 2) && (genRand.Next(2) == 0))
{
Main.tile[num196 - 3, num198].wall = 0;
}
if (Main.tile[num196 + 1, num198].wall == 2)
{
Main.tile[num196 + 1, num198].wall = 0;
}
if ((Main.tile[num196 + 2, num198].wall == 2) && (genRand.Next(2) == 0))
{
Main.tile[num196 + 2, num198].wall = 0;
}
if ((Main.tile[num196 + 3, num198].wall == 2) && (genRand.Next(2) == 0))
{
Main.tile[num196 + 3, num198].wall = 0;
}
if (Main.tile[num196, num198].active)
{
break;
}
}
}
}
for (int num199 = 0; num199 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 2E-05)); num199++)
{
float num200 = (float) (((double) num199) / ((Main.maxTilesX * Main.maxTilesY) * 2E-05));
Main.statusText = "Placing alters: " + ((int) ((num200 * 100f) + 1f)) + "%";
bool flag11 = false;
int num201 = 0;
while (!flag11)
{
int num202 = genRand.Next(1, Main.maxTilesX);
int num203 = (int) (num3 + 20.0);
Place3x2(num202, num203, 0x1a);
if (Main.tile[num202, num203].type == 0x1a)
{
flag11 = true;
}
else
{
num201++;
if (num201 >= 0x2710)
{
flag11 = true;
}
}
}
}
Liquid.QuickWater(3, -1, -1);
WaterCheck();
int num204 = 0;
Liquid.quickSettle = true;
while (num204 < 10)
{
int num205 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
num204++;
float num206 = 0f;
while (Liquid.numLiquid > 0)
{
float num207 = ((float) (num205 - (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer))) / ((float) num205);
if ((Liquid.numLiquid + LiquidBuffer.numLiquidBuffer) > num205)
{
num205 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
}
if (num207 > num206)
{
num206 = num207;
}
else
{
num207 = num206;
}
if (num204 == 1)
{
Main.statusText = "Settling liquids: " + ((int) (((num207 * 100f) / 3f) + 33f)) + "%";
}
int num208 = 10;
if (num204 > num208)
{
num208 = num204;
}
Liquid.UpdateLiquid();
}
WaterCheck();
Main.statusText = "Settling liquids: " + ((int) (((num204 * 10f) / 3f) + 66f)) + "%";
}
Liquid.quickSettle = false;
for (int num209 = 0; num209 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 2.5E-05)); num209++)
{
float num210 = (float) (((double) num209) / ((Main.maxTilesX * Main.maxTilesY) * 2.5E-05));
Main.statusText = "Placing life crystals: " + ((int) ((num210 * 100f) + 1f)) + "%";
bool flag12 = false;
int num211 = 0;
while (!flag12)
{
if (AddLifeCrystal(genRand.Next(1, Main.maxTilesX), genRand.Next((int) (num3 + 20.0), Main.maxTilesY)))
{
flag12 = true;
}
else
{
num211++;
if (num211 >= 0x2710)
{
flag12 = true;
}
}
}
}
for (int num212 = 0; num212 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 1.8E-05)); num212++)
{
float num213 = (float) (((double) num212) / ((Main.maxTilesX * Main.maxTilesY) * 1.8E-05));
Main.statusText = "Hiding treasure: " + ((int) ((num213 * 100f) + 1f)) + "%";
bool flag13 = false;
int num214 = 0;
while (!flag13)
{
if (AddBuriedChest(genRand.Next(1, Main.maxTilesX), genRand.Next((int) (num3 + 20.0), Main.maxTilesY), 0))
{
flag13 = true;
}
else
{
num214++;
if (num214 >= 0x2710)
{
flag13 = true;
}
}
}
}
int num215 = 0;
for (int num216 = 0; num216 < numJChests; num216++)
{
num215++;
int contain = 0xd3;
switch (num215)
{
case 1:
contain = 0xd3;
break;
case 2:
contain = 0xd4;
break;
case 3:
contain = 0xd5;
break;
}
if (num215 > 3)
{
num215 = 0;
}
if (!AddBuriedChest(JChestX[num216] + genRand.Next(2), JChestY[num216], contain))
{
for (int num218 = JChestX[num216]; num218 <= (JChestX[num216] + 1); num218++)
{
for (int num219 = JChestY[num216]; num219 <= (JChestY[num216] + 1); num219++)
{
KillTile(num218, num219, false, false, false);
}
}
AddBuriedChest(JChestX[num216], JChestY[num216], contain);
}
}
float num220 = Main.maxTilesX / 0x1068;
int num221 = 0;
for (int num222 = 0; num222 < (10f * num220); num222++)
{
int num224;
int num225;
int num223 = 0;
num221++;
if (num221 == 1)
{
num223 = 0xba;
}
else
{
num223 = 0xbb;
num221 = 0;
}
for (bool flag14 = false; !flag14; flag14 = AddBuriedChest(num224, num225, num223))
{
num224 = genRand.Next(1, Main.maxTilesX);
for (num225 = genRand.Next(1, Main.maxTilesY - 200); (Main.tile[num224, num225].liquid < 200) || Main.tile[num224, num225].lava; num225 = genRand.Next(1, Main.maxTilesY - 200))
{
num224 = genRand.Next(1, Main.maxTilesX);
}
}
}
for (int num226 = 0; num226 < numIslandHouses; num226++)
{
IslandHouse(fihX[num226], fihY[num226]);
}
for (int num227 = 0; num227 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 0.0008)); num227++)
{
float num228 = (float) (((double) num227) / ((Main.maxTilesX * Main.maxTilesY) * 0.0008));
Main.statusText = "Placing breakables: " + ((int) ((num228 * 100f) + 1f)) + "%";
bool flag15 = false;
int num229 = 0;
Label_46C1:
while (!flag15)
{
int num230 = genRand.Next((int) num3, Main.maxTilesY - 10);
if (num228 > 0.93)
{
num230 = Main.maxTilesY - 150;
}
else if (num228 > 0.75)
{
num230 = (int) num2;
}
int num231 = genRand.Next(1, Main.maxTilesX);
bool flag16 = false;
for (int num232 = num230; num232 < Main.maxTilesY; num232++)
{
if (!flag16)
{
if ((Main.tile[num231, num232].active && Main.tileSolid[Main.tile[num231, num232].type]) && !Main.tile[num231, num232 - 1].lava)
{
flag16 = true;
}
}
else
{
if (PlacePot(num231, num232, 0x1c))
{
flag15 = true;
goto Label_46C1;
}
num229++;
if (num229 >= 0x2710)
{
flag15 = true;
goto Label_46C1;
}
}
}
}
}
for (int num233 = 0; num233 < ((int) ((Main.maxTilesX * Main.maxTilesY) * 1E-05)); num233++)
{
float num234 = (float) (((double) num233) / ((Main.maxTilesX * Main.maxTilesY) * 1E-05));
Main.statusText = "Placing hellforges: " + ((int) ((num234 * 100f) + 1f)) + "%";
bool flag17 = false;
int num235 = 0;
while (!flag17)
{
int num236 = genRand.Next(1, Main.maxTilesX);
int num237 = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 5);
if (Main.tile[num236, num237].wall == 13)
{
while (!Main.tile[num236, num237].active)
{
num237++;
}
num237--;
PlaceTile(num236, num237, 0x4d, false, false, -1);
if (Main.tile[num236, num237].type == 0x4d)
{
flag17 = true;
}
else
{
num235++;
if (num235 >= 0x2710)
{
flag17 = true;
}
}
}
}
}
Main.statusText = "Spreading grass...";
for (int num238 = 0; num238 < Main.maxTilesX; num238++)
{
num62 = num238;
bool flag18 = true;
for (int num239 = 0; num239 < (Main.worldSurface - 1.0); num239++)
{
if (Main.tile[num62, num239].active)
{
if (flag18 && (Main.tile[num62, num239].type == 0))
{
SpreadGrass(num62, num239, 0, 2, true);
}
if (num239 > num3)
{
break;
}
flag18 = false;
}
else if (Main.tile[num62, num239].wall == 0)
{
flag18 = true;
}
}
}
int num240 = 5;
bool flag19 = true;
while (flag19)
{
int num241 = (Main.maxTilesX / 2) + genRand.Next(-num240, num240 + 1);
for (int num242 = 0; num242 < Main.maxTilesY; num242++)
{
if (Main.tile[num241, num242].active)
{
Main.spawnTileX = num241;
Main.spawnTileY = num242;
Main.tile[num241, num242 - 1].lighted = true;
break;
}
}
flag19 = false;
num240++;
if (Main.spawnTileY > Main.worldSurface)
{
flag19 = true;
}
if (Main.tile[Main.spawnTileX, Main.spawnTileY - 1].liquid > 0)
{
flag19 = true;
}
}
for (int num243 = 10; Main.spawnTileY > Main.worldSurface; num243++)
{
int num244 = genRand.Next((Main.maxTilesX / 2) - num243, (Main.maxTilesX / 2) + num243);
for (int num245 = 0; num245 < Main.maxTilesY; num245++)
{
if (Main.tile[num244, num245].active)
{
Main.spawnTileX = num244;
Main.spawnTileY = num245;
Main.tile[num244, num245 - 1].lighted = true;
break;
}
}
}
int index = NPC.NewNPC(Main.spawnTileX * 0x10, Main.spawnTileY * 0x10, 0x16, 0);
Main.npc[index].homeTileX = Main.spawnTileX;
Main.npc[index].homeTileY = Main.spawnTileY;
Main.npc[index].direction = 1;
Main.npc[index].homeless = true;
Main.statusText = "Planting sunflowers...";
for (int num247 = 0; num247 < (Main.maxTilesX * 0.002); num247++)
{
int num248 = 0;
int num249 = 0;
int num250 = 0;
int num1 = Main.maxTilesX / 2;
num248 = genRand.Next(Main.maxTilesX);
num249 = (num248 - genRand.Next(10)) - 7;
num250 = (num248 + genRand.Next(10)) + 7;
if (num249 < 0)
{
num249 = 0;
}
if (num250 > (Main.maxTilesX - 1))
{
num250 = Main.maxTilesX - 1;
}
for (int num251 = num249; num251 < num250; num251++)
{
for (int num252 = 1; num252 < (Main.worldSurface - 1.0); num252++)
{
if ((Main.tile[num251, num252].type == 1) && Main.tile[num251, num252].active)
{
Main.tile[num251, num252].type = 2;
}
if ((Main.tile[num251 + 1, num252].type == 1) && Main.tile[num251 + 1, num252].active)
{
Main.tile[num251 + 1, num252].type = 2;
}
if (((Main.tile[num251, num252].type == 2) && Main.tile[num251, num252].active) && !Main.tile[num251, num252 - 1].active)
{
PlaceTile(num251, num252 - 1, 0x1b, true, false, -1);
}
if (Main.tile[num251, num252].active)
{
break;
}
}
}
}
Main.statusText = "Planting trees...";
for (int num253 = 0; num253 < (Main.maxTilesX * 0.003); num253++)
{
int num254 = genRand.Next(50, Main.maxTilesX - 50);
int num255 = genRand.Next(0x19, 50);
for (int num256 = num254 - num255; num256 < (num254 + num255); num256++)
{
for (int num257 = 20; num257 < Main.worldSurface; num257++)
{
if (Main.tile[num256, num257].active)
{
if (Main.tile[num256, num257].type == 1)
{
Main.tile[num256, num257].type = 2;
}
if (Main.tile[num256, num257 + 1].type == 1)
{
Main.tile[num256, num257 + 1].type = 2;
}
break;
}
}
}
for (int num258 = num254 - num255; num258 < (num254 + num255); num258++)
{
for (int num259 = 20; num259 < Main.worldSurface; num259++)
{
GrowEpicTree(num258, num259);
}
}
}
AddTrees();
Main.statusText = "Planting weeds...";
AddPlants();
for (int num260 = 0; num260 < Main.maxTilesX; num260++)
{
for (int num261 = (int) Main.worldSurface; num261 < Main.maxTilesY; num261++)
{
if (Main.tile[num260, num261].active)
{
if ((Main.tile[num260, num261].type == 70) && !Main.tile[num260, num261 - 1].active)
{
GrowShroom(num260, num261);
if (!Main.tile[num260, num261 - 1].active)
{
PlaceTile(num260, num261 - 1, 0x47, true, false, -1);
}
}
if ((Main.tile[num260, num261].type == 60) && !Main.tile[num260, num261 - 1].active)
{
PlaceTile(num260, num261 - 1, 0x3d, true, false, -1);
}
}
}
}
Main.statusText = "Growing vines...";
for (int num262 = 0; num262 < Main.maxTilesX; num262++)
{
int num263 = 0;
for (int num264 = 0; num264 < Main.worldSurface; num264++)
{
if ((num263 > 0) && !Main.tile[num262, num264].active)
{
Main.tile[num262, num264].active = true;
Main.tile[num262, num264].type = 0x34;
num263--;
}
else
{
num263 = 0;
}
if ((Main.tile[num262, num264].active && (Main.tile[num262, num264].type == 2)) && (genRand.Next(5) < 3))
{
num263 = genRand.Next(1, 10);
}
}
num263 = 0;
for (int num265 = (int) Main.worldSurface; num265 < Main.maxTilesY; num265++)
{
if ((num263 > 0) && !Main.tile[num262, num265].active)
{
Main.tile[num262, num265].active = true;
Main.tile[num262, num265].type = 0x3e;
num263--;
}
else
{
num263 = 0;
}
if ((Main.tile[num262, num265].active && (Main.tile[num262, num265].type == 60)) && (genRand.Next(5) < 3))
{
num263 = genRand.Next(1, 10);
}
}
}
Main.statusText = "Planting flowers...";
for (int num266 = 0; num266 < (Main.maxTilesX * 0.005); num266++)
{
int num267 = genRand.Next(20, Main.maxTilesX - 20);
int num268 = genRand.Next(5, 15);
int num269 = genRand.Next(15, 30);
for (int num270 = 1; num270 < (Main.worldSurface - 1.0); num270++)
{
if (Main.tile[num267, num270].active)
{
for (int num271 = num267 - num268; num271 < (num267 + num268); num271++)
{
for (int num272 = num270 - num269; num272 < (num270 + num269); num272++)
{
if ((Main.tile[num271, num272].type == 3) || (Main.tile[num271, num272].type == 0x18))
{
Main.tile[num271, num272].frameX = (short) (genRand.Next(6, 8) * 0x12);
}
}
}
break;
}
}
}
Main.statusText = "Planting mushrooms...";
for (int num273 = 0; num273 < (Main.maxTilesX * 0.002); num273++)
{
int num274 = genRand.Next(20, Main.maxTilesX - 20);
int num275 = genRand.Next(4, 10);
int num276 = genRand.Next(15, 30);
for (int num277 = 1; num277 < (Main.worldSurface - 1.0); num277++)
{
if (Main.tile[num274, num277].active)
{
for (int num278 = num274 - num275; num278 < (num274 + num275); num278++)
{
for (int num279 = num277 - num276; num279 < (num277 + num276); num279++)
{
if ((Main.tile[num278, num279].type == 3) || (Main.tile[num278, num279].type == 0x18))
{
Main.tile[num278, num279].frameX = 0x90;
}
}
}
break;
}
}
}
gen = false;
}
public static void GrowEpicTree(int i, int y)
{
int num2;
int num = y;
while (Main.tile[i, num].type == 20)
{
num++;
}
if ((((!Main.tile[i, num].active || (Main.tile[i, num].type != 2)) || ((Main.tile[i, num - 1].wall != 0) || (Main.tile[i, num - 1].liquid != 0))) || ((!Main.tile[i - 1, num].active || (Main.tile[i - 1, num].type != 2)) || (!Main.tile[i + 1, num].active || (Main.tile[i + 1, num].type != 2)))) || !EmptyTileCheck(i - 2, i + 2, num - 0x37, num - 1, 20))
{
return;
}
bool flag = false;
bool flag2 = false;
int num4 = genRand.Next(20, 30);
for (int j = num - num4; j < num; j++)
{
Main.tile[i, j].frameNumber = (byte) genRand.Next(3);
Main.tile[i, j].active = true;
Main.tile[i, j].type = 5;
num2 = genRand.Next(3);
int num3 = genRand.Next(10);
if ((j == (num - 1)) || (j == (num - num4)))
{
num3 = 0;
}
while ((((num3 == 5) || (num3 == 7)) && flag) || (((num3 == 6) || (num3 == 7)) && flag2))
{
num3 = genRand.Next(10);
}
flag = false;
flag2 = false;
if ((num3 == 5) || (num3 == 7))
{
flag = true;
}
if ((num3 == 6) || (num3 == 7))
{
flag2 = true;
}
if (num3 == 1)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 2)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
else if (num3 == 3)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 4)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 5)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
else if (num3 == 6)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 7)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 110;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
if ((num3 == 5) || (num3 == 7))
{
Main.tile[i - 1, j].active = true;
Main.tile[i - 1, j].type = 5;
num2 = genRand.Next(3);
if (genRand.Next(3) < 2)
{
switch (num2)
{
case 0:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 0xc6;
break;
case 1:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 220;
break;
case 2:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 0xf2;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0;
break;
case 1:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0x16;
break;
case 2:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0x2c;
break;
}
}
}
if ((num3 == 6) || (num3 == 7))
{
Main.tile[i + 1, j].active = true;
Main.tile[i + 1, j].type = 5;
num2 = genRand.Next(3);
if (genRand.Next(3) < 2)
{
switch (num2)
{
case 0:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 0xc6;
break;
case 1:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 220;
break;
case 2:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 0xf2;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 0x42;
break;
case 1:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 0x58;
break;
case 2:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 110;
break;
}
}
}
}
int num6 = genRand.Next(3);
if ((num6 == 0) || (num6 == 1))
{
Main.tile[i + 1, num - 1].active = true;
Main.tile[i + 1, num - 1].type = 5;
switch (genRand.Next(3))
{
case 0:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0xb0;
goto Label_0A36;
}
}
Label_0A36:
if ((num6 == 0) || (num6 == 2))
{
Main.tile[i - 1, num - 1].active = true;
Main.tile[i - 1, num - 1].type = 5;
switch (genRand.Next(3))
{
case 0:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0xb0;
break;
}
}
num2 = genRand.Next(3);
if (num6 == 0)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
else if (num6 == 1)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
else if (num6 == 2)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
if (genRand.Next(3) < 2)
{
switch (genRand.Next(3))
{
case 0:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 0xc6;
break;
case 1:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 220;
break;
case 2:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 0xf2;
break;
}
}
else
{
switch (genRand.Next(3))
{
case 0:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 0xc6;
break;
case 1:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 220;
break;
case 2:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 0xf2;
break;
}
}
RangeFrame(i - 2, (num - num4) - 1, i + 2, num + 1);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, i, num - ((int) (num4 * 0.5)), num4 + 1);
}
}
public static void GrowShroom(int i, int y)
{
int num = y;
if (((!Main.tile[i - 1, num - 1].lava && !Main.tile[i - 1, num - 1].lava) && !Main.tile[i + 1, num - 1].lava) && (((Main.tile[i, num].active && (Main.tile[i, num].type == 70)) && ((Main.tile[i, num - 1].wall == 0) && Main.tile[i - 1, num].active)) && (((Main.tile[i - 1, num].type == 70) && Main.tile[i + 1, num].active) && ((Main.tile[i + 1, num].type == 70) && EmptyTileCheck(i - 2, i + 2, num - 13, num - 1, 0x47)))))
{
int num3 = genRand.Next(4, 11);
for (int j = num - num3; j < num; j++)
{
Main.tile[i, j].frameNumber = (byte) genRand.Next(3);
Main.tile[i, j].active = true;
Main.tile[i, j].type = 0x48;
switch (genRand.Next(3))
{
case 0:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x12;
break;
case 2:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x24;
break;
}
}
switch (genRand.Next(3))
{
case 0:
Main.tile[i, num - num3].frameX = 0x24;
Main.tile[i, num - num3].frameY = 0;
break;
case 1:
Main.tile[i, num - num3].frameX = 0x24;
Main.tile[i, num - num3].frameY = 0x12;
break;
case 2:
Main.tile[i, num - num3].frameX = 0x24;
Main.tile[i, num - num3].frameY = 0x24;
break;
}
RangeFrame(i - 2, (num - num3) - 1, i + 2, num + 1);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, i, num - ((int) (num3 * 0.5)), num3 + 1);
}
}
}
public static void GrowTree(int i, int y)
{
int num2;
int num = y;
while (Main.tile[i, num].type == 20)
{
num++;
}
if (((Main.tile[i - 1, num - 1].liquid != 0) || (Main.tile[i - 1, num - 1].liquid != 0)) || (Main.tile[i + 1, num - 1].liquid != 0))
{
return;
}
if (((!Main.tile[i, num].active || (Main.tile[i, num].type != 2)) || ((Main.tile[i, num - 1].wall != 0) || !Main.tile[i - 1, num].active)) || (((Main.tile[i - 1, num].type != 2) || !Main.tile[i + 1, num].active) || ((Main.tile[i + 1, num].type != 2) || !EmptyTileCheck(i - 2, i + 2, num - 14, num - 1, 20))))
{
return;
}
bool flag = false;
bool flag2 = false;
int num4 = genRand.Next(5, 15);
for (int j = num - num4; j < num; j++)
{
Main.tile[i, j].frameNumber = (byte) genRand.Next(3);
Main.tile[i, j].active = true;
Main.tile[i, j].type = 5;
num2 = genRand.Next(3);
int num3 = genRand.Next(10);
if ((j == (num - 1)) || (j == (num - num4)))
{
num3 = 0;
}
while ((((num3 == 5) || (num3 == 7)) && flag) || (((num3 == 6) || (num3 == 7)) && flag2))
{
num3 = genRand.Next(10);
}
flag = false;
flag2 = false;
if ((num3 == 5) || (num3 == 7))
{
flag = true;
}
if ((num3 == 6) || (num3 == 7))
{
flag2 = true;
}
if (num3 == 1)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 2)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
else if (num3 == 3)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x2c;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 4)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x16;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 5)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
else if (num3 == 6)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 110;
break;
}
}
else if (num3 == 7)
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x42;
break;
case 1:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x58;
break;
case 2:
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 110;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0;
break;
case 1:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x16;
break;
case 2:
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x2c;
break;
}
}
if ((num3 == 5) || (num3 == 7))
{
Main.tile[i - 1, j].active = true;
Main.tile[i - 1, j].type = 5;
num2 = genRand.Next(3);
if (genRand.Next(3) < 2)
{
switch (num2)
{
case 0:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 0xc6;
break;
case 1:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 220;
break;
case 2:
Main.tile[i - 1, j].frameX = 0x2c;
Main.tile[i - 1, j].frameY = 0xf2;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0;
break;
case 1:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0x16;
break;
case 2:
Main.tile[i - 1, j].frameX = 0x42;
Main.tile[i - 1, j].frameY = 0x2c;
break;
}
}
}
if ((num3 == 6) || (num3 == 7))
{
Main.tile[i + 1, j].active = true;
Main.tile[i + 1, j].type = 5;
num2 = genRand.Next(3);
if (genRand.Next(3) < 2)
{
switch (num2)
{
case 0:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 0xc6;
break;
case 1:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 220;
break;
case 2:
Main.tile[i + 1, j].frameX = 0x42;
Main.tile[i + 1, j].frameY = 0xf2;
break;
}
}
else
{
switch (num2)
{
case 0:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 0x42;
break;
case 1:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 0x58;
break;
case 2:
Main.tile[i + 1, j].frameX = 0x58;
Main.tile[i + 1, j].frameY = 110;
break;
}
}
}
}
int num6 = genRand.Next(3);
if ((num6 == 0) || (num6 == 1))
{
Main.tile[i + 1, num - 1].active = true;
Main.tile[i + 1, num - 1].type = 5;
switch (genRand.Next(3))
{
case 0:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i + 1, num - 1].frameX = 0x16;
Main.tile[i + 1, num - 1].frameY = 0xb0;
goto Label_0A63;
}
}
Label_0A63:
if ((num6 == 0) || (num6 == 2))
{
Main.tile[i - 1, num - 1].active = true;
Main.tile[i - 1, num - 1].type = 5;
switch (genRand.Next(3))
{
case 0:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i - 1, num - 1].frameX = 0x2c;
Main.tile[i - 1, num - 1].frameY = 0xb0;
break;
}
}
num2 = genRand.Next(3);
if (num6 == 0)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0x58;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
else if (num6 == 1)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
else if (num6 == 2)
{
switch (num2)
{
case 0:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0x84;
break;
case 1:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0x9a;
break;
case 2:
Main.tile[i, num - 1].frameX = 0x42;
Main.tile[i, num - 1].frameY = 0xb0;
break;
}
}
if (genRand.Next(3) < 2)
{
switch (genRand.Next(3))
{
case 0:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 0xc6;
break;
case 1:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 220;
break;
case 2:
Main.tile[i, num - num4].frameX = 0x16;
Main.tile[i, num - num4].frameY = 0xf2;
break;
}
}
else
{
switch (genRand.Next(3))
{
case 0:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 0xc6;
break;
case 1:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 220;
break;
case 2:
Main.tile[i, num - num4].frameX = 0;
Main.tile[i, num - num4].frameY = 0xf2;
break;
}
}
RangeFrame(i - 2, (num - num4) - 1, i + 2, num + 1);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, i, num - ((int) (num4 * 0.5)), num4 + 1);
}
}
public static void HellHouse(int i, int j)
{
int width = genRand.Next(8, 20);
int num2 = genRand.Next(3);
int num3 = genRand.Next(7);
int num4 = i;
int num5 = j;
for (int k = 0; k < num2; k++)
{
int height = genRand.Next(5, 9);
HellRoom(num4, num5, width, height);
num5 -= height;
}
num5 = j;
for (int m = 0; m < num3; m++)
{
int num9 = genRand.Next(5, 9);
num5 += num9;
HellRoom(num4, num5, width, num9);
}
for (int n = i - (width / 2); n <= (i + (width / 2)); n++)
{
num5 = j;
while ((num5 < Main.maxTilesY) && ((Main.tile[n, num5].active && (Main.tile[n, num5].type == 0x4c)) || (Main.tile[n, num5].wall == 13)))
{
num5++;
}
int num11 = 6 + genRand.Next(3);
while ((num5 < Main.maxTilesY) && !Main.tile[n, num5].active)
{
num11--;
Main.tile[n, num5].active = true;
Main.tile[n, num5].type = 0x39;
num5++;
if (num11 <= 0)
{
break;
}
}
}
int minValue = 0;
int maxValue = 0;
num5 = j;
while ((num5 < Main.maxTilesY) && ((Main.tile[i, num5].active && (Main.tile[i, num5].type == 0x4c)) || (Main.tile[i, num5].wall == 13)))
{
num5++;
}
num5--;
maxValue = num5;
while ((Main.tile[i, num5].active && (Main.tile[i, num5].type == 0x4c)) || (Main.tile[i, num5].wall == 13))
{
num5--;
if (Main.tile[i, num5].active && (Main.tile[i, num5].type == 0x4c))
{
int num14 = genRand.Next((i - (width / 2)) + 1, (i + (width / 2)) - 1);
int num15 = genRand.Next((i - (width / 2)) + 1, (i + (width / 2)) - 1);
if (num14 > num15)
{
int num16 = num14;
num14 = num15;
num15 = num16;
}
if (num14 == num15)
{
if (num14 < i)
{
num15++;
}
else
{
num14--;
}
}
for (int num17 = num14; num17 <= num15; num17++)
{
if (Main.tile[num17, num5 - 1].wall == 13)
{
Main.tile[num17, num5].wall = 13;
}
Main.tile[num17, num5].type = 0x13;
Main.tile[num17, num5].active = true;
}
num5--;
}
}
minValue = num5;
float num18 = (maxValue - minValue) * width;
float num19 = num18 * 0.02f;
for (int num20 = 0; num20 < num19; num20++)
{
int num21 = genRand.Next(i - (width / 2), (i + (width / 2)) + 1);
int num22 = genRand.Next(minValue, maxValue);
int num23 = genRand.Next(3, 8);
for (int num24 = num21 - num23; num24 <= (num21 + num23); num24++)
{
for (int num25 = num22 - num23; num25 <= (num22 + num23); num25++)
{
float num26 = Math.Abs((int) (num24 - num21));
float num27 = Math.Abs((int) (num25 - num22));
if (Math.Sqrt((double) ((num26 * num26) + (num27 * num27))) < (num23 * 0.4))
{
if ((Main.tile[num24, num25].type == 0x4c) || (Main.tile[num24, num25].type == 0x13))
{
Main.tile[num24, num25].active = false;
}
Main.tile[num24, num25].wall = 0;
}
}
}
}
}
public static void HellRoom(int i, int j, int width, int height)
{
for (int k = i - (width / 2); k <= (i + (width / 2)); k++)
{
for (int n = j - height; n <= j; n++)
{
Main.tile[k, n].active = true;
Main.tile[k, n].type = 0x4c;
Main.tile[k, n].liquid = 0;
Main.tile[k, n].lava = false;
}
}
for (int m = (i - (width / 2)) + 1; m <= ((i + (width / 2)) - 1); m++)
{
for (int num4 = (j - height) + 1; num4 <= (j - 1); num4++)
{
Main.tile[m, num4].active = false;
Main.tile[m, num4].wall = 13;
Main.tile[m, num4].liquid = 0;
Main.tile[m, num4].lava = false;
}
}
}
public static void IslandHouse(int i, int j)
{
byte num = (byte) genRand.Next(0x2d, 0x30);
byte num2 = (byte) genRand.Next(10, 13);
Vector2 vector = new Vector2((float) i, (float) j);
int num7 = 1;
if (genRand.Next(2) == 0)
{
num7 = -1;
}
int num8 = genRand.Next(7, 12);
int num9 = genRand.Next(5, 7);
vector.X = i + ((num8 + 2) * num7);
for (int k = j - 15; k < (j + 30); k++)
{
if (Main.tile[(int) vector.X, k].active)
{
vector.Y = k - 1;
break;
}
}
vector.X = i;
int num3 = (int) ((vector.X - num8) - 2f);
int maxTilesX = (int) ((vector.X + num8) + 2f);
int num4 = (int) ((vector.Y - num9) - 2f);
int maxTilesY = ((int) (vector.Y + 2f)) + genRand.Next(3, 5);
if (num3 < 0)
{
num3 = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num4 < 0)
{
num4 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int m = num3; m <= maxTilesX; m++)
{
for (int num12 = num4; num12 < maxTilesY; num12++)
{
Main.tile[m, num12].active = true;
Main.tile[m, num12].type = num;
Main.tile[m, num12].wall = 0;
}
}
num3 = ((int) vector.X) - num8;
maxTilesX = ((int) vector.X) + num8;
num4 = ((int) vector.Y) - num9;
maxTilesY = (int) (vector.Y + 1f);
if (num3 < 0)
{
num3 = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num4 < 0)
{
num4 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int n = num3; n <= maxTilesX; n++)
{
for (int num14 = num4; num14 < maxTilesY; num14++)
{
if (Main.tile[n, num14].wall == 0)
{
Main.tile[n, num14].active = false;
Main.tile[n, num14].wall = num2;
}
}
}
int num15 = i + ((num8 + 1) * num7);
int y = (int) vector.Y;
for (int num17 = num15 - 2; num17 <= (num15 + 2); num17++)
{
Main.tile[num17, y].active = false;
Main.tile[num17, y - 1].active = false;
Main.tile[num17, y - 2].active = false;
}
PlaceTile(num15, y, 10, true, false, -1);
int contain = 0;
int houseCount = WorldGen.houseCount;
if (houseCount > 2)
{
houseCount = genRand.Next(3);
}
switch (houseCount)
{
case 0:
contain = 0x9f;
break;
case 1:
contain = 0x41;
break;
case 2:
contain = 0x9e;
break;
}
AddBuriedChest(i, y - 3, contain);
WorldGen.houseCount++;
}
public static void KillTile(int i, int j, bool fail = false, bool effectOnly = false, bool noItem = false)
{
if (((i >= 0) && (j >= 0)) && ((i < Main.maxTilesX) && (j < Main.maxTilesY)))
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active)
{
if ((j >= 1) && (Main.tile[i, j - 1] == null))
{
Main.tile[i, j - 1] = new Tile();
}
if ((((j < 1) || !Main.tile[i, j - 1].active) || ((((Main.tile[i, j - 1].type != 5) || (Main.tile[i, j].type == 5)) && ((Main.tile[i, j - 1].type != 0x15) || (Main.tile[i, j].type == 0x15))) && ((((Main.tile[i, j - 1].type != 0x1a) || (Main.tile[i, j].type == 0x1a)) && ((Main.tile[i, j - 1].type != 0x48) || (Main.tile[i, j].type == 0x48))) && ((Main.tile[i, j - 1].type != 12) || (Main.tile[i, j].type == 12))))) || ((Main.tile[i, j - 1].type == 5) && (((((Main.tile[i, j - 1].frameX == 0x42) && (Main.tile[i, j - 1].frameY >= 0)) && (Main.tile[i, j - 1].frameY <= 0x2c)) || (((Main.tile[i, j - 1].frameX == 0x58) && (Main.tile[i, j - 1].frameY >= 0x42)) && (Main.tile[i, j - 1].frameY <= 110))) || (Main.tile[i, j - 1].frameY >= 0xc6))))
{
if (!effectOnly && !stopDrops)
{
if (Main.tile[i, j].type == 3)
{
Main.PlaySound(6, i * 0x10, j * 0x10, 1);
if (Main.tile[i, j].frameX == 0x90)
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 5, 1, false);
}
}
else if (Main.tile[i, j].type == 0x18)
{
Main.PlaySound(6, i * 0x10, j * 0x10, 1);
if (Main.tile[i, j].frameX == 0x90)
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 60, 1, false);
}
}
else if ((((Main.tile[i, j].type == 0x20) || (Main.tile[i, j].type == 0x33)) || ((Main.tile[i, j].type == 0x34) || (Main.tile[i, j].type == 0x3d))) || (((Main.tile[i, j].type == 0x3e) || (Main.tile[i, j].type == 0x45)) || (((Main.tile[i, j].type == 0x47) || (Main.tile[i, j].type == 0x49)) || (Main.tile[i, j].type == 0x4a))))
{
Main.PlaySound(6, i * 0x10, j * 0x10, 1);
}
else if ((((((Main.tile[i, j].type == 1) || (Main.tile[i, j].type == 6)) || ((Main.tile[i, j].type == 7) || (Main.tile[i, j].type == 8))) || (((Main.tile[i, j].type == 9) || (Main.tile[i, j].type == 0x16)) || ((Main.tile[i, j].type == 0x19) || (Main.tile[i, j].type == 0x25)))) || ((((Main.tile[i, j].type == 0x26) || (Main.tile[i, j].type == 0x27)) || ((Main.tile[i, j].type == 0x29) || (Main.tile[i, j].type == 0x2b))) || (((Main.tile[i, j].type == 0x2c) || (Main.tile[i, j].type == 0x2d)) || ((Main.tile[i, j].type == 0x2e) || (Main.tile[i, j].type == 0x2f))))) || ((((Main.tile[i, j].type == 0x30) || (Main.tile[i, j].type == 0x38)) || ((Main.tile[i, j].type == 0x3a) || (Main.tile[i, j].type == 0x3f))) || ((((Main.tile[i, j].type == 0x40) || (Main.tile[i, j].type == 0x41)) || ((Main.tile[i, j].type == 0x42) || (Main.tile[i, j].type == 0x43))) || (((Main.tile[i, j].type == 0x44) || (Main.tile[i, j].type == 0x4b)) || (Main.tile[i, j].type == 0x4c)))))
{
Main.PlaySound(0x15, i * 0x10, j * 0x10, 1);
}
else
{
Main.PlaySound(0, i * 0x10, j * 0x10, 1);
}
}
int num = 10;
if (fail)
{
num = 3;
}
for (int k = 0; k < num; k++)
{
int type = 0;
if (Main.tile[i, j].type == 0)
{
type = 0;
}
if ((((Main.tile[i, j].type == 1) || (Main.tile[i, j].type == 0x10)) || ((Main.tile[i, j].type == 0x11) || (Main.tile[i, j].type == 0x26))) || ((((Main.tile[i, j].type == 0x27) || (Main.tile[i, j].type == 0x29)) || ((Main.tile[i, j].type == 0x2b) || (Main.tile[i, j].type == 0x2c))) || ((Main.tile[i, j].type == 0x30) || Main.tileStone[Main.tile[i, j].type])))
{
type = 1;
}
if ((Main.tile[i, j].type == 4) || (Main.tile[i, j].type == 0x21))
{
type = 6;
}
if ((((Main.tile[i, j].type == 5) || (Main.tile[i, j].type == 10)) || ((Main.tile[i, j].type == 11) || (Main.tile[i, j].type == 14))) || (((Main.tile[i, j].type == 15) || (Main.tile[i, j].type == 0x13)) || ((Main.tile[i, j].type == 0x15) || (Main.tile[i, j].type == 30))))
{
type = 7;
}
if (Main.tile[i, j].type == 2)
{
if (genRand.Next(2) == 0)
{
type = 0;
}
else
{
type = 2;
}
}
if ((Main.tile[i, j].type == 6) || (Main.tile[i, j].type == 0x1a))
{
type = 8;
}
if (((Main.tile[i, j].type == 7) || (Main.tile[i, j].type == 0x22)) || (Main.tile[i, j].type == 0x2f))
{
type = 9;
}
if (((Main.tile[i, j].type == 8) || (Main.tile[i, j].type == 0x24)) || (Main.tile[i, j].type == 0x2d))
{
type = 10;
}
if (((Main.tile[i, j].type == 9) || (Main.tile[i, j].type == 0x23)) || ((Main.tile[i, j].type == 0x2a) || (Main.tile[i, j].type == 0x2e)))
{
type = 11;
}
if (Main.tile[i, j].type == 12)
{
type = 12;
}
if ((Main.tile[i, j].type == 3) || (Main.tile[i, j].type == 0x49))
{
type = 3;
}
if ((Main.tile[i, j].type == 13) || (Main.tile[i, j].type == 0x36))
{
type = 13;
}
if (Main.tile[i, j].type == 0x16)
{
type = 14;
}
if ((Main.tile[i, j].type == 0x1c) || (Main.tile[i, j].type == 0x4e))
{
type = 0x16;
}
if (Main.tile[i, j].type == 0x1d)
{
type = 0x17;
}
if (Main.tile[i, j].type == 40)
{
type = 0x1c;
}
if (Main.tile[i, j].type == 0x31)
{
type = 0x1d;
}
if (Main.tile[i, j].type == 50)
{
type = 0x16;
}
if (Main.tile[i, j].type == 0x33)
{
type = 30;
}
if (Main.tile[i, j].type == 0x34)
{
type = 3;
}
if (Main.tile[i, j].type == 0x35)
{
type = 0x20;
}
if ((Main.tile[i, j].type == 0x38) || (Main.tile[i, j].type == 0x4b))
{
type = 0x25;
}
if (Main.tile[i, j].type == 0x39)
{
type = 0x24;
}
if (Main.tile[i, j].type == 0x3b)
{
type = 0x26;
}
if (((Main.tile[i, j].type == 0x3d) || (Main.tile[i, j].type == 0x3e)) || (Main.tile[i, j].type == 0x4a))
{
type = 40;
}
if (Main.tile[i, j].type == 0x45)
{
type = 7;
}
if ((Main.tile[i, j].type == 0x47) || (Main.tile[i, j].type == 0x48))
{
type = 0x1a;
}
if (Main.tile[i, j].type == 70)
{
type = 0x11;
}
if (Main.tile[i, j].type == 2)
{
if (genRand.Next(2) == 0)
{
type = 0x26;
}
else
{
type = 0x27;
}
}
if (((Main.tile[i, j].type == 0x3a) || (Main.tile[i, j].type == 0x4c)) || (Main.tile[i, j].type == 0x4d))
{
if (genRand.Next(2) == 0)
{
type = 6;
}
else
{
type = 0x19;
}
}
if (Main.tile[i, j].type == 0x25)
{
if (genRand.Next(2) == 0)
{
type = 6;
}
else
{
type = 0x17;
}
}
if (Main.tile[i, j].type == 0x20)
{
if (genRand.Next(2) == 0)
{
type = 14;
}
else
{
type = 0x18;
}
}
if ((Main.tile[i, j].type == 0x17) || (Main.tile[i, j].type == 0x18))
{
if (genRand.Next(2) == 0)
{
type = 14;
}
else
{
type = 0x11;
}
}
if ((Main.tile[i, j].type == 0x19) || (Main.tile[i, j].type == 0x1f))
{
if (genRand.Next(2) == 0)
{
type = 14;
}
else
{
type = 1;
}
}
if (Main.tile[i, j].type == 20)
{
if (genRand.Next(2) == 0)
{
type = 7;
}
else
{
type = 2;
}
}
if (Main.tile[i, j].type == 0x1b)
{
if (genRand.Next(2) == 0)
{
type = 3;
}
else
{
type = 0x13;
}
}
if ((((Main.tile[i, j].type == 0x22) || (Main.tile[i, j].type == 0x23)) || ((Main.tile[i, j].type == 0x24) || (Main.tile[i, j].type == 0x2a))) && (Main.rand.Next(2) == 0))
{
type = 6;
}
if (type >= 0)
{
Color newColor = new Color();
Dust.NewDust(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10, type, 0f, 0f, 0, newColor, 1f);
}
}
if (!effectOnly)
{
if (fail)
{
if ((Main.tile[i, j].type == 2) || (Main.tile[i, j].type == 0x17))
{
Main.tile[i, j].type = 0;
}
if (Main.tile[i, j].type == 60)
{
Main.tile[i, j].type = 0x3b;
}
SquareTileFrame(i, j, true);
}
else
{
if ((Main.tile[i, j].type == 0x15) && (Main.netMode != 1))
{
int x = i - (Main.tile[i, j].frameX / 0x12);
int y = j - (Main.tile[i, j].frameY / 0x12);
if (!Chest.DestroyChest(x, y))
{
return;
}
}
if (!noItem && !stopDrops)
{
int num6 = 0;
if ((Main.tile[i, j].type == 0) || (Main.tile[i, j].type == 2))
{
num6 = 2;
}
else if (Main.tile[i, j].type == 1)
{
num6 = 3;
}
else if (Main.tile[i, j].type == 4)
{
num6 = 8;
}
else if (Main.tile[i, j].type == 5)
{
if ((Main.tile[i, j].frameX >= 0x16) && (Main.tile[i, j].frameY >= 0xc6))
{
if (genRand.Next(2) == 0)
{
num6 = 0x1b;
}
else
{
num6 = 9;
}
}
else
{
num6 = 9;
}
}
else if (Main.tile[i, j].type == 6)
{
num6 = 11;
}
else if (Main.tile[i, j].type == 7)
{
num6 = 12;
}
else if (Main.tile[i, j].type == 8)
{
num6 = 13;
}
else if (Main.tile[i, j].type == 9)
{
num6 = 14;
}
else if (Main.tile[i, j].type == 13)
{
Main.PlaySound(13, i * 0x10, j * 0x10, 1);
if (Main.tile[i, j].frameX == 0x12)
{
num6 = 0x1c;
}
else if (Main.tile[i, j].frameX == 0x24)
{
num6 = 110;
}
else
{
num6 = 0x1f;
}
}
else if (Main.tile[i, j].type == 0x13)
{
num6 = 0x5e;
}
else if (Main.tile[i, j].type == 0x16)
{
num6 = 0x38;
}
else if (Main.tile[i, j].type == 0x17)
{
num6 = 2;
}
else if (Main.tile[i, j].type == 0x19)
{
num6 = 0x3d;
}
else if (Main.tile[i, j].type == 30)
{
num6 = 9;
}
else if (Main.tile[i, j].type == 0x21)
{
num6 = 0x69;
}
else if (Main.tile[i, j].type == 0x25)
{
num6 = 0x74;
}
else if (Main.tile[i, j].type == 0x26)
{
num6 = 0x81;
}
else if (Main.tile[i, j].type == 0x27)
{
num6 = 0x83;
}
else if (Main.tile[i, j].type == 40)
{
num6 = 0x85;
}
else if (Main.tile[i, j].type == 0x29)
{
num6 = 0x86;
}
else if (Main.tile[i, j].type == 0x2b)
{
num6 = 0x89;
}
else if (Main.tile[i, j].type == 0x2c)
{
num6 = 0x8b;
}
else if (Main.tile[i, j].type == 0x2d)
{
num6 = 0x8d;
}
else if (Main.tile[i, j].type == 0x2e)
{
num6 = 0x8f;
}
else if (Main.tile[i, j].type == 0x2f)
{
num6 = 0x91;
}
else if (Main.tile[i, j].type == 0x30)
{
num6 = 0x93;
}
else if (Main.tile[i, j].type == 0x31)
{
num6 = 0x94;
}
else if (Main.tile[i, j].type == 0x33)
{
num6 = 150;
}
else if (Main.tile[i, j].type == 0x35)
{
num6 = 0xa9;
}
else if (Main.tile[i, j].type == 0x36)
{
Main.PlaySound(13, i * 0x10, j * 0x10, 1);
}
else if (Main.tile[i, j].type == 0x38)
{
num6 = 0xad;
}
else if (Main.tile[i, j].type == 0x39)
{
num6 = 0xac;
}
else if (Main.tile[i, j].type == 0x3a)
{
num6 = 0xae;
}
else if (Main.tile[i, j].type == 60)
{
num6 = 0xb0;
}
else if (Main.tile[i, j].type == 70)
{
num6 = 0xb0;
}
else if (Main.tile[i, j].type == 0x4b)
{
num6 = 0xc0;
}
else if (Main.tile[i, j].type == 0x4c)
{
num6 = 0xd6;
}
else if (Main.tile[i, j].type == 0x4e)
{
num6 = 0xde;
}
else if ((Main.tile[i, j].type == 0x3d) || (Main.tile[i, j].type == 0x4a))
{
if (Main.tile[i, j].frameX == 0xa2)
{
num6 = 0xdf;
}
else if (((Main.tile[i, j].frameX >= 0x6c) && (Main.tile[i, j].frameX <= 0x7e)) && (genRand.Next(2) == 0))
{
num6 = 0xd0;
}
}
else if ((Main.tile[i, j].type == 0x3b) || (Main.tile[i, j].type == 60))
{
num6 = 0xb0;
}
else if ((Main.tile[i, j].type == 0x47) || (Main.tile[i, j].type == 0x48))
{
if (genRand.Next(50) == 0)
{
num6 = 0xc2;
}
else
{
num6 = 0xb7;
}
}
else if ((Main.tile[i, j].type == 0x4a) && (genRand.Next(100) == 0))
{
num6 = 0xc3;
}
else if ((Main.tile[i, j].type >= 0x3f) && (Main.tile[i, j].type <= 0x44))
{
num6 = (Main.tile[i, j].type - 0x3f) + 0xb1;
}
else if (Main.tile[i, j].type == 50)
{
if (Main.tile[i, j].frameX == 90)
{
num6 = 0xa5;
}
else
{
num6 = 0x95;
}
}
if (num6 > 0)
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, num6, 1, false);
}
}
Main.tile[i, j].active = false;
if (Main.tileSolid[Main.tile[i, j].type])
{
Main.tile[i, j].lighted = false;
}
Main.tile[i, j].frameX = -1;
Main.tile[i, j].frameY = -1;
Main.tile[i, j].frameNumber = 0;
Main.tile[i, j].type = 0;
SquareTileFrame(i, j, true);
}
}
}
}
}
}
public static void KillWall(int i, int j, bool fail = false)
{
if (((i >= 0) && (j >= 0)) && ((i < Main.maxTilesX) && (j < Main.maxTilesY)))
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].wall > 0)
{
genRand.Next(3);
Main.PlaySound(0, i * 0x10, j * 0x10, 1);
int num = 10;
if (fail)
{
num = 3;
}
for (int k = 0; k < num; k++)
{
int type = 0;
if ((((Main.tile[i, j].wall == 1) || (Main.tile[i, j].wall == 5)) || ((Main.tile[i, j].wall == 6) || (Main.tile[i, j].wall == 7))) || ((Main.tile[i, j].wall == 8) || (Main.tile[i, j].wall == 9)))
{
type = 1;
}
if (Main.tile[i, j].wall == 3)
{
if (genRand.Next(2) == 0)
{
type = 14;
}
else
{
type = 1;
}
}
if (Main.tile[i, j].wall == 4)
{
type = 7;
}
if (Main.tile[i, j].wall == 12)
{
type = 9;
}
if (Main.tile[i, j].wall == 10)
{
type = 10;
}
if (Main.tile[i, j].wall == 11)
{
type = 11;
}
Color newColor = new Color();
Dust.NewDust(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10, type, 0f, 0f, 0, newColor, 1f);
}
if (fail)
{
SquareWallFrame(i, j, true);
}
else
{
int num4 = 0;
if (Main.tile[i, j].wall == 1)
{
num4 = 0x1a;
}
if (Main.tile[i, j].wall == 4)
{
num4 = 0x5d;
}
if (Main.tile[i, j].wall == 5)
{
num4 = 130;
}
if (Main.tile[i, j].wall == 6)
{
num4 = 0x84;
}
if (Main.tile[i, j].wall == 7)
{
num4 = 0x87;
}
if (Main.tile[i, j].wall == 8)
{
num4 = 0x8a;
}
if (Main.tile[i, j].wall == 9)
{
num4 = 140;
}
if (Main.tile[i, j].wall == 10)
{
num4 = 0x8e;
}
if (Main.tile[i, j].wall == 11)
{
num4 = 0x90;
}
if (Main.tile[i, j].wall == 12)
{
num4 = 0x92;
}
if (num4 > 0)
{
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, num4, 1, false);
}
Main.tile[i, j].wall = 0;
SquareWallFrame(i, j, true);
}
}
}
}
public static void Lakinater(int i, int j)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(0x19, 50);
double num6 = num5;
float num7 = genRand.Next(30, 80);
if (genRand.Next(5) == 0)
{
num5 *= 1.5;
num6 *= 1.5;
num7 *= 1.2f;
}
vector.X = i;
vector.Y = j - (num7 * 0.3f);
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = genRand.Next(-20, -10) * 0.1f;
while ((num5 > 0.0) && (num7 > 0f))
{
if ((vector.Y + (num6 * 0.5)) > Main.worldSurface)
{
num7 = 0f;
}
num5 -= genRand.Next(3);
num7--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
float num10 = Math.Abs((float) (k - vector.X));
float num11 = Math.Abs((float) (m - vector.Y));
if (Math.Sqrt((double) ((num10 * num10) + (num11 * num11))) < (num6 * 0.4))
{
if (Main.tile[k, m].active)
{
Main.tile[k, m].liquid = 0xff;
}
Main.tile[k, m].active = false;
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 0.5)
{
vector2.X = 0.5f;
}
if (vector2.X < -0.5)
{
vector2.X = -0.5f;
}
if (vector2.Y > 1.5)
{
vector2.Y = 1.5f;
}
if (vector2.Y < 0.5)
{
vector2.Y = 0.5f;
}
}
}
public static void loadWorld()
{
if (genRand == null)
{
genRand = new Random((int) DateTime.Now.Ticks);
}
using (FileStream stream = new FileStream(Main.worldPathName, FileMode.Open))
{
using (BinaryReader reader = new BinaryReader(stream))
{
try
{
if (reader.ReadInt32() > Main.curRelease)
{
Main.menuMode = 15;
Main.statusText = "Incompatible world file!";
loadFailed = true;
reader.Close();
return;
}
Main.worldName = reader.ReadString();
Main.worldID = reader.ReadInt32();
Main.leftWorld = reader.ReadInt32();
Main.rightWorld = reader.ReadInt32();
Main.topWorld = reader.ReadInt32();
Main.bottomWorld = reader.ReadInt32();
Main.maxTilesY = reader.ReadInt32();
Main.maxTilesX = reader.ReadInt32();
clearWorld();
Main.spawnTileX = reader.ReadInt32();
Main.spawnTileY = reader.ReadInt32();
Main.worldSurface = reader.ReadDouble();
Main.rockLayer = reader.ReadDouble();
tempTime = reader.ReadDouble();
tempDayTime = reader.ReadBoolean();
tempMoonPhase = reader.ReadInt32();
tempBloodMoon = reader.ReadBoolean();
Main.dungeonX = reader.ReadInt32();
Main.dungeonY = reader.ReadInt32();
NPC.downedBoss1 = reader.ReadBoolean();
NPC.downedBoss2 = reader.ReadBoolean();
NPC.downedBoss3 = reader.ReadBoolean();
shadowOrbSmashed = reader.ReadBoolean();
spawnMeteor = reader.ReadBoolean();
shadowOrbCount = reader.ReadByte();
Main.invasionDelay = reader.ReadInt32();
Main.invasionSize = reader.ReadInt32();
Main.invasionType = reader.ReadInt32();
Main.invasionX = reader.ReadDouble();
for (int i = 0; i < Main.maxTilesX; i++)
{
float num3 = ((float) i) / ((float) Main.maxTilesX);
Main.statusText = "Loading world data: " + ((int) ((num3 * 100f) + 1f)) + "%";
for (int n = 0; n < Main.maxTilesY; n++)
{
Main.tile[i, n].active = reader.ReadBoolean();
if (Main.tile[i, n].active)
{
Main.tile[i, n].type = reader.ReadByte();
if (Main.tileFrameImportant[Main.tile[i, n].type])
{
Main.tile[i, n].frameX = reader.ReadInt16();
Main.tile[i, n].frameY = reader.ReadInt16();
}
else
{
Main.tile[i, n].frameX = -1;
Main.tile[i, n].frameY = -1;
}
}
Main.tile[i, n].lighted = reader.ReadBoolean();
if (reader.ReadBoolean())
{
Main.tile[i, n].wall = reader.ReadByte();
}
if (reader.ReadBoolean())
{
Main.tile[i, n].liquid = reader.ReadByte();
Main.tile[i, n].lava = reader.ReadBoolean();
}
}
}
for (int j = 0; j < 0x3e8; j++)
{
if (reader.ReadBoolean())
{
Main.chest[j] = new Chest();
Main.chest[j].x = reader.ReadInt32();
Main.chest[j].y = reader.ReadInt32();
for (int num6 = 0; num6 < Chest.maxItems; num6++)
{
Main.chest[j].item[num6] = new Item();
byte num7 = reader.ReadByte();
if (num7 > 0)
{
string itemName = reader.ReadString();
Main.chest[j].item[num6].SetDefaults(itemName);
Main.chest[j].item[num6].stack = num7;
}
}
}
}
for (int k = 0; k < 0x3e8; k++)
{
if (reader.ReadBoolean())
{
string str2 = reader.ReadString();
int num9 = reader.ReadInt32();
int num10 = reader.ReadInt32();
if (Main.tile[num9, num10].active && (Main.tile[num9, num10].type == 0x37))
{
Main.sign[k] = new Sign();
Main.sign[k].x = num9;
Main.sign[k].y = num10;
Main.sign[k].text = str2;
}
}
}
bool flag = reader.ReadBoolean();
for (int m = 0; flag; m++)
{
Main.npc[m].SetDefaults(reader.ReadString());
Main.npc[m].position.X = reader.ReadSingle();
Main.npc[m].position.Y = reader.ReadSingle();
Main.npc[m].homeless = reader.ReadBoolean();
Main.npc[m].homeTileX = reader.ReadInt32();
Main.npc[m].homeTileY = reader.ReadInt32();
flag = reader.ReadBoolean();
}
reader.Close();
gen = true;
waterLine = Main.maxTilesY;
Liquid.QuickWater(2, -1, -1);
WaterCheck();
int num12 = 0;
Liquid.quickSettle = true;
int num13 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
float num14 = 0f;
while ((Liquid.numLiquid > 0) && (num12 < 0x186a0))
{
num12++;
float num15 = ((float) (num13 - (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer))) / ((float) num13);
if ((Liquid.numLiquid + LiquidBuffer.numLiquidBuffer) > num13)
{
num13 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
}
if (num15 > num14)
{
num14 = num15;
}
else
{
num15 = num14;
}
Main.statusText = "Settling liquids: " + ((int) (((num15 * 100f) / 2f) + 50f)) + "%";
Liquid.UpdateLiquid();
}
Liquid.quickSettle = false;
WaterCheck();
gen = false;
}
catch (Exception exception)
{
Main.menuMode = 15;
Main.statusText = exception.ToString();
loadFailed = true;
try
{
reader.Close();
}
catch
{
}
return;
}
loadFailed = false;
}
}
}
public static void MakeDungeon(int x, int y, int tileType = 0x29, int wallType = 7)
{
int num = genRand.Next(3);
int num2 = genRand.Next(3);
switch (num)
{
case 1:
tileType = 0x2b;
break;
case 2:
tileType = 0x2c;
break;
}
switch (num2)
{
case 1:
wallType = 8;
break;
case 2:
wallType = 9;
break;
}
numDDoors = 0;
numDPlats = 0;
numDRooms = 0;
WorldGen.dungeonX = x;
WorldGen.dungeonY = y;
dMinX = x;
dMaxX = x;
dMinY = y;
dMaxY = y;
dxStrength1 = genRand.Next(0x19, 30);
dyStrength1 = genRand.Next(20, 0x19);
dxStrength2 = genRand.Next(0x23, 50);
dyStrength2 = genRand.Next(10, 15);
float num3 = Main.maxTilesX / 60;
num3 += genRand.Next(0, (int) (num3 / 3f));
float num4 = num3;
int num5 = 5;
DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
while (num3 > 0f)
{
if (WorldGen.dungeonX < dMinX)
{
dMinX = WorldGen.dungeonX;
}
if (WorldGen.dungeonX > dMaxX)
{
dMaxX = WorldGen.dungeonX;
}
if (WorldGen.dungeonY > dMaxY)
{
dMaxY = WorldGen.dungeonY;
}
num3--;
Main.statusText = "Creating dungeon: " + ((int) (((num4 - num3) / num4) * 60f)) + "%";
if (num5 > 0)
{
num5--;
}
if ((num5 == 0) & (genRand.Next(3) == 0))
{
num5 = 5;
if (genRand.Next(2) == 0)
{
int dungeonX = WorldGen.dungeonX;
int dungeonY = WorldGen.dungeonY;
DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType, false);
if (genRand.Next(2) == 0)
{
DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType, false);
}
DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
WorldGen.dungeonX = dungeonX;
WorldGen.dungeonY = dungeonY;
}
else
{
DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
}
}
else
{
DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType, false);
}
}
DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
int num8 = dRoomX[0];
int num9 = dRoomY[0];
for (int i = 0; i < numDRooms; i++)
{
if (dRoomY[i] < num9)
{
num8 = dRoomX[i];
num9 = dRoomY[i];
}
}
WorldGen.dungeonX = num8;
WorldGen.dungeonY = num9;
dEnteranceX = num8;
dSurface = false;
num5 = 5;
while (!dSurface)
{
if (num5 > 0)
{
num5--;
}
if (((num5 == 0) & (genRand.Next(5) == 0)) && (WorldGen.dungeonY > (Main.worldSurface + 50.0)))
{
num5 = 10;
int num11 = WorldGen.dungeonX;
int num12 = WorldGen.dungeonY;
DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType, true);
DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
WorldGen.dungeonX = num11;
WorldGen.dungeonY = num12;
}
DungeonStairs(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
}
DungeonEnt(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType);
Main.statusText = "Creating dungeon: 65%";
for (int j = 0; j < numDRooms; j++)
{
for (int num14 = dRoomL[j]; num14 <= dRoomR[j]; num14++)
{
if (!Main.tile[num14, dRoomT[j] - 1].active)
{
DPlatX[numDPlats] = num14;
DPlatY[numDPlats] = dRoomT[j] - 1;
numDPlats++;
break;
}
}
for (int num15 = dRoomL[j]; num15 <= dRoomR[j]; num15++)
{
if (!Main.tile[num15, dRoomB[j] + 1].active)
{
DPlatX[numDPlats] = num15;
DPlatY[numDPlats] = dRoomB[j] + 1;
numDPlats++;
break;
}
}
for (int num16 = dRoomT[j]; num16 <= dRoomB[j]; num16++)
{
if (!Main.tile[dRoomL[j] - 1, num16].active)
{
DDoorX[numDDoors] = dRoomL[j] - 1;
DDoorY[numDDoors] = num16;
DDoorPos[numDDoors] = -1;
numDDoors++;
break;
}
}
for (int num17 = dRoomT[j]; num17 <= dRoomB[j]; num17++)
{
if (!Main.tile[dRoomR[j] + 1, num17].active)
{
DDoorX[numDDoors] = dRoomR[j] + 1;
DDoorY[numDDoors] = num17;
DDoorPos[numDDoors] = 1;
numDDoors++;
break;
}
}
}
Main.statusText = "Creating dungeon: 70%";
int num18 = 0;
int num19 = 0x3e8;
int num20 = 0;
while (num20 < (Main.maxTilesX / 0x7d))
{
num18++;
int num21 = genRand.Next(dMinX, dMaxX);
int num22 = genRand.Next(((int) Main.worldSurface) + 0x19, dMaxY);
int num23 = num21;
if ((Main.tile[num21, num22].wall == wallType) && !Main.tile[num21, num22].active)
{
int num24 = 1;
if (genRand.Next(2) == 0)
{
num24 = -1;
}
while (!Main.tile[num21, num22].active)
{
num22 += num24;
}
if ((Main.tile[num21 - 1, num22].active && Main.tile[num21 + 1, num22].active) && (!Main.tile[num21 - 1, num22 - num24].active && !Main.tile[num21 + 1, num22 - num24].active))
{
num20++;
int num25 = genRand.Next(5, 10);
while ((Main.tile[num21 - 1, num22].active && Main.tile[num21, num22 + num24].active) && ((Main.tile[num21, num22].active && !Main.tile[num21, num22 - num24].active) && (num25 > 0)))
{
Main.tile[num21, num22].type = 0x30;
if (!Main.tile[num21 - 1, num22 - num24].active && !Main.tile[num21 + 1, num22 - num24].active)
{
Main.tile[num21, num22 - num24].type = 0x30;
Main.tile[num21, num22 - num24].active = true;
}
num21--;
num25--;
}
num25 = genRand.Next(5, 10);
num21 = num23 + 1;
while ((Main.tile[num21 + 1, num22].active && Main.tile[num21, num22 + num24].active) && ((Main.tile[num21, num22].active && !Main.tile[num21, num22 - num24].active) && (num25 > 0)))
{
Main.tile[num21, num22].type = 0x30;
if (!Main.tile[num21 - 1, num22 - num24].active && !Main.tile[num21 + 1, num22 - num24].active)
{
Main.tile[num21, num22 - num24].type = 0x30;
Main.tile[num21, num22 - num24].active = true;
}
num21++;
num25--;
}
}
}
if (num18 > num19)
{
num18 = 0;
num20++;
}
}
num18 = 0;
num19 = 0x3e8;
num20 = 0;
Main.statusText = "Creating dungeon: 75%";
while (num20 < (Main.maxTilesX / 0x7d))
{
num18++;
int num26 = genRand.Next(dMinX, dMaxX);
int num27 = genRand.Next(((int) Main.worldSurface) + 0x19, dMaxY);
int num28 = num27;
if ((Main.tile[num26, num27].wall == wallType) && !Main.tile[num26, num27].active)
{
int num29 = 1;
if (genRand.Next(2) == 0)
{
num29 = -1;
}
while (((num26 > 5) && (num26 < (Main.maxTilesX - 5))) && !Main.tile[num26, num27].active)
{
num26 += num29;
}
if ((Main.tile[num26, num27 - 1].active && Main.tile[num26, num27 + 1].active) && (!Main.tile[num26 - num29, num27 - 1].active && !Main.tile[num26 - num29, num27 + 1].active))
{
num20++;
int num30 = genRand.Next(5, 10);
while ((Main.tile[num26, num27 - 1].active && Main.tile[num26 + num29, num27].active) && ((Main.tile[num26, num27].active && !Main.tile[num26 - num29, num27].active) && (num30 > 0)))
{
Main.tile[num26, num27].type = 0x30;
if (!Main.tile[num26 - num29, num27 - 1].active && !Main.tile[num26 - num29, num27 + 1].active)
{
Main.tile[num26 - num29, num27].type = 0x30;
Main.tile[num26 - num29, num27].active = true;
}
num27--;
num30--;
}
num30 = genRand.Next(5, 10);
num27 = num28 + 1;
while ((Main.tile[num26, num27 + 1].active && Main.tile[num26 + num29, num27].active) && ((Main.tile[num26, num27].active && !Main.tile[num26 - num29, num27].active) && (num30 > 0)))
{
Main.tile[num26, num27].type = 0x30;
if (!Main.tile[num26 - num29, num27 - 1].active && !Main.tile[num26 - num29, num27 + 1].active)
{
Main.tile[num26 - num29, num27].type = 0x30;
Main.tile[num26 - num29, num27].active = true;
}
num27++;
num30--;
}
}
}
if (num18 > num19)
{
num18 = 0;
num20++;
}
}
Main.statusText = "Creating dungeon: 80%";
for (int k = 0; k < numDDoors; k++)
{
int num32 = DDoorX[k] - 10;
int num33 = DDoorX[k] + 10;
int num34 = 100;
int num35 = 0;
int num36 = 0;
int num37 = 0;
for (int num38 = num32; num38 < num33; num38++)
{
bool flag = true;
int num39 = DDoorY[k];
while (!Main.tile[num38, num39].active)
{
num39--;
}
if (!Main.tileDungeon[Main.tile[num38, num39].type])
{
flag = false;
}
num36 = num39;
num39 = DDoorY[k];
while (!Main.tile[num38, num39].active)
{
num39++;
}
if (!Main.tileDungeon[Main.tile[num38, num39].type])
{
flag = false;
}
num37 = num39;
if ((num37 - num36) >= 3)
{
int num40 = num38 - 20;
int num41 = num38 + 20;
int num42 = num37 - 10;
int num43 = num37 + 10;
for (int num44 = num40; num44 < num41; num44++)
{
for (int num45 = num42; num45 < num43; num45++)
{
if (Main.tile[num44, num45].active && (Main.tile[num44, num45].type == 10))
{
flag = false;
break;
}
}
}
if (flag)
{
for (int num46 = num37 - 3; num46 < num37; num46++)
{
for (int num47 = num38 - 3; num47 <= (num38 + 3); num47++)
{
if (Main.tile[num47, num46].active)
{
flag = false;
break;
}
}
}
}
if (flag && ((num37 - num36) < 20))
{
bool flag2 = false;
if ((DDoorPos[k] == 0) && ((num37 - num36) < num34))
{
flag2 = true;
}
if ((DDoorPos[k] == -1) && (num38 > num35))
{
flag2 = true;
}
if ((DDoorPos[k] == 1) && ((num38 < num35) || (num35 == 0)))
{
flag2 = true;
}
if (flag2)
{
num35 = num38;
num34 = num37 - num36;
}
}
}
}
if (num34 < 20)
{
int num48 = num35;
int num49 = DDoorY[k];
int num50 = num49;
while (!Main.tile[num48, num49].active)
{
Main.tile[num48, num49].active = false;
num49++;
}
while (!Main.tile[num48, num50].active)
{
num50--;
}
num49--;
num50++;
for (int num51 = num50; num51 < (num49 - 2); num51++)
{
Main.tile[num48, num51].active = true;
Main.tile[num48, num51].type = (byte) tileType;
}
PlaceTile(num48, num49, 10, true, false, -1);
num48--;
int num52 = num49 - 3;
while (!Main.tile[num48, num52].active)
{
num52--;
}
if (((num49 - num52) < ((num49 - num50) + 5)) && Main.tileDungeon[Main.tile[num48, num52].type])
{
for (int num53 = (num49 - 4) - genRand.Next(3); num53 > num52; num53--)
{
Main.tile[num48, num53].active = true;
Main.tile[num48, num53].type = (byte) tileType;
}
}
num48 += 2;
num52 = num49 - 3;
while (!Main.tile[num48, num52].active)
{
num52--;
}
if (((num49 - num52) < ((num49 - num50) + 5)) && Main.tileDungeon[Main.tile[num48, num52].type])
{
for (int num54 = (num49 - 4) - genRand.Next(3); num54 > num52; num54--)
{
Main.tile[num48, num54].active = true;
Main.tile[num48, num54].type = (byte) tileType;
}
}
num49++;
num48--;
Main.tile[num48 - 1, num49].active = true;
Main.tile[num48 - 1, num49].type = (byte) tileType;
Main.tile[num48 + 1, num49].active = true;
Main.tile[num48 + 1, num49].type = (byte) tileType;
}
}
Main.statusText = "Creating dungeon: 85%";
for (int m = 0; m < numDPlats; m++)
{
int num56 = DPlatX[m];
int num57 = DPlatY[m];
int maxTilesX = Main.maxTilesX;
int num59 = 10;
for (int num60 = num57 - 5; num60 <= (num57 + 5); num60++)
{
int num61 = num56;
int num62 = num56;
bool flag3 = false;
if (!Main.tile[num61, num60].active)
{
goto Label_10D8;
}
flag3 = true;
goto Label_1128;
Label_10B4:
num61--;
if (!Main.tileDungeon[Main.tile[num61, num60].type])
{
flag3 = true;
}
Label_10D8:
if (!Main.tile[num61, num60].active)
{
goto Label_10B4;
}
while (!Main.tile[num62, num60].active)
{
num62++;
if (!Main.tileDungeon[Main.tile[num62, num60].type])
{
flag3 = true;
}
}
Label_1128:
if (!flag3 && ((num62 - num61) <= num59))
{
bool flag4 = true;
int num63 = (num56 - (num59 / 2)) - 2;
int num64 = (num56 + (num59 / 2)) + 2;
int num65 = num60 - 5;
int num66 = num60 + 5;
for (int num67 = num63; num67 <= num64; num67++)
{
for (int num68 = num65; num68 <= num66; num68++)
{
if (Main.tile[num67, num68].active && (Main.tile[num67, num68].type == 0x13))
{
flag4 = false;
break;
}
}
}
for (int num69 = num60 + 3; num69 >= (num60 - 5); num69--)
{
if (Main.tile[num56, num69].active)
{
flag4 = false;
break;
}
}
if (flag4)
{
maxTilesX = num60;
break;
}
}
}
if ((maxTilesX > (num57 - 10)) && (maxTilesX < (num57 + 10)))
{
int num70 = num56;
int num71 = maxTilesX;
int num72 = num56 + 1;
while (!Main.tile[num70, num71].active)
{
Main.tile[num70, num71].active = true;
Main.tile[num70, num71].type = 0x13;
num70--;
}
while (!Main.tile[num72, num71].active)
{
Main.tile[num72, num71].active = true;
Main.tile[num72, num71].type = 0x13;
num72++;
}
}
}
Main.statusText = "Creating dungeon: 90%";
num18 = 0;
num19 = 0x3e8;
num20 = 0;
while (num20 < (Main.maxTilesX / 20))
{
num18++;
int num73 = genRand.Next(dMinX, dMaxX);
int num74 = genRand.Next(dMinY, dMaxY);
bool flag5 = true;
if ((Main.tile[num73, num74].wall == wallType) && !Main.tile[num73, num74].active)
{
int num75 = 1;
if (genRand.Next(2) == 0)
{
num75 = -1;
}
while (flag5 && !Main.tile[num73, num74].active)
{
num73 -= num75;
if ((num73 < 5) || (num73 > (Main.maxTilesX - 5)))
{
flag5 = false;
}
else if (Main.tile[num73, num74].active && !Main.tileDungeon[Main.tile[num73, num74].type])
{
flag5 = false;
}
}
if (((flag5 && Main.tile[num73, num74].active) && (Main.tileDungeon[Main.tile[num73, num74].type] && Main.tile[num73, num74 - 1].active)) && ((Main.tileDungeon[Main.tile[num73, num74 - 1].type] && Main.tile[num73, num74 + 1].active) && Main.tileDungeon[Main.tile[num73, num74 + 1].type]))
{
num73 += num75;
for (int num76 = num73 - 3; num76 <= (num73 + 3); num76++)
{
for (int num77 = num74 - 3; num77 <= (num74 + 3); num77++)
{
if (Main.tile[num76, num77].active && (Main.tile[num76, num77].type == 0x13))
{
flag5 = false;
break;
}
}
}
if (flag5 && ((!Main.tile[num73, num74 - 1].active & !Main.tile[num73, num74 - 2].active) & !Main.tile[num73, num74 - 3].active))
{
int num78 = num73;
int num79 = num73;
while (((num78 > dMinX) && (num78 < dMaxX)) && ((!Main.tile[num78, num74].active && !Main.tile[num78, num74 - 1].active) && !Main.tile[num78, num74 + 1].active))
{
num78 += num75;
}
num78 = Math.Abs((int) (num73 - num78));
bool flag6 = false;
if (genRand.Next(2) == 0)
{
flag6 = true;
}
if (num78 > 5)
{
for (int num80 = genRand.Next(1, 4); num80 > 0; num80--)
{
Main.tile[num73, num74].active = true;
Main.tile[num73, num74].type = 0x13;
if (flag6)
{
PlaceTile(num73, num74 - 1, 50, true, false, -1);
if ((genRand.Next(50) == 0) && (Main.tile[num73, num74 - 1].type == 50))
{
Main.tile[num73, num74 - 1].frameX = 90;
}
}
num73 += num75;
}
num18 = 0;
num20++;
if (!flag6 && (genRand.Next(2) == 0))
{
num73 = num79;
num74--;
int type = genRand.Next(2);
switch (type)
{
case 0:
type = 13;
break;
case 1:
type = 0x31;
break;
}
PlaceTile(num73, num74, type, true, false, -1);
if (Main.tile[num73, num74].type == 13)
{
if (genRand.Next(2) == 0)
{
Main.tile[num73, num74].frameX = 0x12;
}
else
{
Main.tile[num73, num74].frameX = 0x24;
}
}
}
}
}
}
}
if (num18 > num19)
{
num18 = 0;
num20++;
}
}
Main.statusText = "Creating dungeon: 95%";
for (int n = 0; n < numDRooms; n++)
{
int num83 = 0;
while (num83 < 0x3e8)
{
int num84 = (int) (dRoomSize[n] * 0.4);
int num85 = dRoomX[n] + genRand.Next(-num84, num84 + 1);
int num86 = dRoomY[n] + genRand.Next(-num84, num84 + 1);
int contain = 0;
switch (n)
{
case 0:
contain = 0x71;
break;
case 1:
contain = 0x9b;
break;
case 2:
contain = 0x9c;
break;
case 3:
contain = 0x9d;
break;
case 4:
contain = 0xa3;
break;
case 5:
contain = 0xa4;
break;
}
if ((contain == 0) && (genRand.Next(2) == 0))
{
num83 = 0x3e8;
}
else
{
if (AddBuriedChest(num85, num86, contain))
{
num83 += 0x3e8;
}
num83++;
}
}
}
dMinX -= 0x19;
dMaxX += 0x19;
dMinY -= 0x19;
dMaxY += 0x19;
if (dMinX < 0)
{
dMinX = 0;
}
if (dMaxX > Main.maxTilesX)
{
dMaxX = Main.maxTilesX;
}
if (dMinY < 0)
{
dMinY = 0;
}
if (dMaxY > Main.maxTilesY)
{
dMaxY = Main.maxTilesY;
}
num18 = 0;
num19 = 0x3e8;
num20 = 0;
while (num20 < (Main.maxTilesX / 20))
{
num18++;
int num89 = genRand.Next(dMinX, dMaxX);
int num90 = genRand.Next(dMinY, dMaxY);
if (Main.tile[num89, num90].wall == wallType)
{
for (int num91 = num90; num91 > dMinY; num91--)
{
if (Main.tile[num89, num91 - 1].active && (Main.tile[num89, num91 - 1].type == tileType))
{
bool flag7 = false;
for (int num92 = num89 - 15; num92 < (num89 + 15); num92++)
{
for (int num93 = num91 - 15; num93 < (num91 + 15); num93++)
{
if ((((num92 > 0) && (num92 < Main.maxTilesX)) && ((num93 > 0) && (num93 < Main.maxTilesY))) && (Main.tile[num92, num93].type == 0x2a))
{
flag7 = true;
break;
}
}
}
if ((Main.tile[num89 - 1, num91].active || Main.tile[num89 + 1, num91].active) || ((Main.tile[num89 - 1, num91 + 1].active || Main.tile[num89 + 1, num91 + 1].active) || Main.tile[num89, num91 + 2].active))
{
flag7 = true;
}
if (!flag7)
{
Place1x2Top(num89, num91, 0x2a);
if (Main.tile[num89, num91].type == 0x2a)
{
num18 = 0;
num20++;
}
}
break;
}
}
}
if (num18 > num19)
{
num20++;
num18 = 0;
}
}
}
public static bool meteor(int i, int j)
{
if ((i < 50) || (i > (Main.maxTilesX - 50)))
{
return false;
}
if ((j < 50) || (j > (Main.maxTilesY - 50)))
{
return false;
}
int num = 0x19;
Rectangle rectangle = new Rectangle((i - num) * 0x10, (j - num) * 0x10, (num * 2) * 0x10, (num * 2) * 0x10);
for (int k = 0; k < 8; k++)
{
if (Main.player[k].active)
{
Rectangle rectangle2 = new Rectangle(((((int) Main.player[k].position.X) + (Main.player[k].width / 2)) - (Main.screenWidth / 2)) - NPC.safeRangeX, ((((int) Main.player[k].position.Y) + (Main.player[k].height / 2)) - (Main.screenHeight / 2)) - NPC.safeRangeY, Main.screenWidth + (NPC.safeRangeX * 2), Main.screenHeight + (NPC.safeRangeY * 2));
if (rectangle.Intersects(rectangle2))
{
return false;
}
}
}
for (int m = 0; m < 0x3e8; m++)
{
if (Main.npc[m].active)
{
Rectangle rectangle3 = new Rectangle((int) Main.npc[m].position.X, (int) Main.npc[m].position.Y, Main.npc[m].width, Main.npc[m].height);
if (rectangle.Intersects(rectangle3))
{
return false;
}
}
}
for (int n = i - num; n < (i + num); n++)
{
for (int num5 = j - num; num5 < (j + num); num5++)
{
if (Main.tile[n, num5].active && (Main.tile[n, num5].type == 0x15))
{
return false;
}
}
}
stopDrops = true;
num = 15;
for (int num6 = i - num; num6 < (i + num); num6++)
{
for (int num7 = j - num; num7 < (j + num); num7++)
{
if ((num7 > ((j + Main.rand.Next(-2, 3)) - 5)) && ((Math.Abs((int) (i - num6)) + Math.Abs((int) (j - num7))) < ((num * 1.5) + Main.rand.Next(-5, 5))))
{
if (!Main.tileSolid[Main.tile[num6, num7].type])
{
Main.tile[num6, num7].active = false;
}
Main.tile[num6, num7].type = 0x25;
}
}
}
num = 10;
for (int num8 = i - num; num8 < (i + num); num8++)
{
for (int num9 = j - num; num9 < (j + num); num9++)
{
if ((num9 > ((j + Main.rand.Next(-2, 3)) - 5)) && ((Math.Abs((int) (i - num8)) + Math.Abs((int) (j - num9))) < (num + Main.rand.Next(-3, 4))))
{
Main.tile[num8, num9].active = false;
}
}
}
num = 0x10;
for (int num10 = i - num; num10 < (i + num); num10++)
{
for (int num11 = j - num; num11 < (j + num); num11++)
{
if ((Main.tile[num10, num11].type == 5) || (Main.tile[num10, num11].type == 0x20))
{
KillTile(num10, num11, false, false, false);
}
SquareTileFrame(num10, num11, true);
SquareWallFrame(num10, num11, true);
}
}
num = 0x17;
for (int num12 = i - num; num12 < (i + num); num12++)
{
for (int num13 = j - num; num13 < (j + num); num13++)
{
if ((Main.tile[num12, num13].active && (Main.rand.Next(10) == 0)) && ((Math.Abs((int) (i - num12)) + Math.Abs((int) (j - num13))) < (num * 1.3)))
{
if ((Main.tile[num12, num13].type == 5) || (Main.tile[num12, num13].type == 0x20))
{
KillTile(num12, num13, false, false, false);
}
Main.tile[num12, num13].type = 0x25;
SquareTileFrame(num12, num13, true);
}
}
}
stopDrops = false;
if (Main.netMode == 0)
{
Main.NewText("A meteorite has landed!", 50, 0xff, 130);
}
else if (Main.netMode == 2)
{
NetMessage.SendData(0x19, -1, -1, "A meteorite has landed!", 8, 50f, 255f, 130f);
}
if (Main.netMode != 1)
{
NetMessage.SendTileSquare(-1, i, j, 30);
}
return true;
}
public static void Mountinater(int i, int j)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(80, 120);
double num6 = num5;
float num7 = genRand.Next(40, 0x37);
vector.X = i;
vector.Y = j + (num7 / 2f);
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = genRand.Next(-20, -10) * 0.1f;
while ((num5 > 0.0) && (num7 > 0f))
{
num5 -= genRand.Next(4);
num7--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
float num10 = Math.Abs((float) (k - vector.X));
float num11 = Math.Abs((float) (m - vector.Y));
if ((Math.Sqrt((double) ((num10 * num10) + (num11 * num11))) < (num6 * 0.4)) && !Main.tile[k, m].active)
{
Main.tile[k, m].active = true;
Main.tile[k, m].type = 0;
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 0.5)
{
vector2.X = 0.5f;
}
if (vector2.X < -0.5)
{
vector2.X = -0.5f;
}
if (vector2.Y > -0.5)
{
vector2.Y = -0.5f;
}
if (vector2.Y < -1.5)
{
vector2.Y = -1.5f;
}
}
}
public static bool OpenDoor(int i, int j, int direction)
{
int num3;
int num = 0;
if (Main.tile[i, j - 1] == null)
{
Main.tile[i, j - 1] = new Tile();
}
if (Main.tile[i, j - 2] == null)
{
Main.tile[i, j - 2] = new Tile();
}
if (Main.tile[i, j + 1] == null)
{
Main.tile[i, j + 1] = new Tile();
}
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if ((Main.tile[i, j - 1].frameY == 0) && (Main.tile[i, j - 1].type == Main.tile[i, j].type))
{
num = j - 1;
}
else if ((Main.tile[i, j - 2].frameY == 0) && (Main.tile[i, j - 2].type == Main.tile[i, j].type))
{
num = j - 2;
}
else if ((Main.tile[i, j + 1].frameY == 0) && (Main.tile[i, j + 1].type == Main.tile[i, j].type))
{
num = j + 1;
}
else
{
num = j;
}
int num2 = i;
short num4 = 0;
if (direction == -1)
{
num2 = i - 1;
num4 = 0x24;
num3 = i - 1;
}
else
{
num2 = i;
num3 = i + 1;
}
bool flag = true;
for (int k = num; k < (num + 3); k++)
{
if (Main.tile[num3, k] == null)
{
Main.tile[num3, k] = new Tile();
}
if (Main.tile[num3, k].active)
{
if ((((Main.tile[num3, k].type == 3) || (Main.tile[num3, k].type == 0x18)) || ((Main.tile[num3, k].type == 0x34) || (Main.tile[num3, k].type == 0x3d))) || (((Main.tile[num3, k].type == 0x3e) || (Main.tile[num3, k].type == 0x45)) || (((Main.tile[num3, k].type == 0x47) || (Main.tile[num3, k].type == 0x49)) || (Main.tile[num3, k].type == 0x4a))))
{
KillTile(num3, k, false, false, false);
}
else
{
flag = false;
break;
}
}
}
if (flag)
{
Main.PlaySound(8, i * 0x10, j * 0x10, 1);
Main.tile[num2, num].active = true;
Main.tile[num2, num].type = 11;
Main.tile[num2, num].frameY = 0;
Main.tile[num2, num].frameX = num4;
if (Main.tile[num2 + 1, num] == null)
{
Main.tile[num2 + 1, num] = new Tile();
}
Main.tile[num2 + 1, num].active = true;
Main.tile[num2 + 1, num].type = 11;
Main.tile[num2 + 1, num].frameY = 0;
Main.tile[num2 + 1, num].frameX = (short) (num4 + 0x12);
if (Main.tile[num2, num + 1] == null)
{
Main.tile[num2, num + 1] = new Tile();
}
Main.tile[num2, num + 1].active = true;
Main.tile[num2, num + 1].type = 11;
Main.tile[num2, num + 1].frameY = 0x12;
Main.tile[num2, num + 1].frameX = num4;
if (Main.tile[num2 + 1, num + 1] == null)
{
Main.tile[num2 + 1, num + 1] = new Tile();
}
Main.tile[num2 + 1, num + 1].active = true;
Main.tile[num2 + 1, num + 1].type = 11;
Main.tile[num2 + 1, num + 1].frameY = 0x12;
Main.tile[num2 + 1, num + 1].frameX = (short) (num4 + 0x12);
if (Main.tile[num2, num + 2] == null)
{
Main.tile[num2, num + 2] = new Tile();
}
Main.tile[num2, num + 2].active = true;
Main.tile[num2, num + 2].type = 11;
Main.tile[num2, num + 2].frameY = 0x24;
Main.tile[num2, num + 2].frameX = num4;
if (Main.tile[num2 + 1, num + 2] == null)
{
Main.tile[num2 + 1, num + 2] = new Tile();
}
Main.tile[num2 + 1, num + 2].active = true;
Main.tile[num2 + 1, num + 2].type = 11;
Main.tile[num2 + 1, num + 2].frameY = 0x24;
Main.tile[num2 + 1, num + 2].frameX = (short) (num4 + 0x12);
for (int m = num2 - 1; m <= (num2 + 2); m++)
{
for (int n = num - 1; n <= (num + 2); n++)
{
TileFrame(m, n, false, false);
}
}
}
return flag;
}
public static void Place1x2(int x, int y, int type)
{
short num = 0;
if (type == 20)
{
num = (short) (genRand.Next(3) * 0x12);
}
if (Main.tile[x, y - 1] == null)
{
Main.tile[x, y - 1] = new Tile();
}
if (Main.tile[x, y + 1] == null)
{
Main.tile[x, y + 1] = new Tile();
}
if ((Main.tile[x, y + 1].active && Main.tileSolid[Main.tile[x, y + 1].type]) && !Main.tile[x, y - 1].active)
{
Main.tile[x, y - 1].active = true;
Main.tile[x, y - 1].frameY = 0;
Main.tile[x, y - 1].frameX = num;
Main.tile[x, y - 1].type = (byte) type;
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0x12;
Main.tile[x, y].frameX = num;
Main.tile[x, y].type = (byte) type;
}
}
public static void Place1x2Top(int x, int y, int type)
{
short num = 0;
if (Main.tile[x, y - 1] == null)
{
Main.tile[x, y - 1] = new Tile();
}
if (Main.tile[x, y + 1] == null)
{
Main.tile[x, y + 1] = new Tile();
}
if ((Main.tile[x, y - 1].active && Main.tileSolid[Main.tile[x, y - 1].type]) && (!Main.tileSolidTop[Main.tile[x, y - 1].type] && !Main.tile[x, y + 1].active))
{
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0;
Main.tile[x, y].frameX = num;
Main.tile[x, y].type = (byte) type;
Main.tile[x, y + 1].active = true;
Main.tile[x, y + 1].frameY = 0x12;
Main.tile[x, y + 1].frameX = num;
Main.tile[x, y + 1].type = (byte) type;
}
}
public static void Place2x1(int x, int y, int type)
{
if (Main.tile[x, y] == null)
{
Main.tile[x, y] = new Tile();
}
if (Main.tile[x + 1, y] == null)
{
Main.tile[x + 1, y] = new Tile();
}
if (Main.tile[x, y + 1] == null)
{
Main.tile[x, y + 1] = new Tile();
}
if (Main.tile[x + 1, y + 1] == null)
{
Main.tile[x + 1, y + 1] = new Tile();
}
bool flag = false;
if ((((type != 0x1d) && Main.tile[x, y + 1].active) && (Main.tile[x + 1, y + 1].active && Main.tileSolid[Main.tile[x, y + 1].type])) && ((Main.tileSolid[Main.tile[x + 1, y + 1].type] && !Main.tile[x, y].active) && !Main.tile[x + 1, y].active))
{
flag = true;
}
else if ((((type == 0x1d) && Main.tile[x, y + 1].active) && (Main.tile[x + 1, y + 1].active && Main.tileTable[Main.tile[x, y + 1].type])) && ((Main.tileTable[Main.tile[x + 1, y + 1].type] && !Main.tile[x, y].active) && !Main.tile[x + 1, y].active))
{
flag = true;
}
if (flag)
{
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0;
Main.tile[x, y].frameX = 0;
Main.tile[x, y].type = (byte) type;
Main.tile[x + 1, y].active = true;
Main.tile[x + 1, y].frameY = 0;
Main.tile[x + 1, y].frameX = 0x12;
Main.tile[x + 1, y].type = (byte) type;
}
}
public static void Place3x2(int x, int y, int type)
{
if (((x >= 5) && (x <= (Main.maxTilesX - 5))) && ((y >= 5) && (y <= (Main.maxTilesY - 5))))
{
bool flag = true;
for (int i = x - 1; i < (x + 2); i++)
{
for (int j = y - 1; j < (y + 1); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active)
{
flag = false;
}
}
if (Main.tile[i, y + 1] == null)
{
Main.tile[i, y + 1] = new Tile();
}
if (!Main.tile[i, y + 1].active || !Main.tileSolid[Main.tile[i, y + 1].type])
{
flag = false;
}
}
if (flag)
{
Main.tile[x - 1, y - 1].active = true;
Main.tile[x - 1, y - 1].frameY = 0;
Main.tile[x - 1, y - 1].frameX = 0;
Main.tile[x - 1, y - 1].type = (byte) type;
Main.tile[x, y - 1].active = true;
Main.tile[x, y - 1].frameY = 0;
Main.tile[x, y - 1].frameX = 0x12;
Main.tile[x, y - 1].type = (byte) type;
Main.tile[x + 1, y - 1].active = true;
Main.tile[x + 1, y - 1].frameY = 0;
Main.tile[x + 1, y - 1].frameX = 0x24;
Main.tile[x + 1, y - 1].type = (byte) type;
Main.tile[x - 1, y].active = true;
Main.tile[x - 1, y].frameY = 0x12;
Main.tile[x - 1, y].frameX = 0;
Main.tile[x - 1, y].type = (byte) type;
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0x12;
Main.tile[x, y].frameX = 0x12;
Main.tile[x, y].type = (byte) type;
Main.tile[x + 1, y].active = true;
Main.tile[x + 1, y].frameY = 0x12;
Main.tile[x + 1, y].frameX = 0x24;
Main.tile[x + 1, y].type = (byte) type;
}
}
}
public static void Place3x3(int x, int y, int type)
{
bool flag = true;
for (int i = x - 1; i < (x + 2); i++)
{
for (int j = y; j < (y + 3); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active)
{
flag = false;
}
}
}
if (Main.tile[x, y - 1] == null)
{
Main.tile[x, y - 1] = new Tile();
}
if ((!Main.tile[x, y - 1].active || !Main.tileSolid[Main.tile[x, y - 1].type]) || Main.tileSolidTop[Main.tile[x, y - 1].type])
{
flag = false;
}
if (flag)
{
Main.tile[x - 1, y].active = true;
Main.tile[x - 1, y].frameY = 0;
Main.tile[x - 1, y].frameX = 0;
Main.tile[x - 1, y].type = (byte) type;
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0;
Main.tile[x, y].frameX = 0x12;
Main.tile[x, y].type = (byte) type;
Main.tile[x + 1, y].active = true;
Main.tile[x + 1, y].frameY = 0;
Main.tile[x + 1, y].frameX = 0x24;
Main.tile[x + 1, y].type = (byte) type;
Main.tile[x - 1, y + 1].active = true;
Main.tile[x - 1, y + 1].frameY = 0x12;
Main.tile[x - 1, y + 1].frameX = 0;
Main.tile[x - 1, y + 1].type = (byte) type;
Main.tile[x, y + 1].active = true;
Main.tile[x, y + 1].frameY = 0x12;
Main.tile[x, y + 1].frameX = 0x12;
Main.tile[x, y + 1].type = (byte) type;
Main.tile[x + 1, y + 1].active = true;
Main.tile[x + 1, y + 1].frameY = 0x12;
Main.tile[x + 1, y + 1].frameX = 0x24;
Main.tile[x + 1, y + 1].type = (byte) type;
Main.tile[x - 1, y + 2].active = true;
Main.tile[x - 1, y + 2].frameY = 0x24;
Main.tile[x - 1, y + 2].frameX = 0;
Main.tile[x - 1, y + 2].type = (byte) type;
Main.tile[x, y + 2].active = true;
Main.tile[x, y + 2].frameY = 0x24;
Main.tile[x, y + 2].frameX = 0x12;
Main.tile[x, y + 2].type = (byte) type;
Main.tile[x + 1, y + 2].active = true;
Main.tile[x + 1, y + 2].frameY = 0x24;
Main.tile[x + 1, y + 2].frameX = 0x24;
Main.tile[x + 1, y + 2].type = (byte) type;
}
}
public static void Place4x2(int x, int y, int type, int direction = -1)
{
if (((x >= 5) && (x <= (Main.maxTilesX - 5))) && ((y >= 5) && (y <= (Main.maxTilesY - 5))))
{
bool flag = true;
for (int i = x - 1; i < (x + 3); i++)
{
for (int j = y - 1; j < (y + 1); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active)
{
flag = false;
}
}
if (Main.tile[i, y + 1] == null)
{
Main.tile[i, y + 1] = new Tile();
}
if (!Main.tile[i, y + 1].active || !Main.tileSolid[Main.tile[i, y + 1].type])
{
flag = false;
}
}
short num3 = 0;
if (direction == 1)
{
num3 = 0x48;
}
if (flag)
{
Main.tile[x - 1, y - 1].active = true;
Main.tile[x - 1, y - 1].frameY = 0;
Main.tile[x - 1, y - 1].frameX = num3;
Main.tile[x - 1, y - 1].type = (byte) type;
Main.tile[x, y - 1].active = true;
Main.tile[x, y - 1].frameY = 0;
Main.tile[x, y - 1].frameX = (short) (0x12 + num3);
Main.tile[x, y - 1].type = (byte) type;
Main.tile[x + 1, y - 1].active = true;
Main.tile[x + 1, y - 1].frameY = 0;
Main.tile[x + 1, y - 1].frameX = (short) (0x24 + num3);
Main.tile[x + 1, y - 1].type = (byte) type;
Main.tile[x + 2, y - 1].active = true;
Main.tile[x + 2, y - 1].frameY = 0;
Main.tile[x + 2, y - 1].frameX = (short) (0x36 + num3);
Main.tile[x + 2, y - 1].type = (byte) type;
Main.tile[x - 1, y].active = true;
Main.tile[x - 1, y].frameY = 0x12;
Main.tile[x - 1, y].frameX = num3;
Main.tile[x - 1, y].type = (byte) type;
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0x12;
Main.tile[x, y].frameX = (short) (0x12 + num3);
Main.tile[x, y].type = (byte) type;
Main.tile[x + 1, y].active = true;
Main.tile[x + 1, y].frameY = 0x12;
Main.tile[x + 1, y].frameX = (short) (0x24 + num3);
Main.tile[x + 1, y].type = (byte) type;
Main.tile[x + 2, y].active = true;
Main.tile[x + 2, y].frameY = 0x12;
Main.tile[x + 2, y].frameX = (short) (0x36 + num3);
Main.tile[x + 2, y].type = (byte) type;
}
}
}
public static int PlaceChest(int x, int y, int type = 0x15)
{
bool flag = true;
int num = -1;
for (int i = x; i < (x + 2); i++)
{
for (int j = y - 1; j < (y + 1); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active)
{
flag = false;
}
if (Main.tile[i, j].lava)
{
flag = false;
}
}
if (Main.tile[i, y + 1] == null)
{
Main.tile[i, y + 1] = new Tile();
}
if (!Main.tile[i, y + 1].active || !Main.tileSolid[Main.tile[i, y + 1].type])
{
flag = false;
}
}
if (flag)
{
num = Chest.CreateChest(x, y - 1);
if (num == -1)
{
flag = false;
}
}
if (flag)
{
Main.tile[x, y - 1].active = true;
Main.tile[x, y - 1].frameY = 0;
Main.tile[x, y - 1].frameX = 0;
Main.tile[x, y - 1].type = (byte) type;
Main.tile[x + 1, y - 1].active = true;
Main.tile[x + 1, y - 1].frameY = 0;
Main.tile[x + 1, y - 1].frameX = 0x12;
Main.tile[x + 1, y - 1].type = (byte) type;
Main.tile[x, y].active = true;
Main.tile[x, y].frameY = 0x12;
Main.tile[x, y].frameX = 0;
Main.tile[x, y].type = (byte) type;
Main.tile[x + 1, y].active = true;
Main.tile[x + 1, y].frameY = 0x12;
Main.tile[x + 1, y].frameX = 0x12;
Main.tile[x + 1, y].type = (byte) type;
}
return num;
}
public static bool PlaceDoor(int i, int j, int type)
{
try
{
if ((Main.tile[i, j - 2].active && Main.tileSolid[Main.tile[i, j - 2].type]) && (Main.tile[i, j + 2].active && Main.tileSolid[Main.tile[i, j + 2].type]))
{
Main.tile[i, j - 1].active = true;
Main.tile[i, j - 1].type = 10;
Main.tile[i, j - 1].frameY = 0;
Main.tile[i, j - 1].frameX = (short) (genRand.Next(3) * 0x12);
Main.tile[i, j].active = true;
Main.tile[i, j].type = 10;
Main.tile[i, j].frameY = 0x12;
Main.tile[i, j].frameX = (short) (genRand.Next(3) * 0x12);
Main.tile[i, j + 1].active = true;
Main.tile[i, j + 1].type = 10;
Main.tile[i, j + 1].frameY = 0x24;
Main.tile[i, j + 1].frameX = (short) (genRand.Next(3) * 0x12);
return true;
}
return false;
}
catch
{
return false;
}
}
public static void PlaceOnTable1x1(int x, int y, int type)
{
bool flag = false;
if (Main.tile[x, y] == null)
{
Main.tile[x, y] = new Tile();
}
if (Main.tile[x, y + 1] == null)
{
Main.tile[x, y + 1] = new Tile();
}
if ((!Main.tile[x, y].active && Main.tile[x, y + 1].active) && Main.tileTable[Main.tile[x, y + 1].type])
{
flag = true;
}
if (((type == 0x4e) && !Main.tile[x, y].active) && (Main.tile[x, y + 1].active && Main.tileSolid[Main.tile[x, y + 1].type]))
{
flag = true;
}
if (flag)
{
Main.tile[x, y].active = true;
Main.tile[x, y].frameX = 0;
Main.tile[x, y].frameY = 0;
Main.tile[x, y].type = (byte) type;
if (type == 50)
{
Main.tile[x, y].frameX = (short) (0x12 * genRand.Next(5));
}
}
}
public static bool PlacePot(int x, int y, int type = 0x1c)
{
bool flag = true;
for (int i = x; i < (x + 2); i++)
{
for (int k = y - 1; k < (y + 1); k++)
{
if (Main.tile[i, k] == null)
{
Main.tile[i, k] = new Tile();
}
if (Main.tile[i, k].active)
{
flag = false;
}
}
if (Main.tile[i, y + 1] == null)
{
Main.tile[i, y + 1] = new Tile();
}
if (!Main.tile[i, y + 1].active || !Main.tileSolid[Main.tile[i, y + 1].type])
{
flag = false;
}
}
if (!flag)
{
return false;
}
for (int j = 0; j < 2; j++)
{
for (int m = -1; m < 1; m++)
{
int num5 = (j * 0x12) + (genRand.Next(3) * 0x24);
int num6 = (m + 1) * 0x12;
Main.tile[x + j, y + m].active = true;
Main.tile[x + j, y + m].frameX = (short) num5;
Main.tile[x + j, y + m].frameY = (short) num6;
Main.tile[x + j, y + m].type = (byte) type;
}
}
return true;
}
public static bool PlaceSign(int x, int y, int type)
{
int num7;
int num8;
int num9;
int num = x - 2;
int num2 = x + 3;
int num3 = y - 2;
int num4 = y + 3;
if (num >= 0)
{
if (num2 > Main.maxTilesX)
{
return false;
}
if (num3 < 0)
{
return false;
}
if (num4 > Main.maxTilesY)
{
return false;
}
for (int j = num; j < num2; j++)
{
for (int k = num3; k < num4; k++)
{
if (Main.tile[j, k] == null)
{
Main.tile[j, k] = new Tile();
}
}
}
num7 = x;
num8 = y;
num9 = 0;
if ((Main.tile[x, y + 1].active && Main.tileSolid[Main.tile[x, y + 1].type]) && (Main.tile[x + 1, y + 1].active && Main.tileSolid[Main.tile[x + 1, y + 1].type]))
{
num8--;
num9 = 0;
goto Label_02E8;
}
if (((Main.tile[x, y - 1].active && Main.tileSolid[Main.tile[x, y - 1].type]) && (!Main.tileSolidTop[Main.tile[x, y - 1].type] && Main.tile[x + 1, y - 1].active)) && (Main.tileSolid[Main.tile[x + 1, y - 1].type] && !Main.tileSolidTop[Main.tile[x + 1, y - 1].type]))
{
num9 = 1;
goto Label_02E8;
}
if (((Main.tile[x - 1, y].active && Main.tileSolid[Main.tile[x - 1, y].type]) && (!Main.tileSolidTop[Main.tile[x - 1, y].type] && Main.tile[x - 1, y + 1].active)) && (Main.tileSolid[Main.tile[x - 1, y + 1].type] && !Main.tileSolidTop[Main.tile[x - 1, y + 1].type]))
{
num9 = 2;
goto Label_02E8;
}
if (((Main.tile[x + 1, y].active && Main.tileSolid[Main.tile[x + 1, y].type]) && (!Main.tileSolidTop[Main.tile[x + 1, y].type] && Main.tile[x + 1, y + 1].active)) && (Main.tileSolid[Main.tile[x + 1, y + 1].type] && !Main.tileSolidTop[Main.tile[x + 1, y + 1].type]))
{
num7--;
num9 = 3;
goto Label_02E8;
}
}
return false;
Label_02E8:
if ((Main.tile[num7, num8].active || Main.tile[num7 + 1, num8].active) || (Main.tile[num7, num8 + 1].active || Main.tile[num7 + 1, num8 + 1].active))
{
return false;
}
int num10 = 0x24 * num9;
for (int i = 0; i < 2; i++)
{
for (int m = 0; m < 2; m++)
{
Main.tile[num7 + i, num8 + m].active = true;
Main.tile[num7 + i, num8 + m].type = (byte) type;
Main.tile[num7 + i, num8 + m].frameX = (short) (num10 + (0x12 * i));
Main.tile[num7 + i, num8 + m].frameY = (short) (0x12 * m);
}
}
return true;
}
public static void PlaceSunflower(int x, int y, int type = 0x1b)
{
if (y <= (Main.worldSurface - 1.0))
{
bool flag = true;
for (int i = x; i < (x + 2); i++)
{
for (int j = y - 3; j < (y + 1); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].active || (Main.tile[i, j].wall > 0))
{
flag = false;
}
}
if (Main.tile[i, y + 1] == null)
{
Main.tile[i, y + 1] = new Tile();
}
if (!Main.tile[i, y + 1].active || (Main.tile[i, y + 1].type != 2))
{
flag = false;
}
}
if (flag)
{
for (int k = 0; k < 2; k++)
{
for (int m = -3; m < 1; m++)
{
int num5 = (k * 0x12) + (genRand.Next(3) * 0x24);
int num6 = (m + 3) * 0x12;
Main.tile[x + k, y + m].active = true;
Main.tile[x + k, y + m].frameX = (short) num5;
Main.tile[x + k, y + m].frameY = (short) num6;
Main.tile[x + k, y + m].type = (byte) type;
}
}
}
}
}
public static bool PlaceTile(int i, int j, int type, bool mute = false, bool forced = false, int plr = -1)
{
bool flag = false;
if (((i >= 0) && (j >= 0)) && ((i < Main.maxTilesX) && (j < Main.maxTilesY)))
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (((((!forced && !Collision.EmptyTile(i, j, false)) && Main.tileSolid[type]) && (((type != 0x17) || (Main.tile[i, j].type != 0)) || !Main.tile[i, j].active)) && (((type != 2) || (Main.tile[i, j].type != 0)) || !Main.tile[i, j].active)) && ((((type != 60) || (Main.tile[i, j].type != 0x3b)) || !Main.tile[i, j].active) && (((type != 70) || (Main.tile[i, j].type != 0x3b)) || !Main.tile[i, j].active)))
{
return flag;
}
if ((type == 0x17) && ((Main.tile[i, j].type != 0) || !Main.tile[i, j].active))
{
return false;
}
if ((type == 2) && ((Main.tile[i, j].type != 0) || !Main.tile[i, j].active))
{
return false;
}
if ((type == 60) && ((Main.tile[i, j].type != 0x3b) || !Main.tile[i, j].active))
{
return false;
}
if ((Main.tile[i, j].liquid > 0) && ((((type == 3) || (type == 4)) || ((type == 20) || (type == 0x18))) || ((((type == 0x1b) || (type == 0x20)) || ((type == 0x33) || (type == 0x3d))) || (((type == 0x45) || (type == 0x48)) || (type == 0x49)))))
{
return false;
}
Main.tile[i, j].frameY = 0;
Main.tile[i, j].frameX = 0;
if ((type == 3) || (type == 0x18))
{
if ((((j + 1) < Main.maxTilesY) && Main.tile[i, j + 1].active) && ((((Main.tile[i, j + 1].type == 2) && (type == 3)) || ((Main.tile[i, j + 1].type == 0x17) && (type == 0x18))) || ((Main.tile[i, j + 1].type == 0x4e) && (type == 3))))
{
if ((type == 0x18) && (genRand.Next(13) == 0))
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = 0x20;
SquareTileFrame(i, j, true);
}
else if (Main.tile[i, j + 1].type == 0x4e)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = (short) ((genRand.Next(2) * 0x12) + 0x6c);
}
else if ((Main.tile[i, j].wall == 0) && (Main.tile[i, j + 1].wall == 0))
{
if (genRand.Next(50) == 0)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = 0x90;
}
else if (genRand.Next(0x23) == 0)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = (short) ((genRand.Next(2) * 0x12) + 0x6c);
}
else
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = (short) (genRand.Next(6) * 0x12);
}
}
}
}
else if (type == 0x3d)
{
if ((((j + 1) < Main.maxTilesY) && Main.tile[i, j + 1].active) && (Main.tile[i, j + 1].type == 60))
{
if (genRand.Next(10) == 0)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = 0x45;
SquareTileFrame(i, j, true);
}
else if (genRand.Next(15) == 0)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = 0x90;
}
else if (genRand.Next(0x3e8) == 0)
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = 0xa2;
}
else
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = (short) (genRand.Next(8) * 0x12);
}
}
}
else if (type == 0x47)
{
if ((((j + 1) < Main.maxTilesY) && Main.tile[i, j + 1].active) && (Main.tile[i, j + 1].type == 70))
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
Main.tile[i, j].frameX = (short) (genRand.Next(5) * 0x12);
}
}
else if (type == 4)
{
if (Main.tile[i - 1, j] == null)
{
Main.tile[i - 1, j] = new Tile();
}
if (Main.tile[i + 1, j] == null)
{
Main.tile[i + 1, j] = new Tile();
}
if (Main.tile[i, j + 1] == null)
{
Main.tile[i, j + 1] = new Tile();
}
if (((Main.tile[i - 1, j].active && (Main.tileSolid[Main.tile[i - 1, j].type] || (((Main.tile[i - 1, j].type == 5) && (Main.tile[i - 1, j - 1].type == 5)) && (Main.tile[i - 1, j + 1].type == 5)))) || (Main.tile[i + 1, j].active && (Main.tileSolid[Main.tile[i + 1, j].type] || (((Main.tile[i + 1, j].type == 5) && (Main.tile[i + 1, j - 1].type == 5)) && (Main.tile[i + 1, j + 1].type == 5))))) || (Main.tile[i, j + 1].active && Main.tileSolid[Main.tile[i, j + 1].type]))
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
SquareTileFrame(i, j, true);
}
}
else if (type == 10)
{
if (Main.tile[i, j - 1] == null)
{
Main.tile[i, j - 1] = new Tile();
}
if (Main.tile[i, j - 2] == null)
{
Main.tile[i, j - 2] = new Tile();
}
if (Main.tile[i, j - 3] == null)
{
Main.tile[i, j - 3] = new Tile();
}
if (Main.tile[i, j + 1] == null)
{
Main.tile[i, j + 1] = new Tile();
}
if (Main.tile[i, j + 2] == null)
{
Main.tile[i, j + 2] = new Tile();
}
if (Main.tile[i, j + 3] == null)
{
Main.tile[i, j + 3] = new Tile();
}
if ((Main.tile[i, j - 1].active || Main.tile[i, j - 2].active) || (!Main.tile[i, j - 3].active || !Main.tileSolid[Main.tile[i, j - 3].type]))
{
if ((Main.tile[i, j + 1].active || Main.tile[i, j + 2].active) || (!Main.tile[i, j + 3].active || !Main.tileSolid[Main.tile[i, j + 3].type]))
{
return false;
}
PlaceDoor(i, j + 1, type);
SquareTileFrame(i, j, true);
}
else
{
PlaceDoor(i, j - 1, type);
SquareTileFrame(i, j, true);
}
}
else if (((type == 0x22) || (type == 0x23)) || (type == 0x24))
{
Place3x3(i, j, type);
SquareTileFrame(i, j, true);
}
else if (((type == 13) || (type == 0x21)) || (((type == 0x31) || (type == 50)) || (type == 0x4e)))
{
PlaceOnTable1x1(i, j, type);
SquareTileFrame(i, j, true);
}
else if ((type == 14) || (type == 0x1a))
{
Place3x2(i, j, type);
SquareTileFrame(i, j, true);
}
else if (type == 20)
{
if (Main.tile[i, j + 1] == null)
{
Main.tile[i, j + 1] = new Tile();
}
if (Main.tile[i, j + 1].active && (Main.tile[i, j + 1].type == 2))
{
Place1x2(i, j, type);
SquareTileFrame(i, j, true);
}
}
else if (type == 15)
{
if (Main.tile[i, j - 1] == null)
{
Main.tile[i, j - 1] = new Tile();
}
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
Place1x2(i, j, type);
SquareTileFrame(i, j, true);
}
else if (((type == 0x10) || (type == 0x12)) || (type == 0x1d))
{
Place2x1(i, j, type);
SquareTileFrame(i, j, true);
}
else if ((type == 0x11) || (type == 0x4d))
{
Place3x2(i, j, type);
SquareTileFrame(i, j, true);
}
else if (type == 0x15)
{
PlaceChest(i, j, type);
SquareTileFrame(i, j, true);
}
else if (type == 0x1b)
{
PlaceSunflower(i, j, 0x1b);
SquareTileFrame(i, j, true);
}
else if (type == 0x1c)
{
PlacePot(i, j, 0x1c);
SquareTileFrame(i, j, true);
}
else if (type == 0x2a)
{
Place1x2Top(i, j, type);
SquareTileFrame(i, j, true);
}
else if (type == 0x37)
{
PlaceSign(i, j, type);
}
else if (type == 0x4f)
{
int direction = 1;
if (plr > -1)
{
direction = Main.player[plr].direction;
}
Place4x2(i, j, type, direction);
}
else
{
Main.tile[i, j].active = true;
Main.tile[i, j].type = (byte) type;
}
if (Main.tile[i, j].active && !mute)
{
SquareTileFrame(i, j, true);
flag = true;
Main.PlaySound(0, i * 0x10, j * 0x10, 1);
if (type != 0x16)
{
return flag;
}
for (int k = 0; k < 3; k++)
{
Color newColor = new Color();
Dust.NewDust(new Vector2((float) (i * 0x10), (float) (j * 0x10)), 0x10, 0x10, 14, 0f, 0f, 0, newColor, 1f);
}
}
}
return flag;
}
public static void PlaceWall(int i, int j, int type, bool mute = false)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
if (Main.tile[i, j].wall != type)
{
for (int k = i - 1; k < (i + 2); k++)
{
for (int m = j - 1; m < (j + 2); m++)
{
if (Main.tile[k, m] == null)
{
Main.tile[k, m] = new Tile();
}
if ((Main.tile[k, m].wall > 0) && (Main.tile[k, m].wall != type))
{
return;
}
}
}
Main.tile[i, j].wall = (byte) type;
SquareWallFrame(i, j, true);
if (!mute)
{
Main.PlaySound(0, i * 0x10, j * 0x10, 1);
}
}
}
public static void PlantCheck(int i, int j)
{
int num = -1;
int type = Main.tile[i, j].type;
int num1 = i - 1;
int maxTilesX = Main.maxTilesX;
int num4 = i + 1;
int num5 = j - 1;
if ((j + 1) >= Main.maxTilesY)
{
num = type;
}
if ((((i - 1) >= 0) && (Main.tile[i - 1, j] != null)) && Main.tile[i - 1, j].active)
{
byte num6 = Main.tile[i - 1, j].type;
}
if ((((i + 1) < Main.maxTilesX) && (Main.tile[i + 1, j] != null)) && Main.tile[i + 1, j].active)
{
byte num7 = Main.tile[i + 1, j].type;
}
if ((((j - 1) >= 0) && (Main.tile[i, j - 1] != null)) && Main.tile[i, j - 1].active)
{
byte num8 = Main.tile[i, j - 1].type;
}
if ((((j + 1) < Main.maxTilesY) && (Main.tile[i, j + 1] != null)) && Main.tile[i, j + 1].active)
{
num = Main.tile[i, j + 1].type;
}
if ((((i - 1) >= 0) && ((j - 1) >= 0)) && ((Main.tile[i - 1, j - 1] != null) && Main.tile[i - 1, j - 1].active))
{
byte num9 = Main.tile[i - 1, j - 1].type;
}
if ((((i + 1) < Main.maxTilesX) && ((j - 1) >= 0)) && ((Main.tile[i + 1, j - 1] != null) && Main.tile[i + 1, j - 1].active))
{
byte num10 = Main.tile[i + 1, j - 1].type;
}
if ((((i - 1) >= 0) && ((j + 1) < Main.maxTilesY)) && ((Main.tile[i - 1, j + 1] != null) && Main.tile[i - 1, j + 1].active))
{
byte num11 = Main.tile[i - 1, j + 1].type;
}
if ((((i + 1) < Main.maxTilesX) && ((j + 1) < Main.maxTilesY)) && ((Main.tile[i + 1, j + 1] != null) && Main.tile[i + 1, j + 1].active))
{
byte num12 = Main.tile[i + 1, j + 1].type;
}
if ((((((type == 3) && (num != 2)) && (num != 0x4e)) || ((type == 0x18) && (num != 0x17))) || (((type == 0x3d) && (num != 60)) || ((type == 0x47) && (num != 70)))) || ((((type == 0x49) && (num != 2)) && (num != 0x4e)) || ((type == 0x4a) && (num != 60))))
{
KillTile(i, j, false, false, false);
}
}
public static bool PlayerLOS(int x, int y)
{
Rectangle rectangle = new Rectangle(x * 0x10, y * 0x10, 0x10, 0x10);
for (int i = 0; i < 8; i++)
{
if (Main.player[i].active)
{
Rectangle rectangle2 = new Rectangle((int) ((Main.player[i].position.X + (Main.player[i].width * 0.5)) - (Main.screenWidth * 0.6)), (int) ((Main.player[i].position.Y + (Main.player[i].height * 0.5)) - (Main.screenHeight * 0.6)), (int) (Main.screenWidth * 1.2), (int) (Main.screenHeight * 1.2));
if (rectangle.Intersects(rectangle2))
{
return true;
}
}
}
return false;
}
public static void playWorld()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.playWorldCallBack), 1);
}
public static void playWorldCallBack(object threadContext)
{
if (Main.rand == null)
{
Main.rand = new Random((int) DateTime.Now.Ticks);
}
for (int i = 0; i < 8; i++)
{
if (i != Main.myPlayer)
{
Main.player[i].active = false;
}
}
loadWorld();
if (!loadFailed)
{
EveryTileFrame();
if (Main.gameMenu)
{
Main.gameMenu = false;
}
Main.player[Main.myPlayer].Spawn();
Main.player[Main.myPlayer].UpdatePlayer(Main.myPlayer);
Main.dayTime = tempDayTime;
Main.time = tempTime;
Main.moonPhase = tempMoonPhase;
Main.bloodMoon = tempBloodMoon;
Main.PlaySound(11, -1, -1, 1);
Main.resetClouds = true;
}
}
public static void QuickFindHome(int npc)
{
if (((Main.npc[npc].homeTileX > 10) && (Main.npc[npc].homeTileY > 10)) && ((Main.npc[npc].homeTileX < (Main.maxTilesX - 10)) && (Main.npc[npc].homeTileY < Main.maxTilesY)))
{
canSpawn = false;
StartRoomCheck(Main.npc[npc].homeTileX, Main.npc[npc].homeTileY - 1);
if (!canSpawn)
{
for (int i = Main.npc[npc].homeTileX - 1; i < (Main.npc[npc].homeTileX + 2); i++)
{
for (int j = Main.npc[npc].homeTileY - 1; j < (Main.npc[npc].homeTileY + 2); j++)
{
if (StartRoomCheck(i, j))
{
break;
}
}
}
}
if (!canSpawn)
{
int num3 = 10;
for (int k = Main.npc[npc].homeTileX - num3; k <= (Main.npc[npc].homeTileX + num3); k += 2)
{
for (int m = Main.npc[npc].homeTileY - num3; m <= (Main.npc[npc].homeTileY + num3); m += 2)
{
if (StartRoomCheck(k, m))
{
break;
}
}
}
}
if (canSpawn)
{
RoomNeeds(Main.npc[npc].type);
if (canSpawn)
{
ScoreRoom(npc);
}
if (canSpawn && (hiScore > 0))
{
Main.npc[npc].homeTileX = bestX;
Main.npc[npc].homeTileY = bestY;
Main.npc[npc].homeless = false;
canSpawn = false;
}
else
{
Main.npc[npc].homeless = true;
}
}
else
{
Main.npc[npc].homeless = true;
}
}
}
public static void RangeFrame(int startX, int startY, int endX, int endY)
{
int num = startX;
int num2 = endX + 1;
int num3 = startY;
int num4 = endY + 1;
for (int i = num - 1; i < (num2 + 1); i++)
{
for (int j = num3 - 1; j < (num4 + 1); j++)
{
TileFrame(i, j, false, false);
WallFrame(i, j, false);
}
}
}
public static bool RoomNeeds(int npcType)
{
if (((houseTile[15] && (houseTile[14] || houseTile[0x12])) && (((houseTile[4] || houseTile[0x21]) || (houseTile[0x22] || houseTile[0x23])) || ((houseTile[0x24] || houseTile[0x2a]) || houseTile[0x31]))) && ((houseTile[10] || houseTile[11]) || houseTile[0x13]))
{
canSpawn = true;
}
else
{
canSpawn = false;
}
return canSpawn;
}
public static void saveAndPlay()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.saveAndPlayCallBack), 1);
}
public static void saveAndPlayCallBack(object threadContext)
{
saveWorld(false);
}
public static void SaveAndQuit()
{
Main.PlaySound(11, -1, -1, 1);
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.SaveAndQuitCallBack), 1);
}
public static void SaveAndQuitCallBack(object threadContext)
{
Main.menuMode = 10;
Main.gameMenu = true;
Player.SavePlayer(Main.player[Main.myPlayer], Main.playerPathName);
if (Main.netMode == 0)
{
saveWorld(false);
Main.PlaySound(10, -1, -1, 1);
}
else
{
Netplay.disconnect = true;
Main.netMode = 0;
}
Main.menuMode = 0;
}
public static void saveToonWhilePlaying()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.saveToonWhilePlayingCallBack), 1);
}
public static void saveToonWhilePlayingCallBack(object threadContext)
{
Player.SavePlayer(Main.player[Main.myPlayer], Main.playerPathName);
}
public static void saveWorld(bool resetTime = false)
{
if (!saveLock)
{
saveLock = true;
if (!Main.skipMenu)
{
bool dayTime = Main.dayTime;
tempTime = Main.time;
tempMoonPhase = Main.moonPhase;
tempBloodMoon = Main.bloodMoon;
if (resetTime)
{
dayTime = true;
tempTime = 13500.0;
tempMoonPhase = 0;
tempBloodMoon = false;
}
if (Main.worldPathName != null)
{
string path = Main.worldPathName + ".sav";
using (FileStream stream = new FileStream(path, FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(Main.curRelease);
writer.Write(Main.worldName);
writer.Write(Main.worldID);
writer.Write((int) Main.leftWorld);
writer.Write((int) Main.rightWorld);
writer.Write((int) Main.topWorld);
writer.Write((int) Main.bottomWorld);
writer.Write(Main.maxTilesY);
writer.Write(Main.maxTilesX);
writer.Write(Main.spawnTileX);
writer.Write(Main.spawnTileY);
writer.Write(Main.worldSurface);
writer.Write(Main.rockLayer);
writer.Write(tempTime);
writer.Write(dayTime);
writer.Write(tempMoonPhase);
writer.Write(tempBloodMoon);
writer.Write(Main.dungeonX);
writer.Write(Main.dungeonY);
writer.Write(NPC.downedBoss1);
writer.Write(NPC.downedBoss2);
writer.Write(NPC.downedBoss3);
writer.Write(shadowOrbSmashed);
writer.Write(spawnMeteor);
writer.Write((byte) shadowOrbCount);
writer.Write(Main.invasionDelay);
writer.Write(Main.invasionSize);
writer.Write(Main.invasionType);
writer.Write(Main.invasionX);
for (int i = 0; i < Main.maxTilesX; i++)
{
float num2 = ((float) i) / ((float) Main.maxTilesX);
Main.statusText = "Saving world data: " + ((int) ((num2 * 100f) + 1f)) + "%";
for (int n = 0; n < Main.maxTilesY; n++)
{
writer.Write(Main.tile[i, n].active);
if (Main.tile[i, n].active)
{
writer.Write(Main.tile[i, n].type);
if (Main.tileFrameImportant[Main.tile[i, n].type])
{
writer.Write(Main.tile[i, n].frameX);
writer.Write(Main.tile[i, n].frameY);
}
}
writer.Write(Main.tile[i, n].lighted);
if (Main.tile[i, n].wall > 0)
{
writer.Write(true);
writer.Write(Main.tile[i, n].wall);
}
else
{
writer.Write(false);
}
if (Main.tile[i, n].liquid > 0)
{
writer.Write(true);
writer.Write(Main.tile[i, n].liquid);
writer.Write(Main.tile[i, n].lava);
}
else
{
writer.Write(false);
}
}
}
for (int j = 0; j < 0x3e8; j++)
{
if (Main.chest[j] == null)
{
writer.Write(false);
}
else
{
writer.Write(true);
writer.Write(Main.chest[j].x);
writer.Write(Main.chest[j].y);
for (int num5 = 0; num5 < Chest.maxItems; num5++)
{
writer.Write((byte) Main.chest[j].item[num5].stack);
if (Main.chest[j].item[num5].stack > 0)
{
writer.Write(Main.chest[j].item[num5].name != null ? Main.chest[j].item[num5].name : "");
}
}
}
}
for (int k = 0; k < 0x3e8; k++)
{
if ((Main.sign[k] == null) || (Main.sign[k].text == null))
{
writer.Write(false);
}
else
{
writer.Write(true);
writer.Write(Main.sign[k].text);
writer.Write(Main.sign[k].x);
writer.Write(Main.sign[k].y);
}
}
for (int m = 0; m < 0x3e8; m++)
{
lock (Main.npc[m])
{
if (Main.npc[m].active && Main.npc[m].townNPC)
{
writer.Write(true);
writer.Write(Main.npc[m].name);
writer.Write(Main.npc[m].position.X);
writer.Write(Main.npc[m].position.Y);
writer.Write(Main.npc[m].homeless);
writer.Write(Main.npc[m].homeTileX);
writer.Write(Main.npc[m].homeTileY);
}
}
}
writer.Write(false);
writer.Close();
Main.statusText = "Backing up world file...";
string destFileName = Main.worldPathName + ".bak";
if (File.Exists(Main.worldPathName))
{
File.Copy(Main.worldPathName, destFileName, true);
}
File.Copy(path, Main.worldPathName, true);
File.Delete(path);
}
}
saveLock = false;
}
}
}
}
public static void ScoreRoom(int ignoreNPC = -1)
{
for (int i = 0; i < 0x3e8; i++)
{
if ((Main.npc[i].active && Main.npc[i].townNPC) && ((ignoreNPC != i) && !Main.npc[i].homeless))
{
for (int k = 0; k < numRoomTiles; k++)
{
if ((Main.npc[i].homeTileX == roomX[k]) && (Main.npc[i].homeTileY == roomY[k]))
{
bool flag = false;
for (int m = 0; m < numRoomTiles; m++)
{
if ((Main.npc[i].homeTileX == roomX[m]) && ((Main.npc[i].homeTileY - 1) == roomY[m]))
{
flag = true;
break;
}
}
if (flag)
{
hiScore = -1;
return;
}
}
}
}
}
hiScore = 0;
int num4 = 0;
int num5 = 0;
int num6 = 0;
int num7 = ((roomX1 - ((Main.screenWidth / 2) / 0x10)) - 1) - 0x15;
int num8 = ((roomX2 + ((Main.screenWidth / 2) / 0x10)) + 1) + 0x15;
int num9 = ((roomY1 - ((Main.screenHeight / 2) / 0x10)) - 1) - 0x15;
int maxTilesX = ((roomY2 + ((Main.screenHeight / 2) / 0x10)) + 1) + 0x15;
if (num7 < 0)
{
num7 = 0;
}
if (num8 >= Main.maxTilesX)
{
num8 = Main.maxTilesX - 1;
}
if (num9 < 0)
{
num9 = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
for (int j = num7 + 1; j < num8; j++)
{
for (int n = num9 + 2; n < (maxTilesX + 2); n++)
{
if (Main.tile[j, n].active)
{
if (((Main.tile[j, n].type == 0x17) || (Main.tile[j, n].type == 0x18)) || ((Main.tile[j, n].type == 0x19) || (Main.tile[j, n].type == 0x20)))
{
Main.evilTiles++;
}
else if (Main.tile[j, n].type == 0x1b)
{
Main.evilTiles -= 5;
}
}
}
}
if (num6 < 50)
{
num6 = 0;
}
num5 = -num6;
if (num5 <= -250)
{
hiScore = num5;
}
else
{
num7 = roomX1;
num8 = roomX2;
num9 = roomY1;
maxTilesX = roomY2;
for (int num13 = num7 + 1; num13 < num8; num13++)
{
for (int num14 = num9 + 2; num14 < (maxTilesX + 2); num14++)
{
if (!Main.tile[num13, num14].active)
{
continue;
}
num4 = num5;
if (((Main.tileSolid[Main.tile[num13, num14].type] && !Main.tileSolidTop[Main.tile[num13, num14].type]) && (!Collision.SolidTiles(num13 - 1, num13 + 1, num14 - 3, num14 - 1) && Main.tile[num13 - 1, num14].active)) && ((Main.tileSolid[Main.tile[num13 - 1, num14].type] && Main.tile[num13 + 1, num14].active) && Main.tileSolid[Main.tile[num13 + 1, num14].type]))
{
for (int num15 = num13 - 2; num15 < (num13 + 3); num15++)
{
for (int num16 = num14 - 4; num16 < num14; num16++)
{
if (Main.tile[num15, num16].active)
{
if (num15 == num13)
{
num4 -= 15;
}
else if ((Main.tile[num15, num16].type == 10) || (Main.tile[num15, num16].type == 11))
{
num4 -= 20;
}
else if (Main.tileSolid[Main.tile[num15, num16].type])
{
num4 -= 5;
}
else
{
num4 += 5;
}
}
}
}
if (num4 > hiScore)
{
bool flag2 = false;
for (int num17 = 0; num17 < numRoomTiles; num17++)
{
if ((roomX[num17] == num13) && (roomY[num17] == num14))
{
flag2 = true;
break;
}
}
if (flag2)
{
hiScore = num4;
bestX = num13;
bestY = num14;
}
}
}
}
}
}
}
public static void SectionTileFrame(int startX, int startY, int endX, int endY)
{
int num = startX * 200;
int num2 = (endX + 1) * 200;
int num3 = startY * 150;
int num4 = (endY + 1) * 150;
if (num < 1)
{
num = 1;
}
if (num3 < 1)
{
num3 = 1;
}
if (num > (Main.maxTilesX - 2))
{
num = Main.maxTilesX - 2;
}
if (num3 > (Main.maxTilesY - 2))
{
num3 = Main.maxTilesY - 2;
}
for (int i = num - 1; i < (num2 + 1); i++)
{
for (int j = num3 - 1; j < (num4 + 1); j++)
{
if (Main.tile[i, j] == null)
{
Main.tile[i, j] = new Tile();
}
TileFrame(i, j, true, true);
WallFrame(i, j, true);
}
}
}
public static void serverLoadWorld()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.serverLoadWorldCallBack), 1);
if (ShankShock.infinateInvasion) { Main.startInv(); }
}
public static void serverLoadWorldCallBack(object threadContext)
{
loadWorld();
if (!loadFailed)
{
Main.PlaySound(10, -1, -1, 1);
Netplay.StartServer();
Main.dayTime = tempDayTime;
Main.time = tempTime;
Main.moonPhase = tempMoonPhase;
Main.bloodMoon = tempBloodMoon;
}
}
public static void setWorldSize()
{
Main.bottomWorld = Main.maxTilesY * 0x10;
Main.rightWorld = Main.maxTilesX * 0x10;
Main.maxSectionsX = Main.maxTilesX / 200;
Main.maxSectionsY = Main.maxTilesY / 150;
}
public static void ShroomPatch(int i, int j)
{
Vector2 vector;
Vector2 vector2;
double num5 = genRand.Next(40, 70);
double num6 = num5;
float num7 = genRand.Next(10, 20);
if (genRand.Next(5) == 0)
{
num5 *= 1.5;
num6 *= 1.5;
num7 *= 1.2f;
}
vector.X = i;
vector.Y = j - (num7 * 0.3f);
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = genRand.Next(-20, -10) * 0.1f;
while ((num5 > 0.0) && (num7 > 0f))
{
num5 -= genRand.Next(3);
num7--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
num6 = (num5 * genRand.Next(80, 120)) * 0.01;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
float num10 = Math.Abs((float) (k - vector.X));
float num11 = Math.Abs((float) ((m - vector.Y) * 2.3f));
if (Math.Sqrt((double) ((num10 * num10) + (num11 * num11))) < (num6 * 0.4))
{
if (m < (vector.Y + (num6 * 0.05)))
{
if (Main.tile[k, m].type != 0x3b)
{
Main.tile[k, m].active = false;
}
}
else
{
Main.tile[k, m].type = 0x3b;
}
Main.tile[k, m].liquid = 0;
Main.tile[k, m].lava = false;
}
}
}
vector += vector2;
vector2.X += genRand.Next(-10, 11) * 0.05f;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 1f)
{
vector2.X = 0.1f;
}
if (vector2.X < -1f)
{
vector2.X = -1f;
}
if (vector2.Y > 1f)
{
vector2.Y = 1f;
}
if (vector2.Y < -1f)
{
vector2.Y = -1f;
}
}
}
public static void SpawnNPC(int x, int y)
{
if (Main.wallHouse[Main.tile[x, y].wall])
{
canSpawn = true;
}
if ((canSpawn && StartRoomCheck(x, y)) && RoomNeeds(spawnNPC))
{
ScoreRoom(-1);
if (hiScore > 0)
{
int index = -1;
for (int i = 0; i < 0x3e8; i++)
{
if ((Main.npc[i].active && Main.npc[i].homeless) && (Main.npc[i].type == spawnNPC))
{
index = i;
break;
}
}
if (index != -1)
{
spawnNPC = 0;
Main.npc[index].homeTileX = WorldGen.bestX;
Main.npc[index].homeTileY = WorldGen.bestY;
Main.npc[index].homeless = false;
}
else
{
int bestX = WorldGen.bestX;
int bestY = WorldGen.bestY;
bool flag = false;
if (!flag)
{
flag = true;
Rectangle rectangle = new Rectangle((((bestX * 0x10) + 8) - (Main.screenWidth / 2)) - NPC.safeRangeX, (((bestY * 0x10) + 8) - (Main.screenHeight / 2)) - NPC.safeRangeY, Main.screenWidth + (NPC.safeRangeX * 2), Main.screenHeight + (NPC.safeRangeY * 2));
for (int j = 0; j < 8; j++)
{
if (Main.player[j].active)
{
Rectangle rectangle2 = new Rectangle((int) Main.player[j].position.X, (int) Main.player[j].position.Y, Main.player[j].width, Main.player[j].height);
if (rectangle2.Intersects(rectangle))
{
flag = false;
break;
}
}
}
}
if (!flag)
{
for (int k = 1; k < 500; k++)
{
for (int m = 0; m < 2; m++)
{
if (m == 0)
{
bestX = WorldGen.bestX + k;
}
else
{
bestX = WorldGen.bestX - k;
}
if ((bestX > 10) && (bestX < (Main.maxTilesX - 10)))
{
int num8 = WorldGen.bestY - k;
double worldSurface = WorldGen.bestY + k;
if (num8 < 10)
{
num8 = 10;
}
if (worldSurface > Main.worldSurface)
{
worldSurface = Main.worldSurface;
}
for (int n = num8; n < worldSurface; n++)
{
bestY = n;
if (Main.tile[bestX, bestY].active && Main.tileSolid[Main.tile[bestX, bestY].type])
{
if (!Collision.SolidTiles(bestX - 1, bestX + 1, bestY - 3, bestY - 1))
{
flag = true;
Rectangle rectangle3 = new Rectangle((((bestX * 0x10) + 8) - (Main.screenWidth / 2)) - NPC.safeRangeX, (((bestY * 0x10) + 8) - (Main.screenHeight / 2)) - NPC.safeRangeY, Main.screenWidth + (NPC.safeRangeX * 2), Main.screenHeight + (NPC.safeRangeY * 2));
for (int num11 = 0; num11 < 8; num11++)
{
if (Main.player[num11].active)
{
Rectangle rectangle4 = new Rectangle((int) Main.player[num11].position.X, (int) Main.player[num11].position.Y, Main.player[num11].width, Main.player[num11].height);
if (rectangle4.Intersects(rectangle3))
{
flag = false;
break;
}
}
}
}
break;
}
}
}
if (flag)
{
break;
}
}
if (flag)
{
break;
}
}
}
int num12 = NPC.NewNPC(bestX * 0x10, bestY * 0x10, spawnNPC, 1);
Main.npc[num12].homeTileX = WorldGen.bestX;
Main.npc[num12].homeTileY = WorldGen.bestY;
if (bestX < WorldGen.bestX)
{
Main.npc[num12].direction = 1;
}
else if (bestX > WorldGen.bestX)
{
Main.npc[num12].direction = -1;
}
Main.npc[num12].netUpdate = true;
if (Main.netMode == 0)
{
Main.NewText(Main.npc[num12].name + " has arrived!", 50, 0x7d, 0xff);
}
else if (Main.netMode == 2)
{
if (Main.npc[num12].name == "") { return; }
NetMessage.SendData(0x19, -1, -1, Main.npc[num12].name + " has arrived!", 8, 50f, 125f, 255f);
}
}
spawnNPC = 0;
}
}
}
public static void SpreadGrass(int i, int j, int dirt = 0, int grass = 2, bool repeat = true)
{
if (((Main.tile[i, j].type == dirt) && Main.tile[i, j].active) && ((j < Main.worldSurface) || (dirt == 0x3b)))
{
int num = i - 1;
int maxTilesX = i + 2;
int num3 = j - 1;
int maxTilesY = j + 2;
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num3 < 0)
{
num3 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
bool flag = true;
for (int k = num; k < maxTilesX; k++)
{
for (int m = num3; m < maxTilesY; m++)
{
if (!Main.tile[k, m].active || !Main.tileSolid[Main.tile[k, m].type])
{
flag = false;
goto Label_00BB;
}
}
Label_00BB:;
}
if (!flag && ((grass != 0x17) || (Main.tile[i, j - 1].type != 0x1b)))
{
Main.tile[i, j].type = (byte) grass;
for (int n = num; n < maxTilesX; n++)
{
for (int num8 = num3; num8 < maxTilesY; num8++)
{
if ((Main.tile[n, num8].active && (Main.tile[n, num8].type == dirt)) && repeat)
{
SpreadGrass(n, num8, dirt, grass, true);
}
}
}
}
}
}
public static void SquareTileFrame(int i, int j, bool resetFrame = true)
{
TileFrame(i - 1, j - 1, false, false);
TileFrame(i - 1, j, false, false);
TileFrame(i - 1, j + 1, false, false);
TileFrame(i, j - 1, false, false);
TileFrame(i, j, resetFrame, false);
TileFrame(i, j + 1, false, false);
TileFrame(i + 1, j - 1, false, false);
TileFrame(i + 1, j, false, false);
TileFrame(i + 1, j + 1, false, false);
}
public static void SquareWallFrame(int i, int j, bool resetFrame = true)
{
WallFrame(i - 1, j - 1, false);
WallFrame(i - 1, j, false);
WallFrame(i - 1, j + 1, false);
WallFrame(i, j - 1, false);
WallFrame(i, j, resetFrame);
WallFrame(i, j + 1, false);
WallFrame(i + 1, j - 1, false);
WallFrame(i + 1, j, false);
WallFrame(i + 1, j + 1, false);
}
public static bool StartRoomCheck(int x, int y)
{
roomX1 = x;
roomX2 = x;
roomY1 = y;
roomY2 = y;
numRoomTiles = 0;
for (int i = 0; i < 80; i++)
{
houseTile[i] = false;
}
canSpawn = true;
if (Main.tile[x, y].active && Main.tileSolid[Main.tile[x, y].type])
{
canSpawn = false;
}
CheckRoom(x, y);
if (numRoomTiles < 60)
{
canSpawn = false;
}
return canSpawn;
}
public static void TileFrame(int i, int j, bool resetFrame = false, bool noBreak = false)
{
if ((((i >= 0) && (j >= 0)) && ((i < Main.maxTilesX) && (j < Main.maxTilesY))) && (Main.tile[i, j] != null))
{
if (((Main.tile[i, j].liquid > 0) && (Main.netMode != 1)) && !noLiquidCheck)
{
Liquid.AddWater(i, j);
}
if (Main.tile[i, j].active && (!noBreak || !Main.tileFrameImportant[Main.tile[i, j].type]))
{
Rectangle rectangle;
int index = -1;
int num2 = -1;
int num3 = -1;
int num4 = -1;
int num5 = -1;
int num6 = -1;
int num7 = -1;
int num8 = -1;
int type = Main.tile[i, j].type;
if (Main.tileStone[type])
{
type = 1;
}
int frameX = Main.tile[i, j].frameX;
int frameY = Main.tile[i, j].frameY;
rectangle.X = -1;
rectangle.Y = -1;
if ((((type == 3) || (type == 0x18)) || ((type == 0x3d) || (type == 0x47))) || ((type == 0x49) || (type == 0x4a)))
{
PlantCheck(i, j);
}
else
{
WorldGen.mergeUp = false;
WorldGen.mergeDown = false;
WorldGen.mergeLeft = false;
WorldGen.mergeRight = false;
if ((i - 1) < 0)
{
index = type;
num4 = type;
num6 = type;
}
if ((i + 1) >= Main.maxTilesX)
{
num3 = type;
num5 = type;
num8 = type;
}
if ((j - 1) < 0)
{
index = type;
num2 = type;
num3 = type;
}
if ((j + 1) >= Main.maxTilesY)
{
num6 = type;
num7 = type;
num8 = type;
}
if ((((i - 1) >= 0) && (Main.tile[i - 1, j] != null)) && Main.tile[i - 1, j].active)
{
num4 = Main.tile[i - 1, j].type;
}
if ((((i + 1) < Main.maxTilesX) && (Main.tile[i + 1, j] != null)) && Main.tile[i + 1, j].active)
{
num5 = Main.tile[i + 1, j].type;
}
if ((((j - 1) >= 0) && (Main.tile[i, j - 1] != null)) && Main.tile[i, j - 1].active)
{
num2 = Main.tile[i, j - 1].type;
}
if ((((j + 1) < Main.maxTilesY) && (Main.tile[i, j + 1] != null)) && Main.tile[i, j + 1].active)
{
num7 = Main.tile[i, j + 1].type;
}
if ((((i - 1) >= 0) && ((j - 1) >= 0)) && ((Main.tile[i - 1, j - 1] != null) && Main.tile[i - 1, j - 1].active))
{
index = Main.tile[i - 1, j - 1].type;
}
if ((((i + 1) < Main.maxTilesX) && ((j - 1) >= 0)) && ((Main.tile[i + 1, j - 1] != null) && Main.tile[i + 1, j - 1].active))
{
num3 = Main.tile[i + 1, j - 1].type;
}
if ((((i - 1) >= 0) && ((j + 1) < Main.maxTilesY)) && ((Main.tile[i - 1, j + 1] != null) && Main.tile[i - 1, j + 1].active))
{
num6 = Main.tile[i - 1, j + 1].type;
}
if ((((i + 1) < Main.maxTilesX) && ((j + 1) < Main.maxTilesY)) && ((Main.tile[i + 1, j + 1] != null) && Main.tile[i + 1, j + 1].active))
{
num8 = Main.tile[i + 1, j + 1].type;
}
if ((num4 >= 0) && Main.tileStone[num4])
{
num4 = 1;
}
if ((num5 >= 0) && Main.tileStone[num5])
{
num5 = 1;
}
if ((num2 >= 0) && Main.tileStone[num2])
{
num2 = 1;
}
if ((num7 >= 0) && Main.tileStone[num7])
{
num7 = 1;
}
if ((index >= 0) && Main.tileStone[index])
{
index = 1;
}
if ((num3 >= 0) && Main.tileStone[num3])
{
num3 = 1;
}
if ((num6 >= 0) && Main.tileStone[num6])
{
num6 = 1;
}
if ((num8 >= 0) && Main.tileStone[num8])
{
num8 = 1;
}
if (type == 4)
{
if (((num7 >= 0) && Main.tileSolid[num7]) && !Main.tileNoAttach[num7])
{
Main.tile[i, j].frameX = 0;
}
else if ((((num4 >= 0) && Main.tileSolid[num4]) && !Main.tileNoAttach[num4]) || (((num4 == 5) && (index == 5)) && (num6 == 5)))
{
Main.tile[i, j].frameX = 0x16;
}
else if ((((num5 >= 0) && Main.tileSolid[num5]) && !Main.tileNoAttach[num5]) || (((num5 == 5) && (num3 == 5)) && (num8 == 5)))
{
Main.tile[i, j].frameX = 0x2c;
}
else
{
KillTile(i, j, false, false, false);
}
}
else if ((type == 12) || (type == 0x1f))
{
if (!destroyObject)
{
int num12 = i;
int num13 = j;
if (Main.tile[i, j].frameX == 0)
{
num12 = i;
}
else
{
num12 = i - 1;
}
if (Main.tile[i, j].frameY == 0)
{
num13 = j;
}
else
{
num13 = j - 1;
}
if ((((Main.tile[num12, num13] != null) && (Main.tile[num12 + 1, num13] != null)) && ((Main.tile[num12, num13 + 1] != null) && (Main.tile[num12 + 1, num13 + 1] != null))) && (((!Main.tile[num12, num13].active || (Main.tile[num12, num13].type != type)) || (!Main.tile[num12 + 1, num13].active || (Main.tile[num12 + 1, num13].type != type))) || ((!Main.tile[num12, num13 + 1].active || (Main.tile[num12, num13 + 1].type != type)) || (!Main.tile[num12 + 1, num13 + 1].active || (Main.tile[num12 + 1, num13 + 1].type != type)))))
{
destroyObject = true;
if (Main.tile[num12, num13].type == type)
{
KillTile(num12, num13, false, false, false);
}
if (Main.tile[num12 + 1, num13].type == type)
{
KillTile(num12 + 1, num13, false, false, false);
}
if (Main.tile[num12, num13 + 1].type == type)
{
KillTile(num12, num13 + 1, false, false, false);
}
if (Main.tile[num12 + 1, num13 + 1].type == type)
{
KillTile(num12 + 1, num13 + 1, false, false, false);
}
if (type == 12)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x1d, 1, false);
}
else if (type == 0x1f)
{
if (genRand.Next(2) == 0)
{
spawnMeteor = true;
}
int num14 = Main.rand.Next(5);
if (!shadowOrbSmashed)
{
num14 = 0;
}
if (num14 == 0)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x60, 1, false);
int stack = genRand.Next(0x19, 0x33);
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x61, stack, false);
}
else if (num14 == 1)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x40, 1, false);
}
else if (num14 == 2)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0xa2, 1, false);
}
else if (num14 == 3)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x73, 1, false);
}
else if (num14 == 4)
{
Item.NewItem(num12 * 0x10, num13 * 0x10, 0x20, 0x20, 0x6f, 1, false);
}
shadowOrbSmashed = true;
shadowOrbCount++;
if (shadowOrbCount >= 3)
{
shadowOrbCount = 0;
float num16 = num12 * 0x10;
float num17 = num13 * 0x10;
float num18 = -1f;
int plr = 0;
for (int k = 0; k < 8; k++)
{
float num21 = Math.Abs((float) (Main.player[k].position.X - num16)) + Math.Abs((float) (Main.player[k].position.Y - num17));
if ((num21 < num18) || (num18 == -1f))
{
plr = 0;
num18 = num21;
}
}
NPC.SpawnOnPlayer(plr, 13);
}
else
{
string newText = "A horrible chill goes down your spine...";
if (shadowOrbCount == 2)
{
newText = "Screams echo around you...";
}
if (Main.netMode == 0)
{
Main.NewText(newText, 50, 0xff, 130);
}
else if (Main.netMode == 2)
{
NetMessage.SendData(0x19, -1, -1, newText, 8, 50f, 255f, 130f);
}
}
}
Main.PlaySound(13, i * 0x10, j * 0x10, 1);
destroyObject = false;
}
}
}
else
{
if (type == 0x13)
{
if ((num4 == type) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0;
rectangle.Y = 0x24;
}
}
else if ((num4 == type) && (num5 == -1))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x12;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x12;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x12;
rectangle.Y = 0x24;
}
}
else if ((num4 == -1) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x24;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x24;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x24;
rectangle.Y = 0x24;
}
}
else if ((num4 != type) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x36;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x36;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x36;
rectangle.Y = 0x24;
}
}
else if ((num4 == type) && (num5 != type))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x48;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x48;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x48;
rectangle.Y = 0x24;
}
}
else if (((num4 != type) && (num4 != -1)) && (num5 == -1))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x6c;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x6c;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x6c;
rectangle.Y = 0x24;
}
}
else if (((num4 == -1) && (num5 != type)) && (num5 != -1))
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 0x7e;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 0x7e;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 0x7e;
rectangle.Y = 0x24;
}
}
else
{
if (Main.tile[i, j].frameNumber == 0)
{
rectangle.X = 90;
rectangle.Y = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
rectangle.X = 90;
rectangle.Y = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
rectangle.X = 90;
rectangle.Y = 0x24;
}
}
}
else
{
if (type == 10)
{
if (!destroyObject)
{
int num22 = Main.tile[i, j].frameY;
int num23 = j;
bool flag = false;
switch (num22)
{
case 0:
num23 = j;
break;
case 0x12:
num23 = j - 1;
break;
case 0x24:
num23 = j - 2;
break;
}
if (Main.tile[i, num23 - 1] == null)
{
Main.tile[i, num23 - 1] = new Tile();
}
if (Main.tile[i, num23 + 3] == null)
{
Main.tile[i, num23 + 3] = new Tile();
}
if (Main.tile[i, num23 + 2] == null)
{
Main.tile[i, num23 + 2] = new Tile();
}
if (Main.tile[i, num23 + 1] == null)
{
Main.tile[i, num23 + 1] = new Tile();
}
if (Main.tile[i, num23] == null)
{
Main.tile[i, num23] = new Tile();
}
if (!Main.tile[i, num23 - 1].active || !Main.tileSolid[Main.tile[i, num23 - 1].type])
{
flag = true;
}
if (!Main.tile[i, num23 + 3].active || !Main.tileSolid[Main.tile[i, num23 + 3].type])
{
flag = true;
}
if (!Main.tile[i, num23].active || (Main.tile[i, num23].type != type))
{
flag = true;
}
if (!Main.tile[i, num23 + 1].active || (Main.tile[i, num23 + 1].type != type))
{
flag = true;
}
if (!Main.tile[i, num23 + 2].active || (Main.tile[i, num23 + 2].type != type))
{
flag = true;
}
if (flag)
{
destroyObject = true;
KillTile(i, num23, false, false, false);
KillTile(i, num23 + 1, false, false, false);
KillTile(i, num23 + 2, false, false, false);
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x19, 1, false);
}
destroyObject = false;
}
return;
}
if (type == 11)
{
if (!destroyObject)
{
int num24 = 0;
int num25 = i;
int num26 = j;
int num27 = Main.tile[i, j].frameX;
int num28 = Main.tile[i, j].frameY;
bool flag2 = false;
switch (num27)
{
case 0:
num25 = i;
num24 = 1;
break;
case 0x12:
num25 = i - 1;
num24 = 1;
break;
case 0x24:
num25 = i + 1;
num24 = -1;
break;
case 0x36:
num25 = i;
num24 = -1;
break;
}
if (num28 == 0)
{
num26 = j;
}
else if (num28 == 0x12)
{
num26 = j - 1;
}
else if (num28 == 0x24)
{
num26 = j - 2;
}
if (Main.tile[num25, num26 + 3] == null)
{
Main.tile[num25, num26 + 3] = new Tile();
}
if (Main.tile[num25, num26 - 1] == null)
{
Main.tile[num25, num26 - 1] = new Tile();
}
if ((!Main.tile[num25, num26 - 1].active || !Main.tileSolid[Main.tile[num25, num26 - 1].type]) || (!Main.tile[num25, num26 + 3].active || !Main.tileSolid[Main.tile[num25, num26 + 3].type]))
{
flag2 = true;
destroyObject = true;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x19, 1, false);
}
int num29 = num25;
if (num24 == -1)
{
num29 = num25 - 1;
}
for (int m = num29; m < (num29 + 2); m++)
{
for (int n = num26; n < (num26 + 3); n++)
{
if (!flag2 && ((Main.tile[m, n].type != 11) || !Main.tile[m, n].active))
{
destroyObject = true;
Item.NewItem(i * 0x10, j * 0x10, 0x10, 0x10, 0x19, 1, false);
flag2 = true;
m = num29;
n = num26;
}
if (flag2)
{
KillTile(m, n, false, false, false);
}
}
}
destroyObject = false;
}
return;
}
if (((type == 0x22) || (type == 0x23)) || (type == 0x24))
{
Check3x3(i, j, (byte) type);
return;
}
if ((type == 15) || (type == 20))
{
Check1x2(i, j, (byte) type);
return;
}
if (((type == 14) || (type == 0x11)) || ((type == 0x1a) || (type == 0x4d)))
{
Check3x2(i, j, (byte) type);
return;
}
if (((type == 0x10) || (type == 0x12)) || (type == 0x1d))
{
Check2x1(i, j, (byte) type);
return;
}
if (((type == 13) || (type == 0x21)) || (((type == 0x31) || (type == 50)) || (type == 0x4e)))
{
CheckOnTable1x1(i, j, (byte) type);
return;
}
if (type == 0x15)
{
CheckChest(i, j, (byte) type);
return;
}
if (type == 0x1b)
{
CheckSunflower(i, j, 0x1b);
return;
}
if (type == 0x1c)
{
CheckPot(i, j, 0x1c);
return;
}
if (type == 0x2a)
{
Check1x2Top(i, j, (byte) type);
return;
}
if (type == 0x37)
{
CheckSign(i, j, type);
return;
}
if (type == 0x4f)
{
Check4x2(i, j, type);
return;
}
}
if (type == 0x48)
{
if ((num7 != type) && (num7 != 70))
{
KillTile(i, j, false, false, false);
}
else if ((num2 != type) && (Main.tile[i, j].frameX == 0))
{
Main.tile[i, j].frameNumber = (byte) genRand.Next(3);
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x12;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x12;
Main.tile[i, j].frameY = 0x12;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x12;
Main.tile[i, j].frameY = 0x24;
}
}
}
if (type == 5)
{
if (((Main.tile[i, j].frameX >= 0x16) && (Main.tile[i, j].frameX <= 0x2c)) && ((Main.tile[i, j].frameY >= 0x84) && (Main.tile[i, j].frameY <= 0xb0)))
{
if (((num4 != type) && (num5 != type)) || (num7 != 2))
{
KillTile(i, j, false, false, false);
}
}
else if (((((Main.tile[i, j].frameX == 0x58) && (Main.tile[i, j].frameY >= 0)) && (Main.tile[i, j].frameY <= 0x2c)) || (((Main.tile[i, j].frameX == 0x42) && (Main.tile[i, j].frameY >= 0x42)) && (Main.tile[i, j].frameY <= 130))) || ((((Main.tile[i, j].frameX == 110) && (Main.tile[i, j].frameY >= 0x42)) && (Main.tile[i, j].frameY <= 110)) || (((Main.tile[i, j].frameX == 0x84) && (Main.tile[i, j].frameY >= 0)) && (Main.tile[i, j].frameY <= 0xb0))))
{
if ((num4 == type) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x42;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x58;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 110;
}
}
else if (num4 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x2c;
}
}
else if (num5 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x42;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x58;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 110;
}
}
else
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x2c;
}
}
}
if (((Main.tile[i, j].frameY >= 0x84) && (Main.tile[i, j].frameY <= 0xb0)) && (((Main.tile[i, j].frameX == 0) || (Main.tile[i, j].frameX == 0x42)) || (Main.tile[i, j].frameX == 0x58)))
{
if (num7 != 2)
{
KillTile(i, j, false, false, false);
}
if ((num4 != type) && (num5 != type))
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x2c;
}
}
else if (num4 != type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x84;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0x9a;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0;
Main.tile[i, j].frameY = 0xb0;
}
}
else if (num5 != type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x84;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0x9a;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x42;
Main.tile[i, j].frameY = 0xb0;
}
}
else
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x84;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0x9a;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x58;
Main.tile[i, j].frameY = 0xb0;
}
}
}
if ((((Main.tile[i, j].frameX == 0x42) && (((Main.tile[i, j].frameY == 0) || (Main.tile[i, j].frameY == 0x16)) || (Main.tile[i, j].frameY == 0x2c))) || ((Main.tile[i, j].frameX == 0x58) && (((Main.tile[i, j].frameY == 0x42) || (Main.tile[i, j].frameY == 0x58)) || (Main.tile[i, j].frameY == 110)))) || (((Main.tile[i, j].frameX == 0x2c) && (((Main.tile[i, j].frameY == 0xc6) || (Main.tile[i, j].frameY == 220)) || (Main.tile[i, j].frameY == 0xf2))) || ((Main.tile[i, j].frameX == 0x42) && (((Main.tile[i, j].frameY == 0xc6) || (Main.tile[i, j].frameY == 220)) || (Main.tile[i, j].frameY == 0xf2)))))
{
if ((num4 != type) && (num5 != type))
{
KillTile(i, j, false, false, false);
}
}
else if ((num7 == -1) || (num7 == 0x17))
{
KillTile(i, j, false, false, false);
}
else if (((num2 != type) && (Main.tile[i, j].frameY < 0xc6)) && (((Main.tile[i, j].frameX != 0x16) && (Main.tile[i, j].frameX != 0x2c)) || (Main.tile[i, j].frameY < 0x84)))
{
if ((num4 == type) || (num5 == type))
{
if (num7 == type)
{
if ((num4 == type) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x84;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x9a;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0xb0;
}
}
else if (num4 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x2c;
}
}
else if (num5 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x42;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 0x58;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x84;
Main.tile[i, j].frameY = 110;
}
}
}
else if ((num4 == type) && (num5 == type))
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x84;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x9a;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0xb0;
}
}
else if (num4 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x2c;
}
}
else if (num5 == type)
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x42;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 0x58;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 0x9a;
Main.tile[i, j].frameY = 110;
}
}
}
else
{
if (Main.tile[i, j].frameNumber == 0)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0;
}
if (Main.tile[i, j].frameNumber == 1)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x16;
}
if (Main.tile[i, j].frameNumber == 2)
{
Main.tile[i, j].frameX = 110;
Main.tile[i, j].frameY = 0x2c;
}
}
}
rectangle.X = Main.tile[i, j].frameX;
rectangle.Y = Main.tile[i, j].frameY;
}
if (!Main.tileFrameImportant[Main.tile[i, j].type])
{
int frameNumber = 0;
if (resetFrame)
{
frameNumber = genRand.Next(0, 3);
Main.tile[i, j].frameNumber = (byte) frameNumber;
}
else
{
frameNumber = Main.tile[i, j].frameNumber;
}
if (type == 0)
{
for (int num33 = 0; num33 < 80; num33++)
{
switch (num33)
{
case 1:
case 6:
case 7:
case 8:
case 9:
case 0x16:
case 0x19:
case 0x25:
case 40:
case 0x35:
case 0x38:
if (num2 == num33)
{
TileFrame(i, j - 1, false, false);
if (WorldGen.mergeDown)
{
num2 = type;
}
}
if (num7 == num33)
{
TileFrame(i, j + 1, false, false);
if (WorldGen.mergeUp)
{
num7 = type;
}
}
if (num4 == num33)
{
TileFrame(i - 1, j, false, false);
if (WorldGen.mergeRight)
{
num4 = type;
}
}
if (num5 == num33)
{
TileFrame(i + 1, j, false, false);
if (WorldGen.mergeLeft)
{
num5 = type;
}
}
if (index == num33)
{
index = type;
}
if (num3 == num33)
{
num3 = type;
}
if (num6 == num33)
{
num6 = type;
}
if (num8 == num33)
{
num8 = type;
}
break;
}
}
if (num2 == 2)
{
num2 = type;
}
if (num7 == 2)
{
num7 = type;
}
if (num4 == 2)
{
num4 = type;
}
if (num5 == 2)
{
num5 = type;
}
if (index == 2)
{
index = type;
}
if (num3 == 2)
{
num3 = type;
}
if (num6 == 2)
{
num6 = type;
}
if (num8 == 2)
{
num8 = type;
}
if (num2 == 0x17)
{
num2 = type;
}
if (num7 == 0x17)
{
num7 = type;
}
if (num4 == 0x17)
{
num4 = type;
}
if (num5 == 0x17)
{
num5 = type;
}
if (index == 0x17)
{
index = type;
}
if (num3 == 0x17)
{
num3 = type;
}
if (num6 == 0x17)
{
num6 = type;
}
if (num8 == 0x17)
{
num8 = type;
}
}
else if (type == 0x39)
{
if (num2 == 0x3a)
{
TileFrame(i, j - 1, false, false);
if (WorldGen.mergeDown)
{
num2 = type;
}
}
if (num7 == 0x3a)
{
TileFrame(i, j + 1, false, false);
if (WorldGen.mergeUp)
{
num7 = type;
}
}
if (num4 == 0x3a)
{
TileFrame(i - 1, j, false, false);
if (WorldGen.mergeRight)
{
num4 = type;
}
}
if (num5 == 0x3a)
{
TileFrame(i + 1, j, false, false);
if (WorldGen.mergeLeft)
{
num5 = type;
}
}
if (index == 0x3a)
{
index = type;
}
if (num3 == 0x3a)
{
num3 = type;
}
if (num6 == 0x3a)
{
num6 = type;
}
if (num8 == 0x3a)
{
num8 = type;
}
}
else if (type == 0x3b)
{
if (num2 == 60)
{
num2 = type;
}
if (num7 == 60)
{
num7 = type;
}
if (num4 == 60)
{
num4 = type;
}
if (num5 == 60)
{
num5 = type;
}
if (index == 60)
{
index = type;
}
if (num3 == 60)
{
num3 = type;
}
if (num6 == 60)
{
num6 = type;
}
if (num8 == 60)
{
num8 = type;
}
if (num2 == 70)
{
num2 = type;
}
if (num7 == 70)
{
num7 = type;
}
if (num4 == 70)
{
num4 = type;
}
if (num5 == 70)
{
num5 = type;
}
if (index == 70)
{
index = type;
}
if (num3 == 70)
{
num3 = type;
}
if (num6 == 70)
{
num6 = type;
}
if (num8 == 70)
{
num8 = type;
}
}
else if (type == 1)
{
if (num2 == 0x3b)
{
TileFrame(i, j - 1, false, false);
if (WorldGen.mergeDown)
{
num2 = type;
}
}
if (num7 == 0x3b)
{
TileFrame(i, j + 1, false, false);
if (WorldGen.mergeUp)
{
num7 = type;
}
}
if (num4 == 0x3b)
{
TileFrame(i - 1, j, false, false);
if (WorldGen.mergeRight)
{
num4 = type;
}
}
if (num5 == 0x3b)
{
TileFrame(i + 1, j, false, false);
if (WorldGen.mergeLeft)
{
num5 = type;
}
}
if (index == 0x3b)
{
index = type;
}
if (num3 == 0x3b)
{
num3 = type;
}
if (num6 == 0x3b)
{
num6 = type;
}
if (num8 == 0x3b)
{
num8 = type;
}
}
if ((((type == 1) || (type == 6)) || ((type == 7) || (type == 8))) || ((((type == 9) || (type == 0x16)) || ((type == 0x19) || (type == 0x25))) || (((type == 40) || (type == 0x35)) || (type == 0x38))))
{
for (int num34 = 0; num34 < 80; num34++)
{
switch (num34)
{
case 1:
case 6:
case 7:
case 8:
case 9:
case 0x16:
case 0x19:
case 0x25:
case 40:
case 0x35:
case 0x38:
if (num2 == 0)
{
num2 = -2;
}
if (num7 == 0)
{
num7 = -2;
}
if (num4 == 0)
{
num4 = -2;
}
if (num5 == 0)
{
num5 = -2;
}
if (index == 0)
{
index = -2;
}
if (num3 == 0)
{
num3 = -2;
}
if (num6 == 0)
{
num6 = -2;
}
if (num8 == 0)
{
num8 = -2;
}
break;
}
}
}
else if (type == 0x3a)
{
if (num2 == 0x39)
{
num2 = -2;
}
if (num7 == 0x39)
{
num7 = -2;
}
if (num4 == 0x39)
{
num4 = -2;
}
if (num5 == 0x39)
{
num5 = -2;
}
if (index == 0x39)
{
index = -2;
}
if (num3 == 0x39)
{
num3 = -2;
}
if (num6 == 0x39)
{
num6 = -2;
}
if (num8 == 0x39)
{
num8 = -2;
}
}
else if (type == 0x3b)
{
if (num2 == 1)
{
num2 = -2;
}
if (num7 == 1)
{
num7 = -2;
}
if (num4 == 1)
{
num4 = -2;
}
if (num5 == 1)
{
num5 = -2;
}
if (index == 1)
{
index = -2;
}
if (num3 == 1)
{
num3 = -2;
}
if (num6 == 1)
{
num6 = -2;
}
if (num8 == 1)
{
num8 = -2;
}
}
if ((type == 0x20) && (num7 == 0x17))
{
num7 = type;
}
if ((type == 0x45) && (num7 == 60))
{
num7 = type;
}
if (type == 0x33)
{
if ((num2 > -1) && !Main.tileNoAttach[num2])
{
num2 = type;
}
if ((num7 > -1) && !Main.tileNoAttach[num7])
{
num7 = type;
}
if ((num4 > -1) && !Main.tileNoAttach[num4])
{
num4 = type;
}
if ((num5 > -1) && !Main.tileNoAttach[num5])
{
num5 = type;
}
if ((index > -1) && !Main.tileNoAttach[index])
{
index = type;
}
if ((num3 > -1) && !Main.tileNoAttach[num3])
{
num3 = type;
}
if ((num6 > -1) && !Main.tileNoAttach[num6])
{
num6 = type;
}
if ((num8 > -1) && !Main.tileNoAttach[num8])
{
num8 = type;
}
}
if (((num2 > -1) && !Main.tileSolid[num2]) && (num2 != type))
{
num2 = -1;
}
if (((num7 > -1) && !Main.tileSolid[num7]) && (num7 != type))
{
num7 = -1;
}
if (((num4 > -1) && !Main.tileSolid[num4]) && (num4 != type))
{
num4 = -1;
}
if (((num5 > -1) && !Main.tileSolid[num5]) && (num5 != type))
{
num5 = -1;
}
if (((index > -1) && !Main.tileSolid[index]) && (index != type))
{
index = -1;
}
if (((num3 > -1) && !Main.tileSolid[num3]) && (num3 != type))
{
num3 = -1;
}
if (((num6 > -1) && !Main.tileSolid[num6]) && (num6 != type))
{
num6 = -1;
}
if (((num8 > -1) && !Main.tileSolid[num8]) && (num8 != type))
{
num8 = -1;
}
if (((type == 2) || (type == 0x17)) || ((type == 60) || (type == 70)))
{
int num35 = 0;
if ((type == 60) || (type == 70))
{
num35 = 0x3b;
}
else if (type == 2)
{
if (num2 == 0x17)
{
num2 = num35;
}
if (num7 == 0x17)
{
num7 = num35;
}
if (num4 == 0x17)
{
num4 = num35;
}
if (num5 == 0x17)
{
num5 = num35;
}
if (index == 0x17)
{
index = num35;
}
if (num3 == 0x17)
{
num3 = num35;
}
if (num6 == 0x17)
{
num6 = num35;
}
if (num8 == 0x17)
{
num8 = num35;
}
}
else if (type == 0x17)
{
if (num2 == 2)
{
num2 = num35;
}
if (num7 == 2)
{
num7 = num35;
}
if (num4 == 2)
{
num4 = num35;
}
if (num5 == 2)
{
num5 = num35;
}
if (index == 2)
{
index = num35;
}
if (num3 == 2)
{
num3 = num35;
}
if (num6 == 2)
{
num6 = num35;
}
if (num8 == 2)
{
num8 = num35;
}
}
if (((num2 != type) && (num2 != num35)) && ((num7 == type) || (num7 == num35)))
{
if ((num4 == num35) && (num5 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xc6;
break;
}
}
else if ((num4 == type) && (num5 == num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xc6;
break;
}
}
}
else if (((num7 != type) && (num7 != num35)) && ((num2 == type) || (num2 == num35)))
{
if ((num4 == num35) && (num5 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xd8;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xd8;
break;
}
}
else if ((num4 == type) && (num5 == num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xd8;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xd8;
break;
}
}
}
else if (((num4 != type) && (num4 != num35)) && ((num5 == type) || (num5 == num35)))
{
if ((num2 == num35) && (num7 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 180;
break;
}
}
else if ((num7 == type) && (num5 == num2))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x7e;
break;
}
}
}
else if (((num5 != type) && (num5 != num35)) && ((num4 == type) || (num4 == num35)))
{
if ((num2 == num35) && (num7 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 180;
break;
}
}
else if ((num7 == type) && (num5 == num2))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x7e;
break;
}
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == type)))
{
if (((index != type) && (num3 != type)) && ((num6 != type) && (num8 != type)))
{
if (num8 == num35)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x144;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x144;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x144;
break;
}
}
else if (num3 == num35)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x156;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x156;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x156;
break;
}
}
else if (num6 == num35)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 360;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 360;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 360;
break;
}
}
else if (index == num35)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x17a;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x17a;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x17a;
break;
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0xea;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 0xfc;
rectangle.Y = 0xea;
break;
}
}
}
else if ((index != type) && (num8 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x132;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x132;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x132;
break;
}
}
else if ((num3 != type) && (num6 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0x132;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 0x132;
break;
case 2:
rectangle.X = 0x7e;
rectangle.Y = 0x132;
break;
}
}
else if (((index != type) && (num3 == type)) && ((num6 == type) && (num8 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 180;
break;
}
}
else if (((index == type) && (num3 != type)) && ((num6 == type) && (num8 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 180;
break;
}
}
else if (((index == type) && (num3 == type)) && ((num6 != type) && (num8 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0xa2;
break;
}
}
else if (((index == type) && (num3 == type)) && ((num6 == type) && (num8 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xa2;
break;
}
}
}
else if ((((num2 == type) && (num7 == num35)) && ((num4 == type) && (num5 == type))) && ((index == -1) && (num3 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x12;
break;
}
}
else if ((((num2 == num35) && (num7 == type)) && ((num4 == type) && (num5 == type))) && ((num6 == -1) && (num8 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x24;
break;
}
}
else if ((((num2 == type) && (num7 == type)) && ((num4 == num35) && (num5 == type))) && ((num3 == -1) && (num8 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x24;
break;
}
}
else if ((((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == num35))) && ((index == -1) && (num6 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 180;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 == type) && (num7 == num35)) && ((num4 == type) && (num5 == type)))
{
if (num3 == -1)
{
if (index != -1)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 180;
break;
}
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 180;
break;
}
}
}
else if (((num2 == num35) && (num7 == type)) && ((num4 == type) && (num5 == type)))
{
if (num8 == -1)
{
if (num6 != -1)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xa2;
break;
}
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0xa2;
break;
}
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == num35)))
{
if (index == -1)
{
if (num6 != -1)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 180;
break;
}
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0xa2;
break;
}
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 == num35) && (num5 == type)))
{
if (num3 == -1)
{
if (num8 != -1)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 180;
break;
}
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xa2;
break;
}
}
}
else if (((((num2 == num35) && (num7 == type)) && ((num4 == type) && (num5 == type))) || (((num2 == type) && (num7 == num35)) && ((num4 == type) && (num5 == type)))) || ((((num2 == type) && (num7 == type)) && ((num4 == num35) && (num5 == type))) || (((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == num35)))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x12;
break;
}
}
if ((((num2 == type) || (num2 == num35)) && ((num7 == type) || (num7 == num35))) && (((num4 == type) || (num4 == num35)) && ((num5 == type) || (num5 == num35))))
{
if (((((index != type) && (index != num35)) && ((num3 == type) || (num3 == num35))) && ((num6 == type) || (num6 == num35))) && ((num8 == type) || (num8 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 180;
break;
}
}
else if (((((num3 != type) && (num3 != num35)) && ((index == type) || (index == num35))) && ((num6 == type) || (num6 == num35))) && ((num8 == type) || (num8 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 180;
break;
}
}
else if (((((num6 != type) && (num6 != num35)) && ((index == type) || (index == num35))) && ((num3 == type) || (num3 == num35))) && ((num8 == type) || (num8 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0xa2;
break;
}
}
else if (((((num8 != type) && (num8 != num35)) && ((index == type) || (index == num35))) && ((num6 == type) || (num6 == num35))) && ((num3 == type) || (num3 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xa2;
break;
}
}
}
if ((((num2 != num35) && (num2 != type)) && ((num7 == type) && (num4 != num35))) && (((num4 != type) && (num5 == type)) && ((num8 != num35) && (num8 != type))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 270;
break;
case 2:
rectangle.X = 0x7e;
rectangle.Y = 270;
break;
}
}
else if ((((num2 != num35) && (num2 != type)) && ((num7 == type) && (num4 == type))) && (((num5 != num35) && (num5 != type)) && ((num6 != num35) && (num6 != type))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 270;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 270;
break;
}
}
else if ((((num7 != num35) && (num7 != type)) && ((num2 == type) && (num4 != num35))) && (((num4 != type) && (num5 == type)) && ((num3 != num35) && (num3 != type))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0x120;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 0x7e;
rectangle.Y = 0x120;
break;
}
}
else if ((((num7 != num35) && (num7 != type)) && ((num2 == type) && (num4 == type))) && (((num5 != num35) && (num5 != type)) && ((index != num35) && (index != type))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0x120;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x120;
break;
}
}
else if (((((num2 != type) && (num2 != num35)) && ((num7 == type) && (num4 == type))) && (((num5 == type) && (num6 != type)) && ((num6 != num35) && (num8 != type)))) && (num8 != num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0xd8;
break;
case 2:
rectangle.X = 0xfc;
rectangle.Y = 0xd8;
break;
}
}
else if (((((num7 != type) && (num7 != num35)) && ((num2 == type) && (num4 == type))) && (((num5 == type) && (index != type)) && ((index != num35) && (num3 != type)))) && (num3 != num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0xfc;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0xfc;
break;
case 2:
rectangle.X = 0xfc;
rectangle.Y = 0xfc;
break;
}
}
else if (((((num4 != type) && (num4 != num35)) && ((num7 == type) && (num2 == type))) && (((num5 == type) && (num3 != type)) && ((num3 != num35) && (num8 != type)))) && (num8 != num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x7e;
rectangle.Y = 0xea;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 0xea;
rectangle.Y = 0xea;
break;
}
}
else if (((((num5 != type) && (num5 != num35)) && ((num7 == type) && (num2 == type))) && (((num4 == type) && (index != type)) && ((index != num35) && (num6 != type)))) && (num6 != num35))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0xea;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 270;
rectangle.Y = 0xea;
break;
}
}
else if ((((num2 != num35) && (num2 != type)) && ((num7 == num35) || (num7 == type))) && ((num4 == num35) && (num5 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 270;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 270;
break;
}
}
else if ((((num7 != num35) && (num7 != type)) && ((num2 == num35) || (num2 == type))) && ((num4 == num35) && (num5 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x120;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x120;
break;
}
}
else if ((((num4 != num35) && (num4 != type)) && ((num5 == num35) || (num5 == type))) && ((num2 == num35) && (num7 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 0;
rectangle.Y = 0x132;
break;
}
}
else if ((((num5 != num35) && (num5 != type)) && ((num4 == num35) || (num4 == type))) && ((num2 == num35) && (num7 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 0x12;
rectangle.Y = 0x132;
break;
}
}
else if (((num2 == type) && (num7 == num35)) && ((num4 == num35) && (num5 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0x120;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0x120;
break;
case 2:
rectangle.X = 0xea;
rectangle.Y = 0x120;
break;
}
}
else if (((num2 == num35) && (num7 == type)) && ((num4 == num35) && (num5 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 270;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 270;
break;
case 2:
rectangle.X = 0xea;
rectangle.Y = 270;
break;
}
}
else if (((num2 == num35) && (num7 == num35)) && ((num4 == type) && (num5 == num35)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0x132;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0x132;
break;
case 2:
rectangle.X = 0xea;
rectangle.Y = 0x132;
break;
}
}
else if (((num2 == num35) && (num7 == num35)) && ((num4 == num35) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0x132;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x132;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x132;
break;
}
}
if ((((num2 != type) && (num2 != num35)) && ((num7 == type) && (num4 == type))) && (num5 == type))
{
if (((num6 == num35) || (num6 == type)) && ((num8 != num35) && (num8 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x144;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x144;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0x144;
break;
}
}
else if (((num8 == num35) || (num8 == type)) && ((num6 != num35) && (num6 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x144;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x144;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x144;
break;
}
}
}
else if ((((num7 != type) && (num7 != num35)) && ((num2 == type) && (num4 == type))) && (num5 == type))
{
if (((index == num35) || (index == type)) && ((num3 != num35) && (num3 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x156;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x156;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0x156;
break;
}
}
else if (((num3 == num35) || (num3 == type)) && ((index != num35) && (index != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x156;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x156;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x156;
break;
}
}
}
else if ((((num4 != type) && (num4 != num35)) && ((num2 == type) && (num7 == type))) && (num5 == type))
{
if (((num3 == num35) || (num3 == type)) && ((num8 != num35) && (num8 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 360;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 360;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 360;
break;
}
}
else if (((num8 == num35) || (num8 == type)) && ((num3 != num35) && (num3 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 360;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 360;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 360;
break;
}
}
}
else if ((((num5 != type) && (num5 != num35)) && ((num2 == type) && (num7 == type))) && (num4 == type))
{
if (((index == num35) || (index == type)) && ((num6 != num35) && (num6 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x17a;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x17a;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0x17a;
break;
}
}
else if (((num6 == num35) || (num6 == type)) && ((index != num35) && (index != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x17a;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x17a;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x17a;
break;
}
}
}
if (((((num2 == type) || (num2 == num35)) && ((num7 == type) || (num7 == num35))) && (((num4 == type) || (num4 == num35)) && ((num5 == type) || (num5 == num35)))) && (((index != -1) && (num3 != -1)) && ((num6 != -1) && (num8 != -1))))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x12;
break;
}
}
if (num2 == num35)
{
num2 = -2;
}
if (num7 == num35)
{
num7 = -2;
}
if (num4 == num35)
{
num4 = -2;
}
if (num5 == num35)
{
num5 = -2;
}
if (index == num35)
{
index = -2;
}
if (num3 == num35)
{
num3 = -2;
}
if (num6 == num35)
{
num6 = -2;
}
if (num8 == num35)
{
num8 = -2;
}
}
if ((((((type == 1) || (type == 2)) || ((type == 6) || (type == 7))) || (((type == 8) || (type == 9)) || ((type == 0x16) || (type == 0x17)))) || ((((type == 0x19) || (type == 0x25)) || ((type == 40) || (type == 0x35))) || (((type == 0x38) || (type == 0x3a)) || (((type == 0x3b) || (type == 60)) || (type == 70))))) && ((rectangle.X == -1) && (rectangle.Y == -1)))
{
if ((num2 >= 0) && (num2 != type))
{
num2 = -1;
}
if ((num7 >= 0) && (num7 != type))
{
num7 = -1;
}
if ((num4 >= 0) && (num4 != type))
{
num4 = -1;
}
if ((num5 >= 0) && (num5 != type))
{
num5 = -1;
}
if (((num2 != -1) && (num7 != -1)) && ((num4 != -1) && (num5 != -1)))
{
if (((num2 == -2) && (num7 == type)) && ((num4 == type) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x6c;
break;
}
WorldGen.mergeUp = true;
}
else if (((num2 == type) && (num7 == -2)) && ((num4 == type) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 90;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 90;
break;
}
WorldGen.mergeDown = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == -2) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0x7e;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0xa2;
rectangle.Y = 0xa2;
break;
}
WorldGen.mergeLeft = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 0x7e;
break;
case 1:
rectangle.X = 0x90;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0xa2;
break;
}
WorldGen.mergeRight = true;
}
else if (((num2 == -2) && (num7 == type)) && ((num4 == -2) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xa2;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeLeft = true;
}
else if (((num2 == -2) && (num7 == type)) && ((num4 == type) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0xa2;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeRight = true;
}
else if (((num2 == type) && (num7 == -2)) && ((num4 == -2) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x24;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 180;
break;
}
WorldGen.mergeDown = true;
WorldGen.mergeLeft = true;
}
else if (((num2 == type) && (num7 == -2)) && ((num4 == type) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 180;
break;
}
WorldGen.mergeDown = true;
WorldGen.mergeRight = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == -2) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 180;
rectangle.Y = 0x7e;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0xa2;
break;
}
WorldGen.mergeLeft = true;
WorldGen.mergeRight = true;
}
else if (((num2 == -2) && (num7 == -2)) && ((num4 == type) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x90;
rectangle.Y = 180;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 180;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeDown = true;
}
else if (((num2 == -2) && (num7 == type)) && ((num4 == -2) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeLeft = true;
WorldGen.mergeRight = true;
}
else if (((num2 == type) && (num7 == -2)) && ((num4 == -2) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 180;
break;
}
WorldGen.mergeDown = true;
WorldGen.mergeLeft = true;
WorldGen.mergeRight = true;
}
else if (((num2 == -2) && (num7 == -2)) && ((num4 == type) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xd8;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0xd8;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeDown = true;
WorldGen.mergeRight = true;
}
else if (((num2 == -2) && (num7 == -2)) && ((num4 == -2) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xd8;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0xd8;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeDown = true;
WorldGen.mergeLeft = true;
}
else if (((num2 == -2) && (num7 == -2)) && ((num4 == -2) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0xc6;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeDown = true;
WorldGen.mergeLeft = true;
WorldGen.mergeRight = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == type) && (num5 == type)))
{
if (index == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0x12;
rectangle.Y = 180;
break;
}
}
if (num3 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x6c;
break;
case 1:
rectangle.X = 0;
rectangle.Y = 0x90;
break;
case 2:
rectangle.X = 0;
rectangle.Y = 180;
break;
}
}
if (num6 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0x12;
rectangle.Y = 0xa2;
break;
}
}
if (num8 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0;
rectangle.Y = 0x7e;
break;
case 2:
rectangle.X = 0;
rectangle.Y = 0xa2;
break;
}
}
}
}
else
{
if (((type != 2) && (type != 0x17)) && ((type != 60) && (type != 70)))
{
if (((num2 == -1) && (num7 == -2)) && ((num4 == type) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xea;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xfc;
rectangle.Y = 0;
break;
case 2:
rectangle.X = 270;
rectangle.Y = 0;
break;
}
WorldGen.mergeDown = true;
}
else if (((num2 == -2) && (num7 == -1)) && ((num4 == type) && (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xea;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0xfc;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 270;
rectangle.Y = 0x12;
break;
}
WorldGen.mergeUp = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == -1) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xea;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0xfc;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 270;
rectangle.Y = 0x24;
break;
}
WorldGen.mergeRight = true;
}
else if (((num2 == type) && (num7 == type)) && ((num4 == -2) && (num5 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xea;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0xfc;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 270;
rectangle.Y = 0x36;
break;
}
WorldGen.mergeLeft = true;
}
}
if (((num2 != -1) && (num7 != -1)) && ((num4 == -1) && (num5 == type)))
{
if ((num2 == -2) && (num7 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
}
else if ((num7 == -2) && (num2 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeDown = true;
}
}
else if (((num2 != -1) && (num7 != -1)) && ((num4 == type) && (num5 == -1)))
{
if ((num2 == -2) && (num7 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
}
else if ((num7 == -2) && (num2 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeDown = true;
}
}
else if (((num2 == -1) && (num7 == type)) && ((num4 != -1) && (num5 != -1)))
{
if ((num4 == -2) && (num5 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xc6;
break;
}
WorldGen.mergeLeft = true;
}
else if ((num5 == -2) && (num4 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xc6;
break;
}
WorldGen.mergeRight = true;
}
}
else if (((num2 == type) && (num7 == -1)) && ((num4 != -1) && (num5 != -1)))
{
if ((num4 == -2) && (num5 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xd8;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xd8;
break;
}
WorldGen.mergeLeft = true;
}
else if ((num5 == -2) && (num4 == type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xd8;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xd8;
break;
}
WorldGen.mergeRight = true;
}
}
else if (((num2 != -1) && (num7 != -1)) && ((num4 == -1) && (num5 == -1)))
{
if ((num2 == -2) && (num7 == -2))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0xd8;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 0x6c;
rectangle.Y = 0xfc;
break;
}
WorldGen.mergeUp = true;
WorldGen.mergeDown = true;
}
else if (num2 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x7e;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0x7e;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
}
else if (num7 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x7e;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0x7e;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeDown = true;
}
}
else if (((num2 == -1) && (num7 == -1)) && ((num4 != -1) && (num5 != -1)))
{
if ((num4 == -2) && (num5 == -2))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0xc6;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0xc6;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0xc6;
break;
}
WorldGen.mergeLeft = true;
WorldGen.mergeRight = true;
}
else if (num4 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xfc;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xfc;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xfc;
break;
}
WorldGen.mergeLeft = true;
}
else if (num5 == -2)
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xfc;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xfc;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xfc;
break;
}
WorldGen.mergeRight = true;
}
}
else if (((num2 == -2) && (num7 == -1)) && ((num4 == -1) && (num5 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x90;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 0xa2;
break;
case 2:
rectangle.X = 0x6c;
rectangle.Y = 180;
break;
}
WorldGen.mergeUp = true;
}
else if (((num2 == -1) && (num7 == -2)) && ((num4 == -1) && (num5 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 90;
break;
case 1:
rectangle.X = 0x6c;
rectangle.Y = 0x6c;
break;
case 2:
rectangle.X = 0x6c;
rectangle.Y = 0x7e;
break;
}
WorldGen.mergeDown = true;
}
else if (((num2 == -1) && (num7 == -1)) && ((num4 == -2) && (num5 == -1)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0xea;
break;
case 1:
rectangle.X = 0x12;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 0x24;
rectangle.Y = 0xea;
break;
}
WorldGen.mergeLeft = true;
}
else if (((num2 == -1) && (num7 == -1)) && ((num4 == -1) && (num5 == -2)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x36;
rectangle.Y = 0xea;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0xea;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0xea;
break;
}
WorldGen.mergeRight = true;
}
}
}
if ((rectangle.X < 0) || (rectangle.Y < 0))
{
if (((type == 2) || (type == 0x17)) || ((type == 60) || (type == 70)))
{
if (num2 == -2)
{
num2 = type;
}
if (num7 == -2)
{
num7 = type;
}
if (num4 == -2)
{
num4 = type;
}
if (num5 == -2)
{
num5 = type;
}
if (index == -2)
{
index = type;
}
if (num3 == -2)
{
num3 = type;
}
if (num6 == -2)
{
num6 = type;
}
if (num8 == -2)
{
num8 = type;
}
}
if (((num2 == type) && (num7 == type)) && ((num4 == type) & (num5 == type)))
{
if ((index != type) && (num3 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x12;
break;
}
}
else if ((num6 != type) && (num8 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x24;
break;
}
}
else if ((index != type) && (num6 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 180;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x24;
break;
}
}
else if ((num3 != type) && (num8 != type))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x24;
break;
}
}
else
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x12;
break;
}
}
}
else if (((num2 != type) && (num7 == type)) && ((num4 == type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0;
break;
}
}
else if (((num2 == type) && (num7 != type)) && ((num4 == type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 != type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 == type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != type) && (num7 == type)) && ((num4 != type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 != type) && (num7 == type)) && ((num4 == type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 == type) && (num7 != type)) && ((num4 != type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 == type) && (num7 != type)) && ((num4 == type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 == type) && (num7 == type)) && ((num4 != type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != type) && (num7 != type)) && ((num4 == type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 != type) && (num7 == type)) && ((num4 != type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0;
break;
}
}
else if (((num2 == type) && (num7 != type)) && ((num4 != type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 != type) && (num7 != type)) && ((num4 != type) & (num5 == type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xa2;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != type) && (num7 != type)) && ((num4 == type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xd8;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xd8;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != type) && (num7 != type)) && ((num4 != type) & (num5 != type)))
{
switch (frameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x36;
break;
}
}
}
if ((rectangle.X <= -1) || (rectangle.Y <= -1))
{
if (frameNumber <= 0)
{
rectangle.X = 0x12;
rectangle.Y = 0x12;
}
if (frameNumber == 1)
{
rectangle.X = 0x24;
rectangle.Y = 0x12;
}
if (frameNumber >= 2)
{
rectangle.X = 0x36;
rectangle.Y = 0x12;
}
}
Main.tile[i, j].frameX = (short) rectangle.X;
Main.tile[i, j].frameY = (short) rectangle.Y;
if ((type == 0x34) || (type == 0x3e))
{
if (Main.tile[i, j - 1] != null)
{
if (!Main.tile[i, j - 1].active)
{
num2 = -1;
}
else
{
num2 = Main.tile[i, j - 1].type;
}
}
else
{
num2 = type;
}
if (((num2 != type) && (num2 != 2)) && (num2 != 60))
{
KillTile(i, j, false, false, false);
}
}
if (type == 0x35)
{
if (Main.netMode == 0)
{
if ((Main.tile[i, j + 1] != null) && !Main.tile[i, j + 1].active)
{
bool flag3 = true;
if (Main.tile[i, j - 1].active && (Main.tile[i, j - 1].type == 0x15))
{
flag3 = false;
}
if (flag3)
{
Main.tile[i, j].active = false;
Projectile.NewProjectile((float) ((i * 0x10) + 8), (float) ((j * 0x10) + 8), 0f, 0.41f, 0x1f, 10, 0f, Main.myPlayer);
SquareTileFrame(i, j, true);
}
}
}
else if (((Main.netMode == 2) && (Main.tile[i, j + 1] != null)) && !Main.tile[i, j + 1].active)
{
bool flag4 = true;
if (Main.tile[i, j - 1].active && (Main.tile[i, j - 1].type == 0x15))
{
flag4 = false;
}
if (flag4)
{
Main.tile[i, j].active = false;
int num36 = Projectile.NewProjectile((float) ((i * 0x10) + 8), (float) ((j * 0x10) + 8), 0f, 0.41f, 0x1f, 10, 0f, Main.myPlayer);
Main.projectile[num36].velocity.Y = 0.5f;
Main.projectile[num36].position.Y += 2f;
NetMessage.SendTileSquare(-1, i, j, 1);
SquareTileFrame(i, j, true);
}
}
}
if (((rectangle.X != frameX) && (rectangle.Y != frameY)) && ((frameX >= 0) && (frameY >= 0)))
{
bool mergeUp = WorldGen.mergeUp;
bool mergeDown = WorldGen.mergeDown;
bool mergeLeft = WorldGen.mergeLeft;
bool mergeRight = WorldGen.mergeRight;
TileFrame(i - 1, j, false, false);
TileFrame(i + 1, j, false, false);
TileFrame(i, j - 1, false, false);
TileFrame(i, j + 1, false, false);
WorldGen.mergeUp = mergeUp;
WorldGen.mergeDown = mergeDown;
WorldGen.mergeLeft = mergeLeft;
WorldGen.mergeRight = mergeRight;
}
}
}
}
}
}
}
public static void TileRunner(int i, int j, double strength, int steps, int type, bool addTile = false, float speedX = 0f, float speedY = 0f, bool noYChange = false, bool overRide = true)
{
Vector2 vector;
Vector2 vector2;
double num5 = strength;
float num6 = steps;
vector.X = i;
vector.Y = j;
vector2.X = genRand.Next(-10, 11) * 0.1f;
vector2.Y = genRand.Next(-10, 11) * 0.1f;
if ((speedX != 0f) || (speedY != 0f))
{
vector2.X = speedX;
vector2.Y = speedY;
}
while ((num5 > 0.0) && (num6 > 0f))
{
num5 = strength * (num6 / ((float) steps));
num6--;
int num = (int) (vector.X - (num5 * 0.5));
int maxTilesX = (int) (vector.X + (num5 * 0.5));
int num2 = (int) (vector.Y - (num5 * 0.5));
int maxTilesY = (int) (vector.Y + (num5 * 0.5));
if (num < 0)
{
num = 0;
}
if (maxTilesX > Main.maxTilesX)
{
maxTilesX = Main.maxTilesX;
}
if (num2 < 0)
{
num2 = 0;
}
if (maxTilesY > Main.maxTilesY)
{
maxTilesY = Main.maxTilesY;
}
for (int k = num; k < maxTilesX; k++)
{
for (int m = num2; m < maxTilesY; m++)
{
if ((Math.Abs((float) (k - vector.X)) + Math.Abs((float) (m - vector.Y))) < ((strength * 0.5) * (1.0 + (genRand.Next(-10, 11) * 0.015))))
{
if (type < 0)
{
if (((type == -2) && Main.tile[k, m].active) && ((m < waterLine) || (m > lavaLine)))
{
Main.tile[k, m].liquid = 0xff;
if (m > lavaLine)
{
Main.tile[k, m].lava = true;
}
}
Main.tile[k, m].active = false;
}
else
{
if (((overRide || !Main.tile[k, m].active) && ((type != 40) || (Main.tile[k, m].type != 0x35))) && ((!Main.tileStone[type] || (Main.tile[k, m].type == 1)) && (Main.tile[k, m].type != 0x2d)))
{
Main.tile[k, m].type = (byte) type;
}
if (addTile)
{
Main.tile[k, m].active = true;
Main.tile[k, m].liquid = 0;
Main.tile[k, m].lava = false;
}
if (noYChange && (m < Main.worldSurface))
{
Main.tile[k, m].wall = 2;
}
if (((type == 0x3b) && (m > waterLine)) && (Main.tile[k, m].liquid > 0))
{
Main.tile[k, m].lava = false;
Main.tile[k, m].liquid = 0;
}
}
}
}
}
vector += vector2;
if (num5 > 50.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 100.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 150.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 200.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 250.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 300.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 400.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 500.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 600.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 700.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 800.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (num5 > 900.0)
{
vector += vector2;
num6--;
vector2.Y += genRand.Next(-10, 11) * 0.05f;
vector2.X += genRand.Next(-10, 11) * 0.05f;
}
}
}
}
}
}
}
}
}
}
}
}
vector2.X += genRand.Next(-10, 11) * 0.05f;
if (vector2.X > 1f)
{
vector2.X = 1f;
}
if (vector2.X < -1f)
{
vector2.X = -1f;
}
if (!noYChange)
{
vector2.Y += genRand.Next(-10, 11) * 0.05f;
if (vector2.Y > 1f)
{
vector2.Y = 1f;
}
if (vector2.Y < -1f)
{
vector2.Y = -1f;
}
}
else if (num5 < 3.0)
{
if (vector2.Y > 1f)
{
vector2.Y = 1f;
}
if (vector2.Y < -1f)
{
vector2.Y = -1f;
}
}
if (type == 0x3b)
{
if (vector2.Y > 0.5)
{
vector2.Y = 0.5f;
}
if (vector2.Y < -0.5)
{
vector2.Y = -0.5f;
}
if (vector.Y < (Main.rockLayer + 100.0))
{
vector2.Y = 1f;
}
if (vector.Y > (Main.maxTilesY - 300))
{
vector2.Y = -1f;
}
}
}
}
public static void UpdateWorld()
{
Liquid.skipCount++;
if (Liquid.skipCount > 1)
{
Liquid.UpdateLiquid();
Liquid.skipCount = 0;
}
float num = 4E-05f;
float num2 = 2E-05f;
bool flag = false;
spawnDelay++;
if (Main.invasionType > 0)
{
spawnDelay = 0;
}
if (spawnDelay >= 20)
{
flag = true;
spawnDelay = 0;
for (int k = 0; k < 0x3e8; k++)
{
if ((Main.npc[k].active && Main.npc[k].homeless) && Main.npc[k].townNPC)
{
spawnNPC = Main.npc[k].type;
break;
}
}
}
for (int i = 0; i < ((Main.maxTilesX * Main.maxTilesY) * num); i++)
{
int num5 = genRand.Next(10, Main.maxTilesX - 10);
int num6 = genRand.Next(10, ((int) Main.worldSurface) - 1);
int num7 = num5 - 1;
int num8 = num5 + 2;
int num9 = num6 - 1;
int num10 = num6 + 2;
if (num7 < 10)
{
num7 = 10;
}
if (num8 > (Main.maxTilesX - 10))
{
num8 = Main.maxTilesX - 10;
}
if (num9 < 10)
{
num9 = 10;
}
if (num10 > (Main.maxTilesY - 10))
{
num10 = Main.maxTilesY - 10;
}
if (Main.tile[num5, num6] != null)
{
if (Main.tile[num5, num6].liquid > 0x20)
{
if (Main.tile[num5, num6].active && (((Main.tile[num5, num6].type == 3) || (Main.tile[num5, num6].type == 20)) || (((Main.tile[num5, num6].type == 0x18) || (Main.tile[num5, num6].type == 0x1b)) || (Main.tile[num5, num6].type == 0x49))))
{
KillTile(num5, num6, false, false, false);
if (Main.netMode == 2)
{
NetMessage.SendData(0x11, -1, -1, "", 0, (float) num5, (float) num6, 0f);
}
}
}
else if (Main.tile[num5, num6].active)
{
if (Main.tile[num5, num6].type == 0x4e)
{
if (!Main.tile[num5, num9].active)
{
PlaceTile(num5, num9, 3, true, false, -1);
if ((Main.netMode == 2) && Main.tile[num5, num9].active)
{
NetMessage.SendTileSquare(-1, num5, num9, 1);
}
}
}
else if (((Main.tile[num5, num6].type == 2) || (Main.tile[num5, num6].type == 0x17)) || (Main.tile[num5, num6].type == 0x20))
{
int type = Main.tile[num5, num6].type;
if ((!Main.tile[num5, num9].active && (genRand.Next(10) == 0)) && (type == 2))
{
PlaceTile(num5, num9, 3, true, false, -1);
if ((Main.netMode == 2) && Main.tile[num5, num9].active)
{
NetMessage.SendTileSquare(-1, num5, num9, 1);
}
}
if ((!Main.tile[num5, num9].active && (genRand.Next(10) == 0)) && (type == 0x17))
{
PlaceTile(num5, num9, 0x18, true, false, -1);
if ((Main.netMode == 2) && Main.tile[num5, num9].active)
{
NetMessage.SendTileSquare(-1, num5, num9, 1);
}
}
bool flag2 = false;
for (int m = num7; m < num8; m++)
{
for (int n = num9; n < num10; n++)
{
if (((num5 != m) || (num6 != n)) && Main.tile[m, n].active)
{
if (type == 0x20)
{
type = 0x17;
}
if ((Main.tile[m, n].type == 0) || ((type == 0x17) && (Main.tile[m, n].type == 2)))
{
SpreadGrass(m, n, 0, type, false);
if (type == 0x17)
{
SpreadGrass(m, n, 2, type, false);
}
if (Main.tile[m, n].type == type)
{
SquareTileFrame(m, n, true);
flag2 = true;
}
}
}
}
}
if ((Main.netMode == 2) && flag2)
{
NetMessage.SendTileSquare(-1, num5, num6, 3);
}
}
else if (((Main.tile[num5, num6].type == 20) && !PlayerLOS(num5, num6)) && (genRand.Next(5) == 0))
{
GrowTree(num5, num6);
}
if (((Main.tile[num5, num6].type == 3) && (genRand.Next(10) == 0)) && (Main.tile[num5, num6].frameX < 0x90))
{
Main.tile[num5, num6].type = 0x49;
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num5, num6, 3);
}
}
if ((Main.tile[num5, num6].type == 0x20) && (genRand.Next(3) == 0))
{
int num14 = num5;
int num15 = num6;
int num16 = 0;
if (Main.tile[num14 + 1, num15].active && (Main.tile[num14 + 1, num15].type == 0x20))
{
num16++;
}
if (Main.tile[num14 - 1, num15].active && (Main.tile[num14 - 1, num15].type == 0x20))
{
num16++;
}
if (Main.tile[num14, num15 + 1].active && (Main.tile[num14, num15 + 1].type == 0x20))
{
num16++;
}
if (Main.tile[num14, num15 - 1].active && (Main.tile[num14, num15 - 1].type == 0x20))
{
num16++;
}
if ((num16 < 3) || (Main.tile[num5, num6].type == 0x17))
{
switch (genRand.Next(4))
{
case 0:
num15--;
break;
case 1:
num15++;
break;
case 2:
num14--;
break;
case 3:
num14++;
break;
}
if (!Main.tile[num14, num15].active)
{
num16 = 0;
if (Main.tile[num14 + 1, num15].active && (Main.tile[num14 + 1, num15].type == 0x20))
{
num16++;
}
if (Main.tile[num14 - 1, num15].active && (Main.tile[num14 - 1, num15].type == 0x20))
{
num16++;
}
if (Main.tile[num14, num15 + 1].active && (Main.tile[num14, num15 + 1].type == 0x20))
{
num16++;
}
if (Main.tile[num14, num15 - 1].active && (Main.tile[num14, num15 - 1].type == 0x20))
{
num16++;
}
if (num16 < 2)
{
int num18 = 7;
int num19 = num14 - num18;
int num20 = num14 + num18;
int num21 = num15 - num18;
int num22 = num15 + num18;
bool flag3 = false;
for (int num23 = num19; num23 < num20; num23++)
{
for (int num24 = num21; num24 < num22; num24++)
{
if ((((((Math.Abs((int) (num23 - num14)) * 2) + Math.Abs((int) (num24 - num15))) < 9) && Main.tile[num23, num24].active) && ((Main.tile[num23, num24].type == 0x17) && Main.tile[num23, num24 - 1].active)) && ((Main.tile[num23, num24 - 1].type == 0x20) && (Main.tile[num23, num24 - 1].liquid == 0)))
{
flag3 = true;
break;
}
}
}
if (flag3)
{
Main.tile[num14, num15].type = 0x20;
Main.tile[num14, num15].active = true;
SquareTileFrame(num14, num15, true);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num14, num15, 3);
}
}
}
}
}
}
if (((Main.tile[num5, num6].type == 2) || (Main.tile[num5, num6].type == 0x34)) && (((genRand.Next(5) == 0) && !Main.tile[num5, num6 + 1].active) && !Main.tile[num5, num6 + 1].lava))
{
bool flag4 = false;
for (int num25 = num6; num25 > (num6 - 10); num25--)
{
if (Main.tile[num5, num25].active && (Main.tile[num5, num25].type == 2))
{
flag4 = true;
break;
}
}
if (flag4)
{
int num26 = num5;
int num27 = num6 + 1;
Main.tile[num26, num27].type = 0x34;
Main.tile[num26, num27].active = true;
SquareTileFrame(num26, num27, true);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num26, num27, 3);
}
}
}
}
else if (flag && (spawnNPC > 0))
{
SpawnNPC(num5, num6);
}
}
}
for (int j = 0; j < ((Main.maxTilesX * Main.maxTilesY) * num2); j++)
{
int num29 = genRand.Next(10, Main.maxTilesX - 10);
int num30 = genRand.Next(((int) Main.worldSurface) + 2, Main.maxTilesY - 200);
int num31 = num29 - 1;
int num32 = num29 + 2;
int num33 = num30 - 1;
int num34 = num30 + 2;
if (num31 < 10)
{
num31 = 10;
}
if (num32 > (Main.maxTilesX - 10))
{
num32 = Main.maxTilesX - 10;
}
if (num33 < 10)
{
num33 = 10;
}
if (num34 > (Main.maxTilesY - 10))
{
num34 = Main.maxTilesY - 10;
}
if (Main.tile[num29, num30] != null)
{
if (Main.tile[num29, num30].liquid > 0x20)
{
if (Main.tile[num29, num30].active && ((Main.tile[num29, num30].type == 0x3d) || (Main.tile[num29, num30].type == 0x4a)))
{
KillTile(num29, num30, false, false, false);
if (Main.netMode == 2)
{
NetMessage.SendData(0x11, -1, -1, "", 0, (float) num29, (float) num30, 0f);
}
}
continue;
}
if (Main.tile[num29, num30].active)
{
if (Main.tile[num29, num30].type == 60)
{
int grass = Main.tile[num29, num30].type;
if (!Main.tile[num29, num33].active && (genRand.Next(10) == 0))
{
PlaceTile(num29, num33, 0x3d, true, false, -1);
if ((Main.netMode == 2) && Main.tile[num29, num33].active)
{
NetMessage.SendTileSquare(-1, num29, num33, 1);
}
}
bool flag5 = false;
for (int num36 = num31; num36 < num32; num36++)
{
for (int num37 = num33; num37 < num34; num37++)
{
if (((num29 != num36) || (num30 != num37)) && (Main.tile[num36, num37].active && (Main.tile[num36, num37].type == 0x3b)))
{
SpreadGrass(num36, num37, 0x3b, grass, false);
if (Main.tile[num36, num37].type == grass)
{
SquareTileFrame(num36, num37, true);
flag5 = true;
}
}
}
}
if ((Main.netMode == 2) && flag5)
{
NetMessage.SendTileSquare(-1, num29, num30, 3);
}
}
if (((Main.tile[num29, num30].type == 0x3d) && (genRand.Next(3) == 0)) && (Main.tile[num29, num30].frameX < 0x90))
{
Main.tile[num29, num30].type = 0x4a;
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num29, num30, 3);
}
}
if (((Main.tile[num29, num30].type == 60) || (Main.tile[num29, num30].type == 0x3e)) && (((genRand.Next(5) == 0) && !Main.tile[num29, num30 + 1].active) && !Main.tile[num29, num30 + 1].lava))
{
bool flag6 = false;
for (int num38 = num30; num38 > (num30 - 10); num38--)
{
if (Main.tile[num29, num38].active && (Main.tile[num29, num38].type == 60))
{
flag6 = true;
break;
}
}
if (flag6)
{
int num39 = num29;
int num40 = num30 + 1;
Main.tile[num39, num40].type = 0x3e;
Main.tile[num39, num40].active = true;
SquareTileFrame(num39, num40, true);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num39, num40, 3);
}
}
}
if ((Main.tile[num29, num30].type == 0x45) && (genRand.Next(3) == 0))
{
int num41 = num29;
int num42 = num30;
int num43 = 0;
if (Main.tile[num41 + 1, num42].active && (Main.tile[num41 + 1, num42].type == 0x45))
{
num43++;
}
if (Main.tile[num41 - 1, num42].active && (Main.tile[num41 - 1, num42].type == 0x45))
{
num43++;
}
if (Main.tile[num41, num42 + 1].active && (Main.tile[num41, num42 + 1].type == 0x45))
{
num43++;
}
if (Main.tile[num41, num42 - 1].active && (Main.tile[num41, num42 - 1].type == 0x45))
{
num43++;
}
if ((num43 < 3) || (Main.tile[num29, num30].type == 60))
{
switch (genRand.Next(4))
{
case 0:
num42--;
break;
case 1:
num42++;
break;
case 2:
num41--;
break;
case 3:
num41++;
break;
}
if (!Main.tile[num41, num42].active)
{
num43 = 0;
if (Main.tile[num41 + 1, num42].active && (Main.tile[num41 + 1, num42].type == 0x45))
{
num43++;
}
if (Main.tile[num41 - 1, num42].active && (Main.tile[num41 - 1, num42].type == 0x45))
{
num43++;
}
if (Main.tile[num41, num42 + 1].active && (Main.tile[num41, num42 + 1].type == 0x45))
{
num43++;
}
if (Main.tile[num41, num42 - 1].active && (Main.tile[num41, num42 - 1].type == 0x45))
{
num43++;
}
if (num43 < 2)
{
int num45 = 7;
int num46 = num41 - num45;
int num47 = num41 + num45;
int num48 = num42 - num45;
int num49 = num42 + num45;
bool flag7 = false;
for (int num50 = num46; num50 < num47; num50++)
{
for (int num51 = num48; num51 < num49; num51++)
{
if ((((((Math.Abs((int) (num50 - num41)) * 2) + Math.Abs((int) (num51 - num42))) < 9) && Main.tile[num50, num51].active) && ((Main.tile[num50, num51].type == 60) && Main.tile[num50, num51 - 1].active)) && ((Main.tile[num50, num51 - 1].type == 0x45) && (Main.tile[num50, num51 - 1].liquid == 0)))
{
flag7 = true;
break;
}
}
}
if (flag7)
{
Main.tile[num41, num42].type = 0x45;
Main.tile[num41, num42].active = true;
SquareTileFrame(num41, num42, true);
if (Main.netMode == 2)
{
NetMessage.SendTileSquare(-1, num41, num42, 3);
}
}
}
}
}
}
if (Main.tile[num29, num30].type == 70)
{
int num52 = Main.tile[num29, num30].type;
if (!Main.tile[num29, num33].active && (genRand.Next(10) == 0))
{
PlaceTile(num29, num33, 0x47, true, false, -1);
if ((Main.netMode == 2) && Main.tile[num29, num33].active)
{
NetMessage.SendTileSquare(-1, num29, num33, 1);
}
}
bool flag8 = false;
for (int num53 = num31; num53 < num32; num53++)
{
for (int num54 = num33; num54 < num34; num54++)
{
if (((num29 != num53) || (num30 != num54)) && (Main.tile[num53, num54].active && (Main.tile[num53, num54].type == 0x3b)))
{
SpreadGrass(num53, num54, 0x3b, num52, false);
if (Main.tile[num53, num54].type == num52)
{
SquareTileFrame(num53, num54, true);
flag8 = true;
}
}
}
}
if ((Main.netMode == 2) && flag8)
{
NetMessage.SendTileSquare(-1, num29, num30, 3);
}
}
continue;
}
if (flag && (spawnNPC > 0))
{
SpawnNPC(num29, num30);
}
}
}
if (!Main.dayTime)
{
float num55 = Main.maxTilesX / 0x1068;
if (Main.rand.Next(0x1f40) < (10f * num55))
{
int num56 = 12;
int num57 = Main.rand.Next(Main.maxTilesX - 50) + 100;
num57 *= 0x10;
int num58 = Main.rand.Next((int) (Main.maxTilesY * 0.05)) * 0x10;
Vector2 vector = new Vector2((float) num57, (float) num58);
float speedX = Main.rand.Next(-100, 0x65);
float speedY = Main.rand.Next(200) + 100;
float num61 = (float) Math.Sqrt((double) ((speedX * speedX) + (speedY * speedY)));
num61 = ((float) num56) / num61;
speedX *= num61;
speedY *= num61;
Projectile.NewProjectile(vector.X, vector.Y, speedX, speedY, 12, 0x3e8, 10f, Main.myPlayer);
}
}
}
public static void WallFrame(int i, int j, bool resetFrame = false)
{
if ((((i >= 0) && (j >= 0)) && ((i < Main.maxTilesX) && (j < Main.maxTilesY))) && ((Main.tile[i, j] != null) && (Main.tile[i, j].wall > 0)))
{
int num = -1;
int num2 = -1;
int num3 = -1;
int num4 = -1;
int num5 = -1;
int num6 = -1;
int num7 = -1;
int num8 = -1;
int wall = Main.tile[i, j].wall;
if (wall != 0)
{
Rectangle rectangle;
byte wallFrameX = Main.tile[i, j].wallFrameX;
byte wallFrameY = Main.tile[i, j].wallFrameY;
rectangle.X = -1;
rectangle.Y = -1;
if ((i - 1) < 0)
{
num = wall;
num4 = wall;
num6 = wall;
}
if ((i + 1) >= Main.maxTilesX)
{
num3 = wall;
num5 = wall;
num8 = wall;
}
if ((j - 1) < 0)
{
num = wall;
num2 = wall;
num3 = wall;
}
if ((j + 1) >= Main.maxTilesY)
{
num6 = wall;
num7 = wall;
num8 = wall;
}
if (((i - 1) >= 0) && (Main.tile[i - 1, j] != null))
{
num4 = Main.tile[i - 1, j].wall;
}
if (((i + 1) < Main.maxTilesX) && (Main.tile[i + 1, j] != null))
{
num5 = Main.tile[i + 1, j].wall;
}
if (((j - 1) >= 0) && (Main.tile[i, j - 1] != null))
{
num2 = Main.tile[i, j - 1].wall;
}
if (((j + 1) < Main.maxTilesY) && (Main.tile[i, j + 1] != null))
{
num7 = Main.tile[i, j + 1].wall;
}
if ((((i - 1) >= 0) && ((j - 1) >= 0)) && (Main.tile[i - 1, j - 1] != null))
{
num = Main.tile[i - 1, j - 1].wall;
}
if ((((i + 1) < Main.maxTilesX) && ((j - 1) >= 0)) && (Main.tile[i + 1, j - 1] != null))
{
num3 = Main.tile[i + 1, j - 1].wall;
}
if ((((i - 1) >= 0) && ((j + 1) < Main.maxTilesY)) && (Main.tile[i - 1, j + 1] != null))
{
num6 = Main.tile[i - 1, j + 1].wall;
}
if ((((i + 1) < Main.maxTilesX) && ((j + 1) < Main.maxTilesY)) && (Main.tile[i + 1, j + 1] != null))
{
num8 = Main.tile[i + 1, j + 1].wall;
}
if (wall == 2)
{
if (j == ((int) Main.worldSurface))
{
num7 = wall;
num6 = wall;
num8 = wall;
}
else if (j >= ((int) Main.worldSurface))
{
num7 = wall;
num6 = wall;
num8 = wall;
num2 = wall;
num = wall;
num3 = wall;
num4 = wall;
num5 = wall;
}
}
int wallFrameNumber = 0;
if (resetFrame)
{
wallFrameNumber = genRand.Next(0, 3);
Main.tile[i, j].wallFrameNumber = (byte) wallFrameNumber;
}
else
{
wallFrameNumber = Main.tile[i, j].wallFrameNumber;
}
if ((rectangle.X < 0) || (rectangle.Y < 0))
{
if (((num2 == wall) && (num7 == wall)) && ((num4 == wall) & (num5 == wall)))
{
if ((num != wall) && (num3 != wall))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x12;
break;
}
}
else if ((num6 != wall) && (num8 != wall))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x24;
break;
}
}
else if ((num != wall) && (num6 != wall))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 180;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 180;
rectangle.Y = 0x24;
break;
}
}
else if ((num3 != wall) && (num8 != wall))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0xc6;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xc6;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x24;
break;
}
}
else
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x12;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x12;
break;
}
}
}
else if (((num2 != wall) && (num7 == wall)) && ((num4 == wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0;
break;
}
}
else if (((num2 == wall) && (num7 != wall)) && ((num4 == wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x24;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x24;
break;
case 2:
rectangle.X = 0x36;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 == wall) && (num7 == wall)) && ((num4 != wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 == wall) && (num7 == wall)) && ((num4 == wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x48;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x48;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != wall) && (num7 == wall)) && ((num4 != wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 != wall) && (num7 == wall)) && ((num4 == wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 == wall) && (num7 != wall)) && ((num4 != wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x24;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 0x48;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 == wall) && (num7 != wall)) && ((num4 == wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x12;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x36;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 == wall) && (num7 == wall)) && ((num4 != wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 90;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 90;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 90;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != wall) && (num7 != wall)) && ((num4 == wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x48;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x48;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x48;
break;
}
}
else if (((num2 != wall) && (num7 == wall)) && ((num4 != wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0;
break;
}
}
else if (((num2 == wall) && (num7 != wall)) && ((num4 != wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0x6c;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 0x7e;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0x90;
rectangle.Y = 0x36;
break;
}
}
else if (((num2 != wall) && (num7 != wall)) && ((num4 != wall) & (num5 == wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xa2;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xa2;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != wall) && (num7 != wall)) && ((num4 == wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0xd8;
rectangle.Y = 0;
break;
case 1:
rectangle.X = 0xd8;
rectangle.Y = 0x12;
break;
case 2:
rectangle.X = 0xd8;
rectangle.Y = 0x24;
break;
}
}
else if (((num2 != wall) && (num7 != wall)) && ((num4 != wall) & (num5 != wall)))
{
switch (wallFrameNumber)
{
case 0:
rectangle.X = 0xa2;
rectangle.Y = 0x36;
break;
case 1:
rectangle.X = 180;
rectangle.Y = 0x36;
break;
case 2:
rectangle.X = 0xc6;
rectangle.Y = 0x36;
break;
}
}
}
if ((rectangle.X <= -1) || (rectangle.Y <= -1))
{
if (wallFrameNumber <= 0)
{
rectangle.X = 0x12;
rectangle.Y = 0x12;
}
if (wallFrameNumber == 1)
{
rectangle.X = 0x24;
rectangle.Y = 0x12;
}
if (wallFrameNumber >= 2)
{
rectangle.X = 0x36;
rectangle.Y = 0x12;
}
}
Main.tile[i, j].wallFrameX = (byte) rectangle.X;
Main.tile[i, j].wallFrameY = (byte) rectangle.Y;
}
}
}
public static void WaterCheck()
{
Liquid.numLiquid = 0;
LiquidBuffer.numLiquidBuffer = 0;
for (int i = 1; i < (Main.maxTilesX - 1); i++)
{
for (int j = Main.maxTilesY - 2; j > 0; j--)
{
Main.tile[i, j].checkingLiquid = false;
if (((Main.tile[i, j].liquid > 0) && Main.tile[i, j].active) && (Main.tileSolid[Main.tile[i, j].type] && !Main.tileSolidTop[Main.tile[i, j].type]))
{
Main.tile[i, j].liquid = 0;
}
else if (Main.tile[i, j].liquid > 0)
{
if (Main.tile[i, j].active)
{
if (Main.tileWaterDeath[Main.tile[i, j].type])
{
KillTile(i, j, false, false, false);
}
if (Main.tile[i, j].lava && Main.tileLavaDeath[Main.tile[i, j].type])
{
KillTile(i, j, false, false, false);
}
}
if (((!Main.tile[i, j + 1].active || !Main.tileSolid[Main.tile[i, j + 1].type]) || Main.tileSolidTop[Main.tile[i, j + 1].type]) && (Main.tile[i, j + 1].liquid < 0xff))
{
if (Main.tile[i, j + 1].liquid > 250)
{
Main.tile[i, j + 1].liquid = 0xff;
}
else
{
Liquid.AddWater(i, j);
}
}
if (((!Main.tile[i - 1, j].active || !Main.tileSolid[Main.tile[i - 1, j].type]) || Main.tileSolidTop[Main.tile[i - 1, j].type]) && (Main.tile[i - 1, j].liquid != Main.tile[i, j].liquid))
{
Liquid.AddWater(i, j);
}
else if (((!Main.tile[i + 1, j].active || !Main.tileSolid[Main.tile[i + 1, j].type]) || Main.tileSolidTop[Main.tile[i + 1, j].type]) && (Main.tile[i + 1, j].liquid != Main.tile[i, j].liquid))
{
Liquid.AddWater(i, j);
}
if (Main.tile[i, j].lava)
{
if ((Main.tile[i - 1, j].liquid > 0) && !Main.tile[i - 1, j].lava)
{
Liquid.AddWater(i, j);
}
else if ((Main.tile[i + 1, j].liquid > 0) && !Main.tile[i + 1, j].lava)
{
Liquid.AddWater(i, j);
}
else if ((Main.tile[i, j - 1].liquid > 0) && !Main.tile[i, j - 1].lava)
{
Liquid.AddWater(i, j);
}
else if ((Main.tile[i, j + 1].liquid > 0) && !Main.tile[i, j + 1].lava)
{
Liquid.AddWater(i, j);
}
}
}
}
}
}
public static void worldGenCallBack(object threadContext)
{
Main.PlaySound(10, -1, -1, 1);
clearWorld();
generateWorld(-1);
saveWorld(true);
Main.LoadWorlds();
if (Main.menuMode == 10)
{
Main.menuMode = 6;
}
Main.PlaySound(10, -1, -1, 1);
}
}
}