public bool GenerateBoulderTrap(int x, int y, bool floorTrap) { int plateY = y; while (!WorldGen.SolidTile3(x, plateY)) { plateY++; if (plateY > WorldGen.tBottom) { return(false); } } if (Main.tile[x, plateY].type == TileID.WoodenSpikes) { return(false); } plateY--; if (Main.tile[x, plateY].type == TileID.LihzahrdAltar) { return(false); } int trapY = y, trapX = WorldGen.genRand.Next(2), plateX = WorldGen.genRand.Next(2); bool placePlate = true; byte wireColor = 4; if (floorTrap) { trapY = plateY + 1; if ((Main.tile[x - 1 + ((trapX ^ 1) * 2), plateY].type != TileID.LihzahrdBrick && Main.tile[x - 1 + ((trapX ^ 1) * 2), plateY].type != TileID.WoodenSpikes && Main.tile[x - 1 + ((trapX ^ 1) * 2), plateY].type != TileID.LihzahrdAltar) && GadgetMethods.TileAreaCheck(x - trapX, trapY, 2, 2, true, TileID.LihzahrdBrick, true, WallID.LihzahrdBrickUnsafe)) { trapX = x - trapX; } else if ((Main.tile[x - 1 + (trapX * 2), plateY].type != TileID.LihzahrdBrick && Main.tile[x - 1 + (trapX * 2), plateY].type != TileID.WoodenSpikes && Main.tile[x - 1 + (trapX * 2), plateY].type != TileID.LihzahrdAltar) && GadgetMethods.TileAreaCheck(x - (trapX ^ 1), trapY, 2, 2, true, TileID.LihzahrdBrick, true, WallID.LihzahrdBrickUnsafe)) { trapX = x - (trapX ^ 1); } else { return(false); } placePlate = !(GadgetMethods.HasWire(trapX, plateY) || GadgetMethods.HasWire(trapX + 1, plateY)); if (placePlate) { if (WorldGen.TileEmpty(trapX + plateX, plateY)) { plateX = trapX + plateX; } else if (WorldGen.TileEmpty(trapX + (plateX ^ 1), plateY)) { plateX = trapX + (plateX ^ 1); } else { return(false); } if (Main.tile[trapX + (trapX == plateX ? 1 : 0), trapY].slope() != 0) { Main.tile[trapX + (trapX == plateX ? 1 : 0), trapY].slope(0); } if (Main.tile[trapX + (trapX == plateX ? 1 : 0), trapY].halfBrick()) { Main.tile[trapX + (trapX == plateX ? 1 : 0), trapY].halfBrick(false); } } else { wireColor = GadgetMethods.GetRandomWireColor(trapX + plateX, plateY, 0); if (wireColor == 0) { wireColor = GadgetMethods.GetRandomWireColor(trapX + (plateX ^ 1), plateY, 4); } if (Main.tile[trapX, trapY].slope() != 0) { Main.tile[trapX, trapY].slope(0); } if (Main.tile[trapX, trapY].halfBrick()) { Main.tile[trapX, trapY].halfBrick(false); } if (Main.tile[trapX + 1, trapY].slope() != 0) { Main.tile[trapX + 1, trapY].slope(0); } if (Main.tile[trapX + 1, trapY].halfBrick()) { Main.tile[trapX + 1, trapY].halfBrick(false); } } } else { if (!GadgetMethods.HasWire(x, plateY) && Main.tile[x, plateY].active()) { return(false); } while (plateY - trapY < 7) { trapY--; if (trapY < WorldGen.tTop || WorldGen.SolidTile3(x, trapY)) { return(false); } } bool unoccupiedt = GadgetMethods.TileAreaCheck(x, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) && (GadgetMethods.TileAreaCheck(x + 1, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) || GadgetMethods.TileAreaCheck(x - 1, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe)); if (!unoccupiedt) { return(false); } bool unoccupiedb = unoccupiedt; int maxY = trapY; while (unoccupiedb && (plateY - trapY) > 7) { trapY++; unoccupiedb = GadgetMethods.TileAreaCheck(x, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) && (GadgetMethods.TileAreaCheck(x + 1, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) || GadgetMethods.TileAreaCheck(x - 1, trapY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe)); if (!unoccupiedb) { trapY -= 3; break; } } while (unoccupiedt) { maxY--; unoccupiedt = GadgetMethods.TileAreaCheck(x, maxY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) && (GadgetMethods.TileAreaCheck(x + 1, maxY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe) || GadgetMethods.TileAreaCheck(x - 1, maxY, 1, 2, false, 0, true, WallID.LihzahrdBrickUnsafe)); if (!unoccupiedt) { maxY += 3; if (trapY < maxY) { return(false); } break; } } trapY = trapY == maxY ? trapY : WorldGen.genRand.Next(maxY, trapY + 1); if (GadgetMethods.TileAreaCheck(x - trapX, trapY, 2, 2, false, 0, true, WallID.LihzahrdBrickUnsafe)) { trapX = x - trapX; } else if (GadgetMethods.TileAreaCheck(x - (trapX ^ 1), trapY, 2, 2, false, 0, true, WallID.LihzahrdBrickUnsafe)) { trapX = x - (trapX ^ 1); } else { return(false); } for (int i = trapX - 1; i < trapX + 3; i++) { for (int j = trapY - 1; j < trapY + 3; j++) { if ((i == trapX - 1 || i == trapX + 2) && (j == trapY - 1 || j == trapY + 2) || !GadgetMethods.HasWire(i, j)) { continue; } placePlate = false; plateY = trapY; wireColor = GadgetMethods.GetRandomWireColor(i, j, 4); break; } } if (placePlate) { for (int j = trapY + 2; j <= plateY; j++) { if (!GadgetMethods.HasWire(x, j)) { continue; } placePlate = false; plateY = j; wireColor = GadgetMethods.GetRandomWireColor(x, j, 4); break; } } for (int j = trapY + 2; j < plateY; j++) { GadgetMethods.PlaceWire(x, j, wireColor); } plateX = x; } ushort boulderTrap = (ushort)TileType <Tiles.BoulderTrapTile>(); int style = floorTrap ? 3 : 0; Main.tile[trapX, trapY].active(true); Main.tile[trapX, trapY].frameY = 0; Main.tile[trapX, trapY].frameX = (short)(36 * style); Main.tile[trapX, trapY].type = boulderTrap; GadgetMethods.PlaceWire(trapX, trapY, wireColor); Main.tile[trapX + 1, trapY].active(true); Main.tile[trapX + 1, trapY].frameY = 0; Main.tile[trapX + 1, trapY].frameX = (short)(36 * style + 18); Main.tile[trapX + 1, trapY].type = boulderTrap; GadgetMethods.PlaceWire(trapX + 1, trapY, wireColor); Main.tile[trapX, trapY + 1].active(true); Main.tile[trapX, trapY + 1].frameY = 18; Main.tile[trapX, trapY + 1].frameX = (short)(36 * style); Main.tile[trapX, trapY + 1].type = boulderTrap; GadgetMethods.PlaceWire(trapX, trapY + 1, wireColor); Main.tile[trapX + 1, trapY + 1].active(true); Main.tile[trapX + 1, trapY + 1].frameY = 18; Main.tile[trapX + 1, trapY + 1].frameX = (short)(36 * style + 18); Main.tile[trapX + 1, trapY + 1].type = boulderTrap; GadgetMethods.PlaceWire(trapX + 1, trapY + 1, wireColor); if (!floorTrap) { Main.tile[trapX, trapY].inActive(true); Main.tile[trapX + 1, trapY].inActive(true); Main.tile[trapX, trapY + 1].inActive(true); Main.tile[trapX + 1, trapY + 1].inActive(true); } if (placePlate) { if (Main.tile[plateX, plateY + 1].slope() != 0) { Main.tile[plateX, plateY + 1].slope(0); } if (Main.tile[plateX, plateY + 1].halfBrick()) { Main.tile[plateX, plateY + 1].halfBrick(false); } WorldGen.PlaceTile(plateX, plateY, TileID.PressurePlates, true, true, -1, 6); GadgetMethods.PlaceWire(plateX, plateY, wireColor); } return(true); }