// Decompiled with JetBrains decompiler // Type: Terraria.NPC // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Utilities; using System; using System.Collections.Generic; using Terraria.Audio; using Terraria.Chat; using Terraria.DataStructures; using Terraria.Enums; using Terraria.GameContent; using Terraria.GameContent.Achievements; using Terraria.GameContent.Creative; using Terraria.GameContent.Drawing; using Terraria.GameContent.Events; using Terraria.GameContent.ItemDropRules; using Terraria.GameContent.RGB; using Terraria.GameContent.UI; using Terraria.ID; using Terraria.Localization; using Terraria.Utilities; using Terraria.WorldBuilding; namespace Terraria { public class NPC : Entity { private const int NPC_TARGETS_START = 300; public bool IsABestiaryIconDummy; public bool ForcePartyHatOn; private float waterMovementSpeed = 0.5f; private float lavaMovementSpeed = 0.5f; private float honeyMovementSpeed = 0.25f; public static readonly int[,,,] MoonLordAttacksArray = NPC.InitializeMoonLordAttacks(); public static readonly int[,] MoonLordAttacksArray2 = NPC.InitializeMoonLordAttacks2(); public static int MoonLordFightingDistance = 4500; public static int MoonLordCountdown = 0; public const int MaxMoonLordCountdown = 3600; public int teleportStyle; public float teleportTime; public static int immuneTime = 20; public static int maxAI = 4; public int netSpam; public static int goldCritterChance = 400; public static int[] killCount = new int[663]; public static float waveKills = 0.0f; public static int waveNumber = 0; public const float nameOverIncrement = 0.025f; public const float nameOverDistance = 350f; public float nameOver; public bool SpawnedFromStatue; public bool dripping; public bool drippingSlime; public bool drippingSparkleSlime; public static readonly int AFKTimeNeededForNoWorms = 300; public int altTexture; public int townNpcVariationIndex; public Vector2 netOffset = Vector2.Zero; public short catchItem; public short releaseOwner = (short) byte.MaxValue; public int rarity; public static bool taxCollector = false; public bool[] playerInteraction = new bool[256]; public int lastInteraction = (int) byte.MaxValue; public float takenDamageMultiplier = 1f; public static bool freeCake = false; private static int spawnSpaceX = 3; private static int spawnSpaceY = 3; public float gfxOffY; public float stepSpeed; private static float gravity = 0.3f; public bool teleporting; private static int maxAttack = 20; private static int[] attackNPC = new int[NPC.maxAttack]; public bool stairFall; public static int fireFlyFriendly = 0; public static int fireFlyChance = 0; public static int fireFlyMultiple = 0; public static int butterflyChance = 0; private byte netStream; private byte[] streamPlayer = new byte[(int) byte.MaxValue]; private bool needsUniqueInfoUpdate = true; public Vector2[] oldPos = new Vector2[10]; public float[] oldRot = new float[10]; public bool setFrameSize; public static int golemBoss = -1; public static int plantBoss = -1; public static int crimsonBoss = -1; public int netSkip; public bool netAlways; public int realLife = -1; private string _givenName = ""; public static int sWidth = 1920; public static int sHeight = 1080; private static int spawnRangeX = (int) ((double) (NPC.sWidth / 16) * 0.7); private static int spawnRangeY = (int) ((double) (NPC.sHeight / 16) * 0.7); public static int safeRangeX = (int) ((double) (NPC.sWidth / 16) * 0.52); public static int safeRangeY = (int) ((double) (NPC.sHeight / 16) * 0.52); private static int activeRangeX = (int) ((double) NPC.sWidth * 2.1); private static int activeRangeY = (int) ((double) NPC.sHeight * 2.1); private static int townRangeX = NPC.sWidth; private static int townRangeY = NPC.sHeight; public float npcSlots = 1f; private static bool noSpawnCycle = false; private static int activeTime = 750; private static int defaultSpawnRate = 600; private static int defaultMaxSpawns = 5; public bool dontCountMe; public const int maxBuffs = 5; public int[] buffType = new int[5]; public int[] buffTime = new int[5]; public bool[] buffImmune = new bool[323]; public bool midas; public bool ichor; public bool onFire; public bool onFire2; public bool onFrostBurn; public bool poisoned; public bool markedByScytheWhip; public bool markedByThornWhip; public bool markedByFireWhip; public bool markedByRainbowWhip; public bool markedByBlandWhip; public bool markedBySwordWhip; public bool markedByMaceWhip; public bool venom; public bool shadowFlame; public bool soulDrain; public int lifeRegen; public int lifeRegenCount; public int lifeRegenExpectedLossPerSecond = -1; public bool confused; public bool loveStruck; public bool stinky; public bool dryadWard; public bool immortal; public bool chaseable = true; public bool canGhostHeal = true; public bool javelined; public bool celled; public bool dryadBane; public bool daybreak; public bool dontTakeDamageFromHostiles; public bool betsysCurse; public bool oiled; public static bool savedTaxCollector = false; public static bool savedGoblin = false; public static bool savedWizard = false; public static bool savedMech = false; public static bool savedAngler = false; public static bool savedStylist = false; public static bool savedBartender = false; public static bool savedGolfer = false; public static bool boughtCat = false; public static bool boughtDog = false; public static bool boughtBunny = false; public static bool combatBookWasUsed = false; public static bool downedBoss1 = false; public static bool downedBoss2 = false; public static bool downedBoss3 = false; public static bool downedQueenBee = false; public static bool downedSlimeKing = false; public static bool downedGoblins = false; public static bool downedFrost = false; public static bool downedPirates = false; public static bool downedClown = false; public static bool downedPlantBoss = false; public static bool downedGolemBoss = false; public static bool downedMartians = false; public static bool downedFishron = false; public static bool downedHalloweenTree = false; public static bool downedHalloweenKing = false; public static bool downedChristmasIceQueen = false; public static bool downedChristmasTree = false; public static bool downedChristmasSantank = false; public static bool downedAncientCultist = false; public static bool downedMoonlord = false; public static bool downedTowerSolar = false; public static bool downedTowerVortex = false; public static bool downedTowerNebula = false; public static bool downedTowerStardust = false; public static bool downedEmpressOfLight = false; public static bool downedQueenSlime = false; public static int ShieldStrengthTowerSolar = 0; public static int ShieldStrengthTowerVortex = 0; public static int ShieldStrengthTowerNebula = 0; public static int ShieldStrengthTowerStardust = 0; public static int LunarShieldPowerNormal = 100; public static int LunarShieldPowerExpert = 150; public static bool TowerActiveSolar = false; public static bool TowerActiveVortex = false; public static bool TowerActiveNebula = false; public static bool TowerActiveStardust = false; public static bool LunarApocalypseIsUp = false; public static bool downedMechBossAny = false; public static bool downedMechBoss1 = false; public static bool downedMechBoss2 = false; public static bool downedMechBoss3 = false; public static bool[] npcsFoundForCheckActive = new bool[663]; public static int[] lazyNPCOwnedProjectileSearchArray = new int[200]; private static int spawnRate = NPC.defaultSpawnRate; private static int maxSpawns = NPC.defaultMaxSpawns; public int soundDelay; public static CoinLossRevengeSystem RevengeManager = new CoinLossRevengeSystem(); public int[] immune = new int[256]; public int directionY = 1; public int type; public float[] ai = new float[NPC.maxAI]; public float[] localAI = new float[NPC.maxAI]; public int aiAction; public int aiStyle; public bool justHit; public int timeLeft; public int target = -1; public int damage; public int defense; public int defDamage; public int defDefense; public bool coldDamage; public bool trapImmune; public LegacySoundStyle HitSound; public LegacySoundStyle DeathSound; public int life; public int lifeMax; public Microsoft.Xna.Framework.Rectangle targetRect; public double frameCounter; public Microsoft.Xna.Framework.Rectangle frame; public Color color; public int alpha; public bool hide; public float scale = 1f; public float knockBackResist = 1f; public int oldDirectionY; public int oldTarget; public float rotation; public bool noGravity; public bool noTileCollide; public bool netUpdate; public bool netUpdate2; public bool collideX; public bool collideY; public bool boss; public int spriteDirection = -1; public bool behindTiles; public bool lavaImmune; public float value; public int extraValue; public bool dontTakeDamage; public int netID; public int statsAreScaledForThisManyPlayers; public float strengthMultiplier = 1f; public bool townNPC; public static bool travelNPC = false; public bool homeless; public int homeTileX = -1; public int homeTileY = -1; public int housingCategory; public bool oldHomeless; public int oldHomeTileX = -1; public int oldHomeTileY = -1; public bool friendly; public bool closeDoor; public int doorX; public int doorY; public int friendlyRegen; public int breath; public const int breathMax = 200; public int breathCounter; public bool reflectsProjectiles; public int lastPortalColorIndex; public bool despawnEncouraged; public static int[,] cavernMonsterType = new int[2, 3]; private static bool EoCKilledToday; private static bool WoFKilledToday; public static bool fairyLog = false; private static int ignorePlayerInteractions = 0; public static int ladyBugGoodLuckTime = 43200; public static int ladyBugBadLuckTime = -10800; private static int ladyBugRainTime = 1800; public static int offSetDelayTime = 60; public bool CanTalk => this.isLikeATownNPC && this.aiStyle == 7 && (double) this.velocity.Y == 0.0 && !NPCID.Sets.IsTownPet[this.type]; public bool CanBeTalkedTo => this.isLikeATownNPC && this.aiStyle == 7 && (double) this.velocity.Y == 0.0; public bool HasValidTarget { get { if (this.HasPlayerTarget && Main.player[this.target].active && !Main.player[this.target].dead && !Main.player[this.target].ghost) return true; return this.SupportsNPCTargets && this.HasNPCTarget && Main.npc[this.TranslatedTargetIndex].active; } } public bool HasPlayerTarget => this.target >= 0 && this.target < (int) byte.MaxValue; public bool HasNPCTarget => this.target >= 300 && this.target < 500; public bool SupportsNPCTargets => NPCID.Sets.UsesNewTargetting[this.type]; public int TranslatedTargetIndex => this.HasNPCTarget ? this.target - 300 : this.target; public int WhoAmIToTargettingIndex => this.whoAmI + 300; public NPCAimedTarget GetTargetData(bool ignorePlayerTankPets = true) { if (!this.HasValidTarget) return new NPCAimedTarget(); return this.SupportsNPCTargets && this.HasNPCTarget ? new NPCAimedTarget(Main.npc[this.TranslatedTargetIndex]) : new NPCAimedTarget(Main.player[this.target], ignorePlayerTankPets); } public static int[,,,] InitializeMoonLordAttacks() { int[,,,] numArray; if (NPC.MoonLordAttacksArray != null) { numArray = NPC.MoonLordAttacksArray; for (int index1 = 0; index1 < numArray.GetLength(0); ++index1) { for (int index2 = 0; index2 < numArray.GetLength(1); ++index2) { for (int index3 = 0; index3 < numArray.GetLength(2); ++index3) { for (int index4 = 0; index4 < numArray.GetLength(3); ++index4) numArray[index1, index2, index3, index4] = 0; } } } } else numArray = new int[3, 3, 2, 5]; numArray[0, 0, 0, 0] = 0; numArray[0, 0, 1, 0] = 50; numArray[0, 0, 0, 1] = 1; numArray[0, 0, 1, 1] = 70; numArray[0, 0, 0, 2] = 2; numArray[0, 0, 1, 2] = 330; numArray[0, 0, 0, 3] = 0; numArray[0, 0, 1, 3] = 60; numArray[0, 0, 0, 4] = 3; numArray[0, 0, 1, 4] = 90; numArray[0, 1, 0, 0] = 1; numArray[0, 1, 1, 0] = 70; numArray[0, 1, 0, 1] = 0; numArray[0, 1, 1, 1] = 50; numArray[0, 1, 0, 2] = 3; numArray[0, 1, 1, 2] = 90; numArray[0, 1, 0, 3] = 0; numArray[0, 1, 1, 3] = 60; numArray[0, 1, 0, 4] = 2; numArray[0, 1, 1, 4] = 330; numArray[0, 2, 0, 0] = 3; numArray[0, 2, 1, 0] = 180; numArray[0, 2, 0, 1] = 0; numArray[0, 2, 1, 1] = 30; numArray[0, 2, 0, 2] = 2; numArray[0, 2, 1, 2] = 435; numArray[0, 2, 0, 3] = 3; numArray[0, 2, 1, 3] = 180; numArray[0, 2, 0, 4] = 1; numArray[0, 2, 1, 4] = 375; numArray[1, 0, 0, 0] = 0; numArray[1, 0, 1, 0] = 0; numArray[1, 0, 0, 1] = 0; numArray[1, 0, 1, 1] = 0; numArray[1, 0, 0, 2] = 0; numArray[1, 0, 1, 2] = 0; numArray[1, 0, 0, 3] = 0; numArray[1, 0, 1, 3] = 0; numArray[1, 0, 0, 4] = 0; numArray[1, 0, 1, 4] = 0; numArray[1, 1, 0, 0] = 0; numArray[1, 1, 1, 0] = 0; numArray[1, 1, 0, 1] = 0; numArray[1, 1, 1, 1] = 0; numArray[1, 1, 0, 2] = 0; numArray[1, 1, 1, 2] = 0; numArray[1, 1, 0, 3] = 0; numArray[1, 1, 1, 3] = 0; numArray[1, 1, 0, 4] = 0; numArray[1, 1, 1, 4] = 0; numArray[1, 2, 0, 0] = 0; numArray[1, 2, 1, 0] = 0; numArray[1, 2, 0, 1] = 0; numArray[1, 2, 1, 1] = 0; numArray[1, 2, 0, 2] = 0; numArray[1, 2, 1, 2] = 0; numArray[1, 2, 0, 3] = 0; numArray[1, 2, 1, 3] = 0; numArray[1, 2, 0, 4] = 0; numArray[1, 2, 1, 4] = 0; numArray[2, 0, 0, 0] = 0; numArray[2, 0, 1, 0] = 0; numArray[2, 0, 0, 1] = 0; numArray[2, 0, 1, 1] = 0; numArray[2, 0, 0, 2] = 0; numArray[2, 0, 1, 2] = 0; numArray[2, 0, 0, 3] = 0; numArray[2, 0, 1, 3] = 0; numArray[2, 0, 0, 4] = 0; numArray[2, 0, 1, 4] = 0; numArray[2, 1, 0, 0] = 0; numArray[2, 1, 1, 0] = 0; numArray[2, 1, 0, 1] = 0; numArray[2, 1, 1, 1] = 0; numArray[2, 1, 0, 2] = 0; numArray[2, 1, 1, 2] = 0; numArray[2, 1, 0, 3] = 0; numArray[2, 1, 1, 3] = 0; numArray[2, 1, 0, 4] = 0; numArray[2, 1, 1, 4] = 0; numArray[2, 2, 0, 0] = 0; numArray[2, 2, 1, 0] = 0; numArray[2, 2, 0, 1] = 0; numArray[2, 2, 1, 1] = 0; numArray[2, 2, 0, 2] = 0; numArray[2, 2, 1, 2] = 0; numArray[2, 2, 0, 3] = 0; numArray[2, 2, 1, 3] = 0; numArray[2, 2, 0, 4] = 0; numArray[2, 2, 1, 4] = 0; NPC.InitializeMoonLordAttacks2(); return numArray; } public static int[,] InitializeMoonLordAttacks2() { int[,] numArray; if (NPC.MoonLordAttacksArray2 != null) { numArray = NPC.MoonLordAttacksArray2; for (int index1 = 0; index1 < numArray.GetLength(0); ++index1) { for (int index2 = 0; index2 < numArray.GetLength(1); ++index2) numArray[index1, index2] = 0; } } else numArray = new int[2, 10]; numArray[0, 0] = 0; numArray[1, 0] = 90; numArray[0, 1] = 1; numArray[1, 1] = 90; numArray[0, 2] = 0; numArray[1, 2] = 90; numArray[0, 3] = 2; numArray[1, 3] = 135; numArray[0, 4] = 0; numArray[1, 4] = 90; numArray[0, 5] = 3; numArray[1, 5] = 200; numArray[0, 6] = 0; numArray[1, 6] = 90; numArray[0, 7] = 4; numArray[1, 7] = 375; numArray[0, 8] = 0; numArray[1, 8] = 90; numArray[0, 9] = 2; numArray[1, 9] = 135; return numArray; } public string TypeName => Lang.GetNPCNameValue(this.netID); public string FullName => !this.HasGivenName ? this.TypeName : Language.GetTextValue("Game.NPCTitle", (object) this._givenName, (object) this.TypeName); public bool HasGivenName => (uint) this._givenName.Length > 0U; public string GivenOrTypeName => !this.HasGivenName ? this.TypeName : this._givenName; public string GivenName { get => this._givenName; set => this._givenName = value ?? ""; } public static string GetFullnameByID(int npcID) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == npcID) return Main.npc[index].FullName; } return Lang.GetNPCNameValue(npcID); } public static bool downedTowers => NPC.downedTowerSolar && NPC.downedTowerVortex && NPC.downedTowerNebula && NPC.downedTowerStardust; public static int ShieldStrengthTowerMax => !Main.expertMode ? NPC.LunarShieldPowerNormal : NPC.LunarShieldPowerExpert; public static bool TowersDefeated => NPC.TowerActiveSolar && NPC.TowerActiveVortex && NPC.TowerActiveNebula && NPC.TowerActiveStardust; public static bool BusyWithAnyInvasionOfSorts() => Main.slimeRainTime != 0.0 || Main.bloodMoon || Main.eclipse || Main.snowMoon || Main.pumpkinMoon || Main.invasionType != 0 || DD2Event.Ongoing; public float Opacity { get => (float) (1.0 - (double) this.alpha / (double) byte.MaxValue); set => this.alpha = (int) MathHelper.Clamp((float) ((1.0 - (double) value) * (double) byte.MaxValue), 0.0f, (float) byte.MaxValue); } public int GetAttackDamage_ScaledByStrength(float normalDamage) => (int) ((double) normalDamage * (double) Main.GameModeInfo.EnemyDamageMultiplier * (double) this.strengthMultiplier); public float GetAttackDamage_LerpBetweenFinalValuesFloat(float normalDamage, float expertDamage) { float amount = Main.expertMode ? 1f : 0.0f; if (Main.GameModeInfo.IsJourneyMode) amount = MathHelper.Clamp(this.strengthMultiplier - 1f, 0.0f, 1f); return MathHelper.Lerp(normalDamage, expertDamage, amount); } public int GetAttackDamage_LerpBetweenFinalValues(float normalDamage, float expertDamage) { float amount = Main.expertMode ? 1f : 0.0f; if (Main.GameModeInfo.IsJourneyMode) amount = MathHelper.Clamp(this.strengthMultiplier - 1f, 0.0f, 1f); return (int) MathHelper.Lerp(normalDamage, expertDamage, amount); } public int GetAttackDamage_ForProjectiles(float normalDamage, float expertDamage) { float amount = Main.expertMode ? 1f : 0.0f; if (Main.GameModeInfo.IsJourneyMode) amount = MathHelper.Clamp(this.strengthMultiplier - 1f, 0.0f, 1f); return (int) MathHelper.Lerp(normalDamage, expertDamage, amount); } public int GetAttackDamage_ForProjectiles_MultiLerp( float normalDamage, float expertDamage, float masterDamage) { float percent = Main.masterMode ? 1f : (Main.expertMode ? 0.5f : 0.0f); if (Main.GameModeInfo.IsJourneyMode) percent = MathHelper.Clamp(this.strengthMultiplier - 1f, 0.0f, 2f) / 2f; return (int) Utils.MultiLerp(percent, normalDamage, expertDamage, masterDamage); } public bool isLikeATownNPC => this.type == 453 || this.townNPC; public static void ClearFoundActiveNPCs() { for (int index = 0; index < NPC.npcsFoundForCheckActive.Length; ++index) NPC.npcsFoundForCheckActive[index] = false; } public static void UpdateFoundActiveNPCs() { for (int index = 0; index < 200; ++index) { NPC npc = Main.npc[index]; if (npc.active && npc.type >= 0 && npc.type < 663) NPC.npcsFoundForCheckActive[npc.type] = true; } NPC.UpdateRGBPeriheralProbe(); } public static void ClearFoundNPCTypesForBestiary() { for (int index = 0; index < NPC.npcsFoundForCheckActive.Length; ++index) NPC.npcsFoundForCheckActive[index] = false; } public static void UpdateRGBPeriheralProbe() { int num1 = 0; int num2 = Main.LocalPlayer.ZoneOverworldHeight ? 1 : 0; if (NPC.npcsFoundForCheckActive[4]) num1 = 4; if (NPC.npcsFoundForCheckActive[50]) num1 = 50; if (num2 != 0 && Main.invasionType == 1) num1 = -1; if (NPC.npcsFoundForCheckActive[13]) num1 = 13; if (NPC.npcsFoundForCheckActive[266]) num1 = 266; if (NPC.npcsFoundForCheckActive[222]) num1 = 222; if (NPC.npcsFoundForCheckActive[35]) num1 = 35; if (NPC.npcsFoundForCheckActive[113]) num1 = 113; if (num2 != 0 && Main.invasionType == 2) num1 = -2; if (NPC.npcsFoundForCheckActive[657]) num1 = 657; if (NPC.npcsFoundForCheckActive[126] || NPC.npcsFoundForCheckActive[125]) num1 = 126; if (NPC.npcsFoundForCheckActive[134]) num1 = 134; if (NPC.npcsFoundForCheckActive[(int) sbyte.MaxValue]) num1 = (int) sbyte.MaxValue; if (num2 != 0 && Main.invasionType == 3) num1 = -3; if (NPC.npcsFoundForCheckActive[262]) num1 = 262; if (NPC.npcsFoundForCheckActive[245]) num1 = 245; if (NPC.npcsFoundForCheckActive[636]) num1 = 636; if (DD2Event.Ongoing) num1 = -6; if (num2 != 0 && Main.invasionType == 4) num1 = -4; if (NPC.npcsFoundForCheckActive[439]) num1 = 439; if (NPC.npcsFoundForCheckActive[370]) num1 = 370; if (NPC.npcsFoundForCheckActive[398]) num1 = 398; CommonConditions.Boss.HighestTierBossOrEvent = num1; } public void SpawnWithHigherTime(int timeMult) => this.timeLeft = NPC.activeTime * timeMult; public void EncourageDespawn(int despawnTime) { if (this.timeLeft > despawnTime) this.timeLeft = despawnTime; this.despawnEncouraged = true; } public void DiscourageDespawn(int despawnTime) { if (this.timeLeft < despawnTime) this.timeLeft = despawnTime; this.despawnEncouraged = false; } public static bool WouldBeEncouragedToDespawn(int aistyle, int type) => aistyle == 4 && Main.dayTime; public static string getNewNPCName(int npcType) => NPC.getNewNPCNameInner(npcType); private static string getNewNPCNameInner(int npcType) { switch (npcType) { case 17: switch (WorldGen.genRand.Next(23)) { case 0: return "Alfred"; case 1: return "Barney"; case 2: return "Calvin"; case 3: return "Edmund"; case 4: return "Edwin"; case 5: return "Eugene"; case 6: return "Frank"; case 7: return "Frederick"; case 8: return "Gilbert"; case 9: return "Gus"; case 10: return "Wilbur"; case 11: return "Seymour"; case 12: return "Louis"; case 13: return "Humphrey"; case 14: return "Harold"; case 15: return "Milton"; case 16: return "Mortimer"; case 17: return "Howard"; case 18: return "Walter"; case 19: return "Isaac"; case 20: return "Joseph"; case 21: return "Kristian"; default: return "Ralph"; } case 18: switch (WorldGen.genRand.Next(24)) { case 0: return "Molly"; case 1: return "Amy"; case 2: return "Claire"; case 3: return "Emily"; case 4: return "Katie"; case 5: return "Madeline"; case 6: return "Katelyn"; case 7: return "Emma"; case 8: return "Abigail"; case 9: return "Carly"; case 10: return "Jenna"; case 11: return "Heather"; case 12: return "Katherine"; case 13: return "Caitlin"; case 14: return "Kaitlin"; case 15: return "Holly"; case 16: return "Kaitlyn"; case 17: return "Hannah"; case 18: return "Kathryn"; case 19: return "Lorraine"; case 20: return "Helen"; case 21: return "Kayla"; case 22: return "Lisa"; default: return "Allison"; } case 19: switch (WorldGen.genRand.Next(24)) { case 0: return "DeShawn"; case 1: return "DeAndre"; case 2: return "Marquis"; case 3: return "Darnell"; case 4: return "Terrell"; case 5: return "Malik"; case 6: return "Trevon"; case 7: return "Tyrone"; case 8: return "Willie"; case 9: return "Dominique"; case 10: return "Demetrius"; case 11: return "Reginald"; case 12: return "Jamal"; case 13: return "Maurice"; case 14: return "Jalen"; case 15: return "Darius"; case 16: return "Xavier"; case 17: return "Terrance"; case 18: return "Andre"; case 19: return "Dante"; case 20: return "Brimst"; case 21: return "Bronson"; case 22: return "Tony"; default: return "Darryl"; } case 20: switch (WorldGen.genRand.Next(22)) { case 0: return "Alalia"; case 1: return "Alalia"; case 2: return "Alura"; case 3: return "Ariella"; case 4: return "Caelia"; case 5: return "Calista"; case 6: return "Chryseis"; case 7: return "Emerenta"; case 8: return "Elysia"; case 9: return "Evvie"; case 10: return "Faye"; case 11: return "Felicitae"; case 12: return "Lunette"; case 13: return "Nata"; case 14: return "Nissa"; case 15: return "Tatiana"; case 16: return "Rosalva"; case 17: return "Shea"; case 18: return "Tania"; case 19: return "Isis"; case 20: return "Celestia"; default: return "Xylia"; } case 22: switch (WorldGen.genRand.Next(35)) { case 0: return "Joe"; case 1: return "Connor"; case 2: return "Tanner"; case 3: return "Wyatt"; case 4: return "Cody"; case 5: return "Levi"; case 6: return "Luke"; case 7: return "Jack"; case 8: return "Scott"; case 9: return "Logan"; case 10: return "Cole"; case 11: return "Asher"; case 12: return "Bradley"; case 13: return "Jacob"; case 14: return "Garrett"; case 15: return "Dylan"; case 16: return "Maxwell"; case 17: return "Steve"; case 18: return "Brett"; case 19: return "Andrew"; case 20: return "Harley"; case 21: return "Kyle"; case 22: return "Jake"; case 23: return "Ryan"; case 24: return "Jeffrey"; case 25: return "Seth"; case 26: return "Marty"; case 27: return "Brandon"; case 28: return "Zach"; case 29: return "Jeff"; case 30: return "Daniel"; case 31: return "Trent"; case 32: return "Kevin"; case 33: return "Brian"; default: return "Colin"; } case 38: switch (WorldGen.genRand.Next(22)) { case 0: return "Dolbere"; case 1: return "Bazdin"; case 2: return "Durim"; case 3: return "Tordak"; case 4: return "Garval"; case 5: return "Morthal"; case 6: return "Oten"; case 7: return "Dolgen"; case 8: return "Gimli"; case 9: return "Gimut"; case 10: return "Duerthen"; case 11: return "Beldin"; case 12: return "Jarut"; case 13: return "Ovbere"; case 14: return "Norkas"; case 15: return "Dolgrim"; case 16: return "Boften"; case 17: return "Norsun"; case 18: return "Dias"; case 19: return "Fikod"; case 20: return "Urist"; default: return "Darur"; } case 54: switch (WorldGen.genRand.Next(27)) { case 0: return "Sebastian"; case 1: return "Rupert"; case 2: return "Clive"; case 3: return "Nigel"; case 4: return "Mervyn"; case 5: return "Cedric"; case 6: return "Pip"; case 7: return "Cyril"; case 8: return "Fitz"; case 9: return "Lloyd"; case 10: return "Arthur"; case 11: return "Rodney"; case 12: return "Graham"; case 13: return "Edward"; case 14: return "Alfred"; case 15: return "Edmund"; case 16: return "Henry"; case 17: return "Herald"; case 18: return "Roland"; case 19: return "Lincoln"; case 20: return "Lloyd"; case 21: return "Edgar"; case 22: return "Eustace"; case 23: return "Benjamin"; case 24: return "James"; default: return "Rodrick"; } case 107: switch (WorldGen.genRand.Next(25)) { case 0: return "Grodax"; case 1: return "Sarx"; case 2: return "Xon"; case 3: return "Mrunok"; case 4: return "Nuxatk"; case 5: return "Tgerd"; case 6: return "Darz"; case 7: return "Smador"; case 8: return "Stazen"; case 9: return "Mobart"; case 10: return "Knogs"; case 11: return "Tkanus"; case 12: return "Negurk"; case 13: return "Nort"; case 14: return "Durnok"; case 15: return "Trogem"; case 16: return "Stezom"; case 17: return "Gnudar"; case 18: return "Ragz"; case 19: return "Fahd"; case 20: return "Xanos"; case 21: return "Arback"; case 22: return "Fjell"; case 23: return "Dalek"; default: return "Knub"; } case 108: switch (WorldGen.genRand.Next(22)) { case 0: return "Dalamar"; case 1: return "Dulais"; case 2: return "Elric"; case 3: return "Arddun"; case 4: return "Maelor"; case 5: return "Leomund"; case 6: return "Hirael"; case 7: return "Gwentor"; case 8: return "Greum"; case 9: return "Gearroid"; case 10: return "Fizban"; case 11: return "Ningauble"; case 12: return "Seonag"; case 13: return "Sargon"; case 14: return "Merlyn"; case 15: return "Magius"; case 16: return "Berwyn"; case 17: return "Arwyn"; case 18: return "Alasdair"; case 19: return "Tagar"; case 20: return "Abram"; default: return "Xanadu"; } case 124: switch (WorldGen.genRand.Next(24)) { case 0: return "Shayna"; case 1: return "Korrie"; case 2: return "Ginger"; case 3: return "Brooke"; case 4: return "Jenny"; case 5: return "Autumn"; case 6: return "Nancy"; case 7: return "Ella"; case 8: return "Kayla"; case 9: return "Selah"; case 10: return "Sophia"; case 11: return "Marshanna"; case 12: return "Lauren"; case 13: return "Trisha"; case 14: return "Shirlena"; case 15: return "Sheena"; case 16: return "Ellen"; case 17: return "Amy"; case 18: return "Dawn"; case 19: return "Susana"; case 20: return "Meredith"; case 21: return "Selene"; case 22: return "Terra"; default: return "Sally"; } case 160: switch (WorldGen.genRand.Next(12)) { case 0: return "Reishi"; case 1: return "Maitake"; case 2: return "Chanterelle"; case 3: return "Porcini"; case 4: return "Shimeji"; case 5: return "Amanita"; case 6: return "Muscaria"; case 7: return "Agaric"; case 8: return "Cremini"; case 9: return "Morel"; case 10: return "Enoki"; default: return "Shiitake"; } case 178: switch (WorldGen.genRand.Next(20)) { case 0: return "Whitney"; case 1: return "Verity"; case 2: return "Ada"; case 3: return "Cornelia"; case 4: return "Lydia"; case 5: return "Leila"; case 6: return "Minerva"; case 7: return "Emeline"; case 8: return "Cynthia"; case 9: return "Fidelia"; case 10: return "Lilly"; case 11: return "Phoebe"; case 12: return "Zylphia"; case 13: return "Zelda"; case 14: return "Selina"; case 15: return "Hope"; case 16: return "Isabella"; case 17: return "Judith"; case 18: return "Savannah"; default: return "Vivian"; } case 207: switch (WorldGen.genRand.Next(16)) { case 0: return "Abdosir"; case 1: return "Akbar"; case 2: return "Bodashtart"; case 3: return "Danel"; case 4: return "Hanno"; case 5: return "Hiram"; case 6: return "Kanmi"; case 7: return "Philosir"; case 8: return "Tabnit"; case 9: return "Yutpan"; case 10: return "Ahirom"; case 11: return "Batnoam"; case 12: return "Sikarbaal"; case 13: return "Hannibal"; case 14: return "Yehomilk"; default: return "Ahinadab"; } case 208: switch (WorldGen.genRand.Next(17)) { case 0: return "Candy"; case 1: return "Isis"; case 2: return "Trixy"; case 3: return "Destiny"; case 4: return "Lexus"; case 5: return "Bambi"; case 6: return "Bailey"; case 7: return "Glitter"; case 8: return "Sparkle"; case 9: return "Paris"; case 10: return "Dazzle"; case 11: return "Fantasy"; case 12: return "Bunny"; case 13: return "Sugar"; case 14: return "Fantasia"; case 15: return "Star"; default: return "Cherry"; } case 209: switch (WorldGen.genRand.Next(23)) { case 0: return "Alpha"; case 1: return "Beta"; case 2: return "Delta"; case 3: return "Omega"; case 4: return "Gamma"; case 5: return "Theta"; case 6: return "Kappa"; case 7: return "Omicron"; case 8: return "Sigma"; case 9: return "Upsilon"; case 10: return "Phi"; case 11: return "Zeta"; case 12: return "Lambda"; case 13: return "Nu"; case 14: return "Ci"; case 15: return "Rho"; case 16: return "Phi"; case 17: return "Fender"; case 18: return "T-3E0"; case 19: return "Niner-7"; case 20: return "A.N.D.Y"; case 21: return "Syn-X"; default: return "Mu"; } case 227: switch (WorldGen.genRand.Next(18)) { case 0: return "Marco"; case 1: return "Guido"; case 2: return "Enzo"; case 3: return "Martino"; case 4: return "Mauro"; case 5: return "Lorenzo"; case 6: return "Ludo"; case 7: return "Luciano"; case 8: return "Carlo"; case 9: return "Bruno"; case 10: return "Mario"; case 11: return "Leonardo"; case 12: return "Raphael"; case 13: return "Luigi"; case 14: return "Luca"; case 15: return "Darren"; case 16: return "Esreadel"; default: return "Stefano"; } case 228: switch (WorldGen.genRand.Next(10)) { case 0: return "Abibe"; case 1: return "Jamundi"; case 2: return "U'wa"; case 3: return "Tairona"; case 4: return "Xirigua"; case 5: return "Zop'a"; case 6: return "Opuni"; case 7: return "Kogi-ghi"; case 8: return "Konah"; default: return "Gboto"; } case 229: switch (WorldGen.genRand.Next(11)) { case 0: return "David"; case 1: return "Red Beard"; case 2: return "Jack"; case 3: return "Black Beard"; case 4: return "Captain Morgan"; case 5: return "Wet Beard"; case 6: return "James T. Beard"; case 7: return "Gunpowder Garry"; case 8: return "Captain Stoney Dirt"; case 9: return "Jake"; default: return "Captain Bullywort"; } case 353: switch (WorldGen.genRand.Next(20)) { case 0: return "Bri"; case 1: return "Brianne"; case 2: return "Flora"; case 3: return "Iris"; case 4: return "Scarlett"; case 5: return "Lola"; case 6: return "Hazel"; case 7: return "Stella"; case 8: return "Pearl"; case 9: return "Tallulah"; case 10: return "Ruby"; case 11: return "Esmeralda"; case 12: return "Kylie"; case 13: return "Kati"; case 14: return "Biah"; case 15: return "Meliyah"; case 16: return "Petra"; case 17: return "Rox"; case 18: return "Roxanne"; default: return "Annabel"; } case 368: switch (WorldGen.genRand.Next(13)) { case 0: return "Abraham"; case 1: return "Bohemas"; case 2: return "Eladon"; case 3: return "Aphraim"; case 4: return "Gallius"; case 5: return "Llewellyn"; case 6: return "Riley"; case 7: return "Rawleigh"; case 8: return "Shipton"; case 9: return "Romeo"; case 10: return "Aedan"; case 11: return "Mercer"; default: return "Willy"; } case 369: switch (WorldGen.genRand.Next(21)) { case 0: return "Bobby"; case 1: return "Sammy"; case 2: return "Jimmy"; case 3: return "Danny"; case 4: return "Timmy"; case 5: return "Simon"; case 6: return "Johnny"; case 7: return "Billy"; case 8: return "Matty"; case 9: return "Bart"; case 10: return "Phillip"; case 11: return "Spencer"; case 12: return "Nathan"; case 13: return "Grayson"; case 14: return "Miles"; case 15: return "Charles"; case 16: return "Adam"; case 17: return "Tyler"; case 18: return "Jey"; case 19: return "Ivan"; default: return "Izzy"; } case 441: switch (WorldGen.genRand.Next(20)) { case 0: return "McKinly"; case 1: return "Millard"; case 2: return "Fillmore"; case 3: return "Rutherford"; case 4: return "Chester"; case 5: return "Grover"; case 6: return "Cleveland"; case 7: return "Theodore"; case 8: return "Herbert"; case 9: return "Warren"; case 10: return "Lyndon"; case 11: return "Ronald"; case 12: return "Harrison"; case 13: return "Woodrow"; case 14: return "Tweed"; case 15: return "Blanton"; case 16: return "Dwyer"; case 17: return "Carroll"; default: return "Agnew"; } case 453: switch (WorldGen.genRand.Next(10)) { case 0: return "Skellington"; case 1: return "Bones McGee"; case 2: return "Gloomy Mays"; case 3: return "Jack Sellington"; case 4: return "Billy Marrows"; case 5: return "Tom"; case 6: return "Rattles Magoo"; case 7: return "Mandible Calavera"; case 8: return "Mika"; default: return "No-Eyed Wiley"; } case 550: return Language.RandomFromCategory("BartenderNames", WorldGen.genRand).Value; case 588: return Language.RandomFromCategory("GolferNames", WorldGen.genRand).Value; case 633: return Language.RandomFromCategory("BestiaryGirlNames", WorldGen.genRand).Value; case 637: return Language.RandomFromCategory("CatNames_Siamese", WorldGen.genRand).Value; case 638: return Language.RandomFromCategory("DogNames_Labrador", WorldGen.genRand).Value; case 656: return Language.RandomFromCategory("BunnyNames_White", WorldGen.genRand).Value; default: return ""; } } public NetworkText GetTypeNetName() => NetworkText.FromKey(Lang.GetNPCName(this.netID).Key); public void GetLifeStats(out int statLife, out int statLifeMax) { statLife = this.life; statLifeMax = this.lifeMax; if (this.realLife == -1) return; statLife = Main.npc[this.realLife].life; statLifeMax = Main.npc[this.realLife].lifeMax; } public float GetLifePercent() { int statLife; int statLifeMax; this.GetLifeStats(out statLife, out statLifeMax); return (float) statLife / (float) statLifeMax; } public NetworkText GetFullNetName() { if (!this.HasGivenName) return this.GetTypeNetName(); return NetworkText.FromKey("Game.NPCTitle", (object) this.GetGivenNetName(), (object) this.GetTypeNetName()); } public NetworkText GetGivenOrTypeNetName() => !this.HasGivenName ? this.GetTypeNetName() : this.GetGivenNetName(); public NetworkText GetGivenNetName() => NetworkText.FromLiteral(this._givenName); public static void setNPCName(string newName, int npcType, bool resetExtras = false) { bool flag = false; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == npcType) { if (flag) { Main.npc[index].GivenName = NPC.getNewNPCName(npcType); Main.npc[index].needsUniqueInfoUpdate = true; } else { Main.npc[index].GivenName = newName; if (!resetExtras) break; flag = true; } } } } public static string firstNPCName(int npcType) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == npcType) return Main.npc[index].GivenOrTypeName; } return NPC.getNewNPCName(npcType); } public static string GetFirstNPCNameOrNull(int npcType) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == npcType) return Main.npc[index].GivenOrTypeName; } return (string) null; } public static bool MechSpawn(float x, float y, int type) { int num1 = 0; int num2 = 0; int num3 = 0; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active) { bool flag = false; if (Main.npc[index].type == type) { flag = true; } else { switch (type) { case 46: case 303: case 337: case 540: if (Main.npc[index].type == 46 || Main.npc[index].type == 540 || Main.npc[index].type == 303 || Main.npc[index].type == 337) { flag = true; goto label_19; } else goto label_19; case 55: if (Main.npc[index].type == 230) { flag = true; goto label_19; } else break; case 362: case 364: if (Main.npc[index].type == 362 || Main.npc[index].type == 363 || Main.npc[index].type == 364 || Main.npc[index].type == 365) { flag = true; goto label_19; } else goto label_19; case 602: if (Main.npc[index].type == 602 || Main.npc[index].type == 603) { flag = true; goto label_19; } else goto label_19; case 608: if (Main.npc[index].type == 608 || Main.npc[index].type == 609) { flag = true; goto label_19; } else goto label_19; case 616: case 617: if (Main.npc[index].type == 616 || Main.npc[index].type == 617) { flag = true; goto label_19; } else goto label_19; } if (NPCID.Sets.IsDragonfly[type] && NPCID.Sets.IsDragonfly[Main.npc[index].type]) flag = true; } label_19: if (flag) { ++num1; Vector2 vector2 = new Vector2(x, y); double num4 = (double) Main.npc[index].position.X - (double) vector2.X; float num5 = Main.npc[index].position.Y - vector2.Y; double num6 = Math.Sqrt(num4 * num4 + (double) num5 * (double) num5); if (num6 < 200.0) ++num2; if (num6 < 600.0) ++num3; } } } return num2 < 3 && num3 < 6 && num1 < 10; } public static int TypeToDefaultHeadIndex(int type) { switch (type) { case 0: return 0; case 17: return 2; case 18: return 3; case 19: return 6; case 20: return 5; case 22: return 1; case 38: return 4; case 54: return 7; case 107: return 9; case 108: return 10; case 124: return 8; case 142: return 11; case 160: return 12; case 178: return 13; case 207: return 14; case 208: return 15; case 209: return 16; case 227: return 17; case 228: return 18; case 229: return 19; case 353: return 20; case 368: return 21; case 369: return 22; case 441: return 23; case 550: return 24; case 588: return 25; case 633: return 26; case 637: return 27; case 638: return 33; case 656: return 39; default: return -1; } } public static int DefaultHeadIndexToType(int headIndex) { switch (headIndex) { case 1: return 22; case 2: return 17; case 3: return 18; case 4: return 38; case 5: return 20; case 6: return 19; case 7: return 54; case 8: return 124; case 9: return 107; case 10: return 108; case 11: return 142; case 12: return 160; case 13: return 178; case 14: return 207; case 15: return 208; case 16: return 209; case 17: return 227; case 18: return 228; case 19: return 229; case 20: return 353; case 21: return 368; case 22: return 369; case 23: return 441; case 24: return 550; case 25: return 588; case 26: return 633; case 27: return 637; case 33: return 638; case 39: return 656; default: return -1; } } public int GetBossHeadTextureIndex() { int num = NPCID.Sets.BossHeadTextures[this.type]; switch (this.type) { case 4: if ((double) this.ai[0] >= 2.0) { num = 1; break; } break; case 125: if ((double) this.ai[0] >= 3.0) { num = 16; break; } break; case 126: if ((double) this.ai[0] >= 3.0) { num = 21; break; } break; case 262: if (this.life <= this.lifeMax / 2) { num = 12; break; } break; case 439: if ((double) this.ai[0] == 5.0 && this.alpha == (int) byte.MaxValue) { num = -1; break; } break; case 440: if ((double) this.ai[0] != 5.0 || this.alpha == (int) byte.MaxValue) { num = -1; break; } break; } return num; } public float GetBossHeadRotation() { float num = 0.0f; switch (this.type) { case 35: case (int) sbyte.MaxValue: if ((double) this.ai[1] == 1.0 || (double) this.ai[1] == 2.0) { num = this.rotation; break; } break; case 68: case 262: num = this.rotation; break; case 345: if ((double) this.ai[0] == 2.0) { num = this.rotation; break; } break; } return num; } public SpriteEffects GetBossHeadSpriteEffects() { SpriteEffects spriteEffects = SpriteEffects.None; if (this.type == 491 && this.spriteDirection == 1) spriteEffects = SpriteEffects.FlipHorizontally; return spriteEffects; } public int BannerID() => this.netID >= -10 ? this.netID : this.type; private void SetDefaultsFromNetId(int id, NPCSpawnParams spawnparams = default (NPCSpawnParams)) { bool flag = false; int Type = NPCID.FromNetId(id); this.SetDefaults(0); switch (id) { case -65: this.SetDefaults_ForNetId(Type, spawnparams, 1.21f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -64: this.SetDefaults_ForNetId(Type, spawnparams, 0.87f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -63: this.SetDefaults_ForNetId(Type, spawnparams, 1.16f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -62: this.SetDefaults_ForNetId(Type, spawnparams, 0.78f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -61: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -60: this.SetDefaults_ForNetId(Type, spawnparams, 0.92f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -59: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -58: this.SetDefaults_ForNetId(Type, spawnparams, 0.8f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -57: this.SetDefaults_ForNetId(Type, spawnparams, 1.25f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -56: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -55: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -54: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -53: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -52: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -51: this.SetDefaults_ForNetId(Type, spawnparams, 1.13f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -50: this.SetDefaults_ForNetId(Type, spawnparams, 0.87f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -49: this.SetDefaults_ForNetId(Type, spawnparams, 1.07f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -48: this.SetDefaults_ForNetId(Type, spawnparams, 0.93f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -47: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -46: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -45: this.SetDefaults_ForNetId(Type, spawnparams, 1.05f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -44: this.SetDefaults_ForNetId(Type, spawnparams, 0.87f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -43: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -42: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -41: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -40: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -39: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -38: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -37: this.SetDefaults_ForNetId(Type, spawnparams, 1.08f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -36: this.SetDefaults_ForNetId(Type, spawnparams, 0.92f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -35: this.SetDefaults_ForNetId(Type, spawnparams, 1.13f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -34: this.SetDefaults_ForNetId(Type, spawnparams, 0.87f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -33: this.SetDefaults_ForNetId(Type, spawnparams, 1.11f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -32: this.SetDefaults_ForNetId(Type, spawnparams, 0.89f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -31: this.SetDefaults_ForNetId(Type, spawnparams, 1.13f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -30: this.SetDefaults_ForNetId(Type, spawnparams, 0.93f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -29: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -28: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -27: this.SetDefaults_ForNetId(Type, spawnparams, 1.1f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -26: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -25: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -24: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -23: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -22: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -21: this.SetDefaults_ForNetId(Type, spawnparams, 1.2f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -20: this.SetDefaults_ForNetId(Type, 1.1f); this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -19: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -18: this.SetDefaults_ForNetId(Type, spawnparams, 0.8f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -17: this.SetDefaults_ForNetId(Type, spawnparams, 1.2f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -16: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -15: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale * 1.1); this.life = 400; this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots = 2f; this.knockBackResist *= 2f - this.scale; this.height = 44; break; case -14: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale * 1.1); this.life = (int) ((double) this.life * (double) this.scale * 1.1); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots = 2f; this.knockBackResist *= 2f - this.scale; break; case -13: this.SetDefaults_ForNetId(Type, spawnparams, 0.9f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); break; case -12: this.SetDefaults_ForNetId(Type, spawnparams, 1.15f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -11: this.SetDefaults_ForNetId(Type, spawnparams, 0.85f); flag = false; this.defense = (int) ((double) this.defense * (double) this.scale); this.damage = (int) ((double) this.damage * (double) this.scale); this.life = (int) ((double) this.life * (double) this.scale); this.value = (float) (int) ((double) this.value * (double) this.scale); this.npcSlots *= this.scale; this.knockBackResist *= 2f - this.scale; break; case -10: this.SetDefaults_ForNetId(Type, 1.1f); flag = true; this.damage = 18; this.defense = 6; this.life = 60; this.color = new Color(143, 215, 93, 100); this.value = 500f; break; case -9: this.SetDefaults_ForNetId(Type, 1.2f); flag = true; this.damage = 15; this.defense = 7; this.life = 45; this.color = new Color((int) byte.MaxValue, (int) byte.MaxValue, 0, 100); this.value = 10f; break; case -8: this.SetDefaults_ForNetId(Type, 1.025f); flag = true; this.damage = 12; this.defense = 4; this.life = 35; this.color = new Color((int) byte.MaxValue, 30, 0, 100); this.value = 8f; break; case -7: this.SetDefaults_ForNetId(Type, 1.2f); flag = true; this.damage = 12; this.defense = 6; this.life = 40; this.knockBackResist *= 0.9f; this.color = new Color(200, 0, (int) byte.MaxValue, 150); this.value = 10f; break; case -6: this.SetDefaults_ForNetId(Type, 1.05f); flag = true; this.damage = 15; this.defense = 4; this.life = 45; this.color = new Color(0, 0, 0, 50); this.value = 20f; break; case -5: this.SetDefaults_ForNetId(Type, 0.9f); flag = true; this.damage = 13; this.defense = 4; this.life = 30; this.knockBackResist *= 0.95f; this.alpha = 120; this.color = new Color(0, 0, 0, 50); this.value = 10f; break; case -4: this.SetDefaults_ForNetId(Type, 0.6f); flag = true; this.damage = 5; this.defense = 5; this.life = 150; this.knockBackResist *= 1.4f; this.color = new Color(250, 30, 90, 90); this.value = 10000f; this.rarity = 2; break; case -3: this.SetDefaults_ForNetId(Type, 0.9f); flag = true; this.damage = 6; this.defense = 0; this.life = 14; this.knockBackResist *= 1.2f; this.color = new Color(0, 220, 40, 100); this.value = 3f; break; case -2: this.SetDefaults_ForNetId(Type, 0.9f); flag = true; this.damage = 45; this.defense = 20; this.life = 90; this.knockBackResist *= 1.2f; this.value = 100f; break; case -1: this.SetDefaults_ForNetId(Type, 0.6f); flag = true; this.damage = 45; this.defense = 10; this.life = 90; this.knockBackResist *= 1.2f; this.value = 100f; break; default: return; } this.netID = id; this.lifeMax = this.life; this.defDamage = this.damage; this.defDefense = this.defense; if (!flag) return; this.ScaleStats(spawnparams.playerCountForMultiplayerDifficultyOverride, spawnparams.gameModeData, spawnparams.strengthMultiplierOverride); this.life = this.lifeMax; } public void SetDefaultsKeepPlayerInteraction(int Type) { bool[] flagArray = new bool[this.playerInteraction.Length]; for (int index = 0; index < this.playerInteraction.Length; ++index) flagArray[index] = this.playerInteraction[index]; this.SetDefaults(Type); for (int index = 0; index < this.playerInteraction.Length; ++index) this.playerInteraction[index] = flagArray[index]; } public void SetDefaults_ForNetId(int Type, float scaleOverride) => this.SetDefaults(Type); public void SetDefaults_ForNetId(int Type, NPCSpawnParams spawnparams, float scaleOverride) => this.SetDefaults(Type, spawnparams.WithScale(scaleOverride)); public void SetDefaults(int Type, NPCSpawnParams spawnparams = default (NPCSpawnParams)) { if (spawnparams.gameModeData == null) spawnparams.gameModeData = Main.GameModeInfo; if (Main.getGoodWorld && spawnparams.sizeScaleOverride.HasValue) { ref NPCSpawnParams local = ref spawnparams; float? sizeScaleOverride1 = spawnparams.sizeScaleOverride; float? sizeScaleOverride2 = spawnparams.sizeScaleOverride; float? nullable1 = spawnparams.sizeScaleOverride; float? nullable2 = sizeScaleOverride2.HasValue & nullable1.HasValue ? new float?(sizeScaleOverride2.GetValueOrDefault() * nullable1.GetValueOrDefault()) : new float?(); float? nullable3; if (!(sizeScaleOverride1.HasValue & nullable2.HasValue)) { nullable1 = new float?(); nullable3 = nullable1; } else nullable3 = new float?(sizeScaleOverride1.GetValueOrDefault() + nullable2.GetValueOrDefault()); float? nullable4 = nullable3; float num = 2f; float? nullable5; if (!nullable4.HasValue) { nullable2 = new float?(); nullable5 = nullable2; } else nullable5 = new float?(nullable4.GetValueOrDefault() / num); local.sizeScaleOverride = nullable5; } if (Type < 0) { this.SetDefaultsFromNetId(Type, spawnparams); } else { this.waterMovementSpeed = this.lavaMovementSpeed = 0.5f; this.honeyMovementSpeed = 0.25f; this.netOffset *= 0.0f; this.altTexture = 0; this.townNpcVariationIndex = 0; this.nameOver = 0.0f; this.takenDamageMultiplier = 1f; this.extraValue = 0; for (int index = 0; index < this.playerInteraction.Length; ++index) this.playerInteraction[index] = false; this.rarity = 0; this.dontCountMe = false; this.releaseOwner = (short) byte.MaxValue; this.catchItem = (short) 0; this.needsUniqueInfoUpdate = true; this.netStream = (byte) 32; bool flag = false; this.netID = 0; this.netAlways = false; this.netSpam = 0; this.SpawnedFromStatue = false; this.statsAreScaledForThisManyPlayers = 0; this.strengthMultiplier = 1f; int newSize = 10; if (Type >= 0) newSize = NPCID.Sets.TrailCacheLength[Type]; if (newSize != this.oldPos.Length) { Array.Resize(ref this.oldPos, newSize); Array.Resize(ref this.oldRot, newSize); } for (int index = 0; index < this.oldPos.Length; ++index) { this.oldRot[index] = 0.0f; this.oldPos[index].X = 0.0f; this.oldPos[index].Y = 0.0f; } for (int index = 0; index < 5; ++index) { this.buffTime[index] = 0; this.buffType[index] = 0; } for (int index = 0; index < 323; ++index) this.buffImmune[index] = false; this.setFrameSize = false; this.buffImmune[31] = true; this.netSkip = -2; this.realLife = -1; this.lifeRegen = 0; this.lifeRegenExpectedLossPerSecond = -1; this.lifeRegenCount = 0; this.markedByScytheWhip = false; this.markedByThornWhip = false; this.markedByFireWhip = false; this.markedByRainbowWhip = false; this.markedByBlandWhip = false; this.markedBySwordWhip = false; this.markedByMaceWhip = false; this.poisoned = false; this.soulDrain = false; this.venom = false; this.shadowFlame = false; this.onFire = false; this.midas = false; this.ichor = false; this.onFrostBurn = false; this.confused = false; this.loveStruck = false; this.dontTakeDamageFromHostiles = false; this.stinky = false; this.dryadWard = false; this.onFire2 = false; this.justHit = false; this.dontTakeDamage = false; this.npcSlots = 1f; this.lavaImmune = false; this.lavaWet = false; this.wetCount = (byte) 0; this.wet = false; this.townNPC = false; this.homeless = false; this.homeTileX = -1; this.homeTileY = -1; this.housingCategory = 0; this.friendly = false; this.behindTiles = false; this.boss = false; this.noTileCollide = false; this.rotation = 0.0f; this.active = true; this.alpha = 0; this.color = new Color(); this.collideX = false; this.collideY = false; this.direction = 0; this.oldDirection = this.direction; this.frameCounter = 0.0; this.netUpdate = true; this.netUpdate2 = false; this.knockBackResist = 1f; this.GivenName = ""; this.noGravity = false; this.scale = 1f; this.HitSound = (LegacySoundStyle) null; this.DeathSound = (LegacySoundStyle) null; this.spriteDirection = -1; this.target = (int) byte.MaxValue; this.oldTarget = this.target; this.targetRect = new Microsoft.Xna.Framework.Rectangle(); this.timeLeft = NPC.activeTime; this.type = Type; this.value = 0.0f; this.coldDamage = false; this.trapImmune = false; this.hide = false; this.immortal = false; this.chaseable = true; this.breath = 200; this.breathCounter = 0; this.reflectsProjectiles = false; this.canGhostHeal = true; this.javelined = false; this.daybreak = false; this.celled = false; this.dryadBane = false; this.betsysCurse = false; this.oiled = false; this.despawnEncouraged = false; for (int index = 0; index < NPC.maxAI; ++index) this.ai[index] = 0.0f; for (int index = 0; index < NPC.maxAI; ++index) this.localAI[index] = 0.0f; if (this.type == 1) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 7; this.defense = 2; this.lifeMax = 25; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 175; this.color = new Color(0, 80, (int) byte.MaxValue, 100); this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 2) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 18; this.defense = 2; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 3) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } else if (this.type == 430) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } else if (this.type == 431) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 8; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 80f; this.buffImmune[31] = false; } else if (this.type == 432) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 8; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 65f; this.buffImmune[31] = false; } else if (this.type == 433) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 13; this.defense = 6; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 55f; this.buffImmune[31] = false; } else if (this.type == 434) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 13; this.defense = 8; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 80f; this.buffImmune[31] = false; } else if (this.type == 435) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 4; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 70f; this.buffImmune[31] = false; } else if (this.type == 436) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 12; this.defense = 4; this.lifeMax = 38; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 65f; this.buffImmune[31] = false; } else if (this.type == 4) { this.width = 100; this.height = 110; this.aiStyle = 4; this.damage = 15; this.defense = 12; this.lifeMax = 2800; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.SpawnWithHigherTime(30); this.boss = true; this.value = 30000f; this.npcSlots = 5f; } else if (this.type == 5) { this.width = 20; this.height = 20; this.aiStyle = 5; this.damage = 12; this.defense = 0; this.lifeMax = 8; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; } else if (this.type == 6) { this.npcSlots = 1f; this.width = 30; this.height = 30; this.aiStyle = 5; this.damage = 22; this.defense = 8; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.5f; this.value = 90f; } else if (this.type == 7) { this.npcSlots = 3.5f; this.width = 22; this.height = 22; this.aiStyle = 6; this.damage = 31; this.defense = 2; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 140f; this.netAlways = true; } else if (this.type == 8) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 16; this.defense = 6; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 140f; this.dontCountMe = true; } else if (this.type == 9) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 13; this.defense = 10; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 140f; this.dontCountMe = true; } else if (this.type == 10) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 8; this.defense = 0; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 40f; } else if (this.type == 11) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 4; this.defense = 4; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 40f; this.dontCountMe = true; } else if (this.type == 12) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 4; this.defense = 6; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 40f; this.dontCountMe = true; } else if (this.type == 13) { this.npcSlots = 5f; this.width = 38; this.height = 38; this.aiStyle = 6; this.netAlways = true; this.damage = 22; this.defense = 2; this.lifeMax = 150; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 800f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 14) { this.width = 38; this.height = 38; this.aiStyle = 6; this.netAlways = true; this.damage = 13; this.defense = 4; this.lifeMax = 150; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 800f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 15) { this.width = 38; this.height = 38; this.aiStyle = 6; this.netAlways = true; this.damage = 11; this.defense = 8; this.lifeMax = 150; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 800f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 16) { this.npcSlots = 2f; this.width = 36; this.height = 24; this.aiStyle = 1; this.damage = 20; this.defense = 7; this.lifeMax = 90; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 120; this.color = new Color(0, 0, 0, 50); this.value = 75f; this.scale = 1.25f; this.knockBackResist = 0.6f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 17) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 18) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 19) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 20) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 21) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 100f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 22) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 23) { this.width = 22; this.height = 22; this.aiStyle = 5; this.damage = 40; this.defense = 6; this.lifeMax = 26; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.value = 80f; this.knockBackResist = 0.4f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 24) { this.npcSlots = 3f; this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 30; this.defense = 16; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.lavaImmune = true; this.value = 350f; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 25) { this.width = 16; this.height = 16; this.aiStyle = 9; this.damage = 30; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.alpha = 100; } else if (this.type == 31) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 26; this.defense = 8; this.lifeMax = 80; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.8f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 32) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 20; this.defense = 2; this.lifeMax = 50; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 140f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 33) { this.width = 16; this.height = 16; this.aiStyle = 9; this.damage = 20; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.alpha = (int) byte.MaxValue; this.knockBackResist = 0.0f; } else if (this.type == 34) { this.width = 26; this.height = 28; this.aiStyle = 10; this.damage = 35; this.defense = 6; this.lifeMax = 40; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.noGravity = true; this.noTileCollide = true; this.value = 150f; this.knockBackResist = 0.2f; this.npcSlots = 0.75f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 35) { this.width = 80; this.height = 102; this.aiStyle = 11; this.damage = 32; this.defense = 10; this.lifeMax = 4400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.noGravity = true; this.noTileCollide = true; this.value = 50000f; this.knockBackResist = 0.0f; this.boss = true; this.npcSlots = 6f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[189] = this.buffImmune[169] = this.buffImmune[183] = true; } else if (this.type == 36) { this.width = 52; this.height = 52; this.aiStyle = 12; this.damage = 20; this.defense = 14; this.lifeMax = 600; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 37) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 38) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 39) { this.npcSlots = 6f; this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 30; this.defense = 10; this.lifeMax = 250; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath5; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 1200f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 40) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 15; this.defense = 12; this.lifeMax = 250; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath5; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 1200f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 41) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 10; this.defense = 18; this.lifeMax = 250; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath5; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 1200f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 42) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 26; this.defense = 12; this.lifeMax = 48; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.5f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 43) { this.noGravity = true; this.noTileCollide = true; this.width = 30; this.height = 30; this.aiStyle = 13; this.damage = 34; this.defense = 10; this.lifeMax = 110; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath1; this.value = 350f; this.buffImmune[20] = true; } else if (this.type == 44) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 22; this.defense = 9; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 250f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 45) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 20; this.defense = 4; this.lifeMax = 200; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 5000f; this.buffImmune[20] = true; this.rarity = 4; } else if (this.type == 46 || this.type == 303 || this.type == 337 || this.type == 540) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2019; } else if (this.type == 47) { this.width = 18; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 4; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 48) { this.width = 24; this.height = 34; this.aiStyle = 14; this.damage = 25; this.defense = 8; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath1; this.value = 300f; } else if (this.type == 49) { this.npcSlots = 0.5f; this.width = 22; this.height = 18; this.aiStyle = 14; this.damage = 13; this.defense = 2; this.lifeMax = 16; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath4; this.value = 90f; this.buffImmune[31] = false; } else if (this.type == 50) { this.boss = true; this.width = 98; this.height = 92; this.aiStyle = 15; this.damage = 40; this.defense = 10; this.lifeMax = 2000; this.knockBackResist = 0.0f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 30; this.value = 10000f; this.scale = 1.25f; this.buffImmune[20] = true; this.SpawnWithHigherTime(30); } else if (this.type == 51) { this.npcSlots = 0.5f; this.width = 22; this.height = 18; this.aiStyle = 14; this.damage = 20; this.defense = 4; this.lifeMax = 34; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath4; this.value = 80f; this.buffImmune[31] = false; } else if (this.type == 52) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 1000f; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 53) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 8; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 1000f; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 54) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 55) { this.noGravity = true; this.width = 20; this.height = 18; this.aiStyle = 16; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.catchItem = (short) 261; } else if (this.type == 56) { this.noTileCollide = true; this.noGravity = true; this.width = 30; this.height = 30; this.aiStyle = 13; this.damage = 25; this.defense = 10; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath1; this.value = 90f; this.buffImmune[20] = true; } else if (this.type == 57) { this.noGravity = true; this.width = 18; this.height = 20; this.aiStyle = 16; this.damage = 30; this.defense = 6; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; } else if (this.type == 58) { this.npcSlots = 0.5f; this.noGravity = true; this.width = 18; this.height = 20; this.aiStyle = 16; this.damage = 25; this.defense = 2; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 50f; } else if (this.type == 59) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 15; this.defense = 10; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.scale = 1.1f; this.alpha = 50; this.lavaImmune = true; this.value = 120f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 60) { this.npcSlots = 0.5f; this.width = 22; this.height = 18; this.aiStyle = 14; this.damage = 35; this.defense = 8; this.lifeMax = 46; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath4; this.value = 120f; this.scale = 1.1f; this.lavaImmune = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 61) { this.width = 36; this.height = 36; this.aiStyle = 17; this.damage = 15; this.defense = 4; this.lifeMax = 40; this.knockBackResist = 0.8f; this.HitSound = SoundID.NPCHit28; this.DeathSound = SoundID.NPCDeath31; this.value = 60f; } else if (this.type == 62) { this.npcSlots = 2f; this.width = 28; this.height = 48; this.aiStyle = 14; this.damage = 32; this.defense = 8; this.lifeMax = 120; this.HitSound = SoundID.NPCHit21; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath24; this.value = 300f; this.lavaImmune = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 63) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 25; this.defense = 4; this.lifeMax = 34; this.HitSound = SoundID.NPCHit25; this.DeathSound = SoundID.NPCDeath28; this.value = 100f; this.alpha = 20; } else if (this.type == 64) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 30; this.defense = 6; this.lifeMax = 70; this.HitSound = SoundID.NPCHit25; this.DeathSound = SoundID.NPCDeath28; this.value = 100f; this.alpha = 20; } else if (this.type == 65) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 16; this.damage = 40; this.defense = 2; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 400f; this.knockBackResist = 0.7f; } else if (this.type == 66) { this.npcSlots = 2f; this.width = 28; this.height = 48; this.aiStyle = 14; this.damage = 32; this.defense = 8; this.lifeMax = 140; this.HitSound = SoundID.NPCHit21; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath24; this.value = 1000f; this.lavaImmune = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 67) { this.width = 28; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 60f; } else if (this.type == 68) { this.width = 80; this.height = 102; this.aiStyle = 11; this.damage = 1000; this.defense = 9999; this.lifeMax = 9999; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[189] = this.buffImmune[169] = this.buffImmune[183] = true; } else if (this.type == 69) { this.width = 24; this.height = 24; this.aiStyle = 19; this.damage = 10; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit31; this.DeathSound = SoundID.NPCDeath34; this.knockBackResist = 0.0f; this.value = 60f; this.behindTiles = true; } else if (this.type == 70) { this.npcSlots = 0.3f; this.width = 34; this.height = 34; this.aiStyle = 20; this.damage = 32; this.defense = 100; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.dontTakeDamage = true; this.scale = 1.5f; } else if (this.type == 71) { this.npcSlots = 2f; this.width = 36; this.height = 24; this.aiStyle = 1; this.damage = 30; this.defense = 7; this.lifeMax = 150; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 60; this.value = 150f; this.scale = 1.25f; this.knockBackResist = 0.6f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 72) { this.npcSlots = 0.3f; this.width = 34; this.height = 34; this.aiStyle = 21; this.damage = 24; this.defense = 100; this.lifeMax = 100; this.alpha = 100; this.behindTiles = true; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.noGravity = true; this.dontTakeDamage = true; this.scale = 1.2f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 73) { this.scale = 0.95f; this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 6; this.lifeMax = 80; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.7f; this.value = 200f; this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 74 || this.type == 297 || this.type == 298) { this.width = 14; this.height = 14; this.aiStyle = 24; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; if (this.type == 74) this.catchItem = (short) 2015; if (this.type == 297) this.catchItem = (short) 2016; if (this.type == 298) this.catchItem = (short) 2017; this.npcSlots = 0.4f; } else if (this.type == 75) { this.noGravity = true; this.width = 20; this.height = 20; this.aiStyle = 22; this.damage = 55; this.defense = 20; this.lifeMax = 150; this.HitSound = SoundID.NPCHit5; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath7; this.value = 350f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 77) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 40; this.defense = 28; this.lifeMax = 260; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 78) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 50; this.defense = 16; this.lifeMax = 130; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.6f; this.value = 600f; this.buffImmune[31] = false; } else if (this.type == 79) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 18; this.lifeMax = 180; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.value = 700f; this.buffImmune[31] = false; } else if (this.type == 80) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 55; this.defense = 18; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.55f; this.value = 700f; this.buffImmune[31] = false; } else if (this.type == 81) { this.width = 40; this.height = 30; this.aiStyle = 1; this.damage = 55; this.defense = 20; this.lifeMax = 170; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 55; this.value = 400f; this.scale = 1.1f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 82) { this.noGravity = true; this.noTileCollide = true; this.width = 24; this.height = 44; this.aiStyle = 22; this.damage = 65; this.defense = 16; this.lifeMax = 160; this.HitSound = SoundID.NPCHit54; this.DeathSound = SoundID.NPCDeath52; this.alpha = 100; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.7f; } else if (this.type == 83) { this.width = 40; this.height = 40; this.aiStyle = 23; this.damage = 80; this.defense = 18; this.lifeMax = 200; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.4f; } else if (this.type == 84) { this.width = 40; this.height = 40; this.aiStyle = 23; this.damage = 80; this.defense = 18; this.lifeMax = 200; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.4f; } else if (this.type == 85) { this.width = 24; this.height = 24; this.aiStyle = 25; this.damage = 80; this.defense = 30; this.lifeMax = 500; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 100000f; this.knockBackResist = 0.3f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.rarity = 4; } else if (this.type == 86) { this.width = 46; this.height = 42; this.aiStyle = 26; this.damage = 65; this.defense = 30; this.lifeMax = 400; this.HitSound = SoundID.NPCHit12; this.DeathSound = SoundID.NPCDeath18; this.knockBackResist = 0.3f; this.value = 1000f; this.buffImmune[31] = false; } else if (this.type == 87) { this.noTileCollide = true; this.npcSlots = 5f; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 80; this.defense = 10; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 10000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 88) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 10000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 89) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 2000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 90) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 10000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 91) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 10000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 92) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath8; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 10000f; this.scale = 1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.dontCountMe = true; } else if (this.type == 93) { this.npcSlots = 0.5f; this.width = 26; this.height = 20; this.aiStyle = 14; this.damage = 45; this.defense = 16; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.75f; this.DeathSound = SoundID.NPCDeath4; this.value = 400f; this.buffImmune[31] = false; } else if (this.type == 94) { this.npcSlots = 1f; this.width = 44; this.height = 44; this.aiStyle = 5; this.damage = 60; this.defense = 32; this.lifeMax = 230; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.55f; this.value = 500f; } else if (this.type == 95) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 45; this.defense = 10; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.scale = 0.9f; this.value = 300f; } else if (this.type == 96) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 28; this.defense = 20; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.scale = 0.9f; this.value = 300f; this.dontCountMe = true; } else if (this.type == 97) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 26; this.defense = 30; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.scale = 0.9f; this.value = 300f; this.dontCountMe = true; } else if (this.type == 98) { this.npcSlots = 3.5f; this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 70; this.defense = 36; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; } else if (this.type == 99) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 55; this.defense = 40; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; this.dontCountMe = true; } else if (this.type == 100) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 44; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; this.dontCountMe = true; } else if (this.type == 101) { this.noGravity = true; this.noTileCollide = true; this.behindTiles = true; this.width = 30; this.height = 30; this.aiStyle = 13; this.damage = 70; this.defense = 30; this.lifeMax = 320; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.2f; this.DeathSound = SoundID.NPCDeath1; this.value = 600f; } else if (this.type == 102) { this.npcSlots = 0.5f; this.noGravity = true; this.width = 18; this.height = 20; this.aiStyle = 16; this.damage = 80; this.defense = 22; this.lifeMax = 90; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; } else if (this.type == 103) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 80; this.defense = 30; this.lifeMax = 120; this.HitSound = SoundID.NPCHit25; this.DeathSound = SoundID.NPCDeath28; this.value = 800f; this.alpha = 20; } else if (this.type == 104) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 38; this.lifeMax = 350; this.HitSound = SoundID.NPCHit6; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[31] = false; } else if (this.type == 105) { this.friendly = true; this.width = 18; this.height = 34; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.rarity = 1; } else if (this.type == 106) { this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.rarity = 1; } else if (this.type == 107) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 108) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 109) { this.width = 34; this.height = 78; this.aiStyle = 3; this.damage = 60; this.defense = 25; this.lifeMax = 800; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.2f; this.value = 10000f; this.rarity = 1; } else if (this.type == 110) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 45; this.defense = 14; this.lifeMax = 210; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 112) { this.width = 16; this.height = 16; this.aiStyle = 9; this.damage = 65; this.defense = 0; this.lifeMax = 1; this.HitSound = (LegacySoundStyle) null; this.DeathSound = SoundID.NPCDeath9; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.scale = 0.9f; this.alpha = 80; } else if (this.type == 113) { this.npcSlots = 10f; this.width = 100; this.height = 100; this.aiStyle = 27; this.damage = 50; this.defense = 12; this.lifeMax = 8000; this.HitSound = SoundID.NPCHit8; this.DeathSound = SoundID.NPCDeath10; this.noGravity = true; this.noTileCollide = true; this.behindTiles = true; this.knockBackResist = 0.0f; this.scale = 1.2f; this.boss = true; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.value = 80000f; } else if (this.type == 114) { this.width = 100; this.height = 100; this.aiStyle = 28; this.damage = 50; this.defense = 0; this.lifeMax = 8000; this.HitSound = SoundID.NPCHit8; this.DeathSound = SoundID.NPCDeath10; this.noGravity = true; this.noTileCollide = true; this.behindTiles = true; this.knockBackResist = 0.0f; this.scale = 1.2f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.value = 80000f; } else if (this.type == 115) { this.width = 30; this.height = 30; this.aiStyle = 29; this.damage = 30; this.defense = 10; this.lifeMax = 240; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath11; this.noGravity = true; this.behindTiles = true; this.noTileCollide = true; this.knockBackResist = 1.1f; } else if (this.type == 116) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 30; this.defense = 6; this.lifeMax = 80; this.HitSound = SoundID.NPCHit9; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath12; } else if (this.type == 117) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 26; this.defense = 2; this.lifeMax = 60; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath12; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; } else if (this.type == 118) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 22; this.defense = 6; this.lifeMax = 60; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath12; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; } else if (this.type == 119) { this.width = 14; this.height = 14; this.aiStyle = 6; this.netAlways = true; this.damage = 18; this.defense = 10; this.lifeMax = 60; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath12; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; } else if (this.type == 120) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 40; this.defense = 30; this.lifeMax = 370; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.4f; this.value = 600f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 121) { this.width = 40; this.height = 30; this.aiStyle = 14; this.damage = 45; this.defense = 20; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.alpha = 55; this.knockBackResist = 0.8f; this.scale = 1.1f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 122) { this.noGravity = true; this.width = 20; this.height = 20; this.aiStyle = 22; this.damage = 60; this.defense = 22; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 600f; this.buffImmune[20] = true; } else if (this.type == 123) { this.friendly = true; this.width = 18; this.height = 34; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.scale = 0.9f; this.rarity = 1; } else if (this.type == 124) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 125) { this.width = 100; this.height = 110; this.aiStyle = 30; this.defense = 10; this.damage = 45; this.lifeMax = 20000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.SpawnWithHigherTime(30); this.boss = true; this.value = 120000f; this.npcSlots = 5f; } else if (this.type == 126) { this.width = 100; this.height = 110; this.aiStyle = 31; this.defense = 10; this.damage = 50; this.lifeMax = 23000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.SpawnWithHigherTime(30); this.boss = true; this.value = 120000f; this.npcSlots = 5f; } else if (this.type == (int) sbyte.MaxValue) { this.width = 80; this.height = 102; this.aiStyle = 32; this.damage = 47; this.defense = 24; this.lifeMax = 28000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.value = 120000f; this.knockBackResist = 0.0f; this.boss = true; this.npcSlots = 6f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[189] = this.buffImmune[169] = this.buffImmune[183] = true; this.boss = true; } else if (this.type == 128) { this.width = 52; this.height = 52; this.aiStyle = 35; this.damage = 30; this.defense = 23; this.lifeMax = 7000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.netAlways = true; } else if (this.type == 129) { this.width = 52; this.height = 52; this.aiStyle = 33; this.damage = 56; this.defense = 38; this.lifeMax = 9000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.netAlways = true; } else if (this.type == 130) { this.width = 52; this.height = 52; this.aiStyle = 34; this.damage = 52; this.defense = 34; this.lifeMax = 9000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.netAlways = true; } else if (this.type == 131) { this.width = 52; this.height = 52; this.aiStyle = 36; this.damage = 29; this.defense = 20; this.lifeMax = 6000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.netAlways = true; } else if (this.type == 132) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 15; this.defense = 5; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 65f; this.buffImmune[31] = false; } else if (this.type == 133) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 40; this.defense = 20; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 134) { this.npcSlots = 5f; this.width = 38; this.height = 38; this.aiStyle = 37; this.defense = 0; this.damage = 70; this.lifeMax = 80000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 120000f; this.scale = 1.25f; this.boss = true; this.netAlways = true; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; flag = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 135) { this.npcSlots = 5f; this.width = 38; this.height = 38; this.aiStyle = 37; this.damage = 55; this.defense = 30; this.lifeMax = 80000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.netAlways = true; this.scale = 1.25f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; flag = true; this.dontCountMe = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 136) { this.npcSlots = 5f; this.width = 38; this.height = 38; this.aiStyle = 37; this.damage = 40; this.defense = 35; this.lifeMax = 80000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.scale = 1.25f; this.netAlways = true; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; flag = true; this.dontCountMe = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 139) { this.npcSlots = 1f; this.width = 30; this.height = 30; this.aiStyle = 5; this.damage = 50; this.defense = 20; this.lifeMax = 200; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.noGravity = true; this.knockBackResist = 0.8f; this.noTileCollide = true; flag = true; } else if (this.type == 137) { this.width = 26; this.height = 20; this.aiStyle = 14; this.damage = 75; this.defense = 30; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.75f; this.DeathSound = SoundID.NPCDeath6; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 138) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 70; this.defense = 30; this.lifeMax = 180; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.alpha = 100; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.85f; this.scale = 1.05f; this.buffImmune[31] = false; } else if (this.type == 140) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 55; this.defense = 28; this.lifeMax = 260; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.4f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.buffImmune[24] = true; } else if (this.type == 141) { this.width = 34; this.height = 28; this.aiStyle = 1; this.damage = 50; this.defense = 18; this.lifeMax = 150; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 55; this.value = 400f; this.scale = 1.1f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.knockBackResist = 0.8f; } else if (this.type == 142) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 143) { this.width = 26; this.height = 40; this.aiStyle = 38; this.damage = 50; this.defense = 20; this.lifeMax = 200; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 0.6f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.buffImmune[24] = true; this.buffImmune[39] = true; this.coldDamage = true; } else if (this.type == 144) { this.width = 26; this.height = 40; this.aiStyle = 38; this.damage = 65; this.defense = 26; this.lifeMax = 240; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 0.6f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.buffImmune[24] = true; this.buffImmune[39] = true; this.coldDamage = true; } else if (this.type == 145) { this.width = 26; this.height = 40; this.aiStyle = 38; this.damage = 55; this.defense = 22; this.lifeMax = 220; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 0.6f; this.value = 400f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.buffImmune[24] = true; this.buffImmune[39] = true; this.coldDamage = true; } else if (this.type == 147) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 8; this.defense = 4; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 50; this.value = 50f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.coldDamage = true; } else if (this.type == 148) { this.width = 16; this.height = 34; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2205; } else if (this.type == 149) { this.width = 16; this.height = 34; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2205; } else if (this.type == 150) { this.npcSlots = 0.5f; this.width = 22; this.height = 22; this.aiStyle = 14; this.damage = 18; this.defense = 6; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath4; this.value = 250f; this.buffImmune[31] = false; } else if (this.type == 151) { this.npcSlots = 0.5f; this.width = 22; this.height = 22; this.aiStyle = 14; this.damage = 50; this.defense = 16; this.lifeMax = 160; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath4; this.value = 400f; this.scale = 1.15f; this.lavaImmune = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; } else if (this.type == 152) { this.npcSlots = 0.5f; this.width = 38; this.height = 34; this.aiStyle = 14; this.damage = 80; this.defense = 24; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.65f; this.DeathSound = SoundID.NPCDeath4; this.value = 400f; this.buffImmune[31] = false; } else if (this.type == 153) { this.npcSlots = 2f; this.width = 46; this.height = 32; this.aiStyle = 39; this.damage = 80; this.defense = 30; this.lifeMax = 470; this.HitSound = SoundID.NPCHit24; this.knockBackResist = 0.3f; this.DeathSound = SoundID.NPCDeath27; this.value = 500f; this.noGravity = false; this.buffImmune[31] = false; } else if (this.type == 154) { this.npcSlots = 1.5f; this.width = 46; this.height = 32; this.aiStyle = 39; this.damage = 55; this.defense = 28; this.lifeMax = 400; this.HitSound = SoundID.NPCHit24; this.knockBackResist = 0.3f; this.DeathSound = SoundID.NPCDeath27; this.value = 450f; this.noGravity = false; this.buffImmune[31] = false; } else if (this.type == 155) { this.width = 46; this.height = 30; this.aiStyle = 26; this.damage = 65; this.defense = 30; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 1000f; this.buffImmune[31] = false; } else if (this.type == 156) { this.npcSlots = 2f; this.width = 28; this.height = 48; this.aiStyle = 14; this.damage = 50; this.defense = 40; this.lifeMax = 600; this.HitSound = SoundID.NPCHit21; this.knockBackResist = 0.5f; this.DeathSound = SoundID.NPCDeath24; this.value = 1200f; this.lavaImmune = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 157) { this.npcSlots = 0.5f; this.noGravity = true; this.width = 74; this.height = 20; this.aiStyle = 16; this.damage = 75; this.defense = 30; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; } else if (this.type == 160) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 161) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 8; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 80f; this.buffImmune[31] = false; } else if (this.type == 163) { this.width = 50; this.height = 20; this.aiStyle = 3; this.damage = 90; this.defense = 40; this.lifeMax = 350; this.HitSound = SoundID.NPCHit29; this.DeathSound = SoundID.NPCDeath32; this.knockBackResist = 0.25f; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.npcSlots = 0.5f; this.SpawnWithHigherTime(2); } else if (this.type == 238) { this.noGravity = true; this.width = 36; this.height = 36; this.aiStyle = 40; this.damage = 100; this.defense = 40; this.lifeMax = 350; this.HitSound = SoundID.NPCHit29; this.DeathSound = SoundID.NPCDeath32; this.knockBackResist = 0.25f; this.value = 500f; this.SpawnWithHigherTime(2); this.npcSlots = 0.5f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 164) { this.width = 50; this.height = 20; this.aiStyle = 3; this.damage = 30; this.defense = 10; this.lifeMax = 80; this.HitSound = SoundID.NPCHit29; this.DeathSound = SoundID.NPCDeath32; this.knockBackResist = 0.25f; this.value = 100f; this.SpawnWithHigherTime(2); this.npcSlots = 0.5f; this.buffImmune[20] = true; } else if (this.type == 165) { this.noGravity = true; this.width = 36; this.height = 36; this.aiStyle = 40; this.damage = 30; this.defense = 10; this.lifeMax = 80; this.HitSound = SoundID.NPCHit29; this.DeathSound = SoundID.NPCDeath32; this.knockBackResist = 0.25f; this.value = 100f; this.SpawnWithHigherTime(2); this.npcSlots = 0.5f; this.buffImmune[20] = true; } else if (this.type == 167) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 24; this.defense = 10; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 200f; this.buffImmune[31] = false; this.buffImmune[20] = true; } else if (this.type == 168) { this.width = 16; this.height = 34; this.aiStyle = 3; this.damage = 20; this.defense = 4; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 169) { this.noGravity = true; this.width = 18; this.height = 40; this.aiStyle = 22; this.damage = 55; this.defense = 20; this.lifeMax = 200; this.HitSound = SoundID.NPCHit5; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath7; this.value = 1500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.buffImmune[31] = false; this.buffImmune[44] = true; this.coldDamage = true; } else if (this.type == 170) { this.width = 44; this.height = 36; this.aiStyle = 2; this.damage = 70; this.defense = 16; this.lifeMax = 210; this.HitSound = SoundID.NPCHit27; this.DeathSound = SoundID.NPCDeath30; this.knockBackResist = 0.5f; this.value = 2000f; this.buffImmune[31] = false; } else if (this.type == 171) { this.width = 44; this.height = 36; this.aiStyle = 2; this.damage = 70; this.defense = 16; this.lifeMax = 210; this.HitSound = SoundID.NPCHit27; this.DeathSound = SoundID.NPCDeath30; this.knockBackResist = 0.5f; this.value = 2000f; this.buffImmune[31] = false; } else if (this.type == 172) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 200; this.defense = 30; this.lifeMax = 600; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 5000f; this.buffImmune[20] = true; this.rarity = 2; } else if (this.type == 173) { this.npcSlots = 1f; this.width = 30; this.height = 30; this.aiStyle = 5; this.damage = 22; this.defense = 8; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.5f; this.value = 90f; } else if (this.type == 174) { this.npcSlots = 1f; this.width = 52; this.height = 26; this.aiStyle = 41; this.damage = 65; this.defense = 26; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 450f; } else if (this.type == 175) { this.noGravity = true; this.noTileCollide = true; this.width = 30; this.height = 30; this.aiStyle = 13; this.damage = 100; this.defense = 30; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.25f; this.DeathSound = SoundID.NPCDeath1; this.value = 650f; this.buffImmune[20] = true; } else if (this.type == 176) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 70; this.defense = 22; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.5f; this.DeathSound = SoundID.NPCDeath1; this.value = 600f; this.noGravity = true; this.buffImmune[20] = true; this.npcSlots = 1.5f; } else if (this.type == 177) { this.npcSlots = 1f; this.width = 58; this.height = 44; this.aiStyle = 41; this.damage = 80; this.defense = 26; this.lifeMax = 300; this.HitSound = SoundID.NPCHit22; this.DeathSound = SoundID.NPCDeath25; this.knockBackResist = 0.5f; this.value = 500f; } else if (this.type == 178) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 179) { this.width = 40; this.height = 40; this.aiStyle = 23; this.damage = 80; this.defense = 18; this.lifeMax = 200; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.4f; } else if (this.type == 180) { this.width = 44; this.height = 36; this.aiStyle = 2; this.damage = 70; this.defense = 16; this.lifeMax = 210; this.HitSound = SoundID.NPCHit27; this.DeathSound = SoundID.NPCDeath30; this.knockBackResist = 0.5f; this.value = 4000f; this.buffImmune[31] = false; } else if (this.type == 181) { this.width = 18; this.height = 44; this.aiStyle = 3; this.damage = 25; this.defense = 10; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 200f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 182) { this.noGravity = true; this.noTileCollide = true; this.width = 24; this.height = 62; this.aiStyle = 22; this.damage = 65; this.defense = 18; this.lifeMax = 240; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.alpha = 100; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.7f; } else if (this.type == 183) { this.width = 40; this.height = 30; this.aiStyle = 1; this.damage = 60; this.defense = 26; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 55; this.value = 400f; this.scale = 1.1f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 184) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 12; this.defense = 8; this.lifeMax = 60; this.scale = 1.1f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 50; this.value = 200f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.coldDamage = true; } else if (this.type == 185) { this.width = 28; this.height = 28; this.aiStyle = 3; this.damage = 26; this.defense = 12; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 1.1f; this.value = 200f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.coldDamage = true; } else if (this.type == 186) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 8; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 65f; this.buffImmune[31] = false; } else if (this.type == 187) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 13; this.defense = 6; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 55f; this.buffImmune[31] = false; } else if (this.type == 188) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 13; this.defense = 8; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 80f; this.buffImmune[31] = false; } else if (this.type == 189) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 4; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 70f; this.buffImmune[31] = false; } else if (this.type == 190) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 18; this.defense = 4; this.lifeMax = 65; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.7f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 191) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 16; this.defense = 2; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.85f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 192) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 18; this.defense = 2; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 193) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 20; this.defense = 0; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 194) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 14; this.defense = 4; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 75f; this.buffImmune[31] = false; } else if (this.type == 195) { this.width = 18; this.height = 40; this.aiStyle = 42; this.damage = 10; this.defense = 30; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.rarity = 1; this.value = (float) Item.buyPrice(gold: 5); } else if (this.type == 196) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 35; this.defense = 16; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = (float) Item.buyPrice(gold: 5); this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 197) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 50; this.defense = 28; this.lifeMax = 280; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 198) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 38; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit26; this.DeathSound = SoundID.NPCDeath29; this.knockBackResist = 0.4f; this.value = 650f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 199) { this.width = 42; this.height = 30; this.aiStyle = 3; this.damage = 60; this.defense = 30; this.lifeMax = 400; this.HitSound = SoundID.NPCHit26; this.DeathSound = SoundID.NPCDeath29; this.knockBackResist = 0.0f; this.value = 650f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 200) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 12; this.defense = 4; this.lifeMax = 38; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 65f; this.buffImmune[31] = false; } else if (this.type == 201) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 12; this.lifeMax = 55; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 202) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 18; this.defense = 8; this.lifeMax = 65; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 120f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 203) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 22; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 110f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 204) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 28; this.defense = 8; this.lifeMax = 65; this.scale = 1.15f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 50; this.value = 300f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 205) { this.width = 40; this.height = 40; this.aiStyle = 5; this.damage = 70; this.defense = 28; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.4f; this.DeathSound = SoundID.NPCDeath1; this.value = 600f; this.noGravity = true; this.buffImmune[20] = true; this.rarity = 2; } else if (this.type == 206) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 30; this.lifeMax = 280; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.value = 500f; this.buffImmune[31] = false; this.coldDamage = true; } else if (this.type == 207) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 208) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 209) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 210) { this.width = 12; this.height = 12; this.aiStyle = 5; this.damage = 20; this.defense = 5; this.lifeMax = 20; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.5f; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 211) { this.width = 8; this.height = 8; this.aiStyle = 5; this.damage = 15; this.defense = 2; this.lifeMax = 10; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.5f; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 212) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 35; this.defense = 17; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.value = 700f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 213) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 50; this.defense = 22; this.lifeMax = 450; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.2f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 214) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 30; this.defense = 14; this.lifeMax = 225; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 215) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 35; this.defense = 20; this.lifeMax = 350; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.35f; this.value = 1500f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 216) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 30; this.lifeMax = 3000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.value = 50000f; this.buffImmune[20] = true; this.buffImmune[31] = true; this.rarity = 1; } else if (this.type == 217) { this.width = 28; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath16; this.value = 60f; this.rarity = 1; } else if (this.type == 218) { this.width = 28; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath16; this.value = 60f; this.rarity = 1; } else if (this.type == 219) { this.width = 28; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath16; this.value = 60f; this.rarity = 1; } else if (this.type == 220) { this.width = 28; this.height = 20; this.aiStyle = 3; this.damage = 20; this.defense = 10; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 60f; this.rarity = 1; } else if (this.type == 221) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 20; this.defense = 2; this.lifeMax = 30; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 100f; this.alpha = 20; this.rarity = 1; } else if (this.type == 222) { this.width = 66; this.height = 66; this.aiStyle = 43; this.damage = 30; this.defense = 8; this.lifeMax = 3400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.SpawnWithHigherTime(30); this.boss = true; this.value = 50000f; this.npcSlots = 7f; } else if (this.type == 223) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 16; this.defense = 8; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.45f; this.value = 70f; this.buffImmune[31] = false; } else if (this.type == 224) { this.width = 32; this.height = 18; this.aiStyle = 44; this.damage = 9; this.defense = 4; this.lifeMax = 20; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.value = 300f; this.buffImmune[31] = false; } if (this.type == 225) { this.width = 38; this.height = 26; this.aiStyle = 1; this.damage = 10; this.defense = 5; this.lifeMax = 35; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.75f; this.value = 200f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 226) { this.npcSlots = 0.5f; this.width = 34; this.height = 50; this.aiStyle = 14; this.damage = 85; this.defense = 28; this.lifeMax = 260; this.HitSound = SoundID.NPCHit23; this.knockBackResist = 0.65f; this.DeathSound = SoundID.NPCDeath26; this.value = 400f; this.buffImmune[31] = false; } else if (this.type == 227) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 228) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 229) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 230) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 261; } else if (this.type == 231) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 22; this.defense = 16; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.3f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 232) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 28; this.defense = 12; this.lifeMax = 42; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 233) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 30; this.defense = 14; this.lifeMax = 38; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.45f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 234) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 32; this.defense = 6; this.lifeMax = 42; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.55f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 235) { this.width = 34; this.height = 32; this.aiStyle = 5; this.damage = 34; this.defense = 4; this.lifeMax = 38; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath1; this.value = 200f; this.noGravity = true; this.buffImmune[20] = true; } else if (this.type == 236) { this.width = 50; this.height = 20; this.aiStyle = 3; this.damage = 50; this.defense = 14; this.lifeMax = 120; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.25f; this.value = 1000f; this.SpawnWithHigherTime(2); this.npcSlots = 0.75f; this.buffImmune[20] = true; } else if (this.type == 237) { this.noGravity = true; this.width = 36; this.height = 36; this.aiStyle = 40; this.damage = 50; this.defense = 14; this.lifeMax = 120; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.25f; this.value = 1000f; this.SpawnWithHigherTime(2); this.npcSlots = 0.75f; this.buffImmune[20] = true; } else if (this.type == 239) { this.width = 50; this.height = 20; this.aiStyle = 3; this.damage = 30; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit20; this.DeathSound = SoundID.NPCDeath23; this.knockBackResist = 0.5f; this.value = 130f; this.SpawnWithHigherTime(2); this.buffImmune[20] = true; } else if (this.type == 240) { this.noGravity = true; this.width = 36; this.height = 36; this.aiStyle = 40; this.damage = 30; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit20; this.DeathSound = SoundID.NPCDeath23; this.knockBackResist = 0.5f; this.value = 130f; this.SpawnWithHigherTime(2); this.buffImmune[20] = true; } else if (this.type == 241) { this.npcSlots = 0.5f; this.noGravity = true; this.width = 18; this.height = 20; this.aiStyle = 16; this.damage = 30; this.defense = 4; this.lifeMax = 20; this.HitSound = SoundID.NPCHit13; this.DeathSound = SoundID.NPCDeath19; this.value = 350f; } else if (this.type == 242) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 75; this.defense = 20; this.lifeMax = 150; this.HitSound = SoundID.NPCHit13; this.DeathSound = SoundID.NPCDeath19; this.value = 800f; this.alpha = 20; } else if (this.type == 243) { this.width = 30; this.height = 114; this.aiStyle = 3; this.damage = 60; this.defense = 32; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit5; this.DeathSound = SoundID.NPCDeath7; this.knockBackResist = 0.05f; this.value = (float) Item.buyPrice(gold: 1, silver: 50); this.buffImmune[20] = true; this.buffImmune[44] = true; this.coldDamage = true; this.rarity = 2; } else if (this.type == 244) { this.width = 60; this.height = 42; this.aiStyle = 1; this.damage = 85; this.defense = 26; this.lifeMax = 400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 175; this.value = (float) Item.buyPrice(silver: 20); this.knockBackResist = 0.3f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 245) { this.width = 140; this.height = 140; this.aiStyle = 45; this.damage = 72; this.defense = 26; this.lifeMax = 9000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.value = (float) Item.buyPrice(gold: 15); this.alpha = (int) byte.MaxValue; this.boss = true; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 246) { this.noGravity = true; this.width = 70; this.height = 70; this.aiStyle = 46; this.damage = 64; this.defense = 20; this.lifeMax = 16000; this.HitSound = SoundID.NPCHit4; this.DeathSound = (LegacySoundStyle) null; this.knockBackResist = 0.0f; this.alpha = (int) byte.MaxValue; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 247 || this.type == 248) { this.noGravity = true; this.width = 40; this.height = 30; this.aiStyle = 47; this.damage = 59; this.defense = 28; this.lifeMax = 7000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.alpha = (int) byte.MaxValue; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 249) { this.noGravity = true; this.width = 70; this.height = 70; this.aiStyle = 48; this.damage = 80; this.defense = 32; this.lifeMax = 11000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.dontTakeDamage = true; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 250) { this.width = 34; this.height = 26; this.aiStyle = 49; this.damage = 50; this.defense = 24; this.lifeMax = 300; this.HitSound = SoundID.NPCHit30; this.DeathSound = SoundID.NPCDeath33; this.knockBackResist = 0.3f; this.value = 300f; this.buffImmune[20] = true; } else if (this.type == 251) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 50; this.defense = 30; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = (float) Item.buyPrice(silver: 50); this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 252) { this.noGravity = true; this.npcSlots = 0.5f; this.width = 32; this.height = 32; this.aiStyle = 5; this.damage = 80; this.defense = 12; this.lifeMax = 100; this.HitSound = SoundID.NPCHit46; this.knockBackResist = 0.7f; this.DeathSound = SoundID.NPCDeath48; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 254) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 40; this.defense = 10; this.lifeMax = 180; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[31] = false; } else if (this.type == (int) byte.MaxValue) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 38; this.defense = 16; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.3f; this.value = 1200f; this.buffImmune[31] = false; } else if (this.type == 256) { this.noGravity = true; this.width = 26; this.height = 26; this.aiStyle = 18; this.damage = 90; this.defense = 20; this.lifeMax = 140; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.value = 1200f; this.alpha = 20; this.npcSlots = 0.3f; } else if (this.type == 257) { this.width = 44; this.height = 34; this.aiStyle = 3; this.damage = 38; this.defense = 24; this.lifeMax = 230; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.3f; this.value = 1300f; this.buffImmune[31] = false; this.npcSlots = 0.3f; } else if (this.type == 258) { this.width = 30; this.height = 24; this.aiStyle = 3; this.damage = 60; this.defense = 16; this.lifeMax = 220; this.HitSound = SoundID.NPCHit45; this.DeathSound = SoundID.NPCDeath47; this.knockBackResist = 0.3f; this.value = 1500f; this.buffImmune[31] = false; this.npcSlots = 0.3f; } else if (this.type == 259) { this.noGravity = true; this.noTileCollide = true; this.width = 20; this.height = 20; this.aiStyle = 13; this.damage = 24; this.defense = 4; this.lifeMax = 90; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath1; this.value = 350f; this.buffImmune[20] = true; this.npcSlots = 0.3f; } else if (this.type == 260) { this.noGravity = true; this.noTileCollide = true; this.width = 36; this.height = 36; this.aiStyle = 13; this.damage = 70; this.defense = 20; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath1; this.value = 1250f; this.buffImmune[20] = true; this.npcSlots = 0.3f; } else if (this.type == 261) { this.width = 12; this.height = 12; this.aiStyle = 50; this.damage = 80; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.npcSlots = 0.0f; } else if (this.type == 262) { this.noTileCollide = true; this.width = 86; this.height = 86; this.aiStyle = 51; this.damage = 50; this.defense = 14; this.lifeMax = 30000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.value = (float) Item.buyPrice(gold: 15); this.noGravity = true; this.boss = true; this.npcSlots = 16f; this.buffImmune[20] = true; } else if (this.type == 263) { this.noTileCollide = true; this.noGravity = true; this.width = 40; this.height = 40; this.aiStyle = 52; this.damage = 60; this.defense = 24; this.lifeMax = 4000; this.dontTakeDamage = true; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.buffImmune[20] = true; } else if (this.type == 264) { this.width = 24; this.height = 24; this.aiStyle = 53; this.damage = 60; this.defense = 20; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.buffImmune[20] = true; } else if (this.type == 265) { this.width = 18; this.height = 18; this.aiStyle = 50; this.damage = 70; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.npcSlots = 0.0f; } else if (this.type == 266) { this.dontTakeDamage = true; this.width = 160; this.height = 110; this.aiStyle = 54; this.damage = 30; this.defense = 14; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath11; this.knockBackResist = 0.5f; this.noGravity = true; this.noTileCollide = true; this.SpawnWithHigherTime(30); this.boss = true; this.value = 50000f; this.npcSlots = 6f; } else if (this.type == 267) { this.width = 30; this.height = 30; this.aiStyle = 55; this.damage = 20; this.defense = 10; this.lifeMax = 100; this.HitSound = SoundID.NPCHit9; this.DeathSound = SoundID.NPCDeath11; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.8f; } else if (this.type == 268) { this.noGravity = true; this.width = 28; this.height = 56; this.aiStyle = 22; this.damage = 55; this.defense = 20; this.lifeMax = 340; this.HitSound = SoundID.NPCHit13; this.DeathSound = SoundID.NPCDeath19; this.knockBackResist = 0.6f; this.value = 450f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 269) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 34; this.lifeMax = 550; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 270) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 55; this.defense = 50; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.2f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 271) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 40; this.lifeMax = 450; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.25f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 272) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 75; this.defense = 28; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.35f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 273) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 45; this.defense = 50; this.lifeMax = 500; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.15f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 274) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 65; this.defense = 34; this.lifeMax = 350; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 275) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 45; this.defense = 50; this.lifeMax = 550; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.15f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 276) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 85; this.defense = 54; this.lifeMax = 500; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.2f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 277) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 32; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[31] = false; } else if (this.type == 278) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 65; this.defense = 48; this.lifeMax = 450; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[31] = false; } else if (this.type == 279) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 40; this.defense = 54; this.lifeMax = 500; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.2f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[31] = false; } else if (this.type == 280) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 75; this.defense = 34; this.lifeMax = 500; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[31] = false; } else if (this.type == 281) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 40; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 282) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 35; this.defense = 28; this.lifeMax = 450; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 283) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 50; this.defense = 18; this.lifeMax = 300; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.55f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 284) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 35; this.defense = 24; this.lifeMax = 450; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 285) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 50; this.defense = 12; this.lifeMax = 200; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.7f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 286) { this.width = 18; this.height = 40; this.aiStyle = 8; this.damage = 60; this.defense = 10; this.lifeMax = 250; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.65f; this.value = 1500f; this.npcSlots = 2f; this.buffImmune[20] = true; } else if (this.type == 287) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 90; this.defense = 42; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 2000f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 1; } else if (this.type == 288) { this.width = 20; this.height = 20; this.aiStyle = 56; this.damage = 70; this.defense = 30; this.lifeMax = 200; this.knockBackResist = 0.2f; this.HitSound = SoundID.NPCHit36; this.DeathSound = SoundID.NPCDeath39; this.value = 500f; this.noTileCollide = true; this.noGravity = true; flag = true; } else if (this.type == 289) { this.width = 44; this.height = 44; this.aiStyle = 10; this.damage = 60; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.noGravity = true; this.noTileCollide = true; this.value = 150f; this.knockBackResist = 0.2f; this.npcSlots = 0.75f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 290) { this.width = 34; this.height = 62; this.aiStyle = 3; this.damage = 100; this.defense = 50; this.lifeMax = 5000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.0f; this.value = 50000f; this.buffImmune[20] = true; this.buffImmune[31] = true; this.rarity = 1; } else if (this.type == 291) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 28; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 292) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 28; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 293) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 28; this.lifeMax = 400; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 294) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 34; this.defense = 6; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.9f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 295) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 28; this.defense = 12; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.7f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 296) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 24; this.defense = 14; this.lifeMax = 120; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 299) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2018; } else if (this.type == 300) { this.width = 14; this.height = 12; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath4; this.npcSlots = 0.25f; this.catchItem = (short) 2003; } else if (this.type == 301) { this.width = 36; this.height = 26; this.aiStyle = 17; this.damage = 12; this.defense = 2; this.lifeMax = 35; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.85f; this.DeathSound = SoundID.NPCDeath1; this.value = 50f; } if (this.type == 302) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 7; this.defense = 2; this.lifeMax = 25; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 304) { this.width = 34; this.height = 28; this.aiStyle = 1; this.damage = 80; this.defense = 20; this.lifeMax = 175; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.scale = 1.1f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.knockBackResist = 0.5f; this.npcSlots = 0.3f; } else if (this.type >= 305 && this.type <= 314) { this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.value = 1200f; this.buffImmune[31] = false; this.npcSlots = 0.5f; if (this.type == 305 || this.type == 310) { this.damage = 60; this.defense = 18; this.lifeMax = 500; this.knockBackResist = 0.4f; } else if (this.type == 306 || this.type == 311) { this.damage = 52; this.defense = 14; this.lifeMax = 400; this.knockBackResist = 0.2f; this.scale = 1.05f; } else if (this.type == 307 || this.type == 312) { this.damage = 78; this.defense = 16; this.lifeMax = 600; this.knockBackResist = 0.25f; this.scale = 0.9f; } else if (this.type == 308 || this.type == 313) { this.damage = 66; this.defense = 14; this.lifeMax = 650; this.knockBackResist = 0.35f; this.scale = 0.95f; } else if (this.type == 309 || this.type == 314) { this.damage = 52; this.defense = 26; this.lifeMax = 450; this.knockBackResist = 0.5f; this.scale = 1.1f; } } else if (this.type == 315) { this.width = 74; this.height = 70; this.aiStyle = 26; this.damage = 130; this.defense = 40; this.lifeMax = 10000; this.HitSound = SoundID.NPCHit12; this.DeathSound = SoundID.NPCDeath18; this.knockBackResist = 0.0f; this.value = 10000f; flag = true; } else if (this.type == 316) { this.noGravity = true; this.noTileCollide = true; this.width = 24; this.height = 44; this.aiStyle = 22; this.damage = 18; this.defense = 8; this.lifeMax = 70; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.alpha = 100; this.value = 90f; flag = true; this.knockBackResist = 0.6f; } else if (this.type == 317) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 16; this.defense = 6; this.lifeMax = 75; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.7f; this.DeathSound = SoundID.NPCDeath1; this.value = 100f; this.buffImmune[31] = false; } else if (this.type == 318) { this.width = 30; this.height = 32; this.aiStyle = 2; this.damage = 20; this.defense = 4; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.65f; this.DeathSound = SoundID.NPCDeath1; this.value = 100f; this.buffImmune[31] = false; } else if (this.type == 319) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 6; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.6f; this.value = 85f; this.buffImmune[31] = false; this.scale = 0.9f; } else if (this.type == 320) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 15; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 105f; this.buffImmune[31] = false; this.scale = 1.05f; } else if (this.type == 321) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 14; this.lifeMax = 34; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 120f; this.buffImmune[31] = false; this.scale = 1.1f; } else if (this.type == 322) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 23; this.defense = 0; this.lifeMax = 115; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.65f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 323) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 18; this.defense = 10; this.lifeMax = 65; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 120f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 324) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 22; this.defense = 10; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.scale = 1.05f; } else if (this.type == 325) { this.width = 164; this.height = 154; this.aiStyle = 57; this.damage = 120; this.defense = 28; this.lifeMax = 12000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.0f; this.value = 10000f; flag = true; } else if (this.type == 326) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 100; this.defense = 32; this.lifeMax = 900; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.2f; this.value = 2000f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 327) { this.width = 100; this.height = 100; this.aiStyle = 58; this.damage = 50; this.defense = 36; this.lifeMax = 22000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.value = 50000f; this.knockBackResist = 0.0f; flag = true; } else if (this.type == 328) { this.width = 80; this.height = 80; this.aiStyle = 59; this.damage = 65; this.defense = 14; this.lifeMax = 5000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; flag = true; this.dontTakeDamage = true; this.npcSlots = 0.0f; this.dontCountMe = true; } else if (this.type == 329) { this.width = 46; this.height = 30; this.aiStyle = 26; this.damage = 80; this.defense = 38; this.lifeMax = 1200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.3f; this.value = 3000f; flag = true; } else if (this.type == 330) { this.noGravity = true; this.noTileCollide = true; this.width = 24; this.height = 44; this.aiStyle = 22; this.damage = 90; this.defense = 44; this.lifeMax = 2000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.alpha = 100; this.value = 4500f; flag = true; this.knockBackResist = 0.4f; } else if (this.type == 331) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } else if (this.type == 332) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } if (this.type == 333) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 7; this.defense = 2; this.lifeMax = 25; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } if (this.type == 334) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 6; this.defense = 2; this.lifeMax = 23; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.scale = 0.9f; this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } if (this.type == 335) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 8; this.defense = 3; this.lifeMax = 29; this.scale = 1.05f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } if (this.type == 336) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 5; this.defense = 1; this.lifeMax = 22; this.scale = 0.85f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 25f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type >= 338 && this.type <= 340) { this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 1200f; this.buffImmune[31] = false; this.npcSlots = 0.5f; if (this.type == 338) { this.damage = 65; this.defense = 18; this.lifeMax = 600; this.knockBackResist = 0.4f; } else if (this.type == 339) { this.damage = 52; this.defense = 24; this.lifeMax = 700; this.knockBackResist = 0.2f; this.scale = 1.05f; } else if (this.type == 340) { this.damage = 78; this.defense = 14; this.lifeMax = 500; this.knockBackResist = 0.25f; this.scale = 0.9f; } } else if (this.type == 341) { this.width = 24; this.height = 24; this.aiStyle = 25; this.damage = 100; this.defense = 32; this.lifeMax = 900; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = (float) Item.buyPrice(silver: 20); this.knockBackResist = 0.25f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 342) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 90; this.defense = 26; this.lifeMax = 750; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.2f; this.value = 1800f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 343) { this.width = 38; this.height = 78; this.aiStyle = 3; this.damage = 140; this.defense = 50; this.lifeMax = 3500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.value = 3000f; this.buffImmune[31] = false; this.npcSlots = 2f; } else if (this.type == 344) { this.width = 172; this.height = 130; this.aiStyle = 57; this.damage = 110; this.defense = 38; this.lifeMax = 13000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.0f; this.value = 10000f; this.buffImmune[20] = true; this.npcSlots = 3f; } else if (this.type == 345) { this.width = 130; this.height = 140; this.aiStyle = 60; this.damage = 120; this.defense = 38; this.lifeMax = 34000; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.0f; this.value = 50000f; this.buffImmune[20] = true; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 5f; this.coldDamage = true; } else if (this.type == 346) { this.width = 112; this.height = 140; this.aiStyle = 61; this.damage = 120; this.defense = 56; this.lifeMax = 18000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.value = 10000f; this.buffImmune[20] = true; this.npcSlots = 4f; } else if (this.type == 347) { this.width = 50; this.height = 50; this.aiStyle = 62; this.damage = 60; this.defense = 28; this.lifeMax = 1200; this.HitSound = SoundID.NPCHit4; this.knockBackResist = 0.4f; this.DeathSound = SoundID.NPCDeath14; this.value = 1000f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 1.5f; } else if (this.type == 348) { this.width = 28; this.height = 76; this.aiStyle = 3; this.damage = 80; this.defense = 26; this.lifeMax = 1800; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.value = 1500f; this.buffImmune[31] = false; this.npcSlots = 1.5f; } else if (this.type == 349) { this.width = 28; this.height = 76; this.aiStyle = 3; this.damage = 100; this.defense = 42; this.lifeMax = 1800; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.1f; this.value = 1500f; this.buffImmune[31] = false; this.npcSlots = 1.5f; } else if (this.type == 350) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 30; this.lifeMax = 900; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.45f; this.value = 900f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 351) { this.width = 18; this.height = 90; this.aiStyle = 3; this.damage = 100; this.defense = 40; this.lifeMax = 2500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.1f; this.value = 3000f; this.buffImmune[20] = true; this.buffImmune[31] = false; this.npcSlots = 1.75f; } else if (this.type == 352) { this.width = 54; this.height = 54; this.aiStyle = 63; this.damage = 75; this.defense = 8; this.lifeMax = 450; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.4f; this.noGravity = true; this.noTileCollide = true; this.npcSlots = 2f; this.coldDamage = true; } else if (this.type == 353) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 354) { this.friendly = true; this.width = 18; this.height = 34; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.scale = 0.9f; this.rarity = 1; } else if (this.type == 355) { this.width = 10; this.height = 10; this.aiStyle = 64; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.2f; this.noGravity = true; this.catchItem = (short) 1992; } else if (this.type == 356) { this.width = 10; this.height = 10; this.aiStyle = 65; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; this.catchItem = (short) 1994; } else if (this.type == 357) { this.width = 10; this.height = 4; this.aiStyle = 66; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.1f; this.catchItem = (short) 2002; this.friendly = true; } else if (this.type == 358) { this.width = 12; this.height = 12; this.aiStyle = 64; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.2f; this.noGravity = true; this.catchItem = (short) 2004; } else if (this.type == 359) { this.width = 12; this.height = 12; this.aiStyle = 67; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.5f; this.noGravity = true; this.catchItem = (short) 2006; } else if (this.type == 360) { this.width = 14; this.height = 14; this.aiStyle = 67; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.5f; this.noGravity = true; this.catchItem = (short) 2007; } else if (this.type == 361) { this.width = 12; this.height = 10; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2121; } else if (this.type == 362) { this.width = 22; this.height = 26; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2122; } else if (this.type == 363) { this.width = 28; this.height = 22; this.aiStyle = 68; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2122; } else if (this.type == 364) { this.width = 22; this.height = 26; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2123; } else if (this.type == 365) { this.width = 28; this.height = 22; this.aiStyle = 68; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2123; } else if (this.type == 366 || this.type == 367) { this.width = 26; this.height = 18; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) (2156 + this.type - 366); } else if (this.type == 368) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 369) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; } else if (this.type == 370) { this.width = 150; this.height = 100; this.aiStyle = 69; this.damage = 100; this.defense = 50; this.lifeMax = 50000; this.knockBackResist = 0.0f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 10f; this.HitSound = SoundID.NPCHit14; this.DeathSound = SoundID.NPCDeath20; this.value = 250000f; this.boss = true; this.netAlways = true; this.SpawnWithHigherTime(30); this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[31] = true; this.buffImmune[44] = true; } else if (this.type == 371) { this.width = 36; this.height = 36; this.aiStyle = 70; this.damage = 100; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.alpha = (int) byte.MaxValue; } else if (this.type == 372) { this.noGravity = true; this.width = 120; this.height = 24; this.aiStyle = 71; this.damage = 100; this.defense = 100; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.alpha = (int) byte.MaxValue; } else if (this.type == 373) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 71; this.damage = 120; this.defense = 100; this.lifeMax = 100; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.alpha = (int) byte.MaxValue; } else if (this.type == 374) { this.width = 20; this.height = 10; this.aiStyle = 66; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.15f; this.catchItem = (short) 2673; this.rarity = 4; } else if (this.type == 375) { this.width = 10; this.height = 10; this.aiStyle = 6; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.npcSlots = 0.15f; this.catchItem = (short) 2673; } else if (this.type == 376) { this.friendly = true; this.width = 34; this.height = 8; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.scale = 0.9f; this.rarity = 1; } else if (this.type == 377) { this.width = 14; this.height = 10; this.aiStyle = 1; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.friendly = true; this.catchItem = (short) 2740; this.npcSlots = 0.1f; } else if (this.type == 378) { this.npcSlots = 1f; this.width = 20; this.height = 26; this.aiStyle = 41; this.damage = 200; this.defense = 30; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.value = 450f; } else if (this.type >= 379 && this.type <= 380) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 45; this.defense = 14; this.lifeMax = 210; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.55f; this.value = 1000f; this.npcSlots = 0.0f; this.lavaImmune = true; this.netAlways = true; this.chaseable = false; } else if (this.type >= 381 && this.type <= 382) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 50; this.defense = 25; this.lifeMax = 350; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.35f; this.value = 1000f; } else if (this.type == 383) { this.lifeMax = 300; this.defense = 50; this.damage = 75; this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit43; this.DeathSound = SoundID.NPCDeath45; this.value = 1200f; this.knockBackResist = 0.25f; this.buffImmune[31] = false; } else if (this.type == 384) { this.lifeMax = 1000; this.width = 18; this.defense = 20; this.height = 40; this.aiStyle = 72; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; flag = true; this.npcSlots = 0.0f; this.noTileCollide = true; this.canGhostHeal = false; } else if (this.type == 385) { this.lifeMax = 750; this.defense = 30; this.damage = 80; this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit43; this.DeathSound = SoundID.NPCDeath45; this.value = 600f; this.knockBackResist = 0.0f; this.npcSlots = 0.75f; } else if (this.type == 386) { this.lifeMax = 400; this.defense = 34; this.damage = 40; this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit43; this.DeathSound = SoundID.NPCDeath45; this.value = 1200f; this.knockBackResist = 0.4f; } else if (this.type == 387) { this.width = 20; this.height = 50; this.aiStyle = 73; this.damage = 10; this.defense = 40; this.lifeMax = 200; this.HitSound = SoundID.NPCHit53; this.DeathSound = SoundID.NPCDeath56; this.knockBackResist = 0.0f; this.buffImmune[31] = true; this.canGhostHeal = false; } else if (this.type == 388) { this.width = 40; this.height = 30; this.aiStyle = 74; this.damage = 60; this.defense = 16; this.lifeMax = 300; this.HitSound = SoundID.NPCHit42; this.knockBackResist = 0.4f; this.DeathSound = SoundID.NPCDeath44; this.value = 1000f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 1.5f; this.canGhostHeal = false; } else if (this.type == 389) { this.lifeMax = 600; this.defense = 38; this.damage = 75; this.width = 18; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit39; this.DeathSound = SoundID.NPCDeath57; this.value = 1200f; this.npcSlots = 0.5f; this.knockBackResist = 0.3f; } else if (this.type == 390) { this.damage = 65; this.defense = 30; this.lifeMax = 350; this.width = 18; this.height = 40; this.aiStyle = 75; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 1200f; this.npcSlots = 0.5f; } else if (this.type == 391) { this.lifeMax = 600; this.defense = 30; this.damage = 85; this.width = 60; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit51; this.DeathSound = SoundID.NPCDeath54; this.value = 1200f; this.npcSlots = 0.5f; this.knockBackResist = 0.1f; } else if (this.type == 392) { this.lifeMax = 100; this.defense = 100; this.damage = 50; this.width = 150; this.height = 80; this.aiStyle = 75; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.dontTakeDamage = true; flag = true; this.netAlways = true; } else if (this.type == 393) { this.lifeMax = 5000; this.defense = 20; this.damage = 60; this.width = 40; this.height = 16; this.aiStyle = 75; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 1f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.netAlways = true; } else if (this.type == 394) { this.lifeMax = 3500; this.defense = 20; this.damage = 60; this.width = 46; this.height = 36; this.aiStyle = 75; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 1f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.netAlways = true; } else if (this.type == 395) { this.lifeMax = 10000; this.defense = 0; this.damage = 80; this.width = 46; this.height = 36; this.aiStyle = 76; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 6f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.dontTakeDamage = true; this.boss = true; flag = true; this.netAlways = true; } else if (this.type == 399) { this.defense = 5; this.damage = 5; this.lifeMax = 500; this.aiStyle = 80; this.width = 42; this.height = 72; this.value = 0.0f; this.knockBackResist = 0.0f; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.npcSlots = 0.0f; this.noGravity = true; this.SpawnWithHigherTime(30); this.chaseable = false; this.netAlways = true; this.rarity = 1; } else if (this.type == 396) { this.lifeMax = 45000; this.defense = 50; this.damage = 0; this.width = 38; this.height = 56; this.aiStyle = 79; this.HitSound = SoundID.NPCHit57; this.DeathSound = SoundID.NPCDeath62; this.value = 0.0f; this.npcSlots = 6f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.boss = true; this.hide = true; this.netAlways = true; } else if (this.type == 397) { this.lifeMax = 25000; this.defense = 40; this.damage = 0; this.width = 46; this.height = 66; this.aiStyle = 78; this.HitSound = SoundID.NPCHit57; this.DeathSound = SoundID.NPCDeath62; this.value = 0.0f; this.npcSlots = 6f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.boss = true; this.hide = true; this.netAlways = true; } else if (this.type == 398) { this.lifeMax = 50000; this.defense = 70; this.damage = 0; this.width = 46; this.height = 66; this.aiStyle = 77; this.HitSound = SoundID.NPCHit57; this.DeathSound = (LegacySoundStyle) null; this.value = 1000000f; this.npcSlots = 6f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.dontTakeDamage = true; this.boss = true; this.behindTiles = true; this.hide = true; this.netAlways = true; } else if (this.type == 400) { this.defense = 0; this.damage = 60; this.lifeMax = 100; this.aiStyle = 81; this.width = 60; this.height = 60; this.value = 0.0f; this.knockBackResist = 0.0f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.0f; this.noGravity = true; this.dontTakeDamage = true; this.noTileCollide = true; this.netAlways = true; } else if (this.type == 401) { this.lifeMax = 400; this.defense = 0; this.damage = 0; this.width = 30; this.height = 30; this.aiStyle = 82; this.HitSound = SoundID.NPCHit57; this.DeathSound = SoundID.NPCDeath62; this.value = 0.0f; this.npcSlots = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.hide = true; } else if (this.type == 437) { this.lifeMax = 400; this.defense = 0; this.damage = 0; this.width = 54; this.height = 54; this.aiStyle = 83; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; this.dontTakeDamage = true; this.netAlways = true; this.chaseable = false; } else if (this.type == 438) { this.lifeMax = 400; this.defense = 0; this.damage = 0; this.width = 22; this.height = 40; this.aiStyle = 83; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.npcSlots = 0.0f; this.knockBackResist = 0.0f; this.lavaImmune = true; this.netAlways = true; this.chaseable = false; } else if (this.type == 439) { this.width = 24; this.height = 50; this.aiStyle = 84; this.damage = 50; this.defense = 42; this.lifeMax = 32000; this.knockBackResist = 0.0f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 10f; this.HitSound = SoundID.NPCHit55; this.DeathSound = SoundID.NPCDeath59; this.value = 100000f; this.boss = true; this.netAlways = true; this.SpawnWithHigherTime(30); flag = true; } else if (this.type == 440) { this.width = 24; this.height = 50; this.aiStyle = 84; this.damage = 0; this.defense = 35; this.lifeMax = 10000; this.knockBackResist = 0.0f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 0.0f; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.netAlways = true; this.SpawnWithHigherTime(30); flag = true; this.chaseable = false; } else if (this.type == 442) { this.width = 14; this.height = 14; this.aiStyle = 24; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2889; this.npcSlots = 0.4f; this.rarity = 3; } else if (this.type == 443) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2890; this.rarity = 3; } else if (this.type == 444) { this.width = 10; this.height = 10; this.aiStyle = 65; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; this.catchItem = (short) 2891; this.rarity = 3; } else if (this.type == 445) { this.width = 12; this.height = 10; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 2892; this.rarity = 3; } else if (this.type == 446) { this.width = 14; this.height = 10; this.aiStyle = 1; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.friendly = true; this.catchItem = (short) 2893; this.npcSlots = 0.1f; this.rarity = 3; } else if (this.type == 447) { this.width = 14; this.height = 12; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath4; this.npcSlots = 0.25f; this.catchItem = (short) 2894; this.rarity = 3; } else if (this.type == 448) { this.width = 10; this.height = 4; this.aiStyle = 66; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.1f; this.catchItem = (short) 2895; this.friendly = true; this.rarity = 3; } else if (this.type == 449) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 100f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 450) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 12; this.lifeMax = 55; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 130f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 451) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 18; this.defense = 8; this.lifeMax = 65; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 120f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 452) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 22; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 110f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 453) { this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 30; this.lifeMax = 250; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.npcSlots = 7f; this.rarity = 1; } else if (this.type == 454) { this.noTileCollide = true; this.npcSlots = 5f; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 80; this.defense = 10; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit56; this.DeathSound = SoundID.NPCDeath60; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 0.0f; this.scale = 1f; flag = true; this.alpha = (int) byte.MaxValue; } else if (this.type == 459) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit56; this.DeathSound = SoundID.NPCDeath60; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 0.0f; this.scale = 1f; flag = true; this.alpha = (int) byte.MaxValue; this.dontCountMe = true; } else if (this.type == 455 || this.type == 456 || this.type == 457 || this.type == 458) { this.noTileCollide = true; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 40; this.defense = 20; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit56; this.DeathSound = SoundID.NPCDeath60; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 0.0f; this.scale = 1f; flag = true; this.alpha = (int) byte.MaxValue; this.dontCountMe = true; } else if (this.type == 464) { this.width = 18; this.height = 20; this.aiStyle = 3; this.damage = 21; this.defense = 5; this.lifeMax = 75; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 465) { this.noGravity = true; this.width = 18; this.height = 20; this.aiStyle = 16; this.damage = 31; this.defense = 7; this.lifeMax = 110; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; } else if (this.type == 470) { this.width = 16; this.height = 34; this.aiStyle = 3; this.damage = 21; this.defense = 5; this.lifeMax = 75; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 500f; this.buffImmune[31] = false; } else if (this.type == 473 || this.type == 474 || this.type == 475 || this.type == 476) { this.width = 28; this.height = 44; this.aiStyle = 87; this.damage = 90; this.defense = 34; this.lifeMax = 3500; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 30000f; this.knockBackResist = 0.1f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.rarity = 5; } else if (this.type == 480) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 30; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.15f; this.value = 1000f; this.rarity = 1; } else if (this.type == 481) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 22; this.defense = 10; this.lifeMax = 70; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.4f; this.value = 300f; this.buffImmune[31] = false; this.buffImmune[20] = true; } else if (this.type == 482) { this.width = 28; this.height = 48; this.aiStyle = 3; this.damage = 30; this.defense = 18; this.lifeMax = 110; this.HitSound = SoundID.NPCHit41; this.DeathSound = SoundID.NPCDeath43; this.knockBackResist = 0.35f; this.value = 500f; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 483) { this.npcSlots = 0.5f; this.width = 20; this.height = 30; this.aiStyle = 91; this.damage = 24; this.defense = 8; this.lifeMax = 40; this.HitSound = SoundID.NPCHit7; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath6; this.value = 1000f; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type >= 484 && this.type <= 487) { this.width = 10; this.height = 4; this.aiStyle = 66; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.1f; this.catchItem = (short) (3191 + this.type - 484); this.friendly = true; } else if (this.type == 488) { this.width = 18; this.height = 40; this.aiStyle = 92; this.damage = 0; this.defense = 0; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit15; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.0f; this.value = 0.0f; this.immortal = true; this.netAlways = true; } else if (this.type == 489) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 8; this.lifeMax = 75; this.HitSound = SoundID.NPCHit18; this.DeathSound = SoundID.NPCDeath21; this.knockBackResist = 0.4f; this.value = 150f; this.buffImmune[31] = false; } else if (this.type == 490) { this.noGravity = true; this.width = 28; this.height = 30; this.aiStyle = 22; this.damage = 28; this.defense = 14; this.lifeMax = 50; this.HitSound = SoundID.NPCHit19; this.knockBackResist = 0.6f; this.DeathSound = SoundID.NPCDeath22; this.value = 150f; this.buffImmune[31] = false; } else if (this.type == 491) { this.noGravity = true; this.width = 350; this.height = 120; this.aiStyle = 93; this.damage = 0; this.defense = 100; this.lifeMax = 50; this.HitSound = SoundID.NPCHit19; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath22; this.value = 0.0f; flag = true; this.dontTakeDamage = true; this.netAlways = true; } else if (this.type == 492) { this.lifeMax = 2000; this.defense = 20; this.damage = 30; this.width = 30; this.height = 30; this.aiStyle = 75; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.value = 0.0f; this.npcSlots = 1f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.hide = true; this.netAlways = true; } else if (this.type >= 494 && this.type <= 495) { this.width = 28; this.height = 22; this.aiStyle = 3; this.damage = 28; this.defense = 6; this.lifeMax = 50; this.HitSound = SoundID.NPCHit33; this.DeathSound = SoundID.NPCDeath36; this.value = 120f; } else if (this.type >= 496 && this.type <= 497) { this.width = 28; this.height = 22; this.aiStyle = 39; this.damage = 16; this.defense = 12; this.lifeMax = 50; this.HitSound = SoundID.NPCHit38; this.DeathSound = SoundID.NPCDeath41; this.knockBackResist = 0.75f; this.value = 120f; } else if (this.type >= 498 && this.type <= 506) { this.width = 24; this.height = 44; this.aiStyle = 3; this.damage = 18; this.defense = 10; this.lifeMax = 65; this.HitSound = SoundID.NPCHit50; this.DeathSound = SoundID.NPCDeath53; this.knockBackResist = 0.45f; this.value = 120f; this.buffImmune[31] = false; } else if (this.type == 441) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 513) { this.npcSlots = 4f; this.width = 22; this.height = 22; this.aiStyle = 6; this.damage = 18; this.defense = 0; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 130f; } else if (this.type == 514) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 7; this.defense = 16; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 130f; this.dontCountMe = true; this.npcSlots = 0.0f; } else if (this.type == 515) { this.width = 22; this.height = 22; this.aiStyle = 6; this.netAlways = true; this.damage = 7; this.defense = 20; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 130f; this.dontCountMe = true; this.npcSlots = 0.0f; } else if (this.type == 510) { this.npcSlots = 5f; this.width = 34; this.height = 34; this.aiStyle = 6; this.damage = 58; this.defense = 18; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; } else if (this.type == 511) { this.width = 34; this.height = 34; this.aiStyle = 6; this.netAlways = true; this.damage = 54; this.defense = 28; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; this.dontCountMe = true; this.npcSlots = 0.0f; } else if (this.type == 512) { this.width = 34; this.height = 34; this.aiStyle = 6; this.netAlways = true; this.damage = 50; this.defense = 34; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = 700f; this.dontCountMe = true; this.npcSlots = 0.0f; } else if (this.type == 508) { this.width = 50; this.height = 31; this.aiStyle = 3; this.damage = 38; this.defense = 22; this.lifeMax = 110; this.HitSound = SoundID.NPCHit31; this.DeathSound = SoundID.NPCDeath34; this.knockBackResist = 0.4f; this.value = 175f; this.buffImmune[31] = false; } else if (this.type == 509) { this.width = 40; this.height = 31; this.aiStyle = 44; this.damage = 34; this.defense = 18; this.lifeMax = 90; this.knockBackResist = 0.3f; this.HitSound = SoundID.NPCHit32; this.DeathSound = SoundID.NPCDeath35; this.value = 1775f; this.buffImmune[31] = false; } else if (this.type == 580) { this.width = 26; this.height = 26; this.aiStyle = 3; this.damage = 25; this.defense = 10; this.lifeMax = 80; this.HitSound = SoundID.NPCHit31; this.DeathSound = SoundID.NPCDeath34; this.knockBackResist = 0.5f; this.value = 80f; this.buffImmune[31] = false; this.npcSlots = 0.8f; } else if (this.type == 581) { this.width = 30; this.height = 22; this.aiStyle = 44; this.damage = 29; this.defense = 8; this.lifeMax = 60; this.knockBackResist = 0.5f; this.HitSound = SoundID.NPCHit32; this.DeathSound = SoundID.NPCDeath35; this.value = 90f; this.buffImmune[31] = false; this.npcSlots = 0.8f; } else if (this.type >= 524 && this.type <= 527) { this.width = 24; this.height = 44; this.aiStyle = 3; this.damage = 50; this.defense = 26; this.lifeMax = 180; this.HitSound = SoundID.NPCHit37; this.DeathSound = SoundID.NPCDeath40; this.knockBackResist = 0.6f; this.value = 500f; this.buffImmune[31] = false; this.npcSlots = 0.5f; switch (this.type) { case 525: this.lifeMax += 70; this.defense += 4; this.damage += 10; this.knockBackResist -= 0.1f; this.value += 150f; break; case 526: this.lifeMax += 40; this.defense += 6; this.damage += 14; this.knockBackResist -= 0.1f; this.value += 150f; break; case 527: this.lifeMax += 120; this.defense += 6; this.damage += 4; this.knockBackResist -= 0.2f; this.value += 250f; break; } } else if (this.type >= 528 && this.type <= 529) { this.width = 24; this.height = 44; this.aiStyle = 3; this.damage = 52; this.defense = 28; this.lifeMax = 350; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.35f; this.value = 600f; this.buffImmune[31] = false; } else if (this.type == 530) { this.width = 50; this.height = 20; this.aiStyle = 3; this.damage = 66; this.defense = 24; this.lifeMax = 320; this.HitSound = SoundID.NPCHit13; this.DeathSound = SoundID.NPCDeath19; this.knockBackResist = 0.5f; this.value = 600f; this.SpawnWithHigherTime(2); this.buffImmune[20] = true; this.buffImmune[70] = true; } else if (this.type == 531) { this.noGravity = true; this.width = 36; this.height = 36; this.aiStyle = 40; this.damage = 66; this.defense = 24; this.lifeMax = 320; this.HitSound = SoundID.NPCHit13; this.DeathSound = SoundID.NPCDeath19; this.knockBackResist = 0.5f; this.value = 600f; this.SpawnWithHigherTime(2); this.buffImmune[20] = true; this.buffImmune[70] = true; } else if (this.type == 532) { this.width = 32; this.height = 31; this.aiStyle = 3; this.damage = 65; this.defense = 34; this.lifeMax = 270; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 800f; this.buffImmune[31] = false; this.npcSlots = 0.75f; } else if (this.type == 533) { this.width = 28; this.height = 62; this.aiStyle = 8; this.damage = 40; this.defense = 20; this.lifeMax = 220; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.0f; this.value = 1200f; this.npcSlots = 2f; flag = true; } else if (this.type == 493) { this.lifeMax = 20000; this.defense = 20; this.damage = 0; this.width = 130; this.height = 270; this.aiStyle = 94; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.npcSlots = 0.0f; } else if (this.type == 402) { this.noTileCollide = true; this.npcSlots = 1f; this.width = 32; this.height = 32; this.aiStyle = 6; this.netAlways = true; this.damage = 80; this.defense = 10; this.lifeMax = 1200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 0.0f; this.scale = 1f; flag = true; } else if (this.type == 405) { this.width = 44; this.height = 44; this.aiStyle = 85; this.damage = 120; this.defense = 50; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.noGravity = true; this.buffImmune[31] = true; this.npcSlots = 2f; } else if (this.type == 406) { this.width = 22; this.height = 22; this.aiStyle = 95; this.damage = 70; this.defense = 0; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.noGravity = true; this.buffImmune[31] = true; } else if (this.type == 411) { this.width = 22; this.height = 56; this.aiStyle = 3; this.damage = 80; this.defense = 34; this.lifeMax = 700; this.HitSound = SoundID.NPCHit6; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.buffImmune[31] = false; } else if (this.type == 409) { this.width = 34; this.height = 42; this.aiStyle = 3; this.damage = 70; this.defense = 40; this.lifeMax = 800; this.HitSound = SoundID.NPCHit6; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; this.buffImmune[31] = false; this.npcSlots = 3f; } else if (this.type == 410) { this.width = 22; this.height = 22; this.aiStyle = 26; this.damage = 80; this.defense = 10; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.3f; this.buffImmune[31] = false; this.npcSlots = 0.5f; } else if (this.type == 407) { this.width = 40; this.height = 60; this.aiStyle = 96; this.damage = 70; this.defense = 38; this.lifeMax = 1500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.03f; this.buffImmune[31] = true; this.npcSlots = 3f; } else if (this.type == 507) { this.lifeMax = 20000; this.defense = 20; this.damage = 0; this.width = 130; this.height = 270; this.aiStyle = 94; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.npcSlots = 0.0f; } else if (this.type == 423) { this.width = 50; this.height = 44; this.aiStyle = 26; this.damage = 90; this.defense = 46; this.lifeMax = 850; this.HitSound = SoundID.NPCHit6; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.2f; flag = true; this.npcSlots = 1f; } else if (this.type == 421) { this.width = 44; this.height = 44; this.aiStyle = 85; this.damage = 70; this.defense = 34; this.lifeMax = 330; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.noGravity = true; this.buffImmune[31] = true; this.npcSlots = 1f; } else if (this.type == 424) { this.width = 22; this.height = 56; this.aiStyle = 3; this.damage = 80; this.defense = 30; this.lifeMax = 700; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.6f; this.buffImmune[31] = false; this.npcSlots = 2f; } else if (this.type == 420) { this.width = 40; this.height = 40; this.aiStyle = 97; this.damage = 75; this.defense = 20; this.lifeMax = 1300; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.noTileCollide = true; this.noGravity = true; this.npcSlots = 3f; } else if (this.type == 422) { this.lifeMax = 20000; this.defense = 20; this.damage = 0; this.width = 130; this.height = 270; this.aiStyle = 94; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.npcSlots = 0.0f; } else if (this.type == 425) { this.width = 30; this.height = 56; this.aiStyle = 3; this.damage = 100; this.defense = 40; this.lifeMax = 800; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.4f; this.buffImmune[31] = false; } else if (this.type == 429) { this.width = 22; this.height = 56; this.aiStyle = 3; this.damage = 90; this.defense = 34; this.lifeMax = 700; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath5; this.knockBackResist = 0.6f; this.buffImmune[31] = false; this.npcSlots = 2f; } else if (this.type == 428) { this.width = 24; this.height = 26; this.aiStyle = 3; this.damage = 50; this.defense = 6; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; } else if (this.type == 427) { this.width = 40; this.height = 28; this.aiStyle = 3; this.damage = 75; this.defense = 20; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.buffImmune[31] = false; this.npcSlots = 0.5f; } else if (this.type == 426) { this.width = 50; this.height = 62; this.aiStyle = 3; this.damage = 100; this.defense = 44; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.3f; this.buffImmune[31] = false; } else if (this.type == 517) { this.lifeMax = 20000; this.defense = 20; this.damage = 0; this.width = 130; this.height = 270; this.aiStyle = 94; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.npcSlots = 0.0f; } else if (this.type == 412) { this.width = 20; this.height = 20; this.aiStyle = 6; this.netAlways = true; this.damage = 150; this.defense = 1000; this.lifeMax = 10000; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath22; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.dontTakeDamage = true; this.npcSlots = 2f; } else if (this.type == 413) { this.width = 20; this.height = 20; this.aiStyle = 6; this.netAlways = true; this.damage = 100; this.defense = 1000; this.lifeMax = 10000; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath22; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.dontCountMe = true; this.dontTakeDamage = true; this.npcSlots = 0.0f; } else if (this.type == 414) { this.width = 20; this.height = 20; this.aiStyle = 6; this.netAlways = true; this.damage = 50; this.defense = 0; this.lifeMax = 10000; this.HitSound = SoundID.NPCHit8; this.DeathSound = SoundID.NPCDeath22; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.dontCountMe = true; this.takenDamageMultiplier = 10f; this.npcSlots = 0.0f; } else if (this.type == 415) { this.lifeMax = 800; this.defense = 32; this.damage = 55; this.width = 60; this.height = 40; this.aiStyle = 3; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.2f; } else if (this.type == 416) { this.damage = 80; this.defense = 28; this.lifeMax = 800; this.width = 18; this.height = 40; this.aiStyle = 75; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.2f; } else if (this.type == 518) { this.lifeMax = 1000; this.defense = 28; this.damage = 80; this.width = 22; this.height = 56; this.aiStyle = 3; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; } else if (this.type == 417) { this.npcSlots = 2f; this.width = 46; this.height = 52; this.aiStyle = 39; this.damage = 80; this.defense = 34; this.lifeMax = 700; this.HitSound = SoundID.NPCHit7; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath5; } else if (this.type == 418) { this.width = 38; this.height = 38; this.aiStyle = 74; this.damage = 70; this.defense = 26; this.lifeMax = 600; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.2f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; } else if (this.type == 419) { this.lifeMax = 800; this.defense = 30; this.damage = 90; this.width = 22; this.height = 56; this.aiStyle = 3; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.4f; } else if (this.type == 516) { this.width = 26; this.height = 26; this.aiStyle = 9; this.damage = 100; this.defense = 0; this.lifeMax = 1; this.HitSound = (LegacySoundStyle) null; this.DeathSound = (LegacySoundStyle) null; this.noGravity = true; this.noTileCollide = false; this.alpha = 0; this.knockBackResist = 0.0f; } else if (this.type == 519) { this.width = 26; this.height = 26; this.aiStyle = 99; this.damage = 120; this.defense = 0; this.lifeMax = 1; this.HitSound = (LegacySoundStyle) null; this.DeathSound = (LegacySoundStyle) null; this.noGravity = true; this.noTileCollide = false; this.alpha = 0; this.knockBackResist = 0.0f; } else if (this.type == 162) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 65; this.defense = 18; this.lifeMax = 350; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.3f; this.value = 600f; this.buffImmune[31] = false; } else if (this.type == 166) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 26; this.lifeMax = 450; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.2f; this.value = 1000f; this.buffImmune[31] = false; this.buffImmune[20] = true; } else if (this.type == 253) { this.noGravity = true; this.noTileCollide = true; this.width = 24; this.height = 44; this.aiStyle = 22; this.damage = 80; this.defense = 22; this.lifeMax = 700; this.HitSound = SoundID.NPCHit49; this.DeathSound = SoundID.NPCDeath51; this.alpha = 100; this.value = 1500f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.6f; } else if (this.type == 158) { this.npcSlots = 2f; this.width = 22; this.height = 22; this.aiStyle = 14; this.damage = 60; this.defense = 32; this.lifeMax = 750; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.75f; this.DeathSound = SoundID.NPCDeath6; this.value = 5000f; this.buffImmune[31] = false; } else if (this.type == 159) { this.npcSlots = 2f; this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 80; this.defense = 24; this.lifeMax = 750; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.4f; this.value = 5000f; this.buffImmune[31] = false; } else if (this.type == 460) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 30; this.lifeMax = 700; this.HitSound = SoundID.NPCHit7; this.DeathSound = SoundID.NPCDeath17; this.knockBackResist = 0.25f; this.value = 1000f; this.buffImmune[31] = false; } else if (this.type == 461) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 22; this.lifeMax = 400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 1000f; } else if (this.type == 462) { this.width = 20; this.height = 24; this.aiStyle = 3; this.damage = 70; this.defense = 14; this.lifeMax = 270; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.7f; this.value = 600f; this.buffImmune[31] = false; this.npcSlots = 0.5f; } else if (this.type == 463) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 100; this.defense = 34; this.lifeMax = 4000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.1f; this.value = 3000f; } else if (this.type == 466) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 70; this.defense = 40; this.lifeMax = 550; this.HitSound = SoundID.NPCHit48; this.DeathSound = SoundID.NPCDeath50; this.knockBackResist = 0.5f; this.value = 1500f; } else if (this.type == 467) { this.width = 22; this.height = 22; this.aiStyle = 85; this.damage = 100; this.defense = 80; this.lifeMax = 350; this.HitSound = SoundID.NPCHit34; this.DeathSound = SoundID.NPCDeath37; this.value = 900f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.knockBackResist = 0.7f; this.noGravity = true; } else if (this.type == 469) { this.width = 38; this.height = 26; this.aiStyle = 3; this.damage = 68; this.defense = 28; this.lifeMax = 600; this.HitSound = SoundID.NPCHit47; this.DeathSound = SoundID.NPCDeath49; this.knockBackResist = 0.35f; this.value = 1300f; } else if (this.type == 468) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 65; this.defense = 24; this.lifeMax = 500; this.HitSound = SoundID.NPCHit35; this.DeathSound = SoundID.NPCDeath38; this.knockBackResist = 0.6f; this.value = 1300f; } else if (this.type == 477) { this.noGravity = true; this.netAlways = true; this.width = 80; this.height = 50; this.aiStyle = 88; this.damage = 80; this.defense = 30; this.lifeMax = 6000; this.HitSound = SoundID.NPCHit44; this.DeathSound = SoundID.NPCDeath46; this.value = 50000f; this.knockBackResist = 0.2f; this.buffImmune[20] = true; this.rarity = 1; } else if (this.type == 478) { this.width = 34; this.height = 34; this.aiStyle = 89; this.damage = 0; this.defense = 30; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.7f; flag = true; this.npcSlots = 0.0f; } else if (this.type == 479) { this.width = 46; this.height = 30; this.aiStyle = 90; this.damage = 50; this.defense = 14; this.lifeMax = 700; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 0.0f; this.npcSlots = 0.1f; } else if (this.type == 26) { this.scale = 0.9f; this.width = 18; this.height = 38; this.aiStyle = 3; this.damage = 12; this.defense = 4; this.lifeMax = 60; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.8f; this.value = 100f; this.buffImmune[31] = false; } else if (this.type == 27) { this.scale = 0.95f; this.width = 18; this.height = 38; this.aiStyle = 3; this.damage = 20; this.defense = 6; this.lifeMax = 80; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.7f; this.value = 200f; this.buffImmune[31] = false; } else if (this.type == 28) { this.scale = 1.1f; this.width = 18; this.height = 38; this.aiStyle = 3; this.damage = 25; this.defense = 8; this.lifeMax = 110; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.value = 150f; this.buffImmune[31] = false; } else if (this.type == 29) { this.width = 18; this.height = 38; this.aiStyle = 8; this.damage = 20; this.defense = 2; this.lifeMax = 40; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.6f; this.value = 200f; } else if (this.type == 30) { this.width = 16; this.height = 16; this.aiStyle = 9; this.damage = 20; this.defense = 0; this.lifeMax = 1; this.HitSound = SoundID.NPCHit3; this.DeathSound = SoundID.NPCDeath3; this.noGravity = true; this.noTileCollide = true; this.alpha = 100; this.knockBackResist = 0.0f; } else if (this.type == 111) { this.scale = 0.95f; this.width = 18; this.height = 38; this.aiStyle = 3; this.damage = 20; this.defense = 6; this.lifeMax = 80; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.7f; this.value = 200f; this.buffImmune[31] = false; } else if (this.type == 471) { this.width = 18; this.height = 38; this.aiStyle = 3; this.damage = 80; this.defense = 26; this.lifeMax = 2000; this.HitSound = SoundID.NPCHit40; this.DeathSound = SoundID.NPCDeath42; this.knockBackResist = 0.15f; this.value = 5000f; flag = true; this.rarity = 1; } else if (this.type == 472) { this.width = 40; this.height = 24; this.aiStyle = 86; this.damage = 50; this.defense = 18; this.lifeMax = 180; this.HitSound = SoundID.NPCHit52; this.DeathSound = SoundID.NPCDeath55; this.knockBackResist = 0.0f; this.value = 0.0f; flag = true; this.npcSlots = 0.1f; } else if (this.type == 520) { this.width = 34; this.height = 110; this.aiStyle = 3; this.damage = 60; this.defense = 40; this.lifeMax = 2000; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath14; this.knockBackResist = 0.0f; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 521) { this.width = 60; this.height = 60; this.aiStyle = 86; this.damage = 90; this.defense = 30; this.lifeMax = 2000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.0f; flag = true; } else if (this.type == 522) { this.width = 26; this.height = 26; this.aiStyle = 100; this.damage = 120; this.defense = 0; this.lifeMax = 1; this.HitSound = (LegacySoundStyle) null; this.DeathSound = (LegacySoundStyle) null; this.noGravity = true; this.noTileCollide = true; this.alpha = 0; this.knockBackResist = 0.0f; this.chaseable = false; } else if (this.type == 523) { this.width = 42; this.height = 42; this.aiStyle = 101; this.damage = 30; this.defense = 0; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.noGravity = true; this.noTileCollide = true; this.alpha = 0; this.knockBackResist = 0.0f; this.chaseable = false; this.alpha = (int) byte.MaxValue; this.canGhostHeal = false; } else if (this.type == 534) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.3f; this.value = 0.0f; this.buffImmune[31] = false; this.lavaImmune = true; this.netAlways = true; this.rarity = 1; } else if (this.type == 535) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 14; this.defense = 5; this.lifeMax = 50; this.scale = 1.1f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 0; this.value = 40f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 536) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 8; this.lifeMax = 200; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 1000f; this.buffImmune[31] = false; this.rarity = 2; } else if (this.type == 537) { this.npcSlots = 2f; this.width = 30; this.height = 24; this.aiStyle = 1; this.damage = 15; this.defense = 5; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.alpha = 50; this.color = new Color((int) byte.MaxValue, 250, 0, 0) * 0.2f; this.value = 75f; this.knockBackResist = 0.7f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 538) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 3563; } else if (this.type == 539) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 3564; this.rarity = 3; } else if (this.type == 541) { this.width = 30; this.height = 76; this.aiStyle = 102; this.damage = 40; this.defense = 30; this.lifeMax = 5000; this.HitSound = SoundID.NPCHit23; this.DeathSound = SoundID.NPCDeath39; this.knockBackResist = 0.05f; this.value = (float) Item.buyPrice(gold: 1, silver: 50); this.buffImmune[20] = true; this.buffImmune[44] = true; this.rarity = 2; } else if (this.type == 542) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 103; this.damage = 50; this.defense = 20; this.lifeMax = 360; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 400f; this.knockBackResist = 0.9f; this.behindTiles = true; } else if (this.type == 543) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 103; this.damage = 60; this.defense = 24; this.lifeMax = 380; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 400f; this.knockBackResist = 0.8f; this.behindTiles = true; } else if (this.type == 544) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 103; this.damage = 64; this.defense = 22; this.lifeMax = 400; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 400f; this.knockBackResist = 0.8f; this.behindTiles = true; } else if (this.type == 545) { this.noGravity = true; this.width = 100; this.height = 24; this.aiStyle = 103; this.damage = 54; this.defense = 26; this.lifeMax = 450; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 400f; this.knockBackResist = 0.7f; this.behindTiles = true; } else if (this.type == 546) { this.width = 30; this.height = 30; this.aiStyle = 26; this.damage = 30; this.defense = 6; this.lifeMax = 50; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 0.8f; this.value = 100f; } else if (this.type == 547) { this.width = 16; this.height = 16; this.aiStyle = 104; this.defense = 10; this.lifeMax = 10; this.HitSound = SoundID.NPCHit11; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 1f; this.noGravity = true; this.noTileCollide = true; } else if (this.type == 548) { this.width = 40; this.height = 40; this.aiStyle = 105; this.defense = 14; this.lifeMax = 1000; this.HitSound = SoundID.DD2_CrystalCartImpact; this.DeathSound = SoundID.NPCDeath15; this.knockBackResist = 0.0f; this.friendly = true; this.npcSlots = 0.0f; this.hide = true; if (Main.hardMode && NPC.downedMechBossAny) { this.defense = 18; this.lifeMax = 3000; } if (NPC.downedGolemBoss && Main.hardMode) { this.defense = 20; this.lifeMax = 5000; } this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 549) { this.lifeMax = 5; this.defense = 20; this.damage = 0; this.width = 78; this.height = 130; this.aiStyle = 106; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.value = 0.0f; this.knockBackResist = 0.0f; this.noGravity = true; this.noTileCollide = true; flag = true; this.npcSlots = 0.0f; this.behindTiles = true; this.dontTakeDamage = true; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 552) { this.lifeMax = 30; this.defense = 14; this.damage = 18; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinHurt; this.DeathSound = SoundID.DD2_GoblinDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 553) { this.lifeMax = 170; this.defense = 20; this.damage = 46; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinHurt; this.DeathSound = SoundID.DD2_GoblinDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 554) { this.lifeMax = 560; this.defense = 28; this.damage = 70; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinHurt; this.DeathSound = SoundID.DD2_GoblinDeath; this.knockBackResist = 0.15f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 561) { this.lifeMax = 60; this.defense = 18; this.damage = 30; this.width = 26; this.height = 52; this.aiStyle = 107; this.HitSound = SoundID.DD2_JavelinThrowersHurt; this.DeathSound = SoundID.DD2_JavelinThrowersDeath; this.knockBackResist = 0.1f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 562) { this.lifeMax = 300; this.defense = 28; this.damage = 60; this.width = 26; this.height = 52; this.aiStyle = 107; this.HitSound = SoundID.DD2_JavelinThrowersHurt; this.DeathSound = SoundID.DD2_JavelinThrowersDeath; this.knockBackResist = 0.1f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 563) { this.lifeMax = 1000; this.defense = 38; this.damage = 80; this.width = 26; this.height = 52; this.aiStyle = 107; this.HitSound = SoundID.DD2_JavelinThrowersHurt; this.DeathSound = SoundID.DD2_JavelinThrowersDeath; this.knockBackResist = 0.05f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 555) { this.lifeMax = 50; this.defense = 16; this.damage = 26; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinBomberHurt; this.DeathSound = SoundID.DD2_GoblinBomberDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 556) { this.lifeMax = 200; this.defense = 26; this.damage = 55; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinBomberHurt; this.DeathSound = SoundID.DD2_GoblinBomberDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 557) { this.lifeMax = 700; this.defense = 34; this.damage = 75; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_GoblinBomberHurt; this.DeathSound = SoundID.DD2_GoblinBomberDeath; this.knockBackResist = 0.15f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 558) { this.width = 38; this.height = 38; this.aiStyle = 108; this.damage = 30; this.defense = 4; this.lifeMax = 60; this.HitSound = SoundID.DD2_WyvernHurt; this.DeathSound = SoundID.DD2_WyvernDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.2f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 559) { this.width = 38; this.height = 38; this.aiStyle = 108; this.damage = 75; this.defense = 16; this.lifeMax = 180; this.HitSound = SoundID.DD2_WyvernHurt; this.DeathSound = SoundID.DD2_WyvernDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.2f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 560) { this.width = 38; this.height = 38; this.aiStyle = 108; this.damage = 100; this.defense = 30; this.lifeMax = 600; this.HitSound = SoundID.DD2_WyvernHurt; this.DeathSound = SoundID.DD2_WyvernDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.05f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 550) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 576) { this.lifeMax = 5000; this.defense = 34; this.damage = 70; this.width = 96; this.height = 124; this.aiStyle = 107; this.HitSound = SoundID.DD2_OgreHurt; this.DeathSound = SoundID.DD2_OgreDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 577) { this.lifeMax = 13000; this.defense = 40; this.damage = 90; this.width = 96; this.height = 124; this.aiStyle = 107; this.HitSound = SoundID.DD2_OgreHurt; this.DeathSound = SoundID.DD2_OgreDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 568) { this.lifeMax = 500; this.defense = 30; this.damage = 50; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_WitherBeastHurt; this.DeathSound = SoundID.DD2_WitherBeastDeath; this.knockBackResist = 0.15f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 569) { this.lifeMax = 1400; this.defense = 40; this.damage = 80; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_WitherBeastHurt; this.DeathSound = SoundID.DD2_WitherBeastDeath; this.knockBackResist = 0.05f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 566) { this.lifeMax = 25; this.defense = 12; this.damage = 18; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_SkeletonHurt; this.DeathSound = SoundID.DD2_SkeletonDeath; this.knockBackResist = 0.3f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 567) { this.lifeMax = 480; this.defense = 22; this.damage = 70; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_SkeletonHurt; this.DeathSound = SoundID.DD2_SkeletonDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 572) { this.lifeMax = 260; this.defense = 26; this.damage = 60; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_KoboldHurt; this.DeathSound = SoundID.DD2_KoboldDeath; this.knockBackResist = 0.2f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 573) { this.lifeMax = 800; this.defense = 32; this.damage = 80; this.width = 18; this.height = 40; this.aiStyle = 107; this.HitSound = SoundID.DD2_KoboldHurt; this.DeathSound = SoundID.DD2_KoboldDeath; this.knockBackResist = 0.1f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 570) { this.lifeMax = 900; this.defense = 30; this.damage = 60; this.width = 42; this.height = 58; this.aiStyle = 107; this.HitSound = SoundID.DD2_DrakinHurt; this.DeathSound = SoundID.DD2_DrakinDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 571) { this.lifeMax = 3000; this.defense = 40; this.damage = 90; this.width = 42; this.height = 58; this.aiStyle = 107; this.HitSound = SoundID.DD2_DrakinHurt; this.DeathSound = SoundID.DD2_DrakinDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 564) { this.lifeMax = 800; this.defense = 18; this.damage = 40; this.width = 34; this.height = 62; this.aiStyle = 109; this.HitSound = SoundID.DD2_DarkMageHurt; this.DeathSound = SoundID.DD2_DarkMageDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.noGravity = true; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 565) { this.lifeMax = 4000; this.defense = 38; this.damage = 90; this.width = 34; this.height = 62; this.aiStyle = 109; this.HitSound = SoundID.DD2_DarkMageHurt; this.DeathSound = SoundID.DD2_DarkMageDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.npcSlots = 0.0f; this.noGravity = true; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 574) { this.width = 38; this.height = 38; this.aiStyle = 108; this.damage = 50; this.defense = 16; this.lifeMax = 170; this.HitSound = SoundID.DD2_KoboldFlyerHurt; this.DeathSound = SoundID.DD2_KoboldFlyerDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.4f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 575) { this.width = 38; this.height = 38; this.aiStyle = 108; this.damage = 80; this.defense = 32; this.lifeMax = 580; this.HitSound = SoundID.DD2_KoboldFlyerHurt; this.DeathSound = SoundID.DD2_KoboldFlyerDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.25f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 551) { this.damage = 80; this.defense = 38; this.lifeMax = 50000; this.width = 190; this.height = 90; this.aiStyle = 110; this.HitSound = SoundID.DD2_BetsyHurt; this.DeathSound = SoundID.DD2_BetsyDeath; this.knockBackResist = 0.0f; this.value = 0.0f; this.noGravity = true; this.noTileCollide = true; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 578) { this.width = 30; this.height = 24; this.aiStyle = 111; this.damage = 80; this.defense = 36; this.lifeMax = 500; this.HitSound = SoundID.DD2_LightningBugHurt; this.DeathSound = SoundID.DD2_LightningBugDeath; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.8f; this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; } else if (this.type == 579) { this.friendly = true; this.width = 34; this.height = 8; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.scale = 1f; this.rarity = 1; } else if (this.type == 582) { this.width = 18; this.height = 18; this.aiStyle = 3; this.damage = 12; this.defense = 4; this.lifeMax = 45; this.HitSound = SoundID.NPCHit31; this.DeathSound = SoundID.NPCDeath34; this.knockBackResist = 0.75f; this.value = 40f; this.buffImmune[31] = false; this.npcSlots = 0.4f; } else if (this.type == 583 || this.type == 584 || this.type == 585) { this.width = 18; this.height = 20; this.aiStyle = 112; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; switch (this.type) { case 583: this.catchItem = (short) 4068; break; case 584: this.catchItem = (short) 4069; break; case 585: this.catchItem = (short) 4070; break; } this.noGravity = true; this.rarity = 2; for (int index = 0; index < 323; ++index) this.buffImmune[index] = true; } else if (this.type == 586) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 40; this.defense = 20; this.lifeMax = 400; this.HitSound = SoundID.NPCHit18; this.DeathSound = SoundID.NPCDeath21; this.knockBackResist = 0.0f; this.value = 1000f; this.buffImmune[31] = false; this.alpha = (int) byte.MaxValue; this.rarity = 1; } else if (this.type == 587) { this.width = 32; this.height = 18; this.aiStyle = 44; this.damage = 35; this.defense = 18; this.lifeMax = 300; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.0f; this.DeathSound = SoundID.NPCDeath1; this.value = 1000f; this.buffImmune[31] = false; this.alpha = (int) byte.MaxValue; this.rarity = 1; } else if (this.type == 588) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 589) { this.friendly = true; this.width = 18; this.height = 34; this.aiStyle = 0; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.rarity = 1; } else if (this.type == 590 || this.type == 591) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } else if (this.type == 592) { this.noGravity = true; this.width = 20; this.height = 18; this.aiStyle = 16; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.catchItem = (short) 4274; this.rarity = 3; } else if (this.type == 593) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4274; this.rarity = 3; } else if (this.type == 594) { this.width = 20; this.height = 20; this.aiStyle = 113; this.damage = 0; this.defense = 0; this.knockBackResist = 0.3f; this.lifeMax = 1; this.DeathSound = SoundID.NPCDeath63; this.value = 0.0f; this.noGravity = true; } else if (this.type >= 595 && this.type <= 601) { this.timeLeft *= 3; this.width = 10; this.height = 10; this.aiStyle = 114; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; if (this.type == 601) this.rarity = 3; this.catchItem = (short) (this.type - 595 + 4334); } else if (this.type == 602) { this.width = 22; this.height = 26; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4359; } else if (this.type == 603) { this.width = 28; this.height = 22; this.aiStyle = 68; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4359; } else if (this.type == 604 || this.type == 605) { this.width = 10; this.height = 10; this.aiStyle = 115; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; if (this.type == 605) this.rarity = 3; this.catchItem = (short) (this.type - 604 + 4361); } else if (this.type == 606) { this.width = 10; this.height = 4; this.aiStyle = 66; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.1f; this.catchItem = (short) 4363; this.friendly = true; } else if (this.type == 607) { this.noGravity = true; this.width = 20; this.height = 18; this.aiStyle = 16; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.catchItem = (short) 4373; } else if (this.type == 608) { this.width = 22; this.height = 26; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4374; } else if (this.type == 609) { this.width = 28; this.height = 22; this.aiStyle = 68; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4374; } else if (this.type == 610) { this.width = 14; this.height = 12; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath4; this.npcSlots = 0.25f; this.catchItem = (short) 4375; } else if (this.type == 611) { this.width = 18; this.height = 34; this.aiStyle = 24; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) 4395; this.npcSlots = 0.4f; } else if (this.type == 612 || this.type == 613) { this.width = 10; this.height = 10; this.aiStyle = 116; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; if (this.type == 613) this.rarity = 3; this.catchItem = (short) (this.type - 612 + 4418); this.waterMovementSpeed = 1f; this.lavaMovementSpeed = 1f; this.honeyMovementSpeed = 1f; } else if (this.type == 614) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = (LegacySoundStyle) null; this.catchItem = (short) 1338; } else if (this.type == 615) { this.noGravity = true; this.width = 20; this.height = 18; this.aiStyle = 16; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 616 || this.type == 617) { this.width = 22; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; this.catchItem = (short) (this.type - 616 + 4464); } else if (this.type == 618) { this.noGravity = true; this.width = 100; this.height = 100; this.aiStyle = 117; this.damage = 55; this.defense = 24; this.lifeMax = 7000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.value = (float) Item.buyPrice(gold: 2); this.noTileCollide = true; this.rarity = 1; } else if (this.type == 619) { this.npcSlots = 1f; this.width = 44; this.height = 44; this.aiStyle = 5; this.damage = 60; this.defense = 16; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.knockBackResist = 0.0f; this.value = 500f; this.alpha = (int) byte.MaxValue; } else if (this.type == 620) { this.lifeMax = 5000; this.defense = 30; this.damage = 70; this.width = 34; this.height = 58; this.aiStyle = 107; this.HitSound = SoundID.DD2_DrakinHurt; this.DeathSound = SoundID.DD2_DrakinDeath; this.knockBackResist = 0.0f; this.value = (float) Item.buyPrice(silver: 75); this.npcSlots = 0.0f; this.lavaImmune = true; this.LazySetLiquidMovementDD2(); this.netAlways = true; this.alpha = (int) byte.MaxValue; this.rarity = 1; } else if (this.type == 621) { this.npcSlots = 5f; this.width = 28; this.height = 28; this.aiStyle = 6; this.damage = 90; this.defense = 0; this.lifeMax = 6000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.value = (float) Item.buyPrice(silver: 75); this.alpha = (int) byte.MaxValue; this.rarity = 1; } else if (this.type == 622) { this.width = 28; this.height = 28; this.aiStyle = 6; this.netAlways = true; this.damage = 60; this.defense = 30; this.lifeMax = 6000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.dontCountMe = true; this.npcSlots = 0.0f; this.alpha = (int) byte.MaxValue; } else if (this.type == 623) { this.width = 28; this.height = 28; this.aiStyle = 6; this.netAlways = true; this.damage = 50; this.defense = 40; this.lifeMax = 6000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.noGravity = true; this.noTileCollide = true; this.knockBackResist = 0.0f; this.behindTiles = true; this.dontCountMe = true; this.npcSlots = 0.0f; this.alpha = (int) byte.MaxValue; } else if (this.type == 624) { this.width = 14; this.height = 30; this.aiStyle = 3; this.damage = 10; this.defense = 0; this.lifeMax = 25; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 1f; this.rarity = 1; } else if (this.type == 625) { this.width = 22; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 626 || this.type == 627) { this.width = 16; this.height = 20; this.aiStyle = 118; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 1f; if (this.type == 627) this.rarity = 3; this.catchItem = (short) 4480; if (this.type == 627) this.catchItem = (short) 4482; } else if (this.type == 628) { this.width = 22; this.height = 40; this.aiStyle = 119; this.damage = 15; this.defense = 0; this.lifeMax = 50; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.0f; this.value = 50f; } else if (this.type == 629) { this.width = 24; this.height = 24; this.aiStyle = 25; this.damage = 80; this.defense = 30; this.lifeMax = 500; this.HitSound = SoundID.NPCHit4; this.DeathSound = SoundID.NPCDeath6; this.value = 100000f; this.knockBackResist = 0.3f; this.buffImmune[20] = true; this.buffImmune[24] = true; this.buffImmune[39] = true; this.rarity = 4; } else if (this.type == 630) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 60; this.defense = 18; this.lifeMax = 180; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.value = 700f; this.buffImmune[31] = false; } else if (this.type == 631) { this.width = 36; this.height = 48; this.scale = 1.1f; this.aiStyle = 3; this.damage = 85; this.defense = 35; this.lifeMax = 1000; this.HitSound = SoundID.NPCHit41; this.DeathSound = SoundID.NPCDeath43; this.knockBackResist = 0.1f; this.value = 50000f; this.buffImmune[20] = true; this.buffImmune[24] = true; } else if (this.type == 632) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 14; this.defense = 6; this.lifeMax = 45; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 60f; this.buffImmune[31] = false; } else if (this.type == 633) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 40; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.5f; } else if (this.type == 634) { this.npcSlots = 0.5f; this.width = 22; this.height = 18; this.aiStyle = 14; this.damage = 13; this.defense = 2; this.lifeMax = 16; this.HitSound = SoundID.NPCHit1; this.knockBackResist = 0.8f; this.DeathSound = SoundID.NPCDeath4; this.value = 90f; this.buffImmune[31] = false; } else if (this.type == 635) { this.width = 18; this.height = 40; this.aiStyle = 3; this.damage = 20; this.defense = 8; this.lifeMax = 60; this.HitSound = SoundID.NPCHit2; this.DeathSound = SoundID.NPCDeath2; this.knockBackResist = 0.5f; this.value = 100f; this.buffImmune[20] = true; this.buffImmune[31] = false; } else if (this.type == 636) { this.noGravity = true; this.width = 100; this.height = 100; this.aiStyle = 120; this.damage = 80; this.defense = 50; this.lifeMax = 70000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath65; this.knockBackResist = 0.0f; this.value = 250000f; this.noTileCollide = true; this.boss = true; this.Opacity = 0.0f; } else if (this.type == 637 || this.type == 638) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 28; if (this.type == 637) this.height = 20; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.housingCategory = 1; } else if (this.type >= 639 && this.type <= 645) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) (4831 + (this.type - 639)); } else if (this.type >= 646 && this.type <= 652) { this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.catchItem = (short) (4838 + (this.type - 646)); } else if (this.type == 653) { this.width = 10; this.height = 10; this.aiStyle = 65; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; this.lavaImmune = true; this.catchItem = (short) 4845; } else if (this.type == 654) { this.width = 10; this.height = 10; this.aiStyle = 64; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.2f; this.noGravity = true; this.lavaImmune = true; this.catchItem = (short) 4847; } else if (this.type == 655) { this.width = 14; this.height = 14; this.aiStyle = 67; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.5f; this.noGravity = true; this.lavaImmune = true; this.catchItem = (short) 4849; } else if (this.type == 656) { this.townNPC = true; this.friendly = true; this.width = 18; this.height = 20; this.aiStyle = 7; this.damage = 10; this.defense = 15; this.lifeMax = 250; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.5f; this.housingCategory = 1; } else if (this.type == 657) { this.width = 114; this.height = 100; this.aiStyle = 121; this.damage = 60; this.defense = 26; this.lifeMax = 18000; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath64; this.lavaImmune = true; this.knockBackResist = 0.0f; this.value = 60000f; this.buffImmune[20] = true; this.buffImmune[31] = true; this.boss = true; } else if (this.type == 658 || this.type == 659) { this.width = 24; this.height = 18; this.aiStyle = 1; this.damage = 40; this.defense = 35; this.lifeMax = 150; this.scale = 1f; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.buffImmune[20] = true; } else if (this.type == 660) { this.width = 40; this.height = 30; this.aiStyle = 14; this.damage = 50; this.defense = 30; this.lifeMax = 120; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.knockBackResist = 0.8f; this.scale = 1f; this.buffImmune[20] = true; } else if (this.type == 661) { this.width = 10; this.height = 10; this.aiStyle = 65; this.damage = 0; this.defense = 0; this.lifeMax = 5; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath1; this.npcSlots = 0.25f; this.noGravity = true; this.lavaImmune = true; this.catchItem = (short) 4961; this.rarity = 4; } else if (this.type == 662) { this.width = 18; this.height = 40; this.aiStyle = 122; this.damage = 75; this.defense = 22; this.lifeMax = 500; this.HitSound = SoundID.NPCHit1; this.DeathSound = SoundID.NPCDeath6; this.knockBackResist = 0.2f; this.value = 0.0f; flag = true; this.noTileCollide = true; this.lavaImmune = true; this.trapImmune = true; this.noGravity = true; } if (flag) { for (int index = 0; index < 323; ++index) this.buffImmune[index] = true; } if (Main.dedServ) this.frame = new Microsoft.Xna.Framework.Rectangle(); else if (TextureAssets.Npc[this.type] != null && TextureAssets.Npc[this.type].IsLoaded) this.frame = new Microsoft.Xna.Framework.Rectangle(0, 0, TextureAssets.Npc[this.type].Width(), TextureAssets.Npc[this.type].Height() / Main.npcFrameCount[this.type]); else this.setFrameSize = true; if (spawnparams.sizeScaleOverride.HasValue) { int num1 = (int) ((double) this.width * (double) this.scale); int num2 = (int) ((double) this.height * (double) this.scale); this.position.X += (float) (num1 / 2); this.position.Y += (float) num2; this.scale = spawnparams.sizeScaleOverride.Value; this.width = (int) ((double) this.width * (double) this.scale); this.height = (int) ((double) this.height * (double) this.scale); if (this.height == 16 || this.height == 32) ++this.height; this.position.X -= (float) (this.width / 2); this.position.Y -= (float) this.height; } else { this.width = (int) ((double) this.width * (double) this.scale); this.height = (int) ((double) this.height * (double) this.scale); } if (this.buffImmune[20]) this.buffImmune[70] = true; if (this.buffImmune[39]) this.buffImmune[153] = true; this.life = this.lifeMax; this.defDamage = this.damage; this.defDefense = this.defense; this.netID = this.type; if (Main.getGoodWorld) this.getGoodAdjustments(); this.ScaleStats(spawnparams.playerCountForMultiplayerDifficultyOverride, spawnparams.gameModeData, spawnparams.strengthMultiplierOverride); this.life = this.lifeMax; } } private void getGoodAdjustments() { if (this.type == 13) { this.scale *= 1.4f; this.defense += 2; } else if (this.type == 14) { this.scale *= 1.4f; this.defense += 2; } else if (this.type == 15) { this.scale *= 1.4f; this.defense += 2; } else if (this.type == 35) this.scale *= 1.25f; else if (this.type == 36) this.scale *= 1.15f; else if (this.type == 113) { this.scale *= 0.65f; this.lifeMax = (int) ((double) this.lifeMax * 1.5); this.defense += 3; } else if (this.type == 114) { this.scale *= 0.65f; this.lifeMax = (int) ((double) this.lifeMax * 1.5); this.defense += 3; } else if (this.type == 115) this.scale *= 1.4f; else if (this.type == 116) this.scale *= 1.4f; else if (this.type == 125) this.scale *= 0.8f; else if (this.type == 126) this.scale *= 0.8f; else if (this.type == (int) sbyte.MaxValue) this.scale *= 1.1f; else if (this.type == 128) this.scale *= 1.1f; else if (this.type == 129) this.scale *= 1.1f; else if (this.type == 130) this.scale *= 1.1f; else if (this.type == 131) this.scale *= 1.1f; else if (this.type == 134) this.scale *= 1.3f; else if (this.type == 135) this.scale *= 1.3f; else if (this.type == 136) this.scale *= 1.3f; else if (this.type == 139) this.scale *= 1.3f; else if (this.type == 222) this.scale *= 1.2f; else if (this.type == 245) this.scale *= 0.5f; else if (this.type == 246) this.scale *= 0.5f; else if (this.type == 247 || this.type == 248) this.scale *= 0.5f; else if (this.type == 249) this.scale *= 0.5f; else if (this.type == 262) { this.scale *= 1.3f; } else { if (this.type != 266) return; this.defense = (int) ((double) this.defense * 1.5); this.damage = (int) ((double) this.damage * 1.2); this.scale *= 1.1f; } } private void LazySetLiquidMovementDD2() { this.waterMovementSpeed = 1f; this.lavaMovementSpeed = 1f; this.honeyMovementSpeed = 1f; } public static void SetWorldSpecificMonstersByWorldID() { UnifiedRandom unifiedRandom = new UnifiedRandom(Main.worldID); int num1 = unifiedRandom.Next(3); int num2 = unifiedRandom.Next(3); while (num1 == num2) num1 = unifiedRandom.Next(3); for (int index1 = 0; index1 < 2; ++index1) { int num3 = num1; if (index1 == 1) num3 = num2; for (int index2 = 0; index2 < 3; ++index2) { switch (num3) { case 0: NPC.cavernMonsterType[index1, index2] = unifiedRandom.Next(494, 496); break; case 1: NPC.cavernMonsterType[index1, index2] = unifiedRandom.Next(496, 498); break; default: NPC.cavernMonsterType[index1, index2] = unifiedRandom.Next(498, 507); break; } } } } public NPCSpawnParams GetMatchingSpawnParams() => new NPCSpawnParams() { sizeScaleOverride = new float?(-1f), playerCountForMultiplayerDifficultyOverride = new int?(this.statsAreScaledForThisManyPlayers), strengthMultiplierOverride = new float?(this.strengthMultiplier) }; public void ScaleStats( int? activePlayersCount, GameModeData gameModeData, float? strengthOverride) { if ((!NPCID.Sets.NeedsExpertScaling.IndexInRange(this.type) || !NPCID.Sets.NeedsExpertScaling[this.type]) && (this.lifeMax <= 5 || this.damage == 0 || this.friendly || this.townNPC)) return; float strength = 1f; if (strengthOverride.HasValue) strength = strengthOverride.Value; else if (gameModeData.IsJourneyMode) { CreativePowers.DifficultySliderPower power = CreativePowerManager.Instance.GetPower(); if (power != null && power.GetIsUnlocked()) strength = power.StrengthMultiplierToGiveNPCs; } NPCStrengthHelper npcStrengthHelper = new NPCStrengthHelper(gameModeData, strength); if (npcStrengthHelper.IsExpertMode) this.ScaleStats_ApplyExpertTweaks(); this.ScaleStats_ApplyGameMode(gameModeData); if (npcStrengthHelper.IsExpertMode) { int numPlayers = !activePlayersCount.HasValue ? NPC.GetActivePlayerCount() : activePlayersCount.Value; this.statsAreScaledForThisManyPlayers = numPlayers; float balance; float boost; NPC.GetStatScalingFactors(numPlayers, out balance, out boost); float bossAdjustment = 1f; if (npcStrengthHelper.IsMasterMode) bossAdjustment = 0.85f; this.ScaleStats_ApplyMultiplayerStats(numPlayers, balance, boost, bossAdjustment); } this.strengthMultiplier = strength; this.ScaleStats_UseStrengthMultiplier(this.strengthMultiplier); if ((this.type < 0 ? 0 : (NPCID.Sets.ProjectileNPC[this.type] ? 1 : 0)) == 0 && this.lifeMax < 6) this.lifeMax = 6; this.life = this.lifeMax; this.defDamage = this.damage; this.defDefense = this.defense; } public void ScaleStats_UseStrengthMultiplier(float strength) { if ((this.type < 0 ? 0 : (NPCID.Sets.ProjectileNPC[this.type] ? 1 : 0)) == 0) this.lifeMax = (int) ((double) this.lifeMax * (double) strength); this.damage = (int) ((double) this.damage * (double) strength); } public void ScaleStats_Old(int? activePlayersCount, GameModeData gameModeData) { if (!gameModeData.IsExpertMode || (this.type < 0 || !NPCID.Sets.NeedsExpertScaling[this.type]) && (this.life <= 5 || this.damage == 0 || this.friendly || this.townNPC)) return; this.ScaleStats_ApplyExpertTweaks(); this.ScaleStats_ApplyGameMode(gameModeData); int numPlayers = !activePlayersCount.HasValue ? NPC.GetActivePlayerCount() : activePlayersCount.Value; this.statsAreScaledForThisManyPlayers = numPlayers; float balance; float boost; NPC.GetStatScalingFactors(numPlayers, out balance, out boost); float bossAdjustment = 1f; if (gameModeData.IsMasterMode) bossAdjustment = 0.85f; this.ScaleStats_ApplyMultiplayerStats(numPlayers, balance, boost, bossAdjustment); } public static float GetBalance() { float balance; NPC.GetStatScalingFactors(NPC.GetActivePlayerCount(), out balance, out float _); return balance; } private float GetMyBalance() { if (this.statsAreScaledForThisManyPlayers <= 1) return 1f; float balance; NPC.GetStatScalingFactors(this.statsAreScaledForThisManyPlayers, out balance, out float _); return balance; } private static int GetActivePlayerCount() { if (Main.netMode == 0) return 1; int num = 0; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index] != null && Main.player[index].active) ++num; } return num; } private void ScaleStats_ApplyExpertTweaks() { bool flag = this.type >= 0 && NPCID.Sets.ProjectileNPC[this.type]; if (!NPCID.Sets.DontDoHardmodeScaling[this.type] && Main.hardMode && !this.boss && this.lifeMax < 1000) { int num1 = this.damage + this.defense + this.lifeMax / 4; if (num1 == 0) num1 = 1; int num2 = 80; if (NPC.downedPlantBoss) num2 += 20; if (num1 < num2) { float num3 = (float) (num2 / num1); this.damage = (int) ((double) this.damage * (double) num3 * 0.9); if (!flag) { this.defense = (int) ((double) this.defense * (double) num3); this.lifeMax = (int) ((double) this.lifeMax * (double) num3 * 1.1); this.value = (float) (int) ((double) this.value * (double) num3 * 0.8); } } } if (this.type != 210 && this.type != 211) return; this.damage = (int) ((double) this.damage * 0.600000023841858); this.lifeMax = (int) ((double) this.lifeMax * 0.800000011920929); this.defense = (int) ((double) this.defense * 0.800000011920929); } private void ScaleStats_ApplyGameMode(GameModeData gameModeData) { int num1 = this.type < 0 ? 0 : (NPCID.Sets.ProjectileNPC[this.type] ? 1 : 0); int num2 = 0; if (Main.getGoodWorld) ++num2; if (num1 == 0) { this.value = (float) (int) ((double) this.value * ((double) gameModeData.EnemyMoneyDropMultiplier + (double) num2)); this.lifeMax = (int) ((double) this.lifeMax * ((double) gameModeData.EnemyMaxLifeMultiplier + (double) num2)); } this.damage = (int) ((double) this.damage * ((double) gameModeData.EnemyDamageMultiplier + (double) num2)); this.knockBackResist *= gameModeData.KnockbackToEnemiesMultiplier; if (!Main.getGoodWorld) return; this.damage += this.damage / 3; } private void ScaleStats_ApplyMultiplayerStats( int numPlayers, float balance, float boost, float bossAdjustment) { if (this.type == 5) this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) bossAdjustment); if (this.type == 4) this.lifeMax = (int) ((double) this.lifeMax * 0.65 * (double) balance * (double) bossAdjustment); if (this.type >= 13 && this.type <= 15) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); if (this.type == 13) this.damage = (int) ((double) this.damage * 1.1); if (this.type == 14) this.damage = (int) ((double) this.damage * 0.8); if (this.type == 15) this.damage = (int) ((double) this.damage * 0.8); this.scale *= 1.2f; this.defense += 2; } if (this.type == 266 || this.type == 267) { this.lifeMax = (int) ((double) this.lifeMax * 0.85 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.9); this.scale *= 1.05f; for (float num = 1f; (double) num < (double) balance; num += 0.34f) { if ((double) this.knockBackResist < 0.1) { this.knockBackResist = 0.0f; break; } this.knockBackResist *= 0.8f; } } if (this.type == 50) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.8); } if (this.type == 471) this.lifeMax = (int) ((double) this.lifeMax * 0.85 * ((double) balance * 2.0 + 1.0) / 3.0); if (this.type == 472) { this.lifeMax = (int) ((double) this.lifeMax * 0.85 * ((double) balance + 1.0) / 2.0); this.damage = (int) ((double) this.damage * 0.8); } if (this.type == 222) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.9); } if (this.type == 210 || this.type == 211) this.lifeMax = (int) ((double) this.lifeMax * 0.75); if (this.type == 35) { this.lifeMax = (int) ((double) this.lifeMax * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.1); } else if (this.type == 36) { this.lifeMax = (int) ((double) this.lifeMax * 1.3 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.1); } if (this.type == 113 || this.type == 114) { this.defense += 6; this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.5); } else if (this.type == 115) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance); if (numPlayers > 4) this.knockBackResist = 0.0f; else if (numPlayers > 1) this.knockBackResist *= 1f - boost; this.defense += 6; } else if (this.type == 116) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance); if (numPlayers > 4) this.knockBackResist = 0.0f; else if (numPlayers > 1) this.knockBackResist *= 1f - boost; } else if (this.type == 117 || this.type == 118 || this.type == 119) this.lifeMax = (int) ((double) this.lifeMax * 0.8); if (this.type == 657) this.lifeMax = (int) ((double) this.lifeMax * 0.800000011920929 * (double) balance * (double) bossAdjustment); if (this.type >= 658 && this.type <= 660) this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); if (this.type >= 134 && this.type <= 136) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); if (this.type == 134) this.damage *= 2; if (this.type == 135) this.damage = (int) ((double) this.damage * 0.85); if (this.type == 136) this.damage = (int) ((double) this.damage * 0.85); this.scale *= 1.05f; } else if (this.type == 139) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * ((double) balance * 2.0 + 1.0) / 3.0); this.damage = (int) ((double) this.damage * 0.8); this.scale *= 1.05f; } if (this.type >= (int) sbyte.MaxValue && this.type <= 131) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.85); } if (this.type >= 125 && this.type <= 126) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.85); } if (this.type == 262) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.15); } else if (this.type == 264) { this.lifeMax = (int) ((double) this.lifeMax * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.15); } if (this.type == 636) { this.lifeMax = (int) ((double) this.lifeMax * 0.7 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 1.15); } if (this.type >= 245 && this.type <= 249) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.8); } if (this.type == 370) { this.lifeMax = (int) ((double) this.lifeMax * 0.6 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.7); } else if (this.type == 371 || this.type == 372 || this.type == 373) { if (this.type != 371) this.lifeMax = (int) ((double) this.lifeMax * 0.75); this.damage = (int) ((double) this.damage * 0.75); } if (this.type == 439 || this.type == 440 || this.type >= 454 && this.type <= 459 || this.type == 522 || this.type == 523) { if (this.type != 522) this.lifeMax = (int) ((double) this.lifeMax * 0.625 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.75); } if (this.type == 397 || this.type == 396 || this.type == 398) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.75); } if (this.type == 551) { this.lifeMax = (int) ((double) this.lifeMax * 0.75 * (double) balance * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.65); } else if (NPCID.Sets.BelongsToInvasionOldOnesArmy[this.type]) { int num = 7; this.lifeMax = (int) ((double) this.lifeMax * (double) ((float) ((double) balance * (double) (num - 1) + 1.0) / (float) num) * (double) bossAdjustment); } switch (this.type) { case 305: case 306: case 307: case 308: case 309: case 310: case 311: case 312: case 313: case 314: case 315: case 326: case 329: case 330: this.lifeMax = (int) ((double) this.lifeMax * 0.75); this.damage = (int) ((double) this.damage * 0.75); break; case 325: case 327: this.lifeMax = (int) ((double) this.lifeMax * 0.65 * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.75); break; } switch (this.type) { case 338: case 339: case 340: case 341: case 342: case 343: case 347: case 348: case 349: case 350: this.lifeMax = (int) ((double) this.lifeMax * 0.75); this.damage = (int) ((double) this.damage * 0.75); break; case 344: case 345: case 346: this.lifeMax = (int) ((double) this.lifeMax * 0.65 * (double) bossAdjustment); this.damage = (int) ((double) this.damage * 0.75); break; } this.defDefense = this.defense; this.defDamage = this.damage; this.life = this.lifeMax; } private static void GetStatScalingFactors(int numPlayers, out float balance, out float boost) { balance = 1f; boost = 0.35f; for (int index = 1; index < numPlayers; ++index) { balance += boost; boost += (float) ((1.0 - (double) boost) / 3.0); } if ((double) balance > 8.0) balance = (float) (((double) balance * 2.0 + 8.0) / 3.0); if ((double) balance <= 1000.0) return; balance = 1000f; } public static bool GetNPCLocation( int i, bool seekHead, bool averageDirection, out int index, out Vector2 pos) { int type = Main.npc[i].type; int index1 = -1; int num1 = -1; switch (type) { case 7: num1 = 9; index1 = 0; break; case 8: case 9: num1 = 7; index1 = 1; break; case 10: num1 = 12; index1 = 0; break; case 11: case 12: num1 = 10; index1 = 1; break; case 13: num1 = 15; index1 = 0; break; case 14: case 15: num1 = 13; index1 = 1; break; case 39: num1 = 41; index1 = 0; break; case 40: case 41: num1 = 39; index1 = 1; break; case 87: num1 = 92; index1 = 0; break; case 88: case 89: case 90: case 91: case 92: num1 = 87; index1 = 1; break; case 95: num1 = 97; index1 = 0; break; case 96: case 97: num1 = 95; index1 = 1; break; case 98: num1 = 100; index1 = 0; break; case 99: case 100: num1 = 98; index1 = 1; break; case 117: num1 = 119; index1 = 0; break; case 118: case 119: num1 = 117; index1 = 1; break; case 134: num1 = 136; index1 = 0; break; case 135: case 136: num1 = 134; index1 = 1; break; case 454: num1 = 459; index1 = 0; break; case 455: case 456: case 457: case 458: case 459: num1 = 454; index1 = 1; break; case 510: num1 = 512; index1 = 0; break; case 511: case 512: num1 = 510; index1 = 1; break; case 513: num1 = 515; index1 = 0; break; case 514: case 515: num1 = 513; index1 = 1; break; case 621: num1 = 623; index1 = 0; break; case 622: case 623: num1 = 621; index1 = 1; break; } if (index1 != -1) { if (seekHead && index1 == 1) { index = -1; pos = Vector2.Zero; return false; } Vector2 center1 = Main.npc[i].Center; int index2 = -1; float num2 = -1f; int index3 = -1; Vector2 center2 = Main.player[Main.myPlayer].Center; int index4 = (int) Main.npc[i].ai[index1]; for (int index5 = 0; index4 >= 0 && index4 < 200 && ++index5 < 100 && Main.npc[index4].active; index4 = (int) Main.npc[index4].ai[index1]) { if (!averageDirection && (index3 == -1 || (double) Main.npc[index4].Distance(center2) < (double) num2)) { num2 = Main.npc[index4].Distance(center2); index3 = index4; } if (Main.npc[index4].type == num1) { index2 = index4; break; } } if (index2 >= 0) { if (!averageDirection) { pos = Main.npc[index3].Center; index = index3; } else { Vector2 vector2 = center1 + Main.npc[index2].Center; pos = vector2 / 2f; index = index2; } return true; } pos = Vector2.Zero; index = -1; return false; } pos = Main.npc[i].Center; index = i; return true; } public void AI() { // ISSUE: The method is too long to display (123208 instructions) } public void AI_122_PirateGhost() { if ((double) this.localAI[0] == 0.0) { this.localAI[0] = 1f; SoundEngine.PlaySound(SoundID.NPCHit6, this.position); } NPCAimedTarget targetData = this.GetTargetData(); if (targetData.Invalid) { this.TargetClosest(); targetData = this.GetTargetData(); } if (targetData.Invalid) { this.velocity = this.velocity * 0.9f; this.alpha = Utils.Clamp(this.alpha + 5, 0, (int) byte.MaxValue); if (this.alpha < (int) byte.MaxValue) return; this.StrikeNPCNoInteraction(9999, 0.0f, 0); } else { this.alpha = Utils.Clamp(this.alpha - 5, 0, (int) byte.MaxValue); this.velocity = this.velocity.MoveTowards(Vector2.Zero.MoveTowards(targetData.Center - this.Center, 4f), 0.1333333f); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == this.type && index != this.whoAmI) { Vector2 vector2 = Main.npc[index].Center - this.Center; if ((double) vector2.Length() < 50.0) { vector2.Normalize(); vector2 *= 0.1f; this.velocity = this.velocity - vector2; this.velocity.X -= vector2.X * 1f; } } } } } public void AI_000_TransformBoundNPC(int playerID, int npcType) { this.Transform(npcType); Main.BestiaryTracker.Chats.RegisterChatStartWith(this); Main.player[playerID].SetTalkNPC(this.whoAmI); if (Main.netMode != 2) return; NetMessage.SendData(40, number: playerID); } private void AI_065_Butterflies() { float num1 = this.ai[0]; float num2 = this.ai[1]; Color color; if (this.type == 661) { color = Main.hslToRgb((float) ((double) Main.GlobalTimeWrappedHourly * 0.330000013113022 % 1.0), 1f, 0.5f); Lighting.AddLight(this.Center, color.ToVector3() * 0.3f + Vector3.One * 0.1f); int num3 = 60; bool flag = false; int num4 = 50; NPCAimedTarget targetData = this.GetTargetData(); if (targetData.Invalid || (double) targetData.Center.Distance(this.Center) >= 300.0) flag = true; if (!targetData.Invalid && targetData.Type == NPCTargetType.Player && !Main.player[this.target].ZoneHallow) { num4 = num3; flag = true; } this.ai[2] = MathHelper.Clamp(this.ai[2] + (float) flag.ToDirectionInt(), 0.0f, (float) num4); if ((double) this.ai[2] >= (double) num3) { this.active = false; if (Main.netMode == 1) return; NetMessage.SendData(23, number: this.whoAmI); return; } this.Opacity = Utils.GetLerpValue((float) num3, (float) num4 / 2f, this.ai[2], true); if ((double) this.ai[2] > 0.0) { int num5 = 1; for (int index = 0; index < num5; ++index) { if (Main.rand.Next(5) == 0) { float num6 = MathHelper.Lerp(0.9f, 0.6f, this.Opacity); int dustIndex = Dust.NewDust(this.position, this.width, this.height, 267, newColor: (Main.hslToRgb((float) ((double) Main.GlobalTimeWrappedHourly * 0.300000011920929 % 1.0), 1f, 0.5f) * 0.5f)); Main.dust[dustIndex].position = this.Center + Main.rand.NextVector2Circular((float) this.width, (float) this.height); Main.dust[dustIndex].velocity *= Main.rand.NextFloat() * 0.8f; Main.dust[dustIndex].velocity += this.velocity * 0.6f; Main.dust[dustIndex].noGravity = true; Main.dust[dustIndex].fadeIn = (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 0.699999988079071 * (double) num6); Main.dust[dustIndex].scale = 0.35f; if (dustIndex != 6000) { Dust dust = Dust.CloneDust(dustIndex); dust.scale /= 2f; dust.fadeIn *= 0.85f; dust.color = new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue) * 0.5f; } } } } this.dontTakeDamage = (double) this.ai[2] >= (double) (num4 / 2); } if (Main.netMode != 1) { if ((double) this.ai[2] == 0.0 && this.type != 661) { int num7 = 0; int num8 = 4; int num9 = 6; int num10 = 3; int num11 = 7; int num12 = 2; int num13 = 1; int num14 = 5; int num15 = Main.rand.Next(100); this.ai[2] = (float) (1 + (num15 != 0 ? (num15 >= 3 ? (num15 >= 9 ? (num15 >= 19 ? (num15 >= 34 ? (num15 >= 53 ? (num15 >= 75 ? num7 : num8) : num9) : num10) : num11) : num12) : num13) : num14)); } if ((double) this.ai[3] == 0.0) this.ai[3] = (float) Main.rand.Next(75, 111) * 0.01f; --this.localAI[0]; if ((double) this.localAI[0] <= 0.0) { this.localAI[0] = (float) Main.rand.Next(90, 240); this.TargetClosest(); float num16 = Math.Abs(this.Center.X - Main.player[this.target].Center.X); if ((double) num16 > 700.0 && (double) this.localAI[3] == 0.0) { float num17 = (float) Main.rand.Next(50, 151) * 0.01f; if ((double) num16 > 1000.0) num17 = (float) Main.rand.Next(150, 201) * 0.01f; else if ((double) num16 > 850.0) num17 = (float) Main.rand.Next(100, 151) * 0.01f; int num18 = this.direction * Main.rand.Next(100, 251); int num19 = Main.rand.Next(-50, 51); if ((double) this.position.Y > (double) Main.player[this.target].position.Y - 100.0) num19 -= Main.rand.Next(100, 251); float num20 = num17 / (float) Math.Sqrt((double) (num18 * num18 + num19 * num19)); num1 = (float) num18 * num20; num2 = (float) num19 * num20; } else { this.localAI[3] = 1f; double num21 = (double) Main.rand.Next(26, 301) * 0.00999999977648258; int num22 = Main.rand.Next(-100, 101); int num23 = Main.rand.Next(-100, 101); double num24 = Math.Sqrt((double) (num22 * num22 + num23 * num23)); float num25 = (float) (num21 / num24); num1 = (float) num22 * num25; num2 = (float) num23 * num25; } this.netUpdate = true; } } this.scale = this.ai[3]; int num26 = 60; this.velocity.X = (this.velocity.X * (float) (num26 - 1) + num1) / (float) num26; this.velocity.Y = (this.velocity.Y * (float) (num26 - 1) + num2) / (float) num26; if ((double) this.velocity.Y > 0.0) { int num27 = 3; int index1 = (int) this.Center.X / 16; int num28 = (int) this.Center.Y / 16; for (int index2 = num28; index2 < num28 + num27; ++index2) { if (Main.tile[index1, index2] != null && (Main.tile[index1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].liquid > (byte) 0)) { num2 *= -1f; if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.9f; } } } if ((double) this.velocity.Y < 0.0) { int num29 = 30; bool flag = false; int index3 = (int) this.Center.X / 16; int num30 = (int) this.Center.Y / 16; for (int index4 = num30; index4 < num30 + num29; ++index4) { if (Main.tile[index3, index4] != null && Main.tile[index3, index4].nactive() && Main.tileSolid[(int) Main.tile[index3, index4].type]) flag = true; } if (!flag) { num2 *= -1f; if ((double) this.velocity.Y < 0.0) this.velocity.Y *= 0.9f; } } if ((double) this.localAI[1] > 0.0) { --this.localAI[1]; } else { this.localAI[1] = 15f; if (this.type == 661) this.localAI[1] = 10f; float num31 = 0.0f; Vector2 zero = Vector2.Zero; for (int index = 0; index < 200; ++index) { NPC npc = Main.npc[index]; if (npc.active && npc.damage > 0 && !npc.friendly && (double) npc.Hitbox.Distance(this.Center) <= 100.0) { ++num31; zero += this.DirectionFrom(npc.Center); } } if ((double) num31 > 0.0) { this.velocity = this.velocity + zero / num31 * 2f; if ((double) this.velocity.Length() > 16.0) this.velocity = this.velocity.SafeNormalize(Vector2.Zero) * 16f; } } if (this.collideX) { num1 = (double) this.velocity.X >= 0.0 ? -Math.Abs(num1) : Math.Abs(num1); this.velocity.X *= -0.2f; } if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; this.ai[0] = num1; this.ai[1] = num2; if (this.type == 356) this.catchItem = (short) (1994.0 + (double) this.ai[2] - 1.0); if (this.type != 653) return; this.position = this.position + this.netOffset; Lighting.AddLight((int) this.Center.X / 16, (int) this.Center.Y / 16, 0.6f, 0.3f, 0.1f); if (Main.rand.Next(60) == 0) { Vector2 position = this.position; int width = this.width; int height = this.height; color = new Color(); Color newColor = color; int index = Dust.NewDust(position, width, height, 6, Alpha: 254, newColor: newColor); Main.dust[index].velocity *= 0.0f; } this.position = this.position - this.netOffset; } public static Color AI_121_QueenSlime_GetDustColor() => Color.Lerp(new Color(0, 160, (int) byte.MaxValue), Color.Lerp(new Color(200, 200, 200), new Color((int) byte.MaxValue, 80, (int) byte.MaxValue), Main.rand.NextFloat()), Main.rand.NextFloat()); private void AI_121_QueenSlime_FlyMovement() { this.noTileCollide = true; this.noGravity = true; float num1 = 14f; float moveSpeed = 0.1f; float num2 = 250f; this.TargetClosest(); Vector2 vector2 = this.Center; if (this.timeLeft > 10) { if (!Collision.CanHit((Entity) this, (Entity) Main.player[this.target])) { bool flag = false; Vector2 center = Main.player[this.target].Center; for (int index = 0; index < 16; ++index) { float num3 = (float) (16 * index); Point tileCoordinates = (center + new Vector2(0.0f, -num3)).ToTileCoordinates(); if (WorldGen.SolidOrSlopedTile(tileCoordinates.X, tileCoordinates.Y)) { vector2 = center + new Vector2(0.0f, (float) (-(double) num3 + 16.0)) - this.Center; flag = true; break; } } if (!flag) vector2 = center - this.Center; } else vector2 = Main.player[this.target].Center + new Vector2(0.0f, -num2) - this.Center; } else vector2 = this.Center + new Vector2(500f * (float) this.direction, -num2) - this.Center; float num4 = vector2.Length(); if ((double) Math.Abs(vector2.X) < 40.0) vector2.X = this.velocity.X; if ((double) num4 > 100.0 && ((double) this.velocity.X < -12.0 && (double) vector2.X > 0.0 || (double) this.velocity.X > 12.0 && (double) vector2.X < 0.0)) moveSpeed = 0.2f; Vector2 desiredVelocity; if ((double) num4 < 40.0) desiredVelocity = this.velocity; else if ((double) num4 < 80.0) { vector2.Normalize(); desiredVelocity = vector2 * (num1 * 0.65f); } else { vector2.Normalize(); desiredVelocity = vector2 * num1; } this.SimpleFlyMovement(desiredVelocity, moveSpeed); this.rotation = this.velocity.X * 0.1f; if ((double) this.rotation > 0.5) this.rotation = 0.5f; if ((double) this.rotation >= -0.5) return; this.rotation = -0.5f; } private void AI_121_QueenSlime() { int Damage1 = 30; int Damage2 = 40; int num1 = Main.expertMode ? 1 : 0; float num2 = 1f; bool flag1 = false; bool flag2 = this.life <= this.lifeMax / 2; if ((double) this.localAI[0] == 0.0) { this.ai[1] = -100f; this.localAI[0] = (float) this.lifeMax; this.TargetClosest(); this.netUpdate = true; } Lighting.AddLight(this.Center, 1f, 0.7f, 0.9f); int num3 = 500; if (Main.player[this.target].dead || (double) Math.Abs(this.Center.X - Main.player[this.target].Center.X) / 16.0 > (double) num3) { this.TargetClosest(); if (Main.player[this.target].dead || (double) Math.Abs(this.Center.X - Main.player[this.target].Center.X) / 16.0 > (double) num3) { this.EncourageDespawn(10); if ((double) Main.player[this.target].Center.X < (double) this.Center.X) this.direction = 1; else this.direction = -1; } } if (!Main.player[this.target].dead && this.timeLeft > 10 && !flag2 && (double) this.ai[3] >= 300.0 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0) { this.ai[0] = 2f; this.ai[1] = 0.0f; if (Main.netMode != 1) { this.netUpdate = true; this.TargetClosest(false); Point tileCoordinates1 = this.Center.ToTileCoordinates(); Point tileCoordinates2 = Main.player[this.target].Center.ToTileCoordinates(); Vector2 vector2 = Main.player[this.target].Center - this.Center; int num4 = 10; int num5 = 0; int num6 = 7; int num7 = 0; bool flag3 = false; if ((double) this.ai[3] >= 360.0 || (double) vector2.Length() > 2000.0) { if ((double) this.ai[3] > 360.0) this.ai[3] = 360f; flag3 = true; num7 = 100; } while (!flag3 && num7 < 100) { ++num7; int index1 = Main.rand.Next(tileCoordinates2.X - num4, tileCoordinates2.X + num4 + 1); int index2 = Main.rand.Next(tileCoordinates2.Y - num4, tileCoordinates2.Y + 1); if ((index2 < tileCoordinates2.Y - num6 || index2 > tileCoordinates2.Y + num6 || index1 < tileCoordinates2.X - num6 || index1 > tileCoordinates2.X + num6) && (index2 < tileCoordinates1.Y - num5 || index2 > tileCoordinates1.Y + num5 || index1 < tileCoordinates1.X - num5 || index1 > tileCoordinates1.X + num5) && !Main.tile[index1, index2].nactive()) { int index3 = index2; int num8 = 0; if ((!Main.tile[index1, index3].nactive() || !Main.tileSolid[(int) Main.tile[index1, index3].type] ? 0 : (!Main.tileSolidTop[(int) Main.tile[index1, index3].type] ? 1 : 0)) != 0) { num8 = 1; } else { for (; num8 < 150 && index3 + num8 < Main.maxTilesY; ++num8) { int index4 = index3 + num8; if ((!Main.tile[index1, index4].nactive() || !Main.tileSolid[(int) Main.tile[index1, index4].type] ? 0 : (!Main.tileSolidTop[(int) Main.tile[index1, index4].type] ? 1 : 0)) != 0) { --num8; break; } } } int index5 = index2 + num8; bool flag4 = true; if (flag4 && Main.tile[index1, index5].lava()) flag4 = false; if (flag4 && !Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) flag4 = false; if (flag4) { this.localAI[1] = (float) (index1 * 16 + 8); this.localAI[2] = (float) (index5 * 16 + 16); break; } } } if (num7 >= 100) { Vector2 bottom = Main.player[(int) Player.FindClosest(this.position, this.width, this.height)].Bottom; this.localAI[1] = bottom.X; this.localAI[2] = bottom.Y; this.ai[3] = 0.0f; } } } if (!flag2 && (!Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0) || (double) Math.Abs(this.Top.Y - Main.player[this.target].Bottom.Y) > 320.0)) { this.ai[3] += 1.5f; } else { float num9 = this.ai[3]; --this.ai[3]; if ((double) this.ai[3] < 0.0) { if (Main.netMode != 1 && (double) num9 > 0.0) this.netUpdate = true; this.ai[3] = 0.0f; } } if (this.timeLeft <= 10 && (flag2 && (double) this.ai[0] != 0.0 || !flag2 && (double) this.ai[0] != 3.0)) { this.ai[0] = !flag2 ? 3f : 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; } this.noTileCollide = false; this.noGravity = false; if (flag2) { ++this.localAI[3]; if ((double) this.localAI[3] >= 24.0) this.localAI[3] = 0.0f; if ((double) this.ai[0] == 4.0 && (double) this.ai[2] == 1.0) this.localAI[3] = 6f; if ((double) this.ai[0] == 5.0 && (double) this.ai[2] != 1.0) this.localAI[3] = 7f; } switch ((int) this.ai[0]) { case 0: if (flag2) { this.AI_121_QueenSlime_FlyMovement(); } else { this.noTileCollide = false; this.noGravity = false; if ((double) this.velocity.Y == 0.0) { this.velocity.X *= 0.8f; if ((double) this.velocity.X > -0.1 && (double) this.velocity.X < 0.1) this.velocity.X = 0.0f; } } if (this.timeLeft > 10 && (flag2 || (double) this.velocity.Y == 0.0)) { ++this.ai[1]; int num10 = 60; if (flag2) num10 = 120; if ((double) this.ai[1] > (double) num10) { this.ai[1] = 0.0f; if (flag2) { Player player = Main.player[this.target]; this.ai[0] = Main.rand.Next(2) == 1 ? 5f : 4f; if ((double) this.ai[0] == 4.0) { this.ai[2] = 1f; if (player != null && player.active && !player.dead && ((double) player.Bottom.Y < (double) this.Bottom.Y || (double) Math.Abs(player.Center.X - this.Center.X) > 250.0)) { this.ai[0] = 5f; this.ai[2] = 0.0f; } } } else { switch (Main.rand.Next(3)) { case 1: this.ai[0] = 4f; break; case 2: this.ai[0] = 5f; break; default: this.ai[0] = 3f; break; } } this.netUpdate = true; break; } break; } break; case 1: this.rotation = 0.0f; ++this.ai[1]; num2 = (float) (0.5 + (double) MathHelper.Clamp(this.ai[1] / 30f, 0.0f, 1f) * 0.5); if ((double) this.ai[1] >= 30.0 && Main.netMode != 1) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.netUpdate = true; this.TargetClosest(); } if (Main.netMode == 1 && (double) this.ai[1] >= 60.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.TargetClosest(); } Color dustColor1 = NPC.AI_121_QueenSlime_GetDustColor(); dustColor1.A = (byte) 150; for (int index6 = 0; index6 < 10; ++index6) { int index7 = Dust.NewDust(this.position + Vector2.UnitX * -20f, this.width + 40, this.height, 4, this.velocity.X, this.velocity.Y, 50, dustColor1, 1.5f); Main.dust[index7].noGravity = true; Main.dust[index7].velocity *= 2f; } break; case 2: this.rotation = 0.0f; ++this.ai[1]; num2 = (float) (0.5 + (double) MathHelper.Clamp((float) ((60.0 - (double) this.ai[1]) / 60.0), 0.0f, 1f) * 0.5); if ((double) this.ai[1] >= 60.0) flag1 = true; if ((double) this.ai[1] == 60.0) Gore.NewGore(this.Center + new Vector2(-40f, (float) (-this.height / 2)), this.velocity, 1258); if ((double) this.ai[1] >= 60.0 && Main.netMode != 1) { this.Bottom = new Vector2(this.localAI[1], this.localAI[2]); this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; } if (Main.netMode == 1 && (double) this.ai[1] >= 120.0) { this.ai[0] = 1f; this.ai[1] = 0.0f; } if (!flag1) { Color dustColor2 = NPC.AI_121_QueenSlime_GetDustColor(); dustColor2.A = (byte) 150; for (int index8 = 0; index8 < 10; ++index8) { int index9 = Dust.NewDust(this.position + Vector2.UnitX * -20f, this.width + 40, this.height, 4, this.velocity.X, this.velocity.Y, 50, dustColor2, 1.5f); Main.dust[index9].noGravity = true; Main.dust[index9].velocity *= 0.5f; } break; } break; case 3: this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) { this.velocity.X *= 0.8f; if ((double) this.velocity.X > -0.1 && (double) this.velocity.X < 0.1) this.velocity.X = 0.0f; this.ai[1] += 4f; if ((double) this.life < (double) this.lifeMax * 0.66) this.ai[1] += 4f; if ((double) this.life < (double) this.lifeMax * 0.33) this.ai[1] += 4f; if ((double) this.ai[1] >= 0.0) { this.netUpdate = true; this.TargetClosest(); if ((double) this.ai[2] == 3.0) { this.velocity.Y = -13f; this.velocity.X += 3.5f * (float) this.direction; this.ai[1] = 0.0f; this.ai[2] = 0.0f; if (this.timeLeft > 10) { this.ai[0] = 0.0f; break; } this.ai[1] = -60f; break; } if ((double) this.ai[2] == 2.0) { this.velocity.Y = -6f; this.velocity.X += 4.5f * (float) this.direction; this.ai[1] = -40f; ++this.ai[2]; break; } this.velocity.Y = -8f; this.velocity.X += 4f * (float) this.direction; this.ai[1] = -40f; ++this.ai[2]; break; } break; } if (this.target < (int) byte.MaxValue) { float num11 = 3f; if (Main.getGoodWorld) num11 = 7f; if (this.direction == 1 && (double) this.velocity.X < (double) num11 || this.direction == -1 && (double) this.velocity.X > -(double) num11) { if (this.direction == -1 && (double) this.velocity.X < 0.1 || this.direction == 1 && (double) this.velocity.X > -0.1) { this.velocity.X += 0.2f * (float) this.direction; break; } this.velocity.X *= 0.93f; break; } break; } break; case 4: this.rotation *= 0.9f; this.noTileCollide = true; this.noGravity = true; if ((double) this.ai[2] == 1.0) { this.noTileCollide = false; this.noGravity = false; int num12 = 30; if (flag2) num12 = 10; if (Main.getGoodWorld) num12 = 0; Player player = Main.player[this.target]; Vector2 center1 = this.Center; if (!player.dead && player.active && (double) Math.Abs(this.Center.X - player.Center.X) / 16.0 <= (double) num3) { Vector2 center2 = player.Center; } if ((double) this.velocity.Y == 0.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; SoundEngine.PlaySound(SoundID.Item167, this.Center); if (Main.netMode != 1) Projectile.NewProjectile(this.Bottom, Vector2.Zero, 922, Damage2, 0.0f, Main.myPlayer); for (int index10 = 0; index10 < 20; ++index10) { int index11 = Dust.NewDust(this.Bottom - new Vector2((float) (this.width / 2), 30f), this.width, 30, 31, this.velocity.X, this.velocity.Y, 40, NPC.AI_121_QueenSlime_GetDustColor()); Main.dust[index11].noGravity = true; Main.dust[index11].velocity.Y = (float) ((double) Main.rand.NextFloat() * -3.0 - 5.0); Main.dust[index11].velocity.X *= 7f; } } else if ((double) this.ai[1] >= (double) num12) { for (int index12 = 0; index12 < 4; ++index12) { Vector2 Position = this.Bottom - new Vector2(Main.rand.NextFloatDirection() * 16f, (float) Main.rand.Next(8)); int index13 = Dust.NewDust(Position, 2, 2, 31, this.velocity.X, this.velocity.Y, 40, NPC.AI_121_QueenSlime_GetDustColor(), 1.4f); Main.dust[index13].position = Position; Main.dust[index13].noGravity = true; Main.dust[index13].velocity.Y = this.velocity.Y * 0.9f; Main.dust[index13].velocity.X = (float) ((Main.rand.Next(2) == 0 ? -10.0 : 10.0) + (double) Main.rand.NextFloatDirection() * 3.0); } } this.velocity.X *= 0.8f; float num13 = this.ai[1]; ++this.ai[1]; if ((double) this.ai[1] >= (double) num12) { if ((double) num13 < (double) num12) this.netUpdate = true; if (flag2 && (double) this.ai[1] > (double) (num12 + 120)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.velocity.Y *= 0.8f; this.netUpdate = true; break; } ++this.velocity.Y; float num14 = 14f; if (Main.getGoodWorld) { ++this.velocity.Y; num14 = 15.99f; } if ((double) this.velocity.Y == 0.0) this.velocity.Y = 0.01f; if ((double) this.velocity.Y >= (double) num14) { this.velocity.Y = num14; break; } break; } this.velocity.Y *= 0.8f; break; } if (Main.netMode != 1 && (double) this.ai[1] == 0.0) { this.TargetClosest(); this.netUpdate = true; } ++this.ai[1]; if ((double) this.ai[1] >= 30.0) { if ((double) this.ai[1] >= 60.0) { this.ai[1] = 60f; if (Main.netMode != 1) { this.ai[1] = 0.0f; this.ai[2] = 1f; this.velocity.Y = -3f; this.netUpdate = true; } } Player player = Main.player[this.target]; Vector2 center = this.Center; if (!player.dead && player.active && (double) Math.Abs(this.Center.X - player.Center.X) / 16.0 <= (double) num3) center = player.Center; center.Y -= 384f; if ((double) this.velocity.Y == 0.0) { this.velocity = center - this.Center; this.velocity = this.velocity.SafeNormalize(Vector2.Zero); this.velocity = this.velocity * 20f; break; } this.velocity.Y *= 0.95f; break; } break; case 5: this.rotation *= 0.9f; this.noTileCollide = true; this.noGravity = true; if (flag2) this.ai[3] = 0.0f; if ((double) this.ai[2] == 1.0) { ++this.ai[1]; if ((double) this.ai[1] >= 10.0) { if (Main.netMode != 1) { int num15 = 10; if (Main.getGoodWorld) num15 = 15; int num16 = num15; if (!flag2) num16 = 6; for (int index = 0; index < num16; ++index) { Vector2 spinningpoint = new Vector2(9f, 0.0f); spinningpoint = spinningpoint.RotatedBy((double) -index * 6.28318548202515 / (double) num15, Vector2.Zero); Projectile.NewProjectile(this.Center.X, this.Center.Y, spinningpoint.X, spinningpoint.Y, 926, Damage1, 0.0f, Main.myPlayer); } } this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; break; } break; } if (Main.netMode != 1 && (double) this.ai[1] == 0.0) { this.TargetClosest(); this.netUpdate = true; } ++this.ai[1]; if ((double) this.ai[1] >= 50.0) { this.ai[1] = 50f; if (Main.netMode != 1) { this.ai[1] = 0.0f; this.ai[2] = 1f; this.netUpdate = true; } } float num17 = 100f; for (int index14 = 0; index14 < 4; ++index14) { Vector2 Position = this.Center + Main.rand.NextVector2CircularEdge(num17, num17); if (!flag2) Position += new Vector2(0.0f, 20f); Vector2 vector2 = (Position - this.Center).SafeNormalize(Vector2.Zero) * -8f; int index15 = Dust.NewDust(Position, 2, 2, 31, vector2.X, vector2.Y, 40, NPC.AI_121_QueenSlime_GetDustColor(), 1.8f); Main.dust[index15].position = Position; Main.dust[index15].noGravity = true; Main.dust[index15].alpha = 250; Main.dust[index15].velocity = vector2; Main.dust[index15].customData = (object) this; } if (flag2) { this.AI_121_QueenSlime_FlyMovement(); break; } break; } this.dontTakeDamage = this.hide = flag1; if ((double) num2 != (double) this.scale) { this.position.X += (float) (this.width / 2); this.position.Y += (float) this.height; this.scale = num2; this.width = (int) (114.0 * (double) this.scale); this.height = (int) (100.0 * (double) this.scale); this.position.X -= (float) (this.width / 2); this.position.Y -= (float) this.height; } if (this.life <= 0) return; if (Main.rand.Next(360) == 0) SoundEngine.PlaySound(65, this.position); if (Main.netMode == 1) return; if ((double) this.localAI[0] >= (double) (this.lifeMax / 2) && this.life < this.lifeMax / 2) { this.localAI[0] = (float) this.life; this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } int num18 = (int) ((double) this.lifeMax * 0.0199999995529652); if (flag2) num18 = (int) ((double) this.lifeMax * 0.0149999996647239); if ((double) (this.life + num18) >= (double) this.localAI[0]) return; this.localAI[0] = (float) this.life; int num19 = Main.rand.Next(1, 3); for (int index = 0; index < num19; ++index) { int X = (int) ((double) this.position.X + (double) Main.rand.Next(this.width - 32)); int Y = (int) ((double) this.position.Y + (double) Main.rand.Next(this.height - 32)); int Type = 658; switch (Main.rand.Next(3)) { case 0: Type = 658; break; case 1: Type = 659; break; case 2: Type = 660; break; } int number = NPC.NewNPC(X, Y, Type); Main.npc[number].SetDefaults(Type); Main.npc[number].velocity.X = (float) Main.rand.Next(-15, 16) * 0.1f; Main.npc[number].velocity.Y = (float) Main.rand.Next(-30, 1) * 0.1f; Main.npc[number].ai[0] = (float) (-500 * Main.rand.Next(3)); Main.npc[number].ai[1] = 0.0f; if (Main.netMode == 2 && number < 200) NetMessage.SendData(23, number: number); } } public bool AI_120_HallowBoss_IsInPhase2() => (double) this.ai[3] == 1.0 || (double) this.ai[3] == 3.0; public bool AI_120_HallowBoss_IsGenuinelyEnraged() => (double) this.ai[3] == 2.0 || (double) this.ai[3] == 3.0; private void AI_120_HallowBoss_DoMagicEffect(Vector2 spot, int effectType, float progress) { float num1 = 4f; float num2 = 1f; float num3 = 0.0f; float num4 = 0.5f; int num5 = 2; int Type = 267; switch (effectType) { case 1: num2 = 0.5f; num3 = 2f; num4 = 0.0f; break; case 2: case 4: num1 = 50f; num2 = 0.5f; num3 = 0.0f; num4 = 0.0f; num5 = 4; break; case 3: num1 = 30f; num2 = 0.1f; num3 = 2.5f; num4 = 0.0f; break; case 5: if ((double) progress == 0.0) { num5 = 0; } else { num5 = 5; Type = Main.rand.Next(86, 92); } if ((double) progress >= 1.0) { num5 = 0; break; } break; } for (int index = 0; index < num5; ++index) { Dust dust = Dust.NewDustPerfect(spot, Type, new Vector2?(Main.rand.NextVector2CircularEdge(num1, num1) * (Main.rand.NextFloat() * (1f - num4) + num4)), newColor: Main.hslToRgb(Main.rand.NextFloat(), 1f, 0.5f), Scale: ((float) ((double) Main.rand.NextFloat() * 2.0 + 2.0) * num2)); dust.fadeIn = num3; dust.noGravity = true; switch (effectType) { case 2: case 4: dust.velocity *= 0.005f; dust.scale = 3f * Utils.GetLerpValue(0.7f, 0.0f, progress, true) * Utils.GetLerpValue(0.0f, 0.3f, progress, true); dust.velocity = ((float) (6.28318548202515 * ((double) index / 4.0) + 0.785398185253143)).ToRotationVector2() * 8f * Utils.GetLerpValue(1f, 0.0f, progress, true); dust.velocity += this.velocity * 0.3f; float num6 = 0.0f; if (effectType == 4) num6 = 0.5f; dust.color = Main.hslToRgb((float) (((double) index / 5.0 + (double) num6 + (double) progress * 0.5) % 1.0), 1f, 0.5f); dust.color.A /= (byte) 2; dust.alpha = (int) sbyte.MaxValue; break; case 5: if ((double) progress == 0.0) { dust.customData = (object) this; dust.scale = 1.5f; dust.fadeIn = 0.0f; dust.velocity = new Vector2(0.0f, -1f) + Main.rand.NextVector2Circular(1f, 1f); dust.color = new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, 80) * 0.3f; break; } dust.color = Main.hslToRgb((float) ((double) progress * 2.0 % 1.0), 1f, 0.5f); dust.alpha = 0; dust.scale = 1f; dust.fadeIn = 1.3f; dust.velocity *= 3f; dust.velocity.X *= 0.1f; dust.velocity += this.velocity * 1f; break; } } } public static bool ShouldEmpressBeEnraged() => Main.dayTime; private void AI_120_HallowBoss() { Vector2 vector2_1 = new Vector2(-150f, -250f); Vector2 vector2_2 = new Vector2(150f, -250f); Vector2 vector2_3 = new Vector2(0.0f, -350f); Vector2 vector2_4 = new Vector2(0.0f, -350f); Vector2 vector2_5 = new Vector2(-80f, -500f); float moveSpeed = 0.5f; float num1 = 12f; float num2 = 40f; float num3 = 6400f; int Damage1 = 40; int num4 = 50; int num5 = 70; int num6 = 45; int num7 = 45; int num8 = 50; bool flag1 = this.AI_120_HallowBoss_IsInPhase2(); bool flag2 = Main.expertMode; bool flag3 = flag1 & flag2; bool flag4 = NPC.ShouldEmpressBeEnraged(); if (this.life == this.lifeMax & flag4 && !this.AI_120_HallowBoss_IsGenuinelyEnraged()) this.ai[3] += 2f; bool flag5 = true; int num9 = 30; int num10 = 30; int num11 = 30; int num12 = 35; int num13 = 65; if (flag1) { num4 = 60; num6 = 50; num7 = 50; num8 = 60; num5 = 65; num9 = 35; num10 = 35; num11 = 35; num12 = 40; num13 = 30; } int Damage2 = this.GetAttackDamage_ForProjectiles((float) num4, (float) num9); int Damage3 = this.GetAttackDamage_ForProjectiles((float) num6, (float) num10); int Damage4 = this.GetAttackDamage_ForProjectiles((float) num7, (float) num11); int Damage5 = this.GetAttackDamage_ForProjectiles((float) num8, (float) num12); int Damage6 = this.GetAttackDamage_ForProjectiles((float) num5, (float) num13); if (flag4) { Damage2 = 9999; Damage3 = 9999; Damage4 = 9999; Damage5 = 9999; Damage6 = 9999; flag2 = true; } float num14 = flag2 ? 0.3f : 1f; bool flag6 = true; int num15 = 0; if (flag1) num15 += 15; if (flag2) num15 += 5; switch ((int) this.ai[0]) { case 0: if ((double) this.ai[1] == 0.0) { this.velocity = new Vector2(0.0f, 5f); if (Main.netMode != 1) Projectile.NewProjectile(this.Center + new Vector2(0.0f, -80f), Vector2.Zero, 874, 0, 0.0f, Main.myPlayer); } if ((double) this.ai[1] == 10.0) SoundEngine.PlaySound(SoundID.Item161, this.Center); this.velocity = this.velocity * 0.95f; if ((double) this.ai[1] > 10.0 && (double) this.ai[1] < 150.0) { int num16 = 2; for (int index = 0; index < num16; ++index) { float num17 = MathHelper.Lerp(1.3f, 0.7f, this.Opacity) * Utils.GetLerpValue(0.0f, 120f, this.ai[1], true); int dustIndex = Dust.NewDust(this.position, this.width, this.height, 267, newColor: Main.hslToRgb(this.ai[1] / 180f, 1f, 0.5f)); Main.dust[dustIndex].position = this.Center + Main.rand.NextVector2Circular((float) this.width * 3f, (float) this.height * 3f) + new Vector2(0.0f, -150f); Main.dust[dustIndex].velocity *= Main.rand.NextFloat() * 0.8f; Main.dust[dustIndex].noGravity = true; Main.dust[dustIndex].fadeIn = (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 0.699999988079071 * (double) num17); Main.dust[dustIndex].velocity += Vector2.UnitY * 3f; Main.dust[dustIndex].scale = 0.35f; if (dustIndex != 6000) { Dust dust = Dust.CloneDust(dustIndex); dust.scale /= 2f; dust.fadeIn *= 0.85f; dust.color = new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue); } } } ++this.ai[1]; flag5 = false; flag6 = false; this.Opacity = MathHelper.Clamp(this.ai[1] / 180f, 0.0f, 1f); if ((double) this.ai[1] >= 180.0) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; this.TargetClosest(); break; } break; case 1: float num18 = flag1 ? 20f : 45f; if (Main.getGoodWorld) num18 /= 2f; if ((double) this.ai[1] <= 10.0) { if ((double) this.ai[1] == 0.0) this.TargetClosest(); NPCAimedTarget targetData = this.GetTargetData(); if (targetData.Invalid) { this.ai[0] = 13f; this.ai[1] = 0.0f; ++this.ai[2]; this.velocity = this.velocity / 4f; this.netUpdate = true; break; } Vector2 vector2_6 = targetData.Center + new Vector2(0.0f, -300f); if ((double) this.Distance(vector2_6) > 200.0) vector2_6 -= this.DirectionTo(vector2_6) * 100f; Vector2 v = vector2_6 - this.Center; float lerpValue = Utils.GetLerpValue(100f, 600f, v.Length(), false); float num19 = v.Length(); if ((double) num19 > 18.0) num19 = 18f; this.velocity = Vector2.Lerp(v.SafeNormalize(Vector2.Zero) * num19, v / 6f, lerpValue); this.netUpdate = true; } this.velocity = this.velocity * 0.92f; ++this.ai[1]; if ((double) this.ai[1] >= (double) num18) { int num20 = (int) this.ai[2]; int num21 = 2; int num22 = 0; if (!flag1) { int num23 = num22; int num24 = num23 + 1; int num25 = num23; int num26 = num24; int num27 = num26 + 1; int num28 = num26; int num29 = num27; int num30 = num29 + 1; int num31 = num29; int num32 = num30; int num33 = num32 + 1; int num34 = num32; int num35 = num33; int num36 = num35 + 1; int num37 = num35; int num38 = num36; int num39 = num38 + 1; int num40 = num38; int num41 = num39; int num42 = num41 + 1; int num43 = num41; int num44 = num42; int num45 = num44 + 1; int num46 = num44; int num47 = num45; int num48 = num47 + 1; int num49 = num47; int num50 = num48; num22 = num50 + 1; int num51 = num50; if (num20 % num22 == num25) num21 = 2; if (num20 % num22 == num28) num21 = 8; if (num20 % num22 == num31) num21 = 6; if (num20 % num22 == num34) num21 = 8; if (num20 % num22 == num37) num21 = 5; if (num20 % num22 == num40) num21 = 2; if (num20 % num22 == num43) num21 = 8; if (num20 % num22 == num46) num21 = 4; if (num20 % num22 == num49) num21 = 8; if (num20 % num22 == num51) num21 = 5; if ((double) this.life / (double) this.lifeMax <= 0.5) num21 = 10; } if (flag1) { int num52 = num22; int num53 = num52 + 1; int num54 = num52; int num55 = num53; int num56 = num55 + 1; int num57 = num55; int num58 = num56; int num59 = num58 + 1; int num60 = num58; int num61 = -1; if (flag2) num61 = num59++; int num62 = num59; int num63 = num62 + 1; int num64 = num62; int num65 = num63; int num66 = num65 + 1; int num67 = num65; int num68 = num66; int num69 = num68 + 1; int num70 = num68; int num71 = num69; int num72 = num71 + 1; int num73 = num71; int num74 = num72; int num75 = num74 + 1; int num76 = num74; int num77 = num75; int num78 = num77 + 1; int num79 = num77; if (num20 % num78 == num54) num21 = 7; if (num20 % num78 == num57) num21 = 2; if (num20 % num78 == num60) num21 = 8; if (num20 % num78 == num64) num21 = 5; if (num20 % num78 == num67) num21 = 2; if (num20 % num78 == num70) num21 = 6; if (num20 % num78 == num70) num21 = 6; if (num20 % num78 == num73) num21 = 4; if (num20 % num78 == num76) num21 = 8; if (num20 % num78 == num61) num21 = 11; if (num20 % num78 == num79) num21 = 12; } this.TargetClosest(); NPCAimedTarget targetData = this.GetTargetData(); bool flag7 = false; if (this.AI_120_HallowBoss_IsGenuinelyEnraged()) { if (!Main.dayTime) flag7 = true; if (Main.dayTime && Main.time >= 53400.0) flag7 = true; } if (((targetData.Invalid ? 1 : ((double) this.Distance(targetData.Center) > (double) num3 ? 1 : 0)) | (flag7 ? 1 : 0)) != 0) num21 = 13; if (num21 == 8 && (double) targetData.Center.X > (double) this.Center.X) num21 = 9; if (flag2 && (num21 == 5 ? 1 : (num21 == 12 ? 1 : 0)) == 0) this.velocity = this.DirectionFrom(targetData.Center).SafeNormalize(Vector2.Zero).RotatedBy(1.57079637050629 * (double) ((double) targetData.Center.X > (double) this.Center.X).ToDirectionInt()) * 20f; this.ai[0] = (float) num21; this.ai[1] = 0.0f; ++this.ai[2]; this.netUpdate = true; break; } break; case 2: if ((double) this.ai[1] == 0.0) SoundEngine.PlaySound(SoundID.Item164, this.Center); float num80 = 90f - (float) num15; Vector2 vector2_7 = new Vector2(-55f, -30f); NPCAimedTarget targetData1 = this.GetTargetData(); Vector2 vector2_8 = targetData1.Invalid ? this.Center : targetData1.Center; if ((double) this.Distance(vector2_8 + vector2_1) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_8 + vector2_1).SafeNormalize(Vector2.Zero) * num1, moveSpeed); if ((double) this.ai[1] < 60.0) this.AI_120_HallowBoss_DoMagicEffect(this.Center + vector2_7, 1, Utils.GetLerpValue(0.0f, 60f, this.ai[1], true)); int num81 = 3; if (flag2) num81 = 2; if ((int) this.ai[1] % num81 == 0 && (double) this.ai[1] < 60.0) { float ai1 = this.ai[1] / 60f; Vector2 velocity = new Vector2(0.0f, -6f).RotatedBy(1.57079637050629 * (double) Main.rand.NextFloatDirection()); if (flag3) velocity = new Vector2(0.0f, -10f).RotatedBy(6.28318548202515 * (double) Main.rand.NextFloat()); if (Main.netMode != 1) Projectile.NewProjectile(this.Center + vector2_7, velocity, 873, Damage3, 0.0f, Main.myPlayer, (float) this.target, ai1); if (Main.netMode != 1) { int num82 = (int) ((double) this.ai[1] / (double) num81); for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex) { if (this.AI_120_HallowBoss_CanShootExtraAt(playerIndex, num82 % 3, 3, 2400f)) Projectile.NewProjectile(this.Center + vector2_7, velocity, 873, Damage3, 0.0f, Main.myPlayer, (float) playerIndex, ai1); } } } ++this.ai[1]; if ((double) this.ai[1] >= 60.0 + (double) num80) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 3: ++this.ai[1]; NPCAimedTarget targetData2 = this.GetTargetData(); Vector2 vector2_9 = targetData2.Invalid ? this.Center : targetData2.Center; if ((double) this.Distance(vector2_9 + vector2_2) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_9 + vector2_2).SafeNormalize(Vector2.Zero) * num1, moveSpeed); if ((int) this.ai[1] % 180 == 0) { Vector2 vector2_10 = new Vector2(0.0f, -100f); Projectile.NewProjectile(targetData2.Center + vector2_10, Vector2.Zero, 874, Damage1, 0.0f, Main.myPlayer); } if ((double) this.ai[1] >= 120.0) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 4: float num83 = (float) (20 - num15); Vector2 vector2_11 = new Vector2(0.0f, -100f); if ((double) this.ai[1] == 0.0) SoundEngine.PlaySound(SoundID.Item162, this.Center); if ((double) this.ai[1] >= 6.0 && (double) this.ai[1] < 54.0) { this.AI_120_HallowBoss_DoMagicEffect(this.Center + new Vector2(-55f, -20f), 2, Utils.GetLerpValue(0.0f, 100f, this.ai[1], true)); this.AI_120_HallowBoss_DoMagicEffect(this.Center + new Vector2(55f, -20f), 4, Utils.GetLerpValue(0.0f, 100f, this.ai[1], true)); } NPCAimedTarget targetData3 = this.GetTargetData(); Vector2 vector2_12 = targetData3.Invalid ? this.Center : targetData3.Center; if ((double) this.Distance(vector2_12 + vector2_3) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_12 + vector2_3).SafeNormalize(Vector2.Zero) * num1, moveSpeed); int num84 = 4; if (flag2) num84 = 5; if ((int) this.ai[1] % 4 == 0 && (double) this.ai[1] < 100.0) { int num85 = 1; for (int index = 0; index < num85; ++index) { int num86 = (int) this.ai[1] / 4; Vector2 vector2_13 = Vector2.UnitX.RotatedBy(3.14159274101257 / (double) (num84 * 2) + (double) num86 * (3.14159274101257 / (double) num84) + 0.0); if (!flag2) vector2_13.X += (double) vector2_13.X > 0.0 ? 0.5f : -0.5f; vector2_13.Normalize(); float num87 = 300f; if (flag2) num87 = 450f; Vector2 center1 = targetData3.Center; if ((double) this.Distance(center1) <= 2400.0) { if ((double) Vector2.Dot(targetData3.Velocity.SafeNormalize(Vector2.UnitY), vector2_13) > 0.0) vector2_13 *= -1f; int num88 = 90; Vector2 vector2_14 = center1 + targetData3.Velocity * (float) num88; Vector2 vector2_15 = center1 + vector2_13 * num87 - targetData3.Velocity * 30f; if ((double) vector2_15.Distance(center1) < (double) num87) { Vector2 vector2_16 = center1 - vector2_15; if (vector2_16 == Vector2.Zero) vector2_16 = vector2_13; vector2_15 = center1 - Vector2.Normalize(vector2_16) * num87; } Vector2 vector2_17 = vector2_15; Vector2 v1 = vector2_14 - vector2_17; if (Main.netMode != 1) Projectile.NewProjectile(vector2_15, Vector2.Zero, 919, Damage2, 0.0f, Main.myPlayer, v1.ToRotation(), this.ai[1] / 100f); if (Main.netMode != 1) { int num89 = (int) ((double) this.ai[1] / 4.0); for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex) { if (this.AI_120_HallowBoss_CanShootExtraAt(playerIndex, num89 % 3, 3, 2400f)) { Player player = Main.player[playerIndex]; Vector2 center2 = player.Center; if ((double) Vector2.Dot(player.velocity.SafeNormalize(Vector2.UnitY), vector2_13) > 0.0) vector2_13 *= -1f; Vector2 vector2_18 = center2 + player.velocity * (float) num88; Vector2 vector2_19 = center2 + vector2_13 * num87 - player.velocity * 30f; if ((double) vector2_19.Distance(center2) < (double) num87) { Vector2 vector2_20 = center2 - vector2_19; if (vector2_20 == Vector2.Zero) vector2_20 = vector2_13; vector2_19 = center2 - Vector2.Normalize(vector2_20) * num87; } Vector2 vector2_21 = vector2_19; Vector2 v2 = vector2_18 - vector2_21; Projectile.NewProjectile(vector2_19, Vector2.Zero, 919, Damage2, 0.0f, Main.myPlayer, v2.ToRotation(), this.ai[1] / 100f); } } } } } } ++this.ai[1]; if ((double) this.ai[1] >= 100.0 + (double) num83) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 5: if ((double) this.ai[1] == 0.0) SoundEngine.PlaySound(SoundID.Item163, this.Center); float num90 = 30f - (float) num15; Vector2 vector2_22 = new Vector2(55f, -30f); Vector2 vector2_23 = this.Center + vector2_22; if ((double) this.ai[1] < 42.0) this.AI_120_HallowBoss_DoMagicEffect(this.Center + vector2_22, 3, Utils.GetLerpValue(0.0f, 42f, this.ai[1], true)); NPCAimedTarget targetData4 = this.GetTargetData(); Vector2 vector2_24 = targetData4.Invalid ? this.Center : targetData4.Center; if ((double) this.Distance(vector2_24 + vector2_4) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_24 + vector2_4).SafeNormalize(Vector2.Zero) * num1, moveSpeed); if ((int) this.ai[1] % 42 == 0 && (double) this.ai[1] < 42.0) { float num91 = 6.283185f * Main.rand.NextFloat(); for (float num92 = 0.0f; (double) num92 < 1.0; num92 += 0.07692308f) { float ai1 = num92; Vector2 spinningpoint = Vector2.UnitY.RotatedBy(1.57079637050629 + 6.28318548202515 * (double) ai1 + (double) num91); if (Main.netMode != 1) Projectile.NewProjectile(vector2_23 + spinningpoint.RotatedBy(-1.57079637050629) * 30f, spinningpoint * 8f, 872, Damage4, 0.0f, Main.myPlayer, ai1: ai1); } } ++this.ai[1]; if ((double) this.ai[1] >= 42.0 + (double) num90) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 6: float num93 = (float) (120 - num15); Vector2 position = this.Center + new Vector2(0.0f, -100f); NPCAimedTarget targetData5 = this.GetTargetData(); Vector2 vector2_25 = targetData5.Invalid ? this.Center : targetData5.Center; if ((double) this.Distance(vector2_25 + vector2_5) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_25 + vector2_5).SafeNormalize(Vector2.Zero) * num1 * 0.3f, moveSpeed * 0.7f); if ((int) this.ai[1] % 60 == 0 && (double) this.ai[1] < 180.0) { int num94 = (int) this.ai[1] / 60; int num95 = (double) targetData5.Center.X > (double) this.Center.X ? 1 : 0; float num96 = 6f; if (flag2) num96 = 8f; float num97 = 1f / num96; for (float num98 = 0.0f; (double) num98 < 1.0; num98 += num97) { float ai0 = (float) (6.28318548202515 * (((double) num98 + (double) num97 * 0.5 + (double) num94 * (double) num97 * 0.5) % 1.0 + (double) num95)); if (Main.netMode != 1) Projectile.NewProjectile(position, Vector2.Zero, 923, Damage5, 0.0f, Main.myPlayer, ai0, (float) this.whoAmI); } } ++this.ai[1]; if ((double) this.ai[1] >= 180.0 + (double) num93) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 7: float num99 = 20f; float num100 = 60f; float num101 = num100 * 4f; if (flag2) { num99 = 40f; num100 = 40f; num101 = num100 * 6f; } float num102 = num99 - (float) num15; NPCAimedTarget targetData6 = this.GetTargetData(); Vector2 vector2_26 = targetData6.Invalid ? this.Center : targetData6.Center; if ((double) this.Distance(vector2_26 + vector2_4) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_26 + vector2_4).SafeNormalize(Vector2.Zero) * num1 * 0.4f, moveSpeed); if ((double) (int) this.ai[1] % (double) num100 == 0.0 && (double) this.ai[1] < (double) num101) { SoundEngine.PlaySound(SoundID.Item162, this.Center); double num103 = (double) Main.rand.NextFloat(); int num104 = (int) this.ai[1] / (int) num100; float num105 = 13f; float num106 = 150f; float y = num105 * num106; Vector2 center = targetData6.Center; if ((double) this.Distance(center) <= 3200.0) { Vector2 vector2_27 = Vector2.Zero; Vector2 vector2_28 = Vector2.UnitY; float num107 = 0.4f; float num108 = 1.4f; float num109 = 1f; if (flag2) { num105 += 5f; num106 += 50f; num109 *= 1f; y *= 0.5f; } switch (num104) { case 0: center += new Vector2((float) (-(double) y / 2.0), 0.0f) * num109; vector2_27 = new Vector2(0.0f, y); vector2_28 = Vector2.UnitX; break; case 1: center += new Vector2(y / 2f, num106 / 2f) * num109; vector2_27 = new Vector2(0.0f, y); vector2_28 = -Vector2.UnitX; break; case 2: center += new Vector2(-y, -y) * num107 * num109; vector2_27 = new Vector2(y * num108, 0.0f); vector2_28 = new Vector2(1f, 1f); break; case 3: center += new Vector2((float) ((double) y * (double) num107 + (double) num106 / 2.0), -y * num107) * num109; vector2_27 = new Vector2(-y * num108, 0.0f); vector2_28 = new Vector2(-1f, 1f); break; case 4: center += new Vector2(-y, y) * num107 * num109; vector2_27 = new Vector2(y * num108, 0.0f); vector2_28 = center.DirectionTo(targetData6.Center); break; case 5: center += new Vector2((float) ((double) y * (double) num107 + (double) num106 / 2.0), y * num107) * num109; vector2_27 = new Vector2(-y * num108, 0.0f); vector2_28 = center.DirectionTo(targetData6.Center); break; } for (float num110 = 0.0f; (double) num110 <= 1.0; num110 += 1f / num105) { Vector2 vector2_29 = center + vector2_27 * (num110 - 0.5f); Vector2 v = vector2_28; if (flag2) { Vector2 vector2_30 = targetData6.Velocity * 20f * num110; Vector2 vector2_31 = vector2_29.DirectionTo(targetData6.Center + vector2_30); v = Vector2.Lerp(vector2_28, vector2_31, 0.75f).SafeNormalize(Vector2.UnitY); } float ai1 = num110; if (Main.netMode != 1) Projectile.NewProjectile(vector2_29, Vector2.Zero, 919, Damage6, 0.0f, Main.myPlayer, v.ToRotation(), ai1); } } } ++this.ai[1]; if ((double) this.ai[1] >= (double) num101 + (double) num102) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 8: case 9: float num111 = (float) (20 - num15); Vector2 vector2_32 = this.Center + new Vector2(0.0f, -100f); flag6 = (double) this.ai[1] < 6.0 || (double) this.ai[1] > 40.0; int num112 = (double) this.ai[0] == 8.0 ? -1 : 1; this.AI_120_HallowBoss_DoMagicEffect(this.Center, 5, Utils.GetLerpValue(40f, 90f, this.ai[1], true)); if ((double) this.ai[1] <= 40.0) { if ((double) this.ai[1] == 20.0) SoundEngine.PlaySound(SoundID.Item160, this.Center); NPCAimedTarget targetData7 = this.GetTargetData(); this.SimpleFlyMovement(this.DirectionTo((targetData7.Invalid ? this.Center : targetData7.Center) + new Vector2((float) (num112 * -550), 0.0f)).SafeNormalize(Vector2.Zero) * num1, moveSpeed * 2f); if ((double) this.ai[1] == 40.0) this.velocity = this.velocity * 0.3f; } else if ((double) this.ai[1] <= 90.0) { this.velocity = Vector2.Lerp(this.velocity, new Vector2((float) (num112 * 50), 0.0f), 0.05f); if ((double) this.ai[1] == 90.0) this.velocity = this.velocity * 0.7f; num14 *= 1.5f; } else this.velocity = this.velocity * 0.92f; ++this.ai[1]; if ((double) this.ai[1] >= 90.0 + (double) num111) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 10: float num113 = (float) (20 - num15); if ((double) this.ai[1] == 0.0) SoundEngine.PlaySound(SoundID.Item161, this.Center); flag6 = (double) this.ai[1] < 30.0 || (double) this.ai[1] > 170.0; this.velocity = this.velocity * 0.95f; if ((double) this.ai[1] == 90.0) { if ((double) this.ai[3] == 0.0) this.ai[3] = 1f; if ((double) this.ai[3] == 2.0) this.ai[3] = 3f; this.Center = this.GetTargetData().Center + new Vector2(0.0f, -250f); this.netUpdate = true; } ++this.ai[1]; if ((double) this.ai[1] >= 180.0 + (double) num113) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; break; } break; case 11: if ((double) this.ai[1] == 0.0) SoundEngine.PlaySound(SoundID.Item162, this.Center); float num114 = (float) (20 - num15); Vector2 vector2_33 = new Vector2(0.0f, -100f); if ((double) this.ai[1] >= 6.0 && (double) this.ai[1] < 54.0) { this.AI_120_HallowBoss_DoMagicEffect(this.Center + new Vector2(-55f, -20f), 2, Utils.GetLerpValue(0.0f, 100f, this.ai[1], true)); this.AI_120_HallowBoss_DoMagicEffect(this.Center + new Vector2(55f, -20f), 4, Utils.GetLerpValue(0.0f, 100f, this.ai[1], true)); } NPCAimedTarget targetData8 = this.GetTargetData(); Vector2 vector2_34 = targetData8.Invalid ? this.Center : targetData8.Center; if ((double) this.Distance(vector2_34 + vector2_3) > (double) num2) this.SimpleFlyMovement(this.DirectionTo(vector2_34 + vector2_3).SafeNormalize(Vector2.Zero) * num1, moveSpeed); if ((int) this.ai[1] % 3 == 0 && (double) this.ai[1] < 100.0) { int num115 = 1; for (int index = 0; index < num115; ++index) { Vector2 v3 = -targetData8.Velocity; v3.SafeNormalize(-Vector2.UnitY); float num116 = 100f; Vector2 center3 = targetData8.Center; if ((double) this.Distance(center3) <= 2400.0) { int num117 = 90; Vector2 vector2_35 = center3 + targetData8.Velocity * (float) num117; Vector2 vector2_36 = center3 + v3 * num116; if ((double) vector2_36.Distance(center3) < (double) num116) { Vector2 vector2_37 = center3 - vector2_36; if (vector2_37 == Vector2.Zero) vector2_37 = v3; vector2_36 = center3 - Vector2.Normalize(vector2_37) * num116; } Vector2 vector2_38 = vector2_36; Vector2 v4 = vector2_35 - vector2_38; if (Main.netMode != 1) Projectile.NewProjectile(vector2_36, Vector2.Zero, 919, Damage2, 0.0f, Main.myPlayer, v4.ToRotation(), this.ai[1] / 100f); if (Main.netMode != 1) { int num118 = (int) ((double) this.ai[1] / 3.0); for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex) { if (this.AI_120_HallowBoss_CanShootExtraAt(playerIndex, num118 % 3, 3, 2400f)) { Player player = Main.player[playerIndex]; Vector2 v5 = -player.velocity; v5.SafeNormalize(-Vector2.UnitY); float num119 = 100f; Vector2 center4 = player.Center; int num120 = 90; Vector2 vector2_39 = center4 + player.velocity * (float) num120; Vector2 vector2_40 = center4 + v5 * num119; if ((double) vector2_40.Distance(center4) < (double) num119) { Vector2 vector2_41 = center4 - vector2_40; if (vector2_41 == Vector2.Zero) vector2_41 = v5; vector2_40 = center4 - Vector2.Normalize(vector2_41) * num119; } Vector2 vector2_42 = vector2_40; Vector2 v6 = vector2_39 - vector2_42; Projectile.NewProjectile(vector2_40, Vector2.Zero, 919, Damage2, 0.0f, Main.myPlayer, v6.ToRotation(), this.ai[1] / 100f); } } } } } } ++this.ai[1]; if ((double) this.ai[1] >= 100.0 + (double) num114) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 12: float num121 = 90f - (float) num15; Vector2 vector2_43 = new Vector2(-55f, -30f); if ((double) this.ai[1] == 0.0) { SoundEngine.PlaySound(SoundID.Item165, this.Center); this.velocity = new Vector2(0.0f, -12f); } this.velocity = this.velocity * 0.95f; bool flag8 = (double) this.ai[1] < 60.0 && (double) this.ai[1] >= 10.0; if (flag8) this.AI_120_HallowBoss_DoMagicEffect(this.Center + vector2_43, 1, Utils.GetLerpValue(0.0f, 60f, this.ai[1], true)); int num122 = 6; if (flag2) num122 = 4; float ai1_1 = (float) (((double) this.ai[1] - 10.0) / 50.0); if ((int) this.ai[1] % num122 == 0 & flag8) { double num123 = (double) this.ai[1] / 60.0; Vector2 velocity = new Vector2(0.0f, -20f).RotatedBy(6.28318548202515 * (double) ai1_1); if (Main.netMode != 1) Projectile.NewProjectile(this.Center + vector2_43, velocity, 873, Damage3, 0.0f, Main.myPlayer, (float) this.target, ai1_1); if (Main.netMode != 1) { int num124 = (int) ((double) this.ai[1] % (double) num122); for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex) { if (this.AI_120_HallowBoss_CanShootExtraAt(playerIndex, num124 % 3, 3, 2400f)) Projectile.NewProjectile(this.Center + vector2_43, velocity, 873, Damage3, 0.0f, Main.myPlayer, (float) playerIndex, ai1_1); } } } ++this.ai[1]; if ((double) this.ai[1] >= 60.0 + (double) num121) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; case 13: Vector2 vector2_44 = new Vector2(-55f, -30f); if ((double) this.ai[1] == 0.0) { SoundEngine.PlaySound(SoundID.Item165, this.Center); this.velocity = new Vector2(0.0f, -7f); } this.velocity = this.velocity * 0.95f; this.TargetClosest(); NPCAimedTarget targetData9 = this.GetTargetData(); flag5 = false; bool flag9 = false; bool flag10 = false; if (!flag9) { if (this.AI_120_HallowBoss_IsGenuinelyEnraged()) { if (!Main.dayTime) flag10 = true; if (Main.dayTime && Main.time >= 53400.0) flag10 = true; } flag9 |= flag10; } if (!flag9) { bool flag11 = targetData9.Invalid || (double) this.Distance(targetData9.Center) > (double) num3; flag9 |= flag11; } this.alpha = Utils.Clamp(this.alpha + flag9.ToDirectionInt() * 5, 0, (int) byte.MaxValue); bool flag12 = this.alpha == 0 || this.alpha == (int) byte.MaxValue; int num125 = 5; for (int index = 0; index < num125; ++index) { float num126 = MathHelper.Lerp(1.3f, 0.7f, this.Opacity); int dustIndex = Dust.NewDust(this.position - this.Size * 0.5f, this.width * 2, this.height * 2, 267, newColor: Main.hslToRgb(Main.rand.NextFloat(), 1f, 0.5f)); Main.dust[dustIndex].position = this.Center + Main.rand.NextVector2Circular((float) this.width, (float) this.height); Main.dust[dustIndex].velocity *= Main.rand.NextFloat() * 0.8f; Main.dust[dustIndex].noGravity = true; Main.dust[dustIndex].scale = (float) (0.899999976158142 + (double) Main.rand.NextFloat() * 1.20000004768372); Main.dust[dustIndex].fadeIn = (float) (0.400000005960464 + (double) Main.rand.NextFloat() * 1.20000004768372 * (double) num126); Main.dust[dustIndex].velocity += Vector2.UnitY * -2f; Main.dust[dustIndex].scale = 0.35f; if (dustIndex != 6000) { Dust dust = Dust.CloneDust(dustIndex); dust.scale /= 2f; dust.fadeIn *= 0.85f; dust.color = new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue); } } ++this.ai[1]; if ((double) this.ai[1] >= 20.0 & flag12) { if (this.alpha == (int) byte.MaxValue) { this.active = false; if (Main.netMode == 1) return; NetMessage.SendData(23, number: this.whoAmI); return; } this.ai[0] = 1f; this.ai[1] = 0.0f; this.netUpdate = true; break; } break; } this.dontTakeDamage = !flag6; this.damage = this.GetAttackDamage_ScaledByStrength((float) this.defDamage * num14); if (flag4) this.damage = 9999; this.defense = !flag1 ? this.defDefense : (int) ((double) this.defDefense * 1.20000004768372); if ((double) ++this.localAI[0] >= 44.0) this.localAI[0] = 0.0f; if (flag5) this.alpha = Utils.Clamp(this.alpha - 5, 0, (int) byte.MaxValue); Lighting.AddLight(this.Center, Vector3.One * this.Opacity); } private static void AI_120_HallowBoss_DeprecatedShot( ref NPCAimedTarget targetData, float stormsCount, int stormIndexInSeries, ref Vector2 offsetDirection, float distance) { int num = 1; Vector2 position1 = offsetDirection * distance * (float) num * new Vector2(3f, 1f) - targetData.Velocity * 90f + targetData.Center; Vector2 vector2_1 = position1 - targetData.Center; if ((double) Vector2.Dot(targetData.Velocity.SafeNormalize(Vector2.Zero), vector2_1.SafeNormalize(Vector2.Zero)) > 0.970000028610229) { Vector2 vector2_2 = vector2_1.RotatedBy(0.785398185253143 * (double) (Main.rand.Next(2) * 2 - 1)); position1 = targetData.Center + vector2_2; } Vector2 position2 = position1; Vector2 velocity = (targetData.Center - position2) / 90f; Projectile.NewProjectile(position2, velocity, 871, 1, 0.0f, Main.myPlayer); if (stormIndexInSeries == 0) position1 = position2; Projectile.NewProjectile(position1, Vector2.Zero, 871, 1, 0.0f, Main.myPlayer, ai1: ((float) stormIndexInSeries * (1f / stormsCount))); } private bool AI_120_HallowBoss_CanShootExtraAt( int playerIndex, int rotationIndexToAttack, int rotationSize, float attackScanDistance) { if (playerIndex == this.target || playerIndex % rotationSize != rotationIndexToAttack) return false; Player player = Main.player[playerIndex]; return player.active && !player.dead && this.playerInteraction[playerIndex] && (double) this.Distance(player.Center) <= (double) attackScanDistance; } private void AI_119_Dandelion() { this.TargetClosest(); Player player = Main.player[this.target]; float windSpeedCurrent = Main.windSpeedCurrent; float num1 = player.Center.X - this.Center.X; float num2 = Math.Abs(num1); float num3 = Math.Abs(player.Center.Y - this.Center.Y); if (!Main.IsItAHappyWindyDay && this.timeLeft > 10) this.timeLeft = 10; bool flag = player.active && !player.dead && (double) num3 < 100.0 && (double) num2 < 600.0 && ((double) num1 > 0.0 && (double) windSpeedCurrent > 0.0 || (double) num1 < 0.0 && (double) windSpeedCurrent < 0.0); if ((double) this.ai[0] == 1.0) { this.localAI[0] = 0.0f; if ((double) num2 < 500.0) this.localAI[0] = 1f; if (Main.netMode == 1) return; if (!flag) { this.ai[0] = 0.0f; this.netUpdate = true; } else { if ((double) this.localAI[0] != 1.0) return; ++this.localAI[1]; if ((double) this.localAI[1] > 80.0) { this.ai[0] = 0.0f; this.netUpdate = true; } else { if ((double) this.localAI[1] != 40.0) return; for (int index = 0; index < 1 + Main.rand.Next(3); ++index) { int num4 = -1; if ((double) num1 > 0.0) num4 = 1; Vector2 velocity = new Vector2(2f * (float) num4, -2f); Vector2 vector2 = new Vector2((float) (num4 * Main.rand.Next(-2, 10)), (float) (10 + Main.rand.Next(-6, 6))); velocity += vector2 * 0.25f; Vector2 position = this.Center + vector2; position.X += (float) (num4 * 6); if ((double) velocity.Y > 0.0) velocity.Y *= -1f; Projectile.NewProjectile(position, velocity, 836, this.damage / 2, 1f, ai0: ((float) this.target)); } this.netUpdate = true; } } } else { if ((double) this.ai[0] != 0.0) return; this.localAI[0] = 0.0f; this.localAI[1] = 0.0f; if (!(Main.netMode != 1 & flag)) return; this.ai[0] = 1f; this.netUpdate = true; } } private void AI_118_Seahorses() { this.noGravity = this.wet; float waterLineHeight; Collision.GetWaterLineIterate(this.Center.ToTileCoordinates(), out waterLineHeight); bool flag1 = (double) waterLineHeight > 0.0 && (double) this.Top.Y - (double) waterLineHeight < 20.0; if (!this.wet) { if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.95f; this.rotation += (float) (((double) this.velocity.X + (double) this.velocity.Y) / 2.0 * 0.0500000007450581); } else { --this.ai[1]; if ((double) this.ai[1] <= 0.0) { this.velocity = this.velocity + this.ai[0].ToRotationVector2() * 0.06f; float num = this.velocity.Length(); if ((double) num > 3.0 || (double) num < -3.0) { this.velocity.X = Math.Min(3f, Math.Max(-3f, this.velocity.X)); this.ai[1] = (float) Main.rand.Next(450, 600); this.ai[0] = Main.rand.NextFloat() * 6.283185f; if (flag1 && (double) this.ai[0] > 3.14159274101257) this.ai[0] -= 3.141593f; this.netUpdate = true; } } else this.velocity = this.velocity * 0.95f; this.rotation = this.velocity.X * 0.1f; } bool flag2 = this.collideY && this.wet && (!flag1 || (double) this.velocity.Y < 0.0); if (!(this.collideX | flag2)) return; Vector2 rotationVector2 = this.ai[0].ToRotationVector2(); if (this.collideX) rotationVector2.X *= -1f; if (flag2) rotationVector2.Y *= -1f; this.ai[0] = rotationVector2.ToRotation(); this.velocity = this.ai[0].ToRotationVector2() * this.velocity.Length(); this.netUpdate = true; } private void AI_117_BloodNautilus() { float moveSpeed = 0.15f; float num1 = 7.5f; float num2 = 60f; float num3 = 90f; float num4 = 180f; float num5 = 90f; float num6 = 90f; int num7 = 3; float num8 = 180f; bool flag = false; if ((double) this.localAI[0] == 0.0) { this.localAI[0] = 1f; this.alpha = (int) byte.MaxValue; if (Main.netMode != 1) { this.ai[0] = -1f; this.netUpdate = true; } } if ((double) this.ai[0] != -1.0 && Main.rand.Next(4) == 0) { this.position = this.position + this.netOffset; Dust dust = Dust.NewDustDirect(this.position + new Vector2(5f), this.width - 10, this.height - 10, 5); dust.velocity *= 0.5f; if ((double) dust.velocity.Y < 0.0) dust.velocity.Y *= -1f; dust.alpha = 120; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.400000005960464); dust.velocity += this.velocity * 0.3f; this.position = this.position - this.netOffset; } if (this.target == (int) byte.MaxValue) { this.TargetClosest(); this.ai[2] = (float) this.direction; } if (Main.player[this.target].dead || (double) Vector2.Distance(Main.player[this.target].Center, this.Center) > 2000.0) this.TargetClosest(); NPCAimedTarget npcAimedTarget = this.GetTargetData(); if (Main.dayTime || !Main.bloodMoon) npcAimedTarget = new NPCAimedTarget(); int num9 = -1; switch (this.ai[0]) { case -1f: this.velocity = this.velocity * 0.98f; int num10 = Math.Sign(npcAimedTarget.Center.X - this.Center.X); if (num10 != 0) { this.direction = num10; this.spriteDirection = -this.direction; } if ((double) this.localAI[1] == 0.0 && this.alpha < 100) { this.localAI[1] = 1f; int num11 = 36; for (int index1 = 0; index1 < num11; ++index1) { this.position = this.position + this.netOffset; Vector2 vector2_1 = (Vector2.Normalize(this.velocity) * new Vector2((float) this.width / 2f, (float) this.height) * 0.75f * 0.5f).RotatedBy((double) (index1 - (num11 / 2 - 1)) * 6.28318548202515 / (double) num11) + this.Center; Vector2 vector2_2 = vector2_1 - this.Center; int index2 = Dust.NewDust(vector2_1 + vector2_2, 0, 0, 5, vector2_2.X * 2f, vector2_2.Y * 2f, 100, Scale: 1.4f); Main.dust[index2].noGravity = true; Main.dust[index2].velocity = Vector2.Normalize(vector2_2) * 3f; this.position = this.position - this.netOffset; } } if ((double) this.ai[2] > 5.0) { this.velocity.Y = -2.5f; this.alpha -= 10; if (Collision.SolidCollision(this.position, this.width, this.height)) { this.alpha += 15; if (this.alpha > 150) this.alpha = 150; } if (this.alpha < 0) this.alpha = 0; } ++this.ai[2]; if ((double) this.ai[2] >= 50.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; break; } break; case 0.0f: Vector2 vector2_3 = npcAimedTarget.Center + new Vector2((float) (-(double) this.ai[2] * 300.0), -200f); if ((double) this.Center.Distance(vector2_3) > 50.0) this.SimpleFlyMovement(this.DirectionTo(vector2_3) * num1, moveSpeed); this.direction = (double) this.Center.X < (double) npcAimedTarget.Center.X ? 1 : -1; float targetAngle1 = this.Center.DirectionTo(npcAimedTarget.Center).ToRotation() - 0.4712389f * (float) this.spriteDirection; if (this.spriteDirection == -1) targetAngle1 += 3.141593f; if (this.spriteDirection != this.direction) { this.spriteDirection = this.direction; this.rotation = -this.rotation; targetAngle1 = -targetAngle1; } this.rotation = this.rotation.AngleTowards(targetAngle1, 0.02f); ++this.ai[1]; if ((double) this.ai[1] > (double) num2) { int num12 = (int) this.ai[3]; if (num12 % 7 == 3) { num9 = 3; break; } if (num12 % 2 == 0) { SoundEngine.PlaySound(SoundID.Item170, this.Center); num9 = 2; break; } SoundEngine.PlaySound(SoundID.Item170, this.Center); num9 = 1; break; } break; case 1f: this.direction = (double) this.Center.X < (double) npcAimedTarget.Center.X ? -1 : 1; float targetAngle2 = this.Center.DirectionFrom(npcAimedTarget.Center).ToRotation() - 0.4712389f * (float) this.spriteDirection; if (this.spriteDirection == -1) targetAngle2 += 3.141593f; if (this.spriteDirection != this.direction & (double) this.ai[1] < (double) num3) { this.spriteDirection = this.direction; this.rotation = -this.rotation; targetAngle2 = -targetAngle2; } if ((double) this.ai[1] < (double) num3) { if ((double) this.ai[1] == (double) num3 - 1.0) SoundEngine.PlaySound(SoundID.Item172, this.Center); flag = true; this.velocity = this.velocity * 0.95f; this.rotation = this.rotation.AngleLerp(targetAngle2, 0.02f); this.position = this.position + this.netOffset; Vector2 mouthPosition; Vector2 mouthDirection; this.BloodNautilus_GetMouthPositionAndRotation(out mouthPosition, out mouthDirection); Dust dust1 = Dust.NewDustDirect(mouthPosition + mouthDirection * 60f - new Vector2(40f), 80, 80, 16, Alpha: 150, newColor: Color.Transparent, Scale: 0.6f); dust1.fadeIn = 1f; dust1.velocity = dust1.position.DirectionTo(mouthPosition + Main.rand.NextVector2Circular(15f, 15f)) * dust1.velocity.Length(); dust1.noGravity = true; Dust dust2 = Dust.NewDustDirect(mouthPosition + mouthDirection * 100f - new Vector2(30f), 60, 60, 16, Alpha: 100, newColor: Color.Transparent, Scale: 0.9f); dust2.fadeIn = 1.5f; dust2.velocity = dust2.position.DirectionTo(mouthPosition + Main.rand.NextVector2Circular(15f, 15f)) * (dust2.velocity.Length() + 5f); dust2.noGravity = true; this.position = this.position - this.netOffset; } else if ((double) this.ai[1] < (double) num3 + (double) num4) { this.position = this.position + this.netOffset; this.rotation = this.rotation.AngleLerp(targetAngle2, 0.07f); Vector2 mouthPosition; Vector2 mouthDirection; this.BloodNautilus_GetMouthPositionAndRotation(out mouthPosition, out mouthDirection); if ((double) this.Center.Distance(npcAimedTarget.Center) > 30.0) this.velocity = mouthDirection * -16f + this.Center.DirectionTo(npcAimedTarget.Center) * 2f; for (int index = 0; index < 4; ++index) { Dust dust3 = Dust.NewDustDirect(mouthPosition + mouthDirection * 60f - new Vector2(15f), 30, 30, 5, newColor: Color.Transparent, Scale: 1.5f); dust3.velocity = dust3.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(5f, 5f)) * dust3.velocity.Length(); dust3.position -= mouthDirection * 60f; Dust dust4 = Dust.NewDustDirect(mouthPosition + mouthDirection * 100f - new Vector2(20f), 40, 40, 5, Alpha: 100, newColor: Color.Transparent, Scale: 1.5f); dust4.velocity = dust4.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(10f, 10f)) * (dust4.velocity.Length() + 5f); dust4.position -= mouthDirection * 100f; } this.position = this.position - this.netOffset; } ++this.ai[1]; if ((double) this.ai[1] >= (double) num3 + (double) num4) { num9 = 0; break; } break; case 2f: this.direction = (double) this.Center.X < (double) npcAimedTarget.Center.X ? 1 : -1; float targetAngle3 = this.Center.DirectionTo(npcAimedTarget.Center).ToRotation() - 0.4712389f * (float) this.spriteDirection; if (this.spriteDirection == -1) targetAngle3 += 3.141593f; if (this.spriteDirection != this.direction) { this.spriteDirection = this.direction; this.rotation = -this.rotation; targetAngle3 = -targetAngle3; } this.rotation = this.rotation.AngleLerp(targetAngle3, 0.2f); if ((double) this.ai[1] < (double) num5) { this.position = this.position + this.netOffset; this.velocity = this.velocity * 0.95f; Vector2 mouthPosition; Vector2 mouthDirection; this.BloodNautilus_GetMouthPositionAndRotation(out mouthPosition, out mouthDirection); if (Main.rand.Next(4) != 0) { Dust dust5 = Dust.NewDustDirect(mouthPosition + mouthDirection * 60f - new Vector2(60f), 120, 120, 16, Alpha: 150, newColor: Color.Transparent, Scale: 0.6f); dust5.fadeIn = 1f; dust5.velocity = dust5.position.DirectionTo(mouthPosition + Main.rand.NextVector2Circular(15f, 15f)) * (dust5.velocity.Length() + 3f); dust5.noGravity = true; Dust dust6 = Dust.NewDustDirect(mouthPosition + mouthDirection * 100f - new Vector2(80f), 160, 160, 16, Alpha: 100, newColor: Color.Transparent, Scale: 0.9f); dust6.fadeIn = 1.5f; dust6.velocity = dust6.position.DirectionTo(mouthPosition + Main.rand.NextVector2Circular(15f, 15f)) * (dust6.velocity.Length() + 5f); dust6.noGravity = true; } this.position = this.position - this.netOffset; } else if ((double) this.ai[1] < (double) num5 + (double) num6) { this.position = this.position + this.netOffset; this.velocity = this.velocity * 0.9f; float num13 = (float) (((double) this.ai[1] - (double) num5) % ((double) num6 / (double) num7)); Vector2 mouthPosition; Vector2 mouthDirection; this.BloodNautilus_GetMouthPositionAndRotation(out mouthPosition, out mouthDirection); if ((double) num13 < (double) num6 / (double) num7 * 0.800000011920929) { for (int index = 0; index < 5; ++index) { Dust dust7 = Dust.NewDustDirect(mouthPosition + mouthDirection * 50f - new Vector2(15f), 30, 30, 5, newColor: Color.Transparent, Scale: 1.5f); dust7.velocity = dust7.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(5f, 5f)) * dust7.velocity.Length(); dust7.position -= mouthDirection * 60f; Dust dust8 = Dust.NewDustDirect(mouthPosition + mouthDirection * 90f - new Vector2(20f), 40, 40, 5, Alpha: 100, newColor: Color.Transparent, Scale: 1.5f); dust8.velocity = dust8.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(10f, 10f)) * (dust8.velocity.Length() + 5f); dust8.position -= mouthDirection * 100f; } } if ((int) num13 == 0) { this.velocity = this.velocity + mouthDirection * -8f; for (int index = 0; index < 20; ++index) { Dust dust9 = Dust.NewDustDirect(mouthPosition + mouthDirection * 60f - new Vector2(15f), 30, 30, 5, newColor: Color.Transparent, Scale: 1.5f); dust9.velocity = dust9.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(5f, 5f)) * dust9.velocity.Length(); dust9.position -= mouthDirection * 60f; Dust dust10 = Dust.NewDustDirect(mouthPosition + mouthDirection * 100f - new Vector2(20f), 40, 40, 5, Alpha: 100, newColor: Color.Transparent, Scale: 1.5f); dust10.velocity = dust10.position.DirectionFrom(mouthPosition + Main.rand.NextVector2Circular(10f, 10f)) * (dust10.velocity.Length() + 5f); dust10.position -= mouthDirection * 100f; } if (Main.netMode != 1) { int num14 = Main.rand.Next(5, 11); Vector2 vector2_4 = mouthDirection * 10f; int damageForProjectiles = this.GetAttackDamage_ForProjectiles(30f, 25f); for (int index = 0; index < num14; ++index) { Vector2 velocity = vector2_4 + Main.rand.NextVector2Square(-6f, 6f); Projectile.NewProjectile(mouthPosition - mouthDirection * 5f, velocity, 814, damageForProjectiles, 0.0f, Main.myPlayer); } } } this.position = this.position - this.netOffset; } ++this.ai[1]; if ((double) this.ai[1] >= (double) num5 + (double) num6) { num9 = 0; break; } break; case 3f: this.direction = (double) this.Center.X < (double) npcAimedTarget.Center.X ? 1 : -1; float targetAngle4 = 0.0f; this.spriteDirection = this.direction; if ((double) this.ai[1] < (double) num8) { this.position = this.position + this.netOffset; this.velocity = Vector2.Lerp(this.velocity, new Vector2(0.0f, MathHelper.Clamp((float) (1.0 - (double) this.ai[1] / (double) num8 * 1.5), 0.0f, 1f) * -1.5f), 0.03f); this.velocity = Vector2.Zero; this.rotation = this.rotation.AngleLerp(targetAngle4, 0.02f); this.BloodNautilus_GetMouthPositionAndRotation(out Vector2 _, out Vector2 _); float t = this.ai[1] / num8; Lighting.AddLight(this.Center, new Vector3(1f, 0.5f, 0.5f) * (Utils.GetLerpValue(0.0f, 0.5f, t, false) * Utils.GetLerpValue(1f, 0.5f, t, false))); if (Main.rand.Next(3) != 0) { Dust dust = Dust.NewDustDirect(this.Center - new Vector2(6f), 12, 12, 5, Alpha: 60, newColor: Color.Transparent, Scale: 1.4f); dust.position += new Vector2((float) (this.spriteDirection * 12), 12f); dust.velocity *= 0.1f; } this.position = this.position - this.netOffset; } if ((double) this.ai[1] == 10.0 || (double) this.ai[1] == 20.0 || (double) this.ai[1] == 30.0) this.BloodNautilus_CallForHelp(); ++this.ai[1]; if ((double) this.ai[1] >= (double) num8) { num9 = 0; break; } break; } if (num9 != -1) { this.ai[0] = (float) num9; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; this.TargetClosest(); if (num9 == 0) this.ai[2] = (float) this.direction; else ++this.ai[3]; } this.reflectsProjectiles = flag; } private void BloodNautilus_CallForHelp() { if (Main.netMode == 1 || !Main.player[this.target].active || Main.player[this.target].dead || (double) this.Distance(Main.player[this.target].Center) > 2000.0 || NPC.CountNPCS(619) >= 3) return; Point tileCoordinates = this.Center.ToTileCoordinates(); Point point = tileCoordinates; int num1 = 20; int num2 = 3; int num3 = 8; int num4 = 2; int num5 = 0; bool flag1 = false; while (!flag1 && num5 < 100) { ++num5; int index1 = Main.rand.Next(point.X - num1, point.X + num1 + 1); int index2 = Main.rand.Next(point.Y - num1, point.Y + num1 + 1); if ((index2 < point.Y - num3 || index2 > point.Y + num3 || index1 < point.X - num3 || index1 > point.X + num3) && (index2 < tileCoordinates.Y - num2 || index2 > tileCoordinates.Y + num2 || index1 < tileCoordinates.X - num2 || index1 > tileCoordinates.X + num2) && !Main.tile[index1, index2].nactive()) { bool flag2 = true; if (flag2 && Main.tile[index1, index2].lava()) flag2 = false; if (flag2 && Collision.SolidTiles(index1 - num4, index1 + num4, index2 - num4, index2 + num4)) flag2 = false; if (flag2 && !Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) flag2 = false; if (flag2) { Projectile.NewProjectile((float) (index1 * 16 + 8), (float) (index2 * 16 + 8), 0.0f, 0.0f, 813, 0, 0.0f, Main.myPlayer); break; } } } } public static bool TooWindyForButterflies => (double) Math.Abs(Main.windSpeedTarget) >= 0.400000005960464; private void AI_116_WaterStriders() { bool flag1 = false; float waterLineHeight; if (Collision.GetWaterLine(this.Center.ToTileCoordinates(), out waterLineHeight)) { float num = this.Bottom.Y - 1f; if ((double) this.Center.Y > (double) waterLineHeight) { this.velocity.Y -= 0.8f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; if ((double) num + (double) this.velocity.Y < (double) waterLineHeight) this.velocity.Y = waterLineHeight - num; } else { this.velocity.Y = MathHelper.Min(this.velocity.Y, waterLineHeight - num); flag1 = true; } } else if (this.wet) this.velocity.Y -= 0.2f; if ((int) this.ai[0] != 0) return; ++this.ai[1]; this.velocity.X *= 0.9f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.6f; bool flag2 = this.wet | flag1; bool flag3 = flag2 || (double) this.velocity.Y == 0.0; int num1 = Main.rand.Next(120, 241); if (!flag2) num1 = Main.rand.Next(60, 241); if (!flag3 || (double) this.ai[1] < (double) num1) return; this.ai[1] = 0.0f; this.velocity.X = Main.rand.NextFloatDirection() * 5f; this.netUpdate = true; if (flag2) return; if ((double) this.velocity.Y == 0.0) this.velocity.Y = -2f; this.ai[1] = 60f; } private void AI_115_LadyBugs() { if (Main.netMode != 1) { if ((double) this.ai[1] == 0.0) { this.ai[1] = (float) ((double) Main.rand.NextFloat() * 0.200000002980232 + 0.699999988079071); this.netUpdate = true; } if ((double) --this.localAI[0] <= 0.0) { this.localAI[0] = (float) Main.rand.Next(60, 181); if (Main.rand.Next(5) == 0) { if ((double) this.ai[2] == 0.0) { this.ai[2] = 1f; this.ai[0] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[2] == 1.0) { this.TargetClosest(); this.ai[2] = 0.0f; this.ai[0] = Main.rand.NextFloat() * 6.283185f; if ((double) this.Distance(Main.player[this.target].Center) > 700.0) this.ai[0] = this.AngleTo(Main.player[this.target].Center) + Main.rand.NextFloatDirection() * 0.3f; this.netUpdate = true; } } this.TargetClosest(); this.ai[0] = Main.rand.NextFloat() * 6.283185f; if ((double) this.Distance(Main.player[this.target].Center) > 700.0) this.ai[0] = this.AngleTo(Main.player[this.target].Center) + Main.rand.NextFloatDirection() * 0.3f; this.netUpdate = true; } } this.scale = this.ai[1]; if ((double) this.ai[2] == 0.0) { Vector2 vector2 = this.ai[0].ToRotationVector2() * 1f; vector2.X += Main.windSpeedTarget * 0.8f; this.velocity = Vector2.Lerp(this.velocity, vector2, 0.0125f); if ((double) this.velocity.Y > 0.0) { int num1 = 4; int index1 = (int) this.Center.X / 16; int num2 = (int) this.Center.Y / 16; for (int index2 = num2; index2 < num2 + num1; ++index2) { if (Main.tile[index1, index2] != null && (Main.tile[index1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].liquid > (byte) 0)) { this.ai[0] = -this.ai[0]; if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.9f; } } } if ((double) this.velocity.Y < 0.0) { int num3 = 30; bool flag = false; int index3 = (int) this.Center.X / 16; int num4 = (int) this.Center.Y / 16; for (int index4 = num4; index4 < num4 + num3; ++index4) { if (Main.tile[index3, index4] != null && (Main.tile[index3, index4].nactive() && Main.tileSolid[(int) Main.tile[index3, index4].type] || Main.tile[index3, index4].liquid > (byte) 0)) flag = true; } if (!flag) { this.ai[0] = -this.ai[0]; if ((double) this.velocity.Y < 0.0) this.velocity.Y *= 0.9f; } } if (this.collideX) { this.ai[0] = (float) (-(double) this.ai[0] + 3.14159274101257); this.velocity.X *= -0.2f; } } else { if ((double) this.velocity.Y > 0.0) { int num5 = 4; int index5 = (int) this.Center.X / 16 + this.direction; int num6 = (int) this.Center.Y / 16; for (int index6 = num6; index6 < num6 + num5; ++index6) { if (Main.tile[index5, index6] != null && Main.tile[index5, index6].liquid > (byte) 0) { this.TargetClosest(); this.velocity.Y = -1f; this.ai[2] = 0.0f; this.ai[0] = (float) ((double) Main.rand.NextFloat() * 0.785398185253143 - 1.57079637050629); if ((double) this.Distance(Main.player[this.target].Center) > 700.0) this.ai[0] = this.AngleTo(Main.player[this.target].Center) + Main.rand.NextFloatDirection() * 0.3f; this.netUpdate = true; return; } } } if ((double) this.velocity.Y != 0.0) { this.velocity.X *= 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 2f, 0.005f); } else { this.velocity = Vector2.Lerp(this.velocity, Vector2.UnitX * (float) this.direction, 0.05f); this.velocity.Y += 0.2f; if (this.collideX) { this.direction *= -1; this.velocity.X *= -0.2f; this.netUpdate = true; } } } this.direction = (double) this.velocity.X > 0.0 ? 1 : -1; } private void AI_114_Dragonflies() { if ((double) this.localAI[0] == 0.0 && Main.netMode != 1) { this.localAI[0] = 1f; Vector2 center = this.Center; this.ai[2] = center.X; this.ai[3] = center.Y; this.velocity = (Main.rand.NextVector2Circular(5f, 3f) + Main.rand.NextVector2CircularEdge(5f, 3f)) * 0.4f; this.ai[1] = 0.0f; this.ai[0] = 1f; this.netUpdate = true; } switch ((int) this.ai[0]) { case 0: this.velocity = this.velocity * 0.94f; if (Main.netMode != 1 && (double) ++this.ai[1] >= (double) (60 + Main.rand.Next(60))) { Vector2 vector2 = new Vector2(this.ai[2], this.ai[3]); if ((double) this.Distance(vector2) > 96.0) this.velocity = this.DirectionTo(vector2) * 3f; else if ((double) this.Distance(vector2) > 16.0) this.velocity = this.DirectionTo(vector2) * 1f + Main.rand.NextVector2Circular(1f, 0.5f); else this.velocity = (Main.rand.NextVector2Circular(5f, 3f) + Main.rand.NextVector2CircularEdge(5f, 3f)) * 0.4f; this.ai[1] = 0.0f; this.ai[0] = 1f; this.netUpdate = true; break; } break; case 1: int num1 = 4; if ((double) this.Distance(new Vector2(this.ai[2], this.ai[3])) > 112.0) num1 = 200; if ((double) ++this.ai[1] >= (double) num1) { this.ai[1] = 0.0f; this.ai[0] = 0.0f; this.netUpdate = true; } int index1 = (int) this.Center.X / 16; int num2 = (int) this.Center.Y / 16; int num3 = 3; for (int index2 = num2; index2 < num2 + num3; ++index2) { if (Main.tile[index1, index2] != null && (Main.tile[index1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].liquid > (byte) 0)) { if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.9f; this.velocity.Y -= 0.2f; } } if ((double) this.velocity.Y < 0.0) { int num4 = 30; bool flag = false; for (int index3 = num2; index3 < num2 + num4; ++index3) { if (Main.tile[index1, index3] != null && Main.tile[index1, index3].nactive() && Main.tileSolid[(int) Main.tile[index1, index3].type]) { flag = true; break; } } if (!flag && (double) this.velocity.Y < 0.0) { this.velocity.Y *= 0.9f; break; } break; } break; } if ((double) this.velocity.X != 0.0) this.direction = (double) this.velocity.X > 0.0 ? 1 : -1; if (this.wet) this.velocity.Y = -3f; if ((double) this.localAI[1] > 0.0) { --this.localAI[1]; } else { this.localAI[1] = 15f; float num5 = 0.0f; Vector2 zero = Vector2.Zero; for (int index4 = 0; index4 < 200; ++index4) { NPC npc = Main.npc[index4]; if (npc.active && npc.damage > 0 && !npc.friendly && (double) npc.Hitbox.Distance(this.Center) <= 100.0) { ++num5; zero += this.DirectionFrom(npc.Center); } } for (int index5 = 0; index5 < (int) byte.MaxValue; ++index5) { Player player = Main.player[index5]; if (player.active && (double) player.Hitbox.Distance(this.Center) <= 150.0) { ++num5; zero += this.DirectionFrom(player.Center); } } if ((double) num5 > 0.0) { float num6 = 2f; Vector2 vector2_1 = zero / num5 * num6; this.velocity = this.velocity + vector2_1; if ((double) this.velocity.Length() > 16.0) this.velocity = this.velocity.SafeNormalize(Vector2.Zero) * 16f; Vector2 vector2_2 = this.Center + vector2_1 * 10f; this.ai[1] = -10f; this.ai[0] = 1f; this.ai[2] = vector2_2.X; this.ai[3] = vector2_2.Y; this.netUpdate = true; } else { if (Main.netMode == 1 || (double) (new Vector2(this.ai[2], this.ai[3]) - this.Center).Length() >= 16.0) return; int maxValue = 30; if (Main.tile[(int) this.ai[2] / 16, (int) this.ai[3] / 16].type != (ushort) 519) maxValue = 4; if (Main.rand.Next(maxValue) != 0) return; int cattailX = (int) this.ai[2]; int cattailY = (int) this.ai[2]; if (NPC.FindCattailTop((int) this.ai[2] / 16, (int) this.ai[3] / 16, out cattailX, out cattailY)) { this.ai[2] = (float) (cattailX * 16); this.ai[3] = (float) (cattailY * 16); this.netUpdate = true; } else { int i = (int) ((double) this.Center.X / 16.0); int j = (int) ((double) this.Center.Y / 16.0); while (!WorldGen.SolidTile(i, j) && (double) j < Main.worldSurface) ++j; int num7 = j - Main.rand.Next(3, 6); this.ai[2] = (float) (i * 16); this.ai[3] = (float) (num7 * 16); this.netUpdate = true; } } } } private void AI_113_WindyBalloon() { if ((double) this.localAI[0] == 0.0 && Main.netMode != 1) { this.TargetClosest(); this.localAI[0] = 1f; this.ai[2] = (float) (Main.rand.Next(7) + 1); int index = NPC.NewNPC((int) this.position.X, (int) this.position.Y, 1); if (Main.rand.Next(180) == 0) Main.npc[index].SetDefaults(-4); else if (Main.rand.Next(10) == 0) Main.npc[index].SetDefaults(-7); else if (Main.rand.Next(3) == 0) Main.npc[index].SetDefaults(-3); Main.npc[index].ai[0] = -999f; Main.npc[index].netUpdate = true; this.ai[3] = (float) index; this.netUpdate = true; this.ai[1] = Main.npc[index].scale; } this.position = this.Center; this.Size = new Vector2(20f, 20f) * this.ai[1]; this.scale = this.ai[1]; this.Center = this.position; NPC slaveNpc = this.AI_113_WindyBalloon_GetSlaveNPC(); this.rotation = this.velocity.X * 0.05f; if (slaveNpc != null) { NPCAimedTarget targetData = this.GetTargetData(); float num1 = float.PositiveInfinity; int num2 = 0; Vector2 zero = Vector2.Zero; if (!targetData.Invalid) { Vector2 vector2 = targetData.Center - this.Bottom; if ((double) vector2.Y < 0.0) num2 = (int) vector2.Y / -16; num1 = vector2.Length(); if (this.direction != Math.Sign(vector2.X)) num2 = 0; } if (this.wet || slaveNpc.wet || this.collideX || this.collideY && (double) this.oldVelocity.Y < 0.0) { float num3 = this.oldVelocity.X + (float) (this.direction * 8); this.position.X -= num3; slaveNpc.position.X -= num3; this.TargetClosest(false); this.direction *= -1; this.velocity.X = (float) (this.direction * 2); this.life = -1; this.HitEffect(); this.active = false; this.netUpdate = true; SoundEngine.PlaySound(this.DeathSound, this.position); } else { if (this.collideY) { this.velocity.Y = (double) this.oldVelocity.Y > 0.0 ? 1f : -1f; this.TargetClosest(false); } float num4 = (float) (2.0 + (double) Math.Abs(Main.windSpeedTarget) * 2.0); if (Math.Sign(this.velocity.X) != this.direction || (double) Math.Abs(this.velocity.X) < (double) num4) { this.velocity.X += (float) this.direction * 0.01f; if ((double) this.velocity.X * (double) this.direction < 0.0) { if ((double) Math.Abs(this.velocity.X) > (double) num4) this.velocity.X += (float) this.direction * 0.1f; else this.velocity.X += (float) this.direction * 0.05f; } else if ((double) Math.Abs(this.velocity.X) > (double) num4) this.velocity.X = (float) this.direction * num4; } int index1 = (int) (((double) this.position.X + (double) (this.width / 2)) / 16.0) + this.direction; int num5 = (int) (((double) this.position.Y + (double) this.height) / 16.0); bool flag1 = true; int num6 = 8 + num2; bool flag2 = false; for (int index2 = num5; index2 < num5 + num6; ++index2) { if (Main.tile[index1, index2] == null) Main.tile[index1, index2] = new Tile(); if (Main.tile[index1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].liquid > (byte) 0) { if (index2 < num5 + 5 + num2) flag2 = true; flag1 = false; break; } } if ((double) num1 < 400.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { float num7 = 2f; float num8 = 0.035f; if ((double) this.Center.Y + (double) (this.height / 4) > (double) Main.player[this.target].position.Y + (double) (Main.player[this.target].height / 4) && (double) this.velocity.Y > -(double) num7) { this.velocity.Y -= num8; if ((double) this.velocity.Y > 0.0) this.velocity.Y -= num8; } else if ((double) this.Center.Y + (double) (this.height / 4) < (double) Main.player[this.target].position.Y + (double) (Main.player[this.target].height / 4) && (double) this.velocity.Y < (double) num7) { this.velocity.Y += num8; if ((double) this.velocity.Y < 0.0) this.velocity.Y += num8; } } else { if (flag1) this.velocity.Y += 0.05f; else this.velocity.Y -= 0.1f; if (flag2) this.velocity.Y -= 0.2f; if ((double) this.velocity.Y > 2.0) this.velocity.Y = 2f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; } slaveNpc.Center = this.Bottom + new Vector2(0.0f, -8f) + new Vector2(0.0f, 56f * this.ai[1]); slaveNpc.velocity = this.velocity; } } else { this.velocity.Y = MathHelper.Clamp(this.velocity.Y - 0.2f, -8f, 8f); this.velocity.X = MathHelper.Clamp(this.velocity.X + Main.windSpeedTarget * 0.3f, -4f, 4f); if (!this.collideX && !this.collideY) return; this.position.X -= this.oldVelocity.X + (float) (this.direction * 8); this.TargetClosest(false); this.direction *= -1; this.velocity.X = (float) (this.direction * 2); this.life = -1; this.HitEffect(); this.active = false; this.netUpdate = true; SoundEngine.PlaySound(this.DeathSound, this.position); } } public NPC AI_113_WindyBalloon_GetSlaveNPC() { int index = (int) this.ai[3]; NPC npc; if (index >= 0 && index < 200) { npc = Main.npc[index]; if (!npc.active || npc.type != 1 || (double) npc.ai[0] != -999.0) { npc = (NPC) null; this.ai[3] = -1f; this.netUpdate = true; } } else npc = (NPC) null; return npc; } private void AI_112_FairyCritter() { bool flag1 = false; this.lavaImmune = true; if (Main.netMode != 1 && (double) this.ai[2] > 1.0) { int num = 18000; ++this.localAI[1]; if ((double) this.localAI[1] >= (double) num) { this.ai[2] = 7f; if ((double) Main.player[this.target].Center.X < (double) this.Center.X) this.direction = 1; else this.direction = -1; this.netUpdate = true; } } switch ((int) this.ai[2]) { case 0: this.lavaImmune = false; this.noTileCollide = false; if ((double) this.ai[0] == 0.0 && (double) this.ai[1] == 0.0) { this.ai[0] = this.Center.X; this.ai[1] = this.Center.Y; } if ((double) this.localAI[0] == 0.0) { this.localAI[0] = 1f; this.velocity = new Vector2(MathHelper.Lerp(2f, 4f, Main.rand.NextFloat()) * (float) (Main.rand.Next(2) * 2 - 1), MathHelper.Lerp(1f, 2f, Main.rand.NextFloat()) * (float) (Main.rand.Next(2) * 2 - 1)); this.velocity = this.velocity * 0.7f; this.netUpdate = true; } Vector2 vector2_1 = new Vector2(this.ai[0], this.ai[1]) - this.Center; if ((double) vector2_1.Length() > 20.0) { this.velocity = this.velocity + new Vector2((double) vector2_1.X > 0.0 ? 1f : -1f, (double) vector2_1.Y > 0.0 ? 1f : -1f) * 0.04f; if ((double) Math.Abs(this.velocity.Y) > 2.0) this.velocity.Y *= 0.95f; } this.TargetClosest(); Player player = Main.player[this.target]; if (!player.dead && (double) player.Distance(this.Center) < 250.0) { this.ai[2] = 1f; this.direction = (double) player.Center.X > (double) this.Center.X ? -1 : 1; if ((double) this.velocity.X * (double) this.direction < 0.0) this.velocity.X = (float) (this.direction * 2); this.ai[3] = 0.0f; this.netUpdate = true; break; } break; case 1: this.lavaImmune = false; this.noTileCollide = false; if (this.collideX) { this.direction *= -1; this.velocity.X = (float) (this.direction * 2); } if (this.collideY) this.velocity.Y = (double) this.oldVelocity.Y > 0.0 ? 1f : -1f; float num1 = 4.5f; if (Math.Sign(this.velocity.X) != this.direction || (double) Math.Abs(this.velocity.X) < (double) num1) { this.velocity.X += (float) this.direction * 0.04f; if ((double) this.velocity.X * (double) this.direction < 0.0) { if ((double) Math.Abs(this.velocity.X) > (double) num1) this.velocity.X += (float) this.direction * 0.4f; else this.velocity.X += (float) this.direction * 0.2f; } else if ((double) Math.Abs(this.velocity.X) > (double) num1) this.velocity.X = (float) this.direction * num1; } int num2 = (int) (((double) this.position.X + (double) (this.width / 2)) / 16.0); int num3 = 20; if (this.direction < 0) num2 -= num3; int num4 = (int) (((double) this.position.Y + (double) this.height) / 16.0); bool flag2 = true; int num5 = 8; bool flag3 = false; for (int index1 = num2; index1 <= num2 + num3; ++index1) { for (int index2 = num4; index2 < num4 + num5; ++index2) { if (Main.tile[index1, index2] == null) Main.tile[index1, index2] = new Tile(); if (Main.tile[index1, index2].nactive() && Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2].liquid > (byte) 0) { if (index2 < num4 + 5) flag3 = true; flag2 = false; break; } } } if (flag2) this.velocity.Y += 0.05f; else this.velocity.Y -= 0.2f; if (flag3) this.velocity.Y -= 0.3f; if ((double) this.velocity.Y > 3.0) this.velocity.Y = 3f; if ((double) this.velocity.Y < -5.0) { this.velocity.Y = -5f; break; } break; case 2: this.noTileCollide = true; NPCAimedTarget targetData1 = this.GetTargetData(); bool flag4 = false; if (targetData1.Type == NPCTargetType.Player) flag4 = Main.player[this.target].dead; if (flag4) { this.ai[2] = 1f; this.direction = (double) targetData1.Center.X > (double) this.Center.X ? -1 : 1; if ((double) this.velocity.X * (double) this.direction < 0.0) this.velocity.X = (float) (this.direction * 2); this.ai[3] = 0.0f; this.netUpdate = true; break; } Microsoft.Xna.Framework.Rectangle r1 = Utils.CenteredRectangle(targetData1.Center, new Vector2((float) (targetData1.Width + 60), (float) (targetData1.Height / 2))); if (Main.netMode != 1 && this.Hitbox.Intersects(r1)) { Point treasureCoords; if (this.GetFairyTreasureCoords(out treasureCoords)) { this.ai[0] = (float) treasureCoords.X; this.ai[1] = (float) treasureCoords.Y; this.ai[2] = 3f; this.ai[3] = 0.0f; this.netUpdate = true; break; } this.ai[2] = 6f; this.ai[3] = 0.0f; this.netUpdate = true; break; } Vector2 vector2_2 = r1.ClosestPointInRect(this.Center); Vector2 vector2_3 = this.DirectionTo(vector2_2) * 2f; float num6 = this.Distance(vector2_2); if ((double) num6 > 150.0) vector2_3 *= 2f; else if ((double) num6 > 80.0) vector2_3 *= 1.5f; this.velocity = Vector2.Lerp(this.velocity, vector2_3, 0.07f); Point tileCoordinates1 = this.Center.ToTileCoordinates(); if ((double) this.ai[3] < 300.0) { bool goDownwards; bool goUpwards; this.GetBirdFlightRecommendation(6, 3, tileCoordinates1, out goDownwards, out goUpwards); if (goDownwards) this.velocity.Y += 0.05f; if (goUpwards) this.velocity.Y -= 0.02f; if ((double) this.velocity.Y > 2.0) this.velocity.Y = 2f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; } if (WorldGen.InWorld(tileCoordinates1.X, tileCoordinates1.Y)) { this.ai[3] = !WorldGen.SolidTile(tileCoordinates1) ? Math.Max(this.ai[3] - 1f, 0.0f) : Math.Min(this.ai[3] + 2f, 400f); break; } break; case 3: this.noTileCollide = true; if ((double) this.ai[3] == 15.0) SoundEngine.PlaySound(27, (int) this.position.X, (int) this.position.Y); if ((double) this.ai[3] <= 15.0) { this.velocity = this.velocity * 0.9f; } else { this.spriteDirection = (double) Main.player[this.target].Center.X <= (double) this.Center.X ? 1 : -1; flag1 = true; float num7 = 0.0f; float num8 = this.ai[3] - 15f; float circleHeight = 22f; if ((double) num8 <= 65.0) { num7 = 0.3926991f; circleHeight = 14f; } else if ((double) num8 <= 130.0) { num7 = -0.3926991f; circleHeight = 18f; } float circleRotation = num7 * (float) this.direction; Vector2 fairyCircleOffset = this.GetFairyCircleOffset(num8 / 65f, circleRotation, circleHeight); this.velocity = this.GetFairyCircleOffset((float) ((double) num8 / 65.0 + 1.0 / 65.0), circleRotation, circleHeight) - fairyCircleOffset; } ++this.ai[3]; if ((double) this.ai[3] >= 210.0) { this.ai[2] = 4f; this.TargetClosest(); this.ai[3] = 0.0f; this.netUpdate = true; break; } break; case 4: this.noTileCollide = true; NPCAimedTarget targetData2 = this.GetTargetData(); bool flag5 = false; if (targetData2.Type == NPCTargetType.Player) flag5 = Main.player[this.target].dead; if (flag5) { this.ai[2] = 1f; this.direction = (double) targetData2.Center.X > (double) this.Center.X ? -1 : 1; if ((double) this.velocity.X * (double) this.direction < 0.0) this.velocity.X = (float) (this.direction * 2); this.ai[3] = 0.0f; this.netUpdate = true; break; } Microsoft.Xna.Framework.Rectangle r2 = Utils.CenteredRectangle(new Vector2((float) ((double) this.ai[0] * 16.0 + 8.0), (float) ((double) this.ai[1] * 16.0 + 8.0)), Vector2.One * 5f); if (this.Hitbox.Intersects(r2)) { this.ai[2] = 5f; this.ai[3] = 0.0f; this.netUpdate = true; break; } float num9 = this.Distance(targetData2.Center); float num10 = 300f; if ((double) num9 > (double) num10) { if ((double) num9 < (double) num10 + 100.0 && !Collision.SolidCollision(this.position, this.width, this.height)) { this.noTileCollide = false; if (this.collideX) this.velocity.X *= -1f; if (this.collideY) this.velocity.Y *= -1f; } flag1 = true; this.spriteDirection = (double) Main.player[this.target].Center.X <= (double) this.Center.X ? 1 : -1; Vector2 vector2_4 = this.DirectionFrom(targetData2.Center); if ((double) num9 > (double) num10 + 60.0) { this.velocity = this.velocity + vector2_4 * -0.1f; if (Main.rand.Next(30) == 0) SoundEngine.PlaySound(27, (int) this.position.X, (int) this.position.Y); } else if ((double) num9 < (double) num10 + 30.0) this.velocity = this.velocity + this.DirectionTo(r2.ClosestPointInRect(this.Center)) * 0.1f; if ((double) this.velocity.Length() > 1.0) { this.velocity = this.velocity * (1f / this.velocity.Length()); break; } break; } Vector2 vector2_5 = r2.ClosestPointInRect(this.Center); Vector2 vector2_6 = this.DirectionTo(vector2_5); float num11 = this.Distance(vector2_5); if ((double) num11 > 150.0) vector2_6 *= 3f; else if ((double) num11 > 80.0) vector2_6 *= 2f; Point tileCoordinates2 = this.Center.ToTileCoordinates(); if ((double) this.ai[3] < 300.0) { this.velocity = Vector2.Lerp(this.velocity, vector2_6, 0.07f); bool goDownwards; bool goUpwards; this.GetBirdFlightRecommendation(4, 2, tileCoordinates2, out goDownwards, out goUpwards); if (goDownwards) this.velocity.Y += 0.05f; if (goUpwards) this.velocity.Y -= 0.05f; if ((double) this.velocity.Y > 1.0) this.velocity.Y = 1f; if ((double) this.velocity.Y < -1.0) this.velocity.Y = -1f; } else this.velocity = Vector2.Lerp(this.velocity, vector2_6, 0.07f); this.ai[3] = !WorldGen.SolidTile(tileCoordinates2) ? Math.Max(this.ai[3] - 1f, 0.0f) : Math.Min(this.ai[3] + 2f, 400f); break; case 5: this.localAI[1] = 0.0f; this.noTileCollide = true; bool flag6 = false; Tile tileSafely = Framing.GetTileSafely(new Point((int) this.ai[0], (int) this.ai[1])); if (!tileSafely.active() || !SceneMetrics.IsValidForOreFinder(tileSafely)) flag6 = true; if ((double) this.ai[3] == 15.0) SoundEngine.PlaySound(27, (int) this.position.X, (int) this.position.Y); if ((double) this.ai[3] <= 15.0) { this.velocity = this.velocity * 0.9f; } else { flag1 = true; float num12 = this.ai[3] - 15f; int num13; float num14 = (float) (Math.Cos((double) (num13 = (int) ((double) num12 / 50.0)) * 1.0) * 6.28318548202515 / 16.0); float circleHeight = (float) (Math.Cos((double) num13 * 2.0) * 10.0 + 8.0); float circleRotation = num14 * (float) this.direction; Vector2 fairyCircleOffset = this.GetFairyCircleOffset(num12 / 50f, circleRotation, circleHeight); this.velocity = this.GetFairyCircleOffset((float) ((double) num12 / 50.0 + 0.0199999995529652), circleRotation, circleHeight) - fairyCircleOffset; this.spriteDirection = (double) Main.player[this.target].Center.X <= (double) this.Center.X ? 1 : -1; } ++this.ai[3]; if (Main.netMode != 1 && (double) this.ai[3] > 200.0) { this.active = false; switch (Main.netMode) { case 0: NPC.FairyEffects(this.Center, this.type - 583); break; case 2: this.netSkip = -1; this.life = 0; NetMessage.SendData(23, number: this.whoAmI); NetMessage.SendData(112, number: 2, number2: ((float) (int) this.Center.X), number3: ((float) (int) this.Center.Y), number4: ((float) (this.type - 583))); break; } } else break; break; case 6: this.noTileCollide = true; Vector2 vector2_7 = Main.player[this.target].Center - this.Center; if ((double) vector2_7.Length() > 100.0) { this.ai[2] = 2f; this.TargetClosest(); this.ai[3] = 0.0f; this.netUpdate = true; break; } if (!Collision.SolidCollision(this.position, this.width, this.height)) { this.noTileCollide = false; if (this.collideX) this.velocity.X *= -1f; if (this.collideY) this.velocity.Y *= -1f; } if ((double) vector2_7.Length() > 20.0) { this.velocity = this.velocity + new Vector2((double) vector2_7.X > 0.0 ? 1f : -1f, (double) vector2_7.Y > 0.0 ? 1f : -1f) * 0.04f; if ((double) Math.Abs(this.velocity.Y) > 2.0) this.velocity.Y *= 0.95f; } Point treasureCoords1; if (Main.netMode != 1 && this.GetFairyTreasureCoords(out treasureCoords1)) { this.ai[0] = (float) treasureCoords1.X; this.ai[1] = (float) treasureCoords1.Y; this.ai[2] = 3f; this.ai[3] = 0.0f; this.netUpdate = true; break; } break; case 7: this.noTileCollide = true; this.velocity.X += 0.05f * (float) this.direction; this.velocity.X = MathHelper.Clamp(this.velocity.X, -10f, 10f); this.velocity.Y -= 0.025f; this.velocity.Y = MathHelper.Clamp(this.velocity.Y, -5f, 5f); this.EncourageDespawn(10); break; } this.dontTakeDamage = this.dontTakeDamageFromHostiles = (double) this.ai[2] > 1.0; for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].aiStyle == 112 && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width * 1.5) { if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= 0.05f; else this.velocity.Y += 0.05f; } } if (!flag1) { this.direction = (double) this.velocity.X >= 0.0 ? 1 : -1; this.spriteDirection = -this.direction; } Color color1 = Color.HotPink; Color color2 = Color.LightPink; int num15 = 4; if (this.type == 584) { color1 = Color.LimeGreen; color2 = Color.LightSeaGreen; } if (this.type == 585) { color1 = Color.RoyalBlue; color2 = Color.LightBlue; } if ((int) Main.timeForVisualEffects % 2 == 0) { this.position = this.position + this.netOffset; Dust dust = Dust.NewDustDirect(this.Center - new Vector2((float) num15) * 0.5f, num15 + 4, num15 + 4, 278, Alpha: 200, newColor: Color.Lerp(color1, color2, Main.rand.NextFloat()), Scale: 0.65f); dust.velocity *= 0.0f; dust.velocity += this.velocity * 0.3f; dust.noGravity = true; dust.noLight = true; this.position = this.position - this.netOffset; } Lighting.AddLight(this.Center, color1.ToVector3() * 0.7f); } public static void FairyEffects(Vector2 Position, int type) { Color color1 = Color.HotPink; Color color2 = Color.LightPink; int num = 4; if (type == 1) { color1 = Color.LimeGreen; color2 = Color.LightSeaGreen; } if (type == 2) { color1 = Color.RoyalBlue; color2 = Color.LightBlue; } for (int index = 0; index < 40; ++index) { Dust dust = Dust.NewDustDirect(Position - new Vector2((float) num) * 0.5f, num + 4, num + 4, 278, Alpha: 200, newColor: Color.Lerp(color1, color2, Main.rand.NextFloat()), Scale: 0.65f); dust.velocity *= 1.5f; if (index >= 30) dust.velocity *= 3.5f; else if (index >= 20) dust.velocity *= 2f; dust.fadeIn = (float) Main.rand.Next(0, 17) * 0.1f; dust.noGravity = true; } SoundEngine.PlaySound(SoundID.Item4, (int) Position.X, (int) Position.Y); } private void GetBirdFlightRecommendation( int downScanRange, int upRange, Point tCoords, out bool goDownwards, out bool goUpwards) { tCoords.X += this.direction; goDownwards = true; goUpwards = false; int x = tCoords.X; for (int y = tCoords.Y; y < tCoords.Y + downScanRange && WorldGen.InWorld(x, y); ++y) { Tile tile = Main.tile[x, y]; if (tile == null) break; if (tile.nactive() && Main.tileSolid[(int) tile.type] || tile.liquid > (byte) 0) { if (y < tCoords.Y + upRange) goUpwards = true; goDownwards = false; break; } } } private Vector2 GetFairyCircleOffset( float elapsedTime, float circleRotation, float circleHeight) { return ((((float) (6.28318548202515 * (double) elapsedTime + 1.57079637050629)).ToRotationVector2() + new Vector2(0.0f, -1f)) * new Vector2((float) (6 * -this.direction), circleHeight)).RotatedBy((double) circleRotation); } private bool GetFairyTreasureCoords(out Point treasureCoords) { treasureCoords = new Point(); Point tileCoordinates = this.Center.ToTileCoordinates(); Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle(tileCoordinates.X, tileCoordinates.Y, 1, 1); rectangle1.Inflate(75, 50); int blackEdgeWidth = Main.Map.BlackEdgeWidth; Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle(0, 0, Main.maxTilesX, Main.maxTilesY); rectangle2.Inflate(-blackEdgeWidth, -blackEdgeWidth); Microsoft.Xna.Framework.Rectangle rectangle3 = Microsoft.Xna.Framework.Rectangle.Intersect(rectangle1, rectangle2); int num1 = -1; float num2 = -1f; for (int left = rectangle3.Left; left <= rectangle3.Right; ++left) { for (int top = rectangle3.Top; top <= rectangle3.Bottom; ++top) { Tile t = Main.tile[left, top]; if (t != null && t.active() && TileID.Sets.FriendlyFairyCanLureTo[(int) t.type] && SceneMetrics.IsValidForOreFinder(t)) { short num3 = Main.tileOreFinderPriority[(int) t.type]; if (TileID.Sets.Ore[(int) t.type]) { int num4 = 3; int num5 = 3; int num6 = 40; int num7 = 0; for (int index1 = left - num4; index1 <= left + num4; ++index1) { for (int index2 = top - num5; index2 <= top + num5; ++index2) { if (Main.tile[index1, index2].active() && (int) Main.tile[index1, index2].type == (int) t.type) ++num7; } } if (num7 < num6) num3 = (short) -1; } if (num1 <= (int) num3) { float num8 = this.Distance(new Vector2((float) (left * 16 + 8), (float) (top * 16 + 8))); if (num1 != (int) num3 || (double) num8 < (double) num2) { num1 = (int) num3; num2 = num8; treasureCoords.X = left; treasureCoords.Y = top; } } } } } return num1 != -1; } private void AI_069_DukeFishron() { bool expertMode = Main.expertMode; float num1 = expertMode ? 1.2f : 1f; bool flag1 = (double) this.life <= (double) this.lifeMax * 0.5; bool flag2 = expertMode && (double) this.life <= (double) this.lifeMax * 0.15; bool flag3 = (double) this.ai[0] > 4.0; bool flag4 = (double) this.ai[0] > 9.0; bool flag5 = (double) this.ai[3] < 10.0; if (flag4) { this.damage = (int) ((double) this.defDamage * 1.10000002384186 * (double) num1); this.defense = 0; } else if (flag3) { this.damage = (int) ((double) this.defDamage * 1.20000004768372 * (double) num1); this.defense = (int) ((double) this.defDefense * 0.800000011920929); } else { this.damage = this.defDamage; this.defense = this.defDefense; } int num2 = expertMode ? 40 : 60; float moveSpeed = expertMode ? 0.55f : 0.45f; float num3 = expertMode ? 8.5f : 7.5f; if (flag4) { moveSpeed = 0.7f; num3 = 12f; num2 = 30; } else if (flag3 & flag5) { moveSpeed = expertMode ? 0.6f : 0.5f; num3 = expertMode ? 10f : 8f; num2 = expertMode ? 40 : 20; } else if (flag5 && !flag3 && !flag4) num2 = 30; int num4 = expertMode ? 28 : 30; float num5 = expertMode ? 17f : 16f; if (flag4) { num4 = 25; num5 = 27f; } else if (flag5 & flag3) { num4 = expertMode ? 27 : 30; if (expertMode) num5 = 21f; } int num6 = 80; int num7 = 4; float num8 = 0.3f; float num9 = 5f; int num10 = 90; int num11 = 180; int num12 = 180; int num13 = 30; int num14 = 120; int num15 = 4; float num16 = 6f; float num17 = 20f; float num18 = 6.283185f / (float) (num14 / 2); int num19 = 75; Vector2 center = this.Center; Player player = Main.player[this.target]; if (this.target < 0 || this.target == (int) byte.MaxValue || player.dead || !player.active || (double) Vector2.Distance(player.Center, center) > 5600.0) { this.TargetClosest(); player = Main.player[this.target]; this.netUpdate = true; } if (player.dead || (double) Vector2.Distance(player.Center, center) > 5600.0) { this.velocity.Y -= 0.4f; this.EncourageDespawn(10); this.ai[0] = (double) this.ai[0] <= 4.0 ? 0.0f : 5f; this.ai[2] = 0.0f; } if (((double) player.position.Y < 800.0 || (double) player.position.Y > Main.worldSurface * 16.0 ? 1 : ((double) player.position.X <= 6400.0 ? 0 : ((double) player.position.X < (double) (Main.maxTilesX * 16 - 6400) ? 1 : 0))) != 0) { num2 = 20; this.damage = this.defDamage * 2; this.defense = this.defDefense * 2; this.ai[3] = 0.0f; num5 += 6f; } if ((double) this.localAI[0] == 0.0) { this.localAI[0] = 1f; this.alpha = (int) byte.MaxValue; this.rotation = 0.0f; if (Main.netMode != 1) { this.ai[0] = -1f; this.netUpdate = true; } } float num20 = (float) Math.Atan2((double) player.Center.Y - (double) center.Y, (double) player.Center.X - (double) center.X); if (this.spriteDirection == 1) num20 += 3.141593f; if ((double) num20 < 0.0) num20 += 6.283185f; if ((double) num20 > 6.28318548202515) num20 -= 6.283185f; if ((double) this.ai[0] == -1.0) num20 = 0.0f; if ((double) this.ai[0] == 3.0) num20 = 0.0f; if ((double) this.ai[0] == 4.0) num20 = 0.0f; if ((double) this.ai[0] == 8.0) num20 = 0.0f; float num21 = 0.04f; if ((double) this.ai[0] == 1.0 || (double) this.ai[0] == 6.0) num21 = 0.0f; if ((double) this.ai[0] == 7.0) num21 = 0.0f; if ((double) this.ai[0] == 3.0) num21 = 0.01f; if ((double) this.ai[0] == 4.0) num21 = 0.01f; if ((double) this.ai[0] == 8.0) num21 = 0.01f; if ((double) this.rotation < (double) num20) { if ((double) num20 - (double) this.rotation > Math.PI) this.rotation -= num21; else this.rotation += num21; } if ((double) this.rotation > (double) num20) { if ((double) this.rotation - (double) num20 > Math.PI) this.rotation += num21; else this.rotation -= num21; } if ((double) this.rotation > (double) num20 - (double) num21 && (double) this.rotation < (double) num20 + (double) num21) this.rotation = num20; if ((double) this.rotation < 0.0) this.rotation += 6.283185f; if ((double) this.rotation > 6.28318548202515) this.rotation -= 6.283185f; if ((double) this.rotation > (double) num20 - (double) num21 && (double) this.rotation < (double) num20 + (double) num21) this.rotation = num20; if ((double) this.ai[0] != -1.0 && (double) this.ai[0] < 9.0) { if (Collision.SolidCollision(this.position, this.width, this.height)) this.alpha += 15; else this.alpha -= 15; if (this.alpha < 0) this.alpha = 0; if (this.alpha > 150) this.alpha = 150; } if ((double) this.ai[0] == -1.0) { this.velocity = this.velocity * 0.98f; int num22 = Math.Sign(player.Center.X - center.X); if (num22 != 0) { this.direction = num22; this.spriteDirection = -this.direction; } if ((double) this.ai[2] > 20.0) { this.velocity.Y = -2f; this.alpha -= 5; if (Collision.SolidCollision(this.position, this.width, this.height)) this.alpha += 15; if (this.alpha < 0) this.alpha = 0; if (this.alpha > 150) this.alpha = 150; } if ((double) this.ai[2] == (double) (num10 - 30)) { int num23 = 36; for (int index1 = 0; index1 < num23; ++index1) { Vector2 vector2_1 = (Vector2.Normalize(this.velocity) * new Vector2((float) this.width / 2f, (float) this.height) * 0.75f * 0.5f).RotatedBy((double) (index1 - (num23 / 2 - 1)) * 6.28318548202515 / (double) num23) + this.Center; Vector2 vector2_2 = vector2_1 - this.Center; int index2 = Dust.NewDust(vector2_1 + vector2_2, 0, 0, 172, vector2_2.X * 2f, vector2_2.Y * 2f, 100, Scale: 1.4f); Main.dust[index2].noGravity = true; Main.dust[index2].noLight = true; Main.dust[index2].velocity = Vector2.Normalize(vector2_2) * 3f; } SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); } ++this.ai[2]; if ((double) this.ai[2] < (double) num19) return; this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 0.0 && !player.dead) { if ((double) this.ai[1] == 0.0) this.ai[1] = (float) (300 * Math.Sign((center - player.Center).X)); Vector2 vector2 = Vector2.Normalize(player.Center + new Vector2(this.ai[1], -200f) - center - this.velocity) * num3; if ((double) this.velocity.X < (double) vector2.X) { this.velocity.X += moveSpeed; if ((double) this.velocity.X < 0.0 && (double) vector2.X > 0.0) this.velocity.X += moveSpeed; } else if ((double) this.velocity.X > (double) vector2.X) { this.velocity.X -= moveSpeed; if ((double) this.velocity.X > 0.0 && (double) vector2.X < 0.0) this.velocity.X -= moveSpeed; } if ((double) this.velocity.Y < (double) vector2.Y) { this.velocity.Y += moveSpeed; if ((double) this.velocity.Y < 0.0 && (double) vector2.Y > 0.0) this.velocity.Y += moveSpeed; } else if ((double) this.velocity.Y > (double) vector2.Y) { this.velocity.Y -= moveSpeed; if ((double) this.velocity.Y > 0.0 && (double) vector2.Y < 0.0) this.velocity.Y -= moveSpeed; } int num24 = Math.Sign(player.Center.X - center.X); if (num24 != 0) { if ((double) this.ai[2] == 0.0 && num24 != this.direction) this.rotation += 3.141593f; this.direction = num24; if (this.spriteDirection != -this.direction) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } ++this.ai[2]; if ((double) this.ai[2] < (double) num2) return; int num25 = 0; switch ((int) this.ai[3]) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: num25 = 1; break; case 10: this.ai[3] = 1f; num25 = 2; break; case 11: this.ai[3] = 0.0f; num25 = 3; break; } if (flag1) num25 = 4; switch (num25) { case 1: this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.velocity = Vector2.Normalize(player.Center - center) * num5; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); if (num24 != 0) { this.direction = num24; if (this.spriteDirection == 1) this.rotation += 3.141593f; this.spriteDirection = -this.direction; break; } break; case 2: this.ai[0] = 2f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; case 3: this.ai[0] = 3f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; case 4: this.ai[0] = 4f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; } this.netUpdate = true; } else if ((double) this.ai[0] == 1.0) { int num26 = 7; for (int index3 = 0; index3 < num26; ++index3) { Vector2 vector2_3 = (Vector2.Normalize(this.velocity) * new Vector2((float) (this.width + 50) / 2f, (float) this.height) * 0.75f).RotatedBy((double) (index3 - (num26 / 2 - 1)) * Math.PI / (double) num26) + center; Vector2 vector2_4 = ((float) (Main.rand.NextDouble() * 3.14159274101257) - 1.570796f).ToRotationVector2() * (float) Main.rand.Next(3, 8); Vector2 vector2_5 = vector2_4; int index4 = Dust.NewDust(vector2_3 + vector2_5, 0, 0, 172, vector2_4.X * 2f, vector2_4.Y * 2f, 100, Scale: 1.4f); Main.dust[index4].noGravity = true; Main.dust[index4].noLight = true; Main.dust[index4].velocity /= 4f; Main.dust[index4].velocity -= this.velocity; } ++this.ai[2]; if ((double) this.ai[2] < (double) num4) return; this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] += 2f; this.netUpdate = true; } else if ((double) this.ai[0] == 2.0) { if ((double) this.ai[1] == 0.0) this.ai[1] = (float) (300 * Math.Sign((center - player.Center).X)); Vector2 vector2_6 = Vector2.Normalize(player.Center + new Vector2(this.ai[1], -200f) - center - this.velocity) * num9; if ((double) this.velocity.X < (double) vector2_6.X) { this.velocity.X += num8; if ((double) this.velocity.X < 0.0 && (double) vector2_6.X > 0.0) this.velocity.X += num8; } else if ((double) this.velocity.X > (double) vector2_6.X) { this.velocity.X -= num8; if ((double) this.velocity.X > 0.0 && (double) vector2_6.X < 0.0) this.velocity.X -= num8; } if ((double) this.velocity.Y < (double) vector2_6.Y) { this.velocity.Y += num8; if ((double) this.velocity.Y < 0.0 && (double) vector2_6.Y > 0.0) this.velocity.Y += num8; } else if ((double) this.velocity.Y > (double) vector2_6.Y) { this.velocity.Y -= num8; if ((double) this.velocity.Y > 0.0 && (double) vector2_6.Y < 0.0) this.velocity.Y -= num8; } if ((double) this.ai[2] == 0.0) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); if ((double) this.ai[2] % (double) num7 == 0.0) { SoundEngine.PlaySound(4, (int) this.Center.X, (int) this.Center.Y, 19); if (Main.netMode != 1) { Vector2 vector2_7 = Vector2.Normalize(player.Center - center) * (float) (this.width + 20) / 2f + center; NPC.NewNPC((int) vector2_7.X, (int) vector2_7.Y + 45, 371); } } int num27 = Math.Sign(player.Center.X - center.X); if (num27 != 0) { this.direction = num27; if (this.spriteDirection != -this.direction) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } ++this.ai[2]; if ((double) this.ai[2] < (double) num6) return; this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 3.0) { this.velocity = this.velocity * 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 0.0f, 0.02f); if ((double) this.ai[2] == (double) (num10 - 30)) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 9); if (Main.netMode != 1 && (double) this.ai[2] == (double) (num10 - 30)) { Vector2 vector2 = this.rotation.ToRotationVector2() * (Vector2.UnitX * (float) this.direction) * (float) (this.width + 20) / 2f + center; Projectile.NewProjectile(vector2.X, vector2.Y, (float) (this.direction * 2), 8f, 385, 0, 0.0f, Main.myPlayer); Projectile.NewProjectile(vector2.X, vector2.Y, (float) (-this.direction * 2), 8f, 385, 0, 0.0f, Main.myPlayer); } ++this.ai[2]; if ((double) this.ai[2] < (double) num10) return; this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 4.0) { this.velocity = this.velocity * 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 0.0f, 0.02f); if ((double) this.ai[2] == (double) (num11 - 60)) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); ++this.ai[2]; if ((double) this.ai[2] < (double) num11) return; this.ai[0] = 5f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 5.0 && !player.dead) { if ((double) this.ai[1] == 0.0) this.ai[1] = (float) (300 * Math.Sign((center - player.Center).X)); Vector2 vector2 = Vector2.Normalize(player.Center + new Vector2(this.ai[1], -200f) - center - this.velocity) * num3; if ((double) this.velocity.X < (double) vector2.X) { this.velocity.X += moveSpeed; if ((double) this.velocity.X < 0.0 && (double) vector2.X > 0.0) this.velocity.X += moveSpeed; } else if ((double) this.velocity.X > (double) vector2.X) { this.velocity.X -= moveSpeed; if ((double) this.velocity.X > 0.0 && (double) vector2.X < 0.0) this.velocity.X -= moveSpeed; } if ((double) this.velocity.Y < (double) vector2.Y) { this.velocity.Y += moveSpeed; if ((double) this.velocity.Y < 0.0 && (double) vector2.Y > 0.0) this.velocity.Y += moveSpeed; } else if ((double) this.velocity.Y > (double) vector2.Y) { this.velocity.Y -= moveSpeed; if ((double) this.velocity.Y > 0.0 && (double) vector2.Y < 0.0) this.velocity.Y -= moveSpeed; } int num28 = Math.Sign(player.Center.X - center.X); if (num28 != 0) { if ((double) this.ai[2] == 0.0 && num28 != this.direction) this.rotation += 3.141593f; this.direction = num28; if (this.spriteDirection != -this.direction) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } ++this.ai[2]; if ((double) this.ai[2] < (double) num2) return; int num29 = 0; switch ((int) this.ai[3]) { case 0: case 1: case 2: case 3: case 4: case 5: num29 = 1; break; case 6: this.ai[3] = 1f; num29 = 2; break; case 7: this.ai[3] = 0.0f; num29 = 3; break; } if (flag2) num29 = 4; switch (num29) { case 1: this.ai[0] = 6f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.velocity = Vector2.Normalize(player.Center - center) * num5; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); if (num28 != 0) { this.direction = num28; if (this.spriteDirection == 1) this.rotation += 3.141593f; this.spriteDirection = -this.direction; break; } break; case 2: this.velocity = Vector2.Normalize(player.Center - center) * num17; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); if (num28 != 0) { this.direction = num28; if (this.spriteDirection == 1) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } this.ai[0] = 7f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; case 3: this.ai[0] = 8f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; case 4: this.ai[0] = 9f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; } this.netUpdate = true; } else if ((double) this.ai[0] == 6.0) { int num30 = 7; for (int index5 = 0; index5 < num30; ++index5) { Vector2 vector2_8 = (Vector2.Normalize(this.velocity) * new Vector2((float) (this.width + 50) / 2f, (float) this.height) * 0.75f).RotatedBy((double) (index5 - (num30 / 2 - 1)) * Math.PI / (double) num30) + center; Vector2 vector2_9 = ((float) (Main.rand.NextDouble() * 3.14159274101257) - 1.570796f).ToRotationVector2() * (float) Main.rand.Next(3, 8); Vector2 vector2_10 = vector2_9; int index6 = Dust.NewDust(vector2_8 + vector2_10, 0, 0, 172, vector2_9.X * 2f, vector2_9.Y * 2f, 100, Scale: 1.4f); Main.dust[index6].noGravity = true; Main.dust[index6].noLight = true; Main.dust[index6].velocity /= 4f; Main.dust[index6].velocity -= this.velocity; } ++this.ai[2]; if ((double) this.ai[2] < (double) num4) return; this.ai[0] = 5f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] += 2f; this.netUpdate = true; } else if ((double) this.ai[0] == 7.0) { if ((double) this.ai[2] == 0.0) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); if ((double) this.ai[2] % (double) num15 == 0.0) { SoundEngine.PlaySound(4, (int) this.Center.X, (int) this.Center.Y, 19); if (Main.netMode != 1) { Vector2 vector2 = Vector2.Normalize(this.velocity) * (float) (this.width + 20) / 2f + center; int index = NPC.NewNPC((int) vector2.X, (int) vector2.Y + 45, 371); Main.npc[index].target = this.target; Main.npc[index].velocity = Vector2.Normalize(this.velocity).RotatedBy(1.57079637050629 * (double) this.direction) * num16; Main.npc[index].netUpdate = true; Main.npc[index].ai[3] = (float) Main.rand.Next(80, 121) / 100f; } } this.velocity = this.velocity.RotatedBy(-(double) num18 * (double) this.direction); this.rotation -= num18 * (float) this.direction; ++this.ai[2]; if ((double) this.ai[2] < (double) num14) return; this.ai[0] = 5f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 8.0) { this.velocity = this.velocity * 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 0.0f, 0.02f); if ((double) this.ai[2] == (double) (num10 - 30)) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); if (Main.netMode != 1 && (double) this.ai[2] == (double) (num10 - 30)) Projectile.NewProjectile(center.X, center.Y, 0.0f, 0.0f, 385, 0, 0.0f, Main.myPlayer, 1f, (float) (this.target + 1)); ++this.ai[2]; if ((double) this.ai[2] < (double) num10) return; this.ai[0] = 5f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 9.0) { if ((double) this.ai[2] < (double) (num12 - 90)) { if (Collision.SolidCollision(this.position, this.width, this.height)) this.alpha += 15; else this.alpha -= 15; if (this.alpha < 0) this.alpha = 0; if (this.alpha > 150) this.alpha = 150; } else if (this.alpha < (int) byte.MaxValue) { this.alpha += 4; if (this.alpha > (int) byte.MaxValue) this.alpha = (int) byte.MaxValue; } this.velocity = this.velocity * 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 0.0f, 0.02f); if ((double) this.ai[2] == (double) (num12 - 60)) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); ++this.ai[2]; if ((double) this.ai[2] < (double) num12) return; this.ai[0] = 10f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[0] == 10.0 && !player.dead) { this.dontTakeDamage = false; this.chaseable = false; if (this.alpha < (int) byte.MaxValue) { this.alpha += 25; if (this.alpha > (int) byte.MaxValue) this.alpha = (int) byte.MaxValue; } if ((double) this.ai[1] == 0.0) this.ai[1] = (float) (360 * Math.Sign((center - player.Center).X)); this.SimpleFlyMovement(Vector2.Normalize(player.Center + new Vector2(this.ai[1], -200f) - center - this.velocity) * num3, moveSpeed); int num31 = Math.Sign(player.Center.X - center.X); if (num31 != 0) { if ((double) this.ai[2] == 0.0 && num31 != this.direction) { this.rotation += 3.141593f; for (int index = 0; index < this.oldPos.Length; ++index) this.oldPos[index] = Vector2.Zero; } this.direction = num31; if (this.spriteDirection != -this.direction) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } ++this.ai[2]; if ((double) this.ai[2] < (double) num2) return; int num32 = 0; switch ((int) this.ai[3]) { case 0: case 2: case 3: case 5: case 6: case 7: num32 = 1; break; case 1: case 4: case 8: num32 = 2; break; } switch (num32) { case 1: this.ai[0] = 11f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.velocity = Vector2.Normalize(player.Center - center) * num5; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); if (num31 != 0) { this.direction = num31; if (this.spriteDirection == 1) this.rotation += 3.141593f; this.spriteDirection = -this.direction; break; } break; case 2: this.ai[0] = 12f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; case 3: this.ai[0] = 13f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; break; } this.netUpdate = true; } else if ((double) this.ai[0] == 11.0) { this.dontTakeDamage = false; this.chaseable = true; this.alpha -= 25; if (this.alpha < 0) this.alpha = 0; int num33 = 7; for (int index7 = 0; index7 < num33; ++index7) { Vector2 vector2_11 = (Vector2.Normalize(this.velocity) * new Vector2((float) (this.width + 50) / 2f, (float) this.height) * 0.75f).RotatedBy((double) (index7 - (num33 / 2 - 1)) * Math.PI / (double) num33) + center; Vector2 vector2_12 = ((float) (Main.rand.NextDouble() * 3.14159274101257) - 1.570796f).ToRotationVector2() * (float) Main.rand.Next(3, 8); Vector2 vector2_13 = vector2_12; int index8 = Dust.NewDust(vector2_11 + vector2_13, 0, 0, 172, vector2_12.X * 2f, vector2_12.Y * 2f, 100, Scale: 1.4f); Main.dust[index8].noGravity = true; Main.dust[index8].noLight = true; Main.dust[index8].velocity /= 4f; Main.dust[index8].velocity -= this.velocity; } ++this.ai[2]; if ((double) this.ai[2] < (double) num4) return; this.ai[0] = 10f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; ++this.ai[3]; this.netUpdate = true; } else if ((double) this.ai[0] == 12.0) { this.dontTakeDamage = true; this.chaseable = false; if (this.alpha < (int) byte.MaxValue) { this.alpha += 17; if (this.alpha > (int) byte.MaxValue) this.alpha = (int) byte.MaxValue; } this.velocity = this.velocity * 0.98f; this.velocity.Y = MathHelper.Lerp(this.velocity.Y, 0.0f, 0.02f); if ((double) this.ai[2] == (double) (num13 / 2)) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); if (Main.netMode != 1 && (double) this.ai[2] == (double) (num13 / 2)) { if ((double) this.ai[1] == 0.0) this.ai[1] = (float) (300 * Math.Sign((center - player.Center).X)); Vector2 vector2 = this.Center = player.Center + new Vector2(-this.ai[1], -200f); int num34 = Math.Sign(player.Center.X - vector2.X); if (num34 != 0) { if ((double) this.ai[2] == 0.0 && num34 != this.direction) { this.rotation += 3.141593f; for (int index = 0; index < this.oldPos.Length; ++index) this.oldPos[index] = Vector2.Zero; } this.direction = num34; if (this.spriteDirection != -this.direction) this.rotation += 3.141593f; this.spriteDirection = -this.direction; } } ++this.ai[2]; if ((double) this.ai[2] < (double) num13) return; this.ai[0] = 10f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; ++this.ai[3]; if ((double) this.ai[3] >= 9.0) this.ai[3] = 0.0f; this.netUpdate = true; } else { if ((double) this.ai[0] != 13.0) return; if ((double) this.ai[2] == 0.0) SoundEngine.PlaySound(29, (int) center.X, (int) center.Y, 20); this.velocity = this.velocity.RotatedBy(-(double) num18 * (double) this.direction); this.rotation -= num18 * (float) this.direction; ++this.ai[2]; if ((double) this.ai[2] < (double) num14) return; this.ai[0] = 10f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; ++this.ai[3]; this.netUpdate = true; } } private void AI_037_Destroyer() { if ((double) this.ai[3] > 0.0) this.realLife = (int) this.ai[3]; if (this.target < 0 || this.target == (int) byte.MaxValue || Main.player[this.target].dead) this.TargetClosest(); if (this.type >= 134 && this.type <= 136) { double num = (double) this.velocity.Length(); if (this.type == 134 || this.type != 134 && Main.npc[(int) this.ai[1]].alpha < 128) { if (this.alpha != 0) { for (int index1 = 0; index1 < 2; ++index1) { int index2 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 182, Alpha: 100, Scale: 2f); Main.dust[index2].noGravity = true; Main.dust[index2].noLight = true; } } this.alpha -= 42; if (this.alpha < 0) this.alpha = 0; } } if (this.type > 134) { bool flag = false; if ((double) this.ai[1] <= 0.0) flag = true; else if (Main.npc[(int) this.ai[1]].life <= 0) flag = true; if (flag) { this.life = 0; this.HitEffect(); this.checkDead(); } } if (Main.netMode != 1) { if ((double) this.ai[0] == 0.0 && this.type == 134) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index3 = this.whoAmI; int num = 80; if (Main.getGoodWorld) num *= 2; for (int index4 = 0; index4 <= num; ++index4) { int Type = 135; if (index4 == num) Type = 136; int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index3; Main.npc[index3].ai[0] = (float) number; NetMessage.SendData(23, number: number); index3 = number; } } if (this.type == 135) { this.localAI[0] += (float) Main.rand.Next(4); if ((double) this.localAI[0] >= (double) Main.rand.Next(1400, 26000)) { this.localAI[0] = 0.0f; this.TargetClosest(); if (Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) (this.height / 2)); float num1 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X + (float) Main.rand.Next(-20, 21); float num2 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y + (float) Main.rand.Next(-20, 21); float num3 = (float) (8.0 / Math.Sqrt((double) num1 * (double) num1 + (double) num2 * (double) num2)); float num4 = num1 * num3; float num5 = num2 * num3; float SpeedX = num4 + (float) Main.rand.Next(-20, 21) * 0.05f; float SpeedY = num5 + (float) Main.rand.Next(-20, 21) * 0.05f; int damageForProjectiles = this.GetAttackDamage_ForProjectiles(22f, 18f); int Type = 100; vector2.X += SpeedX * 5f; vector2.Y += SpeedY * 5f; int index = Projectile.NewProjectile(vector2.X, vector2.Y, SpeedX, SpeedY, Type, damageForProjectiles, 0.0f, Main.myPlayer); Main.projectile[index].timeLeft = 300; this.netUpdate = true; } } } } int num6 = (int) ((double) this.position.X / 16.0) - 1; int num7 = (int) (((double) this.position.X + (double) this.width) / 16.0) + 2; int num8 = (int) ((double) this.position.Y / 16.0) - 1; int num9 = (int) (((double) this.position.Y + (double) this.height) / 16.0) + 2; if (num6 < 0) num6 = 0; if (num7 > Main.maxTilesX) num7 = Main.maxTilesX; if (num8 < 0) num8 = 0; if (num9 > Main.maxTilesY) num9 = Main.maxTilesY; bool flag1 = false; if (!flag1) { for (int index5 = num6; index5 < num7; ++index5) { for (int index6 = num8; index6 < num9; ++index6) { if (Main.tile[index5, index6] != null && (Main.tile[index5, index6].nactive() && (Main.tileSolid[(int) Main.tile[index5, index6].type] || Main.tileSolidTop[(int) Main.tile[index5, index6].type] && Main.tile[index5, index6].frameY == (short) 0) || Main.tile[index5, index6].liquid > (byte) 64)) { Vector2 vector2; vector2.X = (float) (index5 * 16); vector2.Y = (float) (index6 * 16); if ((double) this.position.X + (double) this.width > (double) vector2.X && (double) this.position.X < (double) vector2.X + 16.0 && (double) this.position.Y + (double) this.height > (double) vector2.Y && (double) this.position.Y < (double) vector2.Y + 16.0) { flag1 = true; break; } } } } } if (!flag1) { if (this.type != 135 || (double) this.ai[2] != 1.0) Lighting.AddLight((int) (((double) this.position.X + (double) (this.width / 2)) / 16.0), (int) (((double) this.position.Y + (double) (this.height / 2)) / 16.0), 0.3f, 0.1f, 0.05f); this.localAI[1] = 1f; if (this.type == 134) { Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height); int num10 = 1000; bool flag2 = true; if ((double) this.position.Y > (double) Main.player[this.target].position.Y) { for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active) { Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X - num10, (int) Main.player[index].position.Y - num10, num10 * 2, num10 * 2); if (rectangle1.Intersects(rectangle2)) { flag2 = false; break; } } } if (flag2) flag1 = true; } } } else this.localAI[1] = 0.0f; float num11 = 16f; if (Main.dayTime || Main.player[this.target].dead) { flag1 = false; ++this.velocity.Y; if ((double) this.position.Y > Main.worldSurface * 16.0) { ++this.velocity.Y; num11 = 32f; } if ((double) this.position.Y > Main.rockLayer * 16.0) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].aiStyle == this.aiStyle) Main.npc[index].active = false; } } } float num12 = 0.1f; float num13 = 0.15f; if (Main.getGoodWorld) { num12 *= 1.2f; num13 *= 1.2f; } Vector2 vector2_1 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num14 = Main.player[this.target].position.X + (float) (Main.player[this.target].width / 2); float num15 = Main.player[this.target].position.Y + (float) (Main.player[this.target].height / 2); float num16 = (float) ((int) ((double) num14 / 16.0) * 16); float num17 = (float) ((int) ((double) num15 / 16.0) * 16); vector2_1.X = (float) ((int) ((double) vector2_1.X / 16.0) * 16); vector2_1.Y = (float) ((int) ((double) vector2_1.Y / 16.0) * 16); float num18 = num16 - vector2_1.X; float num19 = num17 - vector2_1.Y; float num20 = (float) Math.Sqrt((double) num18 * (double) num18 + (double) num19 * (double) num19); if ((double) this.ai[1] > 0.0) { if ((double) this.ai[1] < (double) Main.npc.Length) { try { Vector2 vector2_2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); num18 = Main.npc[(int) this.ai[1]].position.X + (float) (Main.npc[(int) this.ai[1]].width / 2) - vector2_2.X; num19 = Main.npc[(int) this.ai[1]].position.Y + (float) (Main.npc[(int) this.ai[1]].height / 2) - vector2_2.Y; } catch { } this.rotation = (float) Math.Atan2((double) num19, (double) num18) + 1.57f; float num21 = (float) Math.Sqrt((double) num18 * (double) num18 + (double) num19 * (double) num19); int num22 = (int) (44.0 * (double) this.scale); float num23 = (num21 - (float) num22) / num21; float num24 = num18 * num23; float num25 = num19 * num23; this.velocity = Vector2.Zero; this.position.X += num24; this.position.Y += num25; return; } } if (!flag1) { this.TargetClosest(); this.velocity.Y += 0.15f; if ((double) this.velocity.Y > (double) num11) this.velocity.Y = num11; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num11 * 0.4) { if ((double) this.velocity.X < 0.0) this.velocity.X -= num12 * 1.1f; else this.velocity.X += num12 * 1.1f; } else if ((double) this.velocity.Y == (double) num11) { if ((double) this.velocity.X < (double) num18) this.velocity.X += num12; else if ((double) this.velocity.X > (double) num18) this.velocity.X -= num12; } else if ((double) this.velocity.Y > 4.0) { if ((double) this.velocity.X < 0.0) this.velocity.X += num12 * 0.9f; else this.velocity.X -= num12 * 0.9f; } } else { if (this.soundDelay == 0) { float num26 = num20 / 40f; if ((double) num26 < 10.0) num26 = 10f; if ((double) num26 > 20.0) num26 = 20f; this.soundDelay = (int) num26; SoundEngine.PlaySound(15, (int) this.position.X, (int) this.position.Y); } float num27 = (float) Math.Sqrt((double) num18 * (double) num18 + (double) num19 * (double) num19); float num28 = Math.Abs(num18); float num29 = Math.Abs(num19); float num30 = num11 / num27; float num31 = num18 * num30; float num32 = num19 * num30; if (((double) this.velocity.X > 0.0 && (double) num31 > 0.0 || (double) this.velocity.X < 0.0 && (double) num31 < 0.0) && ((double) this.velocity.Y > 0.0 && (double) num32 > 0.0 || (double) this.velocity.Y < 0.0 && (double) num32 < 0.0)) { if ((double) this.velocity.X < (double) num31) this.velocity.X += num13; else if ((double) this.velocity.X > (double) num31) this.velocity.X -= num13; if ((double) this.velocity.Y < (double) num32) this.velocity.Y += num13; else if ((double) this.velocity.Y > (double) num32) this.velocity.Y -= num13; } if ((double) this.velocity.X > 0.0 && (double) num31 > 0.0 || (double) this.velocity.X < 0.0 && (double) num31 < 0.0 || (double) this.velocity.Y > 0.0 && (double) num32 > 0.0 || (double) this.velocity.Y < 0.0 && (double) num32 < 0.0) { if ((double) this.velocity.X < (double) num31) this.velocity.X += num12; else if ((double) this.velocity.X > (double) num31) this.velocity.X -= num12; if ((double) this.velocity.Y < (double) num32) this.velocity.Y += num12; else if ((double) this.velocity.Y > (double) num32) this.velocity.Y -= num12; if ((double) Math.Abs(num32) < (double) num11 * 0.2 && ((double) this.velocity.X > 0.0 && (double) num31 < 0.0 || (double) this.velocity.X < 0.0 && (double) num31 > 0.0)) { if ((double) this.velocity.Y > 0.0) this.velocity.Y += num12 * 2f; else this.velocity.Y -= num12 * 2f; } if ((double) Math.Abs(num31) < (double) num11 * 0.2 && ((double) this.velocity.Y > 0.0 && (double) num32 < 0.0 || (double) this.velocity.Y < 0.0 && (double) num32 > 0.0)) { if ((double) this.velocity.X > 0.0) this.velocity.X += num12 * 2f; else this.velocity.X -= num12 * 2f; } } else if ((double) num28 > (double) num29) { if ((double) this.velocity.X < (double) num31) this.velocity.X += num12 * 1.1f; else if ((double) this.velocity.X > (double) num31) this.velocity.X -= num12 * 1.1f; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num11 * 0.5) { if ((double) this.velocity.Y > 0.0) this.velocity.Y += num12; else this.velocity.Y -= num12; } } else { if ((double) this.velocity.Y < (double) num32) this.velocity.Y += num12 * 1.1f; else if ((double) this.velocity.Y > (double) num32) this.velocity.Y -= num12 * 1.1f; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num11 * 0.5) { if ((double) this.velocity.X > 0.0) this.velocity.X += num12; else this.velocity.X -= num12; } } } this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 1.57f; if (this.type != 134) return; if (flag1) { if ((double) this.localAI[0] != 1.0) this.netUpdate = true; this.localAI[0] = 1f; } else { if ((double) this.localAI[0] != 0.0) this.netUpdate = true; this.localAI[0] = 0.0f; } if (((double) this.velocity.X <= 0.0 || (double) this.oldVelocity.X >= 0.0) && ((double) this.velocity.X >= 0.0 || (double) this.oldVelocity.X <= 0.0) && ((double) this.velocity.Y <= 0.0 || (double) this.oldVelocity.Y >= 0.0) && ((double) this.velocity.Y >= 0.0 || (double) this.oldVelocity.Y <= 0.0) || this.justHit) return; this.netUpdate = true; } private void AI_005_EaterOfSouls() { if (this.type == 210 || this.type == 211) NPCUtils.TargetClosestNonBees(this); else if (this.target < 0 || this.target <= (int) byte.MaxValue || Main.player[this.target].dead) this.TargetClosest(); if (this.type == 619) { if (Main.dayTime) { this.velocity.Y -= 0.3f; this.EncourageDespawn(60); } this.position = this.position + this.netOffset; if (this.alpha == (int) byte.MaxValue) { this.spriteDirection = this.direction; this.velocity.Y = -6f; for (int index = 0; index < 35; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.5f; } } this.alpha -= 15; if (this.alpha < 0) this.alpha = 0; if (this.alpha != 0) { for (int index = 0; index < 2; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.3f; } } this.position = this.position - this.netOffset; } NPCAimedTarget targetData = this.GetTargetData(); bool flag1 = false; if (targetData.Type == NPCTargetType.Player) flag1 = Main.player[this.target].dead; float num1 = 6f; float num2 = 0.05f; if (this.type == 6 || this.type == 173) { num1 = 4f; num2 = 0.02f; if (this.type == 6 && Main.expertMode) num2 = 0.035f; } else if (this.type == 94) { num1 = 4.2f; num2 = 0.022f; } else if (this.type == 619) { num1 = 6f; num2 = 0.1f; } else if (this.type == 252) { if (targetData.Type != NPCTargetType.None && Collision.CanHit((Entity) this, targetData)) { num1 = 6f; num2 = 0.1f; } else { num2 = 0.01f; num1 = 2f; } } else if (this.type == 42 || this.type >= 231 && this.type <= 235) { float num3 = 3.5f; float num4 = 0.021f; if (this.type == 231) { num3 = 3f; num4 = 0.017f; } num1 = num3 * (1f - this.scale); num2 = num4 * (1f - this.scale); if ((double) this.position.Y / 16.0 < Main.worldSurface) { if ((double) Main.player[this.target].position.Y - (double) this.position.Y > 300.0 && (double) this.velocity.Y < 0.0) this.velocity.Y *= 0.97f; if ((double) Main.player[this.target].position.Y - (double) this.position.Y < 80.0 && (double) this.velocity.Y > 0.0) this.velocity.Y *= 0.97f; } } else if (this.type == 205) { num1 = 3.25f; num2 = 0.018f; } else if (this.type == 176) { num1 = 4f; num2 = 0.017f; } else if (this.type == 23) { num1 = 1f; num2 = 0.03f; } else if (this.type == 5) { num1 = 5f; num2 = 0.03f; } else if (this.type == 210 || this.type == 211) { ++this.ai[1]; float num5 = (float) (((double) this.ai[1] - 60.0) / 60.0); if ((double) num5 > 1.0) { num5 = 1f; } else { if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; if ((double) this.velocity.Y > 6.0) this.velocity.Y = 6f; if ((double) this.velocity.Y < -6.0) this.velocity.Y = -6f; } num1 = 5f; num2 = 0.1f * num5; } Vector2 vector2_1 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num6 = targetData.Position.X + (float) (targetData.Width / 2); float num7 = targetData.Position.Y + (float) (targetData.Height / 2); float num8 = (float) ((int) ((double) num6 / 8.0) * 8); float num9 = (float) ((int) ((double) num7 / 8.0) * 8); vector2_1.X = (float) ((int) ((double) vector2_1.X / 8.0) * 8); vector2_1.Y = (float) ((int) ((double) vector2_1.Y / 8.0) * 8); float num10 = num8 - vector2_1.X; float num11 = num9 - vector2_1.Y; float num12 = (float) Math.Sqrt((double) num10 * (double) num10 + (double) num11 * (double) num11); float num13 = num12; bool flag2 = false; if ((double) num12 > 600.0) flag2 = true; float SpeedX1; float SpeedY1; if ((double) num12 == 0.0) { SpeedX1 = this.velocity.X; SpeedY1 = this.velocity.Y; } else { float num14 = num1 / num12; SpeedX1 = num10 * num14; SpeedY1 = num11 * num14; } int num15 = this.type == 6 || this.type == 139 || this.type == 173 ? 1 : (this.type == 205 ? 1 : 0); bool flag3 = this.type == 42 || this.type == 94 || this.type == 619 || this.type == 176 || this.type == 210 || this.type == 211 || this.type >= 231 && this.type <= 235; bool flag4 = this.type != 173 && this.type != 6 && this.type != 42 && (this.type < 231 || this.type > 235) && this.type != 94 && this.type != 139 && this.type != 619; int num16 = flag3 ? 1 : 0; if ((num15 | num16) != 0) { if ((double) num13 > 100.0 | flag3) { ++this.ai[0]; if ((double) this.ai[0] > 0.0) this.velocity.Y += 23f / 1000f; else this.velocity.Y -= 23f / 1000f; if ((double) this.ai[0] < -100.0 || (double) this.ai[0] > 100.0) this.velocity.X += 23f / 1000f; else this.velocity.X -= 23f / 1000f; if ((double) this.ai[0] > 200.0) this.ai[0] = -200f; } if ((double) num13 < 150.0 && (this.type == 6 || this.type == 94 || this.type == 173 || this.type == 619)) { this.velocity.X += SpeedX1 * 0.007f; this.velocity.Y += SpeedY1 * 0.007f; } } if (flag1) { SpeedX1 = (float) ((double) this.direction * (double) num1 / 2.0); SpeedY1 = (float) (-(double) num1 / 2.0); } else if (this.type == 619 && (double) this.Center.Y > (double) targetData.Center.Y - 200.0) this.velocity.Y -= 0.3f; if ((double) this.velocity.X < (double) SpeedX1) { this.velocity.X += num2; if (flag4 && (double) this.velocity.X < 0.0 && (double) SpeedX1 > 0.0) this.velocity.X += num2; } else if ((double) this.velocity.X > (double) SpeedX1) { this.velocity.X -= num2; if (flag4 && (double) this.velocity.X > 0.0 && (double) SpeedX1 < 0.0) this.velocity.X -= num2; } if ((double) this.velocity.Y < (double) SpeedY1) { this.velocity.Y += num2; if (flag4 && (double) this.velocity.Y < 0.0 && (double) SpeedY1 > 0.0) this.velocity.Y += num2; } else if ((double) this.velocity.Y > (double) SpeedY1) { this.velocity.Y -= num2; if (flag4 && (double) this.velocity.Y > 0.0 && (double) SpeedY1 < 0.0) this.velocity.Y -= num2; } if (this.type == 23) { if ((double) SpeedX1 > 0.0) { this.spriteDirection = 1; this.rotation = (float) Math.Atan2((double) SpeedY1, (double) SpeedX1); } else if ((double) SpeedX1 < 0.0) { this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) SpeedY1, (double) SpeedX1) + 3.14f; } } else if (this.type == 139) { ++this.localAI[0]; if (this.justHit) this.localAI[0] = 0.0f; if (Main.netMode != 1 && (double) this.localAI[0] >= 120.0) { this.localAI[0] = 0.0f; if (targetData.Type != NPCTargetType.None && Collision.CanHit((Entity) this, targetData)) { int damageForProjectiles = this.GetAttackDamage_ForProjectiles(25f, 22f); int Type = 84; Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX1, SpeedY1, Type, damageForProjectiles, 0.0f, Main.myPlayer); } } if (!WorldGen.SolidTile(((int) this.position.X + this.width / 2) / 16, ((int) this.position.Y + this.height / 2) / 16)) Lighting.AddLight((int) (((double) this.position.X + (double) (this.width / 2)) / 16.0), (int) (((double) this.position.Y + (double) (this.height / 2)) / 16.0), 0.3f, 0.1f, 0.05f); if ((double) SpeedX1 > 0.0) { this.spriteDirection = 1; this.rotation = (float) Math.Atan2((double) SpeedY1, (double) SpeedX1); } if ((double) SpeedX1 < 0.0) { this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) SpeedY1, (double) SpeedX1) + 3.14f; } } else if (this.type == 6 || this.type == 94 || this.type == 173 || this.type == 619) this.rotation = (float) Math.Atan2((double) SpeedY1, (double) SpeedX1) - 1.57f; else if (this.type == 42 || this.type == 176 || this.type == 205 || this.type >= 231 && this.type <= 235) { if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; this.rotation = this.velocity.X * 0.1f; } else this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) - 1.57f; if (this.type == 6 || this.type == 619 || this.type == 23 || this.type == 42 || this.type == 94 || this.type == 139 || this.type == 173 || this.type == 176 || this.type == 205 || this.type == 210 || this.type == 211 || this.type >= 231 && this.type <= 235) { float num17 = 0.7f; if (this.type == 6 || this.type == 173) num17 = 0.4f; if (this.collideX) { this.netUpdate = true; this.velocity.X = this.oldVelocity.X * -num17; if (this.direction == -1 && (double) this.velocity.X > 0.0 && (double) this.velocity.X < 2.0) this.velocity.X = 2f; if (this.direction == 1 && (double) this.velocity.X < 0.0 && (double) this.velocity.X > -2.0) this.velocity.X = -2f; } if (this.collideY) { this.netUpdate = true; this.velocity.Y = this.oldVelocity.Y * -num17; if ((double) this.velocity.Y > 0.0 && (double) this.velocity.Y < 1.5) this.velocity.Y = 2f; if ((double) this.velocity.Y < 0.0 && (double) this.velocity.Y > -1.5) this.velocity.Y = -2f; } this.position = this.position + this.netOffset; if (this.type == 619) { int index = Dust.NewDust(this.position, this.width, this.height, 5, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100); Main.dust[index].velocity *= 0.5f; } else if (this.type != 42 && this.type != 139 && this.type != 176 && this.type != 205 && this.type != 210 && this.type != 211 && this.type != 252 && (this.type < 231 || this.type > 235) && Main.rand.Next(20) == 0) { int Type = 18; if (this.type == 173) Type = 5; int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y + (float) this.height * 0.25f), this.width, (int) ((double) this.height * 0.5), Type, this.velocity.X, 2f, 75, this.color, this.scale); Main.dust[index].velocity.X *= 0.5f; Main.dust[index].velocity.Y *= 0.1f; } this.position = this.position - this.netOffset; } else if (this.type != 252 && Main.rand.Next(40) == 0) { int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y + (float) this.height * 0.25f), this.width, (int) ((double) this.height * 0.5), 5, this.velocity.X, 2f); Main.dust[index].velocity.X *= 0.5f; Main.dust[index].velocity.Y *= 0.1f; } if ((this.type == 6 || this.type == 94 || this.type == 173 || this.type == 619) && this.wet) { if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.95f; this.velocity.Y -= 0.3f; if ((double) this.velocity.Y < -2.0) this.velocity.Y = -2f; } if (this.type == 205 && this.wet) { if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.95f; this.velocity.Y -= 0.5f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; this.TargetClosest(); } if (this.type == 42 || this.type == 176 || this.type >= 231 && this.type <= 235) { if (this.wet) { if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.95f; this.velocity.Y -= 0.5f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; this.TargetClosest(); } if ((double) this.ai[1] == 101.0) { SoundEngine.PlaySound(SoundID.Item17, this.position); this.ai[1] = 0.0f; } if (Main.netMode != 1) { this.ai[1] += (float) Main.rand.Next(5, 20) * 0.1f * this.scale; if (this.type == 176) this.ai[1] += (float) Main.rand.Next(5, 20) * 0.1f * this.scale; if (targetData.Type == NPCTargetType.Player) { Player player = Main.player[this.target]; if (player != null && (double) player.stealth == 0.0 && player.itemAnimation == 0) this.ai[1] = 0.0f; } if ((double) this.ai[1] >= 130.0) { if (targetData.Type != NPCTargetType.None && Collision.CanHit((Entity) this, targetData)) { float num18 = 8f; Vector2 vector2_2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) (this.height / 2)); float num19 = targetData.Center.X - vector2_2.X + (float) Main.rand.Next(-20, 21); float num20 = targetData.Center.Y - vector2_2.Y + (float) Main.rand.Next(-20, 21); if ((double) num19 < 0.0 && (double) this.velocity.X < 0.0 || (double) num19 > 0.0 && (double) this.velocity.X > 0.0) { float num21 = (float) Math.Sqrt((double) num19 * (double) num19 + (double) num20 * (double) num20); float num22 = num18 / num21; float SpeedX2 = num19 * num22; float SpeedY2 = num20 * num22; int Damage = (int) (10.0 * (double) this.scale); if (this.type == 176) Damage = (int) (30.0 * (double) this.scale); int Type = 55; int index = Projectile.NewProjectile(vector2_2.X, vector2_2.Y, SpeedX2, SpeedY2, Type, Damage, 0.0f, Main.myPlayer); Main.projectile[index].timeLeft = 300; this.ai[1] = 101f; this.netUpdate = true; } else this.ai[1] = 0.0f; } else this.ai[1] = 0.0f; } } } if (this.type == 139 & flag2) { if ((double) this.velocity.X > 0.0 && (double) SpeedX1 > 0.0 || (double) this.velocity.X < 0.0 && (double) SpeedX1 < 0.0) { if ((double) Math.Abs(this.velocity.X) < 12.0) this.velocity.X *= 1.05f; } else this.velocity.X *= 0.9f; } if (Main.netMode != 1) { if (this.type == 94 && !flag1) { if (this.justHit) this.localAI[0] = 0.0f; ++this.localAI[0]; if ((double) this.localAI[0] == 180.0) { if (targetData.Type != NPCTargetType.None && Collision.CanHit((Entity) this, targetData)) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2) + (double) this.velocity.X), (int) ((double) this.position.Y + (double) (this.height / 2) + (double) this.velocity.Y), 112); this.localAI[0] = 0.0f; } } if (this.type == 619 && !flag1) { if (this.justHit) this.localAI[0] += 10f; ++this.localAI[0]; if ((double) this.localAI[0] >= 120.0) { if (targetData.Type != NPCTargetType.None && Collision.CanHit((Entity) this, targetData)) { if ((double) (this.Center - targetData.Center).Length() < 400.0) { this.velocity = -this.DirectionTo(new Vector2(targetData.Center.X, targetData.Position.Y)) * 5f; this.netUpdate = true; this.localAI[0] = 0.0f; Projectile.NewProjectile(this.Center, this.DirectionTo(new Vector2(targetData.Center.X + (float) Main.rand.Next(-100, 101), targetData.Position.Y + (float) Main.rand.Next(-100, 101))) * 15f, 811, 50, 1f, Main.myPlayer); } else this.localAI[0] = 50f; } else this.localAI[0] = 50f; } } } if (((!Main.dayTime || this.type == 173 || this.type == 619 || this.type == 6 || this.type == 23 || this.type == 42 || this.type == 94 || this.type == 176 || this.type == 205 || this.type == 210 || this.type == 211 || this.type == 252 ? 0 : (this.type < 231 ? 1 : (this.type > 235 ? 1 : 0))) | (flag1 ? 1 : 0)) != 0) { this.velocity.Y -= num2 * 2f; this.EncourageDespawn(10); } if (((double) this.velocity.X <= 0.0 || (double) this.oldVelocity.X >= 0.0) && ((double) this.velocity.X >= 0.0 || (double) this.oldVelocity.X <= 0.0) && ((double) this.velocity.Y <= 0.0 || (double) this.oldVelocity.Y >= 0.0) && ((double) this.velocity.Y >= 0.0 || (double) this.oldVelocity.Y <= 0.0) || this.justHit) return; this.netUpdate = true; } public void CopyInteractions(NPC npc) { for (int index = 0; index < this.playerInteraction.Length; ++index) this.playerInteraction[index] = npc.playerInteraction[index]; this.lastInteraction = npc.lastInteraction; } public static int GetEaterOfWorldsSegmentsCount() => !Main.expertMode ? 65 : 70; public static int GetEaterOfWorldsSegmentsCountByGamemode(int gamemode) { GameModeData gameModeData; return !Main.RegisterdGameModes.TryGetValue(gamemode, out gameModeData) || !gameModeData.IsExpertMode ? 65 : 70; } public static int GetBrainOfCthuluCreepersCount() => Main.getGoodWorld ? 40 : 20; private void AI_006_Worms() { if (this.type == 117 && (double) this.localAI[1] == 0.0) { this.localAI[1] = 1f; SoundEngine.PlaySound(SoundID.NPCDeath13, this.position); int num = 1; if ((double) this.velocity.X < 0.0) num = -1; for (int index = 0; index < 20; ++index) Dust.NewDust(new Vector2(this.position.X - 20f, this.position.Y - 20f), this.width + 40, this.height + 40, 5, (float) (num * 8), -1f); } if (this.type == 454 && (double) this.localAI[3] == 0.0) { SoundEngine.PlaySound(SoundID.Item119, this.position); this.localAI[3] = 1f; } if (this.type >= 454 && this.type <= 459) { this.dontTakeDamage = this.alpha > 0; if (this.type == 454 || this.type != 454 && Main.npc[(int) this.ai[1]].alpha < 85) { if (this.dontTakeDamage) { for (int index1 = 0; index1 < 2; ++index1) { int index2 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 228, Alpha: 100, Scale: 2f); Main.dust[index2].noGravity = true; Main.dust[index2].noLight = true; } } this.alpha -= 42; if (this.alpha < 0) this.alpha = 0; } } if (this.type >= 621 && this.type <= 623) { this.position = this.position + this.netOffset; this.dontTakeDamage = this.alpha > 0; if (this.type == 621 || this.type != 621 && Main.npc[(int) this.ai[1]].alpha < 85) { if (this.dontTakeDamage) { for (int index = 0; index < 2; ++index) Dust.NewDust(this.position, this.width, this.height, 5, Alpha: 100); } this.alpha -= 42; if (this.alpha < 0) this.alpha = 0; } if (this.alpha == 0 && Main.rand.Next(5) == 0) Dust.NewDust(this.position, this.width, this.height, 5, Alpha: 100); this.position = this.position - this.netOffset; } else if (this.type == 402 && (double) this.ai[1] == 0.0) { this.ai[1] = (float) Main.rand.Next(-2, 0); this.netUpdate = true; } if (Main.netMode != 1 && Main.expertMode) { if (this.type == 14 && ((double) this.position.Y / 16.0 < Main.worldSurface || Main.getGoodWorld)) { int x = (int) ((double) this.Center.X / 16.0); int y = (int) ((double) this.Center.Y / 16.0); if (WorldGen.InWorld(x, y) && Main.tile[x, y].wall == (ushort) 0 && Main.rand.Next(900) == 0) { this.TargetClosest(); if (Collision.CanHitLine(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2) + (double) this.velocity.X), (int) ((double) this.position.Y + (double) (this.height / 2) + (double) this.velocity.Y), 112, ai1: 1f); } } else if (this.type == 13) { int maxValue = 90 + (int) ((double) this.life / (double) this.lifeMax * 60.0 * 5.0); if (Main.rand.Next(maxValue) == 0) { this.TargetClosest(); if (Collision.CanHitLine(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2) + (double) this.velocity.X), (int) ((double) this.position.Y + (double) (this.height / 2) + (double) this.velocity.Y), 112, ai1: 1f); } } } bool flag1 = false; float num1 = 0.2f; switch (this.type) { case 10: case 39: case 95: case 117: case 510: flag1 = true; break; case 513: flag1 = !Main.player[this.target].ZoneUndergroundDesert; num1 = 0.1f; break; case 621: flag1 = false; break; } if (this.type >= 13 && this.type <= 15) this.realLife = -1; else if ((double) this.ai[3] > 0.0) this.realLife = (int) this.ai[3]; if (this.target < 0 || this.target == (int) byte.MaxValue || Main.player[this.target].dead || flag1 && (double) Main.player[this.target].position.Y < Main.worldSurface * 16.0) this.TargetClosest(); if (Main.player[this.target].dead || flag1 && (double) Main.player[this.target].position.Y < Main.worldSurface * 16.0) { this.EncourageDespawn(300); if (flag1) this.velocity.Y += num1; } if (this.type == 621 && Main.dayTime) { this.EncourageDespawn(60); ++this.velocity.Y; } if (Main.netMode != 1) { if (this.type == 87 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index3 = this.whoAmI; for (int index4 = 0; index4 < 14; ++index4) { int Type = 89; if (index4 == 1 || index4 == 8) { Type = 88; } else { switch (index4) { case 11: Type = 90; break; case 12: Type = 91; break; case 13: Type = 92; break; } } int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index3; Main.npc[number].CopyInteractions(this); Main.npc[index3].ai[0] = (float) number; NetMessage.SendData(23, number: number); index3 = number; } } if (this.type == 454 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index5 = this.whoAmI; for (int index6 = 0; index6 < 30; ++index6) { int Type = 456; if ((index6 - 2) % 4 == 0 && index6 < 26) { Type = 455; } else { switch (index6) { case 27: Type = 457; break; case 28: Type = 458; break; case 29: Type = 459; break; } } int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index5; Main.npc[number].CopyInteractions(this); Main.npc[index5].ai[0] = (float) number; NetMessage.SendData(23, number: number); index5 = number; } } if (this.type == 513 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index7 = this.whoAmI; int num2 = Main.rand.Next(6, 10); for (int index8 = 0; index8 < num2; ++index8) { int Type = 514; if (index8 == num2 - 1) Type = 515; int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index7; Main.npc[number].CopyInteractions(this); Main.npc[index7].ai[0] = (float) number; NetMessage.SendData(23, number: number); index7 = number; } } if (this.type == 510 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index9 = this.whoAmI; int num3 = Main.rand.Next(12, 21); for (int index10 = 0; index10 < num3; ++index10) { int Type = 511; if (index10 == num3 - 1) Type = 512; int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index9; Main.npc[number].CopyInteractions(this); Main.npc[index9].ai[0] = (float) number; NetMessage.SendData(23, number: number); index9 = number; } } if (this.type == 621 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index11 = this.whoAmI; int num4 = 16; for (int index12 = 0; index12 < num4; ++index12) { int Type = 622; if (index12 == num4 - 1) Type = 623; int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index11; Main.npc[number].CopyInteractions(this); Main.npc[index11].ai[0] = (float) number; NetMessage.SendData(23, number: number); index11 = number; } } else if ((this.type == 7 || this.type == 8 || this.type == 10 || this.type == 11 || this.type == 13 || this.type == 14 || this.type == 39 || this.type == 40 || this.type == 95 || this.type == 96 || this.type == 98 || this.type == 99 || this.type == 117 || this.type == 118) && (double) this.ai[0] == 0.0) { if (this.type == 7 || this.type == 10 || this.type == 13 || this.type == 39 || this.type == 95 || this.type == 98 || this.type == 117) { if (this.type < 13 || this.type > 15) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; } this.ai[2] = (float) Main.rand.Next(8, 13); if (this.type == 10) this.ai[2] = (float) Main.rand.Next(4, 7); if (this.type == 13) this.ai[2] = (float) NPC.GetEaterOfWorldsSegmentsCount(); if (this.type == 39) this.ai[2] = (float) Main.rand.Next(12, 19); if (this.type == 95) this.ai[2] = (float) Main.rand.Next(6, 12); if (this.type == 98) this.ai[2] = (float) Main.rand.Next(20, 26); if (this.type == 117) this.ai[2] = (float) Main.rand.Next(3, 6); this.ai[0] = (float) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), this.type + 1, this.whoAmI); Main.npc[(int) this.ai[0]].CopyInteractions(this); } else if ((this.type == 8 || this.type == 11 || this.type == 14 || this.type == 40 || this.type == 96 || this.type == 99 || this.type == 118) && (double) this.ai[2] > 0.0) { this.ai[0] = (float) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), this.type, this.whoAmI); Main.npc[(int) this.ai[0]].CopyInteractions(this); } else { this.ai[0] = (float) NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), this.type + 1, this.whoAmI); Main.npc[(int) this.ai[0]].CopyInteractions(this); } if (this.type < 13 || this.type > 15) { Main.npc[(int) this.ai[0]].ai[3] = this.ai[3]; Main.npc[(int) this.ai[0]].realLife = this.realLife; } Main.npc[(int) this.ai[0]].ai[1] = (float) this.whoAmI; Main.npc[(int) this.ai[0]].ai[2] = this.ai[2] - 1f; this.netUpdate = true; } if (this.type == 412 && (double) this.ai[0] == 0.0) { this.ai[3] = (float) this.whoAmI; this.realLife = this.whoAmI; int index13 = this.whoAmI; int num5 = 30; for (int index14 = 0; index14 < num5; ++index14) { int Type = 413; if (index14 == num5 - 1) Type = 414; int number = NPC.NewNPC((int) ((double) this.position.X + (double) (this.width / 2)), (int) ((double) this.position.Y + (double) this.height), Type, this.whoAmI); Main.npc[number].ai[3] = (float) this.whoAmI; Main.npc[number].realLife = this.whoAmI; Main.npc[number].ai[1] = (float) index13; Main.npc[number].CopyInteractions(this); Main.npc[index13].ai[0] = (float) number; NetMessage.SendData(23, number: number); index13 = number; } } switch (this.type) { case 8: case 9: case 11: case 12: case 40: case 41: case 88: case 89: case 90: case 91: case 92: case 96: case 97: case 99: case 100: case 118: case 119: case 413: case 414: case 455: case 456: case 457: case 458: case 459: case 511: case 512: case 514: case 515: case 622: case 623: if (!Main.npc[(int) this.ai[1]].active || Main.npc[(int) this.ai[1]].aiStyle != this.aiStyle) { this.life = 0; this.HitEffect(); this.active = false; NetMessage.SendData(28, number: this.whoAmI, number2: -1f); break; } break; } switch (this.type) { case 7: case 8: case 10: case 11: case 39: case 40: case 87: case 88: case 89: case 90: case 91: case 95: case 96: case 98: case 99: case 117: case 118: case 412: case 413: case 454: case 455: case 456: case 457: case 458: case 510: case 511: case 513: case 514: case 621: case 622: if (!Main.npc[(int) this.ai[0]].active || Main.npc[(int) this.ai[0]].aiStyle != this.aiStyle) { this.life = 0; this.HitEffect(); this.active = false; NetMessage.SendData(28, number: this.whoAmI, number2: -1f); break; } break; } if (this.type == 13 || this.type == 14 || this.type == 15) { if (!Main.npc[(int) this.ai[1]].active && !Main.npc[(int) this.ai[0]].active) { this.life = 0; this.HitEffect(); this.checkDead(); this.active = false; NetMessage.SendData(28, number: this.whoAmI, number2: -1f); } if (this.type == 13 && !Main.npc[(int) this.ai[0]].active) { this.life = 0; this.HitEffect(); this.checkDead(); this.active = false; NetMessage.SendData(28, number: this.whoAmI, number2: -1f); } if (this.type == 15 && !Main.npc[(int) this.ai[1]].active) { this.life = 0; this.HitEffect(); this.checkDead(); this.active = false; NetMessage.SendData(28, number: this.whoAmI, number2: -1f); } if (this.type == 14 && (!Main.npc[(int) this.ai[1]].active || Main.npc[(int) this.ai[1]].aiStyle != this.aiStyle)) { this.type = 13; int whoAmI = this.whoAmI; float num6 = (float) this.life / (float) this.lifeMax; float num7 = this.ai[0]; this.SetDefaultsKeepPlayerInteraction(this.type); this.life = (int) ((double) this.lifeMax * (double) num6); this.ai[0] = num7; this.TargetClosest(); this.netUpdate = true; this.whoAmI = whoAmI; this.alpha = 0; } if (this.type == 14 && (!Main.npc[(int) this.ai[0]].active || Main.npc[(int) this.ai[0]].aiStyle != this.aiStyle)) { this.type = 15; int whoAmI = this.whoAmI; float num8 = (float) this.life / (float) this.lifeMax; float num9 = this.ai[1]; this.SetDefaultsKeepPlayerInteraction(this.type); this.life = (int) ((double) this.lifeMax * (double) num8); this.ai[1] = num9; this.TargetClosest(); this.netUpdate = true; this.whoAmI = whoAmI; this.alpha = 0; } } if (!this.active && Main.netMode == 2) NetMessage.SendData(28, number: this.whoAmI, number2: -1f); } int num10 = (int) ((double) this.position.X / 16.0) - 1; int num11 = (int) (((double) this.position.X + (double) this.width) / 16.0) + 2; int num12 = (int) ((double) this.position.Y / 16.0) - 1; int num13 = (int) (((double) this.position.Y + (double) this.height) / 16.0) + 2; if (num10 < 0) num10 = 0; if (num11 > Main.maxTilesX) num11 = Main.maxTilesX; if (num12 < 0) num12 = 0; if (num13 > Main.maxTilesY) num13 = Main.maxTilesY; bool flag2 = false; if (this.type >= 87 && this.type <= 92) flag2 = true; if (this.type >= 454 && this.type <= 459) flag2 = true; if (this.type >= 621 && this.type <= 623) flag2 = true; if (this.type == 402 && (double) this.ai[1] == -1.0) flag2 = true; if (this.type >= 412 && this.type <= 414) flag2 = true; if (!flag2) { for (int i = num10; i < num11; ++i) { for (int j = num12; j < num13; ++j) { if (Main.tile[i, j] != null && (Main.tile[i, j].nactive() && (Main.tileSolid[(int) Main.tile[i, j].type] || Main.tileSolidTop[(int) Main.tile[i, j].type] && Main.tile[i, j].frameY == (short) 0) || Main.tile[i, j].liquid > (byte) 64)) { Vector2 vector2; vector2.X = (float) (i * 16); vector2.Y = (float) (j * 16); if ((double) this.position.X + (double) this.width > (double) vector2.X && (double) this.position.X < (double) vector2.X + 16.0 && (double) this.position.Y + (double) this.height > (double) vector2.Y && (double) this.position.Y < (double) vector2.Y + 16.0) { flag2 = true; if (Main.rand.Next(100) == 0 && this.type != 117 && Main.tile[i, j].nactive() && Main.tileSolid[(int) Main.tile[i, j].type]) WorldGen.KillTile(i, j, true, true); } } } } } if (!flag2 && (this.type == 7 || this.type == 10 || this.type == 13 || this.type == 39 || this.type == 95 || this.type == 98 || this.type == 117 || this.type == 375 || this.type == 454 || this.type == 510 || this.type == 513 || this.type == 621)) { Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height); int num14 = 1000; bool flag3 = true; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active) { Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) Main.player[index].position.X - num14, (int) Main.player[index].position.Y - num14, num14 * 2, num14 * 2); if (rectangle1.Intersects(rectangle2)) { flag3 = false; break; } } } if (flag3) flag2 = true; } if (this.type >= 87 && this.type <= 92 || this.type >= 454 && this.type <= 459 || this.type >= 621 && this.type <= 623) { if ((double) this.velocity.X < 0.0) this.spriteDirection = 1; else if ((double) this.velocity.X > 0.0) this.spriteDirection = -1; } if (this.type == 414) { if (this.justHit) this.localAI[3] = 3f; if ((double) this.localAI[2] > 0.0) { this.localAI[2] -= 16f; if ((double) this.localAI[2] == 0.0) this.localAI[2] = (float) sbyte.MinValue; } else if ((double) this.localAI[2] < 0.0) this.localAI[2] += 16f; else if ((double) this.localAI[3] > 0.0) { this.localAI[2] = 128f; --this.localAI[3]; } } if (this.type == 412) { this.position = this.position + this.netOffset; Vector2 vector2_1 = this.Center + (this.rotation - 1.570796f).ToRotationVector2() * 8f; Vector2 vector2_2 = this.rotation.ToRotationVector2() * 16f; Dust dust1 = Main.dust[Dust.NewDust(vector2_1 + vector2_2, 0, 0, 6, this.velocity.X, this.velocity.Y, 100, Color.Transparent, (float) (1.0 + (double) Main.rand.NextFloat() * 3.0))]; dust1.noGravity = true; dust1.noLight = true; dust1.position -= new Vector2(4f); dust1.fadeIn = 1f; dust1.velocity = Vector2.Zero; Dust dust2 = Main.dust[Dust.NewDust(vector2_1 - vector2_2, 0, 0, 6, this.velocity.X, this.velocity.Y, 100, Color.Transparent, (float) (1.0 + (double) Main.rand.NextFloat() * 3.0))]; dust2.noGravity = true; dust2.noLight = true; dust2.position -= new Vector2(4f); dust2.fadeIn = 1f; dust2.velocity = Vector2.Zero; this.position = this.position - this.netOffset; } float num15 = 8f; float num16 = 0.07f; if (this.type == 95) { num15 = 5.5f; num16 = 0.045f; } if (this.type == 10) { num15 = 6f; num16 = 0.05f; } if (this.type == 513) { num15 = 7f; num16 = 0.1f; } if (this.type == 13) { num15 = 10f; num16 = 0.07f; if (Main.expertMode) { num15 = 12f; num16 = 0.15f; } if (Main.getGoodWorld) { num15 += 4f; num16 += 0.05f; } } if (this.type == 510) { if (!Main.player[this.target].dead && Main.player[this.target].ZoneSandstorm) { num15 = 16f; num16 = 0.35f; } else { num15 = 10f; num16 = 0.25f; } } if (this.type == 87) { num15 = 11f; num16 = 0.25f; } if (this.type == 621) { num15 = 15f; num16 = 0.45f; } if (this.type == 375) { num15 = 6f; num16 = 0.15f; } if (this.type == 454) { num15 = 20f; num16 = 0.55f; } if (this.type == 402) { num15 = 6f; num16 = 0.2f; } if (this.type == 117 && Main.wofNPCIndex >= 0) { double num17; if ((num17 = (double) ((float) Main.npc[Main.wofNPCIndex].life / (float) Main.npc[Main.wofNPCIndex].lifeMax)) < 0.5) { ++num15; num16 += 0.1f; } if (num17 < 0.25) { ++num15; num16 += 0.1f; } if (num17 < 0.1) { num15 += 2f; num16 += 0.1f; } } Vector2 vector2_3 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num18 = Main.player[this.target].position.X + (float) (Main.player[this.target].width / 2); float num19 = Main.player[this.target].position.Y + (float) (Main.player[this.target].height / 2); if (this.type == 412) { num15 = 10f; num16 = 0.3f; int num20 = -1; int num21 = (int) ((double) Main.player[this.target].Center.X / 16.0); int num22 = (int) ((double) Main.player[this.target].Center.Y / 16.0); for (int i = num21 - 2; i <= num21 + 2; ++i) { for (int j = num22; j <= num22 + 15; ++j) { if (WorldGen.SolidTile2(i, j)) { num20 = j; break; } } if (num20 > 0) break; } if (num20 > 0) { num20 *= 16; float num23 = (float) (num20 - 800); if ((double) Main.player[this.target].position.Y > (double) num23) { num19 = num23; if ((double) Math.Abs(this.Center.X - Main.player[this.target].Center.X) < 500.0) num18 = (double) this.velocity.X <= 0.0 ? Main.player[this.target].Center.X - 600f : Main.player[this.target].Center.X + 600f; } } else { num15 = 14f; num16 = 0.5f; } float num24 = num15 * 1.3f; float num25 = num15 * 0.7f; float num26 = this.velocity.Length(); if ((double) num26 > 0.0) { if ((double) num26 > (double) num24) { this.velocity.Normalize(); this.velocity = this.velocity * num24; } else if ((double) num26 < (double) num25) { this.velocity.Normalize(); this.velocity = this.velocity * num25; } } if (num20 > 0) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == this.type && index != this.whoAmI) { Vector2 vector2_4 = Main.npc[index].Center - this.Center; if ((double) vector2_4.Length() < 400.0) { vector2_4.Normalize(); Vector2 vector2_5 = vector2_4 * 1000f; num18 -= vector2_5.X; num19 -= vector2_5.Y; } } } } else { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == this.type && index != this.whoAmI) { Vector2 vector2_6 = Main.npc[index].Center - this.Center; if ((double) vector2_6.Length() < 60.0) { vector2_6.Normalize(); Vector2 vector2_7 = vector2_6 * 200f; num18 -= vector2_7.X; num19 -= vector2_7.Y; } } } } } float num27 = (float) ((int) ((double) num18 / 16.0) * 16); float num28 = (float) ((int) ((double) num19 / 16.0) * 16); vector2_3.X = (float) ((int) ((double) vector2_3.X / 16.0) * 16); vector2_3.Y = (float) ((int) ((double) vector2_3.Y / 16.0) * 16); float num29 = num27 - vector2_3.X; float num30 = num28 - vector2_3.Y; if (this.type == 375) { num29 *= -1f; num30 *= -1f; } float num31 = (float) Math.Sqrt((double) num29 * (double) num29 + (double) num30 * (double) num30); if ((double) this.ai[1] > 0.0) { if ((double) this.ai[1] < (double) Main.npc.Length) { try { vector2_3 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); num29 = Main.npc[(int) this.ai[1]].position.X + (float) (Main.npc[(int) this.ai[1]].width / 2) - vector2_3.X; num30 = Main.npc[(int) this.ai[1]].position.Y + (float) (Main.npc[(int) this.ai[1]].height / 2) - vector2_3.Y; } catch { } this.rotation = (float) Math.Atan2((double) num30, (double) num29) + 1.57f; float num32 = (float) Math.Sqrt((double) num29 * (double) num29 + (double) num30 * (double) num30); int num33 = this.width; if (this.type >= 87 && this.type <= 92) num33 = 42; if (this.type >= 454 && this.type <= 459) num33 = 36; if (this.type >= 13 && this.type <= 15) num33 = (int) ((double) num33 * (double) this.scale); if (this.type >= 513 && this.type <= 515) num33 -= 6; if (this.type >= 412 && this.type <= 414) num33 += 6; if (this.type >= 621 && this.type <= 623) num33 = 24; if (Main.getGoodWorld && this.type >= 13 && this.type <= 15) num33 = 62; float num34 = (num32 - (float) num33) / num32; float num35 = num29 * num34; float num36 = num30 * num34; this.velocity = Vector2.Zero; this.position.X += num35; this.position.Y += num36; if (this.type >= 87 && this.type <= 92) { if ((double) num35 < 0.0) this.spriteDirection = 1; else if ((double) num35 > 0.0) this.spriteDirection = -1; } if (this.type >= 454 && this.type <= 459) { if ((double) num35 < 0.0) this.spriteDirection = 1; else if ((double) num35 > 0.0) this.spriteDirection = -1; } if (this.type >= 621 && this.type <= 623) { if ((double) num35 < 0.0) { this.spriteDirection = 1; goto label_422; } else if ((double) num35 > 0.0) { this.spriteDirection = -1; goto label_422; } else goto label_422; } else goto label_422; } } if (!flag2) { this.TargetClosest(); this.velocity.Y += 0.11f; if ((double) this.velocity.Y > (double) num15) this.velocity.Y = num15; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num15 * 0.4) { if ((double) this.velocity.X < 0.0) this.velocity.X -= num16 * 1.1f; else this.velocity.X += num16 * 1.1f; } else if ((double) this.velocity.Y == (double) num15) { if ((double) this.velocity.X < (double) num29) this.velocity.X += num16; else if ((double) this.velocity.X > (double) num29) this.velocity.X -= num16; } else if ((double) this.velocity.Y > 4.0) { if ((double) this.velocity.X < 0.0) this.velocity.X += num16 * 0.9f; else this.velocity.X -= num16 * 0.9f; } } else { if (this.type != 621 && this.type != 87 && this.type != 117 && this.type != 454 && this.type != 412 && this.soundDelay == 0) { float num37 = num31 / 40f; if ((double) num37 < 10.0) num37 = 10f; if ((double) num37 > 20.0) num37 = 20f; this.soundDelay = (int) num37; SoundEngine.PlaySound(15, (int) this.position.X, (int) this.position.Y); } float num38 = (float) Math.Sqrt((double) num29 * (double) num29 + (double) num30 * (double) num30); float num39 = Math.Abs(num29); float num40 = Math.Abs(num30); float num41 = num15 / num38; float num42 = num29 * num41; float num43 = num30 * num41; bool flag4 = false; if ((this.type == 7 || this.type == 13) && (!Main.player[this.target].ZoneCorrupt && !Main.player[this.target].ZoneCrimson || Main.player[this.target].dead)) flag4 = true; if (this.type == 513 && (double) Main.player[this.target].position.Y < Main.worldSurface * 16.0 && !Main.player[this.target].ZoneSandstorm && !Main.player[this.target].ZoneUndergroundDesert || Main.player[this.target].dead) flag4 = true; if (this.type == 510 && (double) Main.player[this.target].position.Y < Main.worldSurface * 16.0 && !Main.player[this.target].ZoneSandstorm && !Main.player[this.target].ZoneUndergroundDesert || Main.player[this.target].dead) flag4 = true; if (flag4) { bool flag5 = true; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && !Main.player[index].dead && Main.player[index].ZoneCorrupt) flag5 = false; } if (flag5) { if (Main.netMode != 1 && (double) this.position.Y / 16.0 > (Main.rockLayer + (double) Main.maxTilesY) / 2.0) { this.active = false; int num44; for (int number = (int) this.ai[0]; number > 0 && number < 200 && Main.npc[number].active && Main.npc[number].aiStyle == this.aiStyle; number = num44) { num44 = (int) Main.npc[number].ai[0]; Main.npc[number].active = false; this.life = 0; if (Main.netMode == 2) NetMessage.SendData(23, number: number); } if (Main.netMode == 2) NetMessage.SendData(23, number: this.whoAmI); } num42 = 0.0f; num43 = num15; } } bool flag6 = false; if (this.type == 87) { if (((double) this.velocity.X > 0.0 && (double) num42 < 0.0 || (double) this.velocity.X < 0.0 && (double) num42 > 0.0 || (double) this.velocity.Y > 0.0 && (double) num43 < 0.0 || (double) this.velocity.Y < 0.0 && (double) num43 > 0.0) && (double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) > (double) num16 / 2.0 && (double) num38 < 300.0) { flag6 = true; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num15) this.velocity = this.velocity * 1.1f; } if ((double) this.position.Y > (double) Main.player[this.target].position.Y || (double) Main.player[this.target].position.Y / 16.0 > Main.worldSurface || Main.player[this.target].dead) { flag6 = true; if ((double) Math.Abs(this.velocity.X) < (double) num15 / 2.0) { if ((double) this.velocity.X == 0.0) this.velocity.X -= (float) this.direction; this.velocity.X *= 1.1f; } else if ((double) this.velocity.Y > -(double) num15) this.velocity.Y -= num16; } } if (this.type == 454 || this.type == 621) { float num45 = 300f; if (this.type == 621) num45 = 120f; if (((double) this.velocity.X > 0.0 && (double) num42 < 0.0 || (double) this.velocity.X < 0.0 && (double) num42 > 0.0 || (double) this.velocity.Y > 0.0 && (double) num43 < 0.0 || (double) this.velocity.Y < 0.0 && (double) num43 > 0.0) && (double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) > (double) num16 / 2.0 && (double) num38 < (double) num45) { flag6 = true; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num15) this.velocity = this.velocity * 1.1f; } if ((double) this.position.Y > (double) Main.player[this.target].position.Y || Main.player[this.target].dead) { flag6 = true; if ((double) Math.Abs(this.velocity.X) < (double) num15 / 2.0) { if ((double) this.velocity.X == 0.0) this.velocity.X -= (float) this.direction; this.velocity.X *= 1.1f; } else if ((double) this.velocity.Y > -(double) num15) this.velocity.Y -= num16; } } if (!flag6) { if ((double) this.velocity.X > 0.0 && (double) num42 > 0.0 || (double) this.velocity.X < 0.0 && (double) num42 < 0.0 || (double) this.velocity.Y > 0.0 && (double) num43 > 0.0 || (double) this.velocity.Y < 0.0 && (double) num43 < 0.0) { if ((double) this.velocity.X < (double) num42) this.velocity.X += num16; else if ((double) this.velocity.X > (double) num42) this.velocity.X -= num16; if ((double) this.velocity.Y < (double) num43) this.velocity.Y += num16; else if ((double) this.velocity.Y > (double) num43) this.velocity.Y -= num16; if ((double) Math.Abs(num43) < (double) num15 * 0.2 && ((double) this.velocity.X > 0.0 && (double) num42 < 0.0 || (double) this.velocity.X < 0.0 && (double) num42 > 0.0)) { if ((double) this.velocity.Y > 0.0) this.velocity.Y += num16 * 2f; else this.velocity.Y -= num16 * 2f; } if ((double) Math.Abs(num42) < (double) num15 * 0.2 && ((double) this.velocity.Y > 0.0 && (double) num43 < 0.0 || (double) this.velocity.Y < 0.0 && (double) num43 > 0.0)) { if ((double) this.velocity.X > 0.0) this.velocity.X += num16 * 2f; else this.velocity.X -= num16 * 2f; } } else if ((double) num39 > (double) num40) { if ((double) this.velocity.X < (double) num42) this.velocity.X += num16 * 1.1f; else if ((double) this.velocity.X > (double) num42) this.velocity.X -= num16 * 1.1f; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num15 * 0.5) { if ((double) this.velocity.Y > 0.0) this.velocity.Y += num16; else this.velocity.Y -= num16; } } else { if ((double) this.velocity.Y < (double) num43) this.velocity.Y += num16 * 1.1f; else if ((double) this.velocity.Y > (double) num43) this.velocity.Y -= num16 * 1.1f; if ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) < (double) num15 * 0.5) { if ((double) this.velocity.X > 0.0) this.velocity.X += num16; else this.velocity.X -= num16; } } } } this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 1.57f; if (this.type == 7 || this.type == 10 || this.type == 13 || this.type == 39 || this.type == 95 || this.type == 98 || this.type == 117 || this.type == 510 || this.type == 513 || this.type == 621) { if (flag2) { if ((double) this.localAI[0] != 1.0) this.netUpdate = true; this.localAI[0] = 1f; } else { if ((double) this.localAI[0] != 0.0) this.netUpdate = true; this.localAI[0] = 0.0f; } if (((double) this.velocity.X > 0.0 && (double) this.oldVelocity.X < 0.0 || (double) this.velocity.X < 0.0 && (double) this.oldVelocity.X > 0.0 || (double) this.velocity.Y > 0.0 && (double) this.oldVelocity.Y < 0.0 || (double) this.velocity.Y < 0.0 && (double) this.oldVelocity.Y > 0.0) && !this.justHit) this.netUpdate = true; } if (this.type == 454) { float num46 = Vector2.Distance(Main.player[this.target].Center, this.Center); int num47 = 0; if ((double) Vector2.Normalize(Main.player[this.target].Center - this.Center).ToRotation().AngleTowards(this.velocity.ToRotation(), 1.570796f) == (double) this.velocity.ToRotation() && (double) num46 < 350.0) num47 = 4; if ((double) num47 > this.frameCounter) ++this.frameCounter; if ((double) num47 < this.frameCounter) --this.frameCounter; if (this.frameCounter < 0.0) this.frameCounter = 0.0; if (this.frameCounter > 4.0) this.frameCounter = 4.0; } label_422: if (this.type < 13 || this.type > 15 || this.type != 13 && (this.type == 13 || Main.npc[(int) this.ai[1]].alpha >= 85)) return; if (this.alpha > 0 && this.life > 0) { for (int index15 = 0; index15 < 2; ++index15) { int index16 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 14, Alpha: 100, Scale: 2f); Main.dust[index16].noGravity = true; Main.dust[index16].noLight = true; } } if ((double) (this.position - this.oldPosition).Length() <= 2.0) return; this.alpha -= 42; if (this.alpha >= 0) return; this.alpha = 0; } private void AI_002_FloatingEye() { if ((this.type == 170 || this.type == 171 || this.type == 180) && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 9); this.noGravity = true; if (!this.noTileCollide) { if (this.collideX) { this.velocity.X = this.oldVelocity.X * -0.5f; if (this.direction == -1 && (double) this.velocity.X > 0.0 && (double) this.velocity.X < 2.0) this.velocity.X = 2f; if (this.direction == 1 && (double) this.velocity.X < 0.0 && (double) this.velocity.X > -2.0) this.velocity.X = -2f; } if (this.collideY) { this.velocity.Y = this.oldVelocity.Y * -0.5f; if ((double) this.velocity.Y > 0.0 && (double) this.velocity.Y < 1.0) this.velocity.Y = 1f; if ((double) this.velocity.Y < 0.0 && (double) this.velocity.Y > -1.0) this.velocity.Y = -1f; } } if (NPC.DespawnEncouragement_AIStyle2_FloatingEye_IsDiscouraged(this.type, this.position, this.target)) { this.EncourageDespawn(10); this.directionY = -1; if ((double) this.velocity.Y > 0.0) this.direction = 1; this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; } else this.TargetClosest(); if (this.type == 170 || this.type == 171 || this.type == 180) { if (Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { if ((double) this.ai[1] > 0.0 && !Collision.SolidCollision(this.position, this.width, this.height)) { this.ai[1] = 0.0f; this.ai[0] = 0.0f; this.netUpdate = true; } } else if ((double) this.ai[1] == 0.0) ++this.ai[0]; if ((double) this.ai[0] >= 300.0) { this.ai[1] = 1f; this.ai[0] = 0.0f; this.netUpdate = true; } if ((double) this.ai[1] == 0.0) { this.alpha = 0; this.noTileCollide = false; } else { this.wet = false; this.alpha = 200; this.noTileCollide = true; } this.rotation = this.velocity.Y * 0.1f * (float) this.direction; this.TargetClosest(); if (this.direction == -1 && (double) this.velocity.X > -4.0 && (double) this.position.X > (double) Main.player[this.target].position.X + (double) Main.player[this.target].width) { this.velocity.X -= 0.08f; if ((double) this.velocity.X > 4.0) this.velocity.X -= 0.04f; else if ((double) this.velocity.X > 0.0) this.velocity.X -= 0.2f; if ((double) this.velocity.X < -4.0) this.velocity.X = -4f; } else if (this.direction == 1 && (double) this.velocity.X < 4.0 && (double) this.position.X + (double) this.width < (double) Main.player[this.target].position.X) { this.velocity.X += 0.08f; if ((double) this.velocity.X < -4.0) this.velocity.X += 0.04f; else if ((double) this.velocity.X < 0.0) this.velocity.X += 0.2f; if ((double) this.velocity.X > 4.0) this.velocity.X = 4f; } if (this.directionY == -1 && (double) this.velocity.Y > -2.5 && (double) this.position.Y > (double) Main.player[this.target].position.Y + (double) Main.player[this.target].height) { this.velocity.Y -= 0.1f; if ((double) this.velocity.Y > 2.5) this.velocity.Y -= 0.05f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y -= 0.15f; if ((double) this.velocity.Y < -2.5) this.velocity.Y = -2.5f; } else if (this.directionY == 1 && (double) this.velocity.Y < 2.5 && (double) this.position.Y + (double) this.height < (double) Main.player[this.target].position.Y) { this.velocity.Y += 0.1f; if ((double) this.velocity.Y < -2.5) this.velocity.Y += 0.05f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y += 0.15f; if ((double) this.velocity.Y > 2.5) this.velocity.Y = 2.5f; } } else if (this.type == 116) { this.TargetClosest(); Lighting.AddLight((int) ((double) this.position.X + (double) (this.width / 2)) / 16, (int) ((double) this.position.Y + (double) (this.height / 2)) / 16, 0.3f, 0.2f, 0.1f); if (this.direction == -1 && (double) this.velocity.X > -6.0) { this.velocity.X -= 0.1f; if ((double) this.velocity.X > 6.0) this.velocity.X -= 0.1f; else if ((double) this.velocity.X > 0.0) this.velocity.X -= 0.2f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; } else if (this.direction == 1 && (double) this.velocity.X < 6.0) { this.velocity.X += 0.1f; if ((double) this.velocity.X < -6.0) this.velocity.X += 0.1f; else if ((double) this.velocity.X < 0.0) this.velocity.X += 0.2f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; } if (this.directionY == -1 && (double) this.velocity.Y > -2.5) { this.velocity.Y -= 0.04f; if ((double) this.velocity.Y > 2.5) this.velocity.Y -= 0.05f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y -= 0.15f; if ((double) this.velocity.Y < -2.5) this.velocity.Y = -2.5f; } else if (this.directionY == 1 && (double) this.velocity.Y < 1.5) { this.velocity.Y += 0.04f; if ((double) this.velocity.Y < -2.5) this.velocity.Y += 0.05f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y += 0.15f; if ((double) this.velocity.Y > 2.5) this.velocity.Y = 2.5f; } if (Main.rand.Next(40) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y + (float) this.height * 0.25f), this.width, (int) ((double) this.height * 0.5), 5, this.velocity.X, 2f); Main.dust[index].velocity.X *= 0.5f; Main.dust[index].velocity.Y *= 0.1f; this.position = this.position - this.netOffset; } } else if (this.type == 133) { if ((double) this.life < (double) this.lifeMax * 0.5) { if (this.direction == -1 && (double) this.velocity.X > -6.0) { this.velocity.X -= 0.1f; if ((double) this.velocity.X > 6.0) this.velocity.X -= 0.1f; else if ((double) this.velocity.X > 0.0) this.velocity.X += 0.05f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; } else if (this.direction == 1 && (double) this.velocity.X < 6.0) { this.velocity.X += 0.1f; if ((double) this.velocity.X < -6.0) this.velocity.X += 0.1f; else if ((double) this.velocity.X < 0.0) this.velocity.X -= 0.05f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; } if (this.directionY == -1 && (double) this.velocity.Y > -4.0) { this.velocity.Y -= 0.1f; if ((double) this.velocity.Y > 4.0) this.velocity.Y -= 0.1f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y += 0.05f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; } else if (this.directionY == 1 && (double) this.velocity.Y < 4.0) { this.velocity.Y += 0.1f; if ((double) this.velocity.Y < -4.0) this.velocity.Y += 0.1f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y -= 0.05f; if ((double) this.velocity.Y > 4.0) this.velocity.Y = 4f; } } else { if (this.direction == -1 && (double) this.velocity.X > -4.0) { this.velocity.X -= 0.1f; if ((double) this.velocity.X > 4.0) this.velocity.X -= 0.1f; else if ((double) this.velocity.X > 0.0) this.velocity.X += 0.05f; if ((double) this.velocity.X < -4.0) this.velocity.X = -4f; } else if (this.direction == 1 && (double) this.velocity.X < 4.0) { this.velocity.X += 0.1f; if ((double) this.velocity.X < -4.0) this.velocity.X += 0.1f; else if ((double) this.velocity.X < 0.0) this.velocity.X -= 0.05f; if ((double) this.velocity.X > 4.0) this.velocity.X = 4f; } if (this.directionY == -1 && (double) this.velocity.Y > -1.5) { this.velocity.Y -= 0.04f; if ((double) this.velocity.Y > 1.5) this.velocity.Y -= 0.05f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y += 0.03f; if ((double) this.velocity.Y < -1.5) this.velocity.Y = -1.5f; } else if (this.directionY == 1 && (double) this.velocity.Y < 1.5) { this.velocity.Y += 0.04f; if ((double) this.velocity.Y < -1.5) this.velocity.Y += 0.05f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y -= 0.03f; if ((double) this.velocity.Y > 1.5) this.velocity.Y = 1.5f; } } } else { float num1 = 4f; float num2 = 1.5f; float num3 = num1 * (float) (1.0 + (1.0 - (double) this.scale)); float num4 = num2 * (float) (1.0 + (1.0 - (double) this.scale)); if (this.direction == -1 && (double) this.velocity.X > -(double) num3) { this.velocity.X -= 0.1f; if ((double) this.velocity.X > (double) num3) this.velocity.X -= 0.1f; else if ((double) this.velocity.X > 0.0) this.velocity.X += 0.05f; if ((double) this.velocity.X < -(double) num3) this.velocity.X = -num3; } else if (this.direction == 1 && (double) this.velocity.X < (double) num3) { this.velocity.X += 0.1f; if ((double) this.velocity.X < -(double) num3) this.velocity.X += 0.1f; else if ((double) this.velocity.X < 0.0) this.velocity.X -= 0.05f; if ((double) this.velocity.X > (double) num3) this.velocity.X = num3; } if (this.directionY == -1 && (double) this.velocity.Y > -(double) num4) { this.velocity.Y -= 0.04f; if ((double) this.velocity.Y > (double) num4) this.velocity.Y -= 0.05f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y += 0.03f; if ((double) this.velocity.Y < -(double) num4) this.velocity.Y = -num4; } else if (this.directionY == 1 && (double) this.velocity.Y < (double) num4) { this.velocity.Y += 0.04f; if ((double) this.velocity.Y < -(double) num4) this.velocity.Y += 0.05f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y -= 0.03f; if ((double) this.velocity.Y > (double) num4) this.velocity.Y = num4; } } if ((this.type == 2 || this.type == 133 || this.type == 190 || this.type == 191 || this.type == 192 || this.type == 193 || this.type == 194) && Main.rand.Next(40) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y + (float) this.height * 0.25f), this.width, (int) ((double) this.height * 0.5), 5, this.velocity.X, 2f); Main.dust[index].velocity.X *= 0.5f; Main.dust[index].velocity.Y *= 0.1f; this.position = this.position - this.netOffset; } if (!this.wet || this.type == 170 || this.type == 171 || this.type == 172) return; if ((double) this.velocity.Y > 0.0) this.velocity.Y *= 0.95f; this.velocity.Y -= 0.5f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; this.TargetClosest(); } public static bool DespawnEncouragement_AIStyle2_FloatingEye_IsDiscouraged( int npcID, Vector2 npcPosition, int target = 255) { if (Main.player[target].ZoneGraveyard || !Main.dayTime || (double) npcPosition.Y > Main.worldSurface * 16.0) return false; return npcID == 2 || npcID == 133 || npcID == 190 || npcID == 191 || npcID == 192 || npcID == 193 || npcID == 194 || npcID == 317 || npcID == 318; } private bool AI_007_TownEntities_IsInAGoodRestingSpot( int tileX, int tileY, int idealRestX, int idealRestY) { return !Main.dayTime && (double) this.ai[0] == 5.0 ? Math.Abs(tileX - idealRestX) < 7 && Math.Abs(tileY - idealRestY) < 7 : (this.type != 361 && this.type != 445 || !this.wet) && tileX == idealRestX && tileY == idealRestY; } private void AI_007_FindGoodRestingSpot( int myTileX, int myTileY, out int floorX, out int floorY) { floorX = this.homeTileX; floorY = this.homeTileY; if (floorX == -1 || floorY == -1) return; while (!WorldGen.SolidOrSlopedTile(floorX, floorY) && floorY < Main.maxTilesY - 20) ++floorY; if (Main.dayTime || (double) this.ai[0] == 5.0 && Math.Abs(myTileX - floorX) < 7 && Math.Abs(myTileY - floorY) < 7) return; Point point1 = new Point(floorX, floorY); Point point2 = new Point(-1, -1); int num1 = -1; int num2 = 7; int num3 = 6; int num4 = 2; int num5 = 1; int num6 = 2; for (int index1 = point1.X - num2; index1 <= point1.X + num2; index1 += num5) { for (int index2 = point1.Y + num4; index2 >= point1.Y - num3; index2 -= num6) { Tile tile = Main.tile[index1, index2]; if (tile != null && tile.active() && (!TileID.Sets.CanBeSatOnForNPCs[(int) tile.type] || (int) tile.frameY % 40 != 0 || index2 + 1 <= point1.Y + num4)) { int num7 = Math.Abs(index1 - point1.X) + Math.Abs(index2 - point1.Y); if (num1 == -1 || num7 < num1) { num1 = num7; point2.X = index1; point2.Y = index2; } } } } if (num1 == -1) return; Tile tile1 = Main.tile[point2.X, point2.Y]; if (tile1.type == (ushort) 497 || tile1.type == (ushort) 15) { if ((int) tile1.frameY % 40 != 0) --point2.Y; point2.Y += 2; } floorX = point2.X; floorY = point2.Y; } private void AI_007_TryForcingSitting(int homeFloorX, int homeFloorY) { Tile tile = Main.tile[homeFloorX, homeFloorY - 1]; bool flag = this.type != 638 && this.type != 656 && (double) this.ai[0] != 5.0; if (flag) flag = ((flag ? 1 : 0) & (tile == null || !tile.active() ? 0 : (tile.type == (ushort) 15 ? 1 : (tile.type == (ushort) 497 ? 1 : 0)))) != 0; if (flag) flag = ((flag ? 1 : 0) & (tile.type != (ushort) 15 ? 1 : (tile.frameY != (short) 1080 ? 1 : 0))) != 0; if (!flag) return; this.ai[0] = 5f; this.ai[1] = (float) (900 + Main.rand.Next(10800)); this.direction = tile.frameX == (short) 0 ? -1 : 1; this.Bottom = new Vector2((float) (homeFloorX * 16 + 8 + 2 * this.direction), (float) (homeFloorY * 16)); this.velocity = Vector2.Zero; this.localAI[3] = 0.0f; this.netUpdate = true; } private void AI_007_TownEntities() { int maxValue1 = 300; if (this.type == 638 || this.type == 656) maxValue1 = 0; bool flag1 = Main.raining; if (!Main.dayTime) flag1 = true; if (Main.eclipse) flag1 = true; if (Main.slimeRain) flag1 = true; float num1 = 1f; this.defense = !Main.masterMode ? (!Main.expertMode ? (this.dryadWard ? this.defDefense + 6 : this.defDefense) : (this.dryadWard ? this.defDefense + 10 : this.defDefense)) : (this.dryadWard ? this.defDefense + 14 : this.defDefense); if (this.isLikeATownNPC) { if (NPC.combatBookWasUsed) { num1 += 0.2f; this.defense += 6; } if (NPC.downedBoss1) { num1 += 0.1f; this.defense += 3; } if (NPC.downedBoss2) { num1 += 0.1f; this.defense += 3; } if (NPC.downedBoss3) { num1 += 0.1f; this.defense += 3; } if (NPC.downedQueenBee) { num1 += 0.1f; this.defense += 3; } if (Main.hardMode) { num1 += 0.4f; this.defense += 12; } if (NPC.downedQueenSlime) { num1 += 0.15f; this.defense += 6; } if (NPC.downedMechBoss1) { num1 += 0.15f; this.defense += 6; } if (NPC.downedMechBoss2) { num1 += 0.15f; this.defense += 6; } if (NPC.downedMechBoss3) { num1 += 0.15f; this.defense += 6; } if (NPC.downedPlantBoss) { num1 += 0.15f; this.defense += 8; } if (NPC.downedQueenSlime) { num1 += 0.15f; this.defense += 8; } if (NPC.downedGolemBoss) { num1 += 0.15f; this.defense += 8; } if (NPC.downedAncientCultist) { num1 += 0.15f; this.defense += 8; } } if (this.type == 142 && Main.netMode != 1 && !Main.xMas) { this.StrikeNPCNoInteraction(9999, 0.0f, 0); if (Main.netMode == 2) NetMessage.SendData(28, number: this.whoAmI, number2: 9999f); } if ((this.type == 148 || this.type == 149) && (double) this.localAI[0] == 0.0) this.localAI[0] = (float) Main.rand.Next(1, 5); if (this.type == 124) { int projectileSearch = NPC.lazyNPCOwnedProjectileSearchArray[this.whoAmI]; bool flag2 = false; if (Main.projectile.IndexInRange(projectileSearch)) { Projectile projectile = Main.projectile[projectileSearch]; if (projectile.active && projectile.type == 582 && (double) projectile.ai[1] == (double) this.whoAmI) flag2 = true; } this.localAI[0] = (float) flag2.ToInt(); } if ((this.type == 362 || this.type == 364 || this.type == 602 || this.type == 608) && Main.netMode != 1 && ((double) this.velocity.Y > 4.0 || (double) this.velocity.Y < -4.0 || this.wet)) { int direction = this.direction; this.Transform(this.type + 1); this.TargetClosest(); this.direction = direction; this.netUpdate = true; } else { switch (this.type) { case 107: NPC.savedGoblin = true; break; case 108: NPC.savedWizard = true; break; case 124: NPC.savedMech = true; break; case 353: NPC.savedStylist = true; break; case 369: NPC.savedAngler = true; break; case 441: NPC.savedTaxCollector = true; break; case 550: NPC.savedBartender = true; break; case 588: NPC.savedGolfer = true; break; } if (this.type >= 0 && this.type < 663 && NPCID.Sets.TownCritter[this.type] && this.target == (int) byte.MaxValue) { this.TargetClosest(); if ((double) this.position.X < (double) Main.player[this.target].position.X) { this.direction = 1; this.spriteDirection = this.direction; } if ((double) this.position.X > (double) Main.player[this.target].position.X) { this.direction = -1; this.spriteDirection = this.direction; } if (this.homeTileX == -1) this.homeTileX = (int) (((double) this.position.X + (double) (this.width / 2)) / 16.0); } else if (this.homeTileX == -1 && this.homeTileY == -1 && (double) this.velocity.Y == 0.0) { this.homeTileX = (int) this.Center.X / 16; this.homeTileY = (int) ((double) this.position.Y + (double) this.height + 4.0) / 16; } bool flag3 = false; int index1 = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; int index2 = (int) ((double) this.position.Y + (double) this.height + 1.0) / 16; int floorX; int floorY; this.AI_007_FindGoodRestingSpot(index1, index2, out floorX, out floorY); if (this.type == 441) NPC.taxCollector = true; this.directionY = -1; if (this.direction == 0) this.direction = 1; for (int index3 = 0; index3 < (int) byte.MaxValue; ++index3) { if (Main.player[index3].active && Main.player[index3].talkNPC == this.whoAmI) { flag3 = true; if ((double) this.ai[0] != 0.0) this.netUpdate = true; this.ai[0] = 0.0f; this.ai[1] = 300f; this.localAI[3] = 100f; if ((double) Main.player[index3].position.X + (double) (Main.player[index3].width / 2) < (double) this.position.X + (double) (this.width / 2)) this.direction = -1; else this.direction = 1; } } if ((double) this.ai[3] == 1.0) { this.life = -1; this.HitEffect(); this.active = false; this.netUpdate = true; if (this.type != 37) return; SoundEngine.PlaySound(15, (int) this.position.X, (int) this.position.Y, 0); } else { if (this.type == 37 && Main.netMode != 1) { this.homeless = false; this.homeTileX = Main.dungeonX; this.homeTileY = Main.dungeonY; if (NPC.downedBoss3) { this.ai[3] = 1f; this.netUpdate = true; } } if (this.type == 368) { this.homeless = true; if (!Main.dayTime) { this.homeTileX = (int) ((double) this.Center.X / 16.0); this.homeTileY = (int) ((double) this.position.Y + (double) this.height + 2.0) / 16; if (!flag3 && (double) this.ai[0] == 0.0) { this.ai[0] = 1f; this.ai[1] = 200f; } flag1 = false; } } if (this.type == 369 && this.homeless && this.wet) { if ((double) this.Center.X / 16.0 < 380.0 || (double) this.Center.X / 16.0 > (double) (Main.maxTilesX - 380)) { this.homeTileX = Main.spawnTileX; this.homeTileY = Main.spawnTileY; this.ai[0] = 1f; this.ai[1] = 200f; } if ((double) this.position.X / 16.0 < 300.0) this.direction = 1; else if ((double) this.position.X / 16.0 > (double) (Main.maxTilesX - 300)) this.direction = -1; } if (!WorldGen.InWorld(index1, index2) || Main.tile[index1, index2] == null) return; if (!this.homeless && Main.netMode != 1 && this.townNPC && (flag1 || Main.tileDungeon[(int) Main.tile[index1, index2].type]) && !this.AI_007_TownEntities_IsInAGoodRestingSpot(index1, index2, floorX, floorY)) { bool flag4 = true; for (int index4 = 0; index4 < 2 && flag4; ++index4) { Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int) ((double) this.position.X + (double) (this.width / 2) - (double) (NPC.sWidth / 2) - (double) NPC.safeRangeX), (int) ((double) this.position.Y + (double) (this.height / 2) - (double) (NPC.sHeight / 2) - (double) NPC.safeRangeY), NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2); if (index4 == 1) rectangle = new Microsoft.Xna.Framework.Rectangle(floorX * 16 + 8 - NPC.sWidth / 2 - NPC.safeRangeX, floorY * 16 + 8 - NPC.sHeight / 2 - NPC.safeRangeY, NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2); for (int index5 = 0; index5 < (int) byte.MaxValue; ++index5) { if (Main.player[index5].active && new Microsoft.Xna.Framework.Rectangle((int) Main.player[index5].position.X, (int) Main.player[index5].position.Y, Main.player[index5].width, Main.player[index5].height).Intersects(rectangle)) { flag4 = false; break; } } } if (flag4) { if (this.type == 37 || !Collision.SolidTiles(floorX - 1, floorX + 1, floorY - 3, floorY - 1)) { this.velocity.X = 0.0f; this.velocity.Y = 0.0f; this.position.X = (float) (floorX * 16 + 8 - this.width / 2); this.position.Y = (float) (floorY * 16 - this.height) - 0.1f; this.netUpdate = true; this.AI_007_TryForcingSitting(floorX, floorY); } else { this.homeless = true; WorldGen.QuickFindHome(this.whoAmI); } } } bool flag5 = this.type == 300 || this.type == 447 || this.type == 610; bool flag6 = this.type == 616 || this.type == 617 || this.type == 625; bool flag7 = this.type == 361 || this.type == 445; bool canBreathUnderWater = flag6 | flag7; int num2 = NPCID.Sets.IsTownPet[this.type] ? 1 : 0; bool flag8 = flag6 | flag7; float num3 = 200f; if (NPCID.Sets.DangerDetectRange[this.type] != -1) num3 = (float) NPCID.Sets.DangerDetectRange[this.type]; bool flag9 = false; bool flag10 = false; float num4 = -1f; float num5 = -1f; int num6 = 0; int index6 = -1; int index7 = -1; if (!flag6 && Main.netMode != 1 && !flag3) { for (int index8 = 0; index8 < 200; ++index8) { if (Main.npc[index8].active && !Main.npc[index8].friendly && Main.npc[index8].damage > 0 && (double) Main.npc[index8].Distance(this.Center) < (double) num3 && (this.type != 453 || !NPCID.Sets.Skeletons[Main.npc[index8].type]) && (Main.npc[index8].noTileCollide || Collision.CanHit(this.Center, 0, 0, Main.npc[index8].Center, 0, 0))) { flag9 = true; float num7 = Main.npc[index8].Center.X - this.Center.X; if (this.type == 614) { if ((double) num7 < 0.0 && ((double) num4 == -1.0 || (double) num7 > (double) num4)) { num5 = num7; index7 = index8; } if ((double) num7 > 0.0 && ((double) num5 == -1.0 || (double) num7 < (double) num5)) { num4 = num7; index6 = index8; } } else { if ((double) num7 < 0.0 && ((double) num4 == -1.0 || (double) num7 > (double) num4)) { num4 = num7; index6 = index8; } if ((double) num7 > 0.0 && ((double) num5 == -1.0 || (double) num7 < (double) num5)) { num5 = num7; index7 = index8; } } } } if (flag9) { num6 = (double) num4 != -1.0 ? ((double) num5 != -1.0 ? ((double) num5 < -(double) num4).ToDirectionInt() : -1) : 1; float num8 = 0.0f; if ((double) num4 != -1.0) num8 = -num4; if ((double) num8 == 0.0 || (double) num5 < (double) num8 && (double) num5 > 0.0) num8 = num5; if ((double) this.ai[0] == 8.0) { if (this.direction == -num6) { this.ai[0] = 1f; this.ai[1] = (float) (300 + Main.rand.Next(300)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.netUpdate = true; } } else if ((double) this.ai[0] != 10.0 && (double) this.ai[0] != 12.0 && (double) this.ai[0] != 13.0 && (double) this.ai[0] != 14.0 && (double) this.ai[0] != 15.0) { if (NPCID.Sets.PrettySafe[this.type] != -1 && (double) NPCID.Sets.PrettySafe[this.type] < (double) num8) { flag9 = false; flag10 = NPCID.Sets.AttackType[this.type] > -1; } else if ((double) this.ai[0] != 1.0) { int tileX = (int) (((double) this.position.X + (double) (this.width / 2) + (double) (15 * this.direction)) / 16.0); int tileY = (int) (((double) this.position.Y + (double) this.height - 16.0) / 16.0); bool currentlyDrowning = this.wet && !canBreathUnderWater; bool avoidFalling; this.AI_007_TownEntities_GetWalkPrediction(index1, floorX, canBreathUnderWater, currentlyDrowning, tileX, tileY, out bool _, out avoidFalling); if (!avoidFalling) { if (((double) this.ai[0] == 3.0 || (double) this.ai[0] == 4.0 || (double) this.ai[0] == 16.0 ? 1 : ((double) this.ai[0] == 17.0 ? 1 : 0)) != 0) { NPC npc = Main.npc[(int) this.ai[2]]; if (npc.active) { npc.ai[0] = 1f; npc.ai[1] = (float) (120 + Main.rand.Next(120)); npc.ai[2] = 0.0f; npc.localAI[3] = 0.0f; npc.direction = -num6; npc.netUpdate = true; } } this.ai[0] = 1f; this.ai[1] = (float) (120 + Main.rand.Next(120)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = -num6; this.netUpdate = true; } } else if ((double) this.ai[0] == 1.0 && this.direction != -num6) { this.direction = -num6; this.netUpdate = true; } } } } if ((double) this.ai[0] == 0.0) { if ((double) this.localAI[3] > 0.0) --this.localAI[3]; int petIdleChance = 120; if (this.type == 638) petIdleChance = 60; if (flag7 && this.wet) { this.ai[0] = 1f; this.ai[1] = (float) (200 + Main.rand.Next(500, 700)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.netUpdate = true; } else if (flag1 && !flag3 && !NPCID.Sets.TownCritter[this.type]) { if (Main.netMode != 1) { if (index1 == floorX && index2 == floorY) { if ((double) this.velocity.X != 0.0) this.netUpdate = true; if ((double) this.velocity.X > 0.100000001490116) this.velocity.X -= 0.1f; else if ((double) this.velocity.X < -0.100000001490116) { this.velocity.X += 0.1f; } else { this.velocity.X = 0.0f; this.AI_007_TryForcingSitting(floorX, floorY); } if (NPCID.Sets.IsTownPet[this.type]) this.AI_007_AttemptToPlayIdleAnimationsForPets(petIdleChance * 4); } else { if (index1 > floorX) this.direction = -1; else this.direction = 1; this.ai[0] = 1f; this.ai[1] = (float) (200 + Main.rand.Next(200)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.netUpdate = true; } } } else { if (flag5) this.velocity.X *= 0.5f; if ((double) this.velocity.X > 0.100000001490116) this.velocity.X -= 0.1f; else if ((double) this.velocity.X < -0.100000001490116) this.velocity.X += 0.1f; else this.velocity.X = 0.0f; if (Main.netMode != 1) { if (!flag3 && NPCID.Sets.IsTownPet[this.type] && (double) this.ai[1] >= 100.0 && (double) this.ai[1] <= 150.0) this.AI_007_AttemptToPlayIdleAnimationsForPets(petIdleChance); if ((double) this.ai[1] > 0.0) --this.ai[1]; bool flag11 = true; int tileX = (int) (((double) this.position.X + (double) (this.width / 2) + (double) (15 * this.direction)) / 16.0); int tileY = (int) (((double) this.position.Y + (double) this.height - 16.0) / 16.0); bool currentlyDrowning = this.wet && !canBreathUnderWater; bool avoidFalling; this.AI_007_TownEntities_GetWalkPrediction(index1, floorX, canBreathUnderWater, currentlyDrowning, tileX, tileY, out bool _, out avoidFalling); if (avoidFalling) flag11 = false; if ((double) this.ai[1] <= 0.0) { if (flag11) { this.ai[0] = 1f; this.ai[1] = (float) (200 + Main.rand.Next(300)); this.ai[2] = 0.0f; if (NPCID.Sets.TownCritter[this.type]) this.ai[1] += (float) Main.rand.Next(200, 400); this.localAI[3] = 0.0f; this.netUpdate = true; } else { this.direction *= -1; this.ai[1] = (float) (60 + Main.rand.Next(120)); this.netUpdate = true; } } } } if (Main.netMode != 1 && (!flag1 || this.AI_007_TownEntities_IsInAGoodRestingSpot(index1, index2, floorX, floorY))) { if (index1 < floorX - 25 || index1 > floorX + 25) { if ((double) this.localAI[3] == 0.0) { if (index1 < floorX - 50 && this.direction == -1) { this.direction = 1; this.netUpdate = true; } else if (index1 > floorX + 50 && this.direction == 1) { this.direction = -1; this.netUpdate = true; } } } else if (Main.rand.Next(80) == 0 && (double) this.localAI[3] == 0.0) { this.localAI[3] = 200f; this.direction *= -1; this.netUpdate = true; } } } else if ((double) this.ai[0] == 1.0) { if (Main.netMode != 1 & flag1 && this.AI_007_TownEntities_IsInAGoodRestingSpot(index1, index2, floorX, floorY) && !NPCID.Sets.TownCritter[this.type]) { this.ai[0] = 0.0f; this.ai[1] = (float) (200 + Main.rand.Next(200)); this.localAI[3] = 60f; this.netUpdate = true; } else { bool currentlyDrowning = !canBreathUnderWater && Collision.DrownCollision(this.position, this.width, this.height, 1f, true); if (!currentlyDrowning) { if (Main.netMode != 1 && !this.homeless && !Main.tileDungeon[(int) Main.tile[index1, index2].type] && (index1 < floorX - 35 || index1 > floorX + 35)) { if ((double) this.position.X < (double) (floorX * 16) && this.direction == -1) this.ai[1] -= 5f; else if ((double) this.position.X > (double) (floorX * 16) && this.direction == 1) this.ai[1] -= 5f; } --this.ai[1]; } if ((double) this.ai[1] <= 0.0) { this.ai[0] = 0.0f; this.ai[1] = (float) (300 + Main.rand.Next(300)); this.ai[2] = 0.0f; if (NPCID.Sets.TownCritter[this.type]) this.ai[1] -= (float) Main.rand.Next(100); else this.ai[1] += (float) Main.rand.Next(900); this.localAI[3] = 60f; this.netUpdate = true; } if (this.closeDoor && (((double) this.position.X + (double) (this.width / 2)) / 16.0 > (double) (this.doorX + 2) || ((double) this.position.X + (double) (this.width / 2)) / 16.0 < (double) (this.doorX - 2))) { Tile tileSafely = Framing.GetTileSafely(this.doorX, this.doorY); if (tileSafely.type == (ushort) 11) { if (WorldGen.CloseDoor(this.doorX, this.doorY)) { this.closeDoor = false; NetMessage.SendData(19, number: 1, number2: ((float) this.doorX), number3: ((float) this.doorY), number4: ((float) this.direction)); } if (((double) this.position.X + (double) (this.width / 2)) / 16.0 > (double) (this.doorX + 4) || ((double) this.position.X + (double) (this.width / 2)) / 16.0 < (double) (this.doorX - 4) || ((double) this.position.Y + (double) (this.height / 2)) / 16.0 > (double) (this.doorY + 4) || ((double) this.position.Y + (double) (this.height / 2)) / 16.0 < (double) (this.doorY - 4)) this.closeDoor = false; } else if (tileSafely.type == (ushort) 389) { if (WorldGen.ShiftTallGate(this.doorX, this.doorY, true)) { this.closeDoor = false; NetMessage.SendData(19, number: 5, number2: ((float) this.doorX), number3: ((float) this.doorY)); } if (((double) this.position.X + (double) (this.width / 2)) / 16.0 > (double) (this.doorX + 4) || ((double) this.position.X + (double) (this.width / 2)) / 16.0 < (double) (this.doorX - 4) || ((double) this.position.Y + (double) (this.height / 2)) / 16.0 > (double) (this.doorY + 4) || ((double) this.position.Y + (double) (this.height / 2)) / 16.0 < (double) (this.doorY - 4)) this.closeDoor = false; } else this.closeDoor = false; } float num9 = 1f; float num10 = 0.07f; if (this.type == 614 & flag9) { num9 = 1.5f; num10 = 0.1f; } else if (this.type == 299 || this.type == 539 || this.type == 538 || this.type >= 639 && this.type <= 645) num9 = 1.5f; else if (flag6) { if (this.wet) { num10 = 1f; num9 = 2f; } else { num10 = 0.07f; num9 = 0.5f; } } if (this.type == 625) { if (this.wet) { num10 = 1f; num9 = 2.5f; } else { num10 = 0.07f; num9 = 0.2f; } } if (flag5) { num9 = 2f; num10 = 1f; } if (this.friendly && flag9 | currentlyDrowning) { num9 = 1.5f + (float) (1.0 - (double) this.life / (double) this.lifeMax) * 0.9f; num10 = 0.1f; } if (flag7 && this.wet) { if ((double) Math.Abs(this.velocity.X) < 0.0500000007450581 && (double) Math.Abs(this.velocity.Y) < 0.0500000007450581) this.velocity.X += num9 * 10f * (float) this.direction; else this.velocity.X *= 0.9f; } else if ((double) this.velocity.X < -(double) num9 || (double) this.velocity.X > (double) num9) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num9 && this.direction == 1) { this.velocity.X += num10; if ((double) this.velocity.X > (double) num9) this.velocity.X = num9; } else if ((double) this.velocity.X > -(double) num9 && this.direction == -1) { this.velocity.X -= num10; if ((double) this.velocity.X > (double) num9) this.velocity.X = num9; } bool holdsMatching = true; if ((double) (this.homeTileY * 16 - 32) > (double) this.position.Y) holdsMatching = false; if (!holdsMatching && (double) this.velocity.Y == 0.0) Collision.StepDown(ref this.position, ref this.velocity, this.width, this.height, ref this.stepSpeed, ref this.gfxOffY); if ((double) this.velocity.Y >= 0.0) Collision.StepUp(ref this.position, ref this.velocity, this.width, this.height, ref this.stepSpeed, ref this.gfxOffY, holdsMatching: holdsMatching, specialChecksMode: 1); if ((double) this.velocity.Y == 0.0) { int num11 = (int) (((double) this.position.X + (double) (this.width / 2) + (double) (15 * this.direction)) / 16.0); int num12 = (int) (((double) this.position.Y + (double) this.height - 16.0) / 16.0); bool keepwalking; bool avoidFalling; this.AI_007_TownEntities_GetWalkPrediction(index1, floorX, canBreathUnderWater, currentlyDrowning, num11, num12, out keepwalking, out avoidFalling); if (!avoidFalling && this.wet && !canBreathUnderWater && this.AI_007_TownEntities_CheckIfWillDrown(currentlyDrowning) && (double) this.localAI[3] <= 0.0) { avoidFalling = true; this.localAI[3] = 600f; } if (avoidFalling) { int num13 = (int) (((double) this.position.X + (double) (this.width / 2)) / 16.0); int num14 = 0; for (int index9 = -1; index9 <= 1; ++index9) { Tile tileSafely = Framing.GetTileSafely(num13 + index9, num12 + 1); if (tileSafely.nactive() && Main.tileSolid[(int) tileSafely.type]) ++num14; } if (num14 <= 2) { if ((double) this.velocity.X != 0.0) this.netUpdate = true; keepwalking = avoidFalling = false; this.ai[0] = 0.0f; this.ai[1] = (float) (50 + Main.rand.Next(50)); this.ai[2] = 0.0f; this.localAI[3] = 40f; } } if ((double) this.position.X == (double) this.localAI[3]) { this.direction *= -1; this.netUpdate = true; this.localAI[3] = 600f; } if (currentlyDrowning) { if ((double) this.localAI[3] > 0.0) --this.localAI[3]; } else this.localAI[3] = -1f; Tile tileSafely1 = Framing.GetTileSafely(num11, num12); Tile tileSafely2 = Framing.GetTileSafely(num11, num12 - 1); Tile tileSafely3 = Framing.GetTileSafely(num11, num12 - 2); bool flag12 = this.height / 16 < 3; if (this.townNPC && tileSafely3.nactive() && (tileSafely3.type == (ushort) 10 || tileSafely3.type == (ushort) 388) && Main.rand.Next(10) == 0 | flag1) { if (Main.netMode != 1) { if (WorldGen.OpenDoor(num11, num12 - 2, this.direction)) { this.closeDoor = true; this.doorX = num11; this.doorY = num12 - 2; NetMessage.SendData(19, number2: ((float) num11), number3: ((float) (num12 - 2)), number4: ((float) this.direction)); this.netUpdate = true; this.ai[1] += 80f; } else if (WorldGen.OpenDoor(num11, num12 - 2, -this.direction)) { this.closeDoor = true; this.doorX = num11; this.doorY = num12 - 2; NetMessage.SendData(19, number2: ((float) num11), number3: ((float) (num12 - 2)), number4: ((float) -this.direction)); this.netUpdate = true; this.ai[1] += 80f; } else if (WorldGen.ShiftTallGate(num11, num12 - 2, false)) { this.closeDoor = true; this.doorX = num11; this.doorY = num12 - 2; NetMessage.SendData(19, number: 4, number2: ((float) num11), number3: ((float) (num12 - 2))); this.netUpdate = true; this.ai[1] += 80f; } else { this.direction *= -1; this.netUpdate = true; } } } else { if ((double) this.velocity.X < 0.0 && this.spriteDirection == -1 || (double) this.velocity.X > 0.0 && this.spriteDirection == 1) { bool flag13 = false; bool flag14 = false; if (tileSafely3.nactive() && Main.tileSolid[(int) tileSafely3.type] && !Main.tileSolidTop[(int) tileSafely3.type] && (!flag12 || tileSafely2.nactive() && Main.tileSolid[(int) tileSafely2.type] && !Main.tileSolidTop[(int) tileSafely2.type])) { if (!Collision.SolidTilesVersatile(num11 - this.direction * 2, num11 - this.direction, num12 - 5, num12 - 1) && !Collision.SolidTiles(num11, num11, num12 - 5, num12 - 3)) { this.velocity.Y = -6f; this.netUpdate = true; } else if (flag5) { if (WorldGen.SolidTile((int) ((double) this.Center.X / 16.0) + this.direction, (int) ((double) this.Center.Y / 16.0))) { this.direction *= -1; this.velocity.X *= 0.0f; this.netUpdate = true; } } else if (flag9) { flag14 = true; flag13 = true; } else flag13 = true; } else if (tileSafely2.nactive() && Main.tileSolid[(int) tileSafely2.type] && !Main.tileSolidTop[(int) tileSafely2.type]) { if (!Collision.SolidTilesVersatile(num11 - this.direction * 2, num11 - this.direction, num12 - 4, num12 - 1) && !Collision.SolidTiles(num11, num11, num12 - 4, num12 - 2)) { this.velocity.Y = -5f; this.netUpdate = true; } else if (flag9) { flag14 = true; flag13 = true; } else flag13 = true; } else if ((double) this.position.Y + (double) this.height - (double) (num12 * 16) > 20.0 && tileSafely1.nactive() && Main.tileSolid[(int) tileSafely1.type] && !tileSafely1.topSlope()) { if (!Collision.SolidTilesVersatile(num11 - this.direction * 2, num11, num12 - 3, num12 - 1)) { this.velocity.Y = -4.4f; this.netUpdate = true; } else if (flag9) { flag14 = true; flag13 = true; } else flag13 = true; } else if (avoidFalling) { flag13 = true; if (flag9) flag14 = true; } if (flag14) { keepwalking = false; this.velocity.X = 0.0f; this.ai[0] = 8f; this.ai[1] = 240f; this.netUpdate = true; } if (flag13) { this.direction *= -1; this.velocity.X *= -1f; this.netUpdate = true; } if (keepwalking) { this.ai[1] = 90f; this.netUpdate = true; } if ((double) this.velocity.Y < 0.0) this.localAI[3] = this.position.X; } if ((double) this.velocity.Y < 0.0 && this.wet) this.velocity.Y *= 1.2f; if ((double) this.velocity.Y < 0.0 && NPCID.Sets.TownCritter[this.type] && !flag5) this.velocity.Y *= 1.2f; } } } } else if ((double) this.ai[0] == 2.0 || (double) this.ai[0] == 11.0) { if (Main.netMode != 1) { --this.localAI[3]; if (Main.rand.Next(60) == 0 && (double) this.localAI[3] == 0.0) { this.localAI[3] = 60f; this.direction *= -1; this.netUpdate = true; } } --this.ai[1]; this.velocity.X *= 0.8f; if ((double) this.ai[1] <= 0.0) { this.localAI[3] = 40f; this.ai[0] = 0.0f; this.ai[1] = (float) (60 + Main.rand.Next(60)); this.netUpdate = true; } } else if ((double) this.ai[0] == 3.0 || (double) this.ai[0] == 4.0 || (double) this.ai[0] == 5.0 || (double) this.ai[0] == 8.0 || (double) this.ai[0] == 9.0 || (double) this.ai[0] == 16.0 || (double) this.ai[0] == 17.0 || (double) this.ai[0] == 20.0 || (double) this.ai[0] == 21.0 || (double) this.ai[0] == 22.0 || (double) this.ai[0] == 23.0) { this.velocity.X *= 0.8f; --this.ai[1]; if ((double) this.ai[0] == 8.0 && (double) this.ai[1] < 60.0 & flag9) { this.ai[1] = 180f; this.netUpdate = true; } if ((double) this.ai[0] == 5.0) { Point tileCoordinates = (this.Bottom + Vector2.UnitY * -2f).ToTileCoordinates(); Tile tile = Main.tile[tileCoordinates.X, tileCoordinates.Y]; if (tile.type != (ushort) 15 && tile.type != (ushort) 497) this.ai[1] = 0.0f; else Main.sittingManager.AddNPC(this.whoAmI, tileCoordinates); } if ((double) this.ai[1] <= 0.0) { this.ai[0] = 0.0f; this.ai[1] = (float) (60 + Main.rand.Next(60)); this.ai[2] = 0.0f; this.localAI[3] = (float) (30 + Main.rand.Next(60)); this.netUpdate = true; } } else if ((double) this.ai[0] == 6.0 || (double) this.ai[0] == 7.0 || (double) this.ai[0] == 18.0 || (double) this.ai[0] == 19.0) { if ((double) this.ai[0] == 18.0 && ((double) this.localAI[3] < 1.0 || (double) this.localAI[3] > 2.0)) this.localAI[3] = 2f; this.velocity.X *= 0.8f; --this.ai[1]; int index10 = (int) this.ai[2]; if (index10 < 0 || index10 > (int) byte.MaxValue || !Main.player[index10].CanBeTalkedTo || (double) Main.player[index10].Distance(this.Center) > 200.0 || !Collision.CanHitLine(this.Top, 0, 0, Main.player[index10].Top, 0, 0)) this.ai[1] = 0.0f; if ((double) this.ai[1] > 0.0) { int num15 = (double) this.Center.X < (double) Main.player[index10].Center.X ? 1 : -1; if (num15 != this.direction) this.netUpdate = true; this.direction = num15; } else { this.ai[0] = 0.0f; this.ai[1] = (float) (60 + Main.rand.Next(60)); this.ai[2] = 0.0f; this.localAI[3] = (float) (30 + Main.rand.Next(60)); this.netUpdate = true; } } else if ((double) this.ai[0] == 10.0) { int Type = 0; int num16 = 0; float KnockBack = 0.0f; float num17 = 0.0f; int num18 = 0; int num19 = 0; int maxValue2 = 0; float num20 = 0.0f; float num21 = (float) NPCID.Sets.DangerDetectRange[this.type]; float max = 0.0f; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) { this.frameCounter = 0.0; this.localAI[3] = 0.0f; } if (this.type == 38) { Type = 30; num17 = 6f; num16 = 20; num18 = 10; num19 = 180; maxValue2 = 120; num20 = 16f; KnockBack = 7f; } else if (this.type == 633) { Type = 880; num17 = 24f; num16 = 15; num18 = 1; num20 = 0.0f; KnockBack = 7f; num19 = 15; maxValue2 = 10; if (this.ShouldBestiaryGirlBeLycantrope()) { Type = 929; num16 = (int) ((double) num16 * 1.5); } } else if (this.type == 550) { Type = 669; num17 = 6f; num16 = 24; num18 = 10; num19 = 120; maxValue2 = 60; num20 = 16f; KnockBack = 9f; } else if (this.type == 588) { Type = 721; num17 = 8f; num16 = 15; num18 = 5; num19 = 20; maxValue2 = 10; num20 = 16f; KnockBack = 9f; } else if (this.type == 208) { Type = 588; num17 = 6f; num16 = 30; num18 = 10; num19 = 60; maxValue2 = 120; num20 = 16f; KnockBack = 6f; } else if (this.type == 17) { Type = 48; num17 = 9f; num16 = 12; num18 = 10; num19 = 60; maxValue2 = 60; num20 = 16f; KnockBack = 1.5f; } else if (this.type == 369) { Type = 520; num17 = 12f; num16 = 10; num18 = 10; num19 = 0; maxValue2 = 1; num20 = 16f; KnockBack = 3f; } else if (this.type == 453) { Type = 21; num17 = 14f; num16 = 14; num18 = 10; num19 = 0; maxValue2 = 1; num20 = 16f; KnockBack = 3f; } else if (this.type == 107) { Type = 24; num17 = 5f; num16 = 15; num18 = 10; num19 = 60; maxValue2 = 60; num20 = 16f; KnockBack = 1f; } else if (this.type == 124) { Type = 582; num17 = 10f; num16 = 11; num18 = 1; num19 = 30; maxValue2 = 30; KnockBack = 3.5f; } else if (this.type == 18) { Type = 583; num17 = 8f; num16 = 8; num18 = 1; num19 = 15; maxValue2 = 10; KnockBack = 2f; num20 = 10f; } else if (this.type == 142) { Type = 589; num17 = 7f; num16 = 22; num18 = 1; num19 = 10; maxValue2 = 1; KnockBack = 2f; num20 = 10f; } if (Main.expertMode) num16 = (int) ((double) num16 * (double) Main.GameModeInfo.TownNPCDamageMultiplier); int Damage = (int) ((double) num16 * (double) num1); this.velocity.X *= 0.8f; --this.ai[1]; ++this.localAI[3]; if ((double) this.localAI[3] == (double) num18 && Main.netMode != 1) { Vector2 vec = -Vector2.UnitY; if (num6 == 1 && this.spriteDirection == 1 && index7 != -1) vec = this.DirectionTo(Main.npc[index7].Center + new Vector2(0.0f, -num20 * MathHelper.Clamp(this.Distance(Main.npc[index7].Center) / num21, 0.0f, 1f))); if (num6 == -1 && this.spriteDirection == -1 && index6 != -1) vec = this.DirectionTo(Main.npc[index6].Center + new Vector2(0.0f, -num20 * MathHelper.Clamp(this.Distance(Main.npc[index6].Center) / num21, 0.0f, 1f))); if (vec.HasNaNs() || Math.Sign(vec.X) != this.spriteDirection) vec = new Vector2((float) this.spriteDirection, -1f); Vector2 vector2 = vec * num17 + Utils.RandomVector2(Main.rand, -max, max); int index11 = this.type != 124 ? (this.type != 142 ? Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, Type, Damage, KnockBack, Main.myPlayer) : Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, Type, Damage, KnockBack, Main.myPlayer, ai1: ((float) Main.rand.Next(5)))) : Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, Type, Damage, KnockBack, Main.myPlayer, ai1: ((float) this.whoAmI)); Main.projectile[index11].npcProj = true; Main.projectile[index11].noDropItem = true; if (this.type == 588) Main.projectile[index11].timeLeft = 480; } if ((double) this.ai[1] <= 0.0) { this.ai[0] = (double) this.localAI[2] == 8.0 & flag9 ? 8f : 0.0f; this.ai[1] = (float) (num19 + Main.rand.Next(maxValue2)); this.ai[2] = 0.0f; this.localAI[1] = this.localAI[3] = (float) (num19 / 2 + Main.rand.Next(maxValue2)); this.netUpdate = true; } } else if ((double) this.ai[0] == 12.0) { int Type = 0; int num22 = 0; float num23 = 0.0f; int num24 = 0; int num25 = 0; int maxValue3 = 0; float KnockBack = 0.0f; int num26 = 0; bool flag15 = false; float max = 0.0f; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) { this.frameCounter = 0.0; this.localAI[3] = 0.0f; } int index12 = -1; if (num6 == 1 && this.spriteDirection == 1) index12 = index7; if (num6 == -1 && this.spriteDirection == -1) index12 = index6; if (this.type == 19) { Type = 14; num23 = 13f; num22 = 24; num25 = 14; maxValue3 = 4; KnockBack = 3f; num24 = 1; max = 0.5f; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) { this.frameCounter = 0.0; this.localAI[3] = 0.0f; } if (Main.hardMode) { num22 = 15; if ((double) this.localAI[3] > (double) num24) { num24 = 10; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 20; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 30; flag15 = true; } } } else if (this.type == 227) { Type = 587; num23 = 10f; num22 = 8; num25 = 10; maxValue3 = 1; KnockBack = 1.75f; num24 = 1; max = 0.5f; if ((double) this.localAI[3] > (double) num24) { num24 = 12; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 24; flag15 = true; } if (Main.hardMode) num22 += 2; } else if (this.type == 368) { Type = 14; num23 = 13f; num22 = 24; num25 = 12; maxValue3 = 5; KnockBack = 2f; num24 = 1; max = 0.2f; if (Main.hardMode) { num22 = 30; Type = 357; } } else if (this.type == 22) { num23 = 10f; num22 = 8; num24 = 1; if (Main.hardMode) { Type = 2; num25 = 15; maxValue3 = 10; num22 += 6; } else { Type = 1; num25 = 30; maxValue3 = 20; } KnockBack = 2.75f; num26 = 4; max = 0.7f; } else if (this.type == 228) { Type = 267; num23 = 14f; num22 = 20; num24 = 1; num25 = 10; maxValue3 = 1; KnockBack = 3f; num26 = 6; max = 0.4f; } else if (this.type == 178) { Type = 242; num23 = 13f; num22 = 15; num25 = 10; maxValue3 = 1; KnockBack = 2f; num24 = 1; if ((double) this.localAI[3] > (double) num24) { num24 = 8; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 16; flag15 = true; } max = 0.3f; } else if (this.type == 229) { Type = 14; num23 = 14f; num22 = 24; num25 = 10; maxValue3 = 1; KnockBack = 2f; num24 = 1; max = 0.7f; if ((double) this.localAI[3] > (double) num24) { num24 = 16; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 24; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 32; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 40; flag15 = true; } if ((double) this.localAI[3] > (double) num24) { num24 = 48; flag15 = true; } if ((double) this.localAI[3] == 0.0 && index12 != -1 && (double) this.Distance(Main.npc[index12].Center) < (double) NPCID.Sets.PrettySafe[this.type]) { max = 0.1f; Type = 162; num22 = 50; KnockBack = 10f; num23 = 24f; } } else if (this.type == 209) { Type = Utils.SelectRandom(Main.rand, 134, 133, 135); num24 = 1; switch (Type) { case 133: num23 = 10f; num22 = 25; num25 = 10; maxValue3 = 1; KnockBack = 6f; max = 0.2f; break; case 134: num23 = 13f; num22 = 20; num25 = 20; maxValue3 = 10; KnockBack = 4f; max = 0.1f; break; case 135: num23 = 12f; num22 = 30; num25 = 30; maxValue3 = 10; KnockBack = 7f; max = 0.2f; break; } } if (Main.expertMode) num22 = (int) ((double) num22 * (double) Main.GameModeInfo.TownNPCDamageMultiplier); int Damage = (int) ((double) num22 * (double) num1); this.velocity.X *= 0.8f; --this.ai[1]; ++this.localAI[3]; if ((double) this.localAI[3] == (double) num24 && Main.netMode != 1) { Vector2 vec = Vector2.Zero; if (index12 != -1) vec = this.DirectionTo(Main.npc[index12].Center + new Vector2(0.0f, (float) -num26)); if (vec.HasNaNs() || Math.Sign(vec.X) != this.spriteDirection) vec = new Vector2((float) this.spriteDirection, 0.0f); Vector2 vector2 = vec * num23 + Utils.RandomVector2(Main.rand, -max, max); int index13 = this.type != 227 ? Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, Type, Damage, KnockBack, Main.myPlayer) : Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, Type, Damage, KnockBack, Main.myPlayer, ai1: ((float) Main.rand.Next(12) / 6f)); Main.projectile[index13].npcProj = true; Main.projectile[index13].noDropItem = true; } if ((double) this.localAI[3] == (double) num24 & flag15 && index12 != -1) { Vector2 vector2 = this.DirectionTo(Main.npc[index12].Center); if ((double) vector2.Y <= 0.5 && (double) vector2.Y >= -0.5) this.ai[2] = vector2.Y; } if ((double) this.ai[1] <= 0.0) { this.ai[0] = (double) this.localAI[2] == 8.0 & flag9 ? 8f : 0.0f; this.ai[1] = (float) (num25 + Main.rand.Next(maxValue3)); this.ai[2] = 0.0f; this.localAI[1] = this.localAI[3] = (float) (num25 / 2 + Main.rand.Next(maxValue3)); this.netUpdate = true; } } else if ((double) this.ai[0] == 13.0) { this.velocity.X *= 0.8f; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) this.frameCounter = 0.0; --this.ai[1]; ++this.localAI[3]; if ((double) this.localAI[3] == 1.0 && Main.netMode != 1) { Vector2 vec = this.DirectionTo(Main.npc[(int) this.ai[2]].Center + new Vector2(0.0f, -20f)); if (vec.HasNaNs() || Math.Sign(vec.X) == -this.spriteDirection) vec = new Vector2((float) this.spriteDirection, -1f); Vector2 vector2 = vec * 8f; int index14 = Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2.X, vector2.Y, 584, 0, 0.0f, Main.myPlayer, this.ai[2]); Main.projectile[index14].npcProj = true; Main.projectile[index14].noDropItem = true; } if ((double) this.ai[1] <= 0.0) { this.ai[0] = 0.0f; this.ai[1] = (float) (10 + Main.rand.Next(10)); this.ai[2] = 0.0f; this.localAI[3] = (float) (5 + Main.rand.Next(10)); this.netUpdate = true; } } else if ((double) this.ai[0] == 14.0) { int Type = 0; int num27 = 0; float num28 = 0.0f; int num29 = 0; int num30 = 0; int maxValue4 = 0; float KnockBack = 0.0f; float num31 = 0.0f; float num32 = (float) NPCID.Sets.DangerDetectRange[this.type]; float num33 = 1f; float max = 0.0f; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) { this.frameCounter = 0.0; this.localAI[3] = 0.0f; } int index15 = -1; if (num6 == 1 && this.spriteDirection == 1) index15 = index7; if (num6 == -1 && this.spriteDirection == -1) index15 = index6; if (this.type == 54) { Type = 585; num28 = 10f; num27 = 16; num29 = 30; num30 = 20; maxValue4 = 15; KnockBack = 2f; max = 1f; } else if (this.type == 108) { Type = 15; num28 = 6f; num27 = 18; num29 = 15; num30 = 15; maxValue4 = 5; KnockBack = 3f; num31 = 20f; } else if (this.type == 160) { Type = 590; num27 = 40; num29 = 15; num30 = 10; maxValue4 = 1; KnockBack = 3f; while ((double) this.localAI[3] > (double) num29) num29 += 15; } else if (this.type == 20) { Type = 586; num29 = 24; num30 = 10; maxValue4 = 1; KnockBack = 3f; } if (Main.expertMode) num27 = (int) ((double) num27 * (double) Main.GameModeInfo.TownNPCDamageMultiplier); int Damage = (int) ((double) num27 * (double) num1); this.velocity.X *= 0.8f; --this.ai[1]; ++this.localAI[3]; if ((double) this.localAI[3] == (double) num29 && Main.netMode != 1) { Vector2 vec = Vector2.Zero; if (index15 != -1) vec = this.DirectionTo(Main.npc[index15].Center + new Vector2(0.0f, -num31 * MathHelper.Clamp(this.Distance(Main.npc[index15].Center) / num32, 0.0f, 1f))); if (vec.HasNaNs() || Math.Sign(vec.X) != this.spriteDirection) vec = new Vector2((float) this.spriteDirection, 0.0f); Vector2 vector2_1 = vec * num28 + Utils.RandomVector2(Main.rand, -max, max); if (this.type == 108) { int num34 = Utils.SelectRandom(Main.rand, 1, 1, 1, 1, 2, 2, 3); for (int index16 = 0; index16 < num34; ++index16) { Vector2 vector2_2 = Utils.RandomVector2(Main.rand, -3.4f, 3.4f); int index17 = Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2_1.X + vector2_2.X, vector2_1.Y + vector2_2.Y, Type, Damage, KnockBack, Main.myPlayer); Main.projectile[index17].npcProj = true; Main.projectile[index17].noDropItem = true; } } else if (this.type == 160) { if (index15 != -1) { Vector2 vector2_3 = Main.npc[index15].position - Main.npc[index15].Size * 2f + Main.npc[index15].Size * Utils.RandomVector2(Main.rand, 0.0f, 1f) * 5f; for (int index18 = 10; index18 > 0 && WorldGen.SolidTile(Framing.GetTileSafely((int) vector2_3.X / 16, (int) vector2_3.Y / 16)); vector2_3 = Main.npc[index15].position - Main.npc[index15].Size * 2f + Main.npc[index15].Size * Utils.RandomVector2(Main.rand, 0.0f, 1f) * 5f) --index18; int index19 = Projectile.NewProjectile(vector2_3.X, vector2_3.Y, 0.0f, 0.0f, Type, Damage, KnockBack, Main.myPlayer); Main.projectile[index19].npcProj = true; Main.projectile[index19].noDropItem = true; } } else if (this.type == 20) { int index20 = Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2_1.X, vector2_1.Y, Type, Damage, KnockBack, Main.myPlayer, ai1: ((float) this.whoAmI)); Main.projectile[index20].npcProj = true; Main.projectile[index20].noDropItem = true; } else { int index21 = Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * 16), this.Center.Y - 2f, vector2_1.X, vector2_1.Y, Type, Damage, KnockBack, Main.myPlayer); Main.projectile[index21].npcProj = true; Main.projectile[index21].noDropItem = true; } } if ((double) num33 > 0.0) { Vector3 vector3 = NPCID.Sets.MagicAuraColor[this.type].ToVector3() * num33; Lighting.AddLight(this.Center, vector3.X, vector3.Y, vector3.Z); } if ((double) this.ai[1] <= 0.0) { this.ai[0] = (double) this.localAI[2] == 8.0 & flag9 ? 8f : 0.0f; this.ai[1] = (float) (num30 + Main.rand.Next(maxValue4)); this.ai[2] = 0.0f; this.localAI[1] = this.localAI[3] = (float) (num30 / 2 + Main.rand.Next(maxValue4)); this.netUpdate = true; } } else if ((double) this.ai[0] == 15.0) { int num35 = 0; int maxValue5 = 0; if ((double) NPCID.Sets.AttackTime[this.type] == (double) this.ai[1]) { this.frameCounter = 0.0; this.localAI[3] = 0.0f; } int num36 = 0; float num37 = 0.0f; int num38 = 0; int num39 = 0; if (num6 == 1) { int spriteDirection1 = this.spriteDirection; } if (num6 == -1) { int spriteDirection2 = this.spriteDirection; } if (this.type == 207) { num36 = 11; num38 = num39 = 32; num35 = 12; maxValue5 = 6; num37 = 4.25f; } else if (this.type == 441) { num36 = 9; num38 = num39 = 28; num35 = 9; maxValue5 = 3; num37 = 3.5f; } else if (this.type == 353) { num36 = 10; num38 = num39 = 32; num35 = 15; maxValue5 = 8; num37 = 5f; } else if (this.type == 637 || this.type == 638 || this.type == 656) { num36 = 10; num38 = num39 = 32; num35 = 15; maxValue5 = 8; num37 = 3f; } if (Main.expertMode) num36 = (int) ((double) num36 * (double) Main.GameModeInfo.TownNPCDamageMultiplier); int Damage = (int) ((double) num36 * (double) num1); this.velocity.X *= 0.8f; --this.ai[1]; if (Main.netMode != 1) { Tuple swingStats = this.GetSwingStats(NPCID.Sets.AttackTime[this.type] * 2, (int) this.ai[1], this.spriteDirection, num38, num39); Microsoft.Xna.Framework.Rectangle itemRectangle = new Microsoft.Xna.Framework.Rectangle((int) swingStats.Item1.X, (int) swingStats.Item1.Y, num38, num39); if (this.spriteDirection == -1) itemRectangle.X -= num38; itemRectangle.Y -= num39; this.TweakSwingStats(NPCID.Sets.AttackTime[this.type] * 2, (int) this.ai[1], this.spriteDirection, ref itemRectangle); int player = Main.myPlayer; for (int number = 0; number < 200; ++number) { NPC npc = Main.npc[number]; if (npc.active && npc.immune[player] == 0 && !npc.dontTakeDamage && !npc.friendly && npc.damage > 0 && itemRectangle.Intersects(npc.Hitbox) && (npc.noTileCollide || Collision.CanHit(this.position, this.width, this.height, npc.position, npc.width, npc.height))) { npc.StrikeNPCNoInteraction(Damage, num37, this.spriteDirection); if (Main.netMode != 0) NetMessage.SendData(28, number: number, number2: ((float) Damage), number3: num37, number4: ((float) this.spriteDirection)); npc.netUpdate = true; npc.immune[player] = (int) this.ai[1] + 2; } } } if ((double) this.ai[1] <= 0.0) { bool flag16 = false; if (flag9) { if (!Collision.CanHit(this.Center, 0, 0, this.Center + Vector2.UnitX * (float) -num6 * 32f, 0, 0) || (double) this.localAI[2] == 8.0) flag16 = true; if (flag16) { int num40 = NPCID.Sets.AttackTime[this.type]; int index22 = num6 == 1 ? index7 : index6; int index23 = num6 == 1 ? index6 : index7; if (index22 != -1 && !Collision.CanHit(this.Center, 0, 0, Main.npc[index22].Center, 0, 0)) index22 = index23 == -1 || !Collision.CanHit(this.Center, 0, 0, Main.npc[index23].Center, 0, 0) ? -1 : index23; if (index22 != -1) { this.ai[0] = 15f; this.ai[1] = (float) num40; this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index22].position.X ? 1 : -1; this.netUpdate = true; } else flag16 = false; } } if (!flag16) { this.ai[0] = (double) this.localAI[2] == 8.0 & flag9 ? 8f : 0.0f; this.ai[1] = (float) (num35 + Main.rand.Next(maxValue5)); this.ai[2] = 0.0f; this.localAI[1] = this.localAI[3] = (float) (num35 / 2 + Main.rand.Next(maxValue5)); this.netUpdate = true; } } } if (flag8 && this.wet) { if (flag7) this.ai[1] = 50f; if (this.collideX) { this.direction *= -1; this.velocity.X *= -0.25f; } float waterLineHeight; if (Collision.GetWaterLine(this.Center.ToTileCoordinates(), out waterLineHeight)) { float num41 = this.Center.Y + 1f; if ((double) this.Center.Y > (double) waterLineHeight) { this.velocity.Y -= 0.8f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; if ((double) num41 + (double) this.velocity.Y < (double) waterLineHeight) this.velocity.Y = waterLineHeight - num41; } else this.velocity.Y = MathHelper.Min(this.velocity.Y, waterLineHeight - num41); } else this.velocity.Y -= 0.2f; } if (Main.netMode == 1 || !this.isLikeATownNPC || flag3) return; bool flag17 = (double) this.ai[0] < 2.0 && !flag9; bool flag18 = ((double) this.ai[0] < 2.0 || (double) this.ai[0] == 8.0) && flag9 | flag10; if ((double) this.localAI[1] > 0.0) --this.localAI[1]; if ((double) this.localAI[1] > 0.0) flag18 = false; if (flag18 && this.type == 124 && (double) this.localAI[0] == 1.0) flag18 = false; if (flag18 && this.type == 20) { flag18 = false; for (int index24 = 0; index24 < 200; ++index24) { NPC npc = Main.npc[index24]; if (npc.active && npc.townNPC && (double) this.Distance(npc.Center) <= 1200.0 && npc.FindBuffIndex(165) == -1) { flag18 = true; break; } } } if (this.CanTalk & flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(300) == 0) { int num42 = 420; int num43 = Main.rand.Next(2) != 0 ? num42 * Main.rand.Next(1, 3) : num42 * Main.rand.Next(1, 4); int num44 = 100; int num45 = 20; for (int index25 = 0; index25 < 200; ++index25) { NPC npc = Main.npc[index25]; bool flag19 = (double) npc.ai[0] == 1.0 && npc.closeDoor || (double) npc.ai[0] == 1.0 && (double) npc.ai[1] > 200.0 || (double) npc.ai[0] > 1.0; if (npc != this && npc.active && npc.CanBeTalkedTo && !flag19 && (double) npc.Distance(this.Center) < (double) num44 && (double) npc.Distance(this.Center) > (double) num45 && Collision.CanHit(this.Center, 0, 0, npc.Center, 0, 0)) { int directionInt = ((double) this.position.X < (double) npc.position.X).ToDirectionInt(); this.ai[0] = 3f; this.ai[1] = (float) num43; this.ai[2] = (float) index25; this.direction = directionInt; this.netUpdate = true; npc.ai[0] = 4f; npc.ai[1] = (float) num43; npc.ai[2] = (float) this.whoAmI; npc.direction = -directionInt; npc.netUpdate = true; break; } } } else if (this.CanTalk & flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(1800) == 0) { int num46 = 420; int num47 = Main.rand.Next(2) != 0 ? num46 * Main.rand.Next(1, 3) : num46 * Main.rand.Next(1, 4); int num48 = 100; int num49 = 20; for (int index26 = 0; index26 < 200; ++index26) { NPC npc = Main.npc[index26]; bool flag20 = (double) npc.ai[0] == 1.0 && npc.closeDoor || (double) npc.ai[0] == 1.0 && (double) npc.ai[1] > 200.0 || (double) npc.ai[0] > 1.0; if (npc != this && npc.active && npc.CanBeTalkedTo && !NPCID.Sets.IsTownPet[npc.type] && !flag20 && (double) npc.Distance(this.Center) < (double) num48 && (double) npc.Distance(this.Center) > (double) num49 && Collision.CanHit(this.Center, 0, 0, npc.Center, 0, 0)) { int directionInt = ((double) this.position.X < (double) npc.position.X).ToDirectionInt(); this.ai[0] = 16f; this.ai[1] = (float) num47; this.ai[2] = (float) index26; this.localAI[2] = (float) Main.rand.Next(4); this.localAI[3] = (float) Main.rand.Next(3 - (int) this.localAI[2]); this.direction = directionInt; this.netUpdate = true; npc.ai[0] = 17f; npc.ai[1] = (float) num47; npc.ai[2] = (float) this.whoAmI; npc.localAI[2] = 0.0f; npc.localAI[3] = 0.0f; npc.direction = -directionInt; npc.netUpdate = true; break; } } } else if (!NPCID.Sets.IsTownPet[this.type] & flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(1200) == 0 && (this.type == 208 || BirthdayParty.PartyIsUp && NPCID.Sets.AttackType[this.type] == NPCID.Sets.AttackType[208])) { int num50 = 300; int num51 = 150; for (int index27 = 0; index27 < (int) byte.MaxValue; ++index27) { Player player = Main.player[index27]; if (player.active && !player.dead && (double) player.Distance(this.Center) < (double) num51 && Collision.CanHitLine(this.Top, 0, 0, player.Top, 0, 0)) { int directionInt = ((double) this.position.X < (double) player.position.X).ToDirectionInt(); this.ai[0] = 6f; this.ai[1] = (float) num50; this.ai[2] = (float) index27; this.direction = directionInt; this.netUpdate = true; break; } } } else if (flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(600) == 0 && this.type == 550) { int num52 = 300; int num53 = 150; for (int index28 = 0; index28 < (int) byte.MaxValue; ++index28) { Player player = Main.player[index28]; if (player.active && !player.dead && (double) player.Distance(this.Center) < (double) num53 && Collision.CanHitLine(this.Top, 0, 0, player.Top, 0, 0)) { int directionInt = ((double) this.position.X < (double) player.position.X).ToDirectionInt(); this.ai[0] = 18f; this.ai[1] = (float) num52; this.ai[2] = (float) index28; this.direction = directionInt; this.netUpdate = true; break; } } } else if (!NPCID.Sets.IsTownPet[this.type] & flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(1800) == 0) { this.ai[0] = 2f; this.ai[1] = (float) (45 * Main.rand.Next(1, 2)); this.netUpdate = true; } else if (flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(600) == 0 && this.type == 229 && !flag10) { this.ai[0] = 11f; this.ai[1] = (float) (30 * Main.rand.Next(1, 4)); this.netUpdate = true; } else if (flag17 && (double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(1200) == 0) { int num54 = 220; int num55 = 150; for (int index29 = 0; index29 < (int) byte.MaxValue; ++index29) { Player player = Main.player[index29]; if (player.CanBeTalkedTo && (double) player.Distance(this.Center) < (double) num55 && Collision.CanHitLine(this.Top, 0, 0, player.Top, 0, 0)) { int directionInt = ((double) this.position.X < (double) player.position.X).ToDirectionInt(); this.ai[0] = 7f; this.ai[1] = (float) num54; this.ai[2] = (float) index29; this.direction = directionInt; this.netUpdate = true; break; } } } else if (flag17 && (double) this.ai[0] == 1.0 && (double) this.velocity.Y == 0.0 && maxValue1 > 0 && Main.rand.Next(maxValue1) == 0) { Point tileCoordinates = (this.Bottom + Vector2.UnitY * -2f).ToTileCoordinates(); bool flag21 = WorldGen.InWorld(tileCoordinates.X, tileCoordinates.Y, 1); if (flag21) { for (int index30 = 0; index30 < 200; ++index30) { if (Main.npc[index30].active && Main.npc[index30].aiStyle == 7 && Main.npc[index30].townNPC && (double) Main.npc[index30].ai[0] == 5.0 && (Main.npc[index30].Bottom + Vector2.UnitY * -2f).ToTileCoordinates() == tileCoordinates) { flag21 = false; break; } } for (int index31 = 0; index31 < (int) byte.MaxValue; ++index31) { if (Main.player[index31].active && Main.player[index31].sitting.isSitting && Main.player[index31].Center.ToTileCoordinates() == tileCoordinates) { flag21 = false; break; } } } if (flag21) { Tile tile = Main.tile[tileCoordinates.X, tileCoordinates.Y]; bool flag22 = tile.type == (ushort) 15 || tile.type == (ushort) 497; if (flag22 && tile.type == (ushort) 15 && tile.frameY == (short) 1098) flag22 = false; if (flag22) { this.ai[0] = 5f; this.ai[1] = (float) (900 + Main.rand.Next(10800)); this.direction = tile.frameX == (short) 0 ? -1 : 1; this.Bottom = new Vector2((float) (tileCoordinates.X * 16 + 8 + 2 * this.direction), (float) (tileCoordinates.Y * 16 + 16)); this.velocity = Vector2.Zero; this.localAI[3] = 0.0f; this.netUpdate = true; } } } else if (flag17 && (double) this.ai[0] == 1.0 && (double) this.velocity.Y == 0.0 && Main.rand.Next(600) == 0 && Utils.PlotTileLine(this.Top, this.Bottom, (float) this.width, new Utils.TileActionAttempt(DelegateMethods.SearchAvoidedByNPCs))) { Point tileCoordinates = (this.Center + new Vector2((float) (this.direction * 10), 0.0f)).ToTileCoordinates(); bool flag23 = WorldGen.InWorld(tileCoordinates.X, tileCoordinates.Y, 1); if (flag23) { Tile tileSafely = Framing.GetTileSafely(tileCoordinates.X, tileCoordinates.Y); if (!tileSafely.nactive() || !TileID.Sets.InteractibleByNPCs[(int) tileSafely.type]) flag23 = false; } if (flag23) { this.ai[0] = 9f; this.ai[1] = (float) (40 + Main.rand.Next(90)); this.velocity = Vector2.Zero; this.localAI[3] = 0.0f; this.netUpdate = true; } } if (Main.netMode != 1 && (double) this.ai[0] < 2.0 && (double) this.velocity.Y == 0.0 && this.type == 18 && this.breath > 0) { int index32 = -1; for (int index33 = 0; index33 < 200; ++index33) { NPC npc = Main.npc[index33]; if (npc.active && npc.townNPC && npc.life != npc.lifeMax && (index32 == -1 || npc.lifeMax - npc.life > Main.npc[index32].lifeMax - Main.npc[index32].life) && Collision.CanHitLine(this.position, this.width, this.height, npc.position, npc.width, npc.height) && (double) this.Distance(npc.Center) < 500.0) index32 = index33; } if (index32 != -1) { this.ai[0] = 13f; this.ai[1] = 34f; this.ai[2] = (float) index32; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index32].position.X ? 1 : -1; this.netUpdate = true; } } if (flag18 && (double) this.velocity.Y == 0.0 && NPCID.Sets.AttackType[this.type] == 0 && NPCID.Sets.AttackAverageChance[this.type] > 0 && Main.rand.Next(NPCID.Sets.AttackAverageChance[this.type] * 2) == 0) { int num56 = NPCID.Sets.AttackTime[this.type]; int index34 = num6 == 1 ? index7 : index6; int index35 = num6 == 1 ? index6 : index7; if (index34 != -1 && !Collision.CanHit(this.Center, 0, 0, Main.npc[index34].Center, 0, 0)) index34 = index35 == -1 || !Collision.CanHit(this.Center, 0, 0, Main.npc[index35].Center, 0, 0) ? -1 : index35; bool flag24 = index34 != -1; if (flag24 && this.type == 633) flag24 = (double) Vector2.Distance(this.Center, Main.npc[index34].Center) <= 50.0; if (flag24) { this.localAI[2] = this.ai[0]; this.ai[0] = 10f; this.ai[1] = (float) num56; this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index34].position.X ? 1 : -1; this.netUpdate = true; } } else if (flag18 && (double) this.velocity.Y == 0.0 && NPCID.Sets.AttackType[this.type] == 1 && NPCID.Sets.AttackAverageChance[this.type] > 0 && Main.rand.Next(NPCID.Sets.AttackAverageChance[this.type] * 2) == 0) { int num57 = NPCID.Sets.AttackTime[this.type]; int index36 = num6 == 1 ? index7 : index6; int index37 = num6 == 1 ? index6 : index7; if (index36 != -1 && !Collision.CanHitLine(this.Center, 0, 0, Main.npc[index36].Center, 0, 0)) index36 = index37 == -1 || !Collision.CanHitLine(this.Center, 0, 0, Main.npc[index37].Center, 0, 0) ? -1 : index37; if (index36 != -1) { Vector2 vector2 = this.DirectionTo(Main.npc[index36].Center); if ((double) vector2.Y <= 0.5 && (double) vector2.Y >= -0.5) { this.localAI[2] = this.ai[0]; this.ai[0] = 12f; this.ai[1] = (float) num57; this.ai[2] = vector2.Y; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index36].position.X ? 1 : -1; this.netUpdate = true; } } } if (flag18 && (double) this.velocity.Y == 0.0 && NPCID.Sets.AttackType[this.type] == 2 && NPCID.Sets.AttackAverageChance[this.type] > 0 && Main.rand.Next(NPCID.Sets.AttackAverageChance[this.type] * 2) == 0) { int num58 = NPCID.Sets.AttackTime[this.type]; int index38 = num6 == 1 ? index7 : index6; int index39 = num6 == 1 ? index6 : index7; if (index38 != -1 && !Collision.CanHitLine(this.Center, 0, 0, Main.npc[index38].Center, 0, 0)) index38 = index39 == -1 || !Collision.CanHitLine(this.Center, 0, 0, Main.npc[index39].Center, 0, 0) ? -1 : index39; if (index38 != -1) { this.localAI[2] = this.ai[0]; this.ai[0] = 14f; this.ai[1] = (float) num58; this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index38].position.X ? 1 : -1; this.netUpdate = true; } else if (this.type == 20) { this.localAI[2] = this.ai[0]; this.ai[0] = 14f; this.ai[1] = (float) num58; this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.netUpdate = true; } } if (!flag18 || (double) this.velocity.Y != 0.0 || NPCID.Sets.AttackType[this.type] != 3 || NPCID.Sets.AttackAverageChance[this.type] <= 0 || Main.rand.Next(NPCID.Sets.AttackAverageChance[this.type] * 2) != 0) return; int num59 = NPCID.Sets.AttackTime[this.type]; int index40 = num6 == 1 ? index7 : index6; int index41 = num6 == 1 ? index6 : index7; if (index40 != -1 && !Collision.CanHit(this.Center, 0, 0, Main.npc[index40].Center, 0, 0)) index40 = index41 == -1 || !Collision.CanHit(this.Center, 0, 0, Main.npc[index41].Center, 0, 0) ? -1 : index41; if (index40 == -1) return; this.localAI[2] = this.ai[0]; this.ai[0] = 15f; this.ai[1] = (float) num59; this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = (double) this.position.X < (double) Main.npc[index40].position.X ? 1 : -1; this.netUpdate = true; } } } private void AI_007_TownEntities_GetWalkPrediction( int myTileX, int homeFloorX, bool canBreathUnderWater, bool currentlyDrowning, int tileX, int tileY, out bool keepwalking, out bool avoidFalling) { keepwalking = false; avoidFalling = true; bool flag = myTileX >= homeFloorX - 35 && myTileX <= homeFloorX + 35; if (this.townNPC && (double) this.ai[1] < 30.0) { keepwalking = !Utils.PlotTileLine(this.Top, this.Bottom, (float) this.width, new Utils.TileActionAttempt(DelegateMethods.SearchAvoidedByNPCs)); if (!keepwalking) { Microsoft.Xna.Framework.Rectangle hitbox = this.Hitbox; hitbox.X -= 20; hitbox.Width += 40; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].friendly && index != this.whoAmI && (double) Main.npc[index].velocity.X == 0.0 && hitbox.Intersects(Main.npc[index].Hitbox)) { keepwalking = true; break; } } } } if (!keepwalking & currentlyDrowning) keepwalking = true; if (avoidFalling && (NPCID.Sets.TownCritter[this.type] || !flag && this.direction == Math.Sign(homeFloorX - myTileX))) avoidFalling = false; if (!avoidFalling) return; int num = 0; for (int index = -1; index <= 4; ++index) { Tile tileSafely = Framing.GetTileSafely(tileX - this.direction * num, tileY + index); if (tileSafely.lava() && tileSafely.liquid > (byte) 0) { avoidFalling = true; break; } if (tileSafely.nactive() && Main.tileSolid[(int) tileSafely.type]) { avoidFalling = false; break; } } } private bool AI_007_TownEntities_CheckIfWillDrown(bool currentlyDrowning) { bool flag1 = currentlyDrowning; bool flag2 = false; if (!flag1) flag2 = Collision.DrownCollision(this.position + new Vector2((float) (this.width * this.direction), 0.0f), this.width, this.height, 1f); return flag2 || Collision.DrownCollision(this.position + new Vector2((float) (this.width * this.direction), (float) (this.height * 2 - 16 - (flag1 ? 16 : 0))), this.width, 16 + (flag1 ? 16 : 0), 1f); } private void AI_007_AttemptToPlayIdleAnimationsForPets(int petIdleChance) { if ((double) this.velocity.X != 0.0 || Main.netMode == 1 || Main.rand.Next(petIdleChance) != 0) return; int num = 3; if (this.type == 638) num = 2; this.ai[0] = (float) Main.rand.Next(20, 20 + num); this.ai[1] = (float) (200 + Main.rand.Next(300)); if ((double) this.ai[0] == 20.0 && this.type == 637) this.ai[1] = (float) (500 + Main.rand.Next(200)); if ((double) this.ai[0] == 21.0 && this.type == 638) this.ai[1] = (float) (100 + Main.rand.Next(100)); if ((double) this.ai[0] == 22.0 && this.type == 656) this.ai[1] = (float) (200 + Main.rand.Next(200)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.netUpdate = true; } public bool NPCCanStickToWalls() { int num1 = (int) this.Center.X / 16; int num2 = (int) this.Center.Y / 16; int num3 = 0; for (int i = num1 - 1; i <= num1 + 1; ++i) { for (int j = num2 - 1; j <= num2 + 1; ++j) { Tile tileSafely = Framing.GetTileSafely(i, j); if ((!tileSafely.active() || !Main.tileSolid[(int) tileSafely.type] || TileID.Sets.Platforms[(int) tileSafely.type]) && tileSafely.wall > (ushort) 0) { ++num3; if (num3 > 4) return true; } } } return false; } private void AI_003_Fighters() { if ((double) Main.player[this.target].position.Y + (double) Main.player[this.target].height == (double) this.position.Y + (double) this.height) this.directionY = -1; bool flag1 = false; if (this.type == 624) { int num = (int) ((double) this.Center.X / 16.0); int j = (int) ((double) this.Bottom.Y / 16.0); if (Main.dayTime && WorldGen.InAPlaceWithWind(this.position, this.width, this.height)) { this.position = this.position + this.netOffset; int index1 = Dust.NewDust(this.position, this.width, this.height, 43, Alpha: 254, newColor: Color.White, Scale: 0.5f); Main.dust[index1].velocity *= 0.2f; this.position = this.position - this.netOffset; if (WorldGen.SolidTileAllowBottomSlope(num, j)) { for (int index2 = 0; index2 < 5; ++index2) { this.position = this.position + this.netOffset; int index3 = Dust.NewDust(this.position, this.width, this.height, 43, Alpha: 254, newColor: Color.White, Scale: 0.5f); Main.dust[index3].velocity *= 0.2f; this.position = this.position - this.netOffset; } if (Main.netMode != 1 && TileObject.CanPlace(num, j - 1, 567, 0, this.direction, out TileObject _, true) && WorldGen.PlaceTile(num, j - 1, 567, style: Main.rand.Next(5))) { if (Main.netMode == 2) NetMessage.SendTileSquare(-1, num, j - 1, 3); if (Main.netMode != 1) { if (this.IsNPCValidForBestiaryKillCredit()) Main.BestiaryTracker.Kills.RegisterKill(this); this.CountKillForBannersAndDropThem(); } this.life = 0; this.active = false; return; } } } } if (this.type == 466) { int num = 200; if ((double) this.ai[2] == 0.0) { this.alpha = num; this.TargetClosest(); if (!Main.player[this.target].dead && (double) (Main.player[this.target].Center - this.Center).Length() < 170.0) this.ai[2] = -16f; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y >= 0.0 && (double) this.velocity.Y <= 2.0 && !this.justHit) return; this.ai[2] = -16f; return; } if ((double) this.ai[2] < 0.0) { if (this.alpha > 0) { this.alpha -= num / 16; if (this.alpha < 0) this.alpha = 0; } ++this.ai[2]; if ((double) this.ai[2] != 0.0) return; this.ai[2] = 1f; this.velocity.X = (float) (this.direction * 2); return; } this.alpha = 0; } if (this.type == 166) { if (Main.netMode != 1 && Main.rand.Next(240) == 0) { this.ai[2] = (float) Main.rand.Next(-480, -60); this.netUpdate = true; } if ((double) this.ai[2] < 0.0) { this.TargetClosest(); if (this.justHit) this.ai[2] = 0.0f; if (Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) this.ai[2] = 0.0f; } if ((double) this.ai[2] < 0.0) { this.velocity.X *= 0.9f; if ((double) this.velocity.X > -0.1 && (double) this.velocity.X < 0.1) this.velocity.X = 0.0f; ++this.ai[2]; if ((double) this.ai[2] != 0.0) return; this.velocity.X = (float) this.direction * 0.1f; return; } } if (this.type == 461) { if (this.wet) { this.knockBackResist = 0.0f; this.ai[3] = -0.10101f; this.noGravity = true; Vector2 center = this.Center; this.width = 34; this.height = 24; this.position.X = center.X - (float) (this.width / 2); this.position.Y = center.Y - (float) (this.height / 2); this.TargetClosest(); if (this.collideX) this.velocity.X = -this.oldVelocity.X; if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; if (Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].Center, 1, 1)) { Vector2 vector2 = Main.player[this.target].Center - this.Center; vector2.Normalize(); this.velocity = (this.velocity * 19f + vector2 * 5f) / 20f; return; } float num = 5f; if ((double) this.velocity.Y > 0.0) num = 3f; if ((double) this.velocity.Y < 0.0) num = 8f; Vector2 vector2_1 = new Vector2((float) this.direction, -1f); vector2_1.Normalize(); vector2_1 *= num; if ((double) num < 5.0) { this.velocity = (this.velocity * 24f + vector2_1) / 25f; return; } this.velocity = (this.velocity * 9f + vector2_1) / 10f; return; } this.knockBackResist = 0.4f * Main.GameModeInfo.KnockbackToEnemiesMultiplier; this.noGravity = false; Vector2 center1 = this.Center; this.width = 18; this.height = 40; this.position.X = center1.X - (float) (this.width / 2); this.position.Y = center1.Y - (float) (this.height / 2); if ((double) this.ai[3] == -0.101010002195835) { this.ai[3] = 0.0f; float num = this.velocity.Length() * 2f; if ((double) num > 10.0) num = 10f; this.velocity.Normalize(); this.velocity = this.velocity * num; if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; this.spriteDirection = this.direction; } } if (this.type == 586) { if (this.alpha == (int) byte.MaxValue) { this.TargetClosest(); this.spriteDirection = this.direction; this.velocity.Y = -6f; this.netUpdate = true; for (int index = 0; index < 35; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.5f; } } this.alpha -= 15; if (this.alpha < 0) this.alpha = 0; this.position = this.position + this.netOffset; if (this.alpha != 0) { for (int index = 0; index < 2; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.3f; } } if (Main.rand.Next(3) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 0.0f; dust.alpha = 120; dust.scale = (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.3f; } this.position = this.position - this.netOffset; if (this.wet) { this.knockBackResist = 0.0f; this.ai[3] = -0.10101f; this.noGravity = true; Vector2 center = this.Center; this.position.X = center.X - (float) (this.width / 2); this.position.Y = center.Y - (float) (this.height / 2); this.TargetClosest(); if (this.collideX) this.velocity.X = -this.oldVelocity.X; if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; if (Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].Center, 1, 1)) { Vector2 vector2_2 = Main.player[this.target].Center - this.Center; vector2_2.Normalize(); float num = MathHelper.Clamp(1f + Math.Abs(this.Center.Y - Main.player[this.target].Center.Y) / 40f, 5f, 20f); Vector2 vector2_3 = vector2_2 * num; if ((double) this.velocity.Y > 0.0) { this.velocity = (this.velocity * 29f + vector2_3) / 30f; return; } this.velocity = (this.velocity * 4f + vector2_3) / 5f; return; } float num1 = 5f; if ((double) this.velocity.Y > 0.0) num1 = 3f; if ((double) this.velocity.Y < 0.0) num1 = 8f; Vector2 vector2 = new Vector2((float) this.direction, -1f); vector2.Normalize(); vector2 *= num1; if ((double) num1 < 5.0) { this.velocity = (this.velocity * 24f + vector2) / 25f; return; } this.velocity = (this.velocity * 9f + vector2) / 10f; return; } this.noGravity = false; Vector2 center2 = this.Center; this.position.X = center2.X - (float) (this.width / 2); this.position.Y = center2.Y - (float) (this.height / 2); if ((double) this.ai[3] == -0.101010002195835) { this.ai[3] = 0.0f; float num = this.velocity.Length() * 2f; if ((double) num > 15.0) num = 15f; this.velocity.Normalize(); this.velocity = this.velocity * num; if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; this.spriteDirection = this.direction; } } if (this.type == 379 || this.type == 380) { if ((double) this.ai[3] < 0.0) { this.directionY = -1; this.damage = 0; this.velocity.X *= 0.93f; if ((double) this.velocity.X > -0.1 && (double) this.velocity.X < 0.1) this.velocity.X = 0.0f; int index = (int) (-(double) this.ai[3] - 1.0); int num = Math.Sign(Main.npc[index].Center.X - this.Center.X); if (num != this.direction) { this.velocity.X = 0.0f; this.direction = num; this.netUpdate = true; } if (this.justHit && Main.netMode != 1 && (double) Main.npc[index].localAI[0] == 0.0) Main.npc[index].localAI[0] = 1f; if ((double) this.ai[0] < 1000.0) this.ai[0] = 1000f; if ((double) ++this.ai[0] < 1300.0) return; this.ai[0] = 1000f; this.netUpdate = true; return; } if ((double) this.ai[0] >= 1000.0) this.ai[0] = 0.0f; this.damage = this.defDamage; } if (this.type == 383 && (double) this.ai[2] == 0.0 && (double) this.localAI[0] == 0.0 && Main.netMode != 1) { int index = NPC.NewNPC((int) this.Center.X, (int) this.Center.Y, 384, this.whoAmI); this.ai[2] = (float) (index + 1); this.localAI[0] = -1f; this.netUpdate = true; Main.npc[index].ai[0] = (float) this.whoAmI; Main.npc[index].netUpdate = true; } if (this.type == 383) { int index = (int) this.ai[2] - 1; if (index != -1 && Main.npc[index].active && Main.npc[index].type == 384) { this.dontTakeDamage = true; } else { this.dontTakeDamage = false; this.ai[2] = 0.0f; if ((double) this.localAI[0] == -1.0) this.localAI[0] = 180f; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; } } if (this.type == 482) { int num2 = 300; int num3 = 120; this.dontTakeDamage = false; if ((double) this.ai[2] < 0.0) { this.dontTakeDamage = true; ++this.ai[2]; this.velocity.X *= 0.9f; if ((double) Math.Abs(this.velocity.X) < 0.001) this.velocity.X = 1f / 1000f * (float) this.direction; if ((double) Math.Abs(this.velocity.Y) > 1.0) this.ai[2] += 10f; if ((double) this.ai[2] < 0.0) return; this.netUpdate = true; this.velocity.X += (float) this.direction * 0.3f; return; } if ((double) this.ai[2] < (double) num2) { if (this.justHit) this.ai[2] += 15f; ++this.ai[2]; } else if ((double) this.velocity.Y == 0.0) { this.ai[2] = (float) -num3; this.netUpdate = true; } } Microsoft.Xna.Framework.Rectangle hitbox; if (this.type == 631) { if (this.target < 0 || this.target == (int) byte.MaxValue || Main.player[this.target].dead || !Main.player[this.target].active) this.TargetClosest((double) this.ai[2] > 0.0); Player player = Main.player[this.target]; bool flag2 = !player.dead && player.active && (double) this.Center.Distance(player.Center) < 320.0; int num4 = 24; if ((double) this.ai[2] == 0.0) { this.ai[3] = 65f; if (flag2 && Collision.CanHit((Entity) player, (Entity) this)) { this.ai[2] = 100f; this.ai[3] = 0.0f; this.velocity.X = (float) this.direction * 0.01f; this.netUpdate = true; } } else { if ((double) this.ai[2] < 100.0) { ++this.ai[2]; this.velocity.X *= 0.9f; if ((double) Math.Abs(this.velocity.X) < 0.001) this.velocity.X = 0.0f; if ((double) Math.Abs(this.velocity.Y) > 1.0) this.ai[2] = 0.0f; if ((double) this.ai[2] == (double) (100 - num4 / 2) && Main.netMode != 1 && !player.Hitbox.Intersects(this.Hitbox) && Collision.CanHit((Entity) player, (Entity) this)) { float num5 = 10f; Vector2 center = this.Center; Vector2 vec = this.DirectionTo(Main.player[this.target].Center) * num5; if (vec.HasNaNs()) vec = new Vector2((float) this.direction * num5, 0.0f); int Damage = this.damage / 4; Vector2 vector2 = (vec + Utils.RandomVector2(Main.rand, -0.8f, 0.8f)).SafeNormalize(Vector2.Zero) * num5; Projectile.NewProjectile(center.X, center.Y, vector2.X, vector2.Y, 909, Damage, 1f, Main.myPlayer); } if ((double) this.ai[2] < 100.0) return; this.ai[2] = 100f; this.ai[3] = 0.0f; this.velocity.X = (float) this.direction * 0.01f; this.netUpdate = true; return; } if ((double) this.velocity.Y == 0.0 && flag2) { hitbox = player.Hitbox; if (hitbox.Intersects(this.Hitbox) || Collision.CanHit((Entity) player, (Entity) this)) { this.ai[2] = (float) (100 - num4); this.netUpdate = true; } } } } if (this.type == 480) { int num6 = 180; int num7 = 300; int num8 = 180; int num9 = 60; int num10 = 20; if (this.life < this.lifeMax / 3) { num6 = 120; num7 = 240; num8 = 240; num9 = 90; } if ((double) this.ai[2] > 0.0) --this.ai[2]; else if ((double) this.ai[2] == 0.0) { if (((double) Main.player[this.target].Center.X < (double) this.Center.X && this.direction < 0 || (double) Main.player[this.target].Center.X > (double) this.Center.X && this.direction > 0) && (double) this.velocity.Y == 0.0 && (double) this.Distance(Main.player[this.target].Center) < 900.0 && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { this.ai[2] = (float) (-num8 - num10); this.netUpdate = true; } } else { if ((double) this.ai[2] < 0.0 && (double) this.ai[2] < (double) -num8) { this.position = this.position + this.netOffset; this.velocity.X *= 0.9f; if ((double) this.velocity.Y < -2.0 || (double) this.velocity.Y > 4.0 || this.justHit) { this.ai[2] = (float) num6; } else { ++this.ai[2]; if ((double) this.ai[2] == 0.0) this.ai[2] = (float) num7; } float num11 = this.ai[2] + (float) num8 + (float) num10; if ((double) num11 == 1.0) SoundEngine.PlaySound(4, (int) this.position.X, (int) this.position.Y, 17); if ((double) num11 < (double) num10) { Vector2 Position = this.Top + new Vector2((float) (this.spriteDirection * 6), 6f); float num12 = MathHelper.Lerp(20f, 30f, (float) (((double) num11 * 3.0 + 50.0) / 182.0)); double num13 = (double) Main.rand.NextFloat(); for (float num14 = 0.0f; (double) num14 < 2.0; ++num14) { Vector2 vector2 = Vector2.UnitY.RotatedByRandom(6.28318548202515) * (float) ((double) Main.rand.NextFloat() * 0.5 + 0.5); Dust dust = Main.dust[Dust.NewDust(Position, 0, 0, 228)]; dust.position = Position + vector2 * num12; dust.noGravity = true; dust.velocity = vector2 * 2f; dust.scale = (float) (0.5 + (double) Main.rand.NextFloat() * 0.5); } } Lighting.AddLight(this.Center, 0.9f, 0.75f, 0.1f); this.position = this.position - this.netOffset; return; } if ((double) this.ai[2] < 0.0 && (double) this.ai[2] >= (double) -num8) { this.position = this.position + this.netOffset; Lighting.AddLight(this.Center, 0.9f, 0.75f, 0.1f); this.velocity.X *= 0.9f; if ((double) this.velocity.Y < -2.0 || (double) this.velocity.Y > 4.0 || this.justHit) { this.ai[2] = (float) num6; } else { ++this.ai[2]; if ((double) this.ai[2] == 0.0) this.ai[2] = (float) num7; } float num15 = this.ai[2] + (float) num8; if ((double) num15 < 180.0 && (Main.rand.Next(3) == 0 || (double) this.ai[2] % 3.0 == 0.0)) { Vector2 Position = this.Top + new Vector2((float) (this.spriteDirection * 10), 10f); float num16 = MathHelper.Lerp(20f, 30f, (float) (((double) num15 * 3.0 + 50.0) / 182.0)); double num17 = (double) Main.rand.NextFloat(); for (float num18 = 0.0f; (double) num18 < 1.0; ++num18) { Vector2 vector2 = Vector2.UnitY.RotatedByRandom(6.28318548202515) * (float) ((double) Main.rand.NextFloat() * 0.5 + 0.5); Dust dust = Main.dust[Dust.NewDust(Position, 0, 0, 228)]; dust.position = Position + vector2 * num16; dust.noGravity = true; dust.velocity = vector2 * 4f; dust.scale = 0.5f + Main.rand.NextFloat(); } } this.position = this.position - this.netOffset; if (Main.netMode == 2) return; Player player1 = Main.player[Main.myPlayer]; int player2 = Main.myPlayer; if (player1.dead || !player1.active || player1.FindBuffIndex(156) != -1) return; Vector2 vector2_4 = player1.Center - this.Center; if ((double) vector2_4.Length() >= 700.0) return; bool flag3 = (double) vector2_4.Length() < 30.0; if (!flag3) { float x = 0.7853982f.ToRotationVector2().X; Vector2 vector2_5 = Vector2.Normalize(vector2_4); if ((double) vector2_5.X > (double) x || (double) vector2_5.X < -(double) x) flag3 = true; } if (((double) player1.Center.X >= (double) this.Center.X || this.direction >= 0 || player1.direction <= 0) && ((double) player1.Center.X <= (double) this.Center.X || this.direction <= 0 || player1.direction >= 0) || !flag3 || (Collision.CanHitLine(this.Center, 1, 1, player1.Center, 1, 1) || Collision.CanHitLine(this.Center - Vector2.UnitY * 16f, 1, 1, player1.Center, 1, 1) ? 1 : (Collision.CanHitLine(this.Center + Vector2.UnitY * 8f, 1, 1, player1.Center, 1, 1) ? 1 : 0)) == 0 || player1.creativeGodMode) return; player1.AddBuff(156, num9 + (int) this.ai[2] * -1); return; } } } if (this.type == 471) { if ((double) this.ai[3] < 0.0) { this.knockBackResist = 0.0f; this.defense = (int) ((double) this.defDefense * 1.1); this.noGravity = true; this.noTileCollide = true; if ((double) this.velocity.X < 0.0) this.direction = -1; else if ((double) this.velocity.X > 0.0) this.direction = 1; this.rotation = this.velocity.X * 0.1f; if (Main.netMode != 1) { ++this.localAI[3]; if ((double) this.localAI[3] > (double) Main.rand.Next(20, 180)) { this.localAI[3] = 0.0f; Vector2 vector2 = this.Center + this.velocity; NPC.NewNPC((int) vector2.X, (int) vector2.Y, 30); } } } else { this.localAI[3] = 0.0f; this.knockBackResist = 0.35f * Main.GameModeInfo.KnockbackToEnemiesMultiplier; this.rotation *= 0.9f; this.defense = this.defDefense; this.noGravity = false; this.noTileCollide = false; } if ((double) this.ai[3] == 1.0) { this.knockBackResist = 0.0f; this.defense += 10; } if ((double) this.ai[3] == -1.0) { this.TargetClosest(); float num19 = 8f; float num20 = 40f; Vector2 vector2 = Main.player[this.target].Center - this.Center; float num21 = vector2.Length(); float num22 = num19 + num21 / 200f; vector2.Normalize(); vector2 *= num22; this.velocity = (this.velocity * (num20 - 1f) + vector2) / num20; if ((double) num21 >= 500.0 || Collision.SolidCollision(this.position, this.width, this.height)) return; this.ai[3] = 0.0f; this.ai[2] = 0.0f; return; } if ((double) this.ai[3] == -2.0) { this.velocity.Y -= 0.2f; if ((double) this.velocity.Y < -10.0) this.velocity.Y = -10f; if ((double) Main.player[this.target].Center.Y - (double) this.Center.Y > 200.0) { this.TargetClosest(); this.ai[3] = -3f; this.ai[2] = (double) Main.player[this.target].Center.X <= (double) this.Center.X ? -1f : 1f; } this.velocity.X *= 0.99f; return; } if ((double) this.ai[3] == -3.0) { if (this.direction == 0) this.TargetClosest(); if ((double) this.ai[2] == 0.0) this.ai[2] = (float) this.direction; this.velocity.Y *= 0.9f; this.velocity.X += this.ai[2] * 0.3f; if ((double) this.velocity.X > 10.0) this.velocity.X = 10f; if ((double) this.velocity.X < -10.0) this.velocity.X = -10f; float num = Main.player[this.target].Center.X - this.Center.X; if ((double) this.ai[2] < 0.0 && (double) num > 300.0 || (double) this.ai[2] > 0.0 && (double) num < -300.0) { this.ai[3] = -4f; this.ai[2] = 0.0f; return; } if ((double) Math.Abs(num) <= 800.0) return; this.ai[3] = -1f; this.ai[2] = 0.0f; return; } if ((double) this.ai[3] == -4.0) { ++this.ai[2]; this.velocity.Y += 0.1f; if ((double) this.velocity.Length() > 4.0) this.velocity = this.velocity * 0.9f; int index4 = (int) this.Center.X / 16; int index5 = (int) ((double) this.position.Y + (double) this.height + 12.0) / 16; bool flag4 = false; for (int index6 = index4 - 1; index6 <= index4 + 1; ++index6) { if (Main.tile[index6, index5] == null) Main.tile[index4, index5] = new Tile(); if (Main.tile[index6, index5].active() && Main.tileSolid[(int) Main.tile[index6, index5].type]) flag4 = true; } if (flag4 && !Collision.SolidCollision(this.position, this.width, this.height)) { this.ai[3] = 0.0f; this.ai[2] = 0.0f; } else if ((double) this.ai[2] > 300.0 || (double) this.Center.Y > (double) Main.player[this.target].Center.Y + 200.0) { this.ai[3] = -1f; this.ai[2] = 0.0f; } } else { if ((double) this.ai[3] == 1.0) { Vector2 center = this.Center; center.Y -= 70f; this.velocity.X *= 0.8f; ++this.ai[2]; if ((double) this.ai[2] == 60.0) { if (Main.netMode != 1) NPC.NewNPC((int) center.X, (int) center.Y + 18, 472); } else if ((double) this.ai[2] >= 90.0) { this.ai[3] = -2f; this.ai[2] = 0.0f; } for (int index7 = 0; index7 < 2; ++index7) { Vector2 vector2_6 = center; Vector2 vector2_7 = new Vector2((float) Main.rand.Next(-100, 101), (float) Main.rand.Next(-100, 101)); vector2_7.Normalize(); Vector2 vector2_8 = vector2_7 * ((float) Main.rand.Next(0, 100) * 0.1f); Vector2 vector2_9 = vector2_8; Vector2 Position = vector2_6 + vector2_9; vector2_8.Normalize(); vector2_7 = vector2_8 * ((float) Main.rand.Next(50, 90) * 0.1f); Color newColor = new Color(); int index8 = Dust.NewDust(Position, 1, 1, 27, newColor: newColor); Main.dust[index8].velocity = -vector2_7 * 0.3f; Main.dust[index8].alpha = 100; if (Main.rand.Next(2) == 0) { Main.dust[index8].noGravity = true; Main.dust[index8].scale += 0.3f; } } return; } ++this.ai[2]; int num = 10; if ((double) this.velocity.Y == 0.0 && NPC.CountNPCS(472) < num) { if ((double) this.ai[2] >= 180.0) { this.ai[2] = 0.0f; this.ai[3] = 1f; } } else { if (NPC.CountNPCS(472) >= num) ++this.ai[2]; if ((double) this.ai[2] >= 360.0) { this.ai[2] = 0.0f; this.ai[3] = -2f; this.velocity.Y -= 3f; } } if (this.target >= 0 && !Main.player[this.target].dead && (double) (Main.player[this.target].Center - this.Center).Length() > 800.0) { this.ai[3] = -1f; this.ai[2] = 0.0f; } } if (Main.player[this.target].dead) { this.TargetClosest(); if (Main.player[this.target].dead) this.EncourageDespawn(1); } } if (this.type == 419) { this.reflectsProjectiles = false; this.takenDamageMultiplier = 1f; int num23 = 6; int num24 = 10; float num25 = 16f; if ((double) this.ai[2] > 0.0) --this.ai[2]; if ((double) this.ai[2] == 0.0) { if (((double) Main.player[this.target].Center.X < (double) this.Center.X && this.direction < 0 || (double) Main.player[this.target].Center.X > (double) this.Center.X && this.direction > 0) && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { this.ai[2] = -1f; this.netUpdate = true; this.TargetClosest(); } } else { if ((double) this.ai[2] < 0.0 && (double) this.ai[2] > (double) -num23) { --this.ai[2]; this.velocity.X *= 0.9f; return; } if ((double) this.ai[2] == (double) -num23) { --this.ai[2]; this.TargetClosest(); Vector2 vec = this.DirectionTo(Main.player[this.target].Top + new Vector2(0.0f, -30f)); if (vec.HasNaNs()) vec = Vector2.Normalize(new Vector2((float) this.spriteDirection, -1f)); this.velocity = vec * num25; this.netUpdate = true; return; } if ((double) this.ai[2] < (double) -num23) { --this.ai[2]; if ((double) this.velocity.Y == 0.0) this.ai[2] = 60f; else if ((double) this.ai[2] < (double) (-num23 - num24)) { this.velocity.Y += 0.15f; if ((double) this.velocity.Y > 24.0) this.velocity.Y = 24f; } this.reflectsProjectiles = true; this.takenDamageMultiplier = 3f; if (!this.justHit) return; this.ai[2] = 60f; this.netUpdate = true; return; } } } if (this.type == 415) { int num26 = 42; int num27 = 18; if (this.justHit) { this.ai[2] = 120f; this.netUpdate = true; } if ((double) this.ai[2] > 0.0) --this.ai[2]; if ((double) this.ai[2] == 0.0) { int num28 = 0; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 516) ++num28; } if (num28 > 6) this.ai[2] = 90f; else if (((double) Main.player[this.target].Center.X < (double) this.Center.X && this.direction < 0 || (double) Main.player[this.target].Center.X > (double) this.Center.X && this.direction > 0) && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { this.ai[2] = -1f; this.netUpdate = true; this.TargetClosest(); } } else if ((double) this.ai[2] < 0.0 && (double) this.ai[2] > (double) -num26) { --this.ai[2]; if ((double) this.ai[2] == (double) -num26) this.ai[2] = (float) (180 + 30 * Main.rand.Next(10)); this.velocity.X *= 0.8f; if ((double) this.ai[2] != (double) -num27 && (double) this.ai[2] != (double) (-num27 - 8) && (double) this.ai[2] != (double) (-num27 - 16)) return; this.position = this.position + this.netOffset; for (int index = 0; index < 20; ++index) { Vector2 Position = this.Center + Vector2.UnitX * (float) this.spriteDirection * 40f; Dust dust = Main.dust[Dust.NewDust(Position, 0, 0, 259)]; Vector2 vector2 = Vector2.UnitY.RotatedByRandom(6.28318548202515); dust.position = Position + vector2 * 4f; dust.velocity = vector2 * 2f + Vector2.UnitX * Main.rand.NextFloat() * (float) this.spriteDirection * 3f; dust.scale = (float) (0.300000011920929 + (double) vector2.X * (double) -this.spriteDirection); dust.fadeIn = 0.7f; dust.noGravity = true; } this.position = this.position - this.netOffset; if ((double) this.velocity.X > -0.5 && (double) this.velocity.X < 0.5) this.velocity.X = 0.0f; if (Main.netMode == 1) return; NPC.NewNPC((int) this.Center.X + this.spriteDirection * 45, (int) this.Center.Y + 8, 516, Target: this.target); return; } } if (this.type == 428) { ++this.localAI[0]; if ((double) this.localAI[0] >= 300.0) { int startX = (int) this.Center.X / 16 - 1; int startY = (int) this.Center.Y / 16 - 1; if (!Collision.SolidTiles(startX, startX + 2, startY, startY + 1) && Main.netMode != 1) { this.Transform(427); this.life = this.lifeMax; this.localAI[0] = 0.0f; return; } } int maxValue = (double) this.localAI[0] >= 60.0 ? ((double) this.localAI[0] >= 120.0 ? ((double) this.localAI[0] >= 180.0 ? ((double) this.localAI[0] >= 240.0 ? ((double) this.localAI[0] >= 300.0 ? 1 : 1) : 2) : 4) : 8) : 16; if (Main.rand.Next(maxValue) == 0) { this.position = this.position + this.netOffset; Dust dust = Main.dust[Dust.NewDust(this.position, this.width, this.height, 229)]; dust.noGravity = true; dust.scale = 1f; dust.noLight = true; dust.velocity = this.DirectionFrom(dust.position) * dust.velocity.Length(); dust.position -= dust.velocity * 5f; dust.position.X += (float) (this.direction * 6); dust.position.Y += 4f; this.position = this.position - this.netOffset; } } if (this.type == 427) { ++this.localAI[0]; this.localAI[0] += Math.Abs(this.velocity.X) / 2f; if ((double) this.localAI[0] >= 1200.0 && Main.netMode != 1) { int startX = (int) this.Center.X / 16 - 2; int startY = (int) this.Center.Y / 16 - 3; if (!Collision.SolidTiles(startX, startX + 4, startY, startY + 4)) { this.Transform(426); this.life = this.lifeMax; this.localAI[0] = 0.0f; return; } } int maxValue = (double) this.localAI[0] >= 360.0 ? ((double) this.localAI[0] >= 720.0 ? ((double) this.localAI[0] >= 1080.0 ? ((double) this.localAI[0] >= 1440.0 ? ((double) this.localAI[0] >= 1800.0 ? 1 : 1) : 2) : 6) : 16) : 32; if (Main.rand.Next(maxValue) == 0) { this.position = this.position + this.netOffset; Dust dust = Main.dust[Dust.NewDust(this.position, this.width, this.height, 229)]; dust.noGravity = true; dust.scale = 1f; dust.noLight = true; this.position = this.position - this.netOffset; } } if (this.type == 590) { this.position = this.position + this.netOffset; int num29 = (int) ((double) this.position.Y + 6.0) / 16; if (this.spriteDirection < 0) { int num30 = (int) ((double) this.Center.X - 22.0) / 16; Tile tileSafely1 = Framing.GetTileSafely(num30, num29); Tile tileSafely2 = Framing.GetTileSafely(num30 + 1, num29); if (WorldGen.InWorld(num30, num29) && tileSafely2.liquid == (byte) 0 && tileSafely1.liquid == (byte) 0) { Lighting.AddLight(num30, num29, 1f, 0.95f, 0.8f); if (Main.rand.Next(30) == 0) Dust.NewDust(new Vector2(this.Center.X - 22f, this.position.Y + 6f), 1, 1, 6); } } else { int num31 = (int) ((double) this.Center.X + 14.0) / 16; Tile tileSafely3 = Framing.GetTileSafely(num31, num29); Tile tileSafely4 = Framing.GetTileSafely(num31 - 1, num29); if (WorldGen.InWorld(num31, num29) && tileSafely4.liquid == (byte) 0 && tileSafely3.liquid == (byte) 0) { Lighting.AddLight(num31, num29, 1f, 0.95f, 0.8f); if (Main.rand.Next(30) == 0) Dust.NewDust(new Vector2(this.Center.X + 14f, this.position.Y + 6f), 1, 1, 6); } } this.position = this.position - this.netOffset; } else if (this.type == 591) { this.position = this.position + this.netOffset; if (!this.wet) { if (this.spriteDirection < 0) { Lighting.AddLight(new Vector2(this.Center.X - 36f, this.position.Y + 24f), 1f, 0.95f, 0.8f); if ((double) this.ai[2] == 0.0 && Main.rand.Next(30) == 0) Dust.NewDust(new Vector2(this.Center.X - 36f, this.position.Y + 24f), 1, 1, 6); } else { Lighting.AddLight(new Vector2(this.Center.X + 28f, this.position.Y + 24f), 1f, 0.95f, 0.8f); if ((double) this.ai[2] == 0.0 && Main.rand.Next(30) == 0) Dust.NewDust(new Vector2(this.Center.X + 28f, this.position.Y + 24f), 1, 1, 6); } } this.position = this.position - this.netOffset; } bool flag5 = false; bool flag6 = false; if ((double) this.velocity.X == 0.0) flag6 = true; if (this.justHit) flag6 = false; if (Main.netMode != 1 && this.type == 198 && (double) this.life <= (double) this.lifeMax * 0.55) this.Transform(199); if (Main.netMode != 1 && this.type == 348 && (double) this.life <= (double) this.lifeMax * 0.55) this.Transform(349); int num32 = 60; if (this.type == 120) { num32 = 180; if ((double) this.ai[3] == -120.0) { this.velocity = this.velocity * 0.0f; this.ai[3] = 0.0f; this.position = this.position + this.netOffset; SoundEngine.PlaySound(SoundID.Item8, this.position); Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num33 = this.oldPos[2].X + (float) this.width * 0.5f - vector2.X; float num34 = this.oldPos[2].Y + (float) this.height * 0.5f - vector2.Y; float num35 = 2f / (float) Math.Sqrt((double) num33 * (double) num33 + (double) num34 * (double) num34); float SpeedX = num33 * num35; float SpeedY = num34 * num35; for (int index9 = 0; index9 < 20; ++index9) { int index10 = Dust.NewDust(this.position, this.width, this.height, 71, SpeedX, SpeedY, 200, Scale: 2f); Main.dust[index10].noGravity = true; Main.dust[index10].velocity.X *= 2f; } for (int index11 = 0; index11 < 20; ++index11) { int index12 = Dust.NewDust(this.oldPos[2], this.width, this.height, 71, -SpeedX, -SpeedY, 200, Scale: 2f); Main.dust[index12].noGravity = true; Main.dust[index12].velocity.X *= 2f; } this.position = this.position - this.netOffset; } } bool flag7 = false; bool flag8 = true; if (this.type == 343 || this.type == 47 || this.type == 67 || this.type == 109 || this.type == 110 || this.type == 111 || this.type == 120 || this.type == 163 || this.type == 164 || this.type == 239 || this.type == 168 || this.type == 199 || this.type == 206 || this.type == 214 || this.type == 215 || this.type == 216 || this.type == 217 || this.type == 218 || this.type == 219 || this.type == 220 || this.type == 226 || this.type == 243 || this.type == 251 || this.type == 257 || this.type == 258 || this.type == 290 || this.type == 291 || this.type == 292 || this.type == 293 || this.type == 305 || this.type == 306 || this.type == 307 || this.type == 308 || this.type == 309 || this.type == 348 || this.type == 349 || this.type == 350 || this.type == 351 || this.type == 379 || this.type >= 430 && this.type <= 436 || this.type == 591 || this.type == 380 || this.type == 381 || this.type == 382 || this.type == 383 || this.type == 386 || this.type == 391 || this.type >= 449 && this.type <= 452 || this.type == 466 || this.type == 464 || this.type == 166 || this.type == 469 || this.type == 468 || this.type == 471 || this.type == 470 || this.type == 480 || this.type == 481 || this.type == 482 || this.type == 411 || this.type == 424 || this.type == 409 || this.type >= 494 && this.type <= 506 || this.type == 425 || this.type == 427 || this.type == 426 || this.type == 428 || this.type == 580 || this.type == 508 || this.type == 415 || this.type == 419 || this.type == 520 || this.type >= 524 && this.type <= 527 || this.type == 528 || this.type == 529 || this.type == 530 || this.type == 532 || this.type == 582 || this.type == 624 || this.type == 631) flag8 = false; bool flag9 = false; switch (this.type) { case 425: case 471: flag9 = true; break; } bool flag10 = true; switch (this.type) { case 110: case 111: case 206: case 214: case 215: case 216: case 291: case 292: case 293: case 350: case 379: case 380: case 381: case 382: case 409: case 411: case 424: case 426: case 466: case 498: case 499: case 500: case 501: case 502: case 503: case 504: case 505: case 506: case 520: if ((double) this.ai[2] > 0.0) { flag10 = false; break; } break; } if (!flag9 & flag10) { if ((double) this.velocity.Y == 0.0 && ((double) this.velocity.X > 0.0 && this.direction < 0 || (double) this.velocity.X < 0.0 && this.direction > 0)) flag7 = true; if ((((double) this.position.X == (double) this.oldPosition.X ? 1 : ((double) this.ai[3] >= (double) num32 ? 1 : 0)) | (flag7 ? 1 : 0)) != 0) ++this.ai[3]; else if ((double) Math.Abs(this.velocity.X) > 0.9 && (double) this.ai[3] > 0.0) --this.ai[3]; if ((double) this.ai[3] > (double) (num32 * 10)) this.ai[3] = 0.0f; if (this.justHit) this.ai[3] = 0.0f; if ((double) this.ai[3] == (double) num32) this.netUpdate = true; hitbox = Main.player[this.target].Hitbox; if (hitbox.Intersects(this.Hitbox)) this.ai[3] = 0.0f; } if (this.type == 463 && Main.netMode != 1) { if ((double) this.localAI[3] > 0.0) --this.localAI[3]; if (this.justHit && (double) this.localAI[3] <= 0.0 && Main.rand.Next(3) == 0) { this.localAI[3] = 30f; int length = Main.rand.Next(3, 6); int[] numArray = new int[length]; int maxValue = 0; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && !Main.player[index].dead && Collision.CanHitLine(this.position, this.width, this.height, Main.player[index].position, Main.player[index].width, Main.player[index].height)) { numArray[maxValue] = index; ++maxValue; if (maxValue == length) break; } } if (maxValue > 1) { for (int index13 = 0; index13 < 100; ++index13) { int index14 = Main.rand.Next(maxValue); int index15 = index14; while (index15 == index14) index15 = Main.rand.Next(maxValue); int num36 = numArray[index14]; numArray[index14] = numArray[index15]; numArray[index15] = num36; } } Vector2 vector2_10 = new Vector2(-1f, -1f); for (int index = 0; index < maxValue; ++index) { Vector2 vector2_11 = Main.npc[numArray[index]].Center - this.Center; vector2_11.Normalize(); vector2_10 += vector2_11; } vector2_10.Normalize(); for (int index = 0; index < length; ++index) { float num37 = (float) Main.rand.Next(8, 13); Vector2 vector2_12 = new Vector2((float) Main.rand.Next(-100, 101), (float) Main.rand.Next(-100, 101)); vector2_12.Normalize(); if (maxValue > 0) { vector2_12 += vector2_10; vector2_12.Normalize(); } vector2_12 *= num37; if (maxValue > 0) { --maxValue; vector2_12 = Main.player[numArray[maxValue]].Center - this.Center; vector2_12.Normalize(); vector2_12 *= num37; } Projectile.NewProjectile(this.Center.X, this.position.Y + (float) (this.width / 4), vector2_12.X, vector2_12.Y, 498, (int) ((double) this.damage * 0.15), 1f); } } } if (this.type == 460) this.knockBackResist = (double) this.velocity.Y < -(double) NPC.gravity || (double) this.velocity.Y > (double) NPC.gravity ? 0.0f : 0.25f * Main.GameModeInfo.KnockbackToEnemiesMultiplier; if (this.type == 469) { this.knockBackResist = 0.45f * Main.GameModeInfo.KnockbackToEnemiesMultiplier; if ((double) this.ai[2] == 1.0) this.knockBackResist = 0.0f; bool flag11 = false; int num38 = (int) this.Center.X / 16; int num39 = (int) this.Center.Y / 16; for (int index16 = num38 - 1; index16 <= num38 + 1; ++index16) { for (int index17 = num39 - 1; index17 <= num39 + 1; ++index17) { if (Main.tile[index16, index17] != null && Main.tile[index16, index17].wall > (ushort) 0) { flag11 = true; break; } } if (flag11) break; } if ((double) this.ai[2] == 0.0 & flag11) { if ((double) this.velocity.Y == 0.0) { flag1 = true; this.velocity.Y = -4.6f; this.velocity.X *= 1.3f; } else if ((double) this.velocity.Y > 0.0 && !Main.player[this.target].dead) this.ai[2] = 1f; } if (flag11 && (double) this.ai[2] == 1.0 && !Main.player[this.target].dead && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { Vector2 vector2 = Main.player[this.target].Center - this.Center; float num40 = vector2.Length(); vector2.Normalize(); this.velocity = (this.velocity * 29f + vector2 * (float) (4.5 + (double) num40 / 300.0)) / 30f; this.noGravity = true; this.ai[2] = 1f; return; } this.noGravity = false; this.ai[2] = 0.0f; } if (this.type == 462 && (double) this.velocity.Y == 0.0 && (double) (Main.player[this.target].Center - this.Center).Length() < 150.0 && (double) Math.Abs(this.velocity.X) > 3.0 && ((double) this.velocity.X < 0.0 && (double) this.Center.X > (double) Main.player[this.target].Center.X || (double) this.velocity.X > 0.0 && (double) this.Center.X < (double) Main.player[this.target].Center.X)) { flag1 = true; this.velocity.X *= 1.75f; this.velocity.Y -= 4.5f; if ((double) this.Center.Y - (double) Main.player[this.target].Center.Y > 20.0) this.velocity.Y -= 0.5f; if ((double) this.Center.Y - (double) Main.player[this.target].Center.Y > 40.0) --this.velocity.Y; if ((double) this.Center.Y - (double) Main.player[this.target].Center.Y > 80.0) this.velocity.Y -= 1.5f; if ((double) this.Center.Y - (double) Main.player[this.target].Center.Y > 100.0) this.velocity.Y -= 1.5f; if ((double) Math.Abs(this.velocity.X) > 7.0) { if ((double) this.velocity.X < 0.0) this.velocity.X = -7f; else this.velocity.X = 7f; } } if (this.type == 624 && this.target < (int) byte.MaxValue) { if (!Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { this.ai[3] = (float) num32; this.directionY = -1; if (this.type == 624 && (!Main.dayTime || !WorldGen.InAPlaceWithWind(this.position, this.width, this.height)) && (double) (this.Center - Main.player[this.target].Center).Length() > 500.0) { this.velocity.X *= 0.95f; if ((double) this.velocity.X <= -0.1 || (double) this.velocity.X >= 0.1) return; this.velocity.X = 0.0f; return; } } else if ((double) Main.player[this.target].Center.Y > (double) this.Center.Y - 128.0) this.ai[3] = 0.0f; } if ((double) this.ai[3] < (double) num32 && NPC.DespawnEncouragement_AIStyle3_Fighters_NotDiscouraged(this.type, this.position, this)) { if ((this.type == 3 || this.type == 591 || this.type == 590 || this.type == 331 || this.type == 332 || this.type == 21 || this.type >= 449 && this.type <= 452 || this.type == 31 || this.type == 294 || this.type == 295 || this.type == 296 || this.type == 77 || this.type == 110 || this.type == 132 || this.type == 167 || this.type == 161 || this.type == 162 || this.type == 186 || this.type == 187 || this.type == 188 || this.type == 189 || this.type == 197 || this.type == 200 || this.type == 201 || this.type == 202 || this.type == 203 || this.type == 223 || this.type == 291 || this.type == 292 || this.type == 293 || this.type == 320 || this.type == 321 || this.type == 319 || this.type == 481 || this.type == 632 || this.type == 635) && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(14, (int) this.position.X, (int) this.position.Y); if ((this.type == 489 || this.type == 586) && Main.rand.Next(800) == 0) SoundEngine.PlaySound(14, (int) this.position.X, (int) this.position.Y, this.type); if ((this.type == 78 || this.type == 79 || this.type == 80 || this.type == 630) && Main.rand.Next(500) == 0) SoundEngine.PlaySound(26, (int) this.position.X, (int) this.position.Y); if (this.type == 159 && Main.rand.Next(500) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 7); if (this.type == 162 && Main.rand.Next(500) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 6); if (this.type == 181 && Main.rand.Next(500) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 8); if (this.type >= 269 && this.type <= 280 && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(14, (int) this.position.X, (int) this.position.Y); this.TargetClosest(); if (this.directionY > 0 && (double) Main.player[this.target].Center.Y <= (double) this.Bottom.Y) this.directionY = -1; } else if ((double) this.ai[2] <= 0.0 || !NPC.DespawnEncouragement_AIStyle3_Fighters_CanBeBusyWithAction(this.type)) { if (Main.dayTime && (double) this.position.Y / 16.0 < Main.worldSurface && this.type != 624 && this.type != 631) this.EncourageDespawn(10); if ((double) this.velocity.X == 0.0) { if ((double) this.velocity.Y == 0.0) { ++this.ai[0]; if ((double) this.ai[0] >= 2.0) { this.direction *= -1; this.spriteDirection = this.direction; this.ai[0] = 0.0f; } } } else this.ai[0] = 0.0f; if (this.direction == 0) this.direction = 1; } if (this.type == 159 || this.type == 349) { if (this.type == 159 && ((double) this.velocity.X > 0.0 && this.direction < 0 || (double) this.velocity.X < 0.0 && this.direction > 0)) this.velocity.X *= 0.95f; if ((double) this.velocity.X < -6.0 || (double) this.velocity.X > 6.0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < 6.0 && this.direction == 1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.99f; this.velocity.X += 0.07f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; } else if ((double) this.velocity.X > -6.0 && this.direction == -1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.99f; this.velocity.X -= 0.07f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; } } else if (this.type == 199) { if ((double) this.velocity.X < -4.0 || (double) this.velocity.X > 4.0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < 4.0 && this.direction == 1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.8f; this.velocity.X += 0.1f; if ((double) this.velocity.X > 4.0) this.velocity.X = 4f; } else if ((double) this.velocity.X > -4.0 && this.direction == -1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.8f; this.velocity.X -= 0.1f; if ((double) this.velocity.X < -4.0) this.velocity.X = -4f; } } else if (this.type == 120 || this.type == 166 || this.type == 213 || this.type == 258 || this.type == 528 || this.type == 529) { if ((double) this.velocity.X < -3.0 || (double) this.velocity.X > 3.0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < 3.0 && this.direction == 1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.99f; this.velocity.X += 0.07f; if ((double) this.velocity.X > 3.0) this.velocity.X = 3f; } else if ((double) this.velocity.X > -3.0 && this.direction == -1) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.99f; this.velocity.X -= 0.07f; if ((double) this.velocity.X < -3.0) this.velocity.X = -3f; } } else if (this.type == 461 || this.type == 27 || this.type == 77 || this.type == 104 || this.type == 163 || this.type == 162 || this.type == 196 || this.type == 197 || this.type == 212 || this.type == 257 || this.type == 326 || this.type == 343 || this.type == 348 || this.type == 351 || this.type >= 524 && this.type <= 527 || this.type == 530) { if ((double) this.velocity.X < -2.0 || (double) this.velocity.X > 2.0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < 2.0 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > 2.0) this.velocity.X = 2f; } else if ((double) this.velocity.X > -2.0 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -2.0) this.velocity.X = -2f; } } else if (this.type == 109) { if ((double) this.velocity.X < -2.0 || (double) this.velocity.X > 2.0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < 2.0 && this.direction == 1) { this.velocity.X += 0.04f; if ((double) this.velocity.X > 2.0) this.velocity.X = 2f; } else if ((double) this.velocity.X > -2.0 && this.direction == -1) { this.velocity.X -= 0.04f; if ((double) this.velocity.X < -2.0) this.velocity.X = -2f; } } else if (this.type == 21 || this.type == 26 || this.type == 31 || this.type == 294 || this.type == 295 || this.type == 296 || this.type == 47 || this.type == 73 || this.type == 140 || this.type == 164 || this.type == 239 || this.type == 167 || this.type == 168 || this.type == 185 || this.type == 198 || this.type == 201 || this.type == 202 || this.type == 203 || this.type == 217 || this.type == 218 || this.type == 219 || this.type == 226 || this.type == 181 || this.type == 254 || this.type == 338 || this.type == 339 || this.type == 340 || this.type == 342 || this.type == 385 || this.type == 389 || this.type == 462 || this.type == 463 || this.type == 466 || this.type == 464 || this.type == 469 || this.type == 470 || this.type == 480 || this.type == 482 || this.type == 425 || this.type == 429 || this.type == 586 || this.type == 631 || this.type == 635) { float num41 = 1.5f; if (this.type == 294) num41 = 2f; else if (this.type == 295) num41 = 1.75f; else if (this.type == 296) num41 = 1.25f; else if (this.type == 201) num41 = 1.1f; else if (this.type == 202) num41 = 0.9f; else if (this.type == 203) num41 = 1.2f; else if (this.type == 338) num41 = 1.75f; else if (this.type == 339) num41 = 1.25f; else if (this.type == 340) num41 = 2f; else if (this.type == 385) num41 = 1.8f; else if (this.type == 389) num41 = 2.25f; else if (this.type == 462) num41 = 4f; else if (this.type == 463) num41 = 0.75f; else if (this.type == 466) num41 = 3.75f; else if (this.type == 469) num41 = 3.25f; else if (this.type == 480) num41 = (float) (1.5 + (1.0 - (double) this.life / (double) this.lifeMax) * 2.0); else if (this.type == 425) num41 = 6f; else if (this.type == 429) num41 = 4f; else if (this.type == 631) num41 = 0.9f; else if (this.type == 586) num41 = (float) (1.5 + (1.0 - (double) this.life / (double) this.lifeMax) * 3.5); if (this.type == 21 || this.type == 201 || this.type == 202 || this.type == 203 || this.type == 342 || this.type == 635) num41 *= (float) (1.0 + (1.0 - (double) this.scale)); if ((double) this.velocity.X < -(double) num41 || (double) this.velocity.X > (double) num41) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num41 && this.direction == 1) { if (this.type == 466 && (double) this.velocity.X < -2.0) this.velocity.X *= 0.9f; if (this.type == 586 && (double) this.velocity.Y == 0.0 && (double) this.velocity.X < -1.0) this.velocity.X *= 0.9f; this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num41) this.velocity.X = num41; } else if ((double) this.velocity.X > -(double) num41 && this.direction == -1) { if (this.type == 466 && (double) this.velocity.X > 2.0) this.velocity.X *= 0.9f; if (this.type == 586 && (double) this.velocity.Y == 0.0 && (double) this.velocity.X > 1.0) this.velocity.X *= 0.9f; this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num41) this.velocity.X = -num41; } if ((double) this.velocity.Y == 0.0 && this.type == 462 && (this.direction > 0 && (double) this.velocity.X < 0.0 || this.direction < 0 && (double) this.velocity.X > 0.0)) this.velocity.X *= 0.9f; } else if (this.type >= 269 && this.type <= 280) { float num42 = 1.5f; if (this.type == 269) num42 = 2f; if (this.type == 270) num42 = 1f; if (this.type == 271) num42 = 1.5f; if (this.type == 272) num42 = 3f; if (this.type == 273) num42 = 1.25f; if (this.type == 274) num42 = 3f; if (this.type == 275) num42 = 3.25f; if (this.type == 276) num42 = 2f; if (this.type == 277) num42 = 2.75f; if (this.type == 278) num42 = 1.8f; if (this.type == 279) num42 = 1.3f; if (this.type == 280) num42 = 2.5f; float num43 = num42 * (float) (1.0 + (1.0 - (double) this.scale)); if ((double) this.velocity.X < -(double) num43 || (double) this.velocity.X > (double) num43) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num43 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num43) this.velocity.X = num43; } else if ((double) this.velocity.X > -(double) num43 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num43) this.velocity.X = -num43; } } else if (this.type >= 305 && this.type <= 314) { float num44 = 1.5f; if (this.type == 305 || this.type == 310) num44 = 2f; if (this.type == 306 || this.type == 311) num44 = 1.25f; if (this.type == 307 || this.type == 312) num44 = 2.25f; if (this.type == 308 || this.type == 313) num44 = 1.5f; if (this.type == 309 || this.type == 314) num44 = 1f; if (this.type < 310) { if ((double) this.velocity.Y == 0.0) { this.velocity.X *= 0.85f; if ((double) this.velocity.X > -0.3 && (double) this.velocity.X < 0.3) { flag1 = true; this.velocity.Y = -7f; this.velocity.X = num44 * (float) this.direction; } } else if (this.spriteDirection == this.direction) this.velocity.X = (float) (((double) this.velocity.X * 10.0 + (double) num44 * (double) this.direction) / 11.0); } else if ((double) this.velocity.X < -(double) num44 || (double) this.velocity.X > (double) num44) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num44 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num44) this.velocity.X = num44; } else if ((double) this.velocity.X > -(double) num44 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num44) this.velocity.X = -num44; } } else if (this.type == 67 || this.type == 220 || this.type == 428) { if ((double) this.velocity.X < -0.5 || (double) this.velocity.X > 0.5) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < 0.5 && this.direction == 1) { this.velocity.X += 0.03f; if ((double) this.velocity.X > 0.5) this.velocity.X = 0.5f; } else if ((double) this.velocity.X > -0.5 && this.direction == -1) { this.velocity.X -= 0.03f; if ((double) this.velocity.X < -0.5) this.velocity.X = -0.5f; } } else if (this.type == 78 || this.type == 79 || this.type == 80 || this.type == 630) { float num45 = 1f; float num46 = 0.05f; if (this.life < this.lifeMax / 2) { num45 = 2f; num46 = 0.1f; } if (this.type == 79 || this.type == 630) num45 *= 1.5f; if ((double) this.velocity.X < -(double) num45 || (double) this.velocity.X > (double) num45) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num45 && this.direction == 1) { this.velocity.X += num46; if ((double) this.velocity.X > (double) num45) this.velocity.X = num45; } else if ((double) this.velocity.X > -(double) num45 && this.direction == -1) { this.velocity.X -= num46; if ((double) this.velocity.X < -(double) num45) this.velocity.X = -num45; } } else if (this.type == 287) { float num47 = 5f; float num48 = 0.2f; if ((double) this.velocity.X < -(double) num47 || (double) this.velocity.X > (double) num47) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num47 && this.direction == 1) { this.velocity.X += num48; if ((double) this.velocity.X > (double) num47) this.velocity.X = num47; } else if ((double) this.velocity.X > -(double) num47 && this.direction == -1) { this.velocity.X -= num48; if ((double) this.velocity.X < -(double) num47) this.velocity.X = -num47; } } else if (this.type == 243) { float num49 = 1f; float num50 = 0.07f; float num51 = num49 + (float) ((1.0 - (double) this.life / (double) this.lifeMax) * 1.5); float num52 = num50 + (float) ((1.0 - (double) this.life / (double) this.lifeMax) * 0.150000005960464); if ((double) this.velocity.X < -(double) num51 || (double) this.velocity.X > (double) num51) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num51 && this.direction == 1) { this.velocity.X += num52; if ((double) this.velocity.X > (double) num51) this.velocity.X = num51; } else if ((double) this.velocity.X > -(double) num51 && this.direction == -1) { this.velocity.X -= num52; if ((double) this.velocity.X < -(double) num51) this.velocity.X = -num51; } } else if (this.type == 251) { float num53 = 1f; float num54 = 0.08f; float num55 = num53 + (float) ((1.0 - (double) this.life / (double) this.lifeMax) * 2.0); float num56 = num54 + (float) ((1.0 - (double) this.life / (double) this.lifeMax) * 0.200000002980232); if ((double) this.velocity.X < -(double) num55 || (double) this.velocity.X > (double) num55) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num55 && this.direction == 1) { this.velocity.X += num56; if ((double) this.velocity.X > (double) num55) this.velocity.X = num55; } else if ((double) this.velocity.X > -(double) num55 && this.direction == -1) { this.velocity.X -= num56; if ((double) this.velocity.X < -(double) num55) this.velocity.X = -num55; } } else if (this.type == 386) { if ((double) this.ai[2] > 0.0) { if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.8f; } else { float num57 = 0.15f; float num58 = 1.5f; if ((double) this.velocity.X < -(double) num58 || (double) this.velocity.X > (double) num58) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num58 && this.direction == 1) { this.velocity.X += num57; if ((double) this.velocity.X > (double) num58) this.velocity.X = num58; } else if ((double) this.velocity.X > -(double) num58 && this.direction == -1) { this.velocity.X -= num57; if ((double) this.velocity.X < -(double) num58) this.velocity.X = -num58; } } } else if (this.type == 460) { float num59 = 3f; float num60 = 0.1f; if ((double) Math.Abs(this.velocity.X) > 2.0) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 2.5) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 3.0) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 3.5) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 4.0) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 4.5) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 5.0) num60 *= 0.8f; if ((double) Math.Abs(this.velocity.X) > 5.5) num60 *= 0.8f; float num61 = num59 + (float) ((1.0 - (double) this.life / (double) this.lifeMax) * 3.0); if ((double) this.velocity.X < -(double) num61 || (double) this.velocity.X > (double) num61) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.7f; } else if ((double) this.velocity.X < (double) num61 && this.direction == 1) { if ((double) this.velocity.X < 0.0) this.velocity.X *= 0.93f; this.velocity.X += num60; if ((double) this.velocity.X > (double) num61) this.velocity.X = num61; } else if ((double) this.velocity.X > -(double) num61 && this.direction == -1) { if ((double) this.velocity.X > 0.0) this.velocity.X *= 0.93f; this.velocity.X -= num60; if ((double) this.velocity.X < -(double) num61) this.velocity.X = -num61; } } else if (this.type == 508 || this.type == 580 || this.type == 582) { float num62 = 2.5f; float num63 = 10f; float num64 = Math.Abs(this.velocity.X); if (this.type == 582) { num62 = 2.5f; num63 = 7f; if ((double) num64 > 2.75) { num62 = 3.5f; num63 += 75f; } else if ((double) num64 > 2.25) { num62 = 2f; num63 += 55f; } } else if ((double) num64 > 2.75) { num62 = 3.5f; num63 += 80f; } else if ((double) num64 > 2.25) { num62 = 3f; num63 += 60f; } if ((double) Math.Abs(this.velocity.Y) < 0.5) { if ((double) this.velocity.X > 0.0 && this.direction < 0) this.velocity = this.velocity * 0.95f; if ((double) this.velocity.X < 0.0 && this.direction > 0) this.velocity = this.velocity * 0.95f; } if ((double) Math.Abs(this.velocity.Y) > (double) NPC.gravity) num63 *= 3f; if ((double) this.velocity.X <= 0.0 && this.direction < 0) this.velocity.X = (float) (((double) this.velocity.X * (double) num63 - (double) num62) / ((double) num63 + 1.0)); else if ((double) this.velocity.X >= 0.0 && this.direction > 0) this.velocity.X = (float) (((double) this.velocity.X * (double) num63 + (double) num62) / ((double) num63 + 1.0)); else if ((double) Math.Abs(this.Center.X - Main.player[this.target].Center.X) > 20.0 && (double) Math.Abs(this.velocity.Y) <= (double) NPC.gravity) { this.velocity.X *= 0.99f; this.velocity.X += (float) this.direction * 0.025f; } } else if (this.type == 391 || this.type == 427 || this.type == 415 || this.type == 419 || this.type == 518 || this.type == 532) { float num65 = 5f; float num66 = 0.25f; float num67 = 0.7f; if (this.type == 427) { num65 = 6f; num66 = 0.2f; num67 = 0.8f; } else if (this.type == 415) { num65 = 4f; num66 = 0.1f; num67 = 0.95f; } else if (this.type == 419) { num65 = 6f; num66 = 0.15f; num67 = 0.85f; } else if (this.type == 518) { num65 = 5f; num66 = 0.1f; num67 = 0.95f; } else if (this.type == 532) { num65 = 5f; num66 = 0.15f; num67 = 0.98f; } if ((double) this.velocity.X < -(double) num65 || (double) this.velocity.X > (double) num65) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * num67; } else if ((double) this.velocity.X < (double) num65 && this.direction == 1) { this.velocity.X += num66; if ((double) this.velocity.X > (double) num65) this.velocity.X = num65; } else if ((double) this.velocity.X > -(double) num65 && this.direction == -1) { this.velocity.X -= num66; if ((double) this.velocity.X < -(double) num65) this.velocity.X = -num65; } } else if (this.type >= 430 && this.type <= 436 || this.type == 494 || this.type == 495 || this.type == 591) { if ((double) this.ai[2] == 0.0) { this.damage = this.defDamage; float num68 = 1f * (float) (1.0 + (1.0 - (double) this.scale)); if ((double) this.velocity.X < -(double) num68 || (double) this.velocity.X > (double) num68) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num68 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num68) this.velocity.X = num68; } else if ((double) this.velocity.X > -(double) num68 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num68) this.velocity.X = -num68; } if ((double) this.velocity.Y == 0.0 && (!Main.dayTime || (double) this.position.Y > Main.worldSurface * 16.0) && !Main.player[this.target].dead) { Vector2 vector2 = this.Center - Main.player[this.target].Center; int num69 = 50; if (this.type >= 494 && this.type <= 495) num69 = 42; if ((double) vector2.Length() < (double) num69 && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { this.velocity.X *= 0.7f; this.ai[2] = 1f; } } } else { this.damage = (int) ((double) this.defDamage * 1.5); this.ai[3] = 1f; this.velocity.X *= 0.9f; if ((double) Math.Abs(this.velocity.X) < 0.1) this.velocity.X = 0.0f; ++this.ai[2]; if ((double) this.ai[2] >= 20.0 || (double) this.velocity.Y != 0.0 || Main.dayTime && (double) this.position.Y < Main.worldSurface * 16.0) this.ai[2] = 0.0f; } } else if (this.type != 110 && this.type != 111 && this.type != 206 && this.type != 214 && this.type != 215 && this.type != 216 && this.type != 290 && this.type != 291 && this.type != 292 && this.type != 293 && this.type != 350 && this.type != 379 && this.type != 380 && this.type != 381 && this.type != 382 && (this.type < 449 || this.type > 452) && this.type != 468 && this.type != 481 && this.type != 411 && this.type != 409 && (this.type < 498 || this.type > 506) && this.type != 424 && this.type != 426 && this.type != 520) { float num70 = 1f; if (this.type == 624) num70 = 2.5f; if (this.type == 186) num70 = 1.1f; if (this.type == 187) num70 = 0.9f; if (this.type == 188) num70 = 1.2f; if (this.type == 189) num70 = 0.8f; if (this.type == 132) num70 = 0.95f; if (this.type == 200) num70 = 0.87f; if (this.type == 223) num70 = 1.05f; if (this.type == 632) num70 = 0.8f; if (this.type == 489) { float num71 = (Main.player[this.target].Center - this.Center).Length() * (1f / 400f); if ((double) num71 > 1.5) num71 = 1.5f; num70 = (!Main.expertMode ? 2.5f - num71 : 3f - num71) * 0.8f; } if (this.type == 489 || this.type == 3 || this.type == 132 || this.type == 186 || this.type == 187 || this.type == 188 || this.type == 189 || this.type == 200 || this.type == 223 || this.type == 331 || this.type == 332) num70 *= (float) (1.0 + (1.0 - (double) this.scale)); if ((double) this.velocity.X < -(double) num70 || (double) this.velocity.X > (double) num70) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num70 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num70) this.velocity.X = num70; } else if ((double) this.velocity.X > -(double) num70 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num70) this.velocity.X = -num70; } } if (this.type >= 277 && this.type <= 280) Lighting.AddLight((int) this.Center.X / 16, (int) this.Center.Y / 16, 0.2f, 0.1f, 0.0f); else if (this.type == 520) Lighting.AddLight(this.Top + new Vector2(0.0f, 20f), 0.3f, 0.3f, 0.7f); else if (this.type == 525) Lighting.AddLight(this.Top + new Vector2(0.0f, 15f), new Vector3(0.7f, 1f, 0.2f) * 0.5f); else if (this.type == 526) Lighting.AddLight(this.Top + new Vector2(0.0f, 15f), new Vector3(1f, 1f, 0.5f) * 0.4f); else if (this.type == 527) Lighting.AddLight(this.Top + new Vector2(0.0f, 15f), new Vector3(0.6f, 0.3f, 1f) * 0.4f); else if (this.type == 415) { this.hide = false; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 416 && (double) Main.npc[index].ai[0] == (double) this.whoAmI) { this.hide = true; break; } } } else if (this.type == 258) { if ((double) this.velocity.Y != 0.0) { this.TargetClosest(); this.spriteDirection = this.direction; if ((double) Main.player[this.target].Center.X < (double) this.position.X && (double) this.velocity.X > 0.0) this.velocity.X *= 0.95f; else if ((double) Main.player[this.target].Center.X > (double) this.position.X + (double) this.width && (double) this.velocity.X < 0.0) this.velocity.X *= 0.95f; if ((double) Main.player[this.target].Center.X < (double) this.position.X && (double) this.velocity.X > -5.0) this.velocity.X -= 0.1f; else if ((double) Main.player[this.target].Center.X > (double) this.position.X + (double) this.width && (double) this.velocity.X < 5.0) this.velocity.X += 0.1f; } else if ((double) Main.player[this.target].Center.Y + 50.0 < (double) this.position.Y && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { flag1 = true; this.velocity.Y = -7f; } } else if (this.type == 425) { if ((double) this.velocity.Y == 0.0) this.ai[2] = 0.0f; if ((double) this.velocity.Y != 0.0 && (double) this.ai[2] == 1.0) { this.TargetClosest(); this.spriteDirection = -this.direction; if (Collision.CanHit(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { float num72 = Main.player[this.target].Center.X - (float) (this.direction * 400) - this.Center.X; float num73 = Main.player[this.target].Bottom.Y - this.Bottom.Y; if ((double) num72 < 0.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.9f; else if ((double) num72 > 0.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.9f; if ((double) num72 < 0.0 && (double) this.velocity.X > -5.0) this.velocity.X -= 0.1f; else if ((double) num72 > 0.0 && (double) this.velocity.X < 5.0) this.velocity.X += 0.1f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; if ((double) num73 < -20.0 && (double) this.velocity.Y > 0.0) this.velocity.Y *= 0.8f; else if ((double) num73 > 20.0 && (double) this.velocity.Y < 0.0) this.velocity.Y *= 0.8f; if ((double) num73 < -20.0 && (double) this.velocity.Y > -5.0) this.velocity.Y -= 0.3f; else if ((double) num73 > 20.0 && (double) this.velocity.Y < 5.0) this.velocity.Y += 0.3f; } if (Main.rand.Next(3) == 0) { this.position = this.position + this.netOffset; Vector2 Position = this.Center + new Vector2((float) (this.direction * -14), -8f) - Vector2.One * 4f; Vector2 vector2 = new Vector2((float) (this.direction * -6), 12f) * 0.2f + Utils.RandomVector2(Main.rand, -1f, 1f) * 0.1f; Dust dust = Main.dust[Dust.NewDust(Position, 8, 8, 229, vector2.X, vector2.Y, 100, Color.Transparent, (float) (1.0 + (double) Main.rand.NextFloat() * 0.5))]; dust.noGravity = true; dust.velocity = vector2; dust.customData = (object) this; this.position = this.position - this.netOffset; } for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= 0.05f; else this.velocity.X += 0.05f; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= 0.05f; else this.velocity.Y += 0.05f; } } } else if ((double) Main.player[this.target].Center.Y + 100.0 < (double) this.position.Y && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { flag1 = true; this.velocity.Y = -5f; this.ai[2] = 1f; } if (Main.netMode != 1) { ++this.localAI[2]; if ((double) this.localAI[2] >= (double) (360 + Main.rand.Next(360)) && (double) this.Distance(Main.player[this.target].Center) < 400.0 && (double) Math.Abs(this.DirectionTo(Main.player[this.target].Center).Y) < 0.5 && Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { this.localAI[2] = 0.0f; Vector2 vector2_13 = this.Center + new Vector2((float) (this.direction * 30), 2f); Vector2 vec = this.DirectionTo(Main.player[this.target].Center) * 7f; if (vec.HasNaNs()) vec = new Vector2((float) (this.direction * 8), 0.0f); int damageForProjectiles = this.GetAttackDamage_ForProjectiles(75f, 50f); for (int index = 0; index < 4; ++index) { Vector2 vector2_14 = vec + Utils.RandomVector2(Main.rand, -0.8f, 0.8f); Projectile.NewProjectile(vector2_13.X, vector2_13.Y, vector2_14.X, vector2_14.Y, 577, damageForProjectiles, 1f, Main.myPlayer); } } } } else if (this.type == 427) { if ((double) this.velocity.Y == 0.0) { this.ai[2] = 0.0f; this.rotation = 0.0f; } else this.rotation = this.velocity.X * 0.1f; if ((double) this.velocity.Y != 0.0 && (double) this.ai[2] == 1.0) { this.TargetClosest(); this.spriteDirection = -this.direction; if (Collision.CanHit(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { float num74 = Main.player[this.target].Center.X - this.Center.X; float num75 = Main.player[this.target].Center.Y - this.Center.Y; if ((double) num74 < 0.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.98f; else if ((double) num74 > 0.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.98f; if ((double) num74 < -20.0 && (double) this.velocity.X > -6.0) this.velocity.X -= 0.015f; else if ((double) num74 > 20.0 && (double) this.velocity.X < 6.0) this.velocity.X += 0.015f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; if ((double) num75 < -20.0 && (double) this.velocity.Y > 0.0) this.velocity.Y *= 0.98f; else if ((double) num75 > 20.0 && (double) this.velocity.Y < 0.0) this.velocity.Y *= 0.98f; if ((double) num75 < -20.0 && (double) this.velocity.Y > -6.0) this.velocity.Y -= 0.15f; else if ((double) num75 > 20.0 && (double) this.velocity.Y < 6.0) this.velocity.Y += 0.15f; } for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= 0.05f; else this.velocity.X += 0.05f; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= 0.05f; else this.velocity.Y += 0.05f; } } } else if ((double) Main.player[this.target].Center.Y + 100.0 < (double) this.position.Y && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { flag1 = true; this.velocity.Y = -5f; this.ai[2] = 1f; } } else if (this.type == 426) { if ((double) this.ai[1] > 0.0 && (double) this.velocity.Y > 0.0) { this.velocity.Y *= 0.85f; if ((double) this.velocity.Y == 0.0) this.velocity.Y = -0.4f; } if ((double) this.velocity.Y != 0.0) { this.TargetClosest(); this.spriteDirection = this.direction; if (Collision.CanHit(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { float num76 = Main.player[this.target].Center.X - (float) (this.direction * 300) - this.Center.X; if ((double) num76 < 40.0 && (double) this.velocity.X > 0.0) this.velocity.X *= 0.98f; else if ((double) num76 > 40.0 && (double) this.velocity.X < 0.0) this.velocity.X *= 0.98f; if ((double) num76 < 40.0 && (double) this.velocity.X > -5.0) this.velocity.X -= 0.2f; else if ((double) num76 > 40.0 && (double) this.velocity.X < 5.0) this.velocity.X += 0.2f; if ((double) this.velocity.X > 6.0) this.velocity.X = 6f; if ((double) this.velocity.X < -6.0) this.velocity.X = -6f; } } else if ((double) Main.player[this.target].Center.Y + 100.0 < (double) this.position.Y && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { flag1 = true; this.velocity.Y = -6f; } for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= 0.1f; else this.velocity.X += 0.1f; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= 0.1f; else this.velocity.Y += 0.1f; } } if (Main.rand.Next(6) == 0 && (double) this.ai[1] <= 20.0) { this.position = this.position + this.netOffset; Dust dust = Main.dust[Dust.NewDust(this.Center + new Vector2(this.spriteDirection == 1 ? 8f : -20f, -20f), 8, 8, 229, this.velocity.X, this.velocity.Y, 100)]; dust.velocity = dust.velocity / 4f + this.velocity / 2f; dust.scale = 0.6f; dust.noLight = true; this.position = this.position - this.netOffset; } if ((double) this.ai[1] >= 57.0) { this.position = this.position + this.netOffset; int Type = Utils.SelectRandom(Main.rand, 161, 229); Dust dust = Main.dust[Dust.NewDust(this.Center + new Vector2(this.spriteDirection == 1 ? 8f : -20f, -20f), 8, 8, Type, this.velocity.X, this.velocity.Y, 100)]; dust.velocity = dust.velocity / 4f + this.DirectionTo(Main.player[this.target].Top); dust.scale = 1.2f; dust.noLight = true; this.position = this.position - this.netOffset; } if (Main.rand.Next(6) == 0) { this.position = this.position + this.netOffset; Dust dust = Main.dust[Dust.NewDust(this.Center, 2, 2, 229)]; dust.position = this.Center + new Vector2(this.spriteDirection == 1 ? 26f : -26f, 24f); dust.velocity.X = 0.0f; if ((double) dust.velocity.Y < 0.0) dust.velocity.Y = 0.0f; dust.noGravity = true; dust.scale = 1f; dust.noLight = true; this.position = this.position - this.netOffset; } } else if (this.type == 185) { if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; this.localAI[0] = 0.0f; } else if ((double) this.localAI[0] == 1.0) this.rotation += this.velocity.X * 0.05f; } else if (this.type == 428) { if ((double) this.velocity.Y == 0.0) this.rotation = 0.0f; else this.rotation += this.velocity.X * 0.08f; } if (this.type == 159 && Main.netMode != 1) { Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); double num77 = (double) Main.player[this.target].position.X + (double) Main.player[this.target].width * 0.5 - (double) vector2.X; float num78 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y; if (Math.Sqrt(num77 * num77 + (double) num78 * (double) num78) > 300.0) this.Transform(158); } if (Main.netMode != 1) { if (Main.expertMode && this.target >= 0 && (this.type == 163 || this.type == 238) && Collision.CanHit(this.Center, 1, 1, Main.player[this.target].Center, 1, 1)) { ++this.localAI[0]; if (this.justHit) { this.localAI[0] -= (float) Main.rand.Next(20, 60); if ((double) this.localAI[0] < 0.0) this.localAI[0] = 0.0f; } if ((double) this.localAI[0] > (double) Main.rand.Next(180, 900)) { this.localAI[0] = 0.0f; Vector2 vector2 = Main.player[this.target].Center - this.Center; vector2.Normalize(); vector2 *= 8f; int damageForProjectiles = this.GetAttackDamage_ForProjectiles(18f, 18f); Projectile.NewProjectile(this.Center.X, this.Center.Y, vector2.X, vector2.Y, 472, damageForProjectiles, 0.0f, Main.myPlayer); } } if ((double) this.velocity.Y == 0.0) { int newType = -1; switch (this.type) { case 163: newType = 238; break; case 164: newType = 165; break; case 236: newType = 237; break; case 239: newType = 240; break; case 530: newType = 531; break; } if (newType != -1 && this.NPCCanStickToWalls()) this.Transform(newType); } } if (this.type == 243) { if (this.justHit && Main.rand.Next(3) == 0) this.ai[2] -= (float) Main.rand.Next(30); if ((double) this.ai[2] < 0.0) this.ai[2] = 0.0f; if (this.confused) this.ai[2] = 0.0f; ++this.ai[2]; float num79 = (float) Main.rand.Next(30, 900) * ((float) this.life / (float) this.lifeMax) + 30f; if (Main.netMode != 1 && (double) this.ai[2] >= (double) num79 && (double) this.velocity.Y == 0.0 && !Main.player[this.target].dead && !Main.player[this.target].frozen && (this.direction > 0 && (double) this.Center.X < (double) Main.player[this.target].Center.X || this.direction < 0 && (double) this.Center.X > (double) Main.player[this.target].Center.X) && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + 20f); vector2.X += (float) (10 * this.direction); float num80 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X; float num81 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y; float num82 = num80 + (float) Main.rand.Next(-40, 41); float num83 = num81 + (float) Main.rand.Next(-40, 41); float num84 = (float) Math.Sqrt((double) num82 * (double) num82 + (double) num83 * (double) num83); this.netUpdate = true; float num85 = (float) (15.0 / (double) num84); float SpeedX = num82 * num85; float SpeedY = num83 * num85; int Damage = 32; int Type = 257; vector2.X += SpeedX * 3f; vector2.Y += SpeedY * 3f; Projectile.NewProjectile(vector2.X, vector2.Y, SpeedX, SpeedY, Type, Damage, 0.0f, Main.myPlayer); this.ai[2] = 0.0f; } } if (this.type == 251) { if (this.justHit) this.ai[2] -= (float) Main.rand.Next(30); if ((double) this.ai[2] < 0.0) this.ai[2] = 0.0f; if (this.confused) this.ai[2] = 0.0f; ++this.ai[2]; float num86 = (float) Main.rand.Next(60, 1800) * ((float) this.life / (float) this.lifeMax) + 15f; if (Main.netMode != 1 && (double) this.ai[2] >= (double) num86 && (double) this.velocity.Y == 0.0 && !Main.player[this.target].dead && !Main.player[this.target].frozen && (this.direction > 0 && (double) this.Center.X < (double) Main.player[this.target].Center.X || this.direction < 0 && (double) this.Center.X > (double) Main.player[this.target].Center.X) && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height)) { Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + 12f); vector2.X += (float) (6 * this.direction); float num87 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X; float num88 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y; float num89 = num87 + (float) Main.rand.Next(-40, 41); float num90 = num88 + (float) Main.rand.Next(-30, 0); float num91 = (float) Math.Sqrt((double) num89 * (double) num89 + (double) num90 * (double) num90); this.netUpdate = true; float num92 = (float) (15.0 / (double) num91); float SpeedX = num89 * num92; float SpeedY = num90 * num92; int Damage = 30; int Type = 83; vector2.X += SpeedX * 3f; vector2.Y += SpeedY * 3f; Projectile.NewProjectile(vector2.X, vector2.Y, SpeedX, SpeedY, Type, Damage, 0.0f, Main.myPlayer); this.ai[2] = 0.0f; } } if (this.type == 386) { if (this.confused) { this.ai[2] = -60f; } else { if ((double) this.ai[2] < 60.0) ++this.ai[2]; if ((double) this.ai[2] > 0.0 && NPC.CountNPCS(387) >= 4 * NPC.CountNPCS(386)) this.ai[2] = 0.0f; if (this.justHit) this.ai[2] = -30f; if ((double) this.ai[2] == 30.0) { int num93 = (int) this.position.X / 16; int num94 = (int) this.position.Y / 16; int num95 = (int) this.position.X / 16; int num96 = (int) this.position.Y / 16; int num97 = 5; int num98 = 0; bool flag12 = false; int num99 = 2; int num100 = 0; while (!flag12 && num98 < 100) { ++num98; int index18 = Main.rand.Next(num93 - num97, num93 + num97); for (int index19 = Main.rand.Next(num94 - num97, num94 + num97); index19 < num94 + num97; ++index19) { if ((index19 < num94 - num99 || index19 > num94 + num99 || index18 < num93 - num99 || index18 > num93 + num99) && (index19 < num96 - num100 || index19 > num96 + num100 || index18 < num95 - num100 || index18 > num95 + num100) && Main.tile[index18, index19].nactive()) { bool flag13 = true; if (Main.tile[index18, index19 - 1].lava()) flag13 = false; if (flag13 && Main.tileSolid[(int) Main.tile[index18, index19].type] && !Collision.SolidTiles(index18 - 1, index18 + 1, index19 - 4, index19 - 1)) { int index20 = NPC.NewNPC(index18 * 16 - this.width / 2, index19 * 16, 387); Main.npc[index20].position.Y = (float) (index19 * 16 - Main.npc[index20].height); flag12 = true; this.netUpdate = true; break; } } } } } if ((double) this.ai[2] == 60.0) this.ai[2] = -120f; } } if (this.type == 389) { if (this.confused) { this.ai[2] = -60f; } else { if ((double) this.ai[2] < 20.0) ++this.ai[2]; if (this.justHit) this.ai[2] = -30f; if ((double) this.ai[2] == 20.0 && Main.netMode != 1) { this.ai[2] = (float) (Main.rand.Next(3) * -10 - 10); Projectile.NewProjectile(this.Center.X, this.Center.Y + 8f, (float) (this.direction * 6), 0.0f, 437, 25, 1f, Main.myPlayer); } } } if (this.type == 110 || this.type == 111 || this.type == 206 || this.type == 214 || this.type == 215 || this.type == 216 || this.type == 290 || this.type == 291 || this.type == 292 || this.type == 293 || this.type == 350 || this.type == 379 || this.type == 380 || this.type == 381 || this.type == 382 || this.type >= 449 && this.type <= 452 || this.type == 468 || this.type == 481 || this.type == 411 || this.type == 409 || this.type >= 498 && this.type <= 506 || this.type == 424 || this.type == 426 || this.type == 520) { bool flag14 = this.type == 381 || this.type == 382 || this.type == 520; bool flag15 = this.type == 426; bool flag16 = true; int num101 = -1; int num102 = -1; if (this.type == 411) { flag14 = true; num101 = 90; num102 = 90; if ((double) this.ai[1] <= 150.0) flag16 = false; } if ((double) this.ai[1] > 0.0) --this.ai[1]; if (this.justHit) { this.ai[1] = 30f; this.ai[2] = 0.0f; } int num103 = 70; if (this.type == 379 || this.type == 380) num103 = 80; if (this.type == 381 || this.type == 382) num103 = 80; if (this.type == 520) num103 = 15; if (this.type == 350) num103 = 110; if (this.type == 291) num103 = 200; if (this.type == 292) num103 = 120; if (this.type == 293) num103 = 90; if (this.type == 111) num103 = 180; if (this.type == 206) num103 = 50; if (this.type == 481) num103 = 100; if (this.type == 214) num103 = 40; if (this.type == 215) num103 = 80; if (this.type == 290) num103 = 30; if (this.type == 411) num103 = 300; if (this.type == 409) num103 = 60; if (this.type == 424) num103 = 180; if (this.type == 426) num103 = 60; bool flag17 = false; if (this.type == 216) { if ((double) this.localAI[2] >= 20.0) flag17 = true; num103 = !flag17 ? 8 : 60; } int num104 = num103 / 2; if (this.type == 424) num104 = num103 - 1; if (this.type == 426) num104 = num103 - 1; if (this.confused) this.ai[2] = 0.0f; if ((double) this.ai[2] > 0.0) { if (flag16) this.TargetClosest(); if ((double) this.ai[1] == (double) num104) { if (this.type == 216) ++this.localAI[2]; float num105 = 11f; if (this.type == 111) num105 = 9f; if (this.type == 206) num105 = 7f; if (this.type == 290) num105 = 9f; if (this.type == 293) num105 = 4f; if (this.type == 214) num105 = 14f; if (this.type == 215) num105 = 16f; if (this.type == 382) num105 = 7f; if (this.type == 520) num105 = 8f; if (this.type == 409) num105 = 4f; if (this.type >= 449 && this.type <= 452) num105 = 7f; if (this.type == 481) num105 = 8f; if (this.type == 468) num105 = 7.5f; if (this.type == 411) num105 = 1f; if (this.type >= 498 && this.type <= 506) num105 = 7f; Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); if (this.type == 481) vector2.Y -= 14f; if (this.type == 206) vector2.Y -= 10f; if (this.type == 290) vector2.Y -= 10f; if (this.type == 381 || this.type == 382) vector2.Y += 6f; if (this.type == 520) vector2.Y = this.position.Y + 20f; if (this.type >= 498 && this.type <= 506) vector2.Y -= 8f; if (this.type == 426) vector2 += new Vector2((float) (this.spriteDirection * 2), -12f); float num106 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X; float num107 = Math.Abs(num106) * 0.1f; if (this.type == 291 || this.type == 292) num107 = 0.0f; if (this.type == 215) num107 = Math.Abs(num106) * 0.08f; if (this.type == 214 || this.type == 216 && !flag17) num107 = 0.0f; if (this.type == 381 || this.type == 382 || this.type == 520) num107 = 0.0f; if (this.type >= 449 && this.type <= 452) num107 = (float) ((double) Math.Abs(num106) * (double) Main.rand.Next(10, 50) * 0.00999999977648258); if (this.type == 468) num107 = (float) ((double) Math.Abs(num106) * (double) Main.rand.Next(10, 50) * 0.00999999977648258); if (this.type == 481) num107 = (float) ((double) Math.Abs(num106) * (double) Main.rand.Next(-10, 11) * 0.00350000010803342); if (this.type >= 498 && this.type <= 506) num107 = (float) ((double) Math.Abs(num106) * (double) Main.rand.Next(1, 11) * (1.0 / 400.0)); float num108 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y - num107; if (this.type == 291) { num106 += (float) Main.rand.Next(-40, 41) * 0.2f; num108 += (float) Main.rand.Next(-40, 41) * 0.2f; } else if (this.type == 381 || this.type == 382 || this.type == 520) { float num109 = num106 + (float) Main.rand.Next(-100, 101) * 0.4f; float num110 = num108 + (float) Main.rand.Next(-100, 101) * 0.4f; num106 = num109 * ((float) Main.rand.Next(85, 116) * 0.01f); num108 = num110 * ((float) Main.rand.Next(85, 116) * 0.01f); if (this.type == 520) { float num111 = num106 + (float) Main.rand.Next(-100, 101) * 0.6f; float num112 = num108 + (float) Main.rand.Next(-100, 101) * 0.6f; num106 = num111 * ((float) Main.rand.Next(85, 116) * 0.015f); num108 = num112 * ((float) Main.rand.Next(85, 116) * 0.015f); } } else if (this.type == 481) { num106 += (float) Main.rand.Next(-40, 41) * 0.4f; num108 += (float) Main.rand.Next(-40, 41) * 0.4f; } else if (this.type >= 498 && this.type <= 506) { num106 += (float) Main.rand.Next(-40, 41) * 0.3f; num108 += (float) Main.rand.Next(-40, 41) * 0.3f; } else if (this.type != 292) { num106 += (float) Main.rand.Next(-40, 41); num108 += (float) Main.rand.Next(-40, 41); } float num113 = (float) Math.Sqrt((double) num106 * (double) num106 + (double) num108 * (double) num108); this.netUpdate = true; float num114 = num105 / num113; float num115 = num106 * num114; float SpeedY = num108 * num114; int Damage = 35; int Type = 82; if (this.type == 111) Damage = 11; if (this.type == 206) Damage = 37; if (this.type == 379 || this.type == 380) Damage = 40; if (this.type == 350) Damage = 45; if (this.type == 468) Damage = 50; if (this.type == 111) Type = 81; if (this.type == 379 || this.type == 380) Type = 81; if (this.type == 381) { Type = 436; Damage = 24; } if (this.type == 382) { Type = 438; Damage = 30; } if (this.type == 520) { Type = 592; Damage = 35; } if (this.type >= 449 && this.type <= 452) { Type = 471; Damage = 15; } if (this.type >= 498 && this.type <= 506) { Type = 572; Damage = 14; } if (this.type == 481) { Type = 508; Damage = 18; } if (this.type == 206) Type = 177; if (this.type == 468) Type = 501; if (this.type == 411) { Type = 537; Damage = this.GetAttackDamage_ForProjectiles(60f, 45f); } if (this.type == 424) { Type = 573; Damage = this.GetAttackDamage_ForProjectiles(60f, 45f); } if (this.type == 426) { Type = 581; Damage = this.GetAttackDamage_ForProjectiles(60f, 45f); } if (this.type == 291) { Type = 302; Damage = 100; } if (this.type == 290) { Type = 300; Damage = 60; } if (this.type == 293) { Type = 303; Damage = 60; } if (this.type == 214) { Type = 180; Damage = 25; } if (this.type == 215) { Type = 82; Damage = 40; } if (this.type == 292) { Damage = 50; Type = 180; } if (this.type == 216) { Type = 180; Damage = 30; if (flag17) { Damage = 100; Type = 240; this.localAI[2] = 0.0f; } } vector2.X += num115; vector2.Y += SpeedY; if (this.type == 290) Damage = this.GetAttackDamage_ForProjectiles((float) Damage, (float) Damage * 0.75f); if (this.type >= 381 && this.type <= 392) Damage = this.GetAttackDamage_ForProjectiles((float) Damage, (float) Damage * 0.8f); if (Main.netMode != 1) { if (this.type == 292) { for (int index = 0; index < 4; ++index) { float num116 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X; float num117 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y; float num118 = 12f / (float) Math.Sqrt((double) num116 * (double) num116 + (double) num117 * (double) num117); float num119; float num120 = num119 = num116 + (float) Main.rand.Next(-40, 41); float num121; float num122 = num121 = num117 + (float) Main.rand.Next(-40, 41); num115 = num120 * num118; SpeedY = num122 * num118; Projectile.NewProjectile(vector2.X, vector2.Y, num115, SpeedY, Type, Damage, 0.0f, Main.myPlayer); } } else if (this.type == 411) Projectile.NewProjectile(vector2.X, vector2.Y, num115, SpeedY, Type, Damage, 0.0f, Main.myPlayer, ai1: ((float) this.whoAmI)); else if (this.type == 424) { for (int index = 0; index < 4; ++index) Projectile.NewProjectile(this.Center.X - (float) (this.spriteDirection * 4), this.Center.Y + 6f, (float) (2 * index - 3) * 0.15f, (float) ((double) -Main.rand.Next(0, 3) * 0.200000002980232 - 0.100000001490116), Type, Damage, 0.0f, Main.myPlayer, ai1: ((float) this.whoAmI)); } else if (this.type == 409) { int index = NPC.NewNPC((int) this.Center.X, (int) this.Center.Y, 410, this.whoAmI); Main.npc[index].velocity = new Vector2(num115, SpeedY - 6f); } else Projectile.NewProjectile(vector2.X, vector2.Y, num115, SpeedY, Type, Damage, 0.0f, Main.myPlayer); } this.ai[2] = (double) Math.Abs(SpeedY) <= (double) Math.Abs(num115) * 2.0 ? ((double) Math.Abs(num115) <= (double) Math.Abs(SpeedY) * 2.0 ? ((double) SpeedY <= 0.0 ? 4f : 2f) : 3f) : ((double) SpeedY <= 0.0 ? 5f : 1f); } if ((double) this.velocity.Y != 0.0 && !flag15 || (double) this.ai[1] <= 0.0) { this.ai[2] = 0.0f; this.ai[1] = 0.0f; } else if (!flag14 || num101 != -1 && (double) this.ai[1] >= (double) num101 && (double) this.ai[1] < (double) (num101 + num102) && (!flag15 || (double) this.velocity.Y == 0.0)) { this.velocity.X *= 0.9f; this.spriteDirection = this.direction; } } if (this.type == 468 && !Main.eclipse) flag14 = true; else if ((double) this.ai[2] <= 0.0 | flag14 && (double) this.velocity.Y == 0.0 | flag15 && (double) this.ai[1] <= 0.0 && !Main.player[this.target].dead) { bool flag18 = Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height); if (this.type == 520) flag18 = Collision.CanHitLine(this.Top + new Vector2(0.0f, 20f), 0, 0, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height); if ((double) Main.player[this.target].stealth == 0.0 && Main.player[this.target].itemAnimation == 0) flag18 = false; if (flag18) { float num123 = 10f; Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num124 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2.X; float num125 = Math.Abs(num124) * 0.1f; float num126 = Main.player[this.target].position.Y + (float) Main.player[this.target].height * 0.5f - vector2.Y - num125; float num127 = num124 + (float) Main.rand.Next(-40, 41); float num128 = num126 + (float) Main.rand.Next(-40, 41); float num129 = (float) Math.Sqrt((double) num127 * (double) num127 + (double) num128 * (double) num128); float num130 = 700f; if (this.type == 214) num130 = 550f; if (this.type == 215) num130 = 800f; if (this.type >= 498 && this.type <= 506) num130 = 190f; if (this.type >= 449 && this.type <= 452) num130 = 200f; if (this.type == 481) num130 = 400f; if (this.type == 468) num130 = 400f; if ((double) num129 < (double) num130) { this.netUpdate = true; this.velocity.X *= 0.5f; float num131 = num123 / num129; float num132 = num127 * num131; float num133 = num128 * num131; this.ai[2] = 3f; this.ai[1] = (float) num103; this.ai[2] = (double) Math.Abs(num133) <= (double) Math.Abs(num132) * 2.0 ? ((double) Math.Abs(num132) <= (double) Math.Abs(num133) * 2.0 ? ((double) num133 <= 0.0 ? 4f : 2f) : 3f) : ((double) num133 <= 0.0 ? 5f : 1f); } } } if ((double) this.ai[2] <= 0.0 || flag14 && (num101 == -1 || (double) this.ai[1] < (double) num101 || (double) this.ai[1] >= (double) (num101 + num102))) { float num134 = 1f; float num135 = 0.07f; float num136 = 0.8f; if (this.type == 214) { num134 = 2f; num135 = 0.09f; } else if (this.type == 215) { num134 = 1.5f; num135 = 0.08f; } else if (this.type == 381 || this.type == 382) { num134 = 2f; num135 = 0.5f; } else if (this.type == 520) { num134 = 4f; num135 = 1f; num136 = 0.7f; } else if (this.type == 411) { num134 = 2f; num135 = 0.5f; } else if (this.type == 409) { num134 = 2f; num135 = 0.5f; } bool flag19 = false; if ((this.type == 381 || this.type == 382) && (double) Vector2.Distance(this.Center, Main.player[this.target].Center) < 300.0 && Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { flag19 = true; this.ai[3] = 0.0f; } if (this.type == 520 && (double) Vector2.Distance(this.Center, Main.player[this.target].Center) < 400.0 && Collision.CanHitLine(this.Center, 0, 0, Main.player[this.target].Center, 0, 0)) { flag19 = true; this.ai[3] = 0.0f; } if ((((double) this.velocity.X < -(double) num134 ? 1 : ((double) this.velocity.X > (double) num134 ? 1 : 0)) | (flag19 ? 1 : 0)) != 0) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * num136; } else if ((double) this.velocity.X < (double) num134 && this.direction == 1) { this.velocity.X += num135; if ((double) this.velocity.X > (double) num134) this.velocity.X = num134; } else if ((double) this.velocity.X > -(double) num134 && this.direction == -1) { this.velocity.X -= num135; if ((double) this.velocity.X < -(double) num134) this.velocity.X = -num134; } } if (this.type == 520) { ++this.localAI[2]; if ((double) this.localAI[2] >= 6.0) { this.localAI[2] = 0.0f; this.localAI[3] = Main.player[this.target].DirectionFrom(this.Top + new Vector2(0.0f, 20f)).ToRotation(); } } } if (this.type == 109 && Main.netMode != 1 && !Main.player[this.target].dead) { if (this.justHit) this.ai[2] = 0.0f; ++this.ai[2]; if ((double) this.ai[2] > 60.0) { Vector2 vector2 = new Vector2(this.position.X + (float) this.width * 0.5f - (float) (this.direction * 24), this.position.Y + 4f); if (Main.rand.Next(5) != 0 || NPC.AnyNPCs(378)) { int num137 = Main.rand.Next(3, 8) * this.direction; int num138 = Main.rand.Next(-8, -5); int index = Projectile.NewProjectile(vector2.X, vector2.Y, (float) num137, (float) num138, 75, 80, 0.0f, Main.myPlayer); Main.projectile[index].timeLeft = 300; this.ai[2] = 0.0f; } else { this.ai[2] = -120f; NetMessage.SendData(23, number: NPC.NewNPC((int) vector2.X, (int) vector2.Y, 378)); } } } if ((double) this.velocity.Y == 0.0 | flag1) { int index21 = (int) ((double) this.position.Y + (double) this.height + 7.0) / 16; int index22 = (int) ((double) this.position.Y - 9.0) / 16; int num139 = (int) this.position.X / 16; int num140 = (int) ((double) this.position.X + (double) this.width) / 16; int num141 = (int) ((double) this.position.X + 8.0) / 16; int num142 = (int) ((double) this.position.X + (double) this.width - 8.0) / 16; bool flag20 = false; for (int index23 = num141; index23 <= num142; ++index23) { if (index23 >= num139 && index23 <= num140 && Main.tile[index23, index21] == null) { flag20 = true; } else { if (Main.tile[index23, index22] != null && Main.tile[index23, index22].nactive() && Main.tileSolid[(int) Main.tile[index23, index22].type]) { flag5 = false; break; } if (!flag20 && index23 >= num139 && index23 <= num140 && Main.tile[index23, index21].nactive() && Main.tileSolid[(int) Main.tile[index23, index21].type]) flag5 = true; } } if (!flag5 && (double) this.velocity.Y < 0.0) this.velocity.Y = 0.0f; if (flag20) return; } if (this.type == 428) flag5 = false; if ((double) this.velocity.Y >= 0.0 && (this.type != 580 || this.directionY != 1)) { int num143 = 0; if ((double) this.velocity.X < 0.0) num143 = -1; if ((double) this.velocity.X > 0.0) num143 = 1; Vector2 position = this.position; position.X += this.velocity.X; int x = (int) (((double) position.X + (double) (this.width / 2) + (double) ((this.width / 2 + 1) * num143)) / 16.0); int y = (int) (((double) position.Y + (double) this.height - 1.0) / 16.0); if (WorldGen.InWorld(x, y, 4)) { if (Main.tile[x, y] == null) Main.tile[x, y] = new Tile(); if (Main.tile[x, y - 1] == null) Main.tile[x, y - 1] = new Tile(); if (Main.tile[x, y - 2] == null) Main.tile[x, y - 2] = new Tile(); if (Main.tile[x, y - 3] == null) Main.tile[x, y - 3] = new Tile(); if (Main.tile[x, y + 1] == null) Main.tile[x, y + 1] = new Tile(); if (Main.tile[x - num143, y - 3] == null) Main.tile[x - num143, y - 3] = new Tile(); if ((double) (x * 16) < (double) position.X + (double) this.width && (double) (x * 16 + 16) > (double) position.X && (Main.tile[x, y].nactive() && !Main.tile[x, y].topSlope() && !Main.tile[x, y - 1].topSlope() && Main.tileSolid[(int) Main.tile[x, y].type] && !Main.tileSolidTop[(int) Main.tile[x, y].type] || Main.tile[x, y - 1].halfBrick() && Main.tile[x, y - 1].nactive()) && (!Main.tile[x, y - 1].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 1].type] || Main.tileSolidTop[(int) Main.tile[x, y - 1].type] || Main.tile[x, y - 1].halfBrick() && (!Main.tile[x, y - 4].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 4].type] || Main.tileSolidTop[(int) Main.tile[x, y - 4].type])) && (!Main.tile[x, y - 2].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 2].type] || Main.tileSolidTop[(int) Main.tile[x, y - 2].type]) && (!Main.tile[x, y - 3].nactive() || !Main.tileSolid[(int) Main.tile[x, y - 3].type] || Main.tileSolidTop[(int) Main.tile[x, y - 3].type]) && (!Main.tile[x - num143, y - 3].nactive() || !Main.tileSolid[(int) Main.tile[x - num143, y - 3].type])) { float num144 = (float) (y * 16); if (Main.tile[x, y].halfBrick()) num144 += 8f; if (Main.tile[x, y - 1].halfBrick()) num144 -= 8f; if ((double) num144 < (double) position.Y + (double) this.height) { float num145 = position.Y + (float) this.height - num144; float num146 = 16.1f; if (this.type == 163 || this.type == 164 || this.type == 236 || this.type == 239 || this.type == 530) num146 += 8f; if ((double) num145 <= (double) num146) { this.gfxOffY += this.position.Y + (float) this.height - num144; this.position.Y = num144 - (float) this.height; this.stepSpeed = (double) num145 >= 9.0 ? 2f : 1f; } } } } } if (flag5) { int index24 = (int) (((double) this.position.X + (double) (this.width / 2) + (double) (15 * this.direction)) / 16.0); int index25 = (int) (((double) this.position.Y + (double) this.height - 15.0) / 16.0); if (this.type == 109 || this.type == 163 || this.type == 164 || this.type == 199 || this.type == 236 || this.type == 239 || this.type == 257 || this.type == 258 || this.type == 290 || this.type == 391 || this.type == 425 || this.type == 427 || this.type == 426 || this.type == 580 || this.type == 508 || this.type == 415 || this.type == 530 || this.type == 532 || this.type == 582) index24 = (int) (((double) this.position.X + (double) (this.width / 2) + (double) ((this.width / 2 + 16) * this.direction)) / 16.0); if (Main.tile[index24, index25] == null) Main.tile[index24, index25] = new Tile(); if (Main.tile[index24, index25 - 1] == null) Main.tile[index24, index25 - 1] = new Tile(); if (Main.tile[index24, index25 - 2] == null) Main.tile[index24, index25 - 2] = new Tile(); if (Main.tile[index24, index25 - 3] == null) Main.tile[index24, index25 - 3] = new Tile(); if (Main.tile[index24, index25 + 1] == null) Main.tile[index24, index25 + 1] = new Tile(); if (Main.tile[index24 + this.direction, index25 - 1] == null) Main.tile[index24 + this.direction, index25 - 1] = new Tile(); if (Main.tile[index24 + this.direction, index25 + 1] == null) Main.tile[index24 + this.direction, index25 + 1] = new Tile(); if (Main.tile[index24 - this.direction, index25 + 1] == null) Main.tile[index24 - this.direction, index25 + 1] = new Tile(); Main.tile[index24, index25 + 1].halfBrick(); if (((!Main.tile[index24, index25 - 1].nactive() ? 0 : (Main.tile[index24, index25 - 1].type == (ushort) 10 ? 1 : (Main.tile[index24, index25 - 1].type == (ushort) 388 ? 1 : 0))) & (flag8 ? 1 : 0)) != 0) { ++this.ai[2]; this.ai[3] = 0.0f; if ((double) this.ai[2] >= 60.0) { bool flag21 = this.type == 3 || this.type == 430 || this.type == 590 || this.type == 331 || this.type == 332 || this.type == 132 || this.type == 161 || this.type == 186 || this.type == 187 || this.type == 188 || this.type == 189 || this.type == 200 || this.type == 223 || this.type == 320 || this.type == 321 || this.type == 319 || this.type == 21 || this.type == 324 || this.type == 323 || this.type == 322 || this.type == 44 || this.type == 196 || this.type == 167 || this.type == 77 || this.type == 197 || this.type == 202 || this.type == 203 || this.type == 449 || this.type == 450 || this.type == 451 || this.type == 452 || this.type == 481 || this.type == 201 || this.type == 635; bool flag22 = Main.player[this.target].ZoneGraveyard && Main.rand.Next(60) == 0; if (((!Main.bloodMoon || Main.getGoodWorld ? (!flag22 ? 1 : 0) : 0) & (flag21 ? 1 : 0)) != 0) this.ai[1] = 0.0f; this.velocity.X = 0.5f * (float) -this.direction; int num147 = 5; if (Main.tile[index24, index25 - 1].type == (ushort) 388) num147 = 2; this.ai[1] += (float) num147; if (this.type == 27) ++this.ai[1]; if (this.type == 31 || this.type == 294 || this.type == 295 || this.type == 296) this.ai[1] += 6f; this.ai[2] = 0.0f; bool flag23 = false; if ((double) this.ai[1] >= 10.0) { flag23 = true; this.ai[1] = 10f; } if (this.type == 460) flag23 = true; WorldGen.KillTile(index24, index25 - 1, true); if ((Main.netMode != 1 || !flag23) && flag23 && Main.netMode != 1) { if (this.type == 26) { WorldGen.KillTile(index24, index25 - 1); if (Main.netMode == 2) NetMessage.SendData(17, number2: ((float) index24), number3: ((float) (index25 - 1))); } else { if (Main.tile[index24, index25 - 1].type == (ushort) 10) { bool flag24 = WorldGen.OpenDoor(index24, index25 - 1, this.direction); if (!flag24) { this.ai[3] = (float) num32; this.netUpdate = true; } if (Main.netMode == 2 & flag24) NetMessage.SendData(19, number2: ((float) index24), number3: ((float) (index25 - 1)), number4: ((float) this.direction)); } if (Main.tile[index24, index25 - 1].type == (ushort) 388) { bool flag25 = WorldGen.ShiftTallGate(index24, index25 - 1, false); if (!flag25) { this.ai[3] = (float) num32; this.netUpdate = true; } if (Main.netMode == 2 & flag25) NetMessage.SendData(19, number: 4, number2: ((float) index24), number3: ((float) (index25 - 1))); } } } } } else { int spriteDirection = this.spriteDirection; if (this.type == 425) spriteDirection *= -1; if ((double) this.velocity.X < 0.0 && spriteDirection == -1 || (double) this.velocity.X > 0.0 && spriteDirection == 1) { if (this.height >= 32 && Main.tile[index24, index25 - 2].nactive() && Main.tileSolid[(int) Main.tile[index24, index25 - 2].type]) { if (Main.tile[index24, index25 - 3].nactive() && Main.tileSolid[(int) Main.tile[index24, index25 - 3].type]) { this.velocity.Y = -8f; this.netUpdate = true; } else { this.velocity.Y = -7f; this.netUpdate = true; } } else if (Main.tile[index24, index25 - 1].nactive() && Main.tileSolid[(int) Main.tile[index24, index25 - 1].type]) { if (this.type == 624) { this.velocity.Y = -8f; if (WorldGen.SolidTile((int) this.Center.X / 16, (int) ((double) this.position.Y + (double) this.height) / 16 - 8)) { this.direction *= -1; this.spriteDirection = this.direction; this.velocity.X = (float) (3 * this.direction); } } else this.velocity.Y = -6f; this.netUpdate = true; } else if ((double) this.position.Y + (double) this.height - (double) (index25 * 16) > 20.0 && Main.tile[index24, index25].nactive() && !Main.tile[index24, index25].topSlope() && Main.tileSolid[(int) Main.tile[index24, index25].type]) { this.velocity.Y = -5f; this.netUpdate = true; } else if (this.directionY < 0 && this.type != 67 && (!Main.tile[index24, index25 + 1].nactive() || !Main.tileSolid[(int) Main.tile[index24, index25 + 1].type]) && (!Main.tile[index24 + this.direction, index25 + 1].nactive() || !Main.tileSolid[(int) Main.tile[index24 + this.direction, index25 + 1].type])) { this.velocity.Y = -8f; this.velocity.X *= 1.5f; this.netUpdate = true; } else if (flag8) { this.ai[1] = 0.0f; this.ai[2] = 0.0f; } if ((double) this.velocity.Y == 0.0 & flag6 && (double) this.ai[3] == 1.0) this.velocity.Y = -5f; if ((double) this.velocity.Y == 0.0 && (Main.expertMode ? 1 : (this.type == 586 ? 1 : 0)) != 0 && (double) Main.player[this.target].Bottom.Y < (double) this.Top.Y && (double) Math.Abs(this.Center.X - Main.player[this.target].Center.X) < (double) (Main.player[this.target].width * 3) && Collision.CanHit((Entity) this, (Entity) Main.player[this.target])) { if (this.type == 586) { int num148 = (int) (((double) this.Bottom.Y - 16.0 - (double) Main.player[this.target].Bottom.Y) / 16.0); if (num148 < 14 && Collision.CanHit((Entity) this, (Entity) Main.player[this.target])) { if (num148 < 7) this.velocity.Y = -8.8f; else if (num148 < 8) this.velocity.Y = -9.2f; else if (num148 < 9) this.velocity.Y = -9.7f; else if (num148 < 10) this.velocity.Y = -10.3f; else if (num148 < 11) this.velocity.Y = -10.6f; else this.velocity.Y = -11f; } } if ((double) this.velocity.Y == 0.0) { int num149 = 6; if ((double) Main.player[this.target].Bottom.Y > (double) this.Top.Y - (double) (num149 * 16)) { this.velocity.Y = -7.9f; } else { int index26 = (int) ((double) this.Center.X / 16.0); int num150 = (int) ((double) this.Bottom.Y / 16.0) - 1; for (int index27 = num150; index27 > num150 - num149; --index27) { if (Main.tile[index26, index27].nactive() && TileID.Sets.Platforms[(int) Main.tile[index26, index27].type]) { this.velocity.Y = -7.9f; break; } } } } } } if ((this.type == 31 || this.type == 294 || this.type == 295 || this.type == 296 || this.type == 47 || this.type == 77 || this.type == 104 || this.type == 168 || this.type == 196 || this.type == 385 || this.type == 389 || this.type == 464 || this.type == 470 || this.type >= 524 && this.type <= 527) && (double) this.velocity.Y == 0.0) { int num151 = 100; int num152 = 50; if (this.type == 586) { num151 = 150; num152 = 150; } if ((double) Math.Abs((float) ((double) this.position.X + (double) (this.width / 2) - ((double) Main.player[this.target].position.X + (double) (Main.player[this.target].width / 2)))) < (double) num151 && (double) Math.Abs((float) ((double) this.position.Y + (double) (this.height / 2) - ((double) Main.player[this.target].position.Y + (double) (Main.player[this.target].height / 2)))) < (double) num152 && (this.direction > 0 && (double) this.velocity.X >= 1.0 || this.direction < 0 && (double) this.velocity.X <= -1.0)) { if (this.type == 586) { this.velocity.X += (float) this.direction; this.velocity.X *= 2f; if ((double) this.velocity.X > 8.0) this.velocity.X = 8f; if ((double) this.velocity.X < -8.0) this.velocity.X = -8f; this.velocity.Y = -4.5f; if ((double) this.position.Y > (double) Main.player[this.target].position.Y + 40.0) this.velocity.Y -= 2f; if ((double) this.position.Y > (double) Main.player[this.target].position.Y + 80.0) this.velocity.Y -= 2f; if ((double) this.position.Y > (double) Main.player[this.target].position.Y + 120.0) this.velocity.Y -= 2f; } else { this.velocity.X *= 2f; if ((double) this.velocity.X > 3.0) this.velocity.X = 3f; if ((double) this.velocity.X < -3.0) this.velocity.X = -3f; this.velocity.Y = -4f; } this.netUpdate = true; } } if (this.type == 120 && (double) this.velocity.Y < 0.0) this.velocity.Y *= 1.1f; if (this.type == 287 && (double) this.velocity.Y == 0.0 && (double) Math.Abs((float) ((double) this.position.X + (double) (this.width / 2) - ((double) Main.player[this.target].position.X + (double) (Main.player[this.target].width / 2)))) < 150.0 && (double) Math.Abs((float) ((double) this.position.Y + (double) (this.height / 2) - ((double) Main.player[this.target].position.Y + (double) (Main.player[this.target].height / 2)))) < 50.0 && (this.direction > 0 && (double) this.velocity.X >= 1.0 || this.direction < 0 && (double) this.velocity.X <= -1.0)) { this.velocity.X = (float) (8 * this.direction); this.velocity.Y = -4f; this.netUpdate = true; } if (this.type == 287 && (double) this.velocity.Y < 0.0) { this.velocity.X *= 1.2f; this.velocity.Y *= 1.1f; } if (this.type == 460 && (double) this.velocity.Y < 0.0) { this.velocity.X *= 1.3f; this.velocity.Y *= 1.1f; } } } else if (flag8) { this.ai[1] = 0.0f; this.ai[2] = 0.0f; } if (Main.netMode == 1 || this.type != 120 || (double) this.ai[3] < (double) num32) return; int num153 = (int) Main.player[this.target].position.X / 16; int num154 = (int) Main.player[this.target].position.Y / 16; int num155 = (int) this.position.X / 16; int num156 = (int) this.position.Y / 16; int num157 = 20; int num158 = 0; bool flag26 = false; if ((double) Math.Abs(this.position.X - Main.player[this.target].position.X) + (double) Math.Abs(this.position.Y - Main.player[this.target].position.Y) > 2000.0) { num158 = 100; flag26 = true; } while (!flag26 && num158 < 100) { ++num158; int index28 = Main.rand.Next(num153 - num157, num153 + num157); for (int index29 = Main.rand.Next(num154 - num157, num154 + num157); index29 < num154 + num157; ++index29) { if ((index29 < num154 - 4 || index29 > num154 + 4 || index28 < num153 - 4 || index28 > num153 + 4) && (index29 < num156 - 1 || index29 > num156 + 1 || index28 < num155 - 1 || index28 > num155 + 1) && Main.tile[index28, index29].nactive()) { bool flag27 = true; if (this.type == 32 && Main.tile[index28, index29 - 1].wall == (ushort) 0) flag27 = false; else if (Main.tile[index28, index29 - 1].lava()) flag27 = false; if (flag27 && Main.tileSolid[(int) Main.tile[index28, index29].type] && !Collision.SolidTiles(index28 - 1, index28 + 1, index29 - 4, index29 - 1)) { this.position.X = (float) (index28 * 16 - this.width / 2); this.position.Y = (float) (index29 * 16 - this.height); this.netUpdate = true; this.ai[3] = -120f; } } } } } public static bool DespawnEncouragement_AIStyle3_Fighters_NotDiscouraged( int npcID, Vector2 position, NPC npcInstance) { return Main.eclipse || !Main.dayTime || npcInstance != null && npcInstance.SpawnedFromStatue || (double) position.Y > Main.worldSurface * 16.0 || npcInstance != null && Main.player[npcInstance.target].ZoneGraveyard || Main.snowMoon && (npcID == 343 || npcID == 350) || Main.invasionType == 1 && (npcID == 26 || npcID == 27 || npcID == 28 || npcID == 111 || npcID == 471) || npcID == 73 || npcID == 624 || npcID == 631 && (double) npcInstance.ai[2] > 0.0 || Main.invasionType == 3 && npcID >= 212 && npcID <= 216 || Main.invasionType == 4 && (npcID == 381 || npcID == 382 || npcID == 383 || npcID == 385 || npcID == 386 || npcID == 389 || npcID == 391 || npcID == 520) || npcID == 31 || npcID == 294 || npcID == 295 || npcID == 296 || npcID == 47 || npcID == 67 || npcID == 77 || npcID == 78 || npcID == 79 || npcID == 80 || npcID == 630 || npcID == 110 || npcID == 120 || npcID == 168 || npcID == 181 || npcID == 185 || npcID == 198 || npcID == 199 || npcID == 206 || npcID == 217 || npcID == 218 || npcID == 219 || npcID == 220 || npcID == 239 || npcID == 243 || npcID == 254 || npcID == (int) byte.MaxValue || npcID == 257 || npcID == 258 || npcID == 291 || npcID == 292 || npcID == 293 || npcID == 379 || npcID == 380 || npcID == 464 || npcID == 470 || npcID == 424 || npcID == 411 && (npcInstance == null || (double) npcInstance.ai[1] >= 180.0 || (double) npcInstance.ai[1] < 90.0) || npcID == 409 || npcID == 425 || npcID == 429 || npcID == 427 || npcID == 428 || npcID == 580 || npcID == 582 || npcID == 508 || npcID == 415 || npcID == 419 || npcID >= 524 && npcID <= 527 || npcID == 528 || npcID == 529 || npcID == 530 || npcID == 532; } public static bool DespawnEncouragement_AIStyle3_Fighters_CanBeBusyWithAction(int npcID) => npcID == 110 || npcID == 111 || npcID == 206 || npcID == 216 || npcID == 214 || npcID == 215 || npcID == 291 || npcID == 292 || npcID == 293 || npcID == 350 || npcID == 381 || npcID == 382 || npcID == 383 || npcID == 385 || npcID == 386 || npcID == 389 || npcID == 391 || npcID == 469 || npcID == 166 || npcID == 466 || npcID == 471 || npcID == 411 || npcID == 409 || npcID == 424 || npcID == 425 || npcID == 426 || npcID == 415 || npcID == 419 || npcID == 520; private void AI_001_Slimes() { if (this.type == 1 && ((double) this.ai[1] == 1.0 || (double) this.ai[1] == 2.0 || (double) this.ai[1] == 3.0)) this.ai[1] = -1f; if (this.type == 1 && (double) this.ai[1] == 0.0 && Main.netMode != 1 && (double) this.value > 0.0) { this.ai[1] = -1f; if (Main.rand.Next(20) == 0) { this.ai[1] = (float) NPC.AI_001_Slimes_GenerateItemInsideBody((double) this.ai[0] == -999.0); this.netUpdate = true; } } if (this.type == 1 && (double) this.ai[0] == -999.0) { this.frame.Y = 0; this.frameCounter = 0.0; this.rotation = 0.0f; } else { if (this.type == 244) { Lighting.AddLight((int) (((double) this.position.X + (double) (this.width / 2)) / 16.0), (int) (((double) this.position.Y + (double) (this.height / 2)) / 16.0), (float) Main.DiscoR / (float) byte.MaxValue * 1f, (float) Main.DiscoG / (float) byte.MaxValue * 1f, (float) Main.DiscoB / (float) byte.MaxValue * 1f); this.AI_001_SetRainbowSlimeColor(); } bool flag = false; if (!Main.dayTime || this.life != this.lifeMax || (double) this.position.Y > Main.worldSurface * 16.0 || Main.slimeRain) flag = true; if (this.type == 81) { flag = true; if (Main.rand.Next(30) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(this.position, this.width, this.height, 14, Alpha: this.alpha, newColor: this.color); Main.dust[index].velocity *= 0.3f; this.position = this.position - this.netOffset; } } if ((this.type == 377 || this.type == 446) && this.target != (int) byte.MaxValue && !Main.player[this.target].dead && (double) Vector2.Distance(this.Center, Main.player[this.target].Center) <= 200.0 && !this.wet) flag = true; if (this.type == 183) flag = true; if (this.type == 304) flag = true; if (this.type == 244) { flag = true; this.ai[0] += 2f; } if (this.type == 147 && Main.rand.Next(10) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(this.position, this.width, this.height, 76); Main.dust[index].noGravity = true; Main.dust[index].velocity *= 0.1f; this.position = this.position - this.netOffset; } if (this.type == 184) { if (Main.rand.Next(8) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(this.position - this.velocity, this.width, this.height, 76); Main.dust[index].noGravity = true; Main.dust[index].velocity *= 0.15f; this.position = this.position - this.netOffset; } flag = true; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if (!this.wet && !Main.player[this.target].npcTypeNoAggro[this.type]) { Vector2 vector2_1 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num1 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2_1.X; float num2 = Main.player[this.target].position.Y - vector2_1.Y; float num3 = (float) Math.Sqrt((double) num1 * (double) num1 + (double) num2 * (double) num2); if (Main.expertMode && (double) num3 < 120.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { for (int index = 0; index < 5; ++index) { Vector2 vector2_2 = new Vector2((float) (index - 2), -4f); vector2_2.X *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2_2.Y *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2_2.Normalize(); vector2_2 *= (float) (4.0 + (double) Main.rand.Next(-50, 51) * 0.00999999977648258); int damageForProjectiles = this.GetAttackDamage_ForProjectiles(9f, 9f); Projectile.NewProjectile(vector2_1.X, vector2_1.Y, vector2_2.X, vector2_2.Y, 174, damageForProjectiles, 0.0f, Main.myPlayer); this.localAI[0] = 30f; } } } else if ((double) num3 < 200.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { float num4 = Main.player[this.target].position.Y - vector2_1.Y - (float) Main.rand.Next(0, 200); float num5 = 4.5f / (float) Math.Sqrt((double) num1 * (double) num1 + (double) num4 * (double) num4); float SpeedX = num1 * num5; float SpeedY = num4 * num5; this.localAI[0] = 50f; Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX, SpeedY, 174, 9, 0.0f, Main.myPlayer); } } } } if (this.type == 535) { flag = true; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if (!this.wet && !Main.player[this.target].npcTypeNoAggro[this.type]) { Vector2 vector2_3 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num6 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2_3.X; float num7 = Main.player[this.target].position.Y - vector2_3.Y; float num8 = (float) Math.Sqrt((double) num6 * (double) num6 + (double) num7 * (double) num7); if (Main.expertMode && (double) num8 < 120.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { for (int index = 0; index < 5; ++index) { Vector2 vector2_4 = new Vector2((float) (index - 2), -4f); vector2_4.X *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2_4.Y *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2_4.Normalize(); vector2_4 *= (float) (4.0 + (double) Main.rand.Next(-50, 51) * 0.00999999977648258); int damageForProjectiles = this.GetAttackDamage_ForProjectiles(9f, 9f); Projectile.NewProjectile(vector2_3.X, vector2_3.Y, vector2_4.X, vector2_4.Y, 605, damageForProjectiles, 0.0f, Main.myPlayer); this.localAI[0] = 30f; } } } else if ((double) num8 < 200.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { float num9 = Main.player[this.target].position.Y - vector2_3.Y - (float) Main.rand.Next(0, 200); float num10 = 4.5f / (float) Math.Sqrt((double) num6 * (double) num6 + (double) num9 * (double) num9); float SpeedX = num6 * num10; float SpeedY = num9 * num10; this.localAI[0] = 50f; Projectile.NewProjectile(vector2_3.X, vector2_3.Y, SpeedX, SpeedY, 605, 9, 0.0f, Main.myPlayer); } } } } if (this.type == 658) { flag = true; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if (!this.wet && Main.player[this.target].active && !Main.player[this.target].dead && !Main.player[this.target].npcTypeNoAggro[this.type]) { Player player = Main.player[this.target]; Vector2 center = this.Center; float num11 = player.Center.X - center.X; float num12 = player.Center.Y - center.Y; float num13 = (float) Math.Sqrt((double) num11 * (double) num11 + (double) num12 * (double) num12); int num14 = NPC.CountNPCS(658); if (Main.expertMode && num14 < 5 && (double) Math.Abs(num11) < 500.0 && (double) Math.Abs(num12) < 550.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { for (int index = 0; index < 3; ++index) { Vector2 vector2 = new Vector2((float) (index - 1), -4f); vector2.X *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2.Y *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.00499999988824129); vector2.Normalize(); vector2 *= (float) (6.0 + (double) Main.rand.Next(-50, 51) * 0.00999999977648258); if ((double) num13 > 350.0) vector2 *= 2f; else if ((double) num13 > 250.0) vector2 *= 1.5f; int projectilesMultiLerp = this.GetAttackDamage_ForProjectiles_MultiLerp(15f, 20f, 25f); Projectile.NewProjectile(center.X, center.Y, vector2.X, vector2.Y, 920, projectilesMultiLerp, 0.0f, Main.myPlayer); this.localAI[0] = 25f; if (num14 > 4) break; } } } else if ((double) Math.Abs(num11) < 500.0 && (double) Math.Abs(num12) < 550.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { float num15 = num13; this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { float num16 = Main.player[this.target].position.Y - center.Y - (float) Main.rand.Next(0, 200); float num17 = 4.5f / (float) Math.Sqrt((double) num11 * (double) num11 + (double) num16 * (double) num16) * 2f; if ((double) num15 > 350.0) num17 *= 2f; else if ((double) num15 > 250.0) num17 *= 1.5f; float SpeedX = num11 * num17; float SpeedY = num16 * num17; this.localAI[0] = 50f; int projectilesMultiLerp = this.GetAttackDamage_ForProjectiles_MultiLerp(15f, 20f, 25f); Projectile.NewProjectile(center.X, center.Y, SpeedX, SpeedY, 920, projectilesMultiLerp, 0.0f, Main.myPlayer); } } } } if (this.type == 659) { flag = true; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if (!this.wet && Main.player[this.target].active && !Main.player[this.target].dead && !Main.player[this.target].npcTypeNoAggro[this.type]) { Player player = Main.player[this.target]; Vector2 center = this.Center; float num18 = player.Center.X - center.X; float num19 = player.Center.Y - center.Y; float num20 = (float) Math.Sqrt((double) num18 * (double) num18 + (double) num19 * (double) num19); if ((double) Math.Abs(num18) < 500.0 && (double) Math.Abs(num19) < 550.0 && Collision.CanHit(this.position, this.width, this.height, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { float num21 = Main.player[this.target].position.Y - center.Y - (float) Main.rand.Next(0, 200); float num22 = 4.5f / (float) Math.Sqrt((double) num18 * (double) num18 + (double) num21 * (double) num21) * 2f; if ((double) num20 > 350.0) num22 *= 1.75f; else if ((double) num20 > 250.0) num22 *= 1.25f; float SpeedX = num18 * num22; float SpeedY = num21 * num22; this.localAI[0] = 40f; if (Main.expertMode) this.localAI[0] = 30f; int projectilesMultiLerp = this.GetAttackDamage_ForProjectiles_MultiLerp(15f, 20f, 25f); Projectile.NewProjectile(center.X, center.Y, SpeedX, SpeedY, 921, projectilesMultiLerp, 0.0f, Main.myPlayer); } } } } if (this.type == 204) { flag = true; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if (!this.wet && !Main.player[this.target].npcTypeNoAggro[this.type]) { Vector2 vector2_5 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); float num23 = Main.player[this.target].position.X + (float) Main.player[this.target].width * 0.5f - vector2_5.X; float num24 = Main.player[this.target].position.Y - vector2_5.Y; float num25 = (float) Math.Sqrt((double) num23 * (double) num23 + (double) num24 * (double) num24); if (Main.expertMode && (double) num25 < 200.0 && Collision.CanHit(new Vector2(this.position.X, this.position.Y - 20f), this.width, this.height + 20, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -40f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { for (int index = 0; index < 5; ++index) { Vector2 vector2_6 = new Vector2((float) (index - 2), -2f); vector2_6.X *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.0199999995529652); vector2_6.Y *= (float) (1.0 + (double) Main.rand.Next(-50, 51) * 0.0199999995529652); vector2_6.Normalize(); vector2_6 *= (float) (3.0 + (double) Main.rand.Next(-50, 51) * 0.00999999977648258); int damageForProjectiles = this.GetAttackDamage_ForProjectiles(13f, 13f); Projectile.NewProjectile(vector2_5.X, vector2_5.Y, vector2_6.X, vector2_6.Y, 176, damageForProjectiles, 0.0f, Main.myPlayer); this.localAI[0] = 80f; } } } if ((double) num25 < 400.0 && Collision.CanHit(new Vector2(this.position.X, this.position.Y - 20f), this.width, this.height + 20, Main.player[this.target].position, Main.player[this.target].width, Main.player[this.target].height) && (double) this.velocity.Y == 0.0) { this.ai[0] = -80f; if ((double) this.velocity.Y == 0.0) this.velocity.X *= 0.9f; if (Main.netMode != 1 && (double) this.localAI[0] == 0.0) { float num26 = Main.player[this.target].position.Y - vector2_5.Y - (float) Main.rand.Next(-30, 20) - num25 * 0.05f; float num27 = Main.player[this.target].position.X - vector2_5.X - (float) Main.rand.Next(-20, 20); float num28 = 7f / (float) Math.Sqrt((double) num27 * (double) num27 + (double) num26 * (double) num26); float SpeedX = num27 * num28; float SpeedY = num26 * num28; this.localAI[0] = 65f; Projectile.NewProjectile(vector2_5.X, vector2_5.Y, SpeedX, SpeedY, 176, 13, 0.0f, Main.myPlayer); } } } } if (this.type == 377 || this.type == 446) { if ((double) this.localAI[2] < 90.0) ++this.localAI[2]; else this.friendly = false; } if (this.type == 59) { this.position = this.position + this.netOffset; Lighting.AddLight((int) (((double) this.position.X + (double) (this.width / 2)) / 16.0), (int) (((double) this.position.Y + (double) (this.height / 2)) / 16.0), 1f, 0.3f, 0.1f); int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, Scale: 1.7f); Main.dust[index].noGravity = true; this.position = this.position - this.netOffset; } if ((double) this.ai[2] > 1.0) --this.ai[2]; if (this.wet) { if (this.collideY) this.velocity.Y = -2f; if ((double) this.velocity.Y < 0.0 && (double) this.ai[3] == (double) this.position.X) { this.direction *= -1; this.ai[2] = 200f; } if ((double) this.velocity.Y > 0.0) this.ai[3] = this.position.X; if (this.type == 59) { if ((double) this.velocity.Y > 2.0) this.velocity.Y *= 0.9f; else if (this.directionY < 0) this.velocity.Y -= 0.8f; this.velocity.Y -= 0.5f; if ((double) this.velocity.Y < -10.0) this.velocity.Y = -10f; } else { if ((double) this.velocity.Y > 2.0) this.velocity.Y *= 0.9f; this.velocity.Y -= 0.5f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; } if ((double) this.ai[2] == 1.0 & flag) this.TargetClosest(); } this.aiAction = 0; if ((double) this.ai[2] == 0.0) { this.ai[0] = -100f; this.ai[2] = 1f; this.TargetClosest(); } if ((double) this.velocity.Y == 0.0) { if (this.collideY && (double) this.oldVelocity.Y != 0.0 && Collision.SolidCollision(this.position, this.width, this.height)) this.position.X -= this.velocity.X + (float) this.direction; if ((double) this.ai[3] == (double) this.position.X) { this.direction *= -1; this.ai[2] = 200f; } this.ai[3] = 0.0f; this.velocity.X *= 0.8f; if ((double) this.velocity.X > -0.1 && (double) this.velocity.X < 0.1) this.velocity.X = 0.0f; if (flag) ++this.ai[0]; ++this.ai[0]; if (this.type == 59) this.ai[0] += 2f; if (this.type == 71) this.ai[0] += 3f; if (this.type == 138) this.ai[0] += 2f; if (this.type == 183) ++this.ai[0]; if (this.type == 658) this.ai[0] += 5f; if (this.type == 659) this.ai[0] += 3f; if (this.type == 304) this.ai[0] += (float) ((1 - this.life / this.lifeMax) * 10); if (this.type == 377 || this.type == 446) this.ai[0] += 3f; if (this.type == 81) { if ((double) this.scale >= 0.0) this.ai[0] += 4f; else ++this.ai[0]; } float num29 = -1000f; if (this.type == 659) num29 = -500f; int num30 = 0; if ((double) this.ai[0] >= 0.0) num30 = 1; if ((double) this.ai[0] >= (double) num29 && (double) this.ai[0] <= (double) num29 * 0.5) num30 = 2; if ((double) this.ai[0] >= (double) num29 * 2.0 && (double) this.ai[0] <= (double) num29 * 1.5) num30 = 3; if (num30 > 0) { this.netUpdate = true; if (flag && (double) this.ai[2] == 1.0) this.TargetClosest(); if (num30 == 3) { this.velocity.Y = -8f; if (this.type == 59) this.velocity.Y -= 2f; this.velocity.X += (float) (3 * this.direction); if (this.type == 59) this.velocity.X += 0.5f * (float) this.direction; this.ai[0] = -200f; this.ai[3] = this.position.X; } else { this.velocity.Y = -6f; this.velocity.X += (float) (2 * this.direction); if (this.type == 59) this.velocity.X += (float) (2 * this.direction); this.ai[0] = -120f; if (num30 == 1) this.ai[0] += num29; else this.ai[0] += num29 * 2f; } if (this.type == 659) { this.velocity.Y *= 1.6f; this.velocity.X *= 1.2f; } if (this.type == 141) { this.velocity.Y *= 1.3f; this.velocity.X *= 1.2f; } if (this.type != 377 && this.type != 446) return; this.velocity.Y *= 0.9f; this.velocity.X *= 0.6f; if (flag) { this.direction = -this.direction; this.velocity.X *= -1f; } if (!WorldGen.SolidTile((int) ((double) this.Center.X / 16.0), (int) ((double) this.Center.Y / 16.0) - 1) || -(double) this.velocity.Y + (double) this.height <= 16.0) return; this.velocity.Y = (float) -(16 - this.height); } else { if ((double) this.ai[0] < -30.0) return; this.aiAction = 1; } } else { if (this.target >= (int) byte.MaxValue || (this.direction != 1 || (double) this.velocity.X >= 3.0) && (this.direction != -1 || (double) this.velocity.X <= -3.0)) return; if (this.collideX && (double) Math.Abs(this.velocity.X) == 0.200000002980232) this.position.X -= 1.4f * (float) this.direction; if (this.collideY && (double) this.oldVelocity.Y != 0.0 && Collision.SolidCollision(this.position, this.width, this.height)) this.position.X -= this.velocity.X + (float) this.direction; if (this.direction == -1 && (double) this.velocity.X < 0.01 || this.direction == 1 && (double) this.velocity.X > -0.01) this.velocity.X += 0.2f * (float) this.direction; else this.velocity.X *= 0.93f; } } } public void AI_001_SetRainbowSlimeColor() { this.color.R = (byte) Main.DiscoR; this.color.G = (byte) Main.DiscoG; this.color.B = (byte) Main.DiscoB; this.color.A = (byte) 100; this.alpha = 175; } private static int AI_001_Slimes_GenerateItemInsideBody(bool isBallooned) { int num1 = Main.rand.Next(4); int num2; if (isBallooned) { switch (Main.rand.Next(13)) { case 1: num2 = 4368; break; case 2: num2 = 4369; break; case 3: num2 = 4370; break; case 4: num2 = 4371; break; case 5: num2 = 4612; break; case 6: num2 = 4674; break; case 7: case 8: case 9: num2 = 4343; break; case 10: case 11: case 12: num2 = 4344; break; default: num2 = 4367; break; } } else { switch (num1) { case 0: switch (Main.rand.Next(7)) { case 0: num2 = 290; break; case 1: num2 = 292; break; case 2: num2 = 296; break; case 3: num2 = 2322; break; default: num2 = Main.netMode == 0 || Main.rand.Next(2) != 0 ? 2350 : 2997; break; } break; case 1: switch (Main.rand.Next(4)) { case 0: num2 = 8; break; case 1: num2 = 166; break; case 2: num2 = 965; break; default: num2 = 58; break; } break; case 2: num2 = Main.rand.Next(2) != 0 ? Main.rand.Next(699, 703) : Main.rand.Next(11, 15); break; default: switch (Main.rand.Next(3)) { case 0: num2 = 71; break; case 1: num2 = 72; break; default: num2 = 73; break; } break; } } return num2; } private void AI_110_Betsy() { NPCUtils.TargetClosestBetsy(this, false); NPCAimedTarget targetData = this.GetTargetData(); int num1 = -1; float num2 = 1f; int Damage1 = 35; int Damage2 = 35; float num3 = 10f; float moveSpeed = 0.45f; float num4 = 7.5f; float num5 = 30f; float num6 = 30f; float num7 = 23f; float num8 = 600f; float num9 = 12f; float num10 = 40f; float num11 = 80f; float num12 = num10 + num11; float num13 = 1500f; float num14 = 60f; float num15 = 13f; float amount = 0.03333334f; float num16 = 12f; int num17 = 10; int num18 = 6 * num17; float num19 = 60f; float num20 = num14 + (float) num18 + num19; float num21 = 60f; float num22 = (float) (6.28318548202515 * (1.0 / (double) num21)); float num23 = 0.1f; float num24 = 32f; float num25 = 90f; float num26 = 20f; double num27 = (double) this.ai[0]; if ((double) this.ai[0] == 0.0) { if ((double) ++this.ai[1] >= (double) num3) { this.ai[1] = 0.0f; this.ai[0] = 1f; this.ai[2] = 0.0f; this.netUpdate = true; } } else if ((double) this.ai[0] == 1.0) { if ((double) this.ai[2] == 0.0) this.ai[2] = (double) this.Center.X < (double) targetData.Center.X ? 1f : -1f; this.SimpleFlyMovement(this.DirectionTo(targetData.Center + new Vector2((float) (-(double) this.ai[2] * 300.0), -200f)) * num4, moveSpeed); this.direction = this.spriteDirection = (double) this.Center.X < (double) targetData.Center.X ? 1 : -1; if ((double) ++this.ai[1] >= (double) num5) { int num28 = 1; if ((double) this.ai[3] == 5.0 && Main.rand.Next(3) == 0) ++this.ai[3]; switch ((int) this.ai[3]) { case 0: case 1: case 3: num28 = 2; break; case 2: num28 = 3; break; case 4: num28 = 4; break; case 5: num28 = 5; break; case 6: num28 = 3; break; case 7: num28 = 6; break; } this.ai[0] = (float) num28; this.ai[1] = 0.0f; this.ai[2] = 0.0f; ++this.ai[3]; this.netUpdate = true; if ((double) this.ai[3] >= 8.0) this.ai[3] = 0.0f; switch (num28) { case 2: Vector2 v1 = this.DirectionTo(targetData.Center); this.spriteDirection = (double) v1.X > 0.0 ? 1 : -1; this.rotation = v1.ToRotation(); if (this.spriteDirection == -1) this.rotation += 3.141593f; this.velocity = v1 * num7; break; case 3: Vector2 vector2 = new Vector2((double) targetData.Center.X > (double) this.Center.X ? 1f : -1f, 0.0f); this.spriteDirection = (double) vector2.X > 0.0 ? 1 : -1; this.velocity = vector2 * -2f; break; case 5: Vector2 v2 = this.DirectionTo(targetData.Center); this.spriteDirection = (double) v2.X > 0.0 ? 1 : -1; this.rotation = v2.ToRotation(); if (this.spriteDirection == -1) this.rotation += 3.141593f; this.velocity = v2 * num24; break; } } } else if ((double) this.ai[0] == 2.0) { if ((double) this.ai[1] == 0.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsyWindAttack, this.Center); if ((double) ++this.ai[1] >= (double) num6) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; } } else if ((double) this.ai[0] == 3.0) { ActiveSound activeSound = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[2])); if (activeSound != null) activeSound.Position = this.Center; ++this.ai[1]; int num29 = (double) this.Center.X < (double) targetData.Center.X ? 1 : -1; this.ai[2] = (float) num29; if ((double) this.ai[1] < (double) num10) { Vector2 vector2_1 = targetData.Center + new Vector2((float) num29 * -num8, -250f); Vector2 vector2_2 = this.DirectionTo(vector2_1) * num9; if ((double) this.Distance(vector2_1) < (double) num9) this.Center = vector2_1; else this.position = this.position + vector2_2; if ((double) Vector2.Distance(vector2_1, this.Center) < 16.0) this.ai[1] = num10 - 1f; num2 = 1.5f; } if ((double) this.ai[1] == (double) num10) { int num30 = (double) targetData.Center.X > (double) this.Center.X ? 1 : -1; this.velocity = new Vector2((float) num30, 0.0f) * 10f; this.direction = this.spriteDirection = num30; if (Main.netMode != 1) Projectile.NewProjectile(this.Center, this.velocity, 687, Damage1, 0.0f, Main.myPlayer, ai1: ((float) this.whoAmI)); float[] localAi = this.localAI; SlotId slotId = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsyFlameBreath, this.Center); double num31 = (double) ((SlotId) ref slotId).ToFloat(); localAi[2] = (float) num31; } if ((double) this.ai[1] >= (double) num10) { num2 = 1.5f; if ((double) Math.Abs(targetData.Center.X - this.Center.X) > 550.0 && (double) Math.Abs(this.velocity.X) < 20.0) this.velocity.X += (float) Math.Sign(this.velocity.X) * 0.5f; } if ((double) this.ai[1] >= (double) num12) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; } } else if ((double) this.ai[0] == 4.0) { int num32 = (double) this.Center.X < (double) targetData.Center.X ? 1 : -1; this.ai[2] = (float) num32; if ((double) this.ai[1] < (double) num14) { Vector2 Destination = targetData.Center + new Vector2((float) num32 * -num13, -350f); this.velocity = Vector2.Lerp(this.velocity, this.DirectionTo(Destination) * num15, amount); this.direction = this.spriteDirection = (double) this.Center.X < (double) targetData.Center.X ? 1 : -1; if ((double) Vector2.Distance(Destination, this.Center) < 16.0) this.ai[1] = num14 - 1f; num2 = 1.5f; } else if ((double) this.ai[1] == (double) num14) { Vector2 v = this.DirectionTo(targetData.Center); v.Y *= 0.25f; v = v.SafeNormalize(Vector2.UnitX * (float) this.direction); this.spriteDirection = (double) v.X > 0.0 ? 1 : -1; this.rotation = v.ToRotation(); if (this.spriteDirection == -1) this.rotation += 3.141593f; this.velocity = v * num16; } else { this.position.X += this.DirectionTo(targetData.Center).X * 7f; this.position.Y += this.DirectionTo(targetData.Center + new Vector2(0.0f, -400f)).Y * 6f; if ((double) this.ai[1] <= (double) num20 - (double) num19) num2 = 1.5f; Vector2 position = this.Center + new Vector2((110f + 30f) * (float) this.direction, 20f).RotatedBy((double) this.rotation); int num33 = (int) ((double) this.ai[1] - (double) num14 + 1.0); if (num33 <= num18 && num33 % num17 == 0 && Main.netMode != 1) Projectile.NewProjectile(position, this.velocity, 686, Damage2, 0.0f, Main.myPlayer); } if ((double) this.ai[1] > (double) num20 - (double) num19) this.velocity.Y -= 0.1f; ++this.ai[1]; if ((double) this.ai[1] >= (double) num20) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; } } else if ((double) this.ai[0] == 5.0) { this.velocity = this.velocity.RotatedBy(-(double) num22 * (double) this.direction); this.position.Y -= num23; this.position = this.position + this.DirectionTo(targetData.Center) * 10f; this.rotation -= num22 * (float) this.direction; num2 *= 0.7f; if ((double) this.ai[1] == 1.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsyFlyingCircleAttack, this.Center); if ((double) ++this.ai[1] >= (double) num21) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.velocity = this.velocity / 2f; } } else if ((double) this.ai[0] == 6.0) { if ((double) this.ai[1] == 0.0) { this.SimpleFlyMovement(this.DirectionTo(targetData.Center + new Vector2(0.0f, -200f)) * num4 * 2f, moveSpeed * 2f); this.direction = this.spriteDirection = (double) this.Center.X < (double) targetData.Center.X ? 1 : -1; ++this.ai[2]; if ((double) this.Distance(targetData.Center) < 350.0 || (double) this.ai[2] >= 180.0) { this.ai[1] = 1f; this.netUpdate = true; } } else { if ((double) this.ai[1] == 1.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsyScream); if ((double) this.ai[1] < (double) num26) this.velocity = this.velocity * 0.95f; else this.velocity = this.velocity * 0.98f; if ((double) this.ai[1] == (double) num26) { if ((double) this.velocity.Y > 0.0) this.velocity.Y /= 3f; this.velocity.Y -= 3f; } num2 *= 0.85f; if (((double) this.ai[1] == 20.0 || (double) this.ai[1] == 25.0 ? 1 : ((double) this.ai[1] == 30.0 ? 1 : 0)) != 0) { Point tileCoordinates = this.Center.ToTileCoordinates(); int num34 = 30; int num35 = 35; int num36 = 4; for (int i = tileCoordinates.X - num34; i <= tileCoordinates.X + num34; ++i) { bool flag1 = false; for (int j = tileCoordinates.Y - num35 / 3; j < tileCoordinates.Y + num35; ++j) { Tile tileSafely = Framing.GetTileSafely(i, j); bool flag2 = tileSafely.active() && Main.tileSolid[(int) tileSafely.type] && !Main.tileFrameImportant[(int) tileSafely.type]; if (flag1 & flag2) { int tileDustAmount = WorldGen.KillTile_GetTileDustAmount(true, tileSafely); for (int index = 0; index < tileDustAmount; ++index) { Dust dust = Main.dust[WorldGen.KillTile_MakeTileDust(i, j, tileSafely)]; dust.velocity.Y -= (float) (3.0 + (double) num36 * 1.5); dust.velocity.Y *= Main.rand.NextFloat(); dust.scale += (float) num36 * 0.03f; } for (int index = 0; index < tileDustAmount - 1; ++index) { Dust dust = Main.dust[WorldGen.KillTile_MakeTileDust(i, j, tileSafely)]; dust.velocity.Y -= 1f + (float) num36; dust.velocity.Y *= Main.rand.NextFloat(); } if (tileDustAmount > 0 && Main.rand.Next(3) != 0) { float num37 = (float) (Math.Abs(tileCoordinates.X - i) / (num34 / 2)); Gore gore = Gore.NewGoreDirect(this.position, Vector2.Zero, 61 + Main.rand.Next(3), (float) (1.0 - (double) num36 * 0.150000005960464 + (double) num37 * 0.5)); gore.velocity.Y -= (float) (0.100000001490116 + (double) num36 * 0.5 + (double) num37 * (double) num36 * 1.0); gore.velocity.Y *= Main.rand.NextFloat(); gore.position = new Vector2((float) (i * 16 + 20), (float) (j * 16 + 20)); } } flag1 = !flag2; } } } bool flag = (double) this.ai[1] == 20.0 || (double) this.ai[1] == 45.0 || (double) this.ai[1] == 70.0; if (NPC.CountNPCS(560) > 4) flag = false; if (flag && Main.netMode != 1) { for (int index = 0; index < 1; ++index) { Vector2 vector2 = this.Center + (6.283185f * Main.rand.NextFloat()).ToRotationVector2() * new Vector2(2f, 1f) * 300f * (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 0.400000005960464); if ((double) Vector2.Distance(vector2, targetData.Center) > 100.0) { Point point = vector2.ToPoint(); NPC.NewNPC(point.X, point.Y, 560, this.whoAmI); SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsySummon, vector2); } } List npcList = new List(); for (int index = 0; index < 200; ++index) { NPC npc = Main.npc[index]; if (npc.active && npc.type == 549) npcList.Add(npc); } if (npcList.Count > 0) { for (int index = 0; index < 3; ++index) { NPC npc = npcList[Main.rand.Next(npcList.Count)]; Point point = npc.Center.ToPoint(); NPC.NewNPC(point.X, point.Y, 560); SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_BetsySummon, npc.Center); } } } ++this.ai[1]; } if ((double) this.ai[1] >= (double) num25) { this.ai[0] = 1f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; } } this.localAI[0] += num2; if ((double) this.localAI[0] >= 36.0) this.localAI[0] = 0.0f; if (num1 != -1) this.localAI[0] = (float) (num1 * 4); if ((double) ++this.localAI[1] >= 60.0) this.localAI[1] = 0.0f; float targetAngle = this.DirectionTo(targetData.Center).ToRotation(); float maxChange = 0.04f; switch (this.ai[0]) { case 2f: case 5f: maxChange = 0.0f; break; case 3f: maxChange = 0.01f; targetAngle = 0.0f; if (this.spriteDirection == -1) targetAngle -= 3.141593f; if ((double) this.ai[1] >= (double) num10) { targetAngle += (float) ((double) this.spriteDirection * 3.14159274101257 / 12.0); maxChange = 0.05f; break; } break; case 4f: maxChange = 0.01f; targetAngle = 3.141593f; if (this.spriteDirection == 1) { targetAngle += 3.141593f; break; } break; case 6f: maxChange = 0.02f; targetAngle = 0.0f; if (this.spriteDirection == -1) { targetAngle -= 3.141593f; break; } break; } if (this.spriteDirection == -1) targetAngle += 3.141593f; if ((double) maxChange != 0.0) this.rotation = this.rotation.AngleTowards(targetAngle, maxChange); if (SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[2])) != null) return; float[] localAi1 = this.localAI; SlotId invalid = (SlotId) SlotId.Invalid; double num38 = (double) ((SlotId) ref invalid).ToFloat(); localAi1[2] = (float) num38; } private void AI_026_Unicorns() { int num1 = 30; int num2 = 10; bool flag1 = false; bool flag2 = false; bool flag3 = false; if ((double) this.velocity.Y == 0.0 && ((double) this.velocity.X > 0.0 && this.direction < 0 || (double) this.velocity.X < 0.0 && this.direction > 0)) { flag2 = true; ++this.ai[3]; } if (this.type == 546) { num2 = 4; bool flag4 = (double) this.velocity.Y == 0.0; for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= 0.05f; else this.velocity.X += 0.05f; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= 0.05f; else this.velocity.Y += 0.05f; } } if (flag4) this.velocity.Y = 0.0f; } if (this.type == 315) { Lighting.AddLight(this.Center, 0.4f, 0.36f, 0.2f); int num3 = this.frame.Height; if (num3 < 1) num3 = 1; switch (this.frame.Y / num3) { case 4: case 5: case 6: case 7: Vector2 vector2_1 = this.Bottom + new Vector2(-30f, -8f); Vector2 vector2_2 = new Vector2(60f, 8f); if (Main.rand.Next(3) != 0) { Dust dust = Dust.NewDustPerfect(vector2_1 + new Vector2(Main.rand.NextFloat() * vector2_2.X, Main.rand.NextFloat() * vector2_2.Y), 6, new Vector2?(this.velocity)); dust.scale = 0.6f; dust.fadeIn = 1.1f; dust.noGravity = true; dust.noLight = true; break; } break; } } if ((((double) this.position.X == (double) this.oldPosition.X ? 1 : ((double) this.ai[3] >= (double) num1 ? 1 : 0)) | (flag2 ? 1 : 0)) != 0) { ++this.ai[3]; flag3 = true; } else if ((double) this.ai[3] > 0.0) --this.ai[3]; if ((double) this.ai[3] > (double) (num1 * num2)) this.ai[3] = 0.0f; if (this.justHit) this.ai[3] = 0.0f; if ((double) this.ai[3] == (double) num1) this.netUpdate = true; Vector2 vector2_3 = new Vector2(this.position.X + (float) this.width * 0.5f, this.position.Y + (float) this.height * 0.5f); double num4 = (double) Main.player[this.target].position.X + (double) Main.player[this.target].width * 0.5 - (double) vector2_3.X; float num5 = Main.player[this.target].position.Y - vector2_3.Y; float num6 = (float) Math.Sqrt(num4 * num4 + (double) num5 * (double) num5); if ((double) num6 < 200.0 && !flag3) this.ai[3] = 0.0f; if (this.type == 410) { ++this.ai[1]; bool flag5 = (double) this.ai[1] >= 240.0; if (!flag5 && (double) this.velocity.Y == 0.0) { for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && !Main.player[index].dead && (double) Main.player[index].Distance(this.Center) < 800.0 && (double) Main.player[index].Center.Y < (double) this.Center.Y && (double) Math.Abs(Main.player[index].Center.X - this.Center.X) < 20.0) { flag5 = true; break; } } } if (flag5 && Main.netMode != 1) { for (int index = 0; index < 3; ++index) Projectile.NewProjectile(this.Center.X, this.Center.Y, (float) (((double) Main.rand.NextFloat() - 0.5) * 2.0), (float) (-4.0 - 10.0 * (double) Main.rand.NextFloat()), 538, 50, 0.0f, Main.myPlayer); this.HitEffect(9999); this.active = false; return; } } else if (this.type == 423) { if ((double) this.ai[2] == 1.0) { ++this.ai[1]; this.velocity.X *= 0.7f; if ((double) this.ai[1] < 30.0) { Vector2 Position = this.Center + Vector2.UnitX * (float) this.spriteDirection * -20f; Dust dust = Main.dust[Dust.NewDust(Position, 0, 0, 242)]; Vector2 vector2_4 = Vector2.UnitY.RotatedByRandom(6.28318548202515); dust.position = Position + vector2_4 * 20f; dust.velocity = -vector2_4 * 2f; dust.scale = (float) (0.5 + (double) vector2_4.X * (double) -this.spriteDirection); dust.fadeIn = 1f; dust.noGravity = true; } else if ((double) this.ai[1] == 30.0) { for (int index = 0; index < 20; ++index) { Vector2 Position = this.Center + Vector2.UnitX * (float) this.spriteDirection * -20f; Dust dust = Main.dust[Dust.NewDust(Position, 0, 0, 242)]; Vector2 vector2_5 = Vector2.UnitY.RotatedByRandom(6.28318548202515); dust.position = Position + vector2_5 * 4f; dust.velocity = vector2_5 * 4f + Vector2.UnitX * Main.rand.NextFloat() * (float) this.spriteDirection * -5f; dust.scale = (float) (0.5 + (double) vector2_5.X * (double) -this.spriteDirection); dust.fadeIn = 1f; dust.noGravity = true; } } if ((double) this.velocity.X > -0.5 && (double) this.velocity.X < 0.5) this.velocity.X = 0.0f; if ((double) this.ai[1] == 30.0 && Main.netMode != 1) Projectile.NewProjectile(this.Center.X + (float) (this.spriteDirection * -20), this.Center.Y, (float) (this.spriteDirection * -7), 0.0f, 575, this.GetAttackDamage_ForProjectiles(50f, 35f), 0.0f, Main.myPlayer, (float) this.target); if ((double) this.ai[1] >= 60.0) { this.ai[1] = (float) -Main.rand.Next(320, 601); this.ai[2] = 0.0f; } } else { ++this.ai[1]; if ((double) this.ai[1] >= 180.0 && (double) num6 < 500.0 && (double) this.velocity.Y == 0.0) { flag1 = true; this.ai[1] = 0.0f; this.ai[2] = 1f; this.netUpdate = true; } else if ((double) this.velocity.Y == 0.0 && (double) num6 < 100.0 && (double) Math.Abs(this.velocity.X) > 3.0 && ((double) this.Center.X < (double) Main.player[this.target].Center.X && (double) this.velocity.X > 0.0 || (double) this.Center.X > (double) Main.player[this.target].Center.X && (double) this.velocity.X < 0.0)) this.velocity.Y -= 4f; } } else if (this.type == 155 || this.type == 329) { if ((double) this.velocity.Y == 0.0 && (double) num6 < 100.0 && (double) Math.Abs(this.velocity.X) > 3.0 && ((double) this.position.X + (double) (this.width / 2) < (double) Main.player[this.target].position.X + (double) (Main.player[this.target].width / 2) && (double) this.velocity.X > 0.0 || (double) this.position.X + (double) (this.width / 2) > (double) Main.player[this.target].position.X + (double) (Main.player[this.target].width / 2) && (double) this.velocity.X < 0.0)) this.velocity.Y -= 4f; } else if (this.type == 546 && (double) this.velocity.Y == 0.0 && (double) Math.Abs(this.velocity.X) > 3.0 && ((double) this.Center.X < (double) Main.player[this.target].Center.X && (double) this.velocity.X > 0.0 || (double) this.Center.X > (double) Main.player[this.target].Center.X && (double) this.velocity.X < 0.0)) { this.velocity.Y -= 4f; SoundEngine.PlaySound(3, this.Center, 11); } if (this.type == 546 && !Main.player[this.target].ZoneDesert) { int direction = this.direction; this.TargetClosest(); if (!Main.player[this.target].ZoneDesert) { this.EncourageDespawn(10); this.ai[3] = (float) num1; this.direction = direction; } } if ((double) this.ai[3] < (double) num1) { if ((this.type == 329 || this.type == 315) && !Main.pumpkinMoon) this.EncourageDespawn(10); else this.TargetClosest(); } else { if ((double) this.velocity.X == 0.0) { if ((double) this.velocity.Y == 0.0) { ++this.ai[0]; if ((double) this.ai[0] >= 2.0) { this.direction *= -1; this.spriteDirection = this.direction; this.ai[0] = 0.0f; } } } else this.ai[0] = 0.0f; this.directionY = -1; if (this.direction == 0) this.direction = 1; } float num7 = 6f; float num8 = 0.07f; if (!flag1 && ((double) this.velocity.Y == 0.0 || this.wet || (double) this.velocity.X <= 0.0 && this.direction < 0 || (double) this.velocity.X >= 0.0 && this.direction > 0)) { if (this.type == 155) { if ((double) this.velocity.X > 0.0 && this.direction < 0) this.velocity.X *= 0.95f; if ((double) this.velocity.X < 0.0 && this.direction > 0) this.velocity.X *= 0.95f; } else if (this.type == 329) { if ((double) this.velocity.X > 0.0 && this.direction < 0) this.velocity.X *= 0.9f; if ((double) this.velocity.X < 0.0 && this.direction > 0) this.velocity.X *= 0.9f; if (this.direction > 0 && (double) this.velocity.X < 3.0) this.velocity.X += 0.1f; if (this.direction < 0 && (double) this.velocity.X > -3.0) this.velocity.X -= 0.1f; } else if (this.type == 315) { if ((double) this.velocity.X > 0.0 && this.direction < 0) this.velocity.X *= 0.95f; if ((double) this.velocity.X < 0.0 && this.direction > 0) this.velocity.X *= 0.95f; if ((double) this.velocity.X < -(double) num7 || (double) this.velocity.X > (double) num7) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num7 && this.direction == 1) { this.velocity.X += 0.07f; if ((double) this.velocity.X > (double) num7) this.velocity.X = num7; } else if ((double) this.velocity.X > -(double) num7 && this.direction == -1) { this.velocity.X -= 0.07f; if ((double) this.velocity.X < -(double) num7) this.velocity.X = -num7; } } else if (this.type == 410) { if (Math.Sign(this.velocity.X) != this.direction) this.velocity.X *= 0.9f; num7 = 6f; num8 = 0.2f; } else if (this.type == 423) { if (Math.Sign(this.velocity.X) != this.direction) this.velocity.X *= 0.85f; num7 = 10f; num8 = 0.2f; } else if (this.type == 546) { if (Math.Sign(this.velocity.X) != this.direction) this.velocity.X *= 0.92f; float num9 = MathHelper.Lerp(0.6f, 1f, Math.Abs(Main.windSpeedTarget)) * (float) Math.Sign(Main.windSpeedTarget); if (!Main.player[this.target].ZoneSandstorm) num9 = 0.0f; num7 = (float) (4.0 + (double) num9 * (double) this.direction * 3.0); num8 = 0.05f; } if ((double) this.velocity.X < -(double) num7 || (double) this.velocity.X > (double) num7) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * 0.8f; } else if ((double) this.velocity.X < (double) num7 && this.direction == 1) { this.velocity.X += num8; if ((double) this.velocity.X > (double) num7) this.velocity.X = num7; } else if ((double) this.velocity.X > -(double) num7 && this.direction == -1) { this.velocity.X -= num8; if ((double) this.velocity.X < -(double) num7) this.velocity.X = -num7; } } if ((double) this.velocity.Y >= 0.0) { int num10 = 0; if ((double) this.velocity.X < 0.0) num10 = -1; if ((double) this.velocity.X > 0.0) num10 = 1; Vector2 position = this.position; position.X += this.velocity.X; int index1 = (int) (((double) position.X + (double) (this.width / 2) + (double) ((this.width / 2 + 1) * num10)) / 16.0); int index2 = (int) (((double) position.Y + (double) this.height - 1.0) / 16.0); if (Main.tile[index1, index2] == null) Main.tile[index1, index2] = new Tile(); if (Main.tile[index1, index2 - 1] == null) Main.tile[index1, index2 - 1] = new Tile(); if (Main.tile[index1, index2 - 2] == null) Main.tile[index1, index2 - 2] = new Tile(); if (Main.tile[index1, index2 - 3] == null) Main.tile[index1, index2 - 3] = new Tile(); if (Main.tile[index1, index2 + 1] == null) Main.tile[index1, index2 + 1] = new Tile(); if ((double) (index1 * 16) < (double) position.X + (double) this.width && (double) (index1 * 16 + 16) > (double) position.X && (Main.tile[index1, index2].nactive() && !Main.tile[index1, index2].topSlope() && !Main.tile[index1, index2 - 1].topSlope() && Main.tileSolid[(int) Main.tile[index1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2 - 1].halfBrick() && Main.tile[index1, index2 - 1].nactive()) && (!Main.tile[index1, index2 - 1].nactive() || !Main.tileSolid[(int) Main.tile[index1, index2 - 1].type] || Main.tileSolidTop[(int) Main.tile[index1, index2 - 1].type] || Main.tile[index1, index2 - 1].halfBrick() && (!Main.tile[index1, index2 - 4].nactive() || !Main.tileSolid[(int) Main.tile[index1, index2 - 4].type] || Main.tileSolidTop[(int) Main.tile[index1, index2 - 4].type])) && (!Main.tile[index1, index2 - 2].nactive() || !Main.tileSolid[(int) Main.tile[index1, index2 - 2].type] || Main.tileSolidTop[(int) Main.tile[index1, index2 - 2].type]) && (!Main.tile[index1, index2 - 3].nactive() || !Main.tileSolid[(int) Main.tile[index1, index2 - 3].type] || Main.tileSolidTop[(int) Main.tile[index1, index2 - 3].type]) && (!Main.tile[index1 - num10, index2 - 3].nactive() || !Main.tileSolid[(int) Main.tile[index1 - num10, index2 - 3].type])) { float num11 = (float) (index2 * 16); if (Main.tile[index1, index2].halfBrick()) num11 += 8f; if (Main.tile[index1, index2 - 1].halfBrick()) num11 -= 8f; if ((double) num11 < (double) position.Y + (double) this.height) { float num12 = position.Y + (float) this.height - num11; if ((double) num12 <= 16.1) { this.gfxOffY += this.position.Y + (float) this.height - num11; this.position.Y = num11 - (float) this.height; this.stepSpeed = (double) num12 >= 9.0 ? 2f : 1f; } } } } if ((double) this.velocity.Y == 0.0) { bool flag6 = true; int index3 = (int) ((double) this.position.Y - 7.0) / 16; int num13 = (int) ((double) this.position.X - 7.0) / 16; int num14 = (int) ((double) this.position.X + (double) this.width + 7.0) / 16; for (int index4 = num13; index4 <= num14; ++index4) { if (Main.tile[index4, index3] != null && Main.tile[index4, index3].nactive() && Main.tileSolid[(int) Main.tile[index4, index3].type]) { flag6 = false; break; } } if (flag6) { int index5 = (int) (((double) this.position.X + (double) (this.width / 2) + (double) ((this.width / 2 + 2) * this.direction) + (double) this.velocity.X * 5.0) / 16.0); int index6 = (int) (((double) this.position.Y + (double) this.height - 15.0) / 16.0); if (Main.tile[index5, index6] == null) Main.tile[index5, index6] = new Tile(); if (Main.tile[index5, index6 - 1] == null) Main.tile[index5, index6 - 1] = new Tile(); if (Main.tile[index5, index6 - 2] == null) Main.tile[index5, index6 - 2] = new Tile(); if (Main.tile[index5, index6 - 3] == null) Main.tile[index5, index6 - 3] = new Tile(); if (Main.tile[index5, index6 + 1] == null) Main.tile[index5, index6 + 1] = new Tile(); if (Main.tile[index5 + this.direction, index6 - 1] == null) Main.tile[index5 + this.direction, index6 - 1] = new Tile(); if (Main.tile[index5 + this.direction, index6 + 1] == null) Main.tile[index5 + this.direction, index6 + 1] = new Tile(); if (Main.tile[index5 - this.direction, index6 + 1] == null) Main.tile[index5 - this.direction, index6 + 1] = new Tile(); if (Main.tile[index5 + this.direction, index6 + 3] == null) Main.tile[index5 + this.direction, index6 + 3] = new Tile(); int spriteDirection = this.spriteDirection; if (this.type == 423 || this.type == 410 || this.type == 546) spriteDirection *= -1; if ((double) this.velocity.X < 0.0 && spriteDirection == -1 || (double) this.velocity.X > 0.0 && spriteDirection == 1) { bool flag7 = this.type == 410 || this.type == 423; float num15 = 3f; if (Main.tile[index5, index6 - 2].nactive() && Main.tileSolid[(int) Main.tile[index5, index6 - 2].type]) { if (Main.tile[index5, index6 - 3].nactive() && Main.tileSolid[(int) Main.tile[index5, index6 - 3].type]) { this.velocity.Y = -8.5f; this.netUpdate = true; } else { this.velocity.Y = -7.5f; this.netUpdate = true; } } else if (Main.tile[index5, index6 - 1].nactive() && !Main.tile[index5, index6 - 1].topSlope() && Main.tileSolid[(int) Main.tile[index5, index6 - 1].type]) { this.velocity.Y = -7f; this.netUpdate = true; } else if ((double) this.position.Y + (double) this.height - (double) (index6 * 16) > 20.0 && Main.tile[index5, index6].nactive() && !Main.tile[index5, index6].topSlope() && Main.tileSolid[(int) Main.tile[index5, index6].type]) { this.velocity.Y = -6f; this.netUpdate = true; } else if ((this.directionY < 0 || (double) Math.Abs(this.velocity.X) > (double) num15) && (!flag7 || !Main.tile[index5, index6 + 1].nactive() || !Main.tileSolid[(int) Main.tile[index5, index6 + 1].type]) && (!Main.tile[index5, index6 + 2].nactive() || !Main.tileSolid[(int) Main.tile[index5, index6 + 2].type]) && (!Main.tile[index5 + this.direction, index6 + 3].nactive() || !Main.tileSolid[(int) Main.tile[index5 + this.direction, index6 + 3].type])) { this.velocity.Y = -8f; this.netUpdate = true; } } } } if (this.type == 423 && (double) Math.Abs(this.velocity.X) >= (double) num7 * 0.949999988079071) { Microsoft.Xna.Framework.Rectangle hitbox = this.Hitbox; for (int index = 0; index < 2; ++index) { if (Main.rand.Next(3) == 0) { Dust dust = Main.dust[Dust.NewDust(hitbox.TopLeft(), hitbox.Width, hitbox.Height, 242)]; dust.velocity = Vector2.Zero; dust.noGravity = true; dust.fadeIn = 1f; dust.scale = 0.5f + Main.rand.NextFloat(); } } } if (this.type != 546) return; this.rotation += this.velocity.X * 0.05f; this.spriteDirection = -this.direction; } private void AI_107_ImprovedWalkers() { bool flag1 = (double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0 && !this.justHit; bool flag2 = false; bool flag3 = false; bool flag4 = false; int num1 = 32; int num2 = 15; float num3 = 9f; bool flag5 = false; float num4 = 40f; int num5 = 30; int num6 = 0; bool flag6 = false; bool flag7 = true; float num7 = 0.9f; bool flag8 = false; bool flag9 = false; bool flag10 = false; bool flag11 = false; bool flag12 = false; bool flag13 = false; bool flag14 = false; bool flag15 = true; int num8 = 70; int num9 = num8 / 2; float num10 = 11f; Vector2 vector2_1 = Vector2.Zero; int Damage = 1; int Type = 81; float num11 = 700f; float num12 = 0.0f; float num13 = 0.1f; Vector2? nullable = new Vector2?(); float max1 = 0.5f; int num14 = 1; float num15 = 1f; bool flag16 = false; float num16 = 30f; float num17 = 0.0f; bool flag17 = false; bool flag18 = true; bool flag19 = false; int num18 = 30; bool flag20 = false; bool flag21 = false; bool flag22 = false; bool flag23 = false; LegacySoundStyle legacySoundStyle = (LegacySoundStyle) null; int maxValue1 = 0; bool flag24 = false; float max2 = 1f; float num19 = 0.07f; float num20 = 0.8f; float num21 = (float) (this.width / 2 + 6); bool flag25 = this.directionY < 0; bool flag26 = false; int num22 = 1; bool flag27 = false; float num23 = 5f; float num24 = 3f; float num25 = 8f; float amount1 = 0.05f; float amount2 = 0.04f; float amount3 = 0.1f; bool flag28 = false; float num26 = 0.025f; NPCAimedTarget targetData = this.GetTargetData(); NPCUtils.NPCTargetingMethod npcTargetingMethod = new NPCUtils.NPCTargetingMethod(NPCUtils.TargetClosestCommon); if (NPCID.Sets.BelongsToInvasionOldOnesArmy[this.type]) npcTargetingMethod = new NPCUtils.NPCTargetingMethod(NPCUtils.TargetClosestOldOnesInvasion); if (targetData.Type == NPCTargetType.NPC && Main.npc[this.TranslatedTargetIndex].type == 548 && Main.npc[this.TranslatedTargetIndex].dontTakeDamageFromHostiles) { npcTargetingMethod(this, true, new Vector2?()); targetData = this.GetTargetData(); } if (NPCID.Sets.FighterUsesDD2PortalAppearEffect[this.type]) { if (!targetData.Invalid) flag2 = !Collision.CanHit(this.Center, 0, 0, targetData.Center, 0, 0) && (this.direction == Math.Sign(targetData.Center.X - this.Center.X) || this.noGravity && (double) this.Distance(targetData.Center) > 50.0 && (double) this.Center.Y > (double) targetData.Center.Y); flag2 &= (double) this.ai[0] <= 0.0; } if (flag2) { if ((double) this.velocity.Y == 0.0 || (double) Math.Abs(targetData.Center.Y - this.Center.Y) > 800.0) { this.noGravity = true; this.noTileCollide = true; } } else { this.noGravity = false; this.noTileCollide = false; } bool flag29 = NPCID.Sets.FighterUsesDD2PortalAppearEffect[this.type]; bool flag30 = true; Vector2 size; switch (this.type) { case 552: case 553: case 554: legacySoundStyle = SoundID.DD2_GoblinScream; maxValue1 = 1000; flag5 = true; flag21 = DD2Event.EnemiesShouldChasePlayers; if (this.type == 553) { num19 += 0.01f; max2 += 0.2f; } if (this.type == 554) { num19 += 0.02f; max2 += 0.4f; } if ((double) this.localAI[3] < 60.0) { num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); break; } break; case 555: case 556: case 557: maxValue1 = 800; legacySoundStyle = SoundID.DD2_GoblinBomberScream; int num27 = (double) this.localAI[3] >= 60.0 ? 1 : 0; flag21 = DD2Event.EnemiesShouldChasePlayers; flag24 = true; flag12 = true; flag15 = (double) this.ai[1] > 18.0; num8 = 42; num9 = 18; Type = 681; Damage = 10; vector2_1.Y -= 14f; num13 = 0.4f; max1 = 0.5f; num11 = 280f; num10 = 6f; if (num27 == 0) { num11 = 1f; num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); } if (this.type == 555) { max2 = 0.88f; max1 = 0.6f; Damage = this.GetAttackDamage_ForProjectiles(20f, 15f); } if (this.type == 555) { max2 = 0.88f; max1 = 0.6f; Damage = this.GetAttackDamage_ForProjectiles(30f, 25f); } if (this.type == 557) { max2 = 1.12f; max1 = 0.4f; Damage = this.GetAttackDamage_ForProjectiles(40f, 35f); } if ((double) this.ai[1] == (double) num9) { SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_GoblinBomberThrow, this.Center); break; } break; case 561: case 562: case 563: int num28 = (double) this.localAI[3] >= 60.0 ? 1 : 0; if ((double) this.ai[1] == 82.0) { SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_JavelinThrowersAttack, this.Center); maxValue1 = 7; legacySoundStyle = SoundID.DD2_JavelinThrowersTaunt; } flag21 = DD2Event.EnemiesShouldChasePlayers; flag24 = true; flag12 = true; flag15 = (double) this.ai[1] > 82.0; num8 = 90; num9 = 82; Type = 662; if (this.type == 563) Type = 685; vector2_1.Y -= 14f; num13 = 0.0f; max1 = 0.5f; num11 = 600f; num10 = 13f; if (num28 == 0) { num11 = 1f; num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); } if (this.type == 561) { max2 = 0.88f; max1 = 0.6f; Damage = this.GetAttackDamage_ForProjectiles(15f, 10f); num10 = 11.5f; num11 -= 100f; } if (this.type == 562) { max2 = 0.94f; max1 = 0.5f; Damage = this.GetAttackDamage_ForProjectiles(30f, 20f); num10 = 12.2f; num11 -= 50f; } if (this.type == 563) { max2 = 1f; max1 = 0.4f; Damage = this.GetAttackDamage_ForProjectiles(45f, 30f); break; } break; case 566: case 567: DelegateMethods.v3_1 = new Vector3(0.3f, 0.05f, 0.45f) * 1.5f; Utils.PlotTileLine(this.Top, this.Bottom, (float) this.width, new Utils.TileActionAttempt(DelegateMethods.CastLightOpen)); flag21 = DD2Event.EnemiesShouldChasePlayers; int num29 = (double) this.localAI[3] >= 120.0 ? 1 : 0; if (num29 == 0) num19 = 0.0f; if (num29 != 0) { this.dontTakeDamage = false; break; } this.dontTakeDamage = true; this.velocity.X = 0.0f; flag24 = true; flag20 = true; this.ai[3] = 0.0f; if ((double) this.localAI[3] == 0.0) this.alpha = (int) byte.MaxValue; ++this.localAI[3]; float num30 = this.localAI[3]; if ((double) num30 >= 110.0) { this.alpha -= 26; if (this.alpha < 0) this.alpha = 0; } if ((double) num30 >= 100.0) { int num31 = (int) this.localAI[3] / 20; size = this.Size; float num32 = size.Length() / 2f / 20f; int maxValue2 = 5; for (int index = 0; index < num31 * 2; ++index) { if (Main.rand.Next(maxValue2) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 236, this.velocity.X * 1f); dust.scale = 1f; dust.fadeIn = 0.3f; dust.velocity = new Vector2(Main.rand.NextFloatDirection() * 1f, -dust.velocity.Length()) * 1.25f * num32; } } } else { int num33 = (int) this.localAI[3] / 10; size = this.Size; float num34 = size.Length() / 2f / 20f; int maxValue3 = 5; for (int index = 0; (double) index < (double) num33 * 1.29999995231628; ++index) { if (Main.rand.Next(maxValue3) == 0) { Dust dust = Dust.NewDustDirect(this.position + new Vector2((float) (-this.width / 2), 8f), this.width + this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 1.1f; dust.fadeIn = 0.1f; dust.velocity = new Vector2(Main.rand.NextFloatDirection() * 0.1f, -dust.velocity.Length()) * 1.05f * num34 * Main.rand.NextFloat(); dust.velocity.Y *= Utils.GetLerpValue((float) this.width * 0.75f, 0.0f, Math.Abs(dust.position.X - this.Center.X), true); } } } if ((double) num30 > 100.0 && (int) num30 % 4 == 0) { Gore.NewGoreDirect(this.Left, new Vector2(0.0f, -3f), Utils.SelectRandom(Main.rand, 971, 972), 0.85f).velocity.X *= 0.8f; break; } break; case 568: case 569: num5 = 110; num19 = 0.16f; num20 = 0.7f; max2 = 1.4f; flag5 = true; num4 = 600f; flag21 = DD2Event.EnemiesShouldChasePlayers; if ((double) this.localAI[3] < 60.0) num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); SlotId slotId1; if ((double) this.ai[0] == 0.0) { float[] localAi = this.localAI; slotId1 = (SlotId) SlotId.Invalid; double num35 = (double) ((SlotId) ref slotId1).ToFloat(); localAi[1] = (float) num35; } if ((double) this.ai[0] == 1.0) { this.HitSound = SoundID.DD2_WitherBeastCrystalImpact; ++this.ai[0]; if (Main.rand.Next(10) == 0) { Dust dust = Dust.NewDustDirect(this.TopLeft, this.width, this.height, 271, SpeedY: -3f, newColor: Color.Transparent, Scale: 0.6f); dust.velocity.X /= 2f; dust.noGravity = true; dust.fadeIn = 1.5f; dust.position.Y += 4f; } ActiveSound activeSound = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[1])); if (activeSound == null) { float[] localAi = this.localAI; slotId1 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_WitherBeastAuraPulse, this.Center); double num36 = (double) ((SlotId) ref slotId1).ToFloat(); localAi[1] = (float) num36; } else activeSound.Position = this.Center; ++this.localAI[0]; if ((double) this.localAI[0] > 60.0 && Main.rand.Next(10) == 0) { Vector2 vector2_2 = this.Center + (Main.rand.NextFloat() * 6.283185f).ToRotationVector2() * 400f * (float) (0.300000011920929 + 0.699999988079071 * (double) Main.rand.NextFloat()); Point tileCoordinates = vector2_2.ToTileCoordinates(); if (!WorldGen.SolidTile(tileCoordinates.X, tileCoordinates.Y)) { Dust dust = Dust.NewDustPerfect(vector2_2, 27, new Vector2?(new Vector2(0.0f, -3f)), newColor: new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, (int) sbyte.MaxValue), Scale: 1.5f); dust.velocity = this.DirectionTo(dust.position) * dust.velocity.Length(); dust.fadeIn = 1.5f; } } if (Main.netMode != 2) { Player player = Main.player[Main.myPlayer]; if (!player.dead && player.active && (double) (player.Center - this.Center).Length() < 400.0 && !player.creativeGodMode) player.AddBuff(195, 3, false); } if ((double) this.ai[1] > 0.0) --this.ai[1]; if ((double) this.ai[1] <= 0.0) { this.ai[1] = 60f; if (Main.netMode != 1) { int healAmount = this.lifeMax / 20; if (healAmount > this.lifeMax - this.life) healAmount = this.lifeMax - this.life; if (healAmount > 0) { this.life += healAmount; this.HealEffect(healAmount); this.netUpdate = true; break; } break; } break; } break; } break; case 570: case 571: flag21 = DD2Event.EnemiesShouldChasePlayers; flag24 = true; flag12 = true; flag15 = (double) this.ai[1] > 40.0; num8 = 60; num9 = 40; if (this.type == 571 && (double) this.ai[1] > 10.0 && (double) this.ai[1] <= 40.0 && (int) this.ai[1] % 6 == 0) num9 = (int) this.ai[1] - 1; if (this.type == 570 && (double) this.ai[1] > 10.0 && (double) this.ai[1] <= 40.0 && (int) this.ai[1] % 9 == 0) num9 = (int) this.ai[1] - 1; Type = 671; vector2_1.X += (float) (22 * this.direction); num13 = 0.15f; max1 = 1.5f; num11 = 600f; num10 = 13f; num14 = 1; num15 = 0.0f; if (this.type == 570) max1 = 2.5f; Damage = this.GetAttackDamage_ForProjectiles(35f, 25f); if (this.type == 571) Damage = this.GetAttackDamage_ForProjectiles(60f, 45f); max2 = 0.77f; if ((double) this.ai[0] > 0.0) { if ((double) this.ai[1] == 40.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DrakinShot, this.Center); else if ((double) this.ai[1] == 60.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DrakinBreathIn, this.Center); } if ((double) this.localAI[3] < 60.0) { num11 = 1f; num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); break; } break; case 572: case 573: SlotId slotId2; if ((double) this.localAI[3] == 0.0) { float[] localAi1 = this.localAI; SlotId invalid = (SlotId) SlotId.Invalid; double num37 = (double) ((SlotId) ref invalid).ToFloat(); localAi1[0] = (float) num37; float[] localAi2 = this.localAI; slotId2 = (SlotId) SlotId.Invalid; double num38 = (double) ((SlotId) ref slotId2).ToFloat(); localAi2[1] = (float) num38; } flag21 = DD2Event.EnemiesShouldChasePlayers; if ((double) this.ai[1] == 2.0) { SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[0]))?.Stop(); SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[1]))?.Stop(); this.position = this.Center; this.width = this.height = 192; this.Center = this.position; this.velocity = Vector2.Zero; this.damage = this.GetAttackDamage_ScaledByStrength(80f); this.alpha = (int) byte.MaxValue; for (int index1 = 0; index1 < 4; ++index1) { int index2 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 31, Alpha: 100, Scale: 1.5f); Main.dust[index2].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; } for (int index3 = 0; index3 < 20; ++index3) { int index4 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Alpha: 200, Scale: 3.7f); Main.dust[index4].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; Main.dust[index4].noGravity = true; Main.dust[index4].velocity *= 3f; int index5 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Alpha: 100, Scale: 1.5f); Main.dust[index5].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 4f; Main.dust[index5].velocity *= 2f; Main.dust[index5].noGravity = true; Main.dust[index5].fadeIn = 2.5f; } for (int index6 = 0; index6 < 6; ++index6) { int index7 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Scale: 2.7f); Main.dust[index7].position = this.Center + Vector2.UnitX.RotatedByRandom(3.14159274101257).RotatedBy((double) this.velocity.ToRotation()) * (float) this.width / 2f; Main.dust[index7].noGravity = true; Main.dust[index7].velocity *= 3f; } for (int index8 = 0; index8 < 12; ++index8) { int index9 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 31, Scale: 1.5f); Main.dust[index9].position = this.Center + Vector2.UnitX.RotatedByRandom(3.14159274101257).RotatedBy((double) this.velocity.ToRotation()) * (float) this.width / 2f; Main.dust[index9].noGravity = true; Main.dust[index9].velocity *= 3f; } for (int index10 = 0; index10 < 5; ++index10) { int index11 = Gore.NewGore(this.position + new Vector2((float) (this.width * Main.rand.Next(100)) / 100f, (float) (this.height * Main.rand.Next(100)) / 100f) - Vector2.One * 10f, new Vector2(), Main.rand.Next(61, 64)); Main.gore[index11].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; Main.gore[index11].velocity *= 0.3f; Main.gore[index11].velocity.X += (float) Main.rand.Next(-10, 11) * 0.05f; Main.gore[index11].velocity.Y += (float) Main.rand.Next(-10, 11) * 0.05f; } ++this.ai[0]; if ((double) this.ai[0] < 3.0) return; SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldExplosion, this.Center); this.life = 0; this.HitEffect(); this.active = false; return; } if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 0.0 && this.life > 0) { SlotId slotId3 = SlotId.FromFloat(this.localAI[0]); if (!((SlotId) ref slotId3).IsValid) { float[] localAi = this.localAI; slotId2 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldIgnite, this.Center); double num39 = (double) ((SlotId) ref slotId2).ToFloat(); localAi[0] = (float) num39; } ++this.localAI[2]; if ((double) this.localAI[2] == 30.0) { float[] localAi3 = this.localAI; slotId2 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldIgniteLoop, this.Center); double num40 = (double) ((SlotId) ref slotId2).ToFloat(); localAi3[0] = (float) num40; float[] localAi4 = this.localAI; slotId2 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldScreamChargeLoop, this.Center); double num41 = (double) ((SlotId) ref slotId2).ToFloat(); localAi4[1] = (float) num41; } } if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 1.0) { this.ai[0] = 0.0f; this.ai[1] = 2f; this.netUpdate = true; return; } max2 = 0.88f; if ((double) this.ai[0] == 1.0) this.ai[1] = 1f; if ((double) this.ai[0] == 0.0 && (double) this.ai[1] == 1.0) { ActiveSound activeSound1 = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[0])); if (activeSound1 == null) { float[] localAi = this.localAI; slotId2 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldIgniteLoop, this.Center); double num42 = (double) ((SlotId) ref slotId2).ToFloat(); localAi[0] = (float) num42; } else activeSound1.Position = this.Center; ActiveSound activeSound2 = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[1])); if (activeSound2 == null) { float[] localAi = this.localAI; slotId2 = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldScreamChargeLoop, this.Center); double num43 = (double) ((SlotId) ref slotId2).ToFloat(); localAi[1] = (float) num43; } else activeSound2.Position = this.Center; } if ((double) this.ai[1] > 0.0 && (double) this.ai[0] == 0.0) { flag5 = true; num5 = 40; num4 = 64f; num19 = 0.3f; max2 = 4f; Vector2 Position = this.Center + new Vector2((float) (this.spriteDirection * 12), 0.0f); if (Main.rand.Next(6) == 0) { Dust dust = Dust.NewDustDirect(Position, 1, 1, 213, (float) Main.rand.Next(-2, 3), (float) Main.rand.Next(-2, 3), 100, new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, 0)); dust.noGravity = true; dust.fadeIn = (float) ((double) dust.scale + 1.0 + 0.00999999977648258 * (double) Main.rand.Next(0, 51)); dust.velocity *= 0.3f; dust.velocity.X += (float) -this.spriteDirection * 1.2f; dust.velocity.Y += -3.5f; dust.velocity.X += this.velocity.X; } if (Main.rand.Next(12) == 0) { Dust dust = Dust.NewDustPerfect(Position, 6, new Vector2?(this.velocity), 100); dust.noGravity = true; dust.velocity.Y -= 1f + Main.rand.NextFloat(); dust.scale = 1.1f; dust.fadeIn = 0.5f; dust.customData = (object) this; } } else { flag5 = true; num5 = 40; num4 = 700f; } if ((double) this.localAI[3] < 60.0) { num19 = (float) (0.00999999977648258 + (double) this.localAI[3] / 60.0 * 0.0500000007450581); break; } break; case 576: case 577: maxValue1 = 700; legacySoundStyle = SoundID.DD2_OgreRoar; num21 -= 32f; flag5 = true; num6 = 60; num4 = 130f; num5 = 44; flag21 = DD2Event.EnemiesShouldChasePlayers; num7 = 0.7f; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if ((double) this.ai[0] <= 0.0) { float num44 = this.ai[1]; float num45 = this.Distance(targetData.Center); if ((double) this.localAI[3] >= 60.0) { if ((double) num45 <= (double) num4 + 300.0 && (double) this.localAI[0] <= 0.0) this.ai[1] = 2f; else if ((double) num45 > (double) num4 + 30.0) this.ai[1] = 1f; else if ((double) num45 <= (double) num4) { this.ai[1] = 0.0f; if ((double) num44 == 1.0) this.ai[0] = 0.0f; } } if ((double) num44 != (double) this.ai[1]) this.netUpdate = true; } else if ((double) this.ai[1] == 2.0) this.localAI[0] = 300f; switch ((int) this.ai[1]) { case 0: num5 = 44; if ((double) this.ai[0] == 40.0) { SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_OgreAttack, this.Center); break; } break; case 1: flag3 = true; num5 = 90; num4 = 1000f; num6 = 240; Damage = this.GetAttackDamage_ForProjectiles(40f, 30f); flag15 = false; vector2_1 = new Vector2((float) (this.direction * 30), -70f); Type = 676; if ((double) this.ai[0] == 80.0) { SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_OgreSpit, this.Center); break; } break; case 2: num5 = 90; num4 = 250f; flag4 = true; Damage = this.GetAttackDamage_ForProjectiles(60f, 40f); num9 = 36; num1 = 56; num2 = 41; num3 = 13f; flag3 = true; Type = 683; flag15 = false; vector2_1 = new Vector2((float) (-this.direction * 20), (float) (this.height / 2 - 1)); if ((double) this.ai[0] == 40.0) { SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_OgreGroundPound, this.Center); break; } break; } if ((double) this.ai[0] < (double) -num6) { this.ai[0] = (float) -num6; break; } break; case 620: flag27 = this.wet; flag30 = false; flag16 = true; num17 = 150f; num16 = 20f; bool dayTime = Main.dayTime; flag21 = !dayTime; flag24 = true; flag12 = true; flag15 = (double) this.ai[1] > 40.0; num8 = 60; num9 = 40; if ((double) this.ai[1] > 10.0 && (double) this.ai[1] <= 40.0 && (int) this.ai[1] % 5 == 0) num9 = (int) this.ai[1] - 1; Type = 811; vector2_1.X -= (float) (4 * this.direction); vector2_1.Y -= 20f; num13 = 0.15f; max1 = 2.5f; num11 = 600f; num10 = 13f; num14 = 1; num15 = 0.0f; Damage = this.GetAttackDamage_ForProjectiles(40f, 30f); max2 = 8f; num19 *= 3f; num20 = 0.9f; if ((double) this.ai[0] > 0.0) { if ((double) this.ai[1] == 40.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DrakinShot, this.Center); else if ((double) this.ai[1] == 60.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DrakinBreathIn, this.Center); } this.position = this.position + this.netOffset; if (this.alpha == (int) byte.MaxValue) { this.spriteDirection = this.direction; this.velocity.Y = -6f; this.netUpdate = true; for (int index = 0; index < 35; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.5f; } } this.alpha -= 15; if (this.alpha < 0) this.alpha = 0; if (this.alpha != 0) { for (int index = 0; index < 2; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 5); dust.velocity *= 1f; dust.scale = (float) (1.0 + (double) Main.rand.NextFloat() * 0.5); dust.fadeIn = (float) (1.5 + (double) Main.rand.NextFloat() * 0.5); dust.velocity += this.velocity * 0.3f; } } if (Main.rand.Next(3) == 0) Dust.NewDustDirect(this.position, this.width, this.height, 5, Alpha: 50, Scale: 1.3f).velocity = Vector2.Zero; this.position = this.position - this.netOffset; if (dayTime) { flag12 = false; flag24 = false; flag23 = true; break; } if ((double) this.velocity.Y == 0.0 && (double) targetData.Hitbox.Bottom < (double) this.Top.Y && (double) Math.Abs(this.Center.X - (float) targetData.Hitbox.Center.X) < (double) (this.width * 3) && Collision.CanHit(this.Hitbox.TopLeft(), this.Hitbox.Width, this.Hitbox.Height, targetData.Hitbox.TopLeft(), targetData.Hitbox.Width, targetData.Hitbox.Height)) { int num46 = (int) (((double) this.Bottom.Y - 16.0 - (double) targetData.Hitbox.Bottom) / 16.0); if (num46 < 27) { if (num46 < 11) { this.velocity.Y = -11f; break; } if (num46 < 15) { this.velocity.Y = -13f; break; } if (num46 < 19) { this.velocity.Y = -14f; break; } this.velocity.Y = -15.9f; break; } break; } break; } if (flag28) { bool flag31 = (double) this.velocity.Y == 0.0; for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= num26; else this.velocity.X += num26; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= num26; else this.velocity.Y += num26; } } if (flag31) this.velocity.Y = 0.0f; } if (flag29) { if ((double) this.localAI[3] == 0.0) this.alpha = (int) byte.MaxValue; if ((double) this.localAI[3] == 30.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_EtherianPortalSpawnEnemy, this.Center); if ((double) this.localAI[3] < 60.0) { ++this.localAI[3]; this.alpha -= 5; if (this.alpha < 0) this.alpha = 0; int num47 = (int) this.localAI[3] / 10; size = this.Size; float num48 = size.Length() / 2f / 20f; int maxValue4 = 5; if (this.type == 576 || this.type == 577) maxValue4 = 1; for (int index = 0; index < num47; ++index) { if (Main.rand.Next(maxValue4) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 0.55f; dust.fadeIn = 0.7f; dust.velocity *= 0.1f * num48; dust.velocity += this.velocity; } } } } if (flag27) { this.noGravity = true; this.TargetClosest(false); if (this.collideX) this.velocity.X = -this.oldVelocity.X; if ((double) this.velocity.X != 0.0) this.direction = Math.Sign(this.direction); if (Collision.CanHit(this.position, this.width, this.height, targetData.Position, targetData.Width, targetData.Height)) { Vector2 vector2_3 = targetData.Center - this.Center; vector2_3.Normalize(); this.velocity = Vector2.Lerp(this.velocity, vector2_3 * num23, amount1); } else { float num49 = num23; if ((double) this.velocity.Y > 0.0) num49 = num24; if ((double) this.velocity.Y < 0.0) num49 = num25; Vector2 vector2_4 = new Vector2((float) this.direction, -1f); vector2_4.Normalize(); Vector2 vector2_5 = vector2_4 * num49; if ((double) num49 < (double) num23) this.velocity = Vector2.Lerp(this.velocity, vector2_5, amount2); else this.velocity = Vector2.Lerp(this.velocity, vector2_5, amount3); } } else { bool flag32 = false; if (flag12 | flag5 && (double) this.ai[0] > 0.0) flag18 = false; if (flag12 && (double) this.ai[1] > 0.0) flag22 = true; if (flag5 && (double) this.ai[0] > 0.0) flag22 = true; if (flag5) { if ((double) this.ai[0] < 0.0) { ++this.ai[0]; flag1 = false; } if ((double) this.ai[0] == 0.0 && (double) this.velocity.Y == 0.0 | flag6 && targetData.Type != NPCTargetType.None && (Collision.CanHit(this.position, this.width, this.height, targetData.Position, targetData.Width, targetData.Height) ? 1 : (Collision.CanHitLine(this.position, this.width, this.height, targetData.Position, targetData.Width, targetData.Height) ? 1 : 0)) != 0 && (double) (targetData.Center - this.Center).Length() < (double) num4) { this.ai[0] = (float) num5; this.netUpdate = true; } if ((double) this.ai[0] > 0.0) { this.spriteDirection = this.direction * num22; if (flag7) { this.velocity.X *= num7; flag24 = true; flag20 = true; this.ai[3] = 0.0f; this.netUpdate = true; } --this.ai[0]; if ((double) this.ai[0] == 0.0) { this.ai[0] = (float) -num6; this.netUpdate = true; } } } if (flag3 && (double) this.ai[0] > 0.0) { if (flag15) { npcTargetingMethod(this, true, new Vector2?()); targetData = this.GetTargetData(); } if ((double) this.ai[0] == (double) num9) { Vector2 vector2_6 = this.Center + vector2_1; Vector2 v = targetData.Center - vector2_6; v.Y -= Math.Abs(v.X) * num13; Vector2 vector2_7 = v.SafeNormalize(-Vector2.UnitY) * num10; for (int index = 0; index < num14; ++index) { Vector2 vector2_8 = vector2_7; Vector2 vector2_9 = vector2_6; Vector2 velocity = !nullable.HasValue ? vector2_8 + Utils.RandomVector2(Main.rand, -max1, max1) : vector2_8 + nullable.Value; Vector2 position = vector2_9 + vector2_7 * num15; if (Main.netMode != 1) Projectile.NewProjectile(position, velocity, Type, Damage, 0.0f, Main.myPlayer); } } } if (flag4 && (double) this.ai[0] > 0.0) { if ((double) this.velocity.Y != 0.0 && (double) this.ai[0] < (double) num2) this.ai[0] = (float) num2; if ((double) this.ai[0] == (double) num1) this.velocity.Y = -num3; } if (!flag17 & flag18) { if ((double) this.velocity.Y == 0.0 && (double) this.velocity.X * (double) this.direction < 0.0) flag19 = true; if ((((double) this.position.X == (double) this.oldPosition.X ? 1 : ((double) this.ai[3] >= (double) num18 ? 1 : 0)) | (flag19 ? 1 : 0)) != 0) ++this.ai[3]; else if ((double) Math.Abs(this.velocity.X) > 0.899999976158142 && (double) this.ai[3] > 0.0) --this.ai[3]; if ((double) this.ai[3] > (double) (num18 * 10)) this.ai[3] = 0.0f; if (this.justHit && !flag30) this.ai[3] = 0.0f; if (targetData.Hitbox.Intersects(this.Hitbox)) this.ai[3] = 0.0f; if ((double) this.ai[3] == (double) num18) { this.netUpdate = true; if (flag30) { this.noGravity = true; this.noTileCollide = true; this.position.X += (float) (this.direction * this.width * 2); int num50 = 20; size = this.Size; float num51 = size.Length() / 2f / 20f; int maxValue5 = 5; if (this.type == 576 || this.type == 577) maxValue5 = 1; for (int index = 0; index < num50; ++index) { if (Main.rand.Next(maxValue5) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 0.55f; dust.fadeIn = 0.7f; dust.velocity *= 3f * num51; dust.noGravity = true; dust.fadeIn = 1.5f; dust.velocity *= 3f; } } return; } } } if (!flag20) { if ((double) this.ai[3] < (double) num18 & flag21) { if (maxValue1 > 0 && Main.rand.Next(maxValue1) == 0) SoundEngine.PlayTrackedSound((SoundStyle) legacySoundStyle, this.Center); int num52 = this.HasValidTarget ? 1 : 0; npcTargetingMethod(this, true, new Vector2?()); targetData = this.GetTargetData(); int num53 = this.HasValidTarget ? 1 : 0; if (num52 != num53) this.netUpdate = true; } else if (!flag22) { if (flag23) this.EncourageDespawn(10); if ((double) this.velocity.X == 0.0) { if ((double) this.velocity.Y == 0.0) { ++this.ai[2]; if ((double) this.ai[2] >= 2.0) { this.direction *= -1; this.spriteDirection = this.direction * num22; this.ai[2] = 0.0f; this.netUpdate = true; } } } else if ((double) this.ai[2] != 0.0) { this.ai[2] = 0.0f; this.netUpdate = true; } if (this.direction == 0) this.direction = 1; } } if (!flag24) { if ((double) this.velocity.X < -(double) max2 || (double) this.velocity.X > (double) max2) { if ((double) this.velocity.Y == 0.0) this.velocity = this.velocity * num20; } else if ((double) this.velocity.X < (double) max2 && this.direction == 1 || (double) this.velocity.X > -(double) max2 && this.direction == -1) this.velocity.X = MathHelper.Clamp(this.velocity.X + num19 * (float) this.direction, -max2, max2); } if (flag12) { if (this.confused) { this.ai[0] = 0.0f; } else { if ((double) this.ai[1] > 0.0) --this.ai[1]; if (this.justHit) { this.ai[1] = num16; this.ai[0] = 0.0f; } if ((double) this.ai[0] > 0.0) { if (flag15) { npcTargetingMethod(this, true, new Vector2?()); targetData = this.GetTargetData(); } if ((double) this.ai[1] == (double) num9) { Vector2 vector2_10 = this.Center + vector2_1; Vector2 v = targetData.Center - vector2_10; v.Y -= Math.Abs(v.X) * num13; Vector2 vector2_11 = v.SafeNormalize(-Vector2.UnitY) * num10; for (int index = 0; index < num14; ++index) { Vector2 vector2_12 = vector2_10; Vector2 vector2_13 = vector2_11; Vector2 velocity = !nullable.HasValue ? vector2_13 + Utils.RandomVector2(Main.rand, -max1, max1) : vector2_13 + nullable.Value; Vector2 position = vector2_12 + velocity * num15; if (Main.netMode != 1) Projectile.NewProjectile(position, velocity, Type, Damage, 0.0f, Main.myPlayer); } this.ai[0] = (double) Math.Abs(vector2_11.Y) <= (double) Math.Abs(vector2_11.X) * 2.0 ? ((double) Math.Abs(vector2_11.X) <= (double) Math.Abs(vector2_11.Y) * 2.0 ? ((double) vector2_11.Y > 0.0 ? 2f : 4f) : 3f) : ((double) vector2_11.Y > 0.0 ? 1f : 5f); if (flag16) this.direction = (double) vector2_11.X > 0.0 ? 1 : -1; } bool flag33 = true; if ((double) this.velocity.Y != 0.0 && !flag14 || (double) this.ai[1] <= 0.0) { bool flag34 = false; if ((double) num17 != 0.0 && (double) this.ai[1] <= 0.0) flag34 = true; this.ai[0] = 0.0f; this.ai[1] = flag34 ? num17 : 0.0f; } else if (!flag13 || !flag33 && (!flag14 || (double) this.velocity.Y == 0.0)) { this.velocity.X *= 0.9f; this.spriteDirection = this.direction * num22; } } if ((double) this.ai[0] <= 0.0 | flag13 && (double) this.velocity.Y == 0.0 | flag14 && (double) this.ai[1] <= 0.0 && targetData.Type != NPCTargetType.None && Collision.CanHit(this.position, this.width, this.height, targetData.Position, targetData.Width, targetData.Height)) { Vector2 vector2_14 = targetData.Center - this.Center; if ((double) vector2_14.Length() < (double) num11) { this.netUpdate = true; this.velocity.X *= 0.5f; this.ai[0] = 3f; this.ai[1] = (float) num8; this.ai[0] = (double) Math.Abs(vector2_14.Y) <= (double) Math.Abs(vector2_14.X) * 2.0 ? ((double) Math.Abs(vector2_14.X) <= (double) Math.Abs(vector2_14.Y) * 2.0 ? ((double) vector2_14.Y > 0.0 ? 2f : 4f) : 3f) : ((double) vector2_14.Y > 0.0 ? 1f : 5f); if (flag16) this.direction = (double) vector2_14.X > 0.0 ? 1 : -1; } } if ((double) this.ai[0] <= 0.0 || flag13) { bool flag35 = (double) this.Distance(targetData.Center) < (double) num12; if (flag35 && Collision.CanHitLine(this.position, this.width, this.height, targetData.Position, targetData.Width, targetData.Height)) this.ai[3] = 0.0f; if ((((double) this.velocity.X < -(double) max2 ? 1 : ((double) this.velocity.X > (double) max2 ? 1 : 0)) | (flag35 ? 1 : 0)) != 0) { if ((double) this.velocity.Y == 0.0) this.velocity.X *= num20; } else if ((double) this.velocity.X < (double) max2 && this.direction == 1 || (double) this.velocity.X > -(double) max2 && this.direction == -1) this.velocity.X = MathHelper.Clamp(this.velocity.X + num19 * (float) this.direction, -max2, max2); } } } if ((double) this.velocity.Y == 0.0) { int index12 = (int) ((double) this.Bottom.Y + 7.0) / 16; int num54 = (int) this.Left.X / 16; int num55 = (int) this.Right.X / 16; int index13; for (int index14 = num54; index14 <= num55; index14 = index13 + 1) { index13 = Utils.Clamp(index14, 0, Main.maxTilesX); index12 = Utils.Clamp(index12, 0, Main.maxTilesY); Tile tile = Main.tile[index13, index12]; if (tile == null) return; if (tile.nactive() && Main.tileSolid[(int) tile.type]) { flag32 = true; break; } } } Point tileCoordinates = this.Center.ToTileCoordinates(); if (WorldGen.InWorld(tileCoordinates.X, tileCoordinates.Y, 5) && !this.noGravity) { Vector2 cPosition; int cWidth; int cHeight; this.GetTileCollisionParameters(out cPosition, out cWidth, out cHeight); Vector2 vector2_15 = this.position - cPosition; Collision.StepUp(ref cPosition, ref this.velocity, cWidth, cHeight, ref this.stepSpeed, ref this.gfxOffY); this.position = cPosition + vector2_15; } if (flag32) { int index = (int) ((double) this.Center.X + (double) num21 * (double) this.direction) / 16; int j = ((int) this.Bottom.Y - 15) / 16; bool flag36 = (double) this.position.Y + (double) this.height - (double) (j * 16) > 20.0; Tile tileSafely1 = Framing.GetTileSafely(index + this.direction, j + 1); Tile tileSafely2 = Framing.GetTileSafely(index, j + 1); Tile tileSafely3 = Framing.GetTileSafely(index, j); Tile tileSafely4 = Framing.GetTileSafely(index, j - 1); Tile tileSafely5 = Framing.GetTileSafely(index, j - 2); Tile tileSafely6 = Framing.GetTileSafely(index, j - 3); if (flag8 && tileSafely4.nactive() && (tileSafely4.type == (ushort) 10 || tileSafely4.type == (ushort) 388)) { ++this.ai[0]; this.ai[3] = 0.0f; if ((double) this.ai[0] >= 60.0) { if (flag9) this.ai[1] = 0.0f; int num56 = 5; if (Main.tile[index, j - 1].type == (ushort) 388) num56 = 2; this.velocity.X = 0.5f * (float) -this.direction; this.ai[1] += (float) num56; bool flag37 = false; if ((double) this.ai[1] >= 10.0) { flag37 = true; this.ai[1] = 10f; } if (flag10) flag37 = true; WorldGen.KillTile(index, j - 1, true); if (Main.netMode != 1 & flag37) { if (flag11) { WorldGen.KillTile(index, j - 1); if (Main.netMode == 2) NetMessage.SendData(17, number2: ((float) index), number3: ((float) (j - 1))); } else { if (tileSafely4.type == (ushort) 10) { bool flag38 = WorldGen.OpenDoor(index, j - 1, this.direction); if (!flag38) { this.ai[3] = (float) num18; this.netUpdate = true; } if (Main.netMode == 2 & flag38) NetMessage.SendData(19, number2: ((float) index), number3: ((float) (j - 1)), number4: ((float) this.direction)); } if (tileSafely4.type == (ushort) 388) { bool flag39 = WorldGen.ShiftTallGate(index, j - 1, false); if (!flag39) { this.ai[3] = (float) num18; this.netUpdate = true; } if (Main.netMode == 2 & flag39) NetMessage.SendData(19, number: 4, number2: ((float) index), number3: ((float) (j - 1)), number4: ((float) this.direction)); } } } } } else { if ((double) this.velocity.X * (double) (this.spriteDirection * num22) > 0.0) { if (this.height >= 32 && tileSafely5.nactive() && Main.tileSolid[(int) tileSafely5.type]) { this.netUpdate = true; this.velocity.Y = -7f; if (tileSafely6.nactive() && Main.tileSolid[(int) tileSafely6.type]) this.velocity.Y = -8f; } else if (tileSafely4.nactive() && Main.tileSolid[(int) tileSafely4.type]) { this.velocity.Y = -6f; this.netUpdate = true; } else if (flag36 && tileSafely3.nactive() && !tileSafely3.topSlope() && Main.tileSolid[(int) tileSafely3.type]) { this.velocity.Y = -5f; this.netUpdate = true; } else if (flag25 && (!tileSafely2.nactive() || !Main.tileSolid[(int) tileSafely2.type]) && (!tileSafely1.nactive() || !Main.tileSolid[(int) tileSafely1.type])) { this.velocity.X *= 1.5f; this.velocity.Y = -8f; this.netUpdate = true; } else if (flag8) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; } if ((double) this.velocity.Y == 0.0 & flag1 && (double) this.ai[3] == 1.0) { this.velocity.Y = -5f; this.netUpdate = true; } } if (flag26 && (double) this.velocity.Y == 0.0 && (double) Math.Abs(targetData.Center.X - this.Center.X) < 100.0 && (double) Math.Abs(targetData.Center.Y - this.Center.Y) < 50.0 && (double) Math.Abs(this.velocity.X) >= 1.0 && (double) this.velocity.X * (double) this.direction > 0.0) { this.velocity.X = MathHelper.Clamp(this.velocity.X * 2f, -3f, 3f); this.velocity.Y = -4f; this.netAlways = true; } } } else if (flag8) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; } if (!flag2 || !this.noTileCollide) return; this.wet = false; if (flag29) { if (this.alpha < 60) this.alpha += 20; this.localAI[3] = 40f; } int num57 = (double) this.velocity.Y == 0.0 ? 1 : 0; if ((double) Math.Abs(this.Center.X - targetData.Center.X) > 200.0) { this.spriteDirection = this.direction = (double) targetData.Center.X > (double) this.Center.X ? 1 : -1; this.velocity.X = MathHelper.Lerp(this.velocity.X, (float) this.direction, 0.05f); } int Width = 80; int height = this.height; Vector2 Position = new Vector2(this.Center.X - (float) (Width / 2), this.position.Y + (float) this.height - (float) height); bool flag40 = false; if ((double) this.position.Y + (double) this.height < (double) targetData.Position.Y + (double) targetData.Height - 16.0) flag40 = true; if (flag40) this.velocity.Y += 0.5f; else if (Collision.SolidCollision(Position, Width, height) || (double) targetData.Center.Y - (double) this.Center.Y < -100.0 || (double) targetData.Center.Y - (double) this.Center.Y < 10.0 && (double) Math.Abs(targetData.Center.X - this.Center.X) < 60.0) { if ((double) this.velocity.Y > 0.0) this.velocity.Y = 0.0f; if ((double) this.velocity.Y > -0.2) this.velocity.Y -= 0.025f; else this.velocity.Y -= 0.2f; if ((double) this.velocity.Y < -4.0) this.velocity.Y = -4f; } else { if ((double) this.velocity.Y < 0.0) this.velocity.Y = 0.0f; if ((double) this.velocity.Y < 0.1) this.velocity.Y += 0.025f; else this.velocity.Y += 0.5f; } if ((double) this.velocity.Y > 10.0) this.velocity.Y = 10f; if (num57 == 0) return; this.velocity.Y = 0.0f; } } private void AI_084_LunaticCultist() { if ((double) this.ai[0] != -1.0 && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(88, 92)); bool expertMode = Main.expertMode; bool flag1 = this.life <= this.lifeMax / 2; int num1 = 120; int damageForProjectiles1 = this.GetAttackDamage_ForProjectiles(35f, 25f); if (expertMode) num1 = 90; if (Main.getGoodWorld) num1 -= 30; int num2 = 18; int num3 = 3; int damageForProjectiles2 = this.GetAttackDamage_ForProjectiles(30f, 20f); if (expertMode) { num2 = 12; num3 = 4; } if (Main.getGoodWorld) { num2 = 10; num3 = 5; } int num4 = 80; int damageForProjectiles3 = this.GetAttackDamage_ForProjectiles(45f, 30f); if (expertMode) num4 = 40; if (Main.getGoodWorld) num4 -= 20; int num5 = 20; int num6 = 2; if (expertMode) { num5 = 30; num6 = 2; } int num7 = 20; int num8 = 3; bool flag2 = this.type == 439; bool flag3 = false; bool flag4 = false; if (flag1) this.defense = (int) ((double) this.defDefense * 0.649999976158142); if (!flag2) { if (((double) this.ai[3] < 0.0 || !Main.npc[(int) this.ai[3]].active ? 1 : (Main.npc[(int) this.ai[3]].type != 439 ? 1 : 0)) != 0) { this.life = 0; this.HitEffect(); this.active = false; return; } this.ai[0] = Main.npc[(int) this.ai[3]].ai[0]; this.ai[1] = Main.npc[(int) this.ai[3]].ai[1]; if ((double) this.ai[0] == 5.0) { if (this.justHit) { this.life = 0; this.HitEffect(); this.active = false; if (Main.netMode != 1) NetMessage.SendData(23, number: this.whoAmI); NPC npc = Main.npc[(int) this.ai[3]]; npc.ai[0] = 6f; npc.ai[1] = 0.0f; npc.netUpdate = true; } } else { flag3 = true; flag4 = true; } } else if ((double) this.ai[0] == 5.0 && (double) this.ai[1] >= 120.0 && (double) this.ai[1] < 420.0 && this.justHit) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } int num9 = 10; if (Main.expertMode) num9 = 3; foreach (int number in intList) { NPC npc = Main.npc[number]; if ((double) npc.localAI[1] == (double) this.localAI[1] && num9 > 0) { --num9; npc.life = 0; npc.HitEffect(); npc.active = false; if (Main.netMode != 1) NetMessage.SendData(23, number: number); } else if (num9 > 0) { --num9; npc.life = 0; npc.HitEffect(); npc.active = false; } } Main.projectile[(int) this.ai[2]].ai[1] = -1f; Main.projectile[(int) this.ai[2]].netUpdate = true; } Vector2 center1 = this.Center; Player player = Main.player[this.target]; if (this.target < 0 || this.target == (int) byte.MaxValue || player.dead || !player.active) { this.TargetClosest(false); player = Main.player[this.target]; this.netUpdate = true; } if (player.dead || (double) Vector2.Distance(player.Center, center1) > 5600.0) { this.life = 0; this.HitEffect(); this.active = false; if (Main.netMode != 1) NetMessage.SendData(28, number: this.whoAmI, number2: -1f); new List() { this.whoAmI }; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) { Main.npc[index].life = 0; Main.npc[index].HitEffect(); Main.npc[index].active = false; if (Main.netMode != 1) NetMessage.SendData(28, number: this.whoAmI, number2: -1f); } } } float num10 = this.ai[3]; if ((double) this.localAI[0] == 0.0) { SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 89); this.localAI[0] = 1f; this.alpha = (int) byte.MaxValue; this.rotation = 0.0f; if (Main.netMode != 1) { this.ai[0] = -1f; this.netUpdate = true; } } if ((double) this.ai[0] == -1.0) { this.alpha -= 5; if (this.alpha < 0) this.alpha = 0; ++this.ai[1]; if ((double) this.ai[1] >= 420.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.netUpdate = true; } else if ((double) this.ai[1] > 360.0) { this.velocity = this.velocity * 0.95f; if ((double) this.localAI[2] != 13.0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 105); this.localAI[2] = 13f; } else if ((double) this.ai[1] > 300.0) { this.velocity = -Vector2.UnitY; this.localAI[2] = 10f; } else this.localAI[2] = (double) this.ai[1] <= 120.0 ? 0.0f : 1f; flag3 = true; flag4 = true; } if ((double) this.ai[0] == 0.0) { if ((double) this.ai[1] == 0.0) this.TargetClosest(false); this.localAI[2] = 10f; int num11 = Math.Sign(player.Center.X - center1.X); if (num11 != 0) this.direction = this.spriteDirection = num11; ++this.ai[1]; if ((double) this.ai[1] >= 40.0 & flag2) { int num12 = 0; if (flag1) { switch ((int) this.ai[3]) { case 0: num12 = 0; break; case 1: num12 = 1; break; case 2: num12 = 0; break; case 3: num12 = 5; break; case 4: num12 = 0; break; case 5: num12 = 3; break; case 6: num12 = 0; break; case 7: num12 = 5; break; case 8: num12 = 0; break; case 9: num12 = 2; break; case 10: num12 = 0; break; case 11: num12 = 3; break; case 12: num12 = 0; break; case 13: num12 = 4; this.ai[3] = -1f; break; default: this.ai[3] = -1f; break; } } else { switch ((int) this.ai[3]) { case 0: num12 = 0; break; case 1: num12 = 1; break; case 2: num12 = 0; break; case 3: num12 = 2; break; case 4: num12 = 0; break; case 5: num12 = 3; break; case 6: num12 = 0; break; case 7: num12 = 1; break; case 8: num12 = 0; break; case 9: num12 = 2; break; case 10: num12 = 0; break; case 11: num12 = 4; this.ai[3] = -1f; break; default: this.ai[3] = -1f; break; } } int maxValue = 6; if (this.life < this.lifeMax / 3) maxValue = 4; if (this.life < this.lifeMax / 4) maxValue = 3; if (expertMode & flag1 && Main.rand.Next(maxValue) == 0 && num12 != 0 && num12 != 4 && num12 != 5 && NPC.CountNPCS(523) < 10) num12 = 6; if (num12 == 0) { float num13 = (float) Math.Ceiling((double) (player.Center + new Vector2(0.0f, -100f) - center1).Length() / 50.0); if ((double) num13 == 0.0) num13 = 1f; List intList = new List(); int num14 = 0; intList.Add(this.whoAmI); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } bool flag5 = intList.Count % 2 == 0; foreach (int index in intList) { NPC npc1 = Main.npc[index]; Vector2 center2 = npc1.Center; float num15 = (float) ((double) ((num14 + flag5.ToInt() + 1) / 2) * 6.28318548202515 * 0.400000005960464) / (float) intList.Count; if (num14 % 2 == 1) num15 *= -1f; if (intList.Count == 1) num15 = 0.0f; Vector2 vector2_1 = new Vector2(0.0f, -1f).RotatedBy((double) num15) * new Vector2(300f, 200f); Vector2 vector2_2 = player.Center + vector2_1 - center2; npc1.ai[0] = 1f; npc1.ai[1] = num13 * 2f; npc1.velocity = vector2_2 / num13; if (this.whoAmI >= npc1.whoAmI) { NPC npc2 = npc1; npc2.position = npc2.position - npc1.velocity; } npc1.netUpdate = true; ++num14; } } if (num12 == 1) { this.ai[0] = 3f; this.ai[1] = 0.0f; } else if (num12 == 2) { this.ai[0] = 2f; this.ai[1] = 0.0f; } else if (num12 == 3) { this.ai[0] = 4f; this.ai[1] = 0.0f; } else if (num12 == 4) { this.ai[0] = 5f; this.ai[1] = 0.0f; } if (num12 == 5) { this.ai[0] = 7f; this.ai[1] = 0.0f; } if (num12 == 6) { this.ai[0] = 8f; this.ai[1] = 0.0f; } this.netUpdate = true; } } else if ((double) this.ai[0] == 1.0) { flag3 = true; this.localAI[2] = 10f; if ((double) (int) this.ai[1] % 2.0 != 0.0 && (double) this.ai[1] != 1.0) this.position = this.position - this.velocity; --this.ai[1]; if ((double) this.ai[1] <= 0.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 2.0) { this.localAI[2] = 11f; Vector2 vec1 = Vector2.Normalize(player.Center - center1); if (vec1.HasNaNs()) vec1 = new Vector2((float) this.direction, 0.0f); if ((double) this.ai[1] >= 4.0 & flag2 && (int) ((double) this.ai[1] - 4.0) % num1 == 0) { if (Main.netMode != 1) { List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } foreach (int index1 in intList) { NPC npc = Main.npc[index1]; Vector2 center3 = npc.Center; int num16 = Math.Sign(player.Center.X - center3.X); if (num16 != 0) npc.direction = npc.spriteDirection = num16; if (Main.netMode != 1) { Vector2 vec2 = Vector2.Normalize(player.Center - center3 + player.velocity * 20f); if (vec2.HasNaNs()) vec2 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_3 = center3 + new Vector2((float) (this.direction * 30), 12f); for (int index2 = 0; index2 < 1; ++index2) { Vector2 vector2_4 = (vec2 * (float) (6.0 + Main.rand.NextDouble() * 4.0)).RotatedByRandom(0.523598790168762); Projectile.NewProjectile(vector2_3.X, vector2_3.Y, vector2_4.X, vector2_4.Y, 468, 18, 0.0f, Main.myPlayer); } } } } if (Main.netMode != 1) { Vector2 vec3 = Vector2.Normalize(player.Center - center1 + player.velocity * 20f); if (vec3.HasNaNs()) vec3 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_5 = this.Center + new Vector2((float) (this.direction * 30), 12f); for (int index = 0; index < 1; ++index) { Vector2 vector2_6 = vec3 * 4f; Projectile.NewProjectile(vector2_5.X, vector2_5.Y, vector2_6.X, vector2_6.Y, 464, damageForProjectiles1, 0.0f, Main.myPlayer, ai1: 1f); } } } ++this.ai[1]; if ((double) this.ai[1] >= (double) (4 + num1)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 3.0) { this.localAI[2] = 11f; Vector2 vec4 = Vector2.Normalize(player.Center - center1); if (vec4.HasNaNs()) vec4 = new Vector2((float) this.direction, 0.0f); if ((double) this.ai[1] >= 4.0 & flag2 && (int) ((double) this.ai[1] - 4.0) % num2 == 0) { if ((int) ((double) this.ai[1] - 4.0) / num2 == 2) { List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } if (Main.netMode != 1) { foreach (int index3 in intList) { NPC npc = Main.npc[index3]; Vector2 center4 = npc.Center; int num17 = Math.Sign(player.Center.X - center4.X); if (num17 != 0) npc.direction = npc.spriteDirection = num17; if (Main.netMode != 1) { Vector2 vec5 = Vector2.Normalize(player.Center - center4 + player.velocity * 20f); if (vec5.HasNaNs()) vec5 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_7 = center4 + new Vector2((float) (this.direction * 30), 12f); for (int index4 = 0; index4 < 1; ++index4) { Vector2 vector2_8 = (vec5 * (float) (6.0 + Main.rand.NextDouble() * 4.0)).RotatedByRandom(0.523598790168762); Projectile.NewProjectile(vector2_7.X, vector2_7.Y, vector2_8.X, vector2_8.Y, 468, 18, 0.0f, Main.myPlayer); } } } } } int num18 = Math.Sign(player.Center.X - center1.X); if (num18 != 0) this.direction = this.spriteDirection = num18; if (Main.netMode != 1) { Vector2 vec6 = Vector2.Normalize(player.Center - center1 + player.velocity * 20f); if (vec6.HasNaNs()) vec6 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_9 = this.Center + new Vector2((float) (this.direction * 30), 12f); for (int index = 0; index < 1; ++index) { Vector2 vector2_10 = (vec6 * (float) (6.0 + Main.rand.NextDouble() * 4.0)).RotatedByRandom(0.523598790168762); Projectile.NewProjectile(vector2_9.X, vector2_9.Y, vector2_10.X, vector2_10.Y, 467, damageForProjectiles2, 0.0f, Main.myPlayer); } } } ++this.ai[1]; if ((double) this.ai[1] >= (double) (4 + num2 * num3)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 4.0) { this.localAI[2] = !flag2 ? 11f : 12f; if ((double) this.ai[1] == 20.0 & flag2 && Main.netMode != 1) { List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } foreach (int index5 in intList) { NPC npc = Main.npc[index5]; Vector2 center5 = npc.Center; int num19 = Math.Sign(player.Center.X - center5.X); if (num19 != 0) npc.direction = npc.spriteDirection = num19; if (Main.netMode != 1) { Vector2 vec = Vector2.Normalize(player.Center - center5 + player.velocity * 20f); if (vec.HasNaNs()) vec = new Vector2((float) this.direction, 0.0f); Vector2 vector2_11 = center5 + new Vector2((float) (this.direction * 30), 12f); for (int index6 = 0; index6 < 1; ++index6) { Vector2 vector2_12 = (vec * (float) (6.0 + Main.rand.NextDouble() * 4.0)).RotatedByRandom(0.523598790168762); Projectile.NewProjectile(vector2_11.X, vector2_11.Y, vector2_12.X, vector2_12.Y, 468, 18, 0.0f, Main.myPlayer); } } } if ((int) ((double) this.ai[1] - 20.0) % num4 == 0) Projectile.NewProjectile(this.Center.X, this.Center.Y - 100f, 0.0f, 0.0f, 465, damageForProjectiles3, 0.0f, Main.myPlayer); } ++this.ai[1]; if ((double) this.ai[1] >= (double) (20 + num4)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 5.0) { this.localAI[2] = 10f; if (Vector2.Normalize(player.Center - center1).HasNaNs()) { Vector2 vector2_13 = new Vector2((float) this.direction, 0.0f); } if ((double) this.ai[1] >= 0.0 && (double) this.ai[1] < 30.0) { flag3 = true; flag4 = true; this.alpha = (int) (((double) this.ai[1] - 0.0) / 30.0 * (double) byte.MaxValue); } else if ((double) this.ai[1] >= 30.0 && (double) this.ai[1] < 90.0) { if ((((double) this.ai[1] != 30.0 ? 0 : (Main.netMode != 1 ? 1 : 0)) & (flag2 ? 1 : 0)) != 0) { ++this.localAI[1]; Vector2 spinningpoint = new Vector2(180f, 0.0f); List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } int num20 = 6 - intList.Count; if (num20 > 2) num20 = 2; int length = intList.Count + num20 + 1; float[] numArray = new float[length]; for (int index = 0; index < numArray.Length; ++index) numArray[index] = Vector2.Distance(this.Center + spinningpoint.RotatedBy((double) index * 6.28318548202515 / (double) length - 1.57079637050629), player.Center); int index7 = 0; for (int index8 = 1; index8 < numArray.Length; ++index8) { if ((double) numArray[index7] > (double) numArray[index8]) index7 = index8; } int num21 = index7 >= length / 2 ? index7 - length / 2 : index7 + length / 2; int num22 = num20; for (int index9 = 0; index9 < numArray.Length; ++index9) { if (num21 != index9) { Vector2 vector2_14 = this.Center + spinningpoint.RotatedBy((double) index9 * 6.28318548202515 / (double) length - 1.57079637050629); if (num22-- > 0) { int index10 = NPC.NewNPC((int) vector2_14.X, (int) vector2_14.Y + this.height / 2, 440, this.whoAmI); Main.npc[index10].ai[3] = (float) this.whoAmI; Main.npc[index10].netUpdate = true; Main.npc[index10].localAI[1] = this.localAI[1]; } else { int number = intList[-num22 - 1]; Main.npc[number].Center = vector2_14; NetMessage.SendData(23, number: number); } } } this.ai[2] = (float) Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 490, 0, 0.0f, Main.myPlayer, ai1: ((float) this.whoAmI)); this.Center = this.Center + spinningpoint.RotatedBy((double) num21 * 6.28318548202515 / (double) length - 1.57079637050629); this.netUpdate = true; intList.Clear(); } flag3 = true; flag4 = true; this.alpha = (int) byte.MaxValue; if (flag2) { Vector2 vector2_15 = Main.projectile[(int) this.ai[2]].Center - this.Center; if (vector2_15 == Vector2.Zero) vector2_15 = -Vector2.UnitY; vector2_15.Normalize(); this.localAI[2] = (double) Math.Abs(vector2_15.Y) >= 0.769999980926514 ? ((double) vector2_15.Y >= 0.0 ? 10f : 12f) : 11f; int num23 = Math.Sign(vector2_15.X); if (num23 != 0) this.direction = this.spriteDirection = num23; } else { Vector2 vector2_16 = Main.projectile[(int) Main.npc[(int) this.ai[3]].ai[2]].Center - this.Center; if (vector2_16 == Vector2.Zero) vector2_16 = -Vector2.UnitY; vector2_16.Normalize(); this.localAI[2] = (double) Math.Abs(vector2_16.Y) >= 0.769999980926514 ? ((double) vector2_16.Y >= 0.0 ? 10f : 12f) : 11f; int num24 = Math.Sign(vector2_16.X); if (num24 != 0) this.direction = this.spriteDirection = num24; } } else if ((double) this.ai[1] >= 90.0 && (double) this.ai[1] < 120.0) { flag3 = true; flag4 = true; this.alpha = (int) byte.MaxValue - (int) (((double) this.ai[1] - 90.0) / 30.0 * (double) byte.MaxValue); } else if ((double) this.ai[1] >= 120.0 && (double) this.ai[1] < 420.0) { flag4 = true; this.alpha = 0; if (flag2) { Vector2 vector2_17 = Main.projectile[(int) this.ai[2]].Center - this.Center; if (vector2_17 == Vector2.Zero) vector2_17 = -Vector2.UnitY; vector2_17.Normalize(); this.localAI[2] = (double) Math.Abs(vector2_17.Y) >= 0.769999980926514 ? ((double) vector2_17.Y >= 0.0 ? 10f : 12f) : 11f; int num25 = Math.Sign(vector2_17.X); if (num25 != 0) this.direction = this.spriteDirection = num25; } else { Vector2 vector2_18 = Main.projectile[(int) Main.npc[(int) this.ai[3]].ai[2]].Center - this.Center; if (vector2_18 == Vector2.Zero) vector2_18 = -Vector2.UnitY; vector2_18.Normalize(); this.localAI[2] = (double) Math.Abs(vector2_18.Y) >= 0.769999980926514 ? ((double) vector2_18.Y >= 0.0 ? 10f : 12f) : 11f; int num26 = Math.Sign(vector2_18.X); if (num26 != 0) this.direction = this.spriteDirection = num26; } } ++this.ai[1]; if ((double) this.ai[1] >= 420.0) { flag4 = true; this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 6.0) { this.localAI[2] = 13f; ++this.ai[1]; if ((double) this.ai[1] >= 120.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 7.0) { this.localAI[2] = 11f; Vector2 vec7 = Vector2.Normalize(player.Center - center1); if (vec7.HasNaNs()) vec7 = new Vector2((float) this.direction, 0.0f); if ((double) this.ai[1] >= 4.0 & flag2 && (int) ((double) this.ai[1] - 4.0) % num5 == 0) { if ((int) ((double) this.ai[1] - 4.0) / num5 == 2) { List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } foreach (int index11 in intList) { NPC npc = Main.npc[index11]; Vector2 center6 = npc.Center; int num27 = Math.Sign(player.Center.X - center6.X); if (num27 != 0) npc.direction = npc.spriteDirection = num27; if (Main.netMode != 1) { Vector2 vec8 = Vector2.Normalize(player.Center - center6 + player.velocity * 20f); if (vec8.HasNaNs()) vec8 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_19 = center6 + new Vector2((float) (this.direction * 30), 12f); for (int index12 = 0; (double) index12 < 5.0; ++index12) { Vector2 vector2_20 = (vec8 * (float) (6.0 + Main.rand.NextDouble() * 4.0)).RotatedByRandom(1.25663709640503); Projectile.NewProjectile(vector2_19.X, vector2_19.Y, vector2_20.X, vector2_20.Y, 468, 18, 0.0f, Main.myPlayer); } } } } int num28 = Math.Sign(player.Center.X - center1.X); if (num28 != 0) this.direction = this.spriteDirection = num28; if (Main.netMode != 1) { Vector2 vec9 = Vector2.Normalize(player.Center - center1 + player.velocity * 20f); if (vec9.HasNaNs()) vec9 = new Vector2((float) this.direction, 0.0f); Vector2 vector2_21 = this.Center + new Vector2((float) (this.direction * 30), 12f); float num29 = 8f; float num30 = 0.2513274f; for (int index13 = 0; (double) index13 < 5.0; ++index13) { Vector2 vector2_22 = (vec9 * num29).RotatedBy((double) num30 * (double) index13 - (1.25663709640503 - (double) num30) / 2.0); float ai1 = (float) (((double) Main.rand.NextFloat() - 0.5) * 0.300000011920929 * 6.28318548202515 / 60.0); int index14 = NPC.NewNPC((int) vector2_21.X, (int) vector2_21.Y + 7, 522, ai1: ai1, ai2: vector2_22.X, ai3: vector2_22.Y); Main.npc[index14].velocity = vector2_22; } } } ++this.ai[1]; if ((double) this.ai[1] >= (double) (4 + num5 * num6)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } else if ((double) this.ai[0] == 8.0) { this.localAI[2] = 13f; if ((double) this.ai[1] >= 4.0 & flag2 && (int) ((double) this.ai[1] - 4.0) % num7 == 0) { List intList = new List(); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 440 && (double) Main.npc[index].ai[3] == (double) this.whoAmI) intList.Add(index); } int num31 = intList.Count + 1; if (num31 > 3) num31 = 3; int num32 = Math.Sign(player.Center.X - center1.X); if (num32 != 0) this.direction = this.spriteDirection = num32; if (Main.netMode != 1) { for (int index15 = 0; index15 < num31; ++index15) { Point tileCoordinates1 = this.Center.ToTileCoordinates(); Point tileCoordinates2 = Main.player[this.target].Center.ToTileCoordinates(); Vector2 vector2 = Main.player[this.target].Center - this.Center; int num33 = 20; int num34 = 3; int num35 = 7; int num36 = 2; int num37 = 0; bool flag6 = false; if ((double) vector2.Length() > 2000.0) flag6 = true; while (!flag6 && num37 < 100) { ++num37; int index16 = Main.rand.Next(tileCoordinates2.X - num33, tileCoordinates2.X + num33 + 1); int index17 = Main.rand.Next(tileCoordinates2.Y - num33, tileCoordinates2.Y + num33 + 1); if ((index17 < tileCoordinates2.Y - num35 || index17 > tileCoordinates2.Y + num35 || index16 < tileCoordinates2.X - num35 || index16 > tileCoordinates2.X + num35) && (index17 < tileCoordinates1.Y - num34 || index17 > tileCoordinates1.Y + num34 || index16 < tileCoordinates1.X - num34 || index16 > tileCoordinates1.X + num34) && !Main.tile[index16, index17].nactive()) { bool flag7 = true; if (flag7 && Collision.SolidTiles(index16 - num36, index16 + num36, index17 - num36, index17 + num36)) flag7 = false; if (flag7) { NPC.NewNPC(index16 * 16 + 8, index17 * 16 + 8, 523, ai0: ((float) this.whoAmI)); break; } } } } } } ++this.ai[1]; if ((double) this.ai[1] >= (double) (4 + num7 * num8)) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; ++this.ai[3]; this.velocity = Vector2.Zero; this.netUpdate = true; } } if (!flag2) this.ai[3] = num10; this.dontTakeDamage = flag3; this.chaseable = !flag4; } private void AI_108_DivingFlyer() { this.rotation = this.velocity.ToRotation(); float num1 = 0.4f; float num2 = 10f; float num3 = 200f; float num4 = 750f; float num5 = 30f; float num6 = 30f; float num7 = 0.95f; int num8 = 50; float num9 = 14f; float num10 = 30f; float num11 = 100f; float num12 = 20f; float num13 = 0.0f; float num14 = 7f; bool flag1 = true; bool flag2 = true; int num15 = 120; bool flag3 = false; bool flag4 = false; float num16 = 0.05f; float num17 = 0.0f; bool flag5 = false; switch (this.type) { case 558: case 559: case 560: flag4 = true; num1 = 0.7f; if (this.type == 559) num1 = 0.5f; if (this.type == 560) num1 = 0.2f; num2 = 3f; num3 = 400f; num4 = 500f; num5 = 90f; num6 = 20f; num7 = 0.95f; num8 = 0; num9 = 8f; num10 = 30f; num11 = 150f; num12 = 60f; num13 = 0.05f; num14 = 6f; flag2 = false; flag5 = true; break; case 574: case 575: flag4 = true; num1 = 0.6f; if (this.type == 575) num1 = 0.4f; num2 = 4f; num3 = 400f; num4 = 500f; num5 = 90f; num6 = 30f; num7 = 0.95f; num8 = 3; num9 = 8f; num10 = 30f; num11 = 150f; num12 = 10f; num13 = 0.05f; num14 = 0.0f; num17 = -0.1f; flag3 = true; flag5 = true; break; } NPCUtils.TargetClosestOldOnesInvasion(this); NPCAimedTarget targetData = this.GetTargetData(); if (flag5) { if ((double) this.localAI[0] == 0.0) this.alpha = (int) byte.MaxValue; if ((double) this.localAI[0] == 30.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_EtherianPortalSpawnEnemy, this.Center); if ((double) this.localAI[0] < 60.0) { ++this.localAI[0]; this.alpha -= 5; if (this.alpha < 0) this.alpha = 0; int num18 = (int) this.localAI[0] / 10; float num19 = this.Size.Length() / 2f / 20f; int maxValue = 5; if (this.type == 576 || this.type == 577) maxValue = 1; for (int index = 0; index < num18; ++index) { if (Main.rand.Next(maxValue) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 0.55f; dust.fadeIn = 0.7f; dust.velocity *= 0.1f * num19; dust.velocity += this.velocity; } } } } if (flag4) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= num16; else this.velocity.X += num16; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= num16; else this.velocity.Y += num16; } } } if (Math.Sign(this.velocity.X) != 0) this.spriteDirection = -Math.Sign(this.velocity.X); if ((double) this.rotation < -1.57079637050629) this.rotation += 3.141593f; if ((double) this.rotation > 1.57079637050629) this.rotation -= 3.141593f; float num20 = num13 * num12; if (Main.expertMode) num1 *= Main.GameModeInfo.KnockbackToEnemiesMultiplier; SlotId slotId; if ((double) this.ai[0] == 0.0) { this.knockBackResist = num1; float num21 = num2; Vector2 center = this.Center; Vector2 vector2_1 = targetData.Center - center; Vector2 vector2_2 = vector2_1 - Vector2.UnitY * num3; double num22 = (double) vector2_1.Length(); Vector2 v = Vector2.Normalize(vector2_1) * num21; Vector2 vector2_3 = Vector2.Normalize(vector2_2) * num21; bool flag6 = Collision.CanHit(this.Center, 1, 1, targetData.Center, 1, 1); if ((double) this.ai[3] >= (double) num15) flag6 = true; float num23 = 8f; bool flag7 = flag6 && (double) v.ToRotation() > 3.14159274101257 / (double) num23 && (double) v.ToRotation() < 3.14159274101257 - 3.14159274101257 / (double) num23; double num24 = (double) num4; if (num22 > num24 || !flag7) { this.velocity.X = (this.velocity.X * (num5 - 1f) + vector2_3.X) / num5; this.velocity.Y = (this.velocity.Y * (num5 - 1f) + vector2_3.Y) / num5; if (!flag7) { ++this.ai[3]; if ((double) this.ai[3] == (double) num15) this.netUpdate = true; } else this.ai[3] = 0.0f; } else { this.ai[0] = 1f; this.ai[2] = v.X; this.ai[3] = v.Y; this.netUpdate = true; } } else if ((double) this.ai[0] == 1.0) { this.knockBackResist = 0.0f; this.velocity = this.velocity * num7; this.velocity.Y += num17; ++this.ai[1]; if ((double) this.ai[1] == (double) num6) { if (this.type == 558 || this.type == 559 || this.type == 560) { float[] localAi1 = this.localAI; slotId = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_WyvernDiveDown, this.Center); double num25 = (double) ((SlotId) ref slotId).ToFloat(); localAi1[1] = (float) num25; if (Main.rand.Next(5) == 0) { float[] localAi2 = this.localAI; slotId = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_WyvernScream, this.Center); double num26 = (double) ((SlotId) ref slotId).ToFloat(); localAi2[2] = (float) num26; } } else if (this.type == 574 || this.type == 575) { float[] localAi = this.localAI; slotId = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldFlyerChargeScream, this.Center); double num27 = (double) ((SlotId) ref slotId).ToFloat(); localAi[1] = (float) num27; SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldIgnite, this.Center); } } if ((double) this.ai[1] >= (double) num6) { this.ai[0] = 2f; this.ai[1] = 0.0f; this.netUpdate = true; Vector2 vector2 = new Vector2(this.ai[2], this.ai[3]) + new Vector2((float) Main.rand.Next(-num8, num8 + 1), (float) Main.rand.Next(-num8, num8 + 1)) * 0.04f; vector2.Normalize(); this.velocity = vector2 * num9; } } else if ((double) this.ai[0] == 2.0) { if ((double) this.ai[1] >= 20.0 && (this.type == 574 || this.type == 575)) { ActiveSound activeSound = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[2])); if (activeSound == null) { float[] localAi = this.localAI; slotId = SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_KoboldIgniteLoop, this.Center); double num28 = (double) ((SlotId) ref slotId).ToFloat(); localAi[2] = (float) num28; } else activeSound.Position = this.Center; } this.knockBackResist = 0.0f; float num29 = num10; ++this.ai[1]; bool flag8 = (double) Vector2.Distance(this.Center, targetData.Center) > (double) num11 && (double) this.Center.Y > (double) targetData.Center.Y; if (flag3) flag8 = false; if ((double) this.ai[1] >= (double) num29 & flag8 || (double) this.velocity.Length() < (double) num14) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.velocity = this.velocity / 2f; this.netUpdate = true; if (flag1) { this.ai[1] = 45f; this.ai[0] = 4f; } } else { Vector2 center = this.Center; Vector2 vec = targetData.Center - center; vec.Normalize(); if (vec.HasNaNs()) vec = new Vector2((float) this.direction, 0.0f); this.velocity = (this.velocity * (num12 - 1f) + vec * (this.velocity.Length() + num20)) / num12; } if (flag2 && Collision.SolidCollision(this.position, this.width, this.height)) { this.ai[0] = 3f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; } } else if ((double) this.ai[0] == 4.0) { this.ai[1] -= 3f; if ((double) this.ai[1] <= 0.0) { this.ai[0] = 0.0f; this.ai[1] = 0.0f; this.netUpdate = true; } this.velocity = this.velocity * 0.95f; } ActiveSound activeSound1 = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[1])); if (activeSound1 != null) { activeSound1.Position = this.Center; } else { float[] localAi = this.localAI; slotId = (SlotId) SlotId.Invalid; double num30 = (double) ((SlotId) ref slotId).ToFloat(); localAi[1] = (float) num30; } if (this.type == 558 || this.type == 559 || this.type == 560) { ActiveSound activeSound2 = SoundEngine.GetActiveSound(SlotId.FromFloat(this.localAI[2])); if (activeSound2 != null) { activeSound2.Position = this.Center; } else { float[] localAi = this.localAI; slotId = (SlotId) SlotId.Invalid; double num31 = (double) ((SlotId) ref slotId).ToFloat(); localAi[2] = (float) num31; } } if (flag2 && (double) this.ai[0] != 3.0 && (double) Vector2.Distance(this.Center, targetData.Center) < 64.0) { this.ai[0] = 3f; this.ai[1] = 0.0f; this.ai[2] = 0.0f; this.ai[3] = 0.0f; this.netUpdate = true; } if ((double) this.ai[0] != 3.0) return; this.position = this.Center; this.width = this.height = 192; this.position.X -= (float) (this.width / 2); this.position.Y -= (float) (this.height / 2); this.velocity = Vector2.Zero; this.damage = this.GetAttackDamage_ScaledByStrength(80f); this.alpha = (int) byte.MaxValue; if ((double) this.ai[1] == 0.0 && (this.type == 574 || this.type == 575)) { for (int index1 = 0; index1 < 4; ++index1) { int index2 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 31, Alpha: 100, Scale: 1.5f); Main.dust[index2].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; } for (int index3 = 0; index3 < 20; ++index3) { int index4 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Alpha: 200, Scale: 3.7f); Main.dust[index4].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; Main.dust[index4].noGravity = true; Main.dust[index4].velocity *= 3f; int index5 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Alpha: 100, Scale: 1.5f); Main.dust[index5].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 4f; Main.dust[index5].velocity *= 2f; Main.dust[index5].noGravity = true; Main.dust[index5].fadeIn = 2.5f; } for (int index6 = 0; index6 < 6; ++index6) { int index7 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, Scale: 2.7f); Main.dust[index7].position = this.Center + Vector2.UnitX.RotatedByRandom(3.14159274101257).RotatedBy((double) this.velocity.ToRotation()) * (float) this.width / 2f; Main.dust[index7].noGravity = true; Main.dust[index7].velocity *= 3f; } for (int index8 = 0; index8 < 12; ++index8) { int index9 = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 31, Scale: 1.5f); Main.dust[index9].position = this.Center + Vector2.UnitX.RotatedByRandom(3.14159274101257).RotatedBy((double) this.velocity.ToRotation()) * (float) this.width / 2f; Main.dust[index9].noGravity = true; Main.dust[index9].velocity *= 3f; } for (int index10 = 0; index10 < 5; ++index10) { int index11 = Gore.NewGore(this.position + new Vector2((float) (this.width * Main.rand.Next(100)) / 100f, (float) (this.height * Main.rand.Next(100)) / 100f) - Vector2.One * 10f, new Vector2(), Main.rand.Next(61, 64)); Main.gore[index11].position = this.Center + Vector2.UnitY.RotatedByRandom(3.14159274101257) * (float) Main.rand.NextDouble() * (float) this.width / 2f; Main.gore[index11].velocity *= 0.3f; Main.gore[index11].velocity.X += (float) Main.rand.Next(-10, 11) * 0.05f; Main.gore[index11].velocity.Y += (float) Main.rand.Next(-10, 11) * 0.05f; } } ++this.ai[1]; if ((double) this.ai[1] < 3.0) return; SoundEngine.PlaySound(SoundID.Item14, this.position); this.life = 0; this.HitEffect(); this.active = false; } private void AI_109_DarkMage() { bool flag1 = false; bool flag2 = false; bool flag3 = true; bool flag4 = false; int num1 = 4; int num2 = 3; int num3 = 0; float num4 = 0.2f; float num5 = 2f; float num6 = -0.2f; float num7 = -4f; bool flag5 = true; float num8 = 2f; float num9 = 0.1f; float num10 = 1f; float num11 = 0.04f; bool flag6 = false; float num12 = 0.96f; bool flag7 = true; NPCAimedTarget targetData = this.GetTargetData(); if (this.type == 564 || this.type == 565) { flag5 = false; this.rotation = this.velocity.X * 0.04f; this.spriteDirection = this.direction > 0 ? 1 : -1; num3 = 2; num6 = -0.05f; num7 = -0.4f; num4 = 0.05f; num5 = 0.2f; num10 = 0.5f; num11 = 0.02f; num8 = 0.5f; num9 = 0.1f; this.localAI[2] = 0.0f; DelegateMethods.v3_1 = new Vector3(0.3f, 0.05f, 0.45f) * 1.5f; Utils.PlotTileLine(this.Top, this.Bottom, (float) this.width, new Utils.TileActionAttempt(DelegateMethods.CastLightOpen)); if ((double) this.ai[0] < 0.0) this.ai[0] = MathHelper.Min(this.ai[0] + 1f, 0.0f); if ((double) this.ai[0] > 0.0) { flag7 = false; flag6 = true; num12 = 0.9f; --this.ai[0]; if ((double) this.ai[0] == 80.0 && (double) this.ai[1] == 2.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DarkMageSummonSkeleton, this.Center); if ((double) this.ai[1] == 2.0 && (double) this.ai[0] == 64.0 && Main.netMode != 1) { Projectile.NewProjectile(this.Center + new Vector2((float) (this.direction * 24), -40f), Vector2.Zero, 673, 0, 0.0f, Main.myPlayer); DD2Event.RaiseGoblins(this.Center); } if ((double) this.ai[1] == 0.0 && (double) this.ai[0] == 32.0) { Vector2 velocity = (targetData.Center - (this.Center + new Vector2((float) (this.direction * 10), -16f))).SafeNormalize(Vector2.UnitY) * 14f; this.direction = (double) velocity.X > 0.0 ? 1 : -1; if (Main.netMode != 1) Projectile.NewProjectile(this.Center + new Vector2((float) (this.direction * 10), -16f), velocity, 675, 40, 0.0f, Main.myPlayer); } if ((double) this.ai[0] == 126.0 && (double) this.ai[1] == 1.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_DarkMageCastHeal, this.Center); if ((double) this.ai[1] == 1.0 && Main.netMode != 1 && ((double) this.ai[0] == 40.0 || (double) this.ai[0] == 48.0 || (double) this.ai[0] == 56.0)) { Point result; if (WorldUtils.Find(new Vector2(this.Center.X + (float) (this.direction * 240), this.Center.Y).ToTileCoordinates(), Searches.Chain((GenSearch) new Searches.Down(50), (GenCondition) new Terraria.WorldBuilding.Conditions.IsSolid()), out result)) Projectile.NewProjectile(result.ToWorldCoordinates(autoAddY: 0.0f), Vector2.Zero, 674, 0, 0.0f, Main.myPlayer); } if ((double) this.ai[0] <= 0.0) { double num13 = (double) this.ai[1]; ++this.ai[1]; if ((double) this.ai[1] >= 3.0) this.ai[1] = 0.0f; this.ai[0] = -120f; if (num13 == 0.0) this.ai[0] = -20f; this.netUpdate = true; } } if ((double) this.ai[0] == 0.0 && (double) this.localAI[3] >= 60.0) { bool flag8 = false; Vector2 minimum = this.Center + new Vector2(-600f, -200f); Vector2 maximum = this.Center + new Vector2(600f, 200f); int num14 = 0; for (int index = 0; index < 200; ++index) { NPC npc = Main.npc[index]; if (npc.active && npc.lifeMax != npc.life && npc.Center.Between(minimum, maximum) && ++num14 >= 2) { flag8 = true; break; } } if (!flag8) this.ai[1] = 2f; if ((double) this.ai[1] == 2.0 && !DD2Event.CanRaiseGoblinsHere(this.Center)) this.ai[1] = 0.0f; bool flag9 = true; if ((double) this.ai[1] == 0.0 && ((double) this.Distance(targetData.Center) >= 1000.0 || !Collision.CanHitLine(this.Center, 0, 0, targetData.Center, 0, 0))) flag9 = false; if (flag9) { switch ((int) this.ai[1]) { case 0: this.ai[0] = 97f; break; case 1: this.ai[0] = (float) sbyte.MaxValue; break; case 2: this.ai[0] = 183f; break; } this.netUpdate = true; flag6 = true; } } if ((double) this.localAI[3] == 0.0) this.alpha = (int) byte.MaxValue; if ((double) this.localAI[3] == 30.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_EtherianPortalSpawnEnemy, this.Center); if ((double) this.localAI[3] < 60.0) { ++this.localAI[3]; this.alpha -= 5; if (this.alpha < 0) this.alpha = 0; int num15 = (int) this.localAI[3] / 10; float num16 = this.Size.Length() / 2f / 20f; int maxValue = 5; if (this.type == 576 || this.type == 577) maxValue = 1; for (int index = 0; index < num15; ++index) { if (Main.rand.Next(maxValue) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 0.55f; dust.fadeIn = 0.7f; dust.velocity *= 0.1f * num16; dust.velocity += this.velocity; } } } } if (this.justHit) this.localAI[2] = 0.0f; if (!flag2) { if ((double) this.localAI[2] >= 0.0) { float num17 = 16f; bool flag10 = false; bool flag11 = false; if ((double) this.position.X > (double) this.localAI[0] - (double) num17 && (double) this.position.X < (double) this.localAI[0] + (double) num17) flag10 = true; else if ((double) this.velocity.X < 0.0 && this.direction > 0 || (double) this.velocity.X > 0.0 && this.direction < 0) { flag10 = true; num17 += 24f; } if ((double) this.position.Y > (double) this.localAI[1] - (double) num17 && (double) this.position.Y < (double) this.localAI[1] + (double) num17) flag11 = true; if (flag10 & flag11) { ++this.localAI[2]; if ((double) this.localAI[2] >= 30.0 && (double) num17 == 16.0) flag1 = true; if ((double) this.localAI[2] >= 60.0) { this.localAI[2] = -180f; this.direction *= -1; this.velocity.X *= -1f; this.collideX = false; } } else { this.localAI[0] = this.position.X; this.localAI[1] = this.position.Y; this.localAI[2] = 0.0f; } if (flag7) NPCUtils.TargetClosestOldOnesInvasion(this); } else { ++this.localAI[2]; this.direction = (double) targetData.Center.X > (double) this.Center.X ? 1 : -1; } } int index1 = (int) (((double) this.position.X + (double) (this.width / 2)) / 16.0) + this.direction * 2; int num18 = (int) (((double) this.position.Y + (double) this.height) / 16.0); int num19 = (int) this.Bottom.Y / 16; int index2 = (int) this.Bottom.X / 16; if (flag6) { this.velocity = this.velocity * num12; } else { for (int index3 = num18; index3 < num18 + num1; ++index3) { if (Main.tile[index1, index3] == null) Main.tile[index1, index3] = new Tile(); if (Main.tile[index1, index3].nactive() && Main.tileSolid[(int) Main.tile[index1, index3].type] || Main.tile[index1, index3].liquid > (byte) 0) { if (index3 <= num18 + 1) flag4 = true; flag3 = false; break; } } for (int index4 = num19; index4 < num19 + num3; ++index4) { if (Main.tile[index2, index4] == null) Main.tile[index2, index4] = new Tile(); if (Main.tile[index2, index4].nactive() && Main.tileSolid[(int) Main.tile[index2, index4].type] || Main.tile[index2, index4].liquid > (byte) 0) { flag4 = true; flag3 = false; break; } } if (flag5) { for (int index5 = num18 - num2; index5 < num18; ++index5) { if (Main.tile[index1, index5] == null) Main.tile[index1, index5] = new Tile(); if (Main.tile[index1, index5].nactive() && Main.tileSolid[(int) Main.tile[index1, index5].type] || Main.tile[index1, index5].liquid > (byte) 0) { flag4 = false; flag1 = true; break; } } } if (flag1) { flag4 = false; flag3 = true; } if (flag3) { this.velocity.Y += num4; if ((double) this.velocity.Y > (double) num5) this.velocity.Y = num5; } else { if (((this.directionY >= 0 ? 0 : ((double) this.velocity.Y > 0.0 ? 1 : 0)) | (flag4 ? 1 : 0)) != 0) this.velocity.Y += num6; if ((double) this.velocity.Y < (double) num7) this.velocity.Y = num7; } if (this.collideX) { this.velocity.X = this.oldVelocity.X * -0.4f; if (this.direction == -1 && (double) this.velocity.X > 0.0 && (double) this.velocity.X < 1.0) this.velocity.X = 1f; if (this.direction == 1 && (double) this.velocity.X < 0.0 && (double) this.velocity.X > -1.0) this.velocity.X = -1f; } if (this.collideY) { this.velocity.Y = this.oldVelocity.Y * -0.25f; if ((double) this.velocity.Y > 0.0 && (double) this.velocity.Y < 1.0) this.velocity.Y = 1f; if ((double) this.velocity.Y < 0.0 && (double) this.velocity.Y > -1.0) this.velocity.Y = -1f; } if (this.direction == -1 && (double) this.velocity.X > -(double) num8) { this.velocity.X -= num9; if ((double) this.velocity.X > (double) num8) this.velocity.X -= num9; else if ((double) this.velocity.X > 0.0) this.velocity.X += num9 / 2f; if ((double) this.velocity.X < -(double) num8) this.velocity.X = -num8; } else if (this.direction == 1 && (double) this.velocity.X < (double) num8) { this.velocity.X += num9; if ((double) this.velocity.X < -(double) num8) this.velocity.X += num9; else if ((double) this.velocity.X < 0.0) this.velocity.X -= num9 / 2f; if ((double) this.velocity.X > (double) num8) this.velocity.X = num8; } if (this.directionY == -1 && (double) this.velocity.Y > -(double) num10) { this.velocity.Y -= num11; if ((double) this.velocity.Y > (double) num10) this.velocity.Y -= num11 * 1.25f; else if ((double) this.velocity.Y > 0.0) this.velocity.Y += num11 * 0.75f; if ((double) this.velocity.Y >= -(double) num10) return; this.velocity.Y = -num8; } else { if (this.directionY != 1 || (double) this.velocity.Y >= (double) num10) return; this.velocity.Y += num11; if ((double) this.velocity.Y < -(double) num10) this.velocity.Y += num11 * 1.25f; else if ((double) this.velocity.Y < 0.0) this.velocity.Y -= num11 * 0.75f; if ((double) this.velocity.Y <= (double) num10) return; this.velocity.Y = num10; } } } private void AI_111_DD2LightningBug() { bool flag1 = true; float num1 = 7f; float num2 = 60f; float num3 = 60f; float num4 = 1f; float num5 = 0.96f; int num6 = 30; int num7 = 20; float num8 = 200f; int Damage = 40; int Type = 438; float num9 = 10f; float num10 = 100f; bool flag2 = false; float num11 = 0.05f; Vector2 center = this.Center; NPCUtils.TargetClosestOldOnesInvasion(this); NPCAimedTarget targetData = this.GetTargetData(); bool flag3 = false; if (this.type == 578) { num1 = 4f; num2 = 20f; num3 = 20f; flag3 = true; flag2 = true; num11 = 0.1f; Type = 682; Damage = 50; num9 = 10f; num10 = 50f; num6 = 5; num7 = 30; center += new Vector2((float) (-this.spriteDirection * 20), 10f); this.position = this.position + this.netOffset; if (Main.rand.Next(15) == 0) { Vector2 position = this.position; if (this.direction == -1) position.X += (float) (this.width / 2); Dust dust = Dust.NewDustDirect(position, this.width / 2, this.height, 272); dust.scale = 0.65f; dust.velocity.Y -= 0.8f; if ((double) dust.velocity.X * (double) this.direction > 0.0) dust.velocity.X *= -1f; if ((double) dust.velocity.Y > 0.0) dust.velocity *= -0.5f; } if (Main.rand.Next(80) == 0) { Vector2 rotationVector2 = (Main.rand.NextFloat() * 6.283185f).ToRotationVector2(); Dust dust1 = Dust.NewDustPerfect(this.Center, 272, new Vector2?(rotationVector2)); dust1.velocity *= 1.1f; dust1.noGravity = true; dust1.customData = (object) this; Dust dust2 = Dust.NewDustPerfect(this.Center, 272, new Vector2?(rotationVector2)); dust2.velocity *= 1.5f; dust2.noGravity = true; dust2.customData = (object) this; } this.position = this.position - this.netOffset; } if (flag3) { if ((double) this.localAI[1] == 0.0) this.alpha = (int) byte.MaxValue; if ((double) this.localAI[1] == 30.0) SoundEngine.PlayTrackedSound((SoundStyle) SoundID.DD2_EtherianPortalSpawnEnemy, this.Center); if ((double) this.localAI[1] < 60.0) { ++this.localAI[1]; this.alpha -= 5; if (this.alpha < 0) this.alpha = 0; int num12 = (int) this.localAI[1] / 10; float num13 = this.Size.Length() / 2f / 20f; int maxValue = 5; if (this.type == 576 || this.type == 577) maxValue = 1; for (int index = 0; index < num12; ++index) { if (Main.rand.Next(maxValue) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 27, this.velocity.X * 1f, Alpha: 100); dust.scale = 0.55f; dust.fadeIn = 0.7f; dust.velocity *= 0.1f * num13; dust.velocity += this.velocity; } } } } if (flag2) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type == this.type && (double) Math.Abs(this.position.X - Main.npc[index].position.X) + (double) Math.Abs(this.position.Y - Main.npc[index].position.Y) < (double) this.width) { if ((double) this.position.X < (double) Main.npc[index].position.X) this.velocity.X -= num11; else this.velocity.X += num11; if ((double) this.position.Y < (double) Main.npc[index].position.Y) this.velocity.Y -= num11; else this.velocity.Y += num11; } } } this.rotation = (float) ((double) Math.Abs(this.velocity.X) * (double) this.direction * 0.100000001490116); this.spriteDirection = this.direction; Vector2 position1 = center; Vector2 v = targetData.Center - position1; Vector2 vector2_1 = v.SafeNormalize(Vector2.UnitY) * num1; bool flag4 = Collision.CanHit(this.Center, 1, 1, targetData.Center, 1, 1); if ((double) this.localAI[0] < 0.0) ++this.localAI[0]; if (!flag1) { this.velocity = (this.velocity * (num2 - 1f) + vector2_1) / num2; this.EncourageDespawn(10); } else if ((double) v.Length() > (double) num8 || !flag4) this.velocity = (this.velocity * (num3 - 1f) + vector2_1) / num3; else if ((double) v.Y < (double) num10) { this.velocity.Y -= 0.03f; } else { if ((double) this.localAI[0] < 0.0) return; this.velocity = this.velocity * num5; if ((double) this.velocity.Length() >= (double) num4 || Main.netMode == 1) return; ++this.localAI[0]; if ((double) this.localAI[0] < (double) num6) return; this.localAI[0] = (float) -num7; this.direction = this.spriteDirection = (double) vector2_1.X > 0.0 ? 1 : -1; Vector2 vector2_2 = v + Utils.RandomVector2(Main.rand, -25f, 25f); vector2_2.X *= (float) (1.0 + (double) Main.rand.Next(-20, 21) * 0.00499999988824129); vector2_2.Y *= (float) (1.0 + (double) Main.rand.Next(-20, 21) * 0.00499999988824129); vector2_2 = vector2_2.SafeNormalize(Vector2.UnitY) * num9; vector2_2.X *= (float) (1.0 + (double) Main.rand.Next(-20, 21) * (1.0 / 160.0)); vector2_2.Y *= (float) (1.0 + (double) Main.rand.Next(-20, 21) * (1.0 / 160.0)); Projectile.NewProjectile(position1, vector2_2, Type, Damage, 0.0f, Main.myPlayer); } } public void ReflectProjectiles(Microsoft.Xna.Framework.Rectangle myRect) { for (int index = 0; index < 1000; ++index) { if (Main.projectile[index].active && Main.projectile[index].CanBeReflected() && this.CanReflectProjectile(Main.projectile[index])) this.ReflectProjectile(Main.projectile[index]); } } public bool CanReflectProjectile(Projectile proj) { bool flag = proj.Hitbox.Intersects(this.Hitbox); if (this.type == 618) this.BloodNautilus_GetMouthPositionAndRotation(out Vector2 _, out Vector2 _); return flag; } public void BloodNautilus_GetMouthPositionAndRotation( out Vector2 mouthPosition, out Vector2 mouthDirection) { float f = this.rotation + 0.4712389f * (float) this.spriteDirection; if (this.spriteDirection == -1) f += 3.141593f; mouthDirection = f.ToRotationVector2(); mouthPosition = this.Center + mouthDirection * 50f; } public void ReflectProjectile(Projectile proj) { SoundEngine.PlaySound(SoundID.Item150, proj.position); for (int index1 = 0; index1 < 3; ++index1) { int index2 = Dust.NewDust(proj.position, proj.width, proj.height, 31); Main.dust[index2].velocity *= 0.3f; } proj.hostile = true; proj.friendly = false; Vector2 vector2 = Main.player[proj.owner].Center - proj.Center; vector2.Normalize(); vector2 *= proj.oldVelocity.Length(); proj.velocity = new Vector2((float) Main.rand.Next(-100, 101), (float) Main.rand.Next(-100, 101)); proj.velocity.Normalize(); Projectile projectile1 = proj; projectile1.velocity = projectile1.velocity * vector2.Length(); Projectile projectile2 = proj; projectile2.velocity = projectile2.velocity + vector2 * 20f; proj.velocity.Normalize(); Projectile projectile3 = proj; projectile3.velocity = projectile3.velocity * vector2.Length(); proj.damage /= 2; proj.penetrate = 1; } public int GetShootingFrame(float circleY) { int num = -4; if ((double) circleY < -0.300000011920929) num = 1; if ((double) circleY < -0.100000001490116) num = 0; if ((double) circleY > 0.100000001490116) num = 2; if ((double) circleY > 0.300000011920929) num = 3; if (this.type == 228 || this.type == 229 || this.type == 209 || this.type == 22 || this.type == 368) { if (num == -4) num = 1; if ((double) circleY >= -0.100000001490116) ++num; } return num; } public Tuple GetSwingStats( int swingMax, int swingCurrent, int aimDir, int itemWidth, int itemHeight) { Vector2 zero = Vector2.Zero; if ((double) swingCurrent < (double) swingMax * 0.333) { float num = 10f; if (itemWidth > 32) num = 14f; if (itemWidth >= 52) num = 24f; if (itemWidth >= 64) num = 28f; if (itemWidth >= 92) num = 38f; zero.X = this.Center.X + ((float) itemWidth * 0.5f - num) * (float) aimDir; zero.Y = this.position.Y + 24f; } else if ((double) swingCurrent < (double) swingMax * 0.666) { float num1 = 10f; if (itemWidth > 32) num1 = 18f; if (itemWidth >= 52) num1 = 24f; if (itemWidth >= 64) num1 = 28f; if (itemWidth >= 92) num1 = 38f; zero.X = this.Center.X + ((float) itemWidth * 0.5f - num1) * (float) aimDir; float num2 = 10f; if (itemHeight > 32) num2 = 8f; if (itemHeight > 52) num2 = 12f; if (itemHeight > 64) num2 = 14f; zero.Y = this.position.Y + num2; } else { float num3 = 6f; if (itemWidth > 32) num3 = 14f; if (itemWidth >= 48) num3 = 18f; if (itemWidth >= 52) num3 = 24f; if (itemWidth >= 64) num3 = 28f; if (itemWidth >= 92) num3 = 38f; zero.X = this.Center.X - ((float) itemWidth * 0.5f - num3) * (float) aimDir; float num4 = 10f; if (itemHeight > 32) num4 = 10f; if (itemHeight > 52) num4 = 12f; if (itemHeight > 64) num4 = 14f; zero.Y = this.position.Y + num4; } float num5 = (float) (((double) swingCurrent / (double) swingMax - 0.5) * (double) -aimDir * 3.5 - (double) aimDir * 0.300000011920929); return Tuple.Create(zero, num5); } public void TweakSwingStats( int swingMax, int swingCurrent, int aimDir, ref Microsoft.Xna.Framework.Rectangle itemRectangle) { if ((double) swingCurrent < (double) swingMax * 0.333) { if (aimDir == -1) itemRectangle.X -= (int) ((double) itemRectangle.Width * 1.4 - (double) itemRectangle.Width); itemRectangle.Width = (int) ((double) itemRectangle.Width * 1.4); itemRectangle.Y += (int) ((double) itemRectangle.Height * 0.5); itemRectangle.Height = (int) ((double) itemRectangle.Height * 1.1); } else { if ((double) swingCurrent < (double) swingMax * 0.666) return; if (aimDir == 1) itemRectangle.X -= (int) ((double) itemRectangle.Width * 1.2); itemRectangle.Width *= 2; itemRectangle.Y -= (int) ((double) itemRectangle.Height * 1.4 - (double) itemRectangle.Height); itemRectangle.Height = (int) ((double) itemRectangle.Height * 1.4); } } public bool UsesPartyHat() { if (this.type == 441 || this.type == 37 || this.type == 633) return false; if (this.ForcePartyHatOn) return true; return !this.IsABestiaryIconDummy && this.frame.Height > 0 && this.townNPC && BirthdayParty.PartyIsUp; } public PartyHatColor GetPartyHatColor() { if (!this.UsesPartyHat() || string.IsNullOrEmpty(this.GivenOrTypeName)) return PartyHatColor.None; int num1 = this.GivenOrTypeName.Length + (int) this.GivenOrTypeName[0]; int moonPhase = Main.moonPhase; if (Main.dayTime) --moonPhase; int num2 = num1 + this.whoAmI + moonPhase * (this.whoAmI % 2 == 0).ToDirectionInt(); if (num2 < 0) num2 += 5; int num3 = num2 % 5; if (num3 == 0) ++num3; return (PartyHatColor) num3; } public void SetFrameSize() { Main.instance.LoadNPC(this.type); if (!this.setFrameSize) return; this.frame = new Microsoft.Xna.Framework.Rectangle(0, 0, TextureAssets.Npc[this.type].Width(), TextureAssets.Npc[this.type].Height() / Main.npcFrameCount[this.type]); this.setFrameSize = false; } public void FindFrame() { this.position = this.position + this.netOffset; int num1 = 1; if (!Main.dedServ) { if (!TextureAssets.Npc[this.type].IsLoaded) return; num1 = TextureAssets.Npc[this.type].Height() / Main.npcFrameCount[this.type]; } int num2 = 0; if (this.aiAction == 0) num2 = (double) this.velocity.Y >= 0.0 ? ((double) this.velocity.Y <= 0.0 ? ((double) this.velocity.X == 0.0 ? 0 : 1) : 3) : 2; else if (this.aiAction == 1) num2 = 4; switch (this.type) { case 1: case 16: case 59: case 71: case 81: case 138: case 147: case 183: case 184: case 204: case 225: case 302: case 304: case 333: case 334: case 335: case 336: case 535: case 537: case 658: case 659: if (this.type == 302 || this.type == 304) this.spriteDirection = this.direction; ++this.frameCounter; if (num2 > 0) ++this.frameCounter; if (num2 == 4) ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 2: case 23: case 121: case 169: case 190: case 191: case 192: case 193: case 194: case 317: case 318: case 660: if (this.type == 23) { int index = Dust.NewDust(new Vector2(this.position.X - this.velocity.X, this.position.Y - this.velocity.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, Scale: 2f); Main.dust[index].noGravity = true; Main.dust[index].velocity.X *= 0.3f; Main.dust[index].velocity.Y *= 0.3f; } if ((this.type == 121 || this.type == 660) && (double) this.localAI[0] == 0.0) { this.localAI[0] = 1f; this.frame.Y = num1 * 2; } if (this.type == 2 || this.type == 190 || this.type == 191 || this.type == 192 || this.type == 193 || this.type == 194 || this.type == 317 || this.type == 318) { if ((double) this.velocity.X > 0.0) { this.spriteDirection = 1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); } if ((double) this.velocity.X < 0.0) { this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 3.14f; } } else if (this.type == 2 || this.type == 121 || this.type == 660) { if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; this.rotation = this.velocity.X * 0.1f; } ++this.frameCounter; float num3 = 8f; if (this.type == 660) num3 = 6f; if (this.frameCounter >= (double) num3) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 3: case 52: case 53: case 132: case 161: case 186: case 187: case 188: case 189: case 200: case 223: case 251: case 254: case (int) byte.MaxValue: case 319: case 320: case 321: case 331: case 332: case 342: case 536: case 590: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter < 8.0) { this.frame.Y = 0; break; } if (this.frameCounter < 16.0) { this.frame.Y = num1; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 32.0) { this.frame.Y = num1; break; } this.frameCounter = 0.0; break; case 4: case 125: case 126: ++this.frameCounter; if (this.frameCounter < 7.0) this.frame.Y = 0; else if (this.frameCounter < 14.0) this.frame.Y = num1; else if (this.frameCounter < 21.0) { this.frame.Y = num1 * 2; } else { this.frameCounter = 0.0; this.frame.Y = 0; } if ((double) this.ai[0] > 1.0) { this.frame.Y += num1 * 3; break; } break; case 5: ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 6: case 173: ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 17: case 18: case 19: case 20: case 21: case 22: case 26: case 27: case 28: case 31: case 37: case 38: case 44: case 54: case 73: case 77: case 78: case 79: case 80: case 104: case 107: case 108: case 120: case 124: case 140: case 142: case 159: case 160: case 162: case 167: case 178: case 181: case 185: case 196: case 197: case 198: case 201: case 202: case 203: case 207: case 208: case 209: case 212: case 213: case 227: case 228: case 229: case 287: case 294: case 295: case 296: case 310: case 311: case 312: case 313: case 314: case 322: case 323: case 324: case 326: case 338: case 339: case 340: case 353: case 368: case 369: case 441: case 453: case 460: case 462: case 463: case 489: case 534: case 550: case 588: case 630: case 632: case 633: case 635: case 637: case 638: case 656: int num4 = this.isLikeATownNPC ? NPCID.Sets.ExtraFramesCount[this.type] : 0; if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; int num5 = Main.npcFrameCount[this.type] - NPCID.Sets.AttackFrameCount[this.type]; if ((double) this.ai[0] >= 20.0 && (double) this.ai[0] <= 22.0) { int num6 = this.frame.Y / num1; switch (this.ai[0]) { case 20f: if (this.type == 656) { if ((double) this.ai[1] > 30.0 && (num6 < 7 || num6 > 9)) num6 = 7; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 8 && (double) this.ai[1] > 30.0) num6 = 8; if (num6 > 9) num6 = 0; } } if (this.type == 637) { if ((double) this.ai[1] > 30.0 && (num6 < 10 || num6 > 16)) num6 = 10; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 13 && (double) this.ai[1] > 30.0) num6 = 13; if (num6 > 16) num6 = 0; } } if (this.type == 638) { if ((double) this.ai[1] > 30.0 && (num6 < 23 || num6 > 27)) num6 = 23; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 26 && (double) this.ai[1] > 30.0) num6 = 24; if (num6 > 27) { num6 = 0; break; } break; } break; } break; case 21f: if (this.type == 656) { if ((double) this.ai[1] > 30.0 && (num6 < 10 || num6 > 16)) num6 = 10; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 13 && (double) this.ai[1] > 30.0) num6 = 13; if (num6 > 16) num6 = 0; } } if (this.type == 637) { if ((double) this.ai[1] > 30.0 && (num6 < 17 || num6 > 21)) num6 = 17; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 19 && (double) this.ai[1] > 30.0) num6 = 19; if (num6 > 21) num6 = 0; } } if (this.type == 638) { if ((double) this.ai[1] > 30.0 && (num6 < 17 || num6 > 22)) num6 = 17; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 21 && (double) this.ai[1] > 30.0) num6 = 18; if (num6 > 22) { num6 = 0; break; } break; } break; } break; case 22f: if (this.type == 656) { int num7 = Main.npcFrameCount[this.type]; if ((double) this.ai[1] > 40.0 && (num6 < 17 || num6 >= num7)) num6 = 17; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 20 && (double) this.ai[1] > 40.0) num6 = 19; if (num6 >= num7) num6 = 0; } } if (this.type == 637) { if ((double) this.ai[1] > 30.0 && (num6 < 17 || num6 > 27)) num6 = 17; if (num6 > 0) ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num6; if (num6 > 27) { num6 = (double) this.ai[1] > 30.0 ? 22 : 20; break; } if ((double) this.ai[1] <= 30.0 && num6 == 22) { num6 = 0; break; } if ((double) this.ai[1] > 30.0 && num6 > 19 && num6 < 22) { num6 = 22; break; } break; } break; } break; } this.frame.Y = num6 * num1; break; } if ((double) this.ai[0] == 2.0) { ++this.frameCounter; if (this.frame.Y / num1 == num5 - 1 && this.frameCounter >= 5.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y / num1 == 0 && this.frameCounter >= 40.0) { this.frame.Y = num1 * (num5 - 1); this.frameCounter = 0.0; break; } if (this.frame.Y != 0 && this.frame.Y != num1 * (num5 - 1)) { this.frame.Y = 0; this.frameCounter = 0.0; break; } break; } if ((double) this.ai[0] == 11.0) { ++this.frameCounter; if (this.frame.Y / num1 == num5 - 1 && this.frameCounter >= 50.0) { if (this.frameCounter == 50.0) { int num8 = Main.rand.Next(4); for (int index1 = 0; index1 < 3 + num8; ++index1) { int index2 = Dust.NewDust(this.Center + Vector2.UnitX * (float) -this.direction * 8f - Vector2.One * 5f + Vector2.UnitY * 8f, 3, 6, 216, (float) -this.direction, 1f); Main.dust[index2].velocity /= 2f; Main.dust[index2].scale = 0.8f; } if (Main.rand.Next(30) == 0) { int index = Gore.NewGore(this.Center + Vector2.UnitX * (float) -this.direction * 8f, Vector2.Zero, Main.rand.Next(580, 583)); Main.gore[index].velocity /= 2f; Main.gore[index].velocity.Y = Math.Abs(Main.gore[index].velocity.Y); Main.gore[index].velocity.X = -Math.Abs(Main.gore[index].velocity.X) * (float) this.direction; } } if (this.frameCounter >= 100.0 && Main.rand.Next(20) == 0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } break; } if (this.frame.Y / num1 == 0 && this.frameCounter >= 20.0) { this.frame.Y = num1 * (num5 - 1); this.frameCounter = 0.0; if (Main.netMode != 1) { EmoteBubble.NewBubble(89, new WorldUIAnchor((Entity) this), 90); break; } break; } if (this.frame.Y != 0 && this.frame.Y != num1 * (num5 - 1)) { this.frame.Y = 0; this.frameCounter = 0.0; break; } break; } if ((double) this.ai[0] == 5.0) { this.frame.Y = num1 * (num5 - 3); if (this.type == 637) this.frame.Y = num1 * 19; this.frameCounter = 0.0; break; } if ((double) this.ai[0] == 6.0) { ++this.frameCounter; int num9 = this.frame.Y / num1; switch (num5 - num9) { case 1: case 2: case 4: case 5: int num10 = this.frameCounter >= 10.0 ? (this.frameCounter >= 16.0 ? (this.frameCounter >= 46.0 ? (this.frameCounter >= 60.0 ? (this.frameCounter >= 66.0 ? (this.frameCounter >= 72.0 ? (this.frameCounter >= 102.0 ? (this.frameCounter >= 108.0 ? (this.frameCounter >= 114.0 ? (this.frameCounter >= 120.0 ? (this.frameCounter >= 150.0 ? (this.frameCounter >= 156.0 ? (this.frameCounter >= 162.0 ? (this.frameCounter >= 168.0 ? (this.frameCounter >= 198.0 ? (this.frameCounter >= 204.0 ? (this.frameCounter >= 210.0 ? (this.frameCounter >= 216.0 ? (this.frameCounter >= 246.0 ? (this.frameCounter >= 252.0 ? (this.frameCounter >= 258.0 ? (this.frameCounter >= 264.0 ? (this.frameCounter >= 294.0 ? (this.frameCounter >= 300.0 ? 0 : num5 - 5) : num5 - 4) : num5 - 5) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : 0; if (num10 == num5 - 4 && num9 == num5 - 5) { Vector2 Position = this.Center + new Vector2((float) (10 * this.direction), -4f); for (int index3 = 0; index3 < 8; ++index3) { int Type = Main.rand.Next(139, 143); int index4 = Dust.NewDust(Position, 0, 0, Type, this.velocity.X + (float) this.direction, this.velocity.Y - 2.5f, Scale: 1.2f); Main.dust[index4].velocity.X += (float) this.direction * 1.5f; Main.dust[index4].position -= new Vector2(4f); Main.dust[index4].velocity *= 2f; Main.dust[index4].scale = (float) (0.699999988079071 + (double) Main.rand.NextFloat() * 0.300000011920929); } } this.frame.Y = num1 * num10; if (this.frameCounter >= 300.0) { this.frameCounter = 0.0; break; } break; default: if (num9 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else if (((double) this.ai[0] == 7.0 || (double) this.ai[0] == 19.0) && !NPCID.Sets.IsTownPet[this.type]) { ++this.frameCounter; int num11 = this.frame.Y / num1; switch (num5 - num11) { case 1: case 2: case 4: case 5: int num12 = 0; if (this.frameCounter < 16.0) num12 = 0; else if (this.frameCounter == 16.0 && Main.netMode != 1) EmoteBubble.NewBubbleNPC(new WorldUIAnchor((Entity) this), 112); else if (this.frameCounter < 128.0) num12 = this.frameCounter % 16.0 < 8.0 ? num5 - 2 : 0; else if (this.frameCounter < 160.0) num12 = 0; else if (this.frameCounter == 160.0 && Main.netMode != 1) EmoteBubble.NewBubbleNPC(new WorldUIAnchor((Entity) this), 60); else num12 = this.frameCounter >= 220.0 ? 0 : (this.frameCounter % 12.0 < 6.0 ? num5 - 2 : 0); this.frame.Y = num1 * num12; if (this.frameCounter >= 220.0) { this.frameCounter = 0.0; break; } break; default: if (num11 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else if ((double) this.ai[0] == 9.0) { ++this.frameCounter; int num13 = this.frame.Y / num1; switch (num5 - num13) { case 1: case 2: case 4: case 5: int num14 = this.frameCounter >= 10.0 ? (this.frameCounter >= 16.0 ? num5 - 4 : num5 - 5) : 0; if ((double) this.ai[1] < 16.0) num14 = num5 - 5; if ((double) this.ai[1] < 10.0) num14 = 0; this.frame.Y = num1 * num14; break; default: if (num13 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else if ((double) this.ai[0] == 18.0) { ++this.frameCounter; int num15 = this.frame.Y / num1; switch (num5 - num15) { case 1: case 2: case 4: case 5: int num16 = 0; num16 = this.frameCounter >= 10.0 ? (this.frameCounter >= 16.0 ? num5 - 2 : num5 - 1) : 0; if ((double) this.ai[1] < 16.0) num16 = num5 - 1; if ((double) this.ai[1] < 10.0) num16 = 0; int num17 = Main.npcFrameCount[this.type] - 2; this.frame.Y = num1 * num17; break; default: if (num15 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else { if ((double) this.ai[0] == 10.0 || (double) this.ai[0] == 13.0) { ++this.frameCounter; int num18 = this.frame.Y / num1; if ((uint) (num18 - num5) > 3U && num18 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; } int num19 = 10; int num20 = 6; if (this.type == 633) { num19 = 0; num20 = 2; } int num21 = this.frameCounter >= (double) num19 ? (this.frameCounter >= (double) (num19 + num20) ? (this.frameCounter >= (double) (num19 + num20 * 2) ? (this.frameCounter >= (double) (num19 + num20 * 3) ? (this.frameCounter >= (double) (num19 + num20 * 4) ? 0 : num5 + 3) : num5 + 2) : num5 + 1) : num5) : 0; this.frame.Y = num1 * num21; break; } if ((double) this.ai[0] == 15.0) { ++this.frameCounter; int num22 = this.frame.Y / num1; if ((uint) (num22 - num5) > 3U && num22 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; } float num23 = this.ai[1] / (float) NPCID.Sets.AttackTime[this.type]; int num24 = (double) num23 <= 0.649999976158142 ? ((double) num23 <= 0.5 ? ((double) num23 <= 0.349999994039536 ? ((double) num23 <= 0.0 ? 0 : num5 + 3) : num5 + 2) : num5 + 1) : num5; this.frame.Y = num1 * num24; break; } if ((double) this.ai[0] == 12.0) { ++this.frameCounter; int num25 = this.frame.Y / num1; if ((uint) (num25 - num5) > 4U && num25 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; } int num26 = num5 + this.GetShootingFrame(this.ai[2]); this.frame.Y = num1 * num26; break; } if ((double) this.ai[0] == 14.0) { ++this.frameCounter; int num27 = this.frame.Y / num1; if ((uint) (num27 - num5) > 1U && num27 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; } int num28 = 12; int num29 = this.frameCounter % (double) num28 * 2.0 < (double) num28 ? num5 : num5 + 1; this.frame.Y = num1 * num29; break; } if (this.CanTalk && ((double) this.ai[0] == 3.0 || (double) this.ai[0] == 4.0)) { ++this.frameCounter; int num30 = this.frame.Y / num1; switch (num5 - num30) { case 1: case 2: case 4: case 5: bool flag = (double) this.ai[0] == 3.0; int num31 = 0; int num32 = 0; int time1 = -1; int time2 = -1; if (this.frameCounter < 10.0) num31 = 0; else if (this.frameCounter < 16.0) num31 = num5 - 5; else if (this.frameCounter < 46.0) num31 = num5 - 4; else if (this.frameCounter < 60.0) num31 = num5 - 5; else if (this.frameCounter < 216.0) num31 = 0; else if (this.frameCounter == 216.0 && Main.netMode != 1) time1 = 70; else if (this.frameCounter < 286.0) num31 = this.frameCounter % 12.0 < 6.0 ? num5 - 2 : 0; else if (this.frameCounter < 320.0) num31 = 0; else if (this.frameCounter == 320.0 && Main.netMode != 1) time1 = 100; else num31 = this.frameCounter >= 420.0 ? 0 : (this.frameCounter % 16.0 < 8.0 ? num5 - 2 : 0); if (this.frameCounter < 70.0) num32 = 0; else if (this.frameCounter == 70.0 && Main.netMode != 1) time2 = 90; else num32 = this.frameCounter >= 160.0 ? (this.frameCounter >= 166.0 ? (this.frameCounter >= 186.0 ? (this.frameCounter >= 200.0 ? (this.frameCounter >= 320.0 ? (this.frameCounter >= 326.0 ? 0 : num5 - 1) : 0) : num5 - 5) : num5 - 4) : num5 - 5) : (this.frameCounter % 16.0 < 8.0 ? num5 - 2 : 0); if (flag) { NPC npc = Main.npc[(int) this.ai[2]]; if (time1 != -1) EmoteBubble.NewBubbleNPC(new WorldUIAnchor((Entity) this), time1, new WorldUIAnchor((Entity) npc)); if (time2 != -1 && npc.CanTalk) EmoteBubble.NewBubbleNPC(new WorldUIAnchor((Entity) npc), time2, new WorldUIAnchor((Entity) this)); } this.frame.Y = num1 * (flag ? num31 : num32); if (this.frameCounter >= 420.0) { this.frameCounter = 0.0; break; } break; default: if (num30 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else if (this.CanTalk && ((double) this.ai[0] == 16.0 || (double) this.ai[0] == 17.0)) { ++this.frameCounter; int num33 = this.frame.Y / num1; switch (num5 - num33) { case 1: case 2: case 4: case 5: bool flag = (double) this.ai[0] == 16.0; int num34 = 0; int time = -1; if (this.frameCounter < 10.0) num34 = 0; else if (this.frameCounter < 16.0) num34 = num5 - 5; else if (this.frameCounter < 22.0) num34 = num5 - 4; else if (this.frameCounter < 28.0) num34 = num5 - 5; else if (this.frameCounter < 34.0) num34 = num5 - 4; else if (this.frameCounter < 40.0) num34 = num5 - 5; else if (this.frameCounter == 40.0 && Main.netMode != 1) time = 45; else if (this.frameCounter < 70.0) num34 = num5 - 4; else if (this.frameCounter < 76.0) num34 = num5 - 5; else if (this.frameCounter < 82.0) num34 = num5 - 4; else if (this.frameCounter < 88.0) num34 = num5 - 5; else if (this.frameCounter < 94.0) num34 = num5 - 4; else if (this.frameCounter < 100.0) num34 = num5 - 5; else if (this.frameCounter == 100.0 && Main.netMode != 1) time = 45; else if (this.frameCounter < 130.0) num34 = num5 - 4; else if (this.frameCounter < 136.0) num34 = num5 - 5; else if (this.frameCounter < 142.0) num34 = num5 - 4; else if (this.frameCounter < 148.0) num34 = num5 - 5; else if (this.frameCounter < 154.0) num34 = num5 - 4; else if (this.frameCounter < 160.0) num34 = num5 - 5; else if (this.frameCounter == 160.0 && Main.netMode != 1) time = 75; else num34 = this.frameCounter >= 220.0 ? (this.frameCounter >= 226.0 ? 0 : num5 - 5) : num5 - 4; if (flag && time != -1) { int num35 = (int) this.localAI[2]; int num36 = (int) this.localAI[3]; int num37 = (int) Main.npc[(int) this.ai[2]].localAI[3]; int num38 = (int) Main.npc[(int) this.ai[2]].localAI[2]; int num39 = 3 - num35 - num36; int num40 = 0; if (this.frameCounter == 40.0) num40 = 1; if (this.frameCounter == 100.0) num40 = 2; if (this.frameCounter == 160.0) num40 = 3; int num41 = 3 - num40; int num42 = -1; int num43 = 0; while (num42 < 0 && ++num43 < 100) { num42 = Main.rand.Next(2); if (num42 == 0 && num38 >= num36) num42 = -1; if (num42 == 1 && num37 >= num35) num42 = -1; if (num42 == -1 && num41 <= num39) num42 = 2; } if (num42 == 0) { ++Main.npc[(int) this.ai[2]].localAI[3]; ++num37; } if (num42 == 1) { ++Main.npc[(int) this.ai[2]].localAI[2]; ++num38; } int emoticon1 = Utils.SelectRandom(Main.rand, 38, 37, 36); int emoticon2 = emoticon1; if (num42 == 0) { switch (emoticon1) { case 36: emoticon2 = 38; break; case 37: emoticon2 = 36; break; case 38: emoticon2 = 37; break; } } else if (num42 == 1) { switch (emoticon1) { case 36: emoticon2 = 37; break; case 37: emoticon2 = 38; break; case 38: emoticon2 = 36; break; } } if (num41 == 0) { if (num37 >= 2) emoticon1 -= 3; if (num38 >= 2) emoticon2 -= 3; } EmoteBubble.NewBubble(emoticon1, new WorldUIAnchor((Entity) this), time); EmoteBubble.NewBubble(emoticon2, new WorldUIAnchor((Entity) Main.npc[(int) this.ai[2]]), time); } this.frame.Y = num1 * (flag ? num34 : num34); if (this.frameCounter >= 420.0) { this.frameCounter = 0.0; break; } break; default: if (num33 != 0) { this.frame.Y = 0; this.frameCounter = 0.0; goto case 1; } else goto case 1; } } else { if ((double) this.velocity.X == 0.0) { if (this.type == 638) { int num44 = this.frame.Y / num1; if (num44 > 7) num44 = 0; ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; ++num44; if (num44 > 7) num44 = 0; } this.frame.Y = num44 * num1; break; } if (this.type == 140 || this.type == 489) { this.frame.Y = num1; this.frameCounter = 0.0; break; } this.frame.Y = 0; this.frameCounter = 0.0; break; } int num45 = 6; if (this.type == 632) num45 = 12; if (this.type == 534) num45 = 12; if (this.type == 638) num45 = 12; if (this.type == 656) num45 = 12; if (this.type == 489) { num45 = 8; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; this.frameCounter += 0.5; } else { this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; } if (this.type == 462) num45 = 9; int num46 = num1 * 2; if (this.type == 638) num46 = num1 * 9; if (this.type == 656) num46 = num1; if (this.frame.Y < num46) this.frame.Y = num46; if (this.frameCounter > (double) num45) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - num4) { this.frame.Y = num46; break; } break; } } } else { if (this.type == 462) { this.frameCounter = 0.0; this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 * 2 : num1; break; } this.frameCounter = 0.0; this.frame.Y = num1; if (this.type == 489 || this.type == 21 || this.type == 31 || this.type == 294 || this.type == 326 || this.type == 295 || this.type == 296 || this.type == 44 || this.type == 77 || this.type == 120 || this.type == 140 || this.type == 159 || this.type == 167 || this.type == 197 || this.type == 201 || this.type == 202) this.frame.Y = 0; if (this.type == 638) { this.frame.Y = num1 * 8; break; } break; } break; case 24: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.ai[1] > 0.0) { if (this.frame.Y < 4) this.frameCounter = 0.0; ++this.frameCounter; if (this.frameCounter <= 4.0) { this.frame.Y = num1 * 4; break; } if (this.frameCounter <= 8.0) { this.frame.Y = num1 * 5; break; } if (this.frameCounter <= 12.0) { this.frame.Y = num1 * 6; break; } if (this.frameCounter <= 16.0) { this.frame.Y = num1 * 7; break; } if (this.frameCounter <= 20.0) { this.frame.Y = num1 * 8; break; } this.frame.Y = num1 * 9; this.frameCounter = 100.0; break; } ++this.frameCounter; if (this.frameCounter <= 4.0) { this.frame.Y = 0; break; } if (this.frameCounter <= 8.0) { this.frame.Y = num1; break; } if (this.frameCounter <= 12.0) { this.frame.Y = num1 * 2; break; } this.frame.Y = num1 * 3; if (this.frameCounter >= 16.0) { this.frameCounter = 0.0; break; } break; case 29: case 32: case 45: case 172: case 281: case 282: case 283: case 284: case 285: case 286: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } this.frame.Y = 0; if ((double) this.velocity.Y != 0.0) { this.frame.Y += num1 * 2; break; } if ((double) this.ai[1] > 0.0) { this.frame.Y += num1; break; } break; case 34: ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 42: case 231: case 232: case 233: case 234: case 235: ++this.frameCounter; if (this.frameCounter < 2.0) { this.frame.Y = 0; break; } if (this.frameCounter < 4.0) { this.frame.Y = num1; break; } if (this.frameCounter < 6.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 8.0) { this.frame.Y = num1; break; } this.frameCounter = 0.0; break; case 43: case 56: case 175: ++this.frameCounter; if (this.frameCounter < 6.0) this.frame.Y = 0; else if (this.frameCounter < 12.0) this.frame.Y = num1; else if (this.frameCounter < 18.0) this.frame.Y = num1 * 2; else if (this.frameCounter < 24.0) this.frame.Y = num1; if (this.frameCounter == 23.0) { this.frameCounter = 0.0; break; } break; case 46: case 47: case 303: case 337: case 443: case 464: case 540: case 614: case 646: case 647: case 648: case 649: case 650: case 651: case 652: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } if ((double) this.velocity.Y < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; break; } if ((double) this.velocity.Y > 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 6; break; } break; case 48: case 49: case 51: case 60: case 82: case 93: case 137: case 182: case 210: case 211: case 253: case 316: case 634: case 662: if (this.type == 60) { int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, Scale: 2f); Main.dust[index].noGravity = true; } if (this.type == 634 && Main.rand.Next(10) == 0) { int index = Dust.NewDust(this.position, this.width, this.height, 165, this.velocity.X, this.velocity.Y, 50); Main.dust[index].velocity *= 0.1f; Main.dust[index].noGravity = true; } if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; this.rotation = this.velocity.X * 0.1f; if (this.type == 210 || this.type == 211) { ++this.frameCounter; this.rotation = this.velocity.X * 0.2f; } ++this.frameCounter; int num47 = 6; int num48 = Main.npcFrameCount[this.type]; if (this.type == 49 || this.type == 51 || this.type == 60 || this.type == 634) --num48; if (this.type == 48) num47 = 5; if (this.frameCounter >= (double) num47) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * num48) { this.frame.Y = 0; break; } break; case 50: if ((double) this.velocity.Y != 0.0) { if (this.frame.Y < num1 * 4) { this.frame.Y = num1 * 4; this.frameCounter = 0.0; } if (++this.frameCounter >= 4.0) { this.frame.Y = num1 * 5; break; } break; } if (this.frame.Y >= num1 * 5) { this.frame.Y = num1 * 4; this.frameCounter = 0.0; } ++this.frameCounter; if (num2 > 0) ++this.frameCounter; if (num2 == 4) ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } break; case 55: case 57: case 58: case 102: case 241: case 465: case 592: case 607: this.spriteDirection = this.direction; ++this.frameCounter; if (this.wet) { if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; } if (this.frameCounter < 6.0) { this.frame.Y = num1 * 4; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1 * 5; break; } this.frameCounter = 0.0; break; case 61: this.spriteDirection = this.direction; this.rotation = this.velocity.X * 0.1f; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } int num49 = 5; int num50 = 5; ++this.frameCounter; if (this.frameCounter >= (double) (num49 * num50)) this.frameCounter = 0.0; this.frame.Y = ((int) (this.frameCounter / (double) num49) + 1) * num1; break; case 62: case 66: this.spriteDirection = this.direction; this.rotation = this.velocity.X * 0.1f; int num51 = 5; int num52 = 5; ++this.frameCounter; if (this.frameCounter >= (double) (num51 * num52)) this.frameCounter = 0.0; this.frame.Y = (int) (this.frameCounter / (double) num51) * num1; break; case 63: case 64: case 103: case 242: case 256: if ((this.type == 63 || this.type == 64 || this.type == 103 || this.type == 242) && (double) this.ai[1] == 1.0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 6) this.frame.Y = num1 * 4; if (this.frame.Y >= num1 * 4) return; this.frame.Y = num1 * 4; return; } ++this.frameCounter; if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } this.frame.Y = num1 * 3; if (this.frameCounter >= 23.0) { this.frameCounter = 0.0; break; } break; case 65: this.spriteDirection = this.direction; ++this.frameCounter; if (this.wet && this.type == 65) { if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; } break; case 67: case 217: case 218: case 219: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 69: if ((double) this.ai[0] < 190.0) { ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 1) { this.frame.Y = 0; break; } break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * (Main.npcFrameCount[this.type] - 1); break; case 72: ++this.frameCounter; if (this.frameCounter >= 3.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 74: case 297: case 298: case 442: this.spriteDirection = this.direction; this.rotation = this.velocity.X * 0.1f; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frame.Y = num1 * 4; this.frameCounter = 0.0; break; } int num53 = Main.npcFrameCount[this.type] - 1; ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * num53) { this.frame.Y = 0; break; } break; case 75: this.spriteDirection = (double) this.velocity.X <= 0.0 ? -1 : 1; this.rotation = this.velocity.X * 0.1f; ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 83: case 84: case 179: if ((double) this.ai[0] == 2.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 85: case 341: case 629: if ((double) this.ai[0] == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; } else { int num54 = 3; if ((double) this.velocity.Y == 0.0) --this.frameCounter; else ++this.frameCounter; if (this.frameCounter < 0.0) this.frameCounter = 0.0; if (this.frameCounter > (double) (num54 * 4)) this.frameCounter = (double) (num54 * 4); if (this.frameCounter < (double) num54) this.frame.Y = num1; else if (this.frameCounter < (double) (num54 * 2)) this.frame.Y = num1 * 2; else if (this.frameCounter < (double) (num54 * 3)) this.frame.Y = num1 * 3; else if (this.frameCounter < (double) (num54 * 4)) this.frame.Y = num1 * 4; else if (this.frameCounter < (double) (num54 * 5)) this.frame.Y = num1 * 5; else if (this.frameCounter < (double) (num54 * 6)) this.frame.Y = num1 * 4; else if (this.frameCounter < (double) (num54 * 7)) { this.frame.Y = num1 * 3; } else { this.frame.Y = num1 * 2; if (this.frameCounter >= (double) (num54 * 8)) this.frameCounter = (double) num54; } } if ((double) this.ai[3] == 2.0 || this.IsABestiaryIconDummy && this.type == 85) { this.frame.Y += num1 * 6; break; } if ((double) this.ai[3] == 3.0) { this.frame.Y += num1 * 12; break; } break; case 86: if ((double) this.velocity.Y == 0.0 || this.wet) this.spriteDirection = (double) this.velocity.X >= -2.0 ? ((double) this.velocity.X <= 2.0 ? this.direction : 1) : -1; if ((double) this.velocity.Y != 0.0) { this.frame.Y = num1 * 15; this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } if ((double) Math.Abs(this.velocity.X) < 3.0) { this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= 9) this.frame.Y = num1; if (this.frame.Y / num1 <= 0) { this.frame.Y = num1; break; } break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 10.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= 15) this.frame.Y = num1 * 9; if (this.frame.Y / num1 <= 8) { this.frame.Y = num1 * 9; break; } break; } break; case 94: ++this.frameCounter; if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } this.frame.Y = num1; if (this.frameCounter >= 23.0) { this.frameCounter = 0.0; break; } break; case 101: ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1 * 2; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 2) { this.frame.Y = 0; break; } break; case 109: if ((double) this.velocity.Y == 0.0 && ((double) this.velocity.X <= 0.0 && this.direction < 0 || (double) this.velocity.X >= 0.0 && this.direction > 0)) this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 7.0) { this.frameCounter -= 7.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 110: case 214: case 215: case 216: case 293: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = num1 * (int) this.ai[2]; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 6) this.frame.Y = num1 * 6; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; this.frameCounter += (double) this.velocity.X; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 6; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 111: case 291: case 292: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = num1 * ((int) this.ai[2] - 1); this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 7) this.frame.Y = num1 * 7; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; this.frameCounter += (double) this.velocity.X * 1.29999995231628; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 7; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 6; break; case 113: case 114: if ((double) this.ai[2] == 0.0) { ++this.frameCounter; if (this.frameCounter >= 12.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } this.frame.Y = 0; this.frameCounter = -60.0; break; case 115: ++this.frameCounter; if (this.frameCounter < 3.0) this.frame.Y = 0; else if (this.frameCounter < 6.0) this.frame.Y = num1; else if (this.frameCounter < 12.0) this.frame.Y = num1 * 2; else if (this.frameCounter < 15.0) this.frame.Y = num1; if (this.frameCounter == 15.0) { this.frameCounter = 0.0; break; } break; case 116: if ((double) this.velocity.X > 0.0) { this.spriteDirection = 1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); } if ((double) this.velocity.X < 0.0) { this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 3.14f; } ++this.frameCounter; if (this.frameCounter >= 5.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 122: this.spriteDirection = this.direction; this.rotation = this.velocity.X * 0.05f; if ((double) this.ai[3] > 0.0) { int num55 = (int) ((double) this.ai[3] / 8.0); this.frameCounter = 0.0; this.frame.Y = (num55 + 3) * num1; break; } ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 3) { this.frame.Y = 0; break; } break; case (int) sbyte.MaxValue: if ((double) this.ai[1] == 0.0) { ++this.frameCounter; if (this.frameCounter >= 12.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= 2) { this.frame.Y = 0; break; } break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; case 129: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 2.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 130: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 133: if ((double) this.velocity.X > 0.0) { this.spriteDirection = 1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X); } if ((double) this.velocity.X < 0.0) { this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 3.14f; } ++this.frameCounter; this.frame.Y = this.frameCounter < 8.0 ? 0 : num1; if (this.frameCounter >= 16.0) { this.frame.Y = 0; this.frameCounter = 0.0; } if ((double) this.life < (double) this.lifeMax * 0.5) { this.frame.Y += num1 * 2; break; } break; case 135: this.frame.Y = (double) this.ai[2] != 0.0 ? num1 : 0; break; case 141: this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0) { this.frame.Y = num1 * 2; break; } ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1) { this.frame.Y = 0; break; } break; case 143: if ((double) this.velocity.Y > 0.0) ++this.frameCounter; else if ((double) this.velocity.Y < 0.0) --this.frameCounter; if (this.frameCounter < 6.0) this.frame.Y = num1; else if (this.frameCounter < 12.0) this.frame.Y = num1 * 2; else if (this.frameCounter < 18.0) this.frame.Y = num1 * 3; if (this.frameCounter < 0.0) this.frameCounter = 0.0; if (this.frameCounter > 17.0) { this.frameCounter = 17.0; break; } break; case 144: if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { ++this.localAI[3]; if ((double) this.localAI[3] < 6.0) this.frame.Y = 0; else if ((double) this.localAI[3] < 12.0) this.frame.Y = num1; if ((double) this.localAI[3] >= 11.0) { this.localAI[3] = 0.0f; break; } break; } if ((double) this.velocity.Y > 0.0) ++this.frameCounter; else if ((double) this.velocity.Y < 0.0) --this.frameCounter; if (this.frameCounter < 6.0) this.frame.Y = num1 * 2; else if (this.frameCounter < 12.0) this.frame.Y = num1 * 3; else if (this.frameCounter < 18.0) this.frame.Y = num1 * 4; if (this.frameCounter < 0.0) this.frameCounter = 0.0; if (this.frameCounter > 17.0) { this.frameCounter = 17.0; break; } break; case 145: if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { if ((double) this.ai[2] < 4.0) { this.frame.Y = 0; break; } if ((double) this.ai[2] < 8.0) { this.frame.Y = num1; break; } if ((double) this.ai[2] < 12.0) { this.frame.Y = num1 * 2; break; } if ((double) this.ai[2] < 16.0) { this.frame.Y = num1 * 3; break; } break; } if ((double) this.velocity.Y > 0.0) ++this.frameCounter; else if ((double) this.velocity.Y < 0.0) --this.frameCounter; if (this.frameCounter < 6.0) this.frame.Y = num1 * 4; else if (this.frameCounter < 12.0) this.frame.Y = num1 * 5; else if (this.frameCounter < 18.0) this.frame.Y = num1 * 6; if (this.frameCounter < 0.0) this.frameCounter = 0.0; if (this.frameCounter > 17.0) { this.frameCounter = 17.0; break; } break; case 148: case 149: case 168: case 470: int num56 = 0; if ((double) this.localAI[0] == 2.0) num56 = 3; if ((double) this.localAI[0] == 3.0) num56 = 6; if ((double) this.localAI[0] == 4.0) num56 = 9; int num57 = num56 * num1; if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = num57; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; if (this.frameCounter < 6.0) { this.frame.Y = num57; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1 + num57; break; } if (this.frameCounter < 15.0) { this.frame.Y = num1 * 2 + num57; break; } this.frameCounter = 0.0; this.frame.Y = num1 * 2 + num57; break; } if ((double) this.velocity.Y < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2 + num57; break; } if ((double) this.velocity.Y > 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2 + num57; break; } break; case 150: case 151: case 152: case 158: case 226: if (this.type == 151) { int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 6, this.velocity.X * 0.2f, this.velocity.Y * 0.2f, 100, Scale: 2f); Main.dust[index].noGravity = true; } if (this.type == 150 && Main.rand.Next(10) == 0) { int index = Dust.NewDust(new Vector2(this.position.X, this.position.Y), this.width, this.height, 67, this.velocity.X * 0.5f, this.velocity.Y * 0.5f, 90, Scale: 1.5f); Main.dust[index].noGravity = true; Main.dust[index].velocity *= 0.2f; Main.dust[index].noLight = true; } if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; this.rotation = this.velocity.X * 0.1f; ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; case 155: int num58 = this.frame.Y / num1; if (this.IsABestiaryIconDummy && num58 < 3) num58 = 3; if ((double) this.velocity.Y < 0.0) num58 = 10; else if ((double) this.velocity.Y > 0.0) num58 = 11; else if ((double) this.velocity.X == 0.0) { num58 = 0; this.frameCounter = 0.0; } else if ((this.direction > 0 && (double) this.velocity.X < 0.0 || this.direction < 0 && (double) this.velocity.X > 0.0) && (double) Math.Abs(this.velocity.X) < 4.0) { this.spriteDirection = this.direction; if (num58 > 2) { num58 = 0; this.frameCounter = 0.0; } if (num58 < 2) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; ++num58; } } else this.frameCounter = 0.0; } else { this.spriteDirection = (double) this.velocity.X < 0.0 ? -1 : 1; this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.400000005960464; if (num58 == 10 || num58 == 11) { num58 = 12; this.frameCounter = 0.0; } else if (this.frameCounter > 8.0) { this.frameCounter -= 8.0; ++num58; if (num58 > 9) num58 = 3; } } this.frame.Y = num58 * num1; break; case 156: this.spriteDirection = this.direction; this.rotation = this.velocity.X * 0.1f; ++this.frameCounter; if (this.frameCounter >= 20.0) this.frameCounter = 0.0; this.frame.Y = (int) this.frameCounter / 4 * num1; break; case 157: this.spriteDirection = this.direction; ++this.frameCounter; if (!this.wet) ++this.frameCounter; int num59 = 5; if (this.frameCounter < (double) num59) { this.frame.Y = 0; break; } if (this.frameCounter < (double) (num59 * 2)) { this.frame.Y = num1; break; } if (this.frameCounter < (double) (num59 * 3)) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < (double) (num59 * 4)) { this.frame.Y = num1; break; } if (this.frameCounter < (double) (num59 * 5)) { this.frame.Y = num1 * 3; break; } if (this.frameCounter < (double) (num59 * 6)) { this.frame.Y = num1 * 4; break; } if (this.frameCounter < (double) (num59 * 7)) { this.frame.Y = num1 * 5; break; } if (this.frameCounter < (double) (num59 * 8)) { this.frame.Y = num1 * 4; break; } this.frameCounter = 0.0; break; case 163: if ((double) this.velocity.Y != 0.0) { this.frameCounter = -12.0; this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 * 6 : num1 * 5; break; } this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.10000002384186; if (this.frameCounter < -6.0) { this.frame.Y = num1 * 6; break; } if (this.frameCounter < 0.0) { this.frame.Y = num1 * 7; break; } if (this.frameCounter < 6.0) { this.frame.Y = num1; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; case 164: case 239: case 530: if ((double) this.velocity.Y != 0.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.velocity.Y >= 0.0 ? 0 : num1 * 4; break; } this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.10000002384186; if (this.frameCounter < 6.0) { this.frame.Y = num1; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; case 165: case 237: case 238: case 240: case 531: float num60 = 0.5f; if (this.type == 531) num60 = 0.4f; this.frameCounter += ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y)) * (double) num60; if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; case 166: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frameCounter += 2.0; if (this.frameCounter > 7.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 5) { this.frame.Y = 0; break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 9.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 12) this.frame.Y = num1 * 7; if (this.frame.Y / num1 < 7) { this.frame.Y = num1 * 7; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 6; break; case 170: case 171: case 180: this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 14) { this.frame.Y = 0; break; } break; case 174: if (this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 4) { this.frame.Y = 0; break; } break; } this.frame.Y = (double) this.velocity.Y != 0.0 ? ((double) this.velocity.Y >= -1.5 ? ((double) this.velocity.Y <= 1.5 ? num1 * 2 : num1 * 3) : num1) : 0; break; case 176: ++this.frameCounter; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1) { this.frame.Y = 0; break; } break; case 177: if ((double) this.velocity.Y == 0.0) { ++this.frameCounter; if (this.frameCounter >= 10.0) { this.frameCounter = 30.0; this.frame.Y = 0; break; } this.frame.Y = num1; break; } if ((double) this.velocity.Y < 0.0) { this.frame.Y = num1 * 2; break; } this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; case 195: this.frame.Y = (double) this.ai[0] >= 3.0 ? ((double) this.ai[0] >= 6.0 ? ((double) this.ai[0] >= 9.0 ? ((double) this.ai[0] >= 12.0 ? ((double) this.ai[0] >= 15.0 ? num1 * 5 : num1 * 4) : num1 * 3) : num1 * 2) : num1) : 0; break; case 199: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if (this.frame.Y < num1 * 3) { ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if ((double) this.velocity.Y == 0.0) { this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter > 12.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 7) { this.frame.Y = num1 * 3; break; } break; } break; } break; case 205: this.frameCounter += 0.5; if (this.frameCounter < 2.0) { this.frame.Y = 0; break; } if (this.frameCounter < 4.0) { this.frame.Y = num1; break; } if (this.frameCounter < 6.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 8.0) { this.frame.Y = num1; break; } this.frameCounter = 0.0; break; case 206: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = num1 * (int) this.ai[2]; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 6) this.frame.Y = num1 * 6; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; this.frameCounter += (double) this.velocity.X; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 6; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 220: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 10.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 221: if ((double) this.localAI[2] == 1.0) { if ((double) this.localAI[0] == 1.0) { this.frame.Y = 0; this.localAI[0] = 0.0f; } ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = num1 * Main.npcFrameCount[this.type] - num1; break; } break; } ++this.frameCounter; if (this.frameCounter >= 13.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 222: ++this.frameCounter; if ((double) this.localAI[0] == 1.0) { if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y < num1 * 4) this.frame.Y = num1 * 4; if (this.frame.Y >= num1 * 12) { this.frame.Y = num1 * 4; break; } break; case 224: case 587: if ((double) this.velocity.X > 0.0) { this.spriteDirection = 1; this.rotation = this.velocity.Y * 0.2f; } if ((double) this.velocity.X < 0.0) { this.spriteDirection = -1; this.rotation = (float) (-(double) this.velocity.Y * 0.200000002980232); } ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; case 230: if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 10.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; if ((double) this.velocity.Y > 4.0) { this.rotation -= this.velocity.Y * 0.01f; break; } break; case 236: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; else this.frame.Y = 0; this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 || (double) this.velocity.Y != 0.0) { this.frame.Y = 0; break; } break; case 243: if (this.frameCounter < 0.0) { if ((double) this.velocity.Y == 0.0) { ++this.frameCounter; if (this.frameCounter < -12.0) { if (this.frame.Y > num1 * 9) { this.frame.Y = num1 * 11; break; } break; } if (this.frameCounter < -6.0) { if (this.frame.Y > num1 * 9) { this.frame.Y = num1 * 12; break; } break; } if (this.frameCounter < 0.0) { this.frameCounter = 0.0; if (this.frame.Y > num1 * 9) { this.frame.Y = num1 * 11; break; } break; } break; } this.frameCounter = -18.0; this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 * 13 : num1 * 14; break; } this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X * 1.1f); if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 9) this.frame.Y = 0; } if ((double) this.velocity.Y < -2.0 || (double) this.velocity.Y > 5.0) { this.frameCounter = -18.0; break; } break; case 244: ++this.frameCounter; if (num2 > 0) ++this.frameCounter; if (num2 == 4) ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 245: if ((double) this.ai[0] == 0.0) { this.frame.Y = (double) this.ai[1] >= -16.0 ? ((double) this.ai[1] >= -12.0 ? ((double) this.ai[1] >= -8.0 ? ((double) this.ai[1] >= -4.0 ? ((double) this.ai[1] >= 0.0 ? 0 : num1 * 4) : num1 * 3) : num1 * 2) : num1) : 0; break; } if ((double) this.ai[0] == 1.0) { this.frame.Y = 1; break; } break; case 246: if ((double) this.ai[0] == 0.0) { this.frame.Y = (double) this.localAI[0] != 1.0 ? 0 : num1; break; } if ((double) this.ai[0] == 1.0) { this.frame.Y = (double) this.localAI[0] != 1.0 ? 0 : num1; if ((double) this.localAI[1] == -1.0) this.frame.Y += num1 * 4; if ((double) this.localAI[1] == 1.0) { this.frame.Y += num1 * 2; break; } break; } break; case 249: this.frame.Y = (double) this.localAI[0] != 1.0 ? 0 : num1; if (++this.frameCounter >= 16.0) { this.frameCounter = 0.0; break; } break; case 250: case 264: case 268: ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 252: case 301: if (this.type == 301) { if ((double) this.velocity.Y == 0.0) { this.spriteDirection = -this.direction; } else { if ((double) this.velocity.X > 0.5) this.spriteDirection = -1; if ((double) this.velocity.X < -0.5) this.spriteDirection = 1; } } else { if ((double) this.velocity.X > 0.5) this.spriteDirection = 1; if ((double) this.velocity.X < -0.5) this.spriteDirection = -1; } this.rotation = this.velocity.X * 0.1f; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 4 || this.frame.Y == 0) { this.frame.Y = num1; break; } break; case 257: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter < 8.0) { this.frame.Y = 0; break; } if (this.frameCounter < 16.0) { this.frame.Y = num1; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 32.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; case 258: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { ++this.frameCounter; if (this.frameCounter > 1.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 5 || this.frame.Y < num1 * 3) { this.frame.Y = num1 * 3; break; } break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter < 8.0) { this.frame.Y = 0; break; } if (this.frameCounter < 16.0) { this.frame.Y = num1; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 2; break; } this.frameCounter = 0.0; break; case 262: ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.life > this.lifeMax / 2) { if (this.frame.Y > num1 * 3) { this.frame.Y = 0; break; } break; } if (this.frame.Y < num1 * 4) this.frame.Y = num1 * 4; if (this.frame.Y > num1 * 7) { this.frame.Y = num1 * 4; break; } break; case 263: if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { if (this.frame.Y > 0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y -= num1; break; } break; } break; } if (this.frame.Y < 2) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } break; case 266: ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if ((double) this.ai[0] >= 0.0) { if (this.frame.Y > num1 * 3) { this.frame.Y = 0; break; } break; } if (this.frame.Y < num1 * 4) this.frame.Y = num1 * 4; if (this.frame.Y > num1 * 7) { this.frame.Y = num1 * 4; break; } break; case 269: case 270: case 271: case 272: case 273: case 274: case 275: case 276: case 277: case 278: case 279: case 280: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { if (this.type == 140) { this.frame.Y = num1; this.frameCounter = 0.0; break; } this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 288: ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 289: ++this.frameCounter; if (this.frameCounter < 4.0) this.frame.Y = 0; else if (this.frameCounter < 8.0) { this.frame.Y = num1; } else { this.frame.Y = num1 * 2; this.frameCounter = 0.0; if (this.frameCounter > 12.0) this.frameCounter = 0.0; } if ((double) this.ai[3] == 1.0) { this.frame.Y += num1 * 3; break; } break; case 290: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 9 : num1 * 10) : num1 * 11; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 8) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 299: case 538: case 539: case 639: case 640: case 641: case 642: case 643: case 644: case 645: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 1) { this.frame.Y = num1; break; } break; } if ((double) this.velocity.Y < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; } if ((double) this.velocity.Y > 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; break; } break; case 300: case 447: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 1) { this.frame.Y = 0; break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; case 305: case 306: case 307: case 308: case 309: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; this.frame.Y = (double) this.velocity.Y >= -3.0 ? ((double) this.velocity.Y > 0.0 ? ((double) this.velocity.Y >= 2.0 ? num1 : num1 * 3) : 0) : num1 * 5; this.rotation = this.velocity.X * 0.1f; break; case 315: if ((double) this.velocity.Y == 0.0 || this.wet) this.spriteDirection = (double) this.velocity.X >= -1.0 ? ((double) this.velocity.X <= 1.0 ? this.direction : 1) : -1; if ((double) this.velocity.Y != 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 8.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 > 10) { this.frame.Y = num1; break; } break; } break; case 325: if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 4) { this.frame.Y = 0; break; } break; } ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y < num1 * 5) this.frame.Y = num1 * 5; if (this.frame.Y > num1 * 9) { this.frame.Y = num1 * 5; break; } break; case 327: if ((double) this.ai[3] == 0.0) { if (this.frame.Y > num1 * 5) ++this.frameCounter; else if (this.frame.Y > 0) --this.frameCounter; } else if ((double) this.ai[3] == 1.0) { if (this.frame.Y > num1 * 10) ++this.frameCounter; else if (this.frame.Y > num1 * 4) --this.frameCounter; else if (this.frame.Y < num1 * 4) ++this.frameCounter; } else if ((double) this.ai[3] == 2.0) { if (this.frame.Y < num1 * 2) --this.frameCounter; else if (this.frame.Y > num1 * 8) --this.frameCounter; else if (this.frame.Y < num1 * 8) ++this.frameCounter; } if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 11) this.frame.Y = 0; } if (this.frameCounter < 0.0) { this.frameCounter = 6.0; this.frame.Y -= num1; if (this.frame.Y < 0) { this.frame.Y = num1 * 11; break; } break; } break; case 329: if ((double) this.velocity.Y > 0.0) { this.frame.Y = num1 * 3; this.frameCounter = 0.0; break; } if ((double) this.velocity.Y < 0.0) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; break; } this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.400000005960464; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; if (this.frame.Y > num1 * 9) { this.frame.Y = num1 * 2; break; } break; } break; case 330: if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; this.rotation = this.velocity.X * 0.15f; ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 343: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 : 0; this.frameCounter = 0.0; break; case 344: if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 9) { this.frame.Y = 0; break; } break; } this.frameCounter += (double) Math.Max(1f, Math.Abs(this.velocity.X) * 0.75f); if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 9) { this.frame.Y = 0; break; } break; case 345: if ((double) this.ai[0] == 0.0) { this.frame.Y = (double) this.ai[3] < 0.0 ? ((double) this.velocity.X >= 0.0 ? num1 * 2 : num1) : 0; break; } if ((double) this.ai[0] == 1.0) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 4) this.frame.Y = num1 * 3; if (this.frame.Y < num1 * 3) { this.frame.Y = num1 * 3; break; } break; } if ((double) this.ai[0] == 2.0) { this.frame.Y = num1 * 5; break; } break; case 346: if ((double) this.ai[0] == 1.0) { this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter > 2.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 8) this.frame.Y = num1 * 6; if (this.frame.Y < num1 * 6) { this.frame.Y = num1 * 6; break; } break; } if ((double) this.velocity.X == 0.0) { ref int local = ref this.frame.Y; local = local; this.frameCounter = 0.0; break; } this.spriteDirection = this.direction; ++this.frameCounter; this.frameCounter += (double) Math.Abs(this.velocity.X) / 2.0; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 5) this.frame.Y = num1; if (this.frame.Y < num1) { this.frame.Y = num1; break; } break; case 347: ++this.frameCounter; if (this.frameCounter > 1.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 3) { this.frame.Y = 0; break; } break; case 348: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 7) { this.frame.Y = num1; break; } break; case 349: ++this.frameCounter; if (this.frameCounter > 3.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 7) { this.frame.Y = 0; break; } break; case 350: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = num1 * ((int) this.ai[2] - 1); this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 7) this.frame.Y = num1 * 7; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; this.frameCounter += (double) this.velocity.X * 1.29999995231628; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 7; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 5; break; case 351: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 : num1; this.frameCounter = 0.0; break; case 352: ++this.frameCounter; if (this.frameCounter > 3.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 5) { this.frame.Y = 0; break; } break; case 355: case 358: case 654: this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter < 4.0) { this.frame.Y = 0; } else { this.frame.Y = num1; if (this.frameCounter >= 7.0) this.frameCounter = 0.0; } if ((double) this.localAI[2] <= 0.0) { this.frame.Y += num1 * 2; break; } break; case 356: case 444: case 653: case 661: int num61 = 7; this.rotation = this.velocity.X * 0.3f; this.spriteDirection = this.direction; this.frameCounter = this.frameCounter + 1.0 + ((double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y)) / 2.0; if (this.frameCounter < (double) num61) this.frame.Y = 0; else if (this.frameCounter < (double) (num61 * 2)) this.frame.Y = num1; else if (this.frameCounter < (double) (num61 * 3)) { this.frame.Y = num1 * 2; } else { this.frame.Y = num1; if (this.frameCounter >= (double) (num61 * 4 - 1)) this.frameCounter = 0.0; } if (this.type != 444 && this.type != 653 && this.type != 661) { this.frame.Y += (int) ((double) (num1 * 3) * ((double) this.ai[2] - 1.0)); break; } break; case 357: case 448: case 484: case 606: this.localAI[0] = -2f; if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.X == 0.0) { this.frame.Y = num1; this.frameCounter = 0.0; } else { ++this.frameCounter; if (this.frameCounter > 12.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1) this.frame.Y = 0; } } } else { this.rotation += (float) this.direction * 0.1f; this.frame.Y = num1; } int i1 = (int) this.Center.X / 16; int j1 = (int) this.position.Y / 16; Tile tileSafely1 = Framing.GetTileSafely(i1, j1); if (tileSafely1 != null) { if (tileSafely1.slope() == (byte) 0) { int j2 = j1 + 1; tileSafely1 = Framing.GetTileSafely(i1, j2); } if (tileSafely1.slope() == (byte) 1) { this.rotation = 0.785f; this.localAI[0] = 0.0f; break; } if (tileSafely1.slope() == (byte) 2) { this.rotation = -0.785f; this.localAI[0] = 0.0f; break; } break; } break; case 359: case 360: case 655: if ((double) this.velocity.Y > 1.0) { ++this.frameCounter; int num62 = 6; if (this.frameCounter < (double) num62) { this.frame.Y = num1 * 4; break; } this.frame.Y = num1 * 5; if (this.frameCounter >= (double) (num62 * 2 - 1)) { this.frameCounter = 0.0; break; } break; } ++this.frameCounter; int num63 = 10; if (this.frameCounter < (double) num63) { this.frame.Y = 0; break; } if (this.frameCounter < (double) (num63 * 2)) { this.frame.Y = num1; break; } if (this.frameCounter < (double) (num63 * 3)) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < (double) (num63 * 4)) { this.frame.Y = num1 * 3; break; } if (this.frameCounter < (double) (num63 * 5)) { this.frame.Y = num1 * 2; break; } this.frame.Y = num1; if (this.frameCounter >= (double) (num63 * 6 - 1)) { this.frameCounter = 0.0; break; } break; case 361: case 445: this.spriteDirection = this.direction; if (this.wet) { this.frameCounter = 0.0; this.frame.Y = (double) this.velocity.X > 0.25 || (double) this.velocity.X < -0.25 ? num1 * 10 : ((double) this.velocity.X > 0.150000005960464 || (double) this.velocity.X < -0.150000005960464 ? num1 * 11 : num1 * 12); break; } if ((double) this.velocity.Y == 0.0) { if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 5) { this.frame.Y = 0; break; } break; } ++this.frameCounter; int num64 = 6; if (this.frameCounter < (double) num64) { this.frame.Y = 0; break; } if (this.frameCounter < (double) (num64 * 2)) { this.frame.Y = num1 * 6; break; } if (this.frameCounter < (double) (num64 * 3)) { this.frame.Y = num1 * 8; break; } this.frame.Y = num1 * 9; if (this.frameCounter >= (double) (num64 * 4 - 1)) { this.frameCounter = 0.0; break; } break; } this.frame.Y = (double) this.velocity.Y <= 0.0 ? num1 * 8 : num1 * 9; break; case 362: case 364: case 608: this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 10) this.frame.Y = num1 * 3; if (this.frame.Y < num1 * 3) { this.frame.Y = num1 * 3; break; } break; case 363: case 365: case 609: this.spriteDirection = this.direction; if (this.wet) { ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 2) this.frame.Y = num1; if (this.frame.Y < num1) this.frame.Y = num1; this.rotation = 0.0f; break; } if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frame.Y = num1; this.frameCounter = 0.0; this.rotation = 0.0f; break; } this.rotation = this.velocity.X * 0.1f; ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) this.frame.Y = num1 * 11; if (this.frame.Y < num1 * 11) { this.frame.Y = num1 * 11; break; } break; case 366: case 367: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 370: if ((double) this.ai[0] == 0.0 || (double) this.ai[0] == 5.0) { int num65 = 5; if ((double) this.ai[0] == 5.0) num65 = 4; ++this.frameCounter; if (this.frameCounter > (double) num65) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y >= num1 * 6) this.frame.Y = 0; } if ((double) this.ai[0] == 1.0 || (double) this.ai[0] == 6.0) this.frame.Y = (double) this.ai[2] >= 10.0 ? num1 * 7 : num1 * 6; if ((double) this.ai[0] == 2.0 || (double) this.ai[0] == 7.0) this.frame.Y = (double) this.ai[2] >= 10.0 ? num1 * 7 : num1 * 6; if ((double) this.ai[0] == 3.0 || (double) this.ai[0] == 8.0 || (double) this.ai[0] == -1.0) { int num66 = 90; if ((double) this.ai[2] < (double) (num66 - 30) || (double) this.ai[2] > (double) (num66 - 10)) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y >= num1 * 6) this.frame.Y = 0; } else { this.frame.Y = num1 * 6; if ((double) this.ai[2] > (double) (num66 - 20) && (double) this.ai[2] < (double) (num66 - 15)) this.frame.Y = num1 * 7; } } if ((double) this.ai[0] == 4.0 || (double) this.ai[0] == 9.0) { int num67 = 180; if ((double) this.ai[2] < (double) (num67 - 60) || (double) this.ai[2] > (double) (num67 - 20)) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y >= num1 * 6) { this.frame.Y = 0; break; } break; } this.frame.Y = num1 * 6; if ((double) this.ai[2] > (double) (num67 - 50) && (double) this.ai[2] < (double) (num67 - 25)) { this.frame.Y = num1 * 7; break; } break; } break; case 371: case 372: case 373: this.frame.Y = num1; break; case 374: this.localAI[0] = -2f; if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 4) { this.frame.Y = num1; break; } break; } break; } this.rotation += (float) this.direction * 0.1f; ++this.frameCounter; if (this.frameCounter > 3.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 4) { this.frame.Y = num1; break; } break; } break; case 375: ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } break; case 376: ++this.frameCounter; if (this.frameCounter > 30.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; case 377: case 446: if (this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1) this.frame.Y = 0; } else this.frame.Y = (double) this.velocity.Y == 0.0 ? 0 : num1; this.spriteDirection = this.direction; break; case 378: if ((double) this.velocity.Y != 0.0 && this.frame.Y < num1 * 2) this.frame.Y += num1 * 2; if ((double) this.velocity.Y == 0.0 && this.frame.Y > num1 * 2) this.frame.Y -= num1 * 2; ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if ((double) this.velocity.Y != 0.0 && this.frame.Y >= num1 * 4) this.frame.Y = num1 * 2; if ((double) this.velocity.Y == 0.0 && this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; case 379: case 380: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = num1 * ((int) this.ai[2] - 1 + 2); this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if (this.frame.Y < num1 * 7) this.frame.Y = num1 * 7; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 7; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 381: case 382: case 383: case 385: case 389: if ((double) this.velocity.Y == 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; if (this.type == 389 || this.type == 385) this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.2; else this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) this.frame.Y = num1 * 2; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 386: if ((double) this.ai[2] > 0.0) { int num68 = (int) this.ai[2] / 12; this.frame.Y = num1 * (9 + num68 % 2); break; } if ((double) this.velocity.Y == 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= 9) this.frame.Y = num1 * 2; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 387: if ((double) this.ai[0] > 0.0) { ++this.frameCounter; if ((double) this.ai[0] >= 20.0) ++this.frameCounter; if ((double) this.ai[0] >= 40.0) ++this.frameCounter; if (this.frameCounter >= 10.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; } ++this.frameCounter; if (this.frameCounter >= 15.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; case 388: ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; case 390: if (this.IsABestiaryIconDummy) { this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; ++this.localAI[3]; if ((double) this.localAI[3] >= (double) Main.npcFrameCount[391]) this.localAI[3] = 0.0f; } } if (this.direction != 0) this.spriteDirection = -this.direction; this.frame.Y = (double) this.ai[2] <= 0.0 ? num1 * 2 : num1 * ((int) this.ai[2] - 1); break; case 391: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = -1; if (this.direction == -1) this.spriteDirection = 1; if (this.frame.Y < num1) this.frame.Y = num1; this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) this.frame.Y = num1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 392: float num69 = 20f; float num70 = 240f; bool flag1 = (double) this.ai[3] >= (double) num69 && (double) this.ai[3] < (double) num69 + (double) num70; ++this.frameCounter; if (flag1) ++this.frameCounter; if (this.frameCounter >= 12.0) this.frameCounter = 0.0; int num71 = (int) this.frameCounter % 12 / 3; this.frame.Y = num1 * num71; break; case 393: Vector2 rotationVector2 = this.ai[2].ToRotationVector2(); int num72 = (double) rotationVector2.Y <= (double) Math.Abs(rotationVector2.X) * 2.0 ? ((double) rotationVector2.Y <= (double) Math.Abs(rotationVector2.X) * 1.5 ? ((double) Math.Abs(rotationVector2.X) <= (double) rotationVector2.Y * 2.0 ? ((double) Math.Abs(rotationVector2.X) <= (double) rotationVector2.Y * 1.5 ? ((double) rotationVector2.X > 0.0 ? 6 : 2) : ((double) rotationVector2.X > 0.0 ? 7 : 1)) : ((double) rotationVector2.X > 0.0 ? 8 : 0)) : ((double) rotationVector2.X > 0.0 ? 5 : 3)) : 4; this.frame.Y = num1 * num72; float num73 = 280f; float num74 = 140f; if ((double) this.ai[3] >= (double) num73 && (double) this.ai[3] < (double) num73 + (double) num74 && (int) this.ai[3] % 6 <= 2) { this.frame.Y += num1 * 9; break; } break; case 394: int num75 = (int) this.ai[3] - 300; if (num75 >= 120) { int num76 = num75 - 120; this.frame.Y = num76 < 160 ? (num76 < 20 ? num1 * (4 + num76 / 5) : num1 * (num76 / 4 % 4)) : num1 * (7 - (num76 - 160) / 5); break; } this.frame.Y = num1 * 4; break; case 395: float num77 = 20f; float num78 = 240f; bool flag2 = (double) this.ai[3] >= (double) num77 && (double) this.ai[3] < (double) num77 + (double) num78; ++this.frameCounter; if (this.frameCounter >= 66.0) this.frameCounter = 0.0; if (flag2) { ++this.frameCounter; if (this.frameCounter >= 54.0 || this.frameCounter < 36.0) this.frameCounter = 36.0; } int num79 = (int) this.frameCounter % 66 / 6; this.frame.Y = num1 * num79; break; case 397: int num80 = (int) this.frameCounter / 7; this.frame.Y = num1 * num80; break; case 398: if ((double) this.ai[0] <= 0.0) { this.frame.Y = 0; break; } if (this.frame.Y == 0) { Gore.NewGore(this.position + new Vector2(-10f, -15f), this.velocity, 619); Gore.NewGore(this.position + new Vector2(10f, -15f), this.velocity, 620); Gore.NewGore(this.position + new Vector2(-10f, 15f), this.velocity, 621); Gore.NewGore(this.position + new Vector2(10f, 15f), this.velocity, 622); for (int index = 0; index < 50; ++index) { this.frame.Y = num1; Dust.NewDust(this.position, this.width, this.height, 209); } } ++this.frameCounter; if (this.frameCounter >= 30.0) this.frameCounter = 6.0; int num81 = (int) this.frameCounter % 30 / 6; this.frame.Y = num1 * num81; break; case 399: this.frameCounter = (this.frameCounter + 0.25) % 4.0 + ((double) this.ai[0] == 0.0 ? 0.0 : 4.0); this.frame.Y = num1 * (int) this.frameCounter; break; case 400: ++this.frameCounter; if ((double) this.ai[0] == 0.0 || (double) this.ai[0] == 3.0) ++this.frameCounter; if (this.frameCounter >= 16.0) this.frameCounter = 0.0; int num82 = (int) this.frameCounter % 16 / 4; this.frame.Y = num1 * num82; break; case 405: case 406: if (++this.frameCounter >= 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 407: if (++this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 409: if ((double) this.velocity.Y == 0.0 && (double) this.ai[1] <= 30.0 && (double) this.ai[1] > 0.0) { this.frame.Y = num1 * (Main.npcFrameCount[this.type] - 1); this.frameCounter = 0.0; break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if (++this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 2) { this.frame.Y = 0; break; } break; } break; case 410: this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 10.0) { this.frameCounter -= 10.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 411: if ((double) this.ai[1] >= 90.0 && (double) this.ai[1] < 180.0) { this.spriteDirection = -this.direction; this.frame.Y = num1 * (Main.npcFrameCount[this.type] - 1); this.frameCounter = 0.0; break; } if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = -this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 1) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = num1; this.frameCounter = 0.0; break; case 415: if ((double) this.ai[2] < 0.0) { if (this.frame.Y / num1 != 8 && this.frame.Y / num1 != 9 && this.frame.Y / num1 != 0) this.frameCounter = 0.0; ++this.frameCounter; int num83 = 0; int num84 = 18; int num85 = 4; if (this.frameCounter > (double) (num84 - num85 * 2)) num83 = 8 + (int) this.frameCounter / 4 % 2; if (this.frameCounter > (double) (num84 + num85 * 6)) { num83 = 0; this.frameCounter = 0.0; } this.frame.Y = num1 * num83; break; } if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 2) this.frame.Y = num1 * 2; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 416: if (this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y < num1 * 2 || this.frame.Y > num1 * 7) { this.frame.Y = num1 * 2; break; } break; } if (Main.netMode != 2 && !Main.dedServ) { int index = (int) this.ai[0]; if (Main.npc[index].active && Main.npc[index].type == 415 && TextureAssets.Npc[415].IsLoaded) { this.frame.Y = Main.npc[index].frame.Y / (TextureAssets.Npc[415].Height() / Main.npcFrameCount[415]) * num1; break; } break; } break; case 417: if ((double) this.ai[0] == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; else if ((double) this.velocity.Y < 0.0) this.frameCounter = 0.0; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.10000002384186; this.frame.Y = (int) (this.frameCounter / 6.0) * num1; if (this.frameCounter >= 48.0) { this.frameCounter = 0.0; break; } break; } if ((double) this.ai[0] == 1.0) { this.frameCounter = 0.0; this.frame.Y = num1 * (9 + (int) ((double) this.ai[1] / 6.0)); break; } if ((double) this.ai[0] == 5.0) { this.frameCounter = 0.0; this.frame.Y = num1 * (13 - (int) ((double) this.ai[1] / 6.0)); break; } this.frameCounter = 0.0; this.frame.Y = num1 * 14; break; case 418: if ((double) this.ai[0] == 0.0 || (double) this.ai[0] == 1.0 || (double) this.ai[0] == -1.0) { ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 4) { this.frame.Y = 0; break; } break; } if ((double) this.ai[0] == 2.0) { this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 7 : num1 * 6) : num1 * 5; break; } if ((double) this.ai[0] == -2.0) { ++this.frameCounter; if (this.frameCounter > 12.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 7) { this.frame.Y = num1 * 5; break; } break; } break; case 419: if ((double) this.ai[2] < 0.0) { int num86 = 1; if (this.direction != 0) this.spriteDirection = this.direction; if (this.frame.Y / num1 >= 9) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; } if (this.frame.Y / num1 < 2) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; } ++this.frameCounter; if (this.frameCounter >= (double) (num86 * 4 + 6)) this.frameCounter = 8.0; this.frame.Y = this.frameCounter >= 6.0 ? num1 * (int) (4.0 + (this.frameCounter - 6.0) / (double) num86) : num1 * (int) (2.0 + this.frameCounter / 3.0); break; } if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) this.frame.Y = num1 * 9; if (this.frame.Y / num1 < 9) { this.frame.Y = num1 * 9; break; } break; } this.frame.Y = num1; this.frameCounter = 0.0; break; case 420: if (++this.frameCounter >= 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 421: if ((double) this.ai[0] == 5.0) ++this.frameCounter; if (++this.frameCounter >= 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 423: if ((double) this.ai[2] == 1.0) { int num87 = 2; if ((double) this.ai[1] >= 30.0 && (double) this.ai[1] < 45.0) num87 = 3; this.frame.Y = num87 * num1; break; } if ((double) this.velocity.Y != 0.0) { this.frame.Y = num1; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if ((double) this.velocity.X != 0.0) this.spriteDirection = Math.Sign(-this.velocity.X); if (this.frame.Y / num1 < 4) this.frame.Y = num1 * 4; this.frameCounter += 1.0 + (double) Math.Abs(this.velocity.X) / 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 4; break; } break; case 424: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = -this.direction; if ((double) this.ai[2] > 0.0) { this.frame.Y = num1 * ((double) this.ai[1] > 90.0 ? Main.npcFrameCount[this.type] - 2 : Main.npcFrameCount[this.type] - 1); this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; this.frameCounter += (double) this.velocity.X * 1.29999995231628; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 2) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 425: if (this.direction != 0) this.spriteDirection = -this.direction; if ((double) this.ai[2] == 1.0) { ++this.frameCounter; if (this.frameCounter >= 3.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 12 || this.frame.Y < num1 * 10) { this.frame.Y = num1 * 10; break; } break; } if ((double) this.velocity.Y != 0.0) { this.frameCounter = 0.0; this.frame.Y = num1; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 9 || this.frame.Y < num1 * 2) { this.frame.Y = num1 * 2; break; } break; case 426: if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.ai[1] >= 45.0) { if ((double) this.velocity.Y == 0.0) { this.frame.Y = num1 * 8; break; } ++this.frameCounter; if (this.frameCounter >= 2.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 15 || this.frame.Y < num1 * 12) { this.frame.Y = num1 * 12; break; } break; } if ((double) this.velocity.Y != 0.0) { ++this.frameCounter; if (this.frameCounter >= 2.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 12 || this.frame.Y < num1 * 9) { this.frame.Y = num1 * 9; break; } break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 10.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 7 || this.frame.Y < num1) { this.frame.Y = num1; break; } break; case 427: if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0) { ++this.frameCounter; if (this.frameCounter >= 2.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 9 || this.frame.Y < num1 * 6) { this.frame.Y = num1 * 6; break; } break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 5 || this.frame.Y < num1) { this.frame.Y = num1; break; } break; case 428: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; if (++this.frameCounter > 10.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 1) { this.frame.Y = 0; break; } break; } if (this.frame.Y / num1 != 4) { if (this.frameCounter > 0.0) this.frameCounter = 0.0; if (--this.frameCounter < -10.0 || (double) this.velocity.Y > 0.600000023841858) { this.frame.Y = num1 * 4; this.frameCounter = 0.0; break; } break; } break; case 429: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = num1; this.frameCounter = 0.0; break; case 430: case 431: case 432: case 433: case 434: case 435: case 436: case 591: if ((double) this.ai[2] > 0.0) { this.frame.Y = (double) this.ai[2] >= 5.0 ? ((double) this.ai[2] >= 10.0 ? ((double) this.ai[2] >= 15.0 ? num1 * 6 : num1 * 5) : num1 * 4) : num1 * 3; break; } if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter < 8.0) { this.frame.Y = 0; break; } if (this.frameCounter < 16.0) { this.frame.Y = num1; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 32.0) { this.frame.Y = num1; break; } this.frameCounter = 0.0; break; case 437: ++this.frameCounter; if (this.frameCounter >= 20.0) this.frameCounter = 0.0; int num88 = (int) this.frameCounter % 20 / 5; this.frame.Y = num1 * num88; break; case 438: ++this.frameCounter; if ((double) this.ai[1] == 1.0) ++this.frameCounter; if (this.frameCounter >= 49.0) this.frameCounter = 0.0; int num89 = (int) this.frameCounter % 49 / 7; if (num89 >= 4) num89 = 6 - num89; this.frame.Y = num1 * num89; break; case 439: case 440: int num90 = (int) this.localAI[2]; if (this.IsABestiaryIconDummy) { if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y < num1 * 4 || this.frame.Y > num1 * 6) this.frame.Y = num1 * 4; } else { switch (num90) { case 0: if (this.frameCounter >= 15.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } if (this.frame.Y != 0) { this.frame.Y = ((int) this.frameCounter / 5 + 4) * num1; break; } break; case 1: if (this.frameCounter >= 15.0) { this.frameCounter = 0.0; this.frame.Y = num1; break; } if (this.frame.Y != num1) { this.frame.Y = ((int) this.frameCounter / 5 + 10) * num1; break; } break; case 2: if (this.frameCounter >= 15.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 2; break; } if (this.frame.Y != num1 * 2) { this.frame.Y = ((int) this.frameCounter / 5 + 7) * num1; break; } break; case 10: if (this.frameCounter >= 15.0) this.frameCounter = 0.0; this.frame.Y = ((int) this.frameCounter / 5 + 4) * num1; break; case 11: if (this.frameCounter >= 15.0) this.frameCounter = 0.0; this.frame.Y = ((int) this.frameCounter / 5 + 10) * num1; break; case 12: if (this.frameCounter >= 15.0) this.frameCounter = 0.0; this.frame.Y = ((int) this.frameCounter / 5 + 7) * num1; break; case 13: if (this.frameCounter >= 15.0) this.frameCounter = 0.0; this.frame.Y = ((int) this.frameCounter / 5 + 13) * num1; break; } } ++this.frameCounter; break; case 449: case 450: case 451: case 452: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; int num91 = Main.npcFrameCount[this.type] - 5; int num92 = 7; int num93 = (double) this.ai[1] < 50.0 ? ((double) this.ai[1] < (double) (50 - num92) ? ((double) this.ai[1] < (double) (50 - num92 * 2) ? ((double) this.ai[1] < (double) (50 - num92 * 3) ? 0 : 4) : 3) : 2) : 1; this.frame.Y = num1 * (num91 + num93); this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= 15) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 454: int num94 = (int) (this.frameCounter / 2.0); this.frame.Y = num1 * num94; break; case 461: if (this.wet) { if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; if (this.spriteDirection != this.direction) { this.rotation *= -1f; this.spriteDirection = this.direction; } float num95 = (float) Math.Atan2((double) this.velocity.Y * (double) this.direction, (double) this.velocity.X * (double) this.direction); if ((double) Math.Abs(this.rotation - num95) >= 3.14) { if ((double) num95 < (double) this.rotation) this.rotation -= 6.28f; else this.rotation += 6.28f; } this.rotation = (float) (((double) this.rotation * 4.0 + (double) num95) / 5.0); this.frameCounter += (double) Math.Abs(this.velocity.Length()); ++this.frameCounter; if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 20) { this.frame.Y = num1 * 16; break; } if (this.frame.Y / num1 < 16) { this.frame.Y = num1 * 19; break; } break; } if ((double) this.rotation > 3.14) this.rotation -= 6.28f; if ((double) this.rotation > -0.01 && (double) this.rotation < 0.01) this.rotation = 0.0f; else this.rotation *= 0.9f; if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 15) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 466: if (!this.IsABestiaryIconDummy && (double) this.ai[2] <= 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; this.frame.Y = (double) this.ai[2] != 0.0 ? ((double) this.ai[2] >= -8.0 ? num1 * 2 : num1) : 0; break; } if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; break; } if (this.frame.Y / num1 < 4) this.frame.Y = num1 * 4; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 7.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 17) this.frame.Y = num1 * 4; if (this.frame.Y / num1 < 4) { this.frame.Y = num1 * 4; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 3; break; case 467: if ((double) this.ai[0] == 1.0 || this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; if (this.frame.Y < num1 * 6) { this.frame.Y += num1; this.frameCounter = 0.0; break; } if (this.IsABestiaryIconDummy) { this.frame.Y = 0; break; } break; } break; } ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; if (this.frame.Y > num1 * 3) this.frame.Y = num1 * 3; if (this.frame.Y > 0) { this.frame.Y -= num1; this.frameCounter = 0.0; break; } break; } break; case 468: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; int num96 = 0; if ((double) this.ai[1] < 22.0) num96 = -15; else if ((double) this.ai[1] < 28.0) num96 = 3; else if ((double) this.ai[1] < 34.0) num96 = 2; else if ((double) this.ai[1] < 40.0) num96 = 1; this.frame.Y = num1 * (15 + num96); this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= 15) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 469: if ((double) this.ai[2] == 1.0) { this.rotation = (float) Math.Atan2((double) this.velocity.Y, (double) this.velocity.X) + 1.57f; if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.Length()); if (this.frameCounter > 11.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 5) this.frame.Y = num1 * 2; if (this.frame.Y / num1 < 2) { this.frame.Y = num1 * 2; break; } break; } this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 9.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 11) this.frame.Y = num1 * 6; if (this.frame.Y / num1 < 6) { this.frame.Y = num1 * 6; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 471: bool flag3 = false; if ((double) this.ai[3] < 0.0) flag3 = true; if (flag3) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; this.frameCounter += (double) Math.Abs(this.velocity.Length()) * 0.5; ++this.frameCounter; if (this.frameCounter < 6.0) { this.frame.Y = num1 * 17; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1 * 18; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 19; break; } if (this.frameCounter < 23.0) { this.frame.Y = num1 * 18; break; } this.frame.Y = num1 * 18; this.frameCounter = 0.0; break; } if ((double) this.ai[3] == 1.0) { this.frame.Y = num1 * 16; this.frameCounter = 0.0; break; } if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 7.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 15) this.frame.Y = num1 * 2; if (this.frame.Y / num1 < 2) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 472: if ((double) this.velocity.X < 0.0) this.direction = -1; else this.direction = 1; if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; this.rotation = (float) Math.Atan2((double) this.velocity.Y * (double) this.direction, (double) this.velocity.X * (double) this.direction); ++this.frameCounter; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= 6) { this.frame.Y = 0; break; } break; case 473: case 474: case 475: case 476: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.ai[0] == 0.0 || (double) this.ai[0] == 7.0) { this.rotation = 0.0f; this.frameCounter = 0.0; this.frame.Y = 0; break; } if ((double) this.ai[0] == 1.0) { this.rotation = 0.0f; this.frameCounter = 0.0; int num97 = 6; this.frame.Y = (double) this.ai[1] >= (double) num97 ? ((double) this.ai[1] >= (double) (num97 * 2) ? ((double) this.ai[1] >= (double) (num97 * 3) ? ((double) this.ai[1] >= (double) (num97 * 4) ? ((double) this.ai[1] >= (double) (num97 * 5) ? num1 * 6 : num1 * 5) : num1 * 4) : num1 * 3) : num1 * 2) : num1; break; } if ((double) this.ai[0] == 2.0 || (double) this.ai[0] == 6.0) { this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) { int num98 = 6; ++this.frameCounter; if (this.frame.Y < num1 * 7) this.frame.Y = num1 * 12; if (this.frame.Y < num1 * 10) { if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y == num1 * 10) { this.frameCounter = (double) (num98 * 2); break; } break; } break; } if (this.frameCounter < (double) num98) { this.frame.Y = num1 * 12; break; } if (this.frameCounter < (double) (num98 * 2)) { this.frame.Y = num1 * 11; break; } if (this.frameCounter < (double) (num98 * 3)) { this.frame.Y = num1 * 10; break; } this.frame.Y = num1 * 11; if (this.frameCounter >= (double) (num98 * 4 - 1)) { this.frameCounter = 0.0; break; } break; } this.frame.Y = num1 * 13; this.frameCounter = 0.0; break; } if ((double) this.ai[0] == 3.0) { this.rotation = 0.0f; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; if (this.frame.Y > num1 * 7) { this.frame.Y -= num1; break; } break; } break; } if ((double) this.ai[0] == 4.0 || (double) this.ai[0] == 5.0) { if ((double) this.ai[0] == 4.0 && (double) this.ai[2] == 1.0) this.rotation = 0.0f; this.frame.Y = num1 * 13; this.frameCounter = 0.0; break; } if ((double) this.ai[0] == 4.09999990463257) { this.rotation = 0.0f; if (this.frame.Y > num1 * 6) this.frameCounter = 0.0; ++this.frameCounter; int num99 = 4; if (this.frameCounter < (double) num99) { this.frame.Y = num1 * 6; break; } if (this.frameCounter < (double) (num99 * 2)) { this.frame.Y = num1 * 5; break; } if (this.frameCounter < (double) (num99 * 3)) { this.frame.Y = num1 * 4; break; } if (this.frameCounter < (double) (num99 * 4)) { this.frame.Y = num1 * 3; break; } if (this.frameCounter < (double) (num99 * 5)) { this.frame.Y = num1 * 4; break; } this.frame.Y = num1 * 5; if (this.frameCounter >= (double) (num99 * 6 - 1)) { this.frameCounter = 0.0; break; } break; } break; case 477: this.frameCounter += (double) this.velocity.Length() / 4.0; ++this.frameCounter; if (this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y / num1 > 5) { this.frame.Y = 0; break; } break; case 479: ++this.frameCounter; int num100 = 4; if (this.frameCounter < (double) num100) { this.frame.Y = 0; break; } if (this.frameCounter < (double) (num100 * 2)) { this.frame.Y = num1; break; } if (this.frameCounter < (double) (num100 * 3)) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < (double) (num100 * 4 - 1)) { this.frame.Y = num1; break; } this.frameCounter = 0.0; break; case 480: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] < 0.0) { ++this.frameCounter; if (this.frameCounter > 3.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= Main.npcFrameCount[this.type] * num1) { this.frame.Y = num1 * 21; break; } if (this.frame.Y < num1 * 21) { this.frame.Y = num1 * 21; break; } break; } if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 7) { this.frame.Y = 0; break; } break; } this.frameCounter += 1.0 + (double) Math.Abs(this.velocity.X); if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 4) { this.frame.Y = num1 * 10; break; } if (this.frame.Y / num1 < 10) { this.frame.Y = num1 * 10; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; case 481: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; int num101 = 0; if ((double) this.ai[1] < 22.0) num101 = -14; else if ((double) this.ai[1] < 28.0) num101 = 3; else if ((double) this.ai[1] < 34.0) num101 = 2; else if ((double) this.ai[1] < 40.0) num101 = 1; this.frame.Y = num1 * (15 + num101); this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = num1; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= 15) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 482: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] < 0.0) { ++this.frameCounter; if (this.frameCounter > 3.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= Main.npcFrameCount[this.type] * num1) { this.frame.Y = num1 * 11; break; } if (this.frame.Y < num1 * 11) { this.frame.Y = num1 * 11; break; } break; } if ((double) this.velocity.X == 0.0) { ++this.frameCounter; this.frame.Y = 0; break; } this.frameCounter += 0.200000002980232 + (double) Math.Abs(this.velocity.X); if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 10) { this.frame.Y = num1 * 2; break; } if (this.frame.Y / num1 < 2) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 483: if ((double) this.ai[0] == -1.0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 21) this.frame.Y = num1 * 21; else if (this.frame.Y < num1 * 13) this.frame.Y = num1 * 13; this.rotation += this.velocity.X * 0.2f; break; } ++this.frameCounter; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 11) this.frame.Y = 0; this.rotation = this.velocity.X * 0.1f; break; case 485: case 486: case 487: this.spriteDirection = this.direction; this.localAI[0] = -2f; if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.X == 0.0) { this.frame.Y = num1; this.frameCounter = 0.0; } else { this.frameCounter += (double) Math.Abs(this.velocity.X * 5f); if (this.frameCounter > 10.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 3) this.frame.Y = 0; } } } else { this.rotation += (float) this.direction * 0.1f; this.frame.Y = num1; } int i2 = (int) this.Center.X / 16; int j3 = (int) this.position.Y / 16; Tile tileSafely2 = Framing.GetTileSafely(i2, j3); if (tileSafely2 != null) { if (tileSafely2.slope() == (byte) 0) { int j4 = j3 + 1; tileSafely2 = Framing.GetTileSafely(i2, j4); } if (tileSafely2.slope() == (byte) 1) { this.rotation = 0.785f; this.localAI[0] = 0.0f; break; } if (tileSafely2.slope() == (byte) 2) { this.rotation = -0.785f; this.localAI[0] = 0.0f; break; } break; } break; case 488: int num102 = (int) this.localAI[1]; if (Framing.GetTileSafely((int) this.ai[0], (int) this.ai[1]).frameX >= (short) 36) num102 *= -1; if ((double) this.localAI[0] > 24.0) this.localAI[0] = 24f; if ((double) this.localAI[0] > 0.0) --this.localAI[0]; if ((double) this.localAI[0] < 0.0) this.localAI[0] = 0.0f; int num103 = num102 == -1 ? 4 : 6; int num104 = (int) this.localAI[0] / num103; if ((double) this.localAI[0] % (double) num103 != 0.0) ++num104; if (num104 != 0 && num102 == 1) num104 += 5; this.frame.Y = num104 * num1; break; case 490: this.rotation = this.velocity.X * 0.15f; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 492: this.frame.Y = num1 * (int) this.ai[2]; break; case 494: case 495: if ((double) this.ai[2] > 0.0) { if ((double) this.ai[2] < 7.0) { this.frame.Y = num1 * 5; break; } if ((double) this.ai[2] < 14.0) { this.frame.Y = num1 * 6; break; } if ((double) this.ai[2] < 20.0) { this.frame.Y = num1 * 7; break; } break; } if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; } if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.velocity.Y >= 0.0 ? num1 * 3 : num1 * 2; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter < 8.0) { this.frame.Y = 0; break; } if (this.frameCounter < 16.0) { this.frame.Y = num1; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 32.0) { this.frame.Y = num1 * 3; break; } if (this.frameCounter < 39.0) { this.frame.Y = num1 * 4; break; } this.frame.Y = num1 * 4; this.frameCounter = 0.0; break; case 496: case 497: if ((double) this.ai[0] == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; else if ((double) this.velocity.Y < 0.0) this.frameCounter = 0.0; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.10000002384186; if (this.frameCounter < 6.0) { this.frame.Y = 0; break; } if (this.frameCounter < 12.0) { this.frame.Y = num1; break; } if (this.frameCounter < 18.0) { this.frame.Y = num1 * 2; break; } if (this.frameCounter < 24.0) { this.frame.Y = num1 * 3; break; } this.frameCounter = 0.0; break; } if ((double) this.ai[0] == 1.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 6 : num1 * 5) : num1 * 4; break; } if ((double) this.ai[0] == 5.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 3 : num1 * 11) : num1 * 10; break; } this.frameCounter = 0.0; this.frame.Y = num1 * 7; break; case 498: case 499: case 500: case 501: case 502: case 503: case 504: case 505: case 506: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.ai[2] > 0.0) { this.spriteDirection = this.direction; this.frame.Y = (double) this.ai[1] >= 12.0 ? ((double) this.ai[1] >= 34.0 ? num1 * 8 : num1 * 9) : num1 * 8; this.frameCounter = 0.0; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; if (this.frameCounter > 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 7) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1 * 10; break; case 508: case 532: case 580: case 582: if ((double) this.velocity.Y != 0.0) { this.frame.Y = num1; break; } if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } if (this.direction < 0 && (double) this.velocity.X < 0.0) this.spriteDirection = -1; if (this.direction > 0 && (double) this.velocity.X > 0.0) this.spriteDirection = 1; if (this.frame.Y / num1 < 2) this.frame.Y = num1 * 2; this.frameCounter += 1.0 + (double) Math.Abs(this.velocity.X) / 2.0; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; case 509: case 581: if ((double) this.velocity.X > 0.0 && this.direction > 0 || (double) this.velocity.X < 0.0 && this.direction < 0) this.spriteDirection = this.direction; if (++this.frameCounter >= 3.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 516: if ((double) this.localAI[1] == 0.0) { this.localAI[1] = 1f; this.frame.Y = num1 * Main.rand.Next(3); this.frameCounter += (double) Main.rand.Next(3); } ++this.frameCounter; if (this.frameCounter > 3.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 3) { this.frame.Y = 0; break; } break; } break; case 518: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = num1; this.frameCounter = 0.0; break; case 520: if ((double) this.velocity.Y == 0.0) { this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; if (this.frameCounter > 6.0) { if ((double) Math.Abs(this.velocity.X) < 0.200000002980232) { this.frame.Y = 0; this.frameCounter = 0.0; } else { this.frame.Y += num1; this.frameCounter = 0.0; } } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) this.frame.Y = num1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 521: if ((double) this.velocity.X < 0.0) this.direction = -1; else this.direction = 1; if (this.direction != 0) this.spriteDirection = this.direction; this.rotation = (float) Math.Atan2((double) this.velocity.Y * (double) this.spriteDirection, (double) this.velocity.X * (double) this.spriteDirection) + this.velocity.X * 0.1f; if (++this.frameCounter >= 5.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 523: if (++this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 524: case 525: case 526: case 527: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y <= num1) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 9.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frame.Y = num1; this.frameCounter = 0.0; break; case 528: case 529: if ((double) this.velocity.Y == 0.0) { if (this.direction != 0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 9.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type] - 1) { this.frame.Y = num1; break; } break; } this.frame.Y = num1 * (Main.npcFrameCount[this.type] - 1); this.frameCounter = 0.0; break; case 533: if ((double) this.velocity.Y == 0.0 && this.direction != 0) this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 48.0) this.frameCounter = 0.0; this.frame.Y = (int) (this.frameCounter / 6.0) * num1; if ((double) this.ai[1] > 0.0) { this.frame.Y += num1 * 8; break; } break; case 541: if ((double) this.ai[0] > 0.0) { float num105 = this.ai[0]; this.frame.Y = (double) num105 >= 6.0 ? ((double) num105 >= 105.0 ? ((double) num105 >= 114.0 ? ((double) num105 >= 135.0 ? num1 : num1 * (int) (((double) num105 - 99.0 - 15.0) / 7.0 + 10.0)) : num1 * 9) : num1 * (int) ((double) num105 / 8.0 % 4.0 + 5.0)) : num1 * 4; break; } this.frameCounter = this.frameCounter + (double) this.velocity.Length() * 0.100000001490116 + 1.0; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; case 542: case 543: case 544: case 545: this.spriteDirection = this.direction; ++this.frameCounter; if (this.frameCounter >= 16.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 4.0); break; case 549: this.spriteDirection = 1; this.rotation = 0.0f; if (++this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 551: int num106 = this.frame.Y / num1; int num107; if ((double) this.ai[0] == 4.0) { float num108 = 60f; int num109 = 6 * 10; if (num106 < 5) this.frameCounter = 0.0; num107 = 5; this.frameCounter = (double) (int) this.ai[1]; int num110 = 0; int num111; if (this.frameCounter >= (double) (5 * (num111 = num110 + 1))) num107 = 6; num111 = 0; if (this.frameCounter >= (double) num108 - 6.0) num107 = 7; if (this.frameCounter >= (double) num108 - 3.0) num107 = 8; if (this.frameCounter >= (double) num108) num107 = 9 + (int) this.frameCounter / 3 % 2; int num112 = 0; if (this.frameCounter >= (double) num108 + (double) num109 + 3.0) num107 = 8; int num113; if (this.frameCounter >= (double) num108 + (double) num109 + 3.0 + (double) (5 * (num113 = num112 + 1))) num107 = 7; if (this.frameCounter >= (double) num108 + (double) num109 + 3.0 + (double) (5 * (num111 = num113 + 1))) num107 = 0; } else if ((double) this.ai[0] == 3.0) { float num114 = 40f; float num115 = 80f; float num116 = num114 + num115; float num117 = 25f; if (num106 < 5) this.frameCounter = 0.0; num107 = 5; this.frameCounter = (double) (int) this.ai[1]; int num118 = 0; int num119; if (this.frameCounter >= (double) (5 * (num119 = num118 + 1))) num107 = 6; num119 = 0; if (this.frameCounter >= (double) num114 - 6.0) num107 = 7; if (this.frameCounter >= (double) num114 - 3.0) num107 = 8; if (this.frameCounter >= (double) num114) num107 = 9 + (int) this.frameCounter / 3 % 2; int num120 = 0; if (this.frameCounter >= (double) num116 - (double) num117 + 3.0) num107 = 8; int num121; if (this.frameCounter >= (double) num116 - (double) num117 + 3.0 + (double) (5 * (num121 = num120 + 1))) num107 = 7; if (this.frameCounter >= (double) num116 - (double) num117 + 3.0 + (double) (5 * (num119 = num121 + 1))) num107 = 0; } else if ((double) this.ai[0] == 5.0) num107 = 3; else if ((double) this.ai[0] == 6.0) { if (num106 > 4) this.frameCounter = 0.0; num107 = 1; this.frameCounter = (double) (int) this.ai[1]; int num122 = 0; int num123; if (this.frameCounter >= (double) (8 * (num123 = num122 + 1))) num107 = 2; int num124; if (this.frameCounter >= (double) (8 * (num124 = num123 + 1))) num107 = 3; int num125; if (this.frameCounter >= (double) (8 * (num125 = num124 + 1))) num107 = 4; int num126; if (this.frameCounter >= (double) (8 * (num126 = num125 + 1))) num107 = 3; int num127; if (this.frameCounter >= (double) (8 * (num127 = num126 + 1))) num107 = 4; int num128; if (this.frameCounter >= (double) (8 * (num128 = num127 + 1))) num107 = 3; int num129; if (this.frameCounter >= (double) (8 * (num129 = num128 + 1))) num107 = 2; int num130; if (this.frameCounter >= (double) (8 * (num130 = num129 + 1))) num107 = 1; int num131; if (this.frameCounter >= (double) (8 * (num131 = num130 + 1))) num107 = 0; } else num107 = 0; this.frame.Y = num1 * num107; break; case 552: case 553: case 554: if ((double) this.ai[0] > 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 10 || this.frame.Y > num1 * 13 || (double) this.ai[1] == 29.0) { this.frame.Y = num1 * 10; this.frameCounter = 0.0; } if (++this.frameCounter >= 6.0 && this.frame.Y < num1 * 13) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 9; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0); break; case 555: case 556: case 557: if ((double) this.ai[1] > 0.0 && (double) this.ai[0] > 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 10 || this.frame.Y > num1 * 16 || (double) this.ai[1] == 41.0) { this.frame.Y = num1 * 10; this.frameCounter = 0.0; } if (++this.frameCounter >= 6.0 && this.frame.Y < num1 * 16) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * ((int) (this.frameCounter / 8.0) + 2); break; case 558: case 559: case 560: if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; float num132 = this.velocity.ToRotation(); if ((double) this.velocity.X < 0.0) num132 += 3.141593f; if ((double) this.ai[0] != 2.0) num132 = this.velocity.X * 0.1f; this.rotation = num132; if ((double) this.ai[0] == 2.0) { this.frame.Y = num1 * 4; break; } if (++this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } break; case 561: case 562: case 563: if ((double) this.ai[1] > 0.0 && (double) this.ai[0] > 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 10 || this.frame.Y > num1 * 13 || (double) this.ai[1] == 89.0) { this.frame.Y = num1 * 10; this.frameCounter = 0.0; } if (++this.frameCounter >= 6.0 && this.frame.Y < num1 * 13) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 9; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0); break; case 564: case 565: int y = this.frame.Y; this.frame.Width = 80; this.frame.Height = 80; int num133; if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 0.0) { this.spriteDirection = this.direction; if (y < 5 || y > 13) this.frameCounter = 0.0; num133 = 5; ++this.frameCounter; int num134 = 0; int num135; if (this.frameCounter >= (double) (7 * (num135 = num134 + 1))) num133 = 6; int num136; if (this.frameCounter >= (double) (7 * (num136 = num135 + 1))) num133 = 7; int num137; if (this.frameCounter >= (double) (7 * (num137 = num136 + 1))) num133 = 5; int num138; if (this.frameCounter >= (double) (7 * (num138 = num137 + 1))) num133 = 6; int num139; if (this.frameCounter >= (double) (7 * (num139 = num138 + 1))) num133 = 7; int num140; if (this.frameCounter >= (double) (7 * (num140 = num139 + 1))) num133 = 5; int num141; if (this.frameCounter >= (double) (7 * (num141 = num140 + 1))) num133 = 6; int num142; if (this.frameCounter >= (double) (7 * (num142 = num141 + 1))) num133 = 7; int num143; if (this.frameCounter >= (double) (7 * (num143 = num142 + 1))) num133 = 8; int num144; if (this.frameCounter >= (double) (7 * (num144 = num143 + 1))) num133 = 9; double frameCounter1 = this.frameCounter; int num145 = num144 + 1; int num146 = num145; double num147 = (double) (7 * num145); if (frameCounter1 >= num147) num133 = 10; double frameCounter2 = this.frameCounter; int num148 = num146 + 1; int num149 = num148; double num150 = (double) (7 * num148); if (frameCounter2 >= num150) num133 = 11; double frameCounter3 = this.frameCounter; int num151 = num149 + 1; int num152 = num151; double num153 = (double) (7 * num151); if (frameCounter3 >= num153) num133 = 12; if (this.frameCounter >= (double) (7 * (num152 + 1))) { num133 = 5; this.frameCounter = 0.0; } } else if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 1.0) { this.spriteDirection = this.direction; if (y < 13 || y > 25) this.frameCounter = 0.0; num133 = 13; ++this.frameCounter; int num154 = 0; double frameCounter4 = this.frameCounter; int num155 = num154 + 1; int num156 = num155; double num157 = (double) (8 * num155); if (frameCounter4 >= num157) num133 = 14; double frameCounter5 = this.frameCounter; int num158 = num156 + 1; int num159 = num158; double num160 = (double) (8 * num158); if (frameCounter5 >= num160) num133 = 15; double frameCounter6 = this.frameCounter; int num161 = num159 + 1; int num162 = num161; double num163 = (double) (8 * num161); if (frameCounter6 >= num163) num133 = 16; double frameCounter7 = this.frameCounter; int num164 = num162 + 1; int num165 = num164; double num166 = (double) (8 * num164); if (frameCounter7 >= num166) num133 = 17; double frameCounter8 = this.frameCounter; int num167 = num165 + 1; int num168 = num167; double num169 = (double) (8 * num167); if (frameCounter8 >= num169) num133 = 18; double frameCounter9 = this.frameCounter; int num170 = num168 + 1; int num171 = num170; double num172 = (double) (8 * num170); if (frameCounter9 >= num172) num133 = 19; double frameCounter10 = this.frameCounter; int num173 = num171 + 1; int num174 = num173; double num175 = (double) (8 * num173); if (frameCounter10 >= num175) num133 = 20; double frameCounter11 = this.frameCounter; int num176 = num174 + 1; int num177 = num176; double num178 = (double) (8 * num176); if (frameCounter11 >= num178) num133 = 18; double frameCounter12 = this.frameCounter; int num179 = num177 + 1; int num180 = num179; double num181 = (double) (8 * num179); if (frameCounter12 >= num181) num133 = 19; double frameCounter13 = this.frameCounter; int num182 = num180 + 1; int num183 = num182; double num184 = (double) (8 * num182); if (frameCounter13 >= num184) num133 = 20; double frameCounter14 = this.frameCounter; int num185 = num183 + 1; int num186 = num185; double num187 = (double) (8 * num185); if (frameCounter14 >= num187) num133 = 21; double frameCounter15 = this.frameCounter; int num188 = num186 + 1; int num189 = num188; double num190 = (double) (8 * num188); if (frameCounter15 >= num190) num133 = 22; double frameCounter16 = this.frameCounter; int num191 = num189 + 1; int num192 = num191; double num193 = (double) (8 * num191); if (frameCounter16 >= num193) num133 = 23; double frameCounter17 = this.frameCounter; int num194 = num192 + 1; int num195 = num194; double num196 = (double) (8 * num194); if (frameCounter17 >= num196) num133 = 24; double frameCounter18 = this.frameCounter; int num197 = num195 + 1; int num198 = num197; double num199 = (double) (8 * num197); if (frameCounter18 >= num199) num133 = 25; if (this.frameCounter >= (double) (8 * (num198 + 1))) { num133 = 14; this.frameCounter = 0.0; } } else if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 2.0) { this.spriteDirection = this.direction; if (y < 26 || y > 40) this.frameCounter = 0.0; num133 = 26; ++this.frameCounter; int num200 = 0; double frameCounter19 = this.frameCounter; int num201 = num200 + 1; int num202 = num201; double num203 = (double) (8 * num201); if (frameCounter19 >= num203) num133 = 27; double frameCounter20 = this.frameCounter; int num204 = num202 + 1; int num205 = num204; double num206 = (double) (8 * num204); if (frameCounter20 >= num206) num133 = 28; double frameCounter21 = this.frameCounter; int num207 = num205 + 1; int num208 = num207; double num209 = (double) (8 * num207); if (frameCounter21 >= num209) num133 = 29; double frameCounter22 = this.frameCounter; int num210 = num208 + 1; int num211 = num210; double num212 = (double) (8 * num210); if (frameCounter22 >= num212) num133 = 26; double frameCounter23 = this.frameCounter; int num213 = num211 + 1; int num214 = num213; double num215 = (double) (8 * num213); if (frameCounter23 >= num215) num133 = 27; double frameCounter24 = this.frameCounter; int num216 = num214 + 1; int num217 = num216; double num218 = (double) (8 * num216); if (frameCounter24 >= num218) num133 = 28; double frameCounter25 = this.frameCounter; int num219 = num217 + 1; int num220 = num219; double num221 = (double) (8 * num219); if (frameCounter25 >= num221) num133 = 29; double frameCounter26 = this.frameCounter; int num222 = num220 + 1; int num223 = num222; double num224 = (double) (8 * num222); if (frameCounter26 >= num224) num133 = 26; double frameCounter27 = this.frameCounter; int num225 = num223 + 1; int num226 = num225; double num227 = (double) (8 * num225); if (frameCounter27 >= num227) num133 = 27; double frameCounter28 = this.frameCounter; int num228 = num226 + 1; int num229 = num228; double num230 = (double) (8 * num228); if (frameCounter28 >= num230) num133 = 28; double frameCounter29 = this.frameCounter; int num231 = num229 + 1; int num232 = num231; double num233 = (double) (8 * num231); if (frameCounter29 >= num233) num133 = 29; double frameCounter30 = this.frameCounter; int num234 = num232 + 1; int num235 = num234; double num236 = (double) (8 * num234); if (frameCounter30 >= num236) num133 = 30; double frameCounter31 = this.frameCounter; int num237 = num235 + 1; int num238 = num237; double num239 = (double) (8 * num237); if (frameCounter31 >= num239) num133 = 31; double frameCounter32 = this.frameCounter; int num240 = num238 + 1; int num241 = num240; double num242 = (double) (8 * num240); if (frameCounter32 >= num242) num133 = 32; double frameCounter33 = this.frameCounter; int num243 = num241 + 1; int num244 = num243; double num245 = (double) (8 * num243); if (frameCounter33 >= num245) num133 = 33; double frameCounter34 = this.frameCounter; int num246 = num244 + 1; int num247 = num246; double num248 = (double) (8 * num246); if (frameCounter34 >= num248) num133 = 34; double frameCounter35 = this.frameCounter; int num249 = num247 + 1; int num250 = num249; double num251 = (double) (8 * num249); if (frameCounter35 >= num251) num133 = 35; double frameCounter36 = this.frameCounter; int num252 = num250 + 1; int num253 = num252; double num254 = (double) (8 * num252); if (frameCounter36 >= num254) num133 = 36; double frameCounter37 = this.frameCounter; int num255 = num253 + 1; int num256 = num255; double num257 = (double) (8 * num255); if (frameCounter37 >= num257) num133 = 37; double frameCounter38 = this.frameCounter; int num258 = num256 + 1; int num259 = num258; double num260 = (double) (8 * num258); if (frameCounter38 >= num260) num133 = 38; double frameCounter39 = this.frameCounter; int num261 = num259 + 1; int num262 = num261; double num263 = (double) (8 * num261); if (frameCounter39 >= num263) num133 = 39; double frameCounter40 = this.frameCounter; int num264 = num262 + 1; int num265 = num264; double num266 = (double) (8 * num264); if (frameCounter40 >= num266) num133 = 40; if (this.frameCounter >= (double) (8 * (num265 + 1))) { num133 = 26; this.frameCounter = 0.0; } } else { this.frameCounter = this.frameCounter + (double) this.velocity.Length() * 0.100000001490116 + 1.0; if (this.frameCounter >= 40.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; num133 = (int) (this.frameCounter / 8.0); } this.frame.Y = num133; break; case 566: case 567: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0); break; case 568: case 569: if ((double) this.ai[0] > 0.0) { int num267 = this.frame.Y / num1; this.spriteDirection = this.direction; if (num267 < 5 || num267 > 16) this.frameCounter = 0.0; int num268 = 7; ++this.frameCounter; int num269 = 0; int num270; if (this.frameCounter >= (double) (5 * (num270 = num269 + 1))) num268 = 8; int num271; if (this.frameCounter >= (double) (5 * (num271 = num270 + 1))) num268 = 9; int num272; if (this.frameCounter >= (double) (5 * (num272 = num271 + 1))) num268 = 10; int num273; if (this.frameCounter >= (double) (5 * (num273 = num272 + 1))) num268 = 7; int num274; if (this.frameCounter >= (double) (5 * (num274 = num273 + 1))) num268 = 8; int num275; if (this.frameCounter >= (double) (5 * (num275 = num274 + 1))) num268 = 9; int num276; if (this.frameCounter >= (double) (5 * (num276 = num275 + 1))) num268 = 10; int num277; if (this.frameCounter >= (double) (5 * (num277 = num276 + 1))) num268 = 7; int num278; if (this.frameCounter >= (double) (5 * (num278 = num277 + 1))) num268 = 8; int num279; if (this.frameCounter >= (double) (5 * (num279 = num278 + 1))) num268 = 9; int num280; if (this.frameCounter >= (double) (5 * (num280 = num279 + 1))) num268 = 10; int num281; if (this.frameCounter >= (double) (5 * (num281 = num280 + 1))) num268 = 7; int num282; if (this.frameCounter >= (double) (5 * (num282 = num281 + 1))) num268 = 8; int num283; if (this.frameCounter >= (double) (5 * (num283 = num282 + 1))) num268 = 9; int num284; if (this.frameCounter >= (double) (5 * (num284 = num283 + 1))) num268 = 10; int num285; if (this.frameCounter >= (double) (5 * (num285 = num284 + 1))) num268 = 7; int num286; if (this.frameCounter >= (double) (5 * (num286 = num285 + 1))) num268 = 8; int num287; if (this.frameCounter >= (double) (5 * (num287 = num286 + 1))) num268 = 9; int num288; if (this.frameCounter >= (double) (5 * (num288 = num287 + 1))) num268 = 10; int num289; if (this.frameCounter >= (double) (5 * (num289 = num288 + 1))) num268 = 7; int num290; if (this.frameCounter >= (double) (5 * (num290 = num289 + 1))) num268 = 8; int num291; if (this.frameCounter >= (double) (5 * (num291 = num290 + 1))) num268 = 9; int num292; if (this.frameCounter >= (double) (5 * (num292 = num291 + 1))) num268 = 10; int num293; if (this.frameCounter >= (double) (5 * (num293 = num292 + 1))) num268 = 11; int num294; if (this.frameCounter >= (double) (5 * (num294 = num293 + 1))) num268 = 12; int num295; if (this.frameCounter >= (double) (5 * (num295 = num294 + 1))) num268 = 13; int num296; if (this.frameCounter >= (double) (5 * (num296 = num295 + 1))) num268 = 14; if (this.frameCounter >= 270.0) { num268 = 14; this.frameCounter -= 10.0; } this.frame.Y = num1 * num268; break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 6; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 56.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0); break; case 570: case 571: if ((double) this.ai[1] > 0.0 && (double) this.ai[0] > 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 10 || this.frame.Y > num1 * 15 || (double) this.ai[1] == 59.0) { this.frame.Y = num1 * 10; this.frameCounter = 0.0; } int num297 = 5; if (this.frame.Y == num1 * 14) num297 = 35; if (++this.frameCounter >= (double) num297 && this.frame.Y < num1 * 15) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 9; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0 + 2.0); break; case 572: case 573: if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 0.0) { this.spriteDirection = this.direction; if (this.frame.Y != num1 * 8 || this.frameCounter > 2.0) { this.frame.Y = num1 * 8; this.frameCounter = 0.0; } if (this.frameCounter == 0.0) { this.frameCounter = 1.0; EmoteBubble.NewBubble(3, new WorldUIAnchor((Entity) this), 60); break; } break; } if ((double) this.ai[1] == 1.0) { if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 17; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * ((int) (this.frameCounter / 8.0) + 8); break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0 || this.direction == -1 && (double) this.velocity.X > 0.0 || this.direction == 1 && (double) this.velocity.X < 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 16; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 64.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; this.frame.Y = num1 * (int) (this.frameCounter / 8.0); break; case 574: case 575: if ((double) this.velocity.X > 0.0) this.spriteDirection = 1; if ((double) this.velocity.X < 0.0) this.spriteDirection = -1; float rotation = this.velocity.ToRotation(); if ((double) this.velocity.X < 0.0) rotation += 3.141593f; this.rotation = this.rotation.AngleTowards(rotation, 0.02f); if ((double) this.ai[0] != 0.0) { if (this.frame.Y < num1 * 2) { this.frame.Y = num1 * 2; this.frameCounter = 0.0; } int num298 = 4; if (this.frame.Y >= num1 * 5) num298 = 8; Vector2 Position = this.Center + new Vector2((float) (56 * this.spriteDirection), -30f).RotatedBy((double) this.rotation); if (++this.frameCounter >= (double) num298 && this.frame.Y < num1 * 9) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y == num1 * 9) { for (int index = 0; index < 8; ++index) { Dust dust = Dust.NewDustDirect(Position, 0, 0, 6, Alpha: 100); dust.velocity *= 3f; dust.scale = 0.6f; dust.fadeIn = 1.2f; dust.noGravity = true; dust.noLight = true; } } } if (this.frame.Y >= num1 * 9 && (double) this.ai[0] < 3.0) { Vector2 vector2_1 = Position; Vector2 vector2_2 = Position + (this.oldPos[3] - this.position); int maxValue = 5; if (this.frameCounter > 60.0) maxValue = 4; if (this.frameCounter > 180.0) maxValue = 3; if (this.frameCounter > 300.0) maxValue = 2; if (this.frameCounter > 600.0) maxValue = 1; for (int index = 0; index < 2; ++index) { if (Main.rand.Next(maxValue) == 0) { Dust dust = Dust.NewDustDirect(Vector2.Lerp(vector2_2, vector2_1, (float) ((double) index / 10.0 + 0.100000001490116)), 0, 0, 6, Alpha: 50); dust.scale = 0.3f; dust.fadeIn = 1.5f; dust.noGravity = true; dust.noLight = true; } } break; } break; } if (++this.frameCounter >= 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * 2) { this.frame.Y = 0; break; } break; } break; case 576: case 577: int num299 = this.frame.Y; this.frame.Width = 80; if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 0.0) { this.spriteDirection = this.direction; if (num299 < 11 || num299 > 20) { num299 = 11; this.frameCounter = 0.0; } int num300 = 4; if (num299 == 13 || num299 == 19) num300 = 8; if (num299 == 14 || num299 == 18) num300 = 2; if (++this.frameCounter >= (double) num300 && num299 < 20) { this.frameCounter = 0.0; ++num299; } } else if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 2.0) { this.spriteDirection = this.direction; if (num299 < 37 || num299 > 47) { num299 = 39; this.frameCounter = 0.0; } int num301 = 5; if (num299 == 42) num301 = 6; if (num299 == 45) num301 = 8; if (num299 == 46) num301 = 4; if (num299 == 47) num301 = 26; if (num299 == 37 || num299 == 38) num301 = 7; bool flag4 = true; if (num299 == 46 && (double) this.velocity.Y != 0.0) flag4 = false; if (num299 == 38) flag4 = false; if (flag4) ++this.frameCounter; if (this.frameCounter >= (double) num301) { if (num299 < 47) { this.frameCounter = 0.0; ++num299; } else { num299 = 37; this.frameCounter = 0.0; } } } else if ((double) this.ai[0] > 0.0 && (double) this.ai[1] == 1.0) { this.spriteDirection = this.direction; if (num299 < 21 || num299 > 38) { num299 = 21; this.frameCounter = 0.0; } if (++this.frameCounter >= 5.0 && num299 < 38) { this.frameCounter = 0.0; ++num299; } } else { if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.Y != 0.0) { this.frameCounter = 0.0; num299 = 43; } else if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; num299 = 0; } else { this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter >= 60.0 || this.frameCounter < 0.0) this.frameCounter = 0.0; num299 = 1 + (int) (this.frameCounter / 6.0); } } this.frame.Y = num299; break; case 578: this.rotation = this.velocity.X * 0.1f; if (++this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } break; case 583: case 584: case 585: this.rotation = this.velocity.X * 0.1f; if (++this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; if (this.frame.Y >= num1 * 4) { this.frame.Y = 0; break; } break; } break; case 586: if (this.wet) { if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; this.spriteDirection = this.direction; this.frameCounter += (double) Math.Abs(this.velocity.Length()); ++this.frameCounter; if (this.frameCounter > 60.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 1) { this.frame.Y = 0; break; } if (this.frame.Y / num1 < 0) { this.frame.Y = 0; break; } break; } if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frame.Y = num1; this.frameCounter = 0.0; break; } int num302 = 8; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.0; this.frameCounter += 0.5; if (this.frameCounter > (double) num302) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; case 589: int num303 = this.frame.Y / num1; ++this.frameCounter; if ((double) this.velocity.Y != 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; } if (num303 >= 12) { if (this.frameCounter > 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; } if (num303 >= 11) { if (this.frameCounter > (double) Main.rand.Next(40, 140)) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if (num303 >= 8) { if (this.frameCounter > 3.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y == num1 * 9) { Vector2 position = this.position; position.Y += (float) (this.height - 6); if (this.direction == 1) position.X += 30f; else position.X -= 22f; for (int index = 0; index < 4; ++index) Dust.NewDust(position, 1, 1, 32); break; } break; } break; } if (num303 >= 7) { if (this.frameCounter > (double) Main.rand.Next(30, 90)) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if (num303 >= 4) { if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; } if (num303 >= 1) { if (this.frameCounter > 4.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y >= num1 * 4 && Main.rand.Next(3) != 0) { this.frame.Y = 0; break; } break; } break; } if (this.frameCounter > (double) Main.rand.Next(90, 450)) { this.frameCounter = 0.0; this.frame.Y += num1; break; } break; case 593: if ((double) this.velocity.Y == 0.0) { this.rotation = 0.0f; if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 2.0; ++this.frameCounter; if (this.frameCounter > 10.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; if ((double) this.velocity.Y > 4.0) { this.rotation -= this.velocity.Y * 0.01f; break; } break; case 594: this.spriteDirection = 1; this.frame.Y = (int) this.ai[2]; this.frame.Width = 32; break; case 595: case 596: case 597: case 598: case 599: case 600: case 601: this.spriteDirection = this.direction; int num304 = 3; if (++this.frameCounter >= (double) (Main.npcFrameCount[this.type] * num304)) this.frameCounter = 0.0; this.frame.Y = num1 * ((int) this.frameCounter / num304); break; case 602: this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * 10) this.frame.Y = num1 * 3; if (this.frame.Y < num1 * 3) { this.frame.Y = num1 * 3; break; } break; case 603: this.spriteDirection = this.direction; if (this.wet) { ++this.frameCounter; if (this.frameCounter >= 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y > num1 * 2) this.frame.Y = num1; if (this.frame.Y < num1) this.frame.Y = num1; this.rotation = 0.0f; break; } if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frame.Y = num1; this.frameCounter = 0.0; this.rotation = 0.0f; break; } this.rotation = this.velocity.X * 0.1f; ++this.frameCounter; if (this.frameCounter >= 4.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type]) this.frame.Y = num1 * 11; if (this.frame.Y < num1 * 11) { this.frame.Y = num1 * 11; break; } break; case 604: case 605: this.spriteDirection = this.direction; int num305 = 2; if (++this.frameCounter >= (double) (4 * num305)) this.frameCounter = 0.0; this.frame.Y = (double) this.velocity.Y != 0.0 ? num1 * (4 + (int) this.frameCounter / num305) : num1 * ((int) this.frameCounter / num305); break; case 610: if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { ++this.frameCounter; if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 1) { this.frame.Y = 0; break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter += (double) Math.Abs(this.velocity.X) * 0.5; ++this.frameCounter; if (this.frameCounter > 6.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = num1 * 2; break; } break; case 611: this.spriteDirection = -this.direction; this.rotation = this.velocity.X * 0.1f; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { switch (this.frame.Y / num1) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: if ((int) this.frameCounter % 40 != 0 || Main.rand.Next(80) == 0) ++this.frameCounter; if ((this.frameCounter + 1.0) % 40.0 == 39.0) this.frameCounter = (double) (40 * Main.rand.Next(3)); int num306 = (int) this.frameCounter % 40 / 10; int num307 = (int) this.frameCounter / 40; int num308 = 0; switch (num307) { case 0: if (num306 == 3) num306 = 1; num308 = num306; break; case 1: if (num306 == 3) num306 = 1; num308 = 0; if (num306 != 0) { num308 = 2 + num306; break; } break; case 2: num308 = 0; if (num306 != 0) { num308 = 4 + num306; break; } break; } this.frame.Y = num1 * num308; break; default: this.frame.Y = 0; goto case 0; } } else { ++this.frameCounter; if (this.frameCounter >= 5.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num1 * Main.npcFrameCount[this.type] || this.frame.Y < num1 * 8) { this.frame.Y = num1 * 8; break; } break; } break; case 612: case 613: if (this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 50.0) { this.frameCounter = 0.0; this.frame.Y = 0; } this.frame.Y = (int) Utils.WrappedLerp(0.0f, 4f, (float) this.frameCounter / 50f) * num1; break; } bool flag5 = true; if (this.frame.Y == 0 && Main.rand.Next(180) != 0) flag5 = false; if (flag5) ++this.frameCounter; if ((double) this.velocity.X != 0.0) this.spriteDirection = Math.Sign(this.velocity.X); int num309 = 10; bool flag6 = (double) Math.Abs(this.velocity.X) > 1.0; if ((double) this.ai[1] == 1.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; } if ((double) Math.Abs(this.velocity.Y) > 0.100000001490116 | flag6) { this.frameCounter = 0.0; this.frame.Y = num1 * 4; } else if (this.frame.Y == 0) num309 = 2; if (this.frame.Y == num1 * 4) { num309 = 60; if (!flag6) num309 = 2; } if (this.frameCounter >= (double) num309) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= 5) { this.frame.Y = 0; break; } break; } break; case 615: this.spriteDirection = this.direction; if (!this.wet && (double) this.ai[2] == 1.0) { this.frame.Y = 4 * num1; break; } if (!this.wet) ++this.frameCounter; if (++this.frameCounter >= (double) (7 * (Main.npcFrameCount[this.type] - 1))) this.frameCounter = 0.0; this.frame.Y = (int) (this.frameCounter / 7.0) * num1; break; case 616: case 617: int num310 = 8; int num311 = 5; if ((double) this.velocity.X == 0.0) num311 = 10; this.spriteDirection = this.direction; if (this.wet) { ++this.frameCounter; if (this.frameCounter > (double) num311) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 13) { this.frame.Y = num1 * 8; break; } break; } break; } ++this.frameCounter; if (this.frameCounter > (double) num310) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 7) this.frame.Y = 0; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; } if ((double) this.velocity.Y != 0.0) { this.frameCounter = 0.0; this.frame.Y = num1 * 8; break; } break; case 618: if (++this.frameCounter >= 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 619: if (++this.frameCounter >= 6.0) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y / num1 >= Main.npcFrameCount[this.type]) { this.frame.Y = 0; break; } break; } break; case 620: if ((double) this.ai[1] > 0.0 && (double) this.ai[0] > 0.0) { this.spriteDirection = this.direction; if (this.frame.Y < num1 * 14 || this.frame.Y > num1 * 20 || (double) this.ai[1] == 59.0) { this.frame.Y = num1 * 14; this.frameCounter = 0.0; } int num312 = 5; if (this.frame.Y == num1 * 17 || this.frame.Y == num1 * 16) num312 = 3; if (++this.frameCounter >= (double) num312 && this.frame.Y < num1 * 20) { this.frameCounter = 0.0; this.frame.Y += num1; if ((double) this.ai[1] > 0.0 && this.frame.Y == num1 * 18) { this.frame.Y = num1 * 16; break; } break; } break; } if (this.wet) { if ((double) this.velocity.X < 0.0) this.direction = -1; if ((double) this.velocity.X > 0.0) this.direction = 1; if (this.spriteDirection != this.direction) { this.rotation *= -1f; this.spriteDirection = this.direction; } float num313 = (float) Math.Atan2((double) this.velocity.Y * (double) this.direction, (double) this.velocity.X * (double) this.direction); if ((double) Math.Abs(this.rotation - num313) >= 3.14159274101257) { if ((double) num313 < (double) this.rotation) this.rotation -= 6.283185f; else this.rotation += 6.283185f; } this.rotation = (float) (((double) this.rotation * 4.0 + (double) num313) / 5.0); this.frameCounter += (double) Math.Abs(this.velocity.Length()); ++this.frameCounter; if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 13) { this.frame.Y = num1 * 8; break; } if (this.frame.Y / num1 < 8) { this.frame.Y = num1 * 13; break; } break; } if ((double) this.rotation > 3.14) this.rotation -= 6.28f; if ((double) this.rotation > -0.01 && (double) this.rotation < 0.01) this.rotation = 0.0f; else this.rotation *= 0.9f; if ((double) this.velocity.Y == 0.0) { if (this.direction == 1) this.spriteDirection = 1; if (this.direction == -1) this.spriteDirection = -1; if ((double) this.velocity.X == 0.0) { this.frame.Y = 0; this.frameCounter = 0.0; break; } if (this.frame.Y < num1 * 2) this.frame.Y = num1 * 2; this.frameCounter += (double) Math.Abs(this.velocity.X); ++this.frameCounter; if (this.frameCounter > 9.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y / num1 > 7) { this.frame.Y = num1 * 2; break; } break; } this.frameCounter = 0.0; this.frame.Y = num1; break; case 624: if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; if ((double) this.velocity.X == 0.0 && (double) this.velocity.Y == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } if ((double) this.velocity.Y < 0.0) { this.frameCounter = 0.0; this.frame.Y = 9 * num1; break; } if ((double) this.velocity.Y > 0.0) { this.frameCounter = 0.0; this.frame.Y = 10 * num1; break; } this.frameCounter += (double) Math.Abs(this.velocity.X); if (this.frameCounter > 8.0) { int num314 = this.frame.Y / num1; this.frameCounter -= 8.0; int num315 = num314 + 1; if (num315 > 8) num315 = 1; this.frame.Y = num315 * num1; break; } break; case 625: int num316 = 7; int num317 = 4; if ((double) this.velocity.X == 0.0) num317 = 8; this.spriteDirection = this.direction; if (this.wet) { if (this.frame.Y < num1 * 6) this.frame.Y = num1 * 6; ++this.frameCounter; if (this.frameCounter > (double) num317) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 11) { this.frame.Y = num1 * 6; break; } break; } break; } if (this.frame.Y > num1 * 5) this.frame.Y = 0; ++this.frameCounter; if (this.frameCounter > (double) num316) { this.frameCounter = 0.0; this.frame.Y += num1; if (this.frame.Y > num1 * 5) this.frame.Y = 0; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } break; case 626: case 627: if ((double) this.velocity.X != 0.0) this.spriteDirection = (double) this.velocity.X < 0.0 ? -1 : 1; if (this.IsABestiaryIconDummy) { ++this.frameCounter; if (this.frameCounter > 5.0) { this.frameCounter = 0.0; this.frame.Y += num1; } if (this.frame.Y > num1 * 5) { this.frame.Y = 0; break; } break; } this.frame.Y = this.wet ? ((double) this.velocity.Length() <= 0.150000005960464 ? ((double) this.velocity.Length() <= 0.0500000007450581 ? ((double) this.velocity.Length() <= 0.025000000372529 ? 0 : num1) : num1 * 2) : num1 * 3) : 0; break; case 628: this.spriteDirection = (double) Main.WindForVisuals > 0.0 ? -1 : 1; if (this.IsABestiaryIconDummy) { int num318 = this.frame.Y / num1; int num319 = 5; this.spriteDirection = 1; ++this.frameCounter; if (this.frameCounter > (double) num319) { this.frameCounter -= (double) num319; int num320 = num318 + 1; if (num320 > 5) num320 = 0; this.frame.Y = num320 * num1; break; } break; } if ((double) this.ai[0] == 0.0) { int num321 = this.frame.Y / num1; int num322 = 8; if (num321 == 6) { this.frameCounter += 1.0 + 0.5 * (double) Math.Abs(Main.WindForVisuals); if (this.frameCounter > (double) num322) { this.frameCounter -= (double) num322; this.frame.Y = 0 * num1; break; } break; } if (num321 > 5) { int num323 = 6; this.frameCounter = 0.0; this.frame.Y = num323 * num1; break; } this.frameCounter += 1.0 + 0.5 * (double) Math.Abs(Main.WindForVisuals); if (this.frameCounter > (double) num322) { this.frameCounter -= (double) num322; int num324 = num321 + 1; if (num324 > 5) num324 = 0; this.frame.Y = num324 * num1; break; } break; } if ((double) this.localAI[0] == 0.0) { ++this.frameCounter; if (this.frameCounter > 4.0) { this.frameCounter = 0.0; int num325 = this.frame.Y / num1; int num326; if (num325 == 6) num326 = 7; else if (num325 < 7) { num326 = 6; } else { num326 = num325 + 1; if (num326 > 10) num326 = 7; } this.frame.Y = num326 * num1; break; } break; } if ((double) this.localAI[0] == 1.0) { int num327 = this.frame.Y / num1; int num328 = (int) MathHelper.Lerp(7f, 20f, (float) this.frameCounter / 80f); if (num328 > 19) num328 = 19; if (num328 > 16) num328 -= 9; ++this.frameCounter; if (this.frameCounter > 80.0) this.frameCounter = 0.0; this.frame.Y = num328 * num1; break; } break; case 631: int num329 = 8; if ((double) this.velocity.Y == 0.0) { this.spriteDirection = this.direction; if ((double) this.ai[2] != 0.0 && (double) this.ai[2] < 100.0) { float amount = (this.ai[2] - 76f) / 24f; Player player = Main.player[this.target]; bool flag7 = player != null && ((double) player.Center.X < (double) this.Center.X ? this.direction == -1 : this.direction == 1); bool flag8 = player != null && player.Hitbox.Intersects(this.Hitbox); this.frame.Y = !(player != null & flag7) || flag8 || !Collision.CanHit((Entity) player, (Entity) this) ? (!(flag7 & flag8) ? 0 : (int) MathHelper.Lerp(10f, 15f, amount) * num1) : (int) MathHelper.Lerp(15f, (float) Main.npcFrameCount[this.type], amount) * num1; break; } if ((double) this.velocity.X == 0.0) { this.frameCounter = 0.0; this.frame.Y = 0; break; } this.frameCounter += 0.200000002980232 + (double) Math.Abs(this.velocity.X); if (this.frameCounter > 8.0) { this.frame.Y += num1; this.frameCounter = 0.0; } if (this.frame.Y >= num329 * num1) { this.frame.Y = num1; break; } if (this.frame.Y / num1 < 1) { this.frame.Y = num1; break; } break; } this.frameCounter = 0.0; this.frame.Y = 0; break; case 636: this.frame.Y = this.AI_120_HallowBoss_IsInPhase2() ? num1 : 0; break; case 657: bool flag9 = this.life <= this.lifeMax / 2; this.frame.Width = 180; int num330 = this.frame.Y / num1; if (flag9 && this.noGravity || (double) this.velocity.Y < 0.0) { if (num330 < 20 || num330 > 23) { if (num330 < 4 || num330 > 7) { num330 = 4; this.frameCounter = -1.0; } if (++this.frameCounter >= 4.0) { this.frameCounter = 0.0; ++num330; if (num330 >= 7) num330 = !flag9 ? 7 : 22; } } else if (++this.frameCounter >= 5.0) { this.frameCounter = 0.0; ++num330; if (num330 >= 24) num330 = 20; } this.frame.Y = num330 * num1; break; } if ((double) this.velocity.Y > 0.0) { if (num330 < 8 || num330 > 10) { num330 = 8; this.frameCounter = -1.0; } if (++this.frameCounter >= 8.0) { this.frameCounter = 0.0; ++num330; if (num330 >= 10) num330 = 10; } this.frame.Y = num330 * num1; break; } if ((double) this.velocity.Y == 0.0) { if ((double) this.ai[0] == 5.0) { this.frameCounter = 0.0; switch ((int) this.ai[1] / 3 % 3) { case 1: num330 = 14; break; case 2: num330 = 15; break; default: num330 = 13; break; } } else if ((double) this.ai[0] == 4.0) { this.frameCounter = 0.0; switch ((int) this.ai[1] / 15) { case 1: num330 = 11; break; case 2: case 3: num330 = 10; break; default: num330 = 12; break; } } else { bool flag10 = num330 >= 10 && num330 <= 12; int num331 = 10; if (flag10) num331 = 6; if (!flag10 && num330 >= 4) { num330 = 0; this.frameCounter = -1.0; } if (++this.frameCounter >= (double) num331) { this.frameCounter = 0.0; ++num330; if ((!flag10 || num330 == 13) && num330 >= 4) num330 = 0; } } this.frame.Y = num330 * num1; break; } break; } if (this.aiStyle == 39 && this.type != 417) { if ((double) this.ai[0] == 0.0) { this.rotation = 0.0f; if ((double) this.velocity.Y == 0.0) this.spriteDirection = this.direction; else if ((double) this.velocity.Y < 0.0) this.frameCounter = 0.0; this.frameCounter += (double) Math.Abs(this.velocity.X) * 1.10000002384186; if (this.frameCounter < 6.0) this.frame.Y = 0; else if (this.frameCounter < 12.0) this.frame.Y = num1; else if (this.frameCounter < 18.0) this.frame.Y = num1 * 2; else if (this.frameCounter < 24.0) this.frame.Y = num1 * 3; else if (this.frameCounter < 32.0) this.frame.Y = num1 * 4; else this.frameCounter = 0.0; } else if ((double) this.ai[0] == 1.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 7 : num1 * 6) : num1 * 5; } else if ((double) this.ai[0] == 5.0) { this.frameCounter = 0.0; this.frame.Y = (double) this.ai[1] >= 10.0 ? ((double) this.ai[1] >= 20.0 ? num1 * 5 : num1 * 6) : num1 * 7; } else { this.frameCounter = 0.0; this.frame.Y = num1 * 7; } } this.position = this.position - this.netOffset; } public void SimpleFlyMovement(Vector2 desiredVelocity, float moveSpeed) { if ((double) this.velocity.X < (double) desiredVelocity.X) { this.velocity.X += moveSpeed; if ((double) this.velocity.X < 0.0 && (double) desiredVelocity.X > 0.0) this.velocity.X += moveSpeed; } else if ((double) this.velocity.X > (double) desiredVelocity.X) { this.velocity.X -= moveSpeed; if ((double) this.velocity.X > 0.0 && (double) desiredVelocity.X < 0.0) this.velocity.X -= moveSpeed; } if ((double) this.velocity.Y < (double) desiredVelocity.Y) { this.velocity.Y += moveSpeed; if ((double) this.velocity.Y >= 0.0 || (double) desiredVelocity.Y <= 0.0) return; this.velocity.Y += moveSpeed; } else { if ((double) this.velocity.Y <= (double) desiredVelocity.Y) return; this.velocity.Y -= moveSpeed; if ((double) this.velocity.Y <= 0.0 || (double) desiredVelocity.Y >= 0.0) return; this.velocity.Y -= moveSpeed; } } public void HealEffect(int healAmount, bool broadcast = true) { int index = CombatText.NewText(new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height), CombatText.HealLife, healAmount); if (!broadcast || Main.netMode != 2 || index == 100) return; CombatText combatText = Main.combatText[index]; NetMessage.SendData(81, number: ((int) combatText.color.PackedValue), number2: combatText.position.X, number3: combatText.position.Y, number4: ((float) healAmount)); } public static void HealEffect(Microsoft.Xna.Framework.Rectangle r, int healAmount, bool broadcast = true) { int index = CombatText.NewText(r, CombatText.HealLife, healAmount); if (!broadcast || Main.netMode != 2 || index == 100) return; CombatText combatText = Main.combatText[index]; NetMessage.SendData(81, number: ((int) combatText.color.PackedValue), number2: combatText.position.X, number3: combatText.position.Y, number4: ((float) healAmount)); } public int FindClosestPlayer() => this.FindClosestPlayer(out float _); public int FindClosestPlayer(out float distanceToPlayer) { Vector2 center = this.Center; float num1 = float.MaxValue; int num2 = -1; for (int index = 0; index < (int) byte.MaxValue; ++index) { Player player = Main.player[index]; if (player.active && !player.dead && !player.ghost) { float num3 = Vector2.DistanceSquared(center, player.Center); if ((double) num3 < (double) num1) { num1 = num3; num2 = index; } } } if (num2 < 0) { for (int index = 0; index < (int) byte.MaxValue; ++index) { Player player = Main.player[index]; if (player.active) { float num4 = Vector2.DistanceSquared(center, player.Center); if ((double) num4 < (double) num1) { num1 = num4; num2 = index; } } } } distanceToPlayer = (float) Math.Sqrt((double) num1); return num2; } public void BigMimicSpawnSmoke() { if (Main.netMode == 2) { NetMessage.SendData(51, number: this.whoAmI, number2: 4f); } else { for (int index1 = 0; index1 < 20; ++index1) { int index2 = Dust.NewDust(this.position, this.width, this.height, 54, Alpha: 50, Scale: 1.5f); Main.dust[index2].velocity *= 2f; Main.dust[index2].noGravity = true; } for (int index3 = 0; index3 < 3; ++index3) { for (int index4 = 0; index4 < 2; ++index4) { int index5 = Gore.NewGore(new Vector2((float) ((double) this.position.X + (double) (this.width * index3) * 0.449999988079071 - 20.0), (float) ((double) this.position.Y + (double) (this.height * index4) * 0.5 + 10.0)), new Vector2(0.0f, 0.0f), 99, 1.1f); Main.gore[index5].velocity *= 0.3f; } } } } public static bool BigMimicSummonCheck(int x, int y) { if (Main.netMode == 1 || !Main.hardMode) return false; int chest1 = Chest.FindChest(x, y); if (chest1 < 0) return false; int num1 = 0; int num2 = 0; int num3 = 0; for (int index = 0; index < 40; ++index) { ushort type = Main.tile[Main.chest[chest1].x, Main.chest[chest1].y].type; int num4 = (int) Main.tile[Main.chest[chest1].x, Main.chest[chest1].y].frameX / 36; if (TileID.Sets.BasicChest[(int) type] && (type != (ushort) 21 || num4 < 5 || num4 > 6) && Main.chest[chest1].item[index] != null && Main.chest[chest1].item[index].type > 0) { if (Main.chest[chest1].item[index].type == 3092) num1 += Main.chest[chest1].item[index].stack; else if (Main.chest[chest1].item[index].type == 3091) num2 += Main.chest[chest1].item[index].stack; else ++num3; } } if (num3 == 0 && num1 + num2 == 1) { if (num1 != 1) ; if (TileID.Sets.BasicChest[(int) Main.tile[x, y].type]) { if ((int) Main.tile[x, y].frameX % 36 != 0) --x; if ((int) Main.tile[x, y].frameY % 36 != 0) --y; int chest2 = Chest.FindChest(x, y); for (int index = 0; index < 40; ++index) Main.chest[chest1].item[index] = new Item(); Chest.DestroyChest(x, y); for (int index1 = x; index1 <= x + 1; ++index1) { for (int index2 = y; index2 <= y + 1; ++index2) { if (TileID.Sets.BasicChest[(int) Main.tile[index1, index2].type]) Main.tile[index1, index2].ClearTile(); } } int number = 1; if (Main.tile[x, y].type == (ushort) 467) number = 5; NetMessage.SendData(34, number: number, number2: ((float) x), number3: ((float) y), number5: chest2); NetMessage.SendTileSquare(-1, x, y, 3); } int Type = 475; if (num2 == 1) Type = !WorldGen.crimson ? 473 : 474; int number1 = NPC.NewNPC(x * 16 + 16, y * 16 + 32, Type); Main.npc[number1].whoAmI = number1; NetMessage.SendData(23, number: number1); Main.npc[number1].BigMimicSpawnSmoke(); } return false; } public bool ShouldFaceTarget( ref NPCUtils.TargetSearchResults searchResults, NPCUtils.TargetType? overrideTargetType = null) { NPCUtils.TargetType nearestTargetType = searchResults.NearestTargetType; if (overrideTargetType.HasValue) nearestTargetType = overrideTargetType.Value; switch (nearestTargetType) { case NPCUtils.TargetType.NPC: case NPCUtils.TargetType.TankPet: return true; case NPCUtils.TargetType.Player: bool flag = true; Player nearestTankOwner = searchResults.NearestTankOwner; if (nearestTankOwner.dead || nearestTankOwner.npcTypeNoAggro[this.type] && this.direction != 0) flag = false; if (flag) { float num = (float) ((double) (nearestTankOwner.width + nearestTankOwner.height + this.width + this.height) / 4.0 + 800.0); return nearestTankOwner.itemAnimation != 0 || nearestTankOwner.aggro >= 0 || (double) searchResults.NearestTankDistance <= (double) num || this.oldTarget < 0 || this.oldTarget >= (int) byte.MaxValue; } break; } return false; } public void FaceTarget() { this.direction = (double) this.targetRect.Center.X < (double) this.Center.X ? -1 : 1; this.directionY = (double) this.targetRect.Center.Y < (double) this.Center.Y ? -1 : 1; } public void TargetClosestUpgraded(bool faceTarget = true, Vector2? checkPosition = null) { int index1 = -1; int index2 = -1; int index3 = -1; Vector2 center = this.Center; if (checkPosition.HasValue) center = checkPosition.Value; bool flag1 = this.direction == 0; float num1 = 9999999f; for (int index4 = 0; index4 < (int) byte.MaxValue; ++index4) { Player player = Main.player[index4]; if (player.active && !player.dead && !player.ghost) { float num2 = Vector2.Distance(center, player.Center) - (float) player.aggro; bool flag2 = player.npcTypeNoAggro[this.type]; if (flag2 && !flag1) num2 += 1000f; if ((double) num2 < (double) num1) { index1 = index4; index2 = -1; num1 = num2; } if (player.tankPet >= 0 && !flag2) { float num3 = Vector2.Distance(center, Main.projectile[player.tankPet].Center) - 200f; if ((double) num3 < (double) num1 && (double) num3 < 200.0 && Collision.CanHit(this.Center, 0, 0, Main.projectile[player.tankPet].Center, 0, 0)) { index2 = player.tankPet; num1 = num3; } } } } for (int index5 = 0; index5 < 200; ++index5) { NPC npc = Main.npc[index5]; if (npc.active && npc.type == 548) { float num4 = Vector2.Distance(center, npc.Center); if ((double) num1 > (double) num4) { index3 = index5; index1 = -1; index2 = -1; num1 = num4; } } } if ((double) num1 == 9999999.0) return; if (index3 >= 0) { this.target = Main.npc[index3].WhoAmIToTargettingIndex; this.targetRect = Main.npc[index3].Hitbox; this.direction = (double) this.targetRect.Center.X < (double) this.Center.X ? -1 : 1; this.directionY = (double) this.targetRect.Center.Y < (double) this.Center.Y ? -1 : 1; } else if (index2 >= 0) { this.target = Main.projectile[index2].owner; this.targetRect = Main.projectile[index2].Hitbox; this.direction = (double) this.targetRect.Center.X < (double) this.Center.X ? -1 : 1; this.directionY = (double) this.targetRect.Center.Y < (double) this.Center.Y ? -1 : 1; } else { if (index1 < 0 || index1 >= (int) byte.MaxValue) index1 = 0; Player player = Main.player[index1]; this.targetRect = player.Hitbox; this.target = index1; if (player.dead || player.npcTypeNoAggro[this.type] && !flag1) faceTarget = false; if (!faceTarget) return; float num5 = (float) ((double) (player.width + player.height + this.width + this.height) / 4.0 + 800.0); float num6 = num1 - (float) player.aggro; if (player.itemAnimation == 0 && player.aggro < 0 && (double) num6 > (double) num5 && this.oldTarget >= 0 && this.oldTarget < (int) byte.MaxValue) return; this.direction = (double) this.targetRect.Center.X < (double) this.Center.X ? -1 : 1; this.directionY = (double) this.targetRect.Center.Y < (double) this.Center.Y ? -1 : 1; } } public void TargetClosest(bool faceTarget = true) { float num1 = 0.0f; float num2 = 0.0f; bool flag = false; int num3 = -1; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && !Main.player[index].dead && !Main.player[index].ghost) { float num4 = Math.Abs(Main.player[index].position.X + (float) (Main.player[index].width / 2) - this.position.X + (float) (this.width / 2)) + Math.Abs(Main.player[index].position.Y + (float) (Main.player[index].height / 2) - this.position.Y + (float) (this.height / 2)) - (float) Main.player[index].aggro; if (Main.player[index].npcTypeNoAggro[this.type] && this.direction != 0) num4 += 1000f; if (!flag || (double) num4 < (double) num1) { flag = true; num3 = -1; num2 = Math.Abs(Main.player[index].position.X + (float) (Main.player[index].width / 2) - this.position.X + (float) (this.width / 2)) + Math.Abs(Main.player[index].position.Y + (float) (Main.player[index].height / 2) - this.position.Y + (float) (this.height / 2)); num1 = num4; this.target = index; } if (Main.player[index].tankPet >= 0 && !Main.player[index].npcTypeNoAggro[this.type]) { int tankPet = Main.player[index].tankPet; float num5 = Math.Abs(Main.projectile[tankPet].position.X + (float) (Main.projectile[tankPet].width / 2) - this.position.X + (float) (this.width / 2)) + Math.Abs(Main.projectile[tankPet].position.Y + (float) (Main.projectile[tankPet].height / 2) - this.position.Y + (float) (this.height / 2)) - 200f; if ((double) num5 < (double) num1 && (double) num5 < 200.0 && Collision.CanHit(this.Center, 1, 1, Main.projectile[tankPet].Center, 1, 1)) num3 = tankPet; } } } if (num3 >= 0) { int index = num3; this.targetRect = new Microsoft.Xna.Framework.Rectangle((int) Main.projectile[index].position.X, (int) Main.projectile[index].position.Y, Main.projectile[index].width, Main.projectile[index].height); this.direction = 1; if ((double) (this.targetRect.X + this.targetRect.Width / 2) < (double) this.position.X + (double) (this.width / 2)) this.direction = -1; this.directionY = 1; if ((double) (this.targetRect.Y + this.targetRect.Height / 2) < (double) this.position.Y + (double) (this.height / 2)) this.directionY = -1; } else { if (this.target < 0 || this.target >= (int) byte.MaxValue) this.target = 0; this.targetRect = new Microsoft.Xna.Framework.Rectangle((int) Main.player[this.target].position.X, (int) Main.player[this.target].position.Y, Main.player[this.target].width, Main.player[this.target].height); if (Main.player[this.target].dead) faceTarget = false; if (Main.player[this.target].npcTypeNoAggro[this.type] && this.direction != 0) faceTarget = false; if (faceTarget) { int aggro = Main.player[this.target].aggro; int num6 = (Main.player[this.target].height + Main.player[this.target].width + this.height + this.width) / 4; if (Main.player[this.target].itemAnimation != 0 || Main.player[this.target].aggro >= 0 || this.oldTarget < 0 || this.oldTarget > 254) { this.direction = 1; if ((double) (this.targetRect.X + this.targetRect.Width / 2) < (double) this.position.X + (double) (this.width / 2)) this.direction = -1; this.directionY = 1; if ((double) (this.targetRect.Y + this.targetRect.Height / 2) < (double) this.position.Y + (double) (this.height / 2)) this.directionY = -1; } } } if (this.confused) this.direction *= -1; if (this.direction == this.oldDirection && this.directionY == this.oldDirectionY && this.target == this.oldTarget || this.collideX || this.collideY) return; this.netUpdate = true; } public bool DoesntDespawnToInactivity() { switch (this.type) { case 8: case 9: case 11: case 12: case 14: case 15: case 36: case 40: case 41: case 88: case 89: case 90: case 91: case 92: case 96: case 97: case 99: case 100: case 113: case 114: case 115: case 118: case 119: case 128: case 129: case 130: case 131: case 134: case 135: case 136: case 246: case 247: case 248: case 249: case 263: case 267: case 328: case 379: case 380: case 392: case 393: case 394: case 396: case 397: case 398: case 400: case 422: case 437: case 438: case 439: case 440: case 488: case 492: case 493: case 507: case 517: case 548: case 549: case 551: case 564: case 565: return true; case 139: if (NPC.npcsFoundForCheckActive[134]) return true; break; case 552: case 553: case 554: case 555: case 556: case 557: case 558: case 559: case 560: case 561: case 562: case 563: case 566: case 567: case 568: case 569: case 570: case 571: case 572: case 573: case 574: case 575: case 576: case 577: case 578: if (NPC.npcsFoundForCheckActive[548]) return true; break; } return false; } public void CheckActive() { if (!this.active || this.DoesntDespawnToInactivity()) return; if (this.townNPC) { this.AddIntoPlayersTownNPCSlots(); } else { bool flag = false; Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle((int) ((double) this.position.X + (double) (this.width / 2) - (double) NPC.activeRangeX), (int) ((double) this.position.Y + (double) (this.height / 2) - (double) NPC.activeRangeY), NPC.activeRangeX * 2, NPC.activeRangeY * 2); Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) ((double) this.position.X + (double) (this.width / 2) - (double) NPC.sWidth * 0.5 - (double) this.width), (int) ((double) this.position.Y + (double) (this.height / 2) - (double) NPC.sHeight * 0.5 - (double) this.height), NPC.sWidth + this.width * 2, NPC.sHeight + this.height * 2); for (int plr = 0; plr < (int) byte.MaxValue; ++plr) { if (Main.player[plr].active) { Microsoft.Xna.Framework.Rectangle hitbox = Main.player[plr].Hitbox; if (rectangle1.Intersects(hitbox)) { flag = true; if (this.type != 25 && this.type != 30 && this.type != 33 && this.releaseOwner == (short) byte.MaxValue && this.lifeMax > 0) { if (Main.slimeRain && Main.slimeRainNPC[this.type]) Main.player[plr].nearbyActiveNPCs += this.npcSlots * Main.slimeRainNPCSlots; else Main.player[plr].nearbyActiveNPCs += this.npcSlots; } } if (rectangle2.Intersects(hitbox)) { this.timeLeft = NPC.activeTime; this.despawnEncouraged = false; if (plr == Main.myPlayer && (this.type == 604 || this.type == 605)) this.LadyBugLuck(plr, this.type == 605); } if (this.boss) flag = true; switch (this.type) { case 7: case 10: case 13: case 35: case 36: case 39: case 87: case (int) sbyte.MaxValue: case 128: case 129: case 130: case 131: case 392: case 393: case 394: case 491: case 492: flag = true; continue; case 399: if ((double) this.ai[0] == 2.0 || (double) this.ai[0] == 1.0) this.timeLeft = NPC.activeTime; flag = true; continue; case 583: case 584: case 585: if (!Main.dayTime && (double) this.ai[2] == 0.0) { flag = true; this.timeLeft = NPC.activeTime; continue; } continue; default: continue; } } } --this.timeLeft; if (this.timeLeft <= 0) flag = false; if (flag || Main.netMode == 1) return; NPC.noSpawnCycle = true; this.active = false; if (Main.netMode == 2) { this.netSkip = -1; this.life = 0; NetMessage.SendData(23, number: this.whoAmI); } if (this.extraValue > 0) NPC.RevengeManager.CacheEnemy(this); if (this.aiStyle != 6) return; for (int number = (int) this.ai[0]; number > 0; number = (int) Main.npc[number].ai[0]) { if (Main.npc[number].active) { Main.npc[number].active = false; if (Main.netMode == 2) { Main.npc[number].life = 0; Main.npc[number].netSkip = -1; NetMessage.SendData(23, number: number); } } } } } private void AddIntoPlayersTownNPCSlots() { Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle((int) ((double) this.position.X + (double) (this.width / 2) - (double) NPC.townRangeX), (int) ((double) this.position.Y + (double) (this.height / 2) - (double) NPC.townRangeY), NPC.townRangeX * 2, NPC.townRangeY * 2); for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && rectangle.Intersects(Main.player[index].Hitbox)) Main.player[index].townNPCs += this.npcSlots; } } public void checkDead() { if (!this.active || this.realLife >= 0 && this.realLife != this.whoAmI || this.life > 0) return; if (this.type == 604 || this.type == 605) NPC.LadyBugKilled(this.Center, this.type == 605); if (this.type == 397 || this.type == 396) { if ((double) this.ai[0] == -2.0) return; this.ai[0] = -2f; this.life = this.lifeMax; this.netUpdate = true; this.dontTakeDamage = true; if (Main.netMode == 1) return; int index = NPC.NewNPC((int) this.Center.X, (int) this.Center.Y, 400); Main.npc[index].ai[3] = this.ai[3]; Main.npc[index].netUpdate = true; } else if (this.type == 398 && (double) this.ai[0] != 2.0) { this.ai[0] = 2f; this.life = this.lifeMax; this.netUpdate = true; this.dontTakeDamage = true; } else if ((this.type == 517 || this.type == 422 || this.type == 507 || this.type == 493) && (double) this.ai[2] != 1.0) { this.ai[2] = 1f; this.ai[1] = 0.0f; this.life = this.lifeMax; this.dontTakeDamage = true; this.netUpdate = true; } else if (this.type == 548 && (double) this.ai[1] != 1.0) { this.ai[1] = 1f; this.ai[0] = 0.0f; this.life = this.lifeMax; this.dontTakeDamageFromHostiles = true; this.netUpdate = true; } else { NPC.noSpawnCycle = true; if (this.townNPC && this.type != 37 && this.type != 453) { if (Main.netMode != 2) this.NPCLuck(); bool flag = true; NetworkText fullNetName = this.GetFullNetName(); int index1 = 19; if (this.type == 369 || NPCID.Sets.IsTownPet[this.type]) { index1 = 36; flag = false; } NetworkText networkText = NetworkText.FromKey(Lang.misc[index1].Key, (object) fullNetName); if (flag) { for (int index2 = 0; index2 < (int) byte.MaxValue; ++index2) { Player player = Main.player[index2]; if (player != null && player.active && player.difficulty != (byte) 2) { flag = false; break; } } } if (flag) this.DropTombstoneTownNPC(networkText); switch (Main.netMode) { case 0: Main.NewText(networkText.ToString(), G: (byte) 25, B: (byte) 25); break; case 2: ChatHelper.BroadcastChatMessage(networkText, new Color((int) byte.MaxValue, 25, 25)); break; } } if (Main.netMode != 1 && !Main.dayTime && this.type == 54 && !NPC.AnyNPCs(35)) { for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && !Main.player[index].dead && Main.player[index].killClothier) { NPC.SpawnSkeletron(); break; } } } if (this.townNPC && Main.netMode != 1 && this.homeless && WorldGen.prioritizedTownNPCType == this.type) WorldGen.prioritizedTownNPCType = 0; if (this.DeathSound != null) SoundEngine.PlaySound(this.DeathSound, this.position); if (this.type == 13 || this.type == 14 || this.type == 15) this.DropEoWLoot(); else if (this.type == 134) { Vector2 position1 = this.position; Vector2 center = Main.player[this.target].Center; float num1 = 1E+08f; Vector2 position2 = this.position; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && (Main.npc[index].type == 134 || Main.npc[index].type == 135 || Main.npc[index].type == 136)) { float num2 = Math.Abs(Main.npc[index].Center.X - center.X) + Math.Abs(Main.npc[index].Center.Y - center.Y); if ((double) num2 < (double) num1) { num1 = num2; position2 = Main.npc[index].position; } } } this.position = position2; this.NPCLoot(); this.position = position1; } else this.NPCLoot(); this.active = false; DD2Event.CheckProgress(this.type); this.CheckProgressFrostMoon(); this.CheckProgressPumpkinMoon(); int npcInvasionGroup = NPC.GetNPCInvasionGroup(this.type); if (npcInvasionGroup <= 0 || npcInvasionGroup != Main.invasionType) return; int num = 1; switch (this.type) { case 216: num = 5; break; case 387: num = 0; break; case 395: num = 10; break; case 471: num = 10; break; case 472: num = 0; break; case 491: num = 10; break; } if (num <= 0) return; Main.invasionSize -= num; if (Main.invasionSize < 0) Main.invasionSize = 0; if (Main.netMode != 1) Main.ReportInvasionProgress(Main.invasionSizeStart - Main.invasionSize, Main.invasionSizeStart, npcInvasionGroup + 3, 0); if (Main.netMode != 2) return; NetMessage.SendData(78, number: Main.invasionProgress, number2: ((float) Main.invasionProgressMax), number3: ((float) Main.invasionProgressIcon)); } } public void DropTombstoneTownNPC(NetworkText deathText) { if (Main.netMode == 1) return; float num1 = 0.1f; if (Main.rand.Next(2) == 0) num1 = -0.1f; float num2 = (float) Main.rand.Next(-35, 36) * 0.1f; while ((double) num2 < 2.0 && (double) num2 > -2.0) num2 += (float) Main.rand.Next(-30, 31) * 0.1f; int num3 = Main.rand.Next(6); int Type = this.type == 17 || this.type == 441 ? Main.rand.Next(5) + 527 : (num3 != 0 ? num3 + 200 : 43); int index = Projectile.NewProjectile(this.position.X + (float) (this.width / 2), this.position.Y + (float) (this.height / 2), (float) Main.rand.Next(10, 30) * num1 + num2, (float) Main.rand.Next(-40, -20) * 0.1f, Type, 0, 0.0f, Main.myPlayer); Main.projectile[index].miscText = deathText.ToString(); } public static int GetNPCInvasionGroup(int npcID) { int num = 0; if (npcID <= 216) { if (npcID <= 111) { if ((uint) (npcID - 26) > 3U && npcID != 111) goto label_18; } else if ((uint) (npcID - 143) > 2U) { if ((uint) (npcID - 212) <= 4U) goto label_13; else goto label_18; } else { num = 2; goto label_18; } } else if (npcID <= 395) { switch (npcID - 305) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 20: case 21: case 22: case 24: case 25: num = -2; goto label_18; case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 23: case 26: case 27: case 28: case 29: case 30: case 31: case 32: goto label_18; case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: num = -1; goto label_18; default: switch (npcID - 381) { case 0: case 1: case 2: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 14: num = 4; goto label_18; default: goto label_18; } } } else if ((uint) (npcID - 471) > 1U) { if (npcID != 491) { if ((uint) (npcID - 547) <= 31U) { num = -3; goto label_18; } else goto label_18; } else goto label_13; } num = 1; goto label_18; label_13: num = 3; label_18: return num; } private void DropEoWLoot(bool fromCheckDead = true) { bool flag = true; for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && (Main.npc[index].type == 13 || Main.npc[index].type == 14 || Main.npc[index].type == 15)) { flag = false; break; } } if (flag) { this.boss = true; this.NPCLoot(); } else this.NPCLoot(); } private void CheckProgressFrostMoon() { if (!Main.snowMoon) return; NetworkText text = NetworkText.Empty; int[] numArray = new int[21] { 0, 25, 15, 10, 30, 100, 160, 180, 200, 250, 300, 375, 450, 525, 675, 850, 1025, 1325, 1550, 2000, 0 }; int progressMax = numArray[NPC.waveNumber]; switch (NPC.waveNumber) { case 1: text = Lang.GetInvasionWaveText(2, (short) 338, (short) 350); break; case 2: text = Lang.GetInvasionWaveText(3, (short) 338, (short) 350, (short) 342, (short) 348); break; case 3: text = Lang.GetInvasionWaveText(4, (short) 344, (short) 338, (short) 350, (short) 342); break; case 4: text = Lang.GetInvasionWaveText(5, (short) 344, (short) 338, (short) 350, (short) 348); break; case 5: text = Lang.GetInvasionWaveText(6, (short) 344, (short) 350, (short) 348, (short) 347); break; case 6: text = Lang.GetInvasionWaveText(7, (short) 346, (short) 342, (short) 350, (short) 338); break; case 7: text = Lang.GetInvasionWaveText(8, (short) 346, (short) 347, (short) 350, (short) 348, (short) 351); break; case 8: text = Lang.GetInvasionWaveText(9, (short) 346, (short) 344, (short) 348, (short) 347, (short) 342); break; case 9: text = Lang.GetInvasionWaveText(10, (short) 346, (short) 344, (short) 351, (short) 338, (short) 347); break; case 10: text = Lang.GetInvasionWaveText(11, (short) 345, (short) 352, (short) 338, (short) 342); break; case 11: text = Lang.GetInvasionWaveText(12, (short) 345, (short) 344, (short) 342, (short) 343, (short) 338); break; case 12: text = Lang.GetInvasionWaveText(13, (short) 345, (short) 346, (short) 342, (short) 352, (short) 343, (short) 347); break; case 13: text = Lang.GetInvasionWaveText(14, (short) 345, (short) 346, (short) 344, (short) 343, (short) 351); break; case 14: text = Lang.GetInvasionWaveText(15, (short) 345, (short) 346, (short) 344, (short) 343, (short) 347); break; case 15: text = Lang.GetInvasionWaveText(16, (short) 345, (short) 346, (short) 344, (short) 343, (short) 352); break; case 16: text = Lang.GetInvasionWaveText(17, (short) 345, (short) 346, (short) 344, (short) 343, (short) 351, (short) 347); break; case 17: text = Lang.GetInvasionWaveText(18, (short) 345, (short) 346, (short) 344, (short) 343, (short) 348, (short) 351); break; case 18: text = Lang.GetInvasionWaveText(19, (short) 345, (short) 346, (short) 344, (short) 343); break; case 19: text = Lang.GetInvasionWaveText(-1, (short) 345, (short) 346, (short) 344); break; } float num = 0.0f; switch (this.type) { case 338: case 339: case 340: num = 1f; break; case 341: num = 20f; break; case 342: num = 2f; break; case 343: num = 18f; break; case 344: num = 50f; break; case 345: num = 150f; break; case 346: num = 100f; break; case 347: num = 8f; break; case 348: case 349: num = 4f; break; case 350: num = 3f; break; } if (Main.expertMode) num *= 2f; float waveKills = NPC.waveKills; NPC.waveKills += num; if ((double) NPC.waveKills >= (double) progressMax && progressMax != 0) { NPC.waveKills = 0.0f; ++NPC.waveNumber; progressMax = numArray[NPC.waveNumber]; if (text != NetworkText.Empty) { switch (Main.netMode) { case 0: Main.NewText(text.ToString(), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(text, new Color(175, 75, (int) byte.MaxValue)); break; } if (NPC.waveNumber == 15) AchievementsHelper.NotifyProgressionEvent(14); } } if ((double) NPC.waveKills == (double) waveKills || (double) num == 0.0) return; if (Main.netMode != 1) Main.ReportInvasionProgress((int) NPC.waveKills, progressMax, 1, NPC.waveNumber); if (Main.netMode != 2) return; NetMessage.SendData(78, number: Main.invasionProgress, number2: ((float) Main.invasionProgressMax), number3: 1f, number4: ((float) NPC.waveNumber)); } private void CheckProgressPumpkinMoon() { if (!Main.pumpkinMoon) return; NetworkText text = NetworkText.Empty; int[] numArray = new int[16] { 0, 25, 40, 50, 80, 100, 160, 180, 200, 250, 300, 375, 450, 525, 675, 0 }; int progressMax = numArray[NPC.waveNumber]; switch (NPC.waveNumber) { case 1: text = Lang.GetInvasionWaveText(2, (short) 305, (short) 326); break; case 2: text = Lang.GetInvasionWaveText(3, (short) 305, (short) 326, (short) 329); break; case 3: text = Lang.GetInvasionWaveText(4, (short) 305, (short) 326, (short) 329, (short) 325); break; case 4: text = Lang.GetInvasionWaveText(5, (short) 305, (short) 326, (short) 329, (short) 330, (short) 325); break; case 5: text = Lang.GetInvasionWaveText(6, (short) 326, (short) 329, (short) 330, (short) 325); break; case 6: text = Lang.GetInvasionWaveText(7, (short) 305, (short) 329, (short) 330, (short) 327); break; case 7: text = Lang.GetInvasionWaveText(8, (short) 326, (short) 329, (short) 330, (short) 327); break; case 8: text = Lang.GetInvasionWaveText(9, (short) 305, (short) 315, (short) 325, (short) 327); break; case 9: text = Lang.GetInvasionWaveText(10, (short) 326, (short) 329, (short) 330, (short) 315, (short) 325, (short) 327); break; case 10: text = Lang.GetInvasionWaveText(11, (short) 305, (short) 326, (short) 329, (short) 330, (short) 315, (short) 325, (short) 327); break; case 11: text = Lang.GetInvasionWaveText(12, (short) 326, (short) 329, (short) 330, (short) 315, (short) 325, (short) 327); break; case 12: text = Lang.GetInvasionWaveText(13, (short) 329, (short) 330, (short) 315, (short) 325, (short) 327); break; case 13: text = Lang.GetInvasionWaveText(14, (short) 315, (short) 325, (short) 327); break; case 14: text = Lang.GetInvasionWaveText(-1, (short) 325, (short) 327); break; } float num = 0.0f; switch (this.type) { case 305: case 306: case 307: case 308: case 309: case 310: case 311: case 312: case 313: case 314: num = 1f; break; case 315: num = 25f; break; case 325: num = 75f; break; case 326: num = 2f; break; case 327: num = 150f; break; case 329: num = 4f; break; case 330: num = 8f; break; } if (Main.expertMode) num *= 2f; float waveKills = NPC.waveKills; NPC.waveKills += num; if ((double) NPC.waveKills >= (double) progressMax && progressMax != 0) { NPC.waveKills = 0.0f; ++NPC.waveNumber; progressMax = numArray[NPC.waveNumber]; if (text != NetworkText.Empty) { switch (Main.netMode) { case 0: Main.NewText(text.ToString(), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(text, new Color(175, 75, (int) byte.MaxValue)); break; } if (NPC.waveNumber == 15) AchievementsHelper.NotifyProgressionEvent(15); } } if ((double) NPC.waveKills == (double) waveKills || (double) num == 0.0) return; if (Main.netMode != 1) Main.ReportInvasionProgress((int) NPC.waveKills, progressMax, 2, NPC.waveNumber); if (Main.netMode != 2) return; NetMessage.SendData(78, number: Main.invasionProgress, number2: ((float) Main.invasionProgressMax), number3: 2f, number4: ((float) NPC.waveNumber)); } public static void ResetKillCount() { for (int index = 0; index < 663; ++index) NPC.killCount[index] = 0; } public bool AnyInteractions() { if (Main.netMode == 0) { if (this.playerInteraction[Main.myPlayer]) return true; } else { for (int index = 0; index < (int) byte.MaxValue; ++index) { if (this.playerInteraction[index]) return true; } } return false; } public static void SetEventFlagCleared(ref bool eventFlag, int gameEventId) { bool flag = eventFlag; eventFlag = true; if (eventFlag == flag) return; NPC.OnGameEventClearedForTheFirstTime(gameEventId); } public static void OnGameEventClearedForTheFirstTime(int gameEventId) { switch (gameEventId) { case 4: break; case 21: case 22: break; default: LanternNight.NextNightIsLanternNight = true; break; } } public void NPCLootOld() { if (Main.netMode == 1 || this.type >= 663) return; bool flag1 = false; bool flag2 = NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3; Player closestPlayer = Main.player[(int) Player.FindClosest(this.position, this.width, this.height)]; if (!flag1) { this.CountKillForAchievements(); if (this.GetWereThereAnyInteractions()) this.CountKillForBannersAndDropThem(); } if (this.type == 23 && Main.hardMode || this.SpawnedFromStatue && NPCID.Sets.NoEarlymodeLootWhenSpawnedFromStatue[this.type] && !Main.hardMode || this.SpawnedFromStatue && (double) NPCID.Sets.StatueSpawnedDropRarity[this.type] != -1.0 && ((double) Main.rand.NextFloat() >= (double) NPCID.Sets.StatueSpawnedDropRarity[this.type] || !this.AnyInteractions())) return; this.NPCLoot_DropFood(closestPlayer); if (this.type == 86) { int range = Main.expertMode ? 30 : 40; if (closestPlayer.RollLuck(range) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3260); } if (Main.slimeRain && Main.slimeRainNPC[this.type] && !flag1 && !NPC.AnyNPCs(50)) { int num = 150; if (NPC.downedSlimeKing) num /= 2; ++Main.slimeRainKillCount; if (Main.slimeRainKillCount >= num) { NPC.SpawnOnPlayer(closestPlayer.whoAmI, 50); Main.slimeRainKillCount = -num / 2; } } if (!closestPlayer.ZoneDungeon && !flag1) { bool flag3 = false; if (Main.expertMode && closestPlayer.RollLuck(5) == 0) flag3 = true; else if (closestPlayer.RollLuck(5) == 0) flag3 = true; if (this.boss) flag3 = false; switch (this.type) { case 1: case 13: case 14: case 15: case 535: flag3 = false; break; } if (((!Main.hardMode || this.lifeMax <= 1 || this.damage <= 0 || this.friendly ? 0 : ((double) this.position.Y > Main.rockLayer * 16.0 ? 1 : 0)) & (flag3 ? 1 : 0)) != 0 && this.type != 121 && (double) this.value > 0.0) { if (closestPlayer.ZoneCorrupt || closestPlayer.ZoneCrimson) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 521); if (closestPlayer.ZoneHallow) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 520); } } if (this.type == 1 && (double) this.ai[1] > 0.0) { int Type = (int) this.ai[1]; if (Type > 0 && Type < 5045) { int forSlimeItemDrop = NPC.GetStackForSlimeItemDrop(Type); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type, forSlimeItemDrop); } } if (this.type == 22 && this.GivenOrTypeName == "Andrew") Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 867); if (this.type == 178 && this.GivenOrTypeName == "Whitney") Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4372); if (this.type == 353 && closestPlayer.RollLuck(8) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3352); if (this.type == 441 && closestPlayer.RollLuck(8) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3351); if (this.type == 227 && closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3350); if (this.type == 550 && closestPlayer.RollLuck(6) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3821); if (this.type == 208 && closestPlayer.RollLuck(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3548, Main.rand.Next(30, 61)); if (this.type == 207 && closestPlayer.RollLuck(8) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3349); if (Main.hardMode && !flag1 && (double) this.value > 0.0) { if (!NPC.downedMechBoss1 && closestPlayer.RollLuck(2500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 556); else if (!NPC.downedMechBoss2 && closestPlayer.RollLuck(2500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 544); else if (!NPC.downedMechBoss3 && closestPlayer.RollLuck(2500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 557); } if (Main.halloween && (double) this.value > 0.0 && (double) this.value < 500.0 && this.damage < 40 && this.defense < 20 && !flag1) { if (closestPlayer.RollLuck(2000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1825); else if (closestPlayer.RollLuck(2000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1827); } if (Main.hardMode && (double) this.value > 0.0 && !flag1) { if (closestPlayer.RollLuck(2500) == 0 && closestPlayer.ZoneJungle) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1533); if (closestPlayer.RollLuck(2500) == 0 && closestPlayer.ZoneCorrupt) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1534); if (closestPlayer.RollLuck(2500) == 0 && closestPlayer.ZoneCrimson) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1535); if (closestPlayer.RollLuck(2500) == 0 && closestPlayer.ZoneHallow) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1536); if (closestPlayer.RollLuck(2500) == 0 && closestPlayer.ZoneSnow) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1537); } if (DD2Event.Ongoing) { switch (this.type) { case 552: case 553: case 554: DD2Event.AnnounceGoblinDeath(this); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 555: case 556: case 557: case 561: case 562: case 563: case 570: case 571: case 572: case 573: if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 558: case 559: case 560: case 568: case 569: if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 564: if (Main.rand.Next(7) == 0) Item.NewItem(this.position, this.Size, 3864); if (Main.rand.Next(5) == 0) { if (Main.rand.Next(2) == 0) Item.NewItem(this.position, this.Size, 3815, 4); else Item.NewItem(this.position, this.Size, 3814); } if (Main.rand.Next(Main.expertMode ? 2 : 3) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3857, (short) 3855)); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 565: if (Main.rand.Next(14) == 0) Item.NewItem(this.position, this.Size, 3864); if (Main.rand.Next(10) == 0) { if (Main.rand.Next(2) == 0) Item.NewItem(this.position, this.Size, 3815, 4); else Item.NewItem(this.position, this.Size, 3814); } if (Main.rand.Next(6) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3857, (short) 3855)); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 574: case 575: case 578: if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 576: if (Main.rand.Next(7) == 0) Item.NewItem(this.position, this.Size, 3865); if (Main.rand.Next(Main.expertMode ? 2 : 3) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3809, (short) 3811, (short) 3810, (short) 3812)); if (Main.rand.Next(Main.expertMode ? 2 : 3) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3852, (short) 3854, (short) 3823, (short) 3835, (short) 3836)); if (Main.rand.Next(Main.expertMode ? 4 : 5) == 0) Item.NewItem(this.position, this.Size, 3856); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 577: if (Main.rand.Next(14) == 0) Item.NewItem(this.position, this.Size, 3865); if (Main.rand.Next(6) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3809, (short) 3811, (short) 3810, (short) 3812)); if (Main.rand.Next(6) == 0) Item.NewItem(this.position, this.Size, (int) Utils.SelectRandom(Main.rand, (short) 3852, (short) 3854, (short) 3823, (short) 3835, (short) 3836)); if (Main.rand.Next(10) == 0) Item.NewItem(this.position, this.Size, 3856); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; } } if (this.type == 68) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1169); if (Main.snowMoon) { int waveNumber = NPC.waveNumber; if (Main.expertMode) waveNumber += 7; int range = (int) ((double) (30 - waveNumber) / 2.5); if (Main.expertMode) range -= 2; if (range < 1) range = 1; if (this.type == 344) NPC.SetEventFlagCleared(ref NPC.downedChristmasTree, 21); if (this.type == 345) NPC.SetEventFlagCleared(ref NPC.downedChristmasIceQueen, 20); if (this.type == 346) NPC.SetEventFlagCleared(ref NPC.downedChristmasSantank, 22); if ((this.type == 344 || this.type == 345 || this.type == 346) && closestPlayer.RollLuck(range) == 0 && waveNumber >= 15) { int maxValue = 4; if (waveNumber == 16) maxValue = 4; if (waveNumber == 17) maxValue = 3; if (waveNumber == 18) maxValue = 3; if (waveNumber == 19) maxValue = 2; if (waveNumber >= 20) maxValue = 2; if (Main.expertMode && Main.rand.Next(3) == 0) --maxValue; if (Main.rand.Next(maxValue) == 0) { if (this.type == 344) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1962); if (this.type == 345) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1960); if (this.type == 346) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1961); } } if (closestPlayer.RollLuck(range) == 0) { if (this.type == 344) { int num = Main.rand.Next(3); if (closestPlayer.RollLuck(15) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1871, pfix: -1); } else { if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1916); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1928, pfix: -1); if (num == 2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1930, pfix: -1); } } if (this.type == 346) { int num = Main.rand.Next(2); if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1910, pfix: -1); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1929, pfix: -1); } if (this.type == 345) { if (NPC.waveNumber >= 15 && closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1914); else if (closestPlayer.RollLuck(15) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1959); } else { int num = Main.rand.Next(3); if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1931, pfix: -1); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1946, pfix: -1); if (num == 2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1947, pfix: -1); } } } } if (this.type == 341) { int num = Main.rand.Next(5, 11); for (int index = 0; index < num; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (Main.xMas) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1869); } if (this.type >= 338 && this.type <= 340 && closestPlayer.RollLuck(5) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type >= 338 && this.type <= 340 && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1943 + Main.rand.Next(3)); if (this.type == 342 && Main.rand.Next(3) != 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (Main.pumpkinMoon) { if (this.type == 325) NPC.SetEventFlagCleared(ref NPC.downedHalloweenTree, 4); if (this.type == 327) NPC.SetEventFlagCleared(ref NPC.downedHalloweenKing, 5); int waveNumber = NPC.waveNumber; if (Main.expertMode) waveNumber += 6; int maxValue = (int) ((double) (17 - waveNumber) / 1.25); if (Main.expertMode) --maxValue; if (maxValue < 1) maxValue = 1; if (waveNumber >= 15) { if (this.type == 325) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1855); if (this.type == 327) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1856); } if (Main.rand.Next(maxValue) == 0) { if (this.type == 315 && Main.rand.Next(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1857); if (this.type >= 305 && this.type <= 314 && Main.rand.Next(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Main.rand.Next(1788, 1791)); if (this.type == 325) { int num = Main.rand.Next(5); if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1829); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1831); if (num == 2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1835, pfix: -1); if (num == 2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1836, Main.rand.Next(30, 61)); if (num == 3) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1837); if (num == 4) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1845, pfix: -1); if (Main.expertMode && Main.rand.Next(5) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4444); } if (this.type == 327) { int num = Main.rand.Next(7); if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1782, pfix: -1); if (num == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1783, Main.rand.Next(50, 101)); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1784, pfix: -1); if (num == 1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1785, Main.rand.Next(25, 51)); if (num == 2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1811); if (num == 3) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1826, pfix: -1); if (num == 4) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1801, pfix: -1); if (num == 5) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1802, pfix: -1); if (num == 6) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1798); } } } if (this.type == 325) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1729, Main.rand.Next(30, 51)); if (this.type == 326) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1729, Main.rand.Next(1, 5)); if (this.type >= 305 && this.type <= 314 && Main.rand.Next(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 326 && Main.rand.Next(6) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 329 && Main.rand.Next(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 330 && Main.rand.Next(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 315) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (Main.halloween && this.lifeMax > 1 && this.damage > 0 && !this.friendly && this.type != 121 && this.type != 23 && (double) this.value > 0.0 && closestPlayer.RollLuck(80) == 0 && !flag1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1774); if (Main.xMas && this.lifeMax > 1 && this.damage > 0 && !this.friendly && this.type != 121 && (double) this.value > 0.0 && closestPlayer.RollLuck(13) == 0 && !flag1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1869); if (this.lifeMax > 5 && (double) this.value > 0.0 && !this.friendly && Main.hardMode && (double) this.position.Y / 16.0 > (double) Main.UnderworldLayer && !flag1 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2701, Main.rand.Next(20, 51)); if (this.type == 325 || this.type == 327 || this.type == 344 || this.type == 345 || this.type == 346) { int num = Main.rand.Next(6) + 6; for (int index = 0; index < num; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); } if (this.type == 156 && closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1518); if (this.type == 243 && closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1519); if (this.type >= 269 && this.type <= 280 && closestPlayer.RollLuck(450) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1517); if ((this.type == 158 || this.type == 159) && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1520); if (this.type == 48 && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1516); if (this.type == 176 && closestPlayer.RollLuck(150) == 0 && NPC.downedMechBossAny) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1521); if (this.type == 205 && closestPlayer.RollLuck(2) == 0 && NPC.downedMechBossAny) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1611); if (this.type == 483 || this.type == 482) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3086, Main.rand.Next(5, 11), pfix: -1); if (!Main.hardMode && closestPlayer.RollLuck(100) == 0 && this.HasPlayerTarget && this.lifeMax > 5 && !this.friendly && !flag1 && closestPlayer.RollLuck(4) == 0 && (double) this.position.Y / 16.0 > (double) (Main.maxTilesY - 350) && NPC.downedBoss3) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3282, pfix: -1); if (Main.hardMode && this.HasPlayerTarget && Main.player[this.target].ZoneSnow && closestPlayer.RollLuck(300) == 0 && this.HasPlayerTarget && this.lifeMax > 5 && !this.friendly && (double) this.value > 0.0 && !flag1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3289, pfix: -1); else if (Main.hardMode && closestPlayer.RollLuck(200) == 0 && this.HasPlayerTarget && this.lifeMax > 5 && !this.friendly && (double) this.value > 0.0 && !flag1) { if (Main.player[this.target].ZoneJungle && NPC.downedMechBossAny) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3286, pfix: -1); else if (Main.player[this.target].ZoneDungeon && NPC.downedPlantBoss && Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3291, pfix: -1); else if ((double) this.position.Y / 16.0 > (Main.rockLayer + (double) (Main.maxTilesY * 2)) / 3.0 && !Main.player[this.target].ZoneDungeon && Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3290, pfix: -1); } int num1 = 1; if (Main.expertMode && Main.rand.Next(2) == 0) num1 = 2; for (int index = 0; index < num1; ++index) { if (this.type == 461 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 497, pfix: -1); if ((this.type == 159 || this.type == 158) && closestPlayer.RollLuck(35) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 900, pfix: -1); if (this.type == 251 && closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1311, pfix: -1); if (NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3) { if (this.type == 477) { if (closestPlayer.RollLuck(20) == 0 && NPC.downedPlantBoss) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2770, pfix: -1); ++index; } if (closestPlayer.RollLuck(4) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1570, pfix: -1); ++index; } else if (closestPlayer.RollLuck(3) == 0 && NPC.downedPlantBoss) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3292, pfix: -1); ++index; } } if (this.type == 253 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1327, pfix: -1); } if (NPC.downedPlantBoss) { if (this.type == 460 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3098, pfix: -1); if (this.type == 468 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3105, pfix: -1); if (this.type == 466 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3106, pfix: -1); if (this.type == 467 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3249, pfix: -1); if (this.type == 463 && closestPlayer.RollLuck(25) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3107, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3108, Main.rand.Next(100, 201), pfix: -1); } } } if (Main.bloodMoon && Main.hardMode && closestPlayer.RollLuck(1000) == 0 && (double) this.value > 0.0 && !flag1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1314, pfix: -1); if (this.type == 77 && closestPlayer.RollLuck(150) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 723, pfix: -1); if (this.type == 47 && closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4670, pfix: -1); if (this.type == 464 && closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4671, pfix: -1); if (closestPlayer.RollLuck(100) == 0 || Main.expertMode && closestPlayer.RollLuck(100) == 0) { int Type1 = -1; int Type2 = -1; switch (this.type) { case 34: case 83: case 84: case 179: case 289: Type1 = 891; break; case 42: case 141: case 176: case 231: case 232: case 233: case 234: case 235: Type1 = 887; break; case 75: Type1 = Main.rand.Next(2) != 0 ? 890 : 889; if (closestPlayer.RollLuck(100) == 0) { Type2 = Type1 != 889 ? 889 : 890; break; } break; case 77: case 273: case 274: case 275: case 276: Type1 = 886; break; case 78: case 82: Type1 = 889; break; case 79: Type1 = Main.rand.Next(2) != 0 ? 890 : 888; if (closestPlayer.RollLuck(100) == 0) { Type2 = Type1 != 888 ? 888 : 890; break; } break; case 80: case 93: case 109: Type1 = 893; break; case 81: case 183: Type1 = 888; break; case 94: case 182: Type1 = 892; break; case 102: case 104: case 269: case 270: case 271: case 272: Type1 = 885; break; case 103: Type1 = 890; break; case 480: Type1 = 3781; break; } if (Type1 != -1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type1, pfix: -1); if (Type2 != -1) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type2, pfix: -1); } int num2 = 1; if (Main.expertMode && Main.rand.Next(2) == 0) num2 = 2; for (int index = 0; index < num2; ++index) { if (this.type == 290) { if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1513, pfix: -1); else if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 938, pfix: -1); } if (this.type == 287 && closestPlayer.RollLuck(6) == 0) { if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 963, pfix: -1); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 977, pfix: -1); } if (this.type == 291) { if (closestPlayer.RollLuck(12) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1300, pfix: -1); else if (closestPlayer.RollLuck(12) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1254, pfix: -1); } if (this.type == 292) { if (closestPlayer.RollLuck(12) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1514, pfix: -1); else if (closestPlayer.RollLuck(12) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 679, pfix: -1); } if (this.type == 293 && closestPlayer.RollLuck(18) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 759, pfix: -1); if ((this.type == 281 || this.type == 282) && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1446, pfix: -1); if ((this.type == 283 || this.type == 284) && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1444, pfix: -1); if ((this.type == 285 || this.type == 286) && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1445, pfix: -1); if (this.type >= 269 && this.type <= 280) { if (closestPlayer.RollLuck(400) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1183, pfix: -1); else if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1266, pfix: -1); else if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 671, pfix: -1); } } if (this.lifeMax > 100 && this.type != 288 && (double) this.value > 0.0 && this.HasPlayerTarget && Main.hardMode && NPC.downedPlantBoss && Main.player[this.target].ZoneDungeon && !flag1) { int range = 13; if (Main.expertMode) range = 9; if (closestPlayer.RollLuck(range) == 0 && Main.wallDungeon[(int) Main.tile[(int) this.Center.X / 16, (int) this.Center.Y / 16].wall]) NPC.NewNPC((int) this.Center.X, (int) this.Center.Y, 288); } if (this.type == 288) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1508, Main.rand.Next(1, 3), pfix: -1); if (this.type == 156 && closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 683, pfix: -1); if ((this.type == 195 || this.type == 196) && (Main.expertMode || closestPlayer.RollLuck(2) == 0)) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3102, pfix: -1); if (this.type == 245) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2110, pfix: -1); if (closestPlayer.RollLuck(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1294, pfix: -1); switch (Main.rand.Next(7)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1258, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1261, Main.rand.Next(60, 100)); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1122, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 899, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1248, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1295, pfix: -1); break; case 5: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1296, pfix: -1); break; case 6: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1297, pfix: -1); break; } Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2218, Main.rand.Next(4, 9), pfix: -1); } NPC.SetEventFlagCleared(ref NPC.downedGolemBoss, 6); } if (this.type == 471 && (Main.expertMode || closestPlayer.RollLuck(2) == 0)) { if (Main.rand.Next(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3052, pfix: -1); else if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3053, pfix: -1); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3054, pfix: -1); } if (this.type == 268) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1332, Main.rand.Next(2, 6)); if (this.type == 370) { NPC.SetEventFlagCleared(ref NPC.downedFishron, 7); if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2588, pfix: -1); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2609, pfix: -1); switch (Main.rand.Next(5)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2611, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2624, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2622, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2621, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2623, pfix: -1); break; } } } if (this.type == 614) Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 281, 175, 0.0f, Main.myPlayer, -2f, (float) ((int) this.releaseOwner + 1)); if (this.type == 109 && !NPC.downedClown) { NPC.downedClown = true; if (Main.netMode == 2) NetMessage.SendData(7); } if (this.type == 153 && closestPlayer.RollLuck(17) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1328, pfix: -1); if (this.type == 120) { if (Main.expertMode) { if (closestPlayer.RollLuck(400) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1326, pfix: -1); } else if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1326, pfix: -1); } if (this.type == 49 && closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1325, pfix: -1); if (this.type == 185 && closestPlayer.RollLuck(150) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 951, pfix: -1); if (this.type == 44 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1320, pfix: -1); if (this.type == 44 && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 88, pfix: -1); if (this.type == 110 && closestPlayer.RollLuck(80) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1321, pfix: -1); if (this.type == 60 && closestPlayer.RollLuck(150) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1322, pfix: -1); if (this.type == 151 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1322, pfix: -1); if (this.type == 24 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1323, pfix: -1); if (this.type == 109 && closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1324, Main.rand.Next(1, 5), pfix: -1); if (this.type == 163 || this.type == 238) { if (closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1308, pfix: -1); if (Main.expertMode) { if (Main.rand.Next(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607, Main.rand.Next(2, 4)); else if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607, Main.rand.Next(1, 4)); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607); } else if (Main.rand.Next(4) != 0) { if (Main.rand.Next(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607, Main.rand.Next(1, 4)); else if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607, Main.rand.Next(1, 3)); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2607); } } if (Main.hardMode && (this.type == 197 || this.type == 206 || this.type == 169 || this.type == 154) && closestPlayer.RollLuck(180) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1306, pfix: -1); if (this.type == 244) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(1, 6)); if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(1, 6)); if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(1, 6)); if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(1, 6)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 662, Main.rand.Next(30, 60)); } if (this.type == 250 && closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1244, pfix: -1); if (this.type == 172) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 754, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 755, pfix: -1); } if (this.type == 110 && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 682, pfix: -1); if (this.type == 170 || this.type == 180 || this.type == 171) { if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4428, pfix: -1); else if (closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4613); } if (this.type == 154 && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1253, pfix: -1); if ((this.type == 169 || this.type == 206) && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 726, pfix: -1); if (this.type == 243) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2161, pfix: -1); if (this.type == 480 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3269, pfix: -1); if (this.type == 198 || this.type == 199 || this.type == 226) { if (closestPlayer.RollLuck(1000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1172, pfix: -1); if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1293, pfix: -1); if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2766, Main.rand.Next(1, 3), pfix: -1); } if (this.type == 78 || this.type == 79 || this.type == 80) { if (closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 870, pfix: -1); if (closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 871, pfix: -1); if (closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 872, pfix: -1); } if (this.type == 473) { switch (Main.rand.Next(5)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3008, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3014, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3012, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3015, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3023, pfix: -1); break; } } else if (this.type == 474) { switch (Main.rand.Next(5)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3006, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3007, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3013, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3016, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3020, pfix: -1); break; } } else if (this.type == 475) { switch (Main.rand.Next(4)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3029, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3030, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3051, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3022, pfix: -1); break; } } else { int type = this.type; } if (this.type == 473 || this.type == 474 || this.type == 475 || this.type == 476) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 499, Main.rand.Next(5, 11), pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 500, Main.rand.Next(5, 16), pfix: -1); } if (this.type == 85 && (double) this.value > 0.0) { if ((double) this.ai[3] == 4.0) { if (closestPlayer.RollLuck(20) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1312, pfix: -1); } else { switch (Main.rand.Next(3)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 676, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 725, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1264, pfix: -1); break; } } } else { switch (Main.rand.Next(6)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 437, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 517, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 535, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 536, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 532, pfix: -1); break; default: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 554, pfix: -1); break; } } } if (this.type == 87) { if (closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4379); else if (Main.expertMode) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 575, Main.rand.Next(5, 11) * 2); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 575, Main.rand.Next(5, 11)); } if (this.type >= 212 && this.type <= 215) { if (!flag1) { if (closestPlayer.RollLuck(8000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 905, pfix: -1); if (closestPlayer.RollLuck(4000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 855, pfix: -1); if (closestPlayer.RollLuck(2000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 854, pfix: -1); if (closestPlayer.RollLuck(2000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2584, pfix: -1); if (closestPlayer.RollLuck(1000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3033, pfix: -1); if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 672, pfix: -1); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1277); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1278); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1279); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1280); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1704); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1705); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1710); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1716); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1720); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2379); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2389); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2405); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2843); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3885); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2663); if (closestPlayer.RollLuck(150) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3904, Main.rand.Next(6, 11) * 5); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3910); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2238); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2133); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2137); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2143); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2147); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2151); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2155); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3263); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3264); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3265); } } else if (this.type == 216) { if (closestPlayer.RollLuck(2000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 905, pfix: -1); if (closestPlayer.RollLuck(1000) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 855, pfix: -1); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 854, pfix: -1); if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2584, pfix: -1); if (closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3033, pfix: -1); if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 672, pfix: -1); } else if (this.type == 491) { if (closestPlayer.RollLuck(400) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 905, pfix: -1); else if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 855, pfix: -1); else if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 854, pfix: -1); else if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2584, pfix: -1); else if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3033, pfix: -1); else if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4471, pfix: -1); else if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 672, pfix: -1); } if ((this.type == 161 || this.type == 431) && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 803 + Main.rand.Next(3)); if (this.type == 217) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1115, pfix: -1); if (this.type == 218) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1116, pfix: -1); if (this.type == 219) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1117, pfix: -1); if (this.type == 220) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1118, pfix: -1); if (this.type == 221) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1119, pfix: -1); if (this.type == 167 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 879, pfix: -1); if (this.type == 143 || this.type == 144 || this.type == 145) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 593, Main.rand.Next(5, 11)); if (this.type == 79) { if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 527); } else if (this.type == 80 && closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 528); if (this.type == 524 && closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3794, Main.rand.Next(1, 4)); if (this.type == 525) { if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3794); if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 522, Main.rand.Next(1, 4)); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 527); } if (this.type == 526) { if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3794); if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1332, Main.rand.Next(1, 4)); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 527); } if (this.type == 527) { if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3794); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 528); } if (this.type == 532) { if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3380); if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3771); } if (this.type == 528) { if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2802); if (closestPlayer.RollLuck(60) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3784 + Main.rand.Next(3)); } else if (this.type == 529) { if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2801); if (closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3784 + Main.rand.Next(3)); } if ((this.type == 49 || this.type == 51 || this.type == 150 || this.type == 93) && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 18, pfix: -1); if ((this.type == 16 || this.type == 185 || this.type == 167 || this.type == 197) && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 393, pfix: -1); if (this.type == 58 && closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 393, pfix: -1); if (this.type >= 494 && this.type <= 506) { if (closestPlayer.RollLuck(80) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 18, pfix: -1); else if (closestPlayer.RollLuck(80) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 393, pfix: -1); else if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3285, pfix: -1); } if (this.type == 21 || this.type == 201 || this.type == 202 || this.type == 203 || this.type == 322 || this.type == 323 || this.type == 324 || this.type >= 449 && this.type <= 452) { if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 954, pfix: -1); else if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 955, pfix: -1); else if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1166, pfix: -1); else if (closestPlayer.RollLuck(500) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1274, pfix: -1); } else if (this.type == 6) { if (closestPlayer.RollLuck(175) == 0) { switch (Main.rand.Next(3)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 956, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 957, pfix: -1); break; default: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 958, pfix: -1); break; } } } else if (this.type == 42 || this.type == 43 || this.type >= 231 && this.type <= 235) { if (closestPlayer.RollLuck(100) == 0) { switch (Main.rand.Next(3)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 960, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 961, pfix: -1); break; default: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 962, pfix: -1); break; } } } else if (this.type == 31 || this.type == 32 || this.type == 294 || this.type == 295 || this.type == 296) { if (closestPlayer.RollLuck(450) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 959, pfix: -1); if (closestPlayer.RollLuck(300) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1307, pfix: -1); } if ((this.type == 174 || this.type == 179 || this.type == 182 || this.type == 183) && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 996); if ((this.type == 98 || this.type == 83 || this.type == 94 || this.type == 81) && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 996); if (this.type == 101 || this.type == 98) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 522, Main.rand.Next(2, 6)); if (this.type == 98 && closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4611); if (this.type == 86) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 526); if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 856); } if (this.type == 224 && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4057); if (this.type == 186 || this.type == 432) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 40, Main.rand.Next(1, 10)); if (this.type == 225) { if (closestPlayer.RollLuck(45) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1243); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(2, 7)); } if (this.type == 537) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(2, 4)); int range = 8000; if (Main.expertMode) range = (int) ((double) range * 0.7); if (closestPlayer.RollLuck(range) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1309, pfix: -1); } if (this.type >= 333 && this.type <= 336 && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1906); if (this.netID == -4) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3111, Main.rand.Next(25, 51)); int range = 100; if (Main.expertMode) range = (int) ((double) range * 0.7); if (closestPlayer.RollLuck(range) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1309, pfix: -1); } else if (this.type == 1 || this.type == 16 || this.type == 138 || this.type == 141 || this.type == 147 || this.type == 184 || this.type == 187 || this.type == 204 || this.type == 302 || this.type >= 333 && this.type <= 336 || this.type == 535) { int Stack = Main.rand.Next(1, 3); if (this.netID == -6 || this.netID == -7 || this.netID == -8 || this.netID == -9) Stack += Main.rand.Next(1, 4); int number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Stack); if (this.netID <= 1 && this.netID != -1 && this.netID != -2 && this.netID != -5 && this.netID != -6) { Main.item[number].color = this.color; NetMessage.SendData(88, number: number, number2: 1f); } int range = 10000; if (Main.expertMode) range = (int) ((double) range * 0.7); if (closestPlayer.RollLuck(range) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1309, pfix: -1); } if (this.type == 75) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 501, Main.rand.Next(1, 4)); if (this.type == 81 || this.type == 183) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(2, 5)); if (this.type == 122) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 23, Main.rand.Next(5, 11)); if (this.type == 71) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 327); if (this.type == 2 || this.type == 317 || this.type == 318 || this.type == 190 || this.type == 191 || this.type == 192 || this.type == 193 || this.type == 194 || this.type == 133) { if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 236); else if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 38); } if (this.type == 104 && closestPlayer.RollLuck(60) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 485, pfix: -1); if (this.type == 58) { if (closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 263); else if (closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 118); } if (this.type == 102 && closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 263); if (this.type == 3 || this.type == 591 || this.type == 590 || this.type == 331 || this.type == 332 || this.type == 132 || this.type == 161 || this.type == 186 || this.type == 187 || this.type == 188 || this.type == 189 || this.type == 200 || this.type == 223 || this.type == 319 || this.type == 320 || this.type == 321 || this.type >= 430 && this.type <= 436) { if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 216, pfix: -1); if (closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1304, pfix: -1); if (this.type == 590 || this.type == 591) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 8, Main.rand.Next(5, 21)); } if ((this.type == 587 || this.type == 586) && closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4608, Main.rand.Next(5, 7)); if ((this.type == 620 || this.type == 621) && closestPlayer.RollLuck(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4608, Main.rand.Next(7, 11)); if ((this.type == 587 || this.type == 586) && closestPlayer.RollLuck(15) == 0) { switch (Main.rand.Next(3)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4273); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4381); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4325); break; } } if (this.type == 620) { if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4270); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4317); } if (this.type == 621) { if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4272); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4317); } if (this.type == 618) { if (closestPlayer.RollLuck(5) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4269); if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4054); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4608, Main.rand.Next(7, 11)); } if (!Main.dayTime && Main.bloodMoon && !this.SpawnedFromStatue && !flag1) { if ((this.type == 587 || this.type == 586 || this.type == 489 || this.type == 490 || this.type == 109 || this.type == 621 || this.type == 620 || this.type == 619) && closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4271); if ((this.type == 53 || this.type == 536 || this.type == 618) && closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4271); } if ((this.type == 489 || this.type == 490) && (Main.expertMode || closestPlayer.RollLuck(2) == 0)) { if (closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3212, pfix: -1); if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3213, pfix: -1); } if (this.type == 223 && closestPlayer.RollLuck(20) == 0) { if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1135, pfix: -1); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1136, pfix: -1); } if (this.type == 66) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 267); if ((this.type == 62 || this.type == 66) && closestPlayer.RollLuck(35) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 272, pfix: -1); if ((double) this.value > 0.0 && Main.hardMode && (double) this.position.Y / 16.0 < Main.worldSurface + 10.0 && ((double) this.Center.X / 16.0 < 380.0 || (double) this.Center.X / 16.0 > (double) (Main.maxTilesX - 380)) && !flag1 && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1315); if (this.type == 52) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 251); if (this.type == 53) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 239); if (this.type == 536) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3478); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3479); } if (this.type == 54) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 260); if (this.type == 368) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2222); if ((this.type == 69 || this.type == 581 || this.type == 580 || this.type == 508 || this.type == 509) && closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 323, Main.rand.Next(1, 3)); if (this.type == 582 && closestPlayer.RollLuck(6) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 323); if ((this.type == 580 || this.type == 508 || this.type == 581 || this.type == 509) && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3772); if (this.type == 73) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 362, Main.rand.Next(1, 3)); if (this.type == 483 || this.type == 482) { if (closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3109); if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4400); } if ((this.type == 6 || this.type == 94) && closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 68); if ((this.type == 181 || this.type == 173 || this.type == 239 || this.type == 182 || this.type == 240) && closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1330); if (this.type == 7 || this.type == 8 || this.type == 9) { if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 68, Main.rand.Next(1, 3)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 69, Main.rand.Next(3, 9)); } if ((this.type == 10 || this.type == 11 || this.type == 12 || this.type == 95 || this.type == 96 || this.type == 97) && (closestPlayer.RollLuck(50) == 0 || Main.expertMode && closestPlayer.RollLuck(50) == 0)) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 215); if ((this.type == 47 || this.type == 464) && closestPlayer.RollLuck(75) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 243); if ((this.type == 168 || this.type == 470) && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, (int) Utils.SelectRandom(Main.rand, (short) 3757, (short) 3758, (short) 3759)); if (this.type == 533) { if (closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3795); else if (closestPlayer.RollLuck(30) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3770); } if (this.type == 551) { if (Main.expertMode) { this.DropBossBags(); } else { switch (Main.rand.Next(4)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3859, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3827, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3870, pfix: -1); break; default: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3858, pfix: -1); break; } if (Main.rand.Next(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3863, pfix: -1); if (Main.rand.Next(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3883, pfix: -1); } } if (this.type == 4) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2112, pfix: -1); if (closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1299); int num3 = 1; for (int index = 0; index < num3; ++index) { if (WorldGen.crimson) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2171, Main.rand.Next(3) + 1); } else { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 47, Main.rand.Next(30) + 20); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(20) + 10); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 59, Main.rand.Next(3) + 1); } } } } if (this.type == 266) { if (Main.expertMode) { this.DropBossBags(); } else { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Main.rand.Next(20, 46)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Main.rand.Next(20, 46)); if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2104, pfix: -1); if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3060); } } if (this.type == 267 && NPC.AnyNPCs(266)) { int Stack1 = Main.rand.Next(2, 6); if (Main.rand.Next(3) != 0) { if (Main.expertMode) Stack1 += Main.rand.Next(2, 6); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1329, Stack1); } if (Main.rand.Next(3) != 0) { int Stack2 = Main.rand.Next(5, 13); if (Main.expertMode) Stack2 += Main.rand.Next(6, 14); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 880, Stack2); } if (Main.rand.Next(2) == 0 && closestPlayer.statLife < closestPlayer.statLifeMax2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); } if (this.type == 13 || this.type == 14 || this.type == 15) { int Stack = Main.rand.Next(1, 3); if (Main.rand.Next(2) == 0) { if (Main.expertMode) ++Stack; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 86, Stack); } if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(2, 6)); if (this.boss) { if (Main.expertMode) { this.DropBossBags(); } else { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(10, 30)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 56, Main.rand.Next(10, 31)); if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 994); if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2111, pfix: -1); } } if (Main.rand.Next(4) == 0 && closestPlayer.statLife < closestPlayer.statLifeMax2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); } if (this.type == 222) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2108, pfix: -1); int Type = Main.rand.Next(3); switch (Type) { case 0: Type = 1121; break; case 1: Type = 1123; break; case 2: Type = 2888; break; } Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type, pfix: -1); if (closestPlayer.RollLuck(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1132, pfix: -1); if (closestPlayer.RollLuck(15) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1170); if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2502); if (Main.rand.Next(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1129); else if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Main.rand.Next(842, 845)); if (Main.rand.Next(4) != 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1130, Main.rand.Next(10, 30)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2431, Main.rand.Next(16, 27)); } NPC.SetEventFlagCleared(ref NPC.downedQueenBee, 8); if (Main.netMode == 2) NetMessage.SendData(7); } if (this.type == 35) { if (Main.expertMode) this.DropBossBags(); else if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1281, pfix: -1); else if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1273, pfix: -1); else if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1313, pfix: -1); } if (this.type == 113) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2105, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 367, pfix: -1); if (Main.rand.Next(2) == 0) { int num4 = Main.rand.Next(4); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, num4 != 3 ? 489 + num4 : 2998, pfix: -1); } else { switch (Main.rand.Next(3)) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 514, pfix: -1); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 426, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 434, pfix: -1); break; } } } if (Main.netMode != 1 && !flag1) { int num5 = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; int num6 = (int) ((double) this.position.Y + (double) (this.height / 2)) / 16; int num7 = this.width / 2 / 16 + 1; for (int index1 = num5 - num7; index1 <= num5 + num7; ++index1) { for (int index2 = num6 - num7; index2 <= num6 + num7; ++index2) { if ((index1 == num5 - num7 || index1 == num5 + num7 || index2 == num6 - num7 || index2 == num6 + num7) && !Main.tile[index1, index2].active()) { Main.tile[index1, index2].type = WorldGen.crimson ? (ushort) 347 : (ushort) 140; Main.tile[index1, index2].active(true); } Main.tile[index1, index2].lava(false); Main.tile[index1, index2].liquid = (byte) 0; if (Main.netMode == 2) NetMessage.SendTileSquare(-1, index1, index2, 1); else WorldGen.SquareTileFrame(index1, index2); } } } } if (this.type == 439) { NPC.SetEventFlagCleared(ref NPC.downedAncientCultist, 9); if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3372, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3549, pfix: -1); WorldGen.TriggerLunarApocalypse(); } if (this.type == 398) { NPC.SetEventFlagCleared(ref NPC.downedMoonlord, 10); NPC.LunarApocalypseIsUp = false; if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3373, pfix: -1); if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4469, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3384, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3460, Main.rand.Next(70, 91), pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Utils.SelectRandom(Main.rand, 3063, 3389, 3065, 1553, 3930, 3541, 3570, 3571, 3569), pfix: -1); } } switch (this.type) { case 402: case 405: case 407: case 409: case 411: if ((this.type != 406 || Main.rand.Next(3) == 0) && NPC.ShieldStrengthTowerStardust > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(493)); break; } break; case 412: case 413: case 414: case 415: case 416: case 417: case 418: case 419: case 518: if (NPC.ShieldStrengthTowerSolar > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(517)); break; } break; case 420: case 421: case 423: case 424: if (NPC.ShieldStrengthTowerNebula > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(507)); break; } break; case 422: int num8 = Main.rand.Next(25, 41) / 2; if (Main.expertMode) num8 = (int) ((double) num8 * 1.5); for (int index = 0; index < num8; ++index) Item.NewItem((int) this.position.X + Main.rand.Next(this.width), (int) this.position.Y + Main.rand.Next(this.height), 2, 2, 3456, Main.rand.Next(1, 4)); NPC.downedTowerVortex = true; NPC.TowerActiveVortex = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 425: case 426: case 427: case 429: if (NPC.ShieldStrengthTowerVortex > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(422)); break; } break; case 493: int num9 = Main.rand.Next(25, 41) / 2; if (Main.expertMode) num9 = (int) ((double) num9 * 1.5); for (int index = 0; index < num9; ++index) Item.NewItem((int) this.position.X + Main.rand.Next(this.width), (int) this.position.Y + Main.rand.Next(this.height), 2, 2, 3459, Main.rand.Next(1, 4)); NPC.downedTowerStardust = true; NPC.TowerActiveStardust = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 507: int num10 = Main.rand.Next(25, 41) / 2; if (Main.expertMode) num10 = (int) ((double) num10 * 1.5); for (int index = 0; index < num10; ++index) Item.NewItem((int) this.position.X + Main.rand.Next(this.width), (int) this.position.Y + Main.rand.Next(this.height), 2, 2, 3457, Main.rand.Next(1, 4)); NPC.downedTowerNebula = true; NPC.TowerActiveNebula = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 517: int num11 = Main.rand.Next(25, 41) / 2; if (Main.expertMode) num11 = (int) ((double) num11 * 1.5); for (int index = 0; index < num11; ++index) Item.NewItem((int) this.position.X + Main.rand.Next(this.width), (int) this.position.Y + Main.rand.Next(this.height), 2, 2, 3458, Main.rand.Next(1, 4)); NPC.downedTowerSolar = true; NPC.TowerActiveSolar = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; } switch (this.type) { case 381: case 382: case 383: case 385: case 386: case 389: case 390: case 520: if (closestPlayer.RollLuck(8) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2860, Main.rand.Next(8, 21)); break; } break; } switch (this.type) { case 381: case 382: case 383: case 385: case 386: case 389: case 390: case 520: if (closestPlayer.RollLuck(600) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2798); if (closestPlayer.RollLuck(600) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2800); if (closestPlayer.RollLuck(600) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2882); break; } break; } switch (this.type) { case 383: case 386: case 389: if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2806); if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2807); if (closestPlayer.RollLuck(200) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2808); break; } break; } switch (this.type) { case 381: case 382: case 385: case 390: if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2803); if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2804); if (closestPlayer.RollLuck(200) == 0) { Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2805); break; } break; } if (this.type == 395) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Utils.SelectRandom(Main.rand, 2797, 2749, 2795, 2796, 2880, 2769)); if (this.type == 390 && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2771); if ((this.type == 116 || this.type == 117 || this.type == 118 || this.type == 119) && (!Main.expertMode || Main.rand.Next(5) == 0)) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 139 && Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 63 || this.type == 64 || this.type == 103) { if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1303, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 282, Main.rand.Next(1, 5)); } if (this.type == 63 && closestPlayer.RollLuck(50) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4649); if (this.type == 64 && closestPlayer.RollLuck(50) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4650); if (this.type == 481 && Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3094, Main.rand.Next(40, 81)); if (this.type == 481 && closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3187 + Main.rand.Next(3)); if (this.type == 481 && closestPlayer.RollLuck(40) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4463); if (this.type == 21 || this.type == 44 || this.type == 167 || this.type == 201 || this.type == 202 || this.type == 481 || this.type == 203 || this.type == 322 || this.type == 323 || this.type == 324 || this.type >= 449 && this.type <= 452) { if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 118); else if (this.type == 44) { if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Main.rand.Next(410, 412)); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 166, Main.rand.Next(1, 4)); } } if (this.type == 45) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 238); if (this.type == 50) { if (Main.slimeRain) { Main.StopSlimeRain(); AchievementsHelper.NotifyProgressionEvent(16); } if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2430); if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2493, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Main.rand.Next(256, 259)); Main.rand.Next(2); if (Main.rand.Next(3) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2585); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2610); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 998); } NPC.SetEventFlagCleared(ref NPC.downedSlimeKing, 11); if (Main.netMode == 2) NetMessage.SendData(7); } if (this.type == 23 && closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 116); if (this.type == 24 && closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 244); if (this.type == 31 || this.type == 32 || this.type == 34 || this.type >= 294 && this.type <= 296) { if (closestPlayer.RollLuck(250) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 932); else if (closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3095); else if (closestPlayer.RollLuck(65) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 327); else if (!Main.expertMode) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 154, Main.rand.Next(1, 4)); if (Main.expertMode) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 154, Main.rand.Next(2, 7)); } if (this.type == 26 || this.type == 27 || this.type == 28 || this.type == 29 || this.type == 111) { if (closestPlayer.RollLuck(200) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 160); else if (Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 161, Main.rand.Next(1, 6)); } if (this.type == 175 && closestPlayer.RollLuck(100) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1265, pfix: -1); if ((this.type == 42 || this.type >= 231 && this.type <= 235) && (Main.expertMode || Main.rand.Next(3) != 0)) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 209); if (this.type == 204 && (Main.expertMode || Main.rand.Next(2) == 0)) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 209); if (this.type == 43) { if (closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4648); else if (Main.expertMode || Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 210); } if (this.type == 39 && closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4610); if (this.type == 65) { if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 268); else if (closestPlayer.RollLuck(25) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4651); else Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 319); } if (this.type == 48 && Main.rand.Next(2) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 320); if (this.type == 541) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3783); if ((this.type == 542 || this.type == 543 || this.type == 544 || this.type == 545) && closestPlayer.RollLuck(10) == 0 && Main.IsItAHappyWindyDay) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 4669); if (this.type == 542 && closestPlayer.RollLuck(8) == 0) { int number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 319); Main.item[number].color = new Color(189, 148, 96, (int) byte.MaxValue); NetMessage.SendData(88, number: number, number2: 1f); } if (this.type == 543 || this.type == 544) { if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 527); if (closestPlayer.RollLuck(8) == 0) { int number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 319); Main.item[number].color = this.type != 544 ? new Color(112, 85, 89, (int) byte.MaxValue) : new Color(145, 27, 40, (int) byte.MaxValue); NetMessage.SendData(88, number: number, number2: 1f); } } if (this.type == 545) { if (closestPlayer.RollLuck(25) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 528); if (closestPlayer.RollLuck(8) == 0) { int number = Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 319); Main.item[number].color = new Color(158, 113, 164, (int) byte.MaxValue); NetMessage.SendData(88, number: number, number2: 1f); } } if (this.type == 125 || this.type == 126) { int Type = 125; if (this.type == 125) Type = 126; if (!NPC.AnyNPCs(Type)) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2106, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 549, Main.rand.Next(25, 41)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1225, Main.rand.Next(15, 31)); } } else { this.value = 0.0f; this.boss = false; } } else if (Main.expertMode) { if (this.type == (int) sbyte.MaxValue || this.type == 134) this.DropBossBags(); } else if (this.type == (int) sbyte.MaxValue) { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2107, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 547, Main.rand.Next(25, 41)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1225, Main.rand.Next(15, 31)); } else if (this.type == 134) { if (Main.rand.Next(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2113, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 548, Main.rand.Next(25, 41)); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1225, Main.rand.Next(15, 31)); } if (this.type == 262) { if (Main.expertMode) { this.DropBossBags(); } else { if (closestPlayer.RollLuck(7) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2109, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1141, pfix: -1); if (closestPlayer.RollLuck(20) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1182, pfix: -1); if (closestPlayer.RollLuck(50) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1305, pfix: -1); if (closestPlayer.RollLuck(4) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1157, pfix: -1); if (closestPlayer.RollLuck(10) == 0) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3021, pfix: -1); int num12 = 1; for (int index = 0; index < num12; ++index) { int num13 = Main.rand.Next(7); if (!NPC.downedPlantBoss) num13 = 0; switch (num13) { case 0: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 758, pfix: -1); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 771, Main.rand.Next(50, 150)); break; case 1: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1255, pfix: -1); break; case 2: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 788, pfix: -1); break; case 3: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1178, pfix: -1); break; case 4: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1259, pfix: -1); break; case 5: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1155, pfix: -1); break; case 6: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3018, pfix: -1); break; } } } int num14 = NPC.downedPlantBoss ? 1 : 0; NPC.SetEventFlagCleared(ref NPC.downedPlantBoss, 12); if (num14 == 0) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[33].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[33].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } } if ((this.boss || this.type == 125 || this.type == 126 || this.type == 491 || this.type == 551 || this.type == 576 || this.type == 577 || this.type == 564 || this.type == 565) && closestPlayer.RollLuck(10) == 0) { if (this.type == 4) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1360); if (this.type == 13 || this.type == 14 || this.type == 15) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1361); if (this.type == 266) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1362); if (this.type == 35) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1363); if (this.type == 222) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1364); if (this.type == 113) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1365); if (this.type == 134) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1366); if (this.type == (int) sbyte.MaxValue) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1367); if (this.type == 125) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1368); if (this.type == 126) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1369); if (this.type == 262) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1370); if (this.type == 245) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 1371); if (this.type == 50) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2489); if (this.type == 370) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 2589); if (this.type == 439) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3357); if (this.type == 491) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3359); if (this.type == 395) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3358); if (this.type == 398) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3595); if (this.type == 551) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3866); if (this.type == 564 || this.type == 565) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3867); if (this.type == 576 || this.type == 577) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 3868); } if (this.boss) { if (this.type == 4) NPC.SetEventFlagCleared(ref NPC.downedBoss1, 13); else if (this.type == 13 || this.type == 14 || this.type == 15) NPC.SetEventFlagCleared(ref NPC.downedBoss2, 14); else if (this.type == 266) NPC.SetEventFlagCleared(ref NPC.downedBoss2, 14); else if (this.type == 35) NPC.SetEventFlagCleared(ref NPC.downedBoss3, 15); if (this.type == (int) sbyte.MaxValue) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss3, 18); NPC.downedMechBossAny = true; } if (this.type == 134) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss1, 16); NPC.downedMechBossAny = true; } string typeName = this.TypeName; int Stack = Main.rand.Next(5, 16); int Type = 28; if (this.type == 113) Type = 188; else if (this.type == 222) Type = 1134; else if (this.type > 113 && this.type < 222) Type = 499; else if (this.type == 245 || this.type == 262) Type = 499; else if (this.type == 370) Type = 499; else if (this.type == 395) Type = 499; else if (this.type == 439) Type = 499; else if (this.type == 398) Type = 3544; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type, Stack); int num15 = Main.rand.Next(5) + 5; for (int index = 0; index < num15; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 125 || this.type == 126) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss2, 17); NPC.downedMechBossAny = true; switch (Main.netMode) { case 0: Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Plural", (object) Language.GetTextValue("Enemies.TheTwins")), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Plural", (object) NetworkText.FromKey("Enemies.TheTwins")), new Color(175, 75, (int) byte.MaxValue)); break; } } else if (this.type == 398) { switch (Main.netMode) { case 0: Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Single", (object) Language.GetTextValue("Enemies.MoonLord")), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Single", (object) NetworkText.FromKey("Enemies.MoonLord")), new Color(175, 75, (int) byte.MaxValue)); break; } } else { switch (Main.netMode) { case 0: Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Single", (object) typeName), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Single", (object) this.GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); break; } } if (this.type == 113 && Main.netMode != 1) { bool hardMode = Main.hardMode; if (!flag1) WorldGen.StartHardmode(); if (NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3 && !hardMode) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[32].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[32].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } NPC.SetEventFlagCleared(ref hardMode, 19); } if (Main.netMode == 2) NetMessage.SendData(7); } if (!flag2 && NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3 && Main.hardMode) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[32].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[32].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } this.NPCLoot_DropCommonLifeAndMana(closestPlayer); this.NPCLoot_DropMoney(closestPlayer); } public void NPCLoot() { if (Main.netMode == 1 || this.type >= 663) return; Player closestPlayer = Main.player[(int) Player.FindClosest(this.position, this.width, this.height)]; if (true) { this.CountKillForAchievements(); if (this.GetWereThereAnyInteractions()) { if (this.IsNPCValidForBestiaryKillCredit()) Main.BestiaryTracker.Kills.RegisterKill(this); this.CountKillForBannersAndDropThem(); } } if (this.type == 23 && Main.hardMode || this.SpawnedFromStatue && NPCID.Sets.NoEarlymodeLootWhenSpawnedFromStatue[this.type] && !Main.hardMode || this.SpawnedFromStatue && (double) NPCID.Sets.StatueSpawnedDropRarity[this.type] != -1.0 && ((double) Main.rand.NextFloat() >= (double) NPCID.Sets.StatueSpawnedDropRarity[this.type] || !this.AnyInteractions())) return; int num = !NPC.downedMechBoss1 || !NPC.downedMechBoss2 ? 0 : (NPC.downedMechBoss3 ? 1 : 0); this.DoDeathEvents_BeforeLoot(closestPlayer); this.NPCLoot_DropItems(closestPlayer); this.DoDeathEvents(closestPlayer); if (num == 0 && NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3 && Main.hardMode) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[32].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[32].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } this.NPCLoot_DropMoney(closestPlayer); this.NPCLoot_DropHeals(closestPlayer); } private bool IsNPCValidForBestiaryKillCredit() { switch (this.type) { case 13: case 14: case 15: return this.boss; default: return true; } } private void DoDeathEvents_BeforeLoot(Player closestPlayer) { switch (this.type) { case 125: case 126: if (!NPC.AnyNPCs(this.type == 125 ? 126 : 125)) break; this.value = 0.0f; this.boss = false; break; } } private void NPCLoot_DropItems(Player closestPlayer) { DropAttemptInfo info = new DropAttemptInfo() { player = closestPlayer, npc = this, IsExpertMode = Main.expertMode, IsMasterMode = Main.masterMode, IsInSimulation = false, rng = Main.rand }; Main.ItemDropSolver.TryDropping(info); } public static void ResetBadgerHatTime() { NPC.EoCKilledToday = false; NPC.WoFKilledToday = false; } private void DoDeathEvents_DropBossPotionsAndHearts() { int Stack = Main.rand.Next(5, 16); int Type = 28; if (this.type == 113) Type = 188; else if (this.type == 222) Type = 1134; else if (this.type == 657) Type = 499; else if (this.type > 113 && this.type < 222) Type = 499; else if (this.type == 636) Type = 499; else if (this.type == 245 || this.type == 262) Type = 499; else if (this.type == 370) Type = 499; else if (this.type == 395) Type = 499; else if (this.type == 439) Type = 499; else if (this.type == 398) Type = 3544; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type, Stack); int num = Main.rand.Next(5) + 5; for (int index = 0; index < num; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); if (this.type == 4) NPC.EoCKilledToday = true; else if (this.type == 113) NPC.WoFKilledToday = true; if (!NPC.EoCKilledToday || !NPC.WoFKilledToday) return; NPC.ResetBadgerHatTime(); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 5004); } private void DoDeathEvents_CelebrateBossDeath() { if (this.type == 125 || this.type == 126) { if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Plural", (object) Language.GetTextValue("Enemies.TheTwins")), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Plural", (object) NetworkText.FromKey("Enemies.TheTwins")), new Color(175, 75, (int) byte.MaxValue)); } } else if (this.type == 398) { if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Single", (object) Language.GetTextValue("Enemies.MoonLord")), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Single", (object) NetworkText.FromKey("Enemies.MoonLord")), new Color(175, 75, (int) byte.MaxValue)); } } else if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasBeenDefeated_Single", (object) this.TypeName), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasBeenDefeated_Single", (object) this.GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); } } private void CreateBrickBoxForWallOfFlesh() { int num1 = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; int num2 = (int) ((double) this.position.Y + (double) (this.height / 2)) / 16; int num3 = this.width / 2 / 16 + 1; for (int index1 = num1 - num3; index1 <= num1 + num3; ++index1) { for (int index2 = num2 - num3; index2 <= num2 + num3; ++index2) { if ((index1 == num1 - num3 || index1 == num1 + num3 || index2 == num2 - num3 || index2 == num2 + num3) && !Main.tile[index1, index2].active()) { Main.tile[index1, index2].type = WorldGen.crimson ? (ushort) 347 : (ushort) 140; Main.tile[index1, index2].active(true); } Main.tile[index1, index2].lava(false); Main.tile[index1, index2].liquid = (byte) 0; if (Main.netMode == 2) NetMessage.SendTileSquare(-1, index1, index2, 1); else WorldGen.SquareTileFrame(index1, index2); } } } private void DoDeathEvents_SummonDungeonSpirit(Player closestPlayer) { if (this.lifeMax <= 100 || this.type == 288 || (double) this.value <= 0.0 || !this.HasPlayerTarget || !Main.hardMode || !NPC.downedPlantBoss || !Main.player[this.target].ZoneDungeon) return; int range = 13; if (Main.expertMode) range = 9; if (closestPlayer.RollLuck(range) != 0 || !Main.wallDungeon[(int) Main.tile[(int) this.Center.X / 16, (int) this.Center.Y / 16].wall]) return; NPC.NewNPC((int) this.Center.X, (int) this.Center.Y, 288); } private void DoDeathEvents_AdvanceSlimeRain(Player closestPlayer) { if (!Main.slimeRain || !Main.slimeRainNPC[this.type] || NPC.AnyNPCs(50)) return; int num = 150; if (NPC.downedSlimeKing) num /= 2; ++Main.slimeRainKillCount; if (Main.slimeRainKillCount < num) return; NPC.SpawnOnPlayer(closestPlayer.whoAmI, 50); Main.slimeRainKillCount = -num / 2; } private void NPCLoot_DropHeals(Player closestPlayer) { this.NPCLoot_DropCommonLifeAndMana(closestPlayer); switch (this.type) { case 13: case 14: case 15: if (Main.rand.Next(4) != 0 || closestPlayer.statLife >= closestPlayer.statLifeMax2) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 116: case 117: case 118: case 119: if (Main.expertMode && Main.rand.Next(5) != 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 139: if (Main.rand.Next(2) != 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 267: if (Main.rand.Next(2) != 0 || closestPlayer.statLife >= closestPlayer.statLifeMax2) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 305: case 306: case 307: case 308: case 309: case 310: case 311: case 312: case 313: case 314: case 329: case 330: if (closestPlayer.RollLuck(4) != 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 315: Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 325: case 327: case 344: case 345: case 346: int num1 = Main.rand.Next(6) + 6; for (int index = 0; index < num1; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 326: if (closestPlayer.RollLuck(6) != 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 338: case 339: case 340: if (closestPlayer.RollLuck(5) != 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 341: int num2 = Main.rand.Next(5, 11); for (int index = 0; index < num2; ++index) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; case 342: if (Main.rand.Next(3) == 0) break; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); break; } } private void DoDeathEvents(Player closestPlayer) { this.DoDeathEvents_AdvanceSlimeRain(closestPlayer); this.DoDeathEvents_SummonDungeonSpirit(closestPlayer); switch (this.type) { case 4: NPC.SetEventFlagCleared(ref NPC.downedBoss1, 13); break; case 13: case 14: case 15: case 266: if (this.boss) { if (!NPC.downedBoss2 || Main.rand.Next(2) == 0) WorldGen.spawnMeteor = true; NPC.SetEventFlagCleared(ref NPC.downedBoss2, 14); break; } break; case 22: if (Collision.LavaCollision(this.position, this.width, this.height)) { NPC.SpawnWOF(this.position); break; } break; case 35: if (this.boss) { NPC.SetEventFlagCleared(ref NPC.downedBoss3, 15); break; } break; case 50: if (Main.slimeRain) { Main.StopSlimeRain(); AchievementsHelper.NotifyProgressionEvent(16); } NPC.SetEventFlagCleared(ref NPC.downedSlimeKing, 11); if (Main.netMode == 2) { NetMessage.SendData(7); break; } break; case 109: if (!NPC.downedClown) { NPC.downedClown = true; if (Main.netMode == 2) { NetMessage.SendData(7); break; } break; } break; case 113: if (Main.netMode != 1) { this.CreateBrickBoxForWallOfFlesh(); bool hardMode = Main.hardMode; WorldGen.StartHardmode(); if (NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3 && !hardMode) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[32].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[32].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } NPC.SetEventFlagCleared(ref hardMode, 19); break; } break; case 125: case 126: if (this.boss) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss2, 17); NPC.downedMechBossAny = true; break; } break; case (int) sbyte.MaxValue: if (this.boss) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss3, 18); NPC.downedMechBossAny = true; break; } break; case 134: if (this.boss) { NPC.SetEventFlagCleared(ref NPC.downedMechBoss1, 16); NPC.downedMechBossAny = true; break; } break; case 216: NPC.SpawnBoss((int) this.position.X, (int) this.position.Y, 662, this.target); break; case 222: NPC.SetEventFlagCleared(ref NPC.downedQueenBee, 8); if (Main.netMode == 2) { NetMessage.SendData(7); break; } break; case 245: NPC.SetEventFlagCleared(ref NPC.downedGolemBoss, 6); break; case 262: int num = NPC.downedPlantBoss ? 1 : 0; NPC.SetEventFlagCleared(ref NPC.downedPlantBoss, 12); if (num == 0) { switch (Main.netMode) { case 0: Main.NewText(Lang.misc[33].Value, (byte) 50, B: (byte) 130); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey(Lang.misc[33].Key), new Color(50, (int) byte.MaxValue, 130)); break; } } else break; break; case 325: if (Main.pumpkinMoon) { NPC.SetEventFlagCleared(ref NPC.downedHalloweenTree, 4); break; } break; case 327: if (Main.pumpkinMoon) { NPC.SetEventFlagCleared(ref NPC.downedHalloweenKing, 5); break; } break; case 344: if (Main.snowMoon) { NPC.SetEventFlagCleared(ref NPC.downedChristmasTree, 21); break; } break; case 345: if (Main.snowMoon) { NPC.SetEventFlagCleared(ref NPC.downedChristmasIceQueen, 20); break; } break; case 346: if (Main.snowMoon) { NPC.SetEventFlagCleared(ref NPC.downedChristmasSantank, 22); break; } break; case 370: NPC.SetEventFlagCleared(ref NPC.downedFishron, 7); break; case 398: NPC.SetEventFlagCleared(ref NPC.downedMoonlord, 10); NPC.LunarApocalypseIsUp = false; break; case 402: case 405: case 407: case 409: case 411: if (NPC.ShieldStrengthTowerStardust > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(493)); break; } break; case 412: case 413: case 414: case 415: case 416: case 417: case 418: case 419: case 518: if (NPC.ShieldStrengthTowerSolar > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(517)); break; } break; case 420: case 421: case 423: case 424: if (NPC.ShieldStrengthTowerNebula > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(507)); break; } break; case 422: NPC.downedTowerVortex = true; NPC.TowerActiveVortex = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 425: case 426: case 427: case 429: if (NPC.ShieldStrengthTowerVortex > 0) { Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 629, 0, 0.0f, Main.myPlayer, (float) NPC.FindFirstNPC(422)); break; } break; case 439: NPC.SetEventFlagCleared(ref NPC.downedAncientCultist, 9); WorldGen.TriggerLunarApocalypse(); break; case 493: NPC.downedTowerStardust = true; NPC.TowerActiveStardust = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 507: NPC.downedTowerNebula = true; NPC.TowerActiveNebula = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 517: NPC.downedTowerSolar = true; NPC.TowerActiveSolar = false; WorldGen.UpdateLunarApocalypse(); WorldGen.MessageLunarApocalypse(); break; case 552: case 553: case 554: if (DD2Event.Ongoing) { DD2Event.AnnounceGoblinDeath(this); if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; } break; case 555: case 556: case 557: case 558: case 559: case 560: case 561: case 562: case 563: case 564: case 565: case 568: case 569: case 570: case 571: case 572: case 573: case 574: case 575: case 576: case 577: case 578: if (DD2Event.ShouldDropCrystals()) { Item.NewItem(this.position, this.Size, 3822); break; } break; case 614: int Damage = 175; if (this.SpawnedFromStatue) Damage = 0; Projectile.NewProjectile(this.Center.X, this.Center.Y, 0.0f, 0.0f, 281, Damage, 0.0f, Main.myPlayer, -2f, (float) ((int) this.releaseOwner + 1)); break; case 636: NPC.SetEventFlagCleared(ref NPC.downedEmpressOfLight, 23); break; case 657: NPC.SetEventFlagCleared(ref NPC.downedQueenSlime, 24); break; case 661: if (Main.netMode != 1 && this.GetWereThereAnyInteractions()) { int Type = 636; if (!NPC.AnyNPCs(Type)) { Vector2 vector2 = this.Center + new Vector2(0.0f, -200f) + Main.rand.NextVector2Circular(50f, 50f); NPC.SpawnBoss((int) vector2.X, (int) vector2.Y, Type, closestPlayer.whoAmI); break; } break; } break; } if (!this.boss) return; this.DoDeathEvents_DropBossPotionsAndHearts(); this.DoDeathEvents_CelebrateBossDeath(); if (Main.netMode != 2) return; NetMessage.SendData(7); } private void NPCLoot_DropCommonLifeAndMana(Player closestPlayer) { if (this.type != 16 && this.type != 81 && this.type != 121 && closestPlayer.RollLuck(6) == 0 && this.lifeMax > 1 && this.damage > 0) { if (Main.rand.Next(2) == 0 && closestPlayer.statMana < closestPlayer.statManaMax2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 184); else if (Main.rand.Next(2) == 0 && closestPlayer.statLife < closestPlayer.statLifeMax2) Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 58); } if (this.type == 16 || this.type == 81 || this.type == 121 || closestPlayer.RollLuck(2) != 0 || this.lifeMax <= 1 || this.damage <= 0 || closestPlayer.statMana >= closestPlayer.statManaMax2) return; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 184); } private void NPCLoot_DropMoney(Player closestPlayer) { float num1 = 0.0f; float luck = closestPlayer.luck; int num2 = 1; if ((double) Main.rand.NextFloat() < (double) Math.Abs(luck)) num2 = 2; for (int index = 0; index < num2; ++index) { float num3 = this.value; if (this.midas) num3 *= (float) (1.0 + (double) Main.rand.Next(10, 51) * 0.00999999977648258); float num4 = num3 * (float) (1.0 + (double) Main.rand.Next(-20, 76) * 0.00999999977648258); if (Main.rand.Next(2) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(5, 11) * 0.00999999977648258); if (Main.rand.Next(4) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(10, 21) * 0.00999999977648258); if (Main.rand.Next(8) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(15, 31) * 0.00999999977648258); if (Main.rand.Next(16) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(20, 41) * 0.00999999977648258); if (Main.rand.Next(32) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(25, 51) * 0.00999999977648258); if (Main.rand.Next(64) == 0) num4 *= (float) (1.0 + (double) Main.rand.Next(50, 101) * 0.00999999977648258); if (Main.bloodMoon) num4 *= (float) (1.0 + (double) Main.rand.Next(101) * 0.00999999977648258); if (index == 0) num1 = num4; else if ((double) luck < 0.0) { if ((double) num4 < (double) num1) num1 = num4; } else if ((double) num4 > (double) num1) num1 = num4; } float num5 = num1 + (float) this.extraValue; while ((int) num5 > 0) { if ((double) num5 > 1000000.0) { int num6 = (int) ((double) num5 / 1000000.0); if (num6 > 50 && Main.rand.Next(5) == 0) num6 /= Main.rand.Next(3) + 1; if (Main.rand.Next(5) == 0) num6 /= Main.rand.Next(3) + 1; int Stack = num6; while (Stack > 999) { Stack -= 999; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 74, 999); } num5 -= (float) (1000000 * num6); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 74, Stack); } else if ((double) num5 > 10000.0) { int Stack = (int) ((double) num5 / 10000.0); if (Stack > 50 && Main.rand.Next(5) == 0) Stack /= Main.rand.Next(3) + 1; if (Main.rand.Next(5) == 0) Stack /= Main.rand.Next(3) + 1; num5 -= (float) (10000 * Stack); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 73, Stack); } else if ((double) num5 > 100.0) { int Stack = (int) ((double) num5 / 100.0); if (Stack > 50 && Main.rand.Next(5) == 0) Stack /= Main.rand.Next(3) + 1; if (Main.rand.Next(5) == 0) Stack /= Main.rand.Next(3) + 1; num5 -= (float) (100 * Stack); Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 72, Stack); } else { int Stack = (int) num5; if (Stack > 50 && Main.rand.Next(5) == 0) Stack /= Main.rand.Next(3) + 1; if (Main.rand.Next(5) == 0) Stack /= Main.rand.Next(4) + 1; if (Stack < 1) Stack = 1; num5 -= (float) Stack; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, 71, Stack); } } } public static int GetStackForSlimeItemDrop(int item) { int num = 1; switch (item) { case 8: num = Main.rand.Next(5, 11); break; case 166: num = Main.rand.Next(2, 7); break; case 965: num = Main.rand.Next(20, 46); break; default: if (item >= 11 && item <= 14 || item >= 699 && item <= 702) { num = Main.rand.Next(3, 9); if (Main.rand.Next(2) == 0) { num += 5; break; } break; } switch (item) { case 71: num = Main.rand.Next(50, 100); break; case 72: num = Main.rand.Next(20, 100); break; case 73: num = Main.rand.Next(1, 3); break; } break; } return num; } public bool ExcludedFromDeathTally() { if (this.netID >= 0) return NPCID.Sets.PositiveNPCTypesExcludedFromDeathTally[this.netID]; return this.netID == -5 || this.netID == -1; } private void CountKillForBannersAndDropThem() { int index1 = Item.NPCtoBanner(this.BannerID()); if (index1 <= 0 || this.ExcludedFromDeathTally()) return; ++NPC.killCount[index1]; if (Main.netMode == 2) NetMessage.SendData(83, number: index1); int num = ItemID.Sets.KillsToBanner[Item.BannerToItem(index1)]; if (NPC.killCount[index1] % num != 0 || index1 <= 0) return; int npc = Item.BannerToNPC(index1); int index2 = this.lastInteraction; if (!Main.player[index2].active || Main.player[index2].dead) index2 = this.FindClosestPlayer(); NetworkText text = NetworkText.FromKey("Game.EnemiesDefeatedAnnouncement", (object) NPC.killCount[index1], (object) NetworkText.FromKey(Lang.GetNPCName(npc).Key)); if (index2 >= 0 && index2 < (int) byte.MaxValue) text = NetworkText.FromKey("Game.EnemiesDefeatedByAnnouncement", (object) Main.player[index2].name, (object) NPC.killCount[index1], (object) NetworkText.FromKey(Lang.GetNPCName(npc).Key)); switch (Main.netMode) { case 0: Main.NewText(text.ToString(), (byte) 250, (byte) 250, (byte) 0); break; case 2: ChatHelper.BroadcastChatMessage(text, new Color(250, 250, 0)); break; } int Type = Item.BannerToItem(index1); Vector2 position = this.position; if (index2 >= 0 && index2 < (int) byte.MaxValue) position = Main.player[index2].position; Item.NewItem((int) position.X, (int) position.Y, this.width, this.height, Type); } private bool GetWereThereAnyInteractions() => this.realLife < 0 ? this.AnyInteractions() : Main.npc[this.realLife].AnyInteractions(); private void CountKillForAchievements() { switch (this.type) { case 13: case 14: case 15: if (!this.boss) break; AchievementsHelper.NotifyNPCKilled(this); break; case 125: case 126: if (NPC.AnyNPCs(this.type == 126 ? 125 : 126)) break; AchievementsHelper.NotifyNPCKilled(this); AchievementsHelper.CheckMechaMayhem(this.type); break; case (int) sbyte.MaxValue: case 134: AchievementsHelper.CheckMechaMayhem(this.type); AchievementsHelper.NotifyNPCKilled(this); break; default: AchievementsHelper.NotifyNPCKilled(this); break; } } private void NPCLoot_DropFood(Player closestPlayer) { int Type = 0; int range = 0; switch (this.type) { case 6: case 173: Type = 4015; range = 100; break; case 34: Type = 4018; range = 100; break; case 39: case 156: Type = 4025; range = 30; break; case 44: Type = 4037; range = 10; break; case 48: Type = 4016; range = 50; break; case 65: case 67: Type = 4035; range = 50; break; case 69: case 508: case 509: case 580: case 581: Type = 4012; range = 15; break; case 120: case 137: case 138: Type = 4011; range = 150; break; case 122: Type = 4017; range = 75; break; case 150: case 184: Type = 4026; range = 150; break; case 152: case 177: Type = 4023; range = 15; break; case 154: case 206: Type = 4027; range = 75; break; case 163: case 164: case 165: case 238: case 530: case 531: Type = 4020; range = 30; break; case 170: case 171: case 180: Type = 3532; range = 15; break; case 224: Type = 4021; range = 50; break; case 289: Type = 4018; range = 50; break; case 290: Type = 4013; range = 21; break; case 291: case 292: case 293: Type = 4013; range = 7; break; case 469: Type = 4037; range = 100; break; case 480: case 481: Type = 4029; range = 50; break; case 482: case 483: Type = 4036; range = 50; break; case 494: case 495: case 496: case 497: case 498: case 499: case 500: case 501: case 502: case 503: case 504: case 505: case 506: Type = 4030; range = 75; break; case 542: case 543: case 544: case 545: case 546: Type = 4028; range = 30; break; } if (this.SpawnedFromStatue || Type == 0 || range == 0 || closestPlayer.RollLuck(range) != 0) return; Item.NewItem((int) this.position.X, (int) this.position.Y, this.width, this.height, Type); } public static void CatchNPC(int i, int who = -1) { if (!Main.npc[i].active) return; if (Main.netMode == 1) { Main.npc[i].active = false; NetMessage.SendData(70, number: i, number2: ((float) who)); } else { if (Main.npc[i].catchItem <= (short) 0) return; if (Main.npc[i].SpawnedFromStatue) { Vector2 position = Main.npc[i].Center - new Vector2(20f); Utils.PoofOfSmoke(position); Main.npc[i].active = false; NetMessage.SendData(23, number: i); NetMessage.SendData(106, number: ((int) position.X), number2: position.Y); } else { new Item().SetDefaults((int) Main.npc[i].catchItem); Item.NewItem((int) Main.player[who].Center.X, (int) Main.player[who].Center.Y, 0, 0, (int) Main.npc[i].catchItem, noGrabDelay: true); Main.npc[i].active = false; NetMessage.SendData(23, number: i); } } } public void DropBossBags() { int itemType = -1; if (this.type == 50) itemType = 3318; if (this.type == 4) itemType = 3319; if (this.type >= 13 && this.type <= 15) itemType = 3320; if (this.type == 266) itemType = 3321; if (this.type == 222) itemType = 3322; if (this.type == 35) itemType = 3323; if (this.type == 113) itemType = 3324; if (this.type == 134) itemType = 3325; if (this.type == 125 || this.type == 126) itemType = 3326; if (this.type == (int) sbyte.MaxValue) itemType = 3327; if (this.type == 262) itemType = 3328; if (this.type == 245) itemType = 3329; if (this.type == 370) itemType = 3330; if (this.type == 439) itemType = 3331; if (this.type == 398) itemType = 3332; if (this.type == 551) itemType = 3860; this.DropItemInstanced(this.position, this.Size, itemType); } public void DropItemInstanced( Vector2 Position, Vector2 HitboxSize, int itemType, int itemStack = 1, bool interactionRequired = true) { if (itemType <= 0) return; switch (Main.netMode) { case 0: Item.NewItem((int) Position.X, (int) Position.Y, (int) HitboxSize.X, (int) HitboxSize.Y, itemType, itemStack); break; case 2: int number = Item.NewItem((int) Position.X, (int) Position.Y, (int) HitboxSize.X, (int) HitboxSize.Y, itemType, itemStack, true); Main.timeItemSlotCannotBeReusedFor[number] = 54000; for (int remoteClient = 0; remoteClient < (int) byte.MaxValue; ++remoteClient) { if (Main.player[remoteClient].active && (this.playerInteraction[remoteClient] || !interactionRequired)) NetMessage.SendData(90, remoteClient, number: number); } Main.item[number].active = false; break; } this.value = 0.0f; } public void PlayerInteraction(int player) { if (this.realLife < 0 ? this.playerInteraction[player] : Main.npc[this.realLife].playerInteraction[player]) return; if (this.type == 13 || this.type == 14 || this.type == 15) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && (Main.npc[index].type == 13 || Main.npc[index].type == 14 || Main.npc[index].type == 15)) Main.npc[index].ApplyInteraction(player); } } if (this.type == 134 || this.type == 135 || this.type == 136) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && (Main.npc[index].type == 134 || Main.npc[index].type == 135 || Main.npc[index].type == 136)) Main.npc[index].ApplyInteraction(player); } } if (this.type == 35 || this.type == 36) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && (Main.npc[index].type == 35 || Main.npc[index].type == 36)) Main.npc[index].ApplyInteraction(player); } } if (this.type == 113 || this.type == 114) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && (Main.npc[index].type == 113 || Main.npc[index].type == 114)) Main.npc[index].ApplyInteraction(player); } } if (this.type >= (int) sbyte.MaxValue && this.type <= 131) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type >= (int) sbyte.MaxValue && Main.npc[index].type <= 131) Main.npc[index].ApplyInteraction(player); } } if (this.type >= 245 && this.type <= 249) { for (int index = 0; index < 200; ++index) { if (index != this.whoAmI && Main.npc[index].active && Main.npc[index].type >= 245 && Main.npc[index].type <= 249) Main.npc[index].ApplyInteraction(player); } } if ((this.type == 396 || this.type == 397) && Main.npc[(int) this.ai[3]].active && Main.npc[(int) this.ai[3]].type == 398) Main.npc[(int) this.ai[3]].ApplyInteraction(player); if ((this.type == 393 || this.type == 394) && Main.npc[(int) this.ai[0]].active && Main.npc[(int) this.ai[0]].type == 395) Main.npc[(int) this.ai[0]].ApplyInteraction(player); if (this.type == 492 && Main.npc[(int) this.ai[0]].active && Main.npc[(int) this.ai[0]].type == 491) Main.npc[(int) this.ai[0]].ApplyInteraction(player); this.ApplyInteraction(player); } public void ApplyInteraction(int player) { if (this.realLife >= 0) Main.npc[this.realLife].playerInteraction[player] = true; else this.playerInteraction[player] = true; if (player >= (int) byte.MaxValue) return; if (this.realLife >= 0) Main.npc[this.realLife].lastInteraction = player; else this.lastInteraction = player; } public static bool CanReleaseNPCs(int who) { float num1 = 0.7f; if (Main.netMode != 1) num1 += 0.05f; int num2 = 0; int num3 = 0; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active) { ++num3; if ((int) Main.npc[index].releaseOwner == who) ++num2; } } int num4 = 0; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active) ++num4; } int num5 = (int) (200.0 * (double) num1 / (double) num4); return (double) num3 < 200.0 * (double) num1 && num2 < num5; } public static void ReleaseNPC(int x, int y, int Type, int Style, int who) { if (Main.netMode == 1) { NetMessage.SendData(71, number: x, number2: ((float) y), number3: ((float) Type), number4: ((float) Style)); } else { if (Type < 0 || Type >= 663 || !Main.npcCatchable[Type] || !NPC.CanReleaseNPCs(who)) return; switch (Type) { case 148: int Type1 = Type + Main.rand.Next(2); int index1 = NPC.NewNPC(x, y, Type1); Main.npc[index1].releaseOwner = (short) who; break; case 356: int index2 = NPC.NewNPC(x, y, Type); Main.npc[index2].ai[2] = (float) Style; Main.npc[index2].releaseOwner = (short) who; break; case 583: case 584: case 585: int index3 = NPC.NewNPC(x, y, Type); Main.npc[index3].releaseOwner = (short) who; Main.npc[index3].ai[2] = 2f; Main.npc[index3].TargetClosest(); Main.npc[index3].ai[3] = 0.0f; Main.npc[index3].netUpdate = true; break; case 614: int index4 = NPC.NewNPC(x, y, Type); Main.npc[index4].releaseOwner = (short) who; int num = Main.player[who].direction; if (Style > 2) { Style -= 2; Main.npc[index4].SpawnedFromStatue = true; } if (Style == 1) num = 1; if (Style == 2) num = -1; Main.npc[index4].direction = num; Main.npc[index4].spriteDirection = num; Main.npc[index4].netUpdate = true; break; default: int index5 = NPC.NewNPC(x, y, Type); Main.npc[index5].releaseOwner = (short) who; break; } } } public static void SlimeRainSpawns(int plr) { int checkScreenHeight = Main.LogicCheckScreenHeight; int checkScreenWidth = Main.LogicCheckScreenWidth; float num1 = 15f; Player player = Main.player[plr]; if ((double) player.position.Y > Main.worldSurface * 16.0 + (double) (checkScreenHeight / 2) || (double) player.nearbyActiveNPCs > (double) num1) return; int maxValue1 = 45 + (int) (450.0 * (double) (player.nearbyActiveNPCs / num1)); if (Main.expertMode) maxValue1 = (int) ((double) maxValue1 * 0.85); if (Main.rand.Next(maxValue1) != 0) return; int minValue1 = (int) ((double) player.Center.X - (double) checkScreenWidth); int maxValue2 = minValue1 + checkScreenWidth * 2; int minValue2 = (int) ((double) player.Center.Y - (double) checkScreenHeight * 1.5); int maxValue3 = (int) ((double) player.Center.Y - (double) checkScreenHeight * 0.75); int num2 = Main.rand.Next(minValue1, maxValue2); int num3 = Main.rand.Next(minValue2, maxValue3); int index1 = num2 / 16; int index2 = num3 / 16; if (index1 < 10 || index1 > Main.maxTilesX + 10 || (double) index2 < Main.worldSurface * 0.3 || (double) index2 > Main.worldSurface || Collision.SolidTiles(index1 - 3, index1 + 3, index2 - 5, index2 + 2) || Main.wallHouse[(int) Main.tile[index1, index2].wall]) return; int index3 = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 1); if (Main.rand.Next(200) == 0) Main.npc[index3].SetDefaults(-4); else if (Main.expertMode) { if (Main.rand.Next(7) == 0) { Main.npc[index3].SetDefaults(-7); } else { if (Main.rand.Next(3) != 0) return; Main.npc[index3].SetDefaults(-3); } } else if (Main.rand.Next(10) == 0) { Main.npc[index3].SetDefaults(-7); } else { if (Main.rand.Next(5) >= 2) return; Main.npc[index3].SetDefaults(-3); } } public static bool Spawning_SandstoneCheck(int x, int y) { if (!WorldGen.InWorld(x, y, 10)) return false; int num = 0; for (int index1 = 0; index1 < 8; ++index1) { Tile tile1 = Main.tile[x, y + index1]; if (tile1.active() && TileID.Sets.Conversion.Sand[(int) tile1.type]) { ++num; for (int index2 = 1; index2 <= 4; ++index2) { Tile tile2 = Main.tile[x + index2, y + index1]; if (tile2.active() && TileID.Sets.Conversion.Sand[(int) tile2.type]) ++num; else break; } for (int index3 = 1; index3 <= 4; ++index3) { Tile tile3 = Main.tile[x - index3, y + index1]; if (tile3.active() && TileID.Sets.Conversion.Sand[(int) tile3.type]) ++num; else break; } } else break; } return num >= 40; } public static bool Spawning_FlyingAntlionCheck(int x, int y) { if (!WorldGen.InWorld(x, y, 10)) return false; for (int index = 0; index < 50 && y - index >= 10; ++index) { Tile tile = Main.tile[x, y - index]; if (!WallID.Sets.Conversion.HardenedSand[(int) tile.wall] && !WallID.Sets.Conversion.Sandstone[(int) tile.wall]) return false; } return true; } private static int RollDragonflyType(int tileType = 2) => tileType == 53 ? (int) Main.rand.NextFromList((short) 595, (short) 598, (short) 600) : (int) Main.rand.NextFromList((short) 596, (short) 597, (short) 599); public static void SpawnNPC() { if (NPC.noSpawnCycle) { NPC.noSpawnCycle = false; } else { bool windyForButterflies = NPC.TooWindyForButterflies; bool flag1 = (double) Main.windSpeedTarget < -0.2 || (double) Main.windSpeedTarget > 0.2; NPC.RevengeManager.CheckRespawns(); bool flag2 = false; int index1 = 0; int index2 = 0; int num1 = 0; int num2 = 0; for (int index3 = 0; index3 < (int) byte.MaxValue; ++index3) { if (Main.player[index3].active) ++num2; } float num3 = 0.0f; for (int index4 = 0; index4 < 200; ++index4) { if (Main.npc[index4].active) { switch (Main.npc[index4].type) { case 315: case 325: case 327: case 328: case 344: case 345: case 346: num3 += Main.npc[index4].npcSlots; continue; default: continue; } } } float num4 = (float) (int) ((double) NPC.defaultMaxSpawns * (2.0 + 0.300000011920929 * (double) num2)); for (int index5 = 0; index5 < (int) byte.MaxValue; ++index5) { if (Main.player[index5].active && !Main.player[index5].dead) { bool flag3 = false; if (!Main.player[index5].isNearNPC(398, (float) NPC.MoonLordFightingDistance)) { if (Main.slimeRain) NPC.SlimeRainSpawns(index5); bool flag4 = false; bool flag5 = false; bool flag6 = false; bool flag7 = false; bool flag8 = false; bool flag9 = false; bool flag10 = false; bool flag11 = false; bool flag12 = false; bool flag13 = false; bool flag14 = NPC.downedPlantBoss && Main.hardMode; bool itAhappyWindyDay = Main.IsItAHappyWindyDay; if (Main.player[index5].active && Main.invasionType > 0 && Main.invasionDelay == 0 && Main.invasionSize > 0 && (double) Main.player[index5].position.Y < Main.worldSurface * 16.0 + (double) NPC.sHeight) { int num5 = 3000; if ((double) Main.player[index5].position.X > Main.invasionX * 16.0 - (double) num5 && (double) Main.player[index5].position.X < Main.invasionX * 16.0 + (double) num5) flag6 = true; else if (Main.invasionX >= (double) (Main.maxTilesX / 2 - 5) && Main.invasionX <= (double) (Main.maxTilesX / 2 + 5)) { for (int index6 = 0; index6 < 200; ++index6) { if (Main.npc[index6].townNPC && (double) Math.Abs(Main.player[index5].position.X - Main.npc[index6].Center.X) < (double) num5) { if (Main.rand.Next(3) != 0) { flag6 = true; break; } break; } } } } if (Main.player[index5].ZoneTowerSolar || Main.player[index5].ZoneTowerNebula || Main.player[index5].ZoneTowerVortex || Main.player[index5].ZoneTowerStardust) flag6 = true; int index7 = (int) ((double) Main.player[index5].position.X + (double) (Main.player[index5].width / 2)) / 16; int index8 = (int) ((double) Main.player[index5].position.Y + (double) (Main.player[index5].height / 2)) / 16; if (Main.wallHouse[(int) Main.tile[index7, index8].wall]) flag5 = true; if (Main.tile[index7, index8].wall == (ushort) 87) flag4 = true; bool flag15 = false; NPC.spawnRate = NPC.defaultSpawnRate; NPC.maxSpawns = NPC.defaultMaxSpawns; if (Main.hardMode) { NPC.spawnRate = (int) ((double) NPC.defaultSpawnRate * 0.9); NPC.maxSpawns = NPC.defaultMaxSpawns + 1; } if ((double) Main.player[index5].position.Y > (double) (Main.UnderworldLayer * 16)) NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 2.0); else if ((double) Main.player[index5].position.Y > Main.rockLayer * 16.0 + (double) NPC.sHeight) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.4); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.89999997615814); } else if ((double) Main.player[index5].position.Y > Main.worldSurface * 16.0 + (double) NPC.sHeight) { if (Main.hardMode) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.45); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.79999995231628); } else { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.5); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.70000004768372); } } else if (!Main.dayTime) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.6); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.29999995231628); if (Main.bloodMoon) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.3); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.79999995231628); } if ((Main.pumpkinMoon || Main.snowMoon) && (double) Main.player[index5].position.Y < Main.worldSurface * 16.0) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.2); NPC.maxSpawns *= 2; } } else if (Main.dayTime && Main.eclipse) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.2); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.89999997615814); } if (Main.player[index5].ZoneSnow && (double) Main.player[index5].position.Y / 16.0 < Main.worldSurface) { NPC.maxSpawns = (int) ((double) NPC.maxSpawns + (double) NPC.maxSpawns * (double) Main.cloudAlpha); NPC.spawnRate = (int) ((double) NPC.spawnRate * (1.0 - (double) Main.cloudAlpha + 1.0) / 2.0); } if (Main.drunkWorld && Main.tile[index7, index8].wall == (ushort) 86) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.3); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.79999995231628); } if (Main.player[index5].ZoneDungeon) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.3); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.79999995231628); } else if (Main.player[index5].ZoneSandstorm) { NPC.spawnRate = (int) ((double) NPC.spawnRate * (Main.hardMode ? 0.400000005960464 : 0.899999976158142)); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * (Main.hardMode ? 1.5 : 1.20000004768372)); } else if (Main.player[index5].ZoneUndergroundDesert) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.200000002980232); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 3.0); } else if (Main.player[index5].ZoneJungle) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.4); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.5); } else if (Main.player[index5].ZoneCorrupt || Main.player[index5].ZoneCrimson) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.65); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.29999995231628); } else if (Main.player[index5].ZoneMeteor) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.4); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.10000002384186); } if (Main.player[index5].ZoneHallow && (double) Main.player[index5].position.Y > Main.rockLayer * 16.0 + (double) NPC.sHeight) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.65); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.29999995231628); } if (Main.wofNPCIndex >= 0 && (double) Main.player[index5].position.Y > (double) (Main.UnderworldLayer * 16)) { NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.300000011920929); NPC.spawnRate *= 3; } if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.2) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.600000023841858); else if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.4) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.699999988079071); else if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.6) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.800000011920929); else if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.8) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.899999976158142); if ((double) Main.player[index5].position.Y / 16.0 > (Main.worldSurface + Main.rockLayer) / 2.0 || Main.player[index5].ZoneCorrupt || Main.player[index5].ZoneCrimson) { if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.2) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.699999988079071); else if ((double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns * 0.4) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.899999976158142); } if (Main.player[index5].invis) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.20000004768372); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.800000011920929); } if (Main.player[index5].calmed) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.29999995231628); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.699999988079071); } if (Main.player[index5].sunflower) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.20000004768372); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.800000011920929); } if (Main.player[index5].enemySpawns) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.5); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 2.0); } if (Main.player[index5].ZoneWaterCandle || Main.player[index5].inventory[Main.player[index5].selectedItem].type == 148) { if (!Main.player[index5].ZonePeaceCandle && Main.player[index5].inventory[Main.player[index5].selectedItem].type != 3117) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.75); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.5); } } else if (Main.player[index5].ZonePeaceCandle || Main.player[index5].inventory[Main.player[index5].selectedItem].type == 3117) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.3); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.699999988079071); } if (Main.player[index5].ZoneWaterCandle && (double) Main.player[index5].position.Y / 16.0 < Main.worldSurface * 0.349999994039536) NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.5); if (Main.player[index5].isNearFairy()) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.20000004768372); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.800000011920929); } if ((double) NPC.spawnRate < (double) NPC.defaultSpawnRate * 0.1) NPC.spawnRate = (int) ((double) NPC.defaultSpawnRate * 0.1); if (NPC.maxSpawns > NPC.defaultMaxSpawns * 3) NPC.maxSpawns = NPC.defaultMaxSpawns * 3; if (Main.getGoodWorld) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 0.800000011920929); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 1.20000004768372); } if (Main.GameModeInfo.IsJourneyMode) { CreativePowers.SpawnRateSliderPerPlayerPower power = CreativePowerManager.Instance.GetPower(); if (power != null && power.GetIsUnlocked()) { if (!power.GetShouldDisableSpawnsFor(index5)) { float num6; if (power.GetRemappedSliderValueFor(index5, out num6)) { NPC.spawnRate = (int) ((double) NPC.spawnRate / (double) num6); NPC.maxSpawns = (int) ((double) NPC.maxSpawns * (double) num6); } } else continue; } } if ((Main.pumpkinMoon || Main.snowMoon) && (double) Main.player[index5].position.Y < Main.worldSurface * 16.0) { NPC.maxSpawns = (int) ((double) NPC.defaultMaxSpawns * (2.0 + 0.3 * (double) num2)); NPC.spawnRate = 20; } if (DD2Event.Ongoing && Main.player[index5].ZoneOldOneArmy) { NPC.maxSpawns = NPC.defaultMaxSpawns; NPC.spawnRate = NPC.defaultSpawnRate; } if (flag6) { NPC.maxSpawns = (int) ((double) NPC.defaultMaxSpawns * (2.0 + 0.3 * (double) num2)); NPC.spawnRate = 20; } if (Main.player[index5].ZoneDungeon && !NPC.downedBoss3) NPC.spawnRate = 10; if (!flag6 && (!Main.bloodMoon && !Main.pumpkinMoon && !Main.snowMoon || Main.dayTime) && (!Main.eclipse || !Main.dayTime) && !Main.player[index5].ZoneDungeon && !Main.player[index5].ZoneCorrupt && !Main.player[index5].ZoneCrimson && !Main.player[index5].ZoneMeteor && !Main.player[index5].ZoneOldOneArmy) { if ((double) Main.player[index5].Center.Y / 16.0 > (double) Main.UnderworldLayer) { if ((double) Main.player[index5].townNPCs == 1.0) { if (Main.rand.Next(2) == 0) flag5 = true; if (Main.rand.Next(10) == 0) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.5); } else NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.25); } else if ((double) Main.player[index5].townNPCs == 2.0) { if (Main.rand.Next(4) != 0) flag5 = true; if (Main.rand.Next(5) == 0) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.5); } else NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.5); } else if ((double) Main.player[index5].townNPCs >= 3.0) { if (Main.rand.Next(10) != 0) flag5 = true; if (Main.rand.Next(3) == 0) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.5); } else NPC.spawnRate = (int) ((double) NPC.spawnRate * 2.0); } } else if ((double) Main.player[index5].townNPCs == 1.0) { flag5 = true; if (Main.player[index5].ZoneGraveyard) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 1.66); if (Main.rand.Next(9) == 1) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } } else if (Main.rand.Next(3) == 1) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } else NPC.spawnRate = (int) ((double) NPC.spawnRate * 2.0); } else if ((double) Main.player[index5].townNPCs == 2.0) { flag5 = true; if (Main.player[index5].ZoneGraveyard) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 2.33); if (Main.rand.Next(6) == 1) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } } else if (Main.rand.Next(3) != 0) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } else NPC.spawnRate = (int) ((double) NPC.spawnRate * 3.0); } else if ((double) Main.player[index5].townNPCs >= 3.0) { flag5 = true; if (Main.player[index5].ZoneGraveyard) { NPC.spawnRate = (int) ((double) NPC.spawnRate * 3.0); if (Main.rand.Next(3) == 1) { flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } } else { if (!Main.expertMode || Main.rand.Next(30) != 0) flag12 = true; NPC.maxSpawns = (int) ((double) NPC.maxSpawns * 0.6); } } } bool flag16 = false; if (Main.player[index5].active && !Main.player[index5].dead && (double) Main.player[index5].nearbyActiveNPCs < (double) NPC.maxSpawns && Main.rand.Next(NPC.spawnRate) == 0) { bool flag17 = Main.player[index5].ZoneTowerNebula || Main.player[index5].ZoneTowerSolar || Main.player[index5].ZoneTowerStardust || Main.player[index5].ZoneTowerVortex; NPC.spawnRangeX = (int) ((double) (NPC.sWidth / 16) * 0.7); NPC.spawnRangeY = (int) ((double) (NPC.sHeight / 16) * 0.7); NPC.safeRangeX = (int) ((double) (NPC.sWidth / 16) * 0.52); NPC.safeRangeY = (int) ((double) (NPC.sHeight / 16) * 0.52); if (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 1254 || Main.player[index5].inventory[Main.player[index5].selectedItem].type == 1299 || Main.player[index5].scope) { float num7 = 1.5f; if (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 1254 && Main.player[index5].scope) num7 = 1.25f; else if (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 1254) num7 = 1.5f; else if (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 1299) num7 = 1.5f; else if (Main.player[index5].scope) num7 = 2f; NPC.spawnRangeX += (int) ((double) (NPC.sWidth / 16) * 0.5 / (double) num7); NPC.spawnRangeY += (int) ((double) (NPC.sHeight / 16) * 0.5 / (double) num7); NPC.safeRangeX += (int) ((double) (NPC.sWidth / 16) * 0.5 / (double) num7); NPC.safeRangeY += (int) ((double) (NPC.sHeight / 16) * 0.5 / (double) num7); } int minValue1 = (int) ((double) Main.player[index5].position.X / 16.0) - NPC.spawnRangeX; int maxValue1 = (int) ((double) Main.player[index5].position.X / 16.0) + NPC.spawnRangeX; int minValue2 = (int) ((double) Main.player[index5].position.Y / 16.0) - NPC.spawnRangeY; int maxValue2 = (int) ((double) Main.player[index5].position.Y / 16.0) + NPC.spawnRangeY; int num8 = (int) ((double) Main.player[index5].position.X / 16.0) - NPC.safeRangeX; int num9 = (int) ((double) Main.player[index5].position.X / 16.0) + NPC.safeRangeX; int num10 = (int) ((double) Main.player[index5].position.Y / 16.0) - NPC.safeRangeY; int num11 = (int) ((double) Main.player[index5].position.Y / 16.0) + NPC.safeRangeY; if (minValue1 < 0) minValue1 = 0; if (maxValue1 > Main.maxTilesX) maxValue1 = Main.maxTilesX; if (minValue2 < 0) minValue2 = 0; if (maxValue2 > Main.maxTilesY) maxValue2 = Main.maxTilesY; for (int index9 = 0; index9 < 50; ++index9) { int index10 = Main.rand.Next(minValue1, maxValue1); int index11 = Main.rand.Next(minValue2, maxValue2); if (!Main.tile[index10, index11].nactive() || !Main.tileSolid[(int) Main.tile[index10, index11].type]) { if (flag17 || !Main.wallHouse[(int) Main.tile[index10, index11].wall]) { if (!flag6 && (double) index11 < Main.worldSurface * 0.349999994039536 && !flag12 && ((double) index10 < (double) Main.maxTilesX * 0.45 || (double) index10 > (double) Main.maxTilesX * 0.55 || Main.hardMode)) { num1 = (int) Main.tile[index10, index11].type; index1 = index10; index2 = index11; flag15 = true; flag3 = true; } else if (!flag6 && (double) index11 < Main.worldSurface * 0.449999988079071 && !flag12 && Main.hardMode && Main.rand.Next(10) == 0) { num1 = (int) Main.tile[index10, index11].type; index1 = index10; index2 = index11; flag15 = true; flag3 = true; } else { for (int index12 = index11; index12 < Main.maxTilesY && index12 < maxValue2; ++index12) { if (Main.tile[index10, index12].nactive() && Main.tileSolid[(int) Main.tile[index10, index12].type]) { if (index10 < num8 || index10 > num9 || index12 < num10 || index12 > num11) { num1 = (int) Main.tile[index10, index12].type; index1 = index10; index2 = index12; flag15 = true; break; } break; } } } if (!flag3 && Main.player[index5].afkCounter >= NPC.AFKTimeNeededForNoWorms) flag5 = true; if (flag15) { int num12 = index1 - NPC.spawnSpaceX / 2; int num13 = index1 + NPC.spawnSpaceX / 2; int num14 = index2 - NPC.spawnSpaceY; int num15 = index2; if (num12 < 0) flag15 = false; if (num13 > Main.maxTilesX) flag15 = false; if (num14 < 0) flag15 = false; if (num15 > Main.maxTilesY) flag15 = false; if (flag15) { for (int index13 = num12; index13 < num13; ++index13) { for (int index14 = num14; index14 < num15; ++index14) { if (Main.tile[index13, index14].nactive() && Main.tileSolid[(int) Main.tile[index13, index14].type]) { flag15 = false; break; } if (Main.tile[index13, index14].lava()) { flag15 = false; break; } } } } if (index1 >= num8 && index1 <= num9) flag16 = true; } } else continue; } if (flag15 || flag15) break; } } if (flag15) { Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle(index1 * 16, index2 * 16, 16, 16); for (int index15 = 0; index15 < (int) byte.MaxValue; ++index15) { if (Main.player[index15].active) { Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) ((double) Main.player[index15].position.X + (double) (Main.player[index15].width / 2) - (double) (NPC.sWidth / 2) - (double) NPC.safeRangeX), (int) ((double) Main.player[index15].position.Y + (double) (Main.player[index15].height / 2) - (double) (NPC.sHeight / 2) - (double) NPC.safeRangeY), NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2); if (rectangle1.Intersects(rectangle2)) flag15 = false; } } } if (flag15) { if (Main.player[index5].ZoneDungeon && (!Main.tileDungeon[(int) Main.tile[index1, index2].type] || Main.tile[index1, index2 - 1].wall == (ushort) 0)) flag15 = false; if (Main.tile[index1, index2 - 1].liquid > (byte) 0 && Main.tile[index1, index2 - 2].liquid > (byte) 0 && !Main.tile[index1, index2 - 1].lava()) { if (Main.tile[index1, index2 - 1].honey()) flag8 = true; else flag7 = true; } int index16 = (int) Main.player[index5].Center.X / 16; int index17 = (int) ((double) Main.player[index5].Bottom.Y + 8.0) / 16; if (Main.tile[index1, index2].type == (ushort) 367) flag10 = true; else if (Main.tile[index1, index2].type == (ushort) 368) flag9 = true; else if (Main.tile[index16, index17].type == (ushort) 367) flag10 = true; else if (Main.tile[index16, index17].type == (ushort) 368) { flag9 = true; } else { int num16 = Main.rand.Next(20, 31); int num17 = Main.rand.Next(1, 4); if (index1 - num16 < 0) num16 = index1; if (index2 - num16 < 0) num16 = index2; if (index1 + num16 >= Main.maxTilesX) num16 = Main.maxTilesX - index1 - 1; if (index2 + num16 >= Main.maxTilesY) num16 = Main.maxTilesY - index2 - 1; for (int index18 = index1 - num16; index18 <= index1 + num16; index18 += num17) { int num18 = Main.rand.Next(1, 4); for (int index19 = index2 - num16; index19 <= index2 + num16; index19 += num18) { if (Main.tile[index18, index19].type == (ushort) 367) flag10 = true; if (Main.tile[index18, index19].type == (ushort) 368) flag9 = true; } } int num19 = Main.rand.Next(30, 61); int num20 = Main.rand.Next(3, 7); if (index16 - num19 < 0) num19 = index16; if (index17 - num19 < 0) num19 = index17; if (index16 + num19 >= Main.maxTilesX) num19 = Main.maxTilesX - index16 - 2; if (index17 + num19 >= Main.maxTilesY) num19 = Main.maxTilesY - index17 - 2; for (int index20 = index16 - num19; index20 <= index16 + num19; index20 += num20) { int num21 = Main.rand.Next(3, 7); for (int index21 = index17 - num19; index21 <= index17 + num19; index21 += num21) { if (Main.tile[index20, index21].type == (ushort) 367) flag10 = true; if (Main.tile[index20, index21].type == (ushort) 368) flag9 = true; } } } if (flag8) flag15 = false; if ((num1 == 477 || num1 == 492) && !Main.bloodMoon && !Main.eclipse && Main.invasionType <= 0 && !Main.pumpkinMoon && !Main.snowMoon && !Main.slimeRain && Main.rand.Next(100) < 10) flag15 = false; } if (flag15) { if ((double) index2 > Main.rockLayer && index2 < Main.UnderworldLayer && !Main.player[index5].ZoneDungeon && !flag6) { if (Main.rand.Next(3) == 0) { int num22 = Main.rand.Next(5, 15); if (index1 - num22 >= 0 && index1 + num22 < Main.maxTilesX) { for (int index22 = index1 - num22; index22 < index1 + num22; ++index22) { for (int index23 = index2 - num22; index23 < index2 + num22; ++index23) { if (Main.tile[index22, index23].wall == (ushort) 62) flag11 = true; } } } } else { int index24 = (int) Main.player[index5].position.X / 16; int index25 = (int) Main.player[index5].position.Y / 16; if (Main.tile[index24, index25].wall == (ushort) 62) flag11 = true; } } if ((double) index2 < Main.rockLayer && index2 > 200 && !Main.player[index5].ZoneDungeon && !flag6) { if (Main.rand.Next(3) == 0) { int num23 = Main.rand.Next(5, 15); if (index1 - num23 >= 0 && index1 + num23 < Main.maxTilesX) { for (int index26 = index1 - num23; index26 < index1 + num23; ++index26) { for (int index27 = index2 - num23; index27 < index2 + num23; ++index27) { if (WallID.Sets.Conversion.Sandstone[(int) Main.tile[index26, index27].wall] || WallID.Sets.Conversion.HardenedSand[(int) Main.tile[index26, index27].wall]) flag13 = true; } } } } else { int index28 = (int) Main.player[index5].position.X / 16; int index29 = (int) Main.player[index5].position.Y / 16; if (WallID.Sets.Conversion.Sandstone[(int) Main.tile[index28, index29].wall] || WallID.Sets.Conversion.HardenedSand[(int) Main.tile[index28, index29].wall]) flag13 = true; } } flag2 = false; int type = (int) Main.tile[index1, index2].type; int num24 = (int) Main.tile[index1, index2 - 1].wall; if (Main.tile[index1, index2 - 2].wall == (ushort) 244 || Main.tile[index1, index2].wall == (ushort) 244) num24 = 244; bool flag18 = (double) new Point(index7 - index1, index8 - index2).X * (double) Main.windSpeedTarget > 0.0; int tileType = NPC.SpawnNPC_TryFindingProperGroundTileType(type, index1, index2); int newNPC = 200; if (Main.player[index5].ZoneTowerNebula) { bool flag19 = true; int Type = 0; while (flag19) { Type = Utils.SelectRandom(Main.rand, 424, 424, 424, 423, 423, 423, 421, 421, 421, 421, 421, 420); flag19 = false; if (Type == 424 && NPC.CountNPCS(Type) >= 2) flag19 = true; if (Type == 423 && NPC.CountNPCS(Type) >= 3) flag19 = true; if (Type == 420 && NPC.CountNPCS(Type) >= 2) flag19 = true; } if (Type != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type, 1); } else if (Main.player[index5].ZoneTowerVortex) { bool flag20 = true; int Type = 0; while (flag20) { Type = Utils.SelectRandom(Main.rand, 429, 429, 429, 429, 427, 427, 425, 425, 426); flag20 = false; if (Type == 425 && NPC.CountNPCS(Type) >= 3) flag20 = true; if (Type == 426 && NPC.CountNPCS(Type) >= 3) flag20 = true; if (Type == 429 && NPC.CountNPCS(Type) >= 4) flag20 = true; } if (Type != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type, 1); } else if (Main.player[index5].ZoneTowerStardust) { int Type = Utils.SelectRandom(Main.rand, 411, 411, 411, 409, 409, 407, 402, 405); if (Type != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type, 1); } else if (Main.player[index5].ZoneTowerSolar) { bool flag21 = true; int Type = 0; while (flag21) { Type = Utils.SelectRandom(Main.rand, 518, 419, 418, 412, 417, 416, 415); flag21 = false; if (Type == 415 && NPC.CountNPCS(Type) >= 2) flag21 = true; if (Type == 416 && NPC.CountNPCS(Type) >= 1) flag21 = true; if (Type == 518 && NPC.CountNPCS(Type) >= 2) flag21 = true; if (Type == 412 && NPC.CountNPCS(Type) >= 1) flag21 = true; } if (Type != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type, 1); } else if (flag3) { int maxValue3 = 8; int maxValue4 = 30; bool flag22 = (double) Math.Abs(index1 - Main.maxTilesX / 2) / (double) (Main.maxTilesX / 2) > 0.330000013113022 && (Main.wallLight[(int) Main.tile[index7, index8].wall] || Main.tile[index7, index8].wall == (ushort) 73); if (flag22 && NPC.AnyDanger()) flag22 = false; if (Main.player[index5].ZoneWaterCandle) { maxValue3 = 3; maxValue4 = 10; } if (flag6 && Main.invasionType == 4) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 388); else if (flag22 && Main.hardMode && NPC.downedGolemBoss && (!NPC.downedMartians && Main.rand.Next(maxValue3) == 0 || Main.rand.Next(maxValue4) == 0) && !NPC.AnyNPCs(399)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 399); else if (flag22 && Main.hardMode && NPC.downedGolemBoss && (!NPC.downedMartians && Main.rand.Next(maxValue3) == 0 || Main.rand.Next(maxValue4) == 0) && !NPC.AnyNPCs(399) && (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 148 || Main.player[index5].ZoneWaterCandle)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 399); else if (Main.hardMode && !NPC.AnyNPCs(87) && !flag5 && Main.rand.Next(10) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 87, 1); else if (Main.hardMode && !NPC.AnyNPCs(87) && !flag5 && Main.rand.Next(10) == 0 && (Main.player[index5].inventory[Main.player[index5].selectedItem].type == 148 || Main.player[index5].ZoneWaterCandle)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 87, 1); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 48); } else if (flag6) { switch (Main.invasionType) { case 1: if (Main.hardMode && !NPC.AnyNPCs(471) && Main.rand.Next(30) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 471); break; } if (Main.rand.Next(9) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 29); break; } if (Main.rand.Next(5) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 26); break; } if (Main.rand.Next(3) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 111); break; } if (Main.rand.Next(3) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 27); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 28); break; case 2: if (Main.rand.Next(7) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 145); break; } if (Main.rand.Next(3) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 143); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 144); break; case 3: if (Main.invasionSize < Main.invasionSizeStart / 2 && Main.rand.Next(20) == 0 && !NPC.AnyNPCs(491) && !Collision.SolidTiles(index1 - 20, index1 + 20, index2 - 40, index2 - 10)) { NPC.NewNPC(index1 * 16 + 8, (index2 - 10) * 16, 491); break; } if (Main.rand.Next(30) == 0 && !NPC.AnyNPCs(216)) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 216); break; } if (Main.rand.Next(11) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 215); break; } if (Main.rand.Next(9) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 252); break; } if (Main.rand.Next(7) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 214); break; } if (Main.rand.Next(3) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 213); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 212); break; case 4: int Type1 = 0; int num25 = Main.rand.Next(7); bool flag23 = (double) (Main.invasionSizeStart - Main.invasionSize) / (double) Main.invasionSizeStart >= 0.300000011920929 && !NPC.AnyNPCs(395); if (Main.rand.Next(45) == 0 & flag23) Type1 = 395; else if (num25 >= 6) { if (Main.rand.Next(20) == 0 & flag23) { Type1 = 395; } else { int num26 = Main.rand.Next(2); if (num26 == 0) Type1 = 390; if (num26 == 1) Type1 = 386; } } else if (num25 >= 4) { int num27 = Main.rand.Next(5); Type1 = num27 >= 2 ? (num27 >= 4 ? 388 : 381) : 382; } else { int num28 = Main.rand.Next(4); if (num28 == 3) { if (!NPC.AnyNPCs(520)) Type1 = 520; else num28 = Main.rand.Next(3); } if (num28 == 0) Type1 = 385; if (num28 == 1) Type1 = 389; if (num28 == 2) Type1 = 383; } if (Type1 != 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type1, 1); break; } break; } } else if (num24 == 244) { if (flag7) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 55); else if ((double) index2 > Main.worldSurface) { if (Main.rand.Next(3) == 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 447); else newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 300); } else if (Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 359); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 448); else if (Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 357); } else if (Main.player[index5].RollLuck(2) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 624); Main.npc[newNPC].timeLeft *= 10; } else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 443); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 539); else if (Main.halloween && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 303); else if (Main.xMas && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 337); else if (BirthdayParty.PartyIsUp && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 540); else if (Main.rand.Next(3) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, (int) Utils.SelectRandom(Main.rand, (short) 299, (short) 538)); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 46); } else if (!NPC.savedBartender && DD2Event.ReadyToFindBartender && !NPC.AnyNPCs(579) && Main.rand.Next(80) == 0 && !flag7) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 579); else if (Main.tile[index1, index2].wall == (ushort) 62 | flag11) { if (Main.tile[index1, index2].wall == (ushort) 62 && Main.rand.Next(8) == 0 && !flag7 && (double) index2 >= Main.rockLayer && index2 < Main.maxTilesY - 210 && !NPC.savedStylist && !NPC.AnyNPCs(354)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 354); else if (Main.hardMode && Main.rand.Next(10) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 163); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 164); } else if (((WallID.Sets.Conversion.HardenedSand[(int) Main.tile[index1, index2].wall] ? 1 : (WallID.Sets.Conversion.Sandstone[(int) Main.tile[index1, index2].wall] ? 1 : 0)) | (flag13 ? 1 : 0)) != 0 && WorldGen.checkUnderground(index1, index2) && NPC.Spawning_FlyingAntlionCheck(index1, index2)) { float num29 = 1f; if ((double) index2 > (Main.rockLayer * 2.0 + (double) Main.maxTilesY) / 3.0) num29 *= 0.5f; else if ((double) index2 > Main.rockLayer) num29 *= 0.75f; if (Main.rand.Next(20) == 0 && !flag7 && !NPC.savedGolfer && !NPC.AnyNPCs(589)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 589); else if (Main.hardMode && Main.rand.Next((int) (33.0 * (double) num29)) == 0 && !flag5 && (double) index2 > Main.worldSurface + 100.0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 510); else if (Main.rand.Next((int) (33.0 * (double) num29)) == 0 && !flag5 && (double) index2 > Main.worldSurface + 100.0 && NPC.CountNPCS(513) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 513); else if (Main.hardMode && Main.rand.Next(5) != 0) { List intList = new List(); if (Main.player[index5].ZoneCorrupt) { intList.Add(525); intList.Add(525); } if (Main.player[index5].ZoneCrimson) { intList.Add(526); intList.Add(526); } if (Main.player[index5].ZoneHallow) { intList.Add(527); intList.Add(527); } if (intList.Count == 0) { intList.Add(524); intList.Add(524); } if (Main.player[index5].ZoneCorrupt || Main.player[index5].ZoneCrimson) { intList.Add(533); intList.Add(529); } else { intList.Add(530); intList.Add(528); } intList.Add(532); int Type2 = Utils.SelectRandom(Main.rand, intList.ToArray()); NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type2); intList.Clear(); } else { int Type3 = Utils.SelectRandom(Main.rand, 69, 580, 580, 580, 581); if (Main.rand.Next(15) == 0) Type3 = 537; else if (Main.rand.Next(10) == 0) { switch (Type3) { case 580: Type3 = 508; break; case 581: Type3 = 509; break; } } NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type3); } } else if (Main.hardMode & flag7 && Main.player[index5].ZoneJungle && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 157); else if (Main.hardMode & flag7 && Main.player[index5].ZoneCrimson && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 242); else if (Main.hardMode & flag7 && Main.player[index5].ZoneCrimson && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 241); else if (((!flag12 ? 1 : (NPC.savedAngler ? 0 : (!NPC.AnyNPCs(376) ? 1 : 0))) & (flag7 ? 1 : 0)) != 0 && ((index1 < WorldGen.oceanDistance || index1 > Main.maxTilesX - WorldGen.oceanDistance) && Main.tileSand[tileType] && (double) index2 < Main.rockLayer || num1 == 53 && WorldGen.oceanDepths(index1, index2))) { bool flag24 = false; if (!NPC.savedAngler && !NPC.AnyNPCs(376) && (double) index2 < Main.worldSurface - 10.0) { int num30 = -1; for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num30 = j + 2; break; } } if (num30 > index2) num30 = index2; if (num30 > 0 && !flag16) { NPC.NewNPC(index1 * 16 + 8, num30 * 16, 376); flag24 = true; } } if (!flag24) { int num31 = -1; int num32 = -1; if ((double) index2 < Main.worldSurface && index2 > 50) { for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num31 = j + 2; if (!WorldGen.SolidTile(index1, num31 + 1) && !WorldGen.SolidTile(index1, num31 + 2)) { num32 = num31 + 2; break; } break; } } if (num31 > index2) num31 = index2; if (num32 > index2) num32 = index2; } if (num31 > 0 && !flag16 && Main.rand.Next(10) == 0) NPC.NewNPC(index1 * 16 + 8, num31 * 16, 602); else if (Main.rand.Next(10) == 0) { int num33 = Main.rand.Next(3); if (num33 == 0 && num31 > 0) NPC.NewNPC(index1 * 16 + 8, num31 * 16, 625); else if (num33 == 1 && num32 > 0) NPC.NewNPC(index1 * 16 + 8, num32 * 16, 615); else if (num33 == 2 && num32 > 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, num32 * 16, 627); else NPC.NewNPC(index1 * 16 + 8, num32 * 16, 626); } } else if (Main.rand.Next(40) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 220); else if (Main.rand.Next(18) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 221); else if (Main.rand.Next(8) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 65); else if (Main.rand.Next(3) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 67); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 64); } } else if (!flag7 && !NPC.savedAngler && !NPC.AnyNPCs(376) && (index1 < WorldGen.beachDistance || index1 > Main.maxTilesX - WorldGen.beachDistance) && Main.tileSand[tileType] && (double) index2 < Main.worldSurface) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 376); else if (!flag12 & flag7 && ((double) index2 > Main.rockLayer && Main.rand.Next(2) == 0 || tileType == 60)) { bool flag25 = false; if (tileType == 60 && (double) index2 < Main.worldSurface && index2 > 50 && Main.rand.Next(3) == 0 && Main.dayTime) { int num34 = -1; for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num34 = j + 2; break; } } if (num34 > index2) num34 = index2; if (num34 > 0 && !flag16) { flag25 = true; if (Main.rand.Next(4) == 0) { flag25 = true; NPC.NewNPC(index1 * 16 + 8, num34 * 16, 617); } else if (!flag1 && (double) Main.cloudAlpha == 0.0) { flag25 = true; int num35 = Main.rand.Next(1, 4); for (int index30 = 0; index30 < num35; ++index30) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num34 * 16 - 16, 613); else NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num34 * 16 - 16, 612); } } } } if (!flag25) { if (Main.hardMode && Main.rand.Next(3) > 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 102); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 58); } } else if (!flag12 & flag7 && (double) index2 > Main.worldSurface && Main.rand.Next(3) == 0) { if (Main.hardMode && Main.rand.Next(3) > 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 103); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 63); } else if (flag7 && Main.rand.Next(4) == 0 && (index1 > WorldGen.oceanDistance && index1 < Main.maxTilesX - WorldGen.oceanDistance || (double) index2 > Main.worldSurface + 50.0)) { if (Main.player[index5].ZoneCorrupt) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 57); else if ((double) index2 < Main.worldSurface && index2 > 50 && Main.rand.Next(3) != 0 && Main.dayTime) { int num36 = -1; for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num36 = j + 2; break; } } if (num36 > index2) num36 = index2; if (num36 > 0 && !flag16) { if (Main.rand.Next(5) == 0 && (num1 == 2 || num1 == 477)) NPC.NewNPC(index1 * 16 + 8, num36 * 16, 616); else if (num1 == 53) { if (Main.rand.Next(2) == 0 && !flag1 && (double) Main.cloudAlpha == 0.0) { int num37 = Main.rand.Next(1, 4); for (int index31 = 0; index31 < num37; ++index31) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num36 * 16 - 16, 613); else NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num36 * 16 - 16, 612); } } else NPC.NewNPC(index1 * 16 + 8, num36 * 16, 608); } else if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, num36 * 16, 362); else NPC.NewNPC(index1 * 16 + 8, num36 * 16, 364); } else if (num1 == 53) NPC.NewNPC(index1 * 16 + 8, num36 * 16, 607); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 592); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 55); } else if (num1 == 53) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 607); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 592); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 55); } else if (NPC.downedGoblins && Main.player[index5].RollLuck(20) == 0 && !flag7 && (double) index2 >= Main.rockLayer && index2 < Main.maxTilesY - 210 && !NPC.savedGoblin && !NPC.AnyNPCs(105)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 105); else if (Main.hardMode && Main.player[index5].RollLuck(20) == 0 && !flag7 && (double) index2 >= Main.rockLayer && index2 < Main.maxTilesY - 210 && !NPC.savedWizard && !NPC.AnyNPCs(106)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 106); else if (flag12) { if (Main.player[index5].ZoneGraveyard) { if (!flag7) { if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 606); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 610); } } else if ((double) index2 <= Main.worldSurface && (index1 < WorldGen.beachDistance || index1 > Main.maxTilesX - WorldGen.beachDistance)) { if (flag7) { int num38 = -1; int num39 = -1; if ((double) index2 < Main.worldSurface && index2 > 50) { for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num38 = j + 2; if (!WorldGen.SolidTile(index1, num38 + 1) && !WorldGen.SolidTile(index1, num38 + 2)) { num39 = num38 + 2; break; } break; } } if (num38 > index2) num38 = index2; if (num39 > index2) num39 = index2; } if (Main.rand.Next(2) == 0) { int num40 = Main.rand.Next(3); if (num40 == 0 && num38 > 0) NPC.NewNPC(index1 * 16 + 8, num38 * 16, 625); else if (num40 == 1 && num39 > 0) NPC.NewNPC(index1 * 16 + 8, num39 * 16, 615); else if (num40 == 2 && num39 > 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, num39 * 16, 627); else NPC.NewNPC(index1 * 16 + 8, num39 * 16, 626); } } else if (num38 > 0 && !flag16) NPC.NewNPC(index1 * 16 + 8, num38 * 16, 602); } else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 602); } else { int cattailX; int cattailY; if ((tileType == 2 || tileType == 477 || tileType == 53) && !windyForButterflies && !Main.raining && Main.dayTime && Main.rand.Next(2) == 0 && (double) index2 <= Main.worldSurface && NPC.FindCattailTop(index1, index2, out cattailX, out cattailY)) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(cattailX * 16 + 8, cattailY * 16, 601); else NPC.NewNPC(cattailX * 16 + 8, cattailY * 16, NPC.RollDragonflyType(tileType)); if (Main.rand.Next(3) == 0) NPC.NewNPC(cattailX * 16 + 8 - 16, cattailY * 16, NPC.RollDragonflyType(tileType)); if (Main.rand.Next(3) == 0) NPC.NewNPC(cattailX * 16 + 8 + 16, cattailY * 16, NPC.RollDragonflyType(tileType)); } else if (flag7) { if ((double) index2 < Main.worldSurface && index2 > 50 && Main.rand.Next(3) != 0 && Main.dayTime) { int num41 = -1; for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num41 = j + 2; break; } } if (num41 > index2) num41 = index2; if (num41 > 0 && !flag16) { switch (num1) { case 53: if (Main.rand.Next(2) == 0 && !flag1 && (double) Main.cloudAlpha == 0.0) { int num42 = Main.rand.Next(1, 4); for (int index32 = 0; index32 < num42; ++index32) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num41 * 16 - 16, 613); else NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num41 * 16 - 16, 612); } break; } NPC.NewNPC(index1 * 16 + 8, num41 * 16, 608); break; case 60: if (Main.rand.Next(2) == 0 && !flag1 && (double) Main.cloudAlpha == 0.0) { int num43 = Main.rand.Next(1, 4); for (int index33 = 0; index33 < num43; ++index33) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num41 * 16 - 16, 613); else NPC.NewNPC(index1 * 16 + 8 + Main.rand.Next(-16, 17), num41 * 16 - 16, 612); } break; } NPC.NewNPC(index1 * 16 + 8, num41 * 16, 617); break; default: if (Main.rand.Next(5) == 0 && (num1 == 2 || num1 == 477)) { NPC.NewNPC(index1 * 16 + 8, num41 * 16, 616); break; } if (Main.rand.Next(2) == 0) { NPC.NewNPC(index1 * 16 + 8, num41 * 16, 362); break; } NPC.NewNPC(index1 * 16 + 8, num41 * 16, 364); break; } } else if (num1 == 53) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 607); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 592); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 55); } else if (num1 == 53) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 607); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 592); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 55); } else { switch (tileType) { case 2: case 109: case 477: case 492: bool flag26 = (double) index2 <= Main.worldSurface; if (Main.raining && index2 <= Main.UnderworldLayer) { if ((double) index2 >= Main.rockLayer && Main.rand.Next(5) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(639, 646)); break; } if ((double) index2 >= Main.rockLayer && Main.rand.Next(5) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(646, 653)); break; } if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 448); break; } if (Main.rand.Next(3) != 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 357); break; } if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 593); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 230); break; } if (((Main.dayTime || Main.numClouds > 55 || (double) Main.cloudBGActive != 0.0 ? 0 : ((double) Star.starfallBoost > 3.0 ? 1 : 0)) & (flag26 ? 1 : 0)) != 0 && Main.player[index5].RollLuck(2) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 484); break; } if (((windyForButterflies || Main.dayTime ? 0 : (Main.rand.Next(NPC.fireFlyFriendly) == 0 ? 1 : 0)) & (flag26 ? 1 : 0)) != 0) { int Type4 = 355; if (tileType == 109) Type4 = 358; NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type4); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8 - 16, index2 * 16, Type4); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8 + 16, index2 * 16, Type4); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16 - 16, Type4); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16 + 16, Type4); break; } break; } if ((((double) Main.cloudAlpha != 0.0 || Main.dayTime ? 0 : (Main.rand.Next(5) == 0 ? 1 : 0)) & (flag26 ? 1 : 0)) != 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 611); break; } if (((!Main.dayTime || Main.time >= 18000.0 ? 0 : ((uint) Main.rand.Next(3) > 0U ? 1 : 0)) & (flag26 ? 1 : 0)) != 0) { int num44 = Main.rand.Next(4); if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 442); break; } switch (num44) { case 0: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 297); break; case 1: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 298); break; default: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 74); break; } } else { if (((windyForButterflies || Main.raining || !Main.dayTime ? 0 : (Main.rand.Next(NPC.butterflyChance) == 0 ? 1 : 0)) & (flag26 ? 1 : 0)) != 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 444); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 356); if (Main.rand.Next(4) == 0) NPC.NewNPC(index1 * 16 + 8 - 16, index2 * 16, 356); if (Main.rand.Next(4) == 0) { NPC.NewNPC(index1 * 16 + 8 + 16, index2 * 16, 356); break; } break; } if (((!windyForButterflies || Main.raining || !Main.dayTime ? 0 : (Main.rand.Next(NPC.butterflyChance / 2) == 0 ? 1 : 0)) & (flag26 ? 1 : 0)) != 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 605); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(3) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(4) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); break; } break; } if (Main.rand.Next(2) == 0 & flag26) { int num45 = Main.rand.Next(4); if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 442); break; } switch (num45) { case 0: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 297); break; case 1: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 298); break; default: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 74); break; } } else { if (index2 > Main.UnderworldLayer) { newNPC = NPC.SpawnNPC_SpawnLavaBaitCritters(index1, index2); break; } if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 443); break; } if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0 & flag26) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 539); break; } if (Main.halloween && Main.rand.Next(3) != 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 303); break; } if (Main.xMas && Main.rand.Next(3) != 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 337); break; } if (BirthdayParty.PartyIsUp && Main.rand.Next(3) != 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 540); break; } if (Main.rand.Next(3) == 0) { if ((double) index2 >= Main.rockLayer && index2 <= Main.UnderworldLayer) { if (Main.rand.Next(5) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(639, 646)); break; } break; } if (flag26) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, (int) Utils.SelectRandom(Main.rand, (short) 299, (short) 538)); break; } break; } if ((double) index2 >= Main.rockLayer && index2 <= Main.UnderworldLayer) { if (Main.rand.Next(5) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(646, 653)); break; } break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 46); break; } } break; case 53: NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(366, 368)); break; case 60: if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 445); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 361); break; case 147: case 161: if (Main.rand.Next(2) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 148); break; } NPC.NewNPC(index1 * 16 + 8, index2 * 16, 149); break; default: if ((double) index2 <= Main.worldSurface) return; goto case 2; } } } } else if (Main.player[index5].ZoneDungeon) { int num46 = 0; if (Main.tile[index1, index2].wall == (ushort) 94 || Main.tile[index1, index2].wall == (ushort) 96 || Main.tile[index1, index2].wall == (ushort) 98) num46 = 1; if (Main.tile[index1, index2].wall == (ushort) 95 || Main.tile[index1, index2].wall == (ushort) 97 || Main.tile[index1, index2].wall == (ushort) 99) num46 = 2; if (Main.player[index5].RollLuck(7) == 0) num46 = Main.rand.Next(3); bool flag27 = !NPC.downedBoss3; if (Main.drunkWorld && (double) Main.player[index5].position.Y / 16.0 < (double) (Main.dungeonY + 40)) flag27 = false; if (flag27) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 68); else if (!NPC.savedMech && Main.rand.Next(5) == 0 && !flag7 && !NPC.AnyNPCs(123) && (double) index2 > Main.rockLayer) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 123); else if (flag14 && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 287); else if (flag14 && num46 == 0 && Main.rand.Next(15) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 293); else if (flag14 && num46 == 1 && Main.rand.Next(15) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 291); else if (flag14 && num46 == 2 && Main.rand.Next(15) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 292); else if (flag14 && !NPC.AnyNPCs(290) && num46 == 0 && Main.rand.Next(35) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 290); else if (flag14 && (num46 == 1 || num46 == 2) && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 289); else if (flag14 && Main.rand.Next(20) == 0) { int num47 = 281; if (num46 == 0) num47 += 2; if (num46 == 2) num47 += 4; int Type5 = num47 + Main.rand.Next(2); if (!NPC.AnyNPCs(Type5)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type5); } else if (flag14 && Main.rand.Next(3) != 0) { int num48 = 269; if (num46 == 0) num48 += 4; if (num46 == 2) num48 += 8; newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, num48 + Main.rand.Next(4)); } else if (Main.player[index5].RollLuck(35) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 71); else if (num46 == 1 && Main.rand.Next(3) == 0 && !NPC.NearSpikeBall(index1, index2)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 70); else if (num46 == 2 && Main.rand.Next(5) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 72); else if (num46 == 0 && Main.rand.Next(7) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 34); else if (Main.rand.Next(7) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 32); } else { switch (Main.rand.Next(5)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 294); break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 295); break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 296); break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 31); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-14); break; } if (Main.rand.Next(5) == 0) { Main.npc[newNPC].SetDefaults(-13); break; } break; } } } else if (Main.player[index5].ZoneMeteor) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 23); else if (DD2Event.Ongoing && Main.player[index5].ZoneOldOneArmy) DD2Event.SpawnNPC(ref newNPC); else if ((double) index2 <= Main.worldSurface && !Main.dayTime && Main.snowMoon) { int waveNumber = NPC.waveNumber; if (Main.rand.Next(30) == 0 && NPC.CountNPCS(341) < 4) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 341); else if (waveNumber >= 20) { int num49 = Main.rand.Next(3); if ((double) num3 < (double) num2 * (double) num4) { switch (num49) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346); break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344); break; } } } else if (waveNumber >= 19) newNPC = Main.rand.Next(10) != 0 || NPC.CountNPCS(345) >= 4 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(346) >= 5 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 7 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (waveNumber >= 18) newNPC = Main.rand.Next(10) != 0 || NPC.CountNPCS(345) >= 3 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(346) >= 4 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 6 ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 351)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (waveNumber >= 17) newNPC = Main.rand.Next(10) != 0 || NPC.CountNPCS(345) >= 2 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(346) >= 3 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 5 ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 351)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (waveNumber >= 16) newNPC = Main.rand.Next(10) != 0 || NPC.CountNPCS(345) >= 2 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(346) >= 2 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 4 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 352)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (waveNumber >= 15) newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(345) ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(346) >= 2 ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 3 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (waveNumber == 14) { if (Main.rand.Next(10) == 0 && !NPC.AnyNPCs(345)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345); else if (Main.rand.Next(10) == 0 && !NPC.AnyNPCs(346)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346); else if (Main.rand.Next(10) == 0 && !NPC.AnyNPCs(344)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344); else if (Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343); } else newNPC = waveNumber != 13 ? (waveNumber != 12 ? (waveNumber != 11 ? (waveNumber != 10 ? (waveNumber != 9 ? (waveNumber != 8 ? (waveNumber != 7 ? (waveNumber != 6 ? (waveNumber != 5 ? (waveNumber != 4 ? (waveNumber != 3 ? (waveNumber != 2 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350))) : (Main.rand.Next(8) != 0 ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(344) ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(344) ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(8) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344))) : (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 2 ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(346) ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(4) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(346) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 350) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 351)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(346) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(344) ? (Main.rand.Next(2) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(346) ? (Main.rand.Next(10) != 0 || NPC.CountNPCS(344) >= 2 ? (Main.rand.Next(6) != 0 ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 348)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 351)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(345) ? (Main.rand.Next(6) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 352)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(345) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(344) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(338, 341)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 344)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345))) : (Main.rand.Next(10) != 0 || NPC.AnyNPCs(345) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(346) ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(6) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 347) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 342)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 343)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 352)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 346)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 345)); } else if ((double) index2 <= Main.worldSurface && !Main.dayTime && Main.pumpkinMoon) { int waveNumber = NPC.waveNumber; int num50; if (NPC.waveNumber >= 15) { if ((double) num3 < (double) num2 * (double) num4) newNPC = Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); } else { switch (waveNumber) { case 2: newNPC = Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326); break; case 3: newNPC = Main.rand.Next(6) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329); break; case 4: newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(325) ? (Main.rand.Next(10) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 5: newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(325) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(5) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 6: newNPC = Main.rand.Next(7) != 0 || NPC.CountNPCS(325) >= 2 ? (Main.rand.Next(6) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 7: newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(327) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(5) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); break; case 8: newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(327) ? (Main.rand.Next(5) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); break; case 9: newNPC = Main.rand.Next(8) != 0 || NPC.AnyNPCs(327) ? (Main.rand.Next(8) != 0 || NPC.AnyNPCs(325) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(315) ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); break; case 10: newNPC = Main.rand.Next(10) != 0 || NPC.AnyNPCs(327) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(325) ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(315) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(5) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); break; case 11: if (Main.rand.Next(10) == 0 && !NPC.AnyNPCs(327)) num50 = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); newNPC = Main.rand.Next(7) != 0 || NPC.CountNPCS(325) >= 2 ? (Main.rand.Next(10) != 0 || NPC.AnyNPCs(315) ? (Main.rand.Next(10) != 0 ? (Main.rand.Next(7) != 0 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 12: if (Main.rand.Next(7) == 0 && NPC.CountNPCS(327) < 2) num50 = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); newNPC = Main.rand.Next(7) != 0 || NPC.CountNPCS(325) >= 2 ? (Main.rand.Next(7) != 0 || NPC.CountNPCS(315) >= 2 ? (Main.rand.Next(7) != 0 ? (Main.rand.Next(5) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 326) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 13: if (Main.rand.Next(7) == 0 && NPC.CountNPCS(327) < 2) num50 = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); newNPC = Main.rand.Next(5) != 0 || NPC.CountNPCS(325) >= 3 ? (Main.rand.Next(5) != 0 || NPC.CountNPCS(315) >= 3 ? (Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 329) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 330)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; case 14: if (Main.rand.Next(5) == 0 && NPC.CountNPCS(327) < 3) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 327); break; } if (Main.rand.Next(5) == 0 && NPC.CountNPCS(325) < 3) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 325); break; } if ((double) num3 < (double) num2 * (double) num4) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 315); break; } break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(305, 315)); break; } } } else if ((double) index2 <= Main.worldSurface && Main.dayTime && Main.eclipse) { bool flag28 = false; if (NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3) flag28 = true; newNPC = !flag28 || Main.rand.Next(80) != 0 || NPC.AnyNPCs(477) ? (Main.rand.Next(50) != 0 || NPC.AnyNPCs(251) ? (!NPC.downedPlantBoss || Main.rand.Next(5) != 0 || NPC.AnyNPCs(466) ? (!NPC.downedPlantBoss || Main.rand.Next(20) != 0 || NPC.AnyNPCs(463) ? (!NPC.downedPlantBoss || Main.rand.Next(20) != 0 || NPC.CountNPCS(467) >= 2 ? (Main.rand.Next(15) != 0 ? (!flag28 || Main.rand.Next(13) != 0 ? (Main.rand.Next(8) != 0 ? (!NPC.downedPlantBoss || Main.rand.Next(7) != 0 ? (!NPC.downedPlantBoss || Main.rand.Next(5) != 0 ? (Main.rand.Next(4) != 0 ? (Main.rand.Next(3) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 166) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 462)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 461)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 162)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 460)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 468)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 469)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 253)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 159)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 467)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 463)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 466)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 251)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 477); } else if (NPC.fairyLog && Main.player[index5].RollLuck(500) == 0 && !NPC.AnyHelpfulFairies() && (double) index2 >= (Main.worldSurface + Main.rockLayer) / 2.0 && index2 < Main.maxTilesY - 300) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(583, 586)); Main.npc[newNPC].ai[2] = 2f; Main.npc[newNPC].TargetClosest(); Main.npc[newNPC].ai[3] = 0.0f; } else if (!flag7 && (!Main.dayTime || Main.tile[index1, index2].wall > (ushort) 0) && Main.tile[index7, index8].wall == (ushort) 244 && !Main.eclipse && !Main.bloodMoon && Main.player[index5].RollLuck(30) == 0 && NPC.CountNPCS(624) <= Main.rand.Next(3)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 624); else if (!flag7 && !Main.eclipse && !Main.bloodMoon && Main.player[index5].RollLuck(10) == 0 && (double) index2 >= Main.worldSurface * 0.800000011920929 && (double) index2 < Main.worldSurface * 1.10000002384186 && NPC.CountNPCS(624) <= Main.rand.Next(3) && (!Main.dayTime || Main.tile[index1, index2].wall > (ushort) 0) && (Main.tile[index1, index2].wall == (ushort) 2 || Main.tile[index1, index2].wall == (ushort) 196 || Main.tile[index1, index2].wall == (ushort) 197 || Main.tile[index1, index2].wall == (ushort) 198 || Main.tile[index1, index2].wall == (ushort) 199)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 624); else if (((!Main.hardMode ? 0 : (num1 == 70 ? 1 : 0)) & (flag7 ? 1 : 0)) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 256); else if (num1 == 70 && (double) index2 <= Main.worldSurface && Main.rand.Next(3) != 0) { if (!Main.hardMode && Main.rand.Next(6) == 0 || Main.rand.Next(12) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 360); else if (Main.rand.Next(3) == 0) { if (Main.rand.Next(4) == 0) { if (Main.hardMode && Main.rand.Next(3) != 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 260); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 259); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } } else newNPC = Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 258) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 257); } else newNPC = Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, (int) byte.MaxValue) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 254); } else if (num1 == 70 && Main.hardMode && (double) index2 >= Main.worldSurface && Main.rand.Next(3) != 0) { if (Main.hardMode && Main.rand.Next(5) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 374); else if (!Main.hardMode && Main.rand.Next(4) == 0 || Main.rand.Next(8) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 360); else if (Main.rand.Next(4) == 0) { if (Main.hardMode && Main.rand.Next(3) != 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 260); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 259); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } } else newNPC = Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 258) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 257); } else if (Main.player[index5].ZoneCorrupt && Main.rand.Next(65) == 0 && !flag5) newNPC = !Main.hardMode || Main.rand.Next(4) == 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 7, 1) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 98, 1); else if (Main.hardMode && (double) index2 > Main.worldSurface && Main.player[index5].RollLuck(75) == 0) newNPC = Main.rand.Next(2) != 0 || !Main.player[index5].ZoneCorrupt || NPC.AnyNPCs(473) ? (Main.rand.Next(2) != 0 || !Main.player[index5].ZoneCrimson || NPC.AnyNPCs(474) ? (Main.rand.Next(2) != 0 || !Main.player[index5].ZoneHallow || NPC.AnyNPCs(475) ? (!Main.player[index5].ZoneSnow ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 85) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 629)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 475)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 474)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 473); else if (Main.hardMode && (double) index2 <= Main.worldSurface && !Main.dayTime && (Main.rand.Next(20) == 0 || Main.rand.Next(5) == 0 && Main.moonPhase == 4)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 82); else if (Main.hardMode && Main.halloween && (double) index2 <= Main.worldSurface && !Main.dayTime && Main.rand.Next(10) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 304); else if (tileType == 60 && Main.player[index5].RollLuck(500) == 0 && !Main.dayTime) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 52); else if (tileType == 60 && (double) index2 > Main.worldSurface && Main.rand.Next(60) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 219); else if ((double) index2 > Main.worldSurface && index2 < Main.maxTilesY - 210 && !Main.player[index5].ZoneSnow && !Main.player[index5].ZoneCrimson && !Main.player[index5].ZoneCorrupt && !Main.player[index5].ZoneJungle && !Main.player[index5].ZoneHallow && Main.rand.Next(8) == 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 448); else newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 357); } else if ((double) index2 > Main.worldSurface && index2 < Main.maxTilesY - 210 && !Main.player[index5].ZoneSnow && !Main.player[index5].ZoneCrimson && !Main.player[index5].ZoneCorrupt && !Main.player[index5].ZoneJungle && !Main.player[index5].ZoneHallow && Main.rand.Next(13) == 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 447); else newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 300); } else if ((double) index2 > Main.worldSurface && (double) index2 < (Main.rockLayer + (double) Main.maxTilesY) / 2.0 && !Main.player[index5].ZoneSnow && !Main.player[index5].ZoneCrimson && !Main.player[index5].ZoneCorrupt && !Main.player[index5].ZoneHallow && Main.rand.Next(13) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 359); else if ((double) index2 < Main.worldSurface && Main.player[index5].ZoneJungle && Main.rand.Next(7) == 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 445); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 361); } else if (tileType == 225 && Main.rand.Next(2) == 0) { if (Main.hardMode && Main.rand.Next(4) != 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 176); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-18); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-19); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-20); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-21); } else { switch (Main.rand.Next(8)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 231); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-56); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-57); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 232); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-58); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-59); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 233); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-60); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-61); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 234); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-62); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-63); break; } break; case 4: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 235); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-64); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-65); break; } break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 42); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-16); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-17); break; } break; } } } else if (tileType == 60 && Main.hardMode && Main.rand.Next(3) != 0) { if ((double) index2 < Main.worldSurface && !Main.dayTime && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 152); else if ((double) index2 < Main.worldSurface && Main.dayTime && Main.rand.Next(4) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 177); else if ((double) index2 > Main.worldSurface && Main.rand.Next(100) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 205); else if ((double) index2 > Main.worldSurface && Main.rand.Next(5) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 236); else if ((double) index2 > Main.worldSurface && Main.rand.Next(4) != 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 176); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-18); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-19); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-20); if (Main.rand.Next(10) == 0) Main.npc[newNPC].SetDefaults(-21); } else if (Main.rand.Next(3) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 175); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 153); } else if (tileType == 226 & flag4) newNPC = Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 198) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 226); else if (num24 == 86 && Main.rand.Next(8) != 0) { switch (Main.rand.Next(8)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 231); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-56); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-57); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 232); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-58); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-59); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 233); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-60); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-61); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 234); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-62); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-63); break; } break; case 4: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 235); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-64); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-65); break; } break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 42); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-16); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-17); break; } break; } } else if (tileType == 60 && (double) index2 > (Main.worldSurface + Main.rockLayer) / 2.0) { if (Main.rand.Next(4) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 204); else if (Main.rand.Next(4) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 43); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else { switch (Main.rand.Next(8)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 231); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-56); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-57); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 232); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-58); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-59); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 233); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-60); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-61); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 234); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-62); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-63); break; } break; case 4: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 235); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-64); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-65); break; } break; default: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 42); if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-16); break; } if (Main.rand.Next(4) == 0) { Main.npc[newNPC].SetDefaults(-17); break; } break; } } } else if (tileType == 60 && Main.rand.Next(4) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 51); else if (tileType == 60 && Main.rand.Next(8) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 56); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else if (Sandstorm.Happening && Main.player[index5].ZoneSandstorm && TileID.Sets.Conversion.Sand[tileType] && NPC.Spawning_SandstoneCheck(index1, index2)) { if (!NPC.downedBoss1 && !Main.hardMode) newNPC = Main.rand.Next(2) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 69) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 61)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 546); else if (Main.hardMode && Main.rand.Next(20) == 0 && !NPC.AnyNPCs(541)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 541); else if (Main.hardMode && !flag5 && Main.rand.Next(3) == 0 && NPC.CountNPCS(510) < 4) newNPC = NPC.NewNPC(index1 * 16 + 8, (index2 + 10) * 16, 510); else if (Main.hardMode && !flag5 && Main.rand.Next(2) == 0) { int Type6 = 542; if (TileID.Sets.Corrupt[tileType]) Type6 = 543; if (TileID.Sets.Crimson[tileType]) Type6 = 544; if (TileID.Sets.Hallow[tileType]) Type6 = 545; newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type6); } else newNPC = !Main.hardMode || tileType != 53 || Main.rand.Next(3) != 0 ? (!Main.hardMode || tileType != 112 || Main.rand.Next(3) != 0 ? (!Main.hardMode || tileType != 234 || Main.rand.Next(3) != 0 ? (!Main.hardMode || tileType != 116 || Main.rand.Next(3) != 0 ? (Main.rand.Next(2) != 0 ? (Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 581) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 580)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 546)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 80)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 630)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 79)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 78); } else if (Main.hardMode && tileType == 53 && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 78); else if (Main.hardMode && tileType == 112 && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 79); else if (Main.hardMode && tileType == 234 && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 630); else if (Main.hardMode && tileType == 116 && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 80); else if (Main.hardMode && !flag7 && (double) index2 < Main.rockLayer && (tileType == 116 || tileType == 117 || tileType == 109 || tileType == 164)) { if (NPC.downedPlantBoss && !Main.dayTime && Main.time < 16200.0 && (double) index2 < Main.worldSurface && Main.rand.Next(10) == 0 && !NPC.AnyNPCs(661)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 661); else if ((double) Main.cloudAlpha > 0.0 && !NPC.AnyNPCs(244) && Main.rand.Next(12) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 244); else newNPC = Main.dayTime || Main.rand.Next(2) != 0 ? (Main.rand.Next(10) == 0 || Main.player[index5].ZoneWaterCandle && Main.rand.Next(10) == 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 86) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 75)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 122); } else if (!flag5 && Main.hardMode && Main.rand.Next(50) == 0 && !flag7 && (double) index2 >= Main.rockLayer && (tileType == 116 || tileType == 117 || tileType == 109 || tileType == 164)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 84); else if (tileType == 204 && Main.player[index5].ZoneCrimson || tileType == 199 || tileType == 200 || tileType == 203 || tileType == 234) { if (Main.hardMode && (double) index2 >= Main.rockLayer && Main.rand.Next(5) == 0 && !flag5) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 182); else if (Main.hardMode && (double) index2 >= Main.rockLayer && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 268); else if (Main.hardMode && Main.rand.Next(3) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 183); if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-24); else if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-25); } else if (Main.hardMode && (double) index2 >= Main.rockLayer && Main.rand.Next(40) == 0 && !flag5) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 179); else if (Main.hardMode && (Main.rand.Next(2) == 0 || (double) index2 > Main.worldSurface)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 174); else if (Main.tile[index1, index2].wall > (ushort) 0 && Main.rand.Next(4) != 0 || Main.rand.Next(8) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 239); else if (Main.rand.Next(2) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 181); } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 173); if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-22); else if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-23); } } else if (tileType == 22 && Main.player[index5].ZoneCorrupt || tileType == 23 || tileType == 25 || tileType == 112 || tileType == 163) { if (Main.hardMode && (double) index2 >= Main.rockLayer && Main.rand.Next(3) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 101); Main.npc[newNPC].ai[0] = (float) index1; Main.npc[newNPC].ai[1] = (float) index2; Main.npc[newNPC].netUpdate = true; } else if (Main.hardMode && Main.rand.Next(3) == 0) newNPC = Main.rand.Next(3) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 81) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 121); else if (Main.hardMode && (double) index2 >= Main.rockLayer && Main.rand.Next(40) == 0 && !flag5) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 83); else if (Main.hardMode && (Main.rand.Next(2) == 0 || (double) index2 > Main.rockLayer)) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 94); } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 6); if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-11); else if (Main.rand.Next(3) == 0) Main.npc[newNPC].SetDefaults(-12); } } else if ((double) index2 <= Main.worldSurface) { bool flag29 = (double) Math.Abs(index1 - Main.maxTilesX / 2) / (double) (Main.maxTilesX / 2) > 0.330000013113022; if (flag29 && NPC.AnyDanger()) flag29 = false; if (Main.player[index5].ZoneGraveyard && !flag7 && (num1 == 2 || num1 == 477) && Main.rand.Next(10) == 0) { if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 606); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 610); } else if (Main.player[index5].ZoneSnow && Main.hardMode && (double) Main.cloudAlpha > 0.0 && !NPC.AnyNPCs(243) && Main.player[index5].RollLuck(20) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 243); else if (!Main.player[index5].ZoneSnow && Main.hardMode && (double) Main.cloudAlpha > 0.0 && NPC.CountNPCS(250) < 2 && Main.rand.Next(10) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 250); else if (flag29 && Main.hardMode && NPC.downedGolemBoss && (!NPC.downedMartians && Main.rand.Next(100) == 0 || Main.rand.Next(400) == 0) && !NPC.AnyNPCs(399)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 399); else if (!Main.player[index5].ZoneGraveyard && Main.dayTime) { int num51 = Math.Abs(index1 - Main.spawnTileX); if (!flag7 && num51 < Main.maxTilesX / 2 && Main.rand.Next(15) == 0 && (tileType == 2 || tileType == 477 || tileType == 109 || tileType == 492 || tileType == 147 || tileType == 161)) { if (tileType == 147 || tileType == 161) { if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 148); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 149); } else if (!windyForButterflies && !Main.raining && Main.dayTime && Main.rand.Next(NPC.butterflyChance / 2) == 0 && (double) index2 <= Main.worldSurface) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 444); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 356); if (Main.rand.Next(4) == 0) NPC.NewNPC(index1 * 16 + 8 - 16, index2 * 16, 356); if (Main.rand.Next(4) == 0) NPC.NewNPC(index1 * 16 + 8 + 16, index2 * 16, 356); } else if (windyForButterflies && !Main.raining && Main.dayTime && Main.rand.Next(NPC.butterflyChance) == 0 && (double) index2 <= Main.worldSurface) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 605); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(2) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(3) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); if (Main.rand.Next(4) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 604); } else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 443); else if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0 && (double) index2 <= Main.worldSurface) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 539); else if (Main.halloween && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 303); else if (Main.xMas && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 337); else if (BirthdayParty.PartyIsUp && Main.rand.Next(3) != 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 540); else if (Main.rand.Next(3) == 0 && (double) index2 <= Main.worldSurface) NPC.NewNPC(index1 * 16 + 8, index2 * 16, (int) Utils.SelectRandom(Main.rand, (short) 299, (short) 538)); else NPC.NewNPC(index1 * 16 + 8, index2 * 16, 46); } else if (!flag7 && index1 > WorldGen.beachDistance && index1 < Main.maxTilesX - WorldGen.beachDistance && Main.rand.Next(12) == 0 && tileType == 53) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(366, 368)); } else { int cattailX; int cattailY; if ((tileType == 2 || tileType == 477 || tileType == 53) && !windyForButterflies && !Main.raining && Main.dayTime && Main.rand.Next(3) != 0 && (double) index2 <= Main.worldSurface && NPC.FindCattailTop(index1, index2, out cattailX, out cattailY)) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(cattailX * 16 + 8, cattailY * 16, 601); else NPC.NewNPC(cattailX * 16 + 8, cattailY * 16, NPC.RollDragonflyType(tileType)); if (Main.rand.Next(3) == 0) NPC.NewNPC(cattailX * 16 + 8 - 16, cattailY * 16, NPC.RollDragonflyType(tileType)); if (Main.rand.Next(3) == 0) NPC.NewNPC(cattailX * 16 + 8 + 16, cattailY * 16, NPC.RollDragonflyType(tileType)); } else if (!flag7 && num51 < Main.maxTilesX / 3 && Main.dayTime && Main.time < 18000.0 && (tileType == 2 || tileType == 477 || tileType == 109 || tileType == 492) && Main.rand.Next(4) == 0 && (double) index2 <= Main.worldSurface && NPC.CountNPCS(74) + NPC.CountNPCS(297) + NPC.CountNPCS(298) < 6) { int num52 = Main.rand.Next(4); if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 442); } else { switch (num52) { case 0: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 297); break; case 1: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 298); break; default: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 74); break; } } } else if (!flag7 && num51 < Main.maxTilesX / 3 && Main.rand.Next(15) == 0 && (tileType == 2 || tileType == 477 || tileType == 109 || tileType == 492 || tileType == 147)) { int num53 = Main.rand.Next(4); if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) { NPC.NewNPC(index1 * 16 + 8, index2 * 16, 442); } else { switch (num53) { case 0: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 297); break; case 1: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 298); break; default: NPC.NewNPC(index1 * 16 + 8, index2 * 16, 74); break; } } } else if (!flag7 && num51 > Main.maxTilesX / 3 && tileType == 2 && Main.rand.Next(300) == 0 && !NPC.AnyNPCs(50)) NPC.SpawnOnPlayer(index5, 50); else if (tileType == 53 && (index1 < WorldGen.beachDistance || index1 > Main.maxTilesX - WorldGen.beachDistance)) { if (!flag7 && Main.rand.Next(10) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 602); else if (flag7) { int num54 = -1; int num55 = -1; if ((double) index2 < Main.worldSurface && index2 > 50) { for (int j = index2 - 1; j > index2 - 50; --j) { if (Main.tile[index1, j].liquid == (byte) 0 && !WorldGen.SolidTile(index1, j) && !WorldGen.SolidTile(index1, j + 1) && !WorldGen.SolidTile(index1, j + 2)) { num54 = j + 2; if (!WorldGen.SolidTile(index1, num54 + 1) && !WorldGen.SolidTile(index1, num54 + 2)) { num55 = num54 + 2; break; } break; } } if (num54 > index2) num54 = index2; if (num55 > index2) num55 = index2; } if (Main.rand.Next(10) == 0) { int num56 = Main.rand.Next(3); if (num56 == 0 && num54 > 0) NPC.NewNPC(index1 * 16 + 8, num54 * 16, 625); else if (num56 == 1 && num55 > 0) NPC.NewNPC(index1 * 16 + 8, num55 * 16, 615); else if (num56 == 2 && num55 > 0) { if (Main.player[index5].RollLuck(NPC.goldCritterChance) == 0) NPC.NewNPC(index1 * 16 + 8, num55 * 16, 627); else NPC.NewNPC(index1 * 16 + 8, num55 * 16, 626); } } } } else if (!flag7 && tileType == 53 && Main.rand.Next(5) == 0 && NPC.Spawning_SandstoneCheck(index1, index2) && !flag7) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 69); else if (tileType == 53 && !flag7) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 61); else if (!flag7 && num51 > Main.maxTilesX / 3 && (Main.rand.Next(15) == 0 || !NPC.downedGoblins && WorldGen.shadowOrbSmashed && Main.rand.Next(7) == 0)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 73); else if (Main.raining && Main.rand.Next(4) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 224); else if (!flag7 && Main.raining && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 225); else if (((flag7 ? 0 : (num24 == 0 ? 1 : 0)) & (itAhappyWindyDay ? 1 : 0) & (flag18 ? 1 : 0)) != 0 && Main.rand.Next(3) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 594); else if (((flag7 || num24 != 0 ? 0 : (num1 == 2 ? 1 : (num1 == 477 ? 1 : 0))) & (itAhappyWindyDay ? 1 : 0) & (flag18 ? 1 : 0)) != 0 && Main.rand.Next(10) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 628); else if (!flag7) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 1); switch (tileType) { case 60: Main.npc[newNPC].SetDefaults(-10); break; case 147: case 161: Main.npc[newNPC].SetDefaults(147); break; default: if (Main.halloween && Main.rand.Next(3) != 0) { Main.npc[newNPC].SetDefaults(302); break; } if (Main.xMas && Main.rand.Next(3) != 0) { Main.npc[newNPC].SetDefaults(Main.rand.Next(333, 337)); break; } if (Main.rand.Next(3) == 0 || num51 < 200 && !Main.expertMode) { Main.npc[newNPC].SetDefaults(-3); break; } if (Main.rand.Next(10) == 0 && (num51 > 400 || Main.expertMode)) { Main.npc[newNPC].SetDefaults(-7); break; } break; } } } } else { if (!Main.player[index5].ZoneGraveyard && !windyForButterflies && (tileType == 2 || tileType == 477 || tileType == 109 || tileType == 492) && !Main.raining && Main.rand.Next(NPC.fireFlyChance) == 0 && (double) index2 <= Main.worldSurface) { int Type7 = 355; if (tileType == 109) Type7 = 358; NPC.NewNPC(index1 * 16 + 8, index2 * 16, Type7); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8 - 16, index2 * 16, Type7); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8 + 16, index2 * 16, Type7); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16 - 16, Type7); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(index1 * 16 + 8, index2 * 16 + 16, Type7); } else if ((Main.halloween || Main.player[index5].ZoneGraveyard) && Main.rand.Next(12) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 301); else if (Main.player[index5].ZoneGraveyard && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 316); else if (Main.rand.Next(6) == 0 || Main.moonPhase == 4 && Main.rand.Next(2) == 0) { if (Main.hardMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 133); else if (Main.halloween && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(317, 319)); else if (Main.rand.Next(2) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 2); if (Main.rand.Next(4) == 0) Main.npc[newNPC].SetDefaults(-43); } else { switch (Main.rand.Next(5)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 190); if (Main.rand.Next(3) == 0) { Main.npc[newNPC].SetDefaults(-38); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 191); if (Main.rand.Next(3) == 0) { Main.npc[newNPC].SetDefaults(-39); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 192); if (Main.rand.Next(3) == 0) { Main.npc[newNPC].SetDefaults(-40); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 193); if (Main.rand.Next(3) == 0) { Main.npc[newNPC].SetDefaults(-41); break; } break; case 4: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 194); if (Main.rand.Next(3) == 0) { Main.npc[newNPC].SetDefaults(-42); break; } break; } } } else if (Main.hardMode && Main.rand.Next(50) == 0 && Main.bloodMoon && !NPC.AnyNPCs(109)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 109); else if (Main.rand.Next(250) == 0 && (Main.bloodMoon || Main.player[index5].ZoneGraveyard)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 53); else if (Main.rand.Next(250) == 0 && (Main.bloodMoon || Main.player[index5].ZoneGraveyard)) NPC.NewNPC(index1 * 16 + 8, index2 * 16, 536); else if (!Main.dayTime && Main.moonPhase == 0 && Main.hardMode && Main.rand.Next(3) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 104); else if (!Main.dayTime && Main.hardMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 140); else if (Main.bloodMoon && Main.rand.Next(5) < 2) newNPC = Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 490) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 489); else if (num1 == 147 || num1 == 161 || num1 == 163 || num1 == 164 || num1 == 162) newNPC = Main.player[index5].ZoneGraveyard || !Main.hardMode || Main.rand.Next(4) != 0 ? (Main.player[index5].ZoneGraveyard || !Main.hardMode || Main.rand.Next(3) != 0 ? (!Main.expertMode || Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 161) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 431)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 155)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 169); else if (Main.raining && Main.rand.Next(2) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 223); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) Main.npc[newNPC].SetDefaults(-54); else Main.npc[newNPC].SetDefaults(-55); } } else { int num57 = Main.rand.Next(7); int maxValue5 = 12; int maxValue6 = 20; if (Main.player[index5].statLifeMax <= 100) { maxValue5 = 5 - Main.CurrentFrameFlags.ActivePlayersCount / 2; if (maxValue5 < 2) maxValue5 = 2; } if (Main.player[index5].ZoneGraveyard && Main.rand.Next(maxValue6) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 632); else if (Main.rand.Next(maxValue5) == 0) newNPC = !Main.expertMode || Main.rand.Next(2) != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 590) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 591); else if (Main.halloween && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(319, 322)); else if (Main.xMas && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(331, 333)); else if (num57 == 0 && Main.expertMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 430); else if (num57 == 2 && Main.expertMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 432); else if (num57 == 3 && Main.expertMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 433); else if (num57 == 4 && Main.expertMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 434); else if (num57 == 5 && Main.expertMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 435); else if (num57 == 6 && Main.expertMode && Main.rand.Next(3) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 436); } else { switch (num57) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 3); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-26); break; } Main.npc[newNPC].SetDefaults(-27); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 132); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-28); break; } Main.npc[newNPC].SetDefaults(-29); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 186); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-30); break; } Main.npc[newNPC].SetDefaults(-31); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 187); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-32); break; } Main.npc[newNPC].SetDefaults(-33); break; } break; case 4: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 188); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-34); break; } Main.npc[newNPC].SetDefaults(-35); break; } break; case 5: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 189); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-36); break; } Main.npc[newNPC].SetDefaults(-37); break; } break; case 6: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 200); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-44); break; } Main.npc[newNPC].SetDefaults(-45); break; } break; } } } if (Main.player[index5].ZoneGraveyard) Main.npc[newNPC].target = index5; } } else if ((double) index2 <= Main.rockLayer) { if (!flag5 && Main.rand.Next(50) == 0 && !Main.player[index5].ZoneSnow) newNPC = !Main.hardMode ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 10, 1) : (Main.rand.Next(3) == 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 10, 1) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 95, 1)); else if (Main.hardMode && Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 140); else if (Main.hardMode && Main.rand.Next(4) != 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 141); else if (tileType == 147 || tileType == 161 || Main.player[index5].ZoneSnow) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 147); } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 1); if (Main.rand.Next(5) == 0) Main.npc[newNPC].SetDefaults(-9); else if (Main.rand.Next(2) == 0) Main.npc[newNPC].SetDefaults(1); else Main.npc[newNPC].SetDefaults(-8); } } else if (index2 > Main.maxTilesY - 190) newNPC = !Main.hardMode || NPC.savedTaxCollector || Main.rand.Next(20) != 0 || NPC.AnyNPCs(534) ? (Main.rand.Next(8) != 0 ? (Main.rand.Next(40) != 0 || NPC.AnyNPCs(39) ? (Main.rand.Next(14) != 0 ? (Main.rand.Next(7) != 0 ? (Main.rand.Next(3) != 0 ? (!Main.hardMode || !NPC.downedMechBossAny || Main.rand.Next(5) == 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 60) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 151)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 59)) : (Main.rand.Next(10) != 0 ? (!Main.hardMode || !NPC.downedMechBossAny || Main.rand.Next(5) == 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 62) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 156)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 66))) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 24)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 39, 1)) : NPC.SpawnNPC_SpawnLavaBaitCritters(index1, index2)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 534); else if (NPC.SpawnNPC_CheckToSpawnRockGolem(index1, index2, tileType, index5)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 631); else if (Main.rand.Next(60) == 0) newNPC = !Main.player[index5].ZoneSnow ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 217) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 218); else if ((tileType == 116 || tileType == 117 || tileType == 164) && Main.hardMode && !flag5 && Main.rand.Next(8) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 120); else if ((num1 == 147 || num1 == 161 || num1 == 162 || num1 == 163 || num1 == 164 || num1 == 200) && !flag5 && Main.hardMode && Main.player[index5].ZoneCorrupt && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 170); else if ((num1 == 147 || num1 == 161 || num1 == 162 || num1 == 163 || num1 == 164 || num1 == 200) && !flag5 && Main.hardMode && Main.player[index5].ZoneHallow && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 171); else if ((num1 == 147 || num1 == 161 || num1 == 162 || num1 == 163 || num1 == 164 || num1 == 200) && !flag5 && Main.hardMode && Main.player[index5].ZoneCrimson && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 180); else if (Main.hardMode && Main.player[index5].ZoneSnow && Main.rand.Next(10) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 154); else if (!flag5 && Main.rand.Next(100) == 0 && !Main.player[index5].ZoneHallow) newNPC = !Main.hardMode ? (!Main.player[index5].ZoneSnow ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 10, 1) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 185)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 95, 1); else if (Main.player[index5].ZoneSnow && Main.rand.Next(20) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 185); else if (!Main.hardMode && Main.rand.Next(10) == 0 || Main.hardMode && Main.rand.Next(20) == 0) { if (Main.player[index5].ZoneSnow) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 184); else if (Main.rand.Next(3) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 1); Main.npc[newNPC].SetDefaults(-6); } else newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 16); } else if (!Main.hardMode && Main.rand.Next(4) == 0) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 1); if (Main.player[index5].ZoneJungle) Main.npc[newNPC].SetDefaults(-10); else if (Main.player[index5].ZoneSnow) Main.npc[newNPC].SetDefaults(184); else Main.npc[newNPC].SetDefaults(-6); } else if (Main.rand.Next(2) == 0) { if (Main.rand.Next(35) == 0 && NPC.CountNPCS(453) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 453); else if (!Main.hardMode && Main.rand.Next(80) == 0 || Main.rand.Next(200) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 195); else if (Main.hardMode && (double) index2 > (Main.rockLayer + (double) Main.maxTilesY) / 2.0 && Main.rand.Next(300) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 172); else if ((double) index2 > (Main.rockLayer + (double) Main.maxTilesY) / 2.0 && (Main.rand.Next(200) == 0 || Main.rand.Next(50) == 0 && (Main.player[index5].armor[1].type == 4256 || Main.player[index5].armor[1].type >= 1282 && Main.player[index5].armor[1].type <= 1287) && Main.player[index5].armor[0].type != 238)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 45); else if (flag10 && Main.rand.Next(4) != 0) newNPC = Main.rand.Next(6) == 0 || NPC.AnyNPCs(480) || !Main.hardMode ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 481) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 480); else if (flag9 && Main.rand.Next(5) != 0) newNPC = Main.rand.Next(6) == 0 || NPC.AnyNPCs(483) ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 482) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 483); else if (Main.hardMode && Main.rand.Next(10) != 0) { if (Main.rand.Next(2) == 0) { if (Main.player[index5].ZoneSnow) { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 197); } else { newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 77); if ((double) index2 > (Main.rockLayer + (double) Main.maxTilesY) / 2.0 && Main.rand.Next(5) == 0) Main.npc[newNPC].SetDefaults(-15); } } else newNPC = !Main.player[index5].ZoneSnow ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 110) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 206); } else if (!flag5 && (Main.halloween || Main.player[index5].ZoneGraveyard) && Main.rand.Next(30) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 316); else if (Main.rand.Next(20) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 44); else if (num1 == 147 || num1 == 161 || num1 == 162) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 167); else if (Main.player[index5].ZoneSnow) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 185); else if (Main.rand.Next(3) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, NPC.cavernMonsterType[Main.rand.Next(2), Main.rand.Next(3)]); else if (Main.player[index5].ZoneGlowshroom && (num1 == 70 || num1 == 190)) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 635); else if (Main.halloween && Main.rand.Next(2) == 0) newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, Main.rand.Next(322, 325)); else if (Main.expertMode && Main.rand.Next(3) == 0) { int num58 = Main.rand.Next(4); newNPC = num58 != 0 ? (num58 != 0 ? (num58 != 0 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 452) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 451)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 450)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 449); } else { switch (Main.rand.Next(4)) { case 0: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 21); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-47); break; } Main.npc[newNPC].SetDefaults(-46); break; } break; case 1: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 201); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-49); break; } Main.npc[newNPC].SetDefaults(-48); break; } break; case 2: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 202); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-51); break; } Main.npc[newNPC].SetDefaults(-50); break; } break; case 3: newNPC = NPC.NewNPC(index1 * 16 + 8, index2 * 16, 203); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(2) == 0) { Main.npc[newNPC].SetDefaults(-53); break; } Main.npc[newNPC].SetDefaults(-52); break; } break; } } } else newNPC = !Main.hardMode || !(Main.player[index5].ZoneHallow & Main.rand.Next(2) == 0) ? (!Main.player[index5].ZoneJungle ? (!Main.player[index5].ZoneGlowshroom || num1 != 70 && num1 != 190 ? (!Main.hardMode || !Main.player[index5].ZoneHallow ? (!Main.hardMode || Main.rand.Next(6) <= 0 ? (num1 == 147 || num1 == 161 || num1 == 162 ? (!Main.hardMode ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 150) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 169)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 49)) : (Main.rand.Next(3) != 0 || num1 != 147 && num1 != 161 && num1 != 162 ? NPC.NewNPC(index1 * 16 + 8, index2 * 16, 93) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 150))) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 137)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 634)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 51)) : NPC.NewNPC(index1 * 16 + 8, index2 * 16, 138); if (Main.npc[newNPC].type == 1 && Main.player[index5].RollLuck(180) == 0) Main.npc[newNPC].SetDefaults(-4); if (Main.netMode != 2 || newNPC >= 200) break; NetMessage.SendData(23, number: newNPC); break; } } } } } } private static bool SpawnNPC_CheckToSpawnRockGolem( int spawnTileX, int spawnTileY, int tileType, int plr) { return Main.hardMode && (tileType == 1 || TileID.Sets.Conversion.Moss[tileType]) && !Main.player[plr].ZoneSnow && Main.rand.Next(30) == 0 && !WorldGen.SolidTile(spawnTileX - 1, spawnTileY - 4) && !WorldGen.SolidTile(spawnTileX, spawnTileY - 4) && !WorldGen.SolidTile(spawnTileX + 1, spawnTileY - 4); } private static int SpawnNPC_SpawnLavaBaitCritters(int spawnTileX, int spawnTileY) { if (Main.rand.Next(3) == 0) return NPC.NewNPC(spawnTileX * 16 + 8, spawnTileY * 16, 655); if (Main.dayTime) return NPC.NewNPC(spawnTileX * 16 + 8, spawnTileY * 16, 653); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(spawnTileX * 16 + 8 - 16, spawnTileY * 16, 654); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(spawnTileX * 16 + 8 + 16, spawnTileY * 16, 654); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(spawnTileX * 16 + 8, spawnTileY * 16 - 16, 654); if (Main.rand.Next(NPC.fireFlyMultiple) == 0) NPC.NewNPC(spawnTileX * 16 + 8, spawnTileY * 16 + 16, 654); return NPC.NewNPC(spawnTileX * 16 + 8, spawnTileY * 16, 654); } private static int SpawnNPC_TryFindingProperGroundTileType(int spawnTileType, int x, int y) { if (!NPC.IsValidSpawningGroundTile(x, y)) { for (int y1 = y + 1; y1 < y + 30; ++y1) { if (NPC.IsValidSpawningGroundTile(x, y1)) return (int) Main.tile[x, y1].type; } } return spawnTileType; } private static bool IsValidSpawningGroundTile(int x, int y) { Tile tile = Main.tile[x, y]; return tile.nactive() && Main.tileSolid[(int) tile.type] && !Main.tileSolidTop[(int) tile.type] && !TileID.Sets.IsSkippedForNPCSpawningGroundTypeCheck[(int) tile.type]; } public static bool FindCattailTop(int landX, int landY, out int cattailX, out int cattailY) { cattailX = landX; cattailY = landY; if (!WorldGen.InWorld(landX, landY, 31)) return false; int maxValue = 1; for (int index1 = landX - 30; index1 <= landX + 30; ++index1) { for (int index2 = landY - 20; index2 <= landY + 20; ++index2) { Tile tile = Main.tile[index1, index2]; if (tile != null && tile.active() && tile.type == (ushort) 519 && tile.frameX >= (short) 180 && Main.rand.Next(maxValue) == 0) { cattailX = index1; cattailY = index2; ++maxValue; } } } return cattailX != landX || cattailY != landY; } public static bool FindTreeBranch( int landX, int landY, out int treeBranchX, out int treeBranchY) { treeBranchX = landX; treeBranchY = landY; if (!WorldGen.InWorld(landX, landY, 11)) return false; int maxValue = 1; for (int index1 = landX - 10; index1 <= landX + 10; ++index1) { for (int index2 = landY - 30; index2 <= landY + 30; ++index2) { Tile tile = Main.tile[index1, index2]; if (tile != null && tile.active() && TileID.Sets.IsATreeTrunk[(int) tile.type]) { int num1 = (int) tile.frameX / 22; int num2 = (int) tile.frameY / 66; if ((num1 == 3 && num2 == 0 || num1 == 3 && num2 == 3 || num1 == 4 && num2 == 1 || num1 == 4 && num2 == 3 || num1 == 2 && num2 == 3) && Main.rand.Next(maxValue) == 0) { treeBranchX = index1; treeBranchY = index2; ++maxValue; } } } } return treeBranchX != landX || treeBranchY != landY; } public static bool AnyDanger(bool quickBossNPCCheck = false) { bool flag = false; if (NPC.MoonLordCountdown > 0) flag = true; if (Main.invasionType > 0) flag = true; if (Main.snowMoon || Main.pumpkinMoon || DD2Event.Ongoing) flag = true; if (!flag) { if (quickBossNPCCheck) { flag |= Main.CurrentFrameFlags.AnyActiveBossNPC; } else { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && (Main.npc[index].boss || NPCID.Sets.DangerThatPreventsOtherDangers[Main.npc[index].type])) flag = true; } } } return flag; } public static bool AnyoneNearCultists() { int firstNpc = NPC.FindFirstNPC(437); if (firstNpc == -1) return false; Microsoft.Xna.Framework.Rectangle rectangle = Utils.CenteredRectangle(Main.npc[firstNpc].Center, new Vector2(2500f, 1500f)); Microsoft.Xna.Framework.Rectangle r = new Microsoft.Xna.Framework.Rectangle(0, 0, 2500, 1500); Vector2 vector2 = r.Size() / 2f; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active) { r.X = (int) Main.player[index].Center.X - (int) vector2.X; r.Y = (int) Main.player[index].Center.Y - (int) vector2.Y; if (rectangle.Intersects(r)) return true; } } return false; } public static void SpawnWOF(Vector2 pos) { if ((double) pos.Y / 16.0 < (double) (Main.maxTilesY - 205) || Main.wofNPCIndex >= 0 || Main.netMode == 1 || NPC.AnyNPCs(113)) return; int closest = (int) Player.FindClosest(pos, 16, 16); int num1 = 1; if ((double) pos.X / 16.0 > (double) (Main.maxTilesX / 2)) num1 = -1; bool flag = false; int x = (int) pos.X; while (!flag) { flag = true; for (int index = 0; index < (int) byte.MaxValue; ++index) { if (Main.player[index].active && (double) Main.player[index].position.X > (double) (x - 1200) && (double) Main.player[index].position.X < (double) (x + 1200)) { x -= num1 * 16; flag = false; } } if (x / 16 < 20 || x / 16 > Main.maxTilesX - 20) flag = true; } int y = (int) pos.Y; int i = x / 16; int num2 = y / 16; int num3 = 0; while (true) { try { if (!WorldGen.SolidTile(i, num2 - num3) && Main.tile[i, num2 - num3].liquid < (byte) 100) { num2 -= num3; break; } if (!WorldGen.SolidTile(i, num2 + num3) && Main.tile[i, num2 + num3].liquid < (byte) 100) { num2 += num3; break; } ++num3; } catch { break; } } if (num2 < Main.maxTilesY - 180) num2 = Main.maxTilesY - 180; int Y = num2 * 16; int index1 = NPC.NewNPC(x, Y, 113); if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) Main.npc[index1].TypeName), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Main.npc[index1].GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); } } public static void SpawnSkeletron() { bool flag1 = true; bool flag2 = false; Vector2 vector2 = Vector2.Zero; int num1 = 0; int num2 = 0; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 35) { flag1 = false; break; } } for (int number = 0; number < 200; ++number) { if (Main.npc[number].active) { if (Main.npc[number].type == 37) { flag2 = true; Main.npc[number].ai[3] = 1f; vector2 = Main.npc[number].position; num1 = Main.npc[number].width; num2 = Main.npc[number].height; if (Main.netMode == 2) NetMessage.SendData(23, number: number); } else if (Main.npc[number].type == 54) { flag2 = true; vector2 = Main.npc[number].position; num1 = Main.npc[number].width; num2 = Main.npc[number].height; } } } if (!(flag1 & flag2)) return; int index1 = NPC.NewNPC((int) vector2.X + num1 / 2, (int) vector2.Y + num2 / 2, 35); Main.npc[index1].netUpdate = true; string npcNameValue = Lang.GetNPCNameValue(35); if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) npcNameValue), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Lang.GetNPCName(35).ToNetworkText()), new Color(175, 75, (int) byte.MaxValue)); } } public static void SpawnOnPlayer(int plr, int Type) { if (Main.netMode == 1 || Type == 262 && NPC.AnyNPCs(262)) return; switch (Type) { case 245: if (NPC.AnyNPCs(245)) break; try { int num1 = (int) Main.player[plr].Center.X / 16; int num2 = (int) Main.player[plr].Center.Y / 16; int i = 0; int num3 = 0; for (int index1 = num1 - 20; index1 < num1 + 20; ++index1) { for (int index2 = num2 - 20; index2 < num2 + 20; ++index2) { if (Main.tile[index1, index2].active() && Main.tile[index1, index2].type == (ushort) 237 && Main.tile[index1, index2].frameX == (short) 18 && Main.tile[index1, index2].frameY == (short) 0) { i = index1; num3 = index2; } } } if (i <= 0 || num3 <= 0) break; int num4 = num3 - 15; int num5 = num3 - 15; for (int j = num3; j > num3 - 50; --j) { if (WorldGen.SolidTile(i, j)) { num4 = j; break; } } for (int j = num3; j < num3 + 50; ++j) { if (WorldGen.SolidTile(i, j)) { num5 = j; break; } } int num6 = (num4 + num4 + num5) / 3; int index = NPC.NewNPC(i * 16 + 8, num6 * 16, 245, 100); Main.npc[index].target = plr; string typeName = Main.npc[index].TypeName; if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) typeName), (byte) 175, (byte) 75); break; } if (Main.netMode != 2) break; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Main.npc[index].GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); break; } catch { break; } case 370: Player player1 = Main.player[plr]; if (!player1.active || player1.dead) break; for (int index3 = 0; index3 < 1000; ++index3) { Projectile projectile = Main.projectile[index3]; if (projectile.active && projectile.bobber && projectile.owner == plr) { int index4 = NPC.NewNPC((int) projectile.Center.X, (int) projectile.Center.Y + 100, 370); string typeName = Main.npc[index4].TypeName; if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) typeName), (byte) 175, (byte) 75); break; } if (Main.netMode != 2) break; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Main.npc[index4].GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); break; } } break; case 398: if (NPC.AnyNPCs(Type)) break; Player player2 = Main.player[plr]; NPC.NewNPC((int) player2.Center.X, (int) player2.Center.Y - 150, Type); if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) Language.GetTextValue("Enemies.MoonLord")), (byte) 175, (byte) 75); break; } if (Main.netMode != 2) break; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) NetworkText.FromKey("Enemies.MoonLord")), new Color(175, 75, (int) byte.MaxValue)); break; default: bool flag = false; int num7 = 0; int num8 = 0; int minValue1 = (int) ((double) Main.player[plr].position.X / 16.0) - NPC.spawnRangeX * 2; int maxValue1 = (int) ((double) Main.player[plr].position.X / 16.0) + NPC.spawnRangeX * 2; int minValue2 = (int) ((double) Main.player[plr].position.Y / 16.0) - NPC.spawnRangeY * 2; int maxValue2 = (int) ((double) Main.player[plr].position.Y / 16.0) + NPC.spawnRangeY * 2; int num9 = (int) ((double) Main.player[plr].position.X / 16.0) - NPC.safeRangeX; int num10 = (int) ((double) Main.player[plr].position.X / 16.0) + NPC.safeRangeX; int num11 = (int) ((double) Main.player[plr].position.Y / 16.0) - NPC.safeRangeY; int num12 = (int) ((double) Main.player[plr].position.Y / 16.0) + NPC.safeRangeY; if (minValue1 < 0) minValue1 = 0; if (maxValue1 > Main.maxTilesX) maxValue1 = Main.maxTilesX; if (minValue2 < 0) minValue2 = 0; if (maxValue2 > Main.maxTilesY) maxValue2 = Main.maxTilesY; for (int index5 = 0; index5 < 1000; ++index5) { for (int index6 = 0; index6 < 100; ++index6) { int index7 = Main.rand.Next(minValue1, maxValue1); int index8 = Main.rand.Next(minValue2, maxValue2); if (!Main.tile[index7, index8].nactive() || !Main.tileSolid[(int) Main.tile[index7, index8].type]) { if ((!Main.wallHouse[(int) Main.tile[index7, index8].wall] || index5 >= 999) && (Type != 50 || index5 >= 500 || Main.tile[index8, index8].wall <= (ushort) 0)) { for (int index9 = index8; index9 < Main.maxTilesY; ++index9) { if (Main.tile[index7, index9].nactive() && Main.tileSolid[(int) Main.tile[index7, index9].type]) { if (index7 < num9 || index7 > num10 || index9 < num11 || index9 > num12 || index5 == 999) { int type = (int) Main.tile[index7, index9].type; num7 = index7; num8 = index9; flag = true; break; } break; } } if (flag && Type == 50 && index5 < 900) { int num13 = 20; if (!Collision.CanHit(new Vector2((float) num7, (float) (num8 - 1)) * 16f, 16, 16, new Vector2((float) num7, (float) (num8 - 1 - num13)) * 16f, 16, 16) || !Collision.CanHit(new Vector2((float) num7, (float) (num8 - 1 - num13)) * 16f, 16, 16, Main.player[plr].Center, 0, 0)) { num7 = 0; num8 = 0; flag = false; } } if (flag && index5 < 999) { int num14 = num7 - NPC.spawnSpaceX / 2; int num15 = num7 + NPC.spawnSpaceX / 2; int num16 = num8 - NPC.spawnSpaceY; int num17 = num8; if (num14 < 0) flag = false; if (num15 > Main.maxTilesX) flag = false; if (num16 < 0) flag = false; if (num17 > Main.maxTilesY) flag = false; if (flag) { for (int index10 = num14; index10 < num15; ++index10) { for (int index11 = num16; index11 < num17; ++index11) { if (Main.tile[index10, index11].nactive() && Main.tileSolid[(int) Main.tile[index10, index11].type]) { flag = false; break; } } } } } } else continue; } if (flag || flag) break; } if (flag && index5 < 999) { Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle(num7 * 16, num8 * 16, 16, 16); for (int index12 = 0; index12 < (int) byte.MaxValue; ++index12) { if (Main.player[index12].active) { Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) ((double) Main.player[index12].position.X + (double) (Main.player[index12].width / 2) - (double) (NPC.sWidth / 2) - (double) NPC.safeRangeX), (int) ((double) Main.player[index12].position.Y + (double) (Main.player[index12].height / 2) - (double) (NPC.sHeight / 2) - (double) NPC.safeRangeY), NPC.sWidth + NPC.safeRangeX * 2, NPC.sHeight + NPC.safeRangeY * 2); if (rectangle1.Intersects(rectangle2)) flag = false; } } } if (flag) break; } if (!flag) break; NPC.SpawnBoss(num7 * 16 + 8, num8 * 16, Type, plr); break; } } public static void SpawnBoss( int spawnPositionX, int spawnPositionY, int Type, int targetPlayerIndex) { int number = NPC.NewNPC(spawnPositionX, spawnPositionY, Type, 1); if (number == 200) return; Main.npc[number].target = targetPlayerIndex; Main.npc[number].timeLeft *= 20; string typeName = Main.npc[number].TypeName; if (Main.netMode == 2 && number < 200) NetMessage.SendData(23, number: number); if (Type == 134 || Type == (int) sbyte.MaxValue || Type == 126 || Type == 125) AchievementsHelper.CheckMechaMayhem(); if (Type == 125) { if (Main.netMode == 0) { Main.NewText(Lang.misc[48].Value, (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(Lang.misc[48].ToNetworkText(), new Color(175, 75, (int) byte.MaxValue)); } } else { if (Type == 316 || Type == 662 || Type == 82 || Type == 126 || Type == 50 || Type == 398 || Type == 551) return; if (Main.netMode == 0) { Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) typeName), (byte) 175, (byte) 75); } else { if (Main.netMode != 2) return; ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Main.npc[number].GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); } } } public static int NewNPC( int X, int Y, int Type, int Start = 0, float ai0 = 0.0f, float ai1 = 0.0f, float ai2 = 0.0f, float ai3 = 0.0f, int Target = 255) { if (Main.getGoodWorld) { if (Type == 46) Type = 614; if (Type == 62) Type = 66; } int nextNPC = -1; if (Type == 222) { for (int index = 199; index >= 0; --index) { if (!Main.npc[index].active) { nextNPC = index; break; } } } else { for (int index = Start; index < 200; ++index) { if (!Main.npc[index].active) { nextNPC = index; break; } } } if (nextNPC < 0) return 200; Main.npc[nextNPC] = new NPC(); Main.npc[nextNPC].SetDefaults(Type); Main.npc[nextNPC].whoAmI = nextNPC; NPC.GiveTownUniqueDataToNPCsThatNeedIt(Type, nextNPC); Main.npc[nextNPC].position.X = (float) (X - Main.npc[nextNPC].width / 2); Main.npc[nextNPC].position.Y = (float) (Y - Main.npc[nextNPC].height); Main.npc[nextNPC].active = true; Main.npc[nextNPC].timeLeft = (int) ((double) NPC.activeTime * 1.25); Main.npc[nextNPC].wet = Collision.WetCollision(Main.npc[nextNPC].position, Main.npc[nextNPC].width, Main.npc[nextNPC].height); Main.npc[nextNPC].ai[0] = ai0; Main.npc[nextNPC].ai[1] = ai1; Main.npc[nextNPC].ai[2] = ai2; Main.npc[nextNPC].ai[3] = ai3; Main.npc[nextNPC].target = Target; if (Type == 50) { switch (Main.netMode) { case 0: Main.NewText(Language.GetTextValue("Announcement.HasAwoken", (object) Main.npc[nextNPC].TypeName), (byte) 175, (byte) 75); break; case 2: ChatHelper.BroadcastChatMessage(NetworkText.FromKey("Announcement.HasAwoken", (object) Main.npc[nextNPC].GetTypeNetName()), new Color(175, 75, (int) byte.MaxValue)); break; } } return nextNPC; } private static void GiveTownUniqueDataToNPCsThatNeedIt(int Type, int nextNPC) { if (NPC.TypeToDefaultHeadIndex(Type) == -1 && Type != 453) return; Main.npc[nextNPC].GivenName = NPC.getNewNPCName(Type); ITownNPCProfile profile; if (TownNPCProfiles.Instance.GetProfile(Type, out profile)) { Main.npc[nextNPC].townNpcVariationIndex = profile.RollVariation(); Main.npc[nextNPC].GivenName = profile.GetNameForVariant(Main.npc[nextNPC]); } Main.npc[nextNPC].needsUniqueInfoUpdate = true; } public void TransformVisuals(int oldType, int newType) { this.position = this.position + this.netOffset; if (oldType == 158 && newType == 159 || oldType == 159 && newType == 158) { SoundEngine.PlaySound(SoundID.Item8, this.position); int index1 = Gore.NewGore(new Vector2(this.position.X, this.position.Y - 10f), this.velocity, 99, this.scale); Main.gore[index1].velocity *= 0.3f; int index2 = Gore.NewGore(new Vector2(this.position.X, (float) ((double) this.position.Y + (double) (this.height / 2) - 10.0)), this.velocity, 99, this.scale); Main.gore[index2].velocity *= 0.3f; int index3 = Gore.NewGore(new Vector2(this.position.X, (float) ((double) this.position.Y + (double) this.height - 10.0)), this.velocity, 99, this.scale); Main.gore[index3].velocity *= 0.3f; } else if (oldType == 478 && newType == 479) { for (int index4 = 0; index4 < 30; ++index4) { int index5 = Dust.NewDust(this.position, this.width, this.height, 238, SpeedY: -2f); if (Main.rand.Next(2) == 0) Main.dust[index5].noGravity = true; } Gore.NewGore(this.position, this.velocity, 684, this.scale); Gore.NewGore(this.position, this.velocity, 685, this.scale); Gore.NewGore(this.position, this.velocity, 686, this.scale); Gore.NewGore(this.position, this.velocity, 684 + Main.rand.Next(3), this.scale); } else if (oldType == 406 && newType == 405) { float num1 = (float) Main.rand.Next(10, 21); float num2 = 6.283185f * Main.rand.NextFloat(); Vector2 vector2_1 = new Vector2(22f, 22f); for (float num3 = 0.0f; (double) num3 < (double) num1; ++num3) { Dust dust = Main.dust[Dust.NewDust(this.Center, 0, 0, 229)]; Vector2 vector2_2 = Vector2.UnitY.RotatedBy((double) num3 * 6.28318548202515 / (double) num1 + (double) num2); dust.position = this.Center + vector2_2 * vector2_1 / 2f; dust.velocity = vector2_2; dust.noGravity = true; dust.scale = (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 1.79999995231628); dust.velocity *= dust.scale; dust.fadeIn = Main.rand.NextFloat() * 2f; } } if (oldType == 428 && newType == 427) { for (int index = 0; index < 20; ++index) { int Type = Utils.SelectRandom(Main.rand, 229, 240); Dust dust = Main.dust[Dust.NewDust(this.position, this.width, this.height, Type)]; dust.noGravity = true; dust.scale = (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 1.79999995231628); dust.fadeIn = 0.25f; dust.velocity *= dust.scale / 2f; } } if (oldType == 427 && newType == 426) { for (int index = 0; index < 30; ++index) { int Type = Utils.SelectRandom(Main.rand, 229, 240, 240); Dust dust = Main.dust[Dust.NewDust(this.position, this.width, this.height, Type)]; dust.noGravity = true; dust.scale = (float) (0.600000023841858 + (double) Main.rand.NextFloat() * 1.79999995231628); dust.fadeIn = 0.25f; dust.velocity *= dust.scale * 0.75f; } } this.position = this.position - this.netOffset; } public void Teleport(Vector2 newPos, int Style = 0, int extraInfo = 0) { int extraInfo1 = 0; if (Style == 4) extraInfo1 = this.lastPortalColorIndex; float dustCountMult = (double) this.teleportTime > 0.0 ? 0.3f : 1f; Vector2 position = this.position; Main.TeleportEffect(this.getRect(), Style, extraInfo1, dustCountMult, otherPosition: newPos); this.position = newPos; if (Style == 4) { this.lastPortalColorIndex = extraInfo; extraInfo1 = this.lastPortalColorIndex; } Main.TeleportEffect(this.getRect(), Style, extraInfo1, dustCountMult, TeleportationSide.Exit, position); this.teleportTime = 1f; this.teleportStyle = Style; if (Main.netMode != 2 || Style == 4) return; NetMessage.SendData(65, number: 1, number2: ((float) this.whoAmI), number3: newPos.X, number4: newPos.Y, number5: Style); } public void Transform(int newType) { if (Main.netMode == 1) return; int extraValue = this.extraValue; bool flag = false; if ((double) this.value == 0.0) flag = true; int[] numArray1 = new int[5]; int[] numArray2 = new int[5]; for (int index = 0; index < 5; ++index) { numArray1[index] = this.buffType[index]; numArray2[index] = this.buffTime[index]; } int height = this.height; int type = this.type; int life = this.life; int lifeMax = this.lifeMax; Vector2 velocity = this.velocity; this.position.Y += (float) this.height; int spriteDirection = this.spriteDirection; bool spawnedFromStatue = this.SpawnedFromStatue; this.SetDefaults(newType); this.SpawnedFromStatue = spawnedFromStatue; this.spriteDirection = spriteDirection; this.TargetClosest(); this.velocity = velocity; this.position.Y -= (float) this.height; for (int index = 0; index < 5; ++index) { this.buffType[index] = numArray1[index]; this.buffTime[index] = numArray2[index]; } if (flag) this.value = 0.0f; if (this.lifeMax == lifeMax) this.life = life; if (newType == 107 || newType == 108) { this.homeTileX = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; this.homeTileY = (int) ((double) this.position.Y + (double) this.height) / 16; this.homeless = true; } this.extraValue = extraValue; if (Main.netMode == 2) { this.netUpdate = true; NetMessage.SendData(23, number: this.whoAmI); NetMessage.SendData(54, number: this.whoAmI); } this.TransformVisuals(type, newType); NPC.GiveTownUniqueDataToNPCsThatNeedIt(this.type, this.whoAmI); if (this.townNPC) { this.homeless = true; WorldGen.CheckAchievement_RealEstate(); } this.altTexture = 0; } public int checkArmorPenetration(int armorPenetration) { if (armorPenetration <= 0) return 0; return armorPenetration > this.defense && this.defense >= 0 ? this.defense / 2 : armorPenetration / 2; } public double StrikeNPCNoInteraction( int Damage, float knockBack, int hitDirection, bool crit = false, bool noEffect = false, bool fromNet = false) { if (Main.netMode == 0) ++NPC.ignorePlayerInteractions; return this.StrikeNPC(Damage, knockBack, hitDirection, crit, noEffect, fromNet); } public double StrikeNPC( int Damage, float knockBack, int hitDirection, bool crit = false, bool noEffect = false, bool fromNet = false) { bool flag = Main.netMode == 0; if (flag && NPC.ignorePlayerInteractions > 0) { --NPC.ignorePlayerInteractions; flag = false; } if (!this.active || this.life <= 0) return 0.0; double num1 = (double) Damage; int Defense = this.defense; if (this.ichor) Defense -= 20; if (this.betsysCurse) Defense -= 40; if (Defense < 0) Defense = 0; double dmg = Main.CalculateDamageNPCsTake((int) num1, Defense); if (crit) dmg *= 2.0; if ((double) this.takenDamageMultiplier > 1.0) dmg *= (double) this.takenDamageMultiplier; if (((double) this.takenDamageMultiplier > 1.0 || Damage != 9999) && this.lifeMax > 1) { if (this.friendly) { CombatText.NewText(new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height), crit ? CombatText.DamagedFriendlyCrit : CombatText.DamagedFriendly, (int) dmg, crit); } else { Color color = crit ? CombatText.DamagedHostileCrit : CombatText.DamagedHostile; if (fromNet) color = crit ? CombatText.OthersDamagedHostileCrit : CombatText.OthersDamagedHostile; CombatText.NewText(new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height), color, (int) dmg, crit); } } if (dmg < 1.0) return 0.0; if (flag) this.PlayerInteraction(Main.myPlayer); this.justHit = true; if ((this.type == 438 || this.type == 379) && Main.netMode != 1) { int index = (int) (-(double) this.ai[3] - 1.0); if (index > -1 && (double) Main.npc[index].localAI[0] == 0.0) Main.npc[index].localAI[0] = 1f; } if (this.townNPC) { if ((this.aiStyle != 7 ? 0 : ((double) this.ai[0] == 3.0 || (double) this.ai[0] == 4.0 || (double) this.ai[0] == 16.0 ? 1 : ((double) this.ai[0] == 17.0 ? 1 : 0))) != 0) { NPC npc = Main.npc[(int) this.ai[2]]; if (npc.active) { npc.ai[0] = 1f; npc.ai[1] = (float) (300 + Main.rand.Next(300)); npc.ai[2] = 0.0f; npc.localAI[3] = 0.0f; npc.direction = hitDirection; npc.netUpdate = true; } } this.ai[0] = 1f; this.ai[1] = (float) (300 + Main.rand.Next(300)); this.ai[2] = 0.0f; this.localAI[3] = 0.0f; this.direction = hitDirection; this.netUpdate = true; } if (this.aiStyle == 8 && Main.netMode != 1) { if (this.type == 172) this.ai[0] = 450f; else if (this.type == 283 || this.type == 284) { if (Main.rand.Next(2) == 0) { this.ai[0] = 390f; this.netUpdate = true; } } else if (this.type == 533) { if (Main.rand.Next(3) != 0) { this.ai[0] = 181f; this.netUpdate = true; } } else this.ai[0] = 400f; this.TargetClosest(); } if (this.aiStyle == 97 && Main.netMode != 1) { this.localAI[1] = 1f; this.TargetClosest(); } if (this.type == 371) { dmg = 0.0; this.ai[0] = 1f; this.ai[1] = 4f; this.dontTakeDamage = true; } if (this.type == 346 && (double) this.life >= (double) this.lifeMax * 0.5 && (double) this.life - dmg < (double) this.lifeMax * 0.5) Gore.NewGore(this.position, this.velocity, 517); if (this.type == 184) this.localAI[0] = 60f; if (this.type == 535) this.localAI[0] = 60f; if (this.type == 185) this.localAI[0] = 1f; if (!this.immortal) { if (this.realLife >= 0) { Main.npc[this.realLife].life -= (int) dmg; this.life = Main.npc[this.realLife].life; this.lifeMax = Main.npc[this.realLife].lifeMax; } else this.life -= (int) dmg; } if ((double) knockBack > 0.0 && (double) this.knockBackResist > 0.0) { float num2 = knockBack * this.knockBackResist; if (this.onFire2) num2 *= 1.1f; if ((double) num2 > 8.0) num2 = 8f + (num2 - 8f) * 0.9f; if ((double) num2 > 10.0) num2 = 10f + (num2 - 10f) * 0.8f; if ((double) num2 > 12.0) num2 = 12f + (num2 - 12f) * 0.7f; if ((double) num2 > 14.0) num2 = 14f + (num2 - 14f) * 0.6f; if ((double) num2 > 16.0) num2 = 16f; if (crit) num2 *= 1.4f; int num3 = (int) dmg * 10; if (Main.expertMode) num3 = (int) dmg * 15; if (num3 > this.lifeMax) { if (hitDirection < 0 && (double) this.velocity.X > -(double) num2) { if ((double) this.velocity.X > 0.0) this.velocity.X -= num2; this.velocity.X -= num2; if ((double) this.velocity.X < -(double) num2) this.velocity.X = -num2; } else if (hitDirection > 0 && (double) this.velocity.X < (double) num2) { if ((double) this.velocity.X < 0.0) this.velocity.X += num2; this.velocity.X += num2; if ((double) this.velocity.X > (double) num2) this.velocity.X = num2; } if (this.type == 185) num2 *= 1.5f; float num4 = this.noGravity ? num2 * -0.5f : num2 * -0.75f; if ((double) this.velocity.Y > (double) num4) { this.velocity.Y += num4; if ((double) this.velocity.Y < (double) num4) this.velocity.Y = num4; } } else { if (!this.noGravity) this.velocity.Y = (float) (-(double) num2 * 0.75) * this.knockBackResist; else this.velocity.Y = (float) (-(double) num2 * 0.5) * this.knockBackResist; this.velocity.X = num2 * (float) hitDirection * this.knockBackResist; } } if ((this.type == 113 || this.type == 114) && this.life <= 0) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && (Main.npc[index].type == 113 || Main.npc[index].type == 114)) Main.npc[index].HitEffect(hitDirection, dmg); } } else this.HitEffect(hitDirection, dmg); if (this.HitSound != null) SoundEngine.PlaySound(this.HitSound, this.position); if (this.realLife >= 0) Main.npc[this.realLife].checkDead(); else this.checkDead(); return dmg; } public static void LadyBugKilled(Vector2 Position, bool GoldLadyBug = false) { Main.ladyBugRainBoost += NPC.ladyBugRainTime; int player = Main.myPlayer; if (!Main.player[player].active || Main.player[player].dead) return; Vector2 vector2 = Position - Main.player[player].Center; int num1 = 400; if ((double) vector2.Length() >= (double) num1) return; if ((double) vector2.Length() < 100.0) vector2 = new Vector2(); double num2 = 1.0 - (double) vector2.Length() / (double) num1; int num3 = (int) ((double) NPC.ladyBugBadLuckTime * num2); if (GoldLadyBug) num3 *= 2; if (num3 >= Main.player[player].ladyBugLuckTimeLeft) return; Main.player[player].ladyBugLuckTimeLeft = num3; Main.player[player].luckNeedsSync = true; } private void LadyBugLuck(int plr, bool GoldLadyBug = false) { if (this.releaseOwner != (short) byte.MaxValue || Main.player[plr].ladyBugLuckTimeLeft < 0) return; Vector2 vector2 = this.Center - Main.player[plr].Center; int num1 = 800; if ((double) vector2.Length() >= (double) num1) return; if ((double) vector2.Length() < 30.0) vector2 = new Vector2(); double num2 = Math.Pow(1.0 - (double) vector2.Length() / (double) num1, 6.0); int num3 = (int) ((double) NPC.ladyBugGoodLuckTime * num2); if (GoldLadyBug) num3 *= 2; if (num3 <= Main.player[plr].ladyBugLuckTimeLeft) return; Main.player[plr].ladyBugLuckTimeLeft = num3; Main.player[plr].luckNeedsSync = true; } private void NPCLuck() { int player = Main.myPlayer; if (this.type == 22) { if (Main.player[player].ladyBugLuckTimeLeft < 0 || !Main.player[player].active || Main.player[player].dead) return; int num = NPC.ladyBugGoodLuckTime / 3; if (num <= Main.player[player].ladyBugLuckTimeLeft) return; Main.player[player].ladyBugLuckTimeLeft = num; Main.player[player].luckNeedsSync = true; } else { if (this.type == 54 || !Main.player[player].active || Main.player[player].dead) return; int num = NPC.ladyBugBadLuckTime / 3; if (num >= Main.player[player].ladyBugLuckTimeLeft) return; Main.player[player].ladyBugLuckTimeLeft = num; Main.player[player].luckNeedsSync = true; } } public void HitEffect(int hitDirection = 0, double dmg = 10.0) { // ISSUE: The method is too long to display (53918 instructions) } public static int CountNPCS(int Type) { int num = 0; for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == Type) ++num; } return num; } public static bool AnyHelpfulFairies() { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && (Main.npc[index].type == 583 || Main.npc[index].type == 584 || Main.npc[index].type == 585) && (double) Main.npc[index].ai[2] > 1.0) return true; } return false; } public static bool AnyNPCs(int Type) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == Type) return true; } return false; } public static int FindFirstNPC(int Type) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == Type) return index; } return -1; } public static bool NearSpikeBall(int x, int y) { Microsoft.Xna.Framework.Rectangle rectangle1 = new Microsoft.Xna.Framework.Rectangle(x * 16 - 300, y * 16 - 300, 600, 600); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].aiStyle == 20) { Microsoft.Xna.Framework.Rectangle rectangle2 = new Microsoft.Xna.Framework.Rectangle((int) Main.npc[index].ai[1], (int) Main.npc[index].ai[2], 20, 20); if (rectangle1.Intersects(rectangle2)) return true; } } return false; } public int FindBuffIndex(int type) { if (this.buffImmune[type]) return -1; for (int index = 0; index < 5; ++index) { if (this.buffTime[index] >= 1 && this.buffType[index] == type) return index; } return -1; } public void AddBuff(int type, int time, bool quiet = false) { if (this.buffImmune[type]) return; if (!quiet) { switch (Main.netMode) { case 1: NetMessage.SendData(53, number: this.whoAmI, number2: ((float) type), number3: ((float) time)); break; case 2: NetMessage.SendData(54, number: this.whoAmI); break; } } int index1 = -1; for (int index2 = 0; index2 < 5; ++index2) { if (this.buffType[index2] == type) { if (this.buffTime[index2] >= time) return; this.buffTime[index2] = time; return; } } while (index1 == -1) { int buffIndex = -1; for (int index3 = 0; index3 < 5; ++index3) { if (!Main.debuff[this.buffType[index3]]) { buffIndex = index3; break; } } if (buffIndex == -1) return; for (int index4 = buffIndex; index4 < 5; ++index4) { if (this.buffType[index4] == 0) { index1 = index4; break; } } if (index1 == -1) this.DelBuff(buffIndex); } this.buffType[index1] = type; this.buffTime[index1] = time; } public void RequestBuffRemoval(int buffTypeToRemove) { if (buffTypeToRemove < 0 || buffTypeToRemove >= 323 || !BuffID.Sets.CanBeRemovedByNetMessage[buffTypeToRemove]) return; int buffIndex = this.FindBuffIndex(buffTypeToRemove); if (buffIndex == -1) return; this.DelBuff(buffIndex); if (Main.netMode != 1) return; NetMessage.SendData(137, number: this.whoAmI, number2: ((float) buffTypeToRemove)); } public void DelBuff(int buffIndex) { this.buffTime[buffIndex] = 0; this.buffType[buffIndex] = 0; for (int index1 = 0; index1 < 4; ++index1) { if (this.buffTime[index1] == 0 || this.buffType[index1] == 0) { for (int index2 = index1 + 1; index2 < 5; ++index2) { this.buffTime[index2 - 1] = this.buffTime[index2]; this.buffType[index2 - 1] = this.buffType[index2]; this.buffTime[index2] = 0; this.buffType[index2] = 0; } } } if (Main.netMode != 2) return; NetMessage.SendData(54, number: this.whoAmI); } public Microsoft.Xna.Framework.Rectangle getRect() => new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height); public bool CanBeChasedBy(object attacker = null, bool ignoreDontTakeDamage = false) => this.active && this.chaseable && this.lifeMax > 5 && !this.dontTakeDamage | ignoreDontTakeDamage && !this.friendly && !this.immortal; public bool CountsAsACritter => this.lifeMax <= 5 && this.damage == 0 && this.type != 594; public void moneyPing(Vector2 pos) { SoundEngine.PlaySound(38, pos); int Type = 244; if (this.extraValue >= 1000000) Type = 247; else if (this.extraValue >= 10000) Type = 246; else if (this.extraValue >= 100) Type = 245; for (int index1 = 0; index1 < 20; ++index1) { int index2 = Dust.NewDust(pos - new Vector2(1f, 2f), 10, 14, Type, Alpha: 254, Scale: 0.25f); Main.dust[index2].velocity *= 0.2f; } } public void IdleSounds() { if ((this.type == 239 || this.type == 240) && Main.rand.Next(900) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(24, 26)); else if ((this.type == 62 || this.type == 156) && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(26, 30)); else if (this.type == 177 && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(30, 32)); else if (this.type == 226 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 32); else if (this.type == 153 && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 33); else if (this.wet && (this.type == 63 || this.type == 64 || this.type == 103) && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(34, 36)); else if ((this.type == 198 || this.type == 199) && Main.rand.Next(1000) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(36, 38)); else if ((this.type == 170 || this.type == 180 || this.type == 171) && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(38, 41)); else if (this.type == 250 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(41, 44)); else if (this.type == 580 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 44); else if (this.type == 582 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 44); else if (this.type == 581 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(44, 47)); else if (this.type == 508 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 44); else if (this.type == 509 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(44, 47)); else if (this.type == 494 && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 47); else if (this.type == 467 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(48, 50)); else if (this.type == 468 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(50, 53)); else if (this.type == 288 && Main.rand.Next(400) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(53, 55)); else if ((this.type == 524 || this.type == 525 || this.type == 526 || this.type == 527) && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(55, 57)); else if ((this.type == 496 || this.type == 497) && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(57, 59)); else if (this.type == 389 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(59, 61)); else if (this.type == 471 && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(61, 63)); else if (this.type == 482 && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(63, 66)); else if (this.type == 388 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(66, 69)); else if (this.type == 520 && Main.rand.Next(800) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(69, 73)); else if (this.type == 477 && Main.rand.Next(600) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 73); else if (this.type == 258 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(74, 78)); else if (this.type == 252 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, 78); else if (this.type == 469 && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(79, 81)); else if ((this.type == 253 || this.type == 82) && Main.rand.Next(700) == 0) SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(81, 84)); else if (this.type >= 498 && this.type <= 506 && Main.rand.Next(600) == 0) { SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(84, 86)); } else { if (this.type != 391 || Main.rand.Next(700) != 0) return; SoundEngine.PlaySound(29, (int) this.position.X, (int) this.position.Y, Main.rand.Next(86, 87)); } } public void UpdateAltTexture() { if (!this.townNPC) return; int altTexture = this.altTexture; bool flag = BirthdayParty.PartyIsUp || this.ForcePartyHatOn; if (this.type == 441 || this.type == 453 || this.type == 633) flag = false; this.altTexture = 0; if (flag) this.altTexture = 1; if (this.type == 633 && this.ShouldBestiaryGirlBeLycantrope()) this.altTexture = 2; if (this.ForcePartyHatOn) return; this.MakeTransitionEffectsForTextureChanges(altTexture, this.altTexture); } private void MakeTransitionEffectsForTextureChanges(int oldAltTexture, int currentAltTexture) { if (oldAltTexture == 0 && currentAltTexture == 1) { for (int index = 0; index < 20; ++index) Dust.NewDust(this.position, this.width, this.height / 4, 139 + Main.rand.Next(4), SpeedY: -2f); } if (oldAltTexture == 1 && currentAltTexture == 0) Utils.PoofOfSmoke(this.position); if (this.type != 633) return; int num = 2; if ((oldAltTexture != 0 || currentAltTexture != num ? (oldAltTexture != num ? 0 : (currentAltTexture == 0 ? 1 : 0)) : 1) == 0) return; for (int index = 0; index < 20; ++index) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 262, SpeedY: -2f); dust.noGravity = true; dust.scale = 2f; } } public static void ResetNetOffsets() { NPC.offSetDelayTime = 180; for (int index = 0; index < 200; ++index) Main.npc[index].netOffset *= 0.0f; } public void UpdateNPC(int i) { this.whoAmI = i; if (!this.active) return; if (NPC.offSetDelayTime > 0) this.netOffset *= 0.0f; else if (Main.netMode == 2) this.netOffset *= 0.0f; else if (Main.multiplayerNPCSmoothingRange <= 0) this.netOffset *= 0.0f; else if (this.netOffset != new Vector2(0.0f, 0.0f)) { if (NPCID.Sets.NoMultiplayerSmoothingByType[this.type]) this.netOffset *= 0.0f; else if (NPCID.Sets.NoMultiplayerSmoothingByAI[this.aiStyle]) { this.netOffset *= 0.0f; } else { float num1 = 2f; float npcSmoothingRange = (float) Main.multiplayerNPCSmoothingRange; float num2 = this.netOffset.Length(); if ((double) num2 > (double) npcSmoothingRange) { this.netOffset.Normalize(); this.netOffset *= npcSmoothingRange; num2 = this.netOffset.Length(); } float num3 = num1 + num2 / npcSmoothingRange * num1; Vector2 netOffset = this.netOffset; netOffset.Normalize(); this.netOffset -= netOffset * num3; if ((double) this.netOffset.Length() < (double) num3) this.netOffset *= 0.0f; if (this.townNPC && (double) Vector2.Distance(this.position, new Vector2((float) (this.homeTileX * 16 + 8 - this.width / 2), (float) (this.homeTileY * 16 - this.height) - 0.1f)) < 1.0) this.netOffset *= 0.0f; } } this.UpdateAltTexture(); if (this.type == 368) NPC.travelNPC = true; if (Main.netMode != 2) this.UpdateNPC_CastLights(); this.UpdateNPC_TeleportVisuals(); this.UpdateNPC_CritterSounds(); this.TrySyncingUniqueTownNPCData(i); if (this.aiStyle == 7 && (double) this.position.Y > (double) Main.bottomWorld - 640.0 + (double) this.height && Main.netMode != 1 && !Main.xMas) { this.StrikeNPCNoInteraction(9999, 0.0f, 0); if (Main.netMode == 2) NetMessage.SendData(28, number: this.whoAmI, number2: 9999f); } if (Main.netMode == 1) { bool flag = false; int index1 = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; int index2 = (int) ((double) this.position.Y + (double) (this.height / 2)) / 16; try { if (index1 >= 4) { if (index1 <= Main.maxTilesX - 4) { if (index2 >= 4) { if (index2 <= Main.maxTilesY - 4) { if (Main.tile[index1, index2] == null) flag = true; else if (Main.tile[index1 - 3, index2] == null) flag = true; else if (Main.tile[index1 + 3, index2] == null) flag = true; else if (Main.tile[index1, index2 - 3] == null) flag = true; else if (Main.tile[index1, index2 + 3] == null) flag = true; } } } } } catch { flag = true; } if (flag) return; } this.UpdateNPC_BuffFlagsReset(); this.UpdateNPC_BuffSetFlags(); this.UpdateNPC_SoulDrainDebuff(); this.UpdateNPC_BuffClearExpiredBuffs(); this.UpdateNPC_BuffApplyDOTs(); this.UpdateNPC_BuffApplyVFX(); this.UpdateNPC_BloodMoonTransformations(); float maxFallSpeed; this.UpdateNPC_UpdateGravity(out maxFallSpeed); if (this.soundDelay > 0) --this.soundDelay; if (this.life <= 0) { this.active = false; this.UpdateNetworkCode(i); this.netUpdate = false; this.justHit = false; } else { this.oldTarget = this.target; this.oldDirection = this.direction; this.oldDirectionY = this.directionY; float num4 = (float) (1.0 + (double) Math.Abs(this.velocity.X) / 3.0); if ((double) this.gfxOffY > 0.0) { this.gfxOffY -= num4 * this.stepSpeed; if ((double) this.gfxOffY < 0.0) this.gfxOffY = 0.0f; } else if ((double) this.gfxOffY < 0.0) { this.gfxOffY += num4 * this.stepSpeed; if ((double) this.gfxOffY > 0.0) this.gfxOffY = 0.0f; } if ((double) this.gfxOffY > 16.0) this.gfxOffY = 16f; if ((double) this.gfxOffY < -16.0) this.gfxOffY = -16f; this.TryPortalJumping(); this.IdleSounds(); this.AI(); if (Main.netMode != 2 && this.extraValue > 0) { int Type = 244; float num5 = 30f; if (this.extraValue >= 1000000) { Type = 247; num5 *= 0.25f; } else if (this.extraValue >= 10000) { Type = 246; num5 *= 0.5f; } else if (this.extraValue >= 100) { Type = 245; num5 *= 0.75f; } if (Main.rand.Next((int) num5) == 0) { this.position = this.position + this.netOffset; int index = Dust.NewDust(this.position, this.width, this.height, Type, Alpha: 254, Scale: 0.25f); Main.dust[index].velocity *= 0.1f; this.position = this.position - this.netOffset; } } for (int index = 0; index < 256; ++index) { if (this.immune[index] > 0) --this.immune[index]; } if (!this.noGravity && !this.noTileCollide) { int x = (int) ((double) this.position.X + (double) (this.width / 2)) / 16; int y = (int) ((double) this.position.Y + (double) (this.height / 2)) / 16; if (WorldGen.InWorld(x, y) && Main.tile[x, y] == null) { NPC.gravity = 0.0f; this.velocity.X = 0.0f; this.velocity.Y = 0.0f; } } if (!this.noGravity) { this.velocity.Y += NPC.gravity; if ((double) this.velocity.Y > (double) maxFallSpeed) this.velocity.Y = maxFallSpeed; } if ((double) this.velocity.X < 0.005 && (double) this.velocity.X > -0.005) this.velocity.X = 0.0f; if (Main.netMode != 1 && this.type != 37 && (this.friendly || NPCID.Sets.TakesDamageFromHostilesWithoutBeingFriendly[this.type])) { if (this.townNPC) this.CheckDrowning(); this.CheckLifeRegen(); this.GetHurtByOtherNPCs(NPCID.Sets.AllNPCs); } if (Main.netMode != 1 && (NPC.npcsFoundForCheckActive[210] || NPC.npcsFoundForCheckActive[211]) && !NPCID.Sets.HurtingBees[this.type]) this.GetHurtByOtherNPCs(NPCID.Sets.HurtingBees); if (!this.noTileCollide) { this.UpdateCollision(); } else { this.oldPosition = this.position; this.oldDirection = this.direction; this.position = this.position + this.velocity; if (this.onFire && this.boss && Main.netMode != 1 && Collision.WetCollision(this.position, this.width, this.height)) { for (int buffIndex = 0; buffIndex < 5; ++buffIndex) { if (this.buffType[buffIndex] == 24) this.DelBuff(buffIndex); } } } if (Main.netMode != 1 && !this.noTileCollide && this.lifeMax > 1 && Collision.SwitchTiles(this.position, this.width, this.height, this.oldPosition, 2) && (this.type == 46 || this.type == 148 || this.type == 149 || this.type == 303 || this.type == 361 || this.type == 362 || this.type == 364 || this.type == 366 || this.type == 367 || this.type >= 442 && this.type <= 448 || this.type == 602 || this.type == 608 || this.type == 614)) { this.ai[0] = 1f; this.ai[1] = 400f; this.ai[2] = 0.0f; } this.FindFrame(); this.UpdateNPC_UpdateTrails(); this.UpdateNetworkCode(i); this.CheckActive(); this.netUpdate = false; this.justHit = false; } } private void TrySyncingUniqueTownNPCData(int npcIndex) { if (Main.netMode != 1 || !this.needsUniqueInfoUpdate || !this.townNPC && this.type != 453 || this.type == 37) return; this.needsUniqueInfoUpdate = false; NetMessage.SendData(56, number: npcIndex); } private void UpdateNetworkCode(int i) { if (!this.active) this.netUpdate = true; if (Main.netMode != 2) return; if (Main.npcStreamSpeed > 0 && !this.townNPC && (double) Math.Abs(this.velocity.X) + (double) Math.Abs(this.velocity.Y) > 1.0) { ++this.netStream; if ((int) this.netStream > Main.npcStreamSpeed) { for (int remoteClient = 0; remoteClient < (int) byte.MaxValue; ++remoteClient) { if (Main.player[remoteClient].active) { this.netStream = (byte) 0; float num = Math.Abs(this.Center.X - Main.player[remoteClient].Center.X) + Math.Abs(this.Center.Y - Main.player[remoteClient].Center.Y); if ((double) num < 250.0) this.streamPlayer[remoteClient] -= (byte) 8; else if ((double) num < 500.0) this.streamPlayer[remoteClient] -= (byte) 4; else if ((double) num < 1000.0) this.streamPlayer[remoteClient] -= (byte) 2; else if ((double) num < 1500.0) --this.streamPlayer[remoteClient]; if (this.streamPlayer[remoteClient] <= (byte) 0) { this.streamPlayer[remoteClient] = (byte) 8; NetMessage.SendData(23, remoteClient, number: i); } } } } } if (this.townNPC) this.netSpam = 0; if (this.netUpdate2) this.netUpdate = true; if (!this.active) this.netSpam = 0; if (this.netUpdate) { if (this.boss) { Vector2 vector2 = this.oldPosition - this.position; if (this.netSpam <= 15) { this.netSpam += 5; NetMessage.SendData(23, number: i); this.netUpdate2 = false; } else this.netUpdate2 = true; } else if (this.netSpam <= 90) { this.netSpam += 30; NetMessage.SendData(23, number: i); this.netUpdate2 = false; } else this.netUpdate2 = true; } if (this.netSpam > 0) --this.netSpam; if (!this.active || !this.townNPC || NPC.TypeToDefaultHeadIndex(this.type) <= 0) return; if (this.homeless != this.oldHomeless || this.homeTileX != this.oldHomeTileX || this.homeTileY != this.oldHomeTileY) { byte householdStatus = WorldGen.TownManager.GetHouseholdStatus(this); NetMessage.SendData(60, number: i, number2: ((float) Main.npc[i].homeTileX), number3: ((float) Main.npc[i].homeTileY), number4: ((float) householdStatus)); } this.oldHomeless = this.homeless; this.oldHomeTileX = this.homeTileX; this.oldHomeTileY = this.homeTileY; } private void UpdateNPC_UpdateTrails() { int num = NPCID.Sets.TrailingMode[this.type]; if (num == 0) { if ((double) this.localAI[3] <= 0.0) { this.localAI[3] = 2f; for (int index = this.oldPos.Length - 1; index > 0; --index) this.oldPos[index] = this.oldPos[index - 1]; this.oldPos[0] = this.position + this.netOffset; } --this.localAI[3]; } if (num == 1) { for (int index = this.oldPos.Length - 1; index > 0; --index) this.oldPos[index] = this.oldPos[index - 1]; this.oldPos[0] = this.position + this.netOffset; } if (num == 2) { if ((int) this.ai[0] == 4 || (double) this.ai[0] == 5.0 || (double) this.ai[0] == 6.0) { for (int index = this.oldPos.Length - 1; index > 0; --index) { this.oldPos[index] = this.oldPos[index - 1]; this.oldRot[index] = this.oldRot[index - 1]; } this.oldPos[0] = this.position + this.netOffset; this.oldRot[0] = this.rotation; } else { for (int index = this.oldPos.Length - 1; index >= 0; --index) { this.oldPos[index] = this.position + this.netOffset; this.oldRot[index] = this.rotation; } } } if (num == 3) { for (int index = this.oldPos.Length - 1; index > 0; --index) { this.oldPos[index] = this.oldPos[index - 1]; this.oldRot[index] = this.oldRot[index - 1]; } this.oldPos[0] = this.position + this.netOffset; this.oldRot[0] = this.rotation; } if (num == 4) { for (int index = this.oldPos.Length - 1; index > 0; --index) { this.oldPos[index] = this.oldPos[index - 1]; Lighting.AddLight((int) this.position.X / 16, (int) this.position.Y / 16, 0.3f, 0.0f, 0.2f); } this.oldPos[0] = this.position + this.netOffset; } else if (num == 5) { for (int index = this.oldPos.Length - 1; index > 0; --index) this.oldPos[index] = this.oldPos[index - 1]; this.oldPos[0] = this.position + this.netOffset; } else if (num == 6) { for (int index = this.oldPos.Length - 1; index > 0; --index) this.oldPos[index] = this.oldPos[index - 1]; this.oldPos[0] = this.position + this.netOffset; } else { if (num != 7) return; for (int index = this.oldPos.Length - 1; index > 0; --index) { this.oldPos[index] = this.oldPos[index - 1]; this.oldRot[index] = this.oldRot[index - 1]; } this.oldPos[0] = this.position + this.netOffset; this.oldRot[0] = this.rotation; } } private void UpdateNPC_UpdateGravity(out float maxFallSpeed) { maxFallSpeed = 10f; NPC.gravity = 0.3f; if (this.type == 258) { NPC.gravity = 0.1f; if ((double) this.velocity.Y > 3.0) this.velocity.Y = 3f; } else if (this.type == 425 && (double) this.ai[2] == 1.0) { NPC.gravity = 0.1f; if ((double) this.velocity.Y > 2.0) this.velocity.Y = 2f; } else if ((this.type == 576 || this.type == 577) && (double) this.ai[0] > 0.0 && (double) this.ai[1] == 2.0) { NPC.gravity = 0.45f; if ((double) this.velocity.Y > 32.0) this.velocity.Y = 32f; } else if (this.type == 427 && (double) this.ai[2] == 1.0) { NPC.gravity = 0.1f; if ((double) this.velocity.Y > 4.0) this.velocity.Y = 4f; } else if (this.type == 426) { NPC.gravity = 0.1f; if ((double) this.velocity.Y > 3.0) this.velocity.Y = 3f; } else if (this.type == 541) NPC.gravity = 0.0f; float num1 = (float) (Main.maxTilesX / 4200); float num2 = (float) (((double) this.position.Y / 16.0 - (60.0 + 10.0 * (double) (num1 * num1))) / (Main.worldSurface / 6.0)); if ((double) num2 < 0.25) num2 = 0.25f; if ((double) num2 > 1.0) num2 = 1f; NPC.gravity *= num2; if (!this.wet) return; if (this.honeyWet) { NPC.gravity = 0.1f; maxFallSpeed = 4f; } else { NPC.gravity = 0.2f; maxFallSpeed = 7f; } } private void UpdateNPC_SoulDrainDebuff() { if (!this.soulDrain) return; int num = 1100; for (int index1 = 0; index1 < (int) byte.MaxValue; ++index1) { if (Main.player[index1].active && !Main.player[index1].dead && (double) (this.Center - Main.player[index1].position).Length() < (double) num && Main.player[index1].inventory[Main.player[index1].selectedItem].type == 3006 && Main.player[index1].itemAnimation > 0) { if (index1 == Main.myPlayer) ++Main.player[index1].soulDrain; if (Main.rand.Next(3) != 0) { Vector2 center = this.Center; center.X += (float) Main.rand.Next(-100, 100) * 0.05f; center.Y += (float) Main.rand.Next(-100, 100) * 0.05f; int index2 = Dust.NewDust(center + this.velocity, 1, 1, 235); Main.dust[index2].velocity *= 0.0f; Main.dust[index2].scale = (float) Main.rand.Next(70, 85) * 0.01f; Main.dust[index2].fadeIn = (float) (index1 + 1); } } } } public static Color buffColor(Color newColor, float R, float G, float B, float A) { newColor.R = (byte) ((double) newColor.R * (double) R); newColor.G = (byte) ((double) newColor.G * (double) G); newColor.B = (byte) ((double) newColor.B * (double) B); newColor.A = (byte) ((double) newColor.A * (double) A); return newColor; } public Color GetNPCColorTintedByBuffs(Color npcColor) { float R = 1f; float G1 = 1f; float B1 = 1f; float A = 1f; if (this.poisoned) { R *= 0.65f; B1 *= 0.75f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.venom) { G1 *= 0.45f; R *= 0.75f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.midas) { B1 *= 0.3f; R *= 0.85f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.betsysCurse) { R *= 0.8f; G1 *= 0.6f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.oiled) { R *= 0.7f; G1 *= 0.7f; B1 *= 0.7f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.stinky) { R *= 0.7f; B1 *= 0.55f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.drippingSlime) { R *= 0.8f; G1 *= 0.8f; npcColor = NPC.buffColor(npcColor, R, G1, B1, A); } if (this.drippingSparkleSlime) { float B2 = B1 * 0.85f; float G2 = G1 * 0.75f; npcColor = NPC.buffColor(npcColor, R, G2, B2, A); } if (this.ichor) npcColor = new Color((int) byte.MaxValue, (int) byte.MaxValue, 0, (int) byte.MaxValue); if (Main.player[Main.myPlayer].detectCreature && this.lifeMax > 1) { byte num1; byte num2; byte num3; if (this.friendly || this.catchItem > (short) 0 || this.damage == 0 && this.lifeMax == 5) { num1 = (byte) 50; num2 = byte.MaxValue; num3 = (byte) 50; } else { num1 = byte.MaxValue; num2 = (byte) 50; num3 = (byte) 50; } if ((int) npcColor.R < (int) num1) npcColor.R = num1; if ((int) npcColor.G < (int) num2) npcColor.G = num2; if ((int) npcColor.B < (int) num3) npcColor.B = num3; } return npcColor; } private void UpdateNPC_BuffApplyVFX() { this.position = this.position + this.netOffset; if (this.markedByScytheWhip && Main.rand.Next(3) == 0) ParticleOrchestrator.RequestParticleSpawn(true, ParticleOrchestraType.BlackLightningSmall, new ParticleOrchestraSettings() { MovementVector = Main.rand.NextVector2Circular(1f, 1f), PositionInWorld = Main.rand.NextVector2FromRectangle(this.Hitbox) }); if (this.poisoned && Main.rand.Next(30) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 46, Alpha: 120, Scale: 0.2f); dust.noGravity = true; dust.fadeIn = 1.9f; } if (this.venom && Main.rand.Next(10) == 0) { Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 171, Alpha: 100, Scale: 0.5f); dust.noGravity = true; dust.fadeIn = 1.5f; } if (this.shadowFlame && Main.rand.Next(5) < 4) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 27, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 180, Scale: 1.95f); dust.noGravity = true; dust.velocity *= 0.75f; dust.velocity.X *= 0.75f; --dust.velocity.Y; if (Main.rand.Next(4) == 0) { dust.noGravity = false; dust.scale *= 0.5f; } } if (this.onFire) { if (Main.rand.Next(4) < 3) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 6, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 3.5f); dust.noGravity = true; dust.velocity *= 1.8f; dust.velocity.Y -= 0.5f; if (Main.rand.Next(4) == 0) { dust.noGravity = false; dust.scale *= 0.5f; } } Lighting.AddLight((int) ((double) this.position.X / 16.0), (int) ((double) this.position.Y / 16.0 + 1.0), 1f, 0.3f, 0.1f); } if (this.daybreak) { if (Main.rand.Next(4) < 3) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 158, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 3.5f); dust.noGravity = true; dust.velocity *= 2.8f; dust.velocity.Y -= 0.5f; if (Main.rand.Next(4) == 0) { dust.noGravity = false; dust.scale *= 0.5f; } } Lighting.AddLight((int) ((double) this.position.X / 16.0), (int) ((double) this.position.Y / 16.0 + 1.0), 1f, 0.3f, 0.1f); } if (this.betsysCurse) { if (Main.rand.Next(4) < 3) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 55, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 3.5f); dust.noGravity = true; dust.velocity *= 2.8f; dust.velocity.Y -= 1.5f; dust.noGravity = false; dust.scale = 0.9f; dust.color = new Color(0, 0, 180, (int) byte.MaxValue); dust.velocity *= 0.2f; } Lighting.AddLight((int) ((double) this.position.X / 16.0), (int) ((double) this.position.Y / 16.0 + 1.0), 0.6f, 0.1f, 0.9f); } if (this.oiled && Main.rand.Next(3) != 0) { int Alpha = 175; Color newColor = new Color(0, 0, 0, 140); Vector2 position = this.position; position.X -= 2f; position.Y -= 2f; if (Main.rand.Next(2) == 0) { Dust dust = Dust.NewDustDirect(position, this.width + 4, this.height + 2, 4, Alpha: Alpha, newColor: newColor, Scale: 1.4f); if (Main.rand.Next(2) == 0) dust.alpha += 25; if (Main.rand.Next(2) == 0) dust.alpha += 25; dust.noLight = true; dust.velocity *= 0.2f; dust.velocity.Y += 0.2f; dust.velocity += this.velocity; } } if (this.dryadWard && (double) this.velocity.X != 0.0 && Main.rand.Next(4) == 0) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, (float) ((double) this.position.Y + (double) this.height - 2.0)), this.width + 4, 4, 163, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 1.5f); dust.noGravity = true; dust.noLight = true; dust.velocity *= 0.0f; } if (this.dryadBane && Main.rand.Next(4) == 0) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y), this.width + 4, this.height, 163, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 1.5f); dust.noGravity = true; dust.velocity *= new Vector2((float) ((double) Main.rand.NextFloat() * 4.0 - 2.0), 0.0f); dust.noLight = true; } if (this.loveStruck && Main.rand.Next(5) == 0) { Vector2 vector2 = new Vector2((float) Main.rand.Next(-10, 11), (float) Main.rand.Next(-10, 11)); vector2.Normalize(); vector2.X *= 0.66f; int index = Gore.NewGore(this.position + new Vector2((float) Main.rand.Next(this.width + 1), (float) Main.rand.Next(this.height + 1)), vector2 * (float) Main.rand.Next(3, 6) * 0.33f, 331, (float) Main.rand.Next(40, 121) * 0.01f); Main.gore[index].sticky = false; Main.gore[index].velocity *= 0.4f; Main.gore[index].velocity.Y -= 0.6f; } if (this.stinky && Main.rand.Next(5) == 0) { Vector2 vector2_1 = new Vector2((float) Main.rand.Next(-10, 11), (float) Main.rand.Next(-10, 11)); vector2_1.Normalize(); vector2_1.X *= 0.66f; vector2_1.Y = Math.Abs(vector2_1.Y); Vector2 vector2_2 = vector2_1 * (float) Main.rand.Next(3, 5) * 0.25f; Dust dust = Dust.NewDustDirect(this.position, this.width, this.height, 188, vector2_2.X, vector2_2.Y * 0.5f, 100, Scale: 1.5f); dust.velocity *= 0.1f; dust.velocity.Y -= 0.5f; } if (this.dripping && Main.rand.Next(4) != 0) { Vector2 position = this.position; position.X -= 2f; position.Y -= 2f; if (Main.rand.Next(2) == 0) { Dust dust = Dust.NewDustDirect(position, this.width + 4, this.height + 2, 211, Alpha: 50, Scale: 0.8f); if (Main.rand.Next(2) == 0) dust.alpha += 25; if (Main.rand.Next(2) == 0) dust.alpha += 25; dust.noLight = true; dust.velocity *= 0.2f; dust.velocity.Y += 0.2f; dust.velocity += this.velocity; } else { Dust dust = Dust.NewDustDirect(position, this.width + 8, this.height + 8, 211, Alpha: 50, Scale: 1.1f); if (Main.rand.Next(2) == 0) dust.alpha += 25; if (Main.rand.Next(2) == 0) dust.alpha += 25; dust.noLight = true; dust.noGravity = true; dust.velocity *= 0.2f; ++dust.velocity.Y; dust.velocity += this.velocity; } } if (this.drippingSlime && Main.rand.Next(4) != 0) { int Alpha = 175; Color newColor = new Color(0, 80, (int) byte.MaxValue, 100); Vector2 position = this.position; position.X -= 2f; position.Y -= 2f; if (Main.rand.Next(2) == 0) { Dust dust = Dust.NewDustDirect(position, this.width + 4, this.height + 2, 4, Alpha: Alpha, newColor: newColor, Scale: 1.4f); if (Main.rand.Next(2) == 0) dust.alpha += 25; if (Main.rand.Next(2) == 0) dust.alpha += 25; dust.noLight = true; dust.velocity *= 0.2f; dust.velocity.Y += 0.2f; dust.velocity += this.velocity; } } if (this.drippingSparkleSlime && Main.rand.Next(4) != 0) { int Alpha = 150; Vector2 position = this.position; position.X -= 2f; position.Y -= 2f; if (Main.rand.Next(2) == 0) { Dust dust = Dust.NewDustDirect(position, this.width + 4, this.height + 2, 243, Alpha: Alpha); if (Main.rand.Next(2) == 0) dust.alpha += 25; if (Main.rand.Next(2) == 0) dust.alpha += 25; dust.noLight = true; dust.velocity *= 0.2f; dust.velocity.Y += 0.2f; dust.velocity += this.velocity; } } if (this.onFrostBurn) { if (Main.rand.Next(4) < 3) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 135, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 3.5f); dust.noGravity = true; dust.velocity *= 1.8f; dust.velocity.Y -= 0.5f; if (Main.rand.Next(4) == 0) { dust.noGravity = false; dust.scale *= 0.5f; } } Lighting.AddLight((int) ((double) this.position.X / 16.0), (int) ((double) this.position.Y / 16.0 + 1.0), 0.1f, 0.6f, 1f); } if (this.onFire2) { if (Main.rand.Next(4) < 3) { Dust dust = Dust.NewDustDirect(new Vector2(this.position.X - 2f, this.position.Y - 2f), this.width + 4, this.height + 4, 75, this.velocity.X * 0.4f, this.velocity.Y * 0.4f, 100, Scale: 3.5f); dust.noGravity = true; dust.velocity *= 1.8f; dust.velocity.Y -= 0.5f; if (Main.rand.Next(4) == 0) { dust.noGravity = false; dust.scale *= 0.5f; } } Lighting.AddLight((int) ((double) this.position.X / 16.0), (int) ((double) this.position.Y / 16.0 + 1.0), 1f, 0.3f, 0.1f); } this.position = this.position - this.netOffset; } private void UpdateNPC_BuffApplyDOTs() { if (this.dontTakeDamage) return; int amount = this.lifeRegenExpectedLossPerSecond; if (this.poisoned) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 4; } if (this.onFire) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 8; } if (this.onFrostBurn) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 16; if (amount < 2) amount = 2; } if (this.onFire2) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 24; if (amount < 4) amount = 4; } if (this.venom) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 30; if (amount < 5) amount = 5; } if (this.shadowFlame) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 30; if (amount < 5) amount = 5; } if (this.oiled) { int num1 = (this.onFire ? 2 : 0) + (this.onFrostBurn ? 4 : 0) + (this.onFire2 ? 3 : 0) + (this.shadowFlame ? 8 : 0); if (num1 > 0) { int num2 = num1 * 4 + 12; this.lifeRegen -= num2; int num3 = num2 / 6; if (amount < num3) amount = num3; } } if (this.javelined) { if (this.lifeRegen > 0) this.lifeRegen = 0; int num4 = 0; int num5 = 1; for (int index = 0; index < 1000; ++index) { if (Main.projectile[index].active && Main.projectile[index].type == 598 && (double) Main.projectile[index].ai[0] == 1.0 && (double) Main.projectile[index].ai[1] == (double) this.whoAmI) ++num4; } this.lifeRegen -= num4 * 2 * 3; if (amount < num4 * 3 / num5) amount = num4 * 3 / num5; } if (this.daybreak) { if (this.lifeRegen > 0) this.lifeRegen = 0; int num6 = 0; int num7 = 4; for (int index = 0; index < 1000; ++index) { if (Main.projectile[index].active && Main.projectile[index].type == 636 && (double) Main.projectile[index].ai[0] == 1.0 && (double) Main.projectile[index].ai[1] == (double) this.whoAmI) ++num6; } if (num6 == 0) num6 = 1; this.lifeRegen -= num6 * 2 * 100; if (amount < num6 * 100 / num7) amount = num6 * 100 / num7; } if (this.celled) { if (this.lifeRegen > 0) this.lifeRegen = 0; int num = 0; for (int index = 0; index < 1000; ++index) { if (Main.projectile[index].active && Main.projectile[index].type == 614 && (double) Main.projectile[index].ai[0] == 1.0 && (double) Main.projectile[index].ai[1] == (double) this.whoAmI) ++num; } this.lifeRegen -= num * 2 * 20; if (amount < num * 20) amount = num * 20 / 2; } if (this.dryadBane) { int num8 = 4; float num9 = 1f; if (this.lifeRegen > 0) this.lifeRegen = 0; if (NPC.downedBoss1) num9 += 0.1f; if (NPC.downedBoss2) num9 += 0.1f; if (NPC.downedBoss3) num9 += 0.1f; if (NPC.downedQueenBee) num9 += 0.1f; if (Main.hardMode) num9 += 0.4f; if (NPC.downedMechBoss1) num9 += 0.15f; if (NPC.downedMechBoss2) num9 += 0.15f; if (NPC.downedMechBoss3) num9 += 0.15f; if (NPC.downedPlantBoss) num9 += 0.15f; if (NPC.downedGolemBoss) num9 += 0.15f; if (NPC.downedAncientCultist) num9 += 0.15f; if (Main.expertMode) num9 *= Main.GameModeInfo.TownNPCDamageMultiplier; int num10 = (int) ((double) num8 * (double) num9); this.lifeRegen -= 2 * num10; if (amount < num10) amount = num10 / 3; } if (this.soulDrain && this.realLife == -1) { if (this.lifeRegen > 0) this.lifeRegen = 0; this.lifeRegen -= 50; if (amount < 5) amount = 5; } if (this.lifeRegen <= -240 && amount < 2) amount = 2; this.lifeRegenCount += this.lifeRegen; while (this.lifeRegenCount >= 120) { this.lifeRegenCount -= 120; if (!this.immortal) { if (this.life < this.lifeMax) ++this.life; if (this.life > this.lifeMax) this.life = this.lifeMax; } } if (amount > 0) { while (this.lifeRegenCount <= -120 * amount) { this.lifeRegenCount += 120 * amount; int number = this.whoAmI; if (this.realLife >= 0) number = this.realLife; if (!Main.npc[number].immortal) Main.npc[number].life -= amount; CombatText.NewText(new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height), CombatText.LifeRegenNegative, amount, dot: true); if (Main.npc[number].life <= 0 && !Main.npc[number].immortal) { Main.npc[number].life = 1; if (Main.netMode != 1) { Main.npc[number].StrikeNPCNoInteraction(9999, 0.0f, 0); if (Main.netMode == 2) NetMessage.SendData(28, number: number, number2: 9999f); } } } } else { while (this.lifeRegenCount <= -120) { this.lifeRegenCount += 120; int number = this.whoAmI; if (this.realLife >= 0) number = this.realLife; if (!Main.npc[number].immortal) --Main.npc[number].life; CombatText.NewText(new Microsoft.Xna.Framework.Rectangle((int) this.position.X, (int) this.position.Y, this.width, this.height), CombatText.LifeRegenNegative, 1, dot: true); if (Main.npc[number].life <= 0 && !Main.npc[number].immortal) { Main.npc[number].life = 1; if (Main.netMode != 1) { Main.npc[number].StrikeNPCNoInteraction(9999, 0.0f, 0); if (Main.netMode == 2) NetMessage.SendData(28, number: number, number2: 9999f); } } } } } private void UpdateNPC_BuffClearExpiredBuffs() { if (Main.netMode == 1) return; for (int buffIndex = 0; buffIndex < 5; ++buffIndex) { if (this.buffType[buffIndex] > 0 && this.buffTime[buffIndex] <= 0) { this.DelBuff(buffIndex); if (Main.netMode == 2) NetMessage.SendData(54, number: this.whoAmI); } } } private void UpdateNPC_BloodMoonTransformations() { if (Main.netMode == 1 || !Main.bloodMoon) return; bool flag = false; if ((double) this.value == 0.0) flag = true; if (this.type == 46 || this.type == 303 || this.type == 337 || this.type == 443 || this.type == 540) { if (WorldGen.crimson) this.Transform(464); else this.Transform(47); } else if (this.type == 55 || this.type == 230 || this.type == 592 || this.type == 593) { if (WorldGen.crimson) this.Transform(465); else this.Transform(57); } else if (this.type == 148 || this.type == 149) { if (WorldGen.crimson) this.Transform(470); else this.Transform(168); } if (!flag) return; this.value = 0.0f; } public void UpdateNPC_BuffSetFlags(bool lowerBuffTime = true) { for (int index = 0; index < 5; ++index) { if (this.buffType[index] > 0 && this.buffTime[index] > 0) { if (lowerBuffTime) --this.buffTime[index]; if (this.buffType[index] == 20) this.poisoned = true; if (this.buffType[index] == 70) this.venom = true; if (this.buffType[index] == 24) this.onFire = true; if (this.buffType[index] == 72) this.midas = true; if (this.buffType[index] == 69) this.ichor = true; if (this.buffType[index] == 31) this.confused = true; if (this.buffType[index] == 39) this.onFire2 = true; if (this.buffType[index] == 44) this.onFrostBurn = true; if (this.buffType[index] == 103) this.dripping = true; if (this.buffType[index] == 137) this.drippingSlime = true; if (this.buffType[index] == 320) this.drippingSparkleSlime = true; if (this.buffType[index] == 119) this.loveStruck = true; if (this.buffType[index] == 120) this.stinky = true; if (this.buffType[index] == 151) this.soulDrain = true; if (this.buffType[index] == 153) this.shadowFlame = true; if (this.buffType[index] == 165) this.dryadWard = true; if (this.buffType[index] == 169) this.javelined = true; if (this.buffType[index] == 183) this.celled = true; if (this.buffType[index] == 186) this.dryadBane = true; if (this.buffType[index] == 189) this.daybreak = true; if (this.buffType[index] == 203) this.betsysCurse = true; if (this.buffType[index] == 204) this.oiled = true; if (this.buffType[index] == 310) this.markedByScytheWhip = true; if (this.buffType[index] == 313) this.markedByFireWhip = true; if (this.buffType[index] == 309) this.markedBySwordWhip = true; if (this.buffType[index] == 315) this.markedByThornWhip = true; if (this.buffType[index] == 307) this.markedByBlandWhip = true; if (this.buffType[index] == 319) this.markedByMaceWhip = true; if (this.buffType[index] == 316) this.markedByRainbowWhip = true; } } } private void UpdateNPC_BuffFlagsReset() { this.lifeRegen = 0; this.soulDrain = false; this.poisoned = false; this.venom = false; this.shadowFlame = false; this.onFire = false; this.midas = false; this.ichor = false; this.onFrostBurn = false; this.onFire2 = false; this.confused = false; this.loveStruck = false; this.dryadWard = false; this.stinky = false; this.dripping = false; this.drippingSlime = false; this.drippingSparkleSlime = false; this.daybreak = false; this.javelined = false; this.celled = false; this.dryadBane = false; this.betsysCurse = false; this.oiled = false; this.markedByScytheWhip = false; this.markedByThornWhip = false; this.markedByFireWhip = false; this.markedByRainbowWhip = false; this.markedByBlandWhip = false; this.markedBySwordWhip = false; this.markedByMaceWhip = false; this.lifeRegenExpectedLossPerSecond = -1; } private void UpdateNPC_TeleportVisuals() { if ((double) this.teleportTime <= 0.0) return; if (this.teleportStyle == 0) { if ((double) Main.rand.Next(100) <= 100.0 * (double) this.teleportTime * 2.0) { int index = Dust.NewDust(new Vector2((float) this.getRect().X, (float) this.getRect().Y), this.getRect().Width, this.getRect().Height, 159); Main.dust[index].scale = this.teleportTime * 1.5f; Main.dust[index].noGravity = true; Main.dust[index].velocity *= 1.1f; } } else if (this.teleportStyle == 4) { this.teleportTime -= 0.02f; if ((double) Main.rand.Next(100) <= 100.0 * (double) this.teleportTime) { Dust dust = Main.dust[Dust.NewDust(this.position, this.width, this.height, 263)]; dust.color = PortalHelper.GetPortalColor(this.lastPortalColorIndex); dust.noLight = true; dust.noGravity = true; dust.scale = 1.2f; dust.fadeIn = 0.4f; } } this.teleportTime -= 0.005f; } private void UpdateNPC_CritterSounds() { if (Main.netMode == 2) return; if (this.type == 611 && !Main.dayTime && Main.rand.Next(700) == 0) SoundEngine.PlaySound(46, (int) this.position.X, (int) this.position.Y); if (this.type >= 602 && this.type <= 603 && Main.dayTime && Main.rand.Next(1200) == 0) SoundEngine.PlaySound(44, (int) this.position.X, (int) this.position.Y); if (this.type >= 362 && this.type <= 365) { if (!Main.dayTime || Main.rand.Next(200) != 0) return; SoundEngine.PlaySound(30, (int) this.position.X, (int) this.position.Y); } else if (this.type == 361 || this.type == 445) { if ((double) Math.Abs(this.velocity.X) >= 0.5 || Main.dayTime && (double) this.position.Y <= Main.worldSurface * 16.0 || Main.rand.Next(200) != 0) return; SoundEngine.PlaySound(31, (int) this.position.X, (int) this.position.Y); } else if (this.type == 74 || this.type == 297 || this.type == 298 || this.type == 442) { if (!Main.dayTime || Main.time >= 18000.0 || Main.rand.Next(400) != 0) return; if (this.type == 74) { if (Main.rand.Next(3) != 0) SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 14); else SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 18); } if (this.type == 297) SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 16); if (this.type == 298) { if (Main.rand.Next(3) != 0) SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 17); else SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 19); } if (this.type != 442) return; switch (Main.rand.Next(5)) { case 0: SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 16); break; case 1: SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 17); break; case 2: SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 19); break; case 3: SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 14); break; default: SoundEngine.PlaySound(32, (int) this.position.X, (int) this.position.Y, 18); break; } } else { if (this.type != 300 && this.type != 447 && this.type != 610 || Main.rand.Next(1800) != 0) return; SoundEngine.PlaySound(33, (int) this.position.X, (int) this.position.Y); } } private void UpdateNPC_CastLights() { if (this.type >= 442 && this.type <= 448 || this.type == 539 || this.type == 592 || this.type == 593 || this.type == 601 || this.type == 605 || this.type == 627) { this.position = this.position + this.netOffset; Color color = Lighting.GetColor((int) this.Center.X / 16, (int) this.Center.Y / 16); if (color.R > (byte) 20 || color.B > (byte) 20 || color.G > (byte) 20) { int num1 = (int) color.R; if ((int) color.G > num1) num1 = (int) color.G; if ((int) color.B > num1) num1 = (int) color.B; int num2 = num1 / 30; if (Main.rand.Next(300) < num2) { int index = Dust.NewDust(this.position, this.width, this.height, 43, Alpha: 254, newColor: new Color((int) byte.MaxValue, (int) byte.MaxValue, 0), Scale: 0.5f); Main.dust[index].velocity *= 0.0f; } } this.position = this.position - this.netOffset; } if (this.type >= 254 && this.type <= 261 || this.type == 160 || this.type == 634 || this.type == 635) { float num3 = (float) Main.rand.Next(28, 42) * 0.005f + (float) (270 - (int) Main.mouseTextColor) / 500f; float num4 = 0.1f; float num5 = (float) (0.300000011920929 + (double) num3 / 2.0); float num6 = 0.6f + num3; float num7 = 0.35f; if (this.type == 634) num7 = 0.65f; Lighting.AddLight((int) this.Center.X / 16, (int) this.Center.Y / 16, num4 * num7, num5 * num7, num6 * num7); } if (this.type == 209) { float num8 = (float) Main.rand.Next(28, 42) * 0.005f + (float) (270 - (int) Main.mouseTextColor) / 500f; float num9 = 0.1f; float num10 = (float) (0.300000011920929 + (double) num8 / 2.0); float num11 = (float) (0.400000005960464 + (double) num8 / 2.0); float num12 = 0.35f; Lighting.AddLight((int) this.Center.X / 16, (int) this.Center.Y / 16, num9 * num12, num10 * num12, num11 * num12); if ((double) this.ai[0] == 12.0) Lighting.AddLight(this.Top, 0.3f, 0.1f, 0.1f); } if (this.type != 44) return; Lighting.AddLight((int) ((double) this.position.X + (double) (this.width / 2)) / 16, (int) ((double) this.position.Y + 4.0) / 16, 0.9f, 0.75f, 0.5f); } private void GetHurtByOtherNPCs(bool[] acceptableNPCIDs) { if (this.dontTakeDamageFromHostiles) return; int specialHitSetter = 1; float damageMultiplier = 1f; if (this.immune[(int) byte.MaxValue] != 0) return; Microsoft.Xna.Framework.Rectangle hitbox1 = this.Hitbox; for (int index = 0; index < 200; ++index) { NPC thatNPC = Main.npc[index]; if (acceptableNPCIDs[thatNPC.type] && thatNPC.active && !thatNPC.friendly && thatNPC.damage > 0) { Microsoft.Xna.Framework.Rectangle hitbox2 = thatNPC.Hitbox; NPC.GetMeleeCollisionData(hitbox1, index, ref specialHitSetter, ref damageMultiplier, ref hitbox2); if (hitbox1.Intersects(hitbox2) && (this.type != 453 || !NPCID.Sets.Skeletons[thatNPC.type]) && thatNPC.type != 624) this.BeHurtByOtherNPC(index, thatNPC); } } } private void BeHurtByOtherNPC(int npcIndex, NPC thatNPC) { int num1 = 30; if (this.type == 548) num1 = 20; int Damage1 = Main.DamageVar((float) thatNPC.damage); int num2 = 6; int hitDirection1 = (double) thatNPC.Center.X > (double) this.Center.X ? -1 : 1; double num3 = this.StrikeNPCNoInteraction(Damage1, (float) num2, hitDirection1); if (Main.netMode != 0) NetMessage.SendData(28, number: this.whoAmI, number2: ((float) Damage1), number3: ((float) num2), number4: ((float) hitDirection1)); this.netUpdate = true; this.immune[(int) byte.MaxValue] = num1; if (this.dryadWard) { int Damage2 = (int) num3 / 3; int num4 = 6; hitDirection1 *= -1; thatNPC.StrikeNPCNoInteraction(Damage2, (float) num4, hitDirection1); if (Main.netMode != 0) NetMessage.SendData(28, number: npcIndex, number2: ((float) Damage2), number3: ((float) num4), number4: ((float) hitDirection1)); thatNPC.netUpdate = true; thatNPC.immune[(int) byte.MaxValue] = num1; } if (!NPCID.Sets.HurtingBees[thatNPC.type]) return; int damage = this.damage; int num5 = 6; int hitDirection2 = hitDirection1 * -1; thatNPC.StrikeNPCNoInteraction(damage, (float) num5, hitDirection2); if (Main.netMode != 0) NetMessage.SendData(28, number: npcIndex, number2: ((float) damage), number3: ((float) num5), number4: ((float) hitDirection2)); thatNPC.netUpdate = true; thatNPC.immune[(int) byte.MaxValue] = num1; } private void CheckLifeRegen() { if (this.life >= this.lifeMax) return; ++this.friendlyRegen; if (this.dryadWard) this.friendlyRegen += 10; if (this.friendlyRegen <= 180) return; this.friendlyRegen = 0; ++this.life; this.netUpdate = true; } public void GetImmuneTime(int fromWho, int time) { if (fromWho == -1) { for (int index = 0; index < this.immune.Length; ++index) this.immune[index] = time; } else { if (fromWho < 0 || fromWho >= this.immune.Length) return; this.immune[fromWho] = time; } } private void UpdateCollision() { this.Collision_WalkDownSlopes(); this.Collision_WaterCollision(this.Collision_LavaCollision()); if (!this.wet) { this.lavaWet = false; this.honeyWet = false; } if (this.wetCount > (byte) 0) --this.wetCount; bool fall = this.Collision_DecideFallThroughPlatforms(); this.oldVelocity = this.velocity; this.collideX = false; this.collideY = false; this.FishTransformationDuringRain(); Vector2 cPosition; int cWidth; int cHeight; this.GetTileCollisionParameters(out cPosition, out cWidth, out cHeight); Vector2 velocity = this.velocity; this.ApplyTileCollision(fall, cPosition, cWidth, cHeight); if (this.wet) { if (this.honeyWet) this.Collision_MoveWhileWet(velocity, this.honeyMovementSpeed); else if (this.lavaWet) this.Collision_MoveWhileWet(velocity, this.lavaMovementSpeed); else this.Collision_MoveWhileWet(velocity, this.waterMovementSpeed); } else this.Collision_MoveWhileDry(); if (this.aiStyle == 67) { this.Collision_MoveSnailOnSlopes(); } else { if (this.type == 72 || this.type == 247 || this.type == 248 || this.type >= 542 && this.type <= 545 || NPCID.Sets.BelongsToInvasionOldOnesArmy[this.type] && this.noGravity) return; this.Collision_MoveSlopesAndStairFall(fall); if (!this.townNPC) return; Collision.StepConveyorBelt((Entity) this, 1f); } } private void Collision_MoveWhileDry() { if (Collision.up) this.velocity.Y = 0.01f; if ((double) this.oldVelocity.X != (double) this.velocity.X) this.collideX = true; if ((double) this.oldVelocity.Y != (double) this.velocity.Y) this.collideY = true; this.oldPosition = this.position; this.oldDirection = this.direction; this.position = this.position + this.velocity; } private void ApplyTileCollision(bool fall, Vector2 cPosition, int cWidth, int cHeight) { if (this.type == 72) this.Collision_MoveBlazingWheel(); else if (this.type >= 542 && this.type <= 545) this.Collision_MoveSandshark(fall, cPosition, cWidth, cHeight); else if (this.type == 405 || this.type == 406) this.Collision_MoveStardustCell(fall, cPosition, cWidth, cHeight); else if (this.type == 417) this.Collision_MoveSolarSroller(fall, cPosition, cWidth, cHeight); else this.Collision_MoveNormal(fall, cPosition, cWidth, cHeight); } private void Collision_MoveSlopesAndStairFall(bool fall) { if (fall) this.stairFall = true; if (this.aiStyle == 7) { int x = (int) this.Center.X / 16; int y = (int) this.position.Y / 16; if (WorldGen.InWorld(x, y)) { int num = 16; bool flag = false; if (Main.tile[x, y] != null && Main.tile[x, y].active() && Main.tileSolid[(int) Main.tile[x, y].type]) flag = true; if (!this.townNPC) flag = false; if (!Main.dayTime || Main.eclipse) flag = true; else if (this.homeTileY - (int) ((double) this.position.Y + (double) this.height) / 16 > num) flag = true; if (flag) this.stairFall = ((double) this.position.Y + (double) this.height - 8.0) / 16.0 < (double) this.homeTileY; } } Vector2 cPosition; int cWidth; int cHeight; this.GetTileCollisionParameters(out cPosition, out cWidth, out cHeight); Vector2 vector2 = this.position - cPosition; Vector4 vector4 = Collision.SlopeCollision(cPosition, this.velocity, cWidth, cHeight, NPC.gravity, this.stairFall); if (Collision.stairFall) this.stairFall = true; else if (!fall) this.stairFall = false; if (Collision.stair && (double) Math.Abs(vector4.Y - this.position.Y) > 8.0) { this.gfxOffY -= vector4.Y - this.position.Y; this.stepSpeed = 2f; } this.position.X = vector4.X; this.position.Y = vector4.Y; this.velocity.X = vector4.Z; this.velocity.Y = vector4.W; this.position = this.position + vector2; } private void Collision_MoveSnailOnSlopes() { Vector4 vector4 = Collision.SlopeCollision(this.position, this.velocity, this.width, this.height, NPC.gravity); if ((double) this.position.X != (double) vector4.X || (double) this.position.Y != (double) vector4.Y) { if ((double) this.ai[2] == 0.0 && (double) this.velocity.Y > 0.0 && (this.direction < 0 && (double) this.rotation == 1.57000005245209 && this.spriteDirection == 1 || this.direction > 0 && (double) this.rotation == 4.71000003814697 && this.spriteDirection == -1)) this.direction *= -this.direction; this.ai[2] = 2f; this.directionY = 1; this.rotation = 0.0f; } this.position.X = vector4.X; this.position.Y = vector4.Y; this.velocity.X = vector4.Z; this.velocity.Y = vector4.W; } private void Collision_MoveNormal(bool fall, Vector2 cPosition, int cWidth, int cHeight) => this.velocity = Collision.TileCollision(cPosition, this.velocity, cWidth, cHeight, fall, fall); private void Collision_MoveSandshark(bool fall, Vector2 cPosition, int cWidth, int cHeight) => this.velocity = Collision.AdvancedTileCollision(TileID.Sets.ForAdvancedCollision.ForSandshark, cPosition, this.velocity, cWidth, cHeight, fall, fall); private void Collision_MoveSolarSroller(bool fall, Vector2 cPosition, int cWidth, int cHeight) { this.velocity = Collision.TileCollision(cPosition, this.velocity, cWidth, cHeight, fall, fall); if ((double) this.ai[0] != 6.0 || !(this.velocity != this.oldVelocity)) return; --this.ai[2]; this.ai[3] = 1f; if ((double) this.ai[2] <= 0.0) return; if ((double) this.velocity.X != 0.0 && (double) this.velocity.X != (double) this.oldVelocity.X) { this.velocity.X = (float) (-(double) this.oldVelocity.X * 0.899999976158142); this.direction *= -1; } if ((double) this.velocity.Y == 0.0 || (double) this.velocity.Y == (double) this.oldVelocity.Y) return; this.velocity.Y = (float) (-(double) this.oldVelocity.Y * 0.899999976158142); } private void Collision_MoveStardustCell(bool fall, Vector2 cPosition, int cWidth, int cHeight) { this.velocity = Collision.TileCollision(cPosition, this.velocity, cWidth, cHeight, fall, fall); if (!(this.velocity != this.oldVelocity)) return; if ((double) this.velocity.X != 0.0 && (double) this.velocity.X != (double) this.oldVelocity.X) this.velocity.X = (float) (-(double) this.oldVelocity.X * 0.800000011920929); if ((double) this.velocity.Y == 0.0 || (double) this.velocity.Y == (double) this.oldVelocity.Y) return; this.velocity.Y = (float) (-(double) this.oldVelocity.Y * 0.800000011920929); } private void Collision_MoveBlazingWheel() { Vector2 Position = new Vector2(this.position.X + (float) (this.width / 2), this.position.Y + (float) (this.height / 2)); int Width = 12; int Height = 12; Position.X -= (float) (Width / 2); Position.Y -= (float) (Height / 2); this.velocity = Collision.noSlopeCollision(Position, this.velocity, Width, Height, true, true); } private void Collision_MoveWhileWet(Vector2 oldDryVelocity, float Slowdown = 0.5f) { if (Collision.up) this.velocity.Y = 0.01f; Vector2 vector2 = this.velocity * Slowdown; if ((double) this.velocity.X != (double) oldDryVelocity.X) { vector2.X = this.velocity.X; this.collideX = true; } if ((double) this.velocity.Y != (double) oldDryVelocity.Y) { vector2.Y = this.velocity.Y; this.collideY = true; } this.oldPosition = this.position; this.oldDirection = this.direction; this.position = this.position + vector2; } public void GetTileCollisionParameters(out Vector2 cPosition, out int cWidth, out int cHeight) { cPosition = this.position; cWidth = this.width; cHeight = this.height; if (this.type == 594) { int num = (int) (44.0 + 20.0 * (double) this.ai[1]); cPosition.Y += (float) num; cHeight += num; cPosition.X += (float) (cWidth / 2); cWidth = (int) (6.0 + 26.0 * (double) this.ai[1]); cPosition.X -= (float) (cWidth / 2); } if (this.type == 243) cHeight = 90; if (this.type == 290) cHeight = 40; if (this.type == 351) cHeight = 40; if (this.type == 482) cHeight = 40; if (this.type == 351 || this.type == 343 || this.type == 348 || this.type == 349) cHeight = 40; if (this.type == 391) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 390 && (double) Main.npc[index].ai[0] == (double) this.whoAmI) { cHeight = 62; break; } } } if (this.type == 415) { for (int index = 0; index < 200; ++index) { if (Main.npc[index].active && Main.npc[index].type == 416 && (double) Main.npc[index].ai[0] == (double) this.whoAmI) { cHeight = 62; break; } } } if (this.type == 576 || this.type == 577) { cPosition.X += 32f; cWidth -= 64; } if (cHeight == this.height) return; cPosition.Y += (float) (this.height - cHeight); } private void FishTransformationDuringRain() { if (Main.netMode == 1) return; if (this.type == 230 && this.wet) { int direction = this.direction; Vector2 velocity = this.velocity; this.Transform(55); this.direction = direction; this.velocity = velocity; this.wet = true; if ((double) this.velocity.Y >= 0.0) return; this.velocity.Y = 0.0f; } else if (this.type == 55 && !this.wet && Main.raining) { int direction = this.direction; Vector2 velocity = this.velocity; this.Transform(230); this.direction = direction; this.velocity = velocity; this.homeTileX = (int) ((double) this.position.X / 16.0) + 10 * this.direction; } else if (this.type == 593 && this.wet) { int direction = this.direction; Vector2 velocity = this.velocity; this.Transform(592); this.direction = direction; this.velocity = velocity; this.wet = true; if ((double) this.velocity.Y >= 0.0) return; this.velocity.Y = 0.0f; } else { if (this.type != 592 || this.wet || !Main.raining) return; int direction = this.direction; Vector2 velocity = this.velocity; this.Transform(593); this.direction = direction; this.velocity = velocity; this.homeTileX = (int) ((double) this.position.X / 16.0) + 10 * this.direction; } } private bool Collision_DecideFallThroughPlatforms() { bool flag1 = false; if (this.type == 2 || this.type == -43 || this.type == 190 || this.type == 191 || this.type == 192 || this.type == 193 || this.type == 194 || this.type == 317 || this.type == 318 || this.type == 133) flag1 = true; if (this.aiStyle == 10) flag1 = true; if (this.aiStyle == 5) flag1 = true; if (this.aiStyle == 40) flag1 = true; if (this.aiStyle == 44) flag1 = true; if (this.type == 467) flag1 = true; if (this.type == 477) flag1 = true; if (this.aiStyle == 14) flag1 = true; if (this.type == 173) flag1 = true; if (this.type == 469 && (double) this.ai[2] == 1.0) flag1 = true; if (this.aiStyle == 3 && this.directionY == 1) flag1 = true; if (this.type == 210 || this.type == 211) flag1 = true; if (this.type == 50 && this.target >= 0 && (double) Main.player[this.target].position.Y > (double) this.position.Y + (double) this.height) flag1 = true; if (this.type == 657 && this.target >= 0 && (double) Main.player[this.target].position.Y > (double) this.Bottom.Y) flag1 = true; if (this.type == 247 || this.type == 248) flag1 = true; if (this.type == 245 && this.target >= 0 && (double) Main.player[this.target].position.Y > (double) this.position.Y + (double) this.height) flag1 = true; if (this.type >= 542 && this.type <= 545) flag1 = true; if (this.aiStyle == 107 && this.directionY == 1) flag1 = true; if (this.type == 418) flag1 = true; if (this.aiStyle == 87 && (double) Main.player[this.target].position.Y > (double) this.position.Y + (double) this.height) flag1 = true; if (this.type == 405 || this.type == 406) flag1 = true; if (this.type == 490) flag1 = true; if (this.type == 301) flag1 = true; if (this.aiStyle == 7) { int num = 16; bool flag2 = false; if (this.townNPC && (!Main.dayTime || Main.invasionType > 0 || Main.eclipse)) flag2 = true; else if (this.homeTileY - (int) ((double) this.position.Y + (double) this.height) / 16 > num) flag1 = true; if (flag2 && ((double) this.position.Y + (double) this.height - 8.0) / 16.0 < (double) (this.homeTileY - 1)) flag1 = true; } return flag1; } private bool Collision_WaterCollision(bool lava) { bool flag; if (this.type == 72 || this.aiStyle == 21 || this.aiStyle == 67 || this.type == 376 || this.type == 579 || this.type == 541) { flag = false; this.wetCount = (byte) 0; lava = false; } else { flag = Collision.WetCollision(this.position, this.width, this.height); if (Collision.honey) this.honeyWet = true; } if (this.aiStyle == 116) this.wetCount = (byte) 10; if (flag) { if (this.onFire && !this.lavaWet && Main.netMode != 1) { for (int buffIndex = 0; buffIndex < 5; ++buffIndex) { if (this.buffType[buffIndex] == 24) this.DelBuff(buffIndex); } } if (!this.wet && this.wetCount == (byte) 0) { this.wetCount = (byte) 10; if (!lava) { if (this.honeyWet) { for (int index1 = 0; index1 < 10; ++index1) { int index2 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, 152); --Main.dust[index2].velocity.Y; Main.dust[index2].velocity.X *= 2.5f; Main.dust[index2].scale = 1.3f; Main.dust[index2].alpha = 100; Main.dust[index2].noGravity = true; } if (this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 147 && this.type != 59 && this.type != 300 && this.aiStyle != 39 && !this.noGravity) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y); } else if (this.type != 617 && this.type != 616 && this.type != 625) { for (int index3 = 0; index3 < 30; ++index3) { int index4 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, Dust.dustWater()); Main.dust[index4].velocity.Y -= 4f; Main.dust[index4].velocity.X *= 2.5f; Main.dust[index4].scale *= 0.8f; Main.dust[index4].alpha = 100; Main.dust[index4].noGravity = true; } if (this.type != 376 && this.type != 579 && this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 147 && this.type != 59 && this.type != 300 && this.aiStyle != 39 && this.aiStyle != 68 && this.type != 362 && this.type != 364 && this.type != 361 && this.type != 445 && !this.noGravity || this.type == 615) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y, 0); } } else { for (int index5 = 0; index5 < 10; ++index5) { int index6 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, 35); Main.dust[index6].velocity.Y -= 1.5f; Main.dust[index6].velocity.X *= 2.5f; Main.dust[index6].scale = 1.3f; Main.dust[index6].alpha = 100; Main.dust[index6].noGravity = true; } if (this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 147 && this.type != 59 && this.type != 300 && this.aiStyle != 39 && !this.noGravity) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y); } } this.wet = true; } else if (this.wet) { this.velocity.X *= 0.5f; this.wet = false; if (this.type == 620 && (double) this.GetTargetData().Center.Y < (double) this.Center.Y) this.velocity.Y -= 8f; if (this.wetCount == (byte) 0) { this.wetCount = (byte) 10; if (!this.lavaWet) { if (this.honeyWet) { for (int index7 = 0; index7 < 10; ++index7) { int index8 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, 152); --Main.dust[index8].velocity.Y; Main.dust[index8].velocity.X *= 2.5f; Main.dust[index8].scale = 1.3f; Main.dust[index8].alpha = 100; Main.dust[index8].noGravity = true; } if (this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 147 && this.type != 300 && this.type != 59 && this.aiStyle != 39 && !this.noGravity) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y); } else if (this.type != 617 && this.type != 616 && this.type != 625) { for (int index9 = 0; index9 < 30; ++index9) { int index10 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, Dust.dustWater()); Main.dust[index10].velocity.Y -= 4f; Main.dust[index10].velocity.X *= 2.5f; Main.dust[index10].scale *= 0.8f; Main.dust[index10].alpha = 100; Main.dust[index10].noGravity = true; } if (this.type != 376 && this.type != 579 && this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 59 && this.type != 300 && this.aiStyle != 39 && this.aiStyle != 68 && this.type != 362 && this.type != 364 && this.type != 361 && this.type != 445 && !this.noGravity || this.type == 615) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y, 0); } } else { for (int index11 = 0; index11 < 10; ++index11) { int index12 = Dust.NewDust(new Vector2(this.position.X - 6f, (float) ((double) this.position.Y + (double) (this.height / 2) - 8.0)), this.width + 12, 24, 35); Main.dust[index12].velocity.Y -= 1.5f; Main.dust[index12].velocity.X *= 2.5f; Main.dust[index12].scale = 1.3f; Main.dust[index12].alpha = 100; Main.dust[index12].noGravity = true; } if (this.aiStyle != 1 && this.type != 1 && this.type != 16 && this.type != 59 && this.type != 300 && this.aiStyle != 39 && !this.noGravity) SoundEngine.PlaySound(19, (int) this.position.X, (int) this.position.Y); } } } return lava; } private bool Collision_LavaCollision() { int num = Collision.LavaCollision(this.position, this.width, this.height) ? 1 : 0; if (num == 0) return num != 0; this.lavaWet = true; if (this.lavaImmune) return num != 0; if (this.dontTakeDamage) return num != 0; if (Main.netMode == 1) return num != 0; if (this.immune[(int) byte.MaxValue] != 0) return num != 0; this.AddBuff(24, 420); this.immune[(int) byte.MaxValue] = 30; this.StrikeNPCNoInteraction(50, 0.0f, 0); if (Main.netMode != 2) return num != 0; if (Main.netMode == 0) return num != 0; NetMessage.SendData(28, number: this.whoAmI, number2: 50f); return num != 0; } private void Collision_WalkDownSlopes() { Vector2 velocity = this.velocity; Vector4 vector4 = Collision.WalkDownSlope(this.position, this.velocity, this.width, this.height, NPC.gravity); this.position.X = vector4.X; this.position.Y = vector4.Y; this.velocity.X = vector4.Z; this.velocity.Y = vector4.W; } public static void setFireFlyChance() { if (Main.rand == null) Main.rand = new UnifiedRandom((int) DateTime.Now.Ticks); if (WorldGen.genRand.Next(9) == 0) { NPC.fireFlyChance = Main.rand.Next(5, 10); NPC.fireFlyFriendly = Main.rand.Next(1, 4); NPC.fireFlyMultiple = Main.rand.Next(3, 8); } else if (WorldGen.genRand.Next(3) == 0) { NPC.fireFlyChance = 999999; NPC.fireFlyFriendly = 999999; NPC.fireFlyMultiple = 999999; } else { NPC.fireFlyChance = Main.rand.Next(10, 60); NPC.fireFlyFriendly = Main.rand.Next(2, 15); NPC.fireFlyMultiple = Main.rand.Next(6, 30); } NPC.butterflyChance = Main.rand.Next(1, 25); if (WorldGen.genRand.Next(4) != 0) return; NPC.butterflyChance = 999999; } public Color GetBestiaryEntryColor() => Color.White; public Color GetAlpha(Color newColor) { if (this.IsABestiaryIconDummy) newColor = Color.White; float num1 = (float) ((int) byte.MaxValue - this.alpha) / (float) byte.MaxValue; int r1 = (int) ((double) newColor.R * (double) num1); int g1 = (int) ((double) newColor.G * (double) num1); int b1 = (int) ((double) newColor.B * (double) num1); int a = (int) newColor.A - this.alpha; if (this.type == 402) return new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue); if (this.type == 484) return new Color(250, 250, 250, 200); if (this.type >= 542 && this.type <= 545 && r1 + g1 + b1 > 10 && r1 + g1 + b1 >= 60) { r1 *= 2; g1 *= 2; b1 *= 2; if (r1 > (int) byte.MaxValue) r1 = (int) byte.MaxValue; if (g1 > (int) byte.MaxValue) g1 = (int) byte.MaxValue; if (b1 > (int) byte.MaxValue) b1 = (int) byte.MaxValue; } if (this.type == 662) { Color color = Color.Lerp(Color.White, Color.Cyan, 0.5f); color.A /= (byte) 4; return color * this.Opacity; } if (this.type >= 454 && this.type <= 459 || this.type == 521) { newColor = Color.Lerp(newColor, Color.White, 0.4f); newColor.A = (byte) 150; newColor *= (float) a / (float) byte.MaxValue; return newColor; } if (this.type == 636) { newColor = Color.Lerp(newColor, Color.White, 0.25f); return newColor * this.Opacity; } if (this.type == 440) { byte num2 = 180; if (Main.expertMode) num2 = (byte) 210; byte num3 = (byte) ((double) num2 * (double) num1); return new Color((int) num3, (int) num3, (int) num3, (int) num3); } if (this.type == 583 || this.type == 584 || this.type == 585) { newColor = Color.Lerp(newColor, Color.White, 0.5f); return newColor; } if (this.type == 516) return new Color(this.alpha, this.alpha, this.alpha, this.alpha); if (this.type == 522) return new Color((int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha); if (this.type == 523) return new Color((int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha, (int) byte.MaxValue - this.alpha); if (this.type == 395 || this.type == 519) { newColor = Color.Lerp(newColor, Color.White, 0.4f); return newColor; } if (this.type == 370 && (double) this.ai[0] != -1.0 && (double) this.ai[0] < 9.0) { float num4 = MathHelper.Lerp(num1, 1f, 0.25f); if ((double) num4 > 1.0) num4 = 1f; b1 = (int) ((double) newColor.B * (double) num4); } if (this.type == 30) return new Color(250, 250, 250, 100); if (!this.IsABestiaryIconDummy && (this.type == 25 || this.type == 30 || this.type == 59 || this.type == 60)) return new Color(200, 200, 200, 0); if (this.type == 360) { int r2 = (int) newColor.R; int g2 = (int) newColor.G; int b2 = (int) newColor.B; if (r2 < 75) r2 = 75; if (g2 < 175) g2 = 175; if (b2 < (int) byte.MaxValue) b2 = (int) byte.MaxValue; return new Color(r2, g2, b2, (int) byte.MaxValue); } if (this.type == 655) { int r3 = (int) newColor.R; int g3 = (int) newColor.G; int b3 = (int) newColor.B; if (r3 < (int) byte.MaxValue) r3 = (int) byte.MaxValue; if (g3 < 100) g3 = 100; if (b3 < 50) b3 = 50; return new Color(r3, g3, b3, (int) byte.MaxValue); } if (this.type == 352) return new Color((int) byte.MaxValue, (int) byte.MaxValue, (int) byte.MaxValue, 200); if (this.type == 72) { r1 = (int) newColor.R; g1 = (int) newColor.G; b1 = (int) newColor.B; } else { if (this.type == 288) return new Color(200, 200, 200, 0); if (this.type == 289) return new Color(250, 250, 250, 50); if (this.type >= 254 && this.type <= 261) { b1 = (int) byte.MaxValue; if (r1 < 100) r1 = 100; if (g1 < 150) g1 = 150; } else if (this.type == 374 || this.type == 634 || this.type == 635) { b1 = (int) byte.MaxValue; if (r1 < 100) r1 = 100; if (g1 < 150) g1 = 150; } else { if (this.type == 549) { newColor = Color.Lerp(newColor, Color.White, 0.4f); newColor *= (float) a / (float) byte.MaxValue; return newColor; } if (this.type == 64 || this.type == 63 || this.type == 75 || this.type == 103 || this.type == 400) { r1 = (int) ((double) newColor.R * 1.5); g1 = (int) ((double) newColor.G * 1.5); b1 = (int) ((double) newColor.B * 1.5); if (r1 > (int) byte.MaxValue) r1 = (int) byte.MaxValue; if (g1 > (int) byte.MaxValue) g1 = (int) byte.MaxValue; if (b1 > (int) byte.MaxValue) b1 = (int) byte.MaxValue; } } } if (a < 0) a = 0; if (a > (int) byte.MaxValue) a = (int) byte.MaxValue; return new Color(r1, g1, b1, a); } public Color GetColor(Color newColor) { if (this.IsABestiaryIconDummy) newColor = this.GetBestiaryEntryColor(); int r = (int) this.color.R - ((int) byte.MaxValue - (int) newColor.R); int g = (int) this.color.G - ((int) byte.MaxValue - (int) newColor.G); int b = (int) this.color.B - ((int) byte.MaxValue - (int) newColor.B); int a = (int) this.color.A - ((int) byte.MaxValue - (int) newColor.A); if (r < 0) r = 0; if (r > (int) byte.MaxValue) r = (int) byte.MaxValue; if (g < 0) g = 0; if (g > (int) byte.MaxValue) g = (int) byte.MaxValue; if (b < 0) b = 0; if (b > (int) byte.MaxValue) b = (int) byte.MaxValue; if (a < 0) a = 0; if (a > (int) byte.MaxValue) a = (int) byte.MaxValue; return new Color(r, g, b, a); } public bool ShouldBestiaryGirlBeLycantrope() { if (Main.bloodMoon && !Main.dayTime) return true; return Main.moonPhase == 0 && !Main.dayTime; } public string GetChat() { Recipe.FindRecipes(); bool flag1 = false; bool flag2 = false; bool flag3 = false; bool flag4 = false; bool flag5 = false; bool flag6 = false; bool flag7 = false; bool flag8 = false; bool flag9 = false; bool flag10 = false; bool flag11 = false; bool flag12 = false; bool flag13 = false; bool flag14 = false; bool flag15 = false; bool flag16 = false; bool flag17 = false; object substitutionObject = Lang.CreateDialogSubstitutionObject(this); for (int index = 0; index < 200; ++index) { if (Main.npc[index].active) { if (Main.npc[index].type == 17) flag1 = true; else if (Main.npc[index].type == 18) flag2 = true; else if (Main.npc[index].type == 19) flag3 = true; else if (Main.npc[index].type == 20) flag4 = true; else if (Main.npc[index].type == 37) flag5 = true; else if (Main.npc[index].type == 38) flag6 = true; else if (Main.npc[index].type == 124) flag7 = true; else if (Main.npc[index].type == 107) flag8 = true; else if (Main.npc[index].type == 54) flag9 = true; else if (Main.npc[index].type == 160) flag10 = true; else if (Main.npc[index].type == 178) flag11 = true; else if (Main.npc[index].type == 229) flag12 = true; else if (Main.npc[index].type == 209) flag13 = true; else if (Main.npc[index].type == 208) flag14 = true; else if (Main.npc[index].type == 353) flag15 = true; else if (Main.npc[index].type == 22) flag16 = true; else if (Main.npc[index].type == 441) flag17 = true; } } string str = ""; string specialEventText = ""; if (this.type == 17) { if (this.HasSpecialEventText("Merchant", out specialEventText)) str = specialEventText; else if (!NPC.downedBoss1 && Main.rand.Next(3) == 0) str = Main.player[Main.myPlayer].statLifeMax >= 200 ? (Main.player[Main.myPlayer].statDefense > 10 ? Lang.dialog(3) : Lang.dialog(2)) : Lang.dialog(1); else if (Main.dayTime) { if (Main.time < 16200.0) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(4); break; case 1: str = Lang.dialog(5); break; default: str = Lang.dialog(6); break; } } else if (Main.time > 37800.0) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(7); break; case 1: str = Lang.dialog(8); break; default: str = Lang.dialog(9); break; } } else { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(10); break; case 1: str = Lang.dialog(11); break; default: str = Lang.dialog(12); break; } } } else if (Main.bloodMoon) { if (flag2 & flag7 && Main.rand.Next(3) == 0) { str = Lang.dialog(13); } else { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(14); break; case 1: str = Lang.dialog(15); break; case 2: str = Lang.dialog(16); break; default: str = Lang.dialog(17); break; } } } else if (Main.time < 9720.0) str = Main.rand.Next(2) != 0 ? Lang.dialog(19) : Lang.dialog(18); else if (Main.time > 22680.0) { str = Main.rand.Next(2) != 0 ? Lang.dialog(21) : Lang.dialog(20); } else { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(22); break; case 1: str = Lang.dialog(23); break; default: str = Lang.dialog(24); break; } } } else if (this.type == 18) { if (this.HasSpecialEventText("Nurse", out specialEventText)) str = specialEventText; else if (Main.bloodMoon) { if ((double) Main.player[Main.myPlayer].statLife < (double) Main.player[Main.myPlayer].statLifeMax2 * 0.66) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(25); break; case 1: str = Lang.dialog(26); break; default: str = Lang.dialog(27); break; } } else { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(28); break; case 1: str = Lang.dialog(29); break; case 2: str = Lang.dialog(30); break; default: str = Lang.dialog(31); break; } } } else if (Main.rand.Next(3) == 0 && !NPC.downedBoss3) str = Lang.dialog(32); else if (flag6 && Main.rand.Next(4) == 0) str = Lang.dialog(33); else if (flag3 && Main.rand.Next(4) == 0) str = Lang.dialog(34); else if (flag16 && Main.rand.Next(4) == 0) str = Lang.dialog(35); else if ((double) Main.player[Main.myPlayer].statLife < (double) Main.player[Main.myPlayer].statLifeMax2 * 0.33) { switch (Main.rand.Next(5)) { case 0: str = Lang.dialog(36); break; case 1: str = Lang.dialog(37); break; case 2: str = Lang.dialog(38); break; case 3: str = Lang.dialog(39); break; default: str = Lang.dialog(40); break; } } else if ((double) Main.player[Main.myPlayer].statLife < (double) Main.player[Main.myPlayer].statLifeMax2 * 0.66) { switch (Main.rand.Next(7)) { case 0: str = Lang.dialog(41); break; case 1: str = Lang.dialog(42); break; case 2: str = Lang.dialog(43); break; case 3: str = Lang.dialog(44); break; case 4: str = Lang.dialog(45); break; case 5: str = Lang.dialog(46); break; default: str = Lang.dialog(47); break; } } else { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("NurseChatter.", substitutionObject)); int num = Main.rand.Next(4 + all.Length); str = num < 4 ? (num != 0 ? (num != 1 ? (num != 2 ? Lang.dialog(51) : Lang.dialog(50)) : Lang.dialog(49)) : Lang.dialog(48)) : all[num - 4].FormatWith(substitutionObject); } } else if (this.type == 19) { if (this.HasSpecialEventText("ArmsDealer", out specialEventText)) str = specialEventText; else if (flag16 && NPC.downedBoss3 && !Main.hardMode) str = Lang.dialog(58); else if (flag2 && Main.rand.Next(5) == 0) str = Lang.dialog(59); else if (flag2 && Main.rand.Next(5) == 0) str = Lang.dialog(60); else if (flag4 && Main.rand.Next(5) == 0) str = Lang.dialog(61); else if (flag6 && Main.rand.Next(5) == 0) str = Lang.dialog(62); else if (flag6 && Main.rand.Next(5) == 0) str = Lang.dialog(63); else if (Main.bloodMoon) { str = Main.rand.Next(2) != 0 ? Lang.dialog(65) : Lang.dialog(64); } else { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(66); break; case 1: str = Lang.dialog(67); break; default: str = Lang.dialog(68); break; } } } else if (this.type == 20) { if (this.HasSpecialEventText("Dryad", out specialEventText)) str = specialEventText; else if (DD2Event.DownedInvasionT1 && Main.rand.Next(6) == 0) str = !DD2Event.DownedInvasionT2 ? Language.GetTextValueWith("DryadSpecialText.AfterDD2Tier1", substitutionObject) : Language.GetTextValueWith("DryadSpecialText.AfterDD2Tier2", substitutionObject); else if (!NPC.downedBoss2 && Main.rand.Next(3) == 0) str = !WorldGen.crimson ? Lang.dialog(69) : Lang.dialog(332); else if (flag3 && Main.rand.Next(6) == 0) str = Lang.dialog(70); else if (flag1 && Main.rand.Next(6) == 0) str = Lang.dialog(71); else if (flag5 && Main.rand.Next(6) == 0) str = Lang.dialog(72); else if (flag10 && Main.rand.Next(6) == 0) str = Lang.dialog(238); else if (Main.bloodMoon) { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(73); break; case 1: str = Lang.dialog(74); break; case 2: str = Lang.dialog(75); break; default: str = Lang.dialog(76); break; } } else { switch (Main.rand.Next(5)) { case 0: str = !WorldGen.crimson ? Lang.dialog(77) : Lang.dialog(333); break; case 1: str = Lang.dialog(78); break; case 2: str = Lang.dialog(79); break; case 3: str = Lang.dialog(80); break; default: str = Lang.dialog(81); break; } } } else if (this.type == 37) { if (Main.dayTime) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(82); break; case 1: str = Lang.dialog(83); break; default: str = Lang.dialog(84); break; } } else if (Main.player[Main.myPlayer].statLifeMax < 300 || Main.player[Main.myPlayer].statDefense < 10) { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(85); break; case 1: str = Lang.dialog(86); break; case 2: str = Lang.dialog(87); break; default: str = Lang.dialog(88); break; } } else { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(89); break; case 1: str = Lang.dialog(90); break; case 2: str = Lang.dialog(91); break; default: str = Lang.dialog(92); break; } } } else if (this.type == 38) { if (this.HasSpecialEventText("Demolitionist", out specialEventText)) str = specialEventText; else if (!NPC.downedBoss2 && Main.rand.Next(3) == 0) str = Lang.dialog(93); else if (Main.bloodMoon) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(94); break; case 1: str = Lang.dialog(95); break; default: str = Lang.dialog(96); break; } } else if ((DD2Event.DownedInvasionT1 || DD2Event.Ongoing) && Main.rand.Next(5) == 0) str = Language.GetTextValueWith("DemolitionistSpecialText.AfterDD2Start", substitutionObject); else if (flag3 && Main.rand.Next(5) == 0) str = Lang.dialog(97); else if (flag3 && Main.rand.Next(5) == 0) str = Lang.dialog(98); else if (flag2 && Main.rand.Next(4) == 0) str = Lang.dialog(99); else if (flag4 && Main.rand.Next(4) == 0) str = Lang.dialog(100); else if (!Main.dayTime) { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(101); break; case 1: str = Lang.dialog(102); break; case 2: str = Lang.dialog(103); break; default: str = Lang.dialog(104); break; } } else { switch (Main.rand.Next(5)) { case 0: str = Lang.dialog(105); break; case 1: str = Lang.dialog(106); break; case 2: str = Lang.dialog(107); break; case 3: str = Lang.dialog(108); break; default: str = Lang.dialog(109); break; } } } else if (this.type == 54) { if (this.HasSpecialEventText("Clothier", out specialEventText)) str = specialEventText; else if (!flag7 && Main.rand.Next(2) == 0) str = Lang.dialog(110); else if (flag10 && Main.rand.Next(6) == 0) str = Lang.dialog(237); else if (Main.bloodMoon) str = Lang.dialog(111); else if (flag2 && Main.rand.Next(4) == 0) str = Lang.dialog(112); else if (Main.player[Main.myPlayer].head == 24) { str = Lang.dialog(113); } else { switch (Main.rand.Next(6)) { case 0: str = Lang.dialog(114); break; case 1: str = Lang.dialog(115); break; case 2: str = Lang.dialog(116); break; case 3: str = Lang.dialog(117); break; case 4: str = Lang.dialog(118); break; default: str = Lang.dialog(119); break; } } } else if (this.type == 105) str = Lang.dialog(120); else if (this.type == 107) { if (this.homeless) { switch (Main.rand.Next(5)) { case 0: str = Lang.dialog(121); break; case 1: str = Lang.dialog(122); break; case 2: str = Lang.dialog(123); break; case 3: str = Lang.dialog(124); break; default: str = Lang.dialog(125); break; } } else if (this.HasSpecialEventText("GoblinTinkerer", out specialEventText)) str = specialEventText; else if (flag7 && Main.rand.Next(5) == 0) str = Lang.dialog(126); else if (flag15 && Main.rand.Next(5) == 0) { str = Lang.dialog(309); } else { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("GoblinTinkererChatter.", substitutionObject)); int num = Main.rand.Next(all.Length + 5); if (num >= 5) str = all[num - 5].FormatWith(substitutionObject); else if (!Main.dayTime) { switch (num) { case 0: str = Lang.dialog((int) sbyte.MaxValue); break; case 1: str = Lang.dialog(128); break; case 2: str = Lang.dialog(129); break; case 3: str = Lang.dialog(130); break; default: str = Lang.dialog(131); break; } } else { switch (num) { case 0: str = Lang.dialog(132); break; case 1: str = Lang.dialog(133); break; case 2: str = Lang.dialog(134); break; case 3: str = Lang.dialog(135); break; default: str = Lang.dialog(136); break; } } } } else if (this.type == 106) str = Lang.dialog(137); else if (this.type == 108) { if (this.homeless) { int num = Main.rand.Next(3); if (num == 0) str = Lang.dialog(138); else if (num == 1 && !Main.player[Main.myPlayer].Male) { str = Lang.dialog(139); } else { switch (num) { case 1: str = Lang.dialog(140); break; case 2: str = Lang.dialog(141); break; } } } else if (this.HasLuckTextForWizard(out specialEventText)) str = specialEventText; else if (this.HasSpecialEventText("Wizard", out specialEventText)) str = specialEventText; else if (DD2Event.DownedInvasionT1 && Main.rand.Next(6) == 0) str = Language.GetTextValueWith("WizardSpecialText.AfterDD2Tier1", substitutionObject); else if (Main.player[Main.myPlayer].Male & flag16 && Main.rand.Next(6) == 0) str = Lang.dialog(142); else if (Main.player[Main.myPlayer].Male & flag6 && Main.rand.Next(6) == 0) str = Lang.dialog(143); else if (Main.player[Main.myPlayer].Male & flag8 && Main.rand.Next(6) == 0) str = Lang.dialog(144); else if (!Main.player[Main.myPlayer].Male & flag2 && Main.rand.Next(6) == 0) str = Lang.dialog(145); else if (!Main.player[Main.myPlayer].Male & flag7 && Main.rand.Next(6) == 0) str = Lang.dialog(146); else if (!Main.player[Main.myPlayer].Male & flag4 && Main.rand.Next(6) == 0) str = Lang.dialog(147); else if (!Main.dayTime) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(148); break; case 1: str = Lang.dialog(149); break; case 2: str = Lang.dialog(150); break; } } else { switch (Main.rand.Next(5)) { case 0: str = Lang.dialog(151); break; case 1: str = Lang.dialog(152); break; case 2: str = Lang.dialog(153); break; case 3: str = Lang.dialog(154); break; default: str = Lang.dialog(155); break; } } } else if (this.type == 123) str = Lang.dialog(156); else if (this.type == 124) { if (this.homeless) { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(157); break; case 1: str = Lang.dialog(158); break; case 2: str = Lang.dialog(159); break; default: str = Lang.dialog(160); break; } } else if (this.HasSpecialEventText("Mechanic", out specialEventText)) str = specialEventText; else if (Main.bloodMoon) { switch (Main.rand.Next(4)) { case 0: str = Lang.dialog(161); break; case 1: str = Lang.dialog(162); break; case 2: str = Lang.dialog(163); break; default: str = Lang.dialog(164); break; } } else if (flag8 && Main.rand.Next(6) == 0) str = Lang.dialog(165); else if (flag3 && Main.rand.Next(6) == 0) { str = Lang.dialog(166); } else { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("MechanicChatter.", substitutionObject)); int num = Main.rand.Next(3 + all.Length); str = num < 3 ? (num != 0 ? (num != 1 ? Lang.dialog(169) : Lang.dialog(168)) : Lang.dialog(167)) : all[num - 3].FormatWith(substitutionObject); } } else if (this.type == 22) { if (this.HasSpecialEventText("Guide", out specialEventText)) str = specialEventText; else if (Main.bloodMoon) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(170); break; case 1: str = Lang.dialog(171); break; default: str = Lang.dialog(172); break; } } else if (LanternNight.LanternsUp && !NPC.downedMoonlord) str = Language.GetTextValue("GuideSpecialText.Lantern1"); else if (LanternNight.LanternsUp && NPC.downedMoonlord) str = Language.GetTextValue("GuideSpecialText.Lantern2"); else if (Main.eclipse) str = Language.GetTextValue("GuideSpecialText.Eclipse"); else if (Main.slimeRain) str = Language.GetTextValue("GuideSpecialText.SlimeRain"); else if (!Main.dayTime) str = Lang.dialog(173); else if (Main.hardMode & flag17 && Main.rand.Next(8) == 0) str = Language.GetTextValueWith("GuideChatter.Chatter_1", substitutionObject); else if (Main.hardMode && Main.rand.Next(8) == 0) { str = Language.GetTextValue("GuideChatter.Chatter_2"); } else { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(174); break; case 1: str = Lang.dialog(175); break; default: str = Lang.dialog(176); break; } } } else if (this.type == 142) { int num = Main.rand.Next(3); if (this.HasSpecialEventText("Santa", out specialEventText)) { str = specialEventText; } else { switch (num) { case 0: str = Lang.dialog(224); break; case 1: str = Lang.dialog(225); break; case 2: str = Lang.dialog(226); break; } } } else if (this.type == 160) { int num = Main.rand.Next(6); if (this.HasSpecialEventText("Truffle", out specialEventText)) str = specialEventText; else if (flag4 && Main.rand.Next(6) == 0) str = Lang.dialog(232); else if (flag9 && Main.rand.Next(6) == 0) { str = Lang.dialog(236); } else { switch (num) { case 0: str = Lang.dialog(231); break; case 1: str = Lang.dialog(233); break; case 2: str = Lang.dialog(234); break; case 3: str = Lang.dialog(235); break; case 4: str = Lang.dialog(240); break; case 5: str = Lang.dialog(241); break; } } } else if (this.type == 178) { int num = Main.rand.Next(5); if (this.HasSpecialEventText("Steampunker", out specialEventText)) str = specialEventText; else if (Main.bloodMoon && Main.rand.Next(3) == 0) str = Lang.dialog(245); else if (flag13 && Main.rand.Next(6) == 0) str = Lang.dialog(246); else if (flag12 && Main.rand.Next(6) == 0) { str = Lang.dialog(247); } else { switch (num) { case 0: str = Lang.dialog(242); break; case 1: str = Lang.dialog(243); break; case 2: str = Lang.dialog(244); break; case 3: str = Lang.dialog(248); break; case 4: str = Lang.dialog(249); break; } } } else if (this.type == 207) { int num = Main.rand.Next(3); if (this.HasSpecialEventText("DyeTrader", out specialEventText)) str = specialEventText; else if (flag12 && Main.rand.Next(6) == 0) { str = Lang.dialog(260); } else { switch (num) { case 0: str = Lang.dialog(257); break; case 1: str = Lang.dialog(258); break; case 2: str = Lang.dialog(259); break; } } } else if (this.type == 208) { if (NPC.freeCake) { str = Language.GetTextValueWith("PartyGirlSpecialText.Cake" + (object) Main.rand.Next(1, 4), substitutionObject); } else { int num = Main.rand.Next(7); if (this.HasSpecialEventText("PartyGirl", out specialEventText)) str = specialEventText; else if (DD2Event.DownedInvasionT1 && Main.rand.Next(5) == 0) str = Language.GetTextValueWith("PartyGirlSpecialText.AfterDD2Tier1", substitutionObject); else if (Main.player[Main.myPlayer].Male && Main.rand.Next(5) == 0) str = Lang.dialog(268); else if (flag15 && Main.rand.Next(5) == 0) { str = Lang.dialog(310); } else { switch (num) { case 0: str = Lang.dialog(265); break; case 1: str = Lang.dialog(266); break; case 2: str = Lang.dialog(267); break; case 3: str = Lang.dialog(269); break; case 4: str = Lang.dialog(270); break; case 5: str = Lang.dialog(271); break; case 6: str = Lang.dialog(272); break; } } } } else if (this.type == 209) { if (this.HasSpecialEventText("Cyborg", out specialEventText)) str = specialEventText; else if (flag12 && Main.rand.Next(6) == 0) str = Lang.dialog(284); else if (flag11 && Main.rand.Next(6) == 0) { str = Lang.dialog(283); } else { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("CyborgChatter.", substitutionObject)); int num = Main.rand.Next(5 + all.Length); if (num >= 5) str = all[num - 5].FormatWith(substitutionObject); else if (num == 0) str = Lang.dialog(280); else if (num == 1) str = Lang.dialog(281); else if (num == 2) str = Lang.dialog(282); else if (num == 3) str = Lang.dialog(285); else if (num == 4) str = Lang.dialog(286); } } else if (this.type == 227) { int num = Main.rand.Next(5); if (this.HasSpecialEventText("Painter", out specialEventText)) str = specialEventText; else if (Main.hardMode && Main.rand.Next(7) == 0) str = Lang.dialog(250); else if (flag14 && Main.rand.Next(6) == 0) { str = Lang.dialog(251); } else { switch (num) { case 0: str = Lang.dialog(252); break; case 1: str = Lang.dialog(253); break; case 2: str = Lang.dialog(254); break; case 3: str = Lang.dialog((int) byte.MaxValue); break; case 4: str = Lang.dialog(256); break; } } } else if (this.type == 228) { int num = Main.rand.Next(4); if (this.HasSpecialEventText("WitchDoctor", out specialEventText)) str = specialEventText; else if (flag2 && Main.rand.Next(4) == 0) { str = Lang.dialog(263); } else { switch (num) { case 0: str = Lang.dialog(261); break; case 1: str = Lang.dialog(262); break; case 2: str = Lang.dialog(264); break; case 3: str = Language.GetTextValueWith("WitchDoctorSpecialText.AfterDD2Tier1", substitutionObject); break; } } } else if (this.type == 229) { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("PirateChatter.", substitutionObject)); int num = Main.rand.Next(6 + all.Length); if (num >= 6) str = all[num - 6].FormatWith(substitutionObject); else if (this.HasSpecialEventText("Pirate", out specialEventText)) str = specialEventText; else if (!Main.player[Main.myPlayer].Male && Main.rand.Next(5) == 0) { str = Lang.dialog(276); } else { switch (num) { case 0: str = Lang.dialog(273); break; case 1: str = Lang.dialog(274); break; case 2: str = Lang.dialog(275); break; case 3: str = Lang.dialog(277); break; case 4: str = Lang.dialog(278); break; case 5: str = Lang.dialog(279); break; } } } else if (this.type == 354) str = Lang.dialog(Main.rand.Next(315, 319)); else if (this.type == 353) { if (this.HasSpecialEventText("Stylist", out specialEventText)) str = specialEventText; else if (Main.bloodMoon) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(304); break; case 1: str = Lang.dialog(305); break; case 2: str = Lang.dialog(306); break; } } else if (Main.dayTime && Main.time < 16200.0 && Main.rand.Next(3) == 0) str = Lang.dialog(311); else if (Main.player[Main.myPlayer].Male && Main.rand.Next(3) == 0) { switch (Main.rand.Next(2)) { case 0: str = Lang.dialog(293); break; case 1: str = Lang.dialog(300); break; } } else if (!Main.player[Main.myPlayer].Male && Main.rand.Next(3) == 0) { switch (Main.rand.Next(3)) { case 0: str = Lang.dialog(291); break; case 1: str = Lang.dialog(292); break; case 2: str = Lang.dialog(312); break; } } else if (flag14 & flag7 & flag2 & flag3 && Main.rand.Next(5) == 0) str = Lang.dialog(307); else if (flag14 && Main.rand.Next(5) == 0) str = Lang.dialog(302); else if (flag6 && Main.rand.Next(5) == 0) str = Lang.dialog(303); else if (flag13 && Main.rand.Next(5) == 0) { str = Lang.dialog(308); } else { LocalizedText[] all = Language.FindAll(Lang.CreateDialogFilter("StylistChatter.", substitutionObject)); int num1 = Main.moonPhase < 3 ? 5 : 4; int num2 = Main.rand.Next(num1 + all.Length); if (num2 >= num1) str = all[num2 - num1].FormatWith(substitutionObject); else if (Main.moonPhase < 3) { switch (num2) { case 0: str = Lang.dialog(287); break; case 1: str = Lang.dialog(288); break; case 2: str = Lang.dialog(289); break; case 3: str = Lang.dialog(290); break; case 4: str = Lang.dialog(294); break; } } else if (Main.moonPhase < 6) { switch (num2) { case 0: str = Lang.dialog(295); break; case 1: str = Lang.dialog(296); break; case 2: str = Lang.dialog(297); break; case 3: str = Lang.dialog(298); break; } } else { switch (num2) { case 0: str = Lang.dialog(299); break; case 1: str = Lang.dialog(301); break; case 2: str = Lang.dialog(313); break; case 3: str = Lang.dialog(314); break; } } } } else if (this.type == 368) str = !this.HasSpecialEventText("TravellingMerchant", out specialEventText) ? (!flag16 || Main.rand.Next(5) != 0 ? (!flag1 || Main.rand.Next(5) != 0 ? (!flag9 || Main.rand.Next(5) != 0 ? Lang.dialog(Main.rand.Next(322, 331)) : Lang.dialog(321)) : Lang.dialog(320)) : Lang.dialog(319)) : specialEventText; else if (this.type == 376) str = Lang.dialog(Main.rand.Next(353, 356)); else if (this.type == 369) str = Main.rand.Next(5) != 0 || Main.LocalPlayer.anglerQuestsFinished <= 1 ? (!this.HasSpecialEventText("Angler", out specialEventText) ? (!Main.bloodMoon ? (Main.anglerQuestFinished ? (!flag4 || Main.rand.Next(5) != 0 ? Language.SelectRandom(Lang.CreateDialogFilter("AnglerChatter.", substitutionObject)).FormatWith(substitutionObject) : Lang.dialog(347)) : Lang.dialog(Main.rand.Next(334, 338))) : (Main.rand.Next(3) != 0 ? (Main.anglerQuestFinished ? Lang.dialog(Main.rand.Next(350, 353)) : Lang.dialog(Main.rand.Next(348, 350))) : Language.SelectRandom(Lang.CreateDialogFilter("AnglerSpecialText.BloodMoonFishing")).FormatWith(substitutionObject))) : specialEventText) : Lang.AnglerQuestCountChat(this); else if (this.type == 453) str = !this.HasSpecialEventText("SkeletonMerchant", out specialEventText) ? Lang.dialog(Main.rand.Next(356, 364)) : specialEventText; else if (this.type == 441) str = !this.HasSpecialEventText("TaxCollector", out specialEventText) ? (!(Main.rand.Next(6) == 0 & flag4) ? (!(Main.rand.Next(6) == 0 & flag3) ? (!(Main.rand.Next(6) == 0 & flag6) ? (!(Main.rand.Next(6) == 0 & flag1) ? Lang.dialog(Main.rand.Next(364, 370)) : Lang.dialog(374)) : Lang.dialog(373)) : Lang.dialog(372)) : Lang.dialog(371)) : specialEventText; else if (this.type == 579) str = Language.GetTextValue("BartenderSpecialText.FirstMeeting"); else if (this.type == 550) str = !this.HasSpecialEventText("Bartender", out specialEventText) ? Lang.BartenderChat(this) : specialEventText; else if (this.type == 589) str = Main.rand.Next(2) != 0 ? Language.GetTextValue("GolferSpecialText.FirstMeeting2") : Language.GetTextValue("GolferSpecialText.FirstMeeting1"); else if (this.type == 588) str = Main.rand.Next(3) == 0 || !this.HasSpecialEventText("Golfer", out specialEventText) ? (Main.rand.Next(3) != 0 ? Lang.GolferChat(this) : Language.SelectRandom(Lang.CreateDialogFilter((Main.LocalPlayer.golferScoreAccumulated < 2000 ? (Main.LocalPlayer.golferScoreAccumulated < 1000 ? (Main.LocalPlayer.golferScoreAccumulated < 500 ? "GolferQuestsChatterBeginner" : "GolferQuestsChatterApprentice") : "GolferQuestsChatterJourneyman") : "GolferQuestsChatterMaster") + ".")).FormatWith(substitutionObject)) : specialEventText; else if (this.type == 633) str = this.ShouldBestiaryGirlBeLycantrope() || !this.HasSpecialEventText("BestiaryGirl", out specialEventText) ? Lang.BestiaryGirlChat(this) : specialEventText; else if (this.type == 637) str = !this.HasSpecialEventText("Cat", out specialEventText) ? Lang.CatChat(this) : specialEventText; else if (this.type == 638) str = !this.HasSpecialEventText("Dog", out specialEventText) ? Lang.DogChat(this) : specialEventText; else if (this.type == 656) str = !this.HasSpecialEventText("Bunny", out specialEventText) ? Lang.BunnyChat(this) : specialEventText; return str; } public object Clone() => this.MemberwiseClone(); public bool HasLuckTextForWizard(out string specialEventText) { specialEventText = (string) null; object substitutionObject = Lang.CreateDialogSubstitutionObject(this); if (Main.rand.Next(3) != 0) return false; float normalizedLuck = Main.player[Main.myPlayer].NormalizedLuck; if ((double) normalizedLuck == 0.0) return false; string startsWith = (double) normalizedLuck >= -0.600000023841858 ? ((double) normalizedLuck >= -0.400000005960464 ? ((double) normalizedLuck >= -0.200000002980232 ? ((double) normalizedLuck >= 0.0 ? ((double) normalizedLuck >= 0.25 ? ((double) normalizedLuck >= 0.5 ? ((double) normalizedLuck >= 0.75 ? "WizardSpecialText.LuckIsGodly" : "WizardSpecialText.LuckIsAmazing") : "WizardSpecialText.LuckIsGreat") : "WizardSpecialText.LuckIsGood") : "WizardSpecialText.LuckIsBad") : "WizardSpecialText.LuckIsPoor") : "WizardSpecialText.LuckIsTerrible") : "WizardSpecialText.LuckIsCursed"; specialEventText = Language.SelectRandom(Lang.CreateDialogFilter(startsWith)).FormatWith(substitutionObject); return true; } public bool HasSpecialEventText(string specialTextCategoryKey, out string specialEventText) { specialEventText = (string) null; object substitutionObject = Lang.CreateDialogSubstitutionObject(this); return Main.LocalPlayer.ZoneGraveyard && Main.rand.Next(3) == 0 && this.GetSpecialEventTextIfNotEmpty(specialTextCategoryKey + "SpecialText.Graveyard", substitutionObject, ref specialEventText) || BirthdayParty.PartyIsUp && Main.rand.Next(3) == 0 && !NPCID.Sets.HasNoPartyText[this.type] && this.GetSpecialEventTextIfNotEmpty(specialTextCategoryKey + "SpecialText.Party", substitutionObject, ref specialEventText) || Main.raining && !Main.IsItStorming && Main.rand.Next(3) == 0 && this.GetSpecialEventTextIfNotEmpty(specialTextCategoryKey + "SpecialText.Rain", substitutionObject, ref specialEventText) || Main.IsItAHappyWindyDay && Main.rand.Next(3) == 0 && this.GetSpecialEventTextIfNotEmpty(specialTextCategoryKey + "SpecialText.Windy", substitutionObject, ref specialEventText) || Main.IsItStorming && Main.rand.Next(3) == 0 && this.GetSpecialEventTextIfNotEmpty(specialTextCategoryKey + "SpecialText.Storm", substitutionObject, ref specialEventText); } public bool GetSpecialEventTextIfNotEmpty( string specialTextKey, object substitutes, ref string specialEventText) { LocalizedText localizedText = Language.SelectRandom(Lang.CreateDialogFilter(specialTextKey)); if (localizedText == LocalizedText.Empty) return false; specialEventText = localizedText.FormatWith(substitutes); return true; } public void CheckDrowning() { bool flag = Collision.DrownCollision(this.position, this.width, this.height, 1f); if (Main.netMode != 1) { if (flag) { if (++this.breathCounter >= 7) { this.breathCounter = 0; --this.breath; if (this.breath <= 0) { this.friendlyRegen = 0; this.breath = 0; this.life -= 2; if (this.life % 24 < 2) this.netUpdate = true; if (this.life <= 0) { this.life = 1; this.StrikeNPCNoInteraction(2, 0.0f, 0); if (Main.netMode != 0) NetMessage.SendData(28, number: this.whoAmI, number2: 2f); } } } } else { this.breath += 3; if (this.breath > 200) this.breath = 200; this.breathCounter = 0; } } if (!flag || Main.rand.Next(20) != 0 || this.lavaWet || this.honeyWet) return; int num1 = 0; int num2 = 0; if (this.type == 369) num2 = 8; Dust.NewDust(new Vector2(this.position.X + (float) ((10 + num1) * this.direction), (float) ((double) this.position.Y + (double) num2 + 4.0)), this.width - 8, 8, 34, Scale: 1.2f); } public void TryPortalJumping() { if (!this.townNPC || Main.netMode == 1) return; PortalHelper.TryGoingThroughPortals((Entity) this); } public static void GetMeleeCollisionData( Microsoft.Xna.Framework.Rectangle victimHitbox, int enemyIndex, ref int specialHitSetter, ref float damageMultiplier, ref Microsoft.Xna.Framework.Rectangle npcRect) { NPC npc1 = Main.npc[enemyIndex]; if ((npc1.type >= 430 && npc1.type <= 436 || npc1.type == 591) && (double) npc1.ai[2] > 5.0) { int num = 34; if (npc1.spriteDirection < 0) { npcRect.X -= num; npcRect.Width += num; } else npcRect.Width += num; damageMultiplier *= 1.25f; } else if (npc1.type >= 494 && npc1.type <= 495 && (double) npc1.ai[2] > 5.0) { int num = 18; if (npc1.spriteDirection < 0) { npcRect.X -= num; npcRect.Width += num; } else npcRect.Width += num; damageMultiplier *= 1.25f; } else if (npc1.type == 460) { Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(0, 0, 30, 14); rectangle.X = (int) npc1.Center.X; if (npc1.direction < 0) rectangle.X -= rectangle.Width; rectangle.Y = (int) npc1.position.Y + npc1.height - 20; if (!victimHitbox.Intersects(rectangle)) return; npcRect = rectangle; damageMultiplier *= 1.35f; } else if (npc1.type == 417 && (double) npc1.ai[0] == 6.0 && (double) npc1.ai[3] > 0.0 && (double) npc1.ai[3] < 4.0) { Microsoft.Xna.Framework.Rectangle rectangle = Utils.CenteredRectangle(npc1.Center, new Vector2(100f)); if (!victimHitbox.Intersects(rectangle)) return; npcRect = rectangle; damageMultiplier *= 1.35f; } else if (npc1.type == 466) { Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(0, 0, 30, 8); rectangle.X = (int) npc1.Center.X; if (npc1.direction < 0) rectangle.X -= rectangle.Width; rectangle.Y = (int) npc1.position.Y + npc1.height - 32; if (!victimHitbox.Intersects(rectangle)) return; npcRect = rectangle; damageMultiplier *= 1.75f; } else if (npc1.type == 576 || npc1.type == 577) { NPC npc2 = npc1; bool flag = true; int y = npc2.frame.Y; int num1 = 0; int num2 = 0; Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(0, 0, 30, 8); switch (y) { case 15: specialHitSetter = 2; rectangle.Width = 120; rectangle.Height = 30; num2 = 24; break; case 16: specialHitSetter = 2; rectangle.Width = 120; rectangle.Height = 60; num1 = 10; break; case 17: specialHitSetter = 2; rectangle.Width = 100; rectangle.Height = 90; num1 = 50; break; case 18: specialHitSetter = 2; rectangle.Width = 100; rectangle.Height = 50; num1 = 90; num2 = 10; break; default: flag = false; break; } if (!flag) return; rectangle.X = (int) npc2.Center.X - num1 * npc2.direction; if (npc2.direction < 0) rectangle.X -= rectangle.Width; rectangle.Y = (int) npc2.Center.Y - rectangle.Height + num2; if (!victimHitbox.Intersects(rectangle)) return; npcRect = rectangle; damageMultiplier *= 1.75f; } else { if (npc1.type != 552 && npc1.type != 553 && npc1.type != 554 || (double) npc1.ai[0] <= 0.0 || (double) npc1.ai[0] >= 24.0) return; Microsoft.Xna.Framework.Rectangle rectangle = new Microsoft.Xna.Framework.Rectangle(0, 0, 34, 14); rectangle.X = (int) npc1.Center.X; if (npc1.direction < 0) rectangle.X -= rectangle.Width; rectangle.Y = (int) npc1.position.Y + npc1.height - 20; if (!victimHitbox.Intersects(rectangle)) return; npcRect = rectangle; damageMultiplier *= 1.35f; } } public string GetBestiaryCreditId() => ContentSamples.NpcBestiaryCreditIdsByNpcNetIds[this.netID]; public override string ToString() => "name:" + this.TypeName + ", active:" + this.active.ToString() + ", whoAmI:" + (object) this.whoAmI; } }