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

◆ AI()

void Terraria.NPC.AI ( )
inline

Definition at line 13607 of file NPC.cs.

13608 {
13609 //IL_50abb: Unknown result type (might be due to invalid IL or missing references)
13610 //IL_50889: Unknown result type (might be due to invalid IL or missing references)
13611 //IL_50896: Unknown result type (might be due to invalid IL or missing references)
13612 //IL_5089b: Unknown result type (might be due to invalid IL or missing references)
13613 //IL_4fcdb: Unknown result type (might be due to invalid IL or missing references)
13614 //IL_50b04: Unknown result type (might be due to invalid IL or missing references)
13615 //IL_50ae5: Unknown result type (might be due to invalid IL or missing references)
13616 //IL_50aea: Unknown result type (might be due to invalid IL or missing references)
13617 //IL_508c4: Unknown result type (might be due to invalid IL or missing references)
13618 //IL_508ee: Unknown result type (might be due to invalid IL or missing references)
13619 //IL_508f3: Unknown result type (might be due to invalid IL or missing references)
13620 if (aiStyle == 0)
13621 {
13622 if (Main.netMode != 1)
13623 {
13624 for (int i = 0; i < 255; i++)
13625 {
13626 if (Main.player[i].active && Main.player[i].talkNPC == whoAmI)
13627 {
13628 if (type == 589)
13629 {
13631 }
13632 if (type == 105)
13633 {
13635 }
13636 if (type == 106)
13637 {
13639 }
13640 if (type == 123)
13641 {
13643 }
13644 if (type == 354)
13645 {
13647 }
13648 if (type == 376)
13649 {
13651 }
13652 if (type == 579)
13653 {
13655 }
13656 }
13657 }
13658 }
13659 if (type != 376 && type != 579)
13660 {
13661 TargetClosest();
13663 }
13664 if (type == 376 || type == 579)
13665 {
13666 if (wet || Main.tile[(int)(base.Center.X / 16f), (int)(position.Y - 4f) / 16].liquid > 0)
13667 {
13668 velocity.Y = -0.4f;
13669 int num = 1;
13670 if (base.Center.X / 16f > (float)(Main.maxTilesX / 2))
13671 {
13672 num = -1;
13673 }
13674 int num2 = 12;
13675 int num3 = (int)base.Center.X / 16;
13676 int j = (int)base.Center.Y / 16;
13677 bool flag = false;
13678 if (num > 0)
13679 {
13680 for (int k = num3; k < num3 + num2; k++)
13681 {
13682 if (WorldGen.SolidTile(k, j))
13683 {
13684 flag = true;
13685 }
13686 }
13687 }
13688 else
13689 {
13690 for (int l = num3; l > num3 - num2; l--)
13691 {
13692 if (WorldGen.SolidTile(l, j))
13693 {
13694 flag = true;
13695 }
13696 }
13697 }
13698 if (type == 579)
13699 {
13700 flag = true;
13701 }
13702 if (flag)
13703 {
13704 velocity.X *= 0.99f;
13705 if ((double)velocity.X > -0.01 && (double)velocity.X < 0.01)
13706 {
13707 velocity.X = 0f;
13708 }
13709 return;
13710 }
13711 velocity.X += (float)num * 0.01f;
13712 if (velocity.X > 0.2f)
13713 {
13714 velocity.X *= 0.95f;
13715 }
13716 if (velocity.X < -0.2f)
13717 {
13718 velocity.X *= 0.95f;
13719 }
13720 }
13721 else
13722 {
13723 velocity.X *= 0.93f;
13724 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
13725 {
13726 velocity.X = 0f;
13727 }
13728 }
13729 }
13730 else
13731 {
13732 velocity.X *= 0.93f;
13733 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
13734 {
13735 velocity.X = 0f;
13736 }
13737 }
13738 return;
13739 }
13740 if (aiStyle == 1)
13741 {
13742 AI_001_Slimes();
13743 return;
13744 }
13745 if (aiStyle == 2)
13746 {
13748 return;
13749 }
13750 if (aiStyle == 3)
13751 {
13753 return;
13754 }
13755 if (aiStyle == 4)
13756 {
13757 bool flag2 = false;
13758 if (Main.expertMode && (double)life < (double)lifeMax * 0.12)
13759 {
13760 flag2 = true;
13761 }
13762 bool flag3 = false;
13763 if (Main.expertMode && (double)life < (double)lifeMax * 0.04)
13764 {
13765 flag3 = true;
13766 }
13767 float num4 = 20f;
13768 if (flag3)
13769 {
13770 num4 = 10f;
13771 }
13772 if (target < 0 || target == 255 || Main.player[target].dead || !Main.player[target].active)
13773 {
13774 TargetClosest();
13775 }
13776 bool dead = Main.player[target].dead;
13777 float num5 = position.X + (float)(width / 2) - Main.player[target].position.X - (float)(Main.player[target].width / 2);
13778 float num6 = position.Y + (float)height - 59f - Main.player[target].position.Y - (float)(Main.player[target].height / 2);
13779 float num7 = (float)Math.Atan2(num6, num5) + 1.57f;
13780 if (num7 < 0f)
13781 {
13782 num7 += 6.283f;
13783 }
13784 else if ((double)num7 > 6.283)
13785 {
13786 num7 -= 6.283f;
13787 }
13788 float num8 = 0f;
13789 if (this.ai[0] == 0f && this.ai[1] == 0f)
13790 {
13791 num8 = 0.02f;
13792 }
13793 if (this.ai[0] == 0f && this.ai[1] == 2f && this.ai[2] > 40f)
13794 {
13795 num8 = 0.05f;
13796 }
13797 if (this.ai[0] == 3f && this.ai[1] == 0f)
13798 {
13799 num8 = 0.05f;
13800 }
13801 if (this.ai[0] == 3f && this.ai[1] == 2f && this.ai[2] > 40f)
13802 {
13803 num8 = 0.08f;
13804 }
13805 if (this.ai[0] == 3f && this.ai[1] == 4f && this.ai[2] > num4)
13806 {
13807 num8 = 0.15f;
13808 }
13809 if (this.ai[0] == 3f && this.ai[1] == 5f)
13810 {
13811 num8 = 0.05f;
13812 }
13813 if (Main.expertMode)
13814 {
13815 num8 *= 1.5f;
13816 }
13817 if (flag3 && Main.expertMode)
13818 {
13819 num8 = 0f;
13820 }
13821 if (rotation < num7)
13822 {
13823 if ((double)(num7 - rotation) > 3.1415)
13824 {
13825 rotation -= num8;
13826 }
13827 else
13828 {
13829 rotation += num8;
13830 }
13831 }
13832 else if (rotation > num7)
13833 {
13834 if ((double)(rotation - num7) > 3.1415)
13835 {
13836 rotation += num8;
13837 }
13838 else
13839 {
13840 rotation -= num8;
13841 }
13842 }
13843 if (rotation > num7 - num8 && rotation < num7 + num8)
13844 {
13845 rotation = num7;
13846 }
13847 if (rotation < 0f)
13848 {
13849 rotation += 6.283f;
13850 }
13851 else if ((double)rotation > 6.283)
13852 {
13853 rotation -= 6.283f;
13854 }
13855 if (rotation > num7 - num8 && rotation < num7 + num8)
13856 {
13857 rotation = num7;
13858 }
13859 if (Main.rand.Next(5) == 0)
13860 {
13861 int num9 = Dust.NewDust(new Vector2(position.X, position.Y + (float)height * 0.25f), width, (int)((float)height * 0.5f), 5, velocity.X, 2f);
13862 Main.dust[num9].velocity.X *= 0.5f;
13863 Main.dust[num9].velocity.Y *= 0.1f;
13864 }
13865 reflectsProjectiles = false;
13866 if (Main.IsItDay() || dead)
13867 {
13868 velocity.Y -= 0.04f;
13869 EncourageDespawn(10);
13870 return;
13871 }
13872 if (this.ai[0] == 0f)
13873 {
13874 if (this.ai[1] == 0f)
13875 {
13876 float num10 = 5f;
13877 float num11 = 0.04f;
13878 if (Main.expertMode)
13879 {
13880 num11 = 0.15f;
13881 num10 = 7f;
13882 }
13883 if (Main.getGoodWorld)
13884 {
13885 num11 += 0.05f;
13886 num10 += 1f;
13887 }
13888 Vector2 vector = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
13889 float num12 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector.X;
13890 float num13 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 200f - vector.Y;
13891 float num14 = (float)Math.Sqrt(num12 * num12 + num13 * num13);
13892 float num15 = num14;
13893 num14 = num10 / num14;
13894 num12 *= num14;
13895 num13 *= num14;
13896 if (velocity.X < num12)
13897 {
13898 velocity.X += num11;
13899 if (velocity.X < 0f && num12 > 0f)
13900 {
13901 velocity.X += num11;
13902 }
13903 }
13904 else if (velocity.X > num12)
13905 {
13906 velocity.X -= num11;
13907 if (velocity.X > 0f && num12 < 0f)
13908 {
13909 velocity.X -= num11;
13910 }
13911 }
13912 if (velocity.Y < num13)
13913 {
13914 velocity.Y += num11;
13915 if (velocity.Y < 0f && num13 > 0f)
13916 {
13917 velocity.Y += num11;
13918 }
13919 }
13920 else if (velocity.Y > num13)
13921 {
13922 velocity.Y -= num11;
13923 if (velocity.Y > 0f && num13 < 0f)
13924 {
13925 velocity.Y -= num11;
13926 }
13927 }
13928 this.ai[2] += 1f;
13929 float num16 = 600f;
13930 if (Main.expertMode)
13931 {
13932 num16 *= 0.35f;
13933 }
13934 if (this.ai[2] >= num16)
13935 {
13936 this.ai[1] = 1f;
13937 this.ai[2] = 0f;
13938 this.ai[3] = 0f;
13939 target = 255;
13940 netUpdate = true;
13941 }
13942 else if ((position.Y + (float)height < Main.player[target].position.Y && num15 < 500f) || (Main.expertMode && num15 < 500f))
13943 {
13944 if (!Main.player[target].dead)
13945 {
13946 this.ai[3] += 1f;
13947 }
13948 float num17 = 110f;
13949 if (Main.expertMode)
13950 {
13951 num17 *= 0.4f;
13952 }
13953 if (Main.getGoodWorld)
13954 {
13955 num17 *= 0.8f;
13956 }
13957 if (this.ai[3] >= num17)
13958 {
13959 this.ai[3] = 0f;
13960 rotation = num7;
13961 float num18 = 5f;
13962 if (Main.expertMode)
13963 {
13964 num18 = 6f;
13965 }
13966 float num19 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector.X;
13967 float num20 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector.Y;
13968 float num21 = (float)Math.Sqrt(num19 * num19 + num20 * num20);
13969 num21 = num18 / num21;
13971 Vector2 vector3 = default(Vector2);
13972 vector3.X = num19 * num21;
13973 vector3.Y = num20 * num21;
13974 vector2.X += vector3.X * 10f;
13975 vector2.Y += vector3.Y * 10f;
13976 if (Main.netMode != 1)
13977 {
13978 int num22 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)vector2.X, (int)vector2.Y, 5);
13979 Main.npc[num22].velocity.X = vector3.X;
13980 Main.npc[num22].velocity.Y = vector3.Y;
13981 if (Main.netMode == 2 && num22 < 200)
13982 {
13983 NetMessage.SendData(23, -1, -1, null, num22);
13984 }
13985 }
13986 SoundEngine.PlaySound(3, (int)vector2.X, (int)vector2.Y);
13987 for (int m = 0; m < 10; m++)
13988 {
13989 Dust.NewDust(vector2, 20, 20, 5, vector3.X * 0.4f, vector3.Y * 0.4f);
13990 }
13991 }
13992 }
13993 }
13994 else if (this.ai[1] == 1f)
13995 {
13996 rotation = num7;
13997 float num23 = 6f;
13998 if (Main.expertMode)
13999 {
14000 num23 = 7f;
14001 }
14002 if (Main.getGoodWorld)
14003 {
14004 num23 += 1f;
14005 }
14006 Vector2 vector4 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14007 float num24 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector4.X;
14008 float num25 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector4.Y;
14009 float num26 = (float)Math.Sqrt(num24 * num24 + num25 * num25);
14010 num26 = num23 / num26;
14011 velocity.X = num24 * num26;
14012 velocity.Y = num25 * num26;
14013 this.ai[1] = 2f;
14014 netUpdate = true;
14015 if (netSpam > 10)
14016 {
14017 netSpam = 10;
14018 }
14019 }
14020 else if (this.ai[1] == 2f)
14021 {
14022 this.ai[2] += 1f;
14023 if (this.ai[2] >= 40f)
14024 {
14025 velocity *= 0.98f;
14026 if (Main.expertMode)
14027 {
14028 velocity *= 0.985f;
14029 }
14030 if (Main.getGoodWorld)
14031 {
14032 velocity *= 0.99f;
14033 }
14034 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
14035 {
14036 velocity.X = 0f;
14037 }
14038 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
14039 {
14040 velocity.Y = 0f;
14041 }
14042 }
14043 else
14044 {
14045 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
14046 }
14047 int num27 = 150;
14048 if (Main.expertMode)
14049 {
14050 num27 = 100;
14051 }
14052 if (Main.getGoodWorld)
14053 {
14054 num27 -= 15;
14055 }
14056 if (this.ai[2] >= (float)num27)
14057 {
14058 this.ai[3] += 1f;
14059 this.ai[2] = 0f;
14060 target = 255;
14061 rotation = num7;
14062 if (this.ai[3] >= 3f)
14063 {
14064 this.ai[1] = 0f;
14065 this.ai[3] = 0f;
14066 }
14067 else
14068 {
14069 this.ai[1] = 1f;
14070 }
14071 }
14072 }
14073 float num28 = 0.5f;
14074 if (Main.expertMode)
14075 {
14076 num28 = 0.65f;
14077 }
14078 if ((float)life < (float)lifeMax * num28)
14079 {
14080 this.ai[0] = 1f;
14081 this.ai[1] = 0f;
14082 this.ai[2] = 0f;
14083 this.ai[3] = 0f;
14084 netUpdate = true;
14085 if (netSpam > 10)
14086 {
14087 netSpam = 10;
14088 }
14089 }
14090 return;
14091 }
14092 if (this.ai[0] == 1f || this.ai[0] == 2f)
14093 {
14094 if (this.ai[0] == 1f || this.ai[3] == 1f)
14095 {
14096 this.ai[2] += 0.005f;
14097 if ((double)this.ai[2] > 0.5)
14098 {
14099 this.ai[2] = 0.5f;
14100 }
14101 }
14102 else
14103 {
14104 this.ai[2] -= 0.005f;
14105 if (this.ai[2] < 0f)
14106 {
14107 this.ai[2] = 0f;
14108 }
14109 }
14110 rotation += this.ai[2];
14111 this.ai[1] += 1f;
14112 if (Main.getGoodWorld)
14113 {
14114 reflectsProjectiles = true;
14115 }
14116 int num29 = 20;
14117 if (Main.getGoodWorld && life < lifeMax / 3)
14118 {
14119 num29 = 10;
14120 }
14121 if (Main.expertMode && this.ai[1] % (float)num29 == 0f)
14122 {
14123 float num30 = 5f;
14124 Vector2 vector5 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14125 float num31 = Main.rand.Next(-200, 200);
14126 float num32 = Main.rand.Next(-200, 200);
14127 if (Main.getGoodWorld)
14128 {
14129 num31 *= 3f;
14130 num32 *= 3f;
14131 }
14132 float num33 = (float)Math.Sqrt(num31 * num31 + num32 * num32);
14133 num33 = num30 / num33;
14135 Vector2 vector7 = default(Vector2);
14136 vector7.X = num31 * num33;
14137 vector7.Y = num32 * num33;
14138 vector6.X += vector7.X * 10f;
14139 vector6.Y += vector7.Y * 10f;
14140 if (Main.netMode != 1)
14141 {
14142 int num34 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)vector6.X, (int)vector6.Y, 5);
14143 Main.npc[num34].velocity.X = vector7.X;
14144 Main.npc[num34].velocity.Y = vector7.Y;
14145 if (Main.netMode == 2 && num34 < 200)
14146 {
14147 NetMessage.SendData(23, -1, -1, null, num34);
14148 }
14149 }
14150 for (int n = 0; n < 10; n++)
14151 {
14152 Dust.NewDust(vector6, 20, 20, 5, vector7.X * 0.4f, vector7.Y * 0.4f);
14153 }
14154 }
14155 if (this.ai[1] >= 100f)
14156 {
14157 if (this.ai[3] == 1f)
14158 {
14159 this.ai[3] = 0f;
14160 this.ai[1] = 0f;
14161 }
14162 else
14163 {
14164 this.ai[0] += 1f;
14165 this.ai[1] = 0f;
14166 if (this.ai[0] == 3f)
14167 {
14168 this.ai[2] = 0f;
14169 }
14170 else
14171 {
14172 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y);
14173 for (int num35 = 0; num35 < 2; num35++)
14174 {
14175 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 8);
14176 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 7);
14177 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 6);
14178 }
14179 for (int num36 = 0; num36 < 20; num36++)
14180 {
14181 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
14182 }
14183 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
14184 }
14185 }
14186 }
14187 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
14188 velocity.X *= 0.98f;
14189 velocity.Y *= 0.98f;
14190 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
14191 {
14192 velocity.X = 0f;
14193 }
14194 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
14195 {
14196 velocity.Y = 0f;
14197 }
14198 return;
14199 }
14200 defense = 0;
14201 int num37 = 23;
14202 int num38 = 18;
14203 if (Main.expertMode)
14204 {
14205 if (flag2)
14206 {
14207 defense = -15;
14208 }
14209 if (flag3)
14210 {
14211 num38 = 20;
14212 defense = -30;
14213 }
14214 }
14217 if (this.ai[1] == 0f && flag2)
14218 {
14219 this.ai[1] = 5f;
14220 }
14221 if (this.ai[1] == 0f)
14222 {
14223 float num39 = 6f;
14224 float num40 = 0.07f;
14225 Vector2 vector8 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14226 float num41 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector8.X;
14227 float num42 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 120f - vector8.Y;
14228 float num43 = (float)Math.Sqrt(num41 * num41 + num42 * num42);
14229 if (num43 > 400f && Main.expertMode)
14230 {
14231 num39 += 1f;
14232 num40 += 0.05f;
14233 if (num43 > 600f)
14234 {
14235 num39 += 1f;
14236 num40 += 0.05f;
14237 if (num43 > 800f)
14238 {
14239 num39 += 1f;
14240 num40 += 0.05f;
14241 }
14242 }
14243 }
14244 if (Main.getGoodWorld)
14245 {
14246 num39 += 1f;
14247 num40 += 0.1f;
14248 }
14249 num43 = num39 / num43;
14250 num41 *= num43;
14251 num42 *= num43;
14252 if (velocity.X < num41)
14253 {
14254 velocity.X += num40;
14255 if (velocity.X < 0f && num41 > 0f)
14256 {
14257 velocity.X += num40;
14258 }
14259 }
14260 else if (velocity.X > num41)
14261 {
14262 velocity.X -= num40;
14263 if (velocity.X > 0f && num41 < 0f)
14264 {
14265 velocity.X -= num40;
14266 }
14267 }
14268 if (velocity.Y < num42)
14269 {
14270 velocity.Y += num40;
14271 if (velocity.Y < 0f && num42 > 0f)
14272 {
14273 velocity.Y += num40;
14274 }
14275 }
14276 else if (velocity.Y > num42)
14277 {
14278 velocity.Y -= num40;
14279 if (velocity.Y > 0f && num42 < 0f)
14280 {
14281 velocity.Y -= num40;
14282 }
14283 }
14284 this.ai[2] += 1f;
14285 if (this.ai[2] >= 200f)
14286 {
14287 this.ai[1] = 1f;
14288 this.ai[2] = 0f;
14289 this.ai[3] = 0f;
14290 if (Main.expertMode && (double)life < (double)lifeMax * 0.35)
14291 {
14292 this.ai[1] = 3f;
14293 }
14294 target = 255;
14295 netUpdate = true;
14296 }
14297 if (Main.expertMode && flag3)
14298 {
14299 TargetClosest();
14300 netUpdate = true;
14301 this.ai[1] = 3f;
14302 this.ai[2] = 0f;
14303 this.ai[3] -= 1000f;
14304 }
14305 }
14306 else if (this.ai[1] == 1f)
14307 {
14308 SoundEngine.PlaySound(36, (int)position.X, (int)position.Y, 0);
14309 rotation = num7;
14310 float num44 = 6.8f;
14311 if (Main.expertMode && this.ai[3] == 1f)
14312 {
14313 num44 *= 1.15f;
14314 }
14315 if (Main.expertMode && this.ai[3] == 2f)
14316 {
14317 num44 *= 1.3f;
14318 }
14319 if (Main.getGoodWorld)
14320 {
14321 num44 *= 1.2f;
14322 }
14323 Vector2 vector9 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14324 float num45 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector9.X;
14325 float num46 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector9.Y;
14326 float num47 = (float)Math.Sqrt(num45 * num45 + num46 * num46);
14327 num47 = num44 / num47;
14328 velocity.X = num45 * num47;
14329 velocity.Y = num46 * num47;
14330 this.ai[1] = 2f;
14331 netUpdate = true;
14332 if (netSpam > 10)
14333 {
14334 netSpam = 10;
14335 }
14336 }
14337 else if (this.ai[1] == 2f)
14338 {
14339 float num48 = 40f;
14340 this.ai[2] += 1f;
14341 if (Main.expertMode)
14342 {
14343 num48 = 50f;
14344 }
14345 if (this.ai[2] >= num48)
14346 {
14347 velocity *= 0.97f;
14348 if (Main.expertMode)
14349 {
14350 velocity *= 0.98f;
14351 }
14352 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
14353 {
14354 velocity.X = 0f;
14355 }
14356 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
14357 {
14358 velocity.Y = 0f;
14359 }
14360 }
14361 else
14362 {
14363 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
14364 }
14365 int num49 = 130;
14366 if (Main.expertMode)
14367 {
14368 num49 = 90;
14369 }
14370 if (this.ai[2] >= (float)num49)
14371 {
14372 this.ai[3] += 1f;
14373 this.ai[2] = 0f;
14374 target = 255;
14375 rotation = num7;
14376 if (this.ai[3] >= 3f)
14377 {
14378 this.ai[1] = 0f;
14379 this.ai[3] = 0f;
14380 if (Main.expertMode && Main.netMode != 1 && (double)life < (double)lifeMax * 0.5)
14381 {
14382 this.ai[1] = 3f;
14383 this.ai[3] += Main.rand.Next(1, 4);
14384 }
14385 netUpdate = true;
14386 if (netSpam > 10)
14387 {
14388 netSpam = 10;
14389 }
14390 }
14391 else
14392 {
14393 this.ai[1] = 1f;
14394 }
14395 }
14396 }
14397 else if (this.ai[1] == 3f)
14398 {
14399 if (this.ai[3] == 4f && flag2 && base.Center.Y > Main.player[target].Center.Y)
14400 {
14401 TargetClosest();
14402 this.ai[1] = 0f;
14403 this.ai[2] = 0f;
14404 this.ai[3] = 0f;
14405 netUpdate = true;
14406 if (netSpam > 10)
14407 {
14408 netSpam = 10;
14409 }
14410 }
14411 else if (Main.netMode != 1)
14412 {
14413 TargetClosest();
14414 float num50 = 20f;
14415 Vector2 vector10 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14416 float num51 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector10.X;
14417 float num52 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector10.Y;
14418 float num53 = Math.Abs(Main.player[target].velocity.X) + Math.Abs(Main.player[target].velocity.Y) / 4f;
14419 num53 += 10f - num53;
14420 if (num53 < 5f)
14421 {
14422 num53 = 5f;
14423 }
14424 if (num53 > 15f)
14425 {
14426 num53 = 15f;
14427 }
14428 if (this.ai[2] == -1f && !flag3)
14429 {
14430 num53 *= 4f;
14431 num50 *= 1.3f;
14432 }
14433 if (flag3)
14434 {
14435 num53 *= 2f;
14436 }
14437 num51 -= Main.player[target].velocity.X * num53;
14438 num52 -= Main.player[target].velocity.Y * num53 / 4f;
14439 num51 *= 1f + (float)Main.rand.Next(-10, 11) * 0.01f;
14440 num52 *= 1f + (float)Main.rand.Next(-10, 11) * 0.01f;
14441 if (flag3)
14442 {
14443 num51 *= 1f + (float)Main.rand.Next(-10, 11) * 0.01f;
14444 num52 *= 1f + (float)Main.rand.Next(-10, 11) * 0.01f;
14445 }
14446 float num54 = (float)Math.Sqrt(num51 * num51 + num52 * num52);
14447 float num55 = num54;
14448 num54 = num50 / num54;
14449 velocity.X = num51 * num54;
14450 velocity.Y = num52 * num54;
14451 velocity.X += (float)Main.rand.Next(-20, 21) * 0.1f;
14452 velocity.Y += (float)Main.rand.Next(-20, 21) * 0.1f;
14453 if (flag3)
14454 {
14455 velocity.X += (float)Main.rand.Next(-50, 51) * 0.1f;
14456 velocity.Y += (float)Main.rand.Next(-50, 51) * 0.1f;
14457 float num56 = Math.Abs(velocity.X);
14458 float num57 = Math.Abs(velocity.Y);
14459 if (base.Center.X > Main.player[target].Center.X)
14460 {
14461 num57 *= -1f;
14462 }
14463 if (base.Center.Y > Main.player[target].Center.Y)
14464 {
14465 num56 *= -1f;
14466 }
14467 velocity.X = num57 + velocity.X;
14468 velocity.Y = num56 + velocity.Y;
14470 velocity *= num50;
14471 velocity.X += (float)Main.rand.Next(-20, 21) * 0.1f;
14472 velocity.Y += (float)Main.rand.Next(-20, 21) * 0.1f;
14473 }
14474 else if (num55 < 100f)
14475 {
14476 if (Math.Abs(velocity.X) > Math.Abs(velocity.Y))
14477 {
14478 float num58 = Math.Abs(velocity.X);
14479 float num59 = Math.Abs(velocity.Y);
14480 if (base.Center.X > Main.player[target].Center.X)
14481 {
14482 num59 *= -1f;
14483 }
14484 if (base.Center.Y > Main.player[target].Center.Y)
14485 {
14486 num58 *= -1f;
14487 }
14488 velocity.X = num59;
14489 velocity.Y = num58;
14490 }
14491 }
14492 else if (Math.Abs(velocity.X) > Math.Abs(velocity.Y))
14493 {
14494 float num60 = (Math.Abs(velocity.X) + Math.Abs(velocity.Y)) / 2f;
14495 float num61 = num60;
14496 if (base.Center.X > Main.player[target].Center.X)
14497 {
14498 num61 *= -1f;
14499 }
14500 if (base.Center.Y > Main.player[target].Center.Y)
14501 {
14502 num60 *= -1f;
14503 }
14504 velocity.X = num61;
14505 velocity.Y = num60;
14506 }
14507 this.ai[1] = 4f;
14508 netUpdate = true;
14509 if (netSpam > 10)
14510 {
14511 netSpam = 10;
14512 }
14513 }
14514 }
14515 else if (this.ai[1] == 4f)
14516 {
14517 if (this.ai[2] == 0f)
14518 {
14519 SoundEngine.PlaySound(36, (int)position.X, (int)position.Y, -1);
14520 }
14521 float num62 = num4;
14522 this.ai[2] += 1f;
14523 if (this.ai[2] == num62 && Vector2.Distance(position, Main.player[target].position) < 200f)
14524 {
14525 this.ai[2] -= 1f;
14526 }
14527 if (this.ai[2] >= num62)
14528 {
14529 velocity *= 0.95f;
14530 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
14531 {
14532 velocity.X = 0f;
14533 }
14534 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
14535 {
14536 velocity.Y = 0f;
14537 }
14538 }
14539 else
14540 {
14541 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
14542 }
14543 float num63 = num62 + 13f;
14544 if (this.ai[2] >= num63)
14545 {
14546 netUpdate = true;
14547 if (netSpam > 10)
14548 {
14549 netSpam = 10;
14550 }
14551 this.ai[3] += 1f;
14552 this.ai[2] = 0f;
14553 if (this.ai[3] >= 5f)
14554 {
14555 this.ai[1] = 0f;
14556 this.ai[3] = 0f;
14557 if (target >= 0 && Main.getGoodWorld && Collision.CanHit(position, width, height, Main.player[target].position, width, height))
14558 {
14559 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
14560 this.ai[0] = 2f;
14561 this.ai[1] = 0f;
14562 this.ai[2] = 0f;
14563 this.ai[3] = 1f;
14564 netUpdate = true;
14565 }
14566 }
14567 else
14568 {
14569 this.ai[1] = 3f;
14570 }
14571 }
14572 }
14573 else if (this.ai[1] == 5f)
14574 {
14575 float num64 = 600f;
14576 float num65 = 9f;
14577 float num66 = 0.3f;
14578 Vector2 vector11 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
14579 float num67 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector11.X;
14580 float num68 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) + num64 - vector11.Y;
14581 float num69 = (float)Math.Sqrt(num67 * num67 + num68 * num68);
14582 num69 = num65 / num69;
14583 num67 *= num69;
14584 num68 *= num69;
14585 if (velocity.X < num67)
14586 {
14587 velocity.X += num66;
14588 if (velocity.X < 0f && num67 > 0f)
14589 {
14590 velocity.X += num66;
14591 }
14592 }
14593 else if (velocity.X > num67)
14594 {
14595 velocity.X -= num66;
14596 if (velocity.X > 0f && num67 < 0f)
14597 {
14598 velocity.X -= num66;
14599 }
14600 }
14601 if (velocity.Y < num68)
14602 {
14603 velocity.Y += num66;
14604 if (velocity.Y < 0f && num68 > 0f)
14605 {
14606 velocity.Y += num66;
14607 }
14608 }
14609 else if (velocity.Y > num68)
14610 {
14611 velocity.Y -= num66;
14612 if (velocity.Y > 0f && num68 < 0f)
14613 {
14614 velocity.Y -= num66;
14615 }
14616 }
14617 this.ai[2] += 1f;
14618 if (this.ai[2] >= 70f)
14619 {
14620 TargetClosest();
14621 this.ai[1] = 3f;
14622 this.ai[2] = -1f;
14623 this.ai[3] = Main.rand.Next(-3, 1);
14624 netUpdate = true;
14625 }
14626 }
14627 if (flag3 && this.ai[1] == 5f)
14628 {
14629 this.ai[1] = 3f;
14630 }
14631 return;
14632 }
14633 if (aiStyle == 5)
14634 {
14636 return;
14637 }
14638 if (aiStyle == 6)
14639 {
14640 AI_006_Worms();
14641 return;
14642 }
14643 if (aiStyle == 7)
14644 {
14646 return;
14647 }
14648 if (aiStyle == 8)
14649 {
14650 TargetClosest();
14651 velocity.X *= 0.93f;
14652 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
14653 {
14654 velocity.X = 0f;
14655 }
14656 if (this.ai[0] == 0f)
14657 {
14658 this.ai[0] = 500f;
14659 }
14660 if (type == 172)
14661 {
14662 if (alpha < 255)
14663 {
14664 alpha++;
14665 }
14666 if (justHit)
14667 {
14668 alpha = 0;
14669 }
14670 }
14671 if (this.ai[2] != 0f && this.ai[3] != 0f)
14672 {
14674 if (type == 172)
14675 {
14676 alpha = 255;
14677 }
14679 for (int num70 = 0; num70 < 50; num70++)
14680 {
14681 if (type == 29 || type == 45)
14682 {
14683 int num71 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 27, 0f, 0f, 100, default(Color), Main.rand.Next(1, 3));
14684 Dust dust = Main.dust[num71];
14685 dust.velocity *= 3f;
14686 if (Main.dust[num71].scale > 1f)
14687 {
14688 Main.dust[num71].noGravity = true;
14689 }
14690 }
14691 else if (type == 32)
14692 {
14693 int num72 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 172, 0f, 0f, 100, default(Color), 1.5f);
14694 Dust dust = Main.dust[num72];
14695 dust.velocity *= 3f;
14696 Main.dust[num72].noGravity = true;
14697 }
14698 else if (type == 283 || type == 284)
14699 {
14700 int num73 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 173);
14701 Dust dust = Main.dust[num73];
14702 dust.velocity *= 2f;
14703 Main.dust[num73].scale = 1.4f;
14704 }
14705 else if (type == 285 || type == 286)
14706 {
14707 int num74 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 174, 0f, 0f, 100, default(Color), 1.5f);
14708 Dust dust = Main.dust[num74];
14709 dust.velocity *= 3f;
14710 Main.dust[num74].noGravity = true;
14711 }
14712 else if (type == 281 || type == 282)
14713 {
14714 int num75 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 175, 0f, 0f, 100, default(Color), 1.5f);
14715 Dust dust = Main.dust[num75];
14716 dust.velocity *= 3f;
14717 Main.dust[num75].noGravity = true;
14718 }
14719 else if (type == 172)
14720 {
14721 int num76 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 106, 0f, 0f, 100, default(Color), 2.5f);
14722 Dust dust = Main.dust[num76];
14723 dust.velocity *= 3f;
14724 Main.dust[num76].noGravity = true;
14725 }
14726 else if (type == 533)
14727 {
14728 int num77 = Dust.NewDust(position, width, height, 27, 0f, 0f, 100, default(Color), 2.5f);
14729 Dust dust = Main.dust[num77];
14730 dust.velocity *= 3f;
14731 Main.dust[num77].noGravity = true;
14732 }
14733 else
14734 {
14735 int num78 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 6, 0f, 0f, 100, default(Color), 2.5f);
14736 Dust dust = Main.dust[num78];
14737 dust.velocity *= 3f;
14738 Main.dust[num78].noGravity = true;
14739 }
14740 }
14742 position.X = this.ai[2] * 16f - (float)(width / 2) + 8f;
14743 position.Y = this.ai[3] * 16f - (float)height;
14744 netOffset *= 0f;
14745 velocity.X = 0f;
14746 velocity.Y = 0f;
14747 this.ai[2] = 0f;
14748 this.ai[3] = 0f;
14750 for (int num79 = 0; num79 < 50; num79++)
14751 {
14752 if (type == 29 || type == 45)
14753 {
14754 int num80 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 27, 0f, 0f, 100, default(Color), Main.rand.Next(1, 3));
14755 Dust dust = Main.dust[num80];
14756 dust.velocity *= 3f;
14757 if (Main.dust[num80].scale > 1f)
14758 {
14759 Main.dust[num80].noGravity = true;
14760 }
14761 }
14762 else if (type == 32)
14763 {
14764 int num81 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 172, 0f, 0f, 100, default(Color), 1.5f);
14765 Dust dust = Main.dust[num81];
14766 dust.velocity *= 3f;
14767 Main.dust[num81].noGravity = true;
14768 }
14769 else if (type == 172)
14770 {
14771 int num82 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 106, 0f, 0f, 100, default(Color), 2.5f);
14772 Dust dust = Main.dust[num82];
14773 dust.velocity *= 3f;
14774 Main.dust[num82].noGravity = true;
14775 }
14776 else if (type == 283 || type == 284)
14777 {
14778 int num83 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 173);
14779 Dust dust = Main.dust[num83];
14780 dust.velocity *= 2f;
14781 Main.dust[num83].scale = 1.4f;
14782 }
14783 else if (type == 285 || type == 286)
14784 {
14785 int num84 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 174, 0f, 0f, 100, default(Color), 1.5f);
14786 Dust dust = Main.dust[num84];
14787 dust.velocity *= 3f;
14788 Main.dust[num84].noGravity = true;
14789 }
14790 else if (type == 281 || type == 282)
14791 {
14792 int num85 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 175, 0f, 0f, 100, default(Color), 1.5f);
14793 Dust dust = Main.dust[num85];
14794 dust.velocity *= 3f;
14795 Main.dust[num85].noGravity = true;
14796 }
14797 else if (type == 533)
14798 {
14799 int num86 = Dust.NewDust(position, width, height, 27, 0f, 0f, 100, default(Color), 2.5f);
14800 Dust dust = Main.dust[num86];
14801 dust.velocity *= 3f;
14802 Main.dust[num86].noGravity = true;
14803 }
14804 else
14805 {
14806 int num87 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 6, 0f, 0f, 100, default(Color), 2.5f);
14807 Dust dust = Main.dust[num87];
14808 dust.velocity *= 3f;
14809 Main.dust[num87].noGravity = true;
14810 }
14811 }
14812 }
14813 this.ai[0] += 1f;
14814 if (type == 283 || type == 284)
14815 {
14816 if (this.ai[0] == 100f || this.ai[0] == 150f || this.ai[0] == 200f || this.ai[0] == 250f || this.ai[0] == 300f)
14817 {
14818 this.ai[1] = 30f;
14819 netUpdate = true;
14820 }
14821 if (this.ai[0] >= 450f)
14822 {
14823 this.ai[0] = 700f;
14824 }
14825 }
14826 else if (type == 172)
14827 {
14828 if (this.ai[0] == 75f || this.ai[0] == 150f || this.ai[0] == 225f || this.ai[0] == 300f || this.ai[0] == 375f || this.ai[0] == 450f)
14829 {
14830 this.ai[1] = 30f;
14831 netUpdate = true;
14832 }
14833 }
14834 else if (type == 533)
14835 {
14836 if (this.ai[0] == 180f)
14837 {
14838 this.ai[1] = 181f;
14839 netUpdate = true;
14840 }
14841 }
14842 else if (type == 281 || type == 282)
14843 {
14844 if (this.ai[0] == 100f || this.ai[0] == 120f || this.ai[0] == 140f || this.ai[0] == 200f || this.ai[0] == 220f || this.ai[0] == 240f || this.ai[0] == 300f || this.ai[0] == 320f || this.ai[0] == 340f)
14845 {
14846 this.ai[1] = 30f;
14847 netUpdate = true;
14848 }
14849 if (this.ai[0] >= 540f)
14850 {
14851 this.ai[0] = 700f;
14852 }
14853 }
14854 else
14855 {
14856 if (Main.getGoodWorld && type == 24 && AnyNPCs(113))
14857 {
14858 this.ai[0] += 1f;
14859 if (this.ai[0] % 2f == 1f)
14860 {
14861 this.ai[0] -= 1f;
14862 }
14863 }
14864 if (this.ai[0] == 100f || this.ai[0] == 200f || this.ai[0] == 300f)
14865 {
14866 this.ai[1] = 30f;
14867 netUpdate = true;
14868 }
14869 }
14870 if ((type == 285 || type == 286) && this.ai[0] > 400f)
14871 {
14872 this.ai[0] = 650f;
14873 }
14874 if (type == 533 && this.ai[0] >= 360f)
14875 {
14876 this.ai[0] = 650f;
14877 }
14878 if (this.ai[0] >= 650f && Main.netMode != 1)
14879 {
14880 this.ai[0] = 1f;
14881 int targetTileX = (int)Main.player[target].Center.X / 16;
14882 int targetTileY = (int)Main.player[target].Center.Y / 16;
14885 {
14886 this.ai[1] = 20f;
14887 this.ai[2] = chosenTile.X;
14888 this.ai[3] = chosenTile.Y;
14889 }
14890 netUpdate = true;
14891 }
14892 if (this.ai[1] > 0f)
14893 {
14894 this.ai[1] -= 1f;
14895 if (type == 533)
14896 {
14897 if (this.ai[1] % 30f == 0f && this.ai[1] / 30f < 5f)
14898 {
14900 if (Main.netMode != 1)
14901 {
14902 Point point = base.Center.ToTileCoordinates();
14903 Point point2 = Main.player[target].Center.ToTileCoordinates();
14904 Vector2 vector12 = Main.player[target].Center - base.Center;
14905 int num88 = 6;
14906 int num89 = 6;
14907 int num90 = 0;
14908 int num91 = 2;
14909 int num92 = 0;
14910 bool flag4 = false;
14911 if (vector12.Length() > 2000f)
14912 {
14913 flag4 = true;
14914 }
14915 while (!flag4 && num92 < 50)
14916 {
14917 num92++;
14918 int num93 = Main.rand.Next(point2.X - num88, point2.X + num88 + 1);
14919 int num94 = Main.rand.Next(point2.Y - num88, point2.Y + num88 + 1);
14921 {
14922 bool flag5 = true;
14923 if (flag5 && Main.tile[num93, num94].lava())
14924 {
14925 flag5 = false;
14926 }
14927 if (flag5 && Collision.SolidTiles(num93 - num91, num93 + num91, num94 - num91, num94 + num91))
14928 {
14929 flag5 = false;
14930 }
14931 if (flag5)
14932 {
14933 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), num93 * 16 + 8, num94 * 16 + 8, 0f, 0f, 596, 0, 1f, Main.myPlayer, target);
14934 flag4 = true;
14935 break;
14936 }
14937 }
14938 }
14939 }
14940 }
14941 }
14942 else if (this.ai[1] == 25f)
14943 {
14944 if (type >= 281 && type <= 286)
14945 {
14946 if (Main.netMode != 1)
14947 {
14948 float num95 = 6f;
14949 if (type == 285 || type == 286)
14950 {
14951 num95 = 8f;
14952 }
14953 if (type == 281 || type == 282)
14954 {
14955 num95 = 4f;
14956 }
14957 Vector2 vector13 = new Vector2(position.X + (float)width * 0.5f, position.Y);
14958 float num96 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector13.X;
14959 float num97 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector13.Y;
14960 if (type == 283 || type == 284)
14961 {
14962 num96 += (float)Main.rand.Next(-30, 31);
14963 num97 += (float)Main.rand.Next(-30, 31);
14964 num96 -= Main.player[target].velocity.X * 10f;
14965 num97 -= Main.player[target].velocity.Y * 10f;
14966 }
14967 float num98 = (float)Math.Sqrt(num96 * num96 + num97 * num97);
14968 num98 = num95 / num98;
14969 num96 *= num98;
14970 num97 *= num98;
14971 int num99 = 30;
14972 int num100 = 290;
14973 if (type == 285 || type == 286)
14974 {
14975 num100 = 291;
14976 num99 = 40;
14977 }
14978 if (type == 281 || type == 282)
14979 {
14980 num100 = 293;
14981 num99 = 40;
14982 }
14984 int num101 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector13.X, vector13.Y, num96, num97, num100, num99, 0f, Main.myPlayer);
14985 Main.projectile[num101].timeLeft = 300;
14986 if (num100 == 291)
14987 {
14988 Main.projectile[num101].ai[0] = Main.player[target].Center.X;
14989 Main.projectile[num101].ai[1] = Main.player[target].Center.Y;
14990 Main.projectile[num101].netUpdate = true;
14991 }
14992 localAI[0] = 0f;
14993 }
14994 }
14995 else
14996 {
14997 if (type != 172)
14998 {
15000 }
15001 if (Main.netMode != 1)
15002 {
15003 if (type == 29)
15004 {
15005 NewNPC(GetSpawnSourceForProjectileNPC(), (int)position.X + width / 2, (int)position.Y - 8, 30);
15006 }
15007 else if (type == 45)
15008 {
15009 NewNPC(GetSpawnSourceForProjectileNPC(), (int)position.X + width / 2, (int)position.Y - 8, 665);
15010 }
15011 else if (type == 32)
15012 {
15013 NewNPC(GetSpawnSourceForProjectileNPC(), (int)position.X + width / 2, (int)position.Y - 8, 33);
15014 }
15015 else if (type == 172)
15016 {
15017 float num102 = 10f;
15018 Vector2 vector14 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15019 float num103 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector14.X + (float)Main.rand.Next(-10, 11);
15020 float num104 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector14.Y + (float)Main.rand.Next(-10, 11);
15021 float num105 = (float)Math.Sqrt(num103 * num103 + num104 * num104);
15022 num105 = num102 / num105;
15023 num103 *= num105;
15024 num104 *= num105;
15025 int num106 = 40;
15026 int num107 = 129;
15027 int num108 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector14.X, vector14.Y, num103, num104, num107, num106, 0f, Main.myPlayer);
15028 Main.projectile[num108].timeLeft = 300;
15029 localAI[0] = 0f;
15030 }
15031 else
15032 {
15033 NewNPC(GetSpawnSourceForProjectileNPC(), (int)position.X + width / 2 + direction * 8, (int)position.Y + 20, 25);
15034 }
15035 }
15036 }
15037 }
15038 }
15040 if (type == 29 || type == 45)
15041 {
15042 if (Main.rand.Next(5) == 0)
15043 {
15044 int num109 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 27, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 1.5f);
15045 Main.dust[num109].noGravity = true;
15046 Main.dust[num109].velocity.X *= 0.5f;
15047 Main.dust[num109].velocity.Y = -2f;
15048 }
15049 }
15050 else if (type == 32)
15051 {
15052 if (Main.rand.Next(3) != 0)
15053 {
15054 int num110 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 172, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 0.9f);
15055 Main.dust[num110].noGravity = true;
15056 Main.dust[num110].velocity.X *= 0.3f;
15057 Main.dust[num110].velocity.Y *= 0.2f;
15058 Main.dust[num110].velocity.Y -= 1f;
15059 }
15060 }
15061 else if (type == 172)
15062 {
15063 int num111 = 1;
15064 if (alpha == 255)
15065 {
15066 num111 = 2;
15067 }
15068 for (int num112 = 0; num112 < num111; num112++)
15069 {
15070 if (Main.rand.Next(255) > 255 - alpha)
15071 {
15072 int num113 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 106, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 1.2f);
15073 Main.dust[num113].noGravity = true;
15074 Main.dust[num113].velocity.X *= 0.1f + (float)Main.rand.Next(30) * 0.01f;
15075 Main.dust[num113].velocity.Y *= 0.1f + (float)Main.rand.Next(30) * 0.01f;
15076 Dust dust = Main.dust[num113];
15077 dust.scale *= 1f + (float)Main.rand.Next(6) * 0.1f;
15078 }
15079 }
15080 }
15081 else if (type == 283 || type == 284)
15082 {
15083 if (Main.rand.Next(2) == 0)
15084 {
15085 int num114 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 173);
15086 Main.dust[num114].velocity.X *= 0.5f;
15087 Main.dust[num114].velocity.Y *= 0.5f;
15088 }
15089 }
15090 else if (type == 285 || type == 286)
15091 {
15092 if (Main.rand.Next(2) == 0)
15093 {
15094 int num115 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 174, velocity.X * 0.2f, velocity.Y * 0.2f, 100);
15095 Main.dust[num115].noGravity = true;
15096 Dust dust = Main.dust[num115];
15097 dust.velocity *= 0.4f;
15098 Main.dust[num115].velocity.Y -= 0.7f;
15099 }
15100 }
15101 else if (type == 281 || type == 282)
15102 {
15103 if (Main.rand.Next(2) == 0)
15104 {
15105 int num116 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 175, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 0.1f);
15106 Main.dust[num116].noGravity = true;
15107 Dust dust = Main.dust[num116];
15108 dust.velocity *= 0.5f;
15109 Main.dust[num116].fadeIn = 1.2f;
15110 }
15111 }
15112 else if (type == 533)
15113 {
15114 Lighting.AddLight(base.Top, 0.6f, 0.6f, 0.3f);
15115 }
15116 else if (Main.rand.Next(2) == 0)
15117 {
15118 int num117 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 6, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 2f);
15119 Main.dust[num117].noGravity = true;
15120 Main.dust[num117].velocity.X *= 1f;
15121 Main.dust[num117].velocity.Y *= 1f;
15122 }
15124 return;
15125 }
15126 if (aiStyle == 9)
15127 {
15128 if (type == 516)
15129 {
15130 if (alpha < 220)
15131 {
15132 alpha += 40;
15133 }
15134 if (this.ai[0] == 0f)
15135 {
15136 this.ai[0] = 1f;
15137 Vector2 vector15 = Main.player[target].Center - base.Center;
15138 vector15.Normalize();
15139 if (vector15.HasNaNs())
15140 {
15142 }
15143 vector15 = vector15.RotatedByRandom(1.5707963705062866).RotatedBy(-0.7853981852531433);
15144 if (vector15.Y > 0.2f)
15145 {
15146 vector15.Y = 0.2f;
15147 }
15148 velocity = vector15 * (6f + Main.rand.NextFloat() * 4f);
15149 }
15150 if (collideX || collideY || Distance(Main.player[target].Center) < 20f)
15151 {
15153 }
15154 }
15155 if (target == 255)
15156 {
15157 TargetClosest();
15158 float num118 = 6f;
15159 if (type == 25)
15160 {
15161 num118 = 5f;
15162 }
15163 if (type == 112 || type == 666)
15164 {
15165 num118 = 7f;
15166 }
15167 if (Main.getGoodWorld)
15168 {
15169 if (type == 33 && AnyNPCs(35))
15170 {
15171 num118 = 10f;
15172 }
15173 if (type == 25 && AnyNPCs(113))
15174 {
15175 num118 = 14f;
15176 }
15177 if (type == 666)
15178 {
15179 num118 = 10f;
15180 }
15181 }
15182 Vector2 vector16 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15183 float num119 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector16.X;
15184 float num120 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector16.Y;
15185 float num121 = (float)Math.Sqrt(num119 * num119 + num120 * num120);
15186 num121 = num118 / num121;
15187 velocity.X = num119 * num121;
15188 velocity.Y = num120 * num121;
15189 }
15190 if (Main.getGoodWorld && !dontTakeDamage)
15191 {
15192 if (type == 33 && AnyNPCs(35))
15193 {
15194 dontTakeDamage = true;
15195 }
15196 else if (type == 25 && AnyNPCs(113))
15197 {
15198 dontTakeDamage = true;
15199 }
15200 else if (type == 666 && (double)(base.Center.Y / 16f) < Main.worldSurface)
15201 {
15202 dontTakeDamage = true;
15203 }
15204 }
15205 if (type == 112 || type == 666)
15206 {
15207 damage = defDamage;
15208 if (type == 666)
15209 {
15211 }
15212 this.ai[0] += 1f;
15213 if (this.ai[0] > 3f)
15214 {
15215 this.ai[0] = 3f;
15216 }
15217 if (this.ai[0] == 2f)
15218 {
15219 position += velocity;
15220 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 9);
15221 for (int num122 = 0; num122 < 20; num122++)
15222 {
15223 int num123 = Dust.NewDust(new Vector2(position.X, position.Y + 2f) + netOffset, width, height, 18, 0f, 0f, 100, default(Color), 1.8f);
15224 Dust dust = Main.dust[num123];
15225 dust.velocity *= 1.3f;
15226 dust = Main.dust[num123];
15227 dust.velocity += velocity;
15228 Main.dust[num123].noGravity = true;
15229 }
15230 }
15231 }
15232 if ((type == 112 || type == 666) && Collision.SolidCollision(position, width, height))
15233 {
15234 _ = Main.netMode;
15235 _ = 1;
15236 StrikeNPCNoInteraction(9999, 0f, 0);
15237 }
15238 EncourageDespawn(100);
15239 if (type == 516)
15240 {
15241 rotation += 0.1f * (float)direction;
15242 float num124 = 15f;
15243 float num125 = 1f / 12f;
15244 Vector2 center = base.Center;
15245 Vector2 center2 = Main.player[target].Center;
15247 vector17.Normalize();
15248 if (vector17.HasNaNs())
15249 {
15250 vector17 = new Vector2(direction, 0f);
15251 }
15252 velocity = (velocity * (num124 - 1f) + vector17 * (velocity.Length() + num125)) / num124;
15253 if (velocity.Length() < 6f)
15254 {
15255 velocity *= 1.05f;
15256 }
15257 return;
15258 }
15260 for (int num126 = 0; num126 < 2; num126++)
15261 {
15262 if (type == 30 || type == 665)
15263 {
15264 alpha = 255;
15265 for (int num127 = 0; num127 < 2; num127++)
15266 {
15267 int num128 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 27, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 1.3f);
15268 Main.dust[num128].noGravity = true;
15269 Dust dust = Main.dust[num128];
15270 dust.velocity *= 0.3f;
15271 Main.dust[num128].velocity.X -= velocity.X * 0.2f;
15272 Main.dust[num128].velocity.Y -= velocity.Y * 0.2f;
15273 }
15274 }
15275 else if (type == 33)
15276 {
15277 for (int num129 = 0; num129 < 3; num129++)
15278 {
15279 float num130 = velocity.X / 3f * (float)num126;
15280 float num131 = velocity.Y / 3f * (float)num126;
15281 int num132 = 2;
15282 int num133 = Dust.NewDust(new Vector2(position.X + (float)num132, position.Y + (float)num132), width - num132 * 2, height - num132 * 2, 172, 0f, 0f, 100, default(Color), 1.2f);
15283 Main.dust[num133].noGravity = true;
15284 Dust dust = Main.dust[num133];
15285 dust.velocity *= 0.1f;
15286 dust = Main.dust[num133];
15287 dust.velocity += velocity * 0.5f;
15288 Main.dust[num133].position.X -= num130;
15289 Main.dust[num133].position.Y -= num131;
15290 }
15291 if (Main.rand.Next(5) == 0)
15292 {
15293 int num134 = 2;
15294 int num135 = Dust.NewDust(new Vector2(position.X + (float)num134, position.Y + (float)num134), width - num134 * 2, height - num134 * 2, 172, 0f, 0f, 100, default(Color), 0.6f);
15295 Dust dust = Main.dust[num135];
15296 dust.velocity *= 0.25f;
15297 dust = Main.dust[num135];
15298 dust.velocity += velocity * 0.5f;
15299 }
15300 }
15301 else if (type == 112 || type == 666)
15302 {
15303 int num136 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 18, velocity.X * 0.1f, velocity.Y * 0.1f, 80, default(Color), 1.3f);
15304 Dust dust = Main.dust[num136];
15305 dust.velocity *= 0.3f;
15306 Main.dust[num136].noGravity = true;
15307 }
15308 else
15309 {
15310 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 1f, 0.3f, 0.1f);
15311 int num137 = Dust.NewDust(new Vector2(position.X, position.Y + 2f), width, height, 6, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 2f);
15312 Main.dust[num137].noGravity = true;
15313 Main.dust[num137].velocity.X *= 0.3f;
15314 Main.dust[num137].velocity.Y *= 0.3f;
15315 }
15316 }
15317 rotation += 0.4f * (float)direction;
15319 return;
15320 }
15321 if (aiStyle == 10)
15322 {
15323 float num138 = 1f;
15324 float num139 = 0.011f;
15325 TargetClosest();
15326 Vector2 vector18 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15327 float num140 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector18.X;
15328 float num141 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector18.Y;
15329 float num142 = (float)Math.Sqrt(num140 * num140 + num141 * num141);
15330 float num143 = num142;
15331 this.ai[1] += 1f;
15332 if (this.ai[1] > 600f)
15333 {
15334 num139 *= 8f;
15335 num138 = 4f;
15336 if (this.ai[1] > 650f)
15337 {
15338 this.ai[1] = 0f;
15339 }
15340 }
15341 else if (num143 < 250f)
15342 {
15343 this.ai[0] += 0.9f;
15344 if (this.ai[0] > 0f)
15345 {
15346 velocity.Y += 0.019f;
15347 }
15348 else
15349 {
15350 velocity.Y -= 0.019f;
15351 }
15352 if (this.ai[0] < -100f || this.ai[0] > 100f)
15353 {
15354 velocity.X += 0.019f;
15355 }
15356 else
15357 {
15358 velocity.X -= 0.019f;
15359 }
15360 if (this.ai[0] > 200f)
15361 {
15362 this.ai[0] = -200f;
15363 }
15364 }
15365 if (num143 > 350f)
15366 {
15367 num138 = 5f;
15368 num139 = 0.3f;
15369 }
15370 else if (num143 > 300f)
15371 {
15372 num138 = 3f;
15373 num139 = 0.2f;
15374 }
15375 else if (num143 > 250f)
15376 {
15377 num138 = 1.5f;
15378 num139 = 0.1f;
15379 }
15380 num142 = num138 / num142;
15381 num140 *= num142;
15382 num141 *= num142;
15383 if (Main.player[target].dead)
15384 {
15385 num140 = (float)direction * num138 / 2f;
15386 num141 = (0f - num138) / 2f;
15387 }
15388 if (velocity.X < num140)
15389 {
15390 velocity.X += num139;
15391 }
15392 else if (velocity.X > num140)
15393 {
15394 velocity.X -= num139;
15395 }
15396 if (velocity.Y < num141)
15397 {
15398 velocity.Y += num139;
15399 }
15400 else if (velocity.Y > num141)
15401 {
15402 velocity.Y -= num139;
15403 }
15404 if (num140 > 0f)
15405 {
15406 spriteDirection = -1;
15407 rotation = (float)Math.Atan2(num141, num140);
15408 }
15409 if (num140 < 0f)
15410 {
15411 spriteDirection = 1;
15412 rotation = (float)Math.Atan2(num141, num140) + 3.14f;
15413 }
15414 if (type != 289)
15415 {
15416 return;
15417 }
15418 if (justHit)
15419 {
15420 this.ai[2] = 0f;
15421 this.ai[3] = 0f;
15422 }
15423 vector18 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15424 num140 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector18.X;
15425 num141 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector18.Y;
15426 num142 = (float)Math.Sqrt(num140 * num140 + num141 * num141);
15427 if (num142 <= 500f)
15428 {
15429 this.ai[2] += 1f;
15430 if (this.ai[3] == 0f)
15431 {
15432 if (this.ai[2] > 120f)
15433 {
15434 this.ai[2] = 0f;
15435 this.ai[3] = 1f;
15436 netUpdate = true;
15437 }
15438 return;
15439 }
15440 if (this.ai[2] > 40f)
15441 {
15442 this.ai[3] = 0f;
15443 }
15444 if (Main.netMode != 1 && this.ai[2] == 20f)
15445 {
15446 float num144 = 6f;
15447 int num145 = 25;
15448 int num146 = 299;
15449 num142 = num144 / num142;
15450 num140 *= num142;
15451 num141 *= num142;
15452 int num147 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector18.X, vector18.Y, num140, num141, num146, num145, 0f, Main.myPlayer);
15453 }
15454 }
15455 else
15456 {
15457 this.ai[2] = 0f;
15458 this.ai[3] = 0f;
15459 }
15460 return;
15461 }
15462 if (aiStyle == 11)
15463 {
15464 reflectsProjectiles = false;
15466 if (this.ai[0] == 0f && Main.netMode != 1)
15467 {
15468 TargetClosest();
15469 this.ai[0] = 1f;
15470 if (type != 68)
15471 {
15472 int num148 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 36, whoAmI);
15473 Main.npc[num148].ai[0] = -1f;
15474 Main.npc[num148].ai[1] = whoAmI;
15475 Main.npc[num148].target = target;
15476 Main.npc[num148].netUpdate = true;
15477 num148 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 36, whoAmI);
15478 Main.npc[num148].ai[0] = 1f;
15479 Main.npc[num148].ai[1] = whoAmI;
15480 Main.npc[num148].ai[3] = 150f;
15481 Main.npc[num148].target = target;
15482 Main.npc[num148].netUpdate = true;
15483 }
15484 }
15485 if ((type == 68 || Main.netMode == 1) && localAI[0] == 0f)
15486 {
15487 localAI[0] = 1f;
15488 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
15489 }
15490 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 2000f || Math.Abs(position.Y - Main.player[target].position.Y) > 2000f)
15491 {
15492 TargetClosest();
15493 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 2000f || Math.Abs(position.Y - Main.player[target].position.Y) > 2000f)
15494 {
15495 this.ai[1] = 3f;
15496 }
15497 }
15498 if ((type == 68 || Main.IsItDay()) && this.ai[1] != 3f && this.ai[1] != 2f)
15499 {
15500 this.ai[1] = 2f;
15501 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
15502 }
15503 int num149 = 0;
15504 if (Main.expertMode)
15505 {
15506 for (int num150 = 0; num150 < 200; num150++)
15507 {
15508 if (Main.npc[num150].active && Main.npc[num150].type == type + 1)
15509 {
15510 num149++;
15511 }
15512 }
15513 defense += num149 * 25;
15514 if ((num149 < 2 || (double)life < (double)lifeMax * 0.75) && this.ai[1] == 0f)
15515 {
15516 float num151 = 80f;
15517 if (num149 == 0)
15518 {
15519 num151 /= 2f;
15520 }
15521 if (Main.getGoodWorld)
15522 {
15523 num151 *= 0.8f;
15524 }
15525 if (Main.netMode != 1 && this.ai[2] % num151 == 0f)
15526 {
15527 Vector2 center3 = base.Center;
15528 float num152 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - center3.X;
15529 float num153 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - center3.Y;
15530 float num154 = (float)Math.Sqrt(num152 * num152 + num153 * num153);
15531 if (Collision.CanHit(center3, 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height))
15532 {
15533 float num155 = 3f;
15534 if (num149 == 0)
15535 {
15536 num155 += 2f;
15537 }
15538 float num156 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - center3.X + (float)Main.rand.Next(-20, 21);
15539 float num157 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - center3.Y + (float)Main.rand.Next(-20, 21);
15540 float num158 = (float)Math.Sqrt(num156 * num156 + num157 * num157);
15541 num158 = num155 / num158;
15542 num156 *= num158;
15543 num157 *= num158;
15544 Vector2 vector19 = new Vector2(num156 * 1f + (float)Main.rand.Next(-50, 51) * 0.01f, num157 * 1f + (float)Main.rand.Next(-50, 51) * 0.01f);
15545 vector19.Normalize();
15546 vector19 *= num155;
15547 vector19 += velocity;
15548 num156 = vector19.X;
15549 num157 = vector19.Y;
15551 int num159 = 270;
15552 center3 += vector19 * 5f;
15553 int num160 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center3.X, center3.Y, num156, num157, num159, attackDamage_ForProjectiles, 0f, Main.myPlayer, -1f);
15554 Main.projectile[num160].timeLeft = 300;
15555 }
15556 }
15557 }
15558 }
15559 if (this.ai[1] == 0f)
15560 {
15561 damage = defDamage;
15562 this.ai[2] += 1f;
15563 if (this.ai[2] >= 800f)
15564 {
15565 this.ai[2] = 0f;
15566 this.ai[1] = 1f;
15567 TargetClosest();
15568 netUpdate = true;
15569 }
15570 rotation = velocity.X / 15f;
15571 float num161 = 0.02f;
15572 float num162 = 2f;
15573 float num163 = 0.05f;
15574 float num164 = 8f;
15575 if (Main.expertMode)
15576 {
15577 num161 = 0.03f;
15578 num162 = 4f;
15579 num163 = 0.07f;
15580 num164 = 9.5f;
15581 }
15582 if (Main.getGoodWorld)
15583 {
15584 num161 += 0.01f;
15585 num162 += 1f;
15586 num163 += 0.05f;
15587 num164 += 2f;
15588 }
15589 if (position.Y > Main.player[target].position.Y - 250f)
15590 {
15591 if (velocity.Y > 0f)
15592 {
15593 velocity.Y *= 0.98f;
15594 }
15595 velocity.Y -= num161;
15596 if (velocity.Y > num162)
15597 {
15598 velocity.Y = num162;
15599 }
15600 }
15601 else if (position.Y < Main.player[target].position.Y - 250f)
15602 {
15603 if (velocity.Y < 0f)
15604 {
15605 velocity.Y *= 0.98f;
15606 }
15607 velocity.Y += num161;
15608 if (velocity.Y < 0f - num162)
15609 {
15610 velocity.Y = 0f - num162;
15611 }
15612 }
15613 if (position.X + (float)(width / 2) > Main.player[target].position.X + (float)(Main.player[target].width / 2))
15614 {
15615 if (velocity.X > 0f)
15616 {
15617 velocity.X *= 0.98f;
15618 }
15619 velocity.X -= num163;
15620 if (velocity.X > num164)
15621 {
15622 velocity.X = num164;
15623 }
15624 }
15625 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)(Main.player[target].width / 2))
15626 {
15627 if (velocity.X < 0f)
15628 {
15629 velocity.X *= 0.98f;
15630 }
15631 velocity.X += num163;
15632 if (velocity.X < 0f - num164)
15633 {
15634 velocity.X = 0f - num164;
15635 }
15636 }
15637 }
15638 else if (this.ai[1] == 1f)
15639 {
15640 if (Main.getGoodWorld)
15641 {
15642 if (num149 > 0)
15643 {
15644 reflectsProjectiles = true;
15645 }
15646 else if (Main.netMode != 1 && this.ai[2] % 200f == 0f && CountNPCS(32) < 6)
15647 {
15648 int num165 = 1;
15649 for (int num166 = 0; num166 < num165; num166++)
15650 {
15651 int num167 = 1000;
15652 for (int num168 = 0; num168 < num167; num168++)
15653 {
15654 int num169 = (int)(base.Center.X / 16f) + Main.rand.Next(-50, 51);
15655 int num170;
15656 for (num170 = (int)(base.Center.Y / 16f) + Main.rand.Next(-50, 51); num170 < Main.maxTilesY - 10 && !WorldGen.SolidTile(num169, num170); num170++)
15657 {
15658 }
15659 num170--;
15660 if (!WorldGen.SolidTile(num169, num170))
15661 {
15662 int num171 = NewNPC(GetSpawnSourceForNaturalSpawn(), num169 * 16 + 8, num170 * 16, 32);
15663 if (Main.netMode == 2 && num171 < 200)
15664 {
15665 NetMessage.SendData(23, -1, -1, null, num171);
15666 }
15667 break;
15668 }
15669 }
15670 }
15671 }
15672 }
15673 defense -= 10;
15674 this.ai[2] += 1f;
15675 if (this.ai[2] == 2f)
15676 {
15677 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
15678 }
15679 if (this.ai[2] >= 400f)
15680 {
15681 this.ai[2] = 0f;
15682 this.ai[1] = 0f;
15683 }
15684 rotation += (float)direction * 0.3f;
15685 Vector2 vector20 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15686 float num172 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector20.X;
15687 float num173 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector20.Y;
15688 float num174 = (float)Math.Sqrt(num172 * num172 + num173 * num173);
15689 float num175 = 1.5f;
15691 if (Main.expertMode)
15692 {
15693 num175 = 3.5f;
15694 if (num174 > 150f)
15695 {
15696 num175 *= 1.05f;
15697 }
15698 if (num174 > 200f)
15699 {
15700 num175 *= 1.1f;
15701 }
15702 if (num174 > 250f)
15703 {
15704 num175 *= 1.1f;
15705 }
15706 if (num174 > 300f)
15707 {
15708 num175 *= 1.1f;
15709 }
15710 if (num174 > 350f)
15711 {
15712 num175 *= 1.1f;
15713 }
15714 if (num174 > 400f)
15715 {
15716 num175 *= 1.1f;
15717 }
15718 if (num174 > 450f)
15719 {
15720 num175 *= 1.1f;
15721 }
15722 if (num174 > 500f)
15723 {
15724 num175 *= 1.1f;
15725 }
15726 if (num174 > 550f)
15727 {
15728 num175 *= 1.1f;
15729 }
15730 if (num174 > 600f)
15731 {
15732 num175 *= 1.1f;
15733 }
15734 switch (num149)
15735 {
15736 case 0:
15737 num175 *= 1.1f;
15738 break;
15739 case 1:
15740 num175 *= 1.05f;
15741 break;
15742 }
15743 }
15744 if (Main.getGoodWorld)
15745 {
15746 num175 *= 1.3f;
15747 }
15748 num174 = num175 / num174;
15749 velocity.X = num172 * num174;
15750 velocity.Y = num173 * num174;
15751 }
15752 else if (this.ai[1] == 2f)
15753 {
15754 damage = 1000;
15755 defense = 9999;
15756 rotation += (float)direction * 0.3f;
15757 Vector2 vector21 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15758 float num176 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector21.X;
15759 float num177 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector21.Y;
15760 float num178 = (float)Math.Sqrt(num176 * num176 + num177 * num177);
15761 num178 = 8f / num178;
15762 velocity.X = num176 * num178;
15763 velocity.Y = num177 * num178;
15764 }
15765 else if (this.ai[1] == 3f)
15766 {
15767 velocity.Y += 0.1f;
15768 if (velocity.Y < 0f)
15769 {
15770 velocity.Y *= 0.95f;
15771 }
15772 velocity.X *= 0.95f;
15773 EncourageDespawn(50);
15774 }
15775 if (this.ai[1] != 2f && this.ai[1] != 3f && type != 68 && (num149 != 0 || !Main.expertMode))
15776 {
15777 int num179 = Dust.NewDust(new Vector2(position.X + (float)(width / 2) - 15f - velocity.X * 5f, position.Y + (float)height - 2f), 30, 10, 5, (0f - velocity.X) * 0.2f, 3f, 0, default(Color), 2f);
15778 Main.dust[num179].noGravity = true;
15779 Main.dust[num179].velocity.X *= 1.3f;
15780 Main.dust[num179].velocity.X += velocity.X * 0.4f;
15781 Main.dust[num179].velocity.Y += 2f + velocity.Y;
15782 for (int num180 = 0; num180 < 2; num180++)
15783 {
15784 num179 = Dust.NewDust(new Vector2(position.X, position.Y + 120f), width, 60, 5, velocity.X, velocity.Y, 0, default(Color), 2f);
15785 Main.dust[num179].noGravity = true;
15786 Dust dust = Main.dust[num179];
15787 dust.velocity -= velocity;
15788 Main.dust[num179].velocity.Y += 5f;
15789 }
15790 }
15791 return;
15792 }
15793 if (aiStyle == 12)
15794 {
15795 spriteDirection = -(int)this.ai[0];
15796 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 11)
15797 {
15798 this.ai[2] += 10f;
15799 if (this.ai[2] > 50f || Main.netMode != 2)
15800 {
15801 life = -1;
15802 HitEffect();
15803 active = false;
15804 }
15805 }
15806 if (this.ai[2] == 0f || this.ai[2] == 3f)
15807 {
15808 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
15809 {
15810 EncourageDespawn(10);
15811 }
15812 if (Main.npc[(int)this.ai[1]].ai[1] != 0f)
15813 {
15814 if (position.Y > Main.npc[(int)this.ai[1]].position.Y - 100f)
15815 {
15816 if (velocity.Y > 0f)
15817 {
15818 velocity.Y *= 0.96f;
15819 }
15820 velocity.Y -= 0.07f;
15821 if (velocity.Y > 6f)
15822 {
15823 velocity.Y = 6f;
15824 }
15825 }
15826 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 100f)
15827 {
15828 if (velocity.Y < 0f)
15829 {
15830 velocity.Y *= 0.96f;
15831 }
15832 velocity.Y += 0.07f;
15833 if (velocity.Y < -6f)
15834 {
15835 velocity.Y = -6f;
15836 }
15837 }
15838 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
15839 {
15840 if (velocity.X > 0f)
15841 {
15842 velocity.X *= 0.96f;
15843 }
15844 velocity.X -= 0.1f;
15845 if (velocity.X > 8f)
15846 {
15847 velocity.X = 8f;
15848 }
15849 }
15850 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
15851 {
15852 if (velocity.X < 0f)
15853 {
15854 velocity.X *= 0.96f;
15855 }
15856 velocity.X += 0.1f;
15857 if (velocity.X < -8f)
15858 {
15859 velocity.X = -8f;
15860 }
15861 }
15862 }
15863 else
15864 {
15865 this.ai[3] += 1f;
15866 if (Main.expertMode)
15867 {
15868 this.ai[3] += 0.5f;
15869 }
15870 if (this.ai[3] >= 300f)
15871 {
15872 this.ai[2] += 1f;
15873 this.ai[3] = 0f;
15874 netUpdate = true;
15875 }
15876 if (Main.expertMode)
15877 {
15878 if (position.Y > Main.npc[(int)this.ai[1]].position.Y + 230f)
15879 {
15880 if (velocity.Y > 0f)
15881 {
15882 velocity.Y *= 0.96f;
15883 }
15884 velocity.Y -= 0.04f;
15885 if (velocity.Y > 3f)
15886 {
15887 velocity.Y = 3f;
15888 }
15889 }
15890 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y + 230f)
15891 {
15892 if (velocity.Y < 0f)
15893 {
15894 velocity.Y *= 0.96f;
15895 }
15896 velocity.Y += 0.04f;
15897 if (velocity.Y < -3f)
15898 {
15899 velocity.Y = -3f;
15900 }
15901 }
15902 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0])
15903 {
15904 if (velocity.X > 0f)
15905 {
15906 velocity.X *= 0.96f;
15907 }
15908 velocity.X -= 0.07f;
15909 if (velocity.X > 8f)
15910 {
15911 velocity.X = 8f;
15912 }
15913 }
15914 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0])
15915 {
15916 if (velocity.X < 0f)
15917 {
15918 velocity.X *= 0.96f;
15919 }
15920 velocity.X += 0.07f;
15921 if (velocity.X < -8f)
15922 {
15923 velocity.X = -8f;
15924 }
15925 }
15926 }
15927 if (position.Y > Main.npc[(int)this.ai[1]].position.Y + 230f)
15928 {
15929 if (velocity.Y > 0f)
15930 {
15931 velocity.Y *= 0.96f;
15932 }
15933 velocity.Y -= 0.04f;
15934 if (velocity.Y > 3f)
15935 {
15936 velocity.Y = 3f;
15937 }
15938 }
15939 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y + 230f)
15940 {
15941 if (velocity.Y < 0f)
15942 {
15943 velocity.Y *= 0.96f;
15944 }
15945 velocity.Y += 0.04f;
15946 if (velocity.Y < -3f)
15947 {
15948 velocity.Y = -3f;
15949 }
15950 }
15951 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0])
15952 {
15953 if (velocity.X > 0f)
15954 {
15955 velocity.X *= 0.96f;
15956 }
15957 velocity.X -= 0.07f;
15958 if (velocity.X > 8f)
15959 {
15960 velocity.X = 8f;
15961 }
15962 }
15963 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0])
15964 {
15965 if (velocity.X < 0f)
15966 {
15967 velocity.X *= 0.96f;
15968 }
15969 velocity.X += 0.07f;
15970 if (velocity.X < -8f)
15971 {
15972 velocity.X = -8f;
15973 }
15974 }
15975 }
15976 Vector2 vector22 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15977 float num181 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector22.X;
15978 float num182 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector22.Y;
15979 float num183 = (float)Math.Sqrt(num181 * num181 + num182 * num182);
15980 rotation = (float)Math.Atan2(num182, num181) + 1.57f;
15981 }
15982 else if (this.ai[2] == 1f)
15983 {
15984 Vector2 vector23 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
15985 float num184 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector23.X;
15986 float num185 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector23.Y;
15987 float num186 = (float)Math.Sqrt(num184 * num184 + num185 * num185);
15988 rotation = (float)Math.Atan2(num185, num184) + 1.57f;
15989 velocity.X *= 0.95f;
15990 velocity.Y -= 0.1f;
15991 if (Main.expertMode)
15992 {
15993 velocity.Y -= 0.06f;
15994 if (velocity.Y < -13f)
15995 {
15996 velocity.Y = -13f;
15997 }
15998 }
15999 else if (velocity.Y < -8f)
16000 {
16001 velocity.Y = -8f;
16002 }
16003 if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 200f)
16004 {
16005 TargetClosest();
16006 this.ai[2] = 2f;
16007 vector23 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16008 num184 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector23.X;
16009 num185 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector23.Y;
16010 num186 = (float)Math.Sqrt(num184 * num184 + num185 * num185);
16011 num186 = ((!Main.expertMode) ? (18f / num186) : (21f / num186));
16012 velocity.X = num184 * num186;
16013 velocity.Y = num185 * num186;
16014 netUpdate = true;
16015 }
16016 }
16017 else if (this.ai[2] == 2f)
16018 {
16019 if (position.Y > Main.player[target].position.Y || velocity.Y < 0f)
16020 {
16021 this.ai[2] = 3f;
16022 }
16023 }
16024 else if (this.ai[2] == 4f)
16025 {
16026 Vector2 vector24 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16027 float num187 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector24.X;
16028 float num188 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector24.Y;
16029 float num189 = (float)Math.Sqrt(num187 * num187 + num188 * num188);
16030 rotation = (float)Math.Atan2(num188, num187) + 1.57f;
16031 velocity.Y *= 0.95f;
16032 velocity.X += 0.1f * (0f - this.ai[0]);
16033 if (Main.expertMode)
16034 {
16035 velocity.X += 0.07f * (0f - this.ai[0]);
16036 if (velocity.X < -12f)
16037 {
16038 velocity.X = -12f;
16039 }
16040 else if (velocity.X > 12f)
16041 {
16042 velocity.X = 12f;
16043 }
16044 }
16045 else if (velocity.X < -8f)
16046 {
16047 velocity.X = -8f;
16048 }
16049 else if (velocity.X > 8f)
16050 {
16051 velocity.X = 8f;
16052 }
16053 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 500f || position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 500f)
16054 {
16055 TargetClosest();
16056 this.ai[2] = 5f;
16057 vector24 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16058 num187 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector24.X;
16059 num188 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector24.Y;
16060 num189 = (float)Math.Sqrt(num187 * num187 + num188 * num188);
16061 num189 = ((!Main.expertMode) ? (17f / num189) : (22f / num189));
16062 velocity.X = num187 * num189;
16063 velocity.Y = num188 * num189;
16064 netUpdate = true;
16065 }
16066 }
16067 else if (this.ai[2] == 5f && ((velocity.X > 0f && 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))))
16068 {
16069 this.ai[2] = 0f;
16070 }
16071 return;
16072 }
16073 if (aiStyle == 13)
16074 {
16075 if (this.ai[0] < 0f || this.ai[0] >= (float)Main.maxTilesX || this.ai[1] < 0f || this.ai[1] >= (float)Main.maxTilesX)
16076 {
16077 return;
16078 }
16079 if (Main.tile[(int)this.ai[0], (int)this.ai[1]] == null)
16080 {
16081 Main.tile[(int)this.ai[0], (int)this.ai[1]] = new Tile();
16082 }
16083 if (!Main.tile[(int)this.ai[0], (int)this.ai[1]].active())
16084 {
16085 life = -1;
16086 HitEffect();
16087 active = false;
16088 return;
16089 }
16090 FixExploitManEaters.ProtectSpot((int)this.ai[0], (int)this.ai[1]);
16091 TargetClosest();
16092 float num190 = 0.035f;
16093 float num191 = 150f;
16094 if (type == 43)
16095 {
16096 num191 = ((!Main.getGoodWorld) ? 250f : 350f);
16097 }
16098 if (type == 101)
16099 {
16100 num191 = 175f;
16101 }
16102 if (type == 259)
16103 {
16104 num191 = 100f;
16105 }
16106 if (type == 175)
16107 {
16108 num191 = 500f;
16109 num190 = 0.05f;
16110 }
16111 if (type == 260)
16112 {
16113 num191 = 350f;
16114 num190 = 0.15f;
16115 }
16116 this.ai[2] += 1f;
16117 if (this.ai[2] > 300f)
16118 {
16119 num191 = (int)((double)num191 * 1.3);
16120 if (this.ai[2] > 450f)
16121 {
16122 this.ai[2] = 0f;
16123 }
16124 }
16125 Vector2 vector25 = new Vector2(this.ai[0] * 16f + 8f, this.ai[1] * 16f + 8f);
16126 float num192 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - (float)(width / 2) - vector25.X;
16127 float num193 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - (float)(height / 2) - vector25.Y;
16128 float num194 = (float)Math.Sqrt(num192 * num192 + num193 * num193);
16129 if (num194 > num191)
16130 {
16131 num194 = num191 / num194;
16132 num192 *= num194;
16133 num193 *= num194;
16134 }
16135 if (position.X < this.ai[0] * 16f + 8f + num192)
16136 {
16137 velocity.X += num190;
16138 if (velocity.X < 0f && num192 > 0f)
16139 {
16140 velocity.X += num190 * 1.5f;
16141 }
16142 }
16143 else if (position.X > this.ai[0] * 16f + 8f + num192)
16144 {
16145 velocity.X -= num190;
16146 if (velocity.X > 0f && num192 < 0f)
16147 {
16148 velocity.X -= num190 * 1.5f;
16149 }
16150 }
16151 if (position.Y < this.ai[1] * 16f + 8f + num193)
16152 {
16153 velocity.Y += num190;
16154 if (velocity.Y < 0f && num193 > 0f)
16155 {
16156 velocity.Y += num190 * 1.5f;
16157 }
16158 }
16159 else if (position.Y > this.ai[1] * 16f + 8f + num193)
16160 {
16161 velocity.Y -= num190;
16162 if (velocity.Y > 0f && num193 < 0f)
16163 {
16164 velocity.Y -= num190 * 1.5f;
16165 }
16166 }
16167 if (type == 43)
16168 {
16169 if (Main.getGoodWorld)
16170 {
16171 if ((double)velocity.X > 3.5)
16172 {
16173 velocity.X = 3.5f;
16174 }
16175 if ((double)velocity.X < -3.5)
16176 {
16177 velocity.X = -3.5f;
16178 }
16179 if ((double)velocity.Y > 3.5)
16180 {
16181 velocity.Y = 3.5f;
16182 }
16183 if ((double)velocity.Y < -3.5)
16184 {
16185 velocity.Y = -3.5f;
16186 }
16187 }
16188 else
16189 {
16190 if (velocity.X > 3f)
16191 {
16192 velocity.X = 3f;
16193 }
16194 if (velocity.X < -3f)
16195 {
16196 velocity.X = -3f;
16197 }
16198 if (velocity.Y > 3f)
16199 {
16200 velocity.Y = 3f;
16201 }
16202 if (velocity.Y < -3f)
16203 {
16204 velocity.Y = -3f;
16205 }
16206 }
16207 }
16208 else if (type == 175)
16209 {
16210 if (velocity.X > 4f)
16211 {
16212 velocity.X = 4f;
16213 }
16214 if (velocity.X < -4f)
16215 {
16216 velocity.X = -4f;
16217 }
16218 if (velocity.Y > 4f)
16219 {
16220 velocity.Y = 4f;
16221 }
16222 if (velocity.Y < -4f)
16223 {
16224 velocity.Y = -4f;
16225 }
16226 }
16227 else
16228 {
16229 if (velocity.X > 2f)
16230 {
16231 velocity.X = 2f;
16232 }
16233 if (velocity.X < -2f)
16234 {
16235 velocity.X = -2f;
16236 }
16237 if (velocity.Y > 2f)
16238 {
16239 velocity.Y = 2f;
16240 }
16241 if (velocity.Y < -2f)
16242 {
16243 velocity.Y = -2f;
16244 }
16245 }
16246 if (type == 259 || type == 260)
16247 {
16248 rotation = (float)Math.Atan2(num193, num192) + 1.57f;
16249 }
16250 else
16251 {
16252 if (num192 > 0f)
16253 {
16254 spriteDirection = 1;
16255 rotation = (float)Math.Atan2(num193, num192);
16256 }
16257 if (num192 < 0f)
16258 {
16259 spriteDirection = -1;
16260 rotation = (float)Math.Atan2(num193, num192) + 3.14f;
16261 }
16262 }
16263 if (collideX)
16264 {
16265 netUpdate = true;
16266 velocity.X = oldVelocity.X * -0.7f;
16267 if (velocity.X > 0f && velocity.X < 2f)
16268 {
16269 velocity.X = 2f;
16270 }
16271 if (velocity.X < 0f && velocity.X > -2f)
16272 {
16273 velocity.X = -2f;
16274 }
16275 }
16276 if (collideY)
16277 {
16278 netUpdate = true;
16279 velocity.Y = oldVelocity.Y * -0.7f;
16280 if (velocity.Y > 0f && velocity.Y < 2f)
16281 {
16282 velocity.Y = 2f;
16283 }
16284 if (velocity.Y < 0f && velocity.Y > -2f)
16285 {
16286 velocity.Y = -2f;
16287 }
16288 }
16289 if (Main.netMode == 1)
16290 {
16291 return;
16292 }
16293 if (type == 101 && !Main.player[target].DeadOrGhost)
16294 {
16295 if (justHit)
16296 {
16297 localAI[0] = 0f;
16298 }
16299 localAI[0] += 1f;
16300 if (localAI[0] >= 120f)
16301 {
16302 if (!Collision.SolidCollision(position, width, height) && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16303 {
16304 float num195 = 10f;
16305 vector25 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16306 num192 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector25.X + (float)Main.rand.Next(-10, 11);
16307 num193 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector25.Y + (float)Main.rand.Next(-10, 11);
16308 num194 = (float)Math.Sqrt(num192 * num192 + num193 * num193);
16309 num194 = num195 / num194;
16310 num192 *= num194;
16311 num193 *= num194;
16313 int num196 = 96;
16314 int num197 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector25.X, vector25.Y, num192, num193, num196, attackDamage_ForProjectiles2, 0f, Main.myPlayer);
16315 Main.projectile[num197].timeLeft = 300;
16316 localAI[0] = 0f;
16317 }
16318 else
16319 {
16320 localAI[0] = 100f;
16321 }
16322 }
16323 }
16324 if (type != 260 || Main.player[target].DeadOrGhost)
16325 {
16326 return;
16327 }
16328 if (justHit)
16329 {
16330 localAI[0] = 0f;
16331 }
16332 localAI[0] += 1f;
16333 if (!(localAI[0] >= 150f))
16334 {
16335 return;
16336 }
16337 if (!Collision.SolidCollision(position, width, height) && Collision.CanHit(this, Main.player[target]))
16338 {
16339 float num198 = 14f;
16340 vector25 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16341 num192 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector25.X + (float)Main.rand.Next(-10, 11);
16342 float num199 = Math.Abs(num192 * 0.1f);
16343 if (num193 > 0f)
16344 {
16345 num199 = 0f;
16346 }
16347 num193 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector25.Y + (float)Main.rand.Next(-10, 11) - num199;
16348 num194 = (float)Math.Sqrt(num192 * num192 + num193 * num193);
16349 num194 = num198 / num194;
16350 num192 *= num194;
16351 num193 *= num194;
16352 int num200 = NewNPC(GetSpawnSourceForProjectileNPC(), (int)base.Center.X, (int)base.Center.Y, 261);
16353 Main.npc[num200].velocity.X = num192;
16354 Main.npc[num200].velocity.Y = num193;
16355 Main.npc[num200].netUpdate = true;
16356 localAI[0] = 0f;
16357 }
16358 else
16359 {
16360 localAI[0] = 250f;
16361 }
16362 return;
16363 }
16364 if (aiStyle == 14)
16365 {
16366 noGravity = true;
16367 if (collideX)
16368 {
16369 velocity.X = oldVelocity.X * -0.5f;
16370 if (direction == -1 && velocity.X > 0f && velocity.X < 2f)
16371 {
16372 velocity.X = 2f;
16373 }
16374 if (direction == 1 && velocity.X < 0f && velocity.X > -2f)
16375 {
16376 velocity.X = -2f;
16377 }
16378 }
16379 if (collideY)
16380 {
16381 velocity.Y = oldVelocity.Y * -0.5f;
16382 if (velocity.Y > 0f && velocity.Y < 1f)
16383 {
16384 velocity.Y = 1f;
16385 }
16386 if (velocity.Y < 0f && velocity.Y > -1f)
16387 {
16388 velocity.Y = -1f;
16389 }
16390 }
16391 if (type == 226)
16392 {
16393 int num201 = 1;
16394 int num202 = 1;
16395 if (velocity.X < 0f)
16396 {
16397 num201 = -1;
16398 }
16399 if (velocity.Y < 0f)
16400 {
16401 num202 = -1;
16402 }
16403 TargetClosest();
16404 if (!Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16405 {
16406 direction = num201;
16408 }
16409 }
16410 else
16411 {
16412 TargetClosest();
16413 }
16414 if (type == 158)
16415 {
16416 if ((double)position.Y < Main.worldSurface * 16.0 && Main.IsItDay() && !Main.eclipse)
16417 {
16418 directionY = -1;
16419 direction *= -1;
16420 }
16421 if (direction == -1 && velocity.X > -7f)
16422 {
16423 velocity.X -= 0.2f;
16424 if (velocity.X > 4f)
16425 {
16426 velocity.X -= 0.1f;
16427 }
16428 else if (velocity.X > 0f)
16429 {
16430 velocity.X += 0.05f;
16431 }
16432 if (velocity.X < -7f)
16433 {
16434 velocity.X = -7f;
16435 }
16436 }
16437 else if (direction == 1 && velocity.X < 7f)
16438 {
16439 velocity.X += 0.2f;
16440 if (velocity.X < -4f)
16441 {
16442 velocity.X += 0.1f;
16443 }
16444 else if (velocity.X < 0f)
16445 {
16446 velocity.X -= 0.05f;
16447 }
16448 if (velocity.X > 7f)
16449 {
16450 velocity.X = 7f;
16451 }
16452 }
16453 if (directionY == -1 && velocity.Y > -7f)
16454 {
16455 velocity.Y -= 0.2f;
16456 if (velocity.Y > 4f)
16457 {
16458 velocity.Y -= 0.1f;
16459 }
16460 else if (velocity.Y > 0f)
16461 {
16462 velocity.Y += 0.05f;
16463 }
16464 if (velocity.Y < -7f)
16465 {
16466 velocity.Y = -7f;
16467 }
16468 }
16469 else if (directionY == 1 && velocity.Y < 7f)
16470 {
16471 velocity.Y += 0.2f;
16472 if (velocity.Y < -4f)
16473 {
16474 velocity.Y += 0.1f;
16475 }
16476 else if (velocity.Y < 0f)
16477 {
16478 velocity.Y -= 0.05f;
16479 }
16480 if (velocity.Y > 7f)
16481 {
16482 velocity.Y = 7f;
16483 }
16484 }
16485 }
16486 else if (type == 226)
16487 {
16488 if (direction == -1 && velocity.X > -4f)
16489 {
16490 velocity.X -= 0.2f;
16491 if (velocity.X > 4f)
16492 {
16493 velocity.X -= 0.1f;
16494 }
16495 else if (velocity.X > 0f)
16496 {
16497 velocity.X += 0.05f;
16498 }
16499 if (velocity.X < -4f)
16500 {
16501 velocity.X = -4f;
16502 }
16503 }
16504 else if (direction == 1 && velocity.X < 4f)
16505 {
16506 velocity.X += 0.2f;
16507 if (velocity.X < -4f)
16508 {
16509 velocity.X += 0.1f;
16510 }
16511 else if (velocity.X < 0f)
16512 {
16513 velocity.X -= 0.05f;
16514 }
16515 if (velocity.X > 4f)
16516 {
16517 velocity.X = 4f;
16518 }
16519 }
16520 if (directionY == -1 && (double)velocity.Y > -2.5)
16521 {
16522 velocity.Y -= 0.1f;
16523 if ((double)velocity.Y > 2.5)
16524 {
16525 velocity.Y -= 0.05f;
16526 }
16527 else if (velocity.Y > 0f)
16528 {
16529 velocity.Y += 0.03f;
16530 }
16531 if ((double)velocity.Y < -2.5)
16532 {
16533 velocity.Y = -2.5f;
16534 }
16535 }
16536 else if (directionY == 1 && (double)velocity.Y < 2.5)
16537 {
16538 velocity.Y += 0.1f;
16539 if ((double)velocity.Y < -2.5)
16540 {
16541 velocity.Y += 0.05f;
16542 }
16543 else if (velocity.Y < 0f)
16544 {
16545 velocity.Y -= 0.03f;
16546 }
16547 if ((double)velocity.Y > 2.5)
16548 {
16549 velocity.Y = 2.5f;
16550 }
16551 }
16552 }
16553 else if (type == 660)
16554 {
16555 float num203 = 0.1f;
16556 float num204 = 0.04f;
16557 float num205 = 4f;
16558 float num206 = 1.5f;
16559 int num207 = type;
16560 if (num207 == 660)
16561 {
16562 num203 = 0.35f;
16563 num204 = 0.3f;
16564 num205 = 6f;
16565 num206 = 5f;
16566 }
16567 if (direction == -1 && velocity.X > 0f - num205)
16568 {
16569 velocity.X -= num203;
16570 if (velocity.X > num205)
16571 {
16572 velocity.X -= num203;
16573 }
16574 else if (velocity.X > 0f)
16575 {
16576 velocity.X += num203 * 0.5f;
16577 }
16578 if (velocity.X < 0f - num205)
16579 {
16580 velocity.X = 0f - num205;
16581 }
16582 }
16583 else if (direction == 1 && velocity.X < num205)
16584 {
16585 velocity.X += num203;
16586 if (velocity.X < 0f - num205)
16587 {
16588 velocity.X += num203;
16589 }
16590 else if (velocity.X < 0f)
16591 {
16592 velocity.X -= num203 * 0.5f;
16593 }
16594 if (velocity.X > num205)
16595 {
16596 velocity.X = num205;
16597 }
16598 }
16599 if (directionY == -1 && velocity.Y > 0f - num206)
16600 {
16601 velocity.Y -= num204;
16602 if (velocity.Y > num206)
16603 {
16604 velocity.Y -= num204;
16605 }
16606 else if (velocity.Y > 0f)
16607 {
16608 velocity.Y += num204 * 0.75f;
16609 }
16610 if (velocity.Y < 0f - num206)
16611 {
16612 velocity.Y = 0f - num206;
16613 }
16614 }
16615 else if (directionY == 1 && velocity.Y < num206)
16616 {
16617 velocity.Y += num204;
16618 if (velocity.Y < 0f - num206)
16619 {
16620 velocity.Y += num204;
16621 }
16622 else if (velocity.Y < 0f)
16623 {
16624 velocity.Y -= num204 * 0.75f;
16625 }
16626 if (velocity.Y > num206)
16627 {
16628 velocity.Y = num206;
16629 }
16630 }
16631 }
16632 else
16633 {
16634 if (direction == -1 && velocity.X > -4f)
16635 {
16636 velocity.X -= 0.1f;
16637 if (velocity.X > 4f)
16638 {
16639 velocity.X -= 0.1f;
16640 }
16641 else if (velocity.X > 0f)
16642 {
16643 velocity.X += 0.05f;
16644 }
16645 if (velocity.X < -4f)
16646 {
16647 velocity.X = -4f;
16648 }
16649 }
16650 else if (direction == 1 && velocity.X < 4f)
16651 {
16652 velocity.X += 0.1f;
16653 if (velocity.X < -4f)
16654 {
16655 velocity.X += 0.1f;
16656 }
16657 else if (velocity.X < 0f)
16658 {
16659 velocity.X -= 0.05f;
16660 }
16661 if (velocity.X > 4f)
16662 {
16663 velocity.X = 4f;
16664 }
16665 }
16666 if (directionY == -1 && (double)velocity.Y > -1.5)
16667 {
16668 velocity.Y -= 0.04f;
16669 if ((double)velocity.Y > 1.5)
16670 {
16671 velocity.Y -= 0.05f;
16672 }
16673 else if (velocity.Y > 0f)
16674 {
16675 velocity.Y += 0.03f;
16676 }
16677 if ((double)velocity.Y < -1.5)
16678 {
16679 velocity.Y = -1.5f;
16680 }
16681 }
16682 else if (directionY == 1 && (double)velocity.Y < 1.5)
16683 {
16684 velocity.Y += 0.04f;
16685 if ((double)velocity.Y < -1.5)
16686 {
16687 velocity.Y += 0.05f;
16688 }
16689 else if (velocity.Y < 0f)
16690 {
16691 velocity.Y -= 0.03f;
16692 }
16693 if ((double)velocity.Y > 1.5)
16694 {
16695 velocity.Y = 1.5f;
16696 }
16697 }
16698 }
16699 if (type == 49 || type == 51 || type == 60 || type == 62 || type == 66 || type == 93 || type == 137 || type == 150 || type == 151 || type == 152 || type == 634)
16700 {
16701 if (wet)
16702 {
16703 if (velocity.Y > 0f)
16704 {
16705 velocity.Y *= 0.95f;
16706 }
16707 velocity.Y -= 0.5f;
16708 if (velocity.Y < -4f)
16709 {
16710 velocity.Y = -4f;
16711 }
16712 TargetClosest();
16713 }
16714 if (type == 60)
16715 {
16716 if (direction == -1 && velocity.X > -4f)
16717 {
16718 velocity.X -= 0.1f;
16719 if (velocity.X > 4f)
16720 {
16721 velocity.X -= 0.07f;
16722 }
16723 else if (velocity.X > 0f)
16724 {
16725 velocity.X += 0.03f;
16726 }
16727 if (velocity.X < -4f)
16728 {
16729 velocity.X = -4f;
16730 }
16731 }
16732 else if (direction == 1 && velocity.X < 4f)
16733 {
16734 velocity.X += 0.1f;
16735 if (velocity.X < -4f)
16736 {
16737 velocity.X += 0.07f;
16738 }
16739 else if (velocity.X < 0f)
16740 {
16741 velocity.X -= 0.03f;
16742 }
16743 if (velocity.X > 4f)
16744 {
16745 velocity.X = 4f;
16746 }
16747 }
16748 if (directionY == -1 && (double)velocity.Y > -1.5)
16749 {
16750 velocity.Y -= 0.04f;
16751 if ((double)velocity.Y > 1.5)
16752 {
16753 velocity.Y -= 0.03f;
16754 }
16755 else if (velocity.Y > 0f)
16756 {
16757 velocity.Y += 0.02f;
16758 }
16759 if ((double)velocity.Y < -1.5)
16760 {
16761 velocity.Y = -1.5f;
16762 }
16763 }
16764 else if (directionY == 1 && (double)velocity.Y < 1.5)
16765 {
16766 velocity.Y += 0.04f;
16767 if ((double)velocity.Y < -1.5)
16768 {
16769 velocity.Y += 0.03f;
16770 }
16771 else if (velocity.Y < 0f)
16772 {
16773 velocity.Y -= 0.02f;
16774 }
16775 if ((double)velocity.Y > 1.5)
16776 {
16777 velocity.Y = 1.5f;
16778 }
16779 }
16780 }
16781 else
16782 {
16783 if (direction == -1 && velocity.X > -4f)
16784 {
16785 velocity.X -= 0.1f;
16786 if (velocity.X > 4f)
16787 {
16788 velocity.X -= 0.1f;
16789 }
16790 else if (velocity.X > 0f)
16791 {
16792 velocity.X += 0.05f;
16793 }
16794 if (velocity.X < -4f)
16795 {
16796 velocity.X = -4f;
16797 }
16798 }
16799 else if (direction == 1 && velocity.X < 4f)
16800 {
16801 velocity.X += 0.1f;
16802 if (velocity.X < -4f)
16803 {
16804 velocity.X += 0.1f;
16805 }
16806 else if (velocity.X < 0f)
16807 {
16808 velocity.X -= 0.05f;
16809 }
16810 if (velocity.X > 4f)
16811 {
16812 velocity.X = 4f;
16813 }
16814 }
16815 if (directionY == -1 && (double)velocity.Y > -1.5)
16816 {
16817 velocity.Y -= 0.04f;
16818 if ((double)velocity.Y > 1.5)
16819 {
16820 velocity.Y -= 0.05f;
16821 }
16822 else if (velocity.Y > 0f)
16823 {
16824 velocity.Y += 0.03f;
16825 }
16826 if ((double)velocity.Y < -1.5)
16827 {
16828 velocity.Y = -1.5f;
16829 }
16830 }
16831 else if (directionY == 1 && (double)velocity.Y < 1.5)
16832 {
16833 velocity.Y += 0.04f;
16834 if ((double)velocity.Y < -1.5)
16835 {
16836 velocity.Y += 0.05f;
16837 }
16838 else if (velocity.Y < 0f)
16839 {
16840 velocity.Y -= 0.03f;
16841 }
16842 if ((double)velocity.Y > 1.5)
16843 {
16844 velocity.Y = 1.5f;
16845 }
16846 }
16847 }
16848 }
16849 if (type == 48 && wet)
16850 {
16851 if (velocity.Y > 0f)
16852 {
16853 velocity.Y *= 0.95f;
16854 }
16855 velocity.Y -= 0.5f;
16856 if (velocity.Y < -4f)
16857 {
16858 velocity.Y = -4f;
16859 }
16860 TargetClosest();
16861 }
16862 if (type == 158 && Main.netMode != 1)
16863 {
16864 Vector2 vector26 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16865 float num208 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector26.X;
16866 float num209 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector26.Y;
16867 float num210 = (float)Math.Sqrt(num208 * num208 + num209 * num209);
16868 if (num210 < 200f && position.Y + (float)height < Main.player[target].position.Y + (float)Main.player[target].height && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16869 {
16870 Transform(159);
16871 }
16872 }
16873 this.ai[1] += 1f;
16874 if (type == 158)
16875 {
16876 this.ai[1] += 1f;
16877 }
16878 if (this.ai[1] > 200f)
16879 {
16880 if (!Main.player[target].wet && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16881 {
16882 this.ai[1] = 0f;
16883 }
16884 float num211 = 0.2f;
16885 float num212 = 0.1f;
16886 float num213 = 4f;
16887 float num214 = 1.5f;
16888 if (type == 48 || type == 62 || type == 66)
16889 {
16890 num211 = 0.12f;
16891 num212 = 0.07f;
16892 num213 = 3f;
16893 num214 = 1.25f;
16894 }
16895 if (this.ai[1] > 1000f)
16896 {
16897 this.ai[1] = 0f;
16898 }
16899 this.ai[2] += 1f;
16900 if (this.ai[2] > 0f)
16901 {
16902 if (velocity.Y < num214)
16903 {
16904 velocity.Y += num212;
16905 }
16906 }
16907 else if (velocity.Y > 0f - num214)
16908 {
16909 velocity.Y -= num212;
16910 }
16911 if (this.ai[2] < -150f || this.ai[2] > 150f)
16912 {
16913 if (velocity.X < num213)
16914 {
16915 velocity.X += num211;
16916 }
16917 }
16918 else if (velocity.X > 0f - num213)
16919 {
16920 velocity.X -= num211;
16921 }
16922 if (this.ai[2] > 300f)
16923 {
16924 this.ai[2] = -300f;
16925 }
16926 }
16927 if (Main.netMode == 1)
16928 {
16929 return;
16930 }
16931 if (type == 48)
16932 {
16933 this.ai[0] += 1f;
16934 if (this.ai[0] == 30f || this.ai[0] == 60f || this.ai[0] == 90f)
16935 {
16936 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16937 {
16938 float num215 = 6f;
16939 Vector2 vector27 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16940 float num216 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector27.X + (float)Main.rand.Next(-100, 101);
16941 float num217 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector27.Y + (float)Main.rand.Next(-100, 101);
16942 float num218 = (float)Math.Sqrt(num216 * num216 + num217 * num217);
16943 num218 = num215 / num218;
16944 num216 *= num218;
16945 num217 *= num218;
16946 int num219 = 15;
16947 int num220 = 38;
16948 int num221 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector27.X, vector27.Y, num216, num217, num220, num219, 0f, Main.myPlayer);
16949 Main.projectile[num221].timeLeft = 300;
16950 }
16951 }
16952 else if (this.ai[0] >= (float)(400 + Main.rand.Next(400)))
16953 {
16954 this.ai[0] = 0f;
16955 }
16956 }
16957 if (type == 62 || type == 66)
16958 {
16959 this.ai[0] += 1f;
16960 if (this.ai[0] == 20f || this.ai[0] == 40f || this.ai[0] == 60f || this.ai[0] == 80f)
16961 {
16962 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16963 {
16964 float num222 = 0.2f;
16965 Vector2 vector28 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16966 float num223 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector28.X + (float)Main.rand.Next(-100, 101);
16967 float num224 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector28.Y + (float)Main.rand.Next(-100, 101);
16968 float num225 = (float)Math.Sqrt(num223 * num223 + num224 * num224);
16969 num225 = num222 / num225;
16970 num223 *= num225;
16971 num224 *= num225;
16972 int num226 = 21;
16973 int num227 = 44;
16974 int num228 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector28.X, vector28.Y, num223, num224, num227, num226, 0f, Main.myPlayer);
16975 Main.projectile[num228].timeLeft = 300;
16976 }
16977 }
16978 else if (this.ai[0] >= (float)(300 + Main.rand.Next(300)))
16979 {
16980 this.ai[0] = 0f;
16981 }
16982 }
16983 if (type != 156)
16984 {
16985 return;
16986 }
16987 this.ai[0] += 1f;
16988 if (this.ai[0] == 20f || this.ai[0] == 40f || this.ai[0] == 60f || this.ai[0] == 80f || this.ai[0] == 100f)
16989 {
16990 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
16991 {
16992 float num229 = 0.2f;
16993 Vector2 vector29 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
16994 float num230 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector29.X + (float)Main.rand.Next(-50, 51);
16995 float num231 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector29.Y + (float)Main.rand.Next(-50, 51);
16996 float num232 = (float)Math.Sqrt(num230 * num230 + num231 * num231);
16997 num232 = num229 / num232;
16998 num230 *= num232;
16999 num231 *= num232;
17000 int num233 = 80;
17001 int num234 = 115;
17002 vector29 += velocity * 5f;
17003 int num235 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector29.X + num230 * 100f, vector29.Y + num231 * 100f, num230, num231, num234, num233, 0f, Main.myPlayer);
17004 Main.projectile[num235].timeLeft = 300;
17005 }
17006 }
17007 else if (this.ai[0] >= (float)(250 + Main.rand.Next(250)))
17008 {
17009 this.ai[0] = 0f;
17010 }
17011 return;
17012 }
17013 if (aiStyle == 15)
17014 {
17015 float num236 = 1f;
17016 float num237 = 1f;
17017 bool flag6 = false;
17018 bool flag7 = false;
17019 bool flag8 = false;
17020 float num238 = 2f;
17021 if (Main.getGoodWorld)
17022 {
17023 num238 -= 1f - (float)life / (float)lifeMax;
17024 num237 *= num238;
17025 }
17026 aiAction = 0;
17027 if (this.ai[3] == 0f && life > 0)
17028 {
17029 this.ai[3] = lifeMax;
17030 }
17031 if (localAI[3] == 0f)
17032 {
17033 localAI[3] = 1f;
17034 flag6 = true;
17035 if (Main.netMode != 1)
17036 {
17037 this.ai[0] = -100f;
17038 TargetClosest();
17039 netUpdate = true;
17040 }
17041 }
17042 int num239 = 3000;
17043 if (Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > (float)num239)
17044 {
17045 TargetClosest();
17046 if (Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > (float)num239)
17047 {
17048 EncourageDespawn(10);
17049 if (Main.player[target].Center.X < base.Center.X)
17050 {
17051 direction = 1;
17052 }
17053 else
17054 {
17055 direction = -1;
17056 }
17057 if (Main.netMode != 1 && this.ai[1] != 5f)
17058 {
17059 netUpdate = true;
17060 this.ai[2] = 0f;
17061 this.ai[0] = 0f;
17062 this.ai[1] = 5f;
17063 localAI[1] = Main.maxTilesX * 16;
17064 localAI[2] = Main.maxTilesY * 16;
17065 }
17066 }
17067 }
17068 if (!Main.player[target].dead && timeLeft > 10 && this.ai[2] >= 300f && this.ai[1] < 5f && velocity.Y == 0f)
17069 {
17070 this.ai[2] = 0f;
17071 this.ai[0] = 0f;
17072 this.ai[1] = 5f;
17073 if (Main.netMode != 1)
17074 {
17076 Point point3 = base.Center.ToTileCoordinates();
17077 Point point4 = Main.player[target].Center.ToTileCoordinates();
17078 Vector2 vector30 = Main.player[target].Center - base.Center;
17079 int num240 = 10;
17080 int num241 = 0;
17081 int num242 = 7;
17082 int num243 = 0;
17083 bool flag9 = false;
17084 if (localAI[0] >= 360f || vector30.Length() > 2000f)
17085 {
17086 if (localAI[0] >= 360f)
17087 {
17088 localAI[0] = 360f;
17089 }
17090 flag9 = true;
17091 num243 = 100;
17092 }
17093 while (!flag9 && num243 < 100)
17094 {
17095 num243++;
17096 int num244 = Main.rand.Next(point4.X - num240, point4.X + num240 + 1);
17097 int num245 = Main.rand.Next(point4.Y - num240, point4.Y + 1);
17099 {
17100 continue;
17101 }
17102 int num246 = num245;
17103 int num247 = 0;
17104 if (Main.tile[num244, num246].nactive() && Main.tileSolid[Main.tile[num244, num246].type] && !Main.tileSolidTop[Main.tile[num244, num246].type])
17105 {
17106 num247 = 1;
17107 }
17108 else
17109 {
17110 for (; num247 < 150 && num246 + num247 < Main.maxTilesY; num247++)
17111 {
17112 int num248 = num246 + num247;
17113 if (Main.tile[num244, num248].nactive() && Main.tileSolid[Main.tile[num244, num248].type] && !Main.tileSolidTop[Main.tile[num244, num248].type])
17114 {
17115 num247--;
17116 break;
17117 }
17118 }
17119 }
17120 num245 += num247;
17121 bool flag10 = true;
17122 if (flag10 && Main.tile[num244, num245].lava())
17123 {
17124 flag10 = false;
17125 }
17126 if (flag10 && !Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0))
17127 {
17128 flag10 = false;
17129 }
17130 if (flag10)
17131 {
17132 localAI[1] = num244 * 16 + 8;
17133 localAI[2] = num245 * 16 + 16;
17134 flag9 = true;
17135 break;
17136 }
17137 }
17138 if (num243 >= 100)
17139 {
17140 Vector2 bottom = Main.player[Player.FindClosest(position, width, height)].Bottom;
17141 localAI[1] = bottom.X;
17142 localAI[2] = bottom.Y;
17143 }
17144 }
17145 }
17146 if (!Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0) || Math.Abs(base.Top.Y - Main.player[target].Bottom.Y) > 160f)
17147 {
17148 this.ai[2]++;
17149 if (Main.netMode != 1)
17150 {
17151 localAI[0]++;
17152 }
17153 }
17154 else if (Main.netMode != 1)
17155 {
17156 localAI[0]--;
17157 if (localAI[0] < 0f)
17158 {
17159 localAI[0] = 0f;
17160 }
17161 }
17162 if (timeLeft < 10 && (this.ai[0] != 0f || this.ai[1] != 0f))
17163 {
17164 this.ai[0] = 0f;
17165 this.ai[1] = 0f;
17166 netUpdate = true;
17167 flag7 = false;
17168 }
17169 Dust dust;
17170 if (this.ai[1] == 5f)
17171 {
17172 flag7 = true;
17173 aiAction = 1;
17174 this.ai[0]++;
17175 num236 = MathHelper.Clamp((60f - this.ai[0]) / 60f, 0f, 1f);
17176 num236 = 0.5f + num236 * 0.5f;
17177 if (this.ai[0] >= 60f)
17178 {
17179 flag8 = true;
17180 }
17181 if (this.ai[0] == 60f)
17182 {
17183 Gore.NewGore(base.Center + new Vector2(-40f, -height / 2), velocity, 734);
17184 }
17185 if (this.ai[0] >= 60f && Main.netMode != 1)
17186 {
17187 base.Bottom = new Vector2(localAI[1], localAI[2]);
17188 this.ai[1] = 6f;
17189 this.ai[0] = 0f;
17190 netUpdate = true;
17191 }
17192 if (Main.netMode == 1 && this.ai[0] >= 120f)
17193 {
17194 this.ai[1] = 6f;
17195 this.ai[0] = 0f;
17196 }
17197 if (!flag8)
17198 {
17199 for (int num249 = 0; num249 < 10; num249++)
17200 {
17201 int num250 = Dust.NewDust(position + Vector2.UnitX * -20f, width + 40, height, 4, velocity.X, velocity.Y, 150, new Color(78, 136, 255, 80), 2f);
17202 Main.dust[num250].noGravity = true;
17203 dust = Main.dust[num250];
17204 dust.velocity *= 0.5f;
17205 }
17206 }
17207 }
17208 else if (this.ai[1] == 6f)
17209 {
17210 flag7 = true;
17211 aiAction = 0;
17212 this.ai[0]++;
17213 num236 = MathHelper.Clamp(this.ai[0] / 30f, 0f, 1f);
17214 num236 = 0.5f + num236 * 0.5f;
17215 if (this.ai[0] >= 30f && Main.netMode != 1)
17216 {
17217 this.ai[1] = 0f;
17218 this.ai[0] = 0f;
17219 netUpdate = true;
17220 TargetClosest();
17221 }
17222 if (Main.netMode == 1 && this.ai[0] >= 60f)
17223 {
17224 this.ai[1] = 0f;
17225 this.ai[0] = 0f;
17226 TargetClosest();
17227 }
17228 for (int num251 = 0; num251 < 10; num251++)
17229 {
17230 int num252 = Dust.NewDust(position + Vector2.UnitX * -20f, width + 40, height, 4, velocity.X, velocity.Y, 150, new Color(78, 136, 255, 80), 2f);
17231 Main.dust[num252].noGravity = true;
17232 dust = Main.dust[num252];
17233 dust.velocity *= 2f;
17234 }
17235 }
17237 if (velocity.Y == 0f)
17238 {
17239 velocity.X *= 0.8f;
17240 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
17241 {
17242 velocity.X = 0f;
17243 }
17244 if (!flag7)
17245 {
17246 this.ai[0] += 2f;
17247 if ((double)life < (double)lifeMax * 0.8)
17248 {
17249 this.ai[0] += 1f;
17250 }
17251 if ((double)life < (double)lifeMax * 0.6)
17252 {
17253 this.ai[0] += 1f;
17254 }
17255 if ((double)life < (double)lifeMax * 0.4)
17256 {
17257 this.ai[0] += 2f;
17258 }
17259 if ((double)life < (double)lifeMax * 0.2)
17260 {
17261 this.ai[0] += 3f;
17262 }
17263 if ((double)life < (double)lifeMax * 0.1)
17264 {
17265 this.ai[0] += 4f;
17266 }
17267 if (this.ai[0] >= 0f)
17268 {
17269 netUpdate = true;
17270 TargetClosest();
17271 if (this.ai[1] == 3f)
17272 {
17273 velocity.Y = -13f;
17274 velocity.X += 3.5f * (float)direction;
17275 this.ai[0] = -200f;
17276 this.ai[1] = 0f;
17277 }
17278 else if (this.ai[1] == 2f)
17279 {
17280 velocity.Y = -6f;
17281 velocity.X += 4.5f * (float)direction;
17282 this.ai[0] = -120f;
17283 this.ai[1] += 1f;
17284 }
17285 else
17286 {
17287 velocity.Y = -8f;
17288 velocity.X += 4f * (float)direction;
17289 this.ai[0] = -120f;
17290 this.ai[1] += 1f;
17291 }
17292 }
17293 else if (this.ai[0] >= -30f)
17294 {
17295 aiAction = 1;
17296 }
17297 }
17298 }
17299 else if (target < 255)
17300 {
17301 float num253 = 3f;
17302 if (Main.getGoodWorld)
17303 {
17304 num253 = 6f;
17305 }
17306 if ((direction == 1 && velocity.X < num253) || (direction == -1 && velocity.X > 0f - num253))
17307 {
17308 if ((direction == -1 && (double)velocity.X < 0.1) || (direction == 1 && (double)velocity.X > -0.1))
17309 {
17310 velocity.X += 0.2f * (float)direction;
17311 }
17312 else
17313 {
17314 velocity.X *= 0.93f;
17315 }
17316 }
17317 }
17318 int num254 = Dust.NewDust(position, width, height, 4, velocity.X, velocity.Y, 255, new Color(0, 80, 255, 80), scale * 1.2f);
17319 Main.dust[num254].noGravity = true;
17320 dust = Main.dust[num254];
17321 dust.velocity *= 0.5f;
17322 if (life <= 0)
17323 {
17324 return;
17325 }
17326 float num255 = (float)life / (float)lifeMax;
17327 num255 = num255 * 0.5f + 0.75f;
17328 num255 *= num236;
17329 num255 *= num237;
17330 if (num255 != scale || flag6)
17331 {
17332 position.X += width / 2;
17333 position.Y += height;
17334 scale = num255;
17335 width = (int)(98f * scale);
17336 height = (int)(92f * scale);
17337 position.X -= width / 2;
17338 position.Y -= height;
17339 }
17340 if (Main.netMode == 1)
17341 {
17342 return;
17343 }
17344 int num256 = (int)((double)lifeMax * 0.05);
17345 if (!((float)(life + num256) < this.ai[3]))
17346 {
17347 return;
17348 }
17349 this.ai[3] = life;
17350 int num257 = Main.rand.Next(1, 4);
17351 for (int num258 = 0; num258 < num257; num258++)
17352 {
17353 int x = (int)(position.X + (float)Main.rand.Next(width - 32));
17354 int y = (int)(position.Y + (float)Main.rand.Next(height - 32));
17355 int num259 = 1;
17356 if (Main.expertMode && Main.rand.Next(4) == 0)
17357 {
17358 num259 = 535;
17359 }
17361 Main.npc[num260].SetDefaults(num259);
17362 Main.npc[num260].velocity.X = (float)Main.rand.Next(-15, 16) * 0.1f;
17363 Main.npc[num260].velocity.Y = (float)Main.rand.Next(-30, 1) * 0.1f;
17364 Main.npc[num260].ai[0] = -1000 * Main.rand.Next(3);
17365 Main.npc[num260].ai[1] = 0f;
17366 if (Main.netMode == 2 && num260 < 200)
17367 {
17368 NetMessage.SendData(23, -1, -1, null, num260);
17369 }
17370 }
17371 return;
17372 }
17373 if (aiStyle == 16)
17374 {
17375 if (direction == 0)
17376 {
17377 TargetClosest();
17378 }
17379 if (type == 615)
17380 {
17381 if (this.ai[2] == 0f)
17382 {
17383 int num261 = Main.rand.Next(300, 1200);
17384 if ((this.ai[3] += 1f) >= (float)num261)
17385 {
17386 this.ai[2] = Main.rand.Next(1, 3);
17387 if (this.ai[2] == 1f && !Collision.CanHitLine(position, width, height, new Vector2(position.X, position.Y - 128f), width, height))
17388 {
17389 this.ai[2] = 2f;
17390 }
17391 if (this.ai[2] == 2f)
17392 {
17393 TargetClosest();
17394 }
17395 this.ai[3] = 0f;
17396 netUpdate = true;
17397 }
17398 }
17399 if (this.ai[2] == 1f)
17400 {
17401 if (collideY || collideX)
17402 {
17403 this.ai[2] = 0f;
17404 this.ai[3] = 0f;
17405 netUpdate = true;
17406 }
17407 else if (wet)
17408 {
17409 velocity.Y -= 0.4f;
17410 if (velocity.Y < -6f)
17411 {
17412 velocity.Y = -6f;
17413 }
17414 rotation = velocity.Y * (float)direction * 0.3f;
17415 if (rotation < (float)Math.PI * -2f / 5f)
17416 {
17417 rotation = (float)Math.PI * -2f / 5f;
17418 }
17419 if (rotation > (float)Math.PI * 2f / 5f)
17420 {
17421 rotation = (float)Math.PI * 2f / 5f;
17422 }
17423 if (this.ai[3] == 1f)
17424 {
17425 this.ai[2] = 0f;
17426 this.ai[3] = 0f;
17427 netUpdate = true;
17428 }
17429 }
17430 else
17431 {
17432 rotation += (float)direction * 0.2f;
17433 this.ai[3] = 1f;
17434 velocity.Y += 0.3f;
17435 if (velocity.Y > 10f)
17436 {
17437 velocity.Y = 10f;
17438 }
17439 }
17440 return;
17441 }
17442 if (this.ai[2] == 2f)
17443 {
17444 if (collideY || collideX)
17445 {
17446 this.ai[2] = 0f;
17447 this.ai[3] = 0f;
17448 netUpdate = true;
17449 }
17450 else if (wet)
17451 {
17452 velocity.Y -= 0.4f;
17453 if (velocity.Y < -6f)
17454 {
17455 velocity.Y = -6f;
17456 }
17457 rotation = velocity.Y * (float)direction * 0.3f;
17458 if (rotation < (float)Math.PI * -2f / 5f)
17459 {
17460 rotation = (float)Math.PI * -2f / 5f;
17461 }
17462 if (rotation > (float)Math.PI * 2f / 5f)
17463 {
17464 rotation = (float)Math.PI * 2f / 5f;
17465 }
17466 if (Collision.GetWaterLine(base.Top.ToTileCoordinates(), out var waterLineHeight))
17467 {
17468 float y2 = waterLineHeight + 0f - position.Y;
17469 velocity.Y = y2;
17470 velocity.Y = MathHelper.Clamp(velocity.Y, -2f, 0.5f);
17471 rotation = -(float)Math.PI / 5f * (float)direction;
17472 velocity.X *= 0.95f;
17473 if (this.ai[3] == 0f)
17474 {
17475 netUpdate = true;
17476 }
17477 this.ai[3]++;
17478 if (this.ai[3] >= 300f)
17479 {
17480 this.ai[2] = 0f;
17481 this.ai[3] = 0f;
17482 netUpdate = true;
17483 velocity.Y = 4f;
17484 }
17485 if (this.ai[3] == 60f && Main.rand.Next(2) == 0)
17486 {
17487 SoundEngine.PlaySound(45, (int)position.X, (int)position.Y);
17488 }
17489 }
17490 }
17491 else
17492 {
17493 this.ai[2] = 0f;
17494 this.ai[3] = 0f;
17495 netUpdate = true;
17496 velocity.Y += 0.3f;
17497 if (velocity.Y > 10f)
17498 {
17499 velocity.Y = 10f;
17500 }
17501 }
17502 return;
17503 }
17504 }
17505 if (wet)
17506 {
17507 bool flag11 = false;
17508 if (type != 55 && type != 592 && type != 607 && type != 615)
17509 {
17511 if (Main.player[target].wet && !Main.player[target].dead && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
17512 {
17513 flag11 = true;
17514 }
17515 }
17516 int num262 = (int)base.Center.X / 16;
17517 int num263 = (int)(position.Y + (float)height) / 16;
17518 if (Main.tile[num262, num263].topSlope())
17519 {
17520 if (Main.tile[num262, num263].leftSlope())
17521 {
17522 direction = -1;
17523 velocity.X = Math.Abs(velocity.X) * -1f;
17524 }
17525 else
17526 {
17527 direction = 1;
17528 velocity.X = Math.Abs(velocity.X);
17529 }
17530 }
17531 else if (Main.tile[num262, num263 + 1].topSlope())
17532 {
17533 if (Main.tile[num262, num263 + 1].leftSlope())
17534 {
17535 direction = -1;
17536 velocity.X = Math.Abs(velocity.X) * -1f;
17537 }
17538 else
17539 {
17540 direction = 1;
17541 velocity.X = Math.Abs(velocity.X);
17542 }
17543 }
17544 if (!flag11)
17545 {
17546 if (collideX)
17547 {
17548 velocity.X *= -1f;
17549 direction *= -1;
17550 netUpdate = true;
17551 }
17552 if (collideY)
17553 {
17554 netUpdate = true;
17555 if (velocity.Y > 0f)
17556 {
17557 velocity.Y = Math.Abs(velocity.Y) * -1f;
17558 directionY = -1;
17559 this.ai[0] = -1f;
17560 }
17561 else if (velocity.Y < 0f)
17562 {
17563 velocity.Y = Math.Abs(velocity.Y);
17564 directionY = 1;
17565 this.ai[0] = 1f;
17566 }
17567 }
17568 }
17569 if (type == 102)
17570 {
17571 Lighting.AddLight((int)(position.X + (float)(width / 2) + (float)(direction * (width + 8))) / 16, (int)(position.Y + 2f) / 16, 0.07f, 0.04f, 0.025f);
17572 }
17573 if (flag11)
17574 {
17575 TargetClosest();
17576 if (type == 157)
17577 {
17578 if (velocity.X > 0f && direction < 0)
17579 {
17580 velocity.X *= 0.95f;
17581 }
17582 if (velocity.X < 0f && direction > 0)
17583 {
17584 velocity.X *= 0.95f;
17585 }
17586 velocity.X += (float)direction * 0.25f;
17587 velocity.Y += (float)directionY * 0.2f;
17588 if (velocity.X > 8f)
17589 {
17590 velocity.X = 7f;
17591 }
17592 if (velocity.X < -8f)
17593 {
17594 velocity.X = -7f;
17595 }
17596 if (velocity.Y > 5f)
17597 {
17598 velocity.Y = 4f;
17599 }
17600 if (velocity.Y < -5f)
17601 {
17602 velocity.Y = -4f;
17603 }
17604 }
17605 else if (type == 65 || type == 102)
17606 {
17607 velocity.X += (float)direction * 0.15f;
17608 velocity.Y += (float)directionY * 0.15f;
17609 if (velocity.X > 5f)
17610 {
17611 velocity.X = 5f;
17612 }
17613 if (velocity.X < -5f)
17614 {
17615 velocity.X = -5f;
17616 }
17617 if (velocity.Y > 3f)
17618 {
17619 velocity.Y = 3f;
17620 }
17621 if (velocity.Y < -3f)
17622 {
17623 velocity.Y = -3f;
17624 }
17625 }
17626 else
17627 {
17628 velocity.X += (float)direction * 0.1f;
17629 velocity.Y += (float)directionY * 0.1f;
17630 if (velocity.X > 3f)
17631 {
17632 velocity.X = 3f;
17633 }
17634 if (velocity.X < -3f)
17635 {
17636 velocity.X = -3f;
17637 }
17638 if (velocity.Y > 2f)
17639 {
17640 velocity.Y = 2f;
17641 }
17642 if (velocity.Y < -2f)
17643 {
17644 velocity.Y = -2f;
17645 }
17646 }
17647 }
17648 else
17649 {
17650 if (type == 157)
17651 {
17652 if (Main.player[target].position.Y > position.Y)
17653 {
17654 directionY = 1;
17655 }
17656 else
17657 {
17658 directionY = -1;
17659 }
17660 velocity.X += (float)direction * 0.2f;
17661 if (velocity.X < -2f || velocity.X > 2f)
17662 {
17663 velocity.X *= 0.95f;
17664 }
17665 if (this.ai[0] == -1f)
17666 {
17667 float num264 = -0.6f;
17668 if (directionY < 0)
17669 {
17670 num264 = -1f;
17671 }
17672 if (directionY > 0)
17673 {
17674 num264 = -0.2f;
17675 }
17676 velocity.Y -= 0.02f;
17677 if (velocity.Y < num264)
17678 {
17679 this.ai[0] = 1f;
17680 }
17681 }
17682 else
17683 {
17684 float num265 = 0.6f;
17685 if (directionY < 0)
17686 {
17687 num265 = 0.2f;
17688 }
17689 if (directionY > 0)
17690 {
17691 num265 = 1f;
17692 }
17693 velocity.Y += 0.02f;
17694 if (velocity.Y > num265)
17695 {
17696 this.ai[0] = -1f;
17697 }
17698 }
17699 }
17700 else
17701 {
17702 velocity.X += (float)direction * 0.1f;
17703 float num266 = 1f;
17704 if (type == 615)
17705 {
17706 num266 = 3f;
17707 }
17708 if (velocity.X < 0f - num266 || velocity.X > num266)
17709 {
17710 velocity.X *= 0.95f;
17711 }
17712 if (this.ai[0] == -1f)
17713 {
17714 velocity.Y -= 0.01f;
17715 if ((double)velocity.Y < -0.3)
17716 {
17717 this.ai[0] = 1f;
17718 }
17719 }
17720 else
17721 {
17722 velocity.Y += 0.01f;
17723 if ((double)velocity.Y > 0.3)
17724 {
17725 this.ai[0] = -1f;
17726 }
17727 }
17728 }
17729 int num267 = (int)(position.X + (float)(width / 2)) / 16;
17730 int num268 = (int)(position.Y + (float)(height / 2)) / 16;
17731 if (Main.tile[num267, num268 - 1] == null)
17732 {
17733 Main.tile[num267, num268 - 1] = new Tile();
17734 }
17735 if (Main.tile[num267, num268 + 1] == null)
17736 {
17737 Main.tile[num267, num268 + 1] = new Tile();
17738 }
17739 if (Main.tile[num267, num268 + 2] == null)
17740 {
17741 Main.tile[num267, num268 + 2] = new Tile();
17742 }
17743 if (Main.tile[num267, num268 - 1].liquid > 128)
17744 {
17745 if (Main.tile[num267, num268 + 1].active())
17746 {
17747 this.ai[0] = -1f;
17748 }
17749 else if (Main.tile[num267, num268 + 2].active())
17750 {
17751 this.ai[0] = -1f;
17752 }
17753 }
17754 if (type != 157 && ((double)velocity.Y > 0.4 || (double)velocity.Y < -0.4))
17755 {
17756 velocity.Y *= 0.95f;
17757 }
17758 }
17759 }
17760 else
17761 {
17762 if (velocity.Y == 0f)
17763 {
17764 if (type == 65)
17765 {
17766 velocity.X *= 0.94f;
17767 if ((double)velocity.X > -0.2 && (double)velocity.X < 0.2)
17768 {
17769 velocity.X = 0f;
17770 }
17771 }
17772 else if (Main.netMode != 1)
17773 {
17774 velocity.Y = (float)Main.rand.Next(-50, -20) * 0.1f;
17775 velocity.X = (float)Main.rand.Next(-20, 20) * 0.1f;
17776 netUpdate = true;
17777 }
17778 }
17779 velocity.Y += 0.3f;
17780 if (velocity.Y > 10f)
17781 {
17782 velocity.Y = 10f;
17783 }
17784 this.ai[0] = 1f;
17785 }
17786 rotation = velocity.Y * (float)direction * 0.1f;
17787 if ((double)rotation < -0.2)
17788 {
17789 rotation = -0.2f;
17790 }
17791 if ((double)rotation > 0.2)
17792 {
17793 rotation = 0.2f;
17794 }
17795 return;
17796 }
17797 if (aiStyle == 17)
17798 {
17799 noGravity = true;
17800 if (this.ai[0] == 0f)
17801 {
17802 noGravity = false;
17803 TargetClosest();
17804 if (Main.netMode != 1)
17805 {
17806 if (velocity.X != 0f || velocity.Y < 0f || (double)velocity.Y > 0.3)
17807 {
17808 this.ai[0] = 1f;
17809 netUpdate = true;
17810 }
17811 else
17812 {
17813 Rectangle rectangle = new Rectangle((int)Main.player[target].position.X, (int)Main.player[target].position.Y, Main.player[target].width, Main.player[target].height);
17814 if (new Rectangle((int)position.X - 100, (int)position.Y - 100, width + 200, height + 200).Intersects(rectangle) || life < lifeMax)
17815 {
17816 this.ai[0] = 1f;
17817 velocity.Y -= 6f;
17818 netUpdate = true;
17819 }
17820 }
17821 }
17822 }
17823 else if (!Main.player[target].dead)
17824 {
17825 if (collideX)
17826 {
17827 velocity.X = oldVelocity.X * -0.5f;
17828 if (direction == -1 && velocity.X > 0f && velocity.X < 2f)
17829 {
17830 velocity.X = 2f;
17831 }
17832 if (direction == 1 && velocity.X < 0f && velocity.X > -2f)
17833 {
17834 velocity.X = -2f;
17835 }
17836 }
17837 if (collideY)
17838 {
17839 velocity.Y = oldVelocity.Y * -0.5f;
17840 if (velocity.Y > 0f && velocity.Y < 1f)
17841 {
17842 velocity.Y = 1f;
17843 }
17844 if (velocity.Y < 0f && velocity.Y > -1f)
17845 {
17846 velocity.Y = -1f;
17847 }
17848 }
17849 TargetClosest();
17850 if (direction == -1 && velocity.X > -3f)
17851 {
17852 velocity.X -= 0.1f;
17853 if (velocity.X > 3f)
17854 {
17855 velocity.X -= 0.1f;
17856 }
17857 else if (velocity.X > 0f)
17858 {
17859 velocity.X -= 0.05f;
17860 }
17861 if (velocity.X < -3f)
17862 {
17863 velocity.X = -3f;
17864 }
17865 }
17866 else if (direction == 1 && velocity.X < 3f)
17867 {
17868 velocity.X += 0.1f;
17869 if (velocity.X < -3f)
17870 {
17871 velocity.X += 0.1f;
17872 }
17873 else if (velocity.X < 0f)
17874 {
17875 velocity.X += 0.05f;
17876 }
17877 if (velocity.X > 3f)
17878 {
17879 velocity.X = 3f;
17880 }
17881 }
17882 float num269 = Math.Abs(position.X + (float)(width / 2) - (Main.player[target].position.X + (float)(Main.player[target].width / 2)));
17883 float num270 = Main.player[target].position.Y - (float)(height / 2);
17884 if (num269 > 50f)
17885 {
17886 num270 -= 100f;
17887 }
17888 if (position.Y < num270)
17889 {
17890 velocity.Y += 0.05f;
17891 if (velocity.Y < 0f)
17892 {
17893 velocity.Y += 0.01f;
17894 }
17895 }
17896 else
17897 {
17898 velocity.Y -= 0.05f;
17899 if (velocity.Y > 0f)
17900 {
17901 velocity.Y -= 0.01f;
17902 }
17903 }
17904 if (velocity.Y < -3f)
17905 {
17906 velocity.Y = -3f;
17907 }
17908 if (velocity.Y > 3f)
17909 {
17910 velocity.Y = 3f;
17911 }
17912 }
17913 if (wet)
17914 {
17915 if (velocity.Y > 0f)
17916 {
17917 velocity.Y *= 0.95f;
17918 }
17919 velocity.Y -= 0.5f;
17920 if (velocity.Y < -4f)
17921 {
17922 velocity.Y = -4f;
17923 }
17924 TargetClosest();
17925 }
17926 return;
17927 }
17928 if (aiStyle == 18)
17929 {
17930 bool flag12 = false;
17931 if (wet && this.ai[1] == 1f)
17932 {
17933 flag12 = true;
17934 }
17935 else
17936 {
17937 dontTakeDamage = false;
17938 }
17939 if (Main.expertMode && (type == 63 || type == 64 || type == 103 || type == 242))
17940 {
17941 if (wet)
17942 {
17943 if (target >= 0 && Main.player[target].wet && !Main.player[target].dead && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height) && (Main.player[target].Center - base.Center).Length() < 150f)
17944 {
17945 if (this.ai[1] == 0f)
17946 {
17947 this.ai[2] += 2f;
17948 }
17949 else
17950 {
17951 this.ai[2] -= 0.25f;
17952 }
17953 }
17954 if (flag12)
17955 {
17956 dontTakeDamage = true;
17957 this.ai[2] += 1f;
17958 if (this.ai[2] >= 120f)
17959 {
17960 this.ai[1] = 0f;
17961 }
17962 }
17963 else
17964 {
17965 this.ai[2] += 1f;
17966 if (this.ai[2] >= 420f)
17967 {
17968 this.ai[1] = 1f;
17969 this.ai[2] = 0f;
17970 }
17971 }
17972 }
17973 else
17974 {
17975 this.ai[1] = 0f;
17976 this.ai[2] = 0f;
17977 }
17978 }
17979 float num271 = 1f;
17980 if (flag12)
17981 {
17982 num271 += 0.5f;
17983 }
17984 if (type == 63)
17985 {
17986 Lighting.AddLight((int)(position.X + (float)(height / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.05f * num271, 0.15f * num271, 0.4f * num271);
17987 }
17988 else if (type == 103)
17989 {
17990 Lighting.AddLight((int)(position.X + (float)(height / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.05f * num271, 0.45f * num271, 0.1f * num271);
17991 }
17992 else if (type != 221 && type != 242)
17993 {
17994 Lighting.AddLight((int)(position.X + (float)(height / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.35f * num271, 0.05f * num271, 0.2f * num271);
17995 }
17996 if (direction == 0)
17997 {
17998 TargetClosest();
17999 }
18000 if (flag12)
18001 {
18002 return;
18003 }
18004 if (wet)
18005 {
18006 int num272 = (int)base.Center.X / 16;
18007 int num273 = (int)(position.Y + (float)height) / 16;
18008 if (Main.tile[num272, num273].topSlope())
18009 {
18010 if (Main.tile[num272, num273].leftSlope())
18011 {
18012 direction = -1;
18013 velocity.X = Math.Abs(velocity.X) * -1f;
18014 }
18015 else
18016 {
18017 direction = 1;
18018 velocity.X = Math.Abs(velocity.X);
18019 }
18020 }
18021 else if (Main.tile[num272, num273 + 1].topSlope())
18022 {
18023 if (Main.tile[num272, num273 + 1].leftSlope())
18024 {
18025 direction = -1;
18026 velocity.X = Math.Abs(velocity.X) * -1f;
18027 }
18028 else
18029 {
18030 direction = 1;
18031 velocity.X = Math.Abs(velocity.X);
18032 }
18033 }
18034 if (collideX)
18035 {
18036 velocity.X *= -1f;
18037 direction *= -1;
18038 }
18039 if (collideY)
18040 {
18041 if (velocity.Y > 0f)
18042 {
18043 velocity.Y = Math.Abs(velocity.Y) * -1f;
18044 directionY = -1;
18045 this.ai[0] = -1f;
18046 }
18047 else if (velocity.Y < 0f)
18048 {
18049 velocity.Y = Math.Abs(velocity.Y);
18050 directionY = 1;
18051 this.ai[0] = 1f;
18052 }
18053 }
18054 bool flag13 = false;
18055 if (!friendly)
18056 {
18058 if (Main.player[target].wet && !Main.player[target].dead && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
18059 {
18060 flag13 = true;
18061 }
18062 }
18063 if (flag13)
18064 {
18065 localAI[2] = 1f;
18066 rotation = (float)Math.Atan2(velocity.Y, velocity.X) + 1.57f;
18067 velocity *= 0.98f;
18068 float num274 = 0.2f;
18069 if (type == 103)
18070 {
18071 velocity *= 0.98f;
18072 num274 = 0.6f;
18073 }
18074 if (type == 221)
18075 {
18076 velocity *= 0.99f;
18077 num274 = 1f;
18078 }
18079 if (type == 242)
18080 {
18081 velocity *= 0.995f;
18082 num274 = 3f;
18083 }
18084 if (velocity.X > 0f - num274 && velocity.X < num274 && velocity.Y > 0f - num274 && velocity.Y < num274)
18085 {
18086 if (type == 221)
18087 {
18088 localAI[0] = 1f;
18089 }
18090 TargetClosest();
18091 float num275 = 7f;
18092 if (type == 103)
18093 {
18094 num275 = 9f;
18095 }
18096 Vector2 vector31 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
18097 float num276 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector31.X;
18098 float num277 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector31.Y;
18099 float num278 = (float)Math.Sqrt(num276 * num276 + num277 * num277);
18100 num278 = num275 / num278;
18101 num276 *= num278;
18102 num277 *= num278;
18103 velocity.X = num276;
18104 velocity.Y = num277;
18105 }
18106 return;
18107 }
18108 localAI[2] = 0f;
18109 velocity.X += (float)direction * 0.02f;
18110 rotation = velocity.X * 0.4f;
18111 if (velocity.X < -1f || velocity.X > 1f)
18112 {
18113 velocity.X *= 0.95f;
18114 }
18115 if (this.ai[0] == -1f)
18116 {
18117 velocity.Y -= 0.01f;
18118 if (velocity.Y < -1f)
18119 {
18120 this.ai[0] = 1f;
18121 }
18122 }
18123 else
18124 {
18125 velocity.Y += 0.01f;
18126 if (velocity.Y > 1f)
18127 {
18128 this.ai[0] = -1f;
18129 }
18130 }
18131 int num279 = (int)(position.X + (float)(width / 2)) / 16;
18132 int num280 = (int)(position.Y + (float)(height / 2)) / 16;
18133 if (Main.tile[num279, num280 - 1] == null)
18134 {
18135 Main.tile[num279, num280 - 1] = new Tile();
18136 }
18137 if (Main.tile[num279, num280 + 1] == null)
18138 {
18139 Main.tile[num279, num280 + 1] = new Tile();
18140 }
18141 if (Main.tile[num279, num280 + 2] == null)
18142 {
18143 Main.tile[num279, num280 + 2] = new Tile();
18144 }
18145 if (Main.tile[num279, num280 - 1].liquid > 128)
18146 {
18147 if (Main.tile[num279, num280 + 1].active())
18148 {
18149 this.ai[0] = -1f;
18150 }
18151 else if (Main.tile[num279, num280 + 2].active())
18152 {
18153 this.ai[0] = -1f;
18154 }
18155 }
18156 else
18157 {
18158 this.ai[0] = 1f;
18159 }
18160 if ((double)velocity.Y > 1.2 || (double)velocity.Y < -1.2)
18161 {
18162 velocity.Y *= 0.99f;
18163 }
18164 return;
18165 }
18166 rotation += velocity.X * 0.1f;
18167 if (velocity.Y == 0f)
18168 {
18169 velocity.X *= 0.98f;
18170 if ((double)velocity.X > -0.01 && (double)velocity.X < 0.01)
18171 {
18172 velocity.X = 0f;
18173 }
18174 }
18175 velocity.Y += 0.2f;
18176 if (velocity.Y > 10f)
18177 {
18178 velocity.Y = 10f;
18179 }
18180 this.ai[0] = 1f;
18181 return;
18182 }
18183 if (aiStyle == 19)
18184 {
18185 TargetClosest();
18186 float num281 = 12f;
18187 Vector2 vector32 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
18188 float num282 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector32.X;
18189 float num283 = Main.player[target].position.Y - vector32.Y;
18190 float num284 = (float)Math.Sqrt(num282 * num282 + num283 * num283);
18191 num284 = num281 / num284;
18192 num282 *= num284;
18193 num283 *= num284;
18194 bool flag14 = false;
18195 if (directionY < 0)
18196 {
18197 rotation = (float)(Math.Atan2(num283, num282) + 1.57);
18198 flag14 = ((!((double)rotation < -1.2) && !((double)rotation > 1.2)) ? true : false);
18199 if ((double)rotation < -0.8)
18200 {
18201 rotation = -0.8f;
18202 }
18203 else if ((double)rotation > 0.8)
18204 {
18205 rotation = 0.8f;
18206 }
18207 if (velocity.X != 0f)
18208 {
18209 velocity.X *= 0.9f;
18210 if ((double)velocity.X > -0.1 || (double)velocity.X < 0.1)
18211 {
18212 netUpdate = true;
18213 velocity.X = 0f;
18214 }
18215 }
18216 }
18217 if (this.ai[0] > 0f)
18218 {
18219 if (this.ai[0] == 200f)
18220 {
18222 }
18223 this.ai[0] -= 1f;
18224 }
18225 if (Main.netMode != 1 && flag14 && this.ai[0] == 0f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
18226 {
18227 this.ai[0] = 200f;
18228 int num285 = 10;
18229 int num286 = 31;
18230 int num287 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector32.X, vector32.Y, num282, num283, num286, num285, 0f, Main.myPlayer);
18231 Main.projectile[num287].ai[0] = 2f;
18232 Main.projectile[num287].timeLeft = 300;
18233 Main.projectile[num287].friendly = false;
18234 NetMessage.SendData(27, -1, -1, null, num287);
18235 netUpdate = true;
18236 }
18237 try
18238 {
18239 int num288 = (int)position.X / 16;
18240 int num289 = (int)(position.X + (float)(width / 2)) / 16;
18241 int num290 = (int)(position.X + (float)width) / 16;
18242 int num291 = (int)(position.Y + (float)height) / 16;
18243 bool flag15 = false;
18244 if (Main.tile[num288, num291] == null)
18245 {
18246 Main.tile[num288, num291] = new Tile();
18247 }
18248 if (Main.tile[num289, num291] == null)
18249 {
18250 Main.tile[num288, num291] = new Tile();
18251 }
18252 if (Main.tile[num290, num291] == null)
18253 {
18254 Main.tile[num288, num291] = new Tile();
18255 }
18256 if ((Main.tile[num288, num291].nactive() && Main.tileSolid[Main.tile[num288, num291].type]) || (Main.tile[num289, num291].nactive() && Main.tileSolid[Main.tile[num289, num291].type]) || (Main.tile[num290, num291].nactive() && Main.tileSolid[Main.tile[num290, num291].type]))
18257 {
18258 flag15 = true;
18259 }
18260 if (flag15)
18261 {
18262 noGravity = true;
18263 noTileCollide = true;
18264 velocity.Y = -0.2f;
18265 return;
18266 }
18267 noGravity = false;
18268 noTileCollide = false;
18269 if (Main.rand.Next(2) == 0)
18270 {
18272 int num292 = Dust.NewDust(new Vector2(position.X - 4f, position.Y + (float)height - 8f), width + 8, 24, 32, 0f, velocity.Y / 2f);
18273 Main.dust[num292].velocity.X *= 0.4f;
18274 Main.dust[num292].velocity.Y *= -1f;
18275 if (Main.rand.Next(2) == 0)
18276 {
18277 Main.dust[num292].noGravity = true;
18278 Dust dust = Main.dust[num292];
18279 dust.scale += 0.2f;
18280 }
18282 }
18283 return;
18284 }
18285 catch
18286 {
18287 return;
18288 }
18289 }
18290 if (aiStyle == 20)
18291 {
18292 if (this.ai[0] == 0f)
18293 {
18294 if (Main.netMode != 1)
18295 {
18296 TargetClosest();
18297 direction *= -1;
18298 directionY *= -1;
18299 position.Y += height / 2 + 8;
18300 this.ai[1] = position.X + (float)(width / 2);
18301 this.ai[2] = position.Y + (float)(height / 2);
18302 if (direction == 0)
18303 {
18304 direction = 1;
18305 }
18306 if (directionY == 0)
18307 {
18308 directionY = 1;
18309 }
18310 this.ai[3] = 1f + (float)Main.rand.Next(15) * 0.1f;
18311 velocity.Y = (float)(directionY * 6) * this.ai[3];
18312 this.ai[0] += 1f;
18313 netUpdate = true;
18314 }
18315 else
18316 {
18317 this.ai[1] = position.X + (float)(width / 2);
18318 this.ai[2] = position.Y + (float)(height / 2);
18319 }
18320 return;
18321 }
18322 float num293 = 6f * this.ai[3];
18323 float num294 = 0.2f * this.ai[3];
18324 float num295 = num293 / num294 / 2f;
18325 if (this.ai[0] >= 1f && this.ai[0] < (float)(int)num295)
18326 {
18327 velocity.Y = (float)directionY * num293;
18328 this.ai[0] += 1f;
18329 return;
18330 }
18331 if (this.ai[0] >= (float)(int)num295)
18332 {
18333 velocity.Y = 0f;
18334 directionY *= -1;
18335 velocity.X = num293 * (float)direction;
18336 this.ai[0] = -1f;
18337 return;
18338 }
18339 if (directionY > 0)
18340 {
18341 if (velocity.Y >= num293)
18342 {
18343 directionY *= -1;
18344 velocity.Y = num293;
18345 }
18346 }
18347 else if (directionY < 0 && velocity.Y <= 0f - num293)
18348 {
18349 directionY *= -1;
18350 velocity.Y = 0f - num293;
18351 }
18352 if (direction > 0)
18353 {
18354 if (velocity.X >= num293)
18355 {
18356 direction *= -1;
18357 velocity.X = num293;
18358 }
18359 }
18360 else if (direction < 0 && velocity.X <= 0f - num293)
18361 {
18362 direction *= -1;
18363 velocity.X = 0f - num293;
18364 }
18365 velocity.X += num294 * (float)direction;
18366 velocity.Y += num294 * (float)directionY;
18367 }
18368 else if (aiStyle == 21)
18369 {
18370 if (this.ai[0] == 0f)
18371 {
18372 TargetClosest();
18373 directionY = 1;
18374 this.ai[0] = 1f;
18375 }
18376 int num296 = 6;
18377 if (this.ai[1] == 0f)
18378 {
18379 rotation += (float)(direction * directionY) * 0.13f;
18380 if (collideY)
18381 {
18382 this.ai[0] = 2f;
18383 }
18384 if (!collideY && this.ai[0] == 2f)
18385 {
18387 this.ai[1] = 1f;
18388 this.ai[0] = 1f;
18389 }
18390 if (collideX)
18391 {
18393 this.ai[1] = 1f;
18394 }
18395 }
18396 else
18397 {
18398 rotation -= (float)(direction * directionY) * 0.13f;
18399 if (collideX)
18400 {
18401 this.ai[0] = 2f;
18402 }
18403 if (!collideX && this.ai[0] == 2f)
18404 {
18406 this.ai[1] = 0f;
18407 this.ai[0] = 1f;
18408 }
18409 if (collideY)
18410 {
18412 this.ai[1] = 0f;
18413 }
18414 }
18415 velocity.X = num296 * direction;
18416 velocity.Y = num296 * directionY;
18417 float num297 = (float)(270 - Main.mouseTextColor) / 400f;
18418 Lighting.AddLight((int)(position.X + (float)(width / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.9f, 0.3f + num297, 0.2f);
18419 }
18420 else if (aiStyle == 22)
18421 {
18422 bool flag16 = false;
18423 bool flag17 = type == 330 && !Main.pumpkinMoon;
18424 if (type == 253 && !Main.eclipse)
18425 {
18426 flag17 = true;
18427 }
18428 if (type == 490 && Main.dayTime)
18429 {
18430 flag17 = true;
18431 }
18432 if (justHit)
18433 {
18434 this.ai[2] = 0f;
18435 }
18436 if (type == 316 && (Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > 3000f))
18437 {
18438 TargetClosest();
18439 if (Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > 3000f)
18440 {
18441 EncourageDespawn(10);
18442 flag16 = true;
18443 flag17 = true;
18444 }
18445 }
18446 if (flag17)
18447 {
18448 if (velocity.X == 0f)
18449 {
18450 velocity.X = (float)Main.rand.Next(-1, 2) * 1.5f;
18451 netUpdate = true;
18452 }
18453 }
18454 else if (this.ai[2] >= 0f)
18455 {
18456 int num298 = 16;
18457 bool flag18 = false;
18458 bool flag19 = false;
18459 if (position.X > this.ai[0] - (float)num298 && position.X < this.ai[0] + (float)num298)
18460 {
18461 flag18 = true;
18462 }
18463 else if ((velocity.X < 0f && direction > 0) || (velocity.X > 0f && direction < 0))
18464 {
18465 flag18 = true;
18466 }
18467 num298 += 24;
18468 if (position.Y > this.ai[1] - (float)num298 && position.Y < this.ai[1] + (float)num298)
18469 {
18470 flag19 = true;
18471 }
18472 if (flag18 && flag19)
18473 {
18474 this.ai[2] += 1f;
18475 if (this.ai[2] >= 30f && num298 == 16)
18476 {
18477 flag16 = true;
18478 }
18479 if (this.ai[2] >= 60f)
18480 {
18481 this.ai[2] = -200f;
18482 direction *= -1;
18483 velocity.X *= -1f;
18484 collideX = false;
18485 }
18486 }
18487 else
18488 {
18489 this.ai[0] = position.X;
18490 this.ai[1] = position.Y;
18491 this.ai[2] = 0f;
18492 }
18493 TargetClosest();
18494 }
18495 else if (type == 253)
18496 {
18497 TargetClosest();
18498 this.ai[2] += 2f;
18499 }
18500 else
18501 {
18502 if (type == 330)
18503 {
18504 this.ai[2] += 0.1f;
18505 }
18506 else
18507 {
18508 this.ai[2] += 1f;
18509 }
18510 if (Main.player[target].position.X + (float)(Main.player[target].width / 2) > position.X + (float)(width / 2))
18511 {
18512 direction = -1;
18513 }
18514 else
18515 {
18516 direction = 1;
18517 }
18518 }
18519 int num299 = (int)((position.X + (float)(width / 2)) / 16f) + direction * 2;
18520 int num300 = (int)((position.Y + (float)height) / 16f);
18521 bool flag20 = true;
18522 bool flag21 = false;
18523 int num301 = 3;
18524 if (type == 122)
18525 {
18526 if (justHit)
18527 {
18528 this.ai[3] = 0f;
18529 localAI[1] = 0f;
18530 }
18531 if (Main.netMode != 1 && this.ai[3] == 32f && !Main.player[target].npcTypeNoAggro[type])
18532 {
18533 float num302 = 7f;
18534 Vector2 vector33 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
18535 float num303 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector33.X;
18536 float num304 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector33.Y;
18537 float num305 = (float)Math.Sqrt(num303 * num303 + num304 * num304);
18538 float num306 = num305;
18539 num305 = num302 / num305;
18540 num303 *= num305;
18541 num304 *= num305;
18542 float num307 = 0.0125f;
18543 Vector2 vector34 = new Vector2(num303, num304).RotatedByRandom(num307 * ((float)Math.PI * 2f));
18544 num303 = vector34.X;
18545 num304 = vector34.Y;
18546 int num308 = 25;
18547 int num309 = 84;
18548 int num310 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector33.X, vector33.Y, num303, num304, num309, num308, 0f, Main.myPlayer);
18549 }
18550 num301 = 8;
18551 if (this.ai[3] > 0f)
18552 {
18553 this.ai[3] += 1f;
18554 if (this.ai[3] >= 64f)
18555 {
18556 this.ai[3] = 0f;
18557 }
18558 }
18559 if (Main.netMode != 1 && this.ai[3] == 0f)
18560 {
18561 localAI[1] += 1f;
18562 if (localAI[1] > 120f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height) && !Main.player[target].npcTypeNoAggro[type])
18563 {
18564 localAI[1] = 0f;
18565 this.ai[3] = 1f;
18566 netUpdate = true;
18567 }
18568 }
18569 }
18570 else if (type == 75)
18571 {
18572 num301 = 4;
18574 if (Main.rand.Next(6) == 0)
18575 {
18576 int num311 = Dust.NewDust(position, width, height, 55, 0f, 0f, 200, this.color);
18577 Dust dust = Main.dust[num311];
18578 dust.velocity *= 0.3f;
18579 }
18580 if (Main.rand.Next(40) == 0)
18581 {
18582 SoundEngine.PlaySound(27, (int)position.X, (int)position.Y);
18583 }
18585 }
18586 else if (type == 169)
18587 {
18589 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 0f, 0.6f, 0.75f);
18590 alpha = 30;
18591 if (Main.rand.Next(3) == 0)
18592 {
18593 int num312 = Dust.NewDust(position, width, height, 92, 0f, 0f, 200);
18594 Dust dust = Main.dust[num312];
18595 dust.velocity *= 0.3f;
18596 Main.dust[num312].noGravity = true;
18597 }
18599 if (justHit)
18600 {
18601 this.ai[3] = 0f;
18602 localAI[1] = 0f;
18603 }
18604 float num313 = 5f;
18605 Vector2 vector35 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
18606 float num314 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector35.X;
18607 float num315 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector35.Y;
18608 float num316 = (float)Math.Sqrt(num314 * num314 + num315 * num315);
18609 float num317 = num316;
18610 num316 = num313 / num316;
18611 num314 *= num316;
18612 num315 *= num316;
18613 if (num314 > 0f)
18614 {
18615 direction = 1;
18616 }
18617 else
18618 {
18619 direction = -1;
18620 }
18622 if (direction < 0)
18623 {
18624 rotation = (float)Math.Atan2(0f - num315, 0f - num314);
18625 }
18626 else
18627 {
18628 rotation = (float)Math.Atan2(num315, num314);
18629 }
18630 if (Main.netMode != 1 && this.ai[3] == 16f)
18631 {
18632 int num318 = 45;
18633 int num319 = 128;
18634 int num320 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector35.X, vector35.Y, num314, num315, num319, num318, 0f, Main.myPlayer);
18635 }
18636 num301 = 10;
18637 if (this.ai[3] > 0f)
18638 {
18639 this.ai[3] += 1f;
18640 if (this.ai[3] >= 64f)
18641 {
18642 this.ai[3] = 0f;
18643 }
18644 }
18645 if (Main.netMode != 1 && this.ai[3] == 0f)
18646 {
18647 localAI[1] += 1f;
18648 if (localAI[1] > 120f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
18649 {
18650 localAI[1] = 0f;
18651 this.ai[3] = 1f;
18652 netUpdate = true;
18653 }
18654 }
18655 }
18656 else if (type == 268)
18657 {
18658 rotation = velocity.X * 0.1f;
18659 num301 = ((!(Main.player[target].Center.Y < base.Center.Y)) ? 6 : 12);
18660 if (Main.netMode != 1 && !confused)
18661 {
18662 this.ai[3] += 1f;
18663 if (justHit)
18664 {
18665 this.ai[3] = -45f;
18666 localAI[1] = 0f;
18667 }
18668 if (Main.netMode != 1 && this.ai[3] >= (float)(60 + Main.rand.Next(60)))
18669 {
18670 this.ai[3] = 0f;
18671 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
18672 {
18673 float num321 = 10f;
18674 Vector2 vector36 = new Vector2(position.X + (float)width * 0.5f - 4f, position.Y + (float)height * 0.7f);
18675 float num322 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector36.X;
18676 float num323 = Math.Abs(num322) * 0.1f;
18677 float num324 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector36.Y - num323;
18678 num322 += (float)Main.rand.Next(-10, 11);
18679 num324 += (float)Main.rand.Next(-30, 21);
18680 float num325 = (float)Math.Sqrt(num322 * num322 + num324 * num324);
18681 float num326 = num325;
18682 num325 = num321 / num325;
18683 num322 *= num325;
18684 num324 *= num325;
18685 int num327 = 40;
18686 int num328 = 288;
18687 int num329 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector36.X, vector36.Y, num322, num324, num328, num327, 0f, Main.myPlayer);
18688 }
18689 }
18690 }
18691 }
18692 if (type == 490)
18693 {
18694 num301 = 4;
18695 if (target >= 0)
18696 {
18697 float num330 = (Main.player[target].Center - base.Center).Length();
18698 num330 /= 70f;
18699 if (num330 > 8f)
18700 {
18701 num330 = 8f;
18702 }
18703 num301 += (int)num330;
18704 }
18705 }
18706 if (position.Y + (float)height > Main.player[target].position.Y)
18707 {
18708 if (type == 330)
18709 {
18710 flag20 = false;
18711 }
18712 else
18713 {
18714 for (int num331 = num300; num331 < num300 + num301; num331++)
18715 {
18716 if (Main.tile[num299, num331] == null)
18717 {
18718 Main.tile[num299, num331] = new Tile();
18719 }
18720 if ((Main.tile[num299, num331].nactive() && Main.tileSolid[Main.tile[num299, num331].type]) || Main.tile[num299, num331].liquid > 0)
18721 {
18722 if (num331 <= num300 + 1)
18723 {
18724 flag21 = true;
18725 }
18726 flag20 = false;
18727 break;
18728 }
18729 }
18730 }
18731 }
18732 if (Main.player[target].npcTypeNoAggro[type])
18733 {
18734 bool flag22 = false;
18735 for (int num332 = num300; num332 < num300 + num301 - 2; num332++)
18736 {
18737 if (Main.tile[num299, num332] == null)
18738 {
18739 Main.tile[num299, num332] = new Tile();
18740 }
18741 if ((Main.tile[num299, num332].nactive() && Main.tileSolid[Main.tile[num299, num332].type]) || Main.tile[num299, num332].liquid > 0)
18742 {
18743 flag22 = true;
18744 break;
18745 }
18746 }
18747 directionY = (!flag22).ToDirectionInt();
18748 }
18749 if (type == 169 || type == 268)
18750 {
18751 for (int num333 = num300 - 3; num333 < num300; num333++)
18752 {
18753 if (Main.tile[num299, num333] == null)
18754 {
18755 Main.tile[num299, num333] = new Tile();
18756 }
18757 if ((Main.tile[num299, num333].nactive() && Main.tileSolid[Main.tile[num299, num333].type] && !TileID.Sets.Platforms[Main.tile[num299, num333].type]) || Main.tile[num299, num333].liquid > 0)
18758 {
18759 flag21 = false;
18760 flag16 = true;
18761 break;
18762 }
18763 }
18764 }
18765 if (flag16)
18766 {
18767 flag21 = false;
18768 flag20 = true;
18769 if (type == 268)
18770 {
18771 velocity.Y += 2f;
18772 }
18773 }
18774 if (flag20)
18775 {
18776 if (type == 75 || type == 169)
18777 {
18778 velocity.Y += 0.2f;
18779 if (velocity.Y > 2f)
18780 {
18781 velocity.Y = 2f;
18782 }
18783 }
18784 else if (type == 490)
18785 {
18786 velocity.Y += 0.03f;
18787 if ((double)velocity.Y > 0.75)
18788 {
18789 velocity.Y = 0.75f;
18790 }
18791 }
18792 else
18793 {
18794 velocity.Y += 0.1f;
18795 if (type == 316 && flag17)
18796 {
18797 velocity.Y -= 0.05f;
18798 if (velocity.Y > 6f)
18799 {
18800 velocity.Y = 6f;
18801 }
18802 }
18803 else if (velocity.Y > 3f)
18804 {
18805 velocity.Y = 3f;
18806 }
18807 }
18808 }
18809 else
18810 {
18811 if (type == 75 || type == 169)
18812 {
18814 {
18815 velocity.Y -= 0.2f;
18816 }
18817 }
18818 else if (type == 490)
18819 {
18821 {
18822 velocity.Y -= 0.075f;
18823 }
18824 if (velocity.Y < -0.75f)
18825 {
18826 velocity.Y = -0.75f;
18827 }
18828 }
18830 {
18831 velocity.Y -= 0.1f;
18832 }
18833 if (velocity.Y < -4f)
18834 {
18835 velocity.Y = -4f;
18836 }
18837 }
18838 if (type == 75 && wet)
18839 {
18840 velocity.Y -= 0.2f;
18841 if (velocity.Y < -2f)
18842 {
18843 velocity.Y = -2f;
18844 }
18845 }
18846 if (collideX)
18847 {
18848 velocity.X = oldVelocity.X * -0.4f;
18849 if (direction == -1 && velocity.X > 0f && velocity.X < 1f)
18850 {
18851 velocity.X = 1f;
18852 }
18853 if (direction == 1 && velocity.X < 0f && velocity.X > -1f)
18854 {
18855 velocity.X = -1f;
18856 }
18857 }
18858 if (collideY)
18859 {
18860 velocity.Y = oldVelocity.Y * -0.25f;
18861 if (velocity.Y > 0f && velocity.Y < 1f)
18862 {
18863 velocity.Y = 1f;
18864 }
18865 if (velocity.Y < 0f && velocity.Y > -1f)
18866 {
18867 velocity.Y = -1f;
18868 }
18869 }
18870 float num334 = 2f;
18871 if (type == 75)
18872 {
18873 num334 = 3f;
18874 }
18875 if (type == 253)
18876 {
18877 num334 = 4f;
18878 }
18879 if (type == 490)
18880 {
18881 num334 = 1.5f;
18882 }
18883 if (type == 330)
18884 {
18885 alpha = 0;
18886 num334 = 4f;
18887 if (!flag17)
18888 {
18889 TargetClosest();
18890 }
18891 else
18892 {
18893 EncourageDespawn(10);
18894 }
18896 {
18897 velocity.X *= 0.9f;
18898 }
18899 if (direction > 0 && velocity.X < 0f)
18900 {
18901 velocity.X *= 0.9f;
18902 }
18903 }
18904 if (direction == -1 && velocity.X > 0f - num334)
18905 {
18906 velocity.X -= 0.1f;
18907 if (velocity.X > num334)
18908 {
18909 velocity.X -= 0.1f;
18910 }
18911 else if (velocity.X > 0f)
18912 {
18913 velocity.X += 0.05f;
18914 }
18915 if (velocity.X < 0f - num334)
18916 {
18917 velocity.X = 0f - num334;
18918 }
18919 }
18920 else if (direction == 1 && velocity.X < num334)
18921 {
18922 velocity.X += 0.1f;
18923 if (velocity.X < 0f - num334)
18924 {
18925 velocity.X += 0.1f;
18926 }
18927 else if (velocity.X < 0f)
18928 {
18929 velocity.X -= 0.05f;
18930 }
18931 if (velocity.X > num334)
18932 {
18933 velocity.X = num334;
18934 }
18935 }
18936 num334 = ((type != 490) ? 1.5f : 1f);
18937 if (directionY == -1 && velocity.Y > 0f - num334)
18938 {
18939 velocity.Y -= 0.04f;
18940 if (velocity.Y > num334)
18941 {
18942 velocity.Y -= 0.05f;
18943 }
18944 else if (velocity.Y > 0f)
18945 {
18946 velocity.Y += 0.03f;
18947 }
18948 if (velocity.Y < 0f - num334)
18949 {
18950 velocity.Y = 0f - num334;
18951 }
18952 }
18953 else if (directionY == 1 && velocity.Y < num334)
18954 {
18955 velocity.Y += 0.04f;
18956 if (velocity.Y < 0f - num334)
18957 {
18958 velocity.Y += 0.05f;
18959 }
18960 else if (velocity.Y < 0f)
18961 {
18962 velocity.Y -= 0.03f;
18963 }
18964 if (velocity.Y > num334)
18965 {
18966 velocity.Y = num334;
18967 }
18968 }
18969 if (type == 122)
18970 {
18971 Lighting.AddLight((int)position.X / 16, (int)position.Y / 16, 0.4f, 0f, 0.25f);
18972 }
18973 }
18974 else if (aiStyle == 23)
18975 {
18976 noGravity = true;
18977 noTileCollide = true;
18978 if (type == 83)
18979 {
18980 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 0.2f, 0.05f, 0.3f);
18981 }
18982 else if (type == 179)
18983 {
18984 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 0.3f, 0.15f, 0.05f);
18985 }
18986 else
18987 {
18988 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 0.05f, 0.2f, 0.3f);
18989 }
18990 if (target < 0 || target == 255 || Main.player[target].dead)
18991 {
18992 TargetClosest();
18993 }
18994 if (this.ai[0] == 0f)
18995 {
18996 float num335 = 9f;
18997 Vector2 vector37 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
18998 float num336 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector37.X;
18999 float num337 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector37.Y;
19000 float num338 = (float)Math.Sqrt(num336 * num336 + num337 * num337);
19001 float num339 = num338;
19002 num338 = num335 / num338;
19003 num336 *= num338;
19004 num337 *= num338;
19005 velocity.X = num336;
19006 velocity.Y = num337;
19007 rotation = (float)Math.Atan2(velocity.Y, velocity.X) + 0.785f;
19008 this.ai[0] = 1f;
19009 this.ai[1] = 0f;
19010 netUpdate = true;
19011 }
19012 else if (this.ai[0] == 1f)
19013 {
19014 if (justHit)
19015 {
19016 this.ai[0] = 2f;
19017 this.ai[1] = 0f;
19018 }
19019 velocity *= 0.99f;
19020 this.ai[1] += 1f;
19021 if (this.ai[1] >= 100f)
19022 {
19023 netUpdate = true;
19024 this.ai[0] = 2f;
19025 this.ai[1] = 0f;
19026 velocity.X = 0f;
19027 velocity.Y = 0f;
19028 }
19029 else
19030 {
19031 rotation = (float)Math.Atan2(velocity.Y, velocity.X) + 0.785f;
19032 }
19033 }
19034 else
19035 {
19036 if (justHit)
19037 {
19038 this.ai[0] = 2f;
19039 this.ai[1] = 0f;
19040 }
19041 velocity *= 0.96f;
19042 this.ai[1] += 1f;
19043 float num340 = this.ai[1] / 120f;
19044 num340 = 0.1f + num340 * 0.4f;
19045 rotation += num340 * (float)direction;
19046 if (this.ai[1] >= 120f)
19047 {
19048 netUpdate = true;
19049 this.ai[0] = 0f;
19050 this.ai[1] = 0f;
19051 }
19052 }
19053 }
19054 else if (aiStyle == 24)
19055 {
19056 noGravity = true;
19057 if (type == 611)
19058 {
19059 if (localAI[0] == 0f)
19060 {
19061 TargetClosest();
19062 this.ai[0] = 1f;
19063 localAI[0] = 1f;
19064 netUpdate = true;
19065 }
19066 else if (this.ai[0] == 1f && Main.cloudAlpha == 0f && !Main.dayTime)
19067 {
19068 for (int num341 = 0; num341 < 200; num341++)
19069 {
19070 if (num341 == whoAmI || !Main.npc[num341].active)
19071 {
19072 continue;
19073 }
19074 if (Main.npc[num341].townNPC)
19075 {
19076 if (Math.Abs(base.Center.X - Main.npc[num341].Center.X) < 96f)
19077 {
19078 float num342 = Main.npc[num341].Center.Y - base.Center.Y;
19079 if (num342 > 32f && num342 < 320f && !Collision.CanHit(this, Main.npc[num341]))
19080 {
19081 this.ai[0] = 2f;
19082 }
19083 }
19084 }
19085 else if (Main.npc[num341].type == type && Main.npc[num341].ai[0] != 1f && Math.Abs(base.Center.X - Main.npc[num341].Center.X) < 320f)
19086 {
19087 this.ai[0] = 1f;
19088 break;
19089 }
19090 }
19091 }
19092 }
19093 if (this.ai[0] == 0f)
19094 {
19095 noGravity = false;
19096 if (type == 611 && (Main.cloudAlpha > 0f || Main.dayTime))
19097 {
19098 this.ai[0] = 1f;
19099 }
19100 TargetClosest();
19101 if (Main.netMode != 1)
19102 {
19103 if (releaseOwner != 255 || velocity.X != 0f || velocity.Y < 0f || (double)velocity.Y > 0.3)
19104 {
19105 this.ai[0] = 1f;
19106 netUpdate = true;
19108 }
19109 else if (type != 611)
19110 {
19111 Rectangle rectangle2 = new Rectangle((int)Main.player[target].position.X, (int)Main.player[target].position.Y, Main.player[target].width, Main.player[target].height);
19112 if (new Rectangle((int)position.X - 100, (int)position.Y - 100, width + 200, height + 200).Intersects(rectangle2) || life < lifeMax)
19113 {
19114 this.ai[0] = 1f;
19115 velocity.Y -= 6f;
19116 netUpdate = true;
19118 }
19119 }
19120 }
19121 }
19122 else if (this.ai[0] == 2f)
19123 {
19124 velocity.X *= 0.98f;
19125 if (velocity.Y == 0f)
19126 {
19127 this.ai[0] = 0f;
19128 velocity.X = 0f;
19129 }
19130 velocity.Y += 0.05f;
19131 if (velocity.Y > 2f)
19132 {
19133 velocity.Y = 2f;
19134 }
19135 }
19136 else if (!Main.player[target].dead)
19137 {
19138 float num343 = 3f;
19139 if (type == 671 || type == 672 || type == 673 || type == 674 || type == 675)
19140 {
19141 num343 = 4f;
19142 }
19143 if (collideX)
19144 {
19145 direction *= -1;
19146 velocity.X = oldVelocity.X * -0.5f;
19147 if (direction == -1 && velocity.X > 0f && velocity.X < num343 - 1f)
19148 {
19149 velocity.X = num343 - 1f;
19150 }
19151 if (direction == 1 && velocity.X < 0f && velocity.X > 0f - num343 + 1f)
19152 {
19153 velocity.X = 0f - num343 + 1f;
19154 }
19155 }
19156 if (collideY)
19157 {
19158 velocity.Y = oldVelocity.Y * -0.5f;
19159 if (velocity.Y > 0f && velocity.Y < 1f)
19160 {
19161 velocity.Y = 1f;
19162 }
19163 if (velocity.Y < 0f && velocity.Y > -1f)
19164 {
19165 velocity.Y = -1f;
19166 }
19167 }
19168 if (direction == -1 && velocity.X > 0f - num343)
19169 {
19170 velocity.X -= 0.1f;
19171 if (velocity.X > num343)
19172 {
19173 velocity.X -= 0.1f;
19174 }
19175 else if (velocity.X > 0f)
19176 {
19177 velocity.X -= 0.05f;
19178 }
19179 if (velocity.X < 0f - num343)
19180 {
19181 velocity.X = 0f - num343;
19182 }
19183 }
19184 else if (direction == 1 && velocity.X < num343)
19185 {
19186 velocity.X += 0.1f;
19187 if (velocity.X < 0f - num343)
19188 {
19189 velocity.X += 0.1f;
19190 }
19191 else if (velocity.X < 0f)
19192 {
19193 velocity.X += 0.05f;
19194 }
19195 if (velocity.X > num343)
19196 {
19197 velocity.X = num343;
19198 }
19199 }
19200 int num344 = (int)((position.X + (float)(width / 2)) / 16f) + direction;
19201 int num345 = (int)((position.Y + (float)height) / 16f);
19202 bool flag23 = true;
19203 int num346 = 15;
19204 bool flag24 = false;
19205 for (int num347 = num345; num347 < num345 + num346; num347++)
19206 {
19207 if (!WorldGen.InWorld(num344, num347))
19208 {
19209 continue;
19210 }
19211 if (Main.tile[num344, num347] == null)
19212 {
19213 Main.tile[num344, num347] = new Tile();
19214 }
19215 if ((Main.tile[num344, num347].nactive() && Main.tileSolid[Main.tile[num344, num347].type]) || Main.tile[num344, num347].liquid > 0)
19216 {
19217 if (num347 < num345 + 5)
19218 {
19219 flag24 = true;
19220 }
19221 flag23 = false;
19222 break;
19223 }
19224 }
19225 if (flag23)
19226 {
19227 velocity.Y += 0.05f;
19228 }
19229 else
19230 {
19231 velocity.Y -= 0.1f;
19232 }
19233 if (flag24)
19234 {
19235 velocity.Y -= 0.2f;
19236 }
19237 if (velocity.Y > 2f)
19238 {
19239 velocity.Y = 2f;
19240 }
19241 if (velocity.Y < -4f)
19242 {
19243 velocity.Y = -4f;
19244 }
19245 }
19246 if (wet)
19247 {
19248 this.ai[1] = 0f;
19249 if (velocity.Y > 0f)
19250 {
19251 velocity.Y *= 0.95f;
19252 }
19253 velocity.Y -= 0.5f;
19254 if (velocity.Y < -4f)
19255 {
19256 velocity.Y = -4f;
19257 }
19258 TargetClosest();
19259 }
19260 }
19261 else if (aiStyle == 25)
19262 {
19263 bool flag25 = type == 341 && !Main.snowMoon;
19264 if (this.ai[3] == 0f)
19265 {
19266 position.X += 8f;
19267 if (position.Y / 16f > (float)Main.UnderworldLayer)
19268 {
19269 this.ai[3] = 3f;
19270 }
19271 else if ((double)(position.Y / 16f) > Main.worldSurface)
19272 {
19273 TargetClosest();
19274 this.ai[3] = 2f;
19275 }
19276 else
19277 {
19278 this.ai[3] = 1f;
19279 }
19280 }
19281 if (type == 341 || type == 629)
19282 {
19283 this.ai[3] = 1f;
19284 }
19285 if (this.ai[0] == 0f)
19286 {
19287 if (!flag25)
19288 {
19289 TargetClosest();
19290 }
19291 if (Main.netMode == 1)
19292 {
19293 return;
19294 }
19295 if (velocity.X != 0f || velocity.Y < 0f || (double)velocity.Y > 0.3)
19296 {
19297 this.ai[0] = 1f;
19298 netUpdate = true;
19299 return;
19300 }
19301 Rectangle rectangle3 = new Rectangle((int)Main.player[target].position.X, (int)Main.player[target].position.Y, Main.player[target].width, Main.player[target].height);
19302 if (new Rectangle((int)position.X - 100, (int)position.Y - 100, width + 200, height + 200).Intersects(rectangle3) || life < lifeMax)
19303 {
19304 this.ai[0] = 1f;
19305 netUpdate = true;
19306 }
19307 }
19308 else if (velocity.Y == 0f)
19309 {
19310 this.ai[2] += 1f;
19311 int num348 = 20;
19312 if (this.ai[1] == 0f)
19313 {
19314 num348 = 12;
19315 }
19316 if (this.ai[2] < (float)num348)
19317 {
19318 velocity.X *= 0.9f;
19319 return;
19320 }
19321 this.ai[2] = 0f;
19322 if (!flag25)
19323 {
19324 TargetClosest();
19325 }
19326 if (direction == 0)
19327 {
19328 direction = -1;
19329 }
19331 this.ai[1] += 1f;
19332 if (this.ai[1] == 2f)
19333 {
19334 velocity.X = (float)direction * 2.5f;
19335 velocity.Y = -8f;
19336 this.ai[1] = 0f;
19337 }
19338 else
19339 {
19340 velocity.X = (float)direction * 3.5f;
19341 velocity.Y = -4f;
19342 }
19343 netUpdate = true;
19344 }
19345 else if (direction == 1 && velocity.X < 1f)
19346 {
19347 velocity.X += 0.1f;
19348 }
19349 else if (direction == -1 && velocity.X > -1f)
19350 {
19351 velocity.X -= 0.1f;
19352 }
19353 }
19354 else if (aiStyle == 26)
19355 {
19357 }
19358 else if (aiStyle == 27)
19359 {
19360 if (position.X < 160f || position.X > (float)((Main.maxTilesX - 10) * 16))
19361 {
19362 active = false;
19363 }
19364 if (localAI[0] == 0f)
19365 {
19366 localAI[0] = 1f;
19367 Main.wofDrawAreaBottom = -1;
19368 Main.wofDrawAreaTop = -1;
19369 }
19370 if (Main.getGoodWorld && Main.netMode != 1 && Main.rand.Next(180) == 0 && CountNPCS(24) < 4)
19371 {
19372 int num349 = 1;
19373 for (int num350 = 0; num350 < num349; num350++)
19374 {
19375 int num351 = 1000;
19376 for (int num352 = 0; num352 < num351; num352++)
19377 {
19378 int num353 = (int)(base.Center.X / 16f);
19379 int num354 = (int)(base.Center.Y / 16f);
19380 if (target >= 0)
19381 {
19382 num353 = (int)(Main.player[target].Center.X / 16f);
19383 num354 = (int)(Main.player[target].Center.Y / 16f);
19384 }
19385 num353 += Main.rand.Next(-50, 51);
19386 for (num354 += Main.rand.Next(-50, 51); num354 < Main.maxTilesY - 10 && !WorldGen.SolidTile(num353, num354); num354++)
19387 {
19388 }
19389 num354--;
19390 if (!WorldGen.SolidTile(num353, num354))
19391 {
19392 int num355 = NewNPC(GetSpawnSourceForNaturalSpawn(), num353 * 16 + 8, num354 * 16, 24);
19393 if (Main.netMode == 2 && num355 < 200)
19394 {
19395 NetMessage.SendData(23, -1, -1, null, num355);
19396 }
19397 break;
19398 }
19399 }
19400 }
19401 }
19402 this.ai[1] += 1f;
19403 if (this.ai[2] == 0f)
19404 {
19405 if ((double)life < (double)lifeMax * 0.5)
19406 {
19407 this.ai[1] += 1f;
19408 }
19409 if ((double)life < (double)lifeMax * 0.2)
19410 {
19411 this.ai[1] += 1f;
19412 }
19413 if (this.ai[1] > 2700f)
19414 {
19415 this.ai[2] = 1f;
19416 }
19417 }
19418 int num356 = 60;
19419 if (this.ai[2] > 0f && this.ai[1] > (float)num356)
19420 {
19421 int num357 = 3;
19422 if ((double)life < (double)lifeMax * 0.3)
19423 {
19424 num357++;
19425 }
19426 this.ai[2] += 1f;
19427 this.ai[1] = 0f;
19428 if (this.ai[2] > (float)num357)
19429 {
19430 this.ai[2] = 0f;
19431 }
19432 if (Main.netMode != 1 && CountNPCS(117) < 10)
19433 {
19434 int num358 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)(position.Y + (float)(height / 2) + 20f), 117, 1);
19435 Main.npc[num358].velocity.X = direction * 8;
19436 }
19437 }
19438 localAI[3] += 1f;
19439 if (localAI[3] >= (float)(600 + Main.rand.Next(1000)))
19440 {
19441 localAI[3] = -Main.rand.Next(200);
19442 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 10);
19443 }
19444 int num359 = Main.UnderworldLayer + 10;
19445 int num360 = num359 + 70;
19446 Main.wofNPCIndex = whoAmI;
19447 int num361 = (int)(position.X / 16f);
19448 int num362 = (int)((position.X + (float)width) / 16f);
19449 int num363 = (int)((position.Y + (float)(height / 2)) / 16f);
19450 int num364 = 0;
19451 int num365 = num363 + 7;
19452 while (num364 < 15 && num365 > Main.UnderworldLayer)
19453 {
19454 num365++;
19455 if (num365 > Main.maxTilesY - 10)
19456 {
19457 num365 = Main.maxTilesY - 10;
19458 break;
19459 }
19460 if (num365 < num359)
19461 {
19462 continue;
19463 }
19464 for (int num366 = num361; num366 <= num362; num366++)
19465 {
19466 try
19467 {
19468 if (WorldGen.InWorld(num366, num365, 2) && (WorldGen.SolidTile(num366, num365) || Main.tile[num366, num365].liquid > 0))
19469 {
19470 num364++;
19471 }
19472 }
19473 catch
19474 {
19475 num364 += 15;
19476 }
19477 }
19478 }
19479 num365 += 4;
19480 if (Main.wofDrawAreaBottom == -1)
19481 {
19482 Main.wofDrawAreaBottom = num365 * 16;
19483 }
19484 else if (Main.wofDrawAreaBottom > num365 * 16)
19485 {
19486 Main.wofDrawAreaBottom--;
19487 if (Main.wofDrawAreaBottom < num365 * 16)
19488 {
19489 Main.wofDrawAreaBottom = num365 * 16;
19490 }
19491 }
19492 else if (Main.wofDrawAreaBottom < num365 * 16)
19493 {
19494 Main.wofDrawAreaBottom++;
19495 if (Main.wofDrawAreaBottom > num365 * 16)
19496 {
19497 Main.wofDrawAreaBottom = num365 * 16;
19498 }
19499 }
19500 num364 = 0;
19501 num365 = num363 - 7;
19502 while (num364 < 15 && num365 < Main.maxTilesY - 10)
19503 {
19504 num365--;
19505 if (num365 <= 10)
19506 {
19507 num365 = 10;
19508 break;
19509 }
19510 if (num365 > num360)
19511 {
19512 continue;
19513 }
19514 if (num365 < num359)
19515 {
19516 num365 = num359;
19517 break;
19518 }
19519 for (int num367 = num361; num367 <= num362; num367++)
19520 {
19521 try
19522 {
19523 if (WorldGen.InWorld(num367, num365, 2) && (WorldGen.SolidTile(num367, num365) || Main.tile[num367, num365].liquid > 0))
19524 {
19525 num364++;
19526 }
19527 }
19528 catch
19529 {
19530 num364 += 15;
19531 }
19532 }
19533 }
19534 num365 -= 4;
19535 if (Main.wofDrawAreaTop == -1)
19536 {
19537 Main.wofDrawAreaTop = num365 * 16;
19538 }
19539 else if (Main.wofDrawAreaTop > num365 * 16)
19540 {
19541 Main.wofDrawAreaTop--;
19542 if (Main.wofDrawAreaTop < num365 * 16)
19543 {
19544 Main.wofDrawAreaTop = num365 * 16;
19545 }
19546 }
19547 else if (Main.wofDrawAreaTop < num365 * 16)
19548 {
19549 Main.wofDrawAreaTop++;
19550 if (Main.wofDrawAreaTop > num365 * 16)
19551 {
19552 Main.wofDrawAreaTop = num365 * 16;
19553 }
19554 }
19555 Main.wofDrawAreaTop = (int)MathHelper.Clamp(Main.wofDrawAreaTop, (float)num359 * 16f, (float)num360 * 16f);
19556 Main.wofDrawAreaBottom = (int)MathHelper.Clamp(Main.wofDrawAreaBottom, (float)num359 * 16f, (float)num360 * 16f);
19557 if (Main.wofDrawAreaTop > Main.wofDrawAreaBottom - 160)
19558 {
19559 Main.wofDrawAreaTop = Main.wofDrawAreaBottom - 160;
19560 }
19561 else if (Main.wofDrawAreaBottom < Main.wofDrawAreaTop + 160)
19562 {
19563 Main.wofDrawAreaBottom = Main.wofDrawAreaTop + 160;
19564 }
19565 float num368 = (Main.wofDrawAreaBottom + Main.wofDrawAreaTop) / 2 - height / 2;
19566 if (position.Y > num368 + 1f)
19567 {
19568 velocity.Y = -1f;
19569 }
19570 else if (position.Y < num368 - 1f)
19571 {
19572 velocity.Y = 1f;
19573 }
19574 velocity.Y = 0f;
19575 position.Y = num368;
19576 float num369 = 1.5f;
19577 if ((double)life < (double)lifeMax * 0.75)
19578 {
19579 num369 += 0.25f;
19580 }
19581 if ((double)life < (double)lifeMax * 0.5)
19582 {
19583 num369 += 0.4f;
19584 }
19585 if ((double)life < (double)lifeMax * 0.25)
19586 {
19587 num369 += 0.5f;
19588 }
19589 if ((double)life < (double)lifeMax * 0.1)
19590 {
19591 num369 += 0.6f;
19592 }
19593 if ((double)life < (double)lifeMax * 0.66 && Main.expertMode)
19594 {
19595 num369 += 0.3f;
19596 }
19597 if ((double)life < (double)lifeMax * 0.33 && Main.expertMode)
19598 {
19599 num369 += 0.3f;
19600 }
19601 if ((double)life < (double)lifeMax * 0.05 && Main.expertMode)
19602 {
19603 num369 += 0.6f;
19604 }
19605 if ((double)life < (double)lifeMax * 0.035 && Main.expertMode)
19606 {
19607 num369 += 0.6f;
19608 }
19609 if ((double)life < (double)lifeMax * 0.025 && Main.expertMode)
19610 {
19611 num369 += 0.6f;
19612 }
19613 if (Main.expertMode)
19614 {
19615 num369 *= 1.35f;
19616 num369 += 0.35f;
19617 }
19618 if (Main.getGoodWorld)
19619 {
19620 num369 *= 1.1f;
19621 num369 += 0.2f;
19622 }
19623 if (velocity.X == 0f)
19624 {
19625 TargetClosest();
19626 if (Main.player[target].dead)
19627 {
19628 float num370 = float.PositiveInfinity;
19629 int num371 = 0;
19630 for (int num372 = 0; num372 < 255; num372++)
19631 {
19632 Player player = Main.player[target];
19633 if (player.active)
19634 {
19635 float num373 = Distance(player.Center);
19636 if (num370 > num373)
19637 {
19638 num370 = num373;
19639 num371 = ((base.Center.X < player.Center.X) ? 1 : (-1));
19640 }
19641 }
19642 }
19643 direction = num371;
19644 }
19645 velocity.X = direction;
19646 }
19647 if (velocity.X < 0f)
19648 {
19649 velocity.X = 0f - num369;
19650 direction = -1;
19651 }
19652 else
19653 {
19654 velocity.X = num369;
19655 direction = 1;
19656 }
19657 if (Main.player[target].dead || !Main.player[target].gross)
19658 {
19660 }
19661 if (Main.player[target].dead)
19662 {
19663 localAI[1] += 1f / 180f;
19664 if (localAI[1] >= 1f)
19665 {
19666 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 10);
19667 life = 0;
19668 active = false;
19669 if (Main.netMode != 1)
19670 {
19671 NetMessage.SendData(28, -1, -1, null, whoAmI, -1f);
19672 }
19673 return;
19674 }
19675 }
19676 else
19677 {
19678 localAI[1] = MathHelper.Clamp(localAI[1] - 1f / 30f, 0f, 1f);
19679 }
19681 Vector2 vector38 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
19682 float num374 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector38.X;
19683 float num375 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector38.Y;
19684 float num376 = (float)Math.Sqrt(num374 * num374 + num375 * num375);
19685 float num377 = num376;
19686 num374 *= num376;
19687 num375 *= num376;
19688 if (direction > 0)
19689 {
19690 if (Main.player[target].position.X + (float)(Main.player[target].width / 2) > position.X + (float)(width / 2))
19691 {
19692 rotation = (float)Math.Atan2(0f - num375, 0f - num374) + 3.14f;
19693 }
19694 else
19695 {
19696 rotation = 0f;
19697 }
19698 }
19699 else if (Main.player[target].position.X + (float)(Main.player[target].width / 2) < position.X + (float)(width / 2))
19700 {
19701 rotation = (float)Math.Atan2(num375, num374) + 3.14f;
19702 }
19703 else
19704 {
19705 rotation = 0f;
19706 }
19707 if (Main.expertMode && Main.netMode != 1)
19708 {
19709 int num378 = (int)(1f + (float)life / (float)lifeMax * 10f);
19710 num378 *= num378;
19711 if (num378 < 400)
19712 {
19713 num378 = (num378 * 19 + 400) / 20;
19714 }
19715 if (num378 < 60)
19716 {
19717 num378 = (num378 * 3 + 60) / 4;
19718 }
19719 if (num378 < 20)
19720 {
19721 num378 = (num378 + 20) / 2;
19722 }
19723 num378 = (int)((double)num378 * 0.7);
19724 if (Main.rand.Next(num378) == 0)
19725 {
19726 int num379 = 0;
19727 float[] array = new float[10];
19728 for (int num380 = 0; num380 < 200; num380++)
19729 {
19730 if (num379 < 10 && Main.npc[num380].active && Main.npc[num380].type == 115)
19731 {
19732 array[num379] = Main.npc[num380].ai[0];
19733 num379++;
19734 }
19735 }
19736 int maxValue = 1 + num379 * 2;
19737 if (num379 < 10 && Main.rand.Next(maxValue) <= 1)
19738 {
19739 int num381 = -1;
19740 for (int num382 = 0; num382 < 1000; num382++)
19741 {
19742 int num383 = Main.rand.Next(10);
19743 float num384 = (float)num383 * 0.1f - 0.05f;
19744 bool flag26 = true;
19745 for (int num385 = 0; num385 < num379; num385++)
19746 {
19747 if (num384 == array[num385])
19748 {
19749 flag26 = false;
19750 break;
19751 }
19752 }
19753 if (flag26)
19754 {
19755 num381 = num383;
19756 break;
19757 }
19758 }
19759 if (num381 >= 0)
19760 {
19761 NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)position.X, (int)num368, 115, whoAmI, (float)num381 * 0.1f - 0.05f);
19762 }
19763 }
19764 }
19765 }
19766 if (Main.netMode != 1 && localAI[0] == 1f)
19767 {
19768 localAI[0] = 2f;
19769 float num386 = (base.Center.Y + (float)Main.wofDrawAreaTop) / 2f;
19770 int num387 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)position.X, (int)num386, 114, whoAmI, 1f);
19771 float num388 = (base.Center.Y + (float)Main.wofDrawAreaBottom) / 2f;
19773 float num389 = (base.Center.Y + (float)Main.wofDrawAreaBottom) / 2f;
19774 for (int num390 = 0; num390 < 11; num390++)
19775 {
19776 num387 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)position.X, (int)num389, 115, whoAmI, (float)num390 * 0.1f - 0.05f);
19777 }
19778 }
19779 }
19780 else if (aiStyle == 28)
19781 {
19782 if (Main.wofNPCIndex < 0)
19783 {
19784 active = false;
19785 return;
19786 }
19787 realLife = Main.wofNPCIndex;
19788 if (Main.npc[Main.wofNPCIndex].life > 0)
19789 {
19790 life = Main.npc[Main.wofNPCIndex].life;
19791 }
19792 TargetClosest();
19793 position.X = Main.npc[Main.wofNPCIndex].position.X;
19794 direction = Main.npc[Main.wofNPCIndex].direction;
19796 float num391 = (Main.wofDrawAreaBottom + Main.wofDrawAreaTop) / 2;
19797 num391 = ((!(this.ai[0] > 0f)) ? ((num391 + (float)Main.wofDrawAreaBottom) / 2f) : ((num391 + (float)Main.wofDrawAreaTop) / 2f));
19798 num391 -= (float)(height / 2);
19799 if (position.Y > num391 + 1f)
19800 {
19801 velocity.Y = -1f;
19802 }
19803 else if (position.Y < num391 - 1f)
19804 {
19805 velocity.Y = 1f;
19806 }
19807 else
19808 {
19809 velocity.Y = 0f;
19810 position.Y = num391;
19811 }
19812 if (velocity.Y > 5f)
19813 {
19814 velocity.Y = 5f;
19815 }
19816 if (velocity.Y < -5f)
19817 {
19818 velocity.Y = -5f;
19819 }
19820 Vector2 vector39 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
19821 float num392 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector39.X;
19822 float num393 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector39.Y;
19823 float num394 = (float)Math.Sqrt(num392 * num392 + num393 * num393);
19824 float num395 = num394;
19825 num392 *= num394;
19826 num393 *= num394;
19827 bool flag27 = true;
19828 if (direction > 0)
19829 {
19830 if (Main.player[target].position.X + (float)(Main.player[target].width / 2) > position.X + (float)(width / 2))
19831 {
19832 rotation = (float)Math.Atan2(0f - num393, 0f - num392) + 3.14f;
19833 }
19834 else
19835 {
19836 rotation = 0f;
19837 flag27 = false;
19838 }
19839 }
19840 else if (Main.player[target].position.X + (float)(Main.player[target].width / 2) < position.X + (float)(width / 2))
19841 {
19842 rotation = (float)Math.Atan2(num393, num392) + 3.14f;
19843 }
19844 else
19845 {
19846 rotation = 0f;
19847 flag27 = false;
19848 }
19849 if (Main.netMode == 1)
19850 {
19851 return;
19852 }
19853 int num396 = 4;
19854 localAI[1] += 1f;
19855 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.75)
19856 {
19857 localAI[1] += 1f;
19858 num396++;
19859 }
19860 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.5)
19861 {
19862 localAI[1] += 1f;
19863 num396++;
19864 }
19865 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.25)
19866 {
19867 localAI[1] += 1f;
19868 num396 += 2;
19869 }
19870 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.1)
19871 {
19872 localAI[1] += 2f;
19873 num396 += 3;
19874 }
19875 if (Main.expertMode)
19876 {
19877 localAI[1] += 0.5f;
19878 num396++;
19879 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.1)
19880 {
19881 localAI[1] += 2f;
19882 num396 += 3;
19883 }
19884 }
19885 if (localAI[2] == 0f)
19886 {
19887 if (localAI[1] > 600f)
19888 {
19889 localAI[2] = 1f;
19890 localAI[1] = 0f;
19891 }
19892 }
19893 else
19894 {
19895 if (!(localAI[1] > 45f) || !Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
19896 {
19897 return;
19898 }
19899 localAI[1] = 0f;
19900 localAI[2] += 1f;
19901 if (localAI[2] >= (float)num396)
19902 {
19903 localAI[2] = 0f;
19904 }
19905 if (flag27)
19906 {
19907 float num397 = 9f;
19908 int num398 = 11;
19909 int num399 = 83;
19910 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.5)
19911 {
19912 num398++;
19913 num397 += 1f;
19914 }
19915 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.25)
19916 {
19917 num398++;
19918 num397 += 1f;
19919 }
19920 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.1)
19921 {
19922 num398 += 2;
19923 num397 += 2f;
19924 }
19925 vector39 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
19926 num392 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector39.X;
19927 num393 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector39.Y;
19928 num394 = (float)Math.Sqrt(num392 * num392 + num393 * num393);
19929 num394 = num397 / num394;
19930 num392 *= num394;
19931 num393 *= num394;
19932 vector39.X += num392;
19933 vector39.Y += num393;
19934 int num400 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector39.X, vector39.Y, num392, num393, num399, num398, 0f, Main.myPlayer);
19935 }
19936 }
19937 }
19938 else if (aiStyle == 29)
19939 {
19940 if (justHit)
19941 {
19942 this.ai[1] = 10f;
19943 }
19944 if (Main.wofNPCIndex < 0)
19945 {
19946 active = false;
19947 return;
19948 }
19949 TargetClosest();
19950 float num401 = 0.1f;
19951 float num402 = 300f;
19952 damage = defDamage;
19953 int num403 = 0;
19954 if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.5)
19955 {
19956 num403 = 60;
19957 defense = 30;
19958 if (!Main.expertMode)
19959 {
19960 num402 = 700f;
19961 }
19962 else
19963 {
19964 num401 += 0.066f;
19965 }
19966 }
19967 else if ((double)Main.npc[Main.wofNPCIndex].life < (double)Main.npc[Main.wofNPCIndex].lifeMax * 0.75)
19968 {
19969 num403 = 45;
19970 defense = 20;
19971 if (!Main.expertMode)
19972 {
19973 num402 = 500f;
19974 }
19975 else
19976 {
19977 num401 += 0.033f;
19978 }
19979 }
19980 if (num403 > 0)
19981 {
19983 }
19984 if (Main.expertMode)
19985 {
19987 if (whoAmI % 4 == 0)
19988 {
19989 num402 *= 1.75f;
19990 }
19991 if (whoAmI % 4 == 1)
19992 {
19993 num402 *= 1.5f;
19994 }
19995 if (whoAmI % 4 == 2)
19996 {
19997 num402 *= 1.25f;
19998 }
19999 if (whoAmI % 3 == 0)
20000 {
20001 num402 *= 1.5f;
20002 }
20003 if (whoAmI % 3 == 1)
20004 {
20005 num402 *= 1.25f;
20006 }
20007 num402 *= 0.75f;
20008 }
20009 float num404 = Main.npc[Main.wofNPCIndex].position.X + (float)(Main.npc[Main.wofNPCIndex].width / 2);
20010 float y3 = Main.npc[Main.wofNPCIndex].position.Y;
20011 float num405 = Main.wofDrawAreaBottom - Main.wofDrawAreaTop;
20012 y3 = (float)Main.wofDrawAreaTop + num405 * this.ai[0];
20013 this.ai[2] += 1f;
20014 if (this.ai[2] > 100f)
20015 {
20016 num402 = (int)(num402 * 1.3f);
20017 if (this.ai[2] > 200f)
20018 {
20019 this.ai[2] = 0f;
20020 }
20021 }
20023 float num406 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - (float)(width / 2) - vector40.X;
20024 float num407 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - (float)(height / 2) - vector40.Y;
20025 float num408 = (float)Math.Sqrt(num406 * num406 + num407 * num407);
20026 if (this.ai[1] == 0f)
20027 {
20028 if (num408 > num402)
20029 {
20030 num408 = num402 / num408;
20031 num406 *= num408;
20032 num407 *= num408;
20033 }
20034 if (position.X < num404 + num406)
20035 {
20036 velocity.X += num401;
20037 if (velocity.X < 0f && num406 > 0f)
20038 {
20039 velocity.X += num401 * 2.5f;
20040 }
20041 }
20042 else if (position.X > num404 + num406)
20043 {
20044 velocity.X -= num401;
20045 if (velocity.X > 0f && num406 < 0f)
20046 {
20047 velocity.X -= num401 * 2.5f;
20048 }
20049 }
20050 if (position.Y < y3 + num407)
20051 {
20052 velocity.Y += num401;
20053 if (velocity.Y < 0f && num407 > 0f)
20054 {
20055 velocity.Y += num401 * 2.5f;
20056 }
20057 }
20058 else if (position.Y > y3 + num407)
20059 {
20060 velocity.Y -= num401;
20061 if (velocity.Y > 0f && num407 < 0f)
20062 {
20063 velocity.Y -= num401 * 2.5f;
20064 }
20065 }
20066 float num409 = 4f;
20067 if (Main.expertMode && Main.wofNPCIndex >= 0)
20068 {
20069 float num410 = 1.5f;
20070 float num411 = Main.npc[Main.wofNPCIndex].life / Main.npc[Main.wofNPCIndex].lifeMax;
20071 if ((double)num411 < 0.75)
20072 {
20073 num410 += 0.7f;
20074 }
20075 if ((double)num411 < 0.5)
20076 {
20077 num410 += 0.7f;
20078 }
20079 if ((double)num411 < 0.25)
20080 {
20081 num410 += 0.9f;
20082 }
20083 if ((double)num411 < 0.1)
20084 {
20085 num410 += 0.9f;
20086 }
20087 num410 *= 1.25f;
20088 num410 += 0.3f;
20089 num409 += num410 * 0.35f;
20090 if (base.Center.X < Main.npc[Main.wofNPCIndex].Center.X && Main.npc[Main.wofNPCIndex].velocity.X > 0f)
20091 {
20092 num409 += 6f;
20093 }
20094 if (base.Center.X > Main.npc[Main.wofNPCIndex].Center.X && Main.npc[Main.wofNPCIndex].velocity.X < 0f)
20095 {
20096 num409 += 6f;
20097 }
20098 }
20099 if (velocity.X > num409)
20100 {
20101 velocity.X = num409;
20102 }
20103 if (velocity.X < 0f - num409)
20104 {
20105 velocity.X = 0f - num409;
20106 }
20107 if (velocity.Y > num409)
20108 {
20109 velocity.Y = num409;
20110 }
20111 if (velocity.Y < 0f - num409)
20112 {
20113 velocity.Y = 0f - num409;
20114 }
20115 }
20116 else if (this.ai[1] > 0f)
20117 {
20118 this.ai[1] -= 1f;
20119 }
20120 else
20121 {
20122 this.ai[1] = 0f;
20123 }
20124 if (num406 > 0f)
20125 {
20126 spriteDirection = 1;
20127 rotation = (float)Math.Atan2(num407, num406);
20128 }
20129 if (num406 < 0f)
20130 {
20131 spriteDirection = -1;
20132 rotation = (float)Math.Atan2(num407, num406) + 3.14f;
20133 }
20134 Lighting.AddLight((int)(position.X + (float)(width / 2)) / 16, (int)(position.Y + (float)(height / 2)) / 16, 0.3f, 0.2f, 0.1f);
20135 }
20136 else if (aiStyle == 30)
20137 {
20138 if (target < 0 || target == 255 || Main.player[target].dead || !Main.player[target].active)
20139 {
20140 TargetClosest();
20141 }
20142 bool dead2 = Main.player[target].dead;
20143 float num412 = position.X + (float)(width / 2) - Main.player[target].position.X - (float)(Main.player[target].width / 2);
20144 float num413 = position.Y + (float)height - 59f - Main.player[target].position.Y - (float)(Main.player[target].height / 2);
20145 float num414 = (float)Math.Atan2(num413, num412) + 1.57f;
20146 if (num414 < 0f)
20147 {
20148 num414 += 6.283f;
20149 }
20150 else if ((double)num414 > 6.283)
20151 {
20152 num414 -= 6.283f;
20153 }
20154 float num415 = 0.1f;
20155 if (rotation < num414)
20156 {
20157 if ((double)(num414 - rotation) > 3.1415)
20158 {
20159 rotation -= num415;
20160 }
20161 else
20162 {
20163 rotation += num415;
20164 }
20165 }
20166 else if (rotation > num414)
20167 {
20168 if ((double)(rotation - num414) > 3.1415)
20169 {
20170 rotation += num415;
20171 }
20172 else
20173 {
20174 rotation -= num415;
20175 }
20176 }
20177 if (rotation > num414 - num415 && rotation < num414 + num415)
20178 {
20179 rotation = num414;
20180 }
20181 if (rotation < 0f)
20182 {
20183 rotation += 6.283f;
20184 }
20185 else if ((double)rotation > 6.283)
20186 {
20187 rotation -= 6.283f;
20188 }
20189 if (rotation > num414 - num415 && rotation < num414 + num415)
20190 {
20191 rotation = num414;
20192 }
20193 if (Main.rand.Next(5) == 0)
20194 {
20195 int num416 = Dust.NewDust(new Vector2(position.X, position.Y + (float)height * 0.25f), width, (int)((float)height * 0.5f), 5, velocity.X, 2f);
20196 Main.dust[num416].velocity.X *= 0.5f;
20197 Main.dust[num416].velocity.Y *= 0.1f;
20198 }
20199 if (Main.netMode != 1 && !Main.IsItDay() && !dead2 && timeLeft < 10)
20200 {
20201 for (int num417 = 0; num417 < 200; num417++)
20202 {
20203 if (num417 != whoAmI && Main.npc[num417].active && (Main.npc[num417].type == 125 || Main.npc[num417].type == 126))
20204 {
20205 DiscourageDespawn(Main.npc[num417].timeLeft - 1);
20206 }
20207 }
20208 }
20210 if (IsMechQueenUp)
20211 {
20212 NPC nPC = Main.npc[mechQueen];
20213 Vector2 mechQueenCenter = nPC.GetMechQueenCenter();
20214 Vector2 vector42 = new Vector2(-150f, -250f);
20215 vector42 *= 0.75f;
20216 float num418 = nPC.velocity.X * 0.025f;
20219 }
20220 reflectsProjectiles = false;
20221 if (Main.IsItDay() || dead2)
20222 {
20223 velocity.Y -= 0.04f;
20224 EncourageDespawn(10);
20225 return;
20226 }
20227 if (this.ai[0] == 0f)
20228 {
20229 if (this.ai[1] == 0f)
20230 {
20231 float num419 = 7f;
20232 float num420 = 0.1f;
20233 if (Main.expertMode)
20234 {
20235 num419 = 8.25f;
20236 num420 = 0.115f;
20237 }
20238 if (Main.getGoodWorld)
20239 {
20240 num419 *= 1.15f;
20241 num420 *= 1.15f;
20242 }
20243 int num421 = 1;
20244 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)Main.player[target].width)
20245 {
20246 num421 = -1;
20247 }
20248 Vector2 vector43 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20249 float num422 = Main.player[target].position.X + (float)(Main.player[target].width / 2) + (float)(num421 * 300) - vector43.X;
20250 float num423 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 300f - vector43.Y;
20251 if (IsMechQueenUp)
20252 {
20253 num419 = 14f;
20254 num422 = vector41.X;
20255 num423 = vector41.Y;
20256 num422 -= vector43.X;
20257 num423 -= vector43.Y;
20258 }
20259 float num424 = (float)Math.Sqrt(num422 * num422 + num423 * num423);
20260 float num425 = num424;
20261 if (IsMechQueenUp)
20262 {
20263 if (num424 > num419)
20264 {
20265 num424 = num419 / num424;
20266 num422 *= num424;
20267 num423 *= num424;
20268 }
20269 float num426 = 60f;
20270 velocity.X = (velocity.X * (num426 - 1f) + num422) / num426;
20271 velocity.Y = (velocity.Y * (num426 - 1f) + num423) / num426;
20272 }
20273 else
20274 {
20275 num424 = num419 / num424;
20276 num422 *= num424;
20277 num423 *= num424;
20278 if (velocity.X < num422)
20279 {
20280 velocity.X += num420;
20281 if (velocity.X < 0f && num422 > 0f)
20282 {
20283 velocity.X += num420;
20284 }
20285 }
20286 else if (velocity.X > num422)
20287 {
20288 velocity.X -= num420;
20289 if (velocity.X > 0f && num422 < 0f)
20290 {
20291 velocity.X -= num420;
20292 }
20293 }
20294 if (velocity.Y < num423)
20295 {
20296 velocity.Y += num420;
20297 if (velocity.Y < 0f && num423 > 0f)
20298 {
20299 velocity.Y += num420;
20300 }
20301 }
20302 else if (velocity.Y > num423)
20303 {
20304 velocity.Y -= num420;
20305 if (velocity.Y > 0f && num423 < 0f)
20306 {
20307 velocity.Y -= num420;
20308 }
20309 }
20310 }
20311 int num427 = 600;
20312 int num428 = 60;
20313 if (IsMechQueenUp)
20314 {
20315 num427 = 1200;
20316 num428 = ((!npcsFoundForCheckActive[135]) ? 90 : 120);
20317 }
20318 this.ai[2] += 1f;
20319 if (this.ai[2] >= (float)num427)
20320 {
20321 this.ai[1] = 1f;
20322 this.ai[2] = 0f;
20323 this.ai[3] = 0f;
20324 target = 255;
20325 netUpdate = true;
20326 }
20327 else if (position.Y + (float)height < Main.player[target].position.Y && num425 < 400f)
20328 {
20329 if (!Main.player[target].dead)
20330 {
20331 this.ai[3] += 1f;
20332 if (Main.expertMode && (double)life < (double)lifeMax * 0.9)
20333 {
20334 this.ai[3] += 0.3f;
20335 }
20336 if (Main.expertMode && (double)life < (double)lifeMax * 0.8)
20337 {
20338 this.ai[3] += 0.3f;
20339 }
20340 if (Main.expertMode && (double)life < (double)lifeMax * 0.7)
20341 {
20342 this.ai[3] += 0.3f;
20343 }
20344 if (Main.expertMode && (double)life < (double)lifeMax * 0.6)
20345 {
20346 this.ai[3] += 0.3f;
20347 }
20348 if (Main.getGoodWorld)
20349 {
20350 this.ai[3] += 0.5f;
20351 }
20352 }
20353 if (this.ai[3] >= (float)num428)
20354 {
20355 this.ai[3] = 0f;
20356 vector43 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20357 num422 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector43.X;
20358 num423 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector43.Y;
20359 if (Main.netMode != 1)
20360 {
20361 float num429 = 9f;
20363 int num430 = 83;
20364 if (Main.expertMode)
20365 {
20366 num429 = 10.5f;
20367 }
20368 num424 = (float)Math.Sqrt(num422 * num422 + num423 * num423);
20369 num424 = num429 / num424;
20370 num422 *= num424;
20371 num423 *= num424;
20372 num422 += (float)Main.rand.Next(-40, 41) * 0.08f;
20373 num423 += (float)Main.rand.Next(-40, 41) * 0.08f;
20374 vector43.X += num422 * 15f;
20375 vector43.Y += num423 * 15f;
20376 int num431 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector43.X, vector43.Y, num422, num423, num430, attackDamage_ForProjectiles3, 0f, Main.myPlayer);
20377 }
20378 }
20379 }
20380 }
20381 else if (this.ai[1] == 1f)
20382 {
20383 rotation = num414;
20384 float num432 = 12f;
20385 if (Main.expertMode)
20386 {
20387 num432 = 15f;
20388 }
20389 if (Main.getGoodWorld)
20390 {
20391 num432 += 2f;
20392 }
20393 Vector2 vector44 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20394 float num433 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector44.X;
20395 float num434 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector44.Y;
20396 float num435 = (float)Math.Sqrt(num433 * num433 + num434 * num434);
20397 num435 = num432 / num435;
20398 velocity.X = num433 * num435;
20399 velocity.Y = num434 * num435;
20400 this.ai[1] = 2f;
20401 }
20402 else if (this.ai[1] == 2f)
20403 {
20404 this.ai[2] += 1f;
20405 if (this.ai[2] >= 25f)
20406 {
20407 velocity.X *= 0.96f;
20408 velocity.Y *= 0.96f;
20409 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
20410 {
20411 velocity.X = 0f;
20412 }
20413 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
20414 {
20415 velocity.Y = 0f;
20416 }
20417 }
20418 else
20419 {
20420 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
20421 }
20422 if (this.ai[2] >= 70f)
20423 {
20424 this.ai[3] += 1f;
20425 this.ai[2] = 0f;
20426 target = 255;
20427 rotation = num414;
20428 if (this.ai[3] >= 4f)
20429 {
20430 this.ai[1] = 0f;
20431 this.ai[3] = 0f;
20432 }
20433 else
20434 {
20435 this.ai[1] = 1f;
20436 }
20437 }
20438 }
20439 if ((double)life < (double)lifeMax * 0.4)
20440 {
20441 this.ai[0] = 1f;
20442 this.ai[1] = 0f;
20443 this.ai[2] = 0f;
20444 this.ai[3] = 0f;
20445 netUpdate = true;
20446 }
20447 return;
20448 }
20449 if (this.ai[0] == 1f || this.ai[0] == 2f)
20450 {
20451 if (IsMechQueenUp)
20452 {
20453 reflectsProjectiles = true;
20454 }
20455 if (this.ai[0] == 1f)
20456 {
20457 this.ai[2] += 0.005f;
20458 if ((double)this.ai[2] > 0.5)
20459 {
20460 this.ai[2] = 0.5f;
20461 }
20462 }
20463 else
20464 {
20465 this.ai[2] -= 0.005f;
20466 if (this.ai[2] < 0f)
20467 {
20468 this.ai[2] = 0f;
20469 }
20470 }
20471 rotation += this.ai[2];
20472 this.ai[1] += 1f;
20473 if (this.ai[1] >= 100f)
20474 {
20475 this.ai[0] += 1f;
20476 this.ai[1] = 0f;
20477 if (this.ai[0] == 3f)
20478 {
20479 this.ai[2] = 0f;
20480 }
20481 else
20482 {
20483 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y);
20484 for (int num436 = 0; num436 < 2; num436++)
20485 {
20486 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 143);
20487 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 7);
20488 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 6);
20489 }
20490 for (int num437 = 0; num437 < 20; num437++)
20491 {
20492 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
20493 }
20494 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
20495 }
20496 }
20497 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
20498 velocity.X *= 0.98f;
20499 velocity.Y *= 0.98f;
20500 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
20501 {
20502 velocity.X = 0f;
20503 }
20504 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
20505 {
20506 velocity.Y = 0f;
20507 }
20508 return;
20509 }
20510 damage = (int)((double)defDamage * 1.5);
20511 defense = defDefense + 10;
20513 if (this.ai[1] == 0f)
20514 {
20515 float num438 = 8f;
20516 float num439 = 0.15f;
20517 if (Main.expertMode)
20518 {
20519 num438 = 9.5f;
20520 num439 = 0.175f;
20521 }
20522 if (Main.getGoodWorld)
20523 {
20524 num438 *= 1.15f;
20525 num439 *= 1.15f;
20526 }
20527 Vector2 vector45 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20528 float num440 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector45.X;
20529 float num441 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 300f - vector45.Y;
20530 if (IsMechQueenUp)
20531 {
20532 num438 = 14f;
20533 num440 = vector41.X;
20534 num441 = vector41.Y;
20535 num440 -= vector45.X;
20536 num441 -= vector45.Y;
20537 }
20538 float num442 = (float)Math.Sqrt(num440 * num440 + num441 * num441);
20539 if (IsMechQueenUp)
20540 {
20541 if (num442 > num438)
20542 {
20543 num442 = num438 / num442;
20544 num440 *= num442;
20545 num441 *= num442;
20546 }
20547 velocity.X = (velocity.X * 4f + num440) / 5f;
20548 velocity.Y = (velocity.Y * 4f + num441) / 5f;
20549 }
20550 else
20551 {
20552 num442 = num438 / num442;
20553 num440 *= num442;
20554 num441 *= num442;
20555 if (velocity.X < num440)
20556 {
20557 velocity.X += num439;
20558 if (velocity.X < 0f && num440 > 0f)
20559 {
20560 velocity.X += num439;
20561 }
20562 }
20563 else if (velocity.X > num440)
20564 {
20565 velocity.X -= num439;
20566 if (velocity.X > 0f && num440 < 0f)
20567 {
20568 velocity.X -= num439;
20569 }
20570 }
20571 if (velocity.Y < num441)
20572 {
20573 velocity.Y += num439;
20574 if (velocity.Y < 0f && num441 > 0f)
20575 {
20576 velocity.Y += num439;
20577 }
20578 }
20579 else if (velocity.Y > num441)
20580 {
20581 velocity.Y -= num439;
20582 if (velocity.Y > 0f && num441 < 0f)
20583 {
20584 velocity.Y -= num439;
20585 }
20586 }
20587 }
20588 int num443 = 300;
20589 if (IsMechQueenUp)
20590 {
20591 num443 = 1200;
20592 }
20593 this.ai[2] += 1f;
20594 if (this.ai[2] >= (float)num443)
20595 {
20596 this.ai[1] = 1f;
20597 this.ai[2] = 0f;
20598 this.ai[3] = 0f;
20599 TargetClosest();
20600 netUpdate = true;
20601 }
20602 vector45 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20603 num440 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector45.X;
20604 num441 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector45.Y;
20605 rotation = (float)Math.Atan2(num441, num440) - 1.57f;
20606 if (Main.netMode == 1)
20607 {
20608 return;
20609 }
20610 localAI[1] += 1f;
20611 if ((double)life < (double)lifeMax * 0.75)
20612 {
20613 localAI[1] += 1f;
20614 }
20615 if ((double)life < (double)lifeMax * 0.5)
20616 {
20617 localAI[1] += 1f;
20618 }
20619 if ((double)life < (double)lifeMax * 0.25)
20620 {
20621 localAI[1] += 1f;
20622 }
20623 if ((double)life < (double)lifeMax * 0.1)
20624 {
20625 localAI[1] += 2f;
20626 }
20627 if (localAI[1] > 180f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
20628 {
20629 localAI[1] = 0f;
20630 float num444 = 8.5f;
20632 int num445 = 100;
20633 if (Main.expertMode)
20634 {
20635 num444 = 10f;
20636 }
20637 num442 = (float)Math.Sqrt(num440 * num440 + num441 * num441);
20638 num442 = num444 / num442;
20639 num440 *= num442;
20640 num441 *= num442;
20641 vector45.X += num440 * 15f;
20642 vector45.Y += num441 * 15f;
20643 int num446 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector45.X, vector45.Y, num440, num441, num445, attackDamage_ForProjectiles4, 0f, Main.myPlayer);
20644 }
20645 return;
20646 }
20647 int num447 = 1;
20648 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)Main.player[target].width)
20649 {
20650 num447 = -1;
20651 }
20652 float num448 = 8f;
20653 float num449 = 0.2f;
20654 if (Main.expertMode)
20655 {
20656 num448 = 9.5f;
20657 num449 = 0.25f;
20658 }
20659 if (Main.getGoodWorld)
20660 {
20661 num448 *= 1.15f;
20662 num449 *= 1.15f;
20663 }
20664 Vector2 vector46 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20665 float num450 = Main.player[target].position.X + (float)(Main.player[target].width / 2) + (float)(num447 * 340) - vector46.X;
20666 float num451 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector46.Y;
20667 float num452 = (float)Math.Sqrt(num450 * num450 + num451 * num451);
20668 num452 = num448 / num452;
20669 num450 *= num452;
20670 num451 *= num452;
20671 if (velocity.X < num450)
20672 {
20673 velocity.X += num449;
20674 if (velocity.X < 0f && num450 > 0f)
20675 {
20676 velocity.X += num449;
20677 }
20678 }
20679 else if (velocity.X > num450)
20680 {
20681 velocity.X -= num449;
20682 if (velocity.X > 0f && num450 < 0f)
20683 {
20684 velocity.X -= num449;
20685 }
20686 }
20687 if (velocity.Y < num451)
20688 {
20689 velocity.Y += num449;
20690 if (velocity.Y < 0f && num451 > 0f)
20691 {
20692 velocity.Y += num449;
20693 }
20694 }
20695 else if (velocity.Y > num451)
20696 {
20697 velocity.Y -= num449;
20698 if (velocity.Y > 0f && num451 < 0f)
20699 {
20700 velocity.Y -= num449;
20701 }
20702 }
20703 vector46 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20704 num450 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector46.X;
20705 num451 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector46.Y;
20706 rotation = (float)Math.Atan2(num451, num450) - 1.57f;
20707 if (Main.netMode != 1)
20708 {
20709 localAI[1] += 1f;
20710 if ((double)life < (double)lifeMax * 0.75)
20711 {
20712 localAI[1] += 0.5f;
20713 }
20714 if ((double)life < (double)lifeMax * 0.5)
20715 {
20716 localAI[1] += 0.75f;
20717 }
20718 if ((double)life < (double)lifeMax * 0.25)
20719 {
20720 localAI[1] += 1f;
20721 }
20722 if ((double)life < (double)lifeMax * 0.1)
20723 {
20724 localAI[1] += 1.5f;
20725 }
20726 if (Main.expertMode)
20727 {
20728 localAI[1] += 1.5f;
20729 }
20730 if (localAI[1] > 60f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
20731 {
20732 localAI[1] = 0f;
20733 float num453 = 9f;
20735 int num454 = 100;
20736 num452 = (float)Math.Sqrt(num450 * num450 + num451 * num451);
20737 num452 = num453 / num452;
20738 num450 *= num452;
20739 num451 *= num452;
20740 vector46.X += num450 * 15f;
20741 vector46.Y += num451 * 15f;
20742 int num455 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector46.X, vector46.Y, num450, num451, num454, attackDamage_ForProjectiles5, 0f, Main.myPlayer);
20743 }
20744 }
20745 this.ai[2] += 1f;
20746 if (this.ai[2] >= 180f)
20747 {
20748 this.ai[1] = 0f;
20749 this.ai[2] = 0f;
20750 this.ai[3] = 0f;
20751 TargetClosest();
20752 netUpdate = true;
20753 }
20754 }
20755 else if (aiStyle == 31)
20756 {
20757 if (target < 0 || target == 255 || Main.player[target].dead || !Main.player[target].active)
20758 {
20759 TargetClosest();
20760 }
20761 bool dead3 = Main.player[target].dead;
20762 float num456 = position.X + (float)(width / 2) - Main.player[target].position.X - (float)(Main.player[target].width / 2);
20763 float num457 = position.Y + (float)height - 59f - Main.player[target].position.Y - (float)(Main.player[target].height / 2);
20764 float num458 = (float)Math.Atan2(num457, num456) + 1.57f;
20765 if (num458 < 0f)
20766 {
20767 num458 += 6.283f;
20768 }
20769 else if ((double)num458 > 6.283)
20770 {
20771 num458 -= 6.283f;
20772 }
20773 float num459 = 0.15f;
20774 if (IsMechQueenUp && this.ai[0] == 3f && this.ai[1] == 0f)
20775 {
20776 num459 *= 0.25f;
20777 }
20778 if (rotation < num458)
20779 {
20780 if ((double)(num458 - rotation) > 3.1415)
20781 {
20782 rotation -= num459;
20783 }
20784 else
20785 {
20786 rotation += num459;
20787 }
20788 }
20789 else if (rotation > num458)
20790 {
20791 if ((double)(rotation - num458) > 3.1415)
20792 {
20793 rotation += num459;
20794 }
20795 else
20796 {
20797 rotation -= num459;
20798 }
20799 }
20800 if (rotation > num458 - num459 && rotation < num458 + num459)
20801 {
20802 rotation = num458;
20803 }
20804 if (rotation < 0f)
20805 {
20806 rotation += 6.283f;
20807 }
20808 else if ((double)rotation > 6.283)
20809 {
20810 rotation -= 6.283f;
20811 }
20812 if (rotation > num458 - num459 && rotation < num458 + num459)
20813 {
20814 rotation = num458;
20815 }
20816 if (Main.rand.Next(5) == 0)
20817 {
20818 int num460 = Dust.NewDust(new Vector2(position.X, position.Y + (float)height * 0.25f), width, (int)((float)height * 0.5f), 5, velocity.X, 2f);
20819 Main.dust[num460].velocity.X *= 0.5f;
20820 Main.dust[num460].velocity.Y *= 0.1f;
20821 }
20822 if (Main.netMode != 1 && !Main.IsItDay() && !dead3 && timeLeft < 10)
20823 {
20824 for (int num461 = 0; num461 < 200; num461++)
20825 {
20826 if (num461 != whoAmI && Main.npc[num461].active && (Main.npc[num461].type == 125 || Main.npc[num461].type == 126))
20827 {
20828 DiscourageDespawn(Main.npc[num461].timeLeft - 1);
20829 }
20830 }
20831 }
20833 if (IsMechQueenUp)
20834 {
20835 NPC nPC2 = Main.npc[mechQueen];
20836 Vector2 mechQueenCenter2 = nPC2.GetMechQueenCenter();
20837 Vector2 vector48 = new Vector2(150f, -250f);
20838 vector48 *= 0.75f;
20839 float num462 = nPC2.velocity.X * 0.025f;
20842 }
20843 reflectsProjectiles = false;
20844 if (Main.IsItDay() || dead3)
20845 {
20846 velocity.Y -= 0.04f;
20847 EncourageDespawn(10);
20848 return;
20849 }
20850 if (this.ai[0] == 0f)
20851 {
20852 if (this.ai[1] == 0f)
20853 {
20854 TargetClosest();
20855 float num463 = 12f;
20856 float num464 = 0.4f;
20857 if (Main.getGoodWorld)
20858 {
20859 num463 *= 1.15f;
20860 num464 *= 1.15f;
20861 }
20862 int num465 = 1;
20863 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)Main.player[target].width)
20864 {
20865 num465 = -1;
20866 }
20867 Vector2 vector49 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20868 float num466 = Main.player[target].position.X + (float)(Main.player[target].width / 2) + (float)(num465 * 400) - vector49.X;
20869 float num467 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector49.Y;
20870 if (IsMechQueenUp)
20871 {
20872 num463 = 14f;
20873 num466 = vector47.X;
20874 num467 = vector47.Y;
20875 num466 -= vector49.X;
20876 num467 -= vector49.Y;
20877 }
20878 float num468 = (float)Math.Sqrt(num466 * num466 + num467 * num467);
20879 float num469 = num468;
20880 if (IsMechQueenUp)
20881 {
20882 if (num468 > num463)
20883 {
20884 num468 = num463 / num468;
20885 num466 *= num468;
20886 num467 *= num468;
20887 }
20888 velocity.X = (velocity.X * 4f + num466) / 5f;
20889 velocity.Y = (velocity.Y * 4f + num467) / 5f;
20890 }
20891 else
20892 {
20893 num468 = num463 / num468;
20894 num466 *= num468;
20895 num467 *= num468;
20896 if (velocity.X < num466)
20897 {
20898 velocity.X += num464;
20899 if (velocity.X < 0f && num466 > 0f)
20900 {
20901 velocity.X += num464;
20902 }
20903 }
20904 else if (velocity.X > num466)
20905 {
20906 velocity.X -= num464;
20907 if (velocity.X > 0f && num466 < 0f)
20908 {
20909 velocity.X -= num464;
20910 }
20911 }
20912 if (velocity.Y < num467)
20913 {
20914 velocity.Y += num464;
20915 if (velocity.Y < 0f && num467 > 0f)
20916 {
20917 velocity.Y += num464;
20918 }
20919 }
20920 else if (velocity.Y > num467)
20921 {
20922 velocity.Y -= num464;
20923 if (velocity.Y > 0f && num467 < 0f)
20924 {
20925 velocity.Y -= num464;
20926 }
20927 }
20928 }
20929 int num470 = 600;
20930 if (IsMechQueenUp)
20931 {
20932 num470 = 1200;
20933 }
20934 this.ai[2] += 1f;
20935 if (this.ai[2] >= (float)num470)
20936 {
20937 this.ai[1] = 1f;
20938 this.ai[2] = 0f;
20939 this.ai[3] = 0f;
20940 target = 255;
20941 netUpdate = true;
20942 }
20943 else
20944 {
20945 if (!Main.player[target].dead)
20946 {
20947 this.ai[3] += 1f;
20948 if (Main.expertMode && (double)life < (double)lifeMax * 0.8)
20949 {
20950 this.ai[3] += 0.6f;
20951 }
20952 if (Main.getGoodWorld)
20953 {
20954 this.ai[3] += 0.4f;
20955 }
20956 }
20957 if (this.ai[3] >= 60f)
20958 {
20959 this.ai[3] = 0f;
20960 vector49 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
20961 num466 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector49.X;
20962 num467 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector49.Y;
20963 if (Main.netMode != 1)
20964 {
20965 float num471 = 12f;
20967 int num472 = 96;
20968 if (Main.expertMode)
20969 {
20970 num471 = 14f;
20971 }
20972 num468 = (float)Math.Sqrt(num466 * num466 + num467 * num467);
20973 num468 = num471 / num468;
20974 num466 *= num468;
20975 num467 *= num468;
20976 num466 += (float)Main.rand.Next(-40, 41) * 0.05f;
20977 num467 += (float)Main.rand.Next(-40, 41) * 0.05f;
20978 vector49.X += num466 * 4f;
20979 vector49.Y += num467 * 4f;
20980 int num473 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector49.X, vector49.Y, num466, num467, num472, attackDamage_ForProjectiles6, 0f, Main.myPlayer);
20981 }
20982 }
20983 }
20984 }
20985 else if (this.ai[1] == 1f)
20986 {
20987 rotation = num458;
20988 float num474 = 13f;
20989 if (Main.expertMode)
20990 {
20991 if ((double)life < (double)lifeMax * 0.9)
20992 {
20993 num474 += 0.5f;
20994 }
20995 if ((double)life < (double)lifeMax * 0.8)
20996 {
20997 num474 += 0.5f;
20998 }
20999 if ((double)life < (double)lifeMax * 0.7)
21000 {
21001 num474 += 0.55f;
21002 }
21003 if ((double)life < (double)lifeMax * 0.6)
21004 {
21005 num474 += 0.6f;
21006 }
21007 if ((double)life < (double)lifeMax * 0.5)
21008 {
21009 num474 += 0.65f;
21010 }
21011 }
21012 if (Main.getGoodWorld)
21013 {
21014 num474 *= 1.2f;
21015 }
21016 Vector2 vector50 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21017 float num475 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector50.X;
21018 float num476 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector50.Y;
21019 float num477 = (float)Math.Sqrt(num475 * num475 + num476 * num476);
21020 num477 = num474 / num477;
21021 velocity.X = num475 * num477;
21022 velocity.Y = num476 * num477;
21023 this.ai[1] = 2f;
21024 }
21025 else if (this.ai[1] == 2f)
21026 {
21027 this.ai[2] += 1f;
21028 if (this.ai[2] >= 8f)
21029 {
21030 velocity.X *= 0.9f;
21031 velocity.Y *= 0.9f;
21032 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
21033 {
21034 velocity.X = 0f;
21035 }
21036 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
21037 {
21038 velocity.Y = 0f;
21039 }
21040 }
21041 else
21042 {
21043 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
21044 }
21045 if (this.ai[2] >= 42f)
21046 {
21047 this.ai[3] += 1f;
21048 this.ai[2] = 0f;
21049 target = 255;
21050 rotation = num458;
21051 if (this.ai[3] >= 10f)
21052 {
21053 this.ai[1] = 0f;
21054 this.ai[3] = 0f;
21055 }
21056 else
21057 {
21058 this.ai[1] = 1f;
21059 }
21060 }
21061 }
21062 if ((double)life < (double)lifeMax * 0.4)
21063 {
21064 this.ai[0] = 1f;
21065 this.ai[1] = 0f;
21066 this.ai[2] = 0f;
21067 this.ai[3] = 0f;
21068 netUpdate = true;
21069 }
21070 return;
21071 }
21072 if (this.ai[0] == 1f || this.ai[0] == 2f)
21073 {
21074 if (IsMechQueenUp)
21075 {
21076 reflectsProjectiles = true;
21077 }
21078 if (this.ai[0] == 1f)
21079 {
21080 this.ai[2] += 0.005f;
21081 if ((double)this.ai[2] > 0.5)
21082 {
21083 this.ai[2] = 0.5f;
21084 }
21085 }
21086 else
21087 {
21088 this.ai[2] -= 0.005f;
21089 if (this.ai[2] < 0f)
21090 {
21091 this.ai[2] = 0f;
21092 }
21093 }
21094 rotation += this.ai[2];
21095 this.ai[1] += 1f;
21096 if (this.ai[1] >= 100f)
21097 {
21098 this.ai[0] += 1f;
21099 this.ai[1] = 0f;
21100 if (this.ai[0] == 3f)
21101 {
21102 this.ai[2] = 0f;
21103 }
21104 else
21105 {
21106 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y);
21107 for (int num478 = 0; num478 < 2; num478++)
21108 {
21109 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 144);
21110 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 7);
21111 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 6);
21112 }
21113 for (int num479 = 0; num479 < 20; num479++)
21114 {
21115 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
21116 }
21117 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
21118 }
21119 }
21120 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
21121 velocity.X *= 0.98f;
21122 velocity.Y *= 0.98f;
21123 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
21124 {
21125 velocity.X = 0f;
21126 }
21127 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
21128 {
21129 velocity.Y = 0f;
21130 }
21131 return;
21132 }
21134 damage = (int)((double)defDamage * 1.5);
21135 defense = defDefense + 18;
21136 if (this.ai[1] == 0f)
21137 {
21138 float num480 = 4f;
21139 float num481 = 0.1f;
21140 int num482 = 1;
21141 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)Main.player[target].width)
21142 {
21143 num482 = -1;
21144 }
21145 Vector2 vector51 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21146 float num483 = Main.player[target].position.X + (float)(Main.player[target].width / 2) + (float)(num482 * 180) - vector51.X;
21147 float num484 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector51.Y;
21148 float num485 = (float)Math.Sqrt(num483 * num483 + num484 * num484);
21149 if (!IsMechQueenUp)
21150 {
21151 if (Main.expertMode)
21152 {
21153 if (num485 > 300f)
21154 {
21155 num480 += 0.5f;
21156 }
21157 if (num485 > 400f)
21158 {
21159 num480 += 0.5f;
21160 }
21161 if (num485 > 500f)
21162 {
21163 num480 += 0.55f;
21164 }
21165 if (num485 > 600f)
21166 {
21167 num480 += 0.55f;
21168 }
21169 if (num485 > 700f)
21170 {
21171 num480 += 0.6f;
21172 }
21173 if (num485 > 800f)
21174 {
21175 num480 += 0.6f;
21176 }
21177 }
21178 if (Main.getGoodWorld)
21179 {
21180 num480 *= 1.15f;
21181 num481 *= 1.15f;
21182 }
21183 num485 = num480 / num485;
21184 num483 *= num485;
21185 num484 *= num485;
21186 if (velocity.X < num483)
21187 {
21188 velocity.X += num481;
21189 if (velocity.X < 0f && num483 > 0f)
21190 {
21191 velocity.X += num481;
21192 }
21193 }
21194 else if (velocity.X > num483)
21195 {
21196 velocity.X -= num481;
21197 if (velocity.X > 0f && num483 < 0f)
21198 {
21199 velocity.X -= num481;
21200 }
21201 }
21202 if (velocity.Y < num484)
21203 {
21204 velocity.Y += num481;
21205 if (velocity.Y < 0f && num484 > 0f)
21206 {
21207 velocity.Y += num481;
21208 }
21209 }
21210 else if (velocity.Y > num484)
21211 {
21212 velocity.Y -= num481;
21213 if (velocity.Y > 0f && num484 < 0f)
21214 {
21215 velocity.Y -= num481;
21216 }
21217 }
21218 }
21219 int num486 = 400;
21220 if (IsMechQueenUp)
21221 {
21222 num486 = 1200;
21223 }
21224 this.ai[2] += 1f;
21225 if (this.ai[2] >= (float)num486)
21226 {
21227 this.ai[1] = 1f;
21228 this.ai[2] = 0f;
21229 this.ai[3] = 0f;
21230 target = 255;
21231 netUpdate = true;
21232 }
21233 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
21234 {
21235 localAI[2] += 1f;
21236 if (localAI[2] > 22f)
21237 {
21238 localAI[2] = 0f;
21240 }
21241 if (Main.netMode != 1)
21242 {
21243 localAI[1] += 1f;
21244 if ((double)life < (double)lifeMax * 0.75)
21245 {
21246 localAI[1] += 1f;
21247 }
21248 if ((double)life < (double)lifeMax * 0.5)
21249 {
21250 localAI[1] += 1f;
21251 }
21252 if ((double)life < (double)lifeMax * 0.25)
21253 {
21254 localAI[1] += 1f;
21255 }
21256 if ((double)life < (double)lifeMax * 0.1)
21257 {
21258 localAI[1] += 2f;
21259 }
21260 if (localAI[1] > 8f)
21261 {
21262 localAI[1] = 0f;
21263 float num487 = 6f;
21265 int num488 = 101;
21266 vector51 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21267 num483 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector51.X;
21268 num484 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector51.Y;
21269 num485 = (float)Math.Sqrt(num483 * num483 + num484 * num484);
21270 num485 = num487 / num485;
21271 num483 *= num485;
21272 num484 *= num485;
21273 num484 += (float)Main.rand.Next(-40, 41) * 0.01f;
21274 num483 += (float)Main.rand.Next(-40, 41) * 0.01f;
21275 num484 += velocity.Y * 0.5f;
21276 num483 += velocity.X * 0.5f;
21277 vector51.X -= num483 * 1f;
21278 vector51.Y -= num484 * 1f;
21279 if (IsMechQueenUp)
21280 {
21281 Vector2 vector52 = (rotation + (float)Math.PI / 2f).ToRotationVector2() * num487 + velocity * 0.5f;
21282 num483 = vector52.X;
21283 num484 = vector52.Y;
21284 vector51 = base.Center - vector52 * 3f;
21285 }
21286 int num489 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector51.X, vector51.Y, num483, num484, num488, attackDamage_ForProjectiles7, 0f, Main.myPlayer);
21287 }
21288 }
21289 }
21290 if (IsMechQueenUp)
21291 {
21292 num480 = 14f;
21293 num483 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector51.X;
21294 num484 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 300f - vector51.Y;
21295 num483 = vector47.X;
21296 num484 = vector47.Y;
21297 num483 -= vector51.X;
21298 num484 -= vector51.Y;
21299 num485 = (float)Math.Sqrt(num483 * num483 + num484 * num484);
21300 if (num485 > num480)
21301 {
21302 num485 = num480 / num485;
21303 num483 *= num485;
21304 num484 *= num485;
21305 }
21306 int num490 = 60;
21307 velocity.X = (velocity.X * (float)(num490 - 1) + num483) / (float)num490;
21308 velocity.Y = (velocity.Y * (float)(num490 - 1) + num484) / (float)num490;
21309 }
21310 }
21311 else if (this.ai[1] == 1f)
21312 {
21313 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
21314 rotation = num458;
21315 float num491 = 14f;
21316 if (Main.expertMode)
21317 {
21318 num491 += 2.5f;
21319 }
21320 Vector2 vector53 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21321 float num492 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector53.X;
21322 float num493 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector53.Y;
21323 float num494 = (float)Math.Sqrt(num492 * num492 + num493 * num493);
21324 num494 = num491 / num494;
21325 velocity.X = num492 * num494;
21326 velocity.Y = num493 * num494;
21327 this.ai[1] = 2f;
21328 }
21329 else
21330 {
21331 if (this.ai[1] != 2f)
21332 {
21333 return;
21334 }
21335 this.ai[2] += 1f;
21336 if (Main.expertMode)
21337 {
21338 this.ai[2] += 0.5f;
21339 }
21340 if (this.ai[2] >= 50f)
21341 {
21342 velocity.X *= 0.93f;
21343 velocity.Y *= 0.93f;
21344 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
21345 {
21346 velocity.X = 0f;
21347 }
21348 if ((double)velocity.Y > -0.1 && (double)velocity.Y < 0.1)
21349 {
21350 velocity.Y = 0f;
21351 }
21352 }
21353 else
21354 {
21355 rotation = (float)Math.Atan2(velocity.Y, velocity.X) - 1.57f;
21356 }
21357 if (this.ai[2] >= 80f)
21358 {
21359 this.ai[3] += 1f;
21360 this.ai[2] = 0f;
21361 target = 255;
21362 rotation = num458;
21363 if (this.ai[3] >= 6f)
21364 {
21365 this.ai[1] = 0f;
21366 this.ai[3] = 0f;
21367 }
21368 else
21369 {
21370 this.ai[1] = 1f;
21371 }
21372 }
21373 }
21374 }
21375 else if (aiStyle == 32)
21376 {
21377 damage = defDamage;
21379 if (this.ai[3] != 0f)
21380 {
21381 mechQueen = whoAmI;
21382 }
21383 reflectsProjectiles = false;
21384 if (this.ai[0] == 0f && Main.netMode != 1)
21385 {
21386 TargetClosest();
21387 this.ai[0] = 1f;
21388 int num495 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 128, whoAmI);
21389 Main.npc[num495].ai[0] = -1f;
21390 Main.npc[num495].ai[1] = whoAmI;
21391 Main.npc[num495].target = target;
21392 Main.npc[num495].netUpdate = true;
21393 num495 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 129, whoAmI);
21394 Main.npc[num495].ai[0] = 1f;
21395 Main.npc[num495].ai[1] = whoAmI;
21396 Main.npc[num495].target = target;
21397 Main.npc[num495].netUpdate = true;
21398 num495 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 130, whoAmI);
21399 Main.npc[num495].ai[0] = -1f;
21400 Main.npc[num495].ai[1] = whoAmI;
21401 Main.npc[num495].target = target;
21402 Main.npc[num495].ai[3] = 150f;
21403 Main.npc[num495].netUpdate = true;
21404 num495 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 131, whoAmI);
21405 Main.npc[num495].ai[0] = 1f;
21406 Main.npc[num495].ai[1] = whoAmI;
21407 Main.npc[num495].target = target;
21408 Main.npc[num495].netUpdate = true;
21409 Main.npc[num495].ai[3] = 150f;
21410 }
21411 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 6000f || Math.Abs(position.Y - Main.player[target].position.Y) > 6000f)
21412 {
21413 TargetClosest();
21414 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 6000f || Math.Abs(position.Y - Main.player[target].position.Y) > 6000f)
21415 {
21416 this.ai[1] = 3f;
21417 }
21418 }
21419 if (Main.IsItDay() && this.ai[1] != 3f && this.ai[1] != 2f)
21420 {
21421 this.ai[1] = 2f;
21422 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
21423 }
21424 if (this.ai[1] == 0f)
21425 {
21426 this.ai[2] += 1f;
21427 if (this.ai[2] >= 600f)
21428 {
21429 this.ai[2] = 0f;
21430 this.ai[1] = 1f;
21431 TargetClosest();
21432 netUpdate = true;
21433 }
21434 if (IsMechQueenUp)
21435 {
21436 rotation = rotation.AngleLerp(velocity.X / 15f * 0.5f, 0.75f);
21437 }
21438 else
21439 {
21440 rotation = velocity.X / 15f;
21441 }
21442 float num496 = 0.1f;
21443 float num497 = 2f;
21444 float num498 = 0.1f;
21445 float num499 = 8f;
21446 int num500 = 200;
21447 int num501 = 500;
21448 float num502 = 0f;
21449 int num503 = ((!(Main.player[target].Center.X < base.Center.X)) ? 1 : (-1));
21450 if (IsMechQueenUp)
21451 {
21452 num502 = -450f * (float)num503;
21453 num500 = 300;
21454 num501 = 350;
21455 }
21456 if (Main.expertMode)
21457 {
21458 num496 = 0.03f;
21459 num497 = 4f;
21460 num498 = 0.07f;
21461 num499 = 9.5f;
21462 }
21463 if (position.Y > Main.player[target].position.Y - (float)num500)
21464 {
21465 if (velocity.Y > 0f)
21466 {
21467 velocity.Y *= 0.98f;
21468 }
21469 velocity.Y -= num496;
21470 if (velocity.Y > num497)
21471 {
21472 velocity.Y = num497;
21473 }
21474 }
21475 else if (position.Y < Main.player[target].position.Y - (float)num501)
21476 {
21477 if (velocity.Y < 0f)
21478 {
21479 velocity.Y *= 0.98f;
21480 }
21481 velocity.Y += num496;
21482 if (velocity.Y < 0f - num497)
21483 {
21484 velocity.Y = 0f - num497;
21485 }
21486 }
21487 if (position.X + (float)(width / 2) > Main.player[target].position.X + (float)(Main.player[target].width / 2) + 100f + num502)
21488 {
21489 if (velocity.X > 0f)
21490 {
21491 velocity.X *= 0.98f;
21492 }
21493 velocity.X -= num498;
21494 if (velocity.X > num499)
21495 {
21496 velocity.X = num499;
21497 }
21498 }
21499 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)(Main.player[target].width / 2) - 100f + num502)
21500 {
21501 if (velocity.X < 0f)
21502 {
21503 velocity.X *= 0.98f;
21504 }
21505 velocity.X += num498;
21506 if (velocity.X < 0f - num499)
21507 {
21508 velocity.X = 0f - num499;
21509 }
21510 }
21511 }
21512 else if (this.ai[1] == 1f)
21513 {
21514 defense *= 2;
21515 damage *= 2;
21516 this.ai[2] += 1f;
21517 if (this.ai[2] == 2f)
21518 {
21519 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
21520 }
21521 if (this.ai[2] >= 400f)
21522 {
21523 this.ai[2] = 0f;
21524 this.ai[1] = 0f;
21525 }
21526 if (IsMechQueenUp)
21527 {
21528 rotation = rotation.AngleLerp(velocity.X / 15f * 0.5f, 0.75f);
21529 }
21530 else
21531 {
21532 rotation += (float)direction * 0.3f;
21533 }
21534 Vector2 vector54 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21535 float num504 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector54.X;
21536 float num505 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector54.Y;
21537 float num506 = (float)Math.Sqrt(num504 * num504 + num505 * num505);
21538 float num507 = 2f;
21539 if (Main.expertMode)
21540 {
21541 num507 = 6f;
21542 if (num506 > 150f)
21543 {
21544 num507 *= 1.05f;
21545 }
21546 if (num506 > 200f)
21547 {
21548 num507 *= 1.1f;
21549 }
21550 if (num506 > 250f)
21551 {
21552 num507 *= 1.1f;
21553 }
21554 if (num506 > 300f)
21555 {
21556 num507 *= 1.1f;
21557 }
21558 if (num506 > 350f)
21559 {
21560 num507 *= 1.1f;
21561 }
21562 if (num506 > 400f)
21563 {
21564 num507 *= 1.1f;
21565 }
21566 if (num506 > 450f)
21567 {
21568 num507 *= 1.1f;
21569 }
21570 if (num506 > 500f)
21571 {
21572 num507 *= 1.1f;
21573 }
21574 if (num506 > 550f)
21575 {
21576 num507 *= 1.1f;
21577 }
21578 if (num506 > 600f)
21579 {
21580 num507 *= 1.1f;
21581 }
21582 }
21583 if (IsMechQueenUp)
21584 {
21585 float num508 = (npcsFoundForCheckActive[135] ? 0.6f : 0.75f);
21586 num507 *= num508;
21587 }
21588 num506 = num507 / num506;
21589 velocity.X = num504 * num506;
21590 velocity.Y = num505 * num506;
21591 if (IsMechQueenUp)
21592 {
21593 float num509 = Vector2.Distance(base.Center, Main.player[target].Center);
21594 if (num509 < 0.1f)
21595 {
21596 num509 = 0f;
21597 }
21598 if (num509 < num507)
21599 {
21600 velocity = velocity.SafeNormalize(Vector2.Zero) * num509;
21601 }
21602 }
21603 }
21604 else if (this.ai[1] == 2f)
21605 {
21606 damage = 1000;
21607 defense = 9999;
21608 if (IsMechQueenUp)
21609 {
21610 rotation = rotation.AngleLerp(velocity.X / 15f * 0.5f, 0.75f);
21611 }
21612 else
21613 {
21614 rotation += (float)direction * 0.3f;
21615 }
21616 Vector2 vector55 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21617 float num510 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector55.X;
21618 float num511 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector55.Y;
21619 float num512 = (float)Math.Sqrt(num510 * num510 + num511 * num511);
21620 float num513 = 10f;
21621 num513 += num512 / 100f;
21622 if (num513 < 8f)
21623 {
21624 num513 = 8f;
21625 }
21626 if (num513 > 32f)
21627 {
21628 num513 = 32f;
21629 }
21630 num512 = num513 / num512;
21631 velocity.X = num510 * num512;
21632 velocity.Y = num511 * num512;
21633 }
21634 else
21635 {
21636 if (this.ai[1] != 3f)
21637 {
21638 return;
21639 }
21640 if (IsMechQueenUp)
21641 {
21642 int num514 = FindFirstNPC(125);
21643 if (num514 >= 0)
21644 {
21645 Main.npc[num514].EncourageDespawn(5);
21646 }
21647 num514 = FindFirstNPC(126);
21648 if (num514 >= 0)
21649 {
21650 Main.npc[num514].EncourageDespawn(5);
21651 }
21652 if (!AnyNPCs(125) && !AnyNPCs(126))
21653 {
21654 num514 = FindFirstNPC(134);
21655 if (num514 >= 0)
21656 {
21657 Main.npc[num514].Transform(136);
21658 }
21660 }
21661 velocity.Y += 0.1f;
21662 if (velocity.Y < 0f)
21663 {
21664 velocity.Y *= 0.95f;
21665 }
21666 velocity.X *= 0.95f;
21667 if (velocity.Y > 13f)
21668 {
21669 velocity.Y = 13f;
21670 }
21671 }
21672 else
21673 {
21674 EncourageDespawn(500);
21675 velocity.Y += 0.1f;
21676 if (velocity.Y < 0f)
21677 {
21678 velocity.Y *= 0.95f;
21679 }
21680 velocity.X *= 0.95f;
21681 }
21682 }
21683 }
21684 else if (aiStyle == 33)
21685 {
21686 Vector2 vector56 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21687 float num515 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector56.X;
21688 float num516 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector56.Y;
21689 float num517 = (float)Math.Sqrt(num515 * num515 + num516 * num516);
21690 if (this.ai[2] != 99f)
21691 {
21692 if (num517 > 800f)
21693 {
21694 this.ai[2] = 99f;
21695 }
21696 }
21697 else if (num517 < 400f)
21698 {
21699 this.ai[2] = 0f;
21700 }
21701 spriteDirection = -(int)this.ai[0];
21702 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 32)
21703 {
21704 this.ai[2] += 10f;
21705 if (this.ai[2] > 50f || Main.netMode != 2)
21706 {
21707 life = -1;
21708 HitEffect();
21709 active = false;
21710 }
21711 }
21712 if (this.ai[2] == 99f)
21713 {
21714 if (position.Y > Main.npc[(int)this.ai[1]].position.Y)
21715 {
21716 if (velocity.Y > 0f)
21717 {
21718 velocity.Y *= 0.96f;
21719 }
21720 velocity.Y -= 0.1f;
21721 if (velocity.Y > 8f)
21722 {
21723 velocity.Y = 8f;
21724 }
21725 }
21726 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y)
21727 {
21728 if (velocity.Y < 0f)
21729 {
21730 velocity.Y *= 0.96f;
21731 }
21732 velocity.Y += 0.1f;
21733 if (velocity.Y < -8f)
21734 {
21735 velocity.Y = -8f;
21736 }
21737 }
21738 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
21739 {
21740 if (velocity.X > 0f)
21741 {
21742 velocity.X *= 0.96f;
21743 }
21744 velocity.X -= 0.5f;
21745 if (velocity.X > 12f)
21746 {
21747 velocity.X = 12f;
21748 }
21749 }
21750 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
21751 {
21752 if (velocity.X < 0f)
21753 {
21754 velocity.X *= 0.96f;
21755 }
21756 velocity.X += 0.5f;
21757 if (velocity.X < -12f)
21758 {
21759 velocity.X = -12f;
21760 }
21761 }
21762 }
21763 else if (this.ai[2] == 0f || this.ai[2] == 3f)
21764 {
21765 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
21766 {
21767 EncourageDespawn(10);
21768 }
21769 if (Main.npc[(int)this.ai[1]].ai[1] != 0f)
21770 {
21771 TargetClosest();
21772 if (Main.player[target].dead)
21773 {
21774 velocity.Y += 0.1f;
21775 if (velocity.Y > 16f)
21776 {
21777 velocity.Y = 16f;
21778 }
21779 }
21780 else
21781 {
21782 Vector2 vector57 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21783 float num518 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector57.X;
21784 float num519 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector57.Y;
21785 float num520 = (float)Math.Sqrt(num518 * num518 + num519 * num519);
21786 num520 = 7f / num520;
21787 num518 *= num520;
21788 num519 *= num520;
21789 rotation = (float)Math.Atan2(num519, num518) - 1.57f;
21790 if (velocity.X > num518)
21791 {
21792 if (velocity.X > 0f)
21793 {
21794 velocity.X *= 0.97f;
21795 }
21796 velocity.X -= 0.05f;
21797 }
21798 if (velocity.X < num518)
21799 {
21800 if (velocity.X < 0f)
21801 {
21802 velocity.X *= 0.97f;
21803 }
21804 velocity.X += 0.05f;
21805 }
21806 if (velocity.Y > num519)
21807 {
21808 if (velocity.Y > 0f)
21809 {
21810 velocity.Y *= 0.97f;
21811 }
21812 velocity.Y -= 0.05f;
21813 }
21814 if (velocity.Y < num519)
21815 {
21816 if (velocity.Y < 0f)
21817 {
21818 velocity.Y *= 0.97f;
21819 }
21820 velocity.Y += 0.05f;
21821 }
21822 }
21823 this.ai[3] += 1f;
21824 if (this.ai[3] >= 600f)
21825 {
21826 this.ai[2] = 0f;
21827 this.ai[3] = 0f;
21828 netUpdate = true;
21829 }
21830 }
21831 else
21832 {
21833 this.ai[3] += 1f;
21834 if (this.ai[3] >= 300f)
21835 {
21836 this.ai[2] += 1f;
21837 this.ai[3] = 0f;
21838 netUpdate = true;
21839 }
21840 if (position.Y > Main.npc[(int)this.ai[1]].position.Y + 320f)
21841 {
21842 if (velocity.Y > 0f)
21843 {
21844 velocity.Y *= 0.96f;
21845 }
21846 velocity.Y -= 0.04f;
21847 if (velocity.Y > 3f)
21848 {
21849 velocity.Y = 3f;
21850 }
21851 }
21852 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y + 260f)
21853 {
21854 if (velocity.Y < 0f)
21855 {
21856 velocity.Y *= 0.96f;
21857 }
21858 velocity.Y += 0.04f;
21859 if (velocity.Y < -3f)
21860 {
21861 velocity.Y = -3f;
21862 }
21863 }
21864 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
21865 {
21866 if (velocity.X > 0f)
21867 {
21868 velocity.X *= 0.96f;
21869 }
21870 velocity.X -= 0.3f;
21871 if (velocity.X > 12f)
21872 {
21873 velocity.X = 12f;
21874 }
21875 }
21876 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 250f)
21877 {
21878 if (velocity.X < 0f)
21879 {
21880 velocity.X *= 0.96f;
21881 }
21882 velocity.X += 0.3f;
21883 if (velocity.X < -12f)
21884 {
21885 velocity.X = -12f;
21886 }
21887 }
21888 }
21889 Vector2 vector58 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21890 float num521 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector58.X;
21891 float num522 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector58.Y;
21892 float num523 = (float)Math.Sqrt(num521 * num521 + num522 * num522);
21893 rotation = (float)Math.Atan2(num522, num521) + 1.57f;
21894 }
21895 else if (this.ai[2] == 1f)
21896 {
21897 Vector2 vector59 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21898 float num524 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector59.X;
21899 float num525 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector59.Y;
21900 float num526 = (float)Math.Sqrt(num524 * num524 + num525 * num525);
21901 rotation = (float)Math.Atan2(num525, num524) + 1.57f;
21902 velocity.X *= 0.95f;
21903 velocity.Y -= 0.1f;
21904 if (velocity.Y < -8f)
21905 {
21906 velocity.Y = -8f;
21907 }
21908 if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 200f)
21909 {
21910 TargetClosest();
21911 this.ai[2] = 2f;
21912 vector59 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21913 num524 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector59.X;
21914 num525 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector59.Y;
21915 num526 = (float)Math.Sqrt(num524 * num524 + num525 * num525);
21916 num526 = 22f / num526;
21917 velocity.X = num524 * num526;
21918 velocity.Y = num525 * num526;
21919 netUpdate = true;
21920 }
21921 }
21922 else if (this.ai[2] == 2f)
21923 {
21924 if (position.Y > Main.player[target].position.Y || velocity.Y < 0f)
21925 {
21926 this.ai[2] = 3f;
21927 }
21928 }
21929 else if (this.ai[2] == 4f)
21930 {
21931 TargetClosest();
21932 Vector2 vector60 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21933 float num527 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector60.X;
21934 float num528 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector60.Y;
21935 float num529 = (float)Math.Sqrt(num527 * num527 + num528 * num528);
21936 num529 = 7f / num529;
21937 num527 *= num529;
21938 num528 *= num529;
21939 if (velocity.X > num527)
21940 {
21941 if (velocity.X > 0f)
21942 {
21943 velocity.X *= 0.97f;
21944 }
21945 velocity.X -= 0.05f;
21946 }
21947 if (velocity.X < num527)
21948 {
21949 if (velocity.X < 0f)
21950 {
21951 velocity.X *= 0.97f;
21952 }
21953 velocity.X += 0.05f;
21954 }
21955 if (velocity.Y > num528)
21956 {
21957 if (velocity.Y > 0f)
21958 {
21959 velocity.Y *= 0.97f;
21960 }
21961 velocity.Y -= 0.05f;
21962 }
21963 if (velocity.Y < num528)
21964 {
21965 if (velocity.Y < 0f)
21966 {
21967 velocity.Y *= 0.97f;
21968 }
21969 velocity.Y += 0.05f;
21970 }
21971 this.ai[3] += 1f;
21972 if (this.ai[3] >= 600f)
21973 {
21974 this.ai[2] = 0f;
21975 this.ai[3] = 0f;
21976 netUpdate = true;
21977 }
21978 vector60 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21979 num527 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector60.X;
21980 num528 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector60.Y;
21981 num529 = (float)Math.Sqrt(num527 * num527 + num528 * num528);
21982 rotation = (float)Math.Atan2(num528, num527) + 1.57f;
21983 }
21984 else if (this.ai[2] == 5f && ((velocity.X > 0f && 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))))
21985 {
21986 this.ai[2] = 0f;
21987 }
21988 }
21989 else if (aiStyle == 34)
21990 {
21991 spriteDirection = -(int)this.ai[0];
21992 Vector2 vector61 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
21993 float num530 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector61.X;
21994 float num531 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector61.Y;
21995 float num532 = (float)Math.Sqrt(num530 * num530 + num531 * num531);
21996 if (this.ai[2] != 99f)
21997 {
21998 if (num532 > 800f)
21999 {
22000 this.ai[2] = 99f;
22001 }
22002 }
22003 else if (num532 < 400f)
22004 {
22005 this.ai[2] = 0f;
22006 }
22007 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 32)
22008 {
22009 this.ai[2] += 10f;
22010 if (this.ai[2] > 50f || Main.netMode != 2)
22011 {
22012 life = -1;
22013 HitEffect();
22014 active = false;
22015 }
22016 }
22017 if (this.ai[2] == 99f)
22018 {
22019 if (position.Y > Main.npc[(int)this.ai[1]].position.Y)
22020 {
22021 if (velocity.Y > 0f)
22022 {
22023 velocity.Y *= 0.96f;
22024 }
22025 velocity.Y -= 0.1f;
22026 if (velocity.Y > 8f)
22027 {
22028 velocity.Y = 8f;
22029 }
22030 }
22031 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y)
22032 {
22033 if (velocity.Y < 0f)
22034 {
22035 velocity.Y *= 0.96f;
22036 }
22037 velocity.Y += 0.1f;
22038 if (velocity.Y < -8f)
22039 {
22040 velocity.Y = -8f;
22041 }
22042 }
22043 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
22044 {
22045 if (velocity.X > 0f)
22046 {
22047 velocity.X *= 0.96f;
22048 }
22049 velocity.X -= 0.5f;
22050 if (velocity.X > 12f)
22051 {
22052 velocity.X = 12f;
22053 }
22054 }
22055 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
22056 {
22057 if (velocity.X < 0f)
22058 {
22059 velocity.X *= 0.96f;
22060 }
22061 velocity.X += 0.5f;
22062 if (velocity.X < -12f)
22063 {
22064 velocity.X = -12f;
22065 }
22066 }
22067 }
22068 else if (this.ai[2] == 0f || this.ai[2] == 3f)
22069 {
22070 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
22071 {
22072 EncourageDespawn(10);
22073 }
22074 if (Main.npc[(int)this.ai[1]].ai[1] != 0f)
22075 {
22076 TargetClosest();
22077 TargetClosest();
22078 if (Main.player[target].dead)
22079 {
22080 velocity.Y += 0.1f;
22081 if (velocity.Y > 16f)
22082 {
22083 velocity.Y = 16f;
22084 }
22085 }
22086 else
22087 {
22088 Vector2 vector62 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22089 float num533 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector62.X;
22090 float num534 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector62.Y;
22091 float num535 = (float)Math.Sqrt(num533 * num533 + num534 * num534);
22092 num535 = 12f / num535;
22093 num533 *= num535;
22094 num534 *= num535;
22095 rotation = (float)Math.Atan2(num534, num533) - 1.57f;
22096 if (Math.Abs(velocity.X) + Math.Abs(velocity.Y) < 2f)
22097 {
22098 rotation = (float)Math.Atan2(num534, num533) - 1.57f;
22099 velocity.X = num533;
22100 velocity.Y = num534;
22101 netUpdate = true;
22102 }
22103 else
22104 {
22105 velocity *= 0.97f;
22106 }
22107 this.ai[3] += 1f;
22108 if (this.ai[3] >= 600f)
22109 {
22110 this.ai[2] = 0f;
22111 this.ai[3] = 0f;
22112 netUpdate = true;
22113 }
22114 }
22115 }
22116 else
22117 {
22118 this.ai[3] += 1f;
22119 if (this.ai[3] >= 600f)
22120 {
22121 this.ai[2] += 1f;
22122 this.ai[3] = 0f;
22123 netUpdate = true;
22124 }
22125 if (position.Y > Main.npc[(int)this.ai[1]].position.Y + 300f)
22126 {
22127 if (velocity.Y > 0f)
22128 {
22129 velocity.Y *= 0.96f;
22130 }
22131 velocity.Y -= 0.1f;
22132 if (velocity.Y > 3f)
22133 {
22134 velocity.Y = 3f;
22135 }
22136 }
22137 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y + 230f)
22138 {
22139 if (velocity.Y < 0f)
22140 {
22141 velocity.Y *= 0.96f;
22142 }
22143 velocity.Y += 0.1f;
22144 if (velocity.Y < -3f)
22145 {
22146 velocity.Y = -3f;
22147 }
22148 }
22149 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 250f)
22150 {
22151 if (velocity.X > 0f)
22152 {
22153 velocity.X *= 0.94f;
22154 }
22155 velocity.X -= 0.3f;
22156 if (velocity.X > 9f)
22157 {
22158 velocity.X = 9f;
22159 }
22160 }
22161 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2))
22162 {
22163 if (velocity.X < 0f)
22164 {
22165 velocity.X *= 0.94f;
22166 }
22167 velocity.X += 0.2f;
22168 if (velocity.X < -8f)
22169 {
22170 velocity.X = -8f;
22171 }
22172 }
22173 }
22174 Vector2 vector63 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22175 float num536 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector63.X;
22176 float num537 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector63.Y;
22177 float num538 = (float)Math.Sqrt(num536 * num536 + num537 * num537);
22178 rotation = (float)Math.Atan2(num537, num536) + 1.57f;
22179 }
22180 else if (this.ai[2] == 1f)
22181 {
22182 if (velocity.Y > 0f)
22183 {
22184 velocity.Y *= 0.9f;
22185 }
22186 Vector2 vector64 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22187 float num539 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 280f * this.ai[0] - vector64.X;
22188 float num540 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector64.Y;
22189 float num541 = (float)Math.Sqrt(num539 * num539 + num540 * num540);
22190 rotation = (float)Math.Atan2(num540, num539) + 1.57f;
22191 velocity.X = (velocity.X * 5f + Main.npc[(int)this.ai[1]].velocity.X) / 6f;
22192 velocity.X += 0.5f;
22193 velocity.Y -= 0.5f;
22194 if (velocity.Y < -9f)
22195 {
22196 velocity.Y = -9f;
22197 }
22198 if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 280f)
22199 {
22200 TargetClosest();
22201 this.ai[2] = 2f;
22202 vector64 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22203 num539 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector64.X;
22204 num540 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector64.Y;
22205 num541 = (float)Math.Sqrt(num539 * num539 + num540 * num540);
22206 num541 = 20f / num541;
22207 velocity.X = num539 * num541;
22208 velocity.Y = num540 * num541;
22209 netUpdate = true;
22210 }
22211 }
22212 else if (this.ai[2] == 2f)
22213 {
22214 if (position.Y > Main.player[target].position.Y || velocity.Y < 0f)
22215 {
22216 if (this.ai[3] >= 4f)
22217 {
22218 this.ai[2] = 3f;
22219 this.ai[3] = 0f;
22220 }
22221 else
22222 {
22223 this.ai[2] = 1f;
22224 this.ai[3] += 1f;
22225 }
22226 }
22227 }
22228 else if (this.ai[2] == 4f)
22229 {
22230 Vector2 vector65 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22231 float num542 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector65.X;
22232 float num543 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector65.Y;
22233 float num544 = (float)Math.Sqrt(num542 * num542 + num543 * num543);
22234 rotation = (float)Math.Atan2(num543, num542) + 1.57f;
22235 velocity.Y = (velocity.Y * 5f + Main.npc[(int)this.ai[1]].velocity.Y) / 6f;
22236 velocity.X += 0.5f;
22237 if (velocity.X > 12f)
22238 {
22239 velocity.X = 12f;
22240 }
22241 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 500f || position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 500f)
22242 {
22243 TargetClosest();
22244 this.ai[2] = 5f;
22245 vector65 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22246 num542 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector65.X;
22247 num543 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector65.Y;
22248 num544 = (float)Math.Sqrt(num542 * num542 + num543 * num543);
22249 num544 = 17f / num544;
22250 velocity.X = num542 * num544;
22251 velocity.Y = num543 * num544;
22252 netUpdate = true;
22253 }
22254 }
22255 else if (this.ai[2] == 5f && position.X + (float)(width / 2) < Main.player[target].position.X + (float)(Main.player[target].width / 2) - 100f)
22256 {
22257 if (this.ai[3] >= 4f)
22258 {
22259 this.ai[2] = 0f;
22260 this.ai[3] = 0f;
22261 }
22262 else
22263 {
22264 this.ai[2] = 4f;
22265 this.ai[3] += 1f;
22266 }
22267 }
22268 }
22269 else if (aiStyle == 35)
22270 {
22271 spriteDirection = -(int)this.ai[0];
22272 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 32)
22273 {
22274 this.ai[2] += 10f;
22275 if (this.ai[2] > 50f || Main.netMode != 2)
22276 {
22277 life = -1;
22278 HitEffect();
22279 active = false;
22280 }
22281 }
22282 if (this.ai[2] == 0f)
22283 {
22284 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
22285 {
22286 EncourageDespawn(10);
22287 }
22288 if (Main.npc[(int)this.ai[1]].ai[1] != 0f)
22289 {
22290 localAI[0] += 2f;
22291 if (position.Y > Main.npc[(int)this.ai[1]].position.Y - 100f)
22292 {
22293 if (velocity.Y > 0f)
22294 {
22295 velocity.Y *= 0.96f;
22296 }
22297 velocity.Y -= 0.07f;
22298 if (velocity.Y > 6f)
22299 {
22300 velocity.Y = 6f;
22301 }
22302 }
22303 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 100f)
22304 {
22305 if (velocity.Y < 0f)
22306 {
22307 velocity.Y *= 0.96f;
22308 }
22309 velocity.Y += 0.07f;
22310 if (velocity.Y < -6f)
22311 {
22312 velocity.Y = -6f;
22313 }
22314 }
22315 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
22316 {
22317 if (velocity.X > 0f)
22318 {
22319 velocity.X *= 0.96f;
22320 }
22321 velocity.X -= 0.1f;
22322 if (velocity.X > 8f)
22323 {
22324 velocity.X = 8f;
22325 }
22326 }
22327 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
22328 {
22329 if (velocity.X < 0f)
22330 {
22331 velocity.X *= 0.96f;
22332 }
22333 velocity.X += 0.1f;
22334 if (velocity.X < -8f)
22335 {
22336 velocity.X = -8f;
22337 }
22338 }
22339 }
22340 else
22341 {
22342 this.ai[3] += 1f;
22343 if (this.ai[3] >= 1100f)
22344 {
22345 localAI[0] = 0f;
22346 this.ai[2] = 1f;
22347 this.ai[3] = 0f;
22348 netUpdate = true;
22349 }
22350 if (position.Y > Main.npc[(int)this.ai[1]].position.Y - 150f)
22351 {
22352 if (velocity.Y > 0f)
22353 {
22354 velocity.Y *= 0.96f;
22355 }
22356 velocity.Y -= 0.04f;
22357 if (velocity.Y > 3f)
22358 {
22359 velocity.Y = 3f;
22360 }
22361 }
22362 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 150f)
22363 {
22364 if (velocity.Y < 0f)
22365 {
22366 velocity.Y *= 0.96f;
22367 }
22368 velocity.Y += 0.04f;
22369 if (velocity.Y < -3f)
22370 {
22371 velocity.Y = -3f;
22372 }
22373 }
22374 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 200f)
22375 {
22376 if (velocity.X > 0f)
22377 {
22378 velocity.X *= 0.96f;
22379 }
22380 velocity.X -= 0.2f;
22381 if (velocity.X > 8f)
22382 {
22383 velocity.X = 8f;
22384 }
22385 }
22386 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 160f)
22387 {
22388 if (velocity.X < 0f)
22389 {
22390 velocity.X *= 0.96f;
22391 }
22392 velocity.X += 0.2f;
22393 if (velocity.X < -8f)
22394 {
22395 velocity.X = -8f;
22396 }
22397 }
22398 }
22399 Vector2 vector66 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22400 float num545 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector66.X;
22401 float num546 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector66.Y;
22402 float num547 = (float)Math.Sqrt(num545 * num545 + num546 * num546);
22403 rotation = (float)Math.Atan2(num546, num545) + 1.57f;
22404 if (Main.netMode != 1)
22405 {
22406 localAI[0] += 1f;
22407 if (localAI[0] > 140f)
22408 {
22409 localAI[0] = 0f;
22410 float num548 = 12f;
22411 int num549 = 0;
22412 int num550 = 102;
22413 num547 = num548 / num547;
22414 num545 = (0f - num545) * num547;
22415 num546 = (0f - num546) * num547;
22416 num545 += (float)Main.rand.Next(-40, 41) * 0.01f;
22417 num546 += (float)Main.rand.Next(-40, 41) * 0.01f;
22418 vector66.X += num545 * 4f;
22419 vector66.Y += num546 * 4f;
22420 int num551 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector66.X, vector66.Y, num545, num546, num550, num549, 0f, Main.myPlayer);
22421 }
22422 }
22423 }
22424 else
22425 {
22426 if (this.ai[2] != 1f)
22427 {
22428 return;
22429 }
22430 this.ai[3] += 1f;
22431 if (this.ai[3] >= 300f)
22432 {
22433 localAI[0] = 0f;
22434 this.ai[2] = 0f;
22435 this.ai[3] = 0f;
22436 netUpdate = true;
22437 }
22438 Vector2 vector67 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22439 float num552 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - vector67.X;
22440 float num553 = Main.npc[(int)this.ai[1]].position.Y - vector67.Y;
22441 num553 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 80f - vector67.Y;
22442 float num554 = (float)Math.Sqrt(num552 * num552 + num553 * num553);
22443 num554 = 6f / num554;
22444 num552 *= num554;
22445 num553 *= num554;
22446 if (velocity.X > num552)
22447 {
22448 if (velocity.X > 0f)
22449 {
22450 velocity.X *= 0.9f;
22451 }
22452 velocity.X -= 0.04f;
22453 }
22454 if (velocity.X < num552)
22455 {
22456 if (velocity.X < 0f)
22457 {
22458 velocity.X *= 0.9f;
22459 }
22460 velocity.X += 0.04f;
22461 }
22462 if (velocity.Y > num553)
22463 {
22464 if (velocity.Y > 0f)
22465 {
22466 velocity.Y *= 0.9f;
22467 }
22468 velocity.Y -= 0.08f;
22469 }
22470 if (velocity.Y < num553)
22471 {
22472 if (velocity.Y < 0f)
22473 {
22474 velocity.Y *= 0.9f;
22475 }
22476 velocity.Y += 0.08f;
22477 }
22478 TargetClosest();
22479 vector67 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22480 num552 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector67.X;
22481 num553 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector67.Y;
22482 num554 = (float)Math.Sqrt(num552 * num552 + num553 * num553);
22483 rotation = (float)Math.Atan2(num553, num552) - 1.57f;
22484 if (Main.netMode != 1)
22485 {
22486 localAI[0] += 1f;
22487 if (localAI[0] > 40f)
22488 {
22489 localAI[0] = 0f;
22490 float num555 = 10f;
22491 int num556 = 0;
22492 int num557 = 102;
22493 num554 = num555 / num554;
22494 num552 *= num554;
22495 num553 *= num554;
22496 num552 += (float)Main.rand.Next(-40, 41) * 0.01f;
22497 num553 += (float)Main.rand.Next(-40, 41) * 0.01f;
22498 vector67.X += num552 * 4f;
22499 vector67.Y += num553 * 4f;
22500 int num558 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector67.X, vector67.Y, num552, num553, num557, num556, 0f, Main.myPlayer);
22501 }
22502 }
22503 }
22504 }
22505 else if (aiStyle == 36)
22506 {
22507 spriteDirection = -(int)this.ai[0];
22508 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 32)
22509 {
22510 this.ai[2] += 10f;
22511 if (this.ai[2] > 50f || Main.netMode != 2)
22512 {
22513 life = -1;
22514 HitEffect();
22515 active = false;
22516 }
22517 }
22518 if (this.ai[2] == 0f || this.ai[2] == 3f)
22519 {
22520 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
22521 {
22522 EncourageDespawn(10);
22523 }
22524 if (Main.npc[(int)this.ai[1]].ai[1] != 0f)
22525 {
22526 localAI[0] += 3f;
22527 if (position.Y > Main.npc[(int)this.ai[1]].position.Y - 100f)
22528 {
22529 if (velocity.Y > 0f)
22530 {
22531 velocity.Y *= 0.96f;
22532 }
22533 velocity.Y -= 0.07f;
22534 if (velocity.Y > 6f)
22535 {
22536 velocity.Y = 6f;
22537 }
22538 }
22539 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 100f)
22540 {
22541 if (velocity.Y < 0f)
22542 {
22543 velocity.Y *= 0.96f;
22544 }
22545 velocity.Y += 0.07f;
22546 if (velocity.Y < -6f)
22547 {
22548 velocity.Y = -6f;
22549 }
22550 }
22551 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
22552 {
22553 if (velocity.X > 0f)
22554 {
22555 velocity.X *= 0.96f;
22556 }
22557 velocity.X -= 0.1f;
22558 if (velocity.X > 8f)
22559 {
22560 velocity.X = 8f;
22561 }
22562 }
22563 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 120f * this.ai[0])
22564 {
22565 if (velocity.X < 0f)
22566 {
22567 velocity.X *= 0.96f;
22568 }
22569 velocity.X += 0.1f;
22570 if (velocity.X < -8f)
22571 {
22572 velocity.X = -8f;
22573 }
22574 }
22575 }
22576 else
22577 {
22578 this.ai[3] += 1f;
22579 if (this.ai[3] >= 800f)
22580 {
22581 this.ai[2] += 1f;
22582 this.ai[3] = 0f;
22583 netUpdate = true;
22584 }
22585 if (position.Y > Main.npc[(int)this.ai[1]].position.Y - 100f)
22586 {
22587 if (velocity.Y > 0f)
22588 {
22589 velocity.Y *= 0.96f;
22590 }
22591 velocity.Y -= 0.1f;
22592 if (velocity.Y > 3f)
22593 {
22594 velocity.Y = 3f;
22595 }
22596 }
22597 else if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 100f)
22598 {
22599 if (velocity.Y < 0f)
22600 {
22601 velocity.Y *= 0.96f;
22602 }
22603 velocity.Y += 0.1f;
22604 if (velocity.Y < -3f)
22605 {
22606 velocity.Y = -3f;
22607 }
22608 }
22609 if (position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 180f * this.ai[0])
22610 {
22611 if (velocity.X > 0f)
22612 {
22613 velocity.X *= 0.96f;
22614 }
22615 velocity.X -= 0.14f;
22616 if (velocity.X > 8f)
22617 {
22618 velocity.X = 8f;
22619 }
22620 }
22621 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 180f * this.ai[0])
22622 {
22623 if (velocity.X < 0f)
22624 {
22625 velocity.X *= 0.96f;
22626 }
22627 velocity.X += 0.14f;
22628 if (velocity.X < -8f)
22629 {
22630 velocity.X = -8f;
22631 }
22632 }
22633 }
22634 TargetClosest();
22635 Vector2 vector68 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22636 float num559 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector68.X;
22637 float num560 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector68.Y;
22638 float num561 = (float)Math.Sqrt(num559 * num559 + num560 * num560);
22639 rotation = (float)Math.Atan2(num560, num559) - 1.57f;
22640 if (Main.netMode != 1)
22641 {
22642 localAI[0] += 1f;
22643 if (localAI[0] > 200f)
22644 {
22645 localAI[0] = 0f;
22646 float num562 = 8f;
22647 int num563 = 25;
22648 int num564 = 100;
22649 num561 = num562 / num561;
22650 num559 *= num561;
22651 num560 *= num561;
22652 num559 += (float)Main.rand.Next(-40, 41) * 0.05f;
22653 num560 += (float)Main.rand.Next(-40, 41) * 0.05f;
22654 vector68.X += num559 * 8f;
22655 vector68.Y += num560 * 8f;
22656 int num565 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector68.X, vector68.Y, num559, num560, num564, num563, 0f, Main.myPlayer);
22657 }
22658 }
22659 }
22660 else
22661 {
22662 if (this.ai[2] != 1f)
22663 {
22664 return;
22665 }
22666 this.ai[3] += 1f;
22667 if (this.ai[3] >= 200f)
22668 {
22669 localAI[0] = 0f;
22670 this.ai[2] = 0f;
22671 this.ai[3] = 0f;
22672 netUpdate = true;
22673 }
22674 Vector2 vector69 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22675 float num566 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - 350f - vector69.X;
22676 float num567 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 20f - vector69.Y;
22677 float num568 = (float)Math.Sqrt(num566 * num566 + num567 * num567);
22678 num568 = 7f / num568;
22679 num566 *= num568;
22680 num567 *= num568;
22681 if (velocity.X > num566)
22682 {
22683 if (velocity.X > 0f)
22684 {
22685 velocity.X *= 0.9f;
22686 }
22687 velocity.X -= 0.1f;
22688 }
22689 if (velocity.X < num566)
22690 {
22691 if (velocity.X < 0f)
22692 {
22693 velocity.X *= 0.9f;
22694 }
22695 velocity.X += 0.1f;
22696 }
22697 if (velocity.Y > num567)
22698 {
22699 if (velocity.Y > 0f)
22700 {
22701 velocity.Y *= 0.9f;
22702 }
22703 velocity.Y -= 0.03f;
22704 }
22705 if (velocity.Y < num567)
22706 {
22707 if (velocity.Y < 0f)
22708 {
22709 velocity.Y *= 0.9f;
22710 }
22711 velocity.Y += 0.03f;
22712 }
22713 TargetClosest();
22714 vector69 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22715 num566 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector69.X;
22716 num567 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector69.Y;
22717 num568 = (float)Math.Sqrt(num566 * num566 + num567 * num567);
22718 rotation = (float)Math.Atan2(num567, num566) - 1.57f;
22719 if (Main.netMode == 1)
22720 {
22721 localAI[0] += 1f;
22722 if (localAI[0] > 80f)
22723 {
22724 localAI[0] = 0f;
22725 float num569 = 10f;
22726 int num570 = 25;
22727 int num571 = 100;
22728 num568 = num569 / num568;
22729 num566 *= num568;
22730 num567 *= num568;
22731 num566 += (float)Main.rand.Next(-40, 41) * 0.05f;
22732 num567 += (float)Main.rand.Next(-40, 41) * 0.05f;
22733 vector69.X += num566 * 8f;
22734 vector69.Y += num567 * 8f;
22735 int num572 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector69.X, vector69.Y, num566, num567, num571, num570, 0f, Main.myPlayer);
22736 }
22737 }
22738 }
22739 }
22740 else if (aiStyle == 37)
22741 {
22743 }
22744 else if (aiStyle == 38)
22745 {
22746 float num573 = 4f;
22747 float num574 = 1f;
22748 if (type == 143)
22749 {
22750 num573 = 3f;
22751 num574 = 0.7f;
22752 }
22753 if (type == 145)
22754 {
22755 num573 = 3.5f;
22756 num574 = 0.8f;
22757 }
22758 if (type == 143)
22759 {
22760 this.ai[2] += 1f;
22761 if (this.ai[2] >= 120f)
22762 {
22763 this.ai[2] = 0f;
22764 if (Main.netMode != 1)
22765 {
22766 Vector2 vector70 = new Vector2(position.X + (float)width * 0.5f - (float)(direction * 12), position.Y + (float)height * 0.5f);
22767 float speedX = 12 * spriteDirection;
22768 float speedY = 0f;
22769 if (Main.netMode != 1)
22770 {
22771 int num575 = 25;
22772 int num576 = 110;
22773 int num577 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector70.X, vector70.Y, speedX, speedY, num576, num575, 0f, Main.myPlayer);
22774 Main.projectile[num577].ai[0] = 2f;
22775 Main.projectile[num577].timeLeft = 300;
22776 Main.projectile[num577].friendly = false;
22777 NetMessage.SendData(27, -1, -1, null, num577);
22778 netUpdate = true;
22779 }
22780 }
22781 }
22782 }
22783 if (type == 144 && this.ai[1] >= 3f)
22784 {
22785 TargetClosest();
22787 if (velocity.Y == 0f)
22788 {
22789 velocity.X *= 0.9f;
22790 this.ai[2] += 1f;
22791 if ((double)velocity.X > -0.3 && (double)velocity.X < 0.3)
22792 {
22793 velocity.X = 0f;
22794 }
22795 if (this.ai[2] >= 200f)
22796 {
22797 this.ai[2] = 0f;
22798 this.ai[1] = 0f;
22799 }
22800 }
22801 }
22802 else if (type == 145 && this.ai[1] >= 3f)
22803 {
22804 TargetClosest();
22805 if (velocity.Y == 0f)
22806 {
22807 velocity.X *= 0.9f;
22808 this.ai[2] += 1f;
22809 if ((double)velocity.X > -0.3 && (double)velocity.X < 0.3)
22810 {
22811 velocity.X = 0f;
22812 }
22813 if (this.ai[2] >= 16f)
22814 {
22815 this.ai[2] = 0f;
22816 this.ai[1] = 0f;
22817 }
22818 }
22819 if (velocity.X == 0f && velocity.Y == 0f && this.ai[2] == 8f)
22820 {
22821 float num578 = 10f;
22822 Vector2 vector71 = new Vector2(position.X + (float)width * 0.5f - (float)(direction * 12), position.Y + (float)height * 0.25f);
22823 float num579 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector71.X;
22824 float num580 = Main.player[target].position.Y - vector71.Y;
22825 float num581 = (float)Math.Sqrt(num579 * num579 + num580 * num580);
22826 num581 = num578 / num581;
22827 num579 *= num581;
22828 num580 *= num581;
22829 if (Main.netMode != 1)
22830 {
22831 int num582 = 35;
22832 int num583 = 109;
22833 int num584 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector71.X, vector71.Y, num579, num580, num583, num582, 0f, Main.myPlayer);
22834 Main.projectile[num584].ai[0] = 2f;
22835 Main.projectile[num584].timeLeft = 300;
22836 Main.projectile[num584].friendly = false;
22837 NetMessage.SendData(27, -1, -1, null, num584);
22838 netUpdate = true;
22839 }
22840 }
22841 }
22842 else
22843 {
22844 if (velocity.Y == 0f)
22845 {
22846 if (localAI[2] == position.X)
22847 {
22848 direction *= -1;
22849 this.ai[3] = 60f;
22850 }
22851 localAI[2] = position.X;
22852 if (this.ai[3] == 0f)
22853 {
22854 TargetClosest();
22855 }
22856 this.ai[0] += 1f;
22857 if (this.ai[0] > 2f)
22858 {
22859 this.ai[0] = 0f;
22860 this.ai[1] += 1f;
22861 velocity.Y = -8.2f;
22862 velocity.X += (float)direction * num574 * 1.1f;
22863 }
22864 else
22865 {
22866 velocity.Y = -6f;
22867 velocity.X += (float)direction * num574 * 0.9f;
22868 }
22870 }
22871 velocity.X += (float)direction * num574 * 0.01f;
22872 }
22873 if (this.ai[3] > 0f)
22874 {
22875 this.ai[3] -= 1f;
22876 }
22877 if (velocity.X > num573 && direction > 0)
22878 {
22879 velocity.X = num573;
22880 }
22881 if (velocity.X < 0f - num573 && direction < 0)
22882 {
22883 velocity.X = 0f - num573;
22884 }
22885 }
22886 else if (aiStyle == 39)
22887 {
22888 if (target < 0 || Main.player[target].dead || direction == 0)
22889 {
22890 TargetClosest();
22891 }
22892 bool flag28 = true;
22893 int num585 = 0;
22894 if (velocity.X < 0f)
22895 {
22896 num585 = -1;
22897 }
22898 if (velocity.X > 0f)
22899 {
22900 num585 = 1;
22901 }
22903 vector72.X += velocity.X;
22904 int num586 = (int)((vector72.X + (float)(width / 2) + (float)((width / 2 + 1) * num585)) / 16f);
22905 int num587 = (int)((vector72.Y + (float)height - 1f) / 16f);
22906 if ((float)(num586 * 16) < vector72.X + (float)width && (float)(num586 * 16 + 16) > vector72.X)
22907 {
22908 Tile tileSafely = Framing.GetTileSafely(num586, num587 - 4);
22909 Tile tileSafely2 = Framing.GetTileSafely(num586 - num585, num587 - 3);
22910 Tile tileSafely3 = Framing.GetTileSafely(num586, num587 - 3);
22911 Tile tileSafely4 = Framing.GetTileSafely(num586, num587 - 2);
22912 Tile tileSafely5 = Framing.GetTileSafely(num586, num587 - 1);
22913 Tile tileSafely6 = Framing.GetTileSafely(num586, num587);
22914 if (((tileSafely6.nactive() && !tileSafely6.topSlope() && !tileSafely5.topSlope() && ((Main.tileSolid[tileSafely6.type] && !Main.tileSolidTop[tileSafely6.type]) || (flag28 && Main.tileSolidTop[tileSafely6.type] && (!Main.tileSolid[tileSafely5.type] || !tileSafely5.nactive()) && tileSafely6.type != 16 && tileSafely6.type != 18 && tileSafely6.type != 134))) || (tileSafely5.halfBrick() && tileSafely5.nactive())) && (!tileSafely5.nactive() || !Main.tileSolid[tileSafely5.type] || Main.tileSolidTop[tileSafely5.type] || (tileSafely5.halfBrick() && (!tileSafely.nactive() || !Main.tileSolid[tileSafely.type] || Main.tileSolidTop[tileSafely.type]))) && (!tileSafely4.nactive() || !Main.tileSolid[tileSafely4.type] || Main.tileSolidTop[tileSafely4.type]) && (!tileSafely3.nactive() || !Main.tileSolid[tileSafely3.type] || Main.tileSolidTop[tileSafely3.type]) && (!tileSafely2.nactive() || !Main.tileSolid[tileSafely2.type] || Main.tileSolidTop[tileSafely2.type]))
22915 {
22916 float num588 = num587 * 16;
22917 if (tileSafely6.halfBrick())
22918 {
22919 num588 += 8f;
22920 }
22921 if (tileSafely5.halfBrick())
22922 {
22923 num588 -= 8f;
22924 }
22925 if (num588 < vector72.Y + (float)height)
22926 {
22927 float num589 = vector72.Y + (float)height - num588;
22928 if ((double)num589 <= 16.1)
22929 {
22930 gfxOffY += position.Y + (float)height - num588;
22931 position.Y = num588 - (float)height;
22932 if (num589 < 9f)
22933 {
22934 stepSpeed = 0.75f;
22935 }
22936 else
22937 {
22938 stepSpeed = 1.5f;
22939 }
22940 }
22941 }
22942 }
22943 }
22944 if (justHit && type != 417)
22945 {
22946 this.ai[0] = 0f;
22947 this.ai[1] = 0f;
22948 TargetClosest();
22949 }
22950 if (type == 154)
22951 {
22953 if (Main.rand.Next(10) == 0)
22954 {
22955 int num590 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 67, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 1.5f);
22956 Main.dust[num590].noGravity = true;
22957 Dust dust = Main.dust[num590];
22958 dust.velocity *= 0.2f;
22959 }
22961 }
22962 if (this.ai[0] == 0f)
22963 {
22964 if (velocity.X < 0f)
22965 {
22966 direction = -1;
22967 }
22968 else if (velocity.X > 0f)
22969 {
22970 direction = 1;
22971 }
22973 Vector2 vector73 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
22974 float num591 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector73.X;
22975 float num592 = Main.player[target].position.Y - vector73.Y;
22976 float num593 = (float)Math.Sqrt(num591 * num591 + num592 * num592);
22977 bool flag29 = Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height);
22978 if (type >= 496 && type <= 497)
22979 {
22980 if (num593 > 200f && flag29)
22981 {
22982 this.ai[1] += 2f;
22983 }
22984 if (num593 > 600f && (flag29 || position.Y + (float)height > Main.player[target].position.Y - 200f))
22985 {
22986 this.ai[1] += 4f;
22987 }
22988 }
22989 else
22990 {
22991 if (num593 > 200f && flag29)
22992 {
22993 this.ai[1] += 4f;
22994 }
22995 if (num593 > 600f && (flag29 || position.Y + (float)height > Main.player[target].position.Y - 200f))
22996 {
22997 this.ai[1] += 10f;
22998 }
22999 if (wet)
23000 {
23001 this.ai[1] = 1000f;
23002 }
23003 }
23005 damage = defDamage;
23006 if (type >= 496 && type <= 497)
23007 {
23008 knockBackResist = 0.75f * Main.GameModeInfo.KnockbackToEnemiesMultiplier;
23009 }
23010 else
23011 {
23012 knockBackResist = 0.3f * Main.GameModeInfo.KnockbackToEnemiesMultiplier;
23013 }
23014 this.ai[1] += 1f;
23015 if (this.ai[1] >= 400f)
23016 {
23017 this.ai[1] = 0f;
23018 this.ai[0] = 1f;
23019 }
23020 if (!justHit && velocity.X != oldVelocity.X)
23021 {
23022 direction *= -1;
23023 }
23024 if (velocity.Y == 0f && Main.player[target].position.Y < position.Y + (float)height)
23025 {
23026 int num594;
23027 int num595;
23028 if (direction > 0)
23029 {
23030 num594 = (int)(((double)position.X + (double)width * 0.5) / 16.0);
23031 num595 = num594 + 3;
23032 }
23033 else
23034 {
23035 num595 = (int)(((double)position.X + (double)width * 0.5) / 16.0);
23036 num594 = num595 - 3;
23037 }
23038 int num596 = (int)((position.Y + (float)height + 2f) / 16f) - 1;
23039 int num597 = num596 + 4;
23040 bool flag30 = false;
23041 for (int num598 = num594; num598 <= num595; num598++)
23042 {
23043 for (int num599 = num596; num599 <= num597; num599++)
23044 {
23045 if (Main.tile[num598, num599] != null && Main.tile[num598, num599].nactive() && Main.tileSolid[Main.tile[num598, num599].type])
23046 {
23047 flag30 = true;
23048 }
23049 }
23050 }
23051 if (!flag30)
23052 {
23053 direction *= -1;
23054 velocity.X = 0.1f * (float)direction;
23055 }
23056 }
23057 if (type >= 496 && type <= 497)
23058 {
23059 float num600 = 0.5f;
23060 if (velocity.X < 0f - num600 || velocity.X > num600)
23061 {
23062 if (velocity.Y == 0f)
23063 {
23064 velocity *= 0.8f;
23065 }
23066 }
23067 else if (velocity.X < num600 && direction == 1)
23068 {
23069 velocity.X += 0.07f;
23070 if (velocity.X > num600)
23071 {
23072 velocity.X = num600;
23073 }
23074 }
23075 else if (velocity.X > 0f - num600 && direction == -1)
23076 {
23077 velocity.X -= 0.07f;
23078 if (velocity.X < 0f - num600)
23079 {
23080 velocity.X = 0f - num600;
23081 }
23082 }
23083 return;
23084 }
23085 float num601 = 1f;
23086 if (num593 < 400f)
23087 {
23088 if (velocity.X < 0f - num601 || velocity.X > num601)
23089 {
23090 if (velocity.Y == 0f)
23091 {
23092 velocity *= 0.8f;
23093 }
23094 }
23095 else if (velocity.X < num601 && direction == 1)
23096 {
23097 velocity.X += 0.07f;
23098 if (velocity.X > num601)
23099 {
23100 velocity.X = num601;
23101 }
23102 }
23103 else if (velocity.X > 0f - num601 && direction == -1)
23104 {
23105 velocity.X -= 0.07f;
23106 if (velocity.X < 0f - num601)
23107 {
23108 velocity.X = 0f - num601;
23109 }
23110 }
23111 }
23112 else if (velocity.X < -1.5f || velocity.X > 1.5f)
23113 {
23114 if (velocity.Y == 0f)
23115 {
23116 velocity *= 0.8f;
23117 }
23118 }
23119 else if (velocity.X < 1.5f && direction == 1)
23120 {
23121 velocity.X += 0.07f;
23122 if (velocity.X > 1.5f)
23123 {
23124 velocity.X = 1.5f;
23125 }
23126 }
23127 else if (velocity.X > -1.5f && direction == -1)
23128 {
23129 velocity.X -= 0.07f;
23130 if (velocity.X < -1.5f)
23131 {
23132 velocity.X = -1.5f;
23133 }
23134 }
23135 }
23136 else if (this.ai[0] == 1f)
23137 {
23138 velocity.X *= 0.5f;
23139 if (type >= 496 && type <= 497)
23140 {
23141 this.ai[1] += 0.5f;
23142 }
23143 else
23144 {
23145 this.ai[1] += 1f;
23146 }
23147 if (this.ai[1] >= 30f)
23148 {
23149 netUpdate = true;
23150 TargetClosest();
23151 this.ai[1] = 0f;
23152 this.ai[2] = 0f;
23153 this.ai[0] = 3f;
23154 if (type == 417)
23155 {
23156 position.Y += height;
23157 height = 32;
23158 position.Y -= height;
23159 this.ai[0] = 6f;
23160 this.ai[2] = Main.rand.Next(2, 5);
23161 }
23162 }
23163 }
23164 else if (this.ai[0] == 3f)
23165 {
23166 if (type == 154 && Main.rand.Next(3) < 2)
23167 {
23169 int num602 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 67, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 1.5f);
23170 Main.dust[num602].noGravity = true;
23171 Dust dust = Main.dust[num602];
23172 dust.velocity *= 0.2f;
23174 }
23175 float num603 = 2f;
23176 if (type >= 496 && type <= 497)
23177 {
23178 num603 = 1.5f;
23179 }
23181 defense = defDefense * 2;
23182 this.ai[1] += 1f;
23183 if (this.ai[1] == 1f)
23184 {
23185 netUpdate = true;
23186 TargetClosest();
23187 this.ai[2] += 0.3f;
23188 rotation += this.ai[2] * (float)direction;
23189 this.ai[1] += 1f;
23190 bool flag31 = Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height);
23191 float num604 = 10f;
23192 if (!flag31)
23193 {
23194 num604 = 6f;
23195 }
23196 if (type >= 496 && type <= 497)
23197 {
23198 num604 *= 0.75f;
23199 }
23200 Vector2 vector74 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
23201 float num605 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector74.X;
23202 float num606 = Math.Abs(num605) * 0.2f;
23203 if (directionY > 0)
23204 {
23205 num606 = 0f;
23206 }
23207 float num607 = Main.player[target].position.Y - vector74.Y - num606;
23208 float num608 = (float)Math.Sqrt(num605 * num605 + num607 * num607);
23209 netUpdate = true;
23210 num608 = num604 / num608;
23211 num605 *= num608;
23212 num607 *= num608;
23213 if (!flag31)
23214 {
23215 num607 = -10f;
23216 }
23217 velocity.X = num605;
23218 velocity.Y = num607;
23219 this.ai[3] = velocity.X;
23220 }
23221 else
23222 {
23223 if (position.X + (float)width > Main.player[target].position.X && position.X < Main.player[target].position.X + (float)Main.player[target].width && position.Y < Main.player[target].position.Y + (float)Main.player[target].height)
23224 {
23225 velocity.X *= 0.8f;
23226 this.ai[3] = 0f;
23227 if (velocity.Y < 0f)
23228 {
23229 velocity.Y += 0.2f;
23230 }
23231 }
23232 if (this.ai[3] != 0f)
23233 {
23234 velocity.X = this.ai[3];
23235 velocity.Y -= 0.22f;
23236 }
23237 if (this.ai[1] >= 90f)
23238 {
23239 noGravity = false;
23240 this.ai[1] = 0f;
23241 this.ai[0] = 4f;
23242 }
23243 }
23244 if (wet && directionY < 0)
23245 {
23246 velocity.Y -= 0.3f;
23247 }
23248 rotation += this.ai[2] * (float)direction;
23249 }
23250 else if (this.ai[0] == 4f)
23251 {
23252 if (wet && directionY < 0)
23253 {
23254 velocity.Y -= 0.3f;
23255 }
23256 velocity.X *= 0.96f;
23257 if (this.ai[2] > 0f)
23258 {
23259 this.ai[2] -= 0.01f;
23260 rotation += this.ai[2] * (float)direction;
23261 }
23262 else if (velocity.Y >= 0f)
23263 {
23264 rotation = 0f;
23265 }
23266 if (this.ai[2] <= 0f && (velocity.Y == 0f || wet))
23267 {
23268 netUpdate = true;
23269 rotation = 0f;
23270 this.ai[2] = 0f;
23271 this.ai[1] = 0f;
23272 this.ai[0] = 5f;
23273 }
23274 }
23275 else if (this.ai[0] == 6f)
23276 {
23277 damage = GetAttackDamage_LerpBetweenFinalValues((float)defDamage * 1.8f, (float)defDamage * 1.4f);
23278 defense = defDefense * 2;
23279 knockBackResist = 0f;
23280 if (Main.rand.Next(3) < 2)
23281 {
23283 int num609 = Dust.NewDust(base.Center - new Vector2(30f), 60, 60, 6, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 1.5f);
23284 Main.dust[num609].noGravity = true;
23285 Dust dust = Main.dust[num609];
23286 dust.velocity *= 0.2f;
23287 Main.dust[num609].fadeIn = 1f;
23289 }
23290 this.ai[1] += 1f;
23291 if (this.ai[3] > 0f)
23292 {
23294 if (this.ai[3] == 1f)
23295 {
23296 Vector2 vector75 = base.Center - new Vector2(50f);
23297 for (int num610 = 0; num610 < 32; num610++)
23298 {
23299 int num611 = Dust.NewDust(vector75, 100, 100, 6, 0f, 0f, 100, default(Color), 2.5f);
23300 Main.dust[num611].noGravity = true;
23301 Dust dust = Main.dust[num611];
23302 dust.velocity *= 3f;
23303 num611 = Dust.NewDust(vector75, 100, 100, 6, 0f, 0f, 100, default(Color), 1.5f);
23304 dust = Main.dust[num611];
23305 dust.velocity *= 2f;
23306 Main.dust[num611].noGravity = true;
23307 }
23308 for (int num612 = 0; num612 < 4; num612++)
23309 {
23310 int num613 = Gore.NewGore(vector75 + new Vector2((float)(50 * Main.rand.Next(100)) / 100f, (float)(50 * Main.rand.Next(100)) / 100f) - Vector2.One * 10f, default(Vector2), Main.rand.Next(61, 64));
23311 Gore gore = Main.gore[num613];
23312 gore.velocity *= 0.3f;
23313 Main.gore[num613].velocity.X += (float)Main.rand.Next(-10, 11) * 0.05f;
23314 Main.gore[num613].velocity.Y += (float)Main.rand.Next(-10, 11) * 0.05f;
23315 }
23316 }
23317 for (int num614 = 0; num614 < 5; num614++)
23318 {
23319 int num615 = Dust.NewDust(position, width, height, 31, 0f, 0f, 100, default(Color), 1.5f);
23320 Main.dust[num615].velocity = Main.dust[num615].velocity * Main.rand.NextFloat();
23321 }
23322 this.ai[3]++;
23323 if (this.ai[3] >= 10f)
23324 {
23325 this.ai[3] = 0f;
23326 }
23328 }
23329 if (this.ai[1] == 1f)
23330 {
23331 netUpdate = true;
23332 TargetClosest();
23333 bool flag32 = Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height);
23334 float num616 = 16f;
23335 if (!flag32)
23336 {
23337 num616 = 10f;
23338 }
23339 Vector2 vector76 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
23340 float num617 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector76.X;
23341 float num618 = Math.Abs(num617) * 0.2f;
23342 if (directionY > 0)
23343 {
23344 num618 = 0f;
23345 }
23346 float num619 = Main.player[target].position.Y - vector76.Y - num618;
23347 float num620 = (float)Math.Sqrt(num617 * num617 + num619 * num619);
23348 netUpdate = true;
23349 num620 = num616 / num620;
23350 num617 *= num620;
23351 num619 *= num620;
23352 if (!flag32)
23353 {
23354 num619 = -12f;
23355 }
23356 velocity.X = num617;
23357 velocity.Y = num619;
23358 }
23359 else
23360 {
23361 if (position.X + (float)width > Main.player[target].position.X && position.X < Main.player[target].position.X + (float)Main.player[target].width && position.Y < Main.player[target].position.Y + (float)Main.player[target].height)
23362 {
23363 velocity.X *= 0.9f;
23364 if (velocity.Y < 0f)
23365 {
23366 velocity.Y += 0.2f;
23367 }
23368 }
23369 if (this.ai[2] == 0f || this.ai[1] >= 1200f)
23370 {
23371 this.ai[1] = 0f;
23372 this.ai[0] = 5f;
23373 }
23374 }
23375 if (wet && directionY < 0)
23376 {
23377 velocity.Y -= 0.3f;
23378 }
23379 rotation += MathHelper.Clamp(velocity.X / 10f * (float)direction, -(float)Math.PI / 10f, (float)Math.PI / 10f);
23380 }
23381 else if (this.ai[0] == 5f)
23382 {
23383 if (type == 417)
23384 {
23385 position.Y += height;
23386 height = 52;
23387 position.Y -= height;
23388 }
23389 rotation = 0f;
23390 velocity.X = 0f;
23391 if (type >= 496 && type <= 497)
23392 {
23393 this.ai[1] += 0.5f;
23394 }
23395 else
23396 {
23397 this.ai[1] += 1f;
23398 }
23399 if (this.ai[1] >= 30f)
23400 {
23401 TargetClosest();
23402 netUpdate = true;
23403 this.ai[1] = 0f;
23404 this.ai[0] = 0f;
23405 }
23406 if (wet)
23407 {
23408 this.ai[0] = 3f;
23409 this.ai[1] = 0f;
23410 }
23411 }
23412 }
23413 else if (aiStyle == 40)
23414 {
23415 if (target < 0 || target == 255 || Main.player[target].dead)
23416 {
23417 TargetClosest();
23418 }
23419 float num621 = 2f;
23420 float num622 = 0.08f;
23421 if (type == 237)
23422 {
23423 num621 = 3f;
23424 num622 = 0.12f;
23425 }
23426 if (type == 531)
23427 {
23428 num621 = 4f;
23429 num622 = 0.16f;
23430 }
23431 Vector2 vector77 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
23432 float num623 = Main.player[target].position.X + (float)(Main.player[target].width / 2);
23433 float num624 = Main.player[target].position.Y + (float)(Main.player[target].height / 2);
23434 num623 = (int)(num623 / 8f) * 8;
23435 num624 = (int)(num624 / 8f) * 8;
23436 vector77.X = (int)(vector77.X / 8f) * 8;
23437 vector77.Y = (int)(vector77.Y / 8f) * 8;
23438 num623 -= vector77.X;
23439 num624 -= vector77.Y;
23440 if (confused)
23441 {
23442 num623 *= -2f;
23443 num624 *= -2f;
23444 }
23445 float num625 = (float)Math.Sqrt(num623 * num623 + num624 * num624);
23446 float num626 = num625;
23447 if (num625 == 0f)
23448 {
23449 num623 = velocity.X;
23450 num624 = velocity.Y;
23451 }
23452 else
23453 {
23454 num625 = num621 / num625;
23455 num623 *= num625;
23456 num624 *= num625;
23457 }
23458 if (Main.player[target].dead)
23459 {
23460 num623 = (float)direction * num621 / 2f;
23461 num624 = (0f - num621) / 2f;
23462 }
23463 spriteDirection = -1;
23464 if (!Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
23465 {
23466 this.ai[0] += 1f;
23467 if (this.ai[0] > 0f)
23468 {
23469 velocity.Y += 0.023f;
23470 }
23471 else
23472 {
23473 velocity.Y -= 0.023f;
23474 }
23475 if (this.ai[0] < -100f || this.ai[0] > 100f)
23476 {
23477 velocity.X += 0.023f;
23478 }
23479 else
23480 {
23481 velocity.X -= 0.023f;
23482 }
23483 if (this.ai[0] > 200f)
23484 {
23485 this.ai[0] = -200f;
23486 }
23487 velocity.X += num623 * 0.007f;
23488 velocity.Y += num624 * 0.007f;
23489 rotation = (float)Math.Atan2(velocity.Y, velocity.X);
23490 if ((double)velocity.X > 1.5)
23491 {
23492 velocity.X *= 0.9f;
23493 }
23494 if ((double)velocity.X < -1.5)
23495 {
23496 velocity.X *= 0.9f;
23497 }
23498 if ((double)velocity.Y > 1.5)
23499 {
23500 velocity.Y *= 0.9f;
23501 }
23502 if ((double)velocity.Y < -1.5)
23503 {
23504 velocity.Y *= 0.9f;
23505 }
23506 if (velocity.X > 3f)
23507 {
23508 velocity.X = 3f;
23509 }
23510 if (velocity.X < -3f)
23511 {
23512 velocity.X = -3f;
23513 }
23514 if (velocity.Y > 3f)
23515 {
23516 velocity.Y = 3f;
23517 }
23518 if (velocity.Y < -3f)
23519 {
23520 velocity.Y = -3f;
23521 }
23522 }
23523 else
23524 {
23525 if (velocity.X < num623)
23526 {
23527 velocity.X += num622;
23528 if (velocity.X < 0f && num623 > 0f)
23529 {
23530 velocity.X += num622;
23531 }
23532 }
23533 else if (velocity.X > num623)
23534 {
23535 velocity.X -= num622;
23536 if (velocity.X > 0f && num623 < 0f)
23537 {
23538 velocity.X -= num622;
23539 }
23540 }
23541 if (velocity.Y < num624)
23542 {
23543 velocity.Y += num622;
23544 if (velocity.Y < 0f && num624 > 0f)
23545 {
23546 velocity.Y += num622;
23547 }
23548 }
23549 else if (velocity.Y > num624)
23550 {
23551 velocity.Y -= num622;
23552 if (velocity.Y > 0f && num624 < 0f)
23553 {
23554 velocity.Y -= num622;
23555 }
23556 }
23557 rotation = (float)Math.Atan2(num624, num623);
23558 }
23559 if (type == 531)
23560 {
23561 rotation += (float)Math.PI / 2f;
23562 }
23563 float num627 = 0.5f;
23564 if (collideX)
23565 {
23566 netUpdate = true;
23567 velocity.X = oldVelocity.X * (0f - num627);
23568 if (direction == -1 && velocity.X > 0f && velocity.X < 2f)
23569 {
23570 velocity.X = 2f;
23571 }
23572 if (direction == 1 && velocity.X < 0f && velocity.X > -2f)
23573 {
23574 velocity.X = -2f;
23575 }
23576 }
23577 if (collideY)
23578 {
23579 netUpdate = true;
23580 velocity.Y = oldVelocity.Y * (0f - num627);
23581 if (velocity.Y > 0f && (double)velocity.Y < 1.5)
23582 {
23583 velocity.Y = 2f;
23584 }
23585 if (velocity.Y < 0f && (double)velocity.Y > -1.5)
23586 {
23587 velocity.Y = -2f;
23588 }
23589 }
23590 if (((velocity.X > 0f && oldVelocity.X < 0f) || (velocity.X < 0f && oldVelocity.X > 0f) || (velocity.Y > 0f && oldVelocity.Y < 0f) || (velocity.Y < 0f && oldVelocity.Y > 0f)) && !justHit)
23591 {
23592 netUpdate = true;
23593 }
23594 if (Main.netMode == 1)
23595 {
23596 return;
23597 }
23598 if (Main.netMode != 1 && Main.expertMode && target >= 0 && (type == 163 || type == 238 || type == 236 || type == 237) && Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
23599 {
23600 localAI[0] += 1f;
23601 if (justHit)
23602 {
23603 localAI[0] -= Main.rand.Next(20, 60);
23604 if (localAI[0] < 0f)
23605 {
23606 localAI[0] = 0f;
23607 }
23608 }
23609 if (localAI[0] > (float)Main.rand.Next(180, 900))
23610 {
23611 localAI[0] = 0f;
23612 Vector2 vector78 = Main.player[target].Center - base.Center;
23613 vector78.Normalize();
23614 vector78 *= 8f;
23616 int num628 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector78.X, vector78.Y, 472, attackDamage_ForProjectiles8, 0f, Main.myPlayer);
23617 }
23618 }
23619 if (!NPCCanStickToWalls())
23620 {
23621 int newType = type;
23622 switch (type)
23623 {
23624 case 165:
23625 newType = 164;
23626 break;
23627 case 237:
23628 newType = 236;
23629 break;
23630 case 238:
23631 newType = 163;
23632 break;
23633 case 240:
23634 newType = 239;
23635 break;
23636 case 531:
23637 newType = 530;
23638 break;
23639 }
23641 }
23642 }
23643 else if (aiStyle == 41)
23644 {
23645 if (this.ai[2] > 1f)
23646 {
23647 this.ai[2] -= 1f;
23648 }
23649 if (this.ai[2] == 0f)
23650 {
23651 this.ai[0] = -100f;
23652 this.ai[2] = 1f;
23653 TargetClosest();
23655 }
23656 if (type == 378)
23657 {
23658 Vector2 vector79 = new Vector2(-6f, -10f);
23659 vector79.X *= spriteDirection;
23660 if (this.ai[1] != 5f && Main.rand.Next(3) == 0)
23661 {
23663 int num629 = Dust.NewDust(base.Center + vector79 - Vector2.One * 5f, 4, 4, 6);
23664 Main.dust[num629].scale = 1.5f;
23665 Main.dust[num629].noGravity = true;
23666 Main.dust[num629].velocity = Main.dust[num629].velocity * 0.25f + Vector2.Normalize(vector79) * 1f;
23667 Main.dust[num629].velocity = Main.dust[num629].velocity.RotatedBy(-(float)Math.PI / 2f * (float)direction);
23669 }
23670 if (this.ai[1] == 5f)
23671 {
23673 position.X += width / 2;
23674 position.Y += height / 2;
23675 width = 160;
23676 height = 160;
23677 position.X -= width / 2;
23678 position.Y -= height / 2;
23679 dontTakeDamage = true;
23681 if (this.ai[2] > 7f)
23682 {
23683 for (int num630 = 0; num630 < 8; num630++)
23684 {
23685 int num631 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 31, 0f, 0f, 100, default(Color), 1.5f);
23686 }
23687 for (int num632 = 0; num632 < 32; num632++)
23688 {
23689 int num633 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 6, 0f, 0f, 100, default(Color), 2.5f);
23690 Main.dust[num633].noGravity = true;
23691 Dust dust = Main.dust[num633];
23692 dust.velocity *= 3f;
23693 num633 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 6, 0f, 0f, 100, default(Color), 1.5f);
23694 dust = Main.dust[num633];
23695 dust.velocity *= 2f;
23696 Main.dust[num633].noGravity = true;
23697 }
23698 for (int num634 = 0; num634 < 2; num634++)
23699 {
23700 int num635 = Gore.NewGore(position + new Vector2((float)(width * Main.rand.Next(100)) / 100f, (float)(height * Main.rand.Next(100)) / 100f) - Vector2.One * 10f, default(Vector2), Main.rand.Next(61, 64));
23701 Gore gore = Main.gore[num635];
23702 gore.velocity *= 0.3f;
23703 Main.gore[num635].velocity.X += (float)Main.rand.Next(-10, 11) * 0.05f;
23704 Main.gore[num635].velocity.Y += (float)Main.rand.Next(-10, 11) * 0.05f;
23705 }
23706 if (this.ai[2] == 9f)
23707 {
23709 }
23710 }
23711 if (this.ai[2] == 1f)
23712 {
23713 life = -1;
23714 HitEffect();
23715 active = false;
23716 }
23718 return;
23719 }
23720 }
23721 if (type == 378 && this.ai[1] != 5f)
23722 {
23723 if (wet || Vector2.Distance(base.Center, Main.player[target].Center) < 64f)
23724 {
23725 this.ai[1] = 5f;
23726 this.ai[2] = 10f;
23727 netUpdate = true;
23728 return;
23729 }
23730 }
23731 else if (wet && type != 177)
23732 {
23733 if (collideX)
23734 {
23735 direction *= -direction;
23737 }
23738 if (collideY)
23739 {
23740 TargetClosest();
23741 if (oldVelocity.Y < 0f)
23742 {
23743 velocity.Y = 5f;
23744 }
23745 else
23746 {
23747 velocity.Y -= 2f;
23748 }
23750 }
23751 if (velocity.Y > 4f)
23752 {
23753 velocity.Y *= 0.95f;
23754 }
23755 velocity.Y -= 0.3f;
23756 if (velocity.Y < -4f)
23757 {
23758 velocity.Y = -4f;
23759 }
23760 }
23761 if (velocity.Y == 0f)
23762 {
23763 if (this.ai[3] == position.X)
23764 {
23765 direction *= -1;
23766 this.ai[2] = 300f;
23767 }
23768 this.ai[3] = 0f;
23769 velocity.X *= 0.8f;
23770 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
23771 {
23772 velocity.X = 0f;
23773 }
23774 if (type == 177)
23775 {
23776 this.ai[0] += 2f;
23777 }
23778 else
23779 {
23780 this.ai[0] += 5f;
23781 }
23782 Vector2 vector80 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
23783 float num636 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector80.X;
23784 float num637 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector80.Y;
23785 float num638 = (float)Math.Sqrt(num636 * num636 + num637 * num637);
23786 float num639 = 400f / num638;
23787 num639 = ((type != 177) ? (num639 * 10f) : (num639 * 5f));
23788 if (num639 > 30f)
23789 {
23790 num639 = 30f;
23791 }
23792 this.ai[0] += (int)num639;
23793 if (this.ai[0] >= 0f)
23794 {
23795 netUpdate = true;
23796 if (this.ai[2] == 1f)
23797 {
23798 TargetClosest();
23799 }
23800 if (type == 177)
23801 {
23802 if (this.ai[1] == 2f)
23803 {
23804 velocity.Y = -11.5f;
23805 velocity.X += 2f * (float)direction;
23807 {
23808 velocity.X += direction;
23809 }
23810 this.ai[0] = -200f;
23811 this.ai[1] = 0f;
23812 this.ai[3] = position.X;
23813 }
23814 else
23815 {
23816 velocity.Y = -7.5f;
23817 velocity.X += 4 * direction;
23819 {
23820 velocity.X += direction;
23821 }
23822 this.ai[0] = -120f;
23823 this.ai[1] += 1f;
23824 }
23825 }
23826 else
23827 {
23828 if (type == 378)
23829 {
23830 SoundEngine.PlaySound(29, (int)position.X, (int)position.Y, 124);
23831 }
23832 if (this.ai[1] == 3f)
23833 {
23834 velocity.Y = -9f;
23835 velocity.X += 3 * direction;
23837 {
23838 velocity.X += direction;
23839 }
23840 this.ai[0] = -200f;
23841 this.ai[1] = 0f;
23842 this.ai[3] = position.X;
23843 }
23844 else
23845 {
23846 velocity.Y = -5f;
23847 velocity.X += 5 * direction;
23849 {
23850 velocity.X += direction;
23851 }
23852 this.ai[0] = -120f;
23853 this.ai[1] += 1f;
23854 }
23855 }
23856 }
23857 else if (this.ai[0] >= -30f)
23858 {
23859 aiAction = 1;
23860 }
23862 }
23863 else
23864 {
23865 if (target >= 255)
23866 {
23867 return;
23868 }
23869 if (type == 177)
23870 {
23871 bool flag33 = false;
23872 if (position.Y + (float)height < Main.player[target].position.Y && position.X + (float)width > Main.player[target].position.X && position.X < Main.player[target].position.X + (float)Main.player[target].width)
23873 {
23874 flag33 = true;
23875 velocity.X *= 0.92f;
23876 if (velocity.Y < 0f)
23877 {
23878 velocity.Y *= 0.9f;
23879 velocity.Y += 0.1f;
23880 }
23881 }
23882 if (!flag33 && ((direction == 1 && velocity.X < 4f) || (direction == -1 && velocity.X > -4f)))
23883 {
23884 if ((direction == -1 && (double)velocity.X < 0.1) || (direction == 1 && (double)velocity.X > -0.1))
23885 {
23886 velocity.X += 0.2f * (float)direction;
23887 }
23888 else
23889 {
23890 velocity.X *= 0.93f;
23891 }
23892 }
23893 }
23894 else if ((direction == 1 && velocity.X < 3f) || (direction == -1 && velocity.X > -3f))
23895 {
23896 if ((direction == -1 && (double)velocity.X < 0.1) || (direction == 1 && (double)velocity.X > -0.1))
23897 {
23898 velocity.X += 0.2f * (float)direction;
23899 }
23900 else
23901 {
23902 velocity.X *= 0.93f;
23903 }
23904 }
23905 }
23906 }
23907 else if (aiStyle == 42)
23908 {
23909 TargetClosest();
23910 if (this.ai[0] == 0f)
23911 {
23912 if (target >= 0)
23913 {
23914 Vector2 vector81 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
23915 float num640 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector81.X;
23916 float num641 = Main.player[target].position.Y - vector81.Y;
23917 float num642 = (float)Math.Sqrt(num640 * num640 + num641 * num641);
23918 if (num642 < 200f && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
23919 {
23920 this.ai[0] = 1f;
23921 }
23922 }
23923 if (velocity.X != 0f || velocity.Y < 0f || velocity.Y > 2f || life != lifeMax)
23924 {
23925 this.ai[0] = 1f;
23926 }
23927 }
23928 else
23929 {
23930 this.ai[0] += 1f;
23931 if (this.ai[0] >= 21f)
23932 {
23933 this.ai[0] = 21f;
23934 Transform(196);
23935 }
23936 }
23937 }
23938 else if (aiStyle == 43)
23939 {
23940 if (Main.expertMode)
23941 {
23942 int num643 = (int)(20f * (1f - (float)life / (float)lifeMax));
23944 }
23945 if (target < 0 || target == 255 || Main.player[target].dead || !Main.player[target].active)
23946 {
23947 TargetClosest();
23948 }
23949 bool dead4 = Main.player[target].dead;
23950 float num644 = 0f;
23951 if ((double)(position.Y / 16f) < Main.worldSurface)
23952 {
23953 num644 += 1f;
23954 }
23955 if (!Main.player[target].ZoneJungle)
23956 {
23957 num644 += 1f;
23958 }
23959 if (Main.getGoodWorld)
23960 {
23961 num644 += 0.5f;
23962 }
23963 float num645 = Vector2.Distance(base.Center, Main.player[target].Center);
23964 if (this.ai[0] != 5f)
23965 {
23966 if (timeLeft < 60)
23967 {
23968 timeLeft = 60;
23969 }
23970 if (num645 > 3000f)
23971 {
23972 this.ai[0] = 4f;
23973 netUpdate = true;
23974 }
23975 }
23976 if (dead4)
23977 {
23978 this.ai[0] = 5f;
23979 netUpdate = true;
23980 }
23981 if (this.ai[0] == 5f)
23982 {
23983 velocity.Y *= 0.98f;
23984 if (velocity.X < 0f)
23985 {
23986 direction = -1;
23987 }
23988 else
23989 {
23990 direction = 1;
23991 }
23993 if (position.X < (float)(Main.maxTilesX * 8))
23994 {
23995 if (velocity.X > 0f)
23996 {
23997 velocity.X *= 0.98f;
23998 }
23999 else
24000 {
24001 localAI[0] = 1f;
24002 }
24003 velocity.X -= 0.08f;
24004 }
24005 else
24006 {
24007 if (velocity.X < 0f)
24008 {
24009 velocity.X *= 0.98f;
24010 }
24011 else
24012 {
24013 localAI[0] = 1f;
24014 }
24015 velocity.X += 0.08f;
24016 }
24017 EncourageDespawn(10);
24018 }
24019 else if (this.ai[0] == -1f)
24020 {
24021 if (Main.netMode == 1)
24022 {
24023 return;
24024 }
24025 float num646 = this.ai[1];
24026 int num647;
24027 do
24028 {
24029 num647 = Main.rand.Next(3);
24030 switch (num647)
24031 {
24032 case 1:
24033 num647 = 2;
24034 break;
24035 case 2:
24036 num647 = 3;
24037 break;
24038 }
24039 }
24040 while ((float)num647 == num646);
24041 this.ai[0] = num647;
24042 this.ai[1] = 0f;
24043 this.ai[2] = 0f;
24044 netUpdate = true;
24045 }
24046 else if (this.ai[0] == 0f)
24047 {
24048 int num648 = 2;
24049 if (Main.expertMode)
24050 {
24051 if (life < lifeMax / 2)
24052 {
24053 num648++;
24054 }
24055 if (life < lifeMax / 3)
24056 {
24057 num648++;
24058 }
24059 if (life < lifeMax / 5)
24060 {
24061 num648++;
24062 }
24063 }
24064 num648 += (int)(1f * num644);
24065 if (this.ai[1] > (float)(2 * num648) && this.ai[1] % 2f == 0f)
24066 {
24067 this.ai[0] = -1f;
24068 this.ai[1] = 0f;
24069 this.ai[2] = 0f;
24070 netUpdate = true;
24071 return;
24072 }
24073 if (this.ai[1] % 2f == 0f)
24074 {
24075 TargetClosest();
24076 float num649 = 20f;
24077 num649 += 20f * num644;
24078 if (Math.Abs(base.Center.Y - Main.player[target].Center.Y) < num649)
24079 {
24080 localAI[0] = 1f;
24081 this.ai[1] += 1f;
24082 this.ai[2] = 0f;
24083 netUpdate = true;
24084 float num650 = 12f;
24085 if (Main.expertMode)
24086 {
24087 num650 = 16f;
24088 if ((double)life < (double)lifeMax * 0.75)
24089 {
24090 num650 += 2f;
24091 }
24092 if ((double)life < (double)lifeMax * 0.5)
24093 {
24094 num650 += 2f;
24095 }
24096 if ((double)life < (double)lifeMax * 0.25)
24097 {
24098 num650 += 2f;
24099 }
24100 if ((double)life < (double)lifeMax * 0.1)
24101 {
24102 num650 += 2f;
24103 }
24104 }
24105 num650 += 7f * num644;
24106 Vector2 vector82 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
24107 float num651 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector82.X;
24108 float num652 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector82.Y;
24109 float num653 = (float)Math.Sqrt(num651 * num651 + num652 * num652);
24110 num653 = num650 / num653;
24111 velocity.X = num651 * num653;
24112 velocity.Y = num652 * num653;
24114 SoundEngine.PlaySound(29, (int)position.X, (int)position.Y, 125);
24115 return;
24116 }
24117 localAI[0] = 0f;
24118 float num654 = 12f;
24119 float num655 = 0.15f;
24120 if (Main.expertMode)
24121 {
24122 if ((double)life < (double)lifeMax * 0.75)
24123 {
24124 num654 += 1f;
24125 num655 += 0.05f;
24126 }
24127 if ((double)life < (double)lifeMax * 0.5)
24128 {
24129 num654 += 1f;
24130 num655 += 0.05f;
24131 }
24132 if ((double)life < (double)lifeMax * 0.25)
24133 {
24134 num654 += 2f;
24135 num655 += 0.05f;
24136 }
24137 if ((double)life < (double)lifeMax * 0.1)
24138 {
24139 num654 += 2f;
24140 num655 += 0.1f;
24141 }
24142 }
24143 num654 += 3f * num644;
24144 num655 += 0.5f * num644;
24145 if (position.Y + (float)(height / 2) < Main.player[target].position.Y + (float)(Main.player[target].height / 2))
24146 {
24147 velocity.Y += num655;
24148 }
24149 else
24150 {
24151 velocity.Y -= num655;
24152 }
24153 if (velocity.Y < 0f - num654)
24154 {
24155 velocity.Y = 0f - num654;
24156 }
24157 if (velocity.Y > num654)
24158 {
24159 velocity.Y = num654;
24160 }
24161 if (Math.Abs(position.X + (float)(width / 2) - (Main.player[target].position.X + (float)(Main.player[target].width / 2))) > 600f)
24162 {
24163 velocity.X += 0.15f * (float)direction;
24164 }
24165 else if (Math.Abs(position.X + (float)(width / 2) - (Main.player[target].position.X + (float)(Main.player[target].width / 2))) < 300f)
24166 {
24167 velocity.X -= 0.15f * (float)direction;
24168 }
24169 else
24170 {
24171 velocity.X *= 0.8f;
24172 }
24173 if (velocity.X < -16f)
24174 {
24175 velocity.X = -16f;
24176 }
24177 if (velocity.X > 16f)
24178 {
24179 velocity.X = 16f;
24180 }
24182 return;
24183 }
24184 if (velocity.X < 0f)
24185 {
24186 direction = -1;
24187 }
24188 else
24189 {
24190 direction = 1;
24191 }
24193 int num656 = 600;
24194 if (Main.expertMode)
24195 {
24196 if ((double)life < (double)lifeMax * 0.1)
24197 {
24198 num656 = 300;
24199 }
24200 else if ((double)life < (double)lifeMax * 0.25)
24201 {
24202 num656 = 450;
24203 }
24204 else if ((double)life < (double)lifeMax * 0.5)
24205 {
24206 num656 = 500;
24207 }
24208 else if ((double)life < (double)lifeMax * 0.75)
24209 {
24210 num656 = 550;
24211 }
24212 }
24213 int num657 = 1;
24214 if (position.X + (float)(width / 2) < Main.player[target].position.X + (float)(Main.player[target].width / 2))
24215 {
24216 num657 = -1;
24217 }
24218 num656 -= (int)(100f * num644);
24219 bool flag34 = false;
24220 if (direction == num657 && Math.Abs(base.Center.X - Main.player[target].Center.X) > (float)num656)
24221 {
24222 this.ai[2] = 1f;
24223 flag34 = true;
24224 }
24225 if (Math.Abs(base.Center.Y - Main.player[target].Center.Y) > (float)num656 * 1.5f)
24226 {
24227 this.ai[2] = 1f;
24228 flag34 = true;
24229 }
24230 if (num644 > 0f && flag34)
24231 {
24232 velocity *= 0.5f;
24233 }
24234 if (this.ai[2] == 1f)
24235 {
24236 TargetClosest();
24238 localAI[0] = 0f;
24239 velocity *= 0.9f;
24240 float num658 = 0.1f;
24241 if (Main.expertMode)
24242 {
24243 if (life < lifeMax / 2)
24244 {
24245 velocity *= 0.9f;
24246 num658 += 0.05f;
24247 }
24248 if (life < lifeMax / 3)
24249 {
24250 velocity *= 0.9f;
24251 num658 += 0.05f;
24252 }
24253 if (life < lifeMax / 5)
24254 {
24255 velocity *= 0.9f;
24256 num658 += 0.05f;
24257 }
24258 }
24259 if (num644 > 0f)
24260 {
24261 velocity *= 0.7f;
24262 }
24264 {
24265 this.ai[2] = 0f;
24266 this.ai[1] += 1f;
24267 netUpdate = true;
24268 }
24269 }
24270 else
24271 {
24272 localAI[0] = 1f;
24273 }
24274 }
24275 else if (this.ai[0] == 2f)
24276 {
24277 TargetClosest();
24279 float num659 = 12f;
24280 float num660 = 0.07f;
24281 if (Main.expertMode)
24282 {
24283 num660 = 0.1f;
24284 }
24285 Vector2 vector83 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
24286 float num661 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector83.X;
24287 float num662 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 200f - vector83.Y;
24288 float num663 = (float)Math.Sqrt(num661 * num661 + num662 * num662);
24289 if (num663 < 200f)
24290 {
24291 this.ai[0] = 1f;
24292 this.ai[1] = 0f;
24293 netUpdate = true;
24294 return;
24295 }
24296 num663 = num659 / num663;
24297 if (velocity.X < num661)
24298 {
24299 velocity.X += num660;
24300 if (velocity.X < 0f && num661 > 0f)
24301 {
24302 velocity.X += num660;
24303 }
24304 }
24305 else if (velocity.X > num661)
24306 {
24307 velocity.X -= num660;
24308 if (velocity.X > 0f && num661 < 0f)
24309 {
24310 velocity.X -= num660;
24311 }
24312 }
24313 if (velocity.Y < num662)
24314 {
24315 velocity.Y += num660;
24316 if (velocity.Y < 0f && num662 > 0f)
24317 {
24318 velocity.Y += num660;
24319 }
24320 }
24321 else if (velocity.Y > num662)
24322 {
24323 velocity.Y -= num660;
24324 if (velocity.Y > 0f && num662 < 0f)
24325 {
24326 velocity.Y -= num660;
24327 }
24328 }
24329 }
24330 else if (this.ai[0] == 1f)
24331 {
24332 localAI[0] = 0f;
24333 TargetClosest();
24334 Vector2 vector84 = new Vector2(position.X + (float)(width / 2) + (float)(Main.rand.Next(20) * direction), position.Y + (float)height * 0.8f);
24335 Vector2 vector85 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
24336 float num664 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector85.X;
24337 float num665 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector85.Y;
24338 float num666 = (float)Math.Sqrt(num664 * num664 + num665 * num665);
24339 this.ai[1] += 1f;
24340 if (Main.expertMode)
24341 {
24342 int num667 = 0;
24343 for (int num668 = 0; num668 < 255; num668++)
24344 {
24345 if (Main.player[num668].active && !Main.player[num668].dead && (base.Center - Main.player[num668].Center).Length() < 1000f)
24346 {
24347 num667++;
24348 }
24349 }
24350 this.ai[1] += num667 / 2;
24351 if ((double)life < (double)lifeMax * 0.75)
24352 {
24353 this.ai[1] += 0.25f;
24354 }
24355 if ((double)life < (double)lifeMax * 0.5)
24356 {
24357 this.ai[1] += 0.25f;
24358 }
24359 if ((double)life < (double)lifeMax * 0.25)
24360 {
24361 this.ai[1] += 0.25f;
24362 }
24363 if ((double)life < (double)lifeMax * 0.1)
24364 {
24365 this.ai[1] += 0.25f;
24366 }
24367 }
24368 bool flag35 = false;
24369 int num669 = (int)(40f - 18f * num644);
24370 if (this.ai[1] > (float)num669)
24371 {
24372 this.ai[1] = 0f;
24373 this.ai[2]++;
24374 flag35 = true;
24375 }
24376 if (Collision.CanHit(vector84, 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height) && flag35)
24377 {
24378 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y);
24379 if (Main.netMode != 1)
24380 {
24381 int num670 = Main.rand.Next(210, 212);
24383 Main.npc[num671].velocity = Main.player[target].Center - base.Center;
24384 Main.npc[num671].velocity.Normalize();
24385 NPC nPC3 = Main.npc[num671];
24386 nPC3.velocity *= 5f;
24387 Main.npc[num671].CanBeReplacedByOtherNPCs = true;
24388 Main.npc[num671].localAI[0] = 60f;
24389 Main.npc[num671].netUpdate = true;
24390 }
24391 }
24392 if (num666 > 400f || !Collision.CanHit(new Vector2(vector84.X, vector84.Y - 30f), 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height))
24393 {
24394 float num672 = 14f;
24395 float num673 = 0.1f;
24397 num664 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector85.X;
24398 num665 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector85.Y;
24399 num666 = (float)Math.Sqrt(num664 * num664 + num665 * num665);
24400 num666 = num672 / num666;
24401 if (velocity.X < num664)
24402 {
24403 velocity.X += num673;
24404 if (velocity.X < 0f && num664 > 0f)
24405 {
24406 velocity.X += num673;
24407 }
24408 }
24409 else if (velocity.X > num664)
24410 {
24411 velocity.X -= num673;
24412 if (velocity.X > 0f && num664 < 0f)
24413 {
24414 velocity.X -= num673;
24415 }
24416 }
24417 if (velocity.Y < num665)
24418 {
24419 velocity.Y += num673;
24420 if (velocity.Y < 0f && num665 > 0f)
24421 {
24422 velocity.Y += num673;
24423 }
24424 }
24425 else if (velocity.Y > num665)
24426 {
24427 velocity.Y -= num673;
24428 if (velocity.Y > 0f && num665 < 0f)
24429 {
24430 velocity.Y -= num673;
24431 }
24432 }
24433 }
24434 else
24435 {
24436 velocity *= 0.9f;
24437 }
24439 if (this.ai[2] > 5f)
24440 {
24441 this.ai[0] = -1f;
24442 this.ai[1] = 1f;
24443 netUpdate = true;
24444 }
24445 }
24446 else if (this.ai[0] == 3f)
24447 {
24448 float num674 = 4f;
24449 float num675 = 0.05f;
24450 if (Main.expertMode)
24451 {
24452 num675 = 0.075f;
24453 num674 = 6f;
24454 }
24455 num675 += 0.2f * num644;
24456 num674 += 6f * num644;
24457 Vector2 vector86 = new Vector2(position.X + (float)(width / 2) + (float)(Main.rand.Next(20) * direction), position.Y + (float)height * 0.8f);
24458 Vector2 vector87 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
24459 float num676 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector87.X;
24460 float num677 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 300f - vector87.Y;
24461 float num678 = (float)Math.Sqrt(num676 * num676 + num677 * num677);
24462 this.ai[1] += 1f;
24463 bool flag36 = false;
24464 int num679 = 40;
24465 if (Main.expertMode)
24466 {
24467 num679 = (((double)life < (double)lifeMax * 0.1) ? 15 : ((life < lifeMax / 3) ? 25 : ((life >= lifeMax / 2) ? 35 : 30)));
24468 }
24469 num679 -= (int)(5f * num644);
24470 if (this.ai[1] % (float)num679 == (float)(num679 - 1) && position.Y + (float)height < Main.player[target].position.Y && Collision.CanHit(vector86, 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height))
24471 {
24473 if (Main.netMode != 1)
24474 {
24475 float num680 = 8f;
24476 if (Main.expertMode)
24477 {
24478 num680 += 2f;
24479 }
24480 if (Main.expertMode && (double)life < (double)lifeMax * 0.1)
24481 {
24482 num680 += 3f;
24483 }
24484 num680 += 7f * num644;
24485 int num681 = (int)(80f - 39f * num644);
24486 int num682 = (int)(40f - 19f * num644);
24487 if (num681 < 1)
24488 {
24489 num681 = 1;
24490 }
24491 if (num682 < 1)
24492 {
24493 num682 = 1;
24494 }
24495 float num683 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector86.X + (float)Main.rand.Next(-num681, num681 + 1);
24496 float num684 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector86.Y + (float)Main.rand.Next(-num682, num682 + 1);
24497 float num685 = (float)Math.Sqrt(num683 * num683 + num684 * num684);
24498 num685 = num680 / num685;
24499 num683 *= num685;
24500 num684 *= num685;
24501 int num686 = 11;
24502 int num687 = 719;
24503 int num688 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector86.X, vector86.Y, num683, num684, num687, num686, 0f, Main.myPlayer);
24504 Main.projectile[num688].timeLeft = 300;
24505 }
24506 }
24507 if (!Collision.CanHit(new Vector2(vector86.X, vector86.Y - 30f), 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height))
24508 {
24509 num674 = 14f;
24510 num675 = 0.1f;
24511 if (num644 > 0f)
24512 {
24513 num675 = 0.5f;
24514 }
24516 num676 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector87.X;
24517 num677 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector87.Y;
24518 num678 = (float)Math.Sqrt(num676 * num676 + num677 * num677);
24519 num678 = num674 / num678;
24520 if (velocity.X < num676)
24521 {
24522 velocity.X += num675;
24523 if (velocity.X < 0f && num676 > 0f)
24524 {
24525 velocity.X += num675;
24526 }
24527 }
24528 else if (velocity.X > num676)
24529 {
24530 velocity.X -= num675;
24531 if (velocity.X > 0f && num676 < 0f)
24532 {
24533 velocity.X -= num675;
24534 }
24535 }
24536 if (velocity.Y < num677)
24537 {
24538 velocity.Y += num675;
24539 if (velocity.Y < 0f && num677 > 0f)
24540 {
24541 velocity.Y += num675;
24542 }
24543 }
24544 else if (velocity.Y > num677)
24545 {
24546 velocity.Y -= num675;
24547 if (velocity.Y > 0f && num677 < 0f)
24548 {
24549 velocity.Y -= num675;
24550 }
24551 }
24552 }
24553 else if (num678 > 100f)
24554 {
24555 TargetClosest();
24557 num678 = num674 / num678;
24558 if (velocity.X < num676)
24559 {
24560 velocity.X += num675;
24561 if (velocity.X < 0f && num676 > 0f)
24562 {
24563 velocity.X += num675 * 2f;
24564 }
24565 }
24566 else if (velocity.X > num676)
24567 {
24568 velocity.X -= num675;
24569 if (velocity.X > 0f && num676 < 0f)
24570 {
24571 velocity.X -= num675 * 2f;
24572 }
24573 }
24574 if (velocity.Y < num677)
24575 {
24576 velocity.Y += num675;
24577 if (velocity.Y < 0f && num677 > 0f)
24578 {
24579 velocity.Y += num675 * 2f;
24580 }
24581 }
24582 else if (velocity.Y > num677)
24583 {
24584 velocity.Y -= num675;
24585 if (velocity.Y > 0f && num677 < 0f)
24586 {
24587 velocity.Y -= num675 * 2f;
24588 }
24589 }
24590 }
24591 float num689 = 20f;
24592 num689 -= 5f * num644;
24593 if (this.ai[1] > (float)num679 * num689)
24594 {
24595 this.ai[0] = -1f;
24596 this.ai[1] = 3f;
24597 netUpdate = true;
24598 }
24599 }
24600 else if (this.ai[0] == 4f)
24601 {
24602 localAI[0] = 1f;
24603 float num690 = 14f;
24604 float num691 = 14f;
24605 Vector2 vector88 = Main.player[target].Center - base.Center;
24606 vector88.Normalize();
24607 vector88 *= num690;
24608 velocity = (velocity * num691 + vector88) / (num691 + 1f);
24609 if (velocity.X < 0f)
24610 {
24611 direction = -1;
24612 }
24613 else
24614 {
24615 direction = 1;
24616 }
24618 if (num645 < 2000f)
24619 {
24620 this.ai[0] = -1f;
24621 localAI[0] = 0f;
24622 }
24623 }
24624 }
24625 else if (aiStyle == 44)
24626 {
24627 noGravity = true;
24628 if (collideX)
24629 {
24630 if (oldVelocity.X > 0f)
24631 {
24632 direction = -1;
24633 }
24634 else
24635 {
24636 direction = 1;
24637 }
24638 velocity.X = direction;
24639 }
24640 if (collideY)
24641 {
24642 if (oldVelocity.Y > 0f)
24643 {
24644 directionY = -1;
24645 }
24646 else
24647 {
24648 directionY = 1;
24649 }
24650 velocity.Y = directionY;
24651 }
24652 if (type == 587)
24653 {
24655 if (alpha == 255)
24656 {
24657 velocity.Y = -6f;
24658 netUpdate = true;
24659 for (int num692 = 0; num692 < 15; num692++)
24660 {
24661 Dust dust2 = Dust.NewDustDirect(position, width, height, 5);
24662 Dust dust = dust2;
24663 dust.velocity *= 0.5f;
24664 dust2.scale = 1f + Main.rand.NextFloat() * 0.5f;
24665 dust2.fadeIn = 1.5f + Main.rand.NextFloat() * 0.5f;
24666 dust = dust2;
24667 dust.velocity += velocity * 0.5f;
24668 }
24669 }
24670 alpha -= 15;
24671 if (alpha < 0)
24672 {
24673 alpha = 0;
24674 }
24675 if (alpha != 0)
24676 {
24677 for (int num693 = 0; num693 < 2; num693++)
24678 {
24679 Dust dust3 = Dust.NewDustDirect(position, width, height, 5);
24680 Dust dust = dust3;
24681 dust.velocity *= 1f;
24682 dust3.scale = 1f + Main.rand.NextFloat() * 0.5f;
24683 dust3.fadeIn = 1.5f + Main.rand.NextFloat() * 0.5f;
24684 dust = dust3;
24685 dust.velocity += velocity * 0.3f;
24686 }
24687 }
24688 if (Main.rand.Next(3) == 0)
24689 {
24690 Dust dust4 = Dust.NewDustDirect(position, width, height, 5);
24691 Dust dust = dust4;
24692 dust.velocity *= 0f;
24693 dust4.alpha = 120;
24694 dust4.scale = 0.7f + Main.rand.NextFloat() * 0.5f;
24695 dust = dust4;
24696 dust.velocity += velocity * 0.3f;
24697 }
24699 }
24700 int num694 = target;
24701 int num695 = direction;
24702 if (target == 255 || (type != 587 && Main.player[target].wet) || Main.player[target].dead || Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
24703 {
24704 this.ai[0] = 90f;
24705 TargetClosest();
24706 }
24707 else if (this.ai[0] > 0f)
24708 {
24709 this.ai[0] -= 1f;
24710 TargetClosest();
24711 }
24712 if (netUpdate && num694 == target && num695 == direction)
24713 {
24714 netUpdate = false;
24715 }
24716 float num696 = 0.05f;
24717 float num697 = 0.01f;
24718 float num698 = 3f;
24719 float num699 = 1f;
24720 float num700 = 30f;
24721 float num701 = 100f;
24722 float num702 = Math.Abs(position.X + (float)(width / 2) - (Main.player[target].position.X + (float)(Main.player[target].width / 2)));
24723 float num703 = Main.player[target].position.Y - (float)(height / 2);
24724 if (type == 509)
24725 {
24726 num696 = 0.08f;
24727 num697 = 0.03f;
24728 num698 = 4.5f;
24729 num699 = 2f;
24730 num700 = 40f;
24731 num701 = 150f;
24732 num703 = Main.player[target].Center.Y - (float)(height / 2);
24733 rotation = velocity.X * 0.1f;
24734 for (int num704 = 0; num704 < 200; num704++)
24735 {
24736 if (num704 != whoAmI && Main.npc[num704].active && Main.npc[num704].type == type && Math.Abs(position.X - Main.npc[num704].position.X) + Math.Abs(position.Y - Main.npc[num704].position.Y) < (float)width)
24737 {
24738 if (position.X < Main.npc[num704].position.X)
24739 {
24740 velocity.X -= 0.05f;
24741 }
24742 else
24743 {
24744 velocity.X += 0.05f;
24745 }
24746 if (position.Y < Main.npc[num704].position.Y)
24747 {
24748 velocity.Y -= 0.05f;
24749 }
24750 else
24751 {
24752 velocity.Y += 0.05f;
24753 }
24754 }
24755 }
24756 }
24757 else if (type == 581)
24758 {
24759 num696 = 0.06f;
24760 num697 = 0.02f;
24761 num698 = 4f;
24762 num699 = 2f;
24763 num700 = 40f;
24764 num701 = 150f;
24765 num703 = Main.player[target].Center.Y - (float)(height / 2);
24766 rotation = velocity.X * 0.1f;
24767 for (int num705 = 0; num705 < 200; num705++)
24768 {
24769 if (num705 != whoAmI && Main.npc[num705].active && Main.npc[num705].type == type && Math.Abs(position.X - Main.npc[num705].position.X) + Math.Abs(position.Y - Main.npc[num705].position.Y) < (float)width)
24770 {
24771 if (position.X < Main.npc[num705].position.X)
24772 {
24773 velocity.X -= 0.05f;
24774 }
24775 else
24776 {
24777 velocity.X += 0.05f;
24778 }
24779 if (position.Y < Main.npc[num705].position.Y)
24780 {
24781 velocity.Y -= 0.05f;
24782 }
24783 else
24784 {
24785 velocity.Y += 0.05f;
24786 }
24787 }
24788 }
24789 }
24790 else if (type == 587)
24791 {
24792 num696 = 0.13f;
24793 num697 = 0.09f;
24794 num698 = 6.5f;
24795 num699 = 3.5f;
24796 num700 = 0f;
24797 num701 = 250f;
24798 num703 = Main.player[target].position.Y;
24799 if (Main.dayTime)
24800 {
24801 num703 = 0f;
24802 direction *= -1;
24803 }
24804 }
24805 if (this.ai[0] <= 0f)
24806 {
24807 num698 *= 0.8f;
24808 num696 *= 0.7f;
24809 num703 = base.Center.Y + (float)(directionY * 1000);
24810 if (velocity.X < 0f)
24811 {
24812 direction = -1;
24813 }
24814 else if (velocity.X > 0f || direction == 0)
24815 {
24816 direction = 1;
24817 }
24818 }
24819 if (num702 > num700)
24820 {
24821 if (direction == -1 && velocity.X > 0f - num698)
24822 {
24823 velocity.X -= num696;
24824 if (velocity.X > num698)
24825 {
24826 velocity.X -= num696;
24827 }
24828 else if (velocity.X > 0f)
24829 {
24830 velocity.X -= num696 / 2f;
24831 }
24832 if (velocity.X < 0f - num698)
24833 {
24834 velocity.X = 0f - num698;
24835 }
24836 }
24837 else if (direction == 1 && velocity.X < num698)
24838 {
24839 velocity.X += num696;
24840 if (velocity.X < 0f - num698)
24841 {
24842 velocity.X += num696;
24843 }
24844 else if (velocity.X < 0f)
24845 {
24846 velocity.X += num696 / 2f;
24847 }
24848 if (velocity.X > num698)
24849 {
24850 velocity.X = num698;
24851 }
24852 }
24853 }
24854 if (num702 > num701)
24855 {
24856 num703 -= num701 / 2f;
24857 }
24858 if (position.Y < num703)
24859 {
24860 velocity.Y += num697;
24861 if (velocity.Y < 0f)
24862 {
24863 velocity.Y += num697;
24864 }
24865 }
24866 else
24867 {
24868 velocity.Y -= num697;
24869 if (velocity.Y > 0f)
24870 {
24871 velocity.Y -= num697;
24872 }
24873 }
24874 if (velocity.Y < 0f - num699)
24875 {
24876 velocity.Y = 0f - num699;
24877 }
24878 if (velocity.Y > num699)
24879 {
24880 velocity.Y = num699;
24881 }
24882 if (type != 587 && wet)
24883 {
24884 if (velocity.Y > 0f)
24885 {
24886 velocity.Y *= 0.95f;
24887 }
24888 velocity.Y -= 0.5f;
24889 if (velocity.Y < -4f)
24890 {
24891 velocity.Y = -4f;
24892 }
24893 }
24894 }
24895 else if (aiStyle == 45)
24896 {
24897 AI_045_Golem();
24898 }
24899 else if (aiStyle == 46)
24900 {
24901 float num706 = GetMyBalance();
24902 if (Main.getGoodWorld)
24903 {
24904 num706 += 3f;
24905 }
24906 if ((!Main.player[target].ZoneLihzhardTemple && !Main.player[target].ZoneJungle) || (double)Main.player[target].Center.Y < Main.worldSurface * 16.0)
24907 {
24908 num706 *= 2f;
24909 }
24910 noTileCollide = true;
24911 if (golemBoss < 0)
24912 {
24913 StrikeNPCNoInteraction(9999, 0f, 0);
24914 return;
24915 }
24916 float num707 = 100f;
24917 Vector2 vector89 = new Vector2(base.Center.X, base.Center.Y);
24918 float num708 = Main.npc[golemBoss].Center.X - vector89.X;
24919 float num709 = Main.npc[golemBoss].Center.Y - vector89.Y;
24920 num709 -= 57f * scale;
24921 num708 -= 3f * scale;
24922 float num710 = (float)Math.Sqrt(num708 * num708 + num709 * num709);
24923 if (num710 < num707)
24924 {
24925 rotation = 0f;
24926 velocity.X = num708;
24927 velocity.Y = num709;
24928 }
24929 else
24930 {
24931 num710 = num707 / num710;
24932 velocity.X = num708 * num710;
24933 velocity.Y = num709 * num710;
24934 rotation = velocity.X * 0.1f;
24935 }
24936 if (alpha > 0)
24937 {
24938 alpha -= 10;
24939 if (alpha < 0)
24940 {
24941 alpha = 0;
24942 }
24943 this.ai[1] = 30f;
24944 }
24945 if (this.ai[0] == 0f)
24946 {
24947 this.ai[1] += 1f;
24948 int num711 = 300;
24949 if (this.ai[1] < 20f || this.ai[1] > (float)(num711 - 20))
24950 {
24951 this.ai[1] += 2f * (num706 - 1f) / 3f;
24952 localAI[0] = 1f;
24953 }
24954 else
24955 {
24956 this.ai[1] += 1f * (num706 - 1f) / 2f;
24957 localAI[0] = 0f;
24958 }
24959 if (this.ai[1] >= (float)num711)
24960 {
24961 TargetClosest();
24962 this.ai[1] = 0f;
24963 Vector2 vector90 = new Vector2(base.Center.X, base.Center.Y + 10f * scale);
24964 float num712 = 8f;
24965 float num713 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector90.X;
24966 float num714 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector90.Y;
24967 float num715 = (float)Math.Sqrt(num713 * num713 + num714 * num714);
24968 num715 = num712 / num715;
24969 num713 *= num715;
24970 num714 *= num715;
24971 int num716 = 18;
24972 int num717 = 258;
24973 if (Main.netMode != 1)
24974 {
24975 int num718 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector90.X, vector90.Y, num713, num714, num717, num716, 0f, Main.myPlayer);
24976 }
24977 }
24978 }
24979 else if (this.ai[0] == 1f)
24980 {
24981 TargetClosest();
24982 Vector2 vector91 = new Vector2(base.Center.X, base.Center.Y + 10f * scale);
24983 if (Main.player[target].Center.X < base.Center.X - (float)width)
24984 {
24985 localAI[1] = -1f;
24986 vector91.X -= 40f * scale;
24987 }
24988 else if (Main.player[target].Center.X > base.Center.X + (float)width)
24989 {
24990 localAI[1] = 1f;
24991 vector91.X += 40f * scale;
24992 }
24993 else
24994 {
24995 localAI[1] = 0f;
24996 }
24997 float num719 = (num706 + 3f) / 4f;
24998 this.ai[1] += num719;
24999 if ((double)life < (double)lifeMax * 0.4)
25000 {
25001 this.ai[1] += num719;
25002 }
25003 if ((double)life < (double)lifeMax * 0.2)
25004 {
25005 this.ai[1] += num719;
25006 }
25007 int num720 = 300;
25008 if (this.ai[1] < 20f || this.ai[1] > (float)(num720 - 20))
25009 {
25010 localAI[0] = 1f;
25011 }
25012 else
25013 {
25014 localAI[0] = 0f;
25015 }
25016 if (this.ai[1] >= (float)num720)
25017 {
25018 TargetClosest();
25019 this.ai[1] = 0f;
25020 float num721 = 8f;
25021 float num722 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector91.X;
25022 float num723 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector91.Y;
25023 float num724 = (float)Math.Sqrt(num722 * num722 + num723 * num723);
25024 num724 = num721 / num724;
25025 num722 *= num724;
25026 num723 *= num724;
25027 int num725 = 24;
25028 int num726 = 258;
25029 if (Main.netMode != 1)
25030 {
25031 int num727 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector91.X, vector91.Y, num722, num723, num726, num725, 0f, Main.myPlayer);
25032 }
25033 }
25034 this.ai[2] += num719;
25035 if (life < lifeMax / 3)
25036 {
25037 this.ai[2] += num719;
25038 }
25039 if (life < lifeMax / 4)
25040 {
25041 this.ai[2] += num719;
25042 }
25043 if (life < lifeMax / 5)
25044 {
25045 this.ai[2] += num719;
25046 }
25047 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
25048 {
25049 this.ai[2] += 4f;
25050 }
25051 if (this.ai[2] > (float)(60 + Main.rand.Next(600)))
25052 {
25053 this.ai[2] = 0f;
25054 int num728 = 28;
25055 int num729 = 259;
25056 if (localAI[1] == 0f)
25057 {
25058 for (int num730 = 0; num730 < 2; num730++)
25059 {
25060 vector91 = new Vector2(base.Center.X, base.Center.Y - 22f * scale);
25061 if (num730 == 0)
25062 {
25063 vector91.X -= 18f * scale;
25064 }
25065 else
25066 {
25067 vector91.X += 18f * scale;
25068 }
25069 float num731 = 11f;
25070 float num732 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector91.X;
25071 float num733 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector91.Y;
25072 float num734 = (float)Math.Sqrt(num732 * num732 + num733 * num733);
25073 num734 = num731 / num734;
25074 num732 *= num734;
25075 num733 *= num734;
25076 vector91.X += num732 * 3f;
25077 vector91.Y += num733 * 3f;
25078 if (Main.netMode != 1)
25079 {
25080 int num735 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector91.X, vector91.Y, num732, num733, num729, num728, 0f, Main.myPlayer);
25081 Main.projectile[num735].timeLeft = 300;
25082 }
25083 }
25084 }
25085 else if (localAI[1] != 0f)
25086 {
25087 vector91 = new Vector2(base.Center.X, base.Center.Y - 22f * scale);
25088 if (localAI[1] == -1f)
25089 {
25090 vector91.X -= 30f * scale;
25091 }
25092 else if (localAI[1] == 1f)
25093 {
25094 vector91.X += 30f * scale;
25095 }
25096 float num736 = 12f;
25097 float num737 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector91.X;
25098 float num738 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector91.Y;
25099 float num739 = (float)Math.Sqrt(num737 * num737 + num738 * num738);
25100 num739 = num736 / num739;
25101 num737 *= num739;
25102 num738 *= num739;
25103 vector91.X += num737 * 3f;
25104 vector91.Y += num738 * 3f;
25105 if (Main.netMode != 1)
25106 {
25107 int num740 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector91.X, vector91.Y, num737, num738, num729, num728, 0f, Main.myPlayer);
25108 Main.projectile[num740].timeLeft = 300;
25109 }
25110 }
25111 }
25112 }
25113 if (life < lifeMax / 2)
25114 {
25115 this.ai[0] = 1f;
25116 }
25117 else
25118 {
25119 this.ai[0] = 0f;
25120 }
25121 }
25122 else if (aiStyle == 47)
25123 {
25125 }
25126 else if (aiStyle == 48)
25127 {
25128 bool flag37 = false;
25129 float num741 = GetMyBalance();
25130 if (Main.getGoodWorld)
25131 {
25132 num741 += 3f;
25133 }
25134 if ((!Main.player[target].ZoneLihzhardTemple && !Main.player[target].ZoneJungle) || (double)Main.player[target].Center.Y < Main.worldSurface * 16.0)
25135 {
25136 num741 *= 2f;
25137 }
25138 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
25139 {
25140 noTileCollide = true;
25141 flag37 = true;
25142 }
25143 else if (noTileCollide && Collision.SolidTiles(position, width, height))
25144 {
25145 noTileCollide = false;
25146 }
25147 if (golemBoss < 0)
25148 {
25149 StrikeNPCNoInteraction(9999, 0f, 0);
25150 return;
25151 }
25152 TargetClosest();
25153 float num742 = 7f;
25154 float num743 = 0.05f;
25155 Vector2 vector92 = new Vector2(base.Center.X, base.Center.Y);
25156 float num744 = Main.player[target].Center.X - vector92.X;
25157 float num745 = Main.player[target].Center.Y - vector92.Y - 300f;
25158 float num746 = (float)Math.Sqrt(num744 * num744 + num745 * num745);
25159 num746 = num742 / num746;
25160 num744 *= num746;
25161 num745 *= num746;
25162 if (velocity.X < num744)
25163 {
25164 velocity.X += num743;
25165 if (velocity.X < 0f && num744 > 0f)
25166 {
25167 velocity.X += num743;
25168 }
25169 }
25170 else if (velocity.X > num744)
25171 {
25172 velocity.X -= num743;
25173 if (velocity.X > 0f && num744 < 0f)
25174 {
25175 velocity.X -= num743;
25176 }
25177 }
25178 if (velocity.Y < num745)
25179 {
25180 velocity.Y += num743;
25181 if (velocity.Y < 0f && num745 > 0f)
25182 {
25183 velocity.Y += num743;
25184 }
25185 }
25186 else if (velocity.Y > num745)
25187 {
25188 velocity.Y -= num743;
25189 if (velocity.Y > 0f && num745 < 0f)
25190 {
25191 velocity.Y -= num743;
25192 }
25193 }
25194 float num747 = (num741 + 4f) / 5f;
25195 this.ai[1] += num747;
25196 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.8)
25197 {
25198 this.ai[1] += num747;
25199 }
25200 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.6)
25201 {
25202 this.ai[1] += num747;
25203 }
25204 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.2)
25205 {
25206 this.ai[1] += num747;
25207 }
25208 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.1)
25209 {
25210 this.ai[1] += num747;
25211 }
25212 int num748 = 300;
25213 if (this.ai[1] < 20f || this.ai[1] > (float)(num748 - 20))
25214 {
25215 localAI[0] = 1f;
25216 }
25217 else
25218 {
25219 localAI[0] = 0f;
25220 }
25221 if (flag37)
25222 {
25223 this.ai[1] = 20f;
25224 }
25225 if (this.ai[1] >= (float)num748)
25226 {
25227 TargetClosest();
25228 this.ai[1] = 0f;
25229 Vector2 vector93 = new Vector2(base.Center.X, base.Center.Y - 10f * scale);
25230 float num749 = 8f;
25231 int num750 = 20;
25232 int num751 = 258;
25233 float num752 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector93.X;
25234 float num753 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector93.Y;
25235 float num754 = (float)Math.Sqrt(num752 * num752 + num753 * num753);
25236 num754 = num749 / num754;
25237 num752 *= num754;
25238 num753 *= num754;
25239 if (Main.netMode != 1)
25240 {
25241 int num755 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector93.X, vector93.Y, num752, num753, num751, num750, 0f, Main.myPlayer);
25242 }
25243 }
25244 float num756 = num741;
25245 this.ai[2] += num756;
25246 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax / 1.25)
25247 {
25248 this.ai[2] += num756;
25249 }
25250 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax / 1.5)
25251 {
25252 this.ai[2] += num756;
25253 }
25254 if (Main.npc[golemBoss].life < Main.npc[golemBoss].lifeMax / 2)
25255 {
25256 this.ai[2] += num756;
25257 }
25258 if (Main.npc[golemBoss].life < Main.npc[golemBoss].lifeMax / 3)
25259 {
25260 this.ai[2] += num756;
25261 }
25262 if (Main.npc[golemBoss].life < Main.npc[golemBoss].lifeMax / 4)
25263 {
25264 this.ai[2] += num756;
25265 }
25266 if (Main.npc[golemBoss].life < Main.npc[golemBoss].lifeMax / 5)
25267 {
25268 this.ai[2] += num756;
25269 }
25270 if (Main.npc[golemBoss].life < Main.npc[golemBoss].lifeMax / 6)
25271 {
25272 this.ai[2] += num756;
25273 }
25274 bool flag38 = false;
25275 if (!Collision.CanHit(Main.npc[golemBoss].Center, 1, 1, Main.player[target].Center, 1, 1))
25276 {
25277 flag38 = true;
25278 }
25279 if (flag38)
25280 {
25281 this.ai[2] += num756 * 10f;
25282 }
25283 if (this.ai[2] > (float)(100 + Main.rand.Next(4800)))
25284 {
25285 this.ai[2] = 0f;
25286 for (int num757 = 0; num757 < 2; num757++)
25287 {
25288 Vector2 vector94 = new Vector2(base.Center.X, base.Center.Y - 50f * scale);
25289 switch (num757)
25290 {
25291 case 0:
25292 vector94.X -= 14f * scale;
25293 break;
25294 case 1:
25295 vector94.X += 14f * scale;
25296 break;
25297 }
25298 float num758 = 11f;
25299 int num759 = 24;
25300 int num760 = 259;
25301 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.5)
25302 {
25303 num759++;
25304 num758 += 0.25f;
25305 }
25306 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.4)
25307 {
25308 num759++;
25309 num758 += 0.25f;
25310 }
25311 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.3)
25312 {
25313 num759++;
25314 num758 += 0.25f;
25315 }
25316 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.2)
25317 {
25318 num759++;
25319 num758 += 0.25f;
25320 }
25321 if ((double)Main.npc[golemBoss].life < (double)Main.npc[golemBoss].lifeMax * 0.1)
25322 {
25323 num759++;
25324 num758 += 0.25f;
25325 }
25326 float num761 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f;
25327 float num762 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f;
25328 if (flag38)
25329 {
25330 num759 = (int)((double)num759 * 1.5);
25331 num758 *= 2.5f;
25332 num761 += Main.player[target].velocity.X * Main.rand.NextFloat() * 50f;
25333 num762 += Main.player[target].velocity.Y * Main.rand.NextFloat() * 50f;
25334 }
25335 num761 -= vector94.X;
25336 num762 -= vector94.Y;
25337 float num763 = (float)Math.Sqrt(num761 * num761 + num762 * num762);
25338 num763 = num758 / num763;
25339 num761 *= num763;
25340 num762 *= num763;
25341 vector94.X += num761 * 3f;
25342 vector94.Y += num762 * 3f;
25343 if (Main.netMode != 1)
25344 {
25345 int num764 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector94.X, vector94.Y, num761, num762, num760, num759, 0f, Main.myPlayer);
25346 Main.projectile[num764].timeLeft = 300;
25347 }
25348 }
25349 }
25350 if (!Main.getGoodWorld)
25351 {
25353 int num765 = Main.rand.Next(2) * 2 - 1;
25354 Vector2 vector95 = base.Bottom + new Vector2((float)(num765 * 22) * scale, -22f * scale);
25355 Dust dust5 = Dust.NewDustPerfect(vector95, 228, ((float)Math.PI / 2f + -(float)Math.PI / 2f * (float)num765 + Main.rand.NextFloatDirection() * ((float)Math.PI / 4f)).ToRotationVector2() * (2f + Main.rand.NextFloat()));
25356 Dust dust = dust5;
25357 dust.velocity += velocity;
25358 dust5.noGravity = true;
25359 dust5 = Dust.NewDustPerfect(base.Bottom + new Vector2(Main.rand.NextFloatDirection() * 6f * scale, (Main.rand.NextFloat() * -4f - 8f) * scale), 228, Vector2.UnitY * (2f + Main.rand.NextFloat()));
25360 dust5.fadeIn = 0f;
25361 dust5.scale = 0.7f + Main.rand.NextFloat() * 0.5f;
25362 dust5.noGravity = true;
25363 dust = dust5;
25364 dust.velocity += velocity;
25366 }
25367 }
25368 else if (aiStyle == 49)
25369 {
25370 noGravity = true;
25371 TargetClosest();
25372 float num766 = 4f;
25373 float num767 = 0.25f;
25374 Vector2 vector96 = new Vector2(base.Center.X, base.Center.Y);
25375 float num768 = Main.player[target].Center.X - vector96.X;
25376 float num769 = Main.player[target].Center.Y - vector96.Y - 200f;
25377 float num770 = (float)Math.Sqrt(num768 * num768 + num769 * num769);
25378 if (num770 < 20f)
25379 {
25380 num768 = velocity.X;
25381 num769 = velocity.Y;
25382 }
25383 else
25384 {
25385 num770 = num766 / num770;
25386 num768 *= num770;
25387 num769 *= num770;
25388 }
25389 if (velocity.X < num768)
25390 {
25391 velocity.X += num767;
25392 if (velocity.X < 0f && num768 > 0f)
25393 {
25394 velocity.X += num767 * 2f;
25395 }
25396 }
25397 else if (velocity.X > num768)
25398 {
25399 velocity.X -= num767;
25400 if (velocity.X > 0f && num768 < 0f)
25401 {
25402 velocity.X -= num767 * 2f;
25403 }
25404 }
25405 if (velocity.Y < num769)
25406 {
25407 velocity.Y += num767;
25408 if (velocity.Y < 0f && num769 > 0f)
25409 {
25410 velocity.Y += num767 * 2f;
25411 }
25412 }
25413 else if (velocity.Y > num769)
25414 {
25415 velocity.Y -= num767;
25416 if (velocity.Y > 0f && num769 < 0f)
25417 {
25418 velocity.Y -= num767 * 2f;
25419 }
25420 }
25421 if (position.X + (float)width > Main.player[target].position.X && position.X < Main.player[target].position.X + (float)Main.player[target].width && position.Y + (float)height < Main.player[target].position.Y && Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height) && Main.netMode != 1)
25422 {
25423 this.ai[0] += 1f;
25424 if (this.ai[0] > 8f)
25425 {
25426 this.ai[0] = 0f;
25427 int num771 = (int)(position.X + 10f + (float)Main.rand.Next(width - 20));
25428 int num772 = (int)(position.Y + (float)height + 4f);
25429 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), num771, num772, 0f, 5f, 264, 20, 0f, Main.myPlayer);
25430 }
25431 }
25432 }
25433 else if (aiStyle == 50)
25434 {
25436 if (type == 261)
25437 {
25438 noTileCollide = false;
25439 if (collideX || collideY)
25440 {
25441 life = 0;
25442 HitEffect(0, 100.0);
25443 checkDead();
25444 return;
25445 }
25446 }
25447 else
25448 {
25449 noTileCollide = true;
25450 }
25451 velocity.Y += 0.02f;
25452 TargetClosest();
25453 if (velocity.Y < 0f && Main.player[target].position.Y > position.Y + 100f)
25454 {
25455 velocity.Y *= 0.95f;
25456 }
25457 if (velocity.Y > 1f)
25458 {
25459 velocity.Y = 1f;
25460 }
25461 if (position.X + (float)width < Main.player[target].position.X)
25462 {
25463 if (velocity.X < 0f)
25464 {
25465 velocity.X *= 0.98f;
25466 }
25467 if (Main.expertMode && velocity.X < 0f)
25468 {
25469 velocity.X *= 0.98f;
25470 }
25471 velocity.X += 0.1f;
25472 if (Main.expertMode)
25473 {
25474 velocity.X += 0.1f;
25475 }
25476 }
25477 else if (position.X > Main.player[target].position.X + (float)Main.player[target].width)
25478 {
25479 if (velocity.X > 0f)
25480 {
25481 velocity.X *= 0.98f;
25482 }
25483 if (Main.expertMode && velocity.X > 0f)
25484 {
25485 velocity.X *= 0.98f;
25486 }
25487 velocity.X -= 0.1f;
25488 if (Main.expertMode)
25489 {
25490 velocity.X -= 0.1f;
25491 }
25492 }
25493 if (velocity.X > 5f || velocity.X < -5f)
25494 {
25495 velocity.X *= 0.97f;
25496 }
25497 rotation = velocity.X * 0.2f;
25498 }
25499 else if (aiStyle == 51)
25500 {
25501 bool flag39 = false;
25502 bool flag40 = false;
25503 TargetClosest();
25504 if (Main.player[target].dead)
25505 {
25506 flag40 = true;
25507 flag39 = true;
25508 }
25509 else if (Main.netMode != 1 && target >= 0 && target < 255)
25510 {
25511 int num773 = 4800;
25512 if (timeLeft < activeTime && Vector2.Distance(base.Center, Main.player[target].Center) < (float)num773)
25513 {
25515 }
25516 }
25517 plantBoss = whoAmI;
25518 if (localAI[0] == 0f && Main.netMode != 1)
25519 {
25520 localAI[0] = 1f;
25521 int num774 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 263, whoAmI);
25522 num774 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 263, whoAmI);
25523 num774 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 263, whoAmI);
25524 }
25525 int[] array2 = new int[3];
25526 float num775 = 0f;
25527 float num776 = 0f;
25528 int num777 = 0;
25529 for (int num778 = 0; num778 < 200; num778++)
25530 {
25531 if (Main.npc[num778].active && Main.npc[num778].aiStyle == 52)
25532 {
25533 num775 += Main.npc[num778].Center.X;
25534 num776 += Main.npc[num778].Center.Y;
25535 array2[num777] = num778;
25536 num777++;
25537 if (num777 > 2)
25538 {
25539 break;
25540 }
25541 }
25542 }
25543 num775 /= (float)num777;
25544 num776 /= (float)num777;
25545 float num779 = 2.5f;
25546 float num780 = 0.025f;
25547 if (life < lifeMax / 2)
25548 {
25549 num779 = 5f;
25550 num780 = 0.05f;
25551 }
25552 if (life < lifeMax / 4)
25553 {
25554 num779 = 7f;
25555 }
25556 if (!Main.player[target].ZoneJungle || (double)Main.player[target].position.Y < Main.worldSurface * 16.0 || Main.player[target].position.Y > (float)(Main.UnderworldLayer * 16))
25557 {
25558 flag39 = true;
25559 num779 += 8f;
25560 num780 = 0.15f;
25561 }
25562 if (Main.expertMode)
25563 {
25564 num779 += 1f;
25565 num779 *= 1.1f;
25566 num780 += 0.01f;
25567 num780 *= 1.1f;
25568 }
25569 if (Main.getGoodWorld)
25570 {
25571 num779 *= 1.15f;
25572 num780 *= 1.15f;
25573 }
25575 float num781 = Main.player[target].Center.X - vector97.X;
25576 float num782 = Main.player[target].Center.Y - vector97.Y;
25577 if (flag40)
25578 {
25579 num782 *= -1f;
25580 num781 *= -1f;
25581 num779 += 8f;
25582 }
25583 float num783 = (float)Math.Sqrt(num781 * num781 + num782 * num782);
25584 int num784 = 500;
25585 if (flag39)
25586 {
25587 num784 += 350;
25588 }
25589 if (Main.expertMode)
25590 {
25591 num784 += 150;
25592 }
25593 if (num783 >= (float)num784)
25594 {
25595 num783 = (float)num784 / num783;
25596 num781 *= num783;
25597 num782 *= num783;
25598 }
25599 num775 += num781;
25600 num776 += num782;
25601 vector97 = new Vector2(base.Center.X, base.Center.Y);
25602 num781 = num775 - vector97.X;
25603 num782 = num776 - vector97.Y;
25604 num783 = (float)Math.Sqrt(num781 * num781 + num782 * num782);
25605 if (num783 < num779)
25606 {
25607 num781 = velocity.X;
25608 num782 = velocity.Y;
25609 }
25610 else
25611 {
25612 num783 = num779 / num783;
25613 num781 *= num783;
25614 num782 *= num783;
25615 }
25616 if (velocity.X < num781)
25617 {
25618 velocity.X += num780;
25619 if (velocity.X < 0f && num781 > 0f)
25620 {
25621 velocity.X += num780 * 2f;
25622 }
25623 }
25624 else if (velocity.X > num781)
25625 {
25626 velocity.X -= num780;
25627 if (velocity.X > 0f && num781 < 0f)
25628 {
25629 velocity.X -= num780 * 2f;
25630 }
25631 }
25632 if (velocity.Y < num782)
25633 {
25634 velocity.Y += num780;
25635 if (velocity.Y < 0f && num782 > 0f)
25636 {
25637 velocity.Y += num780 * 2f;
25638 }
25639 }
25640 else if (velocity.Y > num782)
25641 {
25642 velocity.Y -= num780;
25643 if (velocity.Y > 0f && num782 < 0f)
25644 {
25645 velocity.Y -= num780 * 2f;
25646 }
25647 }
25648 Vector2 vector98 = new Vector2(base.Center.X, base.Center.Y);
25649 float num785 = Main.player[target].Center.X - vector98.X;
25650 float num786 = Main.player[target].Center.Y - vector98.Y;
25651 rotation = (float)Math.Atan2(num786, num785) + 1.57f;
25652 if (life > lifeMax / 2)
25653 {
25654 defense = 36;
25655 int num787 = 50;
25656 if (flag39)
25657 {
25658 defense *= 2;
25659 num787 *= 2;
25660 }
25662 if (Main.netMode == 1)
25663 {
25664 return;
25665 }
25666 localAI[1] += 1f;
25667 if ((double)life < (double)lifeMax * 0.9)
25668 {
25669 localAI[1] += 1f;
25670 }
25671 if ((double)life < (double)lifeMax * 0.8)
25672 {
25673 localAI[1] += 1f;
25674 }
25675 if ((double)life < (double)lifeMax * 0.7)
25676 {
25677 localAI[1] += 1f;
25678 }
25679 if ((double)life < (double)lifeMax * 0.6)
25680 {
25681 localAI[1] += 1f;
25682 }
25683 if (flag39)
25684 {
25685 localAI[1] += 3f;
25686 }
25687 if (Main.expertMode)
25688 {
25689 localAI[1] += 1f;
25690 }
25691 if (Main.expertMode && justHit && Main.rand.Next(2) == 0)
25692 {
25693 localAI[3] = 1f;
25694 }
25695 if (Main.getGoodWorld)
25696 {
25697 localAI[1] += 1f;
25698 }
25699 if (!(localAI[1] > 80f))
25700 {
25701 return;
25702 }
25703 localAI[1] = 0f;
25704 bool flag41 = Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height);
25705 if (localAI[3] > 0f)
25706 {
25707 flag41 = true;
25708 localAI[3] = 0f;
25709 }
25710 if (flag41)
25711 {
25712 Vector2 vector99 = new Vector2(base.Center.X, base.Center.Y);
25713 float num788 = 15f;
25714 if (Main.expertMode)
25715 {
25716 num788 = 17f;
25717 }
25718 float num789 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector99.X;
25719 float num790 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector99.Y;
25720 float num791 = (float)Math.Sqrt(num789 * num789 + num790 * num790);
25721 num791 = num788 / num791;
25722 num789 *= num791;
25723 num790 *= num791;
25724 int num792 = 22;
25725 int num793 = 275;
25726 int maxValue2 = 4;
25727 int maxValue3 = 8;
25728 if (Main.expertMode)
25729 {
25730 maxValue2 = 2;
25731 maxValue3 = 6;
25732 }
25733 if ((double)life < (double)lifeMax * 0.8 && Main.rand.Next(maxValue2) == 0)
25734 {
25735 num792 = 27;
25736 localAI[1] = -30f;
25737 num793 = 276;
25738 }
25739 else if ((double)life < (double)lifeMax * 0.8 && Main.rand.Next(maxValue3) == 0)
25740 {
25741 num792 = 31;
25742 localAI[1] = -120f;
25743 num793 = 277;
25744 }
25745 if (flag39)
25746 {
25747 num792 *= 2;
25748 }
25750 vector99.X += num789 * 3f;
25751 vector99.Y += num790 * 3f;
25752 int num794 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector99.X, vector99.Y, num789, num790, num793, num792, 0f, Main.myPlayer);
25753 if (num793 != 277)
25754 {
25755 Main.projectile[num794].timeLeft = 300;
25756 }
25757 }
25758 return;
25759 }
25760 defense = 10;
25761 int num795 = 70;
25762 if (flag39)
25763 {
25764 defense *= 4;
25765 num795 *= 2;
25766 }
25768 if (Main.netMode != 1)
25769 {
25770 if (localAI[0] == 1f)
25771 {
25772 localAI[0] = 2f;
25773 int num796 = 8;
25774 if (Main.getGoodWorld)
25775 {
25776 num796 += 6;
25777 }
25778 for (int num797 = 0; num797 < num796; num797++)
25779 {
25780 int num798 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 264, whoAmI);
25781 }
25782 if (Main.expertMode)
25783 {
25784 for (int num799 = 0; num799 < 200; num799++)
25785 {
25786 if (Main.npc[num799].active && Main.npc[num799].aiStyle == 52)
25787 {
25788 for (int num800 = 0; num800 < num796 / 2 - 1; num800++)
25789 {
25790 int num801 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 264, whoAmI);
25791 Main.npc[num801].ai[3] = num799 + 1;
25792 }
25793 }
25794 }
25795 }
25796 }
25797 else if (Main.expertMode && Main.rand.Next(60) == 0)
25798 {
25799 int num802 = 0;
25800 for (int num803 = 0; num803 < 200; num803++)
25801 {
25802 if (Main.npc[num803].active && Main.npc[num803].type == 264 && Main.npc[num803].ai[3] == 0f)
25803 {
25804 num802++;
25805 }
25806 }
25807 if (num802 < 8 && Main.rand.Next((num802 + 1) * 10) <= 1)
25808 {
25809 int num804 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 264, whoAmI);
25810 }
25811 }
25812 }
25813 if (localAI[2] == 0f)
25814 {
25815 Gore.NewGore(new Vector2(position.X + (float)Main.rand.Next(width), position.Y + (float)Main.rand.Next(height)), velocity, 378, scale);
25816 Gore.NewGore(new Vector2(position.X + (float)Main.rand.Next(width), position.Y + (float)Main.rand.Next(height)), velocity, 379, scale);
25817 Gore.NewGore(new Vector2(position.X + (float)Main.rand.Next(width), position.Y + (float)Main.rand.Next(height)), velocity, 380, scale);
25818 localAI[2] = 1f;
25819 }
25820 if (Main.netMode == 1)
25821 {
25822 return;
25823 }
25824 localAI[1] += 1f;
25825 if ((double)life < (double)lifeMax * 0.4)
25826 {
25827 localAI[1] += 1f;
25828 }
25829 if ((double)life < (double)lifeMax * 0.3)
25830 {
25831 localAI[1] += 1f;
25832 }
25833 if ((double)life < (double)lifeMax * 0.2)
25834 {
25835 localAI[1] += 1f;
25836 }
25837 if ((double)life < (double)lifeMax * 0.1)
25838 {
25839 localAI[1] += 1f;
25840 }
25841 if (localAI[1] >= 350f)
25842 {
25843 float num805 = 8f;
25844 Vector2 vector100 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
25845 float num806 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector100.X + (float)Main.rand.Next(-10, 11);
25846 float num807 = Math.Abs(num806 * 0.2f);
25847 float num808 = Main.player[target].position.Y + (float)Main.player[target].height * 0.5f - vector100.Y + (float)Main.rand.Next(-10, 11);
25848 if (num808 > 0f)
25849 {
25850 num807 = 0f;
25851 }
25852 num808 -= num807;
25853 float num809 = (float)Math.Sqrt(num806 * num806 + num808 * num808);
25854 num809 = num805 / num809;
25855 num806 *= num809;
25856 num808 *= num809;
25857 int num810 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 265);
25858 Main.npc[num810].velocity.X = num806;
25859 Main.npc[num810].velocity.Y = num808;
25860 Main.npc[num810].netUpdate = true;
25861 localAI[1] = 0f;
25862 }
25863 }
25864 else if (aiStyle == 52)
25865 {
25866 bool flag42 = false;
25867 bool flag43 = false;
25868 if (plantBoss < 0)
25869 {
25870 StrikeNPCNoInteraction(9999, 0f, 0);
25871 netUpdate = true;
25872 return;
25873 }
25874 if (Main.player[Main.npc[plantBoss].target].dead)
25875 {
25876 flag43 = true;
25877 }
25878 if ((plantBoss != -1 && !Main.player[Main.npc[plantBoss].target].ZoneJungle) || (double)Main.player[Main.npc[plantBoss].target].position.Y < Main.worldSurface * 16.0 || Main.player[Main.npc[plantBoss].target].position.Y > (float)(Main.UnderworldLayer * 16) || flag43)
25879 {
25880 localAI[0] -= 4f;
25881 flag42 = true;
25882 }
25883 if (Main.netMode == 1)
25884 {
25885 if (this.ai[0] == 0f)
25886 {
25887 this.ai[0] = (int)(base.Center.X / 16f);
25888 }
25889 if (this.ai[1] == 0f)
25890 {
25891 this.ai[1] = (int)(base.Center.X / 16f);
25892 }
25893 }
25894 if (Main.netMode != 1)
25895 {
25896 if (this.ai[0] == 0f || this.ai[1] == 0f)
25897 {
25898 localAI[0] = 0f;
25899 }
25900 localAI[0] -= 1f;
25901 if (Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 2)
25902 {
25903 localAI[0] -= 2f;
25904 }
25905 if (Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 4)
25906 {
25907 localAI[0] -= 2f;
25908 }
25909 if (flag42)
25910 {
25911 localAI[0] -= 6f;
25912 }
25913 if (!flag43 && localAI[0] <= 0f && this.ai[0] != 0f)
25914 {
25915 for (int num811 = 0; num811 < 200; num811++)
25916 {
25917 if (num811 != whoAmI && Main.npc[num811].active && Main.npc[num811].type == type && (Main.npc[num811].velocity.X != 0f || Main.npc[num811].velocity.Y != 0f))
25918 {
25919 localAI[0] = Main.rand.Next(60, 300);
25920 }
25921 }
25922 }
25923 if (localAI[0] <= 0f)
25924 {
25925 localAI[0] = Main.rand.Next(300, 600);
25926 bool flag44 = false;
25927 int num812 = 0;
25928 while (!flag44 && num812 <= 1000)
25929 {
25930 num812++;
25931 int num813 = (int)(Main.player[Main.npc[plantBoss].target].Center.X / 16f);
25932 int num814 = (int)(Main.player[Main.npc[plantBoss].target].Center.Y / 16f);
25933 if (this.ai[0] == 0f)
25934 {
25935 num813 = (int)((Main.player[Main.npc[plantBoss].target].Center.X + Main.npc[plantBoss].Center.X) / 32f);
25936 num814 = (int)((Main.player[Main.npc[plantBoss].target].Center.Y + Main.npc[plantBoss].Center.Y) / 32f);
25937 }
25938 if (flag43)
25939 {
25940 num813 = (int)Main.npc[plantBoss].position.X / 16;
25941 num814 = (int)(Main.npc[plantBoss].position.Y + 400f) / 16;
25942 }
25943 int num815 = 20;
25944 num815 += (int)(100f * ((float)num812 / 1000f));
25945 int num816 = num813 + Main.rand.Next(-num815, num815 + 1);
25946 int num817 = num814 + Main.rand.Next(-num815, num815 + 1);
25947 if (Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 2 && Main.rand.Next(6) == 0)
25948 {
25949 TargetClosest();
25950 int num818 = (int)(Main.player[target].Center.X / 16f);
25951 int num819 = (int)(Main.player[target].Center.Y / 16f);
25952 if (Main.tile[num818, num819].wall > 0)
25953 {
25954 num816 = num818;
25955 num817 = num819;
25956 }
25957 }
25958 try
25959 {
25960 if (WorldGen.InWorld(num816, num817) && (WorldGen.SolidTile(num816, num817) || (Main.tile[num816, num817].wall > 0 && (num812 > 500 || Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 2))))
25961 {
25962 flag44 = true;
25963 this.ai[0] = num816;
25964 this.ai[1] = num817;
25965 netUpdate = true;
25966 }
25967 }
25968 catch
25969 {
25970 }
25971 }
25972 }
25973 }
25974 if (!(this.ai[0] > 0f) || !(this.ai[1] > 0f))
25975 {
25976 return;
25977 }
25978 float num820 = 6f;
25979 if (Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 2)
25980 {
25981 num820 = 8f;
25982 }
25983 if (Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 4)
25984 {
25985 num820 = 10f;
25986 }
25987 if (Main.expertMode)
25988 {
25989 num820 += 1f;
25990 }
25991 if (Main.expertMode && Main.npc[plantBoss].life < Main.npc[plantBoss].lifeMax / 2)
25992 {
25993 num820 += 1f;
25994 }
25995 if (flag42)
25996 {
25997 num820 *= 2f;
25998 }
25999 if (flag43)
26000 {
26001 num820 *= 2f;
26002 }
26003 Vector2 vector101 = new Vector2(base.Center.X, base.Center.Y);
26004 float num821 = this.ai[0] * 16f - 8f - vector101.X;
26005 float num822 = this.ai[1] * 16f - 8f - vector101.Y;
26006 float num823 = (float)Math.Sqrt(num821 * num821 + num822 * num822);
26007 if (num823 < 12f + num820)
26008 {
26009 if (Main.netMode != 1 && Main.getGoodWorld && localAI[3] == 1f)
26010 {
26011 localAI[3] = 0f;
26012 WorldGen.SpawnPlanteraThorns(base.Center);
26013 }
26014 velocity.X = num821;
26015 velocity.Y = num822;
26016 }
26017 else
26018 {
26019 if (Main.netMode != 1 && Main.getGoodWorld)
26020 {
26021 localAI[3] = 1f;
26022 }
26023 num823 = num820 / num823;
26024 velocity.X = num821 * num823;
26025 velocity.Y = num822 * num823;
26026 }
26027 Vector2 vector102 = new Vector2(base.Center.X, base.Center.Y);
26028 float num824 = Main.npc[plantBoss].Center.X - vector102.X;
26029 float num825 = Main.npc[plantBoss].Center.Y - vector102.Y;
26030 rotation = (float)Math.Atan2(num825, num824) - 1.57f;
26031 }
26032 else if (aiStyle == 53)
26033 {
26034 if (Main.getGoodWorld)
26035 {
26036 if (Main.rand.Next(10) == 0)
26037 {
26038 reflectsProjectiles = true;
26039 }
26040 else
26041 {
26042 reflectsProjectiles = false;
26043 }
26044 }
26045 if (plantBoss < 0)
26046 {
26047 StrikeNPCNoInteraction(9999, 0f, 0);
26048 netUpdate = true;
26049 return;
26050 }
26051 int num826 = plantBoss;
26052 if (this.ai[3] > 0f)
26053 {
26054 num826 = (int)this.ai[3] - 1;
26055 }
26056 if (Main.netMode != 1)
26057 {
26058 localAI[0] -= 1f;
26059 if (localAI[0] <= 0f)
26060 {
26061 localAI[0] = Main.rand.Next(120, 480);
26062 this.ai[0] = Main.rand.Next(-100, 101);
26063 this.ai[1] = Main.rand.Next(-100, 101);
26064 netUpdate = true;
26065 }
26066 }
26067 TargetClosest();
26068 float num827 = 0.2f;
26069 float num828 = 200f;
26070 if ((double)Main.npc[plantBoss].life < (double)Main.npc[plantBoss].lifeMax * 0.25)
26071 {
26072 num828 += 100f;
26073 }
26074 if ((double)Main.npc[plantBoss].life < (double)Main.npc[plantBoss].lifeMax * 0.1)
26075 {
26076 num828 += 100f;
26077 }
26078 if (Main.expertMode)
26079 {
26080 float num829 = 1f - (float)life / (float)lifeMax;
26081 num828 += num829 * 300f;
26082 num827 += 0.3f;
26083 }
26084 if (Main.getGoodWorld)
26085 {
26086 num827 += 4f;
26087 }
26088 if (!Main.npc[num826].active || plantBoss < 0)
26089 {
26090 active = false;
26091 return;
26092 }
26093 float num830 = Main.npc[num826].position.X + (float)(Main.npc[num826].width / 2);
26094 float num831 = Main.npc[num826].position.Y + (float)(Main.npc[num826].height / 2);
26096 float num832 = num830 + this.ai[0];
26097 float num833 = num831 + this.ai[1];
26098 float num834 = num832 - vector103.X;
26099 float num835 = num833 - vector103.Y;
26100 float num836 = (float)Math.Sqrt(num834 * num834 + num835 * num835);
26101 num836 = num828 / num836;
26102 num834 *= num836;
26103 num835 *= num836;
26104 if (position.X < num830 + num834)
26105 {
26106 velocity.X += num827;
26107 if (velocity.X < 0f && num834 > 0f)
26108 {
26109 velocity.X *= 0.9f;
26110 }
26111 }
26112 else if (position.X > num830 + num834)
26113 {
26114 velocity.X -= num827;
26115 if (velocity.X > 0f && num834 < 0f)
26116 {
26117 velocity.X *= 0.9f;
26118 }
26119 }
26120 if (position.Y < num831 + num835)
26121 {
26122 velocity.Y += num827;
26123 if (velocity.Y < 0f && num835 > 0f)
26124 {
26125 velocity.Y *= 0.9f;
26126 }
26127 }
26128 else if (position.Y > num831 + num835)
26129 {
26130 velocity.Y -= num827;
26131 if (velocity.Y > 0f && num835 < 0f)
26132 {
26133 velocity.Y *= 0.9f;
26134 }
26135 }
26136 if (velocity.X > 8f)
26137 {
26138 velocity.X = 8f;
26139 }
26140 if (velocity.X < -8f)
26141 {
26142 velocity.X = -8f;
26143 }
26144 if (velocity.Y > 8f)
26145 {
26146 velocity.Y = 8f;
26147 }
26148 if (velocity.Y < -8f)
26149 {
26150 velocity.Y = -8f;
26151 }
26152 if (num834 > 0f)
26153 {
26154 spriteDirection = 1;
26155 rotation = (float)Math.Atan2(num835, num834);
26156 }
26157 if (num834 < 0f)
26158 {
26159 spriteDirection = -1;
26160 rotation = (float)Math.Atan2(num835, num834) + 3.14f;
26161 }
26162 }
26163 else if (aiStyle == 54)
26164 {
26166 if (Main.netMode != 1 && localAI[0] == 0f)
26167 {
26168 localAI[0] = 1f;
26171 {
26172 float x2 = base.Center.X;
26173 float y4 = base.Center.Y;
26174 x2 += (float)Main.rand.Next(-width, width);
26175 y4 += (float)Main.rand.Next(-height, height);
26176 int num838 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)x2, (int)y4, 267);
26177 Main.npc[num838].velocity = new Vector2((float)Main.rand.Next(-30, 31) * 0.1f, (float)Main.rand.Next(-30, 31) * 0.1f);
26178 Main.npc[num838].netUpdate = true;
26179 }
26180 }
26181 if (Main.netMode != 1)
26182 {
26183 TargetClosest();
26184 int num839 = 6000;
26185 if (Math.Abs(base.Center.X - Main.player[target].Center.X) + Math.Abs(base.Center.Y - Main.player[target].Center.Y) > (float)num839)
26186 {
26187 active = false;
26188 life = 0;
26189 if (Main.netMode == 2)
26190 {
26191 NetMessage.SendData(23, -1, -1, null, whoAmI);
26192 }
26193 }
26194 }
26195 if (this.ai[0] < 0f)
26196 {
26197 if (Main.getGoodWorld)
26198 {
26200 }
26201 if (localAI[2] == 0f)
26202 {
26203 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y);
26204 localAI[2] = 1f;
26205 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 392);
26206 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 393);
26207 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 394);
26208 Gore.NewGore(position, new Vector2((float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f), 395);
26209 for (int num840 = 0; num840 < 20; num840++)
26210 {
26211 Dust.NewDust(position, width, height, 5, (float)Main.rand.Next(-30, 31) * 0.2f, (float)Main.rand.Next(-30, 31) * 0.2f);
26212 }
26213 SoundEngine.PlaySound(15, (int)position.X, (int)position.Y, 0);
26214 }
26215 dontTakeDamage = false;
26216 TargetClosest();
26217 Vector2 vector104 = new Vector2(base.Center.X, base.Center.Y);
26218 float num841 = Main.player[target].Center.X - vector104.X;
26219 float num842 = Main.player[target].Center.Y - vector104.Y;
26220 float num843 = (float)Math.Sqrt(num841 * num841 + num842 * num842);
26221 float num844 = 8f;
26222 num843 = num844 / num843;
26223 num841 *= num843;
26224 num842 *= num843;
26225 velocity.X = (velocity.X * 50f + num841) / 51f;
26226 velocity.Y = (velocity.Y * 50f + num842) / 51f;
26227 if (this.ai[0] == -1f)
26228 {
26229 if (Main.netMode != 1)
26230 {
26231 localAI[1] += 1f;
26232 if (justHit)
26233 {
26234 localAI[1] -= Main.rand.Next(5);
26235 }
26236 int num845 = 60 + Main.rand.Next(120);
26237 if (Main.netMode != 0)
26238 {
26239 num845 += Main.rand.Next(30, 90);
26240 }
26241 if (localAI[1] >= (float)num845)
26242 {
26243 localAI[1] = 0f;
26244 TargetClosest();
26245 int num846 = 0;
26246 Player player2 = Main.player[target];
26247 do
26248 {
26249 num846++;
26250 int num847 = (int)player2.Center.X / 16;
26251 int num848 = (int)player2.Center.Y / 16;
26252 int minValue = 10;
26253 int num849 = 12;
26254 float num850 = 16f;
26255 int num851 = Main.rand.Next(minValue, num849 + 1);
26256 int num852 = Main.rand.Next(minValue, num849 + 1);
26257 if (Main.rand.Next(2) == 0)
26258 {
26259 num851 *= -1;
26260 }
26261 if (Main.rand.Next(2) == 0)
26262 {
26263 num852 *= -1;
26264 }
26265 Vector2 v = new Vector2(num851 * 16, num852 * 16);
26266 if (Vector2.Dot(player2.velocity.SafeNormalize(Vector2.UnitY), v.SafeNormalize(Vector2.UnitY)) > 0f)
26267 {
26268 v += v.SafeNormalize(Vector2.Zero) * num850 * player2.velocity.Length();
26269 }
26270 num847 += (int)(v.X / 16f);
26271 num848 += (int)(v.Y / 16f);
26272 if (num846 > 100 || !WorldGen.SolidTile(num847, num848))
26273 {
26274 this.ai[3] = 0f;
26275 this.ai[0] = -2f;
26276 this.ai[1] = num847;
26277 this.ai[2] = num848;
26278 netUpdate = true;
26279 netSpam = 0;
26280 break;
26281 }
26282 }
26283 while (num846 <= 100);
26284 }
26285 }
26286 }
26287 else if (this.ai[0] == -2f)
26288 {
26289 velocity *= 0.9f;
26290 if (Main.netMode != 0)
26291 {
26292 this.ai[3] += 15f;
26293 }
26294 else
26295 {
26296 this.ai[3] += 25f;
26297 }
26298 if (this.ai[3] >= 255f)
26299 {
26300 this.ai[3] = 255f;
26301 position.X = this.ai[1] * 16f - (float)(width / 2);
26302 position.Y = this.ai[2] * 16f - (float)(height / 2);
26304 this.ai[0] = -3f;
26305 netUpdate = true;
26306 netSpam = 0;
26307 }
26308 alpha = (int)this.ai[3];
26309 }
26310 else if (this.ai[0] == -3f)
26311 {
26312 if (Main.netMode != 0)
26313 {
26314 this.ai[3] -= 15f;
26315 }
26316 else
26317 {
26318 this.ai[3] -= 25f;
26319 }
26320 if (this.ai[3] <= 0f)
26321 {
26322 this.ai[3] = 0f;
26323 this.ai[0] = -1f;
26324 netUpdate = true;
26325 netSpam = 0;
26326 }
26327 alpha = (int)this.ai[3];
26328 }
26329 }
26330 else
26331 {
26332 TargetClosest();
26333 Vector2 vector105 = new Vector2(base.Center.X, base.Center.Y);
26334 float num853 = Main.player[target].Center.X - vector105.X;
26335 float num854 = Main.player[target].Center.Y - vector105.Y;
26336 float num855 = (float)Math.Sqrt(num853 * num853 + num854 * num854);
26337 float num856 = 1f;
26338 if (Main.getGoodWorld)
26339 {
26340 num856 *= 3f;
26341 }
26342 if (num855 < num856)
26343 {
26344 velocity.X = num853;
26345 velocity.Y = num854;
26346 }
26347 else
26348 {
26349 num855 = num856 / num855;
26350 velocity.X = num853 * num855;
26351 velocity.Y = num854 * num855;
26352 }
26353 if (this.ai[0] == 0f)
26354 {
26355 if (Main.netMode != 1)
26356 {
26357 int num857 = 0;
26358 for (int num858 = 0; num858 < 200; num858++)
26359 {
26360 if (Main.npc[num858].active && Main.npc[num858].type == 267)
26361 {
26362 num857++;
26363 }
26364 }
26365 if (num857 == 0)
26366 {
26367 this.ai[0] = -1f;
26368 localAI[1] = 0f;
26369 alpha = 0;
26370 netUpdate = true;
26371 }
26372 localAI[1] += 1f;
26373 if (localAI[1] >= (float)(120 + Main.rand.Next(300)))
26374 {
26375 localAI[1] = 0f;
26376 TargetClosest();
26377 int num859 = 0;
26378 Player player3 = Main.player[target];
26379 do
26380 {
26381 num859++;
26382 int num860 = (int)player3.Center.X / 16;
26383 int num861 = (int)player3.Center.Y / 16;
26384 int minValue2 = 12;
26385 int num862 = 40;
26386 float num863 = 16f;
26387 int num864 = Main.rand.Next(minValue2, num862 + 1);
26388 int num865 = Main.rand.Next(minValue2, num862 + 1);
26389 if (Main.rand.Next(2) == 0)
26390 {
26391 num864 *= -1;
26392 }
26393 if (Main.rand.Next(2) == 0)
26394 {
26395 num865 *= -1;
26396 }
26397 Vector2 v2 = new Vector2(num864 * 16, num865 * 16);
26398 if (Vector2.Dot(player3.velocity.SafeNormalize(Vector2.UnitY), v2.SafeNormalize(Vector2.UnitY)) > 0f)
26399 {
26400 v2 += v2.SafeNormalize(Vector2.Zero) * num863 * player3.velocity.Length();
26401 }
26402 num860 += (int)(v2.X / 16f);
26403 num861 += (int)(v2.Y / 16f);
26404 if (num859 > 100 || (!WorldGen.SolidTile(num860, num861) && (num859 > 75 || Collision.CanHit(new Vector2(num860 * 16, num861 * 16), 1, 1, Main.player[target].position, Main.player[target].width, Main.player[target].height))))
26405 {
26406 this.ai[0] = 1f;
26407 this.ai[1] = num860;
26408 this.ai[2] = num861;
26409 netUpdate = true;
26410 break;
26411 }
26412 }
26413 while (num859 <= 100);
26414 }
26415 }
26416 }
26417 else if (this.ai[0] == 1f)
26418 {
26419 alpha += 5;
26420 if (alpha >= 255)
26421 {
26423 alpha = 255;
26424 position.X = this.ai[1] * 16f - (float)(width / 2);
26425 position.Y = this.ai[2] * 16f - (float)(height / 2);
26426 this.ai[0] = 2f;
26427 }
26428 }
26429 else if (this.ai[0] == 2f)
26430 {
26431 alpha -= 5;
26432 if (alpha <= 0)
26433 {
26434 alpha = 0;
26435 this.ai[0] = 0f;
26436 }
26437 }
26438 }
26439 if (Main.player[target].dead || !Main.player[target].ZoneCrimson)
26440 {
26441 if (localAI[3] < 120f)
26442 {
26443 localAI[3]++;
26444 }
26445 if (localAI[3] > 60f)
26446 {
26447 velocity.Y += (localAI[3] - 60f) * 0.25f;
26448 }
26449 this.ai[0] = 2f;
26450 alpha = 10;
26451 }
26452 else if (localAI[3] > 0f)
26453 {
26454 localAI[3]--;
26455 }
26456 }
26457 else if (aiStyle == 55)
26458 {
26459 if (crimsonBoss < 0)
26460 {
26461 active = false;
26462 netUpdate = true;
26463 return;
26464 }
26465 if (this.ai[0] == 0f)
26466 {
26467 this.ai[1] = 0f;
26468 Vector2 vector106 = new Vector2(base.Center.X, base.Center.Y);
26469 float num866 = Main.npc[crimsonBoss].Center.X - vector106.X;
26470 float num867 = Main.npc[crimsonBoss].Center.Y - vector106.Y;
26471 float num868 = (float)Math.Sqrt(num866 * num866 + num867 * num867);
26472 if (num868 > 90f)
26473 {
26474 num868 = 8f / num868;
26475 num866 *= num868;
26476 num867 *= num868;
26477 velocity.X = (velocity.X * 15f + num866) / 16f;
26478 velocity.Y = (velocity.Y * 15f + num867) / 16f;
26479 return;
26480 }
26481 if (Math.Abs(velocity.X) + Math.Abs(velocity.Y) < 8f)
26482 {
26483 velocity.Y *= 1.05f;
26484 velocity.X *= 1.05f;
26485 }
26486 if (Main.netMode != 1 && ((Main.expertMode && Main.rand.Next(100) == 0) || Main.rand.Next(200) == 0))
26487 {
26488 TargetClosest();
26489 vector106 = new Vector2(base.Center.X, base.Center.Y);
26490 num866 = Main.player[target].Center.X - vector106.X;
26491 num867 = Main.player[target].Center.Y - vector106.Y;
26492 num868 = (float)Math.Sqrt(num866 * num866 + num867 * num867);
26493 num868 = 8f / num868;
26494 velocity.X = num866 * num868;
26495 velocity.Y = num867 * num868;
26496 this.ai[0] = 1f;
26497 netUpdate = true;
26498 }
26499 return;
26500 }
26501 if (Main.expertMode)
26502 {
26503 Vector2 vector107 = Main.player[target].Center - base.Center;
26504 vector107.Normalize();
26505 if (Main.getGoodWorld)
26506 {
26507 vector107 *= 12f;
26508 velocity = (velocity * 49f + vector107) / 50f;
26509 }
26510 else
26511 {
26512 vector107 *= 9f;
26513 velocity = (velocity * 99f + vector107) / 100f;
26514 }
26515 }
26516 Vector2 vector108 = new Vector2(base.Center.X, base.Center.Y);
26517 float num869 = Main.npc[crimsonBoss].Center.X - vector108.X;
26518 float num870 = Main.npc[crimsonBoss].Center.Y - vector108.Y;
26519 float num871 = (float)Math.Sqrt(num869 * num869 + num870 * num870);
26520 if (num871 > 700f)
26521 {
26522 this.ai[0] = 0f;
26523 }
26524 else
26525 {
26526 if (!justHit)
26527 {
26528 return;
26529 }
26530 if (knockBackResist == 0f)
26531 {
26532 this.ai[1] += 1f;
26533 if (this.ai[1] > 5f)
26534 {
26535 this.ai[0] = 0f;
26536 }
26537 }
26538 else
26539 {
26540 this.ai[0] = 0f;
26541 }
26542 }
26543 }
26544 else if (aiStyle == 56)
26545 {
26546 TargetClosest();
26547 Vector2 vector109 = new Vector2(base.Center.X, base.Center.Y);
26548 float num872 = Main.player[target].Center.X - vector109.X;
26549 float num873 = Main.player[target].Center.Y - vector109.Y;
26550 float num874 = (float)Math.Sqrt(num872 * num872 + num873 * num873);
26551 float num875 = 12f;
26552 num874 = num875 / num874;
26553 num872 *= num874;
26554 num873 *= num874;
26555 velocity.X = (velocity.X * 100f + num872) / 101f;
26556 velocity.Y = (velocity.Y * 100f + num873) / 101f;
26557 rotation = (float)Math.Atan2(num873, num872) - 1.57f;
26559 int num876 = Dust.NewDust(position, width, height, 180);
26560 Dust dust = Main.dust[num876];
26561 dust.velocity *= 0.1f;
26562 Main.dust[num876].scale = 1.3f;
26563 Main.dust[num876].noGravity = true;
26565 }
26566 else if (aiStyle == 57)
26567 {
26568 float num877 = 2f;
26569 noGravity = true;
26570 noTileCollide = true;
26571 if (!Main.dayTime)
26572 {
26573 TargetClosest();
26574 }
26575 bool flag45 = false;
26576 if ((double)life < (double)lifeMax * 0.75)
26577 {
26578 num877 = 3f;
26579 }
26580 if ((double)life < (double)lifeMax * 0.5)
26581 {
26582 num877 = 4f;
26583 }
26584 if (type == 344)
26585 {
26586 Lighting.AddLight(base.Bottom + new Vector2(0f, -30f), 0.3f, 0.16f, 0.125f);
26587 }
26588 if (type == 325)
26589 {
26590 Lighting.AddLight(base.Bottom + new Vector2(0f, -30f), 0.3f, 0.125f, 0.06f);
26591 }
26592 if (Main.dayTime)
26593 {
26594 EncourageDespawn(10);
26595 num877 = 8f;
26596 }
26597 else if (this.ai[0] == 0f)
26598 {
26599 this.ai[1] += 1f;
26600 if ((double)life < (double)lifeMax * 0.5)
26601 {
26602 this.ai[1] += 1f;
26603 }
26604 if ((double)life < (double)lifeMax * 0.25)
26605 {
26606 this.ai[1] += 1f;
26607 }
26608 if (this.ai[1] >= 300f && Main.netMode != 1)
26609 {
26610 this.ai[1] = 0f;
26611 if ((double)life < (double)lifeMax * 0.25 && type != 344)
26612 {
26613 this.ai[0] = Main.rand.Next(3, 5);
26614 }
26615 else
26616 {
26617 this.ai[0] = Main.rand.Next(1, 3);
26618 }
26619 netUpdate = true;
26620 }
26621 }
26622 else if (this.ai[0] == 1f)
26623 {
26624 if (type == 344)
26625 {
26626 if (Main.rand.Next(5) == 0)
26627 {
26628 int num878 = Dust.NewDust(position + Main.rand.NextVector2Square(0f, 1f) * base.Size - new Vector2(1f, 2f), 10, 14, 245, 0f, 0f, 254, Color.Transparent, 0.25f);
26629 Dust dust = Main.dust[num878];
26630 dust.velocity *= 0.2f;
26631 }
26632 flag45 = true;
26633 this.ai[1] += 1f;
26634 if (this.ai[1] % 5f == 0f)
26635 {
26636 Vector2 vector110 = new Vector2(position.X + 20f + (float)Main.rand.Next(width - 40), position.Y + 20f + (float)Main.rand.Next(height - 40));
26637 float num879 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector110.X;
26638 float num880 = Main.player[target].position.Y - vector110.Y;
26639 num879 += (float)Main.rand.Next(-50, 51);
26640 num880 += (float)Main.rand.Next(-50, 51);
26641 num880 -= Math.Abs(num879) * ((float)Main.rand.Next(0, 21) * 0.01f);
26642 float num881 = (float)Math.Sqrt(num879 * num879 + num880 * num880);
26643 float num882 = 12.5f;
26644 num881 = num882 / num881;
26645 num879 *= num881;
26646 num880 *= num881;
26647 num879 *= 1f + (float)Main.rand.Next(-20, 21) * 0.02f;
26648 num880 *= 1f + (float)Main.rand.Next(-20, 21) * 0.02f;
26649 int num883 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector110.X, vector110.Y, num879, num880, 345, 43, 0f, Main.myPlayer, Main.rand.Next(0, 31));
26650 }
26651 if (this.ai[1] >= 180f)
26652 {
26653 this.ai[1] = 0f;
26654 this.ai[0] = 0f;
26655 }
26656 }
26657 else
26658 {
26659 flag45 = true;
26660 this.ai[1] += 1f;
26661 if (this.ai[1] % 15f == 0f)
26662 {
26663 Vector2 vector111 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
26664 float num884 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector111.X;
26665 float num885 = Main.player[target].position.Y - vector111.Y;
26666 float num886 = (float)Math.Sqrt(num884 * num884 + num885 * num885);
26667 float num887 = 10f;
26668 num886 = num887 / num886;
26669 num884 *= num886;
26670 num885 *= num886;
26671 num884 *= 1f + (float)Main.rand.Next(-20, 21) * 0.01f;
26672 num885 *= 1f + (float)Main.rand.Next(-20, 21) * 0.01f;
26673 int num888 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector111.X, vector111.Y, num884, num885, 325, 50, 0f, Main.myPlayer);
26674 }
26675 if (this.ai[1] >= 120f)
26676 {
26677 this.ai[1] = 0f;
26678 this.ai[0] = 0f;
26679 }
26680 }
26681 }
26682 else if (this.ai[0] == 2f)
26683 {
26684 if (type == 344)
26685 {
26686 flag45 = true;
26687 this.ai[1] += 1f;
26688 if (this.ai[1] > 60f && this.ai[1] < 240f && this.ai[1] % 15f == 0f)
26689 {
26690 float num889 = 4.5f;
26691 Vector2 vector112 = new Vector2(position.X + 20f + (float)Main.rand.Next(width - 40), position.Y + 60f + (float)Main.rand.Next(height - 80));
26692 float num890 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector112.X;
26693 float num891 = Main.player[target].position.Y - vector112.Y;
26694 num891 -= Math.Abs(num890) * 0.3f;
26695 num889 += Math.Abs(num890) * 0.004f;
26696 num890 += (float)Main.rand.Next(-50, 51);
26697 num891 -= (float)Main.rand.Next(50, 201);
26698 float num892 = (float)Math.Sqrt(num890 * num890 + num891 * num891);
26699 num892 = num889 / num892;
26700 num890 *= num892;
26701 num891 *= num892;
26702 num890 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26703 num891 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26704 int num893 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector112.X, vector112.Y, num890, num891, 346, 57, 0f, Main.myPlayer, 0f, Main.rand.Next(2));
26705 }
26706 if (this.ai[1] >= 300f)
26707 {
26708 this.ai[1] = 0f;
26709 this.ai[0] = 0f;
26710 }
26711 }
26712 else
26713 {
26714 flag45 = true;
26715 this.ai[1] += 1f;
26716 if (this.ai[1] > 60f && this.ai[1] < 240f && this.ai[1] % 8f == 0f)
26717 {
26718 float num894 = 10f;
26719 Vector2 vector113 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
26720 float num895 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector113.X;
26721 float num896 = Main.player[target].position.Y - vector113.Y;
26722 num896 -= Math.Abs(num895) * 0.3f;
26723 num894 += Math.Abs(num895) * 0.004f;
26724 if (num894 > 14f)
26725 {
26726 num894 = 14f;
26727 }
26728 num895 += (float)Main.rand.Next(-50, 51);
26729 num896 -= (float)Main.rand.Next(50, 201);
26730 float num897 = (float)Math.Sqrt(num895 * num895 + num896 * num896);
26731 num897 = num894 / num897;
26732 num895 *= num897;
26733 num896 *= num897;
26734 num895 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26735 num896 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26736 int num898 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector113.X, vector113.Y, num895, num896, Main.rand.Next(326, 329), 40, 0f, Main.myPlayer);
26737 }
26738 if (this.ai[1] >= 300f)
26739 {
26740 this.ai[1] = 0f;
26741 this.ai[0] = 0f;
26742 }
26743 }
26744 }
26745 else if (this.ai[0] == 3f)
26746 {
26747 num877 = 4f;
26748 this.ai[1] += 1f;
26749 if (this.ai[1] % 30f == 0f)
26750 {
26751 Vector2 vector114 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
26752 float num899 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector114.X;
26753 float num900 = Main.player[target].position.Y - vector114.Y;
26754 float num901 = (float)Math.Sqrt(num899 * num899 + num900 * num900);
26755 float num902 = 16f;
26756 num901 = num902 / num901;
26757 num899 *= num901;
26758 num900 *= num901;
26759 num899 *= 1f + (float)Main.rand.Next(-20, 21) * 0.001f;
26760 num900 *= 1f + (float)Main.rand.Next(-20, 21) * 0.001f;
26761 int num903 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector114.X, vector114.Y, num899, num900, 325, 75, 0f, Main.myPlayer);
26762 }
26763 if (this.ai[1] >= 120f)
26764 {
26765 this.ai[1] = 0f;
26766 this.ai[0] = 0f;
26767 }
26768 }
26769 else if (this.ai[0] == 4f)
26770 {
26771 num877 = 4f;
26772 this.ai[1] += 1f;
26773 if (this.ai[1] % 10f == 0f)
26774 {
26775 float num904 = 12f;
26776 Vector2 vector115 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
26777 float num905 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector115.X;
26778 float num906 = Main.player[target].position.Y - vector115.Y;
26779 num906 -= Math.Abs(num905) * 0.2f;
26780 num904 += Math.Abs(num905) * 0.002f;
26781 if (num904 > 16f)
26782 {
26783 num904 = 16f;
26784 }
26785 num905 += (float)Main.rand.Next(-50, 51);
26786 num906 -= (float)Main.rand.Next(50, 201);
26787 float num907 = (float)Math.Sqrt(num905 * num905 + num906 * num906);
26788 num907 = num904 / num907;
26789 num905 *= num907;
26790 num906 *= num907;
26791 num905 *= 1f + (float)Main.rand.Next(-30, 31) * 0.005f;
26792 num906 *= 1f + (float)Main.rand.Next(-30, 31) * 0.005f;
26793 int num908 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector115.X, vector115.Y, num905, num906, Main.rand.Next(326, 329), 50, 0f, Main.myPlayer);
26794 }
26795 if (this.ai[1] >= 240f)
26796 {
26797 this.ai[1] = 0f;
26798 this.ai[0] = 0f;
26799 }
26800 }
26801 if (Math.Abs(base.Center.X - Main.player[target].Center.X) < 50f)
26802 {
26803 flag45 = true;
26804 }
26805 if (flag45)
26806 {
26807 velocity.X *= 0.9f;
26808 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
26809 {
26810 velocity.X = 0f;
26811 }
26812 }
26813 else
26814 {
26815 if (direction > 0)
26816 {
26817 velocity.X = (velocity.X * 20f + num877) / 21f;
26818 }
26819 if (direction < 0)
26820 {
26821 velocity.X = (velocity.X * 20f - num877) / 21f;
26822 }
26823 }
26824 int num909 = 80;
26825 int num910 = 20;
26826 Vector2 vector116 = new Vector2(base.Center.X - (float)(num909 / 2), position.Y + (float)height - (float)num910);
26827 bool flag46 = false;
26828 if (position.X < Main.player[target].position.X && position.X + (float)width > Main.player[target].position.X + (float)Main.player[target].width && position.Y + (float)height < Main.player[target].position.Y + (float)Main.player[target].height - 16f)
26829 {
26830 flag46 = true;
26831 }
26832 if (flag46)
26833 {
26834 velocity.Y += 0.5f;
26835 }
26836 else if (Collision.SolidCollision(vector116, num909, num910))
26837 {
26838 if (velocity.Y > 0f)
26839 {
26840 velocity.Y = 0f;
26841 }
26842 if ((double)velocity.Y > -0.2)
26843 {
26844 velocity.Y -= 0.025f;
26845 }
26846 else
26847 {
26848 velocity.Y -= 0.2f;
26849 }
26850 if (velocity.Y < -4f)
26851 {
26852 velocity.Y = -4f;
26853 }
26854 }
26855 else
26856 {
26857 if (velocity.Y < 0f)
26858 {
26859 velocity.Y = 0f;
26860 }
26861 if ((double)velocity.Y < 0.1)
26862 {
26863 velocity.Y += 0.025f;
26864 }
26865 else
26866 {
26867 velocity.Y += 0.5f;
26868 }
26869 }
26870 if (velocity.Y > 10f)
26871 {
26872 velocity.Y = 10f;
26873 }
26874 }
26875 else if (aiStyle == 58)
26876 {
26877 localAI[0] += 1f;
26878 if (localAI[0] > 6f)
26879 {
26880 localAI[0] = 0f;
26881 localAI[1] += 1f;
26882 if (localAI[1] > 4f)
26883 {
26884 localAI[1] = 0f;
26885 }
26886 }
26887 if (type == 327)
26888 {
26889 Lighting.AddLight(base.Center, 0.4f, 0.4f, 0.2f);
26890 }
26891 if (Main.netMode != 1)
26892 {
26893 localAI[2] += 1f;
26894 if (localAI[2] > 300f)
26895 {
26896 this.ai[3] = Main.rand.Next(3);
26897 localAI[2] = 0f;
26898 }
26899 else if (this.ai[3] == 0f && localAI[2] % 30f == 0f && localAI[2] > 30f)
26900 {
26901 float num911 = 5f;
26902 Vector2 vector117 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
26903 if (!WorldGen.SolidTile((int)vector117.X / 16, (int)vector117.Y / 16))
26904 {
26905 float num912 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector117.X;
26906 float num913 = Main.player[target].position.Y - vector117.Y;
26907 num912 += (float)Main.rand.Next(-50, 51);
26908 num913 += (float)Main.rand.Next(50, 201);
26909 num913 *= 0.2f;
26910 float num914 = (float)Math.Sqrt(num912 * num912 + num913 * num913);
26911 num914 = num911 / num914;
26912 num912 *= num914;
26913 num913 *= num914;
26914 num912 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26915 num913 *= 1f + (float)Main.rand.Next(-30, 31) * 0.01f;
26916 int num915 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector117.X, vector117.Y, num912, num913, Main.rand.Next(326, 329), 40, 0f, Main.myPlayer);
26917 }
26918 }
26919 }
26920 if (this.ai[0] == 0f && Main.netMode != 1)
26921 {
26922 TargetClosest();
26923 this.ai[0] = 1f;
26924 int num916 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 328, whoAmI);
26925 Main.npc[num916].ai[0] = -1f;
26926 Main.npc[num916].ai[1] = whoAmI;
26927 Main.npc[num916].target = target;
26928 Main.npc[num916].netUpdate = true;
26929 num916 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)(position.X + (float)(width / 2)), (int)position.Y + height / 2, 328, whoAmI);
26930 Main.npc[num916].ai[0] = 1f;
26931 Main.npc[num916].ai[1] = whoAmI;
26932 Main.npc[num916].ai[3] = 150f;
26933 Main.npc[num916].target = target;
26934 Main.npc[num916].netUpdate = true;
26935 }
26936 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 2000f || Math.Abs(position.Y - Main.player[target].position.Y) > 2000f)
26937 {
26938 TargetClosest();
26939 if (Main.player[target].dead || Math.Abs(position.X - Main.player[target].position.X) > 2000f || Math.Abs(position.Y - Main.player[target].position.Y) > 2000f)
26940 {
26941 this.ai[1] = 2f;
26942 }
26943 }
26944 if (Main.dayTime)
26945 {
26946 velocity.Y += 0.3f;
26947 velocity.X *= 0.9f;
26948 }
26949 else if (this.ai[1] == 0f)
26950 {
26951 this.ai[2] += 1f;
26952 if (this.ai[2] >= 300f)
26953 {
26954 if (this.ai[3] != 1f)
26955 {
26956 this.ai[1] = 0f;
26957 this.ai[2] = 0f;
26958 }
26959 else
26960 {
26961 this.ai[2] = 0f;
26962 this.ai[1] = 1f;
26963 TargetClosest();
26964 netUpdate = true;
26965 }
26966 }
26967 Vector2 vector118 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
26968 float num917 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector118.X;
26969 float num918 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - 200f - vector118.Y;
26970 float num919 = (float)Math.Sqrt(num917 * num917 + num918 * num918);
26971 float num920 = 6f;
26972 if (this.ai[3] == 1f)
26973 {
26974 if (num919 > 900f)
26975 {
26976 num920 = 12f;
26977 }
26978 else if (num919 > 600f)
26979 {
26980 num920 = 10f;
26981 }
26982 else if (num919 > 300f)
26983 {
26984 num920 = 8f;
26985 }
26986 }
26987 if (num919 > 50f)
26988 {
26989 num919 = num920 / num919;
26990 velocity.X = (velocity.X * 14f + num917 * num919) / 15f;
26991 velocity.Y = (velocity.Y * 14f + num918 * num919) / 15f;
26992 }
26993 }
26994 else if (this.ai[1] == 1f)
26995 {
26996 this.ai[2] += 1f;
26997 if (this.ai[2] >= 600f || this.ai[3] != 1f)
26998 {
26999 this.ai[2] = 0f;
27000 this.ai[1] = 0f;
27001 }
27002 Vector2 vector119 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27003 float num921 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector119.X;
27004 float num922 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector119.Y;
27005 float num923 = (float)Math.Sqrt(num921 * num921 + num922 * num922);
27006 num923 = 16f / num923;
27007 velocity.X = (velocity.X * 49f + num921 * num923) / 50f;
27008 velocity.Y = (velocity.Y * 49f + num922 * num923) / 50f;
27009 }
27010 else if (this.ai[1] == 2f)
27011 {
27012 this.ai[1] = 3f;
27013 velocity.Y += 0.1f;
27014 if (velocity.Y < 0f)
27015 {
27016 velocity.Y *= 0.95f;
27017 }
27018 velocity.X *= 0.95f;
27019 EncourageDespawn(500);
27020 }
27021 rotation = velocity.X * -0.02f;
27022 }
27023 else if (aiStyle == 59)
27024 {
27025 spriteDirection = -(int)this.ai[0];
27026 if (!Main.npc[(int)this.ai[1]].active || Main.npc[(int)this.ai[1]].aiStyle != 58)
27027 {
27028 this.ai[2] += 10f;
27029 if (this.ai[2] > 50f || Main.netMode != 2)
27030 {
27031 life = -1;
27032 HitEffect();
27033 active = false;
27034 }
27035 }
27036 if (Main.netMode != 1 && Main.npc[(int)this.ai[1]].ai[3] == 2f)
27037 {
27038 localAI[1] += 1f;
27039 if (localAI[1] > 90f)
27040 {
27041 localAI[1] = 0f;
27042 float num924 = 0.01f;
27043 Vector2 vector120 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f + 30f);
27044 float num925 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector120.X;
27045 float num926 = Main.player[target].position.Y - vector120.Y;
27046 float num927 = (float)Math.Sqrt(num925 * num925 + num926 * num926);
27047 num927 = num924 / num927;
27048 num925 *= num927;
27049 num926 *= num927;
27050 int num928 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, num925, num926, 329, 60, 0f, Main.myPlayer, rotation, spriteDirection);
27051 }
27052 }
27053 if (Main.dayTime)
27054 {
27055 velocity.Y += 0.3f;
27056 velocity.X *= 0.9f;
27057 }
27058 else if (this.ai[2] == 0f || this.ai[2] == 3f)
27059 {
27060 if (Main.npc[(int)this.ai[1]].ai[1] == 3f)
27061 {
27062 EncourageDespawn(10);
27063 }
27064 this.ai[3] += 1f;
27065 if (this.ai[3] >= 180f)
27066 {
27067 this.ai[2] += 1f;
27068 this.ai[3] = 0f;
27069 netUpdate = true;
27070 }
27071 Vector2 vector121 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27072 float num929 = (Main.player[target].Center.X + Main.npc[(int)this.ai[1]].Center.X) / 2f;
27073 float num930 = (Main.player[target].Center.Y + Main.npc[(int)this.ai[1]].Center.Y) / 2f;
27074 num929 += -170f * this.ai[0] - vector121.X;
27075 num930 += 90f - vector121.Y;
27076 float num931 = Math.Abs(Main.player[target].Center.X - Main.npc[(int)this.ai[1]].Center.X) + Math.Abs(Main.player[target].Center.Y - Main.npc[(int)this.ai[1]].Center.Y);
27077 if (num931 > 700f)
27078 {
27079 num929 = Main.npc[(int)this.ai[1]].Center.X - 170f * this.ai[0] - vector121.X;
27080 num930 = Main.npc[(int)this.ai[1]].Center.Y + 90f - vector121.Y;
27081 }
27082 float num932 = (float)Math.Sqrt(num929 * num929 + num930 * num930);
27083 float num933 = 6f;
27084 if (num932 > 1000f)
27085 {
27086 num933 = 21f;
27087 }
27088 else if (num932 > 800f)
27089 {
27090 num933 = 18f;
27091 }
27092 else if (num932 > 600f)
27093 {
27094 num933 = 15f;
27095 }
27096 else if (num932 > 400f)
27097 {
27098 num933 = 12f;
27099 }
27100 else if (num932 > 200f)
27101 {
27102 num933 = 9f;
27103 }
27104 if (this.ai[0] < 0f && base.Center.X > Main.npc[(int)this.ai[1]].Center.X)
27105 {
27106 num929 -= 4f;
27107 }
27108 if (this.ai[0] > 0f && base.Center.X < Main.npc[(int)this.ai[1]].Center.X)
27109 {
27110 num929 += 4f;
27111 }
27112 num932 = num933 / num932;
27113 velocity.X = (velocity.X * 14f + num929 * num932) / 15f;
27114 velocity.Y = (velocity.Y * 14f + num930 * num932) / 15f;
27115 num932 = (float)Math.Sqrt(num929 * num929 + num930 * num930);
27116 if (num932 > 20f)
27117 {
27118 rotation = (float)Math.Atan2(num930, num929) + 1.57f;
27119 }
27120 }
27121 else if (this.ai[2] == 1f)
27122 {
27123 Vector2 vector122 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27124 float num934 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector122.X;
27125 float num935 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector122.Y;
27126 float num936 = (float)Math.Sqrt(num934 * num934 + num935 * num935);
27127 rotation = (float)Math.Atan2(num935, num934) + 1.57f;
27128 velocity.X *= 0.95f;
27129 velocity.Y -= 0.3f;
27130 if (velocity.Y < -14f)
27131 {
27132 velocity.Y = -14f;
27133 }
27134 if (position.Y < Main.npc[(int)this.ai[1]].position.Y - 200f)
27135 {
27136 TargetClosest();
27137 this.ai[2] = 2f;
27138 vector122 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27139 num934 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector122.X;
27140 num935 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector122.Y;
27141 num936 = (float)Math.Sqrt(num934 * num934 + num935 * num935);
27142 num936 = 18f / num936;
27143 velocity.X = num934 * num936;
27144 velocity.Y = num935 * num936;
27145 netUpdate = true;
27146 }
27147 }
27148 else if (this.ai[2] == 2f)
27149 {
27150 float num937 = Math.Abs(base.Center.X - Main.npc[(int)this.ai[1]].Center.X) + Math.Abs(base.Center.Y - Main.npc[(int)this.ai[1]].Center.Y);
27151 if (position.Y > Main.player[target].position.Y || velocity.Y < 0f || num937 > 800f)
27152 {
27153 this.ai[2] = 3f;
27154 }
27155 }
27156 else if (this.ai[2] == 4f)
27157 {
27158 Vector2 vector123 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27159 float num938 = Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 200f * this.ai[0] - vector123.X;
27160 float num939 = Main.npc[(int)this.ai[1]].position.Y + 230f - vector123.Y;
27161 float num940 = (float)Math.Sqrt(num938 * num938 + num939 * num939);
27162 rotation = (float)Math.Atan2(num939, num938) + 1.57f;
27163 velocity.Y *= 0.95f;
27164 velocity.X += 0.3f * (0f - this.ai[0]);
27165 if (velocity.X < -14f)
27166 {
27167 velocity.X = -14f;
27168 }
27169 if (velocity.X > 14f)
27170 {
27171 velocity.X = 14f;
27172 }
27173 if (position.X + (float)(width / 2) < Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) - 500f || position.X + (float)(width / 2) > Main.npc[(int)this.ai[1]].position.X + (float)(Main.npc[(int)this.ai[1]].width / 2) + 500f)
27174 {
27175 TargetClosest();
27176 this.ai[2] = 5f;
27177 vector123 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
27178 num938 = Main.player[target].position.X + (float)(Main.player[target].width / 2) - vector123.X;
27179 num939 = Main.player[target].position.Y + (float)(Main.player[target].height / 2) - vector123.Y;
27180 num940 = (float)Math.Sqrt(num938 * num938 + num939 * num939);
27181 num940 = 17f / num940;
27182 velocity.X = num938 * num940;
27183 velocity.Y = num939 * num940;
27184 netUpdate = true;
27185 }
27186 }
27187 else if (this.ai[2] == 5f)
27188 {
27189 float num941 = Math.Abs(base.Center.X - Main.npc[(int)this.ai[1]].Center.X) + Math.Abs(base.Center.Y - Main.npc[(int)this.ai[1]].Center.Y);
27190 if ((velocity.X > 0f && 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)) || num941 > 800f)
27191 {
27192 this.ai[2] = 0f;
27193 }
27194 }
27195 }
27196 else if (aiStyle == 60)
27197 {
27198 if (Main.dayTime)
27199 {
27200 if (velocity.X > 0f)
27201 {
27202 velocity.X += 0.25f;
27203 }
27204 else
27205 {
27206 velocity.X -= 0.25f;
27207 }
27208 velocity.Y -= 0.1f;
27209 rotation = velocity.X * 0.05f;
27210 }
27211 else if (this.ai[0] == 0f)
27212 {
27213 if (this.ai[2] == 0f)
27214 {
27215 TargetClosest();
27216 if (base.Center.X < Main.player[target].Center.X)
27217 {
27218 this.ai[2] = 1f;
27219 }
27220 else
27221 {
27222 this.ai[2] = -1f;
27223 }
27224 }
27225 TargetClosest();
27226 int num942 = 800;
27227 float num943 = Math.Abs(base.Center.X - Main.player[target].Center.X);
27228 if (base.Center.X < Main.player[target].Center.X && this.ai[2] < 0f && num943 > (float)num942)
27229 {
27230 this.ai[2] = 0f;
27231 }
27232 if (base.Center.X > Main.player[target].Center.X && this.ai[2] > 0f && num943 > (float)num942)
27233 {
27234 this.ai[2] = 0f;
27235 }
27236 float num944 = 0.45f;
27237 float num945 = 7f;
27238 if ((double)life < (double)lifeMax * 0.75)
27239 {
27240 num944 = 0.55f;
27241 num945 = 8f;
27242 }
27243 if ((double)life < (double)lifeMax * 0.5)
27244 {
27245 num944 = 0.7f;
27246 num945 = 10f;
27247 }
27248 if ((double)life < (double)lifeMax * 0.25)
27249 {
27250 num944 = 0.8f;
27251 num945 = 11f;
27252 }
27253 velocity.X += this.ai[2] * num944;
27254 if (velocity.X > num945)
27255 {
27256 velocity.X = num945;
27257 }
27258 if (velocity.X < 0f - num945)
27259 {
27260 velocity.X = 0f - num945;
27261 }
27262 float num946 = Main.player[target].position.Y - (position.Y + (float)height);
27263 if (num946 < 150f)
27264 {
27265 velocity.Y -= 0.2f;
27266 }
27267 if (num946 > 200f)
27268 {
27269 velocity.Y += 0.2f;
27270 }
27271 if (velocity.Y > 8f)
27272 {
27273 velocity.Y = 8f;
27274 }
27275 if (velocity.Y < -8f)
27276 {
27277 velocity.Y = -8f;
27278 }
27279 rotation = velocity.X * 0.05f;
27280 if ((num943 < 500f || this.ai[3] < 0f) && position.Y < Main.player[target].position.Y)
27281 {
27282 this.ai[3] += 1f;
27283 int num947 = 13;
27284 if ((double)life < (double)lifeMax * 0.75)
27285 {
27286 num947 = 12;
27287 }
27288 if ((double)life < (double)lifeMax * 0.5)
27289 {
27290 num947 = 11;
27291 }
27292 if ((double)life < (double)lifeMax * 0.25)
27293 {
27294 num947 = 10;
27295 }
27296 num947++;
27297 if (this.ai[3] > (float)num947)
27298 {
27299 this.ai[3] = -num947;
27300 }
27301 if (this.ai[3] == 0f && Main.netMode != 1)
27302 {
27303 Vector2 vector124 = new Vector2(base.Center.X, base.Center.Y);
27304 vector124.X += velocity.X * 7f;
27305 float num948 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector124.X;
27306 float num949 = Main.player[target].Center.Y - vector124.Y;
27307 float num950 = (float)Math.Sqrt(num948 * num948 + num949 * num949);
27308 float num951 = 6f;
27309 if ((double)life < (double)lifeMax * 0.75)
27310 {
27311 num951 = 7f;
27312 }
27313 if ((double)life < (double)lifeMax * 0.5)
27314 {
27315 num951 = 8f;
27316 }
27317 if ((double)life < (double)lifeMax * 0.25)
27318 {
27319 num951 = 9f;
27320 }
27321 num950 = num951 / num950;
27322 num948 *= num950;
27323 num949 *= num950;
27324 int num952 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector124.X, vector124.Y, num948, num949, 348, 42, 0f, Main.myPlayer);
27325 }
27326 }
27327 else if (this.ai[3] < 0f)
27328 {
27329 this.ai[3] += 1f;
27330 }
27331 if (Main.netMode != 1)
27332 {
27333 this.ai[1] += Main.rand.Next(1, 4);
27334 if (this.ai[1] > 800f && num943 < 600f)
27335 {
27336 this.ai[0] = -1f;
27337 }
27338 }
27339 }
27340 else if (this.ai[0] == 1f)
27341 {
27342 TargetClosest();
27343 float num953 = 0.15f;
27344 float num954 = 7f;
27345 if ((double)life < (double)lifeMax * 0.75)
27346 {
27347 num953 = 0.17f;
27348 num954 = 8f;
27349 }
27350 if ((double)life < (double)lifeMax * 0.5)
27351 {
27352 num953 = 0.2f;
27353 num954 = 9f;
27354 }
27355 if ((double)life < (double)lifeMax * 0.25)
27356 {
27357 num953 = 0.25f;
27358 num954 = 10f;
27359 }
27360 num953 -= 0.05f;
27361 num954 -= 1f;
27362 if (base.Center.X < Main.player[target].Center.X)
27363 {
27364 velocity.X += num953;
27365 if (velocity.X < 0f)
27366 {
27367 velocity.X *= 0.98f;
27368 }
27369 }
27370 if (base.Center.X > Main.player[target].Center.X)
27371 {
27372 velocity.X -= num953;
27373 if (velocity.X > 0f)
27374 {
27375 velocity.X *= 0.98f;
27376 }
27377 }
27378 if (velocity.X > num954 || velocity.X < 0f - num954)
27379 {
27380 velocity.X *= 0.95f;
27381 }
27382 float num955 = Main.player[target].position.Y - (position.Y + (float)height);
27383 if (num955 < 180f)
27384 {
27385 velocity.Y -= 0.1f;
27386 }
27387 if (num955 > 200f)
27388 {
27389 velocity.Y += 0.1f;
27390 }
27391 if (velocity.Y > 6f)
27392 {
27393 velocity.Y = 6f;
27394 }
27395 if (velocity.Y < -6f)
27396 {
27397 velocity.Y = -6f;
27398 }
27399 rotation = velocity.X * 0.01f;
27400 if (Main.netMode != 1)
27401 {
27402 this.ai[3] += 1f;
27403 int num956 = 15;
27404 if ((double)life < (double)lifeMax * 0.75)
27405 {
27406 num956 = 14;
27407 }
27408 if ((double)life < (double)lifeMax * 0.5)
27409 {
27410 num956 = 12;
27411 }
27412 if ((double)life < (double)lifeMax * 0.25)
27413 {
27414 num956 = 10;
27415 }
27416 if ((double)life < (double)lifeMax * 0.1)
27417 {
27418 num956 = 8;
27419 }
27420 num956 += 3;
27421 if (this.ai[3] >= (float)num956)
27422 {
27423 this.ai[3] = 0f;
27424 Vector2 vector125 = new Vector2(base.Center.X, position.Y + (float)height - 14f);
27425 int i2 = (int)(vector125.X / 16f);
27426 int j2 = (int)(vector125.Y / 16f);
27427 if (!WorldGen.SolidTile(i2, j2))
27428 {
27429 float num957 = velocity.Y;
27430 if (num957 < 0f)
27431 {
27432 num957 = 0f;
27433 }
27434 num957 += 3f;
27435 float speedX2 = velocity.X * 0.25f;
27436 int num958 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector125.X, vector125.Y, speedX2, num957, 349, 37, 0f, Main.myPlayer, Main.rand.Next(5));
27437 }
27438 }
27439 }
27440 if (Main.netMode != 1)
27441 {
27442 this.ai[1] += Main.rand.Next(1, 4);
27443 if (this.ai[1] > 600f)
27444 {
27445 this.ai[0] = -1f;
27446 }
27447 }
27448 }
27449 else if (this.ai[0] == 2f)
27450 {
27451 TargetClosest();
27452 Vector2 vector126 = new Vector2(base.Center.X, base.Center.Y - 20f);
27453 float num959 = Main.rand.Next(-1000, 1001);
27454 float num960 = Main.rand.Next(-1000, 1001);
27455 float num961 = (float)Math.Sqrt(num959 * num959 + num960 * num960);
27456 float num962 = 15f;
27457 velocity *= 0.95f;
27458 num961 = num962 / num961;
27459 num959 *= num961;
27460 num960 *= num961;
27461 rotation += 0.2f;
27462 vector126.X += num959 * 4f;
27463 vector126.Y += num960 * 4f;
27464 this.ai[3] += 1f;
27465 int num963 = 7;
27466 if ((double)life < (double)lifeMax * 0.75)
27467 {
27468 num963--;
27469 }
27470 if ((double)life < (double)lifeMax * 0.5)
27471 {
27472 num963 -= 2;
27473 }
27474 if ((double)life < (double)lifeMax * 0.25)
27475 {
27476 num963 -= 3;
27477 }
27478 if ((double)life < (double)lifeMax * 0.1)
27479 {
27480 num963 -= 4;
27481 }
27482 if (this.ai[3] > (float)num963)
27483 {
27484 this.ai[3] = 0f;
27485 int num964 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector126.X, vector126.Y, num959, num960, 349, 35, 0f, Main.myPlayer);
27486 }
27487 if (Main.netMode != 1)
27488 {
27489 this.ai[1] += Main.rand.Next(1, 4);
27490 if (this.ai[1] > 500f)
27491 {
27492 this.ai[0] = -1f;
27493 }
27494 }
27495 }
27496 if (this.ai[0] == -1f)
27497 {
27498 int num965 = Main.rand.Next(3);
27499 TargetClosest();
27500 if (Math.Abs(base.Center.X - Main.player[target].Center.X) > 1000f)
27501 {
27502 num965 = 0;
27503 }
27504 this.ai[0] = num965;
27505 this.ai[1] = 0f;
27506 this.ai[2] = 0f;
27507 this.ai[3] = 0f;
27508 }
27509 }
27510 else if (aiStyle == 61)
27511 {
27512 float num966 = 2f;
27513 noGravity = true;
27514 noTileCollide = true;
27515 if (!Main.dayTime)
27516 {
27517 TargetClosest();
27518 }
27519 bool flag47 = false;
27520 if ((double)life < (double)lifeMax * 0.75)
27521 {
27522 num966 = 3f;
27523 }
27524 if ((double)life < (double)lifeMax * 0.5)
27525 {
27526 num966 = 4f;
27527 }
27528 if ((double)life < (double)lifeMax * 0.25)
27529 {
27530 num966 = 5f;
27531 }
27532 Vector2 center4 = base.Center;
27533 Point point5 = center4.ToTileCoordinates();
27534 if (WorldGen.InWorld(point5.X, point5.Y) && !WorldGen.SolidTile(point5.X, point5.Y))
27535 {
27536 Lighting.AddLight(center4, 0.3f, 0.26f, 0.05f);
27537 }
27538 if (Main.dayTime)
27539 {
27540 EncourageDespawn(10);
27541 num966 = 8f;
27542 if (velocity.X == 0f)
27543 {
27544 velocity.X = 0.1f;
27545 }
27546 }
27547 else if (this.ai[0] == 0f)
27548 {
27549 this.ai[1] += 1f;
27550 if (this.ai[1] >= 300f && Main.netMode != 1)
27551 {
27552 TargetClosest();
27553 this.ai[1] = 0f;
27554 this.ai[0] = 1f;
27555 netUpdate = true;
27556 }
27557 }
27558 else if (this.ai[0] == 1f)
27559 {
27560 this.ai[1] += 1f;
27561 flag47 = true;
27562 int num967 = 16;
27563 if ((double)life < (double)lifeMax * 0.25)
27564 {
27565 num967 = 8;
27566 }
27567 else if ((double)life < (double)lifeMax * 0.5)
27568 {
27569 num967 = 11;
27570 }
27571 else if ((double)life < (double)lifeMax * 0.75)
27572 {
27573 num967 = 14;
27574 }
27575 if (this.ai[1] % (float)num967 == 0f)
27576 {
27577 Vector2 vector127 = new Vector2(base.Center.X + (float)(direction * 50), base.Center.Y + (float)Main.rand.Next(15, 36));
27578 float num968 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector127.X;
27579 float num969 = Main.player[target].Center.Y - vector127.Y;
27580 num968 += (float)Main.rand.Next(-40, 41);
27581 num969 += (float)Main.rand.Next(-40, 41);
27582 float num970 = (float)Math.Sqrt(num968 * num968 + num969 * num969);
27583 float num971 = 15f;
27584 num970 = num971 / num970;
27585 num968 *= num970;
27586 num969 *= num970;
27587 num968 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27588 num969 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27589 int num972 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector127.X, vector127.Y, num968, num969, 180, 36, 0f, Main.myPlayer);
27590 }
27591 if (this.ai[1] > 240f)
27592 {
27593 this.ai[0] = 0f;
27594 this.ai[1] = 0f;
27595 }
27596 }
27597 if (Main.netMode != 1)
27598 {
27599 int num973 = 600;
27600 int num974 = 1200;
27601 int num975 = 2700;
27602 if ((double)life < (double)lifeMax * 0.25)
27603 {
27604 num973 = (int)((double)num973 * 0.5);
27605 num974 = (int)((double)num974 * 0.5);
27606 num975 = (int)((double)num975 * 0.5);
27607 }
27608 else if ((double)life < (double)lifeMax * 0.5)
27609 {
27610 num973 = (int)((double)num973 * 0.75);
27611 num974 = (int)((double)num974 * 0.75);
27612 num975 = (int)((double)num975 * 0.75);
27613 }
27614 else if ((double)life < (double)lifeMax * 0.75)
27615 {
27616 num973 = (int)((double)num973 * 0.9);
27617 num974 = (int)((double)num974 * 0.9);
27618 num975 = (int)((double)num975 * 0.9);
27619 }
27620 if (Main.rand.Next(num973) == 0)
27621 {
27622 Vector2 vector128 = new Vector2(base.Center.X - (float)(direction * 24), base.Center.Y - 64f);
27623 float num976 = Main.rand.Next(1, 100) * direction;
27624 float num977 = 1f;
27625 float num978 = (float)Math.Sqrt(num976 * num976 + num977 * num977);
27626 float num979 = 1f;
27627 num978 = num979 / num978;
27628 num976 *= num978;
27629 num977 *= num978;
27630 int num980 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector128.X, vector128.Y, num976, num977, 352, 80, 0f, Main.myPlayer);
27631 }
27632 if (Main.rand.Next(num974) == 0)
27633 {
27634 localAI[1] = 1f;
27635 }
27636 if (localAI[1] >= 1f)
27637 {
27638 localAI[1] += 1f;
27639 int num981 = 12;
27640 if (localAI[1] % (float)num981 == 0f)
27641 {
27642 Vector2 vector129 = new Vector2(base.Center.X - (float)(direction * 24), base.Center.Y - 64f);
27643 float num982 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector129.X;
27644 float num983 = Main.player[target].Center.Y - vector129.Y;
27645 num982 += (float)Main.rand.Next(-50, 51);
27646 num983 += (float)Main.rand.Next(-50, 51);
27647 float num984 = (float)Math.Sqrt(num982 * num982 + num983 * num983);
27648 float num985 = 12.5f;
27649 num984 = num985 / num984;
27650 num982 *= num984;
27651 num983 *= num984;
27652 num982 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27653 num983 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27654 int num986 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector129.X, vector129.Y, num982, num983, 350, 42, 0f, Main.myPlayer);
27655 }
27656 if (localAI[1] >= 100f)
27657 {
27658 localAI[1] = 0f;
27659 }
27660 }
27661 if (Main.rand.Next(num975) == 0)
27662 {
27663 localAI[2] = 2f;
27664 }
27665 if (localAI[2] > 0f)
27666 {
27667 localAI[2] += 1f;
27668 int num987 = 9;
27669 if (localAI[2] % (float)num987 == 0f)
27670 {
27671 Vector2 vector130 = new Vector2(base.Center.X - (float)(direction * 24), base.Center.Y - 64f);
27672 float num988 = Main.rand.Next(-100, 101);
27673 float num989 = -300f;
27674 float num990 = (float)Math.Sqrt(num988 * num988 + num989 * num989);
27675 float num991 = 11f;
27676 num990 = num991 / num990;
27677 num988 *= num990;
27678 num989 *= num990;
27679 num988 *= 1f + (float)Main.rand.Next(-20, 21) * 0.01f;
27680 num989 *= 1f + (float)Main.rand.Next(-20, 21) * 0.01f;
27681 int num992 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector130.X, vector130.Y, num988, num989, 351, 50, 0f, Main.myPlayer);
27682 }
27683 if (localAI[2] >= 100f)
27684 {
27685 localAI[2] = 0f;
27686 }
27687 }
27688 }
27689 if (Math.Abs(base.Center.X - Main.player[target].Center.X) < 50f)
27690 {
27691 flag47 = true;
27692 }
27693 if (flag47)
27694 {
27695 velocity.X *= 0.9f;
27696 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
27697 {
27698 velocity.X = 0f;
27699 }
27700 }
27701 else
27702 {
27703 if (direction > 0)
27704 {
27705 velocity.X = (velocity.X * 20f + num966) / 21f;
27706 }
27707 if (direction < 0)
27708 {
27709 velocity.X = (velocity.X * 20f - num966) / 21f;
27710 }
27711 }
27712 int num993 = 80;
27713 int num994 = 20;
27714 Vector2 vector131 = new Vector2(base.Center.X - (float)(num993 / 2), position.Y + (float)height - (float)num994);
27715 bool flag48 = false;
27716 if (position.X < Main.player[target].position.X && position.X + (float)width > Main.player[target].position.X + (float)Main.player[target].width && position.Y + (float)height < Main.player[target].position.Y + (float)Main.player[target].height - 16f)
27717 {
27718 flag48 = true;
27719 }
27720 if (flag48)
27721 {
27722 velocity.Y += 0.5f;
27723 }
27724 else if (Collision.SolidCollision(vector131, num993, num994))
27725 {
27726 if (velocity.Y > 0f)
27727 {
27728 velocity.Y = 0f;
27729 }
27730 if ((double)velocity.Y > -0.2)
27731 {
27732 velocity.Y -= 0.025f;
27733 }
27734 else
27735 {
27736 velocity.Y -= 0.2f;
27737 }
27738 if (velocity.Y < -4f)
27739 {
27740 velocity.Y = -4f;
27741 }
27742 }
27743 else
27744 {
27745 if (velocity.Y < 0f)
27746 {
27747 velocity.Y = 0f;
27748 }
27749 if ((double)velocity.Y < 0.1)
27750 {
27751 velocity.Y += 0.025f;
27752 }
27753 else
27754 {
27755 velocity.Y += 0.5f;
27756 }
27757 }
27758 if (velocity.Y > 10f)
27759 {
27760 velocity.Y = 10f;
27761 }
27762 }
27763 else if (aiStyle == 62)
27764 {
27765 TargetClosest();
27766 rotation = Math.Abs(velocity.X) * (float)direction * 0.1f;
27768 float num995 = 7f;
27769 Vector2 vector132 = new Vector2(base.Center.X + (float)(direction * 20), base.Center.Y + 6f);
27770 float num996 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector132.X;
27771 float num997 = Main.player[target].position.Y - vector132.Y;
27772 float num998 = (float)Math.Sqrt(num996 * num996 + num997 * num997);
27773 float num999 = num995 / num998;
27774 num996 *= num999;
27775 num997 *= num999;
27776 bool flag49 = Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1);
27777 if (Main.dayTime)
27778 {
27779 int num1000 = 60;
27780 velocity.X = (velocity.X * (float)(num1000 - 1) - num996) / (float)num1000;
27781 velocity.Y = (velocity.Y * (float)(num1000 - 1) - num997) / (float)num1000;
27782 EncourageDespawn(10);
27783 return;
27784 }
27785 if (num998 > 600f || !flag49)
27786 {
27787 int num1001 = 60;
27788 velocity.X = (velocity.X * (float)(num1001 - 1) + num996) / (float)num1001;
27789 velocity.Y = (velocity.Y * (float)(num1001 - 1) + num997) / (float)num1001;
27790 return;
27791 }
27792 velocity *= 0.98f;
27793 if (Math.Abs(velocity.X) < 1f && Math.Abs(velocity.Y) < 1f && Main.netMode != 1)
27794 {
27795 localAI[0] += 1f;
27796 if (localAI[0] >= 15f)
27797 {
27798 localAI[0] = 0f;
27799 num996 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector132.X;
27800 num997 = Main.player[target].Center.Y - vector132.Y;
27801 num996 += (float)Main.rand.Next(-35, 36);
27802 num997 += (float)Main.rand.Next(-35, 36);
27803 num996 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27804 num997 *= 1f + (float)Main.rand.Next(-20, 21) * 0.015f;
27805 num998 = (float)Math.Sqrt(num996 * num996 + num997 * num997);
27806 num995 = 10f;
27807 num999 = num995 / num998;
27808 num996 *= num999;
27809 num997 *= num999;
27810 num996 *= 1f + (float)Main.rand.Next(-20, 21) * 0.0125f;
27811 num997 *= 1f + (float)Main.rand.Next(-20, 21) * 0.0125f;
27812 int num1002 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector132.X, vector132.Y, num996, num997, 180, 32, 0f, Main.myPlayer);
27813 }
27814 }
27815 }
27816 else if (aiStyle == 63)
27817 {
27818 TargetClosest();
27819 float num1003 = 11f;
27820 Vector2 vector133 = new Vector2(base.Center.X + (float)(direction * 20), base.Center.Y + 6f);
27821 float num1004 = Main.player[target].position.X + (float)Main.player[target].width * 0.5f - vector133.X;
27822 float num1005 = Main.player[target].Center.Y - vector133.Y;
27823 float num1006 = (float)Math.Sqrt(num1004 * num1004 + num1005 * num1005);
27824 float num1007 = num1003 / num1006;
27825 num1004 *= num1007;
27826 num1005 *= num1007;
27827 if (Main.dayTime)
27828 {
27829 num1004 = 0f - num1004;
27830 num1005 = 0f - num1005;
27831 }
27832 this.ai[0] -= 1f;
27833 if (num1006 < 200f || this.ai[0] > 0f)
27834 {
27835 if (num1006 < 200f)
27836 {
27837 this.ai[0] = 20f;
27838 }
27839 if (velocity.X < 0f)
27840 {
27841 direction = -1;
27842 }
27843 else
27844 {
27845 direction = 1;
27846 }
27847 rotation += (float)direction * 0.3f;
27848 return;
27849 }
27850 velocity.X = (velocity.X * 50f + num1004) / 51f;
27851 velocity.Y = (velocity.Y * 50f + num1005) / 51f;
27852 if (num1006 < 350f)
27853 {
27854 velocity.X = (velocity.X * 10f + num1004) / 11f;
27855 velocity.Y = (velocity.Y * 10f + num1005) / 11f;
27856 }
27857 if (num1006 < 300f)
27858 {
27859 velocity.X = (velocity.X * 7f + num1004) / 8f;
27860 velocity.Y = (velocity.Y * 7f + num1005) / 8f;
27861 }
27862 rotation = velocity.X * 0.15f;
27863 }
27864 else if (aiStyle == 64)
27865 {
27866 float num1008 = this.ai[0];
27867 float num1009 = this.ai[1];
27868 if (Main.netMode != 1)
27869 {
27870 localAI[0] -= 1f;
27871 if (this.ai[3] == 0f)
27872 {
27873 this.ai[3] = (float)Main.rand.Next(75, 111) * 0.01f;
27874 }
27875 if (localAI[0] <= 0f)
27876 {
27877 TargetClosest();
27878 localAI[0] = Main.rand.Next(60, 180);
27879 float num1010 = Math.Abs(base.Center.X - Main.player[target].Center.X);
27880 if (num1010 > 700f && localAI[3] == 0f)
27881 {
27882 float num1011 = (float)Main.rand.Next(50, 151) * 0.01f;
27883 if (num1010 > 1000f)
27884 {
27885 num1011 = (float)Main.rand.Next(150, 201) * 0.01f;
27886 }
27887 else if (num1010 > 850f)
27888 {
27889 num1011 = (float)Main.rand.Next(100, 151) * 0.01f;
27890 }
27891 int num1012 = direction * Main.rand.Next(100, 251);
27892 int num1013 = Main.rand.Next(-50, 51);
27893 if (position.Y > Main.player[target].position.Y - 100f)
27894 {
27895 num1013 -= Main.rand.Next(100, 251);
27896 }
27897 float num1014 = num1011 / (float)Math.Sqrt(num1012 * num1012 + num1013 * num1013);
27898 num1008 = (float)num1012 * num1014;
27899 num1009 = (float)num1013 * num1014;
27900 }
27901 else
27902 {
27903 localAI[3] = 1f;
27904 float num1015 = (float)Main.rand.Next(5, 151) * 0.01f;
27905 int num1016 = Main.rand.Next(-100, 101);
27906 int num1017 = Main.rand.Next(-100, 101);
27907 float num1018 = num1015 / (float)Math.Sqrt(num1016 * num1016 + num1017 * num1017);
27908 num1008 = (float)num1016 * num1018;
27909 num1009 = (float)num1017 * num1018;
27910 }
27911 netUpdate = true;
27912 }
27913 }
27914 scale = this.ai[3];
27915 if (type == 677)
27916 {
27917 bool flag50 = true;
27918 Point point6 = base.Center.ToTileCoordinates();
27919 int num1019 = 40;
27920 if (point6.X < num1019)
27921 {
27922 num1008 += 0.5f;
27923 if (num1008 > 3f)
27924 {
27925 num1008 = 3f;
27926 }
27927 flag50 = false;
27928 }
27929 else if (point6.X > Main.maxTilesX - num1019)
27930 {
27931 num1008 -= 0.5f;
27932 if (num1008 < -3f)
27933 {
27934 num1008 = -3f;
27935 }
27936 flag50 = false;
27937 }
27938 if (point6.Y < num1019)
27939 {
27940 num1009 += 0.5f;
27941 if (num1009 > 3f)
27942 {
27943 velocity.Y = 3f;
27944 }
27945 flag50 = false;
27946 }
27947 else if (point6.Y > Main.maxTilesY - num1019)
27948 {
27949 num1009 -= 0.5f;
27950 if (num1009 < -3f)
27951 {
27952 num1009 = -3f;
27953 }
27954 flag50 = false;
27955 }
27956 if (localAI[1] > 0f)
27957 {
27958 localAI[1]--;
27959 }
27960 else if (flag50)
27961 {
27962 localAI[1] = 15f;
27963 float num1020 = 0f;
27965 for (int num1021 = 0; num1021 < 200; num1021++)
27966 {
27967 NPC nPC4 = Main.npc[num1021];
27968 if (nPC4.active && nPC4.damage > 0 && !nPC4.friendly && nPC4.Hitbox.Distance(base.Center) <= 100f)
27969 {
27970 num1020++;
27971 zero += DirectionFrom(nPC4.Center);
27972 }
27973 }
27974 for (int num1022 = 0; num1022 < 255; num1022++)
27975 {
27976 Player player4 = Main.player[num1022];
27977 if (player4.active && player4.Hitbox.Distance(base.Center) <= 150f)
27978 {
27979 num1020++;
27980 zero += DirectionFrom(player4.Center);
27981 }
27982 }
27983 if (num1020 > 0f)
27984 {
27985 float num1023 = 2f;
27986 zero /= num1020;
27987 zero *= num1023;
27988 velocity += zero;
27989 if (velocity.Length() > 8f)
27990 {
27991 velocity = velocity.SafeNormalize(Vector2.Zero) * 8f;
27992 }
27993 Vector2 vector134 = base.Center + zero * 10f;
27994 localAI[0] = 10f;
27995 netUpdate = true;
27996 }
27997 }
27998 }
27999 else if (localAI[2] > 0f)
28000 {
28001 int i3 = (int)base.Center.X / 16;
28002 int j3 = (int)base.Center.Y / 16;
28003 if (localAI[2] > 3f)
28004 {
28005 if (type == 358)
28006 {
28007 Lighting.AddLight(i3, j3, 0.10124999f * scale, 0.21374999f * scale, 0.225f * scale);
28008 }
28009 else if (type == 654)
28010 {
28011 Lighting.AddLight(i3, j3, 0.225f * scale, 0.105000004f * scale, 0.060000002f * scale);
28012 }
28013 else
28014 {
28015 Lighting.AddLight(i3, j3, 0.109500006f * scale, 0.15f * scale, 0.0615f * scale);
28016 }
28017 }
28018 localAI[2] -= 1f;
28019 }
28020 else if (localAI[1] > 0f)
28021 {
28022 localAI[1] -= 1f;
28023 }
28024 else
28025 {
28026 localAI[1] = Main.rand.Next(30, 180);
28027 if (!Main.dayTime || (double)(position.Y / 16f) > Main.worldSurface + 10.0)
28028 {
28029 localAI[2] = Main.rand.Next(10, 30);
28030 }
28031 }
28032 int num1024 = 80;
28033 velocity.X = (velocity.X * (float)(num1024 - 1) + num1008) / (float)num1024;
28034 velocity.Y = (velocity.Y * (float)(num1024 - 1) + num1009) / (float)num1024;
28035 if (velocity.Y > 0f)
28036 {
28037 int num1025 = 4;
28038 int num1026 = (int)base.Center.X / 16;
28039 int num1027 = (int)base.Center.Y / 16;
28040 for (int num1028 = num1027; num1028 < num1027 + num1025; num1028++)
28041 {
28042 if (WorldGen.InWorld(num1026, num1028, 2) && Main.tile[num1026, num1028] != null && ((Main.tile[num1026, num1028].nactive() && Main.tileSolid[Main.tile[num1026, num1028].type]) || Main.tile[num1026, num1028].liquid > 0))
28043 {
28044 num1009 *= -1f;
28045 if (velocity.Y > 0f)
28046 {
28047 velocity.Y *= 0.9f;
28048 }
28049 }
28050 }
28051 }
28052 if (velocity.Y < 0f)
28053 {
28054 int num1029 = 30;
28055 bool flag51 = false;
28056 int num1030 = (int)base.Center.X / 16;
28057 int num1031 = (int)base.Center.Y / 16;
28058 for (int num1032 = num1031; num1032 < num1031 + num1029; num1032++)
28059 {
28060 if (WorldGen.InWorld(num1030, num1032, 2) && Main.tile[num1030, num1032] != null && Main.tile[num1030, num1032].nactive() && Main.tileSolid[Main.tile[num1030, num1032].type])
28061 {
28062 flag51 = true;
28063 }
28064 }
28065 if (!flag51)
28066 {
28067 num1009 *= -1f;
28068 if (velocity.Y < 0f)
28069 {
28070 velocity.Y *= 0.9f;
28071 }
28072 }
28073 }
28074 if (collideX)
28075 {
28076 num1008 = ((!(velocity.X < 0f)) ? (0f - Math.Abs(num1008)) : Math.Abs(num1008));
28077 velocity.X *= -0.2f;
28078 }
28079 if (type == 677)
28080 {
28081 rotation = velocity.X * 0.3f;
28082 }
28083 if (velocity.X < 0f)
28084 {
28085 direction = -1;
28086 }
28087 if (velocity.X > 0f)
28088 {
28089 direction = 1;
28090 }
28091 this.ai[0] = num1008;
28092 this.ai[1] = num1009;
28093 }
28094 else if (aiStyle == 65)
28095 {
28097 }
28098 else if (aiStyle == 66)
28099 {
28100 if (type == 484)
28101 {
28102 float num1033 = (float)Main.rand.Next(90, 111) * 0.01f;
28103 num1033 *= (Main.essScale + 0.5f) / 2f;
28104 Lighting.AddLight((int)((position.X + (float)(width / 2)) / 16f), (int)((position.Y + (float)(height / 2)) / 16f), 0.3f * num1033, 0.1f * num1033, 0.25f * num1033);
28105 }
28106 if (velocity.Y == 0f)
28107 {
28108 if (this.ai[0] == 1f)
28109 {
28110 if (direction == 0)
28111 {
28112 TargetClosest();
28113 }
28114 if (collideX)
28115 {
28116 direction *= -1;
28117 }
28118 float num1034 = 0.2f;
28119 if (type == 485)
28120 {
28121 num1034 = 0.25f;
28122 }
28123 if (type == 486)
28124 {
28125 num1034 = 0.325f;
28126 }
28127 if (type == 487)
28128 {
28129 num1034 = 0.4f;
28130 }
28131 velocity.X = num1034 * (float)direction;
28132 if (type == 374)
28133 {
28134 velocity.X *= 3f;
28135 }
28136 }
28137 else
28138 {
28139 velocity.X = 0f;
28140 }
28141 if (Main.netMode != 1)
28142 {
28143 localAI[1] -= 1f;
28144 if (localAI[1] <= 0f)
28145 {
28146 if (this.ai[0] == 1f)
28147 {
28148 this.ai[0] = 0f;
28149 localAI[1] = Main.rand.Next(300, 900);
28150 }
28151 else
28152 {
28153 this.ai[0] = 1f;
28154 localAI[1] = Main.rand.Next(600, 1800);
28155 }
28156 netUpdate = true;
28157 }
28158 }
28159 }
28160 else if (direction == 0)
28161 {
28162 direction = 1;
28163 if (velocity.X < 0f)
28164 {
28165 direction = -1;
28166 }
28167 }
28168 if (type != 374)
28169 {
28170 return;
28171 }
28173 bool flag52 = false;
28174 for (int num1035 = 0; num1035 < 255; num1035++)
28175 {
28176 Player player5 = Main.player[num1035];
28177 if (player5.active && !player5.dead && !(Vector2.Distance(player5.Center, base.Center) > 160f))
28178 {
28179 flag52 = true;
28180 break;
28181 }
28182 }
28183 int num1036 = 90;
28184 if (flag52 && this.ai[1] < (float)num1036)
28185 {
28186 this.ai[1]++;
28187 }
28188 if (this.ai[1] == (float)num1036 && Main.netMode != 1)
28189 {
28190 position.Y += 16f;
28191 Transform(375);
28192 netUpdate = true;
28193 }
28194 }
28195 else if (aiStyle == 67)
28196 {
28197 if (Main.netMode != 1)
28198 {
28199 int num1037 = (int)MathHelper.Clamp((int)(base.Center.X / 16f), 0f, Main.maxTilesX);
28200 int num1038 = (int)MathHelper.Clamp((int)(base.Center.Y / 16f), 0f, Main.maxTilesY);
28201 Tile tile = Main.tile[num1037, num1038];
28202 if (tile.shimmer() && tile.liquid > 30)
28203 {
28204 GetShimmered();
28205 return;
28206 }
28207 }
28208 if (type == 359)
28209 {
28210 if (this.ai[3] != 0f)
28211 {
28212 scale = this.ai[3];
28213 int num1039 = (int)(12f * scale);
28214 int num1040 = (int)(12f * scale);
28215 if (num1039 != width)
28216 {
28217 position.X = position.X + (float)(width / 2) - (float)num1039 - 2f;
28218 width = num1039;
28219 }
28220 if (num1040 != height)
28221 {
28222 position.Y = position.Y + (float)height - (float)num1040;
28223 height = num1040;
28224 }
28225 }
28226 if (this.ai[3] == 0f && Main.netMode != 1)
28227 {
28228 this.ai[3] = (float)Main.rand.Next(80, 111) * 0.01f;
28229 netUpdate = true;
28230 }
28231 }
28232 if (type == 360)
28233 {
28234 Lighting.AddLight((int)base.Center.X / 16, (int)base.Center.Y / 16, 0.1f, 0.2f, 0.7f);
28235 }
28236 if (type == 655)
28237 {
28238 Lighting.AddLight((int)base.Center.X / 16, (int)base.Center.Y / 16, 0.6f, 0.3f, 0.1f);
28239 }
28240 float num1041 = 0.3f;
28241 if (type == 360 || type == 655)
28242 {
28243 num1041 = 0.6f;
28244 }
28245 if (this.ai[0] == 0f)
28246 {
28247 TargetClosest();
28248 directionY = 1;
28249 this.ai[0] = 1f;
28250 if (direction > 0)
28251 {
28252 spriteDirection = 1;
28253 }
28254 }
28255 bool flag53 = false;
28256 if (Main.netMode != 1)
28257 {
28258 if (this.ai[2] == 0f && Main.rand.Next(7200) == 0)
28259 {
28260 this.ai[2] = 2f;
28261 netUpdate = true;
28262 }
28263 if (!collideX && !collideY)
28264 {
28265 localAI[3] += 1f;
28266 if (localAI[3] > 5f)
28267 {
28268 this.ai[2] = 2f;
28269 netUpdate = true;
28270 }
28271 }
28272 else
28273 {
28274 localAI[3] = 0f;
28275 }
28276 }
28277 if (this.ai[2] > 0f)
28278 {
28279 this.ai[1] = 0f;
28280 this.ai[0] = 1f;
28281 directionY = 1;
28282 if (velocity.Y > num1041)
28283 {
28284 rotation += (float)direction * 0.1f;
28285 }
28286 else
28287 {
28288 rotation = 0f;
28289 }
28291 velocity.X = num1041 * (float)direction;
28292 noGravity = false;
28293 int num1042 = (int)(base.Center.X + (float)(width / 2 * -direction)) / 16;
28294 int num1043 = (int)(position.Y + (float)height + 8f) / 16;
28295 if (Main.tile[num1042, num1043] != null && !Main.tile[num1042, num1043].topSlope() && collideY)
28296 {
28297 this.ai[2] -= 1f;
28298 }
28299 num1043 = (int)(position.Y + (float)height - 4f) / 16;
28300 num1042 = (int)(base.Center.X + (float)(width / 2 * direction)) / 16;
28301 if (Main.tile[num1042, num1043] != null && Main.tile[num1042, num1043].bottomSlope())
28302 {
28303 direction *= -1;
28304 }
28305 if (collideX && velocity.Y == 0f)
28306 {
28307 flag53 = true;
28308 this.ai[2] = 0f;
28309 directionY = -1;
28310 this.ai[1] = 1f;
28311 }
28312 if (velocity.Y == 0f)
28313 {
28314 if (localAI[1] == position.X)
28315 {
28316 localAI[2] += 1f;
28317 if (localAI[2] > 10f)
28318 {
28319 direction = 1;
28320 velocity.X = (float)direction * num1041;
28321 localAI[2] = 0f;
28322 }
28323 }
28324 else
28325 {
28326 localAI[2] = 0f;
28327 localAI[1] = position.X;
28328 }
28329 }
28330 }
28331 if (this.ai[2] != 0f)
28332 {
28333 return;
28334 }
28335 noGravity = true;
28336 if (this.ai[1] == 0f)
28337 {
28338 if (collideY)
28339 {
28340 this.ai[0] = 2f;
28341 }
28342 if (!collideY && this.ai[0] == 2f)
28343 {
28345 this.ai[1] = 1f;
28346 this.ai[0] = 1f;
28347 }
28348 if (collideX)
28349 {
28351 this.ai[1] = 1f;
28352 }
28353 }
28354 else
28355 {
28356 if (collideX)
28357 {
28358 this.ai[0] = 2f;
28359 }
28360 if (!collideX && this.ai[0] == 2f)
28361 {
28363 this.ai[1] = 0f;
28364 this.ai[0] = 1f;
28365 }
28366 if (collideY)
28367 {
28369 this.ai[1] = 0f;
28370 }
28371 }
28372 if (!flag53)
28373 {
28374 float num1044 = rotation;
28375 if (directionY < 0)
28376 {
28377 if (direction < 0)
28378 {
28379 if (collideX)
28380 {
28381 rotation = 1.57f;
28382 spriteDirection = -1;
28383 }
28384 else if (collideY)
28385 {
28386 rotation = 3.14f;
28387 spriteDirection = 1;
28388 }
28389 }
28390 else if (collideY)
28391 {
28392 rotation = 3.14f;
28393 spriteDirection = -1;
28394 }
28395 else if (collideX)
28396 {
28397 rotation = 4.71f;
28398 spriteDirection = 1;
28399 }
28400 }
28401 else if (direction < 0)
28402 {
28403 if (collideY)
28404 {
28405 rotation = 0f;
28406 spriteDirection = -1;
28407 }
28408 else if (collideX)
28409 {
28410 rotation = 1.57f;
28411 spriteDirection = 1;
28412 }
28413 }
28414 else if (collideX)
28415 {
28416 rotation = 4.71f;
28417 spriteDirection = -1;
28418 }
28419 else if (collideY)
28420 {
28421 rotation = 0f;
28422 spriteDirection = 1;
28423 }
28424 float num1045 = rotation;
28425 rotation = num1044;
28426 if ((double)rotation > 6.28)
28427 {
28428 rotation -= 6.28f;
28429 }
28430 if (rotation < 0f)
28431 {
28432 rotation += 6.28f;
28433 }
28434 float num1046 = Math.Abs(rotation - num1045);
28435 float num1047 = 0.1f;
28436 if (rotation > num1045)
28437 {
28438 if ((double)num1046 > 3.14)
28439 {
28440 rotation += num1047;
28441 }
28442 else
28443 {
28444 rotation -= num1047;
28445 if (rotation < num1045)
28446 {
28447 rotation = num1045;
28448 }
28449 }
28450 }
28451 if (rotation < num1045)
28452 {
28453 if ((double)num1046 > 3.14)
28454 {
28455 rotation -= num1047;
28456 }
28457 else
28458 {
28459 rotation += num1047;
28460 if (rotation > num1045)
28461 {
28462 rotation = num1045;
28463 }
28464 }
28465 }
28466 }
28467 velocity.X = num1041 * (float)direction;
28468 velocity.Y = num1041 * (float)directionY;
28469 }
28470 else if (aiStyle == 68)
28471 {
28472 noGravity = true;
28473 if (this.ai[0] == 0f)
28474 {
28475 noGravity = false;
28476 int num1048 = direction;
28477 int num1049 = target;
28478 TargetClosest();
28479 if (num1049 >= 0 && num1048 != 0)
28480 {
28482 }
28483 if (wet && WorldGen.InWorld((int)(base.Center.X + (float)((width / 2 + 8) * direction)) / 16, (int)(base.Center.Y / 16f), 5))
28484 {
28485 float num1050 = 2f;
28486 velocity.X = (velocity.X * 19f + num1050 * (float)direction) / 20f;
28487 int num1051 = (int)(base.Center.X + (float)((width / 2 + 8) * direction)) / 16;
28488 int num1052 = (int)(base.Center.Y / 16f);
28489 int j4 = (int)(position.Y / 16f);
28490 int num1053 = (int)((position.Y + (float)height) / 16f);
28491 if (Main.tile[num1051, num1052] == null)
28492 {
28493 Main.tile[num1051, num1052] = new Tile();
28494 }
28495 if (Main.tile[num1051, num1053] == null)
28496 {
28497 Main.tile[num1051, num1053] = new Tile();
28498 }
28499 if (num1051 < 5 || num1051 > Main.maxTilesX - 5 || WorldGen.SolidTile(num1051, num1052) || WorldGen.SolidTile(num1051, j4) || WorldGen.SolidTile(num1051, num1053) || Main.tile[num1051, num1053].liquid == 0)
28500 {
28501 direction *= -1;
28502 }
28504 if (velocity.Y > 0f)
28505 {
28506 velocity.Y *= 0.5f;
28507 }
28508 noGravity = true;
28509 num1051 = (int)(base.Center.X / 16f);
28510 num1052 = (int)(base.Center.Y / 16f);
28511 float num1054 = position.Y + (float)height;
28512 if (Main.tile[num1051, num1052 - 1] == null)
28513 {
28514 Main.tile[num1051, num1052 - 1] = new Tile();
28515 }
28516 if (Main.tile[num1051, num1052] == null)
28517 {
28518 Main.tile[num1051, num1052] = new Tile();
28519 }
28520 if (Main.tile[num1051, num1052 + 1] == null)
28521 {
28522 Main.tile[num1051, num1052 + 1] = new Tile();
28523 }
28524 if (Main.tile[num1051, num1052 - 1].liquid > 0)
28525 {
28526 num1054 = num1052 * 16;
28527 num1054 -= (float)(Main.tile[num1051, num1052 - 1].liquid / 16);
28528 }
28529 else if (Main.tile[num1051, num1052].liquid > 0)
28530 {
28531 num1054 = (num1052 + 1) * 16;
28532 num1054 -= (float)(Main.tile[num1051, num1052].liquid / 16);
28533 }
28534 else if (Main.tile[num1051, num1052 + 1].liquid > 0)
28535 {
28536 num1054 = (num1052 + 2) * 16;
28537 num1054 -= (float)(Main.tile[num1051, num1052 + 1].liquid / 16);
28538 }
28539 num1054 -= 6f;
28540 if (base.Center.Y > num1054)
28541 {
28542 velocity.Y -= 0.1f;
28543 if (velocity.Y < -8f)
28544 {
28545 velocity.Y = -8f;
28546 }
28547 if (base.Center.Y + velocity.Y < num1054)
28548 {
28549 velocity.Y = num1054 - base.Center.Y;
28550 }
28551 }
28552 else
28553 {
28554 velocity.Y = num1054 - base.Center.Y;
28555 }
28556 }
28557 if (Main.netMode == 1)
28558 {
28559 return;
28560 }
28561 if (!wet)
28562 {
28563 this.ai[0] = 1f;
28564 netUpdate = true;
28566 return;
28567 }
28568 Rectangle rectangle4 = new Rectangle((int)Main.player[target].position.X, (int)Main.player[target].position.Y, Main.player[target].width, Main.player[target].height);
28569 if (new Rectangle((int)position.X - 100, (int)position.Y - 100, width + 200, height + 200).Intersects(rectangle4) || life < lifeMax)
28570 {
28571 this.ai[0] = 1f;
28572 velocity.Y -= 6f;
28573 netUpdate = true;
28575 }
28576 }
28577 else
28578 {
28579 if (Main.player[target].dead)
28580 {
28581 return;
28582 }
28583 bool flag54 = false;
28584 this.ai[1] += 1f;
28585 if (this.ai[1] >= 300f)
28586 {
28587 flag54 = true;
28588 }
28589 if (flag54)
28590 {
28591 if (velocity.Y == 0f || collideY || wet)
28592 {
28593 velocity.X = 0f;
28594 velocity.Y = 0f;
28595 this.ai[0] = 0f;
28596 this.ai[1] = 0f;
28597 if (Main.netMode != 1)
28598 {
28599 if ((type == 363 || type == 365 || type == 603 || type == 609) && !wet)
28600 {
28601 int num1055 = direction;
28602 Transform(type - 1);
28603 TargetClosest();
28605 this.ai[0] = 0f;
28606 this.ai[1] = 200 + Main.rand.Next(200);
28607 }
28608 netUpdate = true;
28609 }
28610 }
28611 else
28612 {
28613 velocity.X *= 0.98f;
28614 velocity.Y += 0.1f;
28615 if (velocity.Y > 2f)
28616 {
28617 velocity.Y = 2f;
28618 }
28619 }
28620 return;
28621 }
28622 if (collideX)
28623 {
28624 direction *= -1;
28625 velocity.X = oldVelocity.X * -0.5f;
28626 if (direction == -1 && velocity.X > 0f && velocity.X < 2f)
28627 {
28628 velocity.X = 2f;
28629 }
28630 if (direction == 1 && velocity.X < 0f && velocity.X > -2f)
28631 {
28632 velocity.X = -2f;
28633 }
28634 }
28635 if (collideY)
28636 {
28637 velocity.Y = oldVelocity.Y * -0.5f;
28638 if (velocity.Y > 0f && velocity.Y < 1f)
28639 {
28640 velocity.Y = 1f;
28641 }
28642 if (velocity.Y < 0f && velocity.Y > -1f)
28643 {
28644 velocity.Y = -1f;
28645 }
28646 }
28647 if (direction == -1 && velocity.X > -3f)
28648 {
28649 velocity.X -= 0.1f;
28650 if (velocity.X > 3f)
28651 {
28652 velocity.X -= 0.1f;
28653 }
28654 else if (velocity.X > 0f)
28655 {
28656 velocity.X -= 0.05f;
28657 }
28658 if (velocity.X < -3f)
28659 {
28660 velocity.X = -3f;
28661 }
28662 }
28663 else if (direction == 1 && velocity.X < 3f)
28664 {
28665 velocity.X += 0.1f;
28666 if (velocity.X < -3f)
28667 {
28668 velocity.X += 0.1f;
28669 }
28670 else if (velocity.X < 0f)
28671 {
28672 velocity.X += 0.05f;
28673 }
28674 if (velocity.X > 3f)
28675 {
28676 velocity.X = 3f;
28677 }
28678 }
28679 int num1056 = (int)((position.X + (float)(width / 2)) / 16f) + direction;
28680 int num1057 = (int)((position.Y + (float)height) / 16f);
28681 bool flag55 = true;
28682 int num1058 = 15;
28683 bool flag56 = false;
28684 for (int num1059 = num1057; num1059 < num1057 + num1058; num1059++)
28685 {
28686 if (Main.tile[num1056, num1059] == null)
28687 {
28688 Main.tile[num1056, num1059] = new Tile();
28689 }
28690 if ((Main.tile[num1056, num1059].nactive() && Main.tileSolid[Main.tile[num1056, num1059].type]) || Main.tile[num1056, num1059].liquid > 0)
28691 {
28692 if (num1059 < num1057 + 5)
28693 {
28694 flag56 = true;
28695 }
28696 flag55 = false;
28697 break;
28698 }
28699 }
28700 if (flag55)
28701 {
28702 velocity.Y += 0.1f;
28703 }
28704 else
28705 {
28706 velocity.Y -= 0.1f;
28707 }
28708 if (flag56)
28709 {
28710 velocity.Y -= 0.2f;
28711 }
28712 if (velocity.Y > 3f)
28713 {
28714 velocity.Y = 3f;
28715 }
28716 if (velocity.Y < -4f)
28717 {
28718 velocity.Y = -4f;
28719 }
28720 }
28721 }
28722 else if (aiStyle == 69)
28723 {
28725 }
28726 else if (aiStyle == 70)
28727 {
28728 if (target == 255)
28729 {
28730 TargetClosest();
28731 this.ai[3] = (float)Main.rand.Next(80, 121) / 100f;
28732 float num1060 = (float)Main.rand.Next(165, 265) / 15f;
28733 velocity = Vector2.Normalize(Main.player[target].Center - base.Center + new Vector2(Main.rand.Next(-100, 101), Main.rand.Next(-100, 101))) * num1060;
28734 netUpdate = true;
28735 }
28736 Vector2 vector135 = Vector2.Normalize(Main.player[target].Center - base.Center);
28737 velocity = (velocity * 40f + vector135 * 20f) / 41f;
28738 scale = this.ai[3];
28739 alpha -= 30;
28740 if (alpha < 50)
28741 {
28742 alpha = 50;
28743 }
28744 alpha = 50;
28745 velocity.X = (velocity.X * 50f + Main.windSpeedCurrent * 2f + (float)Main.rand.Next(-10, 11) * 0.1f) / 51f;
28746 velocity.Y = (velocity.Y * 50f + -0.25f + (float)Main.rand.Next(-10, 11) * 0.2f) / 51f;
28747 if (velocity.Y > 0f)
28748 {
28749 velocity.Y -= 0.04f;
28750 }
28751 if (this.ai[0] == 0f)
28752 {
28753 int num1061 = 40;
28755 rect.X -= num1061 + width / 2;
28756 rect.Y -= num1061 + height / 2;
28757 rect.Width += num1061 * 2;
28758 rect.Height += num1061 * 2;
28759 for (int num1062 = 0; num1062 < 255; num1062++)
28760 {
28761 Player player6 = Main.player[num1062];
28762 if (player6.active && !player6.dead && rect.Intersects(player6.getRect()))
28763 {
28764 this.ai[0] = 1f;
28765 this.ai[1] = 4f;
28766 netUpdate = true;
28767 break;
28768 }
28769 }
28770 }
28771 if (this.ai[0] == 0f)
28772 {
28773 this.ai[1]++;
28774 if (this.ai[1] >= 150f)
28775 {
28776 this.ai[0] = 1f;
28777 this.ai[1] = 4f;
28778 }
28779 }
28780 if (this.ai[0] == 1f)
28781 {
28782 this.ai[1]--;
28783 if (this.ai[1] <= 0f)
28784 {
28785 life = 0;
28786 HitEffect();
28787 active = false;
28788 return;
28789 }
28790 }
28791 if (justHit || this.ai[0] == 1f)
28792 {
28793 dontTakeDamage = true;
28794 position = base.Center;
28795 width = (height = 100);
28796 position = new Vector2(position.X - (float)(width / 2), position.Y - (float)(height / 2));
28798 }
28799 }
28800 else if (aiStyle == 71)
28801 {
28802 noTileCollide = true;
28803 int num1063 = 90;
28804 if (target < 0 || target == 255 || Main.player[target].dead)
28805 {
28807 direction = 1;
28808 netUpdate = true;
28809 }
28810 if (this.ai[0] == 0f)
28811 {
28812 this.ai[1]++;
28813 _ = type;
28814 _ = 372;
28815 noGravity = true;
28816 dontTakeDamage = true;
28817 velocity.Y = this.ai[3];
28818 if (type == 373)
28819 {
28820 float num1064 = (float)Math.PI / 30f;
28821 float num1065 = this.ai[2];
28822 float num1066 = (float)(Math.Cos(num1064 * localAI[1]) - 0.5) * num1065;
28823 position.X -= num1066 * (float)(-direction);
28824 localAI[1]++;
28825 num1066 = (float)(Math.Cos(num1064 * localAI[1]) - 0.5) * num1065;
28826 position.X += num1066 * (float)(-direction);
28827 if (Math.Abs(Math.Cos(num1064 * localAI[1]) - 0.5) > 0.25)
28828 {
28829 spriteDirection = ((!(Math.Cos(num1064 * localAI[1]) - 0.5 >= 0.0)) ? 1 : (-1));
28830 }
28831 rotation = velocity.Y * (float)spriteDirection * 0.1f;
28832 if ((double)rotation < -0.2)
28833 {
28834 rotation = -0.2f;
28835 }
28836 if ((double)rotation > 0.2)
28837 {
28838 rotation = 0.2f;
28839 }
28840 alpha -= 6;
28841 if (alpha < 0)
28842 {
28843 alpha = 0;
28844 }
28845 }
28846 if (this.ai[1] >= (float)num1063)
28847 {
28848 this.ai[0] = 1f;
28849 this.ai[1] = 0f;
28850 if (!Collision.SolidCollision(position, width, height))
28851 {
28852 this.ai[1] = 1f;
28853 }
28854 SoundEngine.PlaySound(4, (int)base.Center.X, (int)base.Center.Y, 19);
28855 TargetClosest();
28857 Vector2 vector136 = Main.player[target].Center - base.Center;
28858 vector136.Normalize();
28859 velocity = vector136 * 16f;
28860 rotation = velocity.ToRotation();
28861 if (direction == -1)
28862 {
28863 rotation += (float)Math.PI;
28864 }
28865 netUpdate = true;
28866 }
28867 }
28868 else
28869 {
28870 if (this.ai[0] != 1f)
28871 {
28872 return;
28873 }
28874 noGravity = true;
28875 if (!Collision.SolidCollision(position, width, height))
28876 {
28877 if (this.ai[1] < 1f)
28878 {
28879 this.ai[1] = 1f;
28880 }
28881 }
28882 else
28883 {
28884 alpha -= 15;
28885 if (alpha < 150)
28886 {
28887 alpha = 150;
28888 }
28889 }
28890 if (this.ai[1] >= 1f)
28891 {
28892 alpha -= 60;
28893 if (alpha < 0)
28894 {
28895 alpha = 0;
28896 }
28897 dontTakeDamage = false;
28898 this.ai[1]++;
28899 if (Collision.SolidCollision(position, width, height))
28900 {
28901 if (DeathSound != null)
28902 {
28904 }
28905 life = 0;
28906 HitEffect();
28907 active = false;
28908 return;
28909 }
28910 }
28911 if (this.ai[1] >= 60f)
28912 {
28913 noGravity = false;
28914 }
28915 rotation = velocity.ToRotation();
28916 if (direction == -1)
28917 {
28918 rotation += (float)Math.PI;
28919 }
28920 }
28921 }
28922 else if (aiStyle == 72)
28923 {
28924 if (type == 384)
28925 {
28926 int num1067 = (int)this.ai[0];
28927 if (Main.npc[num1067].active && Main.npc[num1067].type == 383)
28928 {
28930 position = Main.npc[num1067].Center;
28931 position.X -= width / 2;
28932 position.Y -= height / 2;
28933 gfxOffY = Main.npc[num1067].gfxOffY;
28934 Lighting.AddLight((int)base.Center.X / 16, (int)base.Center.Y / 16, 0.1f, 0.5f, 0.7f);
28935 }
28936 else
28937 {
28938 life = 0;
28939 HitEffect();
28940 active = false;
28941 }
28942 }
28943 }
28944 else if (aiStyle == 73)
28945 {
28948 velocity.X *= 0.93f;
28949 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
28950 {
28951 velocity.X = 0f;
28952 }
28953 if (type == 387)
28954 {
28955 float num1068 = 120f;
28956 float num1069 = 60f;
28957 if (this.ai[1] < num1068)
28958 {
28959 this.ai[1]++;
28960 if (this.ai[1] > 60f)
28961 {
28962 float num1070 = (this.ai[1] - num1069) / (num1068 - num1069);
28963 alpha = (int)((1f - num1070) * 255f);
28964 }
28965 else
28966 {
28967 alpha = 255;
28968 }
28969 dontTakeDamage = true;
28970 frameCounter = 0.0;
28971 frame.Y = 0;
28972 float num1071 = this.ai[1] / num1069;
28973 Vector2 spinningpoint = new Vector2(0f, -30f);
28974 spinningpoint = spinningpoint.RotatedBy(num1071 * 1.5f * ((float)Math.PI * 2f)) * new Vector2(1f, 0.4f);
28975 for (int num1072 = 0; num1072 < 4; num1072++)
28976 {
28978 float num1073 = 1f;
28979 if (num1072 == 0)
28980 {
28981 vector137 = Vector2.UnitY * -15f;
28982 num1073 = 0.15f;
28983 }
28984 if (num1072 == 1)
28985 {
28986 vector137 = Vector2.UnitY * -5f;
28987 num1073 = 0.3f;
28988 }
28989 if (num1072 == 2)
28990 {
28991 vector137 = Vector2.UnitY * 5f;
28992 num1073 = 0.6f;
28993 }
28994 if (num1072 == 3)
28995 {
28996 vector137 = Vector2.UnitY * 20f;
28997 num1073 = 0.45f;
28998 }
28999 int num1074 = Dust.NewDust(base.Center, 0, 0, 226, 0f, 0f, 100, default(Color), 0.5f);
29000 Main.dust[num1074].noGravity = true;
29001 Main.dust[num1074].position = base.Center + spinningpoint * num1073 + vector137;
29002 Main.dust[num1074].velocity = Vector2.Zero;
29003 spinningpoint *= -1f;
29004 num1074 = Dust.NewDust(base.Center, 0, 0, 226, 0f, 0f, 100, default(Color), 0.5f);
29005 Main.dust[num1074].noGravity = true;
29006 Main.dust[num1074].position = base.Center + spinningpoint * num1073 + vector137;
29007 Main.dust[num1074].velocity = Vector2.Zero;
29008 }
29009 Lighting.AddLight((int)base.Center.X / 16, (int)(base.Center.Y - 10f) / 16, 0.1f * num1071, 0.5f * num1071, 0.7f * num1071);
29010 return;
29011 }
29012 if (this.ai[1] == num1068)
29013 {
29014 this.ai[1]++;
29015 netUpdate = true;
29016 }
29017 Lighting.AddLight((int)base.Center.X / 16, (int)(base.Center.Y - 10f) / 16, 0.1f, 0.5f, 0.7f);
29018 dontTakeDamage = false;
29019 }
29020 if (this.ai[0] < 60f)
29021 {
29022 this.ai[0]++;
29023 }
29024 if (justHit)
29025 {
29026 this.ai[0] = -30f;
29027 netUpdate = true;
29028 }
29029 if (this.ai[0] == 60f && Main.netMode != 1)
29030 {
29031 this.ai[0] = -120f;
29032 netUpdate = true;
29033 Vector2 center5 = Main.player[target].Center;
29034 Vector2 vector138 = base.Center - Vector2.UnitY * 10f;
29036 vector139.X += Main.rand.Next(-100, 101);
29037 vector139.Y += Main.rand.Next(-100, 101);
29038 vector139.X *= (float)Main.rand.Next(70, 131) * 0.01f;
29039 vector139.Y *= (float)Main.rand.Next(70, 131) * 0.01f;
29040 vector139.Normalize();
29041 if (float.IsNaN(vector139.X) || float.IsNaN(vector139.Y))
29042 {
29044 }
29045 vector139 *= 14f;
29046 int num1075 = 35;
29047 float num1076 = 1f;
29048 if (type >= 381 && type <= 392)
29049 {
29050 num1076 = 0.8f;
29051 }
29053 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector138.X, vector138.Y, vector139.X, vector139.Y, 435, num1075, 0f, Main.myPlayer);
29054 }
29055 }
29056 else if (aiStyle == 74)
29057 {
29059 rotation = velocity.ToRotation();
29060 if (rotation < -(float)Math.PI / 2f)
29061 {
29062 rotation += (float)Math.PI;
29063 }
29064 if (rotation > (float)Math.PI / 2f)
29065 {
29066 rotation -= (float)Math.PI;
29067 }
29068 if (Math.Sign(velocity.X) != 0)
29069 {
29071 }
29072 if (type == 418)
29073 {
29075 }
29076 float num1077 = 0.4f;
29077 float num1078 = 10f;
29078 float num1079 = 200f;
29079 float num1080 = 0f;
29080 float num1081 = 750f;
29081 float num1082 = 0f;
29082 float num1083 = 30f;
29083 float num1084 = 30f;
29084 float num1085 = 0.95f;
29085 int num1086 = 50;
29086 float num1087 = 14f;
29087 float num1088 = 30f;
29088 float num1089 = 100f;
29089 float num1090 = 20f;
29090 float num1091 = 0f;
29091 float num1092 = 7f;
29092 bool flag57 = true;
29093 if (type == 418)
29094 {
29095 num1077 = 0.3f;
29096 num1078 = 8f;
29097 num1079 = 175f;
29098 num1080 = 175f;
29099 num1081 = 600f;
29100 num1082 = 80f;
29101 num1083 = 60f;
29102 num1084 = 20f;
29103 num1085 = 0.75f;
29104 num1086 = 0;
29105 num1087 = 9f;
29106 num1088 = 30f;
29107 num1089 = 150f;
29108 num1090 = 60f;
29109 num1091 = 4f / 15f;
29110 num1092 = 7f;
29111 flag57 = false;
29112 }
29113 num1091 *= num1090;
29114 if (Main.expertMode)
29115 {
29116 num1077 *= Main.GameModeInfo.KnockbackToEnemiesMultiplier;
29117 }
29118 if (type == 388 && this.ai[0] != 3f)
29119 {
29121 int num1093 = Dust.NewDust(position, width, height, 226, 0f, 0f, 100, default(Color), 0.5f);
29122 Main.dust[num1093].noGravity = true;
29123 Main.dust[num1093].velocity = velocity / 5f;
29124 Vector2 spinningpoint2 = new Vector2(-10f, 10f);
29125 if (spriteDirection == 1)
29126 {
29127 spinningpoint2.X *= -1f;
29128 }
29130 Main.dust[num1093].position = base.Center + spinningpoint2;
29132 }
29133 if (type == 418)
29134 {
29135 int num1094 = ((this.ai[0] != 2f) ? 1 : 2);
29136 int num1095 = ((this.ai[0] == 2f) ? 30 : 20);
29137 for (int num1096 = 0; num1096 < 2; num1096++)
29138 {
29139 if (Main.rand.Next(3) < num1094)
29140 {
29142 int num1097 = Dust.NewDust(base.Center - new Vector2(num1095), num1095 * 2, num1095 * 2, 6, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 1.5f);
29143 Main.dust[num1097].noGravity = true;
29144 Dust dust = Main.dust[num1097];
29145 dust.velocity *= 0.2f;
29146 Main.dust[num1097].fadeIn = 1f;
29148 }
29149 }
29150 }
29151 if (this.ai[0] == 0f)
29152 {
29154 float num1098 = num1078;
29155 Vector2 center6 = base.Center;
29156 Vector2 center7 = Main.player[target].Center;
29158 Vector2 vector141 = vector140 - Vector2.UnitY * num1079;
29159 vector141 += Vector2.UnitX * ((vector140.X < 0f) ? num1080 : (0f - num1080));
29160 float num1099 = vector140.Length();
29163 bool flag58 = Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1);
29164 if (this.ai[3] >= 120f)
29165 {
29166 flag58 = true;
29167 }
29168 float num1100 = 8f;
29169 flag58 = flag58 && vector140.ToRotation() > (float)Math.PI / num1100 && vector140.ToRotation() < (float)Math.PI - (float)Math.PI / num1100;
29170 bool flag59 = num1099 < num1082;
29171 bool flag60 = num1099 > num1081;
29172 if (flag59 || flag60 || !flag58)
29173 {
29174 velocity.X = (velocity.X * (num1083 - 1f) + vector141.X) / num1083;
29175 velocity.Y = (velocity.Y * (num1083 - 1f) + vector141.Y) / num1083;
29176 if (!flag58)
29177 {
29178 if (!flag59 && !flag60)
29179 {
29180 this.ai[3]++;
29181 }
29182 if (this.ai[3] == 120f)
29183 {
29184 netUpdate = true;
29185 }
29186 }
29187 else
29188 {
29189 this.ai[3] = 0f;
29190 }
29191 }
29192 else
29193 {
29194 this.ai[0] = 1f;
29195 this.ai[2] = vector140.X;
29196 this.ai[3] = vector140.Y;
29197 netUpdate = true;
29198 }
29199 }
29200 else if (this.ai[0] == 1f)
29201 {
29202 knockBackResist = 0f;
29203 bool flag61 = true;
29204 if (type == 418)
29205 {
29206 flag61 = velocity.Length() > 2f;
29207 if (!flag61 && target >= 0 && !Main.player[target].DeadOrGhost)
29208 {
29209 Vector2 value = (Main.player[target].Center - base.Center).SafeNormalize(Vector2.Zero) * 0.1f;
29210 velocity = Vector2.Lerp(velocity, value, 0.25f);
29211 }
29212 }
29213 if (flag61)
29214 {
29215 velocity *= num1085;
29216 }
29217 this.ai[1]++;
29218 if (this.ai[1] >= num1084)
29219 {
29220 this.ai[0] = 2f;
29221 this.ai[1] = 0f;
29222 netUpdate = true;
29223 Vector2 vector142 = new Vector2(this.ai[2], this.ai[3]) + new Vector2(Main.rand.Next(-num1086, num1086 + 1), Main.rand.Next(-num1086, num1086 + 1)) * 0.04f;
29224 vector142.Normalize();
29225 vector142 *= num1087;
29227 }
29228 if (type == 388 && Main.rand.Next(4) == 0)
29229 {
29231 int num1101 = Dust.NewDust(position, width, height, 226, 0f, 0f, 100, default(Color), 0.5f);
29232 Main.dust[num1101].noGravity = true;
29233 Dust dust = Main.dust[num1101];
29234 dust.velocity *= 2f;
29235 Main.dust[num1101].velocity = Main.dust[num1101].velocity / 2f + Vector2.Normalize(Main.dust[num1101].position - base.Center);
29237 }
29238 }
29239 else if (this.ai[0] == 2f)
29240 {
29241 knockBackResist = 0f;
29242 float num1102 = num1088;
29243 this.ai[1]++;
29244 bool flag62 = Vector2.Distance(base.Center, Main.player[target].Center) > num1089 && base.Center.Y > Main.player[target].Center.Y;
29245 if ((this.ai[1] >= num1102 && flag62) || velocity.Length() < num1092)
29246 {
29247 this.ai[0] = 0f;
29248 this.ai[1] = 0f;
29249 this.ai[2] = 0f;
29250 this.ai[3] = 0f;
29251 velocity /= 2f;
29252 netUpdate = true;
29253 if (type == 418)
29254 {
29255 this.ai[1] = 45f;
29256 this.ai[0] = 4f;
29257 }
29258 }
29259 else
29260 {
29261 Vector2 center8 = base.Center;
29262 Vector2 center9 = Main.player[target].Center;
29264 vector143.Normalize();
29265 if (vector143.HasNaNs())
29266 {
29267 vector143 = new Vector2(direction, 0f);
29268 }
29270 }
29271 if (flag57 && Collision.SolidCollision(position, width, height))
29272 {
29273 this.ai[0] = 3f;
29274 this.ai[1] = 0f;
29275 this.ai[2] = 0f;
29276 this.ai[3] = 0f;
29277 netUpdate = true;
29278 }
29279 }
29280 else if (this.ai[0] == 4f)
29281 {
29282 this.ai[1] -= 3f;
29283 if (this.ai[1] <= 0f)
29284 {
29285 this.ai[0] = 0f;
29286 this.ai[1] = 0f;
29287 netUpdate = true;
29288 }
29289 velocity *= 0.95f;
29290 }
29291 if (flag57 && this.ai[0] != 3f && Vector2.Distance(base.Center, Main.player[target].Center) < 64f)
29292 {
29293 this.ai[0] = 3f;
29294 this.ai[1] = 0f;
29295 this.ai[2] = 0f;
29296 this.ai[3] = 0f;
29297 netUpdate = true;
29298 }
29299 if (this.ai[0] != 3f)
29300 {
29301 return;
29302 }
29303 position = base.Center;
29304 width = (height = 192);
29305 position.X -= width / 2;
29306 position.Y -= height / 2;
29309 alpha = 255;
29310 Lighting.AddLight((int)base.Center.X / 16, (int)base.Center.Y / 16, 0.2f, 0.7f, 1.1f);
29311 for (int num1103 = 0; num1103 < 10; num1103++)
29312 {
29313 int num1104 = Dust.NewDust(position, width, height, 31, 0f, 0f, 100, default(Color), 1.5f);
29314 Dust dust = Main.dust[num1104];
29315 dust.velocity *= 1.4f;
29316 Main.dust[num1104].position = ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * ((float)Main.rand.NextDouble() * 96f) + base.Center;
29317 }
29318 for (int num1105 = 0; num1105 < 40; num1105++)
29319 {
29320 int num1106 = Dust.NewDust(position, width, height, 226, 0f, 0f, 100, default(Color), 0.5f);
29321 Main.dust[num1106].noGravity = true;
29322 Dust dust = Main.dust[num1106];
29323 dust.velocity *= 2f;
29324 Main.dust[num1106].position = ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * ((float)Main.rand.NextDouble() * 96f) + base.Center;
29325 Main.dust[num1106].velocity = Main.dust[num1106].velocity / 2f + Vector2.Normalize(Main.dust[num1106].position - base.Center);
29326 if (Main.rand.Next(2) == 0)
29327 {
29328 num1106 = Dust.NewDust(position, width, height, 226, 0f, 0f, 100, default(Color), 0.9f);
29329 Main.dust[num1106].noGravity = true;
29330 dust = Main.dust[num1106];
29331 dust.velocity *= 1.2f;
29332 Main.dust[num1106].position = ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * ((float)Main.rand.NextDouble() * 96f) + base.Center;
29333 Main.dust[num1106].velocity = Main.dust[num1106].velocity / 2f + Vector2.Normalize(Main.dust[num1106].position - base.Center);
29334 }
29335 if (Main.rand.Next(4) == 0)
29336 {
29337 num1106 = Dust.NewDust(position, width, height, 226, 0f, 0f, 100, default(Color), 0.7f);
29338 dust = Main.dust[num1106];
29339 dust.velocity *= 1.2f;
29340 Main.dust[num1106].position = ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * ((float)Main.rand.NextDouble() * 96f) + base.Center;
29341 Main.dust[num1106].velocity = Main.dust[num1106].velocity / 2f + Vector2.Normalize(Main.dust[num1106].position - base.Center);
29342 }
29343 }
29344 this.ai[1]++;
29345 if (this.ai[1] >= 3f)
29346 {
29348 life = 0;
29349 HitEffect();
29350 active = false;
29351 }
29352 }
29353 else if (aiStyle == 75)
29354 {
29355 int num1107 = -1;
29357 int num1108 = 0;
29358 if (type == 390)
29359 {
29360 if (localAI[0] == 0f && Main.netMode != 1)
29361 {
29362 localAI[0] = 1f;
29363 int num1109 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 391, whoAmI);
29364 this.ai[0] = num1109;
29365 netUpdate = true;
29366 }
29367 int num1110 = (int)this.ai[0];
29368 if (Main.npc[num1110].active && Main.npc[num1110].type == 391)
29369 {
29371 num1107 = num1110;
29372 vector144 = Vector2.UnitY * -14f;
29373 }
29374 }
29375 if (type == 416)
29376 {
29377 if (localAI[0] == 0f && Main.netMode != 1)
29378 {
29379 localAI[0] = 1f;
29380 int num1111 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 415, whoAmI);
29381 this.ai[0] = num1111;
29382 netUpdate = true;
29383 }
29384 int num1112 = (int)this.ai[0];
29385 if (Main.npc[num1112].active && Main.npc[num1112].type == 415)
29386 {
29388 num1107 = num1112;
29389 vector144 = new Vector2(-Main.npc[num1112].spriteDirection * 10, -30f);
29390 }
29391 }
29392 else if (type == 392)
29393 {
29394 int num1113 = (int)this.ai[0];
29395 if (Main.npc[num1113].active && Main.npc[num1113].type == 395)
29396 {
29398 num1107 = num1113;
29399 vector144 = Vector2.UnitY * 2f;
29400 vector144 *= Main.npc[num1113].scale;
29401 float num1114 = Main.npc[num1113].rotation;
29402 vector144 = vector144.RotatedBy(num1114);
29403 rotation = num1114;
29404 if (Main.netMode != 1)
29405 {
29406 bool flag63 = true;
29407 if (Main.npc[num1113].ai[0] >= 1f || Main.npc[num1113].ai[0] < 0f)
29408 {
29409 flag63 = false;
29410 }
29411 if (flag63)
29412 {
29413 for (int num1115 = 0; num1115 < 2; num1115++)
29414 {
29415 if (Main.npc[(int)localAI[num1115]].active && Main.npc[(int)localAI[num1115]].type == 393)
29416 {
29417 flag63 = false;
29418 }
29419 }
29420 for (int num1116 = 2; num1116 < 4; num1116++)
29421 {
29422 if (Main.npc[(int)localAI[num1116]].active && Main.npc[(int)localAI[num1116]].type == 394)
29423 {
29424 flag63 = false;
29425 }
29426 }
29427 }
29428 if (Main.npc[num1113].ai[3] % 200f == 0f && Main.npc[num1113].ai[0] != 1f)
29429 {
29430 for (int num1117 = 0; num1117 < 2; num1117++)
29431 {
29432 if (Main.npc[(int)localAI[num1117]].active && Main.npc[(int)localAI[num1117]].type == 393)
29433 {
29434 Main.npc[(int)localAI[num1117]].netUpdate = true;
29435 }
29436 }
29437 for (int num1118 = 2; num1118 < 4; num1118++)
29438 {
29439 if (Main.npc[(int)localAI[num1118]].active && Main.npc[(int)localAI[num1118]].type == 394)
29440 {
29441 Main.npc[(int)localAI[num1118]].netUpdate = true;
29442 }
29443 }
29444 netUpdate = true;
29445 }
29446 if (flag63)
29447 {
29448 if (!Main.expertMode)
29449 {
29450 Main.npc[num1113].ai[0] = 3f;
29451 Main.npc[num1113].ai[1] = 0f;
29452 Main.npc[num1113].ai[2] = 0f;
29453 Main.npc[num1113].ai[3] = 0f;
29454 Main.npc[num1113].netUpdate = true;
29455 }
29456 else
29457 {
29458 Main.npc[num1113].ai[0] = 1f;
29459 Main.npc[num1113].ai[1] = 0f;
29460 Main.npc[num1113].ai[2] = 0f;
29461 Main.npc[num1113].ai[3] = 0f;
29462 Main.npc[num1113].netUpdate = true;
29463 }
29464 }
29465 }
29466 }
29467 }
29468 else if (type == 393)
29469 {
29470 int num1119 = (int)this.ai[0];
29471 if (Main.npc[num1119].active && Main.npc[num1119].type == 395)
29472 {
29474 num1107 = num1119;
29475 vector144 = Vector2.UnitY * 29f + ((this.ai[1] == 1f) ? Vector2.UnitX : (-Vector2.UnitX)) * 60f;
29476 vector144 *= Main.npc[num1119].scale;
29477 float num1120 = Main.npc[num1119].rotation;
29478 vector144 = vector144.RotatedBy(num1120);
29479 rotation = num1120;
29480 }
29481 }
29482 else if (type == 394)
29483 {
29484 int num1121 = (int)this.ai[0];
29485 if (Main.npc[num1121].active && Main.npc[num1121].type == 395)
29486 {
29488 num1107 = num1121;
29489 vector144 = Vector2.UnitY * -13f + ((this.ai[1] == 1f) ? Vector2.UnitX : (-Vector2.UnitX)) * 49f;
29490 vector144 *= Main.npc[num1121].scale;
29491 float num1122 = Main.npc[num1121].rotation;
29492 vector144 = vector144.RotatedBy(num1122);
29493 rotation = num1122;
29494 num1108 = ((this.ai[1] == 1f) ? 1 : (-1));
29495 }
29496 }
29497 else if (type == 492)
29498 {
29499 int num1123 = (int)this.ai[0];
29500 if (Main.npc[num1123].active && Main.npc[num1123].type == 491)
29501 {
29503 num1107 = num1123;
29504 vector144 = new Vector2((-122f + 68f * this.ai[1]) * (float)((Main.npc[num1123].spriteDirection != 1) ? 1 : (-1)), -6f);
29505 vector144 *= Main.npc[num1123].scale;
29506 float num1124 = Main.npc[num1123].rotation;
29507 vector144 = vector144.RotatedBy(num1124);
29508 rotation = num1124;
29509 }
29510 }
29511 if (num1107 != -1)
29512 {
29513 NPC nPC5 = Main.npc[num1107];
29515 position = nPC5.Center;
29516 position.X -= width / 2;
29517 position.Y -= height / 2;
29519 gfxOffY = nPC5.gfxOffY;
29520 direction = nPC5.direction;
29521 if (num1108 == 0)
29522 {
29523 spriteDirection = nPC5.spriteDirection;
29524 }
29525 else
29526 {
29528 }
29529 if (type == 390)
29530 {
29531 timeLeft = nPC5.timeLeft;
29532 velocity = nPC5.velocity;
29533 target = nPC5.target;
29534 if (this.ai[1] < 60f)
29535 {
29536 this.ai[1]++;
29537 }
29538 if (justHit)
29539 {
29540 this.ai[1] = -30f;
29541 }
29542 int num1125 = 438;
29543 int num1126 = 30;
29544 float num1127 = 7f;
29545 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
29546 {
29547 Vector2 vector145 = Main.player[target].Center - base.Center;
29549 float num1128 = vector145.Length();
29550 float num1129 = 700f;
29551 if (type == 214)
29552 {
29553 num1129 = 550f;
29554 }
29555 if (type == 215)
29556 {
29557 num1129 = 800f;
29558 }
29559 if (num1128 < num1129)
29560 {
29561 if (this.ai[1] == 60f && Math.Sign(vector145.X) == direction)
29562 {
29563 this.ai[1] = -60f;
29564 Vector2 center10 = Main.player[target].Center;
29565 Vector2 vector147 = base.Center - Vector2.UnitY * 4f;
29567 vector148.X += Main.rand.Next(-50, 51);
29568 vector148.Y += Main.rand.Next(-50, 51);
29569 vector148.X *= (float)Main.rand.Next(80, 121) * 0.01f;
29570 vector148.Y *= (float)Main.rand.Next(80, 121) * 0.01f;
29571 vector148.Normalize();
29572 if (float.IsNaN(vector148.X) || float.IsNaN(vector148.Y))
29573 {
29575 }
29576 vector148 *= num1127;
29577 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector147.X, vector147.Y, vector148.X, vector148.Y, num1125, num1126, 0f, Main.myPlayer);
29578 netUpdate = true;
29579 }
29580 else
29581 {
29582 float num1130 = this.ai[2];
29583 velocity.X *= 0.5f;
29584 this.ai[2] = 3f;
29585 if (Math.Abs(vector146.Y) > Math.Abs(vector146.X) * 2f)
29586 {
29587 if (vector146.Y > 0f)
29588 {
29589 this.ai[2] = 1f;
29590 }
29591 else
29592 {
29593 this.ai[2] = 5f;
29594 }
29595 }
29596 else if (Math.Abs(vector146.X) > Math.Abs(vector146.Y) * 2f)
29597 {
29598 this.ai[2] = 3f;
29599 }
29600 else if (vector146.Y > 0f)
29601 {
29602 this.ai[2] = 2f;
29603 }
29604 else
29605 {
29606 this.ai[2] = 4f;
29607 }
29608 if (this.ai[2] != num1130)
29609 {
29610 netUpdate = true;
29611 }
29612 }
29613 }
29614 }
29615 }
29616 if (type == 492)
29617 {
29618 timeLeft = nPC5.timeLeft;
29619 velocity = nPC5.velocity;
29620 if (this.ai[3] < 240f)
29621 {
29622 this.ai[3]++;
29623 }
29624 if (this.ai[3] == 2f)
29625 {
29627 }
29628 if (Collision.CanHit(position, width, height, Main.player[target].position, Main.player[target].width, Main.player[target].height))
29629 {
29630 Vector2 vector149 = Main.player[target].Center - base.Center;
29632 if (this.ai[3] >= 240f)
29633 {
29634 this.ai[3] = 0f;
29635 Vector2 center11 = Main.player[target].Center;
29636 Vector2 center12 = base.Center;
29638 if (float.IsNaN(vector151.X) || float.IsNaN(vector151.Y))
29639 {
29641 }
29642 vector151 *= 14f;
29643 vector151 += Vector2.UnitY * -5f;
29644 if (Main.netMode != 1)
29645 {
29646 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center12.X, center12.Y, vector151.X, vector151.Y, 240, 30, 0f, Main.myPlayer);
29647 }
29648 netUpdate = true;
29649 }
29650 else
29651 {
29652 float num1131 = this.ai[2];
29653 float[] array3 = new float[8];
29654 for (int num1132 = 0; num1132 < array3.Length; num1132++)
29655 {
29656 array3[num1132] = Vector2.Distance(base.Center + Vector2.UnitY.RotatedBy((float)num1132 * (-(float)Math.PI / 4f)) * 50f, Main.player[target].Center);
29657 }
29658 int num1133 = 0;
29659 for (int num1134 = 1; num1134 < array3.Length; num1134++)
29660 {
29661 if (array3[num1133] > array3[num1134])
29662 {
29663 num1133 = num1134;
29664 }
29665 }
29666 this.ai[2] = num1133 + 1;
29667 if (spriteDirection == 1)
29668 {
29669 this.ai[2] = 9f - this.ai[2];
29670 }
29671 if (this.ai[2] != num1131)
29672 {
29673 netUpdate = true;
29674 }
29675 }
29676 }
29677 else
29678 {
29679 if (this.ai[2] != 0f)
29680 {
29681 netUpdate = true;
29682 }
29683 this.ai[2] = 0f;
29684 }
29685 }
29686 if (type == 394)
29687 {
29688 timeLeft = nPC5.timeLeft;
29690 this.ai[3] = nPC5.ai[3];
29691 float num1135 = 440f;
29692 float num1136 = 140f;
29693 if (this.ai[3] >= num1135 && this.ai[3] < num1135 + num1136)
29694 {
29695 float num1137 = this.ai[3] - num1135;
29696 if (num1137 % 20f == 0f)
29697 {
29698 if (Main.netMode != 1)
29699 {
29701 spinningpoint3 = spinningpoint3.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29702 spinningpoint3 *= 8f;
29703 Vector2 vector152 = num1108 * Vector2.UnitX * 36f + base.Center + Vector2.UnitY * 8f;
29704 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector152.X, vector152.Y, spinningpoint3.X, spinningpoint3.Y, 448, attackDamage_ForProjectiles9, 0f, Main.myPlayer, 0f, 20f);
29705 }
29707 }
29708 }
29709 }
29710 if (type == 393)
29711 {
29712 timeLeft = nPC5.timeLeft;
29714 this.ai[3] = nPC5.ai[3];
29715 float num1138 = 280f;
29716 float num1139 = 140f;
29717 bool flag64 = this.ai[3] >= num1138 && this.ai[3] < num1138 + num1139;
29718 if (!flag64)
29719 {
29721 Player player7 = Main.player[target];
29722 Vector2 v3 = player7.Center - base.Center;
29723 if (v3.Y < 0f)
29724 {
29725 v3.Y = 0f;
29726 }
29727 v3.Normalize();
29728 if (float.IsNaN(v3.X) || float.IsNaN(v3.Y))
29729 {
29730 v3 = Vector2.UnitY;
29731 }
29732 this.ai[2] = v3.ToRotation();
29733 }
29734 if (flag64)
29735 {
29736 float num1140 = this.ai[3] - num1138;
29737 if (num1140 % 6f == 0f)
29738 {
29739 if (Main.netMode != 1)
29740 {
29741 Vector2 spinningpoint4 = this.ai[2].ToRotationVector2();
29742 spinningpoint4 = spinningpoint4.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433 / 3.0);
29743 spinningpoint4 *= 16f;
29744 Vector2 vector153 = base.Center + spinningpoint4 * 1f;
29745 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector153.X, vector153.Y, spinningpoint4.X, spinningpoint4.Y, 449, attackDamage_ForProjectiles10, 0f, Main.myPlayer);
29746 }
29748 }
29749 }
29750 }
29751 if (type != 392)
29752 {
29753 return;
29754 }
29755 timeLeft = nPC5.timeLeft;
29757 this.ai[3] = nPC5.ai[3];
29758 float num1141 = 20f;
29759 float num1142 = 240f;
29760 if (this.ai[3] >= num1141 && this.ai[3] < num1141 + num1142 && nPC5.ai[0] == 0f)
29761 {
29762 float num1143 = this.ai[3] - num1141;
29763 if (num1143 == 0f)
29764 {
29765 if (Main.netMode != 1)
29766 {
29767 Vector2 center13 = base.Center;
29768 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center13.X, center13.Y, 0f, 0f, 447, attackDamage_ForProjectiles11, 0f, Main.myPlayer, whoAmI + 1);
29769 }
29771 }
29772 }
29773 bool flag65 = false;
29774 int maxValue4 = 1000;
29775 int maxValue5 = 1000;
29776 int num1144 = 450;
29778 if (nPC5.ai[0] == 2f)
29779 {
29780 flag65 = true;
29781 maxValue5 = 120;
29782 maxValue4 = 120;
29783 }
29784 if (!flag65)
29785 {
29786 num1141 = 280f;
29787 num1142 = 120f;
29788 flag65 = flag65 || (this.ai[3] >= num1141 && this.ai[3] < num1141 + num1142);
29789 if (flag65)
29790 {
29791 maxValue5 = 90;
29792 maxValue4 = 60;
29793 }
29794 }
29795 if (!flag65)
29796 {
29797 num1141 = 440f;
29798 num1142 = 140f;
29799 flag65 = flag65 || (this.ai[3] >= num1141 && this.ai[3] < num1141 + num1142);
29800 if (flag65)
29801 {
29802 maxValue5 = 60;
29803 maxValue4 = 90;
29804 }
29805 }
29806 bool flag66 = true;
29807 bool flag67 = true;
29808 bool flag68 = true;
29809 bool flag69 = true;
29810 if (Main.npc[(int)localAI[0]].active && Main.npc[(int)localAI[0]].type == 393)
29811 {
29812 flag66 = false;
29813 }
29814 if (Main.npc[(int)localAI[1]].active && Main.npc[(int)localAI[1]].type == 393)
29815 {
29816 flag67 = false;
29817 }
29818 if (Main.npc[(int)localAI[2]].active && Main.npc[(int)localAI[2]].type == 394)
29819 {
29820 flag68 = false;
29821 }
29822 if (Main.npc[(int)localAI[3]].active && Main.npc[(int)localAI[3]].type == 394)
29823 {
29824 flag69 = false;
29825 }
29826 if (flag65)
29827 {
29828 bool flag70 = true;
29829 if (flag66 && Main.rand.Next(maxValue4) == 0)
29830 {
29831 if (Main.netMode != 1)
29832 {
29833 Vector2 spinningpoint5 = new Vector2(-1f * (float)Main.rand.NextDouble() * 3f, 1f);
29834 spinningpoint5 = spinningpoint5.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29835 spinningpoint5 *= 3f;
29836 Vector2 vector154 = -1f * Vector2.UnitX * Main.rand.Next(50, 70) + base.Center + Vector2.UnitY * Main.rand.Next(30, 45);
29837 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector154.X, vector154.Y, spinningpoint5.X, spinningpoint5.Y, num1144, attackDamage_ForProjectiles12, 0f, Main.myPlayer);
29838 }
29840 }
29841 if (flag67 && Main.rand.Next(maxValue4) == 0)
29842 {
29843 if (Main.netMode != 1)
29844 {
29845 Vector2 spinningpoint6 = new Vector2(1f * (float)Main.rand.NextDouble() * 3f, 1f);
29846 spinningpoint6 = spinningpoint6.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29847 spinningpoint6 *= 3f;
29848 Vector2 vector155 = 1f * Vector2.UnitX * Main.rand.Next(50, 70) + base.Center + Vector2.UnitY * Main.rand.Next(30, 45);
29849 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector155.X, vector155.Y, spinningpoint6.X, spinningpoint6.Y, num1144, attackDamage_ForProjectiles12, 0f, Main.myPlayer);
29850 }
29852 }
29853 }
29854 if (flag65)
29855 {
29856 bool flag71 = true;
29857 if (flag68 && Main.rand.Next(maxValue5) == 0)
29858 {
29859 if (Main.netMode != 1)
29860 {
29861 Vector2 spinningpoint7 = new Vector2(-1f * (float)Main.rand.NextDouble() * 2f, -1f);
29862 spinningpoint7 = spinningpoint7.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29863 spinningpoint7 *= 3f;
29864 Vector2 vector156 = -1f * Vector2.UnitX * Main.rand.Next(30, 60) + base.Center + Vector2.UnitY * Main.rand.Next(-30, -10);
29865 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector156.X, vector156.Y, spinningpoint7.X, spinningpoint7.Y, num1144, attackDamage_ForProjectiles12, 0f, Main.myPlayer);
29866 }
29868 }
29869 if (flag69 && Main.rand.Next(maxValue5) == 0)
29870 {
29871 if (Main.netMode != 1)
29872 {
29873 Vector2 spinningpoint8 = new Vector2(1f * (float)Main.rand.NextDouble() * 2f, -1f);
29874 spinningpoint8 = spinningpoint8.RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29875 spinningpoint8 *= 3f;
29876 Vector2 vector157 = 1f * Vector2.UnitX * Main.rand.Next(30, 60) + base.Center + Vector2.UnitY * Main.rand.Next(-30, -10);
29877 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector157.X, vector157.Y, spinningpoint8.X, spinningpoint8.Y, num1144, attackDamage_ForProjectiles12, 0f, Main.myPlayer);
29878 }
29880 }
29881 }
29882 if (flag66 && Main.rand.Next(8) == 0)
29883 {
29884 int num1145 = Dust.NewDust(-1f * Vector2.UnitX * Main.rand.Next(50, 70) + base.Center + Vector2.UnitY * Main.rand.Next(15, 30), 4, 16, (Main.rand.Next(4) != 0) ? 31 : 228, 0f, 0f, 100, default(Color), 1.2f);
29885 Main.dust[num1145].velocity = new Vector2(-1f * (float)Main.rand.NextDouble() * 3f, 1f).RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29886 Dust dust = Main.dust[num1145];
29887 dust.velocity *= 0.5f;
29888 Main.dust[num1145].velocity.Y = 0f - Math.Abs(Main.dust[num1145].velocity.Y);
29889 }
29890 if (flag67 && Main.rand.Next(8) == 0)
29891 {
29892 int num1146 = Dust.NewDust(Vector2.UnitX * Main.rand.Next(50, 70) + base.Center + Vector2.UnitY * Main.rand.Next(15, 30), 4, 16, (Main.rand.Next(4) != 0) ? 31 : 228, 0f, 0f, 100, default(Color), 1.2f);
29893 Main.dust[num1146].velocity = new Vector2((float)Main.rand.NextDouble() * 3f, 1f).RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29894 Dust dust = Main.dust[num1146];
29895 dust.velocity *= 0.5f;
29896 Main.dust[num1146].velocity.Y = 0f - Math.Abs(Main.dust[num1146].velocity.Y);
29897 }
29898 if (flag68 && Main.rand.Next(8) == 0)
29899 {
29900 int num1147 = Dust.NewDust(-1f * Vector2.UnitX * Main.rand.Next(30, 60) + base.Center + Vector2.UnitY * Main.rand.Next(-30, -10), 4, 16, (Main.rand.Next(4) != 0) ? 31 : 228, 0f, 0f, 100, default(Color), 1.2f);
29901 Main.dust[num1147].velocity = new Vector2(-1f * (float)Main.rand.NextDouble() * 2f, 1f).RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29902 Dust dust = Main.dust[num1147];
29903 dust.velocity *= 0.5f;
29904 Main.dust[num1147].velocity.Y = 0f - Math.Abs(Main.dust[num1147].velocity.Y);
29905 }
29906 if (flag69 && Main.rand.Next(8) == 0)
29907 {
29908 int num1148 = Dust.NewDust(Vector2.UnitX * Main.rand.Next(30, 60) + base.Center + Vector2.UnitY * Main.rand.Next(-30, -10), 4, 16, (Main.rand.Next(4) != 0) ? 31 : 228, 0f, 0f, 100, default(Color), 1.2f);
29909 Main.dust[num1148].velocity = new Vector2((float)Main.rand.NextDouble() * 2f, 1f).RotatedBy((Main.rand.NextDouble() - 0.5) * 0.7853981852531433);
29910 Dust dust = Main.dust[num1148];
29911 dust.velocity *= 0.5f;
29912 Main.dust[num1148].velocity.Y = 0f - Math.Abs(Main.dust[num1148].velocity.Y);
29913 }
29914 }
29915 else if (type == 390)
29916 {
29917 Transform(382);
29918 }
29919 else if (type == 416)
29920 {
29921 Transform(518);
29922 }
29923 else
29924 {
29925 life = 0;
29926 HitEffect();
29927 active = false;
29928 }
29929 }
29930 else if (aiStyle == 76)
29931 {
29932 if (localAI[3] == 0f && Main.netMode != 1 && type == 395)
29933 {
29934 localAI[3] = 1f;
29935 int[] array4 = new int[4];
29936 int num1149 = 0;
29937 for (int num1150 = 0; num1150 < 2; num1150++)
29938 {
29939 int num1151 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X + num1150 * 300 - 150, (int)base.Center.Y, 393, whoAmI);
29940 Main.npc[num1151].ai[1] = num1150;
29941 Main.npc[num1151].netUpdate = true;
29942 array4[num1149++] = num1151;
29943 }
29944 for (int num1152 = 0; num1152 < 2; num1152++)
29945 {
29946 int num1153 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X + num1152 * 300 - 150, (int)base.Center.Y, 394, whoAmI);
29947 Main.npc[num1153].ai[1] = num1152;
29948 Main.npc[num1153].netUpdate = true;
29949 array4[num1149++] = num1153;
29950 }
29951 int num1154 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y, 392, whoAmI);
29952 Main.npc[num1154].ai[0] = whoAmI;
29953 Main.npc[num1154].netUpdate = true;
29954 for (int num1155 = 0; num1155 < 4; num1155++)
29955 {
29956 Main.npc[array4[num1155]].ai[0] = whoAmI;
29957 }
29958 for (int num1156 = 0; num1156 < 4; num1156++)
29959 {
29960 Main.npc[num1154].localAI[num1156] = array4[num1156];
29961 }
29962 }
29963 if (this.ai[0] == 3f)
29964 {
29965 StrikeNPCNoInteraction(9999, 0f, 0);
29966 return;
29967 }
29968 Vector2 center14 = base.Center;
29969 Player player8 = Main.player[target];
29970 float num1157 = 5600f;
29971 if (target < 0 || target == 255 || player8.dead || !player8.active || Vector2.Distance(player8.Center, center14) > num1157)
29972 {
29973 TargetClosest();
29974 player8 = Main.player[target];
29975 netUpdate = true;
29976 }
29977 if ((player8.dead || !player8.active || Vector2.Distance(player8.Center, center14) > num1157) && this.ai[0] != 1f)
29978 {
29979 if (this.ai[0] == 0f)
29980 {
29981 this.ai[0] = -1f;
29982 }
29983 if (this.ai[0] == 2f)
29984 {
29985 this.ai[0] = -2f;
29986 }
29987 netUpdate = true;
29988 }
29989 if (this.ai[0] == -1f || this.ai[0] == -2f)
29990 {
29991 velocity.Y -= 0.4f;
29992 EncourageDespawn(10);
29993 if (!player8.dead)
29994 {
29995 timeLeft = 300;
29996 if (this.ai[0] == -2f)
29997 {
29998 this.ai[0] = 2f;
29999 }
30000 if (this.ai[0] == 0f)
30001 {
30002 this.ai[0] = 0f;
30003 }
30004 this.ai[1] = 0f;
30005 this.ai[2] = 0f;
30006 this.ai[3] = 0f;
30007 netUpdate = true;
30008 }
30009 }
30010 else if (this.ai[0] == 0f)
30011 {
30012 int num1158 = 0;
30013 int num1159 = 0;
30014 if (this.ai[3] >= 580f)
30015 {
30016 num1158 = 0;
30017 }
30018 else if (this.ai[3] >= 440f)
30019 {
30020 num1158 = 5;
30021 }
30022 else if (this.ai[3] >= 420f)
30023 {
30024 num1158 = 4;
30025 }
30026 else if (this.ai[3] >= 280f)
30027 {
30028 num1158 = 3;
30029 }
30030 else if (this.ai[3] >= 260f)
30031 {
30032 num1158 = 2;
30033 }
30034 else if (this.ai[3] >= 20f)
30035 {
30036 num1158 = 1;
30037 }
30038 this.ai[3]++;
30039 if (this.ai[3] >= 600f)
30040 {
30041 this.ai[3] = 0f;
30042 }
30043 num1159 = num1158;
30044 if (this.ai[3] >= 580f)
30045 {
30046 num1158 = 0;
30047 }
30048 else if (this.ai[3] >= 440f)
30049 {
30050 num1158 = 5;
30051 }
30052 else if (this.ai[3] >= 420f)
30053 {
30054 num1158 = 4;
30055 }
30056 else if (this.ai[3] >= 280f)
30057 {
30058 num1158 = 3;
30059 }
30060 else if (this.ai[3] >= 260f)
30061 {
30062 num1158 = 2;
30063 }
30064 else if (this.ai[3] >= 20f)
30065 {
30066 num1158 = 1;
30067 }
30068 if (num1158 != num1159)
30069 {
30070 if (num1158 == 0)
30071 {
30072 this.ai[2] = 0f;
30073 }
30074 if (num1158 == 1)
30075 {
30076 this.ai[2] = ((Math.Sign((player8.Center - center14).X) == 1) ? 1 : (-1));
30077 }
30078 if (num1158 == 2)
30079 {
30080 this.ai[2] = 0f;
30081 }
30082 netUpdate = true;
30083 }
30084 if (num1158 == 0)
30085 {
30086 if (this.ai[2] == 0f)
30087 {
30088 this.ai[2] = -600 * Math.Sign((center14 - player8.Center).X);
30089 }
30090 Vector2 vector158 = player8.Center + new Vector2(this.ai[2], -250f) - center14;
30091 if (vector158.Length() < 50f)
30092 {
30093 this.ai[3] = 19f;
30094 }
30095 else
30096 {
30097 vector158.Normalize();
30098 velocity = Vector2.Lerp(velocity, vector158 * 16f, 0.1f);
30099 }
30100 }
30101 if (num1158 == 1)
30102 {
30103 int num1160 = (int)base.Center.X / 16;
30104 int num1161 = (int)(position.Y + (float)height) / 16;
30105 int num1162 = 0;
30106 if (Main.tile[num1160, num1161].nactive() && Main.tileSolid[Main.tile[num1160, num1161].type] && !Main.tileSolidTop[Main.tile[num1160, num1161].type])
30107 {
30108 num1162 = 1;
30109 }
30110 else
30111 {
30112 for (; num1162 < 150 && num1161 + num1162 < Main.maxTilesY; num1162++)
30113 {
30114 int num1163 = num1161 + num1162;
30115 if (Main.tile[num1160, num1163].nactive() && Main.tileSolid[Main.tile[num1160, num1163].type] && !Main.tileSolidTop[Main.tile[num1160, num1163].type])
30116 {
30117 num1162--;
30118 break;
30119 }
30120 }
30121 }
30122 float num1164 = num1162 * 16;
30123 float num1165 = 250f;
30124 if (num1164 < num1165)
30125 {
30126 float num1166 = -4f;
30127 if (0f - num1166 > num1164)
30128 {
30129 num1166 = 0f - num1164;
30130 }
30131 velocity.Y = MathHelper.Lerp(velocity.Y, num1166, 0.05f);
30132 }
30133 else
30134 {
30135 velocity.Y *= 0.95f;
30136 }
30137 velocity.X = 3.5f * this.ai[2];
30138 }
30139 switch (num1158)
30140 {
30141 case 2:
30142 {
30143 if (this.ai[2] == 0f)
30144 {
30145 this.ai[2] = 300 * Math.Sign((center14 - player8.Center).X);
30146 }
30147 Vector2 vector159 = player8.Center + new Vector2(this.ai[2], -170f) - center14;
30148 int num1175 = (int)base.Center.X / 16;
30149 int num1176 = (int)(position.Y + (float)height) / 16;
30150 int num1177 = 0;
30151 if (Main.tile[num1175, num1176].nactive() && Main.tileSolid[Main.tile[num1175, num1176].type] && !Main.tileSolidTop[Main.tile[num1175, num1176].type])
30152 {
30153 num1177 = 1;
30154 }
30155 else
30156 {
30157 for (; num1177 < 150 && num1176 + num1177 < Main.maxTilesY; num1177++)
30158 {
30159 int num1178 = num1176 + num1177;
30160 if (Main.tile[num1175, num1178].nactive() && Main.tileSolid[Main.tile[num1175, num1178].type] && !Main.tileSolidTop[Main.tile[num1175, num1178].type])
30161 {
30162 num1177--;
30163 break;
30164 }
30165 }
30166 }
30167 float num1179 = num1177 * 16;
30168 float num1180 = 170f;
30169 if (num1179 < num1180)
30170 {
30171 vector159.Y -= num1180 - num1179;
30172 }
30173 if (vector159.Length() < 70f)
30174 {
30175 this.ai[3] = 279f;
30176 break;
30177 }
30178 vector159.Normalize();
30179 velocity = Vector2.Lerp(velocity, vector159 * 20f, 0.1f);
30180 break;
30181 }
30182 case 3:
30183 {
30184 float num1167 = 0.85f;
30185 int num1168 = (int)base.Center.X / 16;
30186 int num1169 = (int)(position.Y + (float)height) / 16;
30187 int num1170 = 0;
30188 if (Main.tile[num1168, num1169].nactive() && Main.tileSolid[Main.tile[num1168, num1169].type] && !Main.tileSolidTop[Main.tile[num1168, num1169].type])
30189 {
30190 num1170 = 1;
30191 }
30192 else
30193 {
30194 for (; num1170 < 150 && num1169 + num1170 < Main.maxTilesY; num1170++)
30195 {
30196 int num1171 = num1169 + num1170;
30197 if (Main.tile[num1168, num1171].nactive() && Main.tileSolid[Main.tile[num1168, num1171].type] && !Main.tileSolidTop[Main.tile[num1168, num1171].type])
30198 {
30199 num1170--;
30200 break;
30201 }
30202 }
30203 }
30204 float num1172 = num1170 * 16;
30205 float num1173 = 170f;
30206 if (num1172 < num1173)
30207 {
30208 float num1174 = -4f;
30209 if (0f - num1174 > num1172)
30210 {
30211 num1174 = 0f - num1172;
30212 }
30213 velocity.Y = MathHelper.Lerp(velocity.Y, num1174, 0.05f);
30214 }
30215 else
30216 {
30217 velocity.Y *= num1167;
30218 }
30219 velocity.X *= num1167;
30220 break;
30221 }
30222 }
30223 switch (num1158)
30224 {
30225 case 4:
30226 {
30227 Vector2 vector160 = player8.Center + new Vector2(0f, -250f) - center14;
30228 if (vector160.Length() < 50f)
30229 {
30230 this.ai[3] = 439f;
30231 break;
30232 }
30233 vector160.Normalize();
30234 velocity = Vector2.Lerp(velocity, vector160 * 16f, 0.1f);
30235 break;
30236 }
30237 case 5:
30238 velocity *= 0.85f;
30239 break;
30240 }
30241 }
30242 else if (this.ai[0] == 1f)
30243 {
30244 dontTakeDamage = false;
30245 velocity *= 0.96f;
30246 float num1181 = 150f;
30247 this.ai[1]++;
30248 if (this.ai[1] >= num1181)
30249 {
30250 this.ai[0] = 2f;
30251 this.ai[1] = 0f;
30252 rotation = 0f;
30253 netUpdate = true;
30254 }
30255 else if (this.ai[1] < 40f)
30256 {
30257 rotation = Vector2.UnitY.RotatedBy(this.ai[1] / 40f * ((float)Math.PI * 2f)).Y * 0.2f;
30258 }
30259 else if (this.ai[1] < 80f)
30260 {
30261 rotation = Vector2.UnitY.RotatedBy(this.ai[1] / 20f * ((float)Math.PI * 2f)).Y * 0.3f;
30262 }
30263 else if (this.ai[1] < 120f)
30264 {
30265 rotation = Vector2.UnitY.RotatedBy(this.ai[1] / 10f * ((float)Math.PI * 2f)).Y * 0.4f;
30266 }
30267 else
30268 {
30269 rotation = (this.ai[1] - 120f) / 30f * ((float)Math.PI * 2f);
30270 }
30271 }
30272 else if (this.ai[0] == 2f)
30273 {
30274 int num1182 = 80;
30275 float num1183 = 3600f;
30276 float num1184 = 120f;
30277 float num1185 = 60f;
30278 int num1186 = 0;
30279 if (this.ai[3] % num1184 >= num1185)
30280 {
30281 num1186 = 1;
30282 }
30283 int num1187 = num1186;
30284 num1186 = 0;
30285 this.ai[3]++;
30286 if (this.ai[3] % num1184 >= num1185)
30287 {
30288 num1186 = 1;
30289 }
30290 if (num1186 != num1187)
30291 {
30292 if (num1186 == 1)
30293 {
30294 this.ai[2] = ((Math.Sign((player8.Center - center14).X) == 1) ? 1 : (-1));
30295 if (Main.netMode != 1)
30296 {
30297 Vector2 center15 = base.Center;
30298 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center15.X, center15.Y, 0f, 0f, 447, num1182, 0f, Main.myPlayer, whoAmI + 1);
30299 }
30301 }
30302 netUpdate = true;
30303 }
30304 if (this.ai[3] >= num1183)
30305 {
30306 this.ai[0] = 2f;
30307 this.ai[1] = 0f;
30308 this.ai[2] = 0f;
30309 this.ai[3] = 0f;
30310 netUpdate = true;
30311 }
30312 else if (num1186 == 0)
30313 {
30314 Vector2 vector161 = player8.Center + new Vector2(this.ai[2] * 350f, -250f) - center14;
30315 vector161.Normalize();
30316 velocity = Vector2.Lerp(velocity, vector161 * 16f, 0.1f);
30317 }
30318 else
30319 {
30320 int num1188 = (int)base.Center.X / 16;
30321 int num1189 = (int)(position.Y + (float)height) / 16;
30322 int num1190 = 0;
30323 if (Main.tile[num1188, num1189].nactive() && Main.tileSolid[Main.tile[num1188, num1189].type] && !Main.tileSolidTop[Main.tile[num1188, num1189].type])
30324 {
30325 num1190 = 1;
30326 }
30327 else
30328 {
30329 for (; num1190 < 150 && num1189 + num1190 < Main.maxTilesY; num1190++)
30330 {
30331 int num1191 = num1189 + num1190;
30332 if (Main.tile[num1188, num1191].nactive() && Main.tileSolid[Main.tile[num1188, num1191].type] && !Main.tileSolidTop[Main.tile[num1188, num1191].type])
30333 {
30334 num1190--;
30335 break;
30336 }
30337 }
30338 }
30339 float num1192 = num1190 * 16;
30340 float num1193 = 250f;
30341 if (num1192 < num1193)
30342 {
30343 float num1194 = -4f;
30344 if (0f - num1194 > num1192)
30345 {
30346 num1194 = 0f - num1192;
30347 }
30348 velocity.Y = MathHelper.Lerp(velocity.Y, num1194, 0.05f);
30349 }
30350 else
30351 {
30352 velocity.Y *= 0.95f;
30353 }
30354 velocity.X = 8f * this.ai[2];
30355 }
30356 rotation = 0f;
30357 }
30358 bool flag72 = false;
30359 if (position.Y < -100f)
30360 {
30361 flag72 = true;
30362 }
30363 if (position.X < -100f)
30364 {
30365 flag72 = true;
30366 }
30367 if (position.Y > (float)(Main.maxTilesY * 16 + 100))
30368 {
30369 flag72 = true;
30370 }
30371 if (position.X > (float)(Main.maxTilesX * 16 + 100))
30372 {
30373 flag72 = true;
30374 }
30375 if (flag72)
30376 {
30377 position = Vector2.Clamp(position, new Vector2(-100f), new Vector2(100f) + new Vector2(Main.maxTilesX, Main.maxTilesY) * 16f);
30378 active = false;
30379 netUpdate = true;
30380 }
30381 }
30382 else if (aiStyle == 77)
30383 {
30384 if (this.ai[0] != -1f && this.ai[0] != 2f && Main.rand.Next(200) == 0)
30385 {
30386 SoundEngine.PlaySound(29, (int)base.Center.X, (int)base.Center.Y, Main.rand.Next(93, 100));
30387 }
30388 if (localAI[3] == 0f)
30389 {
30390 netUpdate = true;
30391 localAI[3] = 1f;
30392 this.ai[0] = -1f;
30393 }
30394 if (this.ai[0] == -2f)
30395 {
30396 dontTakeDamage = true;
30397 this.ai[1]++;
30398 if (this.ai[1] == 30f)
30399 {
30400 SoundEngine.PlaySound(29, (int)base.Center.X, (int)base.Center.Y, 92);
30401 }
30402 if (this.ai[1] < 60f)
30403 {
30404 MoonlordDeathDrama.RequestLight(this.ai[1] / 30f, base.Center);
30405 }
30406 if (this.ai[1] == 60f)
30407 {
30408 this.ai[1] = 0f;
30409 this.ai[0] = 0f;
30410 if (Main.netMode != 1 && type == 398)
30411 {
30412 this.ai[2] = Main.rand.Next(3);
30413 this.ai[2] = 0f;
30414 netUpdate = true;
30415 }
30416 }
30417 }
30418 if (this.ai[0] == -1f)
30419 {
30420 dontTakeDamage = true;
30421 this.ai[1]++;
30422 if (this.ai[1] == 30f)
30423 {
30424 SoundEngine.PlaySound(29, (int)base.Center.X, (int)base.Center.Y, 92);
30425 }
30426 if (this.ai[1] < 60f)
30427 {
30428 MoonlordDeathDrama.RequestLight(this.ai[1] / 30f, base.Center);
30429 }
30430 if (this.ai[1] == 60f)
30431 {
30432 this.ai[1] = 0f;
30433 this.ai[0] = 0f;
30434 if (Main.netMode != 1 && type == 398)
30435 {
30436 this.ai[2] = Main.rand.Next(3);
30437 this.ai[2] = 0f;
30438 netUpdate = true;
30439 int[] array5 = new int[3];
30440 int num1195 = 0;
30441 for (int num1196 = 0; num1196 < 2; num1196++)
30442 {
30443 int num1197 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X + num1196 * 800 - 400, (int)base.Center.Y - 100, 397, whoAmI);
30444 Main.npc[num1197].ai[2] = num1196;
30445 Main.npc[num1197].netUpdate = true;
30446 array5[num1195++] = num1197;
30447 }
30448 int num1198 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y - 400, 396, whoAmI);
30449 Main.npc[num1198].netUpdate = true;
30450 array5[num1195++] = num1198;
30451 for (int num1199 = 0; num1199 < 3; num1199++)
30452 {
30453 Main.npc[array5[num1199]].ai[3] = whoAmI;
30454 }
30455 for (int num1200 = 0; num1200 < 3; num1200++)
30456 {
30458 }
30459 }
30460 }
30461 }
30462 if (this.ai[0] == 0f)
30463 {
30464 dontTakeDamage = true;
30466 Vector2 vector162 = Main.player[target].Center - base.Center + new Vector2(0f, 130f);
30467 if (vector162.Length() > 20f)
30468 {
30473 }
30474 if (Main.netMode != 1)
30475 {
30476 bool flag73 = false;
30477 if (localAI[0] < 0f || localAI[1] < 0f || localAI[2] < 0f)
30478 {
30479 flag73 = true;
30480 }
30481 else if (!Main.npc[(int)localAI[0]].active || Main.npc[(int)localAI[0]].type != 397)
30482 {
30483 flag73 = true;
30484 }
30485 else if (!Main.npc[(int)localAI[1]].active || Main.npc[(int)localAI[1]].type != 397)
30486 {
30487 flag73 = true;
30488 }
30489 else if (!Main.npc[(int)localAI[2]].active || Main.npc[(int)localAI[2]].type != 396)
30490 {
30491 flag73 = true;
30492 }
30493 if (flag73)
30494 {
30495 life = 0;
30496 HitEffect();
30497 active = false;
30498 }
30499 bool flag74 = true;
30500 if (Main.npc[(int)localAI[0]].ai[0] != -2f)
30501 {
30502 flag74 = false;
30503 }
30504 if (Main.npc[(int)localAI[1]].ai[0] != -2f)
30505 {
30506 flag74 = false;
30507 }
30508 if (Main.npc[(int)localAI[2]].ai[0] != -2f)
30509 {
30510 flag74 = false;
30511 }
30512 if (flag74)
30513 {
30514 this.ai[0] = 1f;
30515 dontTakeDamage = false;
30516 netUpdate = true;
30517 }
30518 }
30519 }
30520 else if (this.ai[0] == 1f)
30521 {
30522 dontTakeDamage = false;
30524 Vector2 vector163 = Main.player[target].Center - base.Center + new Vector2(0f, 130f);
30525 if (vector163.Length() > 20f)
30526 {
30531 }
30532 }
30533 else if (this.ai[0] == 2f)
30534 {
30535 dontTakeDamage = true;
30537 this.ai[1]++;
30538 if (this.ai[1] < 60f)
30539 {
30540 MoonlordDeathDrama.RequestLight(this.ai[1] / 60f, base.Center);
30541 }
30542 if (this.ai[1] == 60f)
30543 {
30544 for (int num1201 = 0; num1201 < 1000; num1201++)
30545 {
30546 Projectile projectile = Main.projectile[num1201];
30547 if (projectile.active && (projectile.type == 456 || projectile.type == 462 || projectile.type == 455 || projectile.type == 452 || projectile.type == 454))
30548 {
30549 projectile.Kill();
30550 }
30551 }
30552 for (int num1202 = 0; num1202 < 200; num1202++)
30553 {
30554 NPC nPC6 = Main.npc[num1202];
30555 if (nPC6.active && nPC6.type == 400)
30556 {
30557 nPC6.HitEffect(0, 9999.0);
30558 nPC6.active = false;
30559 }
30560 }
30561 }
30562 if (this.ai[1] % 3f == 0f && this.ai[1] < 580f && this.ai[1] > 60f)
30563 {
30564 Vector2 vector164 = Utils.RandomVector2(Main.rand, -1f, 1f);
30565 if (vector164 != Vector2.Zero)
30566 {
30567 vector164.Normalize();
30568 }
30569 vector164 *= 20f + Main.rand.NextFloat() * 400f;
30570 bool flag75 = true;
30571 Vector2 vector165 = base.Center + vector164;
30572 Point point7 = vector165.ToTileCoordinates();
30573 if (!WorldGen.InWorld(point7.X, point7.Y))
30574 {
30575 flag75 = false;
30576 }
30577 if (flag75 && WorldGen.SolidTile(point7.X, point7.Y))
30578 {
30579 flag75 = false;
30580 }
30581 float num1203 = Main.rand.Next(6, 19);
30582 float num1204 = (float)Math.PI * 2f / num1203;
30583 float num1205 = (float)Math.PI * 2f * Main.rand.NextFloat();
30584 float num1206 = 1f + Main.rand.NextFloat() * 2f;
30585 float num1207 = 1f + Main.rand.NextFloat();
30586 float fadeIn = 0.4f + Main.rand.NextFloat();
30587 int num1208 = Utils.SelectRandom<int>(Main.rand, 31, 229);
30588 if (flag75 && !Main.dedServ)
30589 {
30591 for (float num1209 = 0f; num1209 < num1203 * 2f; num1209++)
30592 {
30593 Dust dust6 = Main.dust[Dust.NewDust(vector165, 0, 0, 229)];
30594 dust6.noGravity = true;
30595 dust6.position = vector165;
30596 dust6.velocity = Vector2.UnitY.RotatedBy(num1205 + num1204 * num1209) * num1206 * (Main.rand.NextFloat() * 1.6f + 1.6f);
30597 dust6.fadeIn = fadeIn;
30598 dust6.scale = num1207;
30599 }
30600 }
30601 for (float num1210 = 0f; num1210 < this.ai[1] / 60f; num1210++)
30602 {
30603 Vector2 vector166 = Utils.RandomVector2(Main.rand, -1f, 1f);
30604 if (vector166 != Vector2.Zero)
30605 {
30606 vector166.Normalize();
30607 }
30608 vector166 *= 20f + Main.rand.NextFloat() * 800f;
30609 Vector2 vec = base.Center + vector166;
30610 Point point8 = vec.ToTileCoordinates();
30611 bool flag76 = true;
30612 if (!WorldGen.InWorld(point8.X, point8.Y))
30613 {
30614 flag76 = false;
30615 }
30616 if (flag76 && WorldGen.SolidTile(point8.X, point8.Y))
30617 {
30618 flag76 = false;
30619 }
30620 if (flag76)
30621 {
30622 Dust dust7 = Main.dust[Dust.NewDust(vec, 0, 0, num1208)];
30623 dust7.noGravity = true;
30624 dust7.position = vec;
30625 dust7.velocity = -Vector2.UnitY * num1206 * (Main.rand.NextFloat() * 0.9f + 1.6f);
30626 dust7.fadeIn = fadeIn;
30627 dust7.scale = num1207;
30628 }
30629 }
30630 }
30631 if (this.ai[1] % 15f == 0f && this.ai[1] < 480f && this.ai[1] >= 90f && Main.netMode != 1)
30632 {
30633 Vector2 vector167 = Utils.RandomVector2(Main.rand, -1f, 1f);
30634 if (vector167 != Vector2.Zero)
30635 {
30636 vector167.Normalize();
30637 }
30638 vector167 *= 20f + Main.rand.NextFloat() * 400f;
30639 bool flag77 = true;
30640 Vector2 vec2 = base.Center + vector167;
30641 Point point9 = vec2.ToTileCoordinates();
30642 if (!WorldGen.InWorld(point9.X, point9.Y))
30643 {
30644 flag77 = false;
30645 }
30646 if (flag77 && WorldGen.SolidTile(point9.X, point9.Y))
30647 {
30648 flag77 = false;
30649 }
30650 if (flag77)
30651 {
30652 float num1211 = (float)(Main.rand.Next(4) < 2).ToDirectionInt() * ((float)Math.PI / 8f + (float)Math.PI / 4f * Main.rand.NextFloat());
30653 Vector2 vector168 = new Vector2(0f, (0f - Main.rand.NextFloat()) * 0.5f - 0.5f).RotatedBy(num1211) * 6f;
30654 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vec2.X, vec2.Y, vector168.X, vector168.Y, 622, 0, 0f, Main.myPlayer);
30655 }
30656 }
30657 if (this.ai[1] == 1f)
30658 {
30660 }
30661 if (this.ai[1] >= 480f)
30662 {
30663 MoonlordDeathDrama.RequestLight((this.ai[1] - 480f) / 120f, base.Center);
30664 }
30665 if (this.ai[1] >= 600f)
30666 {
30667 life = 0;
30668 HitEffect(0, 1337.0);
30669 checkDead();
30670 return;
30671 }
30672 }
30673 else if (this.ai[0] == 3f)
30674 {
30675 dontTakeDamage = true;
30677 this.ai[1]++;
30678 if (this.ai[1] < 60f)
30679 {
30680 MoonlordDeathDrama.RequestLight(this.ai[1] / 40f, base.Center);
30681 }
30682 if (this.ai[1] == 40f)
30683 {
30684 for (int num1212 = 0; num1212 < 1000; num1212++)
30685 {
30686 Projectile projectile2 = Main.projectile[num1212];
30687 if (projectile2.active && (projectile2.type == 456 || projectile2.type == 462 || projectile2.type == 455 || projectile2.type == 452 || projectile2.type == 454))
30688 {
30689 projectile2.active = false;
30690 if (Main.netMode != 1)
30691 {
30692 NetMessage.SendData(27, -1, -1, null, num1212);
30693 }
30694 }
30695 }
30696 for (int num1213 = 0; num1213 < 200; num1213++)
30697 {
30698 NPC nPC7 = Main.npc[num1213];
30699 if (nPC7.active && nPC7.type == 400)
30700 {
30701 nPC7.active = false;
30702 if (Main.netMode != 1)
30703 {
30704 NetMessage.SendData(23, -1, -1, null, nPC7.whoAmI);
30705 }
30706 }
30707 }
30708 for (int num1214 = 0; num1214 < 600; num1214++)
30709 {
30710 Gore gore2 = Main.gore[num1214];
30711 if (gore2.active && gore2.type >= 619 && gore2.type <= 622)
30712 {
30713 gore2.active = false;
30714 }
30715 }
30716 }
30717 if (this.ai[1] >= 60f)
30718 {
30719 for (int num1215 = 0; num1215 < 200; num1215++)
30720 {
30721 NPC nPC8 = Main.npc[num1215];
30722 if (nPC8.active && (nPC8.type == 400 || nPC8.type == 397 || nPC8.type == 396))
30723 {
30724 nPC8.active = false;
30725 if (Main.netMode != 1)
30726 {
30727 NetMessage.SendData(23, -1, -1, null, nPC8.whoAmI);
30728 }
30729 }
30730 }
30731 active = false;
30732 if (Main.netMode != 1)
30733 {
30734 NetMessage.SendData(23, -1, -1, null, whoAmI);
30735 }
30736 LunarApocalypseIsUp = false;
30737 if (Main.netMode == 2)
30738 {
30739 NetMessage.SendData(7);
30740 }
30741 return;
30742 }
30743 }
30744 bool flag78 = false;
30745 if (this.ai[0] == -2f || this.ai[0] == -1f || this.ai[0] == 2f || this.ai[0] == 3f)
30746 {
30747 flag78 = true;
30748 }
30749 if (Main.player[target].active && !Main.player[target].dead)
30750 {
30751 flag78 = true;
30752 }
30753 if (!flag78)
30754 {
30755 for (int num1216 = 0; num1216 < 255; num1216++)
30756 {
30757 if (Main.player[num1216].active && !Main.player[num1216].dead)
30758 {
30759 flag78 = true;
30760 break;
30761 }
30762 }
30763 }
30764 if (!flag78)
30765 {
30766 this.ai[0] = 3f;
30767 this.ai[1] = 0f;
30768 netUpdate = true;
30769 }
30770 if (!(this.ai[0] >= 0f) || !(this.ai[0] < 2f) || Main.netMode == 1 || !(Distance(Main.player[target].Center) > 2400f))
30771 {
30772 return;
30773 }
30774 this.ai[0] = -2f;
30775 netUpdate = true;
30776 Vector2 vector169 = Main.player[target].Center - Vector2.UnitY * 150f - base.Center;
30778 if (Main.npc[(int)localAI[0]].active)
30779 {
30780 NPC nPC3 = Main.npc[(int)localAI[0]];
30781 nPC3.position += vector169;
30782 Main.npc[(int)localAI[0]].netUpdate = true;
30783 }
30784 if (Main.npc[(int)localAI[1]].active)
30785 {
30786 NPC nPC3 = Main.npc[(int)localAI[1]];
30787 nPC3.position += vector169;
30788 Main.npc[(int)localAI[1]].netUpdate = true;
30789 }
30790 if (Main.npc[(int)localAI[2]].active)
30791 {
30792 NPC nPC3 = Main.npc[(int)localAI[2]];
30793 nPC3.position += vector169;
30794 Main.npc[(int)localAI[2]].netUpdate = true;
30795 }
30796 for (int num1217 = 0; num1217 < 200; num1217++)
30797 {
30798 NPC nPC9 = Main.npc[num1217];
30799 if (nPC9.active && nPC9.type == 400)
30800 {
30801 NPC nPC3 = nPC9;
30802 nPC3.position += vector169;
30803 nPC9.netUpdate = true;
30804 }
30805 }
30806 }
30807 else if (aiStyle == 78)
30808 {
30810 if (!Main.npc[(int)this.ai[3]].active || Main.npc[(int)this.ai[3]].type != 398)
30811 {
30812 life = 0;
30813 HitEffect();
30814 active = false;
30815 }
30816 bool flag79 = this.ai[2] == 0f;
30817 float num1218 = -flag79.ToDirectionInt();
30818 spriteDirection = (int)num1218;
30819 if (frameCounter == 19.0 && !dontTakeDamage)
30820 {
30822 }
30823 dontTakeDamage = frameCounter >= 21.0;
30824 Vector2 vector170 = new Vector2(30f, 66f);
30825 float num1219 = 0f;
30826 float num1220 = 0f;
30827 bool flag80 = true;
30828 int num1221 = 0;
30829 if (this.ai[0] != -2f)
30830 {
30831 float num1222 = this.ai[0];
30832 this.ai[1]++;
30833 int num1223 = (int)Main.npc[(int)this.ai[3]].ai[2];
30834 int num1224 = ((!flag79) ? 1 : 0);
30835 int num1225 = 0;
30836 int num1226 = 0;
30837 for (; num1225 < 5; num1225++)
30838 {
30840 if (!(num1220 + (float)num1226 <= this.ai[1]))
30841 {
30842 break;
30843 }
30844 num1226 += (int)num1220;
30845 }
30846 if (num1225 == 5)
30847 {
30848 num1225 = 0;
30849 this.ai[1] = 0f;
30851 num1226 = 0;
30852 }
30853 this.ai[0] = MoonLordAttacksArray[num1223, num1224, 0, num1225];
30854 num1219 = (int)this.ai[1] - num1226;
30855 if (this.ai[0] != num1222)
30856 {
30857 netUpdate = true;
30858 }
30859 }
30860 if (this.ai[0] == -2f)
30861 {
30862 damage = 80;
30863 num1221 = 0;
30864 dontTakeDamage = true;
30865 this.ai[1]++;
30866 if (this.ai[1] >= 32f)
30867 {
30868 this.ai[1] = 0f;
30869 }
30870 if (this.ai[1] < 0f)
30871 {
30872 this.ai[1] = 0f;
30873 }
30874 Vector2 center16 = Main.npc[(int)this.ai[3]].Center;
30875 Vector2 vector171 = center16 + new Vector2(350f * num1218, -100f);
30876 Vector2 vector172 = vector171 - base.Center;
30877 if (vector172.Length() > 20f)
30878 {
30879 vector172.Normalize();
30880 vector172 *= 6f;
30882 if (vector172 != Vector2.Zero)
30883 {
30885 }
30887 }
30888 }
30889 else if (this.ai[0] == 0f)
30890 {
30891 num1221 = 3;
30892 localAI[1] -= 0.05f;
30893 if (localAI[1] < 0f)
30894 {
30895 localAI[1] = 0f;
30896 }
30897 Vector2 center17 = Main.npc[(int)this.ai[3]].Center;
30898 Vector2 vector173 = center17 + new Vector2(350f * num1218, -100f);
30899 Vector2 vector174 = vector173 - base.Center;
30900 if (vector174.Length() > 20f)
30901 {
30902 vector174.Normalize();
30903 vector174 *= 6f;
30905 if (vector174 != Vector2.Zero)
30906 {
30908 }
30910 }
30911 }
30912 else if (this.ai[0] == 1f)
30913 {
30914 num1221 = 0;
30915 int num1227 = 7;
30916 int num1228 = 4;
30917 if (num1219 >= (float)(num1227 * num1228 * 2))
30918 {
30919 localAI[1] -= 0.07f;
30920 if (localAI[1] < 0f)
30921 {
30922 localAI[1] = 0f;
30923 }
30924 }
30925 else if (num1219 >= (float)(num1227 * num1228))
30926 {
30927 localAI[1] += 0.05f;
30928 if (localAI[1] > 0.75f)
30929 {
30930 localAI[1] = 0.75f;
30931 }
30932 float num1229 = (float)Math.PI * 2f * (num1219 % (float)(num1227 * num1228)) / (float)(num1227 * num1228) - (float)Math.PI / 2f;
30933 localAI[0] = new Vector2((float)Math.Cos(num1229) * vector170.X, (float)Math.Sin(num1229) * vector170.Y).ToRotation();
30934 if (num1219 % (float)num1228 == 0f)
30935 {
30936 Vector2 vector175 = new Vector2(1f * (0f - num1218), 3f);
30937 Vector2 vector176 = Utils.Vector2FromElipse(localAI[0].ToRotationVector2(), vector170 * localAI[1]);
30938 Vector2 vector177 = base.Center + Vector2.Normalize(vector176) * vector170.Length() * 0.4f + vector175;
30940 float ai = ((float)Math.PI * 2f * (float)Main.rand.NextDouble() - (float)Math.PI) / 30f + (float)Math.PI / 180f * num1218;
30941 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector177.X, vector177.Y, vector178.X, vector178.Y, 452, 30, 0f, Main.myPlayer, 0f, ai);
30942 }
30943 }
30944 else
30945 {
30946 localAI[1] += 0.02f;
30947 if (localAI[1] > 0.75f)
30948 {
30949 localAI[1] = 0.75f;
30950 }
30951 float num1230 = (float)Math.PI * 2f * (num1219 % (float)(num1227 * num1228)) / (float)(num1227 * num1228) - (float)Math.PI / 2f;
30952 localAI[0] = new Vector2((float)Math.Cos(num1230) * vector170.X, (float)Math.Sin(num1230) * vector170.Y).ToRotation();
30953 }
30954 }
30955 else if (this.ai[0] == 2f)
30956 {
30957 localAI[1] -= 0.05f;
30958 if (localAI[1] < 0f)
30959 {
30960 localAI[1] = 0f;
30961 }
30962 Vector2 center18 = Main.npc[(int)this.ai[3]].Center;
30963 Vector2 vector179 = new Vector2(220f * num1218, -60f) + center18;
30964 vector179 += new Vector2(num1218 * 100f, -50f);
30965 Vector2 vector180 = new Vector2(400f * num1218, -60f);
30966 if (num1219 < 30f)
30967 {
30968 Vector2 vector181 = vector179 - base.Center;
30969 if (vector181 != Vector2.Zero)
30970 {
30972 vector182.Normalize();
30973 velocity = Vector2.SmoothStep(velocity, vector182 * Math.Min(8f, vector181.Length()), 0.2f);
30974 }
30975 }
30976 else if (num1219 < 210f)
30977 {
30978 num1221 = 1;
30979 int num1231 = (int)num1219 - 30;
30980 if (num1231 % 30 == 0 && Main.netMode != 1)
30981 {
30982 Vector2 vector183 = new Vector2(5f * num1218, -8f);
30983 int num1232 = num1231 / 30;
30984 vector183.X += ((float)num1232 - 3.5f) * num1218 * 3f;
30985 vector183.Y += ((float)num1232 - 4.5f) * 1f;
30986 vector183 *= 1.2f;
30987 int num1233 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector183.X, vector183.Y, 454, 40, 1f, Main.myPlayer, 0f, whoAmI);
30988 }
30990 if (vector184 != Vector2.Zero)
30991 {
30993 vector185.Normalize();
30994 velocity = Vector2.Lerp(velocity, vector185 * Math.Min(20f, vector184.Length()), 0.5f);
30995 }
30996 }
30997 else if (num1219 < 282f)
30998 {
30999 num1221 = 0;
31000 velocity *= 0.9f;
31001 }
31002 else if (num1219 < 287f)
31003 {
31004 num1221 = 1;
31005 velocity *= 0.9f;
31006 }
31007 else if (num1219 < 292f)
31008 {
31009 num1221 = 2;
31010 velocity *= 0.9f;
31011 }
31012 else if (num1219 < 300f)
31013 {
31014 num1221 = 3;
31015 if (num1219 == 292f && Main.netMode != 1)
31016 {
31017 int num1234 = Player.FindClosest(position, width, height);
31018 Vector2 vector186 = Vector2.Normalize(Main.player[num1234].Center - (base.Center + Vector2.UnitY * -350f));
31019 if (float.IsNaN(vector186.X) || float.IsNaN(vector186.Y))
31020 {
31022 }
31023 vector186 *= 12f;
31024 for (int num1235 = 0; num1235 < 1000; num1235++)
31025 {
31026 Projectile projectile3 = Main.projectile[num1235];
31027 if (projectile3.active && projectile3.type == 454 && projectile3.ai[1] == (float)whoAmI && projectile3.ai[0] != -1f)
31028 {
31029 projectile3.ai[0] = -1f;
31030 projectile3.velocity = vector186;
31031 projectile3.netUpdate = true;
31032 NetMessage.SendData(27, -1, -1, null, num1235);
31033 }
31034 }
31035 }
31036 Vector2 vector187 = Vector2.SmoothStep(vector179, vector179 + vector180, 1f - (num1219 - 270f) / 30f) - base.Center;
31037 if (vector187 != Vector2.Zero)
31038 {
31040 vector188.Normalize();
31041 velocity = Vector2.Lerp(velocity, vector188 * Math.Min(14f, vector187.Length()), 0.1f);
31042 }
31043 }
31044 else
31045 {
31046 num1221 = 3;
31047 Vector2 vector189 = vector179 - base.Center;
31048 if (vector189 != Vector2.Zero)
31049 {
31051 vector190.Normalize();
31052 velocity = Vector2.SmoothStep(velocity, vector190 * Math.Min(8f, vector189.Length()), 0.2f);
31053 }
31054 }
31055 }
31056 else if (this.ai[0] == 3f)
31057 {
31058 if (num1219 == 0f)
31059 {
31061 netUpdate = true;
31062 }
31063 Vector2 v4 = Main.player[target].Center + Main.player[target].velocity * 20f - base.Center;
31064 localAI[0] = localAI[0].AngleLerp(v4.ToRotation(), 0.5f);
31065 localAI[1] += 0.05f;
31066 if (localAI[1] > 1f)
31067 {
31068 localAI[1] = 1f;
31069 }
31070 if (num1219 == num1220 - 35f)
31071 {
31072 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 6);
31073 }
31074 if ((num1219 == num1220 - 14f || num1219 == num1220 - 7f || num1219 == num1220) && Main.netMode != 1)
31075 {
31076 Vector2 vector191 = Utils.Vector2FromElipse(localAI[0].ToRotationVector2(), vector170 * localAI[1]);
31078 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector191.X, base.Center.Y + vector191.Y, vector192.X, vector192.Y, 462, 30, 0f, Main.myPlayer);
31079 }
31080 }
31081 if (flag80)
31082 {
31083 Vector2 center19 = Main.npc[(int)this.ai[3]].Center;
31084 Vector2 vector193 = new Vector2(220f * num1218, -60f) + center19;
31085 Vector2 vector194 = vector193 + new Vector2(num1218 * 110f, -150f);
31086 Vector2 max = vector194 + new Vector2(num1218 * 370f, 150f);
31087 if (vector194.X > max.X)
31088 {
31089 Utils.Swap(ref vector194.X, ref max.X);
31090 }
31091 if (vector194.Y > max.Y)
31092 {
31093 Utils.Swap(ref vector194.Y, ref max.Y);
31094 }
31096 if (vector195 != base.Center + velocity)
31097 {
31098 base.Center = vector195 - velocity;
31099 }
31100 }
31101 int num1236 = num1221 * 7;
31102 if ((double)num1236 > frameCounter)
31103 {
31104 frameCounter++;
31105 }
31106 if ((double)num1236 < frameCounter)
31107 {
31108 frameCounter--;
31109 }
31110 if (frameCounter < 0.0)
31111 {
31112 frameCounter = 0.0;
31113 }
31114 if (frameCounter > 21.0)
31115 {
31116 frameCounter = 21.0;
31117 }
31118 int num1237 = 0;
31119 if (flag79)
31120 {
31121 num1237 = 0;
31122 }
31123 switch (num1237)
31124 {
31125 case 1:
31126 if (this.ai[0] == 0f)
31127 {
31128 if ((this.ai[1] += 1f) >= 20f)
31129 {
31130 this.ai[1] = 0f;
31131 this.ai[0] = 1f;
31132 netUpdate = true;
31133 }
31134 velocity = Vector2.UnitX * 4f;
31135 }
31136 else if (this.ai[0] == 1f)
31137 {
31138 if ((this.ai[1] += 1f) >= 20f)
31139 {
31140 this.ai[1] = 0f;
31141 this.ai[0] = 2f;
31142 netUpdate = true;
31143 }
31144 velocity = Vector2.UnitX * -4f;
31145 }
31146 else if (this.ai[0] == 2f || this.ai[0] == 4f)
31147 {
31148 if ((this.ai[1] += 1f) >= 20f)
31149 {
31150 this.ai[1] = 0f;
31151 this.ai[0]++;
31152 netUpdate = true;
31153 }
31154 velocity = Vector2.UnitY * -4f * (flag79 ? 1 : (-1));
31155 }
31156 else
31157 {
31158 if (this.ai[0] != 3f && this.ai[0] != 5f)
31159 {
31160 break;
31161 }
31162 if ((this.ai[1] += 1f) >= 20f)
31163 {
31164 this.ai[1] = 0f;
31165 this.ai[0]++;
31166 if (this.ai[0] == 6f)
31167 {
31168 this.ai[0] = 0f;
31169 }
31170 netUpdate = true;
31171 }
31172 velocity = Vector2.UnitY * 4f * (flag79 ? 1 : (-1));
31173 }
31174 break;
31175 case 2:
31176 {
31177 Vector2 vector196 = new Vector2(30f, 66f);
31179 Vector2 v5 = Main.screenPosition + new Vector2(Main.mouseX, Main.mouseY) - base.Center;
31180 float num1238 = v5.Length() / 200f;
31181 if (num1238 > 1f)
31182 {
31183 num1238 = 1f;
31184 }
31185 num1238 = 1f - num1238;
31186 num1238 *= 2f;
31187 if (num1238 > 1f)
31188 {
31189 num1238 = 1f;
31190 }
31191 localAI[0] = v5.ToRotation();
31192 localAI[1] = num1238;
31193 localAI[1] = 1f;
31194 break;
31195 }
31196 case 3:
31197 {
31198 int num1244 = 7;
31199 int num1245 = 4;
31200 this.ai[1]++;
31201 if (this.ai[1] >= (float)(num1244 * num1245 * 10))
31202 {
31203 this.ai[1] = 0f;
31204 break;
31205 }
31206 if (this.ai[1] >= (float)(num1244 * num1245))
31207 {
31208 localAI[1] -= 0.07f;
31209 if (localAI[1] < 0f)
31210 {
31211 localAI[1] = 0f;
31212 }
31213 break;
31214 }
31215 localAI[1] += 0.05f;
31216 if (localAI[1] > 0.75f)
31217 {
31218 localAI[1] = 0.75f;
31219 }
31220 float num1246 = (float)Math.PI * 2f * (this.ai[1] % (float)(num1244 * num1245)) / (float)(num1244 * num1245) - (float)Math.PI / 2f;
31221 localAI[0] = new Vector2((float)Math.Cos(num1246) * vector170.X, (float)Math.Sin(num1246) * vector170.Y).ToRotation();
31222 if (this.ai[1] % (float)num1245 == 0f)
31223 {
31224 Vector2 vector207 = new Vector2(1f * (0f - num1218), 3f);
31225 Vector2 vector208 = Utils.Vector2FromElipse(localAI[0].ToRotationVector2(), vector170 * localAI[1]);
31226 Vector2 vector209 = base.Center + Vector2.Normalize(vector208) * vector170.Length() * 0.4f + vector207;
31228 float ai2 = ((float)Math.PI * 2f * (float)Main.rand.NextDouble() - (float)Math.PI) / 30f + (float)Math.PI / 180f * num1218;
31229 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector209.X, vector209.Y, vector210.X, vector210.Y, 452, 5, 0f, Main.myPlayer, 0f, ai2);
31230 }
31231 break;
31232 }
31233 case 4:
31234 {
31235 Vector2 center20 = Main.npc[(int)this.ai[3]].Center;
31236 Vector2 vector197 = new Vector2(220f * num1218, -60f) + center20;
31237 vector197 += new Vector2(num1218 * 100f, -50f);
31238 Vector2 vector198 = new Vector2(400f * num1218, -60f);
31239 this.ai[1]++;
31240 if (this.ai[1] < 30f)
31241 {
31242 Vector2 vector199 = vector197 - base.Center;
31243 if (vector199 != Vector2.Zero)
31244 {
31246 vector200.Normalize();
31247 velocity = Vector2.SmoothStep(velocity, vector200 * Math.Min(8f, vector199.Length()), 0.2f);
31248 }
31249 }
31250 else if (this.ai[1] < 210f)
31251 {
31252 int num1239 = (int)this.ai[1] - 30;
31253 if (num1239 % 30 == 0 && Main.netMode != 1)
31254 {
31255 Vector2 vector201 = new Vector2(5f * num1218, -8f);
31256 int num1240 = num1239 / 30;
31257 vector201.X += ((float)num1240 - 3.5f) * num1218 * 3f;
31258 vector201.Y += ((float)num1240 - 4.5f) * 1f;
31259 vector201 *= 1.2f;
31260 int num1241 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector201.X, vector201.Y, 454, 1, 1f, Main.myPlayer, 0f, whoAmI);
31261 }
31262 Vector2 vector202 = Vector2.SmoothStep(vector197, vector197 + vector198, (this.ai[1] - 30f) / 180f) - base.Center;
31263 if (vector202 != Vector2.Zero)
31264 {
31266 vector203.Normalize();
31267 velocity = Vector2.Lerp(velocity, vector203 * Math.Min(4f, vector202.Length()), 0.1f);
31268 }
31269 }
31270 else if (this.ai[1] < 270f)
31271 {
31272 velocity *= 0.9f;
31273 }
31274 else if (this.ai[1] < 300f)
31275 {
31276 if (this.ai[1] == 270f && Main.netMode != 1)
31277 {
31278 int num1242 = Player.FindClosest(position, width, height);
31279 Vector2 vector204 = Vector2.Normalize(Main.player[num1242].Center - (base.Center + Vector2.UnitY * -350f));
31280 if (float.IsNaN(vector204.X) || float.IsNaN(vector204.Y))
31281 {
31283 }
31284 vector204 *= 12f;
31285 for (int num1243 = 0; num1243 < 1000; num1243++)
31286 {
31287 Projectile projectile4 = Main.projectile[num1243];
31288 if (projectile4.active && projectile4.type == 454 && projectile4.ai[1] == (float)whoAmI && projectile4.ai[0] != -1f)
31289 {
31290 projectile4.ai[0] = -1f;
31291 projectile4.velocity = vector204;
31292 projectile4.netUpdate = true;
31293 }
31294 }
31295 }
31296 Vector2 vector205 = Vector2.SmoothStep(vector197, vector197 + vector198, 1f - (this.ai[1] - 270f) / 30f) - base.Center;
31297 if (vector205 != Vector2.Zero)
31298 {
31300 vector206.Normalize();
31301 velocity = Vector2.Lerp(velocity, vector206 * Math.Min(14f, vector205.Length()), 0.1f);
31302 }
31303 }
31304 else
31305 {
31306 this.ai[1] = 0f;
31307 }
31308 break;
31309 }
31310 case 5:
31311 dontTakeDamage = true;
31312 this.ai[1]++;
31313 if (this.ai[1] >= 40f)
31314 {
31315 this.ai[1] = 0f;
31316 }
31317 break;
31318 }
31319 }
31320 else if (aiStyle == 79)
31321 {
31322 if (!Main.npc[(int)this.ai[3]].active || Main.npc[(int)this.ai[3]].type != 398)
31323 {
31324 life = 0;
31325 HitEffect();
31326 active = false;
31327 }
31328 if (localAI[3] == 13f && !dontTakeDamage)
31329 {
31331 }
31332 dontTakeDamage = localAI[3] >= 15f;
31334 base.Center = Main.npc[(int)this.ai[3]].Center + new Vector2(0f, -400f);
31335 Vector2 vector211 = new Vector2(27f, 59f);
31336 float num1247 = 0f;
31337 float num1248 = 0f;
31338 int num1249 = 0;
31339 int num1250 = 0;
31340 if (this.ai[0] >= 0f)
31341 {
31342 float num1251 = this.ai[0];
31343 this.ai[1]++;
31344 int num1252 = (int)Main.npc[(int)this.ai[3]].ai[2];
31345 int num1253 = 2;
31346 int num1254 = 0;
31347 int num1255 = 0;
31348 for (; num1254 < 5; num1254++)
31349 {
31351 if (!(num1248 + (float)num1255 <= this.ai[1]))
31352 {
31353 break;
31354 }
31355 num1255 += (int)num1248;
31356 }
31357 if (num1254 == 5)
31358 {
31359 num1254 = 0;
31360 this.ai[1] = 0f;
31362 num1255 = 0;
31363 }
31364 this.ai[0] = MoonLordAttacksArray[num1252, num1253, 0, num1254];
31365 num1247 = (int)this.ai[1] - num1255;
31366 if (this.ai[0] != num1251)
31367 {
31368 netUpdate = true;
31369 }
31370 }
31371 if (this.ai[0] == -3f)
31372 {
31373 damage = 0;
31374 dontTakeDamage = true;
31375 rotation = MathHelper.Lerp(rotation, (float)Math.PI / 12f, 0.07f);
31376 this.ai[1]++;
31377 if (this.ai[1] >= 32f)
31378 {
31379 this.ai[1] = 0f;
31380 }
31381 if (this.ai[1] < 0f)
31382 {
31383 this.ai[1] = 0f;
31384 }
31385 if (localAI[2] < 14f)
31386 {
31387 localAI[2]++;
31388 }
31389 }
31390 else if (this.ai[0] == -2f)
31391 {
31392 if (Main.npc[(int)this.ai[3]].ai[0] == 2f)
31393 {
31394 this.ai[0] = -3f;
31395 return;
31396 }
31397 damage = 80;
31398 dontTakeDamage = true;
31399 this.ai[1]++;
31400 if (this.ai[1] >= 32f)
31401 {
31402 this.ai[1] = 0f;
31403 }
31404 if (this.ai[1] < 0f)
31405 {
31406 this.ai[1] = 0f;
31407 }
31408 this.ai[2]++;
31409 if (this.ai[2] >= 555f)
31410 {
31411 this.ai[2] = 0f;
31412 }
31413 if (this.ai[2] >= 120f)
31414 {
31415 num1247 = this.ai[2] - 120f;
31416 num1248 = 555f;
31417 num1249 = 2;
31418 Vector2 vector212 = new Vector2(0f, 216f);
31419 if (num1247 == 0f && Main.netMode != 1)
31420 {
31421 Vector2 vector213 = base.Center + vector212;
31422 for (int num1256 = 0; num1256 < 255; num1256++)
31423 {
31424 Player player9 = Main.player[num1256];
31425 if (player9.active && !player9.dead && Vector2.Distance(player9.Center, vector213) <= 3000f)
31426 {
31427 Vector2 vector214 = Main.player[target].Center - vector213;
31428 if (vector214 != Vector2.Zero)
31429 {
31430 vector214.Normalize();
31431 }
31432 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector213.X, vector213.Y, vector214.X, vector214.Y, 456, 0, 0f, Main.myPlayer, whoAmI + 1, num1256);
31433 }
31434 }
31435 }
31436 if ((num1247 == 120f || num1247 == 180f || num1247 == 240f) && Main.netMode != 1)
31437 {
31438 for (int num1257 = 0; num1257 < 1000; num1257++)
31439 {
31440 Projectile projectile5 = Main.projectile[num1257];
31441 if (projectile5.active && projectile5.type == 456 && Main.player[(int)projectile5.ai[1]].FindBuffIndex(145) != -1)
31442 {
31443 Vector2 center21 = Main.player[target].Center;
31444 int num1258 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)center21.X, (int)center21.Y, 401);
31445 Main.npc[num1258].netUpdate = true;
31446 Main.npc[num1258].ai[0] = whoAmI + 1;
31447 Main.npc[num1258].ai[1] = num1257;
31448 }
31449 }
31450 }
31451 }
31452 }
31453 else if (this.ai[0] == 0f)
31454 {
31455 num1250 = 3;
31457 Vector2 v6 = Main.player[target].Center - base.Center - new Vector2(0f, -22f);
31458 float num1259 = v6.Length() / 500f;
31459 if (num1259 > 1f)
31460 {
31461 num1259 = 1f;
31462 }
31463 num1259 = 1f - num1259;
31464 num1259 *= 2f;
31465 if (num1259 > 1f)
31466 {
31467 num1259 = 1f;
31468 }
31469 localAI[0] = v6.ToRotation();
31470 localAI[1] = num1259;
31471 localAI[2] = MathHelper.Lerp(localAI[2], 1f, 0.2f);
31472 }
31473 if (this.ai[0] == 1f)
31474 {
31475 if (num1247 < 180f)
31476 {
31477 localAI[1] -= 0.05f;
31478 if (localAI[1] < 0f)
31479 {
31480 localAI[1] = 0f;
31481 }
31482 if (num1247 >= 60f)
31483 {
31484 Vector2 center22 = base.Center;
31485 int num1260 = 0;
31486 if (num1247 >= 120f)
31487 {
31488 num1260 = 1;
31489 }
31490 for (int num1261 = 0; num1261 < 1 + num1260; num1261++)
31491 {
31492 int num1262 = 229;
31493 float num1263 = 0.8f;
31494 if (num1261 % 2 == 1)
31495 {
31496 num1262 = 229;
31497 num1263 = 1.65f;
31498 }
31499 Vector2 vector215 = center22 + ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * vector211 / 2f;
31500 int num1264 = Dust.NewDust(vector215 - Vector2.One * 8f, 16, 16, num1262, velocity.X / 2f, velocity.Y / 2f);
31501 Main.dust[num1264].velocity = Vector2.Normalize(center22 - vector215) * 3.5f * (10f - (float)num1260 * 2f) / 10f;
31502 Main.dust[num1264].noGravity = true;
31503 Main.dust[num1264].scale = num1263;
31504 Main.dust[num1264].customData = this;
31505 }
31506 }
31507 }
31508 else if (num1247 < num1248 - 15f)
31509 {
31510 if (num1247 == 180f && Main.netMode != 1)
31511 {
31513 Vector2 spinningpoint9 = Main.player[target].Center - base.Center;
31514 spinningpoint9.Normalize();
31515 float num1265 = -1f;
31516 if (spinningpoint9.X < 0f)
31517 {
31518 num1265 = 1f;
31519 }
31520 spinningpoint9 = spinningpoint9.RotatedBy((0f - num1265) * ((float)Math.PI * 2f) / 6f);
31521 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, spinningpoint9.X, spinningpoint9.Y, 455, 75, 0f, Main.myPlayer, num1265 * ((float)Math.PI * 2f) / 540f, whoAmI);
31522 this.ai[2] = (spinningpoint9.ToRotation() + (float)Math.PI * 3f) * num1265;
31523 netUpdate = true;
31524 }
31525 localAI[1] += 0.05f;
31526 if (localAI[1] > 1f)
31527 {
31528 localAI[1] = 1f;
31529 }
31530 float num1266 = (this.ai[2] >= 0f).ToDirectionInt();
31531 float num1267 = this.ai[2];
31532 if (num1267 < 0f)
31533 {
31534 num1267 *= -1f;
31535 }
31536 num1267 += (float)Math.PI * -3f;
31537 num1267 += num1266 * ((float)Math.PI * 2f) / 540f;
31538 localAI[0] = num1267;
31539 this.ai[2] = (num1267 + (float)Math.PI * 3f) * num1266;
31540 }
31541 else
31542 {
31543 localAI[1] -= 0.07f;
31544 if (localAI[1] < 0f)
31545 {
31546 localAI[1] = 0f;
31547 if (Main.netMode != 1 && Main.getGoodWorld && Main.remixWorld)
31548 {
31549 for (int num1268 = 0; num1268 < 30; num1268++)
31550 {
31551 if (!WorldGen.SolidTile((int)(base.Center.X / 16f), (int)(base.Center.Y / 16f)))
31552 {
31553 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, (float)Main.rand.Next(-1599, 1600) * 0.01f, (float)Main.rand.Next(-1599, 1) * 0.01f, 1021, 70, 10f);
31554 }
31555 }
31556 }
31557 }
31558 num1250 = 3;
31559 }
31560 }
31561 else if (this.ai[0] == 2f)
31562 {
31563 num1249 = 2;
31564 num1250 = 3;
31565 Vector2 vector216 = new Vector2(0f, 216f);
31566 if (num1247 == 0f && Main.netMode != 1)
31567 {
31568 Vector2 vector217 = base.Center + vector216;
31569 for (int num1269 = 0; num1269 < 255; num1269++)
31570 {
31571 Player player10 = Main.player[num1269];
31572 if (player10.active && !player10.dead && Vector2.Distance(player10.Center, vector217) <= 3000f)
31573 {
31574 Vector2 vector218 = Main.player[target].Center - vector217;
31575 if (vector218 != Vector2.Zero)
31576 {
31577 vector218.Normalize();
31578 }
31579 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector217.X, vector217.Y, vector218.X, vector218.Y, 456, 0, 0f, Main.myPlayer, whoAmI + 1, num1269);
31580 }
31581 }
31582 }
31583 if ((num1247 == 120f || num1247 == 180f || num1247 == 240f) && Main.netMode != 1)
31584 {
31585 for (int num1270 = 0; num1270 < 1000; num1270++)
31586 {
31587 Projectile projectile6 = Main.projectile[num1270];
31588 if (projectile6.active && projectile6.type == 456 && Main.player[(int)projectile6.ai[1]].FindBuffIndex(145) != -1)
31589 {
31590 Vector2 center23 = Main.player[target].Center;
31591 int num1271 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)center23.X, (int)center23.Y, 401);
31592 Main.npc[num1271].netUpdate = true;
31593 Main.npc[num1271].ai[0] = whoAmI + 1;
31594 Main.npc[num1271].ai[1] = num1270;
31595 }
31596 }
31597 }
31598 }
31599 else if (this.ai[0] == 3f)
31600 {
31601 if ((double)num1247 == 1.0)
31602 {
31604 netUpdate = true;
31605 }
31606 Vector2 v7 = Main.player[target].Center + Main.player[target].velocity * 20f - base.Center;
31607 localAI[0] = localAI[0].AngleLerp(v7.ToRotation(), 0.5f);
31608 localAI[1] += 0.05f;
31609 if (localAI[1] > 1f)
31610 {
31611 localAI[1] = 1f;
31612 }
31613 if (num1247 == num1248 - 35f)
31614 {
31615 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 6);
31616 }
31617 if ((num1247 == num1248 - 14f || num1247 == num1248 - 7f || num1247 == num1248) && Main.netMode != 1)
31618 {
31619 Vector2 vector219 = Utils.Vector2FromElipse(localAI[0].ToRotationVector2(), vector211 * localAI[1]);
31621 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector219.X, base.Center.Y + vector219.Y, vector220.X, vector220.Y, 462, 30, 0f, Main.myPlayer);
31622 }
31623 }
31624 int num1272 = num1249 * 7;
31625 if ((float)num1272 > localAI[2])
31626 {
31627 localAI[2]++;
31628 }
31629 if ((float)num1272 < localAI[2])
31630 {
31631 localAI[2]--;
31632 }
31633 if (localAI[2] < 0f)
31634 {
31635 localAI[2] = 0f;
31636 }
31637 if (localAI[2] > 14f)
31638 {
31639 localAI[2] = 14f;
31640 }
31641 int num1273 = num1250 * 5;
31642 if ((float)num1273 > localAI[3])
31643 {
31644 localAI[3]++;
31645 }
31646 if ((float)num1273 < localAI[3])
31647 {
31648 localAI[3]--;
31649 }
31650 if (localAI[3] < 0f)
31651 {
31652 localAI[2] = 0f;
31653 }
31654 if (localAI[3] > 15f)
31655 {
31656 localAI[2] = 15f;
31657 }
31658 int num1274 = 0;
31659 if (num1274 == 1)
31660 {
31661 Vector2 vector221 = new Vector2(27f, 59f);
31663 Vector2 v8 = Main.screenPosition + new Vector2(Main.mouseX, Main.mouseY) - base.Center;
31664 float num1275 = v8.Length() / 200f;
31665 if (num1275 > 1f)
31666 {
31667 num1275 = 1f;
31668 }
31669 num1275 = 1f - num1275;
31670 num1275 *= 2f;
31671 if (num1275 > 1f)
31672 {
31673 num1275 = 1f;
31674 }
31675 localAI[0] = v8.ToRotation();
31676 localAI[1] = num1275;
31677 localAI[1] = 1f;
31678 }
31679 if (num1274 == 2)
31680 {
31681 Vector2 vector222 = new Vector2(27f, 59f);
31682 float num1276 = (float)Math.PI * 2f * ((float)Main.timeForVisualEffects % 600f) / 600f;
31683 localAI[0] = new Vector2((float)Math.Cos(num1276) * vector222.X, (float)Math.Sin(num1276) * vector222.Y).ToRotation();
31684 localAI[1] = 0.75f;
31685 if (this.ai[1] == 0f)
31686 {
31687 Vector2 vector223 = num1276.ToRotationVector2();
31689 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector223.X, vector223.Y, 455, 1, 0f, Main.myPlayer, (float)Math.PI / 300f, whoAmI);
31690 }
31691 this.ai[1]++;
31692 if (this.ai[1] >= 600f)
31693 {
31694 this.ai[1] = 0f;
31695 }
31696 }
31697 if (num1274 == 3)
31698 {
31699 Vector2 vector224 = new Vector2(0f, 216f);
31700 if (this.ai[1] == 0f)
31701 {
31703 Vector2 vector225 = Main.player[target].Center - base.Center;
31704 vector225.Normalize();
31705 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector224.X, base.Center.Y + vector224.Y, vector225.X, vector225.Y, 456, 0, 0f, Main.myPlayer, whoAmI + 1, target);
31706 }
31707 this.ai[1]++;
31708 if (this.ai[1] >= 600f)
31709 {
31710 this.ai[1] = 0f;
31711 }
31712 }
31713 if (num1274 == 4)
31714 {
31715 Vector2 vector226 = new Vector2(27f, 59f);
31717 Vector2 v9 = Main.player[target].Center + Main.player[target].velocity * 20f - base.Center;
31718 localAI[0] = localAI[0].AngleLerp(v9.ToRotation(), 0.5f);
31719 localAI[1] = 1f;
31720 this.ai[1]++;
31721 if (this.ai[1] == 55f)
31722 {
31723 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 6);
31724 }
31725 if (this.ai[1] == 76f || this.ai[1] == 83f || this.ai[1] == 90f)
31726 {
31727 Vector2 vector227 = Utils.Vector2FromElipse(elipseSizes: new Vector2(27f, 59f) * localAI[1], angleVector: localAI[0].ToRotationVector2());
31729 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector227.X, base.Center.Y + vector227.Y, vector228.X, vector228.Y, 462, 5, 0f, Main.myPlayer);
31730 }
31731 if (this.ai[1] >= 90f)
31732 {
31733 this.ai[1] = 0f;
31734 }
31735 }
31736 }
31737 else if (aiStyle == 80)
31738 {
31739 if (this.ai[0] == 0f)
31740 {
31741 if (direction == 0)
31742 {
31743 TargetClosest();
31744 netUpdate = true;
31745 }
31746 if (collideX)
31747 {
31749 netUpdate = true;
31750 }
31751 velocity.X = 3f * (float)direction;
31752 Vector2 center24 = base.Center;
31753 Point point10 = center24.ToTileCoordinates();
31754 int num1277 = 30;
31755 if (WorldGen.InWorld(point10.X, point10.Y, 30))
31756 {
31757 for (int num1278 = 0; num1278 < 30; num1278++)
31758 {
31759 if (WorldGen.SolidTile(point10.X, point10.Y + num1278))
31760 {
31761 num1277 = num1278;
31762 break;
31763 }
31764 }
31765 }
31766 if (num1277 < 15)
31767 {
31768 velocity.Y = Math.Max(velocity.Y - 0.05f, -3.5f);
31769 }
31770 else if (num1277 < 20)
31771 {
31772 velocity.Y *= 0.95f;
31773 }
31774 else
31775 {
31776 velocity.Y = Math.Min(velocity.Y + 0.05f, 1.5f);
31777 }
31778 float distanceToPlayer;
31780 if (num1279 == -1 || Main.player[num1279].dead)
31781 {
31782 return;
31783 }
31784 if (distanceToPlayer < 352f && Main.player[num1279].Center.Y > base.Center.Y)
31785 {
31786 this.ai[0] = 1f;
31787 this.ai[1] = 0f;
31788 netUpdate = true;
31789 }
31790 }
31791 else if (this.ai[0] == 1f)
31792 {
31793 this.ai[1]++;
31794 velocity *= 0.95f;
31795 if (this.ai[1] >= 60f)
31796 {
31797 this.ai[1] = 0f;
31798 this.ai[0] = 2f;
31799 int num1280 = FindClosestPlayer();
31800 if (num1280 != -1)
31801 {
31802 this.ai[3] = ((Main.player[num1280].Center.X > base.Center.X) ? (-1f) : 1f);
31803 }
31804 else
31805 {
31806 this.ai[3] = 1f;
31807 }
31808 netUpdate = true;
31809 }
31810 }
31811 else if (this.ai[0] == 2f)
31812 {
31813 noTileCollide = true;
31814 this.ai[1]++;
31815 velocity.Y = Math.Max(velocity.Y - 0.1f, -10f);
31816 velocity.X = Math.Min(velocity.X + this.ai[3] * 0.05f, 4f);
31817 if ((position.Y < (float)(-height) || this.ai[1] >= 180f) && Main.netMode != 1)
31818 {
31819 Main.StartInvasion(4);
31820 active = false;
31821 netUpdate = true;
31822 }
31823 }
31824 Vector3 rgb = Color.SkyBlue.ToVector3();
31825 if (this.ai[0] == 2f)
31826 {
31827 rgb = Color.Red.ToVector3();
31828 }
31829 rgb *= 0.65f;
31830 Lighting.AddLight(base.Center, rgb);
31831 }
31832 else if (aiStyle == 81)
31833 {
31834 if (Main.rand.Next(420) == 0)
31835 {
31836 SoundEngine.PlaySound(29, (int)base.Center.X, (int)base.Center.Y, Main.rand.Next(100, 101));
31837 }
31838 Vector2 vector229 = new Vector2(30f);
31839 if (!Main.npc[(int)this.ai[3]].active || Main.npc[(int)this.ai[3]].type != 398)
31840 {
31841 life = 0;
31842 HitEffect();
31843 active = false;
31844 }
31845 float num1281 = 0f;
31846 float num1282 = 0f;
31847 float num1283 = this.ai[0];
31848 this.ai[1]++;
31849 int num1284 = 0;
31850 int num1285 = 0;
31851 for (; num1284 < 10; num1284++)
31852 {
31854 if (!(num1282 + (float)num1285 <= this.ai[1]))
31855 {
31856 break;
31857 }
31858 num1285 += (int)num1282;
31859 }
31860 if (num1284 == 10)
31861 {
31862 num1284 = 0;
31863 this.ai[1] = 0f;
31865 num1285 = 0;
31866 }
31867 this.ai[0] = MoonLordAttacksArray2[0, num1284];
31868 num1281 = (int)this.ai[1] - num1285;
31869 if (this.ai[0] != num1283)
31870 {
31871 netUpdate = true;
31872 }
31873 if (this.ai[0] == -1f)
31874 {
31875 this.ai[1]++;
31876 if (this.ai[1] > 180f)
31877 {
31878 this.ai[1] = 0f;
31879 }
31880 float num1286 = 1f;
31881 if (this.ai[1] < 60f)
31882 {
31883 num1286 = 0.75f;
31884 localAI[0] = 0f;
31885 localAI[1] = (float)Math.Sin(this.ai[1] * ((float)Math.PI * 2f) / 15f) * 0.35f;
31886 if (localAI[1] < 0f)
31887 {
31888 localAI[0] = (float)Math.PI;
31889 }
31890 }
31891 else if (this.ai[1] < 120f)
31892 {
31893 num1286 = 1f;
31894 if (localAI[1] < 0.5f)
31895 {
31896 localAI[1] += 0.025f;
31897 }
31898 localAI[0] += (float)Math.PI / 15f;
31899 }
31900 else
31901 {
31902 num1286 = 1.15f;
31903 localAI[1] -= 0.05f;
31904 if (localAI[1] < 0f)
31905 {
31906 localAI[1] = 0f;
31907 }
31908 }
31909 localAI[2] = MathHelper.Lerp(localAI[2], num1286, 0.3f);
31910 }
31911 if (this.ai[0] == 0f)
31912 {
31914 Vector2 v10 = Main.player[target].Center + Main.player[target].velocity * 20f - base.Center;
31915 localAI[0] = localAI[0].AngleLerp(v10.ToRotation(), 0.5f);
31916 localAI[1] += 0.05f;
31917 if (localAI[1] > 0.7f)
31918 {
31919 localAI[1] = 0.7f;
31920 }
31921 localAI[2] = MathHelper.Lerp(localAI[2], 1f, 0.2f);
31922 float num1287 = 24f;
31923 Vector2 center25 = base.Center;
31924 Vector2 center26 = Main.player[target].Center;
31926 Vector2 vector231 = vector230 - Vector2.UnitY * 200f;
31928 int num1288 = 30;
31929 velocity.X = (velocity.X * (float)(num1288 - 1) + vector231.X) / (float)num1288;
31930 velocity.Y = (velocity.Y * (float)(num1288 - 1) + vector231.Y) / (float)num1288;
31931 float num1289 = 0.25f;
31932 for (int num1290 = 0; num1290 < 200; num1290++)
31933 {
31934 if (num1290 != whoAmI && Main.npc[num1290].active && Main.npc[num1290].type == 400 && Vector2.Distance(base.Center, Main.npc[num1290].Center) < 150f)
31935 {
31936 if (position.X < Main.npc[num1290].position.X)
31937 {
31938 velocity.X -= num1289;
31939 }
31940 else
31941 {
31942 velocity.X += num1289;
31943 }
31944 if (position.Y < Main.npc[num1290].position.Y)
31945 {
31946 velocity.Y -= num1289;
31947 }
31948 else
31949 {
31950 velocity.Y += num1289;
31951 }
31952 }
31953 }
31954 }
31955 else if (this.ai[0] == 1f)
31956 {
31957 if (num1281 == 0f)
31958 {
31960 netUpdate = true;
31961 }
31962 velocity *= 0.95f;
31963 if (velocity.Length() < 1f)
31964 {
31966 }
31967 Vector2 v11 = Main.player[target].Center + Main.player[target].velocity * 20f - base.Center;
31968 localAI[0] = localAI[0].AngleLerp(v11.ToRotation(), 0.5f);
31969 localAI[1] += 0.05f;
31970 if (localAI[1] > 1f)
31971 {
31972 localAI[1] = 1f;
31973 }
31974 if (num1281 < 20f)
31975 {
31976 localAI[2] = MathHelper.Lerp(localAI[2], 1.1f, 0.2f);
31977 }
31978 else
31979 {
31980 localAI[2] = MathHelper.Lerp(localAI[2], 0.4f, 0.2f);
31981 }
31982 if (num1281 == num1282 - 35f)
31983 {
31984 SoundEngine.PlaySound(4, (int)position.X, (int)position.Y, 6);
31985 }
31986 if ((num1281 == num1282 - 14f || num1281 == num1282 - 7f || num1281 == num1282) && Main.netMode != 1)
31987 {
31988 Vector2 vector232 = Utils.Vector2FromElipse(localAI[0].ToRotationVector2(), vector229 * localAI[1]);
31990 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector232.X, base.Center.Y + vector232.Y, vector233.X, vector233.Y, 462, 35, 0f, Main.myPlayer);
31991 }
31992 }
31993 else if (this.ai[0] == 2f)
31994 {
31995 if (num1281 < 15f)
31996 {
31997 localAI[1] -= 0.07f;
31998 if (localAI[1] < 0f)
31999 {
32000 localAI[1] = 0f;
32001 }
32002 localAI[2] = MathHelper.Lerp(localAI[2], 0.4f, 0.2f);
32003 velocity *= 0.8f;
32004 if (velocity.Length() < 1f)
32005 {
32007 }
32008 }
32009 else if (num1281 < 75f)
32010 {
32011 float num1291 = (num1281 - 15f) / 10f;
32012 int num1292 = 0;
32013 int num1293 = 0;
32014 switch ((int)num1291)
32015 {
32016 case 0:
32017 num1292 = 0;
32018 num1293 = 2;
32019 break;
32020 case 1:
32021 num1292 = 2;
32022 num1293 = 5;
32023 break;
32024 case 2:
32025 num1292 = 5;
32026 num1293 = 3;
32027 break;
32028 case 3:
32029 num1292 = 3;
32030 num1293 = 1;
32031 break;
32032 case 4:
32033 num1292 = 1;
32034 num1293 = 4;
32035 break;
32036 case 5:
32037 num1292 = 4;
32038 num1293 = 0;
32039 break;
32040 }
32041 Vector2 spinningpoint10 = Vector2.UnitY * -30f;
32042 Vector2 value8 = spinningpoint10.RotatedBy((float)num1292 * ((float)Math.PI * 2f) / 6f);
32043 Vector2 value9 = spinningpoint10.RotatedBy((float)num1293 * ((float)Math.PI * 2f) / 6f);
32045 float value10 = vector234.Length() / 30f;
32046 localAI[0] = vector234.ToRotation();
32047 localAI[1] = MathHelper.Lerp(localAI[1], value10, 0.5f);
32048 for (int num1294 = 0; num1294 < 2; num1294++)
32049 {
32050 int num1295 = Dust.NewDust(base.Center + vector234 - Vector2.One * 4f, 0, 0, 229);
32051 Dust dust = Main.dust[num1295];
32052 dust.velocity += vector234 / 15f;
32053 Main.dust[num1295].noGravity = true;
32054 }
32055 if ((num1281 - 15f) % 10f == 0f && Main.netMode != 1)
32056 {
32058 if (vec3.HasNaNs())
32059 {
32060 vec3 = Vector2.UnitY * -1f;
32061 }
32062 vec3 *= 4f;
32063 int num1296 = Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X + vector234.X, base.Center.Y + vector234.Y, vec3.X, vec3.Y, 454, 40, 0f, Main.myPlayer, 30f, whoAmI);
32064 }
32065 }
32066 else if (num1281 < 105f)
32067 {
32068 localAI[0] = localAI[0].AngleLerp(this.ai[2] - (float)Math.PI / 2f, 0.2f);
32069 localAI[2] = MathHelper.Lerp(localAI[2], 0.75f, 0.2f);
32070 if (num1281 == 75f)
32071 {
32073 netUpdate = true;
32074 velocity = Vector2.UnitY * -7f;
32075 for (int num1297 = 0; num1297 < 1000; num1297++)
32076 {
32077 Projectile projectile7 = Main.projectile[num1297];
32078 if (projectile7.active && projectile7.type == 454 && projectile7.ai[1] == (float)whoAmI && projectile7.ai[0] != -1f)
32079 {
32080 Projectile projectile8 = projectile7;
32081 projectile8.velocity += velocity;
32082 projectile7.netUpdate = true;
32083 }
32084 }
32085 }
32086 velocity.Y *= 0.96f;
32087 this.ai[2] = (Main.player[target].Center - base.Center).ToRotation() + (float)Math.PI / 2f;
32088 rotation = rotation.AngleTowards(this.ai[2], (float)Math.PI / 30f);
32089 }
32090 else if (num1281 < 120f)
32091 {
32092 SoundEngine.PlaySound(29, (int)base.Center.X, (int)base.Center.Y, 102);
32093 if (num1281 == 105f)
32094 {
32095 netUpdate = true;
32096 }
32097 Vector2 vector235 = (this.ai[2] - (float)Math.PI / 2f).ToRotationVector2() * 12f;
32098 velocity = vector235 * 2f;
32099 for (int num1298 = 0; num1298 < 1000; num1298++)
32100 {
32101 Projectile projectile9 = Main.projectile[num1298];
32102 if (projectile9.active && projectile9.type == 454 && projectile9.ai[1] == (float)whoAmI && projectile9.ai[0] != -1f)
32103 {
32104 projectile9.ai[0] = -1f;
32105 projectile9.velocity = vector235;
32106 projectile9.netUpdate = true;
32107 }
32108 }
32109 }
32110 else
32111 {
32112 velocity *= 0.92f;
32113 rotation = rotation.AngleLerp(0f, 0.2f);
32114 }
32115 }
32116 else if (this.ai[0] == 3f)
32117 {
32118 if (num1281 < 15f)
32119 {
32120 localAI[1] -= 0.07f;
32121 if (localAI[1] < 0f)
32122 {
32123 localAI[1] = 0f;
32124 }
32125 localAI[2] = MathHelper.Lerp(localAI[2], 0.4f, 0.2f);
32126 velocity *= 0.9f;
32127 if (velocity.Length() < 1f)
32128 {
32130 }
32131 }
32132 else if (num1281 < 45f)
32133 {
32134 localAI[0] = 0f;
32135 localAI[1] = (float)Math.Sin((num1281 - 15f) * ((float)Math.PI * 2f) / 15f) * 0.5f;
32136 if (localAI[1] < 0f)
32137 {
32138 localAI[0] = (float)Math.PI;
32139 }
32140 }
32141 else if (num1281 < 185f)
32142 {
32143 if (num1281 == 45f)
32144 {
32145 this.ai[2] = (float)(Main.rand.Next(2) == 0).ToDirectionInt() * ((float)Math.PI * 2f) / 40f;
32146 netUpdate = true;
32147 }
32148 if ((num1281 - 15f - 30f) % 40f == 0f)
32149 {
32150 this.ai[2] *= 0.95f;
32151 }
32152 localAI[0] += this.ai[2];
32153 localAI[1] += 0.05f;
32154 if (localAI[1] > 1f)
32155 {
32156 localAI[1] = 1f;
32157 }
32158 Vector2 vector236 = localAI[0].ToRotationVector2() * vector229 * localAI[1];
32159 float num1299 = MathHelper.Lerp(8f, 20f, (num1281 - 15f - 30f) / 140f);
32161 rotation = rotation.AngleLerp(velocity.ToRotation() + (float)Math.PI / 2f, 0.2f);
32162 if ((num1281 - 15f - 30f) % 10f == 0f && Main.netMode != 1)
32163 {
32164 Vector2 vector237 = base.Center + Vector2.Normalize(vector236) * vector229.Length() * 0.4f;
32166 float ai3 = ((float)Math.PI * 2f * (float)Main.rand.NextDouble() - (float)Math.PI) / 30f + (float)Math.PI / 180f * this.ai[2];
32167 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector237.X, vector237.Y, vector238.X, vector238.Y, 452, 35, 0f, Main.myPlayer, 0f, ai3);
32168 }
32169 }
32170 else
32171 {
32172 velocity *= 0.88f;
32173 rotation = rotation.AngleLerp(0f, 0.2f);
32174 localAI[1] -= 0.07f;
32175 if (localAI[1] < 0f)
32176 {
32177 localAI[1] = 0f;
32178 }
32179 localAI[2] = MathHelper.Lerp(localAI[2], 1f, 0.2f);
32180 }
32181 }
32182 else
32183 {
32184 if (this.ai[0] != 4f)
32185 {
32186 return;
32187 }
32188 if (num1281 == 0f)
32189 {
32191 netUpdate = true;
32192 }
32193 if (num1281 < 180f)
32194 {
32195 localAI[2] = MathHelper.Lerp(localAI[2], 1f, 0.2f);
32196 localAI[1] -= 0.05f;
32197 if (localAI[1] < 0f)
32198 {
32199 localAI[1] = 0f;
32200 }
32201 velocity *= 0.95f;
32202 if (velocity.Length() < 1f)
32203 {
32205 }
32206 if (!(num1281 >= 60f))
32207 {
32208 return;
32209 }
32210 Vector2 center27 = base.Center;
32211 int num1300 = 0;
32212 if (num1281 >= 120f)
32213 {
32214 num1300 = 1;
32215 }
32216 for (int num1301 = 0; num1301 < 1 + num1300; num1301++)
32217 {
32218 int num1302 = 229;
32219 float num1303 = 0.8f;
32220 if (num1301 % 2 == 1)
32221 {
32222 num1302 = 229;
32223 num1303 = 1.65f;
32224 }
32225 Vector2 vector239 = center27 + ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * vector229 / 2f;
32226 int num1304 = Dust.NewDust(vector239 - Vector2.One * 8f, 16, 16, num1302, velocity.X / 2f, velocity.Y / 2f);
32227 Main.dust[num1304].velocity = Vector2.Normalize(center27 - vector239) * 3.5f * (10f - (float)num1300 * 2f) / 10f;
32228 Main.dust[num1304].noGravity = true;
32229 Main.dust[num1304].scale = num1303;
32230 Main.dust[num1304].customData = this;
32231 }
32232 }
32233 else if (num1281 < num1282 - 15f)
32234 {
32235 if (num1281 == 180f && Main.netMode != 1)
32236 {
32238 Vector2 spinningpoint11 = Main.player[target].Center - base.Center;
32239 spinningpoint11.Normalize();
32240 float num1305 = -1f;
32241 if (spinningpoint11.X < 0f)
32242 {
32243 num1305 = 1f;
32244 }
32245 spinningpoint11 = spinningpoint11.RotatedBy((0f - num1305) * ((float)Math.PI * 2f) / 6f);
32246 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, spinningpoint11.X, spinningpoint11.Y, 455, 50, 0f, Main.myPlayer, num1305 * ((float)Math.PI * 2f) / 540f, whoAmI);
32247 this.ai[2] = (spinningpoint11.ToRotation() + (float)Math.PI * 3f) * num1305;
32248 netUpdate = true;
32249 }
32250 localAI[1] += 0.05f;
32251 if (localAI[1] > 1f)
32252 {
32253 localAI[1] = 1f;
32254 }
32255 float num1306 = (this.ai[2] >= 0f).ToDirectionInt();
32256 float num1307 = this.ai[2];
32257 if (num1307 < 0f)
32258 {
32259 num1307 *= -1f;
32260 }
32261 num1307 += (float)Math.PI * -3f;
32262 num1307 += num1306 * ((float)Math.PI * 2f) / 540f;
32263 localAI[0] = num1307;
32264 this.ai[2] = (num1307 + (float)Math.PI * 3f) * num1306;
32265 }
32266 else
32267 {
32268 localAI[1] -= 0.07f;
32269 if (localAI[1] < 0f)
32270 {
32271 localAI[1] = 0f;
32272 }
32273 }
32274 }
32275 }
32276 else if (aiStyle == 82)
32277 {
32278 float num1308 = 90f;
32279 Vector2 vector240 = new Vector2(0f, 216f);
32280 int num1309 = (int)Math.Abs(this.ai[0]) - 1;
32281 int num1310 = (int)this.ai[1];
32282 if (!Main.npc[num1309].active || Main.npc[num1309].type != 396)
32283 {
32284 life = 0;
32285 HitEffect();
32286 active = false;
32287 return;
32288 }
32289 this.ai[2]++;
32290 if (this.ai[2] >= num1308)
32291 {
32292 if (Main.netMode != 1)
32293 {
32294 int num1311 = (int)Main.npc[num1309].ai[3];
32295 int num1312 = -1;
32296 int num1313 = -1;
32297 int num1314 = num1309;
32298 for (int num1315 = 0; num1315 < 200; num1315++)
32299 {
32300 if (Main.npc[num1315].active && Main.npc[num1315].ai[3] == (float)num1311)
32301 {
32302 if (num1312 == -1 && Main.npc[num1315].type == 397 && Main.npc[num1315].ai[2] == 0f)
32303 {
32304 num1312 = num1315;
32305 }
32306 if (num1313 == -1 && Main.npc[num1315].type == 397 && Main.npc[num1315].ai[2] == 1f)
32307 {
32308 num1313 = num1315;
32309 }
32310 if (num1312 != -1 && num1313 != -1 && num1314 != -1)
32311 {
32312 break;
32313 }
32314 }
32315 }
32316 int num1316 = 1000;
32317 int num1317 = Main.npc[num1311].lifeMax - Main.npc[num1311].life;
32318 int num1318 = Main.npc[num1312].lifeMax - Main.npc[num1312].life;
32319 int num1319 = Main.npc[num1313].lifeMax - Main.npc[num1313].life;
32320 int num1320 = Main.npc[num1314].lifeMax - Main.npc[num1314].life;
32321 if (num1320 > 0 && num1316 > 0)
32322 {
32323 int num1321 = num1320 - num1316;
32324 if (num1321 > 0)
32325 {
32326 num1321 = 0;
32327 }
32328 int num1322 = num1316 + num1321;
32329 num1316 -= num1322;
32330 NPC nPC3 = Main.npc[num1314];
32331 nPC3.life += num1322;
32332 HealEffect(Utils.CenteredRectangle(Main.npc[num1314].Center, new Vector2(50f)), num1322);
32333 }
32334 if (num1317 > 0 && num1316 > 0)
32335 {
32336 int num1323 = num1317 - num1316;
32337 if (num1323 > 0)
32338 {
32339 num1323 = 0;
32340 }
32341 int num1324 = num1316 + num1323;
32342 num1316 -= num1324;
32343 NPC nPC3 = Main.npc[num1311];
32344 nPC3.life += num1324;
32345 HealEffect(Utils.CenteredRectangle(Main.npc[num1311].Center, new Vector2(50f)), num1324);
32346 }
32347 if (num1318 > 0 && num1316 > 0)
32348 {
32349 int num1325 = num1318 - num1316;
32350 if (num1325 > 0)
32351 {
32352 num1325 = 0;
32353 }
32354 int num1326 = num1316 + num1325;
32355 num1316 -= num1326;
32356 NPC nPC3 = Main.npc[num1312];
32357 nPC3.life += num1326;
32358 HealEffect(Utils.CenteredRectangle(Main.npc[num1312].Center, new Vector2(50f)), num1326);
32359 }
32360 if (num1319 > 0 && num1316 > 0)
32361 {
32362 int num1327 = num1319 - num1316;
32363 if (num1327 > 0)
32364 {
32365 num1327 = 0;
32366 }
32367 int num1328 = num1316 + num1327;
32368 num1316 -= num1328;
32369 NPC nPC3 = Main.npc[num1313];
32370 nPC3.life += num1328;
32371 HealEffect(Utils.CenteredRectangle(Main.npc[num1313].Center, new Vector2(50f)), num1328);
32372 }
32373 }
32374 life = 0;
32375 HitEffect();
32376 active = false;
32377 }
32378 else
32379 {
32381 base.Center = Vector2.Lerp(Main.projectile[num1310].Center, Main.npc[(int)Math.Abs(this.ai[0]) - 1].Center + vector240, this.ai[2] / num1308);
32382 Vector2 spinningpoint12 = Vector2.UnitY * -height / 2f;
32383 for (int num1329 = 0; num1329 < 6; num1329++)
32384 {
32385 int num1330 = Dust.NewDust(base.Center - Vector2.One * 4f + spinningpoint12.RotatedBy((float)num1329 * ((float)Math.PI * 2f) / 6f), 0, 0, 229);
32386 Main.dust[num1330].velocity = -Vector2.UnitY;
32387 Main.dust[num1330].noGravity = true;
32388 Main.dust[num1330].scale = 0.7f;
32389 Main.dust[num1330].customData = this;
32390 }
32391 spinningpoint12 = Vector2.UnitY * -height / 6f;
32392 for (int num1331 = 0; num1331 < 3; num1331++)
32393 {
32394 int num1332 = Dust.NewDust(base.Center - Vector2.One * 4f + spinningpoint12.RotatedBy((float)num1331 * ((float)Math.PI * 2f) / 6f), 0, 0, 229, 0f, -2f);
32395 Main.dust[num1332].noGravity = true;
32396 Main.dust[num1332].scale = 1.5f;
32397 Main.dust[num1332].customData = this;
32398 }
32399 }
32400 }
32401 else if (aiStyle == 83)
32402 {
32403 if (type == 437)
32404 {
32405 if (localAI[3] == 0f && Main.netMode != 1)
32406 {
32407 localAI[3] = 1f;
32408 netUpdate = true;
32409 Point[] spawnPoints = null;
32411 {
32412 life = 0;
32413 HitEffect();
32414 active = false;
32415 return;
32416 }
32417 int num1333 = 0;
32418 int num1334 = 1;
32419 for (int num1335 = 0; num1335 < 4; num1335++)
32420 {
32421 int num1336 = 0;
32422 bool flag81 = num1335 == 1 || num1335 == 2;
32423 num1336 = ((!flag81) ? 379 : 438);
32425 if (flag81)
32426 {
32427 localAI[num1334++] = num1337 + 1;
32428 Main.npc[num1337].ai[3] = -(whoAmI + 1);
32429 }
32430 else
32431 {
32432 this.ai[num1333++] = num1337 + 1;
32433 Main.npc[num1337].ai[3] = -(whoAmI + 1);
32434 }
32435 Main.npc[num1337].netUpdate = true;
32436 }
32437 }
32438 if (localAI[0] == 1f && Main.netMode != 1)
32439 {
32440 localAI[0] = 2f;
32441 for (int num1338 = 0; num1338 < 2; num1338++)
32442 {
32443 Main.npc[(int)localAI[num1338 + 1] - 1].ai[1] = 1f;
32444 Main.npc[(int)localAI[num1338 + 1] - 1].netUpdate = true;
32445 Main.npc[(int)this.ai[num1338] - 1].ai[3] = 0f;
32446 Main.npc[(int)this.ai[num1338] - 1].TargetClosest();
32447 Main.npc[(int)this.ai[num1338] - 1].netUpdate = true;
32448 }
32449 }
32450 if (this.ai[0] != -1f && Main.netMode != 1)
32451 {
32452 bool flag82 = true;
32453 for (int num1339 = 0; num1339 < 2; num1339++)
32454 {
32455 if (Main.npc[(int)localAI[num1339 + 1] - 1].active && Main.npc[(int)localAI[num1339 + 1] - 1].type == 438)
32456 {
32457 flag82 = false;
32458 }
32459 if (Main.npc[(int)this.ai[num1339] - 1].active && Main.npc[(int)this.ai[num1339] - 1].type == 379)
32460 {
32461 flag82 = false;
32462 }
32463 }
32464 if (flag82)
32465 {
32466 this.ai[0] = -1f;
32467 this.ai[1] = 0f;
32468 this.ai[3] = 0f;
32469 int num1340 = (int)base.Center.X / 16 + 11 * (Main.rand.Next(2) == 0).ToDirectionInt();
32470 int num1341 = 0;
32471 for (int num1342 = -5; num1342 < 12; num1342++)
32472 {
32473 int num1343 = num1340;
32474 int num1344 = (int)base.Center.Y / 16 + num1342;
32475 if (WorldGen.SolidTile(num1343, num1344) && !Collision.SolidTiles(num1343 - 1, num1343 + 1, num1344 - 3, num1344 - 1))
32476 {
32477 num1341 = num1344;
32478 break;
32479 }
32480 if (num1342 == 11)
32481 {
32482 num1341 = num1344;
32483 }
32484 }
32485 int num1345 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), num1340 * 16 + 10, num1341 * 16 - 2, 439);
32486 Main.npc[num1345].direction = (Main.npc[num1345].spriteDirection = Math.Sign(base.Center.X - (float)(num1340 * 16) - 10f));
32487 this.ai[2] = num1345;
32488 netUpdate = true;
32490 }
32491 }
32492 if (this.ai[0] == -1f)
32493 {
32494 this.ai[3]++;
32495 if (this.ai[3] > 300f)
32496 {
32497 life = 0;
32498 HitEffect(0, 9999.0);
32499 active = false;
32500 if (Main.netMode != 1)
32501 {
32502 for (int num1346 = 0; num1346 < 6; num1346++)
32503 {
32504 float num1347 = 3f + Main.rand.NextFloat() * 6f;
32505 Vector2 vector241 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
32506 Vector2 center28 = base.Center;
32507 center28 += vector241 * 30f;
32508 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center28.X, center28.Y, vector241.X * num1347, vector241.Y * num1347, 526, 0, 0f, Main.myPlayer, Main.npc[(int)this.ai[2]].Center.X, Main.npc[(int)this.ai[2]].Center.Y);
32509 }
32510 for (int num1348 = 0; num1348 < 20; num1348++)
32511 {
32512 if (Main.rand.Next(2) != 0)
32513 {
32514 float num1349 = 3f + Main.rand.NextFloat() * 6f;
32515 Vector2 vector242 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
32516 Vector2 center29 = base.Center;
32517 center29 += vector242 * 30f;
32518 Vector2 vector243 = base.Center + vector242 * (Main.rand.NextFloat() * 45f + 45f) + Vector2.UnitY * 20f;
32519 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center29.X, center29.Y, vector242.X * num1349, -20f, 526, 0, 0f, Main.myPlayer, vector243.X, vector243.Y);
32520 }
32521 }
32522 }
32523 }
32524 else if (this.ai[3] % 10f == 1f && this.ai[3] > 120f && Main.netMode != 1)
32525 {
32526 float num1350 = 3f + Main.rand.NextFloat() * 6f;
32527 Vector2 vector244 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
32528 Vector2 center30 = base.Center;
32529 center30 += vector244 * 25f;
32530 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), center30.X, center30.Y, vector244.X * num1350, vector244.Y * num1350, 526, 0, 0f, Main.myPlayer, Main.npc[(int)this.ai[2]].Center.X, Main.npc[(int)this.ai[2]].Center.Y);
32531 }
32532 }
32533 }
32534 if (type == 438)
32535 {
32536 velocity.X *= 0.93f;
32537 if ((double)velocity.X > -0.1 && (double)velocity.X < 0.1)
32538 {
32539 velocity.X = 0f;
32540 }
32541 int num1351 = (int)(0f - this.ai[3] - 1f);
32542 if (num1351 == -1)
32543 {
32544 life = 0;
32545 HitEffect();
32546 active = false;
32547 return;
32548 }
32549 int num1352 = Math.Sign(Main.npc[num1351].Center.X - base.Center.X);
32550 if (num1352 != direction)
32551 {
32552 velocity.X = 0f;
32554 netUpdate = true;
32555 }
32556 if (justHit && Main.netMode != 1 && Main.npc[num1351].localAI[0] == 0f)
32557 {
32558 Main.npc[num1351].localAI[0] = 1f;
32559 }
32560 if ((this.ai[0] += 1f) >= 300f)
32561 {
32562 this.ai[0] = 0f;
32563 netUpdate = true;
32564 }
32565 }
32566 if (type == 437)
32567 {
32568 Lighting.AddLight(base.Center, 0.8f, 0.75f, 0.55f);
32569 }
32570 }
32571 else if (aiStyle == 84)
32572 {
32574 }
32575 else if (aiStyle == 85)
32576 {
32577 noTileCollide = false;
32578 if (this.ai[0] == 0f)
32579 {
32580 TargetClosest();
32581 if (Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
32582 {
32583 this.ai[0] = 1f;
32584 }
32585 else
32586 {
32587 Vector2 vector245 = Main.player[target].Center - base.Center;
32588 vector245.Y -= Main.player[target].height / 4;
32589 float num1353 = vector245.Length();
32590 if (num1353 > 800f)
32591 {
32592 this.ai[0] = 2f;
32593 }
32594 else
32595 {
32596 Vector2 center31 = base.Center;
32597 center31.X = Main.player[target].Center.X;
32598 Vector2 vector246 = center31 - base.Center;
32599 if (vector246.Length() > 8f && Collision.CanHit(base.Center, 1, 1, center31, 1, 1))
32600 {
32601 this.ai[0] = 3f;
32602 this.ai[1] = center31.X;
32603 this.ai[2] = center31.Y;
32604 Vector2 center32 = base.Center;
32605 center32.Y = Main.player[target].Center.Y;
32606 if (vector246.Length() > 8f && Collision.CanHit(base.Center, 1, 1, center32, 1, 1) && Collision.CanHit(center32, 1, 1, Main.player[target].position, 1, 1))
32607 {
32608 this.ai[0] = 3f;
32609 this.ai[1] = center32.X;
32610 this.ai[2] = center32.Y;
32611 }
32612 }
32613 else
32614 {
32615 center31 = base.Center;
32616 center31.Y = Main.player[target].Center.Y;
32617 if ((center31 - base.Center).Length() > 8f && Collision.CanHit(base.Center, 1, 1, center31, 1, 1))
32618 {
32619 this.ai[0] = 3f;
32620 this.ai[1] = center31.X;
32621 this.ai[2] = center31.Y;
32622 }
32623 }
32624 if (this.ai[0] == 0f)
32625 {
32626 localAI[0] = 0f;
32627 vector245.Normalize();
32628 vector245 *= 0.5f;
32630 this.ai[0] = 4f;
32631 this.ai[1] = 0f;
32632 }
32633 }
32634 }
32635 }
32636 else if (this.ai[0] == 1f)
32637 {
32638 rotation += (float)direction * 0.3f;
32639 Vector2 vector247 = Main.player[target].Center - base.Center;
32640 if (type == 421)
32641 {
32642 vector247 = Main.player[target].Top - base.Center;
32643 }
32644 float num1354 = vector247.Length();
32645 float num1355 = 5.5f;
32646 if (type == 405)
32647 {
32648 num1355 = 8f;
32649 }
32650 num1355 += num1354 / 100f;
32651 int num1356 = 50;
32652 vector247.Normalize();
32653 vector247 *= num1355;
32654 velocity = (velocity * (num1356 - 1) + vector247) / num1356;
32655 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
32656 {
32657 this.ai[0] = 0f;
32658 this.ai[1] = 0f;
32659 }
32660 if (type == 421 && num1354 < 40f && Main.player[target].active && !Main.player[target].dead)
32661 {
32662 bool flag83 = true;
32663 for (int num1357 = 0; num1357 < 200; num1357++)
32664 {
32665 NPC nPC10 = Main.npc[num1357];
32666 if (nPC10.active && nPC10.type == type && nPC10.ai[0] == 5f && nPC10.target == target)
32667 {
32668 flag83 = false;
32669 break;
32670 }
32671 }
32672 if (flag83)
32673 {
32674 base.Center = Main.player[target].Top;
32676 this.ai[0] = 5f;
32677 this.ai[1] = 0f;
32678 netUpdate = true;
32679 }
32680 }
32681 }
32682 else if (this.ai[0] == 2f)
32683 {
32684 rotation = velocity.X * 0.1f;
32685 noTileCollide = true;
32686 Vector2 vector248 = Main.player[target].Center - base.Center;
32687 float num1358 = vector248.Length();
32688 float num1359 = 3f;
32689 if (type == 405)
32690 {
32691 num1359 = 6f;
32692 }
32693 int num1360 = 3;
32694 vector248.Normalize();
32695 vector248 *= num1359;
32696 velocity = (velocity * (num1360 - 1) + vector248) / num1360;
32697 if (num1358 < 600f && !Collision.SolidCollision(position, width, height))
32698 {
32699 this.ai[0] = 0f;
32700 }
32701 }
32702 else if (this.ai[0] == 3f)
32703 {
32704 rotation = velocity.X * 0.1f;
32705 Vector2 vector249 = new Vector2(this.ai[1], this.ai[2]);
32706 Vector2 vector250 = vector249 - base.Center;
32707 float num1361 = vector250.Length();
32708 float num1362 = 2f;
32709 if (type == 405)
32710 {
32711 num1362 = 3f;
32712 }
32713 float num1363 = 3f;
32714 vector250.Normalize();
32715 vector250 *= num1362;
32716 velocity = (velocity * (num1363 - 1f) + vector250) / num1363;
32717 if (collideX || collideY)
32718 {
32719 this.ai[0] = 4f;
32720 this.ai[1] = 0f;
32721 }
32722 if (num1361 < num1362 || num1361 > 800f || Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
32723 {
32724 this.ai[0] = 0f;
32725 }
32726 }
32727 else if (this.ai[0] == 4f)
32728 {
32729 rotation = velocity.X * 0.1f;
32730 if (collideX)
32731 {
32732 velocity.X *= -0.8f;
32733 }
32734 if (collideY)
32735 {
32736 velocity.Y *= -0.8f;
32737 }
32739 if (velocity.X == 0f && velocity.Y == 0f)
32740 {
32741 vector251 = Main.player[target].Center - base.Center;
32742 vector251.Y -= Main.player[target].height / 4;
32743 vector251.Normalize();
32744 velocity = vector251 * 0.1f;
32745 }
32746 float num1364 = 2f;
32747 if (type == 405)
32748 {
32749 num1364 = 3f;
32750 }
32751 float num1365 = 20f;
32753 vector251.Normalize();
32754 vector251 *= num1364;
32755 velocity = (velocity * (num1365 - 1f) + vector251) / num1365;
32756 this.ai[1] += 1f;
32757 if (this.ai[1] > 180f)
32758 {
32759 this.ai[0] = 0f;
32760 this.ai[1] = 0f;
32761 }
32762 if (Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
32763 {
32764 this.ai[0] = 0f;
32765 }
32766 localAI[0] += 1f;
32767 if (localAI[0] >= 5f && !Collision.SolidCollision(position - new Vector2(10f, 10f), width + 20, height + 20))
32768 {
32769 localAI[0] = 0f;
32770 Vector2 center33 = base.Center;
32771 center33.X = Main.player[target].Center.X;
32772 if (Collision.CanHit(base.Center, 1, 1, center33, 1, 1) && Collision.CanHit(base.Center, 1, 1, center33, 1, 1) && Collision.CanHit(Main.player[target].Center, 1, 1, center33, 1, 1))
32773 {
32774 this.ai[0] = 3f;
32775 this.ai[1] = center33.X;
32776 this.ai[2] = center33.Y;
32777 }
32778 else
32779 {
32780 center33 = base.Center;
32781 center33.Y = Main.player[target].Center.Y;
32782 if (Collision.CanHit(base.Center, 1, 1, center33, 1, 1) && Collision.CanHit(Main.player[target].Center, 1, 1, center33, 1, 1))
32783 {
32784 this.ai[0] = 3f;
32785 this.ai[1] = center33.X;
32786 this.ai[2] = center33.Y;
32787 }
32788 }
32789 }
32790 }
32791 else if (this.ai[0] == 5f)
32792 {
32793 Player player11 = Main.player[target];
32794 if (!player11.active || player11.dead)
32795 {
32796 this.ai[0] = 0f;
32797 this.ai[1] = 0f;
32798 netUpdate = true;
32799 }
32800 else
32801 {
32802 base.Center = ((player11.gravDir == 1f) ? player11.Top : player11.Bottom) + new Vector2(player11.direction * 4, 0f);
32803 gfxOffY = player11.gfxOffY;
32805 if (!player11.creativeGodMode)
32806 {
32807 player11.AddBuff(163, 59);
32808 }
32809 }
32810 }
32811 if (type == 405)
32812 {
32813 rotation = 0f;
32814 for (int num1366 = 0; num1366 < 200; num1366++)
32815 {
32816 if (num1366 != whoAmI && Main.npc[num1366].active && Main.npc[num1366].type == type && Math.Abs(position.X - Main.npc[num1366].position.X) + Math.Abs(position.Y - Main.npc[num1366].position.Y) < (float)width)
32817 {
32818 if (position.X < Main.npc[num1366].position.X)
32819 {
32820 velocity.X -= 0.05f;
32821 }
32822 else
32823 {
32824 velocity.X += 0.05f;
32825 }
32826 if (position.Y < Main.npc[num1366].position.Y)
32827 {
32828 velocity.Y -= 0.05f;
32829 }
32830 else
32831 {
32832 velocity.Y += 0.05f;
32833 }
32834 }
32835 }
32836 }
32837 else
32838 {
32839 if (type != 421)
32840 {
32841 return;
32842 }
32843 hide = this.ai[0] == 5f;
32844 rotation = velocity.X * 0.1f;
32845 for (int num1367 = 0; num1367 < 200; num1367++)
32846 {
32847 if (num1367 != whoAmI && Main.npc[num1367].active && Main.npc[num1367].type == type && Math.Abs(position.X - Main.npc[num1367].position.X) + Math.Abs(position.Y - Main.npc[num1367].position.Y) < (float)width)
32848 {
32849 if (position.X < Main.npc[num1367].position.X)
32850 {
32851 velocity.X -= 0.05f;
32852 }
32853 else
32854 {
32855 velocity.X += 0.05f;
32856 }
32857 if (position.Y < Main.npc[num1367].position.Y)
32858 {
32859 velocity.Y -= 0.05f;
32860 }
32861 else
32862 {
32863 velocity.Y += 0.05f;
32864 }
32865 }
32866 }
32867 }
32868 }
32869 else if (aiStyle == 86)
32870 {
32871 if (alpha > 0)
32872 {
32873 alpha -= 30;
32874 if (alpha < 0)
32875 {
32876 alpha = 0;
32877 }
32878 }
32879 noGravity = true;
32880 noTileCollide = true;
32881 knockBackResist = 0f;
32882 for (int num1368 = 0; num1368 < 200; num1368++)
32883 {
32884 if (num1368 == whoAmI || !Main.npc[num1368].active || Main.npc[num1368].type != type)
32885 {
32886 continue;
32887 }
32888 Vector2 vector252 = Main.npc[num1368].Center - base.Center;
32889 if (!(vector252.Length() < 50f))
32890 {
32891 continue;
32892 }
32893 vector252.Normalize();
32894 if (vector252.X == 0f && vector252.Y == 0f)
32895 {
32896 if (num1368 > whoAmI)
32897 {
32898 vector252.X = 1f;
32899 }
32900 else
32901 {
32902 vector252.X = -1f;
32903 }
32904 }
32905 vector252 *= 0.4f;
32907 NPC nPC3 = Main.npc[num1368];
32908 nPC3.velocity += vector252;
32909 }
32910 if (type == 472)
32911 {
32912 float num1369 = 120f;
32913 if (localAI[0] < num1369)
32914 {
32915 if (localAI[0] == 0f)
32916 {
32918 TargetClosest();
32919 if (direction > 0)
32920 {
32921 velocity.X += 2f;
32922 }
32923 else
32924 {
32925 velocity.X -= 2f;
32926 }
32928 for (int num1370 = 0; num1370 < 20; num1370++)
32929 {
32930 Vector2 center34 = base.Center;
32931 center34.Y -= 18f;
32932 Vector2 vector253 = new Vector2(Main.rand.Next(-100, 101), Main.rand.Next(-100, 101));
32933 vector253.Normalize();
32934 vector253 *= (float)Main.rand.Next(0, 100) * 0.1f;
32936 vector253.Normalize();
32937 vector253 *= (float)Main.rand.Next(50, 90) * 0.2f;
32938 int num1371 = Dust.NewDust(center34, 1, 1, 27);
32939 Main.dust[num1371].velocity = -vector253 * 0.3f;
32940 Main.dust[num1371].alpha = 100;
32941 if (Main.rand.Next(2) == 0)
32942 {
32943 Main.dust[num1371].noGravity = true;
32944 Dust dust = Main.dust[num1371];
32945 dust.scale += 0.3f;
32946 }
32947 }
32949 }
32950 localAI[0] += 1f;
32951 float num1372 = 1f - localAI[0] / num1369;
32952 float num1373 = num1372 * 20f;
32953 for (int num1374 = 0; (float)num1374 < num1373; num1374++)
32954 {
32955 if (Main.rand.Next(5) == 0)
32956 {
32958 int num1375 = Dust.NewDust(position, width, height, 27);
32959 Main.dust[num1375].alpha = 100;
32960 Dust dust = Main.dust[num1375];
32961 dust.velocity *= 0.3f;
32962 dust = Main.dust[num1375];
32963 dust.velocity += velocity * 0.75f;
32964 Main.dust[num1375].noGravity = true;
32966 }
32967 }
32968 }
32969 }
32970 if (type == 521)
32971 {
32972 float num1376 = 120f;
32973 if (localAI[0] < num1376)
32974 {
32975 if (localAI[0] == 0f)
32976 {
32978 TargetClosest();
32979 if (direction > 0)
32980 {
32981 velocity.X += 2f;
32982 }
32983 else
32984 {
32985 velocity.X -= 2f;
32986 }
32987 }
32988 localAI[0] += 1f;
32989 int num1377 = 10;
32990 for (int num1378 = 0; num1378 < 2; num1378++)
32991 {
32993 int num1379 = Dust.NewDust(position - new Vector2(num1377), width + num1377 * 2, height + num1377 * 2, 228, 0f, 0f, 100, default(Color), 2f);
32994 Main.dust[num1379].noGravity = true;
32995 Main.dust[num1379].noLight = true;
32997 }
32998 }
32999 }
33000 if (this.ai[0] == 0f)
33001 {
33002 TargetClosest();
33003 this.ai[0] = 1f;
33004 this.ai[1] = direction;
33005 }
33006 else if (this.ai[0] == 1f)
33007 {
33008 TargetClosest();
33009 float num1380 = 0.3f;
33010 float num1381 = 7f;
33011 float num1382 = 4f;
33012 float num1383 = 660f;
33013 float num1384 = 4f;
33014 if (type == 521)
33015 {
33016 num1380 = 0.7f;
33017 num1381 = 14f;
33018 num1383 = 500f;
33019 num1382 = 6f;
33020 num1384 = 3f;
33021 }
33022 velocity.X += this.ai[1] * num1380;
33023 if (velocity.X > num1381)
33024 {
33025 velocity.X = num1381;
33026 }
33027 if (velocity.X < 0f - num1381)
33028 {
33029 velocity.X = 0f - num1381;
33030 }
33031 float num1385 = Main.player[target].Center.Y - base.Center.Y;
33032 if (Math.Abs(num1385) > num1382)
33033 {
33034 num1384 = 15f;
33035 }
33036 if (num1385 > num1382)
33037 {
33038 num1385 = num1382;
33039 }
33040 else if (num1385 < 0f - num1382)
33041 {
33042 num1385 = 0f - num1382;
33043 }
33044 velocity.Y = (velocity.Y * (num1384 - 1f) + num1385) / num1384;
33045 if ((this.ai[1] > 0f && Main.player[target].Center.X - base.Center.X < 0f - num1383) || (this.ai[1] < 0f && Main.player[target].Center.X - base.Center.X > num1383))
33046 {
33047 this.ai[0] = 2f;
33048 this.ai[1] = 0f;
33049 if (base.Center.Y + 20f > Main.player[target].Center.Y)
33050 {
33051 this.ai[1] = -1f;
33052 }
33053 else
33054 {
33055 this.ai[1] = 1f;
33056 }
33057 }
33058 }
33059 else if (this.ai[0] == 2f)
33060 {
33061 float num1386 = 0.4f;
33062 float num1387 = 0.95f;
33063 float num1388 = 5f;
33064 if (type == 521)
33065 {
33066 num1386 = 0.3f;
33067 num1388 = 7f;
33068 num1387 = 0.9f;
33069 }
33070 velocity.Y += this.ai[1] * num1386;
33071 if (velocity.Length() > num1388)
33072 {
33073 velocity *= num1387;
33074 }
33075 if (velocity.X > -1f && velocity.X < 1f)
33076 {
33077 TargetClosest();
33078 this.ai[0] = 3f;
33079 this.ai[1] = direction;
33080 }
33081 }
33082 else if (this.ai[0] == 3f)
33083 {
33084 float num1389 = 0.4f;
33085 float num1390 = 0.2f;
33086 float num1391 = 5f;
33087 float num1392 = 0.95f;
33088 if (type == 521)
33089 {
33090 num1389 = 0.6f;
33091 num1390 = 0.3f;
33092 num1391 = 7f;
33093 num1392 = 0.9f;
33094 }
33095 velocity.X += this.ai[1] * num1389;
33096 if (base.Center.Y > Main.player[target].Center.Y)
33097 {
33098 velocity.Y -= num1390;
33099 }
33100 else
33101 {
33102 velocity.Y += num1390;
33103 }
33104 if (velocity.Length() > num1391)
33105 {
33106 velocity *= num1392;
33107 }
33108 if (velocity.Y > -1f && velocity.Y < 1f)
33109 {
33110 TargetClosest();
33111 this.ai[0] = 0f;
33112 this.ai[1] = direction;
33113 }
33114 }
33115 if (type == 521)
33116 {
33117 int num1393 = 10;
33119 for (int num1394 = 0; num1394 < 1; num1394++)
33120 {
33121 int num1395 = Dust.NewDust(position - new Vector2(num1393), width + num1393 * 2, height + num1393 * 2, 228, 0f, 0f, 100, default(Color), 2f);
33122 Main.dust[num1395].noGravity = true;
33123 Main.dust[num1395].noLight = true;
33124 }
33126 }
33127 }
33128 else if (aiStyle == 87)
33129 {
33130 knockBackResist = 0.2f * Main.GameModeInfo.KnockbackToEnemiesMultiplier;
33131 dontTakeDamage = false;
33132 noTileCollide = false;
33133 noGravity = false;
33134 reflectsProjectiles = false;
33135 if (this.ai[0] != 7f && Main.player[target].dead)
33136 {
33137 TargetClosest();
33138 if (Main.player[target].dead)
33139 {
33140 this.ai[0] = 7f;
33141 this.ai[1] = 0f;
33142 this.ai[2] = 0f;
33143 this.ai[3] = 0f;
33144 netUpdate = true;
33145 }
33146 }
33147 if (this.ai[0] == 0f)
33148 {
33149 TargetClosest();
33150 Vector2 vector254 = Main.player[target].Center - base.Center;
33151 if (Main.netMode != 1 && (velocity.X != 0f || velocity.Y > 100f || justHit || vector254.Length() < 80f))
33152 {
33153 this.ai[0] = 1f;
33154 this.ai[1] = 0f;
33155 netUpdate = true;
33156 }
33157 }
33158 else if (this.ai[0] == 1f)
33159 {
33160 this.ai[1] += 1f;
33161 if (Main.netMode != 1 && this.ai[1] > 36f)
33162 {
33163 this.ai[0] = 2f;
33164 this.ai[1] = 0f;
33165 netUpdate = true;
33166 }
33167 }
33168 else if (this.ai[0] == 2f)
33169 {
33170 Vector2 vector255 = Main.player[target].Center - base.Center;
33171 if (Main.netMode != 1 && vector255.Length() > 600f)
33172 {
33173 this.ai[0] = 5f;
33174 this.ai[1] = 0f;
33175 this.ai[2] = 0f;
33176 this.ai[3] = 0f;
33177 netUpdate = true;
33178 }
33179 if (velocity.Y == 0f)
33180 {
33181 TargetClosest();
33182 velocity.X *= 0.85f;
33183 this.ai[1] += 1f;
33184 float num1396 = 15f + 30f * ((float)life / (float)lifeMax);
33185 float num1397 = 3f + 4f * (1f - (float)life / (float)lifeMax);
33186 float num1398 = 4f;
33187 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
33188 {
33189 num1398 += 2f;
33190 }
33191 if (Main.netMode != 1 && this.ai[1] > num1396)
33192 {
33193 this.ai[3] += 1f;
33194 if (this.ai[3] >= 3f)
33195 {
33196 this.ai[3] = 0f;
33197 num1398 *= 2f;
33198 num1397 /= 2f;
33199 }
33200 this.ai[1] = 0f;
33201 velocity.Y -= num1398;
33202 velocity.X = num1397 * (float)direction;
33203 netUpdate = true;
33204 }
33205 }
33206 else
33207 {
33208 knockBackResist = 0f;
33209 velocity.X *= 0.99f;
33211 {
33212 velocity.X = -1f;
33213 }
33214 if (direction > 0 && velocity.X < 1f)
33215 {
33216 velocity.X = 1f;
33217 }
33218 }
33219 this.ai[2] += 1f;
33220 if ((double)this.ai[2] > 210.0 && velocity.Y == 0f && Main.netMode != 1)
33221 {
33222 switch (Main.rand.Next(3))
33223 {
33224 case 0:
33225 this.ai[0] = 3f;
33226 break;
33227 case 1:
33228 this.ai[0] = 4f;
33229 noTileCollide = true;
33230 velocity.Y = -8f;
33231 break;
33232 case 2:
33233 this.ai[0] = 6f;
33234 break;
33235 default:
33236 this.ai[0] = 2f;
33237 break;
33238 }
33239 if (Main.tenthAnniversaryWorld && type == 476 && this.ai[0] == 3f && Main.rand.Next(2) == 0)
33240 {
33241 this.ai[0] = 8f;
33242 }
33243 this.ai[1] = 0f;
33244 this.ai[2] = 0f;
33245 this.ai[3] = 0f;
33246 netUpdate = true;
33247 }
33248 }
33249 else if (this.ai[0] == 3f)
33250 {
33251 velocity.X *= 0.85f;
33252 dontTakeDamage = true;
33253 this.ai[1] += 1f;
33254 if (Main.netMode != 1 && this.ai[1] >= 180f)
33255 {
33256 this.ai[0] = 2f;
33257 this.ai[1] = 0f;
33258 netUpdate = true;
33259 }
33260 if (Main.expertMode)
33261 {
33262 ReflectProjectiles(base.Hitbox);
33263 reflectsProjectiles = true;
33264 }
33265 }
33266 else if (this.ai[0] == 4f)
33267 {
33268 noTileCollide = true;
33269 noGravity = true;
33270 knockBackResist = 0f;
33271 if (velocity.X < 0f)
33272 {
33273 direction = -1;
33274 }
33275 else
33276 {
33277 direction = 1;
33278 }
33280 TargetClosest();
33281 Vector2 center35 = Main.player[target].Center;
33282 center35.Y -= 350f;
33283 Vector2 vector256 = center35 - base.Center;
33284 if (this.ai[2] == 1f)
33285 {
33286 this.ai[1] += 1f;
33287 vector256 = Main.player[target].Center - base.Center;
33288 vector256.Normalize();
33289 vector256 *= 8f;
33290 velocity = (velocity * 4f + vector256) / 5f;
33291 if (Main.netMode != 1 && this.ai[1] > 6f)
33292 {
33293 this.ai[1] = 0f;
33294 this.ai[0] = 4.1f;
33295 this.ai[2] = 0f;
33297 netUpdate = true;
33298 }
33299 }
33300 else if (Math.Abs(base.Center.X - Main.player[target].Center.X) < 40f && base.Center.Y < Main.player[target].Center.Y - 300f)
33301 {
33302 if (Main.netMode != 1)
33303 {
33304 this.ai[1] = 0f;
33305 this.ai[2] = 1f;
33306 netUpdate = true;
33307 }
33308 }
33309 else
33310 {
33311 vector256.Normalize();
33312 vector256 *= 12f;
33313 velocity = (velocity * 5f + vector256) / 6f;
33314 }
33315 }
33316 else if (this.ai[0] == 4.1f)
33317 {
33318 knockBackResist = 0f;
33319 if (this.ai[2] == 0f && Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1) && !Collision.SolidCollision(position, width, height))
33320 {
33321 this.ai[2] = 1f;
33322 }
33323 if (position.Y + (float)height >= Main.player[target].position.Y || velocity.Y <= 0f)
33324 {
33325 this.ai[1] += 1f;
33326 if (Main.netMode != 1 && this.ai[1] > 10f)
33327 {
33328 this.ai[0] = 2f;
33329 this.ai[1] = 0f;
33330 this.ai[2] = 0f;
33331 this.ai[3] = 0f;
33332 netUpdate = true;
33333 if (Collision.SolidCollision(position, width, height))
33334 {
33335 this.ai[0] = 5f;
33336 }
33337 }
33338 }
33339 else if (this.ai[2] == 0f)
33340 {
33341 noTileCollide = true;
33342 noGravity = true;
33343 knockBackResist = 0f;
33344 }
33345 velocity.Y += 0.2f;
33346 if (velocity.Y > 16f)
33347 {
33348 velocity.Y = 16f;
33349 }
33350 }
33351 else if (this.ai[0] == 5f)
33352 {
33353 if (velocity.X > 0f)
33354 {
33355 direction = 1;
33356 }
33357 else
33358 {
33359 direction = -1;
33360 }
33362 noTileCollide = true;
33363 noGravity = true;
33364 knockBackResist = 0f;
33365 Vector2 vector257 = Main.player[target].Center - base.Center;
33366 vector257.Y -= 4f;
33367 if (Main.netMode != 1 && vector257.Length() < 200f && !Collision.SolidCollision(position, width, height))
33368 {
33369 this.ai[0] = 2f;
33370 this.ai[1] = 0f;
33371 this.ai[2] = 0f;
33372 this.ai[3] = 0f;
33373 netUpdate = true;
33374 }
33375 if (vector257.Length() > 10f)
33376 {
33377 vector257.Normalize();
33378 vector257 *= 10f;
33379 }
33380 velocity = (velocity * 4f + vector257) / 5f;
33381 }
33382 else if (this.ai[0] == 6f)
33383 {
33384 knockBackResist = 0f;
33385 if (velocity.Y == 0f)
33386 {
33387 TargetClosest();
33388 velocity.X *= 0.8f;
33389 this.ai[1] += 1f;
33390 if (this.ai[1] > 5f)
33391 {
33392 this.ai[1] = 0f;
33393 velocity.Y -= 4f;
33394 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y)
33395 {
33396 velocity.Y -= 1.25f;
33397 }
33398 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y - 40f)
33399 {
33400 velocity.Y -= 1.5f;
33401 }
33402 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y - 80f)
33403 {
33404 velocity.Y -= 1.75f;
33405 }
33406 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y - 120f)
33407 {
33408 velocity.Y -= 2f;
33409 }
33410 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y - 160f)
33411 {
33412 velocity.Y -= 2.25f;
33413 }
33414 if (Main.player[target].position.Y + (float)Main.player[target].height < base.Center.Y - 200f)
33415 {
33416 velocity.Y -= 2.5f;
33417 }
33418 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
33419 {
33420 velocity.Y -= 2f;
33421 }
33422 velocity.X = 12 * direction;
33423 this.ai[2] += 1f;
33424 netUpdate = true;
33425 }
33426 }
33427 else
33428 {
33429 velocity.X *= 0.98f;
33431 {
33432 velocity.X = -8f;
33433 }
33434 if (direction > 0 && velocity.X < 8f)
33435 {
33436 velocity.X = 8f;
33437 }
33438 }
33439 if (Main.netMode != 1 && this.ai[2] >= 3f && velocity.Y == 0f)
33440 {
33441 this.ai[0] = 2f;
33442 this.ai[1] = 0f;
33443 this.ai[2] = 0f;
33444 this.ai[3] = 0f;
33445 netUpdate = true;
33446 }
33447 }
33448 else if (this.ai[0] == 7f)
33449 {
33450 damage = 0;
33451 life = lifeMax;
33452 defense = 9999;
33453 noTileCollide = true;
33454 alpha += 7;
33455 if (alpha > 255)
33456 {
33457 alpha = 255;
33458 }
33459 velocity.X *= 0.98f;
33460 }
33461 else
33462 {
33463 if (this.ai[0] != 8f)
33464 {
33465 return;
33466 }
33467 velocity.X *= 0.85f;
33468 this.ai[1] += 1f;
33469 if (Main.netMode != 1)
33470 {
33471 if (!Main.tenthAnniversaryWorld || this.ai[1] >= 180f)
33472 {
33473 this.ai[0] = 2f;
33474 this.ai[1] = 0f;
33475 netUpdate = true;
33476 }
33477 else if (this.ai[1] % 20f == 0f)
33478 {
33480 }
33481 }
33482 }
33483 }
33484 else if (aiStyle == 88)
33485 {
33486 int num1399 = 7;
33487 noTileCollide = false;
33488 noGravity = true;
33489 knockBackResist = 0.2f * Main.GameModeInfo.KnockbackToEnemiesMultiplier;
33490 damage = defDamage;
33491 if (!Main.eclipse && Main.netMode != 1)
33492 {
33493 if (this.ai[0] != -1f)
33494 {
33495 netUpdate = true;
33496 }
33497 this.ai[0] = -1f;
33498 }
33499 else if (target < 0 || Main.player[target].dead || !Main.player[target].active)
33500 {
33501 TargetClosest();
33502 Vector2 vector258 = Main.player[target].Center - base.Center;
33503 if (Main.netMode != 1 && (Main.player[target].dead || vector258.Length() > 3000f))
33504 {
33505 if (this.ai[0] != -1f)
33506 {
33507 netUpdate = true;
33508 }
33509 this.ai[0] = -1f;
33510 }
33511 }
33512 else
33513 {
33514 Vector2 vector259 = Main.player[target].Center - base.Center;
33515 if (Main.netMode != 1 && this.ai[0] > 1f && vector259.Length() > 1000f)
33516 {
33517 if (this.ai[0] != 1f)
33518 {
33519 netUpdate = true;
33520 }
33521 this.ai[0] = 1f;
33522 }
33523 }
33524 if (this.ai[0] == -1f)
33525 {
33526 Vector2 vector260 = new Vector2(0f, -8f);
33527 velocity = (velocity * 9f + vector260) / 10f;
33528 noTileCollide = true;
33529 dontTakeDamage = true;
33530 }
33531 else if (this.ai[0] == 0f)
33532 {
33533 TargetClosest();
33534 if (base.Center.X < Main.player[target].Center.X - 2f)
33535 {
33536 direction = 1;
33537 }
33538 if (base.Center.X > Main.player[target].Center.X + 2f)
33539 {
33540 direction = -1;
33541 }
33543 rotation = (rotation * 9f + velocity.X * 0.1f) / 10f;
33544 if (collideX)
33545 {
33546 velocity.X *= (0f - oldVelocity.X) * 0.5f;
33547 if (velocity.X > 4f)
33548 {
33549 velocity.X = 4f;
33550 }
33551 if (velocity.X < -4f)
33552 {
33553 velocity.X = -4f;
33554 }
33555 }
33556 if (collideY)
33557 {
33558 velocity.Y *= (0f - oldVelocity.Y) * 0.5f;
33559 if (velocity.Y > 4f)
33560 {
33561 velocity.Y = 4f;
33562 }
33563 if (velocity.Y < -4f)
33564 {
33565 velocity.Y = -4f;
33566 }
33567 }
33568 Vector2 vector261 = Main.player[target].Center - base.Center;
33569 vector261.Y -= 200f;
33570 if (vector261.Length() > 800f)
33571 {
33572 this.ai[0] = 1f;
33573 this.ai[1] = 0f;
33574 this.ai[2] = 0f;
33575 this.ai[3] = 0f;
33576 netUpdate = true;
33577 }
33578 else if (vector261.Length() > 80f)
33579 {
33580 float num1400 = 6f;
33581 float num1401 = 30f;
33582 vector261.Normalize();
33583 vector261 *= num1400;
33584 velocity = (velocity * (num1401 - 1f) + vector261) / num1401;
33585 }
33586 else if (velocity.Length() > 2f)
33587 {
33588 velocity *= 0.95f;
33589 }
33590 else if (velocity.Length() < 1f)
33591 {
33592 velocity *= 1.05f;
33593 }
33594 if (Main.netMode == 1)
33595 {
33596 return;
33597 }
33598 this.ai[1] += 1f;
33599 if (justHit)
33600 {
33601 this.ai[1] += Main.rand.Next(10, 30);
33602 }
33603 if (!(this.ai[1] >= 180f))
33604 {
33605 return;
33606 }
33607 this.ai[1] = 0f;
33608 this.ai[2] = 0f;
33609 this.ai[3] = 0f;
33610 netUpdate = true;
33611 while (this.ai[0] == 0f)
33612 {
33613 int num1402 = Main.rand.Next(3);
33614 if (num1402 == 0 && Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
33615 {
33616 this.ai[0] = 2f;
33617 continue;
33618 }
33619 switch (num1402)
33620 {
33621 case 1:
33622 this.ai[0] = 3f;
33623 break;
33624 case 2:
33625 if (CountNPCS(478) + CountNPCS(479) < num1399)
33626 {
33627 this.ai[0] = 4f;
33628 }
33629 break;
33630 }
33631 }
33632 }
33633 else if (this.ai[0] == 1f)
33634 {
33635 collideX = false;
33636 collideY = false;
33637 noTileCollide = true;
33638 knockBackResist = 0f;
33639 if (target < 0 || !Main.player[target].active || Main.player[target].dead)
33640 {
33641 TargetClosest();
33642 }
33643 if (velocity.X < 0f)
33644 {
33645 direction = -1;
33646 }
33647 else if (velocity.X > 0f)
33648 {
33649 direction = 1;
33650 }
33652 rotation = (rotation * 9f + velocity.X * 0.08f) / 10f;
33653 Vector2 vector262 = Main.player[target].Center - base.Center;
33654 if (Main.netMode != 1 && vector262.Length() < 300f && !Collision.SolidCollision(position, width, height))
33655 {
33656 this.ai[0] = 0f;
33657 this.ai[1] = 0f;
33658 this.ai[2] = 0f;
33659 this.ai[3] = 0f;
33660 netUpdate = true;
33661 }
33662 float num1403 = 7f + vector262.Length() / 100f;
33663 float num1404 = 25f;
33664 vector262.Normalize();
33665 vector262 *= num1403;
33666 velocity = (velocity * (num1404 - 1f) + vector262) / num1404;
33667 }
33668 else if (this.ai[0] == 2f)
33669 {
33670 damage = (int)((double)defDamage * 0.5);
33671 knockBackResist = 0f;
33672 if (target < 0 || !Main.player[target].active || Main.player[target].dead)
33673 {
33674 TargetClosest();
33675 this.ai[0] = 0f;
33676 this.ai[1] = 0f;
33677 this.ai[2] = 0f;
33678 this.ai[3] = 0f;
33679 netUpdate = true;
33680 }
33681 if (Main.player[target].Center.X - 10f < base.Center.X)
33682 {
33683 direction = -1;
33684 }
33685 else if (Main.player[target].Center.X + 10f > base.Center.X)
33686 {
33687 direction = 1;
33688 }
33690 rotation = (rotation * 4f + velocity.X * 0.1f) / 5f;
33691 if (collideX)
33692 {
33693 velocity.X *= (0f - oldVelocity.X) * 0.5f;
33694 if (velocity.X > 4f)
33695 {
33696 velocity.X = 4f;
33697 }
33698 if (velocity.X < -4f)
33699 {
33700 velocity.X = -4f;
33701 }
33702 }
33703 if (collideY)
33704 {
33705 velocity.Y *= (0f - oldVelocity.Y) * 0.5f;
33706 if (velocity.Y > 4f)
33707 {
33708 velocity.Y = 4f;
33709 }
33710 if (velocity.Y < -4f)
33711 {
33712 velocity.Y = -4f;
33713 }
33714 }
33715 Vector2 vector263 = Main.player[target].Center - base.Center;
33716 vector263.Y -= 20f;
33717 this.ai[2] += 1f / 45f;
33718 if (Main.expertMode)
33719 {
33720 this.ai[2] += 1f / 60f;
33721 }
33722 float num1405 = 4f + this.ai[2] + vector263.Length() / 120f;
33723 float num1406 = 20f;
33724 vector263.Normalize();
33725 vector263 *= num1405;
33726 velocity = (velocity * (num1406 - 1f) + vector263) / num1406;
33727 if (Main.netMode != 1)
33728 {
33729 this.ai[1] += 1f;
33730 if (this.ai[1] > 240f || !Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
33731 {
33732 this.ai[0] = 0f;
33733 this.ai[1] = 0f;
33734 this.ai[2] = 0f;
33735 this.ai[3] = 0f;
33736 netUpdate = true;
33737 }
33738 }
33739 }
33740 else if (this.ai[0] == 3f)
33741 {
33742 knockBackResist = 0f;
33743 noTileCollide = true;
33744 if (velocity.X < 0f)
33745 {
33746 direction = -1;
33747 }
33748 else
33749 {
33750 direction = 1;
33751 }
33753 rotation = (rotation * 4f + velocity.X * 0.07f) / 5f;
33754 Vector2 vector264 = Main.player[target].Center - base.Center;
33755 vector264.Y -= 12f;
33756 if (base.Center.X > Main.player[target].Center.X)
33757 {
33758 vector264.X += 400f;
33759 }
33760 else
33761 {
33762 vector264.X -= 400f;
33763 }
33764 if (Main.netMode != 1 && Math.Abs(base.Center.X - Main.player[target].Center.X) > 350f && Math.Abs(base.Center.Y - Main.player[target].Center.Y) < 20f)
33765 {
33766 this.ai[0] = 3.1f;
33767 this.ai[1] = 0f;
33768 netUpdate = true;
33769 }
33770 this.ai[1] += 1f / 30f;
33771 float num1407 = 8f + this.ai[1];
33772 float num1408 = 4f;
33773 vector264.Normalize();
33774 vector264 *= num1407;
33775 velocity = (velocity * (num1408 - 1f) + vector264) / num1408;
33776 }
33777 else if (this.ai[0] == 3.1f)
33778 {
33779 knockBackResist = 0f;
33780 noTileCollide = true;
33781 rotation = (rotation * 4f + velocity.X * 0.07f) / 5f;
33782 Vector2 vector265 = Main.player[target].Center - base.Center;
33783 vector265.Y -= 12f;
33784 float num1409 = 16f;
33785 float num1410 = 8f;
33786 vector265.Normalize();
33787 vector265 *= num1409;
33788 velocity = (velocity * (num1410 - 1f) + vector265) / num1410;
33789 if (velocity.X < 0f)
33790 {
33791 direction = -1;
33792 }
33793 else
33794 {
33795 direction = 1;
33796 }
33798 this.ai[1] += 1f;
33799 if (Main.netMode != 1 && this.ai[1] > 10f)
33800 {
33802 if (velocity.X < 0f)
33803 {
33804 direction = -1;
33805 }
33806 else
33807 {
33808 direction = 1;
33809 }
33810 this.ai[0] = 3.2f;
33811 this.ai[1] = 0f;
33812 this.ai[1] = direction;
33813 netUpdate = true;
33814 }
33815 }
33816 else if (this.ai[0] == 3.2f)
33817 {
33818 damage = (int)((double)defDamage * 1.3);
33819 collideX = false;
33820 collideY = false;
33821 knockBackResist = 0f;
33822 noTileCollide = true;
33823 this.ai[2] += 1f / 30f;
33824 velocity.X = (16f + this.ai[2]) * this.ai[1];
33825 if ((this.ai[1] > 0f && base.Center.X > Main.player[target].Center.X + 260f) || (this.ai[1] < 0f && base.Center.X < Main.player[target].Center.X - 260f))
33826 {
33827 if (Main.netMode != 1 && !Collision.SolidCollision(position, width, height))
33828 {
33829 this.ai[0] = 0f;
33830 this.ai[1] = 0f;
33831 this.ai[2] = 0f;
33832 this.ai[3] = 0f;
33833 netUpdate = true;
33834 }
33835 else if (Main.netMode != 1 && Math.Abs(base.Center.X - Main.player[target].Center.X) > 800f)
33836 {
33837 this.ai[0] = 1f;
33838 this.ai[1] = 0f;
33839 this.ai[2] = 0f;
33840 this.ai[3] = 0f;
33841 netUpdate = true;
33842 }
33843 }
33844 rotation = (rotation * 4f + velocity.X * 0.07f) / 5f;
33845 }
33846 else if (this.ai[0] == 4f)
33847 {
33848 bool flag84 = (double)(base.Center.Y / 16f) < Main.worldSurface;
33849 TargetClosest();
33850 if (Main.netMode != 1)
33851 {
33852 this.ai[0] = 0f;
33853 this.ai[1] = 0f;
33854 this.ai[2] = 0f;
33855 for (int num1411 = 0; num1411 < 1000; num1411++)
33856 {
33857 int num1412 = (int)Main.player[target].Center.X / 16;
33858 int num1413 = (int)Main.player[target].Center.Y / 16;
33859 int num1414 = 30 + num1411 / 50;
33860 int num1415 = 20 + num1411 / 75;
33861 num1412 += Main.rand.Next(-num1414, num1414 + 1);
33862 num1413 += Main.rand.Next(-num1415, num1415 + 1);
33863 if (WorldGen.SolidTile(num1412, num1413))
33864 {
33865 continue;
33866 }
33867 bool flag85 = false;
33868 int num1416 = 50;
33869 while (num1416 > 0)
33870 {
33871 num1416--;
33872 if (!WorldGen.InWorld(num1412, num1413, 5))
33873 {
33874 flag85 = true;
33875 break;
33876 }
33877 Tile tile2 = Main.tile[num1412, num1413];
33878 if (tile2 == null)
33879 {
33880 flag85 = true;
33881 break;
33882 }
33883 if (tile2.liquid > 0 && tile2.lava())
33884 {
33885 flag85 = true;
33886 break;
33887 }
33888 Tile tile3 = Main.tile[num1412, num1413 - 1];
33889 if (tile3 == null)
33890 {
33891 flag85 = true;
33892 break;
33893 }
33894 if (tile3.liquid > 0 && tile3.lava())
33895 {
33896 flag85 = true;
33897 break;
33898 }
33899 if (WorldGen.SolidTile(num1412, num1413) || (flag84 && (double)num1413 > Main.worldSurface))
33900 {
33901 break;
33902 }
33903 num1413++;
33904 }
33905 if (!(num1416 <= 0 || flag85) && (new Vector2(num1412 * 16 + 8, num1413 * 16 + 8) - Main.player[target].Center).Length() < 600f)
33906 {
33907 this.ai[0] = 4.1f;
33908 this.ai[1] = num1412;
33909 this.ai[2] = num1413;
33910 break;
33911 }
33912 }
33913 }
33914 netUpdate = true;
33915 }
33916 else if (this.ai[0] == 4.1f)
33917 {
33918 if (velocity.X < -2f)
33919 {
33920 direction = -1;
33921 }
33922 else if (velocity.X > 2f)
33923 {
33924 direction = 1;
33925 }
33927 rotation = (rotation * 9f + velocity.X * 0.1f) / 10f;
33928 noTileCollide = true;
33929 int num1417 = (int)this.ai[1];
33930 int num1418 = (int)this.ai[2];
33931 float x3 = num1417 * 16 + 8;
33932 float y5 = num1418 * 16 - 20;
33933 Vector2 v12 = new Vector2(x3, y5);
33934 v12 -= base.Center;
33935 float num1419 = 6f + v12.Length() / 150f;
33936 if (num1419 > 10f)
33937 {
33938 num1419 = 10f;
33939 }
33940 float num1420 = 10f;
33941 if (v12.Length() < 10f)
33942 {
33943 this.ai[0] = 4.2f;
33944 netUpdate = true;
33945 }
33946 v12 = v12.SafeNormalize(Vector2.Zero);
33947 v12 *= num1419;
33948 velocity = (velocity * (num1420 - 1f) + v12) / num1420;
33949 if (velocity.Length() > num1419)
33950 {
33952 velocity *= num1419;
33953 }
33954 }
33955 else
33956 {
33957 if (this.ai[0] != 4.2f)
33958 {
33959 return;
33960 }
33961 rotation = (rotation * 9f + velocity.X * 0.1f) / 10f;
33962 knockBackResist = 0f;
33963 noTileCollide = true;
33964 int num1421 = (int)this.ai[1];
33965 int num1422 = (int)this.ai[2];
33966 float x4 = num1421 * 16 + 8;
33967 float y6 = num1422 * 16 - 20;
33968 Vector2 vector266 = new Vector2(x4, y6);
33969 vector266 -= base.Center;
33970 float num1423 = 4f;
33971 float num1424 = 2f;
33972 if (Main.netMode != 1 && vector266.Length() < 4f)
33973 {
33974 int num1425 = 70;
33975 if (Main.expertMode)
33976 {
33977 num1425 = (int)((double)num1425 * 0.75);
33978 }
33979 this.ai[3] += 1f;
33980 if (this.ai[3] == (float)num1425)
33981 {
33982 int num1426 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), num1421 * 16 + 8, num1422 * 16, 478, whoAmI);
33983 Main.npc[num1426].netUpdate = true;
33984 }
33985 else if (this.ai[3] == (float)(num1425 * 2))
33986 {
33987 this.ai[0] = 0f;
33988 this.ai[1] = 0f;
33989 this.ai[2] = 0f;
33990 this.ai[3] = 0f;
33991 netUpdate = true;
33992 if (CountNPCS(478) + CountNPCS(479) < num1399 && Main.rand.Next(3) != 0)
33993 {
33994 this.ai[0] = 4f;
33995 }
33996 else if (Collision.SolidCollision(position, width, height))
33997 {
33998 this.ai[0] = 1f;
33999 }
34000 }
34001 }
34002 if (vector266.Length() > num1423)
34003 {
34004 vector266.Normalize();
34005 vector266 *= num1423;
34006 }
34007 velocity = (velocity * (num1424 - 1f) + vector266) / num1424;
34008 if (velocity.Length() > num1423)
34009 {
34011 velocity *= num1423;
34012 }
34013 }
34014 }
34015 else if (aiStyle == 89)
34016 {
34017 if (velocity.Y == 0f)
34018 {
34019 velocity.X *= 0.9f;
34020 rotation += velocity.X * 0.02f;
34021 }
34022 else
34023 {
34024 velocity.X *= 0.99f;
34025 rotation += velocity.X * 0.04f;
34026 }
34027 int num1427 = 900;
34028 if (Main.expertMode)
34029 {
34030 num1427 = 600;
34031 }
34032 if (justHit)
34033 {
34034 this.ai[0] -= Main.rand.Next(10, 21);
34035 if (!Main.expertMode)
34036 {
34037 this.ai[0] -= Main.rand.Next(10, 21);
34038 }
34039 }
34040 this.ai[0] += 1f;
34041 if (this.ai[0] >= (float)num1427)
34042 {
34043 Transform(479);
34044 }
34045 if (Main.netMode != 1 && velocity.Y == 0f && (double)Math.Abs(velocity.X) < 0.2 && (double)this.ai[0] >= (double)num1427 * 0.75)
34046 {
34047 float num1428 = this.ai[0] - (float)num1427 * 0.75f;
34048 num1428 /= (float)num1427 * 0.25f;
34049 if ((float)Main.rand.Next(-10, 120) < num1428 * 100f)
34050 {
34051 velocity.Y -= (float)Main.rand.Next(20, 40) * 0.025f;
34052 velocity.X += (float)Main.rand.Next(-20, 20) * 0.025f;
34053 velocity *= 1f + num1428 * 2f;
34054 netUpdate = true;
34055 }
34056 }
34057 }
34058 else if (aiStyle == 90)
34059 {
34060 noTileCollide = false;
34061 knockBackResist = 0.4f * Main.GameModeInfo.KnockbackToEnemiesMultiplier;
34062 noGravity = true;
34063 rotation = (rotation * 9f + velocity.X * 0.1f) / 10f;
34064 if (!Main.eclipse)
34065 {
34067 velocity.Y -= 0.2f;
34068 if (velocity.Y < -8f)
34069 {
34070 velocity.Y = -8f;
34071 }
34072 noTileCollide = true;
34073 return;
34074 }
34075 if (this.ai[0] == 0f || this.ai[0] == 1f)
34076 {
34077 for (int num1429 = 0; num1429 < 200; num1429++)
34078 {
34079 if (num1429 != whoAmI && Main.npc[num1429].active && Main.npc[num1429].type == type)
34080 {
34081 Vector2 vector267 = Main.npc[num1429].Center - base.Center;
34082 if (vector267.Length() < (float)(width + height))
34083 {
34084 vector267.Normalize();
34085 vector267 *= -0.1f;
34087 NPC nPC3 = Main.npc[num1429];
34088 nPC3.velocity -= vector267;
34089 }
34090 }
34091 }
34092 }
34093 if (target < 0 || Main.player[target].dead || !Main.player[target].active)
34094 {
34095 TargetClosest();
34096 Vector2 vector268 = Main.player[target].Center - base.Center;
34097 if (Main.player[target].dead || vector268.Length() > 3000f)
34098 {
34099 this.ai[0] = -1f;
34100 }
34101 }
34102 else
34103 {
34104 Vector2 vector269 = Main.player[target].Center - base.Center;
34105 if (this.ai[0] > 1f && vector269.Length() > 1000f)
34106 {
34107 this.ai[0] = 1f;
34108 }
34109 }
34110 if (this.ai[0] == -1f)
34111 {
34112 Vector2 vector270 = new Vector2(0f, -8f);
34113 velocity = (velocity * 9f + vector270) / 10f;
34114 noTileCollide = true;
34115 dontTakeDamage = true;
34116 }
34117 else if (this.ai[0] == 0f)
34118 {
34119 TargetClosest();
34121 if (collideX)
34122 {
34123 velocity.X *= (0f - oldVelocity.X) * 0.5f;
34124 if (velocity.X > 4f)
34125 {
34126 velocity.X = 4f;
34127 }
34128 if (velocity.X < -4f)
34129 {
34130 velocity.X = -4f;
34131 }
34132 }
34133 if (collideY)
34134 {
34135 velocity.Y *= (0f - oldVelocity.Y) * 0.5f;
34136 if (velocity.Y > 4f)
34137 {
34138 velocity.Y = 4f;
34139 }
34140 if (velocity.Y < -4f)
34141 {
34142 velocity.Y = -4f;
34143 }
34144 }
34145 Vector2 vector271 = Main.player[target].Center - base.Center;
34146 if (vector271.Length() > 800f)
34147 {
34148 this.ai[0] = 1f;
34149 this.ai[1] = 0f;
34150 this.ai[2] = 0f;
34151 this.ai[3] = 0f;
34152 }
34153 else if (vector271.Length() > 200f)
34154 {
34155 float num1430 = 5.5f + vector271.Length() / 100f + this.ai[1] / 15f;
34156 float num1431 = 40f;
34157 vector271.Normalize();
34158 vector271 *= num1430;
34159 velocity = (velocity * (num1431 - 1f) + vector271) / num1431;
34160 }
34161 else if (velocity.Length() > 2f)
34162 {
34163 velocity *= 0.95f;
34164 }
34165 else if (velocity.Length() < 1f)
34166 {
34167 velocity *= 1.05f;
34168 }
34169 this.ai[1] += 1f;
34170 if (this.ai[1] >= 90f)
34171 {
34172 this.ai[1] = 0f;
34173 this.ai[0] = 2f;
34174 }
34175 }
34176 else if (this.ai[0] == 1f)
34177 {
34178 collideX = false;
34179 collideY = false;
34180 noTileCollide = true;
34181 knockBackResist = 0f;
34182 if (target < 0 || !Main.player[target].active || Main.player[target].dead)
34183 {
34184 TargetClosest();
34185 }
34186 if (velocity.X < 0f)
34187 {
34188 direction = -1;
34189 }
34190 else if (velocity.X > 0f)
34191 {
34192 direction = 1;
34193 }
34195 rotation = (rotation * 9f + velocity.X * 0.08f) / 10f;
34196 Vector2 vector272 = Main.player[target].Center - base.Center;
34197 if (vector272.Length() < 300f && !Collision.SolidCollision(position, width, height))
34198 {
34199 this.ai[0] = 0f;
34200 this.ai[1] = 0f;
34201 this.ai[2] = 0f;
34202 this.ai[3] = 0f;
34203 }
34204 this.ai[2] += 1f / 60f;
34205 float num1432 = 5.5f + this.ai[2] + vector272.Length() / 150f;
34206 float num1433 = 35f;
34207 vector272.Normalize();
34208 vector272 *= num1432;
34209 velocity = (velocity * (num1433 - 1f) + vector272) / num1433;
34210 }
34211 else if (this.ai[0] == 2f)
34212 {
34213 if (velocity.X < 0f)
34214 {
34215 direction = -1;
34216 }
34217 else if (velocity.X > 0f)
34218 {
34219 direction = 1;
34220 }
34222 rotation = (rotation * 7f + velocity.X * 0.1f) / 8f;
34223 knockBackResist = 0f;
34224 noTileCollide = true;
34225 Vector2 vector273 = Main.player[target].Center - base.Center;
34226 vector273.Y -= 8f;
34227 float num1434 = 9f;
34228 float num1435 = 8f;
34229 vector273.Normalize();
34230 vector273 *= num1434;
34231 velocity = (velocity * (num1435 - 1f) + vector273) / num1435;
34232 if (velocity.X < 0f)
34233 {
34234 direction = -1;
34235 }
34236 else
34237 {
34238 direction = 1;
34239 }
34241 this.ai[1] += 1f;
34242 if (this.ai[1] > 10f)
34243 {
34245 if (velocity.X < 0f)
34246 {
34247 direction = -1;
34248 }
34249 else
34250 {
34251 direction = 1;
34252 }
34253 this.ai[0] = 2.1f;
34254 this.ai[1] = 0f;
34255 }
34256 }
34257 else
34258 {
34259 if (this.ai[0] != 2.1f)
34260 {
34261 return;
34262 }
34263 if (velocity.X < 0f)
34264 {
34265 direction = -1;
34266 }
34267 else if (velocity.X > 0f)
34268 {
34269 direction = 1;
34270 }
34272 velocity *= 1.01f;
34273 knockBackResist = 0f;
34274 noTileCollide = true;
34275 this.ai[1] += 1f;
34276 int num1436 = 45;
34277 if (this.ai[1] > (float)num1436)
34278 {
34279 if (!Collision.SolidCollision(position, width, height))
34280 {
34281 this.ai[0] = 0f;
34282 this.ai[1] = 0f;
34283 this.ai[2] = 0f;
34284 }
34285 else if (this.ai[1] > (float)(num1436 * 2))
34286 {
34287 this.ai[0] = 1f;
34288 this.ai[1] = 0f;
34289 this.ai[2] = 0f;
34290 }
34291 }
34292 }
34293 }
34294 else if (aiStyle == 91)
34295 {
34296 noGravity = true;
34297 noTileCollide = false;
34298 dontTakeDamage = false;
34299 if (justHit && Main.netMode != 1 && Main.expertMode && Main.rand.Next(6) == 0)
34300 {
34301 netUpdate = true;
34302 this.ai[0] = -1f;
34303 this.ai[1] = 0f;
34304 }
34305 if (this.ai[0] == -1f)
34306 {
34307 dontTakeDamage = true;
34308 noGravity = false;
34309 velocity.X *= 0.98f;
34310 this.ai[1] += 1f;
34311 if (this.ai[1] >= 120f)
34312 {
34313 this.ai[0] = (this.ai[1] = (this.ai[2] = (this.ai[3] = 0f)));
34314 }
34315 }
34316 else if (this.ai[0] == 0f)
34317 {
34318 TargetClosest();
34319 if (Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
34320 {
34321 this.ai[0] = 1f;
34322 return;
34323 }
34324 Vector2 vector274 = Main.player[target].Center - base.Center;
34325 vector274.Y -= Main.player[target].height / 4;
34326 float num1437 = vector274.Length();
34327 Vector2 center36 = base.Center;
34328 center36.X = Main.player[target].Center.X;
34329 Vector2 vector275 = center36 - base.Center;
34330 if (vector275.Length() > 8f && Collision.CanHit(base.Center, 1, 1, center36, 1, 1))
34331 {
34332 this.ai[0] = 3f;
34333 this.ai[1] = center36.X;
34334 this.ai[2] = center36.Y;
34335 Vector2 center37 = base.Center;
34336 center37.Y = Main.player[target].Center.Y;
34337 if (vector275.Length() > 8f && Collision.CanHit(base.Center, 1, 1, center37, 1, 1) && Collision.CanHit(center37, 1, 1, Main.player[target].position, 1, 1))
34338 {
34339 this.ai[0] = 3f;
34340 this.ai[1] = center37.X;
34341 this.ai[2] = center37.Y;
34342 }
34343 }
34344 else
34345 {
34346 center36 = base.Center;
34347 center36.Y = Main.player[target].Center.Y;
34348 if ((center36 - base.Center).Length() > 8f && Collision.CanHit(base.Center, 1, 1, center36, 1, 1))
34349 {
34350 this.ai[0] = 3f;
34351 this.ai[1] = center36.X;
34352 this.ai[2] = center36.Y;
34353 }
34354 }
34355 if (this.ai[0] == 0f)
34356 {
34357 localAI[0] = 0f;
34358 vector274.Normalize();
34359 vector274 *= 0.5f;
34361 this.ai[0] = 4f;
34362 this.ai[1] = 0f;
34363 }
34364 }
34365 else if (this.ai[0] == 1f)
34366 {
34367 Vector2 vector276 = Main.player[target].Center - base.Center;
34368 float num1438 = vector276.Length();
34369 float num1439 = 2f;
34370 num1439 += num1438 / 200f;
34371 int num1440 = 50;
34372 vector276.Normalize();
34373 vector276 *= num1439;
34374 velocity = (velocity * (num1440 - 1) + vector276) / num1440;
34375 if (!Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
34376 {
34377 this.ai[0] = 0f;
34378 this.ai[1] = 0f;
34379 }
34380 }
34381 else if (this.ai[0] == 2f)
34382 {
34383 noTileCollide = true;
34384 Vector2 vector277 = Main.player[target].Center - base.Center;
34385 float num1441 = vector277.Length();
34386 float num1442 = 2f;
34387 int num1443 = 4;
34388 vector277.Normalize();
34389 vector277 *= num1442;
34390 velocity = (velocity * (num1443 - 1) + vector277) / num1443;
34391 if (num1441 < 600f && !Collision.SolidCollision(position, width, height))
34392 {
34393 this.ai[0] = 0f;
34394 }
34395 }
34396 else if (this.ai[0] == 3f)
34397 {
34398 Vector2 vector278 = new Vector2(this.ai[1], this.ai[2]);
34399 Vector2 vector279 = vector278 - base.Center;
34400 float num1444 = vector279.Length();
34401 float num1445 = 1f;
34402 float num1446 = 3f;
34403 vector279.Normalize();
34404 vector279 *= num1445;
34405 velocity = (velocity * (num1446 - 1f) + vector279) / num1446;
34406 if (collideX || collideY)
34407 {
34408 this.ai[0] = 4f;
34409 this.ai[1] = 0f;
34410 }
34411 if (num1444 < num1445 || num1444 > 800f || Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
34412 {
34413 this.ai[0] = 0f;
34414 }
34415 }
34416 else
34417 {
34418 if (this.ai[0] != 4f)
34419 {
34420 return;
34421 }
34422 if (collideX)
34423 {
34424 velocity.X *= -0.8f;
34425 }
34426 if (collideY)
34427 {
34428 velocity.Y *= -0.8f;
34429 }
34431 if (velocity.X == 0f && velocity.Y == 0f)
34432 {
34433 vector280 = Main.player[target].Center - base.Center;
34434 vector280.Y -= Main.player[target].height / 4;
34435 vector280.Normalize();
34436 velocity = vector280 * 0.1f;
34437 }
34438 float num1447 = 1.5f;
34439 float num1448 = 20f;
34441 vector280.Normalize();
34442 vector280 *= num1447;
34443 velocity = (velocity * (num1448 - 1f) + vector280) / num1448;
34444 this.ai[1] += 1f;
34445 if (this.ai[1] > 180f)
34446 {
34447 this.ai[0] = 0f;
34448 this.ai[1] = 0f;
34449 }
34450 if (Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1))
34451 {
34452 this.ai[0] = 0f;
34453 }
34454 localAI[0] += 1f;
34455 if (!(localAI[0] >= 5f) || Collision.SolidCollision(position - new Vector2(10f, 10f), width + 20, height + 20))
34456 {
34457 return;
34458 }
34459 localAI[0] = 0f;
34460 Vector2 center38 = base.Center;
34461 center38.X = Main.player[target].Center.X;
34462 if (Collision.CanHit(base.Center, 1, 1, center38, 1, 1) && Collision.CanHit(base.Center, 1, 1, center38, 1, 1) && Collision.CanHit(Main.player[target].Center, 1, 1, center38, 1, 1))
34463 {
34464 this.ai[0] = 3f;
34465 this.ai[1] = center38.X;
34466 this.ai[2] = center38.Y;
34467 return;
34468 }
34469 center38 = base.Center;
34470 center38.Y = Main.player[target].Center.Y;
34471 if (Collision.CanHit(base.Center, 1, 1, center38, 1, 1) && Collision.CanHit(Main.player[target].Center, 1, 1, center38, 1, 1))
34472 {
34473 this.ai[0] = 3f;
34474 this.ai[1] = center38.X;
34475 this.ai[2] = center38.Y;
34476 }
34477 }
34478 }
34479 else if (aiStyle == 92)
34480 {
34481 if (Main.rand.Next(20) == 0)
34482 {
34483 switch (Main.rand.Next(15, 18))
34484 {
34485 case 15:
34487 break;
34488 case 16:
34490 break;
34491 case 17:
34493 break;
34494 }
34495 }
34496 if (Main.netMode == 1)
34497 {
34498 return;
34499 }
34500 bool flag86 = false;
34501 int num1449 = (int)this.ai[0];
34502 int num1450 = (int)this.ai[1];
34503 if (!flag86 && (!Main.tile[num1449, num1450].active() || Main.tile[num1449, num1450].type != 378))
34504 {
34505 flag86 = true;
34506 }
34507 if (!flag86 && (target == 255 || Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > 160000f))
34508 {
34510 if (target == 255 || Main.player[target].dead || Vector2.Distance(base.Center, Main.player[target].Center) > 160000f)
34511 {
34512 flag86 = true;
34513 }
34514 }
34515 if (flag86)
34516 {
34517 life = 0;
34518 HitEffect();
34519 active = false;
34520 int num1451 = TETrainingDummy.Find((int)this.ai[0], (int)this.ai[1]);
34521 if (num1451 != -1)
34522 {
34523 ((TETrainingDummy)TileEntity.ByID[num1451]).Deactivate();
34524 }
34525 }
34526 }
34527 else if (aiStyle == 93)
34528 {
34529 if (Main.netMode != 1 && localAI[0] == 0f)
34530 {
34531 localAI[0] = 1f;
34532 for (int num1452 = 0; num1452 < 4; num1452++)
34533 {
34534 int num1453 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X + num1452 * 40 - 150, (int)base.Center.Y, 492, whoAmI, whoAmI, num1452, 0f, 60 * num1452);
34535 Main.npc[num1453].TargetClosest(faceTarget: false);
34536 Main.npc[num1453].timeLeft = 600;
34537 Main.npc[num1453].netUpdate = true;
34538 this.ai[num1452] = num1453;
34539 }
34540 netUpdate = true;
34541 }
34542 bool flag87 = true;
34543 for (int num1454 = 0; num1454 < 4; num1454++)
34544 {
34545 if (this.ai[num1454] >= 0f && (!Main.npc[(int)this.ai[num1454]].active || Main.npc[(int)this.ai[num1454]].type != 492))
34546 {
34547 this.ai[num1454] = -1f;
34548 netUpdate = true;
34549 }
34550 else if (this.ai[num1454] >= 0f)
34551 {
34552 flag87 = false;
34553 }
34554 }
34555 if (flag87)
34556 {
34557 StrikeNPCNoInteraction(9999, 0f, 0);
34558 return;
34559 }
34560 if (Main.netMode != 1 && Main.rand.Next(300) == 0)
34561 {
34562 Vector2 vector281 = new Vector2((Main.rand.NextFloat() - 0.5f) * (float)(width - 70), (Main.rand.NextFloat() - 0.5f) * 20f - (float)(height / 2) - 20f).RotatedBy(rotation);
34563 vector281 += base.Center;
34564 int num1455 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)vector281.X, (int)vector281.Y, Utils.SelectRandom<int>(Main.rand, 213, 215, 214, 212));
34565 Main.npc[num1455].velocity = new Vector2((Main.rand.NextFloat() - 0.5f) * 5f, -8.01f) + velocity;
34566 Main.npc[num1455].netUpdate = true;
34567 Main.npc[num1455].timeLeft = 600;
34568 }
34569 if ((localAI[3] += 1f) >= 64f)
34570 {
34571 localAI[3] = 0f;
34572 }
34573 TargetClosest();
34574 int num1456 = (int)base.Center.X / 16 + Math.Sign(velocity.X) * 10;
34575 int num1457 = (int)(position.Y + (float)height) / 16;
34576 int num1458 = 0;
34577 if (Main.tile[num1456, num1457].nactive() && Main.tileSolid[Main.tile[num1456, num1457].type] && !Main.tileSolidTop[Main.tile[num1456, num1457].type])
34578 {
34579 num1458 = 1;
34580 }
34581 else
34582 {
34583 for (; num1458 < 150 && num1457 + num1458 < Main.maxTilesY; num1458++)
34584 {
34585 int num1459 = num1457 + num1458;
34586 if (Main.tile[num1456, num1459].nactive() && Main.tileSolid[Main.tile[num1456, num1459].type] && !Main.tileSolidTop[Main.tile[num1456, num1459].type])
34587 {
34588 num1458--;
34589 break;
34590 }
34591 }
34592 }
34593 float num1460 = num1458 * 16;
34594 if (num1460 < 350f)
34595 {
34596 float num1461 = num1460 - 350f;
34597 if (num1461 < -4f)
34598 {
34599 num1461 = -4f;
34600 }
34601 velocity.Y = MathHelper.Lerp(velocity.Y, num1461, 0.05f);
34602 }
34603 else if (num1460 > 450f)
34604 {
34605 float num1462 = num1460 - 350f;
34606 if (num1462 > 4f)
34607 {
34608 num1462 = 4f;
34609 }
34610 velocity.Y = MathHelper.Lerp(velocity.Y, num1462, 0.05f);
34611 }
34612 else
34613 {
34614 velocity.Y *= 0.95f;
34615 }
34616 float num1463 = Main.player[target].Center.X - base.Center.X;
34617 if (Math.Abs(num1463) >= 300f && (Math.Abs(velocity.X) < 6f || Math.Sign(velocity.X) != direction))
34618 {
34619 velocity.X += (float)direction * 0.06f;
34620 }
34621 rotation = velocity.X * 0.025f;
34623 for (int num1464 = 0; num1464 < 2; num1464++)
34624 {
34625 if (Main.rand.Next(2) != 0)
34626 {
34627 Vector2 vector282 = new Vector2((Main.rand.NextFloat() - 0.5f) * (float)(width - 70), (Main.rand.NextFloat() - 0.5f) * 20f + (float)(height / 2) + 10f).RotatedBy(rotation);
34628 Dust dust8 = Main.dust[Dust.NewDust(base.Center, 0, 0, 228)];
34629 dust8.position = base.Center + vector282;
34630 dust8.velocity = Vector2.Zero;
34631 dust8.noGravity = true;
34632 dust8.noLight = true;
34633 dust8.fadeIn = 1.5f;
34634 dust8.scale = 0.5f;
34635 }
34636 }
34637 }
34638 else if (aiStyle == 94)
34639 {
34640 if (this.ai[2] == 1f)
34641 {
34642 velocity = Vector2.UnitY * velocity.Length();
34643 if (velocity.Y < 0.25f)
34644 {
34645 velocity.Y += 0.02f;
34646 }
34647 if (velocity.Y > 0.25f)
34648 {
34649 velocity.Y -= 0.02f;
34650 }
34651 dontTakeDamage = true;
34652 this.ai[1]++;
34653 if (this.ai[1] > 120f)
34654 {
34655 Opacity = 1f - (this.ai[1] - 120f) / 60f;
34656 }
34657 int num1465 = 6;
34658 switch (type)
34659 {
34660 case 517:
34661 num1465 = 127;
34662 break;
34663 case 422:
34664 num1465 = 229;
34665 break;
34666 case 507:
34667 num1465 = 242;
34668 break;
34669 case 493:
34670 num1465 = 135;
34671 break;
34672 }
34673 if (Main.rand.Next(5) == 0 && this.ai[1] < 120f)
34674 {
34675 for (int num1466 = 0; num1466 < 3; num1466++)
34676 {
34677 Dust dust9 = Main.dust[Dust.NewDust(base.Left, width, height / 2, num1465)];
34678 dust9.position = base.Center + Vector2.UnitY.RotatedByRandom(4.188790321350098) * new Vector2((float)width * 1.5f, (float)height * 1.1f) * 0.8f * (0.8f + Main.rand.NextFloat() * 0.2f);
34679 dust9.velocity.X = 0f;
34680 dust9.velocity.Y = (0f - Math.Abs(dust9.velocity.Y - (float)num1466 + velocity.Y - 4f)) * 3f;
34681 dust9.noGravity = true;
34682 dust9.fadeIn = 1f;
34683 dust9.scale = 1f + Main.rand.NextFloat() + (float)num1466 * 0.3f;
34684 }
34685 }
34686 if (this.ai[1] < 150f)
34687 {
34688 for (int num1467 = 0; num1467 < 3; num1467++)
34689 {
34690 if (Main.rand.Next(4) == 0)
34691 {
34692 Dust dust10 = Main.dust[Dust.NewDust(base.Top + new Vector2((float)(-width) * (0.33f - 0.11f * (float)num1467), -20f), (int)((float)width * (0.66f - 0.22f * (float)num1467)), 20, num1465)];
34693 dust10.velocity.X = 0f;
34694 dust10.velocity.Y = (0f - Math.Abs(dust10.velocity.Y - (float)num1467 + velocity.Y - 4f)) * (1f + this.ai[1] / 180f * 0.5f);
34695 dust10.noGravity = true;
34696 dust10.fadeIn = 1f;
34697 dust10.scale = 1f + Main.rand.NextFloat() + (float)num1467 * 0.3f;
34698 }
34699 }
34700 }
34701 if (Main.rand.Next(5) == 0 && this.ai[1] < 150f)
34702 {
34703 for (int num1468 = 0; num1468 < 3; num1468++)
34704 {
34705 Vector2 vector283 = base.Center + Vector2.UnitY.RotatedByRandom(4.188790321350098) * new Vector2(width, height) * 0.7f * Main.rand.NextFloat();
34706 float num1469 = 1f + Main.rand.NextFloat() * 2f + this.ai[1] / 180f * 4f;
34707 for (int num1470 = 0; num1470 < 6; num1470++)
34708 {
34709 Dust dust11 = Main.dust[Dust.NewDust(vector283, 4, 4, num1465)];
34710 dust11.position = vector283;
34711 dust11.velocity.X *= num1469;
34712 dust11.velocity.Y = (0f - Math.Abs(dust11.velocity.Y)) * num1469;
34713 dust11.noGravity = true;
34714 dust11.fadeIn = 1f;
34715 dust11.scale = 1.5f + Main.rand.NextFloat() + (float)num1470 * 0.13f;
34716 }
34717 SoundEngine.PlaySound(3, vector283, Utils.SelectRandom<int>(Main.rand, 1, 18));
34718 }
34719 }
34720 if (Main.rand.Next(3) != 0 && this.ai[1] < 150f)
34721 {
34722 Dust dust12 = Main.dust[Dust.NewDust(base.Left, width, height / 2, 241)];
34723 dust12.position = base.Center + Vector2.UnitY.RotatedByRandom(4.188790321350098) * new Vector2(width / 2, height / 2) * (0.8f + Main.rand.NextFloat() * 0.2f);
34724 dust12.velocity.X = 0f;
34725 dust12.velocity.Y = Math.Abs(dust12.velocity.Y) * 0.25f;
34726 }
34727 if (this.ai[1] % 60f == 1f)
34728 {
34729 SoundEngine.PlaySound(4, base.Center, 22);
34730 }
34731 if (this.ai[1] >= 180f)
34732 {
34733 life = 0;
34734 HitEffect(0, 1337.0);
34735 checkDead();
34736 }
34737 return;
34738 }
34739 if (this.ai[3] > 0f)
34740 {
34741 bool flag88 = dontTakeDamage;
34742 switch (type)
34743 {
34744 case 517:
34746 break;
34747 case 422:
34749 break;
34750 case 507:
34752 break;
34753 case 493:
34755 break;
34756 }
34757 if (flag88 != dontTakeDamage)
34758 {
34760 }
34761 else if (this.ai[3] == 1f)
34762 {
34764 }
34765 this.ai[3]++;
34766 if (this.ai[3] > 120f)
34767 {
34768 this.ai[3] = 0f;
34769 }
34770 }
34771 switch (type)
34772 {
34773 case 517:
34775 break;
34776 case 422:
34778 break;
34779 case 507:
34781 break;
34782 case 493:
34784 break;
34785 }
34787 if (Main.player[target].Distance(base.Center) > 2000f)
34788 {
34789 localAI[0]++;
34790 }
34791 if (localAI[0] >= 60f && Main.netMode != 1)
34792 {
34793 localAI[0] = 0f;
34794 netUpdate = true;
34795 life = (int)MathHelper.Clamp(life + 200, 0f, lifeMax);
34796 }
34797 else
34798 {
34799 localAI[0] = 0f;
34800 }
34801 velocity = new Vector2(0f, (float)Math.Sin((float)Math.PI * 2f * this.ai[0] / 300f) * 0.5f);
34802 Point origin = base.Bottom.ToTileCoordinates();
34803 int maxDistance = 10;
34804 int num1471 = 20;
34805 int num1472 = 30;
34806 if (WorldGen.InWorld(origin.X, origin.Y, 20) && Main.tile[origin.X, origin.Y] != null)
34807 {
34809 {
34810 float num1473 = 1f - (float)Math.Abs(origin.Y - result.Y) / 10f;
34811 position.Y -= 1.5f * num1473;
34812 }
34813 else if (!WorldUtils.Find(origin, Searches.Chain(new Searches.Down(num1471), new Terraria.WorldBuilding.Conditions.IsSolid()), out result))
34814 {
34815 float num1474 = 1f;
34817 {
34818 num1474 = Utils.GetLerpValue(num1471, num1472, Math.Abs(origin.Y - result.Y), clamped: true);
34819 }
34820 position.Y += 1.5f * num1474;
34821 }
34822 }
34823 if (!Main.remixWorld && !Main.getGoodWorld && (double)base.Bottom.Y > Main.worldSurface * 16.0 - 100.0)
34824 {
34825 position.Y = (float)Main.worldSurface * 16f - (float)height - 100f;
34826 }
34827 this.ai[0]++;
34828 if (this.ai[0] >= 300f)
34829 {
34830 this.ai[0] = 0f;
34831 netUpdate = true;
34832 }
34833 if (type == 493)
34834 {
34835 if (Main.rand.Next(5) == 0)
34836 {
34837 Dust dust13 = Main.dust[Dust.NewDust(base.Left, width, height / 2, 241)];
34838 dust13.position = base.Center + Vector2.UnitY.RotatedByRandom(2.094395160675049) * new Vector2(width / 2, height / 2) * (0.8f + Main.rand.NextFloat() * 0.2f);
34839 dust13.velocity.X = 0f;
34840 dust13.velocity.Y = Math.Abs(dust13.velocity.Y) * 0.25f;
34841 }
34842 for (int num1475 = 0; num1475 < 3; num1475++)
34843 {
34844 if (Main.rand.Next(5) == 0)
34845 {
34846 Dust dust14 = Main.dust[Dust.NewDust(base.Top + new Vector2((float)(-width) * (0.33f - 0.11f * (float)num1475), -20f), (int)((float)width * (0.66f - 0.22f * (float)num1475)), 20, 135)];
34847 dust14.velocity.X = 0f;
34848 dust14.velocity.Y = (0f - Math.Abs(dust14.velocity.Y - (float)num1475 + velocity.Y - 4f)) * 1f;
34849 dust14.noGravity = true;
34850 dust14.fadeIn = 1f;
34851 dust14.scale = 1f + Main.rand.NextFloat() + (float)num1475 * 0.3f;
34852 }
34853 }
34854 if (this.ai[1] > 0f)
34855 {
34856 this.ai[1]--;
34857 }
34858 if (Main.netMode != 1 && this.ai[1] <= 0f && Main.player[target].active && !Main.player[target].dead && Distance(Main.player[target].Center) < 1080f && Main.player[target].position.Y - position.Y < 400f)
34859 {
34861 }
34862 }
34863 if (type == 507)
34864 {
34865 if (Main.rand.Next(5) == 0)
34866 {
34867 Dust dust15 = Main.dust[Dust.NewDust(base.Left, width, height / 2, 241)];
34868 dust15.position = base.Center + Vector2.UnitY.RotatedByRandom(2.094395160675049) * new Vector2(width / 2, height / 2) * (0.8f + Main.rand.NextFloat() * 0.2f);
34869 dust15.velocity.X = 0f;
34870 dust15.velocity.Y = Math.Abs(dust15.velocity.Y) * 0.25f;
34871 }
34872 for (int num1476 = 0; num1476 < 3; num1476++)
34873 {
34874 if (Main.rand.Next(5) == 0)
34875 {
34876 Dust dust16 = Main.dust[Dust.NewDust(base.Top + new Vector2((float)(-width) * (0.33f - 0.11f * (float)num1476), -20f), (int)((float)width * (0.66f - 0.22f * (float)num1476)), 20, 242)];
34877 dust16.velocity.X = 0f;
34878 dust16.velocity.Y = (0f - Math.Abs(dust16.velocity.Y - (float)num1476 + velocity.Y - 4f)) * 1f;
34879 dust16.noGravity = true;
34880 dust16.fadeIn = 1f;
34881 dust16.color = Color.Black;
34882 dust16.scale = 1f + Main.rand.NextFloat() + (float)num1476 * 0.3f;
34883 }
34884 }
34885 }
34886 if (type == 422)
34887 {
34888 if (Main.rand.Next(5) == 0)
34889 {
34890 Dust dust17 = Main.dust[Dust.NewDust(base.Left, width, height / 2, 241)];
34891 dust17.position = base.Center + Vector2.UnitY.RotatedByRandom(2.094395160675049) * new Vector2(width / 2, height / 2) * (0.8f + Main.rand.NextFloat() * 0.2f);
34892 dust17.velocity.X = 0f;
34893 dust17.velocity.Y = Math.Abs(dust17.velocity.Y) * 0.25f;
34894 }
34895 for (int num1477 = 0; num1477 < 3; num1477++)
34896 {
34897 if (Main.rand.Next(5) == 0)
34898 {
34899 Dust dust18 = Main.dust[Dust.NewDust(base.Top + new Vector2((float)(-width) * (0.33f - 0.11f * (float)num1477), -20f), (int)((float)width * (0.66f - 0.22f * (float)num1477)), 20, 229)];
34900 dust18.velocity.X = 0f;
34901 dust18.velocity.Y = (0f - Math.Abs(dust18.velocity.Y - (float)num1477 + velocity.Y - 4f)) * 1f;
34902 dust18.noGravity = true;
34903 dust18.fadeIn = 1f;
34904 dust18.color = Color.Black;
34905 dust18.scale = 1f + Main.rand.NextFloat() + (float)num1477 * 0.3f;
34906 }
34907 }
34908 if (this.ai[1] > 0f)
34909 {
34910 this.ai[1]--;
34911 }
34912 if (Main.netMode != 1 && this.ai[1] <= 0f && Main.player[target].active && !Main.player[target].dead && Distance(Main.player[target].Center) < 3240f && !Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0))
34913 {
34914 this.ai[1] = 60 + Main.rand.Next(120);
34915 Point point11 = Main.player[target].Top.ToTileCoordinates();
34916 bool flag89 = CountNPCS(428) + CountNPCS(427) + CountNPCS(426) < 14;
34917 for (int num1478 = 0; num1478 < 10; num1478++)
34918 {
34919 if (WorldGen.SolidTile(point11.X, point11.Y))
34920 {
34921 break;
34922 }
34923 if (point11.Y <= 10)
34924 {
34925 break;
34926 }
34927 point11.Y--;
34928 }
34929 if (flag89)
34930 {
34931 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), point11.X * 16 + 8, point11.Y * 16 + 24, 0f, 0f, 579, 0, 0f, Main.myPlayer);
34932 }
34933 else
34934 {
34935 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), point11.X * 16 + 8, point11.Y * 16 + 17, 0f, 0f, 578, 0, 1f, Main.myPlayer);
34936 }
34937 }
34938 if (Main.netMode != 1 && this.ai[1] <= 0f && Main.player[target].active && !Main.player[target].dead && Distance(Main.player[target].Center) < 1080f && Main.player[target].position.Y - position.Y < 400f && CountNPCS(427) + CountNPCS(426) * 3 + CountNPCS(428) < 20)
34939 {
34940 this.ai[1] = 420 + Main.rand.Next(360);
34941 Point point12 = base.Center.ToTileCoordinates();
34942 Point point13 = Main.player[target].Center.ToTileCoordinates();
34943 Vector2 vector284 = Main.player[target].Center - base.Center;
34944 int num1479 = 20;
34945 int num1480 = 3;
34946 int num1481 = 8;
34947 int num1482 = 2;
34948 int num1483 = 0;
34949 bool flag90 = false;
34950 if (vector284.Length() > 2000f)
34951 {
34952 flag90 = true;
34953 }
34954 while (!flag90 && num1483 < 100)
34955 {
34956 num1483++;
34957 int num1484 = Main.rand.Next(point13.X - num1479, point13.X + num1479 + 1);
34958 int num1485 = Main.rand.Next(point13.Y - num1479, point13.Y + num1479 + 1);
34960 {
34961 bool flag91 = true;
34962 if (flag91 && Main.tile[num1484, num1485].lava())
34963 {
34964 flag91 = false;
34965 }
34966 if (flag91 && Collision.SolidTiles(num1484 - num1482, num1484 + num1482, num1485 - num1482, num1485 + num1482))
34967 {
34968 flag91 = false;
34969 }
34970 if (flag91 && !Collision.CanHitLine(base.Center, 0, 0, Main.player[target].Center, 0, 0))
34971 {
34972 flag91 = false;
34973 }
34974 if (flag91)
34975 {
34976 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), num1484 * 16 + 8, num1485 * 16 + 8, 0f, 0f, 579, 0, 0f, Main.myPlayer);
34977 flag90 = true;
34978 break;
34979 }
34980 }
34981 }
34982 }
34983 }
34984 if (type != 517)
34985 {
34986 return;
34987 }
34988 if (Main.rand.Next(5) == 0)
34989 {
34990 Dust dust19 = Main.dust[Dust.NewDust(base.Left, width, height / 2, 241)];
34991 dust19.position = base.Center + Vector2.UnitY.RotatedByRandom(2.094395160675049) * new Vector2(width / 2, height / 2) * (0.8f + Main.rand.NextFloat() * 0.2f);
34992 dust19.velocity.X = 0f;
34993 dust19.velocity.Y = Math.Abs(dust19.velocity.Y) * 0.25f;
34994 }
34995 for (int num1486 = 0; num1486 < 3; num1486++)
34996 {
34997 if (Main.rand.Next(5) == 0)
34998 {
34999 Dust dust20 = Main.dust[Dust.NewDust(base.Top + new Vector2((float)(-width) * (0.33f - 0.11f * (float)num1486), -20f), (int)((float)width * (0.66f - 0.22f * (float)num1486)), 20, 6)];
35000 dust20.velocity.X = 0f;
35001 dust20.velocity.Y = (0f - Math.Abs(dust20.velocity.Y - (float)num1486 + velocity.Y - 4f)) * 1f;
35002 dust20.noGravity = true;
35003 dust20.fadeIn = 1f;
35004 dust20.scale = 1f + Main.rand.NextFloat() + (float)num1486 * 0.3f;
35005 }
35006 }
35007 if (this.ai[1] > 0f)
35008 {
35009 this.ai[1]--;
35010 }
35011 if (Main.netMode != 1 && this.ai[1] <= 0f && Main.player[target].active && !Main.player[target].dead && Distance(Main.player[target].Center) < 1080f && Main.player[target].position.Y - position.Y < 700f)
35012 {
35013 Vector2 vector285 = base.Top + new Vector2((float)(-width) * 0.33f, -20f) + new Vector2((float)width * 0.66f, 20f) * Utils.RandomVector2(Main.rand, 0f, 1f);
35014 Vector2 vector286 = -Vector2.UnitY.RotatedByRandom(0.7853981852531433) * (7f + Main.rand.NextFloat() * 5f);
35016 Main.npc[num1487].velocity = vector286;
35017 Main.npc[num1487].netUpdate = true;
35018 this.ai[1] = 60f;
35019 }
35020 }
35021 else if (aiStyle == 95)
35022 {
35023 float num1488 = 300f;
35024 if (velocity.Length() > 4f)
35025 {
35026 velocity *= 0.95f;
35027 }
35028 velocity *= 0.99f;
35029 this.ai[0]++;
35030 float num1489 = MathHelper.Clamp(this.ai[0] / num1488, 0f, 1f);
35031 scale = 1f + 0.3f * num1489;
35032 if (this.ai[0] >= num1488)
35033 {
35034 if (Main.netMode != 1)
35035 {
35036 Transform(405);
35037 netUpdate = true;
35038 }
35039 return;
35040 }
35041 rotation += velocity.X * 0.1f;
35042 if (!(this.ai[0] > 20f))
35043 {
35044 return;
35045 }
35046 Vector2 center39 = base.Center;
35047 int num1490 = (int)(this.ai[0] / (num1488 / 2f));
35048 for (int num1491 = 0; num1491 < num1490 + 1; num1491++)
35049 {
35050 if (Main.rand.Next(2) != 0)
35051 {
35052 int num1492 = 226;
35053 float num1493 = 0.4f;
35054 if (num1491 % 2 == 1)
35055 {
35056 num1492 = 226;
35057 num1493 = 0.65f;
35058 }
35059 Vector2 vector287 = center39 + ((float)Main.rand.NextDouble() * ((float)Math.PI * 2f)).ToRotationVector2() * (12f - (float)(num1490 * 2));
35060 int num1494 = Dust.NewDust(vector287 - Vector2.One * 12f, 24, 24, num1492, velocity.X / 2f, velocity.Y / 2f);
35061 Dust dust = Main.dust[num1494];
35062 dust.position -= new Vector2(2f);
35063 Main.dust[num1494].velocity = Vector2.Normalize(center39 - vector287) * 1.5f * (10f - (float)num1490 * 2f) / 10f;
35064 Main.dust[num1494].noGravity = true;
35065 Main.dust[num1494].scale = num1493;
35066 Main.dust[num1494].customData = this;
35067 }
35068 }
35069 }
35070 else if (aiStyle == 96)
35071 {
35072 float num1495 = 5f;
35073 float moveSpeed = 0.15f;
35074 TargetClosest();
35075 Vector2 desiredVelocity3 = Main.player[target].Center - base.Center + new Vector2(0f, -250f);
35076 float num1496 = desiredVelocity3.Length();
35077 if (num1496 < 20f)
35078 {
35080 }
35081 else if (num1496 < 40f)
35082 {
35083 desiredVelocity3.Normalize();
35084 desiredVelocity3 *= num1495 * 0.35f;
35085 }
35086 else if (num1496 < 80f)
35087 {
35088 desiredVelocity3.Normalize();
35089 desiredVelocity3 *= num1495 * 0.65f;
35090 }
35091 else
35092 {
35093 desiredVelocity3.Normalize();
35095 }
35097 rotation = velocity.X * 0.1f;
35098 if (!((this.ai[0] += 1f) >= 70f))
35099 {
35100 return;
35101 }
35102 this.ai[0] = 0f;
35103 if (Main.netMode != 1)
35104 {
35106 while (Math.Abs(vector288.X) < 1.5f)
35107 {
35108 vector288 = Vector2.UnitY.RotatedByRandom(1.5707963705062866) * new Vector2(5f, 3f);
35109 }
35110 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector288.X, vector288.Y, 539, 60, 0f, Main.myPlayer, 0f, whoAmI);
35111 }
35112 }
35113 else if (aiStyle == 97)
35114 {
35115 float num1497 = 7f;
35116 int num1498 = 480;
35117 int num1499 = 30;
35118 int maxValue6 = 6;
35119 if (localAI[2] < 180f)
35120 {
35121 localAI[2]++;
35122 if (Main.netMode != 1 && localAI[2] % 60f == 0f)
35123 {
35125 while (Math.Abs(vector289.X) < 1.5f)
35126 {
35127 vector289 = Vector2.UnitY.RotatedByRandom(1.5707963705062866) * new Vector2(4f, 2.5f);
35128 }
35129 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector289.X, vector289.Y, 574, 0, 0f, Main.myPlayer, 0f, whoAmI);
35130 }
35131 }
35132 if (localAI[1] == 1f)
35133 {
35134 localAI[1] = 0f;
35135 if (Main.rand.Next(maxValue6) == 0)
35136 {
35137 this.ai[0] = num1498;
35138 }
35139 }
35140 TargetClosest();
35141 if (Main.netMode != 1 && (!Main.player[target].active || Main.player[target].dead))
35142 {
35143 this.ai[0] = 0f;
35144 this.ai[1] = 1f;
35145 this.ai[2] = 0f;
35146 this.ai[3] = 0f;
35147 netUpdate = true;
35148 }
35149 rotation = Math.Abs(velocity.X) * (float)direction * 0.1f;
35151 Vector2 vector290 = base.Center + new Vector2(direction * 20, 6f);
35152 Vector2 vector291 = Main.player[target].Center - vector290;
35153 bool flag92 = Collision.CanHit(base.Center, 1, 1, Main.player[target].Center, 1, 1);
35154 bool flag93 = false;
35155 if (this.ai[1] == 1f)
35156 {
35157 if (localAI[3] == 0f)
35158 {
35159 localAI[3] = 1f;
35160 this.ai[3] = 3f;
35162 for (int num1500 = 0; num1500 < 20; num1500++)
35163 {
35164 int num1501 = Dust.NewDust(position, width, height, 242);
35165 Dust dust = Main.dust[num1501];
35166 dust.velocity *= 3f;
35167 Main.dust[num1501].noGravity = true;
35168 Main.dust[num1501].scale = 2.5f;
35169 }
35170 }
35171 this.ai[3]--;
35172 if (this.ai[3] <= 0f)
35173 {
35174 active = false;
35175 netUpdate = true;
35176 }
35177 return;
35178 }
35179 if (vector291.Length() > 400f || !flag92)
35180 {
35182 if (vector292.Length() > num1497)
35183 {
35184 vector292.Normalize();
35185 vector292 *= num1497;
35186 }
35187 int num1502 = 30;
35188 velocity = (velocity * (num1502 - 1) + vector292) / num1502;
35189 }
35190 else
35191 {
35192 velocity *= 0.98f;
35193 flag93 = true;
35194 }
35195 if (this.ai[2] != 0f && this.ai[3] != 0f)
35196 {
35198 for (int num1503 = 0; num1503 < 20; num1503++)
35199 {
35200 int num1504 = Dust.NewDust(position, width, height, 242);
35201 Dust dust = Main.dust[num1504];
35202 dust.velocity *= 3f;
35203 Main.dust[num1504].noGravity = true;
35204 Main.dust[num1504].scale = 2.5f;
35205 }
35206 base.Center = new Vector2(this.ai[2] * 16f, this.ai[3] * 16f);
35208 this.ai[2] = 0f;
35209 this.ai[3] = 0f;
35211 for (int num1505 = 0; num1505 < 20; num1505++)
35212 {
35213 int num1506 = Dust.NewDust(position, width, height, 242);
35214 Dust dust = Main.dust[num1506];
35215 dust.velocity *= 3f;
35216 Main.dust[num1506].noGravity = true;
35217 Main.dust[num1506].scale = 2.5f;
35218 }
35219 }
35220 this.ai[0]++;
35221 if (this.ai[0] >= (float)num1498 && Main.netMode != 1)
35222 {
35223 this.ai[0] = 0f;
35224 Point point14 = base.Center.ToTileCoordinates();
35225 Point point15 = Main.player[target].Center.ToTileCoordinates();
35228 {
35229 this.ai[1] = 20f;
35230 this.ai[2] = chosenTile2.X;
35231 this.ai[3] = chosenTile2.Y;
35232 bool flag94 = true;
35233 for (int num1507 = 0; num1507 < 1000; num1507++)
35234 {
35235 Projectile projectile10 = Main.projectile[num1507];
35236 if (projectile10.active && projectile10.type == 574 && projectile10.ai[1] == (float)whoAmI && !(projectile10.ai[0] >= 0f))
35237 {
35238 flag94 = false;
35239 break;
35240 }
35241 }
35242 if (flag94)
35243 {
35244 for (int num1508 = 0; num1508 < 1000; num1508++)
35245 {
35246 Projectile projectile11 = Main.projectile[num1508];
35247 if (projectile11.active && projectile11.type == 574 && projectile11.ai[1] == (float)whoAmI)
35248 {
35249 projectile11.ai[0] -= num1499;
35250 }
35251 }
35252 }
35253 }
35254 netUpdate = true;
35255 }
35256 if (flag93 && velocity.Length() < 2f && Main.netMode != 1)
35257 {
35258 localAI[0] += 1f;
35259 _ = localAI[0];
35260 _ = 13f;
35261 }
35262 }
35263 else if (aiStyle == 98)
35264 {
35265 noTileCollide = false;
35266 if (this.ai[0] == 0f)
35267 {
35268 TargetClosest();
35269 this.ai[0] = 1f;
35270 this.ai[1] = 0f;
35271 this.ai[2] = 0f;
35272 this.ai[3] = 0f;
35273 }
35274 bool flag95 = Collision.CanHit(base.Center, 1, 1, Main.player[target].position, 1, 1);
35275 bool flag96 = true;
35276 if (!flag95 || Main.player[target].dead)
35277 {
35278 flag96 = false;
35279 }
35280 else
35281 {
35282 int num1509 = (int)(Main.player[target].Center.X / 16f);
35283 int num1510 = (int)(Main.player[target].Center.Y / 16f);
35284 for (int num1511 = num1509 - 2; num1511 <= num1509 + 2; num1511++)
35285 {
35286 for (int num1512 = num1510; num1512 <= num1510 + 25; num1512++)
35287 {
35288 if (WorldGen.SolidTile2(num1511, num1512))
35289 {
35290 flag96 = false;
35291 }
35292 }
35293 }
35294 }
35295 if (this.ai[0] < 0f)
35296 {
35297 Vector2 vector293 = Main.player[target].Center - base.Center;
35298 float num1513 = vector293.Length();
35299 if (this.ai[0] == -1f)
35300 {
35301 vector293.Normalize();
35302 if (vector293.HasNaNs())
35303 {
35304 vector293 = new Vector2(direction, 0f);
35305 }
35306 float num1514 = 8f + num1513 / 100f;
35307 float num1515 = 12f;
35308 if (Main.player[target].velocity.Length() > num1515)
35309 {
35310 num1515 = Main.player[target].velocity.Length();
35311 }
35312 if (num1514 > num1515)
35313 {
35314 num1514 = num1515;
35315 }
35316 vector293 *= num1514;
35317 float num1516 = 10f;
35318 velocity = (velocity * (num1516 - 1f) + vector293) / num1516;
35319 for (int num1517 = 0; num1517 < 200; num1517++)
35320 {
35321 if (Main.npc[num1517].active && Main.npc[num1517].type == type && num1517 != whoAmI)
35322 {
35323 Vector2 vector294 = Main.npc[num1517].Center - base.Center;
35324 if (vector294.Length() < 40f)
35325 {
35326 vector294.Normalize();
35327 vector294 *= 1f;
35329 }
35330 }
35331 }
35332 rotation += velocity.X * 0.03f;
35333 if ((double)rotation < -6.2831)
35334 {
35335 rotation += 6.2831f;
35336 }
35337 if ((double)rotation > 6.2831)
35338 {
35339 rotation -= 6.2831f;
35340 }
35341 if (velocity.X > 0f)
35342 {
35343 direction = 1;
35344 }
35345 else if (velocity.X < 0f)
35346 {
35347 direction = -1;
35348 }
35350 }
35351 this.ai[1] += 1f;
35352 if (this.ai[1] >= 60f && !flag96)
35353 {
35354 this.ai[0] = 0f;
35355 }
35356 }
35357 else if (this.ai[0] == 2f)
35358 {
35359 rotation *= 0.92f;
35360 if ((double)Math.Abs(rotation) < 0.02)
35361 {
35362 rotation = 0f;
35363 }
35364 int num1518 = 300;
35365 float num1519 = Math.Abs(base.Center.X - Main.player[target].Center.X);
35366 if (num1519 < (float)num1518 && Collision.CanHit(base.Center, 1, 1, Main.player[target].position, 1, 1))
35367 {
35368 velocity.X *= 0.96f;
35369 velocity.Y *= 0.96f;
35370 this.ai[1] += 1f;
35371 if (this.ai[1] == 20f)
35372 {
35373 if (Main.netMode != 1)
35374 {
35375 int num1520 = NewNPC(GetSpawnSourceForNPCFromNPCAI(), (int)base.Center.X, (int)base.Center.Y + 26, 516, 0, 0f, 0f, 0f, 0f, target);
35376 }
35377 }
35378 else if (this.ai[1] >= 30f)
35379 {
35380 this.ai[1] = 0f;
35381 }
35382 for (int num1521 = 0; num1521 < 200; num1521++)
35383 {
35384 if (Main.npc[num1521].active && Main.npc[num1521].type == type && num1521 != whoAmI)
35385 {
35386 Vector2 vector295 = Main.npc[num1521].Center - base.Center;
35387 if (vector295.Length() < 100f)
35388 {
35389 vector295.Normalize();
35390 vector295 *= 0.1f;
35392 }
35393 }
35394 }
35395 }
35396 else
35397 {
35398 this.ai[0] = 0f;
35399 }
35400 if (Main.player[target].Center.X < base.Center.X)
35401 {
35402 direction = -1;
35403 }
35404 else if (Main.player[target].Center.X > base.Center.X)
35405 {
35406 direction = 1;
35407 }
35409 }
35410 if (this.ai[0] != 1f)
35411 {
35412 return;
35413 }
35414 rotation *= 0.92f;
35415 if ((double)Math.Abs(rotation) < 0.02)
35416 {
35417 rotation = 0f;
35418 }
35419 if (flag96)
35420 {
35421 this.ai[0] = -1f;
35422 this.ai[1] = 0f;
35423 this.ai[2] = 0f;
35424 this.ai[3] = 0f;
35425 }
35426 int num1522 = 300;
35427 for (int num1523 = 0; num1523 < 200; num1523++)
35428 {
35429 if (Main.npc[num1523].active && Main.npc[num1523].type == type && num1523 != whoAmI)
35430 {
35431 Vector2 vector296 = Main.npc[num1523].Center - base.Center;
35432 if (vector296.Length() < 50f)
35433 {
35434 vector296.Normalize();
35435 vector296 *= 0.1f;
35437 velocity.X -= vector296.X * 1f;
35438 }
35439 }
35440 }
35441 int num1524 = 800;
35442 float num1525 = Math.Abs(base.Center.X - Main.player[target].Center.X);
35443 if (num1525 < (float)num1522 && flag95)
35444 {
35445 this.ai[0] = 2f;
35446 this.ai[1] = 0f;
35447 }
35448 else
35449 {
35450 if (collideX)
35451 {
35452 velocity.X *= -0.5f;
35453 this.ai[1] = 60f;
35454 direction *= -1;
35455 }
35456 if (this.ai[1] > 0f)
35457 {
35458 this.ai[1] -= 1f;
35459 }
35460 else if (flag95)
35461 {
35462 if (base.Center.X > Main.player[target].Center.X)
35463 {
35464 direction = -1;
35465 }
35466 else
35467 {
35468 direction = 1;
35469 }
35470 }
35471 else if (num1525 > (float)num1524)
35472 {
35473 if (base.Center.X > Main.player[target].Center.X)
35474 {
35475 direction = -1;
35476 }
35477 else
35478 {
35479 direction = 1;
35480 }
35481 }
35482 float num1526 = 2f;
35483 float num1527 = 0.1f;
35484 if (velocity.X > num1526 || velocity.X < 0f - num1526)
35485 {
35486 if (Math.Abs(velocity.X) < num1526 + num1527 * 2f)
35487 {
35488 if (velocity.X < 0f)
35489 {
35490 velocity.X = 0f - num1526;
35491 }
35492 else
35493 {
35494 velocity.X = num1526;
35495 }
35496 }
35497 else
35498 {
35499 velocity.X *= 0.99f;
35500 }
35501 }
35502 else
35503 {
35504 velocity.X += (float)direction * num1527;
35505 }
35507 }
35508 if (collideY)
35509 {
35510 this.ai[2] = 60f;
35511 directionY *= -1;
35512 velocity.Y *= -0.5f;
35513 }
35514 if (this.ai[2] > 0f)
35515 {
35516 this.ai[2] -= 1f;
35517 }
35518 else
35519 {
35520 int num1528 = (int)(base.Center.Y / 16f);
35521 int num1529 = (int)((base.Center.X - 8f) / 16f);
35522 int num1530 = 30;
35523 int num1531 = 15;
35524 int num1532 = 0;
35525 for (int num1533 = num1528; num1533 < num1528 + num1530; num1533++)
35526 {
35527 for (int num1534 = num1529; num1534 <= num1529 + 1; num1534++)
35528 {
35529 if (WorldGen.SolidTile(num1534, num1533) || Main.tile[num1534, num1533].liquid > 0)
35530 {
35532 break;
35533 }
35534 }
35535 if (num1532 != 0)
35536 {
35537 break;
35538 }
35539 }
35540 if (num1532 == 0)
35541 {
35542 directionY = 1;
35543 }
35544 else if (num1532 < num1531)
35545 {
35546 directionY = -1;
35547 }
35548 }
35549 float num1535 = 2f;
35550 float num1536 = 0.1f;
35551 if (velocity.Y > num1535 || velocity.Y < 0f - num1535)
35552 {
35553 if (Math.Abs(velocity.Y) < num1535 + num1536 * 2f)
35554 {
35555 if (velocity.Y < 0f)
35556 {
35557 velocity.Y = 0f - num1535;
35558 }
35559 else
35560 {
35561 velocity.Y = num1535;
35562 }
35563 }
35564 else
35565 {
35566 velocity.Y *= 0.99f;
35567 }
35568 }
35569 else
35570 {
35571 velocity.Y += (float)directionY * num1536;
35572 }
35573 }
35574 else if (aiStyle == 99)
35575 {
35576 if (velocity.Y == 0f && this.ai[0] == 0f)
35577 {
35578 this.ai[0] = 1f;
35579 this.ai[1] = 0f;
35580 netUpdate = true;
35581 return;
35582 }
35583 if (this.ai[0] == 1f)
35584 {
35587 this.ai[1]++;
35588 if (this.ai[1] >= 5f)
35589 {
35590 HitEffect(0, 9999.0);
35591 active = false;
35592 }
35593 return;
35594 }
35595 velocity.Y += 0.2f;
35596 if (velocity.Y > 12f)
35597 {
35598 velocity.Y = 12f;
35599 }
35600 rotation = velocity.ToRotation() - (float)Math.PI / 2f;
35601 if (type != 519)
35602 {
35603 return;
35604 }
35605 if (localAI[0] == 0f)
35606 {
35607 localAI[0] = 1f;
35608 for (int num1537 = 0; num1537 < 13; num1537++)
35609 {
35610 int num1538 = Dust.NewDust(position, width, height, 6, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 2.5f);
35611 Main.dust[num1538].noGravity = true;
35612 Main.dust[num1538].fadeIn = 1f;
35613 Dust dust = Main.dust[num1538];
35614 dust.velocity *= 4f;
35615 Main.dust[num1538].noLight = true;
35616 }
35617 }
35618 for (int num1539 = 0; num1539 < 3; num1539++)
35619 {
35620 if (Main.rand.Next(3) < 2)
35621 {
35622 int num1540 = Dust.NewDust(position, width, height, 6, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 2.5f);
35623 Main.dust[num1540].noGravity = true;
35624 Dust dust = Main.dust[num1540];
35625 dust.velocity *= 0.2f;
35626 Main.dust[num1540].fadeIn = 1f;
35627 if (Main.rand.Next(6) == 0)
35628 {
35629 dust = Main.dust[num1540];
35630 dust.velocity *= 30f;
35631 Main.dust[num1540].noGravity = false;
35632 Main.dust[num1540].noLight = true;
35633 }
35634 else
35635 {
35636 Main.dust[num1540].velocity = DirectionFrom(Main.dust[num1540].position) * Main.dust[num1540].velocity.Length();
35637 }
35638 }
35639 }
35640 }
35641 else if (aiStyle == 100)
35642 {
35643 if (velocity.Y == 0f && this.ai[0] >= 0f)
35644 {
35645 this.ai[0] = -1f;
35646 this.ai[1] = 0f;
35647 netUpdate = true;
35648 return;
35649 }
35650 if (this.ai[0] == -1f)
35651 {
35654 this.ai[1]++;
35655 if (this.ai[1] >= 5f)
35656 {
35657 HitEffect(0, 9999.0);
35658 active = false;
35659 }
35660 return;
35661 }
35662 rotation = velocity.ToRotation() - (float)Math.PI / 2f;
35663 if (type != 522)
35664 {
35665 return;
35666 }
35667 if (localAI[0] == 0f)
35668 {
35669 localAI[0] = 1f;
35670 velocity.X = this.ai[2];
35671 velocity.Y = this.ai[3];
35672 for (int num1541 = 0; num1541 < 13; num1541++)
35673 {
35674 int num1542 = Dust.NewDust(position, width, height, 261, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 2.5f);
35675 Main.dust[num1542].noGravity = true;
35676 Main.dust[num1542].fadeIn = 1f;
35677 Dust dust = Main.dust[num1542];
35678 dust.velocity *= 4f;
35679 Main.dust[num1542].noLight = true;
35680 }
35681 }
35682 for (int num1543 = 0; num1543 < 2; num1543++)
35683 {
35684 if (Main.rand.Next(10 - (int)Math.Min(7f, velocity.Length())) < 1)
35685 {
35686 int num1544 = Dust.NewDust(position, width, height, 261, velocity.X * 0.5f, velocity.Y * 0.5f, 90, default(Color), 2.5f);
35687 Main.dust[num1544].noGravity = true;
35688 Dust dust = Main.dust[num1544];
35689 dust.velocity *= 0.2f;
35690 Main.dust[num1544].fadeIn = 0.4f;
35691 if (Main.rand.Next(6) == 0)
35692 {
35693 dust = Main.dust[num1544];
35694 dust.velocity *= 5f;
35695 Main.dust[num1544].noLight = true;
35696 }
35697 else
35698 {
35699 Main.dust[num1544].velocity = DirectionFrom(Main.dust[num1544].position) * Main.dust[num1544].velocity.Length();
35700 }
35701 }
35702 }
35703 if (this.ai[0] >= 0f)
35704 {
35705 this.ai[0]++;
35706 if (this.ai[0] > 60f)
35707 {
35708 velocity = velocity.RotatedBy(this.ai[1]);
35709 }
35710 if (this.ai[0] > 120f)
35711 {
35712 velocity *= 0.98f;
35713 }
35714 if (velocity.Length() < 0.2f)
35715 {
35717 }
35718 }
35719 }
35720 else if (aiStyle == 101)
35721 {
35722 float num1545 = 420f;
35723 float num1546 = 120f;
35724 int num1547 = 1;
35725 float value11 = 0f;
35726 float value12 = 1f;
35727 float num1548 = 4f;
35728 bool flag97 = !(this.ai[1] >= 0f) || !Main.npc[(int)this.ai[0]].active;
35729 if (Main.npc[(int)this.ai[0]].type == 439)
35730 {
35731 if (Main.npc[(int)this.ai[0]].life < Main.npc[(int)this.ai[0]].lifeMax / 2)
35732 {
35733 num1547 = 2;
35734 }
35735 if (Main.npc[(int)this.ai[0]].life < Main.npc[(int)this.ai[0]].lifeMax / 4)
35736 {
35737 num1547 = 3;
35738 }
35739 }
35740 else
35741 {
35742 flag97 = true;
35743 }
35744 this.ai[1] += num1547;
35745 float num1549 = this.ai[1] / num1546;
35746 num1549 = MathHelper.Clamp(num1549, 0f, 1f);
35747 position = base.Center;
35749 base.Center = position;
35750 alpha = (int)(255f - num1549 * 255f);
35751 if (Main.rand.Next(6) == 0)
35752 {
35753 Vector2 vector297 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
35754 Dust dust21 = Main.dust[Dust.NewDust(base.Center - vector297 * 20f, 0, 0, 27)];
35755 dust21.noGravity = true;
35756 dust21.position = base.Center - vector297 * Main.rand.Next(10, 21) * scale;
35757 dust21.velocity = vector297.RotatedBy(1.5707963705062866) * 4f;
35758 dust21.scale = 0.5f + Main.rand.NextFloat();
35759 dust21.fadeIn = 0.5f;
35760 }
35761 if (Main.rand.Next(6) == 0)
35762 {
35763 Vector2 vector298 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
35764 Dust dust22 = Main.dust[Dust.NewDust(base.Center - vector298 * 30f, 0, 0, 240)];
35765 dust22.noGravity = true;
35766 dust22.position = base.Center - vector298 * 20f * scale;
35767 dust22.velocity = vector298.RotatedBy(-1.5707963705062866) * 2f;
35768 dust22.scale = 0.5f + Main.rand.NextFloat();
35769 dust22.fadeIn = 0.5f;
35770 }
35771 if (Main.rand.Next(6) == 0)
35772 {
35773 Vector2 vector299 = Vector2.UnitY.RotatedByRandom(6.2831854820251465);
35774 Dust dust23 = Main.dust[Dust.NewDust(base.Center - vector299 * 30f, 0, 0, 240)];
35775 dust23.position = base.Center - vector299 * 20f * scale;
35776 dust23.velocity = Vector2.Zero;
35777 dust23.scale = 0.5f + Main.rand.NextFloat();
35778 dust23.fadeIn = 0.5f;
35779 dust23.noLight = true;
35780 }
35781 localAI[0] += (float)Math.PI / 60f;
35782 localAI[1] = 0.25f + Vector2.UnitY.RotatedBy(this.ai[1] * ((float)Math.PI * 2f) / 60f).Y * 0.25f;
35783 if (this.ai[1] >= num1545)
35784 {
35785 flag97 = true;
35786 if (Main.netMode != 1)
35787 {
35788 for (int num1550 = 0; num1550 < 4; num1550++)
35789 {
35790 Vector2 vector300 = new Vector2(0f, 0f - num1548).RotatedBy((float)Math.PI / 2f * (float)num1550);
35791 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center.X, base.Center.Y, vector300.X, vector300.Y, 593, damage, 0f, Main.myPlayer);
35792 }
35793 }
35794 }
35795 if (flag97)
35796 {
35797 HitEffect(0, 9999.0);
35798 active = false;
35799 }
35800 }
35801 else if (aiStyle == 102)
35802 {
35803 bool flag98 = false;
35804 bool flag99 = false;
35805 bool flag100 = true;
35806 bool flag101 = false;
35807 int num1551 = 4;
35808 int num1552 = 3;
35809 int num1553 = 0;
35810 float num1554 = 0.2f;
35811 float num1555 = 2f;
35812 float num1556 = -0.2f;
35813 float num1557 = -4f;
35814 bool flag102 = true;
35815 float num1558 = 2f;
35816 float num1559 = 0.1f;
35817 float num1560 = 1f;
35818 float num1561 = 0.04f;
35819 bool flag103 = false;
35820 float num1562 = 0.96f;
35821 bool flag104 = true;
35822 if (type == 541)
35823 {
35824 flag102 = false;
35825 rotation = velocity.X * 0.04f;
35826 spriteDirection = ((direction > 0) ? 1 : (-1));
35827 num1553 = 3;
35828 num1556 = -0.1f;
35829 num1554 = 0.1f;
35830 float num1563 = (float)life / (float)lifeMax;
35831 num1558 += (1f - num1563) * 2f;
35832 num1559 += (1f - num1563) * 0.02f;
35833 if (num1563 < 0.5f)
35834 {
35835 knockBackResist = 0f;
35836 }
35838 Vector2 vector301 = base.BottomLeft + new Vector2(0f, -12f);
35839 Vector2 bottomRight = base.BottomRight;
35840 Vector2 vector302 = new Vector2(-spriteDirection * 10, -4f);
35841 Color color = new Color(222, 108, 48) * 0.7f;
35842 float num1564 = -0.3f + MathHelper.Max(velocity.Y * 2f, 0f);
35843 for (int num1565 = 0; num1565 < 2; num1565++)
35844 {
35845 if (Main.rand.Next(2) != 0)
35846 {
35847 Dust dust24 = Main.dust[Dust.NewDust(base.Bottom, 0, 0, 268)];
35848 dust24.position = new Vector2(MathHelper.Lerp(vector301.X, bottomRight.X, Main.rand.NextFloat()), MathHelper.Lerp(vector301.Y, bottomRight.Y, Main.rand.NextFloat())) + vector302;
35849 if (num1565 == 1)
35850 {
35851 dust24.position = base.Bottom + Utils.RandomVector2(Main.rand, -6f, 6f);
35852 }
35853 dust24.color = color;
35854 dust24.scale = 0.8f;
35855 dust24.velocity.Y += num1564;
35856 dust24.velocity.X += (float)spriteDirection * 0.2f;
35857 }
35858 }
35860 localAI[2] = 0f;
35861 if (this.ai[0] < 0f)
35862 {
35863 this.ai[0] = MathHelper.Min(this.ai[0] + 1f, 0f);
35864 }
35865 if (this.ai[0] > 0f)
35866 {
35867 flag104 = false;
35868 flag103 = true;
35869 this.ai[0]++;
35870 if (this.ai[0] >= 135f)
35871 {
35872 this.ai[0] = -300f;
35873 netUpdate = true;
35874 }
35875 Vector2 vector303 = base.Center + Vector2.UnitX * direction * 200f;
35876 Vector2 vector304 = base.Center + Vector2.UnitX * direction * 50f - Vector2.UnitY * 6f;
35877 if (this.ai[0] == 54f && Main.netMode != 1)
35878 {
35880 Vector2 vector305 = Main.player[target].Center + new Vector2(Main.player[target].velocity.X * 30f, 0f);
35881 if (Distance(vector305) < 2000f)
35882 {
35883 Point point16 = vector305.ToTileCoordinates();
35884 for (int num1566 = 0; num1566 < 1000; num1566++)
35885 {
35886 if (list.Count >= 3)
35887 {
35888 break;
35889 }
35890 bool flag105 = false;
35891 int num1567 = Main.rand.Next(point16.X - 30, point16.X + 30 + 1);
35892 foreach (Point item in list)
35893 {
35894 if (Math.Abs(item.X - num1567) < 10)
35895 {
35896 flag105 = true;
35897 break;
35898 }
35899 }
35900 if (!flag105)
35901 {
35902 int startY = point16.Y - 20;
35903 Collision.ExpandVertically(num1567, startY, out var _, out var bottomY, 1, 51);
35904 if (StrayMethods.CanSpawnSandstormHostile(new Vector2(num1567, bottomY - 15) * 16f, 15, 15))
35905 {
35906 list.Add(new Point(num1567, bottomY - 15));
35907 }
35908 }
35909 }
35910 foreach (Point item2 in list)
35911 {
35912 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), item2.X * 16, item2.Y * 16, 0f, 0f, 658, 0, 0f, Main.myPlayer);
35913 }
35914 }
35915 else
35916 {
35917 this.ai[0] = -200f;
35918 netUpdate = true;
35919 }
35920 }
35921 Vector2 vector306 = new Vector2(0.9f, 2f);
35922 if (this.ai[0] < 114f && this.ai[0] > 0f)
35923 {
35925 for (int num1568 = 0; num1568 < 1000; num1568++)
35926 {
35927 Projectile projectile12 = Main.projectile[num1568];
35928 if (projectile12.active && projectile12.type == 658)
35929 {
35930 list2.Add(projectile12.Center);
35931 }
35932 }
35933 Vector2 vector307 = new Vector2(0f, 1500f);
35934 float num1569 = (this.ai[0] - 54f) / 30f;
35936 {
35937 foreach (Vector2 item3 in list2)
35938 {
35941 float num1570 = num1569;
35942 if (num1570 > 0.5f)
35943 {
35944 num1570 = 1f - num1570;
35945 }
35946 float num1571 = 2f;
35947 if (Vector2.Distance(value13, value14) > 5f)
35948 {
35949 num1571 = 3f;
35950 }
35951 if (Vector2.Distance(value13, value14) > 10f)
35952 {
35953 num1571 = 4f;
35954 }
35955 for (float num1572 = 0f; num1572 < num1571; num1572++)
35956 {
35957 Dust dust25 = Main.dust[Dust.NewDust(vector304, 0, 0, 269)];
35958 dust25.position = Vector2.Lerp(value13, value14, num1572 / num1571) + Utils.RandomVector2(Main.rand, -2f, 2f);
35959 dust25.noLight = true;
35960 dust25.scale = 0.3f + num1569;
35961 }
35962 }
35963 }
35964 }
35965 _ = this.ai[0];
35966 _ = 100f;
35967 }
35968 if (this.ai[0] == 0f)
35969 {
35970 this.ai[0] = 1f;
35971 netUpdate = true;
35972 flag103 = true;
35973 }
35974 }
35975 if (justHit)
35976 {
35977 localAI[2] = 0f;
35978 }
35979 if (!flag99)
35980 {
35981 if (localAI[2] >= 0f)
35982 {
35983 float num1573 = 16f;
35984 bool flag106 = false;
35985 bool flag107 = false;
35986 if (position.X > localAI[0] - num1573 && position.X < localAI[0] + num1573)
35987 {
35988 flag106 = true;
35989 }
35990 else if ((velocity.X < 0f && direction > 0) || (velocity.X > 0f && direction < 0))
35991 {
35992 flag106 = true;
35993 num1573 += 24f;
35994 }
35995 if (position.Y > localAI[1] - num1573 && position.Y < localAI[1] + num1573)
35996 {
35997 flag107 = true;
35998 }
35999 if (flag106 && flag107)
36000 {
36001 localAI[2] += 1f;
36002 if (localAI[2] >= 30f && num1573 == 16f)
36003 {
36004 flag98 = true;
36005 }
36006 if (localAI[2] >= 60f)
36007 {
36008 localAI[2] = -180f;
36009 direction *= -1;
36010 velocity.X *= -1f;
36011 collideX = false;
36012 }
36013 }
36014 else
36015 {
36016 localAI[0] = position.X;
36017 localAI[1] = position.Y;
36018 localAI[2] = 0f;
36019 }
36020 if (flag104)
36021 {
36022 TargetClosest();
36023 }
36024 }
36025 else
36026 {
36027 localAI[2] += 1f;
36028 direction = ((Main.player[target].Center.X > base.Center.X) ? 1 : (-1));
36029 }
36030 }
36031 int num1574 = (int)((position.X + (float)(width / 2)) / 16f) + direction * 2;
36032 int num1575 = (int)((position.Y + (float)height) / 16f);
36033 int num1576 = (int)base.Bottom.Y / 16;
36034 int num1577 = (int)base.Bottom.X / 16;
36035 if (flag103)
36036 {
36037 velocity *= num1562;
36038 return;
36039 }
36040 for (int num1578 = num1575; num1578 < num1575 + num1551; num1578++)
36041 {
36042 if (Main.tile[num1574, num1578] == null)
36043 {
36044 Main.tile[num1574, num1578] = new Tile();
36045 }
36046 if ((Main.tile[num1574, num1578].nactive() && Main.tileSolid[Main.tile[num1574, num1578].type]) || Main.tile[num1574, num1578].liquid > 0)
36047 {
36048 if (num1578 <= num1575 + 1)
36049 {
36050 flag101 = true;
36051 }
36052 flag100 = false;
36053 break;
36054 }
36055 }
36056 for (int num1579 = num1576; num1579 < num1576 + num1553; num1579++)
36057 {
36058 if (Main.tile[num1577, num1579] == null)
36059 {
36060 Main.tile[num1577, num1579] = new Tile();
36061 }
36062 if ((Main.tile[num1577, num1579].nactive() && Main.tileSolid[Main.tile[num1577, num1579].type]) || Main.tile[num1577, num1579].liquid > 0)
36063 {
36064 flag101 = true;
36065 flag100 = false;
36066 break;
36067 }
36068 }
36069 if (flag102)
36070 {
36071 for (int num1580 = num1575 - num1552; num1580 < num1575; num1580++)
36072 {
36073 if (Main.tile[num1574, num1580] == null)
36074 {
36075 Main.tile[num1574, num1580] = new Tile();
36076 }
36077 if ((Main.tile[num1574, num1580].nactive() && Main.tileSolid[Main.tile[num1574, num1580].type]) || Main.tile[num1574, num1580].liquid > 0)
36078 {
36079 flag101 = false;
36080 flag98 = true;
36081 break;
36082 }
36083 }
36084 }
36085 if (flag98)
36086 {
36087 flag101 = false;
36088 flag100 = true;
36089 }
36090 if (flag100)
36091 {
36092 velocity.Y += num1554;
36093 if (velocity.Y > num1555)
36094 {
36095 velocity.Y = num1555;
36096 }
36097 }
36098 else
36099 {
36101 {
36102 velocity.Y += num1556;
36103 }
36104 if (velocity.Y < num1557)
36105 {
36106 velocity.Y = num1557;
36107 }
36108 }
36109 if (collideX)
36110 {
36111 velocity.X = oldVelocity.X * -0.4f;
36112 if (direction == -1 && velocity.X > 0f && velocity.X < 1f)
36113 {
36114 velocity.X = 1f;
36115 }
36116 if (direction == 1 && velocity.X < 0f && velocity.X > -1f)
36117 {
36118 velocity.X = -1f;
36119 }
36120 }
36121 if (collideY)
36122 {
36123 velocity.Y = oldVelocity.Y * -0.25f;
36124 if (velocity.Y > 0f && velocity.Y < 1f)
36125 {
36126 velocity.Y = 1f;
36127 }
36128 if (velocity.Y < 0f && velocity.Y > -1f)
36129 {
36130 velocity.Y = -1f;
36131 }
36132 }
36133 if (direction == -1 && velocity.X > 0f - num1558)
36134 {
36135 velocity.X -= num1559;
36136 if (velocity.X > num1558)
36137 {
36138 velocity.X -= num1559;
36139 }
36140 else if (velocity.X > 0f)
36141 {
36142 velocity.X += num1559 / 2f;
36143 }
36144 if (velocity.X < 0f - num1558)
36145 {
36146 velocity.X = 0f - num1558;
36147 }
36148 }
36149 else if (direction == 1 && velocity.X < num1558)
36150 {
36151 velocity.X += num1559;
36152 if (velocity.X < 0f - num1558)
36153 {
36154 velocity.X += num1559;
36155 }
36156 else if (velocity.X < 0f)
36157 {
36158 velocity.X -= num1559 / 2f;
36159 }
36160 if (velocity.X > num1558)
36161 {
36162 velocity.X = num1558;
36163 }
36164 }
36165 if (directionY == -1 && velocity.Y > 0f - num1560)
36166 {
36167 velocity.Y -= num1561;
36168 if (velocity.Y > num1560)
36169 {
36170 velocity.Y -= num1561 * 1.25f;
36171 }
36172 else if (velocity.Y > 0f)
36173 {
36174 velocity.Y += num1561 * 0.75f;
36175 }
36176 if (velocity.Y < 0f - num1560)
36177 {
36178 velocity.Y = 0f - num1558;
36179 }
36180 }
36181 else if (directionY == 1 && velocity.Y < num1560)
36182 {
36183 velocity.Y += num1561;
36184 if (velocity.Y < 0f - num1560)
36185 {
36186 velocity.Y += num1561 * 1.25f;
36187 }
36188 else if (velocity.Y < 0f)
36189 {
36190 velocity.Y -= num1561 * 0.75f;
36191 }
36192 if (velocity.Y > num1560)
36193 {
36194 velocity.Y = num1560;
36195 }
36196 }
36197 }
36198 else if (aiStyle == 103)
36199 {
36200 if (direction == 0)
36201 {
36202 TargetClosest();
36203 }
36204 bool flag108 = true;
36205 Point pt = base.Center.ToTileCoordinates();
36206 Tile tileSafely7 = Framing.GetTileSafely(pt);
36208 flag108 |= wet;
36209 bool flag109 = false;
36211 Vector2 vector308 = targetRect.Center.ToVector2();
36212 if (Main.player[target].velocity.Y > -0.1f && !Main.player[target].dead && Distance(vector308) > 150f)
36213 {
36214 flag109 = true;
36215 }
36216 if (localAI[0] == -1f && !flag108)
36217 {
36218 localAI[0] = 20f;
36219 }
36220 if (localAI[0] > 0f)
36221 {
36222 localAI[0]--;
36223 }
36224 if (flag108)
36225 {
36226 if (soundDelay == 0)
36227 {
36228 float num1581 = Distance(vector308) / 40f;
36229 if (num1581 < 10f)
36230 {
36231 num1581 = 10f;
36232 }
36233 if (num1581 > 20f)
36234 {
36235 num1581 = 20f;
36236 }
36237 soundDelay = (int)num1581;
36238 SoundEngine.PlaySound(15, base.Center, 4);
36239 }
36240 float num1582 = this.ai[1];
36241 bool flag110 = false;
36242 pt = (base.Center + new Vector2(0f, 24f)).ToTileCoordinates();
36243 tileSafely7 = Framing.GetTileSafely(pt.X, pt.Y - 2);
36245 {
36246 flag110 = true;
36247 }
36248 this.ai[1] = flag110.ToInt();
36249 if (this.ai[2] < 30f)
36250 {
36251 this.ai[2]++;
36252 }
36253 if (flag109)
36254 {
36255 TargetClosest();
36256 velocity.X += (float)direction * 0.15f;
36257 velocity.Y += (float)directionY * 0.15f;
36258 if (velocity.X > 5f)
36259 {
36260 velocity.X = 5f;
36261 }
36262 if (velocity.X < -5f)
36263 {
36264 velocity.X = -5f;
36265 }
36266 if (velocity.Y > 3f)
36267 {
36268 velocity.Y = 3f;
36269 }
36270 if (velocity.Y < -3f)
36271 {
36272 velocity.Y = -3f;
36273 }
36274 Vector2 vec4 = base.Center + velocity.SafeNormalize(Vector2.Zero) * base.Size.Length() / 2f + velocity;
36275 pt = vec4.ToTileCoordinates();
36276 tileSafely7 = Framing.GetTileSafely(pt);
36278 if (!flag111 && wet)
36279 {
36280 flag111 = tileSafely7.liquid > 0;
36281 }
36282 int num1583 = 400;
36283 if (Main.remixWorld)
36284 {
36285 num1583 = 700;
36286 }
36287 if (!flag111 && Math.Sign(velocity.X) == direction && Distance(vector308) < (float)num1583 && (this.ai[2] >= 30f || this.ai[2] < 0f))
36288 {
36289 if (localAI[0] == 0f)
36290 {
36291 SoundEngine.PlaySound(14, base.Center, 542);
36292 localAI[0] = -1f;
36293 }
36294 this.ai[2] = -30f;
36295 Vector2 vector309 = DirectionTo(vector308 + new Vector2(0f, -80f));
36296 velocity = vector309 * 12f;
36297 }
36298 }
36299 else
36300 {
36301 if (collideX)
36302 {
36303 velocity.X *= -1f;
36304 direction *= -1;
36305 netUpdate = true;
36306 }
36307 if (collideY)
36308 {
36309 netUpdate = true;
36310 velocity.Y *= -1f;
36312 this.ai[0] = directionY;
36313 }
36314 float num1584 = 6f;
36315 velocity.X += (float)direction * 0.1f;
36316 if (velocity.X < 0f - num1584 || velocity.X > num1584)
36317 {
36318 velocity.X *= 0.95f;
36319 }
36320 if (flag110)
36321 {
36322 this.ai[0] = -1f;
36323 }
36324 else
36325 {
36326 this.ai[0] = 1f;
36327 }
36328 float num1585 = 0.06f;
36329 float num1586 = 0.01f;
36330 if (this.ai[0] == -1f)
36331 {
36332 velocity.Y -= num1586;
36333 if (velocity.Y < 0f - num1585)
36334 {
36335 this.ai[0] = 1f;
36336 }
36337 }
36338 else
36339 {
36340 velocity.Y += num1586;
36341 if (velocity.Y > num1585)
36342 {
36343 this.ai[0] = -1f;
36344 }
36345 }
36346 if (velocity.Y > 0.4f || velocity.Y < -0.4f)
36347 {
36348 velocity.Y *= 0.95f;
36349 }
36350 }
36351 }
36352 else
36353 {
36354 if (velocity.Y == 0f)
36355 {
36356 if (flag109)
36357 {
36358 TargetClosest();
36359 }
36360 float num1587 = 1f;
36361 velocity.X += (float)direction * 0.1f;
36362 if (velocity.X < 0f - num1587 || velocity.X > num1587)
36363 {
36364 velocity.X *= 0.95f;
36365 }
36366 }
36367 velocity.Y += 0.3f;
36368 if (velocity.Y > 10f)
36369 {
36370 velocity.Y = 10f;
36371 }
36372 this.ai[0] = 1f;
36373 }
36374 rotation = velocity.Y * (float)direction * 0.1f;
36375 if (rotation < -0.2f)
36376 {
36377 rotation = -0.2f;
36378 }
36379 if (rotation > 0.2f)
36380 {
36381 rotation = 0.2f;
36382 }
36383 }
36384 else if (aiStyle == 104)
36385 {
36386 active = false;
36387 }
36388 else if (aiStyle == 105)
36389 {
36390 if (alpha == 0)
36391 {
36392 Lighting.AddLight(base.Center, 1.3f, 0.5f, 1.5f);
36393 }
36394 if (this.ai[1] == 0f)
36395 {
36396 if (this.ai[0] > 0f)
36397 {
36398 this.ai[0]--;
36399 }
36400 if (this.ai[0] != 0f)
36401 {
36402 return;
36403 }
36404 this.ai[0] = 180f;
36405 netUpdate = true;
36406 if (localAI[0] == 0f)
36407 {
36408 StrayMethods.CheckArenaScore(base.Bottom, out var xLeftEnd, out var xRightEnd);
36409 localAI[0] = 1f;
36410 xLeftEnd.X += 2;
36411 xRightEnd.X -= 2;
36413 Main.npc[num1588].Bottom = xLeftEnd.ToWorldCoordinates(8f, 16f);
36415 Main.npc[num1588].Bottom = xRightEnd.ToWorldCoordinates(8f, 16f);
36416 if (Main.netMode != 1)
36417 {
36419 }
36420 }
36421 }
36422 else if (this.ai[1] == 2f)
36423 {
36425 life = lifeMax;
36426 if (this.ai[0] == 3f)
36427 {
36429 for (int num1589 = 0; num1589 < 200; num1589++)
36430 {
36431 NPC nPC11 = Main.npc[num1589];
36432 if (nPC11.active && nPC11.type == 549)
36433 {
36434 nPC11.ai[1] = 1f;
36435 nPC11.ai[0] = 0f;
36436 nPC11.netUpdate = true;
36437 }
36438 }
36439 if (Main.netMode != 1)
36440 {
36441 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center - Vector2.UnitY * 40f, Vector2.Zero, 713, 0, 0f, Main.myPlayer);
36442 }
36443 }
36444 this.ai[0]++;
36445 noGravity = true;
36446 if (this.ai[0] <= 120f)
36447 {
36448 float num1590 = this.ai[0] / 120f;
36449 velocity.Y = (float)Math.Cos(num1590 * ((float)Math.PI * 2f)) * 0.25f - 0.25f;
36450 }
36451 else
36452 {
36453 velocity.Y = 0f;
36454 }
36455 float lerpValue = Utils.GetLerpValue(480f, 570f, this.ai[0], clamped: true);
36456 if (lerpValue != 0f)
36457 {
36459 }
36460 if (this.ai[0] >= 600f)
36461 {
36463 dontTakeDamage = false;
36464 life = 0;
36465 checkDead();
36466 netUpdate = true;
36467 }
36468 if (true)
36469 {
36470 Vector2 vector310 = base.Center + new Vector2(0f, -20f);
36471 float num1591 = 0.99f;
36472 if (this.ai[0] >= 60f)
36473 {
36474 num1591 = 0.79f;
36475 }
36476 if (this.ai[0] >= 120f)
36477 {
36478 num1591 = 0.58f;
36479 }
36480 if (this.ai[0] >= 180f)
36481 {
36482 num1591 = 0.43f;
36483 }
36484 if (this.ai[0] >= 240f)
36485 {
36486 num1591 = 0.33f;
36487 }
36488 if (this.ai[0] >= 540f)
36489 {
36490 num1591 = 1f;
36491 }
36492 for (int num1592 = 0; num1592 < 9; num1592++)
36493 {
36494 if (!(Main.rand.NextFloat() < num1591))
36495 {
36496 float num1593 = Main.rand.NextFloat() * ((float)Math.PI * 2f);
36497 float num1594 = Main.rand.NextFloat();
36498 Vector2 vector311 = vector310 + num1593.ToRotationVector2() * (110f + 600f * num1594);
36499 Vector2 vector312 = (num1593 - (float)Math.PI).ToRotationVector2() * (14f + 0f * Main.rand.NextFloat() + 8f * num1594);
36500 Dust dust26 = Dust.NewDustPerfect(vector311, 264, vector312);
36501 dust26.scale = 0.9f;
36502 dust26.fadeIn = 1.15f + num1594 * 0.3f;
36503 dust26.color = new Color(1f, 1f, 1f, num1591) * (1f - num1591);
36504 dust26.noGravity = true;
36505 dust26.noLight = true;
36506 }
36507 }
36508 }
36509 if (this.ai[0] == 100f || this.ai[0] == 160f || this.ai[0] == 220f || this.ai[0] == 280f || this.ai[0] == 340f || this.ai[0] == 370f || this.ai[0] == 400f || this.ai[0] == 430f || this.ai[0] == 460f || this.ai[0] == 500f || this.ai[0] == 520f || this.ai[0] == 540f)
36510 {
36511 float num1595 = Main.rand.NextFloat() * ((float)Math.PI * 2f);
36512 float num1596 = 120f;
36513 for (int num1597 = 0; (float)num1597 < num1596; num1597++)
36514 {
36515 float num1598 = (float)num1597 / num1596 * ((float)Math.PI * 2f);
36516 float num1599 = Main.rand.NextFloat();
36517 Vector2 vector313 = base.Center + new Vector2(0f, -20f) + num1598.ToRotationVector2() * (810f - this.ai[0]);
36518 Vector2 vector314 = (num1598 - (float)Math.PI).ToRotationVector2() * (14f + 5f * (this.ai[0] / 600f) + 8f * num1599);
36519 Dust dust27 = Dust.NewDustPerfect(vector313, 264, vector314);
36520 dust27.scale = 0.9f;
36521 dust27.fadeIn = 1.15f + num1599 * 0.3f;
36522 dust27.color = new Color(1f, 1f, 1f, 0f);
36523 dust27.noGravity = true;
36524 dust27.noLight = true;
36525 }
36526 }
36527 }
36528 else
36529 {
36530 if (this.ai[1] != 1f)
36531 {
36532 return;
36533 }
36535 life = lifeMax;
36536 if (this.ai[0] == 0f)
36537 {
36538 for (int num1600 = 0; num1600 < 200; num1600++)
36539 {
36540 NPC nPC12 = Main.npc[num1600];
36541 if (nPC12.active && nPC12.type == 549)
36542 {
36543 nPC12.ai[1] = 1f;
36544 nPC12.ai[0] = 0f;
36545 nPC12.netUpdate = true;
36546 }
36547 }
36548 if (Main.netMode != 1)
36549 {
36551 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center - Vector2.UnitY * 40f, Vector2.Zero, 672, 0, 0f, Main.myPlayer);
36552 }
36553 }
36554 this.ai[0]++;
36555 float lerpValue2 = Utils.GetLerpValue(480f, 600f, this.ai[0], clamped: true);
36556 if (lerpValue2 != 0f)
36557 {
36559 }
36560 float num1601 = 96f;
36561 if (this.ai[0] < num1601)
36562 {
36563 velocity.Y = MathHelper.Lerp(0f, -1f, this.ai[0] / num1601);
36564 }
36565 if (this.ai[0] >= num1601)
36566 {
36567 alpha += 50;
36568 if (alpha > 255)
36569 {
36570 alpha = 255;
36571 }
36572 }
36573 if (true)
36574 {
36575 Vector2 vector315 = base.Center + new Vector2(0f, MathHelper.Lerp(0f, -70f, Utils.GetLerpValue(0f, 300f, this.ai[0], clamped: true)));
36576 float num1602 = 0.99f;
36577 if (this.ai[0] >= 60f)
36578 {
36579 num1602 = 0.79f;
36580 }
36581 if (this.ai[0] >= 120f)
36582 {
36583 num1602 = 0.58f;
36584 }
36585 if (this.ai[0] >= 180f)
36586 {
36587 num1602 = 0.23f;
36588 }
36589 if (this.ai[0] >= 240f)
36590 {
36591 num1602 = 0.35f;
36592 }
36593 if (this.ai[0] >= 300f)
36594 {
36595 num1602 = 0.6f;
36596 }
36597 if (this.ai[0] >= 360f)
36598 {
36599 num1602 = 0.98f;
36600 }
36601 if (this.ai[0] >= 420f)
36602 {
36603 num1602 = 0.995f;
36604 }
36605 if (this.ai[0] >= 450f)
36606 {
36607 num1602 = 1f;
36608 }
36609 for (int num1603 = 0; num1603 < 12; num1603++)
36610 {
36611 if (!(Main.rand.NextFloat() < num1602))
36612 {
36613 float num1604 = Main.rand.NextFloat() * ((float)Math.PI * 2f);
36614 float num1605 = Main.rand.NextFloat();
36615 Vector2 vector316 = vector315 + num1604.ToRotationVector2() * (70f + 600f * num1605);
36616 Vector2 vector317 = (num1604 - (float)Math.PI / 2f - (float)Math.PI / 8f).ToRotationVector2() * (12f + 9f * Main.rand.NextFloat() + 4f * num1605);
36617 Dust dust28 = Dust.NewDustPerfect(vector316, 240, vector317);
36618 dust28.scale = 0.8f;
36619 dust28.fadeIn = 0.95f + num1605 * 0.3f;
36620 dust28.noGravity = true;
36621 }
36622 }
36623 }
36624 if (this.ai[0] >= 600f)
36625 {
36627 if (!Main.dedServ)
36628 {
36629 Filters.Scene.Deactivate("CrystalDestructionVortex");
36630 Filters.Scene.Deactivate("CrystalDestructionColor");
36631 Filters.Scene.Deactivate("CrystalWin");
36632 }
36633 dontTakeDamage = false;
36634 life = 0;
36635 checkDead();
36636 netUpdate = true;
36637 }
36638 }
36639 }
36640 else if (aiStyle == 106)
36641 {
36642 if (alpha == 0)
36643 {
36644 Lighting.AddLight(base.Center, 0.5f, 0.1f, 0.3f);
36645 }
36646 SlotId val;
36647 if (this.ai[1] == 0f)
36648 {
36649 if (localAI[0] == 0f)
36650 {
36652 float[] array6 = localAI;
36653 val = SlotId.Invalid;
36654 array6[3] = ((SlotId)(ref val)).ToFloat();
36655 }
36656 if (localAI[0] > 150f)
36657 {
36659 if (activeSound == null)
36660 {
36661 float[] array7 = localAI;
36663 array7[3] = ((SlotId)(ref val)).ToFloat();
36664 }
36665 }
36667 {
36668 this.ai[0]++;
36669 }
36670 if (this.ai[0] >= (float)DD2Event.LaneSpawnRate)
36671 {
36672 if (this.ai[0] >= (float)(DD2Event.LaneSpawnRate * 3))
36673 {
36674 this.ai[0] = 0f;
36675 }
36676 netUpdate = true;
36677 if (Main.netMode != 1 && (int)this.ai[0] % DD2Event.LaneSpawnRate == 0)
36678 {
36681 {
36682 this.ai[0] += 1f;
36683 }
36684 }
36685 }
36686 localAI[0]++;
36687 if (localAI[0] > 180f)
36688 {
36689 localAI[0] = 180f;
36690 }
36691 if (Main.netMode != 1 && localAI[0] >= 180f)
36692 {
36693 if (AnyNPCs(548))
36694 {
36695 dontTakeDamage = true;
36696 return;
36697 }
36698 this.ai[1] = 1f;
36699 this.ai[0] = 0f;
36700 dontTakeDamage = true;
36701 }
36702 }
36703 else if (this.ai[1] == 1f)
36704 {
36705 this.ai[0]++;
36706 scale = MathHelper.Lerp(1f, 0.05f, Utils.GetLerpValue(500f, 600f, this.ai[0], clamped: true));
36708 if (activeSound2 == null)
36709 {
36710 float[] array8 = localAI;
36712 array8[3] = ((SlotId)(ref val)).ToFloat();
36713 }
36715 if (activeSound2 != null)
36716 {
36717 activeSound2.Volume = scale;
36718 }
36719 if (this.ai[0] >= 550f)
36720 {
36721 dontTakeDamage = false;
36722 life = 0;
36723 checkDead();
36724 netUpdate = true;
36725 activeSound2?.Stop();
36726 }
36727 }
36728 }
36729 else if (aiStyle == 107)
36730 {
36732 }
36733 else if (aiStyle == 108)
36734 {
36736 }
36737 else if (aiStyle == 109)
36738 {
36740 }
36741 else if (aiStyle == 110)
36742 {
36743 AI_110_Betsy();
36744 }
36745 else if (aiStyle == 111)
36746 {
36748 }
36749 else if (aiStyle == 112)
36750 {
36752 }
36753 else if (aiStyle == 113)
36754 {
36756 }
36757 else if (aiStyle == 114)
36758 {
36760 }
36761 else if (aiStyle == 115)
36762 {
36764 }
36765 else if (aiStyle == 116)
36766 {
36768 }
36769 else if (aiStyle == 117)
36770 {
36772 }
36773 else if (aiStyle == 118)
36774 {
36776 }
36777 else if (aiStyle == 119)
36778 {
36780 }
36781 else if (aiStyle == 120)
36782 {
36784 }
36785 else if (aiStyle == 121)
36786 {
36788 }
36789 else if (aiStyle == 122)
36790 {
36792 }
36793 else if (aiStyle == 123)
36794 {
36796 }
36797 else if (aiStyle == 124)
36798 {
36800 }
36801 else if (aiStyle == 125)
36802 {
36804 }
36805 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
static float Max(float value1, float value2)
Definition MathHelper.cs:41
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
static float Min(float value1, float value2)
Definition MathHelper.cs:36
void Add(TKey key, TValue value)
static double Cos(double d)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Atan2(double y, double x)
static double Sqrt(double d)
static double Abs(double value)
static double Sin(double a)
const double PI
Definition Math.cs:16
static int Sign(decimal value)
Definition Math.cs:1202
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static SlotId PlayTrackedSound(SoundStyle style, Vector2 position)
static void PlaySound(int type, Vector2 position, int style=1)
static ActiveSound GetActiveSound(SlotId id)
static Dictionary< int, TileEntity > ByID
Definition TileEntity.cs:18
Vector2 DirectionFrom(Vector2 Source)
Definition Entity.cs:202
Vector2 oldPosition
Definition Entity.cs:18
Vector2 Center
Definition Entity.cs:43
Vector2 Bottom
Definition Entity.cs:115
Vector2 velocity
Definition Entity.cs:16
float Distance(Vector2 Other)
Definition Entity.cs:187
Vector2 position
Definition Entity.cs:14
Vector2 oldVelocity
Definition Entity.cs:20
Vector2 DirectionTo(Vector2 Destination)
Definition Entity.cs:197
static bool CheckFloor(Vector2 Center, out Point[] spawnPoints)
static void SpawnMonsterFromGate(Vector2 gateBottom)
Definition DD2Event.cs:524
static void StopInvasion(bool win=false)
Definition DD2Event.cs:269
static void RequestLight(float light, Vector2 spot)
static FilterManager Scene
Definition Filters.cs:5
static readonly LegacySoundStyle NPCHit16
Definition SoundID.cs:198
static readonly LegacySoundStyle DD2_EtherianPortalOpen
Definition SoundID.cs:920
static readonly LegacySoundStyle Item39
Definition SoundID.cs:492
static readonly LegacySoundStyle DD2_WinScene
Definition SoundID.cs:928
static readonly LegacySoundStyle Item14
Definition SoundID.cs:442
static readonly LegacySoundStyle NPCHit17
Definition SoundID.cs:200
static readonly LegacySoundStyle Item34
Definition SoundID.cs:482
static readonly LegacySoundStyle Item17
Definition SoundID.cs:448
static readonly LegacySoundStyle Item5
Definition SoundID.cs:424
static readonly LegacySoundStyle Item12
Definition SoundID.cs:438
static readonly LegacySoundStyle NPCHit15
Definition SoundID.cs:196
static readonly LegacySoundStyle NPCDeath3
Definition SoundID.cs:286
static readonly LegacySoundStyle NPCDeath61
Definition SoundID.cs:402
static readonly LegacySoundStyle Item8
Definition SoundID.cs:430
static readonly LegacySoundStyle NPCDeath58
Definition SoundID.cs:396
static readonly LegacySoundStyle NPCHit4
Definition SoundID.cs:174
static readonly LegacySoundStyle DD2_EtherianPortalIdleLoop
Definition SoundID.cs:918
static bool[] Platforms
Definition TileID.cs:163
Vector2 netOffset
Definition NPC.cs:103
void AI_114_Dragonflies()
Definition NPC.cs:40930
void AI_117_BloodNautilus()
Definition NPC.cs:40338
void AI_026_Unicorns()
Definition NPC.cs:54580
int timeLeft
Definition NPC.cs:457
float GetMyBalance()
Definition NPC.cs:12262
void HealEffect(int healAmount, bool broadcast=true)
Definition NPC.cs:69617
int netSpam
Definition NPC.cs:67
void AI_003_Fighters()
Definition NPC.cs:48965
int defense
Definition NPC.cs:463
void AI_110_Betsy()
Definition NPC.cs:54095
int damage
Definition NPC.cs:461
static int CountNPCS(int Type)
Definition NPC.cs:86664
float[] localAI
Definition NPC.cs:449
int spriteDirection
Definition NPC.cs:517
float Opacity
Definition NPC.cs:810
bool confused
Definition NPC.cs:253
void AI_107_ImprovedWalkers()
Definition NPC.cs:55138
void DiscourageDespawn(int despawnTime)
Definition NPC.cs:1399
static int ShieldStrengthTowerNebula
Definition NPC.cs:403
void EncourageDespawn(int despawnTime)
Definition NPC.cs:1390
void AI_045_Golem()
Definition NPC.cs:13310
int aiAction
Definition NPC.cs:451
void AI_001_Slimes()
Definition NPC.cs:53292
static int ShieldStrengthTowerSolar
Definition NPC.cs:399
void AI_108_DivingFlyer()
Definition NPC.cs:57725
bool reflectsProjectiles
Definition NPC.cs:571
int lifeMax
Definition NPC.cs:479
static int crimsonBoss
Definition NPC.cs:165
void AI_109_DarkMage()
Definition NPC.cs:58162
float gfxOffY
Definition NPC.cs:125
void AI_120_HallowBoss()
Definition NPC.cs:39149
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
int aiStyle
Definition NPC.cs:453
static readonly int[,] MoonLordAttacksArray2
Definition NPC.cs:47
static int FindFirstNPC(int Type)
Definition NPC.cs:86701
Rectangle getRect()
Definition NPC.cs:86847
bool hide
Definition NPC.cs:491
void GetShimmered()
Definition NPC.cs:88207
void AI_111_DD2LightningBug()
Definition NPC.cs:58563
void AI_112_FairyCritter()
Definition NPC.cs:41303
void AI_87_BigMimic_FireStuffCannonBurst()
Definition NPC.cs:37940
bool dontTakeDamageFromHostiles
Definition NPC.cs:279
bool noGravity
Definition NPC.cs:503
void TargetClosest_WOF(bool faceTarget=true)
Definition NPC.cs:69950
int defDefense
Definition NPC.cs:467
void PopAllAttachedProjectilesAndTakeDamageForThem()
Definition NPC.cs:12848
float[] ai
Definition NPC.cs:447
Rectangle targetRect
Definition NPC.cs:481
void AI_002_FloatingEye()
Definition NPC.cs:45577
float knockBackResist
Definition NPC.cs:495
bool dontTakeDamage
Definition NPC.cs:527
static int ShieldStrengthTowerStardust
Definition NPC.cs:405
void AI_047_GolemFist()
Definition NPC.cs:13035
bool friendly
Definition NPC.cs:555
void AI_007_TownEntities()
Definition NPC.cs:46226
static int ShieldStrengthTowerVortex
Definition NPC.cs:401
float stepSpeed
Definition NPC.cs:127
float value
Definition NPC.cs:523
static bool IsMechQueenUp
Definition NPC.cs:834
void AI_065_Butterflies()
Definition NPC.cs:38028
float scale
Definition NPC.cs:493
void AI_119_Dandelion()
Definition NPC.cs:40194
bool collideX
Definition NPC.cs:511
bool collideY
Definition NPC.cs:513
static bool AnyNPCs(int Type)
Definition NPC.cs:86689
int type
Definition NPC.cs:445
void AI_069_DukeFishron()
Definition NPC.cs:41994
void AI_124_ElderSlimeChest()
Definition NPC.cs:36807
void AI_121_QueenSlime()
Definition NPC.cs:38340
int GetAttackDamage_LerpBetweenFinalValues(float normalDamage, float expertDamage)
Definition NPC.cs:1072
int alpha
Definition NPC.cs:489
Color color
Definition NPC.cs:487
LegacySoundStyle DeathSound
Definition NPC.cs:475
IEntitySource GetSpawnSourceForProjectileNPC()
Definition NPC.cs:87531
double StrikeNPCNoInteraction(int Damage, float knockBack, int hitDirection, bool crit=false, bool noEffect=false, bool fromNet=false)
Definition NPC.cs:78015
float rotation
Definition NPC.cs:501
void AI_122_PirateGhost()
Definition NPC.cs:37975
bool AI_AttemptToFindTeleportSpot(ref Vector2 chosenTile, int targetTileX, int targetTileY, int rangeFromTargetTile=20, int telefragPreventionDistanceInTiles=5, int solidTileCheckFluff=1, bool solidTileCheckCentered=false, bool teleportInAir=false)
Definition NPC.cs:12861
void AI_000_TransformBoundNPC(int playerID, int npcType)
Definition NPC.cs:38017
double frameCounter
Definition NPC.cs:483
void AI_125_ClumsySlimeBalloon()
Definition NPC.cs:36812
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
void AI_084_LunaticCultist()
Definition NPC.cs:56687
void AI_116_WaterStriders()
Definition NPC.cs:40732
bool noTileCollide
Definition NPC.cs:505
int defDamage
Definition NPC.cs:465
void AI_037_Destroyer()
Definition NPC.cs:42979
int GetAttackDamage_ScaledByStrength(float normalDamage)
Definition NPC.cs:1057
void AI_113_WindyBalloon()
Definition NPC.cs:41103
void checkDead()
Definition NPC.cs:70326
int GetAttackDamage_ForProjectiles(float normalDamage, float expertDamage)
Definition NPC.cs:1082
void HitEffect(int hitDirection=0, double dmg=10.0)
Definition NPC.cs:78386
void AI_118_Seahorses()
Definition NPC.cs:40282
bool justHit
Definition NPC.cs:455
void SpawnStardustMark_StardustTower()
Definition NPC.cs:36945
static bool LunarApocalypseIsUp
Definition NPC.cs:419
void AI_115_LadyBugs()
Definition NPC.cs:40794
static int mechQueen
Definition NPC.cs:581
void ReflectProjectiles(Rectangle myRect)
Definition NPC.cs:58773
static int golemBoss
Definition NPC.cs:161
void Transform(int newType)
Definition NPC.cs:77913
short releaseOwner
Definition NPC.cs:107
static readonly int[,,,] MoonLordAttacksArray
Definition NPC.cs:45
int life
Definition NPC.cs:477
IEntitySource GetSpawnSource_ForProjectile()
Definition NPC.cs:87526
static bool[] npcsFoundForCheckActive
Definition NPC.cs:429
bool NPCCanStickToWalls()
Definition NPC.cs:48929
int soundDelay
Definition NPC.cs:437
int FindClosestPlayer()
Definition NPC.cs:69634
static IEntitySource GetSpawnSourceForNaturalSpawn()
Definition NPC.cs:87536
void AI_005_EaterOfSouls()
Definition NPC.cs:43476
static int brainOfGravity
Definition NPC.cs:583
static int activeTime
Definition NPC.cs:201
void AI_006_Worms()
Definition NPC.cs:44220
int realLife
Definition NPC.cs:173
int directionY
Definition NPC.cs:443
void SimpleFlyMovement(Vector2 desiredVelocity, float moveSpeed)
Definition NPC.cs:69581
static int GetBrainOfCthuluCreepersCount()
Definition NPC.cs:44193
bool netUpdate
Definition NPC.cs:507
int target
Definition NPC.cs:459
static int plantBoss
Definition NPC.cs:163
void AI_123_Deerclops()
Definition NPC.cs:37141
LegacySoundStyle HitSound
Definition NPC.cs:473
static int[,,,] InitializeMoonLordAttacks()
Definition NPC.cs:877
static GenSearch Chain(GenSearch search, params GenCondition[] conditions)
Definition Searches.cs:123
static bool Find(Point origin, GenSearch search, out Point result)
Definition WorldUtils.cs:27
static Color Transparent
Definition Color.cs:76
bool Intersects(Rectangle value)
Definition Rectangle.cs:129
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121
static Vector2 Clamp(Vector2 value1, Vector2 min, Vector2 max)
Definition Vector2.cs:201
static Vector2 CatmullRom(Vector2 value1, Vector2 value2, Vector2 value3, Vector2 value4, float amount)
Definition Vector2.cs:273
static Vector2 SmoothStep(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:255
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227
static readonly SlotId Invalid
Definition SlotId.cs:5
static SlotId FromFloat(float value)
Definition SlotId.cs:80

References System.Math.Abs(), Terraria.Entity.active, Terraria.NPC.activeTime, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), Terraria.GameContent.Events.MoonlordDeathDrama.AddExplosion(), Terraria.Lighting.AddLight(), Terraria.NPC.ai, Terraria.NPC.AI_000_TransformBoundNPC(), Terraria.NPC.AI_001_Slimes(), Terraria.NPC.AI_002_FloatingEye(), Terraria.NPC.AI_003_Fighters(), Terraria.NPC.AI_005_EaterOfSouls(), Terraria.NPC.AI_006_Worms(), Terraria.NPC.AI_007_TownEntities(), Terraria.NPC.AI_026_Unicorns(), Terraria.NPC.AI_037_Destroyer(), Terraria.NPC.AI_045_Golem(), Terraria.NPC.AI_047_GolemFist(), Terraria.NPC.AI_065_Butterflies(), Terraria.NPC.AI_069_DukeFishron(), Terraria.NPC.AI_084_LunaticCultist(), Terraria.NPC.AI_107_ImprovedWalkers(), Terraria.NPC.AI_108_DivingFlyer(), Terraria.NPC.AI_109_DarkMage(), Terraria.NPC.AI_110_Betsy(), Terraria.NPC.AI_111_DD2LightningBug(), Terraria.NPC.AI_112_FairyCritter(), Terraria.NPC.AI_113_WindyBalloon(), Terraria.NPC.AI_114_Dragonflies(), Terraria.NPC.AI_115_LadyBugs(), Terraria.NPC.AI_116_WaterStriders(), Terraria.NPC.AI_117_BloodNautilus(), Terraria.NPC.AI_118_Seahorses(), Terraria.NPC.AI_119_Dandelion(), Terraria.NPC.AI_120_HallowBoss(), Terraria.NPC.AI_121_QueenSlime(), Terraria.NPC.AI_122_PirateGhost(), Terraria.NPC.AI_123_Deerclops(), Terraria.NPC.AI_124_ElderSlimeChest(), Terraria.NPC.AI_125_ClumsySlimeBalloon(), Terraria.NPC.AI_87_BigMimic_FireStuffCannonBurst(), Terraria.NPC.AI_AttemptToFindTeleportSpot(), Terraria.NPC.aiAction, Terraria.NPC.aiStyle, Terraria.NPC.alpha, Terraria.NPC.AnyNPCs(), System.array, System.Math.Atan2(), Microsoft.Xna.Framework.Color.Black, Terraria.NPC.brainOfGravity, Terraria.DataStructures.TileEntity.ByID, Terraria.Collision.CanHit(), Terraria.Collision.CanHitLine(), Terraria.StrayMethods.CanSpawnSandstormHostile(), Microsoft.Xna.Framework.Vector2.CatmullRom(), Microsoft.Xna.Framework.Rectangle.Center, Terraria.Entity.Center, Terraria.Utils.CenteredRectangle(), Terraria.WorldBuilding.Searches.Chain(), Terraria.StrayMethods.CheckArenaScore(), Terraria.NPC.checkDead(), Terraria.GameContent.Events.CultistRitual.CheckFloor(), Microsoft.Xna.Framework.MathHelper.Clamp(), Microsoft.Xna.Framework.Vector2.Clamp(), Terraria.Main.cloudAlpha, Terraria.NPC.collideX, Terraria.NPC.collideY, Microsoft.Xna.Framework.Graphics.Color, Terraria.NPC.color, Terraria.NPC.confused, System.Math.Cos(), Terraria.NPC.CountNPCS(), Terraria.NPC.crimsonBoss, Terraria.NPC.damage, Terraria.Main.dayTime, Terraria.ID.SoundID.DD2_EtherianPortalIdleLoop, Terraria.ID.SoundID.DD2_EtherianPortalOpen, Terraria.ID.SoundID.DD2_WinScene, Terraria.NPC.DeathSound, Terraria.Main.dedServ, Terraria.NPC.defDamage, Terraria.NPC.defDefense, Terraria.NPC.defense, Terraria.Entity.direction, Terraria.Entity.DirectionFrom(), Terraria.Entity.DirectionTo(), Terraria.NPC.directionY, Terraria.NPC.DiscourageDespawn(), Terraria.Entity.Distance(), Microsoft.Xna.Framework.Vector2.Distance(), Terraria.NPC.dontTakeDamage, Terraria.NPC.dontTakeDamageFromHostiles, Microsoft.Xna.Framework.Vector2.Dot(), Terraria.Main.dust, Terraria.Main.eclipse, Terraria.NPC.EncourageDespawn(), Terraria.GameContent.Events.DD2Event.EnemySpawningIsOnHold, Terraria.Collision.ExpandVertically(), Terraria.Main.expertMode, Terraria.GameContent.Tile_Entities.TETrainingDummy.Find(), Terraria.WorldBuilding.WorldUtils.Find(), Terraria.GameContent.Events.DD2Event.FindArenaHitbox(), Terraria.Player.FindClosest(), Terraria.NPC.FindClosestPlayer(), Terraria.NPC.FindFirstNPC(), Terraria.NPC.frameCounter, Terraria.NPC.friendly, ReLogic.Utilities.SlotId.FromFloat(), Terraria.Main.GameModeInfo, Terraria.Audio.SoundEngine.GetActiveSound(), Terraria.NPC.GetAttackDamage_ForProjectiles(), Terraria.NPC.GetAttackDamage_LerpBetweenFinalValues(), Terraria.NPC.GetAttackDamage_ScaledByStrength(), Terraria.NPC.GetBrainOfCthuluCreepersCount(), Terraria.Main.getGoodWorld, Terraria.Utils.GetLerpValue(), Terraria.NPC.GetMyBalance(), Terraria.NPC.getRect(), Terraria.NPC.GetShimmered(), Terraria.NPC.GetSpawnSource_ForProjectile(), Terraria.NPC.GetSpawnSourceForNaturalSpawn(), Terraria.NPC.GetSpawnSourceForNPCFromNPCAI(), Terraria.NPC.GetSpawnSourceForProjectileNPC(), Terraria.Framing.GetTileSafely(), Terraria.Collision.GetWaterLine(), Terraria.NPC.gfxOffY, Terraria.NPC.golemBoss, Terraria.Main.gore, Terraria.ID.TileID.Sets.Conversion.HardenedSand, Terraria.NPC.HealEffect(), Terraria.Entity.height, Terraria.NPC.hide, Terraria.NPC.HitEffect(), Terraria.NPC.HitSound, Terraria.NPC.InitializeMoonLordAttacks(), Microsoft.Xna.Framework.Rectangle.Intersects(), ReLogic.Utilities.SlotId.Invalid, Terraria.WorldGen.InWorld(), Terraria.Main.IsItDay(), Terraria.NPC.IsMechQueenUp, System.item, Terraria.ID.SoundID.Item12, Terraria.ID.SoundID.Item14, Terraria.ID.SoundID.Item17, Terraria.ID.SoundID.Item34, Terraria.ID.SoundID.Item39, Terraria.ID.SoundID.Item5, Terraria.ID.SoundID.Item8, Terraria.NPC.justHit, Terraria.Projectile.Kill(), Terraria.NPC.knockBackResist, Terraria.GameContent.Events.DD2Event.LaneSpawnRate, Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.MathHelper.Lerp(), Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.NPC.life, Terraria.NPC.lifeMax, System.list, Terraria.NPC.localAI, Terraria.NPC.LunarApocalypseIsUp, System.Math.Max(), Microsoft.Xna.Framework.MathHelper.Max(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.NPC.mechQueen, System.Math.Min(), Microsoft.Xna.Framework.MathHelper.Min(), Terraria.NPC.MoonLordAttacksArray, Terraria.NPC.MoonLordAttacksArray2, Terraria.Main.mouseTextColor, Terraria.Main.mouseX, Terraria.Main.mouseY, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.NPC.netOffset, Terraria.NPC.netSpam, Terraria.NPC.netUpdate, Terraria.Dust.NewDust(), Terraria.Dust.NewDustDirect(), Terraria.Dust.NewDustPerfect(), Terraria.Gore.NewGore(), Terraria.NPC.NewNPC(), Terraria.Projectile.NewProjectile(), Terraria.NPC.noGravity, Microsoft.Xna.Framework.Vector2.Normalize(), Terraria.NPC.noTileCollide, Terraria.Main.npc, Terraria.NPC.NPCCanStickToWalls(), Terraria.ID.SoundID.NPCDeath3, Terraria.ID.SoundID.NPCDeath58, Terraria.ID.SoundID.NPCDeath61, Terraria.ID.SoundID.NPCHit15, Terraria.ID.SoundID.NPCHit16, Terraria.ID.SoundID.NPCHit17, Terraria.ID.SoundID.NPCHit4, Terraria.NPC.npcsFoundForCheckActive, Terraria.Entity.oldPosition, Terraria.Entity.oldVelocity, Microsoft.Xna.Framework.Vector2.One, Terraria.NPC.Opacity, System.Math.PI, Terraria.NPC.plantBoss, Terraria.ID.TileID.Sets.Platforms, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Audio.SoundEngine.PlayTrackedSound(), Microsoft.Xna.Framework.Graphics.Point, Terraria.NPC.PopAllAttachedProjectilesAndTakeDamageForThem(), Terraria.Entity.position, Terraria.Main.projectile, Terraria.GameContent.FixExploitManEaters.ProtectSpot(), Terraria.Main.pumpkinMoon, Terraria.Main.rand, Terraria.Utils.RandomVector2(), Terraria.NPC.realLife, Microsoft.Xna.Framework.Color.Red, Terraria.NPC.ReflectProjectiles(), Terraria.NPC.reflectsProjectiles, Terraria.NPC.releaseOwner, Terraria.Main.remixWorld, Terraria.GameContent.Events.DD2Event.ReportLoss(), Terraria.GameContent.Events.MoonlordDeathDrama.RequestLight(), Terraria.NPC.rotation, Terraria.ID.TileID.Sets.Conversion.Sand, Terraria.ID.TileID.Sets.Conversion.Sandstone, Terraria.NPC.scale, Terraria.Graphics.Effects.Filters.Scene, Terraria.NetMessage.SendData(), Terraria.NPC.ShieldStrengthTowerNebula, Terraria.NPC.ShieldStrengthTowerSolar, Terraria.NPC.ShieldStrengthTowerStardust, Terraria.NPC.ShieldStrengthTowerVortex, Terraria.Tile.shimmer(), System.Math.Sign(), Terraria.NPC.SimpleFlyMovement(), System.Math.Sin(), Microsoft.Xna.Framework.Color.SkyBlue, Microsoft.Xna.Framework.Vector2.SmoothStep(), Terraria.Main.snowMoon, Terraria.Collision.SolidCollision(), Terraria.WorldGen.SolidTile(), Terraria.WorldGen.SolidTile2(), Terraria.Collision.SolidTiles(), Terraria.NPC.soundDelay, Terraria.GameContent.Events.DD2Event.SpawnMonsterFromGate(), Terraria.WorldGen.SpawnPlanteraThorns(), Terraria.NPC.SpawnStardustMark_StardustTower(), Terraria.NPC.spriteDirection, System.Math.Sqrt(), Terraria.Main.StartInvasion(), Terraria.NPC.stepSpeed, Terraria.GameContent.Events.DD2Event.StopInvasion(), Terraria.NPC.StrikeNPCNoInteraction(), Terraria.GameContent.Events.CultistRitual.TabletDestroyed(), Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.NPC.TargetClosest_WOF(), Terraria.NPC.targetRect, Terraria.Main.tenthAnniversaryWorld, Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.NPC.timeLeft, Terraria.NPC.Transform(), Microsoft.Xna.Framework.Color.Transparent, Terraria.NPC.type, Terraria.Projectile.type, Terraria.Main.UnderworldLayer, Microsoft.Xna.Framework.Vector2.UnitX, Microsoft.Xna.Framework.Vector2.UnitY, Terraria.NPC.value, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Utils.Vector2FromElipse(), Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Entity.whoAmI, Terraria.Entity.width, Terraria.Main.wofDrawAreaBottom, Terraria.Main.wofDrawAreaTop, Terraria.Main.wofNPCIndex, Terraria.Main.worldSurface, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Vector2.X, System.X, Microsoft.Xna.Framework.Point.Y, Microsoft.Xna.Framework.Vector2.Y, System.Y, and Microsoft.Xna.Framework.Vector2.Zero.