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

◆ MakeDungeon_GroundFurniture()

static double Terraria.WorldGen.MakeDungeon_GroundFurniture ( int wallType)
inlinestaticprivate

Definition at line 28168 of file WorldGen.cs.

28169 {
28170 double num = (double)(2000 * Main.maxTilesX) / 4200.0;
28171 int num2 = 1 + (int)((double)Main.maxTilesX / 4200.0);
28172 int num3 = 1 + (int)((double)Main.maxTilesX / 4200.0);
28173 for (int i = 0; (double)i < num; i++)
28174 {
28175 if (num2 > 0 || num3 > 0)
28176 {
28177 i--;
28178 }
28179 int num4 = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
28180 int j = genRand.Next((int)Main.worldSurface + 10, GenVars.dMaxY);
28181 while (!Main.wallDungeon[Main.tile[num4, j].wall] || Main.tile[num4, j].active())
28182 {
28184 j = genRand.Next((int)Main.worldSurface + 10, GenVars.dMaxY);
28185 }
28186 if (!Main.wallDungeon[Main.tile[num4, j].wall] || Main.tile[num4, j].active())
28187 {
28188 continue;
28189 }
28190 for (; !SolidTile(num4, j) && j < Main.UnderworldLayer; j++)
28191 {
28192 }
28193 j--;
28194 int num5 = num4;
28195 int k = num4;
28196 while (!Main.tile[num5, j].active() && SolidTile(num5, j + 1))
28197 {
28198 num5--;
28199 }
28200 num5++;
28201 for (; !Main.tile[k, j].active() && SolidTile(k, j + 1); k++)
28202 {
28203 }
28204 k--;
28205 int num6 = k - num5;
28206 int num7 = (k + num5) / 2;
28207 if (Main.tile[num7, j].active() || !Main.wallDungeon[Main.tile[num7, j].wall] || !SolidTile(num7, j + 1) || Main.tile[num7, j + 1].type == 48)
28208 {
28209 continue;
28210 }
28211 int style = 13;
28212 int style2 = 10;
28213 int style3 = 11;
28214 int num8 = 1;
28215 int num9 = 46;
28216 int style4 = 1;
28217 int num10 = 5;
28218 int num11 = 11;
28219 int num12 = 5;
28220 int num13 = 6;
28221 int num14 = 21;
28222 int num15 = 22;
28223 int num16 = 24;
28224 int num17 = 30;
28225 switch (wallType)
28226 {
28227 case 8:
28228 style = 14;
28229 style2 = 11;
28230 style3 = 12;
28231 num8 = 2;
28232 num9 = 47;
28233 style4 = 2;
28234 num10 = 6;
28235 num11 = 12;
28236 num12 = 6;
28237 num13 = 7;
28238 num14 = 22;
28239 num15 = 23;
28240 num16 = 25;
28241 num17 = 31;
28242 break;
28243 case 9:
28244 style = 15;
28245 style2 = 12;
28246 style3 = 13;
28247 num8 = 3;
28248 num9 = 48;
28249 style4 = 3;
28250 num10 = 7;
28251 num11 = 13;
28252 num12 = 7;
28253 num13 = 8;
28254 num14 = 23;
28255 num15 = 24;
28256 num16 = 26;
28257 num17 = 32;
28258 break;
28259 }
28260 if (Main.tile[num7, j].wall >= 94 && Main.tile[num7, j].wall <= 105)
28261 {
28262 style = 17;
28263 style2 = 14;
28264 style3 = 15;
28265 num8 = -1;
28266 num9 = -1;
28267 style4 = 5;
28268 num10 = -1;
28269 num11 = -1;
28270 num12 = -1;
28271 num13 = -1;
28272 num14 = -1;
28273 num15 = -1;
28274 num16 = -1;
28275 num17 = -1;
28276 }
28277 int num18 = genRand.Next(13);
28278 if ((num18 == 10 || num18 == 11 || num18 == 12) && genRand.Next(4) != 0)
28279 {
28280 num18 = genRand.Next(13);
28281 }
28282 while ((num18 == 2 && num9 == -1) || (num18 == 5 && num10 == -1) || (num18 == 6 && num11 == -1) || (num18 == 7 && num12 == -1) || (num18 == 8 && num13 == -1) || (num18 == 9 && num14 == -1) || (num18 == 10 && num15 == -1) || (num18 == 11 && num16 == -1) || (num18 == 12 && num17 == -1))
28283 {
28284 num18 = genRand.Next(13);
28285 }
28286 int num19 = 0;
28287 int num20 = 0;
28288 if (num18 == 0)
28289 {
28290 num19 = 5;
28291 num20 = 4;
28292 }
28293 if (num18 == 1)
28294 {
28295 num19 = 4;
28296 num20 = 3;
28297 }
28298 if (num18 == 2)
28299 {
28300 num19 = 3;
28301 num20 = 5;
28302 }
28303 if (num18 == 3)
28304 {
28305 num19 = 4;
28306 num20 = 6;
28307 }
28308 if (num18 == 4)
28309 {
28310 num19 = 3;
28311 num20 = 3;
28312 }
28313 if (num18 == 5)
28314 {
28315 num19 = 5;
28316 num20 = 3;
28317 }
28318 if (num18 == 6)
28319 {
28320 num19 = 5;
28321 num20 = 4;
28322 }
28323 if (num18 == 7)
28324 {
28325 num19 = 5;
28326 num20 = 4;
28327 }
28328 if (num18 == 8)
28329 {
28330 num19 = 5;
28331 num20 = 4;
28332 }
28333 if (num18 == 9)
28334 {
28335 num19 = 5;
28336 num20 = 3;
28337 }
28338 if (num18 == 10)
28339 {
28340 num19 = 2;
28341 num20 = 4;
28342 }
28343 if (num18 == 11)
28344 {
28345 num19 = 3;
28346 num20 = 3;
28347 }
28348 if (num18 == 12)
28349 {
28350 num19 = 2;
28351 num20 = 5;
28352 }
28353 for (int l = num7 - num19; l <= num7 + num19; l++)
28354 {
28355 for (int m = j - num20; m <= j; m++)
28356 {
28357 if (Main.tile[l, m].active())
28358 {
28359 num18 = -1;
28360 break;
28361 }
28362 }
28363 }
28364 if ((double)num6 < (double)num19 * 1.75)
28365 {
28366 num18 = -1;
28367 }
28368 if (num2 > 0 || num3 > 0)
28369 {
28370 if (num2 > 0)
28371 {
28372 PlaceTile(num7, j, 355, mute: true);
28373 if (Main.tile[num7, j].type == 355)
28374 {
28375 num2--;
28376 }
28377 }
28378 else if (num3 > 0)
28379 {
28380 PlaceTile(num7, j, 354, mute: true);
28381 if (Main.tile[num7, j].type == 354)
28382 {
28383 num3--;
28384 }
28385 }
28386 continue;
28387 }
28388 switch (num18)
28389 {
28390 case 0:
28391 {
28392 PlaceTile(num7, j, 14, mute: true, forced: false, -1, style2);
28393 if (Main.tile[num7, j].active())
28394 {
28395 if (!Main.tile[num7 - 2, j].active())
28396 {
28397 PlaceTile(num7 - 2, j, 15, mute: true, forced: false, -1, style);
28398 if (Main.tile[num7 - 2, j].active())
28399 {
28400 Main.tile[num7 - 2, j].frameX += 18;
28401 Main.tile[num7 - 2, j - 1].frameX += 18;
28402 }
28403 }
28404 if (!Main.tile[num7 + 2, j].active())
28405 {
28406 PlaceTile(num7 + 2, j, 15, mute: true, forced: false, -1, style);
28407 }
28408 }
28409 for (int num22 = num7 - 1; num22 <= num7 + 1; num22++)
28410 {
28411 if (genRand.Next(2) == 0 && !Main.tile[num22, j - 2].active())
28412 {
28413 int num23 = genRand.Next(5);
28414 if (num8 != -1 && num23 <= 1 && !Main.tileLighted[Main.tile[num22 - 1, j - 2].type])
28415 {
28416 PlaceTile(num22, j - 2, 33, mute: true, forced: false, -1, num8);
28417 }
28418 if (num23 == 2 && !Main.tileLighted[Main.tile[num22 - 1, j - 2].type])
28419 {
28420 PlaceTile(num22, j - 2, 49, mute: true);
28421 }
28422 if (num23 == 3)
28423 {
28424 PlaceTile(num22, j - 2, 50, mute: true);
28425 }
28426 if (num23 == 4)
28427 {
28428 PlaceTile(num22, j - 2, 103, mute: true);
28429 }
28430 }
28431 }
28432 break;
28433 }
28434 case 1:
28435 {
28436 PlaceTile(num7, j, 18, mute: true, forced: false, -1, style3);
28437 if (!Main.tile[num7, j].active())
28438 {
28439 break;
28440 }
28441 if (genRand.Next(2) == 0)
28442 {
28443 if (!Main.tile[num7 - 1, j].active())
28444 {
28445 PlaceTile(num7 - 1, j, 15, mute: true, forced: false, -1, style);
28446 if (Main.tile[num7 - 1, j].active())
28447 {
28448 Main.tile[num7 - 1, j].frameX += 18;
28449 Main.tile[num7 - 1, j - 1].frameX += 18;
28450 }
28451 }
28452 }
28453 else if (!Main.tile[num7 + 2, j].active())
28454 {
28455 PlaceTile(num7 + 2, j, 15, mute: true, forced: false, -1, style);
28456 }
28457 for (int n = num7; n <= num7 + 1; n++)
28458 {
28459 if (genRand.Next(2) == 0 && !Main.tile[n, j - 1].active())
28460 {
28461 int num21 = genRand.Next(5);
28462 if (num8 != -1 && num21 <= 1 && !Main.tileLighted[Main.tile[n - 1, j - 1].type])
28463 {
28464 PlaceTile(n, j - 1, 33, mute: true, forced: false, -1, num8);
28465 }
28466 if (num21 == 2 && !Main.tileLighted[Main.tile[n - 1, j - 1].type])
28467 {
28468 PlaceTile(n, j - 1, 49, mute: true);
28469 }
28470 if (num21 == 3)
28471 {
28472 PlaceTile(n, j - 1, 50, mute: true);
28473 }
28474 if (num21 == 4)
28475 {
28476 PlaceTile(n, j - 1, 103, mute: true);
28477 }
28478 }
28479 }
28480 break;
28481 }
28482 case 2:
28483 PlaceTile(num7, j, 105, mute: true, forced: false, -1, num9);
28484 break;
28485 case 3:
28486 PlaceTile(num7, j, 101, mute: true, forced: false, -1, style4);
28487 break;
28488 case 4:
28489 if (genRand.Next(2) == 0)
28490 {
28491 PlaceTile(num7, j, 15, mute: true, forced: false, -1, style);
28492 Main.tile[num7, j].frameX += 18;
28493 Main.tile[num7, j - 1].frameX += 18;
28494 }
28495 else
28496 {
28497 PlaceTile(num7, j, 15, mute: true, forced: false, -1, style);
28498 }
28499 break;
28500 case 5:
28501 if (genRand.Next(2) == 0)
28502 {
28503 Place4x2(num7, j, 79, 1, num10);
28504 }
28505 else
28506 {
28507 Place4x2(num7, j, 79, -1, num10);
28508 }
28509 break;
28510 case 6:
28511 PlaceTile(num7, j, 87, mute: true, forced: false, -1, num11);
28512 break;
28513 case 7:
28514 PlaceTile(num7, j, 88, mute: true, forced: false, -1, num12);
28515 break;
28516 case 8:
28517 PlaceTile(num7, j, 89, mute: true, forced: false, -1, num13);
28518 break;
28519 case 9:
28520 if (genRand.Next(2) == 0)
28521 {
28522 Place4x2(num7, j, 90, 1, num14);
28523 }
28524 else
28525 {
28526 Place4x2(num7, j, 90, -1, num14);
28527 }
28528 break;
28529 case 10:
28530 PlaceTile(num7, j, 93, mute: true, forced: false, -1, num16);
28531 break;
28532 case 11:
28533 PlaceTile(num7, j, 100, mute: true, forced: false, -1, num15);
28534 break;
28535 case 12:
28536 PlaceTile(num7, j, 104, mute: true, forced: false, -1, num17);
28537 break;
28538 }
28539 }
28540 return num;
28541 }
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 Place4x2(int x, int y, ushort type, int direction=-1, int style=0)

References Terraria.WorldBuilding.GenVars.dMaxX, Terraria.WorldBuilding.GenVars.dMaxY, Terraria.WorldBuilding.GenVars.dMinX, Terraria.Main.maxTilesX, Terraria.Enums.SolidTile, Terraria.Main.tile, Terraria.Main.tileLighted, Terraria.Main.UnderworldLayer, and Terraria.Main.wallDungeon.