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

◆ Check2xX()

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

Definition at line 32690 of file WorldGen.cs.

32691 {
32692 if (destroyObject)
32693 {
32694 return;
32695 }
32696 int num = i;
32697 int num2;
32698 for (num2 = Main.tile[i, j].frameX; num2 >= 36; num2 -= 36)
32699 {
32700 }
32701 if (num2 == 18)
32702 {
32703 num--;
32704 }
32705 if (Main.tile[num, j] == null)
32706 {
32707 Main.tile[num, j] = new Tile();
32708 }
32709 int num3 = Main.tile[num, j].frameY / 18;
32710 int num4 = 3;
32711 if (type == 104)
32712 {
32713 num4 = 5;
32714 }
32715 if (type == 207)
32716 {
32717 num4 = 4;
32718 }
32719 int num5 = 0;
32720 while (num3 >= num4)
32721 {
32722 num3 -= num4;
32723 num5 += num4 * 18;
32724 }
32725 int num6 = j - num3;
32726 if (type == 410 && num5 != 0)
32727 {
32728 num5 += 2;
32729 }
32730 if (Main.tile[num, num6] == null)
32731 {
32732 Main.tile[num, num6] = new Tile();
32733 }
32734 int frameX = Main.tile[num, j].frameX;
32735 int frameY = Main.tile[num, j].frameY;
32736 bool flag = false;
32737 for (int k = 0; k < num4; k++)
32738 {
32739 if (Main.tile[num, num6 + k] == null)
32740 {
32741 Main.tile[num, num6 + k] = new Tile();
32742 }
32743 if (!Main.tile[num, num6 + k].active())
32744 {
32745 flag = true;
32746 }
32747 else if (Main.tile[num, num6 + k].type != type)
32748 {
32749 flag = true;
32750 }
32751 else if (Main.tile[num, num6 + k].frameY != k * 18 + num5)
32752 {
32753 flag = true;
32754 }
32755 else if (Main.tile[num, num6 + k].frameX != frameX)
32756 {
32757 flag = true;
32758 }
32759 if (Main.tile[num + 1, num6 + k] == null)
32760 {
32761 Main.tile[num + 1, num6 + k] = new Tile();
32762 }
32763 if (!Main.tile[num + 1, num6 + k].active())
32764 {
32765 flag = true;
32766 }
32767 else if (Main.tile[num + 1, num6 + k].type != type)
32768 {
32769 flag = true;
32770 }
32771 else if (Main.tile[num + 1, num6 + k].frameY != k * 18 + num5)
32772 {
32773 flag = true;
32774 }
32775 else if (Main.tile[num + 1, num6 + k].frameX != frameX + 18)
32776 {
32777 flag = true;
32778 }
32779 }
32780 if (type == 465 || type == 531 || type == 591 || type == 592)
32781 {
32782 bool flag2 = false;
32783 for (int l = 0; l < 2; l++)
32784 {
32785 bool flag3 = false;
32786 Tile tileSafely = Framing.GetTileSafely(num + l, num6 - 1);
32787 if (type != 531 && tileSafely.type == 380)
32788 {
32789 flag3 = true;
32790 }
32791 else if (type != 531 && TileID.Sets.Platforms[tileSafely.type])
32792 {
32793 if (l == 0)
32794 {
32796 flag3 = true;
32797 }
32798 else if (flag2 == IsBelowANonHammeredPlatform(num + l, num6))
32799 {
32800 flag3 = true;
32801 }
32802 }
32803 else
32804 {
32805 flag3 = SolidTileAllowTopSlope(num + l, num6 - 1);
32806 }
32807 if (!flag3)
32808 {
32809 flag = true;
32810 break;
32811 }
32812 }
32813 }
32814 else
32815 {
32816 if (!SolidTileAllowBottomSlope(num, num6 + num4))
32817 {
32818 flag = true;
32819 }
32820 if (!SolidTileAllowBottomSlope(num + 1, num6 + num4))
32821 {
32822 flag = true;
32823 }
32824 }
32825 if (!flag)
32826 {
32827 return;
32828 }
32829 destroyObject = true;
32830 for (int m = 0; m < num4; m++)
32831 {
32832 if (Main.tile[num, num6 + m].type == type)
32833 {
32834 KillTile(num, num6 + m);
32835 }
32836 if (Main.tile[num + 1, num6 + m].type == type)
32837 {
32838 KillTile(num + 1, num6 + m);
32839 }
32840 }
32841 if (type == 104)
32842 {
32843 int num7 = frameX / 36;
32844 int num8 = 0;
32845 if (num7 >= 1 && num7 <= 5)
32846 {
32847 num8 = 2237 + num7 - 1;
32848 }
32849 else
32850 {
32851 switch (num7)
32852 {
32853 case 6:
32854 num8 = 2560;
32855 break;
32856 case 7:
32857 num8 = 2575;
32858 break;
32859 case 8:
32860 case 9:
32861 case 10:
32862 case 11:
32863 case 12:
32864 case 13:
32865 case 14:
32866 case 15:
32867 case 16:
32868 case 17:
32869 case 18:
32870 case 19:
32871 case 20:
32872 case 21:
32873 case 22:
32874 case 23:
32875 num8 = 2591 + num7 - 8;
32876 break;
32877 default:
32878 num8 = num7 switch
32879 {
32880 24 => 2809,
32881 25 => 3126,
32882 26 => 3128,
32883 27 => 3127,
32884 28 => 3898,
32885 29 => 3899,
32886 30 => 3900,
32887 31 => 3901,
32888 32 => 3902,
32889 33 => 3940,
32890 34 => 3966,
32891 35 => 4154,
32892 36 => 4175,
32893 37 => 4196,
32894 38 => 4217,
32895 39 => 4306,
32896 40 => 4575,
32897 41 => 5157,
32898 42 => 5178,
32899 43 => 5199,
32900 _ => 359,
32901 };
32902 break;
32903 }
32904 }
32905 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num8);
32906 }
32907 if (type == 105)
32908 {
32909 int num9 = frameX / 36;
32910 int num10 = frameY / 54;
32911 num10 %= 3;
32912 num9 += num10 * 55;
32913 switch (num9)
32914 {
32915 case 0:
32916 num9 = 360;
32917 break;
32918 case 1:
32919 num9 = 52;
32920 break;
32921 case 43:
32922 num9 = 1152;
32923 break;
32924 case 44:
32925 num9 = 1153;
32926 break;
32927 case 45:
32928 num9 = 1154;
32929 break;
32930 case 46:
32931 num9 = 1408;
32932 break;
32933 case 47:
32934 num9 = 1409;
32935 break;
32936 case 48:
32937 num9 = 1410;
32938 break;
32939 case 49:
32940 num9 = 1462;
32941 break;
32942 case 50:
32943 num9 = 2672;
32944 break;
32945 case 51:
32946 case 52:
32947 case 53:
32948 case 54:
32949 case 55:
32950 case 56:
32951 case 57:
32952 case 58:
32953 case 59:
32954 case 60:
32955 case 61:
32956 case 62:
32957 num9 = 3651 + num9 - 51;
32958 break;
32959 default:
32960 num9 = ((num9 >= 63 && num9 <= 75) ? (3708 + num9 - 63) : (num9 switch
32961 {
32962 76 => 4397,
32963 77 => 4360,
32964 78 => 4342,
32965 79 => 4466,
32966 80 => 5317,
32967 81 => 5318,
32968 82 => 5319,
32969 _ => 438 + num9 - 2,
32970 }));
32971 break;
32972 }
32973 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num9);
32974 }
32975 if (type == 356)
32976 {
32977 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 3064);
32978 }
32979 if (type == 663)
32980 {
32981 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 5381);
32982 }
32983 if (type == 456)
32984 {
32985 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 3748);
32986 }
32987 if (type == 337)
32988 {
32989 int num11 = frameX / 36;
32990 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 2702 + num11);
32991 }
32992 if (type == 207)
32993 {
32994 int num12 = frameX / 36;
32995 switch (num12)
32996 {
32997 case 0:
32998 num12 = 909;
32999 break;
33000 case 1:
33001 num12 = 910;
33002 break;
33003 case 2:
33004 case 3:
33005 case 4:
33006 case 5:
33007 case 6:
33008 case 7:
33009 num12 = 938 + num12;
33010 break;
33011 default:
33012 switch (num12)
33013 {
33014 case 8:
33015 num12 = 4922;
33016 break;
33017 case 9:
33018 num12 = 4417;
33019 break;
33020 }
33021 break;
33022 }
33023 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num12);
33024 }
33025 if (type == 410)
33026 {
33027 int num13 = frameX / 36;
33028 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num13 + 3536);
33029 }
33030 if (type == 480)
33031 {
33032 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4054);
33033 }
33034 if (type == 509)
33035 {
33036 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4318);
33037 }
33038 if (type == 657)
33039 {
33040 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 5345);
33041 }
33042 if (type == 658)
33043 {
33044 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 5347);
33045 }
33046 if (type == 489)
33047 {
33048 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4074);
33049 }
33050 if (type == 320)
33051 {
33052 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 2496);
33053 }
33054 if (type == 349)
33055 {
33056 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 470);
33057 }
33058 if (type == 506)
33059 {
33060 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4276);
33061 }
33062 if (type == 545)
33063 {
33064 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4420);
33065 }
33066 if (type == 465)
33067 {
33068 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 3815);
33069 }
33070 if (type == 531)
33071 {
33072 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4355);
33073 }
33074 if (type == 378)
33075 {
33076 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 48, 3202);
33078 }
33079 if (type == 560)
33080 {
33081 int num14 = frameX / 36;
33082 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num14 + 4599);
33083 }
33084 if (type == 591)
33085 {
33086 int num15 = frameX / 36;
33087 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, num15 + 4858);
33088 }
33089 if (type == 592)
33090 {
33091 Item.NewItem(GetItemSource_FromTileBreak(num, j), num * 16, j * 16, 32, 32, 4867);
33092 }
33093 destroyObject = false;
33094 }
static bool[] Platforms
Definition TileID.cs:163
static bool destroyObject
Definition WorldGen.cs:1020
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static bool SolidTileAllowTopSlope(int i, int j)
static bool IsBelowANonHammeredPlatform(int x, int y)
static bool SolidTileAllowBottomSlope(int i, int j)
static IEntitySource GetItemSource_FromTileBreak(int x, int y)

References Terraria.Framing.GetTileSafely(), Terraria.GameContent.Tile_Entities.TETrainingDummy.Kill(), Terraria.Item.NewItem(), Terraria.ID.TileID.Sets.Platforms, Terraria.DataStructures.Tile, Terraria.Main.tile, and System.type.