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

◆ CheckChand()

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

Definition at line 44510 of file WorldGen.cs.

44511 {
44512 if (destroyObject)
44513 {
44514 return;
44515 }
44516 bool flag = false;
44517 int num = i;
44518 int num2 = j;
44519 int num3 = 3;
44520 if (type == 454)
44521 {
44522 num3 = 4;
44523 }
44524 num = Main.tile[i, j].frameX / 18;
44525 int num4 = 0;
44526 while (num >= num3)
44527 {
44528 num4++;
44529 num -= num3;
44530 }
44531 int num5 = i - num;
44532 int num6 = 18 * num3 * num4;
44533 if (num >= num3)
44534 {
44535 num -= num3;
44536 }
44537 num = i - num;
44538 num2 = Main.tile[i, j].frameY / 18;
44539 int num7 = 0;
44540 while (num2 >= 3)
44541 {
44542 num7++;
44543 num2 -= 3;
44544 }
44545 if (num6 >= 108)
44546 {
44547 num7 += 37 * (num6 / 108);
44548 }
44549 int num8 = 54 * num7;
44550 if (num6 >= 108)
44551 {
44552 num8 -= 54 * (num6 / 108) * 37;
44553 }
44554 if (num2 >= 3)
44555 {
44556 num2 -= 3;
44557 }
44558 num2 = j - num2;
44559 for (int k = num; k < num + num3; k++)
44560 {
44561 for (int l = num2; l < num2 + 3; l++)
44562 {
44563 if (Main.tile[k, l] == null)
44564 {
44565 Main.tile[k, l] = new Tile();
44566 }
44567 if (!Main.tile[k, l].active() || Main.tile[k, l].type != type || Main.tile[k, l].frameX != (k - num5) * 18 + num6 || Main.tile[k, l].frameY != (l - num2) * 18 + num8)
44568 {
44569 flag = true;
44570 }
44571 }
44572 }
44573 if (Main.tile[num + 1, num2 - 1] == null)
44574 {
44575 Main.tile[num + 1, num2 - 1] = new Tile();
44576 }
44577 if (!Main.tile[num + 1, num2 - 1].nactive() || !Main.tileSolid[Main.tile[num + 1, num2 - 1].type] || Main.tileSolidTop[Main.tile[num + 1, num2 - 1].type])
44578 {
44579 flag = true;
44580 }
44581 if (!flag)
44582 {
44583 return;
44584 }
44585 destroyObject = true;
44586 for (int m = num; m < num + num3; m++)
44587 {
44588 for (int n = num2; n < num2 + 3; n++)
44589 {
44590 if (Main.tile[m, n].type == type && Main.tile[m, n].active())
44591 {
44592 KillTile(m, n);
44593 }
44594 }
44595 }
44596 if (type == 454)
44597 {
44598 switch (Main.rand.Next(9))
44599 {
44600 case 2:
44601 case 3:
44602 case 4:
44603 {
44604 int num13 = Main.rand.Next(10, 31);
44605 while (num13 > 0)
44606 {
44607 int num14 = Main.rand.Next(2, 11);
44608 if (num14 > num13)
44609 {
44610 num14 = num13;
44611 }
44612 num13 -= num14;
44613 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 72, num14);
44614 }
44615 break;
44616 }
44617 case 5:
44618 case 6:
44619 {
44620 int num17 = Main.rand.Next(60, 80);
44621 while (num17 > 0)
44622 {
44623 int num18 = Main.rand.Next(3, 16);
44624 if (num18 > num17)
44625 {
44626 num18 = num17;
44627 }
44628 num17 -= num18;
44629 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16 - 10, j * 16 - 10, 52, 52, 72, num18);
44630 }
44631 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 1358);
44632 break;
44633 }
44634 case 7:
44635 {
44636 int num15 = Main.rand.Next(10, 31);
44637 while (num15 > 0)
44638 {
44639 int num16 = Main.rand.Next(2, 9);
44640 if (num16 > num15)
44641 {
44642 num16 = num15;
44643 }
44644 num15 -= num16;
44645 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16 - 10, j * 16 - 10, 52, 52, 72, num16);
44646 }
44647 if (Main.rand.Next(8) == 0)
44648 {
44649 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3532);
44650 }
44651 if (Main.rand.Next(8) == 0)
44652 {
44653 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3532);
44654 }
44655 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 73);
44656 break;
44657 }
44658 case 8:
44659 {
44660 int num9 = 100;
44661 while (num9 > 0)
44662 {
44663 int num10 = Main.rand.Next(3, 16);
44664 if (num10 > num9)
44665 {
44666 num10 = num9;
44667 }
44668 num9 -= num10;
44669 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16 - 10, j * 16 - 10, 52, 52, 72, num10);
44670 }
44671 int num11 = Main.rand.Next(30, 91);
44672 while (num11 > 0)
44673 {
44674 int num12 = Main.rand.Next(7, 14);
44675 if (num12 > num11)
44676 {
44677 num12 = num11;
44678 }
44679 num11 -= num12;
44680 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16 - 10, j * 16 - 10, 52, 52, 1349, num12);
44681 }
44682 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 1358);
44683 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 73);
44684 break;
44685 }
44686 }
44687 }
44688 if (type == 34)
44689 {
44690 int type2;
44691 switch (num7)
44692 {
44693 case 1:
44694 type2 = 107;
44695 break;
44696 case 2:
44697 type2 = 108;
44698 break;
44699 case 3:
44700 type2 = 710;
44701 break;
44702 case 4:
44703 type2 = 711;
44704 break;
44705 case 5:
44706 type2 = 712;
44707 break;
44708 case 6:
44709 type2 = 1812;
44710 break;
44711 case 7:
44712 case 8:
44713 case 9:
44714 case 10:
44715 case 11:
44716 case 12:
44717 case 13:
44718 case 14:
44719 case 15:
44720 case 16:
44721 case 17:
44722 type2 = 2055 + num7 - 7;
44723 break;
44724 default:
44725 type2 = ((num7 >= 18 && num7 <= 21) ? (2141 + num7 - 18) : (num7 switch
44726 {
44727 22 => 2224,
44728 23 => 2525,
44729 24 => 2543,
44730 25 => 2558,
44731 26 => 2573,
44732 27 => 2652,
44733 28 => 2653,
44734 29 => 2654,
44735 30 => 2655,
44736 31 => 2656,
44737 32 => 2657,
44738 33 => 2813,
44739 34 => 3177,
44740 35 => 3179,
44741 36 => 3178,
44742 37 => 3894,
44743 38 => 3938,
44744 39 => 3964,
44745 40 => 4152,
44746 41 => 4173,
44747 42 => 4194,
44748 43 => 4215,
44749 44 => 4305,
44750 45 => 4573,
44751 46 => 5155,
44752 47 => 5176,
44753 48 => 5197,
44754 _ => 106,
44755 }));
44756 break;
44757 }
44758 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, type2);
44759 }
44760 destroyObject = false;
44761 for (int num19 = num - 1; num19 < num + num3 + 1; num19++)
44762 {
44763 for (int num20 = num2 - 1; num20 < num2 + 4; num20++)
44764 {
44766 }
44767 }
44768 }
static bool destroyObject
Definition WorldGen.cs:1020
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static void TileFrame(int i, int j, bool resetFrame=false, bool noBreak=false)
static IEntitySource GetItemSource_FromTileBreak(int x, int y)

References Terraria.Item.NewItem(), Terraria.Main.rand, Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and System.type.