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

◆ OpenDoor()

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

Definition at line 32348 of file WorldGen.cs.

32349 {
32350 int num = 0;
32351 if (Main.tile[i, j - 1] == null)
32352 {
32353 Main.tile[i, j - 1] = new Tile();
32354 }
32355 if (Main.tile[i, j - 2] == null)
32356 {
32357 Main.tile[i, j - 2] = new Tile();
32358 }
32359 if (Main.tile[i, j + 1] == null)
32360 {
32361 Main.tile[i, j + 1] = new Tile();
32362 }
32363 if (Main.tile[i, j] == null)
32364 {
32365 Main.tile[i, j] = new Tile();
32366 }
32367 Tile tile = Main.tile[i, j];
32368 if (tile.type != 10)
32369 {
32370 return false;
32371 }
32372 if (IsLockedDoor(tile))
32373 {
32374 return false;
32375 }
32376 short num2 = 0;
32377 int num3 = tile.frameY;
32378 int num4 = 0;
32379 while (num3 >= 54)
32380 {
32381 num3 -= 54;
32382 num4++;
32383 }
32384 if (tile.frameX >= 54)
32385 {
32386 int num5 = tile.frameX / 54;
32387 num4 += 36 * num5;
32388 num2 += (short)(72 * num5);
32389 }
32390 num = j - num3 / 18;
32391 int num6 = i;
32392 TileColorCache cache = Main.tile[num6, num].BlockColorAndCoating();
32393 if (Main.tile[num6, num + 1] == null)
32394 {
32395 Main.tile[num6, num + 1] = new Tile();
32396 }
32397 TileColorCache cache2 = Main.tile[num6, num + 1].BlockColorAndCoating();
32398 if (Main.tile[num6, num + 2] == null)
32399 {
32400 Main.tile[num6, num + 2] = new Tile();
32401 }
32402 TileColorCache cache3 = Main.tile[num6, num + 2].BlockColorAndCoating();
32403 int num7;
32404 if (direction == -1)
32405 {
32406 num6 = i - 1;
32407 num2 += 36;
32408 num7 = i - 1;
32409 }
32410 else
32411 {
32412 num6 = i;
32413 num7 = i + 1;
32414 }
32415 for (int k = num; k < num + 3; k++)
32416 {
32417 if (Main.tile[num7, k] == null)
32418 {
32419 Main.tile[num7, k] = new Tile();
32420 }
32421 if (Main.tile[num7, k].active())
32422 {
32423 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)
32424 {
32425 return false;
32426 }
32427 KillTile(num7, k);
32428 }
32429 }
32430 if (Main.netMode != 1 && Wiring.running)
32431 {
32432 Wiring.SkipWire(num6, num);
32433 Wiring.SkipWire(num6, num + 1);
32434 Wiring.SkipWire(num6, num + 2);
32435 Wiring.SkipWire(num6 + 1, num);
32436 Wiring.SkipWire(num6 + 1, num + 1);
32437 Wiring.SkipWire(num6 + 1, num + 2);
32438 }
32439 int num8 = num4 % 36 * 54;
32440 SoundEngine.PlaySound(8, i * 16, j * 16);
32441 Main.tile[num6, num].active(active: true);
32442 Main.tile[num6, num].type = 11;
32443 Main.tile[num6, num].frameY = (short)num8;
32444 Main.tile[num6, num].frameX = num2;
32445 Main.tile[num6, num].UseBlockColors(cache);
32446 if (Main.tile[num6 + 1, num] == null)
32447 {
32448 Main.tile[num6 + 1, num] = new Tile();
32449 }
32450 Main.tile[num6 + 1, num].active(active: true);
32451 Main.tile[num6 + 1, num].type = 11;
32452 Main.tile[num6 + 1, num].frameY = (short)num8;
32453 Main.tile[num6 + 1, num].frameX = (short)(num2 + 18);
32454 Main.tile[num6 + 1, num].UseBlockColors(cache);
32455 if (Main.tile[num6, num + 1] == null)
32456 {
32457 Main.tile[num6, num + 1] = new Tile();
32458 }
32459 Main.tile[num6, num + 1].active(active: true);
32460 Main.tile[num6, num + 1].type = 11;
32461 Main.tile[num6, num + 1].frameY = (short)(num8 + 18);
32462 Main.tile[num6, num + 1].frameX = num2;
32463 Main.tile[num6, num + 1].UseBlockColors(cache2);
32464 if (Main.tile[num6 + 1, num + 1] == null)
32465 {
32466 Main.tile[num6 + 1, num + 1] = new Tile();
32467 }
32468 Main.tile[num6 + 1, num + 1].active(active: true);
32469 Main.tile[num6 + 1, num + 1].type = 11;
32470 Main.tile[num6 + 1, num + 1].frameY = (short)(num8 + 18);
32471 Main.tile[num6 + 1, num + 1].frameX = (short)(num2 + 18);
32472 Main.tile[num6 + 1, num + 1].UseBlockColors(cache2);
32473 if (Main.tile[num6, num + 2] == null)
32474 {
32475 Main.tile[num6, num + 2] = new Tile();
32476 }
32477 Main.tile[num6, num + 2].active(active: true);
32478 Main.tile[num6, num + 2].type = 11;
32479 Main.tile[num6, num + 2].frameY = (short)(num8 + 36);
32480 Main.tile[num6, num + 2].frameX = num2;
32481 Main.tile[num6, num + 2].UseBlockColors(cache3);
32482 if (Main.tile[num6 + 1, num + 2] == null)
32483 {
32484 Main.tile[num6 + 1, num + 2] = new Tile();
32485 }
32486 Main.tile[num6 + 1, num + 2].active(active: true);
32487 Main.tile[num6 + 1, num + 2].type = 11;
32488 Main.tile[num6 + 1, num + 2].frameY = (short)(num8 + 36);
32489 Main.tile[num6 + 1, num + 2].frameX = (short)(num2 + 18);
32490 Main.tile[num6 + 1, num + 2].UseBlockColors(cache3);
32491 for (int l = num6 - 1; l <= num6 + 2; l++)
32492 {
32493 for (int m = num - 1; m <= num + 2; m++)
32494 {
32495 TileFrame(l, m);
32496 }
32497 }
32498 return true;
32499 }
static void PlaySound(int type, Vector2 position, int style=1)
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.Audio.SoundEngine.PlaySound(), Terraria.Wiring.running, Terraria.Wiring.SkipWire(), Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileCut, and Terraria.Tile.type.

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().