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

◆ Check2x2()

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

Definition at line 39637 of file WorldGen.cs.

39638 {
39639 if (destroyObject)
39640 {
39641 return;
39642 }
39643 bool flag = false;
39644 int num = 0;
39645 int num2 = Main.tile[i, j].frameX / 18 * -1;
39646 if (num2 < -1)
39647 {
39648 num2 += 2;
39649 num = 36;
39650 }
39651 num2 += i;
39652 int num3 = ((type == 172) ? 38 : 36);
39653 int num4 = Main.tile[i, j].frameY;
39654 int num5 = 0;
39655 while (num4 >= num3)
39656 {
39657 num4 -= num3;
39658 num5++;
39659 }
39660 int num6 = j - num4 / 18;
39661 int num7 = 0;
39662 if (type == 652)
39663 {
39664 num7 = Main.tile[i, j].frameX / 36;
39665 num2 = Main.tile[i, j].frameX % 36 / 18 * -1 + i;
39666 num = num7 * 36;
39667 }
39668 for (int k = num2; k < num2 + 2; k++)
39669 {
39670 for (int l = num6; l < num6 + 2; l++)
39671 {
39672 Tile tileSafely = Framing.GetTileSafely(k, l);
39673 if (!tileSafely.active() || tileSafely.type != type || tileSafely.frameX != (k - num2) * 18 + num || tileSafely.frameY != (l - num6) * 18 + num5 * num3)
39674 {
39675 flag = true;
39676 break;
39677 }
39678 }
39679 if (type == 95 || type == 126)
39680 {
39681 Framing.GetTileSafely(k, num6 - 1);
39682 if (!Main.tile[k, num6 - 1].active() || !Main.tileSolid[Main.tile[k, num6 - 1].type] || Main.tileSolidTop[Main.tile[k, num6 - 1].type])
39683 {
39684 flag = true;
39685 }
39686 }
39687 else if (!TileID.Sets.Boulders[type] && type != 132)
39688 {
39689 Tile tileSafely2 = Framing.GetTileSafely(k, num6 + 2);
39690 if (!tileSafely2.active() || (!Main.tileSolid[tileSafely2.type] && !Main.tileTable[tileSafely2.type]))
39691 {
39692 flag = true;
39693 }
39694 if (tileSafely2.halfBrick())
39695 {
39696 flag = true;
39697 }
39698 }
39699 }
39700 if (TileID.Sets.Boulders[type])
39701 {
39702 if (Main.tile[num2, num6 - 1] == null)
39703 {
39704 Main.tile[num2, num6 - 1] = new Tile();
39705 }
39706 if (Main.tile[num2 + 1, num6 - 1] == null)
39707 {
39708 Main.tile[num2 + 1, num6 - 1] = new Tile();
39709 }
39710 ushort type2 = Main.tile[num2, num6 - 1].type;
39711 ushort type3 = Main.tile[num2 + 1, num6 - 1].type;
39712 if (!TileID.Sets.BasicChest[type2] && !TileID.Sets.BasicChest[type3] && type2 != 88 && type3 != 88 && !TileID.Sets.BasicChestFake[type2] && !TileID.Sets.BasicChestFake[type3] && type2 != 470 && type3 != 470 && type2 != 475 && type3 != 475 && !SolidTileAllowBottomSlope(num2, num6 + 2) && !SolidTileAllowBottomSlope(num2 + 1, num6 + 2))
39713 {
39714 flag = true;
39715 }
39716 }
39717 else if (type == 132)
39718 {
39719 flag = false;
39720 num6 = Main.tile[i, j].frameY / 18 * -1;
39721 num6 += j;
39722 num = 0;
39723 num2 = Main.tile[i, j].frameX / 18 * -1;
39724 while (num2 < -1)
39725 {
39726 num2 += 2;
39727 num += 36;
39728 }
39729 num2 += i;
39730 for (int m = num2; m < num2 + 2; m++)
39731 {
39732 for (int n = num6; n < num6 + 2; n++)
39733 {
39734 if (Main.tile[m, n] == null)
39735 {
39736 Main.tile[m, n] = new Tile();
39737 }
39738 if (!Main.tile[m, n].active() || Main.tile[m, n].type != type || Main.tile[m, n].frameX != (m - num2) * 18 + num || Main.tile[m, n].frameY != (n - num6) * 18)
39739 {
39740 flag = true;
39741 }
39742 }
39743 }
39744 if (Main.tile[num2, num6 + 2] == null)
39745 {
39746 Main.tile[num2, num6 + 2] = new Tile();
39747 }
39748 if (Main.tile[num2 + 1, num6 + 2] == null)
39749 {
39750 Main.tile[num2 + 1, num6 + 2] = new Tile();
39751 }
39752 bool flag2 = false;
39753 ushort type4 = Main.tile[num2, num6 + 2].type;
39754 ushort type5 = Main.tile[num2 + 1, num6 + 2].type;
39755 if (!Main.tile[num2, num6 + 2].active() || (!Main.tileSolid[type4] && !Main.tileSolidTop[type4]) || Main.tile[num2, num6 + 2].halfBrick() || (Main.tile[num2, num6 + 2].slope() != 0 && !Main.tile[num2, num6 + 2].bottomSlope()))
39756 {
39757 flag2 = true;
39758 }
39759 if (!Main.tile[num2 + 1, num6 + 2].active() || (!Main.tileSolid[type5] && !Main.tileSolidTop[type5]) || Main.tile[num2 + 1, num6 + 2].halfBrick() || (Main.tile[num2 + 1, num6 + 2].slope() != 0 && !Main.tile[num2 + 1, num6 + 2].bottomSlope()))
39760 {
39761 flag2 = true;
39762 }
39763 if (flag2)
39764 {
39765 if (Main.tile[num2, num6].wall < 1 || Main.tile[num2 + 1, num6].wall < 1 || Main.tile[num2, num6 + 1].wall < 1 || Main.tile[num2 + 1, num6 + 1].wall < 1)
39766 {
39767 flag = true;
39768 }
39769 else if (num < 72)
39770 {
39771 for (int num8 = num2; num8 < num2 + 2; num8++)
39772 {
39773 for (int num9 = num6; num9 < num6 + 2; num9++)
39774 {
39775 Main.tile[num8, num9].frameX += 72;
39776 }
39777 }
39778 }
39779 }
39780 else if (num >= 72)
39781 {
39782 for (int num10 = num2; num10 < num2 + 2; num10++)
39783 {
39784 for (int num11 = num6; num11 < num6 + 2; num11++)
39785 {
39786 Main.tile[num10, num11].frameX -= 72;
39787 }
39788 }
39789 }
39790 }
39791 if (!flag)
39792 {
39793 return;
39794 }
39795 destroyObject = true;
39796 for (int num12 = num2; num12 < num2 + 2; num12++)
39797 {
39798 for (int num13 = num6; num13 < num6 + 2; num13++)
39799 {
39800 if (Main.tile[num12, num13].type == type && Main.tile[num12, num13].active())
39801 {
39803 }
39804 }
39805 }
39806 int num14 = 0;
39807 switch (type)
39808 {
39809 case 521:
39810 num14 = 4327;
39811 break;
39812 case 522:
39813 num14 = 4328;
39814 break;
39815 case 523:
39816 num14 = 4329;
39817 break;
39818 case 524:
39819 num14 = 4330;
39820 break;
39821 case 525:
39822 num14 = 4331;
39823 break;
39824 case 526:
39825 num14 = 4332;
39826 break;
39827 case 527:
39828 num14 = 4333;
39829 break;
39830 case 564:
39831 num14 = 4553;
39832 break;
39833 case 565:
39834 num14 = 4552;
39835 break;
39836 case 594:
39837 num14 = 4869;
39838 break;
39839 case 621:
39840 num14 = 3750;
39841 break;
39842 case 622:
39843 num14 = 5008;
39844 break;
39845 }
39846 if (type == 598)
39847 {
39848 num14 = 4880;
39849 }
39850 if (type == 360)
39851 {
39852 num14 = 3072;
39853 }
39854 if (type == 580)
39855 {
39856 num14 = 4846;
39857 }
39858 if (type == 620)
39859 {
39860 num14 = 4964;
39861 }
39862 if (type == 505)
39863 {
39864 num14 = 4275;
39865 }
39866 if (type == 543)
39867 {
39868 num14 = 4398;
39869 }
39870 if (type == 568)
39871 {
39872 num14 = 4655;
39873 }
39874 if (type == 569)
39875 {
39876 num14 = 4656;
39877 }
39878 if (type == 570)
39879 {
39880 num14 = 4657;
39881 }
39882 if (type >= 288 && type <= 295)
39883 {
39884 num14 = 2178 + type - 288;
39885 }
39886 if (type >= 316 && type <= 318)
39887 {
39888 num14 = 2439 + type - 316;
39889 }
39890 if (type == 85)
39891 {
39892 num14 = 321;
39893 }
39894 if (type == 94)
39895 {
39896 num14 = 352;
39897 }
39898 if (type == 95)
39899 {
39900 num14 = 344;
39901 }
39902 if (type == 96)
39903 {
39904 num14 = 345;
39905 }
39906 if (type == 97)
39907 {
39908 num14 = 346;
39909 }
39910 if (type == 98)
39911 {
39912 num14 = 347;
39913 }
39914 if (type == 99)
39915 {
39916 num14 = 348;
39917 }
39918 if (type == 335)
39919 {
39920 num14 = 2700;
39921 }
39922 if (type == 411)
39923 {
39924 num14 = 3545;
39925 }
39926 if (type == 652)
39927 {
39928 num14 = ((num7 < 3) ? 195 : ((num7 >= 6) ? 331 : 62));
39929 }
39930 if (type == 100)
39931 {
39932 switch (num5)
39933 {
39934 case 0:
39935 num14 = 349;
39936 break;
39937 case 1:
39938 case 2:
39939 case 3:
39940 case 4:
39941 case 5:
39942 case 6:
39943 case 7:
39944 case 8:
39945 case 9:
39946 case 10:
39947 case 11:
39948 case 12:
39949 num14 = 2092 + num5 - 1;
39950 break;
39951 default:
39952 if (num5 >= 13 && num5 <= 16)
39953 {
39954 num14 = 2149 + num5 - 13;
39955 break;
39956 }
39957 switch (num5)
39958 {
39959 case 17:
39960 num14 = 2227;
39961 break;
39962 case 18:
39963 num14 = 2522;
39964 break;
39965 case 19:
39966 num14 = 2541;
39967 break;
39968 case 20:
39969 num14 = 2555;
39970 break;
39971 case 21:
39972 num14 = 2570;
39973 break;
39974 case 22:
39975 num14 = 2664;
39976 break;
39977 case 23:
39978 num14 = 2665;
39979 break;
39980 case 24:
39981 num14 = 2666;
39982 break;
39983 case 25:
39984 num14 = 2667;
39985 break;
39986 case 26:
39987 num14 = 2668;
39988 break;
39989 case 27:
39990 num14 = 2825;
39991 break;
39992 case 28:
39993 num14 = 3168;
39994 break;
39995 case 29:
39996 num14 = 3170;
39997 break;
39998 case 30:
39999 num14 = 3169;
40000 break;
40001 case 31:
40002 num14 = 3893;
40003 break;
40004 case 32:
40005 num14 = 3935;
40006 break;
40007 case 33:
40008 num14 = 3961;
40009 break;
40010 case 34:
40011 num14 = 4149;
40012 break;
40013 case 35:
40014 num14 = 4170;
40015 break;
40016 case 36:
40017 num14 = 4191;
40018 break;
40019 case 37:
40020 num14 = 4212;
40021 break;
40022 case 38:
40023 num14 = 4302;
40024 break;
40025 case 39:
40026 num14 = 4570;
40027 break;
40028 case 40:
40029 num14 = 5152;
40030 break;
40031 case 41:
40032 num14 = 5173;
40033 break;
40034 case 42:
40035 num14 = 5194;
40036 break;
40037 }
40038 break;
40039 }
40040 }
40041 if (type == 173)
40042 {
40043 num14 = 714;
40044 }
40045 if (type == 125)
40046 {
40047 num14 = 487;
40048 }
40049 if (type == 287)
40050 {
40051 num14 = 2177;
40052 }
40053 if (type == 126)
40054 {
40055 num14 = 488;
40056 }
40057 if (type == 132)
40058 {
40059 num14 = 513;
40060 }
40061 if (type == 142)
40062 {
40063 num14 = 581;
40064 }
40065 if (type == 143)
40066 {
40067 num14 = 582;
40068 }
40069 if (type == 282)
40070 {
40071 num14 = 250;
40072 }
40073 if (type == 319)
40074 {
40075 num14 = 2490;
40076 }
40077 if (type == 490)
40078 {
40079 num14 = 4075;
40080 }
40081 if (type == 172)
40082 {
40083 num14 = 2827 + num5;
40084 switch (num5)
40085 {
40086 case 29:
40087 num14 = 3147;
40088 break;
40089 case 30:
40090 num14 = 3149;
40091 break;
40092 case 31:
40093 num14 = 3148;
40094 break;
40095 case 32:
40096 num14 = 3896;
40097 break;
40098 case 33:
40099 num14 = 3946;
40100 break;
40101 case 34:
40102 num14 = 3972;
40103 break;
40104 case 35:
40105 num14 = 4160;
40106 break;
40107 case 36:
40108 num14 = 4181;
40109 break;
40110 case 37:
40111 num14 = 4202;
40112 break;
40113 case 38:
40114 num14 = 4223;
40115 break;
40116 case 39:
40117 num14 = 4312;
40118 break;
40119 case 40:
40120 num14 = 4581;
40121 break;
40122 case 41:
40123 num14 = 5163;
40124 break;
40125 case 42:
40126 num14 = 5184;
40127 break;
40128 case 43:
40129 num14 = 5205;
40130 break;
40131 }
40132 }
40133 if (num14 != 0)
40134 {
40135 Item.NewItem(GetItemSource_FromTileBreak(i, j), i * 16, j * 16, 32, 32, num14);
40136 }
40137 if (!gen && Main.netMode != 1)
40138 {
40139 switch (type)
40140 {
40141 case 138:
40142 Projectile.NewProjectile(GetProjectileSource_TileBreak(num2, num6), (float)(num2 * 16) + 15.5f, num6 * 16 + 16, 0f, 0f, 99, 70, 10f, Main.myPlayer);
40143 break;
40144 case 484:
40145 Projectile.NewProjectile(GetProjectileSource_TileBreak(num2, num6), (float)(num2 * 16) + 15.5f, num6 * 16 + 16, 0f, 0f, 727, 35, 10f, Main.myPlayer);
40146 break;
40147 case 654:
40148 Projectile.NewProjectile(GetProjectileSource_TileBreak(num2, num6), num2 * 16 + 8, num6 * 16 + 8, 0f, 0f, 1002, 400, 10f, Main.myPlayer);
40149 break;
40150 case 664:
40151 Projectile.NewProjectile(GetProjectileSource_TileBreak(num2, num6), (float)(num2 * 16) + 15.5f, num6 * 16 + 16, 0f, 0f, 1013, 70, 10f, Main.myPlayer);
40152 break;
40153 case 665:
40154 Projectile.NewProjectile(GetProjectileSource_TileBreak(num2, num6), (float)(num2 * 16) + 15.5f, num6 * 16 + 16, 0f, 0f, 1014, 70, 10f, Main.myPlayer);
40155 break;
40156 }
40157 }
40158 destroyObject = false;
40159 for (int num15 = num2 - 1; num15 < num2 + 3; num15++)
40160 {
40161 for (int num16 = num6 - 1; num16 < num6 + 3; num16++)
40162 {
40164 }
40165 }
40166 }
static bool[] Boulders
Definition TileID.cs:123
static bool[] BasicChest
Definition TileID.cs:223
static bool[] BasicChestFake
Definition TileID.cs:225
static bool destroyObject
Definition WorldGen.cs:1020
static volatile bool gen
Definition WorldGen.cs:972
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 EntitySource_TileBreak GetProjectileSource_TileBreak(int x, int y)
Definition WorldGen.cs:1308
static bool SolidTileAllowBottomSlope(int i, int j)
static IEntitySource GetItemSource_FromTileBreak(int x, int y)

References Terraria.ID.TileID.Sets.BasicChest, Terraria.ID.TileID.Sets.BasicChestFake, Terraria.ID.TileID.Sets.Boulders, Terraria.Framing.GetTileSafely(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Item.NewItem(), Terraria.Projectile.NewProjectile(), Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Main.tileTable, and System.type.