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

◆ DungeonEnt()

static void Terraria.WorldGen.DungeonEnt ( int i,
int j,
ushort tileType,
int wallType )
inlinestatic

Definition at line 31725 of file WorldGen.cs.

31726 {
31727 int num = 60;
31728 for (int k = i - num; k < i + num; k++)
31729 {
31730 for (int l = j - num; l < j + num; l++)
31731 {
31732 if (InWorld(k, l))
31733 {
31734 Main.tile[k, l].liquid = 0;
31735 Main.tile[k, l].lava(lava: false);
31736 Main.tile[k, l].Clear(TileDataType.Slope);
31737 }
31738 }
31739 }
31742 Vector2D vector2D = default(Vector2D);
31743 vector2D.X = i;
31744 vector2D.Y = (double)j - dyStrength / 2.0;
31745 GenVars.dMinY = (int)vector2D.Y;
31746 int num12 = 1;
31747 if (i > Main.maxTilesX / 2)
31748 {
31749 num12 = -1;
31750 }
31752 {
31753 num12 *= -1;
31754 }
31755 int num23 = (int)(vector2D.X - dxStrength * 0.6 - (double)genRand.Next(2, 5));
31756 int num34 = (int)(vector2D.X + dxStrength * 0.6 + (double)genRand.Next(2, 5));
31757 int num45 = (int)(vector2D.Y - dyStrength * 0.6 - (double)genRand.Next(2, 5));
31758 int num56 = (int)(vector2D.Y + dyStrength * 0.6 + (double)genRand.Next(8, 16));
31759 if (num23 < 0)
31760 {
31761 num23 = 0;
31762 }
31763 if (num34 > Main.maxTilesX)
31764 {
31765 num34 = Main.maxTilesX;
31766 }
31767 if (num45 < 0)
31768 {
31769 num45 = 0;
31770 }
31771 if (num56 > Main.maxTilesY)
31772 {
31773 num56 = Main.maxTilesY;
31774 }
31775 for (int m = num23; m < num34; m++)
31776 {
31777 for (int n = num45; n < num56; n++)
31778 {
31779 Main.tile[m, n].liquid = 0;
31780 if (Main.tile[m, n].wall != wallType)
31781 {
31782 Main.tile[m, n].wall = 0;
31783 if (m > num23 + 1 && m < num34 - 2 && n > num45 + 1 && n < num56 - 2)
31784 {
31785 Main.tile[m, n].wall = (ushort)wallType;
31786 }
31787 Main.tile[m, n].active(active: true);
31788 Main.tile[m, n].type = tileType;
31789 Main.tile[m, n].Clear(TileDataType.Slope);
31790 }
31791 }
31792 }
31793 int num57 = num23;
31794 int num58 = num23 + 5 + genRand.Next(4);
31795 int num59 = num45 - 3 - genRand.Next(3);
31796 int num2 = num45;
31797 for (int num3 = num57; num3 < num58; num3++)
31798 {
31799 for (int num4 = num59; num4 < num2; num4++)
31800 {
31801 Main.tile[num3, num4].liquid = 0;
31802 if (Main.tile[num3, num4].wall != wallType)
31803 {
31804 Main.tile[num3, num4].active(active: true);
31805 Main.tile[num3, num4].type = tileType;
31806 Main.tile[num3, num4].Clear(TileDataType.Slope);
31807 }
31808 }
31809 }
31810 num57 = num34 - 5 - genRand.Next(4);
31811 num58 = num34;
31812 num59 = num45 - 3 - genRand.Next(3);
31813 num2 = num45;
31814 for (int num5 = num57; num5 < num58; num5++)
31815 {
31816 for (int num6 = num59; num6 < num2; num6++)
31817 {
31818 Main.tile[num5, num6].liquid = 0;
31819 if (Main.tile[num5, num6].wall != wallType)
31820 {
31821 Main.tile[num5, num6].active(active: true);
31822 Main.tile[num5, num6].type = tileType;
31823 Main.tile[num5, num6].Clear(TileDataType.Slope);
31824 }
31825 }
31826 }
31827 int num7 = 1 + genRand.Next(2);
31828 int num8 = 2 + genRand.Next(4);
31829 int num9 = 0;
31830 for (int num10 = num23; num10 < num34; num10++)
31831 {
31832 for (int num11 = num45 - num7; num11 < num45; num11++)
31833 {
31834 Main.tile[num10, num11].liquid = 0;
31835 if (Main.tile[num10, num11].wall != wallType)
31836 {
31837 Main.tile[num10, num11].active(active: true);
31838 Main.tile[num10, num11].type = tileType;
31839 Main.tile[num10, num11].Clear(TileDataType.Slope);
31840 }
31841 }
31842 num9++;
31843 if (num9 >= num8)
31844 {
31845 num10 += num8;
31846 num9 = 0;
31847 }
31848 }
31849 for (int num13 = num23; num13 < num34; num13++)
31850 {
31851 for (int num14 = num56; (double)num14 < Main.worldSurface; num14++)
31852 {
31853 Main.tile[num13, num14].liquid = 0;
31854 if (!Main.wallDungeon[Main.tile[num13, num14].wall])
31855 {
31856 Main.tile[num13, num14].active(active: true);
31857 Main.tile[num13, num14].type = tileType;
31858 }
31859 if (num13 > num23 && num13 < num34 - 1)
31860 {
31861 Main.tile[num13, num14].wall = (ushort)wallType;
31862 }
31863 Main.tile[num13, num14].Clear(TileDataType.Slope);
31864 }
31865 }
31866 num23 = (int)(vector2D.X - dxStrength * 0.6);
31867 num34 = (int)(vector2D.X + dxStrength * 0.6);
31868 num45 = (int)(vector2D.Y - dyStrength * 0.6);
31869 num56 = (int)(vector2D.Y + dyStrength * 0.6);
31870 if (num23 < 0)
31871 {
31872 num23 = 0;
31873 }
31874 if (num34 > Main.maxTilesX)
31875 {
31876 num34 = Main.maxTilesX;
31877 }
31878 if (num45 < 0)
31879 {
31880 num45 = 0;
31881 }
31882 if (num56 > Main.maxTilesY)
31883 {
31884 num56 = Main.maxTilesY;
31885 }
31886 for (int num15 = num23; num15 < num34; num15++)
31887 {
31888 for (int num16 = num45; num16 < num56; num16++)
31889 {
31890 Main.tile[num15, num16].liquid = 0;
31891 Main.tile[num15, num16].wall = (ushort)wallType;
31892 Main.tile[num15, num16].Clear(TileDataType.Slope);
31893 }
31894 }
31895 num23 = (int)(vector2D.X - dxStrength * 0.6 - 1.0);
31896 num34 = (int)(vector2D.X + dxStrength * 0.6 + 1.0);
31897 num45 = (int)(vector2D.Y - dyStrength * 0.6 - 1.0);
31898 num56 = (int)(vector2D.Y + dyStrength * 0.6 + 1.0);
31899 if (num23 < 0)
31900 {
31901 num23 = 0;
31902 }
31903 if (num34 > Main.maxTilesX)
31904 {
31905 num34 = Main.maxTilesX;
31906 }
31907 if (num45 < 0)
31908 {
31909 num45 = 0;
31910 }
31911 if (num56 > Main.maxTilesY)
31912 {
31913 num56 = Main.maxTilesY;
31914 }
31915 if (drunkWorldGen)
31916 {
31917 num23 -= 4;
31918 }
31919 for (int num17 = num23; num17 < num34; num17++)
31920 {
31921 for (int num18 = num45; num18 < num56; num18++)
31922 {
31923 Main.tile[num17, num18].liquid = 0;
31924 Main.tile[num17, num18].wall = (ushort)wallType;
31925 Main.tile[num17, num18].Clear(TileDataType.Slope);
31926 }
31927 }
31928 num23 = (int)(vector2D.X - dxStrength * 0.5);
31929 num34 = (int)(vector2D.X + dxStrength * 0.5);
31930 num45 = (int)(vector2D.Y - dyStrength * 0.5);
31931 num56 = (int)(vector2D.Y + dyStrength * 0.5);
31932 if (num23 < 0)
31933 {
31934 num23 = 0;
31935 }
31936 if (num34 > Main.maxTilesX)
31937 {
31938 num34 = Main.maxTilesX;
31939 }
31940 if (num45 < 0)
31941 {
31942 num45 = 0;
31943 }
31944 if (num56 > Main.maxTilesY)
31945 {
31946 num56 = Main.maxTilesY;
31947 }
31948 for (int num19 = num23; num19 < num34; num19++)
31949 {
31950 for (int num20 = num45; num20 < num56; num20++)
31951 {
31952 Main.tile[num19, num20].liquid = 0;
31953 Main.tile[num19, num20].active(active: false);
31954 Main.tile[num19, num20].wall = (ushort)wallType;
31955 }
31956 }
31957 int num21 = (int)vector2D.X;
31958 int num22 = num56;
31959 for (int num24 = 0; num24 < 20; num24++)
31960 {
31961 num21 = (int)vector2D.X - num24;
31962 if (!Main.tile[num21, num22].active() && Main.wallDungeon[Main.tile[num21, num22].wall])
31963 {
31967 break;
31968 }
31969 num21 = (int)vector2D.X + num24;
31970 if (!Main.tile[num21, num22].active() && Main.wallDungeon[Main.tile[num21, num22].wall])
31971 {
31975 break;
31976 }
31977 }
31978 vector2D.X += dxStrength * 0.6 * (double)num12;
31979 vector2D.Y += dyStrength * 0.5;
31982 vector2D.X += dxStrength * 0.55 * (double)num12;
31983 vector2D.Y -= dyStrength * 0.5;
31984 num23 = (int)(vector2D.X - dxStrength * 0.6 - (double)genRand.Next(1, 3));
31985 num34 = (int)(vector2D.X + dxStrength * 0.6 + (double)genRand.Next(1, 3));
31986 num45 = (int)(vector2D.Y - dyStrength * 0.6 - (double)genRand.Next(1, 3));
31987 num56 = (int)(vector2D.Y + dyStrength * 0.6 + (double)genRand.Next(6, 16));
31988 if (num23 < 0)
31989 {
31990 num23 = 0;
31991 }
31992 if (num34 > Main.maxTilesX)
31993 {
31994 num34 = Main.maxTilesX;
31995 }
31996 if (num45 < 0)
31997 {
31998 num45 = 0;
31999 }
32000 if (num56 > Main.maxTilesY)
32001 {
32002 num56 = Main.maxTilesY;
32003 }
32004 for (int num25 = num23; num25 < num34; num25++)
32005 {
32006 for (int num26 = num45; num26 < num56; num26++)
32007 {
32008 Main.tile[num25, num26].liquid = 0;
32009 if (Main.tile[num25, num26].wall == wallType)
32010 {
32011 continue;
32012 }
32013 bool flag = true;
32014 if (num12 < 0)
32015 {
32016 if ((double)num25 < vector2D.X - dxStrength * 0.5)
32017 {
32018 flag = false;
32019 }
32020 }
32021 else if ((double)num25 > vector2D.X + dxStrength * 0.5 - 1.0)
32022 {
32023 flag = false;
32024 }
32025 if (flag)
32026 {
32027 Main.tile[num25, num26].wall = 0;
32028 Main.tile[num25, num26].active(active: true);
32029 Main.tile[num25, num26].type = tileType;
32030 Main.tile[num25, num26].Clear(TileDataType.Slope);
32031 }
32032 }
32033 }
32034 for (int num27 = num23; num27 < num34; num27++)
32035 {
32036 for (int num28 = num56; (double)num28 < Main.worldSurface; num28++)
32037 {
32038 Main.tile[num27, num28].liquid = 0;
32039 if (!Main.wallDungeon[Main.tile[num27, num28].wall])
32040 {
32041 Main.tile[num27, num28].active(active: true);
32042 Main.tile[num27, num28].type = tileType;
32043 }
32044 Main.tile[num27, num28].wall = (ushort)wallType;
32045 Main.tile[num27, num28].Clear(TileDataType.Slope);
32046 }
32047 }
32048 num23 = (int)(vector2D.X - dxStrength * 0.5);
32049 num34 = (int)(vector2D.X + dxStrength * 0.5);
32050 num57 = num23;
32051 if (num12 < 0)
32052 {
32053 num57++;
32054 }
32055 num58 = num57 + 5 + genRand.Next(4);
32056 num59 = num45 - 3 - genRand.Next(3);
32057 num2 = num45;
32058 for (int num29 = num57; num29 < num58; num29++)
32059 {
32060 for (int num30 = num59; num30 < num2; num30++)
32061 {
32062 Main.tile[num29, num30].liquid = 0;
32063 if (Main.tile[num29, num30].wall != wallType)
32064 {
32065 Main.tile[num29, num30].active(active: true);
32066 Main.tile[num29, num30].type = tileType;
32067 Main.tile[num29, num30].Clear(TileDataType.Slope);
32068 }
32069 }
32070 }
32071 num57 = num34 - 5 - genRand.Next(4);
32072 num58 = num34;
32073 num59 = num45 - 3 - genRand.Next(3);
32074 num2 = num45;
32075 for (int num31 = num57; num31 < num58; num31++)
32076 {
32077 for (int num32 = num59; num32 < num2; num32++)
32078 {
32079 Main.tile[num31, num32].liquid = 0;
32080 if (Main.tile[num31, num32].wall != wallType)
32081 {
32082 Main.tile[num31, num32].active(active: true);
32083 Main.tile[num31, num32].type = tileType;
32084 Main.tile[num31, num32].Clear(TileDataType.Slope);
32085 }
32086 }
32087 }
32088 num7 = 1 + genRand.Next(2);
32089 num8 = 2 + genRand.Next(4);
32090 num9 = 0;
32091 if (num12 < 0)
32092 {
32093 num34++;
32094 }
32095 for (int num33 = num23 + 1; num33 < num34 - 1; num33++)
32096 {
32097 for (int num35 = num45 - num7; num35 < num45; num35++)
32098 {
32099 Main.tile[num33, num35].liquid = 0;
32100 if (Main.tile[num33, num35].wall != wallType)
32101 {
32102 Main.tile[num33, num35].active(active: true);
32103 Main.tile[num33, num35].type = tileType;
32104 Main.tile[num33, num35].Clear(TileDataType.Slope);
32105 }
32106 }
32107 num9++;
32108 if (num9 >= num8)
32109 {
32110 num33 += num8;
32111 num9 = 0;
32112 }
32113 }
32114 if (!drunkWorldGen)
32115 {
32116 num23 = (int)(vector2D.X - dxStrength * 0.6);
32117 num34 = (int)(vector2D.X + dxStrength * 0.6);
32118 num45 = (int)(vector2D.Y - dyStrength * 0.6);
32119 num56 = (int)(vector2D.Y + dyStrength * 0.6);
32120 if (num23 < 0)
32121 {
32122 num23 = 0;
32123 }
32124 if (num34 > Main.maxTilesX)
32125 {
32126 num34 = Main.maxTilesX;
32127 }
32128 if (num45 < 0)
32129 {
32130 num45 = 0;
32131 }
32132 if (num56 > Main.maxTilesY)
32133 {
32134 num56 = Main.maxTilesY;
32135 }
32136 for (int num36 = num23; num36 < num34; num36++)
32137 {
32138 for (int num37 = num45; num37 < num56; num37++)
32139 {
32140 Main.tile[num36, num37].liquid = 0;
32141 Main.tile[num36, num37].wall = 0;
32142 }
32143 }
32144 }
32145 num23 = (int)(vector2D.X - dxStrength * 0.5);
32146 num34 = (int)(vector2D.X + dxStrength * 0.5);
32147 num45 = (int)(vector2D.Y - dyStrength * 0.5);
32148 num56 = (int)(vector2D.Y + dyStrength * 0.5);
32149 if (num23 < 0)
32150 {
32151 num23 = 0;
32152 }
32153 if (num34 > Main.maxTilesX)
32154 {
32155 num34 = Main.maxTilesX;
32156 }
32157 if (num45 < 0)
32158 {
32159 num45 = 0;
32160 }
32161 if (num56 > Main.maxTilesY)
32162 {
32163 num56 = Main.maxTilesY;
32164 }
32165 for (int num38 = num23; num38 < num34; num38++)
32166 {
32167 for (int num39 = num45; num39 < num56; num39++)
32168 {
32169 Main.tile[num38, num39].liquid = 0;
32170 Main.tile[num38, num39].active(active: false);
32171 Main.tile[num38, num39].wall = 0;
32172 }
32173 }
32174 Main.dungeonX = (int)vector2D.X;
32175 Main.dungeonY = num56;
32176 int num40 = NPC.NewNPC(new EntitySource_WorldGen(), Main.dungeonX * 16 + 8, Main.dungeonY * 16, 37);
32177 Main.npc[num40].homeless = false;
32178 Main.npc[num40].homeTileX = Main.dungeonX;
32179 Main.npc[num40].homeTileY = Main.dungeonY;
32180 if (drunkWorldGen)
32181 {
32182 int num41 = (int)Main.worldSurface;
32183 while (Main.tile[GenVars.dungeonX, num41].active() || Main.tile[GenVars.dungeonX, num41].wall > 0 || Main.tile[GenVars.dungeonX, num41 - 1].active() || Main.tile[GenVars.dungeonX, num41 - 1].wall > 0 || Main.tile[GenVars.dungeonX, num41 - 2].active() || Main.tile[GenVars.dungeonX, num41 - 2].wall > 0 || Main.tile[GenVars.dungeonX, num41 - 3].active() || Main.tile[GenVars.dungeonX, num41 - 3].wall > 0 || Main.tile[GenVars.dungeonX, num41 - 4].active() || Main.tile[GenVars.dungeonX, num41 - 4].wall > 0)
32184 {
32185 num41--;
32186 if (num41 < 50)
32187 {
32188 break;
32189 }
32190 }
32191 if (num41 > 50)
32192 {
32194 }
32195 }
32196 if (!drunkWorldGen)
32197 {
32198 int num42 = 100;
32199 if (num12 == 1)
32200 {
32201 int num43 = 0;
32202 for (int num44 = num34; num44 < num34 + num42; num44++)
32203 {
32204 num43++;
32205 for (int num46 = num56 + num43; num46 < num56 + num42; num46++)
32206 {
32207 Main.tile[num44, num46].liquid = 0;
32208 Main.tile[num44, num46 - 1].liquid = 0;
32209 Main.tile[num44, num46 - 2].liquid = 0;
32210 Main.tile[num44, num46 - 3].liquid = 0;
32211 if (!Main.wallDungeon[Main.tile[num44, num46].wall] && Main.tile[num44, num46].wall != 3 && Main.tile[num44, num46].wall != 83)
32212 {
32213 Main.tile[num44, num46].active(active: true);
32214 Main.tile[num44, num46].type = tileType;
32215 Main.tile[num44, num46].Clear(TileDataType.Slope);
32216 }
32217 }
32218 }
32219 }
32220 else
32221 {
32222 int num47 = 0;
32223 for (int num48 = num23; num48 > num23 - num42; num48--)
32224 {
32225 num47++;
32226 for (int num49 = num56 + num47; num49 < num56 + num42; num49++)
32227 {
32228 Main.tile[num48, num49].liquid = 0;
32229 Main.tile[num48, num49 - 1].liquid = 0;
32230 Main.tile[num48, num49 - 2].liquid = 0;
32231 Main.tile[num48, num49 - 3].liquid = 0;
32232 if (!Main.wallDungeon[Main.tile[num48, num49].wall] && Main.tile[num48, num49].wall != 3 && Main.tile[num48, num49].wall != 83)
32233 {
32234 Main.tile[num48, num49].active(active: true);
32235 Main.tile[num48, num49].type = tileType;
32236 Main.tile[num48, num49].Clear(TileDataType.Slope);
32237 }
32238 }
32239 }
32240 }
32241 }
32242 num7 = 1 + genRand.Next(2);
32243 num8 = 2 + genRand.Next(4);
32244 num9 = 0;
32245 num23 = (int)(vector2D.X - dxStrength * 0.5);
32246 num34 = (int)(vector2D.X + dxStrength * 0.5);
32247 if (drunkWorldGen)
32248 {
32249 if (num12 == 1)
32250 {
32251 num34--;
32252 num23--;
32253 }
32254 else
32255 {
32256 num23++;
32257 num34++;
32258 }
32259 }
32260 else
32261 {
32262 num23 += 2;
32263 num34 -= 2;
32264 }
32265 for (int num50 = num23; num50 < num34; num50++)
32266 {
32267 for (int num51 = num45; num51 < num56 + 1; num51++)
32268 {
32270 }
32271 if (!drunkWorldGen)
32272 {
32273 num9++;
32274 if (num9 >= num8)
32275 {
32276 num50 += num8 * 2;
32277 num9 = 0;
32278 }
32279 }
32280 }
32281 if (drunkWorldGen)
32282 {
32283 num23 = (int)(vector2D.X - dxStrength * 0.5);
32284 num34 = (int)(vector2D.X + dxStrength * 0.5);
32285 if (num12 == 1)
32286 {
32287 num23 = num34 - 3;
32288 }
32289 else
32290 {
32291 num34 = num23 + 3;
32292 }
32293 for (int num52 = num23; num52 < num34; num52++)
32294 {
32295 for (int num53 = num45; num53 < num56 + 1; num53++)
32296 {
32297 Main.tile[num52, num53].active(active: true);
32298 Main.tile[num52, num53].type = tileType;
32299 Main.tile[num52, num53].Clear(TileDataType.Slope);
32300 }
32301 }
32302 }
32303 vector2D.X -= dxStrength * 0.6 * (double)num12;
32304 vector2D.Y += dyStrength * 0.5;
32305 dxStrength = 15.0;
32306 dyStrength = 3.0;
32307 vector2D.Y -= dyStrength * 0.5;
32308 num23 = (int)(vector2D.X - dxStrength * 0.5);
32309 num34 = (int)(vector2D.X + dxStrength * 0.5);
32310 num45 = (int)(vector2D.Y - dyStrength * 0.5);
32311 num56 = (int)(vector2D.Y + dyStrength * 0.5);
32312 if (num23 < 0)
32313 {
32314 num23 = 0;
32315 }
32316 if (num34 > Main.maxTilesX)
32317 {
32318 num34 = Main.maxTilesX;
32319 }
32320 if (num45 < 0)
32321 {
32322 num45 = 0;
32323 }
32324 if (num56 > Main.maxTilesY)
32325 {
32326 num56 = Main.maxTilesY;
32327 }
32328 for (int num54 = num23; num54 < num34; num54++)
32329 {
32330 for (int num55 = num45; num55 < num56; num55++)
32331 {
32332 Main.tile[num54, num55].active(active: false);
32333 }
32334 }
32335 if (num12 < 0)
32336 {
32337 vector2D.X -= 1.0;
32338 }
32339 PlaceTile((int)vector2D.X, (int)vector2D.Y + 1, 10, mute: true, forced: false, -1, 13);
32340 }
Used when spawning Town NPCs during world generation.
static bool PlaceTile(int i, int j, int Type, bool mute=false, bool forced=false, int plr=-1, int style=0)
static UnifiedRandom genRand
Definition WorldGen.cs:1455
static bool GrowDungeonTree(int i, int j, bool patch=false)
static void PlaceWall(int i, int j, int type, bool mute=false)
static bool drunkWorldGen
Definition WorldGen.cs:1392
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:6481
static bool getGoodWorldGen
Definition WorldGen.cs:1394

References Terraria.WorldBuilding.GenVars.dungeonPlatformX, Terraria.WorldBuilding.GenVars.dungeonPlatformY, Terraria.WorldBuilding.GenVars.dungeonX, Terraria.Main.dungeonX, Terraria.Main.dungeonY, Terraria.WorldBuilding.GenVars.dxStrength1, Terraria.WorldBuilding.GenVars.dxStrength2, Terraria.WorldBuilding.GenVars.dyStrength1, Terraria.WorldBuilding.GenVars.dyStrength2, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.NPC.NewNPC(), Terraria.Main.npc, Terraria.WorldBuilding.GenVars.numDungeonPlatforms, Terraria.Main.tile, Terraria.Main.wallDungeon, and Terraria.Main.worldSurface.

+ Here is the call graph for this function: