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

◆ ShimmerMakeBiome()

static bool Terraria.WorldGen.ShimmerMakeBiome ( int X,
int Y )
inlinestatic

Definition at line 26292 of file WorldGen.cs.

26293 {
26294 int num = genRand.Next(2);
26295 double num2 = 0.6;
26296 double num3 = 1.3;
26297 double num4 = 0.3;
26298 if (num == 0)
26299 {
26300 num2 = 0.55;
26301 num3 = 2.0;
26302 }
26303 num2 *= 1.05 - genRand.NextDouble() * 0.1;
26304 num3 *= 1.05 - genRand.NextDouble() * 0.1;
26305 num4 *= 1.0 - genRand.NextDouble() * 0.1;
26306 int num5 = genRand.Next(105, 125);
26307 int num6 = (int)((double)num5 * num4);
26308 int num7 = (int)((double)num5 * num2);
26309 int num8 = genRand.Next(9, 13);
26310 int num9 = X - num5;
26311 int num10 = X + num5;
26312 int num11 = Y - num5;
26313 int num12 = Y + num5;
26314 for (int i = num11; i <= num12; i++)
26315 {
26316 for (int j = num9; j <= num10; j++)
26317 {
26318 if (!InWorld(j, i, 50))
26319 {
26320 return false;
26321 }
26322 if (Main.tile[j, i].type == 203 || Main.tile[j, i].type == 25)
26323 {
26324 return false;
26325 }
26326 }
26327 }
26328 int num13 = Y;
26329 if (genRand.Next(4) == 0)
26330 {
26331 num13 = Y - genRand.Next(2);
26332 }
26333 int num14 = Y - num8;
26334 if (genRand.Next(4) == 0)
26335 {
26336 num14 = Y - num8 - genRand.Next(2);
26337 }
26338 for (int k = num11; k <= num12; k++)
26339 {
26340 for (int l = num9; l <= num10; l++)
26341 {
26342 Main.tile[l, k].liquid = 0;
26343 if (genRand.Next(4) == 0)
26344 {
26345 num13 = Y - genRand.Next(2);
26346 }
26347 if (genRand.Next(4) == 0)
26348 {
26349 num14 = Y - num8 + genRand.Next(2);
26350 }
26351 int num15 = ((k <= Y) ? ((int)Math.Sqrt(Math.Pow((double)Math.Abs(l - X) * (1.0 + genRand.NextDouble() * 0.02), 2.0) + Math.Pow((double)Math.Abs(k - Y) * 1.4 * (1.0 + genRand.NextDouble() * 0.02), 2.0))) : ((int)Math.Sqrt(Math.Pow((double)Math.Abs(l - X) * (1.0 + genRand.NextDouble() * 0.02), 2.0) + Math.Pow((double)Math.Abs(k - Y) * 1.2 * (1.0 + genRand.NextDouble() * 0.02), 2.0))));
26352 if (num15 < num5)
26353 {
26354 Main.tile[l, k].color(0);
26355 Main.tile[l, k].wallColor(0);
26356 Main.tile[l, k].slope(0);
26357 Main.tile[l, k].halfBrick(halfBrick: false);
26358 Main.tile[l, k].type = 1;
26359 if (l > num9 + 5 + genRand.Next(2) && l < num10 - 5 - genRand.Next(2))
26360 {
26361 Main.tile[l, k].active(active: true);
26362 }
26363 if ((double)num15 < (double)num5 * 0.9)
26364 {
26365 Main.tile[l, k].wall = 0;
26366 }
26367 }
26368 num15 = (int)Math.Sqrt(Math.Pow((double)Math.Abs(l - X) * (1.0 + genRand.NextDouble() * 0.02), 2.0) + Math.Pow((double)Math.Abs(k - Y) * num3 * (1.0 + genRand.NextDouble() * 0.02), 2.0));
26369 if (k > num14 && k < num13)
26370 {
26371 Main.tile[l, k].active(active: false);
26372 }
26373 if (k < num13 && num15 < (int)((double)num7 * (1.0 + genRand.NextDouble() * 0.02)))
26374 {
26375 Main.tile[l, k].active(active: false);
26376 }
26377 num15 = (int)Math.Sqrt(Math.Pow((double)Math.Abs(l - X) * (1.0 + genRand.NextDouble() * 0.02), 2.0) + Math.Pow((double)(Math.Abs(k - Y) * 2) * (1.0 + genRand.NextDouble() * 0.02), 2.0));
26378 if (k < Y - 1 || num15 >= (int)((double)num6 * (1.0 + genRand.NextDouble() * 0.025)))
26379 {
26380 continue;
26381 }
26382 if (k <= Y + 2 || num15 != num6 - 1 || genRand.Next(2) != 0)
26383 {
26384 Main.tile[l, k].active(active: false);
26385 }
26386 if (k >= Y)
26387 {
26388 if (k == Y)
26389 {
26390 Main.tile[l, k].liquid = 127;
26391 }
26392 else
26393 {
26394 Main.tile[l, k].liquid = byte.MaxValue;
26395 }
26396 Main.tile[l, k].shimmer(shimmer: true);
26397 }
26398 }
26399 }
26400 if (num == 0)
26401 {
26402 num9 = (int)((double)X - (double)num5 * num4) - genRand.Next(-15, 1) - 5;
26403 num10 = (int)((double)X + (double)num5 * num4) + genRand.Next(0, 16);
26404 int m = num9;
26405 int num16 = 0;
26406 for (; m < num10; m += genRand.Next(9, 14))
26407 {
26408 int num17 = Y - 3;
26409 while (!Main.tile[m, num17].active())
26410 {
26411 num17--;
26412 }
26413 num17 -= 4;
26414 int num18 = genRand.Next(5, 10);
26415 int num19 = genRand.Next(15, 21);
26416 int n = m - num18;
26417 while (num18 > 0)
26418 {
26419 for (n = m - num18; n < m + num18; n++)
26420 {
26421 Main.tile[n, num17].active(active: true);
26422 Main.tile[n, num17].type = 1;
26423 }
26424 num16++;
26425 if (genRand.Next(3) < num16)
26426 {
26427 num16 = 0;
26428 num18--;
26429 m += genRand.Next(-1, 2);
26430 }
26431 if (num19 <= 0)
26432 {
26433 num18--;
26434 }
26435 num19--;
26436 num17++;
26437 }
26438 n -= genRand.Next(1, 3);
26439 Main.tile[n, num17 - 2].active(active: true);
26440 Main.tile[n, num17 - 2].type = 1;
26441 Main.tile[n, num17 - 1].active(active: true);
26442 Main.tile[n, num17 - 1].type = 1;
26443 Main.tile[n, num17].active(active: true);
26444 Main.tile[n, num17].type = 1;
26445 if (genRand.Next(2) == 0)
26446 {
26447 Main.tile[n, num17 + 1].active(active: true);
26448 Main.tile[n, num17 + 1].type = 1;
26449 PlaceTight(n, num17 + 2);
26450 }
26451 else
26452 {
26453 PlaceTight(n, num17 + 1);
26454 }
26455 }
26456 }
26459 int num20 = 70;
26460 for (int num21 = 0; num21 < 500; num21++)
26461 {
26462 int num22 = genRand.Next(X - num20, X + num20);
26463 int num23 = genRand.Next(Y - 2, Y + 3);
26464 int num24 = genRand.Next(7);
26465 int treeTileType = 0;
26466 switch (num24)
26467 {
26468 case 0:
26469 treeTileType = 583;
26470 break;
26471 case 1:
26472 treeTileType = 584;
26473 break;
26474 case 2:
26475 treeTileType = 585;
26476 break;
26477 case 3:
26478 treeTileType = 586;
26479 break;
26480 case 4:
26481 treeTileType = 587;
26482 break;
26483 case 5:
26484 treeTileType = 588;
26485 break;
26486 case 6:
26487 treeTileType = 589;
26488 break;
26489 }
26490 if (SolidTile(num22 - 1, num23) && SolidTile(num22 + 1, num23))
26491 {
26493 }
26494 }
26495 return true;
26496 }
static double Sqrt(double d)
static double Pow(double x, double y)
static double Abs(double value)
static bool TryGrowingTreeByType(int treeTileType, int checkedX, int checkedY)
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static void ShimmerMakeBiomeOpening(int direction, int X, int Y, int caveOpenningSize)
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816
static void PlaceTight(int x, int y, bool spiders=false)

References System.Math.Abs(), System.Math.Pow(), Terraria.Enums.SolidTile, System.Math.Sqrt(), Terraria.Main.tile, System.X, and System.Y.