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

◆ GrowTree()

static bool Terraria.WorldGen.GrowTree ( int i,
int y )
inlinestatic

Definition at line 21606 of file WorldGen.cs.

21607 {
21608 int j;
21609 for (j = y; Main.tile[i, j].type == 20; j++)
21610 {
21611 }
21612 if ((Main.tile[i - 1, j - 1].liquid != 0 || Main.tile[i, j - 1].liquid != 0 || Main.tile[i + 1, j - 1].liquid != 0) && !notTheBees)
21613 {
21614 return false;
21615 }
21616 if (Main.tile[i, j].nactive() && !Main.tile[i, j].halfBrick() && Main.tile[i, j].slope() == 0 && IsTileTypeFitForTree(Main.tile[i, j].type) && ((Main.remixWorld && (double)j > Main.worldSurface) || Main.tile[i, j - 1].wall == 0 || DefaultTreeWallTest(Main.tile[i, j - 1].wall)) && ((Main.tile[i - 1, j].active() && IsTileTypeFitForTree(Main.tile[i - 1, j].type)) || (Main.tile[i + 1, j].active() && IsTileTypeFitForTree(Main.tile[i + 1, j].type))))
21617 {
21618 TileColorCache cache = Main.tile[i, j].BlockColorAndCoating();
21619 if (Main.tenthAnniversaryWorld && !gen)
21620 {
21621 cache.Color = (byte)genRand.Next(1, 13);
21622 }
21623 int num = 2;
21624 int num2 = genRand.Next(5, 17);
21625 int num3 = num2 + 4;
21626 if (Main.tile[i, j].type == 60)
21627 {
21628 num3 += 5;
21629 }
21630 bool flag = false;
21631 if (Main.tile[i, j].type == 70 && EmptyTileCheck(i - num, i + num, j - num3, j - 3, 20) && EmptyTileCheck(i - 1, i + 1, j - 2, j - 1, 20))
21632 {
21633 flag = true;
21634 }
21635 if (EmptyTileCheck(i - num, i + num, j - num3, j - 1, 20))
21636 {
21637 flag = true;
21638 }
21639 if (flag)
21640 {
21641 bool flag2 = Main.remixWorld && (double)j < Main.worldSurface;
21642 bool flag3 = false;
21643 bool flag4 = false;
21644 int num4;
21645 for (int k = j - num2; k < j; k++)
21646 {
21647 Main.tile[i, k].frameNumber((byte)genRand.Next(3));
21648 Main.tile[i, k].active(active: true);
21649 Main.tile[i, k].type = 5;
21650 Main.tile[i, k].UseBlockColors(cache);
21651 num4 = genRand.Next(3);
21652 int num5 = genRand.Next(10);
21653 if (k == j - 1 || k == j - num2)
21654 {
21655 num5 = 0;
21656 }
21657 while (((num5 == 5 || num5 == 7) && flag3) || ((num5 == 6 || num5 == 7) && flag4))
21658 {
21659 num5 = genRand.Next(10);
21660 }
21661 flag3 = false;
21662 flag4 = false;
21663 if (num5 == 5 || num5 == 7)
21664 {
21665 flag3 = true;
21666 }
21667 if (num5 == 6 || num5 == 7)
21668 {
21669 flag4 = true;
21670 }
21671 switch (num5)
21672 {
21673 case 1:
21674 if (num4 == 0)
21675 {
21676 Main.tile[i, k].frameX = 0;
21677 Main.tile[i, k].frameY = 66;
21678 }
21679 if (num4 == 1)
21680 {
21681 Main.tile[i, k].frameX = 0;
21682 Main.tile[i, k].frameY = 88;
21683 }
21684 if (num4 == 2)
21685 {
21686 Main.tile[i, k].frameX = 0;
21687 Main.tile[i, k].frameY = 110;
21688 }
21689 break;
21690 case 2:
21691 if (num4 == 0)
21692 {
21693 Main.tile[i, k].frameX = 22;
21694 Main.tile[i, k].frameY = 0;
21695 }
21696 if (num4 == 1)
21697 {
21698 Main.tile[i, k].frameX = 22;
21699 Main.tile[i, k].frameY = 22;
21700 }
21701 if (num4 == 2)
21702 {
21703 Main.tile[i, k].frameX = 22;
21704 Main.tile[i, k].frameY = 44;
21705 }
21706 break;
21707 case 3:
21708 if (num4 == 0)
21709 {
21710 Main.tile[i, k].frameX = 44;
21711 Main.tile[i, k].frameY = 66;
21712 }
21713 if (num4 == 1)
21714 {
21715 Main.tile[i, k].frameX = 44;
21716 Main.tile[i, k].frameY = 88;
21717 }
21718 if (num4 == 2)
21719 {
21720 Main.tile[i, k].frameX = 44;
21721 Main.tile[i, k].frameY = 110;
21722 }
21723 break;
21724 case 4:
21725 if (num4 == 0)
21726 {
21727 Main.tile[i, k].frameX = 22;
21728 Main.tile[i, k].frameY = 66;
21729 }
21730 if (num4 == 1)
21731 {
21732 Main.tile[i, k].frameX = 22;
21733 Main.tile[i, k].frameY = 88;
21734 }
21735 if (num4 == 2)
21736 {
21737 Main.tile[i, k].frameX = 22;
21738 Main.tile[i, k].frameY = 110;
21739 }
21740 break;
21741 case 5:
21742 if (num4 == 0)
21743 {
21744 Main.tile[i, k].frameX = 88;
21745 Main.tile[i, k].frameY = 0;
21746 }
21747 if (num4 == 1)
21748 {
21749 Main.tile[i, k].frameX = 88;
21750 Main.tile[i, k].frameY = 22;
21751 }
21752 if (num4 == 2)
21753 {
21754 Main.tile[i, k].frameX = 88;
21755 Main.tile[i, k].frameY = 44;
21756 }
21757 break;
21758 case 6:
21759 if (num4 == 0)
21760 {
21761 Main.tile[i, k].frameX = 66;
21762 Main.tile[i, k].frameY = 66;
21763 }
21764 if (num4 == 1)
21765 {
21766 Main.tile[i, k].frameX = 66;
21767 Main.tile[i, k].frameY = 88;
21768 }
21769 if (num4 == 2)
21770 {
21771 Main.tile[i, k].frameX = 66;
21772 Main.tile[i, k].frameY = 110;
21773 }
21774 break;
21775 case 7:
21776 if (num4 == 0)
21777 {
21778 Main.tile[i, k].frameX = 110;
21779 Main.tile[i, k].frameY = 66;
21780 }
21781 if (num4 == 1)
21782 {
21783 Main.tile[i, k].frameX = 110;
21784 Main.tile[i, k].frameY = 88;
21785 }
21786 if (num4 == 2)
21787 {
21788 Main.tile[i, k].frameX = 110;
21789 Main.tile[i, k].frameY = 110;
21790 }
21791 break;
21792 default:
21793 if (num4 == 0)
21794 {
21795 Main.tile[i, k].frameX = 0;
21796 Main.tile[i, k].frameY = 0;
21797 }
21798 if (num4 == 1)
21799 {
21800 Main.tile[i, k].frameX = 0;
21801 Main.tile[i, k].frameY = 22;
21802 }
21803 if (num4 == 2)
21804 {
21805 Main.tile[i, k].frameX = 0;
21806 Main.tile[i, k].frameY = 44;
21807 }
21808 break;
21809 }
21810 if (num5 == 5 || num5 == 7)
21811 {
21812 Main.tile[i - 1, k].active(active: true);
21813 Main.tile[i - 1, k].type = 5;
21814 Main.tile[i - 1, k].UseBlockColors(cache);
21815 num4 = genRand.Next(3);
21816 if (genRand.Next(3) < 2 && !flag2)
21817 {
21818 if (num4 == 0)
21819 {
21820 Main.tile[i - 1, k].frameX = 44;
21821 Main.tile[i - 1, k].frameY = 198;
21822 }
21823 if (num4 == 1)
21824 {
21825 Main.tile[i - 1, k].frameX = 44;
21826 Main.tile[i - 1, k].frameY = 220;
21827 }
21828 if (num4 == 2)
21829 {
21830 Main.tile[i - 1, k].frameX = 44;
21831 Main.tile[i - 1, k].frameY = 242;
21832 }
21833 }
21834 else
21835 {
21836 if (num4 == 0)
21837 {
21838 Main.tile[i - 1, k].frameX = 66;
21839 Main.tile[i - 1, k].frameY = 0;
21840 }
21841 if (num4 == 1)
21842 {
21843 Main.tile[i - 1, k].frameX = 66;
21844 Main.tile[i - 1, k].frameY = 22;
21845 }
21846 if (num4 == 2)
21847 {
21848 Main.tile[i - 1, k].frameX = 66;
21849 Main.tile[i - 1, k].frameY = 44;
21850 }
21851 }
21852 }
21853 if (num5 != 6 && num5 != 7)
21854 {
21855 continue;
21856 }
21857 Main.tile[i + 1, k].active(active: true);
21858 Main.tile[i + 1, k].type = 5;
21859 Main.tile[i + 1, k].UseBlockColors(cache);
21860 num4 = genRand.Next(3);
21861 if (genRand.Next(3) < 2 && !flag2)
21862 {
21863 if (num4 == 0)
21864 {
21865 Main.tile[i + 1, k].frameX = 66;
21866 Main.tile[i + 1, k].frameY = 198;
21867 }
21868 if (num4 == 1)
21869 {
21870 Main.tile[i + 1, k].frameX = 66;
21871 Main.tile[i + 1, k].frameY = 220;
21872 }
21873 if (num4 == 2)
21874 {
21875 Main.tile[i + 1, k].frameX = 66;
21876 Main.tile[i + 1, k].frameY = 242;
21877 }
21878 }
21879 else
21880 {
21881 if (num4 == 0)
21882 {
21883 Main.tile[i + 1, k].frameX = 88;
21884 Main.tile[i + 1, k].frameY = 66;
21885 }
21886 if (num4 == 1)
21887 {
21888 Main.tile[i + 1, k].frameX = 88;
21889 Main.tile[i + 1, k].frameY = 88;
21890 }
21891 if (num4 == 2)
21892 {
21893 Main.tile[i + 1, k].frameX = 88;
21894 Main.tile[i + 1, k].frameY = 110;
21895 }
21896 }
21897 }
21898 int num6 = genRand.Next(3);
21899 bool flag5 = false;
21900 bool flag6 = false;
21901 if (Main.tile[i - 1, j].nactive() && !Main.tile[i - 1, j].halfBrick() && Main.tile[i - 1, j].slope() == 0 && IsTileTypeFitForTree(Main.tile[i - 1, j].type))
21902 {
21903 flag5 = true;
21904 }
21905 if (Main.tile[i + 1, j].nactive() && !Main.tile[i + 1, j].halfBrick() && Main.tile[i + 1, j].slope() == 0 && IsTileTypeFitForTree(Main.tile[i + 1, j].type))
21906 {
21907 flag6 = true;
21908 }
21909 if (!flag5)
21910 {
21911 if (num6 == 0)
21912 {
21913 num6 = 2;
21914 }
21915 if (num6 == 1)
21916 {
21917 num6 = 3;
21918 }
21919 }
21920 if (!flag6)
21921 {
21922 if (num6 == 0)
21923 {
21924 num6 = 1;
21925 }
21926 if (num6 == 2)
21927 {
21928 num6 = 3;
21929 }
21930 }
21931 if (flag5 && !flag6)
21932 {
21933 num6 = 2;
21934 }
21935 if (flag6 && !flag5)
21936 {
21937 num6 = 1;
21938 }
21939 if (num6 == 0 || num6 == 1)
21940 {
21941 Main.tile[i + 1, j - 1].active(active: true);
21942 Main.tile[i + 1, j - 1].type = 5;
21943 Main.tile[i + 1, j - 1].UseBlockColors(cache);
21944 num4 = genRand.Next(3);
21945 if (num4 == 0)
21946 {
21947 Main.tile[i + 1, j - 1].frameX = 22;
21948 Main.tile[i + 1, j - 1].frameY = 132;
21949 }
21950 if (num4 == 1)
21951 {
21952 Main.tile[i + 1, j - 1].frameX = 22;
21953 Main.tile[i + 1, j - 1].frameY = 154;
21954 }
21955 if (num4 == 2)
21956 {
21957 Main.tile[i + 1, j - 1].frameX = 22;
21958 Main.tile[i + 1, j - 1].frameY = 176;
21959 }
21960 }
21961 if (num6 == 0 || num6 == 2)
21962 {
21963 Main.tile[i - 1, j - 1].active(active: true);
21964 Main.tile[i - 1, j - 1].type = 5;
21965 Main.tile[i - 1, j - 1].UseBlockColors(cache);
21966 num4 = genRand.Next(3);
21967 if (num4 == 0)
21968 {
21969 Main.tile[i - 1, j - 1].frameX = 44;
21970 Main.tile[i - 1, j - 1].frameY = 132;
21971 }
21972 if (num4 == 1)
21973 {
21974 Main.tile[i - 1, j - 1].frameX = 44;
21975 Main.tile[i - 1, j - 1].frameY = 154;
21976 }
21977 if (num4 == 2)
21978 {
21979 Main.tile[i - 1, j - 1].frameX = 44;
21980 Main.tile[i - 1, j - 1].frameY = 176;
21981 }
21982 }
21983 num4 = genRand.Next(3);
21984 switch (num6)
21985 {
21986 case 0:
21987 if (num4 == 0)
21988 {
21989 Main.tile[i, j - 1].frameX = 88;
21990 Main.tile[i, j - 1].frameY = 132;
21991 }
21992 if (num4 == 1)
21993 {
21994 Main.tile[i, j - 1].frameX = 88;
21995 Main.tile[i, j - 1].frameY = 154;
21996 }
21997 if (num4 == 2)
21998 {
21999 Main.tile[i, j - 1].frameX = 88;
22000 Main.tile[i, j - 1].frameY = 176;
22001 }
22002 break;
22003 case 1:
22004 if (num4 == 0)
22005 {
22006 Main.tile[i, j - 1].frameX = 0;
22007 Main.tile[i, j - 1].frameY = 132;
22008 }
22009 if (num4 == 1)
22010 {
22011 Main.tile[i, j - 1].frameX = 0;
22012 Main.tile[i, j - 1].frameY = 154;
22013 }
22014 if (num4 == 2)
22015 {
22016 Main.tile[i, j - 1].frameX = 0;
22017 Main.tile[i, j - 1].frameY = 176;
22018 }
22019 break;
22020 case 2:
22021 if (num4 == 0)
22022 {
22023 Main.tile[i, j - 1].frameX = 66;
22024 Main.tile[i, j - 1].frameY = 132;
22025 }
22026 if (num4 == 1)
22027 {
22028 Main.tile[i, j - 1].frameX = 66;
22029 Main.tile[i, j - 1].frameY = 154;
22030 }
22031 if (num4 == 2)
22032 {
22033 Main.tile[i, j - 1].frameX = 66;
22034 Main.tile[i, j - 1].frameY = 176;
22035 }
22036 break;
22037 }
22038 if (genRand.Next(13) != 0 && !flag2)
22039 {
22040 num4 = genRand.Next(3);
22041 if (num4 == 0)
22042 {
22043 Main.tile[i, j - num2].frameX = 22;
22044 Main.tile[i, j - num2].frameY = 198;
22045 }
22046 if (num4 == 1)
22047 {
22048 Main.tile[i, j - num2].frameX = 22;
22049 Main.tile[i, j - num2].frameY = 220;
22050 }
22051 if (num4 == 2)
22052 {
22053 Main.tile[i, j - num2].frameX = 22;
22054 Main.tile[i, j - num2].frameY = 242;
22055 }
22056 }
22057 else
22058 {
22059 num4 = genRand.Next(3);
22060 if (num4 == 0)
22061 {
22062 Main.tile[i, j - num2].frameX = 0;
22063 Main.tile[i, j - num2].frameY = 198;
22064 }
22065 if (num4 == 1)
22066 {
22067 Main.tile[i, j - num2].frameX = 0;
22068 Main.tile[i, j - num2].frameY = 220;
22069 }
22070 if (num4 == 2)
22071 {
22072 Main.tile[i, j - num2].frameX = 0;
22073 Main.tile[i, j - num2].frameY = 242;
22074 }
22075 }
22076 RangeFrame(i - 2, j - num2 - 1, i + 2, j + 1);
22077 if (Main.netMode == 2)
22078 {
22079 NetMessage.SendTileSquare(-1, i - 1, j - num2, 3, num2);
22080 }
22081 return true;
22082 }
22083 }
22084 return false;
22085 }
static bool IsTileTypeFitForTree(ushort type)
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)
static bool DefaultTreeWallTest(int wallType)
static bool notTheBees
Definition WorldGen.cs:1164

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