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

◆ Check3x3()

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

Definition at line 44770 of file WorldGen.cs.

44771 {
44772 if (destroyObject)
44773 {
44774 return;
44775 }
44776 bool flag = false;
44777 int num = i;
44778 int num2 = j;
44779 num = Main.tile[i, j].frameX / 18;
44780 int num3 = 0;
44781 while (num >= 3)
44782 {
44783 num3++;
44784 num -= 3;
44785 }
44786 int num4 = i - num;
44787 int num5 = 54 * num3;
44788 int num6 = Main.tile[i, j].frameY / 54;
44789 int num7 = Main.tile[i, j].frameY % 54 / 18;
44790 if (num >= 3)
44791 {
44792 num -= 3;
44793 }
44794 num = i - num;
44795 num2 -= num7;
44796 for (int k = num; k < num + 3; k++)
44797 {
44798 for (int l = num2; l < num2 + 3; l++)
44799 {
44800 if (Main.tile[k, l] == null)
44801 {
44802 Main.tile[k, l] = new Tile();
44803 }
44804 if (!Main.tile[k, l].active() || Main.tile[k, l].type != type || Main.tile[k, l].frameX != (k - num4) * 18 + num5 || Main.tile[k, l].frameY != (l - num2) * 18 + num6 * 54)
44805 {
44806 flag = true;
44807 }
44808 }
44809 }
44810 if (type == 106 || type == 212 || type == 219 || type == 220 || type == 228 || type == 231 || type == 243 || type == 247 || type == 283 || (type >= 300 && type <= 308) || type == 354 || type == 355 || type == 499 || type == 406 || type == 412 || type == 452 || type == 455 || type == 491 || type == 642)
44811 {
44812 for (int m = num; m < num + 3; m++)
44813 {
44814 if (Main.tile[m, num2 + 3] == null)
44815 {
44816 Main.tile[m, num2 + 3] = new Tile();
44817 }
44818 if (!SolidTileAllowBottomSlope(m, num2 + 3))
44819 {
44820 flag = true;
44821 break;
44822 }
44823 }
44824 }
44825 else
44826 {
44827 if (Main.tile[num + 1, num2 - 1] == null)
44828 {
44829 Main.tile[num + 1, num2 - 1] = new Tile();
44830 }
44831 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])
44832 {
44833 flag = true;
44834 }
44835 }
44836 if (!flag)
44837 {
44838 return;
44839 }
44840 destroyObject = true;
44841 for (int n = num; n < num + 3; n++)
44842 {
44843 for (int num8 = num2; num8 < num2 + 3; num8++)
44844 {
44845 if (Main.tile[n, num8].type == type && Main.tile[n, num8].active())
44846 {
44847 KillTile(n, num8);
44848 }
44849 }
44850 }
44851 switch (type)
44852 {
44853 case 106:
44854 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 363);
44855 break;
44856 case 243:
44857 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 1430);
44858 break;
44859 case 212:
44860 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 951);
44861 break;
44862 case 219:
44863 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 997);
44864 break;
44865 case 642:
44866 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 5296);
44867 break;
44868 case 220:
44869 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 998);
44870 break;
44871 case 228:
44872 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 1120);
44873 break;
44874 case 247:
44875 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 1551);
44876 break;
44877 case 283:
44878 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 2172);
44879 break;
44880 case 300:
44881 case 301:
44882 case 302:
44883 case 303:
44884 case 304:
44885 case 305:
44886 case 306:
44887 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 2192 + type - 300);
44888 break;
44889 default:
44890 switch (type)
44891 {
44892 case 307:
44893 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 2203);
44894 break;
44895 case 308:
44896 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 2204);
44897 break;
44898 case 406:
44899 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3365);
44900 break;
44901 case 452:
44902 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3742);
44903 break;
44904 case 354:
44905 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 2999);
44906 break;
44907 case 355:
44908 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3000);
44909 break;
44910 case 499:
44911 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 4142);
44912 break;
44913 case 412:
44914 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3549);
44915 break;
44916 case 455:
44917 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 3747);
44918 break;
44919 case 491:
44920 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, 4076);
44921 break;
44922 case 231:
44923 {
44924 int num9 = (i + 1) * 16 + 8;
44925 int num10 = j * 16;
44926 Gore.NewGore(new Vector2(num9, num10), default(Vector2), 300);
44927 Gore.NewGore(new Vector2(num9, num10 + 8), default(Vector2), 301);
44928 Gore.NewGore(new Vector2(num9, num10 + 16), default(Vector2), 302);
44929 float num11 = i * 16;
44930 float num12 = j * 16;
44931 float num13 = -1f;
44932 int plr = 0;
44933 for (int num14 = 0; num14 < 255; num14++)
44934 {
44935 if (Main.player[num14].active && !Main.player[num14].dead)
44936 {
44937 float num15 = Math.Abs(Main.player[num14].position.X - num11) + Math.Abs(Main.player[num14].position.Y - num12);
44938 if (num15 < num13 || num13 == -1f)
44939 {
44940 plr = num14;
44941 num13 = num15;
44942 }
44943 }
44944 }
44945 if (num13 < 4800f && !Main.gameMenu)
44946 {
44947 NPC.SpawnOnPlayer(plr, 222);
44948 }
44949 break;
44950 }
44951 }
44952 break;
44953 }
44954 destroyObject = false;
44955 for (int num16 = num - 1; num16 < num + 4; num16++)
44956 {
44957 for (int num17 = num2 - 1; num17 < num2 + 4; num17++)
44958 {
44960 }
44961 }
44962 }
static double Abs(double value)
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 bool SolidTileAllowBottomSlope(int i, int j)
static IEntitySource GetItemSource_FromTileBreak(int x, int y)

References System.Math.Abs(), Terraria.Main.gameMenu, Terraria.Gore.NewGore(), Terraria.Item.NewItem(), Terraria.Main.player, Terraria.NPC.SpawnOnPlayer(), Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and System.type.