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);
            }
        }
Example #3
0
        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;
                //    }
            }
        }