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

◆ GetMeleeCollisionData()

static void Terraria.NPC.GetMeleeCollisionData ( Rectangle victimHitbox,
int enemyIndex,
ref int specialHitSetter,
ref float damageMultiplier,
ref Rectangle npcRect )
inlinestatic

Definition at line 91619 of file NPC.cs.

91620 {
91621 NPC nPC = Main.npc[enemyIndex];
91622 if (((nPC.type >= 430 && nPC.type <= 436) || nPC.type == 591) && nPC.ai[2] > 5f)
91623 {
91624 int num = 34;
91625 if (nPC.spriteDirection < 0)
91626 {
91627 npcRect.X -= num;
91628 npcRect.Width += num;
91629 }
91630 else
91631 {
91632 npcRect.Width += num;
91633 }
91634 damageMultiplier *= 1.25f;
91635 }
91636 else if (nPC.type >= 494 && nPC.type <= 495 && nPC.ai[2] > 5f)
91637 {
91638 int num2 = 18;
91639 if (nPC.spriteDirection < 0)
91640 {
91641 npcRect.X -= num2;
91642 npcRect.Width += num2;
91643 }
91644 else
91645 {
91646 npcRect.Width += num2;
91647 }
91648 damageMultiplier *= 1.25f;
91649 }
91650 else if (nPC.type == 460)
91651 {
91652 Rectangle rectangle = new Rectangle(0, 0, 30, 14);
91653 rectangle.X = (int)nPC.Center.X;
91654 if (nPC.direction < 0)
91655 {
91656 rectangle.X -= rectangle.Width;
91657 }
91658 rectangle.Y = (int)nPC.position.Y + nPC.height - 20;
91659 if (victimHitbox.Intersects(rectangle))
91660 {
91662 damageMultiplier *= 1.35f;
91663 }
91664 }
91665 else if (nPC.type == 417 && nPC.ai[0] == 6f && nPC.ai[3] > 0f && nPC.ai[3] < 4f)
91666 {
91667 Rectangle rectangle2 = Utils.CenteredRectangle(nPC.Center, new Vector2(100f));
91668 if (victimHitbox.Intersects(rectangle2))
91669 {
91671 damageMultiplier *= 1.35f;
91672 }
91673 }
91674 else if (nPC.type == 466)
91675 {
91676 Rectangle rectangle3 = new Rectangle(0, 0, 30, 8);
91677 rectangle3.X = (int)nPC.Center.X;
91678 if (nPC.direction < 0)
91679 {
91680 rectangle3.X -= rectangle3.Width;
91681 }
91682 rectangle3.Y = (int)nPC.position.Y + nPC.height - 32;
91683 if (victimHitbox.Intersects(rectangle3))
91684 {
91686 damageMultiplier *= 1.75f;
91687 }
91688 }
91689 else if (nPC.type == 576 || nPC.type == 577)
91690 {
91691 NPC nPC2 = nPC;
91692 bool flag = true;
91693 int y = nPC2.frame.Y;
91694 int num3 = 0;
91695 int num4 = 0;
91696 Rectangle rectangle4 = new Rectangle(0, 0, 30, 8);
91697 switch (y)
91698 {
91699 case 15:
91700 specialHitSetter = 2;
91701 rectangle4.Width = 120;
91702 rectangle4.Height = 30;
91703 num4 = 24;
91704 break;
91705 case 16:
91706 specialHitSetter = 2;
91707 rectangle4.Width = 120;
91708 rectangle4.Height = 60;
91709 num3 = 10;
91710 break;
91711 case 17:
91712 specialHitSetter = 2;
91713 rectangle4.Width = 100;
91714 rectangle4.Height = 90;
91715 num3 = 50;
91716 break;
91717 case 18:
91718 specialHitSetter = 2;
91719 rectangle4.Width = 100;
91720 rectangle4.Height = 50;
91721 num3 = 90;
91722 num4 = 10;
91723 break;
91724 default:
91725 flag = false;
91726 break;
91727 }
91728 if (flag)
91729 {
91730 rectangle4.X = (int)nPC2.Center.X - num3 * nPC2.direction;
91731 if (nPC2.direction < 0)
91732 {
91733 rectangle4.X -= rectangle4.Width;
91734 }
91735 rectangle4.Y = (int)nPC2.Center.Y - rectangle4.Height + num4;
91736 if (victimHitbox.Intersects(rectangle4))
91737 {
91739 damageMultiplier *= 1.75f;
91740 }
91741 }
91742 }
91743 else if ((nPC.type == 552 || nPC.type == 553 || nPC.type == 554) && nPC.ai[0] > 0f && nPC.ai[0] < 24f)
91744 {
91745 Rectangle rectangle5 = new Rectangle(0, 0, 34, 14);
91746 rectangle5.X = (int)nPC.Center.X;
91747 if (nPC.direction < 0)
91748 {
91749 rectangle5.X -= rectangle5.Width;
91750 }
91751 rectangle5.Y = (int)nPC.position.Y + nPC.height - 20;
91752 if (victimHitbox.Intersects(rectangle5))
91753 {
91755 damageMultiplier *= 1.35f;
91756 }
91757 }
91758 else
91759 {
91760 if (nPC.type != 668)
91761 {
91762 return;
91763 }
91764 npcRect.Height -= 80;
91765 NPC nPC3 = nPC;
91766 bool flag2 = true;
91767 int y2 = nPC3.frame.Y;
91768 int num5 = 0;
91769 int num6 = 0;
91770 Rectangle rectangle6 = new Rectangle(0, 0, 30, 8);
91771 if (y2 == 15)
91772 {
91773 rectangle6.Width = 64;
91774 rectangle6.Height = 180;
91775 num6 = 80;
91776 num5 = -42;
91777 if (nPC3.ai[0] == 4f)
91778 {
91779 flag2 = false;
91780 }
91781 }
91782 else
91783 {
91784 flag2 = false;
91785 }
91786 if (flag2)
91787 {
91788 rectangle6.X = (int)nPC3.Center.X - num5 * nPC3.direction;
91789 if (nPC3.direction < 0)
91790 {
91791 rectangle6.X -= rectangle6.Width;
91792 }
91793 rectangle6.Y = (int)nPC3.Center.Y - rectangle6.Height + num6;
91794 if (victimHitbox.Intersects(rectangle6))
91795 {
91797 }
91798 }
91799 }
91800 }

References Terraria.Utils.CenteredRectangle(), and Terraria.Main.npc.

Referenced by Terraria.Player.Update_NPCCollision().