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

◆ AI_121_QueenSlime()

void Terraria.NPC.AI_121_QueenSlime ( )
inlineprivate

Definition at line 38340 of file NPC.cs.

38341 {
38342 int num = 30;
38343 int num2 = 40;
38344 _ = Main.expertMode;
38345 float num3 = 1f;
38346 bool flag = false;
38347 bool flag2 = life <= lifeMax / 2;
38348 if (localAI[0] == 0f)
38349 {
38350 ai[1] = -100f;
38351 localAI[0] = lifeMax;
38352 TargetClosest();
38353 netUpdate = true;
38354 }
38355 Lighting.AddLight(base.Center, 1f, 0.7f, 0.9f);
38356 int num4 = 500;
38357 if (Main.player[target].dead || Math.Abs(base.Center.X - Main.player[target].Center.X) / 16f > (float)num4)
38358 {
38359 TargetClosest();
38360 if (Main.player[target].dead || Math.Abs(base.Center.X - Main.player[target].Center.X) / 16f > (float)num4)
38361 {
38362 EncourageDespawn(10);
38363 if (Main.player[target].Center.X < base.Center.X)
38364 {
38365 direction = 1;
38366 }
38367 else
38368 {
38369 direction = -1;
38370 }
38371 }
38372 }
38373 if (!Main.player[target].dead && timeLeft > 10 && !flag2 && ai[3] >= 300f && ai[0] == 0f && velocity.Y == 0f)
38374 {
38375 ai[0] = 2f;
38376 ai[1] = 0f;
38377 if (Main.netMode != 1)
38378 {
38379 netUpdate = true;
38381 Point point = base.Center.ToTileCoordinates();
38382 Point point2 = Main.player[target].Center.ToTileCoordinates();
38383 Vector2 vector = Main.player[target].Center - base.Center;
38384 int num5 = 10;
38385 int num6 = 0;
38386 int num7 = 7;
38387 int num8 = 0;
38388 bool flag3 = false;
38389 if (ai[3] >= 360f || vector.Length() > 2000f)
38390 {
38391 if (ai[3] > 360f)
38392 {
38393 ai[3] = 360f;
38394 }
38395 flag3 = true;
38396 num8 = 100;
38397 }
38398 while (!flag3 && num8 < 100)
38399 {
38400 num8++;
38401 int num9 = Main.rand.Next(point2.X - num5, point2.X + num5 + 1);
38402 int num10 = Main.rand.Next(point2.Y - num5, point2.Y + 1);
38403 if ((num10 >= point2.Y - num7 && num10 <= point2.Y + num7 && num9 >= point2.X - num7 && num9 <= point2.X + num7) || (num10 >= point.Y - num6 && num10 <= point.Y + num6 && num9 >= point.X - num6 && num9 <= point.X + num6) || Main.tile[num9, num10].nactive())
38404 {
38405 continue;
38406 }
38407 int num11 = num10;
38408 int i = 0;
38409 if (Main.tile[num9, num11].nactive() && Main.tileSolid[Main.tile[num9, num11].type] && !Main.tileSolidTop[Main.tile[num9, num11].type])
38410 {
38411 i = 1;
38412 }
38413 else
38414 {
38415 for (; i < 150 && num11 + i < Main.maxTilesY; i++)
38416 {
38417 int num12 = num11 + i;
38418 if (Main.tile[num9, num12].nactive() && Main.tileSolid[Main.tile[num9, num12].type] && !Main.tileSolidTop[Main.tile[num9, num12].type])
38419 {
38420 i--;
38421 break;
38422 }
38423 }
38424 }
38425 num10 += i;
38426 bool flag4 = true;
38427 if (flag4 && Main.tile[num9, num10].lava())
38428 {
38429 flag4 = false;
38430 }
38431 if (flag4 && !Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0))
38432 {
38433 flag4 = false;
38434 }
38435 if (flag4)
38436 {
38437 localAI[1] = num9 * 16 + 8;
38438 localAI[2] = num10 * 16 + 16;
38439 flag3 = true;
38440 break;
38441 }
38442 }
38443 if (num8 >= 100)
38444 {
38445 Vector2 bottom = Main.player[Player.FindClosest(position, width, height)].Bottom;
38446 localAI[1] = bottom.X;
38447 localAI[2] = bottom.Y;
38448 ai[3] = 0f;
38449 }
38450 }
38451 }
38452 if (!flag2 && (!Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0) || Math.Abs(base.Top.Y - Main.player[target].Bottom.Y) > 320f))
38453 {
38454 ai[3] += 1.5f;
38455 }
38456 else
38457 {
38458 float num13 = ai[3];
38459 ai[3] -= 1f;
38460 if (ai[3] < 0f)
38461 {
38462 if (Main.netMode != 1 && num13 > 0f)
38463 {
38464 netUpdate = true;
38465 }
38466 ai[3] = 0f;
38467 }
38468 }
38469 if (timeLeft <= 10 && ((flag2 && ai[0] != 0f) || (!flag2 && ai[0] != 3f)))
38470 {
38471 if (flag2)
38472 {
38473 ai[0] = 0f;
38474 }
38475 else
38476 {
38477 ai[0] = 3f;
38478 }
38479 ai[1] = 0f;
38480 ai[2] = 0f;
38481 ai[3] = 0f;
38482 netUpdate = true;
38483 }
38484 noTileCollide = false;
38485 noGravity = false;
38486 if (flag2)
38487 {
38488 localAI[3] += 1f;
38489 if (localAI[3] >= 24f)
38490 {
38491 localAI[3] = 0f;
38492 }
38493 if (ai[0] == 4f && ai[2] == 1f)
38494 {
38495 localAI[3] = 6f;
38496 }
38497 if (ai[0] == 5f && ai[2] != 1f)
38498 {
38499 localAI[3] = 7f;
38500 }
38501 }
38502 switch ((int)ai[0])
38503 {
38504 case 0:
38505 {
38506 if (flag2)
38507 {
38509 }
38510 else
38511 {
38512 noTileCollide = false;
38513 noGravity = false;
38514 if (velocity.Y == 0f)
38515 {
38516 velocity.X *= 0.8f;
38517 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
38518 {
38519 velocity.X = 0f;
38520 }
38521 }
38522 }
38523 if (timeLeft <= 10 || (!flag2 && velocity.Y != 0f))
38524 {
38525 break;
38526 }
38527 ai[1] += 1f;
38528 int num18 = 60;
38529 if (flag2)
38530 {
38531 num18 = 120;
38532 }
38533 if (!(ai[1] > (float)num18))
38534 {
38535 break;
38536 }
38537 ai[1] = 0f;
38538 if (flag2)
38539 {
38540 Player player = Main.player[target];
38541 int num19 = Main.rand.Next(2);
38542 if (num19 != 1)
38543 {
38544 ai[0] = 4f;
38545 }
38546 else
38547 {
38548 ai[0] = 5f;
38549 }
38550 if (ai[0] == 4f)
38551 {
38552 ai[2] = 1f;
38553 if (player != null && player.active && !player.dead && (player.Bottom.Y < base.Bottom.Y || Math.Abs(player.Center.X - base.Center.X) > 250f))
38554 {
38555 ai[0] = 5f;
38556 ai[2] = 0f;
38557 }
38558 }
38559 }
38560 else
38561 {
38562 switch (Main.rand.Next(3))
38563 {
38564 default:
38565 ai[0] = 3f;
38566 break;
38567 case 1:
38568 ai[0] = 4f;
38569 break;
38570 case 2:
38571 ai[0] = 5f;
38572 break;
38573 }
38574 }
38575 netUpdate = true;
38576 break;
38577 }
38578 case 1:
38579 {
38580 rotation = 0f;
38581 ai[1] += 1f;
38582 num3 = MathHelper.Clamp(ai[1] / 30f, 0f, 1f);
38583 num3 = 0.5f + num3 * 0.5f;
38584 if (ai[1] >= 30f && Main.netMode != 1)
38585 {
38586 ai[0] = 0f;
38587 ai[1] = 0f;
38588 netUpdate = true;
38589 TargetClosest();
38590 }
38591 if (Main.netMode == 1 && ai[1] >= 60f)
38592 {
38593 ai[0] = 0f;
38594 ai[1] = 0f;
38595 TargetClosest();
38596 }
38598 newColor2.A = 150;
38599 for (int num27 = 0; num27 < 10; num27++)
38600 {
38601 int num28 = Dust.NewDust(position + Vector2.UnitX * -20f, width + 40, height, 4, velocity.X, velocity.Y, 50, newColor2, 1.5f);
38602 Main.dust[num28].noGravity = true;
38603 Main.dust[num28].velocity *= 2f;
38604 }
38605 break;
38606 }
38607 case 2:
38608 rotation = 0f;
38609 ai[1] += 1f;
38610 num3 = MathHelper.Clamp((60f - ai[1]) / 60f, 0f, 1f);
38611 num3 = 0.5f + num3 * 0.5f;
38612 if (ai[1] >= 60f)
38613 {
38614 flag = true;
38615 }
38616 if (ai[1] == 60f)
38617 {
38618 Gore.NewGore(base.Center + new Vector2(-40f, -height / 2), velocity, 1258);
38619 }
38620 if (ai[1] >= 60f && Main.netMode != 1)
38621 {
38622 base.Bottom = new Vector2(localAI[1], localAI[2]);
38623 ai[0] = 1f;
38624 ai[1] = 0f;
38625 netUpdate = true;
38626 }
38627 if (Main.netMode == 1 && ai[1] >= 120f)
38628 {
38629 ai[0] = 1f;
38630 ai[1] = 0f;
38631 }
38632 if (!flag)
38633 {
38635 newColor.A = 150;
38636 for (int n = 0; n < 10; n++)
38637 {
38638 int num26 = Dust.NewDust(position + Vector2.UnitX * -20f, width + 40, height, 4, velocity.X, velocity.Y, 50, newColor, 1.5f);
38639 Main.dust[num26].noGravity = true;
38640 Main.dust[num26].velocity *= 0.5f;
38641 }
38642 }
38643 break;
38644 case 3:
38645 rotation = 0f;
38646 if (velocity.Y == 0f)
38647 {
38648 velocity.X *= 0.8f;
38649 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
38650 {
38651 velocity.X = 0f;
38652 }
38653 ai[1] += 4f;
38654 if ((double)life < (double)lifeMax * 0.66)
38655 {
38656 ai[1] += 4f;
38657 }
38658 if ((double)life < (double)lifeMax * 0.33)
38659 {
38660 ai[1] += 4f;
38661 }
38662 if (!(ai[1] >= 0f))
38663 {
38664 break;
38665 }
38666 netUpdate = true;
38667 TargetClosest();
38668 if (ai[2] == 3f)
38669 {
38670 velocity.Y = -13f;
38671 velocity.X += 3.5f * (float)direction;
38672 ai[1] = 0f;
38673 ai[2] = 0f;
38674 if (timeLeft > 10)
38675 {
38676 ai[0] = 0f;
38677 }
38678 else
38679 {
38680 ai[1] = -60f;
38681 }
38682 }
38683 else if (ai[2] == 2f)
38684 {
38685 velocity.Y = -6f;
38686 velocity.X += 4.5f * (float)direction;
38687 ai[1] = -40f;
38688 ai[2] += 1f;
38689 }
38690 else
38691 {
38692 velocity.Y = -8f;
38693 velocity.X += 4f * (float)direction;
38694 ai[1] = -40f;
38695 ai[2] += 1f;
38696 }
38697 }
38698 else
38699 {
38700 if (target >= 255)
38701 {
38702 break;
38703 }
38704 float num20 = 3f;
38705 if (Main.getGoodWorld)
38706 {
38707 num20 = 7f;
38708 }
38709 if ((direction == 1 && velocity.X < num20) || (direction == -1 && velocity.X > 0f - num20))
38710 {
38711 if ((direction == -1 && (double)velocity.X < 0.1) || (direction == 1 && (double)velocity.X > -0.1))
38712 {
38713 velocity.X += 0.2f * (float)direction;
38714 }
38715 else
38716 {
38717 velocity.X *= 0.93f;
38718 }
38719 }
38720 }
38721 break;
38722 case 4:
38723 {
38724 rotation *= 0.9f;
38725 noTileCollide = true;
38726 noGravity = true;
38727 if (ai[2] == 1f)
38728 {
38729 noTileCollide = false;
38730 noGravity = false;
38731 int num21 = 30;
38732 if (flag2)
38733 {
38734 num21 = 10;
38735 }
38736 if (Main.getGoodWorld)
38737 {
38738 num21 = 0;
38739 }
38740 Player player2 = Main.player[target];
38741 _ = base.Center;
38742 if (!player2.dead && player2.active && Math.Abs(base.Center.X - player2.Center.X) / 16f <= (float)num4)
38743 {
38744 _ = player2.Center;
38745 }
38746 if (velocity.Y == 0f)
38747 {
38748 ai[0] = 0f;
38749 ai[1] = 0f;
38750 ai[2] = 0f;
38751 netUpdate = true;
38753 if (Main.netMode != 1)
38754 {
38755 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Bottom, Vector2.Zero, 922, num2, 0f, Main.myPlayer);
38756 }
38757 for (int l = 0; l < 20; l++)
38758 {
38759 int num22 = Dust.NewDust(base.Bottom - new Vector2(width / 2, 30f), width, 30, 31, velocity.X, velocity.Y, 40, AI_121_QueenSlime_GetDustColor());
38760 Main.dust[num22].noGravity = true;
38761 Main.dust[num22].velocity.Y = -5f + Main.rand.NextFloat() * -3f;
38762 Main.dust[num22].velocity.X *= 7f;
38763 }
38764 }
38765 else if (ai[1] >= (float)num21)
38766 {
38767 for (int m = 0; m < 4; m++)
38768 {
38769 Vector2 vector3 = base.Bottom - new Vector2(Main.rand.NextFloatDirection() * 16f, Main.rand.Next(8));
38770 int num23 = Dust.NewDust(vector3, 2, 2, 31, velocity.X, velocity.Y, 40, AI_121_QueenSlime_GetDustColor(), 1.4f);
38771 Main.dust[num23].position = vector3;
38772 Main.dust[num23].noGravity = true;
38773 Main.dust[num23].velocity.Y = velocity.Y * 0.9f;
38774 Main.dust[num23].velocity.X = ((Main.rand.Next(2) == 0) ? (-10f) : 10f) + Main.rand.NextFloatDirection() * 3f;
38775 }
38776 }
38777 velocity.X *= 0.8f;
38778 float num24 = ai[1];
38779 ai[1] += 1f;
38780 if (ai[1] >= (float)num21)
38781 {
38782 if (num24 < (float)num21)
38783 {
38784 netUpdate = true;
38785 }
38786 if (flag2 && ai[1] > (float)(num21 + 120))
38787 {
38788 ai[0] = 0f;
38789 ai[1] = 0f;
38790 ai[2] = 0f;
38791 velocity.Y *= 0.8f;
38792 netUpdate = true;
38793 break;
38794 }
38795 velocity.Y += 1f;
38796 float num25 = 14f;
38797 if (Main.getGoodWorld)
38798 {
38799 velocity.Y += 1f;
38800 num25 = 15.99f;
38801 }
38802 if (velocity.Y == 0f)
38803 {
38804 velocity.Y = 0.01f;
38805 }
38806 if (velocity.Y >= num25)
38807 {
38808 velocity.Y = num25;
38809 }
38810 }
38811 else
38812 {
38813 velocity.Y *= 0.8f;
38814 }
38815 break;
38816 }
38817 if (Main.netMode != 1 && ai[1] == 0f)
38818 {
38819 TargetClosest();
38820 netUpdate = true;
38821 }
38822 ai[1] += 1f;
38823 if (!(ai[1] >= 30f))
38824 {
38825 break;
38826 }
38827 if (ai[1] >= 60f)
38828 {
38829 ai[1] = 60f;
38830 if (Main.netMode != 1)
38831 {
38832 ai[1] = 0f;
38833 ai[2] = 1f;
38834 velocity.Y = -3f;
38835 netUpdate = true;
38836 }
38837 }
38838 Player player3 = Main.player[target];
38839 Vector2 center = base.Center;
38840 if (!player3.dead && player3.active && Math.Abs(base.Center.X - player3.Center.X) / 16f <= (float)num4)
38841 {
38842 center = player3.Center;
38843 }
38844 center.Y -= 384f;
38845 if (velocity.Y == 0f)
38846 {
38847 velocity = center - base.Center;
38848 velocity = velocity.SafeNormalize(Vector2.Zero);
38849 velocity *= 20f;
38850 }
38851 else
38852 {
38853 velocity.Y *= 0.95f;
38854 }
38855 break;
38856 }
38857 case 5:
38858 {
38859 rotation *= 0.9f;
38860 noTileCollide = true;
38861 noGravity = true;
38862 if (flag2)
38863 {
38864 ai[3] = 0f;
38865 }
38866 if (ai[2] == 1f)
38867 {
38868 ai[1] += 1f;
38869 if (!(ai[1] >= 10f))
38870 {
38871 break;
38872 }
38873 if (Main.netMode != 1)
38874 {
38875 int num14 = 10;
38876 if (Main.getGoodWorld)
38877 {
38878 num14 = 15;
38879 }
38880 int num15 = num14;
38881 if (!flag2)
38882 {
38883 num15 = 6;
38884 }
38885 for (int j = 0; j < num15; j++)
38886 {
38887 Vector2 spinningpoint = new Vector2(9f, 0f);
38888 spinningpoint = spinningpoint.RotatedBy((float)(-j) * ((float)Math.PI * 2f) / (float)num14, Vector2.Zero);
38889 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, spinningpoint.X, spinningpoint.Y, 926, num, 0f, Main.myPlayer);
38890 }
38891 }
38892 ai[0] = 0f;
38893 ai[1] = 0f;
38894 ai[2] = 0f;
38895 netUpdate = true;
38896 break;
38897 }
38898 if (Main.netMode != 1 && ai[1] == 0f)
38899 {
38900 TargetClosest();
38901 netUpdate = true;
38902 }
38903 ai[1] += 1f;
38904 if (ai[1] >= 50f)
38905 {
38906 ai[1] = 50f;
38907 if (Main.netMode != 1)
38908 {
38909 ai[1] = 0f;
38910 ai[2] = 1f;
38911 netUpdate = true;
38912 }
38913 }
38914 float num16 = 100f;
38915 for (int k = 0; k < 4; k++)
38916 {
38917 Vector2 vector2 = base.Center + Main.rand.NextVector2CircularEdge(num16, num16);
38918 if (!flag2)
38919 {
38920 vector2 += new Vector2(0f, 20f);
38921 }
38922 Vector2 v = vector2 - base.Center;
38923 v = v.SafeNormalize(Vector2.Zero) * -8f;
38924 int num17 = Dust.NewDust(vector2, 2, 2, 31, v.X, v.Y, 40, AI_121_QueenSlime_GetDustColor(), 1.8f);
38925 Main.dust[num17].position = vector2;
38926 Main.dust[num17].noGravity = true;
38927 Main.dust[num17].alpha = 250;
38928 Main.dust[num17].velocity = v;
38929 Main.dust[num17].customData = this;
38930 }
38931 if (flag2)
38932 {
38934 }
38935 break;
38936 }
38937 }
38938 dontTakeDamage = (hide = flag);
38939 if (num3 != scale)
38940 {
38941 position.X += width / 2;
38942 position.Y += height;
38943 scale = num3;
38944 width = (int)(114f * scale);
38945 height = (int)(100f * scale);
38946 position.X -= width / 2;
38947 position.Y -= height;
38948 }
38949 if (life <= 0)
38950 {
38951 return;
38952 }
38953 if (Main.rand.Next(360) == 0)
38954 {
38956 }
38957 if (Main.netMode == 1)
38958 {
38959 return;
38960 }
38961 if (localAI[0] >= (float)(lifeMax / 2) && life < lifeMax / 2)
38962 {
38963 localAI[0] = life;
38964 ai[0] = 0f;
38965 ai[1] = 0f;
38966 ai[2] = 0f;
38967 netUpdate = true;
38968 }
38969 int num29 = (int)((float)lifeMax * 0.02f);
38970 if (flag2)
38971 {
38972 num29 = (int)((float)lifeMax * 0.015f);
38973 }
38974 if (!((float)(life + num29) < localAI[0]))
38975 {
38976 return;
38977 }
38978 localAI[0] = life;
38979 int num30 = Main.rand.Next(1, 3);
38980 for (int num31 = 0; num31 < num30; num31++)
38981 {
38982 int x = (int)(position.X + (float)Main.rand.Next(width - 32));
38983 int y = (int)(position.Y + (float)Main.rand.Next(height - 32));
38984 int num32 = 658;
38985 switch (Main.rand.Next(3))
38986 {
38987 case 0:
38988 num32 = 658;
38989 break;
38990 case 1:
38991 num32 = 659;
38992 break;
38993 case 2:
38994 num32 = 660;
38995 break;
38996 }
38998 Main.npc[num33].SetDefaults(num32);
38999 Main.npc[num33].velocity.X = (float)Main.rand.Next(-15, 16) * 0.1f;
39000 Main.npc[num33].velocity.Y = (float)Main.rand.Next(-30, 1) * 0.1f;
39001 Main.npc[num33].ai[0] = -500 * Main.rand.Next(3);
39002 Main.npc[num33].ai[1] = 0f;
39003 if (Main.netMode == 2 && num33 < 200)
39004 {
39005 NetMessage.SendData(23, -1, -1, null, num33);
39006 }
39007 }
39008 }
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
static double Abs(double value)
const double PI
Definition Math.cs:16
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static readonly LegacySoundStyle Item167
Definition SoundID.cs:748
int timeLeft
Definition NPC.cs:457
float[] localAI
Definition NPC.cs:449
void EncourageDespawn(int despawnTime)
Definition NPC.cs:1390
int lifeMax
Definition NPC.cs:479
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
static Color AI_121_QueenSlime_GetDustColor()
Definition NPC.cs:38257
bool hide
Definition NPC.cs:491
void AI_121_QueenSlime_FlyMovement()
Definition NPC.cs:38264
bool noGravity
Definition NPC.cs:503
float[] ai
Definition NPC.cs:447
bool dontTakeDamage
Definition NPC.cs:527
float scale
Definition NPC.cs:493
float rotation
Definition NPC.cs:501
IEntitySource GetSpawnSourceForNPCFromNPCAI()
Definition NPC.cs:87546
static int NewNPC(IEntitySource source, int X, int Y, int Type, int Start=0, float ai0=0f, float ai1=0f, float ai2=0f, float ai3=0f, int Target=255)
Definition NPC.cs:77654
bool noTileCollide
Definition NPC.cs:505
int life
Definition NPC.cs:477
IEntitySource GetSpawnSource_ForProjectile()
Definition NPC.cs:87526
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.NPC.AI_121_QueenSlime_FlyMovement(), Terraria.NPC.AI_121_QueenSlime_GetDustColor(), Terraria.Entity.Bottom, Terraria.Collision.CanHitLine(), Terraria.Entity.Center, Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.Player.dead, Terraria.Entity.direction, Terraria.NPC.dontTakeDamage, Terraria.Main.dust, Terraria.NPC.EncourageDespawn(), Terraria.Main.expertMode, Terraria.Player.FindClosest(), Terraria.Main.getGoodWorld, Terraria.NPC.GetSpawnSource_ForProjectile(), Terraria.NPC.GetSpawnSourceForNPCFromNPCAI(), Terraria.Entity.height, Terraria.NPC.hide, Terraria.ID.SoundID.Item167, Terraria.NPC.life, Terraria.NPC.lifeMax, Terraria.NPC.localAI, Terraria.Main.maxTilesY, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.NPC.netUpdate, Terraria.Dust.NewDust(), Terraria.Gore.NewGore(), Terraria.NPC.NewNPC(), Terraria.Projectile.NewProjectile(), Terraria.NPC.noGravity, Terraria.NPC.noTileCollide, Terraria.Main.npc, System.Math.PI, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Entity.position, Terraria.Main.rand, Terraria.NPC.rotation, Terraria.NPC.scale, Terraria.NetMessage.SendData(), Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.NPC.timeLeft, Microsoft.Xna.Framework.Vector2.UnitX, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.velocity, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.NPC.AI().