From 1ec3beae44110cada72f917f04da7b889e4ba778 Mon Sep 17 00:00:00 2001 From: direwolf420 Date: Sun, 17 Apr 2022 17:37:13 +0200 Subject: [PATCH] rename harvester, folders/namespace, add tell before bombing --- AssWorld.cs | 2 +- AssortedCrazyThings.cs | 4 +- Base/ModSupport/OtherModCalls.cs | 6 +- BossBars/HarvesterBossBar.cs | 8 +- .../BabyHarvesterBuff.cs | 4 +- .../BabyHarvesterBuff.png | Bin .../BabyHarvesterBuff_Sheet.png | Bin Items/CaughtDungeonSoul.cs | 6 +- Items/CaughtDungeonSoulFreed.cs | 4 +- Items/IdolOfDecay.cs | 6 +- NPCs/DungeonBird/HarvesterTalon.png | Bin 494 -> 0 bytes .../DungeonSoul.png | Bin .../DungeonSoulBase.cs | 2 +- .../DungeonSoulFreed.png | Bin .../HarvesterBoss.cs} | 16 ++- .../HarvesterBoss.png} | Bin .../HarvesterBossChain.png} | Bin .../HarvesterBoss_Bestiary.png} | Bin .../HarvesterBoss_Head_Boss.png} | Bin .../HarvesterBoss_Sheet.png} | Bin .../HarvesterBoss_Wings.png} | Bin .../HarvesterTalon.cs | 108 ++++++++++++++---- NPCs/Harvester/HarvesterTalon.png | Bin 0 -> 469 bytes NPCs/Harvester/HarvesterTalon_Outline.png | Bin 0 -> 254 bytes NPCs/HarvesterGlobalNPC.cs | 2 +- .../BabyHarvesterHandler.cs | 6 +- .../BabyHarvesterPlayer.cs | 2 +- .../BabyHarvesterProj.cs | 12 +- .../BabyHarvesterProj.png | Bin .../BabyHarvesterProj1_Sheet.png | Bin .../BabyHarvesterProj2_Sheet.png | Bin .../BabyHarvesterProj2_Sheet_Wings.png | Bin .../BabyHarvesterProj3_Sheet.png | Bin .../BabyHarvesterProj3_Sheet_Wings.png | Bin .../BabyHarvesterProj_Transformation1.png | Bin ...HarvesterProj_Transformation1_Glowmask.png | Bin .../BabyHarvesterProj_Transformation2.png | Bin ...HarvesterProj_Transformation2_Glowmask.png | Bin .../BabyHarvesterProj_Transformation3.png | Bin ...HarvesterProj_Transformation3_Glowmask.png | Bin .../HarvesterAbsorbedSoul.cs | 2 +- .../HarvesterBone.cs | 2 +- .../HarvesterFracturedSoul.cs | 2 +- .../HarvesterFracturedSoul.png | Bin UI/HoverNPCUI.cs | 2 +- 45 files changed, 131 insertions(+), 65 deletions(-) rename Buffs/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterBuff.cs (95%) rename Buffs/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterBuff.png (100%) rename Buffs/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterBuff_Sheet.png (100%) delete mode 100644 NPCs/DungeonBird/HarvesterTalon.png rename NPCs/{DungeonBird => Harvester}/DungeonSoul.png (100%) rename NPCs/{DungeonBird => Harvester}/DungeonSoulBase.cs (98%) rename NPCs/{DungeonBird => Harvester}/DungeonSoulFreed.png (100%) rename NPCs/{DungeonBird/Harvester.cs => Harvester/HarvesterBoss.cs} (99%) rename NPCs/{DungeonBird/Harvester.png => Harvester/HarvesterBoss.png} (100%) rename NPCs/{DungeonBird/HarvesterChain.png => Harvester/HarvesterBossChain.png} (100%) rename NPCs/{DungeonBird/Harvester_Bestiary.png => Harvester/HarvesterBoss_Bestiary.png} (100%) rename NPCs/{DungeonBird/Harvester_Head_Boss.png => Harvester/HarvesterBoss_Head_Boss.png} (100%) rename NPCs/{DungeonBird/Harvester_Sheet.png => Harvester/HarvesterBoss_Sheet.png} (100%) rename NPCs/{DungeonBird/Harvester_Wings.png => Harvester/HarvesterBoss_Wings.png} (100%) rename NPCs/{DungeonBird => Harvester}/HarvesterTalon.cs (83%) create mode 100644 NPCs/Harvester/HarvesterTalon.png create mode 100644 NPCs/Harvester/HarvesterTalon_Outline.png rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterHandler.cs (97%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterPlayer.cs (93%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj.cs (98%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj1_Sheet.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj2_Sheet.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj2_Sheet_Wings.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj3_Sheet.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj3_Sheet_Wings.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation1.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation1_Glowmask.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation2.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation2_Glowmask.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation3.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/BabyHarvesterProj_Transformation3_Glowmask.png (100%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/HarvesterAbsorbedSoul.cs (97%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/HarvesterBone.cs (93%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/HarvesterFracturedSoul.cs (98%) rename Projectiles/NPCs/Bosses/{DungeonBird => Harvester}/HarvesterFracturedSoul.png (100%) diff --git a/AssWorld.cs b/AssWorld.cs index cae77032..82e84cf2 100644 --- a/AssWorld.cs +++ b/AssWorld.cs @@ -1,5 +1,5 @@ using AssortedCrazyThings.NPCs; -using AssortedCrazyThings.NPCs.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; using Microsoft.Xna.Framework; using System.Collections.Generic; using System.IO; diff --git a/AssortedCrazyThings.cs b/AssortedCrazyThings.cs index 7a2cc3ba..9929e50f 100644 --- a/AssortedCrazyThings.cs +++ b/AssortedCrazyThings.cs @@ -2,7 +2,7 @@ using AssortedCrazyThings.Effects; using AssortedCrazyThings.Items.Pets.CuteSlimes; using AssortedCrazyThings.Items.Weapons; -using AssortedCrazyThings.NPCs.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; using AssortedCrazyThings.Projectiles.Pets; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -122,7 +122,7 @@ private void LoadHarvesterTypes() return; } - harvester = ModContent.NPCType(); + harvester = ModContent.NPCType(); harvesterTalonLeft = ModContent.NPCType(); harvesterTalonRight = ModContent.NPCType(); } diff --git a/Base/ModSupport/OtherModCalls.cs b/Base/ModSupport/OtherModCalls.cs index 930ee5f0..cea269db 100644 --- a/Base/ModSupport/OtherModCalls.cs +++ b/Base/ModSupport/OtherModCalls.cs @@ -4,7 +4,7 @@ using AssortedCrazyThings.Items.Placeable; using AssortedCrazyThings.Items.VanityArmor; using AssortedCrazyThings.Items.Weapons; -using AssortedCrazyThings.NPCs.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; using AssortedCrazyThings.Projectiles.Minions; using AssortedCrazyThings.Projectiles.Minions.CompanionDungeonSouls; using System; @@ -36,8 +36,6 @@ public override void PostSetupContent() int summonItem = ModContent.ItemType(); - //TODO harvester, include 15 x ModContent.ItemType() in loot but dont spawn it - /* * "AddBoss", args[1] as Mod, // Mod @@ -55,7 +53,7 @@ args[11] as Action // Custom Drawing bossChecklist.Call( "AddBoss", Mod, - Harvester.name, + HarvesterBoss.name, AssortedCrazyThings.harvester, 5.1f, (Func)(() => AssWorld.downedHarvester), diff --git a/BossBars/HarvesterBossBar.cs b/BossBars/HarvesterBossBar.cs index 3f4048eb..c12fabb0 100644 --- a/BossBars/HarvesterBossBar.cs +++ b/BossBars/HarvesterBossBar.cs @@ -1,4 +1,4 @@ -using AssortedCrazyThings.NPCs.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Content; @@ -35,7 +35,7 @@ public override Asset GetIconTexture(ref Rectangle? iconFrame) lifePercent = Utils.Clamp(npc.life / (float)npc.lifeMax, 0f, 1f); shieldPercent = 0f; - if (npc.ModNPC is Harvester harvester) + if (npc.ModNPC is HarvesterBoss harvester) { if (!harvester.IsReviving) { @@ -45,8 +45,8 @@ public override Asset GetIconTexture(ref Rectangle? iconFrame) lifePercent = 0f; var stats = harvester.GetAIStats(); - shieldPercent = Utils.Clamp(harvester.ReviveProgress / Harvester.Revive_Duration, 0f, 1f); - shieldPercent = Utils.Remap(shieldPercent, 0f, 1f, Harvester.Revive_MinHP, stats.MaxHP); + shieldPercent = Utils.Clamp(harvester.ReviveProgress / HarvesterBoss.Revive_Duration, 0f, 1f); + shieldPercent = Utils.Remap(shieldPercent, 0f, 1f, HarvesterBoss.Revive_MinHP, stats.MaxHP); } return true; diff --git a/Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff.cs b/Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff.cs similarity index 95% rename from Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff.cs rename to Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff.cs index 65182fc7..a7c856db 100644 --- a/Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff.cs +++ b/Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff.cs @@ -1,4 +1,4 @@ -using AssortedCrazyThings.Projectiles.NPCs.Bosses.DungeonBird; +using AssortedCrazyThings.Projectiles.NPCs.Bosses.Harvester; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Content; @@ -7,7 +7,7 @@ using Terraria.ID; using Terraria.ModLoader; -namespace AssortedCrazyThings.Buffs.NPCs.Bosses.DungeonBird +namespace AssortedCrazyThings.Buffs.NPCs.Bosses.Harvester { [Content(ContentType.Bosses)] public class BabyHarvesterBuff : AssBuff diff --git a/Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff.png b/Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff.png similarity index 100% rename from Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff.png rename to Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff.png diff --git a/Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff_Sheet.png b/Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff_Sheet.png similarity index 100% rename from Buffs/NPCs/Bosses/DungeonBird/BabyHarvesterBuff_Sheet.png rename to Buffs/NPCs/Bosses/Harvester/BabyHarvesterBuff_Sheet.png diff --git a/Items/CaughtDungeonSoul.cs b/Items/CaughtDungeonSoul.cs index 74357056..3dc39cd3 100644 --- a/Items/CaughtDungeonSoul.cs +++ b/Items/CaughtDungeonSoul.cs @@ -1,5 +1,5 @@ -using AssortedCrazyThings.NPCs.DungeonBird; -using AssortedCrazyThings.Projectiles.NPCs.Bosses.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; +using AssortedCrazyThings.Projectiles.NPCs.Bosses.Harvester; using Microsoft.Xna.Framework; using System.Collections.Generic; using Terraria; @@ -15,7 +15,7 @@ public override void SetStaticDefaults() { DisplayName.SetDefault("Loose Dungeon Soul"); Tooltip.SetDefault("'An inert soul caught by a net'" - + "\nAwakened in your inventory when " + Harvester.name + " is defeated"); + + "\nAwakened in your inventory when " + HarvesterBoss.name + " is defeated"); // ticksperframe, frameCount //Main.RegisterItemAnimation(Item.type, new DrawAnimationVertical(5, 4)); //ItemID.Sets.AnimatesAsSoul[Item.type] = true; diff --git a/Items/CaughtDungeonSoulFreed.cs b/Items/CaughtDungeonSoulFreed.cs index d2260cc5..d50552a0 100644 --- a/Items/CaughtDungeonSoulFreed.cs +++ b/Items/CaughtDungeonSoulFreed.cs @@ -1,4 +1,4 @@ -using AssortedCrazyThings.NPCs.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; using Terraria; using Terraria.ID; @@ -11,7 +11,7 @@ public class CaughtDungeonSoulFreed : CaughtDungeonSoulBase public override void SetStaticDefaults() { DisplayName.SetDefault("Freed Dungeon Soul"); - Tooltip.SetDefault("Awakened by defeating the " + Harvester.name); + Tooltip.SetDefault("Awakened by defeating the " + HarvesterBoss.name); ItemID.Sets.ItemIconPulse[Item.type] = true; ItemID.Sets.ItemNoGravity[Item.type] = true; diff --git a/Items/IdolOfDecay.cs b/Items/IdolOfDecay.cs index 3ca744ad..18fa00ed 100644 --- a/Items/IdolOfDecay.cs +++ b/Items/IdolOfDecay.cs @@ -1,5 +1,5 @@ -using AssortedCrazyThings.NPCs.DungeonBird; -using AssortedCrazyThings.Projectiles.NPCs.Bosses.DungeonBird; +using AssortedCrazyThings.NPCs.Harvester; +using AssortedCrazyThings.Projectiles.NPCs.Bosses.Harvester; using Terraria; using Terraria.ID; @@ -11,7 +11,7 @@ public class IdolOfDecay : AssItem public override void SetStaticDefaults() { DisplayName.SetDefault("Idol Of Decay"); - Tooltip.SetDefault("Summons " + Harvester.name + "'s final form in the dungeon" + Tooltip.SetDefault("Summons " + HarvesterBoss.name + "'s final form in the dungeon" + "\nUnlimited uses!"); Terraria.GameContent.Creative.CreativeItemSacrificesCatalog.Instance.SacrificeCountNeededByItemId[Type] = 1; diff --git a/NPCs/DungeonBird/HarvesterTalon.png b/NPCs/DungeonBird/HarvesterTalon.png deleted file mode 100644 index 57e8e11a933f869c89f2ab85410fdde9f153a3ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmVH%$}W$5~&p`4f|p_*}33^B-6zDIoFm_#7qiwt5ee>k-fCAoj9c z2D9#HG!l_`{a7I)u%0t6Ue?5X7PM^}t=uURlrUW{jh8hsPpT|S^Ft10C)BqTiPU;2 zSv_?O$Vo}SK5o4|1~V0HtC0=3>a##sB~S07*qoM6N<$g87QxU;qFB diff --git a/NPCs/DungeonBird/DungeonSoul.png b/NPCs/Harvester/DungeonSoul.png similarity index 100% rename from NPCs/DungeonBird/DungeonSoul.png rename to NPCs/Harvester/DungeonSoul.png diff --git a/NPCs/DungeonBird/DungeonSoulBase.cs b/NPCs/Harvester/DungeonSoulBase.cs similarity index 98% rename from NPCs/DungeonBird/DungeonSoulBase.cs rename to NPCs/Harvester/DungeonSoulBase.cs index c4c17539..9d113663 100644 --- a/NPCs/DungeonBird/DungeonSoulBase.cs +++ b/NPCs/Harvester/DungeonSoulBase.cs @@ -7,7 +7,7 @@ using Terraria.ID; using Terraria.ModLoader; -namespace AssortedCrazyThings.NPCs.DungeonBird +namespace AssortedCrazyThings.NPCs.Harvester { //this class also contains the NPC classes at the very bottom [Content(ContentType.Bosses)] diff --git a/NPCs/DungeonBird/DungeonSoulFreed.png b/NPCs/Harvester/DungeonSoulFreed.png similarity index 100% rename from NPCs/DungeonBird/DungeonSoulFreed.png rename to NPCs/Harvester/DungeonSoulFreed.png diff --git a/NPCs/DungeonBird/Harvester.cs b/NPCs/Harvester/HarvesterBoss.cs similarity index 99% rename from NPCs/DungeonBird/Harvester.cs rename to NPCs/Harvester/HarvesterBoss.cs index 2c627943..9b9bbb3a 100644 --- a/NPCs/DungeonBird/Harvester.cs +++ b/NPCs/Harvester/HarvesterBoss.cs @@ -8,7 +8,7 @@ using AssortedCrazyThings.Items.VanityArmor; using AssortedCrazyThings.NPCs.DropConditions; using AssortedCrazyThings.NPCs.DropRules; -using AssortedCrazyThings.Projectiles.NPCs.Bosses.DungeonBird; +using AssortedCrazyThings.Projectiles.NPCs.Bosses.Harvester; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Content; @@ -25,11 +25,12 @@ using Terraria.ModLoader; using Terraria.ModLoader.IO; -namespace AssortedCrazyThings.NPCs.DungeonBird +namespace AssortedCrazyThings.NPCs.Harvester { [AutoloadBossHead] [Content(ContentType.Bosses)] - public class Harvester : AssNPC + [LegacyName("Harvester")] + public class HarvesterBoss : AssNPC { public class AIStats { @@ -145,7 +146,7 @@ public override void SetStaticDefaults() NPCID.Sets.NPCBestiaryDrawModifiers value = new NPCID.Sets.NPCBestiaryDrawModifiers(0) { - CustomTexturePath = "AssortedCrazyThings/NPCs/DungeonBird/Harvester_Bestiary", + CustomTexturePath = "AssortedCrazyThings/NPCs/Harvester/Harvester_Bestiary", Position = new Vector2(-9, 18), //Position on the icon PortraitPositionXOverride = 0, //Position on the portrait when clicked on PortraitPositionYOverride = 20, @@ -1191,6 +1192,13 @@ private void HandleAI(Player target, List talons) if (AI_Timer < 0) { AI_Timer--; + + if (!keepSwooping) + { + //Last seek stage before bombing: put talons out + AI_Animation = Animation_Bombing; + } + float swoopPostTime = aiStats.SwoopWaitTime * lifeRatioClamped; if (AI_Timer < -swoopPostTime) { diff --git a/NPCs/DungeonBird/Harvester.png b/NPCs/Harvester/HarvesterBoss.png similarity index 100% rename from NPCs/DungeonBird/Harvester.png rename to NPCs/Harvester/HarvesterBoss.png diff --git a/NPCs/DungeonBird/HarvesterChain.png b/NPCs/Harvester/HarvesterBossChain.png similarity index 100% rename from NPCs/DungeonBird/HarvesterChain.png rename to NPCs/Harvester/HarvesterBossChain.png diff --git a/NPCs/DungeonBird/Harvester_Bestiary.png b/NPCs/Harvester/HarvesterBoss_Bestiary.png similarity index 100% rename from NPCs/DungeonBird/Harvester_Bestiary.png rename to NPCs/Harvester/HarvesterBoss_Bestiary.png diff --git a/NPCs/DungeonBird/Harvester_Head_Boss.png b/NPCs/Harvester/HarvesterBoss_Head_Boss.png similarity index 100% rename from NPCs/DungeonBird/Harvester_Head_Boss.png rename to NPCs/Harvester/HarvesterBoss_Head_Boss.png diff --git a/NPCs/DungeonBird/Harvester_Sheet.png b/NPCs/Harvester/HarvesterBoss_Sheet.png similarity index 100% rename from NPCs/DungeonBird/Harvester_Sheet.png rename to NPCs/Harvester/HarvesterBoss_Sheet.png diff --git a/NPCs/DungeonBird/Harvester_Wings.png b/NPCs/Harvester/HarvesterBoss_Wings.png similarity index 100% rename from NPCs/DungeonBird/Harvester_Wings.png rename to NPCs/Harvester/HarvesterBoss_Wings.png diff --git a/NPCs/DungeonBird/HarvesterTalon.cs b/NPCs/Harvester/HarvesterTalon.cs similarity index 83% rename from NPCs/DungeonBird/HarvesterTalon.cs rename to NPCs/Harvester/HarvesterTalon.cs index ba064c2e..d303d9fe 100644 --- a/NPCs/DungeonBird/HarvesterTalon.cs +++ b/NPCs/Harvester/HarvesterTalon.cs @@ -8,7 +8,7 @@ using Terraria.ID; using Terraria.ModLoader; -namespace AssortedCrazyThings.NPCs.DungeonBird +namespace AssortedCrazyThings.NPCs.Harvester { [Content(ContentType.Bosses)] public abstract class HarvesterTalon : AssNPC @@ -17,7 +17,7 @@ public override string Texture { get { - return "AssortedCrazyThings/NPCs/DungeonBird/HarvesterTalon"; + return "AssortedCrazyThings/NPCs/Harvester/HarvesterTalon"; } } @@ -29,20 +29,23 @@ public override string Texture public const int ChainFrameCount = 6; public const int ChainFrameSpeed = 6; public static Asset ChainAsset; + public static Asset OutlineAsset; public override void Load() { - ChainAsset = Mod.Assets.Request("NPCs/DungeonBird/HarvesterChain"); + ChainAsset = Mod.Assets.Request("NPCs/Harvester/HarvesterBossChain"); + OutlineAsset = ModContent.Request(Texture + "_Outline"); } public override void Unload() { ChainAsset = null; + OutlineAsset = null; } public override void SetStaticDefaults() { - DisplayName.SetDefault(Harvester.name); + DisplayName.SetDefault(HarvesterBoss.name); Main.npcFrameCount[NPC.type] = 1; NPCID.Sets.NPCBestiaryDrawModifiers value = new NPCID.Sets.NPCBestiaryDrawModifiers(0) @@ -96,7 +99,7 @@ public override void SetDefaults() NPC.width = 40; //38 //latest 40 NPC.height = 42; //42//latest 30 NPC.aiStyle = -1; - NPC.damage = Harvester.talonDamage; + NPC.damage = HarvesterBoss.talonDamage; NPC.defense = 28; NPC.lifeMax = 1337; NPC.scale = 1f; @@ -127,24 +130,13 @@ public override bool PreDraw(SpriteBatch spriteBatch, Vector2 screenPos, Color d public override void PostDraw(SpriteBatch spriteBatch, Vector2 screenPos, Color drawColor) { - if (!HasParent) + if (!HasParent || !Visible) { return; } NPC body = Main.npc[ParentWhoAmI]; - Harvester harvester = null; - - if (body.ModNPC is Harvester h) - { - harvester = h; - if (h.AI_State != Harvester.State_Bombing) - { - return; - } - } - - if (harvester == null) + if (body.ModNPC is not HarvesterBoss harvester) { return; } @@ -155,7 +147,7 @@ public override void PostDraw(SpriteBatch spriteBatch, Vector2 screenPos, Color y -= -harvester.talonOffsetY + 20f; //has to result to 7f x += GetOffset(harvester); //66f, -70f - x += NPC.spriteDirection * (Harvester.talonDirectionalOffset + 6); + x += NPC.spriteDirection * (HarvesterBoss.talonDirectionalOffset + 6); SpriteEffects effect = (NPC.spriteDirection == 1) ? SpriteEffects.FlipHorizontally : SpriteEffects.None; @@ -182,7 +174,7 @@ public override void PostDraw(SpriteBatch spriteBatch, Vector2 screenPos, Color y = body.Center.Y - center.Y; y -= -harvester.talonOffsetY + 20f; x += GetOffset(harvester); - x += NPC.spriteDirection * (Harvester.talonDirectionalOffset + 0); + x += NPC.spriteDirection * (HarvesterBoss.talonDirectionalOffset + 0); if (Main.rand.NextBool(8)) { @@ -198,8 +190,39 @@ public override void PostDraw(SpriteBatch spriteBatch, Vector2 screenPos, Color } } + texture = OutlineAsset.Value; + + int spriteOffset = -NPC.spriteDirection * HarvesterBoss.talonDirectionalOffset; + Vector2 drawPos = NPC.Center - screenPos + new Vector2(spriteOffset, NPC.gfxOffY); + Color color = new Color(195, 247, 255); + + int fadeIn = 10; + int fadeDuration = 10; + int fadeOut = 12; + int finalTime = fadeIn + fadeDuration; + if (OutlineFadeTimer < fadeIn) + { + color *= (float)OutlineFadeTimer / fadeIn; + } + else if (OutlineFadeTimer > finalTime) + { + int fadeOutTimer = OutlineFadeTimer - finalTime; + if (fadeOutTimer < fadeOut) + { + color *= 1f - (float)fadeOutTimer / fadeOut; + } + else + { + color *= 0f; + } + } + + spriteBatch.Draw(texture, drawPos + new Vector2(0, 0.5f), NPC.frame, color, NPC.rotation, texture.Size() / 2, NPC.scale, effect, 0f); + + Main.instance.LoadNPC(NPC.type); texture = TextureAssets.Npc[NPC.type].Value; - spriteBatch.Draw(texture, NPC.Center - screenPos + new Vector2(0f, NPC.gfxOffY), NPC.frame, NPC.GetAlpha(drawColor), 0f, texture.Size() / 2, 1f, effect, 0f); + color = NPC.GetAlpha(drawColor); + spriteBatch.Draw(texture, drawPos, NPC.frame, color, NPC.rotation, texture.Size() / 2, NPC.scale, effect, 0f); } public override void OnHitPlayer(Player target, int damage, bool crit) @@ -231,6 +254,26 @@ public bool Idle set => NPC.localAI[0] = value ? 0f : 1f; } + public bool LastTickVisible + { + get => NPC.localAI[1] == 1f; + set => NPC.localAI[1] = value ? 1f : 0f; + } + + public bool CurrentTickVisible + { + get => NPC.localAI[2] == 1f; + set => NPC.localAI[2] = value ? 1f : 0f; + } + + public bool Visible => LastTickVisible && CurrentTickVisible; + + public int OutlineFadeTimer + { + get => (int)NPC.localAI[3]; + set => NPC.localAI[3] = value; + } + public override bool CheckDead() { NPC.boss = false; //To get rid of the default death message @@ -262,12 +305,14 @@ public override void AI() return; } - Harvester harvester = body.ModNPC as Harvester; + HarvesterBoss harvester = body.ModNPC as HarvesterBoss; NPC.target = body.target; if (NPC.target < 0 || NPC.target >= Main.maxPlayers) return; Player target = Main.player[NPC.target]; + CheckVisible(harvester); + NPC.gfxOffY = body.gfxOffY; NPC.spriteDirection = body.spriteDirection; NPC.direction = body.direction; @@ -330,7 +375,7 @@ public override void AI() betweenSelfAndBodyX += GetOffset(harvester); float len = (float)Math.Sqrt(betweenSelfAndBodyX * betweenSelfAndBodyX + betweenSelfAndBodyY * betweenSelfAndBodyY); float somevar = 12f; - if (len < somevar + speed && harvester.AI_State == Harvester.State_Bombing) + if (len < somevar + speed && harvester.AI_State == HarvesterBoss.State_Bombing) { RetractCounter = 0f; NPC.velocity.X = betweenSelfAndBodyX; @@ -481,7 +526,22 @@ public override void AI() } } - private float GetOffset(Harvester harvester) + private void CheckVisible(HarvesterBoss harvester) + { + CurrentTickVisible = LastTickVisible; + LastTickVisible = harvester.AI_Animation == HarvesterBoss.Animation_Bombing; + + if (Visible) + { + OutlineFadeTimer++; + } + else + { + OutlineFadeTimer = 0; + } + } + + private float GetOffset(HarvesterBoss harvester) { return RightTalon ? harvester.talonOffsetRightX : harvester.talonOffsetLeftX; } diff --git a/NPCs/Harvester/HarvesterTalon.png b/NPCs/Harvester/HarvesterTalon.png new file mode 100644 index 0000000000000000000000000000000000000000..dab431416efee9067c953edf2e5610453a724910 GIT binary patch literal 469 zcmV;`0V@89P)&%8r za~7`pRVOBx$ysPRVM64}_rD*uvOg_!-5d0-g(uVI;?+sEkun$Ws^~^`O^ zNcfcH^Ey9W5f|PYUg})GUm@