54797 lines
2 MiB
54797 lines
2 MiB
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.WorldGen
|
|
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
|
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
|
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
|
|
|
using Microsoft.Xna.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Terraria.Audio;
|
|
using Terraria.Chat;
|
|
using Terraria.DataStructures;
|
|
using Terraria.Enums;
|
|
using Terraria.GameContent;
|
|
using Terraria.GameContent.Achievements;
|
|
using Terraria.GameContent.Biomes;
|
|
using Terraria.GameContent.Creative;
|
|
using Terraria.GameContent.Events;
|
|
using Terraria.GameContent.Generation;
|
|
using Terraria.GameContent.Tile_Entities;
|
|
using Terraria.GameContent.UI.States;
|
|
using Terraria.Graphics.Capture;
|
|
using Terraria.ID;
|
|
using Terraria.IO;
|
|
using Terraria.Localization;
|
|
using Terraria.Map;
|
|
using Terraria.ObjectData;
|
|
using Terraria.UI;
|
|
using Terraria.Utilities;
|
|
using Terraria.WorldBuilding;
|
|
|
|
namespace Terraria
|
|
{
|
|
public class WorldGen
|
|
{
|
|
public static TownRoomManager TownManager = new TownRoomManager();
|
|
private static int lAltarX;
|
|
private static int lAltarY;
|
|
private static Queue<Action<StructureMap>> _postGenActions = new Queue<Action<StructureMap>>();
|
|
public static int tileReframeCount;
|
|
public static bool noMapUpdate;
|
|
public static double worldSurfaceLow;
|
|
public static int tLeft;
|
|
public static int tRight;
|
|
public static int tTop;
|
|
public static int tBottom;
|
|
public static int tRooms;
|
|
public static int[] mossType = new int[3];
|
|
public static ushort neonMossType;
|
|
public static int copperBar = 20;
|
|
public static int ironBar = 22;
|
|
public static int silverBar = 21;
|
|
public static int goldBar = 19;
|
|
private const int NUM_SEASHELL_STYLES = 2;
|
|
public static int treeBG1;
|
|
public static int treeBG2;
|
|
public static int treeBG3;
|
|
public static int treeBG4;
|
|
public static int corruptBG;
|
|
public static int jungleBG;
|
|
public static int snowBG;
|
|
public static int hallowBG;
|
|
public static int crimsonBG;
|
|
public static int desertBG;
|
|
public static int oceanBG;
|
|
public static int mushroomBG;
|
|
public static int underworldBG;
|
|
private static ushort crackedType = 481;
|
|
public static int oceanDistance = 250;
|
|
public static int beachDistance = 380;
|
|
public static bool skipDesertTileCheck = false;
|
|
public static bool crimson;
|
|
public static ushort mossTile = 179;
|
|
public static ushort mossWall = 54;
|
|
public static bool[] gem = new bool[6];
|
|
public static int[] tileCounts = new int[623];
|
|
public static int totalEvil;
|
|
public static int totalBlood;
|
|
public static int totalGood;
|
|
public static int totalSolid;
|
|
public static int totalEvil2;
|
|
public static int totalBlood2;
|
|
public static int totalGood2;
|
|
public static int totalSolid2;
|
|
public static byte tEvil;
|
|
public static byte tBlood;
|
|
public static byte tGood;
|
|
public static string currentWorldSeed;
|
|
public static bool dungeonLake = false;
|
|
public static int totalX;
|
|
public static int totalD;
|
|
public static bool IsGeneratingHardMode;
|
|
private static Vector2[] heartPos = new Vector2[100];
|
|
private static int heartCount;
|
|
public static int maxTreeShakes = 200;
|
|
public static int numTreeShakes = 0;
|
|
public static int[] treeShakeX = new int[WorldGen.maxTreeShakes];
|
|
public static int[] treeShakeY = new int[WorldGen.maxTreeShakes];
|
|
public static int lavaLine;
|
|
public static int waterLine;
|
|
public static bool noTileActions;
|
|
public static bool spawnEye;
|
|
public static int spawnHardBoss;
|
|
public static int numLarva;
|
|
public static int[] larvaX = new int[100];
|
|
public static int[] larvaY = new int[100];
|
|
public static volatile bool gen;
|
|
public static bool shadowOrbSmashed;
|
|
public static int shadowOrbCount;
|
|
public static int altarCount;
|
|
public static bool spawnMeteor;
|
|
public static bool loadFailed = false;
|
|
public static bool loadSuccess = false;
|
|
public static bool worldCleared;
|
|
public static bool worldBackup;
|
|
public static bool loadBackup = false;
|
|
private static int lastMaxTilesX;
|
|
private static int lastMaxTilesY;
|
|
private static bool mergeUp;
|
|
private static bool mergeDown;
|
|
private static bool mergeLeft;
|
|
private static bool mergeRight;
|
|
private static bool stopDrops;
|
|
public static bool mudWall;
|
|
private static int grassSpread;
|
|
public static bool noLiquidCheck;
|
|
public static bool AllowedToSpreadInfections = true;
|
|
[ThreadStatic]
|
|
public static UnifiedRandom _genRand;
|
|
[ThreadStatic]
|
|
public static int _genRandSeed = -2;
|
|
public static int _lastSeed;
|
|
public static string statusText = "";
|
|
public static bool destroyObject;
|
|
public static int spawnDelay;
|
|
public static int prioritizedTownNPCType;
|
|
public static int numTileCount;
|
|
public static int maxTileCount = 3500;
|
|
public static int maxWallOut2 = 5000;
|
|
public static Dictionary<Point, bool> CountedTiles = new Dictionary<Point, bool>(WorldGen.maxTileCount);
|
|
public static int lavaCount;
|
|
public static int iceCount;
|
|
public static int rockCount;
|
|
public static int shroomCount;
|
|
public static int maxRoomTiles = 750;
|
|
public static int numRoomTiles;
|
|
public static int[] roomX = new int[WorldGen.maxRoomTiles];
|
|
public static int[] roomY = new int[WorldGen.maxRoomTiles];
|
|
public static int roomCeilingsCount;
|
|
public static int[] roomCeilingX = new int[WorldGen.maxRoomTiles];
|
|
public static int[] roomCeilingY = new int[WorldGen.maxRoomTiles];
|
|
public static int roomX1;
|
|
public static int roomX2;
|
|
public static int roomY1;
|
|
public static int roomY2;
|
|
public static bool canSpawn;
|
|
public static bool[] houseTile = new bool[623];
|
|
public static int bestX;
|
|
public static int bestY;
|
|
public static int hiScore;
|
|
public static int dungeonX;
|
|
public static int dungeonY;
|
|
public static Vector2 lastDungeonHall = Vector2.Zero;
|
|
public static int maxDRooms = 100;
|
|
public static int numDRooms;
|
|
public static int[] dRoomX = new int[WorldGen.maxDRooms];
|
|
public static int[] dRoomY = new int[WorldGen.maxDRooms];
|
|
public static int[] dRoomSize = new int[WorldGen.maxDRooms];
|
|
private static bool[] dRoomTreasure = new bool[WorldGen.maxDRooms];
|
|
private static int[] dRoomL = new int[WorldGen.maxDRooms];
|
|
private static int[] dRoomR = new int[WorldGen.maxDRooms];
|
|
private static int[] dRoomT = new int[WorldGen.maxDRooms];
|
|
private static int[] dRoomB = new int[WorldGen.maxDRooms];
|
|
private static int numDDoors;
|
|
private static int[] DDoorX = new int[500];
|
|
private static int[] DDoorY = new int[500];
|
|
private static int[] DDoorPos = new int[500];
|
|
private static int numDungeonPlatforms;
|
|
private static int[] dungeonPlatformX = new int[500];
|
|
private static int[] dungeonPlatformY = new int[500];
|
|
private static bool generatedShadowKey;
|
|
private static int JungleItemCount;
|
|
private static int[] JChestX = new int[100];
|
|
private static int[] JChestY = new int[100];
|
|
private static int numJChests;
|
|
public static int dEnteranceX;
|
|
public static bool dSurface;
|
|
private static double dxStrength1;
|
|
private static double dyStrength1;
|
|
private static double dxStrength2;
|
|
private static double dyStrength2;
|
|
private static int dMinX;
|
|
private static int dMaxX;
|
|
private static int dMinY;
|
|
private static int dMaxY;
|
|
private static int numIslandHouses;
|
|
private static int houseCount;
|
|
private static bool[] skyLake = new bool[30];
|
|
private static int[] floatingIslandHouseX = new int[30];
|
|
private static int[] floatingIslandHouseY = new int[30];
|
|
private static int[] floatingIslandStyle = new int[30];
|
|
private static int numMCaves;
|
|
private static int[] mCaveX = new int[30];
|
|
private static int[] mCaveY = new int[30];
|
|
public static int WorldGenParam_Evil = -1;
|
|
private static int maxTunnels = 50;
|
|
private static int numTunnels;
|
|
private static int[] tunnelX = new int[WorldGen.maxTunnels];
|
|
private static int maxOrePatch = 50;
|
|
private static int numOrePatch;
|
|
private static int[] orePatchX = new int[WorldGen.maxOrePatch];
|
|
private static int maxOasis = 20;
|
|
private static int numOasis = 0;
|
|
private static Vector2[] oasisPosition = new Vector2[WorldGen.maxOasis];
|
|
private static int[] oasisWidth = new int[WorldGen.maxOasis];
|
|
private static int oasisHeight = 20;
|
|
private static int maxMushroomBiomes = 50;
|
|
private static int numMushroomBiomes = 0;
|
|
private static Vector2[] mushroomBiomesPosition = new Vector2[WorldGen.maxMushroomBiomes];
|
|
private static int maxLakes = 50;
|
|
private static int numLakes = 0;
|
|
private static int[] LakeX = new int[WorldGen.maxLakes];
|
|
private static int maxOceanCaveTreasure = 2;
|
|
private static int numOceanCaveTreasure = 0;
|
|
private static Point[] oceanCaveTreasure = new Point[WorldGen.maxOceanCaveTreasure];
|
|
private static int cactusWaterWidth = 50;
|
|
private static int cactusWaterHeight = 25;
|
|
private static int cactusWaterLimit = 25;
|
|
private static int JungleX;
|
|
private static int hellChest;
|
|
private static int[] hellChestItem = new int[7];
|
|
private static bool roomTorch;
|
|
private static bool roomDoor;
|
|
private static bool roomChair;
|
|
private static bool roomTable;
|
|
private static bool roomOccupied;
|
|
private static bool roomEvil;
|
|
public static Point16[] statueList;
|
|
public static List<int> StatuesWithTraps = new List<int>((IEnumerable<int>) new int[4]
|
|
{
|
|
4,
|
|
7,
|
|
10,
|
|
18
|
|
});
|
|
public static Microsoft.Xna.Framework.Rectangle UndergroundDesertLocation = Microsoft.Xna.Framework.Rectangle.Empty;
|
|
public static Microsoft.Xna.Framework.Rectangle UndergroundDesertHiveLocation = Microsoft.Xna.Framework.Rectangle.Empty;
|
|
public static MysticLogFairiesEvent mysticLogsEvent = new MysticLogFairiesEvent();
|
|
private static bool currentlyTryingToUseAlternateHousingSpot;
|
|
private static int sharedRoomX;
|
|
public static TownNPCRoomCheckFailureReason roomCheckFailureReason = TownNPCRoomCheckFailureReason.None;
|
|
public static bool generatingWorld = false;
|
|
private static int[,] trapDiag = new int[4, 2];
|
|
private static int tileCounterNum;
|
|
private static int tileCounterMax = 20;
|
|
private static int[] tileCounterX = new int[WorldGen.tileCounterMax];
|
|
private static int[] tileCounterY = new int[WorldGen.tileCounterMax];
|
|
private static WorldGenerator _generator;
|
|
public static int SmallConsecutivesFound = 0;
|
|
public static int SmallConsecutivesEliminated = 0;
|
|
public static bool drunkWorldGen = false;
|
|
public static bool getGoodWorldGen = false;
|
|
public static bool drunkWorldGenText = false;
|
|
public static bool placingTraps = false;
|
|
public const bool USE_FRAMING_SKIP_FOR_UNIMPORTANT_TILES_IN_WORLDGEN = false;
|
|
public static bool notTheBees = false;
|
|
private static int catTailDistance = 8;
|
|
public static TreeTopsInfo TreeTops = new TreeTopsInfo();
|
|
public static BackgroundChangeFlashInfo BackgroundsCache = new BackgroundChangeFlashInfo();
|
|
private static bool fossilBreak = false;
|
|
private const bool BUBBLES_SOLID_STATE_FOR_HOUSING = true;
|
|
private static bool skipFramingDuringGen = false;
|
|
|
|
public static UnifiedRandom genRand
|
|
{
|
|
get
|
|
{
|
|
if (WorldGen._lastSeed != WorldGen._genRandSeed)
|
|
{
|
|
WorldGen._genRand = new UnifiedRandom(WorldGen._lastSeed);
|
|
WorldGen._genRandSeed = WorldGen._lastSeed;
|
|
}
|
|
if (WorldGen._genRand == null)
|
|
{
|
|
WorldGen._genRand = new UnifiedRandom(WorldGen._lastSeed);
|
|
WorldGen._genRandSeed = WorldGen._lastSeed;
|
|
}
|
|
return WorldGen._genRand;
|
|
}
|
|
}
|
|
|
|
public static void SetupStatueList()
|
|
{
|
|
List<Point16> point16List = new List<Point16>();
|
|
for (int Y = 0; Y < 44; ++Y)
|
|
point16List.Add(new Point16(105, Y));
|
|
point16List[34] = new Point16(349, 0);
|
|
point16List[43] = new Point16(105, 50);
|
|
point16List.Add(new Point16(105, 63));
|
|
point16List.Add(new Point16(105, 64));
|
|
point16List.Add(new Point16(105, 65));
|
|
point16List.Add(new Point16(105, 66));
|
|
point16List.Add(new Point16(105, 68));
|
|
point16List.Add(new Point16(105, 69));
|
|
point16List.Add(new Point16(105, 70));
|
|
point16List.Add(new Point16(105, 71));
|
|
point16List.Add(new Point16(105, 72));
|
|
point16List.Add(new Point16(105, 73));
|
|
point16List.Add(new Point16(105, 75));
|
|
point16List.Add(new Point16(105, 51));
|
|
point16List.Add(new Point16(105, 52));
|
|
point16List.Add(new Point16(105, 53));
|
|
point16List.Add(new Point16(105, 54));
|
|
point16List.Add(new Point16(105, 55));
|
|
point16List.Add(new Point16(105, 56));
|
|
point16List.Add(new Point16(105, 57));
|
|
point16List.Add(new Point16(105, 58));
|
|
point16List.Add(new Point16(105, 59));
|
|
point16List.Add(new Point16(105, 60));
|
|
point16List.Add(new Point16(105, 61));
|
|
point16List.Add(new Point16(105, 62));
|
|
point16List.Add(new Point16(105, 77));
|
|
point16List.Add(new Point16(105, 78));
|
|
if (Main.expertMode)
|
|
{
|
|
point16List.Add(new Point16(105, 67));
|
|
point16List.Add(new Point16(105, 74));
|
|
}
|
|
WorldGen.statueList = point16List.ToArray();
|
|
}
|
|
|
|
public static void PlaceStatueTrap(int x, int y)
|
|
{
|
|
for (int index1 = -10; index1 <= 10; ++index1)
|
|
{
|
|
for (int index2 = -10; index2 <= 10; ++index2)
|
|
{
|
|
Tile testTile = Main.tile[x + index1, y + index2 + 1];
|
|
Tile tile = Main.tile[x + index1, y + index2];
|
|
if (!tile.active() && WorldGen.SolidTile2(testTile))
|
|
{
|
|
WorldGen.PlaceTile(x + index1, y + index2, 135, true);
|
|
if (tile.active() && tile.type == (ushort) 135)
|
|
{
|
|
WorldUtils.WireLine(new Point(x, y), new Point(x + index1, y + index2));
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool EmptyLiquid(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return false;
|
|
Tile tile = Main.tile[x, y];
|
|
if (tile == null)
|
|
return false;
|
|
int num = (int) tile.liquidType();
|
|
if (tile.nactive() && Main.tileSolid[(int) tile.type] && !Main.tileSolidTop[(int) tile.type])
|
|
return false;
|
|
tile.Clear(TileDataType.Liquid);
|
|
WorldGen.SquareTileFrame(x, y, false);
|
|
if (Main.netMode == 1)
|
|
NetMessage.sendWater(x, y);
|
|
else
|
|
Liquid.AddWater(x, y);
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceLiquid(int x, int y, byte liquidType, byte amount)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return false;
|
|
Tile tile = Main.tile[x, y];
|
|
if (tile == null)
|
|
return false;
|
|
byte num1 = tile.liquidType();
|
|
if (tile.nactive() && Main.tileSolid[(int) tile.type] && !Main.tileSolidTop[(int) tile.type])
|
|
return false;
|
|
if (tile.liquid == (byte) 0 || (int) liquidType == (int) num1)
|
|
{
|
|
tile.liquidType((int) liquidType);
|
|
if ((int) amount + (int) tile.liquid > (int) byte.MaxValue)
|
|
amount = (byte) ((uint) byte.MaxValue - (uint) tile.liquid);
|
|
tile.liquid += amount;
|
|
WorldGen.SquareTileFrame(x, y);
|
|
if (Main.netMode != 0)
|
|
NetMessage.sendWater(x, y);
|
|
return true;
|
|
}
|
|
ushort num2 = 0;
|
|
if (liquidType == (byte) 0 && num1 == (byte) 1 || liquidType == (byte) 1 && num1 == (byte) 0)
|
|
num2 = (ushort) 56;
|
|
else if (liquidType == (byte) 0 && num1 == (byte) 2 || liquidType == (byte) 2 && num1 == (byte) 0)
|
|
num2 = (ushort) 229;
|
|
else if (liquidType == (byte) 1 && num1 == (byte) 2 || liquidType == (byte) 2 && num1 == (byte) 1)
|
|
num2 = (ushort) 230;
|
|
if (num2 == (ushort) 0)
|
|
return false;
|
|
tile.liquid = (byte) 0;
|
|
tile.liquidType(0);
|
|
WorldGen.PlaceTile(x, y, (int) num2, true);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
if (Main.netMode != 0)
|
|
NetMessage.SendTileSquare(-1, x - 1, y - 1, 3, num2 == (ushort) 56 ? TileChangeType.LavaWater : TileChangeType.HoneyLava);
|
|
return true;
|
|
}
|
|
|
|
public static bool MoveTownNPC(int x, int y, int n)
|
|
{
|
|
if (!WorldGen.StartRoomCheck(x, y))
|
|
{
|
|
string textValue = Lang.inter[40].Value;
|
|
switch (WorldGen.roomCheckFailureReason)
|
|
{
|
|
case TownNPCRoomCheckFailureReason.TooCloseToWorldEdge:
|
|
textValue = Language.GetTextValue("TownNPCHousingFailureReasons.TooCloseToWorldEdge");
|
|
break;
|
|
case TownNPCRoomCheckFailureReason.RoomIsTooBig:
|
|
textValue = Language.GetTextValue("TownNPCHousingFailureReasons.RoomIsTooBig");
|
|
break;
|
|
case TownNPCRoomCheckFailureReason.RoomIsTooSmall:
|
|
textValue = Language.GetTextValue("TownNPCHousingFailureReasons.RoomIsTooSmall");
|
|
break;
|
|
case TownNPCRoomCheckFailureReason.HoleInWallIsTooBig:
|
|
textValue = Language.GetTextValue("TownNPCHousingFailureReasons.HoleInWallIsTooBig");
|
|
break;
|
|
case TownNPCRoomCheckFailureReason.RoomCheckStartedInASolidTile:
|
|
textValue = Language.GetTextValue("TownNPCHousingFailureReasons.RoomCheckStartedInASolidTile");
|
|
break;
|
|
}
|
|
Main.NewText(textValue, G: (byte) 240, B: (byte) 20);
|
|
return false;
|
|
}
|
|
if (!WorldGen.RoomNeeds(WorldGen.prioritizedTownNPCType))
|
|
{
|
|
int index = 0;
|
|
int length = (WorldGen.roomTorch ? 0 : 1) + (WorldGen.roomDoor ? 0 : 1) + (WorldGen.roomTable ? 0 : 1) + (WorldGen.roomChair ? 0 : 1);
|
|
string[] strArray = new string[length];
|
|
if (!WorldGen.roomTorch)
|
|
{
|
|
strArray[index] = Language.GetTextValue("Game.HouseLightSource");
|
|
++index;
|
|
}
|
|
if (!WorldGen.roomDoor)
|
|
{
|
|
strArray[index] = Language.GetTextValue("Game.HouseDoor");
|
|
++index;
|
|
}
|
|
if (!WorldGen.roomTable)
|
|
{
|
|
strArray[index] = Language.GetTextValue("Game.HouseTable");
|
|
++index;
|
|
}
|
|
if (!WorldGen.roomChair)
|
|
{
|
|
strArray[index] = Language.GetTextValue("Game.HouseChair");
|
|
int num = index + 1;
|
|
}
|
|
Main.NewText(Language.GetTextValue("Game.HouseMissing_" + (object) length, (object[]) strArray), G: (byte) 240, B: (byte) 20);
|
|
return false;
|
|
}
|
|
int npcTypeAskingToScoreRoom = WorldGen.prioritizedTownNPCType;
|
|
if (n >= 0)
|
|
npcTypeAskingToScoreRoom = Main.npc[n].type;
|
|
WorldGen.ScoreRoom(npcTypeAskingToScoreRoom: npcTypeAskingToScoreRoom);
|
|
if (WorldGen.hiScore <= 0)
|
|
{
|
|
if (WorldGen.roomOccupied)
|
|
Main.NewText(Lang.inter[41].Value, G: (byte) 240, B: (byte) 20);
|
|
else if (WorldGen.roomEvil)
|
|
Main.NewText(Lang.inter[42].Value, G: (byte) 240, B: (byte) 20);
|
|
else
|
|
Main.NewText(Lang.inter[40].Value, G: (byte) 240, B: (byte) 20);
|
|
return false;
|
|
}
|
|
if (n < 0 || WorldGen.CheckSpecialTownNPCSpawningConditions(Main.npc[n].type))
|
|
return true;
|
|
Main.NewText(Lang.inter[55].Value + " " + Main.npc[n].TypeName, G: (byte) 240, B: (byte) 20);
|
|
return false;
|
|
}
|
|
|
|
public static void moveRoom(int x, int y, int n)
|
|
{
|
|
if (Main.netMode == 1)
|
|
{
|
|
NetMessage.SendData(60, number: n, number2: ((float) x), number3: ((float) y));
|
|
}
|
|
else
|
|
{
|
|
WorldGen.prioritizedTownNPCType = Main.npc[n].type;
|
|
Main.npc[n].homeless = true;
|
|
int num = (int) WorldGen.SpawnTownNPC(x, y);
|
|
WorldGen.TownManager.SetRoom(Main.npc[n].type, Main.npc[n].homeTileX, Main.npc[n].homeTileY);
|
|
}
|
|
}
|
|
|
|
public static bool IsNPCEvictable(int n)
|
|
{
|
|
if (n < 0)
|
|
return false;
|
|
Microsoft.Xna.Framework.Rectangle hitbox = Main.LocalPlayer.Hitbox;
|
|
hitbox.Inflate(Main.LogicCheckScreenWidth / 2, Main.LogicCheckScreenHeight / 2);
|
|
NPC npc = Main.npc[n];
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(npc.homeTileX * 16, npc.homeTileY * 16, 16, 16);
|
|
return hitbox.Intersects(rectangle);
|
|
}
|
|
|
|
public static void kickOut(int n)
|
|
{
|
|
if (Main.netMode == 1)
|
|
{
|
|
NetMessage.SendData(60, number: n, number4: 1f);
|
|
}
|
|
else
|
|
{
|
|
Main.npc[n].homeless = true;
|
|
WorldGen.TownManager.KickOut(Main.npc[n]);
|
|
}
|
|
}
|
|
|
|
public static bool IsThereASpawnablePrioritizedTownNPC(
|
|
int x,
|
|
int y,
|
|
ref bool canSpawnNewTownNPC)
|
|
{
|
|
if (WorldGen.CheckSpecialTownNPCSpawningConditions(WorldGen.prioritizedTownNPCType) && NPC.AnyNPCs(WorldGen.prioritizedTownNPCType))
|
|
{
|
|
canSpawnNewTownNPC = false;
|
|
return true;
|
|
}
|
|
List<int> occupantsList = new List<int>();
|
|
WorldGen.TownManager.AddOccupantsToList(x, y, occupantsList);
|
|
for (int index1 = 0; index1 < occupantsList.Count; ++index1)
|
|
{
|
|
int index2 = occupantsList[index1];
|
|
if (Main.townNPCCanSpawn[index2] && !NPC.AnyNPCs(index2) && WorldGen.CheckSpecialTownNPCSpawningConditions(index2))
|
|
{
|
|
WorldGen.prioritizedTownNPCType = index2;
|
|
canSpawnNewTownNPC = true;
|
|
return true;
|
|
}
|
|
}
|
|
for (int index = 0; index < 663; ++index)
|
|
{
|
|
if (Main.townNPCCanSpawn[index] && WorldGen.CheckSpecialTownNPCSpawningConditions(index))
|
|
{
|
|
if (NPC.AnyNPCs(index))
|
|
{
|
|
Main.townNPCCanSpawn[index] = false;
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.TownManager.HasRoomQuick(index))
|
|
{
|
|
WorldGen.prioritizedTownNPCType = index;
|
|
canSpawnNewTownNPC = true;
|
|
return true;
|
|
}
|
|
if (!NPCID.Sets.IsTownPet[WorldGen.prioritizedTownNPCType] || NPCID.Sets.IsTownPet[index])
|
|
{
|
|
WorldGen.prioritizedTownNPCType = index;
|
|
canSpawnNewTownNPC = true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsThereASpawnablePrioritizedTownNPC_Old(int x, int y)
|
|
{
|
|
if (WorldGen.CheckSpecialTownNPCSpawningConditions(WorldGen.prioritizedTownNPCType) && NPC.AnyNPCs(WorldGen.prioritizedTownNPCType))
|
|
return true;
|
|
List<int> occupantsList = new List<int>();
|
|
WorldGen.TownManager.AddOccupantsToList(x, y, occupantsList);
|
|
for (int index1 = 0; index1 < occupantsList.Count; ++index1)
|
|
{
|
|
int index2 = occupantsList[index1];
|
|
if (Main.townNPCCanSpawn[index2] && !NPC.AnyNPCs(index2) && WorldGen.CheckSpecialTownNPCSpawningConditions(index2))
|
|
{
|
|
WorldGen.prioritizedTownNPCType = index2;
|
|
return true;
|
|
}
|
|
}
|
|
int num = -1;
|
|
for (int index = 0; index < 663; ++index)
|
|
{
|
|
if (Main.townNPCCanSpawn[index] && WorldGen.CheckSpecialTownNPCSpawningConditions(index))
|
|
{
|
|
if (NPC.AnyNPCs(index))
|
|
Main.townNPCCanSpawn[index] = false;
|
|
else if (WorldGen.TownManager.HasRoomQuick(index))
|
|
{
|
|
if (num == -1)
|
|
num = index;
|
|
}
|
|
else if (!NPCID.Sets.IsTownPet[WorldGen.prioritizedTownNPCType] || NPCID.Sets.IsTownPet[index])
|
|
{
|
|
WorldGen.prioritizedTownNPCType = index;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
if (num == -1)
|
|
return false;
|
|
WorldGen.prioritizedTownNPCType = num;
|
|
return true;
|
|
}
|
|
|
|
public static bool CheckSpecialTownNPCSpawningConditions(int type)
|
|
{
|
|
if (type != 160)
|
|
return true;
|
|
if ((double) WorldGen.roomY2 > Main.worldSurface)
|
|
return false;
|
|
int num1 = 0;
|
|
int num2 = WorldGen.roomX1 - Main.buffScanAreaWidth / 2 / 16 - 1 - Lighting.OffScreenTiles;
|
|
int num3 = WorldGen.roomX2 + Main.buffScanAreaWidth / 2 / 16 + 1 + Lighting.OffScreenTiles;
|
|
int num4 = WorldGen.roomY1 - Main.buffScanAreaHeight / 2 / 16 - 1 - Lighting.OffScreenTiles;
|
|
int num5 = WorldGen.roomY2 + Main.buffScanAreaHeight / 2 / 16 + 1 + Lighting.OffScreenTiles;
|
|
if (num2 < 0)
|
|
num2 = 0;
|
|
if (num3 >= Main.maxTilesX)
|
|
num3 = Main.maxTilesX - 1;
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 >= Main.maxTilesY)
|
|
num5 = Main.maxTilesY - 1;
|
|
for (int index1 = num2 + 1; index1 < num3; ++index1)
|
|
{
|
|
for (int index2 = num4 + 2; index2 < num5 + 2; ++index2)
|
|
{
|
|
Tile tile = Main.tile[index1, index2];
|
|
if (tile.active() && (tile.type == (ushort) 70 || tile.type == (ushort) 71 || tile.type == (ushort) 72 || tile.type == (ushort) 528))
|
|
++num1;
|
|
}
|
|
}
|
|
return num1 >= SceneMetrics.MushroomTileThreshold;
|
|
}
|
|
|
|
public static void UnspawnTravelNPC()
|
|
{
|
|
int number = -1;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].type == 368)
|
|
{
|
|
number = index;
|
|
break;
|
|
}
|
|
}
|
|
if (number < 0)
|
|
return;
|
|
int num1 = (int) ((double) Main.npc[number].Center.X / 16.0);
|
|
int num2 = (int) ((double) Main.npc[number].Center.Y / 16.0);
|
|
bool flag = true;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(num1 * 16 + 8 - NPC.sWidth / 2 - NPC.safeRangeX, num2 * 16 + 8 - NPC.sHeight / 2 - NPC.safeRangeY, NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X, (int) Main.player[index].position.Y, Main.player[index].width, Main.player[index].height).Intersects(rectangle))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
string fullName = Main.npc[number].FullName;
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Lang.misc[35].Format((object) fullName), (byte) 50, (byte) 125);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[35].Key, (object) Main.npc[number].GetFullNetName()), new Color(50, 125, (int) byte.MaxValue));
|
|
break;
|
|
}
|
|
Main.npc[number].active = false;
|
|
Main.npc[number].netSkip = -1;
|
|
Main.npc[number].life = 0;
|
|
NetMessage.SendData(23, number: number);
|
|
}
|
|
|
|
public static void SpawnTravelNPC()
|
|
{
|
|
if (Main.eclipse || !Main.dayTime || Main.invasionType > 0 && Main.invasionDelay == 0 && Main.invasionSize > 0)
|
|
return;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].type == 368)
|
|
return;
|
|
}
|
|
Chest.SetupTravelShop();
|
|
NetMessage.SendTravelShop(-1);
|
|
int[] numArray = new int[200];
|
|
int maxValue = 0;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].townNPC && Main.npc[index].type != 37 && !Main.npc[index].homeless)
|
|
{
|
|
numArray[maxValue] = index;
|
|
++maxValue;
|
|
}
|
|
}
|
|
if (maxValue == 0)
|
|
return;
|
|
int index1 = numArray[Main.rand.Next(maxValue)];
|
|
WorldGen.bestX = Main.npc[index1].homeTileX;
|
|
WorldGen.bestY = Main.npc[index1].homeTileY;
|
|
int minValue = WorldGen.bestX;
|
|
int num1 = WorldGen.bestX;
|
|
int bestY = WorldGen.bestY;
|
|
for (int bestX = WorldGen.bestX; bestX > WorldGen.bestX - 10 && (WorldGen.SolidTile(bestX, bestY) || Main.tileSolidTop[(int) Main.tile[bestX, bestY].type]) && (!Main.tile[bestX, bestY - 1].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 1].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 1].type]) && (!Main.tile[bestX, bestY - 2].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 2].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 2].type]) && (!Main.tile[bestX, bestY - 3].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 3].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 3].type]); --bestX)
|
|
minValue = bestX;
|
|
for (int bestX = WorldGen.bestX; bestX < WorldGen.bestX + 10 && (WorldGen.SolidTile(bestX, bestY) || Main.tileSolidTop[(int) Main.tile[bestX, bestY].type]) && (!Main.tile[bestX, bestY - 1].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 1].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 1].type]) && (!Main.tile[bestX, bestY - 2].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 2].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 2].type]) && (!Main.tile[bestX, bestY - 3].active() || !Main.tileSolid[(int) Main.tile[bestX, bestY - 3].type] || Main.tileSolidTop[(int) Main.tile[bestX, bestY - 3].type]); ++bestX)
|
|
num1 = bestX;
|
|
for (int index2 = 0; index2 < 30; ++index2)
|
|
{
|
|
int num2 = Main.rand.Next(minValue, num1 + 1);
|
|
if (index2 < 20)
|
|
{
|
|
if (num2 < WorldGen.bestX - 1 || num2 > WorldGen.bestX + 1)
|
|
{
|
|
WorldGen.bestX = num2;
|
|
break;
|
|
}
|
|
}
|
|
else if (num2 != WorldGen.bestX)
|
|
{
|
|
WorldGen.bestX = num2;
|
|
break;
|
|
}
|
|
}
|
|
int index3 = WorldGen.bestX;
|
|
int index4 = WorldGen.bestY;
|
|
bool flag = false;
|
|
if (!flag && (double) index4 <= Main.worldSurface)
|
|
{
|
|
for (int index5 = 20; index5 < 500; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < 2; ++index6)
|
|
{
|
|
index3 = index6 != 0 ? WorldGen.bestX - index5 * 2 : WorldGen.bestX + index5 * 2;
|
|
if (index3 > 10 && index3 < Main.maxTilesX - 10)
|
|
{
|
|
int num3 = WorldGen.bestY - index5;
|
|
double num4 = (double) (WorldGen.bestY + index5);
|
|
if (num3 < 10)
|
|
num3 = 10;
|
|
if (num4 > Main.worldSurface)
|
|
num4 = Main.worldSurface;
|
|
for (int index7 = num3; (double) index7 < num4; ++index7)
|
|
{
|
|
index4 = index7;
|
|
if (Main.tile[index3, index4].nactive() && Main.tileSolid[(int) Main.tile[index3, index4].type])
|
|
{
|
|
if (Main.tile[index3, index4 - 3].liquid == (byte) 0 && Main.tile[index3, index4 - 2].liquid == (byte) 0 && Main.tile[index3, index4 - 1].liquid == (byte) 0 && !Collision.SolidTiles(index3 - 1, index3 + 1, index4 - 3, index4 - 1))
|
|
{
|
|
flag = true;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(index3 * 16 + 8 - NPC.sWidth / 2 - NPC.safeRangeX, index4 * 16 + 8 - NPC.sHeight / 2 - NPC.safeRangeY, NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2);
|
|
for (int index8 = 0; index8 < (int) byte.MaxValue; ++index8)
|
|
{
|
|
if (Main.player[index8].active && new Microsoft.Xna.Framework.Rectangle((int) Main.player[index8].position.X, (int) Main.player[index8].position.Y, Main.player[index8].width, Main.player[index8].height).Intersects(rectangle))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
}
|
|
int index9 = NPC.NewNPC(index3 * 16, index4 * 16, 368, 1);
|
|
Main.npc[index9].homeTileX = WorldGen.bestX;
|
|
Main.npc[index9].homeTileY = WorldGen.bestY;
|
|
Main.npc[index9].homeless = true;
|
|
if (index3 < WorldGen.bestX)
|
|
Main.npc[index9].direction = 1;
|
|
else if (index3 > WorldGen.bestX)
|
|
Main.npc[index9].direction = -1;
|
|
Main.npc[index9].netUpdate = true;
|
|
string fullName = Main.npc[index9].FullName;
|
|
if (Main.netMode == 0)
|
|
{
|
|
Main.NewText(Language.GetTextValue("Announcement.HasArrived", (object) fullName), (byte) 50, (byte) 125);
|
|
}
|
|
else
|
|
{
|
|
if (Main.netMode != 2)
|
|
return;
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasArrived", (object) Main.npc[index9].GetFullNetName()), new Color(50, 125, (int) byte.MaxValue));
|
|
}
|
|
}
|
|
|
|
public static TownNPCSpawnResult SpawnTownNPC(int x, int y)
|
|
{
|
|
if (Main.wallHouse[(int) Main.tile[x, y].wall])
|
|
WorldGen.canSpawn = true;
|
|
if (!WorldGen.canSpawn || !WorldGen.StartRoomCheck(x, y) || !WorldGen.RoomNeeds(WorldGen.prioritizedTownNPCType))
|
|
return TownNPCSpawnResult.Blocked;
|
|
int ahomelessNpc = WorldGen.FindAHomelessNPC();
|
|
int npcTypeAskingToScoreRoom = WorldGen.prioritizedTownNPCType;
|
|
if (ahomelessNpc != -1)
|
|
npcTypeAskingToScoreRoom = Main.npc[ahomelessNpc].type;
|
|
WorldGen.ScoreRoom(npcTypeAskingToScoreRoom: npcTypeAskingToScoreRoom);
|
|
if (WorldGen.hiScore <= 0)
|
|
return TownNPCSpawnResult.Blocked;
|
|
bool canSpawnNewTownNPC = true;
|
|
if (!WorldGen.IsThereASpawnablePrioritizedTownNPC(WorldGen.bestX, WorldGen.bestY, ref canSpawnNewTownNPC))
|
|
return TownNPCSpawnResult.Blocked;
|
|
int prioritizedTownNpcType1 = WorldGen.prioritizedTownNPCType;
|
|
if (ahomelessNpc != -1)
|
|
{
|
|
Main.townNPCCanSpawn[WorldGen.prioritizedTownNPCType] = false;
|
|
Main.npc[ahomelessNpc].homeTileX = WorldGen.bestX;
|
|
Main.npc[ahomelessNpc].homeTileY = WorldGen.bestY;
|
|
Main.npc[ahomelessNpc].homeless = false;
|
|
AchievementsHelper.NotifyProgressionEvent(8);
|
|
WorldGen.prioritizedTownNPCType = 0;
|
|
return TownNPCSpawnResult.RelocatedHomeless;
|
|
}
|
|
if (canSpawnNewTownNPC && ahomelessNpc == -1)
|
|
{
|
|
Point roomPosition;
|
|
if (WorldGen.TownManager.HasRoom(prioritizedTownNpcType1, out roomPosition) && !WorldGen.currentlyTryingToUseAlternateHousingSpot)
|
|
{
|
|
int bestX = WorldGen.bestX;
|
|
int bestY = WorldGen.bestY;
|
|
WorldGen.currentlyTryingToUseAlternateHousingSpot = true;
|
|
TownNPCSpawnResult townNpcSpawnResult = WorldGen.SpawnTownNPC(roomPosition.X, roomPosition.Y - 2);
|
|
WorldGen.currentlyTryingToUseAlternateHousingSpot = false;
|
|
WorldGen.bestX = bestX;
|
|
WorldGen.bestY = bestY;
|
|
if (townNpcSpawnResult == TownNPCSpawnResult.Successful)
|
|
return townNpcSpawnResult;
|
|
}
|
|
int spawnTileX = WorldGen.bestX;
|
|
int spawnTileY = WorldGen.bestY;
|
|
int prioritizedTownNpcType2 = WorldGen.prioritizedTownNPCType;
|
|
if (WorldGen.IsRoomConsideredAlreadyOccupied(spawnTileX, spawnTileY, prioritizedTownNpcType2))
|
|
return TownNPCSpawnResult.BlockedInfiHousing;
|
|
bool flag = false;
|
|
if (!flag)
|
|
{
|
|
flag = true;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(spawnTileX * 16 + 8 - NPC.sWidth / 2 - NPC.safeRangeX, spawnTileY * 16 + 8 - NPC.sHeight / 2 - NPC.safeRangeY, NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X, (int) Main.player[index].position.Y, Main.player[index].width, Main.player[index].height).Intersects(rectangle))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag && (double) spawnTileY <= Main.worldSurface)
|
|
{
|
|
for (int index1 = 1; index1 < 500; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 2; ++index2)
|
|
{
|
|
spawnTileX = index2 != 0 ? WorldGen.bestX - index1 : WorldGen.bestX + index1;
|
|
if (spawnTileX > 10 && spawnTileX < Main.maxTilesX - 10)
|
|
{
|
|
int num1 = WorldGen.bestY - index1;
|
|
double num2 = (double) (WorldGen.bestY + index1);
|
|
if (num1 < 10)
|
|
num1 = 10;
|
|
if (num2 > Main.worldSurface)
|
|
num2 = Main.worldSurface;
|
|
for (int index3 = num1; (double) index3 < num2; ++index3)
|
|
{
|
|
spawnTileY = index3;
|
|
if (Main.tile[spawnTileX, spawnTileY].nactive() && Main.tileSolid[(int) Main.tile[spawnTileX, spawnTileY].type])
|
|
{
|
|
if (!Collision.SolidTiles(spawnTileX - 1, spawnTileX + 1, spawnTileY - 3, spawnTileY - 1))
|
|
{
|
|
flag = true;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(spawnTileX * 16 + 8 - NPC.sWidth / 2 - NPC.safeRangeX, spawnTileY * 16 + 8 - NPC.sHeight / 2 - NPC.safeRangeY, NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2);
|
|
for (int index4 = 0; index4 < (int) byte.MaxValue; ++index4)
|
|
{
|
|
if (Main.player[index4].active && new Microsoft.Xna.Framework.Rectangle((int) Main.player[index4].position.X, (int) Main.player[index4].position.Y, Main.player[index4].width, Main.player[index4].height).Intersects(rectangle))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
}
|
|
int index5 = NPC.NewNPC(spawnTileX * 16, spawnTileY * 16, prioritizedTownNpcType1, 1);
|
|
Main.townNPCCanSpawn[prioritizedTownNpcType1] = false;
|
|
Main.npc[index5].homeTileX = WorldGen.bestX;
|
|
Main.npc[index5].homeTileY = WorldGen.bestY;
|
|
if (spawnTileX < WorldGen.bestX)
|
|
Main.npc[index5].direction = 1;
|
|
else if (spawnTileX > WorldGen.bestX)
|
|
Main.npc[index5].direction = -1;
|
|
Main.npc[index5].netUpdate = true;
|
|
string fullName = Main.npc[index5].FullName;
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Language.GetTextValue("Announcement.HasArrived", (object) fullName), (byte) 50, (byte) 125);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasArrived", (object) Main.npc[index5].GetFullNetName()), new Color(50, 125, (int) byte.MaxValue));
|
|
break;
|
|
}
|
|
AchievementsHelper.NotifyProgressionEvent(8);
|
|
if (Main.npc[index5].type == 160)
|
|
AchievementsHelper.NotifyProgressionEvent(18);
|
|
WorldGen.CheckAchievement_RealEstate();
|
|
WorldGen.prioritizedTownNPCType = 0;
|
|
}
|
|
return TownNPCSpawnResult.Successful;
|
|
}
|
|
|
|
private static int FindAHomelessNPC()
|
|
{
|
|
int num = -1;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].homeless && Main.npc[index].type == WorldGen.prioritizedTownNPCType && WorldGen.CheckSpecialTownNPCSpawningConditions(Main.npc[index].type))
|
|
{
|
|
num = index;
|
|
break;
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private static bool IsRoomConsideredAlreadyOccupied(
|
|
int spawnTileX,
|
|
int spawnTileY,
|
|
int npcTypeToSpawn)
|
|
{
|
|
bool flag = false;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
NPC npc2 = Main.npc[index];
|
|
if (npc2.active && npc2.townNPC && !npc2.homeless && npc2.homeTileX == spawnTileX && npc2.homeTileY == spawnTileY && !WorldGen.TownManager.CanNPCsLiveWithEachOther(npcTypeToSpawn, npc2))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static void CheckAchievement_RealEstate()
|
|
{
|
|
bool[] flagArray = new bool[663];
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].type >= 0 && Main.npc[index].type < 663)
|
|
flagArray[Main.npc[index].type] = true;
|
|
}
|
|
if (!flagArray[38] || !flagArray[17] || !flagArray[107] || !flagArray[19] || !flagArray[22] || !flagArray[124] || !flagArray[228] || !flagArray[178] || !flagArray[18] || !flagArray[229] || !flagArray[209] || !flagArray[54] || !flagArray[108] || !flagArray[160] || !flagArray[20] || !flagArray[369] || !flagArray[207] || !flagArray[227] || !flagArray[208] || !flagArray[441] || !flagArray[353] || !flagArray[588] || !flagArray[633])
|
|
return;
|
|
AchievementsHelper.NotifyProgressionEvent(17);
|
|
}
|
|
|
|
public static bool RoomNeeds(int npcType)
|
|
{
|
|
WorldGen.roomChair = false;
|
|
WorldGen.roomDoor = false;
|
|
WorldGen.roomTable = false;
|
|
WorldGen.roomTorch = false;
|
|
for (int index = 0; index < TileID.Sets.RoomNeeds.CountsAsChair.Length; ++index)
|
|
{
|
|
if (WorldGen.houseTile[TileID.Sets.RoomNeeds.CountsAsChair[index]])
|
|
{
|
|
WorldGen.roomChair = true;
|
|
break;
|
|
}
|
|
}
|
|
for (int index = 0; index < TileID.Sets.RoomNeeds.CountsAsTable.Length; ++index)
|
|
{
|
|
if (WorldGen.houseTile[TileID.Sets.RoomNeeds.CountsAsTable[index]])
|
|
{
|
|
WorldGen.roomTable = true;
|
|
break;
|
|
}
|
|
}
|
|
for (int index = 0; index < TileID.Sets.RoomNeeds.CountsAsTorch.Length; ++index)
|
|
{
|
|
if (WorldGen.houseTile[TileID.Sets.RoomNeeds.CountsAsTorch[index]])
|
|
{
|
|
WorldGen.roomTorch = true;
|
|
break;
|
|
}
|
|
}
|
|
for (int index = 0; index < TileID.Sets.RoomNeeds.CountsAsDoor.Length; ++index)
|
|
{
|
|
if (WorldGen.houseTile[TileID.Sets.RoomNeeds.CountsAsDoor[index]])
|
|
{
|
|
WorldGen.roomDoor = true;
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.canSpawn = WorldGen.roomChair && WorldGen.roomTable && WorldGen.roomDoor && WorldGen.roomTorch;
|
|
return WorldGen.canSpawn;
|
|
}
|
|
|
|
public static void QuickFindHome(int npc)
|
|
{
|
|
bool flag = Main.tileSolid[379];
|
|
Main.tileSolid[379] = true;
|
|
if (Main.npc[npc].homeTileX > 10 && Main.npc[npc].homeTileY > 10 && Main.npc[npc].homeTileX < Main.maxTilesX - 10 && Main.npc[npc].homeTileY < Main.maxTilesY)
|
|
{
|
|
WorldGen.canSpawn = false;
|
|
WorldGen.StartRoomCheck(Main.npc[npc].homeTileX, Main.npc[npc].homeTileY - 1);
|
|
if (!WorldGen.canSpawn)
|
|
{
|
|
for (int x = Main.npc[npc].homeTileX - 1; x < Main.npc[npc].homeTileX + 2; ++x)
|
|
{
|
|
int y = Main.npc[npc].homeTileY - 1;
|
|
while (y < Main.npc[npc].homeTileY + 2 && !WorldGen.StartRoomCheck(x, y))
|
|
++y;
|
|
}
|
|
}
|
|
if (!WorldGen.canSpawn)
|
|
{
|
|
int num = 10;
|
|
for (int x = Main.npc[npc].homeTileX - num; x <= Main.npc[npc].homeTileX + num; x += 2)
|
|
{
|
|
int y = Main.npc[npc].homeTileY - num;
|
|
while (y <= Main.npc[npc].homeTileY + num && !WorldGen.StartRoomCheck(x, y))
|
|
y += 2;
|
|
}
|
|
}
|
|
if (WorldGen.canSpawn)
|
|
{
|
|
WorldGen.RoomNeeds(Main.npc[npc].type);
|
|
if (WorldGen.canSpawn)
|
|
WorldGen.ScoreRoom(npc, Main.npc[npc].type);
|
|
if (WorldGen.canSpawn && WorldGen.hiScore > 0)
|
|
WorldGen.canSpawn = WorldGen.IsRoomConsideredOccupiedForNPCIndex(npc);
|
|
if (WorldGen.canSpawn && WorldGen.hiScore > 0)
|
|
{
|
|
Main.npc[npc].homeTileX = WorldGen.bestX;
|
|
Main.npc[npc].homeTileY = WorldGen.bestY;
|
|
Main.npc[npc].homeless = false;
|
|
AchievementsHelper.NotifyProgressionEvent(8);
|
|
WorldGen.canSpawn = false;
|
|
}
|
|
else
|
|
Main.npc[npc].homeless = true;
|
|
}
|
|
else
|
|
Main.npc[npc].homeless = true;
|
|
}
|
|
Main.tileSolid[379] = flag;
|
|
}
|
|
|
|
private static bool IsRoomConsideredOccupiedForNPCIndex(int npc)
|
|
{
|
|
bool flag = true;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (index != npc)
|
|
{
|
|
NPC npc2 = Main.npc[index];
|
|
if (npc2.active && npc2.townNPC && !npc2.homeless && npc2.homeTileX == WorldGen.bestX && npc2.homeTileY == WorldGen.bestY && !WorldGen.TownManager.CanNPCsLiveWithEachOther(Main.npc[npc], npc2))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
private static bool ScoreRoom_IsThisRoomOccupiedBySomeone(int ignoreNPC = -1, int npcTypeAsking = -1)
|
|
{
|
|
for (int index1 = 0; index1 < 200; ++index1)
|
|
{
|
|
if (Main.npc[index1].active && Main.npc[index1].townNPC && ignoreNPC != index1 && !Main.npc[index1].homeless)
|
|
{
|
|
for (int index2 = 0; index2 < WorldGen.numRoomTiles; ++index2)
|
|
{
|
|
if (Main.npc[index1].homeTileX == WorldGen.roomX[index2] && Main.npc[index1].homeTileY == WorldGen.roomY[index2])
|
|
{
|
|
bool flag = false;
|
|
for (int index3 = 0; index3 < WorldGen.numRoomTiles; ++index3)
|
|
{
|
|
if (Main.npc[index1].homeTileX == WorldGen.roomX[index3] && Main.npc[index1].homeTileY - 1 == WorldGen.roomY[index3])
|
|
{
|
|
if (WorldGen.TownManager.CanNPCsLiveWithEachOther(npcTypeAsking, Main.npc[index1]))
|
|
{
|
|
WorldGen.sharedRoomX = Main.npc[index1].homeTileX;
|
|
}
|
|
else
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void CountTileTypesInArea(
|
|
int[] tileTypeCounts,
|
|
int startX,
|
|
int endX,
|
|
int startY,
|
|
int endY)
|
|
{
|
|
for (int index1 = startX; index1 <= endX; ++index1)
|
|
{
|
|
for (int index2 = startY; index2 <= endY; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
++tileTypeCounts[(int) Main.tile[index1, index2].type];
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int GetTileTypeCountByCategory(int[] tileTypeCounts, TileScanGroup group)
|
|
{
|
|
switch (group)
|
|
{
|
|
case TileScanGroup.None:
|
|
return 0;
|
|
case TileScanGroup.Corruption:
|
|
return tileTypeCounts[23] + tileTypeCounts[24] + tileTypeCounts[25] + tileTypeCounts[32] + tileTypeCounts[112] + tileTypeCounts[163] + tileTypeCounts[400] + tileTypeCounts[398] + -5 * tileTypeCounts[27];
|
|
case TileScanGroup.Crimson:
|
|
return tileTypeCounts[199] + tileTypeCounts[203] + tileTypeCounts[200] + tileTypeCounts[401] + tileTypeCounts[399] + tileTypeCounts[234] + tileTypeCounts[352] - 5 * tileTypeCounts[27];
|
|
case TileScanGroup.Hallow:
|
|
return tileTypeCounts[109] + tileTypeCounts[110] + tileTypeCounts[113] + tileTypeCounts[117] + tileTypeCounts[116] + tileTypeCounts[164] + tileTypeCounts[403] + tileTypeCounts[402];
|
|
case TileScanGroup.TotalGoodEvil:
|
|
int typeCountByCategory1 = WorldGen.GetTileTypeCountByCategory(tileTypeCounts, TileScanGroup.Hallow);
|
|
int typeCountByCategory2 = WorldGen.GetTileTypeCountByCategory(tileTypeCounts, TileScanGroup.Corruption);
|
|
int typeCountByCategory3 = WorldGen.GetTileTypeCountByCategory(tileTypeCounts, TileScanGroup.Crimson);
|
|
int num1 = 5 * tileTypeCounts[27];
|
|
int num2 = typeCountByCategory3;
|
|
int num3 = typeCountByCategory2 + num2 + num1;
|
|
return typeCountByCategory1 - num3;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public static void ScoreRoom(int ignoreNPC = -1, int npcTypeAskingToScoreRoom = -1)
|
|
{
|
|
WorldGen.roomOccupied = false;
|
|
WorldGen.roomEvil = false;
|
|
WorldGen.sharedRoomX = -1;
|
|
if (WorldGen.ScoreRoom_IsThisRoomOccupiedBySomeone(ignoreNPC, npcTypeAskingToScoreRoom))
|
|
{
|
|
WorldGen.roomOccupied = true;
|
|
WorldGen.hiScore = -1;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.hiScore = 0;
|
|
int num1 = 50;
|
|
int num2 = 40;
|
|
int num3 = WorldGen.roomX1 - Main.buffScanAreaWidth / 2 / 16 - 1 - num2;
|
|
int num4 = WorldGen.roomX2 + Main.buffScanAreaWidth / 2 / 16 + 1 + num2;
|
|
int num5 = WorldGen.roomY1 - Main.buffScanAreaHeight / 2 / 16 - 1 - num2;
|
|
int num6 = WorldGen.roomY2 + Main.buffScanAreaHeight / 2 / 16 + 1 + num2;
|
|
if (num3 < 5)
|
|
num3 = 5;
|
|
if (num4 >= Main.maxTilesX - 5)
|
|
num4 = Main.maxTilesX - 6;
|
|
if (num5 < 5)
|
|
num5 = 5;
|
|
if (num6 >= Main.maxTilesY - 5)
|
|
num6 = Main.maxTilesY - 6;
|
|
int[] tileTypeCounts = new int[623];
|
|
WorldGen.CountTileTypesInArea(tileTypeCounts, num3 + 1, num4 - 1, num5 + 2, num6 + 1);
|
|
int num7 = -WorldGen.GetTileTypeCountByCategory(tileTypeCounts, TileScanGroup.TotalGoodEvil);
|
|
if (num7 < 50)
|
|
num7 = 0;
|
|
int num8 = num1 - num7;
|
|
if (num8 <= -250)
|
|
{
|
|
WorldGen.hiScore = num8;
|
|
WorldGen.roomEvil = true;
|
|
}
|
|
else
|
|
{
|
|
int roomX1 = WorldGen.roomX1;
|
|
int roomX2 = WorldGen.roomX2;
|
|
int roomY1 = WorldGen.roomY1;
|
|
int roomY2 = WorldGen.roomY2;
|
|
for (int index1 = roomX1 + 1; index1 < roomX2; ++index1)
|
|
{
|
|
for (int index2 = roomY1 + 2; index2 < roomY2 + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].nactive() && WorldGen.ScoreRoom_CanBeHomeSpot(index1, index2))
|
|
{
|
|
int num9 = num8;
|
|
if (Main.tileSolid[(int) Main.tile[index1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2].type] && !Collision.SolidTiles(index1 - 1, index1 + 1, index2 - 3, index2 - 1) && Main.tile[index1 - 1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1 - 1, index2].type] && Main.tile[index1 + 1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1 + 1, index2].type])
|
|
{
|
|
int num10 = 0;
|
|
int num11 = 0;
|
|
for (int x = index1 - 2; x < index1 + 3; ++x)
|
|
{
|
|
for (int y = index2 - 4; y < index2; ++y)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (tile.nactive() && !TileID.Sets.IgnoredInHouseScore[(int) tile.type])
|
|
{
|
|
if (x == index1)
|
|
++num10;
|
|
else if (TileID.Sets.BasicChest[(int) tile.type])
|
|
++num11;
|
|
else if (tile.type == (ushort) 10 || tile.type == (ushort) 388)
|
|
num9 -= 20;
|
|
else if (WorldGen.IsOpenDoorAnchorFrame(x, y))
|
|
num9 -= 20;
|
|
else if (Main.tileSolid[(int) tile.type])
|
|
num9 -= 5;
|
|
else
|
|
num9 += 5;
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.sharedRoomX >= 0 && num9 >= 1 && Math.Abs(WorldGen.sharedRoomX - index1) < 3)
|
|
num9 = 1;
|
|
if (num9 > 0 && num11 > 0)
|
|
{
|
|
num9 -= 30 * num11;
|
|
if (num9 < 1)
|
|
num9 = 1;
|
|
}
|
|
if (num9 > 0 && num10 > 0)
|
|
{
|
|
num9 -= 15 * num10;
|
|
if (num9 <= 0)
|
|
num9 = 0;
|
|
}
|
|
if (num9 > WorldGen.hiScore)
|
|
{
|
|
bool flag1 = WorldGen.Housing_CheckIfInRoom(index1, index2);
|
|
bool[] flagArray = new bool[3];
|
|
for (int index3 = 1; index3 <= 3; ++index3)
|
|
{
|
|
if (!Main.tile[index1, index2 - index3].active() || !Main.tileSolid[(int) Main.tile[index1, index2 - index3].type])
|
|
flagArray[index3 - 1] = true;
|
|
if (!WorldGen.Housing_CheckIfInRoom(index1, index2 - index3))
|
|
flagArray[index3 - 1] = false;
|
|
}
|
|
foreach (bool flag2 in flagArray)
|
|
{
|
|
if (!flag2)
|
|
{
|
|
flag1 = false;
|
|
break;
|
|
}
|
|
}
|
|
if (flag1 && !WorldGen.Housing_CheckIfIsCeiling(index1, index2))
|
|
{
|
|
WorldGen.hiScore = num9;
|
|
WorldGen.bestX = index1;
|
|
WorldGen.bestY = index2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static bool ScoreRoom_CanBeHomeSpot(int x, int y)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
return !tile.active() || tile.type != (ushort) 379;
|
|
}
|
|
|
|
private static bool Housing_CheckIfIsCeiling(int i, int j)
|
|
{
|
|
bool flag = false;
|
|
for (int index = 0; index < WorldGen.roomCeilingsCount; ++index)
|
|
{
|
|
if (WorldGen.roomCeilingX[index] == i)
|
|
{
|
|
if (WorldGen.roomCeilingY[index] == j)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
private static bool Housing_CheckIfInRoom(int i, int j)
|
|
{
|
|
bool flag = false;
|
|
for (int index = 0; index < WorldGen.numRoomTiles; ++index)
|
|
{
|
|
if (WorldGen.roomX[index] == i && WorldGen.roomY[index] == j)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static bool StartRoomCheck(int x, int y)
|
|
{
|
|
WorldGen.roomX1 = x;
|
|
WorldGen.roomX2 = x;
|
|
WorldGen.roomY1 = y;
|
|
WorldGen.roomY2 = y;
|
|
WorldGen.numRoomTiles = 0;
|
|
WorldGen.roomCeilingsCount = 0;
|
|
for (int index = 0; index < 623; ++index)
|
|
WorldGen.houseTile[index] = false;
|
|
WorldGen.canSpawn = true;
|
|
if (Main.tile[x, y].nactive() && Main.tileSolid[(int) Main.tile[x, y].type])
|
|
{
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.RoomCheckStartedInASolidTile;
|
|
WorldGen.canSpawn = false;
|
|
return false;
|
|
}
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.None;
|
|
WorldGen.CheckRoom(x, y);
|
|
if (!WorldGen.canSpawn)
|
|
return false;
|
|
if (WorldGen.numRoomTiles < 60)
|
|
{
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.RoomIsTooSmall;
|
|
WorldGen.canSpawn = false;
|
|
return false;
|
|
}
|
|
return WorldGen.canSpawn;
|
|
}
|
|
|
|
public static void CheckRoom(int x, int y)
|
|
{
|
|
if (!WorldGen.canSpawn)
|
|
return;
|
|
if (x < 10 || y < 10 || x >= Main.maxTilesX - 10 || y >= WorldGen.lastMaxTilesY - 10)
|
|
{
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.TooCloseToWorldEdge;
|
|
WorldGen.canSpawn = false;
|
|
}
|
|
else
|
|
{
|
|
for (int index = 0; index < WorldGen.numRoomTiles; ++index)
|
|
{
|
|
if (WorldGen.roomX[index] == x && WorldGen.roomY[index] == y)
|
|
return;
|
|
}
|
|
WorldGen.roomX[WorldGen.numRoomTiles] = x;
|
|
WorldGen.roomY[WorldGen.numRoomTiles] = y;
|
|
bool flag1 = false;
|
|
for (int index = 0; index < WorldGen.roomCeilingsCount; ++index)
|
|
{
|
|
if (WorldGen.roomCeilingX[index] == x)
|
|
{
|
|
flag1 = true;
|
|
if (WorldGen.roomCeilingY[index] > y)
|
|
{
|
|
WorldGen.roomCeilingY[index] = y;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!flag1)
|
|
{
|
|
WorldGen.roomCeilingX[WorldGen.roomCeilingsCount] = x;
|
|
WorldGen.roomCeilingY[WorldGen.roomCeilingsCount] = y;
|
|
++WorldGen.roomCeilingsCount;
|
|
}
|
|
++WorldGen.numRoomTiles;
|
|
if (WorldGen.numRoomTiles >= WorldGen.maxRoomTiles)
|
|
{
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.RoomIsTooBig;
|
|
WorldGen.canSpawn = false;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].nactive())
|
|
{
|
|
WorldGen.houseTile[(int) Main.tile[x, y].type] = true;
|
|
if (Main.tileSolid[(int) Main.tile[x, y].type] || Main.tile[x, y].type == (ushort) 11 && (Main.tile[x, y].frameX == (short) 0 || Main.tile[x, y].frameX == (short) 54 || Main.tile[x, y].frameX == (short) 72 || Main.tile[x, y].frameX == (short) 126) || Main.tile[x, y].type == (ushort) 389 || Main.tile[x, y].type == (ushort) 386 && (Main.tile[x, y].frameX < (short) 36 && Main.tile[x, y].frameY == (short) 18 || Main.tile[x, y].frameX >= (short) 36 && Main.tile[x, y].frameY == (short) 0))
|
|
return;
|
|
}
|
|
if (x < WorldGen.roomX1)
|
|
WorldGen.roomX1 = x;
|
|
if (x > WorldGen.roomX2)
|
|
WorldGen.roomX2 = x;
|
|
if (y < WorldGen.roomY1)
|
|
WorldGen.roomY1 = y;
|
|
if (y > WorldGen.roomY2)
|
|
WorldGen.roomY2 = y;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
for (int index = -2; index < 3; ++index)
|
|
{
|
|
if (Main.wallHouse[(int) Main.tile[x + index, y].wall])
|
|
flag2 = true;
|
|
if (Main.tile[x + index, y].nactive() && (Main.tileSolid[(int) Main.tile[x + index, y].type] || TileID.Sets.HousingWalls[(int) Main.tile[x + index, y].type]))
|
|
flag2 = true;
|
|
if (Main.wallHouse[(int) Main.tile[x, y + index].wall])
|
|
flag3 = true;
|
|
if (Main.tile[x, y + index].nactive() && (Main.tileSolid[(int) Main.tile[x, y + index].type] || TileID.Sets.HousingWalls[(int) Main.tile[x, y + index].type]))
|
|
flag3 = true;
|
|
}
|
|
if (!flag2 || !flag3)
|
|
{
|
|
WorldGen.roomCheckFailureReason = TownNPCRoomCheckFailureReason.HoleInWallIsTooBig;
|
|
WorldGen.canSpawn = false;
|
|
}
|
|
else
|
|
{
|
|
for (int x1 = x - 1; x1 < x + 2; ++x1)
|
|
{
|
|
for (int y1 = y - 1; y1 < y + 2; ++y1)
|
|
{
|
|
if ((x1 != x || y1 != y) && WorldGen.canSpawn)
|
|
WorldGen.CheckRoom(x1, y1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void dropMeteor()
|
|
{
|
|
bool flag = true;
|
|
if (Main.netMode == 1)
|
|
return;
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
int num1 = 0;
|
|
int num2 = (int) (400.0 * (double) (Main.maxTilesX / 4200));
|
|
for (int index1 = 5; index1 < Main.maxTilesX - 5; ++index1)
|
|
{
|
|
for (int index2 = 5; (double) index2 < Main.worldSurface; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 37)
|
|
{
|
|
++num1;
|
|
if (num1 > num2)
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
float num3 = 600f;
|
|
while (!flag)
|
|
{
|
|
float num4 = (float) Main.maxTilesX * 0.08f;
|
|
int i1 = Main.rand.Next(150, Main.maxTilesX - 150);
|
|
while ((double) i1 > (double) Main.spawnTileX - (double) num4 && (double) i1 < (double) Main.spawnTileX + (double) num4)
|
|
i1 = Main.rand.Next(150, Main.maxTilesX - 150);
|
|
for (int j1 = (int) (Main.worldSurface * 0.3); j1 < Main.maxTilesY; ++j1)
|
|
{
|
|
if (Main.tile[i1, j1].active() && Main.tileSolid[(int) Main.tile[i1, j1].type] && !TileID.Sets.Platforms[(int) Main.tile[i1, j1].type])
|
|
{
|
|
int num5 = 0;
|
|
int num6 = 15;
|
|
for (int i2 = i1 - num6; i2 < i1 + num6; ++i2)
|
|
{
|
|
for (int j2 = j1 - num6; j2 < j1 + num6; ++j2)
|
|
{
|
|
if (WorldGen.SolidTile(i2, j2))
|
|
{
|
|
++num5;
|
|
if (Main.tile[i2, j2].type == (ushort) 189 || Main.tile[i2, j2].type == (ushort) 202)
|
|
num5 -= 100;
|
|
}
|
|
else if (Main.tile[i2, j2].liquid > (byte) 0)
|
|
--num5;
|
|
}
|
|
}
|
|
if ((double) num5 >= (double) num3)
|
|
{
|
|
flag = WorldGen.meteor(i1, j1);
|
|
if (!flag)
|
|
break;
|
|
break;
|
|
}
|
|
num3 -= 0.5f;
|
|
break;
|
|
}
|
|
}
|
|
if ((double) num3 < 100.0)
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static bool meteor(int i, int j, bool ignorePlayers = false)
|
|
{
|
|
if (i < 50 || i > Main.maxTilesX - 50 || j < 50 || j > Main.maxTilesY - 50)
|
|
return false;
|
|
int num1 = 35;
|
|
Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle((i - num1) * 16, (j - num1) * 16, num1 * 2 * 16, num1 * 2 * 16);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && !ignorePlayers)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) ((double) Main.player[index].position.X + (double) (Main.player[index].width / 2) - (double) (NPC.sWidth / 2) - (double) NPC.safeRangeX), (int) ((double) Main.player[index].position.Y + (double) (Main.player[index].height / 2) - (double) (NPC.sHeight / 2) - (double) NPC.safeRangeY), NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2);
|
|
if (rectangle1.Intersects(rectangle2))
|
|
return false;
|
|
}
|
|
}
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle3 = new Microsoft.Xna.Framework.Rectangle((int) Main.npc[index].position.X, (int) Main.npc[index].position.Y, Main.npc[index].width, Main.npc[index].height);
|
|
if (rectangle1.Intersects(rectangle3))
|
|
return false;
|
|
}
|
|
}
|
|
for (int index1 = i - num1; index1 < i + num1; ++index1)
|
|
{
|
|
for (int index2 = j - num1; index2 < j + num1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
{
|
|
if (TileID.Sets.BasicChest[(int) Main.tile[index1, index2].type] || Main.tileDungeon[(int) Main.tile[index1, index2].type])
|
|
return false;
|
|
switch (Main.tile[index1, index2].type)
|
|
{
|
|
case 226:
|
|
case 470:
|
|
case 475:
|
|
case 488:
|
|
case 597:
|
|
return false;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
WorldGen.stopDrops = true;
|
|
int num2 = WorldGen.genRand.Next(17, 23);
|
|
for (int index3 = i - num2; index3 < i + num2; ++index3)
|
|
{
|
|
for (int index4 = j - num2; index4 < j + num2; ++index4)
|
|
{
|
|
if (index4 > j + Main.rand.Next(-2, 3) - 5)
|
|
{
|
|
double num3 = (double) Math.Abs(i - index3);
|
|
float num4 = (float) Math.Abs(j - index4);
|
|
if (Math.Sqrt(num3 * num3 + (double) num4 * (double) num4) < (double) num2 * 0.9 + (double) Main.rand.Next(-4, 5))
|
|
{
|
|
if (!Main.tileSolid[(int) Main.tile[index3, index4].type])
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].type = (ushort) 37;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num5 = WorldGen.genRand.Next(8, 14);
|
|
for (int index5 = i - num5; index5 < i + num5; ++index5)
|
|
{
|
|
for (int index6 = j - num5; index6 < j + num5; ++index6)
|
|
{
|
|
if (index6 > j + Main.rand.Next(-2, 3) - 4)
|
|
{
|
|
double num6 = (double) Math.Abs(i - index5);
|
|
float num7 = (float) Math.Abs(j - index6);
|
|
if (Math.Sqrt(num6 * num6 + (double) num7 * (double) num7) < (double) num5 * 0.8 + (double) Main.rand.Next(-3, 4))
|
|
Main.tile[index5, index6].active(false);
|
|
}
|
|
}
|
|
}
|
|
int num8 = WorldGen.genRand.Next(25, 35);
|
|
for (int i1 = i - num8; i1 < i + num8; ++i1)
|
|
{
|
|
for (int j1 = j - num8; j1 < j + num8; ++j1)
|
|
{
|
|
double num9 = (double) Math.Abs(i - i1);
|
|
float num10 = (float) Math.Abs(j - j1);
|
|
if (Math.Sqrt(num9 * num9 + (double) num10 * (double) num10) < (double) num8 * 0.7)
|
|
{
|
|
if (TileID.Sets.GetsDestroyedForMeteors[(int) Main.tile[i1, j1].type])
|
|
WorldGen.KillTile(i1, j1);
|
|
Main.tile[i1, j1].liquid = (byte) 0;
|
|
}
|
|
if (Main.tile[i1, j1].type == (ushort) 37)
|
|
{
|
|
if (!WorldGen.SolidTile(i1 - 1, j1) && !WorldGen.SolidTile(i1 + 1, j1) && !WorldGen.SolidTile(i1, j1 - 1) && !WorldGen.SolidTile(i1, j1 + 1))
|
|
Main.tile[i1, j1].active(false);
|
|
else if ((Main.tile[i1, j1].halfBrick() || Main.tile[i1 - 1, j1].topSlope()) && !WorldGen.SolidTile(i1, j1 + 1))
|
|
Main.tile[i1, j1].active(false);
|
|
}
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
WorldGen.SquareWallFrame(i1, j1);
|
|
}
|
|
}
|
|
int num11 = WorldGen.genRand.Next(23, 32);
|
|
for (int i2 = i - num11; i2 < i + num11; ++i2)
|
|
{
|
|
for (int j2 = j - num11; j2 < j + num11; ++j2)
|
|
{
|
|
if (j2 > j + WorldGen.genRand.Next(-3, 4) - 3 && Main.tile[i2, j2].active() && Main.rand.Next(10) == 0)
|
|
{
|
|
double num12 = (double) Math.Abs(i - i2);
|
|
float num13 = (float) Math.Abs(j - j2);
|
|
if (Math.Sqrt(num12 * num12 + (double) num13 * (double) num13) < (double) num11 * 0.8)
|
|
{
|
|
if (TileID.Sets.GetsDestroyedForMeteors[(int) Main.tile[i2, j2].type])
|
|
WorldGen.KillTile(i2, j2);
|
|
Main.tile[i2, j2].type = (ushort) 37;
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num14 = WorldGen.genRand.Next(30, 38);
|
|
for (int i3 = i - num14; i3 < i + num14; ++i3)
|
|
{
|
|
for (int j3 = j - num14; j3 < j + num14; ++j3)
|
|
{
|
|
if (j3 > j + WorldGen.genRand.Next(-2, 3) && Main.tile[i3, j3].active() && Main.rand.Next(20) == 0)
|
|
{
|
|
double num15 = (double) Math.Abs(i - i3);
|
|
float num16 = (float) Math.Abs(j - j3);
|
|
if (Math.Sqrt(num15 * num15 + (double) num16 * (double) num16) < (double) num14 * 0.85)
|
|
{
|
|
if (TileID.Sets.GetsDestroyedForMeteors[(int) Main.tile[i3, j3].type])
|
|
WorldGen.KillTile(i3, j3);
|
|
Main.tile[i3, j3].type = (ushort) 37;
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
WorldGen.stopDrops = false;
|
|
if (Main.netMode == 0)
|
|
Main.NewText(Lang.gen[59].Value, (byte) 50, B: (byte) 130);
|
|
else if (Main.netMode == 2)
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.gen[59].Key), new Color(50, (int) byte.MaxValue, 130));
|
|
if (Main.netMode != 1)
|
|
NetMessage.SendTileSquare(-1, i, j, 40);
|
|
return true;
|
|
}
|
|
|
|
public static void setWorldSize()
|
|
{
|
|
Main.bottomWorld = (float) (Main.maxTilesY * 16);
|
|
Main.rightWorld = (float) (Main.maxTilesX * 16);
|
|
Main.maxSectionsX = Main.maxTilesX / 200;
|
|
Main.maxSectionsY = Main.maxTilesY / 150;
|
|
}
|
|
|
|
public static void worldGenCallback(object threadContext)
|
|
{
|
|
SoundEngine.PlaySound(10);
|
|
WorldGen.clearWorld();
|
|
WorldGen.GenerateWorld(Main.ActiveWorldFileData.Seed, threadContext as GenerationProgress);
|
|
WorldFile.SaveWorld(Main.ActiveWorldFileData.IsCloudSave, true);
|
|
if (Main.menuMode == 10 || Main.menuMode == 888)
|
|
Main.menuMode = 6;
|
|
SoundEngine.PlaySound(10);
|
|
WorldGen.generatingWorld = false;
|
|
}
|
|
|
|
public static Task CreateNewWorld(GenerationProgress progress = null)
|
|
{
|
|
WorldGen.generatingWorld = true;
|
|
Main.rand = new UnifiedRandom(Main.ActiveWorldFileData.Seed);
|
|
WorldGen.gen = true;
|
|
Main.menuMode = 888;
|
|
try
|
|
{
|
|
Main.MenuUI.SetState((UIState) new UIWorldLoad());
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return Task.Factory.StartNew(new Action<object>(WorldGen.worldGenCallback), (object) progress);
|
|
}
|
|
|
|
public static void JustQuit()
|
|
{
|
|
try
|
|
{
|
|
SoundEngine.PlaySound(34, Style: 0);
|
|
SoundEngine.PlaySound(35, Style: 0);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
Main.invasionProgress = -1;
|
|
Main.invasionProgressDisplayLeft = 0;
|
|
Main.invasionProgressAlpha = 0.0f;
|
|
Main.invasionProgressIcon = 0;
|
|
Main.menuMode = 10;
|
|
Main.gameMenu = true;
|
|
SoundEngine.StopTrackedSounds();
|
|
CaptureInterface.ResetFocus();
|
|
Main.ActivePlayerFileData.StopPlayTimer();
|
|
Main.fastForwardTime = false;
|
|
Main.UpdateTimeRate();
|
|
if (Main.netMode == 0)
|
|
{
|
|
Main.GoToWorldSelect();
|
|
Main.player[Main.myPlayer].position = new Vector2(0.0f, 0.0f);
|
|
}
|
|
else
|
|
{
|
|
if (Main.netMode != 1)
|
|
return;
|
|
Main.menuMode = 0;
|
|
Netplay.Disconnect = true;
|
|
Main.netMode = 0;
|
|
}
|
|
}
|
|
|
|
public static void SaveAndQuitCallBack(object threadContext)
|
|
{
|
|
int netMode = Main.netMode;
|
|
try
|
|
{
|
|
SoundEngine.PlaySound(34, Style: 0);
|
|
SoundEngine.PlaySound(35, Style: 0);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
if (netMode == 0)
|
|
WorldFile.CacheSaveTime();
|
|
Main.invasionProgress = -1;
|
|
Main.invasionProgressDisplayLeft = 0;
|
|
Main.invasionProgressAlpha = 0.0f;
|
|
Main.invasionProgressIcon = 0;
|
|
Main.menuMode = 10;
|
|
Main.gameMenu = true;
|
|
SoundEngine.StopTrackedSounds();
|
|
CaptureInterface.ResetFocus();
|
|
Main.ActivePlayerFileData.StopPlayTimer();
|
|
Player.SavePlayer(Main.ActivePlayerFileData);
|
|
Player.ClearPlayerTempInfo();
|
|
Rain.ClearRain();
|
|
if (netMode == 0)
|
|
{
|
|
WorldFile.SaveWorld();
|
|
SoundEngine.PlaySound(10);
|
|
}
|
|
else
|
|
{
|
|
Netplay.Disconnect = true;
|
|
Main.netMode = 0;
|
|
}
|
|
Main.fastForwardTime = false;
|
|
Main.UpdateTimeRate();
|
|
Main.menuMode = 0;
|
|
if (threadContext == null)
|
|
return;
|
|
((Action) threadContext)();
|
|
}
|
|
|
|
public static void SaveAndQuit(Action callback = null)
|
|
{
|
|
SoundEngine.PlaySound(11);
|
|
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.SaveAndQuitCallBack), (object) callback);
|
|
}
|
|
|
|
public static void playWorldCallBack(object threadContext)
|
|
{
|
|
if (Main.rand == null)
|
|
Main.rand = new UnifiedRandom((int) DateTime.Now.Ticks);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (index != Main.myPlayer)
|
|
Main.player[index].active = false;
|
|
}
|
|
WorldGen.noMapUpdate = true;
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
bool isCloudSave = Main.ActiveWorldFileData.IsCloudSave;
|
|
WorldGen.worldBackup = FileUtilities.Exists(Main.worldPathName + ".bak", isCloudSave);
|
|
if (!Main.dedServ)
|
|
{
|
|
if (WorldGen.worldBackup)
|
|
{
|
|
Main.menuMode = 200;
|
|
return;
|
|
}
|
|
Main.menuMode = 201;
|
|
return;
|
|
}
|
|
if (WorldGen.worldBackup)
|
|
{
|
|
FileUtilities.Copy(Main.worldPathName, Main.worldPathName + ".bad", isCloudSave);
|
|
FileUtilities.Copy(Main.worldPathName + ".bak", Main.worldPathName, isCloudSave);
|
|
FileUtilities.Delete(Main.worldPathName + ".bak", isCloudSave);
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
FileUtilities.Copy(Main.worldPathName, Main.worldPathName + ".bak", isCloudSave);
|
|
FileUtilities.Copy(Main.worldPathName + ".bad", Main.worldPathName, isCloudSave);
|
|
FileUtilities.Delete(Main.worldPathName + ".bad", isCloudSave);
|
|
Console.WriteLine(Language.GetTextValue("Error.LoadFailed"));
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine(Language.GetTextValue("Error.LoadFailedNoBackup"));
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (Main.mapEnabled)
|
|
Main.Map.Load();
|
|
if (Main.netMode != 2)
|
|
Main.sectionManager.SetAllFramesLoaded();
|
|
while (Main.loadMapLock)
|
|
{
|
|
float num = (float) Main.loadMapLastX / (float) Main.maxTilesX;
|
|
Main.statusText = Lang.gen[68].Value + " " + (object) (int) ((double) num * 100.0 + 1.0) + "%";
|
|
Thread.Sleep(0);
|
|
if (!Main.mapEnabled)
|
|
break;
|
|
}
|
|
if (Main.gameMenu)
|
|
Main.gameMenu = false;
|
|
if (Main.netMode == 0 && Main.anglerWhoFinishedToday.Contains(Main.player[Main.myPlayer].name))
|
|
Main.anglerQuestFinished = true;
|
|
Main.player[Main.myPlayer].Spawn(PlayerSpawnContext.SpawningIntoWorld);
|
|
Main.ActivePlayerFileData.StartPlayTimer();
|
|
WorldGen._lastSeed = Main.ActiveWorldFileData.Seed;
|
|
Player.Hooks.EnterWorld(Main.myPlayer);
|
|
WorldFile.SetOngoingToTemps();
|
|
SoundEngine.PlaySound(11);
|
|
Main.resetClouds = true;
|
|
WorldGen.noMapUpdate = false;
|
|
}
|
|
|
|
public static void playWorld() => ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.playWorldCallBack), (object) 1);
|
|
|
|
public static void saveAndPlayCallBack(object threadContext) => WorldFile.SaveWorld();
|
|
|
|
public static void saveAndPlay() => ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.saveAndPlayCallBack), (object) 1);
|
|
|
|
public static void saveToonWhilePlayingCallBack(object threadContext) => Player.SavePlayer(Main.ActivePlayerFileData);
|
|
|
|
public static void saveToonWhilePlaying() => ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.saveToonWhilePlayingCallBack), (object) 1);
|
|
|
|
public static void serverLoadWorldCallBack()
|
|
{
|
|
Main.rand = new UnifiedRandom((int) DateTime.Now.Ticks);
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
bool isCloudSave = Main.ActiveWorldFileData.IsCloudSave;
|
|
WorldGen.worldBackup = FileUtilities.Exists(Main.worldPathName + ".bak", isCloudSave);
|
|
if (!Main.dedServ)
|
|
{
|
|
if (WorldGen.worldBackup)
|
|
{
|
|
Main.menuMode = 200;
|
|
return;
|
|
}
|
|
Main.menuMode = 201;
|
|
return;
|
|
}
|
|
if (WorldGen.worldBackup)
|
|
{
|
|
FileUtilities.Copy(Main.worldPathName + ".bak", Main.worldPathName, isCloudSave);
|
|
FileUtilities.Delete(Main.worldPathName + ".bak", isCloudSave);
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
WorldFile.LoadWorld(Main.ActiveWorldFileData.IsCloudSave);
|
|
if (WorldGen.loadFailed || !WorldGen.loadSuccess)
|
|
{
|
|
Console.WriteLine(Language.GetTextValue("Error.LoadFailed"));
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine(Language.GetTextValue("Error.LoadFailedNoBackup"));
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
WorldGen._lastSeed = Main.ActiveWorldFileData.Seed;
|
|
SoundEngine.PlaySound(10);
|
|
WorldFile.SetOngoingToTemps();
|
|
WorldGen.Hooks.WorldLoaded();
|
|
}
|
|
|
|
public static Task serverLoadWorld() => Task.Factory.StartNew(new Action(WorldGen.serverLoadWorldCallBack));
|
|
|
|
public static void clearWorld()
|
|
{
|
|
Main.getGoodWorld = false;
|
|
Main.drunkWorld = false;
|
|
NPC.ResetBadgerHatTime();
|
|
NPC.freeCake = false;
|
|
Main.mapDelay = 2;
|
|
Main.ResetWindCounter(true);
|
|
WorldGen.TownManager = new TownRoomManager();
|
|
WorldGen.Hooks.ClearWorld();
|
|
TileEntity.Clear();
|
|
Main.checkXMas();
|
|
Main.checkHalloween();
|
|
if (Main.mapReady)
|
|
{
|
|
for (int index = 0; index < WorldGen.lastMaxTilesX; ++index)
|
|
{
|
|
double num = (double) index / (double) WorldGen.lastMaxTilesX;
|
|
Main.statusText = Lang.gen[65].Value;
|
|
}
|
|
Main.Map.Clear();
|
|
}
|
|
NPC.MoonLordCountdown = 0;
|
|
Main.forceHalloweenForToday = false;
|
|
Main.forceXMasForToday = false;
|
|
NPC.RevengeManager.Reset();
|
|
Main.pumpkinMoon = false;
|
|
Main.clearMap = true;
|
|
Main.mapTime = 0;
|
|
Main.updateMap = false;
|
|
Main.mapReady = false;
|
|
Main.refreshMap = false;
|
|
Main.eclipse = false;
|
|
Main.slimeRain = false;
|
|
Main.slimeRainTime = 0.0;
|
|
Main.slimeWarningTime = 0;
|
|
Main.sundialCooldown = 0;
|
|
Main.fastForwardTime = false;
|
|
BirthdayParty.WorldClear();
|
|
LanternNight.WorldClear();
|
|
WorldGen.mysticLogsEvent.WorldClear();
|
|
Sandstorm.WorldClear();
|
|
Main.UpdateTimeRate();
|
|
Main.wofNPCIndex = -1;
|
|
NPC.waveKills = 0.0f;
|
|
WorldGen.spawnHardBoss = 0;
|
|
WorldGen.totalSolid2 = 0;
|
|
WorldGen.totalGood2 = 0;
|
|
WorldGen.totalEvil2 = 0;
|
|
WorldGen.totalBlood2 = 0;
|
|
WorldGen.totalSolid = 0;
|
|
WorldGen.totalGood = 0;
|
|
WorldGen.totalEvil = 0;
|
|
WorldGen.totalBlood = 0;
|
|
WorldFile.ResetTemps();
|
|
Main.maxRaining = 0.0f;
|
|
WorldGen.totalX = 0;
|
|
WorldGen.totalD = 0;
|
|
WorldGen.tEvil = (byte) 0;
|
|
WorldGen.tBlood = (byte) 0;
|
|
WorldGen.tGood = (byte) 0;
|
|
WorldGen.spawnEye = false;
|
|
WorldGen.prioritizedTownNPCType = 0;
|
|
WorldGen.shadowOrbCount = 0;
|
|
WorldGen.altarCount = 0;
|
|
WorldGen.SavedOreTiers.Copper = -1;
|
|
WorldGen.SavedOreTiers.Iron = -1;
|
|
WorldGen.SavedOreTiers.Silver = -1;
|
|
WorldGen.SavedOreTiers.Gold = -1;
|
|
WorldGen.SavedOreTiers.Cobalt = -1;
|
|
WorldGen.SavedOreTiers.Mythril = -1;
|
|
WorldGen.SavedOreTiers.Adamantite = -1;
|
|
Main.cloudBGActive = 0.0f;
|
|
Main.raining = false;
|
|
Main.hardMode = false;
|
|
Main.helpText = 0;
|
|
Main.BartenderHelpTextIndex = 0;
|
|
Main.dungeonX = 0;
|
|
Main.dungeonY = 0;
|
|
NPC.downedBoss1 = false;
|
|
NPC.downedBoss2 = false;
|
|
NPC.downedBoss3 = false;
|
|
NPC.downedQueenBee = false;
|
|
NPC.downedSlimeKing = false;
|
|
NPC.downedMechBossAny = false;
|
|
NPC.downedMechBoss1 = false;
|
|
NPC.downedMechBoss2 = false;
|
|
NPC.downedMechBoss3 = false;
|
|
NPC.downedFishron = false;
|
|
NPC.downedAncientCultist = false;
|
|
NPC.downedMoonlord = false;
|
|
NPC.downedHalloweenKing = false;
|
|
NPC.downedHalloweenTree = false;
|
|
NPC.downedChristmasIceQueen = false;
|
|
NPC.downedChristmasSantank = false;
|
|
NPC.downedChristmasTree = false;
|
|
NPC.downedPlantBoss = false;
|
|
NPC.downedGolemBoss = false;
|
|
NPC.downedEmpressOfLight = false;
|
|
NPC.downedQueenSlime = false;
|
|
NPC.combatBookWasUsed = false;
|
|
NPC.savedStylist = false;
|
|
NPC.savedGoblin = false;
|
|
NPC.savedWizard = false;
|
|
NPC.savedMech = false;
|
|
NPC.savedTaxCollector = false;
|
|
NPC.savedAngler = false;
|
|
NPC.savedBartender = false;
|
|
NPC.savedGolfer = false;
|
|
NPC.boughtCat = false;
|
|
NPC.boughtDog = false;
|
|
NPC.boughtBunny = false;
|
|
NPC.downedGoblins = false;
|
|
NPC.downedClown = false;
|
|
NPC.downedFrost = false;
|
|
NPC.downedPirates = false;
|
|
NPC.downedMartians = false;
|
|
int num1;
|
|
NPC.LunarApocalypseIsUp = (num1 = 0) != 0;
|
|
NPC.downedTowerStardust = num1 != 0;
|
|
NPC.downedTowerNebula = num1 != 0;
|
|
NPC.downedTowerVortex = num1 != 0;
|
|
NPC.downedTowerSolar = num1 != 0;
|
|
int num2;
|
|
NPC.TowerActiveStardust = (num2 = 0) != 0;
|
|
NPC.TowerActiveNebula = num2 != 0;
|
|
NPC.TowerActiveVortex = num2 != 0;
|
|
NPC.TowerActiveSolar = num2 != 0;
|
|
DD2Event.ResetProgressEntirely();
|
|
NPC.ClearFoundActiveNPCs();
|
|
Main.BestiaryTracker.Reset();
|
|
Main.PylonSystem.Reset();
|
|
CreativePowerManager.Instance.Reset();
|
|
Main.CreativeMenu.Reset();
|
|
WorldGen.shadowOrbSmashed = false;
|
|
WorldGen.spawnMeteor = false;
|
|
WorldGen.stopDrops = false;
|
|
Main.invasionDelay = 0;
|
|
Main.invasionType = 0;
|
|
Main.invasionSize = 0;
|
|
Main.invasionWarn = 0;
|
|
Main.invasionX = 0.0;
|
|
Main.invasionSizeStart = 0;
|
|
Main.treeX[0] = Main.maxTilesX;
|
|
Main.treeX[1] = Main.maxTilesX;
|
|
Main.treeX[2] = Main.maxTilesX;
|
|
Main.treeStyle[0] = 0;
|
|
Main.treeStyle[1] = 0;
|
|
Main.treeStyle[2] = 0;
|
|
Main.treeStyle[3] = 0;
|
|
WorldGen.noLiquidCheck = false;
|
|
Liquid.numLiquid = 0;
|
|
LiquidBuffer.numLiquidBuffer = 0;
|
|
if (Main.netMode == 1 || WorldGen.lastMaxTilesX > Main.maxTilesX || WorldGen.lastMaxTilesY > Main.maxTilesY)
|
|
{
|
|
for (int index1 = 0; index1 < WorldGen.lastMaxTilesX; ++index1)
|
|
{
|
|
float num3 = (float) index1 / (float) WorldGen.lastMaxTilesX;
|
|
Main.statusText = Lang.gen[46].Value + " " + (object) (int) ((double) num3 * 100.0 + 1.0) + "%";
|
|
for (int index2 = 0; index2 < WorldGen.lastMaxTilesY; ++index2)
|
|
Main.tile[index1, index2] = (Tile) null;
|
|
}
|
|
}
|
|
WorldGen.lastMaxTilesX = Main.maxTilesX;
|
|
WorldGen.lastMaxTilesY = Main.maxTilesY;
|
|
if (Main.netMode != 2)
|
|
Main.sectionManager = new WorldSections(Main.maxTilesX / 200, Main.maxTilesY / 150);
|
|
if (Main.netMode != 1)
|
|
{
|
|
for (int index3 = 0; index3 < Main.maxTilesX; ++index3)
|
|
{
|
|
float num4 = (float) index3 / (float) Main.maxTilesX;
|
|
Main.statusText = Lang.gen[47].Value + " " + (object) (int) ((double) num4 * 100.0 + 1.0) + "%";
|
|
for (int index4 = 0; index4 < Main.maxTilesY; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4] == null)
|
|
Main.tile[index3, index4] = new Tile();
|
|
else
|
|
Main.tile[index3, index4].ClearEverything();
|
|
}
|
|
}
|
|
}
|
|
for (int index = 0; index < Main.countsAsHostForGameplay.Length; ++index)
|
|
Main.countsAsHostForGameplay[index] = false;
|
|
CombatText.clearAll();
|
|
for (int index = 0; index < 6000; ++index)
|
|
{
|
|
Main.dust[index] = new Dust();
|
|
Main.dust[index].dustIndex = index;
|
|
}
|
|
for (int index = 0; index < 600; ++index)
|
|
Main.gore[index] = new Gore();
|
|
for (int index = 0; index < 400; ++index)
|
|
{
|
|
Main.item[index] = new Item();
|
|
Main.timeItemSlotCannotBeReusedFor[index] = 0;
|
|
}
|
|
for (int index = 0; index < 200; ++index)
|
|
Main.npc[index] = new NPC();
|
|
for (int index = 0; index < 1000; ++index)
|
|
Main.projectile[index] = new Projectile();
|
|
for (int index = 0; index < 8000; ++index)
|
|
Main.chest[index] = (Chest) null;
|
|
for (int index = 0; index < 1000; ++index)
|
|
Main.sign[index] = (Sign) null;
|
|
for (int index = 0; index < Liquid.maxLiquid; ++index)
|
|
Main.liquid[index] = new Liquid();
|
|
for (int index = 0; index < 50000; ++index)
|
|
Main.liquidBuffer[index] = new LiquidBuffer();
|
|
WorldGen.setWorldSize();
|
|
Star.SpawnStars();
|
|
WorldGen.worldCleared = true;
|
|
}
|
|
|
|
public static void setBG(int bg, int style)
|
|
{
|
|
switch (bg)
|
|
{
|
|
case 0:
|
|
WorldGen.treeBG1 = style;
|
|
WorldGen.SetForestBGSet(style, Main.treeMntBGSet1, Main.treeBGSet1);
|
|
break;
|
|
case 1:
|
|
WorldGen.corruptBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.corruptBG[0] = 56;
|
|
Main.corruptBG[1] = 57;
|
|
Main.corruptBG[2] = 58;
|
|
return;
|
|
case 2:
|
|
Main.corruptBG[0] = 211;
|
|
Main.corruptBG[1] = 212;
|
|
Main.corruptBG[2] = 213;
|
|
return;
|
|
case 3:
|
|
Main.corruptBG[0] = 225;
|
|
Main.corruptBG[1] = 226;
|
|
Main.corruptBG[2] = 227;
|
|
return;
|
|
case 4:
|
|
Main.corruptBG[0] = 240;
|
|
Main.corruptBG[1] = 241;
|
|
Main.corruptBG[2] = 242;
|
|
return;
|
|
default:
|
|
Main.corruptBG[0] = 12;
|
|
Main.corruptBG[1] = 13;
|
|
Main.corruptBG[2] = 14;
|
|
return;
|
|
}
|
|
case 2:
|
|
WorldGen.jungleBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.jungleBG[0] = 59;
|
|
Main.jungleBG[1] = 60;
|
|
Main.jungleBG[2] = 61;
|
|
return;
|
|
case 2:
|
|
Main.jungleBG[0] = 222;
|
|
Main.jungleBG[1] = 223;
|
|
Main.jungleBG[2] = 224;
|
|
return;
|
|
case 3:
|
|
Main.jungleBG[0] = 237;
|
|
Main.jungleBG[1] = 238;
|
|
Main.jungleBG[2] = 239;
|
|
return;
|
|
case 4:
|
|
Main.jungleBG[0] = 284;
|
|
Main.jungleBG[1] = 285;
|
|
Main.jungleBG[2] = 286;
|
|
return;
|
|
case 5:
|
|
Main.jungleBG[0] = 271;
|
|
Main.jungleBG[1] = 272;
|
|
Main.jungleBG[2] = 273;
|
|
return;
|
|
default:
|
|
Main.jungleBG[0] = 15;
|
|
Main.jungleBG[1] = 16;
|
|
Main.jungleBG[2] = 17;
|
|
return;
|
|
}
|
|
case 3:
|
|
WorldGen.snowBG = style;
|
|
Main.snowMntBG[0] = 35;
|
|
Main.snowMntBG[1] = 36;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.snowBG[0] = 97;
|
|
Main.snowBG[1] = 96;
|
|
Main.snowBG[2] = 95;
|
|
return;
|
|
case 2:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 99;
|
|
Main.snowBG[0] = -1;
|
|
Main.snowBG[1] = -1;
|
|
Main.snowBG[2] = -1;
|
|
return;
|
|
case 3:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 100;
|
|
Main.snowBG[0] = -1;
|
|
Main.snowBG[1] = -1;
|
|
Main.snowBG[2] = -1;
|
|
return;
|
|
case 4:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 101;
|
|
Main.snowBG[0] = -1;
|
|
Main.snowBG[1] = -1;
|
|
Main.snowBG[2] = -1;
|
|
return;
|
|
case 5:
|
|
Main.snowMntBG[0] = -1;
|
|
Main.snowMntBG[1] = -1;
|
|
Main.snowBG[0] = 258;
|
|
Main.snowBG[1] = 259;
|
|
Main.snowBG[2] = 260;
|
|
return;
|
|
case 6:
|
|
Main.snowMntBG[0] = -1;
|
|
Main.snowMntBG[1] = -1;
|
|
Main.snowBG[0] = 263;
|
|
Main.snowBG[1] = 264;
|
|
Main.snowBG[2] = 265;
|
|
return;
|
|
case 7:
|
|
Main.snowMntBG[0] = 269;
|
|
Main.snowMntBG[1] = 270;
|
|
Main.snowBG[0] = 267;
|
|
Main.snowBG[1] = 266;
|
|
Main.snowBG[2] = 268;
|
|
return;
|
|
case 21:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 99;
|
|
Main.snowBG[0] = 95;
|
|
Main.snowBG[1] = 96;
|
|
Main.snowBG[2] = 97;
|
|
return;
|
|
case 22:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 99;
|
|
Main.snowBG[0] = 37;
|
|
Main.snowBG[1] = 38;
|
|
Main.snowBG[2] = 39;
|
|
return;
|
|
case 31:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 100;
|
|
Main.snowBG[0] = 95;
|
|
Main.snowBG[1] = 96;
|
|
Main.snowBG[2] = 97;
|
|
return;
|
|
case 32:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 100;
|
|
Main.snowBG[0] = 37;
|
|
Main.snowBG[1] = 38;
|
|
Main.snowBG[2] = 39;
|
|
return;
|
|
case 41:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 101;
|
|
Main.snowBG[0] = 95;
|
|
Main.snowBG[1] = 96;
|
|
Main.snowBG[2] = 97;
|
|
return;
|
|
case 42:
|
|
Main.snowMntBG[0] = 98;
|
|
Main.snowMntBG[1] = 101;
|
|
Main.snowBG[0] = 37;
|
|
Main.snowBG[1] = 38;
|
|
Main.snowBG[2] = 39;
|
|
return;
|
|
default:
|
|
Main.snowBG[0] = 37;
|
|
Main.snowBG[1] = 38;
|
|
Main.snowBG[2] = 39;
|
|
return;
|
|
}
|
|
case 4:
|
|
WorldGen.hallowBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.hallowBG[0] = 102;
|
|
Main.hallowBG[1] = 103;
|
|
Main.hallowBG[2] = 104;
|
|
return;
|
|
case 2:
|
|
Main.hallowBG[0] = 219;
|
|
Main.hallowBG[1] = 220;
|
|
Main.hallowBG[2] = 221;
|
|
return;
|
|
case 3:
|
|
Main.hallowBG[0] = 243;
|
|
Main.hallowBG[1] = 244;
|
|
Main.hallowBG[2] = 245;
|
|
return;
|
|
case 4:
|
|
Main.hallowBG[0] = -1;
|
|
Main.hallowBG[1] = 261;
|
|
Main.hallowBG[2] = 262;
|
|
return;
|
|
default:
|
|
Main.hallowBG[0] = 29;
|
|
Main.hallowBG[1] = 30;
|
|
Main.hallowBG[2] = 31;
|
|
return;
|
|
}
|
|
case 5:
|
|
WorldGen.crimsonBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.crimsonBG[0] = 105;
|
|
Main.crimsonBG[1] = 106;
|
|
Main.crimsonBG[2] = 107;
|
|
return;
|
|
case 2:
|
|
Main.crimsonBG[0] = 174;
|
|
Main.crimsonBG[1] = -1;
|
|
Main.crimsonBG[2] = 175;
|
|
return;
|
|
case 3:
|
|
Main.crimsonBG[0] = 214;
|
|
Main.crimsonBG[1] = 215;
|
|
Main.crimsonBG[2] = 216;
|
|
return;
|
|
case 4:
|
|
Main.crimsonBG[0] = -1;
|
|
Main.crimsonBG[1] = 229;
|
|
Main.crimsonBG[2] = 230;
|
|
return;
|
|
case 5:
|
|
Main.crimsonBG[0] = (int) byte.MaxValue;
|
|
Main.crimsonBG[1] = 256;
|
|
Main.crimsonBG[2] = 257;
|
|
return;
|
|
default:
|
|
Main.crimsonBG[0] = 43;
|
|
Main.crimsonBG[1] = 44;
|
|
Main.crimsonBG[2] = 45;
|
|
return;
|
|
}
|
|
case 6:
|
|
WorldGen.desertBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.desertBG[0] = 108;
|
|
Main.desertBG[1] = 109;
|
|
Main.desertBG[2] = -1;
|
|
return;
|
|
case 2:
|
|
Main.desertBG[0] = 207;
|
|
Main.desertBG[1] = 208;
|
|
Main.desertBG[2] = -1;
|
|
return;
|
|
case 3:
|
|
Main.desertBG[0] = 217;
|
|
Main.desertBG[1] = 218;
|
|
Main.desertBG[2] = -1;
|
|
return;
|
|
case 4:
|
|
Main.desertBG[0] = 248;
|
|
Main.desertBG[1] = 249;
|
|
Main.desertBG[2] = 250;
|
|
return;
|
|
default:
|
|
Main.desertBG[0] = 21;
|
|
Main.desertBG[1] = 20;
|
|
Main.desertBG[2] = -1;
|
|
return;
|
|
}
|
|
case 7:
|
|
WorldGen.oceanBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.oceanBG = 110;
|
|
return;
|
|
case 2:
|
|
Main.oceanBG = 111;
|
|
return;
|
|
case 3:
|
|
Main.oceanBG = 209;
|
|
return;
|
|
case 4:
|
|
Main.oceanBG = 210;
|
|
return;
|
|
case 5:
|
|
Main.oceanBG = 283;
|
|
return;
|
|
default:
|
|
Main.oceanBG = 28;
|
|
return;
|
|
}
|
|
case 8:
|
|
WorldGen.mushroomBG = style;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
Main.mushroomBG[0] = 231;
|
|
Main.mushroomBG[1] = 232;
|
|
Main.mushroomBG[2] = 233;
|
|
return;
|
|
case 2:
|
|
Main.mushroomBG[0] = 234;
|
|
Main.mushroomBG[1] = 235;
|
|
Main.mushroomBG[2] = 236;
|
|
return;
|
|
case 3:
|
|
Main.mushroomBG[0] = 287;
|
|
Main.mushroomBG[1] = 288;
|
|
Main.mushroomBG[2] = 289;
|
|
return;
|
|
default:
|
|
Main.mushroomBG[0] = 46;
|
|
Main.mushroomBG[1] = 47;
|
|
Main.mushroomBG[2] = 48;
|
|
return;
|
|
}
|
|
case 9:
|
|
WorldGen.underworldBG = style;
|
|
if (style != 1)
|
|
{
|
|
if (style != 2)
|
|
{
|
|
Main.underworldBG[0] = 0;
|
|
Main.underworldBG[1] = 1;
|
|
Main.underworldBG[2] = 2;
|
|
Main.underworldBG[3] = 3;
|
|
Main.underworldBG[4] = 4;
|
|
break;
|
|
}
|
|
Main.underworldBG[0] = 10;
|
|
Main.underworldBG[1] = 11;
|
|
Main.underworldBG[2] = 12;
|
|
Main.underworldBG[3] = 13;
|
|
Main.underworldBG[4] = 9;
|
|
break;
|
|
}
|
|
Main.underworldBG[0] = 5;
|
|
Main.underworldBG[1] = 6;
|
|
Main.underworldBG[2] = 7;
|
|
Main.underworldBG[3] = 8;
|
|
Main.underworldBG[4] = 9;
|
|
break;
|
|
case 10:
|
|
WorldGen.treeBG2 = style;
|
|
WorldGen.SetForestBGSet(style, Main.treeMntBGSet2, Main.treeBGSet2);
|
|
break;
|
|
case 11:
|
|
WorldGen.treeBG3 = style;
|
|
WorldGen.SetForestBGSet(style, Main.treeMntBGSet3, Main.treeBGSet3);
|
|
break;
|
|
case 12:
|
|
WorldGen.treeBG4 = style;
|
|
WorldGen.SetForestBGSet(style, Main.treeMntBGSet4, Main.treeBGSet4);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void SetForestBGSet(int style, int[] mountainSet, int[] treeSet)
|
|
{
|
|
mountainSet[0] = 7;
|
|
mountainSet[1] = 8;
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
treeSet[0] = 50;
|
|
treeSet[1] = 51;
|
|
treeSet[2] = 52;
|
|
break;
|
|
case 2:
|
|
treeSet[0] = 53;
|
|
treeSet[1] = 54;
|
|
treeSet[2] = 55;
|
|
break;
|
|
case 3:
|
|
mountainSet[1] = 90;
|
|
treeSet[0] = 91;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 92;
|
|
break;
|
|
case 4:
|
|
mountainSet[0] = 93;
|
|
mountainSet[1] = 94;
|
|
treeSet[0] = -1;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 5:
|
|
mountainSet[0] = 93;
|
|
mountainSet[1] = 94;
|
|
treeSet[0] = -1;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 55;
|
|
break;
|
|
case 6:
|
|
mountainSet[0] = 171;
|
|
mountainSet[1] = 172;
|
|
treeSet[0] = 173;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 7:
|
|
mountainSet[0] = 176;
|
|
mountainSet[1] = 177;
|
|
treeSet[0] = 178;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 8:
|
|
mountainSet[0] = 179;
|
|
mountainSet[1] = 180;
|
|
treeSet[0] = 184;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 9:
|
|
mountainSet[0] = 277;
|
|
mountainSet[1] = 278;
|
|
treeSet[0] = 279;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 10:
|
|
mountainSet[0] = 280;
|
|
mountainSet[1] = 281;
|
|
treeSet[0] = 282;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = -1;
|
|
break;
|
|
case 31:
|
|
mountainSet[1] = 90;
|
|
treeSet[0] = 91;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 11;
|
|
break;
|
|
case 51:
|
|
mountainSet[0] = 93;
|
|
mountainSet[1] = 94;
|
|
treeSet[0] = -1;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 11;
|
|
break;
|
|
case 71:
|
|
mountainSet[0] = 176;
|
|
mountainSet[1] = 177;
|
|
treeSet[0] = 178;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 11;
|
|
break;
|
|
case 72:
|
|
mountainSet[0] = 176;
|
|
mountainSet[1] = 177;
|
|
treeSet[0] = 178;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 52;
|
|
break;
|
|
case 73:
|
|
mountainSet[0] = 176;
|
|
mountainSet[1] = 177;
|
|
treeSet[0] = 178;
|
|
treeSet[1] = -1;
|
|
treeSet[2] = 55;
|
|
break;
|
|
default:
|
|
treeSet[0] = 9;
|
|
treeSet[1] = 10;
|
|
treeSet[2] = 11;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void RandomizeWeather()
|
|
{
|
|
Main.numClouds = WorldGen.genRand.Next(10, 200);
|
|
Main.windSpeedCurrent = 0.0f;
|
|
while ((double) Main.windSpeedCurrent == 0.0)
|
|
{
|
|
Main.windSpeedCurrent = (float) WorldGen.genRand.Next(-400, 401) * (1f / 1000f);
|
|
Main.windSpeedTarget = Main.windSpeedCurrent;
|
|
}
|
|
Cloud.resetClouds();
|
|
}
|
|
|
|
public static void RandomizeMoonState() => Main.moonType = WorldGen.genRand.Next(9);
|
|
|
|
public static void RandomizeBackgroundBasedOnPlayer(UnifiedRandom random, Player player)
|
|
{
|
|
if (player.ZoneGlowshroom)
|
|
{
|
|
int mushroomBg = WorldGen.mushroomBG;
|
|
while (mushroomBg == WorldGen.mushroomBG)
|
|
WorldGen.setBG(8, random.Next(4));
|
|
}
|
|
else if (player.ZoneUnderworldHeight)
|
|
{
|
|
int underworldBg = WorldGen.underworldBG;
|
|
while (underworldBg == WorldGen.underworldBG)
|
|
WorldGen.setBG(9, random.Next(3));
|
|
}
|
|
else if (player.ZoneDesert)
|
|
{
|
|
int desertBg = WorldGen.desertBG;
|
|
while (desertBg == WorldGen.desertBG)
|
|
WorldGen.setBG(6, random.Next(5));
|
|
}
|
|
else if (player.ZoneHallow)
|
|
{
|
|
int hallowBg = WorldGen.hallowBG;
|
|
while (hallowBg == WorldGen.hallowBG)
|
|
WorldGen.setBG(4, random.Next(5));
|
|
}
|
|
else if (player.ZoneCorrupt)
|
|
{
|
|
int corruptBg = WorldGen.corruptBG;
|
|
while (corruptBg == WorldGen.corruptBG)
|
|
WorldGen.setBG(1, random.Next(5));
|
|
}
|
|
else if (player.ZoneCrimson)
|
|
{
|
|
int crimsonBg = WorldGen.crimsonBG;
|
|
while (crimsonBg == WorldGen.crimsonBG)
|
|
WorldGen.setBG(5, random.Next(6));
|
|
}
|
|
else if (player.ZoneJungle)
|
|
{
|
|
int jungleBg = WorldGen.jungleBG;
|
|
while (jungleBg == WorldGen.jungleBG)
|
|
WorldGen.setBG(2, random.Next(6));
|
|
}
|
|
else if (player.ZoneSnow)
|
|
{
|
|
int snowBg = WorldGen.snowBG;
|
|
while (snowBg == WorldGen.snowBG)
|
|
{
|
|
WorldGen.snowBG = random.Next(8);
|
|
if (WorldGen.snowBG == 2 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 22 : 21;
|
|
if (WorldGen.snowBG == 3 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 32 : 31;
|
|
if (WorldGen.snowBG == 4 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 42 : 41;
|
|
WorldGen.setBG(3, WorldGen.snowBG);
|
|
}
|
|
}
|
|
else if (player.ZoneBeach)
|
|
{
|
|
int oceanBg = WorldGen.oceanBG;
|
|
while (oceanBg == WorldGen.oceanBG)
|
|
WorldGen.setBG(7, random.Next(6));
|
|
}
|
|
else
|
|
{
|
|
int num = (int) ((double) player.Center.X / 16.0);
|
|
if (num < Main.treeX[0])
|
|
{
|
|
int treeBg1 = WorldGen.treeBG1;
|
|
while (treeBg1 == WorldGen.treeBG1)
|
|
WorldGen.treeBG1 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.setBG(0, WorldGen.treeBG1);
|
|
}
|
|
else if (num < Main.treeX[1])
|
|
{
|
|
int treeBg2 = WorldGen.treeBG2;
|
|
while (treeBg2 == WorldGen.treeBG2)
|
|
WorldGen.treeBG2 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.setBG(10, WorldGen.treeBG2);
|
|
}
|
|
else if (num < Main.treeX[2])
|
|
{
|
|
int treeBg3 = WorldGen.treeBG3;
|
|
while (treeBg3 == WorldGen.treeBG3)
|
|
WorldGen.treeBG3 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.setBG(11, WorldGen.treeBG3);
|
|
}
|
|
else
|
|
{
|
|
int treeBg4 = WorldGen.treeBG4;
|
|
while (treeBg4 == WorldGen.treeBG4)
|
|
WorldGen.treeBG4 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.setBG(12, WorldGen.treeBG4);
|
|
}
|
|
}
|
|
WorldGen.BackgroundsCache.UpdateCache();
|
|
}
|
|
|
|
public static void RandomizeBackgrounds(UnifiedRandom random)
|
|
{
|
|
WorldGen.treeBG1 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.treeBG2 = WorldGen.RollRandomForestBGStyle(random);
|
|
while (WorldGen.treeBG2 == WorldGen.treeBG1)
|
|
WorldGen.treeBG2 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.treeBG3 = WorldGen.RollRandomForestBGStyle(random);
|
|
while (WorldGen.treeBG3 == WorldGen.treeBG1 || WorldGen.treeBG3 == WorldGen.treeBG2)
|
|
WorldGen.treeBG3 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.treeBG4 = WorldGen.RollRandomForestBGStyle(random);
|
|
while (WorldGen.treeBG4 == WorldGen.treeBG1 || WorldGen.treeBG4 == WorldGen.treeBG2 || WorldGen.treeBG4 == WorldGen.treeBG3)
|
|
WorldGen.treeBG4 = WorldGen.RollRandomForestBGStyle(random);
|
|
WorldGen.setBG(0, WorldGen.treeBG1);
|
|
WorldGen.setBG(10, WorldGen.treeBG2);
|
|
WorldGen.setBG(11, WorldGen.treeBG3);
|
|
WorldGen.setBG(12, WorldGen.treeBG4);
|
|
WorldGen.setBG(1, random.Next(5));
|
|
WorldGen.setBG(2, random.Next(6));
|
|
WorldGen.snowBG = random.Next(8);
|
|
if (WorldGen.snowBG == 2 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 22 : 21;
|
|
if (WorldGen.snowBG == 3 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 32 : 31;
|
|
if (WorldGen.snowBG == 4 && random.Next(2) == 0)
|
|
WorldGen.snowBG = random.Next(2) != 0 ? 42 : 41;
|
|
WorldGen.setBG(3, WorldGen.snowBG);
|
|
WorldGen.setBG(4, random.Next(5));
|
|
WorldGen.setBG(5, random.Next(6));
|
|
WorldGen.setBG(6, random.Next(5));
|
|
WorldGen.setBG(7, random.Next(6));
|
|
WorldGen.setBG(8, random.Next(4));
|
|
WorldGen.setBG(9, random.Next(3));
|
|
}
|
|
|
|
private static int RollRandomForestBGStyle(UnifiedRandom random)
|
|
{
|
|
int num = random.Next(11);
|
|
if ((num == 1 || num == 2) && random.Next(2) == 0)
|
|
num = random.Next(11);
|
|
if (num == 0)
|
|
num = random.Next(11);
|
|
if (num == 3 && random.Next(3) == 0)
|
|
num = 31;
|
|
if (num == 5 && random.Next(2) == 0)
|
|
num = 51;
|
|
if (num == 7 && random.Next(4) == 0)
|
|
num = random.Next(71, 74);
|
|
return num;
|
|
}
|
|
|
|
public static void RandomizeTreeStyle()
|
|
{
|
|
switch (Main.maxTilesX)
|
|
{
|
|
case 4200:
|
|
Main.treeX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5 - (double) Main.maxTilesX * 0.25), (int) ((double) Main.maxTilesX * 0.5 + (double) Main.maxTilesX * 0.25));
|
|
Main.treeStyle[0] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[1] == Main.treeStyle[0])
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
Main.treeX[1] = Main.maxTilesX;
|
|
Main.treeX[2] = Main.maxTilesX;
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
if (Main.treeStyle[index] == 0 && WorldGen.genRand.Next(3) != 0)
|
|
Main.treeStyle[index] = 4;
|
|
}
|
|
break;
|
|
case 6400:
|
|
Main.treeX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.334 - (double) Main.maxTilesX * 0.200000002980232), (int) ((double) Main.maxTilesX * 0.334 + (double) Main.maxTilesX * 0.200000002980232));
|
|
Main.treeX[1] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.667 - (double) Main.maxTilesX * 0.200000002980232), (int) ((double) Main.maxTilesX * 0.667 + (double) Main.maxTilesX * 0.200000002980232));
|
|
Main.treeStyle[0] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[2] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[1] == Main.treeStyle[0])
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[2] == Main.treeStyle[0] || Main.treeStyle[2] == Main.treeStyle[1])
|
|
Main.treeStyle[2] = WorldGen.genRand.Next(6);
|
|
Main.treeX[2] = Main.maxTilesX;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
if (Main.treeStyle[index] == 0 && WorldGen.genRand.Next(3) != 0)
|
|
Main.treeStyle[index] = 4;
|
|
}
|
|
break;
|
|
default:
|
|
Main.treeX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.25 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.25 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.treeX[1] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.5 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.treeX[2] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.75 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.75 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.treeStyle[0] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[2] = WorldGen.genRand.Next(6);
|
|
Main.treeStyle[3] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[1] == Main.treeStyle[0])
|
|
Main.treeStyle[1] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[2] == Main.treeStyle[0] || Main.treeStyle[2] == Main.treeStyle[1])
|
|
Main.treeStyle[2] = WorldGen.genRand.Next(6);
|
|
while (Main.treeStyle[3] == Main.treeStyle[0] || Main.treeStyle[3] == Main.treeStyle[1] || Main.treeStyle[3] == Main.treeStyle[2])
|
|
Main.treeStyle[3] = WorldGen.genRand.Next(6);
|
|
for (int index = 0; index < 4; ++index)
|
|
{
|
|
if (Main.treeStyle[index] == 0 && WorldGen.genRand.Next(3) != 0)
|
|
Main.treeStyle[index] = 4;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void RandomizeCaveBackgrounds()
|
|
{
|
|
int maxValue = 8;
|
|
switch (Main.maxTilesX)
|
|
{
|
|
case 4200:
|
|
Main.caveBackX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5 - (double) Main.maxTilesX * 0.25), (int) ((double) Main.maxTilesX * 0.5 + (double) Main.maxTilesX * 0.25));
|
|
Main.caveBackX[1] = Main.maxTilesX;
|
|
Main.caveBackX[2] = Main.maxTilesX;
|
|
Main.caveBackStyle[0] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[1] == Main.caveBackStyle[0])
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
break;
|
|
case 6400:
|
|
Main.caveBackX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.334 - (double) Main.maxTilesX * 0.200000002980232), (int) ((double) Main.maxTilesX * 0.334 + (double) Main.maxTilesX * 0.200000002980232));
|
|
Main.caveBackX[1] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.667 - (double) Main.maxTilesX * 0.200000002980232), (int) ((double) Main.maxTilesX * 0.667 + (double) Main.maxTilesX * 0.200000002980232));
|
|
Main.caveBackX[2] = Main.maxTilesX;
|
|
Main.caveBackStyle[0] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[2] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[1] == Main.caveBackStyle[0])
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[2] == Main.caveBackStyle[0] || Main.caveBackStyle[2] == Main.caveBackStyle[1])
|
|
Main.caveBackStyle[2] = WorldGen.genRand.Next(maxValue);
|
|
break;
|
|
default:
|
|
Main.caveBackX[0] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.25 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.25 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.caveBackX[1] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.5 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.caveBackX[2] = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.75 - (double) Main.maxTilesX * 0.150000005960464), (int) ((double) Main.maxTilesX * 0.75 + (double) Main.maxTilesX * 0.150000005960464));
|
|
Main.caveBackStyle[0] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[2] = WorldGen.genRand.Next(maxValue);
|
|
Main.caveBackStyle[3] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[1] == Main.caveBackStyle[0])
|
|
Main.caveBackStyle[1] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[2] == Main.caveBackStyle[0] || Main.caveBackStyle[2] == Main.caveBackStyle[1])
|
|
Main.caveBackStyle[2] = WorldGen.genRand.Next(maxValue);
|
|
while (Main.caveBackStyle[3] == Main.caveBackStyle[0] || Main.caveBackStyle[3] == Main.caveBackStyle[1] || Main.caveBackStyle[3] == Main.caveBackStyle[2])
|
|
Main.caveBackStyle[3] = WorldGen.genRand.Next(maxValue);
|
|
break;
|
|
}
|
|
Main.iceBackStyle = WorldGen.genRand.Next(4);
|
|
Main.hellBackStyle = WorldGen.genRand.Next(3);
|
|
Main.jungleBackStyle = WorldGen.genRand.Next(2);
|
|
}
|
|
|
|
private static void ResetGenerator()
|
|
{
|
|
WorldGen.numOrePatch = 0;
|
|
WorldGen.numTunnels = 0;
|
|
WorldGen.numLakes = 0;
|
|
WorldGen.numMushroomBiomes = 0;
|
|
WorldGen.numOceanCaveTreasure = 0;
|
|
WorldGen.numOasis = 0;
|
|
WorldGen.mudWall = false;
|
|
WorldGen.hellChest = 0;
|
|
WorldGen.JungleX = 0;
|
|
WorldGen.numMCaves = 0;
|
|
WorldGen.numIslandHouses = 0;
|
|
WorldGen.houseCount = 0;
|
|
WorldGen.dEnteranceX = 0;
|
|
WorldGen.numDRooms = 0;
|
|
WorldGen.numDDoors = 0;
|
|
WorldGen.generatedShadowKey = false;
|
|
WorldGen.numDungeonPlatforms = 0;
|
|
WorldGen.numJChests = 0;
|
|
WorldGen.JungleItemCount = 0;
|
|
}
|
|
|
|
public static bool mayanTrap(int x2, int y2)
|
|
{
|
|
int num1 = 1;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num1 = 0;
|
|
int index1 = x2;
|
|
int y = y2;
|
|
while (!WorldGen.SolidOrSlopedTile(index1, y))
|
|
{
|
|
++y;
|
|
if (y >= Main.maxTilesY - 300)
|
|
return false;
|
|
}
|
|
if (Main.tile[index1, y].type == (ushort) 232 || Main.tile[index1, y].type == (ushort) 10)
|
|
return false;
|
|
int j = y - 1;
|
|
if (Main.tile[index1, j].liquid > (byte) 0 && Main.tile[index1, j].lava())
|
|
return false;
|
|
if (num1 == -1 && WorldGen.genRand.Next(20) == 0)
|
|
num1 = 2;
|
|
else if (num1 == -1)
|
|
num1 = WorldGen.genRand.Next(2);
|
|
if (Main.tile[index1, j].nactive() || Main.tile[index1 - 1, j].nactive() || Main.tile[index1 + 1, j].nactive() || Main.tile[index1, j - 1].nactive() || Main.tile[index1 - 1, j - 1].nactive() || Main.tile[index1 + 1, j - 1].nactive() || Main.tile[index1, j - 2].nactive() || Main.tile[index1 - 1, j - 2].nactive() || Main.tile[index1 + 1, j - 2].nactive() || Main.tile[index1, j + 1].type == (ushort) 10 || Main.tile[index1, j + 1].type == (ushort) 48 || Main.tile[index1, j + 1].type == (ushort) 232)
|
|
return false;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
int x1 = index1;
|
|
int index2 = j - WorldGen.genRand.Next(3);
|
|
while (!WorldGen.SolidOrSlopedTile(x1, index2))
|
|
--x1;
|
|
int x3 = x1;
|
|
int x4 = index1;
|
|
while (!WorldGen.SolidOrSlopedTile(x4, index2))
|
|
++x4;
|
|
int x5 = x4;
|
|
int num2 = index1 - x3;
|
|
int num3 = x5 - index1;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
if (num2 > 5 && num2 < 50)
|
|
flag1 = true;
|
|
if (num3 > 5 && num3 < 50)
|
|
flag2 = true;
|
|
if (flag1 && !WorldGen.SolidOrSlopedTile(x3, index2 + 1))
|
|
flag1 = false;
|
|
if (flag2 && !WorldGen.SolidOrSlopedTile(x5, index2 + 1))
|
|
flag2 = false;
|
|
if (flag1 && (Main.tile[x3, index2].type == (ushort) 10 || Main.tile[x3, index2].type == (ushort) 48 || Main.tile[x3, index2 + 1].type == (ushort) 10 || Main.tile[x3, index2 + 1].type == (ushort) 48))
|
|
flag1 = false;
|
|
if (flag2 && (Main.tile[x5, index2].type == (ushort) 10 || Main.tile[x5, index2].type == (ushort) 48 || Main.tile[x5, index2 + 1].type == (ushort) 10 || Main.tile[x5, index2 + 1].type == (ushort) 48))
|
|
flag2 = false;
|
|
int num4;
|
|
int i;
|
|
if (flag1 & flag2)
|
|
{
|
|
num4 = 1;
|
|
i = x3;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
i = x5;
|
|
num4 = -1;
|
|
}
|
|
}
|
|
else if (flag2)
|
|
{
|
|
i = x5;
|
|
num4 = -1;
|
|
}
|
|
else
|
|
{
|
|
if (!flag1)
|
|
return false;
|
|
i = x3;
|
|
num4 = 1;
|
|
}
|
|
if (Main.tile[i, index2].wall != (ushort) 87 || Main.tile[i, index2].type == (ushort) 190 || Main.tile[i, index2].type == (ushort) 135 || Main.tile[i, index2].type == (ushort) 137 || Main.tile[i, index2].type == (ushort) 232 || Main.tile[i, index2].type == (ushort) 237 || Main.tile[i, index2].type == (ushort) 10)
|
|
return false;
|
|
WorldGen.PlaceTile(index1, j, 135, true, true, style: 6);
|
|
WorldGen.KillTile(i, index2);
|
|
int num5 = WorldGen.genRand.Next(3);
|
|
if (Main.tile[index1, j].wire())
|
|
num5 = 0;
|
|
if (Main.tile[index1, j].wire2())
|
|
num5 = 1;
|
|
if (Main.tile[index1, j].wire3())
|
|
num5 = 2;
|
|
int num6 = Math.Abs(i - index1);
|
|
int style1 = 1;
|
|
if (num6 < 10 && WorldGen.genRand.Next(3) != 0)
|
|
style1 = 2;
|
|
WorldGen.PlaceTile(i, index2, 137, true, true, style: style1);
|
|
if (num4 == 1)
|
|
Main.tile[i, index2].frameX += (short) 18;
|
|
int num7 = WorldGen.genRand.Next(5);
|
|
int index3 = index2;
|
|
while (num7 > 0)
|
|
{
|
|
--num7;
|
|
--index3;
|
|
if (WorldGen.SolidTile(i, index3) && WorldGen.SolidTile(i - num4, index3) && !WorldGen.SolidOrSlopedTile(i + num4, index3))
|
|
{
|
|
WorldGen.PlaceTile(i, index3, 137, true, true, style: style1);
|
|
if (num4 == 1)
|
|
Main.tile[i, index3].frameX += (short) 18;
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Main.tile[i, index3].wire(true);
|
|
continue;
|
|
case 1:
|
|
Main.tile[i, index3].wire2(true);
|
|
continue;
|
|
case 2:
|
|
Main.tile[i, index3].wire3(true);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
int index4 = index1;
|
|
int index5 = j;
|
|
while (index4 != i || index5 != index2)
|
|
{
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Main.tile[index4, index5].wire(true);
|
|
break;
|
|
case 1:
|
|
Main.tile[index4, index5].wire2(true);
|
|
break;
|
|
case 2:
|
|
Main.tile[index4, index5].wire3(true);
|
|
break;
|
|
}
|
|
if (index4 > i)
|
|
--index4;
|
|
if (index4 < i)
|
|
++index4;
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Main.tile[index4, index5].wire(true);
|
|
break;
|
|
case 1:
|
|
Main.tile[index4, index5].wire2(true);
|
|
break;
|
|
case 2:
|
|
Main.tile[index4, index5].wire3(true);
|
|
break;
|
|
}
|
|
if (index5 > index2)
|
|
--index5;
|
|
if (index5 < index2)
|
|
++index5;
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Main.tile[index4, index5].wire(true);
|
|
continue;
|
|
case 1:
|
|
Main.tile[index4, index5].wire2(true);
|
|
continue;
|
|
case 2:
|
|
Main.tile[index4, index5].wire3(true);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
return true;
|
|
case 1:
|
|
int index6 = index1;
|
|
int index7 = j;
|
|
while (!WorldGen.SolidOrSlopedTile(index6, index7))
|
|
{
|
|
--index7;
|
|
if ((double) index7 < Main.worldSurface)
|
|
return false;
|
|
}
|
|
int num8 = Math.Abs(index7 - j);
|
|
if (num8 < 3)
|
|
return false;
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
if (Main.tile[index1, j].wire())
|
|
num9 = 0;
|
|
if (Main.tile[index1, j].wire2())
|
|
num9 = 1;
|
|
if (Main.tile[index1, j].wire3())
|
|
num9 = 2;
|
|
int style2 = 3;
|
|
if (num8 < 16 && WorldGen.genRand.Next(3) != 0)
|
|
style2 = 4;
|
|
if (Main.tile[index6, index7].type == (ushort) 135 || Main.tile[index6, index7].type == (ushort) 137 || Main.tile[index6, index7].type == (ushort) 232 || Main.tile[index6, index7].type == (ushort) 237 || Main.tile[index6, index7].type == (ushort) 10 || Main.tile[index6, index7].wall != (ushort) 87)
|
|
return false;
|
|
WorldGen.PlaceTile(index1, j, 135, true, true, style: 6);
|
|
WorldGen.PlaceTile(index6, index7, 137, true, true, style: style2);
|
|
for (int index8 = 0; index8 < 2; ++index8)
|
|
{
|
|
int num10 = WorldGen.genRand.Next(1, 5);
|
|
int index9 = index6;
|
|
int num11 = -1;
|
|
if (index8 == 1)
|
|
num11 = 1;
|
|
while (num10 > 0)
|
|
{
|
|
--num10;
|
|
index9 += num11;
|
|
if (WorldGen.SolidTile(index9, index7 - 1) && !WorldGen.SolidOrSlopedTile(index9, index7 + 1))
|
|
{
|
|
WorldGen.PlaceTile(index9, index7, 137, true, true, style: style2);
|
|
switch (num9)
|
|
{
|
|
case 0:
|
|
Main.tile[index9, index7].wire(true);
|
|
continue;
|
|
case 1:
|
|
Main.tile[index9, index7].wire2(true);
|
|
continue;
|
|
case 2:
|
|
Main.tile[index9, index7].wire3(true);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
}
|
|
int index10 = index1;
|
|
int index11 = j;
|
|
while (index10 != index6 || index11 != index7)
|
|
{
|
|
switch (num9)
|
|
{
|
|
case 0:
|
|
Main.tile[index10, index11].wire(true);
|
|
break;
|
|
case 1:
|
|
Main.tile[index10, index11].wire2(true);
|
|
break;
|
|
case 2:
|
|
Main.tile[index10, index11].wire3(true);
|
|
break;
|
|
}
|
|
if (index10 > index6)
|
|
--index10;
|
|
if (index10 < index6)
|
|
++index10;
|
|
switch (num9)
|
|
{
|
|
case 0:
|
|
Main.tile[index10, index11].wire(true);
|
|
break;
|
|
case 1:
|
|
Main.tile[index10, index11].wire2(true);
|
|
break;
|
|
case 2:
|
|
Main.tile[index10, index11].wire3(true);
|
|
break;
|
|
}
|
|
if (index11 > index7)
|
|
--index11;
|
|
if (index11 < index7)
|
|
++index11;
|
|
switch (num9)
|
|
{
|
|
case 0:
|
|
Main.tile[index10, index11].wire(true);
|
|
continue;
|
|
case 1:
|
|
Main.tile[index10, index11].wire2(true);
|
|
continue;
|
|
case 2:
|
|
Main.tile[index10, index11].wire3(true);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool placeLavaTrap(int x, int y)
|
|
{
|
|
int num1 = 5;
|
|
int num2 = 50;
|
|
int num3 = 40;
|
|
int num4 = 20;
|
|
int num5 = 4;
|
|
if (Main.tile[x, y].active() || Main.tile[x, y].liquid < byte.MaxValue || !Main.tile[x, y].lava())
|
|
return false;
|
|
int num6 = 0;
|
|
for (int index1 = x - num1; index1 <= x + num1; ++index1)
|
|
{
|
|
for (int index2 = y - num1; index2 <= y + num1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].lava() && !Main.tile[index1, index2].active() && Main.tile[index1, index2].liquid == byte.MaxValue)
|
|
++num6;
|
|
}
|
|
}
|
|
if (num6 < num2)
|
|
return false;
|
|
int index3 = y;
|
|
while (!Main.tile[x, index3].active())
|
|
{
|
|
++index3;
|
|
if (index3 > Main.maxTilesY - 200)
|
|
return false;
|
|
}
|
|
if (!Main.tileSolid[(int) Main.tile[x, index3].type] || Main.tileSolidTop[(int) Main.tile[x, index3].type])
|
|
return false;
|
|
int num7 = index3;
|
|
for (int index4 = x - num4; index4 <= x + num4; ++index4)
|
|
{
|
|
for (int index5 = index3 - num4; index5 <= index3 + num4; ++index5)
|
|
{
|
|
if (Main.tile[index4, index5].wire())
|
|
return false;
|
|
}
|
|
}
|
|
while (Main.tile[x, index3].active() && Main.tileSolid[(int) Main.tile[x, index3].type] && !Main.tileSolidTop[(int) Main.tile[x, index3].type])
|
|
{
|
|
++index3;
|
|
if (index3 > Main.maxTilesY - 200)
|
|
return false;
|
|
}
|
|
Tile tile = Main.tile[x, index3 - 1];
|
|
if (Main.tileDungeon[(int) tile.type] || tile.type == (ushort) 225 || tile.type == (ushort) 226)
|
|
return false;
|
|
int num8 = index3;
|
|
while (!Main.tile[x, index3].active())
|
|
{
|
|
++index3;
|
|
if (index3 > Main.maxTilesY - 200 || Main.tile[x, index3].liquid > (byte) 0)
|
|
return false;
|
|
}
|
|
if (!Main.tileSolid[(int) Main.tile[x, index3].type] || Main.tileSolidTop[(int) Main.tile[x, index3].type])
|
|
return false;
|
|
int j = index3 - 1;
|
|
if (j - num7 > num3 || j - num8 < num5)
|
|
return false;
|
|
Main.tile[x, index3].slope((byte) 0);
|
|
Main.tile[x, index3].halfBrick(false);
|
|
WorldGen.PlaceTile(x, j, 135, forced: true, style: 7);
|
|
for (int index6 = num7; index6 <= j; ++index6)
|
|
{
|
|
Main.tile[x, index6].wire(true);
|
|
if (index6 < num8)
|
|
{
|
|
Main.tile[x, index6].slope((byte) 0);
|
|
Main.tile[x, index6].halfBrick(false);
|
|
Main.tile[x, index6].actuator(true);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool IsTileNearby(int x, int y, int type, int distance)
|
|
{
|
|
for (int x1 = x - distance; x1 <= x + distance; ++x1)
|
|
{
|
|
for (int y1 = y - distance; y1 <= y + distance; ++y1)
|
|
{
|
|
if (WorldGen.InWorld(x1, y1) && Main.tile[x1, y1].active() && (int) Main.tile[x1, y1].type == type)
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool placeTrap(int x2, int y2, int type = -1)
|
|
{
|
|
int index1 = x2;
|
|
int j1 = y2;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
while (!WorldGen.SolidTile(index1, j1))
|
|
{
|
|
++j1;
|
|
if (j1 > Main.maxTilesY - 10)
|
|
return false;
|
|
if (j1 >= Main.maxTilesY - 300)
|
|
flag2 = true;
|
|
}
|
|
int index2 = j1 - 1;
|
|
if (WorldGen.IsTileNearby(index1, index2, 70, 20) || Main.tile[index1, index2].wall == (ushort) 87)
|
|
return false;
|
|
if (Main.tile[index1, index2].liquid > (byte) 0 && Main.tile[index1, index2].lava())
|
|
flag1 = true;
|
|
if (type == -1 && WorldGen.genRand.Next(20) == 0)
|
|
type = 2;
|
|
else if (type == -1 && index2 > WorldGen.lavaLine + 30 && WorldGen.genRand.Next(6) != 0)
|
|
type = 3;
|
|
else if (type == -1)
|
|
type = WorldGen.genRand.Next(2);
|
|
if (!WorldGen.InWorld(index1, index2, 3) || flag1 && type != 3 || flag2 && type != 3 || Main.tile[index1, index2].nactive() || Main.tile[index1 - 1, index2].nactive() || Main.tile[index1 + 1, index2].nactive() || Main.tile[index1, index2 - 1].nactive() || Main.tile[index1 - 1, index2 - 1].nactive() || Main.tile[index1 + 1, index2 - 1].nactive() || Main.tile[index1, index2 - 2].nactive() || Main.tile[index1 - 1, index2 - 2].nactive() || Main.tile[index1 + 1, index2 - 2].nactive() || Main.tile[index1, index2 + 1].type == (ushort) 48 || Main.tile[index1, index2 + 1].type == (ushort) 232)
|
|
return false;
|
|
if (type == 1)
|
|
{
|
|
for (int index3 = index1 - 3; index3 <= index1 + 3; ++index3)
|
|
{
|
|
for (int index4 = index2 - 3; index4 <= index2 + 3; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].type == (ushort) 147 || Main.tile[index3, index4].type == (ushort) 161)
|
|
type = 0;
|
|
}
|
|
}
|
|
}
|
|
if (type == 0)
|
|
{
|
|
int i1 = index1;
|
|
int j2 = index2 - WorldGen.genRand.Next(3);
|
|
while (!WorldGen.SolidTile(i1, j2) && !Main.tileCracked[(int) Main.tile[i1, j2].type])
|
|
{
|
|
--i1;
|
|
if (i1 < 0)
|
|
return false;
|
|
}
|
|
int i2 = i1;
|
|
int i3 = index1;
|
|
while (!WorldGen.SolidTile(i3, j2) && !Main.tileCracked[(int) Main.tile[i3, j2].type])
|
|
{
|
|
++i3;
|
|
if (i3 > Main.maxTilesX)
|
|
return false;
|
|
}
|
|
int i4 = i3;
|
|
int num1 = index1 - i2;
|
|
int num2 = i4 - index1;
|
|
bool flag3 = false;
|
|
bool flag4 = false;
|
|
if (num1 > 5 && num1 < 50)
|
|
flag3 = true;
|
|
if (num2 > 5 && num2 < 50)
|
|
flag4 = true;
|
|
if (flag3 && !WorldGen.SolidTile(i2, j2 + 1))
|
|
flag3 = false;
|
|
if (flag4 && !WorldGen.SolidTile(i4, j2 + 1))
|
|
flag4 = false;
|
|
if (flag3 && (Main.tile[i2, j2].type == (ushort) 10 || Main.tile[i2, j2].type == (ushort) 48 || Main.tile[i2, j2 + 1].type == (ushort) 10 || Main.tile[i2, j2 + 1].type == (ushort) 48))
|
|
flag3 = false;
|
|
if (flag4 && (Main.tile[i4, j2].type == (ushort) 10 || Main.tile[i4, j2].type == (ushort) 48 || Main.tile[i4, j2 + 1].type == (ushort) 10 || Main.tile[i4, j2 + 1].type == (ushort) 48))
|
|
flag4 = false;
|
|
int num3;
|
|
int i5;
|
|
if (flag3 & flag4)
|
|
{
|
|
num3 = 1;
|
|
i5 = i2;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
i5 = i4;
|
|
num3 = -1;
|
|
}
|
|
}
|
|
else if (flag4)
|
|
{
|
|
i5 = i4;
|
|
num3 = -1;
|
|
}
|
|
else if (flag3)
|
|
{
|
|
i5 = i2;
|
|
num3 = 1;
|
|
}
|
|
else
|
|
{
|
|
++WorldGen.trapDiag[type, 0];
|
|
return false;
|
|
}
|
|
if (Main.tile[i5, j2].type == (ushort) 190)
|
|
{
|
|
++WorldGen.trapDiag[type, 0];
|
|
return false;
|
|
}
|
|
if (Main.tile[index1, index2].wall > (ushort) 0)
|
|
WorldGen.PlaceTile(index1, index2, 135, true, true, style: 2);
|
|
else
|
|
WorldGen.PlaceTile(index1, index2, 135, true, true, style: WorldGen.genRand.Next(2, 4));
|
|
WorldGen.KillTile(i5, j2);
|
|
WorldGen.PlaceTile(i5, j2, 137, true, true);
|
|
if (num3 == 1)
|
|
Main.tile[i5, j2].frameX += (short) 18;
|
|
int index5 = index1;
|
|
int index6 = index2;
|
|
while (index5 != i5 || index6 != j2)
|
|
{
|
|
Main.tile[index5, index6].wire(true);
|
|
if (index5 > i5)
|
|
--index5;
|
|
if (index5 < i5)
|
|
++index5;
|
|
Main.tile[index5, index6].wire(true);
|
|
if (index6 > j2)
|
|
--index6;
|
|
if (index6 < j2)
|
|
++index6;
|
|
Main.tile[index5, index6].wire(true);
|
|
}
|
|
++WorldGen.trapDiag[type, 1];
|
|
return true;
|
|
}
|
|
if (type == 1)
|
|
{
|
|
int num4 = index1;
|
|
int y = index2 - 8;
|
|
int index7 = num4 + WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.IsTileNearby(index7, y, 138, 10))
|
|
return false;
|
|
bool flag5 = true;
|
|
while (flag5)
|
|
{
|
|
bool flag6 = true;
|
|
int num5 = 0;
|
|
for (int i = index7 - 2; i <= index7 + 3; ++i)
|
|
{
|
|
for (int j3 = y; j3 <= y + 3; ++j3)
|
|
{
|
|
if (!WorldGen.SolidTile(i, j3))
|
|
flag6 = false;
|
|
if (Main.tile[i, j3].active() && (Main.tile[i, j3].type == (ushort) 0 || Main.tile[i, j3].type == (ushort) 1 || Main.tile[i, j3].type == (ushort) 59))
|
|
++num5;
|
|
}
|
|
}
|
|
--y;
|
|
if ((double) y < Main.worldSurface)
|
|
{
|
|
++WorldGen.trapDiag[type, 0];
|
|
return false;
|
|
}
|
|
if (flag6 && num5 > 2)
|
|
flag5 = false;
|
|
}
|
|
if (index2 - y <= 5 || index2 - y >= 40)
|
|
{
|
|
++WorldGen.trapDiag[type, 0];
|
|
return false;
|
|
}
|
|
for (int i = index7; i <= index7 + 1; ++i)
|
|
{
|
|
for (int j4 = y; j4 <= index2; ++j4)
|
|
WorldGen.KillTile(i, j4);
|
|
}
|
|
for (int i = index7 - 2; i <= index7 + 3; ++i)
|
|
{
|
|
for (int j5 = y - 2; j5 <= y + 3; ++j5)
|
|
{
|
|
if (WorldGen.SolidTile(i, j5))
|
|
Main.tile[i, j5].type = (ushort) 1;
|
|
}
|
|
}
|
|
WorldGen.PlaceTile(index1, index2, 135, true, true, style: 7);
|
|
WorldGen.PlaceTile(index7, y + 2, 130, true);
|
|
WorldGen.PlaceTile(index7 + 1, y + 2, 130, true);
|
|
WorldGen.PlaceTile(index7 + 1, y + 1, 138, true);
|
|
int index8 = y + 2;
|
|
Main.tile[index7, index8].wire(true);
|
|
Main.tile[index7 + 1, index8].wire(true);
|
|
int j6 = index8 + 1;
|
|
WorldGen.PlaceTile(index7, j6, 130, true);
|
|
WorldGen.PlaceTile(index7 + 1, j6, 130, true);
|
|
Main.tile[index7, j6].wire(true);
|
|
Main.tile[index7 + 1, j6].wire(true);
|
|
WorldGen.PlaceTile(index7, j6 + 1, 130, true);
|
|
WorldGen.PlaceTile(index7 + 1, j6 + 1, 130, true);
|
|
Main.tile[index7, j6 + 1].wire(true);
|
|
Main.tile[index7 + 1, j6 + 1].wire(true);
|
|
int index9 = index1;
|
|
int index10 = index2;
|
|
while (index9 != index7 || index10 != j6)
|
|
{
|
|
Main.tile[index9, index10].wire(true);
|
|
if (index9 > index7)
|
|
--index9;
|
|
if (index9 < index7)
|
|
++index9;
|
|
Main.tile[index9, index10].wire(true);
|
|
if (index10 > j6)
|
|
--index10;
|
|
if (index10 < j6)
|
|
++index10;
|
|
Main.tile[index9, index10].wire(true);
|
|
}
|
|
++WorldGen.trapDiag[type, 1];
|
|
return true;
|
|
}
|
|
if (type == 2)
|
|
{
|
|
int num = WorldGen.genRand.Next(4, 7);
|
|
int i6 = index1 + WorldGen.genRand.Next(-1, 2);
|
|
int j7 = index2;
|
|
for (int index11 = 0; index11 < num; ++index11)
|
|
{
|
|
++j7;
|
|
if (!WorldGen.SolidTile(i6, j7))
|
|
{
|
|
++WorldGen.trapDiag[type, 0];
|
|
return false;
|
|
}
|
|
}
|
|
for (int i7 = i6 - 2; i7 <= i6 + 2; ++i7)
|
|
{
|
|
for (int j8 = j7 - 2; j8 <= j7 + 2; ++j8)
|
|
{
|
|
if (!WorldGen.SolidTile(i7, j8))
|
|
return false;
|
|
}
|
|
}
|
|
WorldGen.KillTile(i6, j7);
|
|
Main.tile[i6, j7].active(true);
|
|
Main.tile[i6, j7].type = (ushort) 141;
|
|
Main.tile[i6, j7].frameX = (short) 0;
|
|
Main.tile[i6, j7].frameY = (short) (18 * WorldGen.genRand.Next(2));
|
|
WorldGen.PlaceTile(index1, index2, 135, true, true, style: WorldGen.genRand.Next(2, 4));
|
|
int index12 = index1;
|
|
int index13 = index2;
|
|
while (index12 != i6 || index13 != j7)
|
|
{
|
|
Main.tile[index12, index13].wire(true);
|
|
if (index12 > i6)
|
|
--index12;
|
|
if (index12 < i6)
|
|
++index12;
|
|
Main.tile[index12, index13].wire(true);
|
|
if (index13 > j7)
|
|
--index13;
|
|
if (index13 < j7)
|
|
++index13;
|
|
Main.tile[index12, index13].wire(true);
|
|
}
|
|
++WorldGen.trapDiag[type, 1];
|
|
}
|
|
else if (type == 3 && !Main.tile[index1 + 1, index2].active())
|
|
{
|
|
for (int i = index1; i <= index1 + 1; ++i)
|
|
{
|
|
int j9 = index2 + 1;
|
|
if (!WorldGen.SolidTile(i, j9))
|
|
return false;
|
|
}
|
|
int num = WorldGen.genRand.Next(2);
|
|
for (int index14 = 0; index14 < 2; ++index14)
|
|
{
|
|
Main.tile[index1 + index14, index2].active(true);
|
|
Main.tile[index1 + index14, index2].type = (ushort) 443;
|
|
Main.tile[index1 + index14, index2].frameX = (short) (18 * index14 + 36 * num);
|
|
Main.tile[index1 + index14, index2].frameY = (short) 0;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static int countWires(int x, int y, int size)
|
|
{
|
|
int num = 0;
|
|
for (int x1 = x - size; x1 <= x + size; ++x1)
|
|
{
|
|
for (int y1 = y - size; y1 <= y + size; ++y1)
|
|
{
|
|
if (WorldGen.InWorld(x1, y1))
|
|
{
|
|
if (Main.tile[x1, y1].wire())
|
|
++num;
|
|
if (Main.tile[x1, y1].wire2())
|
|
++num;
|
|
if (Main.tile[x1, y1].wire3())
|
|
++num;
|
|
if (Main.tile[x1, y1].wire4())
|
|
++num;
|
|
}
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
public static int countTiles(int x, int y, bool jungle = false, bool lavaOk = false)
|
|
{
|
|
WorldGen.numTileCount = 0;
|
|
WorldGen.shroomCount = 0;
|
|
WorldGen.lavaCount = 0;
|
|
WorldGen.iceCount = 0;
|
|
WorldGen.rockCount = 0;
|
|
WorldGen.CountedTiles.Clear();
|
|
WorldGen.nextCount(x, y, jungle, lavaOk);
|
|
return WorldGen.numTileCount;
|
|
}
|
|
|
|
public static void nextCount(int x, int y, bool jungle = false, bool lavaOk = false)
|
|
{
|
|
if (WorldGen.numTileCount >= WorldGen.maxTileCount)
|
|
return;
|
|
if (x <= 1 || x >= Main.maxTilesX - 1 || y <= 1 || y >= Main.maxTilesY - 1)
|
|
{
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.CountedTiles.ContainsKey(new Point(x, y)))
|
|
return;
|
|
if (Main.tile[x, y].wall == (ushort) 244)
|
|
{
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
}
|
|
else
|
|
{
|
|
if (!jungle)
|
|
{
|
|
if (Main.tile[x, y].wall != (ushort) 0)
|
|
{
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
return;
|
|
}
|
|
if (!lavaOk)
|
|
{
|
|
if (Main.tile[x, y].lava() && Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
++WorldGen.lavaCount;
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
return;
|
|
}
|
|
}
|
|
else if (Main.tile[x, y].lava() && Main.tile[x, y].liquid > (byte) 0)
|
|
++WorldGen.lavaCount;
|
|
}
|
|
if (Main.tile[x, y].active())
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 70)
|
|
++WorldGen.shroomCount;
|
|
if (Main.tile[x, y].type == (ushort) 1)
|
|
++WorldGen.rockCount;
|
|
if (Main.tile[x, y].type == (ushort) 147 || Main.tile[x, y].type == (ushort) 161)
|
|
++WorldGen.iceCount;
|
|
}
|
|
if (WorldGen.SolidTile(x, y))
|
|
return;
|
|
WorldGen.CountedTiles.Add(new Point(x, y), true);
|
|
++WorldGen.numTileCount;
|
|
WorldGen.nextCount(x - 1, y, jungle, lavaOk);
|
|
WorldGen.nextCount(x + 1, y, jungle, lavaOk);
|
|
WorldGen.nextCount(x, y - 1, jungle, lavaOk);
|
|
WorldGen.nextCount(x, y + 1, jungle, lavaOk);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int countDirtTiles(int x, int y)
|
|
{
|
|
WorldGen.numTileCount = 0;
|
|
WorldGen.CountedTiles.Clear();
|
|
WorldGen.nextDirtCount(x, y);
|
|
return WorldGen.numTileCount;
|
|
}
|
|
|
|
public static void nextDirtCount(int x, int y)
|
|
{
|
|
if (WorldGen.numTileCount >= WorldGen.maxTileCount)
|
|
return;
|
|
if (x <= 1 || x >= Main.maxTilesX - 1 || y <= 1 || y >= Main.maxTilesY - 1)
|
|
{
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.CountedTiles.ContainsKey(new Point(x, y)))
|
|
return;
|
|
if (Main.tile[x, y].active() && (Main.tile[x, y].type == (ushort) 147 || Main.tile[x, y].type == (ushort) 161))
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
else if (Main.tile[x, y].wall == (ushort) 244 || Main.tile[x, y].wall == (ushort) 83 || Main.tile[x, y].wall == (ushort) 3 || Main.tile[x, y].wall == (ushort) 187 || Main.tile[x, y].wall == (ushort) 216)
|
|
{
|
|
WorldGen.numTileCount = WorldGen.maxTileCount;
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.SolidTile(x, y) || Main.tile[x, y].wall != (ushort) 2 && Main.tile[x, y].wall != (ushort) 59)
|
|
return;
|
|
WorldGen.CountedTiles.Add(new Point(x, y), true);
|
|
++WorldGen.numTileCount;
|
|
WorldGen.nextDirtCount(x - 1, y);
|
|
WorldGen.nextDirtCount(x + 1, y);
|
|
WorldGen.nextDirtCount(x, y - 1);
|
|
WorldGen.nextDirtCount(x, y + 1);
|
|
WorldGen.nextDirtCount(x - 1, y - 1);
|
|
WorldGen.nextDirtCount(x - 1, y + 1);
|
|
WorldGen.nextDirtCount(x + 1, y - 1);
|
|
WorldGen.nextDirtCount(x + 1, y + 1);
|
|
WorldGen.nextDirtCount(x - 2, y);
|
|
WorldGen.nextDirtCount(x + 2, y);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool InWorld(int x, int y, int fluff = 0) => x >= fluff && x < Main.maxTilesX - fluff && y >= fluff && y < Main.maxTilesY - fluff;
|
|
|
|
public static void gemCave(int x, int y)
|
|
{
|
|
WorldGen.countTiles(x, y);
|
|
for (int index = 0; index < 6; ++index)
|
|
WorldGen.gem[index] = false;
|
|
WorldGen.gem[WorldGen.genRand.Next(6)] = true;
|
|
for (int index = 0; index < 6; ++index)
|
|
{
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
WorldGen.gem[index] = true;
|
|
}
|
|
WorldGen.Spread.Gem(x, y);
|
|
}
|
|
|
|
public static int randGem()
|
|
{
|
|
int index = WorldGen.genRand.Next(6);
|
|
while (!WorldGen.gem[index])
|
|
index = WorldGen.genRand.Next(6);
|
|
return index;
|
|
}
|
|
|
|
public static ushort randGemTile()
|
|
{
|
|
if (WorldGen.genRand.Next(20) != 0)
|
|
return 1;
|
|
switch ((ushort) WorldGen.randGem())
|
|
{
|
|
case 0:
|
|
return 67;
|
|
case 1:
|
|
return 66;
|
|
case 2:
|
|
return 63;
|
|
case 3:
|
|
return 65;
|
|
case 4:
|
|
return 64;
|
|
default:
|
|
return 68;
|
|
}
|
|
}
|
|
|
|
public static void randMoss()
|
|
{
|
|
WorldGen.neonMossType = WorldGen.genRand.NextFromList<ushort>((ushort) 539, (ushort) 536, (ushort) 534);
|
|
WorldGen.mossType[0] = WorldGen.genRand.Next(5);
|
|
WorldGen.mossType[1] = WorldGen.genRand.Next(5);
|
|
while (WorldGen.mossType[1] == WorldGen.mossType[0])
|
|
WorldGen.mossType[1] = WorldGen.genRand.Next(5);
|
|
WorldGen.mossType[2] = WorldGen.genRand.Next(5);
|
|
while (WorldGen.mossType[2] == WorldGen.mossType[0] || WorldGen.mossType[2] == WorldGen.mossType[1])
|
|
WorldGen.mossType[2] = WorldGen.genRand.Next(5);
|
|
}
|
|
|
|
public static void neonMossBiome(int i, int j, int maxY = 99999)
|
|
{
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) ((double) WorldGen.genRand.NextFloat() * 4.0 - 2.0);
|
|
vector2_2.Y = (float) ((double) WorldGen.genRand.NextFloat() * 4.0 - 2.0);
|
|
if ((double) vector2_2.X == 0.0)
|
|
vector2_2.X = 1f;
|
|
while ((double) vector2_2.Length() < 4.0)
|
|
vector2_2 *= 1.5f;
|
|
double num1 = (double) WorldGen.genRand.Next(60, 80);
|
|
double num2 = (double) WorldGen.genRand.Next(30, 40);
|
|
float num3 = (float) (Main.maxTilesX / 4200);
|
|
if (WorldGen.getGoodWorldGen)
|
|
num3 *= 1.5f;
|
|
double num4 = num1 * (double) num3;
|
|
double num5 = num2 * (double) num3;
|
|
while (num5 > 0.0)
|
|
{
|
|
num4 *= 0.980000019073486;
|
|
--num5;
|
|
int num6 = (int) ((double) vector2_1.X - num4);
|
|
int num7 = (int) ((double) vector2_1.X + num4);
|
|
int num8 = (int) ((double) vector2_1.Y - num4);
|
|
int num9 = (int) ((double) vector2_1.Y + num4);
|
|
if (num6 < 1)
|
|
num6 = 1;
|
|
if (num7 > Main.maxTilesX - 1)
|
|
num7 = Main.maxTilesX - 1;
|
|
if (num8 < 1)
|
|
num8 = 1;
|
|
if (num9 > Main.maxTilesY - 1)
|
|
num9 = Main.maxTilesY - 1;
|
|
if ((double) num8 < Main.rockLayer)
|
|
{
|
|
num8 = (int) Main.rockLayer;
|
|
if ((double) vector2_2.Y < 5.0)
|
|
vector2_2.Y = 5f;
|
|
}
|
|
if (num9 > maxY)
|
|
{
|
|
num9 = maxY;
|
|
if ((double) vector2_2.Y > -5.0)
|
|
vector2_2.Y = -5f;
|
|
}
|
|
double num10 = num4 * (1.0 + (double) WorldGen.genRand.NextFloat() * 0.400000005960464 - 0.200000002980232);
|
|
for (int x = num6; x < num7; ++x)
|
|
{
|
|
for (int index = num8; index < num9; ++index)
|
|
{
|
|
if ((double) new Vector2(Math.Abs((float) x - vector2_1.X), Math.Abs((float) index - vector2_1.Y)).Length() < num10 * 0.8 && WorldGen.TileType(x, index) == 1 && (!Main.tile[x - 1, index].active() || !Main.tile[x + 1, index].active() || !Main.tile[x, index - 1].active() || !Main.tile[x, index + 1].active()))
|
|
WorldGen.SpreadGrass(x - 1, index, 1, (int) WorldGen.neonMossType);
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) ((double) WorldGen.genRand.NextFloat() * 4.0 - 2.0);
|
|
vector2_2.Y += (float) ((double) WorldGen.genRand.NextFloat() * 4.0 - 2.0);
|
|
vector2_2.Y = MathHelper.Clamp(vector2_2.Y, -10f, 10f);
|
|
vector2_2.X = MathHelper.Clamp(vector2_2.X, -10f, 10f);
|
|
}
|
|
}
|
|
|
|
public static void setMoss(int x, int y)
|
|
{
|
|
int index = (double) x >= (double) Main.maxTilesX * 0.334 ? ((double) x >= (double) Main.maxTilesX * 0.667 ? 2 : 1) : 0;
|
|
WorldGen.mossWall = (ushort) (54 + WorldGen.mossType[index]);
|
|
WorldGen.mossTile = (ushort) (179 + WorldGen.mossType[index]);
|
|
}
|
|
|
|
public static void FillWallHolesInArea(Microsoft.Xna.Framework.Rectangle worldCoordsArea)
|
|
{
|
|
int num1 = Math.Max(worldCoordsArea.Left, 0);
|
|
int num2 = Math.Min(worldCoordsArea.Right, Main.maxTilesX);
|
|
int num3 = 0;
|
|
for (int x = num1; x <= num2; ++x)
|
|
{
|
|
if (x >= 0 && x < Main.maxTilesX)
|
|
num3 += WorldGen.FillWallHolesInColumn(x, worldCoordsArea.Top, worldCoordsArea.Bottom);
|
|
}
|
|
}
|
|
|
|
private static int FillWallHolesInColumn(int x, int startY, int endY)
|
|
{
|
|
int num = 0;
|
|
x = Utils.Clamp<int>(x, 2, Main.maxTilesX - 1 - 2);
|
|
startY = Math.Max(startY, 2);
|
|
endY = Math.Min(endY, Main.maxTilesY - 2);
|
|
bool flag = false;
|
|
for (int originY = startY; originY < endY; ++originY)
|
|
{
|
|
if (Main.tile[x, originY].wall == (ushort) 0)
|
|
{
|
|
if (flag)
|
|
{
|
|
flag = false;
|
|
if (WorldGen.FillWallHolesInSpot(x, originY, 150))
|
|
++num;
|
|
}
|
|
}
|
|
else
|
|
flag = true;
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private static bool FillWallHolesInSpot(int originX, int originY, int maxWallsThreshold)
|
|
{
|
|
if (!WorldGen.InWorld(originX, originY, 2))
|
|
return false;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
Dictionary<ushort, int> dictionary = new Dictionary<ushort, int>();
|
|
pointList2.Add(new Point(originX, originY));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
if (pointSet.Count >= maxWallsThreshold)
|
|
return false;
|
|
Point point1 = pointList1[0];
|
|
if (pointSet.Contains(point1))
|
|
pointList1.Remove(point1);
|
|
else if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (tile.wall != (ushort) 0)
|
|
{
|
|
dictionary[tile.wall] = !dictionary.ContainsKey(tile.wall) ? 1 : dictionary[tile.wall] + 1;
|
|
}
|
|
else
|
|
{
|
|
bool flag = false;
|
|
if (!flag)
|
|
{
|
|
int y = point1.Y;
|
|
for (int index = point1.X - 1; index <= point1.X + 1; ++index)
|
|
{
|
|
if (!Main.tile[index, y].active())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
int x = point1.X;
|
|
for (int index = point1.Y - 1; index <= point1.Y + 1; ++index)
|
|
{
|
|
if (!Main.tile[x, index].active())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (pointSet.Count == 1)
|
|
return false;
|
|
ushort num1 = 0;
|
|
int num2 = -1;
|
|
foreach (KeyValuePair<ushort, int> keyValuePair in dictionary)
|
|
{
|
|
if (keyValuePair.Value > num2)
|
|
{
|
|
num1 = keyValuePair.Key;
|
|
num2 = keyValuePair.Value;
|
|
}
|
|
}
|
|
if (num2 == -1)
|
|
num1 = (ushort) 2;
|
|
foreach (Point point in pointSet)
|
|
{
|
|
Tile tile = Main.tile[point.X, point.Y];
|
|
if (tile.wall == (ushort) 0)
|
|
tile.wall = num1;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void tileCountAndDestroy()
|
|
{
|
|
for (int x = 10; x < Main.maxTilesX - 10; ++x)
|
|
{
|
|
for (int y = 10; y < Main.maxTilesY - 10; ++y)
|
|
{
|
|
if (Main.tile[x, y].active() && WorldGen.tileCounter(x, y) < WorldGen.tileCounterMax)
|
|
WorldGen.tileCounterKill();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int tileCounter(int x, int y)
|
|
{
|
|
WorldGen.tileCounterNum = 0;
|
|
WorldGen.tileCounterNext(x, y);
|
|
return WorldGen.tileCounterNum;
|
|
}
|
|
|
|
public static void tileCounterNext(int x, int y)
|
|
{
|
|
if (WorldGen.tileCounterNum >= WorldGen.tileCounterMax || x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5 || !Main.tile[x, y].active() || !Main.tileSolid[(int) Main.tile[x, y].type] || !TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[x, y].type])
|
|
return;
|
|
for (int index = 0; index < WorldGen.tileCounterNum; ++index)
|
|
{
|
|
if (WorldGen.tileCounterX[index] == x && WorldGen.tileCounterY[index] == y)
|
|
return;
|
|
}
|
|
WorldGen.tileCounterX[WorldGen.tileCounterNum] = x;
|
|
WorldGen.tileCounterY[WorldGen.tileCounterNum] = y;
|
|
++WorldGen.tileCounterNum;
|
|
WorldGen.tileCounterNext(x - 1, y);
|
|
WorldGen.tileCounterNext(x + 1, y);
|
|
WorldGen.tileCounterNext(x, y - 1);
|
|
WorldGen.tileCounterNext(x, y + 1);
|
|
}
|
|
|
|
public static void tileCounterKill()
|
|
{
|
|
for (int index1 = 0; index1 < WorldGen.tileCounterNum; ++index1)
|
|
{
|
|
int index2 = WorldGen.tileCounterX[index1];
|
|
int index3 = WorldGen.tileCounterY[index1];
|
|
Main.tile[index2, index3].active(false);
|
|
}
|
|
}
|
|
|
|
private static void AddGenerationPass(string name, WorldGenLegacyMethod method) => WorldGen._generator.Append((GenPass) new PassLegacy(name, method));
|
|
|
|
private static void AddGenerationPass(GenPass pass) => WorldGen._generator.Append(pass);
|
|
|
|
private static void AddGenerationPass(string name, float weight, WorldGenLegacyMethod method) => WorldGen._generator.Append((GenPass) new PassLegacy(name, method, weight));
|
|
|
|
public static bool checkUnderground(int x, int y)
|
|
{
|
|
try
|
|
{
|
|
int num1 = 120;
|
|
int num2 = 80;
|
|
int num3 = 3;
|
|
if ((double) y > Main.worldSurface + (double) num2)
|
|
return true;
|
|
if ((double) y < Main.worldSurface / 2.0)
|
|
return false;
|
|
int num4 = y - num2;
|
|
int num5 = x - num1 / 2;
|
|
int num6 = 0;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num5 >= Main.maxTilesX - num1)
|
|
num5 = Main.maxTilesX - num1 - 1;
|
|
for (int i = num5; i < num5 + num1; ++i)
|
|
{
|
|
for (int j = num4; j < num4 + num3; ++j)
|
|
{
|
|
if (WorldGen.SolidTile(i, j) || Main.tile[x, y].wall > (ushort) 0)
|
|
++num6;
|
|
}
|
|
}
|
|
if ((double) num6 >= (double) (num1 * num3) * 0.8)
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static int GetNextJungleChestItem()
|
|
{
|
|
int num = 211;
|
|
switch (WorldGen.JungleItemCount % 4)
|
|
{
|
|
case 0:
|
|
num = 211;
|
|
break;
|
|
case 1:
|
|
num = 212;
|
|
break;
|
|
case 2:
|
|
num = 213;
|
|
break;
|
|
case 3:
|
|
num = 964;
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(50) == 0)
|
|
num = 753;
|
|
else if (WorldGen.genRand.Next(30) == 0)
|
|
num = 2292;
|
|
else if (WorldGen.genRand.Next(20) == 0)
|
|
num = 3017;
|
|
++WorldGen.JungleItemCount;
|
|
return num;
|
|
}
|
|
|
|
private static void ScanTileColumnAndRemoveClumps(int x)
|
|
{
|
|
int num = 0;
|
|
int y = 0;
|
|
for (int index = 10; index < Main.maxTilesY - 10; ++index)
|
|
{
|
|
if (Main.tile[x, index].active() && Main.tileSolid[(int) Main.tile[x, index].type] && TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[x, index].type])
|
|
{
|
|
if (num == 0)
|
|
y = index;
|
|
++num;
|
|
}
|
|
else
|
|
{
|
|
if (num > 0 && num < WorldGen.tileCounterMax)
|
|
{
|
|
++WorldGen.SmallConsecutivesFound;
|
|
if (WorldGen.tileCounter(x, y) < WorldGen.tileCounterMax)
|
|
{
|
|
++WorldGen.SmallConsecutivesEliminated;
|
|
WorldGen.tileCounterKill();
|
|
}
|
|
}
|
|
num = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void OreHelper(int X, int Y)
|
|
{
|
|
for (int index1 = X - 1; index1 <= X + 1; ++index1)
|
|
{
|
|
for (int index2 = Y - 1; index2 <= Y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].type == (ushort) 1 || Main.tile[index1, index2].type == (ushort) 40)
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool StonePatch(int X, int Y)
|
|
{
|
|
int i1 = X;
|
|
int j1 = Y;
|
|
while (!WorldGen.SolidTile(i1, j1))
|
|
{
|
|
++j1;
|
|
if ((double) j1 > Main.worldSurface)
|
|
return false;
|
|
}
|
|
if (!TileID.Sets.Conversion.Grass[(int) Main.tile[i1, j1].type] || !TileID.Sets.Conversion.Grass[(int) Main.tile[i1 - 1, j1].type] || !TileID.Sets.Conversion.Grass[(int) Main.tile[i1 + 1, j1].type] || Main.tile[i1, j1].wall > (ushort) 0)
|
|
return false;
|
|
for (int index1 = i1 - 10; index1 <= i1 + 10; ++index1)
|
|
{
|
|
for (int index2 = j1 + 7; index2 <= j1 + 30; ++index2)
|
|
{
|
|
if (!Main.tile[index1, index2].active() || Main.tileDungeon[(int) Main.tile[index1, index2].type] || TileID.Sets.Clouds[(int) Main.tile[index1, index2].type] || TileID.Sets.Conversion.Sand[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].wall == (ushort) 0 || Main.tile[index1, index2].type == (ushort) 199 || Main.tile[index1, index2].type == (ushort) 23)
|
|
return false;
|
|
}
|
|
}
|
|
Vector2 vector2_1 = new Vector2((float) i1, (float) j1);
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) ((double) WorldGen.genRand.NextFloat() * 0.600000023841858 - 0.300000011920929);
|
|
vector2_2.Y = (float) ((double) WorldGen.genRand.NextFloat() * 0.5 + 0.5);
|
|
float num1 = (float) WorldGen.genRand.Next(13, 18);
|
|
int num2 = WorldGen.genRand.Next(13, 19);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num1 += (float) WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num2 += WorldGen.genRand.Next(3);
|
|
while (num2 > 0)
|
|
{
|
|
--num2;
|
|
for (int i2 = i1 - (int) num1 * 4; (double) i2 <= (double) i1 + (double) num1 * 4.0; ++i2)
|
|
{
|
|
for (int j2 = j1 - (int) num1 * 4; (double) j2 <= (double) j1 + (double) num1 * 4.0; ++j2)
|
|
{
|
|
float num3 = (float) ((double) num1 * (0.699999988079071 + (double) WorldGen.genRand.NextFloat() * 0.600000023841858) * 0.300000011920929);
|
|
if (WorldGen.genRand.Next(8) == 0)
|
|
num3 *= 2f;
|
|
Vector2 vector2_3 = vector2_1 - new Vector2((float) i2, (float) j2);
|
|
if ((double) vector2_3.Length() < (double) num3 * 2.0 && !Main.tile[i2, j2].active() && Main.tile[i2, j2 + 1].active() && Main.tile[i2, j2 + 1].type == (ushort) 1 && WorldGen.genRand.Next(7) == 0 && WorldGen.SolidTile(i2 - 1, j2 + 1) && WorldGen.SolidTile(i2 + 1, j2 + 1))
|
|
{
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
WorldGen.PlaceTile(i2, j2, 186, true, style: WorldGen.genRand.Next(7, 13));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
WorldGen.PlaceSmallPile(i2, j2, WorldGen.genRand.Next(6), 1);
|
|
WorldGen.PlaceSmallPile(i2, j2, WorldGen.genRand.Next(6), 0);
|
|
}
|
|
if ((double) vector2_3.Length() < (double) num3)
|
|
{
|
|
if (Main.tileSolid[(int) Main.tile[i2, j2].type])
|
|
Main.tile[i2, j2].type = (ushort) 1;
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
vector2_2.Y += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
double num4 = (double) MathHelper.Clamp(vector2_2.X, -0.3f, 0.3f);
|
|
double num5 = (double) MathHelper.Clamp(vector2_2.Y, 0.5f, 1f);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool ShellPile(int X, int Y)
|
|
{
|
|
int i1 = X;
|
|
int j1 = Y;
|
|
while (!WorldGen.SolidTile(i1, j1))
|
|
{
|
|
++j1;
|
|
if ((double) j1 > Main.worldSurface)
|
|
return false;
|
|
}
|
|
if (Main.tile[i1, j1].type != (ushort) 53 || Main.tile[i1, j1].wall > (ushort) 0)
|
|
return false;
|
|
int num1 = j1 - 1;
|
|
Vector2 vector2_1 = new Vector2((float) i1, (float) num1);
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) ((double) WorldGen.genRand.NextFloat() * 0.600000023841858 - 0.300000011920929);
|
|
vector2_2.Y = (float) ((double) WorldGen.genRand.NextFloat() * 0.5 + 0.5);
|
|
float num2 = (float) WorldGen.genRand.Next(2, 4);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
++num2;
|
|
int num3 = WorldGen.genRand.Next(3, 6);
|
|
while (num3 > 0)
|
|
{
|
|
--num3;
|
|
for (int i2 = i1 - (int) num2 * 4; (double) i2 <= (double) i1 + (double) num2 * 4.0; ++i2)
|
|
{
|
|
for (int j2 = num1 + (int) num2 * 4; (double) j2 > (double) num1 - (double) num2 * 4.0; --j2)
|
|
{
|
|
float num4 = (float) ((double) num2 * (double) WorldGen.genRand.Next(70, 91) * 0.00999999977648258);
|
|
Vector2 vector2_3 = vector2_1 - new Vector2((float) i2, (float) j2);
|
|
vector2_3.X *= 0.6f;
|
|
if ((double) vector2_3.Length() < (double) num4)
|
|
{
|
|
if (j2 <= num1 + 1 || WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
Main.tile[i2, j2].type = (ushort) 495;
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].halfBrick(false);
|
|
Main.tile[i2, j2].slope((byte) 0);
|
|
if (!Main.tile[i2, j2 + 1].active())
|
|
{
|
|
Main.tile[i2, j2 + 1].type = (ushort) 495;
|
|
Main.tile[i2, j2 + 1].active(true);
|
|
Main.tile[i2, j2 + 1].halfBrick(false);
|
|
Main.tile[i2, j2 + 1].slope((byte) 0);
|
|
if (!Main.tile[i2, j2 + 2].active())
|
|
{
|
|
Main.tile[i2, j2 + 2].type = (ushort) 53;
|
|
Main.tile[i2, j2 + 2].active(true);
|
|
Main.tile[i2, j2 + 2].halfBrick(false);
|
|
Main.tile[i2, j2 + 2].slope((byte) 0);
|
|
if (!Main.tile[i2, j2 + 3].active())
|
|
{
|
|
Main.tile[i2, j2 + 3].type = (ushort) 397;
|
|
Main.tile[i2, j2 + 3].active(true);
|
|
Main.tile[i2, j2 + 3].halfBrick(false);
|
|
Main.tile[i2, j2 + 3].slope((byte) 0);
|
|
}
|
|
}
|
|
}
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
else if (Main.tile[i2, j2].type != (ushort) 495)
|
|
{
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].halfBrick(false);
|
|
Main.tile[i2, j2].slope((byte) 0);
|
|
Main.tile[i2, j2].type = (ushort) 53;
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
vector2_2.Y += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
double num5 = (double) MathHelper.Clamp(vector2_2.X, -0.3f, 0.3f);
|
|
double num6 = (double) MathHelper.Clamp(vector2_2.Y, 0.5f, 1f);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool OrePatch(int X, int Y)
|
|
{
|
|
ushort num1 = (ushort) WorldGen.SavedOreTiers.Copper;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num1 = (ushort) WorldGen.SavedOreTiers.Iron;
|
|
int index1 = X;
|
|
int j = Y;
|
|
while (!WorldGen.SolidTile(index1, j))
|
|
{
|
|
++j;
|
|
if ((double) j > Main.worldSurface)
|
|
return false;
|
|
}
|
|
if (!TileID.Sets.Conversion.Grass[(int) Main.tile[index1, j].type] || !TileID.Sets.Conversion.Grass[(int) Main.tile[index1 - 1, j].type] || !TileID.Sets.Conversion.Grass[(int) Main.tile[index1 + 1, j].type] || Main.tile[index1, j].wall > (ushort) 0)
|
|
return false;
|
|
for (int index2 = index1 - 10; index2 <= index1 + 10; ++index2)
|
|
{
|
|
for (int index3 = j + 7; index3 <= j + 30; ++index3)
|
|
{
|
|
if (!Main.tile[index2, index3].active() || Main.tileDungeon[(int) Main.tile[index2, index3].type] || TileID.Sets.Clouds[(int) Main.tile[index2, index3].type] || TileID.Sets.Conversion.Sand[(int) Main.tile[index2, index3].type] || Main.tile[index2, index3].wall == (ushort) 0)
|
|
return false;
|
|
}
|
|
}
|
|
int index4 = j + WorldGen.genRand.Next(2);
|
|
Main.tile[index1, index4].type = num1;
|
|
Main.tile[index1, index4].active(true);
|
|
WorldGen.OreHelper(index1, index4);
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(index1, index4);
|
|
int num2 = index4;
|
|
while (index4 < num2 + WorldGen.genRand.Next(8, 13))
|
|
{
|
|
index1 += WorldGen.genRand.Next(-1, 2);
|
|
index4 += WorldGen.genRand.Next(1, 3);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
++index4;
|
|
Main.tile[index1, index4].type = num1;
|
|
Main.tile[index1, index4].active(true);
|
|
WorldGen.OreHelper(index1, index4);
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(index1, index4);
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
int index5 = index1 + WorldGen.genRand.Next(-2, 3);
|
|
int index6 = index4 + WorldGen.genRand.Next(2);
|
|
Main.tile[index5, index6].type = num1;
|
|
Main.tile[index5, index6].active(true);
|
|
WorldGen.OreHelper(index5, index6);
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(index5, index6);
|
|
}
|
|
}
|
|
Vector2 vector2_1 = new Vector2((float) index1, (float) index4);
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) ((double) WorldGen.genRand.NextFloat() * 0.600000023841858 - 0.300000011920929);
|
|
vector2_2.Y = (float) ((double) WorldGen.genRand.NextFloat() * 0.5 + 0.5);
|
|
float num3 = (float) WorldGen.genRand.Next(5, 9);
|
|
int num4 = WorldGen.genRand.Next(9, 14);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num3 += (float) WorldGen.genRand.Next(2);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num4 += WorldGen.genRand.Next(2);
|
|
while (num4 > 0)
|
|
{
|
|
--num4;
|
|
for (int index7 = index1 - (int) num3 * 4; (double) index7 <= (double) index1 + (double) num3 * 4.0; ++index7)
|
|
{
|
|
for (int index8 = index4 - (int) num3 * 4; (double) index8 <= (double) index4 + (double) num3 * 4.0; ++index8)
|
|
{
|
|
float num5 = (float) ((double) num3 * (0.5 + (double) WorldGen.genRand.NextFloat() * 0.5) * 0.100000001490116);
|
|
float num6 = (float) ((double) num3 * (0.699999988079071 + (double) WorldGen.genRand.NextFloat() * 0.600000023841858) * 0.300000011920929);
|
|
if (WorldGen.genRand.Next(8) == 0)
|
|
num6 *= 2f;
|
|
Vector2 vector2_3 = vector2_1 - new Vector2((float) index7, (float) index8);
|
|
if ((double) vector2_3.Length() < (double) num5)
|
|
Main.tile[index7, index8].active(false);
|
|
else if ((double) vector2_3.Length() < (double) num6)
|
|
{
|
|
Main.tile[index7, index8].type = num1;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Main.tile[index7, index8].active(true);
|
|
WorldGen.OreHelper(index7, index8);
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
vector2_2.Y += (float) ((double) WorldGen.genRand.NextFloat() * 0.200000002980232 - 0.100000001490116);
|
|
double num7 = (double) MathHelper.Clamp(vector2_2.X, -0.3f, 0.3f);
|
|
double num8 = (double) MathHelper.Clamp(vector2_2.Y, 0.5f, 1f);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceOasis(int X, int Y)
|
|
{
|
|
int index1 = X;
|
|
int index2 = Y;
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall != (ushort) 0)
|
|
return false;
|
|
while (!Main.tile[index1, index2].active() && Main.tile[index1, index2].wall == (ushort) 0 && (double) index2 <= Main.worldSurface)
|
|
++index2;
|
|
if ((double) index2 > Main.worldSurface - 10.0 || Main.tile[index1, index2].type != (ushort) 53)
|
|
return false;
|
|
int num1 = 350;
|
|
for (int index3 = 0; index3 < WorldGen.numOasis; ++index3)
|
|
{
|
|
if ((double) Vector2.Distance(WorldGen.oasisPosition[index3], new Vector2((float) index1, (float) index2)) < (double) num1)
|
|
return false;
|
|
}
|
|
int num2 = WorldGen.genRand.Next(45, 61);
|
|
int oasisHeight = WorldGen.oasisHeight;
|
|
int num3 = num2 + 50;
|
|
int num4 = 4;
|
|
for (int index4 = index1 - num3; index4 <= index1 + num3; ++index4)
|
|
{
|
|
for (int index5 = index2 - oasisHeight; index5 <= index2 + oasisHeight + num4; ++index5)
|
|
{
|
|
Tile tile = Main.tile[index4, index5];
|
|
if (tile.active())
|
|
{
|
|
if (Main.tileSolid[(int) tile.type] && ((tile.type == (ushort) 151 || tile.type == (ushort) 397) && Math.Abs(index4 - index1) < num2 && Math.Abs(index5 - index2) < oasisHeight / 2 || tile.type != (ushort) 53))
|
|
return false;
|
|
}
|
|
else if ((tile.liquid > (byte) 0 || tile.wall > (ushort) 0) && Math.Abs(index4 - index1) < num2 && Math.Abs(index5 - index2) < oasisHeight / 2)
|
|
return false;
|
|
}
|
|
if (index4 > index1 - num2 / 2 && index4 < index1 - num2 / 2 && (Main.tile[index4, index2 - 6].active() || !Main.tile[index4, index2 + 1].active()))
|
|
return false;
|
|
}
|
|
int num5 = 5;
|
|
int num6 = index2;
|
|
while (!Main.tile[index1 - num2, index2 + num5].active() || Main.tile[index1 - num2, index2 + num5].wall != (ushort) 0 || !Main.tile[index1 + num2, index2 + num5].active() || Main.tile[index1 + num2, index2 + num5].wall != (ushort) 0)
|
|
{
|
|
++index2;
|
|
if (index2 - num6 > 20)
|
|
break;
|
|
}
|
|
int num7 = num2 / 2;
|
|
int num8 = index1 - num2 * 3;
|
|
int num9 = index1 + num2 * 3;
|
|
int num10 = index2 - oasisHeight * 4;
|
|
int num11 = index2 + oasisHeight * 3;
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesX)
|
|
num9 = Main.maxTilesX;
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesY)
|
|
num11 = Main.maxTilesY;
|
|
for (int index6 = num8; index6 < num9; ++index6)
|
|
{
|
|
for (int index7 = num10; index7 < num11; ++index7)
|
|
{
|
|
float num12 = (float) Math.Abs(index6 - index1) * 0.7f;
|
|
float num13 = (float) Math.Abs(index7 - index2) * 1.35f;
|
|
double num14 = Math.Sqrt((double) num12 * (double) num12 + (double) num13 * (double) num13);
|
|
float num15 = (float) num7 * (float) (0.529999971389771 + (double) WorldGen.genRand.NextFloat() * 0.0399999991059303);
|
|
float num16 = (1f - (float) Math.Abs(index6 - index1) / (float) (num9 - index1)) * 2.3f;
|
|
float num17 = num16 * num16;
|
|
float num18 = num17 * num17;
|
|
double num19 = (double) num15;
|
|
if (num14 < num19)
|
|
{
|
|
if (index7 == index2 + 1)
|
|
Main.tile[index6, index7].liquid = (byte) 127;
|
|
else if (index7 > index2 + 1)
|
|
Main.tile[index6, index7].liquid = byte.MaxValue;
|
|
Main.tile[index6, index7].lava(false);
|
|
Main.tile[index6, index7].active(false);
|
|
}
|
|
else if (index7 < index2 && (double) num12 < (double) num15 + (double) Math.Abs(index7 - index2) * 3.0 * (double) num18)
|
|
{
|
|
if (Main.tile[index6, index7].type == (ushort) 53)
|
|
Main.tile[index6, index7].active(false);
|
|
}
|
|
else if (index7 >= index2 && (double) num12 < (double) num15 + (double) Math.Abs(index7 - index2) * (double) num18 && Main.tile[index6, index7].wall == (ushort) 0)
|
|
{
|
|
if (Main.tile[index6, index7].active() && Main.tileSolid[(int) Main.tile[index6, index7].type] && !Main.tileSolidTop[(int) Main.tile[index6, index7].type])
|
|
{
|
|
Main.tile[index6, index7].slope((byte) 0);
|
|
Main.tile[index6, index7].halfBrick(false);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index6, index7].active(true);
|
|
Main.tile[index6, index7].type = (ushort) 53;
|
|
Main.tile[index6, index7].slope((byte) 0);
|
|
Main.tile[index6, index7].halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num20 = 50;
|
|
int num21 = index1 - num2 * 2;
|
|
int num22 = index1 + num2 * 2;
|
|
int num23 = index2 + oasisHeight * 2;
|
|
for (int index8 = num21; index8 < num22; ++index8)
|
|
{
|
|
for (int index9 = num23; index9 >= index2; --index9)
|
|
{
|
|
double num24 = (double) Math.Abs(index8 - index1) * 0.699999988079071;
|
|
float num25 = (float) Math.Abs(index9 - index2) * 1.35f;
|
|
if (Math.Sqrt(num24 * num24 + (double) num25 * (double) num25) > (double) ((float) num7 * 0.57f))
|
|
{
|
|
bool flag1 = false;
|
|
if (!Main.tile[index8, index9].active() && Main.tile[index8, index9].wall == (ushort) 0)
|
|
{
|
|
int num26 = -1;
|
|
int num27 = -1;
|
|
for (int index10 = index8; index10 <= index8 + num20 && Main.tile[index10, index9 + 1].active() && Main.tileSolid[(int) Main.tile[index10, index9 + 1].type] && Main.tile[index10, index9].wall <= (ushort) 0; ++index10)
|
|
{
|
|
if (Main.tile[index10, index9].active() && Main.tileSolid[(int) Main.tile[index10, index9].type])
|
|
{
|
|
if (Main.tile[index10, index9].type == (ushort) 53)
|
|
flag1 = true;
|
|
num27 = index10;
|
|
break;
|
|
}
|
|
if (Main.tile[index10, index9].active())
|
|
break;
|
|
}
|
|
for (int index11 = index8; index11 >= index8 - num20 && Main.tile[index11, index9 + 1].active() && Main.tileSolid[(int) Main.tile[index11, index9 + 1].type] && Main.tile[index11, index9].wall <= (ushort) 0; --index11)
|
|
{
|
|
if (Main.tile[index11, index9].active() && Main.tileSolid[(int) Main.tile[index11, index9].type])
|
|
{
|
|
if (Main.tile[index11, index9].type == (ushort) 53)
|
|
flag1 = true;
|
|
num26 = index11;
|
|
break;
|
|
}
|
|
if (Main.tile[index11, index9].active())
|
|
break;
|
|
}
|
|
bool flag2 = true;
|
|
if (((num26 <= -1 ? 0 : (num27 > -1 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0)
|
|
{
|
|
int num28 = 0;
|
|
for (int index12 = num26 + 1; index12 < num27; ++index12)
|
|
{
|
|
if (num27 - num26 > 5 && WorldGen.genRand.Next(5) == 0)
|
|
num28 = WorldGen.genRand.Next(5, 10);
|
|
Main.tile[index12, index9].active(true);
|
|
Main.tile[index12, index9].type = (ushort) 53;
|
|
if (num28 > 0)
|
|
{
|
|
--num28;
|
|
Main.tile[index12, index9 - 1].active(true);
|
|
Main.tile[index12, index9 - 1].type = (ushort) 53;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.numOasis < WorldGen.maxOasis)
|
|
{
|
|
WorldGen.oasisPosition[WorldGen.numOasis] = new Vector2((float) index1, (float) index2);
|
|
WorldGen.oasisWidth[WorldGen.numOasis] = num2;
|
|
++WorldGen.numOasis;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool BiomeTileCheck(int x, int y)
|
|
{
|
|
int num = 50;
|
|
for (int x1 = x - num; x1 <= x + num; ++x1)
|
|
{
|
|
for (int y1 = y - num; y1 <= y + num; ++y1)
|
|
{
|
|
if (WorldGen.InWorld(x1, y1))
|
|
{
|
|
if (Main.tile[x1, y1].active())
|
|
{
|
|
switch (Main.tile[x1, y1].type)
|
|
{
|
|
case 70:
|
|
case 72:
|
|
case 147:
|
|
case 161:
|
|
case 162:
|
|
case 367:
|
|
case 368:
|
|
case 396:
|
|
case 397:
|
|
return true;
|
|
}
|
|
}
|
|
switch (Main.tile[x1, y1].wall)
|
|
{
|
|
case 187:
|
|
case 216:
|
|
return true;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static double oceanLevel => (Main.worldSurface + Main.rockLayer) / 2.0 + 40.0;
|
|
|
|
public static bool oceanDepths(int x, int y) => (double) y <= WorldGen.oceanLevel && (x < WorldGen.beachDistance || x > Main.maxTilesX - WorldGen.beachDistance);
|
|
|
|
public static void GenerateWorld(int seed, GenerationProgress customProgressObject = null)
|
|
{
|
|
WorldGen.drunkWorldGen = false;
|
|
WorldGen.drunkWorldGenText = false;
|
|
if (seed == 5162020)
|
|
{
|
|
WorldGen.drunkWorldGen = true;
|
|
WorldGen.drunkWorldGenText = true;
|
|
Main.drunkWorld = true;
|
|
Main.rand = new UnifiedRandom();
|
|
seed = Main.rand.Next(999999999);
|
|
if (!Main.dayTime)
|
|
Main.time = 0.0;
|
|
}
|
|
if (WorldGen.notTheBees)
|
|
{
|
|
Main.rand = new UnifiedRandom();
|
|
seed = Main.rand.Next(999999999);
|
|
}
|
|
if (WorldGen.getGoodWorldGen)
|
|
{
|
|
Main.getGoodWorld = true;
|
|
Main.rand = new UnifiedRandom();
|
|
seed = Main.rand.Next(999999999);
|
|
}
|
|
else
|
|
Main.getGoodWorld = false;
|
|
Console.WriteLine("Creating world - Seed: {0} Width: {1}, Height: {2}, Evil: {3}, IsExpert: {4}", (object) seed, (object) Main.maxTilesX, (object) Main.maxTilesY, (object) WorldGen.WorldGenParam_Evil, (object) Main.expertMode);
|
|
Main.lockMenuBGChange = true;
|
|
WorldGenConfiguration configuration = WorldGenConfiguration.FromEmbeddedPath("Terraria.GameContent.WorldBuilding.Configuration.json");
|
|
WorldGen.Hooks.ProcessWorldGenConfig(ref configuration);
|
|
WorldGen._lastSeed = seed;
|
|
WorldGen._generator = new WorldGenerator(seed, configuration);
|
|
WorldGen._genRand = new UnifiedRandom(seed);
|
|
Main.rand = new UnifiedRandom(seed);
|
|
StructureMap structures = new StructureMap();
|
|
WorldGen.worldSurfaceLow = 0.0;
|
|
double worldSurface = 0.0;
|
|
double worldSurfaceHigh = 0.0;
|
|
double rockLayerLow = 0.0;
|
|
double rockLayer = 0.0;
|
|
double rockLayerHigh = 0.0;
|
|
int copper = 7;
|
|
int iron = 6;
|
|
int silver = 9;
|
|
int gold = 8;
|
|
int dungeonSide = 0;
|
|
ushort jungleHut = (ushort) WorldGen.genRand.Next(5);
|
|
int shellStartXLeft = 0;
|
|
int shellStartYLeft = 0;
|
|
int shellStartXRight = 0;
|
|
int shellStartYRight = 0;
|
|
int howFar = 0;
|
|
int[] PyrX = (int[]) null;
|
|
int[] PyrY = (int[]) null;
|
|
int numPyr = 0;
|
|
int jungleMinX = -1;
|
|
int jungleMaxX = -1;
|
|
int[] snowMinX = new int[Main.maxTilesY];
|
|
int[] snowMaxX = new int[Main.maxTilesY];
|
|
int snowTop = 0;
|
|
int snowBottom = 0;
|
|
float dub2 = 0.0f;
|
|
int skyLakes = 1;
|
|
if (Main.maxTilesX > 8000)
|
|
++skyLakes;
|
|
if (Main.maxTilesX > 6000)
|
|
++skyLakes;
|
|
int beachSandRandomCenter = 275 + 5 + 40;
|
|
int beachSandRandomWidthRange = 20;
|
|
int beachSandDungeonExtraWidth = 40;
|
|
int beachSandJungleExtraWidth = 20;
|
|
int oceanWaterStartRandomMin = 220;
|
|
int oceanWaterStartRandomMax = oceanWaterStartRandomMin + 40;
|
|
int oceanWaterForcedJungleLength = 275;
|
|
int leftBeachEnd = 0;
|
|
int rightBeachStart = 0;
|
|
int minSsandBeforeWater = 50;
|
|
int evilBiomeBeachAvoidance = beachSandRandomCenter + 60;
|
|
int evilBiomeAvoidanceMidFixer = 50;
|
|
int lakesBeachAvoidance = beachSandRandomCenter + 20;
|
|
int smallHolesBeachAvoidance = beachSandRandomCenter + 20;
|
|
int num1 = beachSandRandomCenter;
|
|
int surfaceCavesBeachAvoidance2 = beachSandRandomCenter + 20;
|
|
int jungleOriginX = 0;
|
|
int snowOriginLeft = 0;
|
|
int snowOriginRight = 0;
|
|
int logX = -1;
|
|
int logY = -1;
|
|
int dungeonLocation = 0;
|
|
WorldGen.AddGenerationPass("Reset", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.numOceanCaveTreasure = 0;
|
|
WorldGen.skipDesertTileCheck = false;
|
|
WorldGen.gen = true;
|
|
Liquid.ReInit();
|
|
WorldGen.noTileActions = true;
|
|
progress.Message = "";
|
|
WorldGen.SetupStatueList();
|
|
WorldGen.RandomizeWeather();
|
|
Main.cloudAlpha = 0.0f;
|
|
Main.maxRaining = 0.0f;
|
|
Main.raining = false;
|
|
WorldGen.heartCount = 0;
|
|
Main.checkXMas();
|
|
Main.checkHalloween();
|
|
WorldGen.ResetGenerator();
|
|
WorldGen.UndergroundDesertLocation = Microsoft.Xna.Framework.Rectangle.Empty;
|
|
WorldGen.UndergroundDesertHiveLocation = Microsoft.Xna.Framework.Rectangle.Empty;
|
|
WorldGen.numLarva = 0;
|
|
WorldGen.hellChestItem = new int[WorldGen.hellChestItem.Length];
|
|
for (int index1 = 0; index1 < WorldGen.hellChestItem.Length; ++index1)
|
|
{
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
flag = false;
|
|
WorldGen.hellChestItem[index1] = WorldGen.genRand.Next(WorldGen.hellChestItem.Length);
|
|
for (int index2 = 0; index2 < index1; ++index2)
|
|
{
|
|
if (WorldGen.hellChestItem[index2] == WorldGen.hellChestItem[index1])
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
int num2 = 86400;
|
|
Main.slimeRainTime = (double) -WorldGen.genRand.Next(num2 * 2, num2 * 3);
|
|
Main.cloudBGActive = (float) -WorldGen.genRand.Next(8640, 86400);
|
|
WorldGen.skipFramingDuringGen = false;
|
|
WorldGen.SavedOreTiers.Copper = 7;
|
|
WorldGen.SavedOreTiers.Iron = 6;
|
|
WorldGen.SavedOreTiers.Silver = 9;
|
|
WorldGen.SavedOreTiers.Gold = 8;
|
|
WorldGen.copperBar = 20;
|
|
WorldGen.ironBar = 22;
|
|
WorldGen.silverBar = 21;
|
|
WorldGen.goldBar = 19;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
copper = 166;
|
|
WorldGen.copperBar = 703;
|
|
WorldGen.SavedOreTiers.Copper = 166;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
iron = 167;
|
|
WorldGen.ironBar = 704;
|
|
WorldGen.SavedOreTiers.Iron = 167;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
silver = 168;
|
|
WorldGen.silverBar = 705;
|
|
WorldGen.SavedOreTiers.Silver = 168;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
gold = 169;
|
|
WorldGen.goldBar = 706;
|
|
WorldGen.SavedOreTiers.Gold = 169;
|
|
}
|
|
WorldGen.crimson = WorldGen.genRand.Next(2) == 0;
|
|
if (WorldGen.WorldGenParam_Evil == 0)
|
|
WorldGen.crimson = false;
|
|
if (WorldGen.WorldGenParam_Evil == 1)
|
|
WorldGen.crimson = true;
|
|
switch (jungleHut)
|
|
{
|
|
case 0:
|
|
jungleHut = (ushort) 119;
|
|
break;
|
|
case 1:
|
|
jungleHut = (ushort) 120;
|
|
break;
|
|
case 2:
|
|
jungleHut = (ushort) 158;
|
|
break;
|
|
case 3:
|
|
jungleHut = (ushort) 175;
|
|
break;
|
|
case 4:
|
|
jungleHut = (ushort) 45;
|
|
break;
|
|
}
|
|
Main.worldID = WorldGen.genRand.Next(int.MaxValue);
|
|
WorldGen.RandomizeTreeStyle();
|
|
WorldGen.RandomizeCaveBackgrounds();
|
|
WorldGen.RandomizeBackgrounds(WorldGen.genRand);
|
|
WorldGen.RandomizeMoonState();
|
|
WorldGen.TreeTops.CopyExistingWorldInfoForWorldGeneration();
|
|
dungeonSide = WorldGen.genRand.Next(2) == 0 ? -1 : 1;
|
|
if (dungeonSide == -1)
|
|
{
|
|
float num3 = (float) (1.0 - (double) WorldGen.genRand.Next(15, 30) * 0.00999999977648258);
|
|
jungleOriginX = (int) ((double) Main.maxTilesX * (double) num3);
|
|
}
|
|
else
|
|
{
|
|
float num4 = (float) WorldGen.genRand.Next(15, 30) * 0.01f;
|
|
jungleOriginX = (int) ((double) Main.maxTilesX * (double) num4);
|
|
}
|
|
int num5 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
if (WorldGen.drunkWorldGen)
|
|
dungeonSide *= -1;
|
|
if (dungeonSide == 1)
|
|
{
|
|
while ((double) num5 < (double) Main.maxTilesX * 0.600000023841858 || (double) num5 > (double) Main.maxTilesX * 0.75)
|
|
num5 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
}
|
|
else
|
|
{
|
|
while ((double) num5 < (double) Main.maxTilesX * 0.25 || (double) num5 > (double) Main.maxTilesX * 0.400000005960464)
|
|
num5 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
dungeonSide *= -1;
|
|
int num6 = WorldGen.genRand.Next(50, 90);
|
|
float num7 = (float) (Main.maxTilesX / 4200);
|
|
int num8 = num6 + (int) ((double) WorldGen.genRand.Next(20, 40) * (double) num7) + (int) ((double) WorldGen.genRand.Next(20, 40) * (double) num7);
|
|
int num9 = num5 - num8;
|
|
int num10 = WorldGen.genRand.Next(50, 90) + (int) ((double) WorldGen.genRand.Next(20, 40) * (double) num7) + (int) ((double) WorldGen.genRand.Next(20, 40) * (double) num7);
|
|
int num11 = num5 + num10;
|
|
if (num9 < 0)
|
|
num9 = 0;
|
|
if (num11 > Main.maxTilesX)
|
|
num11 = Main.maxTilesX;
|
|
snowOriginLeft = num9;
|
|
snowOriginRight = num11;
|
|
leftBeachEnd = WorldGen.genRand.Next(beachSandRandomCenter - beachSandRandomWidthRange, beachSandRandomCenter + beachSandRandomWidthRange);
|
|
if (dungeonSide == 1)
|
|
leftBeachEnd += beachSandDungeonExtraWidth;
|
|
else
|
|
leftBeachEnd += beachSandJungleExtraWidth;
|
|
rightBeachStart = Main.maxTilesX - WorldGen.genRand.Next(beachSandRandomCenter - beachSandRandomWidthRange, beachSandRandomCenter + beachSandRandomWidthRange);
|
|
if (dungeonSide == -1)
|
|
rightBeachStart -= beachSandDungeonExtraWidth;
|
|
else
|
|
rightBeachStart -= beachSandJungleExtraWidth;
|
|
int num12 = 50;
|
|
if (dungeonSide == -1)
|
|
dungeonLocation = WorldGen.genRand.Next(leftBeachEnd + num12, (int) ((double) Main.maxTilesX * 0.2));
|
|
else
|
|
dungeonLocation = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.8), rightBeachStart - num12);
|
|
}));
|
|
WorldGen.AddGenerationPass(new TerrainPass().OnBegin((Action<GenPass>) (pass =>
|
|
{
|
|
TerrainPass terrainPass = pass as TerrainPass;
|
|
terrainPass.LeftBeachSize = leftBeachEnd;
|
|
terrainPass.RightBeachSize = Main.maxTilesX - rightBeachStart;
|
|
})).OnComplete((Action<GenPass>) (pass =>
|
|
{
|
|
TerrainPass terrainPass = pass as TerrainPass;
|
|
rockLayer = terrainPass.RockLayer;
|
|
rockLayerHigh = terrainPass.RockLayerHigh;
|
|
rockLayerLow = terrainPass.RockLayerLow;
|
|
worldSurface = terrainPass.WorldSurface;
|
|
worldSurfaceHigh = terrainPass.WorldSurfaceHigh;
|
|
WorldGen.worldSurfaceLow = terrainPass.WorldSurfaceLow;
|
|
WorldGen.waterLine = terrainPass.WaterLine;
|
|
WorldGen.lavaLine = terrainPass.LavaLine;
|
|
})));
|
|
WorldGen.AddGenerationPass("Dunes", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[1].Value;
|
|
int random = passConfig.Get<WorldGenRange>("Count").GetRandom(WorldGen.genRand);
|
|
float num13 = passConfig.Get<float>("ChanceOfPyramid");
|
|
if (WorldGen.drunkWorldGen)
|
|
num13 = 1f;
|
|
float num14 = (float) Main.maxTilesX / 4200f;
|
|
PyrX = new int[random + 3];
|
|
PyrY = new int[random + 3];
|
|
DunesBiome biome = configuration.CreateBiome<DunesBiome>();
|
|
for (int index3 = 0; index3 < random; ++index3)
|
|
{
|
|
progress.Set((float) index3 / (float) random);
|
|
Point origin = Point.Zero;
|
|
bool flag1 = false;
|
|
int num15 = 0;
|
|
bool flag2;
|
|
bool flag3;
|
|
bool flag4;
|
|
for (; !flag1; flag1 = !(flag2 | flag3 | flag4))
|
|
{
|
|
origin = WorldGen.RandomWorldPoint(right: 500, left: 500);
|
|
flag2 = Math.Abs(origin.X - jungleOriginX) < (int) (600.0 * (double) num14);
|
|
flag3 = Math.Abs(origin.X - Main.maxTilesX / 2) < 300;
|
|
flag4 = origin.X > snowOriginLeft - 300 && origin.Y < snowOriginRight + 300;
|
|
++num15;
|
|
if (num15 >= Main.maxTilesX)
|
|
flag2 = false;
|
|
if (num15 >= Main.maxTilesX * 2)
|
|
flag4 = false;
|
|
}
|
|
biome.Place(origin, structures);
|
|
if ((double) WorldGen.genRand.NextFloat() <= (double) num13)
|
|
{
|
|
int index4 = WorldGen.genRand.Next(origin.X - 200, origin.X + 200);
|
|
for (int index5 = 0; index5 < Main.maxTilesY; ++index5)
|
|
{
|
|
if (Main.tile[index4, index5].active())
|
|
{
|
|
PyrX[numPyr] = index4;
|
|
PyrY[numPyr] = index5 + 20;
|
|
++numPyr;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Ocean Sand", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Language.GetTextValue("WorldGeneration.OceanSand");
|
|
for (int index6 = 0; index6 < 3; ++index6)
|
|
{
|
|
progress.Set((float) index6 / 3f);
|
|
int num16 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
while ((double) num16 > (double) Main.maxTilesX * 0.400000005960464 && (double) num16 < (double) Main.maxTilesX * 0.600000023841858)
|
|
num16 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
int num17 = WorldGen.genRand.Next(35, 90);
|
|
if (index6 == 1)
|
|
{
|
|
float num18 = (float) (Main.maxTilesX / 4200);
|
|
num17 += (int) ((double) WorldGen.genRand.Next(20, 40) * (double) num18);
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num17 *= 2;
|
|
if (index6 == 1)
|
|
num17 *= 2;
|
|
int num19 = num16 - num17;
|
|
int num20 = WorldGen.genRand.Next(35, 90);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num20 *= 2;
|
|
if (index6 == 1)
|
|
num20 *= 2;
|
|
int num21 = num16 + num20;
|
|
if (num19 < 0)
|
|
num19 = 0;
|
|
if (num21 > Main.maxTilesX)
|
|
num21 = Main.maxTilesX;
|
|
switch (index6)
|
|
{
|
|
case 0:
|
|
num19 = 0;
|
|
num21 = leftBeachEnd;
|
|
break;
|
|
case 1:
|
|
continue;
|
|
case 2:
|
|
num19 = rightBeachStart;
|
|
num21 = Main.maxTilesX;
|
|
break;
|
|
}
|
|
int num22 = WorldGen.genRand.Next(50, 100);
|
|
for (int index7 = num19; index7 < num21; ++index7)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
num22 += WorldGen.genRand.Next(-1, 2);
|
|
if (num22 < 50)
|
|
num22 = 50;
|
|
if (num22 > 200)
|
|
num22 = 200;
|
|
}
|
|
for (int index8 = 0; (double) index8 < (Main.worldSurface + Main.rockLayer) / 2.0; ++index8)
|
|
{
|
|
if (Main.tile[index7, index8].active())
|
|
{
|
|
if (index7 == (num19 + num21) / 2 && WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
PyrX[numPyr] = index7;
|
|
PyrY[numPyr] = index8;
|
|
++numPyr;
|
|
}
|
|
int num23 = num22;
|
|
if (index7 - num19 < num23)
|
|
num23 = index7 - num19;
|
|
if (num21 - index7 < num23)
|
|
num23 = num21 - index7;
|
|
int num24 = num23 + WorldGen.genRand.Next(5);
|
|
for (int index9 = index8; index9 < index8 + num24; ++index9)
|
|
{
|
|
if (index7 > num19 + WorldGen.genRand.Next(5) && index7 < num21 - WorldGen.genRand.Next(5))
|
|
Main.tile[index7, index9].type = (ushort) 53;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Sand Patches", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
int num25 = (int) ((double) Main.maxTilesX * 0.0130000002682209);
|
|
for (int index = 0; index < num25; ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next((int) Main.worldSurface, (int) Main.rockLayer); (double) i > (double) Main.maxTilesX * 0.46 && (double) i < (double) Main.maxTilesX * 0.54 && (double) j < Main.worldSurface + 150.0; j = WorldGen.genRand.Next((int) Main.worldSurface, (int) Main.rockLayer))
|
|
i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(15, 70), WorldGen.genRand.Next(20, 130), 53);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Tunnels", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index10 = 0; index10 < (int) ((double) Main.maxTilesX * 0.0015) && WorldGen.numTunnels < WorldGen.maxTunnels - 1; ++index10)
|
|
{
|
|
int[] numArray1 = new int[10];
|
|
int[] numArray2 = new int[10];
|
|
int num26 = WorldGen.genRand.Next(450, Main.maxTilesX - 450);
|
|
while ((double) num26 > (double) Main.maxTilesX * 0.4 && (double) num26 < (double) Main.maxTilesX * 0.6)
|
|
num26 = WorldGen.genRand.Next(450, Main.maxTilesX - 450);
|
|
int index11 = 0;
|
|
bool flag;
|
|
do
|
|
{
|
|
flag = false;
|
|
for (int index12 = 0; index12 < 10; ++index12)
|
|
{
|
|
int index13 = num26 % Main.maxTilesX;
|
|
while (!Main.tile[index13, index11].active())
|
|
++index11;
|
|
if (Main.tile[index13, index11].type == (ushort) 53)
|
|
flag = true;
|
|
numArray1[index12] = index13;
|
|
numArray2[index12] = index11 - WorldGen.genRand.Next(11, 16);
|
|
num26 = index13 + WorldGen.genRand.Next(5, 11);
|
|
}
|
|
}
|
|
while (flag);
|
|
WorldGen.tunnelX[WorldGen.numTunnels] = numArray1[5];
|
|
++WorldGen.numTunnels;
|
|
for (int index14 = 0; index14 < 10; ++index14)
|
|
{
|
|
WorldGen.TileRunner(numArray1[index14], numArray2[index14], (double) WorldGen.genRand.Next(5, 8), WorldGen.genRand.Next(6, 9), 0, true, -2f, -0.3f);
|
|
WorldGen.TileRunner(numArray1[index14], numArray2[index14], (double) WorldGen.genRand.Next(5, 8), WorldGen.genRand.Next(6, 9), 0, true, 2f, -0.3f);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Mount Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.numMCaves = 0;
|
|
progress.Message = Lang.gen[2].Value;
|
|
for (int index15 = 0; index15 < (int) ((double) Main.maxTilesX * 0.001); ++index15)
|
|
{
|
|
progress.Set((float) ((double) index15 / (double) Main.maxTilesX * (1.0 / 1000.0)));
|
|
int num27 = 0;
|
|
bool flag5 = false;
|
|
bool flag6 = false;
|
|
int i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.25), (int) ((double) Main.maxTilesX * 0.75));
|
|
while (!flag6)
|
|
{
|
|
flag6 = true;
|
|
while (i > Main.maxTilesX / 2 - 90 && i < Main.maxTilesX / 2 + 90)
|
|
i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.25), (int) ((double) Main.maxTilesX * 0.75));
|
|
for (int index16 = 0; index16 < WorldGen.numMCaves; ++index16)
|
|
{
|
|
if (Math.Abs(i - WorldGen.mCaveX[index16]) < 100)
|
|
{
|
|
++num27;
|
|
flag6 = false;
|
|
break;
|
|
}
|
|
}
|
|
if (num27 >= Main.maxTilesX / 5)
|
|
{
|
|
flag5 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag5)
|
|
{
|
|
for (int j = 0; (double) j < Main.worldSurface; ++j)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
for (int index17 = i - 50; index17 < i + 50; ++index17)
|
|
{
|
|
for (int index18 = j - 25; index18 < j + 25; ++index18)
|
|
{
|
|
if (Main.tile[index17, index18].active() && (Main.tile[index17, index18].type == (ushort) 53 || Main.tile[index17, index18].type == (ushort) 151 || Main.tile[index17, index18].type == (ushort) 274))
|
|
flag5 = true;
|
|
}
|
|
}
|
|
if (!flag5)
|
|
{
|
|
WorldGen.Mountinater(i, j);
|
|
WorldGen.mCaveX[WorldGen.numMCaves] = i;
|
|
WorldGen.mCaveY[WorldGen.numMCaves] = j;
|
|
++WorldGen.numMCaves;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Dirt Wall Backgrounds", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[3].Value;
|
|
for (int index19 = 1; index19 < Main.maxTilesX - 1; ++index19)
|
|
{
|
|
ushort num28 = 2;
|
|
float num29 = (float) index19 / (float) Main.maxTilesX;
|
|
progress.Set(num29);
|
|
bool flag = false;
|
|
howFar += WorldGen.genRand.Next(-1, 2);
|
|
if (howFar < 0)
|
|
howFar = 0;
|
|
if (howFar > 10)
|
|
howFar = 10;
|
|
for (int index20 = 0; (double) index20 < Main.worldSurface + 10.0 && (double) index20 <= Main.worldSurface + (double) howFar; ++index20)
|
|
{
|
|
if (Main.tile[index19, index20].active())
|
|
num28 = Main.tile[index19, index20].type != (ushort) 147 ? (ushort) 2 : (ushort) 40;
|
|
if (flag && Main.tile[index19, index20].wall != (ushort) 64)
|
|
Main.tile[index19, index20].wall = num28;
|
|
if (Main.tile[index19, index20].active() && Main.tile[index19 - 1, index20].active() && Main.tile[index19 + 1, index20].active() && Main.tile[index19, index20 + 1].active() && Main.tile[index19 - 1, index20 + 1].active() && Main.tile[index19 + 1, index20 + 1].active())
|
|
flag = true;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Rocks In Dirt", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[4].Value;
|
|
float num30 = (float) (Main.maxTilesX * Main.maxTilesY) * 0.00015f;
|
|
for (int index = 0; (double) index < (double) num30; ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next(0, (int) WorldGen.worldSurfaceLow + 1), (double) WorldGen.genRand.Next(4, 15), WorldGen.genRand.Next(5, 40), 1);
|
|
progress.Set(0.34f);
|
|
float num31 = (float) (Main.maxTilesX * Main.maxTilesY) * 0.0002f;
|
|
for (int index = 0; (double) index < (double) num31; ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh + 1);
|
|
if (!Main.tile[i, j - 10].active())
|
|
j = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh + 1);
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(4, 10), WorldGen.genRand.Next(5, 30), 1);
|
|
}
|
|
progress.Set(0.67f);
|
|
float num32 = (float) (Main.maxTilesX * Main.maxTilesY) * 0.0045f;
|
|
for (int index = 0; (double) index < (double) num32; ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) worldSurfaceHigh, (int) rockLayerHigh + 1), (double) WorldGen.genRand.Next(2, 7), WorldGen.genRand.Next(2, 23), 1);
|
|
}));
|
|
WorldGen.AddGenerationPass("Dirt In Rocks", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[5].Value;
|
|
float num33 = (float) (Main.maxTilesX * Main.maxTilesY) * 0.005f;
|
|
for (int index = 0; (double) index < (double) num33; ++index)
|
|
{
|
|
progress.Set((float) index / num33);
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(2, 6), WorldGen.genRand.Next(2, 40), 0);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Clay", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[6].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2E-05); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next(0, (int) WorldGen.worldSurfaceLow), (double) WorldGen.genRand.Next(4, 14), WorldGen.genRand.Next(10, 50), 40);
|
|
progress.Set(0.25f);
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 5E-05); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh + 1), (double) WorldGen.genRand.Next(8, 14), WorldGen.genRand.Next(15, 45), 40);
|
|
progress.Set(0.5f);
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2E-05); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) worldSurfaceHigh, (int) rockLayerHigh + 1), (double) WorldGen.genRand.Next(8, 15), WorldGen.genRand.Next(5, 50), 40);
|
|
progress.Set(0.75f);
|
|
for (int index21 = 5; index21 < Main.maxTilesX - 5; ++index21)
|
|
{
|
|
for (int index22 = 1; (double) index22 < Main.worldSurface - 1.0; ++index22)
|
|
{
|
|
if (Main.tile[index21, index22].active())
|
|
{
|
|
for (int index23 = index22; index23 < index22 + 5; ++index23)
|
|
{
|
|
if (Main.tile[index21, index23].type == (ushort) 40)
|
|
Main.tile[index21, index23].type = (ushort) 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
int i2;
|
|
WorldGen.AddGenerationPass("Small Holes", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
i2 = 0;
|
|
progress.Message = Lang.gen[7].Value;
|
|
double num34 = worldSurfaceHigh;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0015); ++index)
|
|
{
|
|
float num35 = (float) index / ((float) (Main.maxTilesX * Main.maxTilesY) * 0.0015f);
|
|
progress.Set(num35);
|
|
int type = -1;
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
type = -2;
|
|
int i1 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j1;
|
|
for (j1 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY); (i1 < smallHolesBeachAvoidance || i1 > Main.maxTilesX - smallHolesBeachAvoidance) && (double) j1 < num34 || (double) i1 > (double) Main.maxTilesX * 0.45 && (double) i1 < (double) Main.maxTilesX * 0.55 && (double) j1 < worldSurface; j1 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY))
|
|
i1 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
WorldGen.TileRunner(i1, j1, (double) WorldGen.genRand.Next(2, 5), WorldGen.genRand.Next(2, 20), type);
|
|
int i3 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j2;
|
|
for (j2 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY); (i3 < smallHolesBeachAvoidance || i3 > Main.maxTilesX - smallHolesBeachAvoidance) && (double) j2 < num34 || (double) i3 > (double) Main.maxTilesX * 0.45 && (double) i3 < (double) Main.maxTilesX * 0.55 && (double) j2 < worldSurface; j2 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY))
|
|
i3 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
WorldGen.TileRunner(i3, j2, (double) WorldGen.genRand.Next(8, 15), WorldGen.genRand.Next(7, 30), type);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Dirt Layer Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[8].Value;
|
|
double num36 = worldSurfaceHigh;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 3E-05); ++index)
|
|
{
|
|
float num37 = (float) index / ((float) (Main.maxTilesX * Main.maxTilesY) * 3E-05f);
|
|
progress.Set(num37);
|
|
if (rockLayerHigh <= (double) Main.maxTilesY)
|
|
{
|
|
int type = -1;
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
type = -2;
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) rockLayerHigh + 1); (i < smallHolesBeachAvoidance || i > Main.maxTilesX - smallHolesBeachAvoidance) && (double) j < num36 || (double) i >= (double) Main.maxTilesX * 0.45 && (double) i <= (double) Main.maxTilesX * 0.55 && (double) j < Main.worldSurface; j = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) rockLayerHigh + 1))
|
|
i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(5, 15), WorldGen.genRand.Next(30, 200), type);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Rock Layer Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[9].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.00013); ++index)
|
|
{
|
|
float num38 = (float) index / ((float) (Main.maxTilesX * Main.maxTilesY) * 0.00013f);
|
|
progress.Set(num38);
|
|
if (rockLayerHigh <= (double) Main.maxTilesY)
|
|
{
|
|
int type = -1;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
type = -2;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerHigh, Main.maxTilesY), (double) WorldGen.genRand.Next(6, 20), WorldGen.genRand.Next(50, 300), type);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Surface Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[10].Value;
|
|
for (int index = 0; index < (int) ((double) Main.maxTilesX * 0.002); ++index)
|
|
{
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
while ((double) i2 > (double) Main.maxTilesX * 0.449999988079071 && (double) i2 < (double) Main.maxTilesX * 0.550000011920929 || i2 < leftBeachEnd + 20 || i2 > rightBeachStart - 20)
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
for (int j = 0; (double) j < worldSurfaceHigh; ++j)
|
|
{
|
|
if (Main.tile[i2, j].active())
|
|
{
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(5, 50), -1, speedX: ((float) WorldGen.genRand.Next(-10, 11) * 0.1f), speedY: 1f);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(0.2f);
|
|
for (int index = 0; index < (int) ((double) Main.maxTilesX * 0.0007); ++index)
|
|
{
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
while ((double) i2 > (double) Main.maxTilesX * 0.430000007152557 && (double) i2 < (double) Main.maxTilesX * 0.569999992847443 || i2 < leftBeachEnd + 20 || i2 > rightBeachStart - 20)
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
for (int j = 0; (double) j < worldSurfaceHigh; ++j)
|
|
{
|
|
if (Main.tile[i2, j].active())
|
|
{
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(10, 15), WorldGen.genRand.Next(50, 130), -1, speedX: ((float) WorldGen.genRand.Next(-10, 11) * 0.1f), speedY: 2f);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(0.4f);
|
|
for (int index = 0; index < (int) ((double) Main.maxTilesX * 0.0003); ++index)
|
|
{
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
while ((double) i2 > (double) Main.maxTilesX * 0.400000005960464 && (double) i2 < (double) Main.maxTilesX * 0.600000023841858 || i2 < leftBeachEnd + 20 || i2 > rightBeachStart - 20)
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
for (int j = 0; (double) j < worldSurfaceHigh; ++j)
|
|
{
|
|
if (Main.tile[i2, j].active())
|
|
{
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(12, 25), WorldGen.genRand.Next(150, 500), -1, speedX: ((float) WorldGen.genRand.Next(-10, 11) * 0.1f), speedY: 4f);
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(8, 17), WorldGen.genRand.Next(60, 200), -1, speedX: ((float) WorldGen.genRand.Next(-10, 11) * 0.1f), speedY: 2f);
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(5, 13), WorldGen.genRand.Next(40, 170), -1, speedX: ((float) WorldGen.genRand.Next(-10, 11) * 0.1f), speedY: 2f);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(0.6f);
|
|
for (int index = 0; index < (int) ((double) Main.maxTilesX * 0.0004); ++index)
|
|
{
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
while ((double) i2 > (double) Main.maxTilesX * 0.400000005960464 && (double) i2 < (double) Main.maxTilesX * 0.600000023841858 || i2 < leftBeachEnd + 20 || i2 > rightBeachStart - 20)
|
|
i2 = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
for (int j = 0; (double) j < worldSurfaceHigh; ++j)
|
|
{
|
|
if (Main.tile[i2, j].active())
|
|
{
|
|
WorldGen.TileRunner(i2, j, (double) WorldGen.genRand.Next(7, 12), WorldGen.genRand.Next(150, 250), -1, speedY: 1f, noYChange: true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(0.8f);
|
|
float num39 = (float) (Main.maxTilesX / 4200);
|
|
for (int index = 0; (double) index < 5.0 * (double) num39; ++index)
|
|
{
|
|
try
|
|
{
|
|
WorldGen.Caverer(WorldGen.genRand.Next(surfaceCavesBeachAvoidance2, Main.maxTilesX - surfaceCavesBeachAvoidance2), WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY - 400));
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Generate Ice Biome", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[56].Value;
|
|
snowTop = (int) Main.worldSurface;
|
|
int num40 = WorldGen.lavaLine - WorldGen.genRand.Next(160, 200);
|
|
int num41 = snowOriginLeft;
|
|
int num42 = snowOriginRight;
|
|
int num43 = 10;
|
|
for (int index24 = 0; index24 <= WorldGen.lavaLine - 140; ++index24)
|
|
{
|
|
progress.Set((float) index24 / (float) (WorldGen.lavaLine - 140));
|
|
num41 += WorldGen.genRand.Next(-4, 4);
|
|
num42 += WorldGen.genRand.Next(-3, 5);
|
|
if (index24 > 0)
|
|
{
|
|
num41 = (num41 + snowMinX[index24 - 1]) / 2;
|
|
num42 = (num42 + snowMaxX[index24 - 1]) / 2;
|
|
}
|
|
if (dungeonSide > 0)
|
|
{
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
++num41;
|
|
++num42;
|
|
}
|
|
}
|
|
else if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
--num41;
|
|
--num42;
|
|
}
|
|
snowMinX[index24] = num41;
|
|
snowMaxX[index24] = num42;
|
|
for (int index25 = num41; index25 < num42; ++index25)
|
|
{
|
|
if (index24 < num40)
|
|
{
|
|
if (Main.tile[index25, index24].wall == (ushort) 2)
|
|
Main.tile[index25, index24].wall = (ushort) 40;
|
|
switch (Main.tile[index25, index24].type)
|
|
{
|
|
case 0:
|
|
case 2:
|
|
case 23:
|
|
case 40:
|
|
case 53:
|
|
Main.tile[index25, index24].type = (ushort) 147;
|
|
continue;
|
|
case 1:
|
|
Main.tile[index25, index24].type = (ushort) 161;
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num43 += WorldGen.genRand.Next(-3, 4);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
num43 += WorldGen.genRand.Next(-4, 5);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num43 += WorldGen.genRand.Next(-6, 7);
|
|
}
|
|
if (num43 < 0)
|
|
num43 = WorldGen.genRand.Next(3);
|
|
else if (num43 > 50)
|
|
num43 = 50 - WorldGen.genRand.Next(3);
|
|
for (int index26 = index24; index26 < index24 + num43; ++index26)
|
|
{
|
|
if (Main.tile[index25, index26].wall == (ushort) 2)
|
|
Main.tile[index25, index26].wall = (ushort) 40;
|
|
switch (Main.tile[index25, index26].type)
|
|
{
|
|
case 0:
|
|
case 2:
|
|
case 23:
|
|
case 40:
|
|
case 53:
|
|
Main.tile[index25, index26].type = (ushort) 147;
|
|
break;
|
|
case 1:
|
|
Main.tile[index25, index26].type = (ushort) 161;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (snowBottom < index24)
|
|
snowBottom = index24;
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Grass", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
float num44 = (float) (Main.maxTilesX * Main.maxTilesY) * (1f / 500f);
|
|
for (int index27 = 0; (double) index27 < (double) num44; ++index27)
|
|
{
|
|
progress.Set((float) index27 / num44);
|
|
int index28 = WorldGen.genRand.Next(1, Main.maxTilesX - 1);
|
|
int index29 = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh);
|
|
if (index29 >= Main.maxTilesY)
|
|
index29 = Main.maxTilesY - 2;
|
|
if (Main.tile[index28 - 1, index29].active() && Main.tile[index28 - 1, index29].type == (ushort) 0 && Main.tile[index28 + 1, index29].active() && Main.tile[index28 + 1, index29].type == (ushort) 0 && Main.tile[index28, index29 - 1].active() && Main.tile[index28, index29 - 1].type == (ushort) 0 && Main.tile[index28, index29 + 1].active() && Main.tile[index28, index29 + 1].type == (ushort) 0)
|
|
{
|
|
Main.tile[index28, index29].active(true);
|
|
Main.tile[index28, index29].type = (ushort) 2;
|
|
}
|
|
int index30 = WorldGen.genRand.Next(1, Main.maxTilesX - 1);
|
|
int index31 = WorldGen.genRand.Next(0, (int) WorldGen.worldSurfaceLow);
|
|
if (index31 >= Main.maxTilesY)
|
|
index31 = Main.maxTilesY - 2;
|
|
if (Main.tile[index30 - 1, index31].active() && Main.tile[index30 - 1, index31].type == (ushort) 0 && Main.tile[index30 + 1, index31].active() && Main.tile[index30 + 1, index31].type == (ushort) 0 && Main.tile[index30, index31 - 1].active() && Main.tile[index30, index31 - 1].type == (ushort) 0 && Main.tile[index30, index31 + 1].active() && Main.tile[index30, index31 + 1].type == (ushort) 0)
|
|
{
|
|
Main.tile[index30, index31].active(true);
|
|
Main.tile[index30, index31].type = (ushort) 2;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass(new JunglePass().OnBegin((Action<GenPass>) (pass =>
|
|
{
|
|
JunglePass junglePass = pass as JunglePass;
|
|
junglePass.JungleOriginX = jungleOriginX;
|
|
junglePass.DungeonSide = dungeonSide;
|
|
junglePass.WorldSurface = worldSurface;
|
|
junglePass.LeftBeachEnd = leftBeachEnd;
|
|
junglePass.RightBeachStart = rightBeachStart;
|
|
})).OnComplete((Action<GenPass>) (pass => WorldGen.JungleX = (pass as JunglePass).JungleX)));
|
|
WorldGen.AddGenerationPass("Mud Caves To Grass", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[77].Value;
|
|
WorldGen.NotTheBees();
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
for (int j = 0; j < Main.maxTilesY; ++j)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i, j, 59, 60);
|
|
}
|
|
progress.Set((float) (0.200000002980232 * ((double) (i * Main.maxTilesY + j) / (double) (Main.maxTilesX * Main.maxTilesY))));
|
|
}
|
|
}
|
|
WorldGen.SmallConsecutivesFound = 0;
|
|
WorldGen.SmallConsecutivesEliminated = 0;
|
|
float num45 = (float) (Main.maxTilesX - 20);
|
|
for (int x = 10; x < Main.maxTilesX - 10; ++x)
|
|
{
|
|
WorldGen.ScanTileColumnAndRemoveClumps(x);
|
|
float num46 = (float) (x - 10) / num45;
|
|
progress.Set((float) (0.200000002980232 + (double) num46 * 0.800000011920929));
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Full Desert", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[78].Value;
|
|
Main.tileSolid[484] = false;
|
|
int num47 = 0;
|
|
int num48 = dungeonSide;
|
|
int maxValue = Main.maxTilesX / 2;
|
|
int num49 = WorldGen.genRand.Next(maxValue) / 8 + maxValue / 8;
|
|
int x = maxValue + num49 * -num48;
|
|
if (WorldGen.drunkWorldGen)
|
|
num48 *= -1;
|
|
int num50 = 0;
|
|
DesertBiome biome = configuration.CreateBiome<DesertBiome>();
|
|
while (!biome.Place(new Point(x, (int) worldSurfaceHigh + 25), structures))
|
|
{
|
|
int num51 = WorldGen.genRand.Next(maxValue) / 2 + maxValue / 8 + WorldGen.genRand.Next(num50 / 12);
|
|
x = maxValue + num51 * -num48;
|
|
if (++num50 > Main.maxTilesX / 4)
|
|
{
|
|
num48 *= -1;
|
|
num50 = 0;
|
|
++num47;
|
|
if (num47 >= 2)
|
|
WorldGen.skipDesertTileCheck = true;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Floating Islands", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.numIslandHouses = 0;
|
|
WorldGen.houseCount = 0;
|
|
progress.Message = Lang.gen[12].Value;
|
|
int num52 = (int) ((double) Main.maxTilesX * 0.0008);
|
|
int num53 = 0;
|
|
float num54 = (float) (num52 + skyLakes);
|
|
for (int index32 = 0; (double) index32 < (double) num54; ++index32)
|
|
{
|
|
progress.Set((float) index32 / num54);
|
|
int num55 = Main.maxTilesX;
|
|
while (--num55 > 0)
|
|
{
|
|
bool flag7 = true;
|
|
int i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.1), (int) ((double) Main.maxTilesX * 0.9));
|
|
while (i > Main.maxTilesX / 2 - 150 && i < Main.maxTilesX / 2 + 150)
|
|
i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.1), (int) ((double) Main.maxTilesX * 0.9));
|
|
for (int index33 = 0; index33 < WorldGen.numIslandHouses; ++index33)
|
|
{
|
|
if (i > WorldGen.floatingIslandHouseX[index33] - 180 && i < WorldGen.floatingIslandHouseX[index33] + 180)
|
|
{
|
|
flag7 = false;
|
|
break;
|
|
}
|
|
}
|
|
if (flag7)
|
|
{
|
|
bool flag8 = false;
|
|
int num56 = 0;
|
|
for (int index34 = 200; (double) index34 < Main.worldSurface; ++index34)
|
|
{
|
|
if (Main.tile[i, index34].active())
|
|
{
|
|
num56 = index34;
|
|
flag8 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag8)
|
|
{
|
|
int num57 = 0;
|
|
num55 = -1;
|
|
int j = Math.Min(WorldGen.genRand.Next(90, num56 - 100), (int) WorldGen.worldSurfaceLow - 50);
|
|
if (num53 >= num52)
|
|
{
|
|
WorldGen.skyLake[WorldGen.numIslandHouses] = true;
|
|
WorldGen.CloudLake(i, j);
|
|
}
|
|
else
|
|
{
|
|
WorldGen.skyLake[WorldGen.numIslandHouses] = false;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
num57 = 3;
|
|
WorldGen.SnowCloudIsland(i, j);
|
|
}
|
|
else
|
|
{
|
|
num57 = 1;
|
|
WorldGen.DesertCloudIsland(i, j);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.getGoodWorldGen)
|
|
num57 = !WorldGen.crimson ? 4 : 5;
|
|
WorldGen.CloudIsland(i, j);
|
|
}
|
|
}
|
|
WorldGen.floatingIslandHouseX[WorldGen.numIslandHouses] = i;
|
|
WorldGen.floatingIslandHouseY[WorldGen.numIslandHouses] = j;
|
|
WorldGen.floatingIslandStyle[WorldGen.numIslandHouses] = num57;
|
|
++WorldGen.numIslandHouses;
|
|
++num53;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Mushroom Patches", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[13].Value;
|
|
float num58 = (float) (Main.maxTilesX / 700);
|
|
if ((double) num58 > (double) WorldGen.maxMushroomBiomes)
|
|
num58 = (float) WorldGen.maxMushroomBiomes;
|
|
for (int index35 = 0; (double) index35 < (double) num58; ++index35)
|
|
{
|
|
int num59 = 0;
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
int i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.2), (int) ((double) Main.maxTilesX * 0.8));
|
|
if (num59 > Main.maxTilesX / 4)
|
|
i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.25), (int) ((double) Main.maxTilesX * 0.975));
|
|
int j = WorldGen.genRand.Next((int) Main.rockLayer + 50, Main.maxTilesY - 300);
|
|
flag = false;
|
|
int num60 = 100;
|
|
int num61 = 500;
|
|
for (int x = i - num60; x < i + num60; x += 3)
|
|
{
|
|
for (int y = j - num60; y < j + num60; y += 3)
|
|
{
|
|
if (WorldGen.InWorld(x, y))
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 147 || Main.tile[x, y].type == (ushort) 161 || Main.tile[x, y].type == (ushort) 162 || Main.tile[x, y].type == (ushort) 60 || Main.tile[x, y].type == (ushort) 368 || Main.tile[x, y].type == (ushort) 367)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
if (WorldGen.UndergroundDesertLocation.Contains(new Point(x, y)))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
for (int index36 = 0; index36 < WorldGen.numMushroomBiomes; ++index36)
|
|
{
|
|
if ((double) Vector2.Distance(WorldGen.mushroomBiomesPosition[index36], new Vector2((float) i, (float) j)) < (double) num61)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag && WorldGen.numMushroomBiomes < WorldGen.maxMushroomBiomes)
|
|
{
|
|
WorldGen.ShroomPatch(i, j);
|
|
for (int index37 = 0; index37 < 5; ++index37)
|
|
WorldGen.ShroomPatch(i + WorldGen.genRand.Next(-40, 41), j + WorldGen.genRand.Next(-40, 41));
|
|
WorldGen.mushroomBiomesPosition[WorldGen.numMushroomBiomes].X = (float) i;
|
|
WorldGen.mushroomBiomesPosition[WorldGen.numMushroomBiomes].Y = (float) j;
|
|
++WorldGen.numMushroomBiomes;
|
|
}
|
|
++num59;
|
|
if (num59 > Main.maxTilesX / 2)
|
|
break;
|
|
}
|
|
}
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
progress.Set((float) index / (float) Main.maxTilesX);
|
|
for (int worldSurface1 = (int) Main.worldSurface; worldSurface1 < Main.maxTilesY; ++worldSurface1)
|
|
{
|
|
if (WorldGen.InWorld(index, worldSurface1, 50) && Main.tile[index, worldSurface1].active())
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(index, worldSurface1, 59, 70, false);
|
|
}
|
|
}
|
|
}
|
|
for (int index38 = 0; index38 < Main.maxTilesX; ++index38)
|
|
{
|
|
for (int worldSurface2 = (int) Main.worldSurface; worldSurface2 < Main.maxTilesY; ++worldSurface2)
|
|
{
|
|
if (Main.tile[index38, worldSurface2].active() && Main.tile[index38, worldSurface2].type == (ushort) 70)
|
|
{
|
|
int Type = 59;
|
|
for (int i = index38 - 1; i <= index38 + 1; ++i)
|
|
{
|
|
for (int j = worldSurface2 - 1; j <= worldSurface2 + 1; ++j)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (!Main.tile[i - 1, j].active() && !Main.tile[i + 1, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
else if (!Main.tile[i, j - 1].active() && !Main.tile[i, j + 1].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
else if (Main.tile[i - 1, j].active() && Main.tile[i + 1, j].active())
|
|
{
|
|
WorldGen.PlaceTile(i, j, Type);
|
|
if (Main.tile[i - 1, worldSurface2].type == (ushort) 70)
|
|
Main.tile[i - 1, worldSurface2].type = (ushort) 59;
|
|
if (Main.tile[i + 1, worldSurface2].type == (ushort) 70)
|
|
Main.tile[i + 1, worldSurface2].type = (ushort) 59;
|
|
}
|
|
else if (Main.tile[i, j - 1].active() && Main.tile[i, j + 1].active())
|
|
{
|
|
WorldGen.PlaceTile(i, j, Type);
|
|
if (Main.tile[i, worldSurface2 - 1].type == (ushort) 70)
|
|
Main.tile[i, worldSurface2 - 1].type = (ushort) 59;
|
|
if (Main.tile[i, worldSurface2 + 1].type == (ushort) 70)
|
|
Main.tile[i, worldSurface2 + 1].type = (ushort) 59;
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
int index39 = index38 + WorldGen.genRand.Next(-20, 21);
|
|
int index40 = worldSurface2 + WorldGen.genRand.Next(-20, 21);
|
|
if (Main.tile[index39, index40].type == (ushort) 59)
|
|
Main.tile[index39, index40].type = (ushort) 70;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Marble", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[80].Value;
|
|
int random = passConfig.Get<WorldGenRange>("Count").GetRandom(WorldGen.genRand);
|
|
float num62 = (float) (Main.maxTilesX - 160) / (float) random;
|
|
MarbleBiome biome = configuration.CreateBiome<MarbleBiome>();
|
|
int num63 = 0;
|
|
int num64 = 0;
|
|
while (num64 < random)
|
|
{
|
|
float num65 = (float) num64 / (float) random;
|
|
progress.Set(num65);
|
|
Point origin = WorldGen.RandomRectanglePoint((int) ((double) num65 * (double) (Main.maxTilesX - 160)) + 80, (int) rockLayer + 20, (int) num62, Main.maxTilesY - ((int) rockLayer + 40) - 200);
|
|
while ((double) origin.X > (double) Main.maxTilesX * 0.45 && (double) origin.X < (double) Main.maxTilesX * 0.55)
|
|
origin.X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
++num63;
|
|
if (biome.Place(origin, structures) || num63 > Main.maxTilesX)
|
|
{
|
|
++num64;
|
|
num63 = 0;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Granite", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[81].Value;
|
|
int random = passConfig.Get<WorldGenRange>("Count").GetRandom(WorldGen.genRand);
|
|
float num66 = (float) (Main.maxTilesX - 200) / (float) random;
|
|
List<Point> pointList = new List<Point>(random);
|
|
int num67 = 0;
|
|
int num68 = 0;
|
|
while (num68 < random)
|
|
{
|
|
float num69 = (float) num68 / (float) random;
|
|
progress.Set(num69);
|
|
Point origin = WorldGen.RandomRectanglePoint((int) ((double) num69 * (double) (Main.maxTilesX - 200)) + 100, (int) rockLayer + 20, (int) num66, Main.maxTilesY - ((int) rockLayer + 40) - 200);
|
|
while ((double) origin.X > (double) Main.maxTilesX * 0.45 && (double) origin.X < (double) Main.maxTilesX * 0.55)
|
|
origin.X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
++num67;
|
|
if (GraniteBiome.CanPlace(origin, structures))
|
|
{
|
|
pointList.Add(origin);
|
|
++num68;
|
|
}
|
|
else if (num67 > Main.maxTilesX)
|
|
{
|
|
++num68;
|
|
num67 = 0;
|
|
}
|
|
}
|
|
GraniteBiome biome = configuration.CreateBiome<GraniteBiome>();
|
|
for (int index = 0; index < random; ++index)
|
|
biome.Place(pointList[index], structures);
|
|
}));
|
|
WorldGen.AddGenerationPass("Dirt To Mud", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[14].Value;
|
|
float num70 = (float) (Main.maxTilesX * Main.maxTilesY) * (1f / 1000f);
|
|
for (int index = 0; (double) index < (double) num70; ++index)
|
|
{
|
|
progress.Set((float) index / num70);
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(2, 6), WorldGen.genRand.Next(2, 40), 59, ignoreTileType: 53);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Silt", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[15].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0001); ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j = WorldGen.genRand.Next((int) rockLayerHigh, Main.maxTilesY);
|
|
if (Main.tile[i, j].wall != (ushort) 187 && Main.tile[i, j].wall != (ushort) 216)
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(5, 12), WorldGen.genRand.Next(15, 50), 123);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0005); ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j = WorldGen.genRand.Next((int) rockLayerHigh, Main.maxTilesY);
|
|
if (Main.tile[i, j].wall != (ushort) 187 && Main.tile[i, j].wall != (ushort) 216)
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(2, 5), WorldGen.genRand.Next(2, 5), 123);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Shinies", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[16].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 6E-05); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
copper = WorldGen.genRand.Next(2) != 0 ? 166 : 7;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(2, 6), copper);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 8E-05); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
copper = WorldGen.genRand.Next(2) != 0 ? 166 : 7;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) worldSurfaceHigh, (int) rockLayerHigh), (double) WorldGen.genRand.Next(3, 7), WorldGen.genRand.Next(3, 7), copper);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0002); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
copper = WorldGen.genRand.Next(2) != 0 ? 166 : 7;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(4, 9), WorldGen.genRand.Next(4, 8), copper);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 3E-05); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
iron = WorldGen.genRand.Next(2) != 0 ? 167 : 6;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurfaceHigh), (double) WorldGen.genRand.Next(3, 7), WorldGen.genRand.Next(2, 5), iron);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 8E-05); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
iron = WorldGen.genRand.Next(2) != 0 ? 167 : 6;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) worldSurfaceHigh, (int) rockLayerHigh), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(3, 6), iron);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0002); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
iron = WorldGen.genRand.Next(2) != 0 ? 167 : 6;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(4, 9), WorldGen.genRand.Next(4, 8), iron);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2.6E-05); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
silver = WorldGen.genRand.Next(2) != 0 ? 168 : 9;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) worldSurfaceHigh, (int) rockLayerHigh), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(3, 6), silver);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.00015); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
silver = WorldGen.genRand.Next(2) != 0 ? 168 : 9;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(4, 9), WorldGen.genRand.Next(4, 8), silver);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.00017); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
silver = WorldGen.genRand.Next(2) != 0 ? 168 : 9;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next(0, (int) WorldGen.worldSurfaceLow), (double) WorldGen.genRand.Next(4, 9), WorldGen.genRand.Next(4, 8), silver);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.00012); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
gold = WorldGen.genRand.Next(2) != 0 ? 169 : 8;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) rockLayerLow, Main.maxTilesY), (double) WorldGen.genRand.Next(4, 8), WorldGen.genRand.Next(4, 8), gold);
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.00012); ++index)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
gold = WorldGen.genRand.Next(2) != 0 ? 169 : 8;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next(0, (int) WorldGen.worldSurfaceLow - 20), (double) WorldGen.genRand.Next(4, 8), WorldGen.genRand.Next(4, 8), gold);
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2.25E-05 / 2.0); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(4, 8), 204);
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2.25E-05 / 2.0); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(4, 8), 22);
|
|
}
|
|
if (WorldGen.crimson)
|
|
{
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2.25E-05); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(4, 8), 204);
|
|
}
|
|
else
|
|
{
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2.25E-05); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY), (double) WorldGen.genRand.Next(3, 6), WorldGen.genRand.Next(4, 8), 22);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Webs", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[17].Value;
|
|
for (int index41 = 0; index41 < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0006); ++index41)
|
|
{
|
|
int index42 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int index43 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY - 20);
|
|
if (index41 < WorldGen.numMCaves)
|
|
{
|
|
index42 = WorldGen.mCaveX[index41];
|
|
index43 = WorldGen.mCaveY[index41];
|
|
}
|
|
if (!Main.tile[index42, index43].active() && ((double) index43 > Main.worldSurface || Main.tile[index42, index43].wall > (ushort) 0))
|
|
{
|
|
while (!Main.tile[index42, index43].active() && index43 > (int) WorldGen.worldSurfaceLow)
|
|
--index43;
|
|
int j = index43 + 1;
|
|
int num71 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num71 = -1;
|
|
while (!Main.tile[index42, j].active() && index42 > 10 && index42 < Main.maxTilesX - 10)
|
|
index42 += num71;
|
|
int i = index42 - num71;
|
|
if ((double) j > Main.worldSurface || Main.tile[i, j].wall > (ushort) 0)
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(4, 11), WorldGen.genRand.Next(2, 4), 51, true, (float) num71, -1f, overRide: false);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Underworld", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[18].Value;
|
|
progress.Set(0.0f);
|
|
int num72 = Main.maxTilesY - WorldGen.genRand.Next(150, 190);
|
|
for (int index44 = 0; index44 < Main.maxTilesX; ++index44)
|
|
{
|
|
num72 += WorldGen.genRand.Next(-3, 4);
|
|
if (num72 < Main.maxTilesY - 190)
|
|
num72 = Main.maxTilesY - 190;
|
|
if (num72 > Main.maxTilesY - 160)
|
|
num72 = Main.maxTilesY - 160;
|
|
for (int index45 = num72 - 20 - WorldGen.genRand.Next(3); index45 < Main.maxTilesY; ++index45)
|
|
{
|
|
if (index45 >= num72)
|
|
{
|
|
Main.tile[index44, index45].active(false);
|
|
Main.tile[index44, index45].lava(false);
|
|
Main.tile[index44, index45].liquid = (byte) 0;
|
|
}
|
|
else
|
|
Main.tile[index44, index45].type = (ushort) 57;
|
|
}
|
|
}
|
|
int num73 = Main.maxTilesY - WorldGen.genRand.Next(40, 70);
|
|
for (int index46 = 10; index46 < Main.maxTilesX - 10; ++index46)
|
|
{
|
|
num73 += WorldGen.genRand.Next(-10, 11);
|
|
if (num73 > Main.maxTilesY - 60)
|
|
num73 = Main.maxTilesY - 60;
|
|
if (num73 < Main.maxTilesY - 100)
|
|
num73 = Main.maxTilesY - 120;
|
|
for (int index47 = num73; index47 < Main.maxTilesY - 10; ++index47)
|
|
{
|
|
if (!Main.tile[index46, index47].active())
|
|
{
|
|
Main.tile[index46, index47].lava(true);
|
|
Main.tile[index46, index47].liquid = byte.MaxValue;
|
|
}
|
|
}
|
|
}
|
|
for (int index48 = 0; index48 < Main.maxTilesX; ++index48)
|
|
{
|
|
if (WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
int index49 = Main.maxTilesY - 65;
|
|
while (!Main.tile[index48, index49].active() && index49 > Main.maxTilesY - 135)
|
|
--index49;
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), index49 + WorldGen.genRand.Next(20, 50), (double) WorldGen.genRand.Next(15, 20), 1000, 57, true, speedY: ((float) WorldGen.genRand.Next(1, 3)), noYChange: true);
|
|
}
|
|
}
|
|
Liquid.QuickWater(-2);
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
float num74 = (float) i / (float) (Main.maxTilesX - 1);
|
|
progress.Set((float) ((double) num74 / 2.0 + 0.5));
|
|
if (WorldGen.genRand.Next(13) == 0)
|
|
{
|
|
int index = Main.maxTilesY - 65;
|
|
while ((Main.tile[i, index].liquid > (byte) 0 || Main.tile[i, index].active()) && index > Main.maxTilesY - 140)
|
|
--index;
|
|
if (!WorldGen.drunkWorldGen || WorldGen.genRand.Next(3) == 0 || (double) i <= (double) Main.maxTilesX * 0.4 || (double) i >= (double) Main.maxTilesX * 0.6)
|
|
WorldGen.TileRunner(i, index - WorldGen.genRand.Next(2, 5), (double) WorldGen.genRand.Next(5, 30), 1000, 57, true, speedY: ((float) WorldGen.genRand.Next(1, 3)), noYChange: true);
|
|
float num75 = (float) WorldGen.genRand.Next(1, 3);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num75 *= 0.5f;
|
|
if (!WorldGen.drunkWorldGen || WorldGen.genRand.Next(3) == 0 || (double) i <= (double) Main.maxTilesX * 0.4 || (double) i >= (double) Main.maxTilesX * 0.6)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.TileRunner(i, index - WorldGen.genRand.Next(2, 5), (double) (int) ((double) WorldGen.genRand.Next(5, 15) * (double) num75), (int) ((double) WorldGen.genRand.Next(10, 15) * (double) num75), 57, true, 1f, 0.3f);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
float num76 = (float) WorldGen.genRand.Next(1, 3);
|
|
WorldGen.TileRunner(i, index - WorldGen.genRand.Next(2, 5), (double) (int) ((double) WorldGen.genRand.Next(5, 15) * (double) num76), (int) ((double) WorldGen.genRand.Next(10, 15) * (double) num76), 57, true, -1f, 0.3f);
|
|
}
|
|
}
|
|
WorldGen.TileRunner(i + WorldGen.genRand.Next(-10, 10), index + WorldGen.genRand.Next(-10, 10), (double) WorldGen.genRand.Next(5, 15), WorldGen.genRand.Next(5, 10), -2, speedX: ((float) WorldGen.genRand.Next(-1, 3)), speedY: ((float) WorldGen.genRand.Next(-1, 3)));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.TileRunner(i + WorldGen.genRand.Next(-10, 10), index + WorldGen.genRand.Next(-10, 10), (double) WorldGen.genRand.Next(10, 30), WorldGen.genRand.Next(10, 20), -2, speedX: ((float) WorldGen.genRand.Next(-1, 3)), speedY: ((float) WorldGen.genRand.Next(-1, 3)));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
WorldGen.TileRunner(i + WorldGen.genRand.Next(-15, 15), index + WorldGen.genRand.Next(-15, 10), (double) WorldGen.genRand.Next(15, 30), WorldGen.genRand.Next(5, 20), -2, speedX: ((float) WorldGen.genRand.Next(-1, 3)), speedY: ((float) WorldGen.genRand.Next(-1, 3)));
|
|
}
|
|
}
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(20, Main.maxTilesX - 20), WorldGen.genRand.Next(Main.maxTilesY - 180, Main.maxTilesY - 10), (double) WorldGen.genRand.Next(2, 7), WorldGen.genRand.Next(2, 7), -2);
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
for (int index = 0; index < Main.maxTilesX * 2; ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.35), (int) ((double) Main.maxTilesX * 0.65)), WorldGen.genRand.Next(Main.maxTilesY - 180, Main.maxTilesY - 10), (double) WorldGen.genRand.Next(5, 20), WorldGen.genRand.Next(5, 10), -2);
|
|
}
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
if (!Main.tile[index, Main.maxTilesY - 145].active())
|
|
{
|
|
Main.tile[index, Main.maxTilesY - 145].liquid = byte.MaxValue;
|
|
Main.tile[index, Main.maxTilesY - 145].lava(true);
|
|
}
|
|
if (!Main.tile[index, Main.maxTilesY - 144].active())
|
|
{
|
|
Main.tile[index, Main.maxTilesY - 144].liquid = byte.MaxValue;
|
|
Main.tile[index, Main.maxTilesY - 144].lava(true);
|
|
}
|
|
}
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0008); ++index)
|
|
WorldGen.TileRunner(WorldGen.genRand.Next(0, Main.maxTilesX), WorldGen.genRand.Next(Main.maxTilesY - 140, Main.maxTilesY), (double) WorldGen.genRand.Next(2, 7), WorldGen.genRand.Next(3, 7), 58);
|
|
WorldGen.AddHellHouses();
|
|
}));
|
|
WorldGen.AddGenerationPass("Corruption", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
int num77 = Main.maxTilesX;
|
|
int num78 = 0;
|
|
int num79 = Main.maxTilesX;
|
|
int num80 = 0;
|
|
for (int index50 = 0; index50 < Main.maxTilesX; ++index50)
|
|
{
|
|
for (int index51 = 0; (double) index51 < Main.worldSurface; ++index51)
|
|
{
|
|
if (Main.tile[index50, index51].active())
|
|
{
|
|
if (Main.tile[index50, index51].type == (ushort) 60)
|
|
{
|
|
if (index50 < num77)
|
|
num77 = index50;
|
|
if (index50 > num78)
|
|
num78 = index50;
|
|
}
|
|
else if (Main.tile[index50, index51].type == (ushort) 147 || Main.tile[index50, index51].type == (ushort) 161)
|
|
{
|
|
if (index50 < num79)
|
|
num79 = index50;
|
|
if (index50 > num80)
|
|
num80 = index50;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num81 = 10;
|
|
int num82 = num77 - num81;
|
|
int num83 = num78 + num81;
|
|
int num84 = num79 - num81;
|
|
int num85 = num80 + num81;
|
|
int minValue = 500;
|
|
int num86 = 100;
|
|
bool flag9 = WorldGen.crimson;
|
|
bool flag10 = true;
|
|
double num87 = (double) Main.maxTilesX * 0.00045;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
flag9 = true;
|
|
num87 /= 2.0;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag10 = false;
|
|
}
|
|
if (flag9)
|
|
{
|
|
progress.Message = Lang.gen[72].Value;
|
|
for (int index52 = 0; (double) index52 < num87; ++index52)
|
|
{
|
|
int num88 = num84;
|
|
int num89 = num85;
|
|
int num90 = num82;
|
|
int num91 = num83;
|
|
float num92 = (float) index52 / (float) num87;
|
|
progress.Set(num92);
|
|
bool flag11 = false;
|
|
int i = 0;
|
|
int num93 = 0;
|
|
int num94 = 0;
|
|
while (!flag11)
|
|
{
|
|
flag11 = true;
|
|
int num95 = Main.maxTilesX / 2;
|
|
int num96 = 200;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
num96 = 100;
|
|
i = !flag10 ? WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5), Main.maxTilesX - minValue) : WorldGen.genRand.Next(minValue, (int) ((double) Main.maxTilesX * 0.5));
|
|
}
|
|
else
|
|
i = WorldGen.genRand.Next(minValue, Main.maxTilesX - minValue);
|
|
num93 = i - WorldGen.genRand.Next(200) - 100;
|
|
num94 = i + WorldGen.genRand.Next(200) + 100;
|
|
if (num93 < evilBiomeBeachAvoidance)
|
|
num93 = evilBiomeBeachAvoidance;
|
|
if (num94 > Main.maxTilesX - evilBiomeBeachAvoidance)
|
|
num94 = Main.maxTilesX - evilBiomeBeachAvoidance;
|
|
if (i < num93 + evilBiomeAvoidanceMidFixer)
|
|
i = num93 + evilBiomeAvoidanceMidFixer;
|
|
if (i > num94 - evilBiomeAvoidanceMidFixer)
|
|
i = num94 - evilBiomeAvoidanceMidFixer;
|
|
if (dungeonSide < 0 && num93 < 400)
|
|
num93 = 400;
|
|
else if (dungeonSide > 0 && num93 > Main.maxTilesX - 400)
|
|
num93 = Main.maxTilesX - 400;
|
|
if (i > num95 - num96 && i < num95 + num96)
|
|
flag11 = false;
|
|
if (num93 > num95 - num96 && num93 < num95 + num96)
|
|
flag11 = false;
|
|
if (num94 > num95 - num96 && num94 < num95 + num96)
|
|
flag11 = false;
|
|
if (i > WorldGen.UndergroundDesertLocation.X && i < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag11 = false;
|
|
if (num93 > WorldGen.UndergroundDesertLocation.X && num93 < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag11 = false;
|
|
if (num94 > WorldGen.UndergroundDesertLocation.X && num94 < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag11 = false;
|
|
if (num93 < dungeonLocation + num86 && num94 > dungeonLocation - num86)
|
|
flag11 = false;
|
|
if (num93 < num89 && num94 > num88)
|
|
{
|
|
++num88;
|
|
--num89;
|
|
flag11 = false;
|
|
}
|
|
if (num93 < num91 && num94 > num90)
|
|
{
|
|
++num90;
|
|
--num91;
|
|
flag11 = false;
|
|
}
|
|
}
|
|
WorldGen.CrimStart(i, (int) WorldGen.worldSurfaceLow - 10);
|
|
for (int index53 = num93; index53 < num94; ++index53)
|
|
{
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < Main.worldSurface - 1.0; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[index53, worldSurfaceLow].active())
|
|
{
|
|
int num97 = worldSurfaceLow + WorldGen.genRand.Next(10, 14);
|
|
for (int index54 = worldSurfaceLow; index54 < num97; ++index54)
|
|
{
|
|
if ((Main.tile[index53, index54].type == (ushort) 59 || Main.tile[index53, index54].type == (ushort) 60) && index53 >= num93 + WorldGen.genRand.Next(5) && index53 < num94 - WorldGen.genRand.Next(5))
|
|
Main.tile[index53, index54].type = (ushort) 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
double num98 = Main.worldSurface + 40.0;
|
|
for (int index55 = num93; index55 < num94; ++index55)
|
|
{
|
|
num98 += (double) WorldGen.genRand.Next(-2, 3);
|
|
if (num98 < Main.worldSurface + 30.0)
|
|
num98 = Main.worldSurface + 30.0;
|
|
if (num98 > Main.worldSurface + 50.0)
|
|
num98 = Main.worldSurface + 50.0;
|
|
i2 = index55;
|
|
bool flag12 = false;
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < num98; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].active())
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 53 && i2 >= num93 + WorldGen.genRand.Next(5) && i2 <= num94 - WorldGen.genRand.Next(5))
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 234;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 0 && (double) worldSurfaceLow < Main.worldSurface - 1.0 && !flag12)
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i2, worldSurfaceLow, grass: 199);
|
|
}
|
|
flag12 = true;
|
|
if (Main.tile[i2, worldSurfaceLow].wall == (ushort) 216)
|
|
Main.tile[i2, worldSurfaceLow].wall = (ushort) 218;
|
|
else if (Main.tile[i2, worldSurfaceLow].wall == (ushort) 187)
|
|
Main.tile[i2, worldSurfaceLow].wall = (ushort) 221;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 1)
|
|
{
|
|
if (i2 >= num93 + WorldGen.genRand.Next(5) && i2 <= num94 - WorldGen.genRand.Next(5))
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 203;
|
|
}
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 2)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 199;
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 161)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 200;
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 396)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 401;
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 397)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 399;
|
|
}
|
|
}
|
|
}
|
|
int num99 = WorldGen.genRand.Next(10, 15);
|
|
for (int index56 = 0; index56 < num99; ++index56)
|
|
{
|
|
int num100 = 0;
|
|
bool flag13 = false;
|
|
int num101 = 0;
|
|
while (!flag13)
|
|
{
|
|
++num100;
|
|
int x = WorldGen.genRand.Next(num93 - num101, num94 + num101);
|
|
int y;
|
|
for (y = WorldGen.genRand.Next((int) (Main.worldSurface - (double) (num101 / 2)), (int) (Main.worldSurface + 100.0 + (double) num101)); WorldGen.oceanDepths(x, y); y = WorldGen.genRand.Next((int) (Main.worldSurface - (double) (num101 / 2)), (int) (Main.worldSurface + 100.0 + (double) num101)))
|
|
x = WorldGen.genRand.Next(num93 - num101, num94 + num101);
|
|
if (num100 > 100)
|
|
{
|
|
++num101;
|
|
num100 = 0;
|
|
}
|
|
if (!Main.tile[x, y].active())
|
|
{
|
|
while (!Main.tile[x, y].active())
|
|
++y;
|
|
--y;
|
|
}
|
|
else
|
|
{
|
|
while (Main.tile[x, y].active() && (double) y > Main.worldSurface)
|
|
--y;
|
|
}
|
|
if ((num101 > 10 || Main.tile[x, y + 1].active() && Main.tile[x, y + 1].type == (ushort) 203) && !WorldGen.IsTileNearby(x, y, 26, 3))
|
|
{
|
|
WorldGen.Place3x2(x, y, (ushort) 26, 1);
|
|
if (Main.tile[x, y].type == (ushort) 26)
|
|
flag13 = true;
|
|
}
|
|
if (num101 > 100)
|
|
flag13 = true;
|
|
}
|
|
}
|
|
}
|
|
WorldGen.CrimPlaceHearts();
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
flag9 = false;
|
|
if (flag9)
|
|
return;
|
|
progress.Message = Lang.gen[20].Value;
|
|
for (int index57 = 0; (double) index57 < num87; ++index57)
|
|
{
|
|
int num102 = num84;
|
|
int num103 = num85;
|
|
int num104 = num82;
|
|
int num105 = num83;
|
|
float num106 = (float) index57 / (float) num87;
|
|
progress.Set(num106);
|
|
bool flag14 = false;
|
|
int num107 = 0;
|
|
int num108 = 0;
|
|
int num109 = 0;
|
|
while (!flag14)
|
|
{
|
|
flag14 = true;
|
|
int num110 = Main.maxTilesX / 2;
|
|
int num111 = 200;
|
|
num107 = !WorldGen.drunkWorldGen ? WorldGen.genRand.Next(minValue, Main.maxTilesX - minValue) : (flag10 ? WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.5), Main.maxTilesX - minValue) : WorldGen.genRand.Next(minValue, (int) ((double) Main.maxTilesX * 0.5)));
|
|
num108 = num107 - WorldGen.genRand.Next(200) - 100;
|
|
num109 = num107 + WorldGen.genRand.Next(200) + 100;
|
|
if (num108 < evilBiomeBeachAvoidance)
|
|
num108 = evilBiomeBeachAvoidance;
|
|
if (num109 > Main.maxTilesX - evilBiomeBeachAvoidance)
|
|
num109 = Main.maxTilesX - evilBiomeBeachAvoidance;
|
|
if (num107 < num108 + evilBiomeAvoidanceMidFixer)
|
|
num107 = num108 + evilBiomeAvoidanceMidFixer;
|
|
if (num107 > num109 - evilBiomeAvoidanceMidFixer)
|
|
num107 = num109 - evilBiomeAvoidanceMidFixer;
|
|
if (num107 > num110 - num111 && num107 < num110 + num111)
|
|
flag14 = false;
|
|
if (num108 > num110 - num111 && num108 < num110 + num111)
|
|
flag14 = false;
|
|
if (num109 > num110 - num111 && num109 < num110 + num111)
|
|
flag14 = false;
|
|
if (num107 > WorldGen.UndergroundDesertLocation.X && num107 < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag14 = false;
|
|
if (num108 > WorldGen.UndergroundDesertLocation.X && num108 < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag14 = false;
|
|
if (num109 > WorldGen.UndergroundDesertLocation.X && num109 < WorldGen.UndergroundDesertLocation.X + WorldGen.UndergroundDesertLocation.Width)
|
|
flag14 = false;
|
|
if (num108 < dungeonLocation + num86 && num109 > dungeonLocation - num86)
|
|
flag14 = false;
|
|
if (num108 < num103 && num109 > num102)
|
|
{
|
|
++num102;
|
|
--num103;
|
|
flag14 = false;
|
|
}
|
|
if (num108 < num105 && num109 > num104)
|
|
{
|
|
++num104;
|
|
--num105;
|
|
flag14 = false;
|
|
}
|
|
}
|
|
int num112 = 0;
|
|
for (int i = num108; i < num109; ++i)
|
|
{
|
|
if (num112 > 0)
|
|
--num112;
|
|
if (i == num107 || num112 == 0)
|
|
{
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < Main.worldSurface - 1.0; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[i, worldSurfaceLow].active() || Main.tile[i, worldSurfaceLow].wall > (ushort) 0)
|
|
{
|
|
if (i == num107)
|
|
{
|
|
num112 = 20;
|
|
WorldGen.ChasmRunner(i, worldSurfaceLow, WorldGen.genRand.Next(150) + 150, true);
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(35) == 0 && num112 == 0)
|
|
{
|
|
num112 = 30;
|
|
bool makeOrb = true;
|
|
WorldGen.ChasmRunner(i, worldSurfaceLow, WorldGen.genRand.Next(50) + 50, makeOrb);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < Main.worldSurface - 1.0; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[i, worldSurfaceLow].active())
|
|
{
|
|
int num113 = worldSurfaceLow + WorldGen.genRand.Next(10, 14);
|
|
for (int index58 = worldSurfaceLow; index58 < num113; ++index58)
|
|
{
|
|
if ((Main.tile[i, index58].type == (ushort) 59 || Main.tile[i, index58].type == (ushort) 60) && i >= num108 + WorldGen.genRand.Next(5) && i < num109 - WorldGen.genRand.Next(5))
|
|
Main.tile[i, index58].type = (ushort) 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
double num114 = Main.worldSurface + 40.0;
|
|
for (int index59 = num108; index59 < num109; ++index59)
|
|
{
|
|
num114 += (double) WorldGen.genRand.Next(-2, 3);
|
|
if (num114 < Main.worldSurface + 30.0)
|
|
num114 = Main.worldSurface + 30.0;
|
|
if (num114 > Main.worldSurface + 50.0)
|
|
num114 = Main.worldSurface + 50.0;
|
|
i2 = index59;
|
|
bool flag15 = false;
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < num114; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].active())
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 53 && i2 >= num108 + WorldGen.genRand.Next(5) && i2 <= num109 - WorldGen.genRand.Next(5))
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 112;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 0 && (double) worldSurfaceLow < Main.worldSurface - 1.0 && !flag15)
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i2, worldSurfaceLow, grass: 23);
|
|
}
|
|
flag15 = true;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 1 && i2 >= num108 + WorldGen.genRand.Next(5) && i2 <= num109 - WorldGen.genRand.Next(5))
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 25;
|
|
if (Main.tile[i2, worldSurfaceLow].wall == (ushort) 216)
|
|
Main.tile[i2, worldSurfaceLow].wall = (ushort) 217;
|
|
else if (Main.tile[i2, worldSurfaceLow].wall == (ushort) 187)
|
|
Main.tile[i2, worldSurfaceLow].wall = (ushort) 220;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 2)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 23;
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 161)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 163;
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 396)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 400;
|
|
else if (Main.tile[i2, worldSurfaceLow].type == (ushort) 397)
|
|
Main.tile[i2, worldSurfaceLow].type = (ushort) 398;
|
|
}
|
|
}
|
|
}
|
|
for (int index60 = num108; index60 < num109; ++index60)
|
|
{
|
|
for (int index61 = 0; index61 < Main.maxTilesY - 50; ++index61)
|
|
{
|
|
if (Main.tile[index60, index61].active() && Main.tile[index60, index61].type == (ushort) 31)
|
|
{
|
|
int num115 = index60 - 13;
|
|
int num116 = index60 + 13;
|
|
int num117 = index61 - 13;
|
|
int num118 = index61 + 13;
|
|
for (int index62 = num115; index62 < num116; ++index62)
|
|
{
|
|
if (index62 > 10 && index62 < Main.maxTilesX - 10)
|
|
{
|
|
for (int index63 = num117; index63 < num118; ++index63)
|
|
{
|
|
if (Math.Abs(index62 - index60) + Math.Abs(index63 - index61) < 9 + WorldGen.genRand.Next(11) && WorldGen.genRand.Next(3) != 0 && Main.tile[index62, index63].type != (ushort) 31)
|
|
{
|
|
Main.tile[index62, index63].active(true);
|
|
Main.tile[index62, index63].type = (ushort) 25;
|
|
if (Math.Abs(index62 - index60) <= 1 && Math.Abs(index63 - index61) <= 1)
|
|
Main.tile[index62, index63].active(false);
|
|
}
|
|
if (Main.tile[index62, index63].type != (ushort) 31 && Math.Abs(index62 - index60) <= 2 + WorldGen.genRand.Next(3) && Math.Abs(index63 - index61) <= 2 + WorldGen.genRand.Next(3))
|
|
Main.tile[index62, index63].active(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Lakes", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[19].Value;
|
|
int num119 = Main.maxTilesX / 4200;
|
|
int num120 = WorldGen.genRand.Next(num119 * 3, num119 * 6);
|
|
for (int index64 = 0; index64 < num120; ++index64)
|
|
{
|
|
int num121 = Main.maxTilesX / 4;
|
|
if (WorldGen.numLakes >= WorldGen.maxLakes - 1)
|
|
break;
|
|
float num122 = (float) index64 / (float) num120;
|
|
progress.Set(num122);
|
|
while (num121 > 0)
|
|
{
|
|
bool flag = false;
|
|
--num121;
|
|
int i4 = WorldGen.genRand.Next(lakesBeachAvoidance, Main.maxTilesX - lakesBeachAvoidance);
|
|
while ((double) i4 > (double) Main.maxTilesX * 0.45 && (double) i4 < (double) Main.maxTilesX * 0.55)
|
|
i4 = WorldGen.genRand.Next(lakesBeachAvoidance, Main.maxTilesX - lakesBeachAvoidance);
|
|
for (int index65 = 0; index65 < WorldGen.numLakes; ++index65)
|
|
{
|
|
if (Math.Abs(i4 - WorldGen.LakeX[index65]) < 150)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
for (int index66 = 0; index66 < WorldGen.numMCaves; ++index66)
|
|
{
|
|
if (Math.Abs(i4 - WorldGen.mCaveX[index66]) < 100)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
for (int index67 = 0; index67 < WorldGen.numTunnels; ++index67)
|
|
{
|
|
if (Math.Abs(i4 - WorldGen.tunnelX[index67]) < 100)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
int j3 = (int) WorldGen.worldSurfaceLow - 20;
|
|
while (!Main.tile[i4, j3].active())
|
|
{
|
|
++j3;
|
|
if ((double) j3 >= Main.worldSurface || Main.tile[i4, j3].wall > (ushort) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (Main.tile[i4, j3].type == (ushort) 53)
|
|
flag = true;
|
|
if (!flag)
|
|
{
|
|
int num123 = 50;
|
|
for (int index68 = i4 - num123; index68 <= i4 + num123; ++index68)
|
|
{
|
|
for (int index69 = j3 - num123; index69 <= j3 + num123; ++index69)
|
|
{
|
|
if (Main.tile[index68, index69].type == (ushort) 203 || Main.tile[index68, index69].type == (ushort) 25)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
int num124 = j3;
|
|
int num125 = 20;
|
|
while (!WorldGen.SolidTile(i4 - num125, j3) || !WorldGen.SolidTile(i4 + num125, j3))
|
|
{
|
|
++j3;
|
|
if ((double) j3 > Main.worldSurface - 50.0)
|
|
flag = true;
|
|
}
|
|
if (j3 - num124 <= 10)
|
|
{
|
|
int num126 = 60;
|
|
for (int index70 = i4 - num126; index70 <= i4 + num126; ++index70)
|
|
{
|
|
int index71 = j3 - 20;
|
|
if (Main.tile[index70, index71].active() || Main.tile[index70, index71].wall > (ushort) 0)
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
{
|
|
int num127 = 0;
|
|
for (int i5 = i4 - num126; i5 <= i4 + num126; ++i5)
|
|
{
|
|
for (int j4 = j3; j4 <= j3 + num126 * 2; ++j4)
|
|
{
|
|
if (WorldGen.SolidTile(i5, j4))
|
|
++num127;
|
|
}
|
|
}
|
|
int num128 = (num126 * 2 + 1) * (num126 * 2 + 1);
|
|
if ((double) num127 >= (double) num128 * 0.8 && !WorldGen.UndergroundDesertLocation.Intersects(new Microsoft.Xna.Framework.Rectangle(i4 - 8, j3 - 8, 16, 16)))
|
|
{
|
|
WorldGen.SonOfLakinater(i4, j3);
|
|
WorldGen.LakeX[WorldGen.numLakes] = i4;
|
|
++WorldGen.numLakes;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Dungeon", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
int num129 = dungeonLocation;
|
|
int num130 = (int) ((Main.worldSurface + Main.rockLayer) / 2.0) + WorldGen.genRand.Next(-200, 200);
|
|
int num131 = (int) ((Main.worldSurface + Main.rockLayer) / 2.0) + 200;
|
|
int y = num130;
|
|
bool flag = false;
|
|
for (int index = 0; index < 10; ++index)
|
|
{
|
|
if (WorldGen.SolidTile(num129, y + index))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
{
|
|
while (y < num131 && !WorldGen.SolidTile(num129, y + 10))
|
|
++y;
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
y = (int) Main.worldSurface + 70;
|
|
WorldGen.MakeDungeon(num129, y);
|
|
}));
|
|
WorldGen.AddGenerationPass("Slush", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index72 = snowTop; index72 < snowBottom; ++index72)
|
|
{
|
|
for (int index73 = snowMinX[index72]; index73 < snowMaxX[index72]; ++index73)
|
|
{
|
|
switch (Main.tile[index73, index72].type)
|
|
{
|
|
case 1:
|
|
Main.tile[index73, index72].type = (ushort) 161;
|
|
break;
|
|
case 59:
|
|
bool flag = true;
|
|
int num132 = 3;
|
|
for (int index74 = index73 - num132; index74 <= index73 + num132; ++index74)
|
|
{
|
|
for (int index75 = index72 - num132; index75 <= index72 + num132; ++index75)
|
|
{
|
|
if (Main.tile[index74, index75].type == (ushort) 60 || Main.tile[index74, index75].type == (ushort) 70 || Main.tile[index74, index75].type == (ushort) 71 || Main.tile[index74, index75].type == (ushort) 72)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[index73, index72].type = (ushort) 224;
|
|
break;
|
|
}
|
|
break;
|
|
case 123:
|
|
Main.tile[index73, index72].type = (ushort) 224;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Mountain Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[21].Value;
|
|
for (int index = 0; index < WorldGen.numMCaves; ++index)
|
|
{
|
|
int i = WorldGen.mCaveX[index];
|
|
int j = WorldGen.mCaveY[index];
|
|
WorldGen.CaveOpenater(i, j);
|
|
WorldGen.Cavinator(i, j, WorldGen.genRand.Next(40, 50));
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Beaches", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[22].Value;
|
|
bool floridaStyle1 = false;
|
|
bool floridaStyle2 = false;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
floridaStyle1 = true;
|
|
else
|
|
floridaStyle2 = true;
|
|
}
|
|
for (int index76 = 0; index76 < 2; ++index76)
|
|
{
|
|
if (index76 == 0)
|
|
{
|
|
int num133 = 0;
|
|
int num134 = WorldGen.genRand.Next(oceanWaterStartRandomMin, oceanWaterStartRandomMax);
|
|
if (dungeonSide == 1)
|
|
num134 = oceanWaterForcedJungleLength;
|
|
int num135 = leftBeachEnd - minSsandBeforeWater;
|
|
if (num134 > num135)
|
|
num134 = num135;
|
|
int count = 0;
|
|
float depth = 1f;
|
|
int index77 = 0;
|
|
while (!Main.tile[num134 - 1, index77].active())
|
|
++index77;
|
|
shellStartYLeft = index77;
|
|
int num136 = index77 + WorldGen.genRand.Next(1, 5);
|
|
for (int index78 = num134 - 1; index78 >= num133; --index78)
|
|
{
|
|
if (index78 > 30)
|
|
{
|
|
++count;
|
|
depth = WorldGen.TuneOceanDepth(count, depth, floridaStyle1);
|
|
}
|
|
else
|
|
++depth;
|
|
int num137 = WorldGen.genRand.Next(15, 20);
|
|
for (int index79 = 0; (double) index79 < (double) num136 + (double) depth + (double) num137; ++index79)
|
|
{
|
|
if ((double) index79 < (double) num136 + (double) depth * 0.75 - 3.0)
|
|
{
|
|
Main.tile[index78, index79].active(false);
|
|
if (index79 > num136)
|
|
Main.tile[index78, index79].liquid = byte.MaxValue;
|
|
else if (index79 == num136)
|
|
{
|
|
Main.tile[index78, index79].liquid = (byte) 127;
|
|
if (shellStartXLeft == 0)
|
|
shellStartXLeft = index78;
|
|
}
|
|
}
|
|
else if (index79 > num136)
|
|
{
|
|
Main.tile[index78, index79].type = (ushort) 53;
|
|
Main.tile[index78, index79].active(true);
|
|
}
|
|
Main.tile[index78, index79].wall = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int index80 = Main.maxTilesX - WorldGen.genRand.Next(oceanWaterStartRandomMin, oceanWaterStartRandomMax);
|
|
int maxTilesX = Main.maxTilesX;
|
|
if (dungeonSide == -1)
|
|
index80 = Main.maxTilesX - oceanWaterForcedJungleLength;
|
|
int num138 = rightBeachStart + minSsandBeforeWater;
|
|
if (index80 < num138)
|
|
index80 = num138;
|
|
float depth = 1f;
|
|
int count = 0;
|
|
int index81 = 0;
|
|
while (!Main.tile[index80, index81].active())
|
|
++index81;
|
|
shellStartXRight = 0;
|
|
shellStartYRight = index81;
|
|
int num139 = index81 + WorldGen.genRand.Next(1, 5);
|
|
for (int index82 = index80; index82 < maxTilesX; ++index82)
|
|
{
|
|
if (index82 < maxTilesX - 30)
|
|
{
|
|
++count;
|
|
depth = WorldGen.TuneOceanDepth(count, depth, floridaStyle2);
|
|
}
|
|
else
|
|
++depth;
|
|
int num140 = WorldGen.genRand.Next(15, 20);
|
|
for (int index83 = 0; (double) index83 < (double) num139 + (double) depth + (double) num140; ++index83)
|
|
{
|
|
if ((double) index83 < (double) num139 + (double) depth * 0.75 - 3.0)
|
|
{
|
|
Main.tile[index82, index83].active(false);
|
|
if (index83 > num139)
|
|
Main.tile[index82, index83].liquid = byte.MaxValue;
|
|
else if (index83 == num139)
|
|
{
|
|
Main.tile[index82, index83].liquid = (byte) 127;
|
|
if (shellStartXRight == 0)
|
|
shellStartXRight = index82;
|
|
}
|
|
}
|
|
else if (index83 > num139)
|
|
{
|
|
Main.tile[index82, index83].type = (ushort) 53;
|
|
Main.tile[index82, index83].active(true);
|
|
}
|
|
Main.tile[index82, index83].wall = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Gems", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[23].Value;
|
|
Main.tileSolid[484] = false;
|
|
for (int type = 63; type <= 68; ++type)
|
|
{
|
|
float num141 = (float) (type - 63) / 6f;
|
|
progress.Set(num141);
|
|
float num142 = 0.0f;
|
|
switch (type)
|
|
{
|
|
case 63:
|
|
num142 = (float) Main.maxTilesX * 0.3f;
|
|
break;
|
|
case 64:
|
|
num142 = (float) Main.maxTilesX * 0.1f;
|
|
break;
|
|
case 65:
|
|
num142 = (float) Main.maxTilesX * 0.25f;
|
|
break;
|
|
case 66:
|
|
num142 = (float) Main.maxTilesX * 0.45f;
|
|
break;
|
|
case 67:
|
|
num142 = (float) Main.maxTilesX * 0.5f;
|
|
break;
|
|
case 68:
|
|
num142 = (float) Main.maxTilesX * 0.05f;
|
|
break;
|
|
}
|
|
float num143 = num142 * 0.2f;
|
|
for (int index = 0; (double) index < (double) num143; ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY); Main.tile[i, j].type != (ushort) 1; j = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY))
|
|
i = WorldGen.genRand.Next(0, Main.maxTilesX);
|
|
WorldGen.TileRunner(i, j, (double) WorldGen.genRand.Next(2, 6), WorldGen.genRand.Next(3, 7), type);
|
|
}
|
|
}
|
|
for (int index84 = 0; index84 < 2; ++index84)
|
|
{
|
|
int num144 = 1;
|
|
int num145 = 5;
|
|
int num146 = Main.maxTilesX - 5;
|
|
if (index84 == 1)
|
|
{
|
|
num144 = -1;
|
|
num145 = Main.maxTilesX - 5;
|
|
num146 = 5;
|
|
}
|
|
for (int index85 = num145; index85 != num146; index85 += num144)
|
|
{
|
|
if (index85 <= WorldGen.UndergroundDesertLocation.Left || index85 >= WorldGen.UndergroundDesertLocation.Right)
|
|
{
|
|
for (int index86 = 10; index86 < Main.maxTilesY - 10; ++index86)
|
|
{
|
|
if (Main.tile[index85, index86].active() && Main.tile[index85, index86 + 1].active() && Main.tileSand[(int) Main.tile[index85, index86].type] && Main.tileSand[(int) Main.tile[index85, index86 + 1].type])
|
|
{
|
|
ushort type = Main.tile[index85, index86].type;
|
|
int index87 = index85 + num144;
|
|
int index88 = index86 + 1;
|
|
if (!Main.tile[index87, index86].active() && !Main.tile[index87, index88].active())
|
|
{
|
|
while (!Main.tile[index87, index88].active())
|
|
++index88;
|
|
int index89 = index88 - 1;
|
|
Main.tile[index85, index86].active(false);
|
|
Main.tile[index87, index89].active(true);
|
|
Main.tile[index87, index89].type = type;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Gravitating Sand", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[24].Value;
|
|
for (int x = 0; x < Main.maxTilesX; ++x)
|
|
{
|
|
float num147 = (float) x / (float) (Main.maxTilesX - 1);
|
|
progress.Set(num147);
|
|
bool flag = false;
|
|
int num148 = 0;
|
|
for (int y = Main.maxTilesY - 1; y > 0; --y)
|
|
{
|
|
if (WorldGen.SolidOrSlopedTile(x, y))
|
|
{
|
|
ushort type = Main.tile[x, y].type;
|
|
if (flag && y < (int) Main.worldSurface && y != num148 - 1 && TileID.Sets.Falling[(int) type])
|
|
{
|
|
for (int index = y; index < num148; ++index)
|
|
Main.tile[x, index].ResetToType(type);
|
|
}
|
|
flag = true;
|
|
num148 = y;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Create Ocean Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
if (WorldGen.genRand.Next(4) == 0 || WorldGen.drunkWorldGen)
|
|
{
|
|
progress.Message = Lang.gen[90].Value;
|
|
int i = WorldGen.genRand.Next(55, 95);
|
|
if (index == 1)
|
|
i = WorldGen.genRand.Next(Main.maxTilesX - 95, Main.maxTilesX - 55);
|
|
int j = 0;
|
|
while (!Main.tile[i, j].active())
|
|
++j;
|
|
WorldGen.oceanCave(i, j);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Clean Up Dirt", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[25].Value;
|
|
for (int index90 = 3; index90 < Main.maxTilesX - 3; ++index90)
|
|
{
|
|
float num149 = (float) index90 / (float) Main.maxTilesX;
|
|
progress.Set(0.5f * num149);
|
|
bool flag = true;
|
|
for (int index91 = 0; (double) index91 < Main.worldSurface; ++index91)
|
|
{
|
|
if (flag)
|
|
{
|
|
if (Main.tile[index90, index91].wall == (ushort) 2 || Main.tile[index90, index91].wall == (ushort) 40 || Main.tile[index90, index91].wall == (ushort) 64 || Main.tile[index90, index91].wall == (ushort) 86)
|
|
Main.tile[index90, index91].wall = (ushort) 0;
|
|
if (Main.tile[index90, index91].type != (ushort) 53 && Main.tile[index90, index91].type != (ushort) 112 && Main.tile[index90, index91].type != (ushort) 234)
|
|
{
|
|
if (Main.tile[index90 - 1, index91].wall == (ushort) 2 || Main.tile[index90 - 1, index91].wall == (ushort) 40 || Main.tile[index90 - 1, index91].wall == (ushort) 40)
|
|
Main.tile[index90 - 1, index91].wall = (ushort) 0;
|
|
if ((Main.tile[index90 - 2, index91].wall == (ushort) 2 || Main.tile[index90 - 2, index91].wall == (ushort) 40 || Main.tile[index90 - 2, index91].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index90 - 2, index91].wall = (ushort) 0;
|
|
if ((Main.tile[index90 - 3, index91].wall == (ushort) 2 || Main.tile[index90 - 3, index91].wall == (ushort) 40 || Main.tile[index90 - 3, index91].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index90 - 3, index91].wall = (ushort) 0;
|
|
if (Main.tile[index90 + 1, index91].wall == (ushort) 2 || Main.tile[index90 + 1, index91].wall == (ushort) 40 || Main.tile[index90 + 1, index91].wall == (ushort) 40)
|
|
Main.tile[index90 + 1, index91].wall = (ushort) 0;
|
|
if ((Main.tile[index90 + 2, index91].wall == (ushort) 2 || Main.tile[index90 + 2, index91].wall == (ushort) 40 || Main.tile[index90 + 2, index91].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index90 + 2, index91].wall = (ushort) 0;
|
|
if ((Main.tile[index90 + 3, index91].wall == (ushort) 2 || Main.tile[index90 + 3, index91].wall == (ushort) 40 || Main.tile[index90 + 3, index91].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index90 + 3, index91].wall = (ushort) 0;
|
|
if (Main.tile[index90, index91].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
else if (Main.tile[index90, index91].wall == (ushort) 0 && Main.tile[index90, index91 + 1].wall == (ushort) 0 && Main.tile[index90, index91 + 2].wall == (ushort) 0 && Main.tile[index90, index91 + 3].wall == (ushort) 0 && Main.tile[index90, index91 + 4].wall == (ushort) 0 && Main.tile[index90 - 1, index91].wall == (ushort) 0 && Main.tile[index90 + 1, index91].wall == (ushort) 0 && Main.tile[index90 - 2, index91].wall == (ushort) 0 && Main.tile[index90 + 2, index91].wall == (ushort) 0 && !Main.tile[index90, index91].active() && !Main.tile[index90, index91 + 1].active() && !Main.tile[index90, index91 + 2].active() && !Main.tile[index90, index91 + 3].active())
|
|
flag = true;
|
|
}
|
|
}
|
|
for (int index92 = Main.maxTilesX - 5; index92 >= 5; --index92)
|
|
{
|
|
float num150 = (float) index92 / (float) Main.maxTilesX;
|
|
progress.Set((float) (1.0 - 0.5 * (double) num150));
|
|
bool flag = true;
|
|
for (int index93 = 0; (double) index93 < Main.worldSurface; ++index93)
|
|
{
|
|
if (flag)
|
|
{
|
|
if (Main.tile[index92, index93].wall == (ushort) 2 || Main.tile[index92, index93].wall == (ushort) 40 || Main.tile[index92, index93].wall == (ushort) 64)
|
|
Main.tile[index92, index93].wall = (ushort) 0;
|
|
if (Main.tile[index92, index93].type != (ushort) 53)
|
|
{
|
|
if (Main.tile[index92 - 1, index93].wall == (ushort) 2 || Main.tile[index92 - 1, index93].wall == (ushort) 40 || Main.tile[index92 - 1, index93].wall == (ushort) 40)
|
|
Main.tile[index92 - 1, index93].wall = (ushort) 0;
|
|
if ((Main.tile[index92 - 2, index93].wall == (ushort) 2 || Main.tile[index92 - 2, index93].wall == (ushort) 40 || Main.tile[index92 - 2, index93].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index92 - 2, index93].wall = (ushort) 0;
|
|
if ((Main.tile[index92 - 3, index93].wall == (ushort) 2 || Main.tile[index92 - 3, index93].wall == (ushort) 40 || Main.tile[index92 - 3, index93].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index92 - 3, index93].wall = (ushort) 0;
|
|
if (Main.tile[index92 + 1, index93].wall == (ushort) 2 || Main.tile[index92 + 1, index93].wall == (ushort) 40 || Main.tile[index92 + 1, index93].wall == (ushort) 40)
|
|
Main.tile[index92 + 1, index93].wall = (ushort) 0;
|
|
if ((Main.tile[index92 + 2, index93].wall == (ushort) 2 || Main.tile[index92 + 2, index93].wall == (ushort) 40 || Main.tile[index92 + 2, index93].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index92 + 2, index93].wall = (ushort) 0;
|
|
if ((Main.tile[index92 + 3, index93].wall == (ushort) 2 || Main.tile[index92 + 3, index93].wall == (ushort) 40 || Main.tile[index92 + 3, index93].wall == (ushort) 40) && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[index92 + 3, index93].wall = (ushort) 0;
|
|
if (Main.tile[index92, index93].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
else if (Main.tile[index92, index93].wall == (ushort) 0 && Main.tile[index92, index93 + 1].wall == (ushort) 0 && Main.tile[index92, index93 + 2].wall == (ushort) 0 && Main.tile[index92, index93 + 3].wall == (ushort) 0 && Main.tile[index92, index93 + 4].wall == (ushort) 0 && Main.tile[index92 - 1, index93].wall == (ushort) 0 && Main.tile[index92 + 1, index93].wall == (ushort) 0 && Main.tile[index92 - 2, index93].wall == (ushort) 0 && Main.tile[index92 + 2, index93].wall == (ushort) 0 && !Main.tile[index92, index93].active() && !Main.tile[index92, index93 + 1].active() && !Main.tile[index92, index93 + 2].active() && !Main.tile[index92, index93 + 3].active())
|
|
flag = true;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Pyramids", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index94 = 0; index94 < numPyr; ++index94)
|
|
{
|
|
int i = PyrX[index94];
|
|
int index95 = PyrY[index94];
|
|
if (i > 300 && i < Main.maxTilesX - 300 && (dungeonSide >= 0 || (double) i >= (double) WorldGen.dungeonX + (double) Main.maxTilesX * 0.15) && (dungeonSide <= 0 || (double) i <= (double) WorldGen.dungeonX - (double) Main.maxTilesX * 0.15))
|
|
{
|
|
while (!Main.tile[i, index95].active() && (double) index95 < Main.worldSurface)
|
|
++index95;
|
|
if ((double) index95 < Main.worldSurface && Main.tile[i, index95].type == (ushort) 53)
|
|
{
|
|
int num151 = Main.maxTilesX;
|
|
for (int index96 = 0; index96 < index94; ++index96)
|
|
{
|
|
int num152 = Math.Abs(i - PyrX[index96]);
|
|
if (num152 < num151)
|
|
num151 = num152;
|
|
}
|
|
int num153 = 220;
|
|
if (WorldGen.drunkWorldGen)
|
|
num153 /= 2;
|
|
if (num151 >= num153)
|
|
{
|
|
int j = index95 - 1;
|
|
WorldGen.Pyramid(i, j);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Dirt Rock Wall Runner", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(10, Main.maxTilesX - 10);
|
|
int j = WorldGen.genRand.Next(10, (int) Main.worldSurface);
|
|
if (Main.tile[i, j].wall == (ushort) 2)
|
|
WorldGen.DirtyRockRunner(i, j);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Living Trees", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
int num154 = 200;
|
|
float num155 = (float) (Main.maxTilesX / 4200);
|
|
int num156 = WorldGen.genRand.Next(0, (int) (2.0 * (double) num155) + 1);
|
|
if (num156 == 0 && WorldGen.genRand.Next(2) == 0)
|
|
++num156;
|
|
if (WorldGen.drunkWorldGen)
|
|
num156 += (int) (2.0 * (double) num155);
|
|
for (int index97 = 0; index97 < num156; ++index97)
|
|
{
|
|
bool flag16 = false;
|
|
int num157 = 0;
|
|
while (!flag16)
|
|
{
|
|
++num157;
|
|
if (num157 > Main.maxTilesX / 2)
|
|
flag16 = true;
|
|
int i6 = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
if (i6 <= Main.maxTilesX / 2 - num154 || i6 >= Main.maxTilesX / 2 + num154)
|
|
{
|
|
int index98 = 0;
|
|
while (!Main.tile[i6, index98].active() && (double) index98 < Main.worldSurface)
|
|
++index98;
|
|
if (Main.tile[i6, index98].type == (ushort) 0)
|
|
{
|
|
int j5 = index98 - 1;
|
|
if (j5 > 150)
|
|
{
|
|
bool flag17 = true;
|
|
for (int index99 = i6 - 50; index99 < i6 + 50; ++index99)
|
|
{
|
|
for (int index100 = j5 - 50; index100 < j5 + 50; ++index100)
|
|
{
|
|
if (Main.tile[index99, index100].active())
|
|
{
|
|
switch (Main.tile[index99, index100].type)
|
|
{
|
|
case 41:
|
|
case 43:
|
|
case 44:
|
|
case 189:
|
|
case 196:
|
|
case 460:
|
|
case 481:
|
|
case 482:
|
|
case 483:
|
|
flag17 = false;
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index101 = 0; index101 < WorldGen.numMCaves; ++index101)
|
|
{
|
|
if (i6 > WorldGen.mCaveX[index101] - 50 && i6 < WorldGen.mCaveX[index101] + 50)
|
|
{
|
|
flag17 = false;
|
|
break;
|
|
}
|
|
}
|
|
if (flag17)
|
|
{
|
|
flag16 = WorldGen.GrowLivingTree(i6, j5);
|
|
if (flag16)
|
|
{
|
|
for (int index102 = -1; index102 <= 1; ++index102)
|
|
{
|
|
if (index102 != 0)
|
|
{
|
|
int i7 = i6;
|
|
int num158 = WorldGen.genRand.Next(4);
|
|
if (WorldGen.drunkWorldGen)
|
|
num158 += WorldGen.genRand.Next(2, 5);
|
|
for (int index103 = 0; index103 < num158; ++index103)
|
|
{
|
|
i7 += WorldGen.genRand.Next(13, 31) * index102;
|
|
if (i7 <= Main.maxTilesX / 2 - num154 || i7 >= Main.maxTilesX / 2 + num154)
|
|
{
|
|
int j6 = j5;
|
|
if (Main.tile[i7, j6].active())
|
|
{
|
|
while (Main.tile[i7, j6].active())
|
|
--j6;
|
|
}
|
|
else
|
|
{
|
|
while (!Main.tile[i7, j6].active())
|
|
++j6;
|
|
--j6;
|
|
}
|
|
bool flag18 = true;
|
|
for (int index104 = i6 - 50; index104 < i6 + 50; ++index104)
|
|
{
|
|
for (int index105 = j5 - 50; index105 < j5 + 50; ++index105)
|
|
{
|
|
if (Main.tile[index104, index105].active())
|
|
{
|
|
switch (Main.tile[index104, index105].type)
|
|
{
|
|
case 41:
|
|
case 43:
|
|
case 44:
|
|
case 189:
|
|
case 196:
|
|
case 460:
|
|
case 481:
|
|
case 482:
|
|
case 483:
|
|
flag18 = false;
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag18)
|
|
WorldGen.GrowLivingTree(i7, j6, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[192] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Wood Tree Walls", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
for (int index106 = 25; index106 < Main.maxTilesX - 25; ++index106)
|
|
{
|
|
for (int index107 = 25; (double) index107 < Main.worldSurface; ++index107)
|
|
{
|
|
if (Main.tile[index106, index107].type == (ushort) 191 || Main.tile[index106, index107 - 1].type == (ushort) 191 || Main.tile[index106 - 1, index107].type == (ushort) 191 || Main.tile[index106 + 1, index107].type == (ushort) 191 || Main.tile[index106, index107 + 1].type == (ushort) 191)
|
|
{
|
|
bool flag = true;
|
|
for (int index108 = index106 - 1; index108 <= index106 + 1; ++index108)
|
|
{
|
|
for (int index109 = index107 - 1; index109 <= index107 + 1; ++index109)
|
|
{
|
|
if (index108 != index106 && index109 != index107 && Main.tile[index108, index109].type != (ushort) 191 && Main.tile[index108, index109].wall != (ushort) 244)
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
Main.tile[index106, index107].wall = (ushort) 244;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Altars", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
Main.tileSolid[484] = false;
|
|
progress.Message = Lang.gen[26].Value;
|
|
int num159 = (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 1.99999994947575E-05);
|
|
for (int index110 = 0; index110 < num159; ++index110)
|
|
{
|
|
progress.Set((float) index110 / (float) num159);
|
|
for (int index111 = 0; index111 < 10000; ++index111)
|
|
{
|
|
int x = WorldGen.genRand.Next(281, Main.maxTilesX - 3 - 280);
|
|
while ((double) x > (double) Main.maxTilesX * 0.45 && (double) x < (double) Main.maxTilesX * 0.55)
|
|
x = WorldGen.genRand.Next(281, Main.maxTilesX - 3 - 280);
|
|
int y;
|
|
for (y = (int) (Main.worldSurface * 2.0 + Main.rockLayer) / 3; WorldGen.oceanDepths(x, y); y = (int) (Main.worldSurface * 2.0 + Main.rockLayer) / 3)
|
|
{
|
|
x = WorldGen.genRand.Next(281, Main.maxTilesX - 3 - 280);
|
|
while ((double) x > (double) Main.maxTilesX * 0.45 && (double) x < (double) Main.maxTilesX * 0.55)
|
|
x = WorldGen.genRand.Next(281, Main.maxTilesX - 3 - 280);
|
|
}
|
|
int style = WorldGen.crimson ? 1 : 0;
|
|
if (!WorldGen.IsTileNearby(x, y, 26, 3))
|
|
WorldGen.Place3x2(x, y, (ushort) 26, style);
|
|
if (Main.tile[x, y].type == (ushort) 26)
|
|
break;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Wet Jungle", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
i2 = index;
|
|
for (int worldSurfaceLow = (int) WorldGen.worldSurfaceLow; (double) worldSurfaceLow < Main.worldSurface - 1.0; ++worldSurfaceLow)
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].active())
|
|
{
|
|
if (Main.tile[i2, worldSurfaceLow].type == (ushort) 60)
|
|
{
|
|
Main.tile[i2, worldSurfaceLow - 1].liquid = byte.MaxValue;
|
|
Main.tile[i2, worldSurfaceLow - 2].liquid = byte.MaxValue;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Jungle Temple", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
int num160 = 0;
|
|
progress.Message = Lang.gen[70].Value;
|
|
long num161 = 0;
|
|
double num162 = 0.25;
|
|
while (true)
|
|
{
|
|
do
|
|
{
|
|
int y = WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY - 500);
|
|
int x = (int) (((WorldGen.genRand.NextDouble() * num162 + 0.1) * (double) -dungeonSide + 0.5) * (double) Main.maxTilesX);
|
|
if (Main.tile[x, y].active() && Main.tile[x, y].type == (ushort) 60)
|
|
{
|
|
WorldGen.makeTemple(x, y);
|
|
return;
|
|
}
|
|
}
|
|
while (num161++ <= 2000000L);
|
|
if (num162 == 0.35)
|
|
{
|
|
++num160;
|
|
if (num160 > 10)
|
|
break;
|
|
}
|
|
num162 = Math.Min(0.35, num162 + 0.05);
|
|
num161 = 0L;
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Hives", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[71].Value;
|
|
float num163 = (float) (Main.maxTilesX / 4200);
|
|
float num164 = (float) (1 + WorldGen.genRand.Next((int) (5.0 * (double) num163), (int) (8.0 * (double) num163)));
|
|
if (WorldGen.drunkWorldGen)
|
|
num164 *= 0.667f;
|
|
int num165 = 10000;
|
|
HiveBiome biome = configuration.CreateBiome<HiveBiome>();
|
|
label_10:
|
|
while ((double) num164 > 0.0 && num165 > 0)
|
|
{
|
|
--num165;
|
|
Point origin = WorldGen.RandomWorldPoint((int) (Main.worldSurface + Main.rockLayer) >> 1, 20, 300, 20);
|
|
if (WorldGen.drunkWorldGen)
|
|
WorldGen.RandomWorldPoint((int) Main.worldSurface, 20, 300, 20);
|
|
if (biome.Place(origin, structures))
|
|
{
|
|
--num164;
|
|
int num166 = WorldGen.genRand.Next(5);
|
|
int num167 = 0;
|
|
int num168 = 10000;
|
|
while (true)
|
|
{
|
|
int x;
|
|
int y;
|
|
do
|
|
{
|
|
if (num167 < num166 && num168 > 0)
|
|
{
|
|
float num169 = (float) ((double) WorldGen.genRand.NextFloat() * 60.0 + 30.0);
|
|
double a;
|
|
x = (int) (Math.Cos(a = (double) WorldGen.genRand.NextFloat() * 6.28318548202515) * (double) num169) + origin.X;
|
|
y = (int) (Math.Sin(a) * (double) num169) + origin.Y;
|
|
--num168;
|
|
}
|
|
else
|
|
goto label_10;
|
|
}
|
|
while (x <= 50 || x >= Main.maxTilesX - 50 || !biome.Place(new Point(x, y), structures));
|
|
++num167;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Jungle Chests", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.genRand.Next(40, Main.maxTilesX - 40);
|
|
WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, Main.maxTilesY - 400);
|
|
float num170 = (float) WorldGen.genRand.Next(7, 12) * (float) (Main.maxTilesX / 4200);
|
|
int num171 = 0;
|
|
for (int index112 = 0; (double) index112 < (double) num170; ++index112)
|
|
{
|
|
bool flag19 = true;
|
|
while (flag19)
|
|
{
|
|
++num171;
|
|
int index113 = WorldGen.genRand.Next(40, Main.maxTilesX / 2 - 40);
|
|
if (dungeonSide < 0)
|
|
index113 += Main.maxTilesX / 2;
|
|
int index114 = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, Main.maxTilesY - 400);
|
|
if (Main.tile[index113, index114].type == (ushort) 60)
|
|
{
|
|
int num172 = 30;
|
|
flag19 = false;
|
|
for (int index115 = index113 - num172; index115 < index113 + num172; index115 += 3)
|
|
{
|
|
for (int index116 = index114 - num172; index116 < index114 + num172; index116 += 3)
|
|
{
|
|
if (Main.tile[index115, index116].active() && (Main.tile[index115, index116].type == (ushort) 225 || Main.tile[index115, index116].type == (ushort) 229 || Main.tile[index115, index116].type == (ushort) 226 || Main.tile[index115, index116].type == (ushort) 119 || Main.tile[index115, index116].type == (ushort) 120))
|
|
flag19 = true;
|
|
if (Main.tile[index115, index116].wall == (ushort) 86 || Main.tile[index115, index116].wall == (ushort) 87)
|
|
flag19 = true;
|
|
}
|
|
}
|
|
}
|
|
if (!flag19)
|
|
{
|
|
int num173 = WorldGen.genRand.Next(2, 4);
|
|
int num174 = WorldGen.genRand.Next(2, 4);
|
|
ushort num175 = 0;
|
|
switch (jungleHut)
|
|
{
|
|
case 45:
|
|
num175 = (ushort) 10;
|
|
break;
|
|
case 119:
|
|
num175 = (ushort) 23;
|
|
break;
|
|
case 120:
|
|
num175 = (ushort) 24;
|
|
break;
|
|
case 158:
|
|
num175 = (ushort) 42;
|
|
break;
|
|
case 175:
|
|
num175 = (ushort) 45;
|
|
break;
|
|
}
|
|
for (int index117 = index113 - num173 - 1; index117 <= index113 + num173 + 1; ++index117)
|
|
{
|
|
for (int index118 = index114 - num174 - 1; index118 <= index114 + num174 + 1; ++index118)
|
|
{
|
|
Main.tile[index117, index118].active(true);
|
|
Main.tile[index117, index118].type = jungleHut;
|
|
Main.tile[index117, index118].liquid = (byte) 0;
|
|
Main.tile[index117, index118].lava(false);
|
|
}
|
|
}
|
|
for (int index119 = index113 - num173; index119 <= index113 + num173; ++index119)
|
|
{
|
|
for (int index120 = index114 - num174; index120 <= index114 + num174; ++index120)
|
|
{
|
|
Main.tile[index119, index120].active(false);
|
|
Main.tile[index119, index120].wall = num175;
|
|
}
|
|
}
|
|
bool flag20 = false;
|
|
int num176 = 0;
|
|
while (!flag20 && num176 < 100)
|
|
{
|
|
++num176;
|
|
int i = WorldGen.genRand.Next(index113 - num173, index113 + num173 + 1);
|
|
int j = WorldGen.genRand.Next(index114 - num174, index114 + num174 - 2);
|
|
WorldGen.PlaceTile(i, j, 4, true, style: 3);
|
|
if (Main.tile[i, j].type == (ushort) 4)
|
|
flag20 = true;
|
|
}
|
|
for (int index121 = index113 - num173 - 1; index121 <= index113 + num173 + 1; ++index121)
|
|
{
|
|
for (int index122 = index114 + num174 - 2; index122 <= index114 + num174; ++index122)
|
|
Main.tile[index121, index122].active(false);
|
|
}
|
|
for (int index123 = index113 - num173 - 1; index123 <= index113 + num173 + 1; ++index123)
|
|
{
|
|
for (int index124 = index114 + num174 - 2; index124 <= index114 + num174 - 1; ++index124)
|
|
Main.tile[index123, index124].active(false);
|
|
}
|
|
for (int index125 = index113 - num173 - 1; index125 <= index113 + num173 + 1; ++index125)
|
|
{
|
|
int num177 = 4;
|
|
for (int index126 = index114 + num174 + 2; !Main.tile[index125, index126].active() && index126 < Main.maxTilesY && num177 > 0; --num177)
|
|
{
|
|
Main.tile[index125, index126].active(true);
|
|
Main.tile[index125, index126].type = (ushort) 59;
|
|
++index126;
|
|
}
|
|
}
|
|
int num178 = num173 - WorldGen.genRand.Next(1, 3);
|
|
int index127 = index114 - num174 - 2;
|
|
while (num178 > -1)
|
|
{
|
|
for (int index128 = index113 - num178 - 1; index128 <= index113 + num178 + 1; ++index128)
|
|
{
|
|
Main.tile[index128, index127].active(true);
|
|
Main.tile[index128, index127].type = jungleHut;
|
|
}
|
|
num178 -= WorldGen.genRand.Next(1, 3);
|
|
--index127;
|
|
}
|
|
WorldGen.JChestX[WorldGen.numJChests] = index113;
|
|
WorldGen.JChestY[WorldGen.numJChests] = index114;
|
|
structures.AddProtectedStructure(new Microsoft.Xna.Framework.Rectangle(index113 - num178 - 1, index114 - num174 - 1, index113 + num178 + 1, index114 + num174 + 1));
|
|
++WorldGen.numJChests;
|
|
num171 = 0;
|
|
}
|
|
else if (num171 > Main.maxTilesX * 10)
|
|
{
|
|
++index112;
|
|
num171 = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[137] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Settle Liquids", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[27].Value;
|
|
if (WorldGen.notTheBees)
|
|
WorldGen.NotTheBees();
|
|
Liquid.worldGenTilesIgnoreWater(true);
|
|
Liquid.QuickWater(3);
|
|
WorldGen.WaterCheck();
|
|
int num179 = 0;
|
|
Liquid.quickSettle = true;
|
|
while (num179 < 10)
|
|
{
|
|
int num180 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
|
|
++num179;
|
|
float num181 = 0.0f;
|
|
while (Liquid.numLiquid > 0)
|
|
{
|
|
float num182 = (float) (num180 - (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer)) / (float) num180;
|
|
if (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > num180)
|
|
num180 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
|
|
if ((double) num182 > (double) num181)
|
|
num181 = num182;
|
|
else
|
|
num182 = num181;
|
|
if (num179 == 1)
|
|
progress.Set((float) ((double) num182 / 3.0 + 0.330000013113022));
|
|
int num183 = 10;
|
|
if (num179 > num183)
|
|
;
|
|
Liquid.UpdateLiquid();
|
|
}
|
|
WorldGen.WaterCheck();
|
|
progress.Set((float) ((double) num179 * 0.100000001490116 / 3.0 + 0.660000026226044));
|
|
}
|
|
Liquid.quickSettle = false;
|
|
Liquid.worldGenTilesIgnoreWater(false);
|
|
Main.tileSolid[484] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Remove Water From Sand", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
label_11:
|
|
for (int index129 = 400; index129 < Main.maxTilesX - 400; ++index129)
|
|
{
|
|
i2 = index129;
|
|
for (int index130 = 100; (double) index130 < Main.worldSurface - 1.0; ++index130)
|
|
{
|
|
if (Main.tile[i2, index130].active())
|
|
{
|
|
switch (Main.tile[i2, index130].type)
|
|
{
|
|
case 53:
|
|
case 151:
|
|
case 396:
|
|
case 397:
|
|
case 404:
|
|
case 407:
|
|
int index131 = index130;
|
|
while (index131 > 100)
|
|
{
|
|
--index131;
|
|
if (!Main.tile[i2, index131].active())
|
|
Main.tile[i2, index131].liquid = (byte) 0;
|
|
else
|
|
break;
|
|
}
|
|
goto label_11;
|
|
default:
|
|
goto label_11;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[192] = true;
|
|
}));
|
|
WorldGen.AddGenerationPass("Oasis", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
progress.Set(1f);
|
|
int num184 = Main.maxTilesX / 2100 + WorldGen.genRand.Next(2);
|
|
for (int index = 0; index < num184; ++index)
|
|
{
|
|
int minValue = WorldGen.beachDistance + 300;
|
|
int num185 = Main.maxTilesX * 2;
|
|
while (num185 > 0)
|
|
{
|
|
--num185;
|
|
if (WorldGen.PlaceOasis(WorldGen.genRand.Next(minValue, Main.maxTilesX - minValue), WorldGen.genRand.Next(100, (int) Main.worldSurface)))
|
|
num185 = -1;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Shell Piles", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
progress.Set(1f);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num186 = shellStartXLeft;
|
|
int num187 = shellStartYLeft;
|
|
for (int index132 = num186 - 20; index132 <= num186 + 20; ++index132)
|
|
{
|
|
for (int index133 = num187 - 10; index133 <= num187 + 10; ++index133)
|
|
{
|
|
if (Main.tile[index132, index133].active() && Main.tile[index132, index133].type == (ushort) 53 && !Main.tile[index132, index133 - 1].active() && Main.tile[index132, index133 - 1].liquid == (byte) 0 && !Main.tile[index132 - 1, index133].active() && Main.tile[index132 - 1, index133].liquid > (byte) 0)
|
|
{
|
|
shellStartXLeft = index132;
|
|
shellStartYLeft = index133;
|
|
}
|
|
}
|
|
}
|
|
shellStartYLeft -= 50;
|
|
shellStartXLeft -= WorldGen.genRand.Next(5);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
shellStartXLeft -= WorldGen.genRand.Next(10);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
shellStartXLeft -= WorldGen.genRand.Next(15);
|
|
if (WorldGen.genRand.Next(4) != 0)
|
|
WorldGen.ShellPile(shellStartXLeft, shellStartYLeft);
|
|
int maxValue = WorldGen.genRand.Next(2, 4);
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
WorldGen.ShellPile(shellStartXLeft - WorldGen.genRand.Next(10, 35), shellStartYLeft);
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
WorldGen.ShellPile(shellStartXLeft - WorldGen.genRand.Next(40, 65), shellStartYLeft);
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
WorldGen.ShellPile(shellStartXLeft - WorldGen.genRand.Next(70, 95), shellStartYLeft);
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
WorldGen.ShellPile(shellStartXLeft - WorldGen.genRand.Next(100, 125), shellStartYLeft);
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
WorldGen.ShellPile(shellStartXLeft + WorldGen.genRand.Next(10, 25), shellStartYLeft);
|
|
}
|
|
if (WorldGen.genRand.Next(2) != 0)
|
|
return;
|
|
int num188 = shellStartXRight;
|
|
int num189 = shellStartYRight;
|
|
for (int index134 = num188 - 20; index134 <= num188 + 20; ++index134)
|
|
{
|
|
for (int index135 = num189 - 10; index135 <= num189 + 10; ++index135)
|
|
{
|
|
if (Main.tile[index134, index135].active() && Main.tile[index134, index135].type == (ushort) 53 && !Main.tile[index134, index135 - 1].active() && Main.tile[index134, index135 - 1].liquid == (byte) 0 && !Main.tile[index134 + 1, index135].active() && Main.tile[index134 + 1, index135].liquid > (byte) 0)
|
|
{
|
|
shellStartXRight = index134;
|
|
shellStartYRight = index135;
|
|
}
|
|
}
|
|
}
|
|
shellStartYRight -= 50;
|
|
shellStartXRight += WorldGen.genRand.Next(5);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
shellStartXLeft += WorldGen.genRand.Next(10);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
shellStartXLeft += WorldGen.genRand.Next(15);
|
|
if (WorldGen.genRand.Next(4) != 0)
|
|
WorldGen.ShellPile(shellStartXRight, shellStartYRight);
|
|
int maxValue1 = WorldGen.genRand.Next(2, 4);
|
|
if (WorldGen.genRand.Next(maxValue1) == 0)
|
|
WorldGen.ShellPile(shellStartXRight + WorldGen.genRand.Next(10, 35), shellStartYRight);
|
|
if (WorldGen.genRand.Next(maxValue1) == 0)
|
|
WorldGen.ShellPile(shellStartXRight + WorldGen.genRand.Next(40, 65), shellStartYRight);
|
|
if (WorldGen.genRand.Next(maxValue1) == 0)
|
|
WorldGen.ShellPile(shellStartXRight + WorldGen.genRand.Next(70, 95), shellStartYRight);
|
|
if (WorldGen.genRand.Next(maxValue1) == 0)
|
|
WorldGen.ShellPile(shellStartXRight + WorldGen.genRand.Next(100, 125), shellStartYRight);
|
|
if (WorldGen.genRand.Next(maxValue1) != 0)
|
|
return;
|
|
WorldGen.ShellPile(shellStartXRight - WorldGen.genRand.Next(10, 25), shellStartYRight);
|
|
}));
|
|
WorldGen.AddGenerationPass("Smooth World", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[60].Value;
|
|
Main.tileSolid[(int) WorldGen.crackedType] = true;
|
|
for (int index136 = 20; index136 < Main.maxTilesX - 20; ++index136)
|
|
{
|
|
float num190 = (float) index136 / (float) Main.maxTilesX;
|
|
progress.Set(num190);
|
|
for (int index137 = 20; index137 < Main.maxTilesY - 20; ++index137)
|
|
{
|
|
if (Main.tile[index136, index137].type != (ushort) 48 && Main.tile[index136, index137].type != (ushort) 137 && Main.tile[index136, index137].type != (ushort) 232 && Main.tile[index136, index137].type != (ushort) 191 && Main.tile[index136, index137].type != (ushort) 151 && Main.tile[index136, index137].type != (ushort) 274)
|
|
{
|
|
if (!Main.tile[index136, index137 - 1].active() && Main.tile[index136 - 1, index137].type != (ushort) 136 && Main.tile[index136 + 1, index137].type != (ushort) 136)
|
|
{
|
|
if (WorldGen.SolidTile(index136, index137) && TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[index136, index137].type])
|
|
{
|
|
if (!Main.tile[index136 - 1, index137].halfBrick() && !Main.tile[index136 + 1, index137].halfBrick() && Main.tile[index136 - 1, index137].slope() == (byte) 0 && Main.tile[index136 + 1, index137].slope() == (byte) 0)
|
|
{
|
|
if (WorldGen.SolidTile(index136, index137 + 1))
|
|
{
|
|
if (!WorldGen.SolidTile(index136 - 1, index137) && !Main.tile[index136 - 1, index137 + 1].halfBrick() && WorldGen.SolidTile(index136 - 1, index137 + 1) && WorldGen.SolidTile(index136 + 1, index137) && !Main.tile[index136 + 1, index137 - 1].active())
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SlopeTile(index136, index137, 2);
|
|
else
|
|
WorldGen.PoundTile(index136, index137);
|
|
}
|
|
else if (!WorldGen.SolidTile(index136 + 1, index137) && !Main.tile[index136 + 1, index137 + 1].halfBrick() && WorldGen.SolidTile(index136 + 1, index137 + 1) && WorldGen.SolidTile(index136 - 1, index137) && !Main.tile[index136 - 1, index137 - 1].active())
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SlopeTile(index136, index137, 1);
|
|
else
|
|
WorldGen.PoundTile(index136, index137);
|
|
}
|
|
else if (WorldGen.SolidTile(index136 + 1, index137 + 1) && WorldGen.SolidTile(index136 - 1, index137 + 1) && !Main.tile[index136 + 1, index137].active() && !Main.tile[index136 - 1, index137].active())
|
|
WorldGen.PoundTile(index136, index137);
|
|
if (WorldGen.SolidTile(index136, index137))
|
|
{
|
|
if (WorldGen.SolidTile(index136 - 1, index137) && WorldGen.SolidTile(index136 + 1, index137 + 2) && !Main.tile[index136 + 1, index137].active() && !Main.tile[index136 + 1, index137 + 1].active() && !Main.tile[index136 - 1, index137 - 1].active())
|
|
WorldGen.KillTile(index136, index137);
|
|
else if (WorldGen.SolidTile(index136 + 1, index137) && WorldGen.SolidTile(index136 - 1, index137 + 2) && !Main.tile[index136 - 1, index137].active() && !Main.tile[index136 - 1, index137 + 1].active() && !Main.tile[index136 + 1, index137 - 1].active())
|
|
WorldGen.KillTile(index136, index137);
|
|
else if (!Main.tile[index136 - 1, index137 + 1].active() && !Main.tile[index136 - 1, index137].active() && WorldGen.SolidTile(index136 + 1, index137) && WorldGen.SolidTile(index136, index137 + 2))
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
WorldGen.KillTile(index136, index137);
|
|
else if (WorldGen.genRand.Next(5) == 0)
|
|
WorldGen.PoundTile(index136, index137);
|
|
else
|
|
WorldGen.SlopeTile(index136, index137, 2);
|
|
}
|
|
else if (!Main.tile[index136 + 1, index137 + 1].active() && !Main.tile[index136 + 1, index137].active() && WorldGen.SolidTile(index136 - 1, index137) && WorldGen.SolidTile(index136, index137 + 2))
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
WorldGen.KillTile(index136, index137);
|
|
else if (WorldGen.genRand.Next(5) == 0)
|
|
WorldGen.PoundTile(index136, index137);
|
|
else
|
|
WorldGen.SlopeTile(index136, index137, 1);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.SolidTile(index136, index137) && !Main.tile[index136 - 1, index137].active() && !Main.tile[index136 + 1, index137].active())
|
|
WorldGen.KillTile(index136, index137);
|
|
}
|
|
}
|
|
else if (!Main.tile[index136, index137].active() && Main.tile[index136, index137 + 1].type != (ushort) 151 && Main.tile[index136, index137 + 1].type != (ushort) 274)
|
|
{
|
|
if (Main.tile[index136 + 1, index137].type != (ushort) 190 && Main.tile[index136 + 1, index137].type != (ushort) 48 && Main.tile[index136 + 1, index137].type != (ushort) 232 && WorldGen.SolidTile(index136 - 1, index137 + 1) && WorldGen.SolidTile(index136 + 1, index137) && !Main.tile[index136 - 1, index137].active() && !Main.tile[index136 + 1, index137 - 1].active())
|
|
{
|
|
if (Main.tile[index136 + 1, index137].type == (ushort) 495)
|
|
WorldGen.PlaceTile(index136, index137, (int) Main.tile[index136 + 1, index137].type);
|
|
else
|
|
WorldGen.PlaceTile(index136, index137, (int) Main.tile[index136, index137 + 1].type);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SlopeTile(index136, index137, 2);
|
|
else
|
|
WorldGen.PoundTile(index136, index137);
|
|
}
|
|
if (Main.tile[index136 - 1, index137].type != (ushort) 190 && Main.tile[index136 - 1, index137].type != (ushort) 48 && Main.tile[index136 - 1, index137].type != (ushort) 232 && WorldGen.SolidTile(index136 + 1, index137 + 1) && WorldGen.SolidTile(index136 - 1, index137) && !Main.tile[index136 + 1, index137].active() && !Main.tile[index136 - 1, index137 - 1].active())
|
|
{
|
|
if (Main.tile[index136 - 1, index137].type == (ushort) 495)
|
|
WorldGen.PlaceTile(index136, index137, (int) Main.tile[index136 - 1, index137].type);
|
|
else
|
|
WorldGen.PlaceTile(index136, index137, (int) Main.tile[index136, index137 + 1].type);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SlopeTile(index136, index137, 1);
|
|
else
|
|
WorldGen.PoundTile(index136, index137);
|
|
}
|
|
}
|
|
}
|
|
else if (!Main.tile[index136, index137 + 1].active() && WorldGen.genRand.Next(2) == 0 && WorldGen.SolidTile(index136, index137) && !Main.tile[index136 - 1, index137].halfBrick() && !Main.tile[index136 + 1, index137].halfBrick() && Main.tile[index136 - 1, index137].slope() == (byte) 0 && Main.tile[index136 + 1, index137].slope() == (byte) 0 && WorldGen.SolidTile(index136, index137 - 1))
|
|
{
|
|
if (WorldGen.SolidTile(index136 - 1, index137) && !WorldGen.SolidTile(index136 + 1, index137) && WorldGen.SolidTile(index136 - 1, index137 - 1))
|
|
WorldGen.SlopeTile(index136, index137, 3);
|
|
else if (WorldGen.SolidTile(index136 + 1, index137) && !WorldGen.SolidTile(index136 - 1, index137) && WorldGen.SolidTile(index136 + 1, index137 - 1))
|
|
WorldGen.SlopeTile(index136, index137, 4);
|
|
}
|
|
if (TileID.Sets.Conversion.Sand[(int) Main.tile[index136, index137].type])
|
|
Tile.SmoothSlope(index136, index137, false);
|
|
}
|
|
}
|
|
}
|
|
for (int i = 20; i < Main.maxTilesX - 20; ++i)
|
|
{
|
|
for (int j = 20; j < Main.maxTilesY - 20; ++j)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0 && !Main.tile[i, j - 1].active() && Main.tile[i, j].type != (ushort) 137 && Main.tile[i, j].type != (ushort) 48 && Main.tile[i, j].type != (ushort) 232 && Main.tile[i, j].type != (ushort) 191 && Main.tile[i, j].type != (ushort) 151 && Main.tile[i, j].type != (ushort) 274 && Main.tile[i, j].type != (ushort) 75 && Main.tile[i, j].type != (ushort) 76 && WorldGen.SolidTile(i, j) && Main.tile[i - 1, j].type != (ushort) 137 && Main.tile[i + 1, j].type != (ushort) 137)
|
|
{
|
|
if (WorldGen.SolidTile(i, j + 1) && WorldGen.SolidTile(i + 1, j) && !Main.tile[i - 1, j].active())
|
|
WorldGen.SlopeTile(i, j, 2);
|
|
if (WorldGen.SolidTile(i, j + 1) && WorldGen.SolidTile(i - 1, j) && !Main.tile[i + 1, j].active())
|
|
WorldGen.SlopeTile(i, j, 1);
|
|
}
|
|
if (Main.tile[i, j].slope() == (byte) 1 && !WorldGen.SolidTile(i - 1, j))
|
|
{
|
|
WorldGen.SlopeTile(i, j);
|
|
WorldGen.PoundTile(i, j);
|
|
}
|
|
if (Main.tile[i, j].slope() == (byte) 2 && !WorldGen.SolidTile(i + 1, j))
|
|
{
|
|
WorldGen.SlopeTile(i, j);
|
|
WorldGen.PoundTile(i, j);
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[137] = true;
|
|
Main.tileSolid[190] = false;
|
|
Main.tileSolid[192] = false;
|
|
Main.tileSolid[(int) WorldGen.crackedType] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Waterfalls", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[69].Value;
|
|
Main.tileSolid[191] = false;
|
|
for (int i = 20; i < Main.maxTilesX - 20; ++i)
|
|
{
|
|
float num191 = (float) i / (float) Main.maxTilesX;
|
|
progress.Set(num191 * 0.5f);
|
|
for (int j = 20; j < Main.maxTilesY - 20; ++j)
|
|
{
|
|
if (WorldGen.SolidTile(i, j) && !Main.tile[i - 1, j].active() && WorldGen.SolidTile(i, j + 1) && !Main.tile[i + 1, j].active() && (Main.tile[i - 1, j].liquid > (byte) 0 || Main.tile[i + 1, j].liquid > (byte) 0))
|
|
{
|
|
bool flag = true;
|
|
int num192 = WorldGen.genRand.Next(8, 20);
|
|
int num193 = WorldGen.genRand.Next(8, 20);
|
|
int num194 = j - num192;
|
|
int num195 = num193 + j;
|
|
for (int index = num194; index <= num195; ++index)
|
|
{
|
|
if (Main.tile[i, index].halfBrick())
|
|
flag = false;
|
|
}
|
|
if ((Main.tile[i, j].type == (ushort) 75 || Main.tile[i, j].type == (ushort) 76) && WorldGen.genRand.Next(10) != 0)
|
|
flag = false;
|
|
if (flag)
|
|
WorldGen.PoundTile(i, j);
|
|
}
|
|
}
|
|
}
|
|
for (int i = 20; i < Main.maxTilesX - 20; ++i)
|
|
{
|
|
float num196 = (float) i / (float) Main.maxTilesX;
|
|
progress.Set((float) ((double) num196 * 0.5 + 0.5));
|
|
for (int j = 20; j < Main.maxTilesY - 20; ++j)
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 48 && Main.tile[i, j].type != (ushort) 232 && WorldGen.SolidTile(i, j) && WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
if (!WorldGen.SolidTile(i + 1, j) && Main.tile[i - 1, j].halfBrick() && Main.tile[i - 2, j].liquid > (byte) 0)
|
|
WorldGen.PoundTile(i, j);
|
|
if (!WorldGen.SolidTile(i - 1, j) && Main.tile[i + 1, j].halfBrick() && Main.tile[i + 2, j].liquid > (byte) 0)
|
|
WorldGen.PoundTile(i, j);
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[191] = true;
|
|
}));
|
|
WorldGen.AddGenerationPass("Ice", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
WorldGen.NotTheBees();
|
|
progress.Set(1f);
|
|
for (int i = 10; i < Main.maxTilesX - 10; ++i)
|
|
{
|
|
for (int worldSurface3 = (int) Main.worldSurface; worldSurface3 < Main.maxTilesY - 100; ++worldSurface3)
|
|
{
|
|
if (Main.tile[i, worldSurface3].liquid > (byte) 0 && !Main.tile[i, worldSurface3].lava())
|
|
WorldGen.MakeWateryIceThing(i, worldSurface3);
|
|
}
|
|
}
|
|
Main.tileSolid[226] = false;
|
|
Main.tileSolid[162] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Wall Variety", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[79].Value;
|
|
int num197 = (int) (300.0 * (double) ((float) (Main.maxTilesX * Main.maxTilesY) / 5040000f));
|
|
int num198 = num197;
|
|
ShapeData data = new ShapeData();
|
|
while (num197 > 0)
|
|
{
|
|
progress.Set((float) (1.0 - (double) num197 / (double) num198));
|
|
Point point = WorldGen.RandomWorldPoint((int) worldSurface, 2, 190, 2);
|
|
Tile tile1 = Main.tile[point.X, point.Y];
|
|
Tile tile2 = Main.tile[point.X, point.Y - 1];
|
|
ushort type = 0;
|
|
if (tile1.type == (ushort) 60)
|
|
type = (ushort) (204 + WorldGen.genRand.Next(4));
|
|
else if (tile1.type == (ushort) 1 && tile2.wall == (ushort) 0)
|
|
type = (double) point.Y >= rockLayer ? (point.Y >= WorldGen.lavaLine ? (ushort) (208 + WorldGen.genRand.Next(4)) : (ushort) (212 + WorldGen.genRand.Next(4))) : (ushort) (196 + WorldGen.genRand.Next(4));
|
|
if (tile1.active() && type != (ushort) 0 && !tile2.active())
|
|
{
|
|
bool foundInvalidTile = false;
|
|
bool flag;
|
|
if (tile1.type == (ushort) 60)
|
|
flag = WorldUtils.Gen(new Point(point.X, point.Y - 1), (GenShape) new ShapeFloodFill(1000), Actions.Chain((GenAction) new Modifiers.IsNotSolid(), new Actions.Blank().Output(data), (GenAction) new Actions.ContinueWrapper(Actions.Chain((GenAction) new Modifiers.IsTouching(true, new ushort[6]
|
|
{
|
|
(ushort) 147,
|
|
(ushort) 161,
|
|
(ushort) 396,
|
|
(ushort) 397,
|
|
(ushort) 70,
|
|
(ushort) 191
|
|
}), (GenAction) new Actions.Custom((GenBase.CustomPerUnitAction) ((x, y, args) =>
|
|
{
|
|
foundInvalidTile = true;
|
|
return true;
|
|
}))))));
|
|
else
|
|
flag = WorldUtils.Gen(new Point(point.X, point.Y - 1), (GenShape) new ShapeFloodFill(1000), Actions.Chain((GenAction) new Modifiers.IsNotSolid(), new Actions.Blank().Output(data), (GenAction) new Actions.ContinueWrapper(Actions.Chain((GenAction) new Modifiers.IsTouching(true, new ushort[7]
|
|
{
|
|
(ushort) 60,
|
|
(ushort) 147,
|
|
(ushort) 161,
|
|
(ushort) 396,
|
|
(ushort) 397,
|
|
(ushort) 70,
|
|
(ushort) 191
|
|
}), (GenAction) new Modifiers.IsTouching(true, new ushort[6]
|
|
{
|
|
(ushort) 147,
|
|
(ushort) 161,
|
|
(ushort) 396,
|
|
(ushort) 397,
|
|
(ushort) 70,
|
|
(ushort) 191
|
|
}), (GenAction) new Actions.Custom((GenBase.CustomPerUnitAction) ((x, y, args) =>
|
|
{
|
|
foundInvalidTile = true;
|
|
return true;
|
|
}))))));
|
|
if (data.Count > 50 & flag && !foundInvalidTile)
|
|
{
|
|
WorldUtils.Gen(new Point(point.X, point.Y), (GenShape) new ModShapes.OuterOutline(data, useInterior: true), Actions.Chain((GenAction) new Modifiers.SkipWalls(new ushort[1]
|
|
{
|
|
(ushort) 87
|
|
}), (GenAction) new Actions.PlaceWall(type)));
|
|
--num197;
|
|
}
|
|
data.Clear();
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Life Crystals", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.getGoodWorldGen)
|
|
Main.tileSolid[56] = false;
|
|
if (WorldGen.notTheBees)
|
|
WorldGen.NotTheBees();
|
|
dub2 = (float) (Main.maxTilesX / 4200);
|
|
progress.Message = Lang.gen[28].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 2E-05); ++index)
|
|
{
|
|
float num199 = (float) index / ((float) (Main.maxTilesX * Main.maxTilesY) * 2E-05f);
|
|
progress.Set(num199);
|
|
bool flag = false;
|
|
int num200 = 0;
|
|
while (!flag)
|
|
{
|
|
if (WorldGen.AddLifeCrystal(WorldGen.genRand.Next(40, Main.maxTilesX - 40), WorldGen.genRand.Next((int) (Main.worldSurface * 2.0 + Main.rockLayer) / 3, Main.maxTilesY - 300)))
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
++num200;
|
|
if (num200 >= 10000)
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[225] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Statues", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[29].Value;
|
|
int index138 = 0;
|
|
int num201 = (int) ((double) (WorldGen.statueList.Length * 2) * (double) dub2);
|
|
for (int index139 = 0; index139 < num201; ++index139)
|
|
{
|
|
if (index138 >= WorldGen.statueList.Length)
|
|
index138 = 0;
|
|
int x = (int) WorldGen.statueList[index138].X;
|
|
int y1 = (int) WorldGen.statueList[index138].Y;
|
|
float num202 = (float) (index139 / num201);
|
|
progress.Set(num202);
|
|
bool flag = false;
|
|
int num203 = 0;
|
|
while (!flag)
|
|
{
|
|
int index140 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int y2;
|
|
for (y2 = WorldGen.genRand.Next((int) (Main.worldSurface * 2.0 + Main.rockLayer) / 3, Main.maxTilesY - 300); WorldGen.oceanDepths(index140, y2); y2 = WorldGen.genRand.Next((int) (Main.worldSurface * 2.0 + Main.rockLayer) / 3, Main.maxTilesY - 300))
|
|
index140 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
while (!Main.tile[index140, y2].active())
|
|
{
|
|
++y2;
|
|
if (y2 >= Main.maxTilesY)
|
|
break;
|
|
}
|
|
if (y2 < Main.maxTilesY)
|
|
{
|
|
int index141 = y2 - 1;
|
|
WorldGen.PlaceTile(index140, index141, x, true, true, style: y1);
|
|
if (Main.tile[index140, index141].active() && (int) Main.tile[index140, index141].type == x)
|
|
{
|
|
flag = true;
|
|
if (WorldGen.StatuesWithTraps.Contains(index138))
|
|
WorldGen.PlaceStatueTrap(index140, index141);
|
|
++index138;
|
|
}
|
|
else
|
|
{
|
|
++num203;
|
|
if (num203 >= 10000)
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Buried Chests", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[30].Value;
|
|
Main.tileSolid[226] = true;
|
|
Main.tileSolid[162] = true;
|
|
Main.tileSolid[225] = true;
|
|
CaveHouseBiome biome = configuration.CreateBiome<CaveHouseBiome>();
|
|
int random1 = passConfig.Get<WorldGenRange>("CaveHouseCount").GetRandom(WorldGen.genRand);
|
|
int random2 = passConfig.Get<WorldGenRange>("UnderworldChestCount").GetRandom(WorldGen.genRand);
|
|
int random3 = passConfig.Get<WorldGenRange>("CaveChestCount").GetRandom(WorldGen.genRand);
|
|
int random4 = passConfig.Get<WorldGenRange>("AdditionalDesertHouseCount").GetRandom(WorldGen.genRand);
|
|
int num204 = random1 + random2 + random3 + random4;
|
|
int num205 = 10000;
|
|
for (int index142 = 0; index142 < random3 && num205 > 0; ++index142)
|
|
{
|
|
progress.Set((float) index142 / (float) num204);
|
|
int index143 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int index144 = WorldGen.genRand.Next((int) ((worldSurfaceHigh + 20.0 + Main.rockLayer) / 2.0), Main.maxTilesY - 230);
|
|
ushort wall = Main.tile[index143, index144].wall;
|
|
if (Main.wallDungeon[(int) wall] || wall == (ushort) 87 || WorldGen.oceanDepths(index143, index144) || !WorldGen.AddBuriedChest(index143, index144))
|
|
{
|
|
--num205;
|
|
--index142;
|
|
}
|
|
}
|
|
int num206 = 10000;
|
|
for (int index = 0; index < random2 && num206 > 0; ++index)
|
|
{
|
|
progress.Set((float) (index + random3) / (float) num204);
|
|
int i = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int j = WorldGen.genRand.Next(Main.UnderworldLayer, Main.maxTilesY - 50);
|
|
if (Main.wallDungeon[(int) Main.tile[i, j].wall] || !WorldGen.AddBuriedChest(i, j))
|
|
{
|
|
--num206;
|
|
--index;
|
|
}
|
|
}
|
|
int num207 = 10000;
|
|
for (int index = 0; index < random1 && num207 > 0; ++index)
|
|
{
|
|
progress.Set((float) (index + random3 + random2) / (float) num204);
|
|
int x = WorldGen.genRand.Next(80, Main.maxTilesX - 80);
|
|
int y = WorldGen.genRand.Next((int) (worldSurfaceHigh + 20.0), Main.maxTilesY - 230);
|
|
if (WorldGen.oceanDepths(x, y) || !biome.Place(new Point(x, y), structures))
|
|
{
|
|
--num207;
|
|
--index;
|
|
}
|
|
}
|
|
int num208 = 10000;
|
|
Microsoft.Xna.Framework.Rectangle desertHiveLocation = WorldGen.UndergroundDesertHiveLocation;
|
|
if ((double) desertHiveLocation.Y < Main.worldSurface + 26.0)
|
|
{
|
|
int num209 = (int) Main.worldSurface + 26 - desertHiveLocation.Y;
|
|
desertHiveLocation.Y += num209;
|
|
desertHiveLocation.Height -= num209;
|
|
}
|
|
for (int index = 0; index < random4 && num208 > 0; ++index)
|
|
{
|
|
progress.Set((float) (index + random3 + random2 + random1) / (float) num204);
|
|
if (!biome.Place(WorldGen.RandomRectanglePoint(desertHiveLocation), structures))
|
|
{
|
|
--num208;
|
|
--index;
|
|
}
|
|
}
|
|
Main.tileSolid[226] = false;
|
|
Main.tileSolid[162] = false;
|
|
Main.tileSolid[225] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Surface Chests", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[31].Value;
|
|
for (int index145 = 0; index145 < (int) ((double) Main.maxTilesX * 0.005); ++index145)
|
|
{
|
|
float num210 = (float) index145 / ((float) Main.maxTilesX * 0.005f);
|
|
progress.Set(num210);
|
|
bool flag21 = false;
|
|
int num211 = 0;
|
|
while (!flag21)
|
|
{
|
|
int index146 = WorldGen.genRand.Next(300, Main.maxTilesX - 300);
|
|
int index147;
|
|
for (index147 = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) Main.worldSurface); WorldGen.oceanDepths(index146, index147); index147 = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) Main.worldSurface))
|
|
index146 = WorldGen.genRand.Next(300, Main.maxTilesX - 300);
|
|
bool flag22 = false;
|
|
if (!Main.tile[index146, index147].active())
|
|
{
|
|
if (Main.tile[index146, index147].wall == (ushort) 2 || Main.tile[index146, index147].wall == (ushort) 59 || Main.tile[index146, index147].wall == (ushort) 244)
|
|
flag22 = true;
|
|
}
|
|
else
|
|
{
|
|
int num212 = 50;
|
|
int num213 = index146;
|
|
int num214 = index147;
|
|
int maxValue = 1;
|
|
for (int index148 = num213 - num212; index148 <= num213 + num212; index148 += 2)
|
|
{
|
|
for (int index149 = num214 - num212; index149 <= num214 + num212; index149 += 2)
|
|
{
|
|
if ((double) index149 < Main.worldSurface && !Main.tile[index148, index149].active() && Main.tile[index148, index149].wall == (ushort) 244 && WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
++maxValue;
|
|
flag22 = true;
|
|
index146 = index148;
|
|
index147 = index149;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag22 && WorldGen.AddBuriedChest(index146, index147, notNearOtherChests: true))
|
|
{
|
|
flag21 = true;
|
|
}
|
|
else
|
|
{
|
|
++num211;
|
|
if (num211 >= 2000)
|
|
flag21 = true;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Jungle Chests Placement", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[32].Value;
|
|
for (int index150 = 0; index150 < WorldGen.numJChests; ++index150)
|
|
{
|
|
float num215 = (float) (index150 / WorldGen.numJChests);
|
|
progress.Set(num215);
|
|
int nextJungleChestItem = WorldGen.GetNextJungleChestItem();
|
|
if (!WorldGen.AddBuriedChest(WorldGen.JChestX[index150] + WorldGen.genRand.Next(2), WorldGen.JChestY[index150], nextJungleChestItem, Style: 10))
|
|
{
|
|
for (int i = WorldGen.JChestX[index150] - 1; i <= WorldGen.JChestX[index150] + 1; ++i)
|
|
{
|
|
for (int j = WorldGen.JChestY[index150]; j <= WorldGen.JChestY[index150] + 2; ++j)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
for (int index151 = WorldGen.JChestX[index150] - 1; index151 <= WorldGen.JChestX[index150] + 1; ++index151)
|
|
{
|
|
for (int index152 = WorldGen.JChestY[index150]; index152 <= WorldGen.JChestY[index150] + 3; ++index152)
|
|
{
|
|
if (index152 < Main.maxTilesY)
|
|
{
|
|
Main.tile[index151, index152].slope((byte) 0);
|
|
Main.tile[index151, index152].halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.AddBuriedChest(WorldGen.JChestX[index150], WorldGen.JChestY[index150], nextJungleChestItem, Style: 10);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Water Chests", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[33].Value;
|
|
for (int index = 0; index < WorldGen.numOceanCaveTreasure; ++index)
|
|
{
|
|
int contain = (int) WorldGen.genRand.NextFromList<short>((short) 863, (short) 186, (short) 277, (short) 187, (short) 4404, (short) 4425);
|
|
bool flag = false;
|
|
float num216 = 2f;
|
|
while (!flag && (double) num216 < 50.0)
|
|
{
|
|
num216 += 0.1f;
|
|
int num217 = WorldGen.genRand.Next(WorldGen.oceanCaveTreasure[index].X - (int) num216, WorldGen.oceanCaveTreasure[index].X + (int) num216 + 1);
|
|
int j = WorldGen.genRand.Next(WorldGen.oceanCaveTreasure[index].Y - (int) num216 / 2, WorldGen.oceanCaveTreasure[index].Y + (int) num216 / 2 + 1);
|
|
int i = num217 >= Main.maxTilesX ? (int) ((double) num217 + (double) num216 / 2.0) : (int) ((double) num217 - (double) num216 / 2.0);
|
|
if (Main.tile[i, j].liquid > (byte) 250 && (Main.tile[i, j].liquidType() == (byte) 0 || WorldGen.notTheBees))
|
|
flag = WorldGen.AddBuriedChest(i, j, contain, Style: 17, trySlope: true);
|
|
}
|
|
}
|
|
int num218 = 0;
|
|
for (int index = 0; (double) index < 9.0 * (double) dub2; ++index)
|
|
{
|
|
float num219 = (float) index / (9f * dub2);
|
|
progress.Set(num219);
|
|
++num218;
|
|
int contain;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
contain = 4425;
|
|
else if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
contain = 863;
|
|
}
|
|
else
|
|
{
|
|
switch (num218)
|
|
{
|
|
case 1:
|
|
contain = 186;
|
|
break;
|
|
case 2:
|
|
contain = 4404;
|
|
break;
|
|
case 3:
|
|
contain = 277;
|
|
break;
|
|
default:
|
|
contain = 187;
|
|
num218 = 0;
|
|
break;
|
|
}
|
|
}
|
|
bool flag23 = false;
|
|
int num220 = 0;
|
|
while (!flag23)
|
|
{
|
|
int i = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next(1, Main.UnderworldLayer); Main.tile[i, j].liquid < (byte) 250 || Main.tile[i, j].liquidType() != (byte) 0 && !WorldGen.notTheBees; j = WorldGen.genRand.Next(50, Main.UnderworldLayer))
|
|
i = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
flag23 = WorldGen.AddBuriedChest(i, j, contain, Style: 17, trySlope: (i < WorldGen.beachDistance || i > Main.maxTilesX - WorldGen.beachDistance));
|
|
++num220;
|
|
if (num220 > 10000)
|
|
break;
|
|
}
|
|
bool flag24 = false;
|
|
int num221 = 0;
|
|
while (!flag24)
|
|
{
|
|
int i = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next((int) Main.worldSurface, Main.UnderworldLayer); Main.tile[i, j].liquid < (byte) 250 || Main.tile[i, j].liquidType() != (byte) 0 && !WorldGen.notTheBees; j = WorldGen.genRand.Next((int) Main.worldSurface, Main.UnderworldLayer))
|
|
i = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
flag24 = WorldGen.AddBuriedChest(i, j, contain, Style: 17, trySlope: (i < WorldGen.beachDistance || i > Main.maxTilesX - WorldGen.beachDistance));
|
|
++num221;
|
|
if (num221 > 10000)
|
|
break;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Spider Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[64].Value;
|
|
WorldGen.maxTileCount = 3500;
|
|
int num222 = Main.maxTilesX / 2;
|
|
int num223 = (int) ((double) Main.maxTilesX * 0.005);
|
|
if (WorldGen.getGoodWorldGen)
|
|
num223 *= 3;
|
|
for (int index = 0; index < num223; ++index)
|
|
{
|
|
float num224 = (float) index / ((float) Main.maxTilesX * 0.005f);
|
|
progress.Set(num224);
|
|
int num225 = 0;
|
|
int x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, Main.maxTilesY - 230);
|
|
int num226 = WorldGen.countTiles(x, y, lavaOk: true);
|
|
while ((num226 >= 3500 || num226 < 500) && num225 < num222)
|
|
{
|
|
++num225;
|
|
x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
y = WorldGen.genRand.Next((int) Main.rockLayer + 30, Main.maxTilesY - 230);
|
|
num226 = WorldGen.countTiles(x, y, lavaOk: true);
|
|
if (WorldGen.shroomCount > 1)
|
|
num226 = 0;
|
|
}
|
|
if (num225 < num222)
|
|
WorldGen.Spread.Spider(x, y);
|
|
}
|
|
Main.tileSolid[162] = true;
|
|
}));
|
|
WorldGen.AddGenerationPass("Gem Caves", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
progress.Message = Lang.gen[64].Value;
|
|
WorldGen.maxTileCount = 300;
|
|
for (int index153 = 0; index153 < (int) ((double) Main.maxTilesX * 0.003); ++index153)
|
|
{
|
|
float num227 = (float) index153 / ((float) Main.maxTilesX * (3f / 1000f));
|
|
progress.Set(num227);
|
|
int num228 = 0;
|
|
int x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int y = WorldGen.genRand.Next((int) Main.rockLayer + 30, Main.maxTilesY - 230);
|
|
for (int index154 = WorldGen.countTiles(x, y); (index154 >= 300 || index154 < 50 || WorldGen.lavaCount > 0 || WorldGen.iceCount > 0 || WorldGen.rockCount == 0) && num228 < 1000; index154 = WorldGen.countTiles(x, y))
|
|
{
|
|
++num228;
|
|
x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
y = WorldGen.genRand.Next((int) Main.rockLayer + 30, Main.maxTilesY - 230);
|
|
}
|
|
if (num228 < 1000)
|
|
WorldGen.gemCave(x, y);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Moss", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
progress.Message = Lang.gen[61].Value;
|
|
WorldGen.randMoss();
|
|
int num229 = Main.maxTilesX / 2100;
|
|
int num230 = 0;
|
|
int num231 = 0;
|
|
while (num231 < num229)
|
|
{
|
|
int i = WorldGen.genRand.Next(100, Main.maxTilesX - 100);
|
|
if (WorldGen.getGoodWorldGen)
|
|
{
|
|
while ((double) i > (double) Main.maxTilesX * 0.42 && (double) i < (double) Main.maxTilesX * 0.48)
|
|
i = WorldGen.genRand.Next(100, Main.maxTilesX - 100);
|
|
}
|
|
else if (!WorldGen.drunkWorldGen)
|
|
{
|
|
while ((double) i > (double) Main.maxTilesX * 0.38 && (double) i < (double) Main.maxTilesX * 0.62)
|
|
i = WorldGen.genRand.Next(100, Main.maxTilesX - 100);
|
|
}
|
|
int j = WorldGen.genRand.Next((int) Main.rockLayer + 40, WorldGen.lavaLine - 40);
|
|
bool flag = false;
|
|
int num232 = 50;
|
|
label_19:
|
|
for (int index155 = i - num232; index155 <= i + num232; ++index155)
|
|
{
|
|
for (int index156 = j - num232; index156 <= j + num232; ++index156)
|
|
{
|
|
if (Main.tile[index155, index156].active())
|
|
{
|
|
int type = (int) Main.tile[index155, index156].type;
|
|
switch (type)
|
|
{
|
|
case 60:
|
|
case 70:
|
|
case 147:
|
|
case 161:
|
|
case 367:
|
|
case 368:
|
|
case 396:
|
|
case 397:
|
|
flag = true;
|
|
index155 = i + num232 + 1;
|
|
goto label_19;
|
|
default:
|
|
if (!Main.tileDungeon[type])
|
|
continue;
|
|
goto case 60;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
++num230;
|
|
if (num230 > Main.maxTilesX)
|
|
++num231;
|
|
}
|
|
else
|
|
{
|
|
num230 = 0;
|
|
++num231;
|
|
WorldGen.neonMossBiome(i, j, WorldGen.lavaLine);
|
|
}
|
|
}
|
|
WorldGen.maxTileCount = 2500;
|
|
for (int index157 = 0; index157 < (int) ((double) Main.maxTilesX * 0.01); ++index157)
|
|
{
|
|
float num233 = (float) index157 / ((float) Main.maxTilesX * 0.01f);
|
|
progress.Set(num233);
|
|
int num234 = 0;
|
|
int x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, WorldGen.waterLine);
|
|
for (int index158 = WorldGen.countTiles(x, y); (index158 >= 2500 || index158 < 10 || WorldGen.lavaCount > 0 || WorldGen.iceCount > 0 || WorldGen.rockCount == 0 || WorldGen.shroomCount > 0) && num234 < 1000; index158 = WorldGen.countTiles(x, y))
|
|
{
|
|
++num234;
|
|
x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
y = WorldGen.genRand.Next((int) Main.rockLayer + 30, Main.maxTilesY - 230);
|
|
}
|
|
if (num234 < 1000)
|
|
{
|
|
WorldGen.setMoss(x, y);
|
|
WorldGen.Spread.Moss(x, y);
|
|
}
|
|
}
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
int x = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, WorldGen.lavaLine);
|
|
if (Main.tile[x, y].type == (ushort) 1)
|
|
{
|
|
WorldGen.setMoss(x, y);
|
|
Main.tile[x, y].type = WorldGen.mossTile;
|
|
}
|
|
}
|
|
float num235 = (float) Main.maxTilesX * 0.05f;
|
|
while ((double) num235 > 0.0)
|
|
{
|
|
int x = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, WorldGen.lavaLine);
|
|
if (Main.tile[x, y].type == (ushort) 1 && (!Main.tile[x - 1, y].active() || !Main.tile[x + 1, y].active() || !Main.tile[x, y - 1].active() || !Main.tile[x, y + 1].active()))
|
|
{
|
|
WorldGen.setMoss(x, y);
|
|
Main.tile[x, y].type = WorldGen.mossTile;
|
|
--num235;
|
|
}
|
|
}
|
|
float num236 = (float) Main.maxTilesX * 0.065f;
|
|
while ((double) num236 > 0.0)
|
|
{
|
|
int index159 = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int index160 = WorldGen.genRand.Next(WorldGen.waterLine, Main.UnderworldLayer);
|
|
if (Main.tile[index159, index160].type == (ushort) 1 && (!Main.tile[index159 - 1, index160].active() || !Main.tile[index159 + 1, index160].active() || !Main.tile[index159, index160 - 1].active() || !Main.tile[index159, index160 + 1].active()))
|
|
{
|
|
int num237 = 25;
|
|
int num238 = 0;
|
|
for (int index161 = index159 - num237; index161 < index159 + num237; ++index161)
|
|
{
|
|
for (int index162 = index160 - num237; index162 < index160 + num237; ++index162)
|
|
{
|
|
if (Main.tile[index161, index162].liquid > (byte) 0 && Main.tile[index161, index162].lava())
|
|
++num238;
|
|
}
|
|
}
|
|
if (num238 > 20)
|
|
{
|
|
Main.tile[index159, index160].type = (ushort) 381;
|
|
--num236;
|
|
}
|
|
else
|
|
num236 -= 1f / 500f;
|
|
}
|
|
}
|
|
for (int index163 = 0; index163 < Main.maxTilesX; ++index163)
|
|
{
|
|
for (int index164 = 0; index164 < Main.maxTilesY; ++index164)
|
|
{
|
|
if (Main.tile[index163, index164].active() && Main.tileMoss[(int) Main.tile[index163, index164].type])
|
|
{
|
|
for (int index165 = 0; index165 < 4; ++index165)
|
|
{
|
|
int i = index163;
|
|
int j = index164;
|
|
if (index165 == 0)
|
|
--i;
|
|
if (index165 == 1)
|
|
++i;
|
|
if (index165 == 2)
|
|
--j;
|
|
if (index165 == 3)
|
|
++j;
|
|
try
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i, j, 1, (int) Main.tile[index163, index164].type);
|
|
}
|
|
catch
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i, j, 1, (int) Main.tile[index163, index164].type, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Temple", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
Main.tileSolid[162] = false;
|
|
Main.tileSolid[226] = true;
|
|
WorldGen.templePart2();
|
|
Main.tileSolid[232] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Cave Walls", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[63].Value;
|
|
WorldGen.maxTileCount = 1500;
|
|
for (int index166 = 0; index166 < (int) ((double) Main.maxTilesX * 0.04); ++index166)
|
|
{
|
|
float num239 = (float) index166 / ((float) Main.maxTilesX * 0.04f);
|
|
progress.Set(num239 * 0.66f);
|
|
int num240 = 0;
|
|
int x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, Main.maxTilesY - 220);
|
|
for (int index167 = WorldGen.countTiles(x, y, lavaOk: true); (index167 >= WorldGen.maxTileCount || index167 < 10) && num240 < 500; index167 = WorldGen.countTiles(x, y, lavaOk: true))
|
|
{
|
|
++num240;
|
|
x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
y = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, Main.maxTilesY - 220);
|
|
}
|
|
if (num240 < 500)
|
|
{
|
|
int wallType = WorldGen.genRand.Next(2);
|
|
if ((double) WorldGen.shroomCount > (double) WorldGen.rockCount * 0.75)
|
|
wallType = 80;
|
|
else if (WorldGen.iceCount > 0)
|
|
{
|
|
switch (wallType)
|
|
{
|
|
case 0:
|
|
wallType = 40;
|
|
break;
|
|
case 1:
|
|
wallType = 71;
|
|
break;
|
|
}
|
|
}
|
|
else if (WorldGen.lavaCount > 0)
|
|
{
|
|
wallType = 79;
|
|
}
|
|
else
|
|
{
|
|
wallType = WorldGen.genRand.Next(4);
|
|
switch (wallType)
|
|
{
|
|
case 0:
|
|
wallType = 59;
|
|
break;
|
|
case 1:
|
|
wallType = 61;
|
|
break;
|
|
case 2:
|
|
wallType = 170;
|
|
break;
|
|
case 3:
|
|
wallType = 171;
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.Spread.Wall(x, y, wallType);
|
|
}
|
|
}
|
|
WorldGen.maxTileCount = 1500;
|
|
float num241 = (float) Main.maxTilesX * 0.02f;
|
|
for (int index = 0; (double) index < (double) num241; ++index)
|
|
{
|
|
float num242 = (float) index / ((float) Main.maxTilesX * 0.02f);
|
|
progress.Set((float) ((double) num242 * 0.330000013113022 + 0.660000026226044));
|
|
int num243 = 0;
|
|
int x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int y = WorldGen.genRand.Next((int) Main.worldSurface, WorldGen.lavaLine);
|
|
int num244 = 0;
|
|
if (Main.tile[x, y].wall == (ushort) 64)
|
|
num244 = WorldGen.countTiles(x, y, true);
|
|
while ((num244 >= WorldGen.maxTileCount || num244 < 10) && num243 < 1000)
|
|
{
|
|
++num243;
|
|
x = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
y = WorldGen.genRand.Next((int) Main.worldSurface, WorldGen.lavaLine);
|
|
if (!Main.wallHouse[(int) Main.tile[x, y].wall] && Main.tile[x, y].wall != (ushort) 244)
|
|
num244 = Main.tile[x, y].wall != (ushort) 64 ? 0 : WorldGen.countTiles(x, y, true);
|
|
}
|
|
if (num243 < 1000)
|
|
WorldGen.Spread.Wall2(x, y, 15);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Jungle Trees", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[83].Value;
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
progress.Set((float) i / (float) Main.maxTilesX);
|
|
for (int y = (int) Main.worldSurface - 1; y < Main.maxTilesY - 350; ++y)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0 || WorldGen.drunkWorldGen)
|
|
WorldGen.GrowUndergroundTree(i, y);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Floating Island Houses", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 0; index < WorldGen.numIslandHouses; ++index)
|
|
{
|
|
if (!WorldGen.skyLake[index])
|
|
WorldGen.IslandHouse(WorldGen.floatingIslandHouseX[index], WorldGen.floatingIslandHouseY[index], WorldGen.floatingIslandStyle[index]);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Quick Cleanup", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
if (WorldGen.notTheBees)
|
|
WorldGen.NotTheBees();
|
|
Main.tileSolid[137] = false;
|
|
Main.tileSolid[130] = false;
|
|
for (int index168 = 20; index168 < Main.maxTilesX - 20; ++index168)
|
|
{
|
|
for (int y = 20; y < Main.maxTilesY - 20; ++y)
|
|
{
|
|
if ((double) y < Main.worldSurface && WorldGen.oceanDepths(index168, y) && Main.tile[index168, y].type == (ushort) 53 && Main.tile[index168, y].active())
|
|
{
|
|
if (Main.tile[index168, y].bottomSlope())
|
|
Main.tile[index168, y].slope((byte) 0);
|
|
for (int index169 = y + 1; index169 < y + WorldGen.genRand.Next(4, 7) && (!Main.tile[index168, index169].active() || Main.tile[index168, index169].type != (ushort) 397 && Main.tile[index168, index169].type != (ushort) 53) && (!Main.tile[index168, index169 + 1].active() || Main.tile[index168, index169 + 1].type != (ushort) 397 && Main.tile[index168, index169 + 1].type != (ushort) 53 && Main.tile[index168, index169 + 1].type != (ushort) 495) && (!Main.tile[index168, index169 + 2].active() || Main.tile[index168, index169 + 2].type != (ushort) 397 && Main.tile[index168, index169 + 2].type != (ushort) 53 && Main.tile[index168, index169 + 2].type != (ushort) 495); ++index169)
|
|
{
|
|
Main.tile[index168, index169].type = (ushort) 0;
|
|
Main.tile[index168, index169].active(true);
|
|
Main.tile[index168, index169].halfBrick(false);
|
|
Main.tile[index168, index169].slope((byte) 0);
|
|
}
|
|
}
|
|
if (Main.tile[index168, y].wall == (ushort) 187 || Main.tile[index168, y].wall == (ushort) 216)
|
|
{
|
|
if (Main.tile[index168, y].type == (ushort) 59 || Main.tile[index168, y].type == (ushort) 123 || Main.tile[index168, y].type == (ushort) 224)
|
|
Main.tile[index168, y].type = (ushort) 397;
|
|
if (Main.tile[index168, y].type == (ushort) 368 || Main.tile[index168, y].type == (ushort) 367)
|
|
Main.tile[index168, y].type = (ushort) 397;
|
|
if ((double) y <= Main.rockLayer)
|
|
Main.tile[index168, y].liquid = (byte) 0;
|
|
else if (Main.tile[index168, y].liquid > (byte) 0)
|
|
{
|
|
Main.tile[index168, y].liquid = byte.MaxValue;
|
|
Main.tile[index168, y].lava(true);
|
|
}
|
|
}
|
|
if ((double) y < Main.worldSurface && Main.tile[index168, y].active() && Main.tile[index168, y].type == (ushort) 53 && Main.tile[index168, y + 1].wall == (ushort) 0 && !WorldGen.SolidTile(index168, y + 1))
|
|
{
|
|
ushort num245 = 0;
|
|
int num246 = 3;
|
|
for (int index170 = index168 - num246; index170 <= index168 + num246; ++index170)
|
|
{
|
|
for (int index171 = y - num246; index171 <= y + num246; ++index171)
|
|
{
|
|
if (Main.tile[index170, index171].wall > (ushort) 0)
|
|
{
|
|
num245 = Main.tile[index170, index171].wall;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num245 > (ushort) 0)
|
|
{
|
|
Main.tile[index168, y + 1].wall = num245;
|
|
if (Main.tile[index168, y].wall == (ushort) 0)
|
|
Main.tile[index168, y].wall = num245;
|
|
}
|
|
}
|
|
if (Main.tile[index168, y].type != (ushort) 19 && TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[index168, y].type])
|
|
{
|
|
if (Main.tile[index168, y].topSlope() || Main.tile[index168, y].halfBrick())
|
|
{
|
|
if (Main.tile[index168, y].type != (ushort) 225 || !Main.tile[index168, y].halfBrick())
|
|
{
|
|
if (!WorldGen.SolidTile(index168, y + 1))
|
|
Main.tile[index168, y].active(false);
|
|
if (Main.tile[index168 + 1, y].type == (ushort) 137 || Main.tile[index168 - 1, y].type == (ushort) 137)
|
|
Main.tile[index168, y].active(false);
|
|
}
|
|
}
|
|
else if (Main.tile[index168, y].bottomSlope())
|
|
{
|
|
if (!WorldGen.SolidTile(index168, y - 1))
|
|
Main.tile[index168, y].active(false);
|
|
if (Main.tile[index168 + 1, y].type == (ushort) 137 || Main.tile[index168 - 1, y].type == (ushort) 137)
|
|
Main.tile[index168, y].active(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Pots", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
Main.tileSolid[137] = true;
|
|
Main.tileSolid[130] = true;
|
|
progress.Message = Lang.gen[35].Value;
|
|
for (int index = 0; index < (int) ((double) (Main.maxTilesX * Main.maxTilesY) * 0.0008); ++index)
|
|
{
|
|
float num247 = (float) index / ((float) (Main.maxTilesX * Main.maxTilesY) * 0.0008f);
|
|
progress.Set(num247);
|
|
bool flag25 = false;
|
|
int num248 = 0;
|
|
while (!flag25)
|
|
{
|
|
int num249 = WorldGen.genRand.Next((int) worldSurfaceHigh, Main.maxTilesY - 10);
|
|
if ((double) num247 > 0.93)
|
|
num249 = Main.maxTilesY - 150;
|
|
else if ((double) num247 > 0.75)
|
|
num249 = (int) WorldGen.worldSurfaceLow;
|
|
int x = WorldGen.genRand.Next(1, Main.maxTilesX);
|
|
bool flag26 = false;
|
|
for (int y = num249; y < Main.maxTilesY; ++y)
|
|
{
|
|
if (!flag26)
|
|
{
|
|
if (Main.tile[x, y].active() && Main.tileSolid[(int) Main.tile[x, y].type] && !Main.tile[x, y - 1].lava())
|
|
flag26 = true;
|
|
}
|
|
else if ((double) y >= Main.worldSurface || Main.tile[x, y].wall != (ushort) 0)
|
|
{
|
|
int style = WorldGen.genRand.Next(0, 4);
|
|
int num250 = 0;
|
|
int num251 = 0;
|
|
if (y < Main.maxTilesY - 5)
|
|
{
|
|
num250 = (int) Main.tile[x, y + 1].type;
|
|
num251 = (int) Main.tile[x, y].wall;
|
|
}
|
|
if (num250 == 147 || num250 == 161 || num250 == 162)
|
|
style = WorldGen.genRand.Next(4, 7);
|
|
if (num250 == 60)
|
|
style = WorldGen.genRand.Next(7, 10);
|
|
if (Main.wallDungeon[(int) Main.tile[x, y].wall])
|
|
style = WorldGen.genRand.Next(10, 13);
|
|
if (num250 == 41 || num250 == 43 || num250 == 44 || num250 == 481 || num250 == 482 || num250 == 483)
|
|
style = WorldGen.genRand.Next(10, 13);
|
|
if (num250 == 22 || num250 == 23 || num250 == 25)
|
|
style = WorldGen.genRand.Next(16, 19);
|
|
if (num250 == 199 || num250 == 203 || num250 == 204 || num250 == 200)
|
|
style = WorldGen.genRand.Next(22, 25);
|
|
if (num250 == 367)
|
|
style = WorldGen.genRand.Next(31, 34);
|
|
if (num250 == 226)
|
|
style = WorldGen.genRand.Next(28, 31);
|
|
if (num251 == 187 || num251 == 216)
|
|
style = WorldGen.genRand.Next(34, 37);
|
|
if (y > Main.UnderworldLayer)
|
|
style = WorldGen.genRand.Next(13, 16);
|
|
if (!WorldGen.oceanDepths(x, y) && WorldGen.PlacePot(x, y, style: style))
|
|
{
|
|
flag25 = true;
|
|
break;
|
|
}
|
|
++num248;
|
|
if (num248 >= 10000)
|
|
{
|
|
flag25 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Hellforge", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[36].Value;
|
|
for (int index172 = 0; index172 < Main.maxTilesX / 200; ++index172)
|
|
{
|
|
float num252 = (float) (index172 / (Main.maxTilesX / 200));
|
|
progress.Set(num252);
|
|
bool flag = false;
|
|
int num253 = 0;
|
|
while (!flag)
|
|
{
|
|
int i = WorldGen.genRand.Next(1, Main.maxTilesX);
|
|
int index173 = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 30);
|
|
try
|
|
{
|
|
if (Main.tile[i, index173].wall != (ushort) 13)
|
|
{
|
|
if (Main.tile[i, index173].wall != (ushort) 14)
|
|
continue;
|
|
}
|
|
while (!Main.tile[i, index173].active() && index173 < Main.maxTilesY - 20)
|
|
++index173;
|
|
int j = index173 - 1;
|
|
WorldGen.PlaceTile(i, j, 77);
|
|
if (Main.tile[i, j].type == (ushort) 77)
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
++num253;
|
|
if (num253 >= 10000)
|
|
flag = true;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Spreading Grass", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
progress.Message = Lang.gen[37].Value;
|
|
for (int index174 = 50; index174 < Main.maxTilesX - 50; ++index174)
|
|
{
|
|
for (int index175 = 50; (double) index175 <= Main.worldSurface; ++index175)
|
|
{
|
|
if (Main.tile[index174, index175].active())
|
|
{
|
|
int type = (int) Main.tile[index174, index175].type;
|
|
if (Main.tile[index174, index175].active() && type == 60)
|
|
{
|
|
for (int index176 = index174 - 1; index176 <= index174 + 1; ++index176)
|
|
{
|
|
for (int index177 = index175 - 1; index177 <= index175 + 1; ++index177)
|
|
{
|
|
if (Main.tile[index176, index177].active() && Main.tile[index176, index177].type == (ushort) 0)
|
|
Main.tile[index176, index177].type = Main.tile[index176, index177 - 1].active() ? (ushort) 59 : (ushort) 60;
|
|
}
|
|
}
|
|
}
|
|
else if (type == 1 || type == 40 || TileID.Sets.Ore[type])
|
|
{
|
|
int num254 = 3;
|
|
bool flag = false;
|
|
ushort num255 = 0;
|
|
for (int index178 = index174 - num254; index178 <= index174 + num254; ++index178)
|
|
{
|
|
for (int index179 = index175 - num254; index179 <= index175 + num254; ++index179)
|
|
{
|
|
if (Main.tile[index178, index179].active())
|
|
{
|
|
if (Main.tile[index178, index179].type == (ushort) 53 || num255 == (ushort) 53)
|
|
num255 = (ushort) 53;
|
|
else if (Main.tile[index178, index179].type == (ushort) 59 || Main.tile[index178, index179].type == (ushort) 60 || Main.tile[index178, index179].type == (ushort) 147 || Main.tile[index178, index179].type == (ushort) 161 || Main.tile[index178, index179].type == (ushort) 199 || Main.tile[index178, index179].type == (ushort) 23)
|
|
num255 = Main.tile[index178, index179].type;
|
|
}
|
|
else if (index179 < index175 && Main.tile[index178, index179].wall == (ushort) 0)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
switch (num255)
|
|
{
|
|
case 23:
|
|
case 199:
|
|
if (Main.tile[index174, index175 - 1].active())
|
|
{
|
|
num255 = (ushort) 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 59:
|
|
case 60:
|
|
if (index174 >= jungleMinX && index174 <= jungleMaxX)
|
|
{
|
|
num255 = Main.tile[index174, index175 - 1].active() ? (ushort) 59 : (ushort) 60;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
Main.tile[index174, index175].type = num255;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index = 10; index < Main.maxTilesX - 10; ++index)
|
|
{
|
|
i2 = index;
|
|
bool flag = true;
|
|
for (int j = 0; (double) j < Main.worldSurface - 1.0; ++j)
|
|
{
|
|
if (Main.tile[i2, j].active())
|
|
{
|
|
if (flag)
|
|
{
|
|
if (Main.tile[i2, j].type == (ushort) 0)
|
|
{
|
|
try
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i2, j);
|
|
}
|
|
catch
|
|
{
|
|
WorldGen.grassSpread = 0;
|
|
WorldGen.SpreadGrass(i2, j, repeat: false);
|
|
}
|
|
}
|
|
}
|
|
if ((double) j <= worldSurfaceHigh)
|
|
flag = false;
|
|
else
|
|
break;
|
|
}
|
|
else if (Main.tile[i2, j].wall == (ushort) 0)
|
|
flag = true;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Surface Ore and Stone", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
int num256 = WorldGen.genRand.Next(Main.maxTilesX / 4200 * 5, Main.maxTilesX / 4200 * 10);
|
|
for (int index180 = 0; index180 < num256; ++index180)
|
|
{
|
|
int num257 = Main.maxTilesX / 420;
|
|
while (num257 > 0)
|
|
{
|
|
--num257;
|
|
int X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
while ((double) X >= (double) Main.maxTilesX * 0.48 && (double) X <= (double) Main.maxTilesX * 0.52)
|
|
X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
int Y = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurface);
|
|
bool flag = false;
|
|
for (int index181 = 0; index181 < WorldGen.numOrePatch; ++index181)
|
|
{
|
|
if (Math.Abs(X - WorldGen.orePatchX[index181]) < 200)
|
|
flag = true;
|
|
}
|
|
if (!flag && WorldGen.OrePatch(X, Y))
|
|
{
|
|
if (WorldGen.numOrePatch < WorldGen.maxOrePatch - 1)
|
|
{
|
|
WorldGen.orePatchX[WorldGen.numOrePatch] = X;
|
|
++WorldGen.numOrePatch;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
int num258 = WorldGen.genRand.Next(1, Main.maxTilesX / 4200 * 7);
|
|
for (int index182 = 0; index182 < num258; ++index182)
|
|
{
|
|
int num259 = Main.maxTilesX / 420;
|
|
while (num259 > 0)
|
|
{
|
|
--num259;
|
|
int X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
while ((double) X >= (double) Main.maxTilesX * 0.47 && (double) X <= (double) Main.maxTilesX * 0.53)
|
|
X = WorldGen.genRand.Next(WorldGen.beachDistance, Main.maxTilesX - WorldGen.beachDistance);
|
|
int Y = WorldGen.genRand.Next((int) WorldGen.worldSurfaceLow, (int) worldSurface);
|
|
bool flag = false;
|
|
for (int index183 = 0; index183 < WorldGen.numOrePatch; ++index183)
|
|
{
|
|
if (Math.Abs(X - WorldGen.orePatchX[index183]) < 100)
|
|
flag = true;
|
|
}
|
|
if (!flag && WorldGen.StonePatch(X, Y))
|
|
break;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Place Fallen Log", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[85].Value;
|
|
int num260 = Main.maxTilesX / 2100 + WorldGen.genRand.Next(-1, 2);
|
|
for (int index184 = 0; index184 < num260; ++index184)
|
|
{
|
|
progress.Set((float) index184 / (float) num260);
|
|
int minValue = WorldGen.beachDistance + 20;
|
|
int num261 = 50000;
|
|
int num262 = 5000;
|
|
while (num261 > 0)
|
|
{
|
|
--num261;
|
|
int i = WorldGen.genRand.Next(minValue, Main.maxTilesX - minValue);
|
|
int index185 = WorldGen.genRand.Next(10, (int) Main.worldSurface);
|
|
bool flag27 = false;
|
|
if (num261 < num262)
|
|
flag27 = true;
|
|
if (num261 > num262 / 2)
|
|
{
|
|
while ((double) i > (double) Main.maxTilesX * 0.4 && (double) i < (double) Main.maxTilesX * 0.6)
|
|
i = WorldGen.genRand.Next(minValue, Main.maxTilesX - minValue);
|
|
}
|
|
if (!Main.tile[i, index185].active() && Main.tile[i, index185].wall == (ushort) 0)
|
|
{
|
|
while (!Main.tile[i, index185].active() && Main.tile[i, index185].wall == (ushort) 0 && (double) index185 <= Main.worldSurface)
|
|
++index185;
|
|
bool flag28 = true;
|
|
if ((double) index185 > Main.worldSurface - 10.0)
|
|
flag28 = false;
|
|
else if (!flag27)
|
|
{
|
|
int num263 = 50;
|
|
for (int index186 = i - num263; index186 < i + num263; ++index186)
|
|
{
|
|
if (index186 > 10 && index186 < Main.maxTilesX - 10)
|
|
{
|
|
for (int index187 = index185 - num263; index187 < index185 + num263; ++index187)
|
|
{
|
|
if (index187 > 10 && index187 < Main.maxTilesY - 10)
|
|
{
|
|
int type = (int) Main.tile[index186, index187].type;
|
|
switch (type)
|
|
{
|
|
case 53:
|
|
flag28 = false;
|
|
continue;
|
|
case 189:
|
|
flag28 = false;
|
|
continue;
|
|
default:
|
|
if (Main.tileDungeon[type])
|
|
{
|
|
flag28 = false;
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Crimson[type])
|
|
{
|
|
flag28 = false;
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Corrupt[type])
|
|
{
|
|
flag28 = false;
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag28)
|
|
{
|
|
int num264 = 10;
|
|
int num265 = 10;
|
|
for (int index188 = i - num264; index188 < i + num264; ++index188)
|
|
{
|
|
for (int index189 = index185 - num265; index189 < index185 - 1; ++index189)
|
|
{
|
|
if (Main.tile[index188, index189].active() && Main.tileSolid[(int) Main.tile[index188, index189].type])
|
|
flag28 = false;
|
|
if (Main.tile[index188, index189].wall != (ushort) 0)
|
|
flag28 = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag28 && (Main.tile[i, index185 - 1].liquid == (byte) 0 || num261 < num262 / 5) && (Main.tile[i, index185].type == (ushort) 2 || WorldGen.notTheBees && Main.tile[i, index185].type == (ushort) 60) && (Main.tile[i - 1, index185].type == (ushort) 2 || WorldGen.notTheBees && Main.tile[i - 1, index185].type == (ushort) 60) && (Main.tile[i + 1, index185].type == (ushort) 2 || WorldGen.notTheBees && Main.tile[i + 1, index185].type == (ushort) 60))
|
|
{
|
|
int j = index185 - 1;
|
|
WorldGen.PlaceTile(i, j, 488);
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].type == (ushort) 488)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
logX = i;
|
|
logY = j;
|
|
}
|
|
num261 = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Traps", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.notTheBees)
|
|
return;
|
|
WorldGen.placingTraps = true;
|
|
progress.Message = Lang.gen[34].Value;
|
|
float num266 = (float) Main.maxTilesX * 0.05f;
|
|
if (WorldGen.getGoodWorldGen)
|
|
num266 *= 1.5f;
|
|
for (int index190 = 0; (double) index190 < (double) num266; ++index190)
|
|
{
|
|
progress.Set((float) ((double) index190 / (double) num266 / 2.0));
|
|
for (int index191 = 0; index191 < 1150; ++index191)
|
|
{
|
|
int index192 = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
int index193;
|
|
for (index193 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 210); WorldGen.oceanDepths(index192, index193); index193 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 210))
|
|
index192 = WorldGen.genRand.Next(200, Main.maxTilesX - 200);
|
|
if (Main.tile[index192, index193].wall == (ushort) 0 && WorldGen.placeTrap(index192, index193))
|
|
break;
|
|
}
|
|
}
|
|
float num267 = (float) Main.maxTilesX * (3f / 1000f);
|
|
if (WorldGen.getGoodWorldGen)
|
|
num267 *= 1.5f;
|
|
for (int index194 = 0; (double) index194 < (double) num267; ++index194)
|
|
{
|
|
progress.Set((float) ((double) index194 / (double) num267 / 2.0 + 0.5));
|
|
for (int index195 = 0; index195 < 20000; ++index195)
|
|
{
|
|
int i = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.15), (int) ((double) Main.maxTilesX * 0.85));
|
|
int j = WorldGen.genRand.Next((int) Main.worldSurface + 20, Main.maxTilesY - 210);
|
|
if (Main.tile[i, j].wall == (ushort) 187 && WorldGen.PlaceSandTrap(i, j))
|
|
break;
|
|
}
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
for (int index196 = 0; index196 < 8; ++index196)
|
|
{
|
|
progress.Message = Lang.gen[34].Value;
|
|
float num268 = 100f;
|
|
for (int index197 = 0; (double) index197 < (double) num268; ++index197)
|
|
{
|
|
progress.Set((float) index197 / num268);
|
|
Thread.Sleep(10);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.placingTraps = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Piles", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[89].Value;
|
|
Main.tileSolid[229] = false;
|
|
Main.tileSolid[190] = false;
|
|
Main.tileSolid[196] = false;
|
|
Main.tileSolid[189] = false;
|
|
Main.tileSolid[202] = false;
|
|
Main.tileSolid[460] = false;
|
|
for (int index198 = 0; (double) index198 < (double) Main.maxTilesX * 0.06; ++index198)
|
|
{
|
|
int num269 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num269 > 0)
|
|
{
|
|
--num269;
|
|
int index199 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int index200;
|
|
for (index200 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 300); WorldGen.oceanDepths(index199, index200); index200 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 300))
|
|
index199 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
if (!Main.tile[index199, index200].active())
|
|
{
|
|
int Type = 186;
|
|
while (!Main.tile[index199, index200 + 1].active() && index200 < Main.maxTilesY - 5)
|
|
++index200;
|
|
int style = WorldGen.genRand.Next(22);
|
|
switch (style)
|
|
{
|
|
case 16:
|
|
case 17:
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
style = WorldGen.genRand.Next(22);
|
|
break;
|
|
}
|
|
if ((Main.tile[index199, index200 + 1].type == (ushort) 0 || Main.tile[index199, index200 + 1].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[index199, index200 + 1].type]) && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
style = WorldGen.genRand.Next(23, 29);
|
|
Type = 187;
|
|
}
|
|
if (index200 > Main.maxTilesY - 300 || Main.wallDungeon[(int) Main.tile[index199, index200].wall] || Main.tile[index199, index200 + 1].type == (ushort) 30 || Main.tile[index199, index200 + 1].type == (ushort) 19 || Main.tile[index199, index200 + 1].type == (ushort) 25 || Main.tile[index199, index200 + 1].type == (ushort) 203)
|
|
{
|
|
style = WorldGen.genRand.Next(7);
|
|
Type = 186;
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 147 || Main.tile[index199, index200 + 1].type == (ushort) 161 || Main.tile[index199, index200 + 1].type == (ushort) 162)
|
|
{
|
|
style = WorldGen.genRand.Next(26, 32);
|
|
Type = 186;
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 60)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(6);
|
|
}
|
|
if ((Main.tile[index199, index200 + 1].type == (ushort) 57 || Main.tile[index199, index200 + 1].type == (ushort) 58) && WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(6, 9);
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 226)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(18, 23);
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 70)
|
|
{
|
|
style = WorldGen.genRand.Next(32, 35);
|
|
Type = 186;
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 396 || Main.tile[index199, index200 + 1].type == (ushort) 397 || Main.tile[index199, index200 + 1].type == (ushort) 404)
|
|
{
|
|
style = WorldGen.genRand.Next(29, 35);
|
|
Type = 187;
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 368)
|
|
{
|
|
style = WorldGen.genRand.Next(35, 41);
|
|
Type = 187;
|
|
}
|
|
if (Main.tile[index199, index200 + 1].type == (ushort) 367)
|
|
{
|
|
style = WorldGen.genRand.Next(41, 47);
|
|
Type = 187;
|
|
}
|
|
if (Type == 186 && style >= 7 && style <= 15 && WorldGen.genRand.Next(75) == 0)
|
|
{
|
|
Type = 187;
|
|
style = 17;
|
|
}
|
|
if (Main.wallDungeon[(int) Main.tile[index199, index200].wall] && WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.PlaceTile(index199, index200, Type, true, style: style);
|
|
if (Main.tile[index199, index200].type == (ushort) 186 || Main.tile[index199, index200].type == (ushort) 187)
|
|
flag = true;
|
|
if (flag && Type == 186 && style <= 7)
|
|
{
|
|
int num270 = WorldGen.genRand.Next(1, 5);
|
|
for (int index201 = 0; index201 < num270; ++index201)
|
|
{
|
|
int i = index199 + WorldGen.genRand.Next(-10, 11);
|
|
int j = index200 - WorldGen.genRand.Next(5);
|
|
if (!Main.tile[i, j].active())
|
|
{
|
|
while (!Main.tile[i, j + 1].active() && j < Main.maxTilesY - 5)
|
|
++j;
|
|
int X = WorldGen.genRand.Next(12, 36);
|
|
WorldGen.PlaceSmallPile(i, j, X, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index202 = 0; (double) index202 < (double) Main.maxTilesX * 0.01; ++index202)
|
|
{
|
|
int num271 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num271 > 0)
|
|
{
|
|
--num271;
|
|
int i8 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int j7 = WorldGen.genRand.Next(Main.maxTilesY - 300, Main.maxTilesY - 10);
|
|
if (!Main.tile[i8, j7].active())
|
|
{
|
|
int Type = 186;
|
|
while (!Main.tile[i8, j7 + 1].active() && j7 < Main.maxTilesY - 5)
|
|
++j7;
|
|
int style = WorldGen.genRand.Next(22);
|
|
switch (style)
|
|
{
|
|
case 16:
|
|
case 17:
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
style = WorldGen.genRand.Next(22);
|
|
break;
|
|
}
|
|
if (j7 > Main.maxTilesY - 300 || Main.wallDungeon[(int) Main.tile[i8, j7].wall] || Main.tile[i8, j7 + 1].type == (ushort) 30 || Main.tile[i8, j7 + 1].type == (ushort) 19)
|
|
style = WorldGen.genRand.Next(7);
|
|
if ((Main.tile[i8, j7 + 1].type == (ushort) 57 || Main.tile[i8, j7 + 1].type == (ushort) 58) && WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(6, 9);
|
|
}
|
|
if (Main.tile[i8, j7 + 1].type == (ushort) 147 || Main.tile[i8, j7 + 1].type == (ushort) 161 || Main.tile[i8, j7 + 1].type == (ushort) 162)
|
|
style = WorldGen.genRand.Next(26, 32);
|
|
WorldGen.PlaceTile(i8, j7, Type, true, style: style);
|
|
if (Main.tile[i8, j7].type == (ushort) 186 || Main.tile[i8, j7].type == (ushort) 187)
|
|
flag = true;
|
|
if (flag && Type == 186 && style <= 7)
|
|
{
|
|
int num272 = WorldGen.genRand.Next(1, 5);
|
|
for (int index203 = 0; index203 < num272; ++index203)
|
|
{
|
|
int i9 = i8 + WorldGen.genRand.Next(-10, 11);
|
|
int j8 = j7 - WorldGen.genRand.Next(5);
|
|
if (!Main.tile[i9, j8].active())
|
|
{
|
|
while (!Main.tile[i9, j8 + 1].active() && j8 < Main.maxTilesY - 5)
|
|
++j8;
|
|
int X = WorldGen.genRand.Next(12, 36);
|
|
WorldGen.PlaceSmallPile(i9, j8, X, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index204 = 0; (double) index204 < (double) Main.maxTilesX * 0.003; ++index204)
|
|
{
|
|
int num273 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num273 > 0)
|
|
{
|
|
--num273;
|
|
int Type = 186;
|
|
int index205 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int index206;
|
|
for (index206 = WorldGen.genRand.Next(10, (int) Main.worldSurface); WorldGen.oceanDepths(index205, index206); index206 = WorldGen.genRand.Next(10, (int) Main.worldSurface))
|
|
index205 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
if (!Main.tile[index205, index206].active())
|
|
{
|
|
while (!Main.tile[index205, index206 + 1].active() && index206 < Main.maxTilesY - 5)
|
|
++index206;
|
|
int style = WorldGen.genRand.Next(7, 13);
|
|
if (index206 > Main.maxTilesY - 300 || Main.wallDungeon[(int) Main.tile[index205, index206].wall] || Main.tile[index205, index206 + 1].type == (ushort) 30 || Main.tile[index205, index206 + 1].type == (ushort) 19 || Main.tile[index205, index206 + 1].type == (ushort) 25 || Main.tile[index205, index206 + 1].type == (ushort) 203 || Main.tile[index205, index206 + 1].type == (ushort) 234 || Main.tile[index205, index206 + 1].type == (ushort) 112)
|
|
style = -1;
|
|
if (Main.tile[index205, index206 + 1].type == (ushort) 147 || Main.tile[index205, index206 + 1].type == (ushort) 161 || Main.tile[index205, index206 + 1].type == (ushort) 162)
|
|
style = WorldGen.genRand.Next(26, 32);
|
|
if (Main.tile[index205, index206 + 1].type == (ushort) 53)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(52, 55);
|
|
}
|
|
if (Main.tile[index205, index206 + 1].type == (ushort) 2 || Main.tile[index205 - 1, index206 + 1].type == (ushort) 2 || Main.tile[index205 + 1, index206 + 1].type == (ushort) 2)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(14, 17);
|
|
}
|
|
if (Main.tile[index205, index206 + 1].type == (ushort) 151 || Main.tile[index205, index206 + 1].type == (ushort) 274)
|
|
{
|
|
Type = 186;
|
|
style = WorldGen.genRand.Next(7);
|
|
}
|
|
if (style >= 0)
|
|
WorldGen.PlaceTile(index205, index206, Type, true, style: style);
|
|
if ((int) Main.tile[index205, index206].type == Type)
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
for (int index207 = 0; (double) index207 < (double) Main.maxTilesX * 0.0035; ++index207)
|
|
{
|
|
int num274 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num274 > 0)
|
|
{
|
|
--num274;
|
|
int i10 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int j9 = WorldGen.genRand.Next(10, (int) Main.worldSurface);
|
|
if (!Main.tile[i10, j9].active() && Main.tile[i10, j9].wall > (ushort) 0)
|
|
{
|
|
int Type = 186;
|
|
while (!Main.tile[i10, j9 + 1].active() && j9 < Main.maxTilesY - 5)
|
|
++j9;
|
|
int style = WorldGen.genRand.Next(7, 13);
|
|
if (j9 > Main.maxTilesY - 300 || Main.wallDungeon[(int) Main.tile[i10, j9].wall] || Main.tile[i10, j9 + 1].type == (ushort) 30 || Main.tile[i10, j9 + 1].type == (ushort) 19)
|
|
style = -1;
|
|
if (Main.tile[i10, j9 + 1].type == (ushort) 25)
|
|
style = WorldGen.genRand.Next(7);
|
|
if (Main.tile[i10, j9 + 1].type == (ushort) 147 || Main.tile[i10, j9 + 1].type == (ushort) 161 || Main.tile[i10, j9 + 1].type == (ushort) 162)
|
|
style = WorldGen.genRand.Next(26, 32);
|
|
if (Main.tile[i10, j9 + 1].type == (ushort) 2 || Main.tile[i10 - 1, j9 + 1].type == (ushort) 2 || Main.tile[i10 + 1, j9 + 1].type == (ushort) 2)
|
|
{
|
|
Type = 187;
|
|
style = WorldGen.genRand.Next(14, 17);
|
|
}
|
|
if (Main.tile[i10, j9 + 1].type == (ushort) 151 || Main.tile[i10, j9 + 1].type == (ushort) 274)
|
|
{
|
|
Type = 186;
|
|
style = WorldGen.genRand.Next(7);
|
|
}
|
|
if (style >= 0)
|
|
WorldGen.PlaceTile(i10, j9, Type, true, style: style);
|
|
if ((int) Main.tile[i10, j9].type == Type)
|
|
flag = true;
|
|
if (flag && style <= 7)
|
|
{
|
|
int num275 = WorldGen.genRand.Next(1, 5);
|
|
for (int index208 = 0; index208 < num275; ++index208)
|
|
{
|
|
int i11 = i10 + WorldGen.genRand.Next(-10, 11);
|
|
int j10 = j9 - WorldGen.genRand.Next(5);
|
|
if (!Main.tile[i11, j10].active())
|
|
{
|
|
while (!Main.tile[i11, j10 + 1].active() && j10 < Main.maxTilesY - 5)
|
|
++j10;
|
|
int X = WorldGen.genRand.Next(12, 36);
|
|
WorldGen.PlaceSmallPile(i11, j10, X, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index209 = 0; (double) index209 < (double) Main.maxTilesX * 0.6; ++index209)
|
|
{
|
|
int num276 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num276 > 0)
|
|
{
|
|
--num276;
|
|
int index210 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int index211 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 20);
|
|
if (Main.tile[index210, index211].wall == (ushort) 87 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
index210 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
index211 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 20);
|
|
}
|
|
for (; WorldGen.oceanDepths(index210, index211); index211 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 20))
|
|
index210 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
if (!Main.tile[index210, index211].active())
|
|
{
|
|
while (!Main.tile[index210, index211 + 1].active() && index211 < Main.maxTilesY - 5)
|
|
++index211;
|
|
int Y = WorldGen.genRand.Next(2);
|
|
int X1 = WorldGen.genRand.Next(36);
|
|
switch (X1)
|
|
{
|
|
case 28:
|
|
case 29:
|
|
case 30:
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
case 34:
|
|
case 35:
|
|
X1 = WorldGen.genRand.Next(36);
|
|
break;
|
|
}
|
|
if (Y == 1)
|
|
{
|
|
X1 = WorldGen.genRand.Next(25);
|
|
switch (X1)
|
|
{
|
|
case 16:
|
|
case 17:
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
case 23:
|
|
case 24:
|
|
X1 = WorldGen.genRand.Next(25);
|
|
break;
|
|
}
|
|
}
|
|
if (index211 > Main.maxTilesY - 300)
|
|
{
|
|
if (Y == 0)
|
|
X1 = WorldGen.genRand.Next(12, 28);
|
|
if (Y == 1)
|
|
X1 = WorldGen.genRand.Next(6, 16);
|
|
}
|
|
if (Main.wallDungeon[(int) Main.tile[index210, index211].wall] || Main.tile[index210, index211 + 1].type == (ushort) 30 || Main.tile[index210, index211 + 1].type == (ushort) 19 || Main.tile[index210, index211 + 1].type == (ushort) 25 || Main.tile[index210, index211 + 1].type == (ushort) 203 || Main.tile[index210, index211].wall == (ushort) 87)
|
|
{
|
|
if (Y == 0 && X1 < 12)
|
|
X1 += 12;
|
|
if (Y == 1 && X1 < 6)
|
|
X1 += 6;
|
|
if (Y == 1 && X1 >= 17)
|
|
X1 -= 10;
|
|
}
|
|
if (Main.tile[index210, index211 + 1].type == (ushort) 147 || Main.tile[index210, index211 + 1].type == (ushort) 161 || Main.tile[index210, index211 + 1].type == (ushort) 162)
|
|
{
|
|
if (Y == 0 && X1 < 12)
|
|
X1 += 36;
|
|
if (Y == 1 && X1 >= 20)
|
|
X1 += 6;
|
|
if (Y == 1 && X1 < 6)
|
|
X1 += 25;
|
|
}
|
|
if (Main.tile[index210, index211 + 1].type == (ushort) 151 || Main.tile[index210, index211 + 1].type == (ushort) 274)
|
|
{
|
|
if (Y == 0)
|
|
X1 = WorldGen.genRand.Next(12, 28);
|
|
if (Y == 1)
|
|
X1 = WorldGen.genRand.Next(12, 19);
|
|
}
|
|
if (Main.tile[index210, index211 + 1].type == (ushort) 368)
|
|
{
|
|
if (Y == 0)
|
|
X1 = WorldGen.genRand.Next(60, 66);
|
|
if (Y == 1)
|
|
X1 = WorldGen.genRand.Next(47, 53);
|
|
}
|
|
if (Main.tile[index210, index211 + 1].type == (ushort) 367)
|
|
{
|
|
if (Y == 0)
|
|
X1 = WorldGen.genRand.Next(66, 72);
|
|
if (Y == 1)
|
|
X1 = WorldGen.genRand.Next(53, 59);
|
|
}
|
|
flag = Main.wallDungeon[(int) Main.tile[index210, index211].wall] && WorldGen.genRand.Next(3) != 0 || WorldGen.PlaceSmallPile(index210, index211, X1, Y);
|
|
if (flag && Y == 1 && X1 >= 6 && X1 <= 15)
|
|
{
|
|
int num277 = WorldGen.genRand.Next(1, 5);
|
|
for (int index212 = 0; index212 < num277; ++index212)
|
|
{
|
|
int i = index210 + WorldGen.genRand.Next(-10, 11);
|
|
int j = index211 - WorldGen.genRand.Next(5);
|
|
if (!Main.tile[i, j].active())
|
|
{
|
|
while (!Main.tile[i, j + 1].active() && j < Main.maxTilesY - 5)
|
|
++j;
|
|
int X2 = WorldGen.genRand.Next(12, 36);
|
|
WorldGen.PlaceSmallPile(i, j, X2, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index213 = 0; (double) index213 < (double) Main.maxTilesX * 0.0199999995529652; ++index213)
|
|
{
|
|
int num278 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num278 > 0)
|
|
{
|
|
--num278;
|
|
int index214 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int index215;
|
|
for (index215 = WorldGen.genRand.Next(15, (int) Main.worldSurface); WorldGen.oceanDepths(index214, index215); index215 = WorldGen.genRand.Next(15, (int) Main.worldSurface))
|
|
index214 = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
if (!Main.tile[index214, index215].active())
|
|
{
|
|
while (!Main.tile[index214, index215 + 1].active() && index215 < Main.maxTilesY - 5)
|
|
++index215;
|
|
int Y = WorldGen.genRand.Next(2);
|
|
int X = WorldGen.genRand.Next(11);
|
|
if (Y == 1)
|
|
X = WorldGen.genRand.Next(5);
|
|
if (Main.tile[index214, index215 + 1].type == (ushort) 147 || Main.tile[index214, index215 + 1].type == (ushort) 161 || Main.tile[index214, index215 + 1].type == (ushort) 162)
|
|
{
|
|
if (Y == 0 && X < 12)
|
|
X += 36;
|
|
if (Y == 1 && X >= 20)
|
|
X += 6;
|
|
if (Y == 1 && X < 6)
|
|
X += 25;
|
|
}
|
|
if (Main.tile[index214, index215 + 1].type == (ushort) 2 && Y == 1)
|
|
X = WorldGen.genRand.Next(38, 41);
|
|
if (Main.tile[index214, index215 + 1].type == (ushort) 151 || Main.tile[index214, index215 + 1].type == (ushort) 274)
|
|
{
|
|
if (Y == 0)
|
|
X = WorldGen.genRand.Next(12, 28);
|
|
if (Y == 1)
|
|
X = WorldGen.genRand.Next(12, 19);
|
|
}
|
|
if (!Main.wallDungeon[(int) Main.tile[index214, index215].wall] && Main.tile[index214, index215 + 1].type != (ushort) 30 && Main.tile[index214, index215 + 1].type != (ushort) 19 && Main.tile[index214, index215 + 1].type != (ushort) 41 && Main.tile[index214, index215 + 1].type != (ushort) 43 && Main.tile[index214, index215 + 1].type != (ushort) 44 && Main.tile[index214, index215 + 1].type != (ushort) 481 && Main.tile[index214, index215 + 1].type != (ushort) 482 && Main.tile[index214, index215 + 1].type != (ushort) 483 && Main.tile[index214, index215 + 1].type != (ushort) 45 && Main.tile[index214, index215 + 1].type != (ushort) 46 && Main.tile[index214, index215 + 1].type != (ushort) 47 && Main.tile[index214, index215 + 1].type != (ushort) 175 && Main.tile[index214, index215 + 1].type != (ushort) 176 && Main.tile[index214, index215 + 1].type != (ushort) 177 && Main.tile[index214, index215 + 1].type != (ushort) 53 && Main.tile[index214, index215 + 1].type != (ushort) 25 && Main.tile[index214, index215 + 1].type != (ushort) 203)
|
|
flag = WorldGen.PlaceSmallPile(index214, index215, X, Y);
|
|
}
|
|
}
|
|
}
|
|
for (int index = 0; (double) index < (double) Main.maxTilesX * 0.150000005960464; ++index)
|
|
{
|
|
int num279 = Main.maxTilesX / 2;
|
|
bool flag = false;
|
|
while (!flag && num279 > 0)
|
|
{
|
|
--num279;
|
|
int i = WorldGen.genRand.Next(25, Main.maxTilesX - 25);
|
|
int j = WorldGen.genRand.Next(15, (int) Main.worldSurface);
|
|
if (!Main.tile[i, j].active() && (Main.tile[i, j].wall == (ushort) 2 || Main.tile[i, j].wall == (ushort) 40))
|
|
{
|
|
while (!Main.tile[i, j + 1].active() && j < Main.maxTilesY - 5)
|
|
++j;
|
|
int Y = WorldGen.genRand.Next(2);
|
|
int X = WorldGen.genRand.Next(11);
|
|
if (Y == 1)
|
|
X = WorldGen.genRand.Next(5);
|
|
if (Main.tile[i, j + 1].type == (ushort) 147 || Main.tile[i, j + 1].type == (ushort) 161 || Main.tile[i, j + 1].type == (ushort) 162)
|
|
{
|
|
if (Y == 0 && X < 12)
|
|
X += 36;
|
|
if (Y == 1 && X >= 20)
|
|
X += 6;
|
|
if (Y == 1 && X < 6)
|
|
X += 25;
|
|
}
|
|
if (Main.tile[i, j + 1].type == (ushort) 2 && Y == 1)
|
|
X = WorldGen.genRand.Next(38, 41);
|
|
if (Main.tile[i, j + 1].type == (ushort) 151 || Main.tile[i, j + 1].type == (ushort) 274)
|
|
{
|
|
if (Y == 0)
|
|
X = WorldGen.genRand.Next(12, 28);
|
|
if (Y == 1)
|
|
X = WorldGen.genRand.Next(12, 19);
|
|
}
|
|
if ((Main.tile[i, j].liquid != byte.MaxValue || Main.tile[i, j + 1].type != (ushort) 53 || Main.tile[i, j].wall != (ushort) 0) && !Main.wallDungeon[(int) Main.tile[i, j].wall] && Main.tile[i, j + 1].type != (ushort) 30 && Main.tile[i, j + 1].type != (ushort) 19 && Main.tile[i, j + 1].type != (ushort) 41 && Main.tile[i, j + 1].type != (ushort) 43 && Main.tile[i, j + 1].type != (ushort) 44 && Main.tile[i, j + 1].type != (ushort) 481 && Main.tile[i, j + 1].type != (ushort) 482 && Main.tile[i, j + 1].type != (ushort) 483 && Main.tile[i, j + 1].type != (ushort) 45 && Main.tile[i, j + 1].type != (ushort) 46 && Main.tile[i, j + 1].type != (ushort) 47 && Main.tile[i, j + 1].type != (ushort) 175 && Main.tile[i, j + 1].type != (ushort) 176 && Main.tile[i, j + 1].type != (ushort) 177 && Main.tile[i, j + 1].type != (ushort) 25 && Main.tile[i, j + 1].type != (ushort) 203)
|
|
flag = WorldGen.PlaceSmallPile(i, j, X, Y);
|
|
}
|
|
}
|
|
}
|
|
Main.tileSolid[190] = true;
|
|
Main.tileSolid[192] = true;
|
|
Main.tileSolid[196] = true;
|
|
Main.tileSolid[189] = true;
|
|
Main.tileSolid[202] = true;
|
|
Main.tileSolid[225] = true;
|
|
Main.tileSolid[460] = true;
|
|
}));
|
|
WorldGen.AddGenerationPass("Spawn Point", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
int num280 = 5;
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
int index216 = Main.maxTilesX / 2 + WorldGen.genRand.Next(-num280, num280 + 1);
|
|
for (int index217 = 0; index217 < Main.maxTilesY; ++index217)
|
|
{
|
|
if (Main.tile[index216, index217].active())
|
|
{
|
|
Main.spawnTileX = index216;
|
|
Main.spawnTileY = index217;
|
|
break;
|
|
}
|
|
}
|
|
flag = false;
|
|
++num280;
|
|
if ((double) Main.spawnTileY > Main.worldSurface)
|
|
flag = true;
|
|
if (Main.tile[Main.spawnTileX, Main.spawnTileY - 1].liquid > (byte) 0)
|
|
flag = true;
|
|
}
|
|
int num281 = 10;
|
|
while ((double) Main.spawnTileY > Main.worldSurface)
|
|
{
|
|
int index218 = WorldGen.genRand.Next(Main.maxTilesX / 2 - num281, Main.maxTilesX / 2 + num281);
|
|
for (int index219 = 0; index219 < Main.maxTilesY; ++index219)
|
|
{
|
|
if (Main.tile[index218, index219].active())
|
|
{
|
|
Main.spawnTileX = index218;
|
|
Main.spawnTileY = index219;
|
|
break;
|
|
}
|
|
}
|
|
++num281;
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Grass Wall", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.maxTileCount = 3500;
|
|
progress.Set(1f);
|
|
for (int index220 = 50; index220 < Main.maxTilesX - 50; ++index220)
|
|
{
|
|
for (int index221 = 0; (double) index221 < Main.worldSurface - 10.0; ++index221)
|
|
{
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
bool flag = false;
|
|
int x = -1;
|
|
int y = -1;
|
|
if (Main.tile[index220, index221].active() && Main.tile[index220, index221].type == (ushort) 2 && (Main.tile[index220, index221].wall == (ushort) 2 || Main.tile[index220, index221].wall == (ushort) 63))
|
|
{
|
|
for (int i = index220 - 1; i <= index220 + 1; ++i)
|
|
{
|
|
for (int j = index221 - 1; j <= index221 + 1; ++j)
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 0 && !WorldGen.SolidTile(i, j))
|
|
flag = true;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int i = index220 - 1; i <= index220 + 1; ++i)
|
|
{
|
|
for (int j = index221 - 1; j <= index221 + 1; ++j)
|
|
{
|
|
if ((Main.tile[i, j].wall == (ushort) 2 || Main.tile[i, j].wall == (ushort) 15) && !WorldGen.SolidTile(i, j))
|
|
{
|
|
x = i;
|
|
y = j;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag && x > -1 && y > -1)
|
|
{
|
|
if (WorldGen.countDirtTiles(x, y) < WorldGen.maxTileCount)
|
|
{
|
|
try
|
|
{
|
|
WorldGen.Spread.Wall2(x, y, 63);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int i = 5; i < Main.maxTilesX - 5; ++i)
|
|
{
|
|
for (int j = 10; (double) j < Main.worldSurface - 1.0; ++j)
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 63 && WorldGen.genRand.Next(10) == 0)
|
|
Main.tile[i, j].wall = (ushort) 65;
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].type == (ushort) 0)
|
|
{
|
|
bool flag = false;
|
|
for (int index222 = i - 1; index222 <= i + 1; ++index222)
|
|
{
|
|
for (int index223 = j - 1; index223 <= j + 1; ++index223)
|
|
{
|
|
if (Main.tile[index222, index223].wall == (ushort) 63 || Main.tile[index222, index223].wall == (ushort) 65)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
WorldGen.SpreadGrass(i, j);
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Guide", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
if (WorldGen.getGoodWorldGen)
|
|
{
|
|
int index = NPC.NewNPC(Main.spawnTileX * 16, Main.spawnTileY * 16, 38);
|
|
Main.npc[index].homeTileX = Main.spawnTileX;
|
|
Main.npc[index].homeTileY = Main.spawnTileY;
|
|
Main.npc[index].direction = 1;
|
|
Main.npc[index].homeless = true;
|
|
}
|
|
else if (WorldGen.drunkWorldGen)
|
|
{
|
|
int index = NPC.NewNPC(Main.spawnTileX * 16, Main.spawnTileY * 16, 208);
|
|
Main.npc[index].homeTileX = Main.spawnTileX;
|
|
Main.npc[index].homeTileY = Main.spawnTileY;
|
|
Main.npc[index].direction = 1;
|
|
Main.npc[index].homeless = true;
|
|
}
|
|
else if (WorldGen.notTheBees)
|
|
{
|
|
int index = NPC.NewNPC(Main.spawnTileX * 16, Main.spawnTileY * 16, 17);
|
|
Main.npc[index].homeTileX = Main.spawnTileX;
|
|
Main.npc[index].homeTileY = Main.spawnTileY;
|
|
Main.npc[index].direction = 1;
|
|
Main.npc[index].homeless = true;
|
|
}
|
|
else
|
|
{
|
|
int index = NPC.NewNPC(Main.spawnTileX * 16, Main.spawnTileY * 16, 22);
|
|
Main.npc[index].homeTileX = Main.spawnTileX;
|
|
Main.npc[index].homeTileY = Main.spawnTileY;
|
|
Main.npc[index].direction = 1;
|
|
Main.npc[index].homeless = true;
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Sunflowers", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[39].Value;
|
|
for (int index224 = 0; (double) index224 < (double) Main.maxTilesX * 0.002; ++index224)
|
|
{
|
|
progress.Set((float) ((double) index224 / (double) Main.maxTilesX * (1.0 / 500.0)));
|
|
int num282 = Main.maxTilesX / 2;
|
|
int num283 = WorldGen.genRand.Next(Main.maxTilesX);
|
|
int num284 = num283 - WorldGen.genRand.Next(10) - 7;
|
|
int num285 = num283 + WorldGen.genRand.Next(10) + 7;
|
|
if (num284 < 0)
|
|
num284 = 0;
|
|
if (num285 > Main.maxTilesX - 1)
|
|
num285 = Main.maxTilesX - 1;
|
|
for (int i = num284; i < num285; ++i)
|
|
{
|
|
for (int index225 = 1; (double) index225 < Main.worldSurface - 1.0; ++index225)
|
|
{
|
|
if (Main.tile[i, index225].type == (ushort) 2 && Main.tile[i, index225].active() && !Main.tile[i, index225 - 1].active())
|
|
WorldGen.PlaceTile(i, index225 - 1, 27, true);
|
|
if (Main.tile[i, index225].active())
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Planting Trees", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[40].Value;
|
|
if (!WorldGen.drunkWorldGen)
|
|
{
|
|
for (int index = 0; (double) index < (double) Main.maxTilesX * 0.003; ++index)
|
|
{
|
|
progress.Set((float) ((double) index / (double) Main.maxTilesX * (3.0 / 1000.0)));
|
|
int num286 = WorldGen.genRand.Next(50, Main.maxTilesX - 50);
|
|
int num287 = WorldGen.genRand.Next(25, 50);
|
|
for (int i = num286 - num287; i < num286 + num287; ++i)
|
|
{
|
|
for (int y = 20; (double) y < Main.worldSurface; ++y)
|
|
WorldGen.GrowEpicTree(i, y);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.AddTrees();
|
|
}));
|
|
WorldGen.AddGenerationPass("Herbs", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[41].Value;
|
|
for (int index = 0; (double) index < (double) Main.maxTilesX * 1.7; ++index)
|
|
{
|
|
progress.Set((float) ((double) index / (double) Main.maxTilesX * 1.70000004768372));
|
|
WorldGen.PlantAlch();
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Dye Plants", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
WorldGen.plantDye(WorldGen.genRand.Next(100, Main.maxTilesX - 100), WorldGen.genRand.Next(100, Main.UnderworldLayer));
|
|
WorldGen.MatureTheHerbPlants();
|
|
}));
|
|
WorldGen.AddGenerationPass("Webs And Honey", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 100; index < Main.maxTilesX - 100; ++index)
|
|
{
|
|
for (int worldSurface4 = (int) Main.worldSurface; worldSurface4 < Main.maxTilesY - 100; ++worldSurface4)
|
|
{
|
|
if (Main.tile[index, worldSurface4].wall == (ushort) 86)
|
|
{
|
|
if (Main.tile[index, worldSurface4].liquid > (byte) 0)
|
|
Main.tile[index, worldSurface4].honey(true);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.PlaceTight(index, worldSurface4);
|
|
}
|
|
if (Main.tile[index, worldSurface4].wall == (ushort) 62)
|
|
{
|
|
Main.tile[index, worldSurface4].liquid = (byte) 0;
|
|
Main.tile[index, worldSurface4].lava(false);
|
|
}
|
|
if (Main.tile[index, worldSurface4].wall == (ushort) 62 && !Main.tile[index, worldSurface4].active() && WorldGen.genRand.Next(10) != 0)
|
|
{
|
|
int num288 = WorldGen.genRand.Next(2, 5);
|
|
int num289 = index - num288;
|
|
int num290 = index + num288;
|
|
int num291 = worldSurface4 - num288;
|
|
int num292 = worldSurface4 + num288;
|
|
bool flag = false;
|
|
for (int i = num289; i <= num290; ++i)
|
|
{
|
|
for (int j = num291; j <= num292; ++j)
|
|
{
|
|
if (WorldGen.SolidTile(i, j))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
WorldGen.PlaceTile(index, worldSurface4, 51, true);
|
|
WorldGen.TileFrame(index, worldSurface4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Weeds", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[42].Value;
|
|
if (Main.halloween)
|
|
{
|
|
for (int index226 = 40; index226 < Main.maxTilesX - 40; ++index226)
|
|
{
|
|
for (int index227 = 50; (double) index227 < Main.worldSurface; ++index227)
|
|
{
|
|
if (Main.tile[index226, index227].active() && Main.tile[index226, index227].type == (ushort) 2 && WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
WorldGen.PlacePumpkin(index226, index227 - 1);
|
|
int num293 = WorldGen.genRand.Next(5);
|
|
for (int index228 = 0; index228 < num293; ++index228)
|
|
WorldGen.GrowPumpkin(index226, index227 - 1, 254);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
progress.Set((float) i / (float) Main.maxTilesX);
|
|
for (int index = 1; index < Main.maxTilesY; ++index)
|
|
{
|
|
if (Main.tile[i, index].type == (ushort) 2 && Main.tile[i, index].nactive())
|
|
{
|
|
if (!Main.tile[i, index - 1].active())
|
|
WorldGen.PlaceTile(i, index - 1, 3, true);
|
|
}
|
|
else if (Main.tile[i, index].type == (ushort) 23 && Main.tile[i, index].nactive())
|
|
{
|
|
if (!Main.tile[i, index - 1].active())
|
|
WorldGen.PlaceTile(i, index - 1, 24, true);
|
|
}
|
|
else if (Main.tile[i, index].type == (ushort) 199 && Main.tile[i, index].nactive() && !Main.tile[i, index - 1].active())
|
|
WorldGen.PlaceTile(i, index - 1, 201, true);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Glowing Mushrooms and Jungle Plants", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
for (int y = 0; y < Main.maxTilesY; ++y)
|
|
{
|
|
if (Main.tile[i, y].active())
|
|
{
|
|
if (y >= (int) Main.worldSurface && Main.tile[i, y].type == (ushort) 70 && !Main.tile[i, y - 1].active())
|
|
{
|
|
WorldGen.GrowTree(i, y);
|
|
if (!Main.tile[i, y - 1].active())
|
|
{
|
|
WorldGen.GrowTree(i, y);
|
|
if (!Main.tile[i, y - 1].active())
|
|
{
|
|
WorldGen.GrowShroom(i, y);
|
|
if (!Main.tile[i, y - 1].active())
|
|
WorldGen.PlaceTile(i, y - 1, 71, true);
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, y].type == (ushort) 60 && !Main.tile[i, y - 1].active())
|
|
WorldGen.PlaceTile(i, y - 1, 61, true);
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Jungle Plants", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index229 = 0; index229 < Main.maxTilesX * 100; ++index229)
|
|
{
|
|
int X2 = WorldGen.genRand.Next(40, Main.maxTilesX / 2 - 40);
|
|
if (dungeonSide < 0)
|
|
X2 += Main.maxTilesX / 2;
|
|
int index230 = WorldGen.genRand.Next(Main.maxTilesY - 300);
|
|
while (!Main.tile[X2, index230].active() && index230 < Main.maxTilesY - 300)
|
|
++index230;
|
|
if (Main.tile[X2, index230].active() && Main.tile[X2, index230].type == (ushort) 60)
|
|
{
|
|
int Y2 = index230 - 1;
|
|
WorldGen.PlaceJunglePlant(X2, Y2, (ushort) 233, WorldGen.genRand.Next(8), 0);
|
|
if (Main.tile[X2, Y2].type != (ushort) 233)
|
|
WorldGen.PlaceJunglePlant(X2, Y2, (ushort) 233, WorldGen.genRand.Next(12), 1);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Vines", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[43].Value;
|
|
for (int index231 = 5; index231 < Main.maxTilesX - 5; ++index231)
|
|
{
|
|
progress.Set((float) index231 / (float) Main.maxTilesX);
|
|
int num294 = 0;
|
|
ushort num295 = 52;
|
|
for (int y = 0; (double) y < Main.worldSurface; ++y)
|
|
{
|
|
if (num294 > 0 && !Main.tile[index231, y].active())
|
|
{
|
|
Main.tile[index231, y].active(true);
|
|
Main.tile[index231, y].type = num295;
|
|
Main.tile[index231, y].color(Main.tile[index231, y - 1].color());
|
|
--num294;
|
|
}
|
|
else
|
|
num294 = 0;
|
|
if (Main.tile[index231, y].active() && !Main.tile[index231, y].bottomSlope() && (Main.tile[index231, y].type == (ushort) 2 || Main.tile[index231, y].type == (ushort) 192 && WorldGen.genRand.Next(4) == 0) && WorldGen.GrowMoreVines(index231, y))
|
|
{
|
|
num295 = (ushort) 52;
|
|
if (Main.tile[index231, y].wall == (ushort) 68 || Main.tile[index231, y].wall == (ushort) 65 || Main.tile[index231, y].wall == (ushort) 66 || Main.tile[index231, y].wall == (ushort) 63)
|
|
num295 = (ushort) 382;
|
|
else if (Main.tile[index231, y + 1].wall == (ushort) 68 || Main.tile[index231, y + 1].wall == (ushort) 65 || Main.tile[index231, y + 1].wall == (ushort) 66 || Main.tile[index231, y + 1].wall == (ushort) 63)
|
|
num295 = (ushort) 382;
|
|
if (WorldGen.genRand.Next(5) < 3)
|
|
num294 = WorldGen.genRand.Next(1, 10);
|
|
}
|
|
}
|
|
int num296 = 0;
|
|
for (int index232 = 5; index232 < Main.maxTilesY - 5; ++index232)
|
|
{
|
|
if (num296 > 0 && !Main.tile[index231, index232].active())
|
|
{
|
|
Main.tile[index231, index232].active(true);
|
|
Main.tile[index231, index232].type = (ushort) 62;
|
|
--num296;
|
|
}
|
|
else
|
|
num296 = 0;
|
|
if (Main.tile[index231, index232].active() && Main.tile[index231, index232].type == (ushort) 60 && !Main.tile[index231, index232].bottomSlope() && WorldGen.GrowMoreVines(index231, index232))
|
|
{
|
|
if (WorldGen.notTheBees && index232 < Main.maxTilesY - 10 && Main.tile[index231, index232 - 1].active() && !Main.tile[index231, index232 - 1].bottomSlope() && Main.tile[index231 + 1, index232 - 1].active() && !Main.tile[index231 + 1, index232 - 1].bottomSlope() && (Main.tile[index231, index232 - 1].type == (ushort) 60 || Main.tile[index231, index232 - 1].type == (ushort) 444 || Main.tile[index231, index232 - 1].type == (ushort) 230))
|
|
{
|
|
bool flag = true;
|
|
for (int index233 = index231; index233 < index231 + 2; ++index233)
|
|
{
|
|
for (int index234 = index232 + 1; index234 < index232 + 3; ++index234)
|
|
{
|
|
if (Main.tile[index233, index234].active() && (!Main.tileCut[(int) Main.tile[index233, index234].type] || Main.tile[index233, index234].type == (ushort) 444))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[index233, index234].liquid > (byte) 0 || Main.wallHouse[(int) Main.tile[index233, index234].wall])
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
break;
|
|
}
|
|
if (flag)
|
|
{
|
|
if (WorldGen.CountNearBlocksTypes(index231, index232, WorldGen.genRand.Next(3, 10), 1, 444) > 0)
|
|
flag = false;
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int i = index231; i < index231 + 2; ++i)
|
|
{
|
|
for (int j = index232 + 1; j < index232 + 3; ++j)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
for (int index235 = index231; index235 < index231 + 2; ++index235)
|
|
{
|
|
for (int index236 = index232 + 1; index236 < index232 + 3; ++index236)
|
|
{
|
|
Main.tile[index235, index236].active(true);
|
|
Main.tile[index235, index236].type = (ushort) 444;
|
|
Main.tile[index235, index236].frameX = (short) ((index235 - index231) * 18);
|
|
Main.tile[index235, index236].frameY = (short) ((index236 - index232 - 1) * 18);
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
else if (index231 < Main.maxTilesX - 1 && index232 < Main.maxTilesY - 2 && Main.tile[index231 + 1, index232].active() && Main.tile[index231 + 1, index232].type == (ushort) 60 && !Main.tile[index231 + 1, index232].bottomSlope() && WorldGen.genRand.Next(40) == 0)
|
|
{
|
|
bool flag = true;
|
|
for (int index237 = index231; index237 < index231 + 2; ++index237)
|
|
{
|
|
for (int index238 = index232 + 1; index238 < index232 + 3; ++index238)
|
|
{
|
|
if (Main.tile[index237, index238].active() && (!Main.tileCut[(int) Main.tile[index237, index238].type] || Main.tile[index237, index238].type == (ushort) 444))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[index237, index238].liquid > (byte) 0 || Main.wallHouse[(int) Main.tile[index237, index238].wall])
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
break;
|
|
}
|
|
if (flag)
|
|
{
|
|
if (WorldGen.CountNearBlocksTypes(index231, index232, 20, 1, 444) > 0)
|
|
flag = false;
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int i = index231; i < index231 + 2; ++i)
|
|
{
|
|
for (int j = index232 + 1; j < index232 + 3; ++j)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
for (int index239 = index231; index239 < index231 + 2; ++index239)
|
|
{
|
|
for (int index240 = index232 + 1; index240 < index232 + 3; ++index240)
|
|
{
|
|
Main.tile[index239, index240].active(true);
|
|
Main.tile[index239, index240].type = (ushort) 444;
|
|
Main.tile[index239, index240].frameX = (short) ((index239 - index231) * 18);
|
|
Main.tile[index239, index240].frameY = (short) ((index240 - index232 - 1) * 18);
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) < 3)
|
|
num296 = WorldGen.genRand.Next(1, 10);
|
|
}
|
|
}
|
|
int num297 = 0;
|
|
for (int y = 0; y < Main.maxTilesY; ++y)
|
|
{
|
|
if (num297 > 0 && !Main.tile[index231, y].active())
|
|
{
|
|
Main.tile[index231, y].active(true);
|
|
Main.tile[index231, y].type = (ushort) 528;
|
|
--num297;
|
|
}
|
|
else
|
|
num297 = 0;
|
|
if (Main.tile[index231, y].active() && Main.tile[index231, y].type == (ushort) 70 && WorldGen.genRand.Next(5) == 0 && !Main.tile[index231, y].bottomSlope() && WorldGen.GrowMoreVines(index231, y) && WorldGen.genRand.Next(5) < 3)
|
|
num297 = WorldGen.genRand.Next(1, 10);
|
|
}
|
|
int num298 = 0;
|
|
for (int y = 0; y < Main.maxTilesY; ++y)
|
|
{
|
|
if (num298 > 0 && !Main.tile[index231, y].active())
|
|
{
|
|
Main.tile[index231, y].active(true);
|
|
Main.tile[index231, y].type = (ushort) 205;
|
|
--num298;
|
|
}
|
|
else
|
|
num298 = 0;
|
|
if (Main.tile[index231, y].active() && !Main.tile[index231, y].bottomSlope() && Main.tile[index231, y].type == (ushort) 199 && WorldGen.GrowMoreVines(index231, y) && WorldGen.genRand.Next(5) < 3)
|
|
num298 = WorldGen.genRand.Next(1, 10);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Flowers", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[44].Value;
|
|
for (int index241 = 0; (double) index241 < (double) Main.maxTilesX * 0.004; ++index241)
|
|
{
|
|
progress.Set((float) ((double) index241 / (double) Main.maxTilesX * 0.00400000018998981));
|
|
int index242 = WorldGen.genRand.Next(32, Main.maxTilesX - 32);
|
|
int num299 = WorldGen.genRand.Next(15, 30);
|
|
int num300 = WorldGen.genRand.Next(15, 30);
|
|
for (int index243 = num300; (double) index243 < Main.worldSurface - (double) num300 - 1.0; ++index243)
|
|
{
|
|
if (Main.tile[index242, index243].active())
|
|
{
|
|
if (logX >= 0)
|
|
{
|
|
index242 = logX;
|
|
index243 = logY;
|
|
logX = -1;
|
|
}
|
|
int num301 = WorldGen.genRand.NextFromList<int>(21, 24, 27, 30, 33, 36, 39, 42);
|
|
for (int i = index242 - num299; i < index242 + num299; ++i)
|
|
{
|
|
for (int j = index243 - num300; j < index243 + num300; ++j)
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 488 && !Main.tileSolid[(int) Main.tile[i, j].type])
|
|
{
|
|
if (Main.tile[i, j].type == (ushort) 3)
|
|
{
|
|
Main.tile[i, j].frameX = (short) ((num301 + WorldGen.genRand.Next(3)) * 18);
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Main.tile[i, j].type = (ushort) 73;
|
|
}
|
|
else if (Main.tile[i, j + 1].wall == (ushort) 0 && (Main.tile[i, j + 1].type == (ushort) 2 || (Main.tile[i, j + 1].type == (ushort) 40 || Main.tile[i, j + 1].type == (ushort) 1 || TileID.Sets.Ore[(int) Main.tile[i, j + 1].type]) && !Main.tile[i, j].active()) && (!Main.tile[i, j].active() || Main.tile[i, j].type == (ushort) 185 || Main.tile[i, j].type == (ushort) 186 || Main.tile[i, j].type == (ushort) 187 || Main.tile[i, j].type == (ushort) 5 && (double) i < (double) Main.maxTilesX * 0.48 || (double) i > (double) Main.maxTilesX * 0.52))
|
|
{
|
|
if (Main.tile[i, j + 1].type == (ushort) 40 || Main.tile[i, j + 1].type == (ushort) 1 || TileID.Sets.Ore[(int) Main.tile[i, j + 1].type])
|
|
{
|
|
Main.tile[i, j + 1].type = (ushort) 2;
|
|
if (Main.tile[i, j + 2].type == (ushort) 40 || Main.tile[i, j + 2].type == (ushort) 1 || TileID.Sets.Ore[(int) Main.tile[i, j + 2].type])
|
|
Main.tile[i, j + 2].type = (ushort) 2;
|
|
}
|
|
WorldGen.KillTile(i, j);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
Main.tile[i, j + 1].slope((byte) 0);
|
|
Main.tile[i, j + 1].halfBrick(false);
|
|
}
|
|
WorldGen.PlaceTile(i, j, 3);
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].type == (ushort) 3)
|
|
{
|
|
Main.tile[i, j].frameX = (short) ((num301 + WorldGen.genRand.Next(3)) * 18);
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Main.tile[i, j].type = (ushort) 73;
|
|
}
|
|
if (Main.tile[i, j + 2].type == (ushort) 40 || Main.tile[i, j + 2].type == (ushort) 1 || TileID.Sets.Ore[(int) Main.tile[i, j + 2].type])
|
|
Main.tile[i, j + 2].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Mushrooms", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[45].Value;
|
|
for (int index244 = 0; (double) index244 < (double) Main.maxTilesX * 0.002; ++index244)
|
|
{
|
|
progress.Set((float) ((double) index244 / (double) Main.maxTilesX * (1.0 / 500.0)));
|
|
int index245 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int num302 = WorldGen.genRand.Next(4, 10);
|
|
int num303 = WorldGen.genRand.Next(15, 30);
|
|
for (int index246 = 1; (double) index246 < Main.worldSurface - 1.0; ++index246)
|
|
{
|
|
if (Main.tile[index245, index246].active())
|
|
{
|
|
for (int index247 = index245 - num302; index247 < index245 + num302; ++index247)
|
|
{
|
|
for (int index248 = index246 - num303; index248 < index246 + num303 && index247 >= 10 && index248 >= 0 && index247 <= Main.maxTilesX - 10 && index248 <= Main.maxTilesY - 10; ++index248)
|
|
{
|
|
if (Main.tile[index247, index248].type == (ushort) 3 || Main.tile[index247, index248].type == (ushort) 24)
|
|
Main.tile[index247, index248].frameX = (short) 144;
|
|
else if (Main.tile[index247, index248].type == (ushort) 201)
|
|
Main.tile[index247, index248].frameX = (short) 270;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Gems In Ice Biome", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index249 = 0; (double) index249 < (double) Main.maxTilesX * 0.25; ++index249)
|
|
{
|
|
int index250 = WorldGen.genRand.Next((int) (Main.worldSurface + Main.rockLayer) / 2, WorldGen.lavaLine);
|
|
int index251 = WorldGen.genRand.Next(snowMinX[index250], snowMaxX[index250]);
|
|
if (Main.tile[index251, index250].active() && (Main.tile[index251, index250].type == (ushort) 147 || Main.tile[index251, index250].type == (ushort) 161 || Main.tile[index251, index250].type == (ushort) 162 || Main.tile[index251, index250].type == (ushort) 224))
|
|
{
|
|
int num304 = WorldGen.genRand.Next(1, 4);
|
|
int num305 = WorldGen.genRand.Next(1, 4);
|
|
int num306 = WorldGen.genRand.Next(1, 4);
|
|
int num307 = WorldGen.genRand.Next(1, 4);
|
|
int num308 = WorldGen.genRand.Next(12);
|
|
int style = num308 >= 3 ? (num308 >= 6 ? (num308 >= 8 ? (num308 >= 10 ? (num308 >= 11 ? 5 : 4) : 3) : 2) : 1) : 0;
|
|
for (int i = index251 - num304; i < index251 + num305; ++i)
|
|
{
|
|
for (int j = index250 - num306; j < index250 + num307; ++j)
|
|
{
|
|
if (!Main.tile[i, j].active())
|
|
WorldGen.PlaceTile(i, j, 178, true, style: style);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Random Gems", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 0; index < Main.maxTilesX; ++index)
|
|
{
|
|
int i = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int j = WorldGen.genRand.Next((int) Main.rockLayer, Main.maxTilesY - 300);
|
|
if (!Main.tile[i, j].active() && !Main.tile[i, j].lava() && !Main.wallDungeon[(int) Main.tile[i, j].wall] && Main.tile[i, j].wall != (ushort) 27)
|
|
{
|
|
int num309 = WorldGen.genRand.Next(12);
|
|
int style = num309 >= 3 ? (num309 >= 6 ? (num309 >= 8 ? (num309 >= 10 ? (num309 >= 11 ? 5 : 4) : 3) : 2) : 1) : 0;
|
|
WorldGen.PlaceTile(i, j, 178, true, style: style);
|
|
}
|
|
}
|
|
for (int index252 = 0; index252 < Main.maxTilesX; ++index252)
|
|
{
|
|
int index253 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int index254 = WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 300);
|
|
if (!Main.tile[index253, index254].active() && !Main.tile[index253, index254].lava() && (Main.tile[index253, index254].wall == (ushort) 216 || Main.tile[index253, index254].wall == (ushort) 187))
|
|
{
|
|
int num310 = WorldGen.genRand.Next(1, 4);
|
|
int num311 = WorldGen.genRand.Next(1, 4);
|
|
int num312 = WorldGen.genRand.Next(1, 4);
|
|
int num313 = WorldGen.genRand.Next(1, 4);
|
|
for (int i = index253 - num310; i < index253 + num311; ++i)
|
|
{
|
|
for (int j = index254 - num312; j < index254 + num313; ++j)
|
|
{
|
|
if (!Main.tile[i, j].active())
|
|
WorldGen.PlaceTile(i, j, 178, true, style: 6);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Moss Grass", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index255 = 5; index255 < Main.maxTilesX - 5; ++index255)
|
|
{
|
|
for (int index256 = 5; index256 < Main.maxTilesY - 5; ++index256)
|
|
{
|
|
if (Main.tile[index255, index256].active() && Main.tileMoss[(int) Main.tile[index255, index256].type])
|
|
{
|
|
for (int index257 = 0; index257 < 4; ++index257)
|
|
{
|
|
int i = index255;
|
|
int j = index256;
|
|
if (index257 == 0)
|
|
--i;
|
|
if (index257 == 1)
|
|
++i;
|
|
if (index257 == 2)
|
|
--j;
|
|
if (index257 == 3)
|
|
++j;
|
|
if (!Main.tile[i, j].active())
|
|
WorldGen.PlaceTile(i, j, 184, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Muds Walls In Jungle", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
int num314 = 0;
|
|
int num315 = 0;
|
|
bool flag29 = false;
|
|
for (int index258 = 5; index258 < Main.maxTilesX - 5; ++index258)
|
|
{
|
|
for (int index259 = 0; (double) index259 < Main.worldSurface + 20.0; ++index259)
|
|
{
|
|
if (Main.tile[index258, index259].active() && Main.tile[index258, index259].type == (ushort) 60)
|
|
{
|
|
num314 = index258;
|
|
flag29 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag29)
|
|
break;
|
|
}
|
|
bool flag30 = false;
|
|
for (int index260 = Main.maxTilesX - 5; index260 > 5; --index260)
|
|
{
|
|
for (int index261 = 0; (double) index261 < Main.worldSurface + 20.0; ++index261)
|
|
{
|
|
if (Main.tile[index260, index261].active() && Main.tile[index260, index261].type == (ushort) 60)
|
|
{
|
|
num315 = index260;
|
|
flag30 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag30)
|
|
break;
|
|
}
|
|
jungleMinX = num314;
|
|
jungleMaxX = num315;
|
|
for (int index262 = num314; index262 <= num315; ++index262)
|
|
{
|
|
for (int index263 = 0; (double) index263 < Main.worldSurface + 20.0; ++index263)
|
|
{
|
|
if ((index262 >= num314 + 2 && index262 <= num315 - 2 || WorldGen.genRand.Next(2) != 0) && (index262 >= num314 + 3 && index262 <= num315 - 3 || WorldGen.genRand.Next(3) != 0) && (Main.tile[index262, index263].wall == (ushort) 2 || Main.tile[index262, index263].wall == (ushort) 59))
|
|
Main.tile[index262, index263].wall = (ushort) 15;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Larva", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
Main.tileSolid[229] = true;
|
|
progress.Set(1f);
|
|
for (int index264 = 0; index264 < WorldGen.numLarva; ++index264)
|
|
{
|
|
int i = WorldGen.larvaX[index264];
|
|
int j = WorldGen.larvaY[index264];
|
|
for (int index265 = i - 1; index265 <= i + 1; ++index265)
|
|
{
|
|
for (int index266 = j - 2; index266 <= j + 1; ++index266)
|
|
{
|
|
if (index266 != j + 1)
|
|
{
|
|
Main.tile[index265, index266].active(false);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index265, index266].active(true);
|
|
Main.tile[index265, index266].type = (ushort) 225;
|
|
Main.tile[index265, index266].slope((byte) 0);
|
|
Main.tile[index265, index266].halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.PlaceTile(i, j, 231, true);
|
|
}
|
|
Main.tileSolid[232] = true;
|
|
Main.tileSolid[162] = true;
|
|
}));
|
|
WorldGen.AddGenerationPass("Settle Liquids Again", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
if (WorldGen.getGoodWorldGen)
|
|
Main.tileSolid[56] = true;
|
|
progress.Message = Lang.gen[27].Value;
|
|
if (WorldGen.notTheBees)
|
|
WorldGen.NotTheBees();
|
|
Liquid.worldGenTilesIgnoreWater(true);
|
|
Liquid.QuickWater(3);
|
|
WorldGen.WaterCheck();
|
|
int num316 = 0;
|
|
Liquid.quickSettle = true;
|
|
int num317 = 10;
|
|
while (num316 < num317)
|
|
{
|
|
int num318 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
|
|
++num316;
|
|
float num319 = 0.0f;
|
|
while (Liquid.numLiquid > 0)
|
|
{
|
|
float num320 = (float) (num318 - (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer)) / (float) num318;
|
|
if (Liquid.numLiquid + LiquidBuffer.numLiquidBuffer > num318)
|
|
num318 = Liquid.numLiquid + LiquidBuffer.numLiquidBuffer;
|
|
if ((double) num320 > (double) num319)
|
|
num319 = num320;
|
|
else
|
|
num320 = num319;
|
|
if (num316 == 1)
|
|
progress.Set((float) ((double) num320 / 3.0 + 0.330000013113022));
|
|
Liquid.UpdateLiquid();
|
|
}
|
|
WorldGen.WaterCheck();
|
|
progress.Set((float) ((double) (num316 / num317) / 3.0 + 0.660000026226044));
|
|
}
|
|
Liquid.quickSettle = false;
|
|
Liquid.worldGenTilesIgnoreWater(false);
|
|
Main.tileSolid[484] = false;
|
|
}));
|
|
WorldGen.AddGenerationPass("Cactus, Palm Trees, & Coral", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[38].Value;
|
|
int num321 = 8;
|
|
int num322 = 400;
|
|
int num323 = WorldGen.genRand.Next(3, 13);
|
|
int num324 = WorldGen.genRand.Next(3, 13);
|
|
WorldGen.genRand.Next(2, 6);
|
|
WorldGen.genRand.Next(2, 6);
|
|
int num325 = 380;
|
|
for (int index267 = 0; index267 < WorldGen.numOasis; ++index267)
|
|
{
|
|
int num326 = (int) ((double) WorldGen.oasisWidth[index267] * 1.5);
|
|
for (int index268 = (int) WorldGen.oasisPosition[index267].X - num326; index268 <= (int) WorldGen.oasisPosition[index267].X + num326; ++index268)
|
|
{
|
|
for (int index269 = (int) WorldGen.oasisPosition[index267].Y - WorldGen.oasisHeight; index269 <= (int) WorldGen.oasisPosition[index267].Y + WorldGen.oasisHeight; ++index269)
|
|
{
|
|
float num327 = 1f;
|
|
int num328 = 8;
|
|
for (int x = index268 - num328; x <= index268 + num328; ++x)
|
|
{
|
|
for (int y = index269 - num328; y <= index269 + num328; ++y)
|
|
{
|
|
if (WorldGen.InWorld(x, y) && Main.tile[x, y] != null && Main.tile[x, y].active() && Main.tile[x, y].type == (ushort) 323)
|
|
num327 = 0.13f;
|
|
}
|
|
}
|
|
if ((double) WorldGen.genRand.NextFloat() < (double) num327)
|
|
WorldGen.GrowPalmTree(index268, index269);
|
|
if (WorldGen.PlantSeaOat(index268, index269))
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowSeaOat(index268, index269);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowSeaOat(index268, index269);
|
|
}
|
|
WorldGen.PlaceOasisPlant(index268, index269);
|
|
}
|
|
}
|
|
}
|
|
for (int index270 = 0; index270 < 3; ++index270)
|
|
{
|
|
progress.Set((float) index270 / 3f);
|
|
int num329;
|
|
int num330;
|
|
bool flag;
|
|
int maxValue;
|
|
switch (index270)
|
|
{
|
|
case 1:
|
|
num329 = num322;
|
|
num330 = Main.maxTilesX - num322;
|
|
flag = true;
|
|
maxValue = num321;
|
|
break;
|
|
case 2:
|
|
num329 = Main.maxTilesX - num325;
|
|
num330 = Main.maxTilesX - 5;
|
|
flag = false;
|
|
maxValue = num324;
|
|
break;
|
|
default:
|
|
num329 = 5;
|
|
num330 = num325;
|
|
flag = false;
|
|
maxValue = num323;
|
|
break;
|
|
}
|
|
for (int index271 = num329; index271 < num330; ++index271)
|
|
{
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
for (int index272 = 0; (double) index272 < Main.worldSurface - 1.0; ++index272)
|
|
{
|
|
Tile tile3 = Main.tile[index271, index272];
|
|
if (tile3.active() && (tile3.type == (ushort) 53 || tile3.type == (ushort) 112 || tile3.type == (ushort) 234))
|
|
{
|
|
Tile tile4 = Main.tile[index271, index272 - 1];
|
|
if (!tile4.active() && tile4.wall == (ushort) 0)
|
|
{
|
|
if (flag)
|
|
{
|
|
int num331 = 0;
|
|
for (int index273 = index271 - WorldGen.cactusWaterWidth; index273 < index271 + WorldGen.cactusWaterWidth; ++index273)
|
|
{
|
|
for (int index274 = index272 - WorldGen.cactusWaterHeight; index274 < index272 + WorldGen.cactusWaterHeight; ++index274)
|
|
num331 += (int) Main.tile[index273, index274].liquid;
|
|
}
|
|
if (num331 / (int) byte.MaxValue > WorldGen.cactusWaterLimit)
|
|
{
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
WorldGen.GrowPalmTree(index271, index272);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
WorldGen.PlantCactus(index271, index272);
|
|
break;
|
|
}
|
|
if (Main.tile[index271, index272 - 2].liquid == byte.MaxValue && Main.tile[index271, index272 - 3].liquid == byte.MaxValue && Main.tile[index271, index272 - 4].liquid == byte.MaxValue)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceTile(index271, index272 - 1, 81, true);
|
|
break;
|
|
}
|
|
WorldGen.PlaceTile(index271, index272 - 1, 324, true, style: WorldGen.RollRandomSeaShellStyle());
|
|
break;
|
|
}
|
|
if (Main.tile[index271, index272 - 2].liquid == (byte) 0 && (double) index272 < Main.worldSurface)
|
|
{
|
|
WorldGen.PlaceTile(index271, index272 - 1, 324, true, style: WorldGen.RollRandomSeaShellStyle());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int index275 = 0; (double) index275 < Main.worldSurface - 1.0; ++index275)
|
|
{
|
|
if (WorldGen.PlantSeaOat(index271, index275))
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowSeaOat(index271, index275);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowSeaOat(index271, index275);
|
|
}
|
|
WorldGen.PlaceOasisPlant(index271, index275);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Tile Cleanup", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[84].Value;
|
|
for (int i = 40; i < Main.maxTilesX - 40; ++i)
|
|
{
|
|
progress.Set((float) (i - 40) / (float) (Main.maxTilesX - 80));
|
|
for (int j = 40; j < Main.maxTilesY - 40; ++j)
|
|
{
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].topSlope() && (Main.tile[i, j].leftSlope() && Main.tile[i + 1, j].halfBrick() || Main.tile[i, j].rightSlope() && Main.tile[i - 1, j].halfBrick()))
|
|
{
|
|
Main.tile[i, j].slope((byte) 0);
|
|
Main.tile[i, j].halfBrick(true);
|
|
}
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].liquid > (byte) 0 && TileID.Sets.SlowlyDiesInWater[(int) Main.tile[i, j].type])
|
|
WorldGen.KillTile(i, j);
|
|
if (!Main.tile[i, j].active() && Main.tile[i, j].liquid == (byte) 0 && WorldGen.genRand.Next(3) != 0 && WorldGen.SolidTile(i, j - 1))
|
|
{
|
|
int num332 = WorldGen.genRand.Next(15, 21);
|
|
for (int index = j - 2; index >= j - num332; --index)
|
|
{
|
|
if (Main.tile[i, index].liquid >= (byte) 128)
|
|
{
|
|
int num333 = 373;
|
|
if (Main.tile[i, index].lava())
|
|
num333 = 374;
|
|
else if (Main.tile[i, index].honey())
|
|
num333 = 375;
|
|
if (WorldGen.genRand.Next(j - index) <= 1)
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 86)
|
|
num333 = 375;
|
|
Main.tile[i, j].type = (ushort) num333;
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
Main.tile[i, j].active(true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!Main.tile[i, j].active())
|
|
{
|
|
int num334 = WorldGen.genRand.Next(3, 11);
|
|
for (int index = j + 1; index <= j + num334; ++index)
|
|
{
|
|
if (Main.tile[i, index].liquid >= (byte) 200)
|
|
{
|
|
int num335 = 373;
|
|
if (Main.tile[i, index].lava())
|
|
num335 = 374;
|
|
else if (Main.tile[i, index].honey())
|
|
num335 = 375;
|
|
if (WorldGen.genRand.Next((index - j) * 3) <= 1)
|
|
{
|
|
Main.tile[i, j].type = (ushort) num335;
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
Main.tile[i, j].active(true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!Main.tile[i, j].active() && WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
Tile tile = Main.tile[i, j - 1];
|
|
if (TileID.Sets.Conversion.Sandstone[(int) tile.type] || TileID.Sets.Conversion.HardenedSand[(int) tile.type])
|
|
{
|
|
Main.tile[i, j].type = (ushort) 461;
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
Main.tile[i, j].active(true);
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 137)
|
|
{
|
|
if (Main.tile[i, j].frameY <= (short) 52)
|
|
{
|
|
int num336 = -1;
|
|
if (Main.tile[i, j].frameX >= (short) 18)
|
|
num336 = 1;
|
|
if (Main.tile[i + num336, j].halfBrick() || Main.tile[i + num336, j].slope() != (byte) 0)
|
|
Main.tile[i + num336, j].active(false);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 162 && Main.tile[i, j + 1].liquid == (byte) 0 && WorldGen.CanKillTile(i, j))
|
|
Main.tile[i, j].active(false);
|
|
if (Main.tile[i, j].wall == (ushort) 13 || Main.tile[i, j].wall == (ushort) 14)
|
|
Main.tile[i, j].liquid = (byte) 0;
|
|
if (Main.tile[i, j].type == (ushort) 31)
|
|
{
|
|
int num337 = (int) Main.tile[i, j].frameX / 18;
|
|
int num338 = 0;
|
|
int num339 = i;
|
|
int num340 = num338 + num337 / 2;
|
|
int num341 = !WorldGen.drunkWorldGen ? (WorldGen.crimson ? 1 : 0) : (Main.tile[i, j].wall != (ushort) 83 ? 0 : 1);
|
|
int num342 = num337 % 2;
|
|
int num343 = num339 - num342;
|
|
int num344 = (int) Main.tile[i, j].frameY / 18;
|
|
int num345 = 0;
|
|
int num346 = j;
|
|
int num347 = num345 + num344 / 2;
|
|
int num348 = num344 % 2;
|
|
int num349 = num346 - num348;
|
|
for (int index276 = 0; index276 < 2; ++index276)
|
|
{
|
|
for (int index277 = 0; index277 < 2; ++index277)
|
|
{
|
|
int index278 = num343 + index276;
|
|
int index279 = num349 + index277;
|
|
Main.tile[index278, index279].active(true);
|
|
Main.tile[index278, index279].slope((byte) 0);
|
|
Main.tile[index278, index279].halfBrick(false);
|
|
Main.tile[index278, index279].type = (ushort) 31;
|
|
Main.tile[index278, index279].frameX = (short) (index276 * 18 + 36 * num341);
|
|
Main.tile[index278, index279].frameY = (short) (index277 * 18 + 36 * num347);
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 12)
|
|
{
|
|
int num350 = (int) Main.tile[i, j].frameX / 18;
|
|
int num351 = 0;
|
|
int num352 = i;
|
|
int num353 = num351 + num350 / 2;
|
|
int num354 = num350 % 2;
|
|
int num355 = num352 - num354;
|
|
int num356 = (int) Main.tile[i, j].frameY / 18;
|
|
int num357 = 0;
|
|
int num358 = j;
|
|
int num359 = num357 + num356 / 2;
|
|
int num360 = num356 % 2;
|
|
int num361 = num358 - num360;
|
|
for (int index280 = 0; index280 < 2; ++index280)
|
|
{
|
|
for (int index281 = 0; index281 < 2; ++index281)
|
|
{
|
|
int index282 = num355 + index280;
|
|
int index283 = num361 + index281;
|
|
Main.tile[index282, index283].active(true);
|
|
Main.tile[index282, index283].slope((byte) 0);
|
|
Main.tile[index282, index283].halfBrick(false);
|
|
Main.tile[index282, index283].type = (ushort) 12;
|
|
Main.tile[index282, index283].frameX = (short) (index280 * 18 + 36 * num353);
|
|
Main.tile[index282, index283].frameY = (short) (index281 * 18 + 36 * num359);
|
|
}
|
|
if (!Main.tile[index280, j + 2].active())
|
|
{
|
|
Main.tile[index280, j + 2].active(true);
|
|
if (!Main.tileSolid[(int) Main.tile[index280, j + 2].type] || Main.tileSolidTop[(int) Main.tile[index280, j + 2].type])
|
|
Main.tile[index280, j + 2].type = (ushort) 0;
|
|
}
|
|
Main.tile[index280, j + 2].slope((byte) 0);
|
|
Main.tile[index280, j + 2].halfBrick(false);
|
|
}
|
|
}
|
|
if (TileID.Sets.BasicChest[(int) Main.tile[i, j].type])
|
|
{
|
|
int num362 = (int) Main.tile[i, j].frameX / 18;
|
|
int num363 = 0;
|
|
ushort num364 = 21;
|
|
int num365 = i;
|
|
int Y = j - (int) Main.tile[i, j].frameY / 18;
|
|
if (Main.tile[i, j].type == (ushort) 467)
|
|
num364 = (ushort) 467;
|
|
for (; num362 >= 2; num362 -= 2)
|
|
++num363;
|
|
int X = num365 - num362;
|
|
int chest = Chest.FindChest(X, Y);
|
|
if (chest != -1)
|
|
{
|
|
switch (Main.chest[chest].item[0].type)
|
|
{
|
|
case 1156:
|
|
num363 = 23;
|
|
break;
|
|
case 1260:
|
|
num363 = 26;
|
|
break;
|
|
case 1569:
|
|
num363 = 25;
|
|
break;
|
|
case 1571:
|
|
num363 = 24;
|
|
break;
|
|
case 1572:
|
|
num363 = 27;
|
|
break;
|
|
}
|
|
}
|
|
for (int index284 = 0; index284 < 2; ++index284)
|
|
{
|
|
for (int index285 = 0; index285 < 2; ++index285)
|
|
{
|
|
int index286 = X + index284;
|
|
int index287 = Y + index285;
|
|
Main.tile[index286, index287].active(true);
|
|
Main.tile[index286, index287].slope((byte) 0);
|
|
Main.tile[index286, index287].halfBrick(false);
|
|
Main.tile[index286, index287].type = num364;
|
|
Main.tile[index286, index287].frameX = (short) (index284 * 18 + 36 * num363);
|
|
Main.tile[index286, index287].frameY = (short) (index285 * 18);
|
|
}
|
|
if (!Main.tile[index284, j + 2].active())
|
|
{
|
|
Main.tile[index284, j + 2].active(true);
|
|
if (!Main.tileSolid[(int) Main.tile[index284, j + 2].type] || Main.tileSolidTop[(int) Main.tile[index284, j + 2].type])
|
|
Main.tile[index284, j + 2].type = (ushort) 0;
|
|
}
|
|
Main.tile[index284, j + 2].slope((byte) 0);
|
|
Main.tile[index284, j + 2].halfBrick(false);
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 28)
|
|
{
|
|
int num366 = (int) Main.tile[i, j].frameX / 18;
|
|
int num367 = 0;
|
|
int num368 = i;
|
|
for (; num366 >= 2; num366 -= 2)
|
|
++num367;
|
|
int num369 = num368 - num366;
|
|
int num370 = (int) Main.tile[i, j].frameY / 18;
|
|
int num371 = 0;
|
|
int num372 = j;
|
|
for (; num370 >= 2; num370 -= 2)
|
|
++num371;
|
|
int num373 = num372 - num370;
|
|
for (int index288 = 0; index288 < 2; ++index288)
|
|
{
|
|
for (int index289 = 0; index289 < 2; ++index289)
|
|
{
|
|
int index290 = num369 + index288;
|
|
int index291 = num373 + index289;
|
|
Main.tile[index290, index291].active(true);
|
|
Main.tile[index290, index291].slope((byte) 0);
|
|
Main.tile[index290, index291].halfBrick(false);
|
|
Main.tile[index290, index291].type = (ushort) 28;
|
|
Main.tile[index290, index291].frameX = (short) (index288 * 18 + 36 * num367);
|
|
Main.tile[index290, index291].frameY = (short) (index289 * 18 + 36 * num371);
|
|
}
|
|
if (!Main.tile[index288, j + 2].active())
|
|
{
|
|
Main.tile[index288, j + 2].active(true);
|
|
if (!Main.tileSolid[(int) Main.tile[index288, j + 2].type] || Main.tileSolidTop[(int) Main.tile[index288, j + 2].type])
|
|
Main.tile[index288, j + 2].type = (ushort) 0;
|
|
}
|
|
Main.tile[index288, j + 2].slope((byte) 0);
|
|
Main.tile[index288, j + 2].halfBrick(false);
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 26)
|
|
{
|
|
int num374 = (int) Main.tile[i, j].frameX / 18;
|
|
int num375 = 0;
|
|
int num376 = i;
|
|
int num377 = j - (int) Main.tile[i, j].frameY / 18;
|
|
for (; num374 >= 3; num374 -= 3)
|
|
++num375;
|
|
int num378 = num376 - num374;
|
|
int num379 = !WorldGen.drunkWorldGen ? (!WorldGen.crimson ? 0 : 1) : (Main.tile[i, j].wall != (ushort) 83 ? 0 : 1);
|
|
for (int index292 = 0; index292 < 3; ++index292)
|
|
{
|
|
for (int index293 = 0; index293 < 2; ++index293)
|
|
{
|
|
int index294 = num378 + index292;
|
|
int index295 = num377 + index293;
|
|
Main.tile[index294, index295].active(true);
|
|
Main.tile[index294, index295].slope((byte) 0);
|
|
Main.tile[index294, index295].halfBrick(false);
|
|
Main.tile[index294, index295].type = (ushort) 26;
|
|
Main.tile[index294, index295].frameX = (short) (index292 * 18 + 54 * num379);
|
|
Main.tile[index294, index295].frameY = (short) (index293 * 18);
|
|
}
|
|
if (!Main.tile[num378 + index292, num377 + 2].active() || !Main.tileSolid[(int) Main.tile[num378 + index292, num377 + 2].type] || Main.tileSolidTop[(int) Main.tile[num378 + index292, num377 + 2].type])
|
|
{
|
|
Main.tile[num378 + index292, num377 + 2].active(true);
|
|
if (!TileID.Sets.Platforms[(int) Main.tile[num378 + index292, num377 + 2].type] && (!Main.tileSolid[(int) Main.tile[num378 + index292, num377 + 2].type] || Main.tileSolidTop[(int) Main.tile[num378 + index292, num377 + 2].type]))
|
|
Main.tile[num378 + index292, num377 + 2].type = (ushort) 0;
|
|
}
|
|
Main.tile[num378 + index292, num377 + 2].slope((byte) 0);
|
|
Main.tile[num378 + index292, num377 + 2].halfBrick(false);
|
|
if (Main.tile[num378 + index292, num377 + 3].type == (ushort) 28 && (int) Main.tile[num378 + index292, num377 + 3].frameY % 36 >= 18)
|
|
{
|
|
Main.tile[num378 + index292, num377 + 3].type = (ushort) 0;
|
|
Main.tile[num378 + index292, num377 + 3].active(false);
|
|
}
|
|
}
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
if ((Main.tile[num378 - 1, num377 + index].type == (ushort) 28 || Main.tile[num378 - 1, num377 + index].type == (ushort) 12) && (int) Main.tile[num378 - 1, num377 + index].frameX % 36 < 18)
|
|
{
|
|
Main.tile[num378 - 1, num377 + index].type = (ushort) 0;
|
|
Main.tile[num378 - 1, num377 + index].active(false);
|
|
}
|
|
if ((Main.tile[num378 + 3, num377 + index].type == (ushort) 28 || Main.tile[num378 + 3, num377 + index].type == (ushort) 12) && (int) Main.tile[num378 + 3, num377 + index].frameX % 36 >= 18)
|
|
{
|
|
Main.tile[num378 + 3, num377 + index].type = (ushort) 0;
|
|
Main.tile[num378 + 3, num377 + index].active(false);
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 237 && Main.tile[i, j + 1].type == (ushort) 232)
|
|
Main.tile[i, j + 1].type = (ushort) 226;
|
|
if (Main.tile[i, j].wall == (ushort) 87)
|
|
Main.tile[i, j].liquid = (byte) 0;
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Lihzahrd Altars", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index296 = 0; index296 < 3; ++index296)
|
|
{
|
|
for (int index297 = 0; index297 < 2; ++index297)
|
|
{
|
|
int index298 = WorldGen.lAltarX + index296;
|
|
int index299 = WorldGen.lAltarY + index297;
|
|
Main.tile[index298, index299].active(true);
|
|
Main.tile[index298, index299].type = (ushort) 237;
|
|
Main.tile[index298, index299].frameX = (short) (index296 * 18);
|
|
Main.tile[index298, index299].frameY = (short) (index297 * 18);
|
|
}
|
|
Main.tile[WorldGen.lAltarX + index296, WorldGen.lAltarY + 2].active(true);
|
|
Main.tile[WorldGen.lAltarX + index296, WorldGen.lAltarY + 2].slope((byte) 0);
|
|
Main.tile[WorldGen.lAltarX + index296, WorldGen.lAltarY + 2].halfBrick(false);
|
|
Main.tile[WorldGen.lAltarX + index296, WorldGen.lAltarY + 2].type = (ushort) 226;
|
|
}
|
|
for (int index300 = 0; index300 < 3; ++index300)
|
|
{
|
|
for (int index301 = 0; index301 < 2; ++index301)
|
|
WorldGen.SquareTileFrame(WorldGen.lAltarX + index300, WorldGen.lAltarY + index301);
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Micro Biomes", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[76].Value;
|
|
double num380 = (double) (Main.maxTilesX * Main.maxTilesY) / 5040000.0;
|
|
float num381 = 10f;
|
|
if (WorldGen.getGoodWorldGen)
|
|
num381 *= 10f;
|
|
DeadMansChestBiome biome1 = configuration.CreateBiome<DeadMansChestBiome>();
|
|
List<int> possibleChestsToTrapify = biome1.GetPossibleChestsToTrapify(structures);
|
|
int random5 = passConfig.Get<WorldGenRange>("DeadManChests").GetRandom(WorldGen.genRand);
|
|
int num382 = 0;
|
|
while (num382 < random5 && possibleChestsToTrapify.Count > 0)
|
|
{
|
|
int index = possibleChestsToTrapify[WorldGen.genRand.Next(possibleChestsToTrapify.Count)];
|
|
Point origin = new Point(Main.chest[index].x, Main.chest[index].y);
|
|
biome1.Place(origin, structures);
|
|
++num382;
|
|
possibleChestsToTrapify.Remove(index);
|
|
}
|
|
progress.Set(1f / num381);
|
|
if (!WorldGen.notTheBees)
|
|
{
|
|
ThinIceBiome biome2 = configuration.CreateBiome<ThinIceBiome>();
|
|
int random6 = passConfig.Get<WorldGenRange>("ThinIcePatchCount").GetRandom(WorldGen.genRand);
|
|
int num383 = 0;
|
|
while (num383 < random6)
|
|
{
|
|
if (biome2.Place(WorldGen.RandomWorldPoint((int) Main.worldSurface + 20, 50, 200, 50), structures))
|
|
++num383;
|
|
}
|
|
}
|
|
progress.Set(0.1f);
|
|
progress.Set(2f / num381);
|
|
EnchantedSwordBiome biome3 = configuration.CreateBiome<EnchantedSwordBiome>();
|
|
int random7 = passConfig.Get<WorldGenRange>("SwordShrineAttempts").GetRandom(WorldGen.genRand);
|
|
float num384 = passConfig.Get<float>("SwordShrinePlacementChance");
|
|
for (int index = 0; index < random7; ++index)
|
|
{
|
|
if ((double) WorldGen.genRand.NextFloat() <= (double) num384)
|
|
{
|
|
int num385 = 0;
|
|
while (num385++ <= Main.maxTilesX)
|
|
{
|
|
Point origin;
|
|
origin.Y = (int) worldSurface + WorldGen.genRand.Next(50, 100);
|
|
origin.X = WorldGen.genRand.Next(2) != 0 ? WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.699999988079071), Main.maxTilesX - 50) : WorldGen.genRand.Next(50, (int) ((double) Main.maxTilesX * 0.300000011920929));
|
|
if (biome3.Place(origin, structures))
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(0.2f);
|
|
progress.Set(3f / num381);
|
|
if (!WorldGen.notTheBees)
|
|
{
|
|
CampsiteBiome biome4 = configuration.CreateBiome<CampsiteBiome>();
|
|
int random8 = passConfig.Get<WorldGenRange>("CampsiteCount").GetRandom(WorldGen.genRand);
|
|
int num386 = 0;
|
|
while (num386 < random8)
|
|
{
|
|
if (biome4.Place(WorldGen.RandomWorldPoint((int) Main.worldSurface, WorldGen.beachDistance, 200, WorldGen.beachDistance), structures))
|
|
++num386;
|
|
}
|
|
}
|
|
progress.Set(4f / num381);
|
|
if (!WorldGen.notTheBees)
|
|
{
|
|
MiningExplosivesBiome biome5 = configuration.CreateBiome<MiningExplosivesBiome>();
|
|
int num387 = passConfig.Get<WorldGenRange>("ExplosiveTrapCount").GetRandom(WorldGen.genRand);
|
|
if (WorldGen.getGoodWorldGen)
|
|
num387 = (int) ((double) num387 * 1.5);
|
|
int num388 = 0;
|
|
while (num388 < num387)
|
|
{
|
|
if (biome5.Place(WorldGen.RandomWorldPoint((int) rockLayer, WorldGen.beachDistance, 200, WorldGen.beachDistance), structures))
|
|
++num388;
|
|
}
|
|
}
|
|
progress.Set(0.3f);
|
|
progress.Set(5f / num381);
|
|
MahoganyTreeBiome biome6 = configuration.CreateBiome<MahoganyTreeBiome>();
|
|
int random9 = passConfig.Get<WorldGenRange>("LivingTreeCount").GetRandom(WorldGen.genRand);
|
|
int num389 = 0;
|
|
for (int index = 0; num389 < random9 && index < 20000; ++index)
|
|
{
|
|
if (biome6.Place(WorldGen.RandomWorldPoint((int) Main.worldSurface + 50, 50, 500, 50), structures))
|
|
++num389;
|
|
}
|
|
progress.Set(0.4f);
|
|
progress.Set(6f / num381);
|
|
progress.Set(7f / num381);
|
|
TrackGenerator trackGenerator = new TrackGenerator();
|
|
int random10 = passConfig.Get<WorldGenRange>("LongTrackCount").GetRandom(WorldGen.genRand);
|
|
WorldGenRange worldGenRange1 = passConfig.Get<WorldGenRange>("LongTrackLength");
|
|
int num390 = Main.maxTilesX * 10;
|
|
int num391 = 0;
|
|
int num392 = 0;
|
|
while (num392 < random10)
|
|
{
|
|
if (trackGenerator.Place(WorldGen.RandomWorldPoint((int) Main.worldSurface, 10, 200, 10), worldGenRange1.ScaledMinimum, worldGenRange1.ScaledMaximum))
|
|
{
|
|
++num392;
|
|
num391 = 0;
|
|
}
|
|
else
|
|
{
|
|
++num391;
|
|
if (num391 > num390)
|
|
{
|
|
++num392;
|
|
num391 = 0;
|
|
}
|
|
}
|
|
}
|
|
progress.Set(8f / num381);
|
|
int random11 = passConfig.Get<WorldGenRange>("StandardTrackCount").GetRandom(WorldGen.genRand);
|
|
WorldGenRange worldGenRange2 = passConfig.Get<WorldGenRange>("StandardTrackLength");
|
|
int num393 = 0;
|
|
while (num393 < random11)
|
|
{
|
|
if (trackGenerator.Place(WorldGen.RandomWorldPoint((int) Main.worldSurface, 10, 200, 10), worldGenRange2.ScaledMinimum, worldGenRange2.ScaledMaximum))
|
|
++num393;
|
|
}
|
|
progress.Set(9f / num381);
|
|
if (!WorldGen.notTheBees)
|
|
{
|
|
double num394 = (double) Main.maxTilesX * 0.02;
|
|
if (WorldGen.getGoodWorldGen)
|
|
{
|
|
float num395 = num381 * 2f;
|
|
}
|
|
for (int index = 0; (double) index < num394; ++index)
|
|
{
|
|
int num396 = 0;
|
|
while (num396 < 10150 && !WorldGen.placeLavaTrap(WorldGen.genRand.Next(200, Main.maxTilesX - 200), WorldGen.genRand.Next(WorldGen.lavaLine - 100, Main.maxTilesY - 210)))
|
|
++num396;
|
|
}
|
|
}
|
|
progress.Set(1f);
|
|
}));
|
|
WorldGen.AddGenerationPass("Water Plants", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[88].Value;
|
|
for (int x = 20; x < Main.maxTilesX - 20; ++x)
|
|
{
|
|
progress.Set((float) x / (float) Main.maxTilesX);
|
|
for (int index302 = 1; (double) index302 < Main.worldSurface; ++index302)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0 && Main.tile[x, index302].liquid > (byte) 0)
|
|
{
|
|
if (!Main.tile[x, index302].active())
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceLilyPad(x, index302);
|
|
}
|
|
else
|
|
{
|
|
Point point = WorldGen.PlaceCatTail(x, index302);
|
|
if (WorldGen.InWorld(point.X, point.Y))
|
|
{
|
|
int num397 = WorldGen.genRand.Next(14);
|
|
for (int index303 = 0; index303 < num397; ++index303)
|
|
WorldGen.GrowCatTail(point.X, point.Y);
|
|
WorldGen.SquareTileFrame(point.X, point.Y);
|
|
}
|
|
}
|
|
}
|
|
if ((!Main.tile[x, index302].active() || Main.tile[x, index302].type == (ushort) 61 || Main.tile[x, index302].type == (ushort) 74) && WorldGen.PlaceBamboo(x, index302))
|
|
{
|
|
int num398 = WorldGen.genRand.Next(10, 20);
|
|
int num399 = 0;
|
|
while (num399 < num398 && WorldGen.PlaceBamboo(x, index302 - num399))
|
|
++num399;
|
|
}
|
|
}
|
|
}
|
|
for (int underworldLayer = Main.UnderworldLayer; (double) underworldLayer > Main.worldSurface; --underworldLayer)
|
|
{
|
|
if (Main.tile[x, underworldLayer].type == (ushort) 53 && WorldGen.genRand.Next(3) != 0)
|
|
WorldGen.GrowCheckSeaweed(x, underworldLayer);
|
|
else if (Main.tile[x, underworldLayer].type == (ushort) 549)
|
|
WorldGen.GrowCheckSeaweed(x, underworldLayer);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Stalac", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Set(1f);
|
|
for (int index = 20; index < Main.maxTilesX - 20; ++index)
|
|
{
|
|
for (int worldSurface5 = (int) Main.worldSurface; worldSurface5 < Main.maxTilesY - 20; ++worldSurface5)
|
|
{
|
|
if ((WorldGen.drunkWorldGen || WorldGen.genRand.Next(5) == 0) && Main.tile[index, worldSurface5 - 1].liquid == (byte) 0)
|
|
{
|
|
int num400 = WorldGen.genRand.Next(7);
|
|
int treeTileType = 0;
|
|
switch (num400)
|
|
{
|
|
case 0:
|
|
treeTileType = 583;
|
|
break;
|
|
case 1:
|
|
treeTileType = 584;
|
|
break;
|
|
case 2:
|
|
treeTileType = 585;
|
|
break;
|
|
case 3:
|
|
treeTileType = 586;
|
|
break;
|
|
case 4:
|
|
treeTileType = 587;
|
|
break;
|
|
case 5:
|
|
treeTileType = 588;
|
|
break;
|
|
case 6:
|
|
treeTileType = 589;
|
|
break;
|
|
}
|
|
WorldGen.TryGrowingTreeByType(treeTileType, index, worldSurface5);
|
|
}
|
|
if (!WorldGen.oceanDepths(index, worldSurface5) && !Main.tile[index, worldSurface5].active() && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if ((Main.tile[index, worldSurface5 - 1].type == (ushort) 1 || Main.tile[index, worldSurface5 - 1].type == (ushort) 147 || Main.tile[index, worldSurface5 - 1].type == (ushort) 161 || Main.tile[index, worldSurface5 - 1].type == (ushort) 25 || Main.tile[index, worldSurface5 - 1].type == (ushort) 203 || Main.tileStone[(int) Main.tile[index, worldSurface5 - 1].type] || Main.tileMoss[(int) Main.tile[index, worldSurface5 - 1].type]) && !Main.tile[index, worldSurface5].active() && !Main.tile[index, worldSurface5 + 1].active())
|
|
Main.tile[index, worldSurface5 - 1].slope((byte) 0);
|
|
if ((Main.tile[index, worldSurface5 + 1].type == (ushort) 1 || Main.tile[index, worldSurface5 + 1].type == (ushort) 147 || Main.tile[index, worldSurface5 + 1].type == (ushort) 161 || Main.tile[index, worldSurface5 + 1].type == (ushort) 25 || Main.tile[index, worldSurface5 + 1].type == (ushort) 203 || Main.tileStone[(int) Main.tile[index, worldSurface5 + 1].type] || Main.tileMoss[(int) Main.tile[index, worldSurface5 + 1].type]) && !Main.tile[index, worldSurface5].active() && !Main.tile[index, worldSurface5 - 1].active())
|
|
Main.tile[index, worldSurface5 + 1].slope((byte) 0);
|
|
WorldGen.PlaceTight(index, worldSurface5);
|
|
}
|
|
}
|
|
for (int y = 5; y < (int) Main.worldSurface; ++y)
|
|
{
|
|
if ((Main.tile[index, y - 1].type == (ushort) 147 || Main.tile[index, y - 1].type == (ushort) 161) && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (!Main.tile[index, y].active() && !Main.tile[index, y + 1].active())
|
|
Main.tile[index, y - 1].slope((byte) 0);
|
|
WorldGen.PlaceTight(index, y);
|
|
}
|
|
if ((Main.tile[index, y - 1].type == (ushort) 25 || Main.tile[index, y - 1].type == (ushort) 203) && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (!Main.tile[index, y].active() && !Main.tile[index, y + 1].active())
|
|
Main.tile[index, y - 1].slope((byte) 0);
|
|
WorldGen.PlaceTight(index, y);
|
|
}
|
|
if ((Main.tile[index, y + 1].type == (ushort) 25 || Main.tile[index, y + 1].type == (ushort) 203) && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (!Main.tile[index, y].active() && !Main.tile[index, y - 1].active())
|
|
Main.tile[index, y + 1].slope((byte) 0);
|
|
WorldGen.PlaceTight(index, y);
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Remove Broken Traps", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
progress.Message = Lang.gen[82].Value;
|
|
List<Point> pointsWeAlreadyWentOver = new List<Point>();
|
|
int num401 = 50;
|
|
for (int x = num401; x < Main.maxTilesX - num401; ++x)
|
|
{
|
|
float num402 = (float) (x - num401) / (float) (Main.maxTilesX - num401 * 2);
|
|
progress.Set(num402);
|
|
for (int y = 50; y < Main.maxTilesY - 50; ++y)
|
|
{
|
|
if (Main.tile[x, y].wire() && !pointsWeAlreadyWentOver.Contains(new Point(x, y)))
|
|
WorldGen.ClearBrokenTraps(new Point(x, y), pointsWeAlreadyWentOver);
|
|
}
|
|
}
|
|
}));
|
|
WorldGen.AddGenerationPass("Final Cleanup", (WorldGenLegacyMethod) ((progress, passConfig) =>
|
|
{
|
|
WorldGen.FillWallHolesInArea(new Microsoft.Xna.Framework.Rectangle(0, 0, Main.maxTilesX, (int) Main.worldSurface));
|
|
progress.Message = Lang.gen[86].Value;
|
|
for (int index304 = 0; index304 < Main.maxTilesX; ++index304)
|
|
{
|
|
progress.Set((float) index304 / (float) Main.maxTilesX);
|
|
for (int index305 = 0; index305 < Main.maxTilesY; ++index305)
|
|
{
|
|
if (Main.tile[index304, index305].active() && !WorldGen.SolidTile(index304, index305 + 1) && (Main.tile[index304, index305].type == (ushort) 53 || Main.tile[index304, index305].type == (ushort) 112 || Main.tile[index304, index305].type == (ushort) 234 || Main.tile[index304, index305].type == (ushort) 224 || Main.tile[index304, index305].type == (ushort) 123))
|
|
{
|
|
if ((double) index305 < Main.worldSurface + 10.0 && !Main.tile[index304, index305 + 1].active() && Main.tile[index304, index305 + 1].wall != (ushort) 191 && !WorldGen.oceanDepths(index304, index305))
|
|
{
|
|
int num403 = 10;
|
|
int index306 = index305 + 1;
|
|
for (int index307 = index306; index307 < index306 + 10; ++index307)
|
|
{
|
|
if (Main.tile[index304, index307].active() && Main.tile[index304, index307].type == (ushort) 314)
|
|
{
|
|
num403 = 0;
|
|
break;
|
|
}
|
|
}
|
|
for (; !Main.tile[index304, index306].active() && num403 > 0 && index306 < Main.maxTilesY - 50; --num403)
|
|
{
|
|
Main.tile[index304, index306 - 1].slope((byte) 0);
|
|
Main.tile[index304, index306 - 1].halfBrick(false);
|
|
Main.tile[index304, index306].active(true);
|
|
Main.tile[index304, index306].type = Main.tile[index304, index305].type;
|
|
Main.tile[index304, index306].slope((byte) 0);
|
|
Main.tile[index304, index306].halfBrick(false);
|
|
++index306;
|
|
}
|
|
if (num403 == 0 && !Main.tile[index304, index306].active())
|
|
{
|
|
switch (Main.tile[index304, index305].type)
|
|
{
|
|
case 53:
|
|
Main.tile[index304, index306].type = (ushort) 397;
|
|
Main.tile[index304, index306].active(true);
|
|
break;
|
|
case 112:
|
|
Main.tile[index304, index306].type = (ushort) 398;
|
|
Main.tile[index304, index306].active(true);
|
|
break;
|
|
case 123:
|
|
Main.tile[index304, index306].type = (ushort) 1;
|
|
Main.tile[index304, index306].active(true);
|
|
break;
|
|
case 224:
|
|
Main.tile[index304, index306].type = (ushort) 147;
|
|
Main.tile[index304, index306].active(true);
|
|
break;
|
|
case 234:
|
|
Main.tile[index304, index306].type = (ushort) 399;
|
|
Main.tile[index304, index306].active(true);
|
|
break;
|
|
}
|
|
}
|
|
else if (Main.tile[index304, index306].active() && Main.tileSolid[(int) Main.tile[index304, index306].type] && !Main.tileSolidTop[(int) Main.tile[index304, index306].type])
|
|
{
|
|
Main.tile[index304, index306].slope((byte) 0);
|
|
Main.tile[index304, index306].halfBrick(false);
|
|
}
|
|
}
|
|
else if (Main.tileSolid[(int) Main.tile[index304, index305 + 1].type] && !Main.tileSolidTop[(int) Main.tile[index304, index305 + 1].type] && (Main.tile[index304, index305 + 1].topSlope() || Main.tile[index304, index305 + 1].halfBrick()))
|
|
{
|
|
Main.tile[index304, index305 + 1].slope((byte) 0);
|
|
Main.tile[index304, index305 + 1].halfBrick(false);
|
|
}
|
|
else
|
|
{
|
|
switch (Main.tile[index304, index305].type)
|
|
{
|
|
case 53:
|
|
Main.tile[index304, index305].type = (ushort) 397;
|
|
break;
|
|
case 112:
|
|
Main.tile[index304, index305].type = (ushort) 398;
|
|
break;
|
|
case 123:
|
|
Main.tile[index304, index305].type = (ushort) 1;
|
|
break;
|
|
case 224:
|
|
Main.tile[index304, index305].type = (ushort) 147;
|
|
break;
|
|
case 234:
|
|
Main.tile[index304, index305].type = (ushort) 399;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ((Main.tile[index304, index305].wall == (ushort) 187 || Main.tile[index304, index305].wall == (ushort) 216) && Main.tile[index304, index305].liquid > (byte) 0)
|
|
{
|
|
Main.tile[index304, index305].liquid = byte.MaxValue;
|
|
Main.tile[index304, index305].lava(true);
|
|
}
|
|
if (Main.tile[index304, index305].type == (ushort) 485 || Main.tile[index304, index305].type == (ushort) 187 || Main.tile[index304, index305].type == (ushort) 165)
|
|
WorldGen.TileFrame(index304, index305);
|
|
if (Main.tile[index304, index305].type == (ushort) 28)
|
|
WorldGen.TileFrame(index304, index305);
|
|
if (Main.tile[index304, index305].type == (ushort) 137)
|
|
{
|
|
Main.tile[index304, index305].slope((byte) 0);
|
|
Main.tile[index304, index305].halfBrick(false);
|
|
}
|
|
if (Main.tile[index304, index305].active() && TileID.Sets.Boulders[(int) Main.tile[index304, index305].type])
|
|
{
|
|
int num404 = (int) Main.tile[index304, index305].frameX / 18;
|
|
int num405 = index304 - num404;
|
|
int num406 = (int) Main.tile[index304, index305].frameY / 18;
|
|
int num407 = index305 - num406;
|
|
for (int index308 = 0; index308 < 2; ++index308)
|
|
{
|
|
for (int index309 = 0; index309 < 2; ++index309)
|
|
{
|
|
int index310 = num405 + index308;
|
|
int index311 = num407 + index309;
|
|
Main.tile[index310, index311].active(true);
|
|
Main.tile[index310, index311].slope((byte) 0);
|
|
Main.tile[index310, index311].halfBrick(false);
|
|
Main.tile[index310, index311].type = Main.tile[index304, index305].type;
|
|
Main.tile[index310, index311].frameX = (short) (index308 * 18);
|
|
Main.tile[index310, index311].frameY = (short) (index309 * 18);
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[index304, index305].type == (ushort) 323 && Main.tile[index304, index305].liquid > (byte) 0)
|
|
WorldGen.KillTile(index304, index305);
|
|
if (Main.wallDungeon[(int) Main.tile[index304, index305].wall])
|
|
{
|
|
Main.tile[index304, index305].lava(false);
|
|
if (Main.tile[index304, index305].active() && Main.tile[index304, index305].type == (ushort) 56)
|
|
{
|
|
WorldGen.KillTile(index304, index305);
|
|
Main.tile[index304, index305].lava(false);
|
|
Main.tile[index304, index305].liquid = byte.MaxValue;
|
|
}
|
|
}
|
|
if (Main.tile[index304, index305].active() && Main.tile[index304, index305].type == (ushort) 314)
|
|
{
|
|
int num408 = 15;
|
|
int num409 = 1;
|
|
for (int index312 = index305; index305 - index312 < num408; --index312)
|
|
Main.tile[index304, index312].liquid = (byte) 0;
|
|
for (int index313 = index305; index313 - index305 < num409; ++index313)
|
|
Main.tile[index304, index313].liquid = (byte) 0;
|
|
}
|
|
if (Main.tile[index304, index305].active() && Main.tile[index304, index305].type == (ushort) 332 && !Main.tile[index304, index305 + 1].active())
|
|
{
|
|
Main.tile[index304, index305 + 1].ClearEverything();
|
|
Main.tile[index304, index305 + 1].active(true);
|
|
Main.tile[index304, index305 + 1].type = (ushort) 332;
|
|
}
|
|
if (index304 > WorldGen.beachDistance && index304 < Main.maxTilesX - WorldGen.beachDistance && (double) index305 < Main.worldSurface && Main.tile[index304, index305].liquid > (byte) 0 && Main.tile[index304, index305].liquid < byte.MaxValue && Main.tile[index304 - 1, index305].liquid < byte.MaxValue && Main.tile[index304 + 1, index305].liquid < byte.MaxValue && Main.tile[index304, index305 + 1].liquid < byte.MaxValue && !TileID.Sets.Clouds[(int) Main.tile[index304 - 1, index305].type] && !TileID.Sets.Clouds[(int) Main.tile[index304 + 1, index305].type] && !TileID.Sets.Clouds[(int) Main.tile[index304, index305 + 1].type])
|
|
Main.tile[index304, index305].liquid = (byte) 0;
|
|
}
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
WorldGen.FinishDrunkGen();
|
|
if (WorldGen.notTheBees)
|
|
{
|
|
WorldGen.NotTheBees();
|
|
WorldGen.FinishNotTheBees();
|
|
WorldGen.notTheBees = false;
|
|
}
|
|
if (WorldGen.getGoodWorldGen)
|
|
{
|
|
WorldGen.FinishGetGoodWorld();
|
|
WorldGen.getGoodWorldGen = false;
|
|
}
|
|
WorldGen.noTileActions = false;
|
|
Main.tileSolid[(int) WorldGen.crackedType] = true;
|
|
Main.tileSolid[484] = true;
|
|
WorldGen.gen = false;
|
|
Main.AnglerQuestSwap();
|
|
WorldGen.skipFramingDuringGen = false;
|
|
progress.Message = Lang.gen[87].Value;
|
|
}));
|
|
WorldGen._generator.GenerateWorld(customProgressObject);
|
|
WorldGen.ConsumePostGenActions(structures);
|
|
Main.WorldFileMetadata = FileMetadata.FromCurrentSettings(FileType.World);
|
|
Main.NotifyOfEvent(GameNotificationType.WorldGen);
|
|
WorldGen.drunkWorldGenText = false;
|
|
}
|
|
|
|
private static void NotTheBees()
|
|
{
|
|
if (!WorldGen.notTheBees)
|
|
return;
|
|
for (int x = 0; x < Main.maxTilesX; ++x)
|
|
{
|
|
for (int y = 0; y < Main.maxTilesY - 180; ++y)
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 52)
|
|
Main.tile[x, y].type = (ushort) 62;
|
|
if ((WorldGen.SolidOrSlopedTile(x, y) || TileID.Sets.CrackedBricks[(int) Main.tile[x, y].type]) && !TileID.Sets.Ore[(int) Main.tile[x, y].type] && Main.tile[x, y].type != (ushort) 123 && Main.tile[x, y].type != (ushort) 40)
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 191 || Main.tile[x, y].type == (ushort) 383)
|
|
Main.tile[x, y].type = (ushort) 383;
|
|
else if (Main.tile[x, y].type == (ushort) 192 || Main.tile[x, y].type == (ushort) 384)
|
|
Main.tile[x, y].type = (ushort) 384;
|
|
else if (Main.tile[x, y].type != (ushort) 151 && Main.tile[x, y].type != (ushort) 189 && Main.tile[x, y].type != (ushort) 196 && Main.tile[x, y].type != (ushort) 120 && Main.tile[x, y].type != (ushort) 158 && Main.tile[x, y].type != (ushort) 175 && Main.tile[x, y].type != (ushort) 45 && Main.tile[x, y].type != (ushort) 119)
|
|
{
|
|
if (Main.tile[x, y].type >= (ushort) 63 && Main.tile[x, y].type <= (ushort) 68)
|
|
Main.tile[x, y].type = (ushort) 230;
|
|
else if (Main.tile[x, y].type != (ushort) 57 && Main.tile[x, y].type != (ushort) 76 && Main.tile[x, y].type != (ushort) 75 && Main.tile[x, y].type != (ushort) 229 && Main.tile[x, y].type != (ushort) 230 && Main.tile[x, y].type != (ushort) 407 && Main.tile[x, y].type != (ushort) 404)
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 224)
|
|
Main.tile[x, y].type = (ushort) 229;
|
|
else if (Main.tile[x, y].type == (ushort) 53)
|
|
{
|
|
if (x < WorldGen.beachDistance + WorldGen.genRand.Next(3) || x > Main.maxTilesX - WorldGen.beachDistance - WorldGen.genRand.Next(3))
|
|
Main.tile[x, y].type = (ushort) 229;
|
|
}
|
|
else if ((x <= WorldGen.beachDistance - WorldGen.genRand.Next(3) || x >= Main.maxTilesX - WorldGen.beachDistance + WorldGen.genRand.Next(3) || Main.tile[x, y].type != (ushort) 397 && Main.tile[x, y].type != (ushort) 396) && Main.tile[x, y].type != (ushort) 10 && Main.tile[x, y].type != (ushort) 203 && Main.tile[x, y].type != (ushort) 25 && Main.tile[x, y].type != (ushort) 137 && Main.tile[x, y].type != (ushort) 138 && Main.tile[x, y].type != (ushort) 141)
|
|
{
|
|
if (Main.tileDungeon[(int) Main.tile[x, y].type] || TileID.Sets.CrackedBricks[(int) Main.tile[x, y].type])
|
|
Main.tile[x, y].color((byte) 14);
|
|
else if (Main.tile[x, y].type == (ushort) 226)
|
|
Main.tile[x, y].color((byte) 15);
|
|
else if (Main.tile[x, y].type != (ushort) 202 && Main.tile[x, y].type != (ushort) 70 && Main.tile[x, y].type != (ushort) 48 && Main.tile[x, y].type != (ushort) 232)
|
|
Main.tile[x, y].type = !TileID.Sets.Conversion.Grass[(int) Main.tile[x, y].type] ? (Main.tile[x, y].type == (ushort) 0 || Main.tile[x, y].type == (ushort) 59 ? (ushort) 59 : (y <= WorldGen.lavaLine + WorldGen.genRand.Next(-2, 3) + 2 ? (ushort) 225 : (ushort) 230)) : (y <= WorldGen.lavaLine + WorldGen.genRand.Next(-2, 3) + 2 ? (ushort) 60 : (ushort) 70);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[x, y].wall != (ushort) 15 && Main.tile[x, y].wall != (ushort) 64 && Main.tile[x, y].wall != (ushort) 204 && Main.tile[x, y].wall != (ushort) 205 && Main.tile[x, y].wall != (ushort) 206 && Main.tile[x, y].wall != (ushort) 207 && Main.tile[x, y].wall != (ushort) 23 && Main.tile[x, y].wall != (ushort) 24 && Main.tile[x, y].wall != (ushort) 42 && Main.tile[x, y].wall != (ushort) 10 && Main.tile[x, y].wall != (ushort) 21 && Main.tile[x, y].wall != (ushort) 82 && Main.tile[x, y].wall != (ushort) 187 && Main.tile[x, y].wall != (ushort) 216 && Main.tile[x, y].wall != (ushort) 34 && Main.tile[x, y].wall != (ushort) 244)
|
|
{
|
|
if (Main.tile[x, y].wall == (ushort) 87)
|
|
Main.tile[x, y].wallColor((byte) 15);
|
|
else if (Main.wallDungeon[(int) Main.tile[x, y].wall])
|
|
Main.tile[x, y].wallColor((byte) 14);
|
|
else if (Main.tile[x, y].wall == (ushort) 2)
|
|
Main.tile[x, y].wall = (ushort) 2;
|
|
else if (Main.tile[x, y].wall == (ushort) 196)
|
|
Main.tile[x, y].wall = (ushort) 196;
|
|
else if (Main.tile[x, y].wall == (ushort) 197)
|
|
Main.tile[x, y].wall = (ushort) 197;
|
|
else if (Main.tile[x, y].wall == (ushort) 198)
|
|
Main.tile[x, y].wall = (ushort) 198;
|
|
else if (Main.tile[x, y].wall == (ushort) 199)
|
|
Main.tile[x, y].wall = (ushort) 199;
|
|
else if (Main.tile[x, y].wall == (ushort) 63)
|
|
Main.tile[x, y].wall = (ushort) 64;
|
|
else if (Main.tile[x, y].wall != (ushort) 3 && Main.tile[x, y].wall != (ushort) 83 && Main.tile[x, y].wall != (ushort) 73 && Main.tile[x, y].wall != (ushort) 13 && Main.tile[x, y].wall != (ushort) 14 && Main.tile[x, y].wall > (ushort) 0)
|
|
Main.tile[x, y].wall = (ushort) 86;
|
|
}
|
|
if (Main.tile[x, y].liquid > (byte) 0 && y <= WorldGen.lavaLine + 2)
|
|
{
|
|
if ((double) y > Main.rockLayer && (x < WorldGen.beachDistance + 200 || x > Main.maxTilesX - WorldGen.beachDistance - 200))
|
|
Main.tile[x, y].honey(false);
|
|
else if (Main.wallDungeon[(int) Main.tile[x, y].wall])
|
|
Main.tile[x, y].honey(false);
|
|
else
|
|
Main.tile[x, y].honey(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void FinishNotTheBees()
|
|
{
|
|
if (!WorldGen.notTheBees)
|
|
return;
|
|
int num1 = 0;
|
|
for (int index1 = 20; (double) index1 < Main.worldSurface; ++index1)
|
|
{
|
|
for (int index2 = 20; index2 < Main.maxTilesX - 20; ++index2)
|
|
{
|
|
if (Main.tile[index2, index1].active() && TileID.Sets.Clouds[(int) Main.tile[index2, index1].type])
|
|
{
|
|
num1 = index1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (int i1 = 20; i1 < Main.maxTilesX - 20; ++i1)
|
|
{
|
|
for (int j = 20; j < Main.maxTilesY - 20; ++j)
|
|
{
|
|
int num2 = 20;
|
|
if (Main.tile[i1, j].type == (ushort) 25)
|
|
{
|
|
for (int i2 = i1 - num2; i2 <= i1 + num2; ++i2)
|
|
{
|
|
for (int index = j - num2; index <= j + num2; ++index)
|
|
{
|
|
if (Main.tile[i2, index].type == (ushort) 60)
|
|
{
|
|
if (Main.tile[i2, index + 1].type == (ushort) 444)
|
|
WorldGen.KillTile(i2, index + 1);
|
|
Main.tile[i2, index].type = (ushort) 23;
|
|
if (Main.tile[i2, index - 1].type == (ushort) 61 || Main.tile[i2, index - 1].type == (ushort) 74)
|
|
{
|
|
Main.tile[i2, index - 1].active(false);
|
|
WorldGen.PlaceTile(i2, index - 1, 24);
|
|
}
|
|
}
|
|
else if (Main.tile[i2, index - 1].type == (ushort) 233 || Main.tile[i2, index - 1].type == (ushort) 82)
|
|
WorldGen.KillTile(i2, index - 1);
|
|
if (Main.tile[i2, index].type == (ushort) 59)
|
|
Main.tile[i2, index].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i1, j].type == (ushort) 203)
|
|
{
|
|
for (int i3 = i1 - num2; i3 <= i1 + num2; ++i3)
|
|
{
|
|
for (int index = j - num2; index <= j + num2; ++index)
|
|
{
|
|
if (Main.tile[i3, index].type == (ushort) 60)
|
|
{
|
|
if (Main.tile[i3, index + 1].type == (ushort) 444)
|
|
WorldGen.KillTile(i3, index + 1);
|
|
Main.tile[i3, index].type = (ushort) 199;
|
|
if (Main.tile[i3, index - 1].type == (ushort) 61 || Main.tile[i3, index - 1].type == (ushort) 74)
|
|
{
|
|
Main.tile[i3, index - 1].active(false);
|
|
WorldGen.PlaceTile(i3, index - 1, 201);
|
|
}
|
|
else if (Main.tile[i3, index - 1].type == (ushort) 233 || Main.tile[i3, index - 1].type == (ushort) 82)
|
|
WorldGen.KillTile(i3, index - 1);
|
|
}
|
|
if (Main.tile[i3, index].type == (ushort) 59)
|
|
Main.tile[i3, index].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i1, j].type == (ushort) 382 || Main.tile[i1, j].type == (ushort) 52)
|
|
Main.tile[i1, j].type = (ushort) 62;
|
|
if (j > WorldGen.lavaLine + WorldGen.genRand.Next(-2, 3) + 2)
|
|
WorldGen.SpreadGrass(i1, j, 59, 70);
|
|
else
|
|
WorldGen.SpreadGrass(i1, j, 59, 60);
|
|
if ((double) j > Main.rockLayer + 20.0 + (double) WorldGen.genRand.Next(-2, 3) && j <= WorldGen.lavaLine + 2 - 20 - WorldGen.genRand.Next(-2, 3) && (i1 < WorldGen.beachDistance + 200 - 20 - WorldGen.genRand.Next(-2, 3) || i1 > Main.maxTilesX - WorldGen.beachDistance - 200 + 20 + WorldGen.genRand.Next(-2, 3)))
|
|
{
|
|
if (Main.tile[i1, j].liquid > (byte) 0)
|
|
{
|
|
Main.tile[i1, j].honey(false);
|
|
Main.tile[i1, j].lava(false);
|
|
}
|
|
if (Main.tile[i1, j].type == (ushort) 59)
|
|
{
|
|
bool flag = false;
|
|
for (int index3 = i1 - 1; index3 <= i1 + 1; ++index3)
|
|
{
|
|
for (int index4 = j - 1; index4 <= j + 1; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].type == (ushort) 60)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag)
|
|
Main.tile[i1, j].type = (double) j >= (Main.rockLayer + (double) WorldGen.lavaLine) / 2.0 ? (ushort) 147 : (ushort) 161;
|
|
}
|
|
}
|
|
if (Main.tile[i1, j].type == (ushort) 7 || Main.tile[i1, j].type == (ushort) 166 || Main.tile[i1, j].type == (ushort) 6 || Main.tile[i1, j].type == (ushort) 167)
|
|
{
|
|
if ((double) j > ((double) WorldGen.lavaLine + Main.rockLayer * 2.0) / 3.0 + (double) WorldGen.genRand.Next(-2, 3) + 2.0)
|
|
Main.tile[i1, j].type = (ushort) 0;
|
|
}
|
|
else if ((Main.tile[i1, j].type == (ushort) 123 || Main.tile[i1, j].type == (ushort) 40) && (double) j > ((double) WorldGen.lavaLine + Main.rockLayer) / 2.0 + (double) WorldGen.genRand.Next(-2, 3) + 2.0)
|
|
Main.tile[i1, j].type = (ushort) 1;
|
|
if (j > num1 && (Main.tile[i1, j].liquid == (byte) 0 || !Main.tile[i1, j].lava()) && WorldGen.genRand.Next(25) == 0)
|
|
WorldGen.PlaceTile(i1, j, 231, true);
|
|
}
|
|
}
|
|
for (int checkedY = 20; checkedY < num1; ++checkedY)
|
|
{
|
|
for (int index = 20; index <= Main.maxTilesX - 20; ++index)
|
|
{
|
|
Main.tile[index, checkedY].honey(false);
|
|
if (Main.tile[index, checkedY].type == (ushort) 375)
|
|
Main.tile[index, checkedY].type = (ushort) 373;
|
|
if (Main.tile[index, checkedY].type == (ushort) 60)
|
|
{
|
|
Main.tile[index, checkedY].type = (ushort) 2;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowTreeWithSettings(index, checkedY, WorldGen.GrowTreeSettings.Profiles.VanityTree_Willow);
|
|
else
|
|
WorldGen.GrowTreeWithSettings(index, checkedY, WorldGen.GrowTreeSettings.Profiles.VanityTree_Sakura);
|
|
if (!Main.tile[index, checkedY - 1].active())
|
|
WorldGen.PlaceTile(index, checkedY - 1, 3);
|
|
}
|
|
if (Main.tile[index, checkedY].type == (ushort) 59)
|
|
Main.tile[index, checkedY].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void FinishGetGoodWorld()
|
|
{
|
|
int num1 = 0;
|
|
for (int index1 = 20; (double) index1 < Main.worldSurface; ++index1)
|
|
{
|
|
for (int index2 = 20; index2 < Main.maxTilesX - 20; ++index2)
|
|
{
|
|
if (Main.tile[index2, index1].active() && TileID.Sets.Clouds[(int) Main.tile[index2, index1].type])
|
|
{
|
|
num1 = index1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
byte num2 = (byte) WorldGen.genRand.Next(13, 25);
|
|
for (int index3 = 0; index3 < Main.maxTilesX; ++index3)
|
|
{
|
|
bool flag = false;
|
|
for (int index4 = 0; index4 < Main.maxTilesY; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && Main.tileDungeon[(int) Main.tile[index3, index4].type])
|
|
{
|
|
if (Main.tile[index3, index4].type == (ushort) 44)
|
|
{
|
|
num2 = (byte) WorldGen.genRand.Next(13, 15);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num2 = (byte) WorldGen.genRand.Next(23, 25);
|
|
}
|
|
if (Main.tile[index3, index4].type == (ushort) 43)
|
|
num2 = (byte) WorldGen.genRand.Next(15, 19);
|
|
if (Main.tile[index3, index4].type == (ushort) 41)
|
|
num2 = (byte) WorldGen.genRand.Next(19, 23);
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
for (int index = 5; index < Main.maxTilesY - 5; ++index)
|
|
{
|
|
if (Main.tile[i, index].active() && (Main.tileDungeon[(int) Main.tile[i, index].type] || TileID.Sets.CrackedBricks[(int) Main.tile[i, index].type]))
|
|
Main.tile[i, index].color(num2);
|
|
if (Main.wallDungeon[(int) Main.tile[i, index].wall])
|
|
Main.tile[i, index].wallColor(num2);
|
|
if (Main.tile[i, index].active() && (Main.tile[i, index].type == (ushort) 226 || Main.tile[i, index].type == (ushort) 137 && Main.tile[i, index].frameY > (short) 0))
|
|
Main.tile[i, index].color((byte) 17);
|
|
if (Main.tile[i, index].wall == (ushort) 87)
|
|
Main.tile[i, index].wallColor((byte) 25);
|
|
if (Main.tile[i, index].active())
|
|
{
|
|
if (Main.tile[i, index].type == (ushort) 57 && WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
if (Main.tile[i, index - 1].type == (ushort) 57)
|
|
Main.tile[i, index].active(false);
|
|
Main.tile[i, index].liquid = byte.MaxValue;
|
|
Main.tile[i, index].lava(true);
|
|
}
|
|
if (index < num1 && Main.tile[i, index].type == (ushort) 2)
|
|
{
|
|
Main.tile[i, index].type = !WorldGen.crimson ? (ushort) 23 : (ushort) 199;
|
|
if (Main.tile[i, index - 1].type == (ushort) 3)
|
|
Main.tile[i, index - 1].active(false);
|
|
if (Main.tile[i, index - 1].type == (ushort) 73)
|
|
Main.tile[i, index - 1].active(false);
|
|
if (Main.tile[i, index - 1].type == (ushort) 27)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 596)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 616)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 82)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 83)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 186)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 187)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 185)
|
|
WorldGen.KillTile(i, index - 1);
|
|
if (Main.tile[i, index - 1].type == (ushort) 227)
|
|
WorldGen.KillTile(i, index - 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index5 = 0; index5 < 8000 && Main.chest[index5] != null; ++index5)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0 && Main.chest[index5].item[1].stack != 0)
|
|
{
|
|
for (int index6 = 1; index6 < 40; ++index6)
|
|
{
|
|
if (Main.chest[index5].item[index6].stack == 0)
|
|
{
|
|
Main.chest[index5].item[index6].SetDefaults(678);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void FinishDrunkGen()
|
|
{
|
|
byte color = (byte) WorldGen.genRand.Next(13, 25);
|
|
byte num = 16;
|
|
for (int index1 = 0; index1 < Main.maxTilesX; ++index1)
|
|
{
|
|
bool flag = false;
|
|
for (int index2 = 0; index2 < Main.maxTilesY; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tileDungeon[(int) Main.tile[index1, index2].type])
|
|
{
|
|
if (Main.tile[index1, index2].type == (ushort) 44)
|
|
{
|
|
color = (byte) WorldGen.genRand.Next(13, 15);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
color = (byte) WorldGen.genRand.Next(23, 25);
|
|
}
|
|
if (Main.tile[index1, index2].type == (ushort) 43)
|
|
color = (byte) WorldGen.genRand.Next(15, 19);
|
|
if (Main.tile[index1, index2].type == (ushort) 41)
|
|
color = (byte) WorldGen.genRand.Next(19, 23);
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
for (int index3 = 0; index3 < Main.maxTilesX; ++index3)
|
|
{
|
|
for (int index4 = 0; index4 < Main.maxTilesY; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && (Main.tileDungeon[(int) Main.tile[index3, index4].type] || TileID.Sets.CrackedBricks[(int) Main.tile[index3, index4].type]))
|
|
Main.tile[index3, index4].color(color);
|
|
if (Main.wallDungeon[(int) Main.tile[index3, index4].wall])
|
|
Main.tile[index3, index4].wallColor((byte) 25);
|
|
if (Main.tile[index3, index4].active() && (Main.tile[index3, index4].type == (ushort) 226 || Main.tile[index3, index4].type == (ushort) 137 && Main.tile[index3, index4].frameY > (short) 0))
|
|
Main.tile[index3, index4].color(num);
|
|
if (Main.tile[index3, index4].wall == (ushort) 87)
|
|
Main.tile[index3, index4].wallColor(num);
|
|
}
|
|
}
|
|
for (int index5 = 0; index5 < 8000 && Main.chest[index5] != null; ++index5)
|
|
{
|
|
if (WorldGen.genRand.Next(15) == 0 && Main.chest[index5].item[1].stack != 0)
|
|
{
|
|
for (int index6 = 1; index6 < 40; ++index6)
|
|
{
|
|
if (Main.chest[index5].item[index6].stack == 0)
|
|
{
|
|
Main.chest[index5].item[index6].SetDefaults(5001);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(30) == 0 && Main.chest[index5].item[1].stack != 0)
|
|
{
|
|
for (int index7 = 1; index7 < 40; ++index7)
|
|
{
|
|
if (Main.chest[index5].item[index7].stack == 0)
|
|
{
|
|
Main.chest[index5].item[index7].SetDefaults(678);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool IsItATrap(Tile tile) => tile.actuator() || tile.active() && TileID.Sets.IsAMechanism[(int) tile.type];
|
|
|
|
public static bool IsItATrigger(Tile tile) => tile.active() && (TileID.Sets.IsATrigger[(int) tile.type] || tile.type == (ushort) 467 && (int) tile.frameX / 36 == 4 || tile.type == (ushort) 314 && Minecart.IsPressurePlate(tile));
|
|
|
|
public static void ClearAllBrokenTraps()
|
|
{
|
|
List<Point> pointsWeAlreadyWentOver = new List<Point>();
|
|
for (int x = 50; x < Main.maxTilesX - 50; ++x)
|
|
{
|
|
for (int y = 50; y < Main.maxTilesY - 50; ++y)
|
|
{
|
|
if (Main.tile[x, y].wire() && !pointsWeAlreadyWentOver.Contains(new Point(x, y)))
|
|
WorldGen.ClearBrokenTraps(new Point(x, y), pointsWeAlreadyWentOver);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void ClearBrokenTraps(Point startTileCoords, List<Point> pointsWeAlreadyWentOver)
|
|
{
|
|
List<Point> t1 = new List<Point>();
|
|
List<Point> t2 = new List<Point>();
|
|
List<Point> pointList = new List<Point>();
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
t2.Add(startTileCoords);
|
|
while (t2.Count > 0)
|
|
{
|
|
Utils.Swap<List<Point>>(ref t1, ref t2);
|
|
while (t1.Count > 0)
|
|
{
|
|
Point point1 = t1[0];
|
|
t1.RemoveAt(0);
|
|
if (WorldGen.InWorld(point1.X, point1.Y, 5))
|
|
{
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (tile.wire())
|
|
{
|
|
pointsWeAlreadyWentOver.Add(point1);
|
|
pointList.Add(point1);
|
|
if (WorldGen.IsItATrap(tile))
|
|
flag1 = true;
|
|
if (WorldGen.IsItATrigger(tile))
|
|
flag2 = true;
|
|
if (!(flag2 & flag1))
|
|
{
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointList.Contains(point2))
|
|
t2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointList.Contains(point2))
|
|
t2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointList.Contains(point2))
|
|
t2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointList.Contains(point2))
|
|
t2.Add(point2);
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag2 & flag1)
|
|
break;
|
|
}
|
|
if (flag2 && flag1)
|
|
return;
|
|
foreach (Point point in pointList)
|
|
{
|
|
Tile tile = Main.tile[point.X, point.Y];
|
|
tile.wire(false);
|
|
if (WorldGen.IsItATrap(tile))
|
|
{
|
|
if (tile.actuator())
|
|
Main.tile[point.X, point.Y].actuator(false);
|
|
else if (tile.type != (ushort) 105)
|
|
WorldGen.KillTile(point.X, point.Y);
|
|
}
|
|
else if (WorldGen.IsItATrigger(tile))
|
|
{
|
|
if (tile.type == (ushort) 314)
|
|
tile.frameX = (short) 1;
|
|
else
|
|
WorldGen.KillTile(point.X, point.Y);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static float TuneOceanDepth(int count, float depth, bool floridaStyle = false)
|
|
{
|
|
if (!floridaStyle)
|
|
{
|
|
if (count < 3)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.2f;
|
|
else if (count < 6)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.15f;
|
|
else if (count < 9)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.1f;
|
|
else if (count < 15)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.07f;
|
|
else if (count < 50)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.05f;
|
|
else if (count < 75)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.04f;
|
|
else if (count < 100)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.03f;
|
|
else if (count < 125)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.02f;
|
|
else if (count < 150)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.01f;
|
|
else if (count < 175)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.005f;
|
|
else if (count < 200)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * (1f / 1000f);
|
|
else if (count < 230)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.01f;
|
|
else if (count < 235)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.05f;
|
|
else if (count < 240)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.1f;
|
|
else if (count < 245)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.05f;
|
|
else if (count < (int) byte.MaxValue)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.01f;
|
|
}
|
|
else if (count < 3)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * (1f / 1000f);
|
|
else if (count < 6)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * (1f / 500f);
|
|
else if (count < 9)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.004f;
|
|
else if (count < 15)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.007f;
|
|
else if (count < 50)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.01f;
|
|
else if (count < 75)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.014f;
|
|
else if (count < 100)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.019f;
|
|
else if (count < 125)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.027f;
|
|
else if (count < 150)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.038f;
|
|
else if (count < 175)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.052f;
|
|
else if (count < 200)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.08f;
|
|
else if (count < 230)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.12f;
|
|
else if (count < 235)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.16f;
|
|
else if (count < 240)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.27f;
|
|
else if (count < 245)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.43f;
|
|
else if (count < (int) byte.MaxValue)
|
|
depth += (float) WorldGen.genRand.Next(10, 20) * 0.6f;
|
|
return depth;
|
|
}
|
|
|
|
public static void QueuePostGenAction(Action<StructureMap> action) => WorldGen._postGenActions.Enqueue(action);
|
|
|
|
public static void ConsumePostGenActions(StructureMap structures)
|
|
{
|
|
while (WorldGen._postGenActions.Count > 0)
|
|
WorldGen._postGenActions.Dequeue()(structures);
|
|
}
|
|
|
|
public static Point RandomRectanglePoint(Microsoft.Xna.Framework.Rectangle rectangle) => new Point(WorldGen.genRand.Next(rectangle.X, rectangle.X + rectangle.Width), WorldGen.genRand.Next(rectangle.Y, rectangle.Y + rectangle.Height));
|
|
|
|
public static Point RandomRectanglePoint(int x, int y, int width, int height) => new Point(WorldGen.genRand.Next(x, x + width), WorldGen.genRand.Next(y, y + height));
|
|
|
|
public static Point RandomWorldPoint(int padding) => WorldGen.RandomWorldPoint(padding, padding, padding, padding);
|
|
|
|
public static Point RandomWorldPoint(int top = 0, int right = 0, int bottom = 0, int left = 0) => new Point(WorldGen.genRand.Next(left, Main.maxTilesX - right), WorldGen.genRand.Next(top, Main.maxTilesY - bottom));
|
|
|
|
public static bool GrowPalmTree(int i, int y)
|
|
{
|
|
int index1 = y;
|
|
if (!WorldGen.InWorld(i, y))
|
|
return false;
|
|
while (Main.tile[i, index1].type == (ushort) 20)
|
|
{
|
|
++index1;
|
|
if (Main.tile[i, index1] == null)
|
|
return false;
|
|
}
|
|
Tile tile1 = Main.tile[i, index1];
|
|
Tile tile2 = Main.tile[i, index1 - 1];
|
|
int num1 = (int) tile1.slope();
|
|
tile1.halfBrick();
|
|
if (!tile1.active() || tile1.halfBrick() || tile1.slope() != (byte) 0 || tile2.wall != (ushort) 0 || tile2.liquid != (byte) 0 || tile1.type != (ushort) 53 && tile1.type != (ushort) 234 && tile1.type != (ushort) 116 && tile1.type != (ushort) 112 || !WorldGen.EmptyTileCheck(i, i, index1 - 2, index1 - 1, 20) || !WorldGen.EmptyTileCheck(i - 1, i + 1, index1 - 30, index1 - 3, 20))
|
|
return false;
|
|
int num2 = WorldGen.genRand.Next(10, 21);
|
|
int num3 = WorldGen.genRand.Next(-8, 9) * 2;
|
|
short num4 = 0;
|
|
for (int index2 = 0; index2 < num2; ++index2)
|
|
{
|
|
Tile tile3 = Main.tile[i, index1 - 1 - index2];
|
|
if (index2 == 0)
|
|
{
|
|
tile3.active(true);
|
|
tile3.type = (ushort) 323;
|
|
tile3.frameX = (short) 66;
|
|
tile3.frameY = (short) 0;
|
|
}
|
|
else if (index2 == num2 - 1)
|
|
{
|
|
tile3.active(true);
|
|
tile3.type = (ushort) 323;
|
|
tile3.frameX = (short) (22 * WorldGen.genRand.Next(4, 7));
|
|
tile3.frameY = num4;
|
|
}
|
|
else
|
|
{
|
|
if ((int) num4 != num3)
|
|
{
|
|
float num5 = (float) index2 / (float) num2;
|
|
if ((double) num5 >= 0.25 && ((double) num5 < 0.5 && WorldGen.genRand.Next(13) == 0 || (double) num5 < 0.699999988079071 && WorldGen.genRand.Next(9) == 0 || (double) num5 < 0.949999988079071 && WorldGen.genRand.Next(5) == 0 || true))
|
|
{
|
|
short num6 = (short) Math.Sign(num3);
|
|
num4 += (short) ((int) num6 * 2);
|
|
}
|
|
}
|
|
tile3.active(true);
|
|
tile3.type = (ushort) 323;
|
|
tile3.frameX = (short) (22 * WorldGen.genRand.Next(0, 3));
|
|
tile3.frameY = num4;
|
|
}
|
|
}
|
|
WorldGen.RangeFrame(i - 2, index1 - num2 - 1, i + 2, index1 + 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, (int) ((double) index1 - (double) num2 * 0.5), num2 + 1);
|
|
return true;
|
|
}
|
|
|
|
public static bool IsPalmOasisTree(int x) => x >= WorldGen.beachDistance && x <= Main.maxTilesX - WorldGen.beachDistance;
|
|
|
|
public static bool GrowEpicTree(int i, int y)
|
|
{
|
|
int index1 = y;
|
|
while (Main.tile[i, index1].type == (ushort) 20)
|
|
++index1;
|
|
if (Main.tile[i, index1].active() && !Main.tile[i, index1].halfBrick() && Main.tile[i, index1].slope() == (byte) 0 && Main.tile[i, index1].type == (ushort) 2 && Main.tile[i, index1 - 1].wall == (ushort) 0 && Main.tile[i, index1 - 1].liquid == (byte) 0 && (Main.tile[i - 1, index1].active() && (Main.tile[i - 1, index1].type == (ushort) 2 || Main.tile[i - 1, index1].type == (ushort) 23 || Main.tile[i - 1, index1].type == (ushort) 60 || Main.tile[i - 1, index1].type == (ushort) 109) || Main.tile[i + 1, index1].active() && (Main.tile[i + 1, index1].type == (ushort) 2 || Main.tile[i + 1, index1].type == (ushort) 23 || Main.tile[i + 1, index1].type == (ushort) 60 || Main.tile[i + 1, index1].type == (ushort) 109)))
|
|
{
|
|
int num1 = 2;
|
|
if (WorldGen.EmptyTileCheck(i - num1, i + num1, index1 - 55, index1 - 1, 20))
|
|
{
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
int num2 = WorldGen.genRand.Next(20, 30);
|
|
if (WorldGen.drunkWorldGen)
|
|
num2 = WorldGen.genRand.Next(3, 7);
|
|
for (int index2 = index1 - num2; index2 < index1; ++index2)
|
|
{
|
|
Main.tile[i, index2].frameNumber((byte) WorldGen.genRand.Next(3));
|
|
Main.tile[i, index2].active(true);
|
|
Main.tile[i, index2].type = (ushort) 5;
|
|
int num3 = WorldGen.genRand.Next(3);
|
|
int num4 = WorldGen.genRand.Next(10);
|
|
if (index2 == index1 - 1 || index2 == index1 - num2)
|
|
num4 = 0;
|
|
while (((num4 == 5 ? 1 : (num4 == 7 ? 1 : 0)) & (flag1 ? 1 : 0)) != 0 || ((num4 == 6 ? 1 : (num4 == 7 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0)
|
|
num4 = WorldGen.genRand.Next(10);
|
|
flag1 = false;
|
|
flag2 = false;
|
|
if (num4 == 5 || num4 == 7)
|
|
flag1 = true;
|
|
if (num4 == 6 || num4 == 7)
|
|
flag2 = true;
|
|
switch (num4)
|
|
{
|
|
case 1:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num4 == 5 || num4 == 7)
|
|
{
|
|
Main.tile[i - 1, index2].active(true);
|
|
Main.tile[i - 1, index2].type = (ushort) 5;
|
|
int num5 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num5 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num5 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num5 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num5 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 0;
|
|
}
|
|
if (num5 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 22;
|
|
}
|
|
if (num5 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (num4 == 6 || num4 == 7)
|
|
{
|
|
Main.tile[i + 1, index2].active(true);
|
|
Main.tile[i + 1, index2].type = (ushort) 5;
|
|
int num6 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 66;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 88;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num7 = WorldGen.genRand.Next(3);
|
|
bool flag3 = false;
|
|
bool flag4 = false;
|
|
if (Main.tile[i - 1, index1].active() && !Main.tile[i - 1, index1].halfBrick() && Main.tile[i - 1, index1].slope() == (byte) 0 && (Main.tile[i - 1, index1].type == (ushort) 2 || Main.tile[i - 1, index1].type == (ushort) 23 || Main.tile[i - 1, index1].type == (ushort) 60 || Main.tile[i - 1, index1].type == (ushort) 109))
|
|
flag3 = true;
|
|
if (Main.tile[i + 1, index1].active() && !Main.tile[i + 1, index1].halfBrick() && Main.tile[i + 1, index1].slope() == (byte) 0 && (Main.tile[i + 1, index1].type == (ushort) 2 || Main.tile[i + 1, index1].type == (ushort) 23 || Main.tile[i + 1, index1].type == (ushort) 60 || Main.tile[i + 1, index1].type == (ushort) 109))
|
|
flag4 = true;
|
|
if (!flag3)
|
|
{
|
|
if (num7 == 0)
|
|
num7 = 2;
|
|
if (num7 == 1)
|
|
num7 = 3;
|
|
}
|
|
if (!flag4)
|
|
{
|
|
if (num7 == 0)
|
|
num7 = 1;
|
|
if (num7 == 2)
|
|
num7 = 3;
|
|
}
|
|
if (flag3 && !flag4)
|
|
num7 = 2;
|
|
if (flag4 && !flag3)
|
|
num7 = 1;
|
|
if (num7 == 0 || num7 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].active(true);
|
|
Main.tile[i + 1, index1 - 1].type = (ushort) 5;
|
|
int num8 = WorldGen.genRand.Next(3);
|
|
if (num8 == 0)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num8 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num8 == 2)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
if (num7 == 0 || num7 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].active(true);
|
|
Main.tile[i - 1, index1 - 1].type = (ushort) 5;
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
if (num9 == 0)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num9 == 1)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num9 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(13) != 0)
|
|
{
|
|
int num11 = WorldGen.genRand.Next(3);
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num12 = WorldGen.genRand.Next(3);
|
|
if (num12 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num12 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num12 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
WorldGen.RangeFrame(i - 2, index1 - num2 - 1, i + 2, index1 + 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, (int) ((double) index1 - (double) num2 * 0.5), num2 + 1);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool Pyramid(int i, int j)
|
|
{
|
|
ushort num1 = 151;
|
|
int num2 = j - WorldGen.genRand.Next(0, 7);
|
|
int num3 = WorldGen.genRand.Next(9, 13);
|
|
int num4 = 1;
|
|
int num5 = j + WorldGen.genRand.Next(75, 125);
|
|
for (int index1 = num2; index1 < num5; ++index1)
|
|
{
|
|
for (int index2 = i - num4; index2 < i + num4 - 1; ++index2)
|
|
{
|
|
Main.tile[index2, index1].type = num1;
|
|
Main.tile[index2, index1].active(true);
|
|
Main.tile[index2, index1].halfBrick(false);
|
|
Main.tile[index2, index1].slope((byte) 0);
|
|
}
|
|
++num4;
|
|
}
|
|
for (int i1 = i - num4 - 5; i1 <= i + num4 + 5; ++i1)
|
|
{
|
|
for (int j1 = j - 1; j1 <= num5 + 1; ++j1)
|
|
{
|
|
bool flag = true;
|
|
for (int index3 = i1 - 1; index3 <= i1 + 1; ++index3)
|
|
{
|
|
for (int index4 = j1 - 1; index4 <= j1 + 1; ++index4)
|
|
{
|
|
if ((int) Main.tile[index3, index4].type != (int) num1)
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[i1, j1].wall = (ushort) 34;
|
|
WorldGen.SquareWallFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
int num6 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num6 = -1;
|
|
int num7 = i - num3 * num6;
|
|
int j2 = j + num3;
|
|
int num8 = WorldGen.genRand.Next(5, 8);
|
|
bool flag1 = true;
|
|
int num9 = WorldGen.genRand.Next(20, 30);
|
|
while (flag1)
|
|
{
|
|
flag1 = false;
|
|
bool flag2 = false;
|
|
for (int index5 = j2; index5 <= j2 + num8; ++index5)
|
|
{
|
|
int index6 = num7;
|
|
if (Main.tile[index6, index5 - 1].type == (ushort) 53)
|
|
flag2 = true;
|
|
if ((int) Main.tile[index6, index5].type == (int) num1)
|
|
{
|
|
Main.tile[index6, index5 + 1].wall = (ushort) 34;
|
|
Main.tile[index6 + num6, index5].wall = (ushort) 34;
|
|
Main.tile[index6, index5].active(false);
|
|
flag1 = true;
|
|
}
|
|
if (flag2)
|
|
{
|
|
Main.tile[index6, index5].type = (ushort) 53;
|
|
Main.tile[index6, index5].active(true);
|
|
Main.tile[index6, index5].halfBrick(false);
|
|
Main.tile[index6, index5].slope((byte) 0);
|
|
}
|
|
}
|
|
num7 -= num6;
|
|
}
|
|
int index7 = i - num3 * num6;
|
|
bool flag3 = true;
|
|
bool flag4 = false;
|
|
bool flag5 = true;
|
|
while (flag5)
|
|
{
|
|
for (int index8 = j2; index8 <= j2 + num8; ++index8)
|
|
{
|
|
int index9 = index7;
|
|
Main.tile[index9, index8].active(false);
|
|
}
|
|
index7 += num6;
|
|
++j2;
|
|
--num9;
|
|
if (j2 >= num5 - num8 * 2)
|
|
num9 = 10;
|
|
if (num9 <= 0)
|
|
{
|
|
bool flag6 = false;
|
|
if (!flag3 && !flag4)
|
|
{
|
|
flag4 = true;
|
|
flag6 = true;
|
|
int num10 = WorldGen.genRand.Next(7, 13);
|
|
int num11 = WorldGen.genRand.Next(23, 28);
|
|
int num12 = num11;
|
|
int num13 = index7;
|
|
while (num11 > 0)
|
|
{
|
|
for (int index10 = j2 - num10 + num8; index10 <= j2 + num8; ++index10)
|
|
{
|
|
if (num11 == num12 || num11 == 1)
|
|
{
|
|
if (index10 >= j2 - num10 + num8 + 2)
|
|
Main.tile[index7, index10].active(false);
|
|
}
|
|
else if (num11 == num12 - 1 || num11 == 2 || num11 == num12 - 2 || num11 == 3)
|
|
{
|
|
if (index10 >= j2 - num10 + num8 + 1)
|
|
Main.tile[index7, index10].active(false);
|
|
}
|
|
else
|
|
Main.tile[index7, index10].active(false);
|
|
}
|
|
--num11;
|
|
index7 += num6;
|
|
}
|
|
int num14 = index7 - num6;
|
|
int minValue = num14;
|
|
int maxValue = num13;
|
|
if (num14 > num13)
|
|
{
|
|
minValue = num13;
|
|
maxValue = num14;
|
|
}
|
|
int contain = WorldGen.genRand.Next(3);
|
|
switch (contain)
|
|
{
|
|
case 0:
|
|
contain = 857;
|
|
break;
|
|
case 1:
|
|
contain = 848;
|
|
break;
|
|
case 2:
|
|
contain = 934;
|
|
break;
|
|
}
|
|
WorldGen.AddBuriedChest((minValue + maxValue) / 2, j2, contain, Style: 1);
|
|
int num15 = WorldGen.genRand.Next(1, 10);
|
|
for (int index11 = 0; index11 < num15; ++index11)
|
|
WorldGen.PlaceSmallPile(WorldGen.genRand.Next(minValue, maxValue), j2 + num8, WorldGen.genRand.Next(16, 19), 1);
|
|
WorldGen.PlaceTile(minValue + 2, j2 - num10 + num8 + 1, 91, true, style: WorldGen.genRand.Next(4, 7));
|
|
WorldGen.PlaceTile(minValue + 3, j2 - num10 + num8, 91, true, style: WorldGen.genRand.Next(4, 7));
|
|
WorldGen.PlaceTile(maxValue - 2, j2 - num10 + num8 + 1, 91, true, style: WorldGen.genRand.Next(4, 7));
|
|
WorldGen.PlaceTile(maxValue - 3, j2 - num10 + num8, 91, true, style: WorldGen.genRand.Next(4, 7));
|
|
for (int x = minValue; x <= maxValue; ++x)
|
|
WorldGen.PlacePot(x, j2 + num8, style: WorldGen.genRand.Next(25, 28));
|
|
}
|
|
if (flag3)
|
|
{
|
|
flag3 = false;
|
|
num6 *= -1;
|
|
num9 = WorldGen.genRand.Next(15, 20);
|
|
}
|
|
else if (flag6)
|
|
{
|
|
num9 = WorldGen.genRand.Next(10, 15);
|
|
}
|
|
else
|
|
{
|
|
num6 *= -1;
|
|
num9 = WorldGen.genRand.Next(20, 40);
|
|
}
|
|
}
|
|
if (j2 >= num5 - num8)
|
|
flag5 = false;
|
|
}
|
|
int num16 = WorldGen.genRand.Next(100, 200);
|
|
int num17 = WorldGen.genRand.Next(500, 800);
|
|
bool flag7 = true;
|
|
int num18 = num8;
|
|
int num19 = WorldGen.genRand.Next(10, 50);
|
|
if (num6 == 1)
|
|
index7 -= num18;
|
|
int num20 = WorldGen.genRand.Next(5, 10);
|
|
while (flag7)
|
|
{
|
|
--num16;
|
|
--num17;
|
|
--num19;
|
|
for (int index12 = index7 - num20 - WorldGen.genRand.Next(0, 2); index12 <= index7 + num18 + num20 + WorldGen.genRand.Next(0, 2); ++index12)
|
|
{
|
|
int index13 = j2;
|
|
if (index12 >= index7 && index12 <= index7 + num18)
|
|
{
|
|
Main.tile[index12, index13].active(false);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index12, index13].type = num1;
|
|
Main.tile[index12, index13].active(true);
|
|
Main.tile[index12, index13].halfBrick(false);
|
|
Main.tile[index12, index13].slope((byte) 0);
|
|
}
|
|
if (index12 >= index7 - 1 && index12 <= index7 + 1 + num18)
|
|
Main.tile[index12, index13].wall = (ushort) 34;
|
|
}
|
|
++j2;
|
|
index7 += num6;
|
|
if (num16 <= 0)
|
|
{
|
|
flag7 = false;
|
|
for (int index14 = index7 + 1; index14 <= index7 + num18 - 1; ++index14)
|
|
{
|
|
if (Main.tile[index14, j2].active())
|
|
flag7 = true;
|
|
}
|
|
}
|
|
if (num19 < 0)
|
|
{
|
|
num19 = WorldGen.genRand.Next(10, 50);
|
|
num6 *= -1;
|
|
}
|
|
if (num17 <= 0)
|
|
flag7 = false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool GrowLivingTree(int i, int j, bool patch = false)
|
|
{
|
|
int index1 = 0;
|
|
int[] numArray1 = new int[1000];
|
|
int[] numArray2 = new int[1000];
|
|
int[] numArray3 = new int[1000];
|
|
int[] numArray4 = new int[1000];
|
|
int index2 = 0;
|
|
int[] numArray5 = new int[2000];
|
|
int[] numArray6 = new int[2000];
|
|
bool[] flagArray = new bool[2000];
|
|
if (!WorldGen.SolidTile(i, j + 1) || Main.tile[i, j].active() || Main.tile[i, j + 1].type != (ushort) 0 && Main.tile[i, j + 1].type != (ushort) 2 && Main.tile[i, j + 1].type != (ushort) 1 && Main.tile[i, j + 1].type != (ushort) 40 && !TileID.Sets.Ore[(int) Main.tile[i, j + 1].type] || j < 150)
|
|
return false;
|
|
int num1 = i - WorldGen.genRand.Next(2, 3);
|
|
int num2 = i + WorldGen.genRand.Next(2, 3);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--num1;
|
|
else
|
|
++num2;
|
|
}
|
|
int num3 = num2 - num1;
|
|
bool flag1 = num3 >= 4;
|
|
int num4 = i - 50;
|
|
int num5 = i + 50;
|
|
if (patch)
|
|
{
|
|
num4 = i - 20;
|
|
num5 = i + 20;
|
|
num1 = i - WorldGen.genRand.Next(1, 3);
|
|
num2 = i + WorldGen.genRand.Next(1, 3);
|
|
flag1 = num3 >= 4;
|
|
}
|
|
for (int index3 = num4; index3 <= num5; ++index3)
|
|
{
|
|
for (int index4 = 5; index4 < j - 5; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active())
|
|
{
|
|
if (!patch)
|
|
return false;
|
|
switch (Main.tile[index3, index4].type)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 191:
|
|
case 192:
|
|
continue;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num6 = num1;
|
|
int num7 = num2;
|
|
int minl = num1;
|
|
int minr = num2;
|
|
bool flag2 = true;
|
|
int num8 = WorldGen.genRand.Next(-8, -4);
|
|
int num9 = WorldGen.genRand.Next(2);
|
|
int index5 = j;
|
|
int num10 = WorldGen.genRand.Next(5, 15);
|
|
Main.tileSolid[48] = false;
|
|
while (flag2)
|
|
{
|
|
++num8;
|
|
if (num8 > num10)
|
|
{
|
|
num10 = WorldGen.genRand.Next(5, 15);
|
|
num8 = 0;
|
|
numArray2[index1] = index5 + WorldGen.genRand.Next(5);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
num9 = num9 != 0 ? 0 : 1;
|
|
if (num9 == 0)
|
|
{
|
|
numArray3[index1] = -1;
|
|
numArray1[index1] = num1;
|
|
numArray4[index1] = num2 - num1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
++num1;
|
|
++num6;
|
|
num9 = 1;
|
|
}
|
|
else
|
|
{
|
|
numArray3[index1] = 1;
|
|
numArray1[index1] = num2;
|
|
numArray4[index1] = num2 - num1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--num2;
|
|
--num7;
|
|
num9 = 0;
|
|
}
|
|
if (num6 == num7)
|
|
flag2 = false;
|
|
++index1;
|
|
}
|
|
for (int index6 = num1; index6 <= num2; ++index6)
|
|
{
|
|
Main.tile[index6, index5].type = (ushort) 191;
|
|
Main.tile[index6, index5].active(true);
|
|
Main.tile[index6, index5].halfBrick(false);
|
|
}
|
|
--index5;
|
|
}
|
|
for (int index7 = 0; index7 < index1 - 1; ++index7)
|
|
{
|
|
int index8 = numArray1[index7] + numArray3[index7];
|
|
int index9 = numArray2[index7];
|
|
int num11 = (int) ((double) numArray4[index7] * (1.0 + (double) WorldGen.genRand.Next(20, 30) * 0.100000001490116));
|
|
Main.tile[index8, index9 + 1].type = (ushort) 191;
|
|
Main.tile[index8, index9 + 1].active(true);
|
|
Main.tile[index8, index9 + 1].halfBrick(false);
|
|
int num12 = WorldGen.genRand.Next(3, 5);
|
|
while (num11 > 0)
|
|
{
|
|
--num11;
|
|
Main.tile[index8, index9].type = (ushort) 191;
|
|
Main.tile[index8, index9].active(true);
|
|
Main.tile[index8, index9].halfBrick(false);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index9;
|
|
else
|
|
++index9;
|
|
}
|
|
else
|
|
index8 += numArray3[index7];
|
|
if (num12 > 0)
|
|
--num12;
|
|
else if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
num12 = WorldGen.genRand.Next(2, 5);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
Main.tile[index8, index9].type = (ushort) 191;
|
|
Main.tile[index8, index9].active(true);
|
|
Main.tile[index8, index9].halfBrick(false);
|
|
Main.tile[index8, index9 - 1].type = (ushort) 191;
|
|
Main.tile[index8, index9 - 1].active(true);
|
|
Main.tile[index8, index9 - 1].halfBrick(false);
|
|
numArray5[index2] = index8;
|
|
numArray6[index2] = index9;
|
|
++index2;
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index8, index9].type = (ushort) 191;
|
|
Main.tile[index8, index9].active(true);
|
|
Main.tile[index8, index9].halfBrick(false);
|
|
Main.tile[index8, index9 + 1].type = (ushort) 191;
|
|
Main.tile[index8, index9 + 1].active(true);
|
|
Main.tile[index8, index9 + 1].halfBrick(false);
|
|
numArray5[index2] = index8;
|
|
numArray6[index2] = index9;
|
|
++index2;
|
|
}
|
|
}
|
|
if (num11 == 0)
|
|
{
|
|
numArray5[index2] = index8;
|
|
numArray6[index2] = index9;
|
|
++index2;
|
|
}
|
|
}
|
|
}
|
|
int index10 = (num1 + num2) / 2;
|
|
int index11 = index5;
|
|
int num13 = WorldGen.genRand.Next(num3 * 3, num3 * 5);
|
|
int num14 = 0;
|
|
int num15 = 0;
|
|
for (; num13 > 0; --num13)
|
|
{
|
|
Main.tile[index10, index11].type = (ushort) 191;
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].halfBrick(false);
|
|
if (num14 > 0)
|
|
--num14;
|
|
if (num15 > 0)
|
|
--num15;
|
|
for (int index12 = -1; index12 < 2; ++index12)
|
|
{
|
|
if (index12 != 0 && (index12 < 0 && num14 == 0 || index12 > 0 && num15 == 0) && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int index13 = index10;
|
|
int index14 = index11;
|
|
int num16 = WorldGen.genRand.Next(num3, num3 * 3);
|
|
if (index12 < 0)
|
|
num14 = WorldGen.genRand.Next(3, 5);
|
|
if (index12 > 0)
|
|
num15 = WorldGen.genRand.Next(3, 5);
|
|
int num17 = 0;
|
|
while (num16 > 0)
|
|
{
|
|
--num16;
|
|
index13 += index12;
|
|
Main.tile[index13, index14].type = (ushort) 191;
|
|
Main.tile[index13, index14].active(true);
|
|
Main.tile[index13, index14].halfBrick(false);
|
|
if (num16 == 0)
|
|
{
|
|
numArray5[index2] = index13;
|
|
numArray6[index2] = index14;
|
|
flagArray[index2] = true;
|
|
++index2;
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index14;
|
|
else
|
|
++index14;
|
|
Main.tile[index13, index14].type = (ushort) 191;
|
|
Main.tile[index13, index14].active(true);
|
|
Main.tile[index13, index14].halfBrick(false);
|
|
}
|
|
if (num17 > 0)
|
|
--num17;
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
num17 = WorldGen.genRand.Next(2, 4);
|
|
int index15 = index13;
|
|
int num18 = index14;
|
|
int index16 = WorldGen.genRand.Next(2) != 0 ? num18 + 1 : num18 - 1;
|
|
Main.tile[index15, index16].type = (ushort) 191;
|
|
Main.tile[index15, index16].active(true);
|
|
Main.tile[index15, index16].halfBrick(false);
|
|
numArray5[index2] = index15;
|
|
numArray6[index2] = index16;
|
|
flagArray[index2] = true;
|
|
int index17 = index2 + 1;
|
|
numArray5[index17] = index15 + WorldGen.genRand.Next(-5, 6);
|
|
numArray6[index17] = index16 + WorldGen.genRand.Next(-5, 6);
|
|
flagArray[index17] = true;
|
|
index2 = index17 + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
numArray5[index2] = index10;
|
|
numArray6[index2] = index11;
|
|
++index2;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index10;
|
|
else
|
|
++index10;
|
|
Main.tile[index10, index11].type = (ushort) 191;
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].halfBrick(false);
|
|
}
|
|
--index11;
|
|
}
|
|
for (int i1 = minl; i1 <= minr; ++i1)
|
|
{
|
|
int num19 = WorldGen.genRand.Next(1, 6);
|
|
int j1 = j + 1;
|
|
while (num19 > 0)
|
|
{
|
|
if (WorldGen.SolidTile(i1, j1))
|
|
--num19;
|
|
Main.tile[i1, j1].type = (ushort) 191;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].halfBrick(false);
|
|
++j1;
|
|
}
|
|
int num20 = j1;
|
|
int num21 = WorldGen.genRand.Next(2, num3 + 1);
|
|
for (int index18 = 0; index18 < num21; ++index18)
|
|
{
|
|
int index19 = num20;
|
|
int num22 = (minl + minr) / 2;
|
|
int num23 = 1;
|
|
int num24 = i1 >= num22 ? 1 : -1;
|
|
if (i1 == num22 || num3 > 6 && (i1 == num22 - 1 || i1 == num22 + 1))
|
|
num24 = 0;
|
|
int num25 = num24;
|
|
int index20 = i1;
|
|
int num26 = WorldGen.genRand.Next((int) ((double) num3 * 3.5), num3 * 6);
|
|
while (num26 > 0)
|
|
{
|
|
--num26;
|
|
index20 += num24;
|
|
if (Main.tile[index20, index19].wall != (ushort) 244)
|
|
{
|
|
Main.tile[index20, index19].type = (ushort) 191;
|
|
Main.tile[index20, index19].active(true);
|
|
Main.tile[index20, index19].halfBrick(false);
|
|
}
|
|
index19 += num23;
|
|
if (Main.tile[index20, index19].wall != (ushort) 244)
|
|
{
|
|
Main.tile[index20, index19].type = (ushort) 191;
|
|
Main.tile[index20, index19].active(true);
|
|
Main.tile[index20, index19].halfBrick(false);
|
|
}
|
|
if (!Main.tile[index20, index19 + 1].active())
|
|
{
|
|
num24 = 0;
|
|
num23 = 1;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num24 = num25 >= 0 ? (num25 <= 0 ? WorldGen.genRand.Next(-1, 2) : (num24 != 0 ? 0 : 1)) : (num24 != 0 ? 0 : -1);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num23 = num23 != 0 ? 0 : 1;
|
|
}
|
|
}
|
|
}
|
|
for (int index21 = 0; index21 < index2; ++index21)
|
|
{
|
|
int num27 = (int) ((double) WorldGen.genRand.Next(5, 8) * (1.0 + (double) num3 * 0.0500000007450581));
|
|
if (flagArray[index21])
|
|
num27 = WorldGen.genRand.Next(6, 12) + num3;
|
|
int num28 = numArray5[index21] - num27 * 2;
|
|
int num29 = numArray5[index21] + num27 * 2;
|
|
int num30 = numArray6[index21] - num27 * 2;
|
|
int num31 = numArray6[index21] + num27 * 2;
|
|
float num32 = (float) (2.0 - (double) WorldGen.genRand.Next(5) * 0.100000001490116);
|
|
for (int i2 = num28; i2 <= num29; ++i2)
|
|
{
|
|
for (int index22 = num30; index22 <= num31; ++index22)
|
|
{
|
|
if (Main.tile[i2, index22].type != (ushort) 191)
|
|
{
|
|
if (flagArray[index21])
|
|
{
|
|
if ((double) (new Vector2((float) numArray5[index21], (float) numArray6[index21]) - new Vector2((float) i2, (float) index22)).Length() < (double) num27 * 0.9)
|
|
{
|
|
Main.tile[i2, index22].type = (ushort) 192;
|
|
Main.tile[i2, index22].active(true);
|
|
Main.tile[i2, index22].halfBrick(false);
|
|
}
|
|
}
|
|
else if ((double) Math.Abs(numArray5[index21] - i2) + (double) Math.Abs(numArray6[index21] - index22) * (double) num32 < (double) num27)
|
|
{
|
|
Main.tile[i2, index22].type = (ushort) 192;
|
|
Main.tile[i2, index22].active(true);
|
|
Main.tile[i2, index22].halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(30) == 0)
|
|
{
|
|
int j2 = num30;
|
|
if (!Main.tile[i2, j2].active())
|
|
{
|
|
while (!Main.tile[i2, j2 + 1].active() && j2 < num31)
|
|
++j2;
|
|
if (Main.tile[i2, j2 + 1].type == (ushort) 192)
|
|
WorldGen.PlaceTile(i2, j2, 187, true, style: WorldGen.genRand.Next(50, 52));
|
|
}
|
|
}
|
|
if (!flagArray[index21] && WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
int j3 = num31;
|
|
int num33 = j3 + 100;
|
|
if (!Main.tile[i2, j3].active())
|
|
{
|
|
while (!Main.tile[i2, j3 + 1].active() && j3 < num33)
|
|
++j3;
|
|
if (Main.tile[i2, j3 + 1].type != (ushort) 192)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i2, j3, 187, true, style: WorldGen.genRand.Next(47, 50));
|
|
}
|
|
else
|
|
{
|
|
int Y = WorldGen.genRand.Next(2);
|
|
int X = 72;
|
|
if (Y == 1)
|
|
X = WorldGen.genRand.Next(59, 62);
|
|
WorldGen.PlaceSmallPile(i2, j3, X, Y);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag1)
|
|
{
|
|
bool flag3 = false;
|
|
for (int j4 = j; j4 < j + 20 && (double) j4 < Main.worldSurface - 2.0; ++j4)
|
|
{
|
|
for (int i3 = minl; i3 <= minr; ++i3)
|
|
{
|
|
if (Main.tile[i3, j4].wall == (ushort) 0 && !WorldGen.SolidTile(i3, j4))
|
|
flag3 = true;
|
|
}
|
|
}
|
|
if (!flag3)
|
|
WorldGen.GrowLivingTree_MakePassage(j, num3, ref minl, ref minr, patch);
|
|
}
|
|
Main.tileSolid[48] = true;
|
|
return true;
|
|
}
|
|
|
|
public static bool GrowDungeonTree(int i, int j, bool patch = false)
|
|
{
|
|
int index1 = 0;
|
|
int[] numArray1 = new int[1000];
|
|
int[] numArray2 = new int[1000];
|
|
int[] numArray3 = new int[1000];
|
|
int[] numArray4 = new int[1000];
|
|
int index2 = 0;
|
|
int[] numArray5 = new int[2000];
|
|
int[] numArray6 = new int[2000];
|
|
bool[] flagArray = new bool[2000];
|
|
int num1 = i - WorldGen.genRand.Next(2, 3);
|
|
int num2 = i + WorldGen.genRand.Next(2, 3);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--num1;
|
|
else
|
|
++num2;
|
|
}
|
|
int num3 = num2 - num1;
|
|
int num4 = num1;
|
|
int num5 = num2;
|
|
int minl = num1;
|
|
int minr = num2;
|
|
bool flag = true;
|
|
int num6 = WorldGen.genRand.Next(-8, -4);
|
|
int num7 = WorldGen.genRand.Next(2);
|
|
int index3 = j;
|
|
int num8 = WorldGen.genRand.Next(5, 15);
|
|
Main.tileSolid[48] = false;
|
|
while (flag)
|
|
{
|
|
++num6;
|
|
if (num6 > num8)
|
|
{
|
|
num8 = WorldGen.genRand.Next(5, 15);
|
|
num6 = 0;
|
|
numArray2[index1] = index3 + WorldGen.genRand.Next(5);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
num7 = num7 != 0 ? 0 : 1;
|
|
if (num7 == 0)
|
|
{
|
|
numArray3[index1] = -1;
|
|
numArray1[index1] = num1;
|
|
numArray4[index1] = num2 - num1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
++num1;
|
|
++num4;
|
|
num7 = 1;
|
|
}
|
|
else
|
|
{
|
|
numArray3[index1] = 1;
|
|
numArray1[index1] = num2;
|
|
numArray4[index1] = num2 - num1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--num2;
|
|
--num5;
|
|
num7 = 0;
|
|
}
|
|
if (num4 == num5)
|
|
flag = false;
|
|
++index1;
|
|
}
|
|
for (int index4 = num1; index4 <= num2; ++index4)
|
|
{
|
|
Main.tile[index4, index3].type = (ushort) 191;
|
|
Main.tile[index4, index3].active(true);
|
|
Main.tile[index4, index3].halfBrick(false);
|
|
Main.tile[index4, index3].color((byte) 28);
|
|
}
|
|
--index3;
|
|
}
|
|
for (int index5 = 0; index5 < index1 - 1; ++index5)
|
|
{
|
|
int index6 = numArray1[index5] + numArray3[index5];
|
|
int index7 = numArray2[index5];
|
|
int num9 = (int) ((double) numArray4[index5] * (1.0 + (double) WorldGen.genRand.Next(20, 30) * 0.100000001490116));
|
|
Main.tile[index6, index7 + 1].type = (ushort) 191;
|
|
Main.tile[index6, index7 + 1].active(true);
|
|
Main.tile[index6, index7 + 1].halfBrick(false);
|
|
Main.tile[index6, index7 + 1].color((byte) 28);
|
|
int num10 = WorldGen.genRand.Next(3, 5);
|
|
while (num9 > 0)
|
|
{
|
|
--num9;
|
|
Main.tile[index6, index7].type = (ushort) 191;
|
|
Main.tile[index6, index7].active(true);
|
|
Main.tile[index6, index7].halfBrick(false);
|
|
Main.tile[index6, index7].color((byte) 28);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index7;
|
|
else
|
|
++index7;
|
|
}
|
|
else
|
|
index6 += numArray3[index5];
|
|
if (num10 > 0)
|
|
--num10;
|
|
else if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
num10 = WorldGen.genRand.Next(2, 5);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
Main.tile[index6, index7].type = (ushort) 191;
|
|
Main.tile[index6, index7].active(true);
|
|
Main.tile[index6, index7].halfBrick(false);
|
|
Main.tile[index6, index7].color((byte) 28);
|
|
Main.tile[index6, index7 - 1].type = (ushort) 191;
|
|
Main.tile[index6, index7 - 1].active(true);
|
|
Main.tile[index6, index7 - 1].halfBrick(false);
|
|
Main.tile[index6, index7 - 1].color((byte) 28);
|
|
numArray5[index2] = index6;
|
|
numArray6[index2] = index7;
|
|
++index2;
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index6, index7].type = (ushort) 191;
|
|
Main.tile[index6, index7].active(true);
|
|
Main.tile[index6, index7].halfBrick(false);
|
|
Main.tile[index6, index7].color((byte) 28);
|
|
Main.tile[index6, index7 + 1].type = (ushort) 191;
|
|
Main.tile[index6, index7 + 1].active(true);
|
|
Main.tile[index6, index7 + 1].halfBrick(false);
|
|
Main.tile[index6, index7 + 1].color((byte) 28);
|
|
numArray5[index2] = index6;
|
|
numArray6[index2] = index7;
|
|
++index2;
|
|
}
|
|
}
|
|
if (num9 == 0)
|
|
{
|
|
numArray5[index2] = index6;
|
|
numArray6[index2] = index7;
|
|
++index2;
|
|
}
|
|
}
|
|
}
|
|
int index8 = (num1 + num2) / 2;
|
|
int index9 = index3;
|
|
int num11 = WorldGen.genRand.Next(num3 * 3, num3 * 5);
|
|
int num12 = 0;
|
|
int num13 = 0;
|
|
for (; num11 > 0; --num11)
|
|
{
|
|
Main.tile[index8, index9].type = (ushort) 191;
|
|
Main.tile[index8, index9].active(true);
|
|
Main.tile[index8, index9].halfBrick(false);
|
|
Main.tile[index8, index9].color((byte) 28);
|
|
if (num12 > 0)
|
|
--num12;
|
|
if (num13 > 0)
|
|
--num13;
|
|
for (int index10 = -1; index10 < 2; ++index10)
|
|
{
|
|
if (index10 != 0 && (index10 < 0 && num12 == 0 || index10 > 0 && num13 == 0) && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int index11 = index8;
|
|
int index12 = index9;
|
|
int num14 = WorldGen.genRand.Next(num3, num3 * 3);
|
|
if (index10 < 0)
|
|
num12 = WorldGen.genRand.Next(3, 5);
|
|
if (index10 > 0)
|
|
num13 = WorldGen.genRand.Next(3, 5);
|
|
int num15 = 0;
|
|
while (num14 > 0)
|
|
{
|
|
--num14;
|
|
index11 += index10;
|
|
Main.tile[index11, index12].type = (ushort) 191;
|
|
Main.tile[index11, index12].active(true);
|
|
Main.tile[index11, index12].halfBrick(false);
|
|
Main.tile[index11, index12].color((byte) 28);
|
|
if (num14 == 0)
|
|
{
|
|
numArray5[index2] = index11;
|
|
numArray6[index2] = index12;
|
|
flagArray[index2] = true;
|
|
++index2;
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index12;
|
|
else
|
|
++index12;
|
|
Main.tile[index11, index12].type = (ushort) 191;
|
|
Main.tile[index11, index12].active(true);
|
|
Main.tile[index11, index12].halfBrick(false);
|
|
Main.tile[index11, index12].color((byte) 28);
|
|
}
|
|
if (num15 > 0)
|
|
--num15;
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
num15 = WorldGen.genRand.Next(2, 4);
|
|
int index13 = index11;
|
|
int num16 = index12;
|
|
int index14 = WorldGen.genRand.Next(2) != 0 ? num16 + 1 : num16 - 1;
|
|
Main.tile[index13, index14].type = (ushort) 191;
|
|
Main.tile[index13, index14].active(true);
|
|
Main.tile[index13, index14].halfBrick(false);
|
|
Main.tile[index13, index14].color((byte) 28);
|
|
numArray5[index2] = index13;
|
|
numArray6[index2] = index14;
|
|
flagArray[index2] = true;
|
|
int index15 = index2 + 1;
|
|
numArray5[index15] = index13 + WorldGen.genRand.Next(-5, 6);
|
|
numArray6[index15] = index14 + WorldGen.genRand.Next(-5, 6);
|
|
flagArray[index15] = true;
|
|
index2 = index15 + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
numArray5[index2] = index8;
|
|
numArray6[index2] = index9;
|
|
++index2;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
--index8;
|
|
else
|
|
++index8;
|
|
Main.tile[index8, index9].type = (ushort) 191;
|
|
Main.tile[index8, index9].active(true);
|
|
Main.tile[index8, index9].halfBrick(false);
|
|
Main.tile[index8, index9].color((byte) 28);
|
|
}
|
|
--index9;
|
|
}
|
|
for (int i1 = minl; i1 <= minr; ++i1)
|
|
{
|
|
int num17 = WorldGen.genRand.Next(1, 6);
|
|
int j1 = j + 1;
|
|
while (num17 > 0)
|
|
{
|
|
if (WorldGen.SolidTile(i1, j1))
|
|
--num17;
|
|
Main.tile[i1, j1].type = (ushort) 191;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].halfBrick(false);
|
|
++j1;
|
|
}
|
|
int num18 = j1;
|
|
int num19 = WorldGen.genRand.Next(2, num3 + 1);
|
|
for (int index16 = 0; index16 < num19; ++index16)
|
|
{
|
|
int index17 = num18;
|
|
int num20 = (minl + minr) / 2;
|
|
int num21 = 1;
|
|
int num22 = i1 >= num20 ? 1 : -1;
|
|
if (i1 == num20 || num3 > 6 && (i1 == num20 - 1 || i1 == num20 + 1))
|
|
num22 = 0;
|
|
int num23 = num22;
|
|
int index18 = i1;
|
|
int num24 = WorldGen.genRand.Next((int) ((double) num3 * 3.5), num3 * 6);
|
|
while (num24 > 0)
|
|
{
|
|
--num24;
|
|
index18 += num22;
|
|
if (Main.tile[index18, index17].wall != (ushort) 244)
|
|
{
|
|
Main.tile[index18, index17].type = (ushort) 191;
|
|
Main.tile[index18, index17].active(true);
|
|
Main.tile[index18, index17].halfBrick(false);
|
|
}
|
|
index17 += num21;
|
|
if (Main.tile[index18, index17].wall != (ushort) 244)
|
|
{
|
|
Main.tile[index18, index17].type = (ushort) 191;
|
|
Main.tile[index18, index17].active(true);
|
|
Main.tile[index18, index17].halfBrick(false);
|
|
}
|
|
if (!Main.tile[index18, index17 + 1].active())
|
|
{
|
|
num22 = 0;
|
|
num21 = 1;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num22 = num23 >= 0 ? (num23 <= 0 ? WorldGen.genRand.Next(-1, 2) : (num22 != 0 ? 0 : 1)) : (num22 != 0 ? 0 : -1);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
num21 = num21 != 0 ? 0 : 1;
|
|
}
|
|
}
|
|
}
|
|
for (int index19 = 0; index19 < index2; ++index19)
|
|
{
|
|
int num25 = (int) ((double) WorldGen.genRand.Next(5, 8) * (1.0 + (double) num3 * 0.0500000007450581));
|
|
if (flagArray[index19])
|
|
num25 = WorldGen.genRand.Next(6, 12) + num3;
|
|
int num26 = numArray5[index19] - num25 * 2;
|
|
int num27 = numArray5[index19] + num25 * 2;
|
|
int num28 = numArray6[index19] - num25 * 2;
|
|
int num29 = numArray6[index19] + num25 * 2;
|
|
float num30 = (float) (2.0 - (double) WorldGen.genRand.Next(5) * 0.100000001490116);
|
|
for (int index20 = num26; index20 <= num27; ++index20)
|
|
{
|
|
for (int index21 = num28; index21 <= num29; ++index21)
|
|
{
|
|
if (Main.tile[index20, index21].type != (ushort) 191)
|
|
{
|
|
if (flagArray[index19])
|
|
{
|
|
if ((double) (new Vector2((float) numArray5[index19], (float) numArray6[index19]) - new Vector2((float) index20, (float) index21)).Length() < (double) num25 * 0.9)
|
|
{
|
|
Main.tile[index20, index21].type = (ushort) 192;
|
|
Main.tile[index20, index21].active(true);
|
|
Main.tile[index20, index21].halfBrick(false);
|
|
Main.tile[index20, index21].color((byte) 28);
|
|
}
|
|
}
|
|
else if ((double) Math.Abs(numArray5[index19] - index20) + (double) Math.Abs(numArray6[index19] - index21) * (double) num30 < (double) num25)
|
|
{
|
|
Main.tile[index20, index21].type = (ushort) 192;
|
|
Main.tile[index20, index21].active(true);
|
|
Main.tile[index20, index21].halfBrick(false);
|
|
Main.tile[index20, index21].color((byte) 28);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
WorldGen.GrowDungeonTree_MakePassage(j, num3, ref minl, ref minr, patch);
|
|
Main.tileSolid[48] = true;
|
|
return true;
|
|
}
|
|
|
|
private static bool GrowLivingTree_HorizontalTunnel(int i, int j)
|
|
{
|
|
int num1 = i;
|
|
int y = j;
|
|
int num2 = num1;
|
|
int num3 = num1;
|
|
int num4 = 80;
|
|
bool flag1 = false;
|
|
int num5 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num5 *= -1;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
bool flag2 = false;
|
|
if (num2 == num1 && num5 > 0)
|
|
{
|
|
for (int x = num1 + 5; x < num1 + num4; ++x)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 10))
|
|
return false;
|
|
if ((double) y < Main.worldSurface)
|
|
{
|
|
int index2 = y - 7;
|
|
while (index2 <= y + 7 && Main.tile[x, index2].wall != (ushort) 0)
|
|
++index2;
|
|
}
|
|
if (Main.tile[x, j].type == (ushort) 48)
|
|
{
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
if (Main.tile[x, j].type == (ushort) 191)
|
|
{
|
|
for (int index3 = y - 2; index3 <= y; ++index3)
|
|
{
|
|
if (Main.tile[x + 2, index3].wall != (ushort) 244)
|
|
flag2 = true;
|
|
}
|
|
if (!flag2)
|
|
{
|
|
index1 = 2;
|
|
num3 = x + 2;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (!Main.tile[x, j].active())
|
|
{
|
|
bool flag3 = true;
|
|
for (int index4 = y - 2; index4 <= y; ++index4)
|
|
{
|
|
if ((double) y < Main.worldSurface + 3.0 && (Main.tile[x + 1, index4].wall == (ushort) 0 || Main.tile[x + 2, index4].wall == (ushort) 0 || Main.tile[x + 3, index4].wall == (ushort) 0))
|
|
return false;
|
|
if (Main.tile[x, index4].active() || Main.tile[x + 1, index4].active() || Main.tile[x + 2, index4].active())
|
|
flag3 = false;
|
|
}
|
|
if (flag3)
|
|
{
|
|
index1 = 2;
|
|
num3 = x;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bool flag4 = false;
|
|
if (num3 == num1 && num5 < 0)
|
|
{
|
|
for (int x = num1 - 5; x > num1 - num4; --x)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 10))
|
|
return false;
|
|
if ((double) y < Main.worldSurface)
|
|
{
|
|
int index5 = y - 7;
|
|
while (index5 <= y + 7 && Main.tile[x, index5].wall != (ushort) 0)
|
|
++index5;
|
|
}
|
|
if (Main.tile[x, j].type == (ushort) 48)
|
|
{
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
if (Main.tile[x, y].type == (ushort) 191)
|
|
{
|
|
for (int index6 = y - 2; index6 <= y; ++index6)
|
|
{
|
|
if (Main.tile[x - 3, index6].wall != (ushort) 244)
|
|
flag4 = true;
|
|
}
|
|
if (!flag4)
|
|
{
|
|
index1 = 2;
|
|
num2 = x - 2;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (!Main.tile[x, j].active())
|
|
{
|
|
bool flag5 = true;
|
|
for (int index7 = y - 2; index7 <= y; ++index7)
|
|
{
|
|
if ((double) y < Main.worldSurface + 3.0 && (Main.tile[x - 1, index7].wall == (ushort) 0 || Main.tile[x - 2, index7].wall == (ushort) 0 || Main.tile[x - 3, index7].wall == (ushort) 0))
|
|
return false;
|
|
if (Main.tile[x, index7].active() || Main.tile[x - 1, index7].active() || Main.tile[x - 2, index7].active())
|
|
flag5 = false;
|
|
}
|
|
if (flag5)
|
|
{
|
|
index1 = 2;
|
|
num2 = x;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
num5 *= -1;
|
|
}
|
|
if (num2 == num3)
|
|
return false;
|
|
bool flag6 = false;
|
|
bool flag7 = false;
|
|
for (int j1 = y - 5; j1 <= y + 1; ++j1)
|
|
{
|
|
for (int i1 = num2; i1 <= num3; ++i1)
|
|
{
|
|
int num6 = 2;
|
|
if (Math.Abs(i1 - num3) > 3 && Math.Abs(i1 - num2) > 3)
|
|
num6 = 4;
|
|
if (Main.tile[i1, j1].wall != (ushort) 244 && Main.tile[i1, j1].type != (ushort) 19 && Main.tile[i1, j1].type != (ushort) 15 && Main.tile[i1, j1].type != (ushort) 304 && Main.tile[i1, j1].type != (ushort) 21 && Main.tile[i1, j1].type != (ushort) 10)
|
|
{
|
|
if (!Main.wallDungeon[(int) Main.tile[i1, j1].wall] && (!Main.tile[i1, j1].active() || !Main.wallDungeon[(int) Main.tile[i1, j1 - 1].wall] && !Main.wallDungeon[(int) Main.tile[i1, j1 + 1].wall]))
|
|
{
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].type = (ushort) 191;
|
|
Main.tile[i1, j1].halfBrick(false);
|
|
}
|
|
if (Main.tile[i1, j1 - 1].type == (ushort) 40)
|
|
Main.tile[i1, j1 - 1].type = (ushort) 0;
|
|
if (Main.tile[i1, j1 + 1].type == (ushort) 40)
|
|
Main.tile[i1, j1 + 1].type = (ushort) 0;
|
|
}
|
|
if (j1 >= y - num6 && j1 <= y && Main.tile[i1, j1].type != (ushort) 19 && Main.tile[i1, j1].type != (ushort) 15 && Main.tile[i1, j1].type != (ushort) 304 && Main.tile[i1, j1].type != (ushort) 21 && Main.tile[i1, j1].type != (ushort) 10 && Main.tile[i1, j1 - 1].type != (ushort) 15 && Main.tile[i1, j1 - 1].type != (ushort) 304 && Main.tile[i1, j1 - 1].type != (ushort) 21 && Main.tile[i1, j1 - 1].type != (ushort) 10 && Main.tile[i1, j1 + 1].type != (ushort) 10)
|
|
{
|
|
if (!Main.wallDungeon[(int) Main.tile[i1, j1].wall])
|
|
Main.tile[i1, j1].wall = (ushort) 244;
|
|
Main.tile[i1, j1].liquid = (byte) 0;
|
|
Main.tile[i1, j1].active(false);
|
|
}
|
|
if (j1 == y)
|
|
{
|
|
int style = 7;
|
|
if (Main.wallDungeon[(int) Main.tile[i1, j1].wall] || Main.wallDungeon[(int) Main.tile[i1, j1 - 1].wall] || Main.wallDungeon[(int) Main.tile[i1, j1 - 2].wall])
|
|
style = 13;
|
|
if (i1 <= num2 + 4 && !flag6)
|
|
{
|
|
if (Main.tile[i1 - 1, j1].type == (ushort) 10 || Main.tile[i1 + 1, j1].type == (ushort) 10)
|
|
flag6 = true;
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i1, j1, 10, true, style: style);
|
|
if (Main.tile[i1, j1].type == (ushort) 10)
|
|
flag6 = true;
|
|
}
|
|
}
|
|
if (i1 >= num3 - 4 && !flag7)
|
|
{
|
|
if (Main.tile[i1 - 1, j1].type == (ushort) 10 || Main.tile[i1 + 1, j1].type == (ushort) 10)
|
|
flag7 = true;
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i1, j1, 10, true, style: style);
|
|
if (Main.tile[i1, j1].type == (ushort) 10)
|
|
flag7 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private static void GrowDungeonTree_MakePassage(
|
|
int j,
|
|
int W,
|
|
ref int minl,
|
|
ref int minr,
|
|
bool noSecretRoom = false)
|
|
{
|
|
int num1 = minl;
|
|
int num2 = minr;
|
|
int num3 = (minl + minr) / 2;
|
|
int num4 = 5;
|
|
int j1 = j - 6;
|
|
int num5 = 0;
|
|
bool flag = true;
|
|
WorldGen.genRand.Next(5, 16);
|
|
label_1:
|
|
int num6;
|
|
int style;
|
|
while (true)
|
|
{
|
|
int num7;
|
|
do
|
|
{
|
|
do
|
|
{
|
|
++j1;
|
|
if (j1 <= WorldGen.dungeonY - 5)
|
|
{
|
|
num6 = (minl + minr) / 2;
|
|
int num8 = 1;
|
|
if (j1 > j && W <= 4)
|
|
++num8;
|
|
for (int i = minl - num8; i <= minr + num8; ++i)
|
|
{
|
|
if (i > num6 - 2 && i <= num6 + 1)
|
|
{
|
|
if (j1 > j - 4)
|
|
{
|
|
if (Main.tile[i, j1].type != (ushort) 19 && Main.tile[i, j1].type != (ushort) 15 && Main.tile[i, j1].type != (ushort) 304 && Main.tile[i, j1].type != (ushort) 21 && Main.tile[i, j1].type != (ushort) 10 && Main.tile[i, j1 - 1].type != (ushort) 15 && Main.tile[i, j1 - 1].type != (ushort) 304 && Main.tile[i, j1 - 1].type != (ushort) 21 && Main.tile[i, j1 - 1].type != (ushort) 10 && Main.tile[i, j1 + 1].type != (ushort) 10)
|
|
Main.tile[i, j1].active(false);
|
|
if (!Main.wallDungeon[(int) Main.tile[i, j1].wall])
|
|
Main.tile[i, j1].wall = (ushort) 244;
|
|
if (!Main.wallDungeon[(int) Main.tile[i - 1, j1].wall] && (Main.tile[i - 1, j1].wall > (ushort) 0 || (double) j1 >= Main.worldSurface))
|
|
Main.tile[i - 1, j1].wall = (ushort) 244;
|
|
if (!Main.wallDungeon[(int) Main.tile[i + 1, j1].wall] && (Main.tile[i + 1, j1].wall > (ushort) 0 || (double) j1 >= Main.worldSurface))
|
|
Main.tile[i + 1, j1].wall = (ushort) 244;
|
|
if (j1 == j && i > num6 - 2 && i <= num6 + 1)
|
|
{
|
|
Main.tile[i, j1 + 1].active(false);
|
|
WorldGen.PlaceTile(i, j1 + 1, 19, true, style: 23);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j1].type != (ushort) 15 && Main.tile[i, j1].type != (ushort) 304 && Main.tile[i, j1].type != (ushort) 21 && Main.tile[i, j1].type != (ushort) 10 && Main.tile[i - 1, j1].type != (ushort) 10 && Main.tile[i + 1, j1].type != (ushort) 10)
|
|
{
|
|
if (!Main.wallDungeon[(int) Main.tile[i, j1].wall])
|
|
{
|
|
Main.tile[i, j1].type = (ushort) 191;
|
|
Main.tile[i, j1].active(true);
|
|
Main.tile[i, j1].halfBrick(false);
|
|
}
|
|
if (Main.tile[i - 1, j1].type == (ushort) 40)
|
|
Main.tile[i - 1, j1].type = (ushort) 0;
|
|
if (Main.tile[i + 1, j1].type == (ushort) 40)
|
|
Main.tile[i + 1, j1].type = (ushort) 0;
|
|
}
|
|
if (j1 <= j && j1 > j - 4 && i > minl - num8 && i <= minr + num8 - 1)
|
|
Main.tile[i, j1].wall = (ushort) 244;
|
|
}
|
|
if (!WorldGen.gen)
|
|
{
|
|
WorldGen.SquareTileFrame(i, j1);
|
|
WorldGen.SquareWallFrame(i, j1);
|
|
}
|
|
}
|
|
++num5;
|
|
}
|
|
else
|
|
goto label_50;
|
|
}
|
|
while (num5 < 6);
|
|
num5 = 0;
|
|
num7 = WorldGen.genRand.Next(3);
|
|
if (num7 == 0)
|
|
num7 = -1;
|
|
if (flag)
|
|
num7 = 2;
|
|
if (num7 == -1 && Main.tile[minl - num4, j1].wall == (ushort) 244)
|
|
num7 = 1;
|
|
else if (num7 == 1 && Main.tile[minr + num4, j1].wall == (ushort) 244)
|
|
num7 = -1;
|
|
if (num7 == 2)
|
|
{
|
|
flag = false;
|
|
style = 23;
|
|
if (Main.wallDungeon[(int) Main.tile[minl, j1 + 1].wall] || Main.wallDungeon[(int) Main.tile[minl + 1, j1 + 1].wall] || Main.wallDungeon[(int) Main.tile[minl + 2, j1 + 1].wall])
|
|
style = 12;
|
|
}
|
|
else
|
|
goto label_49;
|
|
}
|
|
while (!WorldGen.SolidTile(minl - 1, j1 + 1) && !WorldGen.SolidTile(minr + 1, j1 + 1) && style == 12);
|
|
break;
|
|
label_49:
|
|
minl += num7;
|
|
minr += num7;
|
|
}
|
|
for (int i = minl; i <= minr; ++i)
|
|
{
|
|
if (i > num6 - 2 && i <= num6 + 1)
|
|
{
|
|
Main.tile[i, j1 + 1].active(false);
|
|
WorldGen.PlaceTile(i, j1 + 1, 19, true, style: style);
|
|
}
|
|
}
|
|
goto label_1;
|
|
label_50:
|
|
minl = num1;
|
|
minr = num2;
|
|
int num9 = (minl + minr) / 2;
|
|
for (int index1 = minl; index1 <= minr; ++index1)
|
|
{
|
|
for (int index2 = j - 3; index2 <= j; ++index2)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
if (!Main.wallDungeon[(int) Main.tile[index1, index2].wall])
|
|
Main.tile[index1, index2].wall = (ushort) 244;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void GrowLivingTree_MakePassage(
|
|
int j,
|
|
int W,
|
|
ref int minl,
|
|
ref int minr,
|
|
bool noSecretRoom = false)
|
|
{
|
|
bool flag1 = noSecretRoom;
|
|
int num1 = minl;
|
|
int num2 = minr;
|
|
bool flag2 = false;
|
|
int num3 = (minl + minr) / 2;
|
|
int num4 = 5;
|
|
int index1 = j - 6;
|
|
int num5 = 50;
|
|
int num6 = WorldGen.genRand.Next(400, 700);
|
|
int num7 = 0;
|
|
bool flag3 = true;
|
|
int num8 = WorldGen.genRand.Next(5, 16);
|
|
while (num6 > 0)
|
|
{
|
|
++index1;
|
|
--num6;
|
|
--num5;
|
|
int i1 = (minl + minr) / 2;
|
|
if (!Main.tile[minl, index1].active() && Main.tile[minl, index1].wall == (ushort) 244 && !Main.tile[minr, index1].active() && Main.tile[minr, index1].wall == (ushort) 244)
|
|
break;
|
|
int num9 = 1;
|
|
if (index1 > j && W <= 4)
|
|
++num9;
|
|
for (int i2 = minl - num9; i2 <= minr + num9; ++i2)
|
|
{
|
|
if (Main.wallDungeon[(int) Main.tile[i2, index1].wall])
|
|
{
|
|
flag1 = true;
|
|
flag2 = true;
|
|
}
|
|
if (i2 > i1 - 2 && i2 <= i1 + 1)
|
|
{
|
|
if (index1 > j - 4)
|
|
{
|
|
if (Main.tile[i2, index1].type != (ushort) 19 && Main.tile[i2, index1].type != (ushort) 15 && Main.tile[i2, index1].type != (ushort) 304 && Main.tile[i2, index1].type != (ushort) 21 && Main.tile[i2, index1].type != (ushort) 10 && Main.tile[i2, index1 - 1].type != (ushort) 15 && Main.tile[i2, index1 - 1].type != (ushort) 304 && Main.tile[i2, index1 - 1].type != (ushort) 21 && Main.tile[i2, index1 - 1].type != (ushort) 10 && Main.tile[i2, index1 + 1].type != (ushort) 10)
|
|
Main.tile[i2, index1].active(false);
|
|
if (!Main.wallDungeon[(int) Main.tile[i2, index1].wall])
|
|
Main.tile[i2, index1].wall = (ushort) 244;
|
|
if (!Main.wallDungeon[(int) Main.tile[i2 - 1, index1].wall] && (Main.tile[i2 - 1, index1].wall > (ushort) 0 || (double) index1 >= Main.worldSurface))
|
|
Main.tile[i2 - 1, index1].wall = (ushort) 244;
|
|
if (!Main.wallDungeon[(int) Main.tile[i2 + 1, index1].wall] && (Main.tile[i2 + 1, index1].wall > (ushort) 0 || (double) index1 >= Main.worldSurface))
|
|
Main.tile[i2 + 1, index1].wall = (ushort) 244;
|
|
if (index1 == j && i2 > i1 - 2 && i2 <= i1 + 1)
|
|
{
|
|
Main.tile[i2, index1 + 1].active(false);
|
|
WorldGen.PlaceTile(i2, index1 + 1, 19, true, style: 23);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i2, index1].type != (ushort) 15 && Main.tile[i2, index1].type != (ushort) 304 && Main.tile[i2, index1].type != (ushort) 21 && Main.tile[i2, index1].type != (ushort) 10 && Main.tile[i2 - 1, index1].type != (ushort) 10 && Main.tile[i2 + 1, index1].type != (ushort) 10)
|
|
{
|
|
if (!Main.wallDungeon[(int) Main.tile[i2, index1].wall])
|
|
{
|
|
Main.tile[i2, index1].type = (ushort) 191;
|
|
Main.tile[i2, index1].active(true);
|
|
Main.tile[i2, index1].halfBrick(false);
|
|
}
|
|
if (Main.tile[i2 - 1, index1].type == (ushort) 40)
|
|
Main.tile[i2 - 1, index1].type = (ushort) 0;
|
|
if (Main.tile[i2 + 1, index1].type == (ushort) 40)
|
|
Main.tile[i2 + 1, index1].type = (ushort) 0;
|
|
}
|
|
if (index1 <= j && index1 > j - 4 && i2 > minl - num9 && i2 <= minr + num9 - 1)
|
|
Main.tile[i2, index1].wall = (ushort) 244;
|
|
}
|
|
if (!WorldGen.gen)
|
|
{
|
|
WorldGen.SquareTileFrame(i2, index1);
|
|
WorldGen.SquareWallFrame(i2, index1);
|
|
}
|
|
}
|
|
++num7;
|
|
if (num7 >= 6)
|
|
{
|
|
num7 = 0;
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
if (num10 == 0)
|
|
num10 = -1;
|
|
if (flag3)
|
|
num10 = 2;
|
|
if (num10 == -1 && Main.tile[minl - num4, index1].wall == (ushort) 244)
|
|
num10 = 1;
|
|
else if (num10 == 1 && Main.tile[minr + num4, index1].wall == (ushort) 244)
|
|
num10 = -1;
|
|
if (num10 == 2)
|
|
{
|
|
flag3 = false;
|
|
int style = 23;
|
|
if (Main.wallDungeon[(int) Main.tile[minl, index1 + 1].wall] || Main.wallDungeon[(int) Main.tile[minl + 1, index1 + 1].wall] || Main.wallDungeon[(int) Main.tile[minl + 2, index1 + 1].wall])
|
|
style = 12;
|
|
for (int i3 = minl; i3 <= minr; ++i3)
|
|
{
|
|
if (i3 > i1 - 2 && i3 <= i1 + 1)
|
|
{
|
|
Main.tile[i3, index1 + 1].active(false);
|
|
WorldGen.PlaceTile(i3, index1 + 1, 19, true, style: style);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
minl += num10;
|
|
minr += num10;
|
|
}
|
|
if (noSecretRoom)
|
|
{
|
|
--num8;
|
|
if (num8 <= 0)
|
|
num8 = !WorldGen.GrowLivingTree_HorizontalTunnel(i1, index1) ? WorldGen.genRand.Next(2, 11) : WorldGen.genRand.Next(5, 21);
|
|
}
|
|
if (num5 <= 0 && !flag1)
|
|
{
|
|
flag1 = true;
|
|
WorldGen.GrowLivingTreePassageRoom(minl, minr, index1);
|
|
}
|
|
}
|
|
if (flag2)
|
|
{
|
|
bool flag4 = true;
|
|
for (int i4 = minl; i4 <= minr; ++i4)
|
|
{
|
|
for (int j1 = index1 + 1; j1 <= index1 + 2; ++j1)
|
|
{
|
|
if (WorldGen.SolidTile(i4, j1))
|
|
flag4 = false;
|
|
}
|
|
}
|
|
if (flag4)
|
|
num6 = 0;
|
|
}
|
|
else if (num5 <= 0)
|
|
{
|
|
bool flag5 = true;
|
|
for (int i5 = minl; i5 <= minr; ++i5)
|
|
{
|
|
for (int j2 = index1 + 1; j2 <= index1 + 4; ++j2)
|
|
{
|
|
if (WorldGen.SolidTile(i5, j2))
|
|
flag5 = false;
|
|
}
|
|
}
|
|
if (flag5)
|
|
num6 = 0;
|
|
}
|
|
}
|
|
minl = num1;
|
|
minr = num2;
|
|
int num11 = (minl + minr) / 2;
|
|
for (int index2 = minl; index2 <= minr; ++index2)
|
|
{
|
|
for (int index3 = j - 3; index3 <= j; ++index3)
|
|
{
|
|
Main.tile[index2, index3].active(false);
|
|
bool flag6 = true;
|
|
for (int index4 = index2 - 1; index4 <= index2 + 1; ++index4)
|
|
{
|
|
for (int index5 = index3 - 1; index5 <= index3 + 1; ++index5)
|
|
{
|
|
if (!Main.tile[index4, index5].active() && Main.tile[index4, index5].wall == (ushort) 0)
|
|
flag6 = false;
|
|
}
|
|
}
|
|
if (flag6 && !Main.wallDungeon[(int) Main.tile[index2, index3].wall])
|
|
Main.tile[index2, index3].wall = (ushort) 244;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void GrowLivingTreePassageRoom(int minl, int minr, int Y)
|
|
{
|
|
int num1 = WorldGen.genRand.Next(2);
|
|
if (num1 == 0)
|
|
num1 = -1;
|
|
int num2 = Y - 2;
|
|
int num3 = Y;
|
|
int num4 = (minl + minr) / 2;
|
|
if (num1 < 0)
|
|
--num4;
|
|
if (num1 > 0)
|
|
++num4;
|
|
int num5 = WorldGen.genRand.Next(15, 30);
|
|
int num6 = num4 + num5;
|
|
if (num1 < 0)
|
|
{
|
|
num6 = num4;
|
|
num4 -= num5;
|
|
}
|
|
for (int index1 = num4; index1 < num6; ++index1)
|
|
{
|
|
for (int index2 = Y - 20; index2 < Y + 10; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].wall == (ushort) 0 && !Main.tile[index1, index2].active() && (double) index2 < Main.worldSurface)
|
|
return;
|
|
}
|
|
}
|
|
WorldGen.dMinX = num4;
|
|
WorldGen.dMaxX = num6;
|
|
if (num1 < 0)
|
|
WorldGen.dMinX -= 40;
|
|
else
|
|
WorldGen.dMaxX += 40;
|
|
for (int index3 = num4; index3 <= num6; ++index3)
|
|
{
|
|
for (int index4 = num2 - 2; index4 <= num3 + 2; ++index4)
|
|
{
|
|
if (Main.tile[index3 - 1, index4].type == (ushort) 40)
|
|
Main.tile[index3 - 1, index4].type = (ushort) 0;
|
|
if (Main.tile[index3 + 1, index4].type == (ushort) 40)
|
|
Main.tile[index3 + 1, index4].type = (ushort) 0;
|
|
if (Main.tile[index3, index4 - 1].type == (ushort) 40)
|
|
Main.tile[index3, index4 - 1].type = (ushort) 0;
|
|
if (Main.tile[index3, index4 + 1].type == (ushort) 40)
|
|
Main.tile[index3, index4 + 1].type = (ushort) 0;
|
|
if (Main.tile[index3, index4].wall != (ushort) 244 && Main.tile[index3, index4].type != (ushort) 19)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = (ushort) 191;
|
|
Main.tile[index3, index4].halfBrick(false);
|
|
}
|
|
if (index4 >= num2 && index4 <= num3)
|
|
{
|
|
Main.tile[index3, index4].liquid = (byte) 0;
|
|
Main.tile[index3, index4].wall = (ushort) 244;
|
|
Main.tile[index3, index4].active(false);
|
|
}
|
|
}
|
|
}
|
|
int i1 = (minl + minr) / 2 + 3 * num1;
|
|
int j = Y;
|
|
WorldGen.PlaceTile(i1, j, 10, true, style: 7);
|
|
int num7 = WorldGen.genRand.Next(5, 9);
|
|
int num8 = WorldGen.genRand.Next(4, 6);
|
|
int num9;
|
|
int num10;
|
|
if (num1 < 0)
|
|
{
|
|
num9 = num4 + num7;
|
|
num10 = num4 - num7;
|
|
}
|
|
else
|
|
{
|
|
num10 = num6 - num7;
|
|
num9 = num6 + num7;
|
|
}
|
|
int num11 = num3 - num8;
|
|
for (int index5 = num10 - 2; index5 <= num9 + 2; ++index5)
|
|
{
|
|
for (int index6 = num11 - 2; index6 <= num3 + 2; ++index6)
|
|
{
|
|
if (Main.tile[index5 - 1, index6].type == (ushort) 40)
|
|
Main.tile[index5 - 1, index6].type = (ushort) 40;
|
|
if (Main.tile[index5 + 1, index6].type == (ushort) 40)
|
|
Main.tile[index5 + 1, index6].type = (ushort) 40;
|
|
if (Main.tile[index5, index6 - 1].type == (ushort) 40)
|
|
Main.tile[index5, index6 - 1].type = (ushort) 40;
|
|
if (Main.tile[index5, index6 + 1].type == (ushort) 40)
|
|
Main.tile[index5, index6 + 1].type = (ushort) 40;
|
|
if (Main.tile[index5, index6].wall != (ushort) 244 && Main.tile[index5, index6].type != (ushort) 19)
|
|
{
|
|
Main.tile[index5, index6].active(true);
|
|
Main.tile[index5, index6].type = (ushort) 191;
|
|
Main.tile[index5, index6].halfBrick(false);
|
|
}
|
|
if (index6 >= num11 && index6 <= num3 && index5 >= num10 && index5 <= num9)
|
|
{
|
|
Main.tile[index5, index6].liquid = (byte) 0;
|
|
Main.tile[index5, index6].wall = (ushort) 244;
|
|
Main.tile[index5, index6].active(false);
|
|
}
|
|
}
|
|
}
|
|
int i2 = num10 - 2;
|
|
if (num1 < 0)
|
|
i2 = num9 + 2;
|
|
WorldGen.PlaceTile(i2, j, 10, true, style: 7);
|
|
int i3 = num9;
|
|
if (num1 < 0)
|
|
i3 = num10;
|
|
int maxValue = 2;
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
maxValue += 2;
|
|
WorldGen.PlaceTile(i3, Y, 15, true, style: 5);
|
|
if (num1 < 0)
|
|
{
|
|
Main.tile[i3, Y - 1].frameX += (short) 18;
|
|
Main.tile[i3, Y].frameX += (short) 18;
|
|
}
|
|
}
|
|
int i4 = num9 - 2;
|
|
if (num1 < 0)
|
|
i4 = num10 + 2;
|
|
WorldGen.PlaceTile(i4, Y, 304, true);
|
|
int i5 = num9 - 4;
|
|
if (num1 < 0)
|
|
i5 = num10 + 4;
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i5, Y, 15, true, style: 5);
|
|
if (num1 > 0)
|
|
{
|
|
Main.tile[i5, Y - 1].frameX += (short) 18;
|
|
Main.tile[i5, Y].frameX += (short) 18;
|
|
}
|
|
}
|
|
int i6 = num9 - 7;
|
|
if (num1 < 0)
|
|
i6 = num10 + 8;
|
|
int contain = 832;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
contain = 4281;
|
|
WorldGen.AddBuriedChest(i6, Y, contain, Style: 12);
|
|
}
|
|
|
|
public static void TreeGrowFXCheck(int x, int y)
|
|
{
|
|
int treeHeight = 1;
|
|
int passStyle = -1;
|
|
Tile topTile = (Tile) null;
|
|
for (int index = -1; index > -100; --index)
|
|
{
|
|
Tile tile = Main.tile[x, y + index];
|
|
if (tile.active() && TileID.Sets.GetsCheckedForLeaves[(int) tile.type])
|
|
{
|
|
topTile = tile;
|
|
++treeHeight;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
for (int index = 1; index < 5; ++index)
|
|
{
|
|
Tile t = Main.tile[x, y + index];
|
|
if (t.active() && TileID.Sets.GetsCheckedForLeaves[(int) t.type])
|
|
{
|
|
++treeHeight;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.GetTreeLeaf(x, topTile, t, ref treeHeight, out int _, out passStyle);
|
|
break;
|
|
}
|
|
}
|
|
if (treeHeight <= 0 || passStyle <= 0)
|
|
return;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(112, number: 1, number2: ((float) x), number3: ((float) y), number4: ((float) treeHeight), number5: passStyle);
|
|
if (Main.netMode != 0)
|
|
return;
|
|
WorldGen.TreeGrowFX(x, y, treeHeight, passStyle);
|
|
}
|
|
|
|
public static void GetTreeLeaf(
|
|
int x,
|
|
Tile topTile,
|
|
Tile t,
|
|
ref int treeHeight,
|
|
out int treeFrame,
|
|
out int passStyle)
|
|
{
|
|
treeFrame = 0;
|
|
passStyle = -1;
|
|
if (topTile.frameX == (short) 22 || topTile.frameX == (short) 44 || topTile.frameX == (short) 66)
|
|
{
|
|
if (topTile.frameY == (short) 220)
|
|
treeFrame = 1;
|
|
else if (topTile.frameY == (short) 242)
|
|
treeFrame = 2;
|
|
}
|
|
if (topTile.frameX == (short) 44 || topTile.frameX == (short) 66)
|
|
{
|
|
if (topTile.frameY == (short) 220)
|
|
treeFrame = 1;
|
|
else if (topTile.frameY == (short) 242)
|
|
treeFrame = 2;
|
|
}
|
|
switch (topTile.type)
|
|
{
|
|
case 583:
|
|
case 584:
|
|
case 585:
|
|
case 586:
|
|
case 587:
|
|
case 588:
|
|
case 589:
|
|
passStyle = 1249 + ((int) topTile.type - 583);
|
|
break;
|
|
case 596:
|
|
passStyle = 1248;
|
|
break;
|
|
case 616:
|
|
passStyle = 1257;
|
|
break;
|
|
}
|
|
if (passStyle > -1)
|
|
return;
|
|
switch (t.type)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
passStyle = 910;
|
|
break;
|
|
case 23:
|
|
case 400:
|
|
passStyle = 915;
|
|
break;
|
|
case 53:
|
|
passStyle = 911;
|
|
break;
|
|
case 60:
|
|
passStyle = 914;
|
|
break;
|
|
case 70:
|
|
passStyle = 912;
|
|
break;
|
|
case 109:
|
|
case 492:
|
|
int num1 = 917;
|
|
if (WorldGen.GetHollowTreeFoliageStyle() != 20)
|
|
{
|
|
if (x % 3 == 1)
|
|
treeFrame += 3;
|
|
if (x % 3 == 2)
|
|
treeFrame += 6;
|
|
switch (treeFrame)
|
|
{
|
|
case 0:
|
|
passStyle = 2;
|
|
break;
|
|
case 1:
|
|
passStyle = 1;
|
|
break;
|
|
case 2:
|
|
passStyle = 7;
|
|
break;
|
|
case 3:
|
|
passStyle = 4;
|
|
break;
|
|
case 4:
|
|
passStyle = 5;
|
|
break;
|
|
case 5:
|
|
passStyle = 6;
|
|
break;
|
|
case 6:
|
|
passStyle = 3;
|
|
break;
|
|
case 7:
|
|
passStyle = 8;
|
|
break;
|
|
case 8:
|
|
passStyle = 0;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num2 = 196;
|
|
if (x % 6 == 1)
|
|
treeFrame += 3;
|
|
else if (x % 6 == 2)
|
|
treeFrame += 6;
|
|
else if (x % 6 == 3)
|
|
treeFrame += 9;
|
|
else if (x % 6 == 4)
|
|
treeFrame += 12;
|
|
else if (x % 6 == 5)
|
|
treeFrame += 15;
|
|
switch (treeFrame)
|
|
{
|
|
case 0:
|
|
passStyle = num2;
|
|
break;
|
|
case 1:
|
|
passStyle = num2;
|
|
break;
|
|
case 2:
|
|
passStyle = num2;
|
|
break;
|
|
case 3:
|
|
passStyle = num2 + 1;
|
|
break;
|
|
case 4:
|
|
passStyle = num2 + 2;
|
|
break;
|
|
case 5:
|
|
passStyle = num2 + 1;
|
|
break;
|
|
case 6:
|
|
passStyle = num2 + 3;
|
|
break;
|
|
case 7:
|
|
passStyle = num2 + 4;
|
|
break;
|
|
case 8:
|
|
passStyle = num2 + 5;
|
|
break;
|
|
case 9:
|
|
passStyle = num2 + 6;
|
|
break;
|
|
case 10:
|
|
passStyle = num2 + 6;
|
|
break;
|
|
case 11:
|
|
passStyle = num2 + 6;
|
|
break;
|
|
case 12:
|
|
passStyle = num2 + 7;
|
|
break;
|
|
case 13:
|
|
passStyle = num2 + 7;
|
|
break;
|
|
case 14:
|
|
passStyle = num2 + 7;
|
|
break;
|
|
case 15:
|
|
passStyle = num2 + 8;
|
|
break;
|
|
case 16:
|
|
passStyle = num2 + 8;
|
|
break;
|
|
case 17:
|
|
passStyle = num2 + 8;
|
|
break;
|
|
}
|
|
}
|
|
passStyle += num1;
|
|
treeHeight += 5;
|
|
break;
|
|
case 116:
|
|
passStyle = 919;
|
|
break;
|
|
case 147:
|
|
passStyle = 913;
|
|
break;
|
|
case 199:
|
|
case 234:
|
|
passStyle = 916;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void TreeGrowFX(int x, int y, int height, int treeGore, bool hitTree = false)
|
|
{
|
|
Vector2 vector2_1 = new Vector2((float) x, (float) y) * 16f + new Vector2(8f, 8f);
|
|
int Type = treeGore;
|
|
int num1 = 4;
|
|
int maxValue = 2;
|
|
for (int index1 = 0; index1 > -height; --index1)
|
|
{
|
|
if (index1 > -height / 2 && Main.rand.Next(3) != 0)
|
|
{
|
|
for (int index2 = 0; index2 < 5; ++index2)
|
|
Dust.NewDust(vector2_1 + new Vector2(-16f, (float) (index1 * 16)) + Utils.RandomVector2(Main.rand, -20f, 20f), 4, 4, num1 + Main.rand.Next(maxValue), SpeedY: -4f, Alpha: 100);
|
|
}
|
|
else
|
|
{
|
|
float max = 10f;
|
|
Vector2 vector2_2 = new Vector2(5f, 7f);
|
|
Gore.NewGore(vector2_1 + new Vector2(-16f, (float) (index1 * 16)) - vector2_2, Utils.RandomVector2(Main.rand, -max, max), Type, (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.600000023841858));
|
|
Gore.NewGore(vector2_1 + new Vector2(0.0f, (float) (index1 * 16)) - vector2_2, Utils.RandomVector2(Main.rand, -max, max), Type, (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.600000023841858));
|
|
Gore.NewGore(vector2_1 + new Vector2(16f, (float) (index1 * 16)) - vector2_2, Utils.RandomVector2(Main.rand, -max, max), Type, (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.600000023841858));
|
|
if (index1 == -height + 1)
|
|
{
|
|
int num2 = 20;
|
|
if (hitTree)
|
|
num2 = 5;
|
|
for (int index3 = 0; index3 < num2; ++index3)
|
|
Gore.NewGore(vector2_1 + new Vector2(0.0f, (float) (index1 * 16 - 40)) + Utils.RandomVector2(Main.rand, -40f, 40f) - vector2_2, Utils.RandomVector2(Main.rand, -10f, 10f), Type, (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.600000023841858));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool IsTileALeafyTreeTop(int i, int j)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(i, j);
|
|
return tileSafely.active() && TileID.Sets.GetsCheckedForLeaves[(int) tileSafely.type] && (tileSafely.type == (ushort) 323 && tileSafely.frameX >= (short) 88 || tileSafely.frameX == (short) 22 && tileSafely.frameY >= (short) 198 && tileSafely.frameY <= (short) 242);
|
|
}
|
|
|
|
public static bool IsTileTypeFitForTree(ushort type)
|
|
{
|
|
if (type <= (ushort) 70)
|
|
{
|
|
if (type <= (ushort) 23)
|
|
{
|
|
if (type != (ushort) 2 && type != (ushort) 23)
|
|
goto label_8;
|
|
}
|
|
else if (type != (ushort) 60 && type != (ushort) 70)
|
|
goto label_8;
|
|
}
|
|
else if (type <= (ushort) 147)
|
|
{
|
|
if (type != (ushort) 109 && type != (ushort) 147)
|
|
goto label_8;
|
|
}
|
|
else if (type != (ushort) 199 && type != (ushort) 477 && type != (ushort) 492)
|
|
goto label_8;
|
|
return true;
|
|
label_8:
|
|
return false;
|
|
}
|
|
|
|
public static bool GrowTree(int i, int y)
|
|
{
|
|
int index1 = y;
|
|
while (Main.tile[i, index1].type == (ushort) 20)
|
|
++index1;
|
|
if ((Main.tile[i - 1, index1 - 1].liquid != (byte) 0 || Main.tile[i, index1 - 1].liquid != (byte) 0 || Main.tile[i + 1, index1 - 1].liquid != (byte) 0) && !WorldGen.notTheBees || !Main.tile[i, index1].nactive() || Main.tile[i, index1].halfBrick() || Main.tile[i, index1].slope() != (byte) 0 || !WorldGen.IsTileTypeFitForTree(Main.tile[i, index1].type) || Main.tile[i, index1 - 1].wall != (ushort) 0 && Main.tile[i, index1 - 1].wall != (ushort) 106 && Main.tile[i, index1 - 1].wall != (ushort) 107 && (Main.tile[i, index1 - 1].wall < (ushort) 138 || Main.tile[i, index1 - 1].wall > (ushort) 141) && Main.tile[i, index1 - 1].wall != (ushort) 145 && Main.tile[i, index1 - 1].wall != (ushort) 150 && Main.tile[i, index1 - 1].wall != (ushort) 152 && Main.tile[i, index1 - 1].wall != (ushort) 80 || (!Main.tile[i - 1, index1].active() || !WorldGen.IsTileTypeFitForTree(Main.tile[i - 1, index1].type)) && (!Main.tile[i + 1, index1].active() || !WorldGen.IsTileTypeFitForTree(Main.tile[i + 1, index1].type)))
|
|
return false;
|
|
byte color = Main.tile[i, index1].color();
|
|
int num1 = 2;
|
|
int num2 = WorldGen.genRand.Next(5, 17);
|
|
int num3 = num2 + 4;
|
|
if (Main.tile[i, index1].type == (ushort) 60)
|
|
num3 += 5;
|
|
bool flag1 = false;
|
|
if (Main.tile[i, index1].type == (ushort) 70 && WorldGen.EmptyTileCheck(i - num1, i + num1, index1 - num3, index1 - 3, 20) && WorldGen.EmptyTileCheck(i - 1, i + 1, index1 - 2, index1 - 1, 20))
|
|
flag1 = true;
|
|
if (WorldGen.EmptyTileCheck(i - num1, i + num1, index1 - num3, index1 - 1, 20))
|
|
flag1 = true;
|
|
if (!flag1)
|
|
return false;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
for (int index2 = index1 - num2; index2 < index1; ++index2)
|
|
{
|
|
Main.tile[i, index2].frameNumber((byte) WorldGen.genRand.Next(3));
|
|
Main.tile[i, index2].active(true);
|
|
Main.tile[i, index2].type = (ushort) 5;
|
|
Main.tile[i, index2].color(color);
|
|
int num4 = WorldGen.genRand.Next(3);
|
|
int num5 = WorldGen.genRand.Next(10);
|
|
if (index2 == index1 - 1 || index2 == index1 - num2)
|
|
num5 = 0;
|
|
while (((num5 == 5 ? 1 : (num5 == 7 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0 || ((num5 == 6 ? 1 : (num5 == 7 ? 1 : 0)) & (flag3 ? 1 : 0)) != 0)
|
|
num5 = WorldGen.genRand.Next(10);
|
|
flag2 = false;
|
|
flag3 = false;
|
|
if (num5 == 5 || num5 == 7)
|
|
flag2 = true;
|
|
if (num5 == 6 || num5 == 7)
|
|
flag3 = true;
|
|
switch (num5)
|
|
{
|
|
case 1:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num5 == 5 || num5 == 7)
|
|
{
|
|
Main.tile[i - 1, index2].active(true);
|
|
Main.tile[i - 1, index2].type = (ushort) 5;
|
|
Main.tile[i - 1, index2].color(color);
|
|
int num6 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 0;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 22;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (num5 == 6 || num5 == 7)
|
|
{
|
|
Main.tile[i + 1, index2].active(true);
|
|
Main.tile[i + 1, index2].type = (ushort) 5;
|
|
Main.tile[i + 1, index2].color(color);
|
|
int num7 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 66;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 88;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num8 = WorldGen.genRand.Next(3);
|
|
bool flag4 = false;
|
|
bool flag5 = false;
|
|
if (Main.tile[i - 1, index1].nactive() && !Main.tile[i - 1, index1].halfBrick() && Main.tile[i - 1, index1].slope() == (byte) 0 && WorldGen.IsTileTypeFitForTree(Main.tile[i - 1, index1].type))
|
|
flag4 = true;
|
|
if (Main.tile[i + 1, index1].nactive() && !Main.tile[i + 1, index1].halfBrick() && Main.tile[i + 1, index1].slope() == (byte) 0 && WorldGen.IsTileTypeFitForTree(Main.tile[i + 1, index1].type))
|
|
flag5 = true;
|
|
if (!flag4)
|
|
{
|
|
if (num8 == 0)
|
|
num8 = 2;
|
|
if (num8 == 1)
|
|
num8 = 3;
|
|
}
|
|
if (!flag5)
|
|
{
|
|
if (num8 == 0)
|
|
num8 = 1;
|
|
if (num8 == 2)
|
|
num8 = 3;
|
|
}
|
|
if (flag4 && !flag5)
|
|
num8 = 2;
|
|
if (flag5 && !flag4)
|
|
num8 = 1;
|
|
if (num8 == 0 || num8 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].active(true);
|
|
Main.tile[i + 1, index1 - 1].type = (ushort) 5;
|
|
Main.tile[i + 1, index1 - 1].color(color);
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
if (num9 == 0)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num9 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num9 == 2)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
if (num8 == 0 || num8 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].active(true);
|
|
Main.tile[i - 1, index1 - 1].type = (ushort) 5;
|
|
Main.tile[i - 1, index1 - 1].color(color);
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
int num11 = WorldGen.genRand.Next(3);
|
|
switch (num8)
|
|
{
|
|
case 0:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(13) != 0)
|
|
{
|
|
int num12 = WorldGen.genRand.Next(3);
|
|
if (num12 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num12 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num12 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num13 = WorldGen.genRand.Next(3);
|
|
if (num13 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num13 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num13 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
WorldGen.RangeFrame(i - 2, index1 - num2 - 1, i + 2, index1 + 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, (int) ((double) index1 - (double) num2 * 0.5), num2 + 1);
|
|
return true;
|
|
}
|
|
|
|
public static bool DefaultTreeWallTest(int wallType)
|
|
{
|
|
switch (wallType)
|
|
{
|
|
case 0:
|
|
case 80:
|
|
case 106:
|
|
case 107:
|
|
case 138:
|
|
case 139:
|
|
case 140:
|
|
case 141:
|
|
case 145:
|
|
case 150:
|
|
case 152:
|
|
case 245:
|
|
case 315:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool GemTreeWallTest(int wallType)
|
|
{
|
|
if (WorldGen.DefaultTreeWallTest(wallType))
|
|
return true;
|
|
switch (wallType)
|
|
{
|
|
case 2:
|
|
case 54:
|
|
case 55:
|
|
case 56:
|
|
case 57:
|
|
case 58:
|
|
case 59:
|
|
case 61:
|
|
case 185:
|
|
case 196:
|
|
case 197:
|
|
case 198:
|
|
case 199:
|
|
case 208:
|
|
case 209:
|
|
case 210:
|
|
case 211:
|
|
case 212:
|
|
case 213:
|
|
case 214:
|
|
case 215:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool GemTreeGroundTest(int tileType) => tileType >= 0 && (TileID.Sets.Conversion.Stone[tileType] || TileID.Sets.Conversion.Moss[tileType]);
|
|
|
|
public static bool VanityTreeGroundTest(int tileType) => tileType >= 0 && TileID.Sets.Conversion.Grass[tileType];
|
|
|
|
public static bool TryGrowingTreeByType(int treeTileType, int checkedX, int checkedY)
|
|
{
|
|
bool flag = false;
|
|
switch (treeTileType)
|
|
{
|
|
case 5:
|
|
flag = WorldGen.GrowTree(checkedX, checkedY);
|
|
break;
|
|
case 583:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Topaz);
|
|
break;
|
|
case 584:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Amethyst);
|
|
break;
|
|
case 585:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Sappphire);
|
|
break;
|
|
case 586:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Emerald);
|
|
break;
|
|
case 587:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Ruby);
|
|
break;
|
|
case 588:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Diamond);
|
|
break;
|
|
case 589:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.GemTree_Amber);
|
|
break;
|
|
case 596:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.VanityTree_Sakura);
|
|
break;
|
|
case 616:
|
|
flag = WorldGen.GrowTreeWithSettings(checkedX, checkedY, WorldGen.GrowTreeSettings.Profiles.VanityTree_Willow);
|
|
break;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static bool GrowTreeWithSettings(
|
|
int checkedX,
|
|
int checkedY,
|
|
WorldGen.GrowTreeSettings settings)
|
|
{
|
|
int index1 = checkedY;
|
|
while ((int) Main.tile[checkedX, index1].type == (int) settings.SaplingTileType)
|
|
++index1;
|
|
if (Main.tile[checkedX - 1, index1 - 1].liquid != (byte) 0 || Main.tile[checkedX, index1 - 1].liquid != (byte) 0 || Main.tile[checkedX + 1, index1 - 1].liquid != (byte) 0)
|
|
return false;
|
|
Tile tile1 = Main.tile[checkedX, index1];
|
|
if ((!tile1.nactive() || tile1.halfBrick() ? 0 : (tile1.slope() == (byte) 0 ? 1 : 0)) == 0)
|
|
return false;
|
|
bool flag1 = settings.WallTest((int) Main.tile[checkedX, index1 - 1].wall);
|
|
if (!settings.GroundTest((int) tile1.type) || !flag1 || (!Main.tile[checkedX - 1, index1].active() || !settings.GroundTest((int) Main.tile[checkedX - 1, index1].type) ? (!Main.tile[checkedX + 1, index1].active() ? 0 : (settings.GroundTest((int) Main.tile[checkedX + 1, index1].type) ? 1 : 0)) : 1) == 0)
|
|
return false;
|
|
byte color = Main.tile[checkedX, index1].color();
|
|
int num1 = 2;
|
|
int num2 = WorldGen.genRand.Next(settings.TreeHeightMin, settings.TreeHeightMax + 1);
|
|
int num3 = num2 + settings.TreeTopPaddingNeeded;
|
|
if (!WorldGen.EmptyTileCheck(checkedX - num1, checkedX + num1, index1 - num3, index1 - 1, 20))
|
|
return false;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
for (int index2 = index1 - num2; index2 < index1; ++index2)
|
|
{
|
|
Tile tile2 = Main.tile[checkedX, index2];
|
|
tile2.frameNumber((byte) WorldGen.genRand.Next(3));
|
|
tile2.active(true);
|
|
tile2.type = settings.TreeTileType;
|
|
tile2.color(color);
|
|
int num4 = WorldGen.genRand.Next(3);
|
|
int num5 = WorldGen.genRand.Next(10);
|
|
if (index2 == index1 - 1 || index2 == index1 - num2)
|
|
num5 = 0;
|
|
while (((num5 == 5 ? 1 : (num5 == 7 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0 || ((num5 == 6 ? 1 : (num5 == 7 ? 1 : 0)) & (flag3 ? 1 : 0)) != 0)
|
|
num5 = WorldGen.genRand.Next(10);
|
|
flag2 = false;
|
|
flag3 = false;
|
|
if (num5 == 5 || num5 == 7)
|
|
flag2 = true;
|
|
if (num5 == 6 || num5 == 7)
|
|
flag3 = true;
|
|
switch (num5)
|
|
{
|
|
case 1:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 44;
|
|
tile2.frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 44;
|
|
tile2.frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 44;
|
|
tile2.frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 22;
|
|
tile2.frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 88;
|
|
tile2.frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 88;
|
|
tile2.frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 88;
|
|
tile2.frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 66;
|
|
tile2.frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 66;
|
|
tile2.frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 66;
|
|
tile2.frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 110;
|
|
tile2.frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 110;
|
|
tile2.frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 110;
|
|
tile2.frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
if (num4 == 0)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num5 == 5 || num5 == 7)
|
|
{
|
|
Tile tile3 = Main.tile[checkedX - 1, index2];
|
|
tile3.active(true);
|
|
tile3.type = settings.TreeTileType;
|
|
tile3.color(color);
|
|
int num6 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
tile3.frameX = (short) 44;
|
|
tile3.frameY = (short) 198;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
tile3.frameX = (short) 44;
|
|
tile3.frameY = (short) 220;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
tile3.frameX = (short) 44;
|
|
tile3.frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
tile3.frameX = (short) 66;
|
|
tile3.frameY = (short) 0;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
tile3.frameX = (short) 66;
|
|
tile3.frameY = (short) 22;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
tile3.frameX = (short) 66;
|
|
tile3.frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (num5 == 6 || num5 == 7)
|
|
{
|
|
Tile tile4 = Main.tile[checkedX + 1, index2];
|
|
tile4.active(true);
|
|
tile4.type = settings.TreeTileType;
|
|
tile4.color(color);
|
|
int num7 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
tile4.frameX = (short) 66;
|
|
tile4.frameY = (short) 198;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
tile4.frameX = (short) 66;
|
|
tile4.frameY = (short) 220;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
tile4.frameX = (short) 66;
|
|
tile4.frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
tile4.frameX = (short) 88;
|
|
tile4.frameY = (short) 66;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
tile4.frameX = (short) 88;
|
|
tile4.frameY = (short) 88;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
tile4.frameX = (short) 88;
|
|
tile4.frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bool flag4 = false;
|
|
bool flag5 = false;
|
|
if (Main.tile[checkedX - 1, index1].nactive() && !Main.tile[checkedX - 1, index1].halfBrick() && Main.tile[checkedX - 1, index1].slope() == (byte) 0 && WorldGen.IsTileTypeFitForTree(Main.tile[checkedX - 1, index1].type))
|
|
flag4 = true;
|
|
if (Main.tile[checkedX + 1, index1].nactive() && !Main.tile[checkedX + 1, index1].halfBrick() && Main.tile[checkedX + 1, index1].slope() == (byte) 0 && WorldGen.IsTileTypeFitForTree(Main.tile[checkedX + 1, index1].type))
|
|
flag5 = true;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
flag4 = false;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
flag5 = false;
|
|
if (flag5)
|
|
{
|
|
Main.tile[checkedX + 1, index1 - 1].active(true);
|
|
Main.tile[checkedX + 1, index1 - 1].type = settings.TreeTileType;
|
|
Main.tile[checkedX + 1, index1 - 1].color(color);
|
|
int num8 = WorldGen.genRand.Next(3);
|
|
if (num8 == 0)
|
|
{
|
|
Main.tile[checkedX + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[checkedX + 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num8 == 1)
|
|
{
|
|
Main.tile[checkedX + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[checkedX + 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num8 == 2)
|
|
{
|
|
Main.tile[checkedX + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[checkedX + 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
if (flag4)
|
|
{
|
|
Main.tile[checkedX - 1, index1 - 1].active(true);
|
|
Main.tile[checkedX - 1, index1 - 1].type = settings.TreeTileType;
|
|
Main.tile[checkedX - 1, index1 - 1].color(color);
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
if (num9 == 0)
|
|
{
|
|
Main.tile[checkedX - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[checkedX - 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num9 == 1)
|
|
{
|
|
Main.tile[checkedX - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[checkedX - 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num9 == 2)
|
|
{
|
|
Main.tile[checkedX - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[checkedX - 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
if (flag4 & flag5)
|
|
{
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 88;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 88;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 88;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (flag4)
|
|
{
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (flag5)
|
|
{
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 66;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 66;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[checkedX, index1 - 1].frameX = (short) 66;
|
|
Main.tile[checkedX, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(13) != 0)
|
|
{
|
|
int num11 = WorldGen.genRand.Next(3);
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 22;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 22;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 22;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num12 = WorldGen.genRand.Next(3);
|
|
if (num12 == 0)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num12 == 1)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num12 == 2)
|
|
{
|
|
Main.tile[checkedX, index1 - num2].frameX = (short) 0;
|
|
Main.tile[checkedX, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
WorldGen.RangeFrame(checkedX - 2, index1 - num2 - 1, checkedX + 2, index1 + 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, checkedX, (int) ((double) index1 - (double) num2 * 0.5), num2 + 1);
|
|
return true;
|
|
}
|
|
|
|
public static void GrowUndergroundTree(int i, int y)
|
|
{
|
|
int index1 = y;
|
|
if (Main.tile[i, index1].type != (ushort) 60 || !Main.tile[i, index1].nactive() || Main.tile[i, index1].halfBrick() || Main.tile[i, index1].slope() != (byte) 0 || Main.tile[i, index1].type != (ushort) 60 || (!Main.tile[i - 1, index1].active() || Main.tile[i - 1, index1].type != (ushort) 60) && (!Main.tile[i + 1, index1].active() || Main.tile[i + 1, index1].type != (ushort) 60))
|
|
return;
|
|
int num1 = 1;
|
|
int num2 = WorldGen.genRand.Next(5, 15);
|
|
int num3 = num2 + 2;
|
|
if (Main.tile[i, index1].type == (ushort) 60)
|
|
num3 += 5;
|
|
if (!WorldGen.EmptyTileCheck(i - num1, i + num1, index1 - num3, index1 - 1, 20))
|
|
return;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
for (int index2 = index1 - num2; index2 < index1; ++index2)
|
|
{
|
|
Main.tile[i, index2].frameNumber((byte) WorldGen.genRand.Next(3));
|
|
Main.tile[i, index2].active(true);
|
|
Main.tile[i, index2].type = (ushort) 5;
|
|
int num4 = WorldGen.genRand.Next(3);
|
|
int num5 = WorldGen.genRand.Next(10);
|
|
if (index2 == index1 - 1 || index2 == index1 - num2)
|
|
num5 = 0;
|
|
while (((num5 == 5 ? 1 : (num5 == 7 ? 1 : 0)) & (flag1 ? 1 : 0)) != 0 || ((num5 == 6 ? 1 : (num5 == 7 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0)
|
|
num5 = WorldGen.genRand.Next(10);
|
|
flag1 = false;
|
|
flag2 = false;
|
|
if (num5 == 5 || num5 == 7)
|
|
flag1 = true;
|
|
if (num5 == 6 || num5 == 7)
|
|
flag2 = true;
|
|
switch (num5)
|
|
{
|
|
case 1:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 44;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 22;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 88;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 66;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 66;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 88;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 110;
|
|
Main.tile[i, index2].frameY = (short) 110;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
if (num4 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num4 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 22;
|
|
}
|
|
if (num4 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 44;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num5 == 5 || num5 == 7)
|
|
{
|
|
Main.tile[i - 1, index2].active(true);
|
|
Main.tile[i - 1, index2].type = (ushort) 5;
|
|
int num6 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 44;
|
|
Main.tile[i - 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num6 == 0)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 0;
|
|
}
|
|
if (num6 == 1)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 22;
|
|
}
|
|
if (num6 == 2)
|
|
{
|
|
Main.tile[i - 1, index2].frameX = (short) 66;
|
|
Main.tile[i - 1, index2].frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (num5 == 6 || num5 == 7)
|
|
{
|
|
Main.tile[i + 1, index2].active(true);
|
|
Main.tile[i + 1, index2].type = (ushort) 5;
|
|
int num7 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.genRand.Next(3) < 2)
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 198;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 220;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 66;
|
|
Main.tile[i + 1, index2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num7 == 0)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 66;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 88;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
Main.tile[i + 1, index2].frameX = (short) 88;
|
|
Main.tile[i + 1, index2].frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num8 = WorldGen.genRand.Next(3);
|
|
bool flag3 = false;
|
|
bool flag4 = false;
|
|
if (Main.tile[i - 1, index1].nactive() && !Main.tile[i - 1, index1].halfBrick() && Main.tile[i - 1, index1].slope() == (byte) 0 && (Main.tile[i - 1, index1].type == (ushort) 2 || Main.tile[i - 1, index1].type == (ushort) 23 || Main.tile[i - 1, index1].type == (ushort) 60 || Main.tile[i - 1, index1].type == (ushort) 109 || Main.tile[i - 1, index1].type == (ushort) 147))
|
|
flag3 = true;
|
|
if (Main.tile[i + 1, index1].nactive() && !Main.tile[i + 1, index1].halfBrick() && Main.tile[i + 1, index1].slope() == (byte) 0 && (Main.tile[i + 1, index1].type == (ushort) 2 || Main.tile[i + 1, index1].type == (ushort) 23 || Main.tile[i + 1, index1].type == (ushort) 60 || Main.tile[i + 1, index1].type == (ushort) 109 || Main.tile[i + 1, index1].type == (ushort) 147))
|
|
flag4 = true;
|
|
if (!flag3)
|
|
{
|
|
if (num8 == 0)
|
|
num8 = 2;
|
|
if (num8 == 1)
|
|
num8 = 3;
|
|
}
|
|
if (!flag4)
|
|
{
|
|
if (num8 == 0)
|
|
num8 = 1;
|
|
if (num8 == 2)
|
|
num8 = 3;
|
|
}
|
|
if (flag3 && !flag4)
|
|
num8 = 2;
|
|
if (flag4 && !flag3)
|
|
num8 = 1;
|
|
if (num8 == 0 || num8 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].active(true);
|
|
Main.tile[i + 1, index1 - 1].type = (ushort) 5;
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
if (num9 == 0)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num9 == 1)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num9 == 2)
|
|
{
|
|
Main.tile[i + 1, index1 - 1].frameX = (short) 22;
|
|
Main.tile[i + 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
if (num8 == 0 || num8 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].active(true);
|
|
Main.tile[i - 1, index1 - 1].type = (ushort) 5;
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
if (num10 == 0)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
Main.tile[i - 1, index1 - 1].frameX = (short) 44;
|
|
Main.tile[i - 1, index1 - 1].frameY = (short) 176;
|
|
}
|
|
}
|
|
int num11 = WorldGen.genRand.Next(3);
|
|
switch (num8)
|
|
{
|
|
case 0:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 88;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 0;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (num11 == 0)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 132;
|
|
}
|
|
if (num11 == 1)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 154;
|
|
}
|
|
if (num11 == 2)
|
|
{
|
|
Main.tile[i, index1 - 1].frameX = (short) 66;
|
|
Main.tile[i, index1 - 1].frameY = (short) 176;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(8) != 0)
|
|
{
|
|
int num12 = WorldGen.genRand.Next(3);
|
|
if (num12 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num12 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num12 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 22;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num13 = WorldGen.genRand.Next(3);
|
|
if (num13 == 0)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 198;
|
|
}
|
|
if (num13 == 1)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 220;
|
|
}
|
|
if (num13 == 2)
|
|
{
|
|
Main.tile[i, index1 - num2].frameX = (short) 0;
|
|
Main.tile[i, index1 - num2].frameY = (short) 242;
|
|
}
|
|
}
|
|
WorldGen.RangeFrame(i - 2, index1 - num2 - 1, i + 2, index1 + 1);
|
|
if (Main.netMode != 2 || WorldGen.gen)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, i, (int) ((double) index1 - (double) num2 * 0.5), num2 + 1);
|
|
}
|
|
|
|
public static bool GrowShroom(int i, int y)
|
|
{
|
|
int index1 = y;
|
|
if (Main.tile[i - 1, index1 - 1].lava() || Main.tile[i - 1, index1 - 1].lava() || Main.tile[i + 1, index1 - 1].lava() || !Main.tile[i, index1].nactive() || Main.tile[i, index1].type != (ushort) 70 || Main.tile[i, index1 - 1].wall != (ushort) 0 || !Main.tile[i - 1, index1].active() || Main.tile[i - 1, index1].type != (ushort) 70 || !Main.tile[i + 1, index1].active() || Main.tile[i + 1, index1].type != (ushort) 70 || !WorldGen.EmptyTileCheck(i - 2, i + 2, index1 - 13, index1 - 3, 71) || !WorldGen.EmptyTileCheck(i - 1, i + 1, index1 - 3, index1 - 1, 71))
|
|
return false;
|
|
if (WorldGen.gen && WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
Main.tile[i, index1].halfBrick(false);
|
|
Main.tile[i, index1].slope((byte) 0);
|
|
}
|
|
if (Main.tile[i, index1].halfBrick() || Main.tile[i, index1].slope() != (byte) 0)
|
|
return false;
|
|
int num1 = WorldGen.genRand.Next(4, 11);
|
|
for (int index2 = index1 - num1; index2 < index1; ++index2)
|
|
{
|
|
Main.tile[i, index2].frameNumber((byte) WorldGen.genRand.Next(3));
|
|
Main.tile[i, index2].active(true);
|
|
Main.tile[i, index2].type = (ushort) 72;
|
|
int num2 = WorldGen.genRand.Next(3);
|
|
if (num2 == 0)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 0;
|
|
}
|
|
if (num2 == 1)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 18;
|
|
}
|
|
if (num2 == 2)
|
|
{
|
|
Main.tile[i, index2].frameX = (short) 0;
|
|
Main.tile[i, index2].frameY = (short) 36;
|
|
}
|
|
}
|
|
int num3 = WorldGen.genRand.Next(3);
|
|
if (num3 == 0)
|
|
{
|
|
Main.tile[i, index1 - num1].frameX = (short) 36;
|
|
Main.tile[i, index1 - num1].frameY = (short) 0;
|
|
}
|
|
if (num3 == 1)
|
|
{
|
|
Main.tile[i, index1 - num1].frameX = (short) 36;
|
|
Main.tile[i, index1 - num1].frameY = (short) 18;
|
|
}
|
|
if (num3 == 2)
|
|
{
|
|
Main.tile[i, index1 - num1].frameX = (short) 36;
|
|
Main.tile[i, index1 - num1].frameY = (short) 36;
|
|
}
|
|
WorldGen.RangeFrame(i - 2, index1 - num1 - 1, i + 2, index1 + 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, (int) ((double) index1 - (double) num1 * 0.5), num1 + 1);
|
|
return true;
|
|
}
|
|
|
|
public static void AddTrees()
|
|
{
|
|
float num1 = (float) (0.100000001490116 + (double) WorldGen.genRand.NextFloat() * 0.349999994039536);
|
|
float num2 = (float) (0.100000001490116 + (double) WorldGen.genRand.NextFloat() * 0.349999994039536);
|
|
for (int index1 = 1; index1 < Main.maxTilesX - 1; ++index1)
|
|
{
|
|
for (int index2 = 20; (double) index2 < Main.worldSurface; ++index2)
|
|
{
|
|
if (index1 < 380)
|
|
{
|
|
if ((double) WorldGen.genRand.NextFloat() < (double) num1 && Main.tile[index1, index2].liquid == (byte) 0)
|
|
WorldGen.GrowPalmTree(index1, index2);
|
|
}
|
|
else if (index1 > Main.maxTilesX - 380 && (double) WorldGen.genRand.NextFloat() < (double) num2 && Main.tile[index1, index2].liquid == (byte) 0)
|
|
WorldGen.GrowPalmTree(index1, index2);
|
|
int maxValue = 20;
|
|
if (WorldGen.drunkWorldGen)
|
|
maxValue /= 3;
|
|
if (Main.tile[index1, index2].type == (ushort) 2 && WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.GrowTreeWithSettings(index1, index2, WorldGen.GrowTreeSettings.Profiles.VanityTree_Willow);
|
|
else
|
|
WorldGen.GrowTreeWithSettings(index1, index2, WorldGen.GrowTreeSettings.Profiles.VanityTree_Sakura);
|
|
}
|
|
else
|
|
WorldGen.GrowTree(index1, index2);
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
++index1;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
++index1;
|
|
}
|
|
}
|
|
|
|
public static void ExplodeMine(int i, int j)
|
|
{
|
|
int type = (int) Main.tile[i, j].type;
|
|
WorldGen.KillTile(i, j, noItem: true);
|
|
NetMessage.SendTileSquare(-1, i, j, 1);
|
|
Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.0f, 164, 250, 10f, Main.myPlayer);
|
|
}
|
|
|
|
public static bool EmptyTileCheck(int startX, int endX, int startY, int endY, int ignoreID = -1)
|
|
{
|
|
if (startX < 0 || endX >= Main.maxTilesX || startY < 0 || endY >= Main.maxTilesY)
|
|
return false;
|
|
bool flag = false;
|
|
if (ignoreID != -1 && TileID.Sets.CommonSapling[ignoreID])
|
|
flag = true;
|
|
label_20:
|
|
for (int index1 = startX; index1 < endX + 1; ++index1)
|
|
{
|
|
for (int index2 = startY; index2 < endY + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
{
|
|
switch (ignoreID)
|
|
{
|
|
case -1:
|
|
return false;
|
|
case 11:
|
|
if (Main.tile[index1, index2].type != (ushort) 11)
|
|
return false;
|
|
continue;
|
|
case 71:
|
|
if (Main.tile[index1, index2].type != (ushort) 71)
|
|
return false;
|
|
continue;
|
|
default:
|
|
if (flag)
|
|
{
|
|
if (!TileID.Sets.CommonSapling[(int) Main.tile[index1, index2].type])
|
|
{
|
|
switch (Main.tile[index1, index2].type)
|
|
{
|
|
case 3:
|
|
case 24:
|
|
case 32:
|
|
case 61:
|
|
case 62:
|
|
case 69:
|
|
case 71:
|
|
case 73:
|
|
case 74:
|
|
case 82:
|
|
case 83:
|
|
case 84:
|
|
case 110:
|
|
case 113:
|
|
case 201:
|
|
case 233:
|
|
case 352:
|
|
case 485:
|
|
case 529:
|
|
case 530:
|
|
continue;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
goto label_20;
|
|
}
|
|
else
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void StartHardmode()
|
|
{
|
|
if (Main.netMode == 1 || Main.hardMode)
|
|
return;
|
|
Main.hardMode = true;
|
|
ThreadPool.QueueUserWorkItem(new WaitCallback(WorldGen.smCallBack), (object) 1);
|
|
}
|
|
|
|
public static void smCallBack(object threadContext)
|
|
{
|
|
WorldGen.IsGeneratingHardMode = true;
|
|
if (Main.rand == null)
|
|
Main.rand = new UnifiedRandom((int) DateTime.Now.Ticks);
|
|
float num1 = (float) WorldGen.genRand.Next(300, 400) * (1f / 1000f);
|
|
float num2 = (float) WorldGen.genRand.Next(200, 300) * (1f / 1000f);
|
|
int i1 = (int) ((double) Main.maxTilesX * (double) num1);
|
|
int i2 = (int) ((double) Main.maxTilesX * (1.0 - (double) num1));
|
|
int num3 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
i2 = (int) ((double) Main.maxTilesX * (double) num1);
|
|
i1 = (int) ((double) Main.maxTilesX * (1.0 - (double) num1));
|
|
num3 = -1;
|
|
}
|
|
int num4 = 1;
|
|
if (WorldGen.dungeonX < Main.maxTilesX / 2)
|
|
num4 = -1;
|
|
if (num4 < 0)
|
|
{
|
|
if (i2 < i1)
|
|
i2 = (int) ((double) Main.maxTilesX * (double) num2);
|
|
else
|
|
i1 = (int) ((double) Main.maxTilesX * (double) num2);
|
|
}
|
|
else if (i2 > i1)
|
|
i2 = (int) ((double) Main.maxTilesX * (1.0 - (double) num2));
|
|
else
|
|
i1 = (int) ((double) Main.maxTilesX * (1.0 - (double) num2));
|
|
WorldGen.GERunner(i1, 0, (float) (3 * num3), 5f);
|
|
WorldGen.GERunner(i2, 0, (float) (3 * -num3), 5f, false);
|
|
int num5 = (int) (25.0 * (double) ((float) Main.maxTilesX / 4200f));
|
|
ShapeData data = new ShapeData();
|
|
int num6 = 0;
|
|
while (num5 > 0)
|
|
{
|
|
if (++num6 % 15000 == 0)
|
|
--num5;
|
|
Point point = WorldGen.RandomWorldPoint((int) Main.worldSurface - 100, 1, 190, 1);
|
|
Tile tile1 = Main.tile[point.X, point.Y];
|
|
Tile tile2 = Main.tile[point.X, point.Y - 1];
|
|
ushort type = 0;
|
|
if (TileID.Sets.Crimson[(int) tile1.type])
|
|
type = (ushort) (192 + WorldGen.genRand.Next(4));
|
|
else if (TileID.Sets.Corrupt[(int) tile1.type])
|
|
type = (ushort) (188 + WorldGen.genRand.Next(4));
|
|
else if (TileID.Sets.Hallow[(int) tile1.type])
|
|
type = (ushort) (200 + WorldGen.genRand.Next(4));
|
|
if (tile1.active() && type != (ushort) 0 && !tile2.active())
|
|
{
|
|
bool flag = WorldUtils.Gen(new Point(point.X, point.Y - 1), (GenShape) new ShapeFloodFill(1000), Actions.Chain((GenAction) new Modifiers.IsNotSolid(), (GenAction) new Modifiers.OnlyWalls(new ushort[31]
|
|
{
|
|
(ushort) 0,
|
|
(ushort) 54,
|
|
(ushort) 55,
|
|
(ushort) 56,
|
|
(ushort) 57,
|
|
(ushort) 58,
|
|
(ushort) 59,
|
|
(ushort) 61,
|
|
(ushort) 185,
|
|
(ushort) 212,
|
|
(ushort) 213,
|
|
(ushort) 214,
|
|
(ushort) 215,
|
|
(ushort) 2,
|
|
(ushort) 196,
|
|
(ushort) 197,
|
|
(ushort) 198,
|
|
(ushort) 199,
|
|
(ushort) 15,
|
|
(ushort) 40,
|
|
(ushort) 71,
|
|
(ushort) 64,
|
|
(ushort) 204,
|
|
(ushort) 205,
|
|
(ushort) 206,
|
|
(ushort) 207,
|
|
(ushort) 208,
|
|
(ushort) 209,
|
|
(ushort) 210,
|
|
(ushort) 211,
|
|
(ushort) 71
|
|
}), new Actions.Blank().Output(data)));
|
|
if (data.Count > 50 & flag)
|
|
{
|
|
WorldUtils.Gen(new Point(point.X, point.Y), (GenShape) new ModShapes.OuterOutline(data, useInterior: true), (GenAction) new Actions.PlaceWall(type));
|
|
--num5;
|
|
}
|
|
data.Clear();
|
|
}
|
|
}
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Lang.misc[15].Value, (byte) 50, B: (byte) 130);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[15].Key), new Color(50, (int) byte.MaxValue, 130));
|
|
break;
|
|
}
|
|
AchievementsHelper.NotifyProgressionEvent(9);
|
|
if (Main.netMode == 2)
|
|
Netplay.ResetSections();
|
|
WorldGen.IsGeneratingHardMode = false;
|
|
}
|
|
|
|
public static bool PlaceDoor(int i, int j, int type, int style = 0)
|
|
{
|
|
int num1 = style / 36;
|
|
int num2 = style % 36;
|
|
int num3 = 54 * num1;
|
|
int num4 = 54 * num2;
|
|
try
|
|
{
|
|
if (!Main.tile[i, j - 2].nactive() || !Main.tileSolid[(int) Main.tile[i, j - 2].type] || !WorldGen.SolidTile(i, j + 2))
|
|
return false;
|
|
Main.tile[i, j - 1].active(true);
|
|
Main.tile[i, j - 1].type = (ushort) 10;
|
|
Main.tile[i, j - 1].frameY = (short) num4;
|
|
Main.tile[i, j - 1].frameX = (short) (num3 + WorldGen.genRand.Next(3) * 18);
|
|
Main.tile[i, j].active(true);
|
|
Main.tile[i, j].type = (ushort) 10;
|
|
Main.tile[i, j].frameY = (short) (num4 + 18);
|
|
Main.tile[i, j].frameX = (short) (num3 + WorldGen.genRand.Next(3) * 18);
|
|
Main.tile[i, j + 1].active(true);
|
|
Main.tile[i, j + 1].type = (ushort) 10;
|
|
Main.tile[i, j + 1].frameY = (short) (num4 + 36);
|
|
Main.tile[i, j + 1].frameX = (short) (num3 + WorldGen.genRand.Next(3) * 18);
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool CloseDoor(int i, int j, bool forced = false)
|
|
{
|
|
int num1 = 0;
|
|
int num2 = i;
|
|
if (Main.tile[i, j] == null)
|
|
Main.tile[i, j] = new Tile();
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile.type != (ushort) 11)
|
|
return false;
|
|
int frameY = (int) tile.frameY;
|
|
int num3 = 0;
|
|
int num4 = 0;
|
|
while (frameY >= 54)
|
|
{
|
|
frameY -= 54;
|
|
++num3;
|
|
}
|
|
if (frameX >= 72)
|
|
{
|
|
int num5 = num3 + 36 * (frameX / 72);
|
|
num4 += 54 * (frameX / 72);
|
|
}
|
|
int y = j - frameY / 18;
|
|
switch (frameX % 72)
|
|
{
|
|
case 0:
|
|
num2 = i;
|
|
num1 = 1;
|
|
break;
|
|
case 18:
|
|
num2 = i - 1;
|
|
num1 = 1;
|
|
break;
|
|
case 36:
|
|
num2 = i + 1;
|
|
num1 = -1;
|
|
break;
|
|
case 54:
|
|
num2 = i;
|
|
num1 = -1;
|
|
break;
|
|
}
|
|
int num6 = num2;
|
|
if (num1 == -1)
|
|
num6 = num2 - 1;
|
|
if (!forced)
|
|
{
|
|
for (int j1 = y; j1 < y + 3; ++j1)
|
|
{
|
|
if (!Collision.EmptyTile(num2, j1, true))
|
|
return false;
|
|
}
|
|
}
|
|
for (int index1 = num6; index1 < num6 + 2; ++index1)
|
|
{
|
|
for (int index2 = y; index2 < y + 3; ++index2)
|
|
{
|
|
if (index1 == num2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
Main.tile[index1, index2].type = (ushort) 10;
|
|
Main.tile[index1, index2].frameX = (short) (WorldGen.genRand.Next(3) * 18 + num4);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
Wiring.SkipWire(num2, y);
|
|
Wiring.SkipWire(num2, y + 1);
|
|
Wiring.SkipWire(num2, y + 2);
|
|
}
|
|
for (int i1 = num2 - 1; i1 <= num2 + 1; ++i1)
|
|
{
|
|
for (int j2 = y - 1; j2 <= y + 2; ++j2)
|
|
WorldGen.TileFrame(i1, j2);
|
|
}
|
|
SoundEngine.PlaySound(9, i * 16, j * 16);
|
|
return true;
|
|
}
|
|
|
|
public static bool AddLifeCrystal(int i, int j)
|
|
{
|
|
for (int index = j; index < Main.maxTilesY; ++index)
|
|
{
|
|
if (Main.tile[i, index].active() && Main.tileSolid[(int) Main.tile[i, index].type])
|
|
{
|
|
int endX = i;
|
|
int endY = index - 1;
|
|
if (Main.tile[endX, endY - 1].lava() || Main.tile[endX - 1, endY - 1].lava() || !WorldGen.EmptyTileCheck(endX - 1, endX, endY - 1, endY) || Main.wallDungeon[(int) Main.tile[endX, endY].wall])
|
|
return false;
|
|
Tile tile1 = Main.tile[endX - 1, endY + 1];
|
|
Tile tile2 = Main.tile[endX, endY + 1];
|
|
if (!tile1.nactive() || !Main.tileSolid[(int) tile1.type] || !tile2.nactive() || !Main.tileSolid[(int) tile2.type])
|
|
return false;
|
|
if (tile1.blockType() != 0)
|
|
{
|
|
tile1.slope((byte) 0);
|
|
tile1.halfBrick(false);
|
|
}
|
|
if (tile2.blockType() != 0)
|
|
{
|
|
tile2.slope((byte) 0);
|
|
tile2.halfBrick(false);
|
|
}
|
|
Main.tile[endX - 1, endY - 1].active(true);
|
|
Main.tile[endX - 1, endY - 1].type = (ushort) 12;
|
|
Main.tile[endX - 1, endY - 1].frameX = (short) 0;
|
|
Main.tile[endX - 1, endY - 1].frameY = (short) 0;
|
|
Main.tile[endX, endY - 1].active(true);
|
|
Main.tile[endX, endY - 1].type = (ushort) 12;
|
|
Main.tile[endX, endY - 1].frameX = (short) 18;
|
|
Main.tile[endX, endY - 1].frameY = (short) 0;
|
|
Main.tile[endX - 1, endY].active(true);
|
|
Main.tile[endX - 1, endY].type = (ushort) 12;
|
|
Main.tile[endX - 1, endY].frameX = (short) 0;
|
|
Main.tile[endX - 1, endY].frameY = (short) 18;
|
|
Main.tile[endX, endY].active(true);
|
|
Main.tile[endX, endY].type = (ushort) 12;
|
|
Main.tile[endX, endY].frameX = (short) 18;
|
|
Main.tile[endX, endY].frameY = (short) 18;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void AddShadowOrb(int x, int y)
|
|
{
|
|
if (x < 10 || x > Main.maxTilesX - 10 || y < 10 || y > Main.maxTilesY - 10)
|
|
return;
|
|
for (int index1 = x - 1; index1 < x + 1; ++index1)
|
|
{
|
|
for (int index2 = y - 1; index2 < y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 31)
|
|
return;
|
|
}
|
|
}
|
|
short num = 0;
|
|
if (WorldGen.crimson)
|
|
num += (short) 36;
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].type = (ushort) 31;
|
|
Main.tile[x - 1, y - 1].frameX = num;
|
|
Main.tile[x - 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].type = (ushort) 31;
|
|
Main.tile[x, y - 1].frameX = (short) (18 + (int) num);
|
|
Main.tile[x, y - 1].frameY = (short) 0;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].type = (ushort) 31;
|
|
Main.tile[x - 1, y].frameX = num;
|
|
Main.tile[x - 1, y].frameY = (short) 18;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].type = (ushort) 31;
|
|
Main.tile[x, y].frameX = (short) (18 + (int) num);
|
|
Main.tile[x, y].frameY = (short) 18;
|
|
}
|
|
|
|
public static void AddHellHouses()
|
|
{
|
|
int num1 = (int) ((double) Main.maxTilesX * 0.25);
|
|
for (int i = 100; i < Main.maxTilesX - 100; ++i)
|
|
{
|
|
if ((!WorldGen.drunkWorldGen || i <= num1 || i >= Main.maxTilesX - num1) && (WorldGen.drunkWorldGen || i >= num1 && i <= Main.maxTilesX - num1))
|
|
{
|
|
int j = Main.maxTilesY - 40;
|
|
while (Main.tile[i, j].active() || Main.tile[i, j].liquid > (byte) 0)
|
|
--j;
|
|
if (Main.tile[i, j + 1].active())
|
|
{
|
|
ushort tileType = (ushort) WorldGen.genRand.Next(75, 77);
|
|
byte wallType = 13;
|
|
if (WorldGen.genRand.Next(5) > 0)
|
|
tileType = (ushort) 75;
|
|
if (tileType == (ushort) 75)
|
|
wallType = (byte) 14;
|
|
if (WorldGen.getGoodWorldGen)
|
|
tileType = (ushort) 76;
|
|
WorldGen.HellFort(i, j, tileType, wallType);
|
|
i += WorldGen.genRand.Next(30, 130);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
i += WorldGen.genRand.Next(0, 200);
|
|
}
|
|
}
|
|
}
|
|
float num2 = (float) (Main.maxTilesX / 4200);
|
|
for (int index1 = 0; (double) index1 < 200.0 * (double) num2; ++index1)
|
|
{
|
|
int num3 = 0;
|
|
bool flag1 = false;
|
|
while (!flag1)
|
|
{
|
|
++num3;
|
|
int index2 = WorldGen.genRand.Next((int) ((double) Main.maxTilesX * 0.2), (int) ((double) Main.maxTilesX * 0.8));
|
|
int j = WorldGen.genRand.Next(Main.maxTilesY - 300, Main.maxTilesY - 20);
|
|
if (Main.tile[index2, j].active() && (Main.tile[index2, j].type == (ushort) 75 || Main.tile[index2, j].type == (ushort) 76))
|
|
{
|
|
int num4 = 0;
|
|
if (Main.tile[index2 - 1, j].wall > (ushort) 0)
|
|
num4 = -1;
|
|
else if (Main.tile[index2 + 1, j].wall > (ushort) 0)
|
|
num4 = 1;
|
|
if (!Main.tile[index2 + num4, j].active() && !Main.tile[index2 + num4, j + 1].active())
|
|
{
|
|
bool flag2 = false;
|
|
for (int index3 = index2 - 8; index3 < index2 + 8; ++index3)
|
|
{
|
|
for (int index4 = j - 8; index4 < j + 8; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 4)
|
|
{
|
|
flag2 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag2)
|
|
{
|
|
WorldGen.PlaceTile(index2 + num4, j, 4, true, true, style: 7);
|
|
flag1 = true;
|
|
}
|
|
}
|
|
}
|
|
if (num3 > 1000)
|
|
flag1 = true;
|
|
}
|
|
}
|
|
float num5 = 4200000f / (float) Main.maxTilesX;
|
|
for (int index5 = 0; (double) index5 < (double) num5; ++index5)
|
|
{
|
|
int num6 = 0;
|
|
int i1 = WorldGen.genRand.Next(num1, Main.maxTilesX - num1);
|
|
int j = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
|
|
while (Main.tile[i1, j].wall != (ushort) 13 && Main.tile[i1, j].wall != (ushort) 14 || Main.tile[i1, j].active())
|
|
{
|
|
i1 = WorldGen.genRand.Next(num1, Main.maxTilesX - num1);
|
|
j = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
|
|
if (WorldGen.drunkWorldGen)
|
|
i1 = WorldGen.genRand.Next(2) != 0 ? WorldGen.genRand.Next(Main.maxTilesX - num1, Main.maxTilesX - 50) : WorldGen.genRand.Next(50, num1);
|
|
++num6;
|
|
if (num6 > 100000)
|
|
break;
|
|
}
|
|
if (num6 <= 100000 && (Main.tile[i1, j].wall == (ushort) 13 || Main.tile[i1, j].wall == (ushort) 14) && !Main.tile[i1, j].active())
|
|
{
|
|
while (!WorldGen.SolidTile(i1, j) && j < Main.maxTilesY - 20)
|
|
++j;
|
|
int index6 = j - 1;
|
|
int i2 = i1;
|
|
int i3 = i1;
|
|
while (!Main.tile[i2, index6].active() && WorldGen.SolidTile(i2, index6 + 1))
|
|
--i2;
|
|
int num7 = i2 + 1;
|
|
while (!Main.tile[i3, index6].active() && WorldGen.SolidTile(i3, index6 + 1))
|
|
++i3;
|
|
int num8 = i3 - 1;
|
|
int num9 = num8 - num7;
|
|
int index7 = (num8 + num7) / 2;
|
|
if (!Main.tile[index7, index6].active() && (Main.tile[index7, index6].wall == (ushort) 13 || Main.tile[index7, index6].wall == (ushort) 14) && WorldGen.SolidTile(index7, index6 + 1))
|
|
{
|
|
int style1 = 16;
|
|
int style2 = 13;
|
|
int style3 = 14;
|
|
int style4 = 49;
|
|
int style5 = 4;
|
|
int style6 = 8;
|
|
int style7 = 15;
|
|
int style8 = 9;
|
|
int style9 = 10;
|
|
int style10 = 17;
|
|
int style11 = 25;
|
|
int style12 = 25;
|
|
int style13 = 23;
|
|
int style14 = 25;
|
|
int num10 = WorldGen.genRand.Next(13);
|
|
int num11 = 0;
|
|
int num12 = 0;
|
|
if (num10 == 0)
|
|
{
|
|
num11 = 5;
|
|
num12 = 4;
|
|
}
|
|
if (num10 == 1)
|
|
{
|
|
num11 = 4;
|
|
num12 = 3;
|
|
}
|
|
if (num10 == 2)
|
|
{
|
|
num11 = 3;
|
|
num12 = 5;
|
|
}
|
|
if (num10 == 3)
|
|
{
|
|
num11 = 4;
|
|
num12 = 6;
|
|
}
|
|
if (num10 == 4)
|
|
{
|
|
num11 = 3;
|
|
num12 = 3;
|
|
}
|
|
if (num10 == 5)
|
|
{
|
|
num11 = 5;
|
|
num12 = 3;
|
|
}
|
|
if (num10 == 6)
|
|
{
|
|
num11 = 5;
|
|
num12 = 4;
|
|
}
|
|
if (num10 == 7)
|
|
{
|
|
num11 = 5;
|
|
num12 = 4;
|
|
}
|
|
if (num10 == 8)
|
|
{
|
|
num11 = 5;
|
|
num12 = 4;
|
|
}
|
|
if (num10 == 9)
|
|
{
|
|
num11 = 3;
|
|
num12 = 5;
|
|
}
|
|
if (num10 == 10)
|
|
{
|
|
num11 = 5;
|
|
num12 = 3;
|
|
}
|
|
if (num10 == 11)
|
|
{
|
|
num11 = 2;
|
|
num12 = 4;
|
|
}
|
|
if (num10 == 12)
|
|
{
|
|
num11 = 3;
|
|
num12 = 3;
|
|
}
|
|
for (int index8 = index7 - num11; index8 <= index7 + num11; ++index8)
|
|
{
|
|
for (int index9 = index6 - num12; index9 <= index6; ++index9)
|
|
{
|
|
if (Main.tile[index8, index9].active())
|
|
{
|
|
num10 = -1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ((double) num9 < (double) num11 * 1.75)
|
|
num10 = -1;
|
|
switch (num10)
|
|
{
|
|
case 0:
|
|
WorldGen.PlaceTile(index7, index6, 14, true, style: style2);
|
|
int num13 = WorldGen.genRand.Next(6);
|
|
if (num13 < 3)
|
|
WorldGen.PlaceTile(index7 + num13, index6 - 2, 33, true, style: style12);
|
|
if (Main.tile[index7, index6].active())
|
|
{
|
|
if (!Main.tile[index7 - 2, index6].active())
|
|
{
|
|
WorldGen.PlaceTile(index7 - 2, index6, 15, true, style: style1);
|
|
if (Main.tile[index7 - 2, index6].active())
|
|
{
|
|
Main.tile[index7 - 2, index6].frameX += (short) 18;
|
|
Main.tile[index7 - 2, index6 - 1].frameX += (short) 18;
|
|
}
|
|
}
|
|
if (!Main.tile[index7 + 2, index6].active())
|
|
{
|
|
WorldGen.PlaceTile(index7 + 2, index6, 15, true, style: style1);
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 1:
|
|
WorldGen.PlaceTile(index7, index6, 18, true, style: style3);
|
|
int num14 = WorldGen.genRand.Next(4);
|
|
if (num14 < 2)
|
|
WorldGen.PlaceTile(index7 + num14, index6 - 1, 33, true, style: style12);
|
|
if (Main.tile[index7, index6].active())
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
if (!Main.tile[index7 - 1, index6].active())
|
|
{
|
|
WorldGen.PlaceTile(index7 - 1, index6, 15, true, style: style1);
|
|
if (Main.tile[index7 - 1, index6].active())
|
|
{
|
|
Main.tile[index7 - 1, index6].frameX += (short) 18;
|
|
Main.tile[index7 - 1, index6 - 1].frameX += (short) 18;
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
if (!Main.tile[index7 + 2, index6].active())
|
|
{
|
|
WorldGen.PlaceTile(index7 + 2, index6, 15, true, style: style1);
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 2:
|
|
WorldGen.PlaceTile(index7, index6, 105, true, style: style4);
|
|
continue;
|
|
case 3:
|
|
WorldGen.PlaceTile(index7, index6, 101, true, style: style5);
|
|
continue;
|
|
case 4:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceTile(index7, index6, 15, true, style: style1);
|
|
Main.tile[index7, index6].frameX += (short) 18;
|
|
Main.tile[index7, index6 - 1].frameX += (short) 18;
|
|
continue;
|
|
}
|
|
WorldGen.PlaceTile(index7, index6, 15, true, style: style1);
|
|
continue;
|
|
case 5:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.Place4x2(index7, index6, (ushort) 79, 1, style6);
|
|
continue;
|
|
}
|
|
WorldGen.Place4x2(index7, index6, (ushort) 79, style: style6);
|
|
continue;
|
|
case 6:
|
|
WorldGen.PlaceTile(index7, index6, 87, true, style: style7);
|
|
continue;
|
|
case 7:
|
|
WorldGen.PlaceTile(index7, index6, 88, true, style: style8);
|
|
continue;
|
|
case 8:
|
|
WorldGen.PlaceTile(index7, index6, 89, true, style: style9);
|
|
continue;
|
|
case 9:
|
|
WorldGen.PlaceTile(index7, index6, 104, true, style: style10);
|
|
continue;
|
|
case 10:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.Place4x2(index7, index6, (ushort) 90, 1, style14);
|
|
continue;
|
|
}
|
|
WorldGen.Place4x2(index7, index6, (ushort) 90, style: style14);
|
|
continue;
|
|
case 11:
|
|
WorldGen.PlaceTile(index7, index6, 93, true, style: style13);
|
|
continue;
|
|
case 12:
|
|
WorldGen.PlaceTile(index7, index6, 100, true, style: style11);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
float num15 = 420000f / (float) Main.maxTilesX;
|
|
for (int index10 = 0; (double) index10 < (double) num15; ++index10)
|
|
{
|
|
int num16 = 0;
|
|
int index11 = WorldGen.genRand.Next(num1, Main.maxTilesX - num1);
|
|
int index12 = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
|
|
while (Main.tile[index11, index12].wall != (ushort) 13 && Main.tile[index11, index12].wall != (ushort) 14 || Main.tile[index11, index12].active())
|
|
{
|
|
index11 = WorldGen.genRand.Next(num1, Main.maxTilesX - num1);
|
|
index12 = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
|
|
if (WorldGen.drunkWorldGen)
|
|
index11 = WorldGen.genRand.Next(2) != 0 ? WorldGen.genRand.Next(Main.maxTilesX - num1, Main.maxTilesX - 50) : WorldGen.genRand.Next(50, num1);
|
|
++num16;
|
|
if (num16 > 100000)
|
|
break;
|
|
}
|
|
if (num16 <= 100000)
|
|
{
|
|
for (int index13 = 0; index13 < 2; ++index13)
|
|
{
|
|
int index14 = index11;
|
|
int index15 = index11;
|
|
while (!Main.tile[index14, index12].active() && (Main.tile[index14, index12].wall == (ushort) 13 || Main.tile[index14, index12].wall == (ushort) 14))
|
|
--index14;
|
|
int num17 = index14 + 1;
|
|
while (!Main.tile[index15, index12].active() && (Main.tile[index15, index12].wall == (ushort) 13 || Main.tile[index15, index12].wall == (ushort) 14))
|
|
++index15;
|
|
int num18 = index15 - 1;
|
|
index11 = (num17 + num18) / 2;
|
|
int index16 = index12;
|
|
int index17 = index12;
|
|
while (!Main.tile[index11, index16].active() && (Main.tile[index11, index16].wall == (ushort) 13 || Main.tile[index11, index16].wall == (ushort) 14))
|
|
--index16;
|
|
int num19 = index16 + 1;
|
|
while (!Main.tile[index11, index17].active() && (Main.tile[index11, index17].wall == (ushort) 13 || Main.tile[index11, index17].wall == (ushort) 14))
|
|
++index17;
|
|
int num20 = index17 - 1;
|
|
index12 = (num19 + num20) / 2;
|
|
}
|
|
int index18 = index11;
|
|
int index19 = index11;
|
|
while (!Main.tile[index18, index12].active() && !Main.tile[index18, index12 - 1].active() && !Main.tile[index18, index12 + 1].active())
|
|
--index18;
|
|
int num21 = index18 + 1;
|
|
while (!Main.tile[index19, index12].active() && !Main.tile[index19, index12 - 1].active() && !Main.tile[index19, index12 + 1].active())
|
|
++index19;
|
|
int num22 = index19 - 1;
|
|
int index20 = index12;
|
|
int index21 = index12;
|
|
while (!Main.tile[index11, index20].active() && !Main.tile[index11 - 1, index20].active() && !Main.tile[index11 + 1, index20].active())
|
|
--index20;
|
|
int num23 = index20 + 1;
|
|
while (!Main.tile[index11, index21].active() && !Main.tile[index11 - 1, index21].active() && !Main.tile[index11 + 1, index21].active())
|
|
++index21;
|
|
int num24 = index21 - 1;
|
|
int num25 = (num21 + num22) / 2;
|
|
int num26 = (num23 + num24) / 2;
|
|
int num27 = num22 - num21;
|
|
int num28 = num24 - num23;
|
|
if (num27 > 7 && num28 > 5)
|
|
{
|
|
int num29 = 0;
|
|
if (WorldGen.nearPicture2(num25, num26))
|
|
num29 = -1;
|
|
if (num29 == 0)
|
|
{
|
|
Vector2 vector2 = WorldGen.randHellPicture();
|
|
int x = (int) vector2.X;
|
|
int y = (int) vector2.Y;
|
|
if (!WorldGen.nearPicture(num25, num26))
|
|
WorldGen.PlaceTile(num25, num26, x, true, style: y);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int[] numArray = new int[3]
|
|
{
|
|
WorldGen.genRand.Next(16, 22),
|
|
WorldGen.genRand.Next(16, 22),
|
|
WorldGen.genRand.Next(16, 22)
|
|
};
|
|
while (numArray[1] == numArray[0])
|
|
numArray[1] = WorldGen.genRand.Next(16, 22);
|
|
while (numArray[2] == numArray[0] || numArray[2] == numArray[1])
|
|
numArray[2] = WorldGen.genRand.Next(16, 22);
|
|
float num30 = 420000f / (float) Main.maxTilesX;
|
|
for (int index22 = 0; (double) index22 < (double) num30; ++index22)
|
|
{
|
|
int num31 = 0;
|
|
int i;
|
|
int j1;
|
|
do
|
|
{
|
|
i = WorldGen.genRand.Next(num1, Main.maxTilesX - num1);
|
|
j1 = WorldGen.genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
|
|
if (WorldGen.drunkWorldGen)
|
|
i = WorldGen.genRand.Next(2) != 0 ? WorldGen.genRand.Next(Main.maxTilesX - num1, Main.maxTilesX - 50) : WorldGen.genRand.Next(50, num1);
|
|
++num31;
|
|
}
|
|
while (num31 <= 100000 && (Main.tile[i, j1].wall != (ushort) 13 && Main.tile[i, j1].wall != (ushort) 14 || Main.tile[i, j1].active()));
|
|
if (num31 <= 100000)
|
|
{
|
|
while (!WorldGen.SolidTile(i, j1) && j1 > 10)
|
|
--j1;
|
|
int j2 = j1 + 1;
|
|
if (Main.tile[i, j2].wall == (ushort) 13 || Main.tile[i, j2].wall == (ushort) 14)
|
|
{
|
|
int num32 = WorldGen.genRand.Next(3);
|
|
int style15 = 32;
|
|
int style16 = 32;
|
|
int num33;
|
|
int num34;
|
|
switch (num32)
|
|
{
|
|
case 1:
|
|
num33 = 3;
|
|
num34 = 3;
|
|
break;
|
|
case 2:
|
|
num33 = 1;
|
|
num34 = 2;
|
|
break;
|
|
default:
|
|
num33 = 1;
|
|
num34 = 3;
|
|
break;
|
|
}
|
|
for (int index23 = i - 1; index23 <= i + num33; ++index23)
|
|
{
|
|
for (int index24 = j2; index24 <= j2 + num34; ++index24)
|
|
{
|
|
Tile tile = Main.tile[i, j2];
|
|
if (index23 < i || index23 == i + num33)
|
|
{
|
|
if (tile.active())
|
|
{
|
|
switch (tile.type)
|
|
{
|
|
case 10:
|
|
case 11:
|
|
case 34:
|
|
case 42:
|
|
case 91:
|
|
num32 = -1;
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
else if (tile.active())
|
|
num32 = -1;
|
|
}
|
|
}
|
|
switch (num32)
|
|
{
|
|
case 0:
|
|
WorldGen.PlaceTile(i, j2, 91, true, style: numArray[WorldGen.genRand.Next(3)]);
|
|
continue;
|
|
case 1:
|
|
WorldGen.PlaceTile(i, j2, 34, true, style: style15);
|
|
continue;
|
|
case 2:
|
|
WorldGen.PlaceTile(i, j2, 42, true, style: style16);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void HellFort(int i, int j, ushort tileType = 75, byte wallType = 14)
|
|
{
|
|
int[] numArray1 = new int[5];
|
|
int[] numArray2 = new int[5];
|
|
int[] numArray3 = new int[10];
|
|
int[] numArray4 = new int[10];
|
|
int minValue1 = 8;
|
|
int maxValue1 = 20;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
minValue1 /= 2;
|
|
maxValue1 *= 2;
|
|
}
|
|
numArray1[2] = i - WorldGen.genRand.Next(minValue1 / 2, maxValue1 / 2);
|
|
numArray2[2] = i + WorldGen.genRand.Next(minValue1 / 2, maxValue1 / 2);
|
|
numArray1[3] = numArray2[2];
|
|
numArray2[3] = numArray1[3] + WorldGen.genRand.Next(minValue1, maxValue1);
|
|
numArray1[4] = numArray2[3];
|
|
numArray2[4] = numArray1[4] + WorldGen.genRand.Next(minValue1, maxValue1);
|
|
numArray2[1] = numArray1[2];
|
|
numArray1[1] = numArray2[1] - WorldGen.genRand.Next(minValue1, maxValue1);
|
|
numArray2[0] = numArray1[1];
|
|
numArray1[0] = numArray2[0] - WorldGen.genRand.Next(minValue1, maxValue1);
|
|
int minValue2 = 6;
|
|
int maxValue2 = 12;
|
|
numArray3[3] = j - WorldGen.genRand.Next(minValue2, maxValue2);
|
|
numArray4[3] = j;
|
|
for (int index = 4; index < 10; ++index)
|
|
{
|
|
numArray3[index] = numArray4[index - 1];
|
|
numArray4[index] = numArray3[index] + WorldGen.genRand.Next(minValue2, maxValue2);
|
|
}
|
|
for (int index = 2; index >= 0; --index)
|
|
{
|
|
numArray4[index] = numArray3[index + 1];
|
|
numArray3[index] = numArray4[index] - WorldGen.genRand.Next(minValue2, maxValue2);
|
|
}
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
bool[,] flagArray1 = new bool[5, 10];
|
|
int num1 = 3;
|
|
int num2 = 3;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
if (WorldGen.genRand.Next(3) == 0 || WorldGen.drunkWorldGen)
|
|
{
|
|
flag1 = true;
|
|
int index2 = WorldGen.genRand.Next(10);
|
|
if (index2 < num1)
|
|
num1 = index2;
|
|
if (index2 > num2)
|
|
num2 = index2;
|
|
int index3 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0 || WorldGen.drunkWorldGen)
|
|
{
|
|
flagArray1[0, index2] = true;
|
|
flagArray1[1, index2] = true;
|
|
index3 = 0;
|
|
}
|
|
else
|
|
flagArray1[1, index2] = true;
|
|
int num3 = WorldGen.genRand.Next(2);
|
|
if (num3 == 0)
|
|
num3 = -1;
|
|
for (int index4 = WorldGen.genRand.Next(10); index4 > 0 && index2 >= 0 && index2 < 10; index2 += num3)
|
|
flagArray1[index3, index2] = true;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0 || WorldGen.drunkWorldGen)
|
|
{
|
|
flag2 = true;
|
|
int index5 = WorldGen.genRand.Next(10);
|
|
if (index5 < num1)
|
|
num1 = index5;
|
|
if (index5 > num2)
|
|
num2 = index5;
|
|
int index6 = 3;
|
|
if (WorldGen.genRand.Next(2) == 0 || WorldGen.drunkWorldGen)
|
|
{
|
|
flagArray1[3, index5] = true;
|
|
flagArray1[4, index5] = true;
|
|
index6 = 4;
|
|
}
|
|
else
|
|
flagArray1[3, index5] = true;
|
|
int num4 = WorldGen.genRand.Next(2);
|
|
if (num4 == 0)
|
|
num4 = -1;
|
|
for (int index7 = WorldGen.genRand.Next(10); index7 > 0 && index5 >= 0 && index5 < 10; index5 += num4)
|
|
flagArray1[index6, index5] = true;
|
|
}
|
|
}
|
|
for (int index8 = 0; index8 < 5; ++index8)
|
|
{
|
|
int index9 = numArray1[index8];
|
|
bool flag3 = false;
|
|
if (index9 < 10 || index9 > Main.maxTilesX - 10)
|
|
{
|
|
flag3 = true;
|
|
}
|
|
else
|
|
{
|
|
for (int underworldLayer = Main.UnderworldLayer; underworldLayer < Main.maxTilesY; ++underworldLayer)
|
|
{
|
|
if (Main.tile[index9, underworldLayer].wall > (ushort) 0)
|
|
flag3 = true;
|
|
}
|
|
}
|
|
if (flag3)
|
|
{
|
|
for (int index10 = 0; index10 < 10; ++index10)
|
|
flagArray1[index8, index10] = false;
|
|
}
|
|
}
|
|
int num5 = WorldGen.genRand.Next(10);
|
|
if (num5 < num1)
|
|
num1 = num5;
|
|
int num6 = WorldGen.genRand.Next(10);
|
|
if (num6 > num2)
|
|
num2 = num6;
|
|
if (!flag1 && !flag2)
|
|
{
|
|
while (num2 - num1 < 5)
|
|
{
|
|
int num7 = WorldGen.genRand.Next(10);
|
|
if (num7 < num1)
|
|
num1 = num7;
|
|
int num8 = WorldGen.genRand.Next(10);
|
|
if (num8 > num2)
|
|
num2 = num8;
|
|
}
|
|
}
|
|
for (int index = num1; index <= num2; ++index)
|
|
flagArray1[2, index] = true;
|
|
for (int index11 = 0; index11 < 5; ++index11)
|
|
{
|
|
for (int index12 = 0; index12 < 10; ++index12)
|
|
{
|
|
if (flagArray1[index11, index12] && (numArray3[index12] < Main.UnderworldLayer || numArray4[index12] > Main.maxTilesY - 20))
|
|
flagArray1[index11, index12] = false;
|
|
}
|
|
}
|
|
for (int index13 = 0; index13 < 5; ++index13)
|
|
{
|
|
for (int index14 = 0; index14 < 10; ++index14)
|
|
{
|
|
if (flagArray1[index13, index14])
|
|
{
|
|
for (int index15 = numArray1[index13]; index15 <= numArray2[index13]; ++index15)
|
|
{
|
|
for (int index16 = numArray3[index14]; index16 <= numArray4[index14] && index15 >= 10 && index15 <= Main.maxTilesX - 10; ++index16)
|
|
{
|
|
Main.tile[index15, index16].liquid = (byte) 0;
|
|
if (index15 == numArray1[index13] || index15 == numArray2[index13] || index16 == numArray3[index14] || index16 == numArray4[index14])
|
|
{
|
|
Main.tile[index15, index16].active(true);
|
|
Main.tile[index15, index16].type = tileType;
|
|
Main.tile[index15, index16].halfBrick(false);
|
|
Main.tile[index15, index16].slope((byte) 0);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index15, index16].wall = (ushort) wallType;
|
|
Main.tile[index15, index16].active(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int style1 = 19;
|
|
int style2 = 13;
|
|
for (int index17 = 0; index17 < 4; ++index17)
|
|
{
|
|
bool[] flagArray2 = new bool[10];
|
|
bool flag4 = false;
|
|
for (int index18 = 0; index18 < 10; ++index18)
|
|
{
|
|
if (flagArray1[index17, index18] && flagArray1[index17 + 1, index18])
|
|
{
|
|
flagArray2[index18] = true;
|
|
flag4 = true;
|
|
}
|
|
}
|
|
while (flag4)
|
|
{
|
|
int index19 = WorldGen.genRand.Next(10);
|
|
if (flagArray2[index19])
|
|
{
|
|
flag4 = false;
|
|
Main.tile[numArray2[index17], numArray4[index19] - 1].active(false);
|
|
Main.tile[numArray2[index17], numArray4[index19] - 2].active(false);
|
|
Main.tile[numArray2[index17], numArray4[index19] - 3].active(false);
|
|
Main.tile[numArray2[index17], numArray4[index19] - 1].wall = (ushort) wallType;
|
|
Main.tile[numArray2[index17], numArray4[index19] - 2].wall = (ushort) wallType;
|
|
Main.tile[numArray2[index17], numArray4[index19] - 3].wall = (ushort) wallType;
|
|
WorldGen.PlaceTile(numArray2[index17], numArray4[index19] - 1, 10, true, style: style1);
|
|
}
|
|
}
|
|
}
|
|
for (int index20 = 0; index20 < 5; ++index20)
|
|
{
|
|
for (int index21 = 0; index21 < 10; ++index21)
|
|
{
|
|
if (flagArray1[index20, index21])
|
|
{
|
|
if (index21 > 0 && flagArray1[index20, index21 - 1])
|
|
{
|
|
int num9 = WorldGen.genRand.Next(numArray1[index20] + 2, numArray2[index20] - 1);
|
|
int num10 = WorldGen.genRand.Next(numArray1[index20] + 2, numArray2[index20] - 1);
|
|
int num11 = 0;
|
|
while (num10 - num9 < 2 || num10 - num9 > 5)
|
|
{
|
|
num9 = WorldGen.genRand.Next(numArray1[index20] + 2, numArray2[index20] - 1);
|
|
num10 = WorldGen.genRand.Next(numArray1[index20] + 2, numArray2[index20] - 1);
|
|
++num11;
|
|
if (num11 > 10000)
|
|
break;
|
|
}
|
|
if (num11 <= 10000)
|
|
{
|
|
for (int i1 = num9; i1 <= num10 && i1 >= 20 && i1 <= Main.maxTilesX - 20; ++i1)
|
|
{
|
|
Main.tile[i1, numArray3[index21]].active(false);
|
|
WorldGen.PlaceTile(i1, numArray3[index21], 19, true, true, style: style2);
|
|
Main.tile[i1, numArray3[index21]].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if (index20 < 4 && flagArray1[index20 + 1, index21] && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
Main.tile[numArray2[index20], numArray4[index21] - 1].active(false);
|
|
Main.tile[numArray2[index20], numArray4[index21] - 2].active(false);
|
|
Main.tile[numArray2[index20], numArray4[index21] - 3].active(false);
|
|
Main.tile[numArray2[index20], numArray4[index21] - 1].wall = (ushort) wallType;
|
|
Main.tile[numArray2[index20], numArray4[index21] - 2].wall = (ushort) wallType;
|
|
Main.tile[numArray2[index20], numArray4[index21] - 3].wall = (ushort) wallType;
|
|
WorldGen.PlaceTile(numArray2[index20], numArray4[index21] - 1, 10, true, style: style1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bool flag5 = false;
|
|
for (int index22 = 0; index22 < 5; ++index22)
|
|
{
|
|
bool[] flagArray3 = new bool[10];
|
|
for (int index23 = 0; index23 < 10; ++index23)
|
|
{
|
|
if (flagArray1[index22, index23])
|
|
{
|
|
flag5 = true;
|
|
flagArray3[index23] = true;
|
|
}
|
|
}
|
|
if (flag5)
|
|
{
|
|
bool flag6 = false;
|
|
for (int index24 = 0; index24 < 10; ++index24)
|
|
{
|
|
if (flagArray3[index24])
|
|
{
|
|
if (!Main.tile[numArray1[index22] - 1, numArray4[index24] - 1].active() && !Main.tile[numArray1[index22] - 1, numArray4[index24] - 2].active() && !Main.tile[numArray1[index22] - 1, numArray4[index24] - 3].active() && Main.tile[numArray1[index22] - 1, numArray4[index24] - 1].liquid == (byte) 0 && Main.tile[numArray1[index22] - 1, numArray4[index24] - 2].liquid == (byte) 0 && Main.tile[numArray1[index22] - 1, numArray4[index24] - 3].liquid == (byte) 0)
|
|
flag6 = true;
|
|
else
|
|
flagArray3[index24] = false;
|
|
}
|
|
}
|
|
while (flag6)
|
|
{
|
|
int index25 = WorldGen.genRand.Next(10);
|
|
if (flagArray3[index25])
|
|
{
|
|
flag6 = false;
|
|
Main.tile[numArray1[index22], numArray4[index25] - 1].active(false);
|
|
Main.tile[numArray1[index22], numArray4[index25] - 2].active(false);
|
|
Main.tile[numArray1[index22], numArray4[index25] - 3].active(false);
|
|
WorldGen.PlaceTile(numArray1[index22], numArray4[index25] - 1, 10, true, style: style1);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
bool flag7 = false;
|
|
for (int index26 = 4; index26 >= 0; --index26)
|
|
{
|
|
bool[] flagArray4 = new bool[10];
|
|
for (int index27 = 0; index27 < 10; ++index27)
|
|
{
|
|
if (flagArray1[index26, index27])
|
|
{
|
|
flag7 = true;
|
|
flagArray4[index27] = true;
|
|
}
|
|
}
|
|
if (flag7)
|
|
{
|
|
bool flag8 = false;
|
|
for (int index28 = 0; index28 < 10; ++index28)
|
|
{
|
|
if (flagArray4[index28])
|
|
{
|
|
if (index26 >= 20 && index26 <= Main.maxTilesX - 20)
|
|
{
|
|
if (!Main.tile[numArray2[index26] + 1, numArray4[index28] - 1].active() && !Main.tile[numArray2[index26] + 1, numArray4[index28] - 2].active() && !Main.tile[numArray2[index26] + 1, numArray4[index28] - 3].active() && Main.tile[numArray2[index26] + 1, numArray4[index28] - 1].liquid == (byte) 0 && Main.tile[numArray2[index26] + 1, numArray4[index28] - 2].liquid == (byte) 0 && Main.tile[numArray2[index26] + 1, numArray4[index28] - 3].liquid == (byte) 0)
|
|
flag8 = true;
|
|
else
|
|
flagArray4[index28] = false;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
}
|
|
while (flag8)
|
|
{
|
|
int index29 = WorldGen.genRand.Next(10);
|
|
if (flagArray4[index29])
|
|
{
|
|
flag8 = false;
|
|
Main.tile[numArray2[index26], numArray4[index29] - 1].active(false);
|
|
Main.tile[numArray2[index26], numArray4[index29] - 2].active(false);
|
|
Main.tile[numArray2[index26], numArray4[index29] - 3].active(false);
|
|
WorldGen.PlaceTile(numArray2[index26], numArray4[index29] - 1, 10, true, style: style1);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
bool flag9 = false;
|
|
for (int index30 = 0; index30 < 10; ++index30)
|
|
{
|
|
bool[] flagArray5 = new bool[10];
|
|
for (int index31 = 0; index31 < 5; ++index31)
|
|
{
|
|
if (flagArray1[index31, index30])
|
|
{
|
|
flag9 = true;
|
|
flagArray5[index31] = true;
|
|
}
|
|
}
|
|
if (flag9)
|
|
{
|
|
bool flag10 = true;
|
|
while (flag10)
|
|
{
|
|
int index32 = WorldGen.genRand.Next(5);
|
|
if (flagArray5[index32])
|
|
{
|
|
int num12 = WorldGen.genRand.Next(numArray1[index32] + 2, numArray2[index32] - 1);
|
|
int num13 = WorldGen.genRand.Next(numArray1[index32] + 2, numArray2[index32] - 1);
|
|
int num14 = 0;
|
|
while (num13 - num12 < 2 || num13 - num12 > 5)
|
|
{
|
|
num12 = WorldGen.genRand.Next(numArray1[index32] + 2, numArray2[index32] - 1);
|
|
num13 = WorldGen.genRand.Next(numArray1[index32] + 2, numArray2[index32] - 1);
|
|
++num14;
|
|
if (num14 > 10000)
|
|
break;
|
|
}
|
|
if (num14 > 10000)
|
|
break;
|
|
for (int index33 = num12; index33 <= num13 && index33 >= 10 && index33 <= Main.maxTilesX - 10; ++index33)
|
|
{
|
|
if (Main.tile[index33, numArray3[index30] - 1].active() || Main.tile[index33, numArray3[index30] - 1].liquid > (byte) 0)
|
|
flag10 = false;
|
|
}
|
|
if (flag10)
|
|
{
|
|
for (int i2 = num12; i2 <= num13 && i2 >= 10 && i2 <= Main.maxTilesX - 10; ++i2)
|
|
{
|
|
Main.tile[i2, numArray3[index30]].active(false);
|
|
WorldGen.PlaceTile(i2, numArray3[index30], 19, true, true, style: style2);
|
|
}
|
|
}
|
|
flag10 = false;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void HellHouse(int i, int j, byte type = 76, byte wall = 13)
|
|
{
|
|
int width = WorldGen.genRand.Next(8, 20);
|
|
int num1 = WorldGen.genRand.Next(1, 3);
|
|
int num2 = WorldGen.genRand.Next(4, 13);
|
|
int i1 = i;
|
|
int j1 = j;
|
|
for (int index = 0; index < num1; ++index)
|
|
{
|
|
int height = WorldGen.genRand.Next(5, 9);
|
|
WorldGen.HellRoom(i1, j1, width, height, type, wall);
|
|
j1 -= height;
|
|
}
|
|
int j2 = j;
|
|
for (int index = 0; index < num2; ++index)
|
|
{
|
|
int height = WorldGen.genRand.Next(5, 9);
|
|
j2 += height;
|
|
WorldGen.HellRoom(i1, j2, width, height, type, wall);
|
|
}
|
|
for (int index1 = i - width / 2; index1 <= i + width / 2; ++index1)
|
|
{
|
|
int index2 = j;
|
|
while (index2 < Main.maxTilesY && (Main.tile[index1, index2].active() && (Main.tile[index1, index2].type == (ushort) 76 || Main.tile[index1, index2].type == (ushort) 75) || Main.tile[i, index2].wall == (ushort) 13 || Main.tile[i, index2].wall == (ushort) 14))
|
|
++index2;
|
|
int num3 = 6 + WorldGen.genRand.Next(3);
|
|
while (index2 < Main.maxTilesY && !Main.tile[index1, index2].active())
|
|
{
|
|
--num3;
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) 57;
|
|
++index2;
|
|
if (num3 <= 0)
|
|
break;
|
|
}
|
|
}
|
|
int index3 = j;
|
|
while (index3 < Main.maxTilesY && (Main.tile[i, index3].active() && (Main.tile[i, index3].type == (ushort) 76 || Main.tile[i, index3].type == (ushort) 75) || Main.tile[i, index3].wall == (ushort) 13 || Main.tile[i, index3].wall == (ushort) 14))
|
|
++index3;
|
|
int index4 = index3 - 1;
|
|
int maxValue = index4;
|
|
while (Main.tile[i, index4].active() && (Main.tile[i, index4].type == (ushort) 76 || Main.tile[i, index4].type == (ushort) 75) || Main.tile[i, index4].wall == (ushort) 13 || Main.tile[i, index4].wall == (ushort) 14)
|
|
{
|
|
--index4;
|
|
if (Main.tile[i, index4].active() && (Main.tile[i, index4].type == (ushort) 76 || Main.tile[i, index4].type == (ushort) 75))
|
|
{
|
|
int num4 = WorldGen.genRand.Next(i - width / 2 + 1, i + width / 2 - 1);
|
|
int num5 = WorldGen.genRand.Next(i - width / 2 + 1, i + width / 2 - 1);
|
|
if (num4 > num5)
|
|
{
|
|
int num6 = num4;
|
|
num4 = num5;
|
|
num5 = num6;
|
|
}
|
|
if (num4 == num5)
|
|
{
|
|
if (num4 < i)
|
|
++num5;
|
|
else
|
|
--num4;
|
|
}
|
|
for (int index5 = num4; index5 <= num5; ++index5)
|
|
{
|
|
if (Main.tile[index5, index4 - 1].wall == (ushort) 13)
|
|
Main.tile[index5, index4].wall = (ushort) 13;
|
|
if (Main.tile[index5, index4 - 1].wall == (ushort) 14)
|
|
Main.tile[index5, index4].wall = (ushort) 14;
|
|
Main.tile[index5, index4].type = (ushort) 19;
|
|
Main.tile[index5, index4].active(true);
|
|
}
|
|
--index4;
|
|
}
|
|
}
|
|
int minValue = index4;
|
|
float num7 = (float) ((maxValue - minValue) * width) * 0.02f;
|
|
for (int index6 = 0; (double) index6 < (double) num7; ++index6)
|
|
{
|
|
int num8 = WorldGen.genRand.Next(i - width / 2, i + width / 2 + 1);
|
|
int num9 = WorldGen.genRand.Next(minValue, maxValue);
|
|
int num10 = WorldGen.genRand.Next(3, 8);
|
|
for (int index7 = num8 - num10; index7 <= num8 + num10; ++index7)
|
|
{
|
|
for (int index8 = num9 - num10; index8 <= num9 + num10; ++index8)
|
|
{
|
|
double num11 = (double) Math.Abs(index7 - num8);
|
|
float num12 = (float) Math.Abs(index8 - num9);
|
|
if (Math.Sqrt(num11 * num11 + (double) num12 * (double) num12) < (double) num10 * 0.4)
|
|
{
|
|
try
|
|
{
|
|
if (Main.tile[index7, index8].type == (ushort) 76 || Main.tile[index7, index8].type == (ushort) 19)
|
|
Main.tile[index7, index8].active(false);
|
|
Main.tile[index7, index8].wall = (ushort) 0;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void HellRoom(int i, int j, int width, int height, byte type = 76, byte wall = 13)
|
|
{
|
|
if (j > Main.maxTilesY - 40)
|
|
return;
|
|
for (int index1 = i - width / 2; index1 <= i + width / 2; ++index1)
|
|
{
|
|
for (int index2 = j - height; index2 <= j; ++index2)
|
|
{
|
|
try
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) type;
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
Main.tile[index1, index2].lava(false);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
for (int index3 = i - width / 2 + 1; index3 <= i + width / 2 - 1; ++index3)
|
|
{
|
|
for (int index4 = j - height + 1; index4 <= j - 1; ++index4)
|
|
{
|
|
try
|
|
{
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].wall = (ushort) wall;
|
|
Main.tile[index3, index4].liquid = (byte) 0;
|
|
Main.tile[index3, index4].lava(false);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void templeCleaner(int x, int y)
|
|
{
|
|
int index1 = x;
|
|
int index2 = y;
|
|
int num = 0;
|
|
if (Main.tile[x + 1, y].active() && Main.tile[x + 1, y].type == (ushort) 226)
|
|
++num;
|
|
if (Main.tile[x - 1, y].active() && Main.tile[x - 1, y].type == (ushort) 226)
|
|
++num;
|
|
if (Main.tile[x, y + 1].active() && Main.tile[x, y + 1].type == (ushort) 226)
|
|
++num;
|
|
if (Main.tile[x, y - 1].active() && Main.tile[x, y - 1].type == (ushort) 226)
|
|
++num;
|
|
if (Main.tile[x, y].active() && Main.tile[x, y].type == (ushort) 226)
|
|
{
|
|
if (num > 1)
|
|
return;
|
|
Main.tile[index1, index2].active(false);
|
|
Main.tile[index1, index2].wall = (ushort) 87;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].active() || num != 3)
|
|
return;
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) 226;
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
Main.tile[index1, index2].slope((byte) 0);
|
|
Main.tile[index1, index2].halfBrick(false);
|
|
}
|
|
}
|
|
|
|
public static Vector2 templePather(Vector2 templePath, int destX, int destY)
|
|
{
|
|
int x = (int) templePath.X;
|
|
int y = (int) templePath.Y;
|
|
int num1 = WorldGen.genRand.Next(5, 20);
|
|
int num2 = WorldGen.genRand.Next(2, 5);
|
|
while (num1 > 0 && (x != destX || y != destY))
|
|
{
|
|
--num1;
|
|
if (x > destX)
|
|
--x;
|
|
if (x < destX)
|
|
++x;
|
|
if (y > destY)
|
|
--y;
|
|
if (y < destY)
|
|
++y;
|
|
for (int index1 = x - num2; index1 < x + num2; ++index1)
|
|
{
|
|
for (int index2 = y - num2; index2 < y + num2; ++index2)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
Main.tile[index1, index2].wall = (ushort) 87;
|
|
}
|
|
}
|
|
}
|
|
return new Vector2((float) x, (float) y);
|
|
}
|
|
|
|
public static void outerTempled(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].active() & Main.tile[x, y].type == (ushort) 226 || Main.tile[x, y].wall == (ushort) 87)
|
|
return;
|
|
int num = 6;
|
|
for (int index1 = x - num; index1 <= x + num; ++index1)
|
|
{
|
|
for (int index2 = y - num; index2 <= y + num; ++index2)
|
|
{
|
|
if (!Main.tile[index1, index2].active() && Main.tile[index1, index2].wall == (ushort) 87)
|
|
{
|
|
int index3 = x;
|
|
int index4 = y;
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = (ushort) 226;
|
|
Main.tile[index3, index4].liquid = (byte) 0;
|
|
Main.tile[index3, index4].slope((byte) 0);
|
|
Main.tile[index3, index4].halfBrick(false);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void makeTemple(int x, int y)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle[] rectangleArray = new Microsoft.Xna.Framework.Rectangle[100];
|
|
float num1 = (float) (Main.maxTilesX / 4200);
|
|
int maxValue = WorldGen.genRand.Next((int) ((double) num1 * 10.0), (int) ((double) num1 * 16.0));
|
|
if (WorldGen.drunkWorldGen)
|
|
maxValue *= 3;
|
|
if (WorldGen.getGoodWorldGen)
|
|
maxValue *= 3;
|
|
int num2 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num2 = -1;
|
|
int num3 = num2;
|
|
int num4 = x;
|
|
int num5 = y;
|
|
int num6 = x;
|
|
int num7 = y;
|
|
int num8 = WorldGen.genRand.Next(1, 3);
|
|
int num9 = 0;
|
|
for (int index1 = 0; index1 < maxValue; ++index1)
|
|
{
|
|
++num9;
|
|
int num10 = num2;
|
|
int num11 = num6;
|
|
int num12 = num7;
|
|
bool flag = true;
|
|
int width1 = 0;
|
|
int height1 = 0;
|
|
int num13 = -10;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(num11 - width1 / 2, num12 - height1 / 2, width1, height1);
|
|
while (flag)
|
|
{
|
|
int num14 = num6;
|
|
int num15 = num7;
|
|
int width2 = WorldGen.genRand.Next(25, 50);
|
|
int height2 = WorldGen.genRand.Next(20, 35);
|
|
if (height2 > width2)
|
|
height2 = width2;
|
|
if (index1 == maxValue - 1)
|
|
{
|
|
int num16 = WorldGen.genRand.Next(55, 65);
|
|
int num17 = WorldGen.genRand.Next(45, 50);
|
|
if (num17 > num16)
|
|
num17 = num16;
|
|
width2 = (int) ((double) num16 * 1.6);
|
|
height2 = (int) ((double) num17 * 1.35);
|
|
num15 += WorldGen.genRand.Next(5, 10);
|
|
}
|
|
if (num9 > num8)
|
|
{
|
|
num12 = num15 + (WorldGen.genRand.Next(height2 + 1, height2 + 3) + num13);
|
|
num11 = num14 + WorldGen.genRand.Next(-5, 6);
|
|
num10 = num2 * -1;
|
|
}
|
|
else
|
|
{
|
|
num11 = num14 + (WorldGen.genRand.Next(width2 + 1, width2 + 3) + num13) * num10;
|
|
num12 = num15 + WorldGen.genRand.Next(-5, 6);
|
|
}
|
|
flag = false;
|
|
rectangle = new Microsoft.Xna.Framework.Rectangle(num11 - width2 / 2, num12 - height2 / 2, width2, height2);
|
|
for (int index2 = 0; index2 < index1; ++index2)
|
|
{
|
|
if (rectangle.Intersects(rectangleArray[index2]))
|
|
flag = true;
|
|
if (WorldGen.genRand.Next(100) == 0)
|
|
++num13;
|
|
}
|
|
}
|
|
if (num9 > num8)
|
|
{
|
|
++num8;
|
|
num9 = 1;
|
|
}
|
|
rectangleArray[index1] = rectangle;
|
|
num2 = num10;
|
|
num6 = num11;
|
|
num7 = num12;
|
|
}
|
|
for (int index3 = 0; index3 < maxValue; ++index3)
|
|
{
|
|
for (int index4 = 0; index4 < 2; ++index4)
|
|
{
|
|
for (int index5 = 0; index5 < maxValue; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < 2; ++index6)
|
|
{
|
|
int x1 = rectangleArray[index3].X;
|
|
if (index4 == 1)
|
|
x1 += rectangleArray[index3].Width - 1;
|
|
int y1 = rectangleArray[index3].Y;
|
|
int num18 = y1 + rectangleArray[index3].Height;
|
|
int x2 = rectangleArray[index5].X;
|
|
if (index6 == 1)
|
|
x2 += rectangleArray[index5].Width - 1;
|
|
int y2 = rectangleArray[index5].Y;
|
|
int num19 = y2 + rectangleArray[index5].Height;
|
|
while (x1 != x2 || y1 != y2 || num18 != num19)
|
|
{
|
|
if (x1 < x2)
|
|
++x1;
|
|
if (x1 > x2)
|
|
--x1;
|
|
if (y1 < y2)
|
|
++y1;
|
|
if (y1 > y2)
|
|
--y1;
|
|
if (num18 < num19)
|
|
++num18;
|
|
if (num18 > num19)
|
|
--num18;
|
|
int index7 = x1;
|
|
for (int index8 = y1; index8 < num18; ++index8)
|
|
{
|
|
Main.tile[index7, index8].active(true);
|
|
Main.tile[index7, index8].type = (ushort) 226;
|
|
Main.tile[index7, index8].liquid = (byte) 0;
|
|
Main.tile[index7, index8].slope((byte) 0);
|
|
Main.tile[index7, index8].halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index9 = 0; index9 < maxValue; ++index9)
|
|
{
|
|
if (true)
|
|
{
|
|
for (int x3 = rectangleArray[index9].X; x3 < rectangleArray[index9].X + rectangleArray[index9].Width; ++x3)
|
|
{
|
|
for (int y3 = rectangleArray[index9].Y; y3 < rectangleArray[index9].Y + rectangleArray[index9].Height; ++y3)
|
|
{
|
|
Main.tile[x3, y3].active(true);
|
|
Main.tile[x3, y3].type = (ushort) 226;
|
|
Main.tile[x3, y3].liquid = (byte) 0;
|
|
Main.tile[x3, y3].slope((byte) 0);
|
|
Main.tile[x3, y3].halfBrick(false);
|
|
}
|
|
}
|
|
int x4 = rectangleArray[index9].X;
|
|
int num20 = x4 + rectangleArray[index9].Width;
|
|
int y4 = rectangleArray[index9].Y;
|
|
int num21 = y4 + rectangleArray[index9].Height;
|
|
int num22 = x4 + WorldGen.genRand.Next(3, 8);
|
|
int num23 = num20 - WorldGen.genRand.Next(3, 8);
|
|
int num24 = y4 + WorldGen.genRand.Next(3, 8);
|
|
int num25 = num21 - WorldGen.genRand.Next(3, 8);
|
|
int num26 = num22;
|
|
int num27 = num23;
|
|
int num28 = num24;
|
|
int num29 = num25;
|
|
int num30 = (num22 + num23) / 2;
|
|
int num31 = (num24 + num25) / 2;
|
|
for (int index10 = num22; index10 < num23; ++index10)
|
|
{
|
|
for (int index11 = num24; index11 < num25; ++index11)
|
|
{
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num28 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num29 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num26 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num27 += WorldGen.genRand.Next(-1, 2);
|
|
if (num26 < num22)
|
|
num26 = num22;
|
|
if (num27 > num23)
|
|
num27 = num23;
|
|
if (num28 < num24)
|
|
num28 = num24;
|
|
if (num29 > num25)
|
|
num29 = num25;
|
|
if (num26 > num30)
|
|
num26 = num30;
|
|
if (num27 < num30)
|
|
num27 = num30;
|
|
if (num28 > num31)
|
|
num28 = num31;
|
|
if (num29 < num31)
|
|
num29 = num31;
|
|
if (index10 >= num26 && index10 < num27 & index11 >= num28 && index11 <= num29)
|
|
{
|
|
Main.tile[index10, index11].active(false);
|
|
Main.tile[index10, index11].wall = (ushort) 87;
|
|
}
|
|
}
|
|
}
|
|
for (int index12 = num25; index12 > num24; --index12)
|
|
{
|
|
for (int index13 = num23; index13 > num22; --index13)
|
|
{
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num28 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num29 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num26 += WorldGen.genRand.Next(-1, 2);
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
num27 += WorldGen.genRand.Next(-1, 2);
|
|
if (num26 < num22)
|
|
num26 = num22;
|
|
if (num27 > num23)
|
|
num27 = num23;
|
|
if (num28 < num24)
|
|
num28 = num24;
|
|
if (num29 > num25)
|
|
num29 = num25;
|
|
if (num26 > num30)
|
|
num26 = num30;
|
|
if (num27 < num30)
|
|
num27 = num30;
|
|
if (num28 > num31)
|
|
num28 = num31;
|
|
if (num29 < num31)
|
|
num29 = num31;
|
|
if (index13 >= num26 && index13 < num27 & index12 >= num28 && index12 <= num29)
|
|
{
|
|
Main.tile[index13, index12].active(false);
|
|
Main.tile[index13, index12].wall = (ushort) 87;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Vector2 templePath = new Vector2((float) num4, (float) num5);
|
|
for (int index14 = 0; index14 < maxValue; ++index14)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle = rectangleArray[index14];
|
|
rectangle.X += 8;
|
|
rectangle.Y += 8;
|
|
rectangle.Width -= 16;
|
|
rectangle.Height -= 16;
|
|
bool flag1 = true;
|
|
while (flag1)
|
|
{
|
|
int destX = WorldGen.genRand.Next(rectangle.X, rectangle.X + rectangle.Width);
|
|
int destY = WorldGen.genRand.Next(rectangle.Y, rectangle.Y + rectangle.Height);
|
|
if (index14 == maxValue - 1)
|
|
{
|
|
destX = rectangle.X + rectangle.Width / 2 + WorldGen.genRand.Next(-10, 10);
|
|
destY = rectangle.Y + rectangle.Height / 2 + WorldGen.genRand.Next(-10, 10);
|
|
}
|
|
templePath = WorldGen.templePather(templePath, destX, destY);
|
|
if ((double) templePath.X == (double) destX && (double) templePath.Y == (double) destY)
|
|
flag1 = false;
|
|
}
|
|
if (index14 < maxValue - 1)
|
|
{
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
int index15 = index14 + 1;
|
|
if (rectangleArray[index15].Y >= rectangleArray[index14].Y + rectangleArray[index14].Height)
|
|
{
|
|
rectangle.X = rectangleArray[index15].X;
|
|
if (index14 == 0)
|
|
{
|
|
if (num2 > 0)
|
|
rectangle.X += (int) ((double) rectangleArray[index15].Width * 0.8);
|
|
else
|
|
rectangle.X += (int) ((double) rectangleArray[index15].Width * 0.2);
|
|
}
|
|
else if (rectangleArray[index15].X < rectangleArray[index14].X)
|
|
rectangle.X += (int) ((double) rectangleArray[index15].Width * 0.2);
|
|
else
|
|
rectangle.X += (int) ((double) rectangleArray[index15].Width * 0.8);
|
|
rectangle.Y = rectangleArray[index15].Y;
|
|
}
|
|
else
|
|
{
|
|
rectangle.X = (rectangleArray[index14].X + rectangleArray[index14].Width / 2 + rectangleArray[index15].X + rectangleArray[index15].Width / 2) / 2;
|
|
rectangle.Y = (int) ((double) rectangleArray[index15].Y + (double) rectangleArray[index15].Height * 0.8);
|
|
}
|
|
int x5 = rectangle.X;
|
|
int y5 = rectangle.Y;
|
|
bool flag2 = true;
|
|
while (flag2)
|
|
{
|
|
int destX = WorldGen.genRand.Next(x5 - 6, x5 + 7);
|
|
int destY = WorldGen.genRand.Next(y5 - 6, y5 + 7);
|
|
templePath = WorldGen.templePather(templePath, destX, destY);
|
|
if ((double) templePath.X == (double) destX && (double) templePath.Y == (double) destY)
|
|
flag2 = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int index16 = index14 + 1;
|
|
int num32 = (rectangleArray[index14].X + rectangleArray[index14].Width / 2 + rectangleArray[index16].X + rectangleArray[index16].Width / 2) / 2;
|
|
int num33 = (rectangleArray[index14].Y + rectangleArray[index14].Height / 2 + rectangleArray[index16].Y + rectangleArray[index16].Height / 2) / 2;
|
|
bool flag3 = true;
|
|
while (flag3)
|
|
{
|
|
int destX = WorldGen.genRand.Next(num32 - 6, num32 + 7);
|
|
int destY = WorldGen.genRand.Next(num33 - 6, num33 + 7);
|
|
templePath = WorldGen.templePather(templePath, destX, destY);
|
|
if ((double) templePath.X == (double) destX && (double) templePath.Y == (double) destY)
|
|
flag3 = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num34 = Main.maxTilesX - 20;
|
|
int num35 = 20;
|
|
int num36 = Main.maxTilesY - 20;
|
|
int num37 = 20;
|
|
for (int index = 0; index < maxValue; ++index)
|
|
{
|
|
if (rectangleArray[index].X < num34)
|
|
num34 = rectangleArray[index].X;
|
|
if (rectangleArray[index].X + rectangleArray[index].Width > num35)
|
|
num35 = rectangleArray[index].X + rectangleArray[index].Width;
|
|
if (rectangleArray[index].Y < num36)
|
|
num36 = rectangleArray[index].Y;
|
|
if (rectangleArray[index].Y + rectangleArray[index].Height > num37)
|
|
num37 = rectangleArray[index].Y + rectangleArray[index].Height;
|
|
}
|
|
int num38 = num34 - 10;
|
|
int num39 = num35 + 10;
|
|
int num40 = num36 - 10;
|
|
int num41 = num37 + 10;
|
|
for (int x6 = num38; x6 < num39; ++x6)
|
|
{
|
|
for (int y6 = num40; y6 < num41; ++y6)
|
|
WorldGen.outerTempled(x6, y6);
|
|
}
|
|
for (int x7 = num39; x7 >= num38; --x7)
|
|
{
|
|
for (int y7 = num40; y7 < num41 / 2; ++y7)
|
|
WorldGen.outerTempled(x7, y7);
|
|
}
|
|
for (int y8 = num40; y8 < num41; ++y8)
|
|
{
|
|
for (int x8 = num38; x8 < num39; ++x8)
|
|
WorldGen.outerTempled(x8, y8);
|
|
}
|
|
for (int y9 = num41; y9 >= num40; --y9)
|
|
{
|
|
for (int x9 = num38; x9 < num39; ++x9)
|
|
WorldGen.outerTempled(x9, y9);
|
|
}
|
|
int num42 = -num3;
|
|
Vector2 vector2 = new Vector2((float) num4, (float) num5);
|
|
int num43 = WorldGen.genRand.Next(2, 5);
|
|
bool flag4 = true;
|
|
int num44 = 0;
|
|
int num45 = WorldGen.genRand.Next(9, 14);
|
|
while (flag4)
|
|
{
|
|
++num44;
|
|
if (num44 >= num45)
|
|
{
|
|
num44 = 0;
|
|
--vector2.Y;
|
|
}
|
|
vector2.X += (float) num42;
|
|
int x10 = (int) vector2.X;
|
|
flag4 = false;
|
|
for (int index = (int) vector2.Y - num43; (double) index < (double) vector2.Y + (double) num43; ++index)
|
|
{
|
|
if (Main.tile[x10, index].wall == (ushort) 87 || Main.tile[x10, index].active() && Main.tile[x10, index].type == (ushort) 226)
|
|
flag4 = true;
|
|
if (Main.tile[x10, index].active() && Main.tile[x10, index].type == (ushort) 226)
|
|
{
|
|
Main.tile[x10, index].active(false);
|
|
Main.tile[x10, index].wall = (ushort) 87;
|
|
}
|
|
}
|
|
}
|
|
int i1 = num4;
|
|
int index17 = num5;
|
|
while (!Main.tile[i1, index17].active())
|
|
++index17;
|
|
int j1 = index17 - 4;
|
|
int index18 = j1;
|
|
while (Main.tile[i1, index18].active() && Main.tile[i1, index18].type == (ushort) 226 || Main.tile[i1, index18].wall == (ushort) 87)
|
|
--index18;
|
|
int num46 = index18 + 2;
|
|
for (int index19 = i1 - 1; index19 <= i1 + 1; ++index19)
|
|
{
|
|
for (int index20 = num46; index20 <= j1; ++index20)
|
|
{
|
|
Main.tile[index19, index20].active(true);
|
|
Main.tile[index19, index20].type = (ushort) 226;
|
|
Main.tile[index19, index20].liquid = (byte) 0;
|
|
Main.tile[index19, index20].slope((byte) 0);
|
|
Main.tile[index19, index20].halfBrick(false);
|
|
}
|
|
}
|
|
for (int index21 = i1 - 4; index21 <= i1 + 4; ++index21)
|
|
{
|
|
for (int index22 = j1 - 1; index22 < j1 + 3; ++index22)
|
|
{
|
|
Main.tile[index21, index22].active(false);
|
|
Main.tile[index21, index22].wall = (ushort) 87;
|
|
}
|
|
}
|
|
for (int index23 = i1 - 1; index23 <= i1 + 1; ++index23)
|
|
{
|
|
for (int index24 = j1 - 5; index24 <= j1 + 8; ++index24)
|
|
{
|
|
Main.tile[index23, index24].active(true);
|
|
Main.tile[index23, index24].type = (ushort) 226;
|
|
Main.tile[index23, index24].liquid = (byte) 0;
|
|
Main.tile[index23, index24].slope((byte) 0);
|
|
Main.tile[index23, index24].halfBrick(false);
|
|
}
|
|
}
|
|
for (int index25 = i1 - 3; index25 <= i1 + 3; ++index25)
|
|
{
|
|
for (int index26 = j1 - 2; index26 < j1 + 3; ++index26)
|
|
{
|
|
if (index26 >= j1 || index25 < num4 - 1 || index25 > num4 + 1)
|
|
{
|
|
Main.tile[index25, index26].active(false);
|
|
Main.tile[index25, index26].wall = (ushort) 87;
|
|
}
|
|
}
|
|
}
|
|
WorldGen.PlaceTile(i1, j1, 10, true, style: 11);
|
|
for (int x11 = num38; x11 < num39; ++x11)
|
|
{
|
|
for (int y10 = num40; y10 < num41; ++y10)
|
|
WorldGen.templeCleaner(x11, y10);
|
|
}
|
|
for (int y11 = num41; y11 >= num40; --y11)
|
|
{
|
|
for (int x12 = num39; x12 >= num38; --x12)
|
|
WorldGen.templeCleaner(x12, y11);
|
|
}
|
|
for (int index27 = num38; index27 < num39; ++index27)
|
|
{
|
|
for (int index28 = num40; index28 < num41; ++index28)
|
|
{
|
|
bool flag5 = true;
|
|
for (int index29 = index27 - 1; index29 <= index27 + 1; ++index29)
|
|
{
|
|
for (int index30 = index28 - 1; index30 <= index28 + 1; ++index30)
|
|
{
|
|
if ((!Main.tile[index29, index30].active() || Main.tile[index29, index30].type != (ushort) 226) && Main.tile[index29, index30].wall != (ushort) 87)
|
|
{
|
|
flag5 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag5)
|
|
Main.tile[index27, index28].wall = (ushort) 87;
|
|
}
|
|
}
|
|
int num47 = 0;
|
|
Microsoft.Xna.Framework.Rectangle rectangle1 = rectangleArray[maxValue - 1];
|
|
int num48 = rectangle1.Width / 2;
|
|
int num49 = rectangle1.Height / 2;
|
|
do
|
|
{
|
|
++num47;
|
|
int i2 = rectangle1.X + num48 + 15 - WorldGen.genRand.Next(30);
|
|
int j2 = rectangle1.Y + num49 + 15 - WorldGen.genRand.Next(30);
|
|
WorldGen.PlaceTile(i2, j2, 237);
|
|
if (Main.tile[i2, j2].type == (ushort) 237)
|
|
{
|
|
WorldGen.lAltarX = i2 - (int) Main.tile[i2, j2].frameX / 18;
|
|
WorldGen.lAltarY = j2 - (int) Main.tile[i2, j2].frameY / 18;
|
|
goto label_296;
|
|
}
|
|
}
|
|
while (num47 < 1000);
|
|
int num50 = rectangle1.X + num48;
|
|
int num51 = rectangle1.Y + num49;
|
|
int index31 = num50 + WorldGen.genRand.Next(-10, 11);
|
|
int index32 = num51 + WorldGen.genRand.Next(-10, 11);
|
|
while (!Main.tile[index31, index32].active())
|
|
++index32;
|
|
Main.tile[index31 - 1, index32].active(true);
|
|
Main.tile[index31 - 1, index32].slope((byte) 0);
|
|
Main.tile[index31 - 1, index32].halfBrick(false);
|
|
Main.tile[index31 - 1, index32].type = (ushort) 226;
|
|
Main.tile[index31, index32].active(true);
|
|
Main.tile[index31, index32].slope((byte) 0);
|
|
Main.tile[index31, index32].halfBrick(false);
|
|
Main.tile[index31, index32].type = (ushort) 226;
|
|
Main.tile[index31 + 1, index32].active(true);
|
|
Main.tile[index31 + 1, index32].slope((byte) 0);
|
|
Main.tile[index31 + 1, index32].halfBrick(false);
|
|
Main.tile[index31 + 1, index32].type = (ushort) 226;
|
|
int num52 = index32 - 2;
|
|
int num53 = index31 - 1;
|
|
for (int index33 = -1; index33 <= 3; ++index33)
|
|
{
|
|
for (int index34 = -1; index34 <= 1; ++index34)
|
|
{
|
|
x = num53 + index33;
|
|
y = num52 + index34;
|
|
Main.tile[x, y].active(false);
|
|
}
|
|
}
|
|
WorldGen.lAltarX = num53;
|
|
WorldGen.lAltarY = num52;
|
|
for (int index35 = 0; index35 <= 2; ++index35)
|
|
{
|
|
for (int index36 = 0; index36 <= 1; ++index36)
|
|
{
|
|
x = num53 + index35;
|
|
y = num52 + index36;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].type = (ushort) 237;
|
|
Main.tile[x, y].frameX = (short) (index35 * 18);
|
|
Main.tile[x, y].frameY = (short) (index36 * 18);
|
|
}
|
|
}
|
|
for (int index37 = 0; index37 <= 2; ++index37)
|
|
{
|
|
for (int index38 = 0; index38 <= 1; ++index38)
|
|
{
|
|
x = num53 + index37;
|
|
y = num52 + index38;
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
}
|
|
label_296:
|
|
float num54 = (float) maxValue * 1.1f * (float) (1.0 + (double) WorldGen.genRand.Next(-25, 26) * 0.00999999977648258);
|
|
if (WorldGen.drunkWorldGen)
|
|
num54 *= 1.5f;
|
|
int num55 = 0;
|
|
while ((double) num54 > 0.0)
|
|
{
|
|
++num55;
|
|
int index39 = WorldGen.genRand.Next(maxValue);
|
|
int index40 = WorldGen.genRand.Next(rectangleArray[index39].X, rectangleArray[index39].X + rectangleArray[index39].Width);
|
|
int index41 = WorldGen.genRand.Next(rectangleArray[index39].Y, rectangleArray[index39].Y + rectangleArray[index39].Height);
|
|
if (Main.tile[index40, index41].wall == (ushort) 87 && !Main.tile[index40, index41].active())
|
|
{
|
|
bool flag6 = false;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num56 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num56 = -1;
|
|
while (!Main.tile[index40, index41].active())
|
|
index41 += num56;
|
|
int num57 = index41 - num56;
|
|
int num58 = WorldGen.genRand.Next(2);
|
|
int num59 = WorldGen.genRand.Next(3, 10);
|
|
bool flag7 = true;
|
|
for (int index42 = index40 - num59; index42 < index40 + num59; ++index42)
|
|
{
|
|
for (int index43 = num57 - num59; index43 < num57 + num59; ++index43)
|
|
{
|
|
if (Main.tile[index42, index43].active() && (Main.tile[index42, index43].type == (ushort) 10 || Main.tile[index42, index43].type == (ushort) 237))
|
|
{
|
|
flag7 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag7)
|
|
{
|
|
for (int i3 = index40 - num59; i3 < index40 + num59; ++i3)
|
|
{
|
|
for (int j3 = num57 - num59; j3 < num57 + num59; ++j3)
|
|
{
|
|
if (WorldGen.SolidTile(i3, j3) && Main.tile[i3, j3].type != (ushort) 232 && !WorldGen.SolidTile(i3, j3 - num56))
|
|
{
|
|
Main.tile[i3, j3].type = (ushort) 232;
|
|
flag6 = true;
|
|
if (num58 == 0)
|
|
{
|
|
Main.tile[i3, j3 - 1].type = (ushort) 232;
|
|
Main.tile[i3, j3 - 1].active(true);
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
Main.tile[i3, j3 - 2].type = (ushort) 232;
|
|
Main.tile[i3, j3 - 2].active(true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[i3, j3 + 1].type = (ushort) 232;
|
|
Main.tile[i3, j3 + 1].active(true);
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
Main.tile[i3, j3 + 2].type = (ushort) 232;
|
|
Main.tile[i3, j3 + 2].active(true);
|
|
}
|
|
}
|
|
++num58;
|
|
if (num58 > 1)
|
|
num58 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag6)
|
|
{
|
|
num55 = 0;
|
|
--num54;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num60 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num60 = -1;
|
|
while (!Main.tile[index40, index41].active())
|
|
index40 += num60;
|
|
int num61 = index40 - num60;
|
|
int num62 = WorldGen.genRand.Next(2);
|
|
int num63 = WorldGen.genRand.Next(3, 10);
|
|
bool flag8 = true;
|
|
for (int index44 = num61 - num63; index44 < num61 + num63; ++index44)
|
|
{
|
|
for (int index45 = index41 - num63; index45 < index41 + num63; ++index45)
|
|
{
|
|
if (Main.tile[index44, index45].active() && Main.tile[index44, index45].type == (ushort) 10)
|
|
{
|
|
flag8 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag8)
|
|
{
|
|
for (int i4 = num61 - num63; i4 < num61 + num63; ++i4)
|
|
{
|
|
for (int j4 = index41 - num63; j4 < index41 + num63; ++j4)
|
|
{
|
|
if (WorldGen.SolidTile(i4, j4) && Main.tile[i4, j4].type != (ushort) 232 && !WorldGen.SolidTile(i4 - num60, j4))
|
|
{
|
|
Main.tile[i4, j4].type = (ushort) 232;
|
|
flag6 = true;
|
|
if (num62 == 0)
|
|
{
|
|
Main.tile[i4 - 1, j4].type = (ushort) 232;
|
|
Main.tile[i4 - 1, j4].active(true);
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
Main.tile[i4 - 2, j4].type = (ushort) 232;
|
|
Main.tile[i4 - 2, j4].active(true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[i4 + 1, j4].type = (ushort) 232;
|
|
Main.tile[i4 + 1, j4].active(true);
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
Main.tile[i4 - 2, j4].type = (ushort) 232;
|
|
Main.tile[i4 - 2, j4].active(true);
|
|
}
|
|
}
|
|
++num62;
|
|
if (num62 > 1)
|
|
num62 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag6)
|
|
{
|
|
num55 = 0;
|
|
--num54;
|
|
}
|
|
}
|
|
}
|
|
if (num55 > 1000)
|
|
{
|
|
num55 = 0;
|
|
--num54;
|
|
}
|
|
}
|
|
WorldGen.tLeft = num38;
|
|
WorldGen.tRight = num39;
|
|
WorldGen.tTop = num40;
|
|
WorldGen.tBottom = num41;
|
|
WorldGen.tRooms = maxValue;
|
|
}
|
|
|
|
public static void templePart2()
|
|
{
|
|
int tLeft = WorldGen.tLeft;
|
|
int tRight = WorldGen.tRight;
|
|
int tTop = WorldGen.tTop;
|
|
int tBottom = WorldGen.tBottom;
|
|
int tRooms = WorldGen.tRooms;
|
|
float num1 = (float) tRooms * 1.9f * (float) (1.0 + (double) WorldGen.genRand.Next(-15, 16) * 0.00999999977648258);
|
|
int num2 = 0;
|
|
while ((double) num1 > 0.0)
|
|
{
|
|
int x2 = WorldGen.genRand.Next(tLeft, tRight);
|
|
int y2 = WorldGen.genRand.Next(tTop, tBottom);
|
|
if (Main.tile[x2, y2].wall == (ushort) 87 && !Main.tile[x2, y2].active())
|
|
{
|
|
if (WorldGen.mayanTrap(x2, y2))
|
|
{
|
|
--num1;
|
|
num2 = 0;
|
|
}
|
|
else
|
|
++num2;
|
|
}
|
|
else
|
|
++num2;
|
|
if (num2 > 100)
|
|
{
|
|
num2 = 0;
|
|
--num1;
|
|
}
|
|
}
|
|
Main.tileSolid[232] = false;
|
|
float num3 = (float) tRooms * 0.35f * (float) (1.0 + (double) WorldGen.genRand.Next(-15, 16) * 0.00999999977648258);
|
|
int contain = 1293;
|
|
int num4 = 0;
|
|
while ((double) num3 > 0.0)
|
|
{
|
|
int i = WorldGen.genRand.Next(tLeft, tRight);
|
|
int j = WorldGen.genRand.Next(tTop, tBottom);
|
|
if (Main.tile[i, j].wall == (ushort) 87 && !Main.tile[i, j].active() && WorldGen.AddBuriedChest(i, j, contain, true, 16))
|
|
{
|
|
--num3;
|
|
num4 = 0;
|
|
}
|
|
++num4;
|
|
if (num4 > 10000)
|
|
break;
|
|
}
|
|
float num5 = (float) tRooms * 1.25f * (float) (1.0 + (double) WorldGen.genRand.Next(-25, 36) * 0.00999999977648258);
|
|
int num6 = 0;
|
|
while ((double) num5 > 0.0)
|
|
{
|
|
++num6;
|
|
int index1 = WorldGen.genRand.Next(tLeft, tRight);
|
|
int index2 = WorldGen.genRand.Next(tTop, tBottom);
|
|
if (Main.tile[index1, index2].wall == (ushort) 87 && !Main.tile[index1, index2].active())
|
|
{
|
|
int i = index1;
|
|
int index3 = index2;
|
|
while (!Main.tile[i, index3].active())
|
|
{
|
|
++index3;
|
|
if (index3 > tBottom)
|
|
break;
|
|
}
|
|
int j = index3 - 1;
|
|
if (j <= tBottom)
|
|
{
|
|
WorldGen.PlaceTile(i, j, 105, true, style: WorldGen.genRand.Next(43, 46));
|
|
if (Main.tile[i, j].type == (ushort) 105)
|
|
--num5;
|
|
}
|
|
}
|
|
}
|
|
float num7 = (float) tRooms * 1.35f * (float) (1.0 + (double) WorldGen.genRand.Next(-15, 26) * 0.00999999977648258);
|
|
int num8 = 0;
|
|
while ((double) num7 > 0.0)
|
|
{
|
|
++num8;
|
|
int index4 = WorldGen.genRand.Next(tLeft, tRight);
|
|
int index5 = WorldGen.genRand.Next(tTop, tBottom);
|
|
if (Main.tile[index4, index5].wall == (ushort) 87 && !Main.tile[index4, index5].active())
|
|
{
|
|
int i = index4;
|
|
int index6 = index5;
|
|
while (!Main.tile[i, index6].active())
|
|
{
|
|
++index6;
|
|
if (index6 > tBottom)
|
|
break;
|
|
}
|
|
int j = index6 - 1;
|
|
if (j <= tBottom)
|
|
{
|
|
switch (WorldGen.genRand.Next(3))
|
|
{
|
|
case 0:
|
|
WorldGen.PlaceTile(i, j, 18, true, style: 10);
|
|
if (Main.tile[i, j].type == (ushort) 18)
|
|
{
|
|
--num7;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
WorldGen.PlaceTile(i, j, 14, true, style: 9);
|
|
if (Main.tile[i, j].type == (ushort) 14)
|
|
{
|
|
--num7;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
WorldGen.PlaceTile(i, j, 15, true, style: 12);
|
|
if (Main.tile[i, j].type == (ushort) 15)
|
|
{
|
|
--num7;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num8 > 10000)
|
|
break;
|
|
}
|
|
Main.tileSolid[232] = true;
|
|
}
|
|
|
|
public static bool nearPicture(int x, int y)
|
|
{
|
|
for (int index1 = x - 4; index1 <= x + 3; ++index1)
|
|
{
|
|
for (int index2 = y - 3; index2 <= y + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool nearPicture2(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].wall != (ushort) 7 && Main.tile[x, y].wall != (ushort) 8 && Main.tile[x, y].wall != (ushort) 9)
|
|
{
|
|
for (int index1 = x - 8; index1 <= x + 8; ++index1)
|
|
{
|
|
for (int index2 = y - 5; index2 <= y + 5; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && (Main.tile[index1, index2].type == (ushort) 240 || Main.tile[index1, index2].type == (ushort) 241 || Main.tile[index1, index2].type == (ushort) 242))
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int index3 = x - 15; index3 <= x + 15; ++index3)
|
|
{
|
|
for (int index4 = y - 10; index4 <= y + 10; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && (Main.tile[index3, index4].type == (ushort) 240 || Main.tile[index3, index4].type == (ushort) 241 || Main.tile[index3, index4].type == (ushort) 242))
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void MakeDungeon(int x, int y)
|
|
{
|
|
WorldGen.dEnteranceX = 0;
|
|
WorldGen.numDRooms = 0;
|
|
WorldGen.numDDoors = 0;
|
|
WorldGen.numDungeonPlatforms = 0;
|
|
int num1 = WorldGen.genRand.Next(3);
|
|
WorldGen.genRand.Next(3);
|
|
ushort tileType;
|
|
int wallType1;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
tileType = (ushort) 41;
|
|
wallType1 = 7;
|
|
WorldGen.crackedType = (ushort) 481;
|
|
break;
|
|
case 1:
|
|
tileType = (ushort) 43;
|
|
wallType1 = 8;
|
|
WorldGen.crackedType = (ushort) 482;
|
|
break;
|
|
default:
|
|
tileType = (ushort) 44;
|
|
wallType1 = 9;
|
|
WorldGen.crackedType = (ushort) 483;
|
|
break;
|
|
}
|
|
Main.tileSolid[(int) WorldGen.crackedType] = false;
|
|
WorldGen.dungeonLake = true;
|
|
WorldGen.numDDoors = 0;
|
|
WorldGen.numDungeonPlatforms = 0;
|
|
WorldGen.numDRooms = 0;
|
|
WorldGen.dungeonX = x;
|
|
WorldGen.dungeonY = y;
|
|
WorldGen.dMinX = x;
|
|
WorldGen.dMaxX = x;
|
|
WorldGen.dMinY = y;
|
|
WorldGen.dMaxY = y;
|
|
WorldGen.dxStrength1 = (double) WorldGen.genRand.Next(25, 30);
|
|
WorldGen.dyStrength1 = (double) WorldGen.genRand.Next(20, 25);
|
|
WorldGen.dxStrength2 = (double) WorldGen.genRand.Next(35, 50);
|
|
WorldGen.dyStrength2 = (double) WorldGen.genRand.Next(10, 15);
|
|
float num2 = (float) (Main.maxTilesX / 60);
|
|
float num3 = num2 + (float) WorldGen.genRand.Next(0, (int) ((double) num2 / 3.0));
|
|
float num4 = num3;
|
|
int num5 = 5;
|
|
WorldGen.DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
while ((double) num3 > 0.0)
|
|
{
|
|
if (WorldGen.dungeonX < WorldGen.dMinX)
|
|
WorldGen.dMinX = WorldGen.dungeonX;
|
|
if (WorldGen.dungeonX > WorldGen.dMaxX)
|
|
WorldGen.dMaxX = WorldGen.dungeonX;
|
|
if (WorldGen.dungeonY > WorldGen.dMaxY)
|
|
WorldGen.dMaxY = WorldGen.dungeonY;
|
|
--num3;
|
|
Main.statusText = Lang.gen[58].Value + " " + (object) (int) (((double) num4 - (double) num3) / (double) num4 * 60.0) + "%";
|
|
if (num5 > 0)
|
|
--num5;
|
|
if (num5 == 0 & WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
num5 = 5;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int dungeonX = WorldGen.dungeonX;
|
|
int dungeonY = WorldGen.dungeonY;
|
|
WorldGen.DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
WorldGen.DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
WorldGen.dungeonX = dungeonX;
|
|
WorldGen.dungeonY = dungeonY;
|
|
}
|
|
else
|
|
WorldGen.DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
}
|
|
else
|
|
WorldGen.DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
}
|
|
WorldGen.DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
int num6 = WorldGen.dRoomX[0];
|
|
int num7 = WorldGen.dRoomY[0];
|
|
for (int index = 0; index < WorldGen.numDRooms; ++index)
|
|
{
|
|
if (WorldGen.dRoomY[index] < num7)
|
|
{
|
|
num6 = WorldGen.dRoomX[index];
|
|
num7 = WorldGen.dRoomY[index];
|
|
}
|
|
}
|
|
WorldGen.dungeonX = num6;
|
|
WorldGen.dungeonY = num7;
|
|
WorldGen.dEnteranceX = num6;
|
|
WorldGen.dSurface = false;
|
|
int num8 = 5;
|
|
if (WorldGen.drunkWorldGen)
|
|
WorldGen.dSurface = true;
|
|
while (!WorldGen.dSurface)
|
|
{
|
|
if (num8 > 0)
|
|
--num8;
|
|
if (num8 == 0 && WorldGen.genRand.Next(5) == 0 && (double) WorldGen.dungeonY > Main.worldSurface + 100.0)
|
|
{
|
|
num8 = 10;
|
|
int dungeonX = WorldGen.dungeonX;
|
|
int dungeonY = WorldGen.dungeonY;
|
|
WorldGen.DungeonHalls(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1, true);
|
|
WorldGen.DungeonRoom(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
WorldGen.dungeonX = dungeonX;
|
|
WorldGen.dungeonY = dungeonY;
|
|
}
|
|
WorldGen.DungeonStairs(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
}
|
|
WorldGen.DungeonEnt(WorldGen.dungeonX, WorldGen.dungeonY, tileType, wallType1);
|
|
Main.statusText = Lang.gen[58].Value + " 65%";
|
|
int num9 = Main.maxTilesX * 2;
|
|
int i1;
|
|
int j1;
|
|
int num10;
|
|
int wallType2;
|
|
for (int index = 0; index < num9; index = (!WorldGen.DungeonPitTrap(i1, j1, (ushort) num10, wallType2) ? index + 1 : index + 1500) + 1)
|
|
{
|
|
i1 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int minValue = WorldGen.dMinY;
|
|
if ((double) minValue < Main.worldSurface)
|
|
minValue = (int) Main.worldSurface;
|
|
j1 = WorldGen.genRand.Next(minValue, WorldGen.dMaxY);
|
|
num10 = (int) tileType;
|
|
wallType2 = wallType1;
|
|
}
|
|
for (int index1 = 0; index1 < WorldGen.numDRooms; ++index1)
|
|
{
|
|
for (int index2 = WorldGen.dRoomL[index1]; index2 <= WorldGen.dRoomR[index1]; ++index2)
|
|
{
|
|
if (!Main.tile[index2, WorldGen.dRoomT[index1] - 1].active())
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = index2;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = WorldGen.dRoomT[index1] - 1;
|
|
++WorldGen.numDungeonPlatforms;
|
|
break;
|
|
}
|
|
}
|
|
for (int index3 = WorldGen.dRoomL[index1]; index3 <= WorldGen.dRoomR[index1]; ++index3)
|
|
{
|
|
if (!Main.tile[index3, WorldGen.dRoomB[index1] + 1].active())
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = index3;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = WorldGen.dRoomB[index1] + 1;
|
|
++WorldGen.numDungeonPlatforms;
|
|
break;
|
|
}
|
|
}
|
|
for (int index4 = WorldGen.dRoomT[index1]; index4 <= WorldGen.dRoomB[index1]; ++index4)
|
|
{
|
|
if (!Main.tile[WorldGen.dRoomL[index1] - 1, index4].active())
|
|
{
|
|
WorldGen.DDoorX[WorldGen.numDDoors] = WorldGen.dRoomL[index1] - 1;
|
|
WorldGen.DDoorY[WorldGen.numDDoors] = index4;
|
|
WorldGen.DDoorPos[WorldGen.numDDoors] = -1;
|
|
++WorldGen.numDDoors;
|
|
break;
|
|
}
|
|
}
|
|
for (int index5 = WorldGen.dRoomT[index1]; index5 <= WorldGen.dRoomB[index1]; ++index5)
|
|
{
|
|
if (!Main.tile[WorldGen.dRoomR[index1] + 1, index5].active())
|
|
{
|
|
WorldGen.DDoorX[WorldGen.numDDoors] = WorldGen.dRoomR[index1] + 1;
|
|
WorldGen.DDoorY[WorldGen.numDDoors] = index5;
|
|
WorldGen.DDoorPos[WorldGen.numDDoors] = 1;
|
|
++WorldGen.numDDoors;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
Main.statusText = Lang.gen[58].Value + " 70%";
|
|
int num11 = 0;
|
|
int num12 = 1000;
|
|
int num13 = 0;
|
|
int num14 = Main.maxTilesX / 100;
|
|
if (WorldGen.getGoodWorldGen)
|
|
num14 *= 3;
|
|
while (num13 < num14)
|
|
{
|
|
++num11;
|
|
int index6 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int index7 = WorldGen.genRand.Next((int) Main.worldSurface + 25, WorldGen.dMaxY);
|
|
if (WorldGen.drunkWorldGen)
|
|
index7 = WorldGen.genRand.Next(WorldGen.dungeonY + 25, WorldGen.dMaxY);
|
|
int num15 = index6;
|
|
if ((int) Main.tile[index6, index7].wall == wallType1 && !Main.tile[index6, index7].active())
|
|
{
|
|
int num16 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num16 = -1;
|
|
while (!Main.tile[index6, index7].active())
|
|
index7 += num16;
|
|
if (Main.tile[index6 - 1, index7].active() && Main.tile[index6 + 1, index7].active() && (int) Main.tile[index6 - 1, index7].type != (int) WorldGen.crackedType && !Main.tile[index6 - 1, index7 - num16].active() && !Main.tile[index6 + 1, index7 - num16].active())
|
|
{
|
|
++num13;
|
|
for (int index8 = WorldGen.genRand.Next(5, 13); Main.tile[index6 - 1, index7].active() && (int) Main.tile[index6 - 1, index7].type != (int) WorldGen.crackedType && Main.tile[index6, index7 + num16].active() && Main.tile[index6, index7].active() && !Main.tile[index6, index7 - num16].active() && index8 > 0; --index8)
|
|
{
|
|
Main.tile[index6, index7].type = (ushort) 48;
|
|
if (!Main.tile[index6 - 1, index7 - num16].active() && !Main.tile[index6 + 1, index7 - num16].active())
|
|
{
|
|
Main.tile[index6, index7 - num16].Clear(TileDataType.Slope);
|
|
Main.tile[index6, index7 - num16].type = (ushort) 48;
|
|
Main.tile[index6, index7 - num16].active(true);
|
|
Main.tile[index6, index7 - num16 * 2].Clear(TileDataType.Slope);
|
|
Main.tile[index6, index7 - num16 * 2].type = (ushort) 48;
|
|
Main.tile[index6, index7 - num16 * 2].active(true);
|
|
}
|
|
--index6;
|
|
}
|
|
int num17 = WorldGen.genRand.Next(5, 13);
|
|
for (int index9 = num15 + 1; Main.tile[index9 + 1, index7].active() && (int) Main.tile[index9 + 1, index7].type != (int) WorldGen.crackedType && Main.tile[index9, index7 + num16].active() && Main.tile[index9, index7].active() && !Main.tile[index9, index7 - num16].active() && num17 > 0; --num17)
|
|
{
|
|
Main.tile[index9, index7].type = (ushort) 48;
|
|
if (!Main.tile[index9 - 1, index7 - num16].active() && !Main.tile[index9 + 1, index7 - num16].active())
|
|
{
|
|
Main.tile[index9, index7 - num16].Clear(TileDataType.Slope);
|
|
Main.tile[index9, index7 - num16].type = (ushort) 48;
|
|
Main.tile[index9, index7 - num16].active(true);
|
|
Main.tile[index9, index7 - num16 * 2].Clear(TileDataType.Slope);
|
|
Main.tile[index9, index7 - num16 * 2].type = (ushort) 48;
|
|
Main.tile[index9, index7 - num16 * 2].active(true);
|
|
}
|
|
++index9;
|
|
}
|
|
}
|
|
}
|
|
if (num11 > num12)
|
|
{
|
|
num11 = 0;
|
|
++num13;
|
|
}
|
|
}
|
|
int num18 = 0;
|
|
int num19 = 1000;
|
|
int num20 = 0;
|
|
Main.statusText = Lang.gen[58].Value + " 75%";
|
|
while (num20 < num14)
|
|
{
|
|
++num18;
|
|
int index10 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int index11 = WorldGen.genRand.Next((int) Main.worldSurface + 25, WorldGen.dMaxY);
|
|
int num21 = index11;
|
|
if ((int) Main.tile[index10, index11].wall == wallType1 && !Main.tile[index10, index11].active())
|
|
{
|
|
int num22 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num22 = -1;
|
|
while (index10 > 5 && index10 < Main.maxTilesX - 5 && !Main.tile[index10, index11].active())
|
|
index10 += num22;
|
|
if (Main.tile[index10, index11 - 1].active() && Main.tile[index10, index11 + 1].active() && (int) Main.tile[index10, index11 - 1].type != (int) WorldGen.crackedType && !Main.tile[index10 - num22, index11 - 1].active() && !Main.tile[index10 - num22, index11 + 1].active())
|
|
{
|
|
++num20;
|
|
for (int index12 = WorldGen.genRand.Next(5, 13); Main.tile[index10, index11 - 1].active() && (int) Main.tile[index10, index11 - 1].type != (int) WorldGen.crackedType && Main.tile[index10 + num22, index11].active() && Main.tile[index10, index11].active() && !Main.tile[index10 - num22, index11].active() && index12 > 0; --index12)
|
|
{
|
|
Main.tile[index10, index11].type = (ushort) 48;
|
|
if (!Main.tile[index10 - num22, index11 - 1].active() && !Main.tile[index10 - num22, index11 + 1].active())
|
|
{
|
|
Main.tile[index10 - num22, index11].type = (ushort) 48;
|
|
Main.tile[index10 - num22, index11].active(true);
|
|
Main.tile[index10 - num22, index11].Clear(TileDataType.Slope);
|
|
Main.tile[index10 - num22 * 2, index11].type = (ushort) 48;
|
|
Main.tile[index10 - num22 * 2, index11].active(true);
|
|
Main.tile[index10 - num22 * 2, index11].Clear(TileDataType.Slope);
|
|
}
|
|
--index11;
|
|
}
|
|
int num23 = WorldGen.genRand.Next(5, 13);
|
|
for (int index13 = num21 + 1; Main.tile[index10, index13 + 1].active() && (int) Main.tile[index10, index13 + 1].type != (int) WorldGen.crackedType && Main.tile[index10 + num22, index13].active() && Main.tile[index10, index13].active() && !Main.tile[index10 - num22, index13].active() && num23 > 0; --num23)
|
|
{
|
|
Main.tile[index10, index13].type = (ushort) 48;
|
|
if (!Main.tile[index10 - num22, index13 - 1].active() && !Main.tile[index10 - num22, index13 + 1].active())
|
|
{
|
|
Main.tile[index10 - num22, index13].type = (ushort) 48;
|
|
Main.tile[index10 - num22, index13].active(true);
|
|
Main.tile[index10 - num22, index13].Clear(TileDataType.Slope);
|
|
Main.tile[index10 - num22 * 2, index13].type = (ushort) 48;
|
|
Main.tile[index10 - num22 * 2, index13].active(true);
|
|
Main.tile[index10 - num22 * 2, index13].Clear(TileDataType.Slope);
|
|
}
|
|
++index13;
|
|
}
|
|
}
|
|
}
|
|
if (num18 > num19)
|
|
{
|
|
num18 = 0;
|
|
++num20;
|
|
}
|
|
}
|
|
Main.statusText = Lang.gen[58].Value + " 80%";
|
|
for (int index14 = 0; index14 < WorldGen.numDDoors; ++index14)
|
|
{
|
|
int num24 = WorldGen.DDoorX[index14] - 10;
|
|
int num25 = WorldGen.DDoorX[index14] + 10;
|
|
int num26 = 100;
|
|
int num27 = 0;
|
|
for (int index15 = num24; index15 < num25; ++index15)
|
|
{
|
|
bool flag1 = true;
|
|
int index16 = WorldGen.DDoorY[index14];
|
|
while (index16 > 10 && !Main.tile[index15, index16].active())
|
|
--index16;
|
|
if (!Main.tileDungeon[(int) Main.tile[index15, index16].type])
|
|
flag1 = false;
|
|
int num28 = index16;
|
|
int index17 = WorldGen.DDoorY[index14];
|
|
while (!Main.tile[index15, index17].active())
|
|
++index17;
|
|
if (!Main.tileDungeon[(int) Main.tile[index15, index17].type])
|
|
flag1 = false;
|
|
int num29 = index17;
|
|
if (num29 - num28 >= 3)
|
|
{
|
|
int num30 = index15 - 20;
|
|
int num31 = index15 + 20;
|
|
int num32 = num29 - 10;
|
|
int num33 = num29 + 10;
|
|
for (int index18 = num30; index18 < num31; ++index18)
|
|
{
|
|
for (int index19 = num32; index19 < num33; ++index19)
|
|
{
|
|
if (Main.tile[index18, index19].active() && Main.tile[index18, index19].type == (ushort) 10)
|
|
{
|
|
flag1 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag1)
|
|
{
|
|
for (int index20 = num29 - 3; index20 < num29; ++index20)
|
|
{
|
|
for (int index21 = index15 - 3; index21 <= index15 + 3; ++index21)
|
|
{
|
|
if (Main.tile[index21, index20].active())
|
|
{
|
|
flag1 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag1 && num29 - num28 < 20)
|
|
{
|
|
bool flag2 = false;
|
|
if (WorldGen.DDoorPos[index14] == 0 && num29 - num28 < num26)
|
|
flag2 = true;
|
|
if (WorldGen.DDoorPos[index14] == -1 && index15 > num27)
|
|
flag2 = true;
|
|
if (WorldGen.DDoorPos[index14] == 1 && (index15 < num27 || num27 == 0))
|
|
flag2 = true;
|
|
if (flag2)
|
|
{
|
|
num27 = index15;
|
|
num26 = num29 - num28;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (num26 < 20)
|
|
{
|
|
int i2 = num27;
|
|
int index22 = WorldGen.DDoorY[index14];
|
|
int index23 = index22;
|
|
for (; !Main.tile[i2, index22].active(); ++index22)
|
|
Main.tile[i2, index22].active(false);
|
|
while (!Main.tile[i2, index23].active())
|
|
--index23;
|
|
int j2 = index22 - 1;
|
|
int num34 = index23 + 1;
|
|
for (int index24 = num34; index24 < j2 - 2; ++index24)
|
|
{
|
|
Main.tile[i2, index24].Clear(TileDataType.Slope);
|
|
Main.tile[i2, index24].active(true);
|
|
Main.tile[i2, index24].type = tileType;
|
|
}
|
|
int style = 13;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
switch (wallType1)
|
|
{
|
|
case 7:
|
|
style = 16;
|
|
break;
|
|
case 8:
|
|
style = 17;
|
|
break;
|
|
case 9:
|
|
style = 18;
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.PlaceTile(i2, j2, 10, true, style: style);
|
|
int index25 = i2 - 1;
|
|
int index26 = j2 - 3;
|
|
while (!Main.tile[index25, index26].active())
|
|
--index26;
|
|
if (j2 - index26 < j2 - num34 + 5 && Main.tileDungeon[(int) Main.tile[index25, index26].type])
|
|
{
|
|
for (int index27 = j2 - 4 - WorldGen.genRand.Next(3); index27 > index26; --index27)
|
|
{
|
|
Main.tile[index25, index27].Clear(TileDataType.Slope);
|
|
Main.tile[index25, index27].active(true);
|
|
Main.tile[index25, index27].type = tileType;
|
|
}
|
|
}
|
|
int index28 = index25 + 2;
|
|
int index29 = j2 - 3;
|
|
while (!Main.tile[index28, index29].active())
|
|
--index29;
|
|
if (j2 - index29 < j2 - num34 + 5 && Main.tileDungeon[(int) Main.tile[index28, index29].type])
|
|
{
|
|
for (int index30 = j2 - 4 - WorldGen.genRand.Next(3); index30 > index29; --index30)
|
|
{
|
|
Main.tile[index28, index30].active(true);
|
|
Main.tile[index28, index30].Clear(TileDataType.Slope);
|
|
Main.tile[index28, index30].type = tileType;
|
|
}
|
|
}
|
|
int index31 = j2 + 1;
|
|
int num35 = index28 - 1;
|
|
Main.tile[num35 - 1, index31].active(true);
|
|
Main.tile[num35 - 1, index31].type = tileType;
|
|
Main.tile[num35 - 1, index31].Clear(TileDataType.Slope);
|
|
Main.tile[num35 + 1, index31].active(true);
|
|
Main.tile[num35 + 1, index31].type = tileType;
|
|
Main.tile[num35 + 1, index31].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
int[] roomWall = new int[3];
|
|
switch (wallType1)
|
|
{
|
|
case 7:
|
|
roomWall[0] = 7;
|
|
roomWall[1] = 94;
|
|
roomWall[2] = 95;
|
|
break;
|
|
case 9:
|
|
roomWall[0] = 9;
|
|
roomWall[1] = 96;
|
|
roomWall[2] = 97;
|
|
break;
|
|
default:
|
|
roomWall[0] = 8;
|
|
roomWall[1] = 98;
|
|
roomWall[2] = 99;
|
|
break;
|
|
}
|
|
for (int index32 = 0; index32 < 5; ++index32)
|
|
{
|
|
for (int index33 = 0; index33 < 3; ++index33)
|
|
{
|
|
int num36 = WorldGen.genRand.Next(40, 240);
|
|
int num37 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int num38 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY);
|
|
for (int x1 = num37 - num36; x1 < num37 + num36; ++x1)
|
|
{
|
|
for (int y1 = num38 - num36; y1 < num38 + num36; ++y1)
|
|
{
|
|
if ((double) y1 > Main.worldSurface)
|
|
{
|
|
double num39 = (double) Math.Abs(num37 - x1);
|
|
float num40 = (float) Math.Abs(num38 - y1);
|
|
if (Math.Sqrt(num39 * num39 + (double) num40 * (double) num40) < (double) num36 * 0.4 && Main.wallDungeon[(int) Main.tile[x1, y1].wall])
|
|
WorldGen.Spread.WallDungeon(x1, y1, roomWall[index33]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Main.statusText = Lang.gen[58].Value + " 85%";
|
|
for (int index34 = 0; index34 < WorldGen.numDungeonPlatforms; ++index34)
|
|
{
|
|
int index35 = WorldGen.dungeonPlatformX[index34];
|
|
int num41 = WorldGen.dungeonPlatformY[index34];
|
|
int num42 = Main.maxTilesX;
|
|
int num43 = 10;
|
|
if ((double) num41 < Main.worldSurface + 50.0)
|
|
num43 = 20;
|
|
for (int index36 = num41 - 5; index36 <= num41 + 5; ++index36)
|
|
{
|
|
int index37 = index35;
|
|
int index38 = index35;
|
|
bool flag3 = false;
|
|
if (Main.tile[index37, index36].active())
|
|
{
|
|
flag3 = true;
|
|
}
|
|
else
|
|
{
|
|
while (!Main.tile[index37, index36].active())
|
|
{
|
|
--index37;
|
|
if (!Main.tileDungeon[(int) Main.tile[index37, index36].type] || index37 == 0)
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
}
|
|
while (!Main.tile[index38, index36].active())
|
|
{
|
|
++index38;
|
|
if (!Main.tileDungeon[(int) Main.tile[index38, index36].type] || index38 == Main.maxTilesX - 1)
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag3 && index38 - index37 <= num43)
|
|
{
|
|
bool flag4 = true;
|
|
int num44 = index35 - num43 / 2 - 2;
|
|
int num45 = index35 + num43 / 2 + 2;
|
|
int num46 = index36 - 5;
|
|
int num47 = index36 + 5;
|
|
for (int index39 = num44; index39 <= num45; ++index39)
|
|
{
|
|
for (int index40 = num46; index40 <= num47; ++index40)
|
|
{
|
|
if (Main.tile[index39, index40].active() && Main.tile[index39, index40].type == (ushort) 19)
|
|
{
|
|
flag4 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (int index41 = index36 + 3; index41 >= index36 - 5; --index41)
|
|
{
|
|
if (Main.tile[index35, index41].active())
|
|
{
|
|
flag4 = false;
|
|
break;
|
|
}
|
|
}
|
|
if (flag4)
|
|
{
|
|
num42 = index36;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num42 > num41 - 10 && num42 < num41 + 10)
|
|
{
|
|
int i3 = index35;
|
|
int j3 = num42;
|
|
int i4 = index35 + 1;
|
|
for (; !Main.tile[i3, j3].active(); --i3)
|
|
{
|
|
Main.tile[i3, j3].active(true);
|
|
Main.tile[i3, j3].type = (ushort) 19;
|
|
Main.tile[i3, j3].Clear(TileDataType.Slope);
|
|
switch (wallType1)
|
|
{
|
|
case 7:
|
|
Main.tile[i3, j3].frameY = (short) 108;
|
|
break;
|
|
case 8:
|
|
Main.tile[i3, j3].frameY = (short) 144;
|
|
break;
|
|
default:
|
|
Main.tile[i3, j3].frameY = (short) 126;
|
|
break;
|
|
}
|
|
WorldGen.TileFrame(i3, j3);
|
|
}
|
|
for (; !Main.tile[i4, j3].active(); ++i4)
|
|
{
|
|
Main.tile[i4, j3].active(true);
|
|
Main.tile[i4, j3].type = (ushort) 19;
|
|
Main.tile[i4, j3].Clear(TileDataType.Slope);
|
|
switch (wallType1)
|
|
{
|
|
case 7:
|
|
Main.tile[i4, j3].frameY = (short) 108;
|
|
break;
|
|
case 8:
|
|
Main.tile[i4, j3].frameY = (short) 144;
|
|
break;
|
|
default:
|
|
Main.tile[i4, j3].frameY = (short) 126;
|
|
break;
|
|
}
|
|
WorldGen.TileFrame(i4, j3);
|
|
}
|
|
}
|
|
}
|
|
int num48 = 5;
|
|
if (WorldGen.drunkWorldGen)
|
|
num48 = 6;
|
|
for (int index = 0; index < num48; ++index)
|
|
{
|
|
bool flag = false;
|
|
while (!flag)
|
|
{
|
|
int i5 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int j4 = WorldGen.genRand.Next((int) Main.worldSurface, WorldGen.dMaxY);
|
|
if (Main.wallDungeon[(int) Main.tile[i5, j4].wall] && !Main.tile[i5, j4].active())
|
|
{
|
|
ushort chestTileType = 21;
|
|
int contain = 0;
|
|
int Style = 0;
|
|
switch (index)
|
|
{
|
|
case 0:
|
|
Style = 23;
|
|
contain = 1156;
|
|
break;
|
|
case 1:
|
|
if (!WorldGen.crimson)
|
|
{
|
|
Style = 24;
|
|
contain = 1571;
|
|
break;
|
|
}
|
|
Style = 25;
|
|
contain = 1569;
|
|
break;
|
|
case 2:
|
|
Style = 26;
|
|
contain = 1260;
|
|
break;
|
|
case 3:
|
|
Style = 27;
|
|
contain = 1572;
|
|
break;
|
|
case 4:
|
|
chestTileType = (ushort) 467;
|
|
Style = 13;
|
|
contain = 4607;
|
|
break;
|
|
case 5:
|
|
if (WorldGen.crimson)
|
|
{
|
|
Style = 24;
|
|
contain = 1571;
|
|
break;
|
|
}
|
|
Style = 25;
|
|
contain = 1569;
|
|
break;
|
|
}
|
|
flag = WorldGen.AddBuriedChest(i5, j4, contain, Style: Style, chestTileType: chestTileType);
|
|
}
|
|
}
|
|
}
|
|
int[] numArray = new int[3]
|
|
{
|
|
WorldGen.genRand.Next(9, 13),
|
|
WorldGen.genRand.Next(9, 13),
|
|
0
|
|
};
|
|
while (numArray[1] == numArray[0])
|
|
numArray[1] = WorldGen.genRand.Next(9, 13);
|
|
numArray[2] = WorldGen.genRand.Next(9, 13);
|
|
while (numArray[2] == numArray[0] || numArray[2] == numArray[1])
|
|
numArray[2] = WorldGen.genRand.Next(9, 13);
|
|
Main.statusText = Lang.gen[58].Value + " 90%";
|
|
int num49 = 0;
|
|
int num50 = 1000;
|
|
int num51 = 0;
|
|
while (num51 < Main.maxTilesX / 20)
|
|
{
|
|
++num49;
|
|
int index42 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int j5 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY);
|
|
bool flag5 = true;
|
|
if (Main.wallDungeon[(int) Main.tile[index42, j5].wall] && !Main.tile[index42, j5].active())
|
|
{
|
|
int num52 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num52 = -1;
|
|
while (flag5 && !Main.tile[index42, j5].active())
|
|
{
|
|
index42 -= num52;
|
|
if (index42 < 5 || index42 > Main.maxTilesX - 5)
|
|
flag5 = false;
|
|
else if (Main.tile[index42, j5].active() && !Main.tileDungeon[(int) Main.tile[index42, j5].type])
|
|
flag5 = false;
|
|
}
|
|
if (flag5 && Main.tile[index42, j5].active() && Main.tileDungeon[(int) Main.tile[index42, j5].type] && Main.tile[index42, j5 - 1].active() && Main.tileDungeon[(int) Main.tile[index42, j5 - 1].type] && Main.tile[index42, j5 + 1].active() && Main.tileDungeon[(int) Main.tile[index42, j5 + 1].type])
|
|
{
|
|
int i6 = index42 + num52;
|
|
for (int index43 = i6 - 3; index43 <= i6 + 3; ++index43)
|
|
{
|
|
for (int index44 = j5 - 3; index44 <= j5 + 3; ++index44)
|
|
{
|
|
if (Main.tile[index43, index44].active() && Main.tile[index43, index44].type == (ushort) 19)
|
|
{
|
|
flag5 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag5 && !Main.tile[i6, j5 - 1].active() & !Main.tile[i6, j5 - 2].active() & !Main.tile[i6, j5 - 3].active())
|
|
{
|
|
int index45 = i6;
|
|
int num53 = i6;
|
|
while (index45 > WorldGen.dMinX && index45 < WorldGen.dMaxX && !Main.tile[index45, j5].active() && !Main.tile[index45, j5 - 1].active() && !Main.tile[index45, j5 + 1].active())
|
|
index45 += num52;
|
|
int num54 = Math.Abs(i6 - index45);
|
|
bool flag6 = false;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag6 = true;
|
|
if (num54 > 5)
|
|
{
|
|
for (int index46 = WorldGen.genRand.Next(1, 4); index46 > 0; --index46)
|
|
{
|
|
Main.tile[i6, j5].active(true);
|
|
Main.tile[i6, j5].Clear(TileDataType.Slope);
|
|
Main.tile[i6, j5].type = (ushort) 19;
|
|
Main.tile[i6, j5].frameY = (int) Main.tile[i6, j5].wall != roomWall[0] ? ((int) Main.tile[i6, j5].wall != roomWall[1] ? (short) (18 * numArray[2]) : (short) (18 * numArray[1])) : (short) (18 * numArray[0]);
|
|
WorldGen.TileFrame(i6, j5);
|
|
if (flag6)
|
|
{
|
|
WorldGen.PlaceTile(i6, j5 - 1, 50, true);
|
|
if (WorldGen.genRand.Next(50) == 0 && (double) j5 > (Main.worldSurface + Main.rockLayer) / 2.0 && Main.tile[i6, j5 - 1].type == (ushort) 50)
|
|
Main.tile[i6, j5 - 1].frameX = (short) 90;
|
|
}
|
|
i6 += num52;
|
|
}
|
|
num49 = 0;
|
|
++num51;
|
|
if (!flag6 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int i7 = num53;
|
|
int j6 = j5 - 1;
|
|
int Type = 0;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Type = 1;
|
|
switch (Type)
|
|
{
|
|
case 0:
|
|
Type = 13;
|
|
break;
|
|
case 1:
|
|
Type = 49;
|
|
break;
|
|
}
|
|
WorldGen.PlaceTile(i7, j6, Type, true);
|
|
if (Main.tile[i7, j6].type == (ushort) 13)
|
|
Main.tile[i7, j6].frameX = WorldGen.genRand.Next(2) != 0 ? (short) 36 : (short) 18;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (num49 > num50)
|
|
{
|
|
num49 = 0;
|
|
++num51;
|
|
}
|
|
}
|
|
Main.statusText = Lang.gen[58].Value + " 95%";
|
|
int num55 = 1;
|
|
for (int index = 0; index < WorldGen.numDRooms; ++index)
|
|
{
|
|
int num56 = 0;
|
|
while (num56 < 1000)
|
|
{
|
|
int num57 = (int) ((double) WorldGen.dRoomSize[index] * 0.4);
|
|
int i8 = WorldGen.dRoomX[index] + WorldGen.genRand.Next(-num57, num57 + 1);
|
|
int j7 = WorldGen.dRoomY[index] + WorldGen.genRand.Next(-num57, num57 + 1);
|
|
int Style = 2;
|
|
if (num55 == 1)
|
|
++num55;
|
|
int contain;
|
|
if (num55 == 2)
|
|
contain = 155;
|
|
else if (num55 == 3)
|
|
contain = 156;
|
|
else if (num55 == 4)
|
|
contain = 157;
|
|
else if (num55 == 5)
|
|
contain = 163;
|
|
else if (num55 == 6)
|
|
contain = 113;
|
|
else if (num55 == 7)
|
|
contain = 3317;
|
|
else if (num55 == 8)
|
|
{
|
|
contain = 327;
|
|
Style = 0;
|
|
}
|
|
else
|
|
{
|
|
contain = 164;
|
|
num55 = 0;
|
|
}
|
|
if ((double) j7 < Main.worldSurface + 50.0)
|
|
{
|
|
contain = 327;
|
|
Style = 0;
|
|
}
|
|
if (contain == 0 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
num56 = 1000;
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.AddBuriedChest(i8, j7, contain, Style: Style))
|
|
{
|
|
num56 += 1000;
|
|
++num55;
|
|
}
|
|
++num56;
|
|
}
|
|
}
|
|
}
|
|
WorldGen.dMinX -= 25;
|
|
WorldGen.dMaxX += 25;
|
|
WorldGen.dMinY -= 25;
|
|
WorldGen.dMaxY += 25;
|
|
if (WorldGen.dMinX < 0)
|
|
WorldGen.dMinX = 0;
|
|
if (WorldGen.dMaxX > Main.maxTilesX)
|
|
WorldGen.dMaxX = Main.maxTilesX;
|
|
if (WorldGen.dMinY < 0)
|
|
WorldGen.dMinY = 0;
|
|
if (WorldGen.dMaxY > Main.maxTilesY)
|
|
WorldGen.dMaxY = Main.maxTilesY;
|
|
int failCount = 0;
|
|
int failMax1 = 1000;
|
|
int numAdd1 = 0;
|
|
WorldGen.MakeDungeon_Lights(tileType, ref failCount, failMax1, ref numAdd1, roomWall);
|
|
failCount = 0;
|
|
int failMax2 = 1000;
|
|
int numAdd2 = 0;
|
|
WorldGen.MakeDungeon_Traps(ref failCount, failMax2, ref numAdd2);
|
|
float count1 = WorldGen.MakeDungeon_GroundFurniture(wallType1);
|
|
float count2 = WorldGen.MakeDungeon_Pictures(roomWall, count1);
|
|
WorldGen.MakeDungeon_Banners(roomWall, count2);
|
|
}
|
|
|
|
private static void MakeDungeon_Traps(ref int failCount, int failMax, ref int numAdd)
|
|
{
|
|
while (numAdd < Main.maxTilesX / 500)
|
|
{
|
|
++failCount;
|
|
int x2 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int y2 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY);
|
|
while ((double) y2 < Main.worldSurface)
|
|
y2 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY);
|
|
if (Main.wallDungeon[(int) Main.tile[x2, y2].wall] && WorldGen.placeTrap(x2, y2, 0))
|
|
failCount = failMax;
|
|
if (failCount > failMax)
|
|
{
|
|
++numAdd;
|
|
failCount = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void MakeDungeon_Lights(
|
|
ushort tileType,
|
|
ref int failCount,
|
|
int failMax,
|
|
ref int numAdd,
|
|
int[] roomWall)
|
|
{
|
|
int[] numArray = new int[3]
|
|
{
|
|
WorldGen.genRand.Next(7),
|
|
WorldGen.genRand.Next(7),
|
|
0
|
|
};
|
|
while (numArray[1] == numArray[0])
|
|
numArray[1] = WorldGen.genRand.Next(7);
|
|
numArray[2] = WorldGen.genRand.Next(7);
|
|
while (numArray[2] == numArray[0] || numArray[2] == numArray[1])
|
|
numArray[2] = WorldGen.genRand.Next(7);
|
|
while (numAdd < Main.maxTilesX / 150)
|
|
{
|
|
++failCount;
|
|
int index1 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int index2 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY);
|
|
if (Main.wallDungeon[(int) Main.tile[index1, index2].wall])
|
|
{
|
|
for (int y = index2; y > WorldGen.dMinY; --y)
|
|
{
|
|
if (Main.tile[index1, y - 1].active() && (int) Main.tile[index1, y - 1].type == (int) tileType)
|
|
{
|
|
bool flag1 = false;
|
|
for (int index3 = index1 - 15; index3 < index1 + 15; ++index3)
|
|
{
|
|
for (int index4 = y - 15; index4 < y + 15; ++index4)
|
|
{
|
|
if (index3 > 0 && index3 < Main.maxTilesX && index4 > 0 && index4 < Main.maxTilesY && (Main.tile[index3, index4].type == (ushort) 42 || Main.tile[index3, index4].type == (ushort) 34))
|
|
{
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[index1 - 1, y].active() || Main.tile[index1 + 1, y].active() || Main.tile[index1 - 1, y + 1].active() || Main.tile[index1 + 1, y + 1].active() || Main.tile[index1, y + 2].active())
|
|
flag1 = true;
|
|
if (!flag1)
|
|
{
|
|
bool flag2 = false;
|
|
if (!flag2 && WorldGen.genRand.Next(7) == 0)
|
|
{
|
|
int style = 27;
|
|
switch (roomWall[0])
|
|
{
|
|
case 7:
|
|
style = 27;
|
|
break;
|
|
case 8:
|
|
style = 28;
|
|
break;
|
|
case 9:
|
|
style = 29;
|
|
break;
|
|
}
|
|
bool flag3 = false;
|
|
for (int index5 = 0; index5 < 15; ++index5)
|
|
{
|
|
if (WorldGen.SolidTile(index1, y + index5))
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag3)
|
|
WorldGen.PlaceChand(index1, y, (ushort) 34, style);
|
|
if (Main.tile[index1, y].type == (ushort) 34)
|
|
{
|
|
flag2 = true;
|
|
failCount = 0;
|
|
++numAdd;
|
|
for (int index6 = 0; index6 < 1000; ++index6)
|
|
{
|
|
int i = index1 + WorldGen.genRand.Next(-12, 13);
|
|
int j = y + WorldGen.genRand.Next(3, 21);
|
|
if (!Main.tile[i, j].active() && !Main.tile[i, j + 1].active() && Main.tileDungeon[(int) Main.tile[i - 1, j].type] && Main.tileDungeon[(int) Main.tile[i + 1, j].type] && Collision.CanHit(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, new Vector2((float) (index1 * 16), (float) (y * 16 + 1)), 16, 16))
|
|
{
|
|
if ((WorldGen.SolidTile(i - 1, j) && Main.tile[i - 1, j].type != (ushort) 10 || WorldGen.SolidTile(i + 1, j) && Main.tile[i + 1, j].type != (ushort) 10 || WorldGen.SolidTile(i, j + 1)) && Main.wallDungeon[(int) Main.tile[i, j].wall] && (Main.tileDungeon[(int) Main.tile[i - 1, j].type] || Main.tileDungeon[(int) Main.tile[i + 1, j].type]))
|
|
WorldGen.PlaceTile(i, j, 136, true);
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
while (i != index1 || j != y)
|
|
{
|
|
Main.tile[i, j].wire(true);
|
|
if (i > index1)
|
|
--i;
|
|
if (i < index1)
|
|
++i;
|
|
Main.tile[i, j].wire(true);
|
|
if (j > y)
|
|
--j;
|
|
if (j < y)
|
|
++j;
|
|
Main.tile[i, j].wire(true);
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
Main.tile[index1, y].frameX = (short) 18;
|
|
Main.tile[index1, y + 1].frameX = (short) 18;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!flag2)
|
|
{
|
|
int style = numArray[0];
|
|
if ((int) Main.tile[index1, y].wall == roomWall[1])
|
|
style = numArray[1];
|
|
if ((int) Main.tile[index1, y].wall == roomWall[2])
|
|
style = numArray[2];
|
|
WorldGen.Place1x2Top(index1, y, (ushort) 42, style);
|
|
if (Main.tile[index1, y].type == (ushort) 42)
|
|
{
|
|
failCount = 0;
|
|
++numAdd;
|
|
for (int index7 = 0; index7 < 1000; ++index7)
|
|
{
|
|
int i = index1 + WorldGen.genRand.Next(-12, 13);
|
|
int j = y + WorldGen.genRand.Next(3, 21);
|
|
if (!Main.tile[i, j].active() && !Main.tile[i, j + 1].active() && Main.tile[i - 1, j].type != (ushort) 48 && Main.tile[i + 1, j].type != (ushort) 48 && Collision.CanHit(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, new Vector2((float) (index1 * 16), (float) (y * 16 + 1)), 16, 16))
|
|
{
|
|
if (WorldGen.SolidTile(i - 1, j) && Main.tile[i - 1, j].type != (ushort) 10 || WorldGen.SolidTile(i + 1, j) && Main.tile[i + 1, j].type != (ushort) 10 || WorldGen.SolidTile(i, j + 1))
|
|
WorldGen.PlaceTile(i, j, 136, true);
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
while (i != index1 || j != y)
|
|
{
|
|
Main.tile[i, j].wire(true);
|
|
if (i > index1)
|
|
--i;
|
|
if (i < index1)
|
|
++i;
|
|
Main.tile[i, j].wire(true);
|
|
if (j > y)
|
|
--j;
|
|
if (j < y)
|
|
++j;
|
|
Main.tile[i, j].wire(true);
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
Main.tile[index1, y].frameX = (short) 18;
|
|
Main.tile[index1, y + 1].frameX = (short) 18;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (failCount > failMax)
|
|
{
|
|
++numAdd;
|
|
failCount = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static float MakeDungeon_Banners(int[] roomWall, float count)
|
|
{
|
|
count = 840000f / (float) Main.maxTilesX;
|
|
for (int index1 = 0; (double) index1 < (double) count; ++index1)
|
|
{
|
|
int i = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int j1;
|
|
for (j1 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY); !Main.wallDungeon[(int) Main.tile[i, j1].wall] || Main.tile[i, j1].active(); j1 = WorldGen.genRand.Next(WorldGen.dMinY, WorldGen.dMaxY))
|
|
i = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
while (!WorldGen.SolidTile(i, j1) && j1 > 10)
|
|
--j1;
|
|
int j2 = j1 + 1;
|
|
if (Main.wallDungeon[(int) Main.tile[i, j2].wall] && Main.tile[i, j2 - 1].type != (ushort) 48 && !Main.tile[i, j2].active() && !Main.tile[i, j2 + 1].active() && !Main.tile[i, j2 + 2].active() && !Main.tile[i, j2 + 3].active())
|
|
{
|
|
bool flag = true;
|
|
for (int index2 = i - 1; index2 <= i + 1; ++index2)
|
|
{
|
|
for (int index3 = j2; index3 <= j2 + 3; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3].active() && (Main.tile[index2, index3].type == (ushort) 10 || Main.tile[index2, index3].type == (ushort) 11 || Main.tile[index2, index3].type == (ushort) 91))
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
int num = 10;
|
|
if ((int) Main.tile[i, j2].wall == roomWall[1])
|
|
num = 12;
|
|
if ((int) Main.tile[i, j2].wall == roomWall[2])
|
|
num = 14;
|
|
int style = num + WorldGen.genRand.Next(2);
|
|
WorldGen.PlaceTile(i, j2, 91, true, style: style);
|
|
}
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
private static float MakeDungeon_Pictures(int[] roomWall, float count)
|
|
{
|
|
count = 420000f / (float) Main.maxTilesX;
|
|
for (int index1 = 0; (double) index1 < (double) count; ++index1)
|
|
{
|
|
int index2 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int index3;
|
|
for (index3 = WorldGen.genRand.Next((int) Main.worldSurface, WorldGen.dMaxY); !Main.wallDungeon[(int) Main.tile[index2, index3].wall] || Main.tile[index2, index3].active(); index3 = WorldGen.genRand.Next((int) Main.worldSurface, WorldGen.dMaxY))
|
|
index2 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
for (int index4 = 0; index4 < 2; ++index4)
|
|
{
|
|
int index5 = index2;
|
|
int index6 = index2;
|
|
while (!Main.tile[index5, index3].active() && Main.wallDungeon[(int) Main.tile[index5, index3].wall])
|
|
--index5;
|
|
int num1 = index5 + 1;
|
|
while (!Main.tile[index6, index3].active() && Main.wallDungeon[(int) Main.tile[index6, index3].wall])
|
|
++index6;
|
|
int num2 = index6 - 1;
|
|
index2 = (num1 + num2) / 2;
|
|
int index7 = index3;
|
|
int index8 = index3;
|
|
while (!Main.tile[index2, index7].active() && Main.wallDungeon[(int) Main.tile[index2, index7].wall])
|
|
--index7;
|
|
int num3 = index7 + 1;
|
|
while (!Main.tile[index2, index8].active() && Main.wallDungeon[(int) Main.tile[index2, index8].wall])
|
|
++index8;
|
|
int num4 = index8 - 1;
|
|
index3 = (num3 + num4) / 2;
|
|
}
|
|
int index9 = index2;
|
|
int index10 = index2;
|
|
while (!Main.tile[index9, index3].active() && !Main.tile[index9, index3 - 1].active() && !Main.tile[index9, index3 + 1].active())
|
|
--index9;
|
|
int num5 = index9 + 1;
|
|
while (!Main.tile[index10, index3].active() && !Main.tile[index10, index3 - 1].active() && !Main.tile[index10, index3 + 1].active())
|
|
++index10;
|
|
int num6 = index10 - 1;
|
|
int index11 = index3;
|
|
int index12 = index3;
|
|
while (!Main.tile[index2, index11].active() && !Main.tile[index2 - 1, index11].active() && !Main.tile[index2 + 1, index11].active())
|
|
--index11;
|
|
int num7 = index11 + 1;
|
|
while (!Main.tile[index2, index12].active() && !Main.tile[index2 - 1, index12].active() && !Main.tile[index2 + 1, index12].active())
|
|
++index12;
|
|
int num8 = index12 - 1;
|
|
int index13 = (num5 + num6) / 2;
|
|
int index14 = (num7 + num8) / 2;
|
|
int num9 = num6 - num5;
|
|
int num10 = num8 - num7;
|
|
if (num9 > 7 && num10 > 5)
|
|
{
|
|
bool[] flagArray = new bool[3]
|
|
{
|
|
true,
|
|
false,
|
|
false
|
|
};
|
|
if (num9 > num10 * 3 && num9 > 21)
|
|
flagArray[1] = true;
|
|
if (num10 > num9 * 3 && num10 > 21)
|
|
flagArray[2] = true;
|
|
int index15 = WorldGen.genRand.Next(3);
|
|
if ((int) Main.tile[index13, index14].wall == roomWall[0])
|
|
index15 = 0;
|
|
while (!flagArray[index15])
|
|
index15 = WorldGen.genRand.Next(3);
|
|
if (WorldGen.nearPicture2(index13, index14))
|
|
index15 = -1;
|
|
switch (index15)
|
|
{
|
|
case 0:
|
|
Vector2 vector2_1 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index13, index14].wall != roomWall[0])
|
|
vector2_1 = WorldGen.randBoneTile();
|
|
int x1 = (int) vector2_1.X;
|
|
int y1 = (int) vector2_1.Y;
|
|
if (!WorldGen.nearPicture(index13, index14))
|
|
{
|
|
WorldGen.PlaceTile(index13, index14, x1, true, style: y1);
|
|
continue;
|
|
}
|
|
continue;
|
|
case 1:
|
|
Vector2 vector2_2 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index13, index14].wall != roomWall[0])
|
|
vector2_2 = WorldGen.randBoneTile();
|
|
int x2 = (int) vector2_2.X;
|
|
int y2 = (int) vector2_2.Y;
|
|
if (!Main.tile[index13, index14].active())
|
|
WorldGen.PlaceTile(index13, index14, x2, true, style: y2);
|
|
int num11 = index13;
|
|
int num12 = index14;
|
|
int index16 = index14;
|
|
for (int index17 = 0; index17 < 2; ++index17)
|
|
{
|
|
index13 += 7;
|
|
int index18 = index16;
|
|
int index19 = index16;
|
|
while (!Main.tile[index13, index18].active() && !Main.tile[index13 - 1, index18].active() && !Main.tile[index13 + 1, index18].active())
|
|
--index18;
|
|
int num13 = index18 + 1;
|
|
while (!Main.tile[index13, index19].active() && !Main.tile[index13 - 1, index19].active() && !Main.tile[index13 + 1, index19].active())
|
|
++index19;
|
|
int num14 = index19 - 1;
|
|
index16 = (num13 + num14) / 2;
|
|
Vector2 vector2_3 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index13, index16].wall != roomWall[0])
|
|
vector2_3 = WorldGen.randBoneTile();
|
|
int x3 = (int) vector2_3.X;
|
|
int y3 = (int) vector2_3.Y;
|
|
if (Math.Abs(num12 - index16) < 4 && !WorldGen.nearPicture(index13, index16))
|
|
WorldGen.PlaceTile(index13, index16, x3, true, style: y3);
|
|
else
|
|
break;
|
|
}
|
|
int index20 = index14;
|
|
int index21 = num11;
|
|
for (int index22 = 0; index22 < 2; ++index22)
|
|
{
|
|
index21 -= 7;
|
|
int index23 = index20;
|
|
int index24 = index20;
|
|
while (!Main.tile[index21, index23].active() && !Main.tile[index21 - 1, index23].active() && !Main.tile[index21 + 1, index23].active())
|
|
--index23;
|
|
int num15 = index23 + 1;
|
|
while (!Main.tile[index21, index24].active() && !Main.tile[index21 - 1, index24].active() && !Main.tile[index21 + 1, index24].active())
|
|
++index24;
|
|
int num16 = index24 - 1;
|
|
index20 = (num15 + num16) / 2;
|
|
Vector2 vector2_4 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index21, index20].wall != roomWall[0])
|
|
vector2_4 = WorldGen.randBoneTile();
|
|
int x4 = (int) vector2_4.X;
|
|
int y4 = (int) vector2_4.Y;
|
|
if (Math.Abs(num12 - index20) < 4 && !WorldGen.nearPicture(index21, index20))
|
|
WorldGen.PlaceTile(index21, index20, x4, true, style: y4);
|
|
else
|
|
break;
|
|
}
|
|
continue;
|
|
case 2:
|
|
Vector2 vector2_5 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index13, index14].wall != roomWall[0])
|
|
vector2_5 = WorldGen.randBoneTile();
|
|
int x5 = (int) vector2_5.X;
|
|
int y5 = (int) vector2_5.Y;
|
|
if (!Main.tile[index13, index14].active())
|
|
WorldGen.PlaceTile(index13, index14, x5, true, style: y5);
|
|
int num17 = index14;
|
|
int num18 = index13;
|
|
int index25 = index13;
|
|
for (int index26 = 0; index26 < 3; ++index26)
|
|
{
|
|
index14 += 7;
|
|
int index27 = index25;
|
|
int index28 = index25;
|
|
while (!Main.tile[index27, index14].active() && !Main.tile[index27, index14 - 1].active() && !Main.tile[index27, index14 + 1].active())
|
|
--index27;
|
|
int num19 = index27 + 1;
|
|
while (!Main.tile[index28, index14].active() && !Main.tile[index28, index14 - 1].active() && !Main.tile[index28, index14 + 1].active())
|
|
++index28;
|
|
int num20 = index28 - 1;
|
|
index25 = (num19 + num20) / 2;
|
|
Vector2 vector2_6 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index25, index14].wall != roomWall[0])
|
|
vector2_6 = WorldGen.randBoneTile();
|
|
int x6 = (int) vector2_6.X;
|
|
int y6 = (int) vector2_6.Y;
|
|
if (Math.Abs(num18 - index25) < 4 && !WorldGen.nearPicture(index25, index14))
|
|
WorldGen.PlaceTile(index25, index14, x6, true, style: y6);
|
|
else
|
|
break;
|
|
}
|
|
int index29 = index13;
|
|
int index30 = num17;
|
|
for (int index31 = 0; index31 < 3; ++index31)
|
|
{
|
|
index30 -= 7;
|
|
int index32 = index29;
|
|
int index33 = index29;
|
|
while (!Main.tile[index32, index30].active() && !Main.tile[index32, index30 - 1].active() && !Main.tile[index32, index30 + 1].active())
|
|
--index32;
|
|
int num21 = index32 + 1;
|
|
while (!Main.tile[index33, index30].active() && !Main.tile[index33, index30 - 1].active() && !Main.tile[index33, index30 + 1].active())
|
|
++index33;
|
|
int num22 = index33 - 1;
|
|
index29 = (num21 + num22) / 2;
|
|
Vector2 vector2_7 = WorldGen.randPictureTile();
|
|
if ((int) Main.tile[index29, index30].wall != roomWall[0])
|
|
vector2_7 = WorldGen.randBoneTile();
|
|
int x7 = (int) vector2_7.X;
|
|
int y7 = (int) vector2_7.Y;
|
|
if (Math.Abs(num18 - index29) < 4 && !WorldGen.nearPicture(index29, index30))
|
|
WorldGen.PlaceTile(index29, index30, x7, true, style: y7);
|
|
else
|
|
break;
|
|
}
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
private static float MakeDungeon_GroundFurniture(int wallType)
|
|
{
|
|
float num1 = (float) (2000.0 * (double) Main.maxTilesX / 4200.0);
|
|
int num2 = 1 + Main.maxTilesX / 4200;
|
|
int num3 = 1 + Main.maxTilesX / 4200;
|
|
for (int index1 = 0; (double) index1 < (double) num1; ++index1)
|
|
{
|
|
if (num2 > 0 || num3 > 0)
|
|
--index1;
|
|
int i1 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
int j;
|
|
for (j = WorldGen.genRand.Next((int) Main.worldSurface + 10, WorldGen.dMaxY); !Main.wallDungeon[(int) Main.tile[i1, j].wall] || Main.tile[i1, j].active(); j = WorldGen.genRand.Next((int) Main.worldSurface + 10, WorldGen.dMaxY))
|
|
i1 = WorldGen.genRand.Next(WorldGen.dMinX, WorldGen.dMaxX);
|
|
if (Main.wallDungeon[(int) Main.tile[i1, j].wall] && !Main.tile[i1, j].active())
|
|
{
|
|
while (!WorldGen.SolidTile(i1, j) && j < Main.UnderworldLayer)
|
|
++j;
|
|
int index2 = j - 1;
|
|
int i2 = i1;
|
|
int i3 = i1;
|
|
while (!Main.tile[i2, index2].active() && WorldGen.SolidTile(i2, index2 + 1))
|
|
--i2;
|
|
int num4 = i2 + 1;
|
|
while (!Main.tile[i3, index2].active() && WorldGen.SolidTile(i3, index2 + 1))
|
|
++i3;
|
|
int num5 = i3 - 1;
|
|
int num6 = num5 - num4;
|
|
int index3 = (num5 + num4) / 2;
|
|
if (!Main.tile[index3, index2].active() && Main.wallDungeon[(int) Main.tile[index3, index2].wall] && WorldGen.SolidTile(index3, index2 + 1) && Main.tile[index3, index2 + 1].type != (ushort) 48)
|
|
{
|
|
int style1 = 13;
|
|
int style2 = 10;
|
|
int style3 = 11;
|
|
int style4 = 1;
|
|
int style5 = 46;
|
|
int style6 = 1;
|
|
int style7 = 5;
|
|
int style8 = 11;
|
|
int style9 = 5;
|
|
int style10 = 6;
|
|
int style11 = 21;
|
|
int style12 = 22;
|
|
int style13 = 24;
|
|
int style14 = 30;
|
|
switch (wallType)
|
|
{
|
|
case 8:
|
|
style1 = 14;
|
|
style2 = 11;
|
|
style3 = 12;
|
|
style4 = 2;
|
|
style5 = 47;
|
|
style6 = 2;
|
|
style7 = 6;
|
|
style8 = 12;
|
|
style9 = 6;
|
|
style10 = 7;
|
|
style11 = 22;
|
|
style12 = 23;
|
|
style13 = 25;
|
|
style14 = 31;
|
|
break;
|
|
case 9:
|
|
style1 = 15;
|
|
style2 = 12;
|
|
style3 = 13;
|
|
style4 = 3;
|
|
style5 = 48;
|
|
style6 = 3;
|
|
style7 = 7;
|
|
style8 = 13;
|
|
style9 = 7;
|
|
style10 = 8;
|
|
style11 = 23;
|
|
style12 = 24;
|
|
style13 = 26;
|
|
style14 = 32;
|
|
break;
|
|
}
|
|
if (Main.tile[index3, index2].wall >= (ushort) 94 && Main.tile[index3, index2].wall <= (ushort) 105)
|
|
{
|
|
style1 = 17;
|
|
style2 = 14;
|
|
style3 = 15;
|
|
style4 = -1;
|
|
style5 = -1;
|
|
style6 = 5;
|
|
style7 = -1;
|
|
style8 = -1;
|
|
style9 = -1;
|
|
style10 = -1;
|
|
style11 = -1;
|
|
style12 = -1;
|
|
style13 = -1;
|
|
style14 = -1;
|
|
}
|
|
int num7 = WorldGen.genRand.Next(13);
|
|
if ((num7 == 10 || num7 == 11 || num7 == 12) && WorldGen.genRand.Next(4) != 0)
|
|
num7 = WorldGen.genRand.Next(13);
|
|
while (num7 == 2 && style5 == -1 || num7 == 5 && style7 == -1 || num7 == 6 && style8 == -1 || num7 == 7 && style9 == -1 || num7 == 8 && style10 == -1 || num7 == 9 && style11 == -1 || num7 == 10 && style12 == -1 || num7 == 11 && style13 == -1 || num7 == 12 && style14 == -1)
|
|
num7 = WorldGen.genRand.Next(13);
|
|
int num8 = 0;
|
|
int num9 = 0;
|
|
if (num7 == 0)
|
|
{
|
|
num8 = 5;
|
|
num9 = 4;
|
|
}
|
|
if (num7 == 1)
|
|
{
|
|
num8 = 4;
|
|
num9 = 3;
|
|
}
|
|
if (num7 == 2)
|
|
{
|
|
num8 = 3;
|
|
num9 = 5;
|
|
}
|
|
if (num7 == 3)
|
|
{
|
|
num8 = 4;
|
|
num9 = 6;
|
|
}
|
|
if (num7 == 4)
|
|
{
|
|
num8 = 3;
|
|
num9 = 3;
|
|
}
|
|
if (num7 == 5)
|
|
{
|
|
num8 = 5;
|
|
num9 = 3;
|
|
}
|
|
if (num7 == 6)
|
|
{
|
|
num8 = 5;
|
|
num9 = 4;
|
|
}
|
|
if (num7 == 7)
|
|
{
|
|
num8 = 5;
|
|
num9 = 4;
|
|
}
|
|
if (num7 == 8)
|
|
{
|
|
num8 = 5;
|
|
num9 = 4;
|
|
}
|
|
if (num7 == 9)
|
|
{
|
|
num8 = 5;
|
|
num9 = 3;
|
|
}
|
|
if (num7 == 10)
|
|
{
|
|
num8 = 2;
|
|
num9 = 4;
|
|
}
|
|
if (num7 == 11)
|
|
{
|
|
num8 = 3;
|
|
num9 = 3;
|
|
}
|
|
if (num7 == 12)
|
|
{
|
|
num8 = 2;
|
|
num9 = 5;
|
|
}
|
|
for (int index4 = index3 - num8; index4 <= index3 + num8; ++index4)
|
|
{
|
|
for (int index5 = index2 - num9; index5 <= index2; ++index5)
|
|
{
|
|
if (Main.tile[index4, index5].active())
|
|
{
|
|
num7 = -1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ((double) num6 < (double) num8 * 1.75)
|
|
num7 = -1;
|
|
if (num2 > 0 || num3 > 0)
|
|
{
|
|
if (num2 > 0)
|
|
{
|
|
WorldGen.PlaceTile(index3, index2, 355, true);
|
|
if (Main.tile[index3, index2].type == (ushort) 355)
|
|
--num2;
|
|
}
|
|
else if (num3 > 0)
|
|
{
|
|
WorldGen.PlaceTile(index3, index2, 354, true);
|
|
if (Main.tile[index3, index2].type == (ushort) 354)
|
|
--num3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
WorldGen.PlaceTile(index3, index2, 14, true, style: style2);
|
|
if (Main.tile[index3, index2].active())
|
|
{
|
|
if (!Main.tile[index3 - 2, index2].active())
|
|
{
|
|
WorldGen.PlaceTile(index3 - 2, index2, 15, true, style: style1);
|
|
if (Main.tile[index3 - 2, index2].active())
|
|
{
|
|
Main.tile[index3 - 2, index2].frameX += (short) 18;
|
|
Main.tile[index3 - 2, index2 - 1].frameX += (short) 18;
|
|
}
|
|
}
|
|
if (!Main.tile[index3 + 2, index2].active())
|
|
WorldGen.PlaceTile(index3 + 2, index2, 15, true, style: style1);
|
|
}
|
|
for (int i4 = index3 - 1; i4 <= index3 + 1; ++i4)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0 && !Main.tile[i4, index2 - 2].active())
|
|
{
|
|
int num10 = WorldGen.genRand.Next(5);
|
|
if (style4 != -1 && num10 <= 1 && !Main.tileLighted[(int) Main.tile[i4 - 1, index2 - 2].type])
|
|
WorldGen.PlaceTile(i4, index2 - 2, 33, true, style: style4);
|
|
if (num10 == 2 && !Main.tileLighted[(int) Main.tile[i4 - 1, index2 - 2].type])
|
|
WorldGen.PlaceTile(i4, index2 - 2, 49, true);
|
|
if (num10 == 3)
|
|
WorldGen.PlaceTile(i4, index2 - 2, 50, true);
|
|
if (num10 == 4)
|
|
WorldGen.PlaceTile(i4, index2 - 2, 103, true);
|
|
}
|
|
}
|
|
continue;
|
|
case 1:
|
|
WorldGen.PlaceTile(index3, index2, 18, true, style: style3);
|
|
if (Main.tile[index3, index2].active())
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
if (!Main.tile[index3 - 1, index2].active())
|
|
{
|
|
WorldGen.PlaceTile(index3 - 1, index2, 15, true, style: style1);
|
|
if (Main.tile[index3 - 1, index2].active())
|
|
{
|
|
Main.tile[index3 - 1, index2].frameX += (short) 18;
|
|
Main.tile[index3 - 1, index2 - 1].frameX += (short) 18;
|
|
}
|
|
}
|
|
}
|
|
else if (!Main.tile[index3 + 2, index2].active())
|
|
WorldGen.PlaceTile(index3 + 2, index2, 15, true, style: style1);
|
|
for (int i5 = index3; i5 <= index3 + 1; ++i5)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0 && !Main.tile[i5, index2 - 1].active())
|
|
{
|
|
int num11 = WorldGen.genRand.Next(5);
|
|
if (style4 != -1 && num11 <= 1 && !Main.tileLighted[(int) Main.tile[i5 - 1, index2 - 1].type])
|
|
WorldGen.PlaceTile(i5, index2 - 1, 33, true, style: style4);
|
|
if (num11 == 2 && !Main.tileLighted[(int) Main.tile[i5 - 1, index2 - 1].type])
|
|
WorldGen.PlaceTile(i5, index2 - 1, 49, true);
|
|
if (num11 == 3)
|
|
WorldGen.PlaceTile(i5, index2 - 1, 50, true);
|
|
if (num11 == 4)
|
|
WorldGen.PlaceTile(i5, index2 - 1, 103, true);
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 2:
|
|
WorldGen.PlaceTile(index3, index2, 105, true, style: style5);
|
|
continue;
|
|
case 3:
|
|
WorldGen.PlaceTile(index3, index2, 101, true, style: style6);
|
|
continue;
|
|
case 4:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceTile(index3, index2, 15, true, style: style1);
|
|
Main.tile[index3, index2].frameX += (short) 18;
|
|
Main.tile[index3, index2 - 1].frameX += (short) 18;
|
|
continue;
|
|
}
|
|
WorldGen.PlaceTile(index3, index2, 15, true, style: style1);
|
|
continue;
|
|
case 5:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.Place4x2(index3, index2, (ushort) 79, 1, style7);
|
|
continue;
|
|
}
|
|
WorldGen.Place4x2(index3, index2, (ushort) 79, style: style7);
|
|
continue;
|
|
case 6:
|
|
WorldGen.PlaceTile(index3, index2, 87, true, style: style8);
|
|
continue;
|
|
case 7:
|
|
WorldGen.PlaceTile(index3, index2, 88, true, style: style9);
|
|
continue;
|
|
case 8:
|
|
WorldGen.PlaceTile(index3, index2, 89, true, style: style10);
|
|
continue;
|
|
case 9:
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.Place4x2(index3, index2, (ushort) 90, 1, style11);
|
|
continue;
|
|
}
|
|
WorldGen.Place4x2(index3, index2, (ushort) 90, style: style11);
|
|
continue;
|
|
case 10:
|
|
WorldGen.PlaceTile(index3, index2, 93, true, style: style13);
|
|
continue;
|
|
case 11:
|
|
WorldGen.PlaceTile(index3, index2, 100, true, style: style12);
|
|
continue;
|
|
case 12:
|
|
WorldGen.PlaceTile(index3, index2, 104, true, style: style14);
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return num1;
|
|
}
|
|
|
|
public static Vector2 randBoneTile()
|
|
{
|
|
int num1 = WorldGen.genRand.Next(2);
|
|
int num2 = 0;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
num1 = 240;
|
|
num2 = WorldGen.genRand.Next(2);
|
|
switch (num2)
|
|
{
|
|
case 0:
|
|
num2 = 16;
|
|
break;
|
|
case 1:
|
|
num2 = 17;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
num1 = 241;
|
|
num2 = WorldGen.genRand.Next(9);
|
|
break;
|
|
}
|
|
return new Vector2((float) num1, (float) num2);
|
|
}
|
|
|
|
public static Vector2 randHellPicture()
|
|
{
|
|
int num1 = WorldGen.genRand.Next(4);
|
|
if (num1 == 1)
|
|
num1 = WorldGen.genRand.Next(4);
|
|
int num2;
|
|
int num3;
|
|
if (num1 == 0)
|
|
{
|
|
num2 = 240;
|
|
num3 = WorldGen.genRand.Next(5);
|
|
switch (num3)
|
|
{
|
|
case 0:
|
|
num3 = 27;
|
|
break;
|
|
case 1:
|
|
num3 = 29;
|
|
break;
|
|
case 2:
|
|
num3 = 30;
|
|
break;
|
|
case 3:
|
|
num3 = 31;
|
|
break;
|
|
case 4:
|
|
num3 = 32;
|
|
break;
|
|
}
|
|
}
|
|
else if (num1 == 1)
|
|
{
|
|
num2 = 242;
|
|
num3 = 14;
|
|
}
|
|
else if (num1 == 2)
|
|
{
|
|
num2 = 245;
|
|
num3 = WorldGen.genRand.Next(3);
|
|
switch (num3)
|
|
{
|
|
case 0:
|
|
num3 = 1;
|
|
break;
|
|
case 1:
|
|
num3 = 2;
|
|
break;
|
|
case 2:
|
|
num3 = 4;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num2 = 246;
|
|
num3 = WorldGen.genRand.Next(3);
|
|
switch (num3)
|
|
{
|
|
case 0:
|
|
num3 = 0;
|
|
break;
|
|
case 1:
|
|
num3 = 16;
|
|
break;
|
|
case 2:
|
|
num3 = 17;
|
|
break;
|
|
}
|
|
}
|
|
return new Vector2((float) num2, (float) num3);
|
|
}
|
|
|
|
public static Vector2 RandHousePictureDesert()
|
|
{
|
|
int num1 = WorldGen.genRand.Next(4);
|
|
int num2;
|
|
int num3;
|
|
if (num1 <= 1)
|
|
{
|
|
num2 = 240;
|
|
num3 = 63 + WorldGen.genRand.Next(6);
|
|
}
|
|
else if (num1 == 2)
|
|
{
|
|
num2 = 245;
|
|
num3 = 7 + WorldGen.genRand.Next(2);
|
|
}
|
|
else
|
|
{
|
|
num2 = 242;
|
|
num3 = 37 + WorldGen.genRand.Next(6);
|
|
}
|
|
return new Vector2((float) num2, (float) num3);
|
|
}
|
|
|
|
public static Vector2 randHousePicture()
|
|
{
|
|
int num1 = WorldGen.genRand.Next(4);
|
|
if (num1 >= 3 && WorldGen.genRand.Next(10) != 0)
|
|
num1 = WorldGen.genRand.Next(3);
|
|
int num2;
|
|
int num3;
|
|
if (num1 <= 1)
|
|
{
|
|
num2 = 240;
|
|
int maxValue = 10;
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 9)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 5)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 6)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 0)
|
|
num3 = 26;
|
|
else if (num3 == 1)
|
|
num3 = 28;
|
|
else if (num3 == 2)
|
|
num3 = 20;
|
|
else if (num3 == 3)
|
|
num3 = 21;
|
|
else if (num3 == 4)
|
|
num3 = 22;
|
|
else if (num3 == 5)
|
|
num3 = 24;
|
|
else if (num3 == 6)
|
|
num3 = 25;
|
|
else if (num3 == 7)
|
|
num3 = 33;
|
|
else if (num3 == 8)
|
|
num3 = 34;
|
|
else if (num3 == 9)
|
|
num3 = 35;
|
|
}
|
|
else if (num1 == 2)
|
|
{
|
|
int maxValue = 4;
|
|
num2 = 245;
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 2)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 0)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 0)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 0)
|
|
num3 = WorldGen.genRand.Next(maxValue);
|
|
if (num3 == 0)
|
|
num3 = 0;
|
|
else if (num3 == 1)
|
|
num3 = 3;
|
|
else if (num3 == 2)
|
|
num3 = 5;
|
|
else if (num3 == 3)
|
|
num3 = 6;
|
|
}
|
|
else
|
|
{
|
|
num2 = 246;
|
|
num3 = 1;
|
|
}
|
|
return new Vector2((float) num2, (float) num3);
|
|
}
|
|
|
|
public static Vector2 randPictureTile()
|
|
{
|
|
int num1 = WorldGen.genRand.Next(3);
|
|
int num2 = 0;
|
|
if (num1 <= 1)
|
|
{
|
|
int maxValue = 7;
|
|
num1 = 240;
|
|
num2 = WorldGen.genRand.Next(maxValue);
|
|
if (num2 == 6)
|
|
num2 = WorldGen.genRand.Next(maxValue);
|
|
if (num2 == 0)
|
|
num2 = 12;
|
|
else if (num2 == 1)
|
|
num2 = 13;
|
|
else if (num2 == 2)
|
|
num2 = 14;
|
|
else if (num2 == 3)
|
|
num2 = 15;
|
|
else if (num2 == 4)
|
|
num2 = 18;
|
|
else if (num2 == 5)
|
|
num2 = 19;
|
|
else if (num2 == 6)
|
|
num2 = 23;
|
|
}
|
|
else if (num1 == 2)
|
|
{
|
|
num1 = 242;
|
|
num2 = WorldGen.genRand.Next(17);
|
|
if (num2 > 13)
|
|
{
|
|
switch (num2)
|
|
{
|
|
case 14:
|
|
num2 = 15;
|
|
break;
|
|
case 15:
|
|
num2 = 16;
|
|
break;
|
|
case 16:
|
|
num2 = 30;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return new Vector2((float) num1, (float) num2);
|
|
}
|
|
|
|
public static void DungeonStairs(int i, int j, ushort tileType, int wallType)
|
|
{
|
|
Vector2 zero = Vector2.Zero;
|
|
double num1 = (double) WorldGen.genRand.Next(5, 9);
|
|
int num2 = 1;
|
|
Vector2 vector2;
|
|
vector2.X = (float) i;
|
|
vector2.Y = (float) j;
|
|
int num3 = WorldGen.genRand.Next(10, 30);
|
|
int num4 = i <= WorldGen.dEnteranceX ? 1 : -1;
|
|
if (i > Main.maxTilesX - 400)
|
|
num4 = -1;
|
|
else if (i < 400)
|
|
num4 = 1;
|
|
zero.Y = -1f;
|
|
zero.X = (float) num4;
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
zero.X *= (float) (1.0 + (double) WorldGen.genRand.Next(0, 200) * 0.00999999977648258);
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
zero.X *= (float) WorldGen.genRand.Next(50, 76) * 0.01f;
|
|
else if (WorldGen.genRand.Next(6) == 0)
|
|
zero.Y *= 2f;
|
|
if (WorldGen.dungeonX < Main.maxTilesX / 2 && (double) zero.X < 0.0 && (double) zero.X < 0.5)
|
|
zero.X = -0.5f;
|
|
if (WorldGen.dungeonX > Main.maxTilesX / 2 && (double) zero.X > 0.0 && (double) zero.X > 0.5)
|
|
zero.X = -0.5f;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
num2 = num4 * -1;
|
|
zero.X *= -1f;
|
|
}
|
|
while (num3 > 0)
|
|
{
|
|
--num3;
|
|
int num5 = (int) ((double) vector2.X - num1 - 4.0 - (double) WorldGen.genRand.Next(6));
|
|
int num6 = (int) ((double) vector2.X + num1 + 4.0 + (double) WorldGen.genRand.Next(6));
|
|
int num7 = (int) ((double) vector2.Y - num1 - 4.0);
|
|
int num8 = (int) ((double) vector2.Y + num1 + 4.0 + (double) WorldGen.genRand.Next(6));
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesX)
|
|
num6 = Main.maxTilesX;
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesY)
|
|
num8 = Main.maxTilesY;
|
|
int num9 = 1;
|
|
if ((double) vector2.X > (double) (Main.maxTilesX / 2))
|
|
num9 = -1;
|
|
int i1 = (int) ((double) vector2.X + WorldGen.dxStrength1 * 0.600000023841858 * (double) num9 + WorldGen.dxStrength2 * (double) num9);
|
|
int num10 = (int) (WorldGen.dyStrength2 * 0.5);
|
|
if ((double) vector2.Y < Main.worldSurface - 5.0 && Main.tile[i1, (int) ((double) vector2.Y - num1 - 6.0 + (double) num10)].wall == (ushort) 0 && Main.tile[i1, (int) ((double) vector2.Y - num1 - 7.0 + (double) num10)].wall == (ushort) 0 && Main.tile[i1, (int) ((double) vector2.Y - num1 - 8.0 + (double) num10)].wall == (ushort) 0)
|
|
{
|
|
WorldGen.dSurface = true;
|
|
WorldGen.TileRunner(i1, (int) ((double) vector2.Y - num1 - 6.0 + (double) num10), (double) WorldGen.genRand.Next(25, 35), WorldGen.genRand.Next(10, 20), -1, speedY: -1f);
|
|
}
|
|
for (int index1 = num5; index1 < num6; ++index1)
|
|
{
|
|
for (int index2 = num7; index2 < num8; ++index2)
|
|
{
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index1, index2].wall])
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 0;
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = tileType;
|
|
}
|
|
}
|
|
}
|
|
for (int index3 = num5 + 1; index3 < num6 - 1; ++index3)
|
|
{
|
|
for (int index4 = num7 + 1; index4 < num8 - 1; ++index4)
|
|
Main.tile[index3, index4].wall = (ushort) wallType;
|
|
}
|
|
int num11 = 0;
|
|
if (WorldGen.genRand.Next((int) num1) == 0)
|
|
num11 = WorldGen.genRand.Next(1, 3);
|
|
int num12 = (int) ((double) vector2.X - num1 * 0.5 - (double) num11);
|
|
int num13 = (int) ((double) vector2.X + num1 * 0.5 + (double) num11);
|
|
int num14 = (int) ((double) vector2.Y - num1 * 0.5 - (double) num11);
|
|
int num15 = (int) ((double) vector2.Y + num1 * 0.5 + (double) num11);
|
|
if (num12 < 0)
|
|
num12 = 0;
|
|
if (num13 > Main.maxTilesX)
|
|
num13 = Main.maxTilesX;
|
|
if (num14 < 0)
|
|
num14 = 0;
|
|
if (num15 > Main.maxTilesY)
|
|
num15 = Main.maxTilesY;
|
|
for (int i2 = num12; i2 < num13; ++i2)
|
|
{
|
|
for (int j1 = num14; j1 < num15; ++j1)
|
|
{
|
|
Main.tile[i2, j1].active(false);
|
|
WorldGen.PlaceWall(i2, j1, wallType, true);
|
|
}
|
|
}
|
|
if (WorldGen.dSurface)
|
|
num3 = 0;
|
|
vector2 += zero;
|
|
if ((double) vector2.Y < Main.worldSurface)
|
|
zero.Y *= 0.98f;
|
|
}
|
|
WorldGen.dungeonX = (int) vector2.X;
|
|
WorldGen.dungeonY = (int) vector2.Y;
|
|
}
|
|
|
|
public static bool PlaceSandTrap(int i, int j)
|
|
{
|
|
int num1 = 6;
|
|
int num2 = 4;
|
|
int num3 = 25;
|
|
int i1 = i;
|
|
int index1 = j;
|
|
while (!Main.tile[i1, index1].active() && index1 < Main.UnderworldLayer)
|
|
++index1;
|
|
if (!Main.tileSolid[(int) Main.tile[i1, index1].type] || Main.tile[i1, index1].halfBrick() || Main.tile[i1, index1].topSlope() || Main.tile[i1, index1].type != (ushort) 53 && Main.tile[i1, index1].type != (ushort) 397 && Main.tile[i1, index1].type != (ushort) 396 || Main.tile[i1, index1].wall != (ushort) 216 && Main.tile[i1, index1].wall != (ushort) 187)
|
|
return false;
|
|
int j1 = index1 - 1;
|
|
int num4 = -1;
|
|
int num5 = WorldGen.genRand.Next(6, 12);
|
|
int num6 = WorldGen.genRand.Next(6, 14);
|
|
for (int index2 = i1 - num3; index2 <= i1 + num3; ++index2)
|
|
{
|
|
for (int index3 = j1 - num3; index3 < j1 + num3; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3].wire() || TileID.Sets.BasicChest[(int) Main.tile[index2, index3].type] || TileID.Sets.Paintings[(int) Main.tile[index2, index3].type] || Main.tile[index2, index3].type == (ushort) 10 || Main.tile[index2, index3].type == (ushort) 19 || Main.tile[index2, index3].type == (ushort) 15 || Main.tile[index2, index3].type == (ushort) 219)
|
|
return false;
|
|
}
|
|
}
|
|
for (int index4 = i1 - 2; index4 <= i1 + 2; ++index4)
|
|
{
|
|
for (int index5 = j1 + 1; index5 <= j1 + 3; ++index5)
|
|
{
|
|
if (!Main.tile[index4, index5].active() || !Main.tileSolid[(int) Main.tile[index4, index5].type])
|
|
return false;
|
|
}
|
|
}
|
|
for (int index6 = j1; index6 > j1 - 30; --index6)
|
|
{
|
|
if (Main.tile[i1, index6].active())
|
|
{
|
|
if (Main.tile[i1, index6].type != (ushort) 396)
|
|
return false;
|
|
num4 = index6;
|
|
break;
|
|
}
|
|
}
|
|
if (num4 <= -1 || j1 - num4 < num6 + num2)
|
|
return false;
|
|
int num7 = 0;
|
|
int index7 = (j1 + num4) / 2;
|
|
for (int index8 = i1 - num5; index8 <= i1 + num5; ++index8)
|
|
{
|
|
if (Main.tile[index8, index7].active() && Main.tileSolid[(int) Main.tile[index8, index7].type])
|
|
return false;
|
|
for (int index9 = num4 - num6; index9 <= num4; ++index9)
|
|
{
|
|
if (Main.tile[index8, index9].active())
|
|
{
|
|
if (TileID.Sets.Ore[(int) Main.tile[index8, index9].type] || Main.tile[index8, index9].type == (ushort) 404)
|
|
return false;
|
|
if (Main.tileSolid[(int) Main.tile[index8, index9].type])
|
|
++num7;
|
|
}
|
|
}
|
|
}
|
|
float num8 = (float) ((num5 * 2 + 1) * (num6 + 1)) * 0.75f;
|
|
if ((double) num7 < (double) num8)
|
|
return false;
|
|
for (int index10 = i1 - num5 - 1; index10 <= i1 + num5 + 1; ++index10)
|
|
{
|
|
for (int index11 = num4 - num6; index11 <= num4; ++index11)
|
|
{
|
|
bool flag = false;
|
|
if (Main.tile[index10, index11].active() && Main.tileSolid[(int) Main.tile[index10, index11].type])
|
|
flag = true;
|
|
if (index11 == num4)
|
|
{
|
|
Main.tile[index10, index11].slope((byte) 0);
|
|
Main.tile[index10, index11].halfBrick(false);
|
|
if (!flag)
|
|
{
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].type = (ushort) 396;
|
|
}
|
|
}
|
|
else if (index11 == num4 - num6)
|
|
{
|
|
Main.tile[index10, index11].ClearTile();
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].type = !flag || !Main.tile[index10, index11 - 1].active() || !Main.tileSolid[(int) Main.tile[index10, index11 - 1].type] ? (ushort) 396 : (ushort) 397;
|
|
}
|
|
else if (index10 == i1 - num5 - 1 || index10 == i1 + num5 + 1)
|
|
{
|
|
if (!flag)
|
|
{
|
|
Main.tile[index10, index11].ClearTile();
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].type = (ushort) 396;
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index10, index11].slope((byte) 0);
|
|
Main.tile[index10, index11].halfBrick(false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index10, index11].ClearTile();
|
|
Main.tile[index10, index11].active(true);
|
|
Main.tile[index10, index11].type = (ushort) 53;
|
|
}
|
|
}
|
|
}
|
|
for (int index12 = (int) ((double) num4 - (double) num6 * 0.666000008583069); (double) index12 <= (double) num4 - (double) num6 * 0.333; ++index12)
|
|
{
|
|
if ((double) index12 < (double) num4 - (double) num6 * 0.400000005960464)
|
|
{
|
|
if (Main.tile[i1 - num5 - 2, index12].bottomSlope())
|
|
Main.tile[i1 - num5 - 2, index12].slope((byte) 0);
|
|
}
|
|
else if ((double) index12 > (double) num4 - (double) num6 * 0.600000023841858)
|
|
{
|
|
if (Main.tile[i1 - num5 - 2, index12].topSlope())
|
|
Main.tile[i1 - num5 - 2, index12].slope((byte) 0);
|
|
Main.tile[i1 - num5 - 2, index12].halfBrick(false);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[i1 - num5 - 2, index12].halfBrick(false);
|
|
Main.tile[i1 - num5 - 2, index12].slope((byte) 0);
|
|
}
|
|
if (!Main.tile[i1 - num5 - 2, index12].active() || !Main.tileSolid[(int) Main.tile[i1 - num5 - 2, index12].type])
|
|
{
|
|
Main.tile[i1 - num5 - 2, index12].active(true);
|
|
Main.tile[i1 - num5 - 2, index12].type = (ushort) 396;
|
|
}
|
|
if (!Main.tile[i1 + num5 + 2, index12].active() || !Main.tileSolid[(int) Main.tile[i1 + num5 + 2, index12].type])
|
|
{
|
|
Main.tile[i1 + num5 + 2, index12].active(true);
|
|
Main.tile[i1 + num5 + 2, index12].type = (ushort) 396;
|
|
}
|
|
}
|
|
for (int index13 = num4 - num6; index13 <= num4; ++index13)
|
|
{
|
|
Main.tile[i1 - num5 - 2, index13].slope((byte) 0);
|
|
Main.tile[i1 - num5 - 2, index13].halfBrick(false);
|
|
Main.tile[i1 - num5 - 1, index13].slope((byte) 0);
|
|
Main.tile[i1 - num5 - 1, index13].halfBrick(false);
|
|
Main.tile[i1 - num5 + 1, index13].slope((byte) 0);
|
|
Main.tile[i1 - num5 + 1, index13].halfBrick(false);
|
|
Main.tile[i1 - num5 + 2, index13].slope((byte) 0);
|
|
Main.tile[i1 - num5 + 2, index13].halfBrick(false);
|
|
}
|
|
for (int index14 = i1 - num5 - 1; index14 < i1 + num5 + 1; ++index14)
|
|
{
|
|
int index15 = j1 - num6 - 1;
|
|
if (Main.tile[index14, index15].bottomSlope())
|
|
Main.tile[index14, index15].slope((byte) 0);
|
|
Main.tile[index14, index15].halfBrick(false);
|
|
}
|
|
WorldGen.KillTile(i1 - 2, j1);
|
|
WorldGen.KillTile(i1 - 1, j1);
|
|
WorldGen.KillTile(i1 + 1, j1);
|
|
WorldGen.KillTile(i1 + 2, j1);
|
|
WorldGen.PlaceTile(i1, j1, 135, true, style: 7);
|
|
for (int i2 = i1 - num5; i2 <= i1 + num5; ++i2)
|
|
{
|
|
int num9 = j1;
|
|
if ((double) i2 < (double) i1 - (double) num5 * 0.8 || (double) i2 > (double) i1 + (double) num5 * 0.8)
|
|
num9 = j1 - 3;
|
|
else if ((double) i2 < (double) i1 - (double) num5 * 0.6 || (double) i2 > (double) i1 + (double) num5 * 0.6)
|
|
num9 = j1 - 2;
|
|
else if ((double) i2 < (double) i1 - (double) num5 * 0.4 || (double) i2 > (double) i1 + (double) num5 * 0.4)
|
|
num9 = j1 - 1;
|
|
for (int j2 = num4; j2 <= j1; ++j2)
|
|
{
|
|
if (i2 == i1 && j2 <= j1)
|
|
Main.tile[i1, j2].wire(true);
|
|
if (Main.tile[i2, j2].active() && Main.tileSolid[(int) Main.tile[i2, j2].type])
|
|
{
|
|
if (j2 < num4 + num1 - 4)
|
|
{
|
|
Main.tile[i2, j2].actuator(true);
|
|
Main.tile[i2, j2].wire(true);
|
|
}
|
|
else if (j2 < num9)
|
|
WorldGen.KillTile(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool DungeonPitTrap(int i, int j, ushort tileType, int wallType)
|
|
{
|
|
int num1 = 30;
|
|
int i1 = i;
|
|
int index1 = j;
|
|
int num2 = index1;
|
|
int num3 = WorldGen.genRand.Next(8, 19);
|
|
int num4 = WorldGen.genRand.Next(19, 46);
|
|
int num5 = num3 + WorldGen.genRand.Next(6, 10);
|
|
int num6 = num4 + WorldGen.genRand.Next(6, 10);
|
|
if (!Main.wallDungeon[(int) Main.tile[i1, index1].wall] || Main.tile[i1, index1].active())
|
|
return false;
|
|
for (int j1 = index1; j1 < Main.maxTilesY; ++j1)
|
|
{
|
|
if (j1 > Main.maxTilesY - 300)
|
|
return false;
|
|
if (Main.tile[i1, j1].active() && WorldGen.SolidTile(i1, j1))
|
|
{
|
|
if (Main.tile[i1, j1].type == (ushort) 48)
|
|
return false;
|
|
index1 = j1;
|
|
break;
|
|
}
|
|
}
|
|
if (!Main.wallDungeon[(int) Main.tile[i1 - num3, index1].wall] || !Main.wallDungeon[(int) Main.tile[i1 + num3, index1].wall])
|
|
return false;
|
|
for (int index2 = index1; index2 < index1 + num1; ++index2)
|
|
{
|
|
bool flag = true;
|
|
for (int index3 = i1 - num3; index3 <= i1 + num3; ++index3)
|
|
{
|
|
Tile tile = Main.tile[index3, index2];
|
|
if (tile.active() && Main.tileDungeon[(int) tile.type])
|
|
flag = false;
|
|
}
|
|
if (flag)
|
|
{
|
|
index1 = index2;
|
|
break;
|
|
}
|
|
}
|
|
for (int index4 = i1 - num3; index4 <= i1 + num3; ++index4)
|
|
{
|
|
for (int index5 = index1; index5 <= index1 + num4; ++index5)
|
|
{
|
|
Tile tile = Main.tile[index4, index5];
|
|
if (tile.active() && (Main.tileDungeon[(int) tile.type] || (int) tile.type == (int) WorldGen.crackedType))
|
|
return false;
|
|
}
|
|
}
|
|
bool flag1 = false;
|
|
if (WorldGen.dungeonLake)
|
|
{
|
|
flag1 = true;
|
|
WorldGen.dungeonLake = false;
|
|
}
|
|
else if (WorldGen.genRand.Next(8) == 0)
|
|
flag1 = true;
|
|
for (int index6 = i1 - num3; index6 <= i1 + num3; ++index6)
|
|
{
|
|
for (int index7 = num2; index7 <= index1 + num4; ++index7)
|
|
{
|
|
if (Main.tileDungeon[(int) Main.tile[index6, index7].type])
|
|
{
|
|
Main.tile[index6, index7].type = WorldGen.crackedType;
|
|
Main.tile[index6, index7].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
}
|
|
for (int index8 = i1 - num5; index8 <= i1 + num5; ++index8)
|
|
{
|
|
for (int index9 = num2; index9 <= index1 + num6; ++index9)
|
|
{
|
|
Main.tile[index8, index9].lava(false);
|
|
Main.tile[index8, index9].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index8, index9].wall] && (int) Main.tile[index8, index9].type != (int) WorldGen.crackedType)
|
|
{
|
|
Main.tile[index8, index9].Clear(TileDataType.Slope);
|
|
Main.tile[index8, index9].type = tileType;
|
|
Main.tile[index8, index9].active(true);
|
|
if (index8 > i1 - num5 && index8 < i1 + num5 && index9 < index1 + num6)
|
|
Main.tile[index8, index9].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
}
|
|
for (int index10 = i1 - num3; index10 <= i1 + num3; ++index10)
|
|
{
|
|
for (int index11 = num2; index11 <= index1 + num4; ++index11)
|
|
{
|
|
if ((int) Main.tile[index10, index11].type != (int) WorldGen.crackedType)
|
|
{
|
|
if (flag1)
|
|
Main.tile[index10, index11].liquid = byte.MaxValue;
|
|
if (index10 == i1 - num3 || index10 == i1 + num3 || index11 == index1 + num4)
|
|
Main.tile[index10, index11].type = (ushort) 48;
|
|
else if (index10 == i1 - num3 + 1 && index11 % 2 == 0 || index10 == i1 + num3 - 1 && index11 % 2 == 0 || index11 == index1 + num4 - 1 && index10 % 2 == 0)
|
|
Main.tile[index10, index11].type = (ushort) 48;
|
|
else
|
|
Main.tile[index10, index11].active(false);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void DungeonHalls(int i, int j, ushort tileType, int wallType, bool forceX = false)
|
|
{
|
|
Vector2 zero1 = Vector2.Zero;
|
|
double num1 = (double) WorldGen.genRand.Next(4, 6);
|
|
double num2 = num1;
|
|
Vector2 zero2 = Vector2.Zero;
|
|
Vector2 zero3 = Vector2.Zero;
|
|
Vector2 vector2;
|
|
vector2.X = (float) i;
|
|
vector2.Y = (float) j;
|
|
int num3 = WorldGen.genRand.Next(35, 80);
|
|
bool flag1 = false;
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
flag1 = true;
|
|
if (forceX)
|
|
{
|
|
num3 += 20;
|
|
WorldGen.lastDungeonHall = Vector2.Zero;
|
|
}
|
|
else if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
num1 *= 2.0;
|
|
num3 /= 2;
|
|
}
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
bool flag4 = true;
|
|
while (!flag2)
|
|
{
|
|
bool flag5 = false;
|
|
int num4;
|
|
if (flag4 && !forceX)
|
|
{
|
|
bool flag6 = true;
|
|
bool flag7 = true;
|
|
bool flag8 = true;
|
|
bool flag9 = true;
|
|
int num5 = num3;
|
|
bool flag10 = false;
|
|
for (int index1 = j; index1 > j - num5; --index1)
|
|
{
|
|
int index2 = i;
|
|
if ((int) Main.tile[index2, index1].wall == wallType)
|
|
{
|
|
if (flag10)
|
|
{
|
|
flag6 = false;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
flag10 = true;
|
|
}
|
|
bool flag11 = false;
|
|
for (int index3 = j; index3 < j + num5; ++index3)
|
|
{
|
|
int index4 = i;
|
|
if ((int) Main.tile[index4, index3].wall == wallType)
|
|
{
|
|
if (flag11)
|
|
{
|
|
flag7 = false;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
flag11 = true;
|
|
}
|
|
bool flag12 = false;
|
|
for (int index5 = i; index5 > i - num5; --index5)
|
|
{
|
|
int index6 = j;
|
|
if ((int) Main.tile[index5, index6].wall == wallType)
|
|
{
|
|
if (flag12)
|
|
{
|
|
flag8 = false;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
flag12 = true;
|
|
}
|
|
bool flag13 = false;
|
|
for (int index7 = i; index7 < i + num5; ++index7)
|
|
{
|
|
int index8 = j;
|
|
if ((int) Main.tile[index7, index8].wall == wallType)
|
|
{
|
|
if (flag13)
|
|
{
|
|
flag9 = false;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
flag13 = true;
|
|
}
|
|
if (!flag8 && !flag9 && !flag6 && !flag7)
|
|
{
|
|
num4 = WorldGen.genRand.Next(2) != 0 ? 1 : -1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag5 = true;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.genRand.Next(4);
|
|
int num6;
|
|
do
|
|
{
|
|
num6 = WorldGen.genRand.Next(4);
|
|
}
|
|
while (!(num6 == 0 & flag6) && !(num6 == 1 & flag7) && !(num6 == 2 & flag8) && !(num6 == 3 & flag9));
|
|
switch (num6)
|
|
{
|
|
case 0:
|
|
num4 = -1;
|
|
break;
|
|
case 1:
|
|
num4 = 1;
|
|
break;
|
|
default:
|
|
flag5 = true;
|
|
num4 = num6 != 2 ? 1 : -1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num4 = WorldGen.genRand.Next(2) != 0 ? 1 : -1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag5 = true;
|
|
}
|
|
flag4 = false;
|
|
if (forceX)
|
|
flag5 = true;
|
|
if (flag5)
|
|
{
|
|
zero2.Y = 0.0f;
|
|
zero2.X = (float) num4;
|
|
zero3.Y = 0.0f;
|
|
zero3.X = (float) -num4;
|
|
zero1.Y = 0.0f;
|
|
zero1.X = (float) num4;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
zero1.Y = WorldGen.genRand.Next(2) != 0 ? 0.2f : -0.2f;
|
|
}
|
|
else
|
|
{
|
|
++num1;
|
|
zero1.Y = (float) num4;
|
|
zero1.X = 0.0f;
|
|
zero2.X = 0.0f;
|
|
zero2.Y = (float) num4;
|
|
zero3.X = 0.0f;
|
|
zero3.Y = (float) -num4;
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
flag3 = true;
|
|
zero1.X = WorldGen.genRand.Next(2) != 0 ? (float) -WorldGen.genRand.Next(10, 20) * 0.1f : (float) WorldGen.genRand.Next(10, 20) * 0.1f;
|
|
}
|
|
else if (WorldGen.genRand.Next(2) == 0)
|
|
zero1.X = WorldGen.genRand.Next(2) != 0 ? (float) -WorldGen.genRand.Next(20, 40) * 0.01f : (float) WorldGen.genRand.Next(20, 40) * 0.01f;
|
|
else
|
|
num3 /= 2;
|
|
}
|
|
if (WorldGen.lastDungeonHall != zero3)
|
|
flag2 = true;
|
|
}
|
|
int num7 = 0;
|
|
if (!forceX)
|
|
{
|
|
if ((double) vector2.X > (double) (WorldGen.lastMaxTilesX - 200))
|
|
{
|
|
int num8 = -1;
|
|
zero2.Y = 0.0f;
|
|
zero2.X = (float) num8;
|
|
zero1.Y = 0.0f;
|
|
zero1.X = (float) num8;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
zero1.Y = WorldGen.genRand.Next(2) != 0 ? 0.2f : -0.2f;
|
|
}
|
|
else if ((double) vector2.X < 200.0)
|
|
{
|
|
int num9 = 1;
|
|
zero2.Y = 0.0f;
|
|
zero2.X = (float) num9;
|
|
zero1.Y = 0.0f;
|
|
zero1.X = (float) num9;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
zero1.Y = WorldGen.genRand.Next(2) != 0 ? 0.2f : -0.2f;
|
|
}
|
|
else if ((double) vector2.Y > (double) (WorldGen.lastMaxTilesY - 300))
|
|
{
|
|
int num10 = -1;
|
|
++num1;
|
|
zero1.Y = (float) num10;
|
|
zero1.X = 0.0f;
|
|
zero2.X = 0.0f;
|
|
zero2.Y = (float) num10;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
zero1.X = WorldGen.genRand.Next(2) != 0 ? (float) -WorldGen.genRand.Next(20, 50) * 0.01f : (float) WorldGen.genRand.Next(20, 50) * 0.01f;
|
|
}
|
|
else if ((double) vector2.Y < Main.rockLayer + 100.0)
|
|
{
|
|
int num11 = 1;
|
|
++num1;
|
|
zero1.Y = (float) num11;
|
|
zero1.X = 0.0f;
|
|
zero2.X = 0.0f;
|
|
zero2.Y = (float) num11;
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
flag3 = true;
|
|
zero1.X = WorldGen.genRand.Next(2) != 0 ? (float) -WorldGen.genRand.Next(10, 20) * 0.1f : (float) WorldGen.genRand.Next(10, 20) * 0.1f;
|
|
}
|
|
else if (WorldGen.genRand.Next(2) == 0)
|
|
zero1.X = WorldGen.genRand.Next(2) != 0 ? (float) WorldGen.genRand.Next(20, 50) * 0.01f : (float) WorldGen.genRand.Next(20, 50) * 0.01f;
|
|
}
|
|
else if ((double) vector2.X < (double) (Main.maxTilesX / 2) && (double) vector2.X > (double) Main.maxTilesX * 0.25)
|
|
{
|
|
int num12 = -1;
|
|
zero2.Y = 0.0f;
|
|
zero2.X = (float) num12;
|
|
zero1.Y = 0.0f;
|
|
zero1.X = (float) num12;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
zero1.Y = WorldGen.genRand.Next(2) != 0 ? 0.2f : -0.2f;
|
|
}
|
|
else if ((double) vector2.X > (double) (Main.maxTilesX / 2) && (double) vector2.X < (double) Main.maxTilesX * 0.75)
|
|
{
|
|
int num13 = 1;
|
|
zero2.Y = 0.0f;
|
|
zero2.X = (float) num13;
|
|
zero1.Y = 0.0f;
|
|
zero1.X = (float) num13;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
zero1.Y = WorldGen.genRand.Next(2) != 0 ? 0.2f : -0.2f;
|
|
}
|
|
}
|
|
if ((double) zero2.Y == 0.0)
|
|
{
|
|
WorldGen.DDoorX[WorldGen.numDDoors] = (int) vector2.X;
|
|
WorldGen.DDoorY[WorldGen.numDDoors] = (int) vector2.Y;
|
|
WorldGen.DDoorPos[WorldGen.numDDoors] = 0;
|
|
++WorldGen.numDDoors;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = (int) vector2.X;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = (int) vector2.Y;
|
|
++WorldGen.numDungeonPlatforms;
|
|
}
|
|
WorldGen.lastDungeonHall = zero2;
|
|
if ((double) Math.Abs(zero1.X) > (double) Math.Abs(zero1.Y) && WorldGen.genRand.Next(3) != 0)
|
|
num1 = (double) (int) (num2 * ((double) WorldGen.genRand.Next(110, 150) * 0.01));
|
|
while (num3 > 0)
|
|
{
|
|
++num7;
|
|
if ((double) zero2.X > 0.0 && (double) vector2.X > (double) (Main.maxTilesX - 100))
|
|
num3 = 0;
|
|
else if ((double) zero2.X < 0.0 && (double) vector2.X < 100.0)
|
|
num3 = 0;
|
|
else if ((double) zero2.Y > 0.0 && (double) vector2.Y > (double) (Main.maxTilesY - 100))
|
|
num3 = 0;
|
|
else if ((double) zero2.Y < 0.0 && (double) vector2.Y < Main.rockLayer + 50.0)
|
|
num3 = 0;
|
|
--num3;
|
|
int num14 = (int) ((double) vector2.X - num1 - 4.0 - (double) WorldGen.genRand.Next(6));
|
|
int num15 = (int) ((double) vector2.X + num1 + 4.0 + (double) WorldGen.genRand.Next(6));
|
|
int num16 = (int) ((double) vector2.Y - num1 - 4.0 - (double) WorldGen.genRand.Next(6));
|
|
int num17 = (int) ((double) vector2.Y + num1 + 4.0 + (double) WorldGen.genRand.Next(6));
|
|
if (num14 < 0)
|
|
num14 = 0;
|
|
if (num15 > Main.maxTilesX)
|
|
num15 = Main.maxTilesX;
|
|
if (num16 < 0)
|
|
num16 = 0;
|
|
if (num17 > Main.maxTilesY)
|
|
num17 = Main.maxTilesY;
|
|
for (int index9 = num14; index9 < num15; ++index9)
|
|
{
|
|
for (int index10 = num16; index10 < num17; ++index10)
|
|
{
|
|
if (index9 < WorldGen.dMinX)
|
|
WorldGen.dMinX = index9;
|
|
if (index9 > WorldGen.dMaxX)
|
|
WorldGen.dMaxX = index9;
|
|
if (index10 > WorldGen.dMaxY)
|
|
WorldGen.dMaxY = index10;
|
|
Main.tile[index9, index10].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index9, index10].wall])
|
|
{
|
|
Main.tile[index9, index10].active(true);
|
|
Main.tile[index9, index10].type = tileType;
|
|
Main.tile[index9, index10].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
for (int index11 = num14 + 1; index11 < num15 - 1; ++index11)
|
|
{
|
|
for (int index12 = num16 + 1; index12 < num17 - 1; ++index12)
|
|
Main.tile[index11, index12].wall = (ushort) wallType;
|
|
}
|
|
int num18 = 0;
|
|
if ((double) zero1.Y == 0.0 && WorldGen.genRand.Next((int) num1 + 1) == 0)
|
|
num18 = WorldGen.genRand.Next(1, 3);
|
|
else if ((double) zero1.X == 0.0 && WorldGen.genRand.Next((int) num1 - 1) == 0)
|
|
num18 = WorldGen.genRand.Next(1, 3);
|
|
else if (WorldGen.genRand.Next((int) num1 * 3) == 0)
|
|
num18 = WorldGen.genRand.Next(1, 3);
|
|
int num19 = (int) ((double) vector2.X - num1 * 0.5 - (double) num18);
|
|
int num20 = (int) ((double) vector2.X + num1 * 0.5 + (double) num18);
|
|
int num21 = (int) ((double) vector2.Y - num1 * 0.5 - (double) num18);
|
|
int num22 = (int) ((double) vector2.Y + num1 * 0.5 + (double) num18);
|
|
if (num19 < 0)
|
|
num19 = 0;
|
|
if (num20 > Main.maxTilesX)
|
|
num20 = Main.maxTilesX;
|
|
if (num21 < 0)
|
|
num21 = 0;
|
|
if (num22 > Main.maxTilesY)
|
|
num22 = Main.maxTilesY;
|
|
for (int index13 = num19; index13 < num20; ++index13)
|
|
{
|
|
for (int index14 = num21; index14 < num22; ++index14)
|
|
{
|
|
Main.tile[index13, index14].Clear(TileDataType.Slope);
|
|
if (flag1)
|
|
{
|
|
if (Main.tile[index13, index14].active() || (int) Main.tile[index13, index14].wall != wallType)
|
|
{
|
|
Main.tile[index13, index14].active(true);
|
|
Main.tile[index13, index14].type = WorldGen.crackedType;
|
|
}
|
|
}
|
|
else
|
|
Main.tile[index13, index14].active(false);
|
|
Main.tile[index13, index14].Clear(TileDataType.Slope);
|
|
Main.tile[index13, index14].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
vector2 += zero1;
|
|
if (flag3 && num7 > WorldGen.genRand.Next(10, 20))
|
|
{
|
|
num7 = 0;
|
|
zero1.X *= -1f;
|
|
}
|
|
}
|
|
WorldGen.dungeonX = (int) vector2.X;
|
|
WorldGen.dungeonY = (int) vector2.Y;
|
|
if ((double) zero2.Y == 0.0)
|
|
{
|
|
WorldGen.DDoorX[WorldGen.numDDoors] = (int) vector2.X;
|
|
WorldGen.DDoorY[WorldGen.numDDoors] = (int) vector2.Y;
|
|
WorldGen.DDoorPos[WorldGen.numDDoors] = 0;
|
|
++WorldGen.numDDoors;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = (int) vector2.X;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = (int) vector2.Y;
|
|
++WorldGen.numDungeonPlatforms;
|
|
}
|
|
}
|
|
|
|
public static void DungeonRoom(int i, int j, ushort tileType, int wallType)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(15, 30);
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_1.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) i;
|
|
vector2_2.Y = (float) j - (float) num1 / 2f;
|
|
int num2 = WorldGen.genRand.Next(10, 20);
|
|
double num3 = (double) vector2_2.X;
|
|
double num4 = (double) vector2_2.X;
|
|
double num5 = (double) vector2_2.Y;
|
|
double num6 = (double) vector2_2.Y;
|
|
while (num2 > 0)
|
|
{
|
|
--num2;
|
|
int num7 = (int) ((double) vector2_2.X - num1 * 0.800000011920929 - 5.0);
|
|
int num8 = (int) ((double) vector2_2.X + num1 * 0.800000011920929 + 5.0);
|
|
int num9 = (int) ((double) vector2_2.Y - num1 * 0.800000011920929 - 5.0);
|
|
int num10 = (int) ((double) vector2_2.Y + num1 * 0.800000011920929 + 5.0);
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesX)
|
|
num8 = Main.maxTilesX;
|
|
if (num9 < 0)
|
|
num9 = 0;
|
|
if (num10 > Main.maxTilesY)
|
|
num10 = Main.maxTilesY;
|
|
for (int index1 = num7; index1 < num8; ++index1)
|
|
{
|
|
for (int index2 = num9; index2 < num10; ++index2)
|
|
{
|
|
if (index1 < WorldGen.dMinX)
|
|
WorldGen.dMinX = index1;
|
|
if (index1 > WorldGen.dMaxX)
|
|
WorldGen.dMaxX = index1;
|
|
if (index2 > WorldGen.dMaxY)
|
|
WorldGen.dMaxY = index2;
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index1, index2].wall])
|
|
{
|
|
Main.tile[index1, index2].Clear(TileDataType.Slope);
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = tileType;
|
|
}
|
|
}
|
|
}
|
|
for (int index3 = num7 + 1; index3 < num8 - 1; ++index3)
|
|
{
|
|
for (int index4 = num9 + 1; index4 < num10 - 1; ++index4)
|
|
Main.tile[index3, index4].wall = (ushort) wallType;
|
|
}
|
|
int num11 = (int) ((double) vector2_2.X - num1 * 0.5);
|
|
int num12 = (int) ((double) vector2_2.X + num1 * 0.5);
|
|
int num13 = (int) ((double) vector2_2.Y - num1 * 0.5);
|
|
int num14 = (int) ((double) vector2_2.Y + num1 * 0.5);
|
|
if (num11 < 0)
|
|
num11 = 0;
|
|
if (num12 > Main.maxTilesX)
|
|
num12 = Main.maxTilesX;
|
|
if (num13 < 0)
|
|
num13 = 0;
|
|
if (num14 > Main.maxTilesY)
|
|
num14 = Main.maxTilesY;
|
|
if ((double) num11 < num3)
|
|
num3 = (double) num11;
|
|
if ((double) num12 > num4)
|
|
num4 = (double) num12;
|
|
if ((double) num13 < num5)
|
|
num5 = (double) num13;
|
|
if ((double) num14 > num6)
|
|
num6 = (double) num14;
|
|
for (int index5 = num11; index5 < num12; ++index5)
|
|
{
|
|
for (int index6 = num13; index6 < num14; ++index6)
|
|
{
|
|
Main.tile[index5, index6].active(false);
|
|
Main.tile[index5, index6].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
vector2_2 += vector2_1;
|
|
vector2_1.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_1.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_1.X > 1.0)
|
|
vector2_1.X = 1f;
|
|
if ((double) vector2_1.X < -1.0)
|
|
vector2_1.X = -1f;
|
|
if ((double) vector2_1.Y > 1.0)
|
|
vector2_1.Y = 1f;
|
|
if ((double) vector2_1.Y < -1.0)
|
|
vector2_1.Y = -1f;
|
|
}
|
|
WorldGen.dRoomX[WorldGen.numDRooms] = (int) vector2_2.X;
|
|
WorldGen.dRoomY[WorldGen.numDRooms] = (int) vector2_2.Y;
|
|
WorldGen.dRoomSize[WorldGen.numDRooms] = (int) num1;
|
|
WorldGen.dRoomL[WorldGen.numDRooms] = (int) num3;
|
|
WorldGen.dRoomR[WorldGen.numDRooms] = (int) num4;
|
|
WorldGen.dRoomT[WorldGen.numDRooms] = (int) num5;
|
|
WorldGen.dRoomB[WorldGen.numDRooms] = (int) num6;
|
|
WorldGen.dRoomTreasure[WorldGen.numDRooms] = false;
|
|
++WorldGen.numDRooms;
|
|
}
|
|
|
|
public static void DungeonEnt(int i, int j, ushort tileType, int wallType)
|
|
{
|
|
int num1 = 60;
|
|
for (int index1 = i - num1; index1 < i + num1; ++index1)
|
|
{
|
|
for (int index2 = j - num1; index2 < j + num1; ++index2)
|
|
{
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
Main.tile[index1, index2].lava(false);
|
|
Main.tile[index1, index2].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
double dxStrength1 = WorldGen.dxStrength1;
|
|
double dyStrength1 = WorldGen.dyStrength1;
|
|
Vector2 vector2;
|
|
vector2.X = (float) i;
|
|
vector2.Y = (float) j - (float) dyStrength1 / 2f;
|
|
WorldGen.dMinY = (int) vector2.Y;
|
|
int num2 = 1;
|
|
if (i > Main.maxTilesX / 2)
|
|
num2 = -1;
|
|
if (WorldGen.drunkWorldGen || WorldGen.getGoodWorldGen)
|
|
num2 *= -1;
|
|
int num3 = (int) ((double) vector2.X - dxStrength1 * 0.600000023841858 - (double) WorldGen.genRand.Next(2, 5));
|
|
int num4 = (int) ((double) vector2.X + dxStrength1 * 0.600000023841858 + (double) WorldGen.genRand.Next(2, 5));
|
|
int num5 = (int) ((double) vector2.Y - dyStrength1 * 0.600000023841858 - (double) WorldGen.genRand.Next(2, 5));
|
|
int num6 = (int) ((double) vector2.Y + dyStrength1 * 0.600000023841858 + (double) WorldGen.genRand.Next(8, 16));
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesX)
|
|
num4 = Main.maxTilesX;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesY)
|
|
num6 = Main.maxTilesY;
|
|
for (int index3 = num3; index3 < num4; ++index3)
|
|
{
|
|
for (int index4 = num5; index4 < num6; ++index4)
|
|
{
|
|
Main.tile[index3, index4].liquid = (byte) 0;
|
|
if ((int) Main.tile[index3, index4].wall != wallType)
|
|
{
|
|
Main.tile[index3, index4].wall = (ushort) 0;
|
|
if (index3 > num3 + 1 && index3 < num4 - 2 && index4 > num5 + 1 && index4 < num6 - 2)
|
|
Main.tile[index3, index4].wall = (ushort) wallType;
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = tileType;
|
|
Main.tile[index3, index4].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
int num7 = num3;
|
|
int num8 = num3 + 5 + WorldGen.genRand.Next(4);
|
|
int num9 = num5 - 3 - WorldGen.genRand.Next(3);
|
|
int num10 = num5;
|
|
for (int index5 = num7; index5 < num8; ++index5)
|
|
{
|
|
for (int index6 = num9; index6 < num10; ++index6)
|
|
{
|
|
Main.tile[index5, index6].liquid = (byte) 0;
|
|
if ((int) Main.tile[index5, index6].wall != wallType)
|
|
{
|
|
Main.tile[index5, index6].active(true);
|
|
Main.tile[index5, index6].type = tileType;
|
|
Main.tile[index5, index6].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
int num11 = num4 - 5 - WorldGen.genRand.Next(4);
|
|
int num12 = num4;
|
|
int num13 = num5 - 3 - WorldGen.genRand.Next(3);
|
|
int num14 = num5;
|
|
for (int index7 = num11; index7 < num12; ++index7)
|
|
{
|
|
for (int index8 = num13; index8 < num14; ++index8)
|
|
{
|
|
Main.tile[index7, index8].liquid = (byte) 0;
|
|
if ((int) Main.tile[index7, index8].wall != wallType)
|
|
{
|
|
Main.tile[index7, index8].active(true);
|
|
Main.tile[index7, index8].type = tileType;
|
|
Main.tile[index7, index8].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
int num15 = 1 + WorldGen.genRand.Next(2);
|
|
int num16 = 2 + WorldGen.genRand.Next(4);
|
|
int num17 = 0;
|
|
for (int index9 = num3; index9 < num4; ++index9)
|
|
{
|
|
for (int index10 = num5 - num15; index10 < num5; ++index10)
|
|
{
|
|
Main.tile[index9, index10].liquid = (byte) 0;
|
|
if ((int) Main.tile[index9, index10].wall != wallType)
|
|
{
|
|
Main.tile[index9, index10].active(true);
|
|
Main.tile[index9, index10].type = tileType;
|
|
Main.tile[index9, index10].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
++num17;
|
|
if (num17 >= num16)
|
|
{
|
|
index9 += num16;
|
|
num17 = 0;
|
|
}
|
|
}
|
|
for (int index11 = num3; index11 < num4; ++index11)
|
|
{
|
|
for (int index12 = num6; (double) index12 < Main.worldSurface; ++index12)
|
|
{
|
|
Main.tile[index11, index12].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index11, index12].wall])
|
|
{
|
|
Main.tile[index11, index12].active(true);
|
|
Main.tile[index11, index12].type = tileType;
|
|
}
|
|
if (index11 > num3 && index11 < num4 - 1)
|
|
Main.tile[index11, index12].wall = (ushort) wallType;
|
|
Main.tile[index11, index12].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
int num18 = (int) ((double) vector2.X - dxStrength1 * 0.600000023841858);
|
|
int num19 = (int) ((double) vector2.X + dxStrength1 * 0.600000023841858);
|
|
int num20 = (int) ((double) vector2.Y - dyStrength1 * 0.600000023841858);
|
|
int num21 = (int) ((double) vector2.Y + dyStrength1 * 0.600000023841858);
|
|
if (num18 < 0)
|
|
num18 = 0;
|
|
if (num19 > Main.maxTilesX)
|
|
num19 = Main.maxTilesX;
|
|
if (num20 < 0)
|
|
num20 = 0;
|
|
if (num21 > Main.maxTilesY)
|
|
num21 = Main.maxTilesY;
|
|
for (int index13 = num18; index13 < num19; ++index13)
|
|
{
|
|
for (int index14 = num20; index14 < num21; ++index14)
|
|
{
|
|
Main.tile[index13, index14].liquid = (byte) 0;
|
|
Main.tile[index13, index14].wall = (ushort) wallType;
|
|
Main.tile[index13, index14].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
int num22 = (int) ((double) vector2.X - dxStrength1 * 0.6 - 1.0);
|
|
int num23 = (int) ((double) vector2.X + dxStrength1 * 0.6 + 1.0);
|
|
int num24 = (int) ((double) vector2.Y - dyStrength1 * 0.6 - 1.0);
|
|
int num25 = (int) ((double) vector2.Y + dyStrength1 * 0.6 + 1.0);
|
|
if (num22 < 0)
|
|
num22 = 0;
|
|
if (num23 > Main.maxTilesX)
|
|
num23 = Main.maxTilesX;
|
|
if (num24 < 0)
|
|
num24 = 0;
|
|
if (num25 > Main.maxTilesY)
|
|
num25 = Main.maxTilesY;
|
|
if (WorldGen.drunkWorldGen)
|
|
num22 -= 4;
|
|
for (int index15 = num22; index15 < num23; ++index15)
|
|
{
|
|
for (int index16 = num24; index16 < num25; ++index16)
|
|
{
|
|
Main.tile[index15, index16].liquid = (byte) 0;
|
|
Main.tile[index15, index16].wall = (ushort) wallType;
|
|
Main.tile[index15, index16].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
int num26 = (int) ((double) vector2.X - dxStrength1 * 0.5);
|
|
int num27 = (int) ((double) vector2.X + dxStrength1 * 0.5);
|
|
int num28 = (int) ((double) vector2.Y - dyStrength1 * 0.5);
|
|
int num29 = (int) ((double) vector2.Y + dyStrength1 * 0.5);
|
|
if (num26 < 0)
|
|
num26 = 0;
|
|
if (num27 > Main.maxTilesX)
|
|
num27 = Main.maxTilesX;
|
|
if (num28 < 0)
|
|
num28 = 0;
|
|
if (num29 > Main.maxTilesY)
|
|
num29 = Main.maxTilesY;
|
|
for (int index17 = num26; index17 < num27; ++index17)
|
|
{
|
|
for (int index18 = num28; index18 < num29; ++index18)
|
|
{
|
|
Main.tile[index17, index18].liquid = (byte) 0;
|
|
Main.tile[index17, index18].active(false);
|
|
Main.tile[index17, index18].wall = (ushort) wallType;
|
|
}
|
|
}
|
|
int x = (int) vector2.X;
|
|
int index19 = num29;
|
|
for (int index20 = 0; index20 < 20; ++index20)
|
|
{
|
|
int index21 = (int) vector2.X - index20;
|
|
if (!Main.tile[index21, index19].active() && Main.wallDungeon[(int) Main.tile[index21, index19].wall])
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = index21;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = index19;
|
|
++WorldGen.numDungeonPlatforms;
|
|
break;
|
|
}
|
|
int index22 = (int) vector2.X + index20;
|
|
if (!Main.tile[index22, index19].active() && Main.wallDungeon[(int) Main.tile[index22, index19].wall])
|
|
{
|
|
WorldGen.dungeonPlatformX[WorldGen.numDungeonPlatforms] = index22;
|
|
WorldGen.dungeonPlatformY[WorldGen.numDungeonPlatforms] = index19;
|
|
++WorldGen.numDungeonPlatforms;
|
|
break;
|
|
}
|
|
}
|
|
vector2.X += (float) (dxStrength1 * 0.600000023841858) * (float) num2;
|
|
vector2.Y += (float) dyStrength1 * 0.5f;
|
|
double dxStrength2 = WorldGen.dxStrength2;
|
|
double dyStrength2 = WorldGen.dyStrength2;
|
|
vector2.X += (float) (dxStrength2 * 0.550000011920929) * (float) num2;
|
|
vector2.Y -= (float) dyStrength2 * 0.5f;
|
|
int num30 = (int) ((double) vector2.X - dxStrength2 * 0.600000023841858 - (double) WorldGen.genRand.Next(1, 3));
|
|
int num31 = (int) ((double) vector2.X + dxStrength2 * 0.600000023841858 + (double) WorldGen.genRand.Next(1, 3));
|
|
int num32 = (int) ((double) vector2.Y - dyStrength2 * 0.600000023841858 - (double) WorldGen.genRand.Next(1, 3));
|
|
int num33 = (int) ((double) vector2.Y + dyStrength2 * 0.600000023841858 + (double) WorldGen.genRand.Next(6, 16));
|
|
if (num30 < 0)
|
|
num30 = 0;
|
|
if (num31 > Main.maxTilesX)
|
|
num31 = Main.maxTilesX;
|
|
if (num32 < 0)
|
|
num32 = 0;
|
|
if (num33 > Main.maxTilesY)
|
|
num33 = Main.maxTilesY;
|
|
for (int index23 = num30; index23 < num31; ++index23)
|
|
{
|
|
for (int index24 = num32; index24 < num33; ++index24)
|
|
{
|
|
Main.tile[index23, index24].liquid = (byte) 0;
|
|
if ((int) Main.tile[index23, index24].wall != wallType)
|
|
{
|
|
bool flag = true;
|
|
if (num2 < 0)
|
|
{
|
|
if ((double) index23 < (double) vector2.X - dxStrength2 * 0.5)
|
|
flag = false;
|
|
}
|
|
else if ((double) index23 > (double) vector2.X + dxStrength2 * 0.5 - 1.0)
|
|
flag = false;
|
|
if (flag)
|
|
{
|
|
Main.tile[index23, index24].wall = (ushort) 0;
|
|
Main.tile[index23, index24].active(true);
|
|
Main.tile[index23, index24].type = tileType;
|
|
Main.tile[index23, index24].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index25 = num30; index25 < num31; ++index25)
|
|
{
|
|
for (int index26 = num33; (double) index26 < Main.worldSurface; ++index26)
|
|
{
|
|
Main.tile[index25, index26].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index25, index26].wall])
|
|
{
|
|
Main.tile[index25, index26].active(true);
|
|
Main.tile[index25, index26].type = tileType;
|
|
}
|
|
Main.tile[index25, index26].wall = (ushort) wallType;
|
|
Main.tile[index25, index26].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
int num34 = (int) ((double) vector2.X - dxStrength2 * 0.5);
|
|
int num35 = (int) ((double) vector2.X + dxStrength2 * 0.5);
|
|
int num36 = num34;
|
|
if (num2 < 0)
|
|
++num36;
|
|
int num37 = num36 + 5 + WorldGen.genRand.Next(4);
|
|
int num38 = num32 - 3 - WorldGen.genRand.Next(3);
|
|
int num39 = num32;
|
|
for (int index27 = num36; index27 < num37; ++index27)
|
|
{
|
|
for (int index28 = num38; index28 < num39; ++index28)
|
|
{
|
|
Main.tile[index27, index28].liquid = (byte) 0;
|
|
if ((int) Main.tile[index27, index28].wall != wallType)
|
|
{
|
|
Main.tile[index27, index28].active(true);
|
|
Main.tile[index27, index28].type = tileType;
|
|
Main.tile[index27, index28].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
int num40 = num35 - 5 - WorldGen.genRand.Next(4);
|
|
int num41 = num35;
|
|
int num42 = num32 - 3 - WorldGen.genRand.Next(3);
|
|
int num43 = num32;
|
|
for (int index29 = num40; index29 < num41; ++index29)
|
|
{
|
|
for (int index30 = num42; index30 < num43; ++index30)
|
|
{
|
|
Main.tile[index29, index30].liquid = (byte) 0;
|
|
if ((int) Main.tile[index29, index30].wall != wallType)
|
|
{
|
|
Main.tile[index29, index30].active(true);
|
|
Main.tile[index29, index30].type = tileType;
|
|
Main.tile[index29, index30].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
int num44 = 1 + WorldGen.genRand.Next(2);
|
|
int num45 = 2 + WorldGen.genRand.Next(4);
|
|
int num46 = 0;
|
|
if (num2 < 0)
|
|
++num35;
|
|
for (int index31 = num34 + 1; index31 < num35 - 1; ++index31)
|
|
{
|
|
for (int index32 = num32 - num44; index32 < num32; ++index32)
|
|
{
|
|
Main.tile[index31, index32].liquid = (byte) 0;
|
|
if ((int) Main.tile[index31, index32].wall != wallType)
|
|
{
|
|
Main.tile[index31, index32].active(true);
|
|
Main.tile[index31, index32].type = tileType;
|
|
Main.tile[index31, index32].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
++num46;
|
|
if (num46 >= num45)
|
|
{
|
|
index31 += num45;
|
|
num46 = 0;
|
|
}
|
|
}
|
|
if (!WorldGen.drunkWorldGen)
|
|
{
|
|
int num47 = (int) ((double) vector2.X - dxStrength2 * 0.6);
|
|
int num48 = (int) ((double) vector2.X + dxStrength2 * 0.6);
|
|
int num49 = (int) ((double) vector2.Y - dyStrength2 * 0.6);
|
|
int num50 = (int) ((double) vector2.Y + dyStrength2 * 0.6);
|
|
if (num47 < 0)
|
|
num47 = 0;
|
|
if (num48 > Main.maxTilesX)
|
|
num48 = Main.maxTilesX;
|
|
if (num49 < 0)
|
|
num49 = 0;
|
|
if (num50 > Main.maxTilesY)
|
|
num50 = Main.maxTilesY;
|
|
for (int index33 = num47; index33 < num48; ++index33)
|
|
{
|
|
for (int index34 = num49; index34 < num50; ++index34)
|
|
{
|
|
Main.tile[index33, index34].liquid = (byte) 0;
|
|
Main.tile[index33, index34].wall = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
int num51 = (int) ((double) vector2.X - dxStrength2 * 0.5);
|
|
int num52 = (int) ((double) vector2.X + dxStrength2 * 0.5);
|
|
int num53 = (int) ((double) vector2.Y - dyStrength2 * 0.5);
|
|
int num54 = (int) ((double) vector2.Y + dyStrength2 * 0.5);
|
|
if (num51 < 0)
|
|
num51 = 0;
|
|
if (num52 > Main.maxTilesX)
|
|
num52 = Main.maxTilesX;
|
|
if (num53 < 0)
|
|
num53 = 0;
|
|
if (num54 > Main.maxTilesY)
|
|
num54 = Main.maxTilesY;
|
|
for (int index35 = num51; index35 < num52; ++index35)
|
|
{
|
|
for (int index36 = num53; index36 < num54; ++index36)
|
|
{
|
|
Main.tile[index35, index36].liquid = (byte) 0;
|
|
Main.tile[index35, index36].active(false);
|
|
Main.tile[index35, index36].wall = (ushort) 0;
|
|
}
|
|
}
|
|
Main.dungeonX = (int) vector2.X;
|
|
Main.dungeonY = num54;
|
|
int index37 = NPC.NewNPC(Main.dungeonX * 16 + 8, Main.dungeonY * 16, 37);
|
|
Main.npc[index37].homeless = false;
|
|
Main.npc[index37].homeTileX = Main.dungeonX;
|
|
Main.npc[index37].homeTileY = Main.dungeonY;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
int worldSurface = (int) Main.worldSurface;
|
|
while (Main.tile[WorldGen.dungeonX, worldSurface].active() || Main.tile[WorldGen.dungeonX, worldSurface].wall > (ushort) 0 || Main.tile[WorldGen.dungeonX, worldSurface - 1].active() || Main.tile[WorldGen.dungeonX, worldSurface - 1].wall > (ushort) 0 || Main.tile[WorldGen.dungeonX, worldSurface - 2].active() || Main.tile[WorldGen.dungeonX, worldSurface - 2].wall > (ushort) 0 || Main.tile[WorldGen.dungeonX, worldSurface - 3].active() || Main.tile[WorldGen.dungeonX, worldSurface - 3].wall > (ushort) 0 || Main.tile[WorldGen.dungeonX, worldSurface - 4].active() || Main.tile[WorldGen.dungeonX, worldSurface - 4].wall > (ushort) 0)
|
|
{
|
|
--worldSurface;
|
|
if (worldSurface < 50)
|
|
break;
|
|
}
|
|
if (worldSurface > 50)
|
|
WorldGen.GrowDungeonTree(WorldGen.dungeonX, worldSurface);
|
|
}
|
|
if (!WorldGen.drunkWorldGen)
|
|
{
|
|
int num55 = 100;
|
|
if (num2 == 1)
|
|
{
|
|
int num56 = 0;
|
|
for (int index38 = num52; index38 < num52 + num55; ++index38)
|
|
{
|
|
++num56;
|
|
for (int index39 = num54 + num56; index39 < num54 + num55; ++index39)
|
|
{
|
|
Main.tile[index38, index39].liquid = (byte) 0;
|
|
Main.tile[index38, index39 - 1].liquid = (byte) 0;
|
|
Main.tile[index38, index39 - 2].liquid = (byte) 0;
|
|
Main.tile[index38, index39 - 3].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index38, index39].wall] && Main.tile[index38, index39].wall != (ushort) 3 && Main.tile[index38, index39].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index38, index39].active(true);
|
|
Main.tile[index38, index39].type = tileType;
|
|
Main.tile[index38, index39].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num57 = 0;
|
|
for (int index40 = num51; index40 > num51 - num55; --index40)
|
|
{
|
|
++num57;
|
|
for (int index41 = num54 + num57; index41 < num54 + num55; ++index41)
|
|
{
|
|
Main.tile[index40, index41].liquid = (byte) 0;
|
|
Main.tile[index40, index41 - 1].liquid = (byte) 0;
|
|
Main.tile[index40, index41 - 2].liquid = (byte) 0;
|
|
Main.tile[index40, index41 - 3].liquid = (byte) 0;
|
|
if (!Main.wallDungeon[(int) Main.tile[index40, index41].wall] && Main.tile[index40, index41].wall != (ushort) 3 && Main.tile[index40, index41].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index40, index41].active(true);
|
|
Main.tile[index40, index41].type = tileType;
|
|
Main.tile[index40, index41].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num58 = 1 + WorldGen.genRand.Next(2);
|
|
int num59 = 2 + WorldGen.genRand.Next(4);
|
|
int num60 = 0;
|
|
int num61 = (int) ((double) vector2.X - dxStrength2 * 0.5);
|
|
int num62 = (int) ((double) vector2.X + dxStrength2 * 0.5);
|
|
int num63;
|
|
int num64;
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
if (num2 == 1)
|
|
{
|
|
num63 = num62 - 1;
|
|
num64 = num61 - 1;
|
|
}
|
|
else
|
|
{
|
|
num64 = num61 + 1;
|
|
num63 = num62 + 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num64 = num61 + 2;
|
|
num63 = num62 - 2;
|
|
}
|
|
for (int i1 = num64; i1 < num63; ++i1)
|
|
{
|
|
for (int j1 = num53; j1 < num54 + 1; ++j1)
|
|
WorldGen.PlaceWall(i1, j1, wallType, true);
|
|
if (!WorldGen.drunkWorldGen)
|
|
{
|
|
++num60;
|
|
if (num60 >= num59)
|
|
{
|
|
i1 += num59 * 2;
|
|
num60 = 0;
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
int num65 = (int) ((double) vector2.X - dxStrength2 * 0.5);
|
|
int num66 = (int) ((double) vector2.X + dxStrength2 * 0.5);
|
|
if (num2 == 1)
|
|
num65 = num66 - 3;
|
|
else
|
|
num66 = num65 + 3;
|
|
for (int index42 = num65; index42 < num66; ++index42)
|
|
{
|
|
for (int index43 = num53; index43 < num54 + 1; ++index43)
|
|
{
|
|
Main.tile[index42, index43].active(true);
|
|
Main.tile[index42, index43].type = tileType;
|
|
Main.tile[index42, index43].Clear(TileDataType.Slope);
|
|
}
|
|
}
|
|
}
|
|
vector2.X -= (float) (dxStrength2 * 0.600000023841858) * (float) num2;
|
|
vector2.Y += (float) dyStrength2 * 0.5f;
|
|
double num67 = 15.0;
|
|
double num68 = 3.0;
|
|
vector2.Y -= (float) num68 * 0.5f;
|
|
int num69 = (int) ((double) vector2.X - num67 * 0.5);
|
|
int num70 = (int) ((double) vector2.X + num67 * 0.5);
|
|
int num71 = (int) ((double) vector2.Y - num68 * 0.5);
|
|
int num72 = (int) ((double) vector2.Y + num68 * 0.5);
|
|
if (num69 < 0)
|
|
num69 = 0;
|
|
if (num70 > Main.maxTilesX)
|
|
num70 = Main.maxTilesX;
|
|
if (num71 < 0)
|
|
num71 = 0;
|
|
if (num72 > Main.maxTilesY)
|
|
num72 = Main.maxTilesY;
|
|
for (int index44 = num69; index44 < num70; ++index44)
|
|
{
|
|
for (int index45 = num71; index45 < num72; ++index45)
|
|
Main.tile[index44, index45].active(false);
|
|
}
|
|
if (num2 < 0)
|
|
--vector2.X;
|
|
WorldGen.PlaceTile((int) vector2.X, (int) vector2.Y + 1, 10, true, style: 13);
|
|
}
|
|
|
|
public static bool AddBuriedChest(
|
|
Point point,
|
|
int contain = 0,
|
|
bool notNearOtherChests = false,
|
|
int Style = -1)
|
|
{
|
|
return WorldGen.AddBuriedChest(point.X, point.Y, contain, notNearOtherChests, Style);
|
|
}
|
|
|
|
public static bool IsChestRigged(int x, int y) => Main.tile[x, y].type == (ushort) 467 && (int) Main.tile[x, y].frameX / 36 == 4;
|
|
|
|
private static bool IsUndergroundDesert(int x, int y)
|
|
{
|
|
if ((double) y < Main.worldSurface || (double) x < (double) Main.maxTilesX * 0.15 || (double) x > (double) Main.maxTilesX * 0.85)
|
|
return false;
|
|
int num = 15;
|
|
for (int index1 = x - num; index1 <= x + num; ++index1)
|
|
{
|
|
for (int index2 = y - num; index2 <= y + num; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].wall == (ushort) 187 || Main.tile[index1, index2].wall == (ushort) 216)
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static bool IsDungeon(int x, int y) => (double) y >= Main.worldSurface && x >= 0 && x <= Main.maxTilesX && Main.wallDungeon[(int) Main.tile[x, y].wall];
|
|
|
|
public static bool AddBuriedChest(
|
|
int i,
|
|
int j,
|
|
int contain = 0,
|
|
bool notNearOtherChests = false,
|
|
int Style = -1,
|
|
bool trySlope = false,
|
|
ushort chestTileType = 0)
|
|
{
|
|
if (chestTileType == (ushort) 0)
|
|
chestTileType = (ushort) 21;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
bool flag4 = false;
|
|
bool flag5 = false;
|
|
bool flag6 = false;
|
|
bool flag7 = false;
|
|
bool flag8 = false;
|
|
int maxValue = 15;
|
|
for (int index1 = j; index1 < Main.maxTilesY - 10; ++index1)
|
|
{
|
|
int num1 = -1;
|
|
int num2 = -1;
|
|
if (trySlope && Main.tile[i, index1].active() && Main.tileSolid[(int) Main.tile[i, index1].type] && !Main.tileSolidTop[(int) Main.tile[i, index1].type])
|
|
{
|
|
if (Style == 17)
|
|
{
|
|
int num3 = 30;
|
|
for (int x = i - num3; x <= i + num3; ++x)
|
|
{
|
|
for (int y = index1 - num3; y <= index1 + num3; ++y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 5) || Main.tile[x, y].active() && (Main.tile[x, y].type == (ushort) 21 || Main.tile[x, y].type == (ushort) 467))
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i - 1, index1].topSlope())
|
|
{
|
|
num1 = (int) Main.tile[i - 1, index1].slope();
|
|
Main.tile[i - 1, index1].slope((byte) 0);
|
|
}
|
|
if (Main.tile[i, index1].topSlope())
|
|
{
|
|
num2 = (int) Main.tile[i, index1].slope();
|
|
Main.tile[i, index1].slope((byte) 0);
|
|
}
|
|
}
|
|
int num4 = 2;
|
|
for (int index2 = i - num4; index2 <= i + num4; ++index2)
|
|
{
|
|
for (int index3 = index1 - num4; index3 <= index1 + num4; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3].active() && (TileID.Sets.Boulders[(int) Main.tile[index2, index3].type] || Main.tile[index2, index3].type == (ushort) 26 || Main.tile[index2, index3].type == (ushort) 237))
|
|
return false;
|
|
}
|
|
}
|
|
if (WorldGen.SolidTile(i, index1))
|
|
{
|
|
bool flag9 = false;
|
|
int num5 = i;
|
|
int num6 = index1;
|
|
int style = 0;
|
|
if ((double) num6 >= Main.worldSurface + 25.0 || contain > 0)
|
|
style = 1;
|
|
if (Style >= 0)
|
|
style = Style;
|
|
if (contain == 0 && (double) num6 >= Main.worldSurface + 25.0 && num6 <= Main.maxTilesY - 205 && WorldGen.IsUndergroundDesert(i, index1))
|
|
{
|
|
flag2 = true;
|
|
style = 10;
|
|
chestTileType = (ushort) 467;
|
|
int num7 = -1;
|
|
int num8 = -1;
|
|
for (int index4 = (int) Main.worldSurface - 100; index4 < Main.maxTilesY - 200; ++index4)
|
|
{
|
|
for (int index5 = 100; index5 < Main.maxTilesX - 100; ++index5)
|
|
{
|
|
if (Main.tile[index5, index4].wall == (ushort) 216 || Main.tile[index5, index4].wall == (ushort) 187)
|
|
{
|
|
if (num7 == -1)
|
|
num7 = index4;
|
|
num8 = index4;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num6 > (num7 * 3 + num8 * 4) / 7)
|
|
contain = (int) Utils.SelectRandom<short>(WorldGen.genRand, (short) 4061, (short) 4062, (short) 4276);
|
|
else
|
|
contain = (int) Utils.SelectRandom<short>(WorldGen.genRand, (short) 4056, (short) 4055, (short) 4262, (short) 4263);
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && (style == 11 || contain == 0 && (double) num6 >= Main.worldSurface + 25.0 && num6 <= Main.maxTilesY - 205 && (Main.tile[i, index1].type == (ushort) 147 || Main.tile[i, index1].type == (ushort) 161 || Main.tile[i, index1].type == (ushort) 162)))
|
|
{
|
|
flag1 = true;
|
|
style = 11;
|
|
switch (WorldGen.genRand.Next(6))
|
|
{
|
|
case 0:
|
|
contain = 670;
|
|
break;
|
|
case 1:
|
|
contain = 724;
|
|
break;
|
|
case 2:
|
|
contain = 950;
|
|
break;
|
|
case 3:
|
|
contain = 1319;
|
|
break;
|
|
case 4:
|
|
contain = 987;
|
|
break;
|
|
default:
|
|
contain = 1579;
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
contain = 997;
|
|
if (WorldGen.genRand.Next(50) == 0)
|
|
contain = 669;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && (Style == 10 || contain == 211 || contain == 212 || contain == 213 || contain == 753))
|
|
{
|
|
flag3 = true;
|
|
style = 10;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && num6 > Main.maxTilesY - 205 && contain == 0)
|
|
{
|
|
flag7 = true;
|
|
if (WorldGen.hellChest == WorldGen.hellChestItem[1])
|
|
{
|
|
contain = 220;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
else if (WorldGen.hellChest == WorldGen.hellChestItem[2])
|
|
{
|
|
contain = 112;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
else if (WorldGen.hellChest == WorldGen.hellChestItem[3])
|
|
{
|
|
contain = 218;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
else if (WorldGen.hellChest == WorldGen.hellChestItem[4])
|
|
{
|
|
contain = 274;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
else if (WorldGen.hellChest == WorldGen.hellChestItem[5])
|
|
{
|
|
contain = 3019;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
else
|
|
{
|
|
contain = 5010;
|
|
style = 4;
|
|
flag9 = true;
|
|
}
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && style == 17)
|
|
{
|
|
flag4 = true;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && style == 12)
|
|
{
|
|
flag5 = true;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && style == 32)
|
|
{
|
|
flag6 = true;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
if (chestTileType == (ushort) 21 && style != 0 && WorldGen.IsDungeon(i, index1))
|
|
{
|
|
flag8 = true;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(maxValue) == 0)
|
|
contain = 52;
|
|
}
|
|
int index6 = chestTileType != (ushort) 467 ? WorldGen.PlaceChest(num5 - 1, num6 - 1, chestTileType, notNearOtherChests, style) : WorldGen.PlaceChest(num5 - 1, num6 - 1, chestTileType, notNearOtherChests, style);
|
|
if (index6 >= 0)
|
|
{
|
|
if (flag9)
|
|
{
|
|
++WorldGen.hellChest;
|
|
if (WorldGen.hellChest > 4)
|
|
WorldGen.hellChest = 0;
|
|
}
|
|
Chest chest = Main.chest[index6];
|
|
int index7 = 0;
|
|
while (index7 == 0)
|
|
{
|
|
if (style == 0 && (double) num6 < Main.worldSurface + 25.0 || contain == 848)
|
|
{
|
|
if (contain > 0)
|
|
{
|
|
chest.item[index7].SetDefaults(contain);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
switch (contain)
|
|
{
|
|
case 832:
|
|
chest.item[index7].SetDefaults(933);
|
|
++index7;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int Type = WorldGen.genRand.Next(2);
|
|
switch (Type)
|
|
{
|
|
case 0:
|
|
Type = 4429;
|
|
break;
|
|
case 1:
|
|
Type = 4427;
|
|
break;
|
|
}
|
|
chest.item[index7].SetDefaults(Type);
|
|
++index7;
|
|
break;
|
|
}
|
|
break;
|
|
case 848:
|
|
chest.item[index7].SetDefaults(866);
|
|
++index7;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num9 = WorldGen.genRand.Next(12);
|
|
if (num9 == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(280);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 1)
|
|
{
|
|
chest.item[index7].SetDefaults(281);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 2)
|
|
{
|
|
chest.item[index7].SetDefaults(284);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 3)
|
|
{
|
|
chest.item[index7].SetDefaults(282);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(40, 75);
|
|
}
|
|
if (num9 == 4)
|
|
{
|
|
chest.item[index7].SetDefaults(279);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(150, 300);
|
|
}
|
|
if (num9 == 5)
|
|
{
|
|
chest.item[index7].SetDefaults(285);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 6)
|
|
{
|
|
chest.item[index7].SetDefaults(953);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 7)
|
|
{
|
|
chest.item[index7].SetDefaults(946);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 8)
|
|
{
|
|
chest.item[index7].SetDefaults(3068);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 9)
|
|
{
|
|
chest.item[index7].SetDefaults(3069);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 10)
|
|
{
|
|
chest.item[index7].SetDefaults(3084);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num9 == 11)
|
|
{
|
|
chest.item[index7].SetDefaults(4341);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(3093);
|
|
chest.item[index7].stack = 1;
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
chest.item[index7].stack += WorldGen.genRand.Next(2);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
chest.item[index7].stack += WorldGen.genRand.Next(3);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4345);
|
|
chest.item[index7].stack = 1;
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
chest.item[index7].stack += WorldGen.genRand.Next(2);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
chest.item[index7].stack += WorldGen.genRand.Next(3);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(168);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(3, 6);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num10 = WorldGen.genRand.Next(2);
|
|
int num11 = WorldGen.genRand.Next(8) + 3;
|
|
if (num10 == 0)
|
|
chest.item[index7].SetDefaults(WorldGen.copperBar);
|
|
if (num10 == 1)
|
|
chest.item[index7].SetDefaults(WorldGen.ironBar);
|
|
chest.item[index7].stack = num11;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num12 = WorldGen.genRand.Next(50, 101);
|
|
chest.item[index7].SetDefaults(965);
|
|
chest.item[index7].stack = num12;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
int num13 = WorldGen.genRand.Next(2);
|
|
int num14 = WorldGen.genRand.Next(26) + 25;
|
|
if (num13 == 0)
|
|
chest.item[index7].SetDefaults(40);
|
|
if (num13 == 1)
|
|
chest.item[index7].SetDefaults(42);
|
|
chest.item[index7].stack = num14;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num15 = WorldGen.genRand.Next(3) + 3;
|
|
chest.item[index7].SetDefaults(28);
|
|
chest.item[index7].stack = num15;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2350);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(3, 6);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
int num16 = WorldGen.genRand.Next(6);
|
|
int num17 = WorldGen.genRand.Next(1, 3);
|
|
if (num16 == 0)
|
|
chest.item[index7].SetDefaults(292);
|
|
if (num16 == 1)
|
|
chest.item[index7].SetDefaults(298);
|
|
if (num16 == 2)
|
|
chest.item[index7].SetDefaults(299);
|
|
if (num16 == 3)
|
|
chest.item[index7].SetDefaults(290);
|
|
if (num16 == 4)
|
|
chest.item[index7].SetDefaults(2322);
|
|
if (num16 == 5)
|
|
chest.item[index7].SetDefaults(2325);
|
|
chest.item[index7].stack = num17;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num18 = WorldGen.genRand.Next(2);
|
|
int num19 = WorldGen.genRand.Next(11) + 10;
|
|
if (num18 == 0)
|
|
chest.item[index7].SetDefaults(8);
|
|
if (num18 == 1)
|
|
chest.item[index7].SetDefaults(31);
|
|
chest.item[index7].stack = num19;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(72);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(10, 30);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(9);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(50, 100);
|
|
++index7;
|
|
}
|
|
}
|
|
else if ((double) num6 < Main.rockLayer)
|
|
{
|
|
if (contain > 0)
|
|
{
|
|
if (contain == 832)
|
|
{
|
|
chest.item[index7].SetDefaults(933);
|
|
++index7;
|
|
}
|
|
chest.item[index7].SetDefaults(contain);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
if (flag4 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4460);
|
|
++index7;
|
|
}
|
|
if (flag5 && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int Type = WorldGen.genRand.Next(2);
|
|
switch (Type)
|
|
{
|
|
case 0:
|
|
Type = 4429;
|
|
break;
|
|
case 1:
|
|
Type = 4427;
|
|
break;
|
|
}
|
|
chest.item[index7].SetDefaults(Type);
|
|
++index7;
|
|
}
|
|
if (flag8 && (!WorldGen.generatedShadowKey || WorldGen.genRand.Next(3) == 0))
|
|
{
|
|
WorldGen.generatedShadowKey = true;
|
|
chest.item[index7].SetDefaults(329);
|
|
++index7;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (WorldGen.genRand.Next(6))
|
|
{
|
|
case 0:
|
|
chest.item[index7].SetDefaults(49);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
case 1:
|
|
chest.item[index7].SetDefaults(50);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
case 2:
|
|
chest.item[index7].SetDefaults(53);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
case 3:
|
|
chest.item[index7].SetDefaults(54);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
case 4:
|
|
chest.item[index7].SetDefaults(5011);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
default:
|
|
chest.item[index7].SetDefaults(975);
|
|
chest.item[index7].Prefix(-1);
|
|
break;
|
|
}
|
|
++index7;
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(997);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
}
|
|
else if (WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(930);
|
|
chest.item[index7].Prefix(-1);
|
|
int index8 = index7 + 1;
|
|
chest.item[index8].SetDefaults(931);
|
|
chest.item[index8].stack = WorldGen.genRand.Next(26) + 25;
|
|
index7 = index8 + 1;
|
|
}
|
|
if (flag6 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4450);
|
|
++index7;
|
|
}
|
|
if (flag6 && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4779);
|
|
int index9 = index7 + 1;
|
|
chest.item[index9].SetDefaults(4780);
|
|
int index10 = index9 + 1;
|
|
chest.item[index10].SetDefaults(4781);
|
|
index7 = index10 + 1;
|
|
}
|
|
}
|
|
if (flag2)
|
|
{
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4423);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(10, 20);
|
|
++index7;
|
|
}
|
|
}
|
|
else if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(166);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(10, 20);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(52);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
int num20 = WorldGen.genRand.Next(50, 101);
|
|
chest.item[index7].SetDefaults(965);
|
|
chest.item[index7].stack = num20;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num21 = WorldGen.genRand.Next(2);
|
|
int num22 = WorldGen.genRand.Next(10) + 5;
|
|
if (num21 == 0)
|
|
chest.item[index7].SetDefaults(WorldGen.ironBar);
|
|
if (num21 == 1)
|
|
chest.item[index7].SetDefaults(WorldGen.silverBar);
|
|
chest.item[index7].stack = num22;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num23 = WorldGen.genRand.Next(2);
|
|
int num24 = WorldGen.genRand.Next(25) + 25;
|
|
if (num23 == 0)
|
|
chest.item[index7].SetDefaults(40);
|
|
if (num23 == 1)
|
|
chest.item[index7].SetDefaults(42);
|
|
chest.item[index7].stack = num24;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num25 = WorldGen.genRand.Next(3) + 3;
|
|
chest.item[index7].SetDefaults(28);
|
|
chest.item[index7].stack = num25;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
int num26 = WorldGen.genRand.Next(9);
|
|
int num27 = WorldGen.genRand.Next(1, 3);
|
|
if (num26 == 0)
|
|
chest.item[index7].SetDefaults(289);
|
|
if (num26 == 1)
|
|
chest.item[index7].SetDefaults(298);
|
|
if (num26 == 2)
|
|
chest.item[index7].SetDefaults(299);
|
|
if (num26 == 3)
|
|
chest.item[index7].SetDefaults(290);
|
|
if (num26 == 4)
|
|
chest.item[index7].SetDefaults(303);
|
|
if (num26 == 5)
|
|
chest.item[index7].SetDefaults(291);
|
|
if (num26 == 6)
|
|
chest.item[index7].SetDefaults(304);
|
|
if (num26 == 7)
|
|
chest.item[index7].SetDefaults(2322);
|
|
if (num26 == 8)
|
|
chest.item[index7].SetDefaults(2329);
|
|
chest.item[index7].stack = num27;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
int num28 = WorldGen.genRand.Next(2, 5);
|
|
chest.item[index7].SetDefaults(2350);
|
|
chest.item[index7].stack = num28;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num29 = WorldGen.genRand.Next(11) + 10;
|
|
if (style == 11)
|
|
chest.item[index7].SetDefaults(974);
|
|
else
|
|
chest.item[index7].SetDefaults(8);
|
|
chest.item[index7].stack = num29;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(72);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(50, 90);
|
|
++index7;
|
|
}
|
|
}
|
|
else if (num6 < Main.maxTilesY - 250)
|
|
{
|
|
if (contain > 0)
|
|
{
|
|
chest.item[index7].SetDefaults(contain);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
if (flag1 && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(3199);
|
|
++index7;
|
|
}
|
|
if (flag2)
|
|
{
|
|
if (WorldGen.genRand.Next(7) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4346);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4066);
|
|
++index7;
|
|
}
|
|
}
|
|
if (flag3 && WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
Item[] objArray1 = chest.item;
|
|
int index11 = index7;
|
|
int num30 = index11 + 1;
|
|
objArray1[index11].SetDefaults(3360);
|
|
Item[] objArray2 = chest.item;
|
|
int index12 = num30;
|
|
index7 = index12 + 1;
|
|
objArray2[index12].SetDefaults(3361);
|
|
}
|
|
if (flag3 && WorldGen.genRand.Next(10) == 0)
|
|
chest.item[index7++].SetDefaults(4426);
|
|
if (flag4 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4460);
|
|
++index7;
|
|
}
|
|
if (flag8 && (!WorldGen.generatedShadowKey || WorldGen.genRand.Next(3) == 0))
|
|
{
|
|
WorldGen.generatedShadowKey = true;
|
|
chest.item[index7].SetDefaults(329);
|
|
++index7;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num31 = WorldGen.genRand.Next(7);
|
|
if (WorldGen.genRand.Next(40) == 0 && num6 > WorldGen.lavaLine)
|
|
{
|
|
chest.item[index7].SetDefaults(906);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(997);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
else
|
|
{
|
|
if (num31 == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(49);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 1)
|
|
{
|
|
chest.item[index7].SetDefaults(50);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 2)
|
|
{
|
|
chest.item[index7].SetDefaults(53);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 3)
|
|
{
|
|
chest.item[index7].SetDefaults(54);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 4)
|
|
{
|
|
chest.item[index7].SetDefaults(5011);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 5)
|
|
{
|
|
chest.item[index7].SetDefaults(975);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num31 == 6)
|
|
{
|
|
chest.item[index7].SetDefaults(930);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
chest.item[index7].SetDefaults(931);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(26) + 25;
|
|
}
|
|
}
|
|
++index7;
|
|
if (flag6 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4450);
|
|
++index7;
|
|
}
|
|
if (flag6 && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4779);
|
|
int index13 = index7 + 1;
|
|
chest.item[index13].SetDefaults(4780);
|
|
int index14 = index13 + 1;
|
|
chest.item[index14].SetDefaults(4781);
|
|
index7 = index14 + 1;
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(43);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(167);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(51);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(26) + 25;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num32 = WorldGen.genRand.Next(2);
|
|
int num33 = WorldGen.genRand.Next(8) + 3;
|
|
if (num32 == 0)
|
|
chest.item[index7].SetDefaults(WorldGen.goldBar);
|
|
if (num32 == 1)
|
|
chest.item[index7].SetDefaults(WorldGen.silverBar);
|
|
chest.item[index7].stack = num33;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num34 = WorldGen.genRand.Next(2);
|
|
int num35 = WorldGen.genRand.Next(26) + 25;
|
|
if (num34 == 0)
|
|
chest.item[index7].SetDefaults(41);
|
|
if (num34 == 1)
|
|
chest.item[index7].SetDefaults(279);
|
|
chest.item[index7].stack = num35;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num36 = WorldGen.genRand.Next(3) + 3;
|
|
chest.item[index7].SetDefaults(188);
|
|
chest.item[index7].stack = num36;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
int num37 = WorldGen.genRand.Next(6);
|
|
int num38 = WorldGen.genRand.Next(1, 3);
|
|
if (num37 == 0)
|
|
chest.item[index7].SetDefaults(296);
|
|
if (num37 == 1)
|
|
chest.item[index7].SetDefaults(295);
|
|
if (num37 == 2)
|
|
chest.item[index7].SetDefaults(299);
|
|
if (num37 == 3)
|
|
chest.item[index7].SetDefaults(302);
|
|
if (num37 == 4)
|
|
chest.item[index7].SetDefaults(303);
|
|
if (num37 == 5)
|
|
chest.item[index7].SetDefaults(305);
|
|
chest.item[index7].stack = num38;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 1)
|
|
{
|
|
int num39 = WorldGen.genRand.Next(6);
|
|
int num40 = WorldGen.genRand.Next(1, 3);
|
|
if (num39 == 0)
|
|
chest.item[index7].SetDefaults(301);
|
|
if (num39 == 1)
|
|
chest.item[index7].SetDefaults(297);
|
|
if (num39 == 2)
|
|
chest.item[index7].SetDefaults(304);
|
|
if (num39 == 3)
|
|
chest.item[index7].SetDefaults(2329);
|
|
if (num39 == 4)
|
|
chest.item[index7].SetDefaults(2351);
|
|
if (num39 == 5)
|
|
chest.item[index7].SetDefaults(2326);
|
|
chest.item[index7].stack = num40;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num41 = WorldGen.genRand.Next(2, 5);
|
|
chest.item[index7].SetDefaults(2350);
|
|
chest.item[index7].stack = num41;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num42 = WorldGen.genRand.Next(2);
|
|
int num43 = WorldGen.genRand.Next(15) + 15;
|
|
if (num42 == 0)
|
|
{
|
|
if (style == 11)
|
|
chest.item[index7].SetDefaults(974);
|
|
else
|
|
chest.item[index7].SetDefaults(8);
|
|
}
|
|
if (num42 == 1)
|
|
chest.item[index7].SetDefaults(282);
|
|
chest.item[index7].stack = num43;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(73);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(1, 3);
|
|
++index7;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (contain > 0)
|
|
{
|
|
chest.item[index7].SetDefaults(contain);
|
|
chest.item[index7].Prefix(-1);
|
|
++index7;
|
|
if (flag7 && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4443);
|
|
++index7;
|
|
}
|
|
if (flag7 && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4737);
|
|
++index7;
|
|
}
|
|
else if (flag7 && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(4551);
|
|
++index7;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num44 = WorldGen.genRand.Next(4);
|
|
if (num44 == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(49);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num44 == 1)
|
|
{
|
|
chest.item[index7].SetDefaults(50);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num44 == 2)
|
|
{
|
|
chest.item[index7].SetDefaults(53);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
if (num44 == 3)
|
|
{
|
|
chest.item[index7].SetDefaults(54);
|
|
chest.item[index7].Prefix(-1);
|
|
}
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(167);
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num45 = WorldGen.genRand.Next(2);
|
|
int num46 = WorldGen.genRand.Next(15) + 15;
|
|
if (num45 == 0)
|
|
chest.item[index7].SetDefaults(117);
|
|
if (num45 == 1)
|
|
chest.item[index7].SetDefaults(WorldGen.goldBar);
|
|
chest.item[index7].stack = num46;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num47 = WorldGen.genRand.Next(2);
|
|
int num48 = WorldGen.genRand.Next(25) + 50;
|
|
if (num47 == 0)
|
|
chest.item[index7].SetDefaults(265);
|
|
if (num47 == 1)
|
|
{
|
|
if (WorldGen.SavedOreTiers.Silver == 168)
|
|
chest.item[index7].SetDefaults(4915);
|
|
else
|
|
chest.item[index7].SetDefaults(278);
|
|
}
|
|
chest.item[index7].stack = num48;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num49 = WorldGen.genRand.Next(6) + 15;
|
|
chest.item[index7].SetDefaults(227);
|
|
chest.item[index7].stack = num49;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(4) > 0)
|
|
{
|
|
int num50 = WorldGen.genRand.Next(8);
|
|
int num51 = WorldGen.genRand.Next(1, 3);
|
|
if (num50 == 0)
|
|
chest.item[index7].SetDefaults(296);
|
|
if (num50 == 1)
|
|
chest.item[index7].SetDefaults(295);
|
|
if (num50 == 2)
|
|
chest.item[index7].SetDefaults(293);
|
|
if (num50 == 3)
|
|
chest.item[index7].SetDefaults(288);
|
|
if (num50 == 4)
|
|
chest.item[index7].SetDefaults(294);
|
|
if (num50 == 5)
|
|
chest.item[index7].SetDefaults(297);
|
|
if (num50 == 6)
|
|
chest.item[index7].SetDefaults(304);
|
|
if (num50 == 7)
|
|
chest.item[index7].SetDefaults(2323);
|
|
chest.item[index7].stack = num51;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) > 0)
|
|
{
|
|
int num52 = WorldGen.genRand.Next(8);
|
|
int num53 = WorldGen.genRand.Next(1, 3);
|
|
if (num52 == 0)
|
|
chest.item[index7].SetDefaults(305);
|
|
if (num52 == 1)
|
|
chest.item[index7].SetDefaults(301);
|
|
if (num52 == 2)
|
|
chest.item[index7].SetDefaults(302);
|
|
if (num52 == 3)
|
|
chest.item[index7].SetDefaults(288);
|
|
if (num52 == 4)
|
|
chest.item[index7].SetDefaults(300);
|
|
if (num52 == 5)
|
|
chest.item[index7].SetDefaults(2351);
|
|
if (num52 == 6)
|
|
chest.item[index7].SetDefaults(2348);
|
|
if (num52 == 7)
|
|
chest.item[index7].SetDefaults(2345);
|
|
chest.item[index7].stack = num53;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
int num54 = WorldGen.genRand.Next(1, 3);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
chest.item[index7].SetDefaults(2350);
|
|
else
|
|
chest.item[index7].SetDefaults(4870);
|
|
chest.item[index7].stack = num54;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int num55 = WorldGen.genRand.Next(2);
|
|
int num56 = WorldGen.genRand.Next(15) + 15;
|
|
if (num55 == 0)
|
|
chest.item[index7].SetDefaults(8);
|
|
if (num55 == 1)
|
|
chest.item[index7].SetDefaults(282);
|
|
chest.item[index7].stack = num56;
|
|
++index7;
|
|
}
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(73);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(2, 5);
|
|
++index7;
|
|
}
|
|
}
|
|
if (index7 > 0 && chestTileType == (ushort) 21)
|
|
{
|
|
if (style == 10 && WorldGen.genRand.Next(4) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2204);
|
|
++index7;
|
|
}
|
|
if (style == 11 && WorldGen.genRand.Next(7) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2198);
|
|
++index7;
|
|
}
|
|
if (style == 13 && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2197);
|
|
++index7;
|
|
}
|
|
if (style == 16)
|
|
{
|
|
chest.item[index7].SetDefaults(2195);
|
|
++index7;
|
|
}
|
|
if (Main.wallDungeon[(int) Main.tile[i, index1].wall] && WorldGen.genRand.Next(8) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2192);
|
|
++index7;
|
|
}
|
|
if (style == 16)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
chest.item[index7].SetDefaults(2767);
|
|
++index7;
|
|
}
|
|
else
|
|
{
|
|
chest.item[index7].SetDefaults(2766);
|
|
chest.item[index7].stack = WorldGen.genRand.Next(3, 8);
|
|
++index7;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
if (trySlope)
|
|
{
|
|
if (num1 > -1)
|
|
Main.tile[i - 1, index1].slope((byte) num1);
|
|
if (num2 > -1)
|
|
Main.tile[i, index1].slope((byte) num2);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void UnlockDoor(int i, int j)
|
|
{
|
|
int index1 = i;
|
|
int index2 = j;
|
|
if (Main.tile[index1, index2] == null)
|
|
return;
|
|
while (Main.tile[index1, index2].frameY != (short) 594)
|
|
{
|
|
--index2;
|
|
if (Main.tile[index1, index2].frameY < (short) 594 || index2 <= 0)
|
|
return;
|
|
}
|
|
SoundEngine.PlaySound(22, index1 * 16, index2 * 16 + 16);
|
|
for (int index3 = index2; index3 <= index2 + 2; ++index3)
|
|
{
|
|
if (Main.tile[index1, index3] == null)
|
|
Main.tile[index1, index3] = new Tile();
|
|
Main.tile[index1, index3].frameY += (short) 54;
|
|
for (int index4 = 0; index4 < 4; ++index4)
|
|
Dust.NewDust(new Vector2((float) (index1 * 16), (float) (index3 * 16)), 16, 16, 11);
|
|
}
|
|
AchievementsHelper.NotifyProgressionEvent(22);
|
|
}
|
|
|
|
public static bool OpenDoor(int i, int j, int direction)
|
|
{
|
|
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();
|
|
Tile t = Main.tile[i, j];
|
|
if (t.type != (ushort) 10 || WorldGen.IsLockedDoor(t))
|
|
return false;
|
|
short num1 = 0;
|
|
int frameY = (int) t.frameY;
|
|
int num2 = 0;
|
|
while (frameY >= 54)
|
|
{
|
|
frameY -= 54;
|
|
++num2;
|
|
}
|
|
if (t.frameX >= (short) 54)
|
|
{
|
|
int num3 = (int) t.frameX / 54;
|
|
num2 += 36 * num3;
|
|
num1 += (short) (72 * num3);
|
|
}
|
|
int y = j - frameY / 18;
|
|
int index = i;
|
|
byte color1 = Main.tile[index, y].color();
|
|
if (Main.tile[index, y + 1] == null)
|
|
Main.tile[index, y + 1] = new Tile();
|
|
byte color2 = Main.tile[index, y + 1].color();
|
|
if (Main.tile[index, y + 2] == null)
|
|
Main.tile[index, y + 2] = new Tile();
|
|
byte color3 = Main.tile[index, y + 2].color();
|
|
int x;
|
|
int i1;
|
|
if (direction == -1)
|
|
{
|
|
x = i - 1;
|
|
num1 += (short) 36;
|
|
i1 = i - 1;
|
|
}
|
|
else
|
|
{
|
|
x = i;
|
|
i1 = i + 1;
|
|
}
|
|
for (int j1 = y; j1 < y + 3; ++j1)
|
|
{
|
|
if (Main.tile[i1, j1] == null)
|
|
Main.tile[i1, j1] = new Tile();
|
|
if (Main.tile[i1, j1].active())
|
|
{
|
|
if (!Main.tileCut[(int) Main.tile[i1, j1].type] && Main.tile[i1, j1].type != (ushort) 3 && Main.tile[i1, j1].type != (ushort) 24 && Main.tile[i1, j1].type != (ushort) 52 && Main.tile[i1, j1].type != (ushort) 61 && Main.tile[i1, j1].type != (ushort) 62 && Main.tile[i1, j1].type != (ushort) 69 && Main.tile[i1, j1].type != (ushort) 71 && Main.tile[i1, j1].type != (ushort) 73 && Main.tile[i1, j1].type != (ushort) 74 && Main.tile[i1, j1].type != (ushort) 110 && Main.tile[i1, j1].type != (ushort) 113 && Main.tile[i1, j1].type != (ushort) 115 && Main.tile[i1, j1].type != (ushort) 165)
|
|
return false;
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
Wiring.SkipWire(x, y);
|
|
Wiring.SkipWire(x, y + 1);
|
|
Wiring.SkipWire(x, y + 2);
|
|
Wiring.SkipWire(x + 1, y);
|
|
Wiring.SkipWire(x + 1, y + 1);
|
|
Wiring.SkipWire(x + 1, y + 2);
|
|
}
|
|
int num4 = num2 % 36 * 54;
|
|
SoundEngine.PlaySound(8, i * 16, j * 16);
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].type = (ushort) 11;
|
|
Main.tile[x, y].frameY = (short) num4;
|
|
Main.tile[x, y].frameX = num1;
|
|
Main.tile[x, y].color(color1);
|
|
if (Main.tile[x + 1, y] == null)
|
|
Main.tile[x + 1, y] = new Tile();
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].type = (ushort) 11;
|
|
Main.tile[x + 1, y].frameY = (short) num4;
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num1 + 18);
|
|
Main.tile[x + 1, y].color(color1);
|
|
if (Main.tile[x, y + 1] == null)
|
|
Main.tile[x, y + 1] = new Tile();
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].type = (ushort) 11;
|
|
Main.tile[x, y + 1].frameY = (short) (num4 + 18);
|
|
Main.tile[x, y + 1].frameX = num1;
|
|
Main.tile[x, y + 1].color(color2);
|
|
if (Main.tile[x + 1, y + 1] == null)
|
|
Main.tile[x + 1, y + 1] = new Tile();
|
|
Main.tile[x + 1, y + 1].active(true);
|
|
Main.tile[x + 1, y + 1].type = (ushort) 11;
|
|
Main.tile[x + 1, y + 1].frameY = (short) (num4 + 18);
|
|
Main.tile[x + 1, y + 1].frameX = (short) ((int) num1 + 18);
|
|
Main.tile[x + 1, y + 1].color(color2);
|
|
if (Main.tile[x, y + 2] == null)
|
|
Main.tile[x, y + 2] = new Tile();
|
|
Main.tile[x, y + 2].active(true);
|
|
Main.tile[x, y + 2].type = (ushort) 11;
|
|
Main.tile[x, y + 2].frameY = (short) (num4 + 36);
|
|
Main.tile[x, y + 2].frameX = num1;
|
|
Main.tile[x, y + 2].color(color3);
|
|
if (Main.tile[x + 1, y + 2] == null)
|
|
Main.tile[x + 1, y + 2] = new Tile();
|
|
Main.tile[x + 1, y + 2].active(true);
|
|
Main.tile[x + 1, y + 2].type = (ushort) 11;
|
|
Main.tile[x + 1, y + 2].frameY = (short) (num4 + 36);
|
|
Main.tile[x + 1, y + 2].frameX = (short) ((int) num1 + 18);
|
|
Main.tile[x + 1, y + 2].color(color3);
|
|
for (int i2 = x - 1; i2 <= x + 2; ++i2)
|
|
{
|
|
for (int j2 = y - 1; j2 <= y + 2; ++j2)
|
|
WorldGen.TileFrame(i2, j2);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void Check1xX(int x, int j, short type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int frameX = (int) Main.tile[x, j].frameX;
|
|
int num1 = 3;
|
|
if (type == (short) 92)
|
|
num1 = 6;
|
|
int frameY = (int) Main.tile[x, j].frameY;
|
|
int num2 = 0;
|
|
while (frameY >= 18 * num1)
|
|
{
|
|
frameY -= 18 * num1;
|
|
++num2;
|
|
}
|
|
int num3 = (int) Main.tile[x, j].frameX / 18;
|
|
int num4 = j - frameY / 18;
|
|
bool flag = false;
|
|
for (int index = 0; index < num1; ++index)
|
|
{
|
|
if (Main.tile[x, num4 + index] == null)
|
|
Main.tile[x, num4 + index] = new Tile();
|
|
if (!Main.tile[x, num4 + index].active())
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num4 + index].type != (int) type)
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num4 + index].frameY != index * 18 + num2 * num1 * 18)
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num4 + index].frameX != frameX)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[x, num4 + num1] == null)
|
|
Main.tile[x, num4 + num1] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(x, num4 + num1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int index = 0; index < num1; ++index)
|
|
{
|
|
if ((int) Main.tile[x, num4 + index].type == (int) type)
|
|
WorldGen.KillTile(x, num4 + index);
|
|
}
|
|
if (type == (short) 92)
|
|
Item.NewItem(x * 16, j * 16, 32, 32, 341);
|
|
if (type == (short) 453)
|
|
{
|
|
int Type = num3 >= 2 ? (num3 >= 4 ? 3743 : 3745) : 3744;
|
|
Item.NewItem(x * 16, j * 16, 16, 32, Type);
|
|
}
|
|
if (type == (short) 93)
|
|
{
|
|
int Type = 0;
|
|
if (num2 == 0)
|
|
Type = 342;
|
|
else if (num2 >= 1 && num2 <= 10)
|
|
Type = 2082 + num2 - 1;
|
|
else if (num2 >= 11 && num2 <= 16)
|
|
{
|
|
Type = 2129 + num2 - 11;
|
|
}
|
|
else
|
|
{
|
|
switch (num2)
|
|
{
|
|
case 17:
|
|
Type = 2225;
|
|
break;
|
|
case 18:
|
|
Type = 2533;
|
|
break;
|
|
case 19:
|
|
Type = 2547;
|
|
break;
|
|
case 20:
|
|
Type = 2563;
|
|
break;
|
|
case 21:
|
|
Type = 2578;
|
|
break;
|
|
case 22:
|
|
Type = 2643;
|
|
break;
|
|
case 23:
|
|
Type = 2644;
|
|
break;
|
|
case 24:
|
|
Type = 2645;
|
|
break;
|
|
case 25:
|
|
Type = 2646;
|
|
break;
|
|
case 26:
|
|
Type = 2647;
|
|
break;
|
|
case 27:
|
|
Type = 2819;
|
|
break;
|
|
case 28:
|
|
Type = 3135;
|
|
break;
|
|
case 29:
|
|
Type = 3137;
|
|
break;
|
|
case 30:
|
|
Type = 3136;
|
|
break;
|
|
case 31:
|
|
Type = 3892;
|
|
break;
|
|
case 32:
|
|
Type = 3942;
|
|
break;
|
|
case 33:
|
|
Type = 3969;
|
|
break;
|
|
case 34:
|
|
Type = 4156;
|
|
break;
|
|
case 35:
|
|
Type = 4177;
|
|
break;
|
|
case 36:
|
|
Type = 4198;
|
|
break;
|
|
case 37:
|
|
Type = 4219;
|
|
break;
|
|
case 38:
|
|
Type = 4308;
|
|
break;
|
|
case 39:
|
|
Type = 4577;
|
|
break;
|
|
}
|
|
}
|
|
Item.NewItem(x * 16, j * 16, 32, 32, Type);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Check2xX(int i, int j, ushort type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int index1 = i;
|
|
int frameX1 = (int) Main.tile[i, j].frameX;
|
|
while (frameX1 >= 36)
|
|
frameX1 -= 36;
|
|
if (frameX1 == 18)
|
|
--index1;
|
|
if (Main.tile[index1, j] == null)
|
|
Main.tile[index1, j] = new Tile();
|
|
int num1 = (int) Main.tile[index1, j].frameY / 18;
|
|
int num2 = 3;
|
|
if (type == (ushort) 104)
|
|
num2 = 5;
|
|
if (type == (ushort) 207)
|
|
num2 = 4;
|
|
int num3 = 0;
|
|
while (num1 >= num2)
|
|
{
|
|
num1 -= num2;
|
|
num3 += num2 * 18;
|
|
}
|
|
int y = j - num1;
|
|
if (type == (ushort) 410 && num3 != 0)
|
|
num3 += 2;
|
|
if (Main.tile[index1, y] == null)
|
|
Main.tile[index1, y] = new Tile();
|
|
int frameX2 = (int) Main.tile[index1, j].frameX;
|
|
int frameY = (int) Main.tile[index1, j].frameY;
|
|
bool flag = false;
|
|
for (int index2 = 0; index2 < num2; ++index2)
|
|
{
|
|
if (Main.tile[index1, y + index2] == null)
|
|
Main.tile[index1, y + index2] = new Tile();
|
|
if (!Main.tile[index1, y + index2].active())
|
|
flag = true;
|
|
else if ((int) Main.tile[index1, y + index2].type != (int) type)
|
|
flag = true;
|
|
else if ((int) Main.tile[index1, y + index2].frameY != index2 * 18 + num3)
|
|
flag = true;
|
|
else if ((int) Main.tile[index1, y + index2].frameX != frameX2)
|
|
flag = true;
|
|
if (Main.tile[index1 + 1, y + index2] == null)
|
|
Main.tile[index1 + 1, y + index2] = new Tile();
|
|
if (!Main.tile[index1 + 1, y + index2].active())
|
|
flag = true;
|
|
else if ((int) Main.tile[index1 + 1, y + index2].type != (int) type)
|
|
flag = true;
|
|
else if ((int) Main.tile[index1 + 1, y + index2].frameY != index2 * 18 + num3)
|
|
flag = true;
|
|
else if ((int) Main.tile[index1 + 1, y + index2].frameX != frameX2 + 18)
|
|
flag = true;
|
|
}
|
|
if (type == (ushort) 465 || type == (ushort) 531 || type == (ushort) 591 || type == (ushort) 592)
|
|
{
|
|
for (int index3 = 0; index3 < 2; ++index3)
|
|
{
|
|
if (!WorldGen.SolidTileAllowTopSlope(index1 + index3, y - 1))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!WorldGen.SolidTileAllowBottomSlope(index1, y + num2))
|
|
flag = true;
|
|
if (!WorldGen.SolidTileAllowBottomSlope(index1 + 1, y + num2))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int index4 = 0; index4 < num2; ++index4)
|
|
{
|
|
if ((int) Main.tile[index1, y + index4].type == (int) type)
|
|
WorldGen.KillTile(index1, y + index4);
|
|
if ((int) Main.tile[index1 + 1, y + index4].type == (int) type)
|
|
WorldGen.KillTile(index1 + 1, y + index4);
|
|
}
|
|
if (type == (ushort) 104)
|
|
{
|
|
int num4 = frameX2 / 36;
|
|
int Type = num4 < 1 || num4 > 5 ? (num4 != 6 ? (num4 != 7 ? (num4 < 8 || num4 > 23 ? (num4 != 24 ? (num4 != 25 ? (num4 != 26 ? (num4 != 27 ? (num4 != 28 ? (num4 != 29 ? (num4 != 30 ? (num4 != 31 ? (num4 != 32 ? (num4 != 33 ? (num4 != 34 ? (num4 != 35 ? (num4 != 36 ? (num4 != 37 ? (num4 != 38 ? (num4 != 39 ? (num4 != 40 ? 359 : 4575) : 4306) : 4217) : 4196) : 4175) : 4154) : 3966) : 3940) : 3902) : 3901) : 3900) : 3899) : 3898) : 3127) : 3128) : 3126) : 2809) : 2591 + num4 - 8) : 2575) : 2560) : 2237 + num4 - 1;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, Type);
|
|
}
|
|
if (type == (ushort) 105)
|
|
{
|
|
int num5 = frameX2 / 36 + frameY / 54 % 3 * 55;
|
|
int Type = num5 != 0 ? (num5 != 1 ? (num5 != 43 ? (num5 != 44 ? (num5 != 45 ? (num5 != 46 ? (num5 != 47 ? (num5 != 48 ? (num5 != 49 ? (num5 != 50 ? (num5 < 51 || num5 > 62 ? (num5 < 63 || num5 > 75 ? (num5 != 76 ? (num5 != 77 ? (num5 != 78 ? (num5 != 79 ? 438 + num5 - 2 : 4466) : 4342) : 4360) : 4397) : 3708 + num5 - 63) : 3651 + num5 - 51) : 2672) : 1462) : 1410) : 1409) : 1408) : 1154) : 1153) : 1152) : 52) : 360;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, Type);
|
|
}
|
|
if (type == (ushort) 356)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 3064);
|
|
if (type == (ushort) 456)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 3748);
|
|
if (type == (ushort) 337)
|
|
{
|
|
int num6 = frameX2 / 36;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 2702 + num6);
|
|
}
|
|
if (type == (ushort) 207)
|
|
{
|
|
int Type = frameX2 / 36;
|
|
switch (Type)
|
|
{
|
|
case 0:
|
|
Type = 909;
|
|
break;
|
|
case 1:
|
|
Type = 910;
|
|
break;
|
|
default:
|
|
if (Type >= 2 && Type <= 7)
|
|
{
|
|
Type = 938 + Type;
|
|
break;
|
|
}
|
|
switch (Type)
|
|
{
|
|
case 8:
|
|
Type = 4922;
|
|
break;
|
|
case 9:
|
|
Type = 4417;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, Type);
|
|
}
|
|
if (type == (ushort) 410)
|
|
{
|
|
int num7 = frameX2 / 36;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, num7 + 3536);
|
|
}
|
|
if (type == (ushort) 480)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4054);
|
|
if (type == (ushort) 509)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4318);
|
|
if (type == (ushort) 489)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4074);
|
|
if (type == (ushort) 320)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 2496);
|
|
if (type == (ushort) 349)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 470);
|
|
if (type == (ushort) 506)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4276);
|
|
if (type == (ushort) 545)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4420);
|
|
if (type == (ushort) 465)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 3815);
|
|
if (type == (ushort) 531)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4355);
|
|
if (type == (ushort) 378)
|
|
{
|
|
Item.NewItem(index1 * 16, j * 16, 32, 48, 3202);
|
|
TETrainingDummy.Kill(index1, y);
|
|
}
|
|
if (type == (ushort) 560)
|
|
{
|
|
int num8 = frameX2 / 36;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, num8 + 4599);
|
|
}
|
|
if (type == (ushort) 591)
|
|
{
|
|
int num9 = frameX2 / 36;
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, num9 + 4858);
|
|
}
|
|
if (type == (ushort) 592)
|
|
Item.NewItem(index1 * 16, j * 16, 32, 32, 4867);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void PlaceTight(int x, int y, bool spiders = false)
|
|
{
|
|
if (Main.tile[x, y - 1] == null)
|
|
Main.tile[x, y - 1] = new Tile();
|
|
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();
|
|
WorldGen.PlaceUncheckedStalactite(x, y, WorldGen.genRand.Next(2) == 0, WorldGen.genRand.Next(3), spiders);
|
|
if (Main.tile[x, y].type != (ushort) 165)
|
|
return;
|
|
WorldGen.CheckTight(x, y);
|
|
}
|
|
|
|
public static void PlaceUncheckedStalactite(
|
|
int x,
|
|
int y,
|
|
bool preferSmall,
|
|
int variation,
|
|
bool spiders)
|
|
{
|
|
ushort num1 = 165;
|
|
variation = Utils.Clamp<int>(variation, 0, 2);
|
|
if (WorldGen.SolidTile(x, y - 1) && !Main.tile[x, y].active() && !Main.tile[x, y + 1].active())
|
|
{
|
|
if (spiders)
|
|
{
|
|
int num2 = 108 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num2;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num2;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y - 1].type == (ushort) 147 || Main.tile[x, y - 1].type == (ushort) 161 || Main.tile[x, y - 1].type == (ushort) 163 || Main.tile[x, y - 1].type == (ushort) 164 || Main.tile[x, y - 1].type == (ushort) 200)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num3 = variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num3;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
else
|
|
{
|
|
int num4 = variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num4;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num4;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[x, y - 1].type] || Main.tile[x, y - 1].type == (ushort) 117 || Main.tile[x, y - 1].type == (ushort) 25 || Main.tile[x, y - 1].type == (ushort) 203)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num5 = 54 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num5;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
else
|
|
{
|
|
int num6 = 54 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num6;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num6;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1].type == (ushort) 225)
|
|
{
|
|
int num7 = 162 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num7;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
if (Main.tile[x, y - 1].type == (ushort) 396 || Main.tile[x, y - 1].type == (ushort) 397)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num8 = 378 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num8;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
else
|
|
{
|
|
int num9 = 378 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num9;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num9;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1].type == (ushort) 368)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num10 = 432 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num10;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
else
|
|
{
|
|
int num11 = 432 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num11;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num11;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1].type != (ushort) 367)
|
|
return;
|
|
if (preferSmall)
|
|
{
|
|
int num12 = 486 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num12;
|
|
Main.tile[x, y].frameY = (short) 72;
|
|
}
|
|
else
|
|
{
|
|
int num13 = 486 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num13;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y + 1].type = num1;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameX = (short) num13;
|
|
Main.tile[x, y + 1].frameY = (short) 18;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (spiders || !WorldGen.SolidTile(x, y + 1) || Main.tile[x, y].active() || Main.tile[x, y - 1].active())
|
|
return;
|
|
if (Main.tile[x, y + 1].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[x, y + 1].type] || Main.tile[x, y - 1].type == (ushort) 117 || Main.tile[x, y - 1].type == (ushort) 25 || Main.tile[x, y - 1].type == (ushort) 203)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num14 = 54 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num14;
|
|
Main.tile[x, y].frameY = (short) 90;
|
|
}
|
|
else
|
|
{
|
|
int num15 = 54 + variation * 18;
|
|
Main.tile[x, y - 1].type = num1;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameX = (short) num15;
|
|
Main.tile[x, y - 1].frameY = (short) 36;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num15;
|
|
Main.tile[x, y].frameY = (short) 54;
|
|
}
|
|
}
|
|
if (Main.tile[x, y + 1].type == (ushort) 225)
|
|
{
|
|
int num16 = 162 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num16;
|
|
Main.tile[x, y].frameY = (short) 90;
|
|
}
|
|
if (Main.tile[x, y + 1].type == (ushort) 396 || Main.tile[x, y + 1].type == (ushort) 397)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num17 = 378 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num17;
|
|
Main.tile[x, y].frameY = (short) 90;
|
|
}
|
|
else
|
|
{
|
|
int num18 = 378 + variation * 18;
|
|
Main.tile[x, y - 1].type = num1;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameX = (short) num18;
|
|
Main.tile[x, y - 1].frameY = (short) 36;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num18;
|
|
Main.tile[x, y].frameY = (short) 54;
|
|
}
|
|
}
|
|
if (Main.tile[x, y + 1].type == (ushort) 368)
|
|
{
|
|
if (preferSmall)
|
|
{
|
|
int num19 = 432 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num19;
|
|
Main.tile[x, y].frameY = (short) 90;
|
|
}
|
|
else
|
|
{
|
|
int num20 = 432 + variation * 18;
|
|
Main.tile[x, y - 1].type = num1;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameX = (short) num20;
|
|
Main.tile[x, y - 1].frameY = (short) 36;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num20;
|
|
Main.tile[x, y].frameY = (short) 54;
|
|
}
|
|
}
|
|
if (Main.tile[x, y + 1].type != (ushort) 367)
|
|
return;
|
|
if (preferSmall)
|
|
{
|
|
int num21 = 486 + variation * 18;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num21;
|
|
Main.tile[x, y].frameY = (short) 90;
|
|
}
|
|
else
|
|
{
|
|
int num22 = 486 + variation * 18;
|
|
Main.tile[x, y - 1].type = num1;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameX = (short) num22;
|
|
Main.tile[x, y - 1].frameY = (short) 36;
|
|
Main.tile[x, y].type = num1;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameX = (short) num22;
|
|
Main.tile[x, y].frameY = (short) 54;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool UpdateStalagtiteStyle(int x, int j)
|
|
{
|
|
if (Main.netMode == 1 || Main.tile[x, j] == null)
|
|
return true;
|
|
int style;
|
|
bool fail1;
|
|
WorldGen.GetStalagtiteStyle(x, j, out style, out fail1);
|
|
if (fail1)
|
|
return false;
|
|
bool fail2;
|
|
int desiredStyle;
|
|
int height;
|
|
int y;
|
|
WorldGen.GetDesiredStalagtiteStyle(x, j, out fail2, out desiredStyle, out height, out y);
|
|
if (fail2)
|
|
return false;
|
|
if (style != desiredStyle)
|
|
{
|
|
int num = WorldGen.genRand.Next(3) * 18;
|
|
switch (desiredStyle)
|
|
{
|
|
case 0:
|
|
num += 54;
|
|
break;
|
|
case 1:
|
|
num += 216;
|
|
break;
|
|
case 2:
|
|
num += 270;
|
|
break;
|
|
case 3:
|
|
num += 324;
|
|
break;
|
|
case 4:
|
|
num += 378;
|
|
break;
|
|
case 5:
|
|
num += 432;
|
|
break;
|
|
case 6:
|
|
num += 486;
|
|
break;
|
|
case 7:
|
|
num = num;
|
|
break;
|
|
case 8:
|
|
num += 540;
|
|
break;
|
|
case 9:
|
|
num += 594;
|
|
break;
|
|
case 10:
|
|
num += 648;
|
|
break;
|
|
}
|
|
for (int index = y; index < y + height; ++index)
|
|
Main.tile[x, index].frameX = (short) num;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 2);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private static void GetDesiredStalagtiteStyle(
|
|
int x,
|
|
int j,
|
|
out bool fail,
|
|
out int desiredStyle,
|
|
out int height,
|
|
out int y)
|
|
{
|
|
fail = false;
|
|
desiredStyle = 0;
|
|
height = 1;
|
|
y = j;
|
|
if (Main.tile[x, y].frameY == (short) 72)
|
|
desiredStyle = (int) Main.tile[x, y - 1].type;
|
|
else if (Main.tile[x, y].frameY == (short) 90)
|
|
desiredStyle = (int) Main.tile[x, y + 1].type;
|
|
else if (Main.tile[x, y].frameY >= (short) 36)
|
|
{
|
|
if (Main.tile[x, y].frameY == (short) 54)
|
|
--y;
|
|
height = 2;
|
|
desiredStyle = (int) Main.tile[x, y + 2].type;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].frameY == (short) 18)
|
|
--y;
|
|
height = 2;
|
|
desiredStyle = (int) Main.tile[x, y - 1].type;
|
|
}
|
|
if (desiredStyle == 1 || Main.tileMoss[desiredStyle])
|
|
desiredStyle = 0;
|
|
else if (desiredStyle == 200)
|
|
desiredStyle = 10;
|
|
else if (desiredStyle == 164)
|
|
desiredStyle = 8;
|
|
else if (desiredStyle == 163)
|
|
desiredStyle = 9;
|
|
else if (desiredStyle == 117 || desiredStyle == 402 || desiredStyle == 403)
|
|
desiredStyle = 1;
|
|
else if (desiredStyle == 25 || desiredStyle == 398 || desiredStyle == 400)
|
|
desiredStyle = 2;
|
|
else if (desiredStyle == 203 || desiredStyle == 399 || desiredStyle == 401)
|
|
desiredStyle = 3;
|
|
else if (desiredStyle == 396 || desiredStyle == 397)
|
|
desiredStyle = 4;
|
|
else if (desiredStyle == 367)
|
|
desiredStyle = 6;
|
|
else if (desiredStyle == 368)
|
|
desiredStyle = 5;
|
|
else if (desiredStyle == 161 || desiredStyle == 147)
|
|
desiredStyle = 7;
|
|
else
|
|
fail = true;
|
|
}
|
|
|
|
private static void GetStalagtiteStyle(int x, int y, out int style, out bool fail)
|
|
{
|
|
style = 0;
|
|
fail = false;
|
|
switch ((int) Main.tile[x, y].frameX / 54)
|
|
{
|
|
case 0:
|
|
style = 7;
|
|
break;
|
|
case 1:
|
|
style = 0;
|
|
break;
|
|
case 4:
|
|
style = 1;
|
|
break;
|
|
case 5:
|
|
style = 2;
|
|
break;
|
|
case 6:
|
|
style = 3;
|
|
break;
|
|
case 7:
|
|
style = 4;
|
|
break;
|
|
case 8:
|
|
style = 5;
|
|
break;
|
|
case 9:
|
|
style = 6;
|
|
break;
|
|
case 10:
|
|
style = 8;
|
|
break;
|
|
case 11:
|
|
style = 9;
|
|
break;
|
|
case 12:
|
|
style = 10;
|
|
break;
|
|
default:
|
|
fail = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void CheckTight(int x, int j)
|
|
{
|
|
if (Main.tile[x, j] == null)
|
|
return;
|
|
int j1 = j;
|
|
if (Main.tile[x, j1].frameY == (short) 72)
|
|
{
|
|
if (Main.tile[x, j1 - 1] == null)
|
|
Main.tile[x, j1 - 1] = new Tile();
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
bool flag = false;
|
|
if (!WorldGen.SolidTile(x, j1 - 1))
|
|
flag = true;
|
|
if (!flag && !WorldGen.UpdateStalagtiteStyle(x, j1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
else if (Main.tile[x, j1].frameY == (short) 90)
|
|
{
|
|
if (Main.tile[x, j1 - 1] == null)
|
|
Main.tile[x, j1 - 1] = new Tile();
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
bool flag = false;
|
|
if (!WorldGen.SolidTile(x, j1 + 1))
|
|
flag = true;
|
|
if (!flag && !WorldGen.UpdateStalagtiteStyle(x, j1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
else if (Main.tile[x, j1].frameY >= (short) 36)
|
|
{
|
|
if (Main.tile[x, j1].frameY == (short) 54)
|
|
--j1;
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
if (Main.tile[x, j1 + 2] == null)
|
|
Main.tile[x, j1 + 2] = new Tile();
|
|
bool flag = false;
|
|
if (!WorldGen.SolidTile(x, j1 + 2))
|
|
flag = true;
|
|
if ((int) Main.tile[x, j1 + 1].type != (int) Main.tile[x, j1].type)
|
|
flag = true;
|
|
if ((int) Main.tile[x, j1 + 1].frameX != (int) Main.tile[x, j1].frameX)
|
|
flag = true;
|
|
if (!flag && !WorldGen.UpdateStalagtiteStyle(x, j1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1);
|
|
if ((int) Main.tile[x, j1 + 1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1 + 1);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, j1].frameY == (short) 18)
|
|
--j1;
|
|
if (Main.tile[x, j1 - 1] == null)
|
|
Main.tile[x, j1 - 1] = new Tile();
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
bool flag = false;
|
|
if (!WorldGen.SolidTile(x, j1 - 1))
|
|
flag = true;
|
|
if ((int) Main.tile[x, j1 + 1].type != (int) Main.tile[x, j1].type)
|
|
flag = true;
|
|
if ((int) Main.tile[x, j1 + 1].frameX != (int) Main.tile[x, j1].frameX)
|
|
flag = true;
|
|
if (!flag && !WorldGen.UpdateStalagtiteStyle(x, j1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1);
|
|
if ((int) Main.tile[x, j1 + 1].type == (int) Main.tile[x, j].type)
|
|
WorldGen.KillTile(x, j1 + 1);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
}
|
|
|
|
public static void Place1xX(int x, int y, ushort type, int style = 0)
|
|
{
|
|
int num1 = style * 18;
|
|
int num2 = 3;
|
|
if (type == (ushort) 92)
|
|
num2 = 6;
|
|
bool flag = true;
|
|
for (int index = y - num2 + 1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[x, index] == null)
|
|
Main.tile[x, index] = new Tile();
|
|
if (Main.tile[x, index].active())
|
|
flag = false;
|
|
if (type == (ushort) 93 && Main.tile[x, index].liquid > (byte) 0)
|
|
flag = false;
|
|
}
|
|
if (!flag || !WorldGen.SolidTile2(x, y + 1))
|
|
return;
|
|
for (int index = 0; index < num2; ++index)
|
|
{
|
|
Main.tile[x, y - num2 + 1 + index].active(true);
|
|
Main.tile[x, y - num2 + 1 + index].frameY = (short) (index * 18 + num2 * num1);
|
|
Main.tile[x, y - num2 + 1 + index].frameX = (short) 0;
|
|
Main.tile[x, y - num2 + 1 + index].type = type;
|
|
}
|
|
}
|
|
|
|
public static int checkXmasTreeDrop(int x, int y, int obj)
|
|
{
|
|
int index1 = x;
|
|
int index2 = y;
|
|
if (Main.tile[x, y].frameX < (short) 10)
|
|
{
|
|
index1 -= (int) Main.tile[x, y].frameX;
|
|
index2 -= (int) Main.tile[x, y].frameY;
|
|
}
|
|
int num1 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 1) == 1)
|
|
++num1;
|
|
if (((int) Main.tile[index1, index2].frameY & 2) == 2)
|
|
num1 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 4) == 4)
|
|
num1 += 4;
|
|
int num2 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 8) == 8)
|
|
++num2;
|
|
if (((int) Main.tile[index1, index2].frameY & 16) == 16)
|
|
num2 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 32) == 32)
|
|
num2 += 4;
|
|
int num3 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 64) == 64)
|
|
++num3;
|
|
if (((int) Main.tile[index1, index2].frameY & 128) == 128)
|
|
num3 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 256) == 256)
|
|
num3 += 4;
|
|
if (((int) Main.tile[index1, index2].frameY & 512) == 512)
|
|
num3 += 8;
|
|
int num4 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 1024) == 1024)
|
|
++num4;
|
|
if (((int) Main.tile[index1, index2].frameY & 2048) == 2048)
|
|
num4 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 4096) == 4096)
|
|
num4 += 4;
|
|
if (((int) Main.tile[index1, index2].frameY & 8192) == 8192)
|
|
num4 += 8;
|
|
if (obj == 0 && num1 > 0)
|
|
return num1;
|
|
if (obj == 1 && num2 > 0)
|
|
return num2;
|
|
if (obj == 2 && num3 > 0)
|
|
return num3;
|
|
return obj == 3 && num4 > 0 ? num4 : -1;
|
|
}
|
|
|
|
public static void dropXmasTree(int x, int y, int obj)
|
|
{
|
|
int index1 = x;
|
|
int index2 = y;
|
|
if (Main.tile[x, y].frameX < (short) 10)
|
|
{
|
|
index1 -= (int) Main.tile[x, y].frameX;
|
|
index2 -= (int) Main.tile[x, y].frameY;
|
|
}
|
|
int num1 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 1) == 1)
|
|
++num1;
|
|
if (((int) Main.tile[index1, index2].frameY & 2) == 2)
|
|
num1 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 4) == 4)
|
|
num1 += 4;
|
|
int num2 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 8) == 8)
|
|
++num2;
|
|
if (((int) Main.tile[index1, index2].frameY & 16) == 16)
|
|
num2 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 32) == 32)
|
|
num2 += 4;
|
|
int num3 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 64) == 64)
|
|
++num3;
|
|
if (((int) Main.tile[index1, index2].frameY & 128) == 128)
|
|
num3 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 256) == 256)
|
|
num3 += 4;
|
|
if (((int) Main.tile[index1, index2].frameY & 512) == 512)
|
|
num3 += 8;
|
|
int num4 = 0;
|
|
if (((int) Main.tile[index1, index2].frameY & 1024) == 1024)
|
|
++num4;
|
|
if (((int) Main.tile[index1, index2].frameY & 2048) == 2048)
|
|
num4 += 2;
|
|
if (((int) Main.tile[index1, index2].frameY & 4096) == 4096)
|
|
num4 += 4;
|
|
if (((int) Main.tile[index1, index2].frameY & 8192) == 8192)
|
|
num4 += 8;
|
|
if (obj == 0 && num1 > 0)
|
|
{
|
|
int number = Item.NewItem(x * 16, y * 16, 16, 16, 1874 + num1 - 1);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(21, number: number, number2: 1f);
|
|
}
|
|
else if (obj == 1 && num2 > 0)
|
|
{
|
|
int number = Item.NewItem(x * 16, y * 16, 16, 16, 1878 + num2 - 1);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(21, number: number, number2: 1f);
|
|
}
|
|
else if (obj == 2 && num3 > 0)
|
|
{
|
|
int number = Item.NewItem(x * 16, y * 16, 16, 16, 1884 + num3 - 1);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(21, number: number, number2: 1f);
|
|
}
|
|
else
|
|
{
|
|
if (obj != 3 || num4 <= 0)
|
|
return;
|
|
int number = Item.NewItem(x * 16, y * 16, 16, 16, 1895 + num4 - 1);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(21, number: number, number2: 1f);
|
|
}
|
|
}
|
|
|
|
public static void setXmasTree(int x, int y, int obj, int style)
|
|
{
|
|
int index1 = x;
|
|
int index2 = y;
|
|
if (Main.tile[x, y].frameX < (short) 10)
|
|
{
|
|
index1 -= (int) Main.tile[x, y].frameX;
|
|
index2 -= (int) Main.tile[x, y].frameY;
|
|
}
|
|
if (obj == 0)
|
|
{
|
|
if ((style & 1) == 1)
|
|
Main.tile[index1, index2].frameY |= (short) 1;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -2;
|
|
if ((style & 2) == 2)
|
|
Main.tile[index1, index2].frameY |= (short) 2;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -3;
|
|
if ((style & 4) == 4)
|
|
Main.tile[index1, index2].frameY |= (short) 4;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -5;
|
|
}
|
|
if (obj == 1)
|
|
{
|
|
if ((style & 1) == 1)
|
|
Main.tile[index1, index2].frameY |= (short) 8;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -9;
|
|
if ((style & 2) == 2)
|
|
Main.tile[index1, index2].frameY |= (short) 16;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -17;
|
|
if ((style & 4) == 4)
|
|
Main.tile[index1, index2].frameY |= (short) 32;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -33;
|
|
}
|
|
if (obj == 2)
|
|
{
|
|
if ((style & 1) == 1)
|
|
Main.tile[index1, index2].frameY |= (short) 64;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -65;
|
|
if ((style & 2) == 2)
|
|
Main.tile[index1, index2].frameY |= (short) 128;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -129;
|
|
if ((style & 4) == 4)
|
|
Main.tile[index1, index2].frameY |= (short) 256;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -257;
|
|
if ((style & 8) == 8)
|
|
Main.tile[index1, index2].frameY |= (short) 512;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -513;
|
|
}
|
|
if (obj != 3)
|
|
return;
|
|
if ((style & 1) == 1)
|
|
Main.tile[index1, index2].frameY |= (short) 1024;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -1025;
|
|
if ((style & 2) == 2)
|
|
Main.tile[index1, index2].frameY |= (short) 2048;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -2049;
|
|
if ((style & 4) == 4)
|
|
Main.tile[index1, index2].frameY |= (short) 4096;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -4097;
|
|
if ((style & 8) == 8)
|
|
Main.tile[index1, index2].frameY |= (short) 8192;
|
|
else
|
|
Main.tile[index1, index2].frameY &= (short) -8193;
|
|
}
|
|
|
|
public static int PlaceXmasTree_Direct(
|
|
int x,
|
|
int y,
|
|
int type,
|
|
int style,
|
|
int dir,
|
|
int alternate)
|
|
{
|
|
for (short index1 = 0; index1 < (short) 4; ++index1)
|
|
{
|
|
for (short index2 = 0; index2 < (short) 8; ++index2)
|
|
{
|
|
Tile tile = Main.tile[x + (int) index1, y + (int) index2];
|
|
tile.active(true);
|
|
tile.type = (ushort) type;
|
|
if (index1 == (short) 0 && index2 == (short) 0)
|
|
{
|
|
tile.frameX = (short) 10;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
else
|
|
{
|
|
tile.frameX = index1;
|
|
tile.frameY = index2;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static void PlaceXmasTree(int x, int y, ushort type = 171)
|
|
{
|
|
bool flag = true;
|
|
int num1 = x - 1;
|
|
int num2 = y - 7;
|
|
for (int i = num1; i < num1 + 4; ++i)
|
|
{
|
|
for (int index = num2; index < num2 + 8; ++index)
|
|
{
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (i > num1 && i < num1 + 3 && !WorldGen.SolidTile(i, num2 + 8))
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = 0;
|
|
for (int index1 = num1; index1 < num1 + 4; ++index1)
|
|
{
|
|
int num4 = 0;
|
|
for (int index2 = num2; index2 < num2 + 8; ++index2)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
if (num3 == 0 && num4 == 0)
|
|
{
|
|
Main.tile[index1, index2].frameX = (short) 10;
|
|
Main.tile[index1, index2].frameY = (short) 0;
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index1, index2].frameX = (short) num3;
|
|
Main.tile[index1, index2].frameY = (short) num4;
|
|
}
|
|
Main.tile[index1, index2].type = type;
|
|
Main.tile[index1, index2].active(true);
|
|
++num4;
|
|
}
|
|
++num3;
|
|
}
|
|
}
|
|
|
|
public static void CheckXmasTree(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = x;
|
|
int num2 = y;
|
|
if (Main.tile[x, y].frameX < (short) 10)
|
|
{
|
|
num1 -= (int) Main.tile[x, y].frameX;
|
|
num2 -= (int) Main.tile[x, y].frameY;
|
|
}
|
|
bool flag = false;
|
|
int num3 = 0;
|
|
for (int i = num1; i < num1 + 4; ++i)
|
|
{
|
|
int num4 = 0;
|
|
for (int index = num2; index < num2 + 8; ++index)
|
|
{
|
|
if (Main.tile[i, index].active() && Main.tile[i, index].type == (ushort) 171)
|
|
{
|
|
if (num3 != 0 && num4 != 0 && (int) Main.tile[i, index].frameX != num3 && (int) Main.tile[i, index].frameY != num4)
|
|
flag = true;
|
|
}
|
|
else
|
|
flag = true;
|
|
++num4;
|
|
}
|
|
++num3;
|
|
if (i > num1 && i < num1 + 3 && !WorldGen.SolidTile2(i, num2 + 8))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num1; i < num1 + 4; ++i)
|
|
{
|
|
for (int j = num2; j < num2 + 8; ++j)
|
|
{
|
|
if (Main.tile[i, j].type == (ushort) 171)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1873);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place2xX(int x, int y, ushort type, int style = 0)
|
|
{
|
|
int num1 = style * 36;
|
|
int num2 = 0;
|
|
int num3 = 3;
|
|
if (type == (ushort) 105 && style == 34)
|
|
{
|
|
type = (ushort) 349;
|
|
style = 0;
|
|
num1 = 0;
|
|
}
|
|
if (type == (ushort) 105)
|
|
{
|
|
int num4 = style / 55;
|
|
num1 -= 1980 * num4;
|
|
num2 += 54 * num4;
|
|
}
|
|
if (type == (ushort) 104)
|
|
num3 = 5;
|
|
if (type == (ushort) 207)
|
|
num3 = 4;
|
|
bool flag = true;
|
|
for (int index = y - num3 + 1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[x, index] == null)
|
|
Main.tile[x, index] = new Tile();
|
|
if (Main.tile[x, index].active())
|
|
flag = false;
|
|
if (Main.tile[x + 1, index] == null)
|
|
Main.tile[x + 1, index] = new Tile();
|
|
if (Main.tile[x + 1, index].active())
|
|
flag = false;
|
|
}
|
|
if (!flag || !WorldGen.SolidTile2(x, y + 1) || !WorldGen.SolidTile2(x + 1, y + 1))
|
|
return;
|
|
for (int index = 0; index < num3; ++index)
|
|
{
|
|
Main.tile[x, y - num3 + 1 + index].active(true);
|
|
Main.tile[x, y - num3 + 1 + index].frameY = (short) (num2 + index * 18);
|
|
Main.tile[x, y - num3 + 1 + index].frameX = (short) num1;
|
|
Main.tile[x, y - num3 + 1 + index].type = type;
|
|
Main.tile[x + 1, y - num3 + 1 + index].active(true);
|
|
Main.tile[x + 1, y - num3 + 1 + index].frameY = (short) (num2 + index * 18);
|
|
Main.tile[x + 1, y - num3 + 1 + index].frameX = (short) (num1 + 18);
|
|
Main.tile[x + 1, y - num3 + 1 + index].type = type;
|
|
}
|
|
}
|
|
|
|
public static int GetItemDrop_Benches(int style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
return 2397;
|
|
case 2:
|
|
return 2398;
|
|
case 3:
|
|
return 2399;
|
|
case 4:
|
|
return 2400;
|
|
case 5:
|
|
return 2401;
|
|
case 6:
|
|
return 2402;
|
|
case 7:
|
|
return 2403;
|
|
case 8:
|
|
return 2404;
|
|
case 9:
|
|
return 2405;
|
|
case 10:
|
|
return 2406;
|
|
case 11:
|
|
return 2407;
|
|
case 12:
|
|
return 2408;
|
|
case 13:
|
|
return 2409;
|
|
case 14:
|
|
return 2410;
|
|
case 15:
|
|
return 2411;
|
|
case 16:
|
|
return 2412;
|
|
case 17:
|
|
return 2413;
|
|
case 18:
|
|
return 2414;
|
|
case 19:
|
|
return 2415;
|
|
case 20:
|
|
return 2416;
|
|
case 21:
|
|
return 2521;
|
|
case 22:
|
|
return 2527;
|
|
case 23:
|
|
return 2539;
|
|
case 24:
|
|
return 858;
|
|
case 25:
|
|
return 2582;
|
|
case 26:
|
|
return 2634;
|
|
case 27:
|
|
return 2635;
|
|
case 28:
|
|
return 2636;
|
|
case 29:
|
|
return 2823;
|
|
case 30:
|
|
return 3150;
|
|
case 31:
|
|
return 3152;
|
|
case 32:
|
|
return 3151;
|
|
case 33:
|
|
return 3918;
|
|
case 34:
|
|
return 3919;
|
|
case 35:
|
|
return 3947;
|
|
case 36:
|
|
return 3973;
|
|
case 37:
|
|
return 4161;
|
|
case 38:
|
|
return 4182;
|
|
case 39:
|
|
return 4203;
|
|
case 40:
|
|
return 4224;
|
|
case 41:
|
|
return 4313;
|
|
case 42:
|
|
return 4582;
|
|
case 43:
|
|
return 4993;
|
|
default:
|
|
return 335;
|
|
}
|
|
}
|
|
|
|
public static int GetItemDrop_PicnicTables(int style) => style == 0 || style != 1 ? 4064 : 4065;
|
|
|
|
public static int GetItemDrop_Chair(int style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case 1:
|
|
return 358;
|
|
case 2:
|
|
return 628;
|
|
case 3:
|
|
return 629;
|
|
case 4:
|
|
return 630;
|
|
case 5:
|
|
return 806;
|
|
case 6:
|
|
return 807;
|
|
case 7:
|
|
return 808;
|
|
case 8:
|
|
return 809;
|
|
case 9:
|
|
return 810;
|
|
case 10:
|
|
return 826;
|
|
case 11:
|
|
return 915;
|
|
case 12:
|
|
return 1143;
|
|
case 13:
|
|
return 1396;
|
|
case 14:
|
|
return 1399;
|
|
case 15:
|
|
return 1402;
|
|
case 16:
|
|
return 1459;
|
|
case 17:
|
|
return 1509;
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
case 23:
|
|
return 1703 + style - 18;
|
|
case 24:
|
|
return 1792;
|
|
case 25:
|
|
return 1814;
|
|
case 26:
|
|
return 1925;
|
|
case 27:
|
|
return 2228;
|
|
case 28:
|
|
return 2288;
|
|
case 29:
|
|
return 2524;
|
|
case 30:
|
|
return 2557;
|
|
case 31:
|
|
return 2572;
|
|
case 32:
|
|
return 2812;
|
|
case 33:
|
|
return 3174;
|
|
case 34:
|
|
return 3176;
|
|
case 35:
|
|
return 3175;
|
|
case 36:
|
|
return 3889;
|
|
case 37:
|
|
return 3937;
|
|
case 38:
|
|
return 3963;
|
|
case 39:
|
|
return 4151;
|
|
case 40:
|
|
return 4172;
|
|
case 41:
|
|
return 4193;
|
|
case 42:
|
|
return 4214;
|
|
case 43:
|
|
return 4304;
|
|
case 44:
|
|
return 4572;
|
|
default:
|
|
return 34;
|
|
}
|
|
}
|
|
|
|
public static int GetItemDrop_Toilet(int style)
|
|
{
|
|
int num = 4096 + style;
|
|
switch (style)
|
|
{
|
|
case 32:
|
|
num = 4141;
|
|
break;
|
|
case 33:
|
|
num = 4165;
|
|
break;
|
|
case 34:
|
|
num = 4186;
|
|
break;
|
|
case 35:
|
|
num = 4207;
|
|
break;
|
|
case 36:
|
|
num = 4228;
|
|
break;
|
|
case 37:
|
|
num = 4316;
|
|
break;
|
|
case 38:
|
|
num = 4586;
|
|
break;
|
|
case 39:
|
|
num = 4731;
|
|
break;
|
|
}
|
|
if (num > 4731)
|
|
num = 4731;
|
|
return num;
|
|
}
|
|
|
|
public static void Check1x2(int x, int j, ushort type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int j1 = j;
|
|
bool flag = true;
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
int frameY = (int) Main.tile[x, j1].frameY;
|
|
int style = 0;
|
|
while (frameY >= 40)
|
|
{
|
|
frameY -= 40;
|
|
++style;
|
|
}
|
|
if (frameY == 18)
|
|
--j1;
|
|
int num1 = (int) Main.tile[x, j1].frameX / 18;
|
|
if (Main.tile[x, j1].frameX == (short) -1)
|
|
num1 = (int) Main.tile[x, j1 + 1].frameX / 18;
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if ((int) Main.tile[x, j1].frameY == 40 * style && (int) Main.tile[x, j1 + 1].frameY == 40 * style + 18 && (int) Main.tile[x, j1].type == (int) type && (int) Main.tile[x, j1 + 1].type == (int) type)
|
|
flag = false;
|
|
if (Main.tile[x, j1 + 2] == null)
|
|
Main.tile[x, j1 + 2] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(x, j1 + 2) && !TileID.Sets.Platforms[(int) Main.tile[x, j1 + 2].type])
|
|
flag = true;
|
|
if (Main.tile[x, j1].type == (ushort) 20)
|
|
{
|
|
int num2 = (int) Main.tile[x, j1].frameX / 54;
|
|
int type1 = (int) Main.tile[x, j1 + 2].type;
|
|
int num3 = -1;
|
|
switch (type1)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
num3 = 0;
|
|
break;
|
|
case 23:
|
|
num3 = 3;
|
|
break;
|
|
case 53:
|
|
num3 = 6;
|
|
break;
|
|
case 60:
|
|
num3 = 2;
|
|
break;
|
|
case 109:
|
|
case 492:
|
|
num3 = 5;
|
|
break;
|
|
case 112:
|
|
num3 = 9;
|
|
break;
|
|
case 116:
|
|
num3 = 7;
|
|
break;
|
|
case 147:
|
|
num3 = 1;
|
|
break;
|
|
case 199:
|
|
num3 = 4;
|
|
break;
|
|
case 234:
|
|
num3 = 8;
|
|
break;
|
|
default:
|
|
flag = true;
|
|
break;
|
|
}
|
|
if (!flag && num2 != num3)
|
|
{
|
|
int num4 = 54 * num3 + WorldGen.genRand.Next(3) * 18;
|
|
Main.tile[x, j1].frameX = (short) num4;
|
|
Main.tile[x, j1 + 1].frameX = (short) num4;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) type)
|
|
WorldGen.KillTile(x, j1);
|
|
if ((int) Main.tile[x, j1 + 1].type == (int) type)
|
|
WorldGen.KillTile(x, j1 + 1);
|
|
if (type == (ushort) 216)
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 970 + style);
|
|
if (type == (ushort) 338)
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 2738);
|
|
if (type == (ushort) 390)
|
|
Item.NewItem(x * 16, j1 * 16, 16, 32, 3253);
|
|
if (type == (ushort) 493)
|
|
{
|
|
int Type = 0;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
Type = 4083;
|
|
break;
|
|
case 1:
|
|
Type = 4084;
|
|
break;
|
|
case 2:
|
|
Type = 4085;
|
|
break;
|
|
case 3:
|
|
Type = 4086;
|
|
break;
|
|
case 4:
|
|
Type = 4087;
|
|
break;
|
|
case 5:
|
|
Type = 4088;
|
|
break;
|
|
}
|
|
if (Type > 0)
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, Type);
|
|
}
|
|
if (type == (ushort) 15)
|
|
{
|
|
int itemDropChair = WorldGen.GetItemDrop_Chair(style);
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, itemDropChair);
|
|
}
|
|
if (type == (ushort) 497)
|
|
{
|
|
int itemDropToilet = WorldGen.GetItemDrop_Toilet(style);
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, itemDropToilet);
|
|
}
|
|
else if (type == (ushort) 134)
|
|
{
|
|
if (style == 1)
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 1220);
|
|
else
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 525);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void CheckOnTable1x1(int x, int y, int type)
|
|
{
|
|
if (Main.tile[x, y + 1] == null)
|
|
return;
|
|
if (Main.tile[x, y + 1].topSlope())
|
|
{
|
|
if (TileID.Sets.Platforms[(int) Main.tile[x, y + 1].type])
|
|
{
|
|
if (Main.tile[x, y + 1].blockType() == 3 && Main.tile[x - 1, y + 1].active() && Main.tile[x - 1, y + 1].blockType() == 0 && TileID.Sets.Platforms[(int) Main.tile[x - 1, y + 1].type] || Main.tile[x, y + 1].blockType() == 2 && Main.tile[x + 1, y + 1].active() && Main.tile[x + 1, y + 1].blockType() == 0 && TileID.Sets.Platforms[(int) Main.tile[x + 1, y + 1].type])
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y + 1].active() && Main.tileTable[(int) Main.tile[x, y + 1].type] && !Main.tile[x, y + 1].halfBrick())
|
|
return;
|
|
if (type == 78)
|
|
{
|
|
if (WorldGen.SolidTileAllowBottomSlope(x, y + 1))
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
}
|
|
|
|
public static void CheckSign(int x, int y, ushort type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = x - 2;
|
|
int num2 = x + 3;
|
|
int num3 = y - 2;
|
|
int num4 = y + 3;
|
|
if (num1 < 0 || num2 > Main.maxTilesX || num3 < 0 || num4 > Main.maxTilesY)
|
|
return;
|
|
bool flag = false;
|
|
for (int index1 = num1; index1 < num2; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num4; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
}
|
|
}
|
|
int num5 = (int) Main.tile[x, y].frameX / 18;
|
|
int num6 = (int) Main.tile[x, y].frameY / 18;
|
|
int num7 = num5 % 2;
|
|
int num8 = num6 % 2;
|
|
int index3 = x - num7;
|
|
int index4 = y - num8;
|
|
int num9 = (int) Main.tile[index3, index4].frameX / 18 / 2;
|
|
int num10 = (int) Main.tile[index3, index4].frameY / 18 / 2;
|
|
int num11 = (int) Main.tile[x, y].frameX / 18;
|
|
int num12 = 0;
|
|
while (num11 > 1)
|
|
{
|
|
num11 -= 2;
|
|
++num12;
|
|
}
|
|
int num13 = index3;
|
|
int num14 = index3 + 2;
|
|
int num15 = index4;
|
|
int num16 = index4 + 2;
|
|
int num17 = 0;
|
|
for (int index5 = num13; index5 < num14; ++index5)
|
|
{
|
|
int num18 = 0;
|
|
for (int index6 = num15; index6 < num16; ++index6)
|
|
{
|
|
if (!Main.tile[index5, index6].active() || (int) Main.tile[index5, index6].type != (int) type)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
if ((int) Main.tile[index5, index6].frameX / 18 != num17 + num9 * 2 || (int) Main.tile[index5, index6].frameY / 18 != num18 + num10 * 2)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
++num18;
|
|
}
|
|
++num17;
|
|
}
|
|
if (!flag)
|
|
{
|
|
if (type == (ushort) 85)
|
|
{
|
|
if (WorldGen.SolidTileAllowBottomSlope(index3, index4 + 2) && WorldGen.SolidTileAllowBottomSlope(index3 + 1, index4 + 2))
|
|
num9 = num12;
|
|
else
|
|
flag = true;
|
|
}
|
|
else if (WorldGen.TopEdgeCanBeAttachedTo(index3, index4 + 2) && WorldGen.TopEdgeCanBeAttachedTo(index3 + 1, index4 + 2))
|
|
num9 = 0;
|
|
else if (WorldGen.BottomEdgeCanBeAttachedTo(index3, index4 - 1) && WorldGen.BottomEdgeCanBeAttachedTo(index3 + 1, index4 - 1))
|
|
num9 = 1;
|
|
else if (WorldGen.RightEdgeCanBeAttachedTo(index3 - 1, index4) && WorldGen.RightEdgeCanBeAttachedTo(index3 - 1, index4 + 1))
|
|
num9 = 2;
|
|
else if (WorldGen.LeftEdgeCanBeAttachedTo(index3 + 2, index4) && WorldGen.LeftEdgeCanBeAttachedTo(index3 + 2, index4 + 1))
|
|
num9 = 3;
|
|
else if (Main.tile[index3, index4].wall > (ushort) 0 && Main.tile[index3 + 1, index4].wall > (ushort) 0 && Main.tile[index3, index4 + 1].wall > (ushort) 0 && Main.tile[index3 + 1, index4 + 1].wall > (ushort) 0)
|
|
num9 = 4;
|
|
else
|
|
flag = true;
|
|
}
|
|
if (flag)
|
|
{
|
|
if (type == (ushort) 395)
|
|
{
|
|
int key = TEItemFrame.Find(index3, index4);
|
|
if (key != -1 && ((TEItemFrame) TileEntity.ByID[key]).item.stack > 0)
|
|
{
|
|
((TEItemFrame) TileEntity.ByID[key]).DropItem();
|
|
if (Main.netMode != 2)
|
|
Main.LocalPlayer.InterruptItemUsageIfOverTile(395);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num13; i < num14; ++i)
|
|
{
|
|
for (int j = num15; j < num16; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == (int) type)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (type != (ushort) 395)
|
|
Sign.KillSign(index3, index4);
|
|
if (type == (ushort) 85)
|
|
{
|
|
int Type = 321;
|
|
if (num12 >= 6 && num12 <= 10)
|
|
Type = 3229 + num12 - 6;
|
|
else if (num12 >= 1 && num12 <= 5)
|
|
Type = 1173 + num12 - 1;
|
|
Item.NewItem(x * 16, y * 16, 32, 32, Type);
|
|
if (Main.netMode != 1 && WorldGen.genRand.Next(2) == 0 && NPC.CountNPCS(316) < 2)
|
|
{
|
|
int closest = (int) Player.FindClosest(new Vector2((float) (x * 16), (float) (y * 16)), 16, 16);
|
|
if (Main.player[closest].ZoneGraveyard || !Main.dayTime || (double) y > Main.worldSurface)
|
|
NPC.SpawnOnPlayer(closest, 316);
|
|
}
|
|
}
|
|
else if (type == (ushort) 395)
|
|
{
|
|
Item.NewItem(index3 * 16, index4 * 16, 32, 32, 3270);
|
|
TEItemFrame.Kill(index3, index4);
|
|
}
|
|
else if (type == (ushort) 425)
|
|
Item.NewItem(index3 * 16, index4 * 16, 32, 32, 3617);
|
|
else if (type == (ushort) 573)
|
|
Item.NewItem(index3 * 16, index4 * 16, 32, 32, 4710);
|
|
else if (type == (ushort) 511)
|
|
Item.NewItem(index3 * 16, index4 * 16, 32, 32, 4320);
|
|
else if (type == (ushort) 510)
|
|
Item.NewItem(index3 * 16, index4 * 16, 32, 32, 4319);
|
|
else
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 171);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
else
|
|
{
|
|
int num19 = 36 * num9;
|
|
for (int index7 = 0; index7 < 2; ++index7)
|
|
{
|
|
for (int index8 = 0; index8 < 2; ++index8)
|
|
{
|
|
Main.tile[index3 + index7, index4 + index8].active(true);
|
|
Main.tile[index3 + index7, index4 + index8].type = type;
|
|
Main.tile[index3 + index7, index4 + index8].frameX = (short) (num19 + 18 * index7);
|
|
Main.tile[index3 + index7, index4 + index8].frameY = (short) (18 * index8 + num10 * 36);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool PlaceSign(int x, int y, ushort type, int Style = 0)
|
|
{
|
|
int num1 = x - 2;
|
|
int num2 = x + 3;
|
|
int num3 = y - 2;
|
|
int num4 = y + 3;
|
|
if (num1 < 0 || num2 > Main.maxTilesX || num3 < 0 || num4 > Main.maxTilesY)
|
|
return false;
|
|
for (int index1 = num1; index1 < num2; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num4; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
}
|
|
}
|
|
int index3 = x;
|
|
int index4 = y;
|
|
int num5 = 0;
|
|
if (type == (ushort) 55 || type == (ushort) 425 || type == (ushort) 510 || type == (ushort) 511)
|
|
{
|
|
if (WorldGen.SolidTile2(x, y + 1) && WorldGen.SolidTile2(x + 1, y + 1))
|
|
{
|
|
--index4;
|
|
num5 = 0;
|
|
}
|
|
else if (Main.tile[x, y - 1].nactive() && Main.tileSolid[(int) Main.tile[x, y - 1].type] && !Main.tileSolidTop[(int) Main.tile[x, y - 1].type] && Main.tile[x + 1, y - 1].nactive() && Main.tileSolid[(int) Main.tile[x + 1, y - 1].type] && !Main.tileSolidTop[(int) Main.tile[x + 1, y - 1].type])
|
|
num5 = 1;
|
|
else if (Main.tile[x - 1, y].nactive() && Main.tileSolid[(int) Main.tile[x - 1, y].type] && !Main.tileSolidTop[(int) Main.tile[x - 1, y].type] && !Main.tileNoAttach[(int) Main.tile[x - 1, y].type] && Main.tile[x - 1, y + 1].nactive() && Main.tileSolid[(int) Main.tile[x - 1, y + 1].type] && !Main.tileSolidTop[(int) Main.tile[x - 1, y + 1].type] && !Main.tileNoAttach[(int) Main.tile[x - 1, y + 1].type])
|
|
num5 = 2;
|
|
else if (Main.tile[x + 1, y].nactive() && Main.tileSolid[(int) Main.tile[x + 1, y].type] && !Main.tileSolidTop[(int) Main.tile[x + 1, y].type] && !Main.tileNoAttach[(int) Main.tile[x + 1, y].type] && Main.tile[x + 1, y + 1].nactive() && Main.tileSolid[(int) Main.tile[x + 1, y + 1].type] && !Main.tileSolidTop[(int) Main.tile[x + 1, y + 1].type] && !Main.tileNoAttach[(int) Main.tile[x + 1, y + 1].type])
|
|
{
|
|
--index3;
|
|
num5 = 3;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[index3, index4].wall <= (ushort) 0 || Main.tile[index3 + 1, index4].wall <= (ushort) 0 || Main.tile[index3, index4 + 1].wall <= (ushort) 0 || Main.tile[index3 + 1, index4 + 1].wall <= (ushort) 0)
|
|
return false;
|
|
num5 = 4;
|
|
}
|
|
}
|
|
if (Main.tile[index3, index4].active() || Main.tile[index3 + 1, index4].active() || Main.tile[index3, index4 + 1].active() || Main.tile[index3 + 1, index4 + 1].active())
|
|
return false;
|
|
int num6 = 36 * num5;
|
|
for (int index5 = 0; index5 < 2; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < 2; ++index6)
|
|
{
|
|
Main.tile[index3 + index5, index4 + index6].active(true);
|
|
Main.tile[index3 + index5, index4 + index6].type = type;
|
|
Main.tile[index3 + index5, index4 + index6].frameX = (short) (num6 + 18 * index5);
|
|
Main.tile[index3 + index5, index4 + index6].frameY = (short) (18 * index6);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool Place2x2Horizontal(int x, int y, ushort type, int Style = 0)
|
|
{
|
|
int num1 = x - 2;
|
|
int num2 = x + 3;
|
|
int num3 = y - 2;
|
|
int num4 = y + 3;
|
|
if (num1 < 0 || num2 > Main.maxTilesX || num3 < 0 || num4 > Main.maxTilesY)
|
|
return false;
|
|
for (int index1 = num1; index1 < num2; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num4; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
}
|
|
}
|
|
int index3 = x;
|
|
int num5 = y;
|
|
if (!WorldGen.SolidTile2(x, y + 1) || !WorldGen.SolidTile2(x + 1, y + 1))
|
|
return false;
|
|
int index4 = num5 - 1;
|
|
int num6 = Style;
|
|
if (Main.tile[index3, index4].active() || Main.tile[index3 + 1, index4].active() || Main.tile[index3, index4 + 1].active() || Main.tile[index3 + 1, index4 + 1].active())
|
|
return false;
|
|
int num7 = 36 * num6;
|
|
for (int index5 = 0; index5 < 2; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < 2; ++index6)
|
|
{
|
|
Main.tile[index3 + index5, index4 + index6].active(true);
|
|
Main.tile[index3 + index5, index4 + index6].type = type;
|
|
Main.tile[index3 + index5, index4 + index6].frameX = (short) (num7 + 18 * index5);
|
|
Main.tile[index3 + index5, index4 + index6].frameY = (short) (18 * index6);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static Color paintColor(int color)
|
|
{
|
|
Color white = Color.White;
|
|
int num = color;
|
|
if (num == 1 || num == 13)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = (byte) 0;
|
|
white.B = (byte) 0;
|
|
}
|
|
if (num == 2 || num == 14)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = (byte) 127;
|
|
white.B = (byte) 0;
|
|
}
|
|
if (num == 3 || num == 15)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = byte.MaxValue;
|
|
white.B = (byte) 0;
|
|
}
|
|
if (num == 4 || num == 16)
|
|
{
|
|
white.R = (byte) 127;
|
|
white.G = byte.MaxValue;
|
|
white.B = (byte) 0;
|
|
}
|
|
if (num == 5 || num == 17)
|
|
{
|
|
white.R = (byte) 0;
|
|
white.G = byte.MaxValue;
|
|
white.B = (byte) 0;
|
|
}
|
|
if (num == 6 || num == 18)
|
|
{
|
|
white.R = (byte) 0;
|
|
white.G = byte.MaxValue;
|
|
white.B = (byte) 127;
|
|
}
|
|
if (num == 7 || num == 19)
|
|
{
|
|
white.R = (byte) 0;
|
|
white.G = byte.MaxValue;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 8 || num == 20)
|
|
{
|
|
white.R = (byte) 0;
|
|
white.G = (byte) 127;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 9 || num == 21)
|
|
{
|
|
white.R = (byte) 0;
|
|
white.G = (byte) 0;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 10 || num == 22)
|
|
{
|
|
white.R = (byte) 127;
|
|
white.G = (byte) 0;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 11 || num == 23)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = (byte) 0;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 12 || num == 24)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = (byte) 0;
|
|
white.B = (byte) 127;
|
|
}
|
|
if (num == 25)
|
|
{
|
|
white.R = (byte) 75;
|
|
white.G = (byte) 75;
|
|
white.B = (byte) 75;
|
|
}
|
|
if (num == 26)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = byte.MaxValue;
|
|
white.B = byte.MaxValue;
|
|
}
|
|
if (num == 27)
|
|
{
|
|
white.R = (byte) 175;
|
|
white.G = (byte) 175;
|
|
white.B = (byte) 175;
|
|
}
|
|
if (num == 28)
|
|
{
|
|
white.R = byte.MaxValue;
|
|
white.G = (byte) 178;
|
|
white.B = (byte) 125;
|
|
}
|
|
if (num == 29)
|
|
{
|
|
white.R = (byte) 25;
|
|
white.G = (byte) 25;
|
|
white.B = (byte) 25;
|
|
}
|
|
if (num == 30)
|
|
{
|
|
white.R = (byte) 200;
|
|
white.G = (byte) 200;
|
|
white.B = (byte) 200;
|
|
white.A = (byte) 150;
|
|
}
|
|
return white;
|
|
}
|
|
|
|
public static void paintEffect(int x, int y, byte color, byte oldColor)
|
|
{
|
|
int color1 = (int) color;
|
|
if (color == (byte) 0)
|
|
color1 = (int) oldColor;
|
|
Color newColor = WorldGen.paintColor(color1);
|
|
for (int index1 = 0; index1 < 10; ++index1)
|
|
{
|
|
int index2 = Dust.NewDust(new Vector2((float) (x * 16), (float) (y * 16)), 16, 16, 143, Alpha: 50, newColor: newColor);
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
Main.dust[index2].noGravity = true;
|
|
Main.dust[index2].scale *= 1.2f;
|
|
}
|
|
else
|
|
Main.dust[index2].scale *= 0.5f;
|
|
}
|
|
}
|
|
|
|
public static bool paintTile(int x, int y, byte color, bool broadCast = false)
|
|
{
|
|
if (Main.tile[x, y] == null || !Main.tile[x, y].active())
|
|
return false;
|
|
byte oldColor = Main.tile[x, y].color();
|
|
Main.tile[x, y].color(color);
|
|
if (broadCast)
|
|
NetMessage.SendData(63, number: x, number2: ((float) y), number3: ((float) color));
|
|
WorldGen.paintEffect(x, y, color, oldColor);
|
|
return true;
|
|
}
|
|
|
|
public static bool paintWall(int x, int y, byte color, bool broadCast = false)
|
|
{
|
|
if (Main.tile[x, y] == null || Main.tile[x, y].wall == (ushort) 0)
|
|
return false;
|
|
byte oldColor = Main.tile[x, y].wallColor();
|
|
Main.tile[x, y].wallColor(color);
|
|
if (broadCast)
|
|
NetMessage.SendData(64, number: x, number2: ((float) y), number3: ((float) color));
|
|
WorldGen.paintEffect(x, y, color, oldColor);
|
|
return true;
|
|
}
|
|
|
|
public static void Place3x3Wall(int x, int y, ushort type, int style)
|
|
{
|
|
int num1 = x - 1;
|
|
int num2 = y - 1;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num1 + 3; ++index1)
|
|
{
|
|
for (int index2 = num2; index2 < num2 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall == (ushort) 0)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = 0;
|
|
for (; style > 35; style -= 36)
|
|
++num3;
|
|
int num4 = style * 54;
|
|
int num5 = num3 * 54;
|
|
for (int index3 = num1; index3 < num1 + 3; ++index3)
|
|
{
|
|
for (int index4 = num2; index4 < num2 + 3; ++index4)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = type;
|
|
Main.tile[index3, index4].frameX = (short) (num4 + 18 * (index3 - num1));
|
|
Main.tile[index3, index4].frameY = (short) (num5 + 18 * (index4 - num2));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check3x3Wall(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int type = (int) Main.tile[x, y].type;
|
|
int num1 = 0;
|
|
int num2 = 0;
|
|
int num3 = (int) Main.tile[x, y].frameX / 18;
|
|
while (num3 >= 3)
|
|
{
|
|
num3 -= 3;
|
|
++num1;
|
|
}
|
|
int num4 = x - num3;
|
|
int num5 = (int) Main.tile[x, y].frameY / 18;
|
|
while (num5 >= 3)
|
|
{
|
|
num5 -= 3;
|
|
++num2;
|
|
}
|
|
int num6 = y - num5;
|
|
int num7 = num2 * 54;
|
|
int num8 = num1 * 54;
|
|
for (int index1 = num4; index1 < num4 + 3; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num6 + 3; ++index2)
|
|
{
|
|
if ((int) Main.tile[index1, index2].type != type || !Main.tile[index1, index2].active() || Main.tile[index1, index2].wall <= (ushort) 0 || (int) Main.tile[index1, index2].frameX != num8 + (index1 - num4) * 18 || (int) Main.tile[index1, index2].frameY != num7 + (index2 - num6) * 18)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num4; i < num4 + 3; ++i)
|
|
{
|
|
for (int j = num6; j < num6 + 3; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == type && Main.tile[i, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
case 240:
|
|
int num9 = num1 + num2 * 36;
|
|
switch (num9)
|
|
{
|
|
case 18:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1419);
|
|
break;
|
|
case 19:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1420);
|
|
break;
|
|
case 20:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1427);
|
|
break;
|
|
case 21:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1428);
|
|
break;
|
|
case 33:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1574);
|
|
break;
|
|
case 34:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1575);
|
|
break;
|
|
case 35:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1576);
|
|
break;
|
|
case 36:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1855);
|
|
break;
|
|
case 37:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1856);
|
|
break;
|
|
case 38:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1960);
|
|
break;
|
|
case 39:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1961);
|
|
break;
|
|
case 40:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1962);
|
|
break;
|
|
case 54:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2489);
|
|
break;
|
|
case 55:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2589);
|
|
break;
|
|
case 56:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3357);
|
|
break;
|
|
case 57:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3358);
|
|
break;
|
|
case 58:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3359);
|
|
break;
|
|
case 59:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3595);
|
|
break;
|
|
case 60:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3867);
|
|
break;
|
|
case 61:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3866);
|
|
break;
|
|
case 62:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3868);
|
|
break;
|
|
case 69:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4660);
|
|
break;
|
|
case 70:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4723);
|
|
break;
|
|
case 71:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4724);
|
|
break;
|
|
case 72:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4783);
|
|
break;
|
|
case 73:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4958);
|
|
break;
|
|
default:
|
|
if (num9 >= 63 && num9 <= 68)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4626 + num9 - 63);
|
|
break;
|
|
}
|
|
if (num9 >= 41 && num9 <= 45)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2114 + num9 - 41);
|
|
break;
|
|
}
|
|
if (num9 >= 46 && num9 <= 53)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2442 + num9 - 46);
|
|
break;
|
|
}
|
|
if (num9 >= 22 && num9 <= 25)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1440 + num9 - 22);
|
|
break;
|
|
}
|
|
if (num9 >= 26 && num9 <= 29)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1496 + num9 - 26);
|
|
break;
|
|
}
|
|
if (num9 >= 30 && num9 <= 32)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1538 + num9 - 30);
|
|
break;
|
|
}
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1360 + num9);
|
|
break;
|
|
}
|
|
break;
|
|
case 440:
|
|
int Type1 = -1;
|
|
int Type2 = -1;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
Type1 = 3644;
|
|
Type2 = 1526;
|
|
break;
|
|
case 1:
|
|
Type1 = 3645;
|
|
Type2 = 1524;
|
|
break;
|
|
case 2:
|
|
Type1 = 3646;
|
|
Type2 = 1525;
|
|
break;
|
|
case 3:
|
|
Type1 = 3647;
|
|
Type2 = 1523;
|
|
break;
|
|
case 4:
|
|
Type1 = 3648;
|
|
Type2 = 1522;
|
|
break;
|
|
case 5:
|
|
Type1 = 3649;
|
|
Type2 = 1527;
|
|
break;
|
|
case 6:
|
|
Type1 = 3650;
|
|
Type2 = 3643;
|
|
break;
|
|
}
|
|
if (Type1 != -1)
|
|
Item.NewItem(x * 16, y * 16, 32, 32, Type1);
|
|
if (Type2 != -1 && num2 == 1)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, Type2);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place2x3Wall(int x, int y, ushort type, int style)
|
|
{
|
|
int num1 = x;
|
|
int num2 = y - 1;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num1 + 2; ++index1)
|
|
{
|
|
for (int index2 = num2; index2 < num2 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall == (ushort) 0)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = style * 36;
|
|
int num4 = 0;
|
|
for (int index3 = num1; index3 < num1 + 2; ++index3)
|
|
{
|
|
for (int index4 = num2; index4 < num2 + 3; ++index4)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = type;
|
|
Main.tile[index3, index4].frameX = (short) (num3 + 18 * (index3 - num1));
|
|
Main.tile[index3, index4].frameY = (short) (num4 + 18 * (index4 - num2));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check2x3Wall(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int type = (int) Main.tile[x, y].type;
|
|
int num1 = 0;
|
|
int num2 = (int) Main.tile[x, y].frameX / 18;
|
|
while (num2 >= 2)
|
|
{
|
|
num2 -= 2;
|
|
++num1;
|
|
}
|
|
int num3 = x - num2;
|
|
int num4 = y - (int) Main.tile[x, y].frameY / 18;
|
|
int num5 = num1 * 36;
|
|
for (int index1 = num3; index1 < num3 + 2; ++index1)
|
|
{
|
|
for (int index2 = num4; index2 < num4 + 3; ++index2)
|
|
{
|
|
if ((int) Main.tile[index1, index2].type != type || !Main.tile[index1, index2].active() || Main.tile[index1, index2].wall <= (ushort) 0 || (int) Main.tile[index1, index2].frameX != num5 + (index1 - num3) * 18 || (int) Main.tile[index1, index2].frameY != (index2 - num4) * 18)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num3; i < num3 + 2; ++i)
|
|
{
|
|
for (int j = num4; j < num4 + 3; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == type && Main.tile[i, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (type == 245)
|
|
{
|
|
switch (num1)
|
|
{
|
|
case 5:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1495);
|
|
break;
|
|
case 6:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1577);
|
|
break;
|
|
case 7:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4638);
|
|
break;
|
|
case 8:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4639);
|
|
break;
|
|
case 9:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4659);
|
|
break;
|
|
case 10:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4726);
|
|
break;
|
|
case 11:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4727);
|
|
break;
|
|
case 12:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4728);
|
|
break;
|
|
default:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1474 + num1);
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place3x2Wall(int x, int y, ushort type, int style)
|
|
{
|
|
int num1 = x - 1;
|
|
int num2 = y;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num1 + 3; ++index1)
|
|
{
|
|
for (int index2 = num2; index2 < num2 + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall == (ushort) 0)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = 0;
|
|
int num4 = style * 36;
|
|
for (int index3 = num1; index3 < num1 + 3; ++index3)
|
|
{
|
|
for (int index4 = num2; index4 < num2 + 2; ++index4)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = type;
|
|
Main.tile[index3, index4].frameX = (short) (num3 + 18 * (index3 - num1));
|
|
Main.tile[index3, index4].frameY = (short) (num4 + 18 * (index4 - num2));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check3x2Wall(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int type = (int) Main.tile[x, y].type;
|
|
int num1 = 0;
|
|
int num2 = (int) Main.tile[x, y].frameY / 18;
|
|
while (num2 >= 2)
|
|
{
|
|
num2 -= 2;
|
|
++num1;
|
|
}
|
|
int num3 = y - num2;
|
|
int num4 = x - (int) Main.tile[x, y].frameX / 18;
|
|
int num5 = num1 * 36;
|
|
for (int index1 = num4; index1 < num4 + 3; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num3 + 2; ++index2)
|
|
{
|
|
if ((int) Main.tile[index1, index2].type != type || !Main.tile[index1, index2].active() || Main.tile[index1, index2].wall <= (ushort) 0 || (int) Main.tile[index1, index2].frameY != num5 + (index2 - num3) * 18 || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num4; i < num4 + 3; ++i)
|
|
{
|
|
for (int j = num3; j < num3 + 2; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == type && Main.tile[i, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (type == 246)
|
|
{
|
|
switch (num1)
|
|
{
|
|
case 16:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1541);
|
|
break;
|
|
case 17:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1542);
|
|
break;
|
|
case 18:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1908);
|
|
break;
|
|
case 19:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4661);
|
|
break;
|
|
case 20:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4729);
|
|
break;
|
|
default:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1479 + num1);
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place4x3Wall(int x, int y, ushort type, int style)
|
|
{
|
|
int num1 = x - 1;
|
|
int num2 = y - 1;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num1 + 4; ++index1)
|
|
{
|
|
for (int index2 = num2; index2 < num2 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall == (ushort) 0)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = 0;
|
|
int num4 = style * 54;
|
|
for (int index3 = num1; index3 < num1 + 4; ++index3)
|
|
{
|
|
for (int index4 = num2; index4 < num2 + 3; ++index4)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = type;
|
|
Main.tile[index3, index4].frameX = (short) (num3 + 18 * (index3 - num1));
|
|
Main.tile[index3, index4].frameY = (short) (num4 + 18 * (index4 - num2));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check4x3Wall(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int type = (int) Main.tile[x, y].type;
|
|
int num1 = 0;
|
|
int num2 = (int) Main.tile[x, y].frameY / 18;
|
|
while (num2 >= 3)
|
|
{
|
|
num2 -= 3;
|
|
++num1;
|
|
}
|
|
int num3 = y - num2;
|
|
int num4 = x - (int) Main.tile[x, y].frameX / 18;
|
|
int num5 = num1 * 54;
|
|
for (int index1 = num4; index1 < num4 + 4; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num3 + 3; ++index2)
|
|
{
|
|
if ((int) Main.tile[index1, index2].type != type || !Main.tile[index1, index2].active() || Main.tile[index1, index2].wall <= (ushort) 0 || (int) Main.tile[index1, index2].frameY != num5 + (index2 - num3) * 18 || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num4; i < num4 + 4; ++i)
|
|
{
|
|
for (int j = num3; j < num3 + 3; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == type && Main.tile[i, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (type == 241)
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1417);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place6x4Wall(int x, int y, ushort type, int style)
|
|
{
|
|
int num1 = x - 2;
|
|
int num2 = y - 2;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num1 + 6; ++index1)
|
|
{
|
|
for (int index2 = num2; index2 < num2 + 4; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall == (ushort) 0)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num3 = 27;
|
|
int num4 = style / num3 * 108;
|
|
int num5 = style % num3 * 72;
|
|
for (int index3 = num1; index3 < num1 + 6; ++index3)
|
|
{
|
|
for (int index4 = num2; index4 < num2 + 4; ++index4)
|
|
{
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].type = type;
|
|
Main.tile[index3, index4].frameX = (short) (num4 + 18 * (index3 - num1));
|
|
Main.tile[index3, index4].frameY = (short) (num5 + 18 * (index4 - num2));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check6x4Wall(int x, int y)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int type = (int) Main.tile[x, y].type;
|
|
int num1 = (int) Main.tile[x, y].frameY / 18;
|
|
int num2 = (int) Main.tile[x, y].frameX / 18;
|
|
int num3 = 27 * (num2 / 6) + (num1 >> 2);
|
|
int num4 = num1 % 4;
|
|
int num5 = num2 % 6;
|
|
int num6 = y - num4;
|
|
int num7 = x - (int) Main.tile[x, y].frameX / 18 % 6;
|
|
int num8 = num3 % 27 * 72;
|
|
int num9 = num3 / 27 * 108;
|
|
for (int index1 = num7; index1 < num7 + 6; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num6 + 4; ++index2)
|
|
{
|
|
if ((int) Main.tile[index1, index2].type != type || !Main.tile[index1, index2].active() || Main.tile[index1, index2].wall <= (ushort) 0 || (int) Main.tile[index1, index2].frameY != num8 + (index2 - num6) * 18 || (int) Main.tile[index1, index2].frameX != num9 + (index1 - num7) * 18)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = num7; i < num7 + 6; ++i)
|
|
{
|
|
for (int j = num6; j < num6 + 4; ++j)
|
|
{
|
|
if ((int) Main.tile[i, j].type == type && Main.tile[i, j].active())
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (type == 242)
|
|
{
|
|
switch (num3)
|
|
{
|
|
case 30:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2995);
|
|
break;
|
|
case 43:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4658);
|
|
break;
|
|
case 44:
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4725);
|
|
break;
|
|
default:
|
|
if (num3 >= 37 && num3 <= 42)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 4632 + num3 - 37);
|
|
break;
|
|
}
|
|
if (num3 >= 31 && num3 <= 35)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3055 + num3 - 31);
|
|
break;
|
|
}
|
|
if (num3 >= 27 && num3 <= 29)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2865 + num3 - 27);
|
|
break;
|
|
}
|
|
if (num3 == 36)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 3596);
|
|
break;
|
|
}
|
|
if (num3 == 26)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2497);
|
|
break;
|
|
}
|
|
if (num3 == 25)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2495);
|
|
break;
|
|
}
|
|
if (num3 >= 22)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 2281 + num3 - 22);
|
|
break;
|
|
}
|
|
if (num3 >= 17)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1846 + num3 - 17);
|
|
break;
|
|
}
|
|
if (num3 == 16)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1573);
|
|
break;
|
|
}
|
|
if (num3 >= 13)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1500 + num3 - 13);
|
|
break;
|
|
}
|
|
if (num3 >= 6)
|
|
{
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1433 + num3 - 6);
|
|
break;
|
|
}
|
|
Item.NewItem(x * 16, y * 16, 32, 32, 1421 + num3);
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
private static int RollRandomSeaShellStyle()
|
|
{
|
|
int num = WorldGen.genRand.Next(2);
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
num = 2;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
num = 3;
|
|
if (WorldGen.genRand.Next(50) == 0)
|
|
num = 4;
|
|
return num;
|
|
}
|
|
|
|
public static void Place1x1(int x, int y, int type, int style = 0)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (Main.tile[x, y] == null)
|
|
{
|
|
tile = new Tile();
|
|
Main.tile[x, y] = tile;
|
|
}
|
|
if (Main.tile[x, y + 1] == null)
|
|
Main.tile[x, y + 1] = new Tile();
|
|
if (type == 324)
|
|
{
|
|
if (!WorldGen.SolidTile2(x, y + 1) && (!Main.tile[x, y + 1].nactive() || !Main.tileTable[(int) Main.tile[x, y + 1].type]))
|
|
return;
|
|
tile.active(true);
|
|
tile.type = (ushort) type;
|
|
tile.frameX = (short) (22 * WorldGen.genRand.Next(3));
|
|
tile.frameY = (short) (22 * style);
|
|
}
|
|
else
|
|
{
|
|
if (!WorldGen.SolidTile2(x, y + 1) || tile.active())
|
|
return;
|
|
tile.active(true);
|
|
tile.type = (ushort) type;
|
|
switch (type)
|
|
{
|
|
case 36:
|
|
case 144:
|
|
case 239:
|
|
tile.frameX = (short) (style * 18);
|
|
tile.frameY = (short) 0;
|
|
break;
|
|
case 324:
|
|
tile.frameX = (short) (22 * WorldGen.RollRandomSeaShellStyle());
|
|
tile.frameY = (short) (22 * style);
|
|
break;
|
|
default:
|
|
tile.frameY = (short) (style * 18);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Check1x1(int x, int y, int type)
|
|
{
|
|
if (Main.tile[x, y + 1] == null || WorldGen.SolidTileAllowBottomSlope(x, y + 1))
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void CheckGolf1x1(int x, int y, int type)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
bool flag = false;
|
|
if ((int) tile.frameX % 18 != 0)
|
|
flag = true;
|
|
if ((int) tile.frameY % 18 != 0)
|
|
flag = true;
|
|
if (!WorldGen.SolidTileAllowBottomSlope(x, y + 1))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void CheckLogicTiles(int x, int y, int type)
|
|
{
|
|
if (type == 419)
|
|
{
|
|
Tile tile = Main.tile[x, y + 1];
|
|
if (tile != null && (!tile.active() || tile.type != (ushort) 420 && tile.type != (ushort) 419))
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
return;
|
|
}
|
|
}
|
|
Tile tile1 = Main.tile[x, y];
|
|
bool flag = false;
|
|
if ((int) tile1.frameX % 18 != 0)
|
|
flag = true;
|
|
if ((int) tile1.frameY % 18 != 0)
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void PlaceLogicTiles(int x, int y, int type, int style = 0)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (Main.tile[x, y] == null)
|
|
{
|
|
tile = new Tile();
|
|
Main.tile[x, y] = tile;
|
|
}
|
|
if (Main.tile[x, y + 1] == null)
|
|
Main.tile[x, y + 1] = new Tile();
|
|
if (type == 419)
|
|
{
|
|
if (!Main.tile[x, y + 1].active() || Main.tile[x, y + 1].type != (ushort) 419 && Main.tile[x, y + 1].type != (ushort) 420)
|
|
return;
|
|
tile.active(true);
|
|
tile.type = (ushort) type;
|
|
tile.frameX = (short) (style * 18);
|
|
tile.frameY = (short) 0;
|
|
}
|
|
else
|
|
{
|
|
if (tile.active())
|
|
return;
|
|
tile.active(true);
|
|
tile.type = (ushort) type;
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) (18 * style);
|
|
}
|
|
}
|
|
|
|
public static void PlaceOnTable1x1(int x, int y, int type, int style = 0)
|
|
{
|
|
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].nactive() && Main.tileTable[(int) Main.tile[x, y + 1].type])
|
|
flag = true;
|
|
if (type == 78 && !Main.tile[x, y].active() && Main.tile[x, y + 1].nactive() && Main.tileSolid[(int) Main.tile[x, y + 1].type] && !Main.tile[x, y + 1].halfBrick() && Main.tile[x, y + 1].slope() == (byte) 0)
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].type = (ushort) type;
|
|
if (type == 33)
|
|
{
|
|
Main.tile[x, y].frameX = (short) 0;
|
|
Main.tile[x, y].frameY = (short) (style * 22);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[x, y].frameX = (short) (style * 18);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
}
|
|
if (type != 50)
|
|
return;
|
|
Main.tile[x, y].frameX = (short) (18 * WorldGen.genRand.Next(5));
|
|
}
|
|
|
|
public static bool PlaceAlch(int x, int y, int style)
|
|
{
|
|
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].nactive() && !Main.tile[x, y + 1].halfBrick() && Main.tile[x, y + 1].slope() == (byte) 0)
|
|
{
|
|
bool flag = false;
|
|
switch (style)
|
|
{
|
|
case 0:
|
|
if (Main.tile[x, y + 1].type != (ushort) 2 && Main.tile[x, y + 1].type != (ushort) 477 && Main.tile[x, y + 1].type != (ushort) 492 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380 && Main.tile[x, y + 1].type != (ushort) 109)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (Main.tile[x, y + 1].type != (ushort) 60 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (Main.tile[x, y + 1].type != (ushort) 0 && Main.tile[x, y + 1].type != (ushort) 59 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (Main.tile[x, y + 1].type != (ushort) 203 && Main.tile[x, y + 1].type != (ushort) 199 && Main.tile[x, y + 1].type != (ushort) 23 && Main.tile[x, y + 1].type != (ushort) 25 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (Main.tile[x, y + 1].type != (ushort) 53 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380 && Main.tile[x, y + 1].type != (ushort) 116)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (Main.tile[x, y + 1].type != (ushort) 57 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && !Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380 && Main.tile[x, y + 1].type != (ushort) 147 && Main.tile[x, y + 1].type != (ushort) 161 && Main.tile[x, y + 1].type != (ushort) 163 && Main.tile[x, y + 1].type != (ushort) 164 && Main.tile[x, y + 1].type != (ushort) 200)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (!flag)
|
|
{
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].type = (ushort) 82;
|
|
Main.tile[x, y].frameX = (short) (18 * style);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void GrowSpike(int i, int j, ushort spikeType, ushort landType)
|
|
{
|
|
int index1 = i;
|
|
int index2 = j;
|
|
int num1 = 0;
|
|
if (Main.tile[index1 + 1, index2].active() && (int) Main.tile[index1 + 1, index2].type == (int) spikeType)
|
|
++num1;
|
|
if (Main.tile[index1 - 1, index2].active() && (int) Main.tile[index1 - 1, index2].type == (int) spikeType)
|
|
++num1;
|
|
if (Main.tile[index1, index2 + 1].active() && (int) Main.tile[index1, index2 + 1].type == (int) spikeType)
|
|
++num1;
|
|
if (Main.tile[index1, index2 - 1].active() && (int) Main.tile[index1, index2 - 1].type == (int) spikeType)
|
|
++num1;
|
|
if (num1 >= 3 && (int) Main.tile[i, j].type != (int) landType)
|
|
return;
|
|
switch (WorldGen.genRand.Next(4))
|
|
{
|
|
case 0:
|
|
--index2;
|
|
break;
|
|
case 1:
|
|
++index2;
|
|
break;
|
|
case 2:
|
|
--index1;
|
|
break;
|
|
case 3:
|
|
++index1;
|
|
break;
|
|
}
|
|
if (Main.tile[index1, index2].active())
|
|
return;
|
|
int num2 = 0;
|
|
if (Main.tile[index1 + 1, index2].active() && (int) Main.tile[index1 + 1, index2].type == (int) spikeType)
|
|
++num2;
|
|
if (Main.tile[index1 - 1, index2].active() && (int) Main.tile[index1 - 1, index2].type == (int) spikeType)
|
|
++num2;
|
|
if (Main.tile[index1, index2 + 1].active() && (int) Main.tile[index1, index2 + 1].type == (int) spikeType)
|
|
++num2;
|
|
if (Main.tile[index1, index2 - 1].active() && (int) Main.tile[index1, index2 - 1].type == (int) spikeType)
|
|
++num2;
|
|
if (num2 >= 2)
|
|
return;
|
|
int num3 = 7;
|
|
int num4 = index1 - num3;
|
|
int num5 = index1 + num3;
|
|
int num6 = index2 - num3;
|
|
int num7 = index2 + num3;
|
|
bool flag = false;
|
|
for (int index3 = num4; index3 < num5; ++index3)
|
|
{
|
|
for (int index4 = num6; index4 < num7; ++index4)
|
|
{
|
|
if (Math.Abs(index3 - index1) * 2 + Math.Abs(index4 - index2) < 9 && Main.tile[index3, index4].active() && (int) Main.tile[index3, index4].type == (int) landType && Main.tile[index3, index4 - 1].active() && (int) Main.tile[index3, index4 - 1].type == (int) spikeType && Main.tile[index3, index4 - 1].liquid == (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
Main.tile[index1, index2].type = spikeType;
|
|
Main.tile[index1, index2].active(true);
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
}
|
|
|
|
private static bool GrowMoreVines(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 30))
|
|
return false;
|
|
int num1 = 4;
|
|
int num2 = 6;
|
|
int num3 = 10;
|
|
int num4 = 60;
|
|
int num5 = 0;
|
|
int num6 = y;
|
|
if (Main.tile[x, y].type == (ushort) 528)
|
|
num4 /= 5;
|
|
for (int index1 = x - num1; index1 <= x + num1; ++index1)
|
|
{
|
|
for (int index2 = num6 - num2; index2 <= num6 + num3; ++index2)
|
|
{
|
|
if (TileID.Sets.IsVine[(int) Main.tile[index1, index2].type])
|
|
{
|
|
++num5;
|
|
if (index2 > y && Collision.CanHitLine(new Vector2((float) (x * 16), (float) (y * 16)), 1, 1, new Vector2((float) (index1 * 16), (float) (index2 * 16)), 1, 1))
|
|
{
|
|
if (Main.tile[index1, index2].type == (ushort) 528)
|
|
num5 += (index2 - y) * 20;
|
|
else
|
|
num5 += (index2 - y) * 2;
|
|
}
|
|
if (num5 > num4)
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private static void MatureTheHerbPlants()
|
|
{
|
|
for (int i = 10; i < Main.maxTilesX - 10; ++i)
|
|
{
|
|
for (int index = 10; index < Main.maxTilesY - 10; ++index)
|
|
{
|
|
if ((double) index > Main.rockLayer && (Main.tile[i, index + 1].type == (ushort) 59 || Main.tile[i, index + 1].type == (ushort) 0) && WorldGen.SolidTile(i, index + 1) && !Main.tile[i, index].active() && Main.tile[i, index].liquid == (byte) 0 && WorldGen.genRand.Next(25) == 0)
|
|
{
|
|
Main.tile[i, index].active(true);
|
|
Main.tile[i, index].type = (ushort) 82;
|
|
Main.tile[i, index].frameX = (short) 36;
|
|
Main.tile[i, index].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, index].type == (ushort) 82 && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
Main.tile[i, index].type = (ushort) 83;
|
|
if (Main.tile[i, index].frameX == (short) 36 && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[i, index].type = (ushort) 84;
|
|
if (Main.tile[i, index].frameX == (short) 108 && WorldGen.genRand.Next(3) == 0)
|
|
Main.tile[i, index].type = (ushort) 84;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void GrowAlch(int x, int y)
|
|
{
|
|
if (!Main.tile[x, y].active())
|
|
return;
|
|
if (Main.tile[x, y].liquid > (byte) 0)
|
|
{
|
|
int num = (int) Main.tile[x, y].frameX / 18;
|
|
if ((!Main.tile[x, y].lava() || num != 5) && (Main.tile[x, y].liquidType() != (byte) 0 || num != 1 && num != 4))
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
}
|
|
if (Main.tile[x, y].type == (ushort) 82)
|
|
{
|
|
if (WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
bool flag = false;
|
|
if (Main.tile[x, y].frameX == (short) 108)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
}
|
|
else
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else if (Main.dayTime && Main.tile[x, y].type == (ushort) 82 && Main.tile[x, y].frameX == (short) 0 && WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else if (!Main.dayTime && Main.tile[x, y].type == (ushort) 82 && Main.tile[x, y].frameX == (short) 18 && WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else if (Main.raining && Main.tile[x, y].type == (ushort) 82 && Main.tile[x, y].frameX == (short) 72 && WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else if ((double) y > Main.worldSurface && Main.tile[x, y].type == (ushort) 82 && Main.tile[x, y].frameX == (short) 36 && WorldGen.genRand.Next(50) == 0)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else
|
|
{
|
|
if (y <= Main.maxTilesY - 200 || Main.tile[x, y].type != (ushort) 82 || Main.tile[x, y].frameX != (short) 90 || WorldGen.genRand.Next(50) != 0)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
}
|
|
else if (Main.tile[x, y].frameX == (short) 36 && WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 83)
|
|
{
|
|
if (WorldGen.genRand.Next(2) != 0)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 84;
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].type != (ushort) 84 || WorldGen.genRand.Next(5) != 0)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].frameX != (short) 108 || Main.tile[x, y].type != (ushort) 83 || WorldGen.genRand.Next(30) != 0)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 84;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
}
|
|
|
|
public static void PlantAlch()
|
|
{
|
|
int index1 = WorldGen.genRand.Next(20, Main.maxTilesX - 20);
|
|
int index2 = WorldGen.genRand.Next(40) != 0 ? (WorldGen.genRand.Next(10) != 0 ? WorldGen.genRand.Next((int) Main.worldSurface, Main.maxTilesY - 20) : WorldGen.genRand.Next(20, Main.maxTilesY - 20)) : WorldGen.genRand.Next((int) (Main.rockLayer + (double) Main.maxTilesY) / 2, Main.maxTilesY - 20);
|
|
while (index2 < Main.maxTilesY - 20 && !Main.tile[index1, index2].active())
|
|
++index2;
|
|
if (!Main.tile[index1, index2].nactive() || Main.tile[index1, index2 - 1].active() || Main.tile[index1, index2 - 1].liquid != (byte) 0)
|
|
return;
|
|
int num1 = 15;
|
|
int num2 = 5;
|
|
int num3 = 0;
|
|
int num4 = (int) ((double) num1 * ((double) Main.maxTilesX / 4200.0));
|
|
int num5 = Utils.Clamp<int>(index1 - num4, 4, Main.maxTilesX - 4);
|
|
int num6 = Utils.Clamp<int>(index1 + num4, 4, Main.maxTilesX - 4);
|
|
int num7 = Utils.Clamp<int>(index2 - num4, 4, Main.maxTilesY - 4);
|
|
int num8 = Utils.Clamp<int>(index2 + num4, 4, Main.maxTilesY - 4);
|
|
for (int index3 = num5; index3 <= num6; ++index3)
|
|
{
|
|
for (int index4 = num7; index4 <= num8; ++index4)
|
|
{
|
|
if (Main.tileAlch[(int) Main.tile[index3, index4].type])
|
|
++num3;
|
|
}
|
|
}
|
|
if (num3 >= num2)
|
|
return;
|
|
if (Main.tile[index1, index2].type == (ushort) 2 || Main.tile[index1, index2].type == (ushort) 109)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 0);
|
|
if (Main.tile[index1, index2].type == (ushort) 60)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 1);
|
|
if (Main.tile[index1, index2].type == (ushort) 0 || Main.tile[index1, index2].type == (ushort) 59)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 2);
|
|
if (Main.tile[index1, index2].type == (ushort) 23 || Main.tile[index1, index2].type == (ushort) 25 || Main.tile[index1, index2].type == (ushort) 203 || Main.tile[index1, index2].type == (ushort) 199)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 3);
|
|
if ((Main.tile[index1, index2].type == (ushort) 53 || Main.tile[index1, index2].type == (ushort) 116) && index1 >= WorldGen.beachDistance && index1 <= Main.maxTilesX - WorldGen.beachDistance)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 4);
|
|
if (Main.tile[index1, index2].type == (ushort) 57)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 5);
|
|
if (Main.tile[index1, index2].type == (ushort) 147 || Main.tile[index1, index2].type == (ushort) 163 || Main.tile[index1, index2].type == (ushort) 164 || Main.tile[index1, index2].type == (ushort) 161 || Main.tile[index1, index2].type == (ushort) 200)
|
|
WorldGen.PlaceAlch(index1, index2 - 1, 6);
|
|
if (!Main.tile[index1, index2 - 1].active() || Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index1, index2 - 1, 1);
|
|
}
|
|
|
|
public static void CheckAlch(int x, int y)
|
|
{
|
|
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();
|
|
bool flag = false;
|
|
if (!Main.tile[x, y + 1].nactive())
|
|
flag = true;
|
|
if (Main.tile[x, y + 1].halfBrick())
|
|
flag = true;
|
|
int num = (int) Main.tile[x, y].frameX / 18;
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
if (!flag)
|
|
{
|
|
switch (num)
|
|
{
|
|
case 0:
|
|
if (Main.tile[x, y + 1].type != (ushort) 109 && Main.tile[x, y + 1].type != (ushort) 2 && Main.tile[x, y + 1].type != (ushort) 477 && Main.tile[x, y + 1].type != (ushort) 492 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (Main.tile[x, y + 1].type != (ushort) 60 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (Main.tile[x, y + 1].type != (ushort) 0 && Main.tile[x, y + 1].type != (ushort) 59 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (Main.tile[x, y + 1].type != (ushort) 199 && Main.tile[x, y + 1].type != (ushort) 203 && Main.tile[x, y + 1].type != (ushort) 23 && Main.tile[x, y + 1].type != (ushort) 25 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (Main.tile[x, y + 1].type != (ushort) 53 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380 && Main.tile[x, y + 1].type != (ushort) 116)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (Main.tile[x, y + 1].type != (ushort) 57 && Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380)
|
|
flag = true;
|
|
if (Main.tile[x, y].type != (ushort) 82 && Main.tile[x, y].lava() && Main.netMode != 1)
|
|
{
|
|
if (Main.tile[x, y].liquid > (byte) 16)
|
|
{
|
|
if (Main.tile[x, y].type == (ushort) 83)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 84;
|
|
if (Main.netMode == 2)
|
|
{
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (Main.tile[x, y].type == (ushort) 84)
|
|
{
|
|
Main.tile[x, y].type = (ushort) 83;
|
|
if (Main.netMode == 2)
|
|
{
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (Main.tile[x, y + 1].type != (ushort) 78 && Main.tile[x, y + 1].type != (ushort) 380 && Main.tile[x, y + 1].type != (ushort) 147 && Main.tile[x, y + 1].type != (ushort) 161 && Main.tile[x, y + 1].type != (ushort) 163 && Main.tile[x, y + 1].type != (ushort) 164 && Main.tile[x, y + 1].type != (ushort) 200)
|
|
flag = true;
|
|
if (Main.tile[x, y].liquid > (byte) 0 && Main.tile[x, y].lava())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void CheckBanner(int x, int j, byte type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = (int) Main.tile[x, j].frameY / 18;
|
|
int num2 = 0;
|
|
while (num1 >= 3)
|
|
{
|
|
num1 -= 3;
|
|
++num2;
|
|
}
|
|
int num3 = j - num1;
|
|
int frameX = (int) Main.tile[x, j].frameX;
|
|
bool flag = false;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
if (Main.tile[x, num3 + index] == null)
|
|
Main.tile[x, num3 + index] = new Tile();
|
|
if (!Main.tile[x, num3 + index].active())
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num3 + index].type != (int) type)
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num3 + index].frameY != index * 18 + num2 * 18 * 3)
|
|
flag = true;
|
|
else if ((int) Main.tile[x, num3 + index].frameX != frameX)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[x, num3 - 1] == null)
|
|
Main.tile[x, num3 - 1] = new Tile();
|
|
if (!Main.tile[x, num3 - 1].nactive())
|
|
flag = true;
|
|
if (!Main.tile[x, num3 - 1].topSlope() && !Main.tile[x, num3 - 1].halfBrick() && !Main.tileSolid[(int) Main.tile[x, num3 - 1].type] || Main.tileSolidTop[(int) Main.tile[x, num3 - 1].type] && (!TileID.Sets.Platforms[(int) Main.tile[x, num3 - 1].type] || !Main.tile[x, num3 - 1].halfBrick() && !Main.tile[x, num3 - 1].topSlope()) || TileID.Sets.NotReallySolid[(int) Main.tile[x, num3 - 1].type] || Main.tile[x, num3 - 1].bottomSlope())
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
if ((int) Main.tile[x, num3 + index].type == (int) type)
|
|
WorldGen.KillTile(x, num3 + index);
|
|
}
|
|
if (type == (byte) 91)
|
|
{
|
|
int num4 = frameX / 18 + num2 * 111;
|
|
if (num4 >= 297)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 4668 + num4);
|
|
else if (num4 >= 295)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 4392 + num4);
|
|
else if (num4 >= 294)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 4602);
|
|
else if (num4 >= 288)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 4253 + num4);
|
|
else if (num4 >= 278)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 3559 + num4);
|
|
else if (num4 >= 273)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 3516 + num4);
|
|
else if (num4 >= 272)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 3780);
|
|
else if (num4 >= 270)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 3323 + num4);
|
|
else if (num4 >= 207)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 3183 + num4);
|
|
else if (num4 >= 109)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 2788 + num4);
|
|
else if (num4 >= 22)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 1593 + num4);
|
|
else if (num4 >= 10 && num4 <= 15)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 1441 + num4);
|
|
else if (num4 >= 16 && num4 <= 21)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 1448 + num4);
|
|
else if (num4 >= 7 && num4 <= 9)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 838 + num4);
|
|
else if (num4 >= 4 && num4 <= 6)
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 785 + num4);
|
|
else
|
|
Item.NewItem(x * 16, (num3 + 1) * 16, 32, 32, 337 + num4);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void PlaceBanner(int x, int y, ushort type, int style = 0)
|
|
{
|
|
int num1 = style * 18;
|
|
int num2 = 0;
|
|
if (style >= 90)
|
|
{
|
|
num1 -= 1620;
|
|
num2 += 54;
|
|
}
|
|
if (Main.tile[x, y - 1] == null)
|
|
Main.tile[x, y - 1] = new Tile();
|
|
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 + 2] == null)
|
|
Main.tile[x, y + 2] = new Tile();
|
|
if (!Main.tile[x, y - 1].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 1].type] || Main.tileSolidTop[(int) Main.tile[x, y - 1].type] || Main.tile[x, y].active() || Main.tile[x, y + 1].active() || Main.tile[x, y + 2].active())
|
|
return;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) num2;
|
|
Main.tile[x, y].frameX = (short) num1;
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameY = (short) (num2 + 18);
|
|
Main.tile[x, y + 1].frameX = (short) num1;
|
|
Main.tile[x, y + 1].type = type;
|
|
Main.tile[x, y + 2].active(true);
|
|
Main.tile[x, y + 2].frameY = (short) (num2 + 36);
|
|
Main.tile[x, y + 2].frameX = (short) num1;
|
|
Main.tile[x, y + 2].type = type;
|
|
}
|
|
|
|
public static void PlaceMan(int i, int j, int dir)
|
|
{
|
|
for (int index1 = i; index1 <= i + 1; ++index1)
|
|
{
|
|
for (int index2 = j - 2; index2 <= j; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
return;
|
|
}
|
|
}
|
|
if (!WorldGen.SolidTile2(i, j + 1) || !WorldGen.SolidTile2(i + 1, j + 1))
|
|
return;
|
|
byte num = 0;
|
|
if (dir == 1)
|
|
num = (byte) 36;
|
|
Main.tile[i, j - 2].active(true);
|
|
Main.tile[i, j - 2].frameY = (short) 0;
|
|
Main.tile[i, j - 2].frameX = (short) num;
|
|
Main.tile[i, j - 2].type = (ushort) 128;
|
|
Main.tile[i, j - 1].active(true);
|
|
Main.tile[i, j - 1].frameY = (short) 18;
|
|
Main.tile[i, j - 1].frameX = (short) num;
|
|
Main.tile[i, j - 1].type = (ushort) 128;
|
|
Main.tile[i, j].active(true);
|
|
Main.tile[i, j].frameY = (short) 36;
|
|
Main.tile[i, j].frameX = (short) num;
|
|
Main.tile[i, j].type = (ushort) 128;
|
|
Main.tile[i + 1, j - 2].active(true);
|
|
Main.tile[i + 1, j - 2].frameY = (short) 0;
|
|
Main.tile[i + 1, j - 2].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j - 2].type = (ushort) 128;
|
|
Main.tile[i + 1, j - 1].active(true);
|
|
Main.tile[i + 1, j - 1].frameY = (short) 18;
|
|
Main.tile[i + 1, j - 1].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j - 1].type = (ushort) 128;
|
|
Main.tile[i + 1, j].active(true);
|
|
Main.tile[i + 1, j].frameY = (short) 36;
|
|
Main.tile[i + 1, j].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j].type = (ushort) 128;
|
|
}
|
|
|
|
public static void PlaceWoman(int i, int j, int dir)
|
|
{
|
|
for (int index1 = i; index1 <= i + 1; ++index1)
|
|
{
|
|
for (int index2 = j - 2; index2 <= j; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
return;
|
|
}
|
|
}
|
|
if (!WorldGen.SolidTile2(i, j + 1) || !WorldGen.SolidTile2(i + 1, j + 1))
|
|
return;
|
|
byte num = 0;
|
|
if (dir == 1)
|
|
num = (byte) 36;
|
|
Main.tile[i, j - 2].active(true);
|
|
Main.tile[i, j - 2].frameY = (short) 0;
|
|
Main.tile[i, j - 2].frameX = (short) num;
|
|
Main.tile[i, j - 2].type = (ushort) 269;
|
|
Main.tile[i, j - 1].active(true);
|
|
Main.tile[i, j - 1].frameY = (short) 18;
|
|
Main.tile[i, j - 1].frameX = (short) num;
|
|
Main.tile[i, j - 1].type = (ushort) 269;
|
|
Main.tile[i, j].active(true);
|
|
Main.tile[i, j].frameY = (short) 36;
|
|
Main.tile[i, j].frameX = (short) num;
|
|
Main.tile[i, j].type = (ushort) 269;
|
|
Main.tile[i + 1, j - 2].active(true);
|
|
Main.tile[i + 1, j - 2].frameY = (short) 0;
|
|
Main.tile[i + 1, j - 2].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j - 2].type = (ushort) 269;
|
|
Main.tile[i + 1, j - 1].active(true);
|
|
Main.tile[i + 1, j - 1].frameY = (short) 18;
|
|
Main.tile[i + 1, j - 1].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j - 1].type = (ushort) 269;
|
|
Main.tile[i + 1, j].active(true);
|
|
Main.tile[i + 1, j].frameY = (short) 36;
|
|
Main.tile[i + 1, j].frameX = (short) (byte) (18U + (uint) num);
|
|
Main.tile[i + 1, j].type = (ushort) 269;
|
|
}
|
|
|
|
public static void CheckWeaponsRack(int i, int j)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = i;
|
|
int num2 = j - (int) Main.tile[i, j].frameY / 18;
|
|
int num3 = (int) Main.tile[i, j].frameX;
|
|
int num4 = 0;
|
|
while (num3 >= 5000)
|
|
{
|
|
num3 -= 5000;
|
|
++num4;
|
|
}
|
|
if (num4 != 0)
|
|
num3 = (num4 - 1) * 18;
|
|
int num5 = num3 % 54;
|
|
int num6 = num1 - num5 / 18;
|
|
bool flag = false;
|
|
for (int index1 = 0; index1 < 3; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 3; ++index2)
|
|
{
|
|
int index3 = num6 + index1;
|
|
int index4 = num2 + index2;
|
|
int num7 = (int) Main.tile[index3, index4].frameX;
|
|
int num8 = 0;
|
|
while (num7 >= 5000)
|
|
{
|
|
num7 -= 5000;
|
|
++num8;
|
|
}
|
|
if (num8 != 0)
|
|
num7 = (num8 - 1) * 18;
|
|
int num9 = num7 % 54;
|
|
if (!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 334 || Main.tile[index3, index4].wall <= (ushort) 0 || (int) Main.tile[index3, index4].frameY != index2 * 18 || num9 != index1 * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
Item.NewItem(i * 16, j * 16, 48, 48, 2699);
|
|
for (int index5 = 0; index5 < 3; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < 3; ++index6)
|
|
{
|
|
int i1 = num6 + index5;
|
|
int j1 = num2 + index6;
|
|
if (Main.tile[i1, j1].active() && Main.tile[i1, j1].type == (ushort) 334)
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void ToggleGemLock(int i, int j, bool on)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(i, j);
|
|
if (!tileSafely.active() || tileSafely.type != (ushort) 440 || tileSafely.frameY < (short) 54 && !on)
|
|
return;
|
|
bool flag = false;
|
|
int Type = -1;
|
|
if (tileSafely.frameY >= (short) 54)
|
|
flag = true;
|
|
int num1 = (int) Main.tile[i, j].frameX / 54;
|
|
int num2 = (int) Main.tile[i, j].frameX % 54 / 18;
|
|
int num3 = (int) Main.tile[i, j].frameY % 54 / 18;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
Type = 1526;
|
|
break;
|
|
case 1:
|
|
Type = 1524;
|
|
break;
|
|
case 2:
|
|
Type = 1525;
|
|
break;
|
|
case 3:
|
|
Type = 1523;
|
|
break;
|
|
case 4:
|
|
Type = 1522;
|
|
break;
|
|
case 5:
|
|
Type = 1527;
|
|
break;
|
|
case 6:
|
|
Type = 3643;
|
|
break;
|
|
}
|
|
for (int index1 = i - num2; index1 < i - num2 + 3; ++index1)
|
|
{
|
|
for (int index2 = j - num3; index2 < j - num3 + 3; ++index2)
|
|
Main.tile[index1, index2].frameY = (short) ((on ? 54 : 0) + (index2 - j + num3) * 18);
|
|
}
|
|
if (Type != -1 & flag)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
NetMessage.SendTileSquare(-1, i - num2 + 1, j - num3 + 1, 3);
|
|
Wiring.HitSwitch(i - num2, j - num3);
|
|
NetMessage.SendData(59, number: (i - num2), number2: ((float) (j - num3)));
|
|
}
|
|
|
|
public static void CheckMan(int i, int j)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = i;
|
|
int num2 = j - (int) Main.tile[i, j].frameY / 18;
|
|
int frameX1 = (int) Main.tile[i, j].frameX;
|
|
while (frameX1 >= 100)
|
|
frameX1 -= 100;
|
|
while (frameX1 >= 36)
|
|
frameX1 -= 36;
|
|
int i1 = num1 - frameX1 / 18;
|
|
bool flag = false;
|
|
for (int index1 = 0; index1 <= 1; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 <= 2; ++index2)
|
|
{
|
|
int index3 = i1 + index1;
|
|
int index4 = num2 + index2;
|
|
int frameX2 = (int) Main.tile[index3, index4].frameX;
|
|
while (frameX2 >= 100)
|
|
frameX2 -= 100;
|
|
if (frameX2 >= 36)
|
|
frameX2 -= 36;
|
|
if (!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 128 || (int) Main.tile[index3, index4].frameY != index2 * 18 || frameX2 != index1 * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num2 + 3) || !WorldGen.SolidTileAllowBottomSlope(i1 + 1, num2 + 3))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 498);
|
|
for (int index5 = 0; index5 <= 1; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 <= 2; ++index6)
|
|
{
|
|
int i2 = i1 + index5;
|
|
int j1 = num2 + index6;
|
|
if (Main.tile[i2, j1].active() && Main.tile[i2, j1].type == (ushort) 128)
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void CheckWoman(int i, int j)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = i;
|
|
int num2 = j - (int) Main.tile[i, j].frameY / 18;
|
|
int frameX1 = (int) Main.tile[i, j].frameX;
|
|
while (frameX1 >= 100)
|
|
frameX1 -= 100;
|
|
while (frameX1 >= 36)
|
|
frameX1 -= 36;
|
|
int i1 = num1 - frameX1 / 18;
|
|
bool flag = false;
|
|
for (int index1 = 0; index1 <= 1; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 <= 2; ++index2)
|
|
{
|
|
int index3 = i1 + index1;
|
|
int index4 = num2 + index2;
|
|
int frameX2 = (int) Main.tile[index3, index4].frameX;
|
|
while (frameX2 >= 100)
|
|
frameX2 -= 100;
|
|
if (frameX2 >= 36)
|
|
frameX2 -= 36;
|
|
if (!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 269 || (int) Main.tile[index3, index4].frameY != index2 * 18 || frameX2 != index1 * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num2 + 3) || !WorldGen.SolidTileAllowBottomSlope(i1 + 1, num2 + 3))
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1989);
|
|
for (int index5 = 0; index5 <= 1; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 <= 2; ++index6)
|
|
{
|
|
int i2 = i1 + index5;
|
|
int j1 = num2 + index6;
|
|
if (Main.tile[i2, j1].active() && Main.tile[i2, j1].type == (ushort) 269)
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void Place1x2(int x, int y, ushort type, int style)
|
|
{
|
|
short num1 = 0;
|
|
if (type == (ushort) 20)
|
|
num1 = (short) (WorldGen.genRand.Next(3) * 18);
|
|
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 (!(WorldGen.SolidTile2(x, y + 1) & !Main.tile[x, y - 1].active()))
|
|
return;
|
|
short num2 = (short) (style * 40);
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = num2;
|
|
Main.tile[x, y - 1].frameX = num1;
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) ((int) num2 + 18);
|
|
Main.tile[x, y].frameX = num1;
|
|
Main.tile[x, y].type = type;
|
|
}
|
|
|
|
public static void Place1x2Top(int x, int y, ushort type, int style)
|
|
{
|
|
short num1 = 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].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 1].type] || Main.tileSolidTop[(int) Main.tile[x, y - 1].type] || Main.tile[x, y + 1].active())
|
|
return;
|
|
short num2 = (short) (style * 36);
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = num2;
|
|
Main.tile[x, y].frameX = num1;
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].frameY = (short) ((int) num2 + 18);
|
|
Main.tile[x, y + 1].frameX = num1;
|
|
Main.tile[x, y + 1].type = type;
|
|
}
|
|
|
|
public static void Check1x2Top(int x, int j, ushort type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int index = j;
|
|
bool flag = true;
|
|
int num1 = (int) Main.tile[x, index].frameY / 18;
|
|
int num2 = 0;
|
|
while (num1 >= 2)
|
|
{
|
|
num1 -= 2;
|
|
++num2;
|
|
}
|
|
int j1 = index - num1;
|
|
int num3 = num2 * 36;
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if (Main.tile[x, j1 + 1] == null)
|
|
Main.tile[x, j1 + 1] = new Tile();
|
|
if (Main.tile[x, j1] == null)
|
|
Main.tile[x, j1] = new Tile();
|
|
if ((int) Main.tile[x, j1].frameY == num3 && (int) Main.tile[x, j1 + 1].frameY == num3 + 18 && (int) Main.tile[x, j1].type == (int) type && (int) Main.tile[x, j1 + 1].type == (int) type)
|
|
flag = false;
|
|
if (Main.tile[x, j1 - 1] == null)
|
|
Main.tile[x, j1 - 1] = new Tile();
|
|
if (!Main.tile[x, j1 - 1].nactive() || !Main.tileSolid[(int) Main.tile[x, j1 - 1].type] || Main.tileSolidTop[(int) Main.tile[x, j1 - 1].type])
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, j1].type == (int) type)
|
|
WorldGen.KillTile(x, j1);
|
|
if ((int) Main.tile[x, j1 + 1].type == (int) type)
|
|
WorldGen.KillTile(x, j1 + 1);
|
|
switch (type)
|
|
{
|
|
case 42:
|
|
int Type = 0;
|
|
switch (num2)
|
|
{
|
|
case 0:
|
|
Type = 136;
|
|
break;
|
|
case 7:
|
|
Type = 1431;
|
|
break;
|
|
case 8:
|
|
Type = 1808;
|
|
break;
|
|
case 9:
|
|
Type = 1859;
|
|
break;
|
|
default:
|
|
if (num2 < 10)
|
|
{
|
|
Type = 1389 + num2;
|
|
break;
|
|
}
|
|
switch (num2)
|
|
{
|
|
case 10:
|
|
Type = 2032;
|
|
break;
|
|
case 11:
|
|
Type = 2033;
|
|
break;
|
|
case 12:
|
|
Type = 2034;
|
|
break;
|
|
case 13:
|
|
Type = 2035;
|
|
break;
|
|
case 14:
|
|
Type = 2036;
|
|
break;
|
|
case 15:
|
|
Type = 2037;
|
|
break;
|
|
case 16:
|
|
Type = 2038;
|
|
break;
|
|
case 17:
|
|
Type = 2039;
|
|
break;
|
|
case 18:
|
|
Type = 2040;
|
|
break;
|
|
case 19:
|
|
Type = 2041;
|
|
break;
|
|
case 20:
|
|
Type = 2042;
|
|
break;
|
|
case 21:
|
|
Type = 2043;
|
|
break;
|
|
default:
|
|
if (num2 >= 22 && num2 <= 25)
|
|
{
|
|
Type = 2145 + num2 - 22;
|
|
break;
|
|
}
|
|
switch (num2)
|
|
{
|
|
case 26:
|
|
Type = 2226;
|
|
break;
|
|
case 27:
|
|
Type = 2530;
|
|
break;
|
|
case 28:
|
|
Type = 2546;
|
|
break;
|
|
case 29:
|
|
Type = 2564;
|
|
break;
|
|
case 30:
|
|
Type = 2579;
|
|
break;
|
|
case 31:
|
|
Type = 2641;
|
|
break;
|
|
case 32:
|
|
Type = 2642;
|
|
break;
|
|
case 33:
|
|
Type = 2820;
|
|
break;
|
|
case 34:
|
|
Type = 3138;
|
|
break;
|
|
case 35:
|
|
Type = 3140;
|
|
break;
|
|
case 36:
|
|
Type = 3139;
|
|
break;
|
|
case 37:
|
|
Type = 3891;
|
|
break;
|
|
case 38:
|
|
Type = 3943;
|
|
break;
|
|
case 39:
|
|
Type = 3970;
|
|
break;
|
|
case 40:
|
|
Type = 4157;
|
|
break;
|
|
case 41:
|
|
Type = 4178;
|
|
break;
|
|
case 42:
|
|
Type = 4199;
|
|
break;
|
|
case 43:
|
|
Type = 4220;
|
|
break;
|
|
case 44:
|
|
Type = 4309;
|
|
break;
|
|
case 45:
|
|
Type = 4578;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, Type);
|
|
break;
|
|
case 270:
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 1993);
|
|
break;
|
|
case 271:
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 2005);
|
|
break;
|
|
case 572:
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 4695 + num2);
|
|
break;
|
|
case 581:
|
|
Item.NewItem(x * 16, j1 * 16, 32, 32, 4848);
|
|
break;
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static bool PlaceSmallPile(int i, int j, int X, int Y, ushort type = 185)
|
|
{
|
|
int i1 = i;
|
|
int index = j;
|
|
short num1 = (short) (Y * 18);
|
|
short num2 = (short) (X * 18);
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (Main.tile[i1 + 1, index] == null)
|
|
Main.tile[i1 + 1, index] = new Tile();
|
|
if (Main.tile[i1, index + 1] == null)
|
|
Main.tile[i1, index + 1] = new Tile();
|
|
if (Main.tile[i1 + 1, index + 1] == null)
|
|
Main.tile[i1 + 1, index + 1] = new Tile();
|
|
if (Main.tile[i1, index].lava())
|
|
return false;
|
|
if (Y == 1)
|
|
{
|
|
short num3 = (short) (X * 36);
|
|
bool flag = false;
|
|
if (WorldGen.SolidTile2(i1, index + 1) && WorldGen.SolidTile2(i1 + 1, index + 1) && !Main.tile[i1, index].active() && !Main.tile[i1 + 1, index].active())
|
|
flag = true;
|
|
if (flag)
|
|
{
|
|
Main.tile[i1, index].active(true);
|
|
Main.tile[i1, index].frameY = num1;
|
|
Main.tile[i1, index].frameX = num3;
|
|
Main.tile[i1, index].type = type;
|
|
Main.tile[i1 + 1, index].active(true);
|
|
Main.tile[i1 + 1, index].frameY = num1;
|
|
Main.tile[i1 + 1, index].frameX = (short) ((int) num3 + 18);
|
|
Main.tile[i1 + 1, index].type = type;
|
|
return true;
|
|
}
|
|
}
|
|
else if (WorldGen.SolidTile2(i1, index + 1) && !Main.tile[i1, index].active())
|
|
{
|
|
Main.tile[i1, index].active(true);
|
|
Main.tile[i1, index].frameY = num1;
|
|
Main.tile[i1, index].frameX = num2;
|
|
Main.tile[i1, index].type = type;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void CheckPile(int i, int y)
|
|
{
|
|
int i1 = i;
|
|
if (Main.tile[i1, y] == null)
|
|
Main.tile[i1, y] = new Tile();
|
|
if (Main.tile[i1 + 1, y] == null)
|
|
Main.tile[i1 + 1, y] = new Tile();
|
|
if (Main.tile[i1, y + 1] == null)
|
|
Main.tile[i1, y + 1] = new Tile();
|
|
if (Main.tile[i1 + 1, y + 1] == null)
|
|
Main.tile[i1 + 1, y + 1] = new Tile();
|
|
if (Main.tile[i1, y].frameY == (short) 18)
|
|
{
|
|
WorldGen.Check2x1(i1, y, Main.tile[i1, y].type);
|
|
}
|
|
else
|
|
{
|
|
if (WorldGen.SolidTile(i1, y + 1))
|
|
return;
|
|
WorldGen.KillTile(i1, y);
|
|
}
|
|
}
|
|
|
|
public static void Check2x1(int i, int y, ushort type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int index = i;
|
|
bool flag = true;
|
|
if (Main.tile[index, y] == null)
|
|
Main.tile[index, y] = new Tile();
|
|
int num1 = (int) Main.tile[index, y].frameX / 18;
|
|
int num2 = num1 >> 1;
|
|
int num3 = num1 % 2;
|
|
int i1 = index - num3;
|
|
if (Main.tile[i1, y] == null)
|
|
Main.tile[i1, y] = new Tile();
|
|
if (Main.tile[i1 + 1, y] == null)
|
|
Main.tile[i1 + 1, y] = new Tile();
|
|
if (Main.tile[i1, y + 1] == null)
|
|
Main.tile[i1, y + 1] = new Tile();
|
|
if (Main.tile[i1 + 1, y + 1] == null)
|
|
Main.tile[i1 + 1, y + 1] = new Tile();
|
|
if ((int) Main.tile[i1 + 1, y].frameX == (int) Main.tile[i1, y].frameX + 18 && (int) Main.tile[i1, y].type == (int) type && (int) Main.tile[i1 + 1, y].type == (int) type)
|
|
flag = false;
|
|
if (type == (ushort) 29 || type == (ushort) 103 || type == (ushort) 462)
|
|
{
|
|
if (!Main.tile[i1, y + 1].active() || !Main.tileTable[(int) Main.tile[i1, y + 1].type] || Main.tile[i1, y + 1].halfBrick() || Main.tile[i1, y + 1].topSlope())
|
|
flag = true;
|
|
if (!Main.tile[i1 + 1, y + 1].active() || !Main.tileTable[(int) Main.tile[i1 + 1, y + 1].type] || Main.tile[i1 + 1, y + 1].halfBrick() || Main.tile[i1 + 1, y + 1].topSlope())
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, y + 1))
|
|
flag = true;
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1 + 1, y + 1))
|
|
flag = true;
|
|
}
|
|
if (type == (ushort) 185 && Main.tile[i1, y].frameX >= (short) 1368 && Main.tile[i1, y].frameX <= (short) 1458 && Main.tile[i1, y + 1].type != (ushort) 2 && Main.tile[i1 + 1, y + 1].type != (ushort) 2 && Main.tile[i1, y + 1].type != (ushort) 477 && Main.tile[i1 + 1, y + 1].type != (ushort) 477 && Main.tile[i1, y + 1].type != (ushort) 492 && Main.tile[i1 + 1, y + 1].type != (ushort) 492)
|
|
{
|
|
Main.tile[i1, y].frameX -= (short) 1368;
|
|
Main.tile[i1 + 1, y].frameX -= (short) 1368;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int frameX = (int) Main.tile[i1, y].frameX;
|
|
if (!Main.tile[i1, y].active())
|
|
frameX = (int) Main.tile[i1 + 1, y].frameX;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[i1, y].type == (int) type)
|
|
WorldGen.KillTile(i1, y);
|
|
if ((int) Main.tile[i1 + 1, y].type == (int) type)
|
|
WorldGen.KillTile(i1 + 1, y);
|
|
if (type == (ushort) 16)
|
|
{
|
|
if (num2 == 1)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 716);
|
|
else
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 35);
|
|
}
|
|
if (type == (ushort) 18)
|
|
{
|
|
int Type = 36;
|
|
if (num2 >= 1 && num2 <= 3)
|
|
Type = 634 + num2;
|
|
else if (num2 >= 4 && num2 <= 8)
|
|
{
|
|
Type = 807 + num2;
|
|
}
|
|
else
|
|
{
|
|
switch (num2)
|
|
{
|
|
case 9:
|
|
Type = 916;
|
|
break;
|
|
case 10:
|
|
Type = 1145;
|
|
break;
|
|
case 11:
|
|
Type = 1398;
|
|
break;
|
|
case 12:
|
|
Type = 1401;
|
|
break;
|
|
case 13:
|
|
Type = 1404;
|
|
break;
|
|
case 14:
|
|
Type = 1461;
|
|
break;
|
|
case 15:
|
|
Type = 1511;
|
|
break;
|
|
case 16:
|
|
Type = 1795;
|
|
break;
|
|
case 17:
|
|
Type = 1817;
|
|
break;
|
|
case 18:
|
|
Type = 2229;
|
|
break;
|
|
case 19:
|
|
Type = 2251;
|
|
break;
|
|
case 20:
|
|
Type = 2252;
|
|
break;
|
|
case 21:
|
|
Type = 2253;
|
|
break;
|
|
case 22:
|
|
Type = 2534;
|
|
break;
|
|
case 23:
|
|
Type = 673;
|
|
break;
|
|
case 24:
|
|
Type = 2631;
|
|
break;
|
|
case 25:
|
|
Type = 2632;
|
|
break;
|
|
case 26:
|
|
Type = 2633;
|
|
break;
|
|
case 27:
|
|
Type = 2826;
|
|
break;
|
|
case 28:
|
|
Type = 3156;
|
|
break;
|
|
case 29:
|
|
Type = 3158;
|
|
break;
|
|
case 30:
|
|
Type = 3157;
|
|
break;
|
|
case 31:
|
|
Type = 3909;
|
|
break;
|
|
case 32:
|
|
Type = 3910;
|
|
break;
|
|
case 33:
|
|
Type = 3949;
|
|
break;
|
|
case 34:
|
|
Type = 3975;
|
|
break;
|
|
case 35:
|
|
Type = 4163;
|
|
break;
|
|
case 36:
|
|
Type = 4184;
|
|
break;
|
|
case 37:
|
|
Type = 4205;
|
|
break;
|
|
case 38:
|
|
Type = 4226;
|
|
break;
|
|
case 39:
|
|
Type = 4315;
|
|
break;
|
|
case 40:
|
|
Type = 4584;
|
|
break;
|
|
}
|
|
}
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, Type);
|
|
}
|
|
if (type == (ushort) 185)
|
|
{
|
|
if (frameX >= 576 && frameX <= 610)
|
|
{
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
}
|
|
if (frameX >= 612 && frameX <= 646)
|
|
{
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 72, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 72, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 72, WorldGen.genRand.Next(30, 100));
|
|
}
|
|
if (frameX >= 648 && frameX <= 682)
|
|
{
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 73, WorldGen.genRand.Next(1, 6));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 73, WorldGen.genRand.Next(2, 6));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 73, WorldGen.genRand.Next(3, 6));
|
|
}
|
|
if (frameX >= 684 && frameX <= 718)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 181, WorldGen.genRand.Next(1, 4));
|
|
if (frameX >= 720 && frameX <= 754)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 180, WorldGen.genRand.Next(1, 4));
|
|
if (frameX >= 756 && frameX <= 790)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 177, WorldGen.genRand.Next(1, 4));
|
|
if (frameX >= 792 && frameX <= 826)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 179, WorldGen.genRand.Next(1, 4));
|
|
if (frameX >= 828 && frameX <= 862)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 178, WorldGen.genRand.Next(1, 4));
|
|
if (frameX >= 864 && frameX <= 898)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 182, WorldGen.genRand.Next(1, 4));
|
|
}
|
|
if (type == (ushort) 462)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 3795);
|
|
if (type == (ushort) 29)
|
|
{
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 87);
|
|
SoundEngine.PlaySound(13, i * 16, y * 16);
|
|
}
|
|
if (type == (ushort) 103)
|
|
{
|
|
int Type = 356;
|
|
if (num2 == 1)
|
|
Type = 2235;
|
|
if (num2 == 2)
|
|
Type = 2242;
|
|
if (num2 == 3)
|
|
Type = 2243;
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, Type);
|
|
SoundEngine.PlaySound(13, i * 16, y * 16);
|
|
}
|
|
else if (type == (ushort) 134)
|
|
{
|
|
if (num2 == 1)
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 1220);
|
|
else
|
|
Item.NewItem(i1 * 16, y * 16, 32, 32, 525);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
WorldGen.SquareTileFrame(i1, y);
|
|
WorldGen.SquareTileFrame(i1 + 1, y);
|
|
}
|
|
|
|
public static void Place2x1(int x, int y, ushort type, int style = 0)
|
|
{
|
|
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 != (ushort) 29 && type != (ushort) 103 && WorldGen.SolidTile2(x, y + 1) && WorldGen.SolidTile2(x + 1, y + 1) && !Main.tile[x, y].active() && !Main.tile[x + 1, y].active())
|
|
flag = true;
|
|
else if ((type == (ushort) 29 || type == (ushort) 103) && Main.tile[x, y + 1].active() && Main.tile[x + 1, y + 1].active() && Main.tileTable[(int) Main.tile[x, y + 1].type] && Main.tileTable[(int) Main.tile[x + 1, y + 1].type] && !Main.tile[x, y].active() && !Main.tile[x + 1, y].active())
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y].frameX = (short) (36 * style);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 0;
|
|
Main.tile[x + 1, y].frameX = (short) (36 * style + 18);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
|
|
public static void Check4x2(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = i;
|
|
int num2 = type != 487 ? num1 + (int) Main.tile[i, j].frameX / 18 * -1 : num1 + (int) Main.tile[i, j].frameX / 18 % 4 * -1;
|
|
if ((type == 79 || type == 90) && Main.tile[i, j].frameX >= (short) 72)
|
|
num2 += 4;
|
|
int num3 = (int) Main.tile[i, j].frameY / 18;
|
|
int style = 0;
|
|
while (num3 > 1)
|
|
{
|
|
num3 -= 2;
|
|
++style;
|
|
}
|
|
int num4 = j - num3;
|
|
if (type == 487)
|
|
style = (int) Main.tile[i, j].frameX / 72;
|
|
for (int i1 = num2; i1 < num2 + 4; ++i1)
|
|
{
|
|
for (int index = num4; index < num4 + 2; ++index)
|
|
{
|
|
int num5 = (i1 - num2) * 18;
|
|
int num6 = (index - num4) * 18;
|
|
if ((type == 79 || type == 90) && Main.tile[i, j].frameX >= (short) 72)
|
|
num5 = (i1 - num2 + 4) * 18;
|
|
if (type == 487)
|
|
num5 += style * 72;
|
|
else
|
|
num6 += style * 36;
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != num5 || (int) Main.tile[i1, index].frameY != num6)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num4 + 2] == null)
|
|
Main.tile[i1, num4 + 2] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num4 + 2) && (!Main.tile[i1, num4 + 2].active() || !TileID.Sets.Platforms[(int) Main.tile[i1, num4 + 2].type]))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num2; i2 < num2 + 4; ++i2)
|
|
{
|
|
for (int j1 = num4; j1 < num4 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 79)
|
|
{
|
|
int Type = style != 0 ? (style != 4 ? (style < 9 || style > 12 ? (style < 5 || style > 8 ? (style < 13 || style > 18 ? (style != 19 ? (style != 20 ? (style != 21 ? (style != 22 ? (style != 23 ? (style != 24 ? (style != 25 ? (style != 26 ? (style != 27 ? (style != 28 ? (style != 29 ? (style != 30 ? (style != 31 ? (style != 32 ? (style != 33 ? (style != 34 ? (style != 35 ? (style != 36 ? (style != 37 ? (style != 38 ? (style != 39 ? style + 643 : 4567) : 4299) : 4209) : 4188) : 4167) : 4146) : 3959) : 3932) : 3897) : 3163) : 3164) : 3162) : 2811) : 2669) : 2568) : 2553) : 2538) : 2520) : 2231) : 2140) : 2139) : 2066 + style - 13) : 1465 + style) : 1710 + style) : 920) : 224;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
}
|
|
if (type == 487)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, WorldGen.GetItemDrop_PicnicTables(style));
|
|
if (type == 90)
|
|
{
|
|
int Type = 0;
|
|
if (style == 0)
|
|
Type = 336;
|
|
else if (style >= 1 && style <= 10)
|
|
Type = 2072 + style - 1;
|
|
else if (style >= 11 && style <= 15)
|
|
{
|
|
Type = 2124 + style - 11;
|
|
}
|
|
else
|
|
{
|
|
switch (style)
|
|
{
|
|
case 16:
|
|
Type = 2232;
|
|
break;
|
|
case 17:
|
|
Type = 2519;
|
|
break;
|
|
case 18:
|
|
Type = 2537;
|
|
break;
|
|
case 19:
|
|
Type = 2552;
|
|
break;
|
|
case 20:
|
|
Type = 2567;
|
|
break;
|
|
case 21:
|
|
Type = 2658;
|
|
break;
|
|
case 22:
|
|
Type = 2659;
|
|
break;
|
|
case 23:
|
|
Type = 2660;
|
|
break;
|
|
case 24:
|
|
Type = 2661;
|
|
break;
|
|
case 25:
|
|
Type = 2662;
|
|
break;
|
|
case 26:
|
|
Type = 2663;
|
|
break;
|
|
case 27:
|
|
Type = 2810;
|
|
break;
|
|
case 28:
|
|
Type = 3159;
|
|
break;
|
|
case 29:
|
|
Type = 3161;
|
|
break;
|
|
case 30:
|
|
Type = 3160;
|
|
break;
|
|
case 31:
|
|
Type = 3895;
|
|
break;
|
|
case 32:
|
|
Type = 3931;
|
|
break;
|
|
case 33:
|
|
Type = 3958;
|
|
break;
|
|
case 34:
|
|
Type = 4145;
|
|
break;
|
|
case 35:
|
|
Type = 4166;
|
|
break;
|
|
case 36:
|
|
Type = 4187;
|
|
break;
|
|
case 37:
|
|
Type = 4208;
|
|
break;
|
|
case 38:
|
|
Type = 4298;
|
|
break;
|
|
case 39:
|
|
Type = 4566;
|
|
break;
|
|
}
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num2 - 1; i3 < num2 + 4; ++i3)
|
|
{
|
|
for (int j2 = num4 - 1; j2 < num4 + 4; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
private static bool OasisPlantWaterCheck(int x, int y, bool boost = false)
|
|
{
|
|
int num1 = 45;
|
|
int num2 = 20;
|
|
if (boost)
|
|
{
|
|
num1 += 4;
|
|
num2 += 3;
|
|
}
|
|
int num3 = 20;
|
|
int num4 = 0;
|
|
for (int index1 = x - num1; index1 <= x + num1; ++index1)
|
|
{
|
|
if (x > WorldGen.beachDistance && x < Main.maxTilesX - WorldGen.beachDistance)
|
|
{
|
|
for (int index2 = y - num2; index2 <= y + num2; ++index2)
|
|
{
|
|
if (WorldGen.InWorld(index1, index2) && !WorldGen.SolidTile(index1, index2))
|
|
num4 += (int) Main.tile[index1, index2].liquid;
|
|
}
|
|
}
|
|
}
|
|
return num4 / (int) byte.MaxValue >= num3;
|
|
}
|
|
|
|
public static void PlaceOasisPlant(int X, int Y, ushort type = 530)
|
|
{
|
|
int num1 = WorldGen.genRand.Next(9);
|
|
int num2 = 0;
|
|
int x = X;
|
|
int y = Y;
|
|
if (x < WorldGen.beachDistance || x > Main.maxTilesX - WorldGen.beachDistance || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 2; ++i)
|
|
{
|
|
for (int index = y - 1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active() && Main.tile[i, index].type != (ushort) 529)
|
|
flag = false;
|
|
if (Main.tile[i, index].liquid > (byte) 0)
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile(i, y + 1) || !TileID.Sets.Conversion.Sand[(int) Main.tile[i, y + 1].type])
|
|
flag = false;
|
|
}
|
|
if (!flag || !WorldGen.OasisPlantWaterCheck(x, y))
|
|
return;
|
|
short num3 = (short) (54 * num1);
|
|
short num4 = (short) (36 * num2);
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = num4;
|
|
Main.tile[x - 1, y - 1].frameX = num3;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = num4;
|
|
Main.tile[x, y - 1].frameX = (short) ((int) num3 + 18);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = num4;
|
|
Main.tile[x + 1, y - 1].frameX = (short) ((int) num3 + 36);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) ((int) num4 + 18);
|
|
Main.tile[x - 1, y].frameX = num3;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) ((int) num4 + 18);
|
|
Main.tile[x, y].frameX = (short) ((int) num3 + 18);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) ((int) num4 + 18);
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num3 + 36);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
|
|
public static void CheckOasisPlant(int i, int j, int type = 530)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
Tile tileSafely = Framing.GetTileSafely(i, j);
|
|
int num2 = (int) tileSafely.frameY % 36;
|
|
int j1 = num1 + num2 / 18 * -1;
|
|
int i1 = (int) tileSafely.frameX / 18;
|
|
int num3 = 0;
|
|
int num4 = (int) Framing.GetTileSafely(i1, j1).frameY / 36;
|
|
while (i1 > 2)
|
|
{
|
|
i1 -= 3;
|
|
++num3;
|
|
}
|
|
int num5 = i - i1;
|
|
int num6 = num3 * 54;
|
|
for (int i2 = num5; i2 < num5 + 3; ++i2)
|
|
{
|
|
for (int index = j1; index < j1 + 2; ++index)
|
|
{
|
|
if (Main.tile[i2, index] == null)
|
|
Main.tile[i2, index] = new Tile();
|
|
if (!Main.tile[i2, index].active() || (int) Main.tile[i2, index].type != type || (int) Main.tile[i2, index].frameX != (i2 - num5) * 18 + num6 || (int) Main.tile[i2, index].frameY != (index - j1) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i2, j1 + 2] == null)
|
|
Main.tile[i2, j1 + 2] = new Tile();
|
|
if (!WorldGen.SolidTile(i2, j1 + 2) || !TileID.Sets.Conversion.Sand[(int) Main.tile[i2, j1 + 2].type])
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
for (int i3 = num5; i3 < num5 + 3; ++i3)
|
|
{
|
|
for (int j2 = j1; j2 < j1 + 2; ++j2)
|
|
{
|
|
if (Main.tile[i3, j2] == null)
|
|
Main.tile[i3, j2] = new Tile();
|
|
if ((int) Main.tile[i3, j2].type == type && Main.tile[i3, j2].active())
|
|
WorldGen.KillTile(i3, j2);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i4 = num5 - 1; i4 < num5 + 4; ++i4)
|
|
{
|
|
for (int j3 = j1 - 1; j3 < j1 + 3; ++j3)
|
|
WorldGen.TileFrame(i4, j3);
|
|
}
|
|
}
|
|
|
|
public static void GetBiomeInfluence(
|
|
int startX,
|
|
int endX,
|
|
int startY,
|
|
int endY,
|
|
out int corruptCount,
|
|
out int crimsonCount,
|
|
out int hallowedCount)
|
|
{
|
|
corruptCount = 0;
|
|
crimsonCount = 0;
|
|
hallowedCount = 0;
|
|
for (int index1 = startX; index1 <= endX; ++index1)
|
|
{
|
|
for (int index2 = startY; index2 <= endY; ++index2)
|
|
{
|
|
Tile tile = Main.tile[index1, index2];
|
|
if (tile != null)
|
|
{
|
|
if (TileID.Sets.Corrupt[(int) tile.type])
|
|
++corruptCount;
|
|
if (TileID.Sets.Crimson[(int) tile.type])
|
|
++crimsonCount;
|
|
if (TileID.Sets.Hallow[(int) tile.type])
|
|
++hallowedCount;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void PlaceJunglePlant(int X2, int Y2, ushort type, int styleX, int styleY)
|
|
{
|
|
if (styleY > 0 || type == (ushort) 236 || type == (ushort) 238)
|
|
{
|
|
int index1 = Y2;
|
|
int index2 = X2;
|
|
if (type == (ushort) 95 || type == (ushort) 126)
|
|
++index1;
|
|
if (X2 < 5 || X2 > Main.maxTilesX - 5 || index1 < 5 || index1 > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = index2 - 1; i < index2 + 1; ++i)
|
|
{
|
|
for (int index3 = index1 - 1; index3 < index1 + 1; ++index3)
|
|
{
|
|
if (Main.tile[i, index3] == null)
|
|
Main.tile[i, index3] = new Tile();
|
|
if (Main.tile[i, index3].active() && Main.tile[i, index3].type != (ushort) 61 && Main.tile[i, index3].type != (ushort) 62 && Main.tile[i, index3].type != (ushort) 69 && Main.tile[i, index3].type != (ushort) 74 && (type != (ushort) 236 || Main.tile[i, index3].type != (ushort) 233) && (type != (ushort) 238 || Main.tile[i, index3].type != (ushort) 233) && (Main.tile[i, index3].type != (ushort) 185 || Main.tile[i, index3].frameY != (short) 0))
|
|
flag = false;
|
|
if (type == (ushort) 98 && Main.tile[i, index3].liquid > (byte) 0)
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, index1 + 1] == null)
|
|
Main.tile[i, index1 + 1] = new Tile();
|
|
if (!WorldGen.SolidTile(i, index1 + 1) || Main.tile[i, index1 + 1].type != (ushort) 60)
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
short num1 = 36;
|
|
if (type == (ushort) 236 || type == (ushort) 238)
|
|
num1 = (short) 0;
|
|
short num2 = (short) (36 * styleX);
|
|
Main.tile[index2 - 1, index1 - 1].active(true);
|
|
Main.tile[index2 - 1, index1 - 1].frameY = num1;
|
|
Main.tile[index2 - 1, index1 - 1].frameX = num2;
|
|
Main.tile[index2 - 1, index1 - 1].type = type;
|
|
Main.tile[index2, index1 - 1].active(true);
|
|
Main.tile[index2, index1 - 1].frameY = num1;
|
|
Main.tile[index2, index1 - 1].frameX = (short) (18 + (int) num2);
|
|
Main.tile[index2, index1 - 1].type = type;
|
|
Main.tile[index2 - 1, index1].active(true);
|
|
Main.tile[index2 - 1, index1].frameY = (short) ((int) num1 + 18);
|
|
Main.tile[index2 - 1, index1].frameX = num2;
|
|
Main.tile[index2 - 1, index1].type = type;
|
|
Main.tile[index2, index1].active(true);
|
|
Main.tile[index2, index1].frameY = (short) ((int) num1 + 18);
|
|
Main.tile[index2, index1].frameX = (short) (18 + (int) num2);
|
|
Main.tile[index2, index1].type = type;
|
|
}
|
|
else
|
|
{
|
|
int num3 = styleX;
|
|
int index4 = X2;
|
|
int index5 = Y2;
|
|
if (index4 < 5 || index4 > Main.maxTilesX - 5 || index5 < 5 || index5 > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = index4 - 1; i < index4 + 2; ++i)
|
|
{
|
|
for (int index6 = index5 - 1; index6 < index5 + 1; ++index6)
|
|
{
|
|
if (Main.tile[i, index6] == null)
|
|
Main.tile[i, index6] = new Tile();
|
|
if (Main.tile[i, index6].active() && Main.tile[i, index6].type != (ushort) 61 && Main.tile[i, index6].type != (ushort) 62 && Main.tile[i, index6].type != (ushort) 69 && Main.tile[i, index6].type != (ushort) 74 && (Main.tile[i, index6].type != (ushort) 185 || Main.tile[i, index6].frameY != (short) 0))
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, index5 + 1] == null)
|
|
Main.tile[i, index5 + 1] = new Tile();
|
|
if (!WorldGen.SolidTile(i, index5 + 1) || Main.tile[i, index5 + 1].type != (ushort) 60)
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
short num4 = (short) (54 * num3);
|
|
Main.tile[index4 - 1, index5 - 1].active(true);
|
|
Main.tile[index4 - 1, index5 - 1].frameY = (short) 0;
|
|
Main.tile[index4 - 1, index5 - 1].frameX = num4;
|
|
Main.tile[index4 - 1, index5 - 1].type = type;
|
|
Main.tile[index4, index5 - 1].active(true);
|
|
Main.tile[index4, index5 - 1].frameY = (short) 0;
|
|
Main.tile[index4, index5 - 1].frameX = (short) ((int) num4 + 18);
|
|
Main.tile[index4, index5 - 1].type = type;
|
|
Main.tile[index4 + 1, index5 - 1].active(true);
|
|
Main.tile[index4 + 1, index5 - 1].frameY = (short) 0;
|
|
Main.tile[index4 + 1, index5 - 1].frameX = (short) ((int) num4 + 36);
|
|
Main.tile[index4 + 1, index5 - 1].type = type;
|
|
Main.tile[index4 - 1, index5].active(true);
|
|
Main.tile[index4 - 1, index5].frameY = (short) 18;
|
|
Main.tile[index4 - 1, index5].frameX = num4;
|
|
Main.tile[index4 - 1, index5].type = type;
|
|
Main.tile[index4, index5].active(true);
|
|
Main.tile[index4, index5].frameY = (short) 18;
|
|
Main.tile[index4, index5].frameX = (short) ((int) num4 + 18);
|
|
Main.tile[index4, index5].type = type;
|
|
Main.tile[index4 + 1, index5].active(true);
|
|
Main.tile[index4 + 1, index5].frameY = (short) 18;
|
|
Main.tile[index4 + 1, index5].frameX = (short) ((int) num4 + 36);
|
|
Main.tile[index4 + 1, index5].type = type;
|
|
}
|
|
}
|
|
|
|
public static void CheckJunglePlant(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
if (Main.tile[i, j].frameY >= (short) 36 || Main.tile[i, j].type == (ushort) 236 || Main.tile[i, j].type == (ushort) 238)
|
|
{
|
|
bool flag = false;
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
int num2 = 0;
|
|
while (num1 > 1)
|
|
{
|
|
num1 -= 2;
|
|
++num2;
|
|
}
|
|
int num3 = i - num1;
|
|
int num4 = 36;
|
|
if (type == 236 || type == 238)
|
|
num4 = 0;
|
|
int num5 = (int) Main.tile[i, j].frameY / 18;
|
|
while (num5 > 1)
|
|
num5 -= 2;
|
|
int num6 = j - num5;
|
|
int num7 = num2 * 36;
|
|
for (int i1 = num3; i1 < num3 + 2; ++i1)
|
|
{
|
|
for (int index = num6; index < num6 + 2; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != (i1 - num3) * 18 + num7 || (int) Main.tile[i1, index].frameY != (index - num6) * 18 + num4)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num6 + 2] == null)
|
|
Main.tile[i1, num6 + 2] = new Tile();
|
|
if (!WorldGen.SolidTile(i1, num6 + 2) || Main.tile[i1, num6 + 2].type != (ushort) 60)
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
if (type == 238)
|
|
{
|
|
float num8 = (float) (i * 16);
|
|
float num9 = (float) (j * 16);
|
|
float num10 = -1f;
|
|
int plr = 0;
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
float num11 = Math.Abs(Main.player[index].position.X - num8) + Math.Abs(Main.player[index].position.Y - num9);
|
|
if ((double) num11 < (double) num10 || (double) num10 == -1.0)
|
|
{
|
|
plr = index;
|
|
num10 = num11;
|
|
}
|
|
}
|
|
if ((double) num10 / 16.0 < 50.0)
|
|
NPC.SpawnOnPlayer(plr, 262);
|
|
}
|
|
if (type == 236)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1291);
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num3; i2 < num3 + 2; ++i2)
|
|
{
|
|
for (int j1 = num6; j1 < num6 + 2; ++j1)
|
|
{
|
|
if (Main.tile[i2, j1] == null)
|
|
Main.tile[i2, j1] = new Tile();
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
else
|
|
{
|
|
bool flag = false;
|
|
int num12 = j + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
int num13 = (int) Main.tile[i, j].frameX / 18;
|
|
int num14 = 0;
|
|
while (num13 > 2)
|
|
{
|
|
num13 -= 3;
|
|
++num14;
|
|
}
|
|
int num15 = i - num13;
|
|
int num16 = num14 * 54;
|
|
for (int i3 = num15; i3 < num15 + 3; ++i3)
|
|
{
|
|
for (int index = num12; index < num12 + 2; ++index)
|
|
{
|
|
if (Main.tile[i3, index] == null)
|
|
Main.tile[i3, index] = new Tile();
|
|
if (!Main.tile[i3, index].active() || (int) Main.tile[i3, index].type != type || (int) Main.tile[i3, index].frameX != (i3 - num15) * 18 + num16 || (int) Main.tile[i3, index].frameY != (index - num12) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i3, num12 + 2] == null)
|
|
Main.tile[i3, num12 + 2] = new Tile();
|
|
if (!WorldGen.SolidTile(i3, num12 + 2) || Main.tile[i3, num12 + 2].type != (ushort) 60)
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
for (int i4 = num15; i4 < num15 + 3; ++i4)
|
|
{
|
|
for (int j2 = num12; j2 < num12 + 3; ++j2)
|
|
{
|
|
if (Main.tile[i4, j2] == null)
|
|
Main.tile[i4, j2] = new Tile();
|
|
if ((int) Main.tile[i4, j2].type == type && Main.tile[i4, j2].active())
|
|
WorldGen.KillTile(i4, j2);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
}
|
|
|
|
public static void CheckSuper(int x, int y, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
Tile tile = Main.tile[x, y];
|
|
int style = 0;
|
|
if (type == 376)
|
|
style = (int) tile.frameX / 36;
|
|
if (type == 443)
|
|
style = (int) tile.frameX / 36;
|
|
if (type == 485)
|
|
style = (int) tile.frameX / 36;
|
|
bool flag1 = type == 376;
|
|
bool flag2 = type == 443;
|
|
bool flag3 = type == 444;
|
|
bool flag4 = type == 485;
|
|
TileObjectData tileData = TileObjectData.GetTileData(type, style);
|
|
int num1 = tileData.StyleHorizontal ? 1 : 0;
|
|
int width = tileData.Width;
|
|
int height = tileData.Height;
|
|
int num2 = x;
|
|
int num3 = y;
|
|
int num4 = num2 - (int) tile.frameX / 18 % width;
|
|
int j = num3 - (int) tile.frameY / 18 % height;
|
|
int num5 = 0;
|
|
int num6 = 0;
|
|
if (num1 != 0)
|
|
num5 = (int) tile.frameX / tileData.CoordinateFullWidth;
|
|
else
|
|
num6 = (int) tile.frameY / tileData.CoordinateFullHeight;
|
|
bool flag5 = false;
|
|
bool flag6 = false;
|
|
for (int index1 = 0; index1 < width; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < height; ++index2)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(num4 + index1, j + index2);
|
|
if (!tileSafely.active() || (int) tileSafely.type != type || (int) tileSafely.frameX != num5 * tileData.CoordinateFullWidth + index1 * (tileData.CoordinateWidth + 2) || (int) tileSafely.frameY != num6 * tileData.CoordinateFullHeight + index2 * (tileData.CoordinateHeights[0] + 2))
|
|
flag5 = true;
|
|
}
|
|
}
|
|
if (flag1)
|
|
{
|
|
for (int index = 0; index < width; ++index)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(num4 + index, j + height);
|
|
if (!tileSafely.active() || !Main.tileSolid[(int) tileSafely.type] && !Main.tileTable[(int) tileSafely.type])
|
|
flag5 = true;
|
|
if (tileSafely.halfBrick())
|
|
flag5 = true;
|
|
}
|
|
}
|
|
if (flag2)
|
|
{
|
|
bool flag7 = true;
|
|
bool flag8 = true;
|
|
for (int index = 0; index < width; ++index)
|
|
{
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(num4 + index, j + height), AnchorType.SolidTile | AnchorType.SolidWithTop | AnchorType.SolidSide))
|
|
flag8 = false;
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(num4 + index, j - 1), AnchorType.SolidBottom))
|
|
flag7 = false;
|
|
}
|
|
if (!flag7 && !flag8)
|
|
flag5 = true;
|
|
if (!flag5)
|
|
{
|
|
int num7 = 0;
|
|
if (flag8)
|
|
{
|
|
for (int index = 0; index < width; ++index)
|
|
Framing.GetTileSafely(num4 + index, j).frameX = (short) (index * 18 + style / 2 * 36 + num7 * 36);
|
|
}
|
|
else
|
|
{
|
|
for (int index = 0; index < width; ++index)
|
|
Framing.GetTileSafely(num4 + index, j).frameX = (short) (index * 18 + (style - 2) / 2 * 36 + 72 + num7 * 36);
|
|
}
|
|
}
|
|
}
|
|
if (flag3)
|
|
{
|
|
bool flag9 = true;
|
|
for (int index = 0; index < width; ++index)
|
|
{
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(num4 + index, j - 1), AnchorType.SolidTile))
|
|
flag9 = false;
|
|
}
|
|
if (!flag9)
|
|
flag5 = true;
|
|
for (int index3 = 0; index3 < width; ++index3)
|
|
{
|
|
for (int index4 = 0; index4 < height; ++index4)
|
|
{
|
|
if (Framing.GetTileSafely(num4 + index3, j + index4).liquid > (byte) 0)
|
|
{
|
|
flag5 = true;
|
|
flag6 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag4)
|
|
{
|
|
bool flag10 = true;
|
|
for (int index = 0; index < width; ++index)
|
|
{
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(num4 + index, j + height), AnchorType.SolidTile))
|
|
flag10 = false;
|
|
}
|
|
if (!flag10)
|
|
flag5 = true;
|
|
}
|
|
if (!flag5)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int index5 = 0; index5 < width; ++index5)
|
|
{
|
|
for (int index6 = 0; index6 < height; ++index6)
|
|
{
|
|
if ((int) Main.tile[num4 + index5, j + index6].type == type && Main.tile[num4 + index5, j + index6].active())
|
|
WorldGen.KillTile(num4 + index5, j + index6);
|
|
}
|
|
}
|
|
int Type = 0;
|
|
if (type == 376)
|
|
{
|
|
switch (style)
|
|
{
|
|
case 0:
|
|
Type = 2334;
|
|
break;
|
|
case 1:
|
|
Type = 2335;
|
|
break;
|
|
case 2:
|
|
Type = 2336;
|
|
break;
|
|
case 3:
|
|
Type = 3203;
|
|
break;
|
|
case 4:
|
|
Type = 3204;
|
|
break;
|
|
case 5:
|
|
Type = 3205;
|
|
break;
|
|
case 6:
|
|
Type = 3206;
|
|
break;
|
|
case 7:
|
|
Type = 3207;
|
|
break;
|
|
case 8:
|
|
Type = 3208;
|
|
break;
|
|
case 9:
|
|
Type = 3979;
|
|
break;
|
|
case 10:
|
|
Type = 3980;
|
|
break;
|
|
case 11:
|
|
Type = 3981;
|
|
break;
|
|
case 12:
|
|
Type = 3982;
|
|
break;
|
|
case 13:
|
|
Type = 3983;
|
|
break;
|
|
case 14:
|
|
Type = 3984;
|
|
break;
|
|
case 15:
|
|
Type = 3985;
|
|
break;
|
|
case 16:
|
|
Type = 3986;
|
|
break;
|
|
case 17:
|
|
Type = 3987;
|
|
break;
|
|
case 18:
|
|
Type = 4405;
|
|
break;
|
|
case 19:
|
|
Type = 4406;
|
|
break;
|
|
case 20:
|
|
Type = 4407;
|
|
break;
|
|
case 21:
|
|
Type = 4408;
|
|
break;
|
|
case 22:
|
|
Type = 4877;
|
|
break;
|
|
case 23:
|
|
Type = 4878;
|
|
break;
|
|
case 24:
|
|
Type = 5002;
|
|
break;
|
|
case 25:
|
|
Type = 5003;
|
|
break;
|
|
}
|
|
}
|
|
if (type == 443)
|
|
Type = 3722;
|
|
if (type == 485 && !WorldGen.gen && Main.netMode != 1)
|
|
{
|
|
int num8 = 1;
|
|
for (int index = 0; index < num8; ++index)
|
|
{
|
|
int number = NPC.NewNPC(num4 * 16, j * 16 + 32, 582);
|
|
Main.npc[number].TargetClosest();
|
|
Main.npc[number].velocity = new Vector2((float) Main.npc[number].direction * 1.5f, -5f);
|
|
NetMessage.SendData(23, number: number);
|
|
int time = 20;
|
|
int fromWho = -1;
|
|
Main.npc[number].GetImmuneTime(fromWho, time);
|
|
NetMessage.SendData(131, number: number, number2: 1f, number3: ((float) fromWho), number4: ((float) time));
|
|
}
|
|
}
|
|
if (type == 444 && Main.netMode != 1 && !flag6)
|
|
Projectile.NewProjectile((float) (num4 * 16 + 16), (float) (j * 16 + 16), 0.0f, 0.0f, 655, 0, 0.0f, Main.myPlayer);
|
|
if (Type != 0)
|
|
Item.NewItem(num4 * 16, j * 16, tileData.CoordinateFullWidth, tileData.CoordinateFullHeight, Type);
|
|
WorldGen.destroyObject = false;
|
|
for (int index7 = -1; index7 < width + 1; ++index7)
|
|
{
|
|
for (int index8 = -1; index8 < height + 1; ++index8)
|
|
WorldGen.TileFrame(num4 + index7, j + index8);
|
|
}
|
|
}
|
|
|
|
public static void Check2x2(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag1 = false;
|
|
int num1 = 0;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18 * -1;
|
|
if (num2 < -1)
|
|
{
|
|
num2 += 2;
|
|
num1 = 36;
|
|
}
|
|
int i1 = num2 + i;
|
|
int num3 = type == 172 ? 38 : 36;
|
|
int frameY = (int) Main.tile[i, j].frameY;
|
|
int num4 = 0;
|
|
while (frameY >= num3)
|
|
{
|
|
frameY -= num3;
|
|
++num4;
|
|
}
|
|
int index1 = j - frameY / 18;
|
|
for (int i2 = i1; i2 < i1 + 2; ++i2)
|
|
{
|
|
for (int j1 = index1; j1 < index1 + 2; ++j1)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(i2, j1);
|
|
if (!tileSafely.active() || (int) tileSafely.type != type || (int) tileSafely.frameX != (i2 - i1) * 18 + num1 || (int) tileSafely.frameY != (j1 - index1) * 18 + num4 * num3)
|
|
flag1 = true;
|
|
}
|
|
switch (type)
|
|
{
|
|
case 95:
|
|
case 126:
|
|
Framing.GetTileSafely(i2, index1 - 1);
|
|
if (!Main.tile[i2, index1 - 1].active() || !Main.tileSolid[(int) Main.tile[i2, index1 - 1].type] || Main.tileSolidTop[(int) Main.tile[i2, index1 - 1].type])
|
|
{
|
|
flag1 = true;
|
|
continue;
|
|
}
|
|
continue;
|
|
case 132:
|
|
case 138:
|
|
case 484:
|
|
continue;
|
|
default:
|
|
Tile tileSafely1 = Framing.GetTileSafely(i2, index1 + 2);
|
|
if (!tileSafely1.active() || !Main.tileSolid[(int) tileSafely1.type] && !Main.tileTable[(int) tileSafely1.type])
|
|
flag1 = true;
|
|
if (tileSafely1.halfBrick())
|
|
{
|
|
flag1 = true;
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
case 132:
|
|
flag1 = false;
|
|
index1 = (int) Main.tile[i, j].frameY / 18 * -1 + j;
|
|
int num5 = 0;
|
|
int num6 = (int) Main.tile[i, j].frameX / 18 * -1;
|
|
while (num6 < -1)
|
|
{
|
|
num6 += 2;
|
|
num5 += 36;
|
|
}
|
|
i1 = num6 + i;
|
|
for (int index2 = i1; index2 < i1 + 2; ++index2)
|
|
{
|
|
for (int index3 = index1; index3 < index1 + 2; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3] == null)
|
|
Main.tile[index2, index3] = new Tile();
|
|
if (!Main.tile[index2, index3].active() || (int) Main.tile[index2, index3].type != type || (int) Main.tile[index2, index3].frameX != (index2 - i1) * 18 + num5 || (int) Main.tile[index2, index3].frameY != (index3 - index1) * 18)
|
|
flag1 = true;
|
|
}
|
|
}
|
|
if (Main.tile[i1, index1 + 2] == null)
|
|
Main.tile[i1, index1 + 2] = new Tile();
|
|
if (Main.tile[i1 + 1, index1 + 2] == null)
|
|
Main.tile[i1 + 1, index1 + 2] = new Tile();
|
|
bool flag2 = false;
|
|
ushort type1 = Main.tile[i1, index1 + 2].type;
|
|
ushort type2 = Main.tile[i1 + 1, index1 + 2].type;
|
|
if (!Main.tile[i1, index1 + 2].active() || !Main.tileSolid[(int) type1] && !Main.tileSolidTop[(int) type1] || Main.tile[i1, index1 + 2].halfBrick() || Main.tile[i1, index1 + 2].slope() != (byte) 0 && !Main.tile[i1, index1 + 2].bottomSlope())
|
|
flag2 = true;
|
|
if (!Main.tile[i1 + 1, index1 + 2].active() || !Main.tileSolid[(int) type2] && !Main.tileSolidTop[(int) type2] || Main.tile[i1 + 1, index1 + 2].halfBrick() || Main.tile[i1 + 1, index1 + 2].slope() != (byte) 0 && !Main.tile[i1 + 1, index1 + 2].bottomSlope())
|
|
flag2 = true;
|
|
if (flag2)
|
|
{
|
|
if (Main.tile[i1, index1].wall < (ushort) 1 || Main.tile[i1 + 1, index1].wall < (ushort) 1 || Main.tile[i1, index1 + 1].wall < (ushort) 1 || Main.tile[i1 + 1, index1 + 1].wall < (ushort) 1)
|
|
{
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
if (num5 < 72)
|
|
{
|
|
for (int index4 = i1; index4 < i1 + 2; ++index4)
|
|
{
|
|
for (int index5 = index1; index5 < index1 + 2; ++index5)
|
|
Main.tile[index4, index5].frameX += (short) 72;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num5 >= 72)
|
|
{
|
|
for (int index6 = i1; index6 < i1 + 2; ++index6)
|
|
{
|
|
for (int index7 = index1; index7 < index1 + 2; ++index7)
|
|
Main.tile[index6, index7].frameX -= (short) 72;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 138:
|
|
case 484:
|
|
ushort type3 = Main.tile[i1, index1 - 1].type;
|
|
ushort type4 = Main.tile[i1 + 1, index1 - 1].type;
|
|
if ((TileID.Sets.BasicChest[(int) type3] || TileID.Sets.BasicChest[(int) type4] || type3 == (ushort) 88 || type4 == (ushort) 88 || TileID.Sets.BasicChestFake[(int) type3] || TileID.Sets.BasicChestFake[(int) type4] || type3 == (ushort) 470 || type4 == (ushort) 470 || type3 == (ushort) 475 ? 1 : (type4 == (ushort) 475 ? 1 : 0)) == 0 && !WorldGen.SolidTileAllowBottomSlope(i1, index1 + 2) && !WorldGen.SolidTileAllowBottomSlope(i1 + 1, index1 + 2))
|
|
{
|
|
flag1 = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (!flag1)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i3 = i1; i3 < i1 + 2; ++i3)
|
|
{
|
|
for (int j2 = index1; j2 < index1 + 2; ++j2)
|
|
{
|
|
if ((int) Main.tile[i3, j2].type == type && Main.tile[i3, j2].active())
|
|
WorldGen.KillTile(i3, j2);
|
|
}
|
|
}
|
|
int Type = 0;
|
|
if (type <= 565)
|
|
{
|
|
switch (type - 521)
|
|
{
|
|
case 0:
|
|
Type = 4327;
|
|
break;
|
|
case 1:
|
|
Type = 4328;
|
|
break;
|
|
case 2:
|
|
Type = 4329;
|
|
break;
|
|
case 3:
|
|
Type = 4330;
|
|
break;
|
|
case 4:
|
|
Type = 4331;
|
|
break;
|
|
case 5:
|
|
Type = 4332;
|
|
break;
|
|
case 6:
|
|
Type = 4333;
|
|
break;
|
|
default:
|
|
if (type != 564)
|
|
{
|
|
if (type == 565)
|
|
{
|
|
Type = 4552;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
Type = 4553;
|
|
break;
|
|
}
|
|
}
|
|
else if (type != 594)
|
|
{
|
|
if (type != 621)
|
|
{
|
|
if (type == 622)
|
|
Type = 5008;
|
|
}
|
|
else
|
|
Type = 3750;
|
|
}
|
|
else
|
|
Type = 4869;
|
|
if (type == 598)
|
|
Type = 4880;
|
|
if (type == 360)
|
|
Type = 3072;
|
|
if (type == 580)
|
|
Type = 4846;
|
|
if (type == 620)
|
|
Type = 4964;
|
|
if (type == 505)
|
|
Type = 4275;
|
|
if (type == 543)
|
|
Type = 4398;
|
|
if (type == 568)
|
|
Type = 4655;
|
|
if (type == 569)
|
|
Type = 4656;
|
|
if (type == 570)
|
|
Type = 4657;
|
|
if (type >= 288 && type <= 295)
|
|
Type = 2178 + type - 288;
|
|
if (type >= 316 && type <= 318)
|
|
Type = 2439 + type - 316;
|
|
if (type == 85)
|
|
Type = 321;
|
|
if (type == 94)
|
|
Type = 352;
|
|
if (type == 95)
|
|
Type = 344;
|
|
if (type == 96)
|
|
Type = 345;
|
|
if (type == 97)
|
|
Type = 346;
|
|
if (type == 98)
|
|
Type = 347;
|
|
if (type == 99)
|
|
Type = 348;
|
|
if (type == 335)
|
|
Type = 2700;
|
|
if (type == 411)
|
|
Type = 3545;
|
|
if (type == 100)
|
|
{
|
|
if (num4 == 0)
|
|
Type = 349;
|
|
else if (num4 >= 1 && num4 <= 12)
|
|
Type = 2092 + num4 - 1;
|
|
else if (num4 >= 13 && num4 <= 16)
|
|
{
|
|
Type = 2149 + num4 - 13;
|
|
}
|
|
else
|
|
{
|
|
switch (num4)
|
|
{
|
|
case 17:
|
|
Type = 2227;
|
|
break;
|
|
case 18:
|
|
Type = 2522;
|
|
break;
|
|
case 19:
|
|
Type = 2541;
|
|
break;
|
|
case 20:
|
|
Type = 2555;
|
|
break;
|
|
case 21:
|
|
Type = 2570;
|
|
break;
|
|
case 22:
|
|
Type = 2664;
|
|
break;
|
|
case 23:
|
|
Type = 2665;
|
|
break;
|
|
case 24:
|
|
Type = 2666;
|
|
break;
|
|
case 25:
|
|
Type = 2667;
|
|
break;
|
|
case 26:
|
|
Type = 2668;
|
|
break;
|
|
case 27:
|
|
Type = 2825;
|
|
break;
|
|
case 28:
|
|
Type = 3168;
|
|
break;
|
|
case 29:
|
|
Type = 3170;
|
|
break;
|
|
case 30:
|
|
Type = 3169;
|
|
break;
|
|
case 31:
|
|
Type = 3893;
|
|
break;
|
|
case 32:
|
|
Type = 3935;
|
|
break;
|
|
case 33:
|
|
Type = 3961;
|
|
break;
|
|
case 34:
|
|
Type = 4149;
|
|
break;
|
|
case 35:
|
|
Type = 4170;
|
|
break;
|
|
case 36:
|
|
Type = 4191;
|
|
break;
|
|
case 37:
|
|
Type = 4212;
|
|
break;
|
|
case 38:
|
|
Type = 4302;
|
|
break;
|
|
case 39:
|
|
Type = 4570;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (type == 173)
|
|
Type = 714;
|
|
if (type == 125)
|
|
Type = 487;
|
|
if (type == 287)
|
|
Type = 2177;
|
|
if (type == 126)
|
|
Type = 488;
|
|
if (type == 132)
|
|
Type = 513;
|
|
if (type == 142)
|
|
Type = 581;
|
|
if (type == 143)
|
|
Type = 582;
|
|
if (type == 282)
|
|
Type = 250;
|
|
if (type == 319)
|
|
Type = 2490;
|
|
if (type == 490)
|
|
Type = 4075;
|
|
if (type == 172)
|
|
{
|
|
Type = 2827 + num4;
|
|
switch (num4)
|
|
{
|
|
case 29:
|
|
Type = 3147;
|
|
break;
|
|
case 30:
|
|
Type = 3149;
|
|
break;
|
|
case 31:
|
|
Type = 3148;
|
|
break;
|
|
case 32:
|
|
Type = 3896;
|
|
break;
|
|
case 33:
|
|
Type = 3946;
|
|
break;
|
|
case 34:
|
|
Type = 3972;
|
|
break;
|
|
case 35:
|
|
Type = 4160;
|
|
break;
|
|
case 36:
|
|
Type = 4181;
|
|
break;
|
|
case 37:
|
|
Type = 4202;
|
|
break;
|
|
case 38:
|
|
Type = 4223;
|
|
break;
|
|
case 39:
|
|
Type = 4312;
|
|
break;
|
|
case 40:
|
|
Type = 4581;
|
|
break;
|
|
}
|
|
}
|
|
if (Type != 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
if (type == 138 && !WorldGen.gen && Main.netMode != 1)
|
|
Projectile.NewProjectile((float) (i1 * 16) + 15.5f, (float) (index1 * 16 + 16), 0.0f, 0.0f, 99, 70, 10f, Main.myPlayer);
|
|
if (type == 484 && !WorldGen.gen && Main.netMode != 1)
|
|
Projectile.NewProjectile((float) (i1 * 16) + 15.5f, (float) (index1 * 16 + 16), 0.0f, 0.0f, 727, 70, 10f, Main.myPlayer);
|
|
WorldGen.destroyObject = false;
|
|
for (int i4 = i1 - 1; i4 < i1 + 3; ++i4)
|
|
{
|
|
for (int j3 = index1 - 1; j3 < index1 + 3; ++j3)
|
|
WorldGen.TileFrame(i4, j3);
|
|
}
|
|
}
|
|
|
|
public static bool CheckBoulderChest(int i, int j)
|
|
{
|
|
int num1 = (int) Main.tile[i, j].frameX / 18 * -1;
|
|
if (num1 < -1)
|
|
num1 += 2;
|
|
int index = num1 + i;
|
|
int frameY = (int) Main.tile[i, j].frameY;
|
|
while (frameY >= 36)
|
|
frameY -= 36;
|
|
int num2 = j - frameY / 18;
|
|
return WorldGen.IsAContainer(Main.tile[index, num2 - 1]) || WorldGen.IsAContainer(Main.tile[index + 1, num2 - 1]);
|
|
}
|
|
|
|
public static bool IsAContainer(Tile t) => t.type == (ushort) 88 || t.type == (ushort) 470 || t.type == (ushort) 475 || TileID.Sets.BasicChest[(int) t.type] || TileID.Sets.BasicChestFake[(int) t.type];
|
|
|
|
public static void OreRunner(int i, int j, double strength, int steps, ushort type)
|
|
{
|
|
double num1 = strength;
|
|
float num2 = (float) steps;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
while (num1 > 0.0 && (double) num2 > 0.0)
|
|
{
|
|
if ((double) vector2_1.Y < 0.0 && (double) num2 > 0.0 && type == (ushort) 59)
|
|
num2 = 0.0f;
|
|
num1 = strength * ((double) num2 / (double) steps);
|
|
--num2;
|
|
int num3 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num4 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesX)
|
|
num4 = Main.maxTilesX;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesY)
|
|
num6 = Main.maxTilesY;
|
|
for (int index1 = num3; index1 < num4; ++index1)
|
|
{
|
|
for (int index2 = num5; index2 < num6; ++index2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < strength * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[index1, index2].active() && (Main.tile[index1, index2].type == (ushort) 0 || Main.tile[index1, index2].type == (ushort) 1 || Main.tile[index1, index2].type == (ushort) 23 || Main.tile[index1, index2].type == (ushort) 25 || Main.tile[index1, index2].type == (ushort) 40 || Main.tile[index1, index2].type == (ushort) 53 || Main.tile[index1, index2].type == (ushort) 57 || Main.tile[index1, index2].type == (ushort) 59 || Main.tile[index1, index2].type == (ushort) 60 || Main.tile[index1, index2].type == (ushort) 70 || Main.tile[index1, index2].type == (ushort) 109 || Main.tile[index1, index2].type == (ushort) 112 || Main.tile[index1, index2].type == (ushort) 116 || Main.tile[index1, index2].type == (ushort) 117 || Main.tile[index1, index2].type == (ushort) 147 || Main.tile[index1, index2].type == (ushort) 161 || Main.tile[index1, index2].type == (ushort) 163 || Main.tile[index1, index2].type == (ushort) 164 || Main.tileMoss[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].type == (ushort) 199 || Main.tile[index1, index2].type == (ushort) 200 || Main.tile[index1, index2].type == (ushort) 203 || Main.tile[index1, index2].type == (ushort) 234 || Main.tile[index1, index2].type == (ushort) 225 && Main.tile[index1, index2].wall != (ushort) 108))
|
|
{
|
|
Main.tile[index1, index2].type = type;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
}
|
|
}
|
|
|
|
public static void SmashAltar(int i, int j)
|
|
{
|
|
if (Main.netMode == 1 || !Main.hardMode || WorldGen.noTileActions || WorldGen.gen)
|
|
return;
|
|
int num1 = WorldGen.altarCount % 3;
|
|
int num2 = WorldGen.altarCount / 3 + 1;
|
|
float num3 = (float) (Main.maxTilesX / 4200);
|
|
int num4 = 1 - num1;
|
|
float num5 = (num3 * 310f - (float) (85 * num1)) * 0.85f / (float) num2;
|
|
bool flag = false;
|
|
if (Main.drunkWorld)
|
|
{
|
|
switch (WorldGen.SavedOreTiers.Adamantite)
|
|
{
|
|
case 111:
|
|
WorldGen.SavedOreTiers.Adamantite = 223;
|
|
break;
|
|
case 223:
|
|
WorldGen.SavedOreTiers.Adamantite = 111;
|
|
break;
|
|
}
|
|
}
|
|
int num6;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
if (WorldGen.SavedOreTiers.Cobalt == -1)
|
|
{
|
|
flag = true;
|
|
WorldGen.SavedOreTiers.Cobalt = 107;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SavedOreTiers.Cobalt = 221;
|
|
}
|
|
int index1 = 12;
|
|
if (WorldGen.SavedOreTiers.Cobalt == 221)
|
|
{
|
|
index1 += 9;
|
|
num5 *= 0.9f;
|
|
}
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Lang.misc[index1].Value, (byte) 50, B: (byte) 130);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[index1].Key), new Color(50, (int) byte.MaxValue, 130));
|
|
break;
|
|
}
|
|
num6 = WorldGen.SavedOreTiers.Cobalt;
|
|
num5 *= 1.05f;
|
|
break;
|
|
case 1:
|
|
if (Main.drunkWorld)
|
|
{
|
|
if (WorldGen.SavedOreTiers.Mythril == 108)
|
|
WorldGen.SavedOreTiers.Mythril = 222;
|
|
else if (WorldGen.SavedOreTiers.Mythril == 222)
|
|
WorldGen.SavedOreTiers.Mythril = 108;
|
|
}
|
|
if (WorldGen.SavedOreTiers.Mythril == -1)
|
|
{
|
|
flag = true;
|
|
WorldGen.SavedOreTiers.Mythril = 108;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SavedOreTiers.Mythril = 222;
|
|
}
|
|
int index2 = 13;
|
|
if (WorldGen.SavedOreTiers.Mythril == 222)
|
|
{
|
|
index2 += 9;
|
|
num5 *= 0.9f;
|
|
}
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Lang.misc[index2].Value, (byte) 50, B: (byte) 130);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[index2].Key), new Color(50, (int) byte.MaxValue, 130));
|
|
break;
|
|
}
|
|
num6 = WorldGen.SavedOreTiers.Mythril;
|
|
break;
|
|
default:
|
|
if (Main.drunkWorld)
|
|
{
|
|
switch (WorldGen.SavedOreTiers.Cobalt)
|
|
{
|
|
case 107:
|
|
WorldGen.SavedOreTiers.Cobalt = 221;
|
|
break;
|
|
case 221:
|
|
WorldGen.SavedOreTiers.Cobalt = 107;
|
|
break;
|
|
}
|
|
}
|
|
if (WorldGen.SavedOreTiers.Adamantite == -1)
|
|
{
|
|
flag = true;
|
|
WorldGen.SavedOreTiers.Adamantite = 111;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.SavedOreTiers.Adamantite = 223;
|
|
}
|
|
int index3 = 14;
|
|
if (WorldGen.SavedOreTiers.Adamantite == 223)
|
|
{
|
|
index3 += 9;
|
|
num5 *= 0.9f;
|
|
}
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(Lang.misc[index3].Value, (byte) 50, B: (byte) 130);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[index3].Key), new Color(50, (int) byte.MaxValue, 130));
|
|
break;
|
|
}
|
|
num6 = WorldGen.SavedOreTiers.Adamantite;
|
|
break;
|
|
}
|
|
if (flag)
|
|
NetMessage.SendData(7);
|
|
for (int index4 = 0; (double) index4 < (double) num5; ++index4)
|
|
{
|
|
int i1 = WorldGen.genRand.Next(100, Main.maxTilesX - 100);
|
|
double num7 = Main.worldSurface;
|
|
if (num6 == 108 || num6 == 222)
|
|
num7 = Main.rockLayer;
|
|
if (num6 == 111 || num6 == 223)
|
|
num7 = (Main.rockLayer + Main.rockLayer + (double) Main.maxTilesY) / 3.0;
|
|
int j1 = WorldGen.genRand.Next((int) num7, Main.maxTilesY - 150);
|
|
double strength = (double) WorldGen.genRand.Next(5, 9 + num4);
|
|
int steps = WorldGen.genRand.Next(5, 9 + num4);
|
|
int num8 = (int) (ushort) num6;
|
|
WorldGen.OreRunner(i1, j1, strength, steps, (ushort) num8);
|
|
}
|
|
int num9 = WorldGen.genRand.Next(3);
|
|
int num10 = 0;
|
|
while (num9 != 2 && num10++ < 1000)
|
|
{
|
|
int tileX = WorldGen.genRand.Next(100, Main.maxTilesX - 100);
|
|
int tileY = WorldGen.genRand.Next((int) Main.rockLayer + 50, Main.maxTilesY - 300);
|
|
if (Main.tile[tileX, tileY].active() && Main.tile[tileX, tileY].type == (ushort) 1)
|
|
{
|
|
Main.tile[tileX, tileY].type = num9 != 0 ? (ushort) 117 : (!WorldGen.crimson ? (ushort) 25 : (ushort) 203);
|
|
if (Main.netMode == 2)
|
|
{
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 1);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (Main.netMode != 1)
|
|
{
|
|
int num11 = Main.rand.Next(2) + 1;
|
|
for (int index5 = 0; index5 < num11; ++index5)
|
|
NPC.SpawnOnPlayer((int) Player.FindClosest(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16), 82);
|
|
}
|
|
++WorldGen.altarCount;
|
|
AchievementsHelper.NotifyProgressionEvent(6);
|
|
}
|
|
|
|
public static void Check3x1(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
int num2 = 0;
|
|
while (num1 > 2)
|
|
{
|
|
num1 -= 3;
|
|
++num2;
|
|
}
|
|
int num3 = i - num1;
|
|
int num4 = num2 * 54;
|
|
for (int i1 = num3; i1 < num3 + 3; ++i1)
|
|
{
|
|
int index = j;
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != (i1 - num3) * 18 + num4 || Main.tile[i1, index].frameY != (short) 0)
|
|
flag = true;
|
|
if (Main.tile[i1, index - 1].active() && (TileID.Sets.BasicChest[(int) Main.tile[i1, index - 1].type] || TileID.Sets.BasicChestFake[(int) Main.tile[i1, index - 1].type] || Main.tile[i1, index - 1].type == (ushort) 88 || Main.tile[i1, index - 1].type == (ushort) 470 || Main.tile[i1, index - 1].type == (ushort) 475 || Main.tile[i1, index - 1].type == (ushort) 597))
|
|
return;
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, index + 1))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
if (type == 235)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1263);
|
|
for (int i2 = num3; i2 < num3 + 3; ++i2)
|
|
{
|
|
int j1 = j;
|
|
if (Main.tile[i2, j1] == null)
|
|
Main.tile[i2, j1] = new Tile();
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num3 - 1; i3 < num3 + 4; ++i3)
|
|
{
|
|
int j2 = j;
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check3x2(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
int num1 = j;
|
|
if (Main.tile[i, j] == null)
|
|
Main.tile[i, j] = new Tile();
|
|
int num2 = 36;
|
|
int num3 = (int) Main.tile[i, j].frameY / num2;
|
|
int num4 = (int) Main.tile[i, j].frameY % num2;
|
|
int index1 = num1 - num4 / 18;
|
|
int num5 = (int) Main.tile[i, j].frameX / 18;
|
|
int style = 0;
|
|
while (num5 > 2)
|
|
{
|
|
num5 -= 3;
|
|
++style;
|
|
}
|
|
int index2 = i - num5;
|
|
int num6 = style * 54;
|
|
if (type == 14 && style == 25)
|
|
flag2 = true;
|
|
int j1 = index1 + 2;
|
|
if (flag2)
|
|
--j1;
|
|
for (int i1 = index2; i1 < index2 + 3; ++i1)
|
|
{
|
|
for (int index3 = index1; index3 < j1; ++index3)
|
|
{
|
|
if (Main.tile[i1, index3] == null)
|
|
Main.tile[i1, index3] = new Tile();
|
|
if (!Main.tile[i1, index3].active() || (int) Main.tile[i1, index3].type != type || (int) Main.tile[i1, index3].frameX != (i1 - index2) * 18 + num6 || (int) Main.tile[i1, index3].frameY != (index3 - index1) * 18 + num3 * 36)
|
|
flag1 = true;
|
|
}
|
|
if (type == 285 || type == 286 || type == 298 || type == 299 || type == 310 || type == 339 || type == 538 || type >= 361 && type <= 364 || type == 532 || type == 544 || type == 533 || type == 555 || type == 556 || type == 582 || type == 619)
|
|
{
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, j1) && (Main.tile[i1, j1] == null || !Main.tile[i1, j1].nactive() || !Main.tileSolidTop[(int) Main.tile[i1, j1].type] || Main.tile[i1, j1].frameY != (short) 0) && (Main.tile[i1, j1] == null || !Main.tile[i1, j1].active() || !TileID.Sets.Platforms[(int) Main.tile[i1, j1].type]))
|
|
flag1 = true;
|
|
}
|
|
else if (type == 488)
|
|
{
|
|
int num7 = 0;
|
|
if (Main.tile[i1, j1] != null && Main.tile[i1, j1].active())
|
|
num7 = (int) Main.tile[i1, j1].type;
|
|
if ((num7 == 2 || num7 == 477 || num7 == 109 ? 1 : (num7 == 492 ? 1 : 0)) == 0)
|
|
flag1 = true;
|
|
}
|
|
else if (!WorldGen.SolidTileAllowBottomSlope(i1, j1))
|
|
flag1 = true;
|
|
}
|
|
if (type == 187 && Main.tile[index2, index1] != null && Main.tile[index2, index1].frameX >= (short) 756 && Main.tile[index2, index1].frameX <= (short) 900 && Main.tile[index2, index1 + 2].type != (ushort) 2 && Main.tile[index2 + 1, index1 + 2].type != (ushort) 2 && Main.tile[index2 + 2, index1 + 2].type != (ushort) 2 && Main.tile[index2, index1 + 2].type != (ushort) 477 && Main.tile[index2 + 1, index1 + 2].type != (ushort) 477 && Main.tile[index2 + 2, index1 + 2].type != (ushort) 477 && Main.tile[index2, index1 + 2].type != (ushort) 492 && Main.tile[index2 + 1, index1 + 2].type != (ushort) 492 && Main.tile[index2 + 2, index1 + 2].type != (ushort) 492)
|
|
{
|
|
Main.tile[index2, index1].frameX -= (short) 378;
|
|
Main.tile[index2 + 1, index1].frameX -= (short) 378;
|
|
Main.tile[index2 + 2, index1].frameX -= (short) 378;
|
|
Main.tile[index2, index1 + 1].frameX -= (short) 378;
|
|
Main.tile[index2 + 1, index1 + 1].frameX -= (short) 378;
|
|
Main.tile[index2 + 2, index1 + 1].frameX -= (short) 378;
|
|
Main.tile[index2, index1].type = (ushort) 186;
|
|
Main.tile[index2 + 1, index1].type = (ushort) 186;
|
|
Main.tile[index2 + 2, index1].type = (ushort) 186;
|
|
Main.tile[index2, index1 + 1].type = (ushort) 186;
|
|
Main.tile[index2 + 1, index1 + 1].type = (ushort) 186;
|
|
Main.tile[index2 + 2, index1 + 1].type = (ushort) 186;
|
|
}
|
|
if (flag1 && type == 488 && WorldGen.gen)
|
|
{
|
|
for (int index4 = index2; index4 < index2 + 3; ++index4)
|
|
{
|
|
for (int index5 = index1; index5 < index1 + 2; ++index5)
|
|
{
|
|
Main.tile[index4, index5].active(true);
|
|
Main.tile[index4, index5].type = (ushort) 488;
|
|
Main.tile[index4, index5].frameX = (short) ((index4 - index2) * 18);
|
|
Main.tile[index4, index5].frameY = (short) ((index5 - index1) * 18);
|
|
}
|
|
Main.tile[index4, index1 + 2].active(true);
|
|
Main.tile[index4, index1 + 2].type = (ushort) 2;
|
|
Main.tile[index4, index1 + 2].slope((byte) 0);
|
|
Main.tile[index4, index1 + 2].halfBrick(false);
|
|
}
|
|
flag1 = false;
|
|
}
|
|
if (!flag1)
|
|
return;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
int num8 = index1 + 3;
|
|
if (flag2)
|
|
{
|
|
int num9 = num8 - 1;
|
|
}
|
|
for (int i2 = index2; i2 < index2 + 3; ++i2)
|
|
{
|
|
for (int j2 = index1; j2 < index1 + 3; ++j2)
|
|
{
|
|
if (Main.tile[i2, j2] == null)
|
|
Main.tile[i2, j2] = new Tile();
|
|
if ((int) Main.tile[i2, j2].type == type && Main.tile[i2, j2].active())
|
|
WorldGen.KillTile(i2, j2);
|
|
}
|
|
}
|
|
if (type == 14)
|
|
{
|
|
int Type = style < 1 || style > 3 ? (style < 15 || style > 20 ? (style < 4 || style > 7 ? (style != 8 ? (style != 9 ? (style != 10 ? (style != 11 ? (style != 12 ? (style != 13 ? (style != 14 ? (style != 23 ? (style != 21 ? (style != 22 ? (style != 24 ? (style != 25 ? (style != 26 ? (style != 27 ? (style != 28 ? (style != 29 ? (style != 30 ? (style != 31 ? (style != 32 ? (style != 33 ? (style != 34 ? 32 : 3154) : 3155) : 3153) : 2824) : 2743) : 2583) : 677) : 2550) : 2532) : 2259) : 2248) : 1816) : 1794) : 1926) : 1510) : 1460) : 1403) : 1400) : 1397) : 1144) : 917) : 823 + style) : 1698 + style) : 637 + style;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
}
|
|
if (type == 469)
|
|
{
|
|
int Type = 3920;
|
|
if (style == 1)
|
|
Type = 3948;
|
|
if (style == 2)
|
|
Type = 3974;
|
|
if (style == 3)
|
|
Type = 4162;
|
|
if (style == 4)
|
|
Type = 4183;
|
|
if (style == 5)
|
|
Type = 4204;
|
|
if (style == 6)
|
|
Type = 4225;
|
|
if (style == 7)
|
|
Type = 4314;
|
|
if (style == 8)
|
|
Type = 4583;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
}
|
|
else if (type == 114)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 398);
|
|
else if (type == 26)
|
|
{
|
|
if (!WorldGen.noTileActions && !WorldGen.IsGeneratingHardMode)
|
|
WorldGen.SmashAltar(i, j);
|
|
}
|
|
else if (type == 298)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2190);
|
|
else if (type == 299)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2191);
|
|
else if (type >= 361 && type <= 364)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3073 + type - 361);
|
|
else if (type >= 391 && type <= 394)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 48, 32, 3254 + type - 391);
|
|
}
|
|
else
|
|
{
|
|
switch (type)
|
|
{
|
|
case 17:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 33);
|
|
break;
|
|
case 77:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 221);
|
|
break;
|
|
case 86:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 332);
|
|
break;
|
|
case 87:
|
|
int Type1 = style < 1 || style > 3 ? (style != 4 ? (style < 5 || style > 7 ? (style < 8 || style > 10 ? (style < 11 || style > 20 ? (style != 21 ? (style != 22 ? (style != 23 ? (style != 24 ? (style != 25 ? (style != 26 ? (style != 27 ? (style != 28 ? (style != 29 ? (style != 30 ? (style != 31 ? (style != 32 ? (style != 33 ? (style != 34 ? (style != 35 ? (style != 36 ? (style != 37 ? (style != 38 ? (style != 39 ? 333 : 4579) : 4310) : 4221) : 4200) : 4179) : 4158) : 3971) : 3944) : 3916) : 3915) : 3142) : 3143) : 3141) : 2821) : 2671) : 2580) : 2565) : 2548) : 2531) : 2376 + style - 11) : 2254 + style - 8) : 2245 + style - 5) : 919) : 640 + style;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type1);
|
|
break;
|
|
case 88:
|
|
int dresserItemDrop = WorldGen.GetDresserItemDrop(style);
|
|
Item.NewItem(i * 16, j * 16, 32, 32, dresserItemDrop);
|
|
break;
|
|
case 89:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, WorldGen.GetItemDrop_Benches(style));
|
|
break;
|
|
case 133:
|
|
if (frameX >= 54)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1221);
|
|
break;
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 524);
|
|
break;
|
|
case 186:
|
|
if (frameX >= 864)
|
|
{
|
|
if (frameX <= 954)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 71, WorldGen.genRand.Next(40, 100));
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (frameX <= 1062)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, WorldGen.genRand.Next(10, 100));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, WorldGen.genRand.Next(20, 100));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, WorldGen.genRand.Next(30, 100));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, WorldGen.genRand.Next(40, 100));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, WorldGen.genRand.Next(50, 100));
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (frameX <= 1170)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73, WorldGen.genRand.Next(1, 7));
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73, WorldGen.genRand.Next(2, 7));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73, WorldGen.genRand.Next(3, 7));
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73, WorldGen.genRand.Next(4, 7));
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73, WorldGen.genRand.Next(5, 7));
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 215:
|
|
switch (style)
|
|
{
|
|
case 0:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 966);
|
|
break;
|
|
case 6:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3723);
|
|
break;
|
|
case 7:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3724);
|
|
break;
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
case 13:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4689 + style - 8);
|
|
break;
|
|
default:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3046 + style - 1);
|
|
break;
|
|
}
|
|
break;
|
|
case 217:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 995);
|
|
break;
|
|
case 218:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 996);
|
|
break;
|
|
case 219:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 997);
|
|
break;
|
|
case 220:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 998);
|
|
break;
|
|
case 228:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1120);
|
|
break;
|
|
case 237:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1292);
|
|
break;
|
|
case 244:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1449);
|
|
break;
|
|
case 285:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2174);
|
|
break;
|
|
case 286:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2175);
|
|
break;
|
|
case 310:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2207);
|
|
break;
|
|
case 339:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2741);
|
|
break;
|
|
case 377:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3198);
|
|
break;
|
|
case 405:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3364);
|
|
break;
|
|
case 486:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4063);
|
|
break;
|
|
case 488:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 9, WorldGen.genRand.Next(10, 21));
|
|
break;
|
|
case 532:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4364);
|
|
break;
|
|
case 533:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4376);
|
|
break;
|
|
case 538:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4380);
|
|
break;
|
|
case 544:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4399);
|
|
break;
|
|
case 555:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4475);
|
|
break;
|
|
case 556:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4476);
|
|
break;
|
|
case 582:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4850);
|
|
break;
|
|
case 619:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4963);
|
|
break;
|
|
default:
|
|
if (type == 187 && frameX >= 918 && frameX <= 970)
|
|
{
|
|
if (Main.rand.Next(50) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4144);
|
|
break;
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 989);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = index2 - 1; i3 < index2 + 4; ++i3)
|
|
{
|
|
for (int j3 = index1 - 1; j3 < index1 + 4; ++j3)
|
|
WorldGen.TileFrame(i3, j3);
|
|
}
|
|
if (type != 488)
|
|
return;
|
|
WorldGen.mysticLogsEvent.FallenLogDestroyed();
|
|
}
|
|
|
|
private static int GetDresserItemDrop(int style) => style < 1 || style > 3 ? (style != 4 ? (style < 5 || style > 15 ? (style != 16 ? (style != 17 ? (style != 18 ? (style != 19 ? (style != 20 ? (style != 21 ? (style != 22 ? (style != 23 ? (style != 24 ? (style != 25 ? (style != 26 ? (style != 27 ? (style != 28 ? (style != 29 ? (style != 30 ? (style != 31 ? (style != 32 ? (style != 33 ? (style != 34 ? (style != 35 ? (style != 36 ? (style != 37 ? (style != 38 ? (style != 39 ? 334 : 4569) : 4301) : 4211) : 4190) : 4169) : 4148) : 3968) : 3934) : 3914) : 3913) : 3912) : 3911) : 3133) : 3134) : 3132) : 2816) : 2640) : 2639) : 2638) : 2637) : 2577) : 2562) : 2545) : 2529) : 2386 + style - 5) : 918) : 646 + style;
|
|
|
|
public static void Check3x4(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = i;
|
|
int num2 = j;
|
|
int num3 = 0;
|
|
int num4 = 0;
|
|
int num5 = (int) Main.tile[i, j].frameX / 18;
|
|
int num6 = (int) Main.tile[i, j].frameY / 18;
|
|
for (; num5 >= 3; num5 -= 3)
|
|
++num3;
|
|
for (; num6 >= 4; num6 -= 4)
|
|
++num4;
|
|
int num7 = num1 - num5;
|
|
int num8 = num2 - num6;
|
|
for (int i1 = num7; i1 < num7 + 3; ++i1)
|
|
{
|
|
for (int index = num8; index < num8 + 4; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != num3 * 54 + (i1 - num7) * 18 || (int) Main.tile[i1, index].frameY != num4 * 72 + (index - num8) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num8 + 4] == null)
|
|
Main.tile[i1, num8 + 4] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num8 + 4))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num7; i2 < num7 + 3; ++i2)
|
|
{
|
|
for (int j1 = num8; j1 < num8 + 4; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
case 101:
|
|
int Type1 = num3 != 1 ? (num3 != 2 ? (num3 != 3 ? (num3 != 4 ? (num3 != 5 ? (num3 != 6 ? (num3 != 7 ? (num3 != 8 ? (num3 != 9 ? (num3 != 10 ? (num3 != 11 ? (num3 != 12 ? (num3 != 13 ? (num3 != 14 ? (num3 != 15 ? (num3 != 16 ? (num3 != 17 ? (num3 < 18 || num3 > 21 ? (num3 != 22 ? (num3 != 23 ? (num3 != 24 ? (num3 != 25 ? (num3 != 26 ? (num3 != 27 ? (num3 != 28 ? (num3 != 29 ? (num3 != 30 ? (num3 != 31 ? (num3 != 32 ? (num3 != 33 ? (num3 != 34 ? (num3 != 35 ? (num3 != 36 ? (num3 != 37 ? (num3 != 38 ? (num3 != 39 ? (num3 != 40 ? 354 : 4568) : 4300) : 4210) : 4189) : 4168) : 4147) : 3960) : 3933) : 3917) : 3166) : 3167) : 3165) : 2817) : 2670) : 2569) : 2554) : 2540) : 2536) : 2233) : 2135 + num3 - 18) : 2031) : 2030) : 2029) : 2028) : 2027) : 2026) : 2025) : 2024) : 2023) : 2022) : 2021) : 2020) : 1512) : 1463) : 1416) : 1415) : 1414;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type1);
|
|
break;
|
|
case 102:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 355);
|
|
break;
|
|
case 463:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3813);
|
|
break;
|
|
case 617:
|
|
int Type2 = 4924 + num3;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type2);
|
|
break;
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num7 - 1; i3 < num7 + 4; ++i3)
|
|
{
|
|
for (int j2 = num8 - 1; j2 < num8 + 4; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check5x4(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = i;
|
|
int num2 = j;
|
|
int num3 = 0;
|
|
int num4;
|
|
for (num4 = (int) Main.tile[i, j].frameX / 18; num4 >= 5; num4 -= 5)
|
|
++num3;
|
|
int num5 = num1 - num4;
|
|
int num6 = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
for (int i1 = num5; i1 < num5 + 5; ++i1)
|
|
{
|
|
for (int index = num6; index < num6 + 4; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != num3 * 90 + (i1 - num5) * 18 || (int) Main.tile[i1, index].frameY != (index - num6) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num6 + 4] == null)
|
|
Main.tile[i1, num6 + 4] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num6 + 4))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num5; i2 < num5 + 5; ++i2)
|
|
{
|
|
for (int j1 = num6; j1 < num6 + 4; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 464)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3814);
|
|
if (type == 466)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3816);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num5 - 1; i3 < num5 + 6; ++i3)
|
|
{
|
|
for (int j2 = num6 - 1; j2 < num6 + 5; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check6x3(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = i;
|
|
int num2 = j;
|
|
int num3 = num1 + (int) Main.tile[i, j].frameX / 18 * -1;
|
|
int num4 = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
for (int i1 = num3; i1 < num3 + 6; ++i1)
|
|
{
|
|
for (int index = num4; index < num4 + 3; ++index)
|
|
{
|
|
int num5 = (i1 - num3) * 18;
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != num5 || (int) Main.tile[i1, index].frameY != (index - num4) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num4 + 3] == null)
|
|
Main.tile[i1, num4 + 3] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num4 + 3) && (!Main.tile[i1, num4 + 3].nactive() || !Main.tileSolidTop[(int) Main.tile[i1, num4 + 3].type] || Main.tile[i1, num4 + 3].frameY != (short) 0))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num3; i2 < num3 + 6; ++i2)
|
|
{
|
|
for (int j1 = num4; j1 < num4 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 275)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2162);
|
|
if (type == 413)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3565);
|
|
if (type == 414)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3566);
|
|
if (type == 276)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2163);
|
|
if (type == 277)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2164);
|
|
if (type == 278)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2165);
|
|
if (type == 279)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2166);
|
|
if (type == 280)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2167);
|
|
if (type == 281)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2168);
|
|
if (type == 296)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2186);
|
|
if (type == 297)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2187);
|
|
if (type == 309)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2206);
|
|
if (type == 358)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3070);
|
|
if (type == 359)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3071);
|
|
if (type == 542)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4396);
|
|
if (type == 550)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4461);
|
|
if (type == 551)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4462);
|
|
if (type == 553)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4473);
|
|
if (type == 554)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4474);
|
|
if (type == 558)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4481);
|
|
if (type == 559)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4483);
|
|
if (type == 599)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4882);
|
|
if (type == 600)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4883);
|
|
if (type == 601)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4884);
|
|
if (type == 602)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4885);
|
|
if (type == 603)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4886);
|
|
if (type == 604)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4887);
|
|
if (type == 605)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4888);
|
|
if (type == 606)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4889);
|
|
if (type == 607)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4890);
|
|
if (type == 608)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4891);
|
|
if (type == 609)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4892);
|
|
if (type == 610)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4893);
|
|
if (type == 611)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4894);
|
|
if (type == 612)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4895);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num3 - 1; i3 < num3 + 7; ++i3)
|
|
{
|
|
for (int j2 = num4 - 1; j2 < num4 + 4; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Place6x3(int x, int y, ushort type, int direction = -1, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 3; i < x + 3; ++i)
|
|
{
|
|
for (int index = y - 2; index <= y; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1) && (!Main.tile[i, y + 1].nactive() || !Main.tileSolidTop[(int) Main.tile[i, y + 1].type] || Main.tile[i, y + 1].frameY != (short) 0))
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num1 = 0;
|
|
for (int index1 = x - 3; index1 < x + 3; ++index1)
|
|
{
|
|
int num2 = 0;
|
|
for (int index2 = y - 2; index2 <= y; ++index2)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].frameY = (short) num2;
|
|
Main.tile[index1, index2].frameX = (short) num1;
|
|
Main.tile[index1, index2].type = type;
|
|
num2 += 18;
|
|
}
|
|
num1 += 18;
|
|
}
|
|
}
|
|
|
|
public static void Place4x2(int x, int y, ushort type, int direction = -1, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 3; ++i)
|
|
{
|
|
for (int index = y - 1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
flag = false;
|
|
}
|
|
short num1 = 0;
|
|
if (direction == 1)
|
|
num1 = (short) 72;
|
|
int num2 = 36 * style;
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = (short) num2;
|
|
Main.tile[x - 1, y - 1].frameX = num1;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = (short) num2;
|
|
Main.tile[x, y - 1].frameX = (short) (18 + (int) num1);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = (short) num2;
|
|
Main.tile[x + 1, y - 1].frameX = (short) (36 + (int) num1);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x + 2, y - 1].active(true);
|
|
Main.tile[x + 2, y - 1].frameY = (short) num2;
|
|
Main.tile[x + 2, y - 1].frameX = (short) (54 + (int) num1);
|
|
Main.tile[x + 2, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) (num2 + 18);
|
|
Main.tile[x - 1, y].frameX = num1;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) (num2 + 18);
|
|
Main.tile[x, y].frameX = (short) (18 + (int) num1);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) (num2 + 18);
|
|
Main.tile[x + 1, y].frameX = (short) (36 + (int) num1);
|
|
Main.tile[x + 1, y].type = type;
|
|
Main.tile[x + 2, y].active(true);
|
|
Main.tile[x + 2, y].frameY = (short) (num2 + 18);
|
|
Main.tile[x + 2, y].frameX = (short) (54 + (int) num1);
|
|
Main.tile[x + 2, y].type = type;
|
|
}
|
|
|
|
public static void ShootFromCannon(
|
|
int x,
|
|
int y,
|
|
int angle,
|
|
int ammo,
|
|
int Damage,
|
|
float KnockBack,
|
|
int owner)
|
|
{
|
|
float num1 = 14f;
|
|
float num2 = 0.0f;
|
|
float num3 = 0.0f;
|
|
int Type = 162;
|
|
if (ammo == 2)
|
|
Type = 281;
|
|
if (ammo == 3)
|
|
Type = 178;
|
|
if (ammo == 4)
|
|
{
|
|
Type = 601;
|
|
num1 = 3f;
|
|
}
|
|
if (ammo == 5)
|
|
{
|
|
Type = 601;
|
|
num1 = 3f;
|
|
}
|
|
int num4 = 0;
|
|
int num5 = 0;
|
|
if (ammo == 5)
|
|
num4 = 1;
|
|
if (ammo == 2)
|
|
num5 = owner + 1;
|
|
if (angle == 0)
|
|
{
|
|
num2 = 10f;
|
|
num3 = 0.0f;
|
|
}
|
|
if (angle == 1)
|
|
{
|
|
num2 = 7.5f;
|
|
num3 = -2.5f;
|
|
}
|
|
if (angle == 2)
|
|
{
|
|
num2 = 5f;
|
|
num3 = -5f;
|
|
}
|
|
if (angle == 3)
|
|
{
|
|
num2 = 2.75f;
|
|
num3 = -6f;
|
|
}
|
|
if (angle == 4)
|
|
{
|
|
num2 = 0.0f;
|
|
num3 = -10f;
|
|
}
|
|
if (angle == 5)
|
|
{
|
|
num2 = -2.75f;
|
|
num3 = -6f;
|
|
}
|
|
if (angle == 6)
|
|
{
|
|
num2 = -5f;
|
|
num3 = -5f;
|
|
}
|
|
if (angle == 7)
|
|
{
|
|
num2 = -7.5f;
|
|
num3 = -2.5f;
|
|
}
|
|
if (angle == 8)
|
|
{
|
|
num2 = -10f;
|
|
num3 = 0.0f;
|
|
}
|
|
Vector2 vector2 = new Vector2((float) ((x + 2) * 16), (float) ((y + 2) * 16));
|
|
float num6 = num2;
|
|
float num7 = num3;
|
|
float num8 = (float) Math.Sqrt((double) num6 * (double) num6 + (double) num7 * (double) num7);
|
|
if (ammo == 4 || ammo == 5)
|
|
{
|
|
if (angle == 4)
|
|
vector2.X += 5f;
|
|
vector2.Y += 5f;
|
|
}
|
|
float num9 = num1 / num8;
|
|
float SpeedX = num6 * num9;
|
|
float SpeedY = num7 * num9;
|
|
if (Main.myPlayer != owner && Main.netMode == 2 && (ammo == 4 || ammo == 5))
|
|
{
|
|
NetMessage.SendData(108, owner, number: Damage, number2: KnockBack, number3: ((float) x), number4: ((float) y), number5: angle, number6: ammo, number7: owner);
|
|
}
|
|
else
|
|
{
|
|
if (Main.netMode == 2)
|
|
owner = Main.myPlayer;
|
|
int index = Projectile.NewProjectile(vector2.X, vector2.Y, SpeedX, SpeedY, Type, Damage, KnockBack, owner, (float) num4, (float) num5);
|
|
Main.projectile[index].originatedFromActivableTile = true;
|
|
}
|
|
}
|
|
|
|
public static void SwitchCannon(int i, int j)
|
|
{
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
while (num1 >= 4)
|
|
num1 -= 4;
|
|
int num2 = (int) Main.tile[i, j].frameY / 18;
|
|
while (num2 >= 3)
|
|
num2 -= 3;
|
|
int num3 = 1;
|
|
if (num1 < 2)
|
|
num3 = -1;
|
|
int index1 = i - num1;
|
|
int index2 = j - num2;
|
|
if (num3 == 1 && Main.tile[index1, index2].frameY <= (short) 52 || num3 == -1 && Main.tile[index1, index2].frameY >= (short) 432)
|
|
return;
|
|
int num4 = num3 * -54;
|
|
for (int index3 = index1; index3 < index1 + 4; ++index3)
|
|
{
|
|
for (int index4 = index2; index4 < index2 + 3; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4] == null)
|
|
Main.tile[index3, index4] = new Tile();
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 209)
|
|
Main.tile[index3, index4].frameY += (short) num4;
|
|
}
|
|
}
|
|
NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 4);
|
|
}
|
|
|
|
public static void CheckCannon(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
int num2 = 0;
|
|
for (; num1 >= 4; num1 -= 4)
|
|
++num2;
|
|
int num3 = i - num1;
|
|
int num4 = (int) Main.tile[i, j].frameY / 18;
|
|
int num5 = 0;
|
|
for (; num4 >= 3; num4 -= 3)
|
|
num5 += 54;
|
|
int num6 = j - num4;
|
|
int num7 = 72 * num2;
|
|
for (int i1 = num3; i1 < num3 + 4; ++i1)
|
|
{
|
|
int num8 = num5;
|
|
for (int index = num6; index < num6 + 3; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != num7 || (int) Main.tile[i1, index].frameY != num8)
|
|
flag = true;
|
|
num8 += 18;
|
|
}
|
|
if (Main.tile[i1, num6 + 3] == null)
|
|
Main.tile[i1, num6 + 3] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num6 + 3) && i1 != num3 && i1 != num3 + 3)
|
|
flag = true;
|
|
num7 += 18;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num3; i2 < num3 + 4; ++i2)
|
|
{
|
|
for (int j1 = num6; j1 < num6 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
int Type = 928;
|
|
switch (num2)
|
|
{
|
|
case 1:
|
|
Type = 1337;
|
|
break;
|
|
case 2:
|
|
Type = 3369;
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
Type = 3664;
|
|
break;
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num3; i3 < num3 + 4; ++i3)
|
|
{
|
|
for (int j2 = num6; j2 < num6 + 3; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void PlaceCannon(int x, int y, ushort type, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 3; ++i)
|
|
{
|
|
for (int index = y - 2; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1) && i != x - 1 && i != x + 2)
|
|
flag = false;
|
|
}
|
|
int num1 = 72 * style;
|
|
int num2 = 0;
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x - 1, y - 2].active(true);
|
|
Main.tile[x - 1, y - 2].frameY = (short) num2;
|
|
Main.tile[x - 1, y - 2].frameX = (short) num1;
|
|
Main.tile[x - 1, y - 2].type = type;
|
|
Main.tile[x, y - 2].active(true);
|
|
Main.tile[x, y - 2].frameY = (short) num2;
|
|
Main.tile[x, y - 2].frameX = (short) (18 + num1);
|
|
Main.tile[x, y - 2].type = type;
|
|
Main.tile[x + 1, y - 2].active(true);
|
|
Main.tile[x + 1, y - 2].frameY = (short) num2;
|
|
Main.tile[x + 1, y - 2].frameX = (short) (36 + num1);
|
|
Main.tile[x + 1, y - 2].type = type;
|
|
Main.tile[x + 2, y - 2].active(true);
|
|
Main.tile[x + 2, y - 2].frameY = (short) num2;
|
|
Main.tile[x + 2, y - 2].frameX = (short) (54 + num1);
|
|
Main.tile[x + 2, y - 2].type = type;
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = (short) (num2 + 18);
|
|
Main.tile[x - 1, y - 1].frameX = (short) num1;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = (short) (num2 + 18);
|
|
Main.tile[x, y - 1].frameX = (short) (18 + num1);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = (short) (num2 + 18);
|
|
Main.tile[x + 1, y - 1].frameX = (short) (36 + num1);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x + 2, y - 1].active(true);
|
|
Main.tile[x + 2, y - 1].frameY = (short) (num2 + 18);
|
|
Main.tile[x + 2, y - 1].frameX = (short) (54 + num1);
|
|
Main.tile[x + 2, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) (num2 + 36);
|
|
Main.tile[x - 1, y].frameX = (short) num1;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) (num2 + 36);
|
|
Main.tile[x, y].frameX = (short) (18 + num1);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) (num2 + 36);
|
|
Main.tile[x + 1, y].frameX = (short) (36 + num1);
|
|
Main.tile[x + 1, y].type = type;
|
|
Main.tile[x + 2, y].active(true);
|
|
Main.tile[x + 2, y].frameY = (short) (num2 + 36);
|
|
Main.tile[x + 2, y].frameX = (short) (54 + num1);
|
|
Main.tile[x + 2, y].type = type;
|
|
}
|
|
|
|
public static void SwitchMB(int i, int j)
|
|
{
|
|
int num1 = (int) Main.tile[i, j].frameY / 18;
|
|
while (num1 >= 2)
|
|
num1 -= 2;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
if (num2 >= 2)
|
|
num2 -= 2;
|
|
int num3 = i - num2;
|
|
int num4 = j - num1;
|
|
for (int index1 = num3; index1 < num3 + 2; ++index1)
|
|
{
|
|
for (int index2 = num4; index2 < num4 + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active() && (Main.tile[index1, index2].type == (ushort) 139 || Main.tile[index1, index2].type == (ushort) 35))
|
|
{
|
|
if (Main.tile[index1, index2].frameX < (short) 36)
|
|
Main.tile[index1, index2].frameX += (short) 36;
|
|
else
|
|
Main.tile[index1, index2].frameX -= (short) 36;
|
|
}
|
|
}
|
|
}
|
|
if (Wiring.running)
|
|
{
|
|
Wiring.SkipWire(num3, num4);
|
|
Wiring.SkipWire(num3 + 1, num4);
|
|
Wiring.SkipWire(num3, num4 + 1);
|
|
Wiring.SkipWire(num3 + 1, num4 + 1);
|
|
}
|
|
NetMessage.SendTileSquare(-1, num3, num4, 3);
|
|
}
|
|
|
|
public static void SwitchMonolith(int i, int j)
|
|
{
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
while (num1 >= 2)
|
|
num1 -= 2;
|
|
int num2 = (int) Main.tile[i, j].frameY / 18;
|
|
if (num2 >= 3)
|
|
num2 -= 3;
|
|
int num3 = i - num1;
|
|
int y = j - num2;
|
|
for (int index1 = num3; index1 < num3 + 2; ++index1)
|
|
{
|
|
for (int index2 = y; index2 < y + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active())
|
|
{
|
|
if (Main.tile[index1, index2].type == (ushort) 410)
|
|
{
|
|
if (Main.tile[index1, index2].frameY < (short) 56)
|
|
Main.tile[index1, index2].frameY += (short) 56;
|
|
else
|
|
Main.tile[index1, index2].frameY -= (short) 56;
|
|
}
|
|
else if (Main.tile[index1, index2].type == (ushort) 480)
|
|
{
|
|
if (Main.tile[index1, index2].frameY < (short) 54)
|
|
Main.tile[index1, index2].frameY += (short) 54;
|
|
else
|
|
Main.tile[index1, index2].frameY -= (short) 54;
|
|
}
|
|
else if (Main.tile[index1, index2].type == (ushort) 509)
|
|
{
|
|
if (Main.tile[index1, index2].frameY < (short) 54)
|
|
Main.tile[index1, index2].frameY += (short) 54;
|
|
else
|
|
Main.tile[index1, index2].frameY -= (short) 54;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Wiring.running)
|
|
{
|
|
Wiring.SkipWire(num3, y);
|
|
Wiring.SkipWire(num3, y + 1);
|
|
Wiring.SkipWire(num3, y + 2);
|
|
Wiring.SkipWire(num3 + 1, y);
|
|
Wiring.SkipWire(num3 + 1, y + 1);
|
|
Wiring.SkipWire(num3 + 1, y + 2);
|
|
}
|
|
NetMessage.SendTileSquare(-1, num3, y + 1, 3);
|
|
}
|
|
|
|
public static void SwitchFountain(int i, int j)
|
|
{
|
|
int num1 = (int) Main.tile[i, j].frameX / 18;
|
|
while (num1 >= 2)
|
|
num1 -= 2;
|
|
int num2 = (int) Main.tile[i, j].frameY / 18;
|
|
if (num2 >= 4)
|
|
num2 -= 4;
|
|
int num3 = i - num1;
|
|
int y = j - num2;
|
|
for (int index1 = num3; index1 < num3 + 2; ++index1)
|
|
{
|
|
for (int index2 = y; index2 < y + 4; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 207)
|
|
{
|
|
if (Main.tile[index1, index2].frameY < (short) 72)
|
|
Main.tile[index1, index2].frameY += (short) 72;
|
|
else
|
|
Main.tile[index1, index2].frameY -= (short) 72;
|
|
}
|
|
}
|
|
}
|
|
if (Wiring.running)
|
|
{
|
|
Wiring.SkipWire(num3, y);
|
|
Wiring.SkipWire(num3, y + 1);
|
|
Wiring.SkipWire(num3, y + 2);
|
|
Wiring.SkipWire(num3, y + 3);
|
|
Wiring.SkipWire(num3 + 1, y);
|
|
Wiring.SkipWire(num3 + 1, y + 1);
|
|
Wiring.SkipWire(num3 + 1, y + 2);
|
|
Wiring.SkipWire(num3 + 1, y + 3);
|
|
}
|
|
NetMessage.SendTileSquare(-1, num3, y + 1, 4);
|
|
}
|
|
|
|
public static void CheckMB(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = 0;
|
|
int num2;
|
|
for (num2 = (int) Main.tile[i, j].frameY / 18; num2 >= 2; num2 -= 2)
|
|
++num1;
|
|
int num3 = (int) Main.tile[i, j].frameX / 18;
|
|
int num4 = 0;
|
|
if (num3 >= 2)
|
|
{
|
|
num3 -= 2;
|
|
++num4;
|
|
}
|
|
int num5 = i - num3;
|
|
int num6 = j - num2;
|
|
for (int index1 = num5; index1 < num5 + 2; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num6 + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num5) * 18 + num4 * 36 || (int) Main.tile[index1, index2].frameY != (index2 - num6) * 18 + num1 * 36)
|
|
flag = true;
|
|
}
|
|
if (!Main.tile[index1, num6 + 2].nactive())
|
|
flag = true;
|
|
else if (!Main.tileSolid[(int) Main.tile[index1, num6 + 2].type] && !Main.tileTable[(int) Main.tile[index1, num6 + 2].type])
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i1 = num5; i1 < num5 + 2; ++i1)
|
|
{
|
|
for (int j1 = num6; j1 < num6 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i1, j1].type == type && Main.tile[i1, j1].active())
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
if (type == 35)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1813);
|
|
else if (num1 == 28)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1963);
|
|
else if (num1 == 29)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1964);
|
|
else if (num1 == 30)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1965);
|
|
else if (num1 == 31)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2742);
|
|
else if (num1 == 32)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3044);
|
|
else if (num1 == 33)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3235);
|
|
else if (num1 == 34)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3236);
|
|
else if (num1 == 35)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3237);
|
|
else if (num1 == 36)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3370);
|
|
else if (num1 == 37)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3371);
|
|
else if (num1 == 38)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3796);
|
|
else if (num1 == 39)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3869);
|
|
else if (num1 == 43)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4077);
|
|
else if (num1 == 41)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4078);
|
|
else if (num1 == 42)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4079);
|
|
else if (num1 == 44)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4080);
|
|
else if (num1 == 45)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4081);
|
|
else if (num1 == 40)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4082);
|
|
else if (num1 == 46)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4237);
|
|
else if (num1 == 47)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4356);
|
|
else if (num1 == 48)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4357);
|
|
else if (num1 == 49)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4358);
|
|
else if (num1 == 50)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4421);
|
|
else if (num1 == 51)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4606);
|
|
else if (num1 == 52)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4979);
|
|
else if (num1 == 53)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4985);
|
|
else if (num1 == 54)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4990);
|
|
else if (num1 == 55)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4991);
|
|
else if (num1 == 56)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4992);
|
|
else if (num1 == 57)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5006);
|
|
else if (num1 == 58)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5014);
|
|
else if (num1 == 59)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5015);
|
|
else if (num1 == 60)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5016);
|
|
else if (num1 == 61)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5017);
|
|
else if (num1 == 62)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5018);
|
|
else if (num1 == 63)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5019);
|
|
else if (num1 == 64)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5020);
|
|
else if (num1 == 65)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5021);
|
|
else if (num1 == 66)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5022);
|
|
else if (num1 == 67)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5023);
|
|
else if (num1 == 68)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5024);
|
|
else if (num1 == 69)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5025);
|
|
else if (num1 == 70)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5026);
|
|
else if (num1 == 71)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5027);
|
|
else if (num1 == 72)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5028);
|
|
else if (num1 == 73)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5029);
|
|
else if (num1 == 74)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5030);
|
|
else if (num1 == 75)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5031);
|
|
else if (num1 == 76)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5032);
|
|
else if (num1 == 77)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5033);
|
|
else if (num1 == 78)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5034);
|
|
else if (num1 == 79)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5035);
|
|
else if (num1 == 80)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5036);
|
|
else if (num1 == 81)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5037);
|
|
else if (num1 == 82)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5038);
|
|
else if (num1 == 83)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5039);
|
|
else if (num1 == 84)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5040);
|
|
else if (num1 == 85)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 5044);
|
|
else if (num1 >= 13)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1596 + num1 - 13);
|
|
else
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 562 + num1);
|
|
for (int i2 = num5 - 1; i2 < num5 + 3; ++i2)
|
|
{
|
|
for (int j2 = num6 - 1; j2 < num6 + 3; ++j2)
|
|
WorldGen.TileFrame(i2, j2);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void PlaceMB(int X, int y, ushort type, int style)
|
|
{
|
|
int index1 = X + 1;
|
|
if (index1 < 5 || index1 > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int index2 = index1 - 1; index2 < index1 + 1; ++index2)
|
|
{
|
|
for (int index3 = y - 1; index3 < y + 1; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3] == null)
|
|
Main.tile[index2, index3] = new Tile();
|
|
if (Main.tile[index2, index3].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[index2, y + 1] == null)
|
|
Main.tile[index2, y + 1] = new Tile();
|
|
if (!Main.tile[index2, y + 1].active() || Main.tile[index2, y + 1].halfBrick() || !Main.tileSolid[(int) Main.tile[index2, y + 1].type] && !Main.tileTable[(int) Main.tile[index2, y + 1].type])
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
Main.tile[index1 - 1, y - 1].active(true);
|
|
Main.tile[index1 - 1, y - 1].frameY = (short) (style * 36);
|
|
Main.tile[index1 - 1, y - 1].frameX = (short) 0;
|
|
Main.tile[index1 - 1, y - 1].type = type;
|
|
Main.tile[index1, y - 1].active(true);
|
|
Main.tile[index1, y - 1].frameY = (short) (style * 36);
|
|
Main.tile[index1, y - 1].frameX = (short) 18;
|
|
Main.tile[index1, y - 1].type = type;
|
|
Main.tile[index1 - 1, y].active(true);
|
|
Main.tile[index1 - 1, y].frameY = (short) (style * 36 + 18);
|
|
Main.tile[index1 - 1, y].frameX = (short) 0;
|
|
Main.tile[index1 - 1, y].type = type;
|
|
Main.tile[index1, y].active(true);
|
|
Main.tile[index1, y].frameY = (short) (style * 36 + 18);
|
|
Main.tile[index1, y].frameX = (short) 18;
|
|
Main.tile[index1, y].type = type;
|
|
}
|
|
|
|
public static void Place2x2(int x, int y, ushort type, int style)
|
|
{
|
|
if (type == (ushort) 95 || type == (ushort) 126)
|
|
++y;
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
if (type == (ushort) 172)
|
|
{
|
|
if (!WorldGen.CanPlaceSink(x, y, type, style))
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
for (int i = x - 1; i < x + 1; ++i)
|
|
{
|
|
for (int j = y - 1; j < y + 1; ++j)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(i, j);
|
|
if (tileSafely.active() || type == (ushort) 98 && tileSafely.liquid > (byte) 0)
|
|
return;
|
|
}
|
|
switch (type)
|
|
{
|
|
case 95:
|
|
case 126:
|
|
Tile tileSafely1 = Framing.GetTileSafely(i, y - 2);
|
|
if (!tileSafely1.nactive() || !Main.tileSolid[(int) tileSafely1.type] || Main.tileSolidTop[(int) tileSafely1.type])
|
|
return;
|
|
continue;
|
|
case 132:
|
|
continue;
|
|
default:
|
|
Tile tileSafely2 = Framing.GetTileSafely(i, y + 1);
|
|
if (!tileSafely2.nactive() || !WorldGen.SolidTile2(tileSafely2) && !Main.tileTable[(int) tileSafely2.type])
|
|
return;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if (type == (ushort) 132)
|
|
{
|
|
bool flag = true;
|
|
if (Main.tile[x - 1, y + 1] == null)
|
|
Main.tile[x - 1, y + 1] = new Tile();
|
|
if (Main.tile[x, y + 1] == null)
|
|
Main.tile[x, y + 1] = new Tile();
|
|
if (!Main.tile[x - 1, y + 1].nactive() || !WorldGen.SolidTile2(x - 1, y + 1) && !Main.tileTable[(int) Main.tile[x - 1, y + 1].type])
|
|
flag = false;
|
|
if (!Main.tile[x, y + 1].nactive() || !WorldGen.SolidTile2(x, y + 1) && !Main.tileTable[(int) Main.tile[x, y + 1].type])
|
|
flag = false;
|
|
if (!flag && (Main.tile[x - 1, y - 1].wall < (ushort) 1 || Main.tile[x, y - 1].wall < (ushort) 1 || Main.tile[x - 1, y].wall < (ushort) 1 || Main.tile[x - 1, y].wall < (ushort) 1))
|
|
return;
|
|
}
|
|
--x;
|
|
--y;
|
|
int num = type == (ushort) 172 ? 38 : 36;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 2; ++index2)
|
|
{
|
|
Tile tile = Main.tile[x + index1, y + index2];
|
|
tile.active(true);
|
|
tile.frameX = (short) (index1 * 18);
|
|
tile.frameY = (short) (style * num + index2 * 18);
|
|
tile.type = type;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool PlaceObject(
|
|
int x,
|
|
int y,
|
|
int type,
|
|
bool mute = false,
|
|
int style = 0,
|
|
int alternate = 0,
|
|
int random = -1,
|
|
int direction = -1)
|
|
{
|
|
TileObject objectData;
|
|
if (type >= 623 || !TileObject.CanPlace(x, y, type, style, direction, out objectData))
|
|
return false;
|
|
objectData.random = random;
|
|
if (TileObject.Place(objectData) && !mute)
|
|
{
|
|
WorldGen.SquareTileFrame(x, y);
|
|
SoundEngine.PlaySound(0, x * 16, y * 16);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool ShiftTrapdoor(int x, int y, bool playerAbove, int onlyCloseOrOpen = -1)
|
|
{
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y);
|
|
if (tileSafely1.type == (ushort) 386 && onlyCloseOrOpen != 1)
|
|
{
|
|
Point topLeftAndStyles = WorldGen.GetTopLeftAndStyles(ref x, ref y, 2, 2, 18, 18);
|
|
if (topLeftAndStyles.X == 0)
|
|
{
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
Wiring.SkipWire(x, y);
|
|
Wiring.SkipWire(x, y + 1);
|
|
Wiring.SkipWire(x + 1, y);
|
|
Wiring.SkipWire(x + 1, y + 1);
|
|
}
|
|
if (!Collision.EmptyTile(x, y + 1, true) || !Collision.EmptyTile(x + 1, y + 1, true))
|
|
return false;
|
|
SoundEngine.PlaySound(8, x * 16 + 16, y * 16 + 16);
|
|
for (int index = 0; index < 2; ++index)
|
|
Framing.GetTileSafely(x + index, y).ClearTile();
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
Tile tileSafely2 = Framing.GetTileSafely(x + index, y + 1);
|
|
tileSafely2.type = (ushort) 387;
|
|
tileSafely2.frameX = (short) (index * 18);
|
|
tileSafely2.frameY = (short) (topLeftAndStyles.Y * 18);
|
|
}
|
|
for (int index1 = -1; index1 < 3; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 3; ++index2)
|
|
WorldGen.TileFrame(x + index1, y + index2);
|
|
}
|
|
return true;
|
|
}
|
|
if (topLeftAndStyles.X == 1)
|
|
{
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
Wiring.SkipWire(x, y - 1);
|
|
Wiring.SkipWire(x, y);
|
|
Wiring.SkipWire(x + 1, y - 1);
|
|
Wiring.SkipWire(x + 1, y);
|
|
}
|
|
if (!Collision.EmptyTile(x, y, true) || !Collision.EmptyTile(x + 1, y, true))
|
|
return false;
|
|
SoundEngine.PlaySound(8, x * 16 + 16, y * 16);
|
|
for (int index = 0; index < 2; ++index)
|
|
Framing.GetTileSafely(x + index, y + 1).ClearTile();
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
Tile tileSafely3 = Framing.GetTileSafely(x + index, y);
|
|
tileSafely3.type = (ushort) 387;
|
|
tileSafely3.frameX = (short) (index * 18);
|
|
tileSafely3.frameY = (short) (topLeftAndStyles.Y * 18);
|
|
}
|
|
for (int index3 = -1; index3 < 3; ++index3)
|
|
{
|
|
for (int index4 = -1; index4 < 2; ++index4)
|
|
WorldGen.TileFrame(x + index3, y + index4);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
if (tileSafely1.type == (ushort) 387 && onlyCloseOrOpen != 0)
|
|
{
|
|
WorldGen.GetTopLeftAndStyles(ref x, ref y, 2, 1, 18, 18);
|
|
int directionInt = playerAbove.ToDirectionInt();
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
Tile tileSafely4 = Framing.GetTileSafely(x + index, y + directionInt);
|
|
if (tileSafely4.active() && !Main.tileCut[(int) tileSafely4.type])
|
|
return false;
|
|
}
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
Wiring.SkipWire(x, y);
|
|
Wiring.SkipWire(x, y + directionInt);
|
|
Wiring.SkipWire(x + 1, y);
|
|
Wiring.SkipWire(x + 1, y + directionInt);
|
|
}
|
|
SoundEngine.PlaySound(8, x * 16 + 16, y * 16);
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
Tile tileSafely5 = Framing.GetTileSafely(x + index, y + directionInt);
|
|
if (tileSafely5.active() && Main.tileCut[(int) tileSafely5.type])
|
|
WorldGen.KillTile(x + index, y + directionInt);
|
|
}
|
|
for (int index5 = 0; index5 < 2; ++index5)
|
|
{
|
|
byte color = Framing.GetTileSafely(x + index5, y).color();
|
|
for (int index6 = 0; index6 < 2; ++index6)
|
|
{
|
|
Tile tileSafely6 = Framing.GetTileSafely(x + index5, y + index6 - (!playerAbove).ToInt());
|
|
tileSafely6.type = (ushort) 386;
|
|
tileSafely6.frameX = (short) (index5 * 18 + playerAbove.ToInt() * 36);
|
|
tileSafely6.frameY = (short) (index6 * 18);
|
|
tileSafely6.color(color);
|
|
tileSafely6.active(true);
|
|
}
|
|
}
|
|
for (int index7 = -1; index7 < 3; ++index7)
|
|
{
|
|
for (int index8 = -1; index8 < 3; ++index8)
|
|
WorldGen.TileFrame(x + index7, y + index8 - (!playerAbove).ToInt() * 2);
|
|
}
|
|
return true;
|
|
}
|
|
SoundEngine.PlaySound(9, x * 16, y * 16);
|
|
return false;
|
|
}
|
|
|
|
public static void CheckTrapDoor(int x, int y, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int w = 0;
|
|
int h = 0;
|
|
Point point = new Point();
|
|
if (type == 387)
|
|
{
|
|
w = 2;
|
|
h = 1;
|
|
point = WorldGen.GetTopLeftAndStyles(ref x, ref y, w, h, 18, 18);
|
|
flag = flag || !WorldGen.CheckTileFrames(type, x, y, w, h, point.X, 18, point.Y, 18) || !WorldGen.CheckTileAnchors(x, y, w, h, 1, AnchorType.SolidTile);
|
|
}
|
|
if (type == 386)
|
|
{
|
|
w = 2;
|
|
h = 2;
|
|
point = WorldGen.GetTopLeftAndStyles(ref x, ref y, w, h, 18, 18);
|
|
flag = flag || !WorldGen.CheckTileFrames(type, x, y, w, h, point.X, 18, point.Y, 18);
|
|
if (point.X == 0)
|
|
flag = flag || !WorldGen.CheckTileAnchors(x, y + 1, w, 1, 1, AnchorType.SolidTile);
|
|
else if (point.X == 1)
|
|
flag = flag || !WorldGen.CheckTileAnchors(x, y, w, 1, 1, AnchorType.SolidTile);
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = x; i < x + w; ++i)
|
|
{
|
|
for (int j = y; j < y + h; ++j)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
int Type = 3239;
|
|
if (point.Y == 0)
|
|
Type = 3239;
|
|
Item.NewItem(x * 16, y * 16, w * 16, h * 16, Type);
|
|
for (int i = x - 1; i < x + w + 1; ++i)
|
|
{
|
|
for (int j = y - 1; j < y + h + 1; ++j)
|
|
WorldGen.TileFrame(i, j);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void CheckTallGate(int x, int y, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y);
|
|
Point point = new Point((int) tileSafely1.frameX / 18, 0);
|
|
TileObjectData tileData = TileObjectData.GetTileData(type, point.X);
|
|
point.Y = (int) tileSafely1.frameY / tileData.CoordinateFullHeight;
|
|
int width = tileData.Width;
|
|
int height = tileData.Height;
|
|
int index1 = 0;
|
|
for (int index2 = (int) tileSafely1.frameY % tileData.CoordinateFullHeight; index1 < height && index2 - tileData.CoordinateHeights[index1] >= 0; ++index1)
|
|
index2 -= tileData.CoordinateHeights[index1];
|
|
int coordinateFullHeight = tileData.CoordinateFullHeight;
|
|
y -= index1;
|
|
int num = point.Y * tileData.CoordinateFullHeight;
|
|
for (int index3 = 0; index3 < height; ++index3)
|
|
{
|
|
Tile tileSafely2 = Framing.GetTileSafely(x, y + index3);
|
|
if ((int) tileSafely2.frameX != point.X * tileData.CoordinateFullWidth || (int) tileSafely2.frameY != num)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
num += tileData.CoordinateHeights[index3] + tileData.CoordinatePadding;
|
|
}
|
|
if (!flag && WorldGen.CheckTileAnchors(x, y, width, height, 2, AnchorType.SolidTile))
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i = x; i < x + width; ++i)
|
|
{
|
|
for (int j = y; j < y + height; ++j)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
int Type = 3240;
|
|
if (point.Y == 0)
|
|
Type = 3240;
|
|
Item.NewItem(x * 16, y * 16, width * 16, height * 16, Type);
|
|
for (int i = x - 1; i < x + width + 1; ++i)
|
|
{
|
|
for (int j = y - 1; j < y + height + 1; ++j)
|
|
WorldGen.TileFrame(i, j);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static bool ShiftTallGate(int x, int y, bool closing, bool forced = false)
|
|
{
|
|
ushort num1 = closing ? (ushort) 388 : (ushort) 389;
|
|
ushort num2 = closing ? (ushort) 389 : (ushort) 388;
|
|
Tile tileSafely = Framing.GetTileSafely(x, y);
|
|
if ((int) tileSafely.type != (int) num2)
|
|
return false;
|
|
Point point = new Point((int) tileSafely.frameX / 18, 0);
|
|
TileObjectData tileData = TileObjectData.GetTileData(388, point.X);
|
|
point.Y = (int) tileSafely.frameY / tileData.CoordinateFullHeight;
|
|
int width = tileData.Width;
|
|
int height = tileData.Height;
|
|
int index1 = 0;
|
|
for (int index2 = (int) tileSafely.frameY % tileData.CoordinateFullHeight; index1 < height && index2 - tileData.CoordinateHeights[index1] >= 0; ++index1)
|
|
index2 -= tileData.CoordinateHeights[index1];
|
|
int coordinateFullHeight = tileData.CoordinateFullHeight;
|
|
y -= index1;
|
|
if (Main.netMode != 1 && Wiring.running)
|
|
{
|
|
for (int index3 = 0; index3 < height; ++index3)
|
|
Wiring.SkipWire(x, y + index3);
|
|
}
|
|
for (int index4 = 0; index4 < height; ++index4)
|
|
{
|
|
if (!forced && !Collision.EmptyTile(x, y + index4, true))
|
|
return false;
|
|
}
|
|
SoundEngine.PlaySound(8, x * 16 + 16, y * 16 + 16);
|
|
for (int index5 = 0; index5 < height; ++index5)
|
|
Framing.GetTileSafely(x, y + index5).type = num1;
|
|
for (int index6 = -1; index6 < 2; ++index6)
|
|
{
|
|
for (int index7 = -1; index7 < height + 1; ++index7)
|
|
WorldGen.TileFrame(x + index6, y + index7);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static Point GetTopLeftAndStyles(
|
|
ref int x,
|
|
ref int y,
|
|
int w,
|
|
int h,
|
|
int frameXinc,
|
|
int frameYinc)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(x, y);
|
|
Point point = new Point((int) tileSafely.frameX / (w * frameXinc), (int) tileSafely.frameY / (h * frameYinc));
|
|
if (frameXinc != 0)
|
|
x -= (int) tileSafely.frameX / frameXinc % w;
|
|
if (frameYinc == 0)
|
|
return point;
|
|
y -= (int) tileSafely.frameY / frameYinc % h;
|
|
return point;
|
|
}
|
|
|
|
public static bool CheckTileFrames(
|
|
int type,
|
|
int sx,
|
|
int sy,
|
|
int w,
|
|
int h,
|
|
int styleX,
|
|
int frameXinc,
|
|
int styleY,
|
|
int frameYinc)
|
|
{
|
|
for (int index1 = 0; index1 < w; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < h; ++index2)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(sx + index1, sy + index2);
|
|
if (!tileSafely.active() || (int) tileSafely.type != type || (int) tileSafely.frameX != styleX * w * frameXinc + index1 * frameXinc || (int) tileSafely.frameY != styleY * h * frameYinc + index2 * frameYinc)
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool CheckTileAnchors(
|
|
int sx,
|
|
int sy,
|
|
int w,
|
|
int h,
|
|
int mode,
|
|
AnchorType anchor)
|
|
{
|
|
if ((mode & 1) == 1)
|
|
{
|
|
for (int j = sy; j < sy + h; ++j)
|
|
{
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(sx - 1, j), anchor) || !WorldGen.AnchorValid(Framing.GetTileSafely(sx + w, j), anchor))
|
|
return false;
|
|
}
|
|
}
|
|
if ((mode & 2) == 2)
|
|
{
|
|
for (int i = sx; i < sx + w; ++i)
|
|
{
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(i, sy - 1), anchor) || !WorldGen.AnchorValid(Framing.GetTileSafely(i, sy + h), anchor))
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool AnchorValid(Tile tileCache, AnchorType anchor)
|
|
{
|
|
bool flag = false;
|
|
if (tileCache.nactive())
|
|
{
|
|
if ((anchor & AnchorType.SolidTile) == AnchorType.SolidTile && Main.tileSolid[(int) tileCache.type] && !Main.tileSolidTop[(int) tileCache.type] && !Main.tileNoAttach[(int) tileCache.type] && tileCache.blockType() == 0)
|
|
flag = true;
|
|
if ((anchor & AnchorType.SolidBottom) == AnchorType.SolidBottom && (Main.tileSolid[(int) tileCache.type] && (!Main.tileSolidTop[(int) tileCache.type] || TileID.Sets.Platforms[(int) tileCache.type] && (tileCache.halfBrick() || tileCache.topSlope())) || tileCache.topSlope() || tileCache.halfBrick()) && !TileID.Sets.NotReallySolid[(int) tileCache.type] && !tileCache.bottomSlope())
|
|
flag = true;
|
|
if (!flag && ((anchor & AnchorType.SolidWithTop) == AnchorType.SolidWithTop || (anchor & AnchorType.Table) == AnchorType.Table))
|
|
{
|
|
if (TileID.Sets.Platforms[(int) tileCache.type])
|
|
{
|
|
int num = (int) tileCache.frameX / TileObjectData.PlatformFrameWidth();
|
|
if (!tileCache.halfBrick() && num >= 0 && num <= 7 || num >= 12 && num <= 16 || num >= 25 && num <= 26)
|
|
flag = true;
|
|
}
|
|
else if (Main.tileSolid[(int) tileCache.type] && Main.tileSolidTop[(int) tileCache.type])
|
|
flag = true;
|
|
}
|
|
if (!flag && (anchor & AnchorType.Table) == AnchorType.Table && !TileID.Sets.Platforms[(int) tileCache.type] && Main.tileTable[(int) tileCache.type] && tileCache.blockType() == 0)
|
|
flag = true;
|
|
if (!flag && (anchor & AnchorType.SolidSide) == AnchorType.SolidSide && Main.tileSolid[(int) tileCache.type] && !Main.tileSolidTop[(int) tileCache.type])
|
|
{
|
|
switch (tileCache.blockType())
|
|
{
|
|
case 4:
|
|
case 5:
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (!flag && (anchor & AnchorType.EmptyTile) == AnchorType.EmptyTile)
|
|
flag = true;
|
|
return flag;
|
|
}
|
|
|
|
public static bool CanPlaceSink(int x, int y, ushort type, int style)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return false;
|
|
bool flag = true;
|
|
--x;
|
|
--y;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 2; ++index2)
|
|
{
|
|
if (Framing.GetTileSafely(x + index1, y + index2).active())
|
|
flag = false;
|
|
}
|
|
Tile tileSafely = Framing.GetTileSafely(x + index1, y + 2);
|
|
if (!tileSafely.nactive() || !WorldGen.SolidTile(tileSafely))
|
|
flag = false;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static void Place3x4(int x, int y, ushort type, int style)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 2; ++i)
|
|
{
|
|
for (int index = y - 3; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num1 = style * 54;
|
|
for (int index = -3; index <= 0; ++index)
|
|
{
|
|
short num2 = (short) ((3 + index) * 18);
|
|
Main.tile[x - 1, y + index].active(true);
|
|
Main.tile[x - 1, y + index].frameY = num2;
|
|
Main.tile[x - 1, y + index].frameX = (short) num1;
|
|
Main.tile[x - 1, y + index].type = type;
|
|
Main.tile[x, y + index].active(true);
|
|
Main.tile[x, y + index].frameY = num2;
|
|
Main.tile[x, y + index].frameX = (short) (num1 + 18);
|
|
Main.tile[x, y + index].type = type;
|
|
Main.tile[x + 1, y + index].active(true);
|
|
Main.tile[x + 1, y + index].frameY = num2;
|
|
Main.tile[x + 1, y + index].frameX = (short) (num1 + 36);
|
|
Main.tile[x + 1, y + index].type = type;
|
|
}
|
|
}
|
|
|
|
public static void Place5x4(int x, int y, ushort type, int style)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 2; i < x + 3; ++i)
|
|
{
|
|
for (int index = y - 3; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num1 = style * 54;
|
|
for (int index = -3; index <= 0; ++index)
|
|
{
|
|
short num2 = (short) ((3 + index) * 18);
|
|
Main.tile[x - 2, y + index].active(true);
|
|
Main.tile[x - 2, y + index].frameY = num2;
|
|
Main.tile[x - 2, y + index].frameX = (short) (num1 - 36);
|
|
Main.tile[x - 2, y + index].type = type;
|
|
Main.tile[x - 1, y + index].active(true);
|
|
Main.tile[x - 1, y + index].frameY = num2;
|
|
Main.tile[x - 1, y + index].frameX = (short) (num1 - 18);
|
|
Main.tile[x - 1, y + index].type = type;
|
|
Main.tile[x, y + index].active(true);
|
|
Main.tile[x, y + index].frameY = num2;
|
|
Main.tile[x, y + index].frameX = (short) num1;
|
|
Main.tile[x, y + index].type = type;
|
|
Main.tile[x + 1, y + index].active(true);
|
|
Main.tile[x + 1, y + index].frameY = num2;
|
|
Main.tile[x + 1, y + index].frameX = (short) (num1 + 18);
|
|
Main.tile[x + 1, y + index].type = type;
|
|
Main.tile[x + 1, y + index].active(true);
|
|
Main.tile[x + 1, y + index].frameY = num2;
|
|
Main.tile[x + 1, y + index].frameX = (short) (num1 + 36);
|
|
Main.tile[x + 1, y + index].type = type;
|
|
}
|
|
}
|
|
|
|
public static void Place3x1(int x, int y, ushort type, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 2; ++i)
|
|
{
|
|
int index = y;
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
short num = (short) (54 * style);
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) 0;
|
|
Main.tile[x - 1, y].frameX = num;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y].frameX = (short) ((int) num + 18);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 0;
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num + 36);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
|
|
public static void Place3x2(int x, int y, ushort type, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag1 = false;
|
|
bool flag2 = true;
|
|
if (type == (ushort) 14 && style == 25)
|
|
flag1 = true;
|
|
int num1 = y - 1;
|
|
if (flag1)
|
|
num1 = y;
|
|
for (int i = x - 1; i < x + 2; ++i)
|
|
{
|
|
for (int index = num1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag2 = false;
|
|
if (type == (ushort) 215 && Main.tile[i, index].liquid > (byte) 0)
|
|
flag2 = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (type == (ushort) 285 || type == (ushort) 286 || type == (ushort) 298 || type == (ushort) 299 || type == (ushort) 310 || type >= (ushort) 361 && type <= (ushort) 364 || type == (ushort) 582 || type == (ushort) 619)
|
|
{
|
|
if (!WorldGen.SolidTile2(i, y + 1) && (!Main.tile[i, y + 1].nactive() || !Main.tileSolidTop[(int) Main.tile[i, y + 1].type] || Main.tile[i, y + 1].frameY != (short) 0))
|
|
flag2 = false;
|
|
}
|
|
else
|
|
{
|
|
if (type == (ushort) 26 && Main.tile[i, y + 1].type == (ushort) 484)
|
|
flag2 = false;
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
flag2 = false;
|
|
}
|
|
}
|
|
if (type == (ushort) 88)
|
|
{
|
|
if (Chest.CreateChest(x - 1, y - 1) == -1)
|
|
flag2 = false;
|
|
else if (Main.netMode == 1)
|
|
NetMessage.SendData(34, number: 2, number2: ((float) x), number3: ((float) y), number4: ((float) style));
|
|
}
|
|
if (!flag2)
|
|
return;
|
|
short num2 = (short) (54 * style);
|
|
if (flag1)
|
|
{
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) 0;
|
|
Main.tile[x - 1, y].frameX = num2;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y].frameX = (short) ((int) num2 + 18);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 0;
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num2 + 36);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
else
|
|
{
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x - 1, y - 1].frameX = num2;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = (short) 0;
|
|
Main.tile[x, y - 1].frameX = (short) ((int) num2 + 18);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x + 1, y - 1].frameX = (short) ((int) num2 + 36);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) 18;
|
|
Main.tile[x - 1, y].frameX = num2;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 18;
|
|
Main.tile[x, y].frameX = (short) ((int) num2 + 18);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 18;
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num2 + 36);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
}
|
|
|
|
public static void Place2x2Style(int x, int y, ushort type, int style = 0)
|
|
{
|
|
if (x < 5 || x > Main.maxTilesX - 5 || y < 5 || y > Main.maxTilesY - 5)
|
|
return;
|
|
short num1 = 0;
|
|
if (type == (ushort) 254)
|
|
num1 = (short) ((int) (short) (x % 12 / 2) * 36);
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 1; ++i)
|
|
{
|
|
for (int index = y - 1; index < y + 1; ++index)
|
|
{
|
|
if (Main.tile[i, index] == null)
|
|
Main.tile[i, index] = new Tile();
|
|
if (Main.tile[i, index].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile(i, y + 1))
|
|
flag = false;
|
|
if (type == (ushort) 254 && Main.tile[i, y + 1].type != (ushort) 2 && Main.tile[i, y + 1].type != (ushort) 477 && Main.tile[i, y + 1].type != (ushort) 492 && Main.tile[i, y + 1].type != (ushort) 109)
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
short num2 = (short) (36 * style);
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = num1;
|
|
Main.tile[x - 1, y - 1].frameX = num2;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = num1;
|
|
Main.tile[x, y - 1].frameX = (short) ((int) num2 + 18);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) ((int) num1 + 18);
|
|
Main.tile[x - 1, y].frameX = num2;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) ((int) num1 + 18);
|
|
Main.tile[x, y].frameX = (short) ((int) num2 + 18);
|
|
Main.tile[x, y].type = type;
|
|
}
|
|
|
|
public static bool NearFriendlyWall(int x, int y)
|
|
{
|
|
try
|
|
{
|
|
if (x < 2 || x >= Main.maxTilesX - 2 || y < 2 || y >= Main.maxTilesY - 2 || Main.tile[x, y].wall == (ushort) 0 || Main.wallHouse[(int) Main.tile[x, y].wall] || Main.tile[x - 1, y].wall == (ushort) 0 || Main.wallHouse[(int) Main.tile[x - 1, y].wall] || Main.tile[x + 1, y].wall == (ushort) 0 || Main.wallHouse[(int) Main.tile[x + 1, y].wall] || Main.tile[x, y - 1].wall == (ushort) 0 || Main.wallHouse[(int) Main.tile[x, y - 1].wall] || Main.tile[x, y + 1].wall == (ushort) 0)
|
|
return true;
|
|
if (Main.wallHouse[(int) Main.tile[x, y + 1].wall])
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void Check2x2Style(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameY / 18;
|
|
while (num2 > 1)
|
|
num2 -= 2;
|
|
int num3 = num1 - num2;
|
|
int num4 = (int) Main.tile[i, j].frameX / 18;
|
|
int num5 = 0;
|
|
while (num4 > 1)
|
|
{
|
|
num4 -= 2;
|
|
++num5;
|
|
}
|
|
int num6 = i - num4;
|
|
int num7 = num5 * 36;
|
|
for (int i1 = num6; i1 < num6 + 2; ++i1)
|
|
{
|
|
for (int index = num3; index < num3 + 2; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != (i1 - num6) * 18 + num7)
|
|
flag = true;
|
|
}
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num3 + 2))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num6; i2 < num6 + 2; ++i2)
|
|
{
|
|
for (int j1 = num3; j1 < num3 + 2; ++j1)
|
|
{
|
|
if (Main.tile[i2, j1] == null)
|
|
Main.tile[i2, j1] = new Tile();
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
case 96:
|
|
if (num5 == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 345);
|
|
if (num5 == 1)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1791);
|
|
break;
|
|
}
|
|
break;
|
|
case 254:
|
|
if (frameX >= 72)
|
|
{
|
|
if (frameX < 108)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1725, WorldGen.genRand.Next(1, 3));
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (frameX < 144)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1725, WorldGen.genRand.Next(2, 6));
|
|
break;
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1725, WorldGen.genRand.Next(5, 11));
|
|
if (Main.halloween && WorldGen.genRand.Next(200) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1799);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 441:
|
|
int Type1 = -1;
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Type1 = 3665;
|
|
break;
|
|
case 1:
|
|
Type1 = 3666;
|
|
break;
|
|
case 3:
|
|
Type1 = 3667;
|
|
break;
|
|
case 7:
|
|
Type1 = 3668;
|
|
break;
|
|
case 8:
|
|
Type1 = 3669;
|
|
break;
|
|
case 9:
|
|
Type1 = 3670;
|
|
break;
|
|
case 10:
|
|
Type1 = 3671;
|
|
break;
|
|
case 11:
|
|
Type1 = 3672;
|
|
break;
|
|
case 12:
|
|
Type1 = 3673;
|
|
break;
|
|
case 13:
|
|
Type1 = 3674;
|
|
break;
|
|
case 14:
|
|
Type1 = 3675;
|
|
break;
|
|
case 15:
|
|
Type1 = 3676;
|
|
break;
|
|
case 16:
|
|
Type1 = 3677;
|
|
break;
|
|
case 17:
|
|
Type1 = 3678;
|
|
break;
|
|
case 18:
|
|
Type1 = 3679;
|
|
break;
|
|
case 19:
|
|
Type1 = 3680;
|
|
break;
|
|
case 20:
|
|
Type1 = 3681;
|
|
break;
|
|
case 21:
|
|
Type1 = 3682;
|
|
break;
|
|
case 22:
|
|
Type1 = 3683;
|
|
break;
|
|
case 28:
|
|
Type1 = 3684;
|
|
break;
|
|
case 29:
|
|
Type1 = 3685;
|
|
break;
|
|
case 30:
|
|
Type1 = 3686;
|
|
break;
|
|
case 31:
|
|
Type1 = 3687;
|
|
break;
|
|
case 32:
|
|
Type1 = 3688;
|
|
break;
|
|
case 33:
|
|
Type1 = 3689;
|
|
break;
|
|
case 34:
|
|
Type1 = 3690;
|
|
break;
|
|
case 35:
|
|
Type1 = 3691;
|
|
break;
|
|
case 37:
|
|
Type1 = 3692;
|
|
break;
|
|
case 39:
|
|
Type1 = 3693;
|
|
break;
|
|
case 41:
|
|
Type1 = 3694;
|
|
break;
|
|
case 42:
|
|
Type1 = 3695;
|
|
break;
|
|
case 43:
|
|
Type1 = 3696;
|
|
break;
|
|
case 44:
|
|
Type1 = 3697;
|
|
break;
|
|
case 45:
|
|
Type1 = 3698;
|
|
break;
|
|
case 46:
|
|
Type1 = 3699;
|
|
break;
|
|
case 47:
|
|
Type1 = 3700;
|
|
break;
|
|
case 48:
|
|
Type1 = 3701;
|
|
break;
|
|
case 49:
|
|
Type1 = 3702;
|
|
break;
|
|
case 50:
|
|
Type1 = 3703;
|
|
break;
|
|
case 51:
|
|
Type1 = 3704;
|
|
break;
|
|
}
|
|
if (Type1 != -1)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type1);
|
|
break;
|
|
}
|
|
break;
|
|
case 457:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3749);
|
|
break;
|
|
case 468:
|
|
int Type2 = -1;
|
|
switch (num5)
|
|
{
|
|
case 0:
|
|
Type2 = 3886;
|
|
break;
|
|
case 1:
|
|
Type2 = 3887;
|
|
break;
|
|
case 2:
|
|
Type2 = 3950;
|
|
break;
|
|
case 3:
|
|
Type2 = 3976;
|
|
break;
|
|
case 4:
|
|
Type2 = -1;
|
|
break;
|
|
case 5:
|
|
Type2 = 4164;
|
|
break;
|
|
case 6:
|
|
Type2 = 4185;
|
|
break;
|
|
case 7:
|
|
Type2 = 4206;
|
|
break;
|
|
case 8:
|
|
Type2 = 4227;
|
|
break;
|
|
case 9:
|
|
Type2 = 4266;
|
|
break;
|
|
case 10:
|
|
Type2 = 4268;
|
|
break;
|
|
case 11:
|
|
Type2 = 4585;
|
|
break;
|
|
case 12:
|
|
Type2 = 4713;
|
|
break;
|
|
}
|
|
if (Type2 != -1)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type2);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num6 - 1; i3 < num6 + 3; ++i3)
|
|
{
|
|
for (int j2 = num3 - 1; j2 < num3 + 3; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void PlacePumpkin(int x, int superY)
|
|
{
|
|
ushort num1 = 254;
|
|
int index1 = superY;
|
|
int num2 = WorldGen.genRand.Next(6) * 36;
|
|
if (x < 5 || x > Main.maxTilesX - 5 || index1 < 5 || index1 > Main.maxTilesY - 5)
|
|
return;
|
|
bool flag = true;
|
|
for (int i = x - 1; i < x + 1; ++i)
|
|
{
|
|
for (int index2 = index1 - 1; index2 < index1 + 1; ++index2)
|
|
{
|
|
if (Main.tile[i, index2] == null)
|
|
Main.tile[i, index2] = new Tile();
|
|
if (Main.tile[i, index2].active() && Main.tile[i, index2].type != (ushort) 3 && Main.tile[i, index2].type != (ushort) 73 && Main.tile[i, index2].type != (ushort) 113 && Main.tile[i, index2].type != (ushort) 110 && (Main.tile[i, index2].type != (ushort) 185 || Main.tile[i, index2].frameY != (short) 0))
|
|
flag = false;
|
|
if (Main.tile[i, index2].liquid > (byte) 0)
|
|
flag = false;
|
|
}
|
|
if (!WorldGen.SolidTile(i, index1 + 1) || Main.tile[i, index1 + 1].type != (ushort) 2 && Main.tile[i, index1 + 1].type != (ushort) 109)
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x - 1, index1 - 1].active(true);
|
|
Main.tile[x - 1, index1 - 1].frameY = (short) num2;
|
|
Main.tile[x - 1, index1 - 1].frameX = (short) 0;
|
|
Main.tile[x - 1, index1 - 1].type = num1;
|
|
Main.tile[x, index1 - 1].active(true);
|
|
Main.tile[x, index1 - 1].frameY = (short) num2;
|
|
Main.tile[x, index1 - 1].frameX = (short) 18;
|
|
Main.tile[x, index1 - 1].type = num1;
|
|
Main.tile[x - 1, index1].active(true);
|
|
Main.tile[x - 1, index1].frameY = (short) (num2 + 18);
|
|
Main.tile[x - 1, index1].frameX = (short) 0;
|
|
Main.tile[x - 1, index1].type = num1;
|
|
Main.tile[x, index1].active(true);
|
|
Main.tile[x, index1].frameY = (short) (num2 + 18);
|
|
Main.tile[x, index1].frameX = (short) 18;
|
|
Main.tile[x, index1].type = num1;
|
|
}
|
|
|
|
public static void GrowPumpkin(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameY / 18;
|
|
while (num2 > 1)
|
|
num2 -= 2;
|
|
int tileY = num1 - num2;
|
|
int num3 = (int) Main.tile[i, j].frameX / 18;
|
|
int num4 = 0;
|
|
while (num3 > 1)
|
|
{
|
|
num3 -= 2;
|
|
++num4;
|
|
}
|
|
int tileX = i - num3;
|
|
int num5 = num4 * 36;
|
|
if (num4 >= 4)
|
|
return;
|
|
for (int i1 = tileX; i1 < tileX + 2; ++i1)
|
|
{
|
|
for (int index = tileY; index < tileY + 2; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || (int) Main.tile[i1, index].frameX != (i1 - tileX) * 18 + num5)
|
|
flag = true;
|
|
}
|
|
if (!WorldGen.SolidTile(i1, tileY + 2) || Main.tile[i1, tileY + 2].type != (ushort) 2 && Main.tile[i1, tileY + 2].type != (ushort) 477 && Main.tile[i1, tileY + 2].type != (ushort) 492 && Main.tile[i1, tileY + 2].type != (ushort) 109)
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
{
|
|
for (int index1 = tileX; index1 < tileX + 2; ++index1)
|
|
{
|
|
for (int index2 = tileY; index2 < tileY + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if ((int) Main.tile[index1, index2].type == type && Main.tile[index1, index2].active())
|
|
Main.tile[index1, index2].frameX += (short) 36;
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 4);
|
|
}
|
|
|
|
public static void FixHearts()
|
|
{
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
for (int j = 0; j < Main.maxTilesY; ++j)
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile.active() && tile.type == (ushort) 12 && tile.frameX == (short) 0 && tile.frameY == (short) 0)
|
|
WorldGen.FixHeart(i, j);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void DestroyHeart(int i, int j)
|
|
{
|
|
WorldGen.destroyObject = true;
|
|
for (int i1 = i; i1 < i + 2; ++i1)
|
|
{
|
|
for (int j1 = j; j1 < j + 2; ++j1)
|
|
{
|
|
if (i1 < Main.maxTilesX && j1 < Main.maxTilesY)
|
|
{
|
|
Tile tile = Main.tile[i1, j1];
|
|
if (tile.active() && tile.type == (ushort) 12)
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void FixHeart(int i, int j)
|
|
{
|
|
if (i < 40 || i >= Main.maxTilesX - 40 || j < 40 || j >= Main.maxTilesY - 40)
|
|
{
|
|
WorldGen.DestroyHeart(i, j);
|
|
}
|
|
else
|
|
{
|
|
Tile tile1 = Main.tile[i, j + 2];
|
|
Tile tile2 = Main.tile[i + 1, j + 2];
|
|
if (tile1.active() && !Main.tileSolid[(int) tile1.type] && Main.tileCut[(int) tile1.type])
|
|
WorldGen.KillTile(i, j + 2);
|
|
if (tile2.active() && !Main.tileSolid[(int) tile2.type] && Main.tileCut[(int) tile2.type])
|
|
WorldGen.KillTile(i + 1, j + 2);
|
|
if (!tile1.active())
|
|
{
|
|
if (!tile2.active())
|
|
{
|
|
WorldGen.DestroyHeart(i, j);
|
|
return;
|
|
}
|
|
if (Main.tileSolid[(int) tile2.type])
|
|
{
|
|
tile1.type = tile2.type;
|
|
tile1.active(true);
|
|
}
|
|
}
|
|
if (!tile2.active() && Main.tileSolid[(int) tile1.type])
|
|
{
|
|
tile2.type = tile1.type;
|
|
tile2.active(true);
|
|
}
|
|
if (!tile1.nactive() || !Main.tileSolid[(int) tile1.type] || !tile2.nactive() || !Main.tileSolid[(int) tile2.type])
|
|
{
|
|
WorldGen.DestroyHeart(i, j);
|
|
}
|
|
else
|
|
{
|
|
if (tile1.blockType() != 0)
|
|
{
|
|
tile1.slope((byte) 0);
|
|
tile1.halfBrick(false);
|
|
}
|
|
if (tile2.blockType() == 0)
|
|
return;
|
|
tile2.slope((byte) 0);
|
|
tile2.halfBrick(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void FixChands()
|
|
{
|
|
for (int i = 5; i < Main.maxTilesX - 5; ++i)
|
|
{
|
|
for (int j = 5; j < Main.maxTilesY - 5; ++j)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
int type = (int) Main.tile[i, j].type;
|
|
if (Main.tile[i, j].active() && (type == 35 || type == 36 || type == 170 || type == 171 || type == 172))
|
|
WorldGen.FixChand(i, j);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void FixChand(int i, int j)
|
|
{
|
|
int num1 = 0;
|
|
int type = (int) Main.tile[i, j].type;
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (type == 35)
|
|
num1 = 1;
|
|
if (type == 36)
|
|
num1 = 2;
|
|
if (type == 170)
|
|
num1 = 3;
|
|
if (type == 171)
|
|
num1 = 4;
|
|
if (type == 172)
|
|
num1 = 5;
|
|
}
|
|
if (num1 <= 0)
|
|
return;
|
|
int num2 = j;
|
|
int num3 = (int) Main.tile[i, j].frameX / 18;
|
|
while (num3 >= 3)
|
|
num3 -= 3;
|
|
if (num3 >= 3)
|
|
num3 -= 3;
|
|
int num4 = i - num3;
|
|
int num5 = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
for (int index1 = num4; index1 < num4 + 3; ++index1)
|
|
{
|
|
for (int index2 = num5; index2 < num5 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active() && (int) Main.tile[index1, index2].type == type)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 34;
|
|
Main.tile[index1, index2].frameY += (short) (num1 * 54);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void PlaceChand(int x, int y, ushort type, int style = 0)
|
|
{
|
|
bool flag = true;
|
|
int num1 = 0;
|
|
for (int index1 = x - 1; index1 < x + 2; ++index1)
|
|
{
|
|
for (int index2 = y; index2 < y + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1] == null)
|
|
Main.tile[x, y - 1] = new Tile();
|
|
if (!Main.tile[x, y - 1].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 1].type] || Main.tileSolidTop[(int) Main.tile[x, y - 1].type])
|
|
flag = false;
|
|
if (!flag)
|
|
return;
|
|
int num2 = style / 36 * 18 * 6;
|
|
int num3 = style * 18 * 3;
|
|
Main.tile[x - 1, y + num1].active(true);
|
|
Main.tile[x - 1, y + num1].frameY = (short) num3;
|
|
Main.tile[x - 1, y + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + num1].type = type;
|
|
Main.tile[x, y + num1].active(true);
|
|
Main.tile[x, y + num1].frameY = (short) num3;
|
|
Main.tile[x, y + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + num1].type = type;
|
|
Main.tile[x + 1, y + num1].active(true);
|
|
Main.tile[x + 1, y + num1].frameY = (short) num3;
|
|
Main.tile[x + 1, y + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + num1].type = type;
|
|
Main.tile[x - 1, y + 1 + num1].active(true);
|
|
Main.tile[x - 1, y + 1 + num1].frameY = (short) (num3 + 18);
|
|
Main.tile[x - 1, y + 1 + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + 1 + num1].type = type;
|
|
Main.tile[x, y + 1 + num1].active(true);
|
|
Main.tile[x, y + 1 + num1].frameY = (short) (num3 + 18);
|
|
Main.tile[x, y + 1 + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + 1 + num1].type = type;
|
|
Main.tile[x + 1, y + 1 + num1].active(true);
|
|
Main.tile[x + 1, y + 1 + num1].frameY = (short) (num3 + 18);
|
|
Main.tile[x + 1, y + 1 + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + 1 + num1].type = type;
|
|
Main.tile[x - 1, y + 2 + num1].active(true);
|
|
Main.tile[x - 1, y + 2 + num1].frameY = (short) (num3 + 36);
|
|
Main.tile[x - 1, y + 2 + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + 2 + num1].type = type;
|
|
Main.tile[x, y + 2 + num1].active(true);
|
|
Main.tile[x, y + 2 + num1].frameY = (short) (num3 + 36);
|
|
Main.tile[x, y + 2 + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + 2 + num1].type = type;
|
|
Main.tile[x + 1, y + 2 + num1].active(true);
|
|
Main.tile[x + 1, y + 2 + num1].frameY = (short) (num3 + 36);
|
|
Main.tile[x + 1, y + 2 + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + 2 + num1].type = type;
|
|
}
|
|
|
|
public static void CheckChand(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = 3;
|
|
if (type == 454)
|
|
num1 = 4;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
int num3 = 0;
|
|
for (; num2 >= num1; num2 -= num1)
|
|
++num3;
|
|
int num4 = i - num2;
|
|
int num5 = 18 * num1 * num3;
|
|
if (num2 >= num1)
|
|
num2 -= num1;
|
|
int num6 = i - num2;
|
|
int num7 = (int) Main.tile[i, j].frameY / 18;
|
|
int num8 = 0;
|
|
for (; num7 >= 3; num7 -= 3)
|
|
++num8;
|
|
if (num5 >= 108)
|
|
num8 += 37 * (num5 / 108);
|
|
int num9 = 54 * num8;
|
|
if (num5 >= 108)
|
|
num9 -= 54 * (num5 / 108) * 37;
|
|
if (num7 >= 3)
|
|
num7 -= 3;
|
|
int num10 = j - num7;
|
|
for (int index1 = num6; index1 < num6 + num1; ++index1)
|
|
{
|
|
for (int index2 = num10; index2 < num10 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18 + num5 || (int) Main.tile[index1, index2].frameY != (index2 - num10) * 18 + num9)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (Main.tile[num6 + 1, num10 - 1] == null)
|
|
Main.tile[num6 + 1, num10 - 1] = new Tile();
|
|
if (!Main.tile[num6 + 1, num10 - 1].nactive() || !Main.tileSolid[(int) Main.tile[num6 + 1, num10 - 1].type] || Main.tileSolidTop[(int) Main.tile[num6 + 1, num10 - 1].type])
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i1 = num6; i1 < num6 + num1; ++i1)
|
|
{
|
|
for (int j1 = num10; j1 < num10 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i1, j1].type == type && Main.tile[i1, j1].active())
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
if (type == 454)
|
|
{
|
|
switch (Main.rand.Next(9))
|
|
{
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
int num11 = Main.rand.Next(10, 31);
|
|
while (num11 > 0)
|
|
{
|
|
int Stack = Main.rand.Next(2, 11);
|
|
if (Stack > num11)
|
|
Stack = num11;
|
|
num11 -= Stack;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 72, Stack);
|
|
}
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
int num12 = Main.rand.Next(60, 80);
|
|
while (num12 > 0)
|
|
{
|
|
int Stack = Main.rand.Next(3, 16);
|
|
if (Stack > num12)
|
|
Stack = num12;
|
|
num12 -= Stack;
|
|
Item.NewItem(i * 16 - 10, j * 16 - 10, 52, 52, 72, Stack);
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1358);
|
|
break;
|
|
case 7:
|
|
int num13 = Main.rand.Next(10, 31);
|
|
while (num13 > 0)
|
|
{
|
|
int Stack = Main.rand.Next(2, 9);
|
|
if (Stack > num13)
|
|
Stack = num13;
|
|
num13 -= Stack;
|
|
Item.NewItem(i * 16 - 10, j * 16 - 10, 52, 52, 72, Stack);
|
|
}
|
|
if (Main.rand.Next(8) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3532);
|
|
if (Main.rand.Next(8) == 0)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3532);
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73);
|
|
break;
|
|
case 8:
|
|
int num14 = 100;
|
|
while (num14 > 0)
|
|
{
|
|
int Stack = Main.rand.Next(3, 16);
|
|
if (Stack > num14)
|
|
Stack = num14;
|
|
num14 -= Stack;
|
|
Item.NewItem(i * 16 - 10, j * 16 - 10, 52, 52, 72, Stack);
|
|
}
|
|
int num15 = Main.rand.Next(30, 91);
|
|
while (num15 > 0)
|
|
{
|
|
int Stack = Main.rand.Next(7, 14);
|
|
if (Stack > num15)
|
|
Stack = num15;
|
|
num15 -= Stack;
|
|
Item.NewItem(i * 16 - 10, j * 16 - 10, 52, 52, 1349, Stack);
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1358);
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 73);
|
|
break;
|
|
}
|
|
}
|
|
if (type == 34)
|
|
{
|
|
int Type = num8 != 1 ? (num8 != 2 ? (num8 != 3 ? (num8 != 4 ? (num8 != 5 ? (num8 != 6 ? (num8 < 7 || num8 > 17 ? (num8 < 18 || num8 > 21 ? (num8 != 22 ? (num8 != 23 ? (num8 != 24 ? (num8 != 25 ? (num8 != 26 ? (num8 != 27 ? (num8 != 28 ? (num8 != 29 ? (num8 != 30 ? (num8 != 31 ? (num8 != 32 ? (num8 != 33 ? (num8 != 34 ? (num8 != 35 ? (num8 != 36 ? (num8 != 37 ? (num8 != 38 ? (num8 != 39 ? (num8 != 40 ? (num8 != 41 ? (num8 != 42 ? (num8 != 43 ? (num8 != 44 ? (num8 != 45 ? 106 : 4573) : 4305) : 4215) : 4194) : 4173) : 4152) : 3964) : 3938) : 3894) : 3178) : 3179) : 3177) : 2813) : 2657) : 2656) : 2655) : 2654) : 2653) : 2652) : 2573) : 2558) : 2543) : 2525) : 2224) : 2141 + num8 - 18) : 2055 + num8 - 7) : 1812) : 712) : 711) : 710) : 108) : 107;
|
|
Item.NewItem(i * 16, j * 16, 32, 32, Type);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i2 = num6 - 1; i2 < num6 + num1 + 1; ++i2)
|
|
{
|
|
for (int j2 = num10 - 1; j2 < num10 + 4; ++j2)
|
|
WorldGen.TileFrame(i2, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check3x3(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
int num3 = 0;
|
|
for (; num2 >= 3; num2 -= 3)
|
|
++num3;
|
|
int num4 = i - num2;
|
|
int num5 = 54 * num3;
|
|
int num6 = (int) Main.tile[i, j].frameY / 54;
|
|
int num7 = (int) Main.tile[i, j].frameY % 54 / 18;
|
|
if (num2 >= 3)
|
|
num2 -= 3;
|
|
int num8 = i - num2;
|
|
int num9 = num1 - num7;
|
|
for (int index1 = num8; index1 < num8 + 3; ++index1)
|
|
{
|
|
for (int index2 = num9; index2 < num9 + 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18 + num5 || (int) Main.tile[index1, index2].frameY != (index2 - num9) * 18 + num6 * 54)
|
|
flag = true;
|
|
}
|
|
}
|
|
if (type == 106 || type == 212 || type == 219 || type == 220 || type == 228 || type == 231 || type == 243 || type == 247 || type == 283 || type >= 300 && type <= 308 || type == 354 || type == 355 || type == 499 || type == 406 || type == 412 || type == 452 || type == 455 || type == 491)
|
|
{
|
|
for (int i1 = num8; i1 < num8 + 3; ++i1)
|
|
{
|
|
if (Main.tile[i1, num9 + 3] == null)
|
|
Main.tile[i1, num9 + 3] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num9 + 3))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[num8 + 1, num9 - 1] == null)
|
|
Main.tile[num8 + 1, num9 - 1] = new Tile();
|
|
if (!Main.tile[num8 + 1, num9 - 1].nactive() || !Main.tileSolid[(int) Main.tile[num8 + 1, num9 - 1].type] || Main.tileSolidTop[(int) Main.tile[num8 + 1, num9 - 1].type])
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num8; i2 < num8 + 3; ++i2)
|
|
{
|
|
for (int j1 = num9; j1 < num9 + 3; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
switch (type)
|
|
{
|
|
case 106:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 363);
|
|
break;
|
|
case 212:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 951);
|
|
break;
|
|
case 219:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 997);
|
|
break;
|
|
case 220:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 998);
|
|
break;
|
|
case 228:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1120);
|
|
break;
|
|
case 243:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1430);
|
|
break;
|
|
case 247:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 1551);
|
|
break;
|
|
case 283:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2172);
|
|
break;
|
|
default:
|
|
if (type >= 300 && type <= 306)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2192 + type - 300);
|
|
break;
|
|
}
|
|
switch (type)
|
|
{
|
|
case 231:
|
|
int num10 = (i + 1) * 16 + 8;
|
|
int num11 = j * 16;
|
|
Gore.NewGore(new Vector2((float) num10, (float) num11), new Vector2(), 300);
|
|
Gore.NewGore(new Vector2((float) num10, (float) (num11 + 8)), new Vector2(), 301);
|
|
Gore.NewGore(new Vector2((float) num10, (float) (num11 + 16)), new Vector2(), 302);
|
|
float num12 = (float) (i * 16);
|
|
float num13 = (float) (j * 16);
|
|
float num14 = -1f;
|
|
int plr = 0;
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && !Main.player[index].dead)
|
|
{
|
|
float num15 = Math.Abs(Main.player[index].position.X - num12) + Math.Abs(Main.player[index].position.Y - num13);
|
|
if ((double) num15 < (double) num14 || (double) num14 == -1.0)
|
|
{
|
|
plr = index;
|
|
num14 = num15;
|
|
}
|
|
}
|
|
}
|
|
if ((double) num14 < 4800.0)
|
|
{
|
|
NPC.SpawnOnPlayer(plr, 222);
|
|
break;
|
|
}
|
|
break;
|
|
case 307:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2203);
|
|
break;
|
|
case 308:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2204);
|
|
break;
|
|
case 354:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 2999);
|
|
break;
|
|
case 355:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3000);
|
|
break;
|
|
case 406:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3365);
|
|
break;
|
|
case 412:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3549);
|
|
break;
|
|
case 452:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3742);
|
|
break;
|
|
case 455:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 3747);
|
|
break;
|
|
case 491:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4076);
|
|
break;
|
|
case 499:
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4142);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num8 - 1; i3 < num8 + 4; ++i3)
|
|
{
|
|
for (int j2 = num9 - 1; j2 < num9 + 4; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check2x5(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
int num3 = 0;
|
|
for (; num2 >= 2; num2 -= 2)
|
|
++num3;
|
|
int num4 = i - num2;
|
|
int num5 = 36 * num3;
|
|
int num6 = (int) Main.tile[i, j].frameY % 80 / 18;
|
|
if (num2 >= 3)
|
|
num2 -= 2;
|
|
int num7 = i - num2;
|
|
int num8 = num1 - num6;
|
|
for (int index1 = num7; index1 < num7 + 2; ++index1)
|
|
{
|
|
for (int index2 = num8; index2 < num8 + 5; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18 + num5 || (int) Main.tile[index1, index2].frameY != (index2 - num8) * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
for (int i1 = num7; i1 < num7 + 2; ++i1)
|
|
{
|
|
if (Main.tile[i1, num8 + 5] == null)
|
|
Main.tile[i1, num8 + 5] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num8 + 5))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num7; i2 < num7 + 2; ++i2)
|
|
{
|
|
for (int j1 = num8; j1 < num8 + 5; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 547)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4430 + num3);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num7 - 1; i3 < num7 + 3; ++i3)
|
|
{
|
|
for (int j2 = num8 - 1; j2 < num8 + 6; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check3x5(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
int num3 = 0;
|
|
for (; num2 >= 3; num2 -= 3)
|
|
++num3;
|
|
int num4 = i - num2;
|
|
int num5 = 54 * num3;
|
|
int num6 = (int) Main.tile[i, j].frameY % 90 / 18;
|
|
if (num2 >= 4)
|
|
num2 -= 3;
|
|
int num7 = i - num2;
|
|
int num8 = num1 - num6;
|
|
for (int index1 = num7; index1 < num7 + 3; ++index1)
|
|
{
|
|
for (int index2 = num8; index2 < num8 + 5; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18 + num5 || (int) Main.tile[index1, index2].frameY != (index2 - num8) * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
for (int i1 = num7; i1 < num7 + 3; ++i1)
|
|
{
|
|
if (Main.tile[i1, num8 + 5] == null)
|
|
Main.tile[i1, num8 + 5] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num8 + 5))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num7; i2 < num7 + 3; ++i2)
|
|
{
|
|
for (int j1 = num8; j1 < num8 + 5; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 613)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4904 + num3);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num7 - 1; i3 < num7 + 4; ++i3)
|
|
{
|
|
for (int j2 = num8 - 1; j2 < num8 + 6; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Check3x6(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = j;
|
|
int num2 = (int) Main.tile[i, j].frameX / 18;
|
|
int num3 = 0;
|
|
for (; num2 >= 3; num2 -= 3)
|
|
++num3;
|
|
int num4 = i - num2;
|
|
int num5 = 54 * num3;
|
|
int num6 = (int) Main.tile[i, j].frameY % 96 / 18;
|
|
if (num2 >= 4)
|
|
num2 -= 3;
|
|
int num7 = i - num2;
|
|
int num8 = num1 - num6;
|
|
for (int index1 = num7; index1 < num7 + 3; ++index1)
|
|
{
|
|
for (int index2 = num8; index2 < num8 + 6; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || (int) Main.tile[index1, index2].frameX != (index1 - num4) * 18 + num5 || (int) Main.tile[index1, index2].frameY != (index2 - num8) * 18)
|
|
flag = true;
|
|
}
|
|
}
|
|
for (int i1 = num7; i1 < num7 + 3; ++i1)
|
|
{
|
|
if (Main.tile[i1, num8 + 6] == null)
|
|
Main.tile[i1, num8 + 6] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i1, num8 + 6))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num7; i2 < num7 + 3; ++i2)
|
|
{
|
|
for (int j1 = num8; j1 < num8 + 6; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
if (type == 548)
|
|
{
|
|
if (num3 >= 7)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4902 + num3 - 7);
|
|
else
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4435 + num3);
|
|
}
|
|
if (type == 614)
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 4906);
|
|
WorldGen.destroyObject = false;
|
|
for (int i3 = num7 - 1; i3 < num7 + 4; ++i3)
|
|
{
|
|
for (int j2 = num8 - 1; j2 < num8 + 7; ++j2)
|
|
WorldGen.TileFrame(i3, j2);
|
|
}
|
|
}
|
|
|
|
public static void Place3x3(int x, int y, ushort type, int style = 0)
|
|
{
|
|
bool flag = true;
|
|
int num1 = 0;
|
|
if (type == (ushort) 106 || type == (ushort) 212 || type == (ushort) 219 || type == (ushort) 220 || type == (ushort) 228 || type == (ushort) 231 || type == (ushort) 243 || type == (ushort) 247 || type == (ushort) 283 || type >= (ushort) 300 && type <= (ushort) 308 || type == (ushort) 354 || type == (ushort) 355)
|
|
{
|
|
num1 = -2;
|
|
for (int index1 = x - 1; index1 < x + 2; ++index1)
|
|
{
|
|
for (int index2 = y - 2; index2 < y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
for (int i = x - 1; i < x + 2; ++i)
|
|
{
|
|
if (Main.tile[i, y + 1] == null)
|
|
Main.tile[i, y + 1] = new Tile();
|
|
if (!WorldGen.SolidTile2(i, y + 1))
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int index3 = x - 1; index3 < x + 2; ++index3)
|
|
{
|
|
for (int index4 = y; index4 < y + 3; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4] == null)
|
|
Main.tile[index3, index4] = new Tile();
|
|
if (Main.tile[index3, index4].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (Main.tile[x, y - 1] == null)
|
|
Main.tile[x, y - 1] = new Tile();
|
|
if (!Main.tile[x, y - 1].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 1].type] || Main.tileSolidTop[(int) Main.tile[x, y - 1].type])
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num2 = style * 18 * 3;
|
|
Main.tile[x - 1, y + num1].active(true);
|
|
Main.tile[x - 1, y + num1].frameY = (short) 0;
|
|
Main.tile[x - 1, y + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + num1].type = type;
|
|
Main.tile[x, y + num1].active(true);
|
|
Main.tile[x, y + num1].frameY = (short) 0;
|
|
Main.tile[x, y + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + num1].type = type;
|
|
Main.tile[x + 1, y + num1].active(true);
|
|
Main.tile[x + 1, y + num1].frameY = (short) 0;
|
|
Main.tile[x + 1, y + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + num1].type = type;
|
|
Main.tile[x - 1, y + 1 + num1].active(true);
|
|
Main.tile[x - 1, y + 1 + num1].frameY = (short) 18;
|
|
Main.tile[x - 1, y + 1 + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + 1 + num1].type = type;
|
|
Main.tile[x, y + 1 + num1].active(true);
|
|
Main.tile[x, y + 1 + num1].frameY = (short) 18;
|
|
Main.tile[x, y + 1 + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + 1 + num1].type = type;
|
|
Main.tile[x + 1, y + 1 + num1].active(true);
|
|
Main.tile[x + 1, y + 1 + num1].frameY = (short) 18;
|
|
Main.tile[x + 1, y + 1 + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + 1 + num1].type = type;
|
|
Main.tile[x - 1, y + 2 + num1].active(true);
|
|
Main.tile[x - 1, y + 2 + num1].frameY = (short) 36;
|
|
Main.tile[x - 1, y + 2 + num1].frameX = (short) num2;
|
|
Main.tile[x - 1, y + 2 + num1].type = type;
|
|
Main.tile[x, y + 2 + num1].active(true);
|
|
Main.tile[x, y + 2 + num1].frameY = (short) 36;
|
|
Main.tile[x, y + 2 + num1].frameX = (short) (num2 + 18);
|
|
Main.tile[x, y + 2 + num1].type = type;
|
|
Main.tile[x + 1, y + 2 + num1].active(true);
|
|
Main.tile[x + 1, y + 2 + num1].frameY = (short) 36;
|
|
Main.tile[x + 1, y + 2 + num1].frameX = (short) (num2 + 36);
|
|
Main.tile[x + 1, y + 2 + num1].type = type;
|
|
}
|
|
|
|
public static void PlaceSunflower(int x, int y, ushort type = 27)
|
|
{
|
|
if ((double) y > Main.worldSurface - 1.0)
|
|
return;
|
|
bool flag = true;
|
|
for (int index1 = x; index1 < x + 2; ++index1)
|
|
{
|
|
for (int index2 = y - 3; index2 < y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active() || Main.tile[index1, index2].wall > (ushort) 0)
|
|
flag = false;
|
|
}
|
|
if (Main.tile[index1, y + 1] == null)
|
|
Main.tile[index1, y + 1] = new Tile();
|
|
if (!Main.tile[index1, y + 1].nactive() || Main.tile[index1, y + 1].halfBrick() || Main.tile[index1, y + 1].slope() != (byte) 0 || Main.tile[index1, y + 1].type != (ushort) 2 && Main.tile[index1, y + 1].type != (ushort) 109)
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int num1 = WorldGen.genRand.Next(3);
|
|
for (int index3 = 0; index3 < 2; ++index3)
|
|
{
|
|
for (int index4 = -3; index4 < 1; ++index4)
|
|
{
|
|
int num2 = index3 * 18 + WorldGen.genRand.Next(3) * 36;
|
|
if (index4 <= -2)
|
|
num2 = index3 * 18 + num1 * 36;
|
|
int num3 = (index4 + 3) * 18;
|
|
Main.tile[x + index3, y + index4].active(true);
|
|
Main.tile[x + index3, y + index4].frameX = (short) num2;
|
|
Main.tile[x + index3, y + index4].frameY = (short) num3;
|
|
Main.tile[x + index3, y + index4].type = type;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void FixSunflowers()
|
|
{
|
|
for (int i = 5; i < Main.maxTilesX - 5; ++i)
|
|
{
|
|
for (int j = 5; (double) j < Main.worldSurface; ++j)
|
|
{
|
|
if (Main.tile[i, j].active() && Main.tile[i, j].type == (ushort) 27)
|
|
WorldGen.FixSunflower(i, j);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void FixSunflower(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 27)
|
|
return;
|
|
int num1 = 0;
|
|
int num2 = j;
|
|
int num3 = num1 + (int) Main.tile[i, j].frameX / 18;
|
|
int num4 = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
while (num3 > 1)
|
|
num3 -= 2;
|
|
int num5 = num3 * -1 + i;
|
|
int num6 = WorldGen.genRand.Next(3) * 36;
|
|
int num7 = 0;
|
|
for (int index1 = num5; index1 < num5 + 2; ++index1)
|
|
{
|
|
for (int index2 = num4; index2 < num4 + 4; ++index2)
|
|
Main.tile[index1, index2].frameX = (short) (num7 + num6);
|
|
num7 += 18;
|
|
}
|
|
}
|
|
|
|
public static void CheckSunflower(int i, int j, int type = 27)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = 0;
|
|
int num2 = j;
|
|
int num3 = num1 + (int) Main.tile[i, j].frameX / 18;
|
|
int num4 = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
while (num3 > 1)
|
|
num3 -= 2;
|
|
int num5 = num3 * -1 + i;
|
|
for (int i1 = num5; i1 < num5 + 2; ++i1)
|
|
{
|
|
for (int index = num4; index < num4 + 4; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
int num6 = (int) Main.tile[i1, index].frameX / 18;
|
|
while (num6 > 1)
|
|
num6 -= 2;
|
|
if (!Main.tile[i1, index].nactive() || (int) Main.tile[i1, index].type != type || num6 != i1 - num5 || (int) Main.tile[i1, index].frameY != (index - num4) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[i1, num4 + 4] == null)
|
|
Main.tile[i1, num4 + 4] = new Tile();
|
|
if (!Main.tile[i1, num4 + 4].nactive() || Main.tile[i1, num4 + 4].type != (ushort) 2 && Main.tile[i1, num4 + 4].type != (ushort) 477 && Main.tile[i1, num4 + 4].type != (ushort) 492 && Main.tile[i1, num4 + 4].type != (ushort) 109 && Main.tile[i1, num4 + 4].type != (ushort) 60)
|
|
flag = true;
|
|
if (!WorldGen.SolidTile(i1, num4 + 4))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
for (int i2 = num5; i2 < num5 + 2; ++i2)
|
|
{
|
|
for (int j1 = num4; j1 < num4 + 4; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, 63);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void CheckDye(int x, int y)
|
|
{
|
|
switch ((int) Main.tile[x, y].frameX / 34)
|
|
{
|
|
case 6:
|
|
if (Main.tile[x, y + 1].nactive() && Main.tile[x, y + 1].type == (ushort) 80)
|
|
break;
|
|
WorldGen.KillTile(x, y);
|
|
break;
|
|
case 7:
|
|
if (WorldGen.SolidTile(x, y - 1))
|
|
break;
|
|
WorldGen.KillTile(x, y);
|
|
break;
|
|
default:
|
|
if (WorldGen.SolidTile(x, y + 1))
|
|
break;
|
|
WorldGen.KillTile(x, y);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void CheckRockGolemHead(int x, int y)
|
|
{
|
|
if (WorldGen.SolidTileAllowBottomSlope(x, y + 1))
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void CheckGnome(int x, int j)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = 567;
|
|
int j1 = j;
|
|
bool flag = true;
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, j1);
|
|
Tile tileSafely2 = Framing.GetTileSafely(x, j1 + 1);
|
|
if (tileSafely1.frameY > (short) 0)
|
|
{
|
|
--j1;
|
|
tileSafely1 = Framing.GetTileSafely(x, j1);
|
|
tileSafely2 = Framing.GetTileSafely(x, j1 + 1);
|
|
}
|
|
int num2 = (int) tileSafely1.frameX / 28;
|
|
if (tileSafely1.frameY == (short) 0 && tileSafely2.frameY == (short) 20 && (int) tileSafely1.type == num1 && (int) tileSafely2.type == num1)
|
|
flag = false;
|
|
if (Main.tile[x, j1 + 2] == null)
|
|
Main.tile[x, j1 + 2] = new Tile();
|
|
if (!WorldGen.SolidTileAllowBottomSlope(x, j1 + 2) && !TileID.Sets.Platforms[(int) Main.tile[x, j1 + 2].type])
|
|
flag = true;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if ((int) tileSafely1.type == num1)
|
|
WorldGen.KillTile(x, j1);
|
|
if ((int) tileSafely2.type == num1)
|
|
WorldGen.KillTile(x, j1 + 1);
|
|
Item.NewItem(x * 16, j1 * 16, 16, 32, 4609);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void PlaceGnome(int x, int y, int style) => WorldGen.PlaceObject(x, y, 567, style: style);
|
|
|
|
public static void PlaceDye(int x, int y, int style)
|
|
{
|
|
bool flag = false;
|
|
if (Main.tile[x, y + 1] == null || Main.tile[x, y - 1] == null)
|
|
return;
|
|
if (style == 7)
|
|
{
|
|
if (Main.tile[x, y + 1].active() && Main.tile[x, y + 1].type != (ushort) 3 && Main.tile[x, y + 1].type != (ushort) 51 && Main.tile[x, y + 1].type != (ushort) 61 && Main.tile[x, y + 1].type != (ushort) 73 && Main.tile[x, y + 1].type != (ushort) 74 && Main.tile[x, y + 1].type != (ushort) 184)
|
|
return;
|
|
if (WorldGen.SolidTile(x, y - 1) && !Main.tile[x, y + 1].active())
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y - 1].active() && Main.tile[x, y - 1].type != (ushort) 3 && Main.tile[x, y - 1].type != (ushort) 51 && Main.tile[x, y - 1].type != (ushort) 61 && Main.tile[x, y - 1].type != (ushort) 73 && Main.tile[x, y - 1].type != (ushort) 74 && Main.tile[x, y - 1].type != (ushort) 184)
|
|
return;
|
|
if (style == 6)
|
|
{
|
|
if (Main.tile[x, y + 1].nactive() && Main.tile[x, y + 1].type == (ushort) 80 && !Main.tile[x - 1, y + 1].active() && !Main.tile[x + 1, y + 1].active())
|
|
flag = true;
|
|
}
|
|
else if (WorldGen.SolidTile(x, y + 1) && !Main.tile[x, y - 1].active())
|
|
{
|
|
switch (style)
|
|
{
|
|
case 5:
|
|
if (Main.tile[x, y].liquid == byte.MaxValue)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
flag = true;
|
|
break;
|
|
default:
|
|
if (Main.tile[x, y].liquid == (byte) 0)
|
|
{
|
|
if (style == 3 || style == 4)
|
|
{
|
|
if (Main.tile[x, y].wall == (ushort) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
flag = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
Main.tile[x, y].type = (ushort) 227;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].halfBrick(false);
|
|
Main.tile[x, y].slope((byte) 0);
|
|
Main.tile[x, y].frameY = (short) 0;
|
|
Main.tile[x, y].frameX = (short) (34 * style);
|
|
}
|
|
|
|
public static bool PlacePot(int x, int y, ushort type = 28, int style = 0)
|
|
{
|
|
bool flag = true;
|
|
for (int index1 = x; index1 < x + 2; ++index1)
|
|
{
|
|
for (int index2 = y - 1; index2 < y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
if (Main.tile[index1, index2].active())
|
|
flag = false;
|
|
}
|
|
if (Main.tile[index1, y + 1] == null)
|
|
Main.tile[index1, y + 1] = new Tile();
|
|
if (!Main.tile[index1, y + 1].nactive() || Main.tile[index1, y + 1].halfBrick() || Main.tile[index1, y + 1].slope() != (byte) 0 || !Main.tileSolid[(int) Main.tile[index1, y + 1].type])
|
|
flag = false;
|
|
}
|
|
if (!flag)
|
|
return false;
|
|
int num1 = WorldGen.genRand.Next(3) * 36;
|
|
for (int index3 = 0; index3 < 2; ++index3)
|
|
{
|
|
for (int index4 = -1; index4 < 1; ++index4)
|
|
{
|
|
int num2 = index3 * 18 + num1;
|
|
int num3 = (index4 + 1) * 18;
|
|
Main.tile[x + index3, y + index4].active(true);
|
|
Main.tile[x + index3, y + index4].frameX = (short) num2;
|
|
Main.tile[x + index3, y + index4].frameY = (short) (num3 + style * 36);
|
|
Main.tile[x + index3, y + index4].type = type;
|
|
Main.tile[x + index3, y + index4].halfBrick(false);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool CheckCactus(int i, int j)
|
|
{
|
|
int index1 = j;
|
|
int index2 = i;
|
|
while (Main.tile[index2, index1] != null && Main.tile[index2, index1].active() && Main.tile[index2, index1].type == (ushort) 80)
|
|
{
|
|
++index1;
|
|
if (Main.tile[index2, index1] == null)
|
|
return false;
|
|
if (!Main.tile[index2, index1].active() || Main.tile[index2, index1].type != (ushort) 80)
|
|
{
|
|
if (Main.tile[index2 - 1, index1] != null && Main.tile[index2 - 1, index1].active() && Main.tile[index2 - 1, index1].type == (ushort) 80 && Main.tile[index2 - 1, index1 - 1] != null && Main.tile[index2 - 1, index1 - 1].active() && Main.tile[index2 - 1, index1 - 1].type == (ushort) 80 && index2 >= i)
|
|
--index2;
|
|
if (Main.tile[index2 + 1, index1] != null && Main.tile[index2 + 1, index1].active() && Main.tile[index2 + 1, index1].type == (ushort) 80 && Main.tile[index2 + 1, index1 - 1] != null && Main.tile[index2 + 1, index1 - 1].active() && Main.tile[index2 + 1, index1 - 1].type == (ushort) 80 && index2 <= i)
|
|
++index2;
|
|
}
|
|
}
|
|
if (!Main.tile[index2, index1].nactive() || Main.tile[index2, index1].halfBrick() || Main.tile[index2, index1].slope() != (byte) 0 || Main.tile[index2, index1].type != (ushort) 53 && Main.tile[index2, index1].type != (ushort) 112 && Main.tile[index2, index1].type != (ushort) 116 && Main.tile[index2, index1].type != (ushort) 234)
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return true;
|
|
}
|
|
if (i != index2)
|
|
{
|
|
if ((!Main.tile[i, j + 1].active() || Main.tile[i, j + 1].type != (ushort) 80) && (!Main.tile[i - 1, j].active() || Main.tile[i - 1, j].type != (ushort) 80) && (!Main.tile[i + 1, j].active() || Main.tile[i + 1, j].type != (ushort) 80))
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return true;
|
|
}
|
|
}
|
|
else if (i == index2 && (!Main.tile[i, j + 1].active() || Main.tile[i, j + 1].type != (ushort) 80 && Main.tile[i, j + 1].type != (ushort) 53 && Main.tile[i, j + 1].type != (ushort) 112 && Main.tile[i, j + 1].type != (ushort) 116 && Main.tile[i, j + 1].type != (ushort) 234))
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void PlantCactus(int i, int j)
|
|
{
|
|
WorldGen.GrowCactus(i, j);
|
|
for (int index = 0; index < 150; ++index)
|
|
WorldGen.GrowCactus(WorldGen.genRand.Next(i - 1, i + 2), WorldGen.genRand.Next(j - 10, j + 2));
|
|
}
|
|
|
|
public static void CheckOrb(int i, int j, int type)
|
|
{
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
bool flag = false;
|
|
if (frameX >= 36)
|
|
flag = true;
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = Main.tile[i, j].frameX == (short) 0 || Main.tile[i, j].frameX == (short) 36 ? i : i - 1;
|
|
int num2 = Main.tile[i, j].frameY != (short) 0 ? j - 1 : j;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 2; ++index2)
|
|
{
|
|
Tile tile = Main.tile[num1 + index1, num2 + index2];
|
|
if (tile != null && (!tile.nactive() || (int) tile.type != type))
|
|
{
|
|
WorldGen.destroyObject = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!WorldGen.destroyObject)
|
|
{
|
|
if (type == 12)
|
|
{
|
|
Tile tile = Main.tile[num1 + index1, num2 + 2];
|
|
if (tile != null && (!tile.nactive() || !Main.tileSolid[(int) tile.type] || tile.blockType() != 0))
|
|
{
|
|
WorldGen.destroyObject = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if (!WorldGen.destroyObject)
|
|
return;
|
|
for (int i1 = num1; i1 < num1 + 2; ++i1)
|
|
{
|
|
for (int j1 = num2; j1 < num2 + 2; ++j1)
|
|
{
|
|
if ((int) Main.tile[i1, j1].type == type)
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
if (Main.netMode != 1 && !WorldGen.noTileActions)
|
|
{
|
|
switch (type)
|
|
{
|
|
case 12:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 29);
|
|
break;
|
|
case 31:
|
|
if (flag)
|
|
{
|
|
int num3 = Main.rand.Next(5);
|
|
if (!WorldGen.shadowOrbSmashed)
|
|
num3 = 0;
|
|
switch (num3)
|
|
{
|
|
case 0:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 800, pfix: -1);
|
|
int Stack = WorldGen.genRand.Next(100, 101);
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 97, Stack);
|
|
break;
|
|
case 1:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 1256, pfix: -1);
|
|
break;
|
|
case 2:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 802, pfix: -1);
|
|
break;
|
|
case 3:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 3062, pfix: -1);
|
|
break;
|
|
case 4:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 1290, pfix: -1);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num4 = Main.rand.Next(5);
|
|
if (!WorldGen.shadowOrbSmashed)
|
|
num4 = 0;
|
|
switch (num4)
|
|
{
|
|
case 0:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 96, pfix: -1);
|
|
int Stack = WorldGen.genRand.Next(100, 101);
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 97, Stack);
|
|
break;
|
|
case 1:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 64, pfix: -1);
|
|
break;
|
|
case 2:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 162, pfix: -1);
|
|
break;
|
|
case 3:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 115, pfix: -1);
|
|
break;
|
|
case 4:
|
|
Item.NewItem(num1 * 16, num2 * 16, 32, 32, 111, pfix: -1);
|
|
break;
|
|
}
|
|
}
|
|
WorldGen.shadowOrbSmashed = true;
|
|
++WorldGen.shadowOrbCount;
|
|
if (WorldGen.shadowOrbCount >= 3)
|
|
{
|
|
if (!(NPC.AnyNPCs(266) & flag) && (!NPC.AnyNPCs(13) || flag))
|
|
{
|
|
WorldGen.shadowOrbCount = 0;
|
|
float num5 = (float) (num1 * 16);
|
|
float num6 = (float) (num2 * 16);
|
|
float num7 = -1f;
|
|
int plr = 0;
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
float num8 = Math.Abs(Main.player[index].position.X - num5) + Math.Abs(Main.player[index].position.Y - num6);
|
|
if ((double) num8 < (double) num7 || (double) num7 == -1.0)
|
|
{
|
|
plr = index;
|
|
num7 = num8;
|
|
}
|
|
}
|
|
if (flag)
|
|
NPC.SpawnOnPlayer(plr, 266);
|
|
else
|
|
NPC.SpawnOnPlayer(plr, 13);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
LocalizedText localizedText = Lang.misc[10];
|
|
if (WorldGen.shadowOrbCount == 2)
|
|
localizedText = Lang.misc[11];
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Main.NewText(localizedText.ToString(), (byte) 50, B: (byte) 130);
|
|
break;
|
|
case 2:
|
|
ChatHelper.BroadcastChatMessage(NetworkText.FromKey(localizedText.Key), new Color(50, (int) byte.MaxValue, 130));
|
|
break;
|
|
}
|
|
}
|
|
AchievementsHelper.NotifyProgressionEvent(7);
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
SoundEngine.PlaySound(4, i * 16, j * 16);
|
|
else
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static void CheckPalmTree(int i, int j)
|
|
{
|
|
int num1 = -1;
|
|
int num2 = -1;
|
|
int type = (int) Main.tile[i, j].type;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
int frameY = (int) Main.tile[i, j].frameY;
|
|
if (Main.tile[i, j - 1] != null && Main.tile[i, j - 1].active())
|
|
num1 = (int) Main.tile[i, j - 1].type;
|
|
if (Main.tile[i, j + 1] != null && Main.tile[i, j + 1].active())
|
|
num2 = (int) Main.tile[i, j + 1].type;
|
|
if (num2 == 53)
|
|
num2 = 53;
|
|
if (num2 == 234)
|
|
num2 = 53;
|
|
if (num2 == 116)
|
|
num2 = 53;
|
|
if (num2 == 112)
|
|
num2 = 53;
|
|
if (num2 != 53 && num2 != type)
|
|
WorldGen.KillTile(i, j);
|
|
if ((Main.tile[i, j].frameX == (short) 66 || Main.tile[i, j].frameX == (short) 220) && num2 != 53)
|
|
WorldGen.KillTile(i, j);
|
|
if (num1 != type && Main.tile[i, j].frameX <= (short) 44)
|
|
Main.tile[i, j].frameX = (short) (WorldGen.genRand.Next(7, 10) * 22);
|
|
else if (num1 != type && Main.tile[i, j].frameX == (short) 66)
|
|
Main.tile[i, j].frameX = (short) 220;
|
|
if ((int) Main.tile[i, j].frameX == frameX || (int) Main.tile[i, j].frameY == frameY || frameX < 0 || frameY < 0)
|
|
return;
|
|
WorldGen.TileFrame(i - 1, j);
|
|
WorldGen.TileFrame(i + 1, j);
|
|
WorldGen.TileFrame(i, j - 1);
|
|
WorldGen.TileFrame(i, j + 1);
|
|
}
|
|
|
|
public static void CheckTreeWithSettings(int x, int y, WorldGen.CheckTreeSettings settings)
|
|
{
|
|
int num1 = -1;
|
|
int num2 = -1;
|
|
int num3 = -1;
|
|
int groundTileType = -1;
|
|
Tile tile = Main.tile[x, y];
|
|
int type = (int) tile.type;
|
|
int frameX = (int) tile.frameX;
|
|
int frameY = (int) tile.frameY;
|
|
if (Main.tile[x - 1, y] != null && Main.tile[x - 1, y].active())
|
|
num2 = (int) Main.tile[x - 1, y].type;
|
|
if (Main.tile[x + 1, y] != null && Main.tile[x + 1, y].active())
|
|
num3 = (int) Main.tile[x + 1, y].type;
|
|
if (Main.tile[x, y - 1] != null && Main.tile[x, y - 1].active())
|
|
num1 = (int) Main.tile[x, y - 1].type;
|
|
if (Main.tile[x, y + 1] != null && Main.tile[x, y + 1].active())
|
|
groundTileType = (int) Main.tile[x, y + 1].type;
|
|
bool flag1 = settings.IsGroundValid(groundTileType);
|
|
bool flag2 = num3 == type;
|
|
bool flag3 = num2 == type;
|
|
if (!flag1 && groundTileType != type && (tile.frameX == (short) 0 && tile.frameY <= (short) 130 || tile.frameX == (short) 22 && tile.frameY <= (short) 130 || tile.frameX == (short) 44 && tile.frameY <= (short) 130))
|
|
WorldGen.KillTile(x, y);
|
|
if (tile.frameX >= (short) 22 && tile.frameX <= (short) 44 && tile.frameY >= (short) 132 && tile.frameY <= (short) 176)
|
|
{
|
|
if (!flag1)
|
|
WorldGen.KillTile(x, y);
|
|
else if (!(tile.frameX == (short) 22 & flag3) && !(tile.frameX == (short) 44 & flag2))
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else if (tile.frameX == (short) 88 && tile.frameY >= (short) 0 && tile.frameY <= (short) 44 || tile.frameX == (short) 66 && tile.frameY >= (short) 66 && tile.frameY <= (short) 130 || tile.frameX == (short) 110 && tile.frameY >= (short) 66 && tile.frameY <= (short) 110 || tile.frameX == (short) 132 && tile.frameY >= (short) 0 && tile.frameY <= (short) 176)
|
|
{
|
|
if (flag3 & flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 66;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 88;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 110;
|
|
}
|
|
}
|
|
else if (flag3)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 66;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 88;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 110;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (tile.frameY >= (short) 132 && tile.frameY <= (short) 176 && (tile.frameX == (short) 0 || tile.frameX == (short) 66 || tile.frameX == (short) 88))
|
|
{
|
|
if (!flag1)
|
|
WorldGen.KillTile(x, y);
|
|
if (!flag3 && !flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (!flag3)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 132;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 154;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 0;
|
|
tile.frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (!flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 132;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 154;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 66;
|
|
tile.frameY = (short) 176;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 132;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 154;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 88;
|
|
tile.frameY = (short) 176;
|
|
}
|
|
}
|
|
}
|
|
if (tile.frameX == (short) 66 && (tile.frameY == (short) 0 || tile.frameY == (short) 22 || tile.frameY == (short) 44) || tile.frameX == (short) 44 && (tile.frameY == (short) 198 || tile.frameY == (short) 220 || tile.frameY == (short) 242))
|
|
{
|
|
if (!flag2)
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else if (tile.frameX == (short) 88 && (tile.frameY == (short) 66 || tile.frameY == (short) 88 || tile.frameY == (short) 110) || tile.frameX == (short) 66 && (tile.frameY == (short) 198 || tile.frameY == (short) 220 || tile.frameY == (short) 242))
|
|
{
|
|
if (!flag3)
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
else if (groundTileType == -1)
|
|
WorldGen.KillTile(x, y);
|
|
else if (num1 != type && tile.frameY < (short) 198 && (tile.frameX != (short) 22 && tile.frameX != (short) 44 || tile.frameY < (short) 132))
|
|
{
|
|
if (flag3 | flag2)
|
|
{
|
|
if (groundTileType == type)
|
|
{
|
|
if (flag3 & flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 132;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 154;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (flag3)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 66;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 88;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 132;
|
|
tile.frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
else if (flag3 & flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 132;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 154;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (flag3)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (flag2)
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 66;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 88;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 154;
|
|
tile.frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tile.frameNumber() == (byte) 0)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 0;
|
|
}
|
|
if (tile.frameNumber() == (byte) 1)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 22;
|
|
}
|
|
if (tile.frameNumber() == (byte) 2)
|
|
{
|
|
tile.frameX = (short) 110;
|
|
tile.frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if ((int) tile.frameX == frameX || (int) tile.frameY == frameY || frameX < 0 || frameY < 0)
|
|
return;
|
|
WorldGen.TileFrame(x - 1, y);
|
|
WorldGen.TileFrame(x + 1, y);
|
|
WorldGen.TileFrame(x, y - 1);
|
|
WorldGen.TileFrame(x, y + 1);
|
|
}
|
|
|
|
public static void CheckTree(int i, int j)
|
|
{
|
|
int num1 = -1;
|
|
int num2 = -1;
|
|
int num3 = -1;
|
|
int num4 = -1;
|
|
int type1 = (int) Main.tile[i, j].type;
|
|
int frameX = (int) Main.tile[i, j].frameX;
|
|
int frameY = (int) Main.tile[i, j].frameY;
|
|
if (Main.tile[i - 1, j] != null && Main.tile[i - 1, j].active())
|
|
num2 = (int) Main.tile[i - 1, j].type;
|
|
if (Main.tile[i + 1, j] != null && Main.tile[i + 1, j].active())
|
|
num3 = (int) Main.tile[i + 1, j].type;
|
|
if (Main.tile[i, j - 1] != null && Main.tile[i, j - 1].active())
|
|
num1 = (int) Main.tile[i, j - 1].type;
|
|
if (Main.tile[i, j + 1] != null && Main.tile[i, j + 1].active())
|
|
num4 = (int) Main.tile[i, j + 1].type;
|
|
if (Main.tile[i - 1, j - 1] != null && Main.tile[i - 1, j - 1].active())
|
|
{
|
|
int type2 = (int) Main.tile[i - 1, j - 1].type;
|
|
}
|
|
if (Main.tile[i + 1, j - 1] != null && Main.tile[i + 1, j - 1].active())
|
|
{
|
|
int type3 = (int) Main.tile[i + 1, j - 1].type;
|
|
}
|
|
if (Main.tile[i - 1, j + 1] != null && Main.tile[i - 1, j + 1].active())
|
|
{
|
|
int type4 = (int) Main.tile[i - 1, j + 1].type;
|
|
}
|
|
if (Main.tile[i + 1, j + 1] != null && Main.tile[i + 1, j + 1].active())
|
|
{
|
|
int type5 = (int) Main.tile[i + 1, j + 1].type;
|
|
}
|
|
if (num4 == 23)
|
|
num4 = 2;
|
|
if (num4 == 477)
|
|
num4 = 2;
|
|
if (num4 == 60)
|
|
num4 = 2;
|
|
if (num4 == 70)
|
|
num4 = 2;
|
|
if (num4 == 109)
|
|
num4 = 2;
|
|
if (num4 == 147)
|
|
num4 = 2;
|
|
if (num4 == 199)
|
|
num4 = 2;
|
|
if (num4 == 492)
|
|
num4 = 2;
|
|
if (num4 != 2 && num4 != type1 && (Main.tile[i, j].frameX == (short) 0 && Main.tile[i, j].frameY <= (short) 130 || Main.tile[i, j].frameX == (short) 22 && Main.tile[i, j].frameY <= (short) 130 || Main.tile[i, j].frameX == (short) 44 && Main.tile[i, j].frameY <= (short) 130))
|
|
WorldGen.KillTile(i, j);
|
|
if (Main.tile[i, j].frameX >= (short) 22 && Main.tile[i, j].frameX <= (short) 44 && Main.tile[i, j].frameY >= (short) 132 && Main.tile[i, j].frameY <= (short) 176)
|
|
{
|
|
if (num4 != 2)
|
|
WorldGen.KillTile(i, j);
|
|
else if ((Main.tile[i, j].frameX != (short) 22 || num2 != type1) && (Main.tile[i, j].frameX != (short) 44 || num3 != type1))
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
else if (Main.tile[i, j].frameX == (short) 88 && Main.tile[i, j].frameY >= (short) 0 && Main.tile[i, j].frameY <= (short) 44 || Main.tile[i, j].frameX == (short) 66 && Main.tile[i, j].frameY >= (short) 66 && Main.tile[i, j].frameY <= (short) 130 || Main.tile[i, j].frameX == (short) 110 && Main.tile[i, j].frameY >= (short) 66 && Main.tile[i, j].frameY <= (short) 110 || Main.tile[i, j].frameX == (short) 132 && Main.tile[i, j].frameY >= (short) 0 && Main.tile[i, j].frameY <= (short) 176)
|
|
{
|
|
if (num2 == type1 && num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 66;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 88;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 110;
|
|
}
|
|
}
|
|
else if (num2 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 66;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 88;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 110;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, j].frameY >= (short) 132 && Main.tile[i, j].frameY <= (short) 176 && (Main.tile[i, j].frameX == (short) 0 || Main.tile[i, j].frameX == (short) 66 || Main.tile[i, j].frameX == (short) 88))
|
|
{
|
|
if (num4 != 2)
|
|
WorldGen.KillTile(i, j);
|
|
if (num2 != type1 && num3 != type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (num2 != type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 132;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 154;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (num3 != type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 132;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 154;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 66;
|
|
Main.tile[i, j].frameY = (short) 176;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 132;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 154;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 88;
|
|
Main.tile[i, j].frameY = (short) 176;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i, j].frameX == (short) 66 && (Main.tile[i, j].frameY == (short) 0 || Main.tile[i, j].frameY == (short) 22 || Main.tile[i, j].frameY == (short) 44) || Main.tile[i, j].frameX == (short) 44 && (Main.tile[i, j].frameY == (short) 198 || Main.tile[i, j].frameY == (short) 220 || Main.tile[i, j].frameY == (short) 242))
|
|
{
|
|
if (num3 != type1)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
else if (Main.tile[i, j].frameX == (short) 88 && (Main.tile[i, j].frameY == (short) 66 || Main.tile[i, j].frameY == (short) 88 || Main.tile[i, j].frameY == (short) 110) || Main.tile[i, j].frameX == (short) 66 && (Main.tile[i, j].frameY == (short) 198 || Main.tile[i, j].frameY == (short) 220 || Main.tile[i, j].frameY == (short) 242))
|
|
{
|
|
if (num2 != type1)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
else if (num4 == -1 || num4 == 23)
|
|
WorldGen.KillTile(i, j);
|
|
else if (num1 != type1 && Main.tile[i, j].frameY < (short) 198 && (Main.tile[i, j].frameX != (short) 22 && Main.tile[i, j].frameX != (short) 44 || Main.tile[i, j].frameY < (short) 132))
|
|
{
|
|
if (num2 == type1 || num3 == type1)
|
|
{
|
|
if (num4 == type1)
|
|
{
|
|
if (num2 == type1 && num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 132;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 154;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (num2 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 66;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 88;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 132;
|
|
Main.tile[i, j].frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
else if (num2 == type1 && num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 132;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 154;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 176;
|
|
}
|
|
}
|
|
else if (num2 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
else if (num3 == type1)
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 66;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 88;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 154;
|
|
Main.tile[i, j].frameY = (short) 110;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].frameNumber() == (byte) 0)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 1)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 22;
|
|
}
|
|
if (Main.tile[i, j].frameNumber() == (byte) 2)
|
|
{
|
|
Main.tile[i, j].frameX = (short) 110;
|
|
Main.tile[i, j].frameY = (short) 44;
|
|
}
|
|
}
|
|
}
|
|
if ((int) Main.tile[i, j].frameX == frameX || (int) Main.tile[i, j].frameY == frameY || frameX < 0 || frameY < 0)
|
|
return;
|
|
WorldGen.TileFrame(i - 1, j);
|
|
WorldGen.TileFrame(i + 1, j);
|
|
WorldGen.TileFrame(i, j - 1);
|
|
WorldGen.TileFrame(i, j + 1);
|
|
}
|
|
|
|
public static void Convert(int i, int j, int conversionType, int size = 4)
|
|
{
|
|
for (int index1 = i - size; index1 <= i + size; ++index1)
|
|
{
|
|
for (int index2 = j - size; index2 <= j + size; ++index2)
|
|
{
|
|
if (WorldGen.InWorld(index1, index2, 1) && Math.Abs(index1 - i) + Math.Abs(index2 - j) < 6)
|
|
{
|
|
int type = (int) Main.tile[index1, index2].type;
|
|
int wall = (int) Main.tile[index1, index2].wall;
|
|
switch (conversionType)
|
|
{
|
|
case 1:
|
|
if (type <= 623 && wall <= 316)
|
|
{
|
|
if (WallID.Sets.Conversion.Grass[wall] && wall != 69)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 69;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall != 3)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 3;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.HardenedSand[wall] && wall != 217)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 217;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Sandstone[wall] && wall != 220)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 220;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall1[wall] && wall != 188)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 188;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall2[wall] && wall != 189)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 189;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall3[wall] && wall != 190)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 190;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall4[wall] && wall != 191)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 191;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if ((Main.tileMoss[type] || TileID.Sets.Conversion.Stone[type]) && type != 25)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 25;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Grass[type] && type != 23)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 23;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Ice[type] && type != 163)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 163;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sand[type] && type != 112)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 112;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.HardenedSand[type] && type != 398)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 398;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sandstone[type] && type != 400)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 400;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Thorn[type] && type != 32)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 32;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if (type == 59 && (Main.tile[index1 - 1, index2].type == (ushort) 23 || Main.tile[index1 + 1, index2].type == (ushort) 23 || Main.tile[index1, index2 - 1].type == (ushort) 23 || Main.tile[index1, index2 + 1].type == (ushort) 23))
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 2:
|
|
if (type <= 623 && wall <= 316)
|
|
{
|
|
if (WallID.Sets.Conversion.Grass[wall] && wall != 70)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 70;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall != 28)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 28;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.HardenedSand[wall] && wall != 219)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 219;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Sandstone[wall] && wall != 222)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 222;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall1[wall] && wall != 200)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 200;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall2[wall] && wall != 201)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 201;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall3[wall] && wall != 202)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 202;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall4[wall] && wall != 203)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 203;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if ((Main.tileMoss[type] || TileID.Sets.Conversion.Stone[type]) && type != 117)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 117;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.GolfGrass[type] && type != 492)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 492;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Grass[type] && type != 109 && type != 492)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 109;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Ice[type] && type != 164)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 164;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sand[type] && type != 116)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 116;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.HardenedSand[type] && type != 402)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 402;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sandstone[type] && type != 403)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 403;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Thorn[type])
|
|
{
|
|
WorldGen.KillTile(index1, index2);
|
|
if (Main.netMode == 1)
|
|
NetMessage.SendData(17, number2: ((float) index1), number3: ((float) index2));
|
|
}
|
|
if (type == 59 && (Main.tile[index1 - 1, index2].type == (ushort) 109 || Main.tile[index1 + 1, index2].type == (ushort) 109 || Main.tile[index1, index2 - 1].type == (ushort) 109 || Main.tile[index1, index2 + 1].type == (ushort) 109))
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 3:
|
|
if (WallID.Sets.CanBeConvertedToGlowingMushroom[wall])
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 80;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
}
|
|
if (Main.tile[index1, index2].type == (ushort) 60)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 70;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.Thorn[type])
|
|
{
|
|
WorldGen.KillTile(index1, index2);
|
|
if (Main.netMode == 1)
|
|
{
|
|
NetMessage.SendData(17, number2: ((float) index1), number3: ((float) index2));
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
case 4:
|
|
if (type <= 623 && wall <= 316)
|
|
{
|
|
if (WallID.Sets.Conversion.Grass[wall] && wall != 81)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 81;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall != 83)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.HardenedSand[wall] && wall != 218)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 218;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Sandstone[wall] && wall != 221)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 221;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall1[wall] && wall != 192)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 192;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall2[wall] && wall != 193)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 193;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall3[wall] && wall != 194)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 194;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall4[wall] && wall != 195)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 195;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if ((Main.tileMoss[type] || TileID.Sets.Conversion.Stone[type]) && type != 203)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 203;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Grass[type] && type != 199)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 199;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Ice[type] && type != 200)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 200;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sand[type] && type != 234)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 234;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.HardenedSand[type] && type != 399)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 399;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sandstone[type] && type != 401)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 401;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (TileID.Sets.Conversion.Thorn[type] && type != 352)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 352;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if (type == 59 && (Main.tile[index1 - 1, index2].type == (ushort) 199 || Main.tile[index1 + 1, index2].type == (ushort) 199 || Main.tile[index1, index2 - 1].type == (ushort) 199 || Main.tile[index1, index2 + 1].type == (ushort) 199))
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
default:
|
|
if (Main.tile[index1, index2].wall == (ushort) 69 || Main.tile[index1, index2].wall == (ushort) 70 || Main.tile[index1, index2].wall == (ushort) 81)
|
|
{
|
|
Main.tile[index1, index2].wall = (double) index2 >= Main.worldSurface ? (ushort) 64 : (WorldGen.genRand.Next(10) != 0 ? (ushort) 63 : (ushort) 65);
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall != 1 && wall != 262 && wall != 274 && wall != 61 && wall != 185)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 1;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall == 262)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 61;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Stone[wall] && wall == 274)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 185;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if (WallID.Sets.Conversion.NewWall1[wall] && wall != 212)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 212;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall2[wall] && wall != 213)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 213;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall3[wall] && wall != 214)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 214;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.NewWall4[wall] && wall != 215)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 215;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (Main.tile[index1, index2].wall == (ushort) 80)
|
|
{
|
|
if ((double) index2 < Main.worldSurface + 4.0 + (double) WorldGen.genRand.Next(3) || (double) index2 > ((double) Main.maxTilesY + Main.rockLayer) / 2.0 - 3.0 + (double) WorldGen.genRand.Next(3))
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 15;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 64;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
}
|
|
}
|
|
else if (WallID.Sets.Conversion.HardenedSand[wall] && wall != 216)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 216;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
else if (WallID.Sets.Conversion.Sandstone[wall] && wall != 187)
|
|
{
|
|
Main.tile[index1, index2].wall = (ushort) 187;
|
|
WorldGen.SquareWallFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
}
|
|
if (Main.tile[index1, index2].type == (ushort) 492)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 477;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (type != 60 && TileID.Sets.Conversion.Grass[type] && type != 2 && type != 477)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 2;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.Stone[type] && type != 1)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 1;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.Sand[type] && type != 53)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 53;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.HardenedSand[type] && type != 397)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 397;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.Sandstone[type] && type != 396)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 396;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (TileID.Sets.Conversion.Ice[type] && type != 161)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 161;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (Main.tile[index1, index2].type == (ushort) 70)
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 60;
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
NetMessage.SendTileSquare(-1, index1, index2, 1);
|
|
continue;
|
|
}
|
|
if (Main.tile[index1, index2].type == (ushort) 32 || Main.tile[index1, index2].type == (ushort) 352)
|
|
{
|
|
WorldGen.KillTile(index1, index2);
|
|
if (Main.netMode == 1)
|
|
{
|
|
NetMessage.SendData(17, number2: ((float) index1), number3: ((float) index2));
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void CactusFrame(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
int index1 = j;
|
|
int index2 = i;
|
|
if (WorldGen.CheckCactus(i, j))
|
|
return;
|
|
while (Main.tile[index2, index1].active() && Main.tile[index2, index1].type == (ushort) 80)
|
|
{
|
|
++index1;
|
|
if (Main.tile[index2, index1] == null)
|
|
return;
|
|
if (!Main.tile[index2, index1].active() || Main.tile[index2, index1].type != (ushort) 80)
|
|
{
|
|
if (Main.tile[index2 - 1, index1] != null && Main.tile[index2 - 1, index1].active() && Main.tile[index2 - 1, index1].type == (ushort) 80 && Main.tile[index2 - 1, index1 - 1].active() && Main.tile[index2 - 1, index1 - 1].type == (ushort) 80 && index2 >= i)
|
|
--index2;
|
|
if (Main.tile[index2 + 1, index1] != null && Main.tile[index2 + 1, index1].active() && Main.tile[index2 + 1, index1].type == (ushort) 80 && Main.tile[index2 + 1, index1 - 1].active() && Main.tile[index2 + 1, index1 - 1].type == (ushort) 80 && index2 <= i)
|
|
++index2;
|
|
}
|
|
}
|
|
int num1 = index1 - 1;
|
|
int num2 = i - index2;
|
|
num1 = j;
|
|
if (Main.tile[i - 2, j] == null)
|
|
return;
|
|
int type = (int) Main.tile[i - 2, j].type;
|
|
if (Main.tile[i - 1, j] == null)
|
|
return;
|
|
int num3 = (int) Main.tile[i - 1, j].type;
|
|
if (Main.tile[i + 1, j] == null)
|
|
return;
|
|
int num4 = (int) Main.tile[i + 1, j].type;
|
|
if (Main.tile[i, j - 1] == null)
|
|
return;
|
|
int num5 = (int) Main.tile[i, j - 1].type;
|
|
if (num5 == 227)
|
|
num5 = 80;
|
|
int index3 = (int) Main.tile[i, j + 1].type;
|
|
int num6 = (int) Main.tile[i - 1, j + 1].type;
|
|
int num7 = (int) Main.tile[i + 1, j + 1].type;
|
|
if (!Main.tile[i - 1, j].active())
|
|
num3 = -1;
|
|
if (!Main.tile[i + 1, j].active())
|
|
num4 = -1;
|
|
if (!Main.tile[i, j - 1].active())
|
|
num5 = -1;
|
|
if (!Main.tile[i, j + 1].active())
|
|
index3 = -1;
|
|
if (!Main.tile[i - 1, j + 1].active())
|
|
num6 = -1;
|
|
if (!Main.tile[i + 1, j + 1].active())
|
|
num7 = -1;
|
|
short num8 = Main.tile[i, j].frameX;
|
|
short num9 = Main.tile[i, j].frameY;
|
|
switch (num2)
|
|
{
|
|
case -1:
|
|
if (num4 == 80)
|
|
{
|
|
if (num5 != 80 && index3 != 80)
|
|
{
|
|
num8 = (short) 108;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (index3 != 80)
|
|
{
|
|
num8 = (short) 54;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (num5 != 80)
|
|
{
|
|
num8 = (short) 54;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
num8 = (short) 54;
|
|
num9 = (short) 18;
|
|
break;
|
|
}
|
|
if (num5 != 80)
|
|
{
|
|
num8 = (short) 54;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
num8 = (short) 54;
|
|
num9 = (short) 18;
|
|
break;
|
|
case 0:
|
|
if (num5 != 80)
|
|
{
|
|
if (num3 == 80 && num4 == 80 && num6 != 80 && num7 != 80 && type != 80)
|
|
{
|
|
num8 = (short) 90;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
if (num3 == 80 && num6 != 80 && type != 80)
|
|
{
|
|
num8 = (short) 72;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
if (num4 == 80 && num7 != 80)
|
|
{
|
|
num8 = (short) 18;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
num8 = (short) 0;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
if (num3 == 80 && num4 == 80 && num6 != 80 && num7 != 80 && type != 80)
|
|
{
|
|
num8 = (short) 90;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (num3 == 80 && num6 != 80 && type != 80)
|
|
{
|
|
num8 = (short) 72;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (num4 == 80 && num7 != 80)
|
|
{
|
|
num8 = (short) 18;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (index3 >= 0 && Main.tileSolid[index3])
|
|
{
|
|
num8 = (short) 0;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
num8 = (short) 0;
|
|
num9 = (short) 18;
|
|
break;
|
|
case 1:
|
|
if (num3 == 80)
|
|
{
|
|
if (num5 != 80 && index3 != 80)
|
|
{
|
|
num8 = (short) 108;
|
|
num9 = (short) 18;
|
|
break;
|
|
}
|
|
if (index3 != 80)
|
|
{
|
|
num8 = (short) 36;
|
|
num9 = (short) 36;
|
|
break;
|
|
}
|
|
if (num5 != 80)
|
|
{
|
|
num8 = (short) 36;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
num8 = (short) 36;
|
|
num9 = (short) 18;
|
|
break;
|
|
}
|
|
if (num5 != 80)
|
|
{
|
|
num8 = (short) 36;
|
|
num9 = (short) 0;
|
|
break;
|
|
}
|
|
num8 = (short) 36;
|
|
num9 = (short) 18;
|
|
break;
|
|
}
|
|
if ((int) num8 == (int) Main.tile[i, j].frameX && (int) num9 == (int) Main.tile[i, j].frameY)
|
|
return;
|
|
Main.tile[i, j].frameX = num8;
|
|
Main.tile[i, j].frameY = num9;
|
|
WorldGen.DiamondTileFrame(i, j);
|
|
}
|
|
catch
|
|
{
|
|
Main.tile[i, j].frameX = (short) 0;
|
|
Main.tile[i, j].frameY = (short) 0;
|
|
}
|
|
}
|
|
|
|
public static void GrowCactus(int i, int j)
|
|
{
|
|
int index1 = j;
|
|
int i1 = i;
|
|
if (!Main.tile[i, j].nactive() || Main.tile[i, j].halfBrick() || !WorldGen.gen && Main.tile[i, j].slope() != (byte) 0 || Main.tile[i, j - 1].liquid > (byte) 0 || Main.tile[i, j].type != (ushort) 53 && Main.tile[i, j].type != (ushort) 80 && Main.tile[i, j].type != (ushort) 234 && Main.tile[i, j].type != (ushort) 112 && Main.tile[i, j].type != (ushort) 116)
|
|
return;
|
|
int num1 = 0;
|
|
for (int index2 = i - WorldGen.cactusWaterWidth; index2 < i + WorldGen.cactusWaterWidth; ++index2)
|
|
{
|
|
for (int index3 = j - WorldGen.cactusWaterHeight; index3 < j + WorldGen.cactusWaterHeight; ++index3)
|
|
num1 += (int) Main.tile[index2, index3].liquid;
|
|
}
|
|
if (num1 / (int) byte.MaxValue > WorldGen.cactusWaterLimit)
|
|
return;
|
|
if (Main.tile[i, j].type == (ushort) 53 || Main.tile[i, j].type == (ushort) 112 || Main.tile[i, j].type == (ushort) 116 || Main.tile[i, j].type == (ushort) 234)
|
|
{
|
|
if (Main.tile[i, j - 1].active() || Main.tile[i - 1, j - 1].active() || Main.tile[i + 1, j - 1].active())
|
|
return;
|
|
int num2 = 0;
|
|
int num3 = 0;
|
|
for (int index4 = i - 6; index4 <= i + 6; ++index4)
|
|
{
|
|
for (int index5 = j - 3; index5 <= j + 1; ++index5)
|
|
{
|
|
try
|
|
{
|
|
if (Main.tile[index4, index5].active())
|
|
{
|
|
if (Main.tile[index4, index5].type == (ushort) 80)
|
|
{
|
|
++num2;
|
|
if (num2 >= 4)
|
|
return;
|
|
}
|
|
if (Main.tile[index4, index5].type != (ushort) 53 && Main.tile[index4, index5].type != (ushort) 112 && Main.tile[index4, index5].type != (ushort) 116)
|
|
{
|
|
if (Main.tile[index4, index5].type != (ushort) 234)
|
|
continue;
|
|
}
|
|
++num3;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
if (num3 <= 10)
|
|
return;
|
|
if (WorldGen.gen && WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[i, j].slope((byte) 0);
|
|
Main.tile[i, j - 1].active(true);
|
|
Main.tile[i, j - 1].type = (ushort) 80;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j - 1, 1);
|
|
WorldGen.SquareTileFrame(i1, index1 - 1);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 80)
|
|
return;
|
|
while (Main.tile[i1, index1].active() && Main.tile[i1, index1].type == (ushort) 80)
|
|
{
|
|
++index1;
|
|
if (!Main.tile[i1, index1].active() || Main.tile[i1, index1].type != (ushort) 80)
|
|
{
|
|
if (Main.tile[i1 - 1, index1].active() && Main.tile[i1 - 1, index1].type == (ushort) 80 && Main.tile[i1 - 1, index1 - 1].active() && Main.tile[i1 - 1, index1 - 1].type == (ushort) 80 && i1 >= i)
|
|
--i1;
|
|
if (Main.tile[i1 + 1, index1].active() && Main.tile[i1 + 1, index1].type == (ushort) 80 && Main.tile[i1 + 1, index1 - 1].active() && Main.tile[i1 + 1, index1 - 1].type == (ushort) 80 && i1 <= i)
|
|
++i1;
|
|
}
|
|
}
|
|
int num4 = index1 - 1 - j;
|
|
int num5 = i - i1;
|
|
int num6 = i - num5;
|
|
int num7 = j;
|
|
int num8 = 11 - num4;
|
|
int num9 = 0;
|
|
for (int index6 = num6 - 2; index6 <= num6 + 2; ++index6)
|
|
{
|
|
for (int index7 = num7 - num8; index7 <= num7 + num4; ++index7)
|
|
{
|
|
if (Main.tile[index6, index7].active() && Main.tile[index6, index7].type == (ushort) 80)
|
|
++num9;
|
|
}
|
|
}
|
|
if (Main.drunkWorld)
|
|
{
|
|
if (num9 >= WorldGen.genRand.Next(11, 20))
|
|
return;
|
|
}
|
|
else if (num9 >= WorldGen.genRand.Next(11, 13))
|
|
return;
|
|
int index8 = i;
|
|
int index9 = j;
|
|
if (num5 == 0)
|
|
{
|
|
if (num4 == 0)
|
|
{
|
|
if (Main.tile[index8, index9 - 1].active())
|
|
return;
|
|
Main.tile[index8, index9 - 1].active(true);
|
|
Main.tile[index8, index9 - 1].type = (ushort) 80;
|
|
WorldGen.SquareTileFrame(index8, index9 - 1);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index8, index9 - 1, 1);
|
|
}
|
|
else
|
|
{
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
if (Main.tile[index8, index9 - 1].active() && Main.tile[index8, index9 - 1].type == (ushort) 80)
|
|
{
|
|
if (!Main.tile[index8 - 1, index9].active() && !Main.tile[index8 - 2, index9 + 1].active() && !Main.tile[index8 - 1, index9 - 1].active() && !Main.tile[index8 - 1, index9 + 1].active() && !Main.tile[index8 - 2, index9].active())
|
|
flag1 = true;
|
|
if (!Main.tile[index8 + 1, index9].active() && !Main.tile[index8 + 2, index9 + 1].active() && !Main.tile[index8 + 1, index9 - 1].active() && !Main.tile[index8 + 1, index9 + 1].active() && !Main.tile[index8 + 2, index9].active())
|
|
flag2 = true;
|
|
}
|
|
int num10 = WorldGen.genRand.Next(3);
|
|
if (num10 == 0 & flag1)
|
|
{
|
|
Main.tile[index8 - 1, index9].active(true);
|
|
Main.tile[index8 - 1, index9].type = (ushort) 80;
|
|
WorldGen.SquareTileFrame(index8 - 1, index9);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index8 - 1, index9, 1);
|
|
}
|
|
else if (num10 == 1 & flag2)
|
|
{
|
|
Main.tile[index8 + 1, index9].active(true);
|
|
Main.tile[index8 + 1, index9].type = (ushort) 80;
|
|
WorldGen.SquareTileFrame(index8 + 1, index9);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index8 + 1, index9, 1);
|
|
}
|
|
else
|
|
{
|
|
if (num4 >= WorldGen.genRand.Next(2, 8))
|
|
return;
|
|
if (Main.tile[index8 - 1, index9 - 1].active())
|
|
{
|
|
int type = (int) Main.tile[index8 - 1, index9 - 1].type;
|
|
}
|
|
if (Main.tile[index8 + 1, index9 - 1].active() && Main.tile[index8 + 1, index9 - 1].type == (ushort) 80 || Main.tile[index8, index9 - 1].active())
|
|
return;
|
|
Main.tile[index8, index9 - 1].active(true);
|
|
Main.tile[index8, index9 - 1].type = (ushort) 80;
|
|
WorldGen.SquareTileFrame(index8, index9 - 1);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index8, index9 - 1, 1);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[index8, index9 - 1].active() || Main.tile[index8, index9 - 2].active() || Main.tile[index8 + num5, index9 - 1].active() || !Main.tile[index8 - num5, index9 - 1].active() || Main.tile[index8 - num5, index9 - 1].type != (ushort) 80)
|
|
return;
|
|
Main.tile[index8, index9 - 1].active(true);
|
|
Main.tile[index8, index9 - 1].type = (ushort) 80;
|
|
WorldGen.SquareTileFrame(index8, index9 - 1);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index8, index9 - 1, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void CheckPot(int i, int j, int type = 28)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag1 = false;
|
|
int num1 = 0;
|
|
int num2 = j;
|
|
int num3 = num1 + (int) Main.tile[i, j].frameX / 18;
|
|
while (num3 > 1)
|
|
num3 -= 2;
|
|
int num4 = num3 * -1 + i;
|
|
int num5 = (int) Main.tile[i, j].frameY / 18;
|
|
int num6 = 0;
|
|
while (num5 > 1)
|
|
{
|
|
num5 -= 2;
|
|
++num6;
|
|
}
|
|
int num7 = num2 - num5;
|
|
for (int i1 = num4; i1 < num4 + 2; ++i1)
|
|
{
|
|
for (int index = num7; index < num7 + 2; ++index)
|
|
{
|
|
if (Main.tile[i1, index] == null)
|
|
Main.tile[i1, index] = new Tile();
|
|
int num8 = (int) Main.tile[i1, index].frameX / 18;
|
|
while (num8 > 1)
|
|
num8 -= 2;
|
|
if (!Main.tile[i1, index].active() || (int) Main.tile[i1, index].type != type || num8 != i1 - num4 || (int) Main.tile[i1, index].frameY != (index - num7) * 18 + num6 * 36)
|
|
flag1 = true;
|
|
}
|
|
if (Main.tile[i1, num7 + 2] == null)
|
|
Main.tile[i1, num7 + 2] = new Tile();
|
|
if (!WorldGen.SolidTile2(i1, num7 + 2))
|
|
flag1 = true;
|
|
}
|
|
if (!flag1)
|
|
return;
|
|
WorldGen.destroyObject = true;
|
|
if (num6 >= 7 && num6 <= 9)
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
else if (num6 >= 16 && num6 <= 24)
|
|
SoundEngine.PlaySound(4, i * 16, j * 16);
|
|
else
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
for (int i2 = num4; i2 < num4 + 2; ++i2)
|
|
{
|
|
for (int j1 = num7; j1 < num7 + 2; ++j1)
|
|
{
|
|
if ((int) Main.tile[i2, j1].type == type && Main.tile[i2, j1].active())
|
|
WorldGen.KillTile(i2, j1);
|
|
}
|
|
}
|
|
float num9 = 1f;
|
|
bool flag2 = false;
|
|
switch (num6)
|
|
{
|
|
case 0:
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 51);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 52);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 53);
|
|
break;
|
|
case 1:
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 166);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 167);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 168);
|
|
break;
|
|
case 2:
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 169);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 170);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 171);
|
|
break;
|
|
case 3:
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 172);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 173);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 174);
|
|
break;
|
|
default:
|
|
if (num6 >= 4 && num6 <= 6)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 197);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 198);
|
|
num9 = 1.25f;
|
|
break;
|
|
}
|
|
if (num6 >= 7 && num6 <= 9)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 199);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 200);
|
|
num9 = 1.75f;
|
|
break;
|
|
}
|
|
if (num6 >= 10 && num6 <= 12)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 201);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 202);
|
|
num9 = 1.9f;
|
|
break;
|
|
}
|
|
if (num6 >= 13 && num6 <= 15)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 203);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 204);
|
|
num9 = 2.1f;
|
|
break;
|
|
}
|
|
if (num6 >= 16 && num6 <= 18)
|
|
{
|
|
num9 = 1.6f;
|
|
break;
|
|
}
|
|
if (num6 >= 19 && num6 <= 21)
|
|
{
|
|
num9 = 3.5f;
|
|
break;
|
|
}
|
|
if (num6 >= 22 && num6 <= 24)
|
|
{
|
|
num9 = 1.6f;
|
|
break;
|
|
}
|
|
if (num6 >= 25 && num6 <= 27)
|
|
{
|
|
num9 = 10f;
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), WorldGen.genRand.Next(217, 220));
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), WorldGen.genRand.Next(217, 220));
|
|
break;
|
|
}
|
|
if (num6 >= 28 && num6 <= 30)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), WorldGen.genRand.Next(315, 317));
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), WorldGen.genRand.Next(315, 317));
|
|
if (Main.hardMode)
|
|
{
|
|
num9 = 4f;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (num6 >= 31 && num6 <= 33)
|
|
{
|
|
int num10 = WorldGen.genRand.Next(2, 5);
|
|
for (int index = 0; index < num10; ++index)
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 698 + WorldGen.genRand.Next(6));
|
|
num9 = 2f;
|
|
break;
|
|
}
|
|
if (num6 >= 34 && num6 <= 36)
|
|
{
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 1122);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 1123);
|
|
Gore.NewGore(new Vector2((float) (i * 16), (float) (j * 16)), new Vector2(), 1124);
|
|
num9 = 1.25f;
|
|
flag2 = true;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
float num11 = (float) (((double) num9 * 2.0 + 1.0) / 3.0);
|
|
int range = (int) (500.0 / (((double) num11 + 1.0) / 2.0));
|
|
if (!WorldGen.gen)
|
|
{
|
|
if ((double) Player.GetClosestRollLuck(i, j, range) == 0.0)
|
|
{
|
|
if (Main.netMode != 1)
|
|
Projectile.NewProjectile((float) (i * 16 + 16), (float) (j * 16 + 16), 0.0f, -12f, 518, 0, 0.0f, Main.myPlayer);
|
|
}
|
|
else if (WorldGen.genRand.Next(35) == 0 && Main.wallDungeon[(int) Main.tile[i, j].wall] && (double) j > Main.worldSurface)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 327);
|
|
else if (Main.getGoodWorld && WorldGen.genRand.Next(4) == 0)
|
|
Projectile.NewProjectile((float) (i * 16 + 16), (float) (j * 16 + 8), (float) Main.rand.Next(-100, 101) * (1f / 500f), 0.0f, 28, 0, 0.0f, (int) Player.FindClosest(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16));
|
|
else if (WorldGen.genRand.Next(45) == 0 || Main.rand.Next(45) == 0 && Main.expertMode)
|
|
{
|
|
if ((double) j < Main.worldSurface)
|
|
{
|
|
int num12 = WorldGen.genRand.Next(10);
|
|
if (num12 == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 292);
|
|
if (num12 == 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 298);
|
|
if (num12 == 2)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 299);
|
|
if (num12 == 3)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 290);
|
|
if (num12 == 4)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2322);
|
|
if (num12 == 5)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2324);
|
|
if (num12 == 6)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2325);
|
|
if (num12 >= 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2350, WorldGen.genRand.Next(1, 3));
|
|
}
|
|
else if ((double) j < Main.rockLayer)
|
|
{
|
|
int num13 = WorldGen.genRand.Next(11);
|
|
if (num13 == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 289);
|
|
if (num13 == 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 298);
|
|
if (num13 == 2)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 299);
|
|
if (num13 == 3)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 290);
|
|
if (num13 == 4)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 303);
|
|
if (num13 == 5)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 291);
|
|
if (num13 == 6)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 304);
|
|
if (num13 == 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2322);
|
|
if (num13 == 8)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2329);
|
|
if (num13 >= 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2350, WorldGen.genRand.Next(1, 3));
|
|
}
|
|
else if (j < Main.UnderworldLayer)
|
|
{
|
|
int num14 = WorldGen.genRand.Next(15);
|
|
if (num14 == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 296);
|
|
if (num14 == 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 295);
|
|
if (num14 == 2)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 299);
|
|
if (num14 == 3)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 302);
|
|
if (num14 == 4)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 303);
|
|
if (num14 == 5)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 305);
|
|
if (num14 == 6)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 301);
|
|
if (num14 == 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 302);
|
|
if (num14 == 8)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 297);
|
|
if (num14 == 9)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 304);
|
|
if (num14 == 10)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2322);
|
|
if (num14 == 11)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2323);
|
|
if (num14 == 12)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2327);
|
|
if (num14 == 13)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2329);
|
|
if (num14 >= 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2350, WorldGen.genRand.Next(1, 3));
|
|
}
|
|
else
|
|
{
|
|
int num15 = WorldGen.genRand.Next(14);
|
|
if (num15 == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 296);
|
|
if (num15 == 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 295);
|
|
if (num15 == 2)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 293);
|
|
if (num15 == 3)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 288);
|
|
if (num15 == 4)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 294);
|
|
if (num15 == 5)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 297);
|
|
if (num15 == 6)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 304);
|
|
if (num15 == 7)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 305);
|
|
if (num15 == 8)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 301);
|
|
if (num15 == 9)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 302);
|
|
if (num15 == 10)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 288);
|
|
if (num15 == 11)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 300);
|
|
if (num15 == 12)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2323);
|
|
if (num15 == 13)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2326);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 4870);
|
|
}
|
|
}
|
|
else if (Main.netMode == 2 && Main.rand.Next(30) == 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 2997);
|
|
}
|
|
else
|
|
{
|
|
int num16 = Main.rand.Next(7);
|
|
if (Main.expertMode)
|
|
--num16;
|
|
Player player = Main.player[(int) Player.FindClosest(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16)];
|
|
if (num16 == 0 && player.statLife < player.statLifeMax2)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 58);
|
|
if (Main.rand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 58);
|
|
if (Main.expertMode)
|
|
{
|
|
if (Main.rand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 58);
|
|
if (Main.rand.Next(2) == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 58);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (num16)
|
|
{
|
|
case 1:
|
|
int Stack1 = Main.rand.Next(2, 7);
|
|
if (Main.expertMode)
|
|
Stack1 += Main.rand.Next(1, 7);
|
|
int Type1 = 8;
|
|
int Type2 = 282;
|
|
if (player.ZoneHallow)
|
|
{
|
|
Stack1 += Main.rand.Next(2, 7);
|
|
Type1 = 4387;
|
|
}
|
|
else if (num6 >= 22 && num6 <= 24 || player.ZoneCrimson)
|
|
{
|
|
Stack1 += Main.rand.Next(2, 7);
|
|
Type1 = 4386;
|
|
}
|
|
else if (num6 >= 16 && num6 <= 18 || player.ZoneCorrupt)
|
|
{
|
|
Stack1 += Main.rand.Next(2, 7);
|
|
Type1 = 4385;
|
|
}
|
|
else if (num6 >= 7 && num6 <= 9)
|
|
{
|
|
Stack1 += Main.rand.Next(2, 7);
|
|
Type1 = 4388;
|
|
}
|
|
else if (num6 >= 4 && num6 <= 6)
|
|
{
|
|
Type1 = 974;
|
|
Type2 = 286;
|
|
}
|
|
else if (num6 >= 34 && num6 <= 36)
|
|
{
|
|
Stack1 += Main.rand.Next(2, 7);
|
|
Type1 = 4383;
|
|
}
|
|
if (Main.tile[i, j].liquid > (byte) 0)
|
|
{
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Type2, Stack1);
|
|
break;
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Type1, Stack1);
|
|
break;
|
|
case 2:
|
|
int Stack2 = Main.rand.Next(10, 21);
|
|
int Type3 = 40;
|
|
if ((double) j < Main.rockLayer && WorldGen.genRand.Next(2) == 0)
|
|
Type3 = !Main.hardMode ? 42 : 168;
|
|
if (j > Main.UnderworldLayer)
|
|
Type3 = 265;
|
|
else if (Main.hardMode)
|
|
Type3 = Main.rand.Next(2) != 0 ? 47 : (WorldGen.SavedOreTiers.Silver != 168 ? 278 : 4915);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Type3, Stack2);
|
|
break;
|
|
case 3:
|
|
int Type4 = 28;
|
|
if (j > Main.UnderworldLayer || Main.hardMode)
|
|
Type4 = 188;
|
|
int Stack3 = 1;
|
|
if (Main.expertMode && Main.rand.Next(3) != 0)
|
|
++Stack3;
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Type4, Stack3);
|
|
break;
|
|
default:
|
|
if (num16 == 4 && (flag2 || (double) j > Main.rockLayer))
|
|
{
|
|
int Type5 = 166;
|
|
if (flag2)
|
|
Type5 = 4423;
|
|
int Stack4 = Main.rand.Next(4) + 1;
|
|
if (Main.expertMode)
|
|
Stack4 += Main.rand.Next(4);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Type5, Stack4);
|
|
break;
|
|
}
|
|
if ((num16 == 4 || num16 == 5) && j < Main.UnderworldLayer && !Main.hardMode)
|
|
{
|
|
int Stack5 = Main.rand.Next(20, 41);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 965, Stack5);
|
|
break;
|
|
}
|
|
float num17 = (float) (200 + WorldGen.genRand.Next(-100, 101));
|
|
if ((double) j < Main.worldSurface)
|
|
num17 *= 0.5f;
|
|
else if ((double) j < Main.rockLayer)
|
|
num17 *= 0.75f;
|
|
else if (j > Main.maxTilesY - 250)
|
|
num17 *= 1.25f;
|
|
float num18 = num17 * (float) (1.0 + (double) Main.rand.Next(-20, 21) * 0.00999999977648258);
|
|
if (Main.rand.Next(4) == 0)
|
|
num18 *= (float) (1.0 + (double) Main.rand.Next(5, 11) * 0.00999999977648258);
|
|
if (Main.rand.Next(8) == 0)
|
|
num18 *= (float) (1.0 + (double) Main.rand.Next(10, 21) * 0.00999999977648258);
|
|
if (Main.rand.Next(12) == 0)
|
|
num18 *= (float) (1.0 + (double) Main.rand.Next(20, 41) * 0.00999999977648258);
|
|
if (Main.rand.Next(16) == 0)
|
|
num18 *= (float) (1.0 + (double) Main.rand.Next(40, 81) * 0.00999999977648258);
|
|
if (Main.rand.Next(20) == 0)
|
|
num18 *= (float) (1.0 + (double) Main.rand.Next(50, 101) * 0.00999999977648258);
|
|
if (Main.expertMode)
|
|
num18 *= 2.5f;
|
|
if (Main.expertMode && Main.rand.Next(2) == 0)
|
|
num18 *= 1.25f;
|
|
if (Main.expertMode && Main.rand.Next(3) == 0)
|
|
num18 *= 1.5f;
|
|
if (Main.expertMode && Main.rand.Next(4) == 0)
|
|
num18 *= 1.75f;
|
|
float num19 = num18 * num11;
|
|
if (NPC.downedBoss1)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedBoss2)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedBoss3)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedMechBoss1)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedMechBoss2)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedMechBoss3)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedPlantBoss)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedQueenBee)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedGolemBoss)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedPirates)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedGoblins)
|
|
num19 *= 1.1f;
|
|
if (NPC.downedFrost)
|
|
num19 *= 1.1f;
|
|
while ((int) num19 > 0)
|
|
{
|
|
if ((double) num19 > 1000000.0)
|
|
{
|
|
int Stack6 = (int) ((double) num19 / 1000000.0);
|
|
if (Stack6 > 50 && Main.rand.Next(2) == 0)
|
|
Stack6 /= Main.rand.Next(3) + 1;
|
|
if (Main.rand.Next(2) == 0)
|
|
Stack6 /= Main.rand.Next(3) + 1;
|
|
num19 -= (float) (1000000 * Stack6);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 74, Stack6);
|
|
}
|
|
else if ((double) num19 > 10000.0)
|
|
{
|
|
int Stack7 = (int) ((double) num19 / 10000.0);
|
|
if (Stack7 > 50 && Main.rand.Next(2) == 0)
|
|
Stack7 /= Main.rand.Next(3) + 1;
|
|
if (Main.rand.Next(2) == 0)
|
|
Stack7 /= Main.rand.Next(3) + 1;
|
|
num19 -= (float) (10000 * Stack7);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 73, Stack7);
|
|
}
|
|
else if ((double) num19 > 100.0)
|
|
{
|
|
int Stack8 = (int) ((double) num19 / 100.0);
|
|
if (Stack8 > 50 && Main.rand.Next(2) == 0)
|
|
Stack8 /= Main.rand.Next(3) + 1;
|
|
if (Main.rand.Next(2) == 0)
|
|
Stack8 /= Main.rand.Next(3) + 1;
|
|
num19 -= (float) (100 * Stack8);
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 72, Stack8);
|
|
}
|
|
else
|
|
{
|
|
int Stack9 = (int) num19;
|
|
if (Stack9 > 50 && Main.rand.Next(2) == 0)
|
|
Stack9 /= Main.rand.Next(3) + 1;
|
|
if (Main.rand.Next(2) == 0)
|
|
Stack9 /= Main.rand.Next(4) + 1;
|
|
if (Stack9 < 1)
|
|
Stack9 = 1;
|
|
num19 -= (float) Stack9;
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 71, Stack9);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static int PlaceChest(int x, int y, ushort type = 21, bool notNearOtherChests = false, int style = 0)
|
|
{
|
|
int num = -1;
|
|
if (TileID.Sets.Boulders[(int) Main.tile[x, y + 1].type] || TileID.Sets.Boulders[(int) Main.tile[x + 1, y + 1].type])
|
|
return -1;
|
|
TileObject objectData;
|
|
if (TileObject.CanPlace(x, y, (int) type, style, 1, out objectData))
|
|
{
|
|
bool flag = true;
|
|
if (notNearOtherChests && Chest.NearOtherChests(x - 1, y - 1))
|
|
flag = false;
|
|
if (flag)
|
|
{
|
|
TileObject.Place(objectData);
|
|
num = Chest.CreateChest(objectData.xCoord, objectData.yCoord);
|
|
}
|
|
}
|
|
else
|
|
num = -1;
|
|
if (num != -1 && Main.netMode == 1 && type == (ushort) 21)
|
|
NetMessage.SendData(34, number2: ((float) x), number3: ((float) y), number4: ((float) style));
|
|
if (num != -1 && Main.netMode == 1 && type == (ushort) 467)
|
|
NetMessage.SendData(34, number: 4, number2: ((float) x), number3: ((float) y), number4: ((float) style));
|
|
return num;
|
|
}
|
|
|
|
public static void PlaceChestDirect(int x, int y, ushort type, int style, int id)
|
|
{
|
|
Chest.CreateChest(x, y - 1, id);
|
|
for (int index1 = 0; index1 <= 1; ++index1)
|
|
{
|
|
for (int index2 = -1; index2 <= 0; ++index2)
|
|
{
|
|
if (Main.tile[x + index1, y + index2] == null)
|
|
Main.tile[x + index1, y + index2] = new Tile();
|
|
}
|
|
}
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = (short) 0;
|
|
Main.tile[x, y - 1].frameX = (short) (36 * style);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x, y - 1].halfBrick(false);
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x + 1, y - 1].frameX = (short) (18 + 36 * style);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].halfBrick(false);
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 18;
|
|
Main.tile[x, y].frameX = (short) (36 * style);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x, y].halfBrick(false);
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 18;
|
|
Main.tile[x + 1, y].frameX = (short) (18 + 36 * style);
|
|
Main.tile[x + 1, y].type = type;
|
|
Main.tile[x + 1, y].halfBrick(false);
|
|
}
|
|
|
|
public static void PlaceDresserDirect(int x, int y, ushort type, int style, int id)
|
|
{
|
|
Chest.CreateChest(x - 1, y - 1, id);
|
|
for (int index1 = -1; index1 <= 1; ++index1)
|
|
{
|
|
for (int index2 = -1; index2 <= 0; ++index2)
|
|
{
|
|
if (Main.tile[x + index1, y + index2] == null)
|
|
Main.tile[x + index1, y + index2] = new Tile();
|
|
}
|
|
}
|
|
short num = (short) (style * 54);
|
|
Main.tile[x - 1, y - 1].active(true);
|
|
Main.tile[x - 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x - 1, y - 1].frameX = num;
|
|
Main.tile[x - 1, y - 1].type = type;
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].frameY = (short) 0;
|
|
Main.tile[x, y - 1].frameX = (short) ((int) num + 18);
|
|
Main.tile[x, y - 1].type = type;
|
|
Main.tile[x + 1, y - 1].active(true);
|
|
Main.tile[x + 1, y - 1].frameY = (short) 0;
|
|
Main.tile[x + 1, y - 1].frameX = (short) ((int) num + 36);
|
|
Main.tile[x + 1, y - 1].type = type;
|
|
Main.tile[x - 1, y].active(true);
|
|
Main.tile[x - 1, y].frameY = (short) 18;
|
|
Main.tile[x - 1, y].frameX = num;
|
|
Main.tile[x - 1, y].type = type;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].frameY = (short) 18;
|
|
Main.tile[x, y].frameX = (short) ((int) num + 18);
|
|
Main.tile[x, y].type = type;
|
|
Main.tile[x + 1, y].active(true);
|
|
Main.tile[x + 1, y].frameY = (short) 18;
|
|
Main.tile[x + 1, y].frameX = (short) ((int) num + 36);
|
|
Main.tile[x + 1, y].type = type;
|
|
}
|
|
|
|
public static void CheckChest(int i, int j, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int num1 = 0;
|
|
int num2 = j;
|
|
int num3 = num1 + (int) Main.tile[i, j].frameX / 18;
|
|
int Y = num2 + (int) Main.tile[i, j].frameY / 18 * -1;
|
|
while (num3 > 1)
|
|
num3 -= 2;
|
|
int X = num3 * -1 + i;
|
|
for (int index1 = X; index1 < X + 2; ++index1)
|
|
{
|
|
for (int index2 = Y; index2 < Y + 2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
Main.tile[index1, index2] = new Tile();
|
|
int num4 = (int) Main.tile[index1, index2].frameX / 18;
|
|
while (num4 > 1)
|
|
num4 -= 2;
|
|
if (!Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != type || num4 != index1 - X || (int) Main.tile[index1, index2].frameY != (index2 - Y) * 18)
|
|
flag = true;
|
|
}
|
|
if (Main.tile[index1, Y + 2] == null)
|
|
Main.tile[index1, Y + 2] = new Tile();
|
|
if ((!Main.tile[index1, Y + 2].active() || !Main.tileSolid[(int) Main.tile[index1, Y + 2].type]) && Chest.CanDestroyChest(X, Y))
|
|
flag = true;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int chestItemDrop = WorldGen.GetChestItemDrop(i, j, type);
|
|
WorldGen.destroyObject = true;
|
|
for (int index3 = X; index3 < X + 2; ++index3)
|
|
{
|
|
for (int index4 = Y; index4 < Y + 3; ++index4)
|
|
{
|
|
if ((int) Main.tile[index3, index4].type == type && Main.tile[index3, index4].active())
|
|
{
|
|
Chest.DestroyChest(index3, index4);
|
|
WorldGen.KillTile(index3, index4);
|
|
}
|
|
}
|
|
}
|
|
Item.NewItem(i * 16, j * 16, 32, 32, chestItemDrop);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
private static int GetChestItemDrop(int x, int y, int type)
|
|
{
|
|
int index = (int) Main.tile[x, y].frameX / 36;
|
|
return type != 467 ? Chest.chestItemSpawn[index] : Chest.chestItemSpawn2[index];
|
|
}
|
|
|
|
public static bool PlaceActuator(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].actuator())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].actuator(true);
|
|
return true;
|
|
}
|
|
|
|
public static bool KillActuator(int i, int j)
|
|
{
|
|
if (!Main.tile[i, j].actuator())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].actuator(false);
|
|
if (Main.netMode != 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 849);
|
|
for (int index = 0; index < 5; ++index)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 50);
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceWire(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].wire())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire(true);
|
|
return true;
|
|
}
|
|
|
|
public static bool KillWire(int i, int j)
|
|
{
|
|
if (!Main.tile[i, j].wire())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire(false);
|
|
if (Main.netMode != 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 530);
|
|
for (int index = 0; index < 5; ++index)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 50);
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceWire2(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].wire2())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire2(true);
|
|
return true;
|
|
}
|
|
|
|
public static bool KillWire2(int i, int j)
|
|
{
|
|
if (!Main.tile[i, j].wire2())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire2(false);
|
|
if (Main.netMode != 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 530);
|
|
for (int index = 0; index < 5; ++index)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 50);
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceWire3(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].wire3())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire3(true);
|
|
return true;
|
|
}
|
|
|
|
public static bool KillWire3(int i, int j)
|
|
{
|
|
if (!Main.tile[i, j].wire3())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire3(false);
|
|
if (Main.netMode != 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 530);
|
|
for (int index = 0; index < 5; ++index)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 50);
|
|
return true;
|
|
}
|
|
|
|
public static bool PlaceWire4(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].wire4())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire4(true);
|
|
return true;
|
|
}
|
|
|
|
public static bool KillWire4(int i, int j)
|
|
{
|
|
if (!Main.tile[i, j].wire4())
|
|
return false;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
Main.tile[i, j].wire4(false);
|
|
if (Main.netMode != 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, 530);
|
|
for (int index = 0; index < 5; ++index)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 50);
|
|
return true;
|
|
}
|
|
|
|
public static bool IsFitToPlaceFlowerIn(int x, int y, int typeAttemptedToPlace)
|
|
{
|
|
if (y < 1 || y > Main.maxTilesY - 1)
|
|
return false;
|
|
Tile tile = Main.tile[x, y + 1];
|
|
if (!tile.active() || tile.slope() != (byte) 0 || tile.halfBrick())
|
|
return false;
|
|
if ((tile.type == (ushort) 2 || tile.type == (ushort) 78 || tile.type == (ushort) 380 || tile.type == (ushort) 477 || tile.type == (ushort) 579) && typeAttemptedToPlace == 3 || tile.type == (ushort) 23 && typeAttemptedToPlace == 24 || (tile.type == (ushort) 109 || tile.type == (ushort) 492) && typeAttemptedToPlace == 110)
|
|
return true;
|
|
return tile.type == (ushort) 199 && typeAttemptedToPlace == 201;
|
|
}
|
|
|
|
private static bool SeaOatWaterCheck(int x, int y)
|
|
{
|
|
int num1 = 45;
|
|
int num2 = 20;
|
|
int num3 = 20;
|
|
int num4 = -1;
|
|
int num5 = num1 + 1;
|
|
int num6 = 0;
|
|
bool flag = false;
|
|
if (x <= WorldGen.beachDistance || x >= Main.maxTilesX - WorldGen.beachDistance)
|
|
{
|
|
flag = true;
|
|
num4 = 40;
|
|
num1 = 65;
|
|
num2 += 5;
|
|
}
|
|
for (int index1 = x - num1; index1 <= x + num1; ++index1)
|
|
{
|
|
for (int index2 = y - num2; index2 <= y + num2; ++index2)
|
|
{
|
|
if (WorldGen.InWorld(index1, index2) && !WorldGen.SolidTile(index1, index2) && Main.tile[index1, index2].liquid > (byte) 0)
|
|
{
|
|
num6 += (int) Main.tile[index1, index2].liquid;
|
|
int num7 = Math.Abs(index1 - x);
|
|
if (num7 < num5)
|
|
num5 = num7;
|
|
}
|
|
}
|
|
}
|
|
if (num6 / (int) byte.MaxValue >= num3)
|
|
{
|
|
if (!flag)
|
|
return true;
|
|
return false;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
private static bool PlantSeaOat(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].wall > (ushort) 0 || Main.tile[x, y].active() || Main.tile[x, y].liquid > (byte) 0 || !WorldGen.SolidTileAllowBottomSlope(x, y + 1) || !TileID.Sets.Conversion.Sand[(int) Main.tile[x, y + 1].type] || !WorldGen.SeaOatWaterCheck(x, y))
|
|
return false;
|
|
Main.tile[x, y].active(true);
|
|
Main.tile[x, y].slope((byte) 0);
|
|
Main.tile[x, y].halfBrick(false);
|
|
Main.tile[x, y].type = (ushort) 529;
|
|
Main.tile[x, y].frameX = (short) (WorldGen.genRand.Next(5) * 18);
|
|
int num = 0;
|
|
Main.tile[x, y].frameY = (short) (num * 34);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
return true;
|
|
}
|
|
|
|
private static bool CheckSeaOat(int x, int y)
|
|
{
|
|
if (WorldGen.SeaOatWaterCheck(x, y))
|
|
return true;
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
return false;
|
|
}
|
|
|
|
private static bool GrowSeaOat(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].frameX < (short) 180)
|
|
Main.tile[x, y].frameX += (short) 90;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
return false;
|
|
}
|
|
|
|
private static int GetWaterDepth(int x, int y)
|
|
{
|
|
int j1 = y;
|
|
while (!WorldGen.SolidTile(x, j1))
|
|
{
|
|
++j1;
|
|
if (j1 > Main.maxTilesY - 1)
|
|
return 0;
|
|
}
|
|
int num = j1 - 1;
|
|
int j2 = num;
|
|
while (Main.tile[x, j2].liquid > (byte) 0 && !WorldGen.SolidTile(x, j2))
|
|
--j2;
|
|
return num - j2;
|
|
}
|
|
|
|
private static int CountGrowingPlantTiles(int x, int y, int range, int type)
|
|
{
|
|
int num = 0;
|
|
for (int index1 = x - range; index1 <= x + range; ++index1)
|
|
{
|
|
for (int index2 = y - range * 3; index2 <= y + range * 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && (int) Main.tile[index1, index2].type == type)
|
|
++num;
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private static bool PlaceBamboo(int x, int y)
|
|
{
|
|
int num1 = 2;
|
|
int num2 = 5;
|
|
int num3 = WorldGen.genRand.Next(1, 21);
|
|
if (Main.tile[x, y].wall > (ushort) 0)
|
|
return false;
|
|
Tile tile1 = Main.tile[x, y + 1];
|
|
if (tile1.type != (ushort) 571 && tile1.type != (ushort) 60)
|
|
return false;
|
|
int waterDepth = WorldGen.GetWaterDepth(x, y);
|
|
if (waterDepth < num1 || waterDepth > num2)
|
|
return false;
|
|
int num4 = WorldGen.CountGrowingPlantTiles(x, y, 5, 571);
|
|
int num5 = 1;
|
|
if (tile1.type == (ushort) 571)
|
|
{
|
|
while (!WorldGen.SolidTile(x, y + num5))
|
|
++num5;
|
|
if (num5 + num4 / WorldGen.genRand.Next(1, 21) > num3)
|
|
return false;
|
|
}
|
|
else
|
|
num4 += 25;
|
|
if (num4 + num5 * 2 > WorldGen.genRand.Next(40, 61))
|
|
return false;
|
|
Tile tile2 = Main.tile[x, y];
|
|
tile2.active(true);
|
|
tile2.type = (ushort) 571;
|
|
tile2.frameX = (short) 0;
|
|
tile2.frameY = (short) 0;
|
|
tile2.slope((byte) 0);
|
|
tile2.halfBrick(false);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
return true;
|
|
}
|
|
|
|
public static void CheckBamboo(int x, int y)
|
|
{
|
|
Tile tile1 = Main.tile[x, y + 1];
|
|
if (tile1 == null)
|
|
return;
|
|
if (!tile1.active() || tile1.type != (ushort) 60 && tile1.type != (ushort) 571)
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else
|
|
{
|
|
Tile tile2 = Main.tile[x, y - 1];
|
|
if (tile2 == null)
|
|
return;
|
|
Tile tile3 = Main.tile[x, y];
|
|
if (tile3 == null)
|
|
return;
|
|
int num1 = !tile2.active() ? 0 : (tile2.type == (ushort) 571 ? 1 : 0);
|
|
bool flag = tile1.active() && tile1.type == (ushort) 571;
|
|
int num2 = (int) tile3.frameX / 18;
|
|
tile3.frameY = (short) 0;
|
|
if (num1 != 0)
|
|
{
|
|
if (flag)
|
|
{
|
|
if ((num2 < 5 ? 0 : (num2 <= 14 ? 1 : 0)) != 0)
|
|
return;
|
|
tile3.frameX = (short) (WorldGen.genRand.Next(5, 15) * 18);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
else
|
|
{
|
|
if ((num2 < 1 ? 0 : (num2 <= 4 ? 1 : 0)) != 0)
|
|
return;
|
|
tile3.frameX = (short) (WorldGen.genRand.Next(1, 5) * 18);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
}
|
|
else if (flag)
|
|
{
|
|
if ((num2 < 15 ? 0 : (num2 <= 19 ? 1 : 0)) != 0)
|
|
return;
|
|
tile3.frameX = (short) (WorldGen.genRand.Next(15, 20) * 18);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
else
|
|
{
|
|
if ((uint) num2 <= 0U)
|
|
return;
|
|
tile3.frameX = (short) 0;
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void PlaceUnderwaterPlant(ushort type, int x, int y)
|
|
{
|
|
if (!WorldGen.CanUnderwaterPlantGrowHere(type, x, y, false))
|
|
return;
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y + 1);
|
|
tileSafely1.slope((byte) 0);
|
|
tileSafely1.halfBrick(false);
|
|
Tile tileSafely2 = Framing.GetTileSafely(x, y);
|
|
tileSafely2.active(true);
|
|
tileSafely2.type = type;
|
|
tileSafely2.frameX = (short) 0;
|
|
tileSafely2.frameY = (short) 0;
|
|
tileSafely2.slope((byte) 0);
|
|
tileSafely2.halfBrick(false);
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
|
|
public static bool CanUnderwaterPlantGrowHere(ushort type, int x, int y, bool ignoreSelf)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 50))
|
|
return false;
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y);
|
|
if (!ignoreSelf && tileSafely1.active())
|
|
return false;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
Tile tileSafely2 = Framing.GetTileSafely(x, y - index);
|
|
if (tileSafely2.liquid == (byte) 0 || tileSafely2.liquidType() != (byte) 0)
|
|
return false;
|
|
}
|
|
Tile tileSafely3 = Framing.GetTileSafely(x, y + 1);
|
|
if (!tileSafely3.nactive() || (TileID.Sets.Conversion.Sand[(int) tileSafely3.type] ? 1 : ((int) type == (int) tileSafely3.type ? 1 : 0)) == 0)
|
|
return false;
|
|
switch (Framing.GetTileSafely(x, y).wall)
|
|
{
|
|
case 0:
|
|
case 63:
|
|
case 64:
|
|
case 65:
|
|
case 66:
|
|
case 67:
|
|
case 68:
|
|
case 69:
|
|
case 80:
|
|
case 81:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static void CheckUnderwaterPlant(ushort type, int x, int y)
|
|
{
|
|
if (!WorldGen.CanUnderwaterPlantGrowHere(type, x, y, true))
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
WorldGen.SquareTileFrame(x, y);
|
|
}
|
|
else
|
|
{
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y - 1);
|
|
Tile tileSafely2 = Framing.GetTileSafely(x, y);
|
|
Tile tileSafely3 = Framing.GetTileSafely(x, y + 1);
|
|
int num1 = !tileSafely1.active() ? 0 : ((int) tileSafely1.type == (int) type ? 1 : 0);
|
|
bool flag = tileSafely3.active() && (int) tileSafely3.type == (int) type;
|
|
int num2 = (int) tileSafely2.frameX / 18;
|
|
tileSafely2.frameY = (short) 0;
|
|
if (num1 != 0)
|
|
{
|
|
if ((1 > num2 ? 0 : (num2 <= 7 ? 1 : 0)) != 0)
|
|
return;
|
|
tileSafely2.frameX = (short) (WorldGen.genRand.Next(1, 8) * 18);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
else if (flag)
|
|
{
|
|
if ((7 > num2 ? 0 : (num2 <= 12 ? 1 : 0)) != 0)
|
|
return;
|
|
tileSafely2.frameX = (short) (WorldGen.genRand.Next(7, 13) * 18);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
else
|
|
{
|
|
if ((uint) num2 <= 0U)
|
|
return;
|
|
tileSafely2.frameX = (short) 0;
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Point PlaceCatTail(int x, int j)
|
|
{
|
|
int index1 = j;
|
|
Point point = new Point(-1, -1);
|
|
if (x < 50 || x > Main.maxTilesX - 50 || index1 < 50 || index1 > Main.maxTilesY - 50 || Main.tile[x, index1].active() && Main.tile[x, index1].type != (ushort) 71 || Main.tile[x, index1].liquid == (byte) 0 || Main.tile[x, index1].liquidType() != (byte) 0)
|
|
return point;
|
|
while (Main.tile[x, index1].liquid > (byte) 0 && index1 > 50)
|
|
--index1;
|
|
int index2 = index1 + 1;
|
|
if (Main.tile[x, index2].active() || Main.tile[x, index2 - 1].active() || Main.tile[x, index2].liquid == (byte) 0 || Main.tile[x, index2].liquidType() != (byte) 0 || Main.tile[x, index2].wall != (ushort) 0 && Main.tile[x, index2].wall != (ushort) 80 && Main.tile[x, index2].wall != (ushort) 81 && Main.tile[x, index2].wall != (ushort) 69 && (Main.tile[x, index2].wall < (ushort) 63 || Main.tile[x, index2].wall > (ushort) 68))
|
|
return point;
|
|
int num1 = 7;
|
|
int num2 = 0;
|
|
for (int index3 = x - num1; index3 <= x + num1; ++index3)
|
|
{
|
|
for (int index4 = index2 - num1; index4 <= index2 + num1; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 519)
|
|
{
|
|
++num2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (num2 > 3)
|
|
return point;
|
|
int index5;
|
|
for (index5 = index2; (!Main.tile[x, index5].active() || !Main.tileSolid[(int) Main.tile[x, index5].type] || Main.tileSolidTop[(int) Main.tile[x, index5].type]) && index5 < Main.maxTilesY - 50; ++index5)
|
|
{
|
|
if (Main.tile[x, index5].active() && Main.tile[x, index5].type != (ushort) 71)
|
|
return point;
|
|
}
|
|
int num3 = WorldGen.catTailDistance - 1;
|
|
if (index5 - index2 > num3 || index5 - index2 < 2)
|
|
return point;
|
|
int type = (int) Main.tile[x, index5].type;
|
|
if (!Main.tile[x, index5].nactive())
|
|
return point;
|
|
int num4 = -1;
|
|
switch (type)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
num4 = 0;
|
|
break;
|
|
case 23:
|
|
case 112:
|
|
num4 = 72;
|
|
break;
|
|
case 53:
|
|
if (x < WorldGen.beachDistance || x > Main.maxTilesX - WorldGen.beachDistance)
|
|
return point;
|
|
num4 = 18;
|
|
break;
|
|
case 70:
|
|
num4 = 90;
|
|
break;
|
|
case 199:
|
|
case 234:
|
|
num4 = 54;
|
|
break;
|
|
}
|
|
if (num4 < 0)
|
|
return point;
|
|
if (Main.tile[x, index5].topSlope() && WorldGen.gen && WorldGen.genRand.Next(3) != 0)
|
|
Main.tile[x, index5].slope((byte) 0);
|
|
else if (Main.tile[x, index5].topSlope() || Main.tile[x, index5].halfBrick())
|
|
return point;
|
|
int index6 = index5 - 1;
|
|
Main.tile[x, index6].active(true);
|
|
Main.tile[x, index6].type = (ushort) 519;
|
|
Main.tile[x, index6].frameX = (short) 0;
|
|
Main.tile[x, index6].frameY = (short) num4;
|
|
Main.tile[x, index6].halfBrick(false);
|
|
Main.tile[x, index6].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, index6);
|
|
point = new Point(x, index6);
|
|
return point;
|
|
}
|
|
|
|
public static void CheckCatTail(int x, int j)
|
|
{
|
|
if (Main.tile[x, j] == null)
|
|
return;
|
|
int num1 = j;
|
|
bool flag = false;
|
|
int index1 = num1;
|
|
while ((!Main.tile[x, index1].active() || !Main.tileSolid[(int) Main.tile[x, index1].type] || Main.tileSolidTop[(int) Main.tile[x, index1].type]) && index1 < Main.maxTilesY - 50)
|
|
{
|
|
if (Main.tile[x, index1].active() && Main.tile[x, index1].type != (ushort) 519)
|
|
flag = true;
|
|
if (Main.tile[x, index1].active())
|
|
{
|
|
++index1;
|
|
if (Main.tile[x, index1] == null)
|
|
return;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
int index2 = index1 - 1;
|
|
if (Main.tile[x, index2] == null)
|
|
return;
|
|
while (Main.tile[x, index2] != null && Main.tile[x, index2].liquid > (byte) 0 && index2 > 50)
|
|
{
|
|
if (Main.tile[x, index2].active() && Main.tile[x, index2].type != (ushort) 519 || Main.tile[x, index2].liquidType() != (byte) 0)
|
|
flag = true;
|
|
--index2;
|
|
if (Main.tile[x, index2] == null)
|
|
return;
|
|
}
|
|
int index3 = index2 + 1;
|
|
if (Main.tile[x, index3] == null)
|
|
return;
|
|
int num2 = index3;
|
|
int catTailDistance = WorldGen.catTailDistance;
|
|
if (index1 - num2 > catTailDistance)
|
|
flag = true;
|
|
int type = (int) Main.tile[x, index1].type;
|
|
int num3 = -1;
|
|
switch (type)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
num3 = 0;
|
|
break;
|
|
case 23:
|
|
case 112:
|
|
num3 = 72;
|
|
break;
|
|
case 53:
|
|
num3 = 18;
|
|
break;
|
|
case 70:
|
|
num3 = 90;
|
|
break;
|
|
case 199:
|
|
case 234:
|
|
num3 = 54;
|
|
break;
|
|
}
|
|
if (!Main.tile[x, index1].nactive())
|
|
flag = true;
|
|
if (num3 < 0)
|
|
flag = true;
|
|
int index4 = index1 - 1;
|
|
if (Main.tile[x, index4] != null && !Main.tile[x, index4].active())
|
|
{
|
|
for (int index5 = index4; index5 >= num2; --index5)
|
|
{
|
|
if (Main.tile[x, index5] == null)
|
|
return;
|
|
if (Main.tile[x, index5].active() && Main.tile[x, index5].type == (ushort) 519)
|
|
{
|
|
index4 = index5;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
while (Main.tile[x, index4] != null && Main.tile[x, index4].active() && Main.tile[x, index4].type == (ushort) 519)
|
|
--index4;
|
|
int tileY = index4 + 1;
|
|
if (Main.tile[x, index1 - 1] != null && Main.tile[x, index1 - 1].liquid < (byte) 127 && WorldGen.genRand.Next(4) == 0)
|
|
flag = true;
|
|
if (Main.tile[x, tileY] != null && Main.tile[x, tileY].frameX >= (short) 180 && Main.tile[x, tileY].liquid > (byte) 127 && WorldGen.genRand.Next(4) == 0)
|
|
flag = true;
|
|
if (Main.tile[x, tileY] != null && Main.tile[x, index1 - 1] != null && Main.tile[x, tileY].frameX > (short) 18)
|
|
{
|
|
if (Main.tile[x, index1 - 1].frameX < (short) 36 || Main.tile[x, index1 - 1].frameX > (short) 72)
|
|
flag = true;
|
|
else if (Main.tile[x, tileY].frameX < (short) 90)
|
|
flag = true;
|
|
else if (Main.tile[x, tileY].frameX >= (short) 108 && Main.tile[x, tileY].frameX <= (short) 162)
|
|
Main.tile[x, tileY].frameX = (short) 90;
|
|
}
|
|
if (index1 > tileY + 4 && Main.tile[x, tileY + 4] != null && Main.tile[x, tileY + 3] != null && Main.tile[x, tileY + 4].liquid == (byte) 0 && Main.tile[x, tileY + 3].type == (ushort) 519)
|
|
flag = true;
|
|
if (flag)
|
|
{
|
|
int num4 = num2;
|
|
if (tileY < num2)
|
|
num4 = tileY;
|
|
for (int j1 = num4 - 4; j1 <= index1; ++j1)
|
|
{
|
|
if (Main.tile[x, j1] != null && Main.tile[x, j1].active() && Main.tile[x, j1].type == (ushort) 519)
|
|
{
|
|
WorldGen.KillTile(x, j1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) j1));
|
|
WorldGen.SquareTileFrame(x, j1);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (num3 == (int) Main.tile[x, tileY].frameY)
|
|
return;
|
|
for (int index6 = tileY; index6 < index1; ++index6)
|
|
{
|
|
if (Main.tile[x, index6] != null && Main.tile[x, index6].active() && Main.tile[x, index6].type == (ushort) 519)
|
|
{
|
|
Main.tile[x, index6].frameY = (short) num3;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, tileY, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void GrowCheckSeaweed(int x, int y)
|
|
{
|
|
int maxValue = 1;
|
|
if (Main.netMode == 1)
|
|
return;
|
|
if (Main.tile[x, y].type == (ushort) 549 && Main.tile[x, y].liquid < (byte) 200 || Main.tile[x, y - 1].liquid < (byte) 200)
|
|
{
|
|
if (!Main.tile[x, y].active() || Main.tile[x, y].type != (ushort) 549 || WorldGen.genRand.Next(2) != 0)
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y - 1].active() || Main.tile[x, y - 2].active() || WorldGen.genRand.Next(maxValue) != 0 || Main.tile[x, y - 2].liquid != byte.MaxValue || Main.tile[x, y - 3].liquid != byte.MaxValue)
|
|
return;
|
|
int num1 = 17;
|
|
int num2 = 4;
|
|
int num3 = 30;
|
|
int num4 = 0;
|
|
for (int index1 = x - num2; index1 <= x + num2; ++index1)
|
|
{
|
|
for (int index2 = y; index2 <= y + num2 * 3; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 549)
|
|
{
|
|
++num4;
|
|
if (num4 > num3)
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
int j = y;
|
|
while (!WorldGen.SolidTile(x, j) && j < Main.maxTilesY - 50)
|
|
++j;
|
|
if (j - y >= num1 - WorldGen.genRand.Next(20))
|
|
return;
|
|
WorldGen.PlaceTile(x, y - 1, 549, true);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y - 1, 2);
|
|
}
|
|
}
|
|
|
|
public static void GrowCatTail(int x, int j)
|
|
{
|
|
if (Main.netMode == 1)
|
|
return;
|
|
int index1 = j;
|
|
while (Main.tile[x, index1].liquid > (byte) 0 && index1 > 50)
|
|
--index1;
|
|
int index2 = index1 + 1;
|
|
while ((!Main.tile[x, index2].active() || !Main.tileSolid[(int) Main.tile[x, index2].type] || Main.tileSolidTop[(int) Main.tile[x, index2].type]) && index2 < Main.maxTilesY - 50)
|
|
++index2;
|
|
int index3 = index2 - 1;
|
|
while (Main.tile[x, index3].active() && Main.tile[x, index3].type == (ushort) 519)
|
|
--index3;
|
|
int index4 = index3 + 1;
|
|
if (Main.tile[x, index4].frameX == (short) 90 && Main.tile[x, index4 - 1].active() && Main.tileCut[(int) Main.tile[x, index4 - 1].type])
|
|
{
|
|
WorldGen.KillTile(x, index4 - 1);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) (index4 - 1)));
|
|
}
|
|
if (Main.tile[x, index4 - 1].active())
|
|
return;
|
|
if (Main.tile[x, index4].frameX == (short) 0)
|
|
{
|
|
Main.tile[x, index4].frameX = (short) 18;
|
|
WorldGen.SquareTileFrame(x, index4);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, index4, 2);
|
|
}
|
|
else if (Main.tile[x, index4].frameX == (short) 18)
|
|
{
|
|
Main.tile[x, index4].frameX = (short) (18 * WorldGen.genRand.Next(2, 5));
|
|
Main.tile[x, index4 - 1].active(true);
|
|
Main.tile[x, index4 - 1].type = (ushort) 519;
|
|
Main.tile[x, index4 - 1].frameX = (short) 90;
|
|
Main.tile[x, index4 - 1].frameY = Main.tile[x, index4].frameY;
|
|
Main.tile[x, index4 - 1].halfBrick(false);
|
|
Main.tile[x, index4 - 1].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, index4);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, index4, 2);
|
|
}
|
|
else if (Main.tile[x, index4].frameX == (short) 90)
|
|
{
|
|
if (Main.tile[x, index4 - 1].liquid == (byte) 0)
|
|
{
|
|
if (!Main.tile[x, index4 - 2].active() && (Main.tile[x, index4].liquid > (byte) 0 || Main.tile[x, index4 + 1].liquid > (byte) 0 || Main.tile[x, index4 + 2].liquid > (byte) 0) && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
Main.tile[x, index4].frameX = (short) 108;
|
|
Main.tile[x, index4 - 1].active(true);
|
|
Main.tile[x, index4 - 1].type = (ushort) 519;
|
|
Main.tile[x, index4 - 1].frameX = (short) 90;
|
|
Main.tile[x, index4 - 1].frameY = Main.tile[x, index4].frameY;
|
|
Main.tile[x, index4 - 1].halfBrick(false);
|
|
Main.tile[x, index4 - 1].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, index4);
|
|
}
|
|
else
|
|
{
|
|
int num = WorldGen.genRand.Next(3);
|
|
Main.tile[x, index4].frameX = (short) (126 + num * 18);
|
|
Main.tile[x, index4 - 1].active(true);
|
|
Main.tile[x, index4 - 1].type = (ushort) 519;
|
|
Main.tile[x, index4 - 1].frameX = (short) (180 + num * 18);
|
|
Main.tile[x, index4 - 1].frameY = Main.tile[x, index4].frameY;
|
|
Main.tile[x, index4 - 1].halfBrick(false);
|
|
Main.tile[x, index4 - 1].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, index4);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[x, index4].frameX = (short) 108;
|
|
Main.tile[x, index4 - 1].active(true);
|
|
Main.tile[x, index4 - 1].type = (ushort) 519;
|
|
Main.tile[x, index4 - 1].frameX = (short) 90;
|
|
Main.tile[x, index4 - 1].frameY = Main.tile[x, index4].frameY;
|
|
Main.tile[x, index4 - 1].halfBrick(false);
|
|
Main.tile[x, index4 - 1].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, index4);
|
|
}
|
|
}
|
|
WorldGen.SquareTileFrame(x, index4 - 1, false);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, index4, 2);
|
|
}
|
|
|
|
public static bool PlaceLilyPad(int x, int j)
|
|
{
|
|
int index1 = j;
|
|
if (x < 50 || x > Main.maxTilesX - 50 || index1 < 50 || index1 > Main.maxTilesY - 50 || Main.tile[x, index1].active() || Main.tile[x, index1].liquid == (byte) 0 || Main.tile[x, index1].liquidType() != (byte) 0)
|
|
return false;
|
|
while (Main.tile[x, index1].liquid > (byte) 0 && index1 > 50)
|
|
--index1;
|
|
int j1 = index1 + 1;
|
|
if (Main.tile[x, j1].active() || Main.tile[x, j1 - 1].active() || Main.tile[x, j1].liquid == (byte) 0 || Main.tile[x, j1].liquidType() != (byte) 0 || Main.tile[x, j1].wall != (ushort) 0 && Main.tile[x, j1].wall != (ushort) 15 && Main.tile[x, j1].wall != (ushort) 70 && (Main.tile[x, j1].wall < (ushort) 63 || Main.tile[x, j1].wall > (ushort) 68))
|
|
return false;
|
|
int num1 = 5;
|
|
int num2 = 0;
|
|
for (int index2 = x - num1; index2 <= x + num1; ++index2)
|
|
{
|
|
for (int index3 = j1 - num1; index3 <= j1 + num1; ++index3)
|
|
{
|
|
if (Main.tile[index2, index3].active() && Main.tile[index2, index3].type == (ushort) 518)
|
|
++num2;
|
|
}
|
|
}
|
|
if (num2 > 3)
|
|
return false;
|
|
int index4;
|
|
for (index4 = j1; (!Main.tile[x, index4].active() || !Main.tileSolid[(int) Main.tile[x, index4].type] || Main.tileSolidTop[(int) Main.tile[x, index4].type]) && index4 < Main.maxTilesY - 50; ++index4)
|
|
{
|
|
if (Main.tile[x, index4].active() && Main.tile[x, index4].type == (ushort) 519)
|
|
return false;
|
|
}
|
|
int num3 = 12;
|
|
if (index4 - j1 > num3 || index4 - j1 < 3)
|
|
return false;
|
|
int type = (int) Main.tile[x, index4].type;
|
|
int num4 = -1;
|
|
if (type == 2 || type == 477)
|
|
num4 = 0;
|
|
if (type == 109 || type == 109 || type == 116)
|
|
num4 = 18;
|
|
if (type == 60)
|
|
num4 = 36;
|
|
if (num4 < 0)
|
|
return false;
|
|
Main.tile[x, j1].active(true);
|
|
Main.tile[x, j1].type = (ushort) 518;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Main.tile[x, j1].frameX = (short) (18 * WorldGen.genRand.Next(3));
|
|
else if (WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
Main.tile[x, j1].frameX = (short) (18 * WorldGen.genRand.Next(18));
|
|
}
|
|
else
|
|
{
|
|
int num5 = Main.maxTilesX / 5;
|
|
Main.tile[x, j1].frameX = x >= num5 ? (x >= num5 * 2 ? (x >= num5 * 3 ? (x >= num5 * 4 ? (short) (18 * WorldGen.genRand.Next(12, 15)) : (short) (18 * WorldGen.genRand.Next(15, 18))) : (short) (18 * WorldGen.genRand.Next(3, 6))) : (short) (18 * WorldGen.genRand.Next(9, 12))) : (short) (18 * WorldGen.genRand.Next(6, 9));
|
|
}
|
|
Main.tile[x, j1].frameY = (short) num4;
|
|
Main.tile[x, j1].halfBrick(false);
|
|
Main.tile[x, j1].slope((byte) 0);
|
|
WorldGen.SquareTileFrame(x, j1);
|
|
return true;
|
|
}
|
|
|
|
public static void CheckLilyPad(int x, int y)
|
|
{
|
|
if (Main.netMode == 1)
|
|
return;
|
|
if (Main.tile[x, y].liquidType() != (byte) 0)
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
}
|
|
else
|
|
{
|
|
int index = y;
|
|
while ((!Main.tile[x, index].active() || !Main.tileSolid[(int) Main.tile[x, index].type] || Main.tileSolidTop[(int) Main.tile[x, index].type]) && index < Main.maxTilesY - 50)
|
|
{
|
|
++index;
|
|
if (Main.tile[x, index] == null)
|
|
return;
|
|
}
|
|
int type = (int) Main.tile[x, index].type;
|
|
int num = -1;
|
|
if (type == 2 || type == 477)
|
|
num = 0;
|
|
if (type == 109 || type == 109 || type == 116)
|
|
num = 18;
|
|
if (type == 60)
|
|
num = 36;
|
|
if (num >= 0)
|
|
{
|
|
if (num != (int) Main.tile[x, y].frameY)
|
|
{
|
|
Main.tile[x, y].frameY = (short) num;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, x, y, 2);
|
|
}
|
|
if (Main.tile[x, y - 1].liquid > (byte) 0 && !Main.tile[x, y - 1].active())
|
|
{
|
|
Main.tile[x, y - 1].active(true);
|
|
Main.tile[x, y - 1].type = (ushort) 518;
|
|
Main.tile[x, y - 1].frameX = Main.tile[x, y].frameX;
|
|
Main.tile[x, y - 1].frameY = Main.tile[x, y].frameY;
|
|
Main.tile[x, y - 1].halfBrick(false);
|
|
Main.tile[x, y - 1].slope((byte) 0);
|
|
Main.tile[x, y].active(false);
|
|
Main.tile[x, y].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(x, y - 1, false);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y - 1, 3);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[x, y].liquid != (byte) 0)
|
|
return;
|
|
Tile tileSafely = Framing.GetTileSafely(x, y + 1);
|
|
if (!tileSafely.active())
|
|
{
|
|
Main.tile[x, y + 1].active(true);
|
|
Main.tile[x, y + 1].type = (ushort) 518;
|
|
Main.tile[x, y + 1].frameX = Main.tile[x, y].frameX;
|
|
Main.tile[x, y + 1].frameY = Main.tile[x, y].frameY;
|
|
Main.tile[x, y + 1].halfBrick(false);
|
|
Main.tile[x, y + 1].slope((byte) 0);
|
|
Main.tile[x, y].active(false);
|
|
Main.tile[x, y].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(x, y + 1, false);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, x, y, 3);
|
|
}
|
|
else
|
|
{
|
|
if (!tileSafely.active() || TileID.Sets.Platforms[(int) tileSafely.type] || Main.tileSolid[(int) tileSafely.type] && !Main.tileSolidTop[(int) tileSafely.type])
|
|
return;
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WorldGen.KillTile(x, y);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendData(17, number2: ((float) x), number3: ((float) y));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool PlaceTile(
|
|
int i,
|
|
int j,
|
|
int Type,
|
|
bool mute = false,
|
|
bool forced = false,
|
|
int plr = -1,
|
|
int style = 0)
|
|
{
|
|
int index1 = Type;
|
|
if (WorldGen.gen && Main.tile[i, j].active() && Main.tile[i, j].type == (ushort) 488 || index1 >= 623)
|
|
return false;
|
|
bool flag = false;
|
|
if (i >= 0 && j >= 0 && i < Main.maxTilesX && j < Main.maxTilesY)
|
|
{
|
|
Tile trackCache = Main.tile[i, j];
|
|
if (trackCache == null)
|
|
{
|
|
trackCache = new Tile();
|
|
Main.tile[i, j] = trackCache;
|
|
}
|
|
if (forced || Collision.EmptyTile(i, j) || !Main.tileSolid[index1] || index1 == 23 && trackCache.type == (ushort) 0 && trackCache.active() || index1 == 199 && trackCache.type == (ushort) 0 && trackCache.active() || index1 == 2 && trackCache.type == (ushort) 0 && trackCache.active() || index1 == 109 && trackCache.type == (ushort) 0 && trackCache.active() || index1 == 60 && trackCache.type == (ushort) 59 && trackCache.active() || index1 == 70 && trackCache.type == (ushort) 59 && trackCache.active() || Main.tileMoss[index1] && (trackCache.type == (ushort) 1 || trackCache.type == (ushort) 38) && trackCache.active())
|
|
{
|
|
if (index1 == 23 && (trackCache.type != (ushort) 0 || !trackCache.active()) || index1 == 199 && (trackCache.type != (ushort) 0 || !trackCache.active()) || index1 == 2 && (trackCache.type != (ushort) 0 || !trackCache.active()) || index1 == 109 && (trackCache.type != (ushort) 0 || !trackCache.active()) || index1 == 60 && (trackCache.type != (ushort) 59 || !trackCache.active()) || index1 == 70 && (trackCache.type != (ushort) 59 || !trackCache.active()))
|
|
return false;
|
|
if (Main.tileMoss[index1])
|
|
{
|
|
if (trackCache.type != (ushort) 1 && trackCache.type != (ushort) 38 || !trackCache.active())
|
|
return false;
|
|
if (trackCache.type == (ushort) 38)
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 381:
|
|
index1 = 517;
|
|
break;
|
|
case 534:
|
|
index1 = 535;
|
|
break;
|
|
case 536:
|
|
index1 = 537;
|
|
break;
|
|
case 539:
|
|
index1 = 540;
|
|
break;
|
|
default:
|
|
index1 = 512 + index1 - 179;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (index1 == 81)
|
|
{
|
|
if (Main.tile[i, j - 1] == null)
|
|
Main.tile[i, j - 1] = new Tile();
|
|
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].active() || !Main.tileSolid[(int) Main.tile[i, j + 1].type] || Main.tile[i, j + 1].halfBrick() || Main.tile[i, j + 1].slope() != (byte) 0)
|
|
return false;
|
|
}
|
|
if ((index1 == 373 || index1 == 375 || index1 == 374 || index1 == 461) && (Main.tile[i, j - 1] == null || Main.tile[i, j - 1].bottomSlope()))
|
|
return false;
|
|
if (trackCache.liquid > (byte) 0 || trackCache.checkingLiquid())
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 3:
|
|
case 20:
|
|
case 24:
|
|
case 27:
|
|
case 32:
|
|
case 51:
|
|
case 69:
|
|
case 72:
|
|
case 201:
|
|
case 352:
|
|
case 529:
|
|
return false;
|
|
case 4:
|
|
if (style != 8 && style != 11 && style != 17)
|
|
return false;
|
|
break;
|
|
}
|
|
}
|
|
if (TileID.Sets.ResetsHalfBrickPlacementAttempt[index1] && (!trackCache.active() || !Main.tileFrameImportant[(int) trackCache.type]))
|
|
{
|
|
trackCache.halfBrick(false);
|
|
trackCache.frameY = (short) 0;
|
|
trackCache.frameX = (short) 0;
|
|
}
|
|
if (index1 == 3 || index1 == 24 || index1 == 110 || index1 == 201)
|
|
{
|
|
if (WorldGen.IsFitToPlaceFlowerIn(i, j, index1))
|
|
{
|
|
if (index1 == 24 && WorldGen.genRand.Next(13) == 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) 32;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
}
|
|
else if (index1 == 201 && WorldGen.genRand.Next(13) == 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) 352;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
}
|
|
else if (Main.tile[i, j + 1].type == (ushort) 78 || Main.tile[i, j + 1].type == (ushort) 380 || Main.tile[i, j + 1].type == (ushort) 579)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
int num = WorldGen.genRand.NextFromList<int>(6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 27, 30, 33, 36, 39, 42);
|
|
switch (num)
|
|
{
|
|
case 21:
|
|
case 24:
|
|
case 27:
|
|
case 30:
|
|
case 33:
|
|
case 36:
|
|
case 39:
|
|
case 42:
|
|
num += WorldGen.genRand.Next(3);
|
|
break;
|
|
}
|
|
trackCache.frameX = (short) (num * 18);
|
|
}
|
|
else if ((trackCache.wall == (ushort) 0 || trackCache.wall == (ushort) 106 || trackCache.wall == (ushort) 107 || trackCache.wall >= (ushort) 63 && trackCache.wall <= (ushort) 70) && (Main.tile[i, j + 1].wall == (ushort) 0 || Main.tile[i, j + 1].wall == (ushort) 106 || Main.tile[i, j + 1].wall == (ushort) 107 || Main.tile[i, j + 1].wall >= (ushort) 63 && Main.tile[i, j + 1].wall <= (ushort) 70))
|
|
{
|
|
if (WorldGen.genRand.Next(50) == 0 || (index1 == 24 || index1 == 201) && WorldGen.genRand.Next(40) == 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = index1 != 201 ? (short) 144 : (short) 270;
|
|
}
|
|
else if (WorldGen.genRand.Next(35) == 0 || Main.tile[i, j].wall >= (ushort) 63 && Main.tile[i, j].wall <= (ushort) 70)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
int num = WorldGen.genRand.NextFromList<int>(6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
|
|
if (index1 == 201)
|
|
num = WorldGen.genRand.NextFromList<int>(6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22);
|
|
trackCache.frameX = (short) (num * 18);
|
|
}
|
|
else
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (WorldGen.genRand.Next(6) * 18);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 61:
|
|
if (j + 1 < Main.maxTilesY && Main.tile[i, j + 1].active() && Main.tile[i, j + 1].slope() == (byte) 0 && !Main.tile[i, j + 1].halfBrick() && Main.tile[i, j + 1].type == (ushort) 60)
|
|
{
|
|
if (WorldGen.genRand.Next(16) == 0 && (double) j > Main.worldSurface)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) 69;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(60) == 0 && (double) j > Main.rockLayer)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) 144;
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(230) == 0 && (double) j > Main.rockLayer)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) 162;
|
|
break;
|
|
}
|
|
if (WorldGen.genRand.Next(15) == 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = WorldGen.genRand.Next(3) == 0 ? (short) (WorldGen.genRand.Next(13) * 18 + 180) : (short) (WorldGen.genRand.Next(2) * 18 + 108);
|
|
break;
|
|
}
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (WorldGen.genRand.Next(6) * 18);
|
|
break;
|
|
}
|
|
break;
|
|
case 71:
|
|
if (j + 1 < Main.maxTilesY && Main.tile[i, j + 1].active() && Main.tile[i, j + 1].slope() == (byte) 0 && !Main.tile[i, j + 1].halfBrick() && Main.tile[i, j + 1].type == (ushort) 70)
|
|
{
|
|
Point point = new Point(-1, -1);
|
|
if ((double) j > Main.worldSurface)
|
|
point = WorldGen.PlaceCatTail(i, j);
|
|
if (WorldGen.InWorld(point.X, point.Y))
|
|
{
|
|
if (WorldGen.gen)
|
|
{
|
|
int num = WorldGen.genRand.Next(14);
|
|
for (int index2 = 0; index2 < num; ++index2)
|
|
WorldGen.GrowCatTail(point.X, point.Y);
|
|
WorldGen.SquareTileFrame(point.X, point.Y);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (WorldGen.genRand.Next(5) * 18);
|
|
break;
|
|
}
|
|
break;
|
|
case 129:
|
|
if (WorldGen.SolidTile(i - 1, j) || WorldGen.SolidTile(i + 1, j) || WorldGen.SolidTile(i, j - 1) || WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (WorldGen.genRand.Next(18) * 18);
|
|
if (plr <= -1 && WorldGen.genRand.Next(50) == 0)
|
|
trackCache.frameX = (short) ((18 + WorldGen.genRand.Next(6)) * 18);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 171:
|
|
WorldGen.PlaceXmasTree(i, j);
|
|
break;
|
|
case 178:
|
|
if (WorldGen.SolidTile(i - 1, j, true) || WorldGen.SolidTile(i + 1, j, true) || WorldGen.SolidTile(i, j - 1) || WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (style * 18);
|
|
trackCache.frameY = (short) (WorldGen.genRand.Next(3) * 18);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 184:
|
|
if (Main.tileMoss[(int) Main.tile[i - 1, j].type] && WorldGen.SolidTile(i - 1, j) || Main.tileMoss[(int) Main.tile[i + 1, j].type] && WorldGen.SolidTile(i + 1, j) || Main.tileMoss[(int) Main.tile[i, j - 1].type] && WorldGen.SolidTile(i, j - 1) || Main.tileMoss[(int) Main.tile[i, j + 1].type] && WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (style * 18);
|
|
trackCache.frameY = (short) (WorldGen.genRand.Next(3) * 18);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
}
|
|
if (TileID.Sets.tileMossBrick[(int) Main.tile[i - 1, j].type] && WorldGen.SolidTile(i - 1, j) || TileID.Sets.tileMossBrick[(int) Main.tile[i + 1, j].type] && WorldGen.SolidTile(i + 1, j) || TileID.Sets.tileMossBrick[(int) Main.tile[i, j - 1].type] && WorldGen.SolidTile(i, j - 1) || TileID.Sets.tileMossBrick[(int) Main.tile[i, j + 1].type] && WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameX = (short) (style * 18);
|
|
trackCache.frameY = (short) (WorldGen.genRand.Next(3) * 18);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 254:
|
|
WorldGen.Place2x2Style(i, j, (ushort) index1, style);
|
|
break;
|
|
case 485:
|
|
WorldGen.PlaceObject(i, j, index1, style: style);
|
|
break;
|
|
case 518:
|
|
WorldGen.PlaceLilyPad(i, j);
|
|
break;
|
|
case 519:
|
|
WorldGen.PlaceCatTail(i, j);
|
|
break;
|
|
case 529:
|
|
WorldGen.PlantSeaOat(i, j);
|
|
break;
|
|
case 549:
|
|
WorldGen.PlaceUnderwaterPlant((ushort) 549, i, j);
|
|
break;
|
|
case 571:
|
|
WorldGen.PlaceBamboo(i, j);
|
|
break;
|
|
default:
|
|
if (index1 == 335 || index1 == 564 || index1 == 594)
|
|
{
|
|
WorldGen.Place2x2(i, j, (ushort) index1, 0);
|
|
break;
|
|
}
|
|
if (index1 == 319 || index1 == 132 || index1 == 484 || index1 == 138 || index1 == 142 || index1 == 143 || index1 == 282 || index1 >= 288 && index1 <= 295 || index1 >= 316 && index1 <= 318)
|
|
{
|
|
WorldGen.Place2x2(i, j, (ushort) index1, 0);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 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();
|
|
Tile tile1 = Main.tile[i - 1, j];
|
|
Tile tile2 = Main.tile[i + 1, j];
|
|
Tile tile3 = Main.tile[i, j + 1];
|
|
if (trackCache.wall > (ushort) 0 || tile1.active() && (tile1.slope() == (byte) 0 || (int) tile1.slope() % 2 != 1) && (Main.tileSolid[(int) tile1.type] && !Main.tileSolidTop[(int) tile1.type] && !TileID.Sets.NotReallySolid[(int) tile1.type] || TileID.Sets.IsBeam[(int) tile1.type] || WorldGen.IsTreeType((int) tile1.type) && WorldGen.IsTreeType((int) Main.tile[i - 1, j - 1].type) && WorldGen.IsTreeType((int) Main.tile[i - 1, j + 1].type)) || tile2.active() && (tile2.slope() == (byte) 0 || (int) tile2.slope() % 2 != 0) && (Main.tileSolid[(int) tile2.type] && !Main.tileSolidTop[(int) tile2.type] && !TileID.Sets.NotReallySolid[(int) tile2.type] || TileID.Sets.IsBeam[(int) tile2.type] || WorldGen.IsTreeType((int) tile2.type) && WorldGen.IsTreeType((int) Main.tile[i + 1, j - 1].type) && WorldGen.IsTreeType((int) Main.tile[i + 1, j + 1].type)) || tile3.active() && Main.tileSolid[(int) tile3.type] && (TileID.Sets.Platforms[(int) tile3.type] && WorldGen.TopEdgeCanBeAttachedTo(i, j + 1) || (!Main.tileSolidTop[(int) tile3.type] || tile3.type == (ushort) 380 && tile3.slope() == (byte) 0) && !TileID.Sets.NotReallySolid[(int) tile3.type] && !tile3.halfBrick() && tile3.slope() == (byte) 0))
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameY = (short) (22 * style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 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[(int) Main.tile[i, j - 3].type])
|
|
{
|
|
WorldGen.PlaceDoor(i, j - 1, index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (Main.tile[i, j + 1].active() || Main.tile[i, j + 2].active() || !Main.tile[i, j + 3].active() || !Main.tileSolid[(int) Main.tile[i, j + 3].type])
|
|
return false;
|
|
WorldGen.PlaceDoor(i, j + 1, index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 136:
|
|
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].nactive() && !Main.tile[i - 1, j].halfBrick() && !TileID.Sets.NotReallySolid[(int) Main.tile[i - 1, j].type] && Main.tile[i - 1, j].slope() == (byte) 0 && (WorldGen.SolidTile(i - 1, j) || TileID.Sets.IsBeam[(int) Main.tile[i - 1, j].type] || Main.tile[i - 1, j].type == (ushort) 5 && Main.tile[i - 1, j - 1].type == (ushort) 5 && Main.tile[i - 1, j + 1].type == (ushort) 5) || Main.tile[i + 1, j].nactive() && !Main.tile[i + 1, j].halfBrick() && !TileID.Sets.NotReallySolid[(int) Main.tile[i + 1, j].type] && Main.tile[i + 1, j].slope() == (byte) 0 && (WorldGen.SolidTile(i + 1, j) || TileID.Sets.IsBeam[(int) Main.tile[i + 1, j].type] || Main.tile[i + 1, j].type == (ushort) 5 && Main.tile[i + 1, j - 1].type == (ushort) 5 && Main.tile[i + 1, j + 1].type == (ushort) 5) || Main.tile[i, j + 1].nactive() && !Main.tile[i, j + 1].halfBrick() && WorldGen.SolidTile(i, j + 1) && Main.tile[i, j + 1].slope() == (byte) 0 || trackCache.wall > (ushort) 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 137:
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
trackCache.frameY = (short) (18 * style);
|
|
break;
|
|
case 411:
|
|
WorldGen.Place2x2(i, j, (ushort) index1, 0);
|
|
break;
|
|
case 442:
|
|
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].nactive() && !Main.tile[i - 1, j].halfBrick() && !TileID.Sets.NotReallySolid[(int) Main.tile[i - 1, j].type] && Main.tile[i - 1, j].slope() == (byte) 0 && (WorldGen.SolidTile(i - 1, j) || TileID.Sets.IsBeam[(int) Main.tile[i - 1, j].type] || Main.tile[i - 1, j].type == (ushort) 5 && Main.tile[i - 1, j - 1].type == (ushort) 5 && Main.tile[i - 1, j + 1].type == (ushort) 5) || Main.tile[i + 1, j].nactive() && !Main.tile[i + 1, j].halfBrick() && !TileID.Sets.NotReallySolid[(int) Main.tile[i + 1, j].type] && Main.tile[i + 1, j].slope() == (byte) 0 && (WorldGen.SolidTile(i + 1, j) || TileID.Sets.IsBeam[(int) Main.tile[i + 1, j].type] || Main.tile[i + 1, j].type == (ushort) 5 && Main.tile[i + 1, j - 1].type == (ushort) 5 && Main.tile[i + 1, j + 1].type == (ushort) 5) || Main.tile[i, j + 1].nactive() && !Main.tile[i, j + 1].halfBrick() && WorldGen.SolidTile(i, j + 1) && Main.tile[i, j + 1].slope() == (byte) 0)
|
|
{
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 457:
|
|
WorldGen.Place2x2Horizontal(i, j, (ushort) 457, style);
|
|
break;
|
|
default:
|
|
if (index1 >= 275 && index1 <= 281 || index1 == 296 || index1 == 297 || index1 == 309 || index1 == 358 || index1 == 359 || index1 == 413 || index1 == 414 || index1 == 542)
|
|
{
|
|
WorldGen.Place6x3(i, j, (ushort) index1);
|
|
break;
|
|
}
|
|
if (index1 == 237 || index1 == 244 || index1 == 285 || index1 == 286 || index1 == 298 || index1 == 299 || index1 == 310 || index1 == 339 || index1 == 538 || index1 >= 361 && index1 <= 364 || index1 == 532 || index1 == 533 || index1 == 486 || index1 == 488 || index1 == 544 || index1 == 582 || index1 == 619)
|
|
{
|
|
WorldGen.Place3x2(i, j, (ushort) index1);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 128:
|
|
WorldGen.PlaceMan(i, j, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 149:
|
|
if (WorldGen.SolidTile(i - 1, j) || WorldGen.SolidTile(i + 1, j) || WorldGen.SolidTile(i, j - 1) || WorldGen.SolidTile(i, j + 1))
|
|
{
|
|
trackCache.frameX = (short) (18 * style);
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 269:
|
|
WorldGen.PlaceWoman(i, j, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 334:
|
|
int style1 = 0;
|
|
if (style == -1)
|
|
style1 = 1;
|
|
WorldGen.Place3x3Wall(i, j, (ushort) 334, style1);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
default:
|
|
if (index1 == 139 || index1 == 35)
|
|
{
|
|
WorldGen.PlaceMB(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 34:
|
|
WorldGen.PlaceChand(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 165:
|
|
WorldGen.PlaceTight(i, j);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 235:
|
|
WorldGen.Place3x1(i, j, (ushort) index1);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 240:
|
|
WorldGen.Place3x3Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
case 241:
|
|
WorldGen.Place4x3Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
case 242:
|
|
WorldGen.Place6x4Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
case 245:
|
|
WorldGen.Place2x3Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
case 246:
|
|
WorldGen.Place3x2Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
case 440:
|
|
WorldGen.Place3x3Wall(i, j, (ushort) index1, style);
|
|
break;
|
|
default:
|
|
if (index1 == 106 || index1 == 212 || index1 == 219 || index1 == 220 || index1 == 228 || index1 == 231 || index1 == 243 || index1 == 247 || index1 == 283 || index1 >= 300 && index1 <= 308 || index1 == 354 || index1 == 355 || index1 == 491)
|
|
{
|
|
WorldGen.Place3x3(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 13 || index1 == 33 || index1 == 49 || index1 == 50 || index1 == 78 || index1 == 174 || index1 == 372)
|
|
{
|
|
WorldGen.PlaceOnTable1x1(i, j, index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 14 || index1 == 469 || index1 == 26 || index1 == 86 || index1 == 87 || index1 == 88 || index1 == 89 || index1 == 114 || index1 == 186 || index1 == 187 || index1 == 215 || index1 == 217 || index1 == 218 || index1 == 377)
|
|
{
|
|
WorldGen.Place3x2(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 20:
|
|
if (Main.tile[i, j + 1] == null)
|
|
Main.tile[i, j + 1] = new Tile();
|
|
int type = (int) Main.tile[i, j + 1].type;
|
|
if (Main.tile[i, j + 1].active() && (type == 2 || type == 109 || type == 147 || type == 60 || type == 23 || type == 199 || type == 53 || type == 234 || type == 116 || type == 112))
|
|
{
|
|
WorldGen.Place1x2(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
case 236:
|
|
WorldGen.PlaceJunglePlant(i, j, (ushort) index1, WorldGen.genRand.Next(3), 0);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 238:
|
|
WorldGen.PlaceJunglePlant(i, j, (ushort) index1, 0, 0);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
default:
|
|
if (index1 == 15 || index1 == 216 || index1 == 338 || index1 == 390)
|
|
{
|
|
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();
|
|
WorldGen.Place1x2(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 227:
|
|
WorldGen.PlaceDye(i, j, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 567:
|
|
WorldGen.PlaceGnome(i, j, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
default:
|
|
if (index1 == 16 || index1 == 18 || index1 == 29 || index1 == 103 || index1 == 134 || index1 == 462)
|
|
{
|
|
WorldGen.Place2x1(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 92 || index1 == 93 || index1 == 453)
|
|
{
|
|
WorldGen.Place1xX(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 104 || index1 == 105 || index1 == 320 || index1 == 337 || index1 == 349 || index1 == 356 || index1 == 378 || index1 == 456 || index1 == 506 || index1 == 545)
|
|
{
|
|
WorldGen.Place2xX(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 17 || index1 == 77 || index1 == 133)
|
|
{
|
|
WorldGen.Place3x2(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 207)
|
|
{
|
|
WorldGen.Place2xX(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 410 || index1 == 480 || index1 == 509)
|
|
{
|
|
WorldGen.Place2xX(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (index1 == 465 || index1 == 531 || index1 == 591 || index1 == 592)
|
|
{
|
|
WorldGen.Place2xX(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
if (TileID.Sets.BasicChest[index1])
|
|
{
|
|
WorldGen.PlaceChest(i, j, (ushort) index1, style: style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 27:
|
|
WorldGen.PlaceSunflower(i, j);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 28:
|
|
WorldGen.PlacePot(i, j, style: WorldGen.genRand.Next(4));
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 36:
|
|
case 135:
|
|
case 141:
|
|
case 144:
|
|
case 210:
|
|
case 239:
|
|
case 324:
|
|
case 476:
|
|
case 494:
|
|
WorldGen.Place1x1(i, j, index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 42:
|
|
case 270:
|
|
case 271:
|
|
WorldGen.Place1x2Top(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 55:
|
|
case 425:
|
|
case 510:
|
|
case 511:
|
|
WorldGen.PlaceSign(i, j, (ushort) index1, style);
|
|
break;
|
|
case 85:
|
|
case 376:
|
|
WorldGen.Place2x2Horizontal(i, j, (ushort) index1, style);
|
|
break;
|
|
case 91:
|
|
WorldGen.PlaceBanner(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 101:
|
|
case 102:
|
|
case 463:
|
|
WorldGen.Place3x4(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 419:
|
|
case 420:
|
|
case 423:
|
|
case 424:
|
|
case 429:
|
|
case 445:
|
|
WorldGen.PlaceLogicTiles(i, j, index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
case 464:
|
|
case 466:
|
|
WorldGen.Place5x4(i, j, (ushort) index1, style);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
default:
|
|
if (Main.tileAlch[index1])
|
|
{
|
|
WorldGen.PlaceAlch(i, j, style);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 19:
|
|
trackCache.frameY = (short) (18 * style);
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
break;
|
|
case 79:
|
|
case 90:
|
|
int direction = 1;
|
|
if (plr > -1)
|
|
direction = Main.player[plr].direction;
|
|
WorldGen.Place4x2(i, j, (ushort) index1, direction, style);
|
|
break;
|
|
case 81:
|
|
trackCache.frameX = (short) (26 * WorldGen.genRand.Next(6));
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
break;
|
|
case 94:
|
|
case 95:
|
|
case 97:
|
|
case 98:
|
|
case 99:
|
|
case 100:
|
|
case 125:
|
|
case 126:
|
|
case 172:
|
|
case 173:
|
|
case 287:
|
|
WorldGen.Place2x2(i, j, (ushort) index1, style);
|
|
break;
|
|
case 96:
|
|
WorldGen.Place2x2Style(i, j, (ushort) index1, style);
|
|
break;
|
|
case 209:
|
|
WorldGen.PlaceCannon(i, j, (ushort) index1, style);
|
|
break;
|
|
case 314:
|
|
Minecart.PlaceTrack(trackCache, style);
|
|
break;
|
|
case 380:
|
|
trackCache.frameY = (short) (18 * style);
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
break;
|
|
default:
|
|
trackCache.active(true);
|
|
trackCache.type = (ushort) index1;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (trackCache.active())
|
|
{
|
|
if (TileID.Sets.BlocksWaterDrawingBehindSelf[(int) trackCache.type])
|
|
WorldGen.SquareWallFrame(i, j);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
flag = true;
|
|
if (!mute)
|
|
{
|
|
switch (index1)
|
|
{
|
|
case (int) sbyte.MaxValue:
|
|
SoundEngine.PlaySound(SoundID.Item30, i * 16, j * 16);
|
|
break;
|
|
case 314:
|
|
SoundEngine.PlaySound(SoundID.Item52, i * 16, j * 16);
|
|
break;
|
|
case 330:
|
|
case 331:
|
|
case 332:
|
|
case 333:
|
|
SoundEngine.PlaySound(18, i * 16, j * 16);
|
|
break;
|
|
default:
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (index1 == 22 || index1 == 140)
|
|
{
|
|
for (int index3 = 0; index3 < 3; ++index3)
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 14);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static void KillWall(int i, int j, bool fail = false)
|
|
{
|
|
if (i < 0 || j < 0 || i >= Main.maxTilesX || j >= Main.maxTilesY)
|
|
return;
|
|
Tile tileCache = Main.tile[i, j];
|
|
if (tileCache == null)
|
|
{
|
|
tileCache = new Tile();
|
|
Main.tile[i, j] = tileCache;
|
|
}
|
|
if (tileCache.wall <= (ushort) 0)
|
|
return;
|
|
fail = WorldGen.KillWall_CheckFailure(fail, tileCache);
|
|
WorldGen.KillWall_PlaySounds(i, j, tileCache);
|
|
int num = 10;
|
|
if (fail)
|
|
num = 3;
|
|
for (int index = 0; index < num; ++index)
|
|
WorldGen.KillWall_MakeWallDust(i, j, tileCache);
|
|
if (fail)
|
|
{
|
|
WorldGen.SquareWallFrame(i, j);
|
|
}
|
|
else
|
|
{
|
|
WorldGen.KillWall_DropItems(i, j, tileCache);
|
|
tileCache.wall = (ushort) 0;
|
|
tileCache.wallColor((byte) 0);
|
|
WorldGen.SquareWallFrame(i, j);
|
|
if (tileCache.type < (ushort) 0 || tileCache.type >= (ushort) 623 || !TileID.Sets.FramesOnKillWall[(int) tileCache.type])
|
|
return;
|
|
WorldGen.TileFrame(i, j);
|
|
}
|
|
}
|
|
|
|
private static bool KillWall_CheckFailure(bool fail, Tile tileCache)
|
|
{
|
|
if (Main.wallDungeon[(int) tileCache.wall] && !NPC.downedBoss3)
|
|
fail = true;
|
|
if (tileCache.wall == (ushort) 87 && !NPC.downedGolemBoss)
|
|
fail = true;
|
|
return fail;
|
|
}
|
|
|
|
private static void KillWall_PlaySounds(int i, int j, Tile tileCache)
|
|
{
|
|
if (tileCache.wall == (ushort) 241 || tileCache.wall >= (ushort) 88 && tileCache.wall <= (ushort) 93 || tileCache.wall == (ushort) 21 || tileCache.wall == (ushort) 186 || tileCache.wall == (ushort) 136 || tileCache.wall == (ushort) 137 || tileCache.wall == (ushort) 168 || tileCache.wall == (ushort) 169 || tileCache.wall == (ushort) 172 || tileCache.wall == (ushort) 226 || tileCache.wall == (ushort) 227 || tileCache.wall == (ushort) 242 || tileCache.wall == (ushort) 243)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.wall >= (ushort) 63 && tileCache.wall <= (ushort) 70 || tileCache.wall == (ushort) 264 || tileCache.wall == (ushort) 268 || tileCache.wall == (ushort) 265)
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
else
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
}
|
|
|
|
private static void KillWall_DropItems(int i, int j, Tile tileCache)
|
|
{
|
|
int itemDrops = WorldGen.KillWall_GetItemDrops(tileCache);
|
|
if (itemDrops <= 0)
|
|
return;
|
|
Item.NewItem(i * 16, j * 16, 16, 16, itemDrops);
|
|
}
|
|
|
|
private static int KillWall_GetItemDrops(Tile tileCache)
|
|
{
|
|
switch (tileCache.wall)
|
|
{
|
|
case 237:
|
|
return 4233;
|
|
case 238:
|
|
return 4234;
|
|
case 239:
|
|
return 4235;
|
|
case 240:
|
|
return 4236;
|
|
case 246:
|
|
return 4486;
|
|
case 247:
|
|
return 4487;
|
|
case 248:
|
|
return 4488;
|
|
case 249:
|
|
return 4489;
|
|
case 250:
|
|
return 4490;
|
|
case 251:
|
|
return 4491;
|
|
case 252:
|
|
return 4492;
|
|
case 253:
|
|
return 4493;
|
|
case 254:
|
|
return 4494;
|
|
case (ushort) byte.MaxValue:
|
|
return 4495;
|
|
case 256:
|
|
return 4496;
|
|
case 257:
|
|
return 4497;
|
|
case 258:
|
|
return 4498;
|
|
case 259:
|
|
return 4499;
|
|
case 260:
|
|
return 4500;
|
|
case 261:
|
|
return 4501;
|
|
case 262:
|
|
return 4502;
|
|
case 263:
|
|
return 4503;
|
|
case 264:
|
|
return 4504;
|
|
case 265:
|
|
return 4505;
|
|
case 266:
|
|
return 4506;
|
|
case 267:
|
|
return 4507;
|
|
case 268:
|
|
return 4508;
|
|
case 269:
|
|
return 4509;
|
|
case 270:
|
|
return 4510;
|
|
case 271:
|
|
return 4511;
|
|
case 274:
|
|
return 4512;
|
|
case 275:
|
|
return 3273;
|
|
case 276:
|
|
return 4513;
|
|
case 277:
|
|
return 4514;
|
|
case 278:
|
|
return 4515;
|
|
case 279:
|
|
return 4516;
|
|
case 280:
|
|
return 4517;
|
|
case 281:
|
|
return 4518;
|
|
case 282:
|
|
return 4519;
|
|
case 283:
|
|
return 4520;
|
|
case 284:
|
|
return 4521;
|
|
case 285:
|
|
return 4522;
|
|
case 286:
|
|
return 4523;
|
|
case 287:
|
|
return 4524;
|
|
case 288:
|
|
return 4525;
|
|
case 289:
|
|
return 4526;
|
|
case 290:
|
|
return 4527;
|
|
case 291:
|
|
return 4528;
|
|
case 292:
|
|
return 4529;
|
|
case 293:
|
|
return 4530;
|
|
case 294:
|
|
return 4531;
|
|
case 295:
|
|
return 4532;
|
|
case 296:
|
|
return 4533;
|
|
case 297:
|
|
return 4534;
|
|
case 298:
|
|
return 4535;
|
|
case 299:
|
|
return 4536;
|
|
case 300:
|
|
return 4537;
|
|
case 301:
|
|
return 4538;
|
|
case 302:
|
|
return 4539;
|
|
case 303:
|
|
return 4540;
|
|
case 304:
|
|
return 3340;
|
|
case 305:
|
|
return 3341;
|
|
case 306:
|
|
return 3342;
|
|
case 307:
|
|
return 3343;
|
|
case 308:
|
|
return 3344;
|
|
case 309:
|
|
return 3345;
|
|
case 310:
|
|
return 3346;
|
|
case 311:
|
|
return 3348;
|
|
case 314:
|
|
return 4647;
|
|
default:
|
|
int num = 0;
|
|
if (tileCache.wall == (ushort) 168)
|
|
num = 2696;
|
|
if (tileCache.wall == (ushort) 169)
|
|
num = 2698;
|
|
if (tileCache.wall == (ushort) 226)
|
|
num = 3752;
|
|
if (tileCache.wall == (ushort) 227)
|
|
num = 3753;
|
|
if (tileCache.wall == (ushort) 228)
|
|
num = 3760;
|
|
if (tileCache.wall == (ushort) 229)
|
|
num = 3761;
|
|
if (tileCache.wall == (ushort) 230)
|
|
num = 3762;
|
|
if (tileCache.wall == (ushort) 142)
|
|
num = 2263;
|
|
if (tileCache.wall == (ushort) 143)
|
|
num = 2264;
|
|
if (tileCache.wall == (ushort) 144)
|
|
num = 2271;
|
|
if (tileCache.wall == (ushort) 149)
|
|
num = 2505;
|
|
if (tileCache.wall == (ushort) 150)
|
|
num = 2507;
|
|
if (tileCache.wall == (ushort) 151)
|
|
num = 2506;
|
|
if (tileCache.wall == (ushort) 152)
|
|
num = 2508;
|
|
if (tileCache.wall == (ushort) 245)
|
|
num = 4424;
|
|
if (tileCache.wall == (ushort) 315)
|
|
num = 4667;
|
|
if (tileCache.wall == (ushort) 1)
|
|
num = 26;
|
|
if (tileCache.wall == (ushort) 4)
|
|
num = 93;
|
|
if (tileCache.wall == (ushort) 5)
|
|
num = 130;
|
|
if (tileCache.wall == (ushort) 6)
|
|
num = 132;
|
|
if (tileCache.wall == (ushort) 7)
|
|
num = 135;
|
|
if (tileCache.wall == (ushort) 8)
|
|
num = 138;
|
|
if (tileCache.wall == (ushort) 9)
|
|
num = 140;
|
|
if (tileCache.wall == (ushort) 10)
|
|
num = 142;
|
|
if (tileCache.wall == (ushort) 11)
|
|
num = 144;
|
|
if (tileCache.wall == (ushort) 12)
|
|
num = 146;
|
|
if (tileCache.wall == (ushort) 14)
|
|
num = 330;
|
|
if (tileCache.wall == (ushort) 224)
|
|
num = 3472;
|
|
if (tileCache.wall == (ushort) 177)
|
|
num = 3067;
|
|
if (tileCache.wall == (ushort) 167)
|
|
num = 2691;
|
|
if (tileCache.wall == (ushort) 60)
|
|
num = 3584;
|
|
if (tileCache.wall == (ushort) 231)
|
|
num = 3952;
|
|
if (tileCache.wall == (ushort) 232)
|
|
num = 3954;
|
|
if (tileCache.wall == (ushort) 225)
|
|
num = 3751;
|
|
if (tileCache.wall == (ushort) 233)
|
|
num = 3956;
|
|
if (tileCache.wall == (ushort) 234)
|
|
num = 4052;
|
|
if (tileCache.wall == (ushort) 235)
|
|
num = 4053;
|
|
if (tileCache.wall == (ushort) 236)
|
|
num = 4140;
|
|
if (tileCache.wall == (ushort) 312)
|
|
num = 4565;
|
|
if (tileCache.wall == (ushort) 313)
|
|
num = 4548;
|
|
if (tileCache.wall == (ushort) 179)
|
|
num = 3083;
|
|
if (tileCache.wall == (ushort) 183)
|
|
num = 3082;
|
|
if (tileCache.wall == (ushort) 181)
|
|
num = 3089;
|
|
if (tileCache.wall == (ushort) 184)
|
|
num = 3088;
|
|
if (tileCache.wall == (ushort) 186)
|
|
num = 3238;
|
|
if (tileCache.wall >= (ushort) 153 && tileCache.wall <= (ushort) 166)
|
|
{
|
|
switch (tileCache.wall)
|
|
{
|
|
case 153:
|
|
num = 2677;
|
|
break;
|
|
case 154:
|
|
num = 2679;
|
|
break;
|
|
case 155:
|
|
num = 2681;
|
|
break;
|
|
case 156:
|
|
num = 2683;
|
|
break;
|
|
case 157:
|
|
num = 2678;
|
|
break;
|
|
case 158:
|
|
num = 2680;
|
|
break;
|
|
case 159:
|
|
num = 2682;
|
|
break;
|
|
case 160:
|
|
num = 2684;
|
|
break;
|
|
case 161:
|
|
num = 2686;
|
|
break;
|
|
case 162:
|
|
num = 2688;
|
|
break;
|
|
case 163:
|
|
num = 2690;
|
|
break;
|
|
case 164:
|
|
num = 2685;
|
|
break;
|
|
case 165:
|
|
num = 2687;
|
|
break;
|
|
case 166:
|
|
num = 2689;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.wall == (ushort) 136)
|
|
num = 2169;
|
|
if (tileCache.wall == (ushort) 137)
|
|
num = 2170;
|
|
if (tileCache.wall == (ushort) 172)
|
|
num = 2788;
|
|
if (tileCache.wall == (ushort) 242)
|
|
num = 4279;
|
|
if (tileCache.wall == (ushort) 243)
|
|
num = 4280;
|
|
if (tileCache.wall == (ushort) 145)
|
|
num = 2333;
|
|
if (tileCache.wall == (ushort) 16)
|
|
num = 30;
|
|
if (tileCache.wall == (ushort) 17)
|
|
num = 135;
|
|
if (tileCache.wall == (ushort) 18)
|
|
num = 138;
|
|
if (tileCache.wall == (ushort) 19)
|
|
num = 140;
|
|
if (tileCache.wall == (ushort) 20)
|
|
num = 330;
|
|
if (tileCache.wall == (ushort) 21)
|
|
num = 392;
|
|
if (tileCache.wall == (ushort) 86 || tileCache.wall == (ushort) 108)
|
|
num = 1126;
|
|
if (tileCache.wall == (ushort) 173)
|
|
num = 2789;
|
|
if (tileCache.wall == (ushort) 174)
|
|
num = 2790;
|
|
if (tileCache.wall == (ushort) 175)
|
|
num = 2791;
|
|
if (tileCache.wall == (ushort) 176)
|
|
num = 2861;
|
|
if (tileCache.wall == (ushort) 182)
|
|
num = 3101;
|
|
if (tileCache.wall == (ushort) 133)
|
|
num = 2158;
|
|
if (tileCache.wall == (ushort) 134)
|
|
num = 2159;
|
|
if (tileCache.wall == (ushort) 135)
|
|
num = 2160;
|
|
else if (tileCache.wall == (ushort) 113)
|
|
num = 1726;
|
|
else if (tileCache.wall == (ushort) 114)
|
|
num = 1728;
|
|
else if (tileCache.wall == (ushort) 115)
|
|
num = 1730;
|
|
else if (tileCache.wall == (ushort) 146)
|
|
num = 2432;
|
|
else if (tileCache.wall == (ushort) 147)
|
|
num = 2433;
|
|
else if (tileCache.wall == (ushort) 148)
|
|
num = 2434;
|
|
if (tileCache.wall >= (ushort) 116 && tileCache.wall <= (ushort) 125)
|
|
num = 1948 + (int) tileCache.wall - 116;
|
|
if (tileCache.wall >= (ushort) 126 && tileCache.wall <= (ushort) 132)
|
|
num = 2008 + (int) tileCache.wall - 126;
|
|
if (tileCache.wall == (ushort) 22)
|
|
num = 417;
|
|
if (tileCache.wall == (ushort) 23)
|
|
num = 418;
|
|
if (tileCache.wall == (ushort) 24)
|
|
num = 419;
|
|
if (tileCache.wall == (ushort) 25)
|
|
num = 420;
|
|
if (tileCache.wall == (ushort) 26)
|
|
num = 421;
|
|
if (tileCache.wall == (ushort) 29)
|
|
num = 587;
|
|
if (tileCache.wall == (ushort) 30)
|
|
num = 592;
|
|
if (tileCache.wall == (ushort) 31)
|
|
num = 595;
|
|
if (tileCache.wall == (ushort) 32)
|
|
num = 605;
|
|
if (tileCache.wall == (ushort) 33)
|
|
num = 606;
|
|
if (tileCache.wall == (ushort) 34)
|
|
num = 608;
|
|
if (tileCache.wall == (ushort) 35)
|
|
num = 610;
|
|
if (tileCache.wall == (ushort) 36)
|
|
num = 615;
|
|
if (tileCache.wall == (ushort) 37)
|
|
num = 616;
|
|
if (tileCache.wall == (ushort) 38)
|
|
num = 617;
|
|
if (tileCache.wall == (ushort) 39)
|
|
num = 618;
|
|
if (tileCache.wall == (ushort) 41)
|
|
num = 622;
|
|
if (tileCache.wall == (ushort) 42)
|
|
num = 623;
|
|
if (tileCache.wall == (ushort) 43)
|
|
num = 624;
|
|
if (tileCache.wall == (ushort) 44)
|
|
num = 663;
|
|
if (tileCache.wall == (ushort) 45)
|
|
num = 720;
|
|
if (tileCache.wall == (ushort) 46)
|
|
num = 721;
|
|
if (tileCache.wall == (ushort) 47)
|
|
num = 722;
|
|
if (tileCache.wall == (ushort) 66)
|
|
num = 745;
|
|
if (tileCache.wall == (ushort) 67)
|
|
num = 746;
|
|
if (tileCache.wall == (ushort) 68)
|
|
num = 747;
|
|
if (tileCache.wall == (ushort) 84)
|
|
num = 884;
|
|
if (tileCache.wall == (ushort) 72)
|
|
num = 750;
|
|
if (tileCache.wall == (ushort) 73)
|
|
num = 752;
|
|
if (tileCache.wall == (ushort) 74)
|
|
num = 764;
|
|
if (tileCache.wall == (ushort) 85)
|
|
num = 927;
|
|
if (tileCache.wall == (ushort) 75)
|
|
num = 768;
|
|
if (tileCache.wall == (ushort) 76)
|
|
num = 769;
|
|
if (tileCache.wall == (ushort) 77)
|
|
num = 770;
|
|
if (tileCache.wall == (ushort) 82)
|
|
num = 825;
|
|
if (tileCache.wall == (ushort) 27)
|
|
num = 479;
|
|
if (tileCache.wall == (ushort) 106)
|
|
num = 1447;
|
|
if (tileCache.wall == (ushort) 107)
|
|
num = 1448;
|
|
if (tileCache.wall == (ushort) 109)
|
|
num = 1590;
|
|
if (tileCache.wall == (ushort) 110)
|
|
num = 1592;
|
|
if (tileCache.wall == (ushort) 111)
|
|
num = 1594;
|
|
if (tileCache.wall == (ushort) 78)
|
|
num = 1723;
|
|
if (tileCache.wall == (ushort) 87 || tileCache.wall == (ushort) 112)
|
|
num = 1102;
|
|
if (tileCache.wall == (ushort) 94 || tileCache.wall == (ushort) 100)
|
|
num = 1378;
|
|
if (tileCache.wall == (ushort) 95 || tileCache.wall == (ushort) 101)
|
|
num = 1379;
|
|
if (tileCache.wall == (ushort) 96 || tileCache.wall == (ushort) 102)
|
|
num = 1380;
|
|
if (tileCache.wall == (ushort) 97 || tileCache.wall == (ushort) 103)
|
|
num = 1381;
|
|
if (tileCache.wall == (ushort) 98 || tileCache.wall == (ushort) 104)
|
|
num = 1382;
|
|
if (tileCache.wall == (ushort) 99 || tileCache.wall == (ushort) 105)
|
|
num = 1383;
|
|
if (tileCache.wall == (ushort) 241)
|
|
num = 4260;
|
|
if (tileCache.wall >= (ushort) 88 && tileCache.wall <= (ushort) 93)
|
|
num = 1267 + (int) tileCache.wall - 88;
|
|
if (tileCache.wall >= (ushort) 138 && tileCache.wall <= (ushort) 141)
|
|
num = 2210 + (int) tileCache.wall - 138;
|
|
return num;
|
|
}
|
|
}
|
|
|
|
private static void KillWall_MakeWallDust(int i, int j, Tile tileCache)
|
|
{
|
|
int Type = 0;
|
|
switch (tileCache.wall)
|
|
{
|
|
case 3:
|
|
case 246:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 1 : 14;
|
|
break;
|
|
case 7:
|
|
case 17:
|
|
case 94:
|
|
case 95:
|
|
case 100:
|
|
case 101:
|
|
Type = 275;
|
|
break;
|
|
case 8:
|
|
case 18:
|
|
case 98:
|
|
case 99:
|
|
case 104:
|
|
case 105:
|
|
Type = 276;
|
|
break;
|
|
case 9:
|
|
case 19:
|
|
case 96:
|
|
case 97:
|
|
case 102:
|
|
case 103:
|
|
Type = 277;
|
|
break;
|
|
case 15:
|
|
case 247:
|
|
Type = 38;
|
|
break;
|
|
case 22:
|
|
case 28:
|
|
case 248:
|
|
Type = 51;
|
|
break;
|
|
case 40:
|
|
case 249:
|
|
Type = 51;
|
|
break;
|
|
case 48:
|
|
case 49:
|
|
case 50:
|
|
case 51:
|
|
case 52:
|
|
case 53:
|
|
case 54:
|
|
case 55:
|
|
case 56:
|
|
case 57:
|
|
case 58:
|
|
case 185:
|
|
case 250:
|
|
case 251:
|
|
case 252:
|
|
case 253:
|
|
case 254:
|
|
case (ushort) byte.MaxValue:
|
|
case 256:
|
|
case 257:
|
|
case 258:
|
|
case 259:
|
|
case 260:
|
|
case 274:
|
|
case 314:
|
|
Type = 1;
|
|
break;
|
|
case 59:
|
|
case 61:
|
|
case 261:
|
|
case 262:
|
|
Type = 0;
|
|
break;
|
|
case 62:
|
|
case 263:
|
|
Type = 0;
|
|
break;
|
|
case 69:
|
|
case 264:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 17 : 14;
|
|
break;
|
|
case 70:
|
|
case 265:
|
|
Type = 47;
|
|
break;
|
|
case 71:
|
|
case 266:
|
|
Type = 80;
|
|
break;
|
|
case 79:
|
|
case 267:
|
|
Type = 37;
|
|
break;
|
|
case 81:
|
|
case 268:
|
|
Type = 123;
|
|
break;
|
|
case 83:
|
|
case 234:
|
|
case 269:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 117 : 1;
|
|
break;
|
|
case 170:
|
|
case 171:
|
|
case 270:
|
|
case 271:
|
|
Type = 0;
|
|
break;
|
|
case 187:
|
|
case 275:
|
|
Type = 0;
|
|
break;
|
|
case 188:
|
|
case 189:
|
|
case 190:
|
|
case 191:
|
|
case 276:
|
|
case 277:
|
|
case 278:
|
|
case 279:
|
|
Type = 37;
|
|
break;
|
|
case 192:
|
|
case 193:
|
|
case 194:
|
|
case 195:
|
|
case 280:
|
|
case 281:
|
|
case 282:
|
|
case 283:
|
|
Type = 117;
|
|
break;
|
|
case 196:
|
|
case 197:
|
|
case 198:
|
|
case 199:
|
|
case 284:
|
|
case 285:
|
|
case 286:
|
|
case 287:
|
|
Type = 0;
|
|
break;
|
|
case 200:
|
|
case 202:
|
|
case 288:
|
|
case 290:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 70 : 69;
|
|
break;
|
|
case 201:
|
|
case 289:
|
|
Type = 17;
|
|
break;
|
|
case 203:
|
|
case 291:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 68 : 69;
|
|
break;
|
|
case 204:
|
|
case 205:
|
|
case 207:
|
|
case 292:
|
|
case 293:
|
|
case 295:
|
|
Type = 0;
|
|
break;
|
|
case 206:
|
|
case 294:
|
|
Type = 1;
|
|
break;
|
|
case 208:
|
|
case 209:
|
|
case 210:
|
|
case 211:
|
|
case 296:
|
|
case 297:
|
|
case 298:
|
|
case 299:
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 125 : 155;
|
|
break;
|
|
case 212:
|
|
case 213:
|
|
case 214:
|
|
case 215:
|
|
case 300:
|
|
case 301:
|
|
case 302:
|
|
case 303:
|
|
Type = 1;
|
|
break;
|
|
case 216:
|
|
case 304:
|
|
Type = 0;
|
|
break;
|
|
case 217:
|
|
case 305:
|
|
Type = 37;
|
|
break;
|
|
case 218:
|
|
case 306:
|
|
Type = 155;
|
|
break;
|
|
case 219:
|
|
case 307:
|
|
Type = 17;
|
|
break;
|
|
case 220:
|
|
case 308:
|
|
Type = 37;
|
|
break;
|
|
case 221:
|
|
case 309:
|
|
Type = 155;
|
|
break;
|
|
case 222:
|
|
case 310:
|
|
Type = 37;
|
|
break;
|
|
case 223:
|
|
case 311:
|
|
Type = 0;
|
|
break;
|
|
case 231:
|
|
Type = 8;
|
|
break;
|
|
case 232:
|
|
Type = 82;
|
|
break;
|
|
case 233:
|
|
Type = 18;
|
|
break;
|
|
case 237:
|
|
Type = 6;
|
|
break;
|
|
case 238:
|
|
Type = 61;
|
|
break;
|
|
case 239:
|
|
Type = 242;
|
|
break;
|
|
case 240:
|
|
Type = 135;
|
|
break;
|
|
case 312:
|
|
case 313:
|
|
case 315:
|
|
Type = -1;
|
|
break;
|
|
}
|
|
if (tileCache.wall == (ushort) 148)
|
|
Type = -1;
|
|
if (tileCache.wall == (ushort) 1 || tileCache.wall == (ushort) 5 || tileCache.wall == (ushort) 6 || tileCache.wall == (ushort) 107)
|
|
Type = 1;
|
|
if (tileCache.wall == (ushort) 35)
|
|
Type = 37;
|
|
if (tileCache.wall == (ushort) 4 || tileCache.wall == (ushort) 106)
|
|
Type = 7;
|
|
if (tileCache.wall == (ushort) 12)
|
|
Type = 9;
|
|
if (tileCache.wall == (ushort) 10)
|
|
Type = 10;
|
|
if (tileCache.wall == (ushort) 11)
|
|
Type = 11;
|
|
if (tileCache.wall == (ushort) 21)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 34)
|
|
Type = 32;
|
|
if (tileCache.wall == (ushort) 225)
|
|
Type = 1;
|
|
if (tileCache.wall == (ushort) 145)
|
|
Type = 8;
|
|
if (tileCache.wall == (ushort) 23)
|
|
Type = 38;
|
|
if (tileCache.wall == (ushort) 24)
|
|
Type = 36;
|
|
if (tileCache.wall == (ushort) 25)
|
|
Type = 48;
|
|
if (tileCache.wall == (ushort) 179 || tileCache.wall == (ushort) 178 || tileCache.wall == (ushort) 183)
|
|
Type = 236;
|
|
if (tileCache.wall == (ushort) 181 || tileCache.wall == (ushort) 180 || tileCache.wall == (ushort) 184)
|
|
Type = 240;
|
|
if (tileCache.wall == (ushort) 113)
|
|
Type = 189;
|
|
if (tileCache.wall == (ushort) 114)
|
|
Type = 190;
|
|
if (tileCache.wall == (ushort) 115)
|
|
Type = 191;
|
|
if (tileCache.wall == (ushort) 177 || tileCache.wall == (ushort) 13)
|
|
Type = 25;
|
|
if (tileCache.wall == (ushort) 186)
|
|
Type = WorldGen.genRand.Next(68, 71);
|
|
if (tileCache.wall == (ushort) 142)
|
|
Type = 210;
|
|
if (tileCache.wall == (ushort) 143)
|
|
Type = 210;
|
|
if (tileCache.wall == (ushort) 224)
|
|
Type = 265;
|
|
if (tileCache.wall == (ushort) 173)
|
|
Type = 128;
|
|
if (tileCache.wall == (ushort) 174)
|
|
Type = 117;
|
|
if (tileCache.wall == (ushort) 175)
|
|
Type = 42;
|
|
if (tileCache.wall == (ushort) 176)
|
|
Type = 226;
|
|
if (tileCache.wall == (ushort) 182)
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 23 : 6;
|
|
if (tileCache.wall >= (ushort) 153 && tileCache.wall <= (ushort) 166)
|
|
{
|
|
switch (tileCache.wall)
|
|
{
|
|
case 153:
|
|
case 157:
|
|
Type = 138;
|
|
break;
|
|
case 154:
|
|
case 158:
|
|
Type = 86;
|
|
break;
|
|
case 155:
|
|
case 159:
|
|
Type = 91;
|
|
break;
|
|
case 156:
|
|
case 160:
|
|
Type = 89;
|
|
break;
|
|
case 161:
|
|
case 164:
|
|
Type = 90;
|
|
break;
|
|
case 162:
|
|
case 165:
|
|
Type = 88;
|
|
break;
|
|
case 163:
|
|
case 166:
|
|
Type = 87;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.wall == (ushort) 26 || tileCache.wall == (ushort) 30)
|
|
Type = 49;
|
|
if (tileCache.wall == (ushort) 29 || tileCache.wall == (ushort) 32)
|
|
Type = 50;
|
|
if (tileCache.wall == (ushort) 31)
|
|
Type = 51;
|
|
if (tileCache.wall == (ushort) 14 || tileCache.wall == (ushort) 20)
|
|
Type = 109;
|
|
if (tileCache.wall == (ushort) 241)
|
|
Type = 286;
|
|
if (tileCache.wall >= (ushort) 88 && tileCache.wall <= (ushort) 93)
|
|
{
|
|
Type = 86 + (int) tileCache.wall - 88;
|
|
if (tileCache.wall == (ushort) 93)
|
|
Type = WorldGen.genRand.Next(88, 94);
|
|
}
|
|
if (tileCache.wall == (ushort) 33)
|
|
Type = 14;
|
|
if (tileCache.wall == (ushort) 41)
|
|
Type = 77;
|
|
if (tileCache.wall == (ushort) 42)
|
|
Type = 78;
|
|
if (tileCache.wall == (ushort) 43)
|
|
Type = 78;
|
|
if (tileCache.wall == (ushort) 36)
|
|
Type = 26;
|
|
if (tileCache.wall == (ushort) 37)
|
|
Type = 32;
|
|
if (tileCache.wall == (ushort) 38)
|
|
Type = 2;
|
|
if (tileCache.wall == (ushort) 39)
|
|
Type = 1;
|
|
if (tileCache.wall == (ushort) 45)
|
|
Type = 81;
|
|
if (tileCache.wall == (ushort) 46)
|
|
Type = 83;
|
|
if (tileCache.wall == (ushort) 47)
|
|
Type = 84;
|
|
if (tileCache.wall == (ushort) 85)
|
|
Type = 126;
|
|
if (tileCache.wall == (ushort) 63)
|
|
Type = 3;
|
|
if (tileCache.wall == (ushort) 65)
|
|
Type = 3;
|
|
if (tileCache.wall == (ushort) 66)
|
|
Type = 3;
|
|
if (tileCache.wall == (ushort) 68)
|
|
Type = 3;
|
|
if (tileCache.wall == (ushort) 64)
|
|
Type = 40;
|
|
if (tileCache.wall == (ushort) 67)
|
|
Type = 40;
|
|
if (tileCache.wall == (ushort) 84)
|
|
Type = 80;
|
|
if (tileCache.wall == (ushort) 60)
|
|
Type = 3;
|
|
if (tileCache.wall == (ushort) 167)
|
|
Type = 81;
|
|
if (tileCache.wall == (ushort) 147)
|
|
Type = 51;
|
|
if (tileCache.wall == (ushort) 146)
|
|
Type = 9;
|
|
if (tileCache.wall == (ushort) 109)
|
|
Type = 144;
|
|
if (tileCache.wall == (ushort) 110)
|
|
Type = 145;
|
|
if (tileCache.wall == (ushort) 111)
|
|
Type = 146;
|
|
if (tileCache.wall == (ushort) 86 || tileCache.wall == (ushort) 108)
|
|
Type = 147;
|
|
if (tileCache.wall == (ushort) 87)
|
|
Type = 148;
|
|
if (tileCache.wall == (ushort) 136)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 137)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 168)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 169)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 172)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 226)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 227)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 242)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 243)
|
|
Type = 13;
|
|
if (tileCache.wall == (ushort) 72)
|
|
Type = 40;
|
|
if (tileCache.wall == (ushort) 73)
|
|
Type = 16;
|
|
if (tileCache.wall == (ushort) 74 || tileCache.wall == (ushort) 80)
|
|
Type = 26;
|
|
if (tileCache.wall == (ushort) 144)
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 118 : 10;
|
|
if (tileCache.wall == (ushort) 75)
|
|
Type = 26;
|
|
if (tileCache.wall == (ushort) 76)
|
|
Type = 4;
|
|
if (tileCache.wall == (ushort) 77 || tileCache.wall == (ushort) 81)
|
|
Type = 5;
|
|
if (tileCache.wall == (ushort) 78 || tileCache.wall == (ushort) 244)
|
|
Type = 7;
|
|
if (tileCache.wall == (ushort) 82)
|
|
Type = 36;
|
|
if (tileCache.wall == (ushort) 27)
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 1 : 7;
|
|
if (tileCache.wall == (ushort) 138)
|
|
Type = 77;
|
|
if (tileCache.wall == (ushort) 139)
|
|
Type = 78;
|
|
if (tileCache.wall == (ushort) 140)
|
|
Type = 79;
|
|
if (tileCache.wall == (ushort) 141)
|
|
Type = 126;
|
|
if (tileCache.wall == (ushort) 149 || tileCache.wall == (ushort) 150)
|
|
Type = 214;
|
|
if (tileCache.wall == (ushort) 151 || tileCache.wall == (ushort) 152)
|
|
Type = 215;
|
|
if (tileCache.wall == (ushort) 245)
|
|
Type = 195;
|
|
if (tileCache.wall == (ushort) 44)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 66, Alpha: 100, newColor: new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB), Scale: 0.75f);
|
|
Main.dust[index].noGravity = true;
|
|
}
|
|
else
|
|
{
|
|
if (tileCache.wall >= (ushort) 133 && tileCache.wall <= (ushort) 135 || tileCache.wall >= (ushort) 116 && tileCache.wall <= (ushort) 125 || tileCache.wall >= (ushort) 126 && tileCache.wall <= (ushort) 132)
|
|
return;
|
|
if (tileCache.wall == (ushort) 76)
|
|
{
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type, Alpha: 75, newColor: new Color(0, 80, (int) byte.MaxValue, 100), Scale: 0.75f);
|
|
}
|
|
else
|
|
{
|
|
if (Type < 0)
|
|
return;
|
|
Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void LaunchRocket(int x, int y)
|
|
{
|
|
int frameY = (int) Main.tile[x, y].frameY;
|
|
int num1 = 0;
|
|
while (frameY >= 40)
|
|
{
|
|
frameY -= 40;
|
|
++num1;
|
|
}
|
|
if (frameY == 18)
|
|
--y;
|
|
Vector2 vector2 = new Vector2((float) (x * 16 + 8), (float) (y * 16 + 4));
|
|
int Type = 167 + num1;
|
|
int Damage = 150;
|
|
int num2 = 7;
|
|
int index = Projectile.NewProjectile(vector2.X, vector2.Y + 2f, 0.0f, -8f, Type, Damage, (float) num2, Main.myPlayer);
|
|
Main.projectile[index].originatedFromActivableTile = true;
|
|
Main.tile[x, y].active(false);
|
|
Main.tile[x, y + 1].active(false);
|
|
NetMessage.SendTileSquare(-1, x - 1, y, 3);
|
|
}
|
|
|
|
public static void LaunchRocketSmall(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].frameX == (short) 18)
|
|
--x;
|
|
if (Main.tile[x, y].frameY == (short) 18)
|
|
--y;
|
|
Vector2 vector2 = new Vector2((float) (x * 16 + 16), (float) (y * 16));
|
|
int Type = 415 + Main.rand.Next(4);
|
|
int Damage = 0;
|
|
int num = 0;
|
|
int index = Projectile.NewProjectile(vector2.X, vector2.Y + 2f, 0.0f, -8f, Type, Damage, (float) num, Main.myPlayer);
|
|
Main.projectile[index].originatedFromActivableTile = true;
|
|
}
|
|
|
|
public static bool CanKillTile(int i, int j, WorldGen.SpecialKillTileContext context)
|
|
{
|
|
if (context == WorldGen.SpecialKillTileContext.MowingTheGrass)
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return false;
|
|
if (tile.type == (ushort) 2 || tile.type == (ushort) 109)
|
|
return true;
|
|
}
|
|
return WorldGen.CanKillTile(i, j);
|
|
}
|
|
|
|
public static bool CanKillTile(int i, int j) => WorldGen.CanKillTile(i, j, out bool _);
|
|
|
|
public static bool CanKillTile(int i, int j, out bool blockDamaged)
|
|
{
|
|
blockDamaged = false;
|
|
if (i < 0 || j < 0 || i >= Main.maxTilesX || j >= Main.maxTilesY)
|
|
return false;
|
|
Tile t1 = Main.tile[i, j];
|
|
Tile tile = (Tile) null;
|
|
if (t1 == null || !t1.active())
|
|
return false;
|
|
if (j >= 1)
|
|
tile = Main.tile[i, j - 1];
|
|
if (tile != null && tile.active())
|
|
{
|
|
int type = (int) tile.type;
|
|
if (TileID.Sets.IsATreeTrunk[type] && (int) t1.type != type && (tile.frameX != (short) 66 || tile.frameY < (short) 0 || tile.frameY > (short) 44) && (tile.frameX != (short) 88 || tile.frameY < (short) 66 || tile.frameY > (short) 110) && tile.frameY < (short) 198)
|
|
return false;
|
|
switch (type)
|
|
{
|
|
case 21:
|
|
case 26:
|
|
case 72:
|
|
case 77:
|
|
case 88:
|
|
case 467:
|
|
case 488:
|
|
if ((int) t1.type != type)
|
|
return false;
|
|
break;
|
|
case 80:
|
|
if ((int) t1.type != type)
|
|
{
|
|
switch ((int) tile.frameX / 18)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 4:
|
|
case 5:
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
break;
|
|
case 323:
|
|
if ((int) t1.type != type && (tile.frameX == (short) 66 || tile.frameX == (short) 220))
|
|
return false;
|
|
break;
|
|
}
|
|
}
|
|
switch (t1.type)
|
|
{
|
|
case 10:
|
|
if (WorldGen.IsLockedDoor(t1))
|
|
{
|
|
blockDamaged = true;
|
|
return false;
|
|
}
|
|
break;
|
|
case 21:
|
|
case 467:
|
|
if (!Chest.CanDestroyChest(i - (int) t1.frameX / 18 % 2, j - (int) t1.frameY / 18))
|
|
return false;
|
|
break;
|
|
case 88:
|
|
if (!Chest.CanDestroyChest(i - (int) t1.frameX / 18 % 3, j - (int) t1.frameY / 18))
|
|
return false;
|
|
break;
|
|
case 138:
|
|
if (WorldGen.CheckBoulderChest(i, j))
|
|
{
|
|
blockDamaged = true;
|
|
return false;
|
|
}
|
|
break;
|
|
case 235:
|
|
int num = i - (int) t1.frameX % 54 / 18;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
Tile t2 = Main.tile[num + index, j - 1];
|
|
if (t2.active() && WorldGen.IsAContainer(t2))
|
|
{
|
|
blockDamaged = true;
|
|
return false;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool IsTileReplacable(int x, int y)
|
|
{
|
|
Tile tile1 = Main.tile[x, y];
|
|
if (y >= 1)
|
|
{
|
|
Tile tile2 = Main.tile[x, y - 1];
|
|
if (tile1 == null || tile2 == null)
|
|
return false;
|
|
if (tile2.active())
|
|
{
|
|
if (tile2.type == (ushort) 80 || tile2.type == (ushort) 488)
|
|
return false;
|
|
if (TileID.Sets.PreventsTileReplaceIfOnTopOfIt[(int) tile2.type] && (int) tile1.type != (int) tile2.type)
|
|
return TileID.Sets.IsATreeTrunk[(int) tile2.type] ? tile2.frameX == (short) 66 && tile2.frameY >= (short) 0 && tile2.frameY <= (short) 44 || tile2.frameX == (short) 88 && tile2.frameY >= (short) 66 && tile2.frameY <= (short) 110 || tile2.frameY >= (short) 198 : tile2.type == (ushort) 323 && tile2.frameX != (short) 66 && tile2.frameX != (short) 220;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static int CheckTileBreakability(int x, int y)
|
|
{
|
|
Tile t1 = Main.tile[x, y];
|
|
if (y >= 1 && y <= Main.maxTilesY - 1)
|
|
{
|
|
Tile t2 = Main.tile[x, y - 1];
|
|
Tile tile = Main.tile[x, y + 1];
|
|
if (tile != null && tile.active() && WorldGen.IsLockedDoor(x, y + 1))
|
|
return 2;
|
|
if (!Main.tileSolid[(int) t1.type] && !Main.tileSolidTop[(int) t1.type])
|
|
return 0;
|
|
if (t2.active())
|
|
{
|
|
if (((!TileID.Sets.PreventsTileRemovalIfOnTopOfIt[(int) t2.type] ? 0 : ((int) t1.type != (int) t2.type ? 1 : 0)) | (WorldGen.IsLockedDoor(x, y - 1) ? 1 : 0) | (t2.type != (ushort) 77 || t1.type == (ushort) 77 ? 0 : (!Main.hardMode ? 1 : 0)) | (!WorldGen.IsAContainer(t2) ? 0 : (!WorldGen.IsAContainer(t1) ? 1 : 0))) != 0)
|
|
return TileID.Sets.IsATreeTrunk[(int) t2.type] ? (t2.frameX == (short) 66 && t2.frameY >= (short) 0 && t2.frameY <= (short) 44 || t2.frameX == (short) 88 && t2.frameY >= (short) 66 && t2.frameY <= (short) 110 || t2.frameY >= (short) 198 ? 0 : 2) : (t2.type == (ushort) 323 && t2.frameX != (short) 66 && t2.frameX != (short) 220 ? 0 : 2);
|
|
if (t2.type == (ushort) 80 && (int) t2.type != (int) t1.type)
|
|
{
|
|
switch ((int) t2.frameX / 18)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 4:
|
|
case 5:
|
|
return 2;
|
|
}
|
|
}
|
|
if (t1.type == (ushort) 10 && t1.frameY >= (short) 594 && t1.frameY <= (short) 646)
|
|
return 1;
|
|
if (t1.type == (ushort) 138 || t1.type == (ushort) 484)
|
|
return WorldGen.CheckBoulderChest(x, y) ? 1 : 0;
|
|
}
|
|
if (t1.type == (ushort) 235)
|
|
{
|
|
int frameX = (int) t1.frameX;
|
|
int num = x - frameX % 54 / 18;
|
|
for (int index = 0; index < 3; ++index)
|
|
{
|
|
if (Main.tile[num + index, y - 1].active() && WorldGen.IsAContainer(Main.tile[num + index, y - 1]))
|
|
return 2;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static bool CheckTileBreakability2_ShouldTileSurvive(int x, int y)
|
|
{
|
|
if (Main.netMode == 1)
|
|
return false;
|
|
Tile tile = Main.tile[x, y];
|
|
if (TileID.Sets.BasicChest[(int) tile.type])
|
|
{
|
|
int num = (int) tile.frameX / 18;
|
|
int Y = y - (int) tile.frameY / 18;
|
|
while (num > 1)
|
|
num -= 2;
|
|
if (!Chest.DestroyChest(x - num, Y))
|
|
return true;
|
|
}
|
|
if (tile.type == (ushort) 88)
|
|
{
|
|
int num1 = (int) tile.frameX / 18;
|
|
int Y = y - (int) tile.frameY / 18;
|
|
int num2 = num1 % 3;
|
|
if (!Chest.DestroyChest(x - num2, Y))
|
|
return true;
|
|
}
|
|
if (tile.type == (ushort) 470)
|
|
return !TEDisplayDoll.IsBreakable(x, y);
|
|
return tile.type == (ushort) 475 && !TEHatRack.IsBreakable(x, y);
|
|
}
|
|
|
|
public static bool ReplaceWall(int x, int y, ushort targetWall)
|
|
{
|
|
if (targetWall >= (ushort) 316)
|
|
return false;
|
|
Tile tileCache = Main.tile[x, y];
|
|
if (tileCache.wall == (ushort) 0 || targetWall == (ushort) 0 || WorldGen.KillWall_CheckFailure(false, tileCache))
|
|
return false;
|
|
int num = 10;
|
|
for (int index = 0; index < num; ++index)
|
|
WorldGen.KillWall_MakeWallDust(x, y, tileCache);
|
|
WorldGen.KillWall_PlaySounds(x, y, tileCache);
|
|
WorldGen.KillWall_DropItems(x, y, tileCache);
|
|
tileCache.wall = targetWall;
|
|
tileCache.wallColor((byte) 0);
|
|
WorldGen.SquareWallFrame(x, y);
|
|
return true;
|
|
}
|
|
|
|
public static bool ReplaceTile(int x, int y, ushort targetType, int targetStyle)
|
|
{
|
|
Tile tileSafely = Framing.GetTileSafely(x, y);
|
|
if (!WorldGen.WouldTileReplacementWork(targetType, x, y) || !WorldGen.IsTileReplacable(x, y))
|
|
return false;
|
|
WorldGen.MoveReplaceTileAnchor(ref x, ref y, targetType, tileSafely);
|
|
int tileDustAmount = WorldGen.KillTile_GetTileDustAmount(false, tileSafely);
|
|
for (int index = 0; index < tileDustAmount; ++index)
|
|
WorldGen.KillTile_MakeTileDust(x, y, tileSafely);
|
|
WorldGen.KillTile_PlaySounds(x, y, false, tileSafely);
|
|
WorldGen.KillTile_DropItems(x, y, tileSafely, true);
|
|
WorldGen.AttemptFossilShattering(x, y, tileSafely, false);
|
|
WorldGen.ReplaceTIle_DoActualReplacement(targetType, targetStyle, x, y, tileSafely);
|
|
return true;
|
|
}
|
|
|
|
private static void ReplaceTIle_DoActualReplacement(
|
|
ushort targetType,
|
|
int targetStyle,
|
|
int topLeftX,
|
|
int topLeftY,
|
|
Tile t)
|
|
{
|
|
if (TileID.Sets.BasicChest[(int) targetType])
|
|
{
|
|
if (WorldGen.IsChestRigged(topLeftX, topLeftY) && Main.netMode != 1)
|
|
{
|
|
Wiring.HitSwitch(topLeftX, topLeftY);
|
|
NetMessage.SendData(59, number: topLeftX, number2: ((float) topLeftY));
|
|
}
|
|
WorldGen.ReplaceTile_DoActualReplacement_Area(targetType, targetStyle, topLeftX, topLeftY, 2, 2);
|
|
}
|
|
else if (TileID.Sets.BasicDresser[(int) targetType])
|
|
WorldGen.ReplaceTile_DoActualReplacement_Area(targetType, targetStyle, topLeftX, topLeftY, 3, 2);
|
|
else
|
|
WorldGen.ReplaceTile_DoActualReplacement_Single(targetType, targetStyle, topLeftX, topLeftY, t);
|
|
}
|
|
|
|
private static void ReplaceTile_DoActualReplacement_Single(
|
|
ushort targetType,
|
|
int targetStyle,
|
|
int topLeftX,
|
|
int topLeftY,
|
|
Tile t)
|
|
{
|
|
WorldGen.ReplaceTile_EliminateNaturalExtras(topLeftX, topLeftY);
|
|
int type = (int) t.type;
|
|
t.type = targetType;
|
|
if (TileID.Sets.Platforms[(int) t.type])
|
|
t.frameY = (short) (targetStyle * 18);
|
|
t.color((byte) 0);
|
|
bool flag = !WorldGen.CanPoundTile(topLeftX, topLeftY);
|
|
if (TileID.Sets.Platforms[type] && TileID.Sets.Platforms[(int) t.type])
|
|
flag = false;
|
|
if (flag)
|
|
{
|
|
t.slope((byte) 0);
|
|
t.halfBrick(false);
|
|
}
|
|
WorldGen.SquareTileFrame(topLeftX, topLeftY);
|
|
}
|
|
|
|
private static void ReplaceTile_EliminateNaturalExtras(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y, 2))
|
|
return;
|
|
if (Main.tile[x, y - 1] != null && Main.tile[x, y - 1].active() && (TileID.Sets.ReplaceTileBreakUp[(int) Main.tile[x, y - 1].type] || Main.tile[x, y - 1].type == (ushort) 165 && (Main.tile[x, y - 1].frameY == (short) 36 || Main.tile[x, y - 1].frameY == (short) 54 || Main.tile[x, y - 1].frameY == (short) 90)))
|
|
WorldGen.KillTile(x, y - 1);
|
|
if (Main.tile[x, y + 1] == null || !Main.tile[x, y + 1].active() || !TileID.Sets.ReplaceTileBreakDown[(int) Main.tile[x, y + 1].type] && (Main.tile[x, y + 1].type != (ushort) 165 || Main.tile[x, y + 1].frameY != (short) 0 && Main.tile[x, y + 1].frameY != (short) 18 && Main.tile[x, y + 1].frameY != (short) 72))
|
|
return;
|
|
WorldGen.KillTile(x, y + 1);
|
|
}
|
|
|
|
private static void ReplaceTile_DoActualReplacement_Area(
|
|
ushort targetType,
|
|
int targetStyle,
|
|
int topLeftX,
|
|
int topLeftY,
|
|
int areaSizeX,
|
|
int areaSizeY)
|
|
{
|
|
for (int index1 = 0; index1 < areaSizeX; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < areaSizeY; ++index2)
|
|
{
|
|
Tile tile = Main.tile[topLeftX + index1, topLeftY + index2];
|
|
tile.type = targetType;
|
|
tile.frameX = (short) (targetStyle * (areaSizeX * 18) + index1 * 18);
|
|
tile.frameY = (short) (index2 * 18);
|
|
tile.color((byte) 0);
|
|
}
|
|
}
|
|
for (int index3 = 0; index3 < areaSizeX; ++index3)
|
|
{
|
|
for (int index4 = 0; index4 < areaSizeY; ++index4)
|
|
WorldGen.SquareTileFrame(topLeftX + index3, topLeftY + index4);
|
|
}
|
|
}
|
|
|
|
private static void MoveReplaceTileAnchor(ref int x, ref int y, ushort targetType, Tile t)
|
|
{
|
|
if (TileID.Sets.BasicChest[(int) t.type])
|
|
{
|
|
x -= (int) t.frameX % 36 / 18;
|
|
y -= (int) t.frameY % 36 / 18;
|
|
}
|
|
if (!TileID.Sets.BasicDresser[(int) t.type])
|
|
return;
|
|
x -= (int) t.frameX % 54 / 18;
|
|
y -= (int) t.frameY % 36 / 18;
|
|
}
|
|
|
|
public static bool WouldTileReplacementBeBlockedByLiquid(int x, int y, int liquidType)
|
|
{
|
|
if (Main.tile[x - 1, y].liquid > (byte) 0 && (int) Main.tile[x - 1, y].liquidType() == liquidType || Main.tile[x + 1, y].liquid > (byte) 0 && (int) Main.tile[x + 1, y].liquidType() == liquidType)
|
|
return true;
|
|
return Main.tile[x, y - 1].liquid > (byte) 0 && (int) Main.tile[x, y - 1].liquidType() == liquidType;
|
|
}
|
|
|
|
public static bool WouldTileReplacementWork(ushort attemptingToReplaceWith, int x, int y)
|
|
{
|
|
Tile t = Main.tile[x, y];
|
|
if (attemptingToReplaceWith >= (ushort) 623 || TileID.Sets.Conversion.Grass[(int) attemptingToReplaceWith])
|
|
return false;
|
|
bool flag1 = !WorldGen.ReplaceTile_IsValidSolid((int) attemptingToReplaceWith) || !WorldGen.ReplaceTile_IsValidSolid((int) t.type);
|
|
int num1 = !WorldGen.ReplaceTile_IsValidPlatform((int) attemptingToReplaceWith) ? 1 : (!WorldGen.ReplaceTile_IsValidPlatform((int) t.type) ? 1 : 0);
|
|
bool flag2 = !WorldGen.ReplaceTile_IsValidSolid((int) attemptingToReplaceWith) && !WorldGen.ReplaceTile_IsValidPlatform((int) attemptingToReplaceWith) || !WorldGen.ReplaceTile_IsValidSolid((int) t.type) && !WorldGen.ReplaceTile_IsValidPlatform((int) t.type);
|
|
bool flag3 = !WorldGen.ReplaceTile_IsValidChest((int) attemptingToReplaceWith) || !WorldGen.ReplaceTile_IsValidChest((int) t.type) || Chest.IsLocked(t);
|
|
bool flag4 = !WorldGen.ReplaceTile_IsValidDresser((int) attemptingToReplaceWith) || !WorldGen.ReplaceTile_IsValidDresser((int) t.type);
|
|
int num2 = flag1 ? 1 : 0;
|
|
return (num1 & num2 & (flag2 ? 1 : 0) & (flag3 ? 1 : 0) & (flag4 ? 1 : 0)) == 0;
|
|
}
|
|
|
|
private static bool ReplaceTile_IsValidSolid(int type) => Main.tileSolid[type] && !Main.tileSolidTop[type] && !Main.tileFrameImportant[type];
|
|
|
|
private static bool ReplaceTile_IsValidChest(int type) => TileID.Sets.BasicChest[type];
|
|
|
|
private static bool ReplaceTile_IsValidDresser(int type) => TileID.Sets.BasicDresser[type];
|
|
|
|
private static bool ReplaceTile_IsValidPlatform(int type) => TileID.Sets.Platforms[type];
|
|
|
|
public static bool GetVanityTreeFoliageData(
|
|
int i,
|
|
int j,
|
|
int xoffset,
|
|
ref int treeFrame,
|
|
ref int treeStyle,
|
|
out int floorY,
|
|
out int topTextureFrameWidth,
|
|
out int topTextureFrameHeight)
|
|
{
|
|
Tile tile1 = Main.tile[i, j];
|
|
int index1 = i + xoffset;
|
|
topTextureFrameWidth = 114;
|
|
topTextureFrameHeight = 96;
|
|
floorY = j;
|
|
for (int index2 = 0; index2 < 100; ++index2)
|
|
{
|
|
floorY = j + index2;
|
|
Tile tile2 = Main.tile[index1, floorY];
|
|
if (tile2 == null)
|
|
return false;
|
|
if (TileID.Sets.Conversion.Grass[(int) tile2.type])
|
|
{
|
|
switch (tile1.type)
|
|
{
|
|
case 596:
|
|
treeStyle = 29;
|
|
return true;
|
|
case 616:
|
|
treeStyle = 30;
|
|
return true;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool GetGemTreeFoliageData(
|
|
int i,
|
|
int j,
|
|
int xoffset,
|
|
ref int treeFrame,
|
|
ref int treeStyle,
|
|
out int floorY,
|
|
out int topTextureFrameWidth,
|
|
out int topTextureFrameHeight)
|
|
{
|
|
Tile tile1 = Main.tile[i, j];
|
|
int index1 = i + xoffset;
|
|
topTextureFrameWidth = 114;
|
|
topTextureFrameHeight = 96;
|
|
floorY = j;
|
|
for (int index2 = 0; index2 < 100; ++index2)
|
|
{
|
|
floorY = j + index2;
|
|
Tile tile2 = Main.tile[index1, floorY];
|
|
if (tile2 == null)
|
|
return false;
|
|
if (TileID.Sets.Conversion.Stone[(int) tile2.type])
|
|
{
|
|
switch (tile1.type)
|
|
{
|
|
case 583:
|
|
treeStyle = 22;
|
|
return true;
|
|
case 584:
|
|
treeStyle = 23;
|
|
return true;
|
|
case 585:
|
|
treeStyle = 24;
|
|
return true;
|
|
case 586:
|
|
treeStyle = 25;
|
|
return true;
|
|
case 587:
|
|
treeStyle = 26;
|
|
return true;
|
|
case 588:
|
|
treeStyle = 27;
|
|
return true;
|
|
case 589:
|
|
treeStyle = 28;
|
|
return true;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool GetCommonTreeFoliageData(
|
|
int i,
|
|
int j,
|
|
int xoffset,
|
|
ref int treeFrame,
|
|
ref int treeStyle,
|
|
out int floorY,
|
|
out int topTextureFrameWidth,
|
|
out int topTextureFrameHeight)
|
|
{
|
|
Tile tile1 = Main.tile[i, j];
|
|
int index1 = i + xoffset;
|
|
topTextureFrameWidth = 80;
|
|
topTextureFrameHeight = 80;
|
|
floorY = j;
|
|
for (int index2 = 0; index2 < 100; ++index2)
|
|
{
|
|
floorY = j + index2;
|
|
Tile tile2 = Main.tile[index1, floorY];
|
|
if (tile2 == null)
|
|
return false;
|
|
switch (tile2.type)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
int num = index1 > Main.treeX[0] ? (index1 > Main.treeX[1] ? (index1 > Main.treeX[2] ? WorldGen.TreeTops.GetTreeStyle(3) : WorldGen.TreeTops.GetTreeStyle(2)) : WorldGen.TreeTops.GetTreeStyle(1)) : WorldGen.TreeTops.GetTreeStyle(0);
|
|
switch (num)
|
|
{
|
|
case 0:
|
|
treeStyle = 0;
|
|
break;
|
|
case 5:
|
|
treeStyle = 10;
|
|
break;
|
|
default:
|
|
treeStyle = 5 + num;
|
|
break;
|
|
}
|
|
return true;
|
|
case 23:
|
|
treeStyle = 1;
|
|
return true;
|
|
case 60:
|
|
topTextureFrameHeight = 96;
|
|
topTextureFrameWidth = 114;
|
|
treeStyle = 2;
|
|
if (WorldGen.TreeTops.GetTreeStyle(5) == 1)
|
|
treeStyle = 11;
|
|
if ((double) floorY > Main.worldSurface)
|
|
treeStyle = 13;
|
|
return true;
|
|
case 70:
|
|
treeStyle = 14;
|
|
return true;
|
|
case 109:
|
|
case 492:
|
|
topTextureFrameHeight = 140;
|
|
int treeFoliageStyle = WorldGen.GetHollowTreeFoliageStyle();
|
|
treeStyle = treeFoliageStyle;
|
|
if (treeFoliageStyle == 19)
|
|
topTextureFrameWidth = 114;
|
|
if (treeFoliageStyle == 20)
|
|
{
|
|
treeStyle = 20;
|
|
if (i % 6 == 1)
|
|
treeFrame += 3;
|
|
else if (i % 6 == 2)
|
|
treeFrame += 6;
|
|
else if (i % 6 == 3)
|
|
treeFrame += 9;
|
|
else if (i % 6 == 4)
|
|
treeFrame += 12;
|
|
else if (i % 6 == 5)
|
|
treeFrame += 15;
|
|
}
|
|
else if (i % 3 == 1)
|
|
treeFrame += 3;
|
|
else if (i % 3 == 2)
|
|
treeFrame += 6;
|
|
return true;
|
|
case 147:
|
|
treeStyle = 4;
|
|
int treeStyle1 = WorldGen.TreeTops.GetTreeStyle(6);
|
|
if (treeStyle1 == 0)
|
|
{
|
|
treeStyle = 12;
|
|
if (i % 10 == 0)
|
|
treeStyle = 18;
|
|
}
|
|
if (treeStyle1 == 2 || treeStyle1 == 3 || treeStyle1 == 32 || treeStyle1 == 4 || treeStyle1 == 42 || treeStyle1 == 5 || treeStyle1 == 7)
|
|
treeStyle = treeStyle1 % 2 != 0 ? (i <= Main.maxTilesX / 2 ? 17 : 16) : (i >= Main.maxTilesX / 2 ? 17 : 16);
|
|
return true;
|
|
case 199:
|
|
treeStyle = 5;
|
|
return true;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static int GetHollowTreeFoliageStyle()
|
|
{
|
|
WorldGen.TreeTops.GetTreeStyle(7);
|
|
switch (WorldGen.hallowBG)
|
|
{
|
|
case 2:
|
|
case 3:
|
|
return 20;
|
|
case 4:
|
|
return 19;
|
|
default:
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
public static int GetTreeFrame(Tile t)
|
|
{
|
|
if (t.frameY == (short) 220)
|
|
return 1;
|
|
return t.frameY == (short) 242 ? 2 : 0;
|
|
}
|
|
|
|
public static TreeTypes GetTreeType(int tileType)
|
|
{
|
|
switch (tileType)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
return TreeTypes.Forest;
|
|
case 23:
|
|
return TreeTypes.Corrupt;
|
|
case 53:
|
|
return TreeTypes.Palm;
|
|
case 60:
|
|
return TreeTypes.Jungle;
|
|
case 70:
|
|
return TreeTypes.Mushroom;
|
|
case 109:
|
|
case 492:
|
|
return TreeTypes.Hallowed;
|
|
case 112:
|
|
return TreeTypes.PalmCorrupt;
|
|
case 116:
|
|
return TreeTypes.PalmHallowed;
|
|
case 147:
|
|
return TreeTypes.Snow;
|
|
case 199:
|
|
return TreeTypes.Crimson;
|
|
case 234:
|
|
return TreeTypes.PalmCrimson;
|
|
default:
|
|
return TreeTypes.None;
|
|
}
|
|
}
|
|
|
|
public static bool IsThisAMushroomTree(int i, int j)
|
|
{
|
|
int x;
|
|
int y;
|
|
WorldGen.GetTreeBottom(i, j, out x, out y);
|
|
return WorldGen.GetTreeType((int) Main.tile[x, y].type) == TreeTypes.Mushroom;
|
|
}
|
|
|
|
private static void ShakeTree(int i, int j)
|
|
{
|
|
if (WorldGen.numTreeShakes == WorldGen.maxTreeShakes)
|
|
return;
|
|
int x;
|
|
int y;
|
|
WorldGen.GetTreeBottom(i, j, out x, out y);
|
|
int index1 = y;
|
|
TreeTypes treeType = WorldGen.GetTreeType((int) Main.tile[x, y].type);
|
|
if (treeType == TreeTypes.None)
|
|
return;
|
|
for (int index2 = 0; index2 < WorldGen.numTreeShakes; ++index2)
|
|
{
|
|
if (WorldGen.treeShakeX[index2] == x && WorldGen.treeShakeY[index2] == y)
|
|
return;
|
|
}
|
|
WorldGen.treeShakeX[WorldGen.numTreeShakes] = x;
|
|
WorldGen.treeShakeY[WorldGen.numTreeShakes] = y;
|
|
++WorldGen.numTreeShakes;
|
|
--y;
|
|
while (y > 10 && Main.tile[x, y].active() && TileID.Sets.IsShakeable[(int) Main.tile[x, y].type])
|
|
--y;
|
|
++y;
|
|
if (!WorldGen.IsTileALeafyTreeTop(x, y) || Collision.SolidTiles(x - 2, x + 2, y - 2, y + 2))
|
|
return;
|
|
bool flag = false;
|
|
if (Main.getGoodWorld && WorldGen.genRand.Next(15) == 0)
|
|
Projectile.NewProjectile((float) (x * 16), (float) (y * 16), (float) Main.rand.Next(-100, 101) * (1f / 500f), 0.0f, 28, 0, 0.0f, (int) Player.FindClosest(new Vector2((float) (x * 16), (float) (y * 16)), 16, 16));
|
|
else if (WorldGen.genRand.Next(1000) == 0 && treeType == TreeTypes.Forest)
|
|
{
|
|
flag = true;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, 4366);
|
|
}
|
|
else if (WorldGen.genRand.Next(7) == 0 && (treeType == TreeTypes.Forest || treeType == TreeTypes.Snow || treeType == TreeTypes.Hallowed))
|
|
{
|
|
flag = true;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, 27, WorldGen.genRand.Next(1, 3));
|
|
}
|
|
else if (WorldGen.genRand.Next(8) == 0 && treeType == TreeTypes.Mushroom)
|
|
{
|
|
flag = true;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, 194, WorldGen.genRand.Next(1, 2));
|
|
}
|
|
else if (WorldGen.genRand.Next(35) == 0 && Main.halloween)
|
|
{
|
|
flag = true;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, 1809, WorldGen.genRand.Next(1, 3));
|
|
}
|
|
else if (WorldGen.genRand.Next(12) == 0)
|
|
{
|
|
flag = true;
|
|
int dropItem = 0;
|
|
WorldGen.KillTile_GetItemDrops(i, j, Main.tile[i, j], out dropItem, out int _, out int _, out int _);
|
|
Item.NewItem(x * 16, y * 16, 16, 16, dropItem, WorldGen.genRand.Next(1, 4));
|
|
}
|
|
else if (WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
flag = true;
|
|
int Type = 71;
|
|
int Stack = WorldGen.genRand.Next(50, 100);
|
|
if (WorldGen.genRand.Next(30) == 0)
|
|
{
|
|
Type = 73;
|
|
Stack = 1;
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
++Stack;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
++Stack;
|
|
}
|
|
else if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
Type = 72;
|
|
Stack = WorldGen.genRand.Next(1, 21);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Stack += WorldGen.genRand.Next(1, 21);
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Stack += WorldGen.genRand.Next(1, 21);
|
|
}
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type, Stack);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && (treeType == TreeTypes.Forest || treeType == TreeTypes.Hallowed))
|
|
{
|
|
flag = true;
|
|
int Type;
|
|
switch (WorldGen.genRand.Next(5))
|
|
{
|
|
case 0:
|
|
Type = 74;
|
|
break;
|
|
case 1:
|
|
Type = 297;
|
|
break;
|
|
case 2:
|
|
Type = 298;
|
|
break;
|
|
case 3:
|
|
Type = 299;
|
|
break;
|
|
default:
|
|
Type = 538;
|
|
break;
|
|
}
|
|
if ((double) Player.GetClosestRollLuck(x, y, NPC.goldCritterChance) == 0.0)
|
|
Type = WorldGen.genRand.Next(2) != 0 ? 539 : 442;
|
|
NPC.NewNPC(x * 16, y * 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(50) == 0 && treeType == TreeTypes.Hallowed && !Main.dayTime)
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16, y * 16, (int) Main.rand.NextFromList<short>((short) 583, (short) 584, (short) 585));
|
|
}
|
|
else if (WorldGen.genRand.Next(50) == 0 && treeType == TreeTypes.Forest && !Main.dayTime)
|
|
{
|
|
flag = true;
|
|
NPC npc = Main.npc[NPC.NewNPC(x * 16, y * 16, 611)];
|
|
npc.velocity.Y = 1f;
|
|
npc.netUpdate = true;
|
|
}
|
|
else if (WorldGen.genRand.Next(40) == 0 && treeType == TreeTypes.Forest && !Main.dayTime && Main.halloween)
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16, y * 16, 301);
|
|
}
|
|
else if (WorldGen.genRand.Next(50) == 0 && (treeType == TreeTypes.Forest || treeType == TreeTypes.Hallowed))
|
|
{
|
|
flag = true;
|
|
for (int index3 = 0; index3 < 5; ++index3)
|
|
{
|
|
Point point = new Point(x + Main.rand.Next(-2, 2), y - 1 + Main.rand.Next(-2, 2));
|
|
int Type;
|
|
if ((double) Player.GetClosestRollLuck(x, y, NPC.goldCritterChance) == 0.0)
|
|
Type = 442;
|
|
else
|
|
Type = (int) Main.rand.NextFromList<short>((short) 74, (short) 297, (short) 298);
|
|
NPC npc = Main.npc[NPC.NewNPC(point.X * 16, point.Y * 16, Type)];
|
|
npc.velocity = Main.rand.NextVector2CircularEdge(3f, 3f);
|
|
npc.netUpdate = true;
|
|
}
|
|
}
|
|
else if (WorldGen.genRand.Next(40) == 0 && treeType == TreeTypes.Jungle)
|
|
{
|
|
flag = true;
|
|
for (int index4 = 0; index4 < 5; ++index4)
|
|
{
|
|
Point point = new Point(x + Main.rand.Next(-2, 2), y - 1 + Main.rand.Next(-2, 2));
|
|
NPC npc = Main.npc[NPC.NewNPC(point.X * 16, point.Y * 16, (int) Main.rand.NextFromList<short>((short) 210, (short) 211))];
|
|
npc.ai[1] = 65f;
|
|
npc.netUpdate = true;
|
|
}
|
|
}
|
|
else if (WorldGen.genRand.Next(20) == 0 && (treeType == TreeTypes.Palm || treeType == TreeTypes.PalmCorrupt || treeType == TreeTypes.PalmCrimson || treeType == TreeTypes.PalmHallowed) && !WorldGen.IsPalmOasisTree(x))
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16, y * 16, 603);
|
|
}
|
|
else if (WorldGen.genRand.Next(30) == 0 && (treeType == TreeTypes.Crimson || treeType == TreeTypes.PalmCrimson))
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16 + 8, (y - 1) * 16, -22);
|
|
}
|
|
else if (WorldGen.genRand.Next(30) == 0 && (treeType == TreeTypes.Corrupt || treeType == TreeTypes.PalmCorrupt))
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16 + 8, (y - 1) * 16, -11);
|
|
}
|
|
else if (WorldGen.genRand.Next(30) == 0 && treeType == TreeTypes.Jungle && !Main.dayTime)
|
|
{
|
|
flag = true;
|
|
NPC.NewNPC(x * 16, y * 16, 51);
|
|
}
|
|
else if (WorldGen.genRand.Next(40) == 0 && treeType == TreeTypes.Jungle)
|
|
{
|
|
flag = true;
|
|
Projectile.NewProjectile((float) (x * 16 + 8), (float) ((y - 1) * 16), 0.0f, 0.0f, 655, 0, 0.0f, Main.myPlayer);
|
|
}
|
|
else if (WorldGen.genRand.Next(20) == 0 && (treeType == TreeTypes.Forest || treeType == TreeTypes.Hallowed) && !Main.raining && !NPC.TooWindyForButterflies && Main.dayTime)
|
|
{
|
|
flag = true;
|
|
int Type = 356;
|
|
if ((double) Player.GetClosestRollLuck(x, y, NPC.goldCritterChance) == 0.0)
|
|
Type = 444;
|
|
NPC.NewNPC(x * 16, y * 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && treeType == TreeTypes.Forest)
|
|
{
|
|
flag = true;
|
|
int Type;
|
|
switch (WorldGen.genRand.Next(5))
|
|
{
|
|
case 0:
|
|
Type = 4009;
|
|
break;
|
|
case 1:
|
|
Type = 4293;
|
|
break;
|
|
case 2:
|
|
Type = 4282;
|
|
break;
|
|
case 3:
|
|
Type = 4290;
|
|
break;
|
|
default:
|
|
Type = 4291;
|
|
break;
|
|
}
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && treeType == TreeTypes.Snow)
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4295 : 4286;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && treeType == TreeTypes.Jungle)
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4292 : 4294;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && (treeType == TreeTypes.Palm || treeType == TreeTypes.PalmCorrupt || treeType == TreeTypes.PalmCrimson || treeType == TreeTypes.PalmHallowed) && !WorldGen.IsPalmOasisTree(x))
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4287 : 4283;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && (treeType == TreeTypes.Corrupt || treeType == TreeTypes.PalmCorrupt))
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4289 : 4284;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && (treeType == TreeTypes.Hallowed || treeType == TreeTypes.PalmHallowed))
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4288 : 4297;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
else if (WorldGen.genRand.Next(15) == 0 && (treeType == TreeTypes.Crimson || treeType == TreeTypes.PalmCrimson))
|
|
{
|
|
flag = true;
|
|
int Type = WorldGen.genRand.Next(2) != 0 ? 4285 : 4296;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int treeHeight = 0;
|
|
int treeFrame = 0;
|
|
int passStyle = 0;
|
|
WorldGen.GetTreeLeaf(x, Main.tile[x, y], Main.tile[x, index1], ref treeHeight, out treeFrame, out passStyle);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(112, number: 1, number2: ((float) x), number3: ((float) y), number4: 1f, number5: passStyle);
|
|
if (Main.netMode != 0)
|
|
return;
|
|
WorldGen.TreeGrowFX(x, y, 1, passStyle, true);
|
|
}
|
|
|
|
private static void GetTreeBottom(int i, int j, out int x, out int y)
|
|
{
|
|
x = i;
|
|
y = j;
|
|
Tile tileSafely1 = Framing.GetTileSafely(x, y);
|
|
if (tileSafely1.type == (ushort) 323)
|
|
{
|
|
for (; y < Main.maxTilesY - 50 && (!tileSafely1.active() || tileSafely1.type == (ushort) 323); tileSafely1 = Framing.GetTileSafely(x, y))
|
|
++y;
|
|
}
|
|
else
|
|
{
|
|
int num1 = (int) tileSafely1.frameX / 22;
|
|
int num2 = (int) tileSafely1.frameY / 22;
|
|
if (num1 == 3 && num2 <= 2)
|
|
++x;
|
|
else if (num1 == 4 && num2 >= 3 && num2 <= 5)
|
|
--x;
|
|
else if (num1 == 1 && num2 >= 6 && num2 <= 8)
|
|
--x;
|
|
else if (num1 == 2 && num2 >= 6 && num2 <= 8)
|
|
++x;
|
|
else if (num1 == 2 && num2 >= 9)
|
|
++x;
|
|
else if (num1 == 3 && num2 >= 9)
|
|
--x;
|
|
for (Tile tileSafely2 = Framing.GetTileSafely(x, y); y < Main.maxTilesY - 50 && (!tileSafely2.active() || TileID.Sets.IsATreeTrunk[(int) tileSafely2.type] || tileSafely2.type == (ushort) 72); tileSafely2 = Framing.GetTileSafely(x, y))
|
|
++y;
|
|
}
|
|
}
|
|
|
|
private static void AttemptFossilShattering(int i, int j, Tile tileCache, bool fail)
|
|
{
|
|
if (tileCache.type != (ushort) 404 || Main.netMode == 1 || WorldGen.fossilBreak)
|
|
return;
|
|
WorldGen.fossilBreak = true;
|
|
for (int i1 = i - 1; i1 <= i + 1; ++i1)
|
|
{
|
|
for (int j1 = j - 1; j1 <= j + 1; ++j1)
|
|
{
|
|
int maxValue = 15;
|
|
if (!WorldGen.SolidTile(i1, j1 + 1))
|
|
maxValue = 4;
|
|
else if (i1 == i && j1 == j - 1 && !fail)
|
|
maxValue = 4;
|
|
if ((i1 != i || j1 != j) && Main.tile[i1, j1].active() && Main.tile[i1, j1].type == (ushort) 404 && WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
WorldGen.KillTile(i1, j1, noItem: true);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) i1), number3: ((float) j1));
|
|
}
|
|
}
|
|
}
|
|
WorldGen.fossilBreak = false;
|
|
}
|
|
|
|
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)
|
|
return;
|
|
Tile tileCache = Main.tile[i, j];
|
|
if (tileCache == null)
|
|
{
|
|
tileCache = new Tile();
|
|
Main.tile[i, j] = tileCache;
|
|
}
|
|
if (!tileCache.active())
|
|
return;
|
|
if (j >= 1 && Main.tile[i, j - 1] == null)
|
|
Main.tile[i, j - 1] = new Tile();
|
|
int num1 = WorldGen.CheckTileBreakability(i, j);
|
|
if (num1 == 1)
|
|
fail = true;
|
|
if (num1 == 2)
|
|
return;
|
|
if (WorldGen.gen)
|
|
noItem = true;
|
|
if (!effectOnly && !WorldGen.stopDrops)
|
|
{
|
|
if (!noItem && FixExploitManEaters.SpotProtected(i, j))
|
|
return;
|
|
if (!WorldGen.gen && !Main.gameMenu)
|
|
WorldGen.KillTile_PlaySounds(i, j, fail, tileCache);
|
|
}
|
|
if (tileCache.type == (ushort) 128 || tileCache.type == (ushort) 269)
|
|
{
|
|
int index1 = i;
|
|
int frameX1 = (int) tileCache.frameX;
|
|
int frameX2 = (int) tileCache.frameX;
|
|
while (frameX2 >= 100)
|
|
frameX2 -= 100;
|
|
while (frameX2 >= 36)
|
|
frameX2 -= 36;
|
|
if (frameX2 == 18)
|
|
{
|
|
frameX1 = (int) Main.tile[i - 1, j].frameX;
|
|
--index1;
|
|
}
|
|
if (frameX1 >= 100)
|
|
{
|
|
int index2 = 0;
|
|
while (frameX1 >= 100)
|
|
{
|
|
frameX1 -= 100;
|
|
++index2;
|
|
}
|
|
int num2 = (int) Main.tile[index1, j].frameY / 18;
|
|
if (num2 == 0)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Item.headType[index2]);
|
|
if (num2 == 1)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Item.bodyType[index2]);
|
|
if (num2 == 2)
|
|
Item.NewItem(i * 16, j * 16, 16, 16, Item.legType[index2]);
|
|
int frameX3 = (int) Main.tile[index1, j].frameX;
|
|
while (frameX3 >= 100)
|
|
frameX3 -= 100;
|
|
Main.tile[index1, j].frameX = (short) frameX3;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 334)
|
|
{
|
|
int index = i;
|
|
int frameX4 = (int) tileCache.frameX;
|
|
int num3 = (int) tileCache.frameX;
|
|
int num4 = 0;
|
|
while (num3 >= 5000)
|
|
{
|
|
num3 -= 5000;
|
|
++num4;
|
|
}
|
|
if (num4 != 0)
|
|
num3 = (num4 - 1) * 18;
|
|
int num5 = num3 % 54;
|
|
if (num5 == 18)
|
|
{
|
|
frameX4 = (int) Main.tile[i - 1, j].frameX;
|
|
--index;
|
|
}
|
|
if (num5 == 36)
|
|
{
|
|
frameX4 = (int) Main.tile[i - 2, j].frameX;
|
|
index -= 2;
|
|
}
|
|
if (frameX4 >= 5000)
|
|
{
|
|
int num6 = frameX4 % 5000 - 100;
|
|
int frameX5 = (int) Main.tile[index + 1, j].frameX;
|
|
int pre = frameX5 < 25000 ? frameX5 - 10000 : frameX5 - 25000;
|
|
if (Main.netMode != 1)
|
|
{
|
|
Item obj = new Item();
|
|
obj.netDefaults(num6);
|
|
obj.Prefix(pre);
|
|
int number = Item.NewItem(i * 16, j * 16, 16, 16, num6, noBroadcast: true);
|
|
obj.position = Main.item[number].position;
|
|
Main.item[number] = obj;
|
|
NetMessage.SendData(21, number: number);
|
|
}
|
|
int num7 = (int) Main.tile[index, j].frameX;
|
|
int num8 = 0;
|
|
while (num7 >= 5000)
|
|
{
|
|
num7 -= 5000;
|
|
++num8;
|
|
}
|
|
if (num8 != 0)
|
|
num7 = (num8 - 1) * 18;
|
|
Main.tile[index, j].frameX = (short) num7;
|
|
Main.tile[index + 1, j].frameX = (short) (num7 + 18);
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 395)
|
|
{
|
|
int key = TEItemFrame.Find(i - (int) tileCache.frameX % 36 / 18, j - (int) tileCache.frameY % 36 / 18);
|
|
if (key != -1 && ((TEItemFrame) TileEntity.ByID[key]).item.stack > 0)
|
|
{
|
|
((TEItemFrame) TileEntity.ByID[key]).DropItem();
|
|
if (Main.netMode == 2)
|
|
return;
|
|
Main.LocalPlayer.InterruptItemUsageIfOverTile(395);
|
|
return;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 520)
|
|
{
|
|
int key = TEFoodPlatter.Find(i, j);
|
|
if (key != -1 && ((TEFoodPlatter) TileEntity.ByID[key]).item.stack > 0)
|
|
{
|
|
((TEFoodPlatter) TileEntity.ByID[key]).DropItem();
|
|
if (Main.netMode == 2)
|
|
return;
|
|
Main.LocalPlayer.InterruptItemUsageIfOverTile(520);
|
|
return;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 471 && TEWeaponsRack.KillTileDropItem(tileCache, i, j) || tileCache.type == (ushort) 470 && WorldGen.CheckTileBreakability2_ShouldTileSurvive(i, j) | fail || tileCache.type == (ushort) 475 && WorldGen.CheckTileBreakability2_ShouldTileSurvive(i, j) | fail)
|
|
return;
|
|
int tileDustAmount = WorldGen.KillTile_GetTileDustAmount(fail, tileCache);
|
|
for (int index = 0; index < tileDustAmount; ++index)
|
|
WorldGen.KillTile_MakeTileDust(i, j, tileCache);
|
|
if (effectOnly)
|
|
return;
|
|
WorldGen.AttemptFossilShattering(i, j, tileCache, fail);
|
|
if (fail)
|
|
{
|
|
if (Main.netMode != 1 && TileID.Sets.IsShakeable[(int) tileCache.type])
|
|
WorldGen.ShakeTree(i, j);
|
|
if (tileCache.type == (ushort) 2 || tileCache.type == (ushort) 23 || tileCache.type == (ushort) 109 || tileCache.type == (ushort) 199 || tileCache.type == (ushort) 477 || tileCache.type == (ushort) 492)
|
|
tileCache.type = (ushort) 0;
|
|
if (tileCache.type == (ushort) 60 || tileCache.type == (ushort) 70)
|
|
tileCache.type = (ushort) 59;
|
|
if (Main.tileMoss[(int) tileCache.type])
|
|
tileCache.type = (ushort) 1;
|
|
if (TileID.Sets.tileMossBrick[(int) tileCache.type])
|
|
tileCache.type = (ushort) 38;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
}
|
|
else
|
|
{
|
|
if (Main.getGoodWorld && Main.netMode != 1 && tileCache.type == (ushort) 57)
|
|
{
|
|
for (int index3 = 0; index3 < 8; ++index3)
|
|
{
|
|
int maxValue = 2;
|
|
int i1 = i;
|
|
int j1 = j;
|
|
if (index3 == 0)
|
|
--i1;
|
|
else if (index3 == 1)
|
|
++i1;
|
|
else if (index3 == 2)
|
|
--j1;
|
|
else if (index3 == 3)
|
|
++j1;
|
|
else if (index3 == 4)
|
|
{
|
|
--i1;
|
|
--j1;
|
|
}
|
|
else if (index3 == 5)
|
|
{
|
|
++i1;
|
|
--j1;
|
|
}
|
|
else if (index3 == 6)
|
|
{
|
|
--i1;
|
|
++j1;
|
|
}
|
|
else if (index3 == 7)
|
|
{
|
|
++i1;
|
|
++j1;
|
|
}
|
|
Tile tile = Main.tile[i1, j1];
|
|
if (tile.active() && WorldGen.genRand.Next(maxValue) == 0 && tile.type == (ushort) 57 && !WorldGen.SolidTile(i1, j1 + 1))
|
|
{
|
|
WorldGen.KillTile(i1, j1, noItem: true);
|
|
int index4 = Projectile.NewProjectile((float) (i1 * 16 + 8), (float) (j1 * 16 + 8), 0.0f, 0.41f, 40, 15, 0.0f, Main.myPlayer);
|
|
Main.projectile[index4].netUpdate = true;
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode != 1 && tileCache.type >= (ushort) 481 && tileCache.type <= (ushort) 483)
|
|
{
|
|
for (int index = 0; index < 8; ++index)
|
|
{
|
|
int maxValue = 6;
|
|
int i2 = i;
|
|
int j2 = j;
|
|
if (index == 0)
|
|
--i2;
|
|
else if (index == 1)
|
|
++i2;
|
|
else if (index == 2)
|
|
{
|
|
--j2;
|
|
maxValue /= 2;
|
|
}
|
|
else if (index == 3)
|
|
++j2;
|
|
else if (index == 4)
|
|
{
|
|
--i2;
|
|
--j2;
|
|
}
|
|
else if (index == 5)
|
|
{
|
|
++i2;
|
|
--j2;
|
|
}
|
|
else if (index == 6)
|
|
{
|
|
--i2;
|
|
++j2;
|
|
}
|
|
else if (index == 7)
|
|
{
|
|
++i2;
|
|
++j2;
|
|
}
|
|
Tile tile = Main.tile[i2, j2];
|
|
if (tile.active() && WorldGen.genRand.Next(maxValue) == 0 && tile.type >= (ushort) 481 && tile.type <= (ushort) 483)
|
|
{
|
|
tileCache.active(false);
|
|
WorldGen.KillTile(i2, j2, noItem: true);
|
|
}
|
|
}
|
|
int Type = (int) tileCache.type - 481 + 736;
|
|
int Damage = 20;
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.41f, Type, Damage, 0.0f, Main.myPlayer);
|
|
break;
|
|
case 2:
|
|
int index5 = Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.41f, Type, Damage, 0.0f, Main.myPlayer);
|
|
Main.projectile[index5].netUpdate = true;
|
|
break;
|
|
}
|
|
}
|
|
if (WorldGen.CheckTileBreakability2_ShouldTileSurvive(i, j))
|
|
return;
|
|
if (tileCache.type == (ushort) 51 && tileCache.wall == (ushort) 62 && WorldGen.genRand.Next(4) != 0)
|
|
noItem = true;
|
|
if (!noItem && !WorldGen.stopDrops && Main.netMode != 1)
|
|
{
|
|
WorldGen.KillTile_DropBait(i, j, tileCache);
|
|
WorldGen.KillTile_DropItems(i, j, tileCache);
|
|
}
|
|
if (Main.netMode != 2)
|
|
AchievementsHelper.NotifyTileDestroyed(Main.player[Main.myPlayer], tileCache.type);
|
|
tileCache.active(false);
|
|
tileCache.halfBrick(false);
|
|
tileCache.frameX = (short) -1;
|
|
tileCache.frameY = (short) -1;
|
|
tileCache.color((byte) 0);
|
|
tileCache.frameNumber((byte) 0);
|
|
if (tileCache.type == (ushort) 58 && j > Main.UnderworldLayer)
|
|
{
|
|
tileCache.lava(true);
|
|
tileCache.liquid = (byte) 128;
|
|
}
|
|
else if (tileCache.type == (ushort) 419)
|
|
Wiring.PokeLogicGate(i, j + 1);
|
|
else if (TileID.Sets.BlocksWaterDrawingBehindSelf[(int) tileCache.type])
|
|
WorldGen.SquareWallFrame(i, j);
|
|
tileCache.type = (ushort) 0;
|
|
tileCache.inActive(false);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
}
|
|
}
|
|
|
|
private static Player GetPlayerForTile(int x, int y) => Main.player[(int) Player.FindClosest(new Vector2((float) x, (float) y) * 16f, 16, 16)];
|
|
|
|
private static void KillTile_DropItems(
|
|
int x,
|
|
int y,
|
|
Tile tileCache,
|
|
bool includeLargeObjectDrops = false)
|
|
{
|
|
int dropItem;
|
|
int dropItemStack;
|
|
int secondaryItem;
|
|
int secondaryItemStack;
|
|
WorldGen.KillTile_GetItemDrops(x, y, tileCache, out dropItem, out dropItemStack, out secondaryItem, out secondaryItemStack, includeLargeObjectDrops);
|
|
if (Main.getGoodWorld && !tileCache.active())
|
|
return;
|
|
if (dropItem > 0)
|
|
{
|
|
int i = Item.NewItem(x * 16, y * 16, 16, 16, dropItem, dropItemStack, pfix: -1);
|
|
Main.item[i].TryCombiningIntoNearbyItems(i);
|
|
}
|
|
if (secondaryItem <= 0)
|
|
return;
|
|
int i1 = Item.NewItem(x * 16, y * 16, 16, 16, secondaryItem, secondaryItemStack, pfix: -1);
|
|
Main.item[i1].TryCombiningIntoNearbyItems(i1);
|
|
}
|
|
|
|
public static void KillTile_GetItemDrops(
|
|
int x,
|
|
int y,
|
|
Tile tileCache,
|
|
out int dropItem,
|
|
out int dropItemStack,
|
|
out int secondaryItem,
|
|
out int secondaryItemStack,
|
|
bool includeLargeObjectDrops = false)
|
|
{
|
|
dropItem = 0;
|
|
dropItemStack = 1;
|
|
secondaryItem = 0;
|
|
secondaryItemStack = 1;
|
|
if (includeLargeObjectDrops)
|
|
{
|
|
switch (tileCache.type)
|
|
{
|
|
case 21:
|
|
case 467:
|
|
dropItem = WorldGen.GetChestItemDrop(x, y, (int) tileCache.type);
|
|
break;
|
|
case 88:
|
|
int style1 = (int) tileCache.frameX / 54;
|
|
dropItem = WorldGen.GetDresserItemDrop(style1);
|
|
break;
|
|
}
|
|
}
|
|
switch (tileCache.type)
|
|
{
|
|
case 0:
|
|
case 2:
|
|
case 109:
|
|
case 199:
|
|
case 477:
|
|
case 492:
|
|
dropItem = 2;
|
|
break;
|
|
case 1:
|
|
dropItem = 3;
|
|
break;
|
|
case 3:
|
|
if (tileCache.frameX == (short) 144)
|
|
{
|
|
dropItem = 5;
|
|
break;
|
|
}
|
|
if (!WorldGen.KillTile_ShouldDropSeeds(x, y))
|
|
break;
|
|
dropItem = 283;
|
|
break;
|
|
case 4:
|
|
int num1 = (int) tileCache.frameY / 22;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
dropItem = 8;
|
|
return;
|
|
case 8:
|
|
dropItem = 523;
|
|
return;
|
|
case 9:
|
|
dropItem = 974;
|
|
return;
|
|
case 10:
|
|
dropItem = 1245;
|
|
return;
|
|
case 11:
|
|
dropItem = 1333;
|
|
return;
|
|
case 12:
|
|
dropItem = 2274;
|
|
return;
|
|
case 13:
|
|
dropItem = 3004;
|
|
return;
|
|
case 14:
|
|
dropItem = 3045;
|
|
return;
|
|
case 15:
|
|
dropItem = 3114;
|
|
return;
|
|
case 16:
|
|
dropItem = 4383;
|
|
return;
|
|
case 17:
|
|
dropItem = 4384;
|
|
return;
|
|
case 18:
|
|
dropItem = 4385;
|
|
return;
|
|
case 19:
|
|
dropItem = 4386;
|
|
return;
|
|
case 20:
|
|
dropItem = 4387;
|
|
return;
|
|
case 21:
|
|
dropItem = 4388;
|
|
return;
|
|
default:
|
|
dropItem = 426 + num1;
|
|
return;
|
|
}
|
|
case 5:
|
|
case 596:
|
|
case 616:
|
|
bool bonusWood = false;
|
|
WorldGen.KillTile_GetTreeDrops(x, y, tileCache, ref bonusWood, ref dropItem, ref secondaryItem);
|
|
if (!bonusWood)
|
|
break;
|
|
++dropItemStack;
|
|
break;
|
|
case 6:
|
|
dropItem = 11;
|
|
break;
|
|
case 7:
|
|
dropItem = 12;
|
|
break;
|
|
case 8:
|
|
dropItem = 13;
|
|
break;
|
|
case 9:
|
|
dropItem = 14;
|
|
break;
|
|
case 13:
|
|
switch ((int) tileCache.frameX / 18)
|
|
{
|
|
case 1:
|
|
dropItem = 28;
|
|
return;
|
|
case 2:
|
|
dropItem = 110;
|
|
return;
|
|
case 3:
|
|
dropItem = 350;
|
|
return;
|
|
case 4:
|
|
dropItem = 351;
|
|
return;
|
|
case 5:
|
|
dropItem = 2234;
|
|
return;
|
|
case 6:
|
|
dropItem = 2244;
|
|
return;
|
|
case 7:
|
|
dropItem = 2257;
|
|
return;
|
|
case 8:
|
|
dropItem = 2258;
|
|
return;
|
|
default:
|
|
dropItem = 31;
|
|
return;
|
|
}
|
|
case 19:
|
|
int num2 = (int) tileCache.frameY / 18;
|
|
switch (num2)
|
|
{
|
|
case 0:
|
|
dropItem = 94;
|
|
return;
|
|
case 1:
|
|
dropItem = 631;
|
|
return;
|
|
case 2:
|
|
dropItem = 632;
|
|
return;
|
|
case 3:
|
|
dropItem = 633;
|
|
return;
|
|
case 4:
|
|
dropItem = 634;
|
|
return;
|
|
case 5:
|
|
dropItem = 913;
|
|
return;
|
|
case 6:
|
|
dropItem = 1384;
|
|
return;
|
|
case 7:
|
|
dropItem = 1385;
|
|
return;
|
|
case 8:
|
|
dropItem = 1386;
|
|
return;
|
|
case 9:
|
|
dropItem = 1387;
|
|
return;
|
|
case 10:
|
|
dropItem = 1388;
|
|
return;
|
|
case 11:
|
|
dropItem = 1389;
|
|
return;
|
|
case 12:
|
|
dropItem = 1418;
|
|
return;
|
|
case 13:
|
|
dropItem = 1457;
|
|
return;
|
|
case 14:
|
|
dropItem = 1702;
|
|
return;
|
|
case 15:
|
|
dropItem = 1796;
|
|
return;
|
|
case 16:
|
|
dropItem = 1818;
|
|
return;
|
|
case 17:
|
|
dropItem = 2518;
|
|
return;
|
|
case 18:
|
|
dropItem = 2549;
|
|
return;
|
|
case 19:
|
|
dropItem = 2566;
|
|
return;
|
|
case 20:
|
|
dropItem = 2581;
|
|
return;
|
|
case 21:
|
|
dropItem = 2627;
|
|
return;
|
|
case 22:
|
|
dropItem = 2628;
|
|
return;
|
|
case 23:
|
|
dropItem = 2629;
|
|
return;
|
|
case 24:
|
|
dropItem = 2630;
|
|
return;
|
|
case 25:
|
|
dropItem = 2744;
|
|
return;
|
|
case 26:
|
|
dropItem = 2822;
|
|
return;
|
|
case 27:
|
|
dropItem = 3144;
|
|
return;
|
|
case 28:
|
|
dropItem = 3146;
|
|
return;
|
|
case 29:
|
|
dropItem = 3145;
|
|
return;
|
|
default:
|
|
if (num2 >= 30 && num2 <= 35)
|
|
{
|
|
dropItem = 3903 + num2 - 30;
|
|
return;
|
|
}
|
|
switch (num2)
|
|
{
|
|
case 36:
|
|
dropItem = 3945;
|
|
return;
|
|
case 37:
|
|
dropItem = 3957;
|
|
return;
|
|
case 38:
|
|
dropItem = 4159;
|
|
return;
|
|
case 39:
|
|
dropItem = 4180;
|
|
return;
|
|
case 40:
|
|
dropItem = 4201;
|
|
return;
|
|
case 41:
|
|
dropItem = 4222;
|
|
return;
|
|
case 42:
|
|
dropItem = 4311;
|
|
return;
|
|
case 43:
|
|
dropItem = 4416;
|
|
return;
|
|
case 44:
|
|
dropItem = 4580;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
case 22:
|
|
dropItem = 56;
|
|
break;
|
|
case 23:
|
|
dropItem = 2;
|
|
break;
|
|
case 24:
|
|
if (tileCache.frameX != (short) 144)
|
|
break;
|
|
dropItem = 60;
|
|
break;
|
|
case 25:
|
|
dropItem = 61;
|
|
break;
|
|
case 30:
|
|
dropItem = 9;
|
|
break;
|
|
case 33:
|
|
int num3 = (int) tileCache.frameY / 22;
|
|
dropItem = 105;
|
|
switch (num3)
|
|
{
|
|
case 1:
|
|
dropItem = 1405;
|
|
return;
|
|
case 2:
|
|
dropItem = 1406;
|
|
return;
|
|
case 3:
|
|
dropItem = 1407;
|
|
return;
|
|
default:
|
|
if (num3 >= 4 && num3 <= 13)
|
|
{
|
|
dropItem = 2045 + num3 - 4;
|
|
return;
|
|
}
|
|
if (num3 >= 14 && num3 <= 16)
|
|
{
|
|
dropItem = 2153 + num3 - 14;
|
|
return;
|
|
}
|
|
switch (num3)
|
|
{
|
|
case 17:
|
|
dropItem = 2236;
|
|
return;
|
|
case 18:
|
|
dropItem = 2523;
|
|
return;
|
|
case 19:
|
|
dropItem = 2542;
|
|
return;
|
|
case 20:
|
|
dropItem = 2556;
|
|
return;
|
|
case 21:
|
|
dropItem = 2571;
|
|
return;
|
|
case 22:
|
|
dropItem = 2648;
|
|
return;
|
|
case 23:
|
|
dropItem = 2649;
|
|
return;
|
|
case 24:
|
|
dropItem = 2650;
|
|
return;
|
|
case 25:
|
|
dropItem = 2651;
|
|
return;
|
|
case 26:
|
|
dropItem = 2818;
|
|
return;
|
|
case 27:
|
|
dropItem = 3171;
|
|
return;
|
|
case 28:
|
|
dropItem = 3173;
|
|
return;
|
|
case 29:
|
|
dropItem = 3172;
|
|
return;
|
|
case 30:
|
|
dropItem = 3890;
|
|
return;
|
|
case 31:
|
|
dropItem = 3936;
|
|
return;
|
|
case 32:
|
|
dropItem = 3962;
|
|
return;
|
|
case 33:
|
|
dropItem = 4150;
|
|
return;
|
|
case 34:
|
|
dropItem = 4171;
|
|
return;
|
|
case 35:
|
|
dropItem = 4192;
|
|
return;
|
|
case 36:
|
|
dropItem = 4213;
|
|
return;
|
|
case 37:
|
|
dropItem = 4303;
|
|
return;
|
|
case 38:
|
|
dropItem = 4571;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
case 36:
|
|
dropItem = 1869;
|
|
break;
|
|
case 37:
|
|
dropItem = 116;
|
|
break;
|
|
case 38:
|
|
dropItem = 129;
|
|
break;
|
|
case 39:
|
|
dropItem = 131;
|
|
break;
|
|
case 40:
|
|
dropItem = 133;
|
|
break;
|
|
case 41:
|
|
dropItem = 134;
|
|
break;
|
|
case 43:
|
|
dropItem = 137;
|
|
break;
|
|
case 44:
|
|
dropItem = 139;
|
|
break;
|
|
case 45:
|
|
dropItem = 141;
|
|
break;
|
|
case 46:
|
|
dropItem = 143;
|
|
break;
|
|
case 47:
|
|
dropItem = 145;
|
|
break;
|
|
case 48:
|
|
dropItem = 147;
|
|
break;
|
|
case 49:
|
|
dropItem = 148;
|
|
break;
|
|
case 50:
|
|
if (tileCache.frameX == (short) 90)
|
|
{
|
|
dropItem = 165;
|
|
break;
|
|
}
|
|
dropItem = 149;
|
|
break;
|
|
case 51:
|
|
dropItem = 150;
|
|
break;
|
|
case 52:
|
|
case 62:
|
|
case 382:
|
|
if (Main.rand.Next(2) != 0 || !WorldGen.GetPlayerForTile(x, y).cordage)
|
|
break;
|
|
dropItem = 2996;
|
|
break;
|
|
case 53:
|
|
dropItem = 169;
|
|
break;
|
|
case 54:
|
|
dropItem = 170;
|
|
break;
|
|
case 56:
|
|
dropItem = 173;
|
|
break;
|
|
case 57:
|
|
dropItem = 172;
|
|
break;
|
|
case 58:
|
|
dropItem = 174;
|
|
break;
|
|
case 59:
|
|
case 60:
|
|
dropItem = 176;
|
|
break;
|
|
case 61:
|
|
case 74:
|
|
if (tileCache.frameX == (short) 144 && tileCache.type == (ushort) 61)
|
|
{
|
|
dropItem = 331;
|
|
dropItemStack = Main.rand.Next(2, 4);
|
|
break;
|
|
}
|
|
if (tileCache.frameX == (short) 162 && tileCache.type == (ushort) 61)
|
|
{
|
|
dropItem = 223;
|
|
break;
|
|
}
|
|
if (tileCache.frameX >= (short) 108 && tileCache.frameX <= (short) 126 && tileCache.type == (ushort) 61 && Main.rand.Next(20) == 0)
|
|
{
|
|
dropItem = 208;
|
|
break;
|
|
}
|
|
if (Main.rand.Next(100) != 0)
|
|
break;
|
|
dropItem = 195;
|
|
break;
|
|
case 63:
|
|
case 64:
|
|
case 65:
|
|
case 66:
|
|
case 67:
|
|
case 68:
|
|
dropItem = (int) tileCache.type - 63 + 177;
|
|
break;
|
|
case 70:
|
|
dropItem = 176;
|
|
break;
|
|
case 71:
|
|
case 72:
|
|
if (Main.rand.Next(40) == 0)
|
|
{
|
|
dropItem = 194;
|
|
break;
|
|
}
|
|
if (Main.rand.Next(2) != 0)
|
|
break;
|
|
dropItem = 183;
|
|
break;
|
|
case 73:
|
|
if (!WorldGen.KillTile_ShouldDropSeeds(x, y))
|
|
break;
|
|
dropItem = 283;
|
|
break;
|
|
case 75:
|
|
dropItem = 192;
|
|
break;
|
|
case 76:
|
|
dropItem = 214;
|
|
break;
|
|
case 78:
|
|
dropItem = 222;
|
|
break;
|
|
case 80:
|
|
dropItem = 276;
|
|
break;
|
|
case 81:
|
|
dropItem = 275;
|
|
break;
|
|
case 83:
|
|
case 84:
|
|
int style2 = (int) tileCache.frameX / 18;
|
|
dropItem = 313 + style2;
|
|
int num4 = 307 + style2;
|
|
if (style2 == 6)
|
|
{
|
|
dropItem = 2358;
|
|
num4 = 2357;
|
|
}
|
|
bool flag = WorldGen.IsHarvestableHerbWithSeed((int) tileCache.type, style2);
|
|
if (WorldGen.GetPlayerForTile(x, y).HeldItem.type == 213)
|
|
{
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
secondaryItem = num4;
|
|
secondaryItemStack = Main.rand.Next(1, 6);
|
|
break;
|
|
}
|
|
if (!flag)
|
|
break;
|
|
secondaryItem = num4;
|
|
secondaryItemStack = Main.rand.Next(1, 4);
|
|
break;
|
|
case 107:
|
|
dropItem = 364;
|
|
break;
|
|
case 108:
|
|
dropItem = 365;
|
|
break;
|
|
case 110:
|
|
if (tileCache.frameX != (short) 144)
|
|
break;
|
|
dropItem = 5;
|
|
break;
|
|
case 111:
|
|
dropItem = 366;
|
|
break;
|
|
case 112:
|
|
dropItem = 370;
|
|
break;
|
|
case 116:
|
|
dropItem = 408;
|
|
break;
|
|
case 117:
|
|
dropItem = 409;
|
|
break;
|
|
case 118:
|
|
dropItem = 412;
|
|
break;
|
|
case 119:
|
|
dropItem = 413;
|
|
break;
|
|
case 120:
|
|
dropItem = 414;
|
|
break;
|
|
case 121:
|
|
dropItem = 415;
|
|
break;
|
|
case 122:
|
|
dropItem = 416;
|
|
break;
|
|
case 123:
|
|
dropItem = 424;
|
|
break;
|
|
case 124:
|
|
dropItem = 480;
|
|
break;
|
|
case 129:
|
|
if (tileCache.frameX >= (short) 324)
|
|
{
|
|
dropItem = 4988;
|
|
break;
|
|
}
|
|
dropItem = 502;
|
|
break;
|
|
case 130:
|
|
dropItem = 511;
|
|
break;
|
|
case 131:
|
|
dropItem = 512;
|
|
break;
|
|
case 135:
|
|
int num5 = (int) tileCache.frameY / 18;
|
|
if (num5 == 0)
|
|
dropItem = 529;
|
|
if (num5 == 1)
|
|
dropItem = 541;
|
|
if (num5 == 2)
|
|
dropItem = 542;
|
|
if (num5 == 3)
|
|
dropItem = 543;
|
|
if (num5 == 4)
|
|
dropItem = 852;
|
|
if (num5 == 5)
|
|
dropItem = 853;
|
|
if (num5 != 6)
|
|
break;
|
|
dropItem = 1151;
|
|
break;
|
|
case 136:
|
|
dropItem = 538;
|
|
break;
|
|
case 137:
|
|
int num6 = (int) tileCache.frameY / 18;
|
|
if (num6 == 0)
|
|
dropItem = 539;
|
|
if (num6 == 1)
|
|
dropItem = 1146;
|
|
if (num6 == 2)
|
|
dropItem = 1147;
|
|
if (num6 == 3)
|
|
dropItem = 1148;
|
|
if (num6 != 4)
|
|
break;
|
|
dropItem = 1149;
|
|
break;
|
|
case 140:
|
|
dropItem = 577;
|
|
break;
|
|
case 141:
|
|
dropItem = 580;
|
|
break;
|
|
case 144:
|
|
if (tileCache.frameX == (short) 0)
|
|
dropItem = 583;
|
|
if (tileCache.frameX == (short) 18)
|
|
dropItem = 584;
|
|
if (tileCache.frameX == (short) 36)
|
|
dropItem = 585;
|
|
if (tileCache.frameX == (short) 54)
|
|
dropItem = 4484;
|
|
if (tileCache.frameX != (short) 72)
|
|
break;
|
|
dropItem = 4485;
|
|
break;
|
|
case 145:
|
|
dropItem = 586;
|
|
break;
|
|
case 146:
|
|
dropItem = 591;
|
|
break;
|
|
case 147:
|
|
dropItem = 593;
|
|
break;
|
|
case 148:
|
|
dropItem = 594;
|
|
break;
|
|
case 149:
|
|
if (tileCache.frameX == (short) 0 || tileCache.frameX == (short) 54)
|
|
{
|
|
dropItem = 596;
|
|
break;
|
|
}
|
|
if (tileCache.frameX == (short) 18 || tileCache.frameX == (short) 72)
|
|
{
|
|
dropItem = 597;
|
|
break;
|
|
}
|
|
if (tileCache.frameX != (short) 36 && tileCache.frameX != (short) 90)
|
|
break;
|
|
dropItem = 598;
|
|
break;
|
|
case 150:
|
|
dropItem = 604;
|
|
break;
|
|
case 151:
|
|
dropItem = 607;
|
|
break;
|
|
case 152:
|
|
dropItem = 609;
|
|
break;
|
|
case 153:
|
|
dropItem = 611;
|
|
break;
|
|
case 154:
|
|
dropItem = 612;
|
|
break;
|
|
case 155:
|
|
dropItem = 613;
|
|
break;
|
|
case 156:
|
|
dropItem = 614;
|
|
break;
|
|
case 157:
|
|
dropItem = 619;
|
|
break;
|
|
case 158:
|
|
dropItem = 620;
|
|
break;
|
|
case 159:
|
|
dropItem = 621;
|
|
break;
|
|
case 160:
|
|
dropItem = 662;
|
|
break;
|
|
case 161:
|
|
dropItem = 664;
|
|
break;
|
|
case 163:
|
|
dropItem = 833;
|
|
break;
|
|
case 164:
|
|
dropItem = 834;
|
|
break;
|
|
case 166:
|
|
dropItem = 699;
|
|
break;
|
|
case 167:
|
|
dropItem = 700;
|
|
break;
|
|
case 168:
|
|
dropItem = 701;
|
|
break;
|
|
case 169:
|
|
dropItem = 702;
|
|
break;
|
|
case 170:
|
|
dropItem = 1872;
|
|
break;
|
|
case 171:
|
|
if (tileCache.frameX < (short) 10)
|
|
break;
|
|
WorldGen.dropXmasTree(x, y, 0);
|
|
WorldGen.dropXmasTree(x, y, 1);
|
|
WorldGen.dropXmasTree(x, y, 2);
|
|
WorldGen.dropXmasTree(x, y, 3);
|
|
break;
|
|
case 174:
|
|
dropItem = 713;
|
|
break;
|
|
case 175:
|
|
dropItem = 717;
|
|
break;
|
|
case 176:
|
|
dropItem = 718;
|
|
break;
|
|
case 177:
|
|
dropItem = 719;
|
|
break;
|
|
case 178:
|
|
switch ((int) tileCache.frameX / 18)
|
|
{
|
|
case 0:
|
|
dropItem = 181;
|
|
return;
|
|
case 1:
|
|
dropItem = 180;
|
|
return;
|
|
case 2:
|
|
dropItem = 177;
|
|
return;
|
|
case 3:
|
|
dropItem = 179;
|
|
return;
|
|
case 4:
|
|
dropItem = 178;
|
|
return;
|
|
case 5:
|
|
dropItem = 182;
|
|
return;
|
|
case 6:
|
|
dropItem = 999;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 179:
|
|
case 180:
|
|
case 181:
|
|
case 182:
|
|
case 183:
|
|
case 381:
|
|
case 534:
|
|
case 536:
|
|
case 539:
|
|
dropItem = 3;
|
|
break;
|
|
case 188:
|
|
dropItem = 276;
|
|
break;
|
|
case 189:
|
|
dropItem = 751;
|
|
break;
|
|
case 190:
|
|
dropItem = 183;
|
|
break;
|
|
case 191:
|
|
dropItem = 9;
|
|
break;
|
|
case 193:
|
|
dropItem = 762;
|
|
break;
|
|
case 194:
|
|
dropItem = 154;
|
|
break;
|
|
case 195:
|
|
dropItem = 763;
|
|
break;
|
|
case 196:
|
|
dropItem = 765;
|
|
break;
|
|
case 197:
|
|
dropItem = 767;
|
|
break;
|
|
case 198:
|
|
dropItem = 775;
|
|
break;
|
|
case 200:
|
|
dropItem = 835;
|
|
break;
|
|
case 201:
|
|
if (tileCache.frameX != (short) 270)
|
|
break;
|
|
dropItem = 2887;
|
|
break;
|
|
case 202:
|
|
dropItem = 824;
|
|
break;
|
|
case 203:
|
|
dropItem = 836;
|
|
break;
|
|
case 204:
|
|
dropItem = 880;
|
|
break;
|
|
case 206:
|
|
dropItem = 883;
|
|
break;
|
|
case 208:
|
|
dropItem = 911;
|
|
break;
|
|
case 210:
|
|
dropItem = 937;
|
|
break;
|
|
case 211:
|
|
dropItem = 947;
|
|
break;
|
|
case 213:
|
|
dropItem = 965;
|
|
break;
|
|
case 214:
|
|
dropItem = 85;
|
|
break;
|
|
case 221:
|
|
dropItem = 1104;
|
|
break;
|
|
case 222:
|
|
dropItem = 1105;
|
|
break;
|
|
case 223:
|
|
dropItem = 1106;
|
|
break;
|
|
case 224:
|
|
dropItem = 1103;
|
|
break;
|
|
case 225:
|
|
if (Main.rand.Next(3) == 0)
|
|
{
|
|
tileCache.honey(true);
|
|
tileCache.liquid = byte.MaxValue;
|
|
break;
|
|
}
|
|
dropItem = 1124;
|
|
if (Main.netMode == 1 || Main.rand.Next(2) != 0)
|
|
break;
|
|
int num7 = 1;
|
|
if (Main.rand.Next(3) == 0)
|
|
num7 = 2;
|
|
for (int index1 = 0; index1 < num7; ++index1)
|
|
{
|
|
int Type = Main.rand.Next(210, 212);
|
|
int index2 = NPC.NewNPC(x * 16 + 8, y * 16 + 15, Type, 1);
|
|
Main.npc[index2].velocity.X = (float) Main.rand.Next(-200, 201) * (1f / 500f);
|
|
Main.npc[index2].velocity.Y = (float) Main.rand.Next(-200, 201) * (1f / 500f);
|
|
Main.npc[index2].netUpdate = true;
|
|
}
|
|
break;
|
|
case 226:
|
|
dropItem = 1101;
|
|
break;
|
|
case 227:
|
|
int num8 = (int) tileCache.frameX / 34;
|
|
dropItem = 1107 + num8;
|
|
if (num8 < 8 || num8 > 11)
|
|
break;
|
|
dropItem = 3385 + num8 - 8;
|
|
break;
|
|
case 229:
|
|
dropItem = 1125;
|
|
break;
|
|
case 230:
|
|
dropItem = 1127;
|
|
break;
|
|
case 232:
|
|
dropItem = 1150;
|
|
break;
|
|
case 234:
|
|
dropItem = 1246;
|
|
break;
|
|
case 239:
|
|
int num9 = (int) tileCache.frameX / 18;
|
|
if (num9 == 0)
|
|
dropItem = 20;
|
|
if (num9 == 1)
|
|
dropItem = 703;
|
|
if (num9 == 2)
|
|
dropItem = 22;
|
|
if (num9 == 3)
|
|
dropItem = 704;
|
|
if (num9 == 4)
|
|
dropItem = 21;
|
|
if (num9 == 5)
|
|
dropItem = 705;
|
|
if (num9 == 6)
|
|
dropItem = 19;
|
|
if (num9 == 7)
|
|
dropItem = 706;
|
|
if (num9 == 8)
|
|
dropItem = 57;
|
|
if (num9 == 9)
|
|
dropItem = 117;
|
|
if (num9 == 10)
|
|
dropItem = 175;
|
|
if (num9 == 11)
|
|
dropItem = 381;
|
|
if (num9 == 12)
|
|
dropItem = 1184;
|
|
if (num9 == 13)
|
|
dropItem = 382;
|
|
if (num9 == 14)
|
|
dropItem = 1191;
|
|
if (num9 == 15)
|
|
dropItem = 391;
|
|
if (num9 == 16)
|
|
dropItem = 1198;
|
|
if (num9 == 17)
|
|
dropItem = 1006;
|
|
if (num9 == 18)
|
|
dropItem = 1225;
|
|
if (num9 == 19)
|
|
dropItem = 1257;
|
|
if (num9 == 20)
|
|
dropItem = 1552;
|
|
if (num9 == 21)
|
|
dropItem = 3261;
|
|
if (num9 != 22)
|
|
break;
|
|
dropItem = 3467;
|
|
break;
|
|
case 248:
|
|
dropItem = 1589;
|
|
break;
|
|
case 249:
|
|
dropItem = 1591;
|
|
break;
|
|
case 250:
|
|
dropItem = 1593;
|
|
break;
|
|
case 251:
|
|
dropItem = 1725;
|
|
break;
|
|
case 252:
|
|
dropItem = 1727;
|
|
break;
|
|
case 253:
|
|
dropItem = 1729;
|
|
break;
|
|
case (ushort) byte.MaxValue:
|
|
case 256:
|
|
case 257:
|
|
case 258:
|
|
case 259:
|
|
case 260:
|
|
case 261:
|
|
dropItem = 1970 + (int) tileCache.type - (int) byte.MaxValue;
|
|
break;
|
|
case 262:
|
|
case 263:
|
|
case 264:
|
|
case 265:
|
|
case 266:
|
|
case 267:
|
|
case 268:
|
|
dropItem = 1970 + (int) tileCache.type - 262;
|
|
break;
|
|
case 272:
|
|
dropItem = 1344;
|
|
break;
|
|
case 273:
|
|
dropItem = 2119;
|
|
break;
|
|
case 274:
|
|
dropItem = 2120;
|
|
break;
|
|
case 284:
|
|
dropItem = 2173;
|
|
break;
|
|
case 311:
|
|
dropItem = 2260;
|
|
break;
|
|
case 312:
|
|
dropItem = 2261;
|
|
break;
|
|
case 313:
|
|
dropItem = 2262;
|
|
break;
|
|
case 314:
|
|
dropItem = Minecart.GetTrackItem(tileCache);
|
|
break;
|
|
case 315:
|
|
dropItem = 2435;
|
|
break;
|
|
case 321:
|
|
dropItem = 2503;
|
|
break;
|
|
case 322:
|
|
dropItem = 2504;
|
|
break;
|
|
case 323:
|
|
dropItem = 2504;
|
|
if (tileCache.frameX <= (short) 132 && tileCache.frameX >= (short) 88)
|
|
secondaryItem = 27;
|
|
int index3 = x;
|
|
int index4 = y;
|
|
while (!Main.tile[index3, index4].active() || !Main.tileSolid[(int) Main.tile[index3, index4].type])
|
|
++index4;
|
|
if (!Main.tile[index3, index4].active())
|
|
break;
|
|
switch (Main.tile[index3, index4].type)
|
|
{
|
|
case 112:
|
|
dropItem = 619;
|
|
return;
|
|
case 116:
|
|
dropItem = 621;
|
|
return;
|
|
case 234:
|
|
dropItem = 911;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 324:
|
|
switch ((int) tileCache.frameY / 22)
|
|
{
|
|
case 0:
|
|
dropItem = 2625;
|
|
return;
|
|
case 1:
|
|
dropItem = 2626;
|
|
return;
|
|
case 2:
|
|
dropItem = 4072;
|
|
return;
|
|
case 3:
|
|
dropItem = 4073;
|
|
return;
|
|
case 4:
|
|
dropItem = 4071;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 325:
|
|
dropItem = 2692;
|
|
break;
|
|
case 326:
|
|
dropItem = 2693;
|
|
break;
|
|
case 327:
|
|
dropItem = 2694;
|
|
break;
|
|
case 328:
|
|
dropItem = 2695;
|
|
break;
|
|
case 329:
|
|
dropItem = 2697;
|
|
break;
|
|
case 330:
|
|
dropItem = 71;
|
|
break;
|
|
case 331:
|
|
dropItem = 72;
|
|
break;
|
|
case 332:
|
|
dropItem = 73;
|
|
break;
|
|
case 333:
|
|
dropItem = 74;
|
|
break;
|
|
case 336:
|
|
dropItem = 2701;
|
|
break;
|
|
case 340:
|
|
dropItem = 2751;
|
|
break;
|
|
case 341:
|
|
dropItem = 2752;
|
|
break;
|
|
case 342:
|
|
dropItem = 2753;
|
|
break;
|
|
case 343:
|
|
dropItem = 2754;
|
|
break;
|
|
case 344:
|
|
dropItem = 2755;
|
|
break;
|
|
case 345:
|
|
dropItem = 2787;
|
|
break;
|
|
case 346:
|
|
dropItem = 2792;
|
|
break;
|
|
case 347:
|
|
dropItem = 2793;
|
|
break;
|
|
case 348:
|
|
dropItem = 2794;
|
|
break;
|
|
case 350:
|
|
dropItem = 2860;
|
|
break;
|
|
case 351:
|
|
dropItem = 2868;
|
|
break;
|
|
case 353:
|
|
dropItem = 2996;
|
|
break;
|
|
case 357:
|
|
dropItem = 3066;
|
|
break;
|
|
case 365:
|
|
dropItem = 3077;
|
|
break;
|
|
case 366:
|
|
dropItem = 3078;
|
|
break;
|
|
case 367:
|
|
dropItem = 3081;
|
|
break;
|
|
case 368:
|
|
dropItem = 3086;
|
|
break;
|
|
case 369:
|
|
dropItem = 3087;
|
|
break;
|
|
case 370:
|
|
dropItem = 3100;
|
|
break;
|
|
case 371:
|
|
dropItem = 3113;
|
|
break;
|
|
case 372:
|
|
dropItem = 3117;
|
|
break;
|
|
case 379:
|
|
dropItem = 3214;
|
|
break;
|
|
case 380:
|
|
int num10 = (int) tileCache.frameY / 18;
|
|
dropItem = 3215 + num10;
|
|
break;
|
|
case 383:
|
|
dropItem = 620;
|
|
break;
|
|
case 385:
|
|
dropItem = 3234;
|
|
break;
|
|
case 396:
|
|
dropItem = 3271;
|
|
break;
|
|
case 397:
|
|
dropItem = 3272;
|
|
break;
|
|
case 398:
|
|
dropItem = 3274;
|
|
break;
|
|
case 399:
|
|
dropItem = 3275;
|
|
break;
|
|
case 400:
|
|
dropItem = 3276;
|
|
break;
|
|
case 401:
|
|
dropItem = 3277;
|
|
break;
|
|
case 402:
|
|
dropItem = 3338;
|
|
break;
|
|
case 403:
|
|
dropItem = 3339;
|
|
break;
|
|
case 404:
|
|
dropItem = 3347;
|
|
break;
|
|
case 407:
|
|
dropItem = 3380;
|
|
break;
|
|
case 408:
|
|
dropItem = 3460;
|
|
break;
|
|
case 409:
|
|
dropItem = 3461;
|
|
break;
|
|
case 415:
|
|
dropItem = 3573;
|
|
break;
|
|
case 416:
|
|
dropItem = 3574;
|
|
break;
|
|
case 417:
|
|
dropItem = 3575;
|
|
break;
|
|
case 418:
|
|
dropItem = 3576;
|
|
break;
|
|
case 419:
|
|
switch ((int) tileCache.frameX / 18)
|
|
{
|
|
case 0:
|
|
dropItem = 3602;
|
|
return;
|
|
case 1:
|
|
dropItem = 3618;
|
|
return;
|
|
case 2:
|
|
dropItem = 3663;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 420:
|
|
switch ((int) tileCache.frameY / 18)
|
|
{
|
|
case 0:
|
|
dropItem = 3603;
|
|
return;
|
|
case 1:
|
|
dropItem = 3604;
|
|
return;
|
|
case 2:
|
|
dropItem = 3605;
|
|
return;
|
|
case 3:
|
|
dropItem = 3606;
|
|
return;
|
|
case 4:
|
|
dropItem = 3607;
|
|
return;
|
|
case 5:
|
|
dropItem = 3608;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 421:
|
|
dropItem = 3609;
|
|
break;
|
|
case 422:
|
|
dropItem = 3610;
|
|
break;
|
|
case 423:
|
|
TELogicSensor.Kill(x, y);
|
|
switch ((int) tileCache.frameY / 18)
|
|
{
|
|
case 0:
|
|
dropItem = 3613;
|
|
return;
|
|
case 1:
|
|
dropItem = 3614;
|
|
return;
|
|
case 2:
|
|
dropItem = 3615;
|
|
return;
|
|
case 3:
|
|
dropItem = 3726;
|
|
return;
|
|
case 4:
|
|
dropItem = 3727;
|
|
return;
|
|
case 5:
|
|
dropItem = 3728;
|
|
return;
|
|
case 6:
|
|
dropItem = 3729;
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
case 424:
|
|
dropItem = 3616;
|
|
break;
|
|
case 426:
|
|
dropItem = 3621;
|
|
break;
|
|
case 427:
|
|
dropItem = 3622;
|
|
break;
|
|
case 428:
|
|
switch ((int) tileCache.frameY / 18)
|
|
{
|
|
case 0:
|
|
dropItem = 3630;
|
|
break;
|
|
case 1:
|
|
dropItem = 3632;
|
|
break;
|
|
case 2:
|
|
dropItem = 3631;
|
|
break;
|
|
case 3:
|
|
dropItem = 3626;
|
|
break;
|
|
}
|
|
PressurePlateHelper.DestroyPlate(new Point(x, y));
|
|
break;
|
|
case 429:
|
|
dropItem = 3629;
|
|
break;
|
|
case 430:
|
|
dropItem = 3633;
|
|
break;
|
|
case 431:
|
|
dropItem = 3634;
|
|
break;
|
|
case 432:
|
|
dropItem = 3635;
|
|
break;
|
|
case 433:
|
|
dropItem = 3636;
|
|
break;
|
|
case 434:
|
|
dropItem = 3637;
|
|
break;
|
|
case 435:
|
|
dropItem = 3638;
|
|
break;
|
|
case 436:
|
|
dropItem = 3639;
|
|
break;
|
|
case 437:
|
|
dropItem = 3640;
|
|
break;
|
|
case 438:
|
|
dropItem = 3641;
|
|
break;
|
|
case 439:
|
|
dropItem = 3642;
|
|
break;
|
|
case 442:
|
|
dropItem = 3707;
|
|
break;
|
|
case 445:
|
|
dropItem = 3725;
|
|
break;
|
|
case 446:
|
|
dropItem = 3736;
|
|
break;
|
|
case 447:
|
|
dropItem = 3737;
|
|
break;
|
|
case 448:
|
|
dropItem = 3738;
|
|
break;
|
|
case 449:
|
|
dropItem = 3739;
|
|
break;
|
|
case 450:
|
|
dropItem = 3740;
|
|
break;
|
|
case 451:
|
|
dropItem = 3741;
|
|
break;
|
|
case 458:
|
|
dropItem = 3754;
|
|
break;
|
|
case 459:
|
|
dropItem = 3755;
|
|
break;
|
|
case 460:
|
|
dropItem = 3756;
|
|
break;
|
|
case 472:
|
|
dropItem = 3951;
|
|
break;
|
|
case 473:
|
|
dropItem = 3953;
|
|
break;
|
|
case 474:
|
|
dropItem = 3955;
|
|
break;
|
|
case 476:
|
|
dropItem = 4040;
|
|
break;
|
|
case 478:
|
|
dropItem = 4050;
|
|
break;
|
|
case 479:
|
|
dropItem = 4051;
|
|
break;
|
|
case 494:
|
|
dropItem = 4089;
|
|
break;
|
|
case 495:
|
|
dropItem = 4090;
|
|
break;
|
|
case 496:
|
|
dropItem = 4091;
|
|
break;
|
|
case 498:
|
|
dropItem = 4139;
|
|
break;
|
|
case 500:
|
|
dropItem = 4229;
|
|
break;
|
|
case 501:
|
|
dropItem = 4230;
|
|
break;
|
|
case 502:
|
|
dropItem = 4231;
|
|
break;
|
|
case 503:
|
|
dropItem = 4232;
|
|
break;
|
|
case 507:
|
|
dropItem = 4277;
|
|
break;
|
|
case 508:
|
|
dropItem = 4278;
|
|
break;
|
|
case 512:
|
|
case 513:
|
|
case 514:
|
|
case 515:
|
|
case 516:
|
|
case 517:
|
|
case 535:
|
|
case 537:
|
|
case 540:
|
|
dropItem = 129;
|
|
break;
|
|
case 519:
|
|
if (tileCache.frameY != (short) 90 || WorldGen.genRand.Next(2) != 0)
|
|
break;
|
|
dropItem = 183;
|
|
break;
|
|
case 520:
|
|
dropItem = 4326;
|
|
break;
|
|
case 528:
|
|
if (WorldGen.genRand.Next(2) != 0)
|
|
break;
|
|
dropItem = 183;
|
|
break;
|
|
case 541:
|
|
dropItem = 4392;
|
|
break;
|
|
case 546:
|
|
case 557:
|
|
dropItem = 4422;
|
|
break;
|
|
case 561:
|
|
dropItem = 4554;
|
|
break;
|
|
case 562:
|
|
dropItem = 4564;
|
|
break;
|
|
case 563:
|
|
dropItem = 4547;
|
|
break;
|
|
case 566:
|
|
dropItem = 999;
|
|
break;
|
|
case 571:
|
|
dropItem = 4564;
|
|
dropItemStack = WorldGen.genRand.Next(1, 3);
|
|
break;
|
|
case 574:
|
|
dropItem = 4717;
|
|
break;
|
|
case 575:
|
|
dropItem = 4718;
|
|
break;
|
|
case 576:
|
|
dropItem = 4719;
|
|
break;
|
|
case 577:
|
|
dropItem = 4720;
|
|
break;
|
|
case 578:
|
|
dropItem = 4721;
|
|
break;
|
|
case 579:
|
|
dropItem = 4761;
|
|
break;
|
|
case 583:
|
|
WorldGen.SetGemTreeDrops(180, 4851, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 584:
|
|
WorldGen.SetGemTreeDrops(181, 4852, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 585:
|
|
WorldGen.SetGemTreeDrops(177, 4853, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 586:
|
|
WorldGen.SetGemTreeDrops(179, 4854, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 587:
|
|
WorldGen.SetGemTreeDrops(178, 4855, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 588:
|
|
WorldGen.SetGemTreeDrops(182, 4856, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 589:
|
|
WorldGen.SetGemTreeDrops(999, 4857, tileCache, ref dropItem, ref secondaryItem);
|
|
if (dropItem != 3)
|
|
break;
|
|
dropItemStack = Main.rand.Next(1, 3);
|
|
break;
|
|
case 593:
|
|
dropItem = 4868;
|
|
break;
|
|
case 618:
|
|
dropItem = 4962;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void SetGemTreeDrops(
|
|
int gemType,
|
|
int seedType,
|
|
Tile tileCache,
|
|
ref int dropItem,
|
|
ref int secondaryItem)
|
|
{
|
|
dropItem = Main.rand.Next(10) != 0 ? 3 : gemType;
|
|
if (tileCache.frameX < (short) 22 || tileCache.frameY < (short) 198 || Main.rand.Next(2) != 0)
|
|
return;
|
|
secondaryItem = seedType;
|
|
}
|
|
|
|
private static void SetVanityTreeDrops(int dropType, Tile tileCache, ref int dropItem)
|
|
{
|
|
if (Main.rand.Next(2) != 0)
|
|
return;
|
|
dropItem = dropType;
|
|
}
|
|
|
|
public static bool IsHarvestableHerbWithSeed(int type, int style)
|
|
{
|
|
bool flag = false;
|
|
if (type == 84)
|
|
flag = true;
|
|
if (style == 0 && Main.dayTime)
|
|
flag = true;
|
|
if (style == 1 && !Main.dayTime)
|
|
flag = true;
|
|
if (style == 3 && !Main.dayTime && (Main.bloodMoon || Main.moonPhase == 0))
|
|
flag = true;
|
|
if (style == 4 && (Main.raining || (double) Main.cloudAlpha > 0.0))
|
|
flag = true;
|
|
if (style == 5 && !Main.raining && Main.dayTime && Main.time > 40500.0)
|
|
flag = true;
|
|
return flag;
|
|
}
|
|
|
|
private static bool KillTile_ShouldDropSeeds(int x, int y)
|
|
{
|
|
if (Main.rand.Next(2) != 0)
|
|
return false;
|
|
return WorldGen.GetPlayerForTile(x, y).HasItem(281) || WorldGen.GetPlayerForTile(x, y).HasItem(986);
|
|
}
|
|
|
|
private static void KillTile_GetTreeDrops(
|
|
int i,
|
|
int j,
|
|
Tile tileCache,
|
|
ref bool bonusWood,
|
|
ref int dropItem,
|
|
ref int secondaryItem)
|
|
{
|
|
if (tileCache.frameX >= (short) 22 && tileCache.frameY >= (short) 198)
|
|
{
|
|
if (Main.netMode != 1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int index = j;
|
|
while (Main.tile[i, index] != null && (!Main.tile[i, index].active() || !Main.tileSolid[(int) Main.tile[i, index].type] || Main.tileSolidTop[(int) Main.tile[i, index].type]))
|
|
++index;
|
|
if (Main.tile[i, index] != null)
|
|
{
|
|
Tile tile = Main.tile[i, index];
|
|
if (tile.type == (ushort) 2 || tile.type == (ushort) 109 || tile.type == (ushort) 477 || tile.type == (ushort) 492 || tile.type == (ushort) 147 || tile.type == (ushort) 199 || tile.type == (ushort) 23)
|
|
{
|
|
dropItem = 9;
|
|
secondaryItem = 27;
|
|
}
|
|
else
|
|
dropItem = 9;
|
|
}
|
|
}
|
|
else
|
|
dropItem = 9;
|
|
}
|
|
}
|
|
else
|
|
dropItem = 9;
|
|
if (dropItem != 9)
|
|
return;
|
|
int x;
|
|
int y;
|
|
WorldGen.GetTreeBottom(i, j, out x, out y);
|
|
if (Main.tile[x, y].active())
|
|
{
|
|
switch (Main.tile[x, y].type)
|
|
{
|
|
case 23:
|
|
dropItem = 619;
|
|
break;
|
|
case 60:
|
|
dropItem = 620;
|
|
break;
|
|
case 70:
|
|
dropItem = WorldGen.genRand.Next(2) != 0 ? 0 : 183;
|
|
break;
|
|
case 109:
|
|
case 492:
|
|
dropItem = 621;
|
|
break;
|
|
case 147:
|
|
dropItem = 2503;
|
|
break;
|
|
case 199:
|
|
dropItem = 911;
|
|
break;
|
|
}
|
|
}
|
|
int closest = (int) Player.FindClosest(new Vector2((float) (x * 16), (float) (y * 16)), 16, 16);
|
|
int axe = Main.player[closest].inventory[Main.player[closest].selectedItem].axe;
|
|
if (WorldGen.genRand.Next(100) >= axe && Main.rand.Next(3) != 0)
|
|
return;
|
|
bonusWood = true;
|
|
}
|
|
|
|
private static void KillTile_DropBait(int i, int j, Tile tileCache)
|
|
{
|
|
int maxValue1 = -1;
|
|
int maxValue2 = -1;
|
|
int maxValue3 = -1;
|
|
int closest = (int) Player.FindClosest(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16);
|
|
if (tileCache.type == (ushort) 3)
|
|
{
|
|
maxValue1 = 400;
|
|
maxValue2 = 100;
|
|
if (Main.player[closest].flowerBoots && tileCache.frameX >= (short) 108)
|
|
{
|
|
maxValue1 *= 10000;
|
|
maxValue2 *= 10000;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 73)
|
|
{
|
|
maxValue1 = 200;
|
|
maxValue2 = 50;
|
|
if (Main.player[closest].flowerBoots && tileCache.frameX >= (short) 108)
|
|
{
|
|
maxValue1 *= 10000;
|
|
maxValue2 *= 10000;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 61)
|
|
{
|
|
maxValue3 = 80;
|
|
if (Main.player[closest].flowerBoots && tileCache.frameX >= (short) 108)
|
|
maxValue3 *= 10000;
|
|
}
|
|
if (tileCache.type == (ushort) 74)
|
|
{
|
|
maxValue3 = 40;
|
|
if (Main.player[closest].flowerBoots && tileCache.frameX >= (short) 108)
|
|
maxValue3 *= 10000;
|
|
}
|
|
if (tileCache.type == (ushort) 62)
|
|
maxValue3 = 250;
|
|
if (tileCache.type == (ushort) 185)
|
|
{
|
|
if (tileCache.frameY == (short) 0 && tileCache.frameX < (short) 214)
|
|
maxValue1 = 6;
|
|
if (tileCache.frameY == (short) 18 && (tileCache.frameX < (short) 214 || tileCache.frameX >= (short) 1368))
|
|
maxValue1 = 6;
|
|
}
|
|
else if (tileCache.type == (ushort) 186)
|
|
{
|
|
if (tileCache.frameX >= (short) 378 && tileCache.frameX <= (short) 700)
|
|
maxValue1 = 6;
|
|
}
|
|
else if (tileCache.type == (ushort) 187)
|
|
{
|
|
if (tileCache.frameX >= (short) 756 && tileCache.frameX <= (short) 916)
|
|
maxValue1 = 6;
|
|
if (tileCache.frameX <= (short) 322)
|
|
maxValue1 = 6;
|
|
}
|
|
else if (tileCache.type == (ushort) 233)
|
|
maxValue3 = 10;
|
|
int Type1 = 357;
|
|
if (Main.player[closest].ZoneGraveyard)
|
|
Type1 = 606;
|
|
if (maxValue1 > 0 && NPC.CountNPCS(Type1) < 5 && WorldGen.genRand.Next(maxValue1) == 0)
|
|
{
|
|
int Type2 = Type1;
|
|
if (Type1 == 357 && (double) Player.GetClosestRollLuck(i, j, NPC.goldCritterChance) == 0.0)
|
|
Type2 = 448;
|
|
int index = NPC.NewNPC(i * 16 + 10, j * 16, Type2);
|
|
Main.npc[index].TargetClosest();
|
|
Main.npc[index].velocity.Y = (float) WorldGen.genRand.Next(-50, -21) * 0.1f;
|
|
Main.npc[index].velocity.X = (float) WorldGen.genRand.Next(0, 26) * 0.1f * (float) -Main.npc[index].direction;
|
|
Main.npc[index].direction *= -1;
|
|
Main.npc[index].netUpdate = true;
|
|
}
|
|
if (maxValue2 > 0 && NPC.CountNPCS(377) < 5 && WorldGen.genRand.Next(maxValue2) == 0)
|
|
{
|
|
int Type3 = 377;
|
|
if ((double) Player.GetClosestRollLuck(i, j, NPC.goldCritterChance) == 0.0)
|
|
Type3 = 446;
|
|
int index = NPC.NewNPC(i * 16 + 10, j * 16, Type3);
|
|
Main.npc[index].TargetClosest();
|
|
Main.npc[index].velocity.Y = (float) WorldGen.genRand.Next(-50, -21) * 0.1f;
|
|
Main.npc[index].velocity.X = (float) WorldGen.genRand.Next(0, 26) * 0.1f * (float) -Main.npc[index].direction;
|
|
Main.npc[index].direction *= -1;
|
|
Main.npc[index].netUpdate = true;
|
|
}
|
|
if (maxValue3 <= 0 || NPC.CountNPCS(485) + NPC.CountNPCS(486) + NPC.CountNPCS(487) >= 8 || WorldGen.genRand.Next(maxValue3) != 0)
|
|
return;
|
|
int Type4 = 485;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
Type4 = 486;
|
|
if (WorldGen.genRand.Next(12) == 0)
|
|
Type4 = 487;
|
|
int index1 = NPC.NewNPC(i * 16 + 10, j * 16, Type4);
|
|
Main.npc[index1].TargetClosest();
|
|
Main.npc[index1].velocity.Y = (float) WorldGen.genRand.Next(-50, -21) * 0.1f;
|
|
Main.npc[index1].velocity.X = (float) WorldGen.genRand.Next(0, 26) * 0.1f * (float) -Main.npc[index1].direction;
|
|
Main.npc[index1].direction *= -1;
|
|
Main.npc[index1].netUpdate = true;
|
|
}
|
|
|
|
public static void KillTile_PlaySounds(int i, int j, bool fail, Tile tileCache)
|
|
{
|
|
if (WorldGen.gen)
|
|
return;
|
|
int type = (int) tileCache.type;
|
|
if (type == (int) sbyte.MaxValue)
|
|
SoundEngine.PlaySound(SoundID.Item27, i * 16, j * 16);
|
|
else if (type == 147 || type == 224)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
SoundEngine.PlaySound(SoundID.Item48, i * 16, j * 16);
|
|
else
|
|
SoundEngine.PlaySound(SoundID.Item49, i * 16, j * 16);
|
|
}
|
|
else if (type == 161 || type == 163 || type == 164 || type == 200 || type == 541)
|
|
SoundEngine.PlaySound(SoundID.Item50, i * 16, j * 16);
|
|
else if (type == 518 || type == 519 || type == 528 || type == 529 || type == 549)
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
else if (type == 530 && tileCache.frameX < (short) 270)
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
else if (type == 3 || type == 110)
|
|
{
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
}
|
|
else
|
|
{
|
|
switch (type)
|
|
{
|
|
case 24:
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
break;
|
|
case 254:
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
break;
|
|
default:
|
|
if (Main.tileAlch[type] || type == 384 || type == 227 || type == 32 || type == 51 || type == 52 || type == 61 || type == 62 || type == 69 || type == 71 || type == 73 || type == 74 || type == 113 || type == 115 || type == 184 || type == 192 || type == 205 || type == 233 || type == 352 || type == 382)
|
|
{
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
break;
|
|
}
|
|
switch (type)
|
|
{
|
|
case 201:
|
|
SoundEngine.PlaySound(6, i * 16, j * 16);
|
|
break;
|
|
case 485:
|
|
SoundEngine.PlaySound(4, i * 16, j * 16, 11);
|
|
break;
|
|
default:
|
|
if (type == 481 || type == 482 || type == 483)
|
|
{
|
|
SoundEngine.PlaySound(SoundID.Item127, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type == 1 || type == 6 || type == 7 || type == 8 || type == 9 || type == 22 || type == 140 || type == 25 || type == 37 || type == 38 || type == 39 || type == 41 || type == 43 || type == 44 || type == 45 || type == 46 || type == 47 || type == 48 || type == 56 || type == 58 || type == 63 || type == 64 || type == 65 || type == 66 || type == 67 || type == 68 || type == 75 || type == 76 || type == 107 || type == 108 || type == 111 || type == 117 || type == 118 || type == 119 || type == 120 || type == 121 || type == 122 || type == 150 || type == 151 || type == 152 || type == 153 || type == 154 || type == 155 || type == 156 || type == 160 || type == 161 || type == 166 || type == 167 || type == 168 || type == 169 || type == 175 || type == 176 || type == 177 || type == 203 || type == 202 || type == 204 || type == 206 || type == 211 || type == 221 || type == 222 || type == 223 || type == 226 || type == 248 || type == 249 || type == 250 || type == 272 || type == 273 || type == 274 || type == 478 || type == 284 || type == 325 || type == 346 || type == 347 || type == 348 || type == 350 || type == 367 || type == 357 || type == 368 || type == 369 || type == 370 || type == 407 || type == 472 || type == 473 || type == 500 || type == 501 || type == 502 || type == 503 || type == 546 || type == 557 || type == 566 || type == 618)
|
|
{
|
|
SoundEngine.PlaySound(21, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type == 231 || type == 195 || type == 474)
|
|
{
|
|
SoundEngine.PlaySound(4, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type == 26 && tileCache.frameX >= (short) 54)
|
|
{
|
|
SoundEngine.PlaySound(4, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type == 314)
|
|
{
|
|
SoundEngine.PlaySound(SoundID.Item52, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type >= 330 && type <= 333)
|
|
{
|
|
SoundEngine.PlaySound(18, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if ((type == 162 || type == 385 || type == 129 || type == 165 && tileCache.frameX < (short) 54) && !fail)
|
|
{
|
|
SoundEngine.PlaySound(SoundID.Item27, i * 16, j * 16);
|
|
break;
|
|
}
|
|
if (type != 138)
|
|
{
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (fail)
|
|
return;
|
|
if (tileCache.type == (ushort) 13)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 54)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 326)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 327)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 458)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 459)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 345)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 328)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 329)
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
else if (tileCache.type == (ushort) 507)
|
|
{
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
}
|
|
else
|
|
{
|
|
if (tileCache.type != (ushort) 508)
|
|
return;
|
|
SoundEngine.PlaySound(13, i * 16, j * 16);
|
|
}
|
|
}
|
|
|
|
public static Microsoft.Xna.Framework.Rectangle? GetTileVisualHitbox(int x, int y)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (tile == null || !tile.nactive())
|
|
return new Microsoft.Xna.Framework.Rectangle?();
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(x * 16, y * 16, 16, 16);
|
|
if (tile.type == (ushort) 323)
|
|
rectangle.X += (int) tile.frameY;
|
|
if (tile.halfBrick())
|
|
{
|
|
rectangle.Y += 8;
|
|
rectangle.Height = 8;
|
|
}
|
|
return new Microsoft.Xna.Framework.Rectangle?(rectangle);
|
|
}
|
|
|
|
public static int KillTile_GetTileDustAmount(bool fail, Tile tileCache)
|
|
{
|
|
switch (tileCache.type)
|
|
{
|
|
case 125:
|
|
case 138:
|
|
case 172:
|
|
case 287:
|
|
case 300:
|
|
case 301:
|
|
case 302:
|
|
case 303:
|
|
case 304:
|
|
case 305:
|
|
case 306:
|
|
case 307:
|
|
case 308:
|
|
case 354:
|
|
case 355:
|
|
case 373:
|
|
case 374:
|
|
case 375:
|
|
case 376:
|
|
case 461:
|
|
case 484:
|
|
case 499:
|
|
case 564:
|
|
case 565:
|
|
case 593:
|
|
case 594:
|
|
case 617:
|
|
return 0;
|
|
case 184:
|
|
if ((int) tileCache.frameX / 22 >= 5)
|
|
return 5;
|
|
return !fail ? 10 : 3;
|
|
case 231:
|
|
return !fail ? 6 : 3;
|
|
case 481:
|
|
case 482:
|
|
case 483:
|
|
return 3;
|
|
case 534:
|
|
case 536:
|
|
case 539:
|
|
return !fail ? 5 : 3;
|
|
case 541:
|
|
return 1;
|
|
case 549:
|
|
return 2;
|
|
default:
|
|
return !fail ? 10 : 3;
|
|
}
|
|
}
|
|
|
|
public static int KillTile_MakeTileDust(int i, int j, Tile tileCache)
|
|
{
|
|
int Type1 = 0;
|
|
if (tileCache.type == (ushort) 216)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 324)
|
|
Type1 = tileCache.frameY != (short) 0 ? 281 + (int) tileCache.frameX / 18 : 280;
|
|
if (tileCache.type == (ushort) 216)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 335)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 338)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 0)
|
|
Type1 = 0;
|
|
if (tileCache.type == (ushort) 192)
|
|
Type1 = 3;
|
|
if (tileCache.type == (ushort) 208)
|
|
Type1 = 126;
|
|
else if (tileCache.type == (ushort) 408 || tileCache.type == (ushort) 409)
|
|
Type1 = 265;
|
|
if (tileCache.type == (ushort) 16)
|
|
{
|
|
Type1 = 1;
|
|
if (tileCache.frameX >= (short) 36)
|
|
Type1 = 82;
|
|
}
|
|
else if (tileCache.type == (ushort) 415 || tileCache.type == (ushort) 500)
|
|
Type1 = 6;
|
|
else if (tileCache.type == (ushort) 416 || tileCache.type == (ushort) 501)
|
|
Type1 = 61;
|
|
else if (tileCache.type == (ushort) 417 || tileCache.type == (ushort) 502)
|
|
Type1 = 242;
|
|
else if (tileCache.type == (ushort) 418 || tileCache.type == (ushort) 503)
|
|
Type1 = 135;
|
|
else if (tileCache.type == (ushort) 474)
|
|
Type1 = 18;
|
|
if (tileCache.type == (ushort) 1 || tileCache.type == (ushort) 17 || tileCache.type == (ushort) 38 || tileCache.type == (ushort) 39 || tileCache.type == (ushort) 41 || tileCache.type == (ushort) 43 || tileCache.type == (ushort) 44 || tileCache.type == (ushort) 481 || tileCache.type == (ushort) 482 || tileCache.type == (ushort) 483 || tileCache.type == (ushort) 48 || Main.tileStone[(int) tileCache.type] || tileCache.type == (ushort) 85 || tileCache.type == (ushort) 90 || tileCache.type == (ushort) 92 || tileCache.type == (ushort) 96 || tileCache.type == (ushort) 97 || tileCache.type == (ushort) 99 || tileCache.type == (ushort) 117 || tileCache.type == (ushort) 130 || tileCache.type == (ushort) 131 || tileCache.type == (ushort) 132 || tileCache.type == (ushort) 135 || tileCache.type == (ushort) 135 || tileCache.type == (ushort) 142 || tileCache.type == (ushort) 143 || tileCache.type == (ushort) 144 || tileCache.type == (ushort) 210 || tileCache.type == (ushort) 207 || tileCache.type == (ushort) 235 || tileCache.type == (ushort) 247 || tileCache.type == (ushort) 272 || tileCache.type == (ushort) 273 || tileCache.type == (ushort) 283 || tileCache.type == (ushort) 410 || tileCache.type == (ushort) 480 || tileCache.type == (ushort) 509 || tileCache.type == (ushort) 618)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 379)
|
|
Type1 = 257;
|
|
if (tileCache.type == (ushort) 311)
|
|
Type1 = 207;
|
|
if (tileCache.type == (ushort) 312)
|
|
Type1 = 208;
|
|
if (tileCache.type == (ushort) 313)
|
|
Type1 = 209;
|
|
if (tileCache.type == (ushort) 104)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 95 || tileCache.type == (ushort) 98 || tileCache.type == (ushort) 100 || tileCache.type == (ushort) 174 || tileCache.type == (ushort) 173)
|
|
Type1 = 6;
|
|
if (tileCache.type == (ushort) 30 || tileCache.type == (ushort) 86 || tileCache.type == (ushort) 94 || tileCache.type == (ushort) 106 || tileCache.type == (ushort) 114 || tileCache.type == (ushort) 124 || tileCache.type == (ushort) 128 || tileCache.type == (ushort) 269)
|
|
Type1 = 7;
|
|
if (tileCache.type == (ushort) 372)
|
|
Type1 = 242;
|
|
if (tileCache.type == (ushort) 371)
|
|
Type1 = 243;
|
|
if (tileCache.type == (ushort) 334)
|
|
Type1 = 7;
|
|
switch (tileCache.type)
|
|
{
|
|
case 10:
|
|
case 11:
|
|
case 87:
|
|
case 89:
|
|
case 93:
|
|
case 139:
|
|
case 209:
|
|
case 319:
|
|
case 320:
|
|
case 386:
|
|
case 387:
|
|
case 390:
|
|
case 405:
|
|
case 406:
|
|
case 411:
|
|
case 412:
|
|
case 419:
|
|
case 420:
|
|
case 421:
|
|
case 422:
|
|
case 423:
|
|
case 424:
|
|
case 425:
|
|
case 428:
|
|
case 429:
|
|
case 441:
|
|
case 442:
|
|
case 445:
|
|
case 446:
|
|
case 447:
|
|
case 448:
|
|
case 449:
|
|
case 450:
|
|
case 451:
|
|
case 452:
|
|
case 453:
|
|
case 455:
|
|
case 456:
|
|
case 457:
|
|
case 462:
|
|
case 463:
|
|
case 464:
|
|
case 465:
|
|
case 466:
|
|
case 468:
|
|
case 476:
|
|
case 486:
|
|
case 487:
|
|
case 489:
|
|
case 490:
|
|
case 491:
|
|
case 493:
|
|
case 494:
|
|
case 497:
|
|
case 510:
|
|
case 511:
|
|
case 520:
|
|
case 521:
|
|
case 522:
|
|
case 523:
|
|
case 524:
|
|
case 525:
|
|
case 526:
|
|
case 527:
|
|
case 531:
|
|
case 545:
|
|
case 547:
|
|
case 548:
|
|
case 560:
|
|
case 564:
|
|
case 565:
|
|
case 567:
|
|
case 572:
|
|
case 579:
|
|
case 591:
|
|
case 592:
|
|
case 593:
|
|
case 594:
|
|
case 613:
|
|
case 614:
|
|
case 621:
|
|
case 622:
|
|
Type1 = -1;
|
|
break;
|
|
case 41:
|
|
case 481:
|
|
Type1 = 275;
|
|
break;
|
|
case 43:
|
|
case 482:
|
|
Type1 = 276;
|
|
break;
|
|
case 44:
|
|
case 483:
|
|
Type1 = 277;
|
|
break;
|
|
case 184:
|
|
int num1 = (int) tileCache.frameX / 22;
|
|
switch (num1)
|
|
{
|
|
case 5:
|
|
Type1 = 258;
|
|
break;
|
|
case 6:
|
|
Type1 = 299;
|
|
break;
|
|
case 7:
|
|
Type1 = 300;
|
|
break;
|
|
case 8:
|
|
Type1 = 301;
|
|
break;
|
|
default:
|
|
Type1 = 93 + num1;
|
|
break;
|
|
}
|
|
break;
|
|
case 407:
|
|
Type1 = 10;
|
|
break;
|
|
case 454:
|
|
Type1 = 139;
|
|
break;
|
|
case 472:
|
|
case 546:
|
|
case 557:
|
|
Type1 = 8;
|
|
break;
|
|
case 473:
|
|
Type1 = 82;
|
|
break;
|
|
case 498:
|
|
Type1 = 30;
|
|
break;
|
|
case 512:
|
|
Type1 = 93;
|
|
break;
|
|
case 513:
|
|
Type1 = 94;
|
|
break;
|
|
case 514:
|
|
Type1 = 95;
|
|
break;
|
|
case 515:
|
|
Type1 = 96;
|
|
break;
|
|
case 516:
|
|
Type1 = 97;
|
|
break;
|
|
case 517:
|
|
Type1 = 258;
|
|
break;
|
|
case 535:
|
|
Type1 = 299;
|
|
break;
|
|
case 537:
|
|
Type1 = 300;
|
|
break;
|
|
case 540:
|
|
Type1 = 301;
|
|
break;
|
|
case 541:
|
|
Type1 = 226;
|
|
break;
|
|
case 583:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 87 : 1;
|
|
break;
|
|
case 584:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 86 : 1;
|
|
break;
|
|
case 585:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 88 : 1;
|
|
break;
|
|
case 586:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 89 : 1;
|
|
break;
|
|
case 587:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 90 : 1;
|
|
break;
|
|
case 588:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 91 : 1;
|
|
break;
|
|
case 589:
|
|
Type1 = WorldGen.genRand.Next(10) == 0 ? 138 : 1;
|
|
break;
|
|
case 590:
|
|
Type1 = 1;
|
|
break;
|
|
case 595:
|
|
Type1 = 78;
|
|
break;
|
|
case 596:
|
|
Type1 = 78;
|
|
break;
|
|
case 615:
|
|
Type1 = 78;
|
|
break;
|
|
case 616:
|
|
Type1 = 78;
|
|
break;
|
|
}
|
|
if (Main.tileMoss[(int) tileCache.type])
|
|
Type1 = tileCache.type != (ushort) 381 ? (tileCache.type != (ushort) 534 ? (tileCache.type != (ushort) 536 ? (tileCache.type != (ushort) 539 ? (int) tileCache.type - 179 + 93 : 301) : 300) : 299) : 258;
|
|
if (tileCache.type == (ushort) 240)
|
|
{
|
|
int num2 = (int) tileCache.frameX / 54;
|
|
if (tileCache.frameY >= (short) 54)
|
|
num2 += 36;
|
|
Type1 = 7;
|
|
if (num2 == 16 || num2 == 17)
|
|
Type1 = 26;
|
|
if (num2 >= 46 && num2 <= 49)
|
|
Type1 = -1;
|
|
}
|
|
if (tileCache.type == (ushort) 241)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 242)
|
|
Type1 = -1;
|
|
int num3;
|
|
if (tileCache.type == (ushort) 529)
|
|
{
|
|
switch (Main.tile[i, j + 1].type)
|
|
{
|
|
case 112:
|
|
Type1 = num3 = 17;
|
|
break;
|
|
case 116:
|
|
Type1 = num3 = 47;
|
|
break;
|
|
case 234:
|
|
Type1 = num3 = 125;
|
|
break;
|
|
default:
|
|
Type1 = i < WorldGen.beachDistance || i > Main.maxTilesX - WorldGen.beachDistance ? 290 : 289;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 356)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 351)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 246)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 36)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 365)
|
|
Type1 = 239;
|
|
if (tileCache.type == (ushort) 366)
|
|
Type1 = 30;
|
|
if (tileCache.type == (ushort) 504)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 357 || tileCache.type == (ushort) 367 || tileCache.type == (ushort) 561)
|
|
Type1 = 236;
|
|
if (tileCache.type == (ushort) 368 || tileCache.type == (ushort) 369 || tileCache.type == (ushort) 576)
|
|
Type1 = 240;
|
|
if (tileCache.type == (ushort) 170)
|
|
Type1 = 196;
|
|
if (tileCache.type == (ushort) 315)
|
|
Type1 = 225;
|
|
if (tileCache.type == (ushort) 346)
|
|
Type1 = 128;
|
|
if (tileCache.type == (ushort) 347)
|
|
Type1 = 117;
|
|
if (tileCache.type == (ushort) 348)
|
|
Type1 = 42;
|
|
if (tileCache.type == (ushort) 350)
|
|
Type1 = 226;
|
|
if (tileCache.type == (ushort) 370)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 23 : 6;
|
|
if (tileCache.type == (ushort) 171)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? -1 : 196;
|
|
if (tileCache.type == (ushort) 326)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 327)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 345)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 458)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 459)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 336)
|
|
Type1 = 6;
|
|
if (tileCache.type == (ushort) 340)
|
|
Type1 = 75;
|
|
if (tileCache.type == (ushort) 341)
|
|
Type1 = 65;
|
|
if (tileCache.type == (ushort) 342)
|
|
Type1 = 135;
|
|
if (tileCache.type == (ushort) 343)
|
|
Type1 = 169;
|
|
if (tileCache.type == (ushort) 344)
|
|
Type1 = 156;
|
|
if (tileCache.type == (ushort) 328)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 329)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 507)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 508)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 562)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 571)
|
|
Type1 = 40;
|
|
if (tileCache.type == (ushort) 563)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 330)
|
|
Type1 = 9;
|
|
if (tileCache.type == (ushort) 331)
|
|
Type1 = 11;
|
|
if (tileCache.type == (ushort) 332)
|
|
Type1 = 19;
|
|
if (tileCache.type == (ushort) 333)
|
|
Type1 = 11;
|
|
if (tileCache.type == (ushort) 101)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 19)
|
|
{
|
|
switch ((int) tileCache.frameY / 18)
|
|
{
|
|
case 0:
|
|
Type1 = 7;
|
|
break;
|
|
case 1:
|
|
Type1 = 77;
|
|
break;
|
|
case 2:
|
|
Type1 = 78;
|
|
break;
|
|
case 3:
|
|
Type1 = 79;
|
|
break;
|
|
case 4:
|
|
Type1 = 26;
|
|
break;
|
|
case 5:
|
|
Type1 = 126;
|
|
break;
|
|
case 6:
|
|
Type1 = 275;
|
|
break;
|
|
case 7:
|
|
Type1 = 277;
|
|
break;
|
|
case 8:
|
|
Type1 = 276;
|
|
break;
|
|
case 9:
|
|
Type1 = 1;
|
|
break;
|
|
case 10:
|
|
Type1 = 214;
|
|
break;
|
|
case 11:
|
|
Type1 = 214;
|
|
break;
|
|
case 12:
|
|
Type1 = 214;
|
|
break;
|
|
case 13:
|
|
Type1 = 109;
|
|
break;
|
|
case 14:
|
|
Type1 = 13;
|
|
break;
|
|
case 15:
|
|
Type1 = 189;
|
|
break;
|
|
case 16:
|
|
Type1 = 191;
|
|
break;
|
|
case 17:
|
|
Type1 = 215;
|
|
break;
|
|
case 18:
|
|
Type1 = 26;
|
|
break;
|
|
case 19:
|
|
Type1 = 214;
|
|
break;
|
|
case 20:
|
|
Type1 = 4;
|
|
break;
|
|
case 21:
|
|
Type1 = 10;
|
|
break;
|
|
case 22:
|
|
Type1 = 32;
|
|
break;
|
|
case 23:
|
|
Type1 = 78;
|
|
break;
|
|
case 24:
|
|
Type1 = 147;
|
|
break;
|
|
case 25:
|
|
Type1 = 40;
|
|
break;
|
|
case 26:
|
|
Type1 = 226;
|
|
break;
|
|
case 27:
|
|
Type1 = 23;
|
|
break;
|
|
case 28:
|
|
Type1 = 240;
|
|
break;
|
|
case 29:
|
|
Type1 = 236;
|
|
break;
|
|
case 30:
|
|
Type1 = 68 + Main.rand.Next(3);
|
|
break;
|
|
case 31:
|
|
Type1 = 10;
|
|
break;
|
|
case 32:
|
|
Type1 = 78;
|
|
break;
|
|
case 33:
|
|
Type1 = 148;
|
|
break;
|
|
case 34:
|
|
Type1 = 5;
|
|
break;
|
|
case 35:
|
|
Type1 = 80;
|
|
break;
|
|
case 37:
|
|
Type1 = 18;
|
|
break;
|
|
case 38:
|
|
Type1 = 6;
|
|
break;
|
|
case 39:
|
|
Type1 = 61;
|
|
break;
|
|
case 40:
|
|
Type1 = 242;
|
|
break;
|
|
case 41:
|
|
Type1 = 135;
|
|
break;
|
|
case 42:
|
|
Type1 = 287;
|
|
break;
|
|
case 44:
|
|
Type1 = -1;
|
|
break;
|
|
default:
|
|
Type1 = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 79)
|
|
{
|
|
int num4 = (int) tileCache.frameY / 36;
|
|
Type1 = num4 != 0 ? (num4 != 1 ? (num4 != 2 ? (num4 != 3 ? (num4 != 4 ? (num4 != 8 ? (num4 < 9 ? 1 : -1) : 109) : 126) : 79) : 78) : 77) : 7;
|
|
}
|
|
if (tileCache.type == (ushort) 18)
|
|
{
|
|
switch ((int) tileCache.frameX / 36)
|
|
{
|
|
case 0:
|
|
Type1 = 7;
|
|
break;
|
|
case 1:
|
|
Type1 = 77;
|
|
break;
|
|
case 2:
|
|
Type1 = 78;
|
|
break;
|
|
case 3:
|
|
Type1 = 79;
|
|
break;
|
|
case 4:
|
|
Type1 = 26;
|
|
break;
|
|
case 5:
|
|
Type1 = 40;
|
|
break;
|
|
case 6:
|
|
Type1 = 5;
|
|
break;
|
|
case 7:
|
|
Type1 = 26;
|
|
break;
|
|
case 8:
|
|
Type1 = 4;
|
|
break;
|
|
case 9:
|
|
Type1 = 126;
|
|
break;
|
|
case 10:
|
|
Type1 = 148;
|
|
break;
|
|
case 11:
|
|
case 12:
|
|
case 13:
|
|
Type1 = 1;
|
|
break;
|
|
case 14:
|
|
Type1 = 109;
|
|
break;
|
|
case 15:
|
|
Type1 = 126;
|
|
break;
|
|
default:
|
|
Type1 = -1;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 14 || tileCache.type == (ushort) 87 || tileCache.type == (ushort) 88 || tileCache.type == (ushort) 469)
|
|
Type1 = -1;
|
|
if (tileCache.type >= (ushort) byte.MaxValue && tileCache.type <= (ushort) 261)
|
|
{
|
|
int num5 = (int) tileCache.type - (int) byte.MaxValue;
|
|
Type1 = 86 + num5;
|
|
if (num5 == 6)
|
|
Type1 = 138;
|
|
}
|
|
if (tileCache.type >= (ushort) 262 && tileCache.type <= (ushort) 268)
|
|
{
|
|
int num6 = (int) tileCache.type - 262;
|
|
Type1 = 86 + num6;
|
|
if (num6 == 6)
|
|
Type1 = 138;
|
|
}
|
|
if (tileCache.type == (ushort) 178)
|
|
{
|
|
int num7 = (int) tileCache.frameX / 18;
|
|
Type1 = 86 + num7;
|
|
if (num7 == 6)
|
|
Type1 = 138;
|
|
}
|
|
if (tileCache.type == (ushort) 440)
|
|
{
|
|
switch ((int) tileCache.frameX / 54)
|
|
{
|
|
case 0:
|
|
Type1 = 90;
|
|
break;
|
|
case 1:
|
|
Type1 = 88;
|
|
break;
|
|
case 2:
|
|
Type1 = 89;
|
|
break;
|
|
case 3:
|
|
Type1 = 87;
|
|
break;
|
|
case 4:
|
|
Type1 = 86;
|
|
break;
|
|
case 5:
|
|
Type1 = 91;
|
|
break;
|
|
case 6:
|
|
Type1 = 138;
|
|
break;
|
|
default:
|
|
Type1 = -1;
|
|
break;
|
|
}
|
|
if (tileCache.frameY < (short) 54)
|
|
Type1 = -1;
|
|
}
|
|
switch (tileCache.type)
|
|
{
|
|
case 426:
|
|
case 427:
|
|
Type1 = 90;
|
|
break;
|
|
case 430:
|
|
case 435:
|
|
Type1 = 89;
|
|
break;
|
|
case 431:
|
|
case 436:
|
|
Type1 = 88;
|
|
break;
|
|
case 432:
|
|
case 437:
|
|
Type1 = 87;
|
|
break;
|
|
case 433:
|
|
case 438:
|
|
Type1 = 86;
|
|
break;
|
|
case 434:
|
|
case 439:
|
|
Type1 = 91;
|
|
break;
|
|
case 496:
|
|
Type1 = 109;
|
|
break;
|
|
case 549:
|
|
Type1 = 3;
|
|
break;
|
|
case 552:
|
|
Type1 = 32;
|
|
break;
|
|
}
|
|
if (tileCache.type == (ushort) 186)
|
|
Type1 = tileCache.frameX > (short) 360 ? (tileCache.frameX > (short) 846 ? (tileCache.frameX > (short) 954 ? (tileCache.frameX > (short) 1062 ? (tileCache.frameX > (short) 1170 ? (tileCache.frameX > (short) 1332 ? (tileCache.frameX > (short) 1386 ? 80 : 10) : 0) : 10) : 11) : 9) : 1) : 26;
|
|
if (tileCache.type == (ushort) 187)
|
|
{
|
|
if (tileCache.frameX <= (short) 144)
|
|
Type1 = 1;
|
|
else if (tileCache.frameX <= (short) 306)
|
|
Type1 = 38;
|
|
else if (tileCache.frameX <= (short) 468)
|
|
Type1 = 36;
|
|
else if (tileCache.frameX <= (short) 738)
|
|
Type1 = 30;
|
|
else if (tileCache.frameX <= (short) 970)
|
|
Type1 = 1;
|
|
else if (tileCache.frameX <= (short) 1132)
|
|
Type1 = 148;
|
|
else if (tileCache.frameX <= (short) 1132)
|
|
Type1 = 155;
|
|
else if (tileCache.frameX <= (short) 1348)
|
|
Type1 = 1;
|
|
else if (tileCache.frameX <= (short) 1564)
|
|
Type1 = 0;
|
|
else if (tileCache.frameX <= (short) 1890)
|
|
Type1 = 250;
|
|
else if (tileCache.frameX <= (short) 2196)
|
|
Type1 = 240;
|
|
else if (tileCache.frameX <= (short) 2520)
|
|
Type1 = 236;
|
|
}
|
|
if (tileCache.type == (ushort) 105)
|
|
{
|
|
Type1 = 1;
|
|
if (tileCache.frameX >= (short) 1548 && tileCache.frameX <= (short) 1654 && tileCache.frameY < (short) 54)
|
|
Type1 = 148;
|
|
}
|
|
if (tileCache.type == (ushort) 349)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 337 || tileCache.type == (ushort) 506)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 239)
|
|
{
|
|
int num8 = (int) tileCache.frameX / 18;
|
|
if (num8 == 0)
|
|
Type1 = 9;
|
|
if (num8 == 1)
|
|
Type1 = 81;
|
|
if (num8 == 2)
|
|
Type1 = 8;
|
|
if (num8 == 3)
|
|
Type1 = 82;
|
|
if (num8 == 4)
|
|
Type1 = 11;
|
|
if (num8 == 5)
|
|
Type1 = 83;
|
|
if (num8 == 6)
|
|
Type1 = 10;
|
|
if (num8 == 7)
|
|
Type1 = 84;
|
|
if (num8 == 8)
|
|
Type1 = 14;
|
|
if (num8 == 9)
|
|
Type1 = 23;
|
|
if (num8 == 10)
|
|
Type1 = 25;
|
|
if (num8 == 11)
|
|
Type1 = 48;
|
|
if (num8 == 12)
|
|
Type1 = 144;
|
|
if (num8 == 13)
|
|
Type1 = 49;
|
|
if (num8 == 14)
|
|
Type1 = 145;
|
|
if (num8 == 15)
|
|
Type1 = 50;
|
|
if (num8 == 16)
|
|
Type1 = 146;
|
|
if (num8 == 17)
|
|
Type1 = 128;
|
|
if (num8 == 18)
|
|
Type1 = 84;
|
|
if (num8 == 19)
|
|
Type1 = 117;
|
|
if (num8 == 20)
|
|
Type1 = 42;
|
|
if (num8 == 21)
|
|
Type1 = -1;
|
|
if (num8 == 22)
|
|
Type1 = 265;
|
|
}
|
|
if (tileCache.type == (ushort) 185)
|
|
{
|
|
if (tileCache.frameY == (short) 18)
|
|
{
|
|
int num9 = (int) tileCache.frameX / 36;
|
|
if (num9 < 6)
|
|
Type1 = 1;
|
|
else if (num9 < 16)
|
|
{
|
|
Type1 = 26;
|
|
}
|
|
else
|
|
{
|
|
switch (num9)
|
|
{
|
|
case 16:
|
|
Type1 = 9;
|
|
break;
|
|
case 17:
|
|
Type1 = 11;
|
|
break;
|
|
case 18:
|
|
Type1 = 10;
|
|
break;
|
|
case 19:
|
|
Type1 = 86;
|
|
break;
|
|
case 20:
|
|
Type1 = 87;
|
|
break;
|
|
case 21:
|
|
Type1 = 88;
|
|
break;
|
|
case 22:
|
|
Type1 = 89;
|
|
break;
|
|
case 23:
|
|
Type1 = 90;
|
|
break;
|
|
case 24:
|
|
Type1 = 91;
|
|
break;
|
|
default:
|
|
if (num9 < 31)
|
|
{
|
|
Type1 = 80;
|
|
break;
|
|
}
|
|
if (num9 < 33)
|
|
{
|
|
Type1 = 7;
|
|
break;
|
|
}
|
|
if (num9 < 34)
|
|
{
|
|
Type1 = 8;
|
|
break;
|
|
}
|
|
if (num9 < 39)
|
|
{
|
|
Type1 = 30;
|
|
break;
|
|
}
|
|
if (num9 < 42)
|
|
{
|
|
Type1 = 1;
|
|
break;
|
|
}
|
|
if (num9 < 48)
|
|
{
|
|
Type1 = 32;
|
|
break;
|
|
}
|
|
if (num9 < 54)
|
|
{
|
|
Type1 = 240;
|
|
break;
|
|
}
|
|
if (num9 < 60)
|
|
{
|
|
Type1 = 236;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num10 = (int) tileCache.frameX / 18;
|
|
if (num10 < 6)
|
|
Type1 = 1;
|
|
else if (num10 < 12)
|
|
Type1 = 0;
|
|
else if (num10 < 27)
|
|
Type1 = 26;
|
|
else if (num10 < 32)
|
|
Type1 = 1;
|
|
else if (num10 < 35)
|
|
Type1 = 0;
|
|
else if (num10 < 46)
|
|
Type1 = 80;
|
|
else if (num10 < 52)
|
|
Type1 = 30;
|
|
else if (num10 < 58)
|
|
Type1 = 32;
|
|
else if (num10 < 64)
|
|
Type1 = 240;
|
|
else if (num10 < 70)
|
|
Type1 = 236;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 237)
|
|
Type1 = 148;
|
|
if (tileCache.type == (ushort) 157)
|
|
Type1 = 77;
|
|
if (tileCache.type == (ushort) 158 || tileCache.type == (ushort) 232 || tileCache.type == (ushort) 383 || tileCache.type == (ushort) 575)
|
|
Type1 = 78;
|
|
if (tileCache.type == (ushort) 159)
|
|
Type1 = 78;
|
|
if (tileCache.type == (ushort) 15)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 191)
|
|
Type1 = 7;
|
|
if (tileCache.type == (ushort) 5)
|
|
{
|
|
Type1 = 7;
|
|
if (i > 5 && i < Main.maxTilesX - 5)
|
|
{
|
|
int index1 = i;
|
|
int index2 = j;
|
|
if (tileCache.frameX == (short) 66 && tileCache.frameY <= (short) 45)
|
|
++index1;
|
|
if (tileCache.frameX == (short) 88 && tileCache.frameY >= (short) 66 && tileCache.frameY <= (short) 110)
|
|
--index1;
|
|
if (tileCache.frameX == (short) 22 && tileCache.frameY >= (short) 132 && tileCache.frameY <= (short) 176)
|
|
--index1;
|
|
if (tileCache.frameX == (short) 44 && tileCache.frameY >= (short) 132 && tileCache.frameY <= (short) 176)
|
|
++index1;
|
|
if (tileCache.frameX == (short) 44 && tileCache.frameY >= (short) 132 && tileCache.frameY <= (short) 176)
|
|
++index1;
|
|
if (tileCache.frameX == (short) 44 && tileCache.frameY >= (short) 198)
|
|
++index1;
|
|
if (tileCache.frameX == (short) 66 && tileCache.frameY >= (short) 198)
|
|
--index1;
|
|
while (Main.tile[index1, index2] != null && (!Main.tile[index1, index2].active() || !Main.tileSolid[(int) Main.tile[index1, index2].type]))
|
|
++index2;
|
|
if (Main.tile[index1, index2] != null)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 23)
|
|
Type1 = 77;
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 60)
|
|
Type1 = 78;
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 70)
|
|
Type1 = 26;
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 109)
|
|
Type1 = 79;
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 199)
|
|
Type1 = 121;
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 147)
|
|
Type1 = 122;
|
|
}
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 323)
|
|
{
|
|
Type1 = 215;
|
|
if (i > 5 && i < Main.maxTilesX - 5)
|
|
{
|
|
int index3 = i;
|
|
int index4 = j;
|
|
while (Main.tile[index3, index4] != null && (!Main.tile[index3, index4].active() || !Main.tileSolid[(int) Main.tile[index3, index4].type]))
|
|
++index4;
|
|
if (Main.tile[index3, index4] != null)
|
|
{
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 234)
|
|
Type1 = 121;
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 116)
|
|
Type1 = 79;
|
|
if (Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 112)
|
|
Type1 = 77;
|
|
}
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 137)
|
|
{
|
|
Type1 = 1;
|
|
if ((int) tileCache.frameY / 18 > 0)
|
|
Type1 = 148;
|
|
}
|
|
if (tileCache.type == (ushort) 443)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 444)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 212)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 213)
|
|
Type1 = 129;
|
|
if (tileCache.type == (ushort) 214)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 215)
|
|
Type1 = -6;
|
|
if (tileCache.type == (ushort) 325)
|
|
Type1 = 81;
|
|
if (tileCache.type == (ushort) 251)
|
|
Type1 = 189;
|
|
if (tileCache.type == (ushort) 252)
|
|
Type1 = 190;
|
|
if (tileCache.type == (ushort) 253)
|
|
Type1 = 191;
|
|
if (tileCache.type == (ushort) 254)
|
|
{
|
|
if (tileCache.frameX < (short) 72)
|
|
Type1 = 3;
|
|
else if (tileCache.frameX < (short) 108)
|
|
{
|
|
Type1 = 3;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Type1 = 189;
|
|
}
|
|
else if (tileCache.frameX < (short) 144)
|
|
{
|
|
Type1 = 3;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Type1 = 189;
|
|
}
|
|
else
|
|
{
|
|
Type1 = 3;
|
|
if (WorldGen.genRand.Next(4) != 0)
|
|
Type1 = 189;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 467)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 21)
|
|
Type1 = tileCache.frameX < (short) 1008 ? (tileCache.frameX < (short) 612 ? (tileCache.frameX < (short) 576 ? (tileCache.frameX < (short) 540 ? (tileCache.frameX < (short) 504 ? (tileCache.frameX < (short) 468 ? (tileCache.frameX < (short) 432 ? (tileCache.frameX < (short) 396 ? (tileCache.frameX < (short) 360 ? (tileCache.frameX < (short) 324 ? (tileCache.frameX < (short) 288 ? (tileCache.frameX < (short) 252 ? (tileCache.frameX < (short) 216 ? (tileCache.frameX < (short) 180 ? (tileCache.frameX < (short) 108 ? (tileCache.frameX < (short) 36 ? 7 : 10) : 37) : 7) : 1) : 77) : 78) : 79) : 10) : 11) : 7) : 116) : 126) : 26) : 148) : 11) : -1;
|
|
if (tileCache.type == (ushort) 382)
|
|
Type1 = 3;
|
|
if (tileCache.type == (ushort) 2 || tileCache.type == (ushort) 477)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 2 : 0;
|
|
if (tileCache.type == (ushort) sbyte.MaxValue)
|
|
Type1 = 67;
|
|
if (tileCache.type == (ushort) 91)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 198)
|
|
Type1 = 109;
|
|
if (tileCache.type == (ushort) 26)
|
|
Type1 = tileCache.frameX < (short) 54 ? 8 : 5;
|
|
if (tileCache.type == (ushort) 34)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 6)
|
|
Type1 = 8;
|
|
if (tileCache.type == (ushort) 7 || tileCache.type == (ushort) 47 || tileCache.type == (ushort) 284)
|
|
Type1 = 9;
|
|
if (tileCache.type == (ushort) 8 || tileCache.type == (ushort) 45 || tileCache.type == (ushort) 102)
|
|
Type1 = 10;
|
|
if (tileCache.type == (ushort) 9 || tileCache.type == (ushort) 42 || tileCache.type == (ushort) 46 || tileCache.type == (ushort) 126 || tileCache.type == (ushort) 136)
|
|
Type1 = 11;
|
|
if (tileCache.type == (ushort) 166 || tileCache.type == (ushort) 175)
|
|
Type1 = 81;
|
|
if (tileCache.type == (ushort) 167)
|
|
Type1 = 82;
|
|
if (tileCache.type == (ushort) 168 || tileCache.type == (ushort) 176)
|
|
Type1 = 83;
|
|
if (tileCache.type == (ushort) 169 || tileCache.type == (ushort) 177)
|
|
Type1 = 84;
|
|
if (tileCache.type == (ushort) 199)
|
|
Type1 = 117;
|
|
if (tileCache.type == (ushort) 205)
|
|
Type1 = 125;
|
|
if (tileCache.type == (ushort) 201)
|
|
Type1 = 125;
|
|
if (tileCache.type == (ushort) 211)
|
|
Type1 = 128;
|
|
if (tileCache.type == (ushort) 227)
|
|
{
|
|
switch ((int) tileCache.frameX / 34)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
Type1 = 26;
|
|
break;
|
|
case 2:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
Type1 = 40;
|
|
break;
|
|
case 3:
|
|
Type1 = 3;
|
|
break;
|
|
case 7:
|
|
Type1 = 117;
|
|
break;
|
|
case 8:
|
|
Type1 = 17;
|
|
break;
|
|
case 9:
|
|
Type1 = 6;
|
|
break;
|
|
case 10:
|
|
Type1 = 3;
|
|
break;
|
|
case 11:
|
|
Type1 = 26;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 204 || tileCache.type == (ushort) 478)
|
|
{
|
|
Type1 = 117;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
Type1 = 1;
|
|
}
|
|
if (tileCache.type == (ushort) 203)
|
|
Type1 = 117;
|
|
if (tileCache.type == (ushort) 243)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 13 : 7;
|
|
if (tileCache.type == (ushort) 244)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 13 : 1;
|
|
if (tileCache.type == (ushort) 597)
|
|
Type1 = -1;
|
|
else if (tileCache.type >= (ushort) 358 && tileCache.type <= (ushort) 364 || tileCache.type >= (ushort) 275 && tileCache.type <= (ushort) 282 || tileCache.type == (ushort) 285 || tileCache.type == (ushort) 286 || tileCache.type >= (ushort) 288 && tileCache.type <= (ushort) 297 || tileCache.type >= (ushort) 316 && tileCache.type <= (ushort) 318 || tileCache.type == (ushort) 298 || tileCache.type == (ushort) 299 || tileCache.type == (ushort) 309 || tileCache.type == (ushort) 310 || tileCache.type == (ushort) 339 || tileCache.type == (ushort) 538 || tileCache.type == (ushort) 413 || tileCache.type == (ushort) 414 || tileCache.type == (ushort) 505 || tileCache.type == (ushort) 521 || tileCache.type == (ushort) 522 || tileCache.type == (ushort) 523 || tileCache.type == (ushort) 524 || tileCache.type == (ushort) 525 || tileCache.type == (ushort) 526 || tileCache.type == (ushort) 527 || tileCache.type == (ushort) 532 || tileCache.type == (ushort) 543 || tileCache.type == (ushort) 544 || tileCache.type == (ushort) 550 || tileCache.type == (ushort) 551 || tileCache.type == (ushort) 533 || tileCache.type == (ushort) 553 || tileCache.type == (ushort) 554 || tileCache.type == (ushort) 555 || tileCache.type == (ushort) 556 || tileCache.type == (ushort) 558 || tileCache.type == (ushort) 559 || tileCache.type == (ushort) 542 || tileCache.type == (ushort) 391 || tileCache.type == (ushort) 394 || tileCache.type == (ushort) 392 || tileCache.type == (ushort) 393 || tileCache.type == (ushort) 568 || tileCache.type == (ushort) 569 || tileCache.type == (ushort) 570 || tileCache.type == (ushort) 582 || tileCache.type == (ushort) 580 || tileCache.type == (ushort) 598 || tileCache.type == (ushort) 599 || tileCache.type == (ushort) 600 || tileCache.type == (ushort) 601 || tileCache.type == (ushort) 602 || tileCache.type == (ushort) 603 || tileCache.type == (ushort) 604 || tileCache.type == (ushort) 605 || tileCache.type == (ushort) 606 || tileCache.type == (ushort) 607 || tileCache.type == (ushort) 608 || tileCache.type == (ushort) 609 || tileCache.type == (ushort) 610 || tileCache.type == (ushort) 611 || tileCache.type == (ushort) 612 || tileCache.type == (ushort) 619 || tileCache.type == (ushort) 620)
|
|
{
|
|
Type1 = 13;
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
Type1 = -1;
|
|
}
|
|
if (tileCache.type == (ushort) 13)
|
|
Type1 = tileCache.frameX < (short) 90 ? 13 : -1;
|
|
if (tileCache.type == (ushort) 189)
|
|
Type1 = 16;
|
|
if (tileCache.type == (ushort) 460)
|
|
Type1 = 16;
|
|
if (tileCache.type == (ushort) 530)
|
|
{
|
|
switch (Main.tile[i, j + 2 - (int) tileCache.frameY / 18].type)
|
|
{
|
|
case 112:
|
|
Type1 = 17;
|
|
break;
|
|
case 116:
|
|
Type1 = 47;
|
|
break;
|
|
case 234:
|
|
Type1 = 125;
|
|
break;
|
|
default:
|
|
Type1 = tileCache.frameX >= (short) 270 ? 291 : 40;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 518)
|
|
{
|
|
if (tileCache.frameY == (short) 0)
|
|
Type1 = 3;
|
|
else if (tileCache.frameY == (short) 18)
|
|
Type1 = 47;
|
|
else if (tileCache.frameY == (short) 36)
|
|
Type1 = 40;
|
|
}
|
|
else if (tileCache.type == (ushort) 519)
|
|
{
|
|
if (tileCache.frameY == (short) 0)
|
|
Type1 = 3;
|
|
else if (tileCache.frameY == (short) 18)
|
|
Type1 = 40;
|
|
else if (tileCache.frameY == (short) 36)
|
|
Type1 = 47;
|
|
else if (tileCache.frameY == (short) 54)
|
|
Type1 = 125;
|
|
else if (tileCache.frameY == (short) 72)
|
|
Type1 = 17;
|
|
else if (tileCache.frameY == (short) 90)
|
|
Type1 = 26;
|
|
}
|
|
else if (tileCache.type == (ushort) 528)
|
|
Type1 = 26;
|
|
if (tileCache.type == (ushort) 12)
|
|
Type1 = 12;
|
|
if (tileCache.type == (ushort) 3 || tileCache.type == (ushort) 73)
|
|
Type1 = 3;
|
|
if (tileCache.type == (ushort) 54)
|
|
Type1 = 13;
|
|
if (tileCache.type == (ushort) 22 || tileCache.type == (ushort) 140)
|
|
Type1 = 14;
|
|
if (tileCache.type == (ushort) 78)
|
|
Type1 = 22;
|
|
if (tileCache.type == (ushort) 28)
|
|
{
|
|
Type1 = 22;
|
|
if (tileCache.frameY >= (short) 72 && tileCache.frameY <= (short) 90)
|
|
Type1 = 1;
|
|
if (tileCache.frameY >= (short) 144 && tileCache.frameY <= (short) 234)
|
|
Type1 = 48;
|
|
if (tileCache.frameY >= (short) 252 && tileCache.frameY <= (short) 358)
|
|
Type1 = 85;
|
|
if (tileCache.frameY >= (short) 360 && tileCache.frameY <= (short) 466)
|
|
Type1 = 26;
|
|
if (tileCache.frameY >= (short) 468 && tileCache.frameY <= (short) 574)
|
|
Type1 = 36;
|
|
if (tileCache.frameY >= (short) 576 && tileCache.frameY <= (short) 790)
|
|
Type1 = 18;
|
|
if (tileCache.frameY >= (short) 792 && tileCache.frameY <= (short) 898)
|
|
Type1 = 5;
|
|
if (tileCache.frameY >= (short) 900 && tileCache.frameY <= (short) 1006)
|
|
Type1 = 0;
|
|
if (tileCache.frameY >= (short) 1008 && tileCache.frameY <= (short) 1114)
|
|
Type1 = 148;
|
|
if (tileCache.frameY >= (short) 1116 && tileCache.frameY <= (short) 1222)
|
|
Type1 = 241;
|
|
if (tileCache.frameY >= (short) 1224 && tileCache.frameY <= (short) 1330)
|
|
Type1 = 287;
|
|
}
|
|
if (tileCache.type == (ushort) 163)
|
|
Type1 = 118;
|
|
if (tileCache.type == (ushort) 164)
|
|
Type1 = 119;
|
|
if (tileCache.type == (ushort) 200)
|
|
Type1 = 120;
|
|
if (tileCache.type == (ushort) 221 || tileCache.type == (ushort) 248)
|
|
Type1 = 144;
|
|
if (tileCache.type == (ushort) 222 || tileCache.type == (ushort) 249)
|
|
Type1 = 145;
|
|
if (tileCache.type == (ushort) 223 || tileCache.type == (ushort) 250)
|
|
Type1 = 146;
|
|
if (tileCache.type == (ushort) 224)
|
|
Type1 = 149;
|
|
if (tileCache.type == (ushort) 225)
|
|
Type1 = 147;
|
|
if (tileCache.type == (ushort) 229)
|
|
Type1 = 153;
|
|
if (tileCache.type == (ushort) 231)
|
|
{
|
|
Type1 = 153;
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
Type1 = 26;
|
|
}
|
|
if (tileCache.type == (ushort) 226)
|
|
Type1 = 148;
|
|
if (tileCache.type == (ushort) 103)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 29)
|
|
Type1 = 23;
|
|
if (tileCache.type == (ushort) 40)
|
|
Type1 = 28;
|
|
if (tileCache.type == (ushort) 49)
|
|
Type1 = 29;
|
|
if (tileCache.type == (ushort) 50)
|
|
Type1 = 22;
|
|
if (tileCache.type == (ushort) 51)
|
|
Type1 = 30;
|
|
if (tileCache.type == (ushort) 52 || tileCache.type == (ushort) 353)
|
|
Type1 = 3;
|
|
if (tileCache.type == (ushort) 53 || tileCache.type == (ushort) 81 || tileCache.type == (ushort) 151 || tileCache.type == (ushort) 202 || tileCache.type == (ushort) 274 || tileCache.type == (ushort) 495)
|
|
Type1 = 32;
|
|
if (tileCache.type == (ushort) 56 || tileCache.type == (ushort) 152)
|
|
Type1 = 37;
|
|
if (tileCache.type == (ushort) 75)
|
|
Type1 = 109;
|
|
if (tileCache.type == (ushort) 57 || tileCache.type == (ushort) 119 || tileCache.type == (ushort) 141 || tileCache.type == (ushort) 234)
|
|
Type1 = 36;
|
|
if (tileCache.type == (ushort) 59 || tileCache.type == (ushort) 120)
|
|
Type1 = 38;
|
|
if (tileCache.type == (ushort) 61 || tileCache.type == (ushort) 62 || tileCache.type == (ushort) 74 || tileCache.type == (ushort) 80 || tileCache.type == (ushort) 188 || tileCache.type == (ushort) 233 || tileCache.type == (ushort) 236 || tileCache.type == (ushort) 384)
|
|
Type1 = 40;
|
|
if (tileCache.type == (ushort) 485)
|
|
Type1 = 32;
|
|
if (tileCache.type == (ushort) 238)
|
|
Type1 = WorldGen.genRand.Next(3) != 0 ? 166 : 167;
|
|
if (tileCache.type == (ushort) 69)
|
|
Type1 = 7;
|
|
if (tileCache.type == (ushort) 71 || tileCache.type == (ushort) 72 || tileCache.type == (ushort) 190 || tileCache.type == (ushort) 578)
|
|
Type1 = 26;
|
|
if (tileCache.type == (ushort) 70)
|
|
Type1 = 17;
|
|
if (tileCache.type == (ushort) 112)
|
|
Type1 = 14;
|
|
if (tileCache.type == (ushort) 123)
|
|
Type1 = 53;
|
|
if (tileCache.type == (ushort) 161)
|
|
Type1 = 80;
|
|
if (tileCache.type == (ushort) 206)
|
|
Type1 = 80;
|
|
if (tileCache.type == (ushort) 162)
|
|
Type1 = 80;
|
|
if (tileCache.type == (ushort) 165)
|
|
{
|
|
switch ((int) tileCache.frameX / 54)
|
|
{
|
|
case 0:
|
|
Type1 = 80;
|
|
break;
|
|
case 1:
|
|
Type1 = 1;
|
|
break;
|
|
case 2:
|
|
Type1 = 30;
|
|
break;
|
|
case 3:
|
|
Type1 = 147;
|
|
break;
|
|
case 4:
|
|
Type1 = 1;
|
|
break;
|
|
case 5:
|
|
Type1 = 14;
|
|
break;
|
|
case 6:
|
|
Type1 = 117;
|
|
break;
|
|
case 7:
|
|
Type1 = 250;
|
|
break;
|
|
case 8:
|
|
Type1 = 240;
|
|
break;
|
|
case 9:
|
|
Type1 = 236;
|
|
break;
|
|
default:
|
|
Type1 = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 193)
|
|
Type1 = 4;
|
|
if (tileCache.type == (ushort) 194)
|
|
Type1 = 26;
|
|
if (tileCache.type == (ushort) 195)
|
|
Type1 = 5;
|
|
if (tileCache.type == (ushort) 196)
|
|
Type1 = 108;
|
|
if (tileCache.type == (ushort) 460)
|
|
Type1 = 108;
|
|
if (tileCache.type == (ushort) 197)
|
|
Type1 = 4;
|
|
if (tileCache.type == (ushort) 153)
|
|
Type1 = 26;
|
|
if (tileCache.type == (ushort) 154)
|
|
Type1 = 32;
|
|
if (tileCache.type == (ushort) 155)
|
|
Type1 = 2;
|
|
if (tileCache.type == (ushort) 156)
|
|
Type1 = 1;
|
|
if (tileCache.type == (ushort) 116 || tileCache.type == (ushort) 118 || tileCache.type == (ushort) 147 || tileCache.type == (ushort) 148)
|
|
Type1 = 51;
|
|
if (tileCache.type == (ushort) 109 || tileCache.type == (ushort) 492)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 47 : 0;
|
|
if (tileCache.type == (ushort) 110 || tileCache.type == (ushort) 113 || tileCache.type == (ushort) 115)
|
|
Type1 = 47;
|
|
if (tileCache.type == (ushort) 107 || tileCache.type == (ushort) 121)
|
|
Type1 = 48;
|
|
if (tileCache.type == (ushort) 108 || tileCache.type == (ushort) 122 || tileCache.type == (ushort) 146)
|
|
Type1 = 49;
|
|
if (tileCache.type == (ushort) 111 || tileCache.type == (ushort) 145 || tileCache.type == (ushort) 150)
|
|
Type1 = 50;
|
|
if (tileCache.type == (ushort) 133)
|
|
{
|
|
Type1 = 50;
|
|
if (tileCache.frameX >= (short) 54)
|
|
Type1 = 146;
|
|
}
|
|
if (tileCache.type == (ushort) 134)
|
|
{
|
|
Type1 = 49;
|
|
if (tileCache.frameX >= (short) 36)
|
|
Type1 = 145;
|
|
}
|
|
if (tileCache.type == (ushort) 149)
|
|
Type1 = 49;
|
|
if (Main.tileAlch[(int) tileCache.type])
|
|
{
|
|
int num11 = (int) tileCache.frameX / 18;
|
|
if (num11 == 0)
|
|
Type1 = 3;
|
|
if (num11 == 1)
|
|
Type1 = 3;
|
|
if (num11 == 2)
|
|
Type1 = 7;
|
|
if (num11 == 3)
|
|
Type1 = 17;
|
|
if (num11 == 4)
|
|
Type1 = 289;
|
|
if (num11 == 5)
|
|
Type1 = 6;
|
|
if (num11 == 6)
|
|
Type1 = 224;
|
|
}
|
|
if (tileCache.type == (ushort) 58 || tileCache.type == (ushort) 76 || tileCache.type == (ushort) 77)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 25 : 6;
|
|
if (tileCache.type == (ushort) 37)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 23 : 6;
|
|
if (tileCache.type == (ushort) 32)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 24 : 14;
|
|
if (tileCache.type == (ushort) 352)
|
|
Type1 = WorldGen.genRand.Next(3) != 0 ? 125 : 5;
|
|
if (tileCache.type == (ushort) 23 || tileCache.type == (ushort) 24)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 17 : 14;
|
|
if (tileCache.type == (ushort) 25 || tileCache.type == (ushort) 31)
|
|
Type1 = tileCache.type != (ushort) 31 || tileCache.frameX < (short) 36 ? (WorldGen.genRand.Next(2) != 0 ? 1 : 14) : 5;
|
|
if (tileCache.type == (ushort) 20)
|
|
{
|
|
switch ((int) tileCache.frameX / 54)
|
|
{
|
|
case 1:
|
|
Type1 = 122;
|
|
break;
|
|
case 2:
|
|
Type1 = 78;
|
|
break;
|
|
case 3:
|
|
Type1 = 77;
|
|
break;
|
|
case 4:
|
|
Type1 = 121;
|
|
break;
|
|
case 5:
|
|
Type1 = 79;
|
|
break;
|
|
default:
|
|
Type1 = 7;
|
|
break;
|
|
}
|
|
}
|
|
if (tileCache.type == (ushort) 27)
|
|
Type1 = WorldGen.genRand.Next(2) != 0 ? 19 : 3;
|
|
if (tileCache.type == (ushort) 129)
|
|
{
|
|
if (tileCache.frameX >= (short) 324)
|
|
num3 = 69;
|
|
Type1 = tileCache.frameX == (short) 0 || tileCache.frameX == (short) 54 || tileCache.frameX == (short) 108 ? 68 : (tileCache.frameX == (short) 18 || tileCache.frameX == (short) 72 || tileCache.frameX == (short) 126 ? 69 : 70);
|
|
}
|
|
if (tileCache.type == (ushort) 385)
|
|
Type1 = WorldGen.genRand.Next(68, 71);
|
|
if (tileCache.type == (ushort) 4)
|
|
{
|
|
int index = (int) tileCache.frameY / 22;
|
|
Type1 = TorchID.Dust[index];
|
|
}
|
|
if (tileCache.type == (ushort) 35)
|
|
{
|
|
Type1 = 189;
|
|
if (tileCache.frameX < (short) 36 && WorldGen.genRand.Next(2) == 0)
|
|
Type1 = 6;
|
|
}
|
|
if ((tileCache.type == (ushort) 34 || tileCache.type == (ushort) 42) && WorldGen.genRand.Next(2) == 0)
|
|
Type1 = 6;
|
|
if (tileCache.type == (ushort) 270)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 271)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 581)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 79 || tileCache.type == (ushort) 90 || tileCache.type == (ushort) 101)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 33 || tileCache.type == (ushort) 34 || tileCache.type == (ushort) 42 || tileCache.type == (ushort) 93 || tileCache.type == (ushort) 100)
|
|
Type1 = -1;
|
|
if (tileCache.type == (ushort) 321 || tileCache.type == (ushort) 574)
|
|
Type1 = 214;
|
|
if (tileCache.type == (ushort) 322)
|
|
Type1 = 215;
|
|
bool flag = tileCache.type == (ushort) 178 || tileCache.type == (ushort) 440;
|
|
switch (tileCache.type)
|
|
{
|
|
case 178:
|
|
case 426:
|
|
case 427:
|
|
case 430:
|
|
case 431:
|
|
case 432:
|
|
case 433:
|
|
case 434:
|
|
case 435:
|
|
case 436:
|
|
case 437:
|
|
case 438:
|
|
case 439:
|
|
case 440:
|
|
flag = true;
|
|
break;
|
|
}
|
|
if (Type1 < 0)
|
|
return 6000;
|
|
if (tileCache.type == (ushort) 518)
|
|
{
|
|
int num12 = (int) tileCache.liquid / 16 - 3;
|
|
if (WorldGen.SolidTile(i, j - 1) && num12 > 8)
|
|
num12 = 8;
|
|
return Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16 - num12)), 16, 16, Type1);
|
|
}
|
|
if (tileCache.type == (ushort) 352 && Type1 == 5)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 5, Alpha: 100);
|
|
Main.dust[index].scale = 1.5f;
|
|
Main.dust[index].noGravity = true;
|
|
Main.dust[index].velocity *= 1.65f;
|
|
Main.dust[index].fadeIn = 1.6f;
|
|
return index;
|
|
}
|
|
if (tileCache.type == (ushort) 160)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 66, Alpha: 100, newColor: new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB), Scale: 0.75f);
|
|
Main.dust[index].noGravity = true;
|
|
return index;
|
|
}
|
|
if (tileCache.type == (ushort) 323)
|
|
{
|
|
int frameY = (int) tileCache.frameY;
|
|
return Dust.NewDust(new Vector2((float) (i * 16 + frameY), (float) (j * 16)), 16, 16, Type1);
|
|
}
|
|
if (tileCache.type == (ushort) 314)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, 213, (float) WorldGen.genRand.Next(-2, 3), (float) WorldGen.genRand.Next(-2, 3));
|
|
Main.dust[index].noGravity = true;
|
|
Main.dust[index].fadeIn = (float) ((double) Main.dust[index].scale + 1.0 + 0.00999999977648258 * (double) WorldGen.genRand.Next(0, 51));
|
|
Main.dust[index].noGravity = true;
|
|
return index;
|
|
}
|
|
if (flag)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1, Alpha: 75, Scale: 0.75f);
|
|
Main.dust[index].noLight = true;
|
|
return index;
|
|
}
|
|
if (tileCache.type == (ushort) 193 || tileCache.type == (ushort) 18 && Type1 == 4 || tileCache.type == (ushort) 19 && Type1 == 4)
|
|
return Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1, Alpha: 75, newColor: new Color(0, 80, (int) byte.MaxValue, 100), Scale: 0.75f);
|
|
if (tileCache.type == (ushort) 197)
|
|
return Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1, Alpha: 75, newColor: new Color(97, 200, (int) byte.MaxValue, 100), Scale: 0.75f);
|
|
if (tileCache.type == (ushort) 185 && Type1 >= 86 && Type1 <= 91)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1, Alpha: 75, Scale: 0.75f);
|
|
Main.dust[index].noLight = true;
|
|
return index;
|
|
}
|
|
if (tileCache.type == (ushort) 4 && Type1 == 66)
|
|
{
|
|
int index = Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1, newColor: new Color((float) Main.DiscoR / (float) byte.MaxValue, (float) Main.DiscoG / (float) byte.MaxValue, (float) Main.DiscoB / (float) byte.MaxValue));
|
|
Main.dust[index].noGravity = true;
|
|
return index;
|
|
}
|
|
if (Type1 != 139)
|
|
return Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type1);
|
|
int Type2 = Type1 + Main.rand.Next(4);
|
|
return Dust.NewDust(new Vector2((float) (i * 16), (float) (j * 16)), 16, 16, Type2);
|
|
}
|
|
|
|
public static bool IsOpenDoorAnchorFrame(int x, int y)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (!tile.active() || tile.type != (ushort) 11)
|
|
return false;
|
|
int num = (int) tile.frameX % 72;
|
|
return num < 18 || num >= 54;
|
|
}
|
|
|
|
public static bool IsLockedDoor(int x, int y) => WorldGen.IsLockedDoor(Main.tile[x, y]);
|
|
|
|
public static bool IsLockedDoor(Tile t) => t.type == (ushort) 10 && t.frameY >= (short) 594 && t.frameY <= (short) 646 && t.frameX < (short) 54;
|
|
|
|
public static void DropDoorItem(int x, int y, int doorStyle)
|
|
{
|
|
int Type = 0;
|
|
switch (doorStyle)
|
|
{
|
|
case 0:
|
|
Type = 25;
|
|
break;
|
|
case 9:
|
|
Type = 837;
|
|
break;
|
|
case 10:
|
|
Type = 912;
|
|
break;
|
|
case 12:
|
|
Type = 1137;
|
|
break;
|
|
case 13:
|
|
Type = 1138;
|
|
break;
|
|
case 14:
|
|
Type = 1139;
|
|
break;
|
|
case 15:
|
|
Type = 1140;
|
|
break;
|
|
case 16:
|
|
Type = 1411;
|
|
break;
|
|
case 17:
|
|
Type = 1412;
|
|
break;
|
|
case 18:
|
|
Type = 1413;
|
|
break;
|
|
case 19:
|
|
Type = 1458;
|
|
break;
|
|
default:
|
|
if (doorStyle >= 20 && doorStyle <= 23)
|
|
{
|
|
Type = 1709 + doorStyle - 20;
|
|
break;
|
|
}
|
|
switch (doorStyle)
|
|
{
|
|
case 24:
|
|
Type = 1793;
|
|
break;
|
|
case 25:
|
|
Type = 1815;
|
|
break;
|
|
case 26:
|
|
Type = 1924;
|
|
break;
|
|
case 27:
|
|
Type = 2044;
|
|
break;
|
|
case 28:
|
|
Type = 2265;
|
|
break;
|
|
case 29:
|
|
Type = 2528;
|
|
break;
|
|
case 30:
|
|
Type = 2561;
|
|
break;
|
|
case 31:
|
|
Type = 2576;
|
|
break;
|
|
case 32:
|
|
Type = 2815;
|
|
break;
|
|
case 33:
|
|
Type = 3129;
|
|
break;
|
|
case 34:
|
|
Type = 3131;
|
|
break;
|
|
case 35:
|
|
Type = 3130;
|
|
break;
|
|
case 36:
|
|
Type = 3888;
|
|
break;
|
|
case 37:
|
|
Type = 3941;
|
|
break;
|
|
case 38:
|
|
Type = 3967;
|
|
break;
|
|
case 39:
|
|
Type = 4155;
|
|
break;
|
|
case 40:
|
|
Type = 4176;
|
|
break;
|
|
case 41:
|
|
Type = 4197;
|
|
break;
|
|
case 42:
|
|
Type = 4218;
|
|
break;
|
|
case 43:
|
|
Type = 4307;
|
|
break;
|
|
case 44:
|
|
Type = 4415;
|
|
break;
|
|
case 45:
|
|
Type = 4576;
|
|
break;
|
|
default:
|
|
if (doorStyle >= 4 && doorStyle <= 8)
|
|
{
|
|
Type = 812 + doorStyle;
|
|
break;
|
|
}
|
|
if (doorStyle != 11)
|
|
{
|
|
Type = 649 + doorStyle;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (Type == 0)
|
|
return;
|
|
Item.NewItem(x * 16, y * 16, 16, 16, Type);
|
|
}
|
|
|
|
public static bool PlayerLOS(int x, int y)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle(x * 16, y * 16, 16, 16);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) ((double) Main.player[index].position.X + (double) Main.player[index].width * 0.5 - (double) NPC.sWidth * 0.6), (int) ((double) Main.player[index].position.Y + (double) Main.player[index].height * 0.5 - (double) NPC.sHeight * 0.6), (int) ((double) NPC.sWidth * 1.2), (int) ((double) NPC.sHeight * 1.2));
|
|
if (rectangle1.Intersects(rectangle2))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool Chlorophyte(int i, int j)
|
|
{
|
|
int num1 = 40;
|
|
int num2 = 130;
|
|
int num3 = 35;
|
|
int num4 = 85;
|
|
if ((double) j < Main.rockLayer)
|
|
{
|
|
num1 /= 2;
|
|
num2 /= 2;
|
|
num3 = (int) ((double) num3 * 1.5);
|
|
num4 = (int) ((double) num4 * 1.5);
|
|
}
|
|
int num5 = 0;
|
|
for (int x = i - num3; x < i + num3; ++x)
|
|
{
|
|
for (int y = j - num3; y < j + num3; ++y)
|
|
{
|
|
if (WorldGen.InWorld(x, y) && Main.tile[x, y].active() && Main.tile[x, y].type == (ushort) 211)
|
|
++num5;
|
|
}
|
|
}
|
|
if (num5 > num1)
|
|
return false;
|
|
int num6 = 0;
|
|
for (int x = i - num4; x < i + num4; ++x)
|
|
{
|
|
for (int y = j - num4; y < j + num4; ++y)
|
|
{
|
|
if (WorldGen.InWorld(x, y) && Main.tile[x, y].active() && Main.tile[x, y].type == (ushort) 211)
|
|
++num6;
|
|
}
|
|
}
|
|
return num6 <= num2;
|
|
}
|
|
|
|
private static bool nearbyChlorophyte(int i, int j)
|
|
{
|
|
float num1 = 0.0f;
|
|
int num2 = 5;
|
|
if (i <= num2 + 5 || i >= Main.maxTilesX - num2 - 5 || j <= num2 + 5 || j >= Main.maxTilesY - num2 - 5)
|
|
return false;
|
|
for (int index1 = i - num2; index1 <= i + num2; ++index1)
|
|
{
|
|
for (int index2 = j - num2; index2 <= j + num2; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && (Main.tile[index1, index2].type == (ushort) 211 || Main.tile[index1, index2].type == (ushort) 346))
|
|
{
|
|
++num1;
|
|
if ((double) num1 >= 4.0)
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return (double) num1 > 0.0 && (double) WorldGen.genRand.Next(5) < (double) num1;
|
|
}
|
|
|
|
private static int CountNearBlocksTypes(
|
|
int i,
|
|
int j,
|
|
int radius,
|
|
int cap = 0,
|
|
params int[] tiletypes)
|
|
{
|
|
if (tiletypes.Length == 0)
|
|
return 0;
|
|
int num1 = i - radius;
|
|
int num2 = i + radius;
|
|
int num3 = j - radius;
|
|
int num4 = j + radius;
|
|
int max = Main.maxTilesX - 1;
|
|
int num5 = Utils.Clamp<int>(num1, 0, max);
|
|
int num6 = Utils.Clamp<int>(num2, 0, Main.maxTilesX - 1);
|
|
int num7 = Utils.Clamp<int>(num3, 0, Main.maxTilesY - 1);
|
|
int num8 = Utils.Clamp<int>(num4, 0, Main.maxTilesY - 1);
|
|
int num9 = 0;
|
|
for (int index1 = num5; index1 <= num6; ++index1)
|
|
{
|
|
for (int index2 = num7; index2 <= num8; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
{
|
|
foreach (int tiletype in tiletypes)
|
|
{
|
|
if (tiletype == (int) Main.tile[index1, index2].type)
|
|
{
|
|
++num9;
|
|
if (cap > 0 && num9 >= cap)
|
|
return num9;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return num9;
|
|
}
|
|
|
|
public static void hardUpdateWorld(int i, int j)
|
|
{
|
|
if (!Main.hardMode || Main.tile[i, j].inActive())
|
|
return;
|
|
int type = (int) Main.tile[i, j].type;
|
|
switch (type)
|
|
{
|
|
case 117:
|
|
case 164:
|
|
if ((double) j > Main.rockLayer && WorldGen.genRand.Next(110) == 0)
|
|
{
|
|
int num1 = WorldGen.genRand.Next(4);
|
|
int num2 = 0;
|
|
int num3 = 0;
|
|
switch (num1)
|
|
{
|
|
case 0:
|
|
num2 = -1;
|
|
break;
|
|
case 1:
|
|
num2 = 1;
|
|
break;
|
|
default:
|
|
num3 = num1 != 0 ? 1 : -1;
|
|
break;
|
|
}
|
|
if (!Main.tile[i + num2, j + num3].active())
|
|
{
|
|
int num4 = 0;
|
|
int num5 = 6;
|
|
for (int index1 = i - num5; index1 <= i + num5; ++index1)
|
|
{
|
|
for (int index2 = j - num5; index2 <= j + num5; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 129)
|
|
++num4;
|
|
}
|
|
}
|
|
if (num4 < 2)
|
|
{
|
|
WorldGen.PlaceTile(i + num2, j + num3, 129, true);
|
|
NetMessage.SendTileSquare(-1, i + num2, j + num3, 1);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if ((double) j > (Main.worldSurface + Main.rockLayer) / 2.0)
|
|
{
|
|
if (type == 60 && WorldGen.genRand.Next(300) == 0)
|
|
{
|
|
int index3 = i + WorldGen.genRand.Next(-10, 11);
|
|
int index4 = j + WorldGen.genRand.Next(-10, 11);
|
|
if (WorldGen.InWorld(index3, index4, 2) && Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 59 && (!Main.tile[index3, index4 - 1].active() || Main.tile[index3, index4 - 1].type != (ushort) 5 && Main.tile[index3, index4 - 1].type != (ushort) 236 && Main.tile[index3, index4 - 1].type != (ushort) 238) && WorldGen.Chlorophyte(index3, index4))
|
|
{
|
|
Main.tile[index3, index4].type = (ushort) 211;
|
|
WorldGen.SquareTileFrame(index3, index4);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index3, index4, 1);
|
|
}
|
|
}
|
|
if (type == 211 && WorldGen.genRand.Next(3) != 0)
|
|
{
|
|
int index5 = i;
|
|
int index6 = j;
|
|
int num = WorldGen.genRand.Next(4);
|
|
if (num == 0)
|
|
++index5;
|
|
if (num == 1)
|
|
--index5;
|
|
if (num == 2)
|
|
++index6;
|
|
if (num == 3)
|
|
--index6;
|
|
if (WorldGen.InWorld(index5, index6, 2) && Main.tile[index5, index6].active() && (Main.tile[index5, index6].type == (ushort) 59 || Main.tile[index5, index6].type == (ushort) 60) && WorldGen.Chlorophyte(index5, index6))
|
|
{
|
|
Main.tile[index5, index6].type = (ushort) 211;
|
|
WorldGen.SquareTileFrame(index5, index6);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index5, index6, 1);
|
|
}
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
flag = false;
|
|
int index7 = i + Main.rand.Next(-6, 7);
|
|
int index8 = j + Main.rand.Next(-6, 7);
|
|
if (WorldGen.InWorld(index7, index8, 2) && Main.tile[index7, index8].active())
|
|
{
|
|
if (Main.tile[index7, index8].type == (ushort) 23 || Main.tile[index7, index8].type == (ushort) 199 || Main.tile[index7, index8].type == (ushort) 2 || Main.tile[index7, index8].type == (ushort) 477 || Main.tile[index7, index8].type == (ushort) 492 || Main.tile[index7, index8].type == (ushort) 109)
|
|
{
|
|
Main.tile[index7, index8].type = (ushort) 60;
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index7, index8, 1);
|
|
flag = true;
|
|
}
|
|
else if (Main.tile[index7, index8].type == (ushort) 0)
|
|
{
|
|
Main.tile[index7, index8].type = (ushort) 59;
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index7, index8, 1);
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (NPC.downedPlantBoss && WorldGen.genRand.Next(2) != 0 || !WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
if (type == 23 || type == 25 || type == 32 || type == 112 || type == 163 || type == 400 || type == 398)
|
|
{
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
flag = false;
|
|
int index9 = i + WorldGen.genRand.Next(-3, 4);
|
|
int index10 = j + WorldGen.genRand.Next(-3, 4);
|
|
if (!WorldGen.nearbyChlorophyte(index9, index10))
|
|
{
|
|
if (WorldGen.CountNearBlocksTypes(index9, index10, 2, 1, 27) <= 0)
|
|
{
|
|
if (Main.tile[index9, index10].type == (ushort) 2)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 23;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[index9, index10].type])
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 25;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 53)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 112;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 396)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 400;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 397)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 398;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 59)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 60)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 23;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 69)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 32;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
else if (Main.tile[index9, index10].type == (ushort) 161)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index9, index10].type = (ushort) 163;
|
|
WorldGen.SquareTileFrame(index9, index10);
|
|
NetMessage.SendTileSquare(-1, index9, index10, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (type == 199 || type == 200 || type == 201 || type == 203 || type == 205 || type == 234 || type == 352 || type == 401 || type == 399)
|
|
{
|
|
bool flag = true;
|
|
while (flag)
|
|
{
|
|
flag = false;
|
|
int index11 = i + WorldGen.genRand.Next(-3, 4);
|
|
int index12 = j + WorldGen.genRand.Next(-3, 4);
|
|
if (!WorldGen.nearbyChlorophyte(index11, index12))
|
|
{
|
|
if (WorldGen.CountNearBlocksTypes(index11, index12, 2, 1, 27) <= 0)
|
|
{
|
|
if (Main.tile[index11, index12].type == (ushort) 2)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 199;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[index11, index12].type])
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 203;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 53)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 234;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 396)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 401;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 397)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 399;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 59)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 60)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 199;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 69)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 352;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
else if (Main.tile[index11, index12].type == (ushort) 161)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag = true;
|
|
Main.tile[index11, index12].type = (ushort) 200;
|
|
WorldGen.SquareTileFrame(index11, index12);
|
|
NetMessage.SendTileSquare(-1, index11, index12, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (type != 109 && type != 110 && type != 113 && type != 115 && type != 116 && type != 117 && type != 164 && type != 402 && type != 403 && type != 492)
|
|
return;
|
|
bool flag1 = true;
|
|
while (flag1)
|
|
{
|
|
flag1 = false;
|
|
int index13 = i + WorldGen.genRand.Next(-3, 4);
|
|
int index14 = j + WorldGen.genRand.Next(-3, 4);
|
|
if (WorldGen.CountNearBlocksTypes(index13, index14, 2, 1, 27) <= 0)
|
|
{
|
|
if (Main.tile[index13, index14].type == (ushort) 2)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 109;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 477)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 492;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 1 || Main.tileMoss[(int) Main.tile[index13, index14].type])
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 117;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 53)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 116;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 396)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 403;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 397)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 402;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
else if (Main.tile[index13, index14].type == (ushort) 161)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
flag1 = true;
|
|
Main.tile[index13, index14].type = (ushort) 164;
|
|
WorldGen.SquareTileFrame(index13, index14);
|
|
NetMessage.SendTileSquare(-1, index13, index14, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool SolidTile(Tile testTile)
|
|
{
|
|
try
|
|
{
|
|
if (testTile == null)
|
|
return true;
|
|
if (testTile.active())
|
|
{
|
|
if (Main.tileSolid[(int) testTile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) testTile.type])
|
|
{
|
|
if (!testTile.halfBrick())
|
|
{
|
|
if (testTile.slope() == (byte) 0)
|
|
{
|
|
if (!testTile.inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool TileEmpty(int i, int j) => Main.tile[i, j] == null || !Main.tile[i, j].active() || Main.tile[i, j].inActive();
|
|
|
|
public static bool SolidOrSlopedTile(Tile tile) => tile != null && tile.active() && Main.tileSolid[(int) tile.type] && !Main.tileSolidTop[(int) tile.type] && !tile.inActive();
|
|
|
|
public static int TileType(int x, int y) => !Main.tile[x, y].active() ? -1 : (int) Main.tile[x, y].type;
|
|
|
|
public static bool SolidOrSlopedTile(int x, int y) => WorldGen.SolidOrSlopedTile(Main.tile[x, y]);
|
|
|
|
public static bool SolidTile(Point p) => WorldGen.SolidTile(p.X, p.Y);
|
|
|
|
public static bool SolidTile(int i, int j, bool noDoors = false)
|
|
{
|
|
try
|
|
{
|
|
if (Main.tile[i, j] == null)
|
|
return true;
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (Main.tileSolid[(int) Main.tile[i, j].type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) Main.tile[i, j].type])
|
|
{
|
|
if (!Main.tile[i, j].halfBrick())
|
|
{
|
|
if (Main.tile[i, j].slope() == (byte) 0)
|
|
{
|
|
if (!Main.tile[i, j].inActive())
|
|
return !noDoors || Main.tile[i, j].type != (ushort) 10;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool SolidTile2(Tile testTile)
|
|
{
|
|
try
|
|
{
|
|
if (testTile == null)
|
|
return true;
|
|
if (testTile.active())
|
|
{
|
|
if (Main.tileSolid[(int) testTile.type])
|
|
{
|
|
if (testTile.slope() == (byte) 0)
|
|
{
|
|
if (!testTile.halfBrick())
|
|
{
|
|
if (!testTile.inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool PlatformProperTopFrame(short frameX)
|
|
{
|
|
int num = (int) frameX / TileObjectData.PlatformFrameWidth();
|
|
if (num >= 0 && num <= 7 || num >= 12 && num <= 16)
|
|
return true;
|
|
return num >= 25 && num <= 26;
|
|
}
|
|
|
|
public static bool SolidTileAllowBottomSlope(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (!Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) tile.type])
|
|
goto label_12;
|
|
}
|
|
if (tile.topSlope())
|
|
{
|
|
if (TileID.Sets.Platforms[(int) tile.type])
|
|
{
|
|
if (!WorldGen.PlatformProperTopFrame(tile.frameX))
|
|
goto label_12;
|
|
}
|
|
else
|
|
goto label_12;
|
|
}
|
|
if (!tile.halfBrick())
|
|
{
|
|
if (!tile.inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
label_12:
|
|
return false;
|
|
}
|
|
|
|
public static bool SolidTileAllowTopSlope(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (tile.bottomSlope())
|
|
{
|
|
if (TileID.Sets.Platforms[(int) tile.type])
|
|
{
|
|
if (!tile.halfBrick())
|
|
goto label_10;
|
|
}
|
|
else
|
|
goto label_10;
|
|
}
|
|
if (!tile.inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
label_10:
|
|
return false;
|
|
}
|
|
|
|
public static bool TopEdgeCanBeAttachedTo(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (!Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) tile.type])
|
|
goto label_12;
|
|
}
|
|
if (tile.topSlope())
|
|
{
|
|
if (TileID.Sets.Platforms[(int) tile.type])
|
|
{
|
|
if (!WorldGen.PlatformProperTopFrame(tile.frameX))
|
|
goto label_12;
|
|
}
|
|
else
|
|
goto label_12;
|
|
}
|
|
if (!tile.halfBrick())
|
|
{
|
|
if (!tile.inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
label_12:
|
|
return false;
|
|
}
|
|
|
|
public static bool RightEdgeCanBeAttachedTo(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) tile.type])
|
|
{
|
|
if (!tile.rightSlope())
|
|
{
|
|
if (!tile.halfBrick())
|
|
{
|
|
if (!tile.inActive())
|
|
{
|
|
if (!Main.tileNoAttach[(int) tile.type])
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool LeftEdgeCanBeAttachedTo(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) tile.type])
|
|
{
|
|
if (!tile.leftSlope())
|
|
{
|
|
if (!tile.halfBrick())
|
|
{
|
|
if (!tile.inActive())
|
|
{
|
|
if (!Main.tileNoAttach[(int) tile.type])
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool BottomEdgeCanBeAttachedTo(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
Tile tile = Main.tile[i, j];
|
|
if (tile == null)
|
|
return true;
|
|
if (tile.active())
|
|
{
|
|
if (Main.tileSolid[(int) tile.type])
|
|
{
|
|
if (!Main.tileSolidTop[(int) tile.type])
|
|
{
|
|
if (!tile.bottomSlope())
|
|
{
|
|
if (!tile.inActive())
|
|
{
|
|
if (!Main.tileNoAttach[(int) tile.type])
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool SolidTile3(int i, int j) => WorldGen.InWorld(i, j, 1) && WorldGen.SolidTile3(Main.tile[i, j]);
|
|
|
|
public static bool SolidTile3(Tile t) => t != null && t.active() && !t.inActive() && Main.tileSolid[(int) t.type] && !Main.tileSolidTop[(int) t.type];
|
|
|
|
public static bool SolidTile2(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
if (Main.tile[i, j] == null)
|
|
return true;
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (Main.tileSolid[(int) Main.tile[i, j].type])
|
|
{
|
|
if (!TileID.Sets.Platforms[(int) Main.tile[i, j].type] || !Main.tile[i, j].halfBrick() && !Main.tile[i, j].topSlope())
|
|
{
|
|
if (Main.tile[i, j].slope() != (byte) 0)
|
|
goto label_10;
|
|
}
|
|
if (!Main.tile[i, j].halfBrick())
|
|
{
|
|
if (!Main.tile[i, j].inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
label_10:
|
|
return false;
|
|
}
|
|
|
|
public static bool SolidTileNoAttach(int i, int j)
|
|
{
|
|
try
|
|
{
|
|
if (Main.tile[i, j] == null)
|
|
return true;
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (Main.tileSolid[(int) Main.tile[i, j].type])
|
|
{
|
|
if (!Main.tileNoAttach[(int) Main.tile[i, j].type])
|
|
{
|
|
if (Main.tile[i, j].slope() == (byte) 0)
|
|
{
|
|
if (!Main.tile[i, j].halfBrick())
|
|
{
|
|
if (!Main.tile[i, j].inActive())
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void MineHouse(int i, int j)
|
|
{
|
|
if (i < 50 || i > Main.maxTilesX - 50 || j < 50 || j > Main.maxTilesY - 50)
|
|
return;
|
|
int num1 = WorldGen.genRand.Next(6, 12);
|
|
int num2 = WorldGen.genRand.Next(3, 6);
|
|
int num3 = WorldGen.genRand.Next(15, 30);
|
|
int num4 = WorldGen.genRand.Next(15, 30);
|
|
if (WorldGen.SolidTile(i, j) || Main.tile[i, j].wall > (ushort) 0)
|
|
return;
|
|
int num5 = j - num1;
|
|
int num6 = j + num2;
|
|
for (int index1 = 0; index1 < 2; ++index1)
|
|
{
|
|
bool flag1 = true;
|
|
int i1 = i;
|
|
int j1 = j;
|
|
int num7 = -1;
|
|
int num8 = num3;
|
|
if (index1 == 1)
|
|
{
|
|
num7 = 1;
|
|
num8 = num4;
|
|
++i1;
|
|
}
|
|
while (flag1)
|
|
{
|
|
if (j1 - num1 < num5)
|
|
num5 = j1 - num1;
|
|
if (j1 + num2 > num6)
|
|
num6 = j1 + num2;
|
|
for (int index2 = 0; index2 < 2; ++index2)
|
|
{
|
|
int j2 = j1;
|
|
bool flag2 = true;
|
|
int num9 = num1;
|
|
int num10 = -1;
|
|
if (index2 == 1)
|
|
{
|
|
++j2;
|
|
num9 = num2;
|
|
num10 = 1;
|
|
}
|
|
while (flag2)
|
|
{
|
|
if (i1 != i && Main.tile[i1 - num7, j2].wall != (ushort) 27 && (WorldGen.SolidTile(i1 - num7, j2) || !Main.tile[i1 - num7, j2].active() || Main.tile[i1 - num7, j2].halfBrick() || Main.tile[i1 - num7, j2].slope() != (byte) 0))
|
|
{
|
|
Main.tile[i1 - num7, j2].active(true);
|
|
Main.tile[i1 - num7, j2].type = (ushort) 30;
|
|
}
|
|
if (WorldGen.SolidTile(i1 - 1, j2) || Main.tile[i1 - 1, j2].halfBrick() || Main.tile[i1 - 1, j2].slope() != (byte) 0)
|
|
Main.tile[i1 - 1, j2].type = (ushort) 30;
|
|
if (WorldGen.SolidTile(i1 + 1, j2) || Main.tile[i1 + 1, j2].halfBrick() || Main.tile[i1 + 1, j2].slope() != (byte) 0)
|
|
Main.tile[i1 + 1, j2].type = (ushort) 30;
|
|
if (WorldGen.SolidTile(i1, j2) || Main.tile[i1, j2].halfBrick() || Main.tile[i1, j2].slope() != (byte) 0)
|
|
{
|
|
int num11 = 0;
|
|
if (WorldGen.SolidTile(i1 - 1, j2))
|
|
++num11;
|
|
if (WorldGen.SolidTile(i1 + 1, j2))
|
|
++num11;
|
|
if (WorldGen.SolidTile(i1, j2 - 1))
|
|
++num11;
|
|
if (WorldGen.SolidTile(i1, j2 + 1))
|
|
++num11;
|
|
if (num11 < 2)
|
|
{
|
|
Main.tile[i1, j2].active(false);
|
|
}
|
|
else
|
|
{
|
|
flag2 = false;
|
|
Main.tile[i1, j2].type = (ushort) 30;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[i1, j2].wall = (ushort) 27;
|
|
Main.tile[i1, j2].liquid = (byte) 0;
|
|
Main.tile[i1, j2].lava(false);
|
|
}
|
|
j2 += num10;
|
|
--num9;
|
|
if (num9 <= 0)
|
|
{
|
|
if (!Main.tile[i1, j2].active())
|
|
{
|
|
Main.tile[i1, j2].active(true);
|
|
Main.tile[i1, j2].type = (ushort) 30;
|
|
}
|
|
flag2 = false;
|
|
}
|
|
}
|
|
}
|
|
--num8;
|
|
i1 += num7;
|
|
if (WorldGen.SolidTile(i1, j1))
|
|
{
|
|
int num12 = 0;
|
|
int num13 = 0;
|
|
int j3 = j1;
|
|
bool flag3 = true;
|
|
while (flag3)
|
|
{
|
|
--j3;
|
|
++num12;
|
|
if (WorldGen.SolidTile(i1 - num7, j3))
|
|
{
|
|
num12 = 999;
|
|
flag3 = false;
|
|
}
|
|
else if (!WorldGen.SolidTile(i1, j3))
|
|
flag3 = false;
|
|
}
|
|
int j4 = j1;
|
|
bool flag4 = true;
|
|
while (flag4)
|
|
{
|
|
++j4;
|
|
++num13;
|
|
if (WorldGen.SolidTile(i1 - num7, j4))
|
|
{
|
|
num13 = 999;
|
|
flag4 = false;
|
|
}
|
|
else if (!WorldGen.SolidTile(i1, j4))
|
|
flag4 = false;
|
|
}
|
|
if (num13 <= num12)
|
|
{
|
|
if (num13 > num2)
|
|
num8 = 0;
|
|
else
|
|
j1 += num13 + 1;
|
|
}
|
|
else if (num12 > num1)
|
|
num8 = 0;
|
|
else
|
|
j1 -= num12 + 1;
|
|
}
|
|
if (num8 <= 0)
|
|
flag1 = false;
|
|
}
|
|
}
|
|
int minValue1 = i - num3 - 1;
|
|
int maxValue1 = i + num4 + 2;
|
|
int minValue2 = num5 - 1;
|
|
int maxValue2 = num6 + 2;
|
|
for (int i2 = minValue1; i2 < maxValue1; ++i2)
|
|
{
|
|
for (int j5 = minValue2; j5 < maxValue2; ++j5)
|
|
{
|
|
if (Main.tile[i2, j5].wall == (ushort) 27 && !Main.tile[i2, j5].active())
|
|
{
|
|
if (Main.tile[i2 - 1, j5].wall != (ushort) 27 && i2 < i && !WorldGen.SolidTile(i2 - 1, j5))
|
|
{
|
|
WorldGen.PlaceTile(i2, j5, 30, true);
|
|
Main.tile[i2, j5].wall = (ushort) 0;
|
|
}
|
|
if (Main.tile[i2 + 1, j5].wall != (ushort) 27 && i2 > i && !WorldGen.SolidTile(i2 + 1, j5))
|
|
{
|
|
WorldGen.PlaceTile(i2, j5, 30, true);
|
|
Main.tile[i2, j5].wall = (ushort) 0;
|
|
}
|
|
for (int i3 = i2 - 1; i3 <= i2 + 1; ++i3)
|
|
{
|
|
for (int j6 = j5 - 1; j6 <= j5 + 1; ++j6)
|
|
{
|
|
if (WorldGen.SolidTile(i3, j6))
|
|
Main.tile[i3, j6].type = (ushort) 30;
|
|
}
|
|
}
|
|
}
|
|
if (Main.tile[i2, j5].type == (ushort) 30 && Main.tile[i2 - 1, j5].wall == (ushort) 27 && Main.tile[i2 + 1, j5].wall == (ushort) 27 && (Main.tile[i2, j5 - 1].wall == (ushort) 27 || Main.tile[i2, j5 - 1].active()) && (Main.tile[i2, j5 + 1].wall == (ushort) 27 || Main.tile[i2, j5 + 1].active()))
|
|
{
|
|
Main.tile[i2, j5].active(false);
|
|
Main.tile[i2, j5].wall = (ushort) 27;
|
|
}
|
|
}
|
|
}
|
|
for (int index3 = minValue1; index3 < maxValue1; ++index3)
|
|
{
|
|
for (int index4 = minValue2; index4 < maxValue2; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].type == (ushort) 30)
|
|
{
|
|
if (Main.tile[index3 - 1, index4].wall == (ushort) 27 && Main.tile[index3 + 1, index4].wall == (ushort) 27 && !Main.tile[index3 - 1, index4].active() && !Main.tile[index3 + 1, index4].active())
|
|
{
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].wall = (ushort) 27;
|
|
}
|
|
if (!TileID.Sets.BasicChest[(int) Main.tile[index3, index4 - 1].type] && Main.tile[index3 - 1, index4].wall == (ushort) 27 && Main.tile[index3 + 1, index4].type == (ushort) 30 && Main.tile[index3 + 2, index4].wall == (ushort) 27 && !Main.tile[index3 - 1, index4].active() && !Main.tile[index3 + 2, index4].active())
|
|
{
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].wall = (ushort) 27;
|
|
Main.tile[index3 + 1, index4].active(false);
|
|
Main.tile[index3 + 1, index4].wall = (ushort) 27;
|
|
}
|
|
if (Main.tile[index3, index4 - 1].wall == (ushort) 27 && Main.tile[index3, index4 + 1].wall == (ushort) 27 && !Main.tile[index3, index4 - 1].active() && !Main.tile[index3, index4 + 1].active())
|
|
{
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].wall = (ushort) 27;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int i4 = minValue1; i4 < maxValue1; ++i4)
|
|
{
|
|
for (int j7 = maxValue2; j7 > minValue2; --j7)
|
|
{
|
|
bool flag5 = false;
|
|
if (Main.tile[i4, j7].active() && Main.tile[i4, j7].type == (ushort) 30)
|
|
{
|
|
int num14 = -1;
|
|
for (int index5 = 0; index5 < 2; ++index5)
|
|
{
|
|
if (!WorldGen.SolidTile(i4 + num14, j7) && Main.tile[i4 + num14, j7].wall == (ushort) 0)
|
|
{
|
|
int num15 = 0;
|
|
int j8 = j7;
|
|
int num16 = j7;
|
|
while (Main.tile[i4, j8].active() && Main.tile[i4, j8].type == (ushort) 30 && !WorldGen.SolidTile(i4 + num14, j8) && Main.tile[i4 + num14, j8].wall == (ushort) 0)
|
|
{
|
|
--j8;
|
|
++num15;
|
|
}
|
|
int num17 = j8 + 1 + 1;
|
|
if (num15 > 4)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int j9 = num16 - 1;
|
|
bool flag6 = true;
|
|
for (int index6 = i4 - 2; index6 <= i4 + 2; ++index6)
|
|
{
|
|
for (int index7 = j9 - 2; index7 <= j9; ++index7)
|
|
{
|
|
if (index6 != i4 && Main.tile[index6, index7].active())
|
|
flag6 = false;
|
|
}
|
|
}
|
|
if (flag6)
|
|
{
|
|
Main.tile[i4, j9].active(false);
|
|
Main.tile[i4, j9 - 1].active(false);
|
|
Main.tile[i4, j9 - 2].active(false);
|
|
WorldGen.PlaceTile(i4, j9, 10, true);
|
|
flag5 = true;
|
|
}
|
|
}
|
|
if (!flag5)
|
|
{
|
|
for (int index8 = num17; index8 < num16; ++index8)
|
|
Main.tile[i4, index8].type = (ushort) 124;
|
|
}
|
|
}
|
|
}
|
|
num14 = 1;
|
|
}
|
|
}
|
|
if (flag5)
|
|
break;
|
|
}
|
|
}
|
|
int num18 = WorldGen.genRand.Next(1, 2);
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
num18 = 0;
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
++num18;
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
++num18;
|
|
for (int index9 = 0; index9 < num18; ++index9)
|
|
{
|
|
int num19 = 0;
|
|
int index10 = WorldGen.genRand.Next(minValue1, maxValue1);
|
|
int index11;
|
|
for (index11 = WorldGen.genRand.Next(minValue2, maxValue2); !Main.wallHouse[(int) Main.tile[index10, index11].wall] || Main.tile[index10, index11].active(); index11 = WorldGen.genRand.Next(minValue2, maxValue2))
|
|
{
|
|
++num19;
|
|
if (num19 <= 1000)
|
|
index10 = WorldGen.genRand.Next(minValue1, maxValue1);
|
|
else
|
|
break;
|
|
}
|
|
if (num19 <= 1000)
|
|
{
|
|
for (int index12 = 0; index12 < 2; ++index12)
|
|
{
|
|
int index13 = index10;
|
|
int index14 = index10;
|
|
while (!Main.tile[index13, index11].active() && Main.wallHouse[(int) Main.tile[index13, index11].wall])
|
|
--index13;
|
|
int num20 = index13 + 1;
|
|
while (!Main.tile[index14, index11].active() && Main.wallHouse[(int) Main.tile[index14, index11].wall])
|
|
++index14;
|
|
int num21 = index14 - 1;
|
|
i = (num20 + num21) / 2;
|
|
int index15 = index11;
|
|
int index16 = index11;
|
|
while (!Main.tile[index10, index15].active() && Main.wallHouse[(int) Main.tile[index10, index15].wall])
|
|
--index15;
|
|
int num22 = index15 + 1;
|
|
while (!Main.tile[index10, index16].active() && Main.wallHouse[(int) Main.tile[index10, index16].wall])
|
|
++index16;
|
|
int num23 = index16 - 1;
|
|
index11 = (num22 + num23) / 2;
|
|
}
|
|
int index17 = index10;
|
|
int index18 = index10;
|
|
while (!Main.tile[index17, index11].active() && !Main.tile[index17, index11 - 1].active() && !Main.tile[index17, index11 + 1].active())
|
|
--index17;
|
|
int num24 = index17 + 1;
|
|
while (!Main.tile[index18, index11].active() && !Main.tile[index18, index11 - 1].active() && !Main.tile[index18, index11 + 1].active())
|
|
++index18;
|
|
int num25 = index18 - 1;
|
|
int index19 = index11;
|
|
int index20 = index11;
|
|
while (!Main.tile[index10, index19].active() && !Main.tile[index10 - 1, index19].active() && !Main.tile[index10 + 1, index19].active())
|
|
--index19;
|
|
int num26 = index19 + 1;
|
|
while (!Main.tile[index10, index20].active() && !Main.tile[index10 - 1, index20].active() && !Main.tile[index10 + 1, index20].active())
|
|
++index20;
|
|
int num27 = index20 - 1;
|
|
int num28 = (num24 + num25) / 2;
|
|
int num29 = (num26 + num27) / 2;
|
|
int num30 = num25 - num24;
|
|
int num31 = num27 - num26;
|
|
if (num30 > 7 && num31 > 5)
|
|
{
|
|
int num32 = 0;
|
|
if (WorldGen.nearPicture2(i, num29))
|
|
num32 = -1;
|
|
if (num32 == 0)
|
|
{
|
|
Vector2 vector2 = WorldGen.randHousePicture();
|
|
int x = (int) vector2.X;
|
|
int y = (int) vector2.Y;
|
|
if (!WorldGen.nearPicture(num28, num29))
|
|
WorldGen.PlaceTile(num28, num29, x, true, style: y);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
for (int i5 = minValue1; i5 < maxValue1; i5 = i5 + WorldGen.genRand.Next(4) + 1)
|
|
{
|
|
bool flag = true;
|
|
for (int j10 = minValue2; j10 < maxValue2; ++j10)
|
|
{
|
|
for (int i6 = i5 - 3; i6 <= i5 + 3; ++i6)
|
|
{
|
|
if (Main.tile[i6, j10].active() && (!WorldGen.SolidTile(i6, j10) || Main.tile[i6, j10].type == (ushort) 10))
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int j11 = minValue2; j11 < maxValue2; ++j11)
|
|
{
|
|
if (Main.tile[i5, j11].wall == (ushort) 27 && !Main.tile[i5, j11].active())
|
|
WorldGen.PlaceTile(i5, j11, 124, true);
|
|
}
|
|
}
|
|
}
|
|
for (int index21 = 0; index21 < 4; ++index21)
|
|
{
|
|
int i7 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
int index22;
|
|
for (index22 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1); Main.tile[i7, index22].wall != (ushort) 27; index22 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1))
|
|
i7 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
while (Main.tile[i7, index22].active())
|
|
--index22;
|
|
while (!Main.tile[i7, index22].active())
|
|
++index22;
|
|
int j12 = index22 - 1;
|
|
if (Main.tile[i7, j12].wall == (ushort) 27)
|
|
{
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
int Type = WorldGen.genRand.Next(9);
|
|
if (Type == 0)
|
|
Type = 14;
|
|
if (Type == 1)
|
|
Type = 16;
|
|
if (Type == 2)
|
|
Type = 18;
|
|
if (Type == 3)
|
|
Type = 86;
|
|
if (Type == 4)
|
|
Type = 87;
|
|
if (Type == 5)
|
|
Type = 94;
|
|
if (Type == 6)
|
|
Type = 101;
|
|
if (Type == 7)
|
|
Type = 104;
|
|
if (Type == 8)
|
|
Type = 106;
|
|
WorldGen.PlaceTile(i7, j12, Type, true);
|
|
}
|
|
else if (WorldGen.statueList != null)
|
|
{
|
|
int index23 = WorldGen.genRand.Next(2, WorldGen.statueList.Length);
|
|
WorldGen.PlaceTile(i7, j12, (int) WorldGen.statueList[index23].X, true, true, style: ((int) WorldGen.statueList[index23].Y));
|
|
}
|
|
}
|
|
}
|
|
for (int index24 = 0; index24 < 40; ++index24)
|
|
{
|
|
int i8 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
int index25;
|
|
for (index25 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1); Main.tile[i8, index25].wall != (ushort) 27; index25 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1))
|
|
i8 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
while (Main.tile[i8, index25].active())
|
|
--index25;
|
|
while (!Main.tile[i8, index25].active())
|
|
++index25;
|
|
int j13 = index25 - 1;
|
|
if (Main.tile[i8, j13].wall == (ushort) 27 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int style = WorldGen.genRand.Next(22, 26);
|
|
WorldGen.PlaceTile(i8, j13, 186, true, style: style);
|
|
}
|
|
}
|
|
for (int index26 = 0; index26 < 20; ++index26)
|
|
{
|
|
int i9 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
int index27;
|
|
for (index27 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1); Main.tile[i9, index27].wall != (ushort) 27; index27 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1))
|
|
i9 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
while (Main.tile[i9, index27].active())
|
|
--index27;
|
|
while (!Main.tile[i9, index27].active())
|
|
++index27;
|
|
int j14 = index27 - 1;
|
|
if (Main.tile[i9, j14].wall == (ushort) 27 && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
int X = WorldGen.genRand.Next(31, 34);
|
|
WorldGen.PlaceSmallPile(i9, j14, X, 1);
|
|
}
|
|
}
|
|
for (int index28 = 0; index28 < 15; ++index28)
|
|
{
|
|
int i10 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
int j15;
|
|
for (j15 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1); Main.tile[i10, j15].wall != (ushort) 27; j15 = WorldGen.genRand.Next(minValue2 + 2, maxValue2 - 1))
|
|
i10 = WorldGen.genRand.Next(minValue1 + 2, maxValue1 - 1);
|
|
while (Main.tile[i10, j15].active())
|
|
--j15;
|
|
while (j15 > 0 && !Main.tile[i10, j15 - 1].active())
|
|
--j15;
|
|
if (Main.tile[i10, j15].wall == (ushort) 27)
|
|
{
|
|
int style = 0;
|
|
int Type;
|
|
if (WorldGen.genRand.Next(10) < 9)
|
|
{
|
|
Type = -1;
|
|
}
|
|
else
|
|
{
|
|
Type = 34;
|
|
style = WorldGen.genRand.Next(6);
|
|
}
|
|
if (Type > 0)
|
|
{
|
|
WorldGen.PlaceTile(i10, j15, Type, true, style: style);
|
|
if ((int) Main.tile[i10, j15].type == Type)
|
|
{
|
|
if (Type == 4)
|
|
{
|
|
Main.tile[i10, j15].frameX += (short) 54;
|
|
}
|
|
else
|
|
{
|
|
int index29 = i10;
|
|
int index30 = j15;
|
|
int index31 = index30 - (int) Main.tile[index29, index30].frameY % 54 / 18;
|
|
int num33 = (int) Main.tile[index29, index30].frameX / 18;
|
|
if (num33 > 2)
|
|
num33 -= 3;
|
|
int index32 = index29 - num33;
|
|
short num34 = 54;
|
|
if (Main.tile[index32, index31].frameX > (short) 0)
|
|
num34 = (short) -54;
|
|
for (int index33 = index32; index33 < index32 + 3; ++index33)
|
|
{
|
|
for (int index34 = index31; index34 < index31 + 3; ++index34)
|
|
Main.tile[index33, index34].frameX += num34;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void CountTiles(int X)
|
|
{
|
|
if (X == 0)
|
|
{
|
|
WorldGen.totalEvil = WorldGen.totalEvil2;
|
|
WorldGen.totalBlood = WorldGen.totalBlood2;
|
|
WorldGen.totalSolid = WorldGen.totalSolid2;
|
|
WorldGen.totalGood = WorldGen.totalGood2;
|
|
WorldGen.tGood = (byte) Math.Round((double) WorldGen.totalGood / (double) WorldGen.totalSolid * 100.0);
|
|
WorldGen.tEvil = (byte) Math.Round((double) WorldGen.totalEvil / (double) WorldGen.totalSolid * 100.0);
|
|
WorldGen.tBlood = (byte) Math.Round((double) WorldGen.totalBlood / (double) WorldGen.totalSolid * 100.0);
|
|
if (WorldGen.tGood == (byte) 0 && WorldGen.totalGood > 0)
|
|
WorldGen.tGood = (byte) 1;
|
|
if (WorldGen.tEvil == (byte) 0 && WorldGen.totalEvil > 0)
|
|
WorldGen.tEvil = (byte) 1;
|
|
if (WorldGen.tBlood == (byte) 0 && WorldGen.totalBlood > 0)
|
|
WorldGen.tBlood = (byte) 1;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(57);
|
|
WorldGen.totalEvil2 = 0;
|
|
WorldGen.totalSolid2 = 0;
|
|
WorldGen.totalGood2 = 0;
|
|
WorldGen.totalBlood2 = 0;
|
|
}
|
|
ushort num1 = 0;
|
|
int num2 = 0;
|
|
int num3 = 0;
|
|
int num4 = 0;
|
|
do
|
|
{
|
|
int num5;
|
|
int num6;
|
|
if (num3 == 0)
|
|
{
|
|
num5 = 0;
|
|
num4 = (int) (Main.worldSurface + 1.0);
|
|
num6 = 5;
|
|
}
|
|
else
|
|
{
|
|
num5 = num4;
|
|
num4 = Main.maxTilesY;
|
|
num6 = 1;
|
|
}
|
|
for (int index = num5; index < num4; ++index)
|
|
{
|
|
Tile tile = Main.tile[X, index] ?? (Main.tile[X, index] = new Tile());
|
|
ushort type = tile.type;
|
|
if (type != (ushort) 0 || tile.active())
|
|
{
|
|
if ((int) type == (int) num1)
|
|
{
|
|
num2 += num6;
|
|
}
|
|
else
|
|
{
|
|
WorldGen.tileCounts[(int) num1] += num2;
|
|
num1 = type;
|
|
num2 = num6;
|
|
}
|
|
}
|
|
}
|
|
WorldGen.tileCounts[(int) num1] += num2;
|
|
num2 = 0;
|
|
++num3;
|
|
}
|
|
while (num3 < 2);
|
|
WorldGen.AddUpAlignmentCounts();
|
|
}
|
|
|
|
public static void AddUpAlignmentCounts(bool clearCounts = false)
|
|
{
|
|
if (clearCounts)
|
|
{
|
|
WorldGen.totalEvil2 = 0;
|
|
WorldGen.totalSolid2 = 0;
|
|
WorldGen.totalGood2 = 0;
|
|
WorldGen.totalBlood2 = 0;
|
|
}
|
|
WorldGen.totalGood2 += WorldGen.tileCounts[164] + WorldGen.tileCounts[109] + WorldGen.tileCounts[117] + WorldGen.tileCounts[116];
|
|
WorldGen.totalEvil2 += WorldGen.tileCounts[23] + WorldGen.tileCounts[163] + WorldGen.tileCounts[112] + WorldGen.tileCounts[25];
|
|
WorldGen.totalBlood2 += WorldGen.tileCounts[199] + WorldGen.tileCounts[234] + WorldGen.tileCounts[203] + WorldGen.tileCounts[200];
|
|
WorldGen.totalSolid2 += WorldGen.tileCounts[2] + WorldGen.tileCounts[477] + WorldGen.tileCounts[1] + WorldGen.tileCounts[60] + WorldGen.tileCounts[53] + WorldGen.tileCounts[161];
|
|
WorldGen.totalSolid2 += WorldGen.tileCounts[164] + WorldGen.tileCounts[109] + WorldGen.tileCounts[492] + WorldGen.tileCounts[117] + WorldGen.tileCounts[116];
|
|
WorldGen.totalSolid2 += WorldGen.tileCounts[23] + WorldGen.tileCounts[163] + WorldGen.tileCounts[112] + WorldGen.tileCounts[25];
|
|
WorldGen.totalSolid2 += WorldGen.tileCounts[199] + WorldGen.tileCounts[234] + WorldGen.tileCounts[203] + WorldGen.tileCounts[200];
|
|
Array.Clear((Array) WorldGen.tileCounts, 0, WorldGen.tileCounts.Length);
|
|
}
|
|
|
|
public static void plantDye(int i, int j, bool exoticPlant = false)
|
|
{
|
|
UnifiedRandom unifiedRandom = WorldGen.gen ? WorldGen.genRand : Main.rand;
|
|
if (!Main.tile[i, j].active() || i < 95 || i > Main.maxTilesX - 95 || j < 95 || j > Main.maxTilesY - 95)
|
|
return;
|
|
int num1 = 90;
|
|
if (exoticPlant)
|
|
num1 = 240;
|
|
if ((double) j < Main.worldSurface)
|
|
{
|
|
if (Main.tile[i, j - 1].active() && Main.tile[i, j - 1].type != (ushort) 3 && Main.tile[i, j - 1].type != (ushort) 51 && Main.tile[i, j - 1].type != (ushort) 61 && Main.tile[i, j - 1].type != (ushort) 73 && Main.tile[i, j - 1].type != (ushort) 74 && Main.tile[i, j - 1].type != (ushort) 184)
|
|
return;
|
|
int num2 = Utils.Clamp<int>(i - num1, 1, Main.maxTilesX - 1 - 1);
|
|
int num3 = Utils.Clamp<int>(i + num1, 1, Main.maxTilesX - 1 - 1);
|
|
int num4 = Utils.Clamp<int>(j - num1, 1, Main.maxTilesY - 1 - 1);
|
|
int num5 = Utils.Clamp<int>(j + num1, 1, Main.maxTilesY - 1 - 1);
|
|
for (int index1 = num2; index1 < num3; ++index1)
|
|
{
|
|
for (int index2 = num4; index2 < num5; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 227 && (!exoticPlant || Main.tile[index1, index2].frameX >= (short) 272) && (exoticPlant || Main.tile[index1, index2].frameX < (short) 272))
|
|
return;
|
|
}
|
|
}
|
|
if (exoticPlant)
|
|
{
|
|
int type = (int) Main.tile[i, j].type;
|
|
bool flag = TileID.Sets.Conversion.Grass[type] || TileID.Sets.Conversion.Moss[type] || type == 0;
|
|
if (Main.tile[i, j - 1].liquid > (byte) 0 && Main.tile[i, j - 1].lava())
|
|
flag = false;
|
|
if (!flag)
|
|
return;
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: WorldGen.genRand.Next(8, 12));
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 2 || Main.tile[i, j].type == (ushort) 109)
|
|
{
|
|
if (unifiedRandom.Next(4) == 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 4);
|
|
else
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 3);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 60)
|
|
{
|
|
if (unifiedRandom.Next(2) == 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 2);
|
|
else
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 4);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 53 && Main.tile[i, j - 1].liquid == byte.MaxValue && Main.tile[i, j - 2].liquid == byte.MaxValue)
|
|
{
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 2);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 80 || Main.tile[i - 1, j - 1].active())
|
|
return;
|
|
if (Main.tile[i + 1, j - 1].active())
|
|
return;
|
|
try
|
|
{
|
|
bool flag = true;
|
|
for (int index3 = i - 5; index3 <= i + 5; ++index3)
|
|
{
|
|
for (int index4 = j - 5; index4 <= j + 15; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && (Main.tile[index3, index4].type == (ushort) 112 || Main.tile[index3, index4].type == (ushort) 234))
|
|
flag = false;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 6);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (j >= Main.UnderworldLayer)
|
|
return;
|
|
if (!Main.tile[i, j - 1].active() || Main.tile[i, j - 1].type == (ushort) 3 || Main.tile[i, j - 1].type == (ushort) 51 || Main.tile[i, j - 1].type == (ushort) 61 || Main.tile[i, j - 1].type == (ushort) 73 || Main.tile[i, j - 1].type == (ushort) 74 || Main.tile[i, j - 1].type == (ushort) 184)
|
|
{
|
|
int num6 = Utils.Clamp<int>(i - num1, 1, Main.maxTilesX - 1 - 1);
|
|
int num7 = Utils.Clamp<int>(i + num1, 1, Main.maxTilesX - 1 - 1);
|
|
int num8 = Utils.Clamp<int>(j - num1, 1, Main.maxTilesY - 1 - 1);
|
|
int num9 = Utils.Clamp<int>(j + num1, 1, Main.maxTilesY - 1 - 1);
|
|
for (int index5 = num6; index5 < num7; ++index5)
|
|
{
|
|
for (int index6 = num8; index6 < num9; ++index6)
|
|
{
|
|
if (Main.tile[index5, index6].active() && Main.tile[index5, index6].type == (ushort) 227 && (!exoticPlant || Main.tile[index5, index6].frameX >= (short) 272) && (exoticPlant || Main.tile[index5, index6].frameX < (short) 272))
|
|
return;
|
|
}
|
|
}
|
|
if (exoticPlant)
|
|
{
|
|
int type = (int) Main.tile[i, j].type;
|
|
if ((TileID.Sets.Conversion.Grass[type] || TileID.Sets.Conversion.Moss[type] ? 1 : (type == 0 ? 1 : 0)) != 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: WorldGen.genRand.Next(8, 12));
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 60)
|
|
{
|
|
if (unifiedRandom.Next(2) == 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 2);
|
|
else if (unifiedRandom.Next(2) == 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true);
|
|
else
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 1);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 0 || Main.tile[i, j].type == (ushort) 1 || Main.tile[i, j].type == (ushort) 59)
|
|
{
|
|
if (unifiedRandom.Next(2) == 0)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true);
|
|
else
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 1);
|
|
}
|
|
else if (Main.tile[i, j - 1].liquid == byte.MaxValue && Main.tile[i, j - 2].liquid == byte.MaxValue)
|
|
WorldGen.PlaceTile(i, j - 1, 227, true, style: 5);
|
|
}
|
|
if (Main.tile[i, j + 1].active() || exoticPlant)
|
|
return;
|
|
for (int index7 = i - num1; index7 < i + num1; ++index7)
|
|
{
|
|
for (int index8 = j - num1; index8 < j + num1; ++index8)
|
|
{
|
|
if (Main.tile[index7, index8].active() && Main.tile[index7, index8].type == (ushort) 227)
|
|
return;
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type != (ushort) 0)
|
|
return;
|
|
WorldGen.PlaceTile(i, j + 1, 227, true, style: 7);
|
|
}
|
|
}
|
|
|
|
private static int MossConversion(int thisType, int otherType)
|
|
{
|
|
if (TileID.Sets.tileMossBrick[thisType] && otherType == 38 || Main.tileMoss[thisType] && otherType == 1)
|
|
return thisType;
|
|
switch (thisType)
|
|
{
|
|
case 179:
|
|
return 512;
|
|
case 180:
|
|
return 513;
|
|
case 181:
|
|
return 514;
|
|
case 182:
|
|
return 515;
|
|
case 183:
|
|
return 516;
|
|
case 381:
|
|
return 517;
|
|
case 512:
|
|
return 179;
|
|
case 513:
|
|
return 180;
|
|
case 514:
|
|
return 181;
|
|
case 515:
|
|
return 182;
|
|
case 516:
|
|
return 183;
|
|
case 517:
|
|
return 381;
|
|
case 534:
|
|
return 535;
|
|
case 535:
|
|
return 534;
|
|
case 536:
|
|
return 537;
|
|
case 537:
|
|
return 536;
|
|
case 539:
|
|
return 540;
|
|
case 540:
|
|
return 539;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public static void UpdateWorld()
|
|
{
|
|
if (WorldGen.gen)
|
|
return;
|
|
WorldGen.AllowedToSpreadInfections = true;
|
|
CreativePowers.StopBiomeSpreadPower power = CreativePowerManager.Instance.GetPower<CreativePowers.StopBiomeSpreadPower>();
|
|
if (power != null && power.GetIsUnlocked())
|
|
WorldGen.AllowedToSpreadInfections = !power.Enabled;
|
|
int wallDist = 3;
|
|
Wiring.UpdateMech();
|
|
TileEntity.UpdateStart();
|
|
foreach (TileEntity tileEntity in TileEntity.ByID.Values)
|
|
tileEntity.Update();
|
|
TileEntity.UpdateEnd();
|
|
WorldGen.UpdateLunarApocalypse();
|
|
if (Main.netMode != 1)
|
|
{
|
|
++WorldGen.totalD;
|
|
if (WorldGen.totalD >= 30)
|
|
{
|
|
WorldGen.totalD = 0;
|
|
WorldGen.CountTiles(WorldGen.totalX);
|
|
++WorldGen.totalX;
|
|
if (WorldGen.totalX >= Main.maxTilesX)
|
|
WorldGen.totalX = 0;
|
|
}
|
|
}
|
|
++Liquid.skipCount;
|
|
if (Liquid.skipCount > 1)
|
|
{
|
|
Liquid.UpdateLiquid();
|
|
Liquid.skipCount = 0;
|
|
}
|
|
int worldUpdateRate = WorldGen.GetWorldUpdateRate();
|
|
if (worldUpdateRate == 0)
|
|
return;
|
|
float num1 = 3E-05f * (float) worldUpdateRate;
|
|
float num2 = 1.5E-05f * (float) worldUpdateRate;
|
|
bool checkNPCSpawns = false;
|
|
++WorldGen.spawnDelay;
|
|
if (Main.invasionType > 0 || Main.eclipse)
|
|
WorldGen.spawnDelay = 0;
|
|
if (WorldGen.spawnDelay >= 20)
|
|
{
|
|
checkNPCSpawns = true;
|
|
WorldGen.spawnDelay = 0;
|
|
if (WorldGen.prioritizedTownNPCType != 37)
|
|
{
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active && Main.npc[index].homeless && Main.npc[index].townNPC && Main.npc[index].type != 368)
|
|
{
|
|
WorldGen.prioritizedTownNPCType = Main.npc[index].type;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
float num3 = (float) (Main.maxTilesX * Main.maxTilesY) * num1;
|
|
int num4 = 151;
|
|
int num5 = (int) MathHelper.Lerp((float) num4, (float) num4 * 2.8f, MathHelper.Clamp((float) ((double) Main.maxTilesX / 4200.0 - 1.0), 0.0f, 1f));
|
|
for (int index = 0; (double) index < (double) num3; ++index)
|
|
{
|
|
if (Main.rand.Next(num5 * 100) == 0)
|
|
WorldGen.PlantAlch();
|
|
WorldGen.UpdateWorld_OvergroundTile(WorldGen.genRand.Next(10, Main.maxTilesX - 10), WorldGen.genRand.Next(10, (int) Main.worldSurface - 1), checkNPCSpawns, wallDist);
|
|
}
|
|
for (int index = 0; (double) index < (double) (Main.maxTilesX * Main.maxTilesY) * (double) num2; ++index)
|
|
WorldGen.UpdateWorld_UndergroundTile(WorldGen.genRand.Next(10, Main.maxTilesX - 10), WorldGen.genRand.Next((int) Main.worldSurface - 1, Main.maxTilesY - 20), checkNPCSpawns, wallDist);
|
|
if (Main.dayTime)
|
|
return;
|
|
for (int index = 0; index < Main.dayRate; ++index)
|
|
{
|
|
float num6 = (float) (Main.maxTilesX / 4200) * Star.starfallBoost;
|
|
if ((double) Main.rand.Next(8000) < 10.0 * (double) num6)
|
|
{
|
|
int num7 = 12;
|
|
Vector2 Position = new Vector2((float) ((Main.rand.Next(Main.maxTilesX - 50) + 100) * 16), (float) (Main.rand.Next((int) ((double) Main.maxTilesY * 0.05)) * 16));
|
|
int num8 = -1;
|
|
if (Main.expertMode && Main.rand.Next(15) == 0)
|
|
{
|
|
int closest = (int) Player.FindClosest(Position, 1, 1);
|
|
if ((double) Main.player[closest].position.Y < Main.worldSurface * 16.0 && Main.player[closest].afkCounter < 3600)
|
|
{
|
|
int num9 = Main.rand.Next(1, 640);
|
|
Position.X = Main.player[closest].position.X + (float) Main.rand.Next(-num9, num9 + 1);
|
|
num8 = closest;
|
|
}
|
|
}
|
|
if (!Collision.SolidCollision(Position, 16, 16))
|
|
{
|
|
float num10 = (float) Main.rand.Next(-100, 101);
|
|
float num11 = (float) (Main.rand.Next(200) + 100);
|
|
float num12 = (float) Math.Sqrt((double) num10 * (double) num10 + (double) num11 * (double) num11);
|
|
float num13 = (float) num7 / num12;
|
|
float SpeedX = num10 * num13;
|
|
float SpeedY = num11 * num13;
|
|
Projectile.NewProjectile(Position.X, Position.Y, SpeedX, SpeedY, 720, 0, 0.0f, Main.myPlayer, ai1: ((float) num8));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int GetWorldUpdateRate()
|
|
{
|
|
int num = Math.Min(Main.desiredWorldTilesUpdateRate, 24);
|
|
if (CreativePowerManager.Instance.GetPower<CreativePowers.FreezeTime>().Enabled)
|
|
num = 0;
|
|
return num;
|
|
}
|
|
|
|
private static void UpdateWorld_OvergroundTile(
|
|
int i,
|
|
int j,
|
|
bool checkNPCSpawns,
|
|
int wallDist)
|
|
{
|
|
int minI = i - 1;
|
|
int maxI = i + 2;
|
|
int index1 = j - 1;
|
|
int maxJ = j + 2;
|
|
if (minI < 10)
|
|
minI = 10;
|
|
if (maxI > Main.maxTilesX - 10)
|
|
maxI = Main.maxTilesX - 10;
|
|
if (index1 < 10)
|
|
index1 = 10;
|
|
if (maxJ > Main.maxTilesY - 10)
|
|
maxJ = Main.maxTilesY - 10;
|
|
if (Main.tile[i, j] == null)
|
|
return;
|
|
if (Main.tileAlch[(int) Main.tile[i, j].type])
|
|
WorldGen.GrowAlch(i, j);
|
|
else if ((double) j < Main.worldSurface + 10.0 && (i < WorldGen.beachDistance || i > Main.maxTilesX - WorldGen.beachDistance) && !Main.tile[i, j].nactive())
|
|
{
|
|
int maxValue = 3000 - (int) ((double) Math.Abs(Main.windSpeedCurrent) * 1250.0);
|
|
if (Main.raining)
|
|
maxValue -= (int) (1250.0 * (double) Main.maxRaining);
|
|
if (maxValue < 300)
|
|
maxValue = 300;
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
int j1 = j;
|
|
while ((double) j1 < Main.worldSurface + 10.0 && !Main.tile[i, j1].nactive() && j1 - j < 15)
|
|
++j1;
|
|
if (Main.tile[i, j1].nactive() && Main.tile[i, j1].type == (ushort) 53 && WorldGen.SolidTileAllowBottomSlope(i, j1))
|
|
{
|
|
int index2 = j1 - 1;
|
|
int num1 = WorldGen.genRand.Next(2, 5);
|
|
int num2 = WorldGen.genRand.Next(8, 11);
|
|
int num3 = 0;
|
|
for (int index3 = i - num2; index3 <= i + num2; ++index3)
|
|
{
|
|
for (int index4 = index2 - num2; index4 <= index2 + num2; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && (Main.tile[index3, index4].type == (ushort) 324 || Main.tile[index3, index4].type == (ushort) 81))
|
|
++num3;
|
|
}
|
|
}
|
|
if (num3 < num1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0 && Main.tile[i, index2].liquid >= (byte) 230)
|
|
{
|
|
WorldGen.PlaceTile(i, index2, 81);
|
|
if (Main.netMode == 2 && Main.tile[i, index2].active())
|
|
NetMessage.SendTileSquare(-1, i, index2, 3);
|
|
}
|
|
else
|
|
{
|
|
WorldGen.PlaceTile(i, index2, 324, style: WorldGen.RollRandomSeaShellStyle());
|
|
if (Main.netMode == 2 && Main.tile[i, index2].active())
|
|
NetMessage.SendTileSquare(-1, i, index2, 3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ((Main.tile[i, j].type == (ushort) 596 || Main.tile[i, j].type == (ushort) 616 || Main.tile[i, j].type == (ushort) 595 || Main.tile[i, j].type == (ushort) 615) && (Main.tile[i, j + 1].type == (ushort) 199 || Main.tile[i, j + 1].type == (ushort) 23))
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 4);
|
|
}
|
|
if ((Main.tile[i, j].type == (ushort) 571 || Main.tile[i, j].type == (ushort) 60 && Main.tile[i, j - 1].liquid > (byte) 0) && WorldGen.genRand.Next(5) == 0 && (!Main.tile[i, j - 1].active() || Main.tile[i, j - 1].type == (ushort) 61 || Main.tile[i, j - 1].type == (ushort) 74 || Main.tile[i, j - 1].type == (ushort) 518) && (Main.tile[i, j].type != (ushort) 60 || WorldGen.genRand.Next(30) == 0) && WorldGen.PlaceBamboo(i, j - 1))
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
if (Main.tile[i, j].type == (ushort) 518)
|
|
{
|
|
if (Main.tile[i, j].liquid == (byte) 0 || (int) Main.tile[i, j].liquid / 16 >= 9 && WorldGen.SolidTile(i, j - 1) || Main.tile[i, j - 1].liquid > (byte) 0 && Main.tile[i, j - 1].active())
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) i), number3: ((float) j));
|
|
}
|
|
else
|
|
WorldGen.CheckLilyPad(i, j);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 519)
|
|
{
|
|
WorldGen.CheckCatTail(i, j);
|
|
if (Main.tile[i, j].active() && WorldGen.genRand.Next(8) == 0)
|
|
{
|
|
WorldGen.GrowCatTail(i, j);
|
|
WorldGen.CheckCatTail(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].liquid > (byte) 32)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
if (TileID.Sets.SlowlyDiesInWater[(int) Main.tile[i, j].type])
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) i), number3: ((float) j));
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 60)
|
|
WorldGen.UpdateWorld_GrassGrowth(i, j, minI, maxI, index1, maxJ, false);
|
|
}
|
|
else if (WorldGen.genRand.Next(600) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i, j, 518, true);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
else if (WorldGen.genRand.Next(600) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i, j, 519, true);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].nactive())
|
|
{
|
|
WorldGen.hardUpdateWorld(i, j);
|
|
if (Main.rand.Next(3000) == 0)
|
|
WorldGen.plantDye(i, j);
|
|
else if (Main.hardMode && ((double) i < (double) Main.maxTilesX * 0.4 || (double) i > (double) Main.maxTilesX * 0.6) && Main.rand.Next(15000) == 0)
|
|
WorldGen.plantDye(i, j, true);
|
|
if (Main.tile[i, j].type == (ushort) 80)
|
|
{
|
|
if (WorldGen.genRand.Next(15) == 0)
|
|
WorldGen.GrowCactus(i, j);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 529)
|
|
{
|
|
if (WorldGen.CheckSeaOat(i, j) && WorldGen.genRand.Next(20) == 0)
|
|
WorldGen.GrowSeaOat(i, j);
|
|
}
|
|
else if (TileID.Sets.Conversion.Sand[(int) Main.tile[i, j].type])
|
|
{
|
|
if (!Main.tile[i, index1].active())
|
|
{
|
|
if (WorldGen.genRand.Next(25) == 0)
|
|
{
|
|
WorldGen.PlaceOasisPlant(i, index1);
|
|
if (Main.tile[i, index1].type == (ushort) 530 && Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, index1, 4);
|
|
}
|
|
if (WorldGen.genRand.Next(20) != 0 || !WorldGen.PlantSeaOat(i, index1))
|
|
{
|
|
if (i < WorldGen.oceanDistance || i > Main.maxTilesX - WorldGen.oceanDistance)
|
|
{
|
|
if (WorldGen.genRand.Next(500) == 0)
|
|
{
|
|
int num4 = 7;
|
|
int num5 = 6;
|
|
int num6 = 0;
|
|
for (int index5 = i - num4; index5 <= i + num4; ++index5)
|
|
{
|
|
for (int index6 = index1 - num4; index6 <= index1 + num4; ++index6)
|
|
{
|
|
if (Main.tile[index5, index6].active() && Main.tile[index5, index6].type == (ushort) 81)
|
|
++num6;
|
|
}
|
|
}
|
|
if (num6 < num5 && Main.tile[i, index1].liquid == byte.MaxValue && Main.tile[i, index1 - 1].liquid == byte.MaxValue && Main.tile[i, index1 - 2].liquid == byte.MaxValue && Main.tile[i, index1 - 3].liquid == byte.MaxValue && Main.tile[i, index1 - 4].liquid == byte.MaxValue)
|
|
{
|
|
WorldGen.PlaceTile(i, index1, 81, true);
|
|
if (Main.netMode == 2 && Main.tile[i, index1].active())
|
|
NetMessage.SendTileSquare(-1, i, index1, 1);
|
|
}
|
|
}
|
|
}
|
|
else if (i > WorldGen.beachDistance + 20 && i < Main.maxTilesX - WorldGen.beachDistance - 20 && WorldGen.genRand.Next(300) == 0)
|
|
WorldGen.GrowCactus(i, j);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 530)
|
|
{
|
|
if (!WorldGen.OasisPlantWaterCheck(i, j, true))
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendData(17, number2: ((float) i), number3: ((float) j));
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 147 || Main.tile[i, j].type == (ushort) 161 || Main.tile[i, j].type == (ushort) 163 || Main.tile[i, j].type == (ushort) 164 || Main.tile[i, j].type == (ushort) 200)
|
|
{
|
|
if (Main.rand.Next(10) == 0 && !Main.tile[i, j + 1].active() && !Main.tile[i, j + 2].active())
|
|
{
|
|
int num7 = i - 3;
|
|
int num8 = i + 4;
|
|
int num9 = 0;
|
|
for (int index7 = num7; index7 < num8; ++index7)
|
|
{
|
|
if (Main.tile[index7, j].type == (ushort) 165 && Main.tile[index7, j].active())
|
|
++num9;
|
|
if (Main.tile[index7, j + 1].type == (ushort) 165 && Main.tile[index7, j + 1].active())
|
|
++num9;
|
|
if (Main.tile[index7, j + 2].type == (ushort) 165 && Main.tile[index7, j + 2].active())
|
|
++num9;
|
|
if (Main.tile[index7, j + 3].type == (ushort) 165 && Main.tile[index7, j + 3].active())
|
|
++num9;
|
|
}
|
|
if (num9 < 2)
|
|
{
|
|
WorldGen.PlaceTight(i, j + 1);
|
|
WorldGen.SquareTileFrame(i, j + 1);
|
|
if (Main.netMode == 2 && Main.tile[i, j + 1].active())
|
|
NetMessage.SendTileSquare(-1, i, j + 1, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 254)
|
|
{
|
|
if (Main.rand.Next(((int) Main.tile[i, j].frameX + 10) / 10) == 0)
|
|
WorldGen.GrowPumpkin(i, j, 254);
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 78 || Main.tile[i, j].type == (ushort) 380 || Main.tile[i, j].type == (ushort) 579)
|
|
{
|
|
if (!Main.tile[i, index1].active() && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i, index1, 3, true);
|
|
if (Main.netMode == 2 && Main.tile[i, index1].active())
|
|
NetMessage.SendTileSquare(-1, i, index1, 1);
|
|
}
|
|
}
|
|
else if (TileID.Sets.SpreadOverground[(int) Main.tile[i, j].type])
|
|
WorldGen.UpdateWorld_GrassGrowth(i, j, minI, maxI, index1, maxJ, false);
|
|
else if (Main.tileMoss[(int) Main.tile[i, j].type] || TileID.Sets.tileMossBrick[(int) Main.tile[i, j].type])
|
|
{
|
|
if ((double) WorldGen.genRand.NextFloat() < 0.5)
|
|
{
|
|
int type1 = (int) Main.tile[i, j].type;
|
|
bool flag = false;
|
|
for (int i1 = minI; i1 < maxI; ++i1)
|
|
{
|
|
for (int j2 = index1; j2 < maxJ; ++j2)
|
|
{
|
|
if ((i != i1 || j != j2) && Main.tile[i1, j2].active() && (Main.tile[i1, j2].type == (ushort) 1 || Main.tile[i1, j2].type == (ushort) 38))
|
|
{
|
|
int type2 = (int) Main.tile[i1, j2].type;
|
|
WorldGen.SpreadGrass(i1, j2, (int) Main.tile[i1, j2].type, WorldGen.MossConversion(type1, type2), false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i1, j2].type == type1)
|
|
{
|
|
WorldGen.SquareTileFrame(i1, j2);
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode == 2 & flag)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
int index8 = i;
|
|
int index9 = j;
|
|
switch (WorldGen.genRand.Next(4))
|
|
{
|
|
case 0:
|
|
--index8;
|
|
break;
|
|
case 1:
|
|
++index8;
|
|
break;
|
|
case 2:
|
|
--index9;
|
|
break;
|
|
default:
|
|
++index9;
|
|
break;
|
|
}
|
|
if (!Main.tile[index8, index9].active())
|
|
{
|
|
if (WorldGen.PlaceTile(index8, index9, 184, true))
|
|
Main.tile[index8, index9].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2 && Main.tile[index8, index9].active())
|
|
NetMessage.SendTileSquare(-1, index8, index9, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 20)
|
|
{
|
|
if (WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
bool flag = WorldGen.PlayerLOS(i, j);
|
|
if ((Main.tile[i, j].frameX < (short) 324 || Main.tile[i, j].frameX >= (short) 540 ? WorldGen.GrowTree(i, j) : WorldGen.GrowPalmTree(i, j)) & flag)
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 595)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
int num = (int) Main.tile[i, j].frameX / 54;
|
|
int treeTileType = 596;
|
|
if (num == 0)
|
|
treeTileType = 596;
|
|
if (WorldGen.TryGrowingTreeByType(treeTileType, i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 615)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
int num = (int) Main.tile[i, j].frameX / 54;
|
|
int treeTileType = 616;
|
|
if (num == 0)
|
|
treeTileType = 616;
|
|
if (WorldGen.TryGrowingTreeByType(treeTileType, i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 3 && WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
if (Main.tile[i, j].frameX != (short) 144)
|
|
{
|
|
Main.tile[i, j].type = (ushort) 73;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 110 && WorldGen.genRand.Next(20) == 0)
|
|
{
|
|
if (Main.tile[i, j].frameX < (short) 144)
|
|
{
|
|
Main.tile[i, j].type = (ushort) 113;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 32 && WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.GrowSpike(i, j, (ushort) 32, (ushort) 23);
|
|
else if (Main.tile[i, j].type == (ushort) 352 && WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.GrowSpike(i, j, (ushort) 352, (ushort) 199);
|
|
}
|
|
else if (checkNPCSpawns)
|
|
WorldGen.TrySpawningTownNPC(i, j);
|
|
if (WorldGen.AllowedToSpreadInfections)
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 81 || Main.tile[i, j].wall == (ushort) 83 || Main.tile[i, j].type == (ushort) 199 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall >= (ushort) 63 && Main.tile[tileX, tileY].wall <= (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_187:
|
|
for (int index10 = i - wallDist; index10 < i + wallDist; ++index10)
|
|
{
|
|
for (int index11 = j - wallDist; index11 < j + wallDist; ++index11)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
{
|
|
switch (Main.tile[i, j].type)
|
|
{
|
|
case 199:
|
|
case 200:
|
|
case 201:
|
|
case 203:
|
|
case 205:
|
|
case 234:
|
|
case 352:
|
|
flag = true;
|
|
goto label_187;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 81;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].wall == (ushort) 69 || Main.tile[i, j].wall == (ushort) 3 || Main.tile[i, j].type == (ushort) 23 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall >= (ushort) 63 && Main.tile[tileX, tileY].wall <= (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_201:
|
|
for (int index12 = i - wallDist; index12 < i + wallDist; ++index12)
|
|
{
|
|
for (int index13 = j - wallDist; index13 < j + wallDist; ++index13)
|
|
{
|
|
if (Main.tile[index12, index13].active())
|
|
{
|
|
switch (Main.tile[index12, index13].type)
|
|
{
|
|
case 22:
|
|
case 23:
|
|
case 24:
|
|
case 25:
|
|
case 32:
|
|
case 112:
|
|
case 163:
|
|
flag = true;
|
|
goto label_201;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 69;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].wall == (ushort) 70 || Main.tile[i, j].type == (ushort) 109 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall == (ushort) 63 || Main.tile[tileX, tileY].wall == (ushort) 65 || Main.tile[tileX, tileY].wall == (ushort) 66 || Main.tile[tileX, tileY].wall == (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_215:
|
|
for (int index14 = i - wallDist; index14 < i + wallDist; ++index14)
|
|
{
|
|
for (int index15 = j - wallDist; index15 < j + wallDist; ++index15)
|
|
{
|
|
if (Main.tile[index14, index15].active())
|
|
{
|
|
switch (Main.tile[index14, index15].type)
|
|
{
|
|
case 109:
|
|
case 110:
|
|
case 113:
|
|
case 115:
|
|
case 116:
|
|
case 117:
|
|
case 164:
|
|
flag = true;
|
|
goto label_215;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 70;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.SpreadDesertWalls(wallDist, i, j);
|
|
}
|
|
if (!Main.tile[i, j].nactive())
|
|
return;
|
|
if ((Main.tile[i, j].type == (ushort) 2 || Main.tile[i, j].type == (ushort) 52 || Main.tile[i, j].type == (ushort) 382 || Main.tile[i, j].type == (ushort) 192 && WorldGen.genRand.Next(10) == 0) && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
int maxValue = 60;
|
|
if (Main.tile[i, j].type == (ushort) 52 || Main.tile[i, j].type == (ushort) 382)
|
|
maxValue = 20;
|
|
if (WorldGen.genRand.Next(maxValue) == 0 && !Main.tile[i, j + 1].active() && !Main.tile[i, j + 1].lava())
|
|
{
|
|
bool flag = false;
|
|
ushort num = 52;
|
|
if (Main.tile[i, j].type == (ushort) 382)
|
|
num = (ushort) 382;
|
|
else if (Main.tile[i, j].type != (ushort) 52)
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 68 || Main.tile[i, j].wall == (ushort) 65 || Main.tile[i, j].wall == (ushort) 66 || Main.tile[i, j].wall == (ushort) 63)
|
|
num = (ushort) 382;
|
|
else if (Main.tile[i, j + 1].wall == (ushort) 68 || Main.tile[i, j + 1].wall == (ushort) 65 || Main.tile[i, j + 1].wall == (ushort) 66 || Main.tile[i, j + 1].wall == (ushort) 63)
|
|
num = (ushort) 382;
|
|
}
|
|
for (int index16 = j; index16 > j - 10; --index16)
|
|
{
|
|
if (Main.tile[i, index16].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index16].active() && Main.tile[i, index16].type == (ushort) 2 && !Main.tile[i, index16].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
int index17 = i;
|
|
int index18 = j + 1;
|
|
Main.tile[index17, index18].type = num;
|
|
Main.tile[index17, index18].active(true);
|
|
Main.tile[index17, index18].color(Main.tile[i, j].color());
|
|
WorldGen.SquareTileFrame(index17, index18);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index17, index18, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 61 && WorldGen.genRand.Next(3) == 0 && Main.tile[i, j].frameX < (short) 144)
|
|
{
|
|
if (Main.rand.Next(4) == 0)
|
|
Main.tile[i, j].frameX = (short) (162 + WorldGen.genRand.Next(8) * 18);
|
|
Main.tile[i, j].type = (ushort) 74;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
if ((Main.tile[i, j].type == (ushort) 60 || Main.tile[i, j].type == (ushort) 62) && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
int maxValue = 30;
|
|
if (Main.tile[i, j].type == (ushort) 62)
|
|
maxValue = 10;
|
|
if (WorldGen.genRand.Next(maxValue) != 0 || Main.tile[i, j + 1].active() || Main.tile[i, j + 1].lava())
|
|
return;
|
|
bool flag = false;
|
|
for (int index19 = j; index19 > j - 10; --index19)
|
|
{
|
|
if (Main.tile[i, index19].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index19].active() && Main.tile[i, index19].type == (ushort) 60 && !Main.tile[i, index19].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int index20 = i;
|
|
int index21 = j + 1;
|
|
Main.tile[index20, index21].type = (ushort) 62;
|
|
Main.tile[index20, index21].active(true);
|
|
WorldGen.SquareTileFrame(index20, index21);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index20, index21, 3);
|
|
}
|
|
else if ((Main.tile[i, j].type == (ushort) 70 || Main.tile[i, j].type == (ushort) 528) && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
int maxValue = 70;
|
|
if (Main.tile[i, j].type == (ushort) 528)
|
|
maxValue = 7;
|
|
if (WorldGen.genRand.Next(maxValue) != 0 || Main.tile[i, j + 1].active() || Main.tile[i, j + 1].lava())
|
|
return;
|
|
bool flag = false;
|
|
for (int index22 = j; index22 > j - 10; --index22)
|
|
{
|
|
if (Main.tile[i, index22].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index22].active() && Main.tile[i, index22].type == (ushort) 70 && !Main.tile[i, index22].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int index23 = i;
|
|
int index24 = j + 1;
|
|
Main.tile[index23, index24].type = (ushort) 528;
|
|
Main.tile[index23, index24].active(true);
|
|
WorldGen.SquareTileFrame(index23, index24);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index23, index24, 3);
|
|
}
|
|
else if ((Main.tile[i, j].type == (ushort) 109 || Main.tile[i, j].type == (ushort) 115) && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
int maxValue = 60;
|
|
if (Main.tile[i, j].type == (ushort) 115)
|
|
maxValue = 20;
|
|
if (WorldGen.genRand.Next(maxValue) != 0 || Main.tile[i, j + 1].active() || Main.tile[i, j + 1].lava())
|
|
return;
|
|
bool flag = false;
|
|
for (int index25 = j; index25 > j - 10; --index25)
|
|
{
|
|
if (Main.tile[i, index25].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index25].active() && Main.tile[i, index25].type == (ushort) 109 && !Main.tile[i, index25].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int index26 = i;
|
|
int index27 = j + 1;
|
|
Main.tile[index26, index27].type = (ushort) 115;
|
|
Main.tile[index26, index27].active(true);
|
|
WorldGen.SquareTileFrame(index26, index27);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index26, index27, 3);
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].type != (ushort) 199 && Main.tile[i, j].type != (ushort) 205 || !WorldGen.GrowMoreVines(i, j))
|
|
return;
|
|
int maxValue = 60;
|
|
if (Main.tile[i, j].type == (ushort) 205)
|
|
maxValue = 20;
|
|
if (WorldGen.genRand.Next(maxValue) != 0 || Main.tile[i, j + 1].active() || Main.tile[i, j + 1].lava())
|
|
return;
|
|
bool flag = false;
|
|
for (int index28 = j; index28 > j - 10; --index28)
|
|
{
|
|
if (Main.tile[i, index28].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index28].active() && Main.tile[i, index28].type == (ushort) 199 && !Main.tile[i, index28].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
int index29 = i;
|
|
int index30 = j + 1;
|
|
Main.tile[index29, index30].type = (ushort) 205;
|
|
Main.tile[index29, index30].active(true);
|
|
WorldGen.SquareTileFrame(index29, index30);
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, index29, index30, 3);
|
|
}
|
|
}
|
|
|
|
private static void UpdateWorld_UndergroundTile(
|
|
int i,
|
|
int j,
|
|
bool checkNPCSpawns,
|
|
int wallDist)
|
|
{
|
|
int minI = i - 1;
|
|
int maxI = i + 2;
|
|
int minJ = j - 1;
|
|
int maxJ = j + 2;
|
|
if (minI < 10)
|
|
minI = 10;
|
|
if (maxI > Main.maxTilesX - 10)
|
|
maxI = Main.maxTilesX - 10;
|
|
if (minJ < 10)
|
|
minJ = 10;
|
|
if (maxJ > Main.maxTilesY - 10)
|
|
maxJ = Main.maxTilesY - 10;
|
|
if (Main.tile[i, j] == null)
|
|
return;
|
|
if (Main.tileAlch[(int) Main.tile[i, j].type])
|
|
WorldGen.GrowAlch(i, j);
|
|
else if (Main.tile[i, j].nactive())
|
|
{
|
|
WorldGen.hardUpdateWorld(i, j);
|
|
if (Main.rand.Next(2500) == 0)
|
|
WorldGen.plantDye(i, j);
|
|
else if (Main.hardMode && Main.rand.Next(10000) == 0)
|
|
WorldGen.plantDye(i, j, true);
|
|
if (Main.tile[i, j].type == (ushort) 519)
|
|
{
|
|
WorldGen.CheckCatTail(i, j);
|
|
if (Main.tile[i, j].active() && WorldGen.genRand.Next(2) == 0)
|
|
{
|
|
WorldGen.GrowCatTail(i, j);
|
|
WorldGen.CheckCatTail(i, j);
|
|
}
|
|
}
|
|
if (Main.tile[i, j].type == (ushort) 549)
|
|
WorldGen.GrowCheckSeaweed(i, j);
|
|
else if (Main.tile[i, j].type == (ushort) 53 && !Main.tile[i, j].topSlope() && !Main.tile[i, j].halfBrick() && !Main.tile[i, j - 1].active() && WorldGen.genRand.Next(20) == 0)
|
|
WorldGen.GrowCheckSeaweed(i, j);
|
|
else if (TileID.Sets.SpreadUnderground[(int) Main.tile[i, j].type])
|
|
WorldGen.UpdateWorld_GrassGrowth(i, j, minI, maxI, minJ, maxJ, true);
|
|
else if (Main.tile[i, j].type == (ushort) 32)
|
|
WorldGen.GrowSpike(i, j, (ushort) 32, (ushort) 23);
|
|
else if (Main.tile[i, j].type == (ushort) 352 && WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.GrowSpike(i, j, (ushort) 352, (ushort) 199);
|
|
else if (Main.tile[i, j].type == (ushort) 61 && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
if (Main.tile[i, j].frameX < (short) 144)
|
|
{
|
|
if (Main.rand.Next(4) == 0)
|
|
Main.tile[i, j].frameX = (short) (162 + WorldGen.genRand.Next(8) * 18);
|
|
Main.tile[i, j].type = (ushort) 74;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
}
|
|
else if ((Main.tile[i, j].type == (ushort) 60 || Main.tile[i, j].type == (ushort) 62) && WorldGen.genRand.Next(5) == 0 && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
if (!Main.tile[i, j + 1].active() && !Main.tile[i, j + 1].lava())
|
|
{
|
|
bool flag = false;
|
|
for (int index = j; index > j - 10; --index)
|
|
{
|
|
if (Main.tile[i, index].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index].active() && Main.tile[i, index].type == (ushort) 60 && !Main.tile[i, index].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
int index1 = i;
|
|
int index2 = j + 1;
|
|
Main.tile[index1, index2].type = (ushort) 62;
|
|
Main.tile[index1, index2].active(true);
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
Main.tile[index1, index2].color(Main.tile[index1, index2 - 1].color());
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index1, index2, 3);
|
|
}
|
|
}
|
|
}
|
|
else if ((Main.tile[i, j].type == (ushort) 70 || Main.tile[i, j].type == (ushort) 528) && WorldGen.GrowMoreVines(i, j))
|
|
{
|
|
if (!Main.tile[i, j + 1].active() && !Main.tile[i, j + 1].lava())
|
|
{
|
|
int maxValue = 70;
|
|
if (Main.tile[i, j].type == (ushort) 528)
|
|
maxValue = 7;
|
|
if (WorldGen.genRand.Next(maxValue) == 0)
|
|
{
|
|
bool flag = false;
|
|
for (int index = j; index > j - 10; --index)
|
|
{
|
|
if (Main.tile[i, index].bottomSlope())
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (Main.tile[i, index].active() && Main.tile[i, index].type == (ushort) 70 && !Main.tile[i, index].bottomSlope())
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
int index3 = i;
|
|
int index4 = j + 1;
|
|
Main.tile[index3, index4].type = (ushort) 528;
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].color(Main.tile[index3, index4 - 1].color());
|
|
WorldGen.SquareTileFrame(index3, index4);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, index3, index4, 3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ((Main.tile[i, j].type == (ushort) 60 || Main.tile[i, j].type == (ushort) 62) && WorldGen.genRand.Next(80) == 0 && !WorldGen.PlayerLOS(i, j))
|
|
{
|
|
bool flag = true;
|
|
int tileY = j;
|
|
if (Main.tile[i, j].type == (ushort) 60)
|
|
++tileY;
|
|
for (int i1 = i; i1 < i + 2; ++i1)
|
|
{
|
|
int j1 = tileY - 1;
|
|
if (!WorldGen.AnchorValid(Framing.GetTileSafely(i1, j1), AnchorType.SolidTile) || Main.tile[i1, j1].bottomSlope())
|
|
flag = false;
|
|
if (Main.tile[i1, j1].liquid > (byte) 0 || Main.wallHouse[(int) Main.tile[i1, j1].wall])
|
|
flag = false;
|
|
if (flag)
|
|
{
|
|
for (int index = tileY; index < tileY + 2; ++index)
|
|
{
|
|
if ((!Main.tile[i1, index].active() || Main.tileCut[(int) Main.tile[i1, index].type] && Main.tile[i1, index].type != (ushort) 444 ? (!Main.tile[i1, index].lava() ? 1 : 0) : 0) == 0)
|
|
flag = false;
|
|
if (!flag)
|
|
break;
|
|
}
|
|
if (!flag)
|
|
break;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if (flag)
|
|
{
|
|
if (WorldGen.CountNearBlocksTypes(i, j, 20, 1, 444) > 0)
|
|
flag = false;
|
|
}
|
|
if (flag)
|
|
{
|
|
for (int i2 = i; i2 < i + 2; ++i2)
|
|
{
|
|
Main.tile[i2, tileY - 1].slope((byte) 0);
|
|
Main.tile[i2, tileY - 1].halfBrick(false);
|
|
for (int j2 = tileY; j2 < tileY + 2; ++j2)
|
|
{
|
|
if (Main.tile[i2, j2].active())
|
|
WorldGen.KillTile(i2, j2);
|
|
}
|
|
}
|
|
for (int index5 = i; index5 < i + 2; ++index5)
|
|
{
|
|
for (int index6 = tileY; index6 < tileY + 2; ++index6)
|
|
{
|
|
Main.tile[index5, index6].active(true);
|
|
Main.tile[index5, index6].type = (ushort) 444;
|
|
Main.tile[index5, index6].frameX = (short) ((index5 - i) * 18);
|
|
Main.tile[index5, index6].frameY = (short) ((index6 - tileY) * 18);
|
|
}
|
|
}
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, tileY, 3);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 69)
|
|
WorldGen.GrowSpike(i, j, (ushort) 69, (ushort) 60);
|
|
else if (Main.tile[i, j].type == (ushort) 147 || Main.tile[i, j].type == (ushort) 161 || Main.tile[i, j].type == (ushort) 163 || Main.tile[i, j].type == (ushort) 164 || Main.tile[i, j].type == (ushort) 200)
|
|
{
|
|
if (Main.rand.Next(10) == 0 && !Main.tile[i, j + 1].active() && !Main.tile[i, j + 2].active())
|
|
{
|
|
int num1 = i - 3;
|
|
int num2 = i + 4;
|
|
int num3 = 0;
|
|
for (int index = num1; index < num2; ++index)
|
|
{
|
|
if (Main.tile[index, j].type == (ushort) 165 && Main.tile[index, j].active())
|
|
++num3;
|
|
if (Main.tile[index, j + 1].type == (ushort) 165 && Main.tile[index, j + 1].active())
|
|
++num3;
|
|
if (Main.tile[index, j + 2].type == (ushort) 165 && Main.tile[index, j + 2].active())
|
|
++num3;
|
|
if (Main.tile[index, j + 3].type == (ushort) 165 && Main.tile[index, j + 3].active())
|
|
++num3;
|
|
}
|
|
if (num3 < 2)
|
|
{
|
|
WorldGen.PlaceTight(i, j + 1);
|
|
WorldGen.SquareTileFrame(i, j + 1);
|
|
if (Main.netMode == 2 && Main.tile[i, j + 1].active())
|
|
NetMessage.SendTileSquare(-1, i, j + 1, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tileMoss[(int) Main.tile[i, j].type] || TileID.Sets.tileMossBrick[(int) Main.tile[i, j].type])
|
|
{
|
|
int type1 = (int) Main.tile[i, j].type;
|
|
bool flag = false;
|
|
for (int i3 = minI; i3 < maxI; ++i3)
|
|
{
|
|
for (int j3 = minJ; j3 < maxJ; ++j3)
|
|
{
|
|
if ((i != i3 || j != j3) && Main.tile[i3, j3].active() && (Main.tile[i3, j3].type == (ushort) 1 || Main.tile[i3, j3].type == (ushort) 38))
|
|
{
|
|
int type2 = (int) Main.tile[i3, j3].type;
|
|
WorldGen.SpreadGrass(i3, j3, (int) Main.tile[i3, j3].type, WorldGen.MossConversion(type1, type2), false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i3, j3].type == type1)
|
|
{
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode == 2 & flag)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
if (WorldGen.genRand.Next(6) == 0)
|
|
{
|
|
int index7 = i;
|
|
int index8 = j;
|
|
switch (WorldGen.genRand.Next(4))
|
|
{
|
|
case 0:
|
|
--index7;
|
|
break;
|
|
case 1:
|
|
++index7;
|
|
break;
|
|
case 2:
|
|
--index8;
|
|
break;
|
|
default:
|
|
++index8;
|
|
break;
|
|
}
|
|
if (!Main.tile[index7, index8].active())
|
|
{
|
|
if (WorldGen.PlaceTile(index7, index8, 184, true))
|
|
Main.tile[index7, index8].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2 && Main.tile[index7, index8].active())
|
|
NetMessage.SendTileSquare(-1, index7, index8, 1);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 590)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
int num = (int) Main.tile[i, j].frameX / 54;
|
|
int treeTileType = 587;
|
|
switch (num)
|
|
{
|
|
case 0:
|
|
treeTileType = 583;
|
|
break;
|
|
case 1:
|
|
treeTileType = 584;
|
|
break;
|
|
case 2:
|
|
treeTileType = 585;
|
|
break;
|
|
case 3:
|
|
treeTileType = 586;
|
|
break;
|
|
case 4:
|
|
treeTileType = 587;
|
|
break;
|
|
case 5:
|
|
treeTileType = 588;
|
|
break;
|
|
case 6:
|
|
treeTileType = 589;
|
|
break;
|
|
}
|
|
if (WorldGen.TryGrowingTreeByType(treeTileType, i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 595)
|
|
{
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
int num = (int) Main.tile[i, j].frameX / 54;
|
|
int treeTileType = 596;
|
|
if (num == 0)
|
|
treeTileType = 596;
|
|
if (WorldGen.TryGrowingTreeByType(treeTileType, i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].type == (ushort) 615 && WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
int num = (int) Main.tile[i, j].frameX / 54;
|
|
int treeTileType = 616;
|
|
if (num == 0)
|
|
treeTileType = 616;
|
|
if (WorldGen.TryGrowingTreeByType(treeTileType, i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i, j].wall == (ushort) 62 && Main.tile[i, j].liquid == (byte) 0 && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int num4 = WorldGen.genRand.Next(2, 4);
|
|
int num5 = i - num4;
|
|
int num6 = i + num4;
|
|
int num7 = j - num4;
|
|
int num8 = j + num4;
|
|
bool flag = false;
|
|
for (int i4 = num5; i4 <= num6; ++i4)
|
|
{
|
|
for (int j4 = num7; j4 <= num8; ++j4)
|
|
{
|
|
if (WorldGen.SolidTile(i4, j4))
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag && !Main.tile[i, j].active())
|
|
{
|
|
WorldGen.PlaceTile(i, j, 51, true);
|
|
WorldGen.TileFrame(i, j, true);
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
}
|
|
if (checkNPCSpawns)
|
|
WorldGen.TrySpawningTownNPC(i, j);
|
|
}
|
|
if (!WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
if (Main.tile[i, j].wall == (ushort) 81 || Main.tile[i, j].wall == (ushort) 83 || Main.tile[i, j].type == (ushort) 199 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall >= (ushort) 63 && Main.tile[tileX, tileY].wall <= (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_190:
|
|
for (int index9 = i - wallDist; index9 < i + wallDist; ++index9)
|
|
{
|
|
for (int index10 = j - wallDist; index10 < j + wallDist; ++index10)
|
|
{
|
|
if (Main.tile[index9, index10].active())
|
|
{
|
|
switch (Main.tile[index9, index10].type)
|
|
{
|
|
case 199:
|
|
case 200:
|
|
case 201:
|
|
case 203:
|
|
case 205:
|
|
case 234:
|
|
case 352:
|
|
flag = true;
|
|
goto label_190;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 81;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].wall == (ushort) 69 || Main.tile[i, j].wall == (ushort) 3 || Main.tile[i, j].type == (ushort) 23 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall >= (ushort) 63 && Main.tile[tileX, tileY].wall <= (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_204:
|
|
for (int index11 = i - wallDist; index11 < i + wallDist; ++index11)
|
|
{
|
|
for (int index12 = j - wallDist; index12 < j + wallDist; ++index12)
|
|
{
|
|
if (Main.tile[index11, index12].active())
|
|
{
|
|
switch (Main.tile[index11, index12].type)
|
|
{
|
|
case 22:
|
|
case 23:
|
|
case 24:
|
|
case 25:
|
|
case 32:
|
|
case 112:
|
|
case 163:
|
|
flag = true;
|
|
goto label_204;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 69;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
else if (Main.tile[i, j].wall == (ushort) 70 || Main.tile[i, j].type == (ushort) 109 && Main.tile[i, j].active())
|
|
{
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
if (Main.tile[tileX, tileY].wall == (ushort) 63 || Main.tile[tileX, tileY].wall == (ushort) 65 || Main.tile[tileX, tileY].wall == (ushort) 66 || Main.tile[tileX, tileY].wall == (ushort) 68)
|
|
{
|
|
bool flag = false;
|
|
label_218:
|
|
for (int index13 = i - wallDist; index13 < i + wallDist; ++index13)
|
|
{
|
|
for (int index14 = j - wallDist; index14 < j + wallDist; ++index14)
|
|
{
|
|
if (Main.tile[index13, index14].active())
|
|
{
|
|
switch (Main.tile[index13, index14].type)
|
|
{
|
|
case 109:
|
|
case 110:
|
|
case 113:
|
|
case 115:
|
|
case 116:
|
|
case 117:
|
|
case 164:
|
|
flag = true;
|
|
goto label_218;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[tileX, tileY].wall = (ushort) 70;
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
}
|
|
}
|
|
WorldGen.SpreadDesertWalls(wallDist, i, j);
|
|
}
|
|
|
|
private static void UpdateWorld_GrassGrowth(
|
|
int i,
|
|
int j,
|
|
int minI,
|
|
int maxI,
|
|
int minJ,
|
|
int maxJ,
|
|
bool underground)
|
|
{
|
|
if (underground)
|
|
{
|
|
int type = (int) Main.tile[i, j].type;
|
|
int dirt = -1;
|
|
int Type = -1;
|
|
int maxValue1 = 1;
|
|
switch (type)
|
|
{
|
|
case 23:
|
|
dirt = 0;
|
|
Type = 24;
|
|
maxValue1 = 2;
|
|
if (!WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
break;
|
|
case 60:
|
|
dirt = 59;
|
|
Type = 61;
|
|
maxValue1 = 10;
|
|
break;
|
|
case 70:
|
|
dirt = 59;
|
|
Type = 71;
|
|
maxValue1 = 10;
|
|
break;
|
|
case 199:
|
|
dirt = 0;
|
|
Type = 201;
|
|
maxValue1 = 2;
|
|
if (!WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
break;
|
|
}
|
|
bool flag1 = false;
|
|
if (Type != -1 && !Main.tile[i, minJ].active() && WorldGen.genRand.Next(maxValue1) == 0)
|
|
{
|
|
flag1 = true;
|
|
if (WorldGen.PlaceTile(i, minJ, Type, true))
|
|
Main.tile[i, minJ].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2 && Main.tile[i, minJ].active())
|
|
NetMessage.SendTileSquare(-1, i, minJ, 1);
|
|
}
|
|
if (dirt != -1)
|
|
{
|
|
bool flag2 = false;
|
|
for (int i1 = minI; i1 < maxI; ++i1)
|
|
{
|
|
for (int j1 = minJ; j1 < maxJ; ++j1)
|
|
{
|
|
if ((i != i1 || j != j1) && Main.tile[i1, j1].active() && (int) Main.tile[i1, j1].type == dirt)
|
|
{
|
|
WorldGen.SpreadGrass(i1, j1, dirt, type, false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i1, j1].type == type)
|
|
{
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
flag2 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Main.netMode == 2 & flag2)
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
}
|
|
switch (type)
|
|
{
|
|
case 60:
|
|
if (flag1 || WorldGen.genRand.Next(25) != 0 || Main.tile[i, minJ].liquid != (byte) 0)
|
|
break;
|
|
if (Main.hardMode && NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3 && WorldGen.genRand.Next(60) == 0)
|
|
{
|
|
bool flag3 = true;
|
|
int num = 150;
|
|
for (int index1 = i - num; index1 < i + num; index1 += 2)
|
|
{
|
|
for (int index2 = j - num; index2 < j + num; index2 += 2)
|
|
{
|
|
if (index1 > 1 && index1 < Main.maxTilesX - 2 && index2 > 1 && index2 < Main.maxTilesY - 2 && Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 238)
|
|
{
|
|
flag3 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag3)
|
|
{
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 238, 0, 0);
|
|
WorldGen.SquareTileFrame(i, minJ);
|
|
WorldGen.SquareTileFrame(i + 2, minJ);
|
|
WorldGen.SquareTileFrame(i - 1, minJ);
|
|
if (Main.tile[i, minJ].type == (ushort) 238 && Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, minJ, 5);
|
|
}
|
|
}
|
|
int maxValue2 = Main.expertMode ? 30 : 40;
|
|
if (Main.hardMode && NPC.downedMechBossAny && WorldGen.genRand.Next(maxValue2) == 0)
|
|
{
|
|
bool flag4 = true;
|
|
int num = 60;
|
|
if (Main.expertMode)
|
|
num -= 10;
|
|
for (int index3 = i - num; index3 < i + num; index3 += 2)
|
|
{
|
|
for (int index4 = j - num; index4 < j + num; index4 += 2)
|
|
{
|
|
if (index3 > 1 && index3 < Main.maxTilesX - 2 && index4 > 1 && index4 < Main.maxTilesY - 2 && Main.tile[index3, index4].active() && Main.tile[index3, index4].type == (ushort) 236)
|
|
{
|
|
flag4 = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!flag4)
|
|
break;
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 236, WorldGen.genRand.Next(3), 0);
|
|
WorldGen.SquareTileFrame(i, minJ);
|
|
WorldGen.SquareTileFrame(i + 1, minJ + 1);
|
|
if (Main.tile[i, minJ].type != (ushort) 236 || Main.netMode != 2)
|
|
break;
|
|
NetMessage.SendTileSquare(-1, i, minJ, 4);
|
|
break;
|
|
}
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 233, WorldGen.genRand.Next(8), 0);
|
|
if (Main.tile[i, minJ].type != (ushort) 233)
|
|
break;
|
|
if (Main.netMode == 2)
|
|
{
|
|
NetMessage.SendTileSquare(-1, i, minJ, 4);
|
|
break;
|
|
}
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 233, WorldGen.genRand.Next(12), 1);
|
|
if (Main.tile[i, minJ].type != (ushort) 233 || Main.netMode != 2)
|
|
break;
|
|
NetMessage.SendTileSquare(-1, i, minJ, 3);
|
|
break;
|
|
case 70:
|
|
if (Main.tile[i, j - 1].liquid > (byte) 0)
|
|
WorldGen.PlaceCatTail(i, j - 1);
|
|
if (WorldGen.genRand.Next(300) != 0 || !WorldGen.GrowShroom(i, j) || !WorldGen.PlayerLOS(i, j))
|
|
break;
|
|
WorldGen.TreeGrowFXCheck(i, j - 1);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int grass = (int) Main.tile[i, j].type;
|
|
switch (grass)
|
|
{
|
|
case 2:
|
|
case 23:
|
|
case 32:
|
|
case 109:
|
|
case 199:
|
|
case 352:
|
|
case 477:
|
|
case 492:
|
|
if (Main.halloween && WorldGen.genRand.Next(75) == 0 && (grass == 2 || grass == 109))
|
|
{
|
|
int num1 = 100;
|
|
int num2 = 0;
|
|
for (int index5 = i - num1; index5 < i + num1; index5 += 2)
|
|
{
|
|
for (int index6 = j - num1; index6 < j + num1; index6 += 2)
|
|
{
|
|
if (index5 > 1 && index5 < Main.maxTilesX - 2 && index6 > 1 && index6 < Main.maxTilesY - 2 && Main.tile[index5, index6].active() && Main.tile[index5, index6].type == (ushort) 254)
|
|
++num2;
|
|
}
|
|
}
|
|
if (num2 < 6)
|
|
{
|
|
WorldGen.PlacePumpkin(i, minJ);
|
|
if (Main.netMode == 2 && Main.tile[i, minJ].type == (ushort) 254)
|
|
NetMessage.SendTileSquare(-1, i, minJ, 4);
|
|
}
|
|
}
|
|
if (!Main.tile[i, minJ].active() && Main.tile[i, minJ].liquid == (byte) 0)
|
|
{
|
|
int Type = -1;
|
|
if (grass == 2 && WorldGen.genRand.Next(12) == 0)
|
|
Type = 3;
|
|
else if (grass == 23 && WorldGen.genRand.Next(10) == 0)
|
|
Type = 24;
|
|
else if (grass == 109 && WorldGen.genRand.Next(10) == 0)
|
|
Type = 110;
|
|
else if (grass == 199 && WorldGen.genRand.Next(10) == 0)
|
|
Type = 201;
|
|
if (Type != -1 && WorldGen.PlaceTile(i, minJ, Type, true))
|
|
{
|
|
Main.tile[i, minJ].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, minJ, 1);
|
|
}
|
|
}
|
|
bool flag5 = false;
|
|
switch (grass)
|
|
{
|
|
case 32:
|
|
grass = 23;
|
|
if (!WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
break;
|
|
case 352:
|
|
grass = 199;
|
|
if (!WorldGen.AllowedToSpreadInfections)
|
|
return;
|
|
break;
|
|
case 477:
|
|
grass = 2;
|
|
break;
|
|
case 492:
|
|
grass = 109;
|
|
break;
|
|
}
|
|
bool flag6 = WorldGen.AllowedToSpreadInfections && (grass == 23 || grass == 199 || grass == 109 || grass == 492);
|
|
for (int i2 = minI; i2 < maxI; ++i2)
|
|
{
|
|
for (int j2 = minJ; j2 < maxJ; ++j2)
|
|
{
|
|
if ((i != i2 || j != j2) && Main.tile[i2, j2].active())
|
|
{
|
|
int type = (int) Main.tile[i2, j2].type;
|
|
if (flag6 || type == 0)
|
|
{
|
|
if (type == 0 || (grass == 23 || grass == 199) && (type == 2 || type == 109 || type == 477 || type == 492))
|
|
{
|
|
WorldGen.SpreadGrass(i2, j2, grass: grass, repeat: false, color: Main.tile[i, j].color());
|
|
if (grass == 23 || grass == 199)
|
|
{
|
|
if (WorldGen.AllowedToSpreadInfections)
|
|
{
|
|
WorldGen.SpreadGrass(i2, j2, 2, grass, false, Main.tile[i, j].color());
|
|
WorldGen.SpreadGrass(i2, j2, 109, grass, false, Main.tile[i, j].color());
|
|
WorldGen.SpreadGrass(i2, j2, 477, grass, false, Main.tile[i, j].color());
|
|
WorldGen.SpreadGrass(i2, j2, 492, grass, false, Main.tile[i, j].color());
|
|
}
|
|
else
|
|
continue;
|
|
}
|
|
if ((int) Main.tile[i2, j2].type == grass)
|
|
{
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
flag5 = true;
|
|
}
|
|
}
|
|
if (type == 0 || (grass == 109 || grass == 492) && (type == 2 || type == 477 || type == 23 || type == 199))
|
|
{
|
|
WorldGen.SpreadGrass(i2, j2, grass: grass, repeat: false, color: Main.tile[i, j].color());
|
|
if (grass == 109)
|
|
WorldGen.SpreadGrass(i2, j2, 2, grass, false, Main.tile[i, j].color());
|
|
if (grass == 492)
|
|
WorldGen.SpreadGrass(i2, j2, 477, grass, false, Main.tile[i, j].color());
|
|
else if (grass == 109)
|
|
WorldGen.SpreadGrass(i2, j2, 477, 492, false, Main.tile[i, j].color());
|
|
if ((grass == 492 || grass == 109) && WorldGen.AllowedToSpreadInfections)
|
|
WorldGen.SpreadGrass(i2, j2, 23, 109, false, Main.tile[i, j].color());
|
|
if ((grass == 492 || grass == 109) && WorldGen.AllowedToSpreadInfections)
|
|
WorldGen.SpreadGrass(i2, j2, 199, 109, false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i2, j2].type == grass)
|
|
{
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
flag5 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!(Main.netMode == 2 & flag5))
|
|
break;
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
break;
|
|
case 60:
|
|
if (!Main.tile[i, minJ].active() && WorldGen.genRand.Next(7) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i, minJ, 61, true);
|
|
if (Main.tile[i, minJ].active())
|
|
Main.tile[i, minJ].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2 && Main.tile[i, minJ].active())
|
|
NetMessage.SendTileSquare(-1, i, minJ, 1);
|
|
}
|
|
else if (WorldGen.genRand.Next(500) == 0 && (!Main.tile[i, minJ].active() || Main.tile[i, minJ].type == (ushort) 61 || Main.tile[i, minJ].type == (ushort) 74 || Main.tile[i, minJ].type == (ushort) 69))
|
|
{
|
|
if (WorldGen.GrowTree(i, j) && WorldGen.PlayerLOS(i, j))
|
|
WorldGen.TreeGrowFXCheck(i, j - 1);
|
|
}
|
|
else if (WorldGen.genRand.Next(25) == 0 && Main.tile[i, minJ].liquid == (byte) 0)
|
|
{
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 233, WorldGen.genRand.Next(8), 0);
|
|
if (Main.tile[i, minJ].type == (ushort) 233)
|
|
{
|
|
if (Main.netMode == 2)
|
|
{
|
|
NetMessage.SendTileSquare(-1, i, minJ, 4);
|
|
}
|
|
else
|
|
{
|
|
WorldGen.PlaceJunglePlant(i, minJ, (ushort) 233, WorldGen.genRand.Next(12), 1);
|
|
if (Main.tile[i, minJ].type == (ushort) 233 && Main.netMode == 2)
|
|
NetMessage.SendTileSquare(-1, i, minJ, 3);
|
|
}
|
|
}
|
|
}
|
|
bool flag7 = false;
|
|
for (int i3 = minI; i3 < maxI; ++i3)
|
|
{
|
|
for (int j3 = minJ; j3 < maxJ; ++j3)
|
|
{
|
|
if ((i != i3 || j != j3) && Main.tile[i3, j3].active() && Main.tile[i3, j3].type == (ushort) 59)
|
|
{
|
|
WorldGen.SpreadGrass(i3, j3, 59, grass, false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i3, j3].type == grass)
|
|
{
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
flag7 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!(Main.netMode == 2 & flag7))
|
|
break;
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
break;
|
|
case 70:
|
|
if (!Main.tile[i, j].inActive())
|
|
{
|
|
if (!Main.tile[i, minJ].active() && WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
WorldGen.PlaceTile(i, minJ, 71, true);
|
|
if (Main.tile[i, minJ].active())
|
|
Main.tile[i, minJ].color(Main.tile[i, j].color());
|
|
if (Main.netMode == 2 && Main.tile[i, minJ].active())
|
|
NetMessage.SendTileSquare(-1, i, minJ, 1);
|
|
}
|
|
if (WorldGen.genRand.Next(300) == 0)
|
|
{
|
|
bool flag8 = WorldGen.PlayerLOS(i, j);
|
|
if (WorldGen.GrowTree(i, j) & flag8)
|
|
WorldGen.TreeGrowFXCheck(i, j - 1);
|
|
}
|
|
}
|
|
bool flag9 = false;
|
|
for (int i4 = minI; i4 < maxI; ++i4)
|
|
{
|
|
for (int j4 = minJ; j4 < maxJ; ++j4)
|
|
{
|
|
if ((i != i4 || j != j4) && Main.tile[i4, j4].active() && Main.tile[i4, j4].type == (ushort) 59)
|
|
{
|
|
WorldGen.SpreadGrass(i4, j4, 59, grass, false, Main.tile[i, j].color());
|
|
if ((int) Main.tile[i4, j4].type == grass)
|
|
{
|
|
WorldGen.SquareTileFrame(i4, j4);
|
|
flag9 = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!(Main.netMode == 2 & flag9))
|
|
break;
|
|
NetMessage.SendTileSquare(-1, i, j, 3);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void TrySpawningTownNPC(int x, int y)
|
|
{
|
|
bool flag = Main.tileSolid[379];
|
|
Main.tileSolid[379] = true;
|
|
if (WorldGen.prioritizedTownNPCType > 0)
|
|
{
|
|
if (Main.tile[x, y].wall == (ushort) 34)
|
|
{
|
|
if (Main.rand.Next(4) == 0)
|
|
{
|
|
int num1 = (int) WorldGen.SpawnTownNPC(x, y);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num2 = (int) WorldGen.SpawnTownNPC(x, y);
|
|
}
|
|
}
|
|
Main.tileSolid[379] = flag;
|
|
}
|
|
|
|
public static void SpreadDesertWalls(int wallDist, int i, int j)
|
|
{
|
|
if (!WallID.Sets.Conversion.Sandstone[(int) Main.tile[i, j].wall] && (!Main.tile[i, j].active() || !TileID.Sets.Conversion.Sandstone[(int) Main.tile[i, j].type]) && !WallID.Sets.Conversion.HardenedSand[(int) Main.tile[i, j].wall])
|
|
return;
|
|
int num = 0;
|
|
int wall = (int) Main.tile[i, j].wall;
|
|
int type = (int) Main.tile[i, j].type;
|
|
if (WallID.Sets.Corrupt[wall] || TileID.Sets.Corrupt[type])
|
|
num = 1;
|
|
if (WallID.Sets.Hallow[wall] || TileID.Sets.Hallow[type])
|
|
num = 2;
|
|
if (WallID.Sets.Crimson[wall] || TileID.Sets.Crimson[type])
|
|
num = 3;
|
|
if (num == 0)
|
|
return;
|
|
int tileX = i + WorldGen.genRand.Next(-2, 3);
|
|
int tileY = j + WorldGen.genRand.Next(-2, 3);
|
|
bool flag = false;
|
|
if (WallID.Sets.Conversion.PureSand[(int) Main.tile[tileX, tileY].wall])
|
|
{
|
|
switch (num)
|
|
{
|
|
case 1:
|
|
for (int index1 = i - wallDist; index1 < i + wallDist; ++index1)
|
|
{
|
|
for (int index2 = j - wallDist; index2 < j + wallDist; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && TileID.Sets.Corrupt[(int) Main.tile[index1, index2].type])
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
for (int index3 = i - wallDist; index3 < i + wallDist; ++index3)
|
|
{
|
|
for (int index4 = j - wallDist; index4 < j + wallDist; ++index4)
|
|
{
|
|
if (Main.tile[index3, index4].active() && TileID.Sets.Hallow[(int) Main.tile[index3, index4].type])
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
for (int index5 = i - wallDist; index5 < i + wallDist; ++index5)
|
|
{
|
|
for (int index6 = j - wallDist; index6 < j + wallDist; ++index6)
|
|
{
|
|
if (Main.tile[index5, index6].active() && TileID.Sets.Crimson[(int) Main.tile[index5, index6].type])
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!flag)
|
|
return;
|
|
ushort? nullable = new ushort?();
|
|
if (WallID.Sets.Conversion.Sandstone[(int) Main.tile[tileX, tileY].wall])
|
|
{
|
|
switch (num)
|
|
{
|
|
case 1:
|
|
nullable = new ushort?((ushort) 220);
|
|
break;
|
|
case 2:
|
|
nullable = new ushort?((ushort) 222);
|
|
break;
|
|
case 3:
|
|
nullable = new ushort?((ushort) 221);
|
|
break;
|
|
}
|
|
}
|
|
if (WallID.Sets.Conversion.HardenedSand[(int) Main.tile[tileX, tileY].wall])
|
|
{
|
|
switch (num)
|
|
{
|
|
case 1:
|
|
nullable = new ushort?((ushort) 217);
|
|
break;
|
|
case 2:
|
|
nullable = new ushort?((ushort) 219);
|
|
break;
|
|
case 3:
|
|
nullable = new ushort?((ushort) 218);
|
|
break;
|
|
}
|
|
}
|
|
if (!nullable.HasValue || (int) Main.tile[tileX, tileY].wall == (int) nullable.Value)
|
|
return;
|
|
Main.tile[tileX, tileY].wall = nullable.Value;
|
|
if (Main.netMode != 2)
|
|
return;
|
|
NetMessage.SendTileSquare(-1, tileX, tileY, 3);
|
|
}
|
|
|
|
public static void PlaceWall(int i, int j, int type, bool mute = false)
|
|
{
|
|
if (i <= 1 || j <= 1 || i >= Main.maxTilesX - 2 || j >= Main.maxTilesY - 2)
|
|
return;
|
|
if (Main.tile[i, j] == null)
|
|
Main.tile[i, j] = new Tile();
|
|
if (Main.tile[i, j].wall != (ushort) 0)
|
|
return;
|
|
Main.tile[i, j].wall = (ushort) type;
|
|
WorldGen.SquareWallFrame(i, j);
|
|
if (mute)
|
|
return;
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
}
|
|
|
|
public static void SpreadGrass(int i, int j, int dirt = 0, int grass = 2, bool repeat = true, byte color = 0)
|
|
{
|
|
try
|
|
{
|
|
if (!WorldGen.InWorld(i, j, 1))
|
|
return;
|
|
if (WorldGen.gen && (grass == 199 || grass == 23))
|
|
{
|
|
int beachDistance = WorldGen.beachDistance;
|
|
if ((double) i > (double) Main.maxTilesX * 0.45 && (double) i <= (double) Main.maxTilesX * 0.55 || i < beachDistance || i >= Main.maxTilesX - beachDistance)
|
|
return;
|
|
}
|
|
else if ((WorldGen.gen || grass != 199 && grass != 23) && ((int) Main.tile[i, j].type != dirt || !Main.tile[i, j].active() || (double) j >= Main.worldSurface && dirt == 0))
|
|
return;
|
|
int num1 = i - 1;
|
|
int num2 = i + 2;
|
|
int num3 = j - 1;
|
|
int num4 = j + 2;
|
|
if (num1 < 0)
|
|
num1 = 0;
|
|
if (num2 > Main.maxTilesX)
|
|
num2 = Main.maxTilesX;
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesY)
|
|
num4 = Main.maxTilesY;
|
|
bool flag = true;
|
|
for (int index1 = num1; index1 < num2; ++index1)
|
|
{
|
|
for (int index2 = num3; index2 < num4; ++index2)
|
|
{
|
|
if (!Main.tile[index1, index2].active() || !Main.tileSolid[(int) Main.tile[index1, index2].type])
|
|
flag = false;
|
|
if (Main.tile[index1, index2].lava() && Main.tile[index1, index2].liquid > (byte) 0)
|
|
{
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (flag || !TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[i, j].type] || grass == 23 && Main.tile[i, j - 1].type == (ushort) 27 || grass == 199 && Main.tile[i, j - 1].type == (ushort) 27 || grass == 109 && Main.tile[i, j - 1].type == (ushort) 27)
|
|
return;
|
|
Main.tile[i, j].type = (ushort) grass;
|
|
Main.tile[i, j].color(color);
|
|
for (int i1 = num1; i1 < num2; ++i1)
|
|
{
|
|
for (int j1 = num3; j1 < num4; ++j1)
|
|
{
|
|
if (Main.tile[i1, j1].active())
|
|
{
|
|
if ((int) Main.tile[i1, j1].type == dirt)
|
|
{
|
|
try
|
|
{
|
|
if (repeat)
|
|
{
|
|
if (WorldGen.grassSpread < 1000)
|
|
{
|
|
++WorldGen.grassSpread;
|
|
WorldGen.SpreadGrass(i1, j1, dirt, grass);
|
|
--WorldGen.grassSpread;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public static void ChasmRunnerSideways(int i, int j, int direction, int steps)
|
|
{
|
|
float num1 = (float) steps;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(10, 21) * 0.1f * (float) direction;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 10) * 0.01f;
|
|
double num2 = (double) (WorldGen.genRand.Next(5) + 7);
|
|
while (num2 > 0.0)
|
|
{
|
|
if ((double) num1 > 0.0)
|
|
{
|
|
num2 = num2 + (double) WorldGen.genRand.Next(3) - (double) WorldGen.genRand.Next(3);
|
|
if (num2 < 7.0)
|
|
num2 = 7.0;
|
|
if (num2 > 20.0)
|
|
num2 = 20.0;
|
|
if ((double) num1 == 1.0 && num2 < 10.0)
|
|
num2 = 10.0;
|
|
}
|
|
else
|
|
num2 -= (double) WorldGen.genRand.Next(4);
|
|
if ((double) vector2_1.Y > Main.rockLayer && (double) num1 > 0.0)
|
|
num1 = 0.0f;
|
|
--num1;
|
|
int num3 = (int) ((double) vector2_1.X - num2 * 0.5);
|
|
int num4 = (int) ((double) vector2_1.X + num2 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.Y - num2 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y + num2 * 0.5);
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesX - 1)
|
|
num4 = Main.maxTilesX - 1;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesY)
|
|
num6 = Main.maxTilesY;
|
|
for (int index1 = num3; index1 < num4; ++index1)
|
|
{
|
|
for (int index2 = num5; index2 < num6; ++index2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < num2 * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[index1, index2].type != (ushort) 31 && Main.tile[index1, index2].type != (ushort) 22)
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 10) * 0.1f;
|
|
if ((double) vector2_1.Y < (double) (j - 20))
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(20) * 0.01f;
|
|
if ((double) vector2_1.Y > (double) (j + 20))
|
|
vector2_2.Y -= (float) WorldGen.genRand.Next(20) * 0.01f;
|
|
if ((double) vector2_2.Y < -0.5)
|
|
vector2_2.Y = -0.5f;
|
|
if ((double) vector2_2.Y > 0.5)
|
|
vector2_2.Y = 0.5f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.01f;
|
|
switch (direction)
|
|
{
|
|
case -1:
|
|
if ((double) vector2_2.X > -0.5)
|
|
vector2_2.X = -0.5f;
|
|
if ((double) vector2_2.X < -2.0)
|
|
{
|
|
vector2_2.X = -2f;
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
if ((double) vector2_2.X < 0.5)
|
|
vector2_2.X = 0.5f;
|
|
if ((double) vector2_2.X > 2.0)
|
|
{
|
|
vector2_2.X = 2f;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
int num7 = (int) ((double) vector2_1.X - num2 * 1.1);
|
|
int num8 = (int) ((double) vector2_1.X + num2 * 1.1);
|
|
int num9 = (int) ((double) vector2_1.Y - num2 * 1.1);
|
|
int num10 = (int) ((double) vector2_1.Y + num2 * 1.1);
|
|
if (num7 < 1)
|
|
num7 = 1;
|
|
if (num8 > Main.maxTilesX - 1)
|
|
num8 = Main.maxTilesX - 1;
|
|
if (num9 < 0)
|
|
num9 = 0;
|
|
if (num10 > Main.maxTilesY)
|
|
num10 = Main.maxTilesY;
|
|
for (int index3 = num7; index3 < num8; ++index3)
|
|
{
|
|
for (int index4 = num9; index4 < num10; ++index4)
|
|
{
|
|
if ((double) Math.Abs((float) index3 - vector2_1.X) + (double) Math.Abs((float) index4 - vector2_1.Y) < num2 * 1.1 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[index3, index4].wall != (ushort) 3)
|
|
{
|
|
if (Main.tile[index3, index4].type != (ushort) 25 && index4 > j + WorldGen.genRand.Next(3, 20))
|
|
Main.tile[index3, index4].active(true);
|
|
Main.tile[index3, index4].active(true);
|
|
if (Main.tile[index3, index4].type != (ushort) 31 && Main.tile[index3, index4].type != (ushort) 22)
|
|
Main.tile[index3, index4].type = (ushort) 25;
|
|
if (Main.tile[index3, index4].wall == (ushort) 2)
|
|
Main.tile[index3, index4].wall = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
for (int i1 = num7; i1 < num8; ++i1)
|
|
{
|
|
for (int j1 = num9; j1 < num10; ++j1)
|
|
{
|
|
if ((double) Math.Abs((float) i1 - vector2_1.X) + (double) Math.Abs((float) j1 - vector2_1.Y) < num2 * 1.1 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[i1, j1].wall != (ushort) 3)
|
|
{
|
|
if (Main.tile[i1, j1].type != (ushort) 31 && Main.tile[i1, j1].type != (ushort) 22)
|
|
Main.tile[i1, j1].type = (ushort) 25;
|
|
Main.tile[i1, j1].active(true);
|
|
WorldGen.PlaceWall(i1, j1, 3, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(3) != 0)
|
|
return;
|
|
int x = (int) vector2_1.X;
|
|
int y = (int) vector2_1.Y;
|
|
while (!Main.tile[x, y].active())
|
|
++y;
|
|
WorldGen.TileRunner(x, y, (double) WorldGen.genRand.Next(2, 6), WorldGen.genRand.Next(3, 7), 22);
|
|
}
|
|
|
|
public static void CrimStart(int i, int j)
|
|
{
|
|
int crimDir = 1;
|
|
int i1 = i;
|
|
int j1 = j;
|
|
if ((double) j1 > Main.worldSurface)
|
|
j1 = (int) Main.worldSurface;
|
|
while (!WorldGen.SolidTile(i1, j1))
|
|
++j1;
|
|
int num1 = i1;
|
|
int num2 = j1;
|
|
Vector2 position = new Vector2((float) i1, (float) j1);
|
|
Vector2 vector2 = new Vector2((float) WorldGen.genRand.Next(-20, 21) * 0.1f, (float) WorldGen.genRand.Next(20, 201) * 0.01f);
|
|
if ((double) vector2.X < 0.0)
|
|
crimDir = -1;
|
|
float num3 = (float) WorldGen.genRand.Next(15, 26);
|
|
bool flag1 = true;
|
|
int num4 = 0;
|
|
while (flag1)
|
|
{
|
|
num3 += (float) WorldGen.genRand.Next(-50, 51) * 0.01f;
|
|
if ((double) num3 < 15.0)
|
|
num3 = 15f;
|
|
if ((double) num3 > 25.0)
|
|
num3 = 25f;
|
|
for (int index1 = (int) ((double) position.X - (double) num3 / 2.0); (double) index1 < (double) position.X + (double) num3 / 2.0; ++index1)
|
|
{
|
|
for (int index2 = (int) ((double) position.Y - (double) num3 / 2.0); (double) index2 < (double) position.Y + (double) num3 / 2.0; ++index2)
|
|
{
|
|
if (index2 > num2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - position.X) + (double) Math.Abs((float) index2 - position.Y) < (double) num3 * 0.3)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
}
|
|
else if ((double) Math.Abs((float) index1 - position.X) + (double) Math.Abs((float) index2 - position.Y) < (double) num3 * 0.8 && Main.tile[index1, index2].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) 203;
|
|
if ((double) Math.Abs((float) index1 - position.X) + (double) Math.Abs((float) index2 - position.Y) < (double) num3 * 0.6)
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
}
|
|
}
|
|
else if ((double) Math.Abs((float) index1 - position.X) + (double) Math.Abs((float) index2 - position.Y) < (double) num3 * 0.3 && Main.tile[index1, index2].active())
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
if ((double) position.X > (double) (num1 + 50))
|
|
num4 = -100;
|
|
if ((double) position.X < (double) (num1 - 50))
|
|
num4 = 100;
|
|
if (num4 < 0)
|
|
vector2.X -= (float) WorldGen.genRand.Next(20, 51) * 0.01f;
|
|
else if (num4 > 0)
|
|
vector2.X += (float) WorldGen.genRand.Next(20, 51) * 0.01f;
|
|
else
|
|
vector2.X += (float) WorldGen.genRand.Next(-50, 51) * 0.01f;
|
|
vector2.Y += (float) WorldGen.genRand.Next(-50, 51) * 0.01f;
|
|
if ((double) vector2.Y < 0.25)
|
|
vector2.Y = 0.25f;
|
|
if ((double) vector2.Y > 2.0)
|
|
vector2.Y = 2f;
|
|
if ((double) vector2.X < -2.0)
|
|
vector2.X = -2f;
|
|
if ((double) vector2.X > 2.0)
|
|
vector2.X = 2f;
|
|
position += vector2;
|
|
if ((double) position.Y > Main.worldSurface + 100.0)
|
|
flag1 = false;
|
|
}
|
|
float num5 = (float) WorldGen.genRand.Next(40, 55);
|
|
for (int index3 = 0; index3 < 50; ++index3)
|
|
{
|
|
int num6 = (int) position.X + WorldGen.genRand.Next(-20, 21);
|
|
int num7 = (int) position.Y + WorldGen.genRand.Next(-20, 21);
|
|
for (int index4 = (int) ((double) num6 - (double) num5 / 2.0); (double) index4 < (double) num6 + (double) num5 / 2.0; ++index4)
|
|
{
|
|
for (int index5 = (int) ((double) num7 - (double) num5 / 2.0); (double) index5 < (double) num7 + (double) num5 / 2.0; ++index5)
|
|
{
|
|
double num8 = (double) Math.Abs(index4 - num6);
|
|
float num9 = (float) Math.Abs(index5 - num7);
|
|
float num10 = (float) (1.0 + (double) WorldGen.genRand.Next(-20, 21) * 0.00999999977648258);
|
|
float num11 = (float) (1.0 + (double) WorldGen.genRand.Next(-20, 21) * 0.00999999977648258);
|
|
double num12 = (double) num10;
|
|
double num13 = num8 * num12;
|
|
float num14 = num9 * num11;
|
|
double num15 = Math.Sqrt(num13 * num13 + (double) num14 * (double) num14);
|
|
if (num15 < (double) num5 * 0.25)
|
|
{
|
|
Main.tile[index4, index5].active(false);
|
|
Main.tile[index4, index5].wall = (ushort) 83;
|
|
}
|
|
else if (num15 < (double) num5 * 0.4 && Main.tile[index4, index5].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index4, index5].active(true);
|
|
Main.tile[index4, index5].type = (ushort) 203;
|
|
if (num15 < (double) num5 * 0.35)
|
|
Main.tile[index4, index5].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int length = WorldGen.genRand.Next(5, 9);
|
|
Vector2[] vector2Array = new Vector2[length];
|
|
for (int index6 = 0; index6 < length; ++index6)
|
|
{
|
|
int x = (int) position.X;
|
|
int y = (int) position.Y;
|
|
int num16 = 0;
|
|
bool flag2 = true;
|
|
Vector2 velocity = new Vector2((float) WorldGen.genRand.Next(-20, 21) * 0.15f, (float) WorldGen.genRand.Next(0, 21) * 0.15f);
|
|
while (flag2)
|
|
{
|
|
velocity = new Vector2((float) WorldGen.genRand.Next(-20, 21) * 0.15f, (float) WorldGen.genRand.Next(0, 21) * 0.15f);
|
|
while ((double) Math.Abs(velocity.X) + (double) Math.Abs(velocity.Y) < 1.5)
|
|
velocity = new Vector2((float) WorldGen.genRand.Next(-20, 21) * 0.15f, (float) WorldGen.genRand.Next(0, 21) * 0.15f);
|
|
flag2 = false;
|
|
for (int index7 = 0; index7 < index6; ++index7)
|
|
{
|
|
if ((double) vector2.X > (double) vector2Array[index7].X - 0.75 && (double) vector2.X < (double) vector2Array[index7].X + 0.75 && (double) vector2.Y > (double) vector2Array[index7].Y - 0.75 && (double) vector2.Y < (double) vector2Array[index7].Y + 0.75)
|
|
{
|
|
flag2 = true;
|
|
++num16;
|
|
break;
|
|
}
|
|
}
|
|
if (num16 > 10000)
|
|
break;
|
|
}
|
|
vector2Array[index6] = velocity;
|
|
WorldGen.CrimVein(new Vector2((float) x, (float) y), velocity);
|
|
}
|
|
int num17 = Main.maxTilesX;
|
|
int num18 = 0;
|
|
position.X = (float) num1;
|
|
position.Y = (float) num2;
|
|
float num19 = (float) WorldGen.genRand.Next(25, 35);
|
|
float num20 = (float) WorldGen.genRand.Next(0, 6);
|
|
for (int index8 = 0; index8 < 50; ++index8)
|
|
{
|
|
if ((double) num20 > 0.0)
|
|
{
|
|
float num21 = (float) WorldGen.genRand.Next(10, 30) * 0.01f;
|
|
num20 -= num21;
|
|
position.Y -= num21;
|
|
}
|
|
int num22 = (int) position.X + WorldGen.genRand.Next(-2, 3);
|
|
int num23 = (int) position.Y + WorldGen.genRand.Next(-2, 3);
|
|
for (int index9 = (int) ((double) num22 - (double) num19 / 2.0); (double) index9 < (double) num22 + (double) num19 / 2.0; ++index9)
|
|
{
|
|
for (int index10 = (int) ((double) num23 - (double) num19 / 2.0); (double) index10 < (double) num23 + (double) num19 / 2.0; ++index10)
|
|
{
|
|
double num24 = (double) Math.Abs(index9 - num22);
|
|
float num25 = (float) Math.Abs(index10 - num23);
|
|
float num26 = (float) (1.0 + (double) WorldGen.genRand.Next(-20, 21) * 0.00499999988824129);
|
|
float num27 = (float) (1.0 + (double) WorldGen.genRand.Next(-20, 21) * 0.00499999988824129);
|
|
double num28 = (double) num26;
|
|
double num29 = num24 * num28;
|
|
float num30 = num25 * num27;
|
|
double num31 = Math.Sqrt(num29 * num29 + (double) num30 * (double) num30);
|
|
if (num31 < (double) num19 * 0.2 * ((double) WorldGen.genRand.Next(90, 111) * 0.01))
|
|
{
|
|
Main.tile[index9, index10].active(false);
|
|
Main.tile[index9, index10].wall = (ushort) 83;
|
|
}
|
|
else if (num31 < (double) num19 * 0.45)
|
|
{
|
|
if (index9 < num17)
|
|
num17 = index9;
|
|
if (index9 > num18)
|
|
num18 = index9;
|
|
if (Main.tile[index9, index10].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index9, index10].active(true);
|
|
Main.tile[index9, index10].type = (ushort) 203;
|
|
if (num31 < (double) num19 * 0.35)
|
|
Main.tile[index9, index10].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index11 = num17; index11 <= num18; ++index11)
|
|
{
|
|
int index12 = num2;
|
|
while (Main.tile[index11, index12].type == (ushort) 203 && Main.tile[index11, index12].active() || Main.tile[index11, index12].wall == (ushort) 83)
|
|
++index12;
|
|
for (int index13 = WorldGen.genRand.Next(15, 20); !Main.tile[index11, index12].active() && index13 > 0 && Main.tile[index11, index12].wall != (ushort) 83; ++index12)
|
|
{
|
|
--index13;
|
|
Main.tile[index11, index12].type = (ushort) 203;
|
|
Main.tile[index11, index12].active(true);
|
|
}
|
|
}
|
|
WorldGen.CrimEnt(position, crimDir);
|
|
}
|
|
|
|
public static void CrimPlaceHearts()
|
|
{
|
|
for (int index1 = 0; index1 < WorldGen.heartCount; ++index1)
|
|
{
|
|
int num1 = WorldGen.genRand.Next(16, 21);
|
|
int x = (int) WorldGen.heartPos[index1].X;
|
|
int y = (int) WorldGen.heartPos[index1].Y;
|
|
for (int index2 = x - num1 / 2; index2 < x + num1 / 2; ++index2)
|
|
{
|
|
for (int index3 = y - num1 / 2; index3 < y + num1 / 2; ++index3)
|
|
{
|
|
double num2 = (double) Math.Abs(index2 - x);
|
|
float num3 = (float) Math.Abs(index3 - y);
|
|
if (Math.Sqrt(num2 * num2 + (double) num3 * (double) num3) < (double) num1 * 0.4)
|
|
{
|
|
Main.tile[index2, index3].active(true);
|
|
Main.tile[index2, index3].type = (ushort) 203;
|
|
Main.tile[index2, index3].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index4 = 0; index4 < WorldGen.heartCount; ++index4)
|
|
{
|
|
int num4 = WorldGen.genRand.Next(10, 14);
|
|
int x = (int) WorldGen.heartPos[index4].X;
|
|
int y = (int) WorldGen.heartPos[index4].Y;
|
|
for (int index5 = x - num4 / 2; index5 < x + num4 / 2; ++index5)
|
|
{
|
|
for (int index6 = y - num4 / 2; index6 < y + num4 / 2; ++index6)
|
|
{
|
|
double num5 = (double) Math.Abs(index5 - x);
|
|
float num6 = (float) Math.Abs(index6 - y);
|
|
if (Math.Sqrt(num5 * num5 + (double) num6 * (double) num6) < (double) num4 * 0.3)
|
|
{
|
|
Main.tile[index5, index6].active(false);
|
|
Main.tile[index5, index6].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (int index = 0; index < WorldGen.heartCount; ++index)
|
|
WorldGen.AddShadowOrb((int) WorldGen.heartPos[index].X, (int) WorldGen.heartPos[index].Y);
|
|
}
|
|
|
|
public static void CrimEnt(Vector2 position, int crimDir)
|
|
{
|
|
float num1 = 0.0f;
|
|
float num2 = (float) WorldGen.genRand.Next(6, 11);
|
|
bool flag = true;
|
|
Vector2 vector2 = new Vector2(2f, (float) WorldGen.genRand.Next(-20, 0) * 0.01f);
|
|
vector2.X *= (float) -crimDir;
|
|
while (flag)
|
|
{
|
|
++num1;
|
|
if ((double) num1 >= 20.0)
|
|
flag = false;
|
|
num2 += (float) WorldGen.genRand.Next(-10, 11) * 0.02f;
|
|
if ((double) num2 < 6.0)
|
|
num2 = 6f;
|
|
if ((double) num2 > 10.0)
|
|
num2 = 10f;
|
|
for (int index1 = (int) ((double) position.X - (double) num2 / 2.0); (double) index1 < (double) position.X + (double) num2 / 2.0; ++index1)
|
|
{
|
|
for (int index2 = (int) ((double) position.Y - (double) num2 / 2.0); (double) index2 < (double) position.Y + (double) num2 / 2.0; ++index2)
|
|
{
|
|
double num3 = (double) Math.Abs((float) index1 - position.X);
|
|
float num4 = Math.Abs((float) index2 - position.Y);
|
|
if (Math.Sqrt(num3 * num3 + (double) num4 * (double) num4) < (double) num2 * 0.5 && Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 203)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
flag = true;
|
|
num1 = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
position += vector2;
|
|
}
|
|
}
|
|
|
|
public static void CrimVein(Vector2 position, Vector2 velocity)
|
|
{
|
|
float num1 = (float) WorldGen.genRand.Next(15, 26);
|
|
bool flag = true;
|
|
Vector2 vector2_1 = velocity;
|
|
Vector2 vector2_2 = position;
|
|
int num2 = WorldGen.genRand.Next(100, 150);
|
|
if ((double) velocity.Y < 0.0)
|
|
num2 -= 25;
|
|
while (flag)
|
|
{
|
|
num1 += (float) WorldGen.genRand.Next(-50, 51) * 0.02f;
|
|
if ((double) num1 < 15.0)
|
|
num1 = 15f;
|
|
if ((double) num1 > 25.0)
|
|
num1 = 25f;
|
|
for (int index1 = (int) ((double) position.X - (double) num1 / 2.0); (double) index1 < (double) position.X + (double) num1 / 2.0; ++index1)
|
|
{
|
|
for (int index2 = (int) ((double) position.Y - (double) num1 / 2.0); (double) index2 < (double) position.Y + (double) num1 / 2.0; ++index2)
|
|
{
|
|
double num3 = (double) Math.Abs((float) index1 - position.X);
|
|
float num4 = Math.Abs((float) index2 - position.Y);
|
|
double num5 = Math.Sqrt(num3 * num3 + (double) num4 * (double) num4);
|
|
if (num5 < (double) num1 * 0.2)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
}
|
|
else if (num5 < (double) num1 * 0.5 && Main.tile[index1, index2].wall != (ushort) 83)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) 203;
|
|
if (num5 < (double) num1 * 0.4)
|
|
Main.tile[index1, index2].wall = (ushort) 83;
|
|
}
|
|
}
|
|
}
|
|
velocity.X += (float) WorldGen.genRand.Next(-50, 51) * 0.05f;
|
|
velocity.Y += (float) WorldGen.genRand.Next(-50, 51) * 0.05f;
|
|
if ((double) velocity.Y < (double) vector2_1.Y - 0.75)
|
|
velocity.Y = vector2_1.Y - 0.75f;
|
|
if ((double) velocity.Y > (double) vector2_1.Y + 0.75)
|
|
velocity.Y = vector2_1.Y + 0.75f;
|
|
if ((double) velocity.X < (double) vector2_1.X - 0.75)
|
|
velocity.X = vector2_1.X - 0.75f;
|
|
if ((double) velocity.X > (double) vector2_1.X + 0.75)
|
|
velocity.X = vector2_1.X + 0.75f;
|
|
position += velocity;
|
|
if ((double) Math.Abs(position.X - vector2_2.X) + (double) Math.Abs(position.Y - vector2_2.Y) > (double) num2)
|
|
flag = false;
|
|
}
|
|
WorldGen.heartPos[WorldGen.heartCount] = position;
|
|
++WorldGen.heartCount;
|
|
}
|
|
|
|
public static void ChasmRunner(int i, int j, int steps, bool makeOrb = false)
|
|
{
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
if (!makeOrb)
|
|
flag2 = true;
|
|
float num1 = (float) steps;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) ((double) WorldGen.genRand.Next(11) * 0.200000002980232 + 0.5);
|
|
int num2 = 5;
|
|
double num3 = (double) (WorldGen.genRand.Next(5) + 7);
|
|
while (num3 > 0.0)
|
|
{
|
|
if ((double) num1 > 0.0)
|
|
{
|
|
num3 = num3 + (double) WorldGen.genRand.Next(3) - (double) WorldGen.genRand.Next(3);
|
|
if (num3 < 7.0)
|
|
num3 = 7.0;
|
|
if (num3 > 20.0)
|
|
num3 = 20.0;
|
|
if ((double) num1 == 1.0 && num3 < 10.0)
|
|
num3 = 10.0;
|
|
}
|
|
else if ((double) vector2_1.Y > Main.worldSurface + 45.0)
|
|
num3 -= (double) WorldGen.genRand.Next(4);
|
|
if ((double) vector2_1.Y > Main.rockLayer && (double) num1 > 0.0)
|
|
num1 = 0.0f;
|
|
--num1;
|
|
if (!flag1 && (double) vector2_1.Y > Main.worldSurface + 20.0)
|
|
{
|
|
flag1 = true;
|
|
WorldGen.ChasmRunnerSideways((int) vector2_1.X, (int) vector2_1.Y, -1, WorldGen.genRand.Next(20, 40));
|
|
WorldGen.ChasmRunnerSideways((int) vector2_1.X, (int) vector2_1.Y, 1, WorldGen.genRand.Next(20, 40));
|
|
}
|
|
if ((double) num1 > (double) num2)
|
|
{
|
|
int num4 = (int) ((double) vector2_1.X - num3 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.X + num3 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y - num3 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y + num3 * 0.5);
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 > Main.maxTilesX - 1)
|
|
num5 = Main.maxTilesX - 1;
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesY)
|
|
num7 = Main.maxTilesY;
|
|
for (int index1 = num4; index1 < num5; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num7; ++index2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < num3 * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[index1, index2].type != (ushort) 31 && Main.tile[index1, index2].type != (ushort) 22)
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
}
|
|
if ((double) num1 <= 2.0 && (double) vector2_1.Y < Main.worldSurface + 45.0)
|
|
num1 = 2f;
|
|
if ((double) num1 <= 0.0)
|
|
{
|
|
if (!flag2)
|
|
{
|
|
flag2 = true;
|
|
WorldGen.AddShadowOrb((int) vector2_1.X, (int) vector2_1.Y);
|
|
}
|
|
else if (!flag3)
|
|
{
|
|
flag3 = false;
|
|
bool flag4 = false;
|
|
int num8 = 0;
|
|
while (!flag4)
|
|
{
|
|
int x = WorldGen.genRand.Next((int) vector2_1.X - 25, (int) vector2_1.X + 25);
|
|
int y = WorldGen.genRand.Next((int) vector2_1.Y - 50, (int) vector2_1.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 ((double) y > Main.worldSurface)
|
|
{
|
|
if (!WorldGen.IsTileNearby(x, y, 26, 3))
|
|
WorldGen.Place3x2(x, y, (ushort) 26);
|
|
if (Main.tile[x, y].type == (ushort) 26)
|
|
{
|
|
flag4 = true;
|
|
}
|
|
else
|
|
{
|
|
++num8;
|
|
if (num8 >= 10000)
|
|
flag4 = true;
|
|
}
|
|
}
|
|
else
|
|
flag4 = true;
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.01f;
|
|
if ((double) vector2_2.X > 0.3)
|
|
vector2_2.X = 0.3f;
|
|
if ((double) vector2_2.X < -0.3)
|
|
vector2_2.X = -0.3f;
|
|
int num9 = (int) ((double) vector2_1.X - num3 * 1.1);
|
|
int num10 = (int) ((double) vector2_1.X + num3 * 1.1);
|
|
int num11 = (int) ((double) vector2_1.Y - num3 * 1.1);
|
|
int num12 = (int) ((double) vector2_1.Y + num3 * 1.1);
|
|
if (num9 < 1)
|
|
num9 = 1;
|
|
if (num10 > Main.maxTilesX - 1)
|
|
num10 = Main.maxTilesX - 1;
|
|
if (num11 < 0)
|
|
num11 = 0;
|
|
if (num12 > Main.maxTilesY)
|
|
num12 = Main.maxTilesY;
|
|
for (int index3 = num9; index3 < num10; ++index3)
|
|
{
|
|
for (int index4 = num11; index4 < num12; ++index4)
|
|
{
|
|
if ((double) Math.Abs((float) index3 - vector2_1.X) + (double) Math.Abs((float) index4 - vector2_1.Y) < num3 * 1.1 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015))
|
|
{
|
|
if (Main.tile[index3, index4].type != (ushort) 25 && index4 > j + WorldGen.genRand.Next(3, 20))
|
|
Main.tile[index3, index4].active(true);
|
|
if (steps <= num2)
|
|
Main.tile[index3, index4].active(true);
|
|
if (Main.tile[index3, index4].type != (ushort) 31)
|
|
Main.tile[index3, index4].type = (ushort) 25;
|
|
}
|
|
}
|
|
}
|
|
for (int index5 = num9; index5 < num10; ++index5)
|
|
{
|
|
for (int index6 = num11; index6 < num12; ++index6)
|
|
{
|
|
if ((double) Math.Abs((float) index5 - vector2_1.X) + (double) Math.Abs((float) index6 - vector2_1.Y) < num3 * 1.1 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015))
|
|
{
|
|
if (Main.tile[index5, index6].type != (ushort) 31)
|
|
Main.tile[index5, index6].type = (ushort) 25;
|
|
if (steps <= num2)
|
|
Main.tile[index5, index6].active(true);
|
|
if (index6 > j + WorldGen.genRand.Next(3, 20))
|
|
Main.tile[index5, index6].wall = (ushort) 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void GERunner(int i, int j, float speedX = 0.0f, float speedY = 0.0f, bool good = true)
|
|
{
|
|
int num1 = 0;
|
|
for (int index1 = 20; index1 < Main.maxTilesX - 20; ++index1)
|
|
{
|
|
for (int index2 = 20; index2 < Main.maxTilesY - 20; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 225)
|
|
++num1;
|
|
}
|
|
}
|
|
bool flag1 = false;
|
|
if (num1 > 200000)
|
|
flag1 = true;
|
|
int num2 = (int) ((double) WorldGen.genRand.Next(200, 250) * (double) (Main.maxTilesX / 4200));
|
|
double num3 = (double) num2;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
if ((double) speedX != 0.0 || (double) speedY != 0.0)
|
|
{
|
|
vector2_2.X = speedX;
|
|
vector2_2.Y = speedY;
|
|
}
|
|
bool flag2 = true;
|
|
while (flag2)
|
|
{
|
|
int num4 = (int) ((double) vector2_1.X - num3 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.X + num3 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y - num3 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y + num3 * 0.5);
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 > Main.maxTilesX)
|
|
num5 = Main.maxTilesX;
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesY - 5)
|
|
num7 = Main.maxTilesY - 5;
|
|
for (int i1 = num4; i1 < num5; ++i1)
|
|
{
|
|
for (int j1 = num6; j1 < num7; ++j1)
|
|
{
|
|
if ((double) Math.Abs((float) i1 - vector2_1.X) + (double) Math.Abs((float) j1 - vector2_1.Y) < (double) num2 * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015))
|
|
{
|
|
if (good)
|
|
{
|
|
if (Main.tile[i1, j1].wall == (ushort) 63 || Main.tile[i1, j1].wall == (ushort) 65 || Main.tile[i1, j1].wall == (ushort) 66 || Main.tile[i1, j1].wall == (ushort) 68 || Main.tile[i1, j1].wall == (ushort) 69 || Main.tile[i1, j1].wall == (ushort) 81)
|
|
Main.tile[i1, j1].wall = (ushort) 70;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 216)
|
|
Main.tile[i1, j1].wall = (ushort) 219;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 187)
|
|
Main.tile[i1, j1].wall = (ushort) 222;
|
|
if (Main.tile[i1, j1].wall == (ushort) 3 || Main.tile[i1, j1].wall == (ushort) 83)
|
|
Main.tile[i1, j1].wall = (ushort) 28;
|
|
if (flag1 && Main.tile[i1, j1].type == (ushort) 225)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 117;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (flag1 && Main.tile[i1, j1].type == (ushort) 230)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 402;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 2)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 109;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 1)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 117;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 53 || Main.tile[i1, j1].type == (ushort) 123)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 116;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 23 || Main.tile[i1, j1].type == (ushort) 199)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 109;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 25 || Main.tile[i1, j1].type == (ushort) 203)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 117;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 112 || Main.tile[i1, j1].type == (ushort) 234)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 116;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 161 || Main.tile[i1, j1].type == (ushort) 163 || Main.tile[i1, j1].type == (ushort) 200)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 164;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 396)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 403;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 397)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 402;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
else if (WorldGen.crimson)
|
|
{
|
|
if (Main.tile[i1, j1].wall == (ushort) 63 || Main.tile[i1, j1].wall == (ushort) 65 || Main.tile[i1, j1].wall == (ushort) 66 || Main.tile[i1, j1].wall == (ushort) 68)
|
|
Main.tile[i1, j1].wall = (ushort) 81;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 216)
|
|
Main.tile[i1, j1].wall = (ushort) 218;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 187)
|
|
Main.tile[i1, j1].wall = (ushort) 221;
|
|
if (flag1 && Main.tile[i1, j1].type == (ushort) 225)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 203;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (flag1 && Main.tile[i1, j1].type == (ushort) 230)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 399;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 2)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 199;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 1)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 203;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 53 || Main.tile[i1, j1].type == (ushort) 123)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 234;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 109)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 199;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 117)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 203;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 116)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 234;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 161 || Main.tile[i1, j1].type == (ushort) 164)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 200;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 396)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 401;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 397)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 399;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Main.tile[i1, j1].wall == (ushort) 63 || Main.tile[i1, j1].wall == (ushort) 65 || Main.tile[i1, j1].wall == (ushort) 66 || Main.tile[i1, j1].wall == (ushort) 68)
|
|
Main.tile[i1, j1].wall = (ushort) 69;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 216)
|
|
Main.tile[i1, j1].wall = (ushort) 217;
|
|
else if (Main.tile[i1, j1].wall == (ushort) 187)
|
|
Main.tile[i1, j1].wall = (ushort) 220;
|
|
if (flag1 && Main.tile[i1, j1].type == (ushort) 225)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 25;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (flag1 && Main.tile[i1, j1].type == (ushort) 230)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 398;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 2)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 23;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 1)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 25;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 53 || Main.tile[i1, j1].type == (ushort) 123)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 112;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 109)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 23;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 117)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 25;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 116)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 112;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 161 || Main.tile[i1, j1].type == (ushort) 164)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 163;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 396)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 400;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
else if (Main.tile[i1, j1].type == (ushort) 397)
|
|
{
|
|
Main.tile[i1, j1].type = (ushort) 398;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > (double) speedX + 1.0)
|
|
vector2_2.X = speedX + 1f;
|
|
if ((double) vector2_2.X < (double) speedX - 1.0)
|
|
vector2_2.X = speedX - 1f;
|
|
if ((double) vector2_1.X < (double) -num2 || (double) vector2_1.Y < (double) -num2 || (double) vector2_1.X > (double) (Main.maxTilesX + num2) || (double) vector2_1.Y > (double) (Main.maxTilesY + num2))
|
|
flag2 = false;
|
|
}
|
|
}
|
|
|
|
private static bool badOceanCaveTiles(int x, int y) => Main.tile[x, y].wall == (ushort) 83 || Main.tile[x, y].wall == (ushort) 3 || Main.wallDungeon[(int) Main.tile[x, y].wall] || Main.tile[x, y].type == (ushort) 203 || Main.tile[x, y].type == (ushort) 25 || Main.tileDungeon[(int) Main.tile[x, y].type] || Main.tile[x, y].type == (ushort) 26 || Main.tile[x, y].type == (ushort) 31;
|
|
|
|
public static void oceanCave(int i, int j)
|
|
{
|
|
if (WorldGen.numOceanCaveTreasure >= WorldGen.maxOceanCaveTreasure)
|
|
WorldGen.numOceanCaveTreasure = 0;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = i >= Main.maxTilesX / 2 ? (float) (-0.349999994039536 - (double) WorldGen.genRand.NextFloat() * 0.5) : (float) (0.25 + (double) WorldGen.genRand.NextFloat() * 0.25);
|
|
vector2_2.Y = (float) (0.400000005960464 + (double) WorldGen.genRand.NextFloat() * 0.25);
|
|
ushort num1 = 264;
|
|
ushort num2 = 53;
|
|
ushort num3 = 397;
|
|
double num4 = (double) WorldGen.genRand.Next(17, 25);
|
|
double num5 = (double) WorldGen.genRand.Next(600, 800);
|
|
double num6 = 4.0;
|
|
bool flag1 = true;
|
|
while (num4 > num6 && num5 > 0.0)
|
|
{
|
|
bool flag2 = true;
|
|
bool flag3 = true;
|
|
bool flag4 = true;
|
|
if ((double) vector2_1.X > (double) (WorldGen.beachDistance - 50) && (double) vector2_1.X < (double) (Main.maxTilesX - WorldGen.beachDistance + 50))
|
|
{
|
|
num4 *= 0.959999978542328;
|
|
num5 *= 0.959999978542328;
|
|
}
|
|
if (num4 < num6 + 2.0 || num5 < 20.0)
|
|
flag4 = false;
|
|
if (flag1)
|
|
{
|
|
num4 -= 0.01 + (double) WorldGen.genRand.NextFloat() * 0.01;
|
|
num5 -= 0.5;
|
|
}
|
|
else
|
|
{
|
|
num4 -= 0.02 + (double) WorldGen.genRand.NextFloat() * 0.02;
|
|
--num5;
|
|
}
|
|
if (flag4)
|
|
{
|
|
WorldGen.oceanCaveTreasure[WorldGen.numOceanCaveTreasure].X = (int) vector2_1.X;
|
|
WorldGen.oceanCaveTreasure[WorldGen.numOceanCaveTreasure].Y = (int) vector2_1.Y;
|
|
}
|
|
int num7 = (int) ((double) vector2_1.X - num4 * 3.0);
|
|
int num8 = (int) ((double) vector2_1.X + num4 * 3.0);
|
|
int num9 = (int) ((double) vector2_1.Y - num4 * 3.0);
|
|
int num10 = (int) ((double) vector2_1.Y + num4 * 3.0);
|
|
if (num7 < 1)
|
|
num7 = 1;
|
|
if (num8 > Main.maxTilesX - 1)
|
|
num8 = Main.maxTilesX - 1;
|
|
if (num9 < 1)
|
|
num9 = 1;
|
|
if (num10 > Main.maxTilesY - 1)
|
|
num10 = Main.maxTilesY - 1;
|
|
for (int x1 = num7; x1 < num8; ++x1)
|
|
{
|
|
for (int y1 = num9; y1 < num10; ++y1)
|
|
{
|
|
if (!WorldGen.badOceanCaveTiles(x1, y1))
|
|
{
|
|
float num11 = new Vector2(Math.Abs((float) x1 - vector2_1.X), Math.Abs((float) y1 - vector2_1.Y)).Length();
|
|
if (flag4 && (double) num11 < num4 * 0.5 + 1.0)
|
|
{
|
|
Main.tile[x1, y1].type = num1;
|
|
Main.tile[x1, y1].active(false);
|
|
}
|
|
else if ((double) num11 < num4 * 1.5 + 1.0 && (int) Main.tile[x1, y1].type != (int) num1)
|
|
{
|
|
if ((double) y1 < (double) vector2_1.Y)
|
|
{
|
|
if ((double) vector2_2.X < 0.0 && (double) x1 < (double) vector2_1.X || (double) vector2_2.X > 0.0 && (double) x1 > (double) vector2_1.X)
|
|
{
|
|
if ((double) num11 < num4 * 1.1 + 1.0)
|
|
{
|
|
Main.tile[x1, y1].type = num3;
|
|
if (Main.tile[x1, y1].liquid == byte.MaxValue)
|
|
Main.tile[x1, y1].wall = (ushort) 0;
|
|
}
|
|
else if ((int) Main.tile[x1, y1].type != (int) num3)
|
|
Main.tile[x1, y1].type = num2;
|
|
}
|
|
}
|
|
else if ((double) vector2_2.X < 0.0 && x1 < i || (double) vector2_2.X > 0.0 && x1 > i)
|
|
{
|
|
if (Main.tile[x1, y1].liquid == byte.MaxValue)
|
|
Main.tile[x1, y1].wall = (ushort) 0;
|
|
Main.tile[x1, y1].type = num2;
|
|
Main.tile[x1, y1].active(true);
|
|
if (x1 == (int) vector2_1.X & flag2)
|
|
{
|
|
flag2 = false;
|
|
int num12 = 50 + WorldGen.genRand.Next(3);
|
|
int num13 = 43 + WorldGen.genRand.Next(3);
|
|
int num14 = 20 + WorldGen.genRand.Next(3);
|
|
int num15 = x1;
|
|
int num16 = x1 + num14;
|
|
if ((double) vector2_2.X < 0.0)
|
|
{
|
|
num15 = x1 - num14;
|
|
num16 = x1;
|
|
}
|
|
if (num5 < 100.0)
|
|
{
|
|
num12 = (int) ((double) num12 * (num5 / 100.0));
|
|
num13 = (int) ((double) num13 * (num5 / 100.0));
|
|
num14 = (int) ((double) num14 * (num5 / 100.0));
|
|
}
|
|
if (num4 < num6 + 5.0)
|
|
{
|
|
double num17 = (num4 - num6) / 5.0;
|
|
num12 = (int) ((double) num12 * num17);
|
|
num13 = (int) ((double) num13 * num17);
|
|
int num18 = (int) ((double) num14 * num17);
|
|
}
|
|
for (int index1 = num15; index1 <= num16; ++index1)
|
|
{
|
|
for (int index2 = y1; index2 < y1 + num12 && !WorldGen.badOceanCaveTiles(index1, index2); ++index2)
|
|
{
|
|
if (index2 > y1 + num13)
|
|
{
|
|
if (!WorldGen.SolidTile(index1, index2) || (int) Main.tile[index1, index2].type == (int) num2)
|
|
Main.tile[index1, index2].type = num3;
|
|
else
|
|
break;
|
|
}
|
|
else
|
|
Main.tile[index1, index2].type = num2;
|
|
Main.tile[index1, index2].active(true);
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
Main.tile[index1 - 1, index2].type = num2;
|
|
Main.tile[index1 - 1, index2].active(true);
|
|
}
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
Main.tile[index1 + 1, index2].type = num2;
|
|
Main.tile[index1 + 1, index2].active(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ((double) num11 < num4 * 1.3 + 1.0 && y1 > j - 10)
|
|
Main.tile[x1, y1].liquid = byte.MaxValue;
|
|
if (flag3 && x1 == (int) vector2_1.X && (double) y1 > (double) vector2_1.Y)
|
|
{
|
|
flag3 = false;
|
|
int num19 = 100;
|
|
int num20 = 2;
|
|
for (int x2 = x1 - num20; x2 <= x1 + num20; ++x2)
|
|
{
|
|
for (int y2 = y1; y2 < y1 + num19; ++y2)
|
|
{
|
|
if (!WorldGen.badOceanCaveTiles(x2, y2))
|
|
Main.tile[x2, y2].liquid = byte.MaxValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) ((double) WorldGen.genRand.NextFloat() * 0.100000001490116 - 0.0500000007450581);
|
|
vector2_2.Y += (float) ((double) WorldGen.genRand.NextFloat() * 0.100000001490116 - 0.0500000007450581);
|
|
if (flag1)
|
|
{
|
|
if ((double) vector2_1.Y > (Main.worldSurface * 2.0 + Main.rockLayer) / 3.0 && (double) vector2_1.Y > (double) (j + 30))
|
|
flag1 = false;
|
|
vector2_2.Y = MathHelper.Clamp(vector2_2.Y, 0.35f, 1f);
|
|
}
|
|
else
|
|
{
|
|
if ((double) vector2_1.X < (double) (Main.maxTilesX / 2))
|
|
{
|
|
if ((double) vector2_2.X < 0.5)
|
|
vector2_2.X += 0.02f;
|
|
}
|
|
else if ((double) vector2_2.X > -0.5)
|
|
vector2_2.X -= 0.02f;
|
|
if (!flag4)
|
|
{
|
|
if ((double) vector2_2.Y < 0.0)
|
|
vector2_2.Y *= 0.95f;
|
|
vector2_2.Y += 0.04f;
|
|
}
|
|
else if ((double) vector2_1.Y < (Main.worldSurface * 4.0 + Main.rockLayer) / 5.0)
|
|
{
|
|
if ((double) vector2_2.Y < 0.0)
|
|
vector2_2.Y *= 0.97f;
|
|
vector2_2.Y += 0.02f;
|
|
}
|
|
else if ((double) vector2_2.Y > -0.100000001490116)
|
|
{
|
|
vector2_2.Y *= 0.99f;
|
|
vector2_2.Y -= 0.01f;
|
|
}
|
|
vector2_2.Y = MathHelper.Clamp(vector2_2.Y, -1f, 1f);
|
|
}
|
|
vector2_2.X = (double) vector2_1.X >= (double) (Main.maxTilesX / 2) ? MathHelper.Clamp(vector2_2.X, -1f, -0.1f) : MathHelper.Clamp(vector2_2.X, 0.1f, 1f);
|
|
}
|
|
++WorldGen.numOceanCaveTreasure;
|
|
}
|
|
|
|
public static void TileRunner(
|
|
int i,
|
|
int j,
|
|
double strength,
|
|
int steps,
|
|
int type,
|
|
bool addTile = false,
|
|
float speedX = 0.0f,
|
|
float speedY = 0.0f,
|
|
bool noYChange = false,
|
|
bool overRide = true,
|
|
int ignoreTileType = -1)
|
|
{
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
strength *= 1.0 + (double) WorldGen.genRand.Next(-80, 81) * 0.00999999977648258;
|
|
steps = (int) ((double) steps * (1.0 + (double) WorldGen.genRand.Next(-80, 81) * 0.00999999977648258));
|
|
}
|
|
if (WorldGen.getGoodWorldGen && type != 57)
|
|
{
|
|
strength *= 1.0 + (double) WorldGen.genRand.Next(-80, 81) * 0.0149999996647239;
|
|
steps += WorldGen.genRand.Next(3);
|
|
}
|
|
double num1 = strength;
|
|
float num2 = (float) steps;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
if ((double) speedX != 0.0 || (double) speedY != 0.0)
|
|
{
|
|
vector2_2.X = speedX;
|
|
vector2_2.Y = speedY;
|
|
}
|
|
bool flag1 = type == 368;
|
|
bool flag2 = type == 367;
|
|
bool lava = false;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(4) == 0)
|
|
lava = true;
|
|
while (num1 > 0.0 && (double) num2 > 0.0)
|
|
{
|
|
if (WorldGen.drunkWorldGen && WorldGen.genRand.Next(30) == 0)
|
|
{
|
|
vector2_1.X += (float) WorldGen.genRand.Next(-100, 101) * 0.05f;
|
|
vector2_1.Y += (float) WorldGen.genRand.Next(-100, 101) * 0.05f;
|
|
}
|
|
if ((double) vector2_1.Y < 0.0 && (double) num2 > 0.0 && type == 59)
|
|
num2 = 0.0f;
|
|
num1 = strength * ((double) num2 / (double) steps);
|
|
--num2;
|
|
int num3 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num4 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num3 < 1)
|
|
num3 = 1;
|
|
if (num4 > Main.maxTilesX - 1)
|
|
num4 = Main.maxTilesX - 1;
|
|
if (num5 < 1)
|
|
num5 = 1;
|
|
if (num6 > Main.maxTilesY - 1)
|
|
num6 = Main.maxTilesY - 1;
|
|
for (int index1 = num3; index1 < num4; ++index1)
|
|
{
|
|
if (index1 < WorldGen.beachDistance + 50 || index1 >= Main.maxTilesX - WorldGen.beachDistance - 50)
|
|
lava = false;
|
|
for (int index2 = num5; index2 < num6; ++index2)
|
|
{
|
|
if ((!WorldGen.drunkWorldGen || index2 >= Main.maxTilesY - 300 || type != 57) && (ignoreTileType < 0 || !Main.tile[index1, index2].active() || (int) Main.tile[index1, index2].type != ignoreTileType) && (double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < strength * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015))
|
|
{
|
|
if (WorldGen.mudWall && (double) index2 > Main.worldSurface && Main.tile[index1, index2 - 1].wall != (ushort) 2 && index2 < Main.maxTilesY - 210 - WorldGen.genRand.Next(3) && (double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < strength * 0.45 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.01))
|
|
{
|
|
if (index2 > WorldGen.lavaLine - WorldGen.genRand.Next(0, 4) - 50)
|
|
{
|
|
if (Main.tile[index1, index2 - 1].wall != (ushort) 64 && Main.tile[index1, index2 + 1].wall != (ushort) 64 && Main.tile[index1 - 1, index2].wall != (ushort) 64 && Main.tile[index1, index2 + 1].wall != (ushort) 64)
|
|
WorldGen.PlaceWall(index1, index2, 15, true);
|
|
}
|
|
else if (Main.tile[index1, index2 - 1].wall != (ushort) 15 && Main.tile[index1, index2 + 1].wall != (ushort) 15 && Main.tile[index1 - 1, index2].wall != (ushort) 15 && Main.tile[index1, index2 + 1].wall != (ushort) 15)
|
|
WorldGen.PlaceWall(index1, index2, 64, true);
|
|
}
|
|
if (type < 0)
|
|
{
|
|
if (Main.tile[index1, index2].type != (ushort) 53)
|
|
{
|
|
if (type == -2 && Main.tile[index1, index2].active() && (index2 < WorldGen.waterLine || index2 > WorldGen.lavaLine))
|
|
{
|
|
Main.tile[index1, index2].liquid = byte.MaxValue;
|
|
Main.tile[index1, index2].lava(lava);
|
|
if (index2 > WorldGen.lavaLine)
|
|
Main.tile[index1, index2].lava(true);
|
|
}
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (flag1 && (double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < strength * 0.3 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.01))
|
|
WorldGen.PlaceWall(index1, index2, 180, true);
|
|
if (flag2 && (double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < strength * 0.3 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.01))
|
|
WorldGen.PlaceWall(index1, index2, 178, true);
|
|
if (overRide || !Main.tile[index1, index2].active())
|
|
{
|
|
Tile tile = Main.tile[index1, index2];
|
|
bool flag3 = Main.tileStone[type] && tile.type != (ushort) 1;
|
|
if (!TileID.Sets.CanBeClearedDuringGeneration[(int) tile.type])
|
|
flag3 = true;
|
|
switch (tile.type)
|
|
{
|
|
case 1:
|
|
if (type == 59 && (double) index2 < Main.worldSurface + (double) WorldGen.genRand.Next(-50, 50))
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 45:
|
|
case 147:
|
|
case 189:
|
|
case 190:
|
|
case 196:
|
|
case 460:
|
|
flag3 = true;
|
|
break;
|
|
case 53:
|
|
if (type == 59 && WorldGen.UndergroundDesertLocation.Contains(index1, index2))
|
|
flag3 = true;
|
|
if (type == 40)
|
|
flag3 = true;
|
|
if ((double) index2 < Main.worldSurface && type != 59)
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 367:
|
|
case 368:
|
|
if (type == 59)
|
|
{
|
|
flag3 = true;
|
|
break;
|
|
}
|
|
break;
|
|
case 396:
|
|
case 397:
|
|
flag3 = !TileID.Sets.Ore[type];
|
|
break;
|
|
}
|
|
if (!flag3)
|
|
tile.type = (ushort) type;
|
|
}
|
|
if (addTile)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
Main.tile[index1, index2].lava(false);
|
|
}
|
|
if (noYChange && (double) index2 < Main.worldSurface && type != 59)
|
|
Main.tile[index1, index2].wall = (ushort) 2;
|
|
if (type == 59 && index2 > WorldGen.waterLine && Main.tile[index1, index2].liquid > (byte) 0)
|
|
{
|
|
Main.tile[index1, index2].lava(false);
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
if ((!WorldGen.drunkWorldGen || WorldGen.genRand.Next(3) != 0) && num1 > 50.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 100.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 150.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 200.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 250.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 300.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 400.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 500.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 600.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 700.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 800.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (num1 > 900.0)
|
|
{
|
|
vector2_1 += vector2_2;
|
|
--num2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if (WorldGen.drunkWorldGen)
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.25f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if (!noYChange)
|
|
{
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.Y > 1.0)
|
|
vector2_2.Y = 1f;
|
|
if ((double) vector2_2.Y < -1.0)
|
|
vector2_2.Y = -1f;
|
|
}
|
|
else if (type != 59 && num1 < 3.0)
|
|
{
|
|
if ((double) vector2_2.Y > 1.0)
|
|
vector2_2.Y = 1f;
|
|
if ((double) vector2_2.Y < -1.0)
|
|
vector2_2.Y = -1f;
|
|
}
|
|
if (type == 59 && !noYChange)
|
|
{
|
|
if ((double) vector2_2.Y > 0.5)
|
|
vector2_2.Y = 0.5f;
|
|
if ((double) vector2_2.Y < -0.5)
|
|
vector2_2.Y = -0.5f;
|
|
if ((double) vector2_1.Y < Main.rockLayer + 100.0)
|
|
vector2_2.Y = 1f;
|
|
if ((double) vector2_1.Y > (double) (Main.maxTilesY - 300))
|
|
vector2_2.Y = -1f;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void DirtyRockRunner(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(2, 6);
|
|
float num2 = (float) WorldGen.genRand.Next(5, 50);
|
|
float num3 = num2;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
double num4 = num1 * ((double) num3 / (double) num2);
|
|
--num3;
|
|
int num5 = (int) ((double) vector2_1.X - num4 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.X + num4 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y - num4 * 0.5);
|
|
int num8 = (int) ((double) vector2_1.Y + num4 * 0.5);
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesX)
|
|
num6 = Main.maxTilesX;
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesY)
|
|
num8 = Main.maxTilesY;
|
|
for (int index1 = num5; index1 < num6; ++index1)
|
|
{
|
|
for (int index2 = num7; index2 < num8; ++index2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < num1 * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && Main.tile[index1, index2].wall == (ushort) 2)
|
|
Main.tile[index1, index2].wall = (ushort) 59;
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.Y > 1.0)
|
|
vector2_2.Y = 1f;
|
|
if ((double) vector2_2.Y < -1.0)
|
|
vector2_2.Y = -1f;
|
|
}
|
|
}
|
|
|
|
public static void MudWallRunner(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(8, 21);
|
|
float num2 = (float) WorldGen.genRand.Next(8, 33);
|
|
float num3 = num2;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
double num4 = num1 * ((double) num3 / (double) num2);
|
|
--num3;
|
|
int num5 = (int) ((double) vector2_1.X - num4 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.X + num4 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y - num4 * 0.5);
|
|
int num8 = (int) ((double) vector2_1.Y + num4 * 0.5);
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesX)
|
|
num6 = Main.maxTilesX;
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesY)
|
|
num8 = Main.maxTilesY;
|
|
for (int index1 = num5; index1 < num6; ++index1)
|
|
{
|
|
for (int index2 = num7; index2 < num8; ++index2)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) + (double) Math.Abs((float) index2 - vector2_1.Y) < num1 * 0.5 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.015) && (double) index2 > Main.worldSurface)
|
|
Main.tile[index1, index2].wall = (ushort) 0;
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.Y > 1.0)
|
|
vector2_2.Y = 1f;
|
|
if ((double) vector2_2.Y < -1.0)
|
|
vector2_2.Y = -1f;
|
|
}
|
|
}
|
|
|
|
public static void SnowCloudIsland(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(100, 150);
|
|
double num2 = num1;
|
|
float num3 = (float) WorldGen.genRand.Next(20, 30);
|
|
int num4 = i;
|
|
int num5 = i;
|
|
int num6 = i;
|
|
int num7 = j;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num3;
|
|
int num8 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num9 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num10 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num11 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesX)
|
|
num9 = Main.maxTilesX;
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesY)
|
|
num11 = Main.maxTilesY;
|
|
double num12 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num13 = vector2_1.Y + 1f;
|
|
for (int i1 = num8; i1 < num9; ++i1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num13 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num13 < (double) vector2_1.Y)
|
|
num13 = vector2_1.Y;
|
|
if ((double) num13 > (double) vector2_1.Y + 2.0)
|
|
num13 = vector2_1.Y + 2f;
|
|
for (int j1 = num10; j1 < num11; ++j1)
|
|
{
|
|
if ((double) j1 > (double) num13)
|
|
{
|
|
double num14 = (double) Math.Abs((float) i1 - vector2_1.X);
|
|
float num15 = Math.Abs((float) j1 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num14 * num14 + (double) num15 * (double) num15) < num12 * 0.4)
|
|
{
|
|
if (i1 < num4)
|
|
num4 = i1;
|
|
if (i1 > num5)
|
|
num5 = i1;
|
|
if (j1 < num6)
|
|
num6 = j1;
|
|
if (j1 > num7)
|
|
num7 = j1;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].type = (ushort) 189;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int minValue1;
|
|
for (int index1 = num4 + WorldGen.genRand.Next(5); index1 < num5; index1 += WorldGen.genRand.Next(minValue1, (int) ((double) minValue1 * 1.5)))
|
|
{
|
|
int index2 = num7;
|
|
while (!Main.tile[index1, index2].active())
|
|
--index2;
|
|
int num16 = index2 + WorldGen.genRand.Next(-3, 4);
|
|
minValue1 = WorldGen.genRand.Next(4, 8);
|
|
int num17 = 189;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
num17 = 460;
|
|
for (int i2 = index1 - minValue1; i2 <= index1 + minValue1; ++i2)
|
|
{
|
|
for (int j2 = num16 - minValue1; j2 <= num16 + minValue1; ++j2)
|
|
{
|
|
if (j2 > num6)
|
|
{
|
|
double num18 = (double) Math.Abs(i2 - index1);
|
|
float num19 = (float) (Math.Abs(j2 - num16) * 2);
|
|
if (Math.Sqrt(num18 * num18 + (double) num19 * (double) num19) < (double) (minValue1 + WorldGen.genRand.Next(2)))
|
|
{
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].type = (ushort) num17;
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
double num20 = (double) WorldGen.genRand.Next(80, 95);
|
|
num2 = num20;
|
|
float num21 = (float) WorldGen.genRand.Next(10, 15);
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) num6;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num20 > 0.0 && (double) num21 > 0.0)
|
|
{
|
|
num20 -= (double) WorldGen.genRand.Next(4);
|
|
--num21;
|
|
int num22 = (int) ((double) vector2_1.X - num20 * 0.5);
|
|
int num23 = (int) ((double) vector2_1.X + num20 * 0.5);
|
|
int num24 = num6 - 1;
|
|
int num25 = (int) ((double) vector2_1.Y + num20 * 0.5);
|
|
if (num22 < 0)
|
|
num22 = 0;
|
|
if (num23 > Main.maxTilesX)
|
|
num23 = Main.maxTilesX;
|
|
if (num24 < 0)
|
|
num24 = 0;
|
|
if (num25 > Main.maxTilesY)
|
|
num25 = Main.maxTilesY;
|
|
double num26 = num20 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num27 = vector2_1.Y + 1f;
|
|
for (int i3 = num22; i3 < num23; ++i3)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num27 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num27 < (double) vector2_1.Y)
|
|
num27 = vector2_1.Y;
|
|
if ((double) num27 > (double) vector2_1.Y + 2.0)
|
|
num27 = vector2_1.Y + 2f;
|
|
for (int j3 = num24; j3 < num25; ++j3)
|
|
{
|
|
if ((double) j3 > (double) num27)
|
|
{
|
|
double num28 = (double) Math.Abs((float) i3 - vector2_1.X);
|
|
float num29 = Math.Abs((float) j3 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num28 * num28 + (double) num29 * (double) num29) < num26 * 0.4 && Main.tile[i3, j3].type == (ushort) 189)
|
|
{
|
|
Main.tile[i3, j3].type = (ushort) 147;
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int index3 = num4 + WorldGen.genRand.Next(5);
|
|
while (index3 < num5)
|
|
{
|
|
int index4 = num7;
|
|
while ((!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 0) && index3 < num5)
|
|
{
|
|
--index4;
|
|
if (index4 < num6)
|
|
{
|
|
index4 = num7;
|
|
index3 += WorldGen.genRand.Next(1, 4);
|
|
}
|
|
}
|
|
if (index3 < num5)
|
|
{
|
|
int num30 = index4 + WorldGen.genRand.Next(0, 4);
|
|
int minValue2 = WorldGen.genRand.Next(2, 5);
|
|
int num31 = 189;
|
|
for (int i4 = index3 - minValue2; i4 <= index3 + minValue2; ++i4)
|
|
{
|
|
for (int j4 = num30 - minValue2; j4 <= num30 + minValue2; ++j4)
|
|
{
|
|
if (j4 > num6)
|
|
{
|
|
double num32 = (double) Math.Abs(i4 - index3);
|
|
float num33 = (float) (Math.Abs(j4 - num30) * 2);
|
|
if (Math.Sqrt(num32 * num32 + (double) num33 * (double) num33) < (double) minValue2)
|
|
{
|
|
Main.tile[i4, j4].type = (ushort) num31;
|
|
WorldGen.SquareTileFrame(i4, j4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
index3 += WorldGen.genRand.Next(minValue2, (int) ((double) minValue2 * 1.5));
|
|
}
|
|
}
|
|
for (int i5 = num4 - 20; i5 <= num5 + 20; ++i5)
|
|
{
|
|
for (int j5 = num6 - 20; j5 <= num7 + 20; ++j5)
|
|
{
|
|
bool flag = true;
|
|
for (int index5 = i5 - 1; index5 <= i5 + 1; ++index5)
|
|
{
|
|
for (int index6 = j5 - 1; index6 <= j5 + 1; ++index6)
|
|
{
|
|
if (!Main.tile[index5, index6].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[i5, j5].wall = (ushort) 73;
|
|
WorldGen.SquareWallFrame(i5, j5);
|
|
}
|
|
}
|
|
}
|
|
for (int index7 = num4; index7 <= num5; ++index7)
|
|
{
|
|
int index8 = num6 - 10;
|
|
while (!Main.tile[index7, index8 + 1].active())
|
|
++index8;
|
|
if (index8 < num7 && Main.tile[index7, index8 + 1].type == (ushort) 189)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int num34 = WorldGen.genRand.Next(1, 3);
|
|
for (int x = index7 - num34; x <= index7 + num34; ++x)
|
|
{
|
|
if (Main.tile[x, index8].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8))
|
|
{
|
|
Main.tile[x, index8].active(false);
|
|
Main.tile[x, index8].liquid = byte.MaxValue;
|
|
Main.tile[x, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
if (Main.tile[x, index8 + 1].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 1))
|
|
{
|
|
Main.tile[x, index8 + 1].active(false);
|
|
Main.tile[x, index8 + 1].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 1].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 1);
|
|
}
|
|
if (x > index7 - num34 && x < index7 + 2 && Main.tile[x, index8 + 2].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 2))
|
|
{
|
|
Main.tile[x, index8 + 2].active(false);
|
|
Main.tile[x, index8 + 2].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 2].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 2);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0 && WorldGen.WillWaterPlacedHereStayPut(index7, index8))
|
|
Main.tile[index7, index8].liquid = byte.MaxValue;
|
|
Main.tile[index7, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
}
|
|
int num35 = WorldGen.genRand.Next(4);
|
|
for (int index9 = 0; index9 <= num35; ++index9)
|
|
{
|
|
int num36 = WorldGen.genRand.Next(num4 - 5, num5 + 5);
|
|
int num37 = num6 - WorldGen.genRand.Next(20, 40);
|
|
int num38 = WorldGen.genRand.Next(4, 8);
|
|
int num39 = 189;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num39 = 460;
|
|
for (int i6 = num36 - num38; i6 <= num36 + num38; ++i6)
|
|
{
|
|
for (int j6 = num37 - num38; j6 <= num37 + num38; ++j6)
|
|
{
|
|
double num40 = (double) Math.Abs(i6 - num36);
|
|
float num41 = (float) (Math.Abs(j6 - num37) * 2);
|
|
if (Math.Sqrt(num40 * num40 + (double) num41 * (double) num41) < (double) (num38 + WorldGen.genRand.Next(-1, 2)))
|
|
{
|
|
Main.tile[i6, j6].active(true);
|
|
Main.tile[i6, j6].type = (ushort) num39;
|
|
WorldGen.SquareTileFrame(i6, j6);
|
|
}
|
|
}
|
|
}
|
|
for (int index10 = num36 - num38 + 2; index10 <= num36 + num38 - 2; ++index10)
|
|
{
|
|
int index11 = num37 - num38;
|
|
while (!Main.tile[index10, index11].active())
|
|
++index11;
|
|
if (WorldGen.WillWaterPlacedHereStayPut(index10, index11))
|
|
{
|
|
Main.tile[index10, index11].active(false);
|
|
Main.tile[index10, index11].liquid = byte.MaxValue;
|
|
WorldGen.SquareTileFrame(index10, index11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void DesertCloudIsland(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(100, 150);
|
|
double num2 = num1;
|
|
float num3 = (float) WorldGen.genRand.Next(20, 30);
|
|
int num4 = i;
|
|
int num5 = i;
|
|
int num6 = i;
|
|
int num7 = j;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num3;
|
|
int num8 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num9 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num10 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num11 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesX)
|
|
num9 = Main.maxTilesX;
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesY)
|
|
num11 = Main.maxTilesY;
|
|
double num12 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num13 = vector2_1.Y + 1f;
|
|
for (int i1 = num8; i1 < num9; ++i1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num13 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num13 < (double) vector2_1.Y)
|
|
num13 = vector2_1.Y;
|
|
if ((double) num13 > (double) vector2_1.Y + 2.0)
|
|
num13 = vector2_1.Y + 2f;
|
|
for (int j1 = num10; j1 < num11; ++j1)
|
|
{
|
|
if ((double) j1 > (double) num13)
|
|
{
|
|
double num14 = (double) Math.Abs((float) i1 - vector2_1.X);
|
|
float num15 = Math.Abs((float) j1 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num14 * num14 + (double) num15 * (double) num15) < num12 * 0.4)
|
|
{
|
|
if (i1 < num4)
|
|
num4 = i1;
|
|
if (i1 > num5)
|
|
num5 = i1;
|
|
if (j1 < num6)
|
|
num6 = j1;
|
|
if (j1 > num7)
|
|
num7 = j1;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].type = (ushort) 189;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int minValue1;
|
|
for (int index1 = num4 + WorldGen.genRand.Next(5); index1 < num5; index1 += WorldGen.genRand.Next(minValue1, (int) ((double) minValue1 * 1.5)))
|
|
{
|
|
int index2 = num7;
|
|
while (!Main.tile[index1, index2].active())
|
|
--index2;
|
|
int num16 = index2 + WorldGen.genRand.Next(-3, 4);
|
|
minValue1 = WorldGen.genRand.Next(4, 8);
|
|
int num17 = 189;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
num17 = 196;
|
|
for (int i2 = index1 - minValue1; i2 <= index1 + minValue1; ++i2)
|
|
{
|
|
for (int j2 = num16 - minValue1; j2 <= num16 + minValue1; ++j2)
|
|
{
|
|
if (j2 > num6)
|
|
{
|
|
double num18 = (double) Math.Abs(i2 - index1);
|
|
float num19 = (float) (Math.Abs(j2 - num16) * 2);
|
|
if (Math.Sqrt(num18 * num18 + (double) num19 * (double) num19) < (double) (minValue1 + WorldGen.genRand.Next(2)))
|
|
{
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].type = (ushort) num17;
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
double num20 = (double) WorldGen.genRand.Next(80, 95);
|
|
num2 = num20;
|
|
float num21 = (float) WorldGen.genRand.Next(10, 15);
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) num6;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num20 > 0.0 && (double) num21 > 0.0)
|
|
{
|
|
num20 -= (double) WorldGen.genRand.Next(4);
|
|
--num21;
|
|
int num22 = (int) ((double) vector2_1.X - num20 * 0.5);
|
|
int num23 = (int) ((double) vector2_1.X + num20 * 0.5);
|
|
int num24 = num6 - 1;
|
|
int num25 = (int) ((double) vector2_1.Y + num20 * 0.5);
|
|
if (num22 < 0)
|
|
num22 = 0;
|
|
if (num23 > Main.maxTilesX)
|
|
num23 = Main.maxTilesX;
|
|
if (num24 < 0)
|
|
num24 = 0;
|
|
if (num25 > Main.maxTilesY)
|
|
num25 = Main.maxTilesY;
|
|
double num26 = num20 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num27 = vector2_1.Y + 1f;
|
|
for (int i3 = num22; i3 < num23; ++i3)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num27 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num27 < (double) vector2_1.Y)
|
|
num27 = vector2_1.Y;
|
|
if ((double) num27 > (double) vector2_1.Y + 2.0)
|
|
num27 = vector2_1.Y + 2f;
|
|
for (int j3 = num24; j3 < num25; ++j3)
|
|
{
|
|
if ((double) j3 > (double) num27)
|
|
{
|
|
double num28 = (double) Math.Abs((float) i3 - vector2_1.X);
|
|
float num29 = Math.Abs((float) j3 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num28 * num28 + (double) num29 * (double) num29) < num26 * 0.4 && Main.tile[i3, j3].type == (ushort) 189)
|
|
{
|
|
Main.tile[i3, j3].type = (ushort) 53;
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int index3 = num4 + WorldGen.genRand.Next(5);
|
|
while (index3 < num5)
|
|
{
|
|
int index4 = num7;
|
|
while ((!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 0) && index3 < num5)
|
|
{
|
|
--index4;
|
|
if (index4 < num6)
|
|
{
|
|
index4 = num7;
|
|
index3 += WorldGen.genRand.Next(1, 4);
|
|
}
|
|
}
|
|
if (index3 < num5)
|
|
{
|
|
int num30 = index4 + WorldGen.genRand.Next(0, 4);
|
|
int minValue2 = WorldGen.genRand.Next(2, 5);
|
|
int num31 = 189;
|
|
for (int i4 = index3 - minValue2; i4 <= index3 + minValue2; ++i4)
|
|
{
|
|
for (int j4 = num30 - minValue2; j4 <= num30 + minValue2; ++j4)
|
|
{
|
|
if (j4 > num6)
|
|
{
|
|
double num32 = (double) Math.Abs(i4 - index3);
|
|
float num33 = (float) (Math.Abs(j4 - num30) * 2);
|
|
if (Math.Sqrt(num32 * num32 + (double) num33 * (double) num33) < (double) minValue2)
|
|
{
|
|
Main.tile[i4, j4].type = (ushort) num31;
|
|
WorldGen.SquareTileFrame(i4, j4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
index3 += WorldGen.genRand.Next(minValue2, (int) ((double) minValue2 * 1.5));
|
|
}
|
|
}
|
|
for (int i5 = num4 - 20; i5 <= num5 + 20; ++i5)
|
|
{
|
|
for (int j5 = num6 - 20; j5 <= num7 + 20; ++j5)
|
|
{
|
|
bool flag = true;
|
|
for (int index5 = i5 - 1; index5 <= i5 + 1; ++index5)
|
|
{
|
|
for (int index6 = j5 - 1; index6 <= j5 + 1; ++index6)
|
|
{
|
|
if (!Main.tile[index5, index6].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[i5, j5].wall = (ushort) 73;
|
|
WorldGen.SquareWallFrame(i5, j5);
|
|
}
|
|
}
|
|
}
|
|
for (int index7 = num4; index7 <= num5; ++index7)
|
|
{
|
|
int index8 = num6 - 10;
|
|
while (!Main.tile[index7, index8 + 1].active())
|
|
++index8;
|
|
if (index8 < num7 && Main.tile[index7, index8 + 1].type == (ushort) 189)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int num34 = WorldGen.genRand.Next(1, 3);
|
|
for (int x = index7 - num34; x <= index7 + num34; ++x)
|
|
{
|
|
if (Main.tile[x, index8].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8))
|
|
{
|
|
Main.tile[x, index8].active(false);
|
|
Main.tile[x, index8].liquid = byte.MaxValue;
|
|
Main.tile[x, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
if (Main.tile[x, index8 + 1].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 1))
|
|
{
|
|
Main.tile[x, index8 + 1].active(false);
|
|
Main.tile[x, index8 + 1].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 1].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 1);
|
|
}
|
|
if (x > index7 - num34 && x < index7 + 2 && Main.tile[x, index8 + 2].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 2))
|
|
{
|
|
Main.tile[x, index8 + 2].active(false);
|
|
Main.tile[x, index8 + 2].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 2].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 2);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0 && WorldGen.WillWaterPlacedHereStayPut(index7, index8))
|
|
Main.tile[index7, index8].liquid = byte.MaxValue;
|
|
Main.tile[index7, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
}
|
|
int num35 = WorldGen.genRand.Next(4);
|
|
for (int index9 = 0; index9 <= num35; ++index9)
|
|
{
|
|
int num36 = WorldGen.genRand.Next(num4 - 5, num5 + 5);
|
|
int num37 = num6 - WorldGen.genRand.Next(20, 40);
|
|
int num38 = WorldGen.genRand.Next(4, 8);
|
|
int num39 = 189;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num39 = 196;
|
|
for (int i6 = num36 - num38; i6 <= num36 + num38; ++i6)
|
|
{
|
|
for (int j6 = num37 - num38; j6 <= num37 + num38; ++j6)
|
|
{
|
|
double num40 = (double) Math.Abs(i6 - num36);
|
|
float num41 = (float) (Math.Abs(j6 - num37) * 2);
|
|
if (Math.Sqrt(num40 * num40 + (double) num41 * (double) num41) < (double) (num38 + WorldGen.genRand.Next(-1, 2)))
|
|
{
|
|
Main.tile[i6, j6].active(true);
|
|
Main.tile[i6, j6].type = (ushort) num39;
|
|
WorldGen.SquareTileFrame(i6, j6);
|
|
}
|
|
}
|
|
}
|
|
for (int index10 = num36 - num38 + 2; index10 <= num36 + num38 - 2; ++index10)
|
|
{
|
|
int index11 = num37 - num38;
|
|
while (!Main.tile[index10, index11].active())
|
|
++index11;
|
|
if (WorldGen.WillWaterPlacedHereStayPut(index10, index11))
|
|
{
|
|
Main.tile[index10, index11].active(false);
|
|
Main.tile[index10, index11].liquid = byte.MaxValue;
|
|
WorldGen.SquareTileFrame(index10, index11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void CloudIsland(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(100, 150);
|
|
double num2 = num1;
|
|
float num3 = (float) WorldGen.genRand.Next(20, 30);
|
|
int num4 = i;
|
|
int num5 = i;
|
|
int num6 = i;
|
|
int num7 = j;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num3;
|
|
int num8 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num9 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num10 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num11 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesX)
|
|
num9 = Main.maxTilesX;
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesY)
|
|
num11 = Main.maxTilesY;
|
|
double num12 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num13 = vector2_1.Y + 1f;
|
|
for (int i1 = num8; i1 < num9; ++i1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num13 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num13 < (double) vector2_1.Y)
|
|
num13 = vector2_1.Y;
|
|
if ((double) num13 > (double) vector2_1.Y + 2.0)
|
|
num13 = vector2_1.Y + 2f;
|
|
for (int j1 = num10; j1 < num11; ++j1)
|
|
{
|
|
if ((double) j1 > (double) num13)
|
|
{
|
|
double num14 = (double) Math.Abs((float) i1 - vector2_1.X);
|
|
float num15 = Math.Abs((float) j1 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num14 * num14 + (double) num15 * (double) num15) < num12 * 0.4)
|
|
{
|
|
if (i1 < num4)
|
|
num4 = i1;
|
|
if (i1 > num5)
|
|
num5 = i1;
|
|
if (j1 < num6)
|
|
num6 = j1;
|
|
if (j1 > num7)
|
|
num7 = j1;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].type = (ushort) 189;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int minValue1;
|
|
for (int index1 = num4 + WorldGen.genRand.Next(5); index1 < num5; index1 += WorldGen.genRand.Next(minValue1, (int) ((double) minValue1 * 1.5)))
|
|
{
|
|
int index2 = num7;
|
|
while (!Main.tile[index1, index2].active())
|
|
--index2;
|
|
int num16 = index2 + WorldGen.genRand.Next(-3, 4);
|
|
minValue1 = WorldGen.genRand.Next(4, 8);
|
|
int num17 = 189;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
num17 = 196;
|
|
for (int i2 = index1 - minValue1; i2 <= index1 + minValue1; ++i2)
|
|
{
|
|
for (int j2 = num16 - minValue1; j2 <= num16 + minValue1; ++j2)
|
|
{
|
|
if (j2 > num6)
|
|
{
|
|
double num18 = (double) Math.Abs(i2 - index1);
|
|
float num19 = (float) (Math.Abs(j2 - num16) * 2);
|
|
if (Math.Sqrt(num18 * num18 + (double) num19 * (double) num19) < (double) (minValue1 + WorldGen.genRand.Next(2)))
|
|
{
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].type = (ushort) num17;
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
double num20 = (double) WorldGen.genRand.Next(80, 95);
|
|
num2 = num20;
|
|
float num21 = (float) WorldGen.genRand.Next(10, 15);
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) num6;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num20 > 0.0 && (double) num21 > 0.0)
|
|
{
|
|
num20 -= (double) WorldGen.genRand.Next(4);
|
|
--num21;
|
|
int num22 = (int) ((double) vector2_1.X - num20 * 0.5);
|
|
int num23 = (int) ((double) vector2_1.X + num20 * 0.5);
|
|
int num24 = num6 - 1;
|
|
int num25 = (int) ((double) vector2_1.Y + num20 * 0.5);
|
|
if (num22 < 0)
|
|
num22 = 0;
|
|
if (num23 > Main.maxTilesX)
|
|
num23 = Main.maxTilesX;
|
|
if (num24 < 0)
|
|
num24 = 0;
|
|
if (num25 > Main.maxTilesY)
|
|
num25 = Main.maxTilesY;
|
|
double num26 = num20 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num27 = vector2_1.Y + 1f;
|
|
for (int i3 = num22; i3 < num23; ++i3)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num27 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num27 < (double) vector2_1.Y)
|
|
num27 = vector2_1.Y;
|
|
if ((double) num27 > (double) vector2_1.Y + 2.0)
|
|
num27 = vector2_1.Y + 2f;
|
|
for (int j3 = num24; j3 < num25; ++j3)
|
|
{
|
|
if ((double) j3 > (double) num27)
|
|
{
|
|
double num28 = (double) Math.Abs((float) i3 - vector2_1.X);
|
|
float num29 = Math.Abs((float) j3 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num28 * num28 + (double) num29 * (double) num29) < num26 * 0.4 && Main.tile[i3, j3].type == (ushort) 189)
|
|
{
|
|
Main.tile[i3, j3].type = (ushort) 0;
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int index3 = num4 + WorldGen.genRand.Next(5);
|
|
while (index3 < num5)
|
|
{
|
|
int index4 = num7;
|
|
while ((!Main.tile[index3, index4].active() || Main.tile[index3, index4].type != (ushort) 0) && index3 < num5)
|
|
{
|
|
--index4;
|
|
if (index4 < num6)
|
|
{
|
|
index4 = num7;
|
|
index3 += WorldGen.genRand.Next(1, 4);
|
|
}
|
|
}
|
|
if (index3 < num5)
|
|
{
|
|
int num30 = index4 + WorldGen.genRand.Next(0, 4);
|
|
int minValue2 = WorldGen.genRand.Next(2, 5);
|
|
int num31 = 189;
|
|
for (int i4 = index3 - minValue2; i4 <= index3 + minValue2; ++i4)
|
|
{
|
|
for (int j4 = num30 - minValue2; j4 <= num30 + minValue2; ++j4)
|
|
{
|
|
if (j4 > num6)
|
|
{
|
|
double num32 = (double) Math.Abs(i4 - index3);
|
|
float num33 = (float) (Math.Abs(j4 - num30) * 2);
|
|
if (Math.Sqrt(num32 * num32 + (double) num33 * (double) num33) < (double) minValue2)
|
|
{
|
|
Main.tile[i4, j4].type = (ushort) num31;
|
|
WorldGen.SquareTileFrame(i4, j4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
index3 += WorldGen.genRand.Next(minValue2, (int) ((double) minValue2 * 1.5));
|
|
}
|
|
}
|
|
for (int i5 = num4 - 20; i5 <= num5 + 20; ++i5)
|
|
{
|
|
for (int j5 = num6 - 20; j5 <= num7 + 20; ++j5)
|
|
{
|
|
bool flag = true;
|
|
for (int index5 = i5 - 1; index5 <= i5 + 1; ++index5)
|
|
{
|
|
for (int index6 = j5 - 1; index6 <= j5 + 1; ++index6)
|
|
{
|
|
if (!Main.tile[index5, index6].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
{
|
|
Main.tile[i5, j5].wall = (ushort) 73;
|
|
WorldGen.SquareWallFrame(i5, j5);
|
|
}
|
|
}
|
|
}
|
|
for (int index7 = num4; index7 <= num5; ++index7)
|
|
{
|
|
int index8 = num6 - 10;
|
|
while (!Main.tile[index7, index8 + 1].active())
|
|
++index8;
|
|
if (index8 < num7 && Main.tile[index7, index8 + 1].type == (ushort) 189)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int num34 = WorldGen.genRand.Next(1, 3);
|
|
for (int x = index7 - num34; x <= index7 + num34; ++x)
|
|
{
|
|
if (Main.tile[x, index8].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8))
|
|
{
|
|
Main.tile[x, index8].active(false);
|
|
Main.tile[x, index8].liquid = byte.MaxValue;
|
|
Main.tile[x, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
if (Main.tile[x, index8 + 1].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 1))
|
|
{
|
|
Main.tile[x, index8 + 1].active(false);
|
|
Main.tile[x, index8 + 1].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 1].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 1);
|
|
}
|
|
if (x > index7 - num34 && x < index7 + 2 && Main.tile[x, index8 + 2].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 2))
|
|
{
|
|
Main.tile[x, index8 + 2].active(false);
|
|
Main.tile[x, index8 + 2].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 2].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 2);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0 && WorldGen.WillWaterPlacedHereStayPut(index7, index8))
|
|
Main.tile[index7, index8].liquid = byte.MaxValue;
|
|
Main.tile[index7, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
}
|
|
int num35 = WorldGen.genRand.Next(4);
|
|
for (int index9 = 0; index9 <= num35; ++index9)
|
|
{
|
|
int num36 = WorldGen.genRand.Next(num4 - 5, num5 + 5);
|
|
int num37 = num6 - WorldGen.genRand.Next(20, 40);
|
|
int num38 = WorldGen.genRand.Next(4, 8);
|
|
int num39 = 189;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num39 = 196;
|
|
for (int i6 = num36 - num38; i6 <= num36 + num38; ++i6)
|
|
{
|
|
for (int j6 = num37 - num38; j6 <= num37 + num38; ++j6)
|
|
{
|
|
double num40 = (double) Math.Abs(i6 - num36);
|
|
float num41 = (float) (Math.Abs(j6 - num37) * 2);
|
|
if (Math.Sqrt(num40 * num40 + (double) num41 * (double) num41) < (double) (num38 + WorldGen.genRand.Next(-1, 2)))
|
|
{
|
|
Main.tile[i6, j6].active(true);
|
|
Main.tile[i6, j6].type = (ushort) num39;
|
|
WorldGen.SquareTileFrame(i6, j6);
|
|
}
|
|
}
|
|
}
|
|
for (int index10 = num36 - num38 + 2; index10 <= num36 + num38 - 2; ++index10)
|
|
{
|
|
int index11 = num37 - num38;
|
|
while (!Main.tile[index10, index11].active())
|
|
++index11;
|
|
if (WorldGen.WillWaterPlacedHereStayPut(index10, index11))
|
|
{
|
|
Main.tile[index10, index11].active(false);
|
|
Main.tile[index10, index11].liquid = byte.MaxValue;
|
|
WorldGen.SquareTileFrame(index10, index11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool WillWaterPlacedHereStayPut(int x, int y) => (Main.tile[x, y + 1].active() && Main.tileSolid[(int) Main.tile[x, y + 1].type] && !Main.tileSolidTop[(int) Main.tile[x, y + 1].type] || Main.tile[x, y + 1].liquid == byte.MaxValue) && (Main.tile[x - 1, y].active() && Main.tileSolid[(int) Main.tile[x - 1, y].type] && !Main.tileSolidTop[(int) Main.tile[x - 1, y].type] || Main.tile[x - 1, y].liquid == byte.MaxValue) && (Main.tile[x + 1, y].active() && Main.tileSolid[(int) Main.tile[x + 1, y].type] && !Main.tileSolidTop[(int) Main.tile[x + 1, y].type] || Main.tile[x + 1, y].liquid == byte.MaxValue);
|
|
|
|
public static void CloudLake(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(100, 150);
|
|
double num2 = num1;
|
|
float num3 = (float) WorldGen.genRand.Next(20, 30);
|
|
int num4 = i;
|
|
int num5 = i;
|
|
int num6 = i;
|
|
int num7 = j;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num3;
|
|
int num8 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num9 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num10 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num11 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesX)
|
|
num9 = Main.maxTilesX;
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesY)
|
|
num11 = Main.maxTilesY;
|
|
double num12 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num13 = vector2_1.Y + 1f;
|
|
for (int i1 = num8; i1 < num9; ++i1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num13 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num13 < (double) vector2_1.Y)
|
|
num13 = vector2_1.Y;
|
|
if ((double) num13 > (double) vector2_1.Y + 2.0)
|
|
num13 = vector2_1.Y + 2f;
|
|
for (int j1 = num10; j1 < num11; ++j1)
|
|
{
|
|
if ((double) j1 > (double) num13)
|
|
{
|
|
double num14 = (double) Math.Abs((float) i1 - vector2_1.X);
|
|
float num15 = Math.Abs((float) j1 - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num14 * num14 + (double) num15 * (double) num15) < num12 * 0.4)
|
|
{
|
|
if (i1 < num4)
|
|
num4 = i1;
|
|
if (i1 > num5)
|
|
num5 = i1;
|
|
if (j1 < num6)
|
|
num6 = j1;
|
|
if (j1 > num7)
|
|
num7 = j1;
|
|
Main.tile[i1, j1].active(true);
|
|
Main.tile[i1, j1].type = (ushort) 189;
|
|
WorldGen.SquareTileFrame(i1, j1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
int minValue;
|
|
for (int index1 = num4 + WorldGen.genRand.Next(5); index1 < num5; index1 += WorldGen.genRand.Next(minValue, (int) ((double) minValue * 1.5)))
|
|
{
|
|
int index2 = num7;
|
|
while (!Main.tile[index1, index2].active())
|
|
--index2;
|
|
int num16 = index2 + WorldGen.genRand.Next(-3, 4);
|
|
minValue = WorldGen.genRand.Next(4, 8);
|
|
int num17 = 189;
|
|
if (WorldGen.genRand.Next(4) == 0)
|
|
num17 = 196;
|
|
for (int i2 = index1 - minValue; i2 <= index1 + minValue; ++i2)
|
|
{
|
|
for (int j2 = num16 - minValue; j2 <= num16 + minValue; ++j2)
|
|
{
|
|
if (j2 > num6)
|
|
{
|
|
double num18 = (double) Math.Abs(i2 - index1);
|
|
float num19 = (float) (Math.Abs(j2 - num16) * 2);
|
|
if (Math.Sqrt(num18 * num18 + (double) num19 * (double) num19) < (double) (minValue + WorldGen.genRand.Next(2)))
|
|
{
|
|
Main.tile[i2, j2].active(true);
|
|
Main.tile[i2, j2].type = (ushort) num17;
|
|
WorldGen.SquareTileFrame(i2, j2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
double num20 = (double) WorldGen.genRand.Next(80, 95);
|
|
num2 = num20;
|
|
float num21 = (float) WorldGen.genRand.Next(10, 15);
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) num6;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num20 > 0.0 && (double) num21 > 0.0)
|
|
{
|
|
num20 -= (double) WorldGen.genRand.Next(4);
|
|
--num21;
|
|
int num22 = (int) ((double) vector2_1.X - num20 * 0.5);
|
|
int num23 = (int) ((double) vector2_1.X + num20 * 0.5);
|
|
int num24 = num6 - 1;
|
|
int num25 = (int) ((double) vector2_1.Y + num20 * 0.5);
|
|
if (num22 < 0)
|
|
num22 = 0;
|
|
if (num23 > Main.maxTilesX)
|
|
num23 = Main.maxTilesX;
|
|
if (num24 < 0)
|
|
num24 = 0;
|
|
if (num25 > Main.maxTilesY)
|
|
num25 = Main.maxTilesY;
|
|
double num26 = num20 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num27 = vector2_1.Y + 1f;
|
|
for (int x = num22; x < num23; ++x)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num27 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num27 < (double) vector2_1.Y)
|
|
num27 = vector2_1.Y;
|
|
if ((double) num27 > (double) vector2_1.Y + 2.0)
|
|
num27 = vector2_1.Y + 2f;
|
|
for (int y = num24; y < num25; ++y)
|
|
{
|
|
if ((double) y > (double) num27 - 2.0)
|
|
{
|
|
double num28 = (double) Math.Abs((float) x - vector2_1.X);
|
|
float num29 = Math.Abs((float) y - vector2_1.Y) * 3f;
|
|
if (Math.Sqrt(num28 * num28 + (double) num29 * (double) num29) < num26 * 0.4 && Main.tile[x, y].type == (ushort) 189)
|
|
{
|
|
Main.tile[x, y].active(false);
|
|
if ((double) y > (double) num27 + 1.0)
|
|
{
|
|
if (WorldGen.WillWaterPlacedHereStayPut(x, y))
|
|
Main.tile[x, y].liquid = byte.MaxValue;
|
|
Main.tile[x, y].honey(false);
|
|
Main.tile[x, y].lava(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-20, 21) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < 0.0)
|
|
vector2_2.Y = 0.0f;
|
|
}
|
|
for (int index3 = num4 - 20; index3 <= num5 + 20; ++index3)
|
|
{
|
|
for (int index4 = num6 - 20; index4 <= num7 + 20; ++index4)
|
|
{
|
|
bool flag = true;
|
|
for (int index5 = index3 - 1; index5 <= index3 + 1; ++index5)
|
|
{
|
|
for (int index6 = index4 - 1; index6 <= index4 + 1; ++index6)
|
|
{
|
|
if (!Main.tile[index5, index6].active())
|
|
flag = false;
|
|
}
|
|
}
|
|
if (flag)
|
|
Main.tile[index3, index4].wall = (ushort) 73;
|
|
}
|
|
}
|
|
for (int index7 = num4; index7 <= num5; ++index7)
|
|
{
|
|
int index8 = num6 - 10;
|
|
while (!Main.tile[index7, index8 + 1].active())
|
|
++index8;
|
|
if (index8 < num7 && Main.tile[index7, index8 + 1].type == (ushort) 189)
|
|
{
|
|
if (WorldGen.genRand.Next(10) == 0)
|
|
{
|
|
int num30 = WorldGen.genRand.Next(1, 3);
|
|
for (int x = index7 - num30; x <= index7 + num30; ++x)
|
|
{
|
|
if (Main.tile[x, index8].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8))
|
|
{
|
|
Main.tile[x, index8].active(false);
|
|
Main.tile[x, index8].liquid = byte.MaxValue;
|
|
Main.tile[x, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
if (Main.tile[x, index8 + 1].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 1))
|
|
{
|
|
Main.tile[x, index8 + 1].active(false);
|
|
Main.tile[x, index8 + 1].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 1].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 1);
|
|
}
|
|
if (x > index7 - num30 && x < index7 + 2 && Main.tile[x, index8 + 2].type == (ushort) 189 && WorldGen.WillWaterPlacedHereStayPut(x, index8 + 2))
|
|
{
|
|
Main.tile[x, index8 + 2].active(false);
|
|
Main.tile[x, index8 + 2].liquid = byte.MaxValue;
|
|
Main.tile[x, index8 + 2].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8 + 2);
|
|
}
|
|
}
|
|
}
|
|
if (WorldGen.genRand.Next(5) == 0 && WorldGen.WillWaterPlacedHereStayPut(index7, index8))
|
|
Main.tile[index7, index8].liquid = byte.MaxValue;
|
|
Main.tile[index7, index8].lava(false);
|
|
WorldGen.SquareTileFrame(index7, index8);
|
|
}
|
|
}
|
|
int num31 = WorldGen.genRand.Next(1, 4);
|
|
for (int index9 = 0; index9 <= num31; ++index9)
|
|
{
|
|
int num32 = WorldGen.genRand.Next(num4 - 5, num5 + 5);
|
|
int num33 = num6 - WorldGen.genRand.Next(20, 40);
|
|
int num34 = WorldGen.genRand.Next(4, 8);
|
|
int num35 = 189;
|
|
if (WorldGen.genRand.Next(4) != 0)
|
|
num35 = 196;
|
|
for (int i3 = num32 - num34; i3 <= num32 + num34; ++i3)
|
|
{
|
|
for (int j3 = num33 - num34; j3 <= num33 + num34; ++j3)
|
|
{
|
|
double num36 = (double) Math.Abs(i3 - num32);
|
|
float num37 = (float) (Math.Abs(j3 - num33) * 2);
|
|
if (Math.Sqrt(num36 * num36 + (double) num37 * (double) num37) < (double) (num34 + WorldGen.genRand.Next(-1, 2)))
|
|
{
|
|
Main.tile[i3, j3].active(true);
|
|
Main.tile[i3, j3].type = (ushort) num35;
|
|
WorldGen.SquareTileFrame(i3, j3);
|
|
}
|
|
}
|
|
}
|
|
for (int index10 = num32 - num34 + 2; index10 <= num32 + num34 - 2; ++index10)
|
|
{
|
|
int index11 = num33 - num34;
|
|
while (!Main.tile[index10, index11].active())
|
|
++index11;
|
|
if (WorldGen.WillWaterPlacedHereStayPut(index10, index11))
|
|
{
|
|
Main.tile[index10, index11].active(false);
|
|
Main.tile[index10, index11].liquid = byte.MaxValue;
|
|
WorldGen.SquareTileFrame(index10, index11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void FloatingIsland(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(80, 120);
|
|
float num2 = (float) WorldGen.genRand.Next(20, 25);
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
while ((double) vector2_2.X > -2.0 && (double) vector2_2.X < 2.0)
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-20, 21) * 0.2f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.02f;
|
|
while (num1 > 0.0 && (double) num2 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num2;
|
|
int num3 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num4 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesX)
|
|
num4 = Main.maxTilesX;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesY)
|
|
num6 = Main.maxTilesY;
|
|
double num7 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
float num8 = vector2_1.Y + 1f;
|
|
for (int index1 = num3; index1 < num4; ++index1)
|
|
{
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num8 += (float) WorldGen.genRand.Next(-1, 2);
|
|
if ((double) num8 < (double) vector2_1.Y)
|
|
num8 = vector2_1.Y;
|
|
if ((double) num8 > (double) vector2_1.Y + 2.0)
|
|
num8 = vector2_1.Y + 2f;
|
|
for (int index2 = num5; index2 < num6; ++index2)
|
|
{
|
|
if ((double) index2 > (double) num8)
|
|
{
|
|
double num9 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num10 = Math.Abs((float) index2 - vector2_1.Y) * 2f;
|
|
if (Math.Sqrt(num9 * num9 + (double) num10 * (double) num10) < num7 * 0.4)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
if (Main.tile[index1, index2].type == (ushort) 59)
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int num11 = (int) ((double) vector2_1.X - num1 * 0.4);
|
|
int num12 = (int) ((double) vector2_1.X + num1 * 0.4);
|
|
int num13 = (int) ((double) vector2_1.Y - num1 * 0.4);
|
|
int num14 = (int) ((double) vector2_1.Y + num1 * 0.4);
|
|
if (num11 < 0)
|
|
num11 = 0;
|
|
if (num12 > Main.maxTilesX)
|
|
num12 = Main.maxTilesX;
|
|
if (num13 < 0)
|
|
num13 = 0;
|
|
if (num14 > Main.maxTilesY)
|
|
num14 = Main.maxTilesY;
|
|
double num15 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index3 = num11; index3 < num12; ++index3)
|
|
{
|
|
for (int index4 = num13; index4 < num14; ++index4)
|
|
{
|
|
if ((double) index4 > (double) vector2_1.Y + 2.0)
|
|
{
|
|
double num16 = (double) Math.Abs((float) index3 - vector2_1.X);
|
|
float num17 = Math.Abs((float) index4 - vector2_1.Y) * 2f;
|
|
if (Math.Sqrt(num16 * num16 + (double) num17 * (double) num17) < num15 * 0.4)
|
|
Main.tile[index3, index4].wall = (ushort) 2;
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 0.2)
|
|
vector2_2.Y = -0.2f;
|
|
if ((double) vector2_2.Y < -0.2)
|
|
vector2_2.Y = -0.2f;
|
|
}
|
|
}
|
|
|
|
public static void Caverer(int X, int Y)
|
|
{
|
|
switch (WorldGen.genRand.Next(2))
|
|
{
|
|
case 0:
|
|
int num1 = WorldGen.genRand.Next(7, 9);
|
|
float xDir1 = (float) WorldGen.genRand.Next(100) * 0.01f;
|
|
float yDir1 = 1f - xDir1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
xDir1 = -xDir1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
yDir1 = -yDir1;
|
|
Vector2 vector2_1 = new Vector2((float) X, (float) Y);
|
|
for (int index = 0; index < num1; ++index)
|
|
{
|
|
vector2_1 = WorldGen.digTunnel(vector2_1.X, vector2_1.Y, xDir1, yDir1, WorldGen.genRand.Next(6, 20), WorldGen.genRand.Next(4, 9));
|
|
xDir1 += (float) WorldGen.genRand.Next(-20, 21) * 0.1f;
|
|
yDir1 += (float) WorldGen.genRand.Next(-20, 21) * 0.1f;
|
|
if ((double) xDir1 < -1.5)
|
|
xDir1 = -1.5f;
|
|
if ((double) xDir1 > 1.5)
|
|
xDir1 = 1.5f;
|
|
if ((double) yDir1 < -1.5)
|
|
yDir1 = -1.5f;
|
|
if ((double) yDir1 > 1.5)
|
|
yDir1 = 1.5f;
|
|
float xDir2 = (float) WorldGen.genRand.Next(100) * 0.01f;
|
|
float yDir2 = 1f - xDir2;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
xDir2 = -xDir2;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
yDir2 = -yDir2;
|
|
Vector2 vector2_2 = WorldGen.digTunnel(vector2_1.X, vector2_1.Y, xDir2, yDir2, WorldGen.genRand.Next(30, 50), WorldGen.genRand.Next(3, 6));
|
|
WorldGen.TileRunner((int) vector2_2.X, (int) vector2_2.Y, (double) WorldGen.genRand.Next(10, 20), WorldGen.genRand.Next(5, 10), -1);
|
|
}
|
|
break;
|
|
case 1:
|
|
int num2 = WorldGen.genRand.Next(15, 30);
|
|
float xDir3 = (float) WorldGen.genRand.Next(100) * 0.01f;
|
|
float yDir3 = 1f - xDir3;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
xDir3 = -xDir3;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
yDir3 = -yDir3;
|
|
Vector2 vector2_3 = new Vector2((float) X, (float) Y);
|
|
for (int index = 0; index < num2; ++index)
|
|
{
|
|
vector2_3 = WorldGen.digTunnel(vector2_3.X, vector2_3.Y, xDir3, yDir3, WorldGen.genRand.Next(5, 15), WorldGen.genRand.Next(2, 6), true);
|
|
xDir3 += (float) WorldGen.genRand.Next(-20, 21) * 0.1f;
|
|
yDir3 += (float) WorldGen.genRand.Next(-20, 21) * 0.1f;
|
|
if ((double) xDir3 < -1.5)
|
|
xDir3 = -1.5f;
|
|
if ((double) xDir3 > 1.5)
|
|
xDir3 = 1.5f;
|
|
if ((double) yDir3 < -1.5)
|
|
yDir3 = -1.5f;
|
|
if ((double) yDir3 > 1.5)
|
|
yDir3 = 1.5f;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static Vector2 digTunnel(
|
|
float X,
|
|
float Y,
|
|
float xDir,
|
|
float yDir,
|
|
int Steps,
|
|
int Size,
|
|
bool Wet = false)
|
|
{
|
|
float x = X;
|
|
float y = Y;
|
|
try
|
|
{
|
|
float num1 = 0.0f;
|
|
float num2 = 0.0f;
|
|
int num3 = Steps;
|
|
float num4 = (float) Size;
|
|
x = MathHelper.Clamp(x, num4 + 1f, (float) ((double) Main.maxTilesX - (double) num4 - 1.0));
|
|
y = MathHelper.Clamp(y, num4 + 1f, (float) ((double) Main.maxTilesY - (double) num4 - 1.0));
|
|
for (int index1 = 0; index1 < num3; ++index1)
|
|
{
|
|
for (int index2 = (int) ((double) x - (double) num4); (double) index2 <= (double) x + (double) num4; ++index2)
|
|
{
|
|
for (int index3 = (int) ((double) y - (double) num4); (double) index3 <= (double) y + (double) num4; ++index3)
|
|
{
|
|
if ((double) Math.Abs((float) index2 - x) + (double) Math.Abs((float) index3 - y) < (double) num4 * (1.0 + (double) WorldGen.genRand.Next(-10, 11) * 0.005) && index2 >= 0 && index2 < Main.maxTilesX && index3 >= 0 && index3 < Main.maxTilesY)
|
|
{
|
|
Main.tile[index2, index3].active(false);
|
|
if (Wet)
|
|
Main.tile[index2, index3].liquid = byte.MaxValue;
|
|
}
|
|
}
|
|
}
|
|
num4 += (float) WorldGen.genRand.Next(-50, 51) * 0.03f;
|
|
if ((double) num4 < (double) Size * 0.6)
|
|
num4 = (float) Size * 0.6f;
|
|
if ((double) num4 > (double) (Size * 2))
|
|
num4 = (float) Size * 2f;
|
|
num1 += (float) WorldGen.genRand.Next(-20, 21) * 0.01f;
|
|
num2 += (float) WorldGen.genRand.Next(-20, 21) * 0.01f;
|
|
if ((double) num1 < -1.0)
|
|
num1 = -1f;
|
|
if ((double) num1 > 1.0)
|
|
num1 = 1f;
|
|
if ((double) num2 < -1.0)
|
|
num2 = -1f;
|
|
if ((double) num2 > 1.0)
|
|
num2 = 1f;
|
|
x += (float) (((double) xDir + (double) num1) * 0.600000023841858);
|
|
y += (float) (((double) yDir + (double) num2) * 0.600000023841858);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return new Vector2(x, y);
|
|
}
|
|
|
|
public static void IslandHouse(int i, int j, int islandStyle)
|
|
{
|
|
byte num1 = 202;
|
|
byte num2 = 82;
|
|
Vector2 vector2 = new Vector2((float) i, (float) j);
|
|
int num3 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num3 = -1;
|
|
int num4 = WorldGen.genRand.Next(7, 12);
|
|
int num5 = WorldGen.genRand.Next(5, 7);
|
|
vector2.X = (float) (i + (num4 + 2) * num3);
|
|
for (int index = j - 15; index < j + 30; ++index)
|
|
{
|
|
if (Main.tile[(int) vector2.X, index].active())
|
|
{
|
|
vector2.Y = (float) (index - 1);
|
|
break;
|
|
}
|
|
}
|
|
vector2.X = (float) i;
|
|
int num6 = (int) ((double) vector2.X - (double) num4 - 1.0);
|
|
int num7 = (int) ((double) vector2.X + (double) num4 + 1.0);
|
|
int num8 = (int) ((double) vector2.Y - (double) num5 - 1.0);
|
|
int num9 = (int) ((double) vector2.Y + 2.0);
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesX)
|
|
num7 = Main.maxTilesX;
|
|
if (num8 < 0)
|
|
num8 = 0;
|
|
if (num9 > Main.maxTilesY)
|
|
num9 = Main.maxTilesY;
|
|
for (int index1 = num6; index1 <= num7; ++index1)
|
|
{
|
|
for (int index2 = num8 - 1; index2 < num9 + 1; ++index2)
|
|
{
|
|
if (index2 != num8 - 1 || index1 != num6 && index1 != num7)
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
Main.tile[index1, index2].type = (ushort) num1;
|
|
Main.tile[index1, index2].wall = (ushort) 0;
|
|
Main.tile[index1, index2].halfBrick(false);
|
|
Main.tile[index1, index2].slope((byte) 0);
|
|
}
|
|
}
|
|
}
|
|
int num10 = (int) ((double) vector2.X - (double) num4);
|
|
int num11 = (int) ((double) vector2.X + (double) num4);
|
|
int j1 = (int) ((double) vector2.Y - (double) num5);
|
|
int num12 = (int) ((double) vector2.Y + 1.0);
|
|
if (num10 < 0)
|
|
num10 = 0;
|
|
if (num11 > Main.maxTilesX)
|
|
num11 = Main.maxTilesX;
|
|
if (j1 < 0)
|
|
j1 = 0;
|
|
if (num12 > Main.maxTilesY)
|
|
num12 = Main.maxTilesY;
|
|
for (int index3 = num10; index3 <= num11; ++index3)
|
|
{
|
|
for (int index4 = j1; index4 < num12; ++index4)
|
|
{
|
|
if ((index4 != j1 || index3 != num10 && index3 != num11) && Main.tile[index3, index4].wall == (ushort) 0)
|
|
{
|
|
Main.tile[index3, index4].active(false);
|
|
Main.tile[index3, index4].wall = (ushort) num2;
|
|
}
|
|
}
|
|
}
|
|
int i1 = i + (num4 + 1) * num3;
|
|
int y = (int) vector2.Y;
|
|
for (int index = i1 - 2; index <= i1 + 2; ++index)
|
|
{
|
|
Main.tile[index, y].active(false);
|
|
Main.tile[index, y - 1].active(false);
|
|
Main.tile[index, y - 2].active(false);
|
|
}
|
|
WorldGen.PlaceTile(i1, y, 10, true, style: 9);
|
|
int index5 = i + (num4 + 1) * -num3 - num3;
|
|
for (int index6 = j1; index6 <= num12 + 1; ++index6)
|
|
{
|
|
Main.tile[index5, index6].active(true);
|
|
Main.tile[index5, index6].liquid = (byte) 0;
|
|
Main.tile[index5, index6].type = (ushort) num1;
|
|
Main.tile[index5, index6].wall = (ushort) 0;
|
|
Main.tile[index5, index6].halfBrick(false);
|
|
Main.tile[index5, index6].slope((byte) 0);
|
|
}
|
|
int contain = 0;
|
|
int num13 = WorldGen.houseCount;
|
|
if (num13 > 2)
|
|
num13 = WorldGen.genRand.Next(3);
|
|
switch (num13)
|
|
{
|
|
case 0:
|
|
contain = 159;
|
|
break;
|
|
case 1:
|
|
contain = 65;
|
|
break;
|
|
case 2:
|
|
contain = 158;
|
|
break;
|
|
}
|
|
if (WorldGen.getGoodWorldGen)
|
|
WorldGen.AddBuriedChest(i, y - 3, contain, Style: 2);
|
|
else
|
|
WorldGen.AddBuriedChest(i, y - 3, contain, Style: 13);
|
|
if (islandStyle > 0)
|
|
{
|
|
for (int index7 = 0; index7 < 100000; ++index7)
|
|
{
|
|
int index8 = i + WorldGen.genRand.Next(-50, 51);
|
|
int index9 = y + WorldGen.genRand.Next(21);
|
|
if ((index7 >= 50000 || Main.tile[index8, index9].type != (ushort) 202) && !Main.tile[index8, index9].active())
|
|
{
|
|
WorldGen.Place2xX(index8, index9, (ushort) 207, islandStyle);
|
|
if (Main.tile[index8, index9].active())
|
|
{
|
|
WorldGen.SwitchFountain(index8, index9);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
++WorldGen.houseCount;
|
|
int num14 = i - num4 / 2 + 1;
|
|
int num15 = i + num4 / 2 - 1;
|
|
int num16 = 1;
|
|
if (num4 > 10)
|
|
num16 = 2;
|
|
int num17 = (j1 + num12) / 2 - 1;
|
|
for (int index10 = num14 - num16; index10 <= num14 + num16; ++index10)
|
|
{
|
|
for (int index11 = num17 - 1; index11 <= num17 + 1; ++index11)
|
|
Main.tile[index10, index11].wall = (ushort) 21;
|
|
}
|
|
for (int index12 = num15 - num16; index12 <= num15 + num16; ++index12)
|
|
{
|
|
for (int index13 = num17 - 1; index13 <= num17 + 1; ++index13)
|
|
Main.tile[index12, index13].wall = (ushort) 21;
|
|
}
|
|
int i2 = i + (num4 / 2 + 1) * -num3;
|
|
WorldGen.PlaceTile(i2, num12 - 1, 14, true, style: 7);
|
|
WorldGen.PlaceTile(i2 - 2, num12 - 1, 15, true, plr: 0, style: 10);
|
|
Main.tile[i2 - 2, num12 - 1].frameX += (short) 18;
|
|
Main.tile[i2 - 2, num12 - 2].frameX += (short) 18;
|
|
WorldGen.PlaceTile(i2 + 2, num12 - 1, 15, true, plr: 0, style: 10);
|
|
WorldGen.PlaceTile(num10 + 1, j1, 91, true, style: WorldGen.genRand.Next(7, 10));
|
|
WorldGen.PlaceTile(num11 - 1, j1, 91, true, style: WorldGen.genRand.Next(7, 10));
|
|
int i3;
|
|
int j2;
|
|
if (num3 > 0)
|
|
{
|
|
i3 = num10;
|
|
j2 = j1 + 1;
|
|
}
|
|
else
|
|
{
|
|
i3 = num11;
|
|
j2 = j1 + 1;
|
|
}
|
|
WorldGen.PlaceTile(i3, j2, 91, true, style: WorldGen.genRand.Next(7, 10));
|
|
if (islandStyle != 1)
|
|
return;
|
|
int num18 = WorldGen.genRand.Next(3, 6);
|
|
for (int index14 = 0; index14 < 100000; ++index14)
|
|
{
|
|
int i4 = i + WorldGen.genRand.Next(-50, 51);
|
|
int index15 = y + WorldGen.genRand.Next(-10, 21);
|
|
if (!Main.tile[i4, index15].active())
|
|
{
|
|
WorldGen.GrowPalmTree(i4, index15 + 1);
|
|
if (Main.tile[i4, index15].active())
|
|
--num18;
|
|
}
|
|
if (num18 <= 0)
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void Mountinater(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(80, 120);
|
|
float num2 = (float) WorldGen.genRand.Next(40, 55);
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j + num2 / 2f;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.1f;
|
|
while (num1 > 0.0 && (double) num2 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(4);
|
|
--num2;
|
|
int num3 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num4 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num3 < 0)
|
|
num3 = 0;
|
|
if (num4 > Main.maxTilesX)
|
|
num4 = Main.maxTilesX;
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesY)
|
|
num6 = Main.maxTilesY;
|
|
double num7 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index1 = num3; index1 < num4; ++index1)
|
|
{
|
|
for (int index2 = num5; index2 < num6; ++index2)
|
|
{
|
|
double num8 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num9 = Math.Abs((float) index2 - vector2_1.Y);
|
|
if (Math.Sqrt(num8 * num8 + (double) num9 * (double) num9) < num7 * 0.4 && !Main.tile[index1, index2].active())
|
|
{
|
|
Main.tile[index1, index2].active(true);
|
|
Main.tile[index1, index2].type = (ushort) 0;
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 0.5)
|
|
vector2_2.X = 0.5f;
|
|
if ((double) vector2_2.X < -0.5)
|
|
vector2_2.X = -0.5f;
|
|
if ((double) vector2_2.Y > -0.5)
|
|
vector2_2.Y = -0.5f;
|
|
if ((double) vector2_2.Y < -1.5)
|
|
vector2_2.Y = -1.5f;
|
|
}
|
|
}
|
|
|
|
public static void MakeWateryIceThing(int i, int j)
|
|
{
|
|
if (Main.tile[i, j].liquid <= (byte) 0 || Main.tile[i, j].active() || Main.tile[i, j].lava())
|
|
return;
|
|
int index1 = j;
|
|
while (!Main.tile[i, index1].active() && Main.tile[i, index1].liquid > (byte) 0)
|
|
{
|
|
++index1;
|
|
if (index1 > Main.maxTilesY - 50)
|
|
return;
|
|
}
|
|
if (Main.tile[i, index1].type != (ushort) 147 && Main.tile[i, index1].type != (ushort) 161)
|
|
return;
|
|
int index2 = index1 - 1;
|
|
while (Main.tile[i, index2].liquid > (byte) 0)
|
|
{
|
|
--index2;
|
|
if (index2 < 10)
|
|
return;
|
|
}
|
|
if (Main.tile[i, index2].active())
|
|
return;
|
|
int j1 = index2 + 1;
|
|
if (Main.tile[i, j1].active())
|
|
return;
|
|
for (int i1 = i; !Main.tile[i1, j1].active() && Main.tile[i1, j1].liquid > (byte) 0 && Main.tile[i1, j1 - 1].liquid == (byte) 0 && !Main.tile[i1, j1 - 1].active() && !Main.tile[i1 - 1, j1].halfBrick(); --i1)
|
|
WorldGen.PlaceTile(i1, j1, 162, true);
|
|
for (int i2 = i + 1; !Main.tile[i2, j1].active() && Main.tile[i2, j1].liquid > (byte) 0 && Main.tile[i2, j1 - 1].liquid == (byte) 0 && !Main.tile[i2, j1 - 1].active() && !Main.tile[i2 + 1, j1].halfBrick(); ++i2)
|
|
WorldGen.PlaceTile(i2, j1, 162, true);
|
|
}
|
|
|
|
public static void Lakinater(int i, int j, float strengthMultiplier = 1f)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(25, 50) * (double) strengthMultiplier;
|
|
double num2 = num1;
|
|
float num3 = (float) WorldGen.genRand.Next(30, 80);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
num1 *= 1.5;
|
|
num2 *= 1.5;
|
|
num3 *= 1.2f;
|
|
}
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j - num3 * 0.3f;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-10, 11) * 0.1f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-20, -10) * 0.1f;
|
|
while (num1 > 0.0 && (double) num3 > 0.0)
|
|
{
|
|
if ((double) vector2_1.Y + num2 * 0.5 > Main.worldSurface)
|
|
num3 = 0.0f;
|
|
num1 -= (double) WorldGen.genRand.Next(3);
|
|
--num3;
|
|
int num4 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 > Main.maxTilesX)
|
|
num5 = Main.maxTilesX;
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesY)
|
|
num7 = Main.maxTilesY;
|
|
num2 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index1 = num4; index1 < num5; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num7; ++index2)
|
|
{
|
|
double num8 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num9 = Math.Abs((float) index2 - vector2_1.Y);
|
|
if (Math.Sqrt(num8 * num8 + (double) num9 * (double) num9) < num2 * 0.4)
|
|
{
|
|
if (Main.tile[index1, index2].active())
|
|
Main.tile[index1, index2].liquid = byte.MaxValue;
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > 0.5)
|
|
vector2_2.X = 0.5f;
|
|
if ((double) vector2_2.X < -0.5)
|
|
vector2_2.X = -0.5f;
|
|
if ((double) vector2_2.Y > 1.5)
|
|
vector2_2.Y = 1.5f;
|
|
if ((double) vector2_2.Y < 0.5)
|
|
vector2_2.Y = 0.5f;
|
|
}
|
|
}
|
|
|
|
public static void SonOfLakinater(int i, int j, float strengthMultiplier = 1f)
|
|
{
|
|
bool lava = false;
|
|
if (WorldGen.getGoodWorldGen && WorldGen.genRand.Next(3) == 0)
|
|
lava = true;
|
|
double num1 = (double) WorldGen.genRand.Next(15, 31) * (double) strengthMultiplier;
|
|
float num2 = (float) WorldGen.genRand.Next(30, 61);
|
|
if (WorldGen.genRand.Next(5) == 0)
|
|
{
|
|
num1 *= 1.29999995231628;
|
|
num2 *= 1.3f;
|
|
}
|
|
if (WorldGen.drunkWorldGen)
|
|
{
|
|
num1 *= 1.29999995231628;
|
|
num2 *= 1.3f;
|
|
}
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
float num3 = WorldGen.genRand.NextFloat() * (1f / 500f);
|
|
Vector2 vector2_2;
|
|
if (WorldGen.genRand.Next(4) != 0)
|
|
{
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-15, 16) * 0.01f;
|
|
}
|
|
else
|
|
{
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-50, 51) * 0.01f;
|
|
num3 = (float) ((double) WorldGen.genRand.NextFloat() * 0.00400000018998981 + 1.0 / 1000.0);
|
|
}
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(101) * 0.01f;
|
|
float num4 = num2;
|
|
while (num1 > 3.0 && (double) num2 > 0.0)
|
|
{
|
|
num1 -= (double) WorldGen.genRand.Next(11) * 0.100000001490116;
|
|
--num2;
|
|
int num5 = (int) ((double) vector2_1.X - num1 * 4.0);
|
|
int num6 = (int) ((double) vector2_1.X + num1 * 4.0);
|
|
int num7 = (int) ((double) vector2_1.Y - num1 * 3.0);
|
|
int num8 = (int) ((double) vector2_1.Y + num1 * 2.0);
|
|
if (num5 < 0)
|
|
num5 = 0;
|
|
if (num6 > Main.maxTilesX)
|
|
num6 = Main.maxTilesX;
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesY)
|
|
num8 = Main.maxTilesY;
|
|
double num9 = num1;
|
|
for (int index1 = num5; index1 < num6; ++index1)
|
|
{
|
|
for (int index2 = num7; index2 < num8; ++index2)
|
|
{
|
|
float num10 = Math.Abs((float) index1 - vector2_1.X) * 0.6f;
|
|
float num11 = Math.Abs((float) index2 - vector2_1.Y) * 1.4f;
|
|
float num12 = Math.Abs((float) index1 - vector2_1.X) * 0.3f;
|
|
float num13 = Math.Abs((float) index2 - vector2_1.Y) * 5f;
|
|
float num14 = MathHelper.Lerp(num10, num12, num2 / num4);
|
|
float num15 = MathHelper.Lerp(num11, num13, num2 / num4);
|
|
double num16 = Math.Sqrt((double) num14 * (double) num14 + (double) num15 * (double) num15);
|
|
int num17 = j + 5;
|
|
if (num16 < num9 * 0.4)
|
|
{
|
|
if (index2 >= j)
|
|
{
|
|
if (index2 <= j + 1)
|
|
{
|
|
if (WorldGen.WillWaterPlacedHereStayPut(index1, index2))
|
|
{
|
|
Main.tile[index1, index2].liquid = byte.MaxValue;
|
|
Main.tile[index1, index2].lava(lava);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Main.tile[index1, index2].liquid = byte.MaxValue;
|
|
Main.tile[index1, index2].lava(lava);
|
|
}
|
|
}
|
|
Main.tile[index1, index2].active(false);
|
|
if (!WorldGen.gen)
|
|
WorldGen.SquareTileFrame(index1, index2);
|
|
if (Main.tile[index1, index2].type == (ushort) 59 || Main.tile[index1, index2].type == (ushort) 60)
|
|
{
|
|
WorldGen.SpreadGrass(index1 - 1, index2, 59, 60);
|
|
WorldGen.SpreadGrass(index1 + 1, index2, 59, 60);
|
|
WorldGen.SpreadGrass(index1, index2 + 1, 59, 60);
|
|
}
|
|
}
|
|
else if (index2 > j + 1 && num16 < num9 && Main.tile[index1, index2].liquid == (byte) 0)
|
|
{
|
|
if ((double) Math.Abs((float) index1 - vector2_1.X) * 0.8 < num9 && Main.tile[index1, index2].wall > (ushort) 0 && Main.tile[index1 - 1, index2].wall > (ushort) 0 && Main.tile[index1 + 1, index2].wall > (ushort) 0 && Main.tile[index1, index2 + 1].wall > (ushort) 0)
|
|
Main.tile[index1, index2].active(true);
|
|
}
|
|
else if (index2 < j && (double) num2 == (double) num4 - 1.0 && (double) index2 > WorldGen.worldSurfaceLow - 20.0 && !TileID.Sets.Clouds[(int) Main.tile[index1, index2].type])
|
|
{
|
|
float num18 = (float) Math.Abs(index1 - i) * 0.7f;
|
|
float num19 = (float) Math.Abs(index2 - num17) * 1.35f;
|
|
Math.Sqrt((double) num18 * (double) num18 + (double) num19 * (double) num19);
|
|
float num20 = (float) num9 * 0.4f;
|
|
float num21 = (1f - (float) Math.Abs(index1 - i) / (float) (num6 - i)) * 2.3f;
|
|
float num22 = num21 * num21;
|
|
float num23 = num22 * num22;
|
|
if (index2 < num17 && (double) num18 < (double) num20 + (double) Math.Abs(index2 - num17) * 0.5 * (double) num23)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
if (Main.tile[index1, index2].type == (ushort) 59 || Main.tile[index1, index2].type == (ushort) 60)
|
|
{
|
|
WorldGen.SpreadGrass(index1 - 1, index2, 59, 60);
|
|
WorldGen.SpreadGrass(index1 + 1, index2, 59, 60);
|
|
WorldGen.SpreadGrass(index1, index2 + 1, 59, 60);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-100, 101) * num3;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-100, 101) * 0.01f;
|
|
if ((double) vector2_2.X > 1.0)
|
|
vector2_2.X = 1f;
|
|
if ((double) vector2_2.X < -1.0)
|
|
vector2_2.X = -1f;
|
|
if ((double) vector2_2.Y > 1.0)
|
|
vector2_2.Y = 1f;
|
|
float num24 = (float) (0.5 * (1.0 - (double) num2 / (double) num4));
|
|
if ((double) vector2_2.Y < (double) num24)
|
|
vector2_2.Y = num24;
|
|
}
|
|
}
|
|
|
|
public static void ShroomPatch(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(80, 100);
|
|
float num2 = (float) WorldGen.genRand.Next(20, 26);
|
|
float num3 = (float) (Main.maxTilesX / 4200);
|
|
if (WorldGen.getGoodWorldGen)
|
|
num3 *= 2f;
|
|
double num4 = num1 * (double) num3;
|
|
float num5 = num2 * num3;
|
|
float num6 = num5 - 1f;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j - num5 * 0.3f;
|
|
Vector2 vector2_2;
|
|
vector2_2.X = (float) WorldGen.genRand.Next(-100, 101) * 0.005f;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(-200, -100) * 0.005f;
|
|
while (num4 > 0.0 && (double) num5 > 0.0)
|
|
{
|
|
num4 -= (double) WorldGen.genRand.Next(3);
|
|
--num5;
|
|
int num7 = (int) ((double) vector2_1.X - num4 * 0.5);
|
|
int num8 = (int) ((double) vector2_1.X + num4 * 0.5);
|
|
int num9 = (int) ((double) vector2_1.Y - num4 * 0.5);
|
|
int num10 = (int) ((double) vector2_1.Y + num4 * 0.5);
|
|
if (num7 < 0)
|
|
num7 = 0;
|
|
if (num8 > Main.maxTilesX)
|
|
num8 = Main.maxTilesX;
|
|
if (num9 < 0)
|
|
num9 = 0;
|
|
if (num10 > Main.maxTilesY)
|
|
num10 = Main.maxTilesY;
|
|
double num11 = num4 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index1 = num7; index1 < num8; ++index1)
|
|
{
|
|
for (int index2 = num9; index2 < num10; ++index2)
|
|
{
|
|
double num12 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num13 = Math.Abs((float) (((double) index2 - (double) vector2_1.Y) * 2.29999995231628));
|
|
double num14 = Math.Sqrt(num12 * num12 + (double) num13 * (double) num13);
|
|
if (num14 < num11 * 0.8 && Main.tile[index1, index2].lava())
|
|
Main.tile[index1, index2].liquid = (byte) 0;
|
|
if (num14 < num11 * 0.2 && (double) index2 < (double) vector2_1.Y)
|
|
{
|
|
Main.tile[index1, index2].active(false);
|
|
if (Main.tile[index1, index2].wall > (ushort) 0)
|
|
Main.tile[index1, index2].wall = (ushort) 80;
|
|
}
|
|
else if (num14 < num11 * 0.4 * (0.95 + (double) WorldGen.genRand.NextFloat() * 0.1))
|
|
{
|
|
Main.tile[index1, index2].type = (ushort) 59;
|
|
if ((double) num5 == (double) num6 && (double) index2 > (double) vector2_1.Y)
|
|
Main.tile[index1, index2].active(true);
|
|
if (Main.tile[index1, index2].wall > (ushort) 0)
|
|
Main.tile[index1, index2].wall = (ushort) 80;
|
|
}
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_1.X += vector2_2.X;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-100, 110) * 0.005f;
|
|
vector2_2.Y -= (float) WorldGen.genRand.Next(110) * 0.005f;
|
|
if ((double) vector2_2.X > -0.5 && (double) vector2_2.X < 0.5)
|
|
vector2_2.X = (double) vector2_2.X >= 0.0 ? 0.5f : -0.5f;
|
|
if ((double) vector2_2.X > 0.5)
|
|
vector2_2.X = 0.5f;
|
|
if ((double) vector2_2.X < -0.5)
|
|
vector2_2.X = -0.5f;
|
|
if ((double) vector2_2.Y > 0.5)
|
|
vector2_2.Y = 0.5f;
|
|
if ((double) vector2_2.Y < -0.5)
|
|
vector2_2.Y = -0.5f;
|
|
for (int index = 0; index < 2; ++index)
|
|
{
|
|
int i1 = (int) vector2_1.X + WorldGen.genRand.Next(-20, 20);
|
|
int j1;
|
|
for (j1 = (int) vector2_1.Y + WorldGen.genRand.Next(0, 20); !Main.tile[i1, j1].active() && Main.tile[i1, j1].type != (ushort) 59; j1 = (int) vector2_1.Y + WorldGen.genRand.Next(0, 20))
|
|
i1 = (int) vector2_1.X + WorldGen.genRand.Next(-20, 20);
|
|
int num15 = WorldGen.genRand.Next(10, 20);
|
|
int steps = WorldGen.genRand.Next(10, 20);
|
|
WorldGen.TileRunner(i1, j1, (double) num15, steps, 59, speedY: 2f, noYChange: true);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Cavinator(int i, int j, int steps)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(7, 15);
|
|
int num2 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num2 = -1;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
int num3 = WorldGen.genRand.Next(20, 40);
|
|
Vector2 vector2_2;
|
|
vector2_2.Y = (float) WorldGen.genRand.Next(10, 20) * 0.01f;
|
|
vector2_2.X = (float) num2;
|
|
while (num3 > 0)
|
|
{
|
|
--num3;
|
|
int num4 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 > Main.maxTilesX)
|
|
num5 = Main.maxTilesX;
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesY)
|
|
num7 = Main.maxTilesY;
|
|
double num8 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index1 = num4; index1 < num5; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num7; ++index2)
|
|
{
|
|
double num9 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num10 = Math.Abs((float) index2 - vector2_1.Y);
|
|
if (Math.Sqrt(num9 * num9 + (double) num10 * (double) num10) < num8 * 0.4 && TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[index1, index2].type] && Main.tile[index1, index2].type != (ushort) 53)
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > (double) num2 + 0.5)
|
|
vector2_2.X = (float) num2 + 0.5f;
|
|
if ((double) vector2_2.X < (double) num2 - 0.5)
|
|
vector2_2.X = (float) num2 - 0.5f;
|
|
if ((double) vector2_2.Y > 2.0)
|
|
vector2_2.Y = 2f;
|
|
if ((double) vector2_2.Y < 0.0)
|
|
vector2_2.Y = 0.0f;
|
|
}
|
|
if (steps <= 0 || (double) (int) vector2_1.Y >= Main.rockLayer + 50.0)
|
|
return;
|
|
WorldGen.Cavinator((int) vector2_1.X, (int) vector2_1.Y, steps - 1);
|
|
}
|
|
|
|
public static void CaveOpenater(int i, int j)
|
|
{
|
|
double num1 = (double) WorldGen.genRand.Next(7, 12);
|
|
int num2 = 1;
|
|
if (WorldGen.genRand.Next(2) == 0)
|
|
num2 = -1;
|
|
if (WorldGen.genRand.Next(10) != 0)
|
|
num2 = i >= Main.maxTilesX / 2 ? -1 : 1;
|
|
Vector2 vector2_1;
|
|
vector2_1.X = (float) i;
|
|
vector2_1.Y = (float) j;
|
|
int num3 = 100;
|
|
Vector2 vector2_2;
|
|
vector2_2.Y = 0.0f;
|
|
vector2_2.X = (float) num2;
|
|
while (num3 > 0)
|
|
{
|
|
Tile tile = Main.tile[(int) vector2_1.X, (int) vector2_1.Y];
|
|
if (tile.wall == (ushort) 0 || tile.active() && !TileID.Sets.CanBeClearedDuringGeneration[(int) tile.type])
|
|
num3 = 0;
|
|
--num3;
|
|
int num4 = (int) ((double) vector2_1.X - num1 * 0.5);
|
|
int num5 = (int) ((double) vector2_1.X + num1 * 0.5);
|
|
int num6 = (int) ((double) vector2_1.Y - num1 * 0.5);
|
|
int num7 = (int) ((double) vector2_1.Y + num1 * 0.5);
|
|
if (num4 < 0)
|
|
num4 = 0;
|
|
if (num5 > Main.maxTilesX)
|
|
num5 = Main.maxTilesX;
|
|
if (num6 < 0)
|
|
num6 = 0;
|
|
if (num7 > Main.maxTilesY)
|
|
num7 = Main.maxTilesY;
|
|
double num8 = num1 * (double) WorldGen.genRand.Next(80, 120) * 0.01;
|
|
for (int index1 = num4; index1 < num5; ++index1)
|
|
{
|
|
for (int index2 = num6; index2 < num7; ++index2)
|
|
{
|
|
double num9 = (double) Math.Abs((float) index1 - vector2_1.X);
|
|
float num10 = Math.Abs((float) index2 - vector2_1.Y);
|
|
if (Math.Sqrt(num9 * num9 + (double) num10 * (double) num10) < num8 * 0.4 && TileID.Sets.CanBeClearedDuringGeneration[(int) Main.tile[index1, index2].type])
|
|
Main.tile[index1, index2].active(false);
|
|
}
|
|
}
|
|
vector2_1 += vector2_2;
|
|
vector2_2.X += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
vector2_2.Y += (float) WorldGen.genRand.Next(-10, 11) * 0.05f;
|
|
if ((double) vector2_2.X > (double) num2 + 0.5)
|
|
vector2_2.X = (float) num2 + 0.5f;
|
|
if ((double) vector2_2.X < (double) num2 - 0.5)
|
|
vector2_2.X = (float) num2 - 0.5f;
|
|
if ((double) vector2_2.Y > 0.0)
|
|
vector2_2.Y = 0.0f;
|
|
if ((double) vector2_2.Y < -0.5)
|
|
vector2_2.Y = -0.5f;
|
|
}
|
|
}
|
|
|
|
public static void DiamondTileFrame(int i, int j)
|
|
{
|
|
WorldGen.TileFrame(i - 1, j);
|
|
WorldGen.TileFrame(i, j - 1);
|
|
WorldGen.TileFrame(i, j + 1);
|
|
WorldGen.TileFrame(i + 1, j);
|
|
}
|
|
|
|
public static void SquareTileFrame(int i, int j, bool resetFrame = true)
|
|
{
|
|
WorldGen.TileFrame(i - 1, j - 1);
|
|
WorldGen.TileFrame(i - 1, j);
|
|
WorldGen.TileFrame(i - 1, j + 1);
|
|
WorldGen.TileFrame(i, j - 1);
|
|
WorldGen.TileFrame(i, j, resetFrame);
|
|
WorldGen.TileFrame(i, j + 1);
|
|
WorldGen.TileFrame(i + 1, j - 1);
|
|
WorldGen.TileFrame(i + 1, j);
|
|
WorldGen.TileFrame(i + 1, j + 1);
|
|
}
|
|
|
|
public static void SquareWallFrame(int i, int j, bool resetFrame = true)
|
|
{
|
|
Framing.WallFrame(i - 1, j - 1);
|
|
Framing.WallFrame(i - 1, j);
|
|
Framing.WallFrame(i - 1, j + 1);
|
|
Framing.WallFrame(i, j - 1);
|
|
Framing.WallFrame(i, j, resetFrame);
|
|
Framing.WallFrame(i, j + 1);
|
|
Framing.WallFrame(i + 1, j - 1);
|
|
Framing.WallFrame(i + 1, j);
|
|
Framing.WallFrame(i + 1, j + 1);
|
|
}
|
|
|
|
public static void SectionTileFrameWithCheck(int startX, int startY, int endX, int endY)
|
|
{
|
|
int sectionX1 = Netplay.GetSectionX(startX);
|
|
int sectionY1 = Netplay.GetSectionY(startY);
|
|
int sectionX2 = Netplay.GetSectionX(endX);
|
|
int sectionY2 = Netplay.GetSectionY(endY);
|
|
for (int index1 = sectionX1; index1 <= sectionX2; ++index1)
|
|
{
|
|
for (int index2 = sectionY1; index2 <= sectionY2; ++index2)
|
|
{
|
|
if (Main.sectionManager.SectionLoaded(index1, index2) && !Main.sectionManager.SectionFramed(index1, index2))
|
|
{
|
|
WorldGen.SectionTileFrame(index1, index2, index1, index2);
|
|
if (Main.sectionManager.FrameSectionsLeft == 0)
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void SectionTileFrame(int startX, int startY, int endX, int endY)
|
|
{
|
|
Main.mapTime = Main.mapTimeMax + 10;
|
|
WorldGen.noMapUpdate = true;
|
|
int num1 = startX * 200;
|
|
int num2 = (endX + 1) * 200;
|
|
int num3 = startY * 150;
|
|
int num4 = (endY + 1) * 150;
|
|
if (num1 < 1)
|
|
num1 = 1;
|
|
if (num3 < 1)
|
|
num3 = 1;
|
|
if (num1 > Main.maxTilesX - 2)
|
|
num1 = Main.maxTilesX - 2;
|
|
if (num3 > Main.maxTilesY - 2)
|
|
num3 = Main.maxTilesY - 2;
|
|
if (num2 > Main.maxTilesX - 2)
|
|
num2 = Main.maxTilesX - 2;
|
|
if (num4 > Main.maxTilesY - 2)
|
|
num4 = Main.maxTilesY - 2;
|
|
for (int i = num1 - 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();
|
|
WorldGen.TileFrame(i, j, true, true);
|
|
Framing.WallFrame(i, j, true);
|
|
}
|
|
}
|
|
for (int x = startX; x <= endX; ++x)
|
|
{
|
|
for (int y = startY; y <= endY; ++y)
|
|
Main.sectionManager.SetSectionFramed(x, y);
|
|
}
|
|
WorldGen.noMapUpdate = false;
|
|
}
|
|
|
|
public static void RangeFrame(int startX, int startY, int endX, int endY)
|
|
{
|
|
int num1 = startX;
|
|
int num2 = endX + 1;
|
|
int num3 = startY;
|
|
int num4 = endY + 1;
|
|
for (int i = num1 - 1; i < num2 + 1; ++i)
|
|
{
|
|
for (int j = num3 - 1; j < num4 + 1; ++j)
|
|
{
|
|
WorldGen.TileFrame(i, j);
|
|
Framing.WallFrame(i, j);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void WaterCheck()
|
|
{
|
|
Liquid.tilesIgnoreWater(true);
|
|
Liquid.numLiquid = 0;
|
|
LiquidBuffer.numLiquidBuffer = 0;
|
|
for (int index1 = 1; index1 < Main.maxTilesX - 1; ++index1)
|
|
{
|
|
for (int index2 = Main.maxTilesY - 2; index2 > 0; --index2)
|
|
{
|
|
Tile checkTile = Main.tile[index1, index2];
|
|
checkTile.checkingLiquid(false);
|
|
if (checkTile.liquid > (byte) 0 && checkTile.nactive() && Main.tileSolid[(int) checkTile.type] && !Main.tileSolidTop[(int) checkTile.type])
|
|
checkTile.liquid = (byte) 0;
|
|
else if (checkTile.liquid > (byte) 0)
|
|
{
|
|
if (checkTile.active())
|
|
{
|
|
if (checkTile.lava())
|
|
{
|
|
if (TileObjectData.CheckLavaDeath(checkTile))
|
|
WorldGen.KillTile(index1, index2);
|
|
}
|
|
else if (TileObjectData.CheckWaterDeath(checkTile))
|
|
WorldGen.KillTile(index1, index2);
|
|
}
|
|
Tile tile1 = Main.tile[index1, index2 + 1];
|
|
if ((!tile1.nactive() || !Main.tileSolid[(int) tile1.type] || Main.tileSolidTop[(int) tile1.type]) && tile1.liquid < byte.MaxValue)
|
|
{
|
|
if (tile1.liquid > (byte) 250)
|
|
tile1.liquid = byte.MaxValue;
|
|
else
|
|
Liquid.AddWater(index1, index2);
|
|
}
|
|
Tile tile2 = Main.tile[index1 - 1, index2];
|
|
Tile tile3 = Main.tile[index1 + 1, index2];
|
|
if ((!tile2.nactive() || !Main.tileSolid[(int) tile2.type] || Main.tileSolidTop[(int) tile2.type]) && (int) tile2.liquid != (int) checkTile.liquid)
|
|
Liquid.AddWater(index1, index2);
|
|
else if ((!tile3.nactive() || !Main.tileSolid[(int) tile3.type] || Main.tileSolidTop[(int) tile3.type]) && (int) tile3.liquid != (int) checkTile.liquid)
|
|
Liquid.AddWater(index1, index2);
|
|
if (checkTile.lava())
|
|
{
|
|
if (tile2.liquid > (byte) 0 && !tile2.lava())
|
|
Liquid.AddWater(index1, index2);
|
|
else if (tile3.liquid > (byte) 0 && !tile3.lava())
|
|
Liquid.AddWater(index1, index2);
|
|
else if (Main.tile[index1, index2 - 1].liquid > (byte) 0 && !Main.tile[index1, index2 - 1].lava())
|
|
Liquid.AddWater(index1, index2);
|
|
else if (tile1.liquid > (byte) 0 && !tile1.lava())
|
|
Liquid.AddWater(index1, index2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Liquid.tilesIgnoreWater(false);
|
|
}
|
|
|
|
public static void EveryTileFrame()
|
|
{
|
|
Stopwatch stopwatch = new Stopwatch();
|
|
stopwatch.Start();
|
|
WorldGen.noLiquidCheck = true;
|
|
WorldGen.noTileActions = true;
|
|
for (int i = 0; i < Main.maxTilesX; ++i)
|
|
{
|
|
float num = (float) i / (float) Main.maxTilesX;
|
|
Main.statusText = Lang.gen[55].Value + " " + (object) (int) ((double) num * 100.0 + 1.0) + "%";
|
|
for (int j = 0; j < Main.maxTilesY; ++j)
|
|
{
|
|
if (Main.tile[i, j].active())
|
|
WorldGen.TileFrame(i, j, true);
|
|
if (Main.tile[i, j].wall > (ushort) 0)
|
|
Framing.WallFrame(i, j, true);
|
|
}
|
|
}
|
|
WorldGen.noLiquidCheck = false;
|
|
WorldGen.noTileActions = false;
|
|
long elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
|
|
}
|
|
|
|
public static void PlantCheck(int x, int y)
|
|
{
|
|
x = Utils.Clamp<int>(x, 1, Main.maxTilesX - 2);
|
|
y = Utils.Clamp<int>(y, 1, Main.maxTilesY - 2);
|
|
for (int index1 = x - 1; index1 <= x + 1; ++index1)
|
|
{
|
|
for (int index2 = y - 1; index2 <= y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
return;
|
|
}
|
|
}
|
|
int num1 = -1;
|
|
int num2 = (int) Main.tile[x, y].type;
|
|
int num3 = x - 1;
|
|
int num4 = x + 1;
|
|
int maxTilesX = Main.maxTilesX;
|
|
int num5 = y - 1;
|
|
if (y + 1 >= Main.maxTilesY)
|
|
num1 = num2;
|
|
if (x - 1 >= 0 && Main.tile[x - 1, y] != null && Main.tile[x - 1, y].nactive())
|
|
{
|
|
int type1 = (int) Main.tile[x - 1, y].type;
|
|
}
|
|
if (x + 1 < Main.maxTilesX && Main.tile[x + 1, y] != null && Main.tile[x + 1, y].nactive())
|
|
{
|
|
int type2 = (int) Main.tile[x + 1, y].type;
|
|
}
|
|
if (y - 1 >= 0 && Main.tile[x, y - 1] != null && Main.tile[x, y - 1].nactive())
|
|
{
|
|
int type3 = (int) Main.tile[x, y - 1].type;
|
|
}
|
|
if (y + 1 < Main.maxTilesY && Main.tile[x, y + 1] != null && Main.tile[x, y + 1].nactive() && !Main.tile[x, y + 1].halfBrick() && Main.tile[x, y + 1].slope() == (byte) 0)
|
|
num1 = (int) Main.tile[x, y + 1].type;
|
|
if (x - 1 >= 0 && y - 1 >= 0 && Main.tile[x - 1, y - 1] != null && Main.tile[x - 1, y - 1].nactive())
|
|
{
|
|
int type4 = (int) Main.tile[x - 1, y - 1].type;
|
|
}
|
|
if (x + 1 < Main.maxTilesX && y - 1 >= 0 && Main.tile[x + 1, y - 1] != null && Main.tile[x + 1, y - 1].nactive())
|
|
{
|
|
int type5 = (int) Main.tile[x + 1, y - 1].type;
|
|
}
|
|
if (x - 1 >= 0 && y + 1 < Main.maxTilesY && Main.tile[x - 1, y + 1] != null && Main.tile[x - 1, y + 1].nactive())
|
|
{
|
|
int type6 = (int) Main.tile[x - 1, y + 1].type;
|
|
}
|
|
if (x + 1 < Main.maxTilesX && y + 1 < Main.maxTilesY && Main.tile[x + 1, y + 1] != null && Main.tile[x + 1, y + 1].nactive())
|
|
{
|
|
int type7 = (int) Main.tile[x + 1, y + 1].type;
|
|
}
|
|
if ((num2 != 3 || num1 == 2 || num1 == 477 || num1 == 78 || num1 == 380 || num1 == 579) && (num2 != 73 || num1 == 2 || num1 == 477 || num1 == 78 || num1 == 380 || num1 == 579) && (num2 != 24 || num1 == 23) && (num2 != 61 || num1 == 60) && (num2 != 74 || num1 == 60) && (num2 != 71 || num1 == 70) && (num2 != 110 || num1 == 109 || num1 == 492) && (num2 != 113 || num1 == 109 || num1 == 492) && (num2 != 201 || num1 == 199))
|
|
return;
|
|
if ((num2 == 3 || num2 == 73) && num1 != 2 && num1 != 477 && Main.tile[x, y].frameX >= (short) 162)
|
|
Main.tile[x, y].frameX = (short) 126;
|
|
if (num2 == 74 && num1 != 60 && Main.tile[x, y].frameX >= (short) 162)
|
|
Main.tile[x, y].frameX = (short) 126;
|
|
if (num1 == 23)
|
|
{
|
|
num2 = 24;
|
|
if (Main.tile[x, y].frameX >= (short) 162)
|
|
Main.tile[x, y].frameX = (short) 126;
|
|
}
|
|
else if (num1 == 2 || num1 == 477)
|
|
num2 = num2 != 113 ? 3 : 73;
|
|
else if (num1 == 109 || num1 == 492)
|
|
{
|
|
num2 = num2 != 73 ? 110 : 113;
|
|
}
|
|
else
|
|
{
|
|
switch (num1)
|
|
{
|
|
case 70:
|
|
num2 = 71;
|
|
while (Main.tile[x, y].frameX > (short) 72)
|
|
Main.tile[x, y].frameX -= (short) 72;
|
|
break;
|
|
case 199:
|
|
num2 = 201;
|
|
break;
|
|
}
|
|
}
|
|
if (num2 != (int) Main.tile[x, y].type)
|
|
Main.tile[x, y].type = (ushort) num2;
|
|
else
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static bool CanPoundTile(int x, int y)
|
|
{
|
|
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 + 1] == null)
|
|
Main.tile[x, y + 1] = new Tile();
|
|
switch (Main.tile[x, y].type)
|
|
{
|
|
case 10:
|
|
case 48:
|
|
case 137:
|
|
case 138:
|
|
case 232:
|
|
case 380:
|
|
case 387:
|
|
case 388:
|
|
case 476:
|
|
case 484:
|
|
return false;
|
|
default:
|
|
if (WorldGen.gen && (Main.tile[x, y].type == (ushort) 190 || Main.tile[x, y].type == (ushort) 30))
|
|
return false;
|
|
if (Main.tile[x, y - 1].active())
|
|
{
|
|
switch (Main.tile[x, y - 1].type)
|
|
{
|
|
case 21:
|
|
case 26:
|
|
case 77:
|
|
case 88:
|
|
case 235:
|
|
case 237:
|
|
case 441:
|
|
case 467:
|
|
case 468:
|
|
case 470:
|
|
case 475:
|
|
case 488:
|
|
case 597:
|
|
return false;
|
|
}
|
|
}
|
|
return WorldGen.CanKillTile(x, y);
|
|
}
|
|
}
|
|
|
|
public static bool SlopeTile(int i, int j, int slope = 0, bool noEffects = false)
|
|
{
|
|
if (!WorldGen.CanPoundTile(i, j))
|
|
return false;
|
|
Main.tile[i, j].halfBrick(false);
|
|
Main.tile[i, j].slope((byte) slope);
|
|
if (!WorldGen.gen)
|
|
{
|
|
if (!noEffects)
|
|
WorldGen.KillTile(i, j, true, true);
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
if (Main.tile[i, j].slope() == (byte) 0)
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(i * 16, j * 16, 16, 16);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && !Main.player[index].dead && rectangle.Intersects(new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X, (int) Main.player[index].position.Y, Main.player[index].width, Main.player[index].height)))
|
|
{
|
|
Main.player[index].gfxOffY += Main.player[index].position.Y + (float) Main.player[index].height - (float) rectangle.Y;
|
|
Main.player[index].position.Y = (float) (rectangle.Y - Main.player[index].height);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool PoundTile(int i, int j)
|
|
{
|
|
if (!WorldGen.CanPoundTile(i, j))
|
|
return false;
|
|
if (!Main.tile[i, j].halfBrick())
|
|
Main.tile[i, j].halfBrick(true);
|
|
else
|
|
Main.tile[i, j].halfBrick(false);
|
|
if (!WorldGen.gen)
|
|
{
|
|
WorldGen.KillTile(i, j, true, true);
|
|
SoundEngine.PlaySound(0, i * 16, j * 16);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
if (!Main.tile[i, j].halfBrick())
|
|
{
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(i * 16, j * 16, 16, 16);
|
|
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
|
{
|
|
if (Main.player[index].active && !Main.player[index].dead && rectangle.Intersects(new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X, (int) Main.player[index].position.Y, Main.player[index].width, Main.player[index].height)))
|
|
{
|
|
Main.player[index].gfxOffY += Main.player[index].position.Y + (float) Main.player[index].height - (float) rectangle.Y;
|
|
Main.player[index].position.Y = (float) (rectangle.Y - Main.player[index].height);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void PoundPlatform(int x, int y)
|
|
{
|
|
if (Main.tile[x, y].halfBrick())
|
|
{
|
|
WorldGen.PoundTile(x, y);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(17, number: 7, number2: ((float) x), number3: ((float) y), number4: 1f);
|
|
}
|
|
else
|
|
{
|
|
int slope1 = 1;
|
|
int slope2 = 2;
|
|
if (TileID.Sets.Platforms[(int) Main.tile[x + 1, y - 1].type] || TileID.Sets.Platforms[(int) Main.tile[x - 1, y + 1].type] || WorldGen.SolidTile(x + 1, y) && !WorldGen.SolidTile(x - 1, y))
|
|
{
|
|
slope1 = 2;
|
|
slope2 = 1;
|
|
}
|
|
if (Main.tile[x, y].slope() == (byte) 0)
|
|
{
|
|
WorldGen.SlopeTile(x, y, slope1);
|
|
int num = (int) Main.tile[x, y].slope();
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(17, number: 14, number2: ((float) x), number3: ((float) y), number4: ((float) num));
|
|
}
|
|
else if ((int) Main.tile[x, y].slope() == slope1)
|
|
{
|
|
WorldGen.SlopeTile(x, y, slope2);
|
|
int num = (int) Main.tile[x, y].slope();
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(17, number: 14, number2: ((float) x), number3: ((float) y), number4: ((float) num));
|
|
}
|
|
else
|
|
{
|
|
WorldGen.SlopeTile(x, y);
|
|
int num = (int) Main.tile[x, y].slope();
|
|
if (Main.netMode == 1)
|
|
NetMessage.SendData(17, number: 14, number2: ((float) x), number3: ((float) y), number4: ((float) num));
|
|
WorldGen.PoundTile(x, y);
|
|
if (Main.netMode != 1)
|
|
return;
|
|
NetMessage.SendData(17, number: 7, number2: ((float) x), number3: ((float) y), number4: 1f);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int PlatformProperSides(int x, int y, bool acceptNonOpposing = false)
|
|
{
|
|
Tile tile = Main.tile[x, y];
|
|
if (!tile.active() || !TileID.Sets.Platforms[(int) tile.type])
|
|
return 0;
|
|
int num1 = (int) tile.slope();
|
|
int num2 = -1;
|
|
if (num1 == 1)
|
|
num2 = 2;
|
|
if (num1 == 2)
|
|
num2 = 1;
|
|
int num3 = 0;
|
|
int num4 = 1;
|
|
int num5 = 0;
|
|
if (num1 == 1)
|
|
num5 = 1;
|
|
if (num1 == 2)
|
|
num5 = -1;
|
|
if (acceptNonOpposing)
|
|
{
|
|
if (Main.tile[x + num4, y + num5].active() && TileID.Sets.Platforms[(int) Main.tile[x + num4, y + num5].type] && (int) Main.tile[x + num4, y + num5].slope() != num2)
|
|
++num3;
|
|
}
|
|
else if (Main.tile[x + num4, y + num5].active() && TileID.Sets.Platforms[(int) Main.tile[x + num4, y + num5].type] && (int) Main.tile[x + num4, y + num5].slope() == num1)
|
|
++num3;
|
|
int num6 = num4 * -1;
|
|
int num7 = num5 * -1;
|
|
if (acceptNonOpposing)
|
|
{
|
|
if (Main.tile[x + num6, y + num7].active() && TileID.Sets.Platforms[(int) Main.tile[x + num6, y + num7].type] && (int) Main.tile[x + num6, y + num7].slope() != num2)
|
|
++num3;
|
|
}
|
|
else if (Main.tile[x + num6, y + num7].active() && TileID.Sets.Platforms[(int) Main.tile[x + num6, y + num7].type] && (int) Main.tile[x + num6, y + num7].slope() == num1)
|
|
++num3;
|
|
return num3;
|
|
}
|
|
|
|
public static bool UpdateMapTile(int i, int j, bool addToList = true)
|
|
{
|
|
bool flag = false;
|
|
if (Main.mapEnabled && !WorldGen.noMapUpdate && !WorldGen.gen && ((Main.Map[i, j].Light <= (byte) 0 ? 0 : (Main.Map.UpdateType(i, j) ? 1 : 0)) & (addToList ? 1 : 0)) != 0)
|
|
{
|
|
flag = true;
|
|
if (MapHelper.numUpdateTile < MapHelper.maxUpdateTile - 1)
|
|
{
|
|
MapHelper.updateTileX[MapHelper.numUpdateTile] = (short) i;
|
|
MapHelper.updateTileY[MapHelper.numUpdateTile] = (short) j;
|
|
++MapHelper.numUpdateTile;
|
|
}
|
|
else
|
|
Main.refreshMap = true;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static void TileMergeAttemptFrametest(
|
|
int i,
|
|
int j,
|
|
int myType,
|
|
int lookfor,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (up == lookfor)
|
|
{
|
|
WorldGen.TileFrame(i, j - 1);
|
|
if (WorldGen.mergeDown)
|
|
up = myType;
|
|
}
|
|
if (down == lookfor)
|
|
{
|
|
WorldGen.TileFrame(i, j + 1);
|
|
if (WorldGen.mergeUp)
|
|
down = myType;
|
|
}
|
|
if (left == lookfor)
|
|
{
|
|
WorldGen.TileFrame(i - 1, j);
|
|
if (WorldGen.mergeRight)
|
|
left = myType;
|
|
}
|
|
if (right == lookfor)
|
|
{
|
|
WorldGen.TileFrame(i + 1, j);
|
|
if (WorldGen.mergeLeft)
|
|
right = myType;
|
|
}
|
|
if (upLeft == lookfor)
|
|
upLeft = myType;
|
|
if (upRight == lookfor)
|
|
upRight = myType;
|
|
if (downLeft == lookfor)
|
|
downLeft = myType;
|
|
if (downRight != lookfor)
|
|
return;
|
|
downRight = myType;
|
|
}
|
|
|
|
public static void TileMergeAttemptFrametest(
|
|
int i,
|
|
int j,
|
|
int myType,
|
|
bool[] lookfor,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (up > -1 && lookfor[up])
|
|
{
|
|
WorldGen.TileFrame(i, j - 1);
|
|
if (WorldGen.mergeDown)
|
|
up = myType;
|
|
}
|
|
if (down > -1 && lookfor[down])
|
|
{
|
|
WorldGen.TileFrame(i, j + 1);
|
|
if (WorldGen.mergeUp)
|
|
down = myType;
|
|
}
|
|
if (left > -1 && lookfor[left])
|
|
{
|
|
WorldGen.TileFrame(i - 1, j);
|
|
if (WorldGen.mergeRight)
|
|
left = myType;
|
|
}
|
|
if (right > -1 && lookfor[right])
|
|
{
|
|
WorldGen.TileFrame(i + 1, j);
|
|
if (WorldGen.mergeLeft)
|
|
right = myType;
|
|
}
|
|
if (upLeft > -1 && lookfor[upLeft])
|
|
upLeft = myType;
|
|
if (upRight > -1 && lookfor[upRight])
|
|
upRight = myType;
|
|
if (downLeft > -1 && lookfor[downLeft])
|
|
downLeft = myType;
|
|
if (downRight <= -1 || !lookfor[downRight])
|
|
return;
|
|
downRight = myType;
|
|
}
|
|
|
|
public static void TileMergeAttempt(
|
|
int myType,
|
|
int lookfor,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right)
|
|
{
|
|
if (lookfor == up)
|
|
up = myType;
|
|
if (lookfor == down)
|
|
down = myType;
|
|
if (lookfor == left)
|
|
left = myType;
|
|
if (lookfor != right)
|
|
return;
|
|
right = myType;
|
|
}
|
|
|
|
public static void TileMergeAttempt(
|
|
int myType,
|
|
int lookfor,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (lookfor == up)
|
|
up = myType;
|
|
if (lookfor == down)
|
|
down = myType;
|
|
if (lookfor == left)
|
|
left = myType;
|
|
if (lookfor == right)
|
|
right = myType;
|
|
if (lookfor == upLeft)
|
|
upLeft = myType;
|
|
if (lookfor == upRight)
|
|
upRight = myType;
|
|
if (lookfor == downLeft)
|
|
downLeft = myType;
|
|
if (lookfor != downRight)
|
|
return;
|
|
downRight = myType;
|
|
}
|
|
|
|
public static void TileMergeAttempt(
|
|
int myType,
|
|
bool[] lookfor,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (up > -1 && lookfor[up])
|
|
up = myType;
|
|
if (down > -1 && lookfor[down])
|
|
down = myType;
|
|
if (left > -1 && lookfor[left])
|
|
left = myType;
|
|
if (right > -1 && lookfor[right])
|
|
right = myType;
|
|
if (upLeft > -1 && lookfor[upLeft])
|
|
upLeft = myType;
|
|
if (upRight > -1 && lookfor[upRight])
|
|
upRight = myType;
|
|
if (downLeft > -1 && lookfor[downLeft])
|
|
downLeft = myType;
|
|
if (downRight <= -1 || !lookfor[downRight])
|
|
return;
|
|
downRight = myType;
|
|
}
|
|
|
|
public static void TileMergeAttempt(
|
|
int myType,
|
|
bool[] lookfor,
|
|
bool[] exclude,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (up > -1 && !exclude[up] && lookfor[up])
|
|
up = myType;
|
|
if (down > -1 && !exclude[down] && lookfor[down])
|
|
down = myType;
|
|
if (left > -1 && !exclude[left] && lookfor[left])
|
|
left = myType;
|
|
if (right > -1 && !exclude[right] && lookfor[right])
|
|
right = myType;
|
|
if (upLeft > -1 && !exclude[upLeft] && lookfor[upLeft])
|
|
upLeft = myType;
|
|
if (upRight > -1 && !exclude[upRight] && lookfor[upRight])
|
|
upRight = myType;
|
|
if (downLeft > -1 && !exclude[downLeft] && lookfor[downLeft])
|
|
downLeft = myType;
|
|
if (downRight <= -1 || exclude[downRight] || !lookfor[downRight])
|
|
return;
|
|
downRight = myType;
|
|
}
|
|
|
|
public static void TileMergeAttemptWeird(
|
|
int myType,
|
|
int changeTo,
|
|
bool[] exclude,
|
|
ref int up,
|
|
ref int down,
|
|
ref int left,
|
|
ref int right,
|
|
ref int upLeft,
|
|
ref int upRight,
|
|
ref int downLeft,
|
|
ref int downRight)
|
|
{
|
|
if (up > -1 && !exclude[up] && up != myType)
|
|
up = changeTo;
|
|
if (down > -1 && !exclude[down] && down != myType)
|
|
down = changeTo;
|
|
if (left > -1 && !exclude[left] && left != myType)
|
|
left = changeTo;
|
|
if (right > -1 && !exclude[right] && right != myType)
|
|
right = changeTo;
|
|
if (upLeft > -1 && !exclude[upLeft] && upLeft != myType)
|
|
upLeft = changeTo;
|
|
if (upRight > -1 && !exclude[upRight] && upRight != myType)
|
|
upRight = changeTo;
|
|
if (downLeft > -1 && !exclude[downLeft] && downLeft != myType)
|
|
downLeft = changeTo;
|
|
if (downRight <= -1 || exclude[downRight] || downRight == myType)
|
|
return;
|
|
downRight = changeTo;
|
|
}
|
|
|
|
public static int GetTileMossColor(int tileType)
|
|
{
|
|
switch (tileType)
|
|
{
|
|
case 179:
|
|
case 512:
|
|
return 0;
|
|
case 180:
|
|
case 513:
|
|
return 1;
|
|
case 181:
|
|
case 514:
|
|
return 2;
|
|
case 182:
|
|
case 515:
|
|
return 3;
|
|
case 183:
|
|
case 516:
|
|
return 4;
|
|
case 381:
|
|
case 517:
|
|
return 5;
|
|
case 534:
|
|
case 535:
|
|
return 6;
|
|
case 536:
|
|
case 537:
|
|
return 7;
|
|
case 539:
|
|
case 540:
|
|
return 8;
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
public static void CheckFoodPlatter(int x, int y, int type)
|
|
{
|
|
if (Main.tile[x, y] == null || WorldGen.destroyObject || WorldGen.SolidTileAllowBottomSlope(x, y + 1))
|
|
return;
|
|
if (type == 520)
|
|
{
|
|
int key = TEFoodPlatter.Find(x, y);
|
|
if (key != -1 && ((TEFoodPlatter) TileEntity.ByID[key]).item.stack > 0)
|
|
{
|
|
((TEFoodPlatter) TileEntity.ByID[key]).DropItem();
|
|
if (Main.netMode != 2)
|
|
Main.LocalPlayer.InterruptItemUsageIfOverTile(520);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = true;
|
|
if ((int) Main.tile[x, y].type == type)
|
|
WorldGen.KillTile(x, y);
|
|
if (type == 520)
|
|
TEFoodPlatter.Kill(x, y);
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
public static bool SkipFramingBecauseOfGen => WorldGen.generatingWorld && WorldGen.skipFramingDuringGen;
|
|
|
|
public static void TileFrame(int i, int j, bool resetFrame = false, bool noBreak = false)
|
|
{
|
|
bool addToList = false;
|
|
try
|
|
{
|
|
if (i > 5)
|
|
{
|
|
if (j > 5)
|
|
{
|
|
if (i < Main.maxTilesX - 5)
|
|
{
|
|
if (j < Main.maxTilesY - 5)
|
|
{
|
|
if (Main.tile[i, j] != null)
|
|
{
|
|
if (WorldGen.SkipFramingBecauseOfGen && !Main.tileFrameImportant[(int) Main.tile[i, j].type])
|
|
return;
|
|
addToList = WorldGen.UpdateMapTile(i, j);
|
|
Tile tile1 = Main.tile[i, j];
|
|
if (!tile1.active())
|
|
{
|
|
tile1.halfBrick(false);
|
|
tile1.color((byte) 0);
|
|
tile1.slope((byte) 0);
|
|
}
|
|
if (tile1.liquid > (byte) 0 && Main.netMode != 1 && !WorldGen.noLiquidCheck)
|
|
Liquid.AddWater(i, j);
|
|
if (tile1.active())
|
|
{
|
|
if (noBreak && Main.tileFrameImportant[(int) tile1.type] && tile1.type != (ushort) 4)
|
|
return;
|
|
int index1 = (int) tile1.type;
|
|
if (Main.tileStone[index1])
|
|
index1 = 1;
|
|
int frameX = (int) tile1.frameX;
|
|
int frameY = (int) tile1.frameY;
|
|
Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(-1, -1, 0, 0);
|
|
if (Main.tileFrameImportant[(int) tile1.type])
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 4:
|
|
WorldGen.CheckTorch(i, j);
|
|
return;
|
|
case 136:
|
|
Tile tile2 = Main.tile[i, j - 1];
|
|
Tile tile3 = Main.tile[i, j + 1];
|
|
Tile tile4 = Main.tile[i - 1, j];
|
|
Tile tile5 = Main.tile[i + 1, j];
|
|
Tile tile6 = Main.tile[i - 1, j + 1];
|
|
Tile tile7 = Main.tile[i + 1, j + 1];
|
|
Tile tile8 = Main.tile[i - 1, j - 1];
|
|
Tile tile9 = Main.tile[i + 1, j - 1];
|
|
int index2 = -1;
|
|
int tree1 = -1;
|
|
int tree2 = -1;
|
|
int tree3 = -1;
|
|
int tree4 = -1;
|
|
int tree5 = -1;
|
|
int tree6 = -1;
|
|
if (tile2 != null && tile2.nactive())
|
|
{
|
|
int type = (int) tile2.type;
|
|
}
|
|
if (tile3 != null && tile3.nactive() && !tile3.halfBrick() && !tile3.topSlope())
|
|
index2 = (int) tile3.type;
|
|
if (tile4 != null && tile4.nactive())
|
|
tree1 = (int) tile4.type;
|
|
if (tile5 != null && tile5.nactive())
|
|
tree2 = (int) tile5.type;
|
|
if (tile6 != null && tile6.nactive())
|
|
tree3 = (int) tile6.type;
|
|
if (tile7 != null && tile7.nactive())
|
|
tree4 = (int) tile7.type;
|
|
if (tile8 != null && tile8.nactive())
|
|
tree5 = (int) tile8.type;
|
|
if (tile9 != null && tile9.nactive())
|
|
tree6 = (int) tile9.type;
|
|
if (index2 >= 0 && Main.tileSolid[index2] && !Main.tileNoAttach[index2] && !tile3.halfBrick() && (tile3.slope() == (byte) 0 || tile3.bottomSlope()))
|
|
{
|
|
tile1.frameX = (short) 0;
|
|
return;
|
|
}
|
|
if (tree1 >= 0 && Main.tileSolid[tree1] && !Main.tileNoAttach[tree1] && (tile4.leftSlope() || tile4.slope() == (byte) 0) && !tile4.halfBrick() || tree1 >= 0 && TileID.Sets.IsBeam[tree1] || WorldGen.IsTreeType(tree1) && WorldGen.IsTreeType(tree5) && WorldGen.IsTreeType(tree3))
|
|
{
|
|
tile1.frameX = (short) 18;
|
|
return;
|
|
}
|
|
if (tree2 >= 0 && Main.tileSolid[tree2] && !Main.tileNoAttach[tree2] && (tile5.rightSlope() || tile5.slope() == (byte) 0) && !tile5.halfBrick() || tree2 >= 0 && TileID.Sets.IsBeam[tree2] || WorldGen.IsTreeType(tree2) && WorldGen.IsTreeType(tree6) && WorldGen.IsTreeType(tree4))
|
|
{
|
|
tile1.frameX = (short) 36;
|
|
return;
|
|
}
|
|
if (tile1.wall > (ushort) 0)
|
|
{
|
|
tile1.frameX = (short) 54;
|
|
return;
|
|
}
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
case 442:
|
|
WorldGen.CheckProjectilePressurePad(i, j);
|
|
return;
|
|
case 518:
|
|
WorldGen.CheckLilyPad(i, j);
|
|
return;
|
|
case 519:
|
|
WorldGen.CheckCatTail(i, j);
|
|
return;
|
|
case 549:
|
|
WorldGen.CheckUnderwaterPlant((ushort) 549, i, j);
|
|
return;
|
|
case 571:
|
|
WorldGen.CheckBamboo(i, j);
|
|
return;
|
|
default:
|
|
if (index1 == 129 || index1 == 149)
|
|
{
|
|
Tile tile10 = Main.tile[i, j - 1];
|
|
Tile tile11 = Main.tile[i, j + 1];
|
|
Tile tile12 = Main.tile[i - 1, j];
|
|
Tile tile13 = Main.tile[i + 1, j];
|
|
int index3 = -1;
|
|
int index4 = -1;
|
|
int index5 = -1;
|
|
int index6 = -1;
|
|
if (tile10 != null && tile10.nactive() && !tile10.bottomSlope())
|
|
index4 = (int) tile10.type;
|
|
if (tile11 != null && tile11.nactive() && !tile11.halfBrick() && !tile11.topSlope())
|
|
index3 = (int) tile11.type;
|
|
if (tile12 != null && tile12.nactive())
|
|
index5 = (int) tile12.type;
|
|
if (tile13 != null && tile13.nactive())
|
|
index6 = (int) tile13.type;
|
|
if (index3 >= 0 && Main.tileSolid[index3] && !Main.tileSolidTop[index3])
|
|
{
|
|
tile1.frameY = (short) 0;
|
|
return;
|
|
}
|
|
if (index5 >= 0 && Main.tileSolid[index5] && !Main.tileSolidTop[index5])
|
|
{
|
|
tile1.frameY = (short) 54;
|
|
return;
|
|
}
|
|
if (index6 >= 0 && Main.tileSolid[index6] && !Main.tileSolidTop[index6])
|
|
{
|
|
tile1.frameY = (short) 36;
|
|
return;
|
|
}
|
|
if (index4 >= 0 && Main.tileSolid[index4] && !Main.tileSolidTop[index4])
|
|
{
|
|
tile1.frameY = (short) 18;
|
|
return;
|
|
}
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
}
|
|
if (index1 >= 373 && index1 <= 375 || index1 == 461)
|
|
{
|
|
Tile tile14 = Main.tile[i, j - 1];
|
|
if (tile14 != null && tile14.active() && !tile14.bottomSlope() && Main.tileSolid[(int) tile14.type] && !Main.tileSolidTop[(int) tile14.type])
|
|
return;
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 178:
|
|
Tile tile15 = Main.tile[i, j - 1];
|
|
Tile tile16 = Main.tile[i, j + 1];
|
|
Tile tile17 = Main.tile[i - 1, j];
|
|
Tile tile18 = Main.tile[i + 1, j];
|
|
int index7 = -1;
|
|
int index8 = -1;
|
|
int index9 = -1;
|
|
int index10 = -1;
|
|
if (tile15 != null && tile15.nactive() && !tile15.bottomSlope())
|
|
index8 = (int) tile15.type;
|
|
if (tile16 != null && tile16.nactive() && !tile16.halfBrick() && !tile16.topSlope())
|
|
index7 = (int) tile16.type;
|
|
if (tile17 != null && tile17.nactive() && !tile17.halfBrick() && !tile17.rightSlope())
|
|
index9 = (int) tile17.type;
|
|
if (tile18 != null && tile18.nactive() && !tile18.halfBrick() && !tile18.leftSlope())
|
|
index10 = (int) tile18.type;
|
|
if (index9 == 10)
|
|
index9 = -1;
|
|
if (index10 == 10)
|
|
index10 = -1;
|
|
short num1 = (short) (WorldGen.genRand.Next(3) * 18);
|
|
if (index7 >= 0 && Main.tileSolid[index7] && !Main.tileSolidTop[index7])
|
|
{
|
|
if (tile1.frameY >= (short) 0 && tile1.frameY <= (short) 36)
|
|
return;
|
|
tile1.frameY = num1;
|
|
return;
|
|
}
|
|
if (index9 >= 0 && Main.tileSolid[index9] && !Main.tileSolidTop[index9])
|
|
{
|
|
if (tile1.frameY >= (short) 108 && tile1.frameY <= (short) 54)
|
|
return;
|
|
tile1.frameY = (short) (108 + (int) num1);
|
|
return;
|
|
}
|
|
if (index10 >= 0 && Main.tileSolid[index10] && !Main.tileSolidTop[index10])
|
|
{
|
|
if (tile1.frameY >= (short) 162 && tile1.frameY <= (short) 198)
|
|
return;
|
|
tile1.frameY = (short) (162 + (int) num1);
|
|
return;
|
|
}
|
|
if (index8 >= 0 && Main.tileSolid[index8] && !Main.tileSolidTop[index8])
|
|
{
|
|
if (tile1.frameY >= (short) 54 && tile1.frameY <= (short) 90)
|
|
return;
|
|
tile1.frameY = (short) (54 + (int) num1);
|
|
return;
|
|
}
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
case 184:
|
|
Tile tile19 = Main.tile[i, j - 1];
|
|
Tile tile20 = Main.tile[i, j + 1];
|
|
Tile tile21 = Main.tile[i - 1, j];
|
|
Tile tile22 = Main.tile[i + 1, j];
|
|
int tileType1 = -1;
|
|
int tileType2 = -1;
|
|
int tileType3 = -1;
|
|
int tileType4 = -1;
|
|
if (tile19 != null && tile19.active() && !tile19.bottomSlope())
|
|
tileType2 = (int) tile19.type;
|
|
if (tile20 != null && tile20.active() && !tile20.halfBrick() && !tile20.topSlope())
|
|
tileType1 = (int) tile20.type;
|
|
if (tile21 != null && tile21.active())
|
|
tileType3 = (int) tile21.type;
|
|
if (tile22 != null && tile22.active())
|
|
tileType4 = (int) tile22.type;
|
|
short num2 = (short) (WorldGen.genRand.Next(3) * 18);
|
|
if (tileType1 >= 0 && WorldGen.GetTileMossColor(tileType1) != -1)
|
|
{
|
|
tile1.frameX = (short) (22 * WorldGen.GetTileMossColor(tileType1));
|
|
if (tile1.frameY >= (short) 0 && tile1.frameY <= (short) 36)
|
|
return;
|
|
tile1.frameY = num2;
|
|
return;
|
|
}
|
|
if (tileType2 >= 0 && WorldGen.GetTileMossColor(tileType2) != -1)
|
|
{
|
|
tile1.frameX = (short) (22 * WorldGen.GetTileMossColor(tileType2));
|
|
if (tile1.frameY >= (short) 54 && tile1.frameY <= (short) 90)
|
|
return;
|
|
tile1.frameY = (short) (54 + (int) num2);
|
|
return;
|
|
}
|
|
if (tileType3 >= 0 && WorldGen.GetTileMossColor(tileType3) != -1)
|
|
{
|
|
tile1.frameX = (short) (22 * WorldGen.GetTileMossColor(tileType3));
|
|
if (tile1.frameY >= (short) 108 && tile1.frameY <= (short) 54)
|
|
return;
|
|
tile1.frameY = (short) (108 + (int) num2);
|
|
return;
|
|
}
|
|
if (tileType4 >= 0 && WorldGen.GetTileMossColor(tileType4) != -1)
|
|
{
|
|
tile1.frameX = (short) (22 * WorldGen.GetTileMossColor(tileType4));
|
|
if (tile1.frameY >= (short) 162 && tile1.frameY <= (short) 198)
|
|
return;
|
|
tile1.frameY = (short) (162 + (int) num2);
|
|
return;
|
|
}
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
case 529:
|
|
if (!WorldGen.SolidTileAllowBottomSlope(i, j + 1))
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
}
|
|
int num3 = (int) Main.tile[i, j].frameY / 34;
|
|
if (TileID.Sets.Conversion.Sand[(int) Main.tile[i, j + 1].type])
|
|
return;
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
default:
|
|
if (index1 == 3 || index1 == 24 || index1 == 61 || index1 == 71 || index1 == 73 || index1 == 74 || index1 == 110 || index1 == 113 || index1 == 201)
|
|
{
|
|
WorldGen.PlantCheck(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 227)
|
|
{
|
|
WorldGen.CheckDye(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 579)
|
|
{
|
|
WorldGen.CheckRockGolemHead(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 12 || index1 == 31)
|
|
{
|
|
WorldGen.CheckOrb(i, j, index1);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 165:
|
|
WorldGen.CheckTight(i, j);
|
|
return;
|
|
case 185:
|
|
WorldGen.CheckPile(i, j);
|
|
return;
|
|
case 235:
|
|
WorldGen.Check3x1(i, j, index1);
|
|
return;
|
|
case 324:
|
|
if (WorldGen.SolidTileAllowBottomSlope(i, j + 1))
|
|
return;
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
default:
|
|
if (index1 >= 275 && index1 <= 281 || index1 == 296 || index1 == 297 || index1 == 309 || index1 == 358 || index1 == 359 || index1 == 413 || index1 == 414 || index1 == 542 || index1 == 550 || index1 == 551 || index1 == 553 || index1 == 554 || index1 == 558 || index1 == 559 || index1 == 599 || index1 == 600 || index1 == 601 || index1 == 602 || index1 == 603 || index1 == 604 || index1 == 605 || index1 == 606 || index1 == 607 || index1 == 608 || index1 == 609 || index1 == 610 || index1 == 611 || index1 == 612)
|
|
{
|
|
WorldGen.Check6x3(i, j, index1);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 10:
|
|
WorldGen.CheckDoorClosed(i, j, tile1, index1);
|
|
return;
|
|
case 11:
|
|
WorldGen.CheckDoorOpen(i, j, tile1);
|
|
return;
|
|
case 314:
|
|
Minecart.FrameTrack(i, j, false);
|
|
return;
|
|
case 380:
|
|
Tile tile23 = Main.tile[i - 1, j];
|
|
if (tile23 == null)
|
|
return;
|
|
Tile tile24 = Main.tile[i + 1, j];
|
|
if (tile24 == null || Main.tile[i - 1, j + 1] == null || Main.tile[i + 1, j + 1] == null || Main.tile[i - 1, j - 1] == null || Main.tile[i + 1, j - 1] == null)
|
|
return;
|
|
int index11 = -1;
|
|
int index12 = -1;
|
|
if (tile23 != null && tile23.active())
|
|
index12 = !Main.tileStone[(int) tile23.type] ? (int) tile23.type : 1;
|
|
if (tile24 != null && tile24.active())
|
|
index11 = !Main.tileStone[(int) tile24.type] ? (int) tile24.type : 1;
|
|
if (index11 >= 0 && !Main.tileSolid[index11])
|
|
index11 = -1;
|
|
if (index12 >= 0 && !Main.tileSolid[index12])
|
|
index12 = -1;
|
|
rectangle.X = index12 != index1 || index11 != index1 ? (index12 != index1 || index11 == index1 ? (index12 == index1 || index11 != index1 ? 54 : 0) : 36) : 18;
|
|
tile1.frameX = (short) rectangle.X;
|
|
return;
|
|
default:
|
|
if (index1 >= 0 && TileID.Sets.Platforms[index1])
|
|
{
|
|
Tile tile25 = Main.tile[i - 1, j];
|
|
if (tile25 == null)
|
|
return;
|
|
Tile tile26 = Main.tile[i + 1, j];
|
|
if (tile26 == null)
|
|
return;
|
|
Tile tile27 = Main.tile[i - 1, j + 1];
|
|
if (tile27 == null)
|
|
return;
|
|
Tile tile28 = Main.tile[i + 1, j + 1];
|
|
if (tile28 == null)
|
|
return;
|
|
Tile tile29 = Main.tile[i - 1, j - 1];
|
|
if (tile29 == null)
|
|
return;
|
|
Tile tile30 = Main.tile[i + 1, j - 1];
|
|
if (tile30 == null)
|
|
return;
|
|
int index13 = -1;
|
|
int index14 = -1;
|
|
if (tile25 != null && tile25.active())
|
|
index14 = !Main.tileStone[(int) tile25.type] ? (!TileID.Sets.Platforms[(int) tile25.type] ? (int) tile25.type : index1) : 1;
|
|
if (tile26 != null && tile26.active())
|
|
index13 = !Main.tileStone[(int) tile26.type] ? (!TileID.Sets.Platforms[(int) tile26.type] ? (int) tile26.type : index1) : 1;
|
|
if (index13 >= 0 && !Main.tileSolid[index13])
|
|
index13 = -1;
|
|
if (index14 >= 0 && !Main.tileSolid[index14])
|
|
index14 = -1;
|
|
if (index14 == index1 && tile25.halfBrick() != tile1.halfBrick())
|
|
index14 = -1;
|
|
if (index13 == index1 && tile26.halfBrick() != tile1.halfBrick())
|
|
index13 = -1;
|
|
if (index14 != -1 && index14 != index1 && tile1.halfBrick())
|
|
index14 = -1;
|
|
if (index13 != -1 && index13 != index1 && tile1.halfBrick())
|
|
index13 = -1;
|
|
if (index14 == -1 && tile29.active() && (int) tile29.type == index1 && tile29.slope() == (byte) 1)
|
|
index14 = index1;
|
|
if (index13 == -1 && tile30.active() && (int) tile30.type == index1 && tile30.slope() == (byte) 2)
|
|
index13 = index1;
|
|
if (index14 == index1 && tile25.slope() == (byte) 2 && index13 != index1)
|
|
index13 = -1;
|
|
if (index13 == index1 && tile26.slope() == (byte) 1 && index14 != index1)
|
|
index14 = -1;
|
|
rectangle.X = tile1.slope() != (byte) 1 ? (tile1.slope() != (byte) 2 ? (index14 != index1 || index13 != index1 ? (index14 != index1 || index13 != -1 ? (index14 != -1 || index13 != index1 ? (index14 == index1 || index13 != index1 ? (index14 != index1 || index13 == index1 ? (index14 == index1 || index14 == -1 || index13 != -1 ? (index14 != -1 || index13 == index1 || index13 == -1 ? 90 : 126) : 108) : 72) : 54) : (tile26.slope() != (byte) 1 ? 36 : 288)) : (tile25.slope() != (byte) 2 ? 18 : 270)) : (tile25.slope() != (byte) 2 || tile26.slope() != (byte) 1 ? (tile25.slope() != (byte) 2 ? (tile26.slope() != (byte) 1 ? 0 : 234) : 216) : 252)) : (!TileID.Sets.Platforms[(int) tile25.type] || tile25.slope() != (byte) 0 || tile25.halfBrick() ? (tile27.active() || TileID.Sets.Platforms[(int) tile27.type] && tile27.slope() != (byte) 1 ? (tile26.active() || TileID.Sets.Platforms[(int) tile30.type] && tile30.slope() == (byte) 2 ? 144 : 378) : (tile26.active() || TileID.Sets.Platforms[(int) tile30.type] && tile30.slope() == (byte) 2 ? 342 : 414)) : 450)) : (!TileID.Sets.Platforms[(int) tile26.type] || tile26.slope() != (byte) 0 || tile26.halfBrick() ? (tile28.active() || TileID.Sets.Platforms[(int) tile28.type] && tile28.slope() != (byte) 2 ? (tile25.active() || TileID.Sets.Platforms[(int) tile29.type] && tile29.slope() == (byte) 1 ? 180 : 396) : (tile25.active() || TileID.Sets.Platforms[(int) tile29.type] && tile29.slope() == (byte) 1 ? 360 : 432)) : 468);
|
|
tile1.frameX = (short) rectangle.X;
|
|
return;
|
|
}
|
|
if (index1 == 233 || index1 == 236 || index1 == 238)
|
|
{
|
|
WorldGen.CheckJunglePlant(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 530)
|
|
{
|
|
WorldGen.CheckOasisPlant(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 240 || index1 == 440)
|
|
{
|
|
WorldGen.Check3x3Wall(i, j);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 241:
|
|
WorldGen.Check4x3Wall(i, j);
|
|
return;
|
|
case 242:
|
|
WorldGen.Check6x4Wall(i, j);
|
|
return;
|
|
case 245:
|
|
WorldGen.Check2x3Wall(i, j);
|
|
return;
|
|
case 246:
|
|
WorldGen.Check3x2Wall(i, j);
|
|
return;
|
|
default:
|
|
if (index1 == 464 || index1 == 466)
|
|
{
|
|
WorldGen.Check5x4(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 334)
|
|
{
|
|
WorldGen.CheckWeaponsRack(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 471)
|
|
{
|
|
TEWeaponsRack.Framing_CheckTile(i, j);
|
|
return;
|
|
}
|
|
if (index1 == 34 || index1 == 454)
|
|
{
|
|
WorldGen.CheckChand(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 547)
|
|
{
|
|
WorldGen.Check2x5(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 548 || index1 == 614)
|
|
{
|
|
WorldGen.Check3x6(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 613)
|
|
{
|
|
WorldGen.Check3x5(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 106 || index1 == 212 || index1 == 219 || index1 == 220 || index1 == 228 || index1 == 231 || index1 == 243 || index1 == 247 || index1 == 283 || index1 >= 300 && index1 <= 308 || index1 == 354 || index1 == 406 || index1 == 412 || index1 == 355 || index1 == 452 || index1 == 455 || index1 == 491 || index1 == 499)
|
|
{
|
|
WorldGen.Check3x3(i, j, (int) (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 15 || index1 == 497 || index1 == 20 || index1 == 590 || index1 == 216 || index1 == 338 || index1 == 390 || index1 == 493 || index1 == 595 || index1 == 615)
|
|
{
|
|
WorldGen.Check1x2(i, j, (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 14 || index1 == 469 || index1 == 17 || index1 == 26 || index1 == 77 || index1 == 86 || index1 == 87 || index1 == 377 || index1 == 88 || index1 == 89 || index1 == 114 || index1 == 133 || index1 == 186 || index1 == 187 || index1 == 215 || index1 == 217 || index1 == 218 || index1 == 237 || index1 == 244 || index1 == 285 || index1 == 286 || index1 == 298 || index1 == 299 || index1 == 310 || index1 == 339 || index1 == 538 || index1 >= 361 && index1 <= 364 || index1 >= 391 && index1 <= 394 || index1 == 405 || index1 == 486 || index1 == 488 || index1 == 532 || index1 == 544 || index1 == 533 || index1 == 552 || index1 == 555 || index1 == 556 || index1 == 582 || index1 == 619)
|
|
{
|
|
WorldGen.Check3x2(i, j, (int) (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 135 || index1 == 144 || index1 == 141 || index1 == 210 || index1 == 239 || index1 == 36 || index1 == 428 || index1 == 593)
|
|
{
|
|
WorldGen.Check1x1(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 476)
|
|
{
|
|
WorldGen.CheckGolf1x1(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 494)
|
|
{
|
|
WorldGen.CheckGolf1x1(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 419 || index1 == 420 || index1 == 423 || index1 == 424 || index1 == 429 || index1 == 445)
|
|
{
|
|
WorldGen.CheckLogicTiles(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 16 || index1 == 18 || index1 == 29 || index1 == 103 || index1 == 134 || index1 == 462)
|
|
{
|
|
WorldGen.Check2x1(i, j, (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 13 || index1 == 33 || index1 == 50 || index1 == 78 || index1 == 174 || index1 == 372 || index1 == 49)
|
|
{
|
|
WorldGen.CheckOnTable1x1(i, j, index1);
|
|
return;
|
|
}
|
|
if (TileID.Sets.BasicChest[index1])
|
|
{
|
|
WorldGen.CheckChest(i, j, index1);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 27:
|
|
WorldGen.CheckSunflower(i, j);
|
|
return;
|
|
case 28:
|
|
WorldGen.CheckPot(i, j);
|
|
return;
|
|
case 128:
|
|
WorldGen.CheckMan(i, j);
|
|
return;
|
|
case 171:
|
|
WorldGen.CheckXmasTree(i, j);
|
|
return;
|
|
case 254:
|
|
WorldGen.Check2x2Style(i, j, index1);
|
|
return;
|
|
case 269:
|
|
WorldGen.CheckWoman(i, j);
|
|
return;
|
|
case 470:
|
|
TEDisplayDoll.Framing_CheckTile(i, j);
|
|
return;
|
|
case 475:
|
|
TEHatRack.Framing_CheckTile(i, j);
|
|
return;
|
|
case 597:
|
|
TETeleportationPylon.Framing_CheckTile(i, j);
|
|
return;
|
|
default:
|
|
if (!TileID.Sets.BasicChestFake[index1] && index1 != 457)
|
|
{
|
|
if (index1 == 335 || index1 == 411 || index1 == 490 || index1 == 564 || index1 == 565 || index1 == 594)
|
|
{
|
|
WorldGen.Check2x2(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 132 || index1 == 138 || index1 == 484 || index1 == 142 || index1 == 143 || index1 >= 288 && index1 <= 295 || index1 >= 316 && index1 <= 318 || index1 == 172 || index1 == 360 || index1 == 505 || index1 == 521 || index1 == 522 || index1 == 523 || index1 == 524 || index1 == 525 || index1 == 526 || index1 == 527 || index1 == 543 || index1 == 568 || index1 == 569 || index1 == 570 || index1 == 580 || index1 == 598 || index1 == 620)
|
|
{
|
|
WorldGen.Check2x2(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 376 || index1 == 443 || index1 == 444 || index1 == 485)
|
|
{
|
|
WorldGen.CheckSuper(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 91)
|
|
{
|
|
WorldGen.CheckBanner(i, j, (byte) index1);
|
|
return;
|
|
}
|
|
if (index1 == 139 || index1 == 35)
|
|
{
|
|
WorldGen.CheckMB(i, j, (int) (byte) index1);
|
|
return;
|
|
}
|
|
if (index1 == 386 || index1 == 387)
|
|
{
|
|
WorldGen.CheckTrapDoor(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 389 || index1 == 388)
|
|
{
|
|
WorldGen.CheckTallGate(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 92 || index1 == 93 || index1 == 453)
|
|
{
|
|
WorldGen.Check1xX(i, j, (short) index1);
|
|
return;
|
|
}
|
|
if (index1 == 104 || index1 == 105 || index1 == 207 || index1 == 320 || index1 == 337 || index1 == 349 || index1 == 356 || index1 == 378 || index1 == 410 || index1 == 456 || index1 == 465 || index1 == 480 || index1 == 489 || index1 == 506 || index1 == 509 || index1 == 531 || index1 == 545 || index1 == 560 || index1 == 591 || index1 == 592)
|
|
{
|
|
WorldGen.Check2xX(i, j, (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 101 || index1 == 102 || index1 == 463 || index1 == 617)
|
|
{
|
|
WorldGen.Check3x4(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 42 || index1 == 270 || index1 == 271 || index1 == 572 || index1 == 581)
|
|
{
|
|
WorldGen.Check1x2Top(i, j, (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 55 || index1 == 85 || index1 == 395 || index1 == 425 || index1 == 510 || index1 == 511 || index1 == 573)
|
|
{
|
|
WorldGen.CheckSign(i, j, (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 520)
|
|
{
|
|
WorldGen.CheckFoodPlatter(i, j, (int) (ushort) index1);
|
|
return;
|
|
}
|
|
if (index1 == 209)
|
|
{
|
|
WorldGen.CheckCannon(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 79 || index1 == 90 || index1 == 487)
|
|
{
|
|
WorldGen.Check4x2(i, j, index1);
|
|
return;
|
|
}
|
|
if (index1 == 94 || index1 == 95 || index1 == 97 || index1 == 319 || index1 == 98 || index1 == 99 || index1 == 100 || index1 == 125 || index1 == 126 || index1 == 173 || index1 == 282 || index1 == 287 || index1 == 621 || index1 == 622)
|
|
{
|
|
WorldGen.Check2x2(i, j, index1);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 81:
|
|
Tile tile31 = Main.tile[i, j - 1];
|
|
Tile tile32 = Main.tile[i, j + 1];
|
|
Tile tile33 = Main.tile[i - 1, j];
|
|
Tile tile34 = Main.tile[i + 1, j];
|
|
int index15 = -1;
|
|
int num4 = -1;
|
|
if (tile31 != null && tile31.active())
|
|
num4 = (int) tile31.type;
|
|
if (tile32 != null && tile32.active())
|
|
index15 = (int) tile32.type;
|
|
if (num4 != -1)
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
}
|
|
if (index15 >= 0 && Main.tileSolid[index15] && !tile32.halfBrick() && !tile32.topSlope())
|
|
return;
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
case 96:
|
|
WorldGen.Check2x2Style(i, j, index1);
|
|
return;
|
|
default:
|
|
if (Main.tileAlch[index1])
|
|
{
|
|
WorldGen.CheckAlch(i, j);
|
|
return;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 5:
|
|
WorldGen.CheckTree(i, j);
|
|
return;
|
|
case 72:
|
|
Tile tile35 = Main.tile[i, j - 1];
|
|
Tile tile36 = Main.tile[i, j + 1];
|
|
int num5 = -1;
|
|
int num6 = -1;
|
|
if (tile35 != null && tile35.active())
|
|
num6 = (int) tile35.type;
|
|
if (tile36 != null && tile36.active())
|
|
num5 = (int) tile36.type;
|
|
if (num5 != index1 && num5 != 70)
|
|
{
|
|
WorldGen.KillTile(i, j);
|
|
return;
|
|
}
|
|
if (num6 == index1 || tile1.frameX != (short) 0)
|
|
return;
|
|
tile1.frameNumber((byte) WorldGen.genRand.Next(3));
|
|
if (tile1.frameNumber() == (byte) 0)
|
|
{
|
|
tile1.frameX = (short) 18;
|
|
tile1.frameY = (short) 0;
|
|
}
|
|
if (tile1.frameNumber() == (byte) 1)
|
|
{
|
|
tile1.frameX = (short) 18;
|
|
tile1.frameY = (short) 18;
|
|
}
|
|
if (tile1.frameNumber() != (byte) 2)
|
|
return;
|
|
tile1.frameX = (short) 18;
|
|
tile1.frameY = (short) 36;
|
|
return;
|
|
case 323:
|
|
WorldGen.CheckPalmTree(i, j);
|
|
return;
|
|
case 567:
|
|
WorldGen.CheckGnome(i, j);
|
|
return;
|
|
case 583:
|
|
case 584:
|
|
case 585:
|
|
case 586:
|
|
case 587:
|
|
case 588:
|
|
case 589:
|
|
WorldGen.CheckTreeWithSettings(i, j, new WorldGen.CheckTreeSettings()
|
|
{
|
|
IsGroundValid = new WorldGen.CheckTreeSettings.GroundValidTest(WorldGen.GemTreeGroundTest)
|
|
});
|
|
return;
|
|
case 596:
|
|
WorldGen.CheckTreeWithSettings(i, j, new WorldGen.CheckTreeSettings()
|
|
{
|
|
IsGroundValid = new WorldGen.CheckTreeSettings.GroundValidTest(WorldGen.VanityTreeGroundTest)
|
|
});
|
|
return;
|
|
case 616:
|
|
WorldGen.CheckTreeWithSettings(i, j, new WorldGen.CheckTreeSettings()
|
|
{
|
|
IsGroundValid = new WorldGen.CheckTreeSettings.GroundValidTest(WorldGen.VanityTreeGroundTest)
|
|
});
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
goto case 254;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (index1 >= (int) byte.MaxValue && index1 <= 268 || index1 == 385 || index1 >= 446 && index1 <= 448)
|
|
{
|
|
Framing.SelfFrame8Way(i, j, tile1, resetFrame);
|
|
return;
|
|
}
|
|
Tile tileTopCache = Main.tile[i, j - 1];
|
|
Tile tile37 = Main.tile[i, j + 1];
|
|
Tile tile38 = Main.tile[i - 1, j];
|
|
Tile tile39 = Main.tile[i + 1, j];
|
|
Tile tile40 = Main.tile[i - 1, j + 1];
|
|
Tile tile41 = Main.tile[i + 1, j + 1];
|
|
Tile tile42 = Main.tile[i - 1, j - 1];
|
|
Tile tile43 = Main.tile[i + 1, j - 1];
|
|
int upLeft = -1;
|
|
int up = -1;
|
|
int upRight = -1;
|
|
int left = -1;
|
|
int right = -1;
|
|
int downLeft = -1;
|
|
int down = -1;
|
|
int downRight = -1;
|
|
if (tile38 != null && tile38.active())
|
|
{
|
|
left = !Main.tileStone[(int) tile38.type] ? (int) tile38.type : 1;
|
|
if (tile38.slope() == (byte) 1 || tile38.slope() == (byte) 3)
|
|
left = -1;
|
|
}
|
|
if (tile39 != null && tile39.active())
|
|
{
|
|
right = !Main.tileStone[(int) tile39.type] ? (int) tile39.type : 1;
|
|
if (tile39.slope() == (byte) 2 || tile39.slope() == (byte) 4)
|
|
right = -1;
|
|
}
|
|
if (tileTopCache != null && tileTopCache.active())
|
|
{
|
|
up = !Main.tileStone[(int) tileTopCache.type] ? (int) tileTopCache.type : 1;
|
|
if (tileTopCache.slope() == (byte) 3 || tileTopCache.slope() == (byte) 4)
|
|
up = -1;
|
|
}
|
|
if (tile37 != null && tile37.active())
|
|
{
|
|
down = !Main.tileStone[(int) tile37.type] ? (int) tile37.type : 1;
|
|
if (tile37.slope() == (byte) 1 || tile37.slope() == (byte) 2)
|
|
down = -1;
|
|
}
|
|
if (tile42 != null && tile42.active())
|
|
upLeft = !Main.tileStone[(int) tile42.type] ? (int) tile42.type : 1;
|
|
if (tile43 != null && tile43.active())
|
|
upRight = !Main.tileStone[(int) tile43.type] ? (int) tile43.type : 1;
|
|
if (tile40 != null && tile40.active())
|
|
downLeft = !Main.tileStone[(int) tile40.type] ? (int) tile40.type : 1;
|
|
if (tile41 != null && tile41.active())
|
|
downRight = !Main.tileStone[(int) tile41.type] ? (int) tile41.type : 1;
|
|
if (tile1.slope() == (byte) 2)
|
|
{
|
|
up = -1;
|
|
left = -1;
|
|
}
|
|
if (tile1.slope() == (byte) 1)
|
|
{
|
|
up = -1;
|
|
right = -1;
|
|
}
|
|
if (tile1.slope() == (byte) 4)
|
|
{
|
|
down = -1;
|
|
left = -1;
|
|
}
|
|
if (tile1.slope() == (byte) 3)
|
|
{
|
|
down = -1;
|
|
right = -1;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 147:
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBrick, TileID.Sets.Ices, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 161:
|
|
case 163:
|
|
case 164:
|
|
case 200:
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBrick, TileID.Sets.Snow, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 162:
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBrick, TileID.Sets.IcesSnow, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
default:
|
|
if (Main.tileBrick[index1])
|
|
{
|
|
if (index1 == 60 || index1 == 70)
|
|
{
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBrick, TileID.Sets.Mud, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBrick, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (Main.tilePile[index1])
|
|
{
|
|
WorldGen.TileMergeAttempt(index1, Main.tilePile, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if ((index1 == 1 || Main.tileMoss[index1] || index1 == 117 || index1 == 25 || index1 == 203) && down == 165)
|
|
{
|
|
if (tile37.frameY == (short) 72)
|
|
down = index1;
|
|
else if (tile37.frameY == (short) 0)
|
|
down = index1;
|
|
}
|
|
if ((index1 == 1 || Main.tileMoss[index1] || index1 == 117 || index1 == 25 || index1 == 203) && up == 165)
|
|
{
|
|
if (tileTopCache.frameY == (short) 90)
|
|
up = index1;
|
|
else if (tileTopCache.frameY == (short) 54)
|
|
up = index1;
|
|
}
|
|
if (index1 == 225)
|
|
{
|
|
if (down == 165)
|
|
down = index1;
|
|
if (up == 165)
|
|
up = index1;
|
|
}
|
|
if ((index1 == 200 || index1 == 161 || index1 == 147 || index1 == 163 || index1 == 164) && down == 165)
|
|
down = index1;
|
|
if ((tile1.slope() == (byte) 1 || tile1.slope() == (byte) 2) && down > -1 && !TileID.Sets.Platforms[down])
|
|
down = index1;
|
|
if (up > -1 && (tileTopCache.slope() == (byte) 1 || tileTopCache.slope() == (byte) 2) && !TileID.Sets.Platforms[up])
|
|
up = index1;
|
|
if ((tile1.slope() == (byte) 3 || tile1.slope() == (byte) 4) && up > -1 && !TileID.Sets.Platforms[up])
|
|
up = index1;
|
|
if (down > -1 && (tile37.slope() == (byte) 3 || tile37.slope() == (byte) 4) && !TileID.Sets.Platforms[down])
|
|
down = index1;
|
|
if (index1 == 124)
|
|
{
|
|
if (up > -1 && Main.tileSolid[up] && !TileID.Sets.Platforms[up])
|
|
up = index1;
|
|
if (down > -1 && Main.tileSolid[down] && !TileID.Sets.Platforms[down])
|
|
down = index1;
|
|
}
|
|
if (up > -1 && tileTopCache.halfBrick() && !TileID.Sets.Platforms[up])
|
|
up = index1;
|
|
if (left > -1 && tile38.halfBrick())
|
|
{
|
|
if (tile1.halfBrick())
|
|
left = index1;
|
|
else if ((int) tile38.type != index1)
|
|
left = -1;
|
|
}
|
|
if (right > -1 && tile39.halfBrick())
|
|
{
|
|
if (tile1.halfBrick())
|
|
right = index1;
|
|
else if ((int) tile39.type != index1)
|
|
right = -1;
|
|
}
|
|
if (tile1.halfBrick())
|
|
{
|
|
if (left != index1)
|
|
left = -1;
|
|
if (right != index1)
|
|
right = -1;
|
|
up = -1;
|
|
}
|
|
if (tile37 != null && tile37.halfBrick())
|
|
down = -1;
|
|
if (!Main.tileSolid[index1])
|
|
{
|
|
if (index1 == 49)
|
|
{
|
|
WorldGen.CheckOnTable1x1(i, j, (int) (byte) index1);
|
|
return;
|
|
}
|
|
if (index1 == 80)
|
|
{
|
|
WorldGen.CactusFrame(i, j);
|
|
return;
|
|
}
|
|
}
|
|
WorldGen.mergeUp = false;
|
|
WorldGen.mergeDown = false;
|
|
WorldGen.mergeLeft = false;
|
|
WorldGen.mergeRight = false;
|
|
int num7;
|
|
if (resetFrame)
|
|
{
|
|
num7 = WorldGen.genRand.Next(0, 3);
|
|
tile1.frameNumber((byte) num7);
|
|
}
|
|
else
|
|
num7 = (int) tile1.frameNumber();
|
|
if (Main.tileLargeFrames[index1] == (byte) 1)
|
|
num7 = new int[4, 3]
|
|
{
|
|
{
|
|
2,
|
|
4,
|
|
2
|
|
},
|
|
{
|
|
1,
|
|
3,
|
|
1
|
|
},
|
|
{
|
|
2,
|
|
2,
|
|
4
|
|
},
|
|
{
|
|
1,
|
|
1,
|
|
3
|
|
}
|
|
}[j % 4, i % 3] - 1;
|
|
if (Main.tileLargeFrames[index1] == (byte) 2)
|
|
num7 = i % 2 + j % 2 * 2;
|
|
WorldGen.TileMergeAttempt(index1, Main.tileBlendAll, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (Main.tileBlendAll[index1])
|
|
{
|
|
Main.tileSolid[10] = false;
|
|
Main.tileSolid[387] = false;
|
|
WorldGen.TileMergeAttempt(index1, Main.tileSolid, Main.tileSolidTop, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
Main.tileSolid[10] = true;
|
|
Main.tileSolid[387] = true;
|
|
}
|
|
if (TileID.Sets.ForcedDirtMerging[index1])
|
|
{
|
|
if (up == 0)
|
|
up = index1;
|
|
if (down == 0)
|
|
down = index1;
|
|
if (left == 0)
|
|
left = index1;
|
|
if (right == 0)
|
|
right = index1;
|
|
if (upLeft == 0)
|
|
upLeft = index1;
|
|
if (upRight == 0)
|
|
upRight = index1;
|
|
if (downLeft == 0)
|
|
downLeft = index1;
|
|
if (downRight == 0)
|
|
downRight = index1;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 0:
|
|
if (up > -1 && Main.tileMergeDirt[up])
|
|
{
|
|
WorldGen.TileFrame(i, j - 1);
|
|
if (WorldGen.mergeDown)
|
|
up = index1;
|
|
}
|
|
else if (up == 147)
|
|
{
|
|
WorldGen.TileFrame(i, j - 1);
|
|
if (WorldGen.mergeDown)
|
|
up = index1;
|
|
}
|
|
if (down > -1 && Main.tileMergeDirt[down])
|
|
{
|
|
WorldGen.TileFrame(i, j + 1);
|
|
if (WorldGen.mergeUp)
|
|
down = index1;
|
|
}
|
|
else if (down == 147)
|
|
{
|
|
WorldGen.TileFrame(i, j + 1);
|
|
if (WorldGen.mergeUp)
|
|
down = index1;
|
|
}
|
|
if (left > -1 && Main.tileMergeDirt[left])
|
|
{
|
|
WorldGen.TileFrame(i - 1, j);
|
|
if (WorldGen.mergeRight)
|
|
left = index1;
|
|
}
|
|
else if (left == 147)
|
|
{
|
|
WorldGen.TileFrame(i - 1, j);
|
|
if (WorldGen.mergeRight)
|
|
left = index1;
|
|
}
|
|
if (right > -1 && Main.tileMergeDirt[right])
|
|
{
|
|
WorldGen.TileFrame(i + 1, j);
|
|
if (WorldGen.mergeLeft)
|
|
right = index1;
|
|
}
|
|
else if (right == 147)
|
|
{
|
|
WorldGen.TileFrame(i + 1, j);
|
|
if (WorldGen.mergeLeft)
|
|
right = index1;
|
|
}
|
|
bool[] dirtInAspecialWay = TileID.Sets.Conversion.MergesWithDirtInASpecialWay;
|
|
if (up > -1 && dirtInAspecialWay[up])
|
|
up = index1;
|
|
if (down > -1 && dirtInAspecialWay[down])
|
|
down = index1;
|
|
if (left > -1 && dirtInAspecialWay[left])
|
|
left = index1;
|
|
if (right > -1 && dirtInAspecialWay[right])
|
|
right = index1;
|
|
if (upLeft > -1 && Main.tileMergeDirt[upLeft])
|
|
upLeft = index1;
|
|
else if (upLeft > -1 && dirtInAspecialWay[upLeft])
|
|
upLeft = index1;
|
|
if (upRight > -1 && Main.tileMergeDirt[upRight])
|
|
upRight = index1;
|
|
else if (upRight > -1 && dirtInAspecialWay[upRight])
|
|
upRight = index1;
|
|
if (downLeft > -1 && Main.tileMergeDirt[downLeft])
|
|
downLeft = index1;
|
|
else if (downLeft > -1 && dirtInAspecialWay[downLeft])
|
|
downLeft = index1;
|
|
if (downRight > -1 && Main.tileMergeDirt[downRight])
|
|
downRight = index1;
|
|
else if (downRight > -1 && dirtInAspecialWay[downRight])
|
|
downRight = index1;
|
|
WorldGen.TileMergeAttempt(-2, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, 191, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (up > -1 && TileID.Sets.ForcedDirtMerging[up])
|
|
up = index1;
|
|
if (down > -1 && TileID.Sets.ForcedDirtMerging[down])
|
|
down = index1;
|
|
if (left > -1 && TileID.Sets.ForcedDirtMerging[left])
|
|
left = index1;
|
|
if (right > -1 && TileID.Sets.ForcedDirtMerging[right])
|
|
right = index1;
|
|
if (upLeft > -1 && TileID.Sets.ForcedDirtMerging[upLeft])
|
|
upLeft = index1;
|
|
if (upRight > -1 && TileID.Sets.ForcedDirtMerging[upRight])
|
|
upRight = index1;
|
|
if (downLeft > -1 && TileID.Sets.ForcedDirtMerging[downLeft])
|
|
downLeft = index1;
|
|
if (downRight > -1 && TileID.Sets.ForcedDirtMerging[downRight])
|
|
{
|
|
downRight = index1;
|
|
break;
|
|
}
|
|
break;
|
|
case 53:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 397, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 396, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 112:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 398, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 400, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 116:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 402, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 403, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 213:
|
|
if (up > -1 && Main.tileSolid[up] && !Main.tileSolidTop[up])
|
|
up = index1;
|
|
if (down > -1 && Main.tileSolid[down])
|
|
down = index1;
|
|
if (up != index1)
|
|
{
|
|
if (left > -1 && Main.tileSolid[left])
|
|
left = index1;
|
|
if (right > -1 && Main.tileSolid[right])
|
|
{
|
|
right = index1;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 234:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 399, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 401, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (Main.tileMergeDirt[index1])
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 0, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (index1 == 1)
|
|
{
|
|
if ((double) j > Main.rockLayer)
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 57, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
}
|
|
else if (index1 == 58 || index1 == 76 || index1 == 75)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 57, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
else
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 57:
|
|
WorldGen.TileMergeAttempt(-2, 1, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, TileID.Sets.HellSpecial, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 59:
|
|
if ((double) j > Main.rockLayer)
|
|
WorldGen.TileMergeAttempt(-2, 1, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.GrassSpecial, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, TileID.Sets.JungleSpecial, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if ((double) j < Main.rockLayer)
|
|
{
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 0, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
WorldGen.TileMergeAttempt(index1, 0, ref up, ref down, ref left, ref right);
|
|
break;
|
|
case 211:
|
|
WorldGen.TileMergeAttempt(59, 60, ref up, ref down, ref left, ref right);
|
|
WorldGen.TileMergeAttempt(-2, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
default:
|
|
if (index1 == 225 || index1 == 226)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
switch (index1)
|
|
{
|
|
case 60:
|
|
WorldGen.TileMergeAttempt(59, 211, ref up, ref down, ref left, ref right);
|
|
break;
|
|
case 147:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, TileID.Sets.IcesSlush, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 189:
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, TileID.Sets.MergesWithClouds, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 196:
|
|
WorldGen.TileMergeAttempt(-2, 189, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, 460, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 460:
|
|
WorldGen.TileMergeAttempt(-2, 189, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, 196, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
default:
|
|
if (index1 == 161 || index1 == 163 || index1 == 164 || index1 == 200 || index1 == 224)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 147, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 162)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, TileID.Sets.IcesSnow, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 32)
|
|
{
|
|
if (down == 23)
|
|
{
|
|
down = index1;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (index1 == 352)
|
|
{
|
|
if (down == 199)
|
|
{
|
|
down = index1;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (index1 == 69)
|
|
{
|
|
if (down == 60)
|
|
{
|
|
down = index1;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if (index1 == 51)
|
|
{
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.AllTiles, Main.tileNoAttach, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 192)
|
|
{
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 191, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 191)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 192, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, 0, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 384)
|
|
{
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 383, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 383)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 384, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 407)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 404, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 404)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 396, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 407, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 397)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 53, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 396, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 396)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 397, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(-2, 53, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 404, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 398)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 112, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 400, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 400)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 398, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(-2, 112, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 399)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 234, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 401, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 401)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 399, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(-2, 234, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 402)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 116, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttemptFrametest(i, j, index1, 403, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
if (index1 == 403)
|
|
{
|
|
WorldGen.TileMergeAttempt(-2, 402, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(-2, 116, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (index1 == 0)
|
|
{
|
|
WorldGen.TileMergeAttempt(index1, Main.tileMoss, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.tileMossBrick, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
else if (Main.tileMoss[index1] || TileID.Sets.tileMossBrick[index1])
|
|
{
|
|
WorldGen.TileMergeAttempt(index1, 0, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
else
|
|
{
|
|
if (!Main.tileStone[index1])
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 1:
|
|
break;
|
|
case 38:
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.tileMossBrick, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
goto label_576;
|
|
default:
|
|
goto label_576;
|
|
}
|
|
}
|
|
WorldGen.TileMergeAttempt(index1, Main.tileMoss, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
label_576:
|
|
if (TileID.Sets.Conversion.Grass[index1])
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.Ore, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
else if (TileID.Sets.Ore[index1])
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.Conversion.Grass, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (index1 == 59)
|
|
WorldGen.TileMergeAttempt(index1, TileID.Sets.OreMergesWithMud, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
else if (TileID.Sets.OreMergesWithMud[index1])
|
|
WorldGen.TileMergeAttempt(index1, 59, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
bool flag1 = false;
|
|
if (index1 == 2 || index1 == 23 || index1 == 60 || index1 == 477 || index1 == 492 || index1 == 70 || index1 == 109 || index1 == 199 || Main.tileMoss[index1] || TileID.Sets.NeedsGrassFraming[index1] || TileID.Sets.tileMossBrick[index1])
|
|
{
|
|
flag1 = true;
|
|
WorldGen.TileMergeAttemptWeird(index1, -1, Main.tileSolid, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
int num8 = TileID.Sets.NeedsGrassFramingDirt[index1];
|
|
if (index1 == 60 || index1 == 70)
|
|
num8 = 59;
|
|
else if (Main.tileMoss[index1])
|
|
num8 = 1;
|
|
else if (TileID.Sets.tileMossBrick[index1])
|
|
{
|
|
num8 = 38;
|
|
}
|
|
else
|
|
{
|
|
switch (index1)
|
|
{
|
|
case 2:
|
|
case 477:
|
|
WorldGen.TileMergeAttempt(num8, 23, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
case 23:
|
|
WorldGen.TileMergeAttempt(num8, 2, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
break;
|
|
}
|
|
}
|
|
if (up != index1 && up != num8 && (down == index1 || down == num8))
|
|
{
|
|
if (left == num8 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
}
|
|
else if (left == index1 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (down != index1 && down != num8 && (up == index1 || up == num8))
|
|
{
|
|
if (left == num8 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 216;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 216;
|
|
break;
|
|
}
|
|
}
|
|
else if (left == index1 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 216;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 216;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (left != index1 && left != num8 && (right == index1 || right == num8))
|
|
{
|
|
if (up == num8 && down == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (down == index1 && up == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (right != index1 && right != num8 && (left == index1 || left == num8))
|
|
{
|
|
if (up == num8 && down == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (down == index1 && right == up)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
if (upLeft != index1 && upRight != index1 && downLeft != index1 && downRight != index1)
|
|
{
|
|
if (downRight == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 324;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 324;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 324;
|
|
break;
|
|
}
|
|
}
|
|
else if (upRight == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 342;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 342;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 342;
|
|
break;
|
|
}
|
|
}
|
|
else if (downLeft == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 360;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 360;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 360;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 378;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 378;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 378;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 234;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 234;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (upLeft != index1 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 306;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 306;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
else if (upRight != index1 && downLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 306;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 306;
|
|
break;
|
|
default:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft != index1 && upRight == index1 && downLeft == index1 && downRight == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft == index1 && upRight != index1 && downLeft == index1 && downRight == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft == index1 && upRight == index1 && downLeft != index1 && downRight == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft == index1 && upRight == index1 && downLeft == index1 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == index1 && down == num8 && left == index1 && right == index1 && upLeft == -1 && upRight == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == num8 && down == index1 && left == index1 && right == index1 && downLeft == -1 && downRight == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 36;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 36;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == num8 && right == index1 && upRight == -1 && downRight == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right == num8 && upLeft == -1 && downLeft == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == num8 && left == index1 && right == index1)
|
|
{
|
|
if (upRight != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == num8 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
if (downRight != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
else if (downLeft != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right == num8)
|
|
{
|
|
if (upLeft != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
else if (downLeft != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == num8 && right == index1)
|
|
{
|
|
if (upRight != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
else if (downRight != -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up == num8 && down == index1 && left == index1 && right == index1 || up == index1 && down == num8 && left == index1 && right == index1 || up == index1 && down == index1 && left == num8 && right == index1 || up == index1 && down == index1 && left == index1 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
}
|
|
if ((up == index1 || up == num8) && (down == index1 || down == num8) && (left == index1 || left == num8) && (right == index1 || right == num8))
|
|
{
|
|
if (upLeft != index1 && upLeft != num8 && (upRight == index1 || upRight == num8) && (downLeft == index1 || downLeft == num8) && (downRight == index1 || downRight == num8))
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (upRight != index1 && upRight != num8 && (upLeft == index1 || upLeft == num8) && (downLeft == index1 || downLeft == num8) && (downRight == index1 || downRight == num8))
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
else if (downLeft != index1 && downLeft != num8 && (upLeft == index1 || upLeft == num8) && (upRight == index1 || upRight == num8) && (downRight == index1 || downRight == num8))
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
else if (downRight != index1 && downRight != num8 && (upLeft == index1 || upLeft == num8) && (downLeft == index1 || downLeft == num8) && (upRight == index1 || upRight == num8))
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (up != num8 && up != index1 && down == index1 && left != num8 && left != index1 && right == index1 && downRight != num8 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 270;
|
|
break;
|
|
default:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 270;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != num8 && up != index1 && down == index1 && left == index1 && right != num8 && right != index1 && downLeft != num8 && downLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 270;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 270;
|
|
break;
|
|
}
|
|
}
|
|
else if (down != num8 && down != index1 && up == index1 && left != num8 && left != index1 && right == index1 && upRight != num8 && upRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 288;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 288;
|
|
break;
|
|
}
|
|
}
|
|
else if (down != num8 && down != index1 && up == index1 && left == index1 && right != num8 && right != index1 && upLeft != num8 && upLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 288;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 288;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && up != num8 && down == index1 && left == index1 && right == index1 && downLeft != index1 && downLeft != num8 && downRight != index1 && downRight != num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 216;
|
|
break;
|
|
default:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 216;
|
|
break;
|
|
}
|
|
}
|
|
else if (down != index1 && down != num8 && up == index1 && left == index1 && right == index1 && upLeft != index1 && upLeft != num8 && upRight != index1 && upRight != num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 252;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 252;
|
|
break;
|
|
default:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 252;
|
|
break;
|
|
}
|
|
}
|
|
else if (left != index1 && left != num8 && down == index1 && up == index1 && right == index1 && upRight != index1 && upRight != num8 && downRight != index1 && downRight != num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 234;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 234;
|
|
break;
|
|
}
|
|
}
|
|
else if (right != index1 && right != num8 && down == index1 && up == index1 && left == index1 && upLeft != index1 && upLeft != num8 && downLeft != index1 && downLeft != num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 234;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 270;
|
|
rectangle.Y = 234;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != num8 && up != index1 && (down == num8 || down == index1) && left == num8 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 270;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 270;
|
|
break;
|
|
}
|
|
}
|
|
else if (down != num8 && down != index1 && (up == num8 || up == index1) && left == num8 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 288;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 288;
|
|
break;
|
|
}
|
|
}
|
|
else if (left != num8 && left != index1 && (right == num8 || right == index1) && up == num8 && down == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
else if (right != num8 && right != index1 && (left == num8 || left == index1) && up == num8 && down == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == num8 && left == num8 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 288;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 288;
|
|
break;
|
|
default:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 288;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == num8 && down == index1 && left == num8 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 270;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 270;
|
|
break;
|
|
default:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 270;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == num8 && down == num8 && left == index1 && right == num8)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 306;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 306;
|
|
break;
|
|
default:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == num8 && down == num8 && left == num8 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 306;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 306;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 306;
|
|
break;
|
|
}
|
|
}
|
|
if (up != index1 && up != num8 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
if ((downLeft == num8 || downLeft == index1) && downRight != num8 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 324;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 324;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 324;
|
|
break;
|
|
}
|
|
}
|
|
else if ((downRight == num8 || downRight == index1) && downLeft != num8 && downLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 324;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 324;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 324;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (down != index1 && down != num8 && up == index1 && left == index1 && right == index1)
|
|
{
|
|
if ((upLeft == num8 || upLeft == index1) && upRight != num8 && upRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 342;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 342;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 342;
|
|
break;
|
|
}
|
|
}
|
|
else if ((upRight == num8 || upRight == index1) && upLeft != num8 && upLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 342;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 342;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 342;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (left != index1 && left != num8 && up == index1 && down == index1 && right == index1)
|
|
{
|
|
if ((upRight == num8 || upRight == index1) && downRight != num8 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 360;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 360;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 360;
|
|
break;
|
|
}
|
|
}
|
|
else if ((downRight == num8 || downRight == index1) && upRight != num8 && upRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 360;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 360;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 360;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (right != index1 && right != num8 && up == index1 && down == index1 && left == index1)
|
|
{
|
|
if ((upLeft == num8 || upLeft == index1) && downLeft != num8 && downLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 378;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 378;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 378;
|
|
break;
|
|
}
|
|
}
|
|
else if ((downLeft == num8 || downLeft == index1) && upLeft != num8 && upLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 378;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 378;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 378;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ((up == index1 || up == num8) && (down == index1 || down == num8) && (left == index1 || left == num8) && (right == index1 || right == num8) && upLeft != -1 && upRight != -1 && downLeft != -1 && downRight != -1)
|
|
{
|
|
if ((i + j) % 2 == 1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
WorldGen.TileMergeAttempt(-2, num8, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
WorldGen.TileMergeAttempt(index1, Main.tileMerge[index1], ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (rectangle.X == -1 && rectangle.Y == -1 && (Main.tileMergeDirt[index1] || index1 > -1 && TileID.Sets.ChecksForMerge[index1]))
|
|
{
|
|
if (!flag1)
|
|
{
|
|
flag1 = true;
|
|
WorldGen.TileMergeAttemptWeird(index1, -1, Main.tileSolid, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
}
|
|
if (up > -1 && up != index1)
|
|
up = -1;
|
|
if (down > -1 && down != index1)
|
|
down = -1;
|
|
if (left > -1 && left != index1)
|
|
left = -1;
|
|
if (right > -1 && right != index1)
|
|
right = -1;
|
|
if (up != -1 && down != -1 && left != -1 && right != -1)
|
|
{
|
|
if (up == -2 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 108;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (up == index1 && down == -2 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 90;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 90;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 126;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 126;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == -2 && down == index1 && left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (up == -2 && down == index1 && left == index1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == index1 && down == -2 && left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (up == index1 && down == -2 && left == index1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == -2 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 126;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == -2 && down == -2 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 180;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 180;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
else if (up == -2 && down == index1 && left == -2 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeLeft = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == index1 && down == -2 && left == -2 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeLeft = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == -2 && down == -2 && left == index1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == -2 && down == -2 && left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (up == -2 && down == -2 && left == -2 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeDown = true;
|
|
WorldGen.mergeLeft = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
if (upLeft == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
if (upRight == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 108;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 144;
|
|
break;
|
|
default:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
}
|
|
if (downLeft == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
if (downRight == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 126;
|
|
break;
|
|
default:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 162;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (index1 != 2 && index1 != 23 && index1 != 60 && index1 != 70 && index1 != 109 && index1 != 199 && index1 != 477 && index1 != 492)
|
|
{
|
|
if (up == -1 && down == -2 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 0;
|
|
break;
|
|
default:
|
|
rectangle.X = 270;
|
|
rectangle.Y = 0;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
else if (up == -2 && down == -1 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 270;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == -1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 36;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 36;
|
|
break;
|
|
default:
|
|
rectangle.X = 270;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (up == index1 && down == index1 && left == -2 && right == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 234;
|
|
rectangle.Y = 54;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 252;
|
|
rectangle.Y = 54;
|
|
break;
|
|
default:
|
|
rectangle.X = 270;
|
|
rectangle.Y = 54;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
}
|
|
if (up != -1 && down != -1 && left == -1 && right == index1)
|
|
{
|
|
if (up == -2 && down == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (down == -2 && up == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
}
|
|
else if (up != -1 && down != -1 && left == index1 && right == -1)
|
|
{
|
|
if (up == -2 && down == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (down == -2 && up == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
}
|
|
else if (up == -1 && down == index1 && left != -1 && right != -1)
|
|
{
|
|
if (left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (right == -2 && left == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
}
|
|
else if (up == index1 && down == -1 && left != -1 && right != -1)
|
|
{
|
|
if (left == -2 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 216;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 216;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (right == -2 && left == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 216;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 216;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
}
|
|
else if (up != -1 && down != -1 && left == -1 && right == -1)
|
|
{
|
|
if (up == -2 && down == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 216;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 252;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
else if (up == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (down == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
}
|
|
else if (up == -1 && down == -1 && left != -1 && right != -1)
|
|
{
|
|
if (left == -2 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 198;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 198;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 198;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
else if (left == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 252;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 252;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 252;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 252;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 252;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 252;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
}
|
|
else if (up == -2 && down == -1 && left == -1 && right == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 144;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 162;
|
|
break;
|
|
default:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 180;
|
|
break;
|
|
}
|
|
WorldGen.mergeUp = true;
|
|
}
|
|
else if (up == -1 && down == -2 && left == -1 && right == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 90;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 108;
|
|
break;
|
|
default:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 126;
|
|
break;
|
|
}
|
|
WorldGen.mergeDown = true;
|
|
}
|
|
else if (up == -1 && down == -1 && left == -2 && right == -1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 234;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 234;
|
|
break;
|
|
}
|
|
WorldGen.mergeLeft = true;
|
|
}
|
|
else if (up == -1 && down == -1 && left == -1 && right == -2)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 234;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 234;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 234;
|
|
break;
|
|
}
|
|
WorldGen.mergeRight = true;
|
|
}
|
|
}
|
|
}
|
|
int num9 = tile1.blockType();
|
|
if (TileID.Sets.HasSlopeFrames[index1])
|
|
{
|
|
if (num9 == 0)
|
|
{
|
|
bool flag2 = index1 == up && tileTopCache.topSlope();
|
|
bool flag3 = index1 == left && tile38.leftSlope();
|
|
bool flag4 = index1 == right && tile39.rightSlope();
|
|
bool flag5 = index1 == down && tile37.bottomSlope();
|
|
int num10 = 0;
|
|
int num11 = 0;
|
|
if (flag2.ToInt() + flag3.ToInt() + flag4.ToInt() + flag5.ToInt() > 2)
|
|
{
|
|
int num12 = (tileTopCache.slope() == (byte) 1).ToInt() + (tile39.slope() == (byte) 1).ToInt() + (tile37.slope() == (byte) 4).ToInt() + (tile38.slope() == (byte) 4).ToInt();
|
|
int num13 = (tileTopCache.slope() == (byte) 2).ToInt() + (tile39.slope() == (byte) 3).ToInt() + (tile37.slope() == (byte) 3).ToInt() + (tile38.slope() == (byte) 2).ToInt();
|
|
if (num12 == num13)
|
|
{
|
|
num10 = 2;
|
|
num11 = 4;
|
|
}
|
|
else if (num12 > num13)
|
|
{
|
|
int num14 = index1 != upLeft ? 0 : (tile42.slope() == (byte) 0 ? 1 : 0);
|
|
bool flag6 = index1 == downRight && tile41.slope() == (byte) 0;
|
|
int num15 = flag6 ? 1 : 0;
|
|
if ((num14 & num15) != 0)
|
|
num11 = 4;
|
|
else if (flag6)
|
|
{
|
|
num10 = 6;
|
|
}
|
|
else
|
|
{
|
|
num10 = 7;
|
|
num11 = 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int num16 = index1 != upRight ? 0 : (tile43.slope() == (byte) 0 ? 1 : 0);
|
|
bool flag7 = index1 == downLeft && tile40.slope() == (byte) 0;
|
|
int num17 = flag7 ? 1 : 0;
|
|
if ((num16 & num17) != 0)
|
|
{
|
|
num11 = 4;
|
|
num10 = 1;
|
|
}
|
|
else if (flag7)
|
|
{
|
|
num10 = 7;
|
|
}
|
|
else
|
|
{
|
|
num10 = 6;
|
|
num11 = 1;
|
|
}
|
|
}
|
|
rectangle.X = (18 + num10) * 18;
|
|
rectangle.Y = num11 * 18;
|
|
}
|
|
else
|
|
{
|
|
if (flag2 & flag3 && index1 == down && index1 == right)
|
|
num11 = 2;
|
|
else if (flag2 & flag4 && index1 == down && index1 == left)
|
|
{
|
|
num10 = 1;
|
|
num11 = 2;
|
|
}
|
|
else if (flag4 & flag5 && index1 == up && index1 == left)
|
|
{
|
|
num10 = 1;
|
|
num11 = 3;
|
|
}
|
|
else if (flag5 & flag3 && index1 == up && index1 == right)
|
|
num11 = 3;
|
|
if (num10 != 0 || num11 != 0)
|
|
{
|
|
rectangle.X = (18 + num10) * 18;
|
|
rectangle.Y = num11 * 18;
|
|
}
|
|
}
|
|
}
|
|
if (num9 >= 2 && (rectangle.X < 0 || rectangle.Y < 0))
|
|
{
|
|
int num18 = -1;
|
|
int num19 = -1;
|
|
int num20 = -1;
|
|
int num21 = 0;
|
|
int num22 = 0;
|
|
switch (num9)
|
|
{
|
|
case 2:
|
|
num18 = left;
|
|
num19 = down;
|
|
num20 = downLeft;
|
|
++num21;
|
|
break;
|
|
case 3:
|
|
num18 = right;
|
|
num19 = down;
|
|
num20 = downRight;
|
|
break;
|
|
case 4:
|
|
num18 = left;
|
|
num19 = up;
|
|
num20 = upLeft;
|
|
++num21;
|
|
++num22;
|
|
break;
|
|
case 5:
|
|
num18 = right;
|
|
num19 = up;
|
|
num20 = upRight;
|
|
++num22;
|
|
break;
|
|
}
|
|
if (index1 != num18 || index1 != num19 || index1 != num20)
|
|
{
|
|
if (index1 == num18 && index1 == num19)
|
|
num21 += 2;
|
|
else if (index1 == num18)
|
|
num21 += 4;
|
|
else if (index1 == num19)
|
|
{
|
|
num21 += 4;
|
|
num22 += 2;
|
|
}
|
|
else
|
|
{
|
|
num21 += 2;
|
|
num22 += 2;
|
|
}
|
|
}
|
|
rectangle.X = (18 + num21) * 18;
|
|
rectangle.Y = num22 * 18;
|
|
}
|
|
}
|
|
if (rectangle.X < 0 || rectangle.Y < 0)
|
|
{
|
|
if (!flag1)
|
|
WorldGen.TileMergeAttemptWeird(index1, -1, Main.tileSolid, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (index1 == 2 || index1 == 23 || index1 == 60 || index1 == 70 || index1 == 109 || index1 == 199 || index1 == 477 || index1 == 492 || Main.tileMoss[index1] || TileID.Sets.tileMossBrick[index1])
|
|
WorldGen.TileMergeAttempt(index1, -2, ref up, ref down, ref left, ref right, ref upLeft, ref upRight, ref downLeft, ref downRight);
|
|
if (up == index1 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
if (upLeft != index1 && upRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
}
|
|
else if (downLeft != index1 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 36;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 36;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (upLeft != index1 && downLeft != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (upRight != index1 && downRight != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 18;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 18;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (up != index1 && down == index1 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 0;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 0;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down != index1 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 36;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 36;
|
|
break;
|
|
default:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left != index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left == index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down == index1 && left != index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 54;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 54;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 54;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down == index1 && left == index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 54;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 54;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 54;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down != index1 && left != index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 0;
|
|
rectangle.Y = 72;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 36;
|
|
rectangle.Y = 72;
|
|
break;
|
|
default:
|
|
rectangle.X = 72;
|
|
rectangle.Y = 72;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down != index1 && left == index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 18;
|
|
rectangle.Y = 72;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 54;
|
|
rectangle.Y = 72;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 72;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down == index1 && left != index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 90;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down != index1 && left == index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 72;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 72;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 72;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down == index1 && left != index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 0;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 0;
|
|
break;
|
|
}
|
|
}
|
|
else if (up == index1 && down != index1 && left != index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 108;
|
|
rectangle.Y = 54;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 126;
|
|
rectangle.Y = 54;
|
|
break;
|
|
default:
|
|
rectangle.X = 144;
|
|
rectangle.Y = 54;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down != index1 && left != index1 && right == index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down != index1 && left == index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 0;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 18;
|
|
break;
|
|
default:
|
|
rectangle.X = 216;
|
|
rectangle.Y = 36;
|
|
break;
|
|
}
|
|
}
|
|
else if (up != index1 && down != index1 && left != index1 && right != index1)
|
|
{
|
|
switch (num7)
|
|
{
|
|
case 0:
|
|
rectangle.X = 162;
|
|
rectangle.Y = 54;
|
|
break;
|
|
case 1:
|
|
rectangle.X = 180;
|
|
rectangle.Y = 54;
|
|
break;
|
|
default:
|
|
rectangle.X = 198;
|
|
rectangle.Y = 54;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (rectangle.X <= -1 || rectangle.Y <= -1)
|
|
{
|
|
if (num7 <= 0)
|
|
{
|
|
rectangle.X = 18;
|
|
rectangle.Y = 18;
|
|
}
|
|
else if (num7 == 1)
|
|
{
|
|
rectangle.X = 36;
|
|
rectangle.Y = 18;
|
|
}
|
|
if (num7 >= 2)
|
|
{
|
|
rectangle.X = 54;
|
|
rectangle.Y = 18;
|
|
}
|
|
}
|
|
if (Main.tileLargeFrames[index1] == (byte) 1 && num7 == 3)
|
|
rectangle.Y += 90;
|
|
if (Main.tileLargeFrames[index1] == (byte) 2 && num7 == 3)
|
|
rectangle.Y += 90;
|
|
tile1.frameX = (short) rectangle.X;
|
|
tile1.frameY = (short) rectangle.Y;
|
|
if (TileID.Sets.IsVine[index1])
|
|
{
|
|
up = tileTopCache == null ? index1 : (tileTopCache.nactive() ? (!tileTopCache.bottomSlope() ? (int) tileTopCache.type : -1) : -1);
|
|
if (index1 != up)
|
|
{
|
|
int num23 = up == 109 ? 1 : (up == 115 ? 1 : 0);
|
|
bool flag8 = up == 199 || up == 205;
|
|
bool flag9 = up == 2 || up == 52;
|
|
bool flag10 = up == 382;
|
|
int num24 = up == 70 ? 1 : (up == 528 ? 1 : 0);
|
|
ushort num25 = 0;
|
|
if (num24 != 0)
|
|
num25 = (ushort) 528;
|
|
if (num23 != 0)
|
|
num25 = (ushort) 115;
|
|
if (flag8)
|
|
num25 = (ushort) 205;
|
|
if (flag9 && index1 != 382)
|
|
num25 = (ushort) 52;
|
|
if (flag10)
|
|
num25 = (ushort) 382;
|
|
if (num25 != (ushort) 0 && (int) num25 != index1)
|
|
{
|
|
tile1.type = num25;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
return;
|
|
}
|
|
}
|
|
if (up != index1)
|
|
{
|
|
bool flag11 = false;
|
|
if (up == -1)
|
|
flag11 = true;
|
|
if (index1 == 52 && up != 2 && up != 192)
|
|
flag11 = true;
|
|
if (index1 == 382 && up != 2 && up != 192)
|
|
flag11 = true;
|
|
if (index1 == 62 && up != 60)
|
|
flag11 = true;
|
|
if (index1 == 115 && up != 109)
|
|
flag11 = true;
|
|
if (index1 == 528 && up != 70)
|
|
flag11 = true;
|
|
if (index1 == 205 && up != 199)
|
|
flag11 = true;
|
|
if (flag11)
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
}
|
|
if (!WorldGen.noTileActions && tile1.active() && (index1 == 53 || index1 == 112 || index1 == 116 || index1 == 123 || index1 == 234 || index1 == 224 || index1 == 495 || index1 == 330 || index1 == 331 || index1 == 332 || index1 == 333))
|
|
{
|
|
switch (Main.netMode)
|
|
{
|
|
case 0:
|
|
if (tile37 != null)
|
|
{
|
|
bool flag12 = false;
|
|
if (!Main.tile[i, j + 1].nactive())
|
|
flag12 = true;
|
|
else if (!Main.tile[i, j + 2].nactive() && (!Main.tile[i, j + 1].active() || !Main.tileSolid[(int) Main.tile[i, j + 1].type]))
|
|
flag12 = true;
|
|
if (flag12 && WorldGen.AllowsSandfall(tileTopCache))
|
|
{
|
|
int projType;
|
|
int dmg;
|
|
WorldGen.GetSandfallProjData(index1, out projType, out dmg);
|
|
tile1.ClearTile();
|
|
int index16 = Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.41f, projType, dmg, 0.0f, Main.myPlayer);
|
|
Main.projectile[index16].ai[0] = 1f;
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (tile37 != null && !tile37.nactive() && WorldGen.AllowsSandfall(tileTopCache))
|
|
{
|
|
int projType;
|
|
int dmg;
|
|
WorldGen.GetSandfallProjData(index1, out projType, out dmg);
|
|
tile1.ClearTile();
|
|
bool flag13 = false;
|
|
for (int index17 = 0; index17 < 1000; ++index17)
|
|
{
|
|
if (Main.projectile[index17].active && Main.projectile[index17].owner == Main.myPlayer && Main.projectile[index17].type == projType && Math.Abs(Main.projectile[index17].timeLeft - 3600) < 60 && (double) Main.projectile[index17].Distance(new Vector2((float) (i * 16 + 8), (float) (j * 16 + 10))) < 4.0)
|
|
{
|
|
flag13 = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag13)
|
|
{
|
|
int index18 = Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 2.5f, projType, dmg, 0.0f, Main.myPlayer);
|
|
Main.projectile[index18].velocity.Y = 0.5f;
|
|
Main.projectile[index18].position.Y += 2f;
|
|
Main.projectile[index18].netUpdate = true;
|
|
}
|
|
NetMessage.SendTileSquare(-1, i, j, 1);
|
|
WorldGen.SquareTileFrame(i, j);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (rectangle.X != frameX)
|
|
{
|
|
if (rectangle.Y != frameY)
|
|
{
|
|
if (frameX >= 0)
|
|
{
|
|
if (frameY >= 0)
|
|
{
|
|
++WorldGen.tileReframeCount;
|
|
if (WorldGen.tileReframeCount < 25)
|
|
{
|
|
int num26 = WorldGen.mergeUp ? 1 : 0;
|
|
bool mergeDown = WorldGen.mergeDown;
|
|
bool mergeLeft = WorldGen.mergeLeft;
|
|
bool mergeRight = WorldGen.mergeRight;
|
|
WorldGen.TileFrame(i - 1, j);
|
|
WorldGen.TileFrame(i + 1, j);
|
|
WorldGen.TileFrame(i, j - 1);
|
|
WorldGen.TileFrame(i, j + 1);
|
|
WorldGen.mergeUp = num26 != 0;
|
|
WorldGen.mergeDown = mergeDown;
|
|
WorldGen.mergeLeft = mergeLeft;
|
|
WorldGen.mergeRight = mergeRight;
|
|
}
|
|
--WorldGen.tileReframeCount;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
if (i <= 0 || j <= 0)
|
|
return;
|
|
WorldGen.UpdateMapTile(i, j, addToList);
|
|
}
|
|
|
|
public static void CheckTorch(int x, int y)
|
|
{
|
|
for (int index1 = x - 1; index1 <= x + 1; ++index1)
|
|
{
|
|
for (int index2 = y - 1; index2 <= y + 1; ++index2)
|
|
{
|
|
if (Main.tile[index1, index2] == null)
|
|
return;
|
|
}
|
|
}
|
|
Tile tile1 = Main.tile[x, y];
|
|
Tile tile2 = Main.tile[x, y - 1];
|
|
Tile tile3 = Main.tile[x, y + 1];
|
|
Tile tile4 = Main.tile[x - 1, y];
|
|
Tile tile5 = Main.tile[x + 1, y];
|
|
Tile tile6 = Main.tile[x - 1, y + 1];
|
|
Tile tile7 = Main.tile[x + 1, y + 1];
|
|
Tile tile8 = Main.tile[x - 1, y - 1];
|
|
Tile tile9 = Main.tile[x + 1, y - 1];
|
|
short num = 0;
|
|
if (tile1.frameX >= (short) 66)
|
|
num = (short) 66;
|
|
int index = -1;
|
|
int tree1 = -1;
|
|
int tree2 = -1;
|
|
int tree3 = -1;
|
|
int tree4 = -1;
|
|
int tree5 = -1;
|
|
int tree6 = -1;
|
|
if (tile2 != null && tile2.active() && !tile2.bottomSlope())
|
|
{
|
|
int type = (int) tile2.type;
|
|
}
|
|
if (tile3 != null && tile3.active() && (TileID.Sets.Platforms[(int) tile3.type] && WorldGen.TopEdgeCanBeAttachedTo(x, y + 1) || !tile3.halfBrick() && !tile3.topSlope()))
|
|
index = (int) tile3.type;
|
|
if (tile4 != null && tile4.active() && (tile4.slope() == (byte) 0 || (int) tile4.slope() % 2 != 1))
|
|
tree1 = (int) tile4.type;
|
|
if (tile5 != null && tile5.active() && (tile5.slope() == (byte) 0 || (int) tile5.slope() % 2 != 0))
|
|
tree2 = (int) tile5.type;
|
|
if (tile6 != null && tile6.active())
|
|
tree3 = (int) tile6.type;
|
|
if (tile7 != null && tile7.active())
|
|
tree4 = (int) tile7.type;
|
|
if (tile8 != null && tile8.active())
|
|
tree5 = (int) tile8.type;
|
|
if (tile9 != null && tile9.active())
|
|
tree6 = (int) tile9.type;
|
|
if (index >= 0 && Main.tileSolid[index] && (!Main.tileNoAttach[index] || TileID.Sets.Platforms[index]))
|
|
tile1.frameX = num;
|
|
else if (tree1 >= 0 && Main.tileSolid[tree1] && !Main.tileNoAttach[tree1] || tree1 >= 0 && TileID.Sets.IsBeam[tree1] || WorldGen.IsTreeType(tree1) && WorldGen.IsTreeType(tree5) && WorldGen.IsTreeType(tree3))
|
|
tile1.frameX = (short) (22 + (int) num);
|
|
else if (tree2 >= 0 && Main.tileSolid[tree2] && !Main.tileNoAttach[tree2] || tree2 >= 0 && TileID.Sets.IsBeam[tree2] || WorldGen.IsTreeType(tree2) && WorldGen.IsTreeType(tree6) && WorldGen.IsTreeType(tree4))
|
|
tile1.frameX = (short) (44 + (int) num);
|
|
else if (tile1.wall > (ushort) 0)
|
|
tile1.frameX = num;
|
|
else
|
|
WorldGen.KillTile(x, y);
|
|
}
|
|
|
|
public static void CheckProjectilePressurePad(int i, int j)
|
|
{
|
|
bool canUp;
|
|
bool canLeft;
|
|
bool canRight;
|
|
bool canDown;
|
|
WorldGen.CheckProjectilePressurePad_GetPossiblePlacementDirections(i, j, out canUp, out canLeft, out canRight, out canDown);
|
|
Tile tile = Main.tile[i, j];
|
|
bool flag;
|
|
switch ((int) tile.frameX / 22)
|
|
{
|
|
case 0:
|
|
flag = !canDown;
|
|
break;
|
|
case 1:
|
|
flag = !canUp;
|
|
break;
|
|
case 2:
|
|
flag = !canLeft;
|
|
break;
|
|
case 3:
|
|
flag = !canRight;
|
|
break;
|
|
default:
|
|
flag = true;
|
|
break;
|
|
}
|
|
if (!flag)
|
|
return;
|
|
if (canDown)
|
|
tile.frameX = (short) 0;
|
|
else if (canUp)
|
|
tile.frameX = (short) 22;
|
|
else if (canLeft)
|
|
tile.frameX = (short) 44;
|
|
else if (canRight)
|
|
tile.frameX = (short) 66;
|
|
else
|
|
WorldGen.KillTile(i, j);
|
|
}
|
|
|
|
private static void CheckProjectilePressurePad_GetPossiblePlacementDirections(
|
|
int i,
|
|
int j,
|
|
out bool canUp,
|
|
out bool canLeft,
|
|
out bool canRight,
|
|
out bool canDown)
|
|
{
|
|
canUp = false;
|
|
canLeft = false;
|
|
canRight = false;
|
|
canDown = false;
|
|
Tile tile1 = Main.tile[i, j];
|
|
Tile tile2 = Main.tile[i, j - 1];
|
|
Tile tile3 = Main.tile[i, j + 1];
|
|
Tile tile4 = Main.tile[i - 1, j];
|
|
Tile tile5 = Main.tile[i + 1, j];
|
|
Tile tile6 = Main.tile[i - 1, j + 1];
|
|
Tile tile7 = Main.tile[i + 1, j + 1];
|
|
Tile tile8 = Main.tile[i - 1, j - 1];
|
|
Tile tile9 = Main.tile[i + 1, j - 1];
|
|
int index1 = -1;
|
|
int index2 = -1;
|
|
int tree1 = -1;
|
|
int tree2 = -1;
|
|
int tree3 = -1;
|
|
int tree4 = -1;
|
|
int tree5 = -1;
|
|
int tree6 = -1;
|
|
if (tile2 != null && tile2.nactive() && !tile2.bottomSlope())
|
|
index2 = (int) tile2.type;
|
|
if (tile3 != null && tile3.nactive() && !tile3.halfBrick() && !tile3.topSlope())
|
|
index1 = (int) tile3.type;
|
|
if (tile4 != null && tile4.nactive() && (tile4.slope() == (byte) 0 || (int) tile4.slope() % 2 != 1))
|
|
tree1 = (int) tile4.type;
|
|
if (tile5 != null && tile5.nactive() && (tile5.slope() == (byte) 0 || (int) tile5.slope() % 2 != 0))
|
|
tree2 = (int) tile5.type;
|
|
if (tile6 != null && tile6.nactive())
|
|
tree3 = (int) tile6.type;
|
|
if (tile7 != null && tile7.nactive())
|
|
tree4 = (int) tile7.type;
|
|
if (tile8 != null && tile8.nactive())
|
|
tree5 = (int) tile8.type;
|
|
if (tile9 != null && tile9.nactive())
|
|
tree6 = (int) tile9.type;
|
|
if (index1 >= 0 && Main.tileSolid[index1] && (!Main.tileNoAttach[index1] || TileID.Sets.Platforms[index1]) && (tile3.bottomSlope() || tile3.slope() == (byte) 0) && !tile3.halfBrick())
|
|
canDown = true;
|
|
if (index2 >= 0 && Main.tileSolid[index2] && (!Main.tileNoAttach[index2] || TileID.Sets.Platforms[index2] && tile2.halfBrick()) && (tile2.topSlope() || tile2.slope() == (byte) 0 || tile2.halfBrick()))
|
|
canUp = true;
|
|
if (tree1 >= 0 && Main.tileSolid[tree1] && !Main.tileNoAttach[tree1] && (tile4.leftSlope() || tile4.slope() == (byte) 0) && !tile4.halfBrick() || tree1 >= 0 && TileID.Sets.IsBeam[tree1] || WorldGen.IsTreeType(tree1) && WorldGen.IsTreeType(tree5) && WorldGen.IsTreeType(tree3))
|
|
canLeft = true;
|
|
if ((tree2 < 0 || !Main.tileSolid[tree2] || Main.tileNoAttach[tree2] || !tile5.rightSlope() && tile5.slope() != (byte) 0 || tile5.halfBrick()) && (tree2 < 0 || !TileID.Sets.IsBeam[tree2]) && (!WorldGen.IsTreeType(tree2) || !WorldGen.IsTreeType(tree6) || !WorldGen.IsTreeType(tree4)))
|
|
return;
|
|
canRight = true;
|
|
}
|
|
|
|
public static bool IsTreeType(int tree) => tree >= 0 && TileID.Sets.IsATreeTrunk[tree];
|
|
|
|
public static int CanPlaceProjectilePressurePad(
|
|
int x,
|
|
int y,
|
|
int type = 442,
|
|
int style = 0,
|
|
int direction = 0,
|
|
int alternate = 0)
|
|
{
|
|
bool canUp;
|
|
bool canLeft;
|
|
bool canRight;
|
|
bool canDown;
|
|
WorldGen.CheckProjectilePressurePad_GetPossiblePlacementDirections(x, y, out canUp, out canLeft, out canRight, out canDown);
|
|
if (!canUp && !canDown && !canLeft && !canRight)
|
|
return -1;
|
|
switch (alternate)
|
|
{
|
|
case 0:
|
|
if (!canDown)
|
|
return -1;
|
|
break;
|
|
case 1:
|
|
if (!canUp)
|
|
return -1;
|
|
break;
|
|
case 2:
|
|
if (!canLeft)
|
|
return -1;
|
|
break;
|
|
case 3:
|
|
if (!canRight)
|
|
return -1;
|
|
break;
|
|
}
|
|
return style;
|
|
}
|
|
|
|
private static void CheckDoorOpen(int i, int j, Tile tileCache)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
int num1 = 0;
|
|
int index = i;
|
|
int frameX = (int) tileCache.frameX;
|
|
int frameY = (int) tileCache.frameY;
|
|
int doorStyle = frameY / 54 + (int) tileCache.frameX / 72 * 36;
|
|
int num2 = j - frameY % 54 / 18;
|
|
bool flag = false;
|
|
switch (frameX % 72)
|
|
{
|
|
case 0:
|
|
index = i;
|
|
num1 = 1;
|
|
break;
|
|
case 18:
|
|
index = i - 1;
|
|
num1 = 1;
|
|
break;
|
|
case 36:
|
|
index = i + 1;
|
|
num1 = -1;
|
|
break;
|
|
case 54:
|
|
index = i;
|
|
num1 = -1;
|
|
break;
|
|
}
|
|
Tile testTile1 = Main.tile[index, num2 - 1];
|
|
Tile testTile2 = Main.tile[index, num2 + 3];
|
|
if (testTile1 == null)
|
|
{
|
|
testTile1 = new Tile();
|
|
Main.tile[index, num2 - 1] = testTile1;
|
|
}
|
|
if (testTile2 == null)
|
|
{
|
|
testTile2 = new Tile();
|
|
Main.tile[index, num2 + 3] = testTile2;
|
|
}
|
|
if (!WorldGen.SolidTile(testTile1) || !WorldGen.SolidTile(testTile2))
|
|
{
|
|
flag = true;
|
|
WorldGen.destroyObject = true;
|
|
WorldGen.DropDoorItem(i, j, doorStyle);
|
|
}
|
|
int num3 = index;
|
|
if (num1 == -1)
|
|
num3 = index - 1;
|
|
for (int i1 = num3; i1 < num3 + 2; ++i1)
|
|
{
|
|
for (int j1 = num2; j1 < num2 + 3; ++j1)
|
|
{
|
|
if (!flag)
|
|
{
|
|
Tile tile = Main.tile[i1, j1];
|
|
if (!tile.active() || tile.type != (ushort) 11)
|
|
{
|
|
WorldGen.destroyObject = true;
|
|
WorldGen.DropDoorItem(i, j, doorStyle);
|
|
flag = true;
|
|
i1 = num3;
|
|
j1 = num2;
|
|
}
|
|
}
|
|
if (flag)
|
|
WorldGen.KillTile(i1, j1);
|
|
}
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
private static void CheckDoorClosed(int i, int j, Tile tileCache, int type)
|
|
{
|
|
if (WorldGen.destroyObject)
|
|
return;
|
|
bool flag = false;
|
|
int frameY = (int) tileCache.frameY;
|
|
int doorStyle = frameY / 54 + (int) tileCache.frameX / 54 * 36;
|
|
int j1 = j - frameY % 54 / 18;
|
|
Tile testTile1 = Main.tile[i, j1 - 1];
|
|
Tile tile1 = Main.tile[i, j1];
|
|
Tile tile2 = Main.tile[i, j1 + 1];
|
|
Tile tile3 = Main.tile[i, j1 + 2];
|
|
Tile testTile2 = Main.tile[i, j1 + 3];
|
|
if (testTile1 == null)
|
|
{
|
|
testTile1 = new Tile();
|
|
Main.tile[i, j1 - 1] = testTile1;
|
|
}
|
|
if (tile1 == null)
|
|
{
|
|
tile1 = new Tile();
|
|
Main.tile[i, j1] = tile1;
|
|
}
|
|
if (tile2 == null)
|
|
{
|
|
tile2 = new Tile();
|
|
Main.tile[i, j1 + 1] = tile2;
|
|
}
|
|
if (tile3 == null)
|
|
{
|
|
tile3 = new Tile();
|
|
Main.tile[i, j1 + 2] = tile3;
|
|
}
|
|
if (testTile2 == null)
|
|
{
|
|
testTile2 = new Tile();
|
|
Main.tile[i, j1 + 3] = testTile2;
|
|
}
|
|
if (!WorldGen.SolidTile(testTile1))
|
|
flag = true;
|
|
if (!WorldGen.SolidTile(testTile2))
|
|
flag = true;
|
|
if (!tile1.active() || (int) tile1.type != type)
|
|
flag = true;
|
|
if (!tile2.active() || (int) tile2.type != type)
|
|
flag = true;
|
|
if (!tile3.active() || (int) tile3.type != type)
|
|
flag = true;
|
|
if (flag)
|
|
{
|
|
WorldGen.destroyObject = true;
|
|
WorldGen.KillTile(i, j1);
|
|
WorldGen.KillTile(i, j1 + 1);
|
|
WorldGen.KillTile(i, j1 + 2);
|
|
WorldGen.DropDoorItem(i, j, doorStyle);
|
|
}
|
|
WorldGen.destroyObject = false;
|
|
}
|
|
|
|
private static void GetSandfallProjData(int type, out int projType, out int dmg)
|
|
{
|
|
dmg = 10;
|
|
switch (type)
|
|
{
|
|
case 59:
|
|
projType = 39;
|
|
break;
|
|
case 112:
|
|
projType = 56;
|
|
break;
|
|
case 116:
|
|
projType = 67;
|
|
break;
|
|
case 123:
|
|
projType = 71;
|
|
break;
|
|
case 224:
|
|
projType = 179;
|
|
break;
|
|
case 234:
|
|
projType = 241;
|
|
break;
|
|
case 330:
|
|
projType = 411;
|
|
dmg = 0;
|
|
break;
|
|
case 331:
|
|
projType = 412;
|
|
dmg = 0;
|
|
break;
|
|
case 332:
|
|
projType = 413;
|
|
dmg = 0;
|
|
break;
|
|
case 333:
|
|
projType = 414;
|
|
dmg = 0;
|
|
break;
|
|
case 495:
|
|
projType = 812;
|
|
break;
|
|
default:
|
|
projType = 31;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static bool AllowsSandfall(Tile tileTopCache)
|
|
{
|
|
bool flag = true;
|
|
if (tileTopCache.active() && (TileID.Sets.BasicChest[(int) tileTopCache.type] || TileID.Sets.BasicChestFake[(int) tileTopCache.type] || tileTopCache.type == (ushort) 323 || tileTopCache.type == (ushort) 88 || tileTopCache.type == (ushort) 80 || tileTopCache.type == (ushort) 77 || tileTopCache.type == (ushort) 26 || tileTopCache.type == (ushort) 475 || tileTopCache.type == (ushort) 470 || tileTopCache.type == (ushort) 597))
|
|
flag = false;
|
|
return flag;
|
|
}
|
|
|
|
public static void TriggerLunarApocalypse()
|
|
{
|
|
List<int> intList = new List<int>()
|
|
{
|
|
517,
|
|
422,
|
|
507,
|
|
493
|
|
};
|
|
int[] numArray = new int[4];
|
|
for (int index = 0; index < 4; ++index)
|
|
{
|
|
numArray[index] = intList[Main.rand.Next(intList.Count)];
|
|
intList.Remove(numArray[index]);
|
|
}
|
|
int num1 = Main.maxTilesX / 5;
|
|
int worldSurface = (int) Main.worldSurface;
|
|
for (int index1 = 0; index1 < 4; ++index1)
|
|
{
|
|
int num2 = num1 * (1 + index1);
|
|
bool flag = false;
|
|
for (int index2 = 0; index2 < 30; ++index2)
|
|
{
|
|
int num3 = Main.rand.Next(-100, 101);
|
|
for (int y = worldSurface; y > 100; --y)
|
|
{
|
|
if (!Collision.SolidTiles(num2 + num3 - 10, num2 + num3 + 10, y - 20, y + 15) && !WorldGen.PlayerLOS(num2 + num3 - 10, y) && !WorldGen.PlayerLOS(num2 + num3 + 10, y) && !WorldGen.PlayerLOS(num2 + num3 - 10, y - 20) && !WorldGen.PlayerLOS(num2 + num3 + 10, y - 20))
|
|
{
|
|
int number = NPC.NewNPC((num2 + num3) * 16, y * 16, numArray[index1]);
|
|
if (Main.netMode == 2 && number < 200)
|
|
NetMessage.SendData(23, number: number);
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (flag)
|
|
break;
|
|
}
|
|
if (!flag)
|
|
NPC.NewNPC(num2 * 16, (worldSurface - 40) * 16, numArray[index1]);
|
|
}
|
|
int num4;
|
|
NPC.TowerActiveStardust = (num4 = 1) != 0;
|
|
NPC.TowerActiveSolar = num4 != 0;
|
|
NPC.TowerActiveNebula = num4 != 0;
|
|
NPC.TowerActiveVortex = num4 != 0;
|
|
NPC.LunarApocalypseIsUp = true;
|
|
int strengthTowerMax;
|
|
NPC.ShieldStrengthTowerStardust = strengthTowerMax = NPC.ShieldStrengthTowerMax;
|
|
NPC.ShieldStrengthTowerNebula = strengthTowerMax;
|
|
NPC.ShieldStrengthTowerVortex = strengthTowerMax;
|
|
NPC.ShieldStrengthTowerSolar = strengthTowerMax;
|
|
NetMessage.SendData(101);
|
|
WorldGen.MessageLunarApocalypse();
|
|
}
|
|
|
|
public static void UpdateLunarApocalypse()
|
|
{
|
|
if (!NPC.LunarApocalypseIsUp)
|
|
return;
|
|
bool flag1 = false;
|
|
bool flag2 = false;
|
|
bool flag3 = false;
|
|
bool flag4 = false;
|
|
bool flag5 = false;
|
|
for (int index = 0; index < 200; ++index)
|
|
{
|
|
if (Main.npc[index].active)
|
|
{
|
|
switch (Main.npc[index].type)
|
|
{
|
|
case 398:
|
|
flag1 = true;
|
|
continue;
|
|
case 422:
|
|
flag3 = true;
|
|
continue;
|
|
case 493:
|
|
flag5 = true;
|
|
continue;
|
|
case 507:
|
|
flag4 = true;
|
|
continue;
|
|
case 517:
|
|
flag2 = true;
|
|
continue;
|
|
default:
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if (!flag2)
|
|
NPC.TowerActiveSolar = false;
|
|
if (!flag3)
|
|
NPC.TowerActiveVortex = false;
|
|
if (!flag4)
|
|
NPC.TowerActiveNebula = false;
|
|
if (!flag5)
|
|
NPC.TowerActiveStardust = false;
|
|
if (NPC.TowerActiveSolar || NPC.TowerActiveVortex || NPC.TowerActiveNebula || NPC.TowerActiveStardust || flag1)
|
|
return;
|
|
WorldGen.StartImpendingDoom();
|
|
}
|
|
|
|
public static void StartImpendingDoom()
|
|
{
|
|
NPC.LunarApocalypseIsUp = false;
|
|
NPC.MoonLordCountdown = 3600;
|
|
NetMessage.SendData(103, number: NPC.MoonLordCountdown);
|
|
WorldGen.BroadcastText(NetworkText.FromKey(Lang.misc[52].Key), 50, (int) byte.MaxValue, 130);
|
|
if (Main.netMode == 1)
|
|
return;
|
|
WorldGen.GetRidOfCultists();
|
|
}
|
|
|
|
public static void GetRidOfCultists()
|
|
{
|
|
for (int number = 0; number < 200; ++number)
|
|
{
|
|
if (Main.npc[number].active && (Main.npc[number].type == 437 || Main.npc[number].type == 438 || Main.npc[number].type == 379))
|
|
{
|
|
Main.npc[number].active = false;
|
|
if (Main.netMode != 1)
|
|
NetMessage.SendData(23, number: number);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void MessageLunarApocalypse()
|
|
{
|
|
if (!NPC.LunarApocalypseIsUp)
|
|
return;
|
|
int num = 0;
|
|
if (!NPC.TowerActiveSolar)
|
|
++num;
|
|
if (!NPC.TowerActiveVortex)
|
|
++num;
|
|
if (!NPC.TowerActiveNebula)
|
|
++num;
|
|
if (!NPC.TowerActiveStardust)
|
|
++num;
|
|
WorldGen.BroadcastText(NetworkText.FromKey(Lang.misc[43 + num].Key), 175, 75, (int) byte.MaxValue);
|
|
}
|
|
|
|
public static void BroadcastText(NetworkText text, Vector4 color) => WorldGen.BroadcastText(text, new Color(color));
|
|
|
|
public static void BroadcastText(NetworkText text, Vector3 color) => WorldGen.BroadcastText(text, new Color(color));
|
|
|
|
public static void BroadcastText(NetworkText text, int r, int g, int b) => WorldGen.BroadcastText(text, new Color(r, g, b));
|
|
|
|
public static void BroadcastText(NetworkText text, byte r, byte g, byte b) => WorldGen.BroadcastText(text, new Color((int) r, (int) g, (int) b));
|
|
|
|
public static void BroadcastText(NetworkText text, Color color)
|
|
{
|
|
if (Main.netMode == 0)
|
|
{
|
|
Main.NewText(text.ToString(), color.R, color.G, color.B);
|
|
}
|
|
else
|
|
{
|
|
if (Main.netMode != 2)
|
|
return;
|
|
ChatHelper.BroadcastChatMessage(text, color);
|
|
}
|
|
}
|
|
|
|
public static bool CanCutTile(int x, int y, TileCuttingContext context)
|
|
{
|
|
if (Main.tile[x, y + 1] == null || Main.tile[x, y + 1].type == (ushort) 78 || Main.tile[x, y + 1].type == (ushort) 380 || Main.tile[x, y + 1].type == (ushort) 579)
|
|
return false;
|
|
return Main.tile[x, y].type != (ushort) 254 || Main.tile[x, y].frameX >= (short) 144;
|
|
}
|
|
|
|
public static bool InAPlaceWithWind(Vector2 position, int width, int height)
|
|
{
|
|
Point tileCoordinates1 = position.ToTileCoordinates();
|
|
Point tileCoordinates2 = (position + new Vector2((float) width, (float) height)).ToTileCoordinates();
|
|
return WorldGen.InAPlaceWithWind(tileCoordinates1.X, tileCoordinates1.Y, 1 + tileCoordinates2.X - tileCoordinates1.X, 1 + tileCoordinates2.Y - tileCoordinates1.Y);
|
|
}
|
|
|
|
public static bool InAPlaceWithWind(int x, int y, int width, int height)
|
|
{
|
|
if ((double) y >= Main.worldSurface)
|
|
return false;
|
|
for (int index1 = 0; index1 < width; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < height; ++index2)
|
|
{
|
|
Tile tile = Main.tile[x + index1, y + index2];
|
|
if (tile == null || tile.liquid > (byte) 0 || tile.wall > (ushort) 0 && !WallID.Sets.AllowsWind[(int) tile.wall])
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static int[] CountTileTypesInWorld(params int[] oreTypes)
|
|
{
|
|
int[] numArray = new int[oreTypes.Length];
|
|
for (int index1 = 0; index1 < Main.maxTilesX; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < Main.maxTilesY; ++index2)
|
|
{
|
|
Tile tile = Main.tile[index1, index2];
|
|
if (tile.active())
|
|
{
|
|
for (int index3 = 0; index3 < oreTypes.Length; ++index3)
|
|
{
|
|
if (oreTypes[index3] == (int) tile.type)
|
|
{
|
|
++numArray[index3];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return numArray;
|
|
}
|
|
|
|
public static class SavedOreTiers
|
|
{
|
|
public static int Copper = 7;
|
|
public static int Iron = 6;
|
|
public static int Silver = 9;
|
|
public static int Gold = 8;
|
|
public static int Cobalt = 107;
|
|
public static int Mythril = 108;
|
|
public static int Adamantite = 111;
|
|
}
|
|
|
|
public static class Hooks
|
|
{
|
|
public static event WorldGen.Hooks.WorldGenConfigProcessEvent OnWorldGenConfigProcess;
|
|
|
|
public static event Action OnWorldLoad;
|
|
|
|
public static void Initialize()
|
|
{
|
|
Player.Hooks.OnEnterWorld += (Action<Player>) (player =>
|
|
{
|
|
if (player.whoAmI != Main.myPlayer)
|
|
return;
|
|
WorldGen.Hooks.WorldLoaded();
|
|
if (Main.netMode == 1)
|
|
return;
|
|
Main.FixUIScale();
|
|
});
|
|
WorldGen.Hooks.OnWorldLoad += new Action(WorldGen.mysticLogsEvent.StartWorld);
|
|
WorldGen.Hooks.OnWorldLoad += new Action(Main.checkHalloween);
|
|
WorldGen.Hooks.OnWorldLoad += new Action(Main.checkXMas);
|
|
}
|
|
|
|
public static void WorldLoaded()
|
|
{
|
|
if (WorldGen.Hooks.OnWorldLoad == null)
|
|
return;
|
|
WorldGen.Hooks.OnWorldLoad();
|
|
}
|
|
|
|
public static void ClearWorld()
|
|
{
|
|
PressurePlateHelper.Reset();
|
|
WorldGen.TownManager.Clear();
|
|
NPC.ResetKillCount();
|
|
Main.instance.ClearCachedTileDraws();
|
|
MapHelper.ResetMapData();
|
|
}
|
|
|
|
public static void ProcessWorldGenConfig(ref WorldGenConfiguration config)
|
|
{
|
|
if (WorldGen.Hooks.OnWorldGenConfigProcess == null)
|
|
return;
|
|
WorldGen.Hooks.OnWorldGenConfigProcess(ref config);
|
|
}
|
|
|
|
public delegate void WorldGenConfigProcessEvent(ref WorldGenConfiguration config);
|
|
}
|
|
|
|
public static class Spread
|
|
{
|
|
public static void Wall(int x, int y, int wallType)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
ushort num = (ushort) wallType;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (WorldGen.SolidTile(point1.X, point1.Y) || tile.wall != (ushort) 0)
|
|
{
|
|
if (tile.active() && tile.wall == (ushort) 0)
|
|
tile.wall = num;
|
|
}
|
|
else
|
|
{
|
|
tile.wall = num;
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Wall2(int x, int y, int wallType)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
ushort num1 = (ushort) wallType;
|
|
int num2 = 0;
|
|
int maxWallOut2 = WorldGen.maxWallOut2;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (!WorldGen.SolidTile(point1.X, point1.Y) && (int) tile.wall != (int) num1 && tile.wall != (ushort) 4 && tile.wall != (ushort) 40 && tile.wall != (ushort) 3 && tile.wall != (ushort) 87 && tile.wall != (ushort) 34)
|
|
{
|
|
if (num1 == (ushort) 63 && tile.wall == (ushort) 0)
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
++num2;
|
|
if (num2 >= maxWallOut2)
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
tile.wall = num1;
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
if (num1 == (ushort) 63)
|
|
{
|
|
point2 = new Point(point1.X - 1, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X - 1, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X - 2, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 2, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (tile.active() && (int) tile.wall != (int) num1 && tile.wall != (ushort) 4 && tile.wall != (ushort) 40 && tile.wall != (ushort) 3 && tile.wall != (ushort) 87 && tile.wall != (ushort) 34)
|
|
tile.wall = num1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Moss(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
ushort mossWall = WorldGen.mossWall;
|
|
ushort mossTile = WorldGen.mossTile;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (WorldGen.SolidTile(point1.X, point1.Y) || tile.wall != (ushort) 0)
|
|
{
|
|
if (tile.active())
|
|
{
|
|
if (tile.wall == (ushort) 0)
|
|
tile.wall = mossWall;
|
|
if (tile.type == (ushort) 1)
|
|
tile.type = mossTile;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tile.wall = mossWall;
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Gem(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile1 = Main.tile[point1.X, point1.Y];
|
|
if (WorldGen.SolidTile(point1.X, point1.Y) || tile1.wall != (ushort) 0)
|
|
{
|
|
if (tile1.active())
|
|
{
|
|
if (WorldGen.Spread.Gemmable((int) tile1.type))
|
|
tile1.type = WorldGen.randGemTile();
|
|
Tile tile2 = Main.tile[point1.X - 1, point1.Y];
|
|
if (WorldGen.Spread.Gemmable((int) tile2.type))
|
|
tile2.type = WorldGen.randGemTile();
|
|
Tile tile3 = Main.tile[point1.X + 1, point1.Y];
|
|
if (WorldGen.Spread.Gemmable((int) tile3.type))
|
|
tile3.type = WorldGen.randGemTile();
|
|
Tile tile4 = Main.tile[point1.X, point1.Y - 1];
|
|
if (WorldGen.Spread.Gemmable((int) tile4.type))
|
|
tile4.type = WorldGen.randGemTile();
|
|
Tile tile5 = Main.tile[point1.X, point1.Y + 1];
|
|
if (WorldGen.Spread.Gemmable((int) tile5.type))
|
|
tile5.type = WorldGen.randGemTile();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tile1.wall = (ushort) (48 + WorldGen.randGem());
|
|
if (!tile1.active() && WorldGen.genRand.Next(2) == 0)
|
|
WorldGen.PlaceTile(point1.X, point1.Y, 178, true, style: WorldGen.randGem());
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Spider(int x, int y)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
byte num = 62;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (WorldGen.SolidTile(point1.X, point1.Y) || tile.wall != (ushort) 0)
|
|
{
|
|
if (tile.active() && tile.wall == (ushort) 0)
|
|
tile.wall = (ushort) num;
|
|
}
|
|
else
|
|
{
|
|
tile.wall = (ushort) num;
|
|
WorldGen.SquareWallFrame(point1.X, point1.Y);
|
|
if (!tile.active())
|
|
{
|
|
tile.liquid = (byte) 0;
|
|
tile.lava(false);
|
|
if (WorldGen.SolidTile(point1.X, point1.Y + 1) && WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
if (WorldGen.genRand.Next(15) == 0)
|
|
WorldGen.AddBuriedChest(point1.X, point1.Y, 939, true, 15);
|
|
else
|
|
WorldGen.PlacePot(point1.X, point1.Y, style: WorldGen.genRand.Next(19, 21));
|
|
}
|
|
if (!tile.active())
|
|
{
|
|
if (WorldGen.SolidTile(point1.X, point1.Y - 1) && WorldGen.genRand.Next(3) == 0)
|
|
WorldGen.PlaceTight(point1.X, point1.Y, true);
|
|
else if (WorldGen.SolidTile(point1.X, point1.Y + 1))
|
|
{
|
|
WorldGen.PlaceTile(point1.X, point1.Y, 187, true, style: (9 + WorldGen.genRand.Next(5)));
|
|
if (WorldGen.genRand.Next(3) == 0)
|
|
{
|
|
if (!tile.active())
|
|
WorldGen.PlaceSmallPile(point1.X, point1.Y, 34 + WorldGen.genRand.Next(4), 1);
|
|
if (!tile.active())
|
|
WorldGen.PlaceSmallPile(point1.X, point1.Y, 48 + WorldGen.genRand.Next(6), 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void WallDungeon(int x, int y, int wallType)
|
|
{
|
|
if (!WorldGen.InWorld(x, y))
|
|
return;
|
|
ushort num = (ushort) wallType;
|
|
List<Point> pointList1 = new List<Point>();
|
|
List<Point> pointList2 = new List<Point>();
|
|
HashSet<Point> pointSet = new HashSet<Point>();
|
|
pointList2.Add(new Point(x, y));
|
|
while (pointList2.Count > 0)
|
|
{
|
|
pointList1.Clear();
|
|
pointList1.AddRange((IEnumerable<Point>) pointList2);
|
|
pointList2.Clear();
|
|
while (pointList1.Count > 0)
|
|
{
|
|
Point point1 = pointList1[0];
|
|
if (!WorldGen.InWorld(point1.X, point1.Y, 1))
|
|
{
|
|
pointList1.Remove(point1);
|
|
}
|
|
else
|
|
{
|
|
pointSet.Add(point1);
|
|
pointList1.Remove(point1);
|
|
Tile tile = Main.tile[point1.X, point1.Y];
|
|
if (!WorldGen.SolidTile(point1.X, point1.Y) && (int) tile.wall != (int) num && tile.wall > (ushort) 0 && tile.wall != (ushort) 244)
|
|
{
|
|
tile.wall = num;
|
|
Point point2 = new Point(point1.X - 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X + 1, point1.Y);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y - 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
point2 = new Point(point1.X, point1.Y + 1);
|
|
if (!pointSet.Contains(point2))
|
|
pointList2.Add(point2);
|
|
}
|
|
else if (tile.active())
|
|
tile.wall = num;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static bool Gemmable(int type) => type == 0 || type == 1 || type == 40 || type == 59 || type == 60 || type == 70 || type == 147 || type == 161;
|
|
}
|
|
|
|
public struct GrowTreeSettings
|
|
{
|
|
public ushort TreeTileType;
|
|
public int TreeHeightMin;
|
|
public int TreeHeightMax;
|
|
public int TreeTopPaddingNeeded;
|
|
public WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest GroundTest;
|
|
public WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack WallTest;
|
|
public ushort SaplingTileType;
|
|
|
|
public delegate bool IsTileFitForTreeGroundTest(int tileType);
|
|
|
|
public delegate bool IsWallTypeFitForTreeBack(int wallType);
|
|
|
|
public static class Profiles
|
|
{
|
|
public static WorldGen.GrowTreeSettings GemTree_Ruby = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 587,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Diamond = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 588,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Topaz = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 583,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Amethyst = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 584,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Sappphire = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 585,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Emerald = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 586,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings GemTree_Amber = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.GemTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.GemTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 589,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 590
|
|
};
|
|
public static WorldGen.GrowTreeSettings VanityTree_Sakura = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.VanityTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.DefaultTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 596,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 595
|
|
};
|
|
public static WorldGen.GrowTreeSettings VanityTree_Willow = new WorldGen.GrowTreeSettings()
|
|
{
|
|
GroundTest = new WorldGen.GrowTreeSettings.IsTileFitForTreeGroundTest(WorldGen.VanityTreeGroundTest),
|
|
WallTest = new WorldGen.GrowTreeSettings.IsWallTypeFitForTreeBack(WorldGen.DefaultTreeWallTest),
|
|
TreeHeightMax = 12,
|
|
TreeHeightMin = 7,
|
|
TreeTileType = 616,
|
|
TreeTopPaddingNeeded = 4,
|
|
SaplingTileType = 615
|
|
};
|
|
|
|
public static bool TryGetFromItemId(int itemType, out WorldGen.GrowTreeSettings profile)
|
|
{
|
|
switch (itemType)
|
|
{
|
|
case 4851:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Topaz;
|
|
return true;
|
|
case 4852:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Amethyst;
|
|
return true;
|
|
case 4853:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Sappphire;
|
|
return true;
|
|
case 4854:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Emerald;
|
|
return true;
|
|
case 4855:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Ruby;
|
|
return true;
|
|
case 4856:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Diamond;
|
|
return true;
|
|
case 4857:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.GemTree_Amber;
|
|
return true;
|
|
case 4871:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.VanityTree_Sakura;
|
|
return true;
|
|
case 4907:
|
|
profile = WorldGen.GrowTreeSettings.Profiles.VanityTree_Willow;
|
|
return true;
|
|
default:
|
|
profile = new WorldGen.GrowTreeSettings();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public struct CheckTreeSettings
|
|
{
|
|
public WorldGen.CheckTreeSettings.GroundValidTest IsGroundValid;
|
|
|
|
public delegate bool GroundValidTest(int groundTileType);
|
|
}
|
|
|
|
public enum SpecialKillTileContext
|
|
{
|
|
None,
|
|
MowingTheGrass,
|
|
}
|
|
|
|
public delegate bool GetTreeFoliageDataMethod(
|
|
int i,
|
|
int j,
|
|
int xoffset,
|
|
ref int treeFrame,
|
|
ref int treeStyle,
|
|
out int floorY,
|
|
out int topTextureFrameWidth,
|
|
out int topTextureFrameHeight);
|
|
}
|
|
}
|