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

◆ CheckCatTail()

static void Terraria.WorldGen.CheckCatTail ( int x,
int j )
inlinestatic

Definition at line 49676 of file WorldGen.cs.

49677 {
49678 if (Main.tile[x, j] == null)
49679 {
49680 return;
49681 }
49682 int num = j;
49683 bool flag = false;
49684 int num2 = num;
49685 while ((!Main.tile[x, num2].active() || !Main.tileSolid[Main.tile[x, num2].type] || Main.tileSolidTop[Main.tile[x, num2].type]) && num2 < Main.maxTilesY - 50)
49686 {
49687 if (Main.tile[x, num2].active() && Main.tile[x, num2].type != 519)
49688 {
49689 flag = true;
49690 }
49691 if (!Main.tile[x, num2].active())
49692 {
49693 break;
49694 }
49695 num2++;
49696 if (Main.tile[x, num2] == null)
49697 {
49698 return;
49699 }
49700 }
49701 num = num2 - 1;
49702 if (Main.tile[x, num] == null)
49703 {
49704 return;
49705 }
49706 while (Main.tile[x, num] != null && Main.tile[x, num].liquid > 0 && num > 50)
49707 {
49708 if ((Main.tile[x, num].active() && Main.tile[x, num].type != 519) || Main.tile[x, num].liquidType() != 0)
49709 {
49710 flag = true;
49711 }
49712 num--;
49713 if (Main.tile[x, num] == null)
49714 {
49715 return;
49716 }
49717 }
49718 num++;
49719 if (Main.tile[x, num] == null)
49720 {
49721 return;
49722 }
49723 int num3 = num;
49724 int num4 = catTailDistance;
49725 if (num2 - num3 > num4)
49726 {
49727 flag = true;
49728 }
49729 int type = Main.tile[x, num2].type;
49730 int num5 = -1;
49731 switch (type)
49732 {
49733 case 2:
49734 case 477:
49735 num5 = 0;
49736 break;
49737 case 53:
49738 num5 = 18;
49739 break;
49740 case 199:
49741 case 234:
49742 case 662:
49743 num5 = 54;
49744 break;
49745 case 23:
49746 case 112:
49747 case 661:
49748 num5 = 72;
49749 break;
49750 case 70:
49751 num5 = 90;
49752 break;
49753 }
49754 if (!Main.tile[x, num2].nactive())
49755 {
49756 flag = true;
49757 }
49758 if (num5 < 0)
49759 {
49760 flag = true;
49761 }
49762 num = num2 - 1;
49763 if (Main.tile[x, num] != null && !Main.tile[x, num].active())
49764 {
49765 for (int num6 = num; num6 >= num3; num6--)
49766 {
49767 if (Main.tile[x, num6] == null)
49768 {
49769 return;
49770 }
49771 if (Main.tile[x, num6].active() && Main.tile[x, num6].type == 519)
49772 {
49773 num = num6;
49774 break;
49775 }
49776 }
49777 }
49778 while (Main.tile[x, num] != null && Main.tile[x, num].active() && Main.tile[x, num].type == 519)
49779 {
49780 num--;
49781 }
49782 num++;
49783 if (Main.tile[x, num2 - 1] != null && Main.tile[x, num2 - 1].liquid < 127 && genRand.Next(4) == 0)
49784 {
49785 flag = true;
49786 }
49787 if (Main.tile[x, num] != null && Main.tile[x, num].frameX >= 180 && Main.tile[x, num].liquid > 127 && genRand.Next(4) == 0)
49788 {
49789 flag = true;
49790 }
49791 if (Main.tile[x, num] != null && Main.tile[x, num2 - 1] != null && Main.tile[x, num].frameX > 18)
49792 {
49793 if (Main.tile[x, num2 - 1].frameX < 36 || Main.tile[x, num2 - 1].frameX > 72)
49794 {
49795 flag = true;
49796 }
49797 else if (Main.tile[x, num].frameX < 90)
49798 {
49799 flag = true;
49800 }
49801 else if (Main.tile[x, num].frameX >= 108 && Main.tile[x, num].frameX <= 162)
49802 {
49803 Main.tile[x, num].frameX = 90;
49804 }
49805 }
49806 if (num2 > num + 4 && Main.tile[x, num + 4] != null && Main.tile[x, num + 3] != null && Main.tile[x, num + 4].liquid == 0 && Main.tile[x, num + 3].type == 519)
49807 {
49808 flag = true;
49809 }
49810 if (flag)
49811 {
49812 int num7 = num3;
49813 if (num < num3)
49814 {
49815 num7 = num;
49816 }
49817 num7 -= 4;
49818 for (int i = num7; i <= num2; i++)
49819 {
49820 if (Main.tile[x, i] != null && Main.tile[x, i].active() && Main.tile[x, i].type == 519)
49821 {
49822 KillTile(x, i);
49823 if (Main.netMode == 2)
49824 {
49825 NetMessage.SendData(17, -1, -1, null, 0, x, i);
49826 }
49827 SquareTileFrame(x, i);
49828 }
49829 }
49830 }
49831 else
49832 {
49833 if (num5 == Main.tile[x, num].frameY)
49834 {
49835 return;
49836 }
49837 for (int k = num; k < num2; k++)
49838 {
49839 if (Main.tile[x, k] != null && Main.tile[x, k].active() && Main.tile[x, k].type == 519)
49840 {
49841 Main.tile[x, k].frameY = (short)num5;
49842 if (Main.netMode == 2)
49843 {
49844 NetMessage.SendTileSquare(-1, x, num);
49845 }
49846 }
49847 }
49848 }
49849 }
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static void SquareTileFrame(int i, int j, bool resetFrame=true)
static int catTailDistance
Definition WorldGen.cs:1176

References Terraria.Main.maxTilesY, Terraria.Main.netMode, Terraria.NetMessage.SendData(), Terraria.NetMessage.SendTileSquare(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and System.type.