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

◆ GrowLivingTree_MakePassage()

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

Definition at line 20817 of file WorldGen.cs.

20818 {
20819 bool flag = noSecretRoom;
20820 int num = minl;
20821 int num2 = minr;
20822 bool flag2 = false;
20823 _ = (minl + minr) / 2;
20824 int num3 = 5;
20825 int num4 = j - 6;
20826 int num5 = 50;
20827 int num6 = genRand.Next(400, 700);
20828 int num7 = 0;
20829 bool flag3 = true;
20830 int num8 = genRand.Next(5, 16);
20831 while (num6 > 0)
20832 {
20833 num4++;
20834 num6--;
20835 num5--;
20836 int num9 = (minl + minr) / 2;
20837 if (!Main.tile[minl, num4].active() && Main.tile[minl, num4].wall == 244 && !Main.tile[minr, num4].active() && Main.tile[minr, num4].wall == 244)
20838 {
20839 num6 = 0;
20840 break;
20841 }
20842 int num10 = 1;
20843 if (num4 > j && W <= 4)
20844 {
20845 num10++;
20846 }
20847 for (int i = minl - num10; i <= minr + num10; i++)
20848 {
20849 if (Main.wallDungeon[Main.tile[i, num4].wall])
20850 {
20851 flag = true;
20852 flag2 = true;
20853 }
20854 if (i > num9 - 2 && i <= num9 + 1)
20855 {
20856 if (num4 > j - 4)
20857 {
20858 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)
20859 {
20860 Main.tile[i, num4].active(active: false);
20861 }
20862 if (!Main.wallDungeon[Main.tile[i, num4].wall])
20863 {
20864 Main.tile[i, num4].wall = 244;
20865 }
20866 if (!Main.wallDungeon[Main.tile[i - 1, num4].wall] && (Main.tile[i - 1, num4].wall > 0 || (double)num4 >= Main.worldSurface))
20867 {
20868 Main.tile[i - 1, num4].wall = 244;
20869 }
20870 if (!Main.wallDungeon[Main.tile[i + 1, num4].wall] && (Main.tile[i + 1, num4].wall > 0 || (double)num4 >= Main.worldSurface))
20871 {
20872 Main.tile[i + 1, num4].wall = 244;
20873 }
20874 if (num4 == j && i > num9 - 2 && i <= num9 + 1)
20875 {
20876 Main.tile[i, num4 + 1].active(active: false);
20877 PlaceTile(i, num4 + 1, 19, mute: true, forced: false, -1, 23);
20878 }
20879 }
20880 }
20881 else
20882 {
20883 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)
20884 {
20885 if (!Main.wallDungeon[Main.tile[i, num4].wall])
20886 {
20887 Main.tile[i, num4].type = 191;
20888 Main.tile[i, num4].active(active: true);
20889 Main.tile[i, num4].halfBrick(halfBrick: false);
20890 }
20891 if (Main.tile[i - 1, num4].type == 40)
20892 {
20893 Main.tile[i - 1, num4].type = 0;
20894 }
20895 if (Main.tile[i + 1, num4].type == 40)
20896 {
20897 Main.tile[i + 1, num4].type = 0;
20898 }
20899 }
20900 if (num4 <= j && num4 > j - 4 && i > minl - num10 && i <= minr + num10 - 1)
20901 {
20902 Main.tile[i, num4].wall = 244;
20903 }
20904 }
20905 if (!gen)
20906 {
20909 }
20910 }
20911 num7++;
20912 if (num7 >= 6)
20913 {
20914 num7 = 0;
20915 int num11 = genRand.Next(3);
20916 if (num11 == 0)
20917 {
20918 num11 = -1;
20919 }
20920 if (flag3)
20921 {
20922 num11 = 2;
20923 }
20924 if (num11 == -1 && Main.tile[minl - num3, num4].wall == 244)
20925 {
20926 num11 = 1;
20927 }
20928 else if (num11 == 1 && Main.tile[minr + num3, num4].wall == 244)
20929 {
20930 num11 = -1;
20931 }
20932 if (num11 == 2)
20933 {
20934 flag3 = false;
20935 int style = 23;
20936 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])
20937 {
20938 style = 12;
20939 }
20940 for (int k = minl; k <= minr; k++)
20941 {
20942 if (k > num9 - 2 && k <= num9 + 1)
20943 {
20944 Main.tile[k, num4 + 1].active(active: false);
20945 PlaceTile(k, num4 + 1, 19, mute: true, forced: false, -1, style);
20946 }
20947 }
20948 }
20949 else
20950 {
20951 minl += num11;
20952 minr += num11;
20953 }
20954 if (noSecretRoom)
20955 {
20956 num8--;
20957 if (num8 <= 0)
20958 {
20959 num8 = ((!GrowLivingTree_HorizontalTunnel(num9, num4)) ? genRand.Next(2, 11) : genRand.Next(5, 21));
20960 }
20961 }
20962 if (num5 <= 0 && !flag)
20963 {
20964 flag = true;
20966 }
20967 }
20968 if (flag2)
20969 {
20970 bool flag4 = true;
20971 for (int l = minl; l <= minr; l++)
20972 {
20973 for (int m = num4 + 1; m <= num4 + 2; m++)
20974 {
20975 if (SolidTile(l, m))
20976 {
20977 flag4 = false;
20978 }
20979 }
20980 }
20981 if (flag4)
20982 {
20983 num6 = 0;
20984 }
20985 }
20986 else
20987 {
20988 if (num5 > 0)
20989 {
20990 continue;
20991 }
20992 bool flag5 = true;
20993 for (int n = minl; n <= minr; n++)
20994 {
20995 for (int num12 = num4 + 1; num12 <= num4 + 4; num12++)
20996 {
20997 if (SolidTile(n, num12))
20998 {
20999 flag5 = false;
21000 }
21001 }
21002 }
21003 if (flag5)
21004 {
21005 num6 = 0;
21006 }
21007 }
21008 }
21009 minl = num;
21010 minr = num2;
21011 _ = (minl + minr) / 2;
21012 for (int num13 = minl; num13 <= minr; num13++)
21013 {
21014 for (int num14 = j - 3; num14 <= j; num14++)
21015 {
21016 Main.tile[num13, num14].active(active: false);
21017 bool flag6 = true;
21018 for (int num15 = num13 - 1; num15 <= num13 + 1; num15++)
21019 {
21020 for (int num16 = num14 - 1; num16 <= num14 + 1; num16++)
21021 {
21022 if (!Main.tile[num15, num16].active() && Main.tile[num15, num16].wall == 0)
21023 {
21024 flag6 = false;
21025 }
21026 }
21027 }
21028 if (flag6 && !Main.wallDungeon[Main.tile[num13, num14].wall])
21029 {
21030 Main.tile[num13, num14].wall = 244;
21031 }
21032 }
21033 }
21034 }
static volatile bool gen
Definition WorldGen.cs:972
static bool GrowLivingTree_HorizontalTunnel(int i, int j)
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 GrowLivingTreePassageRoom(int minl, int minr, int Y)
static void SquareTileFrame(int i, int j, bool resetFrame=true)

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