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

◆ GrowDungeonTree_MakePassage()

static void Terraria.WorldGen.GrowDungeonTree_MakePassage ( int j,
int W,
ref int minl,
ref int minr,
bool noSecretRoom = false )
inlinestaticprivate

Definition at line 20667 of file WorldGen.cs.

20668 {
20669 int num = minl;
20670 int num2 = minr;
20671 _ = (minl + minr) / 2;
20672 int num3 = 5;
20673 int num4 = j - 6;
20674 int num5 = 0;
20675 bool flag = true;
20676 genRand.Next(5, 16);
20677 while (true)
20678 {
20679 num4++;
20680 if (num4 > GenVars.dungeonY - 5)
20681 {
20682 break;
20683 }
20684 int num6 = (minl + minr) / 2;
20685 int num7 = 1;
20686 if (num4 > j && W <= 4)
20687 {
20688 num7++;
20689 }
20690 for (int i = minl - num7; i <= minr + num7; i++)
20691 {
20692 if (i > num6 - 2 && i <= num6 + 1)
20693 {
20694 if (num4 > j - 4)
20695 {
20696 if (Main.tile[i, num4].type != 19 && Main.tile[i, num4].type != 15 && Main.tile[i, num4].type != 304 && Main.tile[i, num4].type != 21 && Main.tile[i, num4].type != 10 && Main.tile[i, num4 - 1].type != 15 && Main.tile[i, num4 - 1].type != 304 && Main.tile[i, num4 - 1].type != 21 && Main.tile[i, num4 - 1].type != 10 && Main.tile[i, num4 + 1].type != 10)
20697 {
20698 Main.tile[i, num4].active(active: false);
20699 }
20700 if (!Main.wallDungeon[Main.tile[i, num4].wall])
20701 {
20702 Main.tile[i, num4].wall = 244;
20703 }
20704 if (!Main.wallDungeon[Main.tile[i - 1, num4].wall] && (Main.tile[i - 1, num4].wall > 0 || (double)num4 >= Main.worldSurface))
20705 {
20706 Main.tile[i - 1, num4].wall = 244;
20707 }
20708 if (!Main.wallDungeon[Main.tile[i + 1, num4].wall] && (Main.tile[i + 1, num4].wall > 0 || (double)num4 >= Main.worldSurface))
20709 {
20710 Main.tile[i + 1, num4].wall = 244;
20711 }
20712 if (num4 == j && i > num6 - 2 && i <= num6 + 1)
20713 {
20714 Main.tile[i, num4 + 1].active(active: false);
20715 PlaceTile(i, num4 + 1, 19, mute: true, forced: false, -1, 23);
20716 }
20717 }
20718 }
20719 else
20720 {
20721 if (Main.tile[i, num4].type != 15 && Main.tile[i, num4].type != 304 && Main.tile[i, num4].type != 21 && Main.tile[i, num4].type != 10 && Main.tile[i - 1, num4].type != 10 && Main.tile[i + 1, num4].type != 10)
20722 {
20723 if (!Main.wallDungeon[Main.tile[i, num4].wall])
20724 {
20725 Main.tile[i, num4].type = 191;
20726 Main.tile[i, num4].active(active: true);
20727 Main.tile[i, num4].halfBrick(halfBrick: false);
20728 }
20729 if (Main.tile[i - 1, num4].type == 40)
20730 {
20731 Main.tile[i - 1, num4].type = 0;
20732 }
20733 if (Main.tile[i + 1, num4].type == 40)
20734 {
20735 Main.tile[i + 1, num4].type = 0;
20736 }
20737 }
20738 if (num4 <= j && num4 > j - 4 && i > minl - num7 && i <= minr + num7 - 1)
20739 {
20740 Main.tile[i, num4].wall = 244;
20741 }
20742 }
20743 if (!gen)
20744 {
20747 }
20748 }
20749 num5++;
20750 if (num5 < 6)
20751 {
20752 continue;
20753 }
20754 num5 = 0;
20755 int num8 = genRand.Next(3);
20756 if (num8 == 0)
20757 {
20758 num8 = -1;
20759 }
20760 if (flag)
20761 {
20762 num8 = 2;
20763 }
20764 if (num8 == -1 && Main.tile[minl - num3, num4].wall == 244)
20765 {
20766 num8 = 1;
20767 }
20768 else if (num8 == 1 && Main.tile[minr + num3, num4].wall == 244)
20769 {
20770 num8 = -1;
20771 }
20772 if (num8 == 2)
20773 {
20774 flag = false;
20775 int num9 = 23;
20776 if (Main.wallDungeon[Main.tile[minl, num4 + 1].wall] || Main.wallDungeon[Main.tile[minl + 1, num4 + 1].wall] || Main.wallDungeon[Main.tile[minl + 2, num4 + 1].wall])
20777 {
20778 num9 = 12;
20779 }
20780 if (!SolidTile(minl - 1, num4 + 1) && !SolidTile(minr + 1, num4 + 1) && num9 == 12)
20781 {
20782 continue;
20783 }
20784 for (int k = minl; k <= minr; k++)
20785 {
20786 if (k > num6 - 2 && k <= num6 + 1)
20787 {
20788 Main.tile[k, num4 + 1].active(active: false);
20789 Main.tile[k, num4 + 1].halfBrick(halfBrick: false);
20790 Main.tile[k, num4 + 1].slope(0);
20791 PlaceTile(k, num4 + 1, 19, mute: true, forced: false, -1, num9);
20792 }
20793 }
20794 }
20795 else
20796 {
20797 minl += num8;
20798 minr += num8;
20799 }
20800 }
20801 minl = num;
20802 minr = num2;
20803 _ = (minl + minr) / 2;
20804 for (int l = minl; l <= minr; l++)
20805 {
20806 for (int m = j - 3; m <= j; m++)
20807 {
20808 Main.tile[l, m].active(active: false);
20809 if (!Main.wallDungeon[Main.tile[l, m].wall])
20810 {
20811 Main.tile[l, m].wall = 244;
20812 }
20813 }
20814 }
20815 }
static volatile bool gen
Definition WorldGen.cs:972
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 void SquareWallFrame(int i, int j, bool resetFrame=true)
static void SquareTileFrame(int i, int j, bool resetFrame=true)

References Terraria.WorldBuilding.GenVars.dungeonY, Terraria.Enums.SolidTile, Terraria.Main.tile, System.W, Terraria.Main.wallDungeon, and Terraria.Main.worldSurface.