From 16b387b79674dd3833faa06a62c1655aff375bee Mon Sep 17 00:00:00 2001 From: FyloZ Date: Fri, 5 Jun 2020 12:42:17 -0400 Subject: [PATCH] Added new Dune Wyrm and Ancient Tomb Crawler sprites. Added debug tools. --- Content/Debug/DebugAI.cs | 36 ++ Content/Debug/DebugHitbox.cs | 38 ++ Content/Debug/DebugSword.cs | 17 + Content/Debug/DebugUtils.cs | 25 ++ Content/Debug/pixel.png | Bin 0 -> 72 bytes Content/Decimation.cs | 35 +- Content/Items/Boss/DuneWorm/DesertDessert.cs | 6 +- ...mTreasureBag.cs => DuneWyrmTreasureBag.cs} | 9 +- ...reasureBag.png => DuneWyrmTreasureBag.png} | Bin .../Placeable/DuneWorm/DuneWormTrophy.cs | 4 +- .../Placeable/DuneWorm/DuneWormTrophy.png | Bin 411 -> 3342 bytes Content/Items/Tools/TheHourGlass.cs | 4 +- Content/Items/Tools/TheHourGlass.png | Bin 329 -> 3514 bytes Content/Items/Vanity/DuneWorm/DuneWormMask.cs | 6 +- .../Items/Vanity/DuneWorm/DuneWormMask.png | Bin 413 -> 3328 bytes .../Vanity/DuneWorm/DuneWormMask_Head.png | Bin 4317 -> 5354 bytes Content/Items/Weapons/HourHand.cs | 4 +- Content/Items/Weapons/HourHand.png | Bin 2007 -> 3910 bytes .../AncientDuneWorm/AncientDuneWormBody.png | Bin 2570 -> 0 bytes .../AncientDuneWorm/AncientDuneWormHead.png | Bin 5394 -> 0 bytes .../AncientDuneWorm/AncientDuneWormTail.png | Bin 3396 -> 0 bytes Content/NPCs/AncientTombCrawlerBody.cs | 93 ----- Content/NPCs/AncientTombCrawlerBody.png | Bin 810 -> 0 bytes Content/NPCs/AncientTombCrawlerHead.cs | 319 --------------- Content/NPCs/AncientTombCrawlerHead.png | Bin 911 -> 0 bytes Content/NPCs/AncientTombCrawlerTail.cs | 91 ----- Content/NPCs/AncientTombCrawlerTail.png | Bin 782 -> 0 bytes Content/NPCs/Bloodshot/BloodshotEye.cs | 2 +- .../AncientTombCrawler/AncientTombCrawler.cs | 146 +++++++ .../AncientTombCrawlerBody.png | Bin 0 -> 441 bytes .../AncientTombCrawlerHead.png | Bin 0 -> 858 bytes .../AncientTombCrawlerTail.png | Bin 0 -> 465 bytes .../DuneWyrm.cs} | 195 +++++---- Content/NPCs/DuneWyrm/DuneWyrmBody.png | Bin 0 -> 1536 bytes Content/NPCs/DuneWyrm/DuneWyrmBody2.png | Bin 0 -> 1725 bytes Content/NPCs/DuneWyrm/DuneWyrmHead.png | Bin 0 -> 5325 bytes .../DuneWyrmHead_Head_Boss.png} | Bin Content/NPCs/DuneWyrm/DuneWyrmTail.png | Bin 0 -> 1809 bytes Content/Tiles/DuneWormTrophy.png | Bin 1323 -> 1359 bytes Lib/NPCs/Worm.cs | 374 +++++++++--------- 40 files changed, 618 insertions(+), 786 deletions(-) create mode 100644 Content/Debug/DebugAI.cs create mode 100644 Content/Debug/DebugHitbox.cs create mode 100644 Content/Debug/DebugSword.cs create mode 100644 Content/Debug/DebugUtils.cs create mode 100644 Content/Debug/pixel.png rename Content/Items/Boss/DuneWorm/{DuneWormTreasureBag.cs => DuneWyrmTreasureBag.cs} (85%) rename Content/Items/Boss/DuneWorm/{DuneWormTreasureBag.png => DuneWyrmTreasureBag.png} (100%) delete mode 100644 Content/NPCs/AncientDuneWorm/AncientDuneWormBody.png delete mode 100644 Content/NPCs/AncientDuneWorm/AncientDuneWormHead.png delete mode 100644 Content/NPCs/AncientDuneWorm/AncientDuneWormTail.png delete mode 100644 Content/NPCs/AncientTombCrawlerBody.cs delete mode 100644 Content/NPCs/AncientTombCrawlerBody.png delete mode 100644 Content/NPCs/AncientTombCrawlerHead.cs delete mode 100644 Content/NPCs/AncientTombCrawlerHead.png delete mode 100644 Content/NPCs/AncientTombCrawlerTail.cs delete mode 100644 Content/NPCs/AncientTombCrawlerTail.png create mode 100644 Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawler.cs create mode 100644 Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerBody.png create mode 100644 Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerHead.png create mode 100644 Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerTail.png rename Content/NPCs/{AncientDuneWorm/AncientDuneWorm.cs => DuneWyrm/DuneWyrm.cs} (51%) create mode 100644 Content/NPCs/DuneWyrm/DuneWyrmBody.png create mode 100644 Content/NPCs/DuneWyrm/DuneWyrmBody2.png create mode 100644 Content/NPCs/DuneWyrm/DuneWyrmHead.png rename Content/NPCs/{AncientDuneWorm/AncientDuneWormHead_Head_Boss.png => DuneWyrm/DuneWyrmHead_Head_Boss.png} (100%) create mode 100644 Content/NPCs/DuneWyrm/DuneWyrmTail.png diff --git a/Content/Debug/DebugAI.cs b/Content/Debug/DebugAI.cs new file mode 100644 index 0000000..d21491f --- /dev/null +++ b/Content/Debug/DebugAI.cs @@ -0,0 +1,36 @@ +using Decimation.Lib.Items; +using Terraria; +using Terraria.ID; +using Terraria.ModLoader; + +namespace Decimation.Content.Debug +{ + public class DebugAIItem : DecimationItem + { + public override string Texture => "Terraria/Item_" + ItemID.Star; + protected override string ItemName => "Debug AI"; + + protected override void Init() + { + } + + public override bool UseItem(Player player) + { + DebugAI.debugging = !DebugAI.debugging; + + return true; + } + } + + class DebugAI : GlobalNPC + { + public static bool debugging; + + public override bool PreAI(NPC npc) + { + if (debugging) return false; + + return base.PreAI(npc); + } + } +} \ No newline at end of file diff --git a/Content/Debug/DebugHitbox.cs b/Content/Debug/DebugHitbox.cs new file mode 100644 index 0000000..5e7ab31 --- /dev/null +++ b/Content/Debug/DebugHitbox.cs @@ -0,0 +1,38 @@ +using Decimation.Lib.Items; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Terraria; +using Terraria.ID; +using Terraria.ModLoader; + +namespace Decimation.Content.Debug +{ + public class DebugHitboxItem : DecimationItem + { + public override string Texture => "Terraria/Item_" + ItemID.Acorn; + protected override string ItemName => "Debug Hitbox"; + + protected override void Init() + { + } + + public override bool UseItem(Player player) + { + DebugHitbox.debugging = !DebugHitbox.debugging; + + return true; + } + } + + internal class DebugHitbox : GlobalNPC + { + public static bool debugging; + + public override bool PreDraw(NPC npc, SpriteBatch spriteBatch, Color drawColor) + { + if (debugging) npc.DrawDebugHitbox(spriteBatch); + + return base.PreDraw(npc, spriteBatch, drawColor); + } + } +} \ No newline at end of file diff --git a/Content/Debug/DebugSword.cs b/Content/Debug/DebugSword.cs new file mode 100644 index 0000000..654ca0d --- /dev/null +++ b/Content/Debug/DebugSword.cs @@ -0,0 +1,17 @@ +using Decimation.Lib.Items; +using Terraria.ID; + +namespace Decimation.Content.Debug +{ + public class DebugSword : DecimationWeapon + { + public override string Texture => "Terraria/Item_" + ItemID.CopperShortsword; + protected override string ItemName => "Debug Sword"; + protected override int Damages => 9999999; + + protected override void InitWeapon() + { + item.CloneDefaults(ItemID.CopperShortsword); + } + } +} \ No newline at end of file diff --git a/Content/Debug/DebugUtils.cs b/Content/Debug/DebugUtils.cs new file mode 100644 index 0000000..3c4fc70 --- /dev/null +++ b/Content/Debug/DebugUtils.cs @@ -0,0 +1,25 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Terraria; + +namespace Decimation.Content.Debug +{ + public static class DebugUtils + { + public static void DrawDebugHitbox(this NPC npc, SpriteBatch spriteBatch) + { + Texture2D debugTexture = Decimation.Instance.GetTexture("Content/Debug/pixel"); + + spriteBatch.Draw( + debugTexture, + new Rectangle( + (int) (npc.position.X - Main.screenPosition.X), + (int) (npc.position.Y - Main.screenPosition.Y), + (int) (npc.width * npc.scale), + (int) (npc.height * npc.scale) + ), + new Color(255, 0, 0, 20) + ); + } + } +} \ No newline at end of file diff --git a/Content/Debug/pixel.png b/Content/Debug/pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..b2358e43f8ae4a3d718aefb75787de58bb13473f GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}1TpU9r!jpge|Np<9f%7->Ush+= SQ$Ps@Pgg&ebxsLQ3=9DO%@HvG literal 0 HcmV?d00001 diff --git a/Content/Decimation.cs b/Content/Decimation.cs index 602ccc8..5f6d9d5 100644 --- a/Content/Decimation.cs +++ b/Content/Decimation.cs @@ -1,15 +1,15 @@ using System; +using System.Collections.Generic; using System.IO; +using Decimation.Content.NPCs.Arachnus; +using Decimation.Content.NPCs.DuneWyrm; +using Decimation.Content.UI; +using Decimation.Lib.Util; +using Microsoft.Xna.Framework; using Terraria; using Terraria.ID; using Terraria.ModLoader; -using Decimation.Content.NPCs.Arachnus; -using Decimation.Content.NPCs.AncientDuneWorm; -using Decimation.Content.UI; -using System.Collections.Generic; -using Decimation.Lib.Util; using Terraria.UI; -using Microsoft.Xna.Framework; namespace Decimation.Content { @@ -93,9 +93,12 @@ namespace Decimation.Content Mod bossChecklist = ModLoader.GetMod("BossChecklist"); if (bossChecklist != null) { - bossChecklist.Call("AddBossWithInfo", "The Bloodshot Eye", 2.5f, (Func)(() => DecimationWorld.downedBloodshotEye), "INSERT LATER"); - bossChecklist.Call("AddBossWithInfo", "The Ancient Dune Worm", 5.7f, (Func)(() => DecimationWorld.downedDuneWorm), "INSERT LATER"); - bossChecklist.Call("AddBossWithInfo", "Arachnus", 20f, (Func)(() => DecimationWorld.downedArachnus), "INSERT LATER"); + bossChecklist.Call("AddBossWithInfo", "The Bloodshot Eye", 2.5f, + (Func) (() => DecimationWorld.downedBloodshotEye), "INSERT LATER"); + bossChecklist.Call("AddBossWithInfo", "The Ancient Dune Worm", 5.7f, + (Func) (() => DecimationWorld.downedDuneWorm), "INSERT LATER"); + bossChecklist.Call("AddBossWithInfo", "Arachnus", 20f, + (Func) (() => DecimationWorld.downedArachnus), "INSERT LATER"); } } @@ -124,29 +127,31 @@ namespace Decimation.Content public override void HandlePacket(BinaryReader reader, int whoAmI) { - DecimationModMessageType msgType = (DecimationModMessageType)reader.ReadByte(); + DecimationModMessageType msgType = (DecimationModMessageType) reader.ReadByte(); switch (msgType) { case DecimationModMessageType.Arachnus: - Arachnus arachnus = (Arachnus)Main.npc[reader.ReadInt32()].modNPC; + Arachnus arachnus = (Arachnus) Main.npc[reader.ReadInt32()].modNPC; if (arachnus != null && arachnus.npc.active) { arachnus.HandlePacket(reader); } + break; case DecimationModMessageType.DuneWorm: - AncientDuneWormHead duneWorm = (AncientDuneWormHead)Main.npc[reader.ReadInt32()].modNPC; - if (duneWorm != null && duneWorm.npc.active) + DuneWyrmHead duneWyrm = (DuneWyrmHead) Main.npc[reader.ReadInt32()].modNPC; + if (duneWyrm != null && duneWyrm.npc.active) { // TODO multiplayer - //duneWorm.HandlePacket(reader); + // duneWyrm.HandlePacket(reader); } + break; case DecimationModMessageType.SpawnBoss: int type = reader.ReadInt32(); int player = reader.ReadInt32(); - Main.PlaySound(15, (int)Main.player[player].position.X, (int)Main.player[player].position.Y, 0); + Main.PlaySound(15, (int) Main.player[player].position.X, (int) Main.player[player].position.Y, 0); if (Main.netMode != 1) NPC.SpawnOnPlayer(player, type); break; diff --git a/Content/Items/Boss/DuneWorm/DesertDessert.cs b/Content/Items/Boss/DuneWorm/DesertDessert.cs index f97bbcd..6f3c6f9 100644 --- a/Content/Items/Boss/DuneWorm/DesertDessert.cs +++ b/Content/Items/Boss/DuneWorm/DesertDessert.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Decimation.Content.NPCs.AncientDuneWorm; +using Decimation.Content.NPCs.DuneWyrm; using Decimation.Lib.Items; using Terraria; using Terraria.ID; @@ -32,13 +32,13 @@ namespace Decimation.Content.Items.Boss.DuneWorm if (Main.netMode == 0) { Main.PlaySound(15, (int) player.position.X, (int) player.position.Y, 0); - NPC.SpawnOnPlayer(player.whoAmI, ModContent.NPCType()); + NPC.SpawnOnPlayer(player.whoAmI, ModContent.NPCType()); return true; } ModPacket packet = this.mod.GetPacket(); packet.Write((byte) DecimationModMessageType.SpawnBoss); - packet.Write(ModContent.NPCType()); + packet.Write(ModContent.NPCType()); packet.Write(player.whoAmI); packet.Send(); } diff --git a/Content/Items/Boss/DuneWorm/DuneWormTreasureBag.cs b/Content/Items/Boss/DuneWorm/DuneWyrmTreasureBag.cs similarity index 85% rename from Content/Items/Boss/DuneWorm/DuneWormTreasureBag.cs rename to Content/Items/Boss/DuneWorm/DuneWyrmTreasureBag.cs index 5fbdfa3..17faece 100644 --- a/Content/Items/Boss/DuneWorm/DuneWormTreasureBag.cs +++ b/Content/Items/Boss/DuneWorm/DuneWyrmTreasureBag.cs @@ -2,7 +2,7 @@ using Decimation.Content.Items.Misc.Souls; using Decimation.Content.Items.Placeable.DuneWorm; using Decimation.Content.Items.Tools; using Decimation.Content.Items.Vanity.DuneWorm; -using Decimation.Content.NPCs.AncientDuneWorm; +using Decimation.Content.NPCs.DuneWyrm; using Decimation.Lib.Items; using Decimation.Lib.Util; using Terraria; @@ -11,11 +11,11 @@ using Terraria.ModLoader; namespace Decimation.Content.Items.Boss.DuneWorm { - internal class DuneWormTreasureBag : DecimationItem + internal class DuneWyrmTreasureBag : DecimationItem { protected override string ItemName => "Treasure Bag"; protected override string ItemTooltip => "Right click to open"; - public override int BossBagNPC => ModContent.NPCType(); + public override int BossBagNPC => ModContent.NPCType(); protected override void Init() { @@ -23,8 +23,7 @@ namespace Decimation.Content.Items.Boss.DuneWorm item.width = 24; item.height = 24; item.rare = Rarity.Rainbow.GetRarityValue(); - - this.item.expert = true; + item.expert = true; } public override bool CanRightClick() diff --git a/Content/Items/Boss/DuneWorm/DuneWormTreasureBag.png b/Content/Items/Boss/DuneWorm/DuneWyrmTreasureBag.png similarity index 100% rename from Content/Items/Boss/DuneWorm/DuneWormTreasureBag.png rename to Content/Items/Boss/DuneWorm/DuneWyrmTreasureBag.png diff --git a/Content/Items/Placeable/DuneWorm/DuneWormTrophy.cs b/Content/Items/Placeable/DuneWorm/DuneWormTrophy.cs index 9520ed1..ef9d76d 100644 --- a/Content/Items/Placeable/DuneWorm/DuneWormTrophy.cs +++ b/Content/Items/Placeable/DuneWorm/DuneWormTrophy.cs @@ -12,8 +12,8 @@ namespace Decimation.Content.Items.Placeable.DuneWorm protected override void InitPlaceable() { - item.width = 30; - item.height = 30; + item.width = 32; + item.height = 32; this.item.maxStack = 99; this.item.value = Item.buyPrice(0, 5); } diff --git a/Content/Items/Placeable/DuneWorm/DuneWormTrophy.png b/Content/Items/Placeable/DuneWorm/DuneWormTrophy.png index cd6e53b8e56a2f330b7ff0fe7658a156cde7d1ea..0e52b0668adf52b5db2058654574d10376e3179d 100644 GIT binary patch literal 3342 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 Y0D;d0ie%VPSpWb407*qoM6N<$f&$b(k^lez literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^3=*07`vZ_l2=EDU1=9b|IHmnhOFIL^{~H+o z193w`LqbBre~`eLGynfHH2go42I6hmvPH(%o1vzjVaYOvBS#oEZeqB5_X<$K|Nrm* z{|~m-OmNXJ4YF*Dcbbynv8N|TOzmn~D zCY8pDO?*1(bKDXomdKI;Vst05QO+^8f$< diff --git a/Content/Items/Tools/TheHourGlass.cs b/Content/Items/Tools/TheHourGlass.cs index 1bf922a..8d41854 100644 --- a/Content/Items/Tools/TheHourGlass.cs +++ b/Content/Items/Tools/TheHourGlass.cs @@ -12,8 +12,8 @@ namespace Decimation.Content.Items.Tools protected override void InitTool() { this.item.mana = 50; - item.width = 22; - item.height = 36; + item.width = 21; + item.height = 21; item.useTime = 16; item.useAnimation = 16; item.useStyle = 4; diff --git a/Content/Items/Tools/TheHourGlass.png b/Content/Items/Tools/TheHourGlass.png index 1cae3861a565e834e75508ae67b5ff5792459fd3..e0a239a7a49fbeb9ef0c5df2ddcf29d1711afd35 100644 GIT binary patch literal 3514 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 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3I!3-pK-LP5@q!I#rLR^9L|1(Z$|I^aW0P+6@ zhW|j^(9n>OknkTQaOTYa{|pWP&!mBPTefU*aByg7U|;|t5dOcI`u^Wyc)ZW@*+!|gHT>!BYWC|SMS*rOmIV0)GdMiEkp|>&7I;J!GcfQS0b$0e z+I-SL!6r`^#}JK)Q!iiSJ0QTrdf}go@5Oij{}=7d@=h_nBYyHFbJUAJJiIr3w%P=m z{!YF+$NQwEYJBK%pVHvUAoC@L!bdfVwjA*=Np@Hf`S8Lan{<&K%ML3pj@_~CrdD-u z_>J}YpR7)@Gtb?9h<|b9>YB%M3`0yrRiEX3(!W<7x?8{Ov3X2;q3y(Z$If2^x`x5i L)z4*}Q$iB}`8JE( diff --git a/Content/Items/Vanity/DuneWorm/DuneWormMask.cs b/Content/Items/Vanity/DuneWorm/DuneWormMask.cs index 40f5075..2248b74 100644 --- a/Content/Items/Vanity/DuneWorm/DuneWormMask.cs +++ b/Content/Items/Vanity/DuneWorm/DuneWormMask.cs @@ -12,10 +12,10 @@ namespace Decimation.Content.Items.Vanity.DuneWorm protected override void Init() { - item.width = 36; - item.height = 32; + item.width = 34; + item.height = 34; item.rare = Rarity.Orange.GetRarityValue(); - this.item.vanity = true; + item.vanity = true; } public override bool DrawHead() diff --git a/Content/Items/Vanity/DuneWorm/DuneWormMask.png b/Content/Items/Vanity/DuneWorm/DuneWormMask.png index db61a248244240c58ecef324c31c0370c9eb9aba..2b9585745ff83fbf3145520b2addb32690f33151 100644 GIT binary patch literal 3328 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 KMNUMnLSTZ)tv>$% literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^DnP8j!3-pQ{k8T0se}NZ5LY1m|BO@G|FpC-K>WXf z;Xe>JG&Ce6B>V>noH_IVKSRU+Gie~+mMvQx92^=N7|t##1S&cOl$y}Xux#1tjI4TF z+XxHg|9fhd0R{j6-&Oy8d0QMwv+w&uqA48sp6ojA_)tPq_j zSZRId3(L<>wTm>Y6%W1Nvdd$355Xq(N6uRQ2i`~HG=&AX_tm!`c`2l|k~)78&qol`;+0AEtDZvX%Q diff --git a/Content/Items/Vanity/DuneWorm/DuneWormMask_Head.png b/Content/Items/Vanity/DuneWorm/DuneWormMask_Head.png index 44f8c0bb15b8374e892b6c983ba464eabf3f095b..007d0209cf98a7b9e1d08785137c76a556bca490 100644 GIT binary patch literal 5354 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 diff --git a/Content/Items/Weapons/HourHand.cs b/Content/Items/Weapons/HourHand.cs index 9b4c7ef..91abd89 100644 --- a/Content/Items/Weapons/HourHand.cs +++ b/Content/Items/Weapons/HourHand.cs @@ -14,8 +14,8 @@ namespace Decimation.Content.Items.Weapons protected override void InitWeapon() { - item.width = 35; - item.height = 35; + item.width = 32; + item.height = 32; item.useTime = 28; item.useAnimation = 28; item.knockBack = 5; diff --git a/Content/Items/Weapons/HourHand.png b/Content/Items/Weapons/HourHand.png index 4f1acea926a6e1e400f29824755445c389ccf118..beebd173212d791b91f0299ec1401133014660f3 100644 GIT binary patch literal 3910 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 diff --git a/Content/NPCs/AncientDuneWorm/AncientDuneWormBody.png b/Content/NPCs/AncientDuneWorm/AncientDuneWormBody.png deleted file mode 100644 index 7db32a91a147d1aa15e09d9a61137fbf10fdf8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2570 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 diff --git a/Content/NPCs/AncientDuneWorm/AncientDuneWormTail.png b/Content/NPCs/AncientDuneWorm/AncientDuneWormTail.png deleted file mode 100644 index 810952648b38445838178c202f990d0f521431a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3396 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 0) this.npc.realLife = (int) this.npc.ai[3]; - if (this.npc.target < 0 || this.npc.target == byte.MaxValue || Main.player[this.npc.target].dead) - this.npc.TargetClosest(); - if (Main.player[this.npc.target].dead && this.npc.timeLeft > 300) this.npc.timeLeft = 300; - - if (Main.netMode != 1) - if (!Main.npc[(int) this.npc.ai[1]].active) - { - this.npc.life = 0; - this.npc.HitEffect(); - this.npc.active = false; - NetMessage.SendData(28, -1, -1, null, this.npc.whoAmI, -1f); - } - - if (this.npc.ai[1] < (double) Main.npc.Length) - { - // We're getting the center of this NPC. - Vector2 npcCenter = new Vector2(this.npc.position.X + this.npc.width * 0.5f, - this.npc.position.Y + this.npc.height * 0.5f); - // Then using that center, we calculate the direction towards the 'parent NPC' of this NPC. - float dirX = Main.npc[(int) this.npc.ai[1]].position.X + Main.npc[(int) this.npc.ai[1]].width / 2f - - npcCenter.X; - float dirY = Main.npc[(int) this.npc.ai[1]].position.Y + Main.npc[(int) this.npc.ai[1]].height / 2f - - npcCenter.Y; - // We then use Atan2 to get a correct rotation towards that parent NPC. - this.npc.rotation = (float) Math.Atan2(dirY, dirX) + 1.57f; - // We also get the length of the direction vector. - float length = (float) Math.Sqrt(dirX * dirX + dirY * dirY); - // We calculate a new, correct distance. - float dist = (length - this.npc.width) / length; - float posX = dirX * dist; - float posY = dirY * dist; - - // Reset the velocity of this NPC, because we don't want it to move on its own - this.npc.velocity = Vector2.Zero; - // And set this NPCs position accordingly to that of this NPCs parent NPC. - this.npc.position.X = this.npc.position.X + posX; - this.npc.position.Y = this.npc.position.Y + posY; - } - - return false; - } - - public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) - { - Texture2D texture = Main.npcTexture[this.npc.type]; - Vector2 origin = new Vector2(texture.Width * 0.5f, texture.Height * 0.5f); - Main.spriteBatch.Draw(texture, this.npc.Center - Main.screenPosition, new Rectangle?(), drawColor, - this.npc.rotation, origin, this.npc.scale, SpriteEffects.None, 0); - return false; - } - - public override bool? DrawHealthBar(byte hbPosition, ref float scale, ref Vector2 position) - { - return false; //this make that the npc does not have a health bar - } - } -} \ No newline at end of file diff --git a/Content/NPCs/AncientTombCrawlerBody.png b/Content/NPCs/AncientTombCrawlerBody.png deleted file mode 100644 index 004eaa4c2e07be63bb1365959e8d70991ba3a49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^4L}^j!3-oP%J{AYQV9V*A+A8$L56!?iT&Ow39olm zmxbxQyR*|sQ#{JY=+2>uKyvl$nzkY@hTu-10Syfd4h{}mwru&ImUbrXKg0AFXa4_B z`wt=#5)v938vX;-FaRb0r=06qMPz|%T+ho)8Dn-~B8&wl(-XMHbYxfI(kJ?$GR z@)z1B$ny2ssmZ#VHv27}<*B~-7{~Jr-TXM6aM1-!Yq%OZ=Pyp_QI`I8`oy9GZsLyp z^-U`nw3#$+6bj8f*?Pg|rsbw<@1F-wcLb{5W6#i|zj%+y>y!RRRT*rzHGlYCwU*&M zQv*jNPteP35nNbcr|ZPT;rLM4Az4LcZ{KEf z2akqz%1nk9uYRw)&CbxrIYG`v%AHk!ZM#g9X6>c}Esup9IJn}OresF2a_VauF@)H) z{rUE~%$>R6+~haU+r`wT$}uZi2rXgtkc+FE$Ij%@-zXt-Q~W|4!xCKvkD}GRDW`dI zJ=Qb)-0t`C6+^LW25SdTL+7nFlPhK+2Xw!6X*V=!wqBYUb3^5=YRuV*TkGN@`oQ70 zKy50M#@Z-_*=^4+8RkBy?q-NvY^2s;cRq5$v_zeTyzi^SblpCk6|@mJkQ>Cx^g(JW zFnkRegPgbJp61nf+MT~Hbhf_RjTNTrFSShX6k;n}URG8<*g^ZCnU?L8r(wE` zCbQ*&o0eCc`+GdqqTzYi+j$Is!g5m>Jb1ODCrshI2J-9lm$#=`aGY%`nAXM2JZ0@I zU50=tqbg2&{i7k1mR|67)pY64YCXro&k-QD^f%LmqAP(O4e{zLZ%j0*Hd+QuWDK6J KelF{r5}E+@g(), Main.rand.Next(5, 11)); - } - - public override void BossLoot(ref string name, ref int potionType) - { - name = "An Ancient Tomb Crawler"; - potionType = ItemID.HealingPotion; - - base.BossLoot(ref name, ref potionType); - } - - public override bool PreAI() - { - if (Main.netMode != 1) - // So, we start the AI off by checking if npc.ai[0] is 0. - // This is practically ALWAYS the case with a freshly spawned NPC, so this means this is the first update. - // Since this is the first update, we can safely assume we need to spawn the rest of the worm (bodies + tail). - if (this.npc.ai[0] == 0) - { - // So, here we assing the npc.realLife value. - // The npc.realLife value is mainly used to determine which NPC loses life when we hit this NPC. - // We don't want every single piece of the worm to have its own HP pool, so this is a neat way to fix that. - this.npc.realLife = this.npc.whoAmI; - // LatestNPC is going to be used later on and I'll explain it there. - int latestNPC = this.npc.whoAmI; - - // Here we determine the length of the worm. - // In this case the worm will have a length of 10 to 14 body parts. - int wormLength = 20; - for (int i = 0; i < wormLength; ++i) - { - // We spawn a new NPC, setting latestNPC to the newer NPC, whilst also using that same variable - // to set the parent of this new NPC. The parent of the new NPC (may it be a tail or body part) - // will determine the movement of this new NPC. - // Under there, we also set the realLife value of the new NPC, because of what is explained above. - latestNPC = NPC.NewNPC((int) this.npc.Center.X, (int) this.npc.Center.Y, - ModContent.NPCType(), this.npc.whoAmI, 0, latestNPC); - Main.npc[latestNPC].realLife = this.npc.whoAmI; - Main.npc[latestNPC].ai[3] = this.npc.whoAmI; - } - - // When we're out of that loop, we want to 'close' the worm with a tail part! - latestNPC = NPC.NewNPC((int) this.npc.Center.X, (int) this.npc.Center.Y, - ModContent.NPCType(), this.npc.whoAmI, 0, latestNPC); - Main.npc[latestNPC].realLife = this.npc.whoAmI; - Main.npc[latestNPC].ai[3] = this.npc.whoAmI; - - // We're setting npc.ai[0] to 1, so that this 'if' is not triggered again. - this.npc.ai[0] = 1; - this.npc.netUpdate = true; - } - - int minTilePosX = (int) (this.npc.position.X / 16.0) - 1; - int maxTilePosX = (int) ((this.npc.position.X + this.npc.width) / 16.0) + 2; - int minTilePosY = (int) (this.npc.position.Y / 16.0) - 1; - int maxTilePosY = (int) ((this.npc.position.Y + this.npc.height) / 16.0) + 2; - if (minTilePosX < 0) - minTilePosX = 0; - if (maxTilePosX > Main.maxTilesX) - maxTilePosX = Main.maxTilesX; - if (minTilePosY < 0) - minTilePosY = 0; - if (maxTilePosY > Main.maxTilesY) - maxTilePosY = Main.maxTilesY; - - bool collision = false; - // This is the initial check for collision with tiles. - for (int i = minTilePosX; i < maxTilePosX; ++i) - for (int j = minTilePosY; j < maxTilePosY; ++j) - if (Main.tile[i, j] != null && - (Main.tile[i, j].nactive() && (Main.tileSolid[Main.tile[i, j].type] || - Main.tileSolidTop[Main.tile[i, j].type] && - Main.tile[i, j].frameY == 0) || Main.tile[i, j].liquid > 64)) - { - Vector2 vector2; - vector2.X = i * 16; - vector2.Y = j * 16; - if (this.npc.position.X + this.npc.width > vector2.X && this.npc.position.X < vector2.X + 16.0 && - this.npc.position.Y + this.npc.height > (double) vector2.Y && - this.npc.position.Y < vector2.Y + 16.0) - { - collision = true; - if (Main.rand.Next(100) == 0 && Main.tile[i, j].nactive()) - WorldGen.KillTile(i, j, true, true); - } - } - - // If there is no collision with tiles, we check if the distance between this NPC and its target is too large, so that we can still trigger 'collision'. - if (!collision) - { - Rectangle rectangle1 = new Rectangle((int) this.npc.position.X, (int) this.npc.position.Y, - this.npc.width, this.npc.height); - int maxDistance = 1000; - bool playerCollision = true; - for (int index = 0; index < 255; ++index) - if (Main.player[index].active) - { - Rectangle rectangle2 = new Rectangle((int) Main.player[index].position.X - maxDistance, - (int) Main.player[index].position.Y - maxDistance, maxDistance * 2, maxDistance * 2); - if (rectangle1.Intersects(rectangle2)) - { - playerCollision = false; - break; - } - } - - if (playerCollision) - collision = true; - } - - // speed determines the max speed at which this NPC can move. - // Higher value = faster speed. - float speed = 15f; - // acceleration is exactly what it sounds like. The speed at which this NPC accelerates. - float acceleration = 0.12f; - - Vector2 npcCenter = new Vector2(this.npc.position.X + this.npc.width * 0.5f, - this.npc.position.Y + this.npc.height * 0.5f); - float targetXPos = Main.player[this.npc.target].position.X + Main.player[this.npc.target].width / 2f; - float targetYPos = Main.player[this.npc.target].position.Y + Main.player[this.npc.target].height / 2f; - - float targetRoundedPosX = (int) (targetXPos / 16.0) * 16; - float targetRoundedPosY = (int) (targetYPos / 16.0) * 16; - npcCenter.X = (int) (npcCenter.X / 16.0) * 16; - npcCenter.Y = (int) (npcCenter.Y / 16.0) * 16; - float dirX = targetRoundedPosX - npcCenter.X; - float dirY = targetRoundedPosY - npcCenter.Y; - - float length = (float) Math.Sqrt(dirX * dirX + dirY * dirY); - // If we do not have any type of collision, we want the NPC to fall down and de-accelerate along the X axis. - if (!collision) - { - this.npc.TargetClosest(); - this.npc.velocity.Y = this.npc.velocity.Y + 0.11f; - if (this.npc.velocity.Y > speed) this.npc.velocity.Y = speed; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < speed * 0.4) - { - if (this.npc.velocity.X < 0.0) - this.npc.velocity.X = this.npc.velocity.X - acceleration * 1.1f; - else - this.npc.velocity.X = this.npc.velocity.X + acceleration * 1.1f; - } - else if (this.npc.velocity.Y == speed) - { - if (this.npc.velocity.X < dirX) - this.npc.velocity.X = this.npc.velocity.X + acceleration; - else if (this.npc.velocity.X > dirX) this.npc.velocity.X = this.npc.velocity.X - acceleration; - } - else if (this.npc.velocity.Y > 4.0) - { - if (this.npc.velocity.X < 0.0) - this.npc.velocity.X = this.npc.velocity.X + acceleration * 0.9f; - else - this.npc.velocity.X = this.npc.velocity.X - acceleration * 0.9f; - } - } - // Else we want to play some audio (soundDelay) and move towards our target. - else - { - if (this.npc.soundDelay == 0) - { - this.npc.soundDelay = 120; - Main.PlaySound(this.mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/Earthquake"), - this.npc.Center); - } - - float absDirX = Math.Abs(dirX); - float absDirY = Math.Abs(dirY); - float newSpeed = speed / length; - dirX = dirX * newSpeed; - dirY = dirY * newSpeed; - if (this.npc.velocity.X > 0.0 && dirX > 0.0 || this.npc.velocity.X < 0.0 && dirX < 0.0 || - this.npc.velocity.Y > 0.0 && dirY > 0.0 || this.npc.velocity.Y < 0.0 && dirY < 0.0) - { - if (this.npc.velocity.X < dirX) - this.npc.velocity.X = this.npc.velocity.X + acceleration; - else if (this.npc.velocity.X > dirX) this.npc.velocity.X = this.npc.velocity.X - acceleration; - if (this.npc.velocity.Y < dirY) - this.npc.velocity.Y = this.npc.velocity.Y + acceleration; - else if (this.npc.velocity.Y > dirY) this.npc.velocity.Y = this.npc.velocity.Y - acceleration; - if (Math.Abs(dirY) < speed * 0.2 && - (this.npc.velocity.X > 0.0 && dirX < 0.0 || this.npc.velocity.X < 0.0 && dirX > 0.0)) - { - if (this.npc.velocity.Y > 0.0) - this.npc.velocity.Y = this.npc.velocity.Y + acceleration * 2f; - else - this.npc.velocity.Y = this.npc.velocity.Y - acceleration * 2f; - } - - if (Math.Abs(dirX) < speed * 0.2 && - (this.npc.velocity.Y > 0.0 && dirY < 0.0 || this.npc.velocity.Y < 0.0 && dirY > 0.0)) - { - if (this.npc.velocity.X > 0.0) - this.npc.velocity.X = this.npc.velocity.X + acceleration * 2f; - else - this.npc.velocity.X = this.npc.velocity.X - acceleration * 2f; - } - } - else if (absDirX > absDirY) - { - if (this.npc.velocity.X < dirX) - this.npc.velocity.X = this.npc.velocity.X + acceleration * 1.1f; - else if (this.npc.velocity.X > dirX) - this.npc.velocity.X = this.npc.velocity.X - acceleration * 1.1f; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < speed * 0.5) - { - if (this.npc.velocity.Y > 0.0) - this.npc.velocity.Y = this.npc.velocity.Y + acceleration; - else - this.npc.velocity.Y = this.npc.velocity.Y - acceleration; - } - } - else - { - if (this.npc.velocity.Y < dirY) - this.npc.velocity.Y = this.npc.velocity.Y + acceleration * 1.1f; - else if (this.npc.velocity.Y > dirY) - this.npc.velocity.Y = this.npc.velocity.Y - acceleration * 1.1f; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < speed * 0.5) - { - if (this.npc.velocity.X > 0.0) - this.npc.velocity.X = this.npc.velocity.X + acceleration; - else - this.npc.velocity.X = this.npc.velocity.X - acceleration; - } - } - } - - // Set the correct rotation for this NPC. - this.npc.rotation = (float) Math.Atan2(this.npc.velocity.Y, this.npc.velocity.X) + 1.57f; - - // Some netupdate stuff (multiplayer compatibility). - if (collision) - { - if (this.npc.localAI[0] != 1) this.npc.netUpdate = true; - this.npc.localAI[0] = 1f; - } - else - { - if (this.npc.localAI[0] != 0.0) this.npc.netUpdate = true; - this.npc.localAI[0] = 0.0f; - } - - if ((this.npc.velocity.X > 0.0 && this.npc.oldVelocity.X < 0.0 || - this.npc.velocity.X < 0.0 && this.npc.oldVelocity.X > 0.0 || - this.npc.velocity.Y > 0.0 && this.npc.oldVelocity.Y < 0.0 || - this.npc.velocity.Y < 0.0 && this.npc.oldVelocity.Y > 0.0) && - !this.npc.justHit) this.npc.netUpdate = true; - - return false; - } - - public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) - { - Texture2D texture = Main.npcTexture[this.npc.type]; - Vector2 origin = new Vector2(texture.Width * 0.5f, texture.Height * 0.5f); - Main.spriteBatch.Draw(texture, this.npc.Center - Main.screenPosition, new Rectangle?(), drawColor, - this.npc.rotation, origin, this.npc.scale, SpriteEffects.None, 0); - return false; - } - - public override bool? DrawHealthBar(byte hbPosition, ref float scale, ref Vector2 position) - { - scale = 1.9f; //this make the NPC Health Bar biger - return null; - } - } -} \ No newline at end of file diff --git a/Content/NPCs/AncientTombCrawlerHead.png b/Content/NPCs/AncientTombCrawlerHead.png deleted file mode 100644 index 57fe0d86d1a0cb5f1d31791c0c83fb1268e6f088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911 zcmeAS@N?(olHy`uVBq!ia0vp^4M1GQ!3-oFUaoEfQV9V*A+A6=%E##4ot;LS;%!A< zcMeTlJ-fz1hC9(x@AaG&KBg09pf-{GWCPC=Qfy+FQv3-`;uGalG^_uYTS zA2aWsbN<2`aN9$Zee-h$u7}$CHzvd~{FwKfP2k{jnSSpp3< zHv4%SXOv{h@)@;HJfqm{b-QUOMDxW`C1v;?$0tTPRhMy4Xz3b9=dS>NzhHDGb88rW#Sa{r! z&-Yv)Q^U#Dvr7Bd-B3GVk;k~;tqJ@3Z45ohyBU)EUNf)ou4cHrq-bl=iKOn0Qvc1? zK4fEYcmhJK7O^9hSea=vNRDa(N&IUFHmD<{dS4=r<3aa;l zrs&UPy)Zx1M_BjC>EBWeZwsxPZ_Q)SITY5gX+1x~%p>A@Mu!eYDors`ZJD)V=ilcS z=eZlk{$jW=`+RYWX~U&`H5* 0) - npc.realLife = (int)npc.ai[3]; - if (npc.target < 0 || npc.target == byte.MaxValue || Main.player[npc.target].dead) - npc.TargetClosest(true); - if (Main.player[npc.target].dead && npc.timeLeft > 300) - npc.timeLeft = 300; - - if (Main.netMode != 1) - { - if (!Main.npc[(int)npc.ai[1]].active) - { - npc.life = 0; - npc.HitEffect(0, 10.0); - npc.active = false; - NetMessage.SendData(28, -1, -1, null, npc.whoAmI, -1f, 0.0f, 0.0f, 0, 0, 0); - } - } - - if (npc.ai[1] < (double)Main.npc.Length) - { - // We're getting the center of this NPC. - Vector2 npcCenter = new Vector2(npc.position.X + (float)npc.width * 0.5f, npc.position.Y + (float)npc.height * 0.5f); - // Then using that center, we calculate the direction towards the 'parent NPC' of this NPC. - float dirX = Main.npc[(int)npc.ai[1]].position.X + (float)(Main.npc[(int)npc.ai[1]].width / 2) - npcCenter.X; - float dirY = Main.npc[(int)npc.ai[1]].position.Y + (float)(Main.npc[(int)npc.ai[1]].height / 2) - npcCenter.Y; - // We then use Atan2 to get a correct rotation towards that parent NPC. - npc.rotation = (float)Math.Atan2(dirY, dirX) + 1.57f; - // We also get the length of the direction vector. - float length = (float)Math.Sqrt(dirX * dirX + dirY * dirY); - // We calculate a new, correct distance. - float dist = (length - (float)npc.width) / length; - float posX = dirX * dist; - float posY = dirY * dist; - - // Reset the velocity of this NPC, because we don't want it to move on its own - npc.velocity = Vector2.Zero; - // And set this NPCs position accordingly to that of this NPCs parent NPC. - npc.position.X = npc.position.X + posX; - npc.position.Y = npc.position.Y + posY; - } - return false; - } - - public override bool PreDraw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch, Color drawColor) - { - Texture2D texture = Main.npcTexture[npc.type]; - Vector2 origin = new Vector2(texture.Width * 0.5f, texture.Height * 0.5f); - Main.spriteBatch.Draw(texture, npc.Center - Main.screenPosition, new Rectangle?(), drawColor, npc.rotation, origin, npc.scale, SpriteEffects.None, 0); - return false; - } - public override bool? DrawHealthBar(byte hbPosition, ref float scale, ref Vector2 position) - { - return false; //this make that the npc does not have a health bar - } - } -} diff --git a/Content/NPCs/AncientTombCrawlerTail.png b/Content/NPCs/AncientTombCrawlerTail.png deleted file mode 100644 index 4bfffa2563618e67b594c7a67d6cda5992d8f241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmeAS@N?(olHy`uVBq!ia0vp^4M3d2!3-oTO;6+kse}NZ5LY1WAj3Vc#D4FTgx9;O z%fj^D-PsxCW3+m9&7DIN8$jA11c+{EU~q77*s^8I|FpC-Y5y4-{-62(KMhPIBqTI6 zH2ept0!sc*I|CF4$~djdU;x>rP!i-9% zFll(YIEG|2zMXNf=#T-Ai+97eGfyP?e*V9oGw0~$Y|qAp(=D36O=;Nsdsf7@Q`e_o z^fXyxrN3*9Rkxm7`tnbjGFL7?vs86pdczgK78CyRNYQ)e{k=9mGndzM%$e_`0+ir5 zu)>i=*)MEIM460iiA%r)&JETF&THNJ-CJ5M{O$DlyrW_anVc8w9b$b94_wt?`@p^3 zp5e})by?i*YyTeZXVh_vndDKOP{I|Uc31rDXOoYn89(;C_!qDr_!L88& zKT~8@8!i&G@6&C_bGf>?oI$L6?inK$hg!j}vl#9z);+hFp+c~Mqo<$2VtqM7PWN`# z9FJ8M@5L9@|LJ+O=<@GL8*d8A@+{cL5mPJX(8|EZ{dNXJ&%V1}vl(_LZn&(;y1?WX zlY>OK(S&OyF6=A{ZS_Cqvm}(pF#NevW~9`xyme&FE13{&I1})%dFw{=kCkSd*$8@ dEH`8y@Xt;=W}4E$!2(Q344$rjF6*2UngE-eVT%9& diff --git a/Content/NPCs/Bloodshot/BloodshotEye.cs b/Content/NPCs/Bloodshot/BloodshotEye.cs index b54f32f..0ac0462 100644 --- a/Content/NPCs/Bloodshot/BloodshotEye.cs +++ b/Content/NPCs/Bloodshot/BloodshotEye.cs @@ -783,7 +783,7 @@ namespace Decimation.Content.NPCs.Bloodshot public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) { - Vector2 frameSize = new Vector2(110, 110); + Vector2 frameSize = new Vector2(npc.width, npc.height); Texture2D texture = mod.GetTexture("Content/NPCs/Bloodshot/BloodshotEye"); spriteBatch.Draw diff --git a/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawler.cs b/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawler.cs new file mode 100644 index 0000000..abab822 --- /dev/null +++ b/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawler.cs @@ -0,0 +1,146 @@ +using Decimation.Content.Items.Misc.Souls; +using Decimation.Lib.NPCs; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Terraria; +using Terraria.ID; +using Terraria.ModLoader; + +namespace Decimation.Content.NPCs.DuneWyrm.AncientTombCrawler +{ + public class AncientTombCrawlerHead : AncientTombCrawler + { + public override void SetDefaults() + { + npc.lifeMax = 2500; + npc.damage = 50; + npc.defense = 5; + npc.width = 38; + npc.height = 38; + npc.value = Item.buyPrice(gold: 3); + npc.npcSlots = 1f; + npc.aiStyle = -1; + npc.boss = true; + music = mod.GetSoundSlot(SoundType.Music, "Sounds/Music/The_Deserts_Call"); + } + + public override void Init() + { + base.Init(); + head = true; + } + + public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) + { + if (Main.rand.NextBool(20)) target.AddBuff(BuffID.Darkness, 600); + } + + public override void OnHitPlayer(Player target, int damage, bool crit) + { + if (Main.rand.NextBool(20)) target.AddBuff(BuffID.Darkness, 600); + } + + public override void NPCLoot() + { + Item.NewItem(npc.Center, ModContent.ItemType(), Main.rand.Next(5, 11)); + } + + public override void BossLoot(ref string name, ref int potionType) + { + name = "An Ancient Tomb Crawler"; + potionType = ItemID.HealingPotion; + + base.BossLoot(ref name, ref potionType); + } + + public override bool? DrawHealthBar(byte hbPosition, ref float scale, ref Vector2 position) + { + scale = 1.3f; //this make the NPC Health Bar biger + return base.DrawHealthBar(hbPosition, ref scale, ref position); + } + + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) + { + Draw("Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerHead", spriteBatch, drawColor); + + return false; + } + } + + public class AncientTombCrawlerBody : AncientTombCrawler + { + public override void SetDefaults() + { + npc.width = 24; + npc.height = 24; + npc.damage = 35; + npc.defense = 2; + npc.lifeMax = 1; + npc.dontCountMe = true; + } + + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) + { + Draw("Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerBody", spriteBatch, drawColor); + + return false; + } + } + + public class AncientTombCrawlerTail : AncientTombCrawler + { + public override void SetDefaults() + { + npc.width = 20; + npc.height = 20; + npc.damage = 35; + npc.defense = 2; + npc.lifeMax = 1; + npc.dontCountMe = true; + } + + public override void Init() + { + base.Init(); + tail = true; + } + + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) + { + Draw("Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerTail", spriteBatch, drawColor); + + return false; + } + } + + public abstract class AncientTombCrawler : Worm + { + protected const float BaseSpeed = 10f; + + public override void SetStaticDefaults() + { + DisplayName.SetDefault("Ancient Tomb Crawler"); + } + + public override void Init() + { + minLength = 8; + maxLength = 8; + tailType = ModContent.NPCType(); + bodyType = ModContent.NPCType(); + headType = ModContent.NPCType(); + speed = BaseSpeed; + turnSpeed = 0.045f; + npc.scale = 1.5f; + npc.lavaImmune = true; + npc.noGravity = true; + npc.noTileCollide = true; + npc.behindTiles = true; + npc.knockBackResist = 0f; + npc.netAlways = true; + npc.DeathSound = SoundID.NPCDeath18; + npc.HitSound = SoundID.NPCHit1; + undergroundSound = mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/Earthquake"); + } + } +} \ No newline at end of file diff --git a/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerBody.png b/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerBody.png new file mode 100644 index 0000000000000000000000000000000000000000..3c835768add5a98efbaf54acb955af6f647f9321 GIT binary patch literal 441 zcmV;q0Y?6bP)W-L4&-3vu@2sfpD9G?0SbPVUpt&-N?b9TUqS3_t^usWKq* z9Frb{FaQESJkC$;-q+VFAfX_2WZ>PAC)LG(tmlKr^oM2 zrzV)g#4-p2ATu)Noy?pco}RnCQzktIVE_cy&1PKHqyE4b%Fy~im+0RBWUjh*3>YtV zau|SHb7YD--rqWBbFt=5Z3iC=4&X9}2{lO9Ue#k6gaK#r{H0Kt+seYc2MH zJFZ*|klSQ;9&#P6_*?|_FaVsXx<^gU7sU+107}(#_1QEGKm$8R zm1HDJEwZ2np*AIHP}D5Ug{v|#IJZZ*$9wt4lDN7#-rsre^S$SOhc7nkFaI_#%Nchq z?dczlx%#8#>v88M*=UXWA-zY`{C^h41~n%d&iW}63r?68v_7#`PWqzvmBi+=jZOz_D$TX}k2c=3)+O>UTjNtE7Mw7j zAdY#Z<(B+gcmAWqvXzD)q_l@(#n&uC;~x$>y&37T;Dxn4cH z%`P?UveuE!SrePF!s?oD7zjT%SYGRXXR`NO=O>9*pO#5HTwUeN>S-tT--Jb(UT3BD zm^LIH%PFX^h~ZJ@cXhPMzg~|8FU)89`70L5$(m|X5+Qc#&WQ0?@mz^`>||A+v^BBv zJ!hnUZ&{(ltce99j7ONF z?Xlp5A&5uEiQcB)TjVq`h~TwD<=xUnl|Y@P?=P}3b@K^ZNL-cw-6j^iFy!MgvZN>1 z+|;L&za*BFE|*AM=F3vwy>+{LP}axeMG`Za0f}EenB!+V+(^L(D#x%-%#Sa8C$AYJb0?4%8uiLCwO zLA+NoyI-b4h-~AXs6C~1OsdC%6Xr{T${pL~FnEp|9}jU-yhuA)FlIr3*y1H7`_?5) zH9-~*4`(b$lWu-pe+45I&FR>nCzWpPK1t-iW$oIjGR~KJ-G%@a_ zm%ZlQN7X?8;DD(jAn7GGb%707*qoM6N<$f~6y*z5oCK literal 0 HcmV?d00001 diff --git a/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerTail.png b/Content/NPCs/DuneWyrm/AncientTombCrawler/AncientTombCrawlerTail.png new file mode 100644 index 0000000000000000000000000000000000000000..0063ae87e1aa70e74dcfc79f1b507d881890c07b GIT binary patch literal 465 zcmV;?0WSWDP)Ox0VHk7b~DZ&}cR5uW2l1Bwe_k~q^LOaavlgyj@i4uC}t z%%X|Qzkr$O>Imi(sv8K)%ed0vi_NlR<`f(Wo1lR>a|({U?5KT;v~&p1DdZXm&%@Pq zV4EklHet=fxCC*=az3>UT(Nlz*b%d*F9Fj!hH7Bi(gKpF(Zyjt!RbPZ4TOaq%ph18 z!CaD>8G{mR=q`lkAZVB~(#$~g*mL%Z01Lrf2y+=s-QI00utqrCg;X;TSGs})1-eTk ze0{Ly5STd_bqabGq}V|89CPLTEv)GgmrHTide9t0H3MN@hj|%S?2_F2qS!$6SVvFz zWXCdkY{Rl9)eJ;0*3iR_U^+y1A=L~-HyD@8h;|{V1_A)$z*E+Bu^2@F0000())) { if (Main.netMode != 1) - NPC.SpawnOnPlayer(this.npc.target, ModContent.NPCType()); + NPC.SpawnOnPlayer(npc.target, ModContent.NPCType()); _spawnedAncientTombCrawler = true; } - _previousTile = Main.tile[(int) this.npc.Center.X / 16, (int) this.npc.Center.Y / 16].type; + _previousTile = Main.tile[(int) npc.Center.X / 16, (int) npc.Center.Y / 16].type; } public override bool ShouldRun() @@ -100,40 +96,40 @@ namespace Decimation.Content.NPCs.AncientDuneWorm bool playersActive = Main.player.Any(p => p.active); bool playersDead = Main.player.Any(p => p.dead); - return !Main.player[this.npc.target].ZoneDesert || !playersActive || playersDead; + return !Main.player[npc.target].ZoneDesert || !playersActive || playersDead; } private void ComputeSpeed() { const float ratio = 0.4545454f; - float deltaLife = this.npc.lifeMax / 2f - this.npc.life; + float deltaLife = npc.lifeMax / 2f - npc.life; float addedSpeed = deltaLife * ratio / 1000f; speed = BaseSpeed + addedSpeed; } private void SummonSandnado() { - int tile = Main.tile[(int) this.npc.Center.X / 16, (int) this.npc.Center.Y / 16].type; + int tile = Main.tile[(int) npc.Center.X / 16, (int) npc.Center.Y / 16].type; if (tile == 0 && _previousTile != 0 && Main.netMode != 1) - Projectile.NewProjectile(this.npc.Center, new Vector2(0, 0), ProjectileID.SandnadoHostile, 15, 10f); + Projectile.NewProjectile(npc.Center, new Vector2(0, 0), ProjectileID.SandnadoHostile, 15, 10f); } private void ShootAmmonite() { - Main.PlaySound(SoundID.Item14, this.npc.Center); + Main.PlaySound(SoundID.Item14, npc.Center); // Smoke for (int i = 0; i < 50; i++) { - int dustIndex = Dust.NewDust(new Vector2(this.npc.position.X, this.npc.position.Y), this.npc.width, - this.npc.height, 31, 0f, 0f, 100, default, 2f); + int dustIndex = Dust.NewDust(new Vector2(npc.position.X, npc.position.Y), npc.width, + npc.height, 31, 0f, 0f, 100, default, 2f); Main.dust[dustIndex].velocity *= 1.4f; } - float x = this.npc.position.X + this.npc.width / 2f - 24f; - float y = this.npc.position.Y + this.npc.height / 2f - 24f; + float x = npc.position.X + npc.width / 2f - 24f; + float y = npc.position.Y + npc.height / 2f - 24f; for (int g = 0; g < 2; g++) { @@ -165,7 +161,7 @@ namespace Decimation.Content.NPCs.AncientDuneWorm if (Main.netMode != 1) for (int i = 0; i < ammoniteNbr; i++) - Projectile.NewProjectile(this.npc.Center, + Projectile.NewProjectile(npc.Center, new Vector2(Main.rand.Next(-8, 9), Main.rand.Next(8, 15)), ModContent.ProjectileType(), 15, 5f); } @@ -175,45 +171,79 @@ namespace Decimation.Content.NPCs.AncientDuneWorm scale = 1.9f; //this make the NPC Health Bar bigger return null; } - } - internal class AncientDuneWormBody : AncientDuneWorm - { - public override void SetDefaults() + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) { - this.npc.width = 92; - this.npc.height = 92; - this.npc.damage = 45; - this.npc.defense = 5; - this.npc.lifeMax = 1; - this.npc.knockBackResist = 0.0f; - this.npc.behindTiles = true; - this.npc.noTileCollide = true; - this.npc.netAlways = true; - this.npc.noGravity = true; - this.npc.dontCountMe = true; - this.npc.DeathSound = SoundID.NPCDeath18; - this.npc.HitSound = SoundID.NPCHit1; + Draw("Content/NPCs/DuneWyrm/DuneWyrmHead", spriteBatch, drawColor); + + return false; } } - internal class AncientDuneWormTail : AncientDuneWorm + internal class DuneWyrmBody : DuneWyrm + { + public static int bodyPartsCount; + private int _bodyIndex; + + public override void SetDefaults() + { + npc.width = 66; + npc.height = 66; + npc.damage = 45; + npc.defense = 5; + npc.lifeMax = 1; + npc.dontCountMe = true; + + _bodyIndex = bodyPartsCount++; + } + + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) + { + Vector2 frameSize = new Vector2(npc.width, npc.height); + Texture2D texture = mod.GetTexture("Content/NPCs/DuneWyrm/DuneWyrmBody"); + Rectangle sourceRectangle = npc.frame; + + if (_bodyIndex % 4 == 0) + { + texture = mod.GetTexture("Content/NPCs/DuneWyrm/DuneWyrmBody2"); + sourceRectangle.Width = 88; + sourceRectangle.Height = 66; + frameSize.X += 11; + frameSize.Y -= 10; + } + + Vector2 position = new Vector2( + npc.position.X - Main.screenPosition.X + frameSize.X / 2f, + npc.position.Y - Main.screenPosition.Y + frameSize.Y / 2f + ); + + spriteBatch.Draw + ( + texture, + position, + sourceRectangle, + drawColor, + npc.rotation, + frameSize * 0.5f, + npc.scale, + SpriteEffects.None, + 0f + ); + + return false; + } + } + + internal class DuneWyrmTail : DuneWyrm { public override void SetDefaults() { - this.npc.width = 136; - this.npc.height = 128; - this.npc.damage = 45; - this.npc.defense = 14; - this.npc.lifeMax = 1; - this.npc.knockBackResist = 0.0f; - this.npc.behindTiles = true; - this.npc.noTileCollide = true; - this.npc.netAlways = true; - this.npc.noGravity = true; - this.npc.dontCountMe = true; - this.npc.DeathSound = SoundID.NPCDeath18; - this.npc.HitSound = SoundID.NPCHit1; + npc.width = 54; + npc.height = 54; + npc.damage = 45; + npc.defense = 14; + npc.lifeMax = 1; + npc.dontCountMe = true; } public override void Init() @@ -221,26 +251,43 @@ namespace Decimation.Content.NPCs.AncientDuneWorm base.Init(); tail = true; } + + public override bool PreDraw(SpriteBatch spriteBatch, Color drawColor) + { + Draw("Content/NPCs/DuneWyrm/DuneWyrmTail", spriteBatch, drawColor); + + return false; + } } - public abstract class AncientDuneWorm : Worm + public abstract class DuneWyrm : Worm { protected const float BaseSpeed = 10f; public override void SetStaticDefaults() { - this.DisplayName.SetDefault("Ancient Dune Worm"); + DisplayName.SetDefault("Dune Wyrm"); } public override void Init() { minLength = 16; maxLength = 16; - tailType = ModContent.NPCType(); - bodyType = ModContent.NPCType(); - headType = ModContent.NPCType(); + tailType = ModContent.NPCType(); + bodyType = ModContent.NPCType(); + headType = ModContent.NPCType(); speed = BaseSpeed; turnSpeed = 0.045f; + npc.scale = 1.5f; + npc.lavaImmune = true; + npc.noGravity = true; + npc.noTileCollide = true; + npc.behindTiles = true; + npc.knockBackResist = 0f; + npc.netAlways = true; + npc.DeathSound = SoundID.NPCDeath18; + npc.HitSound = SoundID.NPCHit1; + undergroundSound = mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/Earthquake"); } } } \ No newline at end of file diff --git a/Content/NPCs/DuneWyrm/DuneWyrmBody.png b/Content/NPCs/DuneWyrm/DuneWyrmBody.png new file mode 100644 index 0000000000000000000000000000000000000000..96020ebfdd7dcb36b20c97e94df0a309d3d73f16 GIT binary patch literal 1536 zcmV+b2LJhqP)exY+_bLW2doO928-se2;bKZMf#x?n`y}jed@3$Bp9%>1> zW!ZiqW7ldEG^w(K|LRxvfy(wPJJ-sA;0KsBdr@I-Z(cvObHxnwN577adDi~k-QL1D zq09;eCIOKnRT&T-6A&3N!i&_Ft$VD=?Y<%txPMj5NI+D@2xbBz&Dy|>Sg~@0{WLW6 zyrzaQBa~L4bEC{?m=Vzfp)>(&STO>TWhSs@pdJ5??1AyC(u~rKNI>Kv0uXI&?S-IC zo-)JEnHe}&+Q5L!2&`2^h8e+;Kt$)x%N!^B z1TQ;y*`{pvXqXYv0#UDnRC@;a1Tf~s^K1{oT7c_HBa~yUml<_4B3dB4G|5h~ULUch zJ9C)O3ic1mc`6^lOEol`xQvJ%2yY1>@|->q0nb@JebR4CShRSx9dW*XplxBoS!RUZMWLN_{N69_{ z5k#cmFfsnMtLF;Z!9D_kVQm4Ucs{Hx4KpHIAn@S4%T!q*G>dRO0-6A4iTi>%%9p6R zhT8RdPBYj?fRfPxp-OO`lT@0)Ya0<)j6ik(@M_n|%qdIs8sk zEkVy=j$uRsf*8STUDYC0g!%mgSDV>!vV&x%p+9z~@Ex38&<|OLp9Ad&2Ok$mAQ=%Y z5LgoM@XFyaK&;Y;oU-KX{Si6dRjNG(`wFyUX0TRp)ttZ67-dBCKqvsz+EYG3t!b5g z&>jp@OyqW~RjNY9^F%wPF)ay*tYkO}1S1Gl^j7Sc zNELy3kAnLl(yT3fU*5Cu?$UF_!5Wc($Ps{#0P=_kN7(zu34nU-cyGYpPw@SjL8|Uh znU6?7>!{y>EM)f#1Dqq8(T7&d!ywQg5DEBbX6PH`Ec}7Qs=z#zLYnQhg!iUav6_DR`VnQK!oJEvMt17d~2G9&1A4?TX-F#rF-SXg$ z2X;JuJ!7utFkMC@Ao5TGi1SA~?3Yt#Kicuu{cm=B@P4Wt5gDBG8fIpw?4tT{t&;DD zb7pSOvaA&6X+Ep+?Lu+A|77M5W^Nj^=>FI)bqF+k$_MLHD^~McpIH~|9eBK*-LLIBd`)O}Xc{9D5F(qvN5IK(R)O=Iv*3LpIA8$M zG%jx6KV<(x^;K3tdoMdQjS)O>bU-)~GP+3{b$S;*TbH+2I_(IDx_rraI|ozV_P(r{ z72sscM%8#-mJSM%y4g`xSA`30(yYnSu#Nn*+)w3|$&6eFWcmb+hBfJ}`^cpP? z5KjO%W|x>R8Fq+Vi)=J2c!6uWMnn&U7Xe;6Q)doX7q61!ja&A5(-`4RC;>qT0gz_- m11})B{?{0R3H&QS`~>}dNILfuDA)i1002ovPDHLkV1fYLL)Vi4 literal 0 HcmV?d00001 diff --git a/Content/NPCs/DuneWyrm/DuneWyrmBody2.png b/Content/NPCs/DuneWyrm/DuneWyrmBody2.png new file mode 100644 index 0000000000000000000000000000000000000000..c65a6751a959d2c98c19d3d6e010c86435539e4e GIT binary patch literal 1725 zcmV;u215CXP)f;LMcrl zdXp;l4-F}JP!!F&Yg6}s`abd&S-EFz;Oa(0?dH^ zc*`?r$LnvEVhEl$@#ztF|JE)3Irswup{;yfH4n_jbuhdvlTlA@Z!Dt|z@o=G4lrvZ z7`6Stu2Kx9*zznRK z&8^v*84I_dw3Ri~Vlc{E8qU5Mnyj?6uJ+^k1qRpkf&{RKI0IM#+qdo|SMZ-3f4L(w zO=+FQSlp+chwF;T%wY8#EAnGT!`<)%fqF0=)<{kOHvG;7RsPe8 z#F&{%Q`PxU-^`I8&jIYadF1f>!C;ibQcD9YGjY^_VIzq-~_Pm5+yCs09&>UFXD)ZCxy`2o@ZxfE=CTt zP0ikxizr*4vh7uFqLBd3cX`JF<_v+g8l_gpl)GRCvzDufF4T`Jcf;>hZb7*Llvhg# zYK@}6-~_N=98!xyr2%GxZS|z;Q7~Q^c9n^+B05Yiyy(KNgWb>Zi78iA<$9osOVT#m?;59T$6Po^hx^#xP; zJPP5uiZGRrwTQ*UJUIEKyJdNK$pvu<;3k3{2Y7P-yE(1mo=`o>4CZoJRkPNWLz&B& z6@H(^WaJV#n;ojXcps1aEaL0)nUCq&f88--Z~{0k%^wZ$uJ^|r;vbB@;f`e)3})~; zD|+7A2Vq5a9IA4}XJwbUe*D|Y*?{VM|kkVD2L~8+U@o-0kpOPJ$xul}Wq{GsXMdOr zVlXqCf2%bKM2ft_hg}5c%%Is|D7y&7c&-=xFwTeiVgL+DweTu1*t&tWC;{vdP=w3? z9vFDl6?}Q{p*t>Iz2lCSi(tUPSZha(itsoyz)4tWDr+fgEz^o3>Msv7%EXe1b@t~0Z6pW49##;ZMTDqD;Z5SvW~z_BB{Fo7k2TQj+50A^o` z%m(jx=SU9>R%w6U7lHDuwXB^O2`aMV5vDR4Yyz%c`Pscntu_{H8ctMYZ~{2r#nR(4 z(AJs+uMhKXOlGjfKxQ&CSTPs(sZ~186{4IKDl;DU?)tC(qZzE2oB;M4bTIj^7{KTt zXc>RbrM75Uv%9*^5gq$w_R&`TtgJF7J3PlCUhNWLH6Q`pLLYSq54OIVH(yk-K&Vtm1}A{q_dqnjxM8J$Rn1Y_%yzIMA){|k z07pX>cSC7_yREsQ%>t9HNGtStb(MpiRc@=0lS=@{LI2zU9M|mbm4;L(Vm>nr?jB@u zZ;A%E*IYzgbGuhM)O8gYoB$5%q-cP7wWwDoyRhbWzLX^msDX^+62M`RoQ2b4NmS7* TL8m#;00000NkvXXu0mjfoLNVA literal 0 HcmV?d00001 diff --git a/Content/NPCs/DuneWyrm/DuneWyrmHead.png b/Content/NPCs/DuneWyrm/DuneWyrmHead.png new file mode 100644 index 0000000000000000000000000000000000000000..f849d2748a0b54d466a7604c7eb3d4c17a89ee64 GIT binary patch literal 5325 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 P002ovPDHLkV1fVu%5{Tk diff --git a/Lib/NPCs/Worm.cs b/Lib/NPCs/Worm.cs index 9771049..673bb9a 100644 --- a/Lib/NPCs/Worm.cs +++ b/Lib/NPCs/Worm.cs @@ -1,7 +1,8 @@ using System; using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; using Terraria; -using Terraria.ID; +using Terraria.Audio; using Terraria.ModLoader; namespace Decimation.Lib.NPCs @@ -25,76 +26,78 @@ namespace Decimation.Lib.NPCs public float speed; public bool tail; public int tailType; + public float turnSpeed; + public LegacySoundStyle undergroundSound; public override void AI() { - if (this.npc.localAI[1] == 0f) + if (npc.localAI[1] == 0f) { - this.npc.localAI[1] = 1f; + npc.localAI[1] = 1f; Init(); } - if (this.npc.ai[3] > 0f) this.npc.realLife = (int)this.npc.ai[3]; - if (!head && this.npc.timeLeft < 300) this.npc.timeLeft = 300; - if (this.npc.target < 0 || this.npc.target == 255 || Main.player[this.npc.target].dead) - this.npc.TargetClosest(); - if (Main.player[this.npc.target].dead && this.npc.timeLeft > 300) this.npc.timeLeft = 300; + if (npc.ai[3] > 0f) npc.realLife = (int) npc.ai[3]; + if (!head && npc.timeLeft < 300) npc.timeLeft = 300; + if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead) + npc.TargetClosest(); + if (Main.player[npc.target].dead && npc.timeLeft > 300) npc.timeLeft = 300; if (Main.netMode != 1) { - if (!tail && this.npc.ai[0] == 0f) + if (!tail && npc.ai[0] == 0f) { if (head) { - this.npc.ai[3] = this.npc.whoAmI; - this.npc.realLife = this.npc.whoAmI; - this.npc.ai[2] = Main.rand.Next(minLength, maxLength + 1); - this.npc.ai[0] = NPC.NewNPC((int)(this.npc.position.X + this.npc.width / 2), - (int)(this.npc.position.Y + this.npc.height), bodyType, this.npc.whoAmI); + npc.ai[3] = npc.whoAmI; + npc.realLife = npc.whoAmI; + npc.ai[2] = Main.rand.Next(minLength, maxLength + 1); + npc.ai[0] = NPC.NewNPC((int) (npc.position.X + npc.width / 2f), + (int) (npc.position.Y + npc.height), bodyType, npc.whoAmI); } - else if (this.npc.ai[2] > 0f) + else if (npc.ai[2] > 0f) { - this.npc.ai[0] = NPC.NewNPC((int)(this.npc.position.X + this.npc.width / 2), - (int)(this.npc.position.Y + this.npc.height), this.npc.type, this.npc.whoAmI); + npc.ai[0] = NPC.NewNPC((int) (npc.position.X + npc.width / 2f), + (int) (npc.position.Y + npc.height), npc.type, npc.whoAmI); } else { - this.npc.ai[0] = NPC.NewNPC((int)(this.npc.position.X + this.npc.width / 2), - (int)(this.npc.position.Y + this.npc.height), tailType, this.npc.whoAmI); + npc.ai[0] = NPC.NewNPC((int) (npc.position.X + npc.width / 2f), + (int) (npc.position.Y + npc.height), tailType, npc.whoAmI); } - Main.npc[(int)this.npc.ai[0]].ai[3] = this.npc.ai[3]; - Main.npc[(int)this.npc.ai[0]].realLife = this.npc.realLife; - Main.npc[(int)this.npc.ai[0]].ai[1] = this.npc.whoAmI; - Main.npc[(int)this.npc.ai[0]].ai[2] = this.npc.ai[2] - 1f; - this.npc.netUpdate = true; + Main.npc[(int) npc.ai[0]].ai[3] = npc.ai[3]; + Main.npc[(int) npc.ai[0]].realLife = npc.realLife; + Main.npc[(int) npc.ai[0]].ai[1] = npc.whoAmI; + Main.npc[(int) npc.ai[0]].ai[2] = npc.ai[2] - 1f; + npc.netUpdate = true; } - if (!head && (!Main.npc[(int)this.npc.ai[1]].active || - Main.npc[(int)this.npc.ai[1]].type != headType && - Main.npc[(int)this.npc.ai[1]].type != bodyType)) + if (!head && (!Main.npc[(int) npc.ai[1]].active || + Main.npc[(int) npc.ai[1]].type != headType && + Main.npc[(int) npc.ai[1]].type != bodyType)) { - this.npc.life = 0; - this.npc.HitEffect(); - this.npc.active = false; + npc.life = 0; + npc.HitEffect(); + npc.active = false; } - if (!tail && (!Main.npc[(int)this.npc.ai[0]].active || - Main.npc[(int)this.npc.ai[0]].type != bodyType && - Main.npc[(int)this.npc.ai[0]].type != tailType)) + if (!tail && (!Main.npc[(int) npc.ai[0]].active || + Main.npc[(int) npc.ai[0]].type != bodyType && + Main.npc[(int) npc.ai[0]].type != tailType)) { - this.npc.life = 0; - this.npc.HitEffect(); - this.npc.active = false; + npc.life = 0; + npc.HitEffect(); + npc.active = false; } - if (!this.npc.active && Main.netMode == 2) NetMessage.SendData(28, -1, -1, null, this.npc.whoAmI, -1f); + if (!npc.active && Main.netMode == 2) NetMessage.SendData(28, -1, -1, null, npc.whoAmI, -1f); } - int num180 = (int)(this.npc.position.X / 16f) - 1; - int num181 = (int)((this.npc.position.X + this.npc.width) / 16f) + 2; - int num182 = (int)(this.npc.position.Y / 16f) - 1; - int num183 = (int)((this.npc.position.Y + this.npc.height) / 16f) + 2; + int num180 = (int) (npc.position.X / 16f) - 1; + int num181 = (int) ((npc.position.X + npc.width) / 16f) + 2; + int num182 = (int) (npc.position.Y / 16f) - 1; + int num183 = (int) ((npc.position.Y + npc.height) / 16f) + 2; if (num180 < 0) num180 = 0; if (num181 > Main.maxTilesX) num181 = Main.maxTilesX; if (num182 < 0) num182 = 0; @@ -102,42 +105,42 @@ namespace Decimation.Lib.NPCs bool flag18 = flies; if (!flag18) for (int num184 = num180; num184 < num181; num184++) - for (int num185 = num182; num185 < num183; num185++) - if (Main.tile[num184, num185] != null && - (Main.tile[num184, num185].nactive() && - (Main.tileSolid[Main.tile[num184, num185].type] || - Main.tileSolidTop[Main.tile[num184, num185].type] && Main.tile[num184, num185].frameY == 0) || - Main.tile[num184, num185].liquid > 64)) + for (int num185 = num182; num185 < num183; num185++) + if (Main.tile[num184, num185] != null && + (Main.tile[num184, num185].nactive() && + (Main.tileSolid[Main.tile[num184, num185].type] || + Main.tileSolidTop[Main.tile[num184, num185].type] && Main.tile[num184, num185].frameY == 0) || + Main.tile[num184, num185].liquid > 64)) + { + Vector2 vector17; + vector17.X = num184 * 16; + vector17.Y = num185 * 16; + if (npc.position.X + npc.width > vector17.X && + npc.position.X < vector17.X + 16f && + npc.position.Y + npc.height > vector17.Y && + npc.position.Y < vector17.Y + 16f) { - Vector2 vector17; - vector17.X = num184 * 16; - vector17.Y = num185 * 16; - if (this.npc.position.X + this.npc.width > vector17.X && - this.npc.position.X < vector17.X + 16f && - this.npc.position.Y + this.npc.height > vector17.Y && - this.npc.position.Y < vector17.Y + 16f) + flag18 = true; + if (Main.rand.NextBool(100) && npc.behindTiles && Main.tile[num184, num185].nactive()) + WorldGen.KillTile(num184, num185, true, true); + if (Main.netMode != 1 && Main.tile[num184, num185].type == 2) { - flag18 = true; - if (Main.rand.NextBool(100) && this.npc.behindTiles && Main.tile[num184, num185].nactive()) - WorldGen.KillTile(num184, num185, true, true); - if (Main.netMode != 1 && Main.tile[num184, num185].type == 2) - { - ushort arg_BFCA_0 = Main.tile[num184, num185 - 1].type; - } + ushort arg_BFCA_0 = Main.tile[num184, num185 - 1].type; } } + } if (!flag18 && head) { - Rectangle rectangle = new Rectangle((int)this.npc.position.X, (int)this.npc.position.Y, - this.npc.width, this.npc.height); + Rectangle rectangle = new Rectangle((int) npc.position.X, (int) npc.position.Y, + npc.width, npc.height); int num186 = 1000; bool flag19 = true; for (int num187 = 0; num187 < 255; num187++) if (Main.player[num187].active) { - Rectangle rectangle2 = new Rectangle((int)Main.player[num187].position.X - num186, - (int)Main.player[num187].position.Y - num186, num186 * 2, num186 * 2); + Rectangle rectangle2 = new Rectangle((int) Main.player[num187].position.X - num186, + (int) Main.player[num187].position.Y - num186, num186 * 2, num186 * 2); if (rectangle.Intersects(rectangle2)) { flag19 = false; @@ -150,94 +153,91 @@ namespace Decimation.Lib.NPCs if (directional) { - if (this.npc.velocity.X < 0f) - this.npc.spriteDirection = 1; - else if (this.npc.velocity.X > 0f) this.npc.spriteDirection = -1; + if (npc.velocity.X < 0f) + npc.spriteDirection = 1; + else if (npc.velocity.X > 0f) npc.spriteDirection = -1; } float num188 = speed; float num189 = turnSpeed; - Vector2 vector18 = new Vector2(this.npc.position.X + this.npc.width * 0.5f, - this.npc.position.Y + this.npc.height * 0.5f); - float num191 = Main.player[this.npc.target].position.X + Main.player[this.npc.target].width / 2; - float num192 = Main.player[this.npc.target].position.Y + Main.player[this.npc.target].height / 2; - num191 = (int)(num191 / 16f) * 16; - num192 = (int)(num192 / 16f) * 16; - vector18.X = (int)(vector18.X / 16f) * 16; - vector18.Y = (int)(vector18.Y / 16f) * 16; + Vector2 vector18 = new Vector2(npc.position.X + npc.width * 0.5f, + npc.position.Y + npc.height * 0.5f); + float num191 = Main.player[npc.target].position.X + Main.player[npc.target].width / 2; + float num192 = Main.player[npc.target].position.Y + Main.player[npc.target].height / 2; + num191 = (int) (num191 / 16f) * 16; + num192 = (int) (num192 / 16f) * 16; + vector18.X = (int) (vector18.X / 16f) * 16; + vector18.Y = (int) (vector18.Y / 16f) * 16; num191 -= vector18.X; num192 -= vector18.Y; - float num193 = (float)Math.Sqrt(num191 * num191 + num192 * num192); - if (this.npc.ai[1] > 0f && this.npc.ai[1] < Main.npc.Length) + float num193 = (float) Math.Sqrt(num191 * num191 + num192 * num192); + if (npc.ai[1] > 0f && npc.ai[1] < Main.npc.Length) { try { - vector18 = new Vector2(this.npc.position.X + this.npc.width * 0.5f, - this.npc.position.Y + this.npc.height * 0.5f); - num191 = Main.npc[(int)this.npc.ai[1]].position.X + Main.npc[(int)this.npc.ai[1]].width / 2 - + vector18 = new Vector2(npc.position.X + npc.width * 0.5f, + npc.position.Y + npc.height * 0.5f); + num191 = Main.npc[(int) npc.ai[1]].position.X + Main.npc[(int) npc.ai[1]].width / 2 - vector18.X; - num192 = Main.npc[(int)this.npc.ai[1]].position.Y + Main.npc[(int)this.npc.ai[1]].height / 2 - + num192 = Main.npc[(int) npc.ai[1]].position.Y + Main.npc[(int) npc.ai[1]].height / 2 - vector18.Y; } catch { } - this.npc.rotation = (float)Math.Atan2(num192, num191) + 1.57f; - num193 = (float)Math.Sqrt(num191 * num191 + num192 * num192); - int num194 = this.npc.width; + npc.rotation = (float) Math.Atan2(num192, num191) + 1.57f; + num193 = (float) Math.Sqrt(num191 * num191 + num192 * num192); + int num194 = npc.width; num193 = (num193 - num194) / num193; num191 *= num193; num192 *= num193; - this.npc.velocity = Vector2.Zero; - this.npc.position.X = this.npc.position.X + num191; - this.npc.position.Y = this.npc.position.Y + num192; + npc.velocity = Vector2.Zero; + npc.position.X = npc.position.X + num191; + npc.position.Y = npc.position.Y + num192; if (directional) { - if (num191 < 0f) this.npc.spriteDirection = 1; - if (num191 > 0f) this.npc.spriteDirection = -1; + if (num191 < 0f) npc.spriteDirection = 1; + if (num191 > 0f) npc.spriteDirection = -1; } } else { if (!flag18) { - this.npc.TargetClosest(); - this.npc.velocity.Y = this.npc.velocity.Y + 0.11f; - if (this.npc.velocity.Y > num188) this.npc.velocity.Y = num188; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < num188 * 0.4) + npc.TargetClosest(); + npc.velocity.Y = npc.velocity.Y + 0.11f; + if (npc.velocity.Y > num188) npc.velocity.Y = num188; + if (Math.Abs(npc.velocity.X) + Math.Abs(npc.velocity.Y) < num188 * 0.4) { - if (this.npc.velocity.X < 0f) - this.npc.velocity.X = this.npc.velocity.X - num189 * 1.1f; + if (npc.velocity.X < 0f) + npc.velocity.X = npc.velocity.X - num189 * 1.1f; else - this.npc.velocity.X = this.npc.velocity.X + num189 * 1.1f; + npc.velocity.X = npc.velocity.X + num189 * 1.1f; } - else if (this.npc.velocity.Y == num188) + else if (npc.velocity.Y == num188) { - if (this.npc.velocity.X < num191) - this.npc.velocity.X = this.npc.velocity.X + num189; - else if (this.npc.velocity.X > num191) this.npc.velocity.X = this.npc.velocity.X - num189; + if (npc.velocity.X < num191) + npc.velocity.X = npc.velocity.X + num189; + else if (npc.velocity.X > num191) npc.velocity.X = npc.velocity.X - num189; } - else if (this.npc.velocity.Y > 4f) + else if (npc.velocity.Y > 4f) { - if (this.npc.velocity.X < 0f) - this.npc.velocity.X = this.npc.velocity.X + num189 * 0.9f; + if (npc.velocity.X < 0f) + npc.velocity.X = npc.velocity.X + num189 * 0.9f; else - this.npc.velocity.X = this.npc.velocity.X - num189 * 0.9f; + npc.velocity.X = npc.velocity.X - num189 * 0.9f; } } else { - if (!flies && this.npc.behindTiles && this.npc.soundDelay == 0) + if (!flies && npc.behindTiles && npc.soundDelay == 0) { - float num195 = num193 / 40f; - if (num195 < 10f) num195 = 10f; - if (num195 > 20f) num195 = 20f; - this.npc.soundDelay = (int)num195; - Main.PlaySound(SoundID.Roar, this.npc.position); + npc.soundDelay = 120; + Main.PlaySound(undergroundSound, npc.position); } - num193 = (float)Math.Sqrt(num191 * num191 + num192 * num192); + num193 = (float) Math.Sqrt(num191 * num191 + num192 * num192); float num196 = Math.Abs(num191); float num197 = Math.Abs(num192); float num198 = num188 / num193; @@ -246,21 +246,21 @@ namespace Decimation.Lib.NPCs if (ShouldRun()) { if (Main.netMode != 1 && - this.npc.position.Y / 16f > (Main.rockLayer + Main.maxTilesY) / 2.0) + npc.position.Y / 16f > (Main.rockLayer + Main.maxTilesY) / 2.0) { - this.npc.active = false; - int num200 = (int)this.npc.ai[0]; + npc.active = false; + int num200 = (int) npc.ai[0]; while (num200 > 0 && num200 < 200 && Main.npc[num200].active && - Main.npc[num200].aiStyle == this.npc.aiStyle) + Main.npc[num200].aiStyle == npc.aiStyle) { - int num201 = (int)Main.npc[num200].ai[0]; + int num201 = (int) Main.npc[num200].ai[0]; Main.npc[num200].active = false; - this.npc.life = 0; + npc.life = 0; if (Main.netMode == 2) NetMessage.SendData(23, -1, -1, null, num200); num200 = num201; } - if (Main.netMode == 2) NetMessage.SendData(23, -1, -1, null, this.npc.whoAmI); + if (Main.netMode == 2) NetMessage.SendData(23, -1, -1, null, npc.whoAmI); } num191 = 0f; @@ -268,131 +268,131 @@ namespace Decimation.Lib.NPCs } bool flag21 = false; - if (this.npc.type == 87) + if (npc.type == 87) { - if ((this.npc.velocity.X > 0f && num191 < 0f || this.npc.velocity.X < 0f && num191 > 0f || - this.npc.velocity.Y > 0f && num192 < 0f || this.npc.velocity.Y < 0f && num192 > 0f) && - Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) > num189 / 2f && + if ((npc.velocity.X > 0f && num191 < 0f || npc.velocity.X < 0f && num191 > 0f || + npc.velocity.Y > 0f && num192 < 0f || npc.velocity.Y < 0f && num192 > 0f) && + Math.Abs(npc.velocity.X) + Math.Abs(npc.velocity.Y) > num189 / 2f && num193 < 300f) { flag21 = true; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < num188) - this.npc.velocity *= 1.1f; + if (Math.Abs(npc.velocity.X) + Math.Abs(npc.velocity.Y) < num188) + npc.velocity *= 1.1f; } - if (this.npc.position.Y > Main.player[this.npc.target].position.Y || - Main.player[this.npc.target].position.Y / 16f > Main.worldSurface || - Main.player[this.npc.target].dead) + if (npc.position.Y > Main.player[npc.target].position.Y || + Main.player[npc.target].position.Y / 16f > Main.worldSurface || + Main.player[npc.target].dead) { flag21 = true; - if (Math.Abs(this.npc.velocity.X) < num188 / 2f) + if (Math.Abs(npc.velocity.X) < num188 / 2f) { - if (this.npc.velocity.X == 0f) - this.npc.velocity.X = this.npc.velocity.X - this.npc.direction; - this.npc.velocity.X = this.npc.velocity.X * 1.1f; + if (npc.velocity.X == 0f) + npc.velocity.X = npc.velocity.X - npc.direction; + npc.velocity.X = npc.velocity.X * 1.1f; } else { - if (this.npc.velocity.Y > -num188) this.npc.velocity.Y = this.npc.velocity.Y - num189; + if (npc.velocity.Y > -num188) npc.velocity.Y = npc.velocity.Y - num189; } } } if (!flag21) { - if (this.npc.velocity.X > 0f && num191 > 0f || this.npc.velocity.X < 0f && num191 < 0f || - this.npc.velocity.Y > 0f && num192 > 0f || this.npc.velocity.Y < 0f && num192 < 0f) + if (npc.velocity.X > 0f && num191 > 0f || npc.velocity.X < 0f && num191 < 0f || + npc.velocity.Y > 0f && num192 > 0f || npc.velocity.Y < 0f && num192 < 0f) { - if (this.npc.velocity.X < num191) + if (npc.velocity.X < num191) { - this.npc.velocity.X = this.npc.velocity.X + num189; + npc.velocity.X = npc.velocity.X + num189; } else { - if (this.npc.velocity.X > num191) this.npc.velocity.X = this.npc.velocity.X - num189; + if (npc.velocity.X > num191) npc.velocity.X = npc.velocity.X - num189; } - if (this.npc.velocity.Y < num192) + if (npc.velocity.Y < num192) { - this.npc.velocity.Y = this.npc.velocity.Y + num189; + npc.velocity.Y = npc.velocity.Y + num189; } else { - if (this.npc.velocity.Y > num192) this.npc.velocity.Y = this.npc.velocity.Y - num189; + if (npc.velocity.Y > num192) npc.velocity.Y = npc.velocity.Y - num189; } if (Math.Abs(num192) < num188 * 0.2 && - (this.npc.velocity.X > 0f && num191 < 0f || this.npc.velocity.X < 0f && num191 > 0f)) + (npc.velocity.X > 0f && num191 < 0f || npc.velocity.X < 0f && num191 > 0f)) { - if (this.npc.velocity.Y > 0f) - this.npc.velocity.Y = this.npc.velocity.Y + num189 * 2f; + if (npc.velocity.Y > 0f) + npc.velocity.Y = npc.velocity.Y + num189 * 2f; else - this.npc.velocity.Y = this.npc.velocity.Y - num189 * 2f; + npc.velocity.Y = npc.velocity.Y - num189 * 2f; } if (Math.Abs(num191) < num188 * 0.2 && - (this.npc.velocity.Y > 0f && num192 < 0f || this.npc.velocity.Y < 0f && num192 > 0f)) + (npc.velocity.Y > 0f && num192 < 0f || npc.velocity.Y < 0f && num192 > 0f)) { - if (this.npc.velocity.X > 0f) - this.npc.velocity.X = this.npc.velocity.X + num189 * 2f; + if (npc.velocity.X > 0f) + npc.velocity.X = npc.velocity.X + num189 * 2f; else - this.npc.velocity.X = this.npc.velocity.X - num189 * 2f; + npc.velocity.X = npc.velocity.X - num189 * 2f; } } else { if (num196 > num197) { - if (this.npc.velocity.X < num191) - this.npc.velocity.X = this.npc.velocity.X + num189 * 1.1f; - else if (this.npc.velocity.X > num191) - this.npc.velocity.X = this.npc.velocity.X - num189 * 1.1f; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < num188 * 0.5) + if (npc.velocity.X < num191) + npc.velocity.X = npc.velocity.X + num189 * 1.1f; + else if (npc.velocity.X > num191) + npc.velocity.X = npc.velocity.X - num189 * 1.1f; + if (Math.Abs(npc.velocity.X) + Math.Abs(npc.velocity.Y) < num188 * 0.5) { - if (this.npc.velocity.Y > 0f) - this.npc.velocity.Y = this.npc.velocity.Y + num189; + if (npc.velocity.Y > 0f) + npc.velocity.Y = npc.velocity.Y + num189; else - this.npc.velocity.Y = this.npc.velocity.Y - num189; + npc.velocity.Y = npc.velocity.Y - num189; } } else { - if (this.npc.velocity.Y < num192) - this.npc.velocity.Y = this.npc.velocity.Y + num189 * 1.1f; - else if (this.npc.velocity.Y > num192) - this.npc.velocity.Y = this.npc.velocity.Y - num189 * 1.1f; - if (Math.Abs(this.npc.velocity.X) + Math.Abs(this.npc.velocity.Y) < num188 * 0.5) + if (npc.velocity.Y < num192) + npc.velocity.Y = npc.velocity.Y + num189 * 1.1f; + else if (npc.velocity.Y > num192) + npc.velocity.Y = npc.velocity.Y - num189 * 1.1f; + if (Math.Abs(npc.velocity.X) + Math.Abs(npc.velocity.Y) < num188 * 0.5) { - if (this.npc.velocity.X > 0f) - this.npc.velocity.X = this.npc.velocity.X + num189; + if (npc.velocity.X > 0f) + npc.velocity.X = npc.velocity.X + num189; else - this.npc.velocity.X = this.npc.velocity.X - num189; + npc.velocity.X = npc.velocity.X - num189; } } } } } - this.npc.rotation = (float)Math.Atan2(this.npc.velocity.Y, this.npc.velocity.X) + 1.57f; + npc.rotation = (float) Math.Atan2(npc.velocity.Y, npc.velocity.X) + 1.57f; if (head) { if (flag18) { - if (this.npc.localAI[0] != 1f) this.npc.netUpdate = true; - this.npc.localAI[0] = 1f; + if (npc.localAI[0] != 1f) npc.netUpdate = true; + npc.localAI[0] = 1f; } else { - if (this.npc.localAI[0] != 0f) this.npc.netUpdate = true; - this.npc.localAI[0] = 0f; + if (npc.localAI[0] != 0f) npc.netUpdate = true; + npc.localAI[0] = 0f; } - if ((this.npc.velocity.X > 0f && this.npc.oldVelocity.X < 0f || - this.npc.velocity.X < 0f && this.npc.oldVelocity.X > 0f || - this.npc.velocity.Y > 0f && this.npc.oldVelocity.Y < 0f || - this.npc.velocity.Y < 0f && this.npc.oldVelocity.Y > 0f) && !this.npc.justHit) + if ((npc.velocity.X > 0f && npc.oldVelocity.X < 0f || + npc.velocity.X < 0f && npc.oldVelocity.X > 0f || + npc.velocity.Y > 0f && npc.oldVelocity.Y < 0f || + npc.velocity.Y < 0f && npc.oldVelocity.Y > 0f) && !npc.justHit) { - this.npc.netUpdate = true; + npc.netUpdate = true; return; } } @@ -416,7 +416,29 @@ namespace Decimation.Lib.NPCs public override bool? DrawHealthBar(byte hbPosition, ref float scale, ref Vector2 position) { - return head ? (bool?)null : false; + return head ? (bool?) null : false; + } + + protected void Draw(String texturePath, SpriteBatch spriteBatch, Color drawColor) + { + Vector2 frameSize = new Vector2(npc.width, npc.height); + Texture2D texture = mod.GetTexture(texturePath); + + spriteBatch.Draw + ( + texture, + new Vector2( + npc.position.X - Main.screenPosition.X + frameSize.X / 2, + npc.position.Y - Main.screenPosition.Y + frameSize.Y / 2 + ), + npc.frame, + drawColor, + npc.rotation, + frameSize * 0.5f, + npc.scale, + SpriteEffects.None, + 0f + ); } } } \ No newline at end of file