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

◆ MineHouse()

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

Definition at line 60962 of file WorldGen.cs.

60963 {
60964 if (i < 50 || i > Main.maxTilesX - 50 || j < 50 || j > Main.maxTilesY - 50)
60965 {
60966 return;
60967 }
60968 int num = genRand.Next(6, 12);
60969 int num2 = genRand.Next(3, 6);
60970 int num3 = genRand.Next(15, 30);
60971 int num4 = genRand.Next(15, 30);
60972 if (SolidTile(i, j) || Main.tile[i, j].wall > 0)
60973 {
60974 return;
60975 }
60976 int num5 = j - num;
60977 int num6 = j + num2;
60978 for (int k = 0; k < 2; k++)
60979 {
60980 bool flag = true;
60981 int num7 = i;
60982 int num8 = j;
60983 int num9 = -1;
60984 int num10 = num3;
60985 if (k == 1)
60986 {
60987 num9 = 1;
60988 num10 = num4;
60989 num7++;
60990 }
60991 while (flag)
60992 {
60993 if (num8 - num < num5)
60994 {
60995 num5 = num8 - num;
60996 }
60997 if (num8 + num2 > num6)
60998 {
60999 num6 = num8 + num2;
61000 }
61001 for (int l = 0; l < 2; l++)
61002 {
61003 int num11 = num8;
61004 bool flag2 = true;
61005 int num12 = num;
61006 int num13 = -1;
61007 if (l == 1)
61008 {
61009 num11++;
61010 num12 = num2;
61011 num13 = 1;
61012 }
61013 while (flag2)
61014 {
61015 if (num7 != i && Main.tile[num7 - num9, num11].wall != 27 && (SolidTile(num7 - num9, num11) || !Main.tile[num7 - num9, num11].active() || Main.tile[num7 - num9, num11].halfBrick() || Main.tile[num7 - num9, num11].slope() != 0))
61016 {
61017 Main.tile[num7 - num9, num11].active(active: true);
61018 Main.tile[num7 - num9, num11].type = 30;
61019 }
61020 if (SolidTile(num7 - 1, num11) || Main.tile[num7 - 1, num11].halfBrick() || Main.tile[num7 - 1, num11].slope() != 0)
61021 {
61022 Main.tile[num7 - 1, num11].type = 30;
61023 }
61024 if (SolidTile(num7 + 1, num11) || Main.tile[num7 + 1, num11].halfBrick() || Main.tile[num7 + 1, num11].slope() != 0)
61025 {
61026 Main.tile[num7 + 1, num11].type = 30;
61027 }
61028 if (SolidTile(num7, num11) || Main.tile[num7, num11].halfBrick() || Main.tile[num7, num11].slope() != 0)
61029 {
61030 int num14 = 0;
61031 if (SolidTile(num7 - 1, num11))
61032 {
61033 num14++;
61034 }
61035 if (SolidTile(num7 + 1, num11))
61036 {
61037 num14++;
61038 }
61039 if (SolidTile(num7, num11 - 1))
61040 {
61041 num14++;
61042 }
61043 if (SolidTile(num7, num11 + 1))
61044 {
61045 num14++;
61046 }
61047 if (num14 < 2)
61048 {
61049 Main.tile[num7, num11].active(active: false);
61050 }
61051 else
61052 {
61053 flag2 = false;
61054 Main.tile[num7, num11].type = 30;
61055 }
61056 }
61057 else
61058 {
61059 Main.tile[num7, num11].wall = 27;
61060 Main.tile[num7, num11].liquid = 0;
61061 Main.tile[num7, num11].lava(lava: false);
61062 }
61063 num11 += num13;
61064 num12--;
61065 if (num12 <= 0)
61066 {
61067 if (!Main.tile[num7, num11].active())
61068 {
61069 Main.tile[num7, num11].active(active: true);
61070 Main.tile[num7, num11].type = 30;
61071 }
61072 flag2 = false;
61073 }
61074 }
61075 }
61076 num10--;
61077 num7 += num9;
61078 if (SolidTile(num7, num8))
61079 {
61080 int num15 = 0;
61081 int num16 = 0;
61082 int num17 = num8;
61083 bool flag3 = true;
61084 while (flag3)
61085 {
61086 num17--;
61087 num15++;
61088 if (SolidTile(num7 - num9, num17))
61089 {
61090 num15 = 999;
61091 flag3 = false;
61092 }
61093 else if (!SolidTile(num7, num17))
61094 {
61095 flag3 = false;
61096 }
61097 }
61098 num17 = num8;
61099 flag3 = true;
61100 while (flag3)
61101 {
61102 num17++;
61103 num16++;
61104 if (SolidTile(num7 - num9, num17))
61105 {
61106 num16 = 999;
61107 flag3 = false;
61108 }
61109 else if (!SolidTile(num7, num17))
61110 {
61111 flag3 = false;
61112 }
61113 }
61114 if (num16 <= num15)
61115 {
61116 if (num16 > num2)
61117 {
61118 num10 = 0;
61119 }
61120 else
61121 {
61122 num8 += num16 + 1;
61123 }
61124 }
61125 else if (num15 > num)
61126 {
61127 num10 = 0;
61128 }
61129 else
61130 {
61131 num8 -= num15 + 1;
61132 }
61133 }
61134 if (num10 <= 0)
61135 {
61136 flag = false;
61137 }
61138 }
61139 }
61140 int num18 = i - num3 - 1;
61141 int num19 = i + num4 + 2;
61142 int num20 = num5 - 1;
61143 int num21 = num6 + 2;
61144 for (int m = num18; m < num19; m++)
61145 {
61146 for (int n = num20; n < num21; n++)
61147 {
61148 if (Main.tile[m, n].wall == 27 && !Main.tile[m, n].active())
61149 {
61150 if (Main.tile[m - 1, n].wall != 27 && m < i && !SolidTile(m - 1, n))
61151 {
61152 PlaceTile(m, n, 30, mute: true);
61153 Main.tile[m, n].wall = 0;
61154 }
61155 if (Main.tile[m + 1, n].wall != 27 && m > i && !SolidTile(m + 1, n))
61156 {
61157 PlaceTile(m, n, 30, mute: true);
61158 Main.tile[m, n].wall = 0;
61159 }
61160 for (int num22 = m - 1; num22 <= m + 1; num22++)
61161 {
61162 for (int num23 = n - 1; num23 <= n + 1; num23++)
61163 {
61164 if (SolidTile(num22, num23))
61165 {
61166 Main.tile[num22, num23].type = 30;
61167 }
61168 }
61169 }
61170 }
61171 if (Main.tile[m, n].type == 30 && Main.tile[m - 1, n].wall == 27 && Main.tile[m + 1, n].wall == 27 && (Main.tile[m, n - 1].wall == 27 || Main.tile[m, n - 1].active()) && (Main.tile[m, n + 1].wall == 27 || Main.tile[m, n + 1].active()))
61172 {
61173 Main.tile[m, n].active(active: false);
61174 Main.tile[m, n].wall = 27;
61175 }
61176 }
61177 }
61178 for (int num24 = num18; num24 < num19; num24++)
61179 {
61180 for (int num25 = num20; num25 < num21; num25++)
61181 {
61182 if (Main.tile[num24, num25].type == 30)
61183 {
61184 if (Main.tile[num24 - 1, num25].wall == 27 && Main.tile[num24 + 1, num25].wall == 27 && !Main.tile[num24 - 1, num25].active() && !Main.tile[num24 + 1, num25].active())
61185 {
61186 Main.tile[num24, num25].active(active: false);
61187 Main.tile[num24, num25].wall = 27;
61188 }
61189 if (!TileID.Sets.BasicChest[Main.tile[num24, num25 - 1].type] && Main.tile[num24 - 1, num25].wall == 27 && Main.tile[num24 + 1, num25].type == 30 && Main.tile[num24 + 2, num25].wall == 27 && !Main.tile[num24 - 1, num25].active() && !Main.tile[num24 + 2, num25].active())
61190 {
61191 Main.tile[num24, num25].active(active: false);
61192 Main.tile[num24, num25].wall = 27;
61193 Main.tile[num24 + 1, num25].active(active: false);
61194 Main.tile[num24 + 1, num25].wall = 27;
61195 }
61196 if (Main.tile[num24, num25 - 1].wall == 27 && Main.tile[num24, num25 + 1].wall == 27 && !Main.tile[num24, num25 - 1].active() && !Main.tile[num24, num25 + 1].active())
61197 {
61198 Main.tile[num24, num25].active(active: false);
61199 Main.tile[num24, num25].wall = 27;
61200 }
61201 }
61202 }
61203 }
61204 for (int num26 = num18; num26 < num19; num26++)
61205 {
61206 for (int num27 = num21; num27 > num20; num27--)
61207 {
61208 bool flag4 = false;
61209 if (Main.tile[num26, num27].active() && Main.tile[num26, num27].type == 30)
61210 {
61211 int num28 = -1;
61212 for (int num29 = 0; num29 < 2; num29++)
61213 {
61214 if (!SolidTile(num26 + num28, num27) && Main.tile[num26 + num28, num27].wall == 0)
61215 {
61216 int num30 = 0;
61217 int num31 = num27;
61218 int num32 = num27;
61219 while (Main.tile[num26, num31].active() && Main.tile[num26, num31].type == 30 && !SolidTile(num26 + num28, num31) && Main.tile[num26 + num28, num31].wall == 0)
61220 {
61221 num31--;
61222 num30++;
61223 }
61224 num31++;
61225 int num33 = num31 + 1;
61226 if (num30 > 4)
61227 {
61228 if (genRand.Next(2) == 0)
61229 {
61230 num31 = num32 - 1;
61231 bool flag5 = true;
61232 for (int num34 = num26 - 2; num34 <= num26 + 2; num34++)
61233 {
61234 for (int num35 = num31 - 2; num35 <= num31; num35++)
61235 {
61236 if (num34 != num26 && Main.tile[num34, num35].active())
61237 {
61238 flag5 = false;
61239 }
61240 }
61241 }
61242 if (flag5)
61243 {
61244 Main.tile[num26, num31].active(active: false);
61245 Main.tile[num26, num31 - 1].active(active: false);
61246 Main.tile[num26, num31 - 2].active(active: false);
61247 PlaceTile(num26, num31, 10, mute: true);
61248 flag4 = true;
61249 }
61250 }
61251 if (!flag4)
61252 {
61253 for (int num36 = num33; num36 < num32; num36++)
61254 {
61255 Main.tile[num26, num36].type = 124;
61256 }
61257 }
61258 }
61259 }
61260 num28 = 1;
61261 }
61262 }
61263 if (flag4)
61264 {
61265 break;
61266 }
61267 }
61268 }
61269 int num37 = genRand.Next(1, 2);
61270 if (genRand.Next(4) == 0)
61271 {
61272 num37 = 0;
61273 }
61274 if (genRand.Next(6) == 0)
61275 {
61276 num37++;
61277 }
61278 if (genRand.Next(10) == 0)
61279 {
61280 num37++;
61281 }
61282 for (int num38 = 0; num38 < num37; num38++)
61283 {
61284 int num39 = 0;
61285 int num40 = genRand.Next(num18, num19);
61286 int num41 = genRand.Next(num20, num21);
61287 while (!Main.wallHouse[Main.tile[num40, num41].wall] || Main.tile[num40, num41].active())
61288 {
61289 num39++;
61290 if (num39 > 1000)
61291 {
61292 break;
61293 }
61294 num40 = genRand.Next(num18, num19);
61295 num41 = genRand.Next(num20, num21);
61296 }
61297 if (num39 > 1000)
61298 {
61299 break;
61300 }
61301 int num42 = num40;
61302 int num43 = num40;
61303 int num44 = num41;
61304 int num45 = num41;
61305 int num46 = 0;
61306 for (int num47 = 0; num47 < 2; num47++)
61307 {
61308 num42 = num40;
61309 num43 = num40;
61310 while (!Main.tile[num42, num41].active() && Main.wallHouse[Main.tile[num42, num41].wall])
61311 {
61312 num42--;
61313 }
61314 num42++;
61315 for (; !Main.tile[num43, num41].active() && Main.wallHouse[Main.tile[num43, num41].wall]; num43++)
61316 {
61317 }
61318 num43--;
61319 i = (num42 + num43) / 2;
61320 num44 = num41;
61321 num45 = num41;
61322 while (!Main.tile[num40, num44].active() && Main.wallHouse[Main.tile[num40, num44].wall])
61323 {
61324 num44--;
61325 }
61326 num44++;
61327 for (; !Main.tile[num40, num45].active() && Main.wallHouse[Main.tile[num40, num45].wall]; num45++)
61328 {
61329 }
61330 num45--;
61331 num41 = (num44 + num45) / 2;
61332 }
61333 num42 = num40;
61334 num43 = num40;
61335 while (!Main.tile[num42, num41].active() && !Main.tile[num42, num41 - 1].active() && !Main.tile[num42, num41 + 1].active())
61336 {
61337 num42--;
61338 }
61339 num42++;
61340 for (; !Main.tile[num43, num41].active() && !Main.tile[num43, num41 - 1].active() && !Main.tile[num43, num41 + 1].active(); num43++)
61341 {
61342 }
61343 num43--;
61344 num44 = num41;
61345 num45 = num41;
61346 while (!Main.tile[num40, num44].active() && !Main.tile[num40 - 1, num44].active() && !Main.tile[num40 + 1, num44].active())
61347 {
61348 num44--;
61349 }
61350 num44++;
61351 for (; !Main.tile[num40, num45].active() && !Main.tile[num40 - 1, num45].active() && !Main.tile[num40 + 1, num45].active(); num45++)
61352 {
61353 }
61354 num45--;
61355 num40 = (num42 + num43) / 2;
61356 num41 = (num44 + num45) / 2;
61357 int num48 = num43 - num42;
61358 num46 = num45 - num44;
61359 if (num48 <= 7 || num46 <= 5)
61360 {
61361 continue;
61362 }
61363 int num49 = 0;
61364 if (nearPicture2(i, num41))
61365 {
61366 num49 = -1;
61367 }
61368 if (num49 == 0)
61369 {
61371 if (!nearPicture(num40, num41))
61372 {
61374 }
61375 }
61376 }
61377 int num50;
61378 for (num50 = num18; num50 < num19; num50++)
61379 {
61380 bool flag6 = true;
61381 for (int num51 = num20; num51 < num21; num51++)
61382 {
61383 for (int num52 = num50 - 3; num52 <= num50 + 3; num52++)
61384 {
61385 if (Main.tile[num52, num51].active() && (!SolidTile(num52, num51) || Main.tile[num52, num51].type == 10))
61386 {
61387 flag6 = false;
61388 }
61389 }
61390 }
61391 if (flag6)
61392 {
61393 for (int num53 = num20; num53 < num21; num53++)
61394 {
61395 if (Main.tile[num50, num53].wall == 27 && !Main.tile[num50, num53].active())
61396 {
61397 PlaceTile(num50, num53, 124, mute: true);
61398 }
61399 }
61400 }
61401 num50 += genRand.Next(4);
61402 }
61403 for (int num54 = 0; num54 < 4; num54++)
61404 {
61405 int num55 = genRand.Next(num18 + 2, num19 - 1);
61406 int num56 = genRand.Next(num20 + 2, num21 - 1);
61407 while (Main.tile[num55, num56].wall != 27)
61408 {
61409 num55 = genRand.Next(num18 + 2, num19 - 1);
61410 num56 = genRand.Next(num20 + 2, num21 - 1);
61411 }
61412 while (Main.tile[num55, num56].active())
61413 {
61414 num56--;
61415 }
61416 for (; !Main.tile[num55, num56].active(); num56++)
61417 {
61418 }
61419 num56--;
61420 if (Main.tile[num55, num56].wall != 27)
61421 {
61422 continue;
61423 }
61424 if (genRand.Next(3) == 0)
61425 {
61426 int num57 = genRand.Next(9);
61427 if (num57 == 0)
61428 {
61429 num57 = 14;
61430 }
61431 if (num57 == 1)
61432 {
61433 num57 = 16;
61434 }
61435 if (num57 == 2)
61436 {
61437 num57 = 18;
61438 }
61439 if (num57 == 3)
61440 {
61441 num57 = 86;
61442 }
61443 if (num57 == 4)
61444 {
61445 num57 = 87;
61446 }
61447 if (num57 == 5)
61448 {
61449 num57 = 94;
61450 }
61451 if (num57 == 6)
61452 {
61453 num57 = 101;
61454 }
61455 if (num57 == 7)
61456 {
61457 num57 = 104;
61458 }
61459 if (num57 == 8)
61460 {
61461 num57 = 106;
61462 }
61464 }
61465 else if (GenVars.statueList != null)
61466 {
61467 int num58 = genRand.Next(2, GenVars.statueList.Length);
61469 }
61470 }
61471 for (int num59 = 0; num59 < 40; num59++)
61472 {
61473 int num60 = genRand.Next(num18 + 2, num19 - 1);
61474 int num61 = genRand.Next(num20 + 2, num21 - 1);
61475 while (Main.tile[num60, num61].wall != 27)
61476 {
61477 num60 = genRand.Next(num18 + 2, num19 - 1);
61478 num61 = genRand.Next(num20 + 2, num21 - 1);
61479 }
61480 while (Main.tile[num60, num61].active())
61481 {
61482 num61--;
61483 }
61484 for (; !Main.tile[num60, num61].active(); num61++)
61485 {
61486 }
61487 num61--;
61488 if (Main.tile[num60, num61].wall == 27 && genRand.Next(2) == 0)
61489 {
61490 int style = genRand.Next(22, 26);
61491 PlaceTile(num60, num61, 186, mute: true, forced: false, -1, style);
61492 }
61493 }
61494 for (int num62 = 0; num62 < 20; num62++)
61495 {
61496 int num63 = genRand.Next(num18 + 2, num19 - 1);
61497 int num64 = genRand.Next(num20 + 2, num21 - 1);
61498 while (Main.tile[num63, num64].wall != 27)
61499 {
61500 num63 = genRand.Next(num18 + 2, num19 - 1);
61501 num64 = genRand.Next(num20 + 2, num21 - 1);
61502 }
61503 while (Main.tile[num63, num64].active())
61504 {
61505 num64--;
61506 }
61507 for (; !Main.tile[num63, num64].active(); num64++)
61508 {
61509 }
61510 num64--;
61511 if (Main.tile[num63, num64].wall == 27 && genRand.Next(2) == 0)
61512 {
61513 int x = genRand.Next(31, 34);
61514 PlaceSmallPile(num63, num64, x, 1, 185);
61515 }
61516 }
61517 for (int num65 = 0; num65 < 15; num65++)
61518 {
61519 int num66 = genRand.Next(num18 + 2, num19 - 1);
61520 int num67 = genRand.Next(num20 + 2, num21 - 1);
61521 while (Main.tile[num66, num67].wall != 27)
61522 {
61523 num66 = genRand.Next(num18 + 2, num19 - 1);
61524 num67 = genRand.Next(num20 + 2, num21 - 1);
61525 }
61526 while (Main.tile[num66, num67].active())
61527 {
61528 num67--;
61529 }
61530 while (num67 > 0 && !Main.tile[num66, num67 - 1].active())
61531 {
61532 num67--;
61533 }
61534 if (Main.tile[num66, num67].wall != 27)
61535 {
61536 continue;
61537 }
61538 int num68 = 4;
61539 int style2 = 0;
61540 if (genRand.Next(10) < 9)
61541 {
61542 num68 = -1;
61543 }
61544 else
61545 {
61546 num68 = 34;
61547 style2 = genRand.Next(6);
61548 }
61549 if (num68 <= 0)
61550 {
61551 continue;
61552 }
61554 if (Main.tile[num66, num67].type != num68)
61555 {
61556 continue;
61557 }
61558 if (num68 == 4)
61559 {
61560 Main.tile[num66, num67].frameX += 54;
61561 continue;
61562 }
61563 int num69 = num66;
61564 int num70 = num67;
61565 num67 = num70 - Main.tile[num69, num70].frameY % 54 / 18;
61566 num66 = Main.tile[num69, num70].frameX / 18;
61567 if (num66 > 2)
61568 {
61569 num66 -= 3;
61570 }
61571 num66 = num69 - num66;
61572 short num71 = 54;
61573 if (Main.tile[num66, num67].frameX > 0)
61574 {
61575 num71 = -54;
61576 }
61577 for (int num72 = num66; num72 < num66 + 3; num72++)
61578 {
61579 for (int num73 = num67; num73 < num67 + 3; num73++)
61580 {
61581 Main.tile[num72, num73].frameX += num71;
61582 }
61583 }
61584 }
61585 }
static bool[] BasicChest
Definition TileID.cs:223
static Point16[] statueList
Definition GenVars.cs:304
static bool nearPicture(int x, int y)
static bool PlaceSmallPile(int i, int j, int X, int Y, ushort type=185)
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 bool nearPicture2(int x, int y)
static PaintingEntry RandHousePicture()

References Terraria.ID.TileID.Sets.BasicChest, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Enums.SolidTile, Terraria.WorldBuilding.GenVars.statueList, Terraria.Main.tile, and Terraria.Main.wallHouse.