public override void OnHitByAnything(NPC npc, Player player, int damage, float knockback, bool crit) { base.OnHitByAnything(npc, player, damage, knockback, crit); if (npc.ai[0] == 3f) { Vector2 velocity = Vector2.Normalize(Main.player[npc.target].Center - npc.Center) * 4; int p = Projectile.NewProjectile(npc.GetSource_FromThis(), npc.Center, velocity, ProjectileID.Stinger, FargoSoulsUtil.ScaledProjectileDamage(npc.damage), 1, Main.myPlayer); FargoSoulsGlobalProjectile.SplitProj(Main.projectile[p], 12, MathHelper.Pi / 12, 1); } }
public static void BorealSnowballs(FargoSoulsPlayer modPlayer, int damage) { Player player = modPlayer.Player; Vector2 vel = Vector2.Normalize(Main.MouseWorld - player.Center) * 17f; int snowballDamage = damage / 2; if (!modPlayer.TerrariaSoul) { snowballDamage = Math.Min(snowballDamage, FargoSoulsUtil.HighestDamageTypeScaling(player, modPlayer.WoodForce ? 300 : 20)); } int p = Projectile.NewProjectile(player.GetSource_Misc(""), player.Center, vel, ProjectileID.SnowBallFriendly, snowballDamage, 1, Main.myPlayer); int numSnowballs = modPlayer.WoodForce ? 5 : 3; if (p != Main.maxProjectiles) { FargoSoulsGlobalProjectile.SplitProj(Main.projectile[p], numSnowballs, MathHelper.Pi / 10, 1); } }
public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, Vector2 position, Vector2 velocity, int type, int damage, float knockback) { int p = Projectile.NewProjectile(player.GetSource_ItemUse(source.Item), player.Center, velocity, type, damage, knockback, player.whoAmI); float spread = MathHelper.Pi / 8; if (numSpikes == 5) { spread = MathHelper.Pi / 5; } FargoSoulsGlobalProjectile.SplitProj(Main.projectile[p], numSpikes, spread, 1); numSpikes += 2; if (numSpikes > 5) { numSpikes = 3; } return(false); }
public static void AdamantiteSplit(Projectile projectile) { FargoSoulsGlobalProjectile.SplitProj(projectile, 3, MathHelper.ToRadians(8), 1f); }
public override void AI() { Player player = Main.player[Projectile.owner]; FargoSoulsPlayer modPlayer = player.GetModPlayer <FargoSoulsPlayer>(); Projectile.timeLeft++; if (player.dead || !player.active || !modPlayer.SnowEnchantActive) { Projectile.Kill(); } if (player == Main.LocalPlayer) { Projectile.Center = Main.MouseWorld; if (!player.GetToggleValue("Snow")) { Projectile.Kill(); } } //dust int dist = 50; if (modPlayer.NatureForce) { dist = 100; } for (int i = 0; i < 15; i++) { Vector2 offset = new Vector2(); double angle = Main.rand.NextDouble() * 2d * Math.PI; offset.X += (float)(Math.Sin(angle) * Main.rand.Next(dist + 1)); offset.Y += (float)(Math.Cos(angle) * Main.rand.Next(dist + 1)); Dust dust = Main.dust[Dust.NewDust( Projectile.Center + offset - new Vector2(4, 4), 0, 0, 76, 0, 0, 100, Color.White, .75f)]; dust.noGravity = true; } //for (int i = 0; i < 20; i++) //{ // Vector2 offset = new Vector2(); // double angle = Main.rand.NextDouble() * 2d * Math.PI; // offset.X += (float)(Math.Sin(angle) * dist); // offset.Y += (float)(Math.Cos(angle) * dist); // if (!Collision.SolidCollision(Projectile.Center + offset - new Vector2(4, 4), 0, 0)) // { // Dust dust = Main.dust[Dust.NewDust( // Projectile.Center + offset - new Vector2(4, 4), 0, 0, // 76, 0, 0, 100, Color.White, 1f // )]; // dust.velocity = Projectile.velocity; // dust.noGravity = true; // } //} for (int i = 0; i < Main.maxProjectiles; i++) { Projectile proj = Main.projectile[i]; if (proj.active && proj.hostile && proj.damage > 0 && Projectile.Distance(FargoSoulsUtil.ClosestPointInHitbox(proj, Projectile.Center)) < dist && FargoSoulsUtil.CanDeleteProjectile(proj)) { FargoSoulsGlobalProjectile globalProj = proj.GetGlobalProjectile <FargoSoulsGlobalProjectile>(); globalProj.ChilledProj = true; globalProj.ChilledTimer = 15; Projectile.netUpdate = true; } } for (int i = 0; i < Main.maxNPCs; i++) { NPC npc = Main.npc[i]; if (npc.active && !npc.friendly && npc.damage > 0 && Projectile.Distance(FargoSoulsUtil.ClosestPointInHitbox(npc, Projectile.Center)) < dist && !npc.dontTakeDamage) { npc.GetGlobalNPC <FargoSoulsGlobalNPC>().SnowChilled = true; npc.GetGlobalNPC <FargoSoulsGlobalNPC>().SnowChilledTimer = 15; npc.netUpdate = true; } } }
public static void TungstenIncreaseProjSize(Projectile projectile, FargoSoulsPlayer modPlayer, IEntitySource source) { bool canAffect = false; bool hasCD = true; if (TungstenAlwaysAffectProj(projectile)) { canAffect = true; hasCD = false; } else if (FargoSoulsUtil.OnSpawnEnchCanAffectProjectile(projectile, source)) { if (source is EntitySource_ItemUse) { if (modPlayer.TungstenCD == 0) { canAffect = true; } } else if (source is EntitySource_Parent parent && parent.Entity is Projectile sourceProj) { if (sourceProj.GetGlobalProjectile <FargoSoulsGlobalProjectile>().TungstenScale != 1) { canAffect = true; hasCD = false; } else if (sourceProj.minion || sourceProj.sentry || ProjectileID.Sets.IsAWhip[sourceProj.type]) { if (modPlayer.TungstenCD == 0) { canAffect = true; } } } } if (canAffect) { float scale = modPlayer.TerraForce ? 3f : 2f; projectile.position = projectile.Center; projectile.scale *= scale; projectile.width = (int)(projectile.width * scale); projectile.height = (int)(projectile.height * scale); projectile.Center = projectile.position; FargoSoulsGlobalProjectile globalProjectile = projectile.GetGlobalProjectile <FargoSoulsGlobalProjectile>(); globalProjectile.TungstenScale = scale; if (hasCD) { modPlayer.TungstenCD = 30; } if (projectile.aiStyle == ProjAIStyleID.Spear || projectile.aiStyle == ProjAIStyleID.ShortSword) { projectile.velocity *= scale; } // if (modPlayer.Eternity) // { // modPlayer.TungstenCD = 0; // } // else if (modPlayer.TerraForce || modPlayer.WizardEnchant) // { // modPlayer.TungstenCD /= 2; // } } }