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

◆ mayanTrap()

static bool Terraria.WorldGen.mayanTrap ( int x2,
int y2 )
inlinestatic

Definition at line 4600 of file WorldGen.cs.

4601 {
4602 int num = 1;
4603 if (genRand.Next(3) == 0)
4604 {
4605 num = 0;
4606 }
4607 int num2 = y2;
4608 while (!SolidOrSlopedTile(x2, num2))
4609 {
4610 num2++;
4611 if (num2 >= Main.maxTilesY - 300)
4612 {
4613 return false;
4614 }
4615 }
4616 if (Main.tile[x2, num2].type == 232 || Main.tile[x2, num2].type == 10)
4617 {
4618 return false;
4619 }
4620 num2--;
4621 if (Main.tile[x2, num2].liquid > 0 && Main.tile[x2, num2].lava())
4622 {
4623 return false;
4624 }
4625 if (num == -1 && genRand.Next(20) == 0)
4626 {
4627 num = 2;
4628 }
4629 else if (num == -1)
4630 {
4631 num = genRand.Next(2);
4632 }
4633 if (Main.tile[x2, num2].nactive() || Main.tile[x2 - 1, num2].nactive() || Main.tile[x2 + 1, num2].nactive() || Main.tile[x2, num2 - 1].nactive() || Main.tile[x2 - 1, num2 - 1].nactive() || Main.tile[x2 + 1, num2 - 1].nactive() || Main.tile[x2, num2 - 2].nactive() || Main.tile[x2 - 1, num2 - 2].nactive() || Main.tile[x2 + 1, num2 - 2].nactive())
4634 {
4635 return false;
4636 }
4637 if (Main.tile[x2, num2 + 1].type == 10)
4638 {
4639 return false;
4640 }
4641 if (Main.tile[x2, num2 + 1].type == 48)
4642 {
4643 return false;
4644 }
4645 if (Main.tile[x2, num2 + 1].type == 232)
4646 {
4647 return false;
4648 }
4649 switch (num)
4650 {
4651 case 0:
4652 {
4653 int num12 = x2;
4654 int num13 = num2;
4655 num13 -= genRand.Next(3);
4656 while (InWorld(num12, num13, 5) && !SolidOrSlopedTile(num12, num13))
4657 {
4658 num12--;
4659 }
4660 int num14 = num12;
4662 {
4663 }
4664 int num15 = num12;
4665 int num16 = x2 - num14;
4666 int num17 = num15 - x2;
4667 bool flag = false;
4668 bool flag2 = false;
4669 if (num16 > 5 && num16 < 50)
4670 {
4671 flag = true;
4672 }
4673 if (num17 > 5 && num17 < 50)
4674 {
4675 flag2 = true;
4676 }
4677 if (flag && !SolidOrSlopedTile(num14, num13 + 1))
4678 {
4679 flag = false;
4680 }
4681 if (flag2 && !SolidOrSlopedTile(num15, num13 + 1))
4682 {
4683 flag2 = false;
4684 }
4685 if (flag && (Main.tile[num14, num13].type == 10 || Main.tile[num14, num13].type == 48 || Main.tile[num14, num13 + 1].type == 10 || Main.tile[num14, num13 + 1].type == 48))
4686 {
4687 flag = false;
4688 }
4689 if (flag2 && (Main.tile[num15, num13].type == 10 || Main.tile[num15, num13].type == 48 || Main.tile[num15, num13 + 1].type == 10 || Main.tile[num15, num13 + 1].type == 48))
4690 {
4691 flag2 = false;
4692 }
4693 int num18 = 0;
4694 if (flag && flag2)
4695 {
4696 num18 = 1;
4697 num12 = num14;
4698 if (genRand.Next(2) == 0)
4699 {
4700 num12 = num15;
4701 num18 = -1;
4702 }
4703 }
4704 else if (flag2)
4705 {
4706 num12 = num15;
4707 num18 = -1;
4708 }
4709 else
4710 {
4711 if (!flag)
4712 {
4713 return false;
4714 }
4715 num12 = num14;
4716 num18 = 1;
4717 }
4718 if (Main.tile[num12, num13].wall != 87)
4719 {
4720 return false;
4721 }
4722 if (Main.tile[num12, num13].type == 190)
4723 {
4724 return false;
4725 }
4726 if (Main.tile[num12, num13].type == 135)
4727 {
4728 return false;
4729 }
4730 if (Main.tile[num12, num13].type == 137)
4731 {
4732 return false;
4733 }
4734 if (Main.tile[num12, num13].type == 232)
4735 {
4736 return false;
4737 }
4738 if (Main.tile[num12, num13].type == 237)
4739 {
4740 return false;
4741 }
4742 if (Main.tile[num12, num13].type == 10)
4743 {
4744 return false;
4745 }
4746 PlaceTile(x2, num2, 135, mute: true, forced: true, -1, 6);
4748 int num19 = genRand.Next(3);
4749 if (Main.tile[x2, num2].wire())
4750 {
4751 num19 = 0;
4752 }
4753 if (Main.tile[x2, num2].wire2())
4754 {
4755 num19 = 1;
4756 }
4757 if (Main.tile[x2, num2].wire3())
4758 {
4759 num19 = 2;
4760 }
4761 int num20 = Math.Abs(num12 - x2);
4762 int style2 = 1;
4763 if (num20 < 10 && genRand.Next(3) != 0)
4764 {
4765 style2 = 2;
4766 }
4767 PlaceTile(num12, num13, 137, mute: true, forced: true, -1, style2);
4768 if (num18 == 1)
4769 {
4770 Main.tile[num12, num13].frameX += 18;
4771 }
4772 int num21 = genRand.Next(5);
4773 int num22 = num13;
4774 while (num21 > 0)
4775 {
4776 num21--;
4777 num22--;
4779 {
4780 break;
4781 }
4782 PlaceTile(num12, num22, 137, mute: true, forced: true, -1, style2);
4783 if (num18 == 1)
4784 {
4785 Main.tile[num12, num22].frameX += 18;
4786 }
4787 switch (num19)
4788 {
4789 case 0:
4790 Main.tile[num12, num22].wire(wire: true);
4791 break;
4792 case 1:
4793 Main.tile[num12, num22].wire2(wire2: true);
4794 break;
4795 case 2:
4796 Main.tile[num12, num22].wire3(wire3: true);
4797 break;
4798 }
4799 }
4800 int num23 = x2;
4801 int num24 = num2;
4802 while (num23 != num12 || num24 != num13)
4803 {
4804 switch (num19)
4805 {
4806 case 0:
4807 Main.tile[num23, num24].wire(wire: true);
4808 break;
4809 case 1:
4810 Main.tile[num23, num24].wire2(wire2: true);
4811 break;
4812 case 2:
4813 Main.tile[num23, num24].wire3(wire3: true);
4814 break;
4815 }
4816 if (num23 > num12)
4817 {
4818 num23--;
4819 }
4820 if (num23 < num12)
4821 {
4822 num23++;
4823 }
4824 switch (num19)
4825 {
4826 case 0:
4827 Main.tile[num23, num24].wire(wire: true);
4828 break;
4829 case 1:
4830 Main.tile[num23, num24].wire2(wire2: true);
4831 break;
4832 case 2:
4833 Main.tile[num23, num24].wire3(wire3: true);
4834 break;
4835 }
4836 if (num24 > num13)
4837 {
4838 num24--;
4839 }
4840 if (num24 < num13)
4841 {
4842 num24++;
4843 }
4844 switch (num19)
4845 {
4846 case 0:
4847 Main.tile[num23, num24].wire(wire: true);
4848 break;
4849 case 1:
4850 Main.tile[num23, num24].wire2(wire2: true);
4851 break;
4852 case 2:
4853 Main.tile[num23, num24].wire3(wire3: true);
4854 break;
4855 }
4856 }
4857 return true;
4858 }
4859 case 1:
4860 {
4861 int num3 = x2;
4862 int num4 = num2;
4863 while (!SolidOrSlopedTile(num3, num4))
4864 {
4865 num4--;
4866 if ((double)num4 < Main.worldSurface)
4867 {
4868 return false;
4869 }
4870 }
4871 int num5 = Math.Abs(num4 - num2);
4872 if (num5 < 3)
4873 {
4874 return false;
4875 }
4876 int num6 = genRand.Next(3);
4877 if (Main.tile[x2, num2].wire())
4878 {
4879 num6 = 0;
4880 }
4881 if (Main.tile[x2, num2].wire2())
4882 {
4883 num6 = 1;
4884 }
4885 if (Main.tile[x2, num2].wire3())
4886 {
4887 num6 = 2;
4888 }
4889 int style = 3;
4890 if (num5 < 16 && genRand.Next(3) != 0)
4891 {
4892 style = 4;
4893 }
4894 if (Main.tile[num3, num4].type == 135)
4895 {
4896 return false;
4897 }
4898 if (Main.tile[num3, num4].type == 137)
4899 {
4900 return false;
4901 }
4902 if (Main.tile[num3, num4].type == 232)
4903 {
4904 return false;
4905 }
4906 if (Main.tile[num3, num4].type == 237)
4907 {
4908 return false;
4909 }
4910 if (Main.tile[num3, num4].type == 10)
4911 {
4912 return false;
4913 }
4914 if (Main.tile[num3, num4].wall != 87)
4915 {
4916 return false;
4917 }
4918 PlaceTile(x2, num2, 135, mute: true, forced: true, -1, 6);
4919 PlaceTile(num3, num4, 137, mute: true, forced: true, -1, style);
4920 for (int i = 0; i < 2; i++)
4921 {
4922 int num7 = genRand.Next(1, 5);
4923 int num8 = num3;
4924 int num9 = -1;
4925 if (i == 1)
4926 {
4927 num9 = 1;
4928 }
4929 while (num7 > 0)
4930 {
4931 num7--;
4932 num8 += num9;
4933 if (!SolidTile(num8, num4 - 1) || SolidOrSlopedTile(num8, num4 + 1))
4934 {
4935 break;
4936 }
4937 PlaceTile(num8, num4, 137, mute: true, forced: true, -1, style);
4938 switch (num6)
4939 {
4940 case 0:
4941 Main.tile[num8, num4].wire(wire: true);
4942 break;
4943 case 1:
4944 Main.tile[num8, num4].wire2(wire2: true);
4945 break;
4946 case 2:
4947 Main.tile[num8, num4].wire3(wire3: true);
4948 break;
4949 }
4950 }
4951 }
4952 int num10 = x2;
4953 int num11 = num2;
4954 while (num10 != num3 || num11 != num4)
4955 {
4956 switch (num6)
4957 {
4958 case 0:
4959 Main.tile[num10, num11].wire(wire: true);
4960 break;
4961 case 1:
4962 Main.tile[num10, num11].wire2(wire2: true);
4963 break;
4964 case 2:
4965 Main.tile[num10, num11].wire3(wire3: true);
4966 break;
4967 }
4968 if (num10 > num3)
4969 {
4970 num10--;
4971 }
4972 if (num10 < num3)
4973 {
4974 num10++;
4975 }
4976 switch (num6)
4977 {
4978 case 0:
4979 Main.tile[num10, num11].wire(wire: true);
4980 break;
4981 case 1:
4982 Main.tile[num10, num11].wire2(wire2: true);
4983 break;
4984 case 2:
4985 Main.tile[num10, num11].wire3(wire3: true);
4986 break;
4987 }
4988 if (num11 > num4)
4989 {
4990 num11--;
4991 }
4992 if (num11 < num4)
4993 {
4994 num11++;
4995 }
4996 switch (num6)
4997 {
4998 case 0:
4999 Main.tile[num10, num11].wire(wire: true);
5000 break;
5001 case 1:
5002 Main.tile[num10, num11].wire2(wire2: true);
5003 break;
5004 case 2:
5005 Main.tile[num10, num11].wire3(wire3: true);
5006 break;
5007 }
5008 }
5009 return true;
5010 }
5011 default:
5012 return false;
5013 }
5014 }
static double Abs(double value)
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
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 InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816
static bool SolidOrSlopedTile(Tile tile)

References System.Math.Abs(), Terraria.WorldGen.genRand, Terraria.WorldGen.InWorld(), Terraria.WorldGen.KillTile(), Terraria.Main.maxTilesY, Terraria.WorldGen.PlaceTile(), Terraria.WorldGen.SolidOrSlopedTile(), Terraria.Enums.SolidTile, Terraria.Main.tile, and Terraria.Main.worldSurface.