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

◆ GrowLivingTree_HorizontalTunnel()

static bool Terraria.WorldGen.GrowLivingTree_HorizontalTunnel ( int i,
int j )
inlinestaticprivate

Definition at line 20447 of file WorldGen.cs.

20448 {
20449 int num = i;
20450 int num2 = i;
20451 int num3 = 80;
20452 bool flag = false;
20453 int num4 = 1;
20454 if (genRand.Next(2) == 0)
20455 {
20456 num4 *= -1;
20457 }
20458 for (int k = 0; k < 2; k++)
20459 {
20460 flag = false;
20461 if (num == i && num4 > 0)
20462 {
20463 for (int l = i + 5; l < i + num3; l++)
20464 {
20465 if (!InWorld(l, j, 10))
20466 {
20467 return false;
20468 }
20469 if ((double)j < Main.worldSurface)
20470 {
20471 for (int m = j - 7; m <= j + 7 && Main.tile[l, m].wall != 0; m++)
20472 {
20473 }
20474 }
20475 if (Main.tile[l, j].type == 48)
20476 {
20477 flag = true;
20478 break;
20479 }
20480 if (Main.tile[l, j].type == 191)
20481 {
20482 for (int n = j - 2; n <= j; n++)
20483 {
20484 if (Main.tile[l + 2, n].wall != 244)
20485 {
20486 flag = true;
20487 }
20488 }
20489 if (!flag)
20490 {
20491 k = 2;
20492 num2 = l + 2;
20493 }
20494 break;
20495 }
20496 if (Main.tile[l, j].active())
20497 {
20498 continue;
20499 }
20500 bool flag2 = true;
20501 for (int num5 = j - 2; num5 <= j; num5++)
20502 {
20503 if ((double)j < Main.worldSurface + 3.0 && (Main.tile[l + 1, num5].wall == 0 || Main.tile[l + 2, num5].wall == 0 || Main.tile[l + 3, num5].wall == 0))
20504 {
20505 return false;
20506 }
20507 if (Main.tile[l, num5].active() || Main.tile[l + 1, num5].active() || Main.tile[l + 2, num5].active())
20508 {
20509 flag2 = false;
20510 }
20511 }
20512 if (flag2)
20513 {
20514 k = 2;
20515 num2 = l;
20516 break;
20517 }
20518 }
20519 }
20520 flag = false;
20521 if (num2 == i && num4 < 0)
20522 {
20523 for (int num6 = i - 5; num6 > i - num3; num6--)
20524 {
20525 if (!InWorld(num6, j, 10))
20526 {
20527 return false;
20528 }
20529 if ((double)j < Main.worldSurface)
20530 {
20531 for (int num7 = j - 7; num7 <= j + 7 && Main.tile[num6, num7].wall != 0; num7++)
20532 {
20533 }
20534 }
20535 if (Main.tile[num6, j].type == 48)
20536 {
20537 flag = true;
20538 break;
20539 }
20540 if (Main.tile[num6, j].type == 191)
20541 {
20542 for (int num8 = j - 2; num8 <= j; num8++)
20543 {
20544 if (Main.tile[num6 - 3, num8].wall != 244)
20545 {
20546 flag = true;
20547 }
20548 }
20549 if (!flag)
20550 {
20551 k = 2;
20552 num = num6 - 2;
20553 }
20554 break;
20555 }
20556 if (!Main.tile[num6, j].active())
20557 {
20558 bool flag3 = true;
20559 for (int num9 = j - 2; num9 <= j; num9++)
20560 {
20561 if ((double)j < Main.worldSurface + 3.0 && (Main.tile[num6 - 1, num9].wall == 0 || Main.tile[num6 - 2, num9].wall == 0 || Main.tile[num6 - 3, num9].wall == 0))
20562 {
20563 return false;
20564 }
20565 if (Main.tile[num6, num9].active() || Main.tile[num6 - 1, num9].active() || Main.tile[num6 - 2, num9].active())
20566 {
20567 flag3 = false;
20568 }
20569 }
20570 if (flag3)
20571 {
20572 k = 2;
20573 num = num6;
20574 break;
20575 }
20576 }
20577 }
20578 }
20579 num4 *= -1;
20580 }
20581 if (num == num2)
20582 {
20583 return false;
20584 }
20585 bool flag4 = false;
20586 bool flag5 = false;
20587 for (int num10 = j - 5; num10 <= j + 1; num10++)
20588 {
20589 for (int num11 = num; num11 <= num2; num11++)
20590 {
20591 int num12 = 2;
20592 if (Math.Abs(num11 - num2) > 3 && Math.Abs(num11 - num) > 3)
20593 {
20594 num12 = 4;
20595 }
20596 if (Main.tile[num11, num10].wall != 244 && Main.tile[num11, num10].type != 19 && Main.tile[num11, num10].type != 15 && Main.tile[num11, num10].type != 304 && Main.tile[num11, num10].type != 21 && Main.tile[num11, num10].type != 10)
20597 {
20598 if (!Main.wallDungeon[Main.tile[num11, num10].wall] && (!Main.tile[num11, num10].active() || (!Main.wallDungeon[Main.tile[num11, num10 - 1].wall] && !Main.wallDungeon[Main.tile[num11, num10 + 1].wall])))
20599 {
20600 Main.tile[num11, num10].active(active: true);
20601 Main.tile[num11, num10].type = 191;
20602 Main.tile[num11, num10].halfBrick(halfBrick: false);
20603 }
20604 if (Main.tile[num11, num10 - 1].type == 40)
20605 {
20606 Main.tile[num11, num10 - 1].type = 0;
20607 }
20608 if (Main.tile[num11, num10 + 1].type == 40)
20609 {
20610 Main.tile[num11, num10 + 1].type = 0;
20611 }
20612 }
20613 if (num10 >= j - num12 && num10 <= j && Main.tile[num11, num10].type != 19 && Main.tile[num11, num10].type != 15 && Main.tile[num11, num10].type != 304 && Main.tile[num11, num10].type != 21 && Main.tile[num11, num10].type != 10 && Main.tile[num11, num10 - 1].type != 15 && Main.tile[num11, num10 - 1].type != 304 && Main.tile[num11, num10 - 1].type != 21 && Main.tile[num11, num10 - 1].type != 10 && Main.tile[num11, num10 + 1].type != 10)
20614 {
20615 if (!Main.wallDungeon[Main.tile[num11, num10].wall])
20616 {
20617 Main.tile[num11, num10].wall = 244;
20618 }
20619 Main.tile[num11, num10].liquid = 0;
20620 Main.tile[num11, num10].active(active: false);
20621 }
20622 if (num10 != j)
20623 {
20624 continue;
20625 }
20626 int style = 7;
20627 if (Main.wallDungeon[Main.tile[num11, num10].wall] || Main.wallDungeon[Main.tile[num11, num10 - 1].wall] || Main.wallDungeon[Main.tile[num11, num10 - 2].wall])
20628 {
20629 style = 13;
20630 }
20631 if (num11 <= num + 4 && !flag4)
20632 {
20633 if (Main.tile[num11 - 1, num10].type == 10 || Main.tile[num11 + 1, num10].type == 10)
20634 {
20635 flag4 = true;
20636 }
20637 else if (genRand.Next(3) == 0)
20638 {
20639 PlaceTile(num11, num10, 10, mute: true, forced: false, -1, style);
20640 if (Main.tile[num11, num10].type == 10)
20641 {
20642 flag4 = true;
20643 }
20644 }
20645 }
20646 if (num11 < num2 - 4 || flag5)
20647 {
20648 continue;
20649 }
20650 if (Main.tile[num11 - 1, num10].type == 10 || Main.tile[num11 + 1, num10].type == 10)
20651 {
20652 flag5 = true;
20653 }
20654 else if (genRand.Next(3) == 0)
20655 {
20656 PlaceTile(num11, num10, 10, mute: true, forced: false, -1, style);
20657 if (Main.tile[num11, num10].type == 10)
20658 {
20659 flag5 = true;
20660 }
20661 }
20662 }
20663 }
20664 return true;
20665 }
static double Abs(double value)
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

References System.Math.Abs(), Terraria.Main.tile, Terraria.Main.wallDungeon, and Terraria.Main.worldSurface.