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

◆ GrowEpicTree()

static bool Terraria.WorldGen.GrowEpicTree ( int i,
int y )
inlinestatic

Definition at line 18884 of file WorldGen.cs.

18885 {
18886 int j;
18887 for (j = y; Main.tile[i, j].type == 20; j++)
18888 {
18889 }
18890 if (Main.tile[i, j].active() && !Main.tile[i, j].halfBrick() && Main.tile[i, j].slope() == 0 && Main.tile[i, j].type == 2 && Main.tile[i, j - 1].wall == 0 && Main.tile[i, j - 1].liquid == 0 && ((Main.tile[i - 1, j].active() && (Main.tile[i - 1, j].type == 2 || Main.tile[i - 1, j].type == 23 || Main.tile[i - 1, j].type == 60 || Main.tile[i - 1, j].type == 109)) || (Main.tile[i + 1, j].active() && (Main.tile[i + 1, j].type == 2 || Main.tile[i + 1, j].type == 23 || Main.tile[i + 1, j].type == 60 || Main.tile[i + 1, j].type == 109))))
18891 {
18892 int num = 2;
18893 if (EmptyTileCheck(i - num, i + num, j - 55, j - 1, 20))
18894 {
18895 bool flag = false;
18896 bool flag2 = false;
18897 int num2 = genRand.Next(20, 30);
18898 if (drunkWorldGen)
18899 {
18900 num2 = genRand.Next(3, 7);
18901 }
18902 int num3;
18903 for (int k = j - num2; k < j; k++)
18904 {
18905 Main.tile[i, k].frameNumber((byte)genRand.Next(3));
18906 Main.tile[i, k].active(active: true);
18907 Main.tile[i, k].type = 5;
18908 num3 = genRand.Next(3);
18909 int num4 = genRand.Next(10);
18910 if (k == j - 1 || k == j - num2)
18911 {
18912 num4 = 0;
18913 }
18914 while (((num4 == 5 || num4 == 7) && flag) || ((num4 == 6 || num4 == 7) && flag2))
18915 {
18916 num4 = genRand.Next(10);
18917 }
18918 flag = false;
18919 flag2 = false;
18920 if (num4 == 5 || num4 == 7)
18921 {
18922 flag = true;
18923 }
18924 if (num4 == 6 || num4 == 7)
18925 {
18926 flag2 = true;
18927 }
18928 switch (num4)
18929 {
18930 case 1:
18931 if (num3 == 0)
18932 {
18933 Main.tile[i, k].frameX = 0;
18934 Main.tile[i, k].frameY = 66;
18935 }
18936 if (num3 == 1)
18937 {
18938 Main.tile[i, k].frameX = 0;
18939 Main.tile[i, k].frameY = 88;
18940 }
18941 if (num3 == 2)
18942 {
18943 Main.tile[i, k].frameX = 0;
18944 Main.tile[i, k].frameY = 110;
18945 }
18946 break;
18947 case 2:
18948 if (num3 == 0)
18949 {
18950 Main.tile[i, k].frameX = 22;
18951 Main.tile[i, k].frameY = 0;
18952 }
18953 if (num3 == 1)
18954 {
18955 Main.tile[i, k].frameX = 22;
18956 Main.tile[i, k].frameY = 22;
18957 }
18958 if (num3 == 2)
18959 {
18960 Main.tile[i, k].frameX = 22;
18961 Main.tile[i, k].frameY = 44;
18962 }
18963 break;
18964 case 3:
18965 if (num3 == 0)
18966 {
18967 Main.tile[i, k].frameX = 44;
18968 Main.tile[i, k].frameY = 66;
18969 }
18970 if (num3 == 1)
18971 {
18972 Main.tile[i, k].frameX = 44;
18973 Main.tile[i, k].frameY = 88;
18974 }
18975 if (num3 == 2)
18976 {
18977 Main.tile[i, k].frameX = 44;
18978 Main.tile[i, k].frameY = 110;
18979 }
18980 break;
18981 case 4:
18982 if (num3 == 0)
18983 {
18984 Main.tile[i, k].frameX = 22;
18985 Main.tile[i, k].frameY = 66;
18986 }
18987 if (num3 == 1)
18988 {
18989 Main.tile[i, k].frameX = 22;
18990 Main.tile[i, k].frameY = 88;
18991 }
18992 if (num3 == 2)
18993 {
18994 Main.tile[i, k].frameX = 22;
18995 Main.tile[i, k].frameY = 110;
18996 }
18997 break;
18998 case 5:
18999 if (num3 == 0)
19000 {
19001 Main.tile[i, k].frameX = 88;
19002 Main.tile[i, k].frameY = 0;
19003 }
19004 if (num3 == 1)
19005 {
19006 Main.tile[i, k].frameX = 88;
19007 Main.tile[i, k].frameY = 22;
19008 }
19009 if (num3 == 2)
19010 {
19011 Main.tile[i, k].frameX = 88;
19012 Main.tile[i, k].frameY = 44;
19013 }
19014 break;
19015 case 6:
19016 if (num3 == 0)
19017 {
19018 Main.tile[i, k].frameX = 66;
19019 Main.tile[i, k].frameY = 66;
19020 }
19021 if (num3 == 1)
19022 {
19023 Main.tile[i, k].frameX = 66;
19024 Main.tile[i, k].frameY = 88;
19025 }
19026 if (num3 == 2)
19027 {
19028 Main.tile[i, k].frameX = 66;
19029 Main.tile[i, k].frameY = 110;
19030 }
19031 break;
19032 case 7:
19033 if (num3 == 0)
19034 {
19035 Main.tile[i, k].frameX = 110;
19036 Main.tile[i, k].frameY = 66;
19037 }
19038 if (num3 == 1)
19039 {
19040 Main.tile[i, k].frameX = 110;
19041 Main.tile[i, k].frameY = 88;
19042 }
19043 if (num3 == 2)
19044 {
19045 Main.tile[i, k].frameX = 110;
19046 Main.tile[i, k].frameY = 110;
19047 }
19048 break;
19049 default:
19050 if (num3 == 0)
19051 {
19052 Main.tile[i, k].frameX = 0;
19053 Main.tile[i, k].frameY = 0;
19054 }
19055 if (num3 == 1)
19056 {
19057 Main.tile[i, k].frameX = 0;
19058 Main.tile[i, k].frameY = 22;
19059 }
19060 if (num3 == 2)
19061 {
19062 Main.tile[i, k].frameX = 0;
19063 Main.tile[i, k].frameY = 44;
19064 }
19065 break;
19066 }
19067 if (num4 == 5 || num4 == 7)
19068 {
19069 Main.tile[i - 1, k].active(active: true);
19070 Main.tile[i - 1, k].type = 5;
19071 num3 = genRand.Next(3);
19072 if (genRand.Next(3) < 2)
19073 {
19074 if (num3 == 0)
19075 {
19076 Main.tile[i - 1, k].frameX = 44;
19077 Main.tile[i - 1, k].frameY = 198;
19078 }
19079 if (num3 == 1)
19080 {
19081 Main.tile[i - 1, k].frameX = 44;
19082 Main.tile[i - 1, k].frameY = 220;
19083 }
19084 if (num3 == 2)
19085 {
19086 Main.tile[i - 1, k].frameX = 44;
19087 Main.tile[i - 1, k].frameY = 242;
19088 }
19089 }
19090 else
19091 {
19092 if (num3 == 0)
19093 {
19094 Main.tile[i - 1, k].frameX = 66;
19095 Main.tile[i - 1, k].frameY = 0;
19096 }
19097 if (num3 == 1)
19098 {
19099 Main.tile[i - 1, k].frameX = 66;
19100 Main.tile[i - 1, k].frameY = 22;
19101 }
19102 if (num3 == 2)
19103 {
19104 Main.tile[i - 1, k].frameX = 66;
19105 Main.tile[i - 1, k].frameY = 44;
19106 }
19107 }
19108 }
19109 if (num4 != 6 && num4 != 7)
19110 {
19111 continue;
19112 }
19113 Main.tile[i + 1, k].active(active: true);
19114 Main.tile[i + 1, k].type = 5;
19115 num3 = genRand.Next(3);
19116 if (genRand.Next(3) < 2)
19117 {
19118 if (num3 == 0)
19119 {
19120 Main.tile[i + 1, k].frameX = 66;
19121 Main.tile[i + 1, k].frameY = 198;
19122 }
19123 if (num3 == 1)
19124 {
19125 Main.tile[i + 1, k].frameX = 66;
19126 Main.tile[i + 1, k].frameY = 220;
19127 }
19128 if (num3 == 2)
19129 {
19130 Main.tile[i + 1, k].frameX = 66;
19131 Main.tile[i + 1, k].frameY = 242;
19132 }
19133 }
19134 else
19135 {
19136 if (num3 == 0)
19137 {
19138 Main.tile[i + 1, k].frameX = 88;
19139 Main.tile[i + 1, k].frameY = 66;
19140 }
19141 if (num3 == 1)
19142 {
19143 Main.tile[i + 1, k].frameX = 88;
19144 Main.tile[i + 1, k].frameY = 88;
19145 }
19146 if (num3 == 2)
19147 {
19148 Main.tile[i + 1, k].frameX = 88;
19149 Main.tile[i + 1, k].frameY = 110;
19150 }
19151 }
19152 }
19153 int num5 = genRand.Next(3);
19154 bool flag3 = false;
19155 bool flag4 = false;
19156 if (Main.tile[i - 1, j].active() && !Main.tile[i - 1, j].halfBrick() && Main.tile[i - 1, j].slope() == 0 && (Main.tile[i - 1, j].type == 2 || Main.tile[i - 1, j].type == 23 || Main.tile[i - 1, j].type == 60 || Main.tile[i - 1, j].type == 109))
19157 {
19158 flag3 = true;
19159 }
19160 if (Main.tile[i + 1, j].active() && !Main.tile[i + 1, j].halfBrick() && Main.tile[i + 1, j].slope() == 0 && (Main.tile[i + 1, j].type == 2 || Main.tile[i + 1, j].type == 23 || Main.tile[i + 1, j].type == 60 || Main.tile[i + 1, j].type == 109))
19161 {
19162 flag4 = true;
19163 }
19164 if (!flag3)
19165 {
19166 if (num5 == 0)
19167 {
19168 num5 = 2;
19169 }
19170 if (num5 == 1)
19171 {
19172 num5 = 3;
19173 }
19174 }
19175 if (!flag4)
19176 {
19177 if (num5 == 0)
19178 {
19179 num5 = 1;
19180 }
19181 if (num5 == 2)
19182 {
19183 num5 = 3;
19184 }
19185 }
19186 if (flag3 && !flag4)
19187 {
19188 num5 = 2;
19189 }
19190 if (flag4 && !flag3)
19191 {
19192 num5 = 1;
19193 }
19194 if (num5 == 0 || num5 == 1)
19195 {
19196 Main.tile[i + 1, j - 1].active(active: true);
19197 Main.tile[i + 1, j - 1].type = 5;
19198 num3 = genRand.Next(3);
19199 if (num3 == 0)
19200 {
19201 Main.tile[i + 1, j - 1].frameX = 22;
19202 Main.tile[i + 1, j - 1].frameY = 132;
19203 }
19204 if (num3 == 1)
19205 {
19206 Main.tile[i + 1, j - 1].frameX = 22;
19207 Main.tile[i + 1, j - 1].frameY = 154;
19208 }
19209 if (num3 == 2)
19210 {
19211 Main.tile[i + 1, j - 1].frameX = 22;
19212 Main.tile[i + 1, j - 1].frameY = 176;
19213 }
19214 }
19215 if (num5 == 0 || num5 == 2)
19216 {
19217 Main.tile[i - 1, j - 1].active(active: true);
19218 Main.tile[i - 1, j - 1].type = 5;
19219 num3 = genRand.Next(3);
19220 if (num3 == 0)
19221 {
19222 Main.tile[i - 1, j - 1].frameX = 44;
19223 Main.tile[i - 1, j - 1].frameY = 132;
19224 }
19225 if (num3 == 1)
19226 {
19227 Main.tile[i - 1, j - 1].frameX = 44;
19228 Main.tile[i - 1, j - 1].frameY = 154;
19229 }
19230 if (num3 == 2)
19231 {
19232 Main.tile[i - 1, j - 1].frameX = 44;
19233 Main.tile[i - 1, j - 1].frameY = 176;
19234 }
19235 }
19236 num3 = genRand.Next(3);
19237 switch (num5)
19238 {
19239 case 0:
19240 if (num3 == 0)
19241 {
19242 Main.tile[i, j - 1].frameX = 88;
19243 Main.tile[i, j - 1].frameY = 132;
19244 }
19245 if (num3 == 1)
19246 {
19247 Main.tile[i, j - 1].frameX = 88;
19248 Main.tile[i, j - 1].frameY = 154;
19249 }
19250 if (num3 == 2)
19251 {
19252 Main.tile[i, j - 1].frameX = 88;
19253 Main.tile[i, j - 1].frameY = 176;
19254 }
19255 break;
19256 case 1:
19257 if (num3 == 0)
19258 {
19259 Main.tile[i, j - 1].frameX = 0;
19260 Main.tile[i, j - 1].frameY = 132;
19261 }
19262 if (num3 == 1)
19263 {
19264 Main.tile[i, j - 1].frameX = 0;
19265 Main.tile[i, j - 1].frameY = 154;
19266 }
19267 if (num3 == 2)
19268 {
19269 Main.tile[i, j - 1].frameX = 0;
19270 Main.tile[i, j - 1].frameY = 176;
19271 }
19272 break;
19273 case 2:
19274 if (num3 == 0)
19275 {
19276 Main.tile[i, j - 1].frameX = 66;
19277 Main.tile[i, j - 1].frameY = 132;
19278 }
19279 if (num3 == 1)
19280 {
19281 Main.tile[i, j - 1].frameX = 66;
19282 Main.tile[i, j - 1].frameY = 154;
19283 }
19284 if (num3 == 2)
19285 {
19286 Main.tile[i, j - 1].frameX = 66;
19287 Main.tile[i, j - 1].frameY = 176;
19288 }
19289 break;
19290 }
19291 if (genRand.Next(13) != 0)
19292 {
19293 num3 = genRand.Next(3);
19294 if (num3 == 0)
19295 {
19296 Main.tile[i, j - num2].frameX = 22;
19297 Main.tile[i, j - num2].frameY = 198;
19298 }
19299 if (num3 == 1)
19300 {
19301 Main.tile[i, j - num2].frameX = 22;
19302 Main.tile[i, j - num2].frameY = 220;
19303 }
19304 if (num3 == 2)
19305 {
19306 Main.tile[i, j - num2].frameX = 22;
19307 Main.tile[i, j - num2].frameY = 242;
19308 }
19309 }
19310 else
19311 {
19312 num3 = genRand.Next(3);
19313 if (num3 == 0)
19314 {
19315 Main.tile[i, j - num2].frameX = 0;
19316 Main.tile[i, j - num2].frameY = 198;
19317 }
19318 if (num3 == 1)
19319 {
19320 Main.tile[i, j - num2].frameX = 0;
19321 Main.tile[i, j - num2].frameY = 220;
19322 }
19323 if (num3 == 2)
19324 {
19325 Main.tile[i, j - num2].frameX = 0;
19326 Main.tile[i, j - num2].frameY = 242;
19327 }
19328 }
19329 RangeFrame(i - 2, j - num2 - 1, i + 2, j + 1);
19330 if (Main.netMode == 2)
19331 {
19332 NetMessage.SendTileSquare(-1, i, (int)((double)j - (double)num2 * 0.5), num2 + 1);
19333 }
19334 return true;
19335 }
19336 }
19337 return false;
19338 }
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static bool EmptyTileCheck(int startX, int endX, int startY, int endY, int ignoreID=-1)
static void RangeFrame(int startX, int startY, int endX, int endY)
static bool drunkWorldGen
Definition WorldGen.cs:1154

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