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

◆ GrowUndergroundTree()

static void Terraria.WorldGen.GrowUndergroundTree ( int i,
int y )
inlinestatic

Definition at line 22670 of file WorldGen.cs.

22671 {
22672 if (Main.tile[i, y].type != 60 || !Main.tile[i, y].nactive() || Main.tile[i, y].halfBrick() || Main.tile[i, y].slope() != 0 || Main.tile[i, y].type != 60 || ((!Main.tile[i - 1, y].active() || Main.tile[i - 1, y].type != 60) && (!Main.tile[i + 1, y].active() || Main.tile[i + 1, y].type != 60)))
22673 {
22674 return;
22675 }
22676 int num = 1;
22677 int num2 = genRand.Next(5, 15);
22678 int num3 = num2 + 2;
22679 if (Main.tile[i, y].type == 60)
22680 {
22681 num3 += 5;
22682 }
22683 if (!EmptyTileCheck(i - num, i + num, y - num3, y - 1, 20))
22684 {
22685 return;
22686 }
22687 bool flag = false;
22688 bool flag2 = false;
22689 int num4;
22690 for (int j = y - num2; j < y; j++)
22691 {
22692 Main.tile[i, j].frameNumber((byte)genRand.Next(3));
22693 Main.tile[i, j].active(active: true);
22694 Main.tile[i, j].type = 5;
22695 num4 = genRand.Next(3);
22696 int num5 = genRand.Next(10);
22697 if (j == y - 1 || j == y - num2)
22698 {
22699 num5 = 0;
22700 }
22701 while (((num5 == 5 || num5 == 7) && flag) || ((num5 == 6 || num5 == 7) && flag2))
22702 {
22703 num5 = genRand.Next(10);
22704 }
22705 flag = false;
22706 flag2 = false;
22707 if (num5 == 5 || num5 == 7)
22708 {
22709 flag = true;
22710 }
22711 if (num5 == 6 || num5 == 7)
22712 {
22713 flag2 = true;
22714 }
22715 switch (num5)
22716 {
22717 case 1:
22718 if (num4 == 0)
22719 {
22720 Main.tile[i, j].frameX = 0;
22721 Main.tile[i, j].frameY = 66;
22722 }
22723 if (num4 == 1)
22724 {
22725 Main.tile[i, j].frameX = 0;
22726 Main.tile[i, j].frameY = 88;
22727 }
22728 if (num4 == 2)
22729 {
22730 Main.tile[i, j].frameX = 0;
22731 Main.tile[i, j].frameY = 110;
22732 }
22733 break;
22734 case 2:
22735 if (num4 == 0)
22736 {
22737 Main.tile[i, j].frameX = 22;
22738 Main.tile[i, j].frameY = 0;
22739 }
22740 if (num4 == 1)
22741 {
22742 Main.tile[i, j].frameX = 22;
22743 Main.tile[i, j].frameY = 22;
22744 }
22745 if (num4 == 2)
22746 {
22747 Main.tile[i, j].frameX = 22;
22748 Main.tile[i, j].frameY = 44;
22749 }
22750 break;
22751 case 3:
22752 if (num4 == 0)
22753 {
22754 Main.tile[i, j].frameX = 44;
22755 Main.tile[i, j].frameY = 66;
22756 }
22757 if (num4 == 1)
22758 {
22759 Main.tile[i, j].frameX = 44;
22760 Main.tile[i, j].frameY = 88;
22761 }
22762 if (num4 == 2)
22763 {
22764 Main.tile[i, j].frameX = 44;
22765 Main.tile[i, j].frameY = 110;
22766 }
22767 break;
22768 case 4:
22769 if (num4 == 0)
22770 {
22771 Main.tile[i, j].frameX = 22;
22772 Main.tile[i, j].frameY = 66;
22773 }
22774 if (num4 == 1)
22775 {
22776 Main.tile[i, j].frameX = 22;
22777 Main.tile[i, j].frameY = 88;
22778 }
22779 if (num4 == 2)
22780 {
22781 Main.tile[i, j].frameX = 22;
22782 Main.tile[i, j].frameY = 110;
22783 }
22784 break;
22785 case 5:
22786 if (num4 == 0)
22787 {
22788 Main.tile[i, j].frameX = 88;
22789 Main.tile[i, j].frameY = 0;
22790 }
22791 if (num4 == 1)
22792 {
22793 Main.tile[i, j].frameX = 88;
22794 Main.tile[i, j].frameY = 22;
22795 }
22796 if (num4 == 2)
22797 {
22798 Main.tile[i, j].frameX = 88;
22799 Main.tile[i, j].frameY = 44;
22800 }
22801 break;
22802 case 6:
22803 if (num4 == 0)
22804 {
22805 Main.tile[i, j].frameX = 66;
22806 Main.tile[i, j].frameY = 66;
22807 }
22808 if (num4 == 1)
22809 {
22810 Main.tile[i, j].frameX = 66;
22811 Main.tile[i, j].frameY = 88;
22812 }
22813 if (num4 == 2)
22814 {
22815 Main.tile[i, j].frameX = 66;
22816 Main.tile[i, j].frameY = 110;
22817 }
22818 break;
22819 case 7:
22820 if (num4 == 0)
22821 {
22822 Main.tile[i, j].frameX = 110;
22823 Main.tile[i, j].frameY = 66;
22824 }
22825 if (num4 == 1)
22826 {
22827 Main.tile[i, j].frameX = 110;
22828 Main.tile[i, j].frameY = 88;
22829 }
22830 if (num4 == 2)
22831 {
22832 Main.tile[i, j].frameX = 110;
22833 Main.tile[i, j].frameY = 110;
22834 }
22835 break;
22836 default:
22837 if (num4 == 0)
22838 {
22839 Main.tile[i, j].frameX = 0;
22840 Main.tile[i, j].frameY = 0;
22841 }
22842 if (num4 == 1)
22843 {
22844 Main.tile[i, j].frameX = 0;
22845 Main.tile[i, j].frameY = 22;
22846 }
22847 if (num4 == 2)
22848 {
22849 Main.tile[i, j].frameX = 0;
22850 Main.tile[i, j].frameY = 44;
22851 }
22852 break;
22853 }
22854 if (num5 == 5 || num5 == 7)
22855 {
22856 Main.tile[i - 1, j].active(active: true);
22857 Main.tile[i - 1, j].type = 5;
22858 num4 = genRand.Next(3);
22859 if (genRand.Next(3) < 2)
22860 {
22861 if (num4 == 0)
22862 {
22863 Main.tile[i - 1, j].frameX = 44;
22864 Main.tile[i - 1, j].frameY = 198;
22865 }
22866 if (num4 == 1)
22867 {
22868 Main.tile[i - 1, j].frameX = 44;
22869 Main.tile[i - 1, j].frameY = 220;
22870 }
22871 if (num4 == 2)
22872 {
22873 Main.tile[i - 1, j].frameX = 44;
22874 Main.tile[i - 1, j].frameY = 242;
22875 }
22876 }
22877 else
22878 {
22879 if (num4 == 0)
22880 {
22881 Main.tile[i - 1, j].frameX = 66;
22882 Main.tile[i - 1, j].frameY = 0;
22883 }
22884 if (num4 == 1)
22885 {
22886 Main.tile[i - 1, j].frameX = 66;
22887 Main.tile[i - 1, j].frameY = 22;
22888 }
22889 if (num4 == 2)
22890 {
22891 Main.tile[i - 1, j].frameX = 66;
22892 Main.tile[i - 1, j].frameY = 44;
22893 }
22894 }
22895 }
22896 if (num5 != 6 && num5 != 7)
22897 {
22898 continue;
22899 }
22900 Main.tile[i + 1, j].active(active: true);
22901 Main.tile[i + 1, j].type = 5;
22902 num4 = genRand.Next(3);
22903 if (genRand.Next(3) < 2)
22904 {
22905 if (num4 == 0)
22906 {
22907 Main.tile[i + 1, j].frameX = 66;
22908 Main.tile[i + 1, j].frameY = 198;
22909 }
22910 if (num4 == 1)
22911 {
22912 Main.tile[i + 1, j].frameX = 66;
22913 Main.tile[i + 1, j].frameY = 220;
22914 }
22915 if (num4 == 2)
22916 {
22917 Main.tile[i + 1, j].frameX = 66;
22918 Main.tile[i + 1, j].frameY = 242;
22919 }
22920 }
22921 else
22922 {
22923 if (num4 == 0)
22924 {
22925 Main.tile[i + 1, j].frameX = 88;
22926 Main.tile[i + 1, j].frameY = 66;
22927 }
22928 if (num4 == 1)
22929 {
22930 Main.tile[i + 1, j].frameX = 88;
22931 Main.tile[i + 1, j].frameY = 88;
22932 }
22933 if (num4 == 2)
22934 {
22935 Main.tile[i + 1, j].frameX = 88;
22936 Main.tile[i + 1, j].frameY = 110;
22937 }
22938 }
22939 }
22940 int num6 = genRand.Next(3);
22941 bool flag3 = false;
22942 bool flag4 = false;
22943 if (Main.tile[i - 1, y].nactive() && !Main.tile[i - 1, y].halfBrick() && Main.tile[i - 1, y].slope() == 0 && (Main.tile[i - 1, y].type == 2 || Main.tile[i - 1, y].type == 23 || Main.tile[i - 1, y].type == 60 || Main.tile[i - 1, y].type == 109 || Main.tile[i - 1, y].type == 147))
22944 {
22945 flag3 = true;
22946 }
22947 if (Main.tile[i + 1, y].nactive() && !Main.tile[i + 1, y].halfBrick() && Main.tile[i + 1, y].slope() == 0 && (Main.tile[i + 1, y].type == 2 || Main.tile[i + 1, y].type == 23 || Main.tile[i + 1, y].type == 60 || Main.tile[i + 1, y].type == 109 || Main.tile[i + 1, y].type == 147))
22948 {
22949 flag4 = true;
22950 }
22951 if (!flag3)
22952 {
22953 if (num6 == 0)
22954 {
22955 num6 = 2;
22956 }
22957 if (num6 == 1)
22958 {
22959 num6 = 3;
22960 }
22961 }
22962 if (!flag4)
22963 {
22964 if (num6 == 0)
22965 {
22966 num6 = 1;
22967 }
22968 if (num6 == 2)
22969 {
22970 num6 = 3;
22971 }
22972 }
22973 if (flag3 && !flag4)
22974 {
22975 num6 = 2;
22976 }
22977 if (flag4 && !flag3)
22978 {
22979 num6 = 1;
22980 }
22981 if (num6 == 0 || num6 == 1)
22982 {
22983 Main.tile[i + 1, y - 1].active(active: true);
22984 Main.tile[i + 1, y - 1].type = 5;
22985 num4 = genRand.Next(3);
22986 if (num4 == 0)
22987 {
22988 Main.tile[i + 1, y - 1].frameX = 22;
22989 Main.tile[i + 1, y - 1].frameY = 132;
22990 }
22991 if (num4 == 1)
22992 {
22993 Main.tile[i + 1, y - 1].frameX = 22;
22994 Main.tile[i + 1, y - 1].frameY = 154;
22995 }
22996 if (num4 == 2)
22997 {
22998 Main.tile[i + 1, y - 1].frameX = 22;
22999 Main.tile[i + 1, y - 1].frameY = 176;
23000 }
23001 }
23002 if (num6 == 0 || num6 == 2)
23003 {
23004 Main.tile[i - 1, y - 1].active(active: true);
23005 Main.tile[i - 1, y - 1].type = 5;
23006 num4 = genRand.Next(3);
23007 if (num4 == 0)
23008 {
23009 Main.tile[i - 1, y - 1].frameX = 44;
23010 Main.tile[i - 1, y - 1].frameY = 132;
23011 }
23012 if (num4 == 1)
23013 {
23014 Main.tile[i - 1, y - 1].frameX = 44;
23015 Main.tile[i - 1, y - 1].frameY = 154;
23016 }
23017 if (num4 == 2)
23018 {
23019 Main.tile[i - 1, y - 1].frameX = 44;
23020 Main.tile[i - 1, y - 1].frameY = 176;
23021 }
23022 }
23023 num4 = genRand.Next(3);
23024 switch (num6)
23025 {
23026 case 0:
23027 if (num4 == 0)
23028 {
23029 Main.tile[i, y - 1].frameX = 88;
23030 Main.tile[i, y - 1].frameY = 132;
23031 }
23032 if (num4 == 1)
23033 {
23034 Main.tile[i, y - 1].frameX = 88;
23035 Main.tile[i, y - 1].frameY = 154;
23036 }
23037 if (num4 == 2)
23038 {
23039 Main.tile[i, y - 1].frameX = 88;
23040 Main.tile[i, y - 1].frameY = 176;
23041 }
23042 break;
23043 case 1:
23044 if (num4 == 0)
23045 {
23046 Main.tile[i, y - 1].frameX = 0;
23047 Main.tile[i, y - 1].frameY = 132;
23048 }
23049 if (num4 == 1)
23050 {
23051 Main.tile[i, y - 1].frameX = 0;
23052 Main.tile[i, y - 1].frameY = 154;
23053 }
23054 if (num4 == 2)
23055 {
23056 Main.tile[i, y - 1].frameX = 0;
23057 Main.tile[i, y - 1].frameY = 176;
23058 }
23059 break;
23060 case 2:
23061 if (num4 == 0)
23062 {
23063 Main.tile[i, y - 1].frameX = 66;
23064 Main.tile[i, y - 1].frameY = 132;
23065 }
23066 if (num4 == 1)
23067 {
23068 Main.tile[i, y - 1].frameX = 66;
23069 Main.tile[i, y - 1].frameY = 154;
23070 }
23071 if (num4 == 2)
23072 {
23073 Main.tile[i, y - 1].frameX = 66;
23074 Main.tile[i, y - 1].frameY = 176;
23075 }
23076 break;
23077 }
23078 if (genRand.Next(8) != 0)
23079 {
23080 num4 = genRand.Next(3);
23081 if (num4 == 0)
23082 {
23083 Main.tile[i, y - num2].frameX = 22;
23084 Main.tile[i, y - num2].frameY = 198;
23085 }
23086 if (num4 == 1)
23087 {
23088 Main.tile[i, y - num2].frameX = 22;
23089 Main.tile[i, y - num2].frameY = 220;
23090 }
23091 if (num4 == 2)
23092 {
23093 Main.tile[i, y - num2].frameX = 22;
23094 Main.tile[i, y - num2].frameY = 242;
23095 }
23096 }
23097 else
23098 {
23099 num4 = genRand.Next(3);
23100 if (num4 == 0)
23101 {
23102 Main.tile[i, y - num2].frameX = 0;
23103 Main.tile[i, y - num2].frameY = 198;
23104 }
23105 if (num4 == 1)
23106 {
23107 Main.tile[i, y - num2].frameX = 0;
23108 Main.tile[i, y - num2].frameY = 220;
23109 }
23110 if (num4 == 2)
23111 {
23112 Main.tile[i, y - num2].frameX = 0;
23113 Main.tile[i, y - num2].frameY = 242;
23114 }
23115 }
23116 RangeFrame(i - 2, y - num2 - 1, i + 2, y + 1);
23117 if (Main.netMode == 2 && !gen)
23118 {
23119 NetMessage.SendTileSquare(-1, i - 1, y - num2, 3, num2);
23120 }
23121 }
static volatile bool gen
Definition WorldGen.cs:972
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static bool EmptyTileCheck(int startX, int endX, int startY, int endY, int ignoreID=-1)
static void RangeFrame(int startX, int startY, int endX, int endY)

References Terraria.Main.netMode, Terraria.NetMessage.SendTileSquare(), and Terraria.Main.tile.