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

◆ AI_120_HallowBoss()

void Terraria.NPC.AI_120_HallowBoss ( )
inlineprivate

Definition at line 39149 of file NPC.cs.

39150 {
39151 Vector2 vector = new Vector2(-150f, -250f);
39152 Vector2 vector2 = new Vector2(150f, -250f);
39153 Vector2 vector3 = new Vector2(0f, -350f);
39154 Vector2 vector4 = new Vector2(0f, -350f);
39155 Vector2 vector5 = new Vector2(-80f, -500f);
39156 float num = 0.5f;
39157 float num2 = 12f;
39158 float num3 = 40f;
39159 float num4 = 6400f;
39160 int num5 = 40;
39161 int num6 = 50;
39162 int num7 = 70;
39163 int num8 = 45;
39164 int num9 = 45;
39165 int num10 = 50;
39166 bool flag = AI_120_HallowBoss_IsInPhase2();
39167 bool flag2 = Main.expertMode;
39168 bool flag3 = flag && flag2;
39171 {
39172 this.ai[3] += 2f;
39173 }
39174 bool flag5 = true;
39175 int num11 = 30;
39176 int num12 = 30;
39177 int num13 = 30;
39178 int num14 = 35;
39179 int num15 = 65;
39180 if (flag)
39181 {
39182 num6 = 60;
39183 num8 = 50;
39184 num9 = 50;
39185 num10 = 60;
39186 num7 = 65;
39187 num11 = 35;
39188 num12 = 35;
39189 num13 = 35;
39190 num14 = 40;
39191 num15 = 30;
39192 }
39198 if (flag4)
39199 {
39200 num6 = 9999;
39201 num8 = 9999;
39202 num9 = 9999;
39203 num10 = 9999;
39204 num7 = 9999;
39205 flag2 = true;
39206 }
39207 float num16 = (flag2 ? 0.3f : 1f);
39208 bool flag6 = true;
39209 int num17 = 0;
39210 if (flag)
39211 {
39212 num17 += 15;
39213 }
39214 if (flag2)
39215 {
39216 num17 += 5;
39217 }
39218 switch ((int)this.ai[0])
39219 {
39220 case 0:
39221 if (this.ai[1] == 0f)
39222 {
39223 velocity = new Vector2(0f, 5f);
39224 if (Main.netMode != 1)
39225 {
39226 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center + new Vector2(0f, -80f), Vector2.Zero, 874, 0, 0f, Main.myPlayer);
39227 }
39228 }
39229 if (this.ai[1] == 10f)
39230 {
39232 }
39233 velocity *= 0.95f;
39234 if (this.ai[1] > 10f && this.ai[1] < 150f)
39235 {
39236 int num67 = 2;
39237 for (int m = 0; m < num67; m++)
39238 {
39239 float num68 = MathHelper.Lerp(1.3f, 0.7f, Opacity) * Utils.GetLerpValue(0f, 120f, this.ai[1], clamped: true);
39240 Color newColor2 = Main.hslToRgb(this.ai[1] / 180f, 1f, 0.5f);
39241 int num69 = Dust.NewDust(position, width, height, 267, 0f, 0f, 0, newColor2);
39242 Main.dust[num69].position = base.Center + Main.rand.NextVector2Circular((float)width * 3f, (float)height * 3f) + new Vector2(0f, -150f);
39243 Main.dust[num69].velocity *= Main.rand.NextFloat() * 0.8f;
39244 Main.dust[num69].noGravity = true;
39245 Main.dust[num69].fadeIn = 0.6f + Main.rand.NextFloat() * 0.7f * num68;
39246 Main.dust[num69].velocity += Vector2.UnitY * 3f;
39247 Main.dust[num69].scale = 0.35f;
39248 if (num69 != 6000)
39249 {
39250 Dust dust2 = Dust.CloneDust(num69);
39251 dust2.scale /= 2f;
39252 dust2.fadeIn *= 0.85f;
39253 dust2.color = new Color(255, 255, 255, 255);
39254 }
39255 }
39256 }
39257 this.ai[1] += 1f;
39258 flag5 = false;
39259 flag6 = false;
39260 Opacity = MathHelper.Clamp(this.ai[1] / 180f, 0f, 1f);
39261 if (this.ai[1] >= 180f)
39262 {
39264 {
39265 this.ai[3] += 2f;
39266 }
39267 this.ai[0] = 1f;
39268 this.ai[1] = 0f;
39269 netUpdate = true;
39270 TargetClosest();
39271 }
39272 break;
39273 case 1:
39274 {
39275 float num34 = (flag ? 20f : 45f);
39276 if (Main.getGoodWorld)
39277 {
39278 num34 /= 2f;
39279 }
39280 if (this.ai[1] <= 10f)
39281 {
39282 if (this.ai[1] == 0f)
39283 {
39284 TargetClosest();
39285 }
39287 if (targetData4.Invalid)
39288 {
39289 this.ai[0] = 13f;
39290 this.ai[1] = 0f;
39291 this.ai[2] += 1f;
39292 velocity /= 4f;
39293 netUpdate = true;
39294 break;
39295 }
39296 Vector2 center = targetData4.Center;
39298 netUpdate = true;
39299 }
39300 if (velocity.Length() > 16f && this.ai[1] > 10f)
39301 {
39302 velocity /= 2f;
39303 }
39304 velocity *= 0.92f;
39305 this.ai[1] += 1f;
39306 if (!(this.ai[1] >= num34))
39307 {
39308 break;
39309 }
39310 int num35 = (int)this.ai[2];
39311 int num36 = 2;
39312 int num37 = 0;
39313 if (!flag)
39314 {
39315 int num38 = num37++;
39316 int num39 = num37++;
39317 int num40 = num37++;
39318 int num41 = num37++;
39319 int num42 = num37++;
39320 int num43 = num37++;
39321 int num44 = num37++;
39322 int num45 = num37++;
39323 int num46 = num37++;
39324 int num47 = num37++;
39325 if (num35 % num37 == num38)
39326 {
39327 num36 = 2;
39328 }
39329 if (num35 % num37 == num39)
39330 {
39331 num36 = 8;
39332 }
39333 if (num35 % num37 == num40)
39334 {
39335 num36 = 6;
39336 }
39337 if (num35 % num37 == num41)
39338 {
39339 num36 = 8;
39340 }
39341 if (num35 % num37 == num42)
39342 {
39343 num36 = 5;
39344 }
39345 if (num35 % num37 == num43)
39346 {
39347 num36 = 2;
39348 }
39349 if (num35 % num37 == num44)
39350 {
39351 num36 = 8;
39352 }
39353 if (num35 % num37 == num45)
39354 {
39355 num36 = 4;
39356 }
39357 if (num35 % num37 == num46)
39358 {
39359 num36 = 8;
39360 }
39361 if (num35 % num37 == num47)
39362 {
39363 num36 = 5;
39364 }
39365 if ((float)life / (float)lifeMax <= 0.5f)
39366 {
39367 num36 = 10;
39368 }
39369 }
39370 if (flag)
39371 {
39372 int num48 = num37++;
39373 int num49 = num37++;
39374 int num50 = num37++;
39375 int num51 = -1;
39376 if (flag2)
39377 {
39378 num51 = num37++;
39379 }
39380 int num52 = num37++;
39381 int num53 = num37++;
39382 int num54 = num37++;
39383 int num55 = num37++;
39384 int num56 = num37++;
39385 int num57 = num37++;
39386 if (num35 % num37 == num48)
39387 {
39388 num36 = 7;
39389 }
39390 if (num35 % num37 == num49)
39391 {
39392 num36 = 2;
39393 }
39394 if (num35 % num37 == num50)
39395 {
39396 num36 = 8;
39397 }
39398 if (num35 % num37 == num52)
39399 {
39400 num36 = 5;
39401 }
39402 if (num35 % num37 == num53)
39403 {
39404 num36 = 2;
39405 }
39406 if (num35 % num37 == num54)
39407 {
39408 num36 = 6;
39409 }
39410 if (num35 % num37 == num54)
39411 {
39412 num36 = 6;
39413 }
39414 if (num35 % num37 == num55)
39415 {
39416 num36 = 4;
39417 }
39418 if (num35 % num37 == num56)
39419 {
39420 num36 = 8;
39421 }
39422 if (num35 % num37 == num51)
39423 {
39424 num36 = 11;
39425 }
39426 if (num35 % num37 == num57)
39427 {
39428 num36 = 12;
39429 }
39430 }
39431 TargetClosest();
39433 bool flag12 = false;
39435 {
39436 if (!Main.dayTime)
39437 {
39438 flag12 = true;
39439 }
39440 if (Main.dayTime && Main.time >= 53400.0)
39441 {
39442 flag12 = true;
39443 }
39444 }
39445 if (targetData5.Invalid || Distance(targetData5.Center) > num4 || flag12)
39446 {
39447 num36 = 13;
39448 }
39449 if (num36 == 8 && targetData5.Center.X > base.Center.X)
39450 {
39451 num36 = 9;
39452 }
39453 if (flag2 && num36 != 5 && num36 != 12)
39454 {
39455 velocity = DirectionFrom(targetData5.Center).SafeNormalize(Vector2.Zero).RotatedBy((float)Math.PI / 2f * (float)(targetData5.Center.X > base.Center.X).ToDirectionInt()) * 20f;
39456 }
39457 this.ai[0] = num36;
39458 this.ai[1] = 0f;
39459 this.ai[2] += 1f;
39460 netUpdate = true;
39461 break;
39462 }
39463 case 2:
39464 {
39465 if (this.ai[1] == 0f)
39466 {
39468 }
39469 float num90 = 90f - (float)num17;
39470 Vector2 vector36 = new Vector2(-55f, -30f);
39472 Vector2 vector37 = (targetData11.Invalid ? base.Center : targetData11.Center);
39473 if (Distance(vector37 + vector) > num3)
39474 {
39475 SimpleFlyMovement(DirectionTo(vector37 + vector).SafeNormalize(Vector2.Zero) * num2, num);
39476 }
39477 if (this.ai[1] < 60f)
39478 {
39479 AI_120_HallowBoss_DoMagicEffect(base.Center + vector36, 1, Utils.GetLerpValue(0f, 60f, this.ai[1], clamped: true));
39480 }
39481 int num91 = 3;
39482 if (flag2)
39483 {
39484 num91 = 2;
39485 }
39486 if ((int)this.ai[1] % num91 == 0 && this.ai[1] < 60f)
39487 {
39488 float ai3 = this.ai[1] / 60f;
39489 Vector2 vector38 = new Vector2(0f, -6f).RotatedBy((float)Math.PI / 2f * Main.rand.NextFloatDirection());
39490 if (flag3)
39491 {
39492 vector38 = new Vector2(0f, -10f).RotatedBy((float)Math.PI * 2f * Main.rand.NextFloat());
39493 }
39494 if (Main.netMode != 1)
39495 {
39496 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center + vector36, vector38, 873, num8, 0f, Main.myPlayer, target, ai3);
39497 }
39498 if (Main.netMode != 1)
39499 {
39500 int num92 = (int)(this.ai[1] / (float)num91);
39501 for (int num93 = 0; num93 < 255; num93++)
39502 {
39503 if (Boss_CanShootExtraAt(num93, num92 % 3, 3, 2400f))
39504 {
39505 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center + vector36, vector38, 873, num8, 0f, Main.myPlayer, num93, ai3);
39506 }
39507 }
39508 }
39509 }
39510 this.ai[1] += 1f;
39511 if (this.ai[1] >= 60f + num90)
39512 {
39513 this.ai[0] = 1f;
39514 this.ai[1] = 0f;
39515 netUpdate = true;
39516 }
39517 break;
39518 }
39519 case 3:
39520 {
39521 this.ai[1] += 1f;
39523 Vector2 vector23 = (targetData8.Invalid ? base.Center : targetData8.Center);
39524 if (Distance(vector23 + vector2) > num3)
39525 {
39526 SimpleFlyMovement(DirectionTo(vector23 + vector2).SafeNormalize(Vector2.Zero) * num2, num);
39527 }
39528 if ((int)this.ai[1] % 180 == 0)
39529 {
39530 Vector2 vector24 = new Vector2(0f, -100f);
39531 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), targetData8.Center + vector24, Vector2.Zero, 874, num5, 0f, Main.myPlayer);
39532 }
39533 if (this.ai[1] >= 120f)
39534 {
39535 this.ai[0] = 1f;
39536 this.ai[1] = 0f;
39537 netUpdate = true;
39538 }
39539 break;
39540 }
39541 case 4:
39542 {
39543 float num81 = 20 - num17;
39544 new Vector2(0f, -100f);
39545 if (this.ai[1] == 0f)
39546 {
39548 }
39549 if (this.ai[1] >= 6f && this.ai[1] < 54f)
39550 {
39551 AI_120_HallowBoss_DoMagicEffect(base.Center + new Vector2(-55f, -20f), 2, Utils.GetLerpValue(0f, 100f, this.ai[1], clamped: true));
39552 AI_120_HallowBoss_DoMagicEffect(base.Center + new Vector2(55f, -20f), 4, Utils.GetLerpValue(0f, 100f, this.ai[1], clamped: true));
39553 }
39555 Vector2 vector29 = (targetData10.Invalid ? base.Center : targetData10.Center);
39556 if (Distance(vector29 + vector3) > num3)
39557 {
39558 SimpleFlyMovement(DirectionTo(vector29 + vector3).SafeNormalize(Vector2.Zero) * num2, num);
39559 }
39560 int num82 = 4;
39561 if (flag2)
39562 {
39563 num82 = 5;
39564 }
39565 if ((int)this.ai[1] % 4 == 0 && this.ai[1] < 100f)
39566 {
39567 int num83 = 1;
39568 int num84 = 0;
39569 for (int n = 0; n < num83; n++)
39570 {
39571 int num85 = (int)this.ai[1] / 4;
39572 Vector2 vector30 = Vector2.UnitX.RotatedBy((float)Math.PI / (float)(num82 * 2) + (float)num85 * ((float)Math.PI / (float)num82) + 0f);
39573 if (!flag2)
39574 {
39575 vector30.X += ((vector30.X > 0f) ? 0.5f : (-0.5f));
39576 }
39577 vector30.Normalize();
39578 float num86 = 300f;
39579 if (flag2)
39580 {
39581 num86 = 450f;
39582 }
39583 Vector2 center4 = targetData10.Center;
39584 if (Distance(center4) > 2400f)
39585 {
39586 continue;
39587 }
39588 if (Vector2.Dot(targetData10.Velocity.SafeNormalize(Vector2.UnitY), vector30) > 0f)
39589 {
39590 vector30 *= -1f;
39591 }
39592 int num87 = 90;
39593 Vector2 vector31 = center4 + targetData10.Velocity * num87;
39594 Vector2 vector32 = center4 + vector30 * num86 - targetData10.Velocity * 30f;
39595 if (vector32.Distance(center4) < num86)
39596 {
39598 if (vector33 == Vector2.Zero)
39599 {
39601 }
39603 }
39605 if (Main.netMode != 1)
39606 {
39607 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector32, Vector2.Zero, 919, num6, 0f, Main.myPlayer, v3.ToRotation(), this.ai[1] / 100f);
39608 }
39609 if (Main.netMode == 1)
39610 {
39611 continue;
39612 }
39613 int num88 = (int)(this.ai[1] / 4f);
39614 for (int num89 = 0; num89 < 255; num89++)
39615 {
39616 if (!Boss_CanShootExtraAt(num89, num88 % 3, 3, 2400f))
39617 {
39618 continue;
39619 }
39620 Player player2 = Main.player[num89];
39621 center4 = player2.Center;
39622 if (Vector2.Dot(player2.velocity.SafeNormalize(Vector2.UnitY), vector30) > 0f)
39623 {
39624 vector30 *= -1f;
39625 }
39626 Vector2 vector34 = center4 + player2.velocity * num87;
39627 vector32 = center4 + vector30 * num86 - player2.velocity * 30f;
39628 if (vector32.Distance(center4) < num86)
39629 {
39631 if (vector35 == Vector2.Zero)
39632 {
39634 }
39636 }
39637 v3 = vector34 - vector32;
39638 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector32, Vector2.Zero, 919, num6, 0f, Main.myPlayer, v3.ToRotation(), this.ai[1] / 100f);
39639 }
39640 }
39641 }
39642 this.ai[1] += 1f;
39643 if (this.ai[1] >= 100f + num81)
39644 {
39645 this.ai[0] = 1f;
39646 this.ai[1] = 0f;
39647 netUpdate = true;
39648 }
39649 break;
39650 }
39651 case 5:
39652 {
39653 if (this.ai[1] == 0f)
39654 {
39656 }
39657 float num63 = 30f;
39658 num63 -= (float)num17;
39659 Vector2 vector19 = new Vector2(55f, -30f);
39660 Vector2 vector20 = base.Center + vector19;
39661 if (this.ai[1] < 42f)
39662 {
39663 AI_120_HallowBoss_DoMagicEffect(base.Center + vector19, 3, Utils.GetLerpValue(0f, 42f, this.ai[1], clamped: true));
39664 }
39666 Vector2 vector21 = (targetData7.Invalid ? base.Center : targetData7.Center);
39667 if (Distance(vector21 + vector4) > num3)
39668 {
39669 SimpleFlyMovement(DirectionTo(vector21 + vector4).SafeNormalize(Vector2.Zero) * num2, num);
39670 }
39671 if ((int)this.ai[1] % 42 == 0 && this.ai[1] < 42f)
39672 {
39673 float num64 = (float)Math.PI * 2f * Main.rand.NextFloat();
39674 for (float num65 = 0f; num65 < 1f; num65 += 1f / 13f)
39675 {
39676 float num66 = num65;
39677 Vector2 vector22 = Vector2.UnitY.RotatedBy((float)Math.PI / 2f + (float)Math.PI * 2f * num66 + num64);
39678 if (Main.netMode != 1)
39679 {
39680 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector20 + vector22.RotatedBy(-1.5707963705062866) * 30f, vector22 * 8f, 872, num9, 0f, Main.myPlayer, 0f, num66);
39681 }
39682 }
39683 }
39684 this.ai[1] += 1f;
39685 if (this.ai[1] >= 42f + num63)
39686 {
39687 this.ai[0] = 1f;
39688 this.ai[1] = 0f;
39689 netUpdate = true;
39690 }
39691 break;
39692 }
39693 case 6:
39694 {
39695 float num25 = 120 - num17;
39696 Vector2 vector8 = new Vector2(0f, -100f);
39697 Vector2 vector9 = base.Center + vector8;
39699 Vector2 vector10 = (targetData2.Invalid ? base.Center : targetData2.Center);
39700 if (Distance(vector10 + vector5) > num3)
39701 {
39702 SimpleFlyMovement(DirectionTo(vector10 + vector5).SafeNormalize(Vector2.Zero) * num2 * 0.3f, num * 0.7f);
39703 }
39704 if ((int)this.ai[1] % 60 == 0 && this.ai[1] < 180f)
39705 {
39706 int num26 = (int)this.ai[1] / 60;
39707 int num27 = ((targetData2.Center.X > base.Center.X) ? 1 : 0);
39708 float num28 = 6f;
39709 if (flag2)
39710 {
39711 num28 = 8f;
39712 }
39713 float num29 = 1f / num28;
39714 for (float num30 = 0f; num30 < 1f; num30 += num29)
39715 {
39716 float num31 = (num30 + num29 * 0.5f + (float)num26 * num29 * 0.5f) % 1f;
39717 float ai = (float)Math.PI * 2f * (num31 + (float)num27);
39718 if (Main.netMode != 1)
39719 {
39720 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector9, Vector2.Zero, 923, num10, 0f, Main.myPlayer, ai, whoAmI);
39721 }
39722 }
39723 }
39724 this.ai[1] += 1f;
39725 if (this.ai[1] >= 180f + num25)
39726 {
39727 this.ai[0] = 1f;
39728 this.ai[1] = 0f;
39729 netUpdate = true;
39730 }
39731 break;
39732 }
39733 case 7:
39734 {
39735 float num70 = 20f;
39736 float num71 = 60f;
39737 float num72 = num71 * 4f;
39738 if (flag2)
39739 {
39740 num70 = 40f;
39741 num71 = 40f;
39742 num72 = num71 * 6f;
39743 }
39744 num70 -= (float)num17;
39746 Vector2 vector25 = (targetData9.Invalid ? base.Center : targetData9.Center);
39747 if (Distance(vector25 + vector4) > num3)
39748 {
39749 SimpleFlyMovement(DirectionTo(vector25 + vector4).SafeNormalize(Vector2.Zero) * num2 * 0.4f, num);
39750 }
39751 if ((float)(int)this.ai[1] % num71 == 0f && this.ai[1] < num72)
39752 {
39754 Main.rand.NextFloat();
39755 int num73 = (int)this.ai[1] / (int)num71;
39756 float num74 = 13f;
39757 float num75 = 150f;
39758 float num76 = num74 * num75;
39759 Vector2 center3 = targetData9.Center;
39760 if (Distance(center3) <= 3200f)
39761 {
39764 float num77 = 0.4f;
39765 float num78 = 1.4f;
39766 float num79 = 1f;
39767 if (flag2)
39768 {
39769 num74 += 5f;
39770 num75 += 50f;
39771 num79 *= 1f;
39772 num76 *= 0.5f;
39773 }
39774 switch (num73)
39775 {
39776 case 0:
39777 center3 += new Vector2((0f - num76) / 2f, 0f) * num79;
39778 vector26 = new Vector2(0f, num76);
39780 break;
39781 case 1:
39782 center3 += new Vector2(num76 / 2f, num75 / 2f) * num79;
39783 vector26 = new Vector2(0f, num76);
39785 break;
39786 case 2:
39787 center3 += new Vector2(0f - num76, 0f - num76) * num77 * num79;
39788 vector26 = new Vector2(num76 * num78, 0f);
39789 vector27 = new Vector2(1f, 1f);
39790 break;
39791 case 3:
39792 center3 += new Vector2(num76 * num77 + num75 / 2f, (0f - num76) * num77) * num79;
39793 vector26 = new Vector2((0f - num76) * num78, 0f);
39794 vector27 = new Vector2(-1f, 1f);
39795 break;
39796 case 4:
39797 center3 += new Vector2(0f - num76, num76) * num77 * num79;
39798 vector26 = new Vector2(num76 * num78, 0f);
39799 vector27 = center3.DirectionTo(targetData9.Center);
39800 break;
39801 case 5:
39802 center3 += new Vector2(num76 * num77 + num75 / 2f, num76 * num77) * num79;
39803 vector26 = new Vector2((0f - num76) * num78, 0f);
39804 vector27 = center3.DirectionTo(targetData9.Center);
39805 break;
39806 }
39807 for (float num80 = 0f; num80 <= 1f; num80 += 1f / num74)
39808 {
39809 Vector2 origin = center3 + vector26 * (num80 - 0.5f);
39811 if (flag2)
39812 {
39813 Vector2 vector28 = targetData9.Velocity * 20f * num80;
39814 Vector2 value2 = origin.DirectionTo(targetData9.Center + vector28);
39815 v2 = Vector2.Lerp(vector27, value2, 0.75f).SafeNormalize(Vector2.UnitY);
39816 }
39817 float ai2 = num80;
39818 if (Main.netMode != 1)
39819 {
39820 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), origin, Vector2.Zero, 919, num7, 0f, Main.myPlayer, v2.ToRotation(), ai2);
39821 }
39822 }
39823 }
39824 }
39825 this.ai[1] += 1f;
39826 if (this.ai[1] >= num72 + num70)
39827 {
39828 this.ai[0] = 1f;
39829 this.ai[1] = 0f;
39830 netUpdate = true;
39831 }
39832 break;
39833 }
39834 case 8:
39835 case 9:
39836 {
39837 float num32 = 20 - num17;
39838 Vector2 vector11 = new Vector2(0f, -100f);
39839 _ = base.Center + vector11;
39840 flag6 = !(this.ai[1] >= 6f) || !(this.ai[1] <= 40f);
39841 int num33 = ((this.ai[0] != 8f) ? 1 : (-1));
39842 AI_120_HallowBoss_DoMagicEffect(base.Center, 5, Utils.GetLerpValue(40f, 90f, this.ai[1], clamped: true));
39843 if (this.ai[1] <= 40f)
39844 {
39845 if (this.ai[1] == 20f)
39846 {
39848 }
39850 Vector2 destination = (targetData3.Invalid ? base.Center : targetData3.Center) + new Vector2(num33 * -550, 0f);
39851 SimpleFlyMovement(DirectionTo(destination).SafeNormalize(Vector2.Zero) * num2, num * 2f);
39852 if (this.ai[1] == 40f)
39853 {
39854 velocity *= 0.3f;
39855 }
39856 }
39857 else if (this.ai[1] <= 90f)
39858 {
39859 velocity = Vector2.Lerp(value2: new Vector2(num33 * 50, 0f), value1: velocity, amount: 0.05f);
39860 if (this.ai[1] == 90f)
39861 {
39862 velocity *= 0.7f;
39863 }
39864 num16 *= 1.5f;
39865 }
39866 else
39867 {
39868 velocity *= 0.92f;
39869 }
39870 this.ai[1] += 1f;
39871 if (this.ai[1] >= 90f + num32)
39872 {
39873 this.ai[0] = 1f;
39874 this.ai[1] = 0f;
39875 netUpdate = true;
39876 }
39877 break;
39878 }
39879 case 10:
39880 {
39881 float num94 = 20 - num17;
39882 if (this.ai[1] == 0f)
39883 {
39885 }
39886 flag6 = !(this.ai[1] >= 30f) || !(this.ai[1] <= 170f);
39887 velocity *= 0.95f;
39888 if (this.ai[1] == 90f)
39889 {
39890 if (this.ai[3] == 0f)
39891 {
39892 this.ai[3] = 1f;
39893 }
39894 if (this.ai[3] == 2f)
39895 {
39896 this.ai[3] = 3f;
39897 }
39898 base.Center = GetTargetData().Center + new Vector2(0f, -250f);
39899 netUpdate = true;
39900 }
39901 this.ai[1] += 1f;
39902 if (this.ai[1] >= 180f + num94)
39903 {
39904 this.ai[0] = 1f;
39905 this.ai[1] = 0f;
39906 this.ai[2] = 0f;
39907 netUpdate = true;
39908 }
39909 break;
39910 }
39911 case 11:
39912 {
39913 if (this.ai[1] == 0f)
39914 {
39916 }
39917 float num58 = 20 - num17;
39918 new Vector2(0f, -100f);
39919 if (this.ai[1] >= 6f && this.ai[1] < 54f)
39920 {
39921 AI_120_HallowBoss_DoMagicEffect(base.Center + new Vector2(-55f, -20f), 2, Utils.GetLerpValue(0f, 100f, this.ai[1], clamped: true));
39922 AI_120_HallowBoss_DoMagicEffect(base.Center + new Vector2(55f, -20f), 4, Utils.GetLerpValue(0f, 100f, this.ai[1], clamped: true));
39923 }
39925 Vector2 vector12 = (targetData6.Invalid ? base.Center : targetData6.Center);
39926 if (Distance(vector12 + vector3) > num3)
39927 {
39928 SimpleFlyMovement(DirectionTo(vector12 + vector3).SafeNormalize(Vector2.Zero) * num2, num);
39929 }
39930 if ((int)this.ai[1] % 3 == 0 && this.ai[1] < 100f)
39931 {
39932 int num59 = 1;
39933 for (int k = 0; k < num59; k++)
39934 {
39935 Vector2 vector13 = -targetData6.Velocity;
39936 vector13.SafeNormalize(-Vector2.UnitY);
39937 float num60 = 100f;
39938 Vector2 center2 = targetData6.Center;
39939 if (Distance(center2) > 2400f)
39940 {
39941 continue;
39942 }
39943 int num61 = 90;
39944 Vector2 vector14 = center2 + targetData6.Velocity * num61;
39946 if (vector15.Distance(center2) < num60)
39947 {
39949 if (vector16 == Vector2.Zero)
39950 {
39952 }
39954 }
39956 if (Main.netMode != 1)
39957 {
39958 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector15, Vector2.Zero, 919, num6, 0f, Main.myPlayer, v.ToRotation(), this.ai[1] / 100f);
39959 }
39960 if (Main.netMode == 1)
39961 {
39962 continue;
39963 }
39964 int num62 = (int)(this.ai[1] / 3f);
39965 for (int l = 0; l < 255; l++)
39966 {
39967 if (!Boss_CanShootExtraAt(l, num62 % 3, 3, 2400f))
39968 {
39969 continue;
39970 }
39971 Player player = Main.player[l];
39972 vector13 = -player.velocity;
39973 vector13.SafeNormalize(-Vector2.UnitY);
39974 num60 = 100f;
39975 center2 = player.Center;
39976 num61 = 90;
39977 Vector2 vector17 = center2 + player.velocity * num61;
39979 if (vector15.Distance(center2) < num60)
39980 {
39982 if (vector18 == Vector2.Zero)
39983 {
39985 }
39987 }
39988 v = vector17 - vector15;
39989 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), vector15, Vector2.Zero, 919, num6, 0f, Main.myPlayer, v.ToRotation(), this.ai[1] / 100f);
39990 }
39991 }
39992 }
39993 this.ai[1] += 1f;
39994 if (this.ai[1] >= 100f + num58)
39995 {
39996 this.ai[0] = 1f;
39997 this.ai[1] = 0f;
39998 netUpdate = true;
39999 }
40000 break;
40001 }
40002 case 12:
40003 {
40004 float num21 = 90f - (float)num17;
40005 Vector2 vector6 = new Vector2(-55f, -30f);
40006 if (this.ai[1] == 0f)
40007 {
40009 velocity = new Vector2(0f, -12f);
40010 }
40011 velocity *= 0.95f;
40012 bool flag11 = this.ai[1] < 60f && this.ai[1] >= 10f;
40013 if (flag11)
40014 {
40015 AI_120_HallowBoss_DoMagicEffect(base.Center + vector6, 1, Utils.GetLerpValue(0f, 60f, this.ai[1], clamped: true));
40016 }
40017 int num22 = 6;
40018 if (flag2)
40019 {
40020 num22 = 4;
40021 }
40022 float num23 = (this.ai[1] - 10f) / 50f;
40023 if ((int)this.ai[1] % num22 == 0 && flag11)
40024 {
40025 _ = this.ai[1] / 60f;
40026 Vector2 vector7 = (vector7 = new Vector2(0f, -20f).RotatedBy((float)Math.PI * 2f * num23));
40027 if (Main.netMode != 1)
40028 {
40029 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center + vector6, vector7, 873, num8, 0f, Main.myPlayer, target, num23);
40030 }
40031 if (Main.netMode != 1)
40032 {
40033 int num24 = (int)(this.ai[1] % (float)num22);
40034 for (int j = 0; j < 255; j++)
40035 {
40036 if (Boss_CanShootExtraAt(j, num24 % 3, 3, 2400f))
40037 {
40038 Projectile.NewProjectile(GetSpawnSource_ForProjectile(), base.Center + vector6, vector7, 873, num8, 0f, Main.myPlayer, j, num23);
40039 }
40040 }
40041 }
40042 }
40043 this.ai[1] += 1f;
40044 if (this.ai[1] >= 60f + num21)
40045 {
40046 this.ai[0] = 1f;
40047 this.ai[1] = 0f;
40048 netUpdate = true;
40049 }
40050 break;
40051 }
40052 case 13:
40053 {
40054 new Vector2(-55f, -30f);
40055 if (this.ai[1] == 0f)
40056 {
40058 velocity = new Vector2(0f, -7f);
40059 }
40060 velocity *= 0.95f;
40061 TargetClosest();
40063 flag5 = false;
40064 bool flag7 = false;
40065 bool flag8 = false;
40066 if (!flag7)
40067 {
40069 {
40070 if (!Main.dayTime)
40071 {
40072 flag8 = true;
40073 }
40074 if (Main.dayTime && Main.time >= 53400.0)
40075 {
40076 flag8 = true;
40077 }
40078 }
40079 flag7 = flag7 || flag8;
40080 }
40081 if (!flag7)
40082 {
40083 bool flag9 = targetData.Invalid || Distance(targetData.Center) > num4;
40084 flag7 = flag7 || flag9;
40085 }
40086 alpha = Utils.Clamp(alpha + flag7.ToDirectionInt() * 5, 0, 255);
40087 bool flag10 = alpha == 0 || alpha == 255;
40088 int num18 = 5;
40089 for (int i = 0; i < num18; i++)
40090 {
40091 float num19 = MathHelper.Lerp(1.3f, 0.7f, Opacity);
40092 Color newColor = Main.hslToRgb(Main.rand.NextFloat(), 1f, 0.5f);
40093 int num20 = Dust.NewDust(position - base.Size * 0.5f, width * 2, height * 2, 267, 0f, 0f, 0, newColor);
40094 Main.dust[num20].position = base.Center + Main.rand.NextVector2Circular(width, height);
40095 Main.dust[num20].velocity *= Main.rand.NextFloat() * 0.8f;
40096 Main.dust[num20].noGravity = true;
40097 Main.dust[num20].scale = 0.9f + Main.rand.NextFloat() * 1.2f;
40098 Main.dust[num20].fadeIn = 0.4f + Main.rand.NextFloat() * 1.2f * num19;
40099 Main.dust[num20].velocity += Vector2.UnitY * -2f;
40100 Main.dust[num20].scale = 0.35f;
40101 if (num20 != 6000)
40102 {
40103 Dust dust = Dust.CloneDust(num20);
40104 dust.scale /= 2f;
40105 dust.fadeIn *= 0.85f;
40106 dust.color = new Color(255, 255, 255, 255);
40107 }
40108 }
40109 this.ai[1] += 1f;
40110 if (!(this.ai[1] >= 20f && flag10))
40111 {
40112 break;
40113 }
40114 if (alpha == 255)
40115 {
40116 active = false;
40117 if (Main.netMode != 1)
40118 {
40119 NetMessage.SendData(23, -1, -1, null, whoAmI);
40120 }
40121 return;
40122 }
40123 this.ai[0] = 1f;
40124 this.ai[1] = 0f;
40125 netUpdate = true;
40126 break;
40127 }
40128 }
40131 if (flag4)
40132 {
40133 damage = 9999;
40134 }
40135 if (flag)
40136 {
40137 defense = (int)((float)defDefense * 1.2f);
40138 }
40139 else
40140 {
40142 }
40143 if ((localAI[0] += 1f) >= 44f)
40144 {
40145 localAI[0] = 0f;
40146 }
40147 if (flag5)
40148 {
40149 alpha = Utils.Clamp(alpha - 5, 0, 255);
40150 }
40151 Lighting.AddLight(base.Center, Vector3.One * Opacity);
40152 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
const double PI
Definition Math.cs:16
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 DirectionFrom(Vector2 Source)
Definition Entity.cs:202
Vector2 velocity
Definition Entity.cs:16
float Distance(Vector2 Other)
Definition Entity.cs:187
Vector2 position
Definition Entity.cs:14
Vector2 DirectionTo(Vector2 Destination)
Definition Entity.cs:197
static readonly LegacySoundStyle Item163
Definition SoundID.cs:740
static readonly LegacySoundStyle Item161
Definition SoundID.cs:736
static readonly LegacySoundStyle Item165
Definition SoundID.cs:744
static readonly LegacySoundStyle Item164
Definition SoundID.cs:742
static readonly LegacySoundStyle Item160
Definition SoundID.cs:734
static readonly LegacySoundStyle Item162
Definition SoundID.cs:738
int defense
Definition NPC.cs:463
int damage
Definition NPC.cs:461
float[] localAI
Definition NPC.cs:449
float Opacity
Definition NPC.cs:810
void AI_120_HallowBoss_DashTo(Vector2 targetPosition)
Definition NPC.cs:40154
bool Boss_CanShootExtraAt(int playerIndex, int rotationIndexToAttack, int rotationSize, float attackScanDistance, bool alwaysSkipMainTarget=true)
Definition NPC.cs:40172
int lifeMax
Definition NPC.cs:479
void TargetClosest(bool faceTarget=true)
Definition NPC.cs:69934
bool AI_120_HallowBoss_IsGenuinelyEnraged()
Definition NPC.cs:39019
static bool ShouldEmpressBeEnraged()
Definition NPC.cs:39121
NPCAimedTarget GetTargetData(bool ignorePlayerTankPets=true)
Definition NPC.cs:864
int defDefense
Definition NPC.cs:467
float[] ai
Definition NPC.cs:447
bool dontTakeDamage
Definition NPC.cs:527
int alpha
Definition NPC.cs:489
void AI_120_HallowBoss_DoMagicEffect(Vector2 spot, int effectType, float progress)
Definition NPC.cs:39028
int defDamage
Definition NPC.cs:465
int GetAttackDamage_ScaledByStrength(float normalDamage)
Definition NPC.cs:1057
int GetAttackDamage_ForProjectiles(float normalDamage, float expertDamage)
Definition NPC.cs:1082
bool AI_120_HallowBoss_IsInPhase2()
Definition NPC.cs:39010
int life
Definition NPC.cs:477
IEntitySource GetSpawnSource_ForProjectile()
Definition NPC.cs:87526
void SimpleFlyMovement(Vector2 desiredVelocity, float moveSpeed)
Definition NPC.cs:69581
bool netUpdate
Definition NPC.cs:507
int target
Definition NPC.cs:459
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References Terraria.Entity.active, Terraria.Lighting.AddLight(), Terraria.NPC.ai, Terraria.NPC.AI_120_HallowBoss_DashTo(), Terraria.NPC.AI_120_HallowBoss_DoMagicEffect(), Terraria.NPC.AI_120_HallowBoss_IsGenuinelyEnraged(), Terraria.NPC.AI_120_HallowBoss_IsInPhase2(), Terraria.NPC.alpha, Terraria.NPC.Boss_CanShootExtraAt(), Terraria.DataStructures.NPCAimedTarget.Center, Terraria.Entity.Center, Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.Dust.CloneDust(), Microsoft.Xna.Framework.Graphics.Color, Terraria.NPC.damage, Terraria.Main.dayTime, Terraria.NPC.defDamage, Terraria.NPC.defDefense, Terraria.NPC.defense, System.destination, Terraria.Entity.DirectionFrom(), Terraria.Entity.DirectionTo(), Terraria.Entity.Distance(), Terraria.NPC.dontTakeDamage, Microsoft.Xna.Framework.Vector2.Dot(), Terraria.Main.dust, Terraria.Main.expertMode, Terraria.NPC.GetAttackDamage_ForProjectiles(), Terraria.NPC.GetAttackDamage_ScaledByStrength(), Terraria.Main.getGoodWorld, Terraria.Utils.GetLerpValue(), Terraria.NPC.GetSpawnSource_ForProjectile(), Terraria.NPC.GetTargetData(), Terraria.Entity.height, Terraria.Main.hslToRgb(), Terraria.ID.SoundID.Item160, Terraria.ID.SoundID.Item161, Terraria.ID.SoundID.Item162, Terraria.ID.SoundID.Item163, Terraria.ID.SoundID.Item164, Terraria.ID.SoundID.Item165, Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.MathHelper.Lerp(), Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.NPC.life, Terraria.NPC.lifeMax, Terraria.NPC.localAI, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.NPC.netUpdate, Terraria.Dust.NewDust(), Terraria.Projectile.NewProjectile(), Microsoft.Xna.Framework.Vector2.Normalize(), Microsoft.Xna.Framework.Vector3.One, Terraria.NPC.Opacity, System.Math.PI, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Entity.position, Terraria.Main.rand, Terraria.NetMessage.SendData(), Terraria.NPC.ShouldEmpressBeEnraged(), Terraria.NPC.SimpleFlyMovement(), Terraria.NPC.target, Terraria.NPC.TargetClosest(), Terraria.Main.time, Microsoft.Xna.Framework.Vector2.UnitX, Microsoft.Xna.Framework.Vector2.UnitY, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.velocity, Terraria.Entity.whoAmI, Terraria.Entity.width, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.NPC.AI().