Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ PlaceSandTrap()

static bool Terraria.WorldGen.PlaceSandTrap ( int i,
int j )
inlinestatic

Definition at line 29072 of file WorldGen.cs.

29073 {
29074 int num = 6;
29075 int num2 = 4;
29076 int num3 = 25;
29077 int k;
29078 for (k = j; !Main.tile[i, k].active() && k < Main.UnderworldLayer; k++)
29079 {
29080 }
29081 if (!Main.tileSolid[Main.tile[i, k].type] || Main.tile[i, k].halfBrick() || Main.tile[i, k].topSlope())
29082 {
29083 return false;
29084 }
29085 if ((Main.tile[i, k].type != 53 && Main.tile[i, k].type != 397 && Main.tile[i, k].type != 396) || (Main.tile[i, k].wall != 216 && Main.tile[i, k].wall != 187))
29086 {
29087 return false;
29088 }
29089 k--;
29090 int num4 = -1;
29091 int num5 = genRand.Next(6, 12);
29092 int num6 = genRand.Next(6, 14);
29093 for (int l = i - num3; l <= i + num3; l++)
29094 {
29095 for (int m = k - num3; m < k + num3; m++)
29096 {
29097 if (Main.tile[l, m].wire())
29098 {
29099 return false;
29100 }
29101 if (TileID.Sets.BasicChest[Main.tile[l, m].type])
29102 {
29103 return false;
29104 }
29105 if (TileID.Sets.Paintings[Main.tile[l, m].type])
29106 {
29107 return false;
29108 }
29109 if (Main.tile[l, m].type == 10)
29110 {
29111 return false;
29112 }
29113 if (Main.tile[l, m].type == 19)
29114 {
29115 return false;
29116 }
29117 if (Main.tile[l, m].type == 15)
29118 {
29119 return false;
29120 }
29121 if (Main.tile[l, m].type == 219)
29122 {
29123 return false;
29124 }
29125 }
29126 }
29127 for (int n = i - 2; n <= i + 2; n++)
29128 {
29129 for (int num7 = k + 1; num7 <= k + 3; num7++)
29130 {
29131 if (!Main.tile[n, num7].active() || !Main.tileSolid[Main.tile[n, num7].type])
29132 {
29133 return false;
29134 }
29135 }
29136 }
29137 if (Main.tile[i, k + 1].type == 162)
29138 {
29139 return false;
29140 }
29141 for (int num8 = k; num8 > k - 30; num8--)
29142 {
29143 if (Main.tile[i, num8].active())
29144 {
29145 if (Main.tile[i, num8].type == 396)
29146 {
29147 num4 = num8;
29148 break;
29149 }
29150 return false;
29151 }
29152 }
29153 if (num4 <= -1)
29154 {
29155 return false;
29156 }
29157 if (k - num4 < num6 + num2)
29158 {
29159 return false;
29160 }
29161 int num9 = 0;
29162 int num10 = (k + num4) / 2;
29163 for (int num11 = i - num5; num11 <= i + num5; num11++)
29164 {
29165 if (Main.tile[num11, num10].active() && Main.tileSolid[Main.tile[num11, num10].type])
29166 {
29167 return false;
29168 }
29169 for (int num12 = num4 - num6; num12 <= num4; num12++)
29170 {
29171 if (Main.tile[num11, num12].active())
29172 {
29173 if (TileID.Sets.Ore[Main.tile[num11, num12].type] || Main.tile[num11, num12].type == 404)
29174 {
29175 return false;
29176 }
29177 if (Main.tileSolid[Main.tile[num11, num12].type])
29178 {
29179 num9++;
29180 }
29181 }
29182 }
29183 }
29184 double num13 = (double)((num5 * 2 + 1) * (num6 + 1)) * 0.75;
29185 if ((double)num9 < num13)
29186 {
29187 return false;
29188 }
29189 for (int num14 = i - num5 - 1; num14 <= i + num5 + 1; num14++)
29190 {
29191 for (int num15 = num4 - num6; num15 <= num4; num15++)
29192 {
29193 bool flag = false;
29194 if (Main.tile[num14, num15].active() && Main.tileSolid[Main.tile[num14, num15].type])
29195 {
29196 flag = true;
29197 }
29198 if (num15 == num4)
29199 {
29200 Main.tile[num14, num15].slope(0);
29201 Main.tile[num14, num15].halfBrick(halfBrick: false);
29202 if (!flag)
29203 {
29204 Main.tile[num14, num15].active(active: true);
29205 Main.tile[num14, num15].type = 396;
29206 }
29207 }
29208 else if (num15 == num4 - num6)
29209 {
29210 Main.tile[num14, num15].ClearTile();
29211 Main.tile[num14, num15].active(active: true);
29212 if (flag && Main.tile[num14, num15 - 1].active() && Main.tileSolid[Main.tile[num14, num15 - 1].type])
29213 {
29214 Main.tile[num14, num15].type = 397;
29215 }
29216 else
29217 {
29218 Main.tile[num14, num15].type = 396;
29219 }
29220 }
29221 else if (num14 == i - num5 - 1 || num14 == i + num5 + 1)
29222 {
29223 if (!flag)
29224 {
29225 Main.tile[num14, num15].ClearTile();
29226 Main.tile[num14, num15].active(active: true);
29227 Main.tile[num14, num15].type = 396;
29228 }
29229 else
29230 {
29231 Main.tile[num14, num15].slope(0);
29232 Main.tile[num14, num15].halfBrick(halfBrick: false);
29233 }
29234 }
29235 else
29236 {
29237 Main.tile[num14, num15].ClearTile();
29238 Main.tile[num14, num15].active(active: true);
29239 Main.tile[num14, num15].type = 53;
29240 }
29241 }
29242 }
29243 for (int num16 = (int)((double)num4 - (double)num6 * 0.666); (double)num16 <= (double)num4 - (double)num6 * 0.333; num16++)
29244 {
29245 if ((double)num16 < (double)num4 - (double)num6 * 0.4)
29246 {
29247 if (Main.tile[i - num5 - 2, num16].bottomSlope())
29248 {
29249 Main.tile[i - num5 - 2, num16].slope(0);
29250 }
29251 }
29252 else if ((double)num16 > (double)num4 - (double)num6 * 0.6)
29253 {
29254 if (Main.tile[i - num5 - 2, num16].topSlope())
29255 {
29256 Main.tile[i - num5 - 2, num16].slope(0);
29257 }
29258 Main.tile[i - num5 - 2, num16].halfBrick(halfBrick: false);
29259 }
29260 else
29261 {
29262 Main.tile[i - num5 - 2, num16].halfBrick(halfBrick: false);
29263 Main.tile[i - num5 - 2, num16].slope(0);
29264 }
29265 if (!Main.tile[i - num5 - 2, num16].active() || !Main.tileSolid[Main.tile[i - num5 - 2, num16].type])
29266 {
29267 Main.tile[i - num5 - 2, num16].active(active: true);
29268 Main.tile[i - num5 - 2, num16].type = 396;
29269 }
29270 if (!Main.tile[i + num5 + 2, num16].active() || !Main.tileSolid[Main.tile[i + num5 + 2, num16].type])
29271 {
29272 Main.tile[i + num5 + 2, num16].active(active: true);
29273 Main.tile[i + num5 + 2, num16].type = 396;
29274 }
29275 }
29276 for (int num17 = num4 - num6; num17 <= num4; num17++)
29277 {
29278 Main.tile[i - num5 - 2, num17].slope(0);
29279 Main.tile[i - num5 - 2, num17].halfBrick(halfBrick: false);
29280 Main.tile[i - num5 - 1, num17].slope(0);
29281 Main.tile[i - num5 - 1, num17].halfBrick(halfBrick: false);
29282 Main.tile[i - num5 + 1, num17].slope(0);
29283 Main.tile[i - num5 + 1, num17].halfBrick(halfBrick: false);
29284 Main.tile[i - num5 + 2, num17].slope(0);
29285 Main.tile[i - num5 + 2, num17].halfBrick(halfBrick: false);
29286 }
29287 for (int num18 = i - num5 - 1; num18 < i + num5 + 1; num18++)
29288 {
29289 int num19 = k - num6 - 1;
29290 if (Main.tile[num18, num19].bottomSlope())
29291 {
29292 Main.tile[num18, num19].slope(0);
29293 }
29294 Main.tile[num18, num19].halfBrick(halfBrick: false);
29295 }
29296 KillTile(i - 2, k);
29297 KillTile(i - 1, k);
29298 KillTile(i + 1, k);
29299 KillTile(i + 2, k);
29300 PlaceTile(i, k, 135, mute: true, forced: false, -1, 7);
29301 for (int num20 = i - num5; num20 <= i + num5; num20++)
29302 {
29303 int num21 = k;
29304 if ((double)num20 < (double)i - (double)num5 * 0.8 || (double)num20 > (double)i + (double)num5 * 0.8)
29305 {
29306 num21 = k - 3;
29307 }
29308 else if ((double)num20 < (double)i - (double)num5 * 0.6 || (double)num20 > (double)i + (double)num5 * 0.6)
29309 {
29310 num21 = k - 2;
29311 }
29312 else if ((double)num20 < (double)i - (double)num5 * 0.4 || (double)num20 > (double)i + (double)num5 * 0.4)
29313 {
29314 num21 = k - 1;
29315 }
29316 for (int num22 = num4; num22 <= k; num22++)
29317 {
29318 if (num20 == i && num22 <= k)
29319 {
29320 Main.tile[i, num22].wire(wire: true);
29321 }
29322 if (Main.tile[num20, num22].active() && Main.tileSolid[Main.tile[num20, num22].type])
29323 {
29324 if (num22 < num4 + num - 4)
29325 {
29326 Main.tile[num20, num22].actuator(actuator: true);
29327 Main.tile[num20, num22].wire(wire: true);
29328 }
29329 else if (num22 < num21)
29330 {
29332 }
29333 }
29334 }
29335 }
29336 return true;
29337 }
static bool[] Paintings
Definition TileID.cs:117
static bool[] BasicChest
Definition TileID.cs:223
static bool[] Ore
Definition TileID.cs:295
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static bool PlaceTile(int i, int j, int Type, bool mute=false, bool forced=false, int plr=-1, int style=0)
static UnifiedRandom genRand
Definition WorldGen.cs:1215

References Terraria.ID.TileID.Sets.BasicChest, Terraria.ID.TileID.Sets.Ore, Terraria.ID.TileID.Sets.Paintings, Terraria.Main.tile, Terraria.Main.tileSolid, and Terraria.Main.UnderworldLayer.