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

◆ AI_026_Unicorns()

void Terraria.NPC.AI_026_Unicorns ( )
inlineprivate

Definition at line 54580 of file NPC.cs.

54581 {
54582 int num = 30;
54583 int num2 = 10;
54584 bool flag = false;
54585 bool flag2 = false;
54586 bool flag3 = false;
54587 if (velocity.Y == 0f && ((velocity.X > 0f && direction < 0) || (velocity.X < 0f && direction > 0)))
54588 {
54589 flag2 = true;
54590 ai[3] += 1f;
54591 }
54592 if (type == 546)
54593 {
54594 num2 = 4;
54595 bool flag4 = velocity.Y == 0f;
54596 for (int i = 0; i < 200; i++)
54597 {
54598 if (i != whoAmI && Main.npc[i].active && Main.npc[i].type == type && Math.Abs(position.X - Main.npc[i].position.X) + Math.Abs(position.Y - Main.npc[i].position.Y) < (float)width)
54599 {
54600 if (position.X < Main.npc[i].position.X)
54601 {
54602 velocity.X -= 0.05f;
54603 }
54604 else
54605 {
54606 velocity.X += 0.05f;
54607 }
54608 if (position.Y < Main.npc[i].position.Y)
54609 {
54610 velocity.Y -= 0.05f;
54611 }
54612 else
54613 {
54614 velocity.Y += 0.05f;
54615 }
54616 }
54617 }
54618 if (flag4)
54619 {
54620 velocity.Y = 0f;
54621 }
54622 }
54623 if (type == 315)
54624 {
54625 int num3 = 480;
54626 if (localAI[0]++ >= (float)num3)
54627 {
54628 localAI[0] = 0f;
54629 int num4 = target;
54630 if (Main.netMode != 1 && num4 != 255)
54631 {
54633 Projectile.NewProjectile(GetSpawnSourceForNPCFromNPCAI(), base.Center + Main.rand.NextVector2Circular(40f, 40f), new Vector2(velocity.X, Main.rand.NextFloatDirection() * 3f), 1001, attackDamage_ForProjectiles, 0f, Main.myPlayer, num4);
54634 }
54635 }
54636 Lighting.AddLight(base.Center, 0.4f, 0.36f, 0.2f);
54637 int num5 = frame.Height;
54638 if (num5 < 1)
54639 {
54640 num5 = 1;
54641 }
54642 int num6 = frame.Y / num5;
54643 if (num6 >= 4 && num6 <= 7)
54644 {
54645 Vector2 vector = base.Bottom + new Vector2(-30f, -8f);
54646 Vector2 vector2 = new Vector2(60f, 8f);
54647 if (Main.rand.Next(3) != 0)
54648 {
54649 Dust dust = Dust.NewDustPerfect(vector + new Vector2(Main.rand.NextFloat() * vector2.X, Main.rand.NextFloat() * vector2.Y), 6, velocity);
54650 dust.scale = 0.6f;
54651 dust.fadeIn = 1.1f;
54652 dust.noGravity = true;
54653 dust.noLight = true;
54654 }
54655 }
54656 }
54657 if (position.X == oldPosition.X || ai[3] >= (float)num || flag2)
54658 {
54659 ai[3] += 1f;
54660 flag3 = true;
54661 }
54662 else if (ai[3] > 0f)
54663 {
54664 ai[3] -= 1f;
54665 }
54666 if (ai[3] > (float)(num * num2))
54667 {
54668 ai[3] = 0f;
54669 }
54670 if (justHit)
54671 {
54672 ai[3] = 0f;
54673 }
54674 if (ai[3] == (float)num)
54675 {
54676 netUpdate = true;
54677 }
54678 Vector2 vector3 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
54679 float num7 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector3.X;
54680 float num8 = Main.player[target].position.Y - vector3.Y;
54681 float num9 = (float)Math.Sqrt(num7 * num7 + num8 * num8);
54682 if (num9 < 200f && !flag3)
54683 {
54684 ai[3] = 0f;
54685 }
54686 if (type == 410)
54687 {
54688 ai[1] += 1f;
54689 bool flag5 = ai[1] >= 240f;
54690 if (!flag5 && velocity.Y == 0f)
54691 {
54692 for (int j = 0; j < 255; j++)
54693 {
54694 if (Main.player[j].active && !Main.player[j].dead && Main.player[j].Distance(base.Center) < 800f && Main.player[j].Center.Y < base.Center.Y && Math.Abs(Main.player[j].Center.X - base.Center.X) < 20f)
54695 {
54696 flag5 = true;
54697 break;
54698 }
54699 }
54700 }
54701 if (flag5 && Main.netMode != 1)
54702 {
54703 for (int k = 0; k < 3; k++)
54704 {
54705 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, (Main.rand.NextFloat() - 0.5f) * 2f, -4f - 10f * Main.rand.NextFloat(), 538, 50, 0f, Main.myPlayer);
54706 }
54707 HitEffect(9999);
54708 active = false;
54709 return;
54710 }
54711 }
54712 else if (type == 423)
54713 {
54714 if (ai[2] == 1f)
54715 {
54716 ai[1] += 1f;
54717 velocity.X *= 0.7f;
54718 if (ai[1] < 30f)
54719 {
54720 Vector2 vector4 = base.Center + Vector2.UnitX * spriteDirection * -20f;
54721 Dust obj = Main.dust[Dust.NewDust(vector4, 0, 0, 242)];
54722 Vector2 vector5 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
54723 obj.position = vector4 + vector5 * 20f;
54724 obj.velocity = -vector5 * 2f;
54725 obj.scale = 0.5f + vector5.X * (float)(-spriteDirection);
54726 obj.fadeIn = 1f;
54727 obj.noGravity = true;
54728 }
54729 else if (ai[1] == 30f)
54730 {
54731 for (int l = 0; l < 20; l++)
54732 {
54733 Vector2 vector6 = base.Center + Vector2.UnitX * spriteDirection * -20f;
54734 Dust obj2 = Main.dust[Dust.NewDust(vector6, 0, 0, 242)];
54735 Vector2 vector7 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
54736 obj2.position = vector6 + vector7 * 4f;
54737 obj2.velocity = vector7 * 4f + Vector2.UnitX * Main.rand.NextFloat() * spriteDirection * -5f;
54738 obj2.scale = 0.5f + vector7.X * (float)(-spriteDirection);
54739 obj2.fadeIn = 1f;
54740 obj2.noGravity = true;
54741 }
54742 }
54743 if (velocity.X > -0.5f && velocity.X < 0.5f)
54744 {
54745 velocity.X = 0f;
54746 }
54747 if (ai[1] == 30f && Main.netMode != 1)
54748 {
54750 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + (float)(spriteDirection * -20), base.Center.Y, spriteDirection * -7, 0f, 575, attackDamage_ForProjectiles2, 0f, Main.myPlayer, target);
54751 }
54752 if (ai[1] >= 60f)
54753 {
54754 ai[1] = -Main.rand.Next(320, 601);
54755 ai[2] = 0f;
54756 }
54757 }
54758 else
54759 {
54760 ai[1] += 1f;
54761 if (ai[1] >= 180f && num9 < 500f && velocity.Y == 0f)
54762 {
54763 flag = true;
54764 ai[1] = 0f;
54765 ai[2] = 1f;
54766 netUpdate = true;
54767 }
54768 else if (velocity.Y == 0f && num9 < 100f && Math.Abs(velocity.X) > 3f && ((base.Center.X < Main.player[target].Center.X && velocity.X > 0f) || (base.Center.X > Main.player[target].Center.X && velocity.X < 0f)))
54769 {
54770 velocity.Y -= 4f;
54771 }
54772 }
54773 }
54774 else if (type == 155 || type == 329)
54775 {
54776 if (velocity.Y == 0f && num9 < 100f && Math.Abs(velocity.X) > 3f && ((position.X + (float)(width / 2) < Main.player[target].position.X + (float)(Main.player[target].width / 2) && velocity.X > 0f) || (position.X + (float)(width / 2) > Main.player[target].position.X + (float)(Main.player[target].width / 2) && velocity.X < 0f)))
54777 {
54778 velocity.Y -= 4f;
54779 }
54780 }
54781 else if (type == 546 && velocity.Y == 0f && Math.Abs(velocity.X) > 3f && ((base.Center.X < Main.player[target].Center.X && velocity.X > 0f) || (base.Center.X > Main.player[target].Center.X && velocity.X < 0f)))
54782 {
54783 velocity.Y -= 4f;
54784 SoundEngine.PlaySound(3, base.Center, 11);
54785 }
54786 if (type == 546 && !Main.player[target].ZoneDesert)
54787 {
54788 int num10 = direction;
54789 TargetClosest();
54790 if (!Main.player[target].ZoneDesert)
54791 {
54792 EncourageDespawn(10);
54793 ai[3] = num;
54794 direction = num10;
54795 }
54796 }
54797 if (ai[3] < (float)num)
54798 {
54799 if ((type == 329 || type == 315) && !Main.pumpkinMoon)
54800 {
54801 EncourageDespawn(10);
54802 }
54803 else
54804 {
54805 TargetClosest();
54806 }
54807 }
54808 else
54809 {
54810 if (velocity.X == 0f)
54811 {
54812 if (velocity.Y == 0f)
54813 {
54814 ai[0] += 1f;
54815 if (ai[0] >= 2f)
54816 {
54817 direction *= -1;
54819 ai[0] = 0f;
54820 }
54821 }
54822 }
54823 else
54824 {
54825 ai[0] = 0f;
54826 }
54827 directionY = -1;
54828 if (direction == 0)
54829 {
54830 direction = 1;
54831 }
54832 }
54833 float num11 = 6f;
54834 float num12 = 0.07f;
54835 if (!flag && (velocity.Y == 0f || wet || (velocity.X <= 0f && direction < 0) || (velocity.X >= 0f && direction > 0)))
54836 {
54837 if (type == 155)
54838 {
54839 if (velocity.X > 0f && direction < 0)
54840 {
54841 velocity.X *= 0.95f;
54842 }
54843 if (velocity.X < 0f && direction > 0)
54844 {
54845 velocity.X *= 0.95f;
54846 }
54847 }
54848 else if (type == 329)
54849 {
54850 if (velocity.X > 0f && direction < 0)
54851 {
54852 velocity.X *= 0.9f;
54853 }
54854 if (velocity.X < 0f && direction > 0)
54855 {
54856 velocity.X *= 0.9f;
54857 }
54858 if (direction > 0 && velocity.X < 3f)
54859 {
54860 velocity.X += 0.1f;
54861 }
54863 {
54864 velocity.X -= 0.1f;
54865 }
54866 }
54867 else if (type == 315)
54868 {
54869 if (velocity.X > 0f && direction < 0)
54870 {
54871 velocity.X *= 0.95f;
54872 }
54873 if (velocity.X < 0f && direction > 0)
54874 {
54875 velocity.X *= 0.95f;
54876 }
54877 if (velocity.X < 0f - num11 || velocity.X > num11)
54878 {
54879 if (velocity.Y == 0f)
54880 {
54881 velocity *= 0.8f;
54882 }
54883 }
54884 else if (velocity.X < num11 && direction == 1)
54885 {
54886 velocity.X += 0.07f;
54887 if (velocity.X > num11)
54888 {
54889 velocity.X = num11;
54890 }
54891 }
54892 else if (velocity.X > 0f - num11 && direction == -1)
54893 {
54894 velocity.X -= 0.07f;
54895 if (velocity.X < 0f - num11)
54896 {
54897 velocity.X = 0f - num11;
54898 }
54899 }
54900 }
54901 else if (type == 410)
54902 {
54903 if (Math.Sign(velocity.X) != direction)
54904 {
54905 velocity.X *= 0.9f;
54906 }
54907 num11 = 6f;
54908 num12 = 0.2f;
54909 }
54910 else if (type == 423)
54911 {
54912 if (Math.Sign(velocity.X) != direction)
54913 {
54914 velocity.X *= 0.85f;
54915 }
54916 num11 = 10f;
54917 num12 = 0.2f;
54918 }
54919 else if (type == 546)
54920 {
54921 if (Math.Sign(velocity.X) != direction)
54922 {
54923 velocity.X *= 0.92f;
54924 }
54925 float num13 = MathHelper.Lerp(0.6f, 1f, Math.Abs(Main.windSpeedTarget)) * (float)Math.Sign(Main.windSpeedTarget);
54926 if (!Main.player[target].ZoneSandstorm)
54927 {
54928 num13 = 0f;
54929 }
54930 num11 = 4f + num13 * (float)direction * 3f;
54931 num12 = 0.05f;
54932 }
54933 if (velocity.X < 0f - num11 || velocity.X > num11)
54934 {
54935 if (velocity.Y == 0f)
54936 {
54937 velocity *= 0.8f;
54938 }
54939 }
54940 else if (velocity.X < num11 && direction == 1)
54941 {
54942 velocity.X += num12;
54943 if (velocity.X > num11)
54944 {
54945 velocity.X = num11;
54946 }
54947 }
54948 else if (velocity.X > 0f - num11 && direction == -1)
54949 {
54950 velocity.X -= num12;
54951 if (velocity.X < 0f - num11)
54952 {
54953 velocity.X = 0f - num11;
54954 }
54955 }
54956 }
54957 if (velocity.Y >= 0f)
54958 {
54959 int num14 = 0;
54960 if (velocity.X < 0f)
54961 {
54962 num14 = -1;
54963 }
54964 if (velocity.X > 0f)
54965 {
54966 num14 = 1;
54967 }
54969 vector8.X += velocity.X;
54970 int num15 = (int)((vector8.X + (float)(width / 2) + (float)((width / 2 + 1) * num14)) / 16f);
54971 int num16 = (int)((vector8.Y + (float)height - 1f) / 16f);
54972 if (Main.tile[num15, num16] == null)
54973 {
54974 Main.tile[num15, num16] = new Tile();
54975 }
54976 if (Main.tile[num15, num16 - 1] == null)
54977 {
54978 Main.tile[num15, num16 - 1] = new Tile();
54979 }
54980 if (Main.tile[num15, num16 - 2] == null)
54981 {
54982 Main.tile[num15, num16 - 2] = new Tile();
54983 }
54984 if (Main.tile[num15, num16 - 3] == null)
54985 {
54986 Main.tile[num15, num16 - 3] = new Tile();
54987 }
54988 if (Main.tile[num15, num16 + 1] == null)
54989 {
54990 Main.tile[num15, num16 + 1] = new Tile();
54991 }
54992 if ((float)(num15 * 16) < vector8.X + (float)width && (float)(num15 * 16 + 16) > vector8.X && ((Main.tile[num15, num16].nactive() && !Main.tile[num15, num16].topSlope() && !Main.tile[num15, num16 - 1].topSlope() && Main.tileSolid[Main.tile[num15, num16].type] && !Main.tileSolidTop[Main.tile[num15, num16].type]) || (Main.tile[num15, num16 - 1].halfBrick() && Main.tile[num15, num16 - 1].nactive())) && (!Main.tile[num15, num16 - 1].nactive() || !Main.tileSolid[Main.tile[num15, num16 - 1].type] || Main.tileSolidTop[Main.tile[num15, num16 - 1].type] || (Main.tile[num15, num16 - 1].halfBrick() && (!Main.tile[num15, num16 - 4].nactive() || !Main.tileSolid[Main.tile[num15, num16 - 4].type] || Main.tileSolidTop[Main.tile[num15, num16 - 4].type]))) && (!Main.tile[num15, num16 - 2].nactive() || !Main.tileSolid[Main.tile[num15, num16 - 2].type] || Main.tileSolidTop[Main.tile[num15, num16 - 2].type]) && (!Main.tile[num15, num16 - 3].nactive() || !Main.tileSolid[Main.tile[num15, num16 - 3].type] || Main.tileSolidTop[Main.tile[num15, num16 - 3].type]) && (!Main.tile[num15 - num14, num16 - 3].nactive() || !Main.tileSolid[Main.tile[num15 - num14, num16 - 3].type]))
54993 {
54994 float num17 = num16 * 16;
54995 if (Main.tile[num15, num16].halfBrick())
54996 {
54997 num17 += 8f;
54998 }
54999 if (Main.tile[num15, num16 - 1].halfBrick())
55000 {
55001 num17 -= 8f;
55002 }
55003 if (num17 < vector8.Y + (float)height)
55004 {
55005 float num18 = vector8.Y + (float)height - num17;
55006 if ((double)num18 <= 16.1)
55007 {
55008 gfxOffY += position.Y + (float)height - num17;
55009 position.Y = num17 - (float)height;
55010 if (num18 < 9f)
55011 {
55012 stepSpeed = 1f;
55013 }
55014 else
55015 {
55016 stepSpeed = 2f;
55017 }
55018 }
55019 }
55020 }
55021 }
55022 if (velocity.Y == 0f)
55023 {
55024 bool flag6 = true;
55025 int num19 = (int)(position.Y - 7f) / 16;
55026 int num20 = (int)(position.X - 7f) / 16;
55027 int num21 = (int)(position.X + (float)width + 7f) / 16;
55028 for (int m = num20; m <= num21; m++)
55029 {
55030 if (Main.tile[m, num19] != null && Main.tile[m, num19].nactive() && Main.tileSolid[Main.tile[m, num19].type])
55031 {
55032 flag6 = false;
55033 break;
55034 }
55035 }
55036 if (flag6)
55037 {
55038 int num22 = (int)((position.X + (float)(width / 2) + (float)((width / 2 + 2) * direction) + velocity.X * 5f) / 16f);
55039 int num23 = (int)((position.Y + (float)height - 15f) / 16f);
55040 if (Main.tile[num22, num23] == null)
55041 {
55042 Main.tile[num22, num23] = new Tile();
55043 }
55044 if (Main.tile[num22, num23 - 1] == null)
55045 {
55046 Main.tile[num22, num23 - 1] = new Tile();
55047 }
55048 if (Main.tile[num22, num23 - 2] == null)
55049 {
55050 Main.tile[num22, num23 - 2] = new Tile();
55051 }
55052 if (Main.tile[num22, num23 - 3] == null)
55053 {
55054 Main.tile[num22, num23 - 3] = new Tile();
55055 }
55056 if (Main.tile[num22, num23 + 1] == null)
55057 {
55058 Main.tile[num22, num23 + 1] = new Tile();
55059 }
55060 if (Main.tile[num22 + direction, num23 - 1] == null)
55061 {
55062 Main.tile[num22 + direction, num23 - 1] = new Tile();
55063 }
55064 if (Main.tile[num22 + direction, num23 + 1] == null)
55065 {
55066 Main.tile[num22 + direction, num23 + 1] = new Tile();
55067 }
55068 if (Main.tile[num22 - direction, num23 + 1] == null)
55069 {
55070 Main.tile[num22 - direction, num23 + 1] = new Tile();
55071 }
55072 if (Main.tile[num22 + direction, num23 + 3] == null)
55073 {
55074 Main.tile[num22 + direction, num23 + 3] = new Tile();
55075 }
55076 int num24 = spriteDirection;
55077 if (type == 423 || type == 410 || type == 546)
55078 {
55079 num24 *= -1;
55080 }
55081 if ((velocity.X < 0f && num24 == -1) || (velocity.X > 0f && num24 == 1))
55082 {
55083 bool flag7 = type == 410 || type == 423;
55084 float num25 = 3f;
55085 if (Main.tile[num22, num23 - 2].nactive() && Main.tileSolid[Main.tile[num22, num23 - 2].type])
55086 {
55087 if (Main.tile[num22, num23 - 3].nactive() && Main.tileSolid[Main.tile[num22, num23 - 3].type])
55088 {
55089 velocity.Y = -8.5f;
55090 netUpdate = true;
55091 }
55092 else
55093 {
55094 velocity.Y = -7.5f;
55095 netUpdate = true;
55096 }
55097 }
55098 else if (Main.tile[num22, num23 - 1].nactive() && !Main.tile[num22, num23 - 1].topSlope() && Main.tileSolid[Main.tile[num22, num23 - 1].type])
55099 {
55100 velocity.Y = -7f;
55101 netUpdate = true;
55102 }
55103 else if (position.Y + (float)height - (float)(num23 * 16) > 20f && Main.tile[num22, num23].nactive() && !Main.tile[num22, num23].topSlope() && Main.tileSolid[Main.tile[num22, num23].type])
55104 {
55105 velocity.Y = -6f;
55106 netUpdate = true;
55107 }
55108 else if ((directionY < 0 || Math.Abs(velocity.X) > num25) && (!flag7 || !Main.tile[num22, num23 + 1].nactive() || !Main.tileSolid[Main.tile[num22, num23 + 1].type]) && (!Main.tile[num22, num23 + 2].nactive() || !Main.tileSolid[Main.tile[num22, num23 + 2].type]) && (!Main.tile[num22 + direction, num23 + 3].nactive() || !Main.tileSolid[Main.tile[num22 + direction, num23 + 3].type]))
55109 {
55110 velocity.Y = -8f;
55111 netUpdate = true;
55112 }
55113 }
55114 }
55115 }
55116 if (type == 423 && Math.Abs(velocity.X) >= num11 * 0.95f)
55117 {
55118 Rectangle hitbox = base.Hitbox;
55119 for (int n = 0; n < 2; n++)
55120 {
55121 if (Main.rand.Next(3) == 0)
55122 {
55123 Dust obj3 = Main.dust[Dust.NewDust(hitbox.TopLeft(), hitbox.Width, hitbox.Height, 242)];
55124 obj3.velocity = Vector2.Zero;
55125 obj3.noGravity = true;
55126 obj3.fadeIn = 1f;
55127 obj3.scale = 0.5f + Main.rand.NextFloat();
55128 }
55129 }
55130 }
55131 if (type == 546)
55132 {
55133 rotation += velocity.X * 0.05f;
55135 }
55136 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
static double Sqrt(double d)
static double Abs(double value)
static int Sign(decimal value)
Definition Math.cs:1202
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 oldPosition
Definition Entity.cs:18
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
float[] localAI
Definition NPC.cs:449
int spriteDirection
Definition NPC.cs:517
void EncourageDespawn(int despawnTime)
Definition NPC.cs:1390
float gfxOffY
Definition NPC.cs:125
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
float[] ai
Definition NPC.cs:447
float stepSpeed
Definition NPC.cs:127
int type
Definition NPC.cs:445
float rotation
Definition NPC.cs:501
IEntitySource GetSpawnSourceForNPCFromNPCAI()
Definition NPC.cs:87546
int GetAttackDamage_ForProjectiles(float normalDamage, float expertDamage)
Definition NPC.cs:1082
void HitEffect(int hitDirection=0, double dmg=10.0)
Definition NPC.cs:78386
bool justHit
Definition NPC.cs:455
IEntitySource GetSpawnSource_ForProjectile()
Definition NPC.cs:87526
Rectangle frame
Definition NPC.cs:485
int directionY
Definition NPC.cs:443
bool netUpdate
Definition NPC.cs:507
int target
Definition NPC.cs:459

