From e2f9131c0114fd883d7be3f604355d813def81b9 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sat, 3 Dec 2022 21:55:34 +0100 Subject: [PATCH] you are my vodoo child --- Items/ToclafaneStaff.cs | 40 ++++++++++- Projectiles/Weapons/ToclafaneMinion.cs | 87 ++++++++++++++++++++---- Projectiles/Weapons/ToclafaneMinion.png | Bin 483 -> 5667 bytes 3 files changed, 112 insertions(+), 15 deletions(-) diff --git a/Items/ToclafaneStaff.cs b/Items/ToclafaneStaff.cs index 963dbc0..82a8427 100644 --- a/Items/ToclafaneStaff.cs +++ b/Items/ToclafaneStaff.cs @@ -40,5 +40,43 @@ public class ToclafaneStaff : ModItem { position = Main.MouseWorld; return base.Shoot(player, source, position, velocity, type, damage, knockback); } - + + public override void AddRecipes() { + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddIngredient(ItemID.CopperWatch) + .AddTile(TileID.MythrilAnvil) + .Register(); + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddIngredient(ItemID.TinWatch) + .AddTile(TileID.MythrilAnvil) + .Register(); + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddIngredient(ItemID.SilverWatch) + .AddTile(TileID.MythrilAnvil) + .Register(); + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddIngredient(ItemID.TungstenWatch) + .AddTile(TileID.MythrilAnvil) + .Register(); + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddTile(TileID.MythrilAnvil) + .AddIngredient(ItemID.GoldWatch) + .Register(); + CreateRecipe() + .AddIngredient(ItemID.GuideVoodooDoll, 1) + .AddIngredient(ItemID.HallowedBar, 15) + .AddIngredient(ItemID.PlatinumWatch) + .AddTile(TileID.MythrilAnvil) + .Register(); + } } \ No newline at end of file diff --git a/Projectiles/Weapons/ToclafaneMinion.cs b/Projectiles/Weapons/ToclafaneMinion.cs index 9488b7f..f3532f4 100644 --- a/Projectiles/Weapons/ToclafaneMinion.cs +++ b/Projectiles/Weapons/ToclafaneMinion.cs @@ -10,11 +10,12 @@ namespace YHTMod.Projectiles.Weapons; public class ToclafaneMinion : ModProjectile { private int shootCooldown = 0; + private AttackMode attackMode = AttackMode.RANGED; public override void SetStaticDefaults() { DisplayName.SetDefault("Toclafane Minion"); // Sets the amount of frames this minion has on its spritesheet - Main.projFrames[Projectile.type] = 1; + Main.projFrames[Projectile.type] = 8; // This is necessary for right-click targeting ProjectileID.Sets.MinionTargettingFeature[Projectile.type] = true; @@ -25,6 +26,7 @@ public class ToclafaneMinion : ModProjectile { public sealed override void SetDefaults() { Projectile.width = 32; Projectile.height = 32; + Projectile.scale = 0.65f; Projectile.tileCollide = false; @@ -63,6 +65,8 @@ public class ToclafaneMinion : ModProjectile { shootCooldown = shootCooldown - 1; } + attackMode = AttackMode.RANGED; + Vector2 idlePosition = player.Center; idlePosition.Y -= 48f; @@ -92,7 +96,6 @@ public class ToclafaneMinion : ModProjectile { Math.Abs(Projectile.position.Y - other.position.Y) < Projectile.width) { if (Projectile.position.X < other.position.X) Projectile.velocity.X -= overlapVelocity; else Projectile.velocity.X += overlapVelocity; - if (Projectile.position.Y < other.position.Y) Projectile.velocity.Y -= overlapVelocity; else Projectile.velocity.Y += overlapVelocity; } @@ -159,11 +162,15 @@ public class ToclafaneMinion : ModProjectile { Projectile.velocity = (Projectile.velocity * (inertia - 1) + direction) / inertia; } - if (distanceFromTarget > 80f && shootCooldown == 0) { + if (distanceFromTarget <= 120f) { + attackMode = AttackMode.MELEE; + } + if (distanceFromTarget > 120f && shootCooldown == 0) { shootCooldown = 60; // 1 second between shots - Projectile laser = Projectile.NewProjectileDirect(player.GetSource_FromThis(), Projectile.position, direction, ProjectileID.DeathLaser, 30, Projectile.knockBack, Projectile.owner); + Projectile laser = Projectile.NewProjectileDirect(player.GetSource_FromThis(), Projectile.Center, direction, ProjectileID.DeathLaser, 30, Projectile.knockBack, Projectile.owner); laser.friendly = true; laser.penetrate = 5; + attackMode = AttackMode.RANGED; } } else { @@ -186,8 +193,7 @@ public class ToclafaneMinion : ModProjectile { vectorToIdlePosition.Normalize(); vectorToIdlePosition *= speed; Projectile.velocity = (Projectile.velocity * (inertia - 1) + vectorToIdlePosition) / inertia; - } - else if (Projectile.velocity == Vector2.Zero) { + } else if (Projectile.velocity == Vector2.Zero) { // If there is a case where it's not moving at all, give it a little "poke" Projectile.velocity.X = -0.15f; Projectile.velocity.Y = -0.05f; @@ -200,21 +206,74 @@ public class ToclafaneMinion : ModProjectile { // So it will lean slightly towards the direction it's moving Projectile.rotation = Projectile.velocity.X * 0.05f; - - // This is a simple "loop through all frames from top to bottom" animation - int frameSpeed = 5; + + int frameSpeed = 8; Projectile.frameCounter++; if (Projectile.frameCounter >= frameSpeed) { Projectile.frameCounter = 0; - Projectile.frame++; - if (Projectile.frame >= Main.projFrames[Projectile.type]) { - Projectile.frame = 0; + if (attackMode == AttackMode.MELEE) { + switch (Projectile.frame) { + case 0: + Projectile.frame++; + break; + case 1: + Projectile.frame++; + break; + case 2: + Projectile.frame++; + break; + case 3: + Projectile.frame = 0; + break; + case 4: + Projectile.frame = 1; + break; + case 5: + Projectile.frame = 2; + break; + case 6: + Projectile.frame = 3; + break; + case 7: + Projectile.frame = 4; + break; + } + } + if (attackMode == AttackMode.RANGED) { + switch (Projectile.frame) { + case 0: + Projectile.frame = 5; + break; + case 1: + Projectile.frame = 6; + break; + case 2: + Projectile.frame = 7; + break; + case 3: + Projectile.frame = 4; + break; + case 4: + Projectile.frame++; + break; + case 5: + Projectile.frame++; + break; + case 6: + Projectile.frame++; + break; + case 7: + Projectile.frame = 4; + break; + } } } - - // Some visuals here Lighting.AddLight(Projectile.Center, Color.White.ToVector3() * 0.78f); #endregion } + + enum AttackMode { + MELEE, RANGED + } } \ No newline at end of file diff --git a/Projectiles/Weapons/ToclafaneMinion.png b/Projectiles/Weapons/ToclafaneMinion.png index 0f32619c286a07aa809bcdf681c895a50b9cd2b9..70541be1d62bcee46c4da8023d75ba83052b1327 100644 GIT binary patch literal 5667 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 literal 483 zcmV<90UZ8`P)Px$ok>JNR9J=WRy%IPFbt)Ojy^;>3UJO6FAfZ7$YlbgL$9HwS<~ z!P2BYc837%1A;_9z88K(0sM7TYYy$3W&!~Cyx-wvx0~k&?~Cm{m25tC-Gtk^)GHgQs841^GX&jA305a#_k9!YutjY*^w(pru;q5`Oa5CRxul0rCQAxjG2L?MJ( z2nPy7k<$4h0o3*MI|p23%nLVyivoD5(abJIDi=fnTKRF2F~Ko=Ndfd=iLo_M@9Nn7kH2|0=;H}z7&@u6)O zHmtSP4*?qLx-NQPaE#*^<;Z$MNuiJujj!iCNRlri=iG$u0sz$;RMh+Rn*BD6Rskc2 z!Taje_ly1j@E!A0-^1X2CFN5wG$U{4vud2KZ4$ADe65H@2)Ns~z*_q|;n<3Y5b=+P Z#TT8J61Y|&t#<$b002ovPDHLkV1mX9(z*Zu