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

◆ MakeDungeon_Pictures()

static double Terraria.WorldGen.MakeDungeon_Pictures ( int[] roomWall,
double count )
inlinestaticprivate

Definition at line 27911 of file WorldGen.cs.

27912 {
27913 count = 420000.0 / (double)Main.maxTilesX;
27914 for (int i = 0; (double)i < count; i++)
27915 {
27916 int num = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
27917 int num2 = genRand.Next((int)Main.worldSurface, GenVars.dMaxY);
27918 while (!Main.wallDungeon[Main.tile[num, num2].wall] || Main.tile[num, num2].active())
27919 {
27920 num = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
27921 num2 = genRand.Next((int)Main.worldSurface, GenVars.dMaxY);
27922 }
27923 int num3 = num;
27924 int num4 = num;
27925 int num5 = num2;
27926 int num6 = num2;
27927 int num7 = 0;
27928 int num8 = 0;
27929 for (int j = 0; j < 2; j++)
27930 {
27931 num3 = num;
27932 num4 = num;
27933 while (!Main.tile[num3, num2].active() && Main.wallDungeon[Main.tile[num3, num2].wall])
27934 {
27935 num3--;
27936 }
27937 num3++;
27938 for (; !Main.tile[num4, num2].active() && Main.wallDungeon[Main.tile[num4, num2].wall]; num4++)
27939 {
27940 }
27941 num4--;
27942 num = (num3 + num4) / 2;
27943 num5 = num2;
27944 num6 = num2;
27945 while (!Main.tile[num, num5].active() && Main.wallDungeon[Main.tile[num, num5].wall])
27946 {
27947 num5--;
27948 }
27949 num5++;
27950 for (; !Main.tile[num, num6].active() && Main.wallDungeon[Main.tile[num, num6].wall]; num6++)
27951 {
27952 }
27953 num6--;
27954 num2 = (num5 + num6) / 2;
27955 }
27956 num3 = num;
27957 num4 = num;
27958 while (!Main.tile[num3, num2].active() && !Main.tile[num3, num2 - 1].active() && !Main.tile[num3, num2 + 1].active())
27959 {
27960 num3--;
27961 }
27962 num3++;
27963 for (; !Main.tile[num4, num2].active() && !Main.tile[num4, num2 - 1].active() && !Main.tile[num4, num2 + 1].active(); num4++)
27964 {
27965 }
27966 num4--;
27967 num5 = num2;
27968 num6 = num2;
27969 while (!Main.tile[num, num5].active() && !Main.tile[num - 1, num5].active() && !Main.tile[num + 1, num5].active())
27970 {
27971 num5--;
27972 }
27973 num5++;
27974 for (; !Main.tile[num, num6].active() && !Main.tile[num - 1, num6].active() && !Main.tile[num + 1, num6].active(); num6++)
27975 {
27976 }
27977 num6--;
27978 num = (num3 + num4) / 2;
27979 num2 = (num5 + num6) / 2;
27980 num7 = num4 - num3;
27981 num8 = num6 - num5;
27982 if (num7 <= 7 || num8 <= 5)
27983 {
27984 continue;
27985 }
27986 bool[] array = new bool[3] { true, false, false };
27987 if (num7 > num8 * 3 && num7 > 21)
27988 {
27989 array[1] = true;
27990 }
27991 if (num8 > num7 * 3 && num8 > 21)
27992 {
27993 array[2] = true;
27994 }
27995 int num9 = genRand.Next(3);
27996 if (Main.tile[num, num2].wall == roomWall[0])
27997 {
27998 num9 = 0;
27999 }
28000 while (!array[num9])
28001 {
28002 num9 = genRand.Next(3);
28003 }
28004 if (nearPicture2(num, num2))
28005 {
28006 num9 = -1;
28007 }
28008 switch (num9)
28009 {
28010 case 0:
28011 {
28013 if (Main.tile[num, num2].wall != roomWall[0])
28014 {
28016 }
28017 if (!nearPicture(num, num2))
28018 {
28019 PlaceTile(num, num2, paintingEntry2.tileType, mute: true, forced: false, -1, paintingEntry2.style);
28020 }
28021 break;
28022 }
28023 case 1:
28024 {
28026 if (Main.tile[num, num2].wall != roomWall[0])
28027 {
28029 }
28030 if (!Main.tile[num, num2].active())
28031 {
28032 PlaceTile(num, num2, paintingEntry3.tileType, mute: true, forced: false, -1, paintingEntry3.style);
28033 }
28034 int num13 = num;
28035 int num14 = num2;
28036 int num15 = num2;
28037 for (int m = 0; m < 2; m++)
28038 {
28039 num += 7;
28040 num5 = num15;
28041 num6 = num15;
28042 while (!Main.tile[num, num5].active() && !Main.tile[num - 1, num5].active() && !Main.tile[num + 1, num5].active())
28043 {
28044 num5--;
28045 }
28046 num5++;
28047 for (; !Main.tile[num, num6].active() && !Main.tile[num - 1, num6].active() && !Main.tile[num + 1, num6].active(); num6++)
28048 {
28049 }
28050 num6--;
28051 num15 = (num5 + num6) / 2;
28053 if (Main.tile[num, num15].wall != roomWall[0])
28054 {
28056 }
28057 if (Math.Abs(num14 - num15) >= 4 || nearPicture(num, num15))
28058 {
28059 break;
28060 }
28061 PlaceTile(num, num15, paintingEntry3.tileType, mute: true, forced: false, -1, paintingEntry3.style);
28062 }
28063 num15 = num2;
28064 num = num13;
28065 for (int n = 0; n < 2; n++)
28066 {
28067 num -= 7;
28068 num5 = num15;
28069 num6 = num15;
28070 while (!Main.tile[num, num5].active() && !Main.tile[num - 1, num5].active() && !Main.tile[num + 1, num5].active())
28071 {
28072 num5--;
28073 }
28074 num5++;
28075 for (; !Main.tile[num, num6].active() && !Main.tile[num - 1, num6].active() && !Main.tile[num + 1, num6].active(); num6++)
28076 {
28077 }
28078 num6--;
28079 num15 = (num5 + num6) / 2;
28081 if (Main.tile[num, num15].wall != roomWall[0])
28082 {
28084 }
28085 if (Math.Abs(num14 - num15) >= 4 || nearPicture(num, num15))
28086 {
28087 break;
28088 }
28089 PlaceTile(num, num15, paintingEntry3.tileType, mute: true, forced: false, -1, paintingEntry3.style);
28090 }
28091 break;
28092 }
28093 case 2:
28094 {
28096 if (Main.tile[num, num2].wall != roomWall[0])
28097 {
28099 }
28100 if (!Main.tile[num, num2].active())
28101 {
28102 PlaceTile(num, num2, paintingEntry.tileType, mute: true, forced: false, -1, paintingEntry.style);
28103 }
28104 int num10 = num2;
28105 int num11 = num;
28106 int num12 = num;
28107 for (int k = 0; k < 3; k++)
28108 {
28109 num2 += 7;
28110 num3 = num12;
28111 num4 = num12;
28112 while (!Main.tile[num3, num2].active() && !Main.tile[num3, num2 - 1].active() && !Main.tile[num3, num2 + 1].active())
28113 {
28114 num3--;
28115 }
28116 num3++;
28117 for (; !Main.tile[num4, num2].active() && !Main.tile[num4, num2 - 1].active() && !Main.tile[num4, num2 + 1].active(); num4++)
28118 {
28119 }
28120 num4--;
28121 num12 = (num3 + num4) / 2;
28123 if (Main.tile[num12, num2].wall != roomWall[0])
28124 {
28126 }
28127 if (Math.Abs(num11 - num12) >= 4 || nearPicture(num12, num2))
28128 {
28129 break;
28130 }
28131 PlaceTile(num12, num2, paintingEntry.tileType, mute: true, forced: false, -1, paintingEntry.style);
28132 }
28133 num12 = num;
28134 num2 = num10;
28135 for (int l = 0; l < 3; l++)
28136 {
28137 num2 -= 7;
28138 num3 = num12;
28139 num4 = num12;
28140 while (!Main.tile[num3, num2].active() && !Main.tile[num3, num2 - 1].active() && !Main.tile[num3, num2 + 1].active())
28141 {
28142 num3--;
28143 }
28144 num3++;
28145 for (; !Main.tile[num4, num2].active() && !Main.tile[num4, num2 - 1].active() && !Main.tile[num4, num2 + 1].active(); num4++)
28146 {
28147 }
28148 num4--;
28149 num12 = (num3 + num4) / 2;
28151 if (Main.tile[num12, num2].wall != roomWall[0])
28152 {
28154 }
28155 if (Math.Abs(num11 - num12) >= 4 || nearPicture(num12, num2))
28156 {
28157 break;
28158 }
28159 PlaceTile(num12, num2, paintingEntry.tileType, mute: true, forced: false, -1, paintingEntry.style);
28160 }
28161 break;
28162 }
28163 }
28164 }
28165 return count;
28166 }
static double Abs(double value)
static bool nearPicture(int x, int y)
static PaintingEntry RandBonePicture()
static PaintingEntry RandPictureTile()
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)

References System.Math.Abs(), System.array, System.count, Terraria.WorldBuilding.GenVars.dMaxX, Terraria.WorldBuilding.GenVars.dMaxY, Terraria.WorldBuilding.GenVars.dMinX, Terraria.Main.maxTilesX, Terraria.Main.tile, Terraria.Main.wallDungeon, and Terraria.Main.worldSurface.