References System.Math.Abs(), Terraria.Entity.active, Terraria.Lighting.AddLight(), Terraria.NPC.ai, Terraria.Entity.direction, Terraria.NPC.directionY, Terraria.Main.dust, Terraria.NPC.EncourageDespawn(), Terraria.NPC.frame, Terraria.NPC.GetAttackDamage_ForProjectiles(), Terraria.NPC.GetSpawnSource_ForProjectile(), Terraria.NPC.GetSpawnSourceForNPCFromNPCAI(), Terraria.NPC.gfxOffY, Microsoft.Xna.Framework.Rectangle.Height, Terraria.Entity.height, Terraria.NPC.HitEffect(), Terraria.NPC.justHit, Microsoft.Xna.Framework.MathHelper.Lerp(), Terraria.NPC.localAI, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.NPC.netUpdate, Terraria.Dust.NewDust(), Terraria.Dust.NewDustPerfect(), Terraria.Projectile.NewProjectile(), Terraria.Main.npc, System.obj, Terraria.Entity.oldPosition, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Entity.position, Terraria.Main.pumpkinMoon, Terraria.Main.rand, Terraria.NPC.rotation, System.Math.Sign(), Terraria.NPC.spriteDirection, System.Math.Sqrt(), Terraria.NPC.stepSpeed, Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.NPC.type, Microsoft.Xna.Framework.Vector2.UnitY, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Entity.whoAmI, Terraria.Entity.width, Terraria.Main.windSpeedTarget, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.NPC.AI().