Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ AddHellHouses()

static void Terraria.WorldGen.AddHellHouses ( )
inlinestatic

Definition at line 23800 of file WorldGen.cs.

23801 {
23802 int num = (int)((double)Main.maxTilesX * 0.25);
23803 for (int i = 100; i < Main.maxTilesX - 100; i++)
23804 {
23805 if (((drunkWorldGen || remixWorldGen) && i > num && i < Main.maxTilesX - num) || (!drunkWorldGen && !remixWorldGen && (i < num || i > Main.maxTilesX - num)))
23806 {
23807 continue;
23808 }
23809 int num2 = Main.maxTilesY - 40;
23810 while (Main.tile[i, num2].active() || Main.tile[i, num2].liquid > 0)
23811 {
23812 num2--;
23813 }
23814 if (Main.tile[i, num2 + 1].active())
23815 {
23816 ushort num3 = (ushort)genRand.Next(75, 77);
23817 byte wallType = 13;
23818 if (genRand.Next(5) > 0)
23819 {
23820 num3 = 75;
23821 }
23822 if (num3 == 75)
23823 {
23824 wallType = 14;
23825 }
23826 if (getGoodWorldGen)
23827 {
23828 num3 = 76;
23829 }
23830 HellFort(i, num2, num3, wallType);
23831 i += genRand.Next(30, 130);
23832 if (genRand.Next(10) == 0)
23833 {
23834 i += genRand.Next(0, 200);
23835 }
23836 }
23837 }
23838 float num4 = Main.maxTilesX / 4200;
23839 for (int j = 0; (float)j < 200f * num4; j++)
23840 {
23841 int num5 = 0;
23842 bool flag = false;
23843 while (!flag)
23844 {
23845 num5++;
23846 int num6 = genRand.Next((int)((double)Main.maxTilesX * 0.2), (int)((double)Main.maxTilesX * 0.8));
23847 int num7 = genRand.Next(Main.maxTilesY - 300, Main.maxTilesY - 20);
23848 if (Main.tile[num6, num7].active() && (Main.tile[num6, num7].type == 75 || Main.tile[num6, num7].type == 76))
23849 {
23850 int num8 = 0;
23851 if (Main.tile[num6 - 1, num7].wall > 0)
23852 {
23853 num8 = -1;
23854 }
23855 else if (Main.tile[num6 + 1, num7].wall > 0)
23856 {
23857 num8 = 1;
23858 }
23859 if (!Main.tile[num6 + num8, num7].active() && !Main.tile[num6 + num8, num7 + 1].active())
23860 {
23861 bool flag2 = false;
23862 for (int k = num6 - 8; k < num6 + 8; k++)
23863 {
23864 for (int l = num7 - 8; l < num7 + 8; l++)
23865 {
23866 if (Main.tile[k, l].active() && Main.tile[k, l].type == 4)
23867 {
23868 flag2 = true;
23869 break;
23870 }
23871 }
23872 }
23873 if (!flag2)
23874 {
23875 PlaceTile(num6 + num8, num7, 4, mute: true, forced: true, -1, 7);
23876 flag = true;
23877 }
23878 }
23879 }
23880 if (num5 > 1000)
23881 {
23882 flag = true;
23883 }
23884 }
23885 }
23886 double num9 = 4200000.0 / (double)Main.maxTilesX;
23887 for (int m = 0; (double)m < num9; m++)
23888 {
23889 int num10 = 0;
23890 int num11 = genRand.Next(num, Main.maxTilesX - num);
23891 int n = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
23892 while ((Main.tile[num11, n].wall != 13 && Main.tile[num11, n].wall != 14) || Main.tile[num11, n].active())
23893 {
23894 num11 = genRand.Next(num, Main.maxTilesX - num);
23895 n = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
23897 {
23898 num11 = ((genRand.Next(2) != 0) ? genRand.Next(Main.maxTilesX - num, Main.maxTilesX - 50) : genRand.Next(50, num));
23899 }
23900 num10++;
23901 if (num10 > 100000)
23902 {
23903 break;
23904 }
23905 }
23906 if (num10 > 100000 || (Main.tile[num11, n].wall != 13 && Main.tile[num11, n].wall != 14) || Main.tile[num11, n].active())
23907 {
23908 continue;
23909 }
23910 for (; !SolidTile(num11, n) && n < Main.maxTilesY - 20; n++)
23911 {
23912 }
23913 n--;
23914 int num12 = num11;
23915 int num13 = num11;
23916 while (!Main.tile[num12, n].active() && SolidTile(num12, n + 1))
23917 {
23918 num12--;
23919 }
23920 num12++;
23921 for (; !Main.tile[num13, n].active() && SolidTile(num13, n + 1); num13++)
23922 {
23923 }
23924 num13--;
23925 int num14 = num13 - num12;
23926 int num15 = (num13 + num12) / 2;
23927 if (Main.tile[num15, n].active() || (Main.tile[num15, n].wall != 13 && Main.tile[num15, n].wall != 14) || !SolidTile(num15, n + 1))
23928 {
23929 continue;
23930 }
23931 int style = 16;
23932 int style2 = 13;
23933 int style3 = 14;
23934 int style4 = 49;
23935 int style5 = 4;
23936 int style6 = 8;
23937 int style7 = 15;
23938 int style8 = 9;
23939 int style9 = 10;
23940 int style10 = 17;
23941 int style11 = 25;
23942 int style12 = 25;
23943 int style13 = 23;
23944 int style14 = 25;
23945 int num16 = genRand.Next(13);
23946 int num17 = 0;
23947 int num18 = 0;
23948 if (num16 == 0)
23949 {
23950 num17 = 5;
23951 num18 = 4;
23952 }
23953 if (num16 == 1)
23954 {
23955 num17 = 4;
23956 num18 = 3;
23957 }
23958 if (num16 == 2)
23959 {
23960 num17 = 3;
23961 num18 = 5;
23962 }
23963 if (num16 == 3)
23964 {
23965 num17 = 4;
23966 num18 = 6;
23967 }
23968 if (num16 == 4)
23969 {
23970 num17 = 3;
23971 num18 = 3;
23972 }
23973 if (num16 == 5)
23974 {
23975 num17 = 5;
23976 num18 = 3;
23977 }
23978 if (num16 == 6)
23979 {
23980 num17 = 5;
23981 num18 = 4;
23982 }
23983 if (num16 == 7)
23984 {
23985 num17 = 5;
23986 num18 = 4;
23987 }
23988 if (num16 == 8)
23989 {
23990 num17 = 5;
23991 num18 = 4;
23992 }
23993 if (num16 == 9)
23994 {
23995 num17 = 3;
23996 num18 = 5;
23997 }
23998 if (num16 == 10)
23999 {
24000 num17 = 5;
24001 num18 = 3;
24002 }
24003 if (num16 == 11)
24004 {
24005 num17 = 2;
24006 num18 = 4;
24007 }
24008 if (num16 == 12)
24009 {
24010 num17 = 3;
24011 num18 = 3;
24012 }
24013 for (int num19 = num15 - num17; num19 <= num15 + num17; num19++)
24014 {
24015 for (int num20 = n - num18; num20 <= n; num20++)
24016 {
24017 if (Main.tile[num19, num20].active())
24018 {
24019 num16 = -1;
24020 break;
24021 }
24022 }
24023 }
24024 if ((double)num14 < (double)num17 * 1.75)
24025 {
24026 num16 = -1;
24027 }
24028 switch (num16)
24029 {
24030 case 0:
24031 {
24032 PlaceTile(num15, n, 14, mute: true, forced: false, -1, style2);
24033 int num22 = genRand.Next(6);
24034 if (num22 < 3)
24035 {
24036 PlaceTile(num15 + num22, n - 2, 33, mute: true, forced: false, -1, style12);
24037 }
24038 if (!Main.tile[num15, n].active())
24039 {
24040 break;
24041 }
24042 if (!Main.tile[num15 - 2, n].active())
24043 {
24044 PlaceTile(num15 - 2, n, 15, mute: true, forced: false, -1, style);
24045 if (Main.tile[num15 - 2, n].active())
24046 {
24047 Main.tile[num15 - 2, n].frameX += 18;
24048 Main.tile[num15 - 2, n - 1].frameX += 18;
24049 }
24050 }
24051 if (!Main.tile[num15 + 2, n].active())
24052 {
24053 PlaceTile(num15 + 2, n, 15, mute: true, forced: false, -1, style);
24054 }
24055 break;
24056 }
24057 case 1:
24058 {
24059 PlaceTile(num15, n, 18, mute: true, forced: false, -1, style3);
24060 int num21 = genRand.Next(4);
24061 if (num21 < 2)
24062 {
24063 PlaceTile(num15 + num21, n - 1, 33, mute: true, forced: false, -1, style12);
24064 }
24065 if (!Main.tile[num15, n].active())
24066 {
24067 break;
24068 }
24069 if (genRand.Next(2) == 0)
24070 {
24071 if (!Main.tile[num15 - 1, n].active())
24072 {
24073 PlaceTile(num15 - 1, n, 15, mute: true, forced: false, -1, style);
24074 if (Main.tile[num15 - 1, n].active())
24075 {
24076 Main.tile[num15 - 1, n].frameX += 18;
24077 Main.tile[num15 - 1, n - 1].frameX += 18;
24078 }
24079 }
24080 }
24081 else if (!Main.tile[num15 + 2, n].active())
24082 {
24083 PlaceTile(num15 + 2, n, 15, mute: true, forced: false, -1, style);
24084 }
24085 break;
24086 }
24087 case 2:
24088 PlaceTile(num15, n, 105, mute: true, forced: false, -1, style4);
24089 break;
24090 case 3:
24091 PlaceTile(num15, n, 101, mute: true, forced: false, -1, style5);
24092 break;
24093 case 4:
24094 if (genRand.Next(2) == 0)
24095 {
24096 PlaceTile(num15, n, 15, mute: true, forced: false, -1, style);
24097 Main.tile[num15, n].frameX += 18;
24098 Main.tile[num15, n - 1].frameX += 18;
24099 }
24100 else
24101 {
24102 PlaceTile(num15, n, 15, mute: true, forced: false, -1, style);
24103 }
24104 break;
24105 case 5:
24106 if (genRand.Next(2) == 0)
24107 {
24108 Place4x2(num15, n, 79, 1, style6);
24109 }
24110 else
24111 {
24112 Place4x2(num15, n, 79, -1, style6);
24113 }
24114 break;
24115 case 6:
24116 PlaceTile(num15, n, 87, mute: true, forced: false, -1, style7);
24117 break;
24118 case 7:
24119 PlaceTile(num15, n, 88, mute: true, forced: false, -1, style8);
24120 break;
24121 case 8:
24122 PlaceTile(num15, n, 89, mute: true, forced: false, -1, style9);
24123 break;
24124 case 9:
24125 PlaceTile(num15, n, 104, mute: true, forced: false, -1, style10);
24126 break;
24127 case 10:
24128 if (genRand.Next(2) == 0)
24129 {
24130 Place4x2(num15, n, 90, 1, style14);
24131 }
24132 else
24133 {
24134 Place4x2(num15, n, 90, -1, style14);
24135 }
24136 break;
24137 case 11:
24138 PlaceTile(num15, n, 93, mute: true, forced: false, -1, style13);
24139 break;
24140 case 12:
24141 PlaceTile(num15, n, 100, mute: true, forced: false, -1, style11);
24142 break;
24143 }
24144 }
24145 num9 = 420000.0 / (double)Main.maxTilesX;
24146 for (int num23 = 0; (double)num23 < num9; num23++)
24147 {
24148 int num24 = 0;
24149 int num25 = genRand.Next(num, Main.maxTilesX - num);
24150 int num26 = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
24151 while ((Main.tile[num25, num26].wall != 13 && Main.tile[num25, num26].wall != 14) || Main.tile[num25, num26].active())
24152 {
24153 num25 = genRand.Next(num, Main.maxTilesX - num);
24154 num26 = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
24156 {
24157 num25 = ((genRand.Next(2) != 0) ? genRand.Next(Main.maxTilesX - num, Main.maxTilesX - 50) : genRand.Next(50, num));
24158 }
24159 num24++;
24160 if (num24 > 100000)
24161 {
24162 break;
24163 }
24164 }
24165 if (num24 > 100000)
24166 {
24167 continue;
24168 }
24169 int num27 = num25;
24170 int num28 = num25;
24171 int num29 = num26;
24172 int num30 = num26;
24173 int num31 = 0;
24174 for (int num32 = 0; num32 < 2; num32++)
24175 {
24176 num27 = num25;
24177 num28 = num25;
24178 while (!Main.tile[num27, num26].active() && (Main.tile[num27, num26].wall == 13 || Main.tile[num27, num26].wall == 14))
24179 {
24180 num27--;
24181 }
24182 num27++;
24183 for (; !Main.tile[num28, num26].active() && (Main.tile[num28, num26].wall == 13 || Main.tile[num28, num26].wall == 14); num28++)
24184 {
24185 }
24186 num28--;
24187 num25 = (num27 + num28) / 2;
24188 num29 = num26;
24189 num30 = num26;
24190 while (!Main.tile[num25, num29].active() && (Main.tile[num25, num29].wall == 13 || Main.tile[num25, num29].wall == 14))
24191 {
24192 num29--;
24193 }
24194 num29++;
24195 for (; !Main.tile[num25, num30].active() && (Main.tile[num25, num30].wall == 13 || Main.tile[num25, num30].wall == 14); num30++)
24196 {
24197 }
24198 num30--;
24199 num26 = (num29 + num30) / 2;
24200 }
24201 num27 = num25;
24202 num28 = num25;
24203 while (!Main.tile[num27, num26].active() && !Main.tile[num27, num26 - 1].active() && !Main.tile[num27, num26 + 1].active())
24204 {
24205 num27--;
24206 }
24207 num27++;
24208 for (; !Main.tile[num28, num26].active() && !Main.tile[num28, num26 - 1].active() && !Main.tile[num28, num26 + 1].active(); num28++)
24209 {
24210 }
24211 num28--;
24212 num29 = num26;
24213 num30 = num26;
24214 while (!Main.tile[num25, num29].active() && !Main.tile[num25 - 1, num29].active() && !Main.tile[num25 + 1, num29].active())
24215 {
24216 num29--;
24217 }
24218 num29++;
24219 for (; !Main.tile[num25, num30].active() && !Main.tile[num25 - 1, num30].active() && !Main.tile[num25 + 1, num30].active(); num30++)
24220 {
24221 }
24222 num30--;
24223 num25 = (num27 + num28) / 2;
24224 num26 = (num29 + num30) / 2;
24225 int num33 = num28 - num27;
24226 num31 = num30 - num29;
24227 if (num33 <= 7 || num31 <= 5)
24228 {
24229 continue;
24230 }
24231 int num34 = 0;
24232 if (nearPicture2(num25, num26))
24233 {
24234 num34 = -1;
24235 }
24236 if (num34 == 0)
24237 {
24239 if (!nearPicture(num25, num26))
24240 {
24242 }
24243 }
24244 }
24245 int[] array = new int[3]
24246 {
24247 genRand.Next(16, 22),
24248 genRand.Next(16, 22),
24249 genRand.Next(16, 22)
24250 };
24251 while (array[1] == array[0])
24252 {
24253 array[1] = genRand.Next(16, 22);
24254 }
24255 while (array[2] == array[0] || array[2] == array[1])
24256 {
24257 array[2] = genRand.Next(16, 22);
24258 }
24259 num9 = 420000.0 / (double)Main.maxTilesX;
24260 for (int num35 = 0; (double)num35 < num9; num35++)
24261 {
24262 int num36 = 0;
24263 int num37;
24264 int num38;
24265 do
24266 {
24267 num37 = genRand.Next(num, Main.maxTilesX - num);
24268 num38 = genRand.Next(Main.maxTilesY - 250, Main.maxTilesY - 20);
24270 {
24271 num37 = ((genRand.Next(2) != 0) ? genRand.Next(Main.maxTilesX - num, Main.maxTilesX - 50) : genRand.Next(50, num));
24272 }
24273 num36++;
24274 }
24275 while (num36 <= 100000 && ((Main.tile[num37, num38].wall != 13 && Main.tile[num37, num38].wall != 14) || Main.tile[num37, num38].active()));
24276 if (num36 > 100000)
24277 {
24278 continue;
24279 }
24280 while (!SolidTile(num37, num38) && num38 > 10)
24281 {
24282 num38--;
24283 }
24284 num38++;
24285 if (Main.tile[num37, num38].wall != 13 && Main.tile[num37, num38].wall != 14)
24286 {
24287 continue;
24288 }
24289 int num39 = genRand.Next(3);
24290 int style15 = 32;
24291 int style16 = 32;
24292 int num40;
24293 int num41;
24294 switch (num39)
24295 {
24296 default:
24297 num40 = 1;
24298 num41 = 3;
24299 break;
24300 case 1:
24301 num40 = 3;
24302 num41 = 3;
24303 break;
24304 case 2:
24305 num40 = 1;
24306 num41 = 2;
24307 break;
24308 }
24309 for (int num42 = num37 - 1; num42 <= num37 + num40; num42++)
24310 {
24311 for (int num43 = num38; num43 <= num38 + num41; num43++)
24312 {
24313 Tile tile = Main.tile[num37, num38];
24314 if (num42 < num37 || num42 == num37 + num40)
24315 {
24316 if (tile.active())
24317 {
24318 switch (tile.type)
24319 {
24320 case 10:
24321 case 11:
24322 case 34:
24323 case 42:
24324 case 91:
24325 num39 = -1;
24326 break;
24327 }
24328 }
24329 }
24330 else if (tile.active())
24331 {
24332 num39 = -1;
24333 }
24334 }
24335 }
24336 switch (num39)
24337 {
24338 case 0:
24340 break;
24341 case 1:
24343 break;
24344 case 2:
24346 break;
24347 }
24348 }
24349 }
static bool nearPicture(int x, int y)
static bool remixWorldGen
Definition WorldGen.cs:1148
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:1215
static bool nearPicture2(int x, int y)
static void Place4x2(int x, int y, ushort type, int direction=-1, int style=0)
static void HellFort(int i, int j, ushort tileType=75, byte wallType=14)
static bool drunkWorldGen
Definition WorldGen.cs:1154
static PaintingEntry RandHellPicture()
static bool getGoodWorldGen
Definition WorldGen.cs:1156

References Terraria.Tile.active(), System.array, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Enums.SolidTile, Terraria.Main.tile, and Terraria.Tile.type.

Referenced by Terraria.WorldGen.GenerateWorld().