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

◆ PlaceCatTail()

static Point Terraria.WorldGen.PlaceCatTail ( int x,
int j )
inlinestatic

Definition at line 49560 of file WorldGen.cs.

49561 {
49562 int num = j;
49563 Point result = new Point(-1, -1);
49564 if (x < 50 || x > Main.maxTilesX - 50 || num < 50 || num > Main.maxTilesY - 50)
49565 {
49566 return result;
49567 }
49568 if ((Main.tile[x, num].active() && Main.tile[x, num].type != 71) || Main.tile[x, num].liquid == 0 || Main.tile[x, num].liquidType() != 0)
49569 {
49570 return result;
49571 }
49572 while (Main.tile[x, num].liquid > 0 && num > 50)
49573 {
49574 num--;
49575 }
49576 num++;
49577 if (Main.tile[x, num].active() || Main.tile[x, num - 1].active() || Main.tile[x, num].liquid == 0 || Main.tile[x, num].liquidType() != 0)
49578 {
49579 return result;
49580 }
49581 if (Main.tile[x, num].wall != 0 && Main.tile[x, num].wall != 80 && Main.tile[x, num].wall != 81 && Main.tile[x, num].wall != 69 && (Main.tile[x, num].wall < 63 || Main.tile[x, num].wall > 68))
49582 {
49583 return result;
49584 }
49585 int num2 = 7;
49586 int num3 = 0;
49587 for (int i = x - num2; i <= x + num2; i++)
49588 {
49589 for (int k = num - num2; k <= num + num2; k++)
49590 {
49591 if (Main.tile[i, k].active() && Main.tile[i, k].type == 519)
49592 {
49593 num3++;
49594 break;
49595 }
49596 }
49597 }
49598 if (num3 > 3)
49599 {
49600 return result;
49601 }
49602 int l;
49603 for (l = num; (!Main.tile[x, l].active() || !Main.tileSolid[Main.tile[x, l].type] || Main.tileSolidTop[Main.tile[x, l].type]) && l < Main.maxTilesY - 50; l++)
49604 {
49605 if (Main.tile[x, l].active() && Main.tile[x, l].type != 71)
49606 {
49607 return result;
49608 }
49609 }
49610 int num4 = catTailDistance - 1;
49611 if (l - num > num4)
49612 {
49613 return result;
49614 }
49615 if (l - num < 2)
49616 {
49617 return result;
49618 }
49619 int type = Main.tile[x, l].type;
49620 if (!Main.tile[x, l].nactive())
49621 {
49622 return result;
49623 }
49624 int num5 = -1;
49625 switch (type)
49626 {
49627 case 2:
49628 case 477:
49629 num5 = 0;
49630 break;
49631 case 53:
49632 if (x < beachDistance || x > Main.maxTilesX - beachDistance)
49633 {
49634 return result;
49635 }
49636 num5 = 18;
49637 break;
49638 case 199:
49639 case 234:
49640 case 662:
49641 num5 = 54;
49642 break;
49643 case 23:
49644 case 112:
49645 case 661:
49646 num5 = 72;
49647 break;
49648 case 70:
49649 num5 = 90;
49650 break;
49651 }
49652 if (num5 < 0)
49653 {
49654 return result;
49655 }
49656 if (Main.tile[x, l].topSlope() && gen && genRand.Next(3) != 0)
49657 {
49658 Main.tile[x, l].slope(0);
49659 }
49660 else if (Main.tile[x, l].topSlope() || Main.tile[x, l].halfBrick())
49661 {
49662 return result;
49663 }
49664 num = l - 1;
49665 Main.tile[x, num].active(active: true);
49666 Main.tile[x, num].type = 519;
49667 Main.tile[x, num].frameX = 0;
49668 Main.tile[x, num].frameY = (short)num5;
49669 Main.tile[x, num].halfBrick(halfBrick: false);
49670 Main.tile[x, num].slope(0);
49671 Main.tile[x, num].CopyPaintAndCoating(Main.tile[x, num + 1]);
49672 SquareTileFrame(x, num);
49673 return new Point(x, num);
49674 }
static volatile bool gen
Definition WorldGen.cs:972
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static readonly int beachDistance
Definition WorldGen.cs:928
static void SquareTileFrame(int i, int j, bool resetFrame=true)
static int catTailDistance
Definition WorldGen.cs:1176

References Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and System.type.