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

◆ hardUpdateWorld()

static void Terraria.WorldGen.hardUpdateWorld ( int i,
int j )
inlinestatic

Definition at line 60111 of file WorldGen.cs.

60112 {
60113 if (!Main.hardMode || Main.tile[i, j].inActive())
60114 {
60115 return;
60116 }
60117 int type = Main.tile[i, j].type;
60118 if (type > 0 && type < TileID.Count && TileID.Sets.CanGrowCrystalShards[type] && ((double)j > Main.rockLayer || Main.remixWorld) && genRand.Next(5) == 0)
60119 {
60120 int num = genRand.Next(4);
60121 int num2 = 0;
60122 int num3 = 0;
60123 switch (num)
60124 {
60125 case 0:
60126 num2 = -1;
60127 break;
60128 case 1:
60129 num2 = 1;
60130 break;
60131 default:
60132 num3 = ((num != 0) ? 1 : (-1));
60133 break;
60134 }
60135 if (!Main.tile[i + num2, j + num3].active())
60136 {
60137 int num4 = 0;
60138 int num5 = 6;
60139 for (int k = i - num5; k <= i + num5; k++)
60140 {
60141 for (int l = j - num5; l <= j + num5; l++)
60142 {
60143 if (Main.tile[k, l].active() && Main.tile[k, l].type == 129)
60144 {
60145 num4++;
60146 }
60147 }
60148 }
60149 if (num4 < 2)
60150 {
60151 int style = (short)genRand.Next(18);
60152 if (genRand.Next(50) == 0)
60153 {
60154 style = (short)(18 + genRand.Next(6));
60155 }
60156 PlaceTile(i + num2, j + num3, 129, mute: true, forced: false, -1, style);
60157 NetMessage.SendTileSquare(-1, i + num2, j + num3);
60158 }
60159 }
60160 }
60161 if ((double)j > (Main.worldSurface + Main.rockLayer) / 2.0 || Main.remixWorld)
60162 {
60163 if (type == 60 && genRand.Next(300) == 0)
60164 {
60165 int num6 = i + genRand.Next(-10, 11);
60166 int num7 = j + genRand.Next(-10, 11);
60167 if (InWorld(num6, num7, 2) && Main.tile[num6, num7].active() && Main.tile[num6, num7].type == 59 && (!Main.tile[num6, num7 - 1].active() || (Main.tile[num6, num7 - 1].type != 5 && Main.tile[num6, num7 - 1].type != 236 && Main.tile[num6, num7 - 1].type != 238)) && Chlorophyte(num6, num7))
60168 {
60169 Main.tile[num6, num7].type = 211;
60171 if (Main.netMode == 2)
60172 {
60173 NetMessage.SendTileSquare(-1, num6, num7);
60174 }
60175 }
60176 }
60177 if (type == 211 || type == 346)
60178 {
60179 int num8 = i;
60180 int num9 = j;
60181 if (genRand.Next(3) != 0)
60182 {
60183 int num10 = genRand.Next(4);
60184 if (num10 == 0)
60185 {
60186 num8++;
60187 }
60188 if (num10 == 1)
60189 {
60190 num8--;
60191 }
60192 if (num10 == 2)
60193 {
60194 num9++;
60195 }
60196 if (num10 == 3)
60197 {
60198 num9--;
60199 }
60200 if (InWorld(num8, num9, 2) && Main.tile[num8, num9].active() && (Main.tile[num8, num9].type == 59 || Main.tile[num8, num9].type == 60) && Chlorophyte(num8, num9))
60201 {
60202 Main.tile[num8, num9].type = 211;
60204 if (Main.netMode == 2)
60205 {
60206 NetMessage.SendTileSquare(-1, num8, num9);
60207 }
60208 }
60209 }
60210 bool flag = true;
60211 while (flag)
60212 {
60213 flag = false;
60214 num8 = i + Main.rand.Next(-6, 7);
60215 num9 = j + Main.rand.Next(-6, 7);
60216 if (!InWorld(num8, num9, 2) || !Main.tile[num8, num9].active())
60217 {
60218 continue;
60219 }
60220 if (Main.tile[num8, num9].type == 661 || Main.tile[num8, num9].type == 662 || Main.tile[num8, num9].type == 23 || Main.tile[num8, num9].type == 199 || Main.tile[num8, num9].type == 2 || Main.tile[num8, num9].type == 477 || Main.tile[num8, num9].type == 492 || Main.tile[num8, num9].type == 109)
60221 {
60222 Main.tile[num8, num9].type = 60;
60224 if (Main.netMode == 2)
60225 {
60226 NetMessage.SendTileSquare(-1, num8, num9);
60227 }
60228 flag = true;
60229 }
60230 else if (Main.tile[num8, num9].type == 0)
60231 {
60232 Main.tile[num8, num9].type = 59;
60234 if (Main.netMode == 2)
60235 {
60236 NetMessage.SendTileSquare(-1, num8, num9);
60237 }
60238 flag = true;
60239 }
60240 else if (Main.tile[num8, num9].type == 25 || Main.tile[num8, num9].type == 203)
60241 {
60242 Main.tile[num8, num9].type = 1;
60244 if (Main.netMode == 2)
60245 {
60246 NetMessage.SendTileSquare(-1, num8, num9);
60247 }
60248 flag = true;
60249 }
60250 else if (Main.tile[num8, num9].type == 112 || Main.tile[num8, num9].type == 234)
60251 {
60252 Main.tile[num8, num9].type = 53;
60254 if (Main.netMode == 2)
60255 {
60256 NetMessage.SendTileSquare(-1, num8, num9);
60257 }
60258 flag = true;
60259 }
60260 else if (Main.tile[num8, num9].type == 398 || Main.tile[num8, num9].type == 399)
60261 {
60262 Main.tile[num8, num9].type = 397;
60264 if (Main.netMode == 2)
60265 {
60266 NetMessage.SendTileSquare(-1, num8, num9);
60267 }
60268 flag = true;
60269 }
60270 else if (Main.tile[num8, num9].type == 400 || Main.tile[num8, num9].type == 401)
60271 {
60272 Main.tile[num8, num9].type = 396;
60274 if (Main.netMode == 2)
60275 {
60276 NetMessage.SendTileSquare(-1, num8, num9);
60277 }
60278 flag = true;
60279 }
60280 else if (Main.tile[num8, num9].type == 24 || Main.tile[num8, num9].type == 201 || Main.tile[num8, num9].type == 32 || Main.tile[num8, num9].type == 352 || Main.tile[num8, num9].type == 636 || Main.tile[num8, num9].type == 205)
60281 {
60282 KillTile(num8, num9);
60283 if (Main.netMode == 2)
60284 {
60285 NetMessage.SendTileSquare(-1, num8, num9);
60286 }
60287 flag = true;
60288 }
60289 }
60290 }
60291 }
60292 if ((NPC.downedPlantBoss && genRand.Next(2) != 0) || !AllowedToSpreadInfections)
60293 {
60294 return;
60295 }
60296 if (type == 23 || type == 25 || type == 32 || type == 112 || type == 163 || type == 400 || type == 398 || type == 636 || type == 661)
60297 {
60298 bool flag2 = true;
60299 while (flag2)
60300 {
60301 flag2 = false;
60302 int num11 = i + genRand.Next(-3, 4);
60303 int num12 = j + genRand.Next(-3, 4);
60304 if (!InWorld(num11, num12, 10))
60305 {
60306 continue;
60307 }
60309 {
60311 }
60312 else
60313 {
60314 if (CountNearBlocksTypes(num11, num12, 2, 1, 27) > 0)
60315 {
60316 continue;
60317 }
60318 if (Main.tile[num11, num12].type == 2)
60319 {
60320 if (genRand.Next(2) == 0)
60321 {
60322 flag2 = true;
60323 }
60324 Main.tile[num11, num12].type = 23;
60326 NetMessage.SendTileSquare(-1, num11, num12);
60327 }
60328 else if (Main.tile[num11, num12].type == 1 || Main.tileMoss[Main.tile[num11, num12].type])
60329 {
60330 if (genRand.Next(2) == 0)
60331 {
60332 flag2 = true;
60333 }
60334 Main.tile[num11, num12].type = 25;
60336 NetMessage.SendTileSquare(-1, num11, num12);
60337 }
60338 else if (Main.tile[num11, num12].type == 53)
60339 {
60340 if (genRand.Next(2) == 0)
60341 {
60342 flag2 = true;
60343 }
60344 Main.tile[num11, num12].type = 112;
60346 NetMessage.SendTileSquare(-1, num11, num12);
60347 }
60348 else if (Main.tile[num11, num12].type == 396)
60349 {
60350 if (genRand.Next(2) == 0)
60351 {
60352 flag2 = true;
60353 }
60354 Main.tile[num11, num12].type = 400;
60356 NetMessage.SendTileSquare(-1, num11, num12);
60357 }
60358 else if (Main.tile[num11, num12].type == 397)
60359 {
60360 if (genRand.Next(2) == 0)
60361 {
60362 flag2 = true;
60363 }
60364 Main.tile[num11, num12].type = 398;
60366 NetMessage.SendTileSquare(-1, num11, num12);
60367 }
60368 else if (Main.tile[num11, num12].type == 60)
60369 {
60370 if (genRand.Next(2) == 0)
60371 {
60372 flag2 = true;
60373 }
60374 Main.tile[num11, num12].type = 661;
60376 NetMessage.SendTileSquare(-1, num11, num12);
60377 }
60378 else if (Main.tile[num11, num12].type == 69)
60379 {
60380 if (genRand.Next(2) == 0)
60381 {
60382 flag2 = true;
60383 }
60384 Main.tile[num11, num12].type = 32;
60386 NetMessage.SendTileSquare(-1, num11, num12);
60387 }
60388 else if (Main.tile[num11, num12].type == 161)
60389 {
60390 if (genRand.Next(2) == 0)
60391 {
60392 flag2 = true;
60393 }
60394 Main.tile[num11, num12].type = 163;
60396 NetMessage.SendTileSquare(-1, num11, num12);
60397 }
60398 }
60399 }
60400 }
60401 if (type == 199 || type == 200 || type == 201 || type == 203 || type == 205 || type == 234 || type == 352 || type == 401 || type == 399 || type == 662)
60402 {
60403 bool flag3 = true;
60404 while (flag3)
60405 {
60406 flag3 = false;
60407 int num13 = i + genRand.Next(-3, 4);
60408 int num14 = j + genRand.Next(-3, 4);
60409 if (!InWorld(num13, num14, 10))
60410 {
60411 continue;
60412 }
60414 {
60416 }
60417 else
60418 {
60419 if (CountNearBlocksTypes(num13, num14, 2, 1, 27) > 0)
60420 {
60421 continue;
60422 }
60423 if (Main.tile[num13, num14].type == 2)
60424 {
60425 if (genRand.Next(2) == 0)
60426 {
60427 flag3 = true;
60428 }
60429 Main.tile[num13, num14].type = 199;
60431 NetMessage.SendTileSquare(-1, num13, num14);
60432 }
60433 else if (Main.tile[num13, num14].type == 1 || Main.tileMoss[Main.tile[num13, num14].type])
60434 {
60435 if (genRand.Next(2) == 0)
60436 {
60437 flag3 = true;
60438 }
60439 Main.tile[num13, num14].type = 203;
60441 NetMessage.SendTileSquare(-1, num13, num14);
60442 }
60443 else if (Main.tile[num13, num14].type == 53)
60444 {
60445 if (genRand.Next(2) == 0)
60446 {
60447 flag3 = true;
60448 }
60449 Main.tile[num13, num14].type = 234;
60451 NetMessage.SendTileSquare(-1, num13, num14);
60452 }
60453 else if (Main.tile[num13, num14].type == 396)
60454 {
60455 if (genRand.Next(2) == 0)
60456 {
60457 flag3 = true;
60458 }
60459 Main.tile[num13, num14].type = 401;
60461 NetMessage.SendTileSquare(-1, num13, num14);
60462 }
60463 else if (Main.tile[num13, num14].type == 397)
60464 {
60465 if (genRand.Next(2) == 0)
60466 {
60467 flag3 = true;
60468 }
60469 Main.tile[num13, num14].type = 399;
60471 NetMessage.SendTileSquare(-1, num13, num14);
60472 }
60473 else if (Main.tile[num13, num14].type == 60)
60474 {
60475 if (genRand.Next(2) == 0)
60476 {
60477 flag3 = true;
60478 }
60479 Main.tile[num13, num14].type = 662;
60481 NetMessage.SendTileSquare(-1, num13, num14);
60482 }
60483 else if (Main.tile[num13, num14].type == 69)
60484 {
60485 if (genRand.Next(2) == 0)
60486 {
60487 flag3 = true;
60488 }
60489 Main.tile[num13, num14].type = 352;
60491 NetMessage.SendTileSquare(-1, num13, num14);
60492 }
60493 else if (Main.tile[num13, num14].type == 161)
60494 {
60495 if (genRand.Next(2) == 0)
60496 {
60497 flag3 = true;
60498 }
60499 Main.tile[num13, num14].type = 200;
60501 NetMessage.SendTileSquare(-1, num13, num14);
60502 }
60503 }
60504 }
60505 }
60506 if (type != 109 && type != 110 && type != 113 && type != 115 && type != 116 && type != 117 && type != 164 && type != 402 && type != 403 && type != 492)
60507 {
60508 return;
60509 }
60510 bool flag4 = true;
60511 while (flag4)
60512 {
60513 flag4 = false;
60514 int num15 = i + genRand.Next(-3, 4);
60515 int num16 = j + genRand.Next(-3, 4);
60516 if (!InWorld(num15, num16, 10) || CountNearBlocksTypes(num15, num16, 2, 1, 27) > 0)
60517 {
60518 continue;
60519 }
60520 if (Main.tile[num15, num16].type == 2)
60521 {
60522 if (genRand.Next(2) == 0)
60523 {
60524 flag4 = true;
60525 }
60526 Main.tile[num15, num16].type = 109;
60528 NetMessage.SendTileSquare(-1, num15, num16);
60529 }
60530 else if (Main.tile[num15, num16].type == 477)
60531 {
60532 if (genRand.Next(2) == 0)
60533 {
60534 flag4 = true;
60535 }
60536 Main.tile[num15, num16].type = 492;
60538 NetMessage.SendTileSquare(-1, num15, num16);
60539 }
60540 else if (Main.tile[num15, num16].type == 1 || Main.tileMoss[Main.tile[num15, num16].type])
60541 {
60542 if (genRand.Next(2) == 0)
60543 {
60544 flag4 = true;
60545 }
60546 Main.tile[num15, num16].type = 117;
60548 NetMessage.SendTileSquare(-1, num15, num16);
60549 }
60550 else if (Main.tile[num15, num16].type == 53)
60551 {
60552 if (genRand.Next(2) == 0)
60553 {
60554 flag4 = true;
60555 }
60556 Main.tile[num15, num16].type = 116;
60558 NetMessage.SendTileSquare(-1, num15, num16);
60559 }
60560 else if (Main.tile[num15, num16].type == 396)
60561 {
60562 if (genRand.Next(2) == 0)
60563 {
60564 flag4 = true;
60565 }
60566 Main.tile[num15, num16].type = 403;
60568 NetMessage.SendTileSquare(-1, num15, num16);
60569 }
60570 else if (Main.tile[num15, num16].type == 397)
60571 {
60572 if (genRand.Next(2) == 0)
60573 {
60574 flag4 = true;
60575 }
60576 Main.tile[num15, num16].type = 402;
60578 NetMessage.SendTileSquare(-1, num15, num16);
60579 }
60580 else if (Main.tile[num15, num16].type == 161)
60581 {
60582 if (genRand.Next(2) == 0)
60583 {
60584 flag4 = true;
60585 }
60586 Main.tile[num15, num16].type = 164;
60588 NetMessage.SendTileSquare(-1, num15, num16);
60589 }
60590 }
60591 }
static bool[] CanGrowCrystalShards
Definition TileID.cs:243
static readonly ushort Count
Definition TileID.cs:1698
static void ChlorophyteDefense(int x, int y)
static bool AllowedToSpreadInfections
Definition WorldGen.cs:1008
static int CountNearBlocksTypes(int i, int j, int radius, int cap=0, params int[] tiletypes)
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
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816
static void SquareTileFrame(int i, int j, bool resetFrame=true)
static bool nearbyChlorophyte(int i, int j)

References Terraria.ID.TileID.Sets.CanGrowCrystalShards, Terraria.Enums.Chlorophyte, Terraria.ID.TileID.Count, Terraria.NPC.downedPlantBoss, Terraria.Main.hardMode, Terraria.Main.netMode, Terraria.Main.rand, Terraria.Main.remixWorld, Terraria.Main.rockLayer, Terraria.NetMessage.SendTileSquare(), Terraria.Main.tile, Terraria.Main.tileMoss, and System.type.