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

◆ GrowDungeonTree()

static bool Terraria.WorldGen.GrowDungeonTree ( int i,
int j,
bool patch = false )
inlinestatic

Definition at line 20068 of file WorldGen.cs.

20069 {
20070 //IL_0d08: Unknown result type (might be due to invalid IL or missing references)
20071 //IL_0d13: Unknown result type (might be due to invalid IL or missing references)
20072 //IL_0d18: Unknown result type (might be due to invalid IL or missing references)
20073 //IL_0d1d: Unknown result type (might be due to invalid IL or missing references)
20074 int num = 0;
20075 int[] array = new int[1000];
20076 int[] array2 = new int[1000];
20077 int[] array3 = new int[1000];
20078 int[] array4 = new int[1000];
20079 int num2 = 0;
20080 int[] array5 = new int[2000];
20081 int[] array6 = new int[2000];
20082 bool[] array7 = new bool[2000];
20083 int num3 = i - genRand.Next(2, 3);
20084 int num4 = i + genRand.Next(2, 3);
20085 if (genRand.Next(5) == 0)
20086 {
20087 if (genRand.Next(2) == 0)
20088 {
20089 num3--;
20090 }
20091 else
20092 {
20093 num4++;
20094 }
20095 }
20096 int num5 = num4 - num3;
20097 int num6 = num3;
20098 int num7 = num4;
20099 int minl = num3;
20100 int minr = num4;
20101 bool flag = true;
20102 int num8 = genRand.Next(-8, -4);
20103 int num9 = genRand.Next(2);
20104 int num10 = j;
20105 int num11 = genRand.Next(5, 15);
20106 Main.tileSolid[48] = false;
20107 while (flag)
20108 {
20109 num8++;
20110 if (num8 > num11)
20111 {
20112 num11 = genRand.Next(5, 15);
20113 num8 = 0;
20114 array2[num] = num10 + genRand.Next(5);
20115 if (genRand.Next(5) == 0)
20116 {
20117 num9 = ((num9 == 0) ? 1 : 0);
20118 }
20119 if (num9 == 0)
20120 {
20121 array3[num] = -1;
20122 array[num] = num3;
20123 array4[num] = num4 - num3;
20124 if (genRand.Next(2) == 0)
20125 {
20126 num3++;
20127 }
20128 num6++;
20129 num9 = 1;
20130 }
20131 else
20132 {
20133 array3[num] = 1;
20134 array[num] = num4;
20135 array4[num] = num4 - num3;
20136 if (genRand.Next(2) == 0)
20137 {
20138 num4--;
20139 }
20140 num7--;
20141 num9 = 0;
20142 }
20143 if (num6 == num7)
20144 {
20145 flag = false;
20146 }
20147 num++;
20148 }
20149 for (int k = num3; k <= num4; k++)
20150 {
20151 Main.tile[k, num10].type = 191;
20152 Main.tile[k, num10].active(active: true);
20153 Main.tile[k, num10].halfBrick(halfBrick: false);
20154 Main.tile[k, num10].slope(0);
20155 Main.tile[k, num10].color(28);
20156 }
20157 num10--;
20158 }
20159 for (int l = 0; l < num - 1; l++)
20160 {
20161 int num12 = array[l] + array3[l];
20162 int num13 = array2[l];
20163 int num14 = (int)((double)array4[l] * (1.0 + (double)genRand.Next(20, 30) * 0.1));
20164 Main.tile[num12, num13 + 1].type = 191;
20165 Main.tile[num12, num13 + 1].active(active: true);
20166 Main.tile[num12, num13 + 1].halfBrick(halfBrick: false);
20167 Main.tile[num12, num13 + 1].color(28);
20168 int num15 = genRand.Next(3, 5);
20169 while (num14 > 0)
20170 {
20171 num14--;
20172 Main.tile[num12, num13].type = 191;
20173 Main.tile[num12, num13].active(active: true);
20174 Main.tile[num12, num13].halfBrick(halfBrick: false);
20175 Main.tile[num12, num13].color(28);
20176 Main.tile[num12, num13].slope(0);
20177 if (genRand.Next(10) == 0)
20178 {
20179 num13 = ((genRand.Next(2) != 0) ? (num13 + 1) : (num13 - 1));
20180 }
20181 else
20182 {
20183 num12 += array3[l];
20184 }
20185 if (num15 > 0)
20186 {
20187 num15--;
20188 }
20189 else if (genRand.Next(2) == 0)
20190 {
20191 num15 = genRand.Next(2, 5);
20192 if (genRand.Next(2) == 0)
20193 {
20194 Main.tile[num12, num13].type = 191;
20195 Main.tile[num12, num13].active(active: true);
20196 Main.tile[num12, num13].halfBrick(halfBrick: false);
20197 Main.tile[num12, num13].color(28);
20198 Main.tile[num12, num13].slope(0);
20199 Main.tile[num12, num13 - 1].type = 191;
20200 Main.tile[num12, num13 - 1].active(active: true);
20201 Main.tile[num12, num13 - 1].halfBrick(halfBrick: false);
20202 Main.tile[num12, num13 - 1].color(28);
20203 array5[num2] = num12;
20204 array6[num2] = num13;
20205 num2++;
20206 }
20207 else
20208 {
20209 Main.tile[num12, num13].type = 191;
20210 Main.tile[num12, num13].active(active: true);
20211 Main.tile[num12, num13].halfBrick(halfBrick: false);
20212 Main.tile[num12, num13].color(28);
20213 Main.tile[num12, num13].slope(0);
20214 Main.tile[num12, num13 + 1].type = 191;
20215 Main.tile[num12, num13 + 1].active(active: true);
20216 Main.tile[num12, num13 + 1].halfBrick(halfBrick: false);
20217 Main.tile[num12, num13 + 1].color(28);
20218 array5[num2] = num12;
20219 array6[num2] = num13;
20220 num2++;
20221 }
20222 }
20223 if (num14 == 0)
20224 {
20225 array5[num2] = num12;
20226 array6[num2] = num13;
20227 num2++;
20228 }
20229 }
20230 }
20231 int num16 = (num3 + num4) / 2;
20232 int num17 = num10;
20233 int num18 = genRand.Next(num5 * 3, num5 * 5);
20234 int num19 = 0;
20235 int num20 = 0;
20236 while (num18 > 0)
20237 {
20238 Main.tile[num16, num17].type = 191;
20239 Main.tile[num16, num17].active(active: true);
20240 Main.tile[num16, num17].halfBrick(halfBrick: false);
20241 Main.tile[num16, num17].color(28);
20242 if (num19 > 0)
20243 {
20244 num19--;
20245 }
20246 if (num20 > 0)
20247 {
20248 num20--;
20249 }
20250 for (int m = -1; m < 2; m++)
20251 {
20252 if (m == 0 || ((m >= 0 || num19 != 0) && (m <= 0 || num20 != 0)) || genRand.Next(2) != 0)
20253 {
20254 continue;
20255 }
20256 int num21 = num16;
20257 int num22 = num17;
20258 int num23 = genRand.Next(num5, num5 * 3);
20259 if (m < 0)
20260 {
20261 num19 = genRand.Next(3, 5);
20262 }
20263 if (m > 0)
20264 {
20265 num20 = genRand.Next(3, 5);
20266 }
20267 int num24 = 0;
20268 while (num23 > 0)
20269 {
20270 num23--;
20271 num21 += m;
20272 Main.tile[num21, num22].type = 191;
20273 Main.tile[num21, num22].active(active: true);
20274 Main.tile[num21, num22].halfBrick(halfBrick: false);
20275 Main.tile[num21, num22].color(28);
20276 if (num23 == 0)
20277 {
20278 array5[num2] = num21;
20279 array6[num2] = num22;
20280 array7[num2] = true;
20281 num2++;
20282 }
20283 if (genRand.Next(5) == 0)
20284 {
20285 num22 = ((genRand.Next(2) != 0) ? (num22 + 1) : (num22 - 1));
20286 Main.tile[num21, num22].type = 191;
20287 Main.tile[num21, num22].active(active: true);
20288 Main.tile[num21, num22].halfBrick(halfBrick: false);
20289 Main.tile[num21, num22].color(28);
20290 }
20291 if (num24 > 0)
20292 {
20293 num24--;
20294 }
20295 else if (genRand.Next(3) == 0)
20296 {
20297 num24 = genRand.Next(2, 4);
20298 int num25 = num21;
20299 int num26 = num22;
20300 num26 = ((genRand.Next(2) != 0) ? (num26 + 1) : (num26 - 1));
20301 Main.tile[num25, num26].type = 191;
20302 Main.tile[num25, num26].active(active: true);
20303 Main.tile[num25, num26].halfBrick(halfBrick: false);
20304 Main.tile[num25, num26].color(28);
20305 array5[num2] = num25;
20306 array6[num2] = num26;
20307 array7[num2] = true;
20308 num2++;
20309 array5[num2] = num25 + genRand.Next(-5, 6);
20310 array6[num2] = num26 + genRand.Next(-5, 6);
20311 array7[num2] = true;
20312 num2++;
20313 }
20314 }
20315 }
20316 array5[num2] = num16;
20317 array6[num2] = num17;
20318 num2++;
20319 if (genRand.Next(4) == 0)
20320 {
20321 num16 = ((genRand.Next(2) != 0) ? (num16 + 1) : (num16 - 1));
20322 Main.tile[num16, num17].type = 191;
20323 Main.tile[num16, num17].active(active: true);
20324 Main.tile[num16, num17].halfBrick(halfBrick: false);
20325 Main.tile[num16, num17].color(28);
20326 }
20327 num17--;
20328 num18--;
20329 }
20330 for (int n = minl; n <= minr; n++)
20331 {
20332 int num27 = genRand.Next(1, 6);
20333 int num28 = j + 1;
20334 while (num27 > 0)
20335 {
20336 if (SolidTile(n, num28))
20337 {
20338 num27--;
20339 }
20340 Main.tile[n, num28].type = 191;
20341 Main.tile[n, num28].active(active: true);
20342 Main.tile[n, num28].halfBrick(halfBrick: false);
20343 Main.tile[n, num28].slope(0);
20344 num28++;
20345 }
20346 int num29 = num28;
20347 int num30 = genRand.Next(2, num5 + 1);
20348 for (int num31 = 0; num31 < num30; num31++)
20349 {
20350 num28 = num29;
20351 int num32 = (minl + minr) / 2;
20352 int num33 = 0;
20353 int num34 = 1;
20354 num33 = ((n >= num32) ? 1 : (-1));
20355 if (n == num32 || (num5 > 6 && (n == num32 - 1 || n == num32 + 1)))
20356 {
20357 num33 = 0;
20358 }
20359 int num35 = num33;
20360 int num36 = n;
20361 num27 = genRand.Next((int)((double)num5 * 3.5), num5 * 6);
20362 while (num27 > 0)
20363 {
20364 num27--;
20365 num36 += num33;
20366 if (Main.tile[num36, num28].wall != 244)
20367 {
20368 Main.tile[num36, num28].type = 191;
20369 Main.tile[num36, num28].active(active: true);
20370 Main.tile[num36, num28].halfBrick(halfBrick: false);
20371 Main.tile[num36, num28].slope(0);
20372 }
20373 num28 += num34;
20374 if (Main.tile[num36, num28].wall != 244)
20375 {
20376 Main.tile[num36, num28].type = 191;
20377 Main.tile[num36, num28].active(active: true);
20378 Main.tile[num36, num28].halfBrick(halfBrick: false);
20379 Main.tile[num36, num28].slope(0);
20380 }
20381 if (!Main.tile[num36, num28 + 1].active())
20382 {
20383 num33 = 0;
20384 num34 = 1;
20385 }
20386 if (genRand.Next(3) == 0)
20387 {
20388 num33 = ((num35 < 0) ? ((num33 == 0) ? (-1) : 0) : ((num35 <= 0) ? genRand.Next(-1, 2) : ((num33 == 0) ? 1 : 0)));
20389 }
20390 if (genRand.Next(3) == 0)
20391 {
20392 num34 = ((num34 == 0) ? 1 : 0);
20393 }
20394 }
20395 }
20396 }
20397 if (!remixWorldGen)
20398 {
20399 for (int num37 = 0; num37 < num2; num37++)
20400 {
20401 int num38 = genRand.Next(5, 8);
20402 num38 = (int)((double)num38 * (1.0 + (double)num5 * 0.05));
20403 if (array7[num37])
20404 {
20405 num38 = genRand.Next(6, 12) + num5;
20406 }
20407 int num39 = array5[num37] - num38 * 2;
20408 int num40 = array5[num37] + num38 * 2;
20409 int num41 = array6[num37] - num38 * 2;
20410 int num42 = array6[num37] + num38 * 2;
20411 double num43 = 2.0 - (double)genRand.Next(5) * 0.1;
20412 for (int num44 = num39; num44 <= num40; num44++)
20413 {
20414 for (int num45 = num41; num45 <= num42; num45++)
20415 {
20416 if (Main.tile[num44, num45].type == 191)
20417 {
20418 continue;
20419 }
20420 if (array7[num37])
20421 {
20422 Vector2D val = new Vector2D((double)array5[num37], (double)array6[num37]) - new Vector2D((double)num44, (double)num45);
20423 if (((Vector2D)(ref val)).Length() < (double)num38 * 0.9)
20424 {
20425 Main.tile[num44, num45].type = 192;
20426 Main.tile[num44, num45].active(active: true);
20427 Main.tile[num44, num45].halfBrick(halfBrick: false);
20428 Main.tile[num44, num45].color(28);
20429 }
20430 }
20431 else if ((double)Math.Abs(array5[num37] - num44) + (double)Math.Abs(array6[num37] - num45) * num43 < (double)num38)
20432 {
20433 Main.tile[num44, num45].type = 192;
20434 Main.tile[num44, num45].active(active: true);
20435 Main.tile[num44, num45].halfBrick(halfBrick: false);
20436 Main.tile[num44, num45].color(28);
20437 }
20438 }
20439 }
20440 }
20441 }
20443 Main.tileSolid[48] = true;
20444 return true;
20445 }
static double Abs(double value)
static bool remixWorldGen
Definition WorldGen.cs:1148
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static void GrowDungeonTree_MakePassage(int j, int W, ref int minl, ref int minr, bool noSecretRoom=false)

References System.Math.Abs(), System.array, Terraria.Enums.SolidTile, Terraria.Main.tile, and Terraria.Main.tileSolid.