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

◆ GrowCactus()

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

Definition at line 47789 of file WorldGen.cs.

47790 {
47791 int num = j;
47792 int num2 = i;
47793 if (!Main.tile[i, j].nactive() || Main.tile[i, j].halfBrick() || (!gen && Main.tile[i, j].slope() != 0) || Main.tile[i, j - 1].liquid > 0 || (Main.tile[i, j].type != 53 && Main.tile[i, j].type != 80 && Main.tile[i, j].type != 234 && Main.tile[i, j].type != 112 && Main.tile[i, j].type != 116))
47794 {
47795 return;
47796 }
47797 int num3 = 0;
47798 for (int k = i - cactusWaterWidth; k < i + cactusWaterWidth; k++)
47799 {
47800 for (int l = j - cactusWaterHeight; l < j + cactusWaterHeight; l++)
47801 {
47802 num3 += Main.tile[k, l].liquid;
47803 }
47804 }
47805 if ((!Main.remixWorld || !((double)j > Main.worldSurface)) && num3 / 255 > cactusWaterLimit)
47806 {
47807 return;
47808 }
47809 if (Main.tile[i, j].type == 53 || Main.tile[i, j].type == 112 || Main.tile[i, j].type == 116 || Main.tile[i, j].type == 234)
47810 {
47811 if (Main.tile[i, j - 1].active() || Main.tile[i - 1, j - 1].active() || Main.tile[i + 1, j - 1].active())
47812 {
47813 return;
47814 }
47815 int num4 = 0;
47816 int num5 = 0;
47817 for (int m = i - 6; m <= i + 6; m++)
47818 {
47819 for (int n = j - 3; n <= j + 1; n++)
47820 {
47821 try
47822 {
47823 if (!Main.tile[m, n].active())
47824 {
47825 continue;
47826 }
47827 if (Main.tile[m, n].type == 80)
47828 {
47829 num4++;
47830 if (num4 >= 4)
47831 {
47832 return;
47833 }
47834 }
47835 if (Main.tile[m, n].type == 53 || Main.tile[m, n].type == 112 || Main.tile[m, n].type == 116 || Main.tile[m, n].type == 234)
47836 {
47837 num5++;
47838 }
47839 }
47840 catch
47841 {
47842 }
47843 }
47844 }
47845 if (num5 > 10)
47846 {
47847 if (gen && genRand.Next(2) == 0)
47848 {
47849 Main.tile[i, j].slope(0);
47850 }
47851 Main.tile[i, j - 1].active(active: true);
47852 Main.tile[i, j - 1].type = 80;
47853 if (Main.netMode == 2)
47854 {
47855 NetMessage.SendTileSquare(-1, i, j - 1);
47856 }
47857 SquareTileFrame(num2, num - 1);
47858 }
47859 }
47860 else
47861 {
47862 if (Main.tile[i, j].type != 80)
47863 {
47864 return;
47865 }
47866 while (Main.tile[num2, num].active() && Main.tile[num2, num].type == 80)
47867 {
47868 num++;
47869 if (!Main.tile[num2, num].active() || Main.tile[num2, num].type != 80)
47870 {
47871 if (Main.tile[num2 - 1, num].active() && Main.tile[num2 - 1, num].type == 80 && Main.tile[num2 - 1, num - 1].active() && Main.tile[num2 - 1, num - 1].type == 80 && num2 >= i)
47872 {
47873 num2--;
47874 }
47875 if (Main.tile[num2 + 1, num].active() && Main.tile[num2 + 1, num].type == 80 && Main.tile[num2 + 1, num - 1].active() && Main.tile[num2 + 1, num - 1].type == 80 && num2 <= i)
47876 {
47877 num2++;
47878 }
47879 }
47880 }
47881 num--;
47882 int num6 = num - j;
47883 int num7 = i - num2;
47884 num2 = i - num7;
47885 num = j;
47886 int num8 = 11 - num6;
47887 int num9 = 0;
47888 for (int num10 = num2 - 2; num10 <= num2 + 2; num10++)
47889 {
47890 for (int num11 = num - num8; num11 <= num + num6; num11++)
47891 {
47892 if (Main.tile[num10, num11].active() && Main.tile[num10, num11].type == 80)
47893 {
47894 num9++;
47895 }
47896 }
47897 }
47898 if (Main.drunkWorld)
47899 {
47900 if (num9 >= genRand.Next(11, 20))
47901 {
47902 return;
47903 }
47904 }
47905 else if (num9 >= genRand.Next(11, 13))
47906 {
47907 return;
47908 }
47909 num2 = i;
47910 num = j;
47911 if (num7 == 0)
47912 {
47913 if (num6 == 0)
47914 {
47915 if (!Main.tile[num2, num - 1].active())
47916 {
47917 Main.tile[num2, num - 1].active(active: true);
47918 Main.tile[num2, num - 1].type = 80;
47919 SquareTileFrame(num2, num - 1);
47920 if (Main.netMode == 2)
47921 {
47922 NetMessage.SendTileSquare(-1, num2, num - 1);
47923 }
47924 }
47925 return;
47926 }
47927 bool flag = false;
47928 bool flag2 = false;
47929 if (Main.tile[num2, num - 1].active() && Main.tile[num2, num - 1].type == 80)
47930 {
47931 if (!Main.tile[num2 - 1, num].active() && !Main.tile[num2 - 2, num + 1].active() && !Main.tile[num2 - 1, num - 1].active() && !Main.tile[num2 - 1, num + 1].active() && !Main.tile[num2 - 2, num].active())
47932 {
47933 flag = true;
47934 }
47935 if (!Main.tile[num2 + 1, num].active() && !Main.tile[num2 + 2, num + 1].active() && !Main.tile[num2 + 1, num - 1].active() && !Main.tile[num2 + 1, num + 1].active() && !Main.tile[num2 + 2, num].active())
47936 {
47937 flag2 = true;
47938 }
47939 }
47940 int num12 = genRand.Next(3);
47941 if (num12 == 0 && flag)
47942 {
47943 Main.tile[num2 - 1, num].active(active: true);
47944 Main.tile[num2 - 1, num].type = 80;
47945 SquareTileFrame(num2 - 1, num);
47946 if (Main.netMode == 2)
47947 {
47948 NetMessage.SendTileSquare(-1, num2 - 1, num);
47949 }
47950 }
47951 else if (num12 == 1 && flag2)
47952 {
47953 Main.tile[num2 + 1, num].active(active: true);
47954 Main.tile[num2 + 1, num].type = 80;
47955 SquareTileFrame(num2 + 1, num);
47956 if (Main.netMode == 2)
47957 {
47958 NetMessage.SendTileSquare(-1, num2 + 1, num);
47959 }
47960 }
47961 else
47962 {
47963 if (num6 >= genRand.Next(2, 8))
47964 {
47965 return;
47966 }
47967 if (Main.tile[num2 - 1, num - 1].active())
47968 {
47969 _ = Main.tile[num2 - 1, num - 1].type;
47970 _ = 80;
47971 }
47972 if ((!Main.tile[num2 + 1, num - 1].active() || Main.tile[num2 + 1, num - 1].type != 80) && !Main.tile[num2, num - 1].active())
47973 {
47974 Main.tile[num2, num - 1].active(active: true);
47975 Main.tile[num2, num - 1].type = 80;
47976 SquareTileFrame(num2, num - 1);
47977 if (Main.netMode == 2)
47978 {
47979 NetMessage.SendTileSquare(-1, num2, num - 1);
47980 }
47981 }
47982 }
47983 }
47984 else if (!Main.tile[num2, num - 1].active() && !Main.tile[num2, num - 2].active() && !Main.tile[num2 + num7, num - 1].active() && Main.tile[num2 - num7, num - 1].active() && Main.tile[num2 - num7, num - 1].type == 80)
47985 {
47986 Main.tile[num2, num - 1].active(active: true);
47987 Main.tile[num2, num - 1].type = 80;
47988 SquareTileFrame(num2, num - 1);
47989 if (Main.netMode == 2)
47990 {
47991 NetMessage.SendTileSquare(-1, num2, num - 1);
47992 }
47993 }
47994 }
47995 }
static readonly int cactusWaterHeight
Definition WorldGen.cs:1096
static volatile bool gen
Definition WorldGen.cs:972
static readonly int cactusWaterWidth
Definition WorldGen.cs:1094
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static readonly int cactusWaterLimit
Definition WorldGen.cs:1098
static void SquareTileFrame(int i, int j, bool resetFrame=true)

References Terraria.Main.drunkWorld, Terraria.Main.netMode, Terraria.Main.remixWorld, Terraria.NetMessage.SendTileSquare(), Terraria.Main.tile, and Terraria.Main.worldSurface.