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

◆ MakeDungeon()

static void Terraria.WorldGen.MakeDungeon ( int x,
int y )
inlinestatic

Definition at line 28103 of file WorldGen.cs.

28104 {
28105 GenVars.dEnteranceX = 0;
28106 GenVars.numDRooms = 0;
28107 GenVars.numDDoors = 0;
28108 GenVars.numDungeonPlatforms = 0;
28109 int num = genRand.Next(3);
28110 genRand.Next(3);
28111 if (remixWorldGen)
28112 {
28113 num = (crimson ? 2 : 0);
28114 }
28115 ushort num12;
28116 int num22;
28117 switch (num)
28118 {
28119 case 0:
28120 num12 = 41;
28121 num22 = 7;
28122 GenVars.crackedType = 481;
28123 break;
28124 case 1:
28125 num12 = 43;
28126 num22 = 8;
28127 GenVars.crackedType = 482;
28128 break;
28129 default:
28130 num12 = 44;
28131 num22 = 9;
28132 GenVars.crackedType = 483;
28133 break;
28134 }
28135 Main.tileSolid[GenVars.crackedType] = false;
28136 GenVars.dungeonLake = true;
28137 GenVars.numDDoors = 0;
28138 GenVars.numDungeonPlatforms = 0;
28139 GenVars.numDRooms = 0;
28140 GenVars.dungeonX = x;
28141 GenVars.dungeonY = y;
28142 GenVars.dMinX = x;
28143 GenVars.dMaxX = x;
28144 GenVars.dMinY = y;
28145 GenVars.dMaxY = y;
28146 GenVars.dxStrength1 = genRand.Next(25, 30);
28147 GenVars.dyStrength1 = genRand.Next(20, 25);
28148 GenVars.dxStrength2 = genRand.Next(35, 50);
28149 GenVars.dyStrength2 = genRand.Next(10, 15);
28150 double num32 = Main.maxTilesX / 60;
28151 num32 += (double)genRand.Next(0, (int)(num32 / 3.0));
28152 double num43 = num32;
28153 int num53 = 5;
28155 while (num32 > 0.0)
28156 {
28158 {
28159 GenVars.dMinX = GenVars.dungeonX;
28160 }
28162 {
28163 GenVars.dMaxX = GenVars.dungeonX;
28164 }
28166 {
28167 GenVars.dMaxY = GenVars.dungeonY;
28168 }
28169 num32 -= 1.0;
28170 Main.statusText = Lang.gen[58].Value + " " + (int)((num43 - num32) / num43 * 60.0) + "%";
28171 if (num53 > 0)
28172 {
28173 num53--;
28174 }
28175 if ((num53 == 0) & (genRand.Next(3) == 0))
28176 {
28177 num53 = 5;
28178 if (genRand.Next(2) == 0)
28179 {
28180 int dungeonX = GenVars.dungeonX;
28181 int dungeonY = GenVars.dungeonY;
28183 if (genRand.Next(2) == 0)
28184 {
28186 }
28188 GenVars.dungeonX = dungeonX;
28189 GenVars.dungeonY = dungeonY;
28190 }
28191 else
28192 {
28194 }
28195 }
28196 else
28197 {
28199 }
28200 }
28202 int num63 = GenVars.dRoomX[0];
28203 int num74 = GenVars.dRoomY[0];
28204 for (int i = 0; i < GenVars.numDRooms; i++)
28205 {
28206 if (GenVars.dRoomY[i] < num74)
28207 {
28208 num63 = GenVars.dRoomX[i];
28209 num74 = GenVars.dRoomY[i];
28210 }
28211 }
28212 GenVars.dungeonX = num63;
28213 GenVars.dungeonY = num74;
28214 GenVars.dEnteranceX = num63;
28215 GenVars.dSurface = false;
28216 num53 = 5;
28217 if (drunkWorldGen)
28218 {
28219 GenVars.dSurface = true;
28220 }
28221 while (!GenVars.dSurface)
28222 {
28223 if (num53 > 0)
28224 {
28225 num53--;
28226 }
28227 if (num53 == 0 && genRand.Next(5) == 0 && (double)GenVars.dungeonY > Main.worldSurface + 100.0)
28228 {
28229 num53 = 10;
28234 GenVars.dungeonX = dungeonX2;
28235 GenVars.dungeonY = dungeonY2;
28236 }
28238 }
28240 Main.statusText = Lang.gen[58].Value + " 65%";
28241 int num85 = Main.maxTilesX * 2;
28242 int num2;
28243 for (num2 = 0; num2 < num85; num2++)
28244 {
28245 int i3 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28246 int num3 = GenVars.dMinY;
28247 if ((double)num3 < Main.worldSurface)
28248 {
28249 num3 = (int)Main.worldSurface;
28250 }
28251 int j = genRand.Next(num3, GenVars.dMaxY);
28252 num2 = ((!DungeonPitTrap(i3, j, num12, num22)) ? (num2 + 1) : (num2 + 1500));
28253 }
28254 for (int k = 0; k < GenVars.numDRooms; k++)
28255 {
28256 for (int l = GenVars.dRoomL[k]; l <= GenVars.dRoomR[k]; l++)
28257 {
28258 if (!Main.tile[l, GenVars.dRoomT[k] - 1].active())
28259 {
28263 break;
28264 }
28265 }
28266 for (int m = GenVars.dRoomL[k]; m <= GenVars.dRoomR[k]; m++)
28267 {
28268 if (!Main.tile[m, GenVars.dRoomB[k] + 1].active())
28269 {
28273 break;
28274 }
28275 }
28276 for (int n = GenVars.dRoomT[k]; n <= GenVars.dRoomB[k]; n++)
28277 {
28278 if (!Main.tile[GenVars.dRoomL[k] - 1, n].active())
28279 {
28284 break;
28285 }
28286 }
28287 for (int num4 = GenVars.dRoomT[k]; num4 <= GenVars.dRoomB[k]; num4++)
28288 {
28289 if (!Main.tile[GenVars.dRoomR[k] + 1, num4].active())
28290 {
28295 break;
28296 }
28297 }
28298 }
28299 Main.statusText = Lang.gen[58].Value + " 70%";
28300 int num5 = 0;
28301 int num6 = 1000;
28302 int num7 = 0;
28303 int num8 = Main.maxTilesX / 100;
28304 if (getGoodWorldGen)
28305 {
28306 num8 *= 3;
28307 }
28308 while (num7 < num8)
28309 {
28310 num5++;
28311 int num9 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28312 int num10 = genRand.Next((int)Main.worldSurface + 25, GenVars.dMaxY);
28313 if (drunkWorldGen)
28314 {
28315 num10 = genRand.Next(GenVars.dungeonY + 25, GenVars.dMaxY);
28316 }
28317 int num11 = num9;
28318 if (Main.tile[num9, num10].wall == num22 && !Main.tile[num9, num10].active())
28319 {
28320 int num13 = 1;
28321 if (genRand.Next(2) == 0)
28322 {
28323 num13 = -1;
28324 }
28325 for (; !Main.tile[num9, num10].active(); num10 += num13)
28326 {
28327 }
28328 if (Main.tile[num9 - 1, num10].active() && Main.tile[num9 + 1, num10].active() && Main.tile[num9 - 1, num10].type != GenVars.crackedType && !Main.tile[num9 - 1, num10 - num13].active() && !Main.tile[num9 + 1, num10 - num13].active())
28329 {
28330 num7++;
28331 int num14 = genRand.Next(5, 13);
28332 while (Main.tile[num9 - 1, num10].active() && Main.tile[num9 - 1, num10].type != GenVars.crackedType && Main.tile[num9, num10 + num13].active() && Main.tile[num9, num10].active() && !Main.tile[num9, num10 - num13].active() && num14 > 0)
28333 {
28334 Main.tile[num9, num10].type = 48;
28335 if (!Main.tile[num9 - 1, num10 - num13].active() && !Main.tile[num9 + 1, num10 - num13].active())
28336 {
28337 Main.tile[num9, num10 - num13].Clear(TileDataType.Slope);
28338 Main.tile[num9, num10 - num13].type = 48;
28339 Main.tile[num9, num10 - num13].active(active: true);
28340 Main.tile[num9, num10 - num13 * 2].Clear(TileDataType.Slope);
28341 Main.tile[num9, num10 - num13 * 2].type = 48;
28342 Main.tile[num9, num10 - num13 * 2].active(active: true);
28343 }
28344 num9--;
28345 num14--;
28346 }
28347 num14 = genRand.Next(5, 13);
28348 num9 = num11 + 1;
28349 while (Main.tile[num9 + 1, num10].active() && Main.tile[num9 + 1, num10].type != GenVars.crackedType && Main.tile[num9, num10 + num13].active() && Main.tile[num9, num10].active() && !Main.tile[num9, num10 - num13].active() && num14 > 0)
28350 {
28351 Main.tile[num9, num10].type = 48;
28352 if (!Main.tile[num9 - 1, num10 - num13].active() && !Main.tile[num9 + 1, num10 - num13].active())
28353 {
28354 Main.tile[num9, num10 - num13].Clear(TileDataType.Slope);
28355 Main.tile[num9, num10 - num13].type = 48;
28356 Main.tile[num9, num10 - num13].active(active: true);
28357 Main.tile[num9, num10 - num13 * 2].Clear(TileDataType.Slope);
28358 Main.tile[num9, num10 - num13 * 2].type = 48;
28359 Main.tile[num9, num10 - num13 * 2].active(active: true);
28360 }
28361 num9++;
28362 num14--;
28363 }
28364 }
28365 }
28366 if (num5 > num6)
28367 {
28368 num5 = 0;
28369 num7++;
28370 }
28371 }
28372 num5 = 0;
28373 num6 = 1000;
28374 num7 = 0;
28375 Main.statusText = Lang.gen[58].Value + " 75%";
28376 while (num7 < num8)
28377 {
28378 num5++;
28379 int num15 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28380 int num16 = genRand.Next((int)Main.worldSurface + 25, GenVars.dMaxY);
28381 int num17 = num16;
28382 if (Main.tile[num15, num16].wall == num22 && !Main.tile[num15, num16].active())
28383 {
28384 int num18 = 1;
28385 if (genRand.Next(2) == 0)
28386 {
28387 num18 = -1;
28388 }
28389 for (; num15 > 5 && num15 < Main.maxTilesX - 5 && !Main.tile[num15, num16].active(); num15 += num18)
28390 {
28391 }
28392 if (Main.tile[num15, num16 - 1].active() && Main.tile[num15, num16 + 1].active() && Main.tile[num15, num16 - 1].type != GenVars.crackedType && !Main.tile[num15 - num18, num16 - 1].active() && !Main.tile[num15 - num18, num16 + 1].active())
28393 {
28394 num7++;
28395 int num19 = genRand.Next(5, 13);
28396 while (Main.tile[num15, num16 - 1].active() && Main.tile[num15, num16 - 1].type != GenVars.crackedType && Main.tile[num15 + num18, num16].active() && Main.tile[num15, num16].active() && !Main.tile[num15 - num18, num16].active() && num19 > 0)
28397 {
28398 Main.tile[num15, num16].type = 48;
28399 if (!Main.tile[num15 - num18, num16 - 1].active() && !Main.tile[num15 - num18, num16 + 1].active())
28400 {
28401 Main.tile[num15 - num18, num16].type = 48;
28402 Main.tile[num15 - num18, num16].active(active: true);
28403 Main.tile[num15 - num18, num16].Clear(TileDataType.Slope);
28404 Main.tile[num15 - num18 * 2, num16].type = 48;
28405 Main.tile[num15 - num18 * 2, num16].active(active: true);
28406 Main.tile[num15 - num18 * 2, num16].Clear(TileDataType.Slope);
28407 }
28408 num16--;
28409 num19--;
28410 }
28411 num19 = genRand.Next(5, 13);
28412 num16 = num17 + 1;
28413 while (Main.tile[num15, num16 + 1].active() && Main.tile[num15, num16 + 1].type != GenVars.crackedType && Main.tile[num15 + num18, num16].active() && Main.tile[num15, num16].active() && !Main.tile[num15 - num18, num16].active() && num19 > 0)
28414 {
28415 Main.tile[num15, num16].type = 48;
28416 if (!Main.tile[num15 - num18, num16 - 1].active() && !Main.tile[num15 - num18, num16 + 1].active())
28417 {
28418 Main.tile[num15 - num18, num16].type = 48;
28419 Main.tile[num15 - num18, num16].active(active: true);
28420 Main.tile[num15 - num18, num16].Clear(TileDataType.Slope);
28421 Main.tile[num15 - num18 * 2, num16].type = 48;
28422 Main.tile[num15 - num18 * 2, num16].active(active: true);
28423 Main.tile[num15 - num18 * 2, num16].Clear(TileDataType.Slope);
28424 }
28425 num16++;
28426 num19--;
28427 }
28428 }
28429 }
28430 if (num5 > num6)
28431 {
28432 num5 = 0;
28433 num7++;
28434 }
28435 }
28436 Main.statusText = Lang.gen[58].Value + " 80%";
28437 for (int num20 = 0; num20 < GenVars.numDDoors; num20++)
28438 {
28439 int num94 = GenVars.DDoorX[num20] - 10;
28440 int num21 = GenVars.DDoorX[num20] + 10;
28441 int num23 = 100;
28442 int num24 = 0;
28443 int num25 = 0;
28444 int num26 = 0;
28445 for (int num27 = num94; num27 < num21; num27++)
28446 {
28447 bool flag = true;
28448 int num28 = GenVars.DDoorY[num20];
28449 while (num28 > 10 && !Main.tile[num27, num28].active())
28450 {
28451 num28--;
28452 }
28453 if (!Main.tileDungeon[Main.tile[num27, num28].type])
28454 {
28455 flag = false;
28456 }
28457 num25 = num28;
28458 for (num28 = GenVars.DDoorY[num20]; !Main.tile[num27, num28].active(); num28++)
28459 {
28460 }
28461 if (!Main.tileDungeon[Main.tile[num27, num28].type])
28462 {
28463 flag = false;
28464 }
28465 num26 = num28;
28466 if (num26 - num25 < 3)
28467 {
28468 continue;
28469 }
28470 int num95 = num27 - 20;
28471 int num29 = num27 + 20;
28472 int num30 = num26 - 10;
28473 int num31 = num26 + 10;
28474 for (int num33 = num95; num33 < num29; num33++)
28475 {
28476 for (int num34 = num30; num34 < num31; num34++)
28477 {
28478 if (Main.tile[num33, num34].active() && Main.tile[num33, num34].type == 10)
28479 {
28480 flag = false;
28481 break;
28482 }
28483 }
28484 }
28485 if (flag)
28486 {
28487 for (int num35 = num26 - 3; num35 < num26; num35++)
28488 {
28489 for (int num36 = num27 - 3; num36 <= num27 + 3; num36++)
28490 {
28491 if (Main.tile[num36, num35].active())
28492 {
28493 flag = false;
28494 break;
28495 }
28496 }
28497 }
28498 }
28499 if (flag && num26 - num25 < 20)
28500 {
28501 bool flag2 = false;
28502 if (GenVars.DDoorPos[num20] == 0 && num26 - num25 < num23)
28503 {
28504 flag2 = true;
28505 }
28506 if (GenVars.DDoorPos[num20] == -1 && num27 > num24)
28507 {
28508 flag2 = true;
28509 }
28510 if (GenVars.DDoorPos[num20] == 1 && (num27 < num24 || num24 == 0))
28511 {
28512 flag2 = true;
28513 }
28514 if (flag2)
28515 {
28516 num24 = num27;
28517 num23 = num26 - num25;
28518 }
28519 }
28520 }
28521 if (num23 >= 20)
28522 {
28523 continue;
28524 }
28525 int num37 = num24;
28526 int num38 = GenVars.DDoorY[num20];
28527 int num39 = num38;
28528 for (; !Main.tile[num37, num38].active(); num38++)
28529 {
28530 Main.tile[num37, num38].active(active: false);
28531 }
28532 while (!Main.tile[num37, num39].active())
28533 {
28534 num39--;
28535 }
28536 num38--;
28537 num39++;
28538 for (int num40 = num39; num40 < num38 - 2; num40++)
28539 {
28540 Main.tile[num37, num40].Clear(TileDataType.Slope);
28541 Main.tile[num37, num40].active(active: true);
28542 Main.tile[num37, num40].type = num12;
28543 if (Main.tile[num37 - 1, num40].type == num12)
28544 {
28545 Main.tile[num37 - 1, num40].active(active: false);
28546 Main.tile[num37 - 1, num40].ClearEverything();
28547 Main.tile[num37 - 1, num40].wall = (ushort)num22;
28548 }
28549 if (Main.tile[num37 - 2, num40].type == num12)
28550 {
28551 Main.tile[num37 - 2, num40].active(active: false);
28552 Main.tile[num37 - 2, num40].ClearEverything();
28553 Main.tile[num37 - 2, num40].wall = (ushort)num22;
28554 }
28555 if (Main.tile[num37 + 1, num40].type == num12)
28556 {
28557 Main.tile[num37 + 1, num40].active(active: false);
28558 Main.tile[num37 + 1, num40].ClearEverything();
28559 Main.tile[num37 + 1, num40].wall = (ushort)num22;
28560 }
28561 if (Main.tile[num37 + 2, num40].type == num12)
28562 {
28563 Main.tile[num37 + 2, num40].active(active: false);
28564 Main.tile[num37 + 2, num40].ClearEverything();
28565 Main.tile[num37 + 2, num40].wall = (ushort)num22;
28566 }
28567 }
28568 int style = 13;
28569 if (genRand.Next(3) == 0)
28570 {
28571 switch (num22)
28572 {
28573 case 7:
28574 style = 16;
28575 break;
28576 case 8:
28577 style = 17;
28578 break;
28579 case 9:
28580 style = 18;
28581 break;
28582 }
28583 }
28584 PlaceTile(num37, num38, 10, mute: true, forced: false, -1, style);
28585 num37--;
28586 int num41 = num38 - 3;
28587 while (!Main.tile[num37, num41].active())
28588 {
28589 num41--;
28590 }
28591 if (num38 - num41 < num38 - num39 + 5 && Main.tileDungeon[Main.tile[num37, num41].type])
28592 {
28593 for (int num42 = num38 - 4 - genRand.Next(3); num42 > num41; num42--)
28594 {
28595 Main.tile[num37, num42].Clear(TileDataType.Slope);
28596 Main.tile[num37, num42].active(active: true);
28597 Main.tile[num37, num42].type = num12;
28598 if (Main.tile[num37 - 1, num42].type == num12)
28599 {
28600 Main.tile[num37 - 1, num42].active(active: false);
28601 Main.tile[num37 - 1, num42].ClearEverything();
28602 Main.tile[num37 - 1, num42].wall = (ushort)num22;
28603 }
28604 if (Main.tile[num37 - 2, num42].type == num12)
28605 {
28606 Main.tile[num37 - 2, num42].active(active: false);
28607 Main.tile[num37 - 2, num42].ClearEverything();
28608 Main.tile[num37 - 2, num42].wall = (ushort)num22;
28609 }
28610 }
28611 }
28612 num37 += 2;
28613 num41 = num38 - 3;
28614 while (!Main.tile[num37, num41].active())
28615 {
28616 num41--;
28617 }
28618 if (num38 - num41 < num38 - num39 + 5 && Main.tileDungeon[Main.tile[num37, num41].type])
28619 {
28620 for (int num44 = num38 - 4 - genRand.Next(3); num44 > num41; num44--)
28621 {
28622 Main.tile[num37, num44].active(active: true);
28623 Main.tile[num37, num44].Clear(TileDataType.Slope);
28624 Main.tile[num37, num44].type = num12;
28625 if (Main.tile[num37 + 1, num44].type == num12)
28626 {
28627 Main.tile[num37 + 1, num44].active(active: false);
28628 Main.tile[num37 + 1, num44].ClearEverything();
28629 Main.tile[num37 + 1, num44].wall = (ushort)num22;
28630 }
28631 if (Main.tile[num37 + 2, num44].type == num12)
28632 {
28633 Main.tile[num37 + 2, num44].active(active: false);
28634 Main.tile[num37 + 2, num44].ClearEverything();
28635 Main.tile[num37 + 2, num44].wall = (ushort)num22;
28636 }
28637 }
28638 }
28639 num38++;
28640 num37--;
28641 for (int num45 = num38 - 8; num45 < num38; num45++)
28642 {
28643 if (Main.tile[num37 + 2, num45].type == num12)
28644 {
28645 Main.tile[num37 + 2, num45].active(active: false);
28646 Main.tile[num37 + 2, num45].ClearEverything();
28647 Main.tile[num37 + 2, num45].wall = (ushort)num22;
28648 }
28649 if (Main.tile[num37 + 3, num45].type == num12)
28650 {
28651 Main.tile[num37 + 3, num45].active(active: false);
28652 Main.tile[num37 + 3, num45].ClearEverything();
28653 Main.tile[num37 + 3, num45].wall = (ushort)num22;
28654 }
28655 if (Main.tile[num37 - 2, num45].type == num12)
28656 {
28657 Main.tile[num37 - 2, num45].active(active: false);
28658 Main.tile[num37 - 2, num45].ClearEverything();
28659 Main.tile[num37 - 2, num45].wall = (ushort)num22;
28660 }
28661 if (Main.tile[num37 - 3, num45].type == num12)
28662 {
28663 Main.tile[num37 - 3, num45].active(active: false);
28664 Main.tile[num37 - 3, num45].ClearEverything();
28665 Main.tile[num37 - 3, num45].wall = (ushort)num22;
28666 }
28667 }
28668 Main.tile[num37 - 1, num38].active(active: true);
28669 Main.tile[num37 - 1, num38].type = num12;
28670 Main.tile[num37 - 1, num38].Clear(TileDataType.Slope);
28671 Main.tile[num37 + 1, num38].active(active: true);
28672 Main.tile[num37 + 1, num38].type = num12;
28673 Main.tile[num37 + 1, num38].Clear(TileDataType.Slope);
28674 }
28675 int[] array = new int[3];
28676 switch (num22)
28677 {
28678 case 7:
28679 array[0] = 7;
28680 array[1] = 94;
28681 array[2] = 95;
28682 break;
28683 case 9:
28684 array[0] = 9;
28685 array[1] = 96;
28686 array[2] = 97;
28687 break;
28688 default:
28689 array[0] = 8;
28690 array[1] = 98;
28691 array[2] = 99;
28692 break;
28693 }
28694 for (int num46 = 0; num46 < 5; num46++)
28695 {
28696 for (int num47 = 0; num47 < 3; num47++)
28697 {
28698 int num48 = genRand.Next(40, 240);
28699 int num49 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28700 int num50 = genRand.Next(GenVars.dMinY, GenVars.dMaxY);
28701 for (int num51 = num49 - num48; num51 < num49 + num48; num51++)
28702 {
28703 for (int num52 = num50 - num48; num52 < num50 + num48; num52++)
28704 {
28705 if ((double)num52 > Main.worldSurface)
28706 {
28707 double num96 = Math.Abs(num49 - num51);
28708 double num54 = Math.Abs(num50 - num52);
28709 if (Math.Sqrt(num96 * num96 + num54 * num54) < (double)num48 * 0.4 && Main.wallDungeon[Main.tile[num51, num52].wall])
28710 {
28711 Spread.WallDungeon(num51, num52, array[num47]);
28712 }
28713 }
28714 }
28715 }
28716 }
28717 }
28718 Main.statusText = Lang.gen[58].Value + " 85%";
28719 for (int num55 = 0; num55 < GenVars.numDungeonPlatforms; num55++)
28720 {
28723 int num58 = Main.maxTilesX;
28724 int num59 = 10;
28725 if ((double)num57 < Main.worldSurface + 50.0)
28726 {
28727 num59 = 20;
28728 }
28729 for (int num60 = num57 - 5; num60 <= num57 + 5; num60++)
28730 {
28731 int num61 = num56;
28732 int num62 = num56;
28733 bool flag3 = false;
28734 if (Main.tile[num61, num60].active())
28735 {
28736 flag3 = true;
28737 }
28738 else
28739 {
28740 while (!Main.tile[num61, num60].active())
28741 {
28742 num61--;
28743 if (!Main.tileDungeon[Main.tile[num61, num60].type] || num61 == 0)
28744 {
28745 flag3 = true;
28746 break;
28747 }
28748 }
28749 while (!Main.tile[num62, num60].active())
28750 {
28751 num62++;
28752 if (!Main.tileDungeon[Main.tile[num62, num60].type] || num62 == Main.maxTilesX - 1)
28753 {
28754 flag3 = true;
28755 break;
28756 }
28757 }
28758 }
28759 if (flag3 || num62 - num61 > num59)
28760 {
28761 continue;
28762 }
28763 bool flag4 = true;
28764 int num97 = num56 - num59 / 2 - 2;
28765 int num64 = num56 + num59 / 2 + 2;
28766 int num65 = num60 - 5;
28767 int num66 = num60 + 5;
28768 for (int num67 = num97; num67 <= num64; num67++)
28769 {
28770 for (int num68 = num65; num68 <= num66; num68++)
28771 {
28772 if (Main.tile[num67, num68].active() && Main.tile[num67, num68].type == 19)
28773 {
28774 flag4 = false;
28775 break;
28776 }
28777 }
28778 }
28779 for (int num69 = num60 + 3; num69 >= num60 - 5; num69--)
28780 {
28781 if (Main.tile[num56, num69].active())
28782 {
28783 flag4 = false;
28784 break;
28785 }
28786 }
28787 if (flag4)
28788 {
28789 num58 = num60;
28790 break;
28791 }
28792 }
28794 {
28795 continue;
28796 }
28797 int num70 = num56;
28798 int num71 = num58;
28799 int num72 = num56 + 1;
28800 while (!Main.tile[num70, num71].active())
28801 {
28802 Main.tile[num70, num71].active(active: true);
28803 Main.tile[num70, num71].type = 19;
28804 Main.tile[num70, num71].Clear(TileDataType.Slope);
28805 switch (num22)
28806 {
28807 case 7:
28808 Main.tile[num70, num71].frameY = 108;
28809 break;
28810 case 8:
28811 Main.tile[num70, num71].frameY = 144;
28812 break;
28813 default:
28814 Main.tile[num70, num71].frameY = 126;
28815 break;
28816 }
28818 num70--;
28819 }
28820 for (; !Main.tile[num72, num71].active(); num72++)
28821 {
28822 Main.tile[num72, num71].active(active: true);
28823 Main.tile[num72, num71].type = 19;
28824 Main.tile[num72, num71].Clear(TileDataType.Slope);
28825 switch (num22)
28826 {
28827 case 7:
28828 Main.tile[num72, num71].frameY = 108;
28829 break;
28830 case 8:
28831 Main.tile[num72, num71].frameY = 144;
28832 break;
28833 default:
28834 Main.tile[num72, num71].frameY = 126;
28835 break;
28836 }
28838 }
28839 }
28840 int num73 = 5;
28841 if (drunkWorldGen)
28842 {
28843 num73 = 6;
28844 }
28845 for (int num75 = 0; num75 < num73; num75++)
28846 {
28847 bool flag5 = false;
28848 while (!flag5)
28849 {
28850 int num76 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28851 int num77 = genRand.Next((int)Main.worldSurface, GenVars.dMaxY);
28852 if (!Main.wallDungeon[Main.tile[num76, num77].wall] || Main.tile[num76, num77].active())
28853 {
28854 continue;
28855 }
28856 ushort chestTileType = 21;
28857 int contain = 0;
28858 int style2 = 0;
28859 switch (num75)
28860 {
28861 case 0:
28862 style2 = 23;
28863 contain = 1156;
28864 break;
28865 case 1:
28866 if (!crimson)
28867 {
28868 style2 = 24;
28869 contain = 1571;
28870 }
28871 else
28872 {
28873 style2 = 25;
28874 contain = 1569;
28875 }
28876 break;
28877 case 5:
28878 if (crimson)
28879 {
28880 style2 = 24;
28881 contain = 1571;
28882 }
28883 else
28884 {
28885 style2 = 25;
28886 contain = 1569;
28887 }
28888 break;
28889 case 2:
28890 style2 = 26;
28891 contain = 1260;
28892 break;
28893 case 3:
28894 style2 = 27;
28895 contain = 1572;
28896 break;
28897 case 4:
28898 chestTileType = 467;
28899 style2 = 13;
28900 contain = 4607;
28901 break;
28902 }
28904 }
28905 }
28906 int[] array2 = new int[3]
28907 {
28908 genRand.Next(9, 13),
28909 genRand.Next(9, 13),
28910 0
28911 };
28912 while (array2[1] == array2[0])
28913 {
28914 array2[1] = genRand.Next(9, 13);
28915 }
28916 array2[2] = genRand.Next(9, 13);
28917 while (array2[2] == array2[0] || array2[2] == array2[1])
28918 {
28919 array2[2] = genRand.Next(9, 13);
28920 }
28921 Main.statusText = Lang.gen[58].Value + " 90%";
28922 num5 = 0;
28923 num6 = 1000;
28924 num7 = 0;
28925 while (num7 < Main.maxTilesX / 20)
28926 {
28927 num5++;
28928 int num78 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28929 int num79 = genRand.Next(GenVars.dMinY, GenVars.dMaxY);
28930 bool flag6 = true;
28931 if (Main.wallDungeon[Main.tile[num78, num79].wall] && !Main.tile[num78, num79].active())
28932 {
28933 int num80 = 1;
28934 if (genRand.Next(2) == 0)
28935 {
28936 num80 = -1;
28937 }
28938 while (flag6 && !Main.tile[num78, num79].active())
28939 {
28940 num78 -= num80;
28941 if (num78 < 5 || num78 > Main.maxTilesX - 5)
28942 {
28943 flag6 = false;
28944 }
28945 else if (Main.tile[num78, num79].active() && !Main.tileDungeon[Main.tile[num78, num79].type])
28946 {
28947 flag6 = false;
28948 }
28949 }
28950 if (flag6 && Main.tile[num78, num79].active() && Main.tileDungeon[Main.tile[num78, num79].type] && Main.tile[num78, num79 - 1].active() && Main.tileDungeon[Main.tile[num78, num79 - 1].type] && Main.tile[num78, num79 + 1].active() && Main.tileDungeon[Main.tile[num78, num79 + 1].type])
28951 {
28952 num78 += num80;
28953 for (int num81 = num78 - 3; num81 <= num78 + 3; num81++)
28954 {
28955 for (int num82 = num79 - 3; num82 <= num79 + 3; num82++)
28956 {
28957 if (Main.tile[num81, num82].active() && Main.tile[num81, num82].type == 19)
28958 {
28959 flag6 = false;
28960 break;
28961 }
28962 }
28963 }
28964 if (flag6 && (!Main.tile[num78, num79 - 1].active() & !Main.tile[num78, num79 - 2].active() & !Main.tile[num78, num79 - 3].active()))
28965 {
28966 int num83 = num78;
28967 int num84 = num78;
28968 for (; num83 > GenVars.dMinX && num83 < GenVars.dMaxX && !Main.tile[num83, num79].active() && !Main.tile[num83, num79 - 1].active() && !Main.tile[num83, num79 + 1].active(); num83 += num80)
28969 {
28970 }
28971 num83 = Math.Abs(num78 - num83);
28972 bool flag7 = false;
28973 if (genRand.Next(2) == 0)
28974 {
28975 flag7 = true;
28976 }
28977 if (num83 > 5)
28978 {
28979 for (int num86 = genRand.Next(1, 4); num86 > 0; num86--)
28980 {
28981 Main.tile[num78, num79].active(active: true);
28982 Main.tile[num78, num79].Clear(TileDataType.Slope);
28983 Main.tile[num78, num79].type = 19;
28984 if (Main.tile[num78, num79].wall == array[0])
28985 {
28986 Main.tile[num78, num79].frameY = (short)(18 * array2[0]);
28987 }
28988 else if (Main.tile[num78, num79].wall == array[1])
28989 {
28990 Main.tile[num78, num79].frameY = (short)(18 * array2[1]);
28991 }
28992 else
28993 {
28994 Main.tile[num78, num79].frameY = (short)(18 * array2[2]);
28995 }
28997 if (flag7)
28998 {
28999 PlaceTile(num78, num79 - 1, 50, mute: true);
29000 if (genRand.Next(50) == 0 && (double)num79 > (Main.worldSurface + Main.rockLayer) / 2.0 && Main.tile[num78, num79 - 1].type == 50)
29001 {
29002 Main.tile[num78, num79 - 1].frameX = 90;
29003 }
29004 }
29005 num78 += num80;
29006 }
29007 num5 = 0;
29008 num7++;
29009 if (!flag7 && genRand.Next(2) == 0)
29010 {
29011 num78 = num84;
29012 num79--;
29013 int num87 = 0;
29014 if (genRand.Next(4) == 0)
29015 {
29016 num87 = 1;
29017 }
29018 switch (num87)
29019 {
29020 case 0:
29021 num87 = 13;
29022 break;
29023 case 1:
29024 num87 = 49;
29025 break;
29026 }
29028 if (Main.tile[num78, num79].type == 13)
29029 {
29030 if (genRand.Next(2) == 0)
29031 {
29032 Main.tile[num78, num79].frameX = 18;
29033 }
29034 else
29035 {
29036 Main.tile[num78, num79].frameX = 36;
29037 }
29038 }
29039 }
29040 }
29041 }
29042 }
29043 }
29044 if (num5 > num6)
29045 {
29046 num5 = 0;
29047 num7++;
29048 }
29049 }
29050 Main.statusText = Lang.gen[58].Value + " 95%";
29051 int num88 = 1;
29052 for (int num89 = 0; num89 < GenVars.numDRooms; num89++)
29053 {
29054 int num90 = 0;
29055 while (num90 < 1000)
29056 {
29057 int num91 = (int)((double)GenVars.dRoomSize[num89] * 0.4);
29058 int i2 = GenVars.dRoomX[num89] + genRand.Next(-num91, num91 + 1);
29059 int num92 = GenVars.dRoomY[num89] + genRand.Next(-num91, num91 + 1);
29060 int num93 = 0;
29061 int style3 = 2;
29062 if (num88 == 1)
29063 {
29064 num88++;
29065 }
29066 switch (num88)
29067 {
29068 case 2:
29069 num93 = 155;
29070 break;
29071 case 3:
29072 num93 = 156;
29073 break;
29074 case 4:
29075 num93 = ((!remixWorldGen) ? 157 : 2623);
29076 break;
29077 case 5:
29078 num93 = 163;
29079 break;
29080 case 6:
29081 num93 = 113;
29082 break;
29083 case 7:
29084 num93 = 3317;
29085 break;
29086 case 8:
29087 num93 = 327;
29088 style3 = 0;
29089 break;
29090 default:
29091 num93 = 164;
29092 num88 = 0;
29093 break;
29094 }
29095 if ((double)num92 < Main.worldSurface + 50.0)
29096 {
29097 num93 = 327;
29098 style3 = 0;
29099 }
29100 if (num93 == 0 && genRand.Next(2) == 0)
29101 {
29102 num90 = 1000;
29103 continue;
29104 }
29106 {
29107 num90 += 1000;
29108 num88++;
29109 }
29110 num90++;
29111 }
29112 }
29113 GenVars.dMinX -= 25;
29114 GenVars.dMaxX += 25;
29115 GenVars.dMinY -= 25;
29116 GenVars.dMaxY += 25;
29117 if (GenVars.dMinX < 0)
29118 {
29119 GenVars.dMinX = 0;
29120 }
29121 if (GenVars.dMaxX > Main.maxTilesX)
29122 {
29123 GenVars.dMaxX = Main.maxTilesX;
29124 }
29125 if (GenVars.dMinY < 0)
29126 {
29127 GenVars.dMinY = 0;
29128 }
29129 if (GenVars.dMaxY > Main.maxTilesY)
29130 {
29131 GenVars.dMaxY = Main.maxTilesY;
29132 }
29133 num5 = 0;
29134 num6 = 1000;
29135 num7 = 0;
29137 num5 = 0;
29138 num6 = 1000;
29139 num7 = 0;
29141 double count = MakeDungeon_GroundFurniture(num22);
29142 count = MakeDungeon_Pictures(array, count);
29143 count = MakeDungeon_Banners(array, count);
29144 }
static double MakeDungeon_GroundFurniture(int wallType)
static bool remixWorldGen
Definition WorldGen.cs:1386
static double MakeDungeon_Banners(int[] roomWall, double count)
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:1455
static void MakeDungeon_Lights(ushort tileType, ref int failCount, int failMax, ref int numAdd, int[] roomWall)
static void DungeonEnt(int i, int j, ushort tileType, int wallType)
static bool crimson
Definition WorldGen.cs:1170
static void DungeonStairs(int i, int j, ushort tileType, int wallType)
static bool AddBuriedChest(Point point, int contain=0, bool notNearOtherChests=false, int Style=-1)
static void TileFrame(int i, int j, bool resetFrame=false, bool noBreak=false)
static bool DungeonPitTrap(int i, int j, ushort tileType, int wallType)
static void DungeonHalls(int i, int j, ushort tileType, int wallType, bool forceX=false)
static bool drunkWorldGen
Definition WorldGen.cs:1392
static void MakeDungeon_Traps(ref int failCount, int failMax, ref int numAdd)
static bool getGoodWorldGen
Definition WorldGen.cs:1394
static double MakeDungeon_Pictures(int[] roomWall, double count)
static void DungeonRoom(int i, int j, ushort tileType, int wallType)

References Terraria.WorldBuilding.GenVars.crackedType, Terraria.WorldBuilding.GenVars.DDoorPos, Terraria.WorldBuilding.GenVars.DDoorX, Terraria.WorldBuilding.GenVars.DDoorY, Terraria.WorldBuilding.GenVars.dMaxX, Terraria.WorldBuilding.GenVars.dMaxY, Terraria.WorldBuilding.GenVars.dMinX, Terraria.WorldBuilding.GenVars.dMinY, Terraria.WorldBuilding.GenVars.dRoomB, Terraria.WorldBuilding.GenVars.dRoomL, Terraria.WorldBuilding.GenVars.dRoomR, Terraria.WorldBuilding.GenVars.dRoomSize, Terraria.WorldBuilding.GenVars.dRoomT, Terraria.WorldBuilding.GenVars.dRoomX, Terraria.WorldBuilding.GenVars.dRoomY, Terraria.WorldBuilding.GenVars.dSurface, Terraria.WorldBuilding.GenVars.dungeonPlatformX, Terraria.WorldBuilding.GenVars.dungeonPlatformY, Terraria.WorldBuilding.GenVars.dungeonX, Terraria.WorldBuilding.GenVars.dungeonY, Terraria.Lang.gen, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.WorldBuilding.GenVars.numDDoors, Terraria.WorldBuilding.GenVars.numDRooms, Terraria.WorldBuilding.GenVars.numDungeonPlatforms, Terraria.Main.rockLayer, Terraria.Main.tile, Terraria.Main.tileDungeon, Terraria.Main.tileSolid, Terraria.Main.wallDungeon, Terraria.WorldGen.Spread.WallDungeon(), and Terraria.Main.worldSurface.

Referenced by Terraria.WorldGen.AddGenPasses().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: