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

◆ MakeDungeon_Lights()

static void Terraria.WorldGen.MakeDungeon_Lights ( ushort tileType,
ref int failCount,
int failMax,
ref int numAdd,
int[] roomWall )
inlinestaticprivate

Definition at line 27654 of file WorldGen.cs.

27655 {
27656 int[] array = new int[3]
27657 {
27658 genRand.Next(7),
27659 genRand.Next(7),
27660 0
27661 };
27662 while (array[1] == array[0])
27663 {
27664 array[1] = genRand.Next(7);
27665 }
27666 array[2] = genRand.Next(7);
27667 while (array[2] == array[0] || array[2] == array[1])
27668 {
27669 array[2] = genRand.Next(7);
27670 }
27671 while (numAdd < Main.maxTilesX / 150)
27672 {
27673 failCount++;
27674 int num = genRand.Next(GenVars.dMinX, GenVars.dMaxX);
27675 int num2 = genRand.Next(GenVars.dMinY, GenVars.dMaxY);
27676 if (Main.wallDungeon[Main.tile[num, num2].wall])
27677 {
27678 for (int num3 = num2; num3 > GenVars.dMinY; num3--)
27679 {
27680 if (Main.tile[num, num3 - 1].active() && Main.tile[num, num3 - 1].type == tileType)
27681 {
27682 bool flag = false;
27683 for (int i = num - 15; i < num + 15; i++)
27684 {
27685 for (int j = num3 - 15; j < num3 + 15; j++)
27686 {
27687 if (i > 0 && i < Main.maxTilesX && j > 0 && j < Main.maxTilesY && (Main.tile[i, j].type == 42 || Main.tile[i, j].type == 34))
27688 {
27689 flag = true;
27690 break;
27691 }
27692 }
27693 }
27694 if (Main.tile[num - 1, num3].active() || Main.tile[num + 1, num3].active() || Main.tile[num - 1, num3 + 1].active() || Main.tile[num + 1, num3 + 1].active() || Main.tile[num, num3 + 2].active())
27695 {
27696 flag = true;
27697 }
27698 if (flag)
27699 {
27700 break;
27701 }
27702 bool flag2 = false;
27703 if (!flag2 && genRand.Next(7) == 0)
27704 {
27705 int style = 27;
27706 switch (roomWall[0])
27707 {
27708 case 7:
27709 style = 27;
27710 break;
27711 case 8:
27712 style = 28;
27713 break;
27714 case 9:
27715 style = 29;
27716 break;
27717 }
27718 bool flag3 = false;
27719 for (int k = 0; k < 15; k++)
27720 {
27721 if (SolidTile(num, num3 + k))
27722 {
27723 flag3 = true;
27724 break;
27725 }
27726 }
27727 if (!flag3)
27728 {
27729 PlaceChand(num, num3, 34, style);
27730 }
27731 if (Main.tile[num, num3].type == 34)
27732 {
27733 flag2 = true;
27734 failCount = 0;
27735 numAdd++;
27736 for (int l = 0; l < 1000; l++)
27737 {
27738 int num4 = num + genRand.Next(-12, 13);
27739 int num5 = num3 + genRand.Next(3, 21);
27740 if (Main.tile[num4, num5].active() || Main.tile[num4, num5 + 1].active() || !Main.tileDungeon[Main.tile[num4 - 1, num5].type] || !Main.tileDungeon[Main.tile[num4 + 1, num5].type] || !Collision.CanHit(new Point(num4 * 16, num5 * 16), 16, 16, new Point(num * 16, num3 * 16 + 1), 16, 16))
27741 {
27742 continue;
27743 }
27744 if (((SolidTile(num4 - 1, num5) && Main.tile[num4 - 1, num5].type != 10) || (SolidTile(num4 + 1, num5) && Main.tile[num4 + 1, num5].type != 10) || SolidTile(num4, num5 + 1)) && Main.wallDungeon[Main.tile[num4, num5].wall] && (Main.tileDungeon[Main.tile[num4 - 1, num5].type] || Main.tileDungeon[Main.tile[num4 + 1, num5].type]))
27745 {
27746 PlaceTile(num4, num5, 136, mute: true);
27747 }
27748 if (!Main.tile[num4, num5].active())
27749 {
27750 continue;
27751 }
27752 while (num4 != num || num5 != num3)
27753 {
27754 Main.tile[num4, num5].wire(wire: true);
27755 if (num4 > num)
27756 {
27757 num4--;
27758 }
27759 if (num4 < num)
27760 {
27761 num4++;
27762 }
27763 Main.tile[num4, num5].wire(wire: true);
27764 if (num5 > num3)
27765 {
27766 num5--;
27767 }
27768 if (num5 < num3)
27769 {
27770 num5++;
27771 }
27772 Main.tile[num4, num5].wire(wire: true);
27773 }
27774 if (genRand.Next(3) > 0)
27775 {
27776 Main.tile[num, num3].frameX = 18;
27777 Main.tile[num, num3 + 1].frameX = 18;
27778 }
27779 break;
27780 }
27781 }
27782 }
27783 if (flag2)
27784 {
27785 break;
27786 }
27787 int style2 = array[0];
27788 if (Main.tile[num, num3].wall == roomWall[1])
27789 {
27790 style2 = array[1];
27791 }
27792 if (Main.tile[num, num3].wall == roomWall[2])
27793 {
27794 style2 = array[2];
27795 }
27796 Place1x2Top(num, num3, 42, style2);
27797 if (Main.tile[num, num3].type != 42)
27798 {
27799 break;
27800 }
27801 flag2 = true;
27802 failCount = 0;
27803 numAdd++;
27804 for (int m = 0; m < 1000; m++)
27805 {
27806 int num6 = num + genRand.Next(-12, 13);
27807 int num7 = num3 + genRand.Next(3, 21);
27808 if (Main.tile[num6, num7].active() || Main.tile[num6, num7 + 1].active() || Main.tile[num6 - 1, num7].type == 48 || Main.tile[num6 + 1, num7].type == 48 || !Collision.CanHit(new Point(num6 * 16, num7 * 16), 16, 16, new Point(num * 16, num3 * 16 + 1), 16, 16))
27809 {
27810 continue;
27811 }
27812 if ((SolidTile(num6 - 1, num7) && Main.tile[num6 - 1, num7].type != 10) || (SolidTile(num6 + 1, num7) && Main.tile[num6 + 1, num7].type != 10) || SolidTile(num6, num7 + 1))
27813 {
27814 PlaceTile(num6, num7, 136, mute: true);
27815 }
27816 if (!Main.tile[num6, num7].active())
27817 {
27818 continue;
27819 }
27820 while (num6 != num || num7 != num3)
27821 {
27822 Main.tile[num6, num7].wire(wire: true);
27823 if (num6 > num)
27824 {
27825 num6--;
27826 }
27827 if (num6 < num)
27828 {
27829 num6++;
27830 }
27831 Main.tile[num6, num7].wire(wire: true);
27832 if (num7 > num3)
27833 {
27834 num7--;
27835 }
27836 if (num7 < num3)
27837 {
27838 num7++;
27839 }
27840 Main.tile[num6, num7].wire(wire: true);
27841 }
27842 if (genRand.Next(3) > 0)
27843 {
27844 Main.tile[num, num3].frameX = 18;
27845 Main.tile[num, num3 + 1].frameX = 18;
27846 }
27847 break;
27848 }
27849 break;
27850 }
27851 }
27852 }
27853 if (failCount > failMax)
27854 {
27855 numAdd++;
27856 failCount = 0;
27857 }
27858 }
27859 }
static void PlaceChand(int x, int y, ushort type, int style=0)
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 void Place1x2Top(int x, int y, ushort type, int style)

References System.array, Terraria.Collision.CanHit(), Terraria.WorldBuilding.GenVars.dMaxX, Terraria.WorldBuilding.GenVars.dMaxY, Terraria.WorldBuilding.GenVars.dMinX, Terraria.WorldBuilding.GenVars.dMinY, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Enums.SolidTile, Terraria.Main.tile, Terraria.Main.tileDungeon, and Terraria.Main.wallDungeon.