935 {
937 {
938 return false;
939 }
940 Tile tile = Main.tile[
i, j];
941 if (tile == null)
942 {
944 Main.tile[
i, j] = tile;
945 }
946 if (mute && tile.type != 314)
947 {
948 return false;
949 }
951 int num = tile.FrontTrack();
952 int num2 = tile.BackTrack();
954 int num4 = -1;
955 int num5 = -1;
958 {
959 if (pound)
960 {
961 return false;
962 }
963 tile.FrontTrack(0);
964 tile.BackTrack(-1);
965 return false;
966 }
967 if (!pound)
968 {
969 int num6 = -1;
970 int num7 = -1;
971 bool flag = false;
972 for (
int k = 0; k <
array.Length; k++)
973 {
975 if (num2 ==
array[k])
976 {
977 num5 = k;
978 }
980 {
981 continue;
982 }
984 {
986 {
987 num4 = k;
988 flag = true;
989 }
990 if (num6 == -1)
991 {
992 num6 = k;
993 }
994 }
995 else
996 {
998 {
999 num4 = k;
1000 flag = false;
1001 }
1002 if (num7 == -1)
1003 {
1004 num7 = k;
1005 }
1006 }
1007 }
1008 if (num7 != -1)
1009 {
1010 if (num4 == -1 || flag)
1011 {
1012 num4 = num7;
1013 }
1014 }
1015 else
1016 {
1017 if (num4 == -1)
1018 {
1019 switch (num3)
1020 {
1021 case 2:
1022 return false;
1023 case 1:
1024 return false;
1025 }
1026 num4 = num6;
1027 }
1028 num5 = -1;
1029 }
1030 }
1031 else
1032 {
1033 for (
int l = 0; l <
array.Length; l++)
1034 {
1035 if (num ==
array[l])
1036 {
1037 num4 = l;
1038 }
1039 if (num2 ==
array[l])
1040 {
1041 num5 = l;
1042 }
1043 }
1044 int num9 = 0;
1045 int num10 = 0;
1046 for (
int m = 0; m <
array.Length; m++)
1047 {
1049 {
1051 {
1052 num10++;
1053 }
1054 else
1055 {
1056 num9++;
1057 }
1058 }
1059 }
1060 if (num9 < 2 && num10 < 2)
1061 {
1062 return false;
1063 }
1064 bool flag2 = num9 == 0;
1065 bool flag3 = false;
1066 if (!flag2)
1067 {
1068 while (!flag3)
1069 {
1070 num5++;
1071 if (num5 >=
array.Length)
1072 {
1073 num5 = -1;
1074 break;
1075 }
1077 {
1078 flag3 = true;
1079 }
1080 }
1081 }
1082 if (!flag3)
1083 {
1084 do
1085 {
1086 num4++;
1087 if (num4 >=
array.Length)
1088 {
1089 num4 = -1;
1090 do
1091 {
1092 num4++;
1093 }
1095 break;
1096 }
1097 }
1099 }
1100 }
1101 bool flag4 = false;
1102 switch (num4)
1103 {
1104 case -2:
1106 {
1107 flag4 = true;
1108 }
1109 break;
1110 case -1:
1111 if (tile.FrontTrack() != 0)
1112 {
1113 flag4 = true;
1114 }
1115 break;
1116 default:
1117 if (tile.FrontTrack() !=
array[num4])
1118 {
1119 flag4 = true;
1120 }
1121 break;
1122 }
1123 if (num5 == -1)
1124 {
1125 if (tile.BackTrack() != -1)
1126 {
1127 flag4 = true;
1128 }
1129 }
1130 else if (tile.BackTrack() !=
array[num5])
1131 {
1132 flag4 = true;
1133 }
1134 switch (num4)
1135 {
1136 case -2:
1138 break;
1139 case -1:
1140 tile.FrontTrack(0);
1141 break;
1142 default:
1143 tile.FrontTrack((
short)
array[num4]);
1144 break;
1145 }
1146 if (num5 == -1)
1147 {
1148 tile.BackTrack(-1);
1149 }
1150 else
1151 {
1152 tile.BackTrack((
short)
array[num5]);
1153 }
1154 if (pound && flag4 && !mute)
1155 {
1156 WorldGen.KillTile(i, j, fail: true);
1157 }
1158 return true;
1159 }
static int[] _leftSideConnection
static int[][] _trackSwitchOptions
static short _firstPressureFrame
static int[] _rightSideConnection
static int GetNearbyTilesSetLookupIndex(int i, int j)