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

◆ OpenDoor()

static bool Terraria.WorldGen.OpenDoor ( int i,
int j,
int direction )
inlinestatic

Definition at line 33822 of file WorldGen.cs.

33823 {
33824 int num = 0;
33825 if (Main.tile[i, j - 1] == null)
33826 {
33827 Main.tile[i, j - 1] = default(Tile);
33828 }
33829 if (Main.tile[i, j - 2] == null)
33830 {
33831 Main.tile[i, j - 2] = default(Tile);
33832 }
33833 if (Main.tile[i, j + 1] == null)
33834 {
33835 Main.tile[i, j + 1] = default(Tile);
33836 }
33837 if (Main.tile[i, j] == null)
33838 {
33839 Main.tile[i, j] = default(Tile);
33840 }
33841 Tile tile = Main.tile[i, j];
33842 if (TileLoader.OpenDoorID(tile) < 0)
33843 {
33844 return false;
33845 }
33846 if (IsLockedDoor(tile))
33847 {
33848 return false;
33849 }
33850 short num2 = 0;
33851 int num3 = tile.frameY;
33852 int num4 = 0;
33853 while (num3 >= 54)
33854 {
33855 num3 -= 54;
33856 num4++;
33857 }
33858 if (tile.frameX >= 54)
33859 {
33860 int num5 = tile.frameX / 54;
33861 num4 += 36 * num5;
33862 num2 += (short)(72 * num5);
33863 }
33864 num = j - num3 / 18;
33865 int num6 = i;
33866 TileColorCache cache = Main.tile[num6, num].BlockColorAndCoating();
33867 if (Main.tile[num6, num + 1] == null)
33868 {
33869 Main.tile[num6, num + 1] = default(Tile);
33870 }
33871 TileColorCache cache2 = Main.tile[num6, num + 1].BlockColorAndCoating();
33872 if (Main.tile[num6, num + 2] == null)
33873 {
33874 Main.tile[num6, num + 2] = default(Tile);
33875 }
33876 TileColorCache cache3 = Main.tile[num6, num + 2].BlockColorAndCoating();
33877 int num7;
33878 if (direction == -1)
33879 {
33880 num6 = i - 1;
33881 num2 += 36;
33882 num7 = i - 1;
33883 }
33884 else
33885 {
33886 num6 = i;
33887 num7 = i + 1;
33888 }
33889 for (int k = num; k < num + 3; k++)
33890 {
33891 if (Main.tile[num7, k] == null)
33892 {
33893 Main.tile[num7, k] = default(Tile);
33894 }
33895 if (Main.tile[num7, k].active())
33896 {
33897 if (!Main.tileCut[Main.tile[num7, k].type] && Main.tile[num7, k].type != 3 && Main.tile[num7, k].type != 24 && Main.tile[num7, k].type != 52 && Main.tile[num7, k].type != 61 && Main.tile[num7, k].type != 62 && Main.tile[num7, k].type != 69 && Main.tile[num7, k].type != 655 && Main.tile[num7, k].type != 71 && Main.tile[num7, k].type != 73 && Main.tile[num7, k].type != 74 && Main.tile[num7, k].type != 110 && Main.tile[num7, k].type != 113 && Main.tile[num7, k].type != 115 && Main.tile[num7, k].type != 165)
33898 {
33899 return false;
33900 }
33901 KillTile(num7, k);
33902 }
33903 }
33904 if (Main.netMode != 1 && Wiring.running)
33905 {
33906 Wiring.SkipWire(num6, num);
33907 Wiring.SkipWire(num6, num + 1);
33908 Wiring.SkipWire(num6, num + 2);
33909 Wiring.SkipWire(num6 + 1, num);
33910 Wiring.SkipWire(num6 + 1, num + 1);
33911 Wiring.SkipWire(num6 + 1, num + 2);
33912 }
33913 int num8 = num4 % 36 * 54;
33914 SoundEngine.PlaySound(8, i * 16, j * 16);
33915 ushort openDoorID = (ushort)TileLoader.OpenDoorID(Main.tile[i, j]);
33916 Main.tile[num6, num].active(active: true);
33917 Main.tile[num6, num].type = openDoorID;
33918 Main.tile[num6, num].frameY = (short)num8;
33919 Main.tile[num6, num].frameX = num2;
33920 Main.tile[num6, num].UseBlockColors(cache);
33921 if (Main.tile[num6 + 1, num] == null)
33922 {
33923 Main.tile[num6 + 1, num] = default(Tile);
33924 }
33925 Main.tile[num6 + 1, num].active(active: true);
33926 Main.tile[num6 + 1, num].type = openDoorID;
33927 Main.tile[num6 + 1, num].frameY = (short)num8;
33928 Main.tile[num6 + 1, num].frameX = (short)(num2 + 18);
33929 Main.tile[num6 + 1, num].UseBlockColors(cache);
33930 if (Main.tile[num6, num + 1] == null)
33931 {
33932 Main.tile[num6, num + 1] = default(Tile);
33933 }
33934 Main.tile[num6, num + 1].active(active: true);
33935 Main.tile[num6, num + 1].type = openDoorID;
33936 Main.tile[num6, num + 1].frameY = (short)(num8 + 18);
33937 Main.tile[num6, num + 1].frameX = num2;
33938 Main.tile[num6, num + 1].UseBlockColors(cache2);
33939 if (Main.tile[num6 + 1, num + 1] == null)
33940 {
33941 Main.tile[num6 + 1, num + 1] = default(Tile);
33942 }
33943 Main.tile[num6 + 1, num + 1].active(active: true);
33944 Main.tile[num6 + 1, num + 1].type = openDoorID;
33945 Main.tile[num6 + 1, num + 1].frameY = (short)(num8 + 18);
33946 Main.tile[num6 + 1, num + 1].frameX = (short)(num2 + 18);
33947 Main.tile[num6 + 1, num + 1].UseBlockColors(cache2);
33948 if (Main.tile[num6, num + 2] == null)
33949 {
33950 Main.tile[num6, num + 2] = default(Tile);
33951 }
33952 Main.tile[num6, num + 2].active(active: true);
33953 Main.tile[num6, num + 2].type = openDoorID;
33954 Main.tile[num6, num + 2].frameY = (short)(num8 + 36);
33955 Main.tile[num6, num + 2].frameX = num2;
33956 Main.tile[num6, num + 2].UseBlockColors(cache3);
33957 if (Main.tile[num6 + 1, num + 2] == null)
33958 {
33959 Main.tile[num6 + 1, num + 2] = default(Tile);
33960 }
33961 Main.tile[num6 + 1, num + 2].active(active: true);
33962 Main.tile[num6 + 1, num + 2].type = openDoorID;
33963 Main.tile[num6 + 1, num + 2].frameY = (short)(num8 + 36);
33964 Main.tile[num6 + 1, num + 2].frameX = (short)(num2 + 18);
33965 Main.tile[num6 + 1, num + 2].UseBlockColors(cache3);
33966 for (int l = num6 - 1; l <= num6 + 2; l++)
33967 {
33968 for (int m = num - 1; m <= num + 2; m++)
33969 {
33970 TileFrame(l, m);
33971 }
33972 }
33973 return true;
33974 }
static SlotId PlaySound(in SoundStyle? style, Vector2? position=null, SoundUpdateCallback? updateCallback=null)
Attempts to play a sound style with the provided sound style (if it's not null), and returns a valid ...
static int OpenDoorID(Tile tile)
This serves as the central class from which tile-related functions are supported and carried out.
Definition TileLoader.cs:23
static void KillTile(int i, int j, bool fail=false, bool effectOnly=false, bool noItem=false)
static bool IsLockedDoor(int x, int y)
static void TileFrame(int i, int j, bool resetFrame=false, bool noBreak=false)

References Terraria.Tile.frameX, Terraria.Tile.frameY, Terraria.Main.netMode, Terraria.ModLoader.TileLoader.OpenDoorID(), Terraria.Audio.SoundEngine.PlaySound(), Terraria.Wiring.running, Terraria.Wiring.SkipWire(), Terraria.Main.tile, and Terraria.Main.tileCut.

Referenced by Terraria.NPC.AI_003_Fighters(), Terraria.NPC.AI_007_TownEntities(), Terraria.NPC.AI_107_ImprovedWalkers(), Terraria.MessageBuffer.GetData(), Terraria.Wiring.HitWireSingle(), Terraria.Player.TileInteractionsUse(), and Terraria.GameContent.DoorOpeningHelper.CommonDoorOpeningInfoProvider.TryOpenDoor().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